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
@@ -41,8 +41,6 @@ const collDel = (coll, keyOrValue) => coll?.delete(keyOrValue);
41
41
  const object = Object;
42
42
  const getPrototypeOf = (obj) => object.getPrototypeOf(obj);
43
43
  const objEntries = object.entries;
44
- const objIds = object.keys;
45
- const objFreeze = object.freeze;
46
44
  const isObject = (obj) =>
47
45
  !isUndefined(obj) &&
48
46
  ifNotUndefined(
@@ -53,6 +51,8 @@ const isObject = (obj) =>
53
51
  /* istanbul ignore next */
54
52
  () => true,
55
53
  );
54
+ const objIds = object.keys;
55
+ const objFreeze = object.freeze;
56
56
  const objNew = (entries = []) => object.fromEntries(entries);
57
57
  const objMerge = (...objs) => object.assign({}, ...objs);
58
58
  const objHas = (obj, id) => id in obj;
@@ -97,6 +97,9 @@ const setNew = (entryOrEntries) =>
97
97
  );
98
98
  const setAdd = (set, value) => set?.add(value);
99
99
 
100
+ const TABLE = 'TABLE';
101
+ const ALTER_TABLE = 'ALTER ' + TABLE;
102
+ const DELETE_FROM = 'DELETE FROM';
100
103
  const SELECT_STAR_FROM = SELECT + '*FROM';
101
104
  const FROM_PRAGMA_TABLE = 'FROM pragma_table_';
102
105
  const WHERE = 'WHERE';
@@ -191,15 +194,20 @@ const getCommandFunctions = (
191
194
  arrayIsEmpty(tableColumnNames) &&
192
195
  collHas(schemaMap, tableName)
193
196
  ) {
194
- await cmd('DROP TABLE' + escapeId(tableName));
197
+ await cmd('DROP ' + TABLE + escapeId(tableName));
195
198
  mapSet(schemaMap, tableName);
196
199
  return;
197
200
  }
198
201
  if (!arrayIsEmpty(tableColumnNames) && !collHas(schemaMap, tableName)) {
199
202
  await cmd(
200
- `CREATE TABLE${escapeId(tableName)}(${escapeId(rowIdColumnName)} PRIMARY KEY ON CONFLICT REPLACE${arrayJoin(
201
- arrayMap(tableColumnNames, (cellId) => COMMA + escapeId(cellId)),
202
- )});`,
203
+ `CREATE ` +
204
+ TABLE +
205
+ escapeId(tableName) +
206
+ '(' +
207
+ escapeId(rowIdColumnName) +
208
+ ` PRIMARY KEY ON CONFLICT REPLACE${arrayJoin(
209
+ arrayMap(tableColumnNames, (cellId) => COMMA + escapeId(cellId)),
210
+ )});`,
203
211
  );
204
212
  mapSet(
205
213
  schemaMap,
@@ -219,7 +227,7 @@ const getCommandFunctions = (
219
227
  ...arrayMap(tableColumnNames, async (columnName) => {
220
228
  if (!collDel(columnNamesAccountedFor, columnName)) {
221
229
  await cmd(
222
- `ALTER TABLE${escapeId(tableName)}ADD${escapeId(columnName)}`,
230
+ ALTER_TABLE + escapeId(tableName) + 'ADD' + escapeId(columnName),
223
231
  );
224
232
  mapSet(tableSchemaMap, columnName, EMPTY_STRING);
225
233
  }
@@ -230,9 +238,10 @@ const getCommandFunctions = (
230
238
  async (columnName) => {
231
239
  if (columnName != rowIdColumnName) {
232
240
  await cmd(
233
- `ALTER TABLE${escapeId(tableName)}DROP${escapeId(
234
- columnName,
235
- )}`,
241
+ ALTER_TABLE +
242
+ escapeId(tableName) +
243
+ 'DROP' +
244
+ escapeId(columnName),
236
245
  );
237
246
  mapSet(tableSchemaMap, columnName);
238
247
  }
@@ -243,13 +252,13 @@ const getCommandFunctions = (
243
252
  }
244
253
  if (partial) {
245
254
  if (isUndefined(content)) {
246
- await cmd('DELETE FROM' + escapeId(tableName) + 'WHERE 1');
255
+ await cmd(DELETE_FROM + escapeId(tableName) + WHERE + ' 1');
247
256
  } else {
248
257
  await promiseAll(
249
258
  objToArray(content, async (row, rowId) => {
250
259
  if (isUndefined(row)) {
251
260
  await cmd(
252
- 'DELETE FROM' +
261
+ DELETE_FROM +
253
262
  escapeId(tableName) +
254
263
  WHERE +
255
264
  escapeId(rowIdColumnName) +
@@ -291,9 +300,10 @@ const getCommandFunctions = (
291
300
  rowIdColumnName,
292
301
  changingColumnNames,
293
302
  args,
303
+ useOnConflict,
294
304
  );
295
305
  await cmd(
296
- 'DELETE FROM' +
306
+ DELETE_FROM +
297
307
  escapeId(tableName) +
298
308
  WHERE +
299
309
  escapeId(rowIdColumnName) +
@@ -303,7 +313,7 @@ const getCommandFunctions = (
303
313
  deleteRowIds,
304
314
  );
305
315
  } else if (collHas(schemaMap, tableName)) {
306
- await cmd('DELETE FROM' + escapeId(tableName) + 'WHERE 1');
316
+ await cmd(DELETE_FROM + escapeId(tableName) + WHERE + ' 1');
307
317
  }
308
318
  }
309
319
  };
@@ -378,7 +388,6 @@ const jsonParse = JSON.parse;
378
388
 
379
389
  const scheduleRunning = mapNew();
380
390
  const scheduleActions = mapNew();
381
- const isMergeable = (contentOrChanges) => isString(contentOrChanges?.[0]);
382
391
  const getStoreFunctions = (supportsMergeableStore, store) =>
383
392
  !supportsMergeableStore || isUndefined(store.getMergeableContent)
384
393
  ? [
@@ -403,16 +412,15 @@ const createCustomPersister = (
403
412
  delPersisterListener,
404
413
  onIgnoredError,
405
414
  supportsMergeableStore,
406
- [getThing, thing] = [],
415
+ extra = {},
407
416
  scheduleId = [],
408
417
  ) => {
409
- let listenerId;
410
418
  let loadSave = 0;
411
419
  let loads = 0;
412
420
  let saves = 0;
413
- let listening = 0;
414
421
  let action;
415
- let listeningHandle;
422
+ let autoLoadHandle;
423
+ let autoSaveListenerId;
416
424
  mapEnsure(scheduleRunning, scheduleId, () => 0);
417
425
  mapEnsure(scheduleActions, scheduleId, () => []);
418
426
  const [isMergeableStore, getContent, getChanges, hasChanges] =
@@ -448,55 +456,51 @@ const createCustomPersister = (
448
456
  }
449
457
  return persister;
450
458
  };
459
+ const setContentOrChanges = (contentOrChanges) => {
460
+ (isMergeableStore && isString(contentOrChanges?.[0])
461
+ ? contentOrChanges?.[1][2] === 1
462
+ ? store.applyMergeableChanges
463
+ : store.setMergeableContent
464
+ : contentOrChanges?.[2] === 1
465
+ ? store.applyChanges
466
+ : store.setContent)(contentOrChanges);
467
+ };
451
468
  const persister = {
452
469
  load: async (initialTables, initialValues) =>
453
470
  await loadLock(async () => {
454
471
  try {
455
- const content = await getPersisted();
456
- (isMergeableStore && isMergeable(content)
457
- ? store.setMergeableContent
458
- : store.setContent)(content);
459
- } catch {
472
+ setContentOrChanges(await getPersisted());
473
+ } catch (error) {
474
+ onIgnoredError?.(error);
460
475
  store.setContent([initialTables, initialValues]);
461
476
  }
462
477
  }),
463
478
  startAutoLoad: async (initialTables = {}, initialValues = {}) => {
464
- persister.stopAutoLoad();
465
- await persister.load(initialTables, initialValues);
466
- listening = 1;
467
- listeningHandle = addPersisterListener(
479
+ await persister.stopAutoLoad().load(initialTables, initialValues);
480
+ autoLoadHandle = addPersisterListener(
468
481
  async (getContent2, getChanges2) => {
469
- if (getChanges2) {
470
- const changes = getChanges2();
471
- await loadLock(async () =>
472
- (isMergeableStore && isMergeable(changes)
473
- ? store.applyMergeableChanges
474
- : store.applyChanges)(changes),
475
- );
476
- } else {
477
- await loadLock(async () => {
478
- try {
479
- const content = getContent2?.() ?? (await getPersisted());
480
- (isMergeableStore && isMergeable(content)
481
- ? store.setMergeableContent
482
- : store.setContent)(content);
483
- } catch (error) {
484
- onIgnoredError?.(error);
485
- }
486
- });
487
- }
482
+ const changes = getChanges2?.();
483
+ await loadLock(async () => {
484
+ try {
485
+ setContentOrChanges(
486
+ changes ?? getContent2?.() ?? (await getPersisted()),
487
+ );
488
+ } catch (error) {
489
+ onIgnoredError?.(error);
490
+ }
491
+ });
488
492
  },
489
493
  );
490
494
  return persister;
491
495
  },
492
496
  stopAutoLoad: () => {
493
- if (listening) {
494
- delPersisterListener(listeningHandle);
495
- listeningHandle = void 0;
496
- listening = 0;
497
+ if (autoLoadHandle) {
498
+ delPersisterListener(autoLoadHandle);
499
+ autoLoadHandle = void 0;
497
500
  }
498
501
  return persister;
499
502
  },
503
+ isAutoLoading: () => !isUndefined(autoLoadHandle),
500
504
  save: async (getChanges2) => {
501
505
  /* istanbul ignore else */
502
506
  if (loadSave != 1) {
@@ -518,7 +522,7 @@ const createCustomPersister = (
518
522
  },
519
523
  startAutoSave: async () => {
520
524
  await persister.stopAutoSave().save();
521
- listenerId = store.addDidFinishTransactionListener(() => {
525
+ autoSaveListenerId = store.addDidFinishTransactionListener(() => {
522
526
  const changes = getChanges();
523
527
  if (hasChanges(changes)) {
524
528
  persister.save(() => changes);
@@ -527,10 +531,11 @@ const createCustomPersister = (
527
531
  return persister;
528
532
  },
529
533
  stopAutoSave: () => {
530
- ifNotUndefined(listenerId, store.delListener);
531
- listenerId = void 0;
534
+ ifNotUndefined(autoSaveListenerId, store.delListener);
535
+ autoSaveListenerId = void 0;
532
536
  return persister;
533
537
  },
538
+ isAutoSaving: () => !isUndefined(autoSaveListenerId),
534
539
  schedule: async (...actions) => {
535
540
  arrayPush(mapGet(scheduleActions, scheduleId), ...actions);
536
541
  await run();
@@ -539,10 +544,8 @@ const createCustomPersister = (
539
544
  getStore: () => store,
540
545
  destroy: () => persister.stopAutoLoad().stopAutoSave(),
541
546
  getStats: () => ({loads, saves}),
547
+ ...extra,
542
548
  };
543
- if (getThing) {
544
- persister[getThing] = () => thing;
545
- }
546
549
  return objFreeze(persister);
547
550
  };
548
551
 
@@ -557,9 +560,10 @@ const createJsonSqlitePersister = (
557
560
  managedTableNames,
558
561
  db,
559
562
  getThing,
563
+ useOnConflict,
560
564
  ) => {
561
565
  const [refreshSchema, loadTable, saveTable, transaction] =
562
- getCommandFunctions(cmd, managedTableNames, onIgnoredError);
566
+ getCommandFunctions(cmd, managedTableNames, onIgnoredError, useOnConflict);
563
567
  const getPersisted = async () =>
564
568
  await transaction(async () => {
565
569
  await refreshSchema();
@@ -590,7 +594,7 @@ const createJsonSqlitePersister = (
590
594
  delPersisterListener,
591
595
  onIgnoredError,
592
596
  false,
593
- [getThing, db],
597
+ {[getThing]: () => db},
594
598
  db,
595
599
  );
596
600
  return persister;
@@ -697,7 +701,7 @@ const createTabularSqlitePersister = (
697
701
  delPersisterListener,
698
702
  onIgnoredError,
699
703
  false,
700
- [getThing, db],
704
+ {[getThing]: () => db},
701
705
  db,
702
706
  );
703
707
  return persister;
@@ -18,8 +18,6 @@ const arrayShift = (array) => array.shift();
18
18
 
19
19
  const object = Object;
20
20
  const getPrototypeOf = (obj) => object.getPrototypeOf(obj);
21
- const objIds = object.keys;
22
- const objFreeze = object.freeze;
23
21
  const isObject = (obj) =>
24
22
  !isUndefined(obj) &&
25
23
  ifNotUndefined(
@@ -30,6 +28,8 @@ const isObject = (obj) =>
30
28
  /* istanbul ignore next */
31
29
  () => true,
32
30
  );
31
+ const objIds = object.keys;
32
+ const objFreeze = object.freeze;
33
33
  const objSize = (obj) => size(objIds(obj));
34
34
  const objIsEmpty = (obj) => isObject(obj) && objSize(obj) == 0;
35
35
 
@@ -57,7 +57,6 @@ const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
57
57
 
58
58
  const scheduleRunning = mapNew();
59
59
  const scheduleActions = mapNew();
60
- const isMergeable = (contentOrChanges) => isString(contentOrChanges?.[0]);
61
60
  const getStoreFunctions = (supportsMergeableStore, store) =>
62
61
  !supportsMergeableStore || isUndefined(store.getMergeableContent)
63
62
  ? [
@@ -82,16 +81,15 @@ const createCustomPersister = (
82
81
  delPersisterListener,
83
82
  onIgnoredError,
84
83
  supportsMergeableStore,
85
- [getThing, thing] = [],
84
+ extra = {},
86
85
  scheduleId = [],
87
86
  ) => {
88
- let listenerId;
89
87
  let loadSave = 0;
90
88
  let loads = 0;
91
89
  let saves = 0;
92
- let listening = 0;
93
90
  let action;
94
- let listeningHandle;
91
+ let autoLoadHandle;
92
+ let autoSaveListenerId;
95
93
  mapEnsure(scheduleRunning, scheduleId, () => 0);
96
94
  mapEnsure(scheduleActions, scheduleId, () => []);
97
95
  const [isMergeableStore, getContent, getChanges, hasChanges] =
@@ -127,55 +125,51 @@ const createCustomPersister = (
127
125
  }
128
126
  return persister;
129
127
  };
128
+ const setContentOrChanges = (contentOrChanges) => {
129
+ (isMergeableStore && isString(contentOrChanges?.[0])
130
+ ? contentOrChanges?.[1][2] === 1
131
+ ? store.applyMergeableChanges
132
+ : store.setMergeableContent
133
+ : contentOrChanges?.[2] === 1
134
+ ? store.applyChanges
135
+ : store.setContent)(contentOrChanges);
136
+ };
130
137
  const persister = {
131
138
  load: async (initialTables, initialValues) =>
132
139
  await loadLock(async () => {
133
140
  try {
134
- const content = await getPersisted();
135
- (isMergeableStore && isMergeable(content)
136
- ? store.setMergeableContent
137
- : store.setContent)(content);
138
- } catch {
141
+ setContentOrChanges(await getPersisted());
142
+ } catch (error) {
143
+ onIgnoredError?.(error);
139
144
  store.setContent([initialTables, initialValues]);
140
145
  }
141
146
  }),
142
147
  startAutoLoad: async (initialTables = {}, initialValues = {}) => {
143
- persister.stopAutoLoad();
144
- await persister.load(initialTables, initialValues);
145
- listening = 1;
146
- listeningHandle = addPersisterListener(
148
+ await persister.stopAutoLoad().load(initialTables, initialValues);
149
+ autoLoadHandle = addPersisterListener(
147
150
  async (getContent2, getChanges2) => {
148
- if (getChanges2) {
149
- const changes = getChanges2();
150
- await loadLock(async () =>
151
- (isMergeableStore && isMergeable(changes)
152
- ? store.applyMergeableChanges
153
- : store.applyChanges)(changes),
154
- );
155
- } else {
156
- await loadLock(async () => {
157
- try {
158
- const content = getContent2?.() ?? (await getPersisted());
159
- (isMergeableStore && isMergeable(content)
160
- ? store.setMergeableContent
161
- : store.setContent)(content);
162
- } catch (error) {
163
- onIgnoredError?.(error);
164
- }
165
- });
166
- }
151
+ const changes = getChanges2?.();
152
+ await loadLock(async () => {
153
+ try {
154
+ setContentOrChanges(
155
+ changes ?? getContent2?.() ?? (await getPersisted()),
156
+ );
157
+ } catch (error) {
158
+ onIgnoredError?.(error);
159
+ }
160
+ });
167
161
  },
168
162
  );
169
163
  return persister;
170
164
  },
171
165
  stopAutoLoad: () => {
172
- if (listening) {
173
- delPersisterListener(listeningHandle);
174
- listeningHandle = void 0;
175
- listening = 0;
166
+ if (autoLoadHandle) {
167
+ delPersisterListener(autoLoadHandle);
168
+ autoLoadHandle = void 0;
176
169
  }
177
170
  return persister;
178
171
  },
172
+ isAutoLoading: () => !isUndefined(autoLoadHandle),
179
173
  save: async (getChanges2) => {
180
174
  /* istanbul ignore else */
181
175
  if (loadSave != 1) {
@@ -197,7 +191,7 @@ const createCustomPersister = (
197
191
  },
198
192
  startAutoSave: async () => {
199
193
  await persister.stopAutoSave().save();
200
- listenerId = store.addDidFinishTransactionListener(() => {
194
+ autoSaveListenerId = store.addDidFinishTransactionListener(() => {
201
195
  const changes = getChanges();
202
196
  if (hasChanges(changes)) {
203
197
  persister.save(() => changes);
@@ -206,10 +200,11 @@ const createCustomPersister = (
206
200
  return persister;
207
201
  },
208
202
  stopAutoSave: () => {
209
- ifNotUndefined(listenerId, store.delListener);
210
- listenerId = void 0;
203
+ ifNotUndefined(autoSaveListenerId, store.delListener);
204
+ autoSaveListenerId = void 0;
211
205
  return persister;
212
206
  },
207
+ isAutoSaving: () => !isUndefined(autoSaveListenerId),
213
208
  schedule: async (...actions) => {
214
209
  arrayPush(mapGet(scheduleActions, scheduleId), ...actions);
215
210
  await run();
@@ -218,10 +213,8 @@ const createCustomPersister = (
218
213
  getStore: () => store,
219
214
  destroy: () => persister.stopAutoLoad().stopAutoSave(),
220
215
  getStats: () => ({loads, saves}),
216
+ ...extra,
221
217
  };
222
- if (getThing) {
223
- persister[getThing] = () => thing;
224
- }
225
218
  return objFreeze(persister);
226
219
  };
227
220
 
@@ -239,7 +232,7 @@ const createFilePersister = (store, filePath, onIgnoredError) => {
239
232
  delPersisterListener,
240
233
  onIgnoredError,
241
234
  true,
242
- ['getFilePath', filePath],
235
+ {getFilePath: () => filePath},
243
236
  );
244
237
  };
245
238
 
@@ -25,8 +25,6 @@ const arrayShift = (array) => array.shift();
25
25
  const object = Object;
26
26
  const getPrototypeOf = (obj) => object.getPrototypeOf(obj);
27
27
  const objEntries = object.entries;
28
- const objIds = object.keys;
29
- const objFreeze = object.freeze;
30
28
  const isObject = (obj) =>
31
29
  !isUndefined(obj) &&
32
30
  ifNotUndefined(
@@ -37,6 +35,8 @@ const isObject = (obj) =>
37
35
  /* istanbul ignore next */
38
36
  () => true,
39
37
  );
38
+ const objIds = object.keys;
39
+ const objFreeze = object.freeze;
40
40
  const objNew = (entries = []) => object.fromEntries(entries);
41
41
  const objHas = (obj, id) => id in obj;
42
42
  const objToArray = (obj, cb) =>
@@ -62,7 +62,6 @@ const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
62
62
 
63
63
  const scheduleRunning = mapNew();
64
64
  const scheduleActions = mapNew();
65
- const isMergeable = (contentOrChanges) => isString(contentOrChanges?.[0]);
66
65
  const getStoreFunctions = (supportsMergeableStore, store) =>
67
66
  !supportsMergeableStore || isUndefined(store.getMergeableContent)
68
67
  ? [
@@ -87,16 +86,15 @@ const createCustomPersister = (
87
86
  delPersisterListener,
88
87
  onIgnoredError,
89
88
  supportsMergeableStore,
90
- [getThing, thing] = [],
89
+ extra = {},
91
90
  scheduleId = [],
92
91
  ) => {
93
- let listenerId;
94
92
  let loadSave = 0;
95
93
  let loads = 0;
96
94
  let saves = 0;
97
- let listening = 0;
98
95
  let action;
99
- let listeningHandle;
96
+ let autoLoadHandle;
97
+ let autoSaveListenerId;
100
98
  mapEnsure(scheduleRunning, scheduleId, () => 0);
101
99
  mapEnsure(scheduleActions, scheduleId, () => []);
102
100
  const [isMergeableStore, getContent, getChanges, hasChanges] =
@@ -132,55 +130,51 @@ const createCustomPersister = (
132
130
  }
133
131
  return persister;
134
132
  };
133
+ const setContentOrChanges = (contentOrChanges) => {
134
+ (isMergeableStore && isString(contentOrChanges?.[0])
135
+ ? contentOrChanges?.[1][2] === 1
136
+ ? store.applyMergeableChanges
137
+ : store.setMergeableContent
138
+ : contentOrChanges?.[2] === 1
139
+ ? store.applyChanges
140
+ : store.setContent)(contentOrChanges);
141
+ };
135
142
  const persister = {
136
143
  load: async (initialTables, initialValues) =>
137
144
  await loadLock(async () => {
138
145
  try {
139
- const content = await getPersisted();
140
- (isMergeableStore && isMergeable(content)
141
- ? store.setMergeableContent
142
- : store.setContent)(content);
143
- } catch {
146
+ setContentOrChanges(await getPersisted());
147
+ } catch (error) {
148
+ onIgnoredError?.(error);
144
149
  store.setContent([initialTables, initialValues]);
145
150
  }
146
151
  }),
147
152
  startAutoLoad: async (initialTables = {}, initialValues = {}) => {
148
- persister.stopAutoLoad();
149
- await persister.load(initialTables, initialValues);
150
- listening = 1;
151
- listeningHandle = addPersisterListener(
153
+ await persister.stopAutoLoad().load(initialTables, initialValues);
154
+ autoLoadHandle = addPersisterListener(
152
155
  async (getContent2, getChanges2) => {
153
- if (getChanges2) {
154
- const changes = getChanges2();
155
- await loadLock(async () =>
156
- (isMergeableStore && isMergeable(changes)
157
- ? store.applyMergeableChanges
158
- : store.applyChanges)(changes),
159
- );
160
- } else {
161
- await loadLock(async () => {
162
- try {
163
- const content = getContent2?.() ?? (await getPersisted());
164
- (isMergeableStore && isMergeable(content)
165
- ? store.setMergeableContent
166
- : store.setContent)(content);
167
- } catch (error) {
168
- onIgnoredError?.(error);
169
- }
170
- });
171
- }
156
+ const changes = getChanges2?.();
157
+ await loadLock(async () => {
158
+ try {
159
+ setContentOrChanges(
160
+ changes ?? getContent2?.() ?? (await getPersisted()),
161
+ );
162
+ } catch (error) {
163
+ onIgnoredError?.(error);
164
+ }
165
+ });
172
166
  },
173
167
  );
174
168
  return persister;
175
169
  },
176
170
  stopAutoLoad: () => {
177
- if (listening) {
178
- delPersisterListener(listeningHandle);
179
- listeningHandle = void 0;
180
- listening = 0;
171
+ if (autoLoadHandle) {
172
+ delPersisterListener(autoLoadHandle);
173
+ autoLoadHandle = void 0;
181
174
  }
182
175
  return persister;
183
176
  },
177
+ isAutoLoading: () => !isUndefined(autoLoadHandle),
184
178
  save: async (getChanges2) => {
185
179
  /* istanbul ignore else */
186
180
  if (loadSave != 1) {
@@ -202,7 +196,7 @@ const createCustomPersister = (
202
196
  },
203
197
  startAutoSave: async () => {
204
198
  await persister.stopAutoSave().save();
205
- listenerId = store.addDidFinishTransactionListener(() => {
199
+ autoSaveListenerId = store.addDidFinishTransactionListener(() => {
206
200
  const changes = getChanges();
207
201
  if (hasChanges(changes)) {
208
202
  persister.save(() => changes);
@@ -211,10 +205,11 @@ const createCustomPersister = (
211
205
  return persister;
212
206
  },
213
207
  stopAutoSave: () => {
214
- ifNotUndefined(listenerId, store.delListener);
215
- listenerId = void 0;
208
+ ifNotUndefined(autoSaveListenerId, store.delListener);
209
+ autoSaveListenerId = void 0;
216
210
  return persister;
217
211
  },
212
+ isAutoSaving: () => !isUndefined(autoSaveListenerId),
218
213
  schedule: async (...actions) => {
219
214
  arrayPush(mapGet(scheduleActions, scheduleId), ...actions);
220
215
  await run();
@@ -223,10 +218,8 @@ const createCustomPersister = (
223
218
  getStore: () => store,
224
219
  destroy: () => persister.stopAutoLoad().stopAutoSave(),
225
220
  getStats: () => ({loads, saves}),
221
+ ...extra,
226
222
  };
227
- if (getThing) {
228
- persister[getThing] = () => thing;
229
- }
230
223
  return objFreeze(persister);
231
224
  };
232
225
 
@@ -321,7 +314,7 @@ const createIndexedDbPersister = (
321
314
  delPersisterListener,
322
315
  onIgnoredError,
323
316
  false,
324
- ['getDbName', dbName],
317
+ {getDbName: () => dbName},
325
318
  );
326
319
  };
327
320