tinybase 5.0.0-beta.1 → 5.0.0-beta.11

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 (491) 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 -0
  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-partykit-server.cjs +1 -1
  32. package/lib/cjs/persisters/persister-partykit-server.cjs.gz +0 -0
  33. package/lib/cjs/persisters/persister-powersync.cjs +1 -0
  34. package/lib/cjs/persisters/persister-powersync.cjs.gz +0 -0
  35. package/lib/cjs/persisters/persister-remote.cjs +1 -1
  36. package/lib/cjs/persisters/persister-remote.cjs.gz +0 -0
  37. package/lib/cjs/persisters/persister-sqlite-wasm.cjs +1 -1
  38. package/lib/cjs/persisters/persister-sqlite-wasm.cjs.gz +0 -0
  39. package/lib/cjs/persisters/persister-sqlite3.cjs +1 -1
  40. package/lib/cjs/persisters/persister-sqlite3.cjs.gz +0 -0
  41. package/lib/cjs/persisters/persister-yjs.cjs +1 -1
  42. package/lib/cjs/persisters/persister-yjs.cjs.gz +0 -0
  43. package/lib/cjs/persisters.cjs +1 -1
  44. package/lib/cjs/persisters.cjs.gz +0 -0
  45. package/lib/cjs/queries.cjs +1 -1
  46. package/lib/cjs/queries.cjs.gz +0 -0
  47. package/lib/cjs/relationships.cjs +1 -1
  48. package/lib/cjs/relationships.cjs.gz +0 -0
  49. package/lib/cjs/store.cjs +1 -1
  50. package/lib/cjs/store.cjs.gz +0 -0
  51. package/lib/cjs/synchronizers/synchronizer-local.cjs +1 -0
  52. package/lib/cjs/synchronizers/synchronizer-local.cjs.gz +0 -0
  53. package/lib/cjs/synchronizers/synchronizer-ws-client.cjs +1 -0
  54. package/lib/cjs/synchronizers/synchronizer-ws-client.cjs.gz +0 -0
  55. package/lib/cjs/synchronizers/synchronizer-ws-server.cjs +1 -0
  56. package/lib/cjs/synchronizers/synchronizer-ws-server.cjs.gz +0 -0
  57. package/lib/cjs/synchronizers.cjs +1 -0
  58. package/lib/cjs/synchronizers.cjs.gz +0 -0
  59. package/lib/cjs/tinybase.cjs +1 -1
  60. package/lib/cjs/tinybase.cjs.gz +0 -0
  61. package/lib/cjs/tools.cjs +1 -1
  62. package/lib/cjs/tools.cjs.gz +0 -0
  63. package/lib/cjs/ui-react-dom-debug.cjs +1 -1
  64. package/lib/cjs/ui-react-dom-debug.cjs.gz +0 -0
  65. package/lib/cjs/ui-react-dom.cjs +1 -1
  66. package/lib/cjs/ui-react-dom.cjs.gz +0 -0
  67. package/lib/cjs/ui-react.cjs +1 -1
  68. package/lib/cjs/ui-react.cjs.gz +0 -0
  69. package/lib/cjs-es6/checkpoints.cjs +1 -1
  70. package/lib/cjs-es6/checkpoints.cjs.gz +0 -0
  71. package/lib/cjs-es6/indexes.cjs +1 -1
  72. package/lib/cjs-es6/indexes.cjs.gz +0 -0
  73. package/lib/cjs-es6/mergeable-store.cjs +1 -0
  74. package/lib/cjs-es6/mergeable-store.cjs.gz +0 -0
  75. package/lib/cjs-es6/metrics.cjs +1 -1
  76. package/lib/cjs-es6/metrics.cjs.gz +0 -0
  77. package/lib/cjs-es6/persisters/persister-automerge.cjs +1 -1
  78. package/lib/cjs-es6/persisters/persister-automerge.cjs.gz +0 -0
  79. package/lib/cjs-es6/persisters/persister-browser.cjs +1 -1
  80. package/lib/cjs-es6/persisters/persister-browser.cjs.gz +0 -0
  81. package/lib/cjs-es6/persisters/persister-cr-sqlite-wasm.cjs +1 -1
  82. package/lib/cjs-es6/persisters/persister-cr-sqlite-wasm.cjs.gz +0 -0
  83. package/lib/cjs-es6/persisters/persister-electric-sql.cjs +1 -1
  84. package/lib/cjs-es6/persisters/persister-electric-sql.cjs.gz +0 -0
  85. package/lib/cjs-es6/persisters/persister-expo-sqlite-next.cjs +1 -1
  86. package/lib/cjs-es6/persisters/persister-expo-sqlite-next.cjs.gz +0 -0
  87. package/lib/cjs-es6/persisters/persister-expo-sqlite.cjs +1 -1
  88. package/lib/cjs-es6/persisters/persister-expo-sqlite.cjs.gz +0 -0
  89. package/lib/cjs-es6/persisters/persister-file.cjs +1 -1
  90. package/lib/cjs-es6/persisters/persister-file.cjs.gz +0 -0
  91. package/lib/cjs-es6/persisters/persister-indexed-db.cjs +1 -1
  92. package/lib/cjs-es6/persisters/persister-indexed-db.cjs.gz +0 -0
  93. package/lib/cjs-es6/persisters/persister-libsql.cjs +1 -0
  94. package/lib/cjs-es6/persisters/persister-libsql.cjs.gz +0 -0
  95. package/lib/cjs-es6/persisters/persister-partykit-client.cjs +1 -1
  96. package/lib/cjs-es6/persisters/persister-partykit-client.cjs.gz +0 -0
  97. package/lib/cjs-es6/persisters/persister-partykit-server.cjs +1 -1
  98. package/lib/cjs-es6/persisters/persister-partykit-server.cjs.gz +0 -0
  99. package/lib/cjs-es6/persisters/persister-powersync.cjs +1 -0
  100. package/lib/cjs-es6/persisters/persister-powersync.cjs.gz +0 -0
  101. package/lib/cjs-es6/persisters/persister-remote.cjs +1 -1
  102. package/lib/cjs-es6/persisters/persister-remote.cjs.gz +0 -0
  103. package/lib/cjs-es6/persisters/persister-sqlite-wasm.cjs +1 -1
  104. package/lib/cjs-es6/persisters/persister-sqlite-wasm.cjs.gz +0 -0
  105. package/lib/cjs-es6/persisters/persister-sqlite3.cjs +1 -1
  106. package/lib/cjs-es6/persisters/persister-sqlite3.cjs.gz +0 -0
  107. package/lib/cjs-es6/persisters/persister-yjs.cjs +1 -1
  108. package/lib/cjs-es6/persisters/persister-yjs.cjs.gz +0 -0
  109. package/lib/cjs-es6/persisters.cjs +1 -1
  110. package/lib/cjs-es6/persisters.cjs.gz +0 -0
  111. package/lib/cjs-es6/queries.cjs +1 -1
  112. package/lib/cjs-es6/queries.cjs.gz +0 -0
  113. package/lib/cjs-es6/relationships.cjs +1 -1
  114. package/lib/cjs-es6/relationships.cjs.gz +0 -0
  115. package/lib/cjs-es6/store.cjs +1 -1
  116. package/lib/cjs-es6/store.cjs.gz +0 -0
  117. package/lib/cjs-es6/synchronizers/synchronizer-local.cjs +1 -0
  118. package/lib/cjs-es6/synchronizers/synchronizer-local.cjs.gz +0 -0
  119. package/lib/cjs-es6/synchronizers/synchronizer-ws-client.cjs +1 -0
  120. package/lib/cjs-es6/synchronizers/synchronizer-ws-client.cjs.gz +0 -0
  121. package/lib/cjs-es6/synchronizers/synchronizer-ws-server.cjs +1 -0
  122. package/lib/cjs-es6/synchronizers/synchronizer-ws-server.cjs.gz +0 -0
  123. package/lib/cjs-es6/synchronizers.cjs +1 -0
  124. package/lib/cjs-es6/synchronizers.cjs.gz +0 -0
  125. package/lib/cjs-es6/tinybase.cjs +1 -1
  126. package/lib/cjs-es6/tinybase.cjs.gz +0 -0
  127. package/lib/cjs-es6/tools.cjs +1 -1
  128. package/lib/cjs-es6/tools.cjs.gz +0 -0
  129. package/lib/cjs-es6/ui-react-dom-debug.cjs +1 -1
  130. package/lib/cjs-es6/ui-react-dom-debug.cjs.gz +0 -0
  131. package/lib/cjs-es6/ui-react-dom.cjs +1 -1
  132. package/lib/cjs-es6/ui-react-dom.cjs.gz +0 -0
  133. package/lib/cjs-es6/ui-react.cjs +1 -1
  134. package/lib/cjs-es6/ui-react.cjs.gz +0 -0
  135. package/lib/debug/checkpoints.js +3 -1
  136. package/lib/debug/indexes.js +3 -1
  137. package/lib/debug/mergeable-store.js +2230 -0
  138. package/lib/debug/metrics.js +3 -1
  139. package/lib/debug/persisters/persister-automerge.js +167 -131
  140. package/lib/debug/persisters/persister-browser.js +155 -102
  141. package/lib/debug/persisters/persister-cr-sqlite-wasm.js +225 -152
  142. package/lib/debug/persisters/persister-electric-sql.js +225 -152
  143. package/lib/debug/persisters/persister-expo-sqlite-next.js +225 -152
  144. package/lib/debug/persisters/persister-expo-sqlite.js +225 -152
  145. package/lib/debug/persisters/persister-file.js +149 -101
  146. package/lib/debug/persisters/persister-indexed-db.js +146 -100
  147. package/lib/debug/persisters/persister-libsql.js +924 -0
  148. package/lib/debug/persisters/persister-partykit-client.js +146 -104
  149. package/lib/debug/persisters/persister-partykit-server.js +17 -25
  150. package/lib/debug/persisters/persister-powersync.js +939 -0
  151. package/lib/debug/persisters/persister-remote.js +141 -97
  152. package/lib/debug/persisters/persister-sqlite-wasm.js +225 -152
  153. package/lib/debug/persisters/persister-sqlite3.js +225 -152
  154. package/lib/debug/persisters/persister-yjs.js +164 -127
  155. package/lib/debug/persisters.js +137 -94
  156. package/lib/debug/queries.js +9 -6
  157. package/lib/debug/relationships.js +3 -1
  158. package/lib/debug/store.js +147 -126
  159. package/lib/debug/synchronizers/synchronizer-local.js +571 -0
  160. package/lib/debug/synchronizers/synchronizer-ws-client.js +598 -0
  161. package/lib/debug/synchronizers/synchronizer-ws-server.js +241 -0
  162. package/lib/debug/synchronizers.js +531 -0
  163. package/lib/debug/tinybase.js +1080 -215
  164. package/lib/debug/tools.js +22 -21
  165. package/lib/debug/ui-react-dom.js +336 -258
  166. package/lib/debug/ui-react.js +55 -6
  167. package/lib/es6/checkpoints.js +1 -1
  168. package/lib/es6/checkpoints.js.gz +0 -0
  169. package/lib/es6/indexes.js +1 -1
  170. package/lib/es6/indexes.js.gz +0 -0
  171. package/lib/es6/mergeable-store.js +1 -0
  172. package/lib/es6/mergeable-store.js.gz +0 -0
  173. package/lib/es6/metrics.js +1 -1
  174. package/lib/es6/metrics.js.gz +0 -0
  175. package/lib/es6/persisters/persister-automerge.js +1 -1
  176. package/lib/es6/persisters/persister-automerge.js.gz +0 -0
  177. package/lib/es6/persisters/persister-browser.js +1 -1
  178. package/lib/es6/persisters/persister-browser.js.gz +0 -0
  179. package/lib/es6/persisters/persister-cr-sqlite-wasm.js +1 -1
  180. package/lib/es6/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  181. package/lib/es6/persisters/persister-electric-sql.js +1 -1
  182. package/lib/es6/persisters/persister-electric-sql.js.gz +0 -0
  183. package/lib/es6/persisters/persister-expo-sqlite-next.js +1 -1
  184. package/lib/es6/persisters/persister-expo-sqlite-next.js.gz +0 -0
  185. package/lib/es6/persisters/persister-expo-sqlite.js +1 -1
  186. package/lib/es6/persisters/persister-expo-sqlite.js.gz +0 -0
  187. package/lib/es6/persisters/persister-file.js +1 -1
  188. package/lib/es6/persisters/persister-file.js.gz +0 -0
  189. package/lib/es6/persisters/persister-indexed-db.js +1 -1
  190. package/lib/es6/persisters/persister-indexed-db.js.gz +0 -0
  191. package/lib/es6/persisters/persister-libsql.js +1 -0
  192. package/lib/es6/persisters/persister-libsql.js.gz +0 -0
  193. package/lib/es6/persisters/persister-partykit-client.js +1 -1
  194. package/lib/es6/persisters/persister-partykit-client.js.gz +0 -0
  195. package/lib/es6/persisters/persister-partykit-server.js +1 -1
  196. package/lib/es6/persisters/persister-partykit-server.js.gz +0 -0
  197. package/lib/es6/persisters/persister-powersync.js +1 -0
  198. package/lib/es6/persisters/persister-powersync.js.gz +0 -0
  199. package/lib/es6/persisters/persister-remote.js +1 -1
  200. package/lib/es6/persisters/persister-remote.js.gz +0 -0
  201. package/lib/es6/persisters/persister-sqlite-wasm.js +1 -1
  202. package/lib/es6/persisters/persister-sqlite-wasm.js.gz +0 -0
  203. package/lib/es6/persisters/persister-sqlite3.js +1 -1
  204. package/lib/es6/persisters/persister-sqlite3.js.gz +0 -0
  205. package/lib/es6/persisters/persister-yjs.js +1 -1
  206. package/lib/es6/persisters/persister-yjs.js.gz +0 -0
  207. package/lib/es6/persisters.js +1 -1
  208. package/lib/es6/persisters.js.gz +0 -0
  209. package/lib/es6/queries.js +1 -1
  210. package/lib/es6/queries.js.gz +0 -0
  211. package/lib/es6/relationships.js +1 -1
  212. package/lib/es6/relationships.js.gz +0 -0
  213. package/lib/es6/store.js +1 -1
  214. package/lib/es6/store.js.gz +0 -0
  215. package/lib/es6/synchronizers/synchronizer-local.js +1 -0
  216. package/lib/es6/synchronizers/synchronizer-local.js.gz +0 -0
  217. package/lib/es6/synchronizers/synchronizer-ws-client.js +1 -0
  218. package/lib/es6/synchronizers/synchronizer-ws-client.js.gz +0 -0
  219. package/lib/es6/synchronizers/synchronizer-ws-server.js +1 -0
  220. package/lib/es6/synchronizers/synchronizer-ws-server.js.gz +0 -0
  221. package/lib/es6/synchronizers.js +1 -0
  222. package/lib/es6/synchronizers.js.gz +0 -0
  223. package/lib/es6/tinybase.js +1 -1
  224. package/lib/es6/tinybase.js.gz +0 -0
  225. package/lib/es6/tools.js +1 -1
  226. package/lib/es6/tools.js.gz +0 -0
  227. package/lib/es6/ui-react-dom-debug.js +1 -1
  228. package/lib/es6/ui-react-dom-debug.js.gz +0 -0
  229. package/lib/es6/ui-react-dom.js +1 -1
  230. package/lib/es6/ui-react-dom.js.gz +0 -0
  231. package/lib/es6/ui-react.js +1 -1
  232. package/lib/es6/ui-react.js.gz +0 -0
  233. package/lib/indexes.js +1 -1
  234. package/lib/indexes.js.gz +0 -0
  235. package/lib/mergeable-store.js +1 -0
  236. package/lib/mergeable-store.js.gz +0 -0
  237. package/lib/metrics.js +1 -1
  238. package/lib/metrics.js.gz +0 -0
  239. package/lib/persisters/persister-automerge.js +1 -1
  240. package/lib/persisters/persister-automerge.js.gz +0 -0
  241. package/lib/persisters/persister-browser.js +1 -1
  242. package/lib/persisters/persister-browser.js.gz +0 -0
  243. package/lib/persisters/persister-cr-sqlite-wasm.js +1 -1
  244. package/lib/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  245. package/lib/persisters/persister-electric-sql.js +1 -1
  246. package/lib/persisters/persister-electric-sql.js.gz +0 -0
  247. package/lib/persisters/persister-expo-sqlite-next.js +1 -1
  248. package/lib/persisters/persister-expo-sqlite-next.js.gz +0 -0
  249. package/lib/persisters/persister-expo-sqlite.js +1 -1
  250. package/lib/persisters/persister-expo-sqlite.js.gz +0 -0
  251. package/lib/persisters/persister-file.js +1 -1
  252. package/lib/persisters/persister-file.js.gz +0 -0
  253. package/lib/persisters/persister-indexed-db.js +1 -1
  254. package/lib/persisters/persister-indexed-db.js.gz +0 -0
  255. package/lib/persisters/persister-libsql.js +1 -0
  256. package/lib/persisters/persister-libsql.js.gz +0 -0
  257. package/lib/persisters/persister-partykit-client.js +1 -1
  258. package/lib/persisters/persister-partykit-client.js.gz +0 -0
  259. package/lib/persisters/persister-partykit-server.js +1 -1
  260. package/lib/persisters/persister-partykit-server.js.gz +0 -0
  261. package/lib/persisters/persister-powersync.js +1 -0
  262. package/lib/persisters/persister-powersync.js.gz +0 -0
  263. package/lib/persisters/persister-remote.js +1 -1
  264. package/lib/persisters/persister-remote.js.gz +0 -0
  265. package/lib/persisters/persister-sqlite-wasm.js +1 -1
  266. package/lib/persisters/persister-sqlite-wasm.js.gz +0 -0
  267. package/lib/persisters/persister-sqlite3.js +1 -1
  268. package/lib/persisters/persister-sqlite3.js.gz +0 -0
  269. package/lib/persisters/persister-yjs.js +1 -1
  270. package/lib/persisters/persister-yjs.js.gz +0 -0
  271. package/lib/persisters.js +1 -1
  272. package/lib/persisters.js.gz +0 -0
  273. package/lib/queries.js +1 -1
  274. package/lib/queries.js.gz +0 -0
  275. package/lib/relationships.js +1 -1
  276. package/lib/relationships.js.gz +0 -0
  277. package/lib/store.js +1 -1
  278. package/lib/store.js.gz +0 -0
  279. package/lib/synchronizers/synchronizer-local.js +1 -0
  280. package/lib/synchronizers/synchronizer-local.js.gz +0 -0
  281. package/lib/synchronizers/synchronizer-ws-client.js +1 -0
  282. package/lib/synchronizers/synchronizer-ws-client.js.gz +0 -0
  283. package/lib/synchronizers/synchronizer-ws-server.js +1 -0
  284. package/lib/synchronizers/synchronizer-ws-server.js.gz +0 -0
  285. package/lib/synchronizers.js +1 -0
  286. package/lib/synchronizers.js.gz +0 -0
  287. package/lib/tinybase.js +1 -1
  288. package/lib/tinybase.js.gz +0 -0
  289. package/lib/tools.js +1 -1
  290. package/lib/tools.js.gz +0 -0
  291. package/lib/types/checkpoints.d.ts +2 -2
  292. package/lib/types/indexes.d.ts +2 -2
  293. package/lib/types/mergeable-store.d.ts +214 -0
  294. package/lib/types/metrics.d.ts +2 -2
  295. package/lib/types/persisters/persister-automerge.d.ts +11 -7
  296. package/lib/types/persisters/persister-browser.d.ts +13 -4
  297. package/lib/types/persisters/persister-cr-sqlite-wasm.d.ts +4 -0
  298. package/lib/types/persisters/persister-electric-sql.d.ts +4 -0
  299. package/lib/types/persisters/persister-expo-sqlite-next.d.ts +4 -0
  300. package/lib/types/persisters/persister-expo-sqlite.d.ts +4 -0
  301. package/lib/types/persisters/persister-file.d.ts +7 -2
  302. package/lib/types/persisters/persister-indexed-db.d.ts +4 -0
  303. package/lib/types/persisters/persister-libsql.d.ts +142 -0
  304. package/lib/types/persisters/persister-partykit-client.d.ts +4 -0
  305. package/lib/types/persisters/persister-partykit-server.d.ts +12 -8
  306. package/lib/types/persisters/persister-powersync.d.ts +157 -0
  307. package/lib/types/persisters/persister-remote.d.ts +4 -0
  308. package/lib/types/persisters/persister-sqlite-wasm.d.ts +4 -0
  309. package/lib/types/persisters/persister-sqlite3.d.ts +4 -0
  310. package/lib/types/persisters/persister-yjs.d.ts +6 -2
  311. package/lib/types/persisters.d.ts +162 -59
  312. package/lib/types/queries.d.ts +2 -2
  313. package/lib/types/relationships.d.ts +2 -2
  314. package/lib/types/store.d.ts +275 -187
  315. package/lib/types/synchronizers/synchronizer-local.d.ts +27 -0
  316. package/lib/types/synchronizers/synchronizer-ws-client.d.ts +35 -0
  317. package/lib/types/synchronizers/synchronizer-ws-server.d.ts +57 -0
  318. package/lib/types/synchronizers.d.ts +132 -0
  319. package/lib/types/tinybase.d.ts +10 -8
  320. package/lib/types/tools.d.ts +4 -4
  321. package/lib/types/ui-react.d.ts +160 -9
  322. package/lib/types/with-schemas/checkpoints.d.ts +2 -2
  323. package/lib/types/with-schemas/indexes.d.ts +2 -2
  324. package/lib/types/with-schemas/internal/store.d.ts +4 -0
  325. package/lib/types/with-schemas/mergeable-store.d.ts +492 -0
  326. package/lib/types/with-schemas/metrics.d.ts +2 -2
  327. package/lib/types/with-schemas/persisters/persister-automerge.d.ts +12 -8
  328. package/lib/types/with-schemas/persisters/persister-browser.d.ts +17 -8
  329. package/lib/types/with-schemas/persisters/persister-cr-sqlite-wasm.d.ts +5 -1
  330. package/lib/types/with-schemas/persisters/persister-electric-sql.d.ts +5 -1
  331. package/lib/types/with-schemas/persisters/persister-expo-sqlite-next.d.ts +5 -1
  332. package/lib/types/with-schemas/persisters/persister-expo-sqlite.d.ts +5 -1
  333. package/lib/types/with-schemas/persisters/persister-file.d.ts +9 -4
  334. package/lib/types/with-schemas/persisters/persister-indexed-db.d.ts +5 -1
  335. package/lib/types/with-schemas/persisters/persister-libsql.d.ts +155 -0
  336. package/lib/types/with-schemas/persisters/persister-partykit-client.d.ts +5 -1
  337. package/lib/types/with-schemas/persisters/persister-partykit-server.d.ts +15 -11
  338. package/lib/types/with-schemas/persisters/persister-powersync.d.ts +170 -0
  339. package/lib/types/with-schemas/persisters/persister-remote.d.ts +5 -1
  340. package/lib/types/with-schemas/persisters/persister-sqlite-wasm.d.ts +5 -1
  341. package/lib/types/with-schemas/persisters/persister-sqlite3.d.ts +5 -1
  342. package/lib/types/with-schemas/persisters/persister-yjs.d.ts +7 -3
  343. package/lib/types/with-schemas/persisters.d.ts +193 -121
  344. package/lib/types/with-schemas/queries.d.ts +3 -3
  345. package/lib/types/with-schemas/relationships.d.ts +2 -2
  346. package/lib/types/with-schemas/store.d.ts +483 -345
  347. package/lib/types/with-schemas/synchronizers/synchronizer-local.d.ts +29 -0
  348. package/lib/types/with-schemas/synchronizers/synchronizer-ws-client.d.ts +41 -0
  349. package/lib/types/with-schemas/synchronizers/synchronizer-ws-server.d.ts +57 -0
  350. package/lib/types/with-schemas/synchronizers.d.ts +146 -0
  351. package/lib/types/with-schemas/tinybase.d.ts +9 -8
  352. package/lib/types/with-schemas/tools.d.ts +4 -4
  353. package/lib/types/with-schemas/ui-react.d.ts +177 -9
  354. package/lib/ui-react-dom.js +1 -1
  355. package/lib/ui-react-dom.js.gz +0 -0
  356. package/lib/ui-react.js +1 -1
  357. package/lib/ui-react.js.gz +0 -0
  358. package/lib/umd/checkpoints.js +1 -1
  359. package/lib/umd/checkpoints.js.gz +0 -0
  360. package/lib/umd/indexes.js +1 -1
  361. package/lib/umd/indexes.js.gz +0 -0
  362. package/lib/umd/mergeable-store.js +1 -0
  363. package/lib/umd/mergeable-store.js.gz +0 -0
  364. package/lib/umd/metrics.js +1 -1
  365. package/lib/umd/metrics.js.gz +0 -0
  366. package/lib/umd/persisters/persister-automerge.js +1 -1
  367. package/lib/umd/persisters/persister-automerge.js.gz +0 -0
  368. package/lib/umd/persisters/persister-browser.js +1 -1
  369. package/lib/umd/persisters/persister-browser.js.gz +0 -0
  370. package/lib/umd/persisters/persister-cr-sqlite-wasm.js +1 -1
  371. package/lib/umd/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  372. package/lib/umd/persisters/persister-electric-sql.js +1 -1
  373. package/lib/umd/persisters/persister-electric-sql.js.gz +0 -0
  374. package/lib/umd/persisters/persister-expo-sqlite-next.js +1 -1
  375. package/lib/umd/persisters/persister-expo-sqlite-next.js.gz +0 -0
  376. package/lib/umd/persisters/persister-expo-sqlite.js +1 -1
  377. package/lib/umd/persisters/persister-expo-sqlite.js.gz +0 -0
  378. package/lib/umd/persisters/persister-file.js +1 -1
  379. package/lib/umd/persisters/persister-file.js.gz +0 -0
  380. package/lib/umd/persisters/persister-indexed-db.js +1 -1
  381. package/lib/umd/persisters/persister-indexed-db.js.gz +0 -0
  382. package/lib/umd/persisters/persister-libsql.js +1 -0
  383. package/lib/umd/persisters/persister-libsql.js.gz +0 -0
  384. package/lib/umd/persisters/persister-partykit-client.js +1 -1
  385. package/lib/umd/persisters/persister-partykit-client.js.gz +0 -0
  386. package/lib/umd/persisters/persister-partykit-server.js +1 -1
  387. package/lib/umd/persisters/persister-partykit-server.js.gz +0 -0
  388. package/lib/umd/persisters/persister-powersync.js +1 -0
  389. package/lib/umd/persisters/persister-powersync.js.gz +0 -0
  390. package/lib/umd/persisters/persister-remote.js +1 -1
  391. package/lib/umd/persisters/persister-remote.js.gz +0 -0
  392. package/lib/umd/persisters/persister-sqlite-wasm.js +1 -1
  393. package/lib/umd/persisters/persister-sqlite-wasm.js.gz +0 -0
  394. package/lib/umd/persisters/persister-sqlite3.js +1 -1
  395. package/lib/umd/persisters/persister-sqlite3.js.gz +0 -0
  396. package/lib/umd/persisters/persister-yjs.js +1 -1
  397. package/lib/umd/persisters/persister-yjs.js.gz +0 -0
  398. package/lib/umd/persisters.js +1 -1
  399. package/lib/umd/persisters.js.gz +0 -0
  400. package/lib/umd/queries.js +1 -1
  401. package/lib/umd/queries.js.gz +0 -0
  402. package/lib/umd/relationships.js +1 -1
  403. package/lib/umd/relationships.js.gz +0 -0
  404. package/lib/umd/store.js +1 -1
  405. package/lib/umd/store.js.gz +0 -0
  406. package/lib/umd/synchronizers/synchronizer-local.js +1 -0
  407. package/lib/umd/synchronizers/synchronizer-local.js.gz +0 -0
  408. package/lib/umd/synchronizers/synchronizer-ws-client.js +1 -0
  409. package/lib/umd/synchronizers/synchronizer-ws-client.js.gz +0 -0
  410. package/lib/umd/synchronizers/synchronizer-ws-server.js +1 -0
  411. package/lib/umd/synchronizers/synchronizer-ws-server.js.gz +0 -0
  412. package/lib/umd/synchronizers.js +1 -0
  413. package/lib/umd/synchronizers.js.gz +0 -0
  414. package/lib/umd/tinybase.js +1 -1
  415. package/lib/umd/tinybase.js.gz +0 -0
  416. package/lib/umd/tools.js +1 -1
  417. package/lib/umd/tools.js.gz +0 -0
  418. package/lib/umd/ui-react-dom-debug.js +1 -1
  419. package/lib/umd/ui-react-dom-debug.js.gz +0 -0
  420. package/lib/umd/ui-react-dom.js +1 -1
  421. package/lib/umd/ui-react-dom.js.gz +0 -0
  422. package/lib/umd/ui-react.js +1 -1
  423. package/lib/umd/ui-react.js.gz +0 -0
  424. package/lib/umd-es6/checkpoints.js +1 -1
  425. package/lib/umd-es6/checkpoints.js.gz +0 -0
  426. package/lib/umd-es6/indexes.js +1 -1
  427. package/lib/umd-es6/indexes.js.gz +0 -0
  428. package/lib/umd-es6/mergeable-store.js +1 -0
  429. package/lib/umd-es6/mergeable-store.js.gz +0 -0
  430. package/lib/umd-es6/metrics.js +1 -1
  431. package/lib/umd-es6/metrics.js.gz +0 -0
  432. package/lib/umd-es6/persisters/persister-automerge.js +1 -1
  433. package/lib/umd-es6/persisters/persister-automerge.js.gz +0 -0
  434. package/lib/umd-es6/persisters/persister-browser.js +1 -1
  435. package/lib/umd-es6/persisters/persister-browser.js.gz +0 -0
  436. package/lib/umd-es6/persisters/persister-cr-sqlite-wasm.js +1 -1
  437. package/lib/umd-es6/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  438. package/lib/umd-es6/persisters/persister-electric-sql.js +1 -1
  439. package/lib/umd-es6/persisters/persister-electric-sql.js.gz +0 -0
  440. package/lib/umd-es6/persisters/persister-expo-sqlite-next.js +1 -1
  441. package/lib/umd-es6/persisters/persister-expo-sqlite-next.js.gz +0 -0
  442. package/lib/umd-es6/persisters/persister-expo-sqlite.js +1 -1
  443. package/lib/umd-es6/persisters/persister-expo-sqlite.js.gz +0 -0
  444. package/lib/umd-es6/persisters/persister-file.js +1 -1
  445. package/lib/umd-es6/persisters/persister-file.js.gz +0 -0
  446. package/lib/umd-es6/persisters/persister-indexed-db.js +1 -1
  447. package/lib/umd-es6/persisters/persister-indexed-db.js.gz +0 -0
  448. package/lib/umd-es6/persisters/persister-libsql.js +1 -0
  449. package/lib/umd-es6/persisters/persister-libsql.js.gz +0 -0
  450. package/lib/umd-es6/persisters/persister-partykit-client.js +1 -1
  451. package/lib/umd-es6/persisters/persister-partykit-client.js.gz +0 -0
  452. package/lib/umd-es6/persisters/persister-partykit-server.js +1 -1
  453. package/lib/umd-es6/persisters/persister-partykit-server.js.gz +0 -0
  454. package/lib/umd-es6/persisters/persister-powersync.js +1 -0
  455. package/lib/umd-es6/persisters/persister-powersync.js.gz +0 -0
  456. package/lib/umd-es6/persisters/persister-remote.js +1 -1
  457. package/lib/umd-es6/persisters/persister-remote.js.gz +0 -0
  458. package/lib/umd-es6/persisters/persister-sqlite-wasm.js +1 -1
  459. package/lib/umd-es6/persisters/persister-sqlite-wasm.js.gz +0 -0
  460. package/lib/umd-es6/persisters/persister-sqlite3.js +1 -1
  461. package/lib/umd-es6/persisters/persister-sqlite3.js.gz +0 -0
  462. package/lib/umd-es6/persisters/persister-yjs.js +1 -1
  463. package/lib/umd-es6/persisters/persister-yjs.js.gz +0 -0
  464. package/lib/umd-es6/persisters.js +1 -1
  465. package/lib/umd-es6/persisters.js.gz +0 -0
  466. package/lib/umd-es6/queries.js +1 -1
  467. package/lib/umd-es6/queries.js.gz +0 -0
  468. package/lib/umd-es6/relationships.js +1 -1
  469. package/lib/umd-es6/relationships.js.gz +0 -0
  470. package/lib/umd-es6/store.js +1 -1
  471. package/lib/umd-es6/store.js.gz +0 -0
  472. package/lib/umd-es6/synchronizers/synchronizer-local.js +1 -0
  473. package/lib/umd-es6/synchronizers/synchronizer-local.js.gz +0 -0
  474. package/lib/umd-es6/synchronizers/synchronizer-ws-client.js +1 -0
  475. package/lib/umd-es6/synchronizers/synchronizer-ws-client.js.gz +0 -0
  476. package/lib/umd-es6/synchronizers/synchronizer-ws-server.js +1 -0
  477. package/lib/umd-es6/synchronizers/synchronizer-ws-server.js.gz +0 -0
  478. package/lib/umd-es6/synchronizers.js +1 -0
  479. package/lib/umd-es6/synchronizers.js.gz +0 -0
  480. package/lib/umd-es6/tinybase.js +1 -1
  481. package/lib/umd-es6/tinybase.js.gz +0 -0
  482. package/lib/umd-es6/tools.js +1 -1
  483. package/lib/umd-es6/tools.js.gz +0 -0
  484. package/lib/umd-es6/ui-react-dom-debug.js +1 -1
  485. package/lib/umd-es6/ui-react-dom-debug.js.gz +0 -0
  486. package/lib/umd-es6/ui-react-dom.js +1 -1
  487. package/lib/umd-es6/ui-react-dom.js.gz +0 -0
  488. package/lib/umd-es6/ui-react.js +1 -1
  489. package/lib/umd-es6/ui-react.js.gz +0 -0
  490. package/package.json +65 -45
  491. package/readme.md +2 -2
@@ -0,0 +1,29 @@
1
+ /**
2
+ * The synchronizer-local module of the TinyBase project lets you synchronize
3
+ * MergeableStore data to and from other MergeableStore instances on the same
4
+ * local machine.
5
+ * @see Synchronizing Data guide
6
+ * @packageDocumentation
7
+ * @module synchronizer-local
8
+ * @since v5.0.0
9
+ */
10
+
11
+ import {MergeableStore} from '../mergeable-store';
12
+ import {OptionalSchemas} from '../store';
13
+ import {Synchronizer} from '../synchronizers';
14
+
15
+ /**
16
+ * The LocalSynchronizer interface
17
+ * @category Synchronizer
18
+ */
19
+ export interface LocalSynchronizer<Schemas extends OptionalSchemas>
20
+ extends Synchronizer<Schemas> {}
21
+
22
+ /**
23
+ * The createLocalSynchronizer function
24
+ * @category Creation
25
+ */
26
+ export function createLocalSynchronizer<Schemas extends OptionalSchemas>(
27
+ store: MergeableStore<Schemas>,
28
+ onIgnoredError?: (error: any) => void,
29
+ ): LocalSynchronizer<Schemas>;
@@ -0,0 +1,41 @@
1
+ /**
2
+ * The synchronizer-ws module of the TinyBase project lets you synchronize
3
+ * MergeableStore data to and from other MergeableStore instances via WebSockets
4
+ * facilitated by a server.
5
+ * @see Synchronizing Data guide
6
+ * @packageDocumentation
7
+ * @module synchronizer-ws-client
8
+ * @since v5.0.0
9
+ */
10
+
11
+ import {MergeableStore} from '../mergeable-store';
12
+ import {OptionalSchemas} from '../store';
13
+ import {Synchronizer} from '../synchronizers';
14
+ import {WebSocket as WsWebSocket} from 'ws';
15
+
16
+ export type WebSocketTypes = WebSocket | WsWebSocket;
17
+
18
+ /**
19
+ * The WsSynchronizer interface
20
+ * @category Synchronizer
21
+ */
22
+ export interface WsSynchronizer<
23
+ Schemas extends OptionalSchemas,
24
+ WebSocketType extends WebSocketTypes,
25
+ > extends Synchronizer<Schemas> {
26
+ getWebSocket(): WebSocketType;
27
+ }
28
+
29
+ /**
30
+ * The createWsSynchronizer function
31
+ * @category Creation
32
+ */
33
+ export function createWsSynchronizer<
34
+ Schemas extends OptionalSchemas,
35
+ WebSocketType extends WebSocketTypes,
36
+ >(
37
+ store: MergeableStore<Schemas>,
38
+ webSocket: WebSocketType,
39
+ requestTimeoutSeconds?: number,
40
+ onIgnoredError?: (error: any) => void,
41
+ ): Promise<WsSynchronizer<Schemas, WebSocketType>>;
@@ -0,0 +1,57 @@
1
+ /**
2
+ * The synchronizer-ws-server module of the TinyBase project lets you create
3
+ * a server that facilitates synchronization between clients.
4
+ * @see Synchronizing Data guide
5
+ * @packageDocumentation
6
+ * @module synchronizer-ws-server
7
+ * @since v5.0.0
8
+ */
9
+
10
+ import {Id, IdOrNull, Ids} from '../common';
11
+ import {GetIdChanges} from '../store';
12
+ import {WebSocketServer} from 'ws';
13
+
14
+ /**
15
+ * The PathIdsListener type
16
+ */
17
+ export type PathIdsListener<> = (
18
+ wsServer: WsServer,
19
+ getIdChanges: GetIdChanges<Id>,
20
+ ) => void;
21
+
22
+ /**
23
+ * The ClientIdsListener type
24
+ */
25
+ export type ClientIdsListener<> = (
26
+ wsServer: WsServer,
27
+ pathId: Id,
28
+ getIdChanges: GetIdChanges<Id>,
29
+ ) => void;
30
+
31
+ /**
32
+ * The WsServerStats type
33
+ */
34
+ export type WsServerStats = {
35
+ paths?: number;
36
+ clients?: number;
37
+ };
38
+
39
+ /**
40
+ * The WsServer interface
41
+ */
42
+ export interface WsServer {
43
+ getWebSocketServer: () => WebSocketServer;
44
+ getPathIds: () => Ids;
45
+ getClientIds: (pathId: Id) => Ids;
46
+ addPathIdsListener: (listener: PathIdsListener) => Id;
47
+ addClientIdsListener: (pathId: IdOrNull, listener: ClientIdsListener) => Id;
48
+ delListener(listenerId: Id): WsServer;
49
+ getStats: () => WsServerStats;
50
+ destroy: () => void;
51
+ }
52
+
53
+ /**
54
+ * The createWsServer function
55
+ * @category Creation
56
+ */
57
+ export function createWsServer(WebSocketServer: WebSocketServer): WsServer;
@@ -0,0 +1,146 @@
1
+ /**
2
+ * The persister-sync module of the TinyBase project lets you synchronize
3
+ * MergeableStore data to and from other MergeableStore instances.
4
+ * @see Synchronizing Data guide
5
+ * @packageDocumentation
6
+ * @module synchronizers
7
+ * @since v5.0.0
8
+ */
9
+
10
+ import {Content, OptionalSchemas} from './store';
11
+ import {Id, IdOrNull} from './common';
12
+ import {MergeableStore} from './mergeable-store';
13
+ import {Persister} from './persisters';
14
+
15
+ /**
16
+ * The MessageType type
17
+ * @category Synchronization
18
+ */
19
+ export type MessageType = number;
20
+
21
+ /**
22
+ * The Receive type
23
+ * @category Synchronization
24
+ */
25
+ export type Receive = (
26
+ fromClientId: Id,
27
+ requestId: Id,
28
+ messageType: MessageType,
29
+ messageBody: any,
30
+ ) => void;
31
+
32
+ /**
33
+ * The Send type
34
+ * @category Synchronization
35
+ */
36
+ export type Send = (
37
+ toClientId: IdOrNull,
38
+ requestId: Id,
39
+ messageType: MessageType,
40
+ messageBody: any,
41
+ ) => void;
42
+
43
+ /**
44
+ * The SynchronizerStats type
45
+ * @category Development
46
+ */
47
+ export type SynchronizerStats = {
48
+ sends?: number;
49
+ receives?: number;
50
+ };
51
+
52
+ /**
53
+ * The Synchronizer interface is a minor extension to the Persister interface.
54
+ *
55
+ * It provides extra convenience methods for starting and stopping the
56
+ * synchronization.
57
+ *
58
+ * You should use the createCustomSynchronizer function to create a Synchronizer
59
+ * object.
60
+ * @category Synchronizer
61
+ * @since v5.0.0
62
+ */
63
+ export interface Synchronizer<Schemas extends OptionalSchemas>
64
+ extends Persister<Schemas, 2> {
65
+ /**
66
+ * The startSync method
67
+ * @category Synchronization
68
+ */
69
+ startSync(initialContent?: Content<Schemas, true>): Promise<this>;
70
+ /**
71
+ * The stopSync method
72
+ * @category Synchronization
73
+ */
74
+ stopSync(): this;
75
+ /**
76
+ * The getSynchronizerStats method
77
+ * @category Synchronization
78
+ */
79
+ getSynchronizerStats(): SynchronizerStats;
80
+ }
81
+
82
+ /**
83
+ * The createCustomSynchronizer function creates a Synchronizer object that can
84
+ * persist one MergeableStore to another.
85
+ *
86
+ * This has schema-based typing. The following is a simplified representation:
87
+ *
88
+ * ```ts override
89
+ * createCustomSynchronizer(
90
+ * store: MergeableStore,
91
+ * send: Send,
92
+ * onReceive: (receive: Receive) => void,
93
+ * destroy: () => void,
94
+ * requestTimeoutSeconds: number,
95
+ * onIgnoredError?: (error: any) => void,
96
+ * ): Synchronizer;
97
+ * ```
98
+ *
99
+ * As well as providing a reference to the MergeableStore to synchronize, you
100
+ * must provide a `client` parameter which identifies the Client that is used to
101
+ * transmit changes to and from this MergeableStore and its peers.
102
+ * @param store The MergeableStore to synchronize.
103
+ * @param client The reference of the Client.
104
+ * @param requestTimeoutSeconds An optional number of seconds before a request
105
+ * to the Client times out, defaulting to 5.
106
+ * @param onIgnoredError An optional handler for the errors that the
107
+ * Synchronizer would otherwise ignore when trying to save or load data. This is
108
+ * suitable for debugging synchronization issues in a development environment.
109
+ * @returns A reference to the new Synchronizer object.
110
+ * @example
111
+ * This example creates a Synchronizer object and synchronizes one
112
+ * MergeableStore to another.
113
+ *
114
+ * ```js
115
+ * const store1 = createMergeableStore('store1').setTables({
116
+ * pets: {fido: {species: 'dog'}},
117
+ * });
118
+ * const synchronizer1 = createLocalSynchronizer(store1);
119
+ *
120
+ * const store2 = createMergeableStore('store2');
121
+ * const synchronizer2 = createLocalSynchronizer(store2);
122
+ * await synchronizer2.startSync();
123
+ *
124
+ * await synchronizer1.save();
125
+ * // ...
126
+ * // Store2 will be synced with Store1.
127
+ *
128
+ * console.log(store2.getTables());
129
+ * // -> {pets: {fido: {species: 'dog'}}}
130
+ *
131
+ * await synchronizer1.load();
132
+ * // Store1 will be synced with Store2.
133
+ *
134
+ * synchronizer1.destroy();
135
+ * synchronizer2.destroy();
136
+ * ```
137
+ * @category Creation
138
+ */
139
+ export function createCustomSynchronizer<Schemas extends OptionalSchemas>(
140
+ store: MergeableStore<Schemas>,
141
+ send: Send,
142
+ onReceive: (receive: Receive) => void,
143
+ destroy: () => void,
144
+ requestTimeoutSeconds: number,
145
+ onIgnoredError?: (error: any) => void,
146
+ ): Synchronizer<Schemas>;
@@ -3,11 +3,12 @@
3
3
  * @packageDocumentation
4
4
  */
5
5
 
6
- export * from './checkpoints.d';
7
- export * from './common.d';
8
- export * from './indexes.d';
9
- export * from './metrics.d';
10
- export * from './persisters.d';
11
- export * from './queries.d';
12
- export * from './relationships.d';
13
- export * from './store.d';
6
+ export * from './checkpoints.d.ts';
7
+ export * from './common.d.ts';
8
+ export * from './indexes.d.ts';
9
+ export * from './metrics.d.ts';
10
+ export * from './persisters.d.ts';
11
+ export * from './queries.d.ts';
12
+ export * from './relationships.d.ts';
13
+ export * from './mergeable-store.d.ts';
14
+ export * from './store.d.ts';
@@ -9,8 +9,8 @@
9
9
  * @since v2.2.0
10
10
  */
11
11
 
12
- import {OptionalSchemas, Store} from './store.d';
13
- import {Id} from './common.d';
12
+ import {OptionalSchemas, Store} from './store.d.ts';
13
+ import {Id} from './common.d.ts';
14
14
 
15
15
  /**
16
16
  * The StoreStats type describes a set of statistics about the Store, and
@@ -416,7 +416,7 @@ export interface Tools<in out Schemas extends OptionalSchemas> {
416
416
  * await createTools(store).getPrettyStoreApi('shop');
417
417
  *
418
418
  * const dTsLines = dTs.split('\n');
419
- * console.log(dTsLines[17]);
419
+ * console.log(dTsLines[15]);
420
420
  * // -> `export type Tables = {pets?: {[rowId: Id]: {price?: number}}};`
421
421
  *
422
422
  * const tsLines = ts.split('\n');
@@ -436,7 +436,7 @@ export interface Tools<in out Schemas extends OptionalSchemas> {
436
436
  * await createTools(store).getPrettyStoreApi('shop');
437
437
  *
438
438
  * const dTsLines = dTs.split('\n');
439
- * console.log(dTsLines[17]);
439
+ * console.log(dTsLines[15]);
440
440
  * // -> 'export type Tables = {pets?: {[rowId: Id]: {price: number}}};'
441
441
  *
442
442
  * const tsLines = ts.split('\n');
@@ -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
  /**
@@ -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.
@@ -11628,8 +11638,8 @@ export type WithSchemas<Schemas extends OptionalSchemas> = {
11628
11638
  * // -> '<span>{\"pets\":{\"fido\":{\"species\":\"dog\"}}}</span>'
11629
11639
  *
11630
11640
  * root.render(<App sessionKey="cujoStore" />); // !act
11631
- * // -> 'Persister destroyed for session key fidoStore'
11632
11641
  * // -> 'Persister created for session key cujoStore'
11642
+ * // -> 'Persister destroyed for session key fidoStore'
11633
11643
  *
11634
11644
  * // ... // !act
11635
11645
  * console.log(app.innerHTML);
@@ -11652,6 +11662,164 @@ export type WithSchemas<Schemas extends OptionalSchemas> = {
11652
11662
  destroyDeps?: React.DependencyList,
11653
11663
  ) => PersisterOrUndefined;
11654
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
+
11655
11823
  /**
11656
11824
  * The ExtraProps type represents a set of arbitrary additional props.
11657
11825
  * @category Props
@@ -1 +1 @@
1
- import e from"react";import{useRowIds as t,useTableCellIds as l,useRowCount as a,useSortedRowIds as n,useValueIds as o,ValueView as r,useIndexesOrIndexesById as i,useSliceRowIds as s,useRelationshipsOrRelationshipsById as d,useResultRowIds as m,useResultTableCellIds as h,useResultRowCount as u,useResultSortedRowIds as c,useCell as g,useSetCellCallback as p,useStoreOrStoreById as b,useValue as f,useSetValueCallback as w,useRemoteRowId as y,CellView as k,ResultCellView as v}from"./ui-react";const C=e=>typeof e,x=C(""),I=C(!0),N=C(0),z="Value",$="currentTarget",T="value",M=isFinite,S=e=>null==e,{PureComponent:R,Fragment:q,createElement:F,useCallback:P,useLayoutEffect:E,useRef:O,useState:V}=e,j=(e,...t)=>S(e)?{}:e(...t),A=(e,t)=>e.map(t),B=Object,L=B.entries,D=(e=[])=>B.fromEntries(e),G=(e,t)=>A(L(e),(([e,l])=>t(l,e))),H="tinybaseStoreInspector",J="M20 80l5-15l40-40l10 10l-40 40l-15 5m5-15l10 10",K='content:url("',Q=K+"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100' stroke-width='4' stroke='white' fill='none'>",U='</svg>")',W=K+"data:image/svg+xml,%3csvg viewBox='0 0 680 680' xmlns='http://www.w3.org/2000/svg' style='width:680px%3bheight:680px'%3e %3cpath stroke='white' stroke-width='80' fill='none' d='M340 617a84 241 90 11.01 0zM131 475a94 254 70 10428-124 114 286 70 01-428 124zm0-140a94 254 70 10428-124 114 286 70 01-428 124zm-12-127a94 254 70 00306 38 90 260 90 01-306-38zm221 3a74 241 90 11.01 0z' /%3e %3cpath fill='%23d81b60' d='M131 475a94 254 70 10428-124 114 286 70 01-428 124zm0-140a94 254 70 10428-124 114 286 70 01-428 124z' /%3e %3cpath d='M249 619a94 240 90 00308-128 114 289 70 01-308 128zM119 208a94 254 70 00306 38 90 260 90 01-306-38zm221 3a74 241 90 11.01 0z' /%3e%3c/svg%3e\")",X=A([[20,20,20,60],[20,20,60,20],[20,60,60,20],[60,20,20,60],[30,30,40,40]],(([e,t,l,a])=>Q+`<rect x='20' y='20' width='60' height='60' fill='grey'/><rect x='${e}' y='${t}' width='${l}' height='${a}' fill='white'/>`+U)),Y=Q+"<path d='M20 20l60 60M20 80l60-60' />"+U,Z=Q+`<path d='${J}' />`+U,_=Q+`<path d='${J}M20 20l60 60' />`+U,ee="*::-webkit-scrollbar";((e,t="")=>{e.join(t)})(G({"":"all:initial;font-family:sans-serif;font-size:0.75rem;position:fixed;z-index:999999","*":"all:revert","*::before":"all:revert","*::after":"all:revert",[ee]:"width:0.5rem;height:0.5rem;",[ee+"-track"]:"background:#111",[ee+"-thumb"]:"background:#999;border:1px solid #111",[ee+"-thumb:hover"]:"background:#fff",[ee+"-corner"]:"background:#111",img:"width:1rem;height:1rem;background:#111;border:0;vertical-align:text-bottom",">img":"padding:0.25rem;bottom:0;right:0;position:fixed;"+W,...D(A(["bottom:0;left:0","top:0;right:0"],((e,t)=>[`>img[data-position='${t}']`,e]))),main:"display:flex;flex-direction:column;background:#111d;color:#fff;position:fixed;",...D(A(["bottom:0;left:0;width:35vw;height:100vh","top:0;right:0;width:100vw;height:30vh","bottom:0;left:0;width:100vw;height:30vh","top:0;right:0;width:35vw;height:100vh","top:0;right:0;width:100vw;height:100vh"],((e,t)=>[`main[data-position='${t}']`,e]))),header:"display:flex;padding:0.25rem;background:#000;align-items:center","header>img:nth-of-type(1)":W,"header>img:nth-of-type(6)":Y,...D(A(X,((e,t)=>[`header>img[data-id='${t}']`,e]))),"header>span":"flex:1;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;margin-left:0.25rem",article:"padding:0.25rem 0.25rem 0.25rem 0.5rem;overflow:auto;flex:1",details:"margin-left:0.75rem;width:fit-content;","details img":"display:none","details[open]>summary img":"display:unset;background:none;margin-left:0.25rem","details[open]>summary img.edit":Z,"details[open]>summary img.done":_,summary:"margin-left:-0.75rem;line-height:1.25rem;user-select:none;width:fit-content",table:"border-collapse:collapse;table-layout:fixed;margin-bottom:0.5rem","table input":"background:#111;color:unset;padding:0 0.25rem;border:0;font-size:unset;vertical-align:top;margin:0",'table input[type="number"]':"width:4rem","table tbody button":"font-size:0;background:#fff;border-radius:50%;margin:0 0.125rem 0 0;width:0.85rem;color:#111","table button:first-letter":"font-size:0.75rem",thead:"background:#222","th:nth-of-type(1)":"min-width:2rem;","th.sorted":"background:#000","table caption":"text-align:left;white-space:nowrap;line-height:1.25rem",button:"width:1.5rem;border:none;background:none;color:#fff;padding:0","button[disabled]":"color:#777","button.next":"margin-right:0.5rem",[`th,#${H} td`]:"overflow:hidden;text-overflow:ellipsis;padding:0.25rem 0.5rem;max-width:12rem;white-space:nowrap;border-width:1px 0;border-style:solid;border-color:#777;text-align:left","span.warn":"margin:0.25rem;color:#d81b60"},((e,t)=>e?`#${H} ${t}{${e}}`:"")));const te=(e,t,l,a)=>e==x?t:e==N?l:a,{useCallback:le,useMemo:ae,useState:ne}=e,oe="editable",re=(e,t)=>A(l(e,t),(t=>e+"."+t)),ie=(e,t,l)=>{const a=le(e,t);return l?a:void 0},se=(...e)=>ae((()=>e),e),de=(e,t)=>ae((()=>({store:e,tableId:t})),[e,t]),me=(e,t)=>ae((()=>({queries:e,queryId:t})),[e,t]),he=(e,t=!1,l,a=0,n,o,r,i)=>{const[[s,d,m],h]=ne([e,t,a]),u=le((e=>{h(e),i?.(e)}),[i]),c=ie((e=>u([e,e==s&&!d,m])),[u,s,d,m],l),g=le((e=>u([s,d,e])),[u,s,d]),p=!0===r?ze:r;return[[s,d,m],c,ae((()=>!1===r?null:F(p,{offset:m,limit:n,total:o,onChange:g})),[r,p,m,n,o,g])]},ue=(e,t,l)=>ae((()=>{const a=t??e;return D(G(Array.isArray(a)?D(A(a,(e=>[e,e]))):a,((e,t)=>{return[t,{label:t,component:l,...(a=e,C(a)==x?{label:e}:e)}];var a})))}),[t,l,e]),ce=({className:e,headerRow:t,idColumn:l,params:[a,n,o,r,i,s]})=>F("table",{className:e},s?F("caption",null,s):null,!1===t?null:F("thead",null,F("tr",null,!1===l?null:F(ge,{sort:r??[],label:"Id",onClick:i}),G(a,(({label:e},t)=>F(ge,{key:t,cellId:t,label:e,sort:r??[],onClick:i}))))),F("tbody",null,A(o,(e=>F("tr",{key:e},!1===l?null:F("th",null,e),G(a,(({component:t,getComponentProps:l},a)=>F("td",{key:a},F(t,{...j(l,e,a),...n,rowId:e,cellId:a}))))))))),ge=({cellId:e,sort:[t,l],label:a=e??"",onClick:n})=>F("th",{onClick:ie((()=>n?.(e)),[n,e],n),className:S(l)||t!=e?void 0:`sorted ${l?"de":"a"}scending`},S(l)||t!=e?null:(l?"↓":"↑")+" ",a),pe=({localRowId:t,params:[l,a,n,o,r,i,s]})=>{const d=y(r,t,i);return F("tr",null,!1===l?null:F(e.Fragment,null,F("th",null,t),F("th",null,d)),G(a,(({component:e,getComponentProps:l},a)=>{const[r,i]=a.split(".",2),m=r===n?t:r===o?d:null;return S(m)?null:F("td",{key:a},F(e,{...j(l,m,i),store:s,tableId:r,rowId:m,cellId:i}))})))},be=({thing:e,onThingChange:t,className:l,hasSchema:a,showType:n=!0})=>{const[o,r]=ne(),[i,s]=ne(),[d,m]=ne(),[h,u]=ne(),[c,g]=ne();i!==e&&(r((e=>{const t=C(e);return(e=>e==x||e==I)(t)||t==N&&M(e)?t:void 0})(e)),s(e),m(e+""),u(Number(e)||0),g(!!e));const p=le(((e,l)=>{l(e),s(e),t(e)}),[t]),b=le((()=>{if(!a?.()){const e=te(o,N,I,x),l=te(e,d,h,c);r(e),s(l),t(l)}}),[a,t,d,h,c,o]);return F("div",{className:l},n?F("button",{className:o,onClick:b},o):null,te(o,F("input",{key:o,value:d,onChange:le((e=>p(e[$][T]+"",m)),[p])}),F("input",{key:o,type:"number",value:h,onChange:le((e=>p(Number(e[$][T]||0),u)),[p])}),F("input",{key:o,type:"checkbox",checked:c,onChange:le((e=>p(!!e[$].checked,g)),[p])})))},fe=({tableId:e,store:a,editable:n,customCells:o,...r})=>F(ce,{...r,params:se(ue(l(e,a),o,n?Ie:k),de(a,e),t(e,a))}),we=({tableId:e,cellId:t,descending:o,offset:r,limit:i,store:s,editable:d,sortOnClick:m,paginator:h=!1,onChange:u,customCells:c,...g})=>{const[p,b,f]=he(t,o,m,r,i,a(e,s),h,u);return F(ce,{...g,params:se(ue(l(e,s),c,d?Ie:k),de(s,e),n(e,...p,i,s),p,b,f)})},ye=({store:e,editable:t=!1,valueComponent:l=(t?Ne:r),getValueComponentProps:a,className:n,headerRow:i,idColumn:s})=>F("table",{className:n},!1===i?null:F("thead",null,F("tr",null,!1===s?null:F("th",null,"Id"),F("th",null,z))),F("tbody",null,A(o(e),(t=>F("tr",{key:t},!1===s?null:F("th",null,t),F("td",null,F(l,{...j(a,t),valueId:t,store:e}))))))),ke=({indexId:e,sliceId:t,indexes:a,editable:n,customCells:o,...r})=>{const[d,m,h]=((e,t)=>[e,e?.getStore(),e?.getTableId(t)])(i(a),e);return F(ce,{...r,params:se(ue(l(h,m),o,n?Ie:k),de(m,h),s(e,t,d))})},ve=({relationshipId:l,relationships:a,editable:n,customCells:o,className:r,headerRow:i,idColumn:s=!0})=>{const[m,h,u,c]=((e,t)=>[e,e?.getStore(),e?.getLocalTableId(t),e?.getRemoteTableId(t)])(d(a),l),g=ue([...re(u,h),...re(c,h)],o,n?Ie:k),p=se(s,g,u,c,l,m,h);return F("table",{className:r},!1===i?null:F("thead",null,F("tr",null,!1===s?null:F(e.Fragment,null,F("th",null,u,".Id"),F("th",null,c,".Id")),G(g,(({label:e},t)=>F("th",{key:t},e))))),F("tbody",null,A(t(u,h),(e=>F(pe,{key:e,localRowId:e,params:p})))))},Ce=({queryId:e,queries:t,customCells:l,...a})=>F(ce,{...a,params:se(ue(h(e,t),l,v),me(t,e),m(e,t))}),xe=({queryId:e,cellId:t,descending:l,offset:a,limit:n,queries:o,sortOnClick:r,paginator:i=!1,customCells:s,onChange:d,...m})=>{const[g,p,b]=he(t,l,r,a,n,u(e,o),i,d);return F(ce,{...m,params:se(ue(h(e,o),s,v),me(o,e),c(e,...g,n,o),g,p,b)})},Ie=({tableId:e,rowId:t,cellId:l,store:a,className:n,showType:o})=>F(be,{thing:g(e,t,l,a),onThingChange:p(e,t,l,(e=>e),[],a),className:n??oe+"Cell",showType:o,hasSchema:b(a)?.hasTablesSchema}),Ne=({valueId:e,store:t,className:l,showType:a})=>F(be,{thing:f(e,t),onThingChange:w(e,(e=>e),[],t),className:l??oe+z,showType:a,hasSchema:b(t)?.hasValuesSchema}),ze=({onChange:t,total:l,offset:a=0,limit:n=l,singular:o="row",plural:r=o+"s"})=>{(a>l||a<0)&&(a=0,t(0));const i=ie((()=>t(a-n)),[t,a,n],a>0),s=ie((()=>t(a+n)),[t,a,n],a+n<l);return F(e.Fragment,null,l>n&&F(e.Fragment,null,F("button",{className:"previous",disabled:0==a,onClick:i},"←"),F("button",{className:"next",disabled:a+n>=l,onClick:s},"→"),a+1," to ",Math.min(l,a+n)," of "),l," ",1!=l?r:o)},$e=e=>new Map(e);$e(),$e();const Te=e=>null;export{Ie as EditableCellView,Ne as EditableValueView,ve as RelationshipInHtmlTable,xe as ResultSortedTableInHtmlTable,Ce as ResultTableInHtmlTable,ke as SliceInHtmlTable,we as SortedTableInHtmlTable,ze as SortedTablePaginator,Te as StoreInspector,fe as TableInHtmlTable,ye as ValuesInHtmlTable};
1
+ import e from"react";import{useRowIds as t,useTableCellIds as l,useRowCount as a,useSortedRowIds as n,useValueIds as o,ValueView as r,useIndexesOrIndexesById as i,useSliceRowIds as s,useRelationshipsOrRelationshipsById as d,useResultRowIds as m,useResultTableCellIds as h,useResultRowCount as u,useResultSortedRowIds as c,useCell as g,useSetCellCallback as p,useStoreOrStoreById as b,useValue as f,useSetValueCallback as w,useRemoteRowId as y,CellView as v,ResultCellView as k}from"./ui-react";const C=e=>typeof e,x=C(""),I=C(!0),N=C(0),z="Value",$="currentTarget",T="value",M=isFinite,S=e=>null==e,{PureComponent:R,Fragment:q,createElement:F,useCallback:P,useLayoutEffect:E,useRef:O,useState:V}=e,j=(e,...t)=>S(e)?{}:e(...t),A=(e,t)=>e.map(t),B=Object,L=B.entries,D=(e=[])=>B.fromEntries(e),G=(e,t)=>A(L(e),(([e,l])=>t(l,e))),H="tinybaseStoreInspector",J="M20 80l5-15l40-40l10 10l-40 40l-15 5m5-15l10 10",K='content:url("',Q=K+"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100' stroke-width='4' stroke='white' fill='none'>",U='</svg>")',W=K+"data:image/svg+xml,%3csvg viewBox='0 0 680 680' xmlns='http://www.w3.org/2000/svg' style='width:680px%3bheight:680px'%3e %3cpath stroke='white' stroke-width='80' fill='none' d='M340 617a84 241 90 11.01 0zM131 475a94 254 70 10428-124 114 286 70 01-428 124zm0-140a94 254 70 10428-124 114 286 70 01-428 124zm-12-127a94 254 70 00306 38 90 260 90 01-306-38zm221 3a74 241 90 11.01 0z' /%3e %3cpath fill='%23d81b60' d='M131 475a94 254 70 10428-124 114 286 70 01-428 124zm0-140a94 254 70 10428-124 114 286 70 01-428 124z' /%3e %3cpath d='M249 619a94 240 90 00308-128 114 289 70 01-308 128zM119 208a94 254 70 00306 38 90 260 90 01-306-38zm221 3a74 241 90 11.01 0z' /%3e%3c/svg%3e\")",X=A([[20,20,20,60],[20,20,60,20],[20,60,60,20],[60,20,20,60],[30,30,40,40]],(([e,t,l,a])=>Q+`<rect x='20' y='20' width='60' height='60' fill='grey'/><rect x='${e}' y='${t}' width='${l}' height='${a}' fill='white'/>`+U)),Y=Q+"<path d='M20 20l60 60M20 80l60-60' />"+U,Z=Q+`<path d='${J}' />`+U,_=Q+`<path d='${J}M20 20l60 60' />`+U,ee="*::-webkit-scrollbar";((e,t="")=>{e.join(t)})(G({"":"all:initial;font-family:sans-serif;font-size:0.75rem;position:fixed;z-index:999999","*":"all:revert","*::before":"all:revert","*::after":"all:revert",[ee]:"width:0.5rem;height:0.5rem;",[ee+"-track"]:"background:#111",[ee+"-thumb"]:"background:#999;border:1px solid #111",[ee+"-thumb:hover"]:"background:#fff",[ee+"-corner"]:"background:#111",img:"width:1rem;height:1rem;background:#111;border:0;vertical-align:text-bottom",">img":"padding:0.25rem;bottom:0;right:0;position:fixed;"+W,...D(A(["bottom:0;left:0","top:0;right:0"],((e,t)=>[`>img[data-position='${t}']`,e]))),main:"display:flex;flex-direction:column;background:#111d;color:#fff;position:fixed;",...D(A(["bottom:0;left:0;width:35vw;height:100vh","top:0;right:0;width:100vw;height:30vh","bottom:0;left:0;width:100vw;height:30vh","top:0;right:0;width:35vw;height:100vh","top:0;right:0;width:100vw;height:100vh"],((e,t)=>[`main[data-position='${t}']`,e]))),header:"display:flex;padding:0.25rem;background:#000;align-items:center","header>img:nth-of-type(1)":W,"header>img:nth-of-type(6)":Y,...D(A(X,((e,t)=>[`header>img[data-id='${t}']`,e]))),"header>span":"flex:1;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;margin-left:0.25rem",article:"padding:0.25rem 0.25rem 0.25rem 0.5rem;overflow:auto;flex:1",details:"margin-left:0.75rem;width:fit-content;","details img":"display:none","details[open]>summary img":"display:unset;background:none;margin-left:0.25rem","details[open]>summary img.edit":Z,"details[open]>summary img.done":_,summary:"margin-left:-0.75rem;line-height:1.25rem;user-select:none;width:fit-content",table:"border-collapse:collapse;table-layout:fixed;margin-bottom:0.5rem","table input":"background:#111;color:unset;padding:0 0.25rem;border:0;font-size:unset;vertical-align:top;margin:0",'table input[type="number"]':"width:4rem","table tbody button":"font-size:0;background:#fff;border-radius:50%;margin:0 0.125rem 0 0;width:0.85rem;color:#111","table button:first-letter":"font-size:0.75rem",thead:"background:#222","th:nth-of-type(1)":"min-width:2rem;","th.sorted":"background:#000","table caption":"text-align:left;white-space:nowrap;line-height:1.25rem",button:"width:1.5rem;border:none;background:none;color:#fff;padding:0","button[disabled]":"color:#777","button.next":"margin-right:0.5rem",[`th,#${H} td`]:"overflow:hidden;text-overflow:ellipsis;padding:0.25rem 0.5rem;max-width:12rem;white-space:nowrap;border-width:1px 0;border-style:solid;border-color:#777;text-align:left","span.warn":"margin:0.25rem;color:#d81b60"},((e,t)=>e?`#${H} ${t}{${e}}`:"")));const te=(e,t,l,a)=>e==x?t:e==N?l:a,{useCallback:le,useMemo:ae,useState:ne}=e,oe="editable",re=(e,t)=>A(l(e,t),(t=>e+"."+t)),ie=(e,t,l)=>{const a=le(e,t);return l?a:void 0},se=(...e)=>ae((()=>e),e),de=(e,t)=>ae((()=>({store:e,tableId:t})),[e,t]),me=(e,t)=>ae((()=>({queries:e,queryId:t})),[e,t]),he=(e,t=!1,l,a=0,n,o,r,i)=>{const[[s,d,m],h]=ne([e,t,a]),u=le((e=>{h(e),i?.(e)}),[i]),c=ie((e=>u([e,e==s&&!d,m])),[u,s,d,m],l),g=le((e=>u([s,d,e])),[u,s,d]),p=!0===r?ze:r;return[[s,d,m],c,ae((()=>!1===r?null:F(p,{offset:m,limit:n,total:o,onChange:g})),[r,p,m,n,o,g])]},ue=(e,t,l)=>ae((()=>{const a=t??e;return n=Array.isArray(a)?D(A(a,(e=>[e,e]))):a,o=(e,t)=>{return{label:t,component:l,...(a=e,C(a)==x?{label:e}:e)};var a},D(G(n,((e,t)=>[t,o(e,t)])));var n,o}),[t,l,e]),ce=({className:e,headerRow:t,idColumn:l,params:[a,n,o,r,i,s]})=>F("table",{className:e},s?F("caption",null,s):null,!1===t?null:F("thead",null,F("tr",null,!1===l?null:F(ge,{sort:r??[],label:"Id",onClick:i}),G(a,(({label:e},t)=>F(ge,{key:t,cellId:t,label:e,sort:r??[],onClick:i}))))),F("tbody",null,A(o,(e=>F("tr",{key:e},!1===l?null:F("th",null,e),G(a,(({component:t,getComponentProps:l},a)=>F("td",{key:a},F(t,{...j(l,e,a),...n,rowId:e,cellId:a}))))))))),ge=({cellId:e,sort:[t,l],label:a=e??"",onClick:n})=>F("th",{onClick:ie((()=>n?.(e)),[n,e],n),className:S(l)||t!=e?void 0:`sorted ${l?"de":"a"}scending`},S(l)||t!=e?null:(l?"↓":"↑")+" ",a),pe=({localRowId:t,params:[l,a,n,o,r,i,s]})=>{const d=y(r,t,i);return F("tr",null,!1===l?null:F(e.Fragment,null,F("th",null,t),F("th",null,d)),G(a,(({component:e,getComponentProps:l},a)=>{const[r,i]=a.split(".",2),m=r===n?t:r===o?d:null;return S(m)?null:F("td",{key:a},F(e,{...j(l,m,i),store:s,tableId:r,rowId:m,cellId:i}))})))},be=({thing:e,onThingChange:t,className:l,hasSchema:a,showType:n=!0})=>{const[o,r]=ne(),[i,s]=ne(),[d,m]=ne(),[h,u]=ne(),[c,g]=ne();i!==e&&(r((e=>{const t=C(e);return(e=>e==x||e==I)(t)||t==N&&M(e)?t:void 0})(e)),s(e),m(e+""),u(Number(e)||0),g(!!e));const p=le(((e,l)=>{l(e),s(e),t(e)}),[t]),b=le((()=>{if(!a?.()){const e=te(o,N,I,x),l=te(e,d,h,c);r(e),s(l),t(l)}}),[a,t,d,h,c,o]);return F("div",{className:l},n?F("button",{className:o,onClick:b},o):null,te(o,F("input",{key:o,value:d,onChange:le((e=>p(e[$][T]+"",m)),[p])}),F("input",{key:o,type:"number",value:h,onChange:le((e=>p(Number(e[$][T]||0),u)),[p])}),F("input",{key:o,type:"checkbox",checked:c,onChange:le((e=>p(!!e[$].checked,g)),[p])})))},fe=({tableId:e,store:a,editable:n,customCells:o,...r})=>F(ce,{...r,params:se(ue(l(e,a),o,n?Ie:v),de(a,e),t(e,a))}),we=({tableId:e,cellId:t,descending:o,offset:r,limit:i,store:s,editable:d,sortOnClick:m,paginator:h=!1,onChange:u,customCells:c,...g})=>{const[p,b,f]=he(t,o,m,r,i,a(e,s),h,u);return F(ce,{...g,params:se(ue(l(e,s),c,d?Ie:v),de(s,e),n(e,...p,i,s),p,b,f)})},ye=({store:e,editable:t=!1,valueComponent:l=(t?Ne:r),getValueComponentProps:a,className:n,headerRow:i,idColumn:s})=>F("table",{className:n},!1===i?null:F("thead",null,F("tr",null,!1===s?null:F("th",null,"Id"),F("th",null,z))),F("tbody",null,A(o(e),(t=>F("tr",{key:t},!1===s?null:F("th",null,t),F("td",null,F(l,{...j(a,t),valueId:t,store:e}))))))),ve=({indexId:e,sliceId:t,indexes:a,editable:n,customCells:o,...r})=>{const[d,m,h]=((e,t)=>[e,e?.getStore(),e?.getTableId(t)])(i(a),e);return F(ce,{...r,params:se(ue(l(h,m),o,n?Ie:v),de(m,h),s(e,t,d))})},ke=({relationshipId:l,relationships:a,editable:n,customCells:o,className:r,headerRow:i,idColumn:s=!0})=>{const[m,h,u,c]=((e,t)=>[e,e?.getStore(),e?.getLocalTableId(t),e?.getRemoteTableId(t)])(d(a),l),g=ue([...re(u,h),...re(c,h)],o,n?Ie:v),p=se(s,g,u,c,l,m,h);return F("table",{className:r},!1===i?null:F("thead",null,F("tr",null,!1===s?null:F(e.Fragment,null,F("th",null,u,".Id"),F("th",null,c,".Id")),G(g,(({label:e},t)=>F("th",{key:t},e))))),F("tbody",null,A(t(u,h),(e=>F(pe,{key:e,localRowId:e,params:p})))))},Ce=({queryId:e,queries:t,customCells:l,...a})=>F(ce,{...a,params:se(ue(h(e,t),l,k),me(t,e),m(e,t))}),xe=({queryId:e,cellId:t,descending:l,offset:a,limit:n,queries:o,sortOnClick:r,paginator:i=!1,customCells:s,onChange:d,...m})=>{const[g,p,b]=he(t,l,r,a,n,u(e,o),i,d);return F(ce,{...m,params:se(ue(h(e,o),s,k),me(o,e),c(e,...g,n,o),g,p,b)})},Ie=({tableId:e,rowId:t,cellId:l,store:a,className:n,showType:o})=>F(be,{thing:g(e,t,l,a),onThingChange:p(e,t,l,(e=>e),[],a),className:n??oe+"Cell",showType:o,hasSchema:b(a)?.hasTablesSchema}),Ne=({valueId:e,store:t,className:l,showType:a})=>F(be,{thing:f(e,t),onThingChange:w(e,(e=>e),[],t),className:l??oe+z,showType:a,hasSchema:b(t)?.hasValuesSchema}),ze=({onChange:t,total:l,offset:a=0,limit:n=l,singular:o="row",plural:r=o+"s"})=>{(a>l||a<0)&&(a=0,t(0));const i=ie((()=>t(a-n)),[t,a,n],a>0),s=ie((()=>t(a+n)),[t,a,n],a+n<l);return F(e.Fragment,null,l>n&&F(e.Fragment,null,F("button",{className:"previous",disabled:0==a,onClick:i},"←"),F("button",{className:"next",disabled:a+n>=l,onClick:s},"→"),a+1," to ",Math.min(l,a+n)," of "),l," ",1!=l?r:o)},$e=e=>new Map(e);$e(),$e();const Te=e=>null;export{Ie as EditableCellView,Ne as EditableValueView,ke as RelationshipInHtmlTable,xe as ResultSortedTableInHtmlTable,Ce as ResultTableInHtmlTable,ve as SliceInHtmlTable,we as SortedTableInHtmlTable,ze as SortedTablePaginator,Te as StoreInspector,fe as TableInHtmlTable,ye as ValuesInHtmlTable};
Binary file