tinybase 5.0.0-beta.5 → 5.0.0-beta.7

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 (398) hide show
  1. package/lib/cjs/mergeable-store.cjs +1 -1
  2. package/lib/cjs/mergeable-store.cjs.gz +0 -0
  3. package/lib/cjs/persisters/persister-automerge.cjs +1 -1
  4. package/lib/cjs/persisters/persister-automerge.cjs.gz +0 -0
  5. package/lib/cjs/persisters/persister-browser.cjs +1 -1
  6. package/lib/cjs/persisters/persister-browser.cjs.gz +0 -0
  7. package/lib/cjs/persisters/persister-cr-sqlite-wasm.cjs +1 -1
  8. package/lib/cjs/persisters/persister-cr-sqlite-wasm.cjs.gz +0 -0
  9. package/lib/cjs/persisters/persister-electric-sql.cjs +1 -1
  10. package/lib/cjs/persisters/persister-electric-sql.cjs.gz +0 -0
  11. package/lib/cjs/persisters/persister-expo-sqlite-next.cjs +1 -1
  12. package/lib/cjs/persisters/persister-expo-sqlite-next.cjs.gz +0 -0
  13. package/lib/cjs/persisters/persister-expo-sqlite.cjs +1 -1
  14. package/lib/cjs/persisters/persister-expo-sqlite.cjs.gz +0 -0
  15. package/lib/cjs/persisters/persister-file.cjs +1 -1
  16. package/lib/cjs/persisters/persister-file.cjs.gz +0 -0
  17. package/lib/cjs/persisters/persister-indexed-db.cjs +1 -1
  18. package/lib/cjs/persisters/persister-indexed-db.cjs.gz +0 -0
  19. package/lib/cjs/persisters/persister-libsql.cjs +1 -1
  20. package/lib/cjs/persisters/persister-libsql.cjs.gz +0 -0
  21. package/lib/cjs/persisters/persister-partykit-client.cjs +1 -1
  22. package/lib/cjs/persisters/persister-partykit-client.cjs.gz +0 -0
  23. package/lib/cjs/persisters/persister-powersync.cjs +1 -0
  24. package/lib/cjs/persisters/persister-powersync.cjs.gz +0 -0
  25. package/lib/cjs/persisters/persister-remote.cjs +1 -1
  26. package/lib/cjs/persisters/persister-remote.cjs.gz +0 -0
  27. package/lib/cjs/persisters/persister-sqlite-wasm.cjs +1 -1
  28. package/lib/cjs/persisters/persister-sqlite-wasm.cjs.gz +0 -0
  29. package/lib/cjs/persisters/persister-sqlite3.cjs +1 -1
  30. package/lib/cjs/persisters/persister-sqlite3.cjs.gz +0 -0
  31. package/lib/cjs/persisters/persister-yjs.cjs +1 -1
  32. package/lib/cjs/persisters/persister-yjs.cjs.gz +0 -0
  33. package/lib/cjs/persisters.cjs +1 -1
  34. package/lib/cjs/persisters.cjs.gz +0 -0
  35. package/lib/cjs/store.cjs +1 -1
  36. package/lib/cjs/store.cjs.gz +0 -0
  37. package/lib/cjs/synchronizers/synchronizer-local.cjs +1 -0
  38. package/lib/cjs/synchronizers/synchronizer-local.cjs.gz +0 -0
  39. package/lib/cjs/synchronizers/synchronizer-ws-client.cjs +1 -0
  40. package/lib/cjs/synchronizers/synchronizer-ws-client.cjs.gz +0 -0
  41. package/lib/cjs/synchronizers/synchronizer-ws-server.cjs +1 -0
  42. package/lib/cjs/synchronizers/synchronizer-ws-server.cjs.gz +0 -0
  43. package/lib/cjs/synchronizers.cjs +1 -0
  44. package/lib/cjs/synchronizers.cjs.gz +0 -0
  45. package/lib/cjs/tinybase.cjs +1 -1
  46. package/lib/cjs/tinybase.cjs.gz +0 -0
  47. package/lib/cjs/tools.cjs +1 -1
  48. package/lib/cjs/tools.cjs.gz +0 -0
  49. package/lib/cjs/ui-react-dom-debug.cjs +1 -1
  50. package/lib/cjs/ui-react-dom-debug.cjs.gz +0 -0
  51. package/lib/cjs/ui-react.cjs +1 -1
  52. package/lib/cjs/ui-react.cjs.gz +0 -0
  53. package/lib/cjs-es6/mergeable-store.cjs +1 -1
  54. package/lib/cjs-es6/mergeable-store.cjs.gz +0 -0
  55. package/lib/cjs-es6/persisters/persister-automerge.cjs +1 -1
  56. package/lib/cjs-es6/persisters/persister-automerge.cjs.gz +0 -0
  57. package/lib/cjs-es6/persisters/persister-browser.cjs +1 -1
  58. package/lib/cjs-es6/persisters/persister-browser.cjs.gz +0 -0
  59. package/lib/cjs-es6/persisters/persister-cr-sqlite-wasm.cjs +1 -1
  60. package/lib/cjs-es6/persisters/persister-cr-sqlite-wasm.cjs.gz +0 -0
  61. package/lib/cjs-es6/persisters/persister-electric-sql.cjs +1 -1
  62. package/lib/cjs-es6/persisters/persister-electric-sql.cjs.gz +0 -0
  63. package/lib/cjs-es6/persisters/persister-expo-sqlite-next.cjs +1 -1
  64. package/lib/cjs-es6/persisters/persister-expo-sqlite-next.cjs.gz +0 -0
  65. package/lib/cjs-es6/persisters/persister-expo-sqlite.cjs +1 -1
  66. package/lib/cjs-es6/persisters/persister-expo-sqlite.cjs.gz +0 -0
  67. package/lib/cjs-es6/persisters/persister-file.cjs +1 -1
  68. package/lib/cjs-es6/persisters/persister-file.cjs.gz +0 -0
  69. package/lib/cjs-es6/persisters/persister-indexed-db.cjs +1 -1
  70. package/lib/cjs-es6/persisters/persister-indexed-db.cjs.gz +0 -0
  71. package/lib/cjs-es6/persisters/persister-libsql.cjs +1 -1
  72. package/lib/cjs-es6/persisters/persister-libsql.cjs.gz +0 -0
  73. package/lib/cjs-es6/persisters/persister-partykit-client.cjs +1 -1
  74. package/lib/cjs-es6/persisters/persister-partykit-client.cjs.gz +0 -0
  75. package/lib/cjs-es6/persisters/persister-powersync.cjs +1 -0
  76. package/lib/cjs-es6/persisters/persister-powersync.cjs.gz +0 -0
  77. package/lib/cjs-es6/persisters/persister-remote.cjs +1 -1
  78. package/lib/cjs-es6/persisters/persister-remote.cjs.gz +0 -0
  79. package/lib/cjs-es6/persisters/persister-sqlite-wasm.cjs +1 -1
  80. package/lib/cjs-es6/persisters/persister-sqlite-wasm.cjs.gz +0 -0
  81. package/lib/cjs-es6/persisters/persister-sqlite3.cjs +1 -1
  82. package/lib/cjs-es6/persisters/persister-sqlite3.cjs.gz +0 -0
  83. package/lib/cjs-es6/persisters/persister-yjs.cjs +1 -1
  84. package/lib/cjs-es6/persisters/persister-yjs.cjs.gz +0 -0
  85. package/lib/cjs-es6/persisters.cjs +1 -1
  86. package/lib/cjs-es6/persisters.cjs.gz +0 -0
  87. package/lib/cjs-es6/store.cjs +1 -1
  88. package/lib/cjs-es6/store.cjs.gz +0 -0
  89. package/lib/cjs-es6/synchronizers/synchronizer-local.cjs +1 -0
  90. package/lib/cjs-es6/synchronizers/synchronizer-local.cjs.gz +0 -0
  91. package/lib/cjs-es6/synchronizers/synchronizer-ws-client.cjs +1 -0
  92. package/lib/cjs-es6/synchronizers/synchronizer-ws-client.cjs.gz +0 -0
  93. package/lib/cjs-es6/synchronizers/synchronizer-ws-server.cjs +1 -0
  94. package/lib/cjs-es6/synchronizers/synchronizer-ws-server.cjs.gz +0 -0
  95. package/lib/cjs-es6/synchronizers.cjs +1 -0
  96. package/lib/cjs-es6/synchronizers.cjs.gz +0 -0
  97. package/lib/cjs-es6/tinybase.cjs +1 -1
  98. package/lib/cjs-es6/tinybase.cjs.gz +0 -0
  99. package/lib/cjs-es6/tools.cjs +1 -1
  100. package/lib/cjs-es6/tools.cjs.gz +0 -0
  101. package/lib/cjs-es6/ui-react-dom-debug.cjs +1 -1
  102. package/lib/cjs-es6/ui-react-dom-debug.cjs.gz +0 -0
  103. package/lib/cjs-es6/ui-react.cjs +1 -1
  104. package/lib/cjs-es6/ui-react.cjs.gz +0 -0
  105. package/lib/debug/mergeable-store.js +287 -130
  106. package/lib/debug/persisters/persister-automerge.js +39 -46
  107. package/lib/debug/persisters/persister-browser.js +39 -46
  108. package/lib/debug/persisters/persister-cr-sqlite-wasm.js +64 -60
  109. package/lib/debug/persisters/persister-electric-sql.js +64 -60
  110. package/lib/debug/persisters/persister-expo-sqlite-next.js +64 -60
  111. package/lib/debug/persisters/persister-expo-sqlite.js +64 -60
  112. package/lib/debug/persisters/persister-file.js +39 -46
  113. package/lib/debug/persisters/persister-indexed-db.js +39 -46
  114. package/lib/debug/persisters/persister-libsql.js +64 -60
  115. package/lib/debug/persisters/persister-partykit-client.js +39 -46
  116. package/lib/debug/persisters/persister-powersync.js +917 -0
  117. package/lib/debug/persisters/persister-remote.js +39 -46
  118. package/lib/debug/persisters/persister-sqlite-wasm.js +64 -60
  119. package/lib/debug/persisters/persister-sqlite3.js +64 -60
  120. package/lib/debug/persisters/persister-yjs.js +41 -48
  121. package/lib/debug/persisters.js +38 -45
  122. package/lib/debug/store.js +44 -32
  123. package/lib/debug/synchronizers/synchronizer-local.js +502 -0
  124. package/lib/debug/synchronizers/synchronizer-ws-client.js +525 -0
  125. package/lib/debug/synchronizers/synchronizer-ws-server.js +57 -0
  126. package/lib/debug/synchronizers.js +466 -0
  127. package/lib/debug/tinybase.js +569 -250
  128. package/lib/debug/tools.js +2 -2
  129. package/lib/debug/ui-react-dom.js +81 -76
  130. package/lib/debug/ui-react.js +1 -1
  131. package/lib/es6/mergeable-store.js +1 -1
  132. package/lib/es6/mergeable-store.js.gz +0 -0
  133. package/lib/es6/persisters/persister-automerge.js +1 -1
  134. package/lib/es6/persisters/persister-automerge.js.gz +0 -0
  135. package/lib/es6/persisters/persister-browser.js +1 -1
  136. package/lib/es6/persisters/persister-browser.js.gz +0 -0
  137. package/lib/es6/persisters/persister-cr-sqlite-wasm.js +1 -1
  138. package/lib/es6/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  139. package/lib/es6/persisters/persister-electric-sql.js +1 -1
  140. package/lib/es6/persisters/persister-electric-sql.js.gz +0 -0
  141. package/lib/es6/persisters/persister-expo-sqlite-next.js +1 -1
  142. package/lib/es6/persisters/persister-expo-sqlite-next.js.gz +0 -0
  143. package/lib/es6/persisters/persister-expo-sqlite.js +1 -1
  144. package/lib/es6/persisters/persister-expo-sqlite.js.gz +0 -0
  145. package/lib/es6/persisters/persister-file.js +1 -1
  146. package/lib/es6/persisters/persister-file.js.gz +0 -0
  147. package/lib/es6/persisters/persister-indexed-db.js +1 -1
  148. package/lib/es6/persisters/persister-indexed-db.js.gz +0 -0
  149. package/lib/es6/persisters/persister-libsql.js +1 -1
  150. package/lib/es6/persisters/persister-libsql.js.gz +0 -0
  151. package/lib/es6/persisters/persister-partykit-client.js +1 -1
  152. package/lib/es6/persisters/persister-partykit-client.js.gz +0 -0
  153. package/lib/es6/persisters/persister-powersync.js +1 -0
  154. package/lib/es6/persisters/persister-powersync.js.gz +0 -0
  155. package/lib/es6/persisters/persister-remote.js +1 -1
  156. package/lib/es6/persisters/persister-remote.js.gz +0 -0
  157. package/lib/es6/persisters/persister-sqlite-wasm.js +1 -1
  158. package/lib/es6/persisters/persister-sqlite-wasm.js.gz +0 -0
  159. package/lib/es6/persisters/persister-sqlite3.js +1 -1
  160. package/lib/es6/persisters/persister-sqlite3.js.gz +0 -0
  161. package/lib/es6/persisters/persister-yjs.js +1 -1
  162. package/lib/es6/persisters/persister-yjs.js.gz +0 -0
  163. package/lib/es6/persisters.js +1 -1
  164. package/lib/es6/persisters.js.gz +0 -0
  165. package/lib/es6/store.js +1 -1
  166. package/lib/es6/store.js.gz +0 -0
  167. package/lib/es6/synchronizers/synchronizer-local.js +1 -0
  168. package/lib/es6/synchronizers/synchronizer-local.js.gz +0 -0
  169. package/lib/es6/synchronizers/synchronizer-ws-client.js +1 -0
  170. package/lib/es6/synchronizers/synchronizer-ws-client.js.gz +0 -0
  171. package/lib/es6/synchronizers/synchronizer-ws-server.js +1 -0
  172. package/lib/es6/synchronizers/synchronizer-ws-server.js.gz +0 -0
  173. package/lib/es6/synchronizers.js +1 -0
  174. package/lib/es6/synchronizers.js.gz +0 -0
  175. package/lib/es6/tinybase.js +1 -1
  176. package/lib/es6/tinybase.js.gz +0 -0
  177. package/lib/es6/tools.js +1 -1
  178. package/lib/es6/tools.js.gz +0 -0
  179. package/lib/es6/ui-react-dom-debug.js +1 -1
  180. package/lib/es6/ui-react-dom-debug.js.gz +0 -0
  181. package/lib/es6/ui-react.js +1 -1
  182. package/lib/es6/ui-react.js.gz +0 -0
  183. package/lib/mergeable-store.js +1 -1
  184. package/lib/mergeable-store.js.gz +0 -0
  185. package/lib/persisters/persister-automerge.js +1 -1
  186. package/lib/persisters/persister-automerge.js.gz +0 -0
  187. package/lib/persisters/persister-browser.js +1 -1
  188. package/lib/persisters/persister-browser.js.gz +0 -0
  189. package/lib/persisters/persister-cr-sqlite-wasm.js +1 -1
  190. package/lib/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  191. package/lib/persisters/persister-electric-sql.js +1 -1
  192. package/lib/persisters/persister-electric-sql.js.gz +0 -0
  193. package/lib/persisters/persister-expo-sqlite-next.js +1 -1
  194. package/lib/persisters/persister-expo-sqlite-next.js.gz +0 -0
  195. package/lib/persisters/persister-expo-sqlite.js +1 -1
  196. package/lib/persisters/persister-expo-sqlite.js.gz +0 -0
  197. package/lib/persisters/persister-file.js +1 -1
  198. package/lib/persisters/persister-file.js.gz +0 -0
  199. package/lib/persisters/persister-indexed-db.js +1 -1
  200. package/lib/persisters/persister-indexed-db.js.gz +0 -0
  201. package/lib/persisters/persister-libsql.js +1 -1
  202. package/lib/persisters/persister-libsql.js.gz +0 -0
  203. package/lib/persisters/persister-partykit-client.js +1 -1
  204. package/lib/persisters/persister-partykit-client.js.gz +0 -0
  205. package/lib/persisters/persister-powersync.js +1 -0
  206. package/lib/persisters/persister-powersync.js.gz +0 -0
  207. package/lib/persisters/persister-remote.js +1 -1
  208. package/lib/persisters/persister-remote.js.gz +0 -0
  209. package/lib/persisters/persister-sqlite-wasm.js +1 -1
  210. package/lib/persisters/persister-sqlite-wasm.js.gz +0 -0
  211. package/lib/persisters/persister-sqlite3.js +1 -1
  212. package/lib/persisters/persister-sqlite3.js.gz +0 -0
  213. package/lib/persisters/persister-yjs.js +1 -1
  214. package/lib/persisters/persister-yjs.js.gz +0 -0
  215. package/lib/persisters.js +1 -1
  216. package/lib/persisters.js.gz +0 -0
  217. package/lib/store.js +1 -1
  218. package/lib/store.js.gz +0 -0
  219. package/lib/synchronizers/synchronizer-local.js +1 -0
  220. package/lib/synchronizers/synchronizer-local.js.gz +0 -0
  221. package/lib/synchronizers/synchronizer-ws-client.js +1 -0
  222. package/lib/synchronizers/synchronizer-ws-client.js.gz +0 -0
  223. package/lib/synchronizers/synchronizer-ws-server.js +1 -0
  224. package/lib/synchronizers/synchronizer-ws-server.js.gz +0 -0
  225. package/lib/synchronizers.js +1 -0
  226. package/lib/synchronizers.js.gz +0 -0
  227. package/lib/tinybase.js +1 -1
  228. package/lib/tinybase.js.gz +0 -0
  229. package/lib/tools.js +1 -1
  230. package/lib/tools.js.gz +0 -0
  231. package/lib/types/checkpoints.d.ts +2 -2
  232. package/lib/types/indexes.d.ts +2 -2
  233. package/lib/types/mergeable-store.d.ts +121 -59
  234. package/lib/types/metrics.d.ts +2 -2
  235. package/lib/types/persisters/persister-automerge.d.ts +3 -0
  236. package/lib/types/persisters/persister-browser.d.ts +9 -2
  237. package/lib/types/persisters/persister-cr-sqlite-wasm.d.ts +3 -0
  238. package/lib/types/persisters/persister-electric-sql.d.ts +3 -0
  239. package/lib/types/persisters/persister-expo-sqlite-next.d.ts +3 -0
  240. package/lib/types/persisters/persister-expo-sqlite.d.ts +3 -0
  241. package/lib/types/persisters/persister-file.d.ts +5 -1
  242. package/lib/types/persisters/persister-indexed-db.d.ts +3 -0
  243. package/lib/types/persisters/persister-libsql.d.ts +3 -0
  244. package/lib/types/persisters/persister-partykit-client.d.ts +3 -0
  245. package/lib/types/persisters/persister-powersync.d.ts +157 -0
  246. package/lib/types/persisters/persister-remote.d.ts +3 -0
  247. package/lib/types/persisters/persister-sqlite-wasm.d.ts +3 -0
  248. package/lib/types/persisters/persister-sqlite3.d.ts +3 -0
  249. package/lib/types/persisters/persister-yjs.d.ts +5 -2
  250. package/lib/types/persisters.d.ts +68 -19
  251. package/lib/types/queries.d.ts +2 -2
  252. package/lib/types/relationships.d.ts +2 -2
  253. package/lib/types/store.d.ts +36 -3
  254. package/lib/types/synchronizers/synchronizer-local.d.ts +27 -0
  255. package/lib/types/synchronizers/synchronizer-ws-client.d.ts +30 -0
  256. package/lib/types/synchronizers/synchronizer-ws-server.d.ts +24 -0
  257. package/lib/types/synchronizers.d.ts +131 -0
  258. package/lib/types/tinybase.d.ts +10 -9
  259. package/lib/types/tools.d.ts +2 -2
  260. package/lib/types/ui-react.d.ts +8 -8
  261. package/lib/types/with-schemas/checkpoints.d.ts +2 -2
  262. package/lib/types/with-schemas/indexes.d.ts +2 -2
  263. package/lib/types/with-schemas/mergeable-store.d.ts +185 -87
  264. package/lib/types/with-schemas/metrics.d.ts +2 -2
  265. package/lib/types/with-schemas/persisters/persister-automerge.d.ts +4 -1
  266. package/lib/types/with-schemas/persisters/persister-browser.d.ts +13 -6
  267. package/lib/types/with-schemas/persisters/persister-cr-sqlite-wasm.d.ts +4 -1
  268. package/lib/types/with-schemas/persisters/persister-electric-sql.d.ts +4 -1
  269. package/lib/types/with-schemas/persisters/persister-expo-sqlite-next.d.ts +4 -1
  270. package/lib/types/with-schemas/persisters/persister-expo-sqlite.d.ts +4 -1
  271. package/lib/types/with-schemas/persisters/persister-file.d.ts +7 -3
  272. package/lib/types/with-schemas/persisters/persister-indexed-db.d.ts +4 -1
  273. package/lib/types/with-schemas/persisters/persister-libsql.d.ts +4 -1
  274. package/lib/types/with-schemas/persisters/persister-partykit-client.d.ts +4 -1
  275. package/lib/types/with-schemas/persisters/persister-powersync.d.ts +170 -0
  276. package/lib/types/with-schemas/persisters/persister-remote.d.ts +4 -1
  277. package/lib/types/with-schemas/persisters/persister-sqlite-wasm.d.ts +4 -1
  278. package/lib/types/with-schemas/persisters/persister-sqlite3.d.ts +4 -1
  279. package/lib/types/with-schemas/persisters/persister-yjs.d.ts +6 -3
  280. package/lib/types/with-schemas/persisters.d.ts +90 -62
  281. package/lib/types/with-schemas/queries.d.ts +3 -3
  282. package/lib/types/with-schemas/relationships.d.ts +2 -2
  283. package/lib/types/with-schemas/store.d.ts +100 -3
  284. package/lib/types/with-schemas/synchronizers/synchronizer-local.d.ts +29 -0
  285. package/lib/types/with-schemas/synchronizers/synchronizer-ws-client.d.ts +32 -0
  286. package/lib/types/with-schemas/synchronizers/synchronizer-ws-server.d.ts +24 -0
  287. package/lib/types/with-schemas/synchronizers.d.ts +146 -0
  288. package/lib/types/with-schemas/tinybase.d.ts +9 -9
  289. package/lib/types/with-schemas/tools.d.ts +2 -2
  290. package/lib/types/with-schemas/ui-react.d.ts +8 -8
  291. package/lib/ui-react.js +1 -1
  292. package/lib/ui-react.js.gz +0 -0
  293. package/lib/umd/mergeable-store.js +1 -1
  294. package/lib/umd/mergeable-store.js.gz +0 -0
  295. package/lib/umd/persisters/persister-automerge.js +1 -1
  296. package/lib/umd/persisters/persister-automerge.js.gz +0 -0
  297. package/lib/umd/persisters/persister-browser.js +1 -1
  298. package/lib/umd/persisters/persister-browser.js.gz +0 -0
  299. package/lib/umd/persisters/persister-cr-sqlite-wasm.js +1 -1
  300. package/lib/umd/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  301. package/lib/umd/persisters/persister-electric-sql.js +1 -1
  302. package/lib/umd/persisters/persister-electric-sql.js.gz +0 -0
  303. package/lib/umd/persisters/persister-expo-sqlite-next.js +1 -1
  304. package/lib/umd/persisters/persister-expo-sqlite-next.js.gz +0 -0
  305. package/lib/umd/persisters/persister-expo-sqlite.js +1 -1
  306. package/lib/umd/persisters/persister-expo-sqlite.js.gz +0 -0
  307. package/lib/umd/persisters/persister-file.js +1 -1
  308. package/lib/umd/persisters/persister-file.js.gz +0 -0
  309. package/lib/umd/persisters/persister-indexed-db.js +1 -1
  310. package/lib/umd/persisters/persister-indexed-db.js.gz +0 -0
  311. package/lib/umd/persisters/persister-libsql.js +1 -1
  312. package/lib/umd/persisters/persister-libsql.js.gz +0 -0
  313. package/lib/umd/persisters/persister-partykit-client.js +1 -1
  314. package/lib/umd/persisters/persister-partykit-client.js.gz +0 -0
  315. package/lib/umd/persisters/persister-powersync.js +1 -0
  316. package/lib/umd/persisters/persister-powersync.js.gz +0 -0
  317. package/lib/umd/persisters/persister-remote.js +1 -1
  318. package/lib/umd/persisters/persister-remote.js.gz +0 -0
  319. package/lib/umd/persisters/persister-sqlite-wasm.js +1 -1
  320. package/lib/umd/persisters/persister-sqlite-wasm.js.gz +0 -0
  321. package/lib/umd/persisters/persister-sqlite3.js +1 -1
  322. package/lib/umd/persisters/persister-sqlite3.js.gz +0 -0
  323. package/lib/umd/persisters/persister-yjs.js +1 -1
  324. package/lib/umd/persisters/persister-yjs.js.gz +0 -0
  325. package/lib/umd/persisters.js +1 -1
  326. package/lib/umd/persisters.js.gz +0 -0
  327. package/lib/umd/store.js +1 -1
  328. package/lib/umd/store.js.gz +0 -0
  329. package/lib/umd/synchronizers/synchronizer-local.js +1 -0
  330. package/lib/umd/synchronizers/synchronizer-local.js.gz +0 -0
  331. package/lib/umd/synchronizers/synchronizer-ws-client.js +1 -0
  332. package/lib/umd/synchronizers/synchronizer-ws-client.js.gz +0 -0
  333. package/lib/umd/synchronizers/synchronizer-ws-server.js +1 -0
  334. package/lib/umd/synchronizers/synchronizer-ws-server.js.gz +0 -0
  335. package/lib/umd/synchronizers.js +1 -0
  336. package/lib/umd/synchronizers.js.gz +0 -0
  337. package/lib/umd/tinybase.js +1 -1
  338. package/lib/umd/tinybase.js.gz +0 -0
  339. package/lib/umd/tools.js +1 -1
  340. package/lib/umd/tools.js.gz +0 -0
  341. package/lib/umd/ui-react-dom-debug.js +1 -1
  342. package/lib/umd/ui-react-dom-debug.js.gz +0 -0
  343. package/lib/umd/ui-react.js +1 -1
  344. package/lib/umd/ui-react.js.gz +0 -0
  345. package/lib/umd-es6/mergeable-store.js +1 -1
  346. package/lib/umd-es6/mergeable-store.js.gz +0 -0
  347. package/lib/umd-es6/persisters/persister-automerge.js +1 -1
  348. package/lib/umd-es6/persisters/persister-automerge.js.gz +0 -0
  349. package/lib/umd-es6/persisters/persister-browser.js +1 -1
  350. package/lib/umd-es6/persisters/persister-browser.js.gz +0 -0
  351. package/lib/umd-es6/persisters/persister-cr-sqlite-wasm.js +1 -1
  352. package/lib/umd-es6/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  353. package/lib/umd-es6/persisters/persister-electric-sql.js +1 -1
  354. package/lib/umd-es6/persisters/persister-electric-sql.js.gz +0 -0
  355. package/lib/umd-es6/persisters/persister-expo-sqlite-next.js +1 -1
  356. package/lib/umd-es6/persisters/persister-expo-sqlite-next.js.gz +0 -0
  357. package/lib/umd-es6/persisters/persister-expo-sqlite.js +1 -1
  358. package/lib/umd-es6/persisters/persister-expo-sqlite.js.gz +0 -0
  359. package/lib/umd-es6/persisters/persister-file.js +1 -1
  360. package/lib/umd-es6/persisters/persister-file.js.gz +0 -0
  361. package/lib/umd-es6/persisters/persister-indexed-db.js +1 -1
  362. package/lib/umd-es6/persisters/persister-indexed-db.js.gz +0 -0
  363. package/lib/umd-es6/persisters/persister-libsql.js +1 -1
  364. package/lib/umd-es6/persisters/persister-libsql.js.gz +0 -0
  365. package/lib/umd-es6/persisters/persister-partykit-client.js +1 -1
  366. package/lib/umd-es6/persisters/persister-partykit-client.js.gz +0 -0
  367. package/lib/umd-es6/persisters/persister-powersync.js +1 -0
  368. package/lib/umd-es6/persisters/persister-powersync.js.gz +0 -0
  369. package/lib/umd-es6/persisters/persister-remote.js +1 -1
  370. package/lib/umd-es6/persisters/persister-remote.js.gz +0 -0
  371. package/lib/umd-es6/persisters/persister-sqlite-wasm.js +1 -1
  372. package/lib/umd-es6/persisters/persister-sqlite-wasm.js.gz +0 -0
  373. package/lib/umd-es6/persisters/persister-sqlite3.js +1 -1
  374. package/lib/umd-es6/persisters/persister-sqlite3.js.gz +0 -0
  375. package/lib/umd-es6/persisters/persister-yjs.js +1 -1
  376. package/lib/umd-es6/persisters/persister-yjs.js.gz +0 -0
  377. package/lib/umd-es6/persisters.js +1 -1
  378. package/lib/umd-es6/persisters.js.gz +0 -0
  379. package/lib/umd-es6/store.js +1 -1
  380. package/lib/umd-es6/store.js.gz +0 -0
  381. package/lib/umd-es6/synchronizers/synchronizer-local.js +1 -0
  382. package/lib/umd-es6/synchronizers/synchronizer-local.js.gz +0 -0
  383. package/lib/umd-es6/synchronizers/synchronizer-ws-client.js +1 -0
  384. package/lib/umd-es6/synchronizers/synchronizer-ws-client.js.gz +0 -0
  385. package/lib/umd-es6/synchronizers/synchronizer-ws-server.js +1 -0
  386. package/lib/umd-es6/synchronizers/synchronizer-ws-server.js.gz +0 -0
  387. package/lib/umd-es6/synchronizers.js +1 -0
  388. package/lib/umd-es6/synchronizers.js.gz +0 -0
  389. package/lib/umd-es6/tinybase.js +1 -1
  390. package/lib/umd-es6/tinybase.js.gz +0 -0
  391. package/lib/umd-es6/tools.js +1 -1
  392. package/lib/umd-es6/tools.js.gz +0 -0
  393. package/lib/umd-es6/ui-react-dom-debug.js +1 -1
  394. package/lib/umd-es6/ui-react-dom-debug.js.gz +0 -0
  395. package/lib/umd-es6/ui-react.js +1 -1
  396. package/lib/umd-es6/ui-react.js.gz +0 -0
  397. package/package.json +37 -26
  398. 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,6 +52,8 @@ 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
59
  const objHas = (obj, id) => id in obj;
@@ -98,6 +98,9 @@ const setNew = (entryOrEntries) =>
98
98
  );
99
99
  const setAdd = (set, value) => set?.add(value);
100
100
 
101
+ const TABLE = 'TABLE';
102
+ const ALTER_TABLE = 'ALTER ' + TABLE;
103
+ const DELETE_FROM = 'DELETE FROM';
101
104
  const SELECT_STAR_FROM = SELECT + '*FROM';
102
105
  const FROM_PRAGMA_TABLE = 'FROM pragma_table_';
103
106
  const WHERE = 'WHERE';
@@ -192,15 +195,20 @@ const getCommandFunctions = (
192
195
  arrayIsEmpty(tableColumnNames) &&
193
196
  collHas(schemaMap, tableName)
194
197
  ) {
195
- await cmd('DROP TABLE' + escapeId(tableName));
198
+ await cmd('DROP ' + TABLE + escapeId(tableName));
196
199
  mapSet(schemaMap, tableName);
197
200
  return;
198
201
  }
199
202
  if (!arrayIsEmpty(tableColumnNames) && !collHas(schemaMap, tableName)) {
200
203
  await cmd(
201
- `CREATE TABLE${escapeId(tableName)}(${escapeId(rowIdColumnName)} PRIMARY KEY ON CONFLICT REPLACE${arrayJoin(
202
- arrayMap(tableColumnNames, (cellId) => COMMA + escapeId(cellId)),
203
- )});`,
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
+ )});`,
204
212
  );
205
213
  mapSet(
206
214
  schemaMap,
@@ -220,7 +228,7 @@ const getCommandFunctions = (
220
228
  ...arrayMap(tableColumnNames, async (columnName) => {
221
229
  if (!collDel(columnNamesAccountedFor, columnName)) {
222
230
  await cmd(
223
- `ALTER TABLE${escapeId(tableName)}ADD${escapeId(columnName)}`,
231
+ ALTER_TABLE + escapeId(tableName) + 'ADD' + escapeId(columnName),
224
232
  );
225
233
  mapSet(tableSchemaMap, columnName, EMPTY_STRING);
226
234
  }
@@ -231,9 +239,10 @@ const getCommandFunctions = (
231
239
  async (columnName) => {
232
240
  if (columnName != rowIdColumnName) {
233
241
  await cmd(
234
- `ALTER TABLE${escapeId(tableName)}DROP${escapeId(
235
- columnName,
236
- )}`,
242
+ ALTER_TABLE +
243
+ escapeId(tableName) +
244
+ 'DROP' +
245
+ escapeId(columnName),
237
246
  );
238
247
  mapSet(tableSchemaMap, columnName);
239
248
  }
@@ -244,13 +253,13 @@ const getCommandFunctions = (
244
253
  }
245
254
  if (partial) {
246
255
  if (isUndefined(content)) {
247
- await cmd('DELETE FROM' + escapeId(tableName) + 'WHERE 1');
256
+ await cmd(DELETE_FROM + escapeId(tableName) + WHERE + ' 1');
248
257
  } else {
249
258
  await promiseAll(
250
259
  objToArray(content, async (row, rowId) => {
251
260
  if (isUndefined(row)) {
252
261
  await cmd(
253
- 'DELETE FROM' +
262
+ DELETE_FROM +
254
263
  escapeId(tableName) +
255
264
  WHERE +
256
265
  escapeId(rowIdColumnName) +
@@ -292,9 +301,10 @@ const getCommandFunctions = (
292
301
  rowIdColumnName,
293
302
  changingColumnNames,
294
303
  args,
304
+ useOnConflict,
295
305
  );
296
306
  await cmd(
297
- 'DELETE FROM' +
307
+ DELETE_FROM +
298
308
  escapeId(tableName) +
299
309
  WHERE +
300
310
  escapeId(rowIdColumnName) +
@@ -304,7 +314,7 @@ const getCommandFunctions = (
304
314
  deleteRowIds,
305
315
  );
306
316
  } else if (collHas(schemaMap, tableName)) {
307
- await cmd('DELETE FROM' + escapeId(tableName) + 'WHERE 1');
317
+ await cmd(DELETE_FROM + escapeId(tableName) + WHERE + ' 1');
308
318
  }
309
319
  }
310
320
  };
@@ -379,7 +389,6 @@ const jsonParse = JSON.parse;
379
389
 
380
390
  const scheduleRunning = mapNew();
381
391
  const scheduleActions = mapNew();
382
- const isMergeable = (contentOrChanges) => isString(contentOrChanges?.[0]);
383
392
  const getStoreFunctions = (supportsMergeableStore, store) =>
384
393
  !supportsMergeableStore || isUndefined(store.getMergeableContent)
385
394
  ? [
@@ -404,16 +413,15 @@ const createCustomPersister = (
404
413
  delPersisterListener,
405
414
  onIgnoredError,
406
415
  supportsMergeableStore,
407
- [getThing, thing] = [],
416
+ extra = {},
408
417
  scheduleId = [],
409
418
  ) => {
410
- let listenerId;
411
419
  let loadSave = 0;
412
420
  let loads = 0;
413
421
  let saves = 0;
414
- let listening = 0;
415
422
  let action;
416
- let listeningHandle;
423
+ let autoLoadHandle;
424
+ let autoSaveListenerId;
417
425
  mapEnsure(scheduleRunning, scheduleId, () => 0);
418
426
  mapEnsure(scheduleActions, scheduleId, () => []);
419
427
  const [isMergeableStore, getContent, getChanges, hasChanges] =
@@ -449,55 +457,51 @@ const createCustomPersister = (
449
457
  }
450
458
  return persister;
451
459
  };
460
+ const setContentOrChanges = (contentOrChanges) => {
461
+ (isMergeableStore && isString(contentOrChanges?.[0])
462
+ ? contentOrChanges?.[1][2] === 1
463
+ ? store.applyMergeableChanges
464
+ : store.setMergeableContent
465
+ : contentOrChanges?.[2] === 1
466
+ ? store.applyChanges
467
+ : store.setContent)(contentOrChanges);
468
+ };
452
469
  const persister = {
453
470
  load: async (initialTables, initialValues) =>
454
471
  await loadLock(async () => {
455
472
  try {
456
- const content = await getPersisted();
457
- (isMergeableStore && isMergeable(content)
458
- ? store.setMergeableContent
459
- : store.setContent)(content);
460
- } catch {
473
+ setContentOrChanges(await getPersisted());
474
+ } catch (error) {
475
+ onIgnoredError?.(error);
461
476
  store.setContent([initialTables, initialValues]);
462
477
  }
463
478
  }),
464
479
  startAutoLoad: async (initialTables = {}, initialValues = {}) => {
465
- persister.stopAutoLoad();
466
- await persister.load(initialTables, initialValues);
467
- listening = 1;
468
- listeningHandle = addPersisterListener(
480
+ await persister.stopAutoLoad().load(initialTables, initialValues);
481
+ autoLoadHandle = addPersisterListener(
469
482
  async (getContent2, getChanges2) => {
470
- if (getChanges2) {
471
- const changes = getChanges2();
472
- await loadLock(async () =>
473
- (isMergeableStore && isMergeable(changes)
474
- ? store.applyMergeableChanges
475
- : store.applyChanges)(changes),
476
- );
477
- } else {
478
- await loadLock(async () => {
479
- try {
480
- const content = getContent2?.() ?? (await getPersisted());
481
- (isMergeableStore && isMergeable(content)
482
- ? store.setMergeableContent
483
- : store.setContent)(content);
484
- } catch (error) {
485
- onIgnoredError?.(error);
486
- }
487
- });
488
- }
483
+ const changes = getChanges2?.();
484
+ await loadLock(async () => {
485
+ try {
486
+ setContentOrChanges(
487
+ changes ?? getContent2?.() ?? (await getPersisted()),
488
+ );
489
+ } catch (error) {
490
+ onIgnoredError?.(error);
491
+ }
492
+ });
489
493
  },
490
494
  );
491
495
  return persister;
492
496
  },
493
497
  stopAutoLoad: () => {
494
- if (listening) {
495
- delPersisterListener(listeningHandle);
496
- listeningHandle = void 0;
497
- listening = 0;
498
+ if (autoLoadHandle) {
499
+ delPersisterListener(autoLoadHandle);
500
+ autoLoadHandle = void 0;
498
501
  }
499
502
  return persister;
500
503
  },
504
+ isAutoLoading: () => !isUndefined(autoLoadHandle),
501
505
  save: async (getChanges2) => {
502
506
  /* istanbul ignore else */
503
507
  if (loadSave != 1) {
@@ -519,7 +523,7 @@ const createCustomPersister = (
519
523
  },
520
524
  startAutoSave: async () => {
521
525
  await persister.stopAutoSave().save();
522
- listenerId = store.addDidFinishTransactionListener(() => {
526
+ autoSaveListenerId = store.addDidFinishTransactionListener(() => {
523
527
  const changes = getChanges();
524
528
  if (hasChanges(changes)) {
525
529
  persister.save(() => changes);
@@ -528,10 +532,11 @@ const createCustomPersister = (
528
532
  return persister;
529
533
  },
530
534
  stopAutoSave: () => {
531
- ifNotUndefined(listenerId, store.delListener);
532
- listenerId = void 0;
535
+ ifNotUndefined(autoSaveListenerId, store.delListener);
536
+ autoSaveListenerId = void 0;
533
537
  return persister;
534
538
  },
539
+ isAutoSaving: () => !isUndefined(autoSaveListenerId),
535
540
  schedule: async (...actions) => {
536
541
  arrayPush(mapGet(scheduleActions, scheduleId), ...actions);
537
542
  await run();
@@ -540,10 +545,8 @@ const createCustomPersister = (
540
545
  getStore: () => store,
541
546
  destroy: () => persister.stopAutoLoad().stopAutoSave(),
542
547
  getStats: () => ({loads, saves}),
548
+ ...extra,
543
549
  };
544
- if (getThing) {
545
- persister[getThing] = () => thing;
546
- }
547
550
  return objFreeze(persister);
548
551
  };
549
552
 
@@ -558,9 +561,10 @@ const createJsonSqlitePersister = (
558
561
  managedTableNames,
559
562
  db,
560
563
  getThing,
564
+ useOnConflict,
561
565
  ) => {
562
566
  const [refreshSchema, loadTable, saveTable, transaction] =
563
- getCommandFunctions(cmd, managedTableNames, onIgnoredError);
567
+ getCommandFunctions(cmd, managedTableNames, onIgnoredError, useOnConflict);
564
568
  const getPersisted = async () =>
565
569
  await transaction(async () => {
566
570
  await refreshSchema();
@@ -591,7 +595,7 @@ const createJsonSqlitePersister = (
591
595
  delPersisterListener,
592
596
  onIgnoredError,
593
597
  false,
594
- [getThing, db],
598
+ {[getThing]: () => db},
595
599
  db,
596
600
  );
597
601
  return persister;
@@ -698,7 +702,7 @@ const createTabularSqlitePersister = (
698
702
  delPersisterListener,
699
703
  onIgnoredError,
700
704
  false,
701
- [getThing, db],
705
+ {[getThing]: () => db},
702
706
  db,
703
707
  );
704
708
  return persister;
@@ -22,8 +22,6 @@ const arrayShift = (array) => array.shift();
22
22
  const object = Object;
23
23
  const getPrototypeOf = (obj) => object.getPrototypeOf(obj);
24
24
  const objEntries = object.entries;
25
- const objIds = object.keys;
26
- const objFreeze = object.freeze;
27
25
  const isObject = (obj) =>
28
26
  !isUndefined(obj) &&
29
27
  ifNotUndefined(
@@ -34,6 +32,8 @@ const isObject = (obj) =>
34
32
  /* istanbul ignore next */
35
33
  () => true,
36
34
  );
35
+ const objIds = object.keys;
36
+ const objFreeze = object.freeze;
37
37
  const objNew = (entries = []) => object.fromEntries(entries);
38
38
  const objHas = (obj, id) => id in obj;
39
39
  const objToArray = (obj, cb) =>
@@ -68,7 +68,6 @@ const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
68
68
 
69
69
  const scheduleRunning = mapNew();
70
70
  const scheduleActions = mapNew();
71
- const isMergeable = (contentOrChanges) => isString(contentOrChanges?.[0]);
72
71
  const getStoreFunctions = (supportsMergeableStore, store) =>
73
72
  !supportsMergeableStore || isUndefined(store.getMergeableContent)
74
73
  ? [
@@ -93,16 +92,15 @@ const createCustomPersister = (
93
92
  delPersisterListener,
94
93
  onIgnoredError,
95
94
  supportsMergeableStore,
96
- [getThing, thing] = [],
95
+ extra = {},
97
96
  scheduleId = [],
98
97
  ) => {
99
- let listenerId;
100
98
  let loadSave = 0;
101
99
  let loads = 0;
102
100
  let saves = 0;
103
- let listening = 0;
104
101
  let action;
105
- let listeningHandle;
102
+ let autoLoadHandle;
103
+ let autoSaveListenerId;
106
104
  mapEnsure(scheduleRunning, scheduleId, () => 0);
107
105
  mapEnsure(scheduleActions, scheduleId, () => []);
108
106
  const [isMergeableStore, getContent, getChanges, hasChanges] =
@@ -138,55 +136,51 @@ const createCustomPersister = (
138
136
  }
139
137
  return persister;
140
138
  };
139
+ const setContentOrChanges = (contentOrChanges) => {
140
+ (isMergeableStore && isString(contentOrChanges?.[0])
141
+ ? contentOrChanges?.[1][2] === 1
142
+ ? store.applyMergeableChanges
143
+ : store.setMergeableContent
144
+ : contentOrChanges?.[2] === 1
145
+ ? store.applyChanges
146
+ : store.setContent)(contentOrChanges);
147
+ };
141
148
  const persister = {
142
149
  load: async (initialTables, initialValues) =>
143
150
  await loadLock(async () => {
144
151
  try {
145
- const content = await getPersisted();
146
- (isMergeableStore && isMergeable(content)
147
- ? store.setMergeableContent
148
- : store.setContent)(content);
149
- } catch {
152
+ setContentOrChanges(await getPersisted());
153
+ } catch (error) {
154
+ onIgnoredError?.(error);
150
155
  store.setContent([initialTables, initialValues]);
151
156
  }
152
157
  }),
153
158
  startAutoLoad: async (initialTables = {}, initialValues = {}) => {
154
- persister.stopAutoLoad();
155
- await persister.load(initialTables, initialValues);
156
- listening = 1;
157
- listeningHandle = addPersisterListener(
159
+ await persister.stopAutoLoad().load(initialTables, initialValues);
160
+ autoLoadHandle = addPersisterListener(
158
161
  async (getContent2, getChanges2) => {
159
- if (getChanges2) {
160
- const changes = getChanges2();
161
- await loadLock(async () =>
162
- (isMergeableStore && isMergeable(changes)
163
- ? store.applyMergeableChanges
164
- : store.applyChanges)(changes),
165
- );
166
- } else {
167
- await loadLock(async () => {
168
- try {
169
- const content = getContent2?.() ?? (await getPersisted());
170
- (isMergeableStore && isMergeable(content)
171
- ? store.setMergeableContent
172
- : store.setContent)(content);
173
- } catch (error) {
174
- onIgnoredError?.(error);
175
- }
176
- });
177
- }
162
+ const changes = getChanges2?.();
163
+ await loadLock(async () => {
164
+ try {
165
+ setContentOrChanges(
166
+ changes ?? getContent2?.() ?? (await getPersisted()),
167
+ );
168
+ } catch (error) {
169
+ onIgnoredError?.(error);
170
+ }
171
+ });
178
172
  },
179
173
  );
180
174
  return persister;
181
175
  },
182
176
  stopAutoLoad: () => {
183
- if (listening) {
184
- delPersisterListener(listeningHandle);
185
- listeningHandle = void 0;
186
- listening = 0;
177
+ if (autoLoadHandle) {
178
+ delPersisterListener(autoLoadHandle);
179
+ autoLoadHandle = void 0;
187
180
  }
188
181
  return persister;
189
182
  },
183
+ isAutoLoading: () => !isUndefined(autoLoadHandle),
190
184
  save: async (getChanges2) => {
191
185
  /* istanbul ignore else */
192
186
  if (loadSave != 1) {
@@ -208,7 +202,7 @@ const createCustomPersister = (
208
202
  },
209
203
  startAutoSave: async () => {
210
204
  await persister.stopAutoSave().save();
211
- listenerId = store.addDidFinishTransactionListener(() => {
205
+ autoSaveListenerId = store.addDidFinishTransactionListener(() => {
212
206
  const changes = getChanges();
213
207
  if (hasChanges(changes)) {
214
208
  persister.save(() => changes);
@@ -217,10 +211,11 @@ const createCustomPersister = (
217
211
  return persister;
218
212
  },
219
213
  stopAutoSave: () => {
220
- ifNotUndefined(listenerId, store.delListener);
221
- listenerId = void 0;
214
+ ifNotUndefined(autoSaveListenerId, store.delListener);
215
+ autoSaveListenerId = void 0;
222
216
  return persister;
223
217
  },
218
+ isAutoSaving: () => !isUndefined(autoSaveListenerId),
224
219
  schedule: async (...actions) => {
225
220
  arrayPush(mapGet(scheduleActions, scheduleId), ...actions);
226
221
  await run();
@@ -229,10 +224,8 @@ const createCustomPersister = (
229
224
  getStore: () => store,
230
225
  destroy: () => persister.stopAutoLoad().stopAutoSave(),
231
226
  getStats: () => ({loads, saves}),
227
+ ...extra,
232
228
  };
233
- if (getThing) {
234
- persister[getThing] = () => thing;
235
- }
236
229
  return objFreeze(persister);
237
230
  };
238
231
 
@@ -240,7 +233,7 @@ const DELETE = 'delete';
240
233
  const getYContent = (yContent) => [yContent.get(T), yContent.get(V)];
241
234
  const getChangesFromYDoc = (yContent, events) => {
242
235
  if (size(events) == 1 && arrayIsEmpty(events[0].path)) {
243
- return [yContent.get(T).toJSON(), yContent.get(V).toJSON()];
236
+ return [yContent.get(T).toJSON(), yContent.get(V).toJSON(), 1];
244
237
  }
245
238
  const [yTables, yValues] = getYContent(yContent);
246
239
  const tables = {};
@@ -286,7 +279,7 @@ const getChangesFromYDoc = (yContent, events) => {
286
279
  (values[valueId] = action == DELETE ? null : yValues.get(valueId)),
287
280
  ),
288
281
  );
289
- return [tables, values];
282
+ return [tables, values, 1];
290
283
  };
291
284
  const applyChangesToYDoc = (yContent, getContent, getChanges) => {
292
285
  if (!yContent.size) {
@@ -405,7 +398,7 @@ const createYjsPersister = (
405
398
  delPersisterListener,
406
399
  onIgnoredError,
407
400
  false,
408
- ['getYDoc', yDoc],
401
+ {getYDoc: () => yDoc},
409
402
  );
410
403
  };
411
404
 
@@ -13,8 +13,6 @@ const arrayShift = (array) => array.shift();
13
13
 
14
14
  const object = Object;
15
15
  const getPrototypeOf = (obj) => object.getPrototypeOf(obj);
16
- const objIds = object.keys;
17
- const objFreeze = object.freeze;
18
16
  const isObject = (obj) =>
19
17
  !isUndefined(obj) &&
20
18
  ifNotUndefined(
@@ -25,6 +23,8 @@ const isObject = (obj) =>
25
23
  /* istanbul ignore next */
26
24
  () => true,
27
25
  );
26
+ const objIds = object.keys;
27
+ const objFreeze = object.freeze;
28
28
  const objSize = (obj) => size(objIds(obj));
29
29
  const objIsEmpty = (obj) => isObject(obj) && objSize(obj) == 0;
30
30
 
@@ -46,7 +46,6 @@ const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
46
46
 
47
47
  const scheduleRunning = mapNew();
48
48
  const scheduleActions = mapNew();
49
- const isMergeable = (contentOrChanges) => isString(contentOrChanges?.[0]);
50
49
  const getStoreFunctions = (supportsMergeableStore, store) =>
51
50
  !supportsMergeableStore || isUndefined(store.getMergeableContent)
52
51
  ? [
@@ -71,16 +70,15 @@ const createCustomPersister = (
71
70
  delPersisterListener,
72
71
  onIgnoredError,
73
72
  supportsMergeableStore,
74
- [getThing, thing] = [],
73
+ extra = {},
75
74
  scheduleId = [],
76
75
  ) => {
77
- let listenerId;
78
76
  let loadSave = 0;
79
77
  let loads = 0;
80
78
  let saves = 0;
81
- let listening = 0;
82
79
  let action;
83
- let listeningHandle;
80
+ let autoLoadHandle;
81
+ let autoSaveListenerId;
84
82
  mapEnsure(scheduleRunning, scheduleId, () => 0);
85
83
  mapEnsure(scheduleActions, scheduleId, () => []);
86
84
  const [isMergeableStore, getContent, getChanges, hasChanges] =
@@ -116,55 +114,51 @@ const createCustomPersister = (
116
114
  }
117
115
  return persister;
118
116
  };
117
+ const setContentOrChanges = (contentOrChanges) => {
118
+ (isMergeableStore && isString(contentOrChanges?.[0])
119
+ ? contentOrChanges?.[1][2] === 1
120
+ ? store.applyMergeableChanges
121
+ : store.setMergeableContent
122
+ : contentOrChanges?.[2] === 1
123
+ ? store.applyChanges
124
+ : store.setContent)(contentOrChanges);
125
+ };
119
126
  const persister = {
120
127
  load: async (initialTables, initialValues) =>
121
128
  await loadLock(async () => {
122
129
  try {
123
- const content = await getPersisted();
124
- (isMergeableStore && isMergeable(content)
125
- ? store.setMergeableContent
126
- : store.setContent)(content);
127
- } catch {
130
+ setContentOrChanges(await getPersisted());
131
+ } catch (error) {
132
+ onIgnoredError?.(error);
128
133
  store.setContent([initialTables, initialValues]);
129
134
  }
130
135
  }),
131
136
  startAutoLoad: async (initialTables = {}, initialValues = {}) => {
132
- persister.stopAutoLoad();
133
- await persister.load(initialTables, initialValues);
134
- listening = 1;
135
- listeningHandle = addPersisterListener(
137
+ await persister.stopAutoLoad().load(initialTables, initialValues);
138
+ autoLoadHandle = addPersisterListener(
136
139
  async (getContent2, getChanges2) => {
137
- if (getChanges2) {
138
- const changes = getChanges2();
139
- await loadLock(async () =>
140
- (isMergeableStore && isMergeable(changes)
141
- ? store.applyMergeableChanges
142
- : store.applyChanges)(changes),
143
- );
144
- } else {
145
- await loadLock(async () => {
146
- try {
147
- const content = getContent2?.() ?? (await getPersisted());
148
- (isMergeableStore && isMergeable(content)
149
- ? store.setMergeableContent
150
- : store.setContent)(content);
151
- } catch (error) {
152
- onIgnoredError?.(error);
153
- }
154
- });
155
- }
140
+ const changes = getChanges2?.();
141
+ await loadLock(async () => {
142
+ try {
143
+ setContentOrChanges(
144
+ changes ?? getContent2?.() ?? (await getPersisted()),
145
+ );
146
+ } catch (error) {
147
+ onIgnoredError?.(error);
148
+ }
149
+ });
156
150
  },
157
151
  );
158
152
  return persister;
159
153
  },
160
154
  stopAutoLoad: () => {
161
- if (listening) {
162
- delPersisterListener(listeningHandle);
163
- listeningHandle = void 0;
164
- listening = 0;
155
+ if (autoLoadHandle) {
156
+ delPersisterListener(autoLoadHandle);
157
+ autoLoadHandle = void 0;
165
158
  }
166
159
  return persister;
167
160
  },
161
+ isAutoLoading: () => !isUndefined(autoLoadHandle),
168
162
  save: async (getChanges2) => {
169
163
  /* istanbul ignore else */
170
164
  if (loadSave != 1) {
@@ -186,7 +180,7 @@ const createCustomPersister = (
186
180
  },
187
181
  startAutoSave: async () => {
188
182
  await persister.stopAutoSave().save();
189
- listenerId = store.addDidFinishTransactionListener(() => {
183
+ autoSaveListenerId = store.addDidFinishTransactionListener(() => {
190
184
  const changes = getChanges();
191
185
  if (hasChanges(changes)) {
192
186
  persister.save(() => changes);
@@ -195,10 +189,11 @@ const createCustomPersister = (
195
189
  return persister;
196
190
  },
197
191
  stopAutoSave: () => {
198
- ifNotUndefined(listenerId, store.delListener);
199
- listenerId = void 0;
192
+ ifNotUndefined(autoSaveListenerId, store.delListener);
193
+ autoSaveListenerId = void 0;
200
194
  return persister;
201
195
  },
196
+ isAutoSaving: () => !isUndefined(autoSaveListenerId),
202
197
  schedule: async (...actions) => {
203
198
  arrayPush(mapGet(scheduleActions, scheduleId), ...actions);
204
199
  await run();
@@ -207,10 +202,8 @@ const createCustomPersister = (
207
202
  getStore: () => store,
208
203
  destroy: () => persister.stopAutoLoad().stopAutoSave(),
209
204
  getStats: () => ({loads, saves}),
205
+ ...extra,
210
206
  };
211
- if (getThing) {
212
- persister[getThing] = () => thing;
213
- }
214
207
  return objFreeze(persister);
215
208
  };
216
209