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
@@ -8,38 +8,55 @@ import {CellOrUndefined, Store, ValueOrUndefined} from './store.d';
8
8
  import {Id} from './common';
9
9
  import {IdObj} from '../common/obj';
10
10
 
11
+ /**
12
+ * The Hash type
13
+ * @category Stamps
14
+ */
15
+ export type Hash = number;
16
+
11
17
  /**
12
18
  * The Time type
13
19
  * @category Stamps
14
20
  */
15
21
  export type Time = string;
16
22
 
23
+ /**
24
+ * The HashStamp type
25
+ * @category Stamps
26
+ */
27
+ export type HashStamp<Thing> = [time: Time, thing: Thing, hash: Hash];
28
+
17
29
  /**
18
30
  * The Stamp type
19
31
  * @category Stamps
20
32
  */
21
33
  export type Stamp<Thing> = [time: Time, thing: Thing];
22
34
 
23
- type MergeableCell = Stamp<CellOrUndefined>;
24
- type MergeableRow = Stamp<IdObj<MergeableCell>>;
25
- type MergeableTable = Stamp<IdObj<MergeableRow>>;
26
- type MergeableTables = Stamp<IdObj<MergeableTable>>;
27
- type MergeableValue = Stamp<ValueOrUndefined>;
28
- type MergeableValues = Stamp<IdObj<MergeableValue>>;
29
-
30
35
  /**
31
36
  * The MergeableContent type
32
37
  * @category Mergeable
33
38
  */
34
- export type MergeableContent = Stamp<
35
- [mergeableTables: MergeableTables, mergeableValues: MergeableValues]
39
+ export type MergeableContent = HashStamp<
40
+ [
41
+ mergeableTables: HashStamp<
42
+ IdObj<HashStamp<IdObj<HashStamp<IdObj<HashStamp<CellOrUndefined>>>>>>
43
+ >,
44
+ mergeableValues: HashStamp<IdObj<HashStamp<ValueOrUndefined>>>,
45
+ ]
36
46
  >;
37
47
 
38
48
  /**
39
49
  * The MergeableChanges type
40
50
  * @category Mergeable
41
51
  */
42
- export type MergeableChanges = MergeableContent;
52
+ export type MergeableChanges = Stamp<
53
+ [
54
+ mergeableTables: Stamp<
55
+ IdObj<Stamp<IdObj<Stamp<IdObj<Stamp<CellOrUndefined>>>>>>
56
+ >,
57
+ mergeableValues: Stamp<IdObj<Stamp<ValueOrUndefined>>>,
58
+ ]
59
+ >;
43
60
 
44
61
  /**
45
62
  * The MergeableStore type
@@ -65,11 +82,61 @@ export interface MergeableStore extends Store {
65
82
  */
66
83
  setMergeableContent(mergeableContent: MergeableContent): MergeableStore;
67
84
 
85
+ /**
86
+ * The getTransactionMergeableChanges method
87
+ * @category Merging
88
+ */
89
+ getTransactionMergeableChanges(): MergeableChanges;
90
+
68
91
  /**
69
92
  * The applyMergeableChanges method
70
93
  * @category Merging
71
94
  */
72
- applyMergeableChanges(mergeableChanges: MergeableChanges): MergeableStore;
95
+ applyMergeableChanges(
96
+ mergeableChanges: MergeableChanges | MergeableContent,
97
+ ): MergeableStore;
98
+
99
+ /**
100
+ * The getContentHash method
101
+ * @category Hashes
102
+ */
103
+ getContentHash(): Hash;
104
+
105
+ /**
106
+ * The getTablesHash method
107
+ * @category Hashes
108
+ */
109
+ getTablesHash(): Hash;
110
+
111
+ /**
112
+ * The getTableHash method
113
+ * @category Hashes
114
+ */
115
+ getTableHash(tableId: Id): Hash;
116
+
117
+ /**
118
+ * The getRowHash method
119
+ * @category Hashes
120
+ */
121
+ getRowHash(tableId: Id, rowId: Id): Hash;
122
+
123
+ /**
124
+ * The getCellHash method
125
+ * @category Hashes
126
+ */
127
+ getCellHash(tableId: Id, rowId: Id, cellId: Id): Hash;
128
+
129
+ /**
130
+ * The getValuesHash method
131
+ * @category Hashes
132
+ */
133
+ getValuesHash(): Hash;
134
+
135
+ /**
136
+ * The getValueHash method
137
+ * @category Hashes
138
+ */
139
+ getValueHash(valueId: Id): Hash;
73
140
  }
74
141
 
75
142
  /**
@@ -26,7 +26,7 @@ import {Store} from '../store';
26
26
  * @category Persister
27
27
  * @since v4.3.14
28
28
  */
29
- export interface SessionPersister extends Persister {
29
+ export interface SessionPersister extends Persister<true> {
30
30
  /**
31
31
  * The getStorageName method returns the unique key of the storage location
32
32
  * the Store is being persisted to.
@@ -58,7 +58,7 @@ export interface SessionPersister extends Persister {
58
58
  * @category Persister
59
59
  * @since v4.3.14
60
60
  */
61
- export interface LocalPersister extends Persister {
61
+ export interface LocalPersister extends Persister<true> {
62
62
  /**
63
63
  * The getStorageName method returns the unique key of the storage location
64
64
  * the Store is being persisted to.
@@ -17,7 +17,7 @@ import {Store} from '../store';
17
17
  * @category Persister
18
18
  * @since v4.3.14
19
19
  */
20
- export interface FilePersister extends Persister {
20
+ export interface FilePersister extends Persister<true> {
21
21
  /**
22
22
  * The getFilePath method returns the location of the local file the Store is
23
23
  * being persisted to.
@@ -0,0 +1,139 @@
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 {Client} from '@libsql/client';
13
+ import {Store} from '../store';
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 extends Persister {
24
+ /**
25
+ * The getClient method returns a reference to the database client the Store
26
+ * is being persisted to.
27
+ * @returns A reference to the database client.
28
+ * @example
29
+ * This example creates a Persister object against a newly-created Store and
30
+ * then gets the database client back out again.
31
+ *
32
+ * ```js yolo
33
+ * const client = createClient({url: 'file:my.db'});
34
+ * const store = createStore().setTables({pets: {fido: {species: 'dog'}}});
35
+ * const persister = createLibSqlPersister(store, client, 'my_tinybase');
36
+ *
37
+ * console.log(persister.getClient() == client);
38
+ * // -> true
39
+ *
40
+ * persister.destroy();
41
+ * ```
42
+ * @category Getter
43
+ * @since v4.7.0
44
+ */
45
+ getClient(): Client;
46
+ }
47
+
48
+ /**
49
+ * The createLibSqlPersister function creates a Persister object that can
50
+ * persist the Store to a local LibSQL database (in an appropriate environment).
51
+ *
52
+ * As well as providing a reference to the Store to persist, you must provide a
53
+ * `client` parameter which identifies the database client.
54
+ *
55
+ * A database Persister uses one of two modes: either a JSON serialization of
56
+ * the whole Store stored in a single row of a table (the default), or a tabular
57
+ * mapping of Table Ids to database table names and vice-versa).
58
+ *
59
+ * The third argument is a DatabasePersisterConfig object that configures which
60
+ * of those modes to use, and settings for each. If the third argument is simply
61
+ * a string, it is used as the `storeTableName` property of the JSON
62
+ * serialization.
63
+ *
64
+ * See the documentation for the DpcJson and DpcTabular types for more
65
+ * information on how both of those modes can be configured.
66
+ * @param store The Store to persist.
67
+ * @param db The database client that was returned from `createClient(...)`.
68
+ * @param configOrStoreTableName A DatabasePersisterConfig to configure the
69
+ * persistence mode (or a string to set the `storeTableName` property of the
70
+ * JSON serialization).
71
+ * @param onSqlCommand An optional handler called every time the Persister
72
+ * executes a SQL command or query. This is suitable for logging persistence
73
+ * behavior in a development environment.
74
+ * @param onIgnoredError An optional handler for the errors that the Persister
75
+ * would otherwise ignore when trying to save or load data. This is suitable for
76
+ * debugging persistence issues in a development environment.
77
+ * @returns A reference to the new LibSqlPersister object.
78
+ * @example
79
+ * This example creates a LibSqlPersister object and persists the Store to a
80
+ * local SQLite database as a JSON serialization into the `my_tinybase` table.
81
+ * It makes a change to the database directly and then reloads it back into the
82
+ * Store.
83
+ *
84
+ * ```js yolo
85
+ * const client = createClient({url: 'file:my.db'});
86
+ * const store = createStore().setTables({pets: {fido: {species: 'dog'}}});
87
+ * const persister = createLibSqlPersister(store, client, 'my_tinybase');
88
+ *
89
+ * await persister.save();
90
+ * // Store will be saved to the database.
91
+ *
92
+ * console.log((await client.execute('SELECT * FROM my_tinybase;')).rows);
93
+ * // -> [{_id: '_', store: '[{"pets":{"fido":{"species":"dog"}}},{}]'}]
94
+ *
95
+ * await client.execute(
96
+ * 'UPDATE my_tinybase SET store = ' +
97
+ * `'[{"pets":{"felix":{"species":"cat"}}},{}]' WHERE _id = '_';`,
98
+ * );
99
+ * await persister.load();
100
+ * console.log(store.getTables());
101
+ * // -> {pets: {felix: {species: 'cat'}}}
102
+ *
103
+ * persister.destroy();
104
+ * ```
105
+ * @example
106
+ * This example creates a LibSqlPersister object and persists the Store to a
107
+ * local SQLite database with tabular mapping.
108
+ *
109
+ * ```js yolo
110
+ * const client = createClient({url: 'file:my.db'});
111
+ * const store = createStore().setTables({pets: {fido: {species: 'dog'}}});
112
+ * const persister = createLibSqlPersister(store, client, {
113
+ * mode: 'tabular',
114
+ * tables: {load: {pets: 'pets'}, save: {pets: 'pets'}},
115
+ * });
116
+ *
117
+ * await persister.save();
118
+ * console.log((await client.execute('SELECT * FROM pets;')).rows);
119
+ * // -> [{_id: 'fido', species: 'dog'}]
120
+ *
121
+ * await client.execute(
122
+ * `INSERT INTO pets (_id, species) VALUES ('felix', 'cat')`,
123
+ * );
124
+ * await persister.load();
125
+ * console.log(store.getTables());
126
+ * // -> {pets: {fido: {species: 'dog'}, felix: {species: 'cat'}}}
127
+ *
128
+ * persister.destroy();
129
+ * ```
130
+ * @category Creation
131
+ * @since v4.7.0
132
+ */
133
+ export function createLibSqlPersister(
134
+ store: Store,
135
+ client: Client,
136
+ configOrStoreTableName?: DatabasePersisterConfig | string,
137
+ onSqlCommand?: (sql: string, args?: any[]) => void,
138
+ onIgnoredError?: (error: any) => void,
139
+ ): LibSqlPersister;
@@ -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
  *
@@ -39,7 +40,11 @@
39
40
  */
40
41
 
41
42
  import {Changes, Content, Store, Tables, Values} from './store.d';
42
- import {MergeableContent, MergeableStore} from './mergeable-store';
43
+ import {
44
+ MergeableChanges,
45
+ MergeableContent,
46
+ MergeableStore,
47
+ } from './mergeable-store';
43
48
  import {Id} from './common.d';
44
49
 
45
50
  /**
@@ -77,10 +82,15 @@ export type PersisterStats = {
77
82
  * @category Creation
78
83
  * @since v4.0.0
79
84
  */
80
- export type PersisterListener = (
81
- getContent?: () => Content,
82
- getChanges?: () => Changes,
83
- ) => void;
85
+ export type PersisterListener<SupportsMergeableStore extends boolean = false> =
86
+ (
87
+ getContent?: () =>
88
+ | Content
89
+ | (SupportsMergeableStore extends true ? MergeableContent : never),
90
+ getChanges?: () =>
91
+ | Changes
92
+ | (SupportsMergeableStore extends true ? MergeableChanges : never),
93
+ ) => void;
84
94
 
85
95
  /**
86
96
  * The DatabasePersisterConfig type describes the configuration of a
@@ -1136,7 +1146,7 @@ export interface Persister<SupportsMergeableStore extends boolean = false> {
1136
1146
  */
1137
1147
  export function createCustomPersister<
1138
1148
  ListeningHandle,
1139
- SupportsMergeableStore extends boolean,
1149
+ SupportsMergeableStore extends boolean = false,
1140
1150
  >(
1141
1151
  store: Store | (SupportsMergeableStore extends true ? MergeableStore : never),
1142
1152
  getPersisted: () => Promise<
@@ -1150,7 +1160,9 @@ export function createCustomPersister<
1150
1160
  | (SupportsMergeableStore extends true ? MergeableContent : never),
1151
1161
  getChanges?: () => Changes,
1152
1162
  ) => Promise<void>,
1153
- addPersisterListener: (listener: PersisterListener) => ListeningHandle,
1163
+ addPersisterListener: (
1164
+ listener: PersisterListener<SupportsMergeableStore>,
1165
+ ) => ListeningHandle,
1154
1166
  delPersisterListener: (listeningHandle: ListeningHandle) => void,
1155
1167
  onIgnoredError?: (error: any) => void,
1156
1168
  supportsMergeableStore?: SupportsMergeableStore,