tinybase 5.0.0-beta.0 → 5.0.0-beta.10

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 (493) hide show
  1. package/bin/cli.js +1 -1
  2. package/lib/checkpoints.js +1 -1
  3. package/lib/checkpoints.js.gz +0 -0
  4. package/lib/cjs/checkpoints.cjs +1 -1
  5. package/lib/cjs/checkpoints.cjs.gz +0 -0
  6. package/lib/cjs/indexes.cjs +1 -1
  7. package/lib/cjs/indexes.cjs.gz +0 -0
  8. package/lib/cjs/mergeable-store.cjs +1 -0
  9. package/lib/cjs/mergeable-store.cjs.gz +0 -0
  10. package/lib/cjs/metrics.cjs +1 -1
  11. package/lib/cjs/metrics.cjs.gz +0 -0
  12. package/lib/cjs/persisters/persister-automerge.cjs +1 -1
  13. package/lib/cjs/persisters/persister-automerge.cjs.gz +0 -0
  14. package/lib/cjs/persisters/persister-browser.cjs +1 -1
  15. package/lib/cjs/persisters/persister-browser.cjs.gz +0 -0
  16. package/lib/cjs/persisters/persister-cr-sqlite-wasm.cjs +1 -1
  17. package/lib/cjs/persisters/persister-cr-sqlite-wasm.cjs.gz +0 -0
  18. package/lib/cjs/persisters/persister-electric-sql.cjs +1 -1
  19. package/lib/cjs/persisters/persister-electric-sql.cjs.gz +0 -0
  20. package/lib/cjs/persisters/persister-expo-sqlite-next.cjs +1 -1
  21. package/lib/cjs/persisters/persister-expo-sqlite-next.cjs.gz +0 -0
  22. package/lib/cjs/persisters/persister-expo-sqlite.cjs +1 -1
  23. package/lib/cjs/persisters/persister-expo-sqlite.cjs.gz +0 -0
  24. package/lib/cjs/persisters/persister-file.cjs +1 -1
  25. package/lib/cjs/persisters/persister-file.cjs.gz +0 -0
  26. package/lib/cjs/persisters/persister-indexed-db.cjs +1 -1
  27. package/lib/cjs/persisters/persister-indexed-db.cjs.gz +0 -0
  28. package/lib/cjs/persisters/persister-libsql.cjs +1 -0
  29. package/lib/cjs/persisters/persister-libsql.cjs.gz +0 -0
  30. package/lib/cjs/persisters/persister-partykit-client.cjs +1 -1
  31. package/lib/cjs/persisters/persister-partykit-client.cjs.gz +0 -0
  32. package/lib/cjs/persisters/persister-partykit-server.cjs +1 -1
  33. package/lib/cjs/persisters/persister-partykit-server.cjs.gz +0 -0
  34. package/lib/cjs/persisters/persister-powersync.cjs +1 -0
  35. package/lib/cjs/persisters/persister-powersync.cjs.gz +0 -0
  36. package/lib/cjs/persisters/persister-remote.cjs +1 -1
  37. package/lib/cjs/persisters/persister-remote.cjs.gz +0 -0
  38. package/lib/cjs/persisters/persister-sqlite-wasm.cjs +1 -1
  39. package/lib/cjs/persisters/persister-sqlite-wasm.cjs.gz +0 -0
  40. package/lib/cjs/persisters/persister-sqlite3.cjs +1 -1
  41. package/lib/cjs/persisters/persister-sqlite3.cjs.gz +0 -0
  42. package/lib/cjs/persisters/persister-yjs.cjs +1 -1
  43. package/lib/cjs/persisters/persister-yjs.cjs.gz +0 -0
  44. package/lib/cjs/persisters.cjs +1 -1
  45. package/lib/cjs/persisters.cjs.gz +0 -0
  46. package/lib/cjs/queries.cjs +1 -1
  47. package/lib/cjs/queries.cjs.gz +0 -0
  48. package/lib/cjs/relationships.cjs +1 -1
  49. package/lib/cjs/relationships.cjs.gz +0 -0
  50. package/lib/cjs/store.cjs +1 -1
  51. package/lib/cjs/store.cjs.gz +0 -0
  52. package/lib/cjs/synchronizers/synchronizer-local.cjs +1 -0
  53. package/lib/cjs/synchronizers/synchronizer-local.cjs.gz +0 -0
  54. package/lib/cjs/synchronizers/synchronizer-ws-client.cjs +1 -0
  55. package/lib/cjs/synchronizers/synchronizer-ws-client.cjs.gz +0 -0
  56. package/lib/cjs/synchronizers/synchronizer-ws-server.cjs +1 -0
  57. package/lib/cjs/synchronizers/synchronizer-ws-server.cjs.gz +0 -0
  58. package/lib/cjs/synchronizers.cjs +1 -0
  59. package/lib/cjs/synchronizers.cjs.gz +0 -0
  60. package/lib/cjs/tinybase.cjs +1 -1
  61. package/lib/cjs/tinybase.cjs.gz +0 -0
  62. package/lib/cjs/tools.cjs +1 -1
  63. package/lib/cjs/tools.cjs.gz +0 -0
  64. package/lib/cjs/ui-react-dom-debug.cjs +1 -1
  65. package/lib/cjs/ui-react-dom-debug.cjs.gz +0 -0
  66. package/lib/cjs/ui-react-dom.cjs +1 -1
  67. package/lib/cjs/ui-react-dom.cjs.gz +0 -0
  68. package/lib/cjs/ui-react.cjs +1 -1
  69. package/lib/cjs/ui-react.cjs.gz +0 -0
  70. package/lib/cjs-es6/checkpoints.cjs +1 -1
  71. package/lib/cjs-es6/checkpoints.cjs.gz +0 -0
  72. package/lib/cjs-es6/indexes.cjs +1 -1
  73. package/lib/cjs-es6/indexes.cjs.gz +0 -0
  74. package/lib/cjs-es6/mergeable-store.cjs +1 -0
  75. package/lib/cjs-es6/mergeable-store.cjs.gz +0 -0
  76. package/lib/cjs-es6/metrics.cjs +1 -1
  77. package/lib/cjs-es6/metrics.cjs.gz +0 -0
  78. package/lib/cjs-es6/persisters/persister-automerge.cjs +1 -1
  79. package/lib/cjs-es6/persisters/persister-automerge.cjs.gz +0 -0
  80. package/lib/cjs-es6/persisters/persister-browser.cjs +1 -1
  81. package/lib/cjs-es6/persisters/persister-browser.cjs.gz +0 -0
  82. package/lib/cjs-es6/persisters/persister-cr-sqlite-wasm.cjs +1 -1
  83. package/lib/cjs-es6/persisters/persister-cr-sqlite-wasm.cjs.gz +0 -0
  84. package/lib/cjs-es6/persisters/persister-electric-sql.cjs +1 -1
  85. package/lib/cjs-es6/persisters/persister-electric-sql.cjs.gz +0 -0
  86. package/lib/cjs-es6/persisters/persister-expo-sqlite-next.cjs +1 -1
  87. package/lib/cjs-es6/persisters/persister-expo-sqlite-next.cjs.gz +0 -0
  88. package/lib/cjs-es6/persisters/persister-expo-sqlite.cjs +1 -1
  89. package/lib/cjs-es6/persisters/persister-expo-sqlite.cjs.gz +0 -0
  90. package/lib/cjs-es6/persisters/persister-file.cjs +1 -1
  91. package/lib/cjs-es6/persisters/persister-file.cjs.gz +0 -0
  92. package/lib/cjs-es6/persisters/persister-indexed-db.cjs +1 -1
  93. package/lib/cjs-es6/persisters/persister-indexed-db.cjs.gz +0 -0
  94. package/lib/cjs-es6/persisters/persister-libsql.cjs +1 -0
  95. package/lib/cjs-es6/persisters/persister-libsql.cjs.gz +0 -0
  96. package/lib/cjs-es6/persisters/persister-partykit-client.cjs +1 -1
  97. package/lib/cjs-es6/persisters/persister-partykit-client.cjs.gz +0 -0
  98. package/lib/cjs-es6/persisters/persister-partykit-server.cjs +1 -1
  99. package/lib/cjs-es6/persisters/persister-partykit-server.cjs.gz +0 -0
  100. package/lib/cjs-es6/persisters/persister-powersync.cjs +1 -0
  101. package/lib/cjs-es6/persisters/persister-powersync.cjs.gz +0 -0
  102. package/lib/cjs-es6/persisters/persister-remote.cjs +1 -1
  103. package/lib/cjs-es6/persisters/persister-remote.cjs.gz +0 -0
  104. package/lib/cjs-es6/persisters/persister-sqlite-wasm.cjs +1 -1
  105. package/lib/cjs-es6/persisters/persister-sqlite-wasm.cjs.gz +0 -0
  106. package/lib/cjs-es6/persisters/persister-sqlite3.cjs +1 -1
  107. package/lib/cjs-es6/persisters/persister-sqlite3.cjs.gz +0 -0
  108. package/lib/cjs-es6/persisters/persister-yjs.cjs +1 -1
  109. package/lib/cjs-es6/persisters/persister-yjs.cjs.gz +0 -0
  110. package/lib/cjs-es6/persisters.cjs +1 -1
  111. package/lib/cjs-es6/persisters.cjs.gz +0 -0
  112. package/lib/cjs-es6/queries.cjs +1 -1
  113. package/lib/cjs-es6/queries.cjs.gz +0 -0
  114. package/lib/cjs-es6/relationships.cjs +1 -1
  115. package/lib/cjs-es6/relationships.cjs.gz +0 -0
  116. package/lib/cjs-es6/store.cjs +1 -1
  117. package/lib/cjs-es6/store.cjs.gz +0 -0
  118. package/lib/cjs-es6/synchronizers/synchronizer-local.cjs +1 -0
  119. package/lib/cjs-es6/synchronizers/synchronizer-local.cjs.gz +0 -0
  120. package/lib/cjs-es6/synchronizers/synchronizer-ws-client.cjs +1 -0
  121. package/lib/cjs-es6/synchronizers/synchronizer-ws-client.cjs.gz +0 -0
  122. package/lib/cjs-es6/synchronizers/synchronizer-ws-server.cjs +1 -0
  123. package/lib/cjs-es6/synchronizers/synchronizer-ws-server.cjs.gz +0 -0
  124. package/lib/cjs-es6/synchronizers.cjs +1 -0
  125. package/lib/cjs-es6/synchronizers.cjs.gz +0 -0
  126. package/lib/cjs-es6/tinybase.cjs +1 -1
  127. package/lib/cjs-es6/tinybase.cjs.gz +0 -0
  128. package/lib/cjs-es6/tools.cjs +1 -1
  129. package/lib/cjs-es6/tools.cjs.gz +0 -0
  130. package/lib/cjs-es6/ui-react-dom-debug.cjs +1 -1
  131. package/lib/cjs-es6/ui-react-dom-debug.cjs.gz +0 -0
  132. package/lib/cjs-es6/ui-react-dom.cjs +1 -1
  133. package/lib/cjs-es6/ui-react-dom.cjs.gz +0 -0
  134. package/lib/cjs-es6/ui-react.cjs +1 -1
  135. package/lib/cjs-es6/ui-react.cjs.gz +0 -0
  136. package/lib/debug/checkpoints.js +254 -235
  137. package/lib/debug/indexes.js +10 -6
  138. package/lib/debug/mergeable-store.js +2230 -0
  139. package/lib/debug/metrics.js +10 -6
  140. package/lib/debug/persisters/persister-automerge.js +113 -87
  141. package/lib/debug/persisters/persister-browser.js +95 -57
  142. package/lib/debug/persisters/persister-cr-sqlite-wasm.js +175 -109
  143. package/lib/debug/persisters/persister-electric-sql.js +176 -109
  144. package/lib/debug/persisters/persister-expo-sqlite-next.js +176 -110
  145. package/lib/debug/persisters/persister-expo-sqlite.js +175 -109
  146. package/lib/debug/persisters/persister-file.js +94 -57
  147. package/lib/debug/persisters/persister-indexed-db.js +94 -57
  148. package/lib/debug/persisters/persister-libsql.js +913 -0
  149. package/lib/debug/persisters/persister-partykit-client.js +90 -59
  150. package/lib/debug/persisters/persister-partykit-server.js +19 -26
  151. package/lib/debug/persisters/persister-powersync.js +928 -0
  152. package/lib/debug/persisters/persister-remote.js +86 -53
  153. package/lib/debug/persisters/persister-sqlite-wasm.js +175 -109
  154. package/lib/debug/persisters/persister-sqlite3.js +175 -109
  155. package/lib/debug/persisters/persister-yjs.js +111 -84
  156. package/lib/debug/persisters.js +82 -50
  157. package/lib/debug/queries.js +18 -12
  158. package/lib/debug/relationships.js +10 -6
  159. package/lib/debug/store.js +150 -127
  160. package/lib/debug/synchronizers/synchronizer-local.js +559 -0
  161. package/lib/debug/synchronizers/synchronizer-ws-client.js +586 -0
  162. package/lib/debug/synchronizers/synchronizer-ws-server.js +96 -0
  163. package/lib/debug/synchronizers.js +519 -0
  164. package/lib/debug/tinybase.js +1281 -409
  165. package/lib/debug/tools.js +41 -64
  166. package/lib/debug/ui-react-dom.js +277 -213
  167. package/lib/debug/ui-react.js +213 -198
  168. package/lib/es6/checkpoints.js +1 -1
  169. package/lib/es6/checkpoints.js.gz +0 -0
  170. package/lib/es6/indexes.js +1 -1
  171. package/lib/es6/indexes.js.gz +0 -0
  172. package/lib/es6/mergeable-store.js +1 -0
  173. package/lib/es6/mergeable-store.js.gz +0 -0
  174. package/lib/es6/metrics.js +1 -1
  175. package/lib/es6/metrics.js.gz +0 -0
  176. package/lib/es6/persisters/persister-automerge.js +1 -1
  177. package/lib/es6/persisters/persister-automerge.js.gz +0 -0
  178. package/lib/es6/persisters/persister-browser.js +1 -1
  179. package/lib/es6/persisters/persister-browser.js.gz +0 -0
  180. package/lib/es6/persisters/persister-cr-sqlite-wasm.js +1 -1
  181. package/lib/es6/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  182. package/lib/es6/persisters/persister-electric-sql.js +1 -1
  183. package/lib/es6/persisters/persister-electric-sql.js.gz +0 -0
  184. package/lib/es6/persisters/persister-expo-sqlite-next.js +1 -1
  185. package/lib/es6/persisters/persister-expo-sqlite-next.js.gz +0 -0
  186. package/lib/es6/persisters/persister-expo-sqlite.js +1 -1
  187. package/lib/es6/persisters/persister-expo-sqlite.js.gz +0 -0
  188. package/lib/es6/persisters/persister-file.js +1 -1
  189. package/lib/es6/persisters/persister-file.js.gz +0 -0
  190. package/lib/es6/persisters/persister-indexed-db.js +1 -1
  191. package/lib/es6/persisters/persister-indexed-db.js.gz +0 -0
  192. package/lib/es6/persisters/persister-libsql.js +1 -0
  193. package/lib/es6/persisters/persister-libsql.js.gz +0 -0
  194. package/lib/es6/persisters/persister-partykit-client.js +1 -1
  195. package/lib/es6/persisters/persister-partykit-client.js.gz +0 -0
  196. package/lib/es6/persisters/persister-partykit-server.js +1 -1
  197. package/lib/es6/persisters/persister-partykit-server.js.gz +0 -0
  198. package/lib/es6/persisters/persister-powersync.js +1 -0
  199. package/lib/es6/persisters/persister-powersync.js.gz +0 -0
  200. package/lib/es6/persisters/persister-remote.js +1 -1
  201. package/lib/es6/persisters/persister-remote.js.gz +0 -0
  202. package/lib/es6/persisters/persister-sqlite-wasm.js +1 -1
  203. package/lib/es6/persisters/persister-sqlite-wasm.js.gz +0 -0
  204. package/lib/es6/persisters/persister-sqlite3.js +1 -1
  205. package/lib/es6/persisters/persister-sqlite3.js.gz +0 -0
  206. package/lib/es6/persisters/persister-yjs.js +1 -1
  207. package/lib/es6/persisters/persister-yjs.js.gz +0 -0
  208. package/lib/es6/persisters.js +1 -1
  209. package/lib/es6/persisters.js.gz +0 -0
  210. package/lib/es6/queries.js +1 -1
  211. package/lib/es6/queries.js.gz +0 -0
  212. package/lib/es6/relationships.js +1 -1
  213. package/lib/es6/relationships.js.gz +0 -0
  214. package/lib/es6/store.js +1 -1
  215. package/lib/es6/store.js.gz +0 -0
  216. package/lib/es6/synchronizers/synchronizer-local.js +1 -0
  217. package/lib/es6/synchronizers/synchronizer-local.js.gz +0 -0
  218. package/lib/es6/synchronizers/synchronizer-ws-client.js +1 -0
  219. package/lib/es6/synchronizers/synchronizer-ws-client.js.gz +0 -0
  220. package/lib/es6/synchronizers/synchronizer-ws-server.js +1 -0
  221. package/lib/es6/synchronizers/synchronizer-ws-server.js.gz +0 -0
  222. package/lib/es6/synchronizers.js +1 -0
  223. package/lib/es6/synchronizers.js.gz +0 -0
  224. package/lib/es6/tinybase.js +1 -1
  225. package/lib/es6/tinybase.js.gz +0 -0
  226. package/lib/es6/tools.js +1 -1
  227. package/lib/es6/tools.js.gz +0 -0
  228. package/lib/es6/ui-react-dom-debug.js +1 -1
  229. package/lib/es6/ui-react-dom-debug.js.gz +0 -0
  230. package/lib/es6/ui-react-dom.js +1 -1
  231. package/lib/es6/ui-react-dom.js.gz +0 -0
  232. package/lib/es6/ui-react.js +1 -1
  233. package/lib/es6/ui-react.js.gz +0 -0
  234. package/lib/indexes.js +1 -1
  235. package/lib/indexes.js.gz +0 -0
  236. package/lib/mergeable-store.js +1 -0
  237. package/lib/mergeable-store.js.gz +0 -0
  238. package/lib/metrics.js +1 -1
  239. package/lib/metrics.js.gz +0 -0
  240. package/lib/persisters/persister-automerge.js +1 -1
  241. package/lib/persisters/persister-automerge.js.gz +0 -0
  242. package/lib/persisters/persister-browser.js +1 -1
  243. package/lib/persisters/persister-browser.js.gz +0 -0
  244. package/lib/persisters/persister-cr-sqlite-wasm.js +1 -1
  245. package/lib/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  246. package/lib/persisters/persister-electric-sql.js +1 -1
  247. package/lib/persisters/persister-electric-sql.js.gz +0 -0
  248. package/lib/persisters/persister-expo-sqlite-next.js +1 -1
  249. package/lib/persisters/persister-expo-sqlite-next.js.gz +0 -0
  250. package/lib/persisters/persister-expo-sqlite.js +1 -1
  251. package/lib/persisters/persister-expo-sqlite.js.gz +0 -0
  252. package/lib/persisters/persister-file.js +1 -1
  253. package/lib/persisters/persister-file.js.gz +0 -0
  254. package/lib/persisters/persister-indexed-db.js +1 -1
  255. package/lib/persisters/persister-indexed-db.js.gz +0 -0
  256. package/lib/persisters/persister-libsql.js +1 -0
  257. package/lib/persisters/persister-libsql.js.gz +0 -0
  258. package/lib/persisters/persister-partykit-client.js +1 -1
  259. package/lib/persisters/persister-partykit-client.js.gz +0 -0
  260. package/lib/persisters/persister-partykit-server.js +1 -1
  261. package/lib/persisters/persister-partykit-server.js.gz +0 -0
  262. package/lib/persisters/persister-powersync.js +1 -0
  263. package/lib/persisters/persister-powersync.js.gz +0 -0
  264. package/lib/persisters/persister-remote.js +1 -1
  265. package/lib/persisters/persister-remote.js.gz +0 -0
  266. package/lib/persisters/persister-sqlite-wasm.js +1 -1
  267. package/lib/persisters/persister-sqlite-wasm.js.gz +0 -0
  268. package/lib/persisters/persister-sqlite3.js +1 -1
  269. package/lib/persisters/persister-sqlite3.js.gz +0 -0
  270. package/lib/persisters/persister-yjs.js +1 -1
  271. package/lib/persisters/persister-yjs.js.gz +0 -0
  272. package/lib/persisters.js +1 -1
  273. package/lib/persisters.js.gz +0 -0
  274. package/lib/queries.js +1 -1
  275. package/lib/queries.js.gz +0 -0
  276. package/lib/relationships.js +1 -1
  277. package/lib/relationships.js.gz +0 -0
  278. package/lib/store.js +1 -1
  279. package/lib/store.js.gz +0 -0
  280. package/lib/synchronizers/synchronizer-local.js +1 -0
  281. package/lib/synchronizers/synchronizer-local.js.gz +0 -0
  282. package/lib/synchronizers/synchronizer-ws-client.js +1 -0
  283. package/lib/synchronizers/synchronizer-ws-client.js.gz +0 -0
  284. package/lib/synchronizers/synchronizer-ws-server.js +1 -0
  285. package/lib/synchronizers/synchronizer-ws-server.js.gz +0 -0
  286. package/lib/synchronizers.js +1 -0
  287. package/lib/synchronizers.js.gz +0 -0
  288. package/lib/tinybase.js +1 -1
  289. package/lib/tinybase.js.gz +0 -0
  290. package/lib/tools.js +1 -1
  291. package/lib/tools.js.gz +0 -0
  292. package/lib/types/checkpoints.d.ts +2 -2
  293. package/lib/types/indexes.d.ts +2 -2
  294. package/lib/types/mergeable-store.d.ts +214 -0
  295. package/lib/types/metrics.d.ts +2 -2
  296. package/lib/types/persisters/persister-automerge.d.ts +11 -7
  297. package/lib/types/persisters/persister-browser.d.ts +13 -4
  298. package/lib/types/persisters/persister-cr-sqlite-wasm.d.ts +4 -0
  299. package/lib/types/persisters/persister-electric-sql.d.ts +4 -0
  300. package/lib/types/persisters/persister-expo-sqlite-next.d.ts +7 -3
  301. package/lib/types/persisters/persister-expo-sqlite.d.ts +4 -0
  302. package/lib/types/persisters/persister-file.d.ts +7 -2
  303. package/lib/types/persisters/persister-indexed-db.d.ts +4 -0
  304. package/lib/types/persisters/persister-libsql.d.ts +142 -0
  305. package/lib/types/persisters/persister-partykit-client.d.ts +4 -0
  306. package/lib/types/persisters/persister-partykit-server.d.ts +12 -8
  307. package/lib/types/persisters/persister-powersync.d.ts +157 -0
  308. package/lib/types/persisters/persister-remote.d.ts +4 -0
  309. package/lib/types/persisters/persister-sqlite-wasm.d.ts +4 -0
  310. package/lib/types/persisters/persister-sqlite3.d.ts +4 -0
  311. package/lib/types/persisters/persister-yjs.d.ts +6 -2
  312. package/lib/types/persisters.d.ts +125 -48
  313. package/lib/types/queries.d.ts +2 -2
  314. package/lib/types/relationships.d.ts +2 -2
  315. package/lib/types/store.d.ts +275 -187
  316. package/lib/types/synchronizers/synchronizer-local.d.ts +27 -0
  317. package/lib/types/synchronizers/synchronizer-ws-client.d.ts +35 -0
  318. package/lib/types/synchronizers/synchronizer-ws-server.d.ts +36 -0
  319. package/lib/types/synchronizers.d.ts +132 -0
  320. package/lib/types/tinybase.d.ts +10 -8
  321. package/lib/types/tools.d.ts +4 -4
  322. package/lib/types/ui-react.d.ts +235 -95
  323. package/lib/types/with-schemas/checkpoints.d.ts +2 -2
  324. package/lib/types/with-schemas/indexes.d.ts +2 -2
  325. package/lib/types/with-schemas/internal/queries.d.ts +4 -3
  326. package/lib/types/with-schemas/internal/store.d.ts +8 -3
  327. package/lib/types/with-schemas/mergeable-store.d.ts +492 -0
  328. package/lib/types/with-schemas/metrics.d.ts +2 -2
  329. package/lib/types/with-schemas/persisters/persister-automerge.d.ts +12 -8
  330. package/lib/types/with-schemas/persisters/persister-browser.d.ts +17 -8
  331. package/lib/types/with-schemas/persisters/persister-cr-sqlite-wasm.d.ts +5 -1
  332. package/lib/types/with-schemas/persisters/persister-electric-sql.d.ts +5 -1
  333. package/lib/types/with-schemas/persisters/persister-expo-sqlite-next.d.ts +8 -4
  334. package/lib/types/with-schemas/persisters/persister-expo-sqlite.d.ts +5 -1
  335. package/lib/types/with-schemas/persisters/persister-file.d.ts +9 -4
  336. package/lib/types/with-schemas/persisters/persister-indexed-db.d.ts +5 -1
  337. package/lib/types/with-schemas/persisters/persister-libsql.d.ts +155 -0
  338. package/lib/types/with-schemas/persisters/persister-partykit-client.d.ts +5 -1
  339. package/lib/types/with-schemas/persisters/persister-partykit-server.d.ts +15 -11
  340. package/lib/types/with-schemas/persisters/persister-powersync.d.ts +170 -0
  341. package/lib/types/with-schemas/persisters/persister-remote.d.ts +5 -1
  342. package/lib/types/with-schemas/persisters/persister-sqlite-wasm.d.ts +5 -1
  343. package/lib/types/with-schemas/persisters/persister-sqlite3.d.ts +5 -1
  344. package/lib/types/with-schemas/persisters/persister-yjs.d.ts +7 -3
  345. package/lib/types/with-schemas/persisters.d.ts +161 -101
  346. package/lib/types/with-schemas/queries.d.ts +3 -3
  347. package/lib/types/with-schemas/relationships.d.ts +2 -2
  348. package/lib/types/with-schemas/store.d.ts +483 -345
  349. package/lib/types/with-schemas/synchronizers/synchronizer-local.d.ts +29 -0
  350. package/lib/types/with-schemas/synchronizers/synchronizer-ws-client.d.ts +41 -0
  351. package/lib/types/with-schemas/synchronizers/synchronizer-ws-server.d.ts +36 -0
  352. package/lib/types/with-schemas/synchronizers.d.ts +146 -0
  353. package/lib/types/with-schemas/tinybase.d.ts +9 -8
  354. package/lib/types/with-schemas/tools.d.ts +4 -4
  355. package/lib/types/with-schemas/ui-react.d.ts +259 -102
  356. package/lib/ui-react-dom.js +1 -1
  357. package/lib/ui-react-dom.js.gz +0 -0
  358. package/lib/ui-react.js +1 -1
  359. package/lib/ui-react.js.gz +0 -0
  360. package/lib/umd/checkpoints.js +1 -1
  361. package/lib/umd/checkpoints.js.gz +0 -0
  362. package/lib/umd/indexes.js +1 -1
  363. package/lib/umd/indexes.js.gz +0 -0
  364. package/lib/umd/mergeable-store.js +1 -0
  365. package/lib/umd/mergeable-store.js.gz +0 -0
  366. package/lib/umd/metrics.js +1 -1
  367. package/lib/umd/metrics.js.gz +0 -0
  368. package/lib/umd/persisters/persister-automerge.js +1 -1
  369. package/lib/umd/persisters/persister-automerge.js.gz +0 -0
  370. package/lib/umd/persisters/persister-browser.js +1 -1
  371. package/lib/umd/persisters/persister-browser.js.gz +0 -0
  372. package/lib/umd/persisters/persister-cr-sqlite-wasm.js +1 -1
  373. package/lib/umd/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  374. package/lib/umd/persisters/persister-electric-sql.js +1 -1
  375. package/lib/umd/persisters/persister-electric-sql.js.gz +0 -0
  376. package/lib/umd/persisters/persister-expo-sqlite-next.js +1 -1
  377. package/lib/umd/persisters/persister-expo-sqlite-next.js.gz +0 -0
  378. package/lib/umd/persisters/persister-expo-sqlite.js +1 -1
  379. package/lib/umd/persisters/persister-expo-sqlite.js.gz +0 -0
  380. package/lib/umd/persisters/persister-file.js +1 -1
  381. package/lib/umd/persisters/persister-file.js.gz +0 -0
  382. package/lib/umd/persisters/persister-indexed-db.js +1 -1
  383. package/lib/umd/persisters/persister-indexed-db.js.gz +0 -0
  384. package/lib/umd/persisters/persister-libsql.js +1 -0
  385. package/lib/umd/persisters/persister-libsql.js.gz +0 -0
  386. package/lib/umd/persisters/persister-partykit-client.js +1 -1
  387. package/lib/umd/persisters/persister-partykit-client.js.gz +0 -0
  388. package/lib/umd/persisters/persister-partykit-server.js +1 -1
  389. package/lib/umd/persisters/persister-partykit-server.js.gz +0 -0
  390. package/lib/umd/persisters/persister-powersync.js +1 -0
  391. package/lib/umd/persisters/persister-powersync.js.gz +0 -0
  392. package/lib/umd/persisters/persister-remote.js +1 -1
  393. package/lib/umd/persisters/persister-remote.js.gz +0 -0
  394. package/lib/umd/persisters/persister-sqlite-wasm.js +1 -1
  395. package/lib/umd/persisters/persister-sqlite-wasm.js.gz +0 -0
  396. package/lib/umd/persisters/persister-sqlite3.js +1 -1
  397. package/lib/umd/persisters/persister-sqlite3.js.gz +0 -0
  398. package/lib/umd/persisters/persister-yjs.js +1 -1
  399. package/lib/umd/persisters/persister-yjs.js.gz +0 -0
  400. package/lib/umd/persisters.js +1 -1
  401. package/lib/umd/persisters.js.gz +0 -0
  402. package/lib/umd/queries.js +1 -1
  403. package/lib/umd/queries.js.gz +0 -0
  404. package/lib/umd/relationships.js +1 -1
  405. package/lib/umd/relationships.js.gz +0 -0
  406. package/lib/umd/store.js +1 -1
  407. package/lib/umd/store.js.gz +0 -0
  408. package/lib/umd/synchronizers/synchronizer-local.js +1 -0
  409. package/lib/umd/synchronizers/synchronizer-local.js.gz +0 -0
  410. package/lib/umd/synchronizers/synchronizer-ws-client.js +1 -0
  411. package/lib/umd/synchronizers/synchronizer-ws-client.js.gz +0 -0
  412. package/lib/umd/synchronizers/synchronizer-ws-server.js +1 -0
  413. package/lib/umd/synchronizers/synchronizer-ws-server.js.gz +0 -0
  414. package/lib/umd/synchronizers.js +1 -0
  415. package/lib/umd/synchronizers.js.gz +0 -0
  416. package/lib/umd/tinybase.js +1 -1
  417. package/lib/umd/tinybase.js.gz +0 -0
  418. package/lib/umd/tools.js +1 -1
  419. package/lib/umd/tools.js.gz +0 -0
  420. package/lib/umd/ui-react-dom-debug.js +1 -1
  421. package/lib/umd/ui-react-dom-debug.js.gz +0 -0
  422. package/lib/umd/ui-react-dom.js +1 -1
  423. package/lib/umd/ui-react-dom.js.gz +0 -0
  424. package/lib/umd/ui-react.js +1 -1
  425. package/lib/umd/ui-react.js.gz +0 -0
  426. package/lib/umd-es6/checkpoints.js +1 -1
  427. package/lib/umd-es6/checkpoints.js.gz +0 -0
  428. package/lib/umd-es6/indexes.js +1 -1
  429. package/lib/umd-es6/indexes.js.gz +0 -0
  430. package/lib/umd-es6/mergeable-store.js +1 -0
  431. package/lib/umd-es6/mergeable-store.js.gz +0 -0
  432. package/lib/umd-es6/metrics.js +1 -1
  433. package/lib/umd-es6/metrics.js.gz +0 -0
  434. package/lib/umd-es6/persisters/persister-automerge.js +1 -1
  435. package/lib/umd-es6/persisters/persister-automerge.js.gz +0 -0
  436. package/lib/umd-es6/persisters/persister-browser.js +1 -1
  437. package/lib/umd-es6/persisters/persister-browser.js.gz +0 -0
  438. package/lib/umd-es6/persisters/persister-cr-sqlite-wasm.js +1 -1
  439. package/lib/umd-es6/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  440. package/lib/umd-es6/persisters/persister-electric-sql.js +1 -1
  441. package/lib/umd-es6/persisters/persister-electric-sql.js.gz +0 -0
  442. package/lib/umd-es6/persisters/persister-expo-sqlite-next.js +1 -1
  443. package/lib/umd-es6/persisters/persister-expo-sqlite-next.js.gz +0 -0
  444. package/lib/umd-es6/persisters/persister-expo-sqlite.js +1 -1
  445. package/lib/umd-es6/persisters/persister-expo-sqlite.js.gz +0 -0
  446. package/lib/umd-es6/persisters/persister-file.js +1 -1
  447. package/lib/umd-es6/persisters/persister-file.js.gz +0 -0
  448. package/lib/umd-es6/persisters/persister-indexed-db.js +1 -1
  449. package/lib/umd-es6/persisters/persister-indexed-db.js.gz +0 -0
  450. package/lib/umd-es6/persisters/persister-libsql.js +1 -0
  451. package/lib/umd-es6/persisters/persister-libsql.js.gz +0 -0
  452. package/lib/umd-es6/persisters/persister-partykit-client.js +1 -1
  453. package/lib/umd-es6/persisters/persister-partykit-client.js.gz +0 -0
  454. package/lib/umd-es6/persisters/persister-partykit-server.js +1 -1
  455. package/lib/umd-es6/persisters/persister-partykit-server.js.gz +0 -0
  456. package/lib/umd-es6/persisters/persister-powersync.js +1 -0
  457. package/lib/umd-es6/persisters/persister-powersync.js.gz +0 -0
  458. package/lib/umd-es6/persisters/persister-remote.js +1 -1
  459. package/lib/umd-es6/persisters/persister-remote.js.gz +0 -0
  460. package/lib/umd-es6/persisters/persister-sqlite-wasm.js +1 -1
  461. package/lib/umd-es6/persisters/persister-sqlite-wasm.js.gz +0 -0
  462. package/lib/umd-es6/persisters/persister-sqlite3.js +1 -1
  463. package/lib/umd-es6/persisters/persister-sqlite3.js.gz +0 -0
  464. package/lib/umd-es6/persisters/persister-yjs.js +1 -1
  465. package/lib/umd-es6/persisters/persister-yjs.js.gz +0 -0
  466. package/lib/umd-es6/persisters.js +1 -1
  467. package/lib/umd-es6/persisters.js.gz +0 -0
  468. package/lib/umd-es6/queries.js +1 -1
  469. package/lib/umd-es6/queries.js.gz +0 -0
  470. package/lib/umd-es6/relationships.js +1 -1
  471. package/lib/umd-es6/relationships.js.gz +0 -0
  472. package/lib/umd-es6/store.js +1 -1
  473. package/lib/umd-es6/store.js.gz +0 -0
  474. package/lib/umd-es6/synchronizers/synchronizer-local.js +1 -0
  475. package/lib/umd-es6/synchronizers/synchronizer-local.js.gz +0 -0
  476. package/lib/umd-es6/synchronizers/synchronizer-ws-client.js +1 -0
  477. package/lib/umd-es6/synchronizers/synchronizer-ws-client.js.gz +0 -0
  478. package/lib/umd-es6/synchronizers/synchronizer-ws-server.js +1 -0
  479. package/lib/umd-es6/synchronizers/synchronizer-ws-server.js.gz +0 -0
  480. package/lib/umd-es6/synchronizers.js +1 -0
  481. package/lib/umd-es6/synchronizers.js.gz +0 -0
  482. package/lib/umd-es6/tinybase.js +1 -1
  483. package/lib/umd-es6/tinybase.js.gz +0 -0
  484. package/lib/umd-es6/tools.js +1 -1
  485. package/lib/umd-es6/tools.js.gz +0 -0
  486. package/lib/umd-es6/ui-react-dom-debug.js +1 -1
  487. package/lib/umd-es6/ui-react-dom-debug.js.gz +0 -0
  488. package/lib/umd-es6/ui-react-dom.js +1 -1
  489. package/lib/umd-es6/ui-react-dom.js.gz +0 -0
  490. package/lib/umd-es6/ui-react.js +1 -1
  491. package/lib/umd-es6/ui-react.js.gz +0 -0
  492. package/package.json +68 -48
  493. package/readme.md +2 -2
@@ -64,7 +64,7 @@ import {
64
64
  ValueProps,
65
65
  ValuesProps,
66
66
  } from './internal/ui-react';
67
- import {Callback, Id, IdOrNull, Ids, ParameterizedCallback} from './common.d';
67
+ import {Callback, Id, IdOrNull, Ids, ParameterizedCallback} from './common.d.ts';
68
68
  import {
69
69
  Cell,
70
70
  CellIdsListener,
@@ -98,21 +98,21 @@ import {
98
98
  ValueListener,
99
99
  Values,
100
100
  ValuesListener,
101
- } from './store.d';
101
+ } from './store.d.ts';
102
102
  import {
103
103
  CheckpointIds,
104
104
  CheckpointIdsListener,
105
105
  CheckpointListener,
106
106
  Checkpoints,
107
- } from './checkpoints.d';
108
- import {Indexes, SliceIdsListener, SliceRowIdsListener} from './indexes.d';
107
+ } from './checkpoints.d.ts';
108
+ import {Indexes, SliceIdsListener, SliceRowIdsListener} from './indexes.d.ts';
109
109
  import {
110
110
  LinkedRowIdsListener,
111
111
  LocalRowIdsListener,
112
112
  Relationships,
113
113
  RemoteRowIdListener,
114
- } from './relationships.d';
115
- import {MetricListener, Metrics} from './metrics.d';
114
+ } from './relationships.d.ts';
115
+ import {MetricListener, Metrics} from './metrics.d.ts';
116
116
  import {
117
117
  Queries,
118
118
  ResultCell,
@@ -126,9 +126,11 @@ import {
126
126
  ResultTable,
127
127
  ResultTableCellIdsListener,
128
128
  ResultTableListener,
129
- } from './queries.d';
130
- import {Persister} from './persisters.d';
129
+ } from './queries.d.ts';
130
+ import {MergeableStore} from './mergeable-store';
131
+ import {Persister} from './persisters.d.ts';
131
132
  import {ReactElement} from 'react';
133
+ import {Synchronizer} from './synchronizers.d.ts';
132
134
 
133
135
  export type WithSchemas<Schemas extends OptionalSchemas> = {
134
136
  /**
@@ -301,9 +303,9 @@ export type WithSchemas<Schemas extends OptionalSchemas> = {
301
303
  *
302
304
  * It is possible to create a Store outside of the React app with the regular
303
305
  * createStore function and pass it in, but you may prefer to create it within
304
- * the app, perhaps inside the top-level component. To defend against a new
305
- * Store being created every time the app renders or re-renders, the
306
- * useCreateStore hook wraps the creation in a memoization.
306
+ * the app, perhaps inside the top-level component. To prevent a new Store being
307
+ * created every time the app renders or re-renders, the useCreateStore hook
308
+ * wraps the creation in a memoization.
307
309
  *
308
310
  * The useCreateStore hook is a very thin wrapper around the React `useMemo`
309
311
  * hook, defaulting to an empty array for its dependencies, so that by default,
@@ -380,6 +382,14 @@ export type WithSchemas<Schemas extends OptionalSchemas> = {
380
382
  createDeps?: React.DependencyList,
381
383
  ) => Store<Schemas>;
382
384
 
385
+ /**
386
+ * The useCreateMergeableStore hook
387
+ */
388
+ useCreateMergeableStore: (
389
+ create: () => MergeableStore<Schemas>,
390
+ createDeps?: React.DependencyList,
391
+ ) => MergeableStore<Schemas>;
392
+
383
393
  /**
384
394
  * The useStoreIds hook is used to retrieve the Ids of all the named Store
385
395
  * objects present in the current Provider component context.
@@ -2830,8 +2840,8 @@ export type WithSchemas<Schemas extends OptionalSchemas> = {
2830
2840
  * specify `reuseRowIds` to be `false`, then the Id will be a monotonically
2831
2841
  * increasing string representation of an increasing integer, regardless of any
2832
2842
  * you may have previously deleted.
2833
- * @param tableId The Id of the Table in the Store, or a GetId function
2834
- * that will return it.
2843
+ * @param tableId The Id of the Table in the Store, or a GetId function that
2844
+ * will return it.
2835
2845
  * @param getRow A function which returns the Row object that will be used to
2836
2846
  * update the Store, based on the parameter the callback will receive (and which
2837
2847
  * is most likely a DOM event).
@@ -4199,8 +4209,8 @@ export type WithSchemas<Schemas extends OptionalSchemas> = {
4199
4209
  * dependencies) or the component unmounts, the listener on the underlying Store
4200
4210
  * will be deleted.
4201
4211
  * @param tableId The Id of the Table to listen to, or `null` as a wildcard.
4202
- * @param listener The function that will be called whenever the matching
4203
- * Table is added or removed.
4212
+ * @param listener The function that will be called whenever the matching Table
4213
+ * is added or removed.
4204
4214
  * @param listenerDeps An optional array of dependencies for the `listener`
4205
4215
  * function, which, if any change, result in the re-registration of the
4206
4216
  * listener. This parameter defaults to an empty array.
@@ -4805,8 +4815,8 @@ export type WithSchemas<Schemas extends OptionalSchemas> = {
4805
4815
  * more easily done with the useHasRow hook).
4806
4816
  *
4807
4817
  * You can either listen to a single Row being added or removed (by specifying
4808
- * the Table Id and Row Id, as the method's first two parameters) or changes
4809
- * to any Row (by providing `null` wildcards).
4818
+ * the Table Id and Row Id, as the method's first two parameters) or changes to
4819
+ * any Row (by providing `null` wildcards).
4810
4820
  *
4811
4821
  * Both, either, or neither of the `tableId` and `rowId` parameters can be
4812
4822
  * wildcarded with `null`. You can listen to a specific Row in a specific Table,
@@ -4819,8 +4829,8 @@ export type WithSchemas<Schemas extends OptionalSchemas> = {
4819
4829
  * the component unmounts, the listener on the underlying Store will be deleted.
4820
4830
  * @param tableId The Id of the Table to listen to, or `null` as a wildcard.
4821
4831
  * @param rowId The Id of the Row to listen to, or `null` as a wildcard.
4822
- * @param listener The function that will be called whenever the matching Row
4823
- * is added or removed.
4832
+ * @param listener The function that will be called whenever the matching Row is
4833
+ * added or removed.
4824
4834
  * @param listenerDeps An optional array of dependencies for the `listener`
4825
4835
  * function, which, if any change, result in the re-registration of the
4826
4836
  * listener. This parameter defaults to an empty array.
@@ -5081,14 +5091,14 @@ export type WithSchemas<Schemas extends OptionalSchemas> = {
5081
5091
  * own specific listener to do more than simply tracking the value (which is
5082
5092
  * more easily done with the useHasCell hook).
5083
5093
  *
5084
- * You can either listen to a single Cell being added or removed (by
5085
- * specifying the Table Id, Row Id, and Cell Id as the method's first three
5086
- * parameters) or changes to any Cell (by providing `null` wildcards).
5094
+ * You can either listen to a single Cell being added or removed (by specifying
5095
+ * the Table Id, Row Id, and Cell Id as the method's first three parameters) or
5096
+ * changes to any Cell (by providing `null` wildcards).
5087
5097
  *
5088
- * All, some, or none of the `tableId`, `rowId`, and `cellId` parameters can
5089
- * be wildcarded with `null`. You can listen to a specific Cell in a specific
5090
- * Row in a specific Table, any Cell in any Row in any Table, for example - or
5091
- * every other combination of wildcards.
5098
+ * All, some, or none of the `tableId`, `rowId`, and `cellId` parameters can be
5099
+ * wildcarded with `null`. You can listen to a specific Cell in a specific Row
5100
+ * in a specific Table, any Cell in any Row in any Table, for example - or every
5101
+ * other combination of wildcards.
5092
5102
  *
5093
5103
  * Unlike the addHasCellListener method, which returns a listener Id and
5094
5104
  * requires you to remove it manually, the useHasCellListener hook manages this
@@ -5518,8 +5528,8 @@ export type WithSchemas<Schemas extends OptionalSchemas> = {
5518
5528
  * dependencies) or the component unmounts, the listener on the underlying Store
5519
5529
  * will be deleted.
5520
5530
  * @param valueId The Id of the Value to listen to, or `null` as a wildcard.
5521
- * @param listener The function that will be called whenever the matching
5522
- * Value is added or removed.
5531
+ * @param listener The function that will be called whenever the matching Value
5532
+ * is added or removed.
5523
5533
  * @param listenerDeps An optional array of dependencies for the `listener`
5524
5534
  * function, which, if any change, result in the re-registration of the
5525
5535
  * listener. This parameter defaults to an empty array.
@@ -5869,18 +5879,16 @@ export type WithSchemas<Schemas extends OptionalSchemas> = {
5869
5879
  * store: Store,
5870
5880
  * create: (store: Store) => Metrics,
5871
5881
  * createDeps?: React.DependencyList,
5872
- * ): Metrics;
5882
+ * ): Metrics | undefined;
5873
5883
  * ```
5874
5884
  *
5875
5885
  * It is possible to create a Metrics object outside of the React app with the
5876
5886
  * regular createMetrics function and pass it in, but you may prefer to create
5877
- * it within the app, perhaps inside the top-level component. To defend against
5878
- * a new Metrics object being created every time the app renders or re-renders,
5879
- * the useCreateMetrics hook wraps the creation in a memoization.
5880
- *
5881
- * The useCreateMetrics hook is a very thin wrapper around the React `useMemo`
5882
- * hook, defaulting to the provided Store as its dependency, so that by default,
5883
- * the creation only occurs once per Store.
5887
+ * it within the app, perhaps inside the top-level component. To prevent a new
5888
+ * Metrics object being created every time the app renders or re-renders, since
5889
+ * v5.0 the useCreateMetrics hook performs the creation in an effect. As a
5890
+ * result this hook will return `undefined` on the brief first render, which you
5891
+ * should defend against.
5884
5892
  *
5885
5893
  * If your `create` function contains other dependencies, the changing of which
5886
5894
  * should also cause the Metrics object to be recreated, you can provide them in
@@ -5915,7 +5923,7 @@ export type WithSchemas<Schemas extends OptionalSchemas> = {
5915
5923
  * 'species',
5916
5924
  * );
5917
5925
  * });
5918
- * return <span>{metrics.getMetric('speciesCount')}</span>;
5926
+ * return <span>{metrics?.getMetric('speciesCount')}</span>;
5919
5927
  * };
5920
5928
  *
5921
5929
  * const app = document.createElement('div');
@@ -5953,7 +5961,7 @@ export type WithSchemas<Schemas extends OptionalSchemas> = {
5953
5961
  * },
5954
5962
  * [tableToCount],
5955
5963
  * );
5956
- * return <span>{metrics.getMetric('tableCount')}</span>;
5964
+ * return <span>{metrics?.getMetric('tableCount')}</span>;
5957
5965
  * };
5958
5966
  *
5959
5967
  * const app = document.createElement('div');
@@ -5976,7 +5984,7 @@ export type WithSchemas<Schemas extends OptionalSchemas> = {
5976
5984
  store: Store<Schemas>,
5977
5985
  create: (store: Store<Schemas>) => Metrics<Schemas>,
5978
5986
  createDeps?: React.DependencyList,
5979
- ) => Metrics<Schemas>;
5987
+ ) => Metrics<Schemas> | undefined;
5980
5988
 
5981
5989
  /**
5982
5990
  * The useMetricsIds hook is used to retrieve the Ids of all the named Metrics
@@ -6401,18 +6409,16 @@ export type WithSchemas<Schemas extends OptionalSchemas> = {
6401
6409
  * store: Store,
6402
6410
  * create: (store: Store) => Indexes,
6403
6411
  * createDeps?: React.DependencyList,
6404
- * ): Indexes;
6412
+ * ): Indexes | undefined;
6405
6413
  * ```
6406
6414
  *
6407
6415
  * It is possible to create an Indexes object outside of the React app with the
6408
6416
  * regular createIndexes function and pass it in, but you may prefer to create
6409
- * it within the app, perhaps inside the top-level component. To defend against
6410
- * a new Indexes object being created every time the app renders or re-renders,
6411
- * the useCreateIndexes hook wraps the creation in a memoization.
6412
- *
6413
- * The useCreateIndexes hook is a very thin wrapper around the React `useMemo`
6414
- * hook, defaulting to the provided Store as its dependency, so that by default,
6415
- * the creation only occurs once per Store.
6417
+ * it within the app, perhaps inside the top-level component. To prevent a new
6418
+ * Indexes object being created every time the app renders or re-renders, since
6419
+ * v5.0 the useCreateIndexes hook performs the creation in an effect. As a
6420
+ * result this hook will return `undefined` on the brief first render, which you
6421
+ * should defend against.
6416
6422
  *
6417
6423
  * If your `create` function contains other dependencies, the changing of which
6418
6424
  * should also cause the Indexes object to be recreated, you can provide them in
@@ -6452,7 +6458,7 @@ export type WithSchemas<Schemas extends OptionalSchemas> = {
6452
6458
  * 'species',
6453
6459
  * );
6454
6460
  * });
6455
- * return <span>{JSON.stringify(indexes.getSliceIds('bySpecies'))}</span>;
6461
+ * return <span>{JSON.stringify(indexes?.getSliceIds('bySpecies'))}</span>;
6456
6462
  * };
6457
6463
  *
6458
6464
  * const app = document.createElement('div');
@@ -6493,7 +6499,7 @@ export type WithSchemas<Schemas extends OptionalSchemas> = {
6493
6499
  * },
6494
6500
  * [cellToIndex],
6495
6501
  * );
6496
- * return <span>{JSON.stringify(indexes.getSliceIds('byCell'))}</span>;
6502
+ * return <span>{JSON.stringify(indexes?.getSliceIds('byCell'))}</span>;
6497
6503
  * };
6498
6504
  *
6499
6505
  * const app = document.createElement('div');
@@ -6516,7 +6522,7 @@ export type WithSchemas<Schemas extends OptionalSchemas> = {
6516
6522
  store: Store<Schemas>,
6517
6523
  create: (store: Store<Schemas>) => Indexes<Schemas>,
6518
6524
  createDeps?: React.DependencyList,
6519
- ) => Indexes<Schemas>;
6525
+ ) => Indexes<Schemas> | undefined;
6520
6526
 
6521
6527
  /**
6522
6528
  * The useIndexesIds hook is used to retrieve the Ids of all the named Indexes
@@ -7160,19 +7166,16 @@ export type WithSchemas<Schemas extends OptionalSchemas> = {
7160
7166
  * store: Store,
7161
7167
  * create: (store: Store) => Relationships,
7162
7168
  * createDeps?: React.DependencyList,
7163
- * ): Relationships;
7169
+ * ): Relationships | undefined;
7164
7170
  * ```
7165
7171
  *
7166
7172
  * It is possible to create a Relationships object outside of the React app with
7167
7173
  * the regular createRelationships function and pass it in, but you may prefer
7168
7174
  * to create it within the app, perhaps inside the top-level component. To
7169
- * defend against a new Relationships object being created every time the app
7170
- * renders or re-renders, the useCreateRelationships hook wraps the creation in
7171
- * a memoization.
7172
- *
7173
- * The useCreateRelationships hook is a very thin wrapper around the React
7174
- * `useMemo` hook, defaulting to the provided Store as its dependency, so that
7175
- * by default, the creation only occurs once per Store.
7175
+ * prevent a new Relationships object being created every time the app renders
7176
+ * or re-renders, since v5.0 the useCreateRelationships hook performs the
7177
+ * creation in an effect. As a result this hook will return `undefined` on the
7178
+ * brief first render, which you should defend against.
7176
7179
  *
7177
7180
  * If your `create` function contains other dependencies, the changing of which
7178
7181
  * should also cause the Relationships object to be recreated, you can provide
@@ -7214,7 +7217,9 @@ export type WithSchemas<Schemas extends OptionalSchemas> = {
7214
7217
  * 'species',
7215
7218
  * );
7216
7219
  * });
7217
- * return <span>{relationships.getRemoteRowId('petSpecies', 'fido')}</span>;
7220
+ * return (
7221
+ * <span>{relationships?.getRemoteRowId('petSpecies', 'fido')}</span>
7222
+ * );
7218
7223
  * };
7219
7224
  *
7220
7225
  * const app = document.createElement('div');
@@ -7260,7 +7265,9 @@ export type WithSchemas<Schemas extends OptionalSchemas> = {
7260
7265
  * },
7261
7266
  * [remoteTableAndCellToLink],
7262
7267
  * );
7263
- * return <span>{relationships.getRemoteRowId('cellLinked', 'fido')}</span>;
7268
+ * return (
7269
+ * <span>{relationships?.getRemoteRowId('cellLinked', 'fido')}</span>
7270
+ * );
7264
7271
  * };
7265
7272
  *
7266
7273
  * const app = document.createElement('div');
@@ -7283,7 +7290,7 @@ export type WithSchemas<Schemas extends OptionalSchemas> = {
7283
7290
  store: Store<Schemas>,
7284
7291
  create: (store: Store<Schemas>) => Relationships<Schemas>,
7285
7292
  createDeps?: React.DependencyList,
7286
- ) => Relationships<Schemas>;
7293
+ ) => Relationships<Schemas> | undefined;
7287
7294
 
7288
7295
  /**
7289
7296
  * The useRelationshipsIds hook is used to retrieve the Ids of all the named
@@ -8222,18 +8229,16 @@ export type WithSchemas<Schemas extends OptionalSchemas> = {
8222
8229
  * store: Store,
8223
8230
  * create: (store: Store) => Queries,
8224
8231
  * createDeps?: React.DependencyList,
8225
- * ): Queries;
8232
+ * ): Queries | undefined;
8226
8233
  * ```
8227
8234
  *
8228
8235
  * It is possible to create a Queries object outside of the React app with the
8229
8236
  * regular createQueries function and pass it in, but you may prefer to create
8230
- * it within the app, perhaps inside the top-level component. To defend against
8231
- * a new Queries object being created every time the app renders or re-renders,
8232
- * the useCreateQueries hook wraps the creation in a memoization.
8233
- *
8234
- * The useCreateQueries hook is a very thin wrapper around the React `useMemo`
8235
- * hook, defaulting to the provided Store as its dependency, so that by default,
8236
- * the creation only occurs once per Store.
8237
+ * it within the app, perhaps inside the top-level component. To prevent a new
8238
+ * Queries object being created every time the app renders or re-renders, since
8239
+ * v5.0 the useCreateQueries hook performs the creation in an effect. As a
8240
+ * result this hook will return `undefined` on the brief first render, which you
8241
+ * should defend against.
8237
8242
  *
8238
8243
  * If your `create` function contains other dependencies, the changing of which
8239
8244
  * should also cause the Queries object to be recreated, you can provide them in
@@ -8276,7 +8281,7 @@ export type WithSchemas<Schemas extends OptionalSchemas> = {
8276
8281
  * );
8277
8282
  * });
8278
8283
  * return (
8279
- * <span>{queries.getResultCell('dogColors', 'fido', 'color')}</span>
8284
+ * <span>{queries?.getResultCell('dogColors', 'fido', 'color')}</span>
8280
8285
  * );
8281
8286
  * };
8282
8287
  *
@@ -8318,7 +8323,7 @@ export type WithSchemas<Schemas extends OptionalSchemas> = {
8318
8323
  * );
8319
8324
  * });
8320
8325
  * return (
8321
- * <span>{queries.getResultCell('dogColors', 'fido', 'color')}</span>
8326
+ * <span>{queries?.getResultCell('dogColors', 'fido', 'color')}</span>
8322
8327
  * );
8323
8328
  * };
8324
8329
  *
@@ -8340,7 +8345,7 @@ export type WithSchemas<Schemas extends OptionalSchemas> = {
8340
8345
  store: Store<Schemas>,
8341
8346
  create: (store: Store<Schemas>) => Queries<Schemas>,
8342
8347
  createDeps?: React.DependencyList,
8343
- ) => Queries<Schemas>;
8348
+ ) => Queries<Schemas> | undefined;
8344
8349
 
8345
8350
  /**
8346
8351
  * The useQueriesIds hook is used to retrieve the Ids of all the named Queries
@@ -10432,19 +10437,16 @@ export type WithSchemas<Schemas extends OptionalSchemas> = {
10432
10437
  * store: Store,
10433
10438
  * create: (store: Store) => Checkpoints,
10434
10439
  * createDeps?: React.DependencyList,
10435
- * ): Checkpoints;
10440
+ * ): Checkpoints | undefined;
10436
10441
  * ```
10437
10442
  *
10438
10443
  * It is possible to create a Checkpoints object outside of the React app with
10439
10444
  * the regular createCheckpoints function and pass it in, but you may prefer to
10440
- * create it within the app, perhaps inside the top-level component. To defend
10441
- * against a new Checkpoints object being created every time the app renders or
10442
- * re-renders, the useCreateCheckpoints hook wraps the creation in a
10443
- * memoization.
10444
- *
10445
- * The useCreateCheckpoints hook is a very thin wrapper around the React
10446
- * `useMemo` hook, defaulting to the provided Store as its dependency, so that
10447
- * by default, the creation only occurs once per Store.
10445
+ * create it within the app, perhaps inside the top-level component. To prevent
10446
+ * a new Checkpoints object being created every time the app renders or
10447
+ * re-renders, since v5.0 the useCreateMetrics hook performs the creation in an
10448
+ * effect. As a result this hook will return `undefined` on the brief first
10449
+ * render, which you should defend against.
10448
10450
  *
10449
10451
  * If your `create` function contains other dependencies, the changing of which
10450
10452
  * should also cause the Checkpoints object to be recreated, you can provide
@@ -10474,7 +10476,7 @@ export type WithSchemas<Schemas extends OptionalSchemas> = {
10474
10476
  * console.log('Checkpoints created');
10475
10477
  * return createCheckpoints(store).setSize(10);
10476
10478
  * });
10477
- * return <span>{JSON.stringify(checkpoints.getCheckpointIds())}</span>;
10479
+ * return <span>{JSON.stringify(checkpoints?.getCheckpointIds())}</span>;
10478
10480
  * };
10479
10481
  *
10480
10482
  * const app = document.createElement('div');
@@ -10506,7 +10508,7 @@ export type WithSchemas<Schemas extends OptionalSchemas> = {
10506
10508
  * },
10507
10509
  * [size],
10508
10510
  * );
10509
- * return <span>{JSON.stringify(checkpoints.getCheckpointIds())}</span>;
10511
+ * return <span>{JSON.stringify(checkpoints?.getCheckpointIds())}</span>;
10510
10512
  * };
10511
10513
  *
10512
10514
  * const app = document.createElement('div');
@@ -10529,7 +10531,7 @@ export type WithSchemas<Schemas extends OptionalSchemas> = {
10529
10531
  store: Store<Schemas>,
10530
10532
  create: (store: Store<Schemas>) => Checkpoints<Schemas>,
10531
10533
  createDeps?: React.DependencyList,
10532
- ) => Checkpoints<Schemas>;
10534
+ ) => Checkpoints<Schemas> | undefined;
10533
10535
 
10534
10536
  /**
10535
10537
  * The useCheckpointsIds hook is used to retrieve the Ids of all the named
@@ -11487,20 +11489,18 @@ export type WithSchemas<Schemas extends OptionalSchemas> = {
11487
11489
  * store: Store,
11488
11490
  * create: (store: Store) => PersisterOrUndefined,
11489
11491
  * createDeps?: React.DependencyList,
11490
- * then?: (persister: PersisterOrUndefined) => Promise<void>,
11492
+ * then?: (persister: Persister) => Promise<void>,
11491
11493
  * thenDeps?: React.DependencyList,
11492
- * destroy?: (persister: PersisterOrUndefined) => void,
11494
+ * destroy?: (persister: Persister) => void,
11493
11495
  * destroyDeps?: React.DependencyList,
11494
11496
  * ): PersisterOrUndefined;
11495
11497
  * ```
11496
11498
  *
11497
11499
  * It is possible to create a Persister outside of the React app with the
11498
11500
  * regular createPersister function and pass it in, but you may prefer to create
11499
- * it within the app, perhaps inside the top-level component. To defend against
11500
- * a new Persister being created every time the app renders or re-renders, the
11501
- * useCreatePersister hook wraps the creation in a memoization, and provides a
11502
- * second callback so that you can configure the Persister, once, and
11503
- * asynchronously, when it is created.
11501
+ * it within the app, perhaps inside the top-level component. To prevent a new
11502
+ * Persister being created every time the app renders or re-renders, since v5.0
11503
+ * the useCreateMetrics hook performs the creation in an effect.
11504
11504
  *
11505
11505
  * If your `create` function (the second parameter to the hook) contains
11506
11506
  * dependencies, the changing of which should cause the Persister to be
@@ -11508,19 +11508,18 @@ export type WithSchemas<Schemas extends OptionalSchemas> = {
11508
11508
  * you would for any React hook with dependencies. The Store passed in as the
11509
11509
  * first parameter of this hook is used as a dependency by default.
11510
11510
  *
11511
- * A second `then` callback can be provided as the fourth parameter. This is
11512
- * called after the creation, and, importantly, can be asynchronous, so that you
11513
- * can configure the Persister with the startAutoLoad method and startAutoSave
11514
- * method, for example. If this callback contains dependencies, the changing of
11515
- * which should cause the Persister to be reconfigured, you can provide them in
11516
- * an array in the fifth parameter. The Persister itself is used as a dependency
11517
- * by default.
11511
+ * A second callback, called `then`, can be provided as the fourth parameter.
11512
+ * This is called after the creation, and, importantly, can be asynchronous, so
11513
+ * that you can configure the Persister with the startAutoLoad method and
11514
+ * startAutoSave method, for example. If this callback contains dependencies,
11515
+ * the changing of which should cause the Persister to be reconfigured, you can
11516
+ * provide them in an array in the fifth parameter. The Persister itself is used
11517
+ * as a dependency by default.
11518
11518
  *
11519
11519
  * Since v4.3.0, the `create` function can return undefined, meaning that you
11520
11520
  * can enable or disable persistence conditionally within this hook. This is
11521
11521
  * useful for applications which might turn on or off their cloud persistence or
11522
- * collaboration features. As a result, the `then` callback may also get passed
11523
- * undefined, which you should handle accordingly.
11522
+ * collaboration features.
11524
11523
  *
11525
11524
  * Since v4.3.19, a `destroy` function can be provided which will be called
11526
11525
  * after an old Persister is destroyed due to a change in the `createDeps`
@@ -11657,12 +11656,170 @@ export type WithSchemas<Schemas extends OptionalSchemas> = {
11657
11656
  store: Store<Schemas>,
11658
11657
  create: (store: Store<Schemas>) => PersisterOrUndefined,
11659
11658
  createDeps?: React.DependencyList,
11660
- then?: (persister?: PersisterOrUndefined) => Promise<void>,
11659
+ then?: (persister: Persister<Schemas>) => Promise<void>,
11661
11660
  thenDeps?: React.DependencyList,
11662
- destroy?: (persister: PersisterOrUndefined) => void,
11661
+ destroy?: (persister: Persister<Schemas>) => void,
11663
11662
  destroyDeps?: React.DependencyList,
11664
11663
  ) => PersisterOrUndefined;
11665
11664
 
11665
+ /**
11666
+ * The useCreateSynchronizer hook is used to create a Synchronizer within a
11667
+ * React application along with convenient memoization and callbacks.
11668
+ *
11669
+ * This has schema-based typing. The following is a simplified representation:
11670
+ *
11671
+ * ```ts override
11672
+ * useCreateSynchronizer<
11673
+ * SynchronizerOrUndefined extends Synchronizer | undefined,
11674
+ * >(
11675
+ * store: MergeableStore,
11676
+ * create: (store: MergeableStore) => Promise<SynchronizerOrUndefined>,
11677
+ * createDeps?: React.DependencyList,
11678
+ * then?: (synchronizer: Synchronizer) => Promise<void>,
11679
+ * thenDeps?: React.DependencyList,
11680
+ * destroy?: (synchronizer: Synchronizer) => void,
11681
+ * destroyDeps?: React.DependencyList,
11682
+ * ): SynchronizerOrUndefined;
11683
+ * ```
11684
+ *
11685
+ * It is possible to create a Synchronizer outside of the React app with the
11686
+ * regular createSynchronizer function and pass it in, but you may prefer to
11687
+ * create it within the app, perhaps inside the top-level component. To prevent
11688
+ * a new Synchronizer being created every time the app renders or re-renders,
11689
+ * the useCreateMetrics hook performs the creation in an effect.
11690
+ *
11691
+ * If your asynchronous `create` function (the second parameter to the hook)
11692
+ * contains dependencies, the changing of which should cause the Synchronizer to
11693
+ * be recreated, you can provide them in an array in the third parameter, just
11694
+ * as you would for any React hook with dependencies. The MergeableStore passed
11695
+ * in as the first parameter of this hook is used as a dependency by default.
11696
+ *
11697
+ * A second callback, called `then`, can be provided as the fourth parameter.
11698
+ * This is called after the creation, and can also be asynchronous, so that you
11699
+ * can configure the Synchronizer with the startSync method, for example. If
11700
+ * this callback contains dependencies, the changing of which should cause the
11701
+ * Synchronizer to be reconfigured, you can provide them in an array in the
11702
+ * fifth parameter. The Synchronizer itself is used as a dependency by default.
11703
+ *
11704
+ * The `create` function can return undefined, meaning that you can enable or
11705
+ * disable synchronization conditionally within this hook. This is useful for
11706
+ * applications which might turn on or off their cloud synchronization or
11707
+ * collaboration features.
11708
+ *
11709
+ * This hook ensures the Synchronizer object is destroyed whenever a new one is
11710
+ * created or the component is unmounted.
11711
+ * @param store A reference to the MergeableStore for which to create a new
11712
+ * Synchronizer object.
11713
+ * @param create An asynchronous function for performing the creation steps of
11714
+ * the Synchronizer object for the Store.
11715
+ * @param createDeps An optional array of dependencies for the `create`
11716
+ * function, which, if any change, result in its rerun. This parameter defaults
11717
+ * to an empty array.
11718
+ * @param then An optional callback for performing asynchronous post-creation
11719
+ * steps on the Synchronizer, such as starting automatic synchronization.
11720
+ * @param thenDeps An optional array of dependencies for the `then` callback,
11721
+ * which, if any change, result in its rerun. This parameter defaults to an
11722
+ * empty array.
11723
+ * @param destroy An optional callback whenever the Synchronizer is destroyed
11724
+ * due to a change in the `createDeps` dependencies.
11725
+ * @param destroyDeps An optional array of dependencies for the `destroy`
11726
+ * callback, which, if any change, result in `destroy` and `then` being rerun.
11727
+ * This parameter defaults to an empty array.
11728
+ * @returns A reference to the Synchronizer.
11729
+ * @example
11730
+ * This example creates a Synchronizer at the top level of a React application.
11731
+ * Even though the App component is rendered twice, the Synchronizer creation
11732
+ * only occurs once by default.
11733
+ *
11734
+ * ```jsx
11735
+ * const App = () => {
11736
+ * const store = useCreateMergeableStore(() => createMergeableStore('s1'));
11737
+ * const synchronizer = useCreateSynchronizer(store, async (store) => {
11738
+ * console.log('Synchronizer created');
11739
+ * return await createLocalSynchronizer(store, 'pets');
11740
+ * });
11741
+ * return <span>{JSON.stringify(useTables(store))}</span>;
11742
+ * };
11743
+ *
11744
+ * const app = document.createElement('div');
11745
+ * const root = ReactDOMClient.createRoot(app);
11746
+ * root.render(<App />); // !act
11747
+ * // -> 'Synchronizer created'
11748
+ *
11749
+ * // ... // !act
11750
+ * root.render(<App />); // !act
11751
+ * // No second Synchronizer creation
11752
+ *
11753
+ * root.unmount(); // !act
11754
+ * ```
11755
+ * @example
11756
+ * This example creates a Synchronizer at the top level of a React application.
11757
+ * The App component is rendered twice, each with a different top-level prop.
11758
+ * The useCreateSynchronizer hook takes the `url` prop as a dependency, and so
11759
+ * the Synchronizer object is created again on the second render. The first is
11760
+ * destroyed and the `destroy` parameter is called for it. A `then` parameter
11761
+ * is provided to start both Synchronizers' synchronization.
11762
+ *
11763
+ * ```jsx
11764
+ * const server1 = createWsServer(new ws.WebSocketServer({port: 8044}));
11765
+ * const server2 = createWsServer(new ws.WebSocketServer({port: 8045}));
11766
+ *
11767
+ * const App = ({url}) => {
11768
+ * const store = useCreateMergeableStore(() => createMergeableStore('s1'));
11769
+ * const synchronizer = useCreateSynchronizer(
11770
+ * store,
11771
+ * async (store) => {
11772
+ * const webSocket = new WebSocket(url);
11773
+ * console.log(`Synchronizer created for ${webSocket.url}`);
11774
+ * return await createWsSynchronizer(store, webSocket);
11775
+ * },
11776
+ * [url],
11777
+ * async (synchronizer) => {
11778
+ * await synchronizer.startSync();
11779
+ * },
11780
+ * [],
11781
+ * (synchronizer) => {
11782
+ * const webSocket = synchronizer.getWebSocket();
11783
+ * console.log(`Synchronizer destroyed for ${webSocket.url}`);
11784
+ * },
11785
+ * );
11786
+ * return <span>{JSON.stringify(useTables(store))}</span>;
11787
+ * };
11788
+ *
11789
+ * const app = document.createElement('div');
11790
+ * const root = ReactDOMClient.createRoot(app);
11791
+ * root.render(<App url="ws://localhost:8044/" />); // !act
11792
+ * // ... // !act
11793
+ * // -> 'Synchronizer created for ws://localhost:8044/'
11794
+ *
11795
+ * root.render(<App url="ws://localhost:8045/" />); // !act
11796
+ * // ... // !act
11797
+ * // -> 'Synchronizer created for ws://localhost:8045/'
11798
+ * // -> 'Synchronizer destroyed for ws://localhost:8044/'
11799
+ *
11800
+ * root.unmount(); // !act
11801
+ * // -> 'Synchronizer destroyed for ws://localhost:8045/'
11802
+ *
11803
+ * server1.destroy();
11804
+ * server2.destroy();
11805
+ * ```
11806
+ * @category Synchronizer hooks
11807
+ * @since v5.0.0
11808
+ */
11809
+ useCreateSynchronizer: <
11810
+ SynchronizerOrUndefined extends Synchronizer<Schemas> | undefined,
11811
+ >(
11812
+ store: MergeableStore<Schemas>,
11813
+ create: (
11814
+ store: MergeableStore<Schemas>,
11815
+ ) => Promise<SynchronizerOrUndefined>,
11816
+ createDeps?: React.DependencyList,
11817
+ then?: (synchronizer: Synchronizer<Schemas>) => Promise<void>,
11818
+ thenDeps?: React.DependencyList,
11819
+ destroy?: (synchronizer: Synchronizer<Schemas>) => void,
11820
+ destroyDeps?: React.DependencyList,
11821
+ ) => SynchronizerOrUndefined;
11822
+
11666
11823
  /**
11667
11824
  * The ExtraProps type represents a set of arbitrary additional props.
11668
11825
  * @category Props