tinybase 5.0.0-beta.3 → 5.0.0-beta.5

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 (336) hide show
  1. package/lib/checkpoints.js +1 -1
  2. package/lib/checkpoints.js.gz +0 -0
  3. package/lib/cjs/checkpoints.cjs +1 -1
  4. package/lib/cjs/checkpoints.cjs.gz +0 -0
  5. package/lib/cjs/indexes.cjs +1 -1
  6. package/lib/cjs/indexes.cjs.gz +0 -0
  7. package/lib/cjs/mergeable-store.cjs +1 -1
  8. package/lib/cjs/mergeable-store.cjs.gz +0 -0
  9. package/lib/cjs/metrics.cjs +1 -1
  10. package/lib/cjs/metrics.cjs.gz +0 -0
  11. package/lib/cjs/persisters/persister-automerge.cjs +1 -1
  12. package/lib/cjs/persisters/persister-automerge.cjs.gz +0 -0
  13. package/lib/cjs/persisters/persister-browser.cjs +1 -1
  14. package/lib/cjs/persisters/persister-browser.cjs.gz +0 -0
  15. package/lib/cjs/persisters/persister-cr-sqlite-wasm.cjs +1 -1
  16. package/lib/cjs/persisters/persister-cr-sqlite-wasm.cjs.gz +0 -0
  17. package/lib/cjs/persisters/persister-electric-sql.cjs +1 -1
  18. package/lib/cjs/persisters/persister-electric-sql.cjs.gz +0 -0
  19. package/lib/cjs/persisters/persister-expo-sqlite-next.cjs +1 -1
  20. package/lib/cjs/persisters/persister-expo-sqlite-next.cjs.gz +0 -0
  21. package/lib/cjs/persisters/persister-expo-sqlite.cjs +1 -1
  22. package/lib/cjs/persisters/persister-expo-sqlite.cjs.gz +0 -0
  23. package/lib/cjs/persisters/persister-file.cjs +1 -1
  24. package/lib/cjs/persisters/persister-file.cjs.gz +0 -0
  25. package/lib/cjs/persisters/persister-indexed-db.cjs +1 -1
  26. package/lib/cjs/persisters/persister-indexed-db.cjs.gz +0 -0
  27. package/lib/cjs/persisters/persister-libsql.cjs +1 -0
  28. package/lib/cjs/persisters/persister-libsql.cjs.gz +0 -0
  29. package/lib/cjs/persisters/persister-partykit-client.cjs +1 -1
  30. package/lib/cjs/persisters/persister-partykit-client.cjs.gz +0 -0
  31. package/lib/cjs/persisters/persister-remote.cjs +1 -1
  32. package/lib/cjs/persisters/persister-remote.cjs.gz +0 -0
  33. package/lib/cjs/persisters/persister-sqlite-wasm.cjs +1 -1
  34. package/lib/cjs/persisters/persister-sqlite-wasm.cjs.gz +0 -0
  35. package/lib/cjs/persisters/persister-sqlite3.cjs +1 -1
  36. package/lib/cjs/persisters/persister-sqlite3.cjs.gz +0 -0
  37. package/lib/cjs/persisters/persister-yjs.cjs +1 -1
  38. package/lib/cjs/persisters/persister-yjs.cjs.gz +0 -0
  39. package/lib/cjs/persisters.cjs +1 -1
  40. package/lib/cjs/persisters.cjs.gz +0 -0
  41. package/lib/cjs/queries.cjs +1 -1
  42. package/lib/cjs/queries.cjs.gz +0 -0
  43. package/lib/cjs/relationships.cjs +1 -1
  44. package/lib/cjs/relationships.cjs.gz +0 -0
  45. package/lib/cjs/store.cjs +1 -1
  46. package/lib/cjs/store.cjs.gz +0 -0
  47. package/lib/cjs/tinybase.cjs +1 -1
  48. package/lib/cjs/tinybase.cjs.gz +0 -0
  49. package/lib/cjs/tools.cjs +1 -1
  50. package/lib/cjs/tools.cjs.gz +0 -0
  51. package/lib/cjs/ui-react-dom-debug.cjs +1 -1
  52. package/lib/cjs/ui-react-dom-debug.cjs.gz +0 -0
  53. package/lib/cjs-es6/checkpoints.cjs +1 -1
  54. package/lib/cjs-es6/checkpoints.cjs.gz +0 -0
  55. package/lib/cjs-es6/indexes.cjs +1 -1
  56. package/lib/cjs-es6/indexes.cjs.gz +0 -0
  57. package/lib/cjs-es6/mergeable-store.cjs +1 -1
  58. package/lib/cjs-es6/mergeable-store.cjs.gz +0 -0
  59. package/lib/cjs-es6/metrics.cjs +1 -1
  60. package/lib/cjs-es6/metrics.cjs.gz +0 -0
  61. package/lib/cjs-es6/persisters/persister-automerge.cjs +1 -1
  62. package/lib/cjs-es6/persisters/persister-automerge.cjs.gz +0 -0
  63. package/lib/cjs-es6/persisters/persister-browser.cjs +1 -1
  64. package/lib/cjs-es6/persisters/persister-browser.cjs.gz +0 -0
  65. package/lib/cjs-es6/persisters/persister-cr-sqlite-wasm.cjs +1 -1
  66. package/lib/cjs-es6/persisters/persister-cr-sqlite-wasm.cjs.gz +0 -0
  67. package/lib/cjs-es6/persisters/persister-electric-sql.cjs +1 -1
  68. package/lib/cjs-es6/persisters/persister-electric-sql.cjs.gz +0 -0
  69. package/lib/cjs-es6/persisters/persister-expo-sqlite-next.cjs +1 -1
  70. package/lib/cjs-es6/persisters/persister-expo-sqlite-next.cjs.gz +0 -0
  71. package/lib/cjs-es6/persisters/persister-expo-sqlite.cjs +1 -1
  72. package/lib/cjs-es6/persisters/persister-expo-sqlite.cjs.gz +0 -0
  73. package/lib/cjs-es6/persisters/persister-file.cjs +1 -1
  74. package/lib/cjs-es6/persisters/persister-file.cjs.gz +0 -0
  75. package/lib/cjs-es6/persisters/persister-indexed-db.cjs +1 -1
  76. package/lib/cjs-es6/persisters/persister-indexed-db.cjs.gz +0 -0
  77. package/lib/cjs-es6/persisters/persister-libsql.cjs +1 -0
  78. package/lib/cjs-es6/persisters/persister-libsql.cjs.gz +0 -0
  79. package/lib/cjs-es6/persisters/persister-partykit-client.cjs +1 -1
  80. package/lib/cjs-es6/persisters/persister-partykit-client.cjs.gz +0 -0
  81. package/lib/cjs-es6/persisters/persister-remote.cjs +1 -1
  82. package/lib/cjs-es6/persisters/persister-remote.cjs.gz +0 -0
  83. package/lib/cjs-es6/persisters/persister-sqlite-wasm.cjs +1 -1
  84. package/lib/cjs-es6/persisters/persister-sqlite-wasm.cjs.gz +0 -0
  85. package/lib/cjs-es6/persisters/persister-sqlite3.cjs +1 -1
  86. package/lib/cjs-es6/persisters/persister-sqlite3.cjs.gz +0 -0
  87. package/lib/cjs-es6/persisters/persister-yjs.cjs +1 -1
  88. package/lib/cjs-es6/persisters/persister-yjs.cjs.gz +0 -0
  89. package/lib/cjs-es6/persisters.cjs +1 -1
  90. package/lib/cjs-es6/persisters.cjs.gz +0 -0
  91. package/lib/cjs-es6/queries.cjs +1 -1
  92. package/lib/cjs-es6/queries.cjs.gz +0 -0
  93. package/lib/cjs-es6/relationships.cjs +1 -1
  94. package/lib/cjs-es6/relationships.cjs.gz +0 -0
  95. package/lib/cjs-es6/store.cjs +1 -1
  96. package/lib/cjs-es6/store.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/debug/checkpoints.js +3 -1
  104. package/lib/debug/indexes.js +3 -1
  105. package/lib/debug/mergeable-store.js +247 -139
  106. package/lib/debug/metrics.js +3 -1
  107. package/lib/debug/persisters/persister-automerge.js +36 -12
  108. package/lib/debug/persisters/persister-browser.js +37 -13
  109. package/lib/debug/persisters/persister-cr-sqlite-wasm.js +36 -12
  110. package/lib/debug/persisters/persister-electric-sql.js +36 -12
  111. package/lib/debug/persisters/persister-expo-sqlite-next.js +36 -12
  112. package/lib/debug/persisters/persister-expo-sqlite.js +36 -12
  113. package/lib/debug/persisters/persister-file.js +37 -13
  114. package/lib/debug/persisters/persister-indexed-db.js +36 -12
  115. package/lib/debug/persisters/persister-libsql.js +898 -0
  116. package/lib/debug/persisters/persister-partykit-client.js +36 -12
  117. package/lib/debug/persisters/persister-remote.js +36 -12
  118. package/lib/debug/persisters/persister-sqlite-wasm.js +36 -12
  119. package/lib/debug/persisters/persister-sqlite3.js +36 -12
  120. package/lib/debug/persisters/persister-yjs.js +36 -12
  121. package/lib/debug/persisters.js +36 -12
  122. package/lib/debug/queries.js +7 -4
  123. package/lib/debug/relationships.js +3 -1
  124. package/lib/debug/store.js +21 -22
  125. package/lib/debug/tinybase.js +279 -150
  126. package/lib/debug/tools.js +7 -4
  127. package/lib/debug/ui-react-dom.js +55 -34
  128. package/lib/es6/checkpoints.js +1 -1
  129. package/lib/es6/checkpoints.js.gz +0 -0
  130. package/lib/es6/indexes.js +1 -1
  131. package/lib/es6/indexes.js.gz +0 -0
  132. package/lib/es6/mergeable-store.js +1 -1
  133. package/lib/es6/mergeable-store.js.gz +0 -0
  134. package/lib/es6/metrics.js +1 -1
  135. package/lib/es6/metrics.js.gz +0 -0
  136. package/lib/es6/persisters/persister-automerge.js +1 -1
  137. package/lib/es6/persisters/persister-automerge.js.gz +0 -0
  138. package/lib/es6/persisters/persister-browser.js +1 -1
  139. package/lib/es6/persisters/persister-browser.js.gz +0 -0
  140. package/lib/es6/persisters/persister-cr-sqlite-wasm.js +1 -1
  141. package/lib/es6/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  142. package/lib/es6/persisters/persister-electric-sql.js +1 -1
  143. package/lib/es6/persisters/persister-electric-sql.js.gz +0 -0
  144. package/lib/es6/persisters/persister-expo-sqlite-next.js +1 -1
  145. package/lib/es6/persisters/persister-expo-sqlite-next.js.gz +0 -0
  146. package/lib/es6/persisters/persister-expo-sqlite.js +1 -1
  147. package/lib/es6/persisters/persister-expo-sqlite.js.gz +0 -0
  148. package/lib/es6/persisters/persister-file.js +1 -1
  149. package/lib/es6/persisters/persister-file.js.gz +0 -0
  150. package/lib/es6/persisters/persister-indexed-db.js +1 -1
  151. package/lib/es6/persisters/persister-indexed-db.js.gz +0 -0
  152. package/lib/es6/persisters/persister-libsql.js +1 -0
  153. package/lib/es6/persisters/persister-libsql.js.gz +0 -0
  154. package/lib/es6/persisters/persister-partykit-client.js +1 -1
  155. package/lib/es6/persisters/persister-partykit-client.js.gz +0 -0
  156. package/lib/es6/persisters/persister-remote.js +1 -1
  157. package/lib/es6/persisters/persister-remote.js.gz +0 -0
  158. package/lib/es6/persisters/persister-sqlite-wasm.js +1 -1
  159. package/lib/es6/persisters/persister-sqlite-wasm.js.gz +0 -0
  160. package/lib/es6/persisters/persister-sqlite3.js +1 -1
  161. package/lib/es6/persisters/persister-sqlite3.js.gz +0 -0
  162. package/lib/es6/persisters/persister-yjs.js +1 -1
  163. package/lib/es6/persisters/persister-yjs.js.gz +0 -0
  164. package/lib/es6/persisters.js +1 -1
  165. package/lib/es6/persisters.js.gz +0 -0
  166. package/lib/es6/queries.js +1 -1
  167. package/lib/es6/queries.js.gz +0 -0
  168. package/lib/es6/relationships.js +1 -1
  169. package/lib/es6/relationships.js.gz +0 -0
  170. package/lib/es6/store.js +1 -1
  171. package/lib/es6/store.js.gz +0 -0
  172. package/lib/es6/tinybase.js +1 -1
  173. package/lib/es6/tinybase.js.gz +0 -0
  174. package/lib/es6/tools.js +1 -1
  175. package/lib/es6/tools.js.gz +0 -0
  176. package/lib/es6/ui-react-dom-debug.js +1 -1
  177. package/lib/es6/ui-react-dom-debug.js.gz +0 -0
  178. package/lib/indexes.js +1 -1
  179. package/lib/indexes.js.gz +0 -0
  180. package/lib/mergeable-store.js +1 -1
  181. package/lib/mergeable-store.js.gz +0 -0
  182. package/lib/metrics.js +1 -1
  183. package/lib/metrics.js.gz +0 -0
  184. package/lib/persisters/persister-automerge.js +1 -1
  185. package/lib/persisters/persister-automerge.js.gz +0 -0
  186. package/lib/persisters/persister-browser.js +1 -1
  187. package/lib/persisters/persister-browser.js.gz +0 -0
  188. package/lib/persisters/persister-cr-sqlite-wasm.js +1 -1
  189. package/lib/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  190. package/lib/persisters/persister-electric-sql.js +1 -1
  191. package/lib/persisters/persister-electric-sql.js.gz +0 -0
  192. package/lib/persisters/persister-expo-sqlite-next.js +1 -1
  193. package/lib/persisters/persister-expo-sqlite-next.js.gz +0 -0
  194. package/lib/persisters/persister-expo-sqlite.js +1 -1
  195. package/lib/persisters/persister-expo-sqlite.js.gz +0 -0
  196. package/lib/persisters/persister-file.js +1 -1
  197. package/lib/persisters/persister-file.js.gz +0 -0
  198. package/lib/persisters/persister-indexed-db.js +1 -1
  199. package/lib/persisters/persister-indexed-db.js.gz +0 -0
  200. package/lib/persisters/persister-libsql.js +1 -0
  201. package/lib/persisters/persister-libsql.js.gz +0 -0
  202. package/lib/persisters/persister-partykit-client.js +1 -1
  203. package/lib/persisters/persister-partykit-client.js.gz +0 -0
  204. package/lib/persisters/persister-remote.js +1 -1
  205. package/lib/persisters/persister-remote.js.gz +0 -0
  206. package/lib/persisters/persister-sqlite-wasm.js +1 -1
  207. package/lib/persisters/persister-sqlite-wasm.js.gz +0 -0
  208. package/lib/persisters/persister-sqlite3.js +1 -1
  209. package/lib/persisters/persister-sqlite3.js.gz +0 -0
  210. package/lib/persisters/persister-yjs.js +1 -1
  211. package/lib/persisters/persister-yjs.js.gz +0 -0
  212. package/lib/persisters.js +1 -1
  213. package/lib/persisters.js.gz +0 -0
  214. package/lib/queries.js +1 -1
  215. package/lib/queries.js.gz +0 -0
  216. package/lib/relationships.js +1 -1
  217. package/lib/relationships.js.gz +0 -0
  218. package/lib/store.js +1 -1
  219. package/lib/store.js.gz +0 -0
  220. package/lib/tinybase.js +1 -1
  221. package/lib/tinybase.js.gz +0 -0
  222. package/lib/tools.js +1 -1
  223. package/lib/tools.js.gz +0 -0
  224. package/lib/types/mergeable-store.d.ts +78 -11
  225. package/lib/types/persisters/persister-browser.d.ts +2 -2
  226. package/lib/types/persisters/persister-file.d.ts +1 -1
  227. package/lib/types/persisters/persister-libsql.d.ts +139 -0
  228. package/lib/types/persisters.d.ts +19 -7
  229. package/lib/types/with-schemas/mergeable-store.d.ts +314 -31
  230. package/lib/types/with-schemas/persisters/persister-browser.d.ts +2 -2
  231. package/lib/types/with-schemas/persisters/persister-file.d.ts +1 -1
  232. package/lib/types/with-schemas/persisters/persister-libsql.d.ts +152 -0
  233. package/lib/types/with-schemas/persisters.d.ts +14 -6
  234. package/lib/types/with-schemas/store.d.ts +37 -87
  235. package/lib/umd/checkpoints.js +1 -1
  236. package/lib/umd/checkpoints.js.gz +0 -0
  237. package/lib/umd/indexes.js +1 -1
  238. package/lib/umd/indexes.js.gz +0 -0
  239. package/lib/umd/mergeable-store.js +1 -1
  240. package/lib/umd/mergeable-store.js.gz +0 -0
  241. package/lib/umd/metrics.js +1 -1
  242. package/lib/umd/metrics.js.gz +0 -0
  243. package/lib/umd/persisters/persister-automerge.js +1 -1
  244. package/lib/umd/persisters/persister-automerge.js.gz +0 -0
  245. package/lib/umd/persisters/persister-browser.js +1 -1
  246. package/lib/umd/persisters/persister-browser.js.gz +0 -0
  247. package/lib/umd/persisters/persister-cr-sqlite-wasm.js +1 -1
  248. package/lib/umd/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  249. package/lib/umd/persisters/persister-electric-sql.js +1 -1
  250. package/lib/umd/persisters/persister-electric-sql.js.gz +0 -0
  251. package/lib/umd/persisters/persister-expo-sqlite-next.js +1 -1
  252. package/lib/umd/persisters/persister-expo-sqlite-next.js.gz +0 -0
  253. package/lib/umd/persisters/persister-expo-sqlite.js +1 -1
  254. package/lib/umd/persisters/persister-expo-sqlite.js.gz +0 -0
  255. package/lib/umd/persisters/persister-file.js +1 -1
  256. package/lib/umd/persisters/persister-file.js.gz +0 -0
  257. package/lib/umd/persisters/persister-indexed-db.js +1 -1
  258. package/lib/umd/persisters/persister-indexed-db.js.gz +0 -0
  259. package/lib/umd/persisters/persister-libsql.js +1 -0
  260. package/lib/umd/persisters/persister-libsql.js.gz +0 -0
  261. package/lib/umd/persisters/persister-partykit-client.js +1 -1
  262. package/lib/umd/persisters/persister-partykit-client.js.gz +0 -0
  263. package/lib/umd/persisters/persister-remote.js +1 -1
  264. package/lib/umd/persisters/persister-remote.js.gz +0 -0
  265. package/lib/umd/persisters/persister-sqlite-wasm.js +1 -1
  266. package/lib/umd/persisters/persister-sqlite-wasm.js.gz +0 -0
  267. package/lib/umd/persisters/persister-sqlite3.js +1 -1
  268. package/lib/umd/persisters/persister-sqlite3.js.gz +0 -0
  269. package/lib/umd/persisters/persister-yjs.js +1 -1
  270. package/lib/umd/persisters/persister-yjs.js.gz +0 -0
  271. package/lib/umd/persisters.js +1 -1
  272. package/lib/umd/persisters.js.gz +0 -0
  273. package/lib/umd/queries.js +1 -1
  274. package/lib/umd/queries.js.gz +0 -0
  275. package/lib/umd/relationships.js +1 -1
  276. package/lib/umd/relationships.js.gz +0 -0
  277. package/lib/umd/store.js +1 -1
  278. package/lib/umd/store.js.gz +0 -0
  279. package/lib/umd/tinybase.js +1 -1
  280. package/lib/umd/tinybase.js.gz +0 -0
  281. package/lib/umd/tools.js +1 -1
  282. package/lib/umd/tools.js.gz +0 -0
  283. package/lib/umd/ui-react-dom-debug.js +1 -1
  284. package/lib/umd/ui-react-dom-debug.js.gz +0 -0
  285. package/lib/umd-es6/checkpoints.js +1 -1
  286. package/lib/umd-es6/checkpoints.js.gz +0 -0
  287. package/lib/umd-es6/indexes.js +1 -1
  288. package/lib/umd-es6/indexes.js.gz +0 -0
  289. package/lib/umd-es6/mergeable-store.js +1 -1
  290. package/lib/umd-es6/mergeable-store.js.gz +0 -0
  291. package/lib/umd-es6/metrics.js +1 -1
  292. package/lib/umd-es6/metrics.js.gz +0 -0
  293. package/lib/umd-es6/persisters/persister-automerge.js +1 -1
  294. package/lib/umd-es6/persisters/persister-automerge.js.gz +0 -0
  295. package/lib/umd-es6/persisters/persister-browser.js +1 -1
  296. package/lib/umd-es6/persisters/persister-browser.js.gz +0 -0
  297. package/lib/umd-es6/persisters/persister-cr-sqlite-wasm.js +1 -1
  298. package/lib/umd-es6/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  299. package/lib/umd-es6/persisters/persister-electric-sql.js +1 -1
  300. package/lib/umd-es6/persisters/persister-electric-sql.js.gz +0 -0
  301. package/lib/umd-es6/persisters/persister-expo-sqlite-next.js +1 -1
  302. package/lib/umd-es6/persisters/persister-expo-sqlite-next.js.gz +0 -0
  303. package/lib/umd-es6/persisters/persister-expo-sqlite.js +1 -1
  304. package/lib/umd-es6/persisters/persister-expo-sqlite.js.gz +0 -0
  305. package/lib/umd-es6/persisters/persister-file.js +1 -1
  306. package/lib/umd-es6/persisters/persister-file.js.gz +0 -0
  307. package/lib/umd-es6/persisters/persister-indexed-db.js +1 -1
  308. package/lib/umd-es6/persisters/persister-indexed-db.js.gz +0 -0
  309. package/lib/umd-es6/persisters/persister-libsql.js +1 -0
  310. package/lib/umd-es6/persisters/persister-libsql.js.gz +0 -0
  311. package/lib/umd-es6/persisters/persister-partykit-client.js +1 -1
  312. package/lib/umd-es6/persisters/persister-partykit-client.js.gz +0 -0
  313. package/lib/umd-es6/persisters/persister-remote.js +1 -1
  314. package/lib/umd-es6/persisters/persister-remote.js.gz +0 -0
  315. package/lib/umd-es6/persisters/persister-sqlite-wasm.js +1 -1
  316. package/lib/umd-es6/persisters/persister-sqlite-wasm.js.gz +0 -0
  317. package/lib/umd-es6/persisters/persister-sqlite3.js +1 -1
  318. package/lib/umd-es6/persisters/persister-sqlite3.js.gz +0 -0
  319. package/lib/umd-es6/persisters/persister-yjs.js +1 -1
  320. package/lib/umd-es6/persisters/persister-yjs.js.gz +0 -0
  321. package/lib/umd-es6/persisters.js +1 -1
  322. package/lib/umd-es6/persisters.js.gz +0 -0
  323. package/lib/umd-es6/queries.js +1 -1
  324. package/lib/umd-es6/queries.js.gz +0 -0
  325. package/lib/umd-es6/relationships.js +1 -1
  326. package/lib/umd-es6/relationships.js.gz +0 -0
  327. package/lib/umd-es6/store.js +1 -1
  328. package/lib/umd-es6/store.js.gz +0 -0
  329. package/lib/umd-es6/tinybase.js +1 -1
  330. package/lib/umd-es6/tinybase.js.gz +0 -0
  331. package/lib/umd-es6/tools.js +1 -1
  332. package/lib/umd-es6/tools.js.gz +0 -0
  333. package/lib/umd-es6/ui-react-dom-debug.js +1 -1
  334. package/lib/umd-es6/ui-react-dom-debug.js.gz +0 -0
  335. package/package.json +35 -30
  336. package/readme.md +2 -2
@@ -5,60 +5,70 @@
5
5
  */
6
6
 
7
7
  import {
8
- Cell,
8
+ CellIdFromSchema,
9
+ TableIdFromSchema,
10
+ ValueIdFromSchema,
11
+ } from './internal/store';
12
+ import {
13
+ CellOrUndefined,
9
14
  NoSchemas,
15
+ NoTablesSchema,
16
+ NoValuesSchema,
10
17
  OptionalSchemas,
11
18
  OptionalTablesSchema,
12
19
  OptionalValuesSchema,
13
20
  Store,
14
- Value,
21
+ TablesSchema,
22
+ ValueOrUndefined,
23
+ ValuesSchema,
15
24
  } from './store.d';
16
25
  import {Id} from './common';
17
26
  import {IdObj} from '../../common/obj';
18
27
 
28
+ /**
29
+ * The Hash type
30
+ * @category Stamps
31
+ */
32
+ export type Hash = number;
33
+
19
34
  /**
20
35
  * The Time type
21
36
  * @category Stamps
22
37
  */
23
38
  export type Time = string;
24
39
 
40
+ /**
41
+ * The HashStamp type
42
+ * @category Stamps
43
+ */
44
+ export type HashStamp<Thing> = [time: Time, thing: Thing, hash: Hash];
45
+
25
46
  /**
26
47
  * The Stamp type
27
48
  * @category Stamps
28
49
  */
29
50
  export type Stamp<Thing> = [time: Time, thing: Thing];
30
51
 
31
- type MergeableCell<Schema extends OptionalTablesSchema> = Stamp<Cell<
32
- Schema,
33
- any,
34
- any
35
- > | null>;
36
- type MergeableRow<Schema extends OptionalTablesSchema> = Stamp<IdObj<
37
- MergeableCell<Schema>
38
- > | null>;
39
- type MergeableTable<Schema extends OptionalTablesSchema> = Stamp<IdObj<
40
- MergeableRow<Schema>
41
- > | null>;
42
- type MergeableTables<Schema extends OptionalTablesSchema> = Stamp<
43
- IdObj<MergeableTable<Schema>>
44
- >;
45
- type MergeableValue<Schema extends OptionalValuesSchema> = Stamp<Value<
46
- Schema,
47
- any,
48
- any
49
- > | null>;
50
- type MergeableValues<Schema extends OptionalValuesSchema> = Stamp<
51
- IdObj<MergeableValue<Schema>>
52
- >;
53
-
54
52
  /**
55
53
  * The MergeableContent type
56
54
  * @category Mergeable
57
55
  */
58
- export type MergeableContent<Schemas extends OptionalSchemas> = Stamp<
56
+ export type MergeableContent<Schemas extends OptionalSchemas> = HashStamp<
59
57
  [
60
- mergeableTables: MergeableTables<Schemas[0]>,
61
- mergeableValues: MergeableValues<Schemas[1]>,
58
+ mergeableTables: HashStamp<{
59
+ [TableId in TableIdFromSchema<Schemas[0]>]?: HashStamp<{
60
+ [rowId: Id]: HashStamp<{
61
+ [CellId in CellIdFromSchema<Schemas[0], TableId>]?: HashStamp<
62
+ CellOrUndefined<Schemas[0], TableId, CellId>
63
+ >;
64
+ }>;
65
+ }>;
66
+ }>,
67
+ mergeableValues: HashStamp<{
68
+ [ValueId in ValueIdFromSchema<Schemas[1]>]?: HashStamp<
69
+ ValueOrUndefined<Schemas[1], ValueId>
70
+ >;
71
+ }>,
62
72
  ]
63
73
  >;
64
74
 
@@ -66,8 +76,26 @@ export type MergeableContent<Schemas extends OptionalSchemas> = Stamp<
66
76
  * The MergeableChanges type
67
77
  * @category Mergeable
68
78
  */
69
- export type MergeableChanges<Schemas extends OptionalSchemas> =
70
- MergeableContent<Schemas>;
79
+ export type MergeableChanges<Schemas extends OptionalSchemas> = Stamp<
80
+ [
81
+ mergeableTables: Stamp<{
82
+ [TableId in TableIdFromSchema<Schemas[0]>]?: Stamp<
83
+ IdObj<
84
+ Stamp<{
85
+ [CellId in CellIdFromSchema<Schemas[0], TableId>]?: Stamp<
86
+ CellOrUndefined<Schemas[0], TableId, CellId>
87
+ >;
88
+ }>
89
+ >
90
+ >;
91
+ }>,
92
+ mergeableValues: Stamp<{
93
+ [ValueId in ValueIdFromSchema<Schemas[1]>]?: Stamp<
94
+ ValueOrUndefined<Schemas[1], ValueId>
95
+ >;
96
+ }>,
97
+ ]
98
+ >;
71
99
 
72
100
  /**
73
101
  * The MergeableStore type
@@ -96,13 +124,268 @@ export interface MergeableStore<Schemas extends OptionalSchemas>
96
124
  mergeableContent: MergeableContent<Schemas>,
97
125
  ): MergeableStore<Schemas>;
98
126
 
127
+ /**
128
+ * The getTransactionMergeableChanges method
129
+ * @category Merging
130
+ */
131
+ getTransactionMergeableChanges(): MergeableChanges<Schemas>;
132
+
99
133
  /**
100
134
  * The applyMergeableChanges method
101
135
  * @category Merging
102
136
  */
103
137
  applyMergeableChanges(
104
- mergeableChanges: MergeableChanges<Schemas>,
138
+ mergeableChanges: MergeableChanges<Schemas> | MergeableContent<Schemas>,
105
139
  ): MergeableStore<Schemas>;
140
+
141
+ /**
142
+ * The getContentHash method
143
+ * @category Hashes
144
+ */
145
+ getContentHash(): Hash;
146
+
147
+ /**
148
+ * The getTablesHash method
149
+ * @category Hashes
150
+ */
151
+ getTablesHash(): Hash;
152
+
153
+ /**
154
+ * The getTableHash method
155
+ * @category Hashes
156
+ */
157
+ getTableHash(tableId: TableIdFromSchema<Schemas[0]>): Hash;
158
+
159
+ /**
160
+ * The getRowHash method
161
+ * @category Hashes
162
+ */
163
+ getRowHash<TableId extends TableIdFromSchema<Schemas[0]>>(
164
+ tableId: TableId,
165
+ rowId: Id,
166
+ ): Hash;
167
+
168
+ /**
169
+ * The getCellHash method
170
+ * @category Hashes
171
+ */
172
+ getCellHash<TableId extends TableIdFromSchema<Schemas[0]>>(
173
+ tableId: TableId,
174
+ rowId: Id,
175
+ cellId: CellIdFromSchema<Schemas[0], TableId>,
176
+ ): Hash;
177
+
178
+ /**
179
+ * The getValuesHash method
180
+ * @category Hashes
181
+ */
182
+ getValuesHash(): Hash;
183
+
184
+ /**
185
+ * The getValueHash method
186
+ * @category Hashes
187
+ */
188
+ getValueHash(valueId: ValueIdFromSchema<Schemas[1]>): Hash;
189
+
190
+ /**
191
+ * The setTablesSchema method lets you specify the TablesSchema of the tabular
192
+ * part of the Store.
193
+ *
194
+ * Note that this may result in a change to data in the Store, as defaults are
195
+ * applied or as invalid Table, Row, or Cell objects are removed. These
196
+ * changes will fire any listeners to that data, as expected.
197
+ *
198
+ * When no longer needed, you can also completely remove an existing
199
+ * TablesSchema with the delTablesSchema method.
200
+ * @param tablesSchema The TablesSchema to be set for the Store.
201
+ * @returns A reference to the Store.
202
+ * @example
203
+ * This example sets the TablesSchema of a Store after it has been created.
204
+ *
205
+ * ```js
206
+ * const store = createStore().setTablesSchema({
207
+ * pets: {
208
+ * species: {type: 'string'},
209
+ * sold: {type: 'boolean', default: false},
210
+ * },
211
+ * });
212
+ * store.addRow('pets', {species: 'dog', color: 'brown', sold: 'maybe'});
213
+ *
214
+ * console.log(store.getTables());
215
+ * // -> {pets: {0: {species: 'dog', sold: false}}}
216
+ * ```
217
+ * @category Setter
218
+ * @since v3.0.0
219
+ */
220
+ setTablesSchema<TS extends TablesSchema>(
221
+ tablesSchema: TS,
222
+ ): MergeableStore<[typeof tablesSchema, Schemas[1]]>;
223
+
224
+ /**
225
+ * The setValuesSchema method lets you specify the ValuesSchema of the keyed
226
+ * Values part of the Store.
227
+ *
228
+ * Note that this may result in a change to data in the Store, as defaults are
229
+ * applied or as invalid Values are removed. These changes will fire any
230
+ * listeners to that data, as expected.
231
+ *
232
+ * When no longer needed, you can also completely remove an existing
233
+ * ValuesSchema with the delValuesSchema method.
234
+ * @param valuesSchema The ValuesSchema to be set for the Store.
235
+ * @returns A reference to the Store.
236
+ * @example
237
+ * This example sets the ValuesSchema of a Store after it has been created.
238
+ *
239
+ * ```js
240
+ * const store = createStore().setValuesSchema({
241
+ * open: {type: 'boolean', default: false},
242
+ * });
243
+ * store.setValue('open', 'maybe');
244
+ *
245
+ * console.log(store.getValues());
246
+ * // -> {open: false}
247
+ * ```
248
+ * @category Setter
249
+ * @since v3.0.0
250
+ */
251
+ setValuesSchema<VS extends ValuesSchema>(
252
+ valuesSchema: VS,
253
+ ): MergeableStore<[Schemas[0], typeof valuesSchema]>;
254
+
255
+ /**
256
+ * The setSchema method lets you specify the TablesSchema and ValuesSchema of
257
+ * the Store.
258
+ *
259
+ * Note that this may result in a change to data in the Store, as defaults are
260
+ * applied or as invalid Table, Row, Cell, or Value objects are removed. These
261
+ * changes will fire any listeners to that data, as expected.
262
+ *
263
+ * From v3.0 onwards, this method takes two arguments. The first is the
264
+ * TablesSchema object, the second the ValuesSchema. In previous versions
265
+ * (before the existence of the ValuesSchema data structure), only the first
266
+ * was present. For backwards compatibility the new second parameter is
267
+ * optional.
268
+ * @param tablesSchema The TablesSchema to be set for the Store.
269
+ * @param valuesSchema The ValuesSchema to be set for the Store.
270
+ * @returns A reference to the Store.
271
+ * @example
272
+ * This example sets the TablesSchema and ValuesSchema of a Store after it has
273
+ * been created.
274
+ *
275
+ * ```js
276
+ * const store = createStore().setSchema(
277
+ * {
278
+ * pets: {
279
+ * species: {type: 'string'},
280
+ * sold: {type: 'boolean', default: false},
281
+ * },
282
+ * },
283
+ * {open: {type: 'boolean', default: false}},
284
+ * );
285
+ * store.addRow('pets', {species: 'dog', color: 'brown', sold: 'maybe'});
286
+ * store.setValue('open', 'maybe');
287
+ *
288
+ * console.log(store.getTables());
289
+ * // -> {pets: {0: {species: 'dog', sold: false}}}
290
+ * console.log(store.getValues());
291
+ * // -> {open: false}
292
+ * ```
293
+ * @example
294
+ * This example sets just the TablesSchema of a Store after it has been
295
+ * created.
296
+ *
297
+ * ```js
298
+ * const store = createStore().setSchema({
299
+ * pets: {
300
+ * species: {type: 'string'},
301
+ * sold: {type: 'boolean', default: false},
302
+ * },
303
+ * });
304
+ * store.addRow('pets', {species: 'dog', color: 'brown', sold: 'maybe'});
305
+ *
306
+ * console.log(store.getTables());
307
+ * // -> {pets: {0: {species: 'dog', sold: false}}}
308
+ * ```
309
+ * @category Setter
310
+ */
311
+ setSchema<TS extends TablesSchema, VS extends ValuesSchema>(
312
+ tablesSchema: TS,
313
+ valuesSchema?: VS,
314
+ ): MergeableStore<
315
+ [
316
+ typeof tablesSchema,
317
+ Exclude<ValuesSchema, typeof valuesSchema> extends never
318
+ ? NoValuesSchema
319
+ : NonNullable<typeof valuesSchema>,
320
+ ]
321
+ >;
322
+
323
+ /**
324
+ * The delTablesSchema method lets you remove the TablesSchema of the Store.
325
+ * @returns A reference to the Store.
326
+ * @example
327
+ * This example removes the TablesSchema of a Store.
328
+ *
329
+ * ```js
330
+ * const store = createStore().setTablesSchema({
331
+ * pets: {species: {type: 'string'}},
332
+ * });
333
+ * store.delTablesSchema();
334
+ * console.log(store.getTablesSchemaJson());
335
+ * // -> '{}'
336
+ * ```
337
+ * @category Deleter
338
+ */
339
+ delTablesSchema<
340
+ ValuesSchema extends OptionalValuesSchema = Schemas[1],
341
+ >(): MergeableStore<[NoTablesSchema, ValuesSchema]>;
342
+
343
+ /**
344
+ * The delValuesSchema method lets you remove the ValuesSchema of the Store.
345
+ * @returns A reference to the Store.
346
+ * @example
347
+ * This example removes the ValuesSchema of a Store.
348
+ *
349
+ * ```js
350
+ * const store = createStore().setValuesSchema({
351
+ * sold: {type: 'boolean', default: false},
352
+ * });
353
+ * store.delValuesSchema();
354
+ * console.log(store.getValuesSchemaJson());
355
+ * // -> '{}'
356
+ * ```
357
+ * @category Deleter
358
+ * @since v3.0.0
359
+ */
360
+ delValuesSchema<
361
+ TablesSchema extends OptionalTablesSchema = Schemas[0],
362
+ >(): MergeableStore<[TablesSchema, NoValuesSchema]>;
363
+
364
+ /**
365
+ * The delSchema method lets you remove both the TablesSchema and ValuesSchema
366
+ * of the Store.
367
+ *
368
+ * Prior to v3.0, this method removed the TablesSchema only.
369
+ * @returns A reference to the Store.
370
+ * @example
371
+ * This example removes the TablesSchema and ValuesSchema of a Store.
372
+ *
373
+ * ```js
374
+ * const store = createStore()
375
+ * .setTablesSchema({
376
+ * pets: {species: {type: 'string'}},
377
+ * })
378
+ * .setValuesSchema({
379
+ * sold: {type: 'boolean', default: false},
380
+ * });
381
+ * store.delSchema();
382
+ * console.log(store.getSchemaJson());
383
+ * // -> '[{},{}]'
384
+ * ```
385
+ * @category Deleter
386
+ * @since v3.0.0
387
+ */
388
+ delSchema(): MergeableStore<NoSchemas>;
106
389
  }
107
390
 
108
391
  /**
@@ -27,7 +27,7 @@ import {Persister} from '../persisters';
27
27
  * @since v4.3.14
28
28
  */
29
29
  export interface SessionPersister<Schemas extends OptionalSchemas>
30
- extends Persister<Schemas> {
30
+ extends Persister<Schemas, true> {
31
31
  /**
32
32
  * The getStorageName method returns the unique key of the storage location
33
33
  * the Store is being persisted to.
@@ -60,7 +60,7 @@ export interface SessionPersister<Schemas extends OptionalSchemas>
60
60
  * @since v4.3.14
61
61
  */
62
62
  export interface LocalPersister<Schemas extends OptionalSchemas>
63
- extends Persister<Schemas> {
63
+ extends Persister<Schemas, true> {
64
64
  /**
65
65
  * The getStorageName method returns the unique key of the storage location
66
66
  * the Store is being persisted to.
@@ -18,7 +18,7 @@ import {Persister} from '../persisters';
18
18
  * @since v4.3.14
19
19
  */
20
20
  export interface FilePersister<Schemas extends OptionalSchemas>
21
- extends Persister<Schemas> {
21
+ extends Persister<Schemas, true> {
22
22
  /**
23
23
  * The getFilePath method returns the location of the local file the Store is
24
24
  * being persisted to.
@@ -0,0 +1,152 @@
1
+ /**
2
+ * The persister-libsql module of the TinyBase project lets you save and load
3
+ * Store data to and from a local LibSQL database (in an appropriate
4
+ * environment).
5
+ * @see Persisting Data guide
6
+ * @packageDocumentation
7
+ * @module persister-libsql
8
+ * @since v4.7.0
9
+ */
10
+
11
+ import {DatabasePersisterConfig, Persister} from '../persisters';
12
+ import {OptionalSchemas, Store} from '../store';
13
+ import {Client} from '@libsql/client';
14
+
15
+ /**
16
+ * The LibSqlPersister interface is a minor extension to the Persister
17
+ * interface.
18
+ *
19
+ * It simply provides an extra getClient method for accessing a reference to the
20
+ * database client the Store is being persisted to.
21
+ * @since v4.7.0
22
+ */
23
+ export interface LibSqlPersister<Schemas extends OptionalSchemas>
24
+ extends Persister<Schemas> {
25
+ /**
26
+ * The getClient method returns a reference to the database client the Store
27
+ * is being persisted to.
28
+ * @returns A reference to the database client.
29
+ * @example
30
+ * This example creates a Persister object against a newly-created Store and
31
+ * then gets the database client back out again.
32
+ *
33
+ * ```js yolo
34
+ * const client = createClient({url: 'file:my.db'});
35
+ * const store = createStore().setTables({pets: {fido: {species: 'dog'}}});
36
+ * const persister = createLibSqlPersister(store, client, 'my_tinybase');
37
+ *
38
+ * console.log(persister.getClient() == client);
39
+ * // -> true
40
+ *
41
+ * persister.destroy();
42
+ * ```
43
+ * @category Getter
44
+ * @since v4.7.0
45
+ */
46
+ getClient: () => Client;
47
+ }
48
+
49
+ /**
50
+ * The createLibSqlPersister function creates a Persister object that can
51
+ * persist the Store to a local LibSQL database (in an appropriate environment).
52
+ *
53
+ * This has schema-based typing. The following is a simplified representation:
54
+ *
55
+ * ```ts override
56
+ * createLibSqlPersister(
57
+ * store: Store,
58
+ * client: Client,
59
+ * configOrStoreTableName?: DatabasePersisterConfig | string,
60
+ * onSqlCommand?: (sql: string, args?: any[]) => void,
61
+ * onIgnoredError?: (error: any) => void,
62
+ * ): LibSqlPersister;
63
+ * ```
64
+ *
65
+ * As well as providing a reference to the Store to persist, you must provide a
66
+ * `client` parameter which identifies the database client.
67
+ *
68
+ * A database Persister uses one of two modes: either a JSON serialization of
69
+ * the whole Store stored in a single row of a table (the default), or a tabular
70
+ * mapping of Table Ids to database table names and vice-versa).
71
+ *
72
+ * The third argument is a DatabasePersisterConfig object that configures which
73
+ * of those modes to use, and settings for each. If the third argument is simply
74
+ * a string, it is used as the `storeTableName` property of the JSON
75
+ * serialization.
76
+ *
77
+ * See the documentation for the DpcJson and DpcTabular types for more
78
+ * information on how both of those modes can be configured.
79
+ * @param store The Store to persist.
80
+ * @param db The database client that was returned from `createClient(...)`.
81
+ * @param configOrStoreTableName A DatabasePersisterConfig to configure the
82
+ * persistence mode (or a string to set the `storeTableName` property of the
83
+ * JSON serialization).
84
+ * @param onSqlCommand An optional handler called every time the Persister
85
+ * executes a SQL command or query. This is suitable for logging persistence
86
+ * behavior in a development environment.
87
+ * @param onIgnoredError An optional handler for the errors that the Persister
88
+ * would otherwise ignore when trying to save or load data. This is suitable for
89
+ * debugging persistence issues in a development environment.
90
+ * @returns A reference to the new LibSqlPersister object.
91
+ * @example
92
+ * This example creates a LibSqlPersister object and persists the Store to a
93
+ * local SQLite database as a JSON serialization into the `my_tinybase` table.
94
+ * It makes a change to the database directly and then reloads it back into the
95
+ * Store.
96
+ *
97
+ * ```js yolo
98
+ * const client = createClient({url: 'file:my.db'});
99
+ * const store = createStore().setTables({pets: {fido: {species: 'dog'}}});
100
+ * const persister = createLibSqlPersister(store, client, 'my_tinybase');
101
+ *
102
+ * await persister.save();
103
+ * // Store will be saved to the database.
104
+ *
105
+ * console.log((await client.execute('SELECT * FROM my_tinybase;')).rows);
106
+ * // -> [{_id: '_', store: '[{"pets":{"fido":{"species":"dog"}}},{}]'}]
107
+ *
108
+ * await client.execute(
109
+ * 'UPDATE my_tinybase SET store = ' +
110
+ * `'[{"pets":{"felix":{"species":"cat"}}},{}]' WHERE _id = '_';`,
111
+ * );
112
+ * await persister.load();
113
+ * console.log(store.getTables());
114
+ * // -> {pets: {felix: {species: 'cat'}}}
115
+ *
116
+ * persister.destroy();
117
+ * ```
118
+ * @example
119
+ * This example creates a LibSqlPersister object and persists the Store to a
120
+ * local SQLite database with tabular mapping.
121
+ *
122
+ * ```js yolo
123
+ * const client = createClient({url: 'file:my.db'});
124
+ * const store = createStore().setTables({pets: {fido: {species: 'dog'}}});
125
+ * const persister = createLibSqlPersister(store, client, {
126
+ * mode: 'tabular',
127
+ * tables: {load: {pets: 'pets'}, save: {pets: 'pets'}},
128
+ * });
129
+ *
130
+ * await persister.save();
131
+ * console.log((await client.execute('SELECT * FROM pets;')).rows);
132
+ * // -> [{_id: 'fido', species: 'dog'}]
133
+ *
134
+ * await client.execute(
135
+ * `INSERT INTO pets (_id, species) VALUES ('felix', 'cat')`,
136
+ * );
137
+ * await persister.load();
138
+ * console.log(store.getTables());
139
+ * // -> {pets: {fido: {species: 'dog'}, felix: {species: 'cat'}}}
140
+ *
141
+ * persister.destroy();
142
+ * ```
143
+ * @category Creation
144
+ * @since v4.7.0
145
+ */
146
+ export function createLibSqlPersister<Schemas extends OptionalSchemas>(
147
+ store: Store<Schemas>,
148
+ client: Client,
149
+ configOrStoreTableName?: DatabasePersisterConfig<Schemas> | string,
150
+ onSqlCommand?: (sql: string, args?: any[]) => void,
151
+ onIgnoredError?: (error: any) => void,
152
+ ): LibSqlPersister<Schemas>;
@@ -22,6 +22,7 @@
22
22
  * |persister-expo-sqlite|createExpoSqlitePersister|SQLite in React Native, via [expo-sqlite](https://github.com/expo/expo/tree/main/packages/expo-sqlite)|
23
23
  * |persister-expo-sqlite-next|createExpoSqliteNextPersister|SQLite in React Native, via [expo-sqlite/next](https://github.com/expo/expo/tree/main/packages/expo-sqlite/next)|
24
24
  * |persister-electric-sql|createElectricSqlPersister|Electric SQL, via [electric-sql](https://github.com/electric-sql/electric)|
25
+ * |persister-libsql|createLibSqlPersister|LibSQL for Turso, via [libsql-client](https://github.com/tursodatabase/libsql-client-ts)|
25
26
  * |persister-yjs|createYjsPersister|Yjs CRDTs, via [yjs](https://github.com/yjs/yjs)|
26
27
  * |persister-automerge|createSqliteWasmPersister|Automerge CRDTs, via [automerge-repo](https://github.com/automerge/automerge-repo)|
27
28
  *
@@ -76,10 +77,15 @@ export type PersisterStats = {
76
77
  * This has schema-based typing. The following is a simplified representation:
77
78
  *
78
79
  * ```ts override
79
- * (
80
- * getContent?: () => Content,
81
- * getChanges?: () => Changes,
82
- * ) => void;
80
+ * export type PersisterListener<SupportsMergeableStore extends boolean = false> =
81
+ * (
82
+ * getContent?: () =>
83
+ * | Content
84
+ * | (SupportsMergeableStore extends true ? MergeableContent : never),
85
+ * getChanges?: () =>
86
+ * | Changes
87
+ * | (SupportsMergeableStore extends true ? MergeableChanges : never),
88
+ * ) => void;
83
89
  * ```
84
90
  *
85
91
  * If the listener has the `getChanges` parameter, it will be used to make an
@@ -1153,7 +1159,7 @@ export interface Persister<
1153
1159
  * ```ts override
1154
1160
  * createCustomPersister<
1155
1161
  * ListeningHandle,
1156
- * SupportsMergeableStore extends boolean,
1162
+ * SupportsMergeableStore extends boolean = false,
1157
1163
  * >(
1158
1164
  * store: Store | (SupportsMergeableStore extends true ? MergeableStore : never),
1159
1165
  * getPersisted: () => Promise<
@@ -1167,7 +1173,9 @@ export interface Persister<
1167
1173
  * | (SupportsMergeableStore extends true ? MergeableContent : never),
1168
1174
  * getChanges?: () => Changes,
1169
1175
  * ) => Promise<void>,
1170
- * addPersisterListener: (listener: PersisterListener) => ListeningHandle,
1176
+ * addPersisterListener: (
1177
+ * listener: PersisterListener<SupportsMergeableStore>,
1178
+ * ) => ListeningHandle,
1171
1179
  * delPersisterListener: (listeningHandle: ListeningHandle) => void,
1172
1180
  * onIgnoredError?: (error: any) => void,
1173
1181
  * supportsMergeableStore?: SupportsMergeableStore,