tinybase 5.4.5 → 5.4.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (867) hide show
  1. package/checkpoints/index.js +6 -6
  2. package/checkpoints/with-schemas/index.js +6 -6
  3. package/cjs/checkpoints/index.cjs +6 -6
  4. package/cjs/checkpoints/with-schemas/index.cjs +6 -6
  5. package/cjs/es6/checkpoints/index.cjs +21 -19
  6. package/cjs/es6/checkpoints/with-schemas/index.cjs +21 -19
  7. package/cjs/es6/index.cjs +103 -86
  8. package/cjs/es6/indexes/index.cjs +20 -18
  9. package/cjs/es6/indexes/with-schemas/index.cjs +20 -18
  10. package/cjs/es6/mergeable-store/index.cjs +73 -56
  11. package/cjs/es6/mergeable-store/with-schemas/index.cjs +73 -56
  12. package/cjs/es6/metrics/index.cjs +30 -28
  13. package/cjs/es6/metrics/with-schemas/index.cjs +30 -28
  14. package/cjs/es6/min/index.cjs +1 -1
  15. package/cjs/es6/min/index.cjs.gz +0 -0
  16. package/cjs/es6/min/mergeable-store/index.cjs +1 -1
  17. package/cjs/es6/min/mergeable-store/index.cjs.gz +0 -0
  18. package/cjs/es6/min/mergeable-store/with-schemas/index.cjs +1 -1
  19. package/cjs/es6/min/mergeable-store/with-schemas/index.cjs.gz +0 -0
  20. package/cjs/es6/min/persisters/index.cjs +1 -1
  21. package/cjs/es6/min/persisters/index.cjs.gz +0 -0
  22. package/cjs/es6/min/persisters/persister-automerge/index.cjs +1 -1
  23. package/cjs/es6/min/persisters/persister-automerge/index.cjs.gz +0 -0
  24. package/cjs/es6/min/persisters/persister-automerge/with-schemas/index.cjs +1 -1
  25. package/cjs/es6/min/persisters/persister-automerge/with-schemas/index.cjs.gz +0 -0
  26. package/cjs/es6/min/persisters/persister-cr-sqlite-wasm/index.cjs +1 -1
  27. package/cjs/es6/min/persisters/persister-cr-sqlite-wasm/index.cjs.gz +0 -0
  28. package/cjs/es6/min/persisters/persister-cr-sqlite-wasm/with-schemas/index.cjs +1 -1
  29. package/cjs/es6/min/persisters/persister-cr-sqlite-wasm/with-schemas/index.cjs.gz +0 -0
  30. package/cjs/es6/min/persisters/persister-electric-sql/index.cjs +1 -1
  31. package/cjs/es6/min/persisters/persister-electric-sql/index.cjs.gz +0 -0
  32. package/cjs/es6/min/persisters/persister-electric-sql/with-schemas/index.cjs +1 -1
  33. package/cjs/es6/min/persisters/persister-electric-sql/with-schemas/index.cjs.gz +0 -0
  34. package/cjs/es6/min/persisters/persister-expo-sqlite/index.cjs +1 -1
  35. package/cjs/es6/min/persisters/persister-expo-sqlite/index.cjs.gz +0 -0
  36. package/cjs/es6/min/persisters/persister-expo-sqlite/with-schemas/index.cjs +1 -1
  37. package/cjs/es6/min/persisters/persister-expo-sqlite/with-schemas/index.cjs.gz +0 -0
  38. package/cjs/es6/min/persisters/persister-libsql/index.cjs +1 -1
  39. package/cjs/es6/min/persisters/persister-libsql/index.cjs.gz +0 -0
  40. package/cjs/es6/min/persisters/persister-libsql/with-schemas/index.cjs +1 -1
  41. package/cjs/es6/min/persisters/persister-libsql/with-schemas/index.cjs.gz +0 -0
  42. package/cjs/es6/min/persisters/persister-pglite/index.cjs +1 -1
  43. package/cjs/es6/min/persisters/persister-pglite/index.cjs.gz +0 -0
  44. package/cjs/es6/min/persisters/persister-pglite/with-schemas/index.cjs +1 -1
  45. package/cjs/es6/min/persisters/persister-pglite/with-schemas/index.cjs.gz +0 -0
  46. package/cjs/es6/min/persisters/persister-postgres/index.cjs +1 -1
  47. package/cjs/es6/min/persisters/persister-postgres/index.cjs.gz +0 -0
  48. package/cjs/es6/min/persisters/persister-postgres/with-schemas/index.cjs +1 -1
  49. package/cjs/es6/min/persisters/persister-postgres/with-schemas/index.cjs.gz +0 -0
  50. package/cjs/es6/min/persisters/persister-powersync/index.cjs +1 -1
  51. package/cjs/es6/min/persisters/persister-powersync/index.cjs.gz +0 -0
  52. package/cjs/es6/min/persisters/persister-powersync/with-schemas/index.cjs +1 -1
  53. package/cjs/es6/min/persisters/persister-powersync/with-schemas/index.cjs.gz +0 -0
  54. package/cjs/es6/min/persisters/persister-sqlite-wasm/index.cjs +1 -1
  55. package/cjs/es6/min/persisters/persister-sqlite-wasm/index.cjs.gz +0 -0
  56. package/cjs/es6/min/persisters/persister-sqlite-wasm/with-schemas/index.cjs +1 -1
  57. package/cjs/es6/min/persisters/persister-sqlite-wasm/with-schemas/index.cjs.gz +0 -0
  58. package/cjs/es6/min/persisters/persister-sqlite3/index.cjs +1 -1
  59. package/cjs/es6/min/persisters/persister-sqlite3/index.cjs.gz +0 -0
  60. package/cjs/es6/min/persisters/persister-sqlite3/with-schemas/index.cjs +1 -1
  61. package/cjs/es6/min/persisters/persister-sqlite3/with-schemas/index.cjs.gz +0 -0
  62. package/cjs/es6/min/persisters/persister-yjs/index.cjs +1 -1
  63. package/cjs/es6/min/persisters/persister-yjs/index.cjs.gz +0 -0
  64. package/cjs/es6/min/persisters/persister-yjs/with-schemas/index.cjs +1 -1
  65. package/cjs/es6/min/persisters/persister-yjs/with-schemas/index.cjs.gz +0 -0
  66. package/cjs/es6/min/persisters/with-schemas/index.cjs +1 -1
  67. package/cjs/es6/min/persisters/with-schemas/index.cjs.gz +0 -0
  68. package/cjs/es6/min/queries/index.cjs +1 -1
  69. package/cjs/es6/min/queries/index.cjs.gz +0 -0
  70. package/cjs/es6/min/queries/with-schemas/index.cjs +1 -1
  71. package/cjs/es6/min/queries/with-schemas/index.cjs.gz +0 -0
  72. package/cjs/es6/min/store/index.cjs +1 -1
  73. package/cjs/es6/min/store/index.cjs.gz +0 -0
  74. package/cjs/es6/min/store/with-schemas/index.cjs +1 -1
  75. package/cjs/es6/min/store/with-schemas/index.cjs.gz +0 -0
  76. package/cjs/es6/min/ui-react-inspector/index.cjs +1 -1
  77. package/cjs/es6/min/ui-react-inspector/index.cjs.gz +0 -0
  78. package/cjs/es6/min/ui-react-inspector/with-schemas/index.cjs +1 -1
  79. package/cjs/es6/min/ui-react-inspector/with-schemas/index.cjs.gz +0 -0
  80. package/cjs/es6/min/with-schemas/index.cjs +1 -1
  81. package/cjs/es6/min/with-schemas/index.cjs.gz +0 -0
  82. package/cjs/es6/persisters/index.cjs +84 -78
  83. package/cjs/es6/persisters/persister-automerge/index.cjs +49 -43
  84. package/cjs/es6/persisters/persister-automerge/with-schemas/index.cjs +49 -43
  85. package/cjs/es6/persisters/persister-browser/index.cjs +39 -35
  86. package/cjs/es6/persisters/persister-browser/with-schemas/index.cjs +39 -35
  87. package/cjs/es6/persisters/persister-cr-sqlite-wasm/index.cjs +77 -71
  88. package/cjs/es6/persisters/persister-cr-sqlite-wasm/with-schemas/index.cjs +77 -71
  89. package/cjs/es6/persisters/persister-durable-object-storage/index.cjs +40 -36
  90. package/cjs/es6/persisters/persister-durable-object-storage/with-schemas/index.cjs +40 -36
  91. package/cjs/es6/persisters/persister-electric-sql/index.cjs +77 -71
  92. package/cjs/es6/persisters/persister-electric-sql/with-schemas/index.cjs +77 -71
  93. package/cjs/es6/persisters/persister-expo-sqlite/index.cjs +77 -71
  94. package/cjs/es6/persisters/persister-expo-sqlite/with-schemas/index.cjs +77 -71
  95. package/cjs/es6/persisters/persister-file/index.cjs +40 -36
  96. package/cjs/es6/persisters/persister-file/with-schemas/index.cjs +40 -36
  97. package/cjs/es6/persisters/persister-indexed-db/index.cjs +45 -41
  98. package/cjs/es6/persisters/persister-indexed-db/with-schemas/index.cjs +45 -41
  99. package/cjs/es6/persisters/persister-libsql/index.cjs +77 -71
  100. package/cjs/es6/persisters/persister-libsql/with-schemas/index.cjs +77 -71
  101. package/cjs/es6/persisters/persister-partykit-client/index.cjs +40 -36
  102. package/cjs/es6/persisters/persister-partykit-client/with-schemas/index.cjs +40 -36
  103. package/cjs/es6/persisters/persister-partykit-server/index.cjs +18 -14
  104. package/cjs/es6/persisters/persister-partykit-server/with-schemas/index.cjs +18 -14
  105. package/cjs/es6/persisters/persister-pglite/index.cjs +86 -80
  106. package/cjs/es6/persisters/persister-pglite/with-schemas/index.cjs +86 -80
  107. package/cjs/es6/persisters/persister-postgres/index.cjs +92 -83
  108. package/cjs/es6/persisters/persister-postgres/with-schemas/index.cjs +92 -83
  109. package/cjs/es6/persisters/persister-powersync/index.cjs +84 -77
  110. package/cjs/es6/persisters/persister-powersync/with-schemas/index.cjs +84 -77
  111. package/cjs/es6/persisters/persister-remote/index.cjs +38 -34
  112. package/cjs/es6/persisters/persister-remote/with-schemas/index.cjs +38 -34
  113. package/cjs/es6/persisters/persister-sqlite-wasm/index.cjs +77 -71
  114. package/cjs/es6/persisters/persister-sqlite-wasm/with-schemas/index.cjs +77 -71
  115. package/cjs/es6/persisters/persister-sqlite3/index.cjs +77 -71
  116. package/cjs/es6/persisters/persister-sqlite3/with-schemas/index.cjs +77 -71
  117. package/cjs/es6/persisters/persister-yjs/index.cjs +50 -44
  118. package/cjs/es6/persisters/persister-yjs/with-schemas/index.cjs +50 -44
  119. package/cjs/es6/persisters/with-schemas/index.cjs +84 -78
  120. package/cjs/es6/queries/index.cjs +38 -33
  121. package/cjs/es6/queries/with-schemas/index.cjs +38 -33
  122. package/cjs/es6/relationships/index.cjs +22 -20
  123. package/cjs/es6/relationships/with-schemas/index.cjs +22 -20
  124. package/cjs/es6/store/index.cjs +65 -48
  125. package/cjs/es6/store/with-schemas/index.cjs +65 -48
  126. package/cjs/es6/synchronizers/index.cjs +52 -46
  127. package/cjs/es6/synchronizers/synchronizer-broadcast-channel/index.cjs +52 -46
  128. package/cjs/es6/synchronizers/synchronizer-broadcast-channel/with-schemas/index.cjs +52 -46
  129. package/cjs/es6/synchronizers/synchronizer-local/index.cjs +53 -47
  130. package/cjs/es6/synchronizers/synchronizer-local/with-schemas/index.cjs +53 -47
  131. package/cjs/es6/synchronizers/synchronizer-ws-client/index.cjs +56 -50
  132. package/cjs/es6/synchronizers/synchronizer-ws-client/with-schemas/index.cjs +56 -50
  133. package/cjs/es6/synchronizers/synchronizer-ws-server/index.cjs +72 -62
  134. package/cjs/es6/synchronizers/synchronizer-ws-server/with-schemas/index.cjs +72 -62
  135. package/cjs/es6/synchronizers/synchronizer-ws-server-durable-object/index.cjs +55 -49
  136. package/cjs/es6/synchronizers/synchronizer-ws-server-durable-object/with-schemas/index.cjs +55 -49
  137. package/cjs/es6/synchronizers/synchronizer-ws-server-simple/index.cjs +15 -11
  138. package/cjs/es6/synchronizers/synchronizer-ws-server-simple/with-schemas/index.cjs +15 -11
  139. package/cjs/es6/synchronizers/with-schemas/index.cjs +52 -46
  140. package/cjs/es6/tools/index.cjs +31 -24
  141. package/cjs/es6/tools/with-schemas/index.cjs +31 -24
  142. package/cjs/es6/ui-react/index.cjs +49 -35
  143. package/cjs/es6/ui-react/with-schemas/index.cjs +49 -35
  144. package/cjs/es6/ui-react-dom/index.cjs +14 -14
  145. package/cjs/es6/ui-react-dom/with-schemas/index.cjs +14 -14
  146. package/cjs/es6/ui-react-inspector/index.cjs +95 -81
  147. package/cjs/es6/ui-react-inspector/with-schemas/index.cjs +95 -81
  148. package/cjs/es6/with-schemas/index.cjs +103 -86
  149. package/cjs/index.cjs +51 -49
  150. package/cjs/indexes/index.cjs +5 -5
  151. package/cjs/indexes/with-schemas/index.cjs +5 -5
  152. package/cjs/mergeable-store/index.cjs +31 -29
  153. package/cjs/mergeable-store/with-schemas/index.cjs +31 -29
  154. package/cjs/metrics/index.cjs +12 -12
  155. package/cjs/metrics/with-schemas/index.cjs +12 -12
  156. package/cjs/min/index.cjs +1 -1
  157. package/cjs/min/index.cjs.gz +0 -0
  158. package/cjs/min/mergeable-store/index.cjs +1 -1
  159. package/cjs/min/mergeable-store/index.cjs.gz +0 -0
  160. package/cjs/min/mergeable-store/with-schemas/index.cjs +1 -1
  161. package/cjs/min/mergeable-store/with-schemas/index.cjs.gz +0 -0
  162. package/cjs/min/persisters/index.cjs +1 -1
  163. package/cjs/min/persisters/index.cjs.gz +0 -0
  164. package/cjs/min/persisters/persister-automerge/index.cjs +1 -1
  165. package/cjs/min/persisters/persister-automerge/index.cjs.gz +0 -0
  166. package/cjs/min/persisters/persister-automerge/with-schemas/index.cjs +1 -1
  167. package/cjs/min/persisters/persister-automerge/with-schemas/index.cjs.gz +0 -0
  168. package/cjs/min/persisters/persister-cr-sqlite-wasm/index.cjs +1 -1
  169. package/cjs/min/persisters/persister-cr-sqlite-wasm/index.cjs.gz +0 -0
  170. package/cjs/min/persisters/persister-cr-sqlite-wasm/with-schemas/index.cjs +1 -1
  171. package/cjs/min/persisters/persister-cr-sqlite-wasm/with-schemas/index.cjs.gz +0 -0
  172. package/cjs/min/persisters/persister-electric-sql/index.cjs +1 -1
  173. package/cjs/min/persisters/persister-electric-sql/index.cjs.gz +0 -0
  174. package/cjs/min/persisters/persister-electric-sql/with-schemas/index.cjs +1 -1
  175. package/cjs/min/persisters/persister-electric-sql/with-schemas/index.cjs.gz +0 -0
  176. package/cjs/min/persisters/persister-expo-sqlite/index.cjs +1 -1
  177. package/cjs/min/persisters/persister-expo-sqlite/index.cjs.gz +0 -0
  178. package/cjs/min/persisters/persister-expo-sqlite/with-schemas/index.cjs +1 -1
  179. package/cjs/min/persisters/persister-expo-sqlite/with-schemas/index.cjs.gz +0 -0
  180. package/cjs/min/persisters/persister-libsql/index.cjs +1 -1
  181. package/cjs/min/persisters/persister-libsql/index.cjs.gz +0 -0
  182. package/cjs/min/persisters/persister-libsql/with-schemas/index.cjs +1 -1
  183. package/cjs/min/persisters/persister-libsql/with-schemas/index.cjs.gz +0 -0
  184. package/cjs/min/persisters/persister-pglite/index.cjs +1 -1
  185. package/cjs/min/persisters/persister-pglite/index.cjs.gz +0 -0
  186. package/cjs/min/persisters/persister-pglite/with-schemas/index.cjs +1 -1
  187. package/cjs/min/persisters/persister-pglite/with-schemas/index.cjs.gz +0 -0
  188. package/cjs/min/persisters/persister-postgres/index.cjs +1 -1
  189. package/cjs/min/persisters/persister-postgres/index.cjs.gz +0 -0
  190. package/cjs/min/persisters/persister-postgres/with-schemas/index.cjs +1 -1
  191. package/cjs/min/persisters/persister-postgres/with-schemas/index.cjs.gz +0 -0
  192. package/cjs/min/persisters/persister-powersync/index.cjs +1 -1
  193. package/cjs/min/persisters/persister-powersync/index.cjs.gz +0 -0
  194. package/cjs/min/persisters/persister-powersync/with-schemas/index.cjs +1 -1
  195. package/cjs/min/persisters/persister-powersync/with-schemas/index.cjs.gz +0 -0
  196. package/cjs/min/persisters/persister-sqlite-wasm/index.cjs +1 -1
  197. package/cjs/min/persisters/persister-sqlite-wasm/index.cjs.gz +0 -0
  198. package/cjs/min/persisters/persister-sqlite-wasm/with-schemas/index.cjs +1 -1
  199. package/cjs/min/persisters/persister-sqlite-wasm/with-schemas/index.cjs.gz +0 -0
  200. package/cjs/min/persisters/persister-sqlite3/index.cjs +1 -1
  201. package/cjs/min/persisters/persister-sqlite3/index.cjs.gz +0 -0
  202. package/cjs/min/persisters/persister-sqlite3/with-schemas/index.cjs +1 -1
  203. package/cjs/min/persisters/persister-sqlite3/with-schemas/index.cjs.gz +0 -0
  204. package/cjs/min/persisters/persister-yjs/index.cjs +1 -1
  205. package/cjs/min/persisters/persister-yjs/index.cjs.gz +0 -0
  206. package/cjs/min/persisters/persister-yjs/with-schemas/index.cjs +1 -1
  207. package/cjs/min/persisters/persister-yjs/with-schemas/index.cjs.gz +0 -0
  208. package/cjs/min/persisters/with-schemas/index.cjs +1 -1
  209. package/cjs/min/persisters/with-schemas/index.cjs.gz +0 -0
  210. package/cjs/min/queries/index.cjs +1 -1
  211. package/cjs/min/queries/index.cjs.gz +0 -0
  212. package/cjs/min/queries/with-schemas/index.cjs +1 -1
  213. package/cjs/min/queries/with-schemas/index.cjs.gz +0 -0
  214. package/cjs/min/store/index.cjs +1 -1
  215. package/cjs/min/store/index.cjs.gz +0 -0
  216. package/cjs/min/store/with-schemas/index.cjs +1 -1
  217. package/cjs/min/store/with-schemas/index.cjs.gz +0 -0
  218. package/cjs/min/ui-react-inspector/index.cjs +1 -1
  219. package/cjs/min/ui-react-inspector/index.cjs.gz +0 -0
  220. package/cjs/min/ui-react-inspector/with-schemas/index.cjs +1 -1
  221. package/cjs/min/ui-react-inspector/with-schemas/index.cjs.gz +0 -0
  222. package/cjs/min/with-schemas/index.cjs +1 -1
  223. package/cjs/min/with-schemas/index.cjs.gz +0 -0
  224. package/cjs/persisters/index.cjs +13 -13
  225. package/cjs/persisters/persister-automerge/index.cjs +16 -14
  226. package/cjs/persisters/persister-automerge/with-schemas/index.cjs +16 -14
  227. package/cjs/persisters/persister-browser/index.cjs +7 -7
  228. package/cjs/persisters/persister-browser/with-schemas/index.cjs +7 -7
  229. package/cjs/persisters/persister-cr-sqlite-wasm/index.cjs +12 -12
  230. package/cjs/persisters/persister-cr-sqlite-wasm/with-schemas/index.cjs +12 -12
  231. package/cjs/persisters/persister-durable-object-storage/index.cjs +7 -7
  232. package/cjs/persisters/persister-durable-object-storage/with-schemas/index.cjs +7 -7
  233. package/cjs/persisters/persister-electric-sql/index.cjs +12 -12
  234. package/cjs/persisters/persister-electric-sql/with-schemas/index.cjs +12 -12
  235. package/cjs/persisters/persister-expo-sqlite/index.cjs +12 -12
  236. package/cjs/persisters/persister-expo-sqlite/with-schemas/index.cjs +12 -12
  237. package/cjs/persisters/persister-file/index.cjs +7 -7
  238. package/cjs/persisters/persister-file/with-schemas/index.cjs +7 -7
  239. package/cjs/persisters/persister-indexed-db/index.cjs +6 -6
  240. package/cjs/persisters/persister-indexed-db/with-schemas/index.cjs +6 -6
  241. package/cjs/persisters/persister-libsql/index.cjs +12 -12
  242. package/cjs/persisters/persister-libsql/with-schemas/index.cjs +12 -12
  243. package/cjs/persisters/persister-partykit-client/index.cjs +7 -7
  244. package/cjs/persisters/persister-partykit-client/with-schemas/index.cjs +7 -7
  245. package/cjs/persisters/persister-partykit-server/index.cjs +2 -2
  246. package/cjs/persisters/persister-partykit-server/with-schemas/index.cjs +2 -2
  247. package/cjs/persisters/persister-pglite/index.cjs +12 -12
  248. package/cjs/persisters/persister-pglite/with-schemas/index.cjs +12 -12
  249. package/cjs/persisters/persister-postgres/index.cjs +12 -12
  250. package/cjs/persisters/persister-postgres/with-schemas/index.cjs +12 -12
  251. package/cjs/persisters/persister-powersync/index.cjs +13 -13
  252. package/cjs/persisters/persister-powersync/with-schemas/index.cjs +13 -13
  253. package/cjs/persisters/persister-remote/index.cjs +5 -5
  254. package/cjs/persisters/persister-remote/with-schemas/index.cjs +5 -5
  255. package/cjs/persisters/persister-sqlite-wasm/index.cjs +12 -12
  256. package/cjs/persisters/persister-sqlite-wasm/with-schemas/index.cjs +12 -12
  257. package/cjs/persisters/persister-sqlite3/index.cjs +12 -12
  258. package/cjs/persisters/persister-sqlite3/with-schemas/index.cjs +12 -12
  259. package/cjs/persisters/persister-yjs/index.cjs +16 -14
  260. package/cjs/persisters/persister-yjs/with-schemas/index.cjs +16 -14
  261. package/cjs/persisters/with-schemas/index.cjs +13 -13
  262. package/cjs/queries/index.cjs +17 -14
  263. package/cjs/queries/with-schemas/index.cjs +17 -14
  264. package/cjs/relationships/index.cjs +5 -5
  265. package/cjs/relationships/with-schemas/index.cjs +5 -5
  266. package/cjs/store/index.cjs +28 -23
  267. package/cjs/store/with-schemas/index.cjs +28 -23
  268. package/cjs/synchronizers/index.cjs +11 -11
  269. package/cjs/synchronizers/synchronizer-broadcast-channel/index.cjs +11 -11
  270. package/cjs/synchronizers/synchronizer-broadcast-channel/with-schemas/index.cjs +11 -11
  271. package/cjs/synchronizers/synchronizer-local/index.cjs +11 -11
  272. package/cjs/synchronizers/synchronizer-local/with-schemas/index.cjs +11 -11
  273. package/cjs/synchronizers/synchronizer-ws-client/index.cjs +13 -13
  274. package/cjs/synchronizers/synchronizer-ws-client/with-schemas/index.cjs +13 -13
  275. package/cjs/synchronizers/synchronizer-ws-server/index.cjs +17 -17
  276. package/cjs/synchronizers/synchronizer-ws-server/with-schemas/index.cjs +17 -17
  277. package/cjs/synchronizers/synchronizer-ws-server-durable-object/index.cjs +14 -14
  278. package/cjs/synchronizers/synchronizer-ws-server-durable-object/with-schemas/index.cjs +14 -14
  279. package/cjs/synchronizers/synchronizer-ws-server-simple/index.cjs +1 -1
  280. package/cjs/synchronizers/synchronizer-ws-server-simple/with-schemas/index.cjs +1 -1
  281. package/cjs/synchronizers/with-schemas/index.cjs +11 -11
  282. package/cjs/tools/index.cjs +7 -7
  283. package/cjs/tools/with-schemas/index.cjs +7 -7
  284. package/cjs/ui-react/index.cjs +19 -12
  285. package/cjs/ui-react/with-schemas/index.cjs +19 -12
  286. package/cjs/ui-react-dom/index.cjs +4 -4
  287. package/cjs/ui-react-dom/with-schemas/index.cjs +4 -4
  288. package/cjs/ui-react-inspector/index.cjs +33 -31
  289. package/cjs/ui-react-inspector/with-schemas/index.cjs +33 -31
  290. package/cjs/with-schemas/index.cjs +51 -49
  291. package/cli/index.js +4 -1
  292. package/es6/checkpoints/index.js +21 -19
  293. package/es6/checkpoints/with-schemas/index.js +21 -19
  294. package/es6/index.js +103 -86
  295. package/es6/indexes/index.js +20 -18
  296. package/es6/indexes/with-schemas/index.js +20 -18
  297. package/es6/mergeable-store/index.js +73 -56
  298. package/es6/mergeable-store/with-schemas/index.js +73 -56
  299. package/es6/metrics/index.js +30 -28
  300. package/es6/metrics/with-schemas/index.js +30 -28
  301. package/es6/min/index.js +1 -1
  302. package/es6/min/index.js.gz +0 -0
  303. package/es6/min/mergeable-store/index.js +1 -1
  304. package/es6/min/mergeable-store/index.js.gz +0 -0
  305. package/es6/min/mergeable-store/with-schemas/index.js +1 -1
  306. package/es6/min/mergeable-store/with-schemas/index.js.gz +0 -0
  307. package/es6/min/persisters/index.js +1 -1
  308. package/es6/min/persisters/index.js.gz +0 -0
  309. package/es6/min/persisters/persister-automerge/index.js +1 -1
  310. package/es6/min/persisters/persister-automerge/index.js.gz +0 -0
  311. package/es6/min/persisters/persister-automerge/with-schemas/index.js +1 -1
  312. package/es6/min/persisters/persister-automerge/with-schemas/index.js.gz +0 -0
  313. package/es6/min/persisters/persister-cr-sqlite-wasm/index.js +1 -1
  314. package/es6/min/persisters/persister-cr-sqlite-wasm/index.js.gz +0 -0
  315. package/es6/min/persisters/persister-cr-sqlite-wasm/with-schemas/index.js +1 -1
  316. package/es6/min/persisters/persister-cr-sqlite-wasm/with-schemas/index.js.gz +0 -0
  317. package/es6/min/persisters/persister-electric-sql/index.js +1 -1
  318. package/es6/min/persisters/persister-electric-sql/index.js.gz +0 -0
  319. package/es6/min/persisters/persister-electric-sql/with-schemas/index.js +1 -1
  320. package/es6/min/persisters/persister-electric-sql/with-schemas/index.js.gz +0 -0
  321. package/es6/min/persisters/persister-expo-sqlite/index.js +1 -1
  322. package/es6/min/persisters/persister-expo-sqlite/index.js.gz +0 -0
  323. package/es6/min/persisters/persister-expo-sqlite/with-schemas/index.js +1 -1
  324. package/es6/min/persisters/persister-expo-sqlite/with-schemas/index.js.gz +0 -0
  325. package/es6/min/persisters/persister-libsql/index.js +1 -1
  326. package/es6/min/persisters/persister-libsql/index.js.gz +0 -0
  327. package/es6/min/persisters/persister-libsql/with-schemas/index.js +1 -1
  328. package/es6/min/persisters/persister-libsql/with-schemas/index.js.gz +0 -0
  329. package/es6/min/persisters/persister-pglite/index.js +1 -1
  330. package/es6/min/persisters/persister-pglite/index.js.gz +0 -0
  331. package/es6/min/persisters/persister-pglite/with-schemas/index.js +1 -1
  332. package/es6/min/persisters/persister-pglite/with-schemas/index.js.gz +0 -0
  333. package/es6/min/persisters/persister-postgres/index.js +1 -1
  334. package/es6/min/persisters/persister-postgres/index.js.gz +0 -0
  335. package/es6/min/persisters/persister-postgres/with-schemas/index.js +1 -1
  336. package/es6/min/persisters/persister-postgres/with-schemas/index.js.gz +0 -0
  337. package/es6/min/persisters/persister-powersync/index.js +1 -1
  338. package/es6/min/persisters/persister-powersync/index.js.gz +0 -0
  339. package/es6/min/persisters/persister-powersync/with-schemas/index.js +1 -1
  340. package/es6/min/persisters/persister-powersync/with-schemas/index.js.gz +0 -0
  341. package/es6/min/persisters/persister-sqlite-wasm/index.js +1 -1
  342. package/es6/min/persisters/persister-sqlite-wasm/index.js.gz +0 -0
  343. package/es6/min/persisters/persister-sqlite-wasm/with-schemas/index.js +1 -1
  344. package/es6/min/persisters/persister-sqlite-wasm/with-schemas/index.js.gz +0 -0
  345. package/es6/min/persisters/persister-sqlite3/index.js +1 -1
  346. package/es6/min/persisters/persister-sqlite3/index.js.gz +0 -0
  347. package/es6/min/persisters/persister-sqlite3/with-schemas/index.js +1 -1
  348. package/es6/min/persisters/persister-sqlite3/with-schemas/index.js.gz +0 -0
  349. package/es6/min/persisters/persister-yjs/index.js +1 -1
  350. package/es6/min/persisters/persister-yjs/index.js.gz +0 -0
  351. package/es6/min/persisters/persister-yjs/with-schemas/index.js +1 -1
  352. package/es6/min/persisters/persister-yjs/with-schemas/index.js.gz +0 -0
  353. package/es6/min/persisters/with-schemas/index.js +1 -1
  354. package/es6/min/persisters/with-schemas/index.js.gz +0 -0
  355. package/es6/min/queries/index.js +1 -1
  356. package/es6/min/queries/index.js.gz +0 -0
  357. package/es6/min/queries/with-schemas/index.js +1 -1
  358. package/es6/min/queries/with-schemas/index.js.gz +0 -0
  359. package/es6/min/store/index.js +1 -1
  360. package/es6/min/store/index.js.gz +0 -0
  361. package/es6/min/store/with-schemas/index.js +1 -1
  362. package/es6/min/store/with-schemas/index.js.gz +0 -0
  363. package/es6/min/ui-react-inspector/index.js +1 -1
  364. package/es6/min/ui-react-inspector/index.js.gz +0 -0
  365. package/es6/min/ui-react-inspector/with-schemas/index.js +1 -1
  366. package/es6/min/ui-react-inspector/with-schemas/index.js.gz +0 -0
  367. package/es6/min/with-schemas/index.js +1 -1
  368. package/es6/min/with-schemas/index.js.gz +0 -0
  369. package/es6/persisters/index.js +84 -78
  370. package/es6/persisters/persister-automerge/index.js +49 -43
  371. package/es6/persisters/persister-automerge/with-schemas/index.js +49 -43
  372. package/es6/persisters/persister-browser/index.js +39 -35
  373. package/es6/persisters/persister-browser/with-schemas/index.js +39 -35
  374. package/es6/persisters/persister-cr-sqlite-wasm/index.js +77 -71
  375. package/es6/persisters/persister-cr-sqlite-wasm/with-schemas/index.js +77 -71
  376. package/es6/persisters/persister-durable-object-storage/index.js +40 -36
  377. package/es6/persisters/persister-durable-object-storage/with-schemas/index.js +40 -36
  378. package/es6/persisters/persister-electric-sql/index.js +77 -71
  379. package/es6/persisters/persister-electric-sql/with-schemas/index.js +77 -71
  380. package/es6/persisters/persister-expo-sqlite/index.js +77 -71
  381. package/es6/persisters/persister-expo-sqlite/with-schemas/index.js +77 -71
  382. package/es6/persisters/persister-file/index.js +40 -36
  383. package/es6/persisters/persister-file/with-schemas/index.js +40 -36
  384. package/es6/persisters/persister-indexed-db/index.js +45 -41
  385. package/es6/persisters/persister-indexed-db/with-schemas/index.js +45 -41
  386. package/es6/persisters/persister-libsql/index.js +77 -71
  387. package/es6/persisters/persister-libsql/with-schemas/index.js +77 -71
  388. package/es6/persisters/persister-partykit-client/index.js +40 -36
  389. package/es6/persisters/persister-partykit-client/with-schemas/index.js +40 -36
  390. package/es6/persisters/persister-partykit-server/index.js +18 -14
  391. package/es6/persisters/persister-partykit-server/with-schemas/index.js +18 -14
  392. package/es6/persisters/persister-pglite/index.js +86 -80
  393. package/es6/persisters/persister-pglite/with-schemas/index.js +86 -80
  394. package/es6/persisters/persister-postgres/index.js +92 -83
  395. package/es6/persisters/persister-postgres/with-schemas/index.js +92 -83
  396. package/es6/persisters/persister-powersync/index.js +84 -77
  397. package/es6/persisters/persister-powersync/with-schemas/index.js +84 -77
  398. package/es6/persisters/persister-remote/index.js +38 -34
  399. package/es6/persisters/persister-remote/with-schemas/index.js +38 -34
  400. package/es6/persisters/persister-sqlite-wasm/index.js +77 -71
  401. package/es6/persisters/persister-sqlite-wasm/with-schemas/index.js +77 -71
  402. package/es6/persisters/persister-sqlite3/index.js +77 -71
  403. package/es6/persisters/persister-sqlite3/with-schemas/index.js +77 -71
  404. package/es6/persisters/persister-yjs/index.js +50 -44
  405. package/es6/persisters/persister-yjs/with-schemas/index.js +50 -44
  406. package/es6/persisters/with-schemas/index.js +84 -78
  407. package/es6/queries/index.js +38 -33
  408. package/es6/queries/with-schemas/index.js +38 -33
  409. package/es6/relationships/index.js +22 -20
  410. package/es6/relationships/with-schemas/index.js +22 -20
  411. package/es6/store/index.js +65 -48
  412. package/es6/store/with-schemas/index.js +65 -48
  413. package/es6/synchronizers/index.js +52 -46
  414. package/es6/synchronizers/synchronizer-broadcast-channel/index.js +52 -46
  415. package/es6/synchronizers/synchronizer-broadcast-channel/with-schemas/index.js +52 -46
  416. package/es6/synchronizers/synchronizer-local/index.js +53 -47
  417. package/es6/synchronizers/synchronizer-local/with-schemas/index.js +53 -47
  418. package/es6/synchronizers/synchronizer-ws-client/index.js +56 -50
  419. package/es6/synchronizers/synchronizer-ws-client/with-schemas/index.js +56 -50
  420. package/es6/synchronizers/synchronizer-ws-server/index.js +72 -62
  421. package/es6/synchronizers/synchronizer-ws-server/with-schemas/index.js +72 -62
  422. package/es6/synchronizers/synchronizer-ws-server-durable-object/index.js +55 -49
  423. package/es6/synchronizers/synchronizer-ws-server-durable-object/with-schemas/index.js +55 -49
  424. package/es6/synchronizers/synchronizer-ws-server-simple/index.js +15 -11
  425. package/es6/synchronizers/synchronizer-ws-server-simple/with-schemas/index.js +15 -11
  426. package/es6/synchronizers/with-schemas/index.js +52 -46
  427. package/es6/tools/index.js +31 -24
  428. package/es6/tools/with-schemas/index.js +31 -24
  429. package/es6/ui-react/index.js +49 -35
  430. package/es6/ui-react/with-schemas/index.js +49 -35
  431. package/es6/ui-react-dom/index.js +18 -14
  432. package/es6/ui-react-dom/with-schemas/index.js +18 -14
  433. package/es6/ui-react-inspector/index.js +99 -81
  434. package/es6/ui-react-inspector/with-schemas/index.js +99 -81
  435. package/es6/with-schemas/index.js +103 -86
  436. package/index.js +51 -49
  437. package/indexes/index.js +5 -5
  438. package/indexes/with-schemas/index.js +5 -5
  439. package/mergeable-store/index.js +31 -29
  440. package/mergeable-store/with-schemas/index.js +31 -29
  441. package/metrics/index.js +12 -12
  442. package/metrics/with-schemas/index.js +12 -12
  443. package/min/index.js +1 -1
  444. package/min/index.js.gz +0 -0
  445. package/min/mergeable-store/index.js +1 -1
  446. package/min/mergeable-store/index.js.gz +0 -0
  447. package/min/mergeable-store/with-schemas/index.js +1 -1
  448. package/min/mergeable-store/with-schemas/index.js.gz +0 -0
  449. package/min/persisters/index.js +1 -1
  450. package/min/persisters/index.js.gz +0 -0
  451. package/min/persisters/persister-automerge/index.js +1 -1
  452. package/min/persisters/persister-automerge/index.js.gz +0 -0
  453. package/min/persisters/persister-automerge/with-schemas/index.js +1 -1
  454. package/min/persisters/persister-automerge/with-schemas/index.js.gz +0 -0
  455. package/min/persisters/persister-cr-sqlite-wasm/index.js +1 -1
  456. package/min/persisters/persister-cr-sqlite-wasm/index.js.gz +0 -0
  457. package/min/persisters/persister-cr-sqlite-wasm/with-schemas/index.js +1 -1
  458. package/min/persisters/persister-cr-sqlite-wasm/with-schemas/index.js.gz +0 -0
  459. package/min/persisters/persister-electric-sql/index.js +1 -1
  460. package/min/persisters/persister-electric-sql/index.js.gz +0 -0
  461. package/min/persisters/persister-electric-sql/with-schemas/index.js +1 -1
  462. package/min/persisters/persister-electric-sql/with-schemas/index.js.gz +0 -0
  463. package/min/persisters/persister-expo-sqlite/index.js +1 -1
  464. package/min/persisters/persister-expo-sqlite/index.js.gz +0 -0
  465. package/min/persisters/persister-expo-sqlite/with-schemas/index.js +1 -1
  466. package/min/persisters/persister-expo-sqlite/with-schemas/index.js.gz +0 -0
  467. package/min/persisters/persister-libsql/index.js +1 -1
  468. package/min/persisters/persister-libsql/index.js.gz +0 -0
  469. package/min/persisters/persister-libsql/with-schemas/index.js +1 -1
  470. package/min/persisters/persister-libsql/with-schemas/index.js.gz +0 -0
  471. package/min/persisters/persister-pglite/index.js +1 -1
  472. package/min/persisters/persister-pglite/index.js.gz +0 -0
  473. package/min/persisters/persister-pglite/with-schemas/index.js +1 -1
  474. package/min/persisters/persister-pglite/with-schemas/index.js.gz +0 -0
  475. package/min/persisters/persister-postgres/index.js +1 -1
  476. package/min/persisters/persister-postgres/index.js.gz +0 -0
  477. package/min/persisters/persister-postgres/with-schemas/index.js +1 -1
  478. package/min/persisters/persister-postgres/with-schemas/index.js.gz +0 -0
  479. package/min/persisters/persister-powersync/index.js +1 -1
  480. package/min/persisters/persister-powersync/index.js.gz +0 -0
  481. package/min/persisters/persister-powersync/with-schemas/index.js +1 -1
  482. package/min/persisters/persister-powersync/with-schemas/index.js.gz +0 -0
  483. package/min/persisters/persister-sqlite-wasm/index.js +1 -1
  484. package/min/persisters/persister-sqlite-wasm/index.js.gz +0 -0
  485. package/min/persisters/persister-sqlite-wasm/with-schemas/index.js +1 -1
  486. package/min/persisters/persister-sqlite-wasm/with-schemas/index.js.gz +0 -0
  487. package/min/persisters/persister-sqlite3/index.js +1 -1
  488. package/min/persisters/persister-sqlite3/index.js.gz +0 -0
  489. package/min/persisters/persister-sqlite3/with-schemas/index.js +1 -1
  490. package/min/persisters/persister-sqlite3/with-schemas/index.js.gz +0 -0
  491. package/min/persisters/persister-yjs/index.js +1 -1
  492. package/min/persisters/persister-yjs/index.js.gz +0 -0
  493. package/min/persisters/persister-yjs/with-schemas/index.js +1 -1
  494. package/min/persisters/persister-yjs/with-schemas/index.js.gz +0 -0
  495. package/min/persisters/with-schemas/index.js +1 -1
  496. package/min/persisters/with-schemas/index.js.gz +0 -0
  497. package/min/queries/index.js +1 -1
  498. package/min/queries/index.js.gz +0 -0
  499. package/min/queries/with-schemas/index.js +1 -1
  500. package/min/queries/with-schemas/index.js.gz +0 -0
  501. package/min/store/index.js +1 -1
  502. package/min/store/index.js.gz +0 -0
  503. package/min/store/with-schemas/index.js +1 -1
  504. package/min/store/with-schemas/index.js.gz +0 -0
  505. package/min/ui-react-inspector/index.js +1 -1
  506. package/min/ui-react-inspector/index.js.gz +0 -0
  507. package/min/ui-react-inspector/with-schemas/index.js +1 -1
  508. package/min/ui-react-inspector/with-schemas/index.js.gz +0 -0
  509. package/min/with-schemas/index.js +1 -1
  510. package/min/with-schemas/index.js.gz +0 -0
  511. package/package.json +7 -7
  512. package/persisters/index.js +13 -13
  513. package/persisters/persister-automerge/index.js +16 -14
  514. package/persisters/persister-automerge/with-schemas/index.js +16 -14
  515. package/persisters/persister-browser/index.js +7 -7
  516. package/persisters/persister-browser/with-schemas/index.js +7 -7
  517. package/persisters/persister-cr-sqlite-wasm/index.js +12 -12
  518. package/persisters/persister-cr-sqlite-wasm/with-schemas/index.js +12 -12
  519. package/persisters/persister-durable-object-storage/index.js +7 -7
  520. package/persisters/persister-durable-object-storage/with-schemas/index.js +7 -7
  521. package/persisters/persister-electric-sql/index.js +12 -12
  522. package/persisters/persister-electric-sql/with-schemas/index.js +12 -12
  523. package/persisters/persister-expo-sqlite/index.js +12 -12
  524. package/persisters/persister-expo-sqlite/with-schemas/index.js +12 -12
  525. package/persisters/persister-file/index.js +7 -7
  526. package/persisters/persister-file/with-schemas/index.js +7 -7
  527. package/persisters/persister-indexed-db/index.js +6 -6
  528. package/persisters/persister-indexed-db/with-schemas/index.js +6 -6
  529. package/persisters/persister-libsql/index.js +12 -12
  530. package/persisters/persister-libsql/with-schemas/index.js +12 -12
  531. package/persisters/persister-partykit-client/index.js +7 -7
  532. package/persisters/persister-partykit-client/with-schemas/index.js +7 -7
  533. package/persisters/persister-partykit-server/index.js +2 -2
  534. package/persisters/persister-partykit-server/with-schemas/index.js +2 -2
  535. package/persisters/persister-pglite/index.js +12 -12
  536. package/persisters/persister-pglite/with-schemas/index.js +12 -12
  537. package/persisters/persister-postgres/index.js +12 -12
  538. package/persisters/persister-postgres/with-schemas/index.js +12 -12
  539. package/persisters/persister-powersync/index.js +13 -13
  540. package/persisters/persister-powersync/with-schemas/index.js +13 -13
  541. package/persisters/persister-remote/index.js +5 -5
  542. package/persisters/persister-remote/with-schemas/index.js +5 -5
  543. package/persisters/persister-sqlite-wasm/index.js +12 -12
  544. package/persisters/persister-sqlite-wasm/with-schemas/index.js +12 -12
  545. package/persisters/persister-sqlite3/index.js +12 -12
  546. package/persisters/persister-sqlite3/with-schemas/index.js +12 -12
  547. package/persisters/persister-yjs/index.js +16 -14
  548. package/persisters/persister-yjs/with-schemas/index.js +16 -14
  549. package/persisters/with-schemas/index.js +13 -13
  550. package/queries/index.js +17 -14
  551. package/queries/with-schemas/index.js +17 -14
  552. package/readme.md +2 -2
  553. package/relationships/index.js +5 -5
  554. package/relationships/with-schemas/index.js +5 -5
  555. package/store/index.js +28 -23
  556. package/store/with-schemas/index.js +28 -23
  557. package/synchronizers/index.js +11 -11
  558. package/synchronizers/synchronizer-broadcast-channel/index.js +11 -11
  559. package/synchronizers/synchronizer-broadcast-channel/with-schemas/index.js +11 -11
  560. package/synchronizers/synchronizer-local/index.js +11 -11
  561. package/synchronizers/synchronizer-local/with-schemas/index.js +11 -11
  562. package/synchronizers/synchronizer-ws-client/index.js +13 -13
  563. package/synchronizers/synchronizer-ws-client/with-schemas/index.js +13 -13
  564. package/synchronizers/synchronizer-ws-server/index.js +17 -17
  565. package/synchronizers/synchronizer-ws-server/with-schemas/index.js +17 -17
  566. package/synchronizers/synchronizer-ws-server-durable-object/index.js +14 -14
  567. package/synchronizers/synchronizer-ws-server-durable-object/with-schemas/index.js +14 -14
  568. package/synchronizers/synchronizer-ws-server-simple/index.js +1 -1
  569. package/synchronizers/synchronizer-ws-server-simple/with-schemas/index.js +1 -1
  570. package/synchronizers/with-schemas/index.js +11 -11
  571. package/tools/index.js +7 -7
  572. package/tools/with-schemas/index.js +7 -7
  573. package/ui-react/index.js +19 -12
  574. package/ui-react/with-schemas/index.js +19 -12
  575. package/ui-react-dom/index.js +4 -4
  576. package/ui-react-dom/with-schemas/index.js +4 -4
  577. package/ui-react-inspector/index.js +33 -31
  578. package/ui-react-inspector/with-schemas/index.js +33 -31
  579. package/umd/checkpoints/index.js +14 -9
  580. package/umd/checkpoints/with-schemas/index.js +14 -9
  581. package/umd/es6/checkpoints/index.js +20 -19
  582. package/umd/es6/checkpoints/with-schemas/index.js +20 -19
  583. package/umd/es6/index.js +97 -86
  584. package/umd/es6/indexes/index.js +19 -18
  585. package/umd/es6/indexes/with-schemas/index.js +19 -18
  586. package/umd/es6/mergeable-store/index.js +67 -56
  587. package/umd/es6/mergeable-store/with-schemas/index.js +67 -56
  588. package/umd/es6/metrics/index.js +29 -28
  589. package/umd/es6/metrics/with-schemas/index.js +29 -28
  590. package/umd/es6/min/index.js +1 -1
  591. package/umd/es6/min/index.js.gz +0 -0
  592. package/umd/es6/min/mergeable-store/index.js +1 -1
  593. package/umd/es6/min/mergeable-store/index.js.gz +0 -0
  594. package/umd/es6/min/mergeable-store/with-schemas/index.js +1 -1
  595. package/umd/es6/min/mergeable-store/with-schemas/index.js.gz +0 -0
  596. package/umd/es6/min/persisters/index.js +1 -1
  597. package/umd/es6/min/persisters/index.js.gz +0 -0
  598. package/umd/es6/min/persisters/persister-automerge/index.js +1 -1
  599. package/umd/es6/min/persisters/persister-automerge/index.js.gz +0 -0
  600. package/umd/es6/min/persisters/persister-automerge/with-schemas/index.js +1 -1
  601. package/umd/es6/min/persisters/persister-automerge/with-schemas/index.js.gz +0 -0
  602. package/umd/es6/min/persisters/persister-cr-sqlite-wasm/index.js +1 -1
  603. package/umd/es6/min/persisters/persister-cr-sqlite-wasm/index.js.gz +0 -0
  604. package/umd/es6/min/persisters/persister-cr-sqlite-wasm/with-schemas/index.js +1 -1
  605. package/umd/es6/min/persisters/persister-cr-sqlite-wasm/with-schemas/index.js.gz +0 -0
  606. package/umd/es6/min/persisters/persister-electric-sql/index.js +1 -1
  607. package/umd/es6/min/persisters/persister-electric-sql/index.js.gz +0 -0
  608. package/umd/es6/min/persisters/persister-electric-sql/with-schemas/index.js +1 -1
  609. package/umd/es6/min/persisters/persister-electric-sql/with-schemas/index.js.gz +0 -0
  610. package/umd/es6/min/persisters/persister-expo-sqlite/index.js +1 -1
  611. package/umd/es6/min/persisters/persister-expo-sqlite/index.js.gz +0 -0
  612. package/umd/es6/min/persisters/persister-expo-sqlite/with-schemas/index.js +1 -1
  613. package/umd/es6/min/persisters/persister-expo-sqlite/with-schemas/index.js.gz +0 -0
  614. package/umd/es6/min/persisters/persister-libsql/index.js +1 -1
  615. package/umd/es6/min/persisters/persister-libsql/index.js.gz +0 -0
  616. package/umd/es6/min/persisters/persister-libsql/with-schemas/index.js +1 -1
  617. package/umd/es6/min/persisters/persister-libsql/with-schemas/index.js.gz +0 -0
  618. package/umd/es6/min/persisters/persister-pglite/index.js +1 -1
  619. package/umd/es6/min/persisters/persister-pglite/index.js.gz +0 -0
  620. package/umd/es6/min/persisters/persister-pglite/with-schemas/index.js +1 -1
  621. package/umd/es6/min/persisters/persister-pglite/with-schemas/index.js.gz +0 -0
  622. package/umd/es6/min/persisters/persister-postgres/index.js +1 -1
  623. package/umd/es6/min/persisters/persister-postgres/index.js.gz +0 -0
  624. package/umd/es6/min/persisters/persister-postgres/with-schemas/index.js +1 -1
  625. package/umd/es6/min/persisters/persister-postgres/with-schemas/index.js.gz +0 -0
  626. package/umd/es6/min/persisters/persister-powersync/index.js +1 -1
  627. package/umd/es6/min/persisters/persister-powersync/index.js.gz +0 -0
  628. package/umd/es6/min/persisters/persister-powersync/with-schemas/index.js +1 -1
  629. package/umd/es6/min/persisters/persister-powersync/with-schemas/index.js.gz +0 -0
  630. package/umd/es6/min/persisters/persister-sqlite-wasm/index.js +1 -1
  631. package/umd/es6/min/persisters/persister-sqlite-wasm/index.js.gz +0 -0
  632. package/umd/es6/min/persisters/persister-sqlite-wasm/with-schemas/index.js +1 -1
  633. package/umd/es6/min/persisters/persister-sqlite-wasm/with-schemas/index.js.gz +0 -0
  634. package/umd/es6/min/persisters/persister-sqlite3/index.js +1 -1
  635. package/umd/es6/min/persisters/persister-sqlite3/index.js.gz +0 -0
  636. package/umd/es6/min/persisters/persister-sqlite3/with-schemas/index.js +1 -1
  637. package/umd/es6/min/persisters/persister-sqlite3/with-schemas/index.js.gz +0 -0
  638. package/umd/es6/min/persisters/persister-yjs/index.js +1 -1
  639. package/umd/es6/min/persisters/persister-yjs/index.js.gz +0 -0
  640. package/umd/es6/min/persisters/persister-yjs/with-schemas/index.js +1 -1
  641. package/umd/es6/min/persisters/persister-yjs/with-schemas/index.js.gz +0 -0
  642. package/umd/es6/min/persisters/with-schemas/index.js +1 -1
  643. package/umd/es6/min/persisters/with-schemas/index.js.gz +0 -0
  644. package/umd/es6/min/queries/index.js +1 -1
  645. package/umd/es6/min/queries/index.js.gz +0 -0
  646. package/umd/es6/min/queries/with-schemas/index.js +1 -1
  647. package/umd/es6/min/queries/with-schemas/index.js.gz +0 -0
  648. package/umd/es6/min/store/index.js +1 -1
  649. package/umd/es6/min/store/index.js.gz +0 -0
  650. package/umd/es6/min/store/with-schemas/index.js +1 -1
  651. package/umd/es6/min/store/with-schemas/index.js.gz +0 -0
  652. package/umd/es6/min/ui-react-inspector/index.js +1 -1
  653. package/umd/es6/min/ui-react-inspector/index.js.gz +0 -0
  654. package/umd/es6/min/ui-react-inspector/with-schemas/index.js +1 -1
  655. package/umd/es6/min/ui-react-inspector/with-schemas/index.js.gz +0 -0
  656. package/umd/es6/min/with-schemas/index.js +1 -1
  657. package/umd/es6/min/with-schemas/index.js.gz +0 -0
  658. package/umd/es6/persisters/index.js +79 -78
  659. package/umd/es6/persisters/persister-automerge/index.js +46 -43
  660. package/umd/es6/persisters/persister-automerge/with-schemas/index.js +46 -43
  661. package/umd/es6/persisters/persister-browser/index.js +36 -35
  662. package/umd/es6/persisters/persister-browser/with-schemas/index.js +36 -35
  663. package/umd/es6/persisters/persister-cr-sqlite-wasm/index.js +72 -71
  664. package/umd/es6/persisters/persister-cr-sqlite-wasm/with-schemas/index.js +72 -71
  665. package/umd/es6/persisters/persister-durable-object-storage/index.js +37 -36
  666. package/umd/es6/persisters/persister-durable-object-storage/with-schemas/index.js +37 -36
  667. package/umd/es6/persisters/persister-electric-sql/index.js +72 -71
  668. package/umd/es6/persisters/persister-electric-sql/with-schemas/index.js +72 -71
  669. package/umd/es6/persisters/persister-expo-sqlite/index.js +72 -71
  670. package/umd/es6/persisters/persister-expo-sqlite/with-schemas/index.js +72 -71
  671. package/umd/es6/persisters/persister-file/index.js +37 -36
  672. package/umd/es6/persisters/persister-file/with-schemas/index.js +37 -36
  673. package/umd/es6/persisters/persister-indexed-db/index.js +42 -41
  674. package/umd/es6/persisters/persister-indexed-db/with-schemas/index.js +42 -41
  675. package/umd/es6/persisters/persister-libsql/index.js +72 -71
  676. package/umd/es6/persisters/persister-libsql/with-schemas/index.js +72 -71
  677. package/umd/es6/persisters/persister-partykit-client/index.js +37 -36
  678. package/umd/es6/persisters/persister-partykit-client/with-schemas/index.js +37 -36
  679. package/umd/es6/persisters/persister-partykit-server/index.js +15 -14
  680. package/umd/es6/persisters/persister-partykit-server/with-schemas/index.js +15 -14
  681. package/umd/es6/persisters/persister-pglite/index.js +91 -86
  682. package/umd/es6/persisters/persister-pglite/with-schemas/index.js +91 -86
  683. package/umd/es6/persisters/persister-postgres/index.js +94 -89
  684. package/umd/es6/persisters/persister-postgres/with-schemas/index.js +94 -89
  685. package/umd/es6/persisters/persister-powersync/index.js +79 -77
  686. package/umd/es6/persisters/persister-powersync/with-schemas/index.js +79 -77
  687. package/umd/es6/persisters/persister-remote/index.js +35 -34
  688. package/umd/es6/persisters/persister-remote/with-schemas/index.js +35 -34
  689. package/umd/es6/persisters/persister-sqlite-wasm/index.js +72 -71
  690. package/umd/es6/persisters/persister-sqlite-wasm/with-schemas/index.js +72 -71
  691. package/umd/es6/persisters/persister-sqlite3/index.js +72 -71
  692. package/umd/es6/persisters/persister-sqlite3/with-schemas/index.js +72 -71
  693. package/umd/es6/persisters/persister-yjs/index.js +47 -44
  694. package/umd/es6/persisters/persister-yjs/with-schemas/index.js +47 -44
  695. package/umd/es6/persisters/with-schemas/index.js +79 -78
  696. package/umd/es6/queries/index.js +37 -33
  697. package/umd/es6/queries/with-schemas/index.js +37 -33
  698. package/umd/es6/relationships/index.js +21 -20
  699. package/umd/es6/relationships/with-schemas/index.js +21 -20
  700. package/umd/es6/store/index.js +62 -48
  701. package/umd/es6/store/with-schemas/index.js +62 -48
  702. package/umd/es6/synchronizers/index.js +49 -46
  703. package/umd/es6/synchronizers/synchronizer-broadcast-channel/index.js +49 -46
  704. package/umd/es6/synchronizers/synchronizer-broadcast-channel/with-schemas/index.js +49 -46
  705. package/umd/es6/synchronizers/synchronizer-local/index.js +50 -47
  706. package/umd/es6/synchronizers/synchronizer-local/with-schemas/index.js +50 -47
  707. package/umd/es6/synchronizers/synchronizer-ws-client/index.js +53 -50
  708. package/umd/es6/synchronizers/synchronizer-ws-client/with-schemas/index.js +53 -50
  709. package/umd/es6/synchronizers/synchronizer-ws-server/index.js +67 -62
  710. package/umd/es6/synchronizers/synchronizer-ws-server/with-schemas/index.js +67 -62
  711. package/umd/es6/synchronizers/synchronizer-ws-server-durable-object/index.js +52 -49
  712. package/umd/es6/synchronizers/synchronizer-ws-server-durable-object/with-schemas/index.js +52 -49
  713. package/umd/es6/synchronizers/synchronizer-ws-server-simple/index.js +12 -11
  714. package/umd/es6/synchronizers/synchronizer-ws-server-simple/with-schemas/index.js +12 -11
  715. package/umd/es6/synchronizers/with-schemas/index.js +49 -46
  716. package/umd/es6/tools/index.js +31 -27
  717. package/umd/es6/tools/with-schemas/index.js +31 -27
  718. package/umd/es6/ui-react/index.js +39 -36
  719. package/umd/es6/ui-react/with-schemas/index.js +39 -36
  720. package/umd/es6/ui-react-dom/index.js +14 -14
  721. package/umd/es6/ui-react-dom/with-schemas/index.js +14 -14
  722. package/umd/es6/ui-react-inspector/index.js +92 -81
  723. package/umd/es6/ui-react-inspector/with-schemas/index.js +92 -81
  724. package/umd/es6/with-schemas/index.js +97 -86
  725. package/umd/index.js +59 -52
  726. package/umd/indexes/index.js +13 -8
  727. package/umd/indexes/with-schemas/index.js +13 -8
  728. package/umd/mergeable-store/index.js +39 -32
  729. package/umd/mergeable-store/with-schemas/index.js +39 -32
  730. package/umd/metrics/index.js +20 -15
  731. package/umd/metrics/with-schemas/index.js +20 -15
  732. package/umd/min/index.js +1 -1
  733. package/umd/min/index.js.gz +0 -0
  734. package/umd/min/mergeable-store/index.js +1 -1
  735. package/umd/min/mergeable-store/index.js.gz +0 -0
  736. package/umd/min/mergeable-store/with-schemas/index.js +1 -1
  737. package/umd/min/mergeable-store/with-schemas/index.js.gz +0 -0
  738. package/umd/min/persisters/index.js +1 -1
  739. package/umd/min/persisters/index.js.gz +0 -0
  740. package/umd/min/persisters/persister-automerge/index.js +1 -1
  741. package/umd/min/persisters/persister-automerge/index.js.gz +0 -0
  742. package/umd/min/persisters/persister-automerge/with-schemas/index.js +1 -1
  743. package/umd/min/persisters/persister-automerge/with-schemas/index.js.gz +0 -0
  744. package/umd/min/persisters/persister-cr-sqlite-wasm/index.js +1 -1
  745. package/umd/min/persisters/persister-cr-sqlite-wasm/index.js.gz +0 -0
  746. package/umd/min/persisters/persister-cr-sqlite-wasm/with-schemas/index.js +1 -1
  747. package/umd/min/persisters/persister-cr-sqlite-wasm/with-schemas/index.js.gz +0 -0
  748. package/umd/min/persisters/persister-electric-sql/index.js +1 -1
  749. package/umd/min/persisters/persister-electric-sql/index.js.gz +0 -0
  750. package/umd/min/persisters/persister-electric-sql/with-schemas/index.js +1 -1
  751. package/umd/min/persisters/persister-electric-sql/with-schemas/index.js.gz +0 -0
  752. package/umd/min/persisters/persister-expo-sqlite/index.js +1 -1
  753. package/umd/min/persisters/persister-expo-sqlite/index.js.gz +0 -0
  754. package/umd/min/persisters/persister-expo-sqlite/with-schemas/index.js +1 -1
  755. package/umd/min/persisters/persister-expo-sqlite/with-schemas/index.js.gz +0 -0
  756. package/umd/min/persisters/persister-libsql/index.js +1 -1
  757. package/umd/min/persisters/persister-libsql/index.js.gz +0 -0
  758. package/umd/min/persisters/persister-libsql/with-schemas/index.js +1 -1
  759. package/umd/min/persisters/persister-libsql/with-schemas/index.js.gz +0 -0
  760. package/umd/min/persisters/persister-pglite/index.js +1 -1
  761. package/umd/min/persisters/persister-pglite/index.js.gz +0 -0
  762. package/umd/min/persisters/persister-pglite/with-schemas/index.js +1 -1
  763. package/umd/min/persisters/persister-pglite/with-schemas/index.js.gz +0 -0
  764. package/umd/min/persisters/persister-postgres/index.js +1 -1
  765. package/umd/min/persisters/persister-postgres/index.js.gz +0 -0
  766. package/umd/min/persisters/persister-postgres/with-schemas/index.js +1 -1
  767. package/umd/min/persisters/persister-postgres/with-schemas/index.js.gz +0 -0
  768. package/umd/min/persisters/persister-powersync/index.js +1 -1
  769. package/umd/min/persisters/persister-powersync/index.js.gz +0 -0
  770. package/umd/min/persisters/persister-powersync/with-schemas/index.js +1 -1
  771. package/umd/min/persisters/persister-powersync/with-schemas/index.js.gz +0 -0
  772. package/umd/min/persisters/persister-sqlite-wasm/index.js +1 -1
  773. package/umd/min/persisters/persister-sqlite-wasm/index.js.gz +0 -0
  774. package/umd/min/persisters/persister-sqlite-wasm/with-schemas/index.js +1 -1
  775. package/umd/min/persisters/persister-sqlite-wasm/with-schemas/index.js.gz +0 -0
  776. package/umd/min/persisters/persister-sqlite3/index.js +1 -1
  777. package/umd/min/persisters/persister-sqlite3/index.js.gz +0 -0
  778. package/umd/min/persisters/persister-sqlite3/with-schemas/index.js +1 -1
  779. package/umd/min/persisters/persister-sqlite3/with-schemas/index.js.gz +0 -0
  780. package/umd/min/persisters/persister-yjs/index.js +1 -1
  781. package/umd/min/persisters/persister-yjs/index.js.gz +0 -0
  782. package/umd/min/persisters/persister-yjs/with-schemas/index.js +1 -1
  783. package/umd/min/persisters/persister-yjs/with-schemas/index.js.gz +0 -0
  784. package/umd/min/persisters/with-schemas/index.js +1 -1
  785. package/umd/min/persisters/with-schemas/index.js.gz +0 -0
  786. package/umd/min/queries/index.js +1 -1
  787. package/umd/min/queries/index.js.gz +0 -0
  788. package/umd/min/queries/with-schemas/index.js +1 -1
  789. package/umd/min/queries/with-schemas/index.js.gz +0 -0
  790. package/umd/min/store/index.js +1 -1
  791. package/umd/min/store/index.js.gz +0 -0
  792. package/umd/min/store/with-schemas/index.js +1 -1
  793. package/umd/min/store/with-schemas/index.js.gz +0 -0
  794. package/umd/min/ui-react-inspector/index.js +1 -1
  795. package/umd/min/ui-react-inspector/index.js.gz +0 -0
  796. package/umd/min/ui-react-inspector/with-schemas/index.js +1 -1
  797. package/umd/min/ui-react-inspector/with-schemas/index.js.gz +0 -0
  798. package/umd/min/with-schemas/index.js +1 -1
  799. package/umd/min/with-schemas/index.js.gz +0 -0
  800. package/umd/persisters/index.js +21 -16
  801. package/umd/persisters/persister-automerge/index.js +24 -17
  802. package/umd/persisters/persister-automerge/with-schemas/index.js +24 -17
  803. package/umd/persisters/persister-browser/index.js +15 -10
  804. package/umd/persisters/persister-browser/with-schemas/index.js +15 -10
  805. package/umd/persisters/persister-cr-sqlite-wasm/index.js +20 -15
  806. package/umd/persisters/persister-cr-sqlite-wasm/with-schemas/index.js +20 -15
  807. package/umd/persisters/persister-durable-object-storage/index.js +15 -10
  808. package/umd/persisters/persister-durable-object-storage/with-schemas/index.js +15 -10
  809. package/umd/persisters/persister-electric-sql/index.js +20 -15
  810. package/umd/persisters/persister-electric-sql/with-schemas/index.js +20 -15
  811. package/umd/persisters/persister-expo-sqlite/index.js +20 -15
  812. package/umd/persisters/persister-expo-sqlite/with-schemas/index.js +20 -15
  813. package/umd/persisters/persister-file/index.js +15 -10
  814. package/umd/persisters/persister-file/with-schemas/index.js +15 -10
  815. package/umd/persisters/persister-indexed-db/index.js +14 -9
  816. package/umd/persisters/persister-indexed-db/with-schemas/index.js +14 -9
  817. package/umd/persisters/persister-libsql/index.js +20 -15
  818. package/umd/persisters/persister-libsql/with-schemas/index.js +20 -15
  819. package/umd/persisters/persister-partykit-client/index.js +15 -10
  820. package/umd/persisters/persister-partykit-client/with-schemas/index.js +15 -10
  821. package/umd/persisters/persister-partykit-server/index.js +2 -2
  822. package/umd/persisters/persister-partykit-server/with-schemas/index.js +2 -2
  823. package/umd/persisters/persister-pglite/index.js +20 -15
  824. package/umd/persisters/persister-pglite/with-schemas/index.js +20 -15
  825. package/umd/persisters/persister-postgres/index.js +20 -15
  826. package/umd/persisters/persister-postgres/with-schemas/index.js +20 -15
  827. package/umd/persisters/persister-powersync/index.js +21 -16
  828. package/umd/persisters/persister-powersync/with-schemas/index.js +21 -16
  829. package/umd/persisters/persister-remote/index.js +13 -8
  830. package/umd/persisters/persister-remote/with-schemas/index.js +13 -8
  831. package/umd/persisters/persister-sqlite-wasm/index.js +20 -15
  832. package/umd/persisters/persister-sqlite-wasm/with-schemas/index.js +20 -15
  833. package/umd/persisters/persister-sqlite3/index.js +20 -15
  834. package/umd/persisters/persister-sqlite3/with-schemas/index.js +20 -15
  835. package/umd/persisters/persister-yjs/index.js +24 -17
  836. package/umd/persisters/persister-yjs/with-schemas/index.js +24 -17
  837. package/umd/persisters/with-schemas/index.js +21 -16
  838. package/umd/queries/index.js +17 -14
  839. package/umd/queries/with-schemas/index.js +17 -14
  840. package/umd/relationships/index.js +13 -8
  841. package/umd/relationships/with-schemas/index.js +13 -8
  842. package/umd/store/index.js +36 -26
  843. package/umd/store/with-schemas/index.js +36 -26
  844. package/umd/synchronizers/index.js +19 -14
  845. package/umd/synchronizers/synchronizer-broadcast-channel/index.js +19 -14
  846. package/umd/synchronizers/synchronizer-broadcast-channel/with-schemas/index.js +19 -14
  847. package/umd/synchronizers/synchronizer-local/index.js +19 -14
  848. package/umd/synchronizers/synchronizer-local/with-schemas/index.js +19 -14
  849. package/umd/synchronizers/synchronizer-ws-client/index.js +21 -16
  850. package/umd/synchronizers/synchronizer-ws-client/with-schemas/index.js +21 -16
  851. package/umd/synchronizers/synchronizer-ws-server/index.js +25 -20
  852. package/umd/synchronizers/synchronizer-ws-server/with-schemas/index.js +25 -20
  853. package/umd/synchronizers/synchronizer-ws-server-durable-object/index.js +22 -17
  854. package/umd/synchronizers/synchronizer-ws-server-durable-object/with-schemas/index.js +22 -17
  855. package/umd/synchronizers/synchronizer-ws-server-simple/index.js +1 -1
  856. package/umd/synchronizers/synchronizer-ws-server-simple/with-schemas/index.js +1 -1
  857. package/umd/synchronizers/with-schemas/index.js +19 -14
  858. package/umd/tools/index.js +7 -7
  859. package/umd/tools/with-schemas/index.js +7 -7
  860. package/umd/ui-react/index.js +13 -13
  861. package/umd/ui-react/with-schemas/index.js +13 -13
  862. package/umd/ui-react-dom/index.js +4 -4
  863. package/umd/ui-react-dom/with-schemas/index.js +4 -4
  864. package/umd/ui-react-inspector/index.js +41 -34
  865. package/umd/ui-react-inspector/with-schemas/index.js +41 -34
  866. package/umd/with-schemas/index.js +59 -52
  867. package/with-schemas/index.js +51 -49
@@ -5,7 +5,7 @@ const EMPTY_STRING = '';
5
5
  const T = 't';
6
6
  const V = 'v';
7
7
 
8
- const isUndefined = (thing) => thing == void 0;
8
+ const isUndefined = (thing) => thing == undefined;
9
9
  const ifNotUndefined = (value, then, otherwise) =>
10
10
  isUndefined(value) ? otherwise?.() : then(value);
11
11
  const isArray = (thing) => Array.isArray(thing);
@@ -42,6 +42,8 @@ const objNew = (entries = []) => object.fromEntries(entries);
42
42
  const objHas = (obj, id) => id in obj;
43
43
  const objToArray = (obj, cb) =>
44
44
  arrayMap(objEntries(obj), ([id, value]) => cb(value, id));
45
+ const objMap = (obj, cb) =>
46
+ objNew(objToArray(obj, (value, id) => [id, cb(value, id)]));
45
47
  const objSize = (obj) => size(objIds(obj));
46
48
  const objIsEmpty = (obj) => isObject(obj) && objSize(obj) == 0;
47
49
  const objEnsure = (obj, id, getDefaultValue) => {
@@ -157,7 +159,7 @@ const getListenerFunctions = (getThing) => {
157
159
  );
158
160
  const delListener = (id) =>
159
161
  ifNotUndefined(mapGet(allListeners, id), ([, idSetNode, idOrNulls]) => {
160
- visitTree(idSetNode, idOrNulls ?? [EMPTY_STRING], void 0, (idSet) => {
162
+ visitTree(idSetNode, idOrNulls ?? [EMPTY_STRING], undefined, (idSet) => {
161
163
  collDel(idSet, id);
162
164
  return collIsEmpty(idSet) ? 1 : 0;
163
165
  });
@@ -247,7 +249,7 @@ const createCustomPersister = (
247
249
  const setStatus = (newStatus) => {
248
250
  if (newStatus != status) {
249
251
  status = newStatus;
250
- callListeners(statusListeners, void 0, status);
252
+ callListeners(statusListeners, undefined, status);
251
253
  }
252
254
  };
253
255
  const run = async () => {
@@ -328,7 +330,7 @@ const createCustomPersister = (
328
330
  const stopAutoLoad = () => {
329
331
  if (autoLoadHandle) {
330
332
  delPersisterListener(autoLoadHandle);
331
- autoLoadHandle = void 0;
333
+ autoLoadHandle = undefined;
332
334
  }
333
335
  return persister;
334
336
  };
@@ -364,7 +366,7 @@ const createCustomPersister = (
364
366
  const stopAutoSave = () => {
365
367
  if (autoSaveListenerId) {
366
368
  store.delListener(autoSaveListenerId);
367
- autoSaveListenerId = void 0;
369
+ autoSaveListenerId = undefined;
368
370
  }
369
371
  return persister;
370
372
  };
@@ -472,7 +474,7 @@ const applyChangesToYDoc = (yContent, getContent, changes) => {
472
474
  let changesFailed = 1;
473
475
  ifNotUndefined(changes, ([cellChanges, valueChanges]) => {
474
476
  changesFailed = 0;
475
- objToArray(cellChanges, (table, tableId) =>
477
+ objMap(cellChanges, (table, tableId) =>
476
478
  changesFailed
477
479
  ? 0
478
480
  : isUndefined(table)
@@ -480,7 +482,7 @@ const applyChangesToYDoc = (yContent, getContent, changes) => {
480
482
  : ifNotUndefined(
481
483
  yTables.get(tableId),
482
484
  (yTable) =>
483
- objToArray(table, (row, rowId) =>
485
+ objMap(table, (row, rowId) =>
484
486
  changesFailed
485
487
  ? 0
486
488
  : isUndefined(row)
@@ -488,7 +490,7 @@ const applyChangesToYDoc = (yContent, getContent, changes) => {
488
490
  : ifNotUndefined(
489
491
  yTable.get(rowId),
490
492
  (yRow) =>
491
- objToArray(row, (cell, cellId) =>
493
+ objMap(row, (cell, cellId) =>
492
494
  isUndefined(cell)
493
495
  ? yRow.delete(cellId)
494
496
  : yRow.set(cellId, cell),
@@ -499,7 +501,7 @@ const applyChangesToYDoc = (yContent, getContent, changes) => {
499
501
  changesDidFail,
500
502
  ),
501
503
  );
502
- objToArray(valueChanges, (value, valueId) =>
504
+ objMap(valueChanges, (value, valueId) =>
503
505
  changesFailed
504
506
  ? 0
505
507
  : isUndefined(value)
@@ -509,7 +511,7 @@ const applyChangesToYDoc = (yContent, getContent, changes) => {
509
511
  });
510
512
  if (changesFailed) {
511
513
  const [tables, values] = getContent();
512
- yMapMatch(yTables, void 0, tables, (_, tableId, table) =>
514
+ yMapMatch(yTables, undefined, tables, (_, tableId, table) =>
513
515
  yMapMatch(yTables, tableId, table, (yTable, rowId, row) =>
514
516
  yMapMatch(yTable, rowId, row, (yRow, cellId, cell) => {
515
517
  if (yRow.get(cellId) !== cell) {
@@ -519,7 +521,7 @@ const applyChangesToYDoc = (yContent, getContent, changes) => {
519
521
  }),
520
522
  ),
521
523
  );
522
- yMapMatch(yValues, void 0, values, (_, valueId, value) => {
524
+ yMapMatch(yValues, undefined, values, (_, valueId, value) => {
523
525
  if (yValues.get(valueId) !== value) {
524
526
  yValues.set(valueId, value);
525
527
  }
@@ -532,7 +534,7 @@ const yMapMatch = (yMapOrParent, idInParent, obj, set) => {
532
534
  : (yMapOrParent.get(idInParent) ??
533
535
  yMapOrParent.set(idInParent, new Map$1()));
534
536
  let changed;
535
- objToArray(obj, (value, id) => {
537
+ objMap(obj, (value, id) => {
536
538
  if (set(yMap, id, value)) {
537
539
  changed = 1;
538
540
  }
@@ -558,12 +560,12 @@ const createYjsPersister = (
558
560
  const getPersisted = async () =>
559
561
  yContent.size
560
562
  ? [yContent.get(T).toJSON(), yContent.get(V).toJSON()]
561
- : void 0;
563
+ : undefined;
562
564
  const setPersisted = async (getContent, changes) =>
563
565
  yDoc.transact(() => applyChangesToYDoc(yContent, getContent, changes));
564
566
  const addPersisterListener = (listener) => {
565
567
  const observer = (events) =>
566
- listener(void 0, getChangesFromYDoc(yContent, events));
568
+ listener(undefined, getChangesFromYDoc(yContent, events));
567
569
  yContent.observeDeep(observer);
568
570
  return observer;
569
571
  };
@@ -12,7 +12,7 @@ const startInterval = (callback, sec, immediate) => {
12
12
  return setInterval(callback, sec * THOUSAND);
13
13
  };
14
14
  const stopInterval = clearInterval;
15
- const isUndefined = (thing) => thing == void 0;
15
+ const isUndefined = (thing) => thing == undefined;
16
16
  const ifNotUndefined = (value, then, otherwise) =>
17
17
  isUndefined(value) ? otherwise?.() : then(value);
18
18
  const isString = (thing) => getTypeOf(thing) == STRING;
@@ -173,7 +173,7 @@ const getListenerFunctions = (getThing) => {
173
173
  );
174
174
  const delListener = (id) =>
175
175
  ifNotUndefined(mapGet(allListeners, id), ([, idSetNode, idOrNulls]) => {
176
- visitTree(idSetNode, idOrNulls ?? [EMPTY_STRING], void 0, (idSet) => {
176
+ visitTree(idSetNode, idOrNulls ?? [EMPTY_STRING], undefined, (idSet) => {
177
177
  collDel(idSet, id);
178
178
  return collIsEmpty(idSet) ? 1 : 0;
179
179
  });
@@ -273,7 +273,7 @@ const createCustomPersister = (
273
273
  const setStatus = (newStatus) => {
274
274
  if (newStatus != status) {
275
275
  status = newStatus;
276
- callListeners(statusListeners, void 0, status);
276
+ callListeners(statusListeners, undefined, status);
277
277
  }
278
278
  };
279
279
  const run = async () => {
@@ -354,7 +354,7 @@ const createCustomPersister = (
354
354
  const stopAutoLoad = () => {
355
355
  if (autoLoadHandle) {
356
356
  delPersisterListener(autoLoadHandle);
357
- autoLoadHandle = void 0;
357
+ autoLoadHandle = undefined;
358
358
  }
359
359
  return persister;
360
360
  };
@@ -390,7 +390,7 @@ const createCustomPersister = (
390
390
  const stopAutoSave = () => {
391
391
  if (autoSaveListenerId) {
392
392
  store.delListener(autoSaveListenerId);
393
- autoSaveListenerId = void 0;
393
+ autoSaveListenerId = undefined;
394
394
  }
395
395
  return persister;
396
396
  };
@@ -466,9 +466,9 @@ const getPlaceholders = (array, offset = [1]) =>
466
466
  const jsonString = JSON.stringify;
467
467
  const jsonParse = JSON.parse;
468
468
  const jsonStringWithUndefined = (obj) =>
469
- jsonString(obj, (_key, value) => (value === void 0 ? UNDEFINED : value));
469
+ jsonString(obj, (_key, value) => (value === undefined ? UNDEFINED : value));
470
470
  const jsonParseWithUndefined = (str) =>
471
- jsonParse(str, (_key, value) => (value === UNDEFINED ? void 0 : value));
471
+ jsonParse(str, (_key, value) => (value === UNDEFINED ? undefined : value));
472
472
 
473
473
  const getCommandFunctions = (
474
474
  databaseExecuteCommand,
@@ -518,7 +518,7 @@ const getCommandFunctions = (
518
518
  partial = false,
519
519
  ) => {
520
520
  const settingColumnNameSet = setNew();
521
- objToArray(content ?? {}, (contentRow) =>
521
+ objMap(content ?? {}, (contentRow) =>
522
522
  arrayMap(objIds(contentRow ?? {}), (cellOrValueId) =>
523
523
  setAdd(settingColumnNameSet, cellOrValueId),
524
524
  ),
@@ -642,7 +642,7 @@ const getCommandFunctions = (
642
642
  );
643
643
  const rows = {};
644
644
  const deleteRowIds = [];
645
- objToArray(content ?? {}, (row, rowId) => {
645
+ objMap(content ?? {}, (row, rowId) => {
646
646
  rows[rowId] = arrayMap(changingColumnNames, (cellId) =>
647
647
  encode ? encode(row?.[cellId]) : row?.[cellId],
648
648
  );
@@ -885,7 +885,7 @@ const createTabularPersister = (
885
885
  const values = await loadValues();
886
886
  return !objIsEmpty(tables) || !isUndefined(values)
887
887
  ? [tables, values]
888
- : void 0;
888
+ : undefined;
889
889
  });
890
890
  const setPersisted = async (getContent, changes) =>
891
891
  await transaction(async () => {
@@ -955,7 +955,7 @@ const getDefaultedTabularConfigMap = (
955
955
  then,
956
956
  ) => {
957
957
  const configMap = mapNew();
958
- objToArray(configsObj, (configObj, id) => {
958
+ objMap(configsObj, (configObj, id) => {
959
959
  const defaultedConfig = slice(
960
960
  objValues(
961
961
  objMerge(
@@ -1107,7 +1107,7 @@ const createCustomSqlitePersister = (
1107
1107
  upsert,
1108
1108
  (cellOrValue) =>
1109
1109
  cellOrValue === true ? 1 : cellOrValue === false ? 0 : cellOrValue,
1110
- void 0,
1110
+ undefined,
1111
1111
  );
1112
1112
  };
1113
1113
 
@@ -1198,7 +1198,7 @@ const createCustomPostgreSqlPersister = (
1198
1198
  thing,
1199
1199
  getThing,
1200
1200
  'text',
1201
- void 0,
1201
+ undefined,
1202
1202
  (cellOrValue) => jsonString(cellOrValue),
1203
1203
  (field) => jsonParse(field),
1204
1204
  );
package/queries/index.js CHANGED
@@ -25,7 +25,7 @@ const math = Math;
25
25
  const mathMax = math.max;
26
26
  const mathMin = math.min;
27
27
  const isFiniteNumber = isFinite;
28
- const isUndefined = (thing) => thing == void 0;
28
+ const isUndefined = (thing) => thing == undefined;
29
29
  const ifNotUndefined = (value, then, otherwise) =>
30
30
  isUndefined(value) ? otherwise?.() : then(value);
31
31
  const isTypeStringOrBoolean = (type) => type == STRING || type == BOOLEAN;
@@ -33,7 +33,7 @@ const isFunction = (thing) => getTypeOf(thing) == FUNCTION;
33
33
  const isArray = (thing) => Array.isArray(thing);
34
34
  const slice = (arrayOrString, start, end) => arrayOrString.slice(start, end);
35
35
  const size = (arrayOrString) => arrayOrString.length;
36
- const getUndefined = () => void 0;
36
+ const getUndefined = () => undefined;
37
37
 
38
38
  const arrayEvery = (array, cb) => array.every(cb);
39
39
  const arrayIsEqual = (array1, array2) =>
@@ -49,8 +49,11 @@ const arrayPush = (array, ...values) => array.push(...values);
49
49
  const object = Object;
50
50
  const objEntries = object.entries;
51
51
  const objFreeze = object.freeze;
52
+ const objNew = (entries = []) => object.fromEntries(entries);
52
53
  const objToArray = (obj, cb) =>
53
54
  arrayMap(objEntries(obj), ([id, value]) => cb(value, id));
55
+ const objMap = (obj, cb) =>
56
+ objNew(objToArray(obj, (value, id) => [id, cb(value, id)]));
54
57
 
55
58
  const collSize = (coll) => coll?.size ?? 0;
56
59
  const collHas = (coll, keyOrValue) => coll?.has(keyOrValue) ?? false;
@@ -120,9 +123,9 @@ const numericAggregators = /* @__PURE__ */ mapNew([
120
123
  [
121
124
  (numbers) => mathMax(...numbers),
122
125
  (metric, add) => mathMax(add, metric),
123
- (metric, remove) => (remove == metric ? void 0 : metric),
126
+ (metric, remove) => (remove == metric ? undefined : metric),
124
127
  (metric, add, remove) =>
125
- remove == metric ? void 0 : mathMax(add, metric),
128
+ remove == metric ? undefined : mathMax(add, metric),
126
129
  ],
127
130
  ],
128
131
  [
@@ -130,9 +133,9 @@ const numericAggregators = /* @__PURE__ */ mapNew([
130
133
  [
131
134
  (numbers) => mathMin(...numbers),
132
135
  (metric, add) => mathMin(add, metric),
133
- (metric, remove) => (remove == metric ? void 0 : metric),
136
+ (metric, remove) => (remove == metric ? undefined : metric),
134
137
  (metric, add, remove) =>
135
- remove == metric ? void 0 : mathMin(add, metric),
138
+ remove == metric ? undefined : mathMin(add, metric),
136
139
  ],
137
140
  ],
138
141
  [
@@ -154,7 +157,7 @@ const getAggregateValue = (
154
157
  force = false,
155
158
  ) => {
156
159
  if (collIsEmpty(newValues)) {
157
- return void 0;
160
+ return undefined;
158
161
  }
159
162
  const [aggregate, aggregateAdd, aggregateRemove, aggregateReplace] =
160
163
  aggregators;
@@ -179,7 +182,7 @@ const getCellOrValueType = (cellOrValue) => {
179
182
  return isTypeStringOrBoolean(type) ||
180
183
  (type == NUMBER && isFiniteNumber(cellOrValue))
181
184
  ? type
182
- : void 0;
185
+ : undefined;
183
186
  };
184
187
  const setOrDelCell = (store, tableId, rowId, cellId, cell) =>
185
188
  isUndefined(cell)
@@ -255,7 +258,7 @@ const getDefinableFunctions = (
255
258
  const oldRowValue = mapGet(rowValues, rowId);
256
259
  const newRowValue = hasRow(tableId, rowId)
257
260
  ? validateRowValue(getRowValue(getCell, rowId))
258
- : void 0;
261
+ : undefined;
259
262
  if (
260
263
  !(
261
264
  oldRowValue === newRowValue ||
@@ -270,7 +273,7 @@ const getDefinableFunctions = (
270
273
  const oldSortKey = mapGet(sortKeys, rowId);
271
274
  const newSortKey = hasRow(tableId, rowId)
272
275
  ? getSortKey(getCell, rowId)
273
- : void 0;
276
+ : undefined;
274
277
  if (oldSortKey != newSortKey) {
275
278
  mapSet(changedSortKeys, rowId, newSortKey);
276
279
  }
@@ -541,7 +544,7 @@ const createQueries = getCreateFunction((store) => {
541
544
  mapNew,
542
545
  );
543
546
  const oldLeafCell = mapGet(selectedCell, selectedRowId);
544
- const newLeafCell = forceRemove ? void 0 : newCell;
547
+ const newLeafCell = forceRemove ? undefined : newCell;
545
548
  if (oldLeafCell !== newLeafCell) {
546
549
  const oldNewSet = setNew([[oldLeafCell, newLeafCell]]);
547
550
  const oldLength = collSize(selectedCell);
@@ -617,7 +620,7 @@ const createQueries = getCreateFunction((store) => {
617
620
  });
618
621
  if (changedLeaf) {
619
622
  writeGroupRow(
620
- visitTree(tree, oldPath, void 0, ([, selectedRowIds]) => {
623
+ visitTree(tree, oldPath, undefined, ([, selectedRowIds]) => {
621
624
  collDel(selectedRowIds, selectedRowId);
622
625
  return collIsEmpty(selectedRowIds);
623
626
  }),
@@ -643,7 +646,7 @@ const createQueries = getCreateFunction((store) => {
643
646
  selectedCellId,
644
647
  )),
645
648
  );
646
- return [mapNew(), setNew(), void 0, groupRow];
649
+ return [mapNew(), setNew(), undefined, groupRow];
647
650
  },
648
651
  ([, selectedRowIds]) => {
649
652
  setAdd(selectedRowIds, selectedRowId);
@@ -780,7 +783,7 @@ const createQueries = getCreateFunction((store) => {
780
783
  destroy,
781
784
  getListenerStats,
782
785
  };
783
- objToArray(
786
+ objMap(
784
787
  {
785
788
  [TABLE]: [1, 1],
786
789
  [TABLE + CELL_IDS]: [0, 1],
@@ -25,7 +25,7 @@ const math = Math;
25
25
  const mathMax = math.max;
26
26
  const mathMin = math.min;
27
27
  const isFiniteNumber = isFinite;
28
- const isUndefined = (thing) => thing == void 0;
28
+ const isUndefined = (thing) => thing == undefined;
29
29
  const ifNotUndefined = (value, then, otherwise) =>
30
30
  isUndefined(value) ? otherwise?.() : then(value);
31
31
  const isTypeStringOrBoolean = (type) => type == STRING || type == BOOLEAN;
@@ -33,7 +33,7 @@ const isFunction = (thing) => getTypeOf(thing) == FUNCTION;
33
33
  const isArray = (thing) => Array.isArray(thing);
34
34
  const slice = (arrayOrString, start, end) => arrayOrString.slice(start, end);
35
35
  const size = (arrayOrString) => arrayOrString.length;
36
- const getUndefined = () => void 0;
36
+ const getUndefined = () => undefined;
37
37
 
38
38
  const arrayEvery = (array, cb) => array.every(cb);
39
39
  const arrayIsEqual = (array1, array2) =>
@@ -49,8 +49,11 @@ const arrayPush = (array, ...values) => array.push(...values);
49
49
  const object = Object;
50
50
  const objEntries = object.entries;
51
51
  const objFreeze = object.freeze;
52
+ const objNew = (entries = []) => object.fromEntries(entries);
52
53
  const objToArray = (obj, cb) =>
53
54
  arrayMap(objEntries(obj), ([id, value]) => cb(value, id));
55
+ const objMap = (obj, cb) =>
56
+ objNew(objToArray(obj, (value, id) => [id, cb(value, id)]));
54
57
 
55
58
  const collSize = (coll) => coll?.size ?? 0;
56
59
  const collHas = (coll, keyOrValue) => coll?.has(keyOrValue) ?? false;
@@ -120,9 +123,9 @@ const numericAggregators = /* @__PURE__ */ mapNew([
120
123
  [
121
124
  (numbers) => mathMax(...numbers),
122
125
  (metric, add) => mathMax(add, metric),
123
- (metric, remove) => (remove == metric ? void 0 : metric),
126
+ (metric, remove) => (remove == metric ? undefined : metric),
124
127
  (metric, add, remove) =>
125
- remove == metric ? void 0 : mathMax(add, metric),
128
+ remove == metric ? undefined : mathMax(add, metric),
126
129
  ],
127
130
  ],
128
131
  [
@@ -130,9 +133,9 @@ const numericAggregators = /* @__PURE__ */ mapNew([
130
133
  [
131
134
  (numbers) => mathMin(...numbers),
132
135
  (metric, add) => mathMin(add, metric),
133
- (metric, remove) => (remove == metric ? void 0 : metric),
136
+ (metric, remove) => (remove == metric ? undefined : metric),
134
137
  (metric, add, remove) =>
135
- remove == metric ? void 0 : mathMin(add, metric),
138
+ remove == metric ? undefined : mathMin(add, metric),
136
139
  ],
137
140
  ],
138
141
  [
@@ -154,7 +157,7 @@ const getAggregateValue = (
154
157
  force = false,
155
158
  ) => {
156
159
  if (collIsEmpty(newValues)) {
157
- return void 0;
160
+ return undefined;
158
161
  }
159
162
  const [aggregate, aggregateAdd, aggregateRemove, aggregateReplace] =
160
163
  aggregators;
@@ -179,7 +182,7 @@ const getCellOrValueType = (cellOrValue) => {
179
182
  return isTypeStringOrBoolean(type) ||
180
183
  (type == NUMBER && isFiniteNumber(cellOrValue))
181
184
  ? type
182
- : void 0;
185
+ : undefined;
183
186
  };
184
187
  const setOrDelCell = (store, tableId, rowId, cellId, cell) =>
185
188
  isUndefined(cell)
@@ -255,7 +258,7 @@ const getDefinableFunctions = (
255
258
  const oldRowValue = mapGet(rowValues, rowId);
256
259
  const newRowValue = hasRow(tableId, rowId)
257
260
  ? validateRowValue(getRowValue(getCell, rowId))
258
- : void 0;
261
+ : undefined;
259
262
  if (
260
263
  !(
261
264
  oldRowValue === newRowValue ||
@@ -270,7 +273,7 @@ const getDefinableFunctions = (
270
273
  const oldSortKey = mapGet(sortKeys, rowId);
271
274
  const newSortKey = hasRow(tableId, rowId)
272
275
  ? getSortKey(getCell, rowId)
273
- : void 0;
276
+ : undefined;
274
277
  if (oldSortKey != newSortKey) {
275
278
  mapSet(changedSortKeys, rowId, newSortKey);
276
279
  }
@@ -541,7 +544,7 @@ const createQueries = getCreateFunction((store) => {
541
544
  mapNew,
542
545
  );
543
546
  const oldLeafCell = mapGet(selectedCell, selectedRowId);
544
- const newLeafCell = forceRemove ? void 0 : newCell;
547
+ const newLeafCell = forceRemove ? undefined : newCell;
545
548
  if (oldLeafCell !== newLeafCell) {
546
549
  const oldNewSet = setNew([[oldLeafCell, newLeafCell]]);
547
550
  const oldLength = collSize(selectedCell);
@@ -617,7 +620,7 @@ const createQueries = getCreateFunction((store) => {
617
620
  });
618
621
  if (changedLeaf) {
619
622
  writeGroupRow(
620
- visitTree(tree, oldPath, void 0, ([, selectedRowIds]) => {
623
+ visitTree(tree, oldPath, undefined, ([, selectedRowIds]) => {
621
624
  collDel(selectedRowIds, selectedRowId);
622
625
  return collIsEmpty(selectedRowIds);
623
626
  }),
@@ -643,7 +646,7 @@ const createQueries = getCreateFunction((store) => {
643
646
  selectedCellId,
644
647
  )),
645
648
  );
646
- return [mapNew(), setNew(), void 0, groupRow];
649
+ return [mapNew(), setNew(), undefined, groupRow];
647
650
  },
648
651
  ([, selectedRowIds]) => {
649
652
  setAdd(selectedRowIds, selectedRowId);
@@ -780,7 +783,7 @@ const createQueries = getCreateFunction((store) => {
780
783
  destroy,
781
784
  getListenerStats,
782
785
  };
783
- objToArray(
786
+ objMap(
784
787
  {
785
788
  [TABLE]: [1, 1],
786
789
  [TABLE + CELL_IDS]: [0, 1],
package/readme.md CHANGED
@@ -1,4 +1,4 @@
1
- <section id="hero"><h2 id="the-reactive-data-store-for-local-first-apps">The <em>reactive</em> data store for <span>local-first apps</span>.</h2></section><p><a href="https://tinybase.org/guides/releases/#v5-4"><em>NEW!</em> v5.4 release</a></p><p><span id="one-with">&quot;The One With Durable Objects!&quot;</span></p><p><a class="start" href="https://tinybase.org/guides/the-basics/getting-started/">Get started</a></p><p><a href="https://tinybase.org/demos/">Try the demos</a></p><p><a href="https://tinybase.org/api/store/interfaces/store/store/">Read the docs</a></p><hr><section><h2 id="it-s-reactive">It&#x27;s <em>Reactive</em></h2><p>TinyBase lets you <a href="#register-granular-listeners">listen to changes</a> made to any part of your data. This means your app will be fast, since you only spend rendering cycles on things that change. The optional <a href="#call-hooks-to-bind-to-data">bindings to React</a> and <a href="#pre-built-reactive-components">pre-built components</a> let you easily build fully reactive UIs on top of TinyBase. You even get a built-in <a href="#set-checkpoints-for-an-undo-stack">undo stack</a>, and <a href="#an-inspector-for-your-data">developer tools</a>!</p></section><section><h2 id="it-s-database-like">It&#x27;s <em>Database-Like</em></h2><p>Consumer app? Enterprise app? Or even a game? Model <a href="#start-with-a-simple-key-value-store">key-value data</a> and <a href="#level-up-to-use-tabular-data">tabular data</a> with optional typed <a href="#apply-schemas-to-tables-values">schematization</a>, whatever its data structures. There are built-in <a href="#create-indexes-for-fast-lookups">indexing</a>, <a href="#define-metrics-and-aggregations">metric aggregation</a>, and tabular <a href="#model-table-relationships">relationships</a> APIs - and a powerful <a href="#build-complex-queries-with-tinyql">query engine</a> to select, join, filter, and group data (reactively!) without SQL.</p></section><section><h2 id="it-synchronizes">It <em>Synchronizes</em></h2><p>TinyBase has <a href="#synchronize-between-devices">native CRDT</a> support, meaning that you can deterministically <a href="https://tinybase.org/guides/synchronization/">synchronize</a> and merge data across multiple sources, clients, and servers. And although TinyBase is an in-memory data store, you can easily <a href="#persist-to-storage-databases-more">persist</a> your data to file, <a href="https://tinybase.org/api/persister-browser">browser storage</a>, <a href="https://tinybase.org/api/persister-indexed-db">IndexedDB</a>, <a href="https://tinybase.org/guides/persistence/database-persistence/">SQLite or PostgreSQL databases</a>, and <a href="https://tinybase.org/guides/persistence/third-party-crdt-persistence/">more</a>.</p></section><section><h2 id="it-s-built-for-a-local-first-world">It&#x27;s Built For A <em>Local-First</em> World</h2><p>TinyBase works anywhere that JavaScript does, but it&#x27;s especially great for local-first apps: where data is stored locally on the user&#x27;s device and that can be run offline. It&#x27;s tiny by name, tiny by nature: just <a href="#did-we-say-tiny">5.3kB - 11.4kB</a> and with no dependencies - yet <a href="#well-tested-and-documented">100% tested</a>, <a href="https://tinybase.org/guides/the-basics/getting-started/">fully documented</a>, and of course, <a href="https://github.com/tinyplex/tinybase">open source</a>!</p></section><hr><section id="friends"><h2 id="tinybase-works-great-on-its-own-but-also-plays-well-with-friends">TinyBase works great on its own, but also plays well with friends.</h2><div><a href="https://tinybase.org/guides/building-uis/getting-started-with-ui-react"><embed src="https://tinybase.org/react.svg">React</a></div><div><a href="https://tinybase.org/api/persister-indexed-db/functions/creation/createindexeddbpersister"><embed src="https://tinybase.org/indexeddb.svg">IndexedDB</a></div><div><a href="https://tinybase.org/guides/schemas-and-persistence/database-persistence"><embed src="https://tinybase.org/postgresql.svg">PostgreSQL</a></div><div><a href="https://tinybase.org/guides/schemas-and-persistence/database-persistence"><embed src="https://tinybase.org/pglite.svg">PGlite</a></div><div><a href="https://tinybase.org/guides/schemas-and-persistence/database-persistence"><embed src="https://tinybase.org/sqlite.svg">SQLite</a></div><div><a href="https://tinybase.org/guides/schemas-and-persistence/database-persistence"><embed src="https://tinybase.org/expo.svg">Expo SQLite</a></div><div><a href="https://tinybase.org/guides/integrations/cloudflare-durable-objects"><embed src="https://tinybase.org/cloudflare.svg">Cloudflare</a></div><div><a href="https://tinybase.org/guides/schemas-and-persistence/database-persistence"><embed src="https://tinybase.org/electric.svg">ElectricSQL</a></div><div><a href="https://tinybase.org/guides/schemas-and-persistence/database-persistence"><embed src="https://tinybase.org/turso.svg">Turso</a></div><div><a href="https://tinybase.org/guides/schemas-and-persistence/database-persistence"><embed src="https://tinybase.org/powersync.svg">PowerSync</a></div><div><a href="https://tinybase.org/api/persister-partykit-client"><embed src="https://tinybase.org/partykit.svg">PartyKit</a></div><div><a href="https://tinybase.org/api/persister-yjs/functions/creation/createyjspersister"><embed src="https://tinybase.org/yjs.svg">YJS</a></div><div><a href="https://tinybase.org/api/persister-cr-sqlite-wasm"><img src="https://tinybase.org/crsqlite.png"> CR-SQLite</a></div><div><a href="https://tinybase.org/api/persister-automerge"><embed src="https://tinybase.org/automerge.svg">Automerge</a></div><p>(Baffled by all these logos? Check out our <a href="https://tinybase.org/guides/the-basics/architectural-options">architectural options</a> guide to make sense of it all!)</p></section><hr><section id="follow"><a href="https://github.com/tinyplex/tinybase" target="_blank"><img src="https://img.shields.io/github/stars/tinyplex/tinybase?style=for-the-badge&amp;logo=GitHub&amp;logoColor=%23fff&amp;label=GitHub&amp;labelColor=%23d81b60&amp;color=%23333"> </a><a href="https://bsky.app/profile/tinybase.bsky.social"><img src="https://img.shields.io/badge/Bluesky-Follow-blue?style=for-the-badge&amp;logo=bluesky&amp;logoColor=%23fff&amp;color=%23333&amp;labelColor=%230285FF"> </a><a href="https://x.com/tinybasejs" target="_blank"><img src="https://img.shields.io/badge/%2F%20Twitter-Follow-blue?style=for-the-badge&amp;logo=x&amp;logoColor=%23fff&amp;color=%23333&amp;labelColor=%23000"> </a><a href="https://discord.com/invite/mGz3mevwP8" target="_blank"><img src="https://img.shields.io/discord/1027918215323590676?style=for-the-badge&amp;logo=discord&amp;logoColor=%23fff&amp;label=Discord&amp;labelColor=%233131e8&amp;color=%23333"></a><br><a href="https://github.com/tinyplex/tinybase/discussions" target="_blank"><img src="https://img.shields.io/github/discussions/tinyplex/tinybase?style=for-the-badge&amp;logo=GitHub&amp;logoColor=%23fff&amp;label=Ideas&amp;labelColor=%23d81b60&amp;color=%23333"> </a><a href="https://github.com/tinyplex/tinybase/issues" target="_blank"><img src="https://img.shields.io/github/issues/tinyplex/tinybase?style=for-the-badge&amp;logo=GitHub&amp;logoColor=%23fff&amp;label=Issues&amp;labelColor=%23d81b60&amp;color=%23333"> </a><a href="#well-tested-and-documented"><img src="https://img.shields.io/badge/Tests-100%25-green?style=for-the-badge&amp;logo=jest&amp;logoColor=%23fff&amp;color=%23333&amp;labelColor=%2387c305"> </a><a href="https://www.npmjs.com/package/tinybase/v/5.4.4" target="_blank"><img src="https://img.shields.io/npm/v/tinybase?style=for-the-badge&amp;logo=npm&amp;logoColor=%23fff&amp;labelColor=%23bd0005&amp;color=%23333"></a></section><hr><section><h2 id="start-with-a-simple-key-value-store">Start with a simple key-value store.</h2><p>Creating a <a href="https://tinybase.org/api/store/interfaces/store/store/"><code>Store</code></a> requires just a simple call to the <a href="https://tinybase.org/api/store/functions/creation/createstore/"><code>createStore</code></a> function. Once you have one, you can easily set <a href="https://tinybase.org/api/store/type-aliases/store/values/"><code>Values</code></a> in it by unique <a href="https://tinybase.org/api/common/type-aliases/identity/id/"><code>Id</code></a>. And of course you can easily get them back out again.</p><p>Read more about using keyed value data in <a href="https://tinybase.org/guides/the-basics/">The Basics</a> guide.</p></section>
1
+ <section id="hero"><h2 id="the-reactive-data-store-for-local-first-apps">The <em>reactive</em> data store for <span>local-first apps</span>.</h2></section><p><a href="https://tinybase.org/guides/releases/#v5-4"><em>NEW!</em> v5.4 release</a></p><p><span id="one-with">&quot;The One With Durable Objects!&quot;</span></p><p><a class="start" href="https://tinybase.org/guides/the-basics/getting-started/">Get started</a></p><p><a href="https://tinybase.org/demos/">Try the demos</a></p><p><a href="https://tinybase.org/api/store/interfaces/store/store/">Read the docs</a></p><hr><section><h2 id="it-s-reactive">It&#x27;s <em>Reactive</em></h2><p>TinyBase lets you <a href="#register-granular-listeners">listen to changes</a> made to any part of your data. This means your app will be fast, since you only spend rendering cycles on things that change. The optional <a href="#call-hooks-to-bind-to-data">bindings to React</a> and <a href="#pre-built-reactive-components">pre-built components</a> let you easily build fully reactive UIs on top of TinyBase. You even get a built-in <a href="#set-checkpoints-for-an-undo-stack">undo stack</a>, and <a href="#an-inspector-for-your-data">developer tools</a>!</p></section><section><h2 id="it-s-database-like">It&#x27;s <em>Database-Like</em></h2><p>Consumer app? Enterprise app? Or even a game? Model <a href="#start-with-a-simple-key-value-store">key-value data</a> and <a href="#level-up-to-use-tabular-data">tabular data</a> with optional typed <a href="#apply-schemas-to-tables-values">schematization</a>, whatever its data structures. There are built-in <a href="#create-indexes-for-fast-lookups">indexing</a>, <a href="#define-metrics-and-aggregations">metric aggregation</a>, and tabular <a href="#model-table-relationships">relationships</a> APIs - and a powerful <a href="#build-complex-queries-with-tinyql">query engine</a> to select, join, filter, and group data (reactively!) without SQL.</p></section><section><h2 id="it-synchronizes">It <em>Synchronizes</em></h2><p>TinyBase has <a href="#synchronize-between-devices">native CRDT</a> support, meaning that you can deterministically <a href="https://tinybase.org/guides/synchronization/">synchronize</a> and merge data across multiple sources, clients, and servers. And although TinyBase is an in-memory data store, you can easily <a href="#persist-to-storage-databases-more">persist</a> your data to file, <a href="https://tinybase.org/api/persister-browser">browser storage</a>, <a href="https://tinybase.org/api/persister-indexed-db">IndexedDB</a>, <a href="https://tinybase.org/guides/persistence/database-persistence/">SQLite or PostgreSQL databases</a>, and <a href="https://tinybase.org/guides/persistence/third-party-crdt-persistence/">more</a>.</p></section><section><h2 id="it-s-built-for-a-local-first-world">It&#x27;s Built For A <em>Local-First</em> World</h2><p>TinyBase works anywhere that JavaScript does, but it&#x27;s especially great for local-first apps: where data is stored locally on the user&#x27;s device and that can be run offline. It&#x27;s tiny by name, tiny by nature: just <a href="#did-we-say-tiny">5.3kB - 11.4kB</a> and with no dependencies - yet <a href="#well-tested-and-documented">100% tested</a>, <a href="https://tinybase.org/guides/the-basics/getting-started/">fully documented</a>, and of course, <a href="https://github.com/tinyplex/tinybase">open source</a>!</p></section><hr><section id="friends"><h2 id="tinybase-works-great-on-its-own-but-also-plays-well-with-friends">TinyBase works great on its own, but also plays well with friends.</h2><div><a href="https://tinybase.org/guides/building-uis/getting-started-with-ui-react"><img src="https://tinybase.org/react.svg?asImg" width="48"> React</a></div><div><a href="https://tinybase.org/api/persister-indexed-db/functions/creation/createindexeddbpersister"><img src="https://tinybase.org/indexeddb.svg?asImg" width="48"> IndexedDB</a></div><div><a href="https://tinybase.org/guides/schemas-and-persistence/database-persistence"><img src="https://tinybase.org/postgresql.svg?asImg" width="48"> PostgreSQL</a></div><div><a href="https://tinybase.org/guides/schemas-and-persistence/database-persistence"><img src="https://tinybase.org/pglite.svg?asImg" width="48"> PGlite</a></div><div><a href="https://tinybase.org/guides/schemas-and-persistence/database-persistence"><img src="https://tinybase.org/sqlite.svg?asImg" width="48"> SQLite</a></div><div><a href="https://tinybase.org/guides/schemas-and-persistence/database-persistence"><img src="https://tinybase.org/expo.svg?asImg" width="48"> Expo SQLite</a></div><div><a href="https://tinybase.org/guides/integrations/cloudflare-durable-objects"><img src="https://tinybase.org/cloudflare.svg?asImg" width="48"> Cloudflare</a></div><div><a href="https://tinybase.org/guides/schemas-and-persistence/database-persistence"><img src="https://tinybase.org/electric.svg?asImg" width="48"> ElectricSQL</a></div><div><a href="https://tinybase.org/guides/schemas-and-persistence/database-persistence"><img src="https://tinybase.org/turso.svg?asImg" width="48"> Turso</a></div><div><a href="https://tinybase.org/guides/schemas-and-persistence/database-persistence"><img src="https://tinybase.org/powersync.svg?asImg" width="48"> PowerSync</a></div><div><a href="https://tinybase.org/api/persister-partykit-client"><img src="https://tinybase.org/partykit.svg?asImg" width="48"> PartyKit</a></div><div><a href="https://tinybase.org/api/persister-yjs/functions/creation/createyjspersister"><img src="https://tinybase.org/yjs.svg?asImg" width="48"> YJS</a></div><div><a href="https://tinybase.org/api/persister-cr-sqlite-wasm"><img src="https://tinybase.org/crsqlite.png" width="48"> CR-SQLite</a></div><div><a href="https://tinybase.org/api/persister-automerge"><img src="https://tinybase.org/automerge.svg?asImg" width="48"> Automerge</a></div><p>(Baffled by all these logos? Check out our <a href="https://tinybase.org/guides/the-basics/architectural-options">architectural options</a> guide to make sense of it all!)</p></section><hr><section id="follow"><a href="https://github.com/tinyplex/tinybase" target="_blank"><img src="https://img.shields.io/github/stars/tinyplex/tinybase?style=for-the-badge&amp;logo=GitHub&amp;logoColor=%23fff&amp;label=GitHub&amp;labelColor=%23d81b60&amp;color=%23333"> </a><a href="https://bsky.app/profile/tinybase.bsky.social"><img src="https://img.shields.io/badge/Bluesky-Follow-blue?style=for-the-badge&amp;logo=bluesky&amp;logoColor=%23fff&amp;color=%23333&amp;labelColor=%230285FF"> </a><a href="https://x.com/tinybasejs" target="_blank"><img src="https://img.shields.io/badge/%2F%20Twitter-Follow-blue?style=for-the-badge&amp;logo=x&amp;logoColor=%23fff&amp;color=%23333&amp;labelColor=%23000"> </a><a href="https://discord.com/invite/mGz3mevwP8" target="_blank"><img src="https://img.shields.io/discord/1027918215323590676?style=for-the-badge&amp;logo=discord&amp;logoColor=%23fff&amp;label=Discord&amp;labelColor=%233131e8&amp;color=%23333"></a><br><a href="https://github.com/tinyplex/tinybase/discussions" target="_blank"><img src="https://img.shields.io/github/discussions/tinyplex/tinybase?style=for-the-badge&amp;logo=GitHub&amp;logoColor=%23fff&amp;label=Ideas&amp;labelColor=%23d81b60&amp;color=%23333"> </a><a href="https://github.com/tinyplex/tinybase/issues" target="_blank"><img src="https://img.shields.io/github/issues/tinyplex/tinybase?style=for-the-badge&amp;logo=GitHub&amp;logoColor=%23fff&amp;label=Issues&amp;labelColor=%23d81b60&amp;color=%23333"> </a><a href="#well-tested-and-documented"><img src="https://img.shields.io/badge/Tests-100%25-green?style=for-the-badge&amp;logo=jest&amp;logoColor=%23fff&amp;color=%23333&amp;labelColor=%2387c305"> </a><a href="https://www.npmjs.com/package/tinybase/v/5.4.6" target="_blank"><img src="https://img.shields.io/npm/v/tinybase?style=for-the-badge&amp;logo=npm&amp;logoColor=%23fff&amp;labelColor=%23bd0005&amp;color=%23333"></a></section><hr><section><h2 id="start-with-a-simple-key-value-store">Start with a simple key-value store.</h2><p>Creating a <a href="https://tinybase.org/api/store/interfaces/store/store/"><code>Store</code></a> requires just a simple call to the <a href="https://tinybase.org/api/store/functions/creation/createstore/"><code>createStore</code></a> function. Once you have one, you can easily set <a href="https://tinybase.org/api/store/type-aliases/store/values/"><code>Values</code></a> in it by unique <a href="https://tinybase.org/api/common/type-aliases/identity/id/"><code>Id</code></a>. And of course you can easily get them back out again.</p><p>Read more about using keyed value data in <a href="https://tinybase.org/guides/the-basics/">The Basics</a> guide.</p></section>
2
2
 
3
3
  ```js
4
4
  import {createStore} from 'tinybase';
@@ -294,4 +294,4 @@ export const createShop: typeof createShopDecl = () => {
294
294
  };
295
295
  ```
296
296
 
297
- <section><h2 id="did-we-say-tiny">Did we say tiny?</h2><p>If you use the basic <a href="https://tinybase.org/api/store/"><code>store</code></a> module alone, you&#x27;ll only add a gzipped <em>5.3kB</em> to your app. Incrementally add the other modules as you need more functionality, or get it all for <em>11.4kB</em>.</p><p>The optional <a href="https://tinybase.org/api/ui-react/"><code>ui-react</code></a> module is just <em>4.9kB</em>, the ui-react-dom components are another <em>2.6kB</em>, and everything is super fast. Life is easy when you have zero dependencies!</p><p>Read more about how TinyBase is structured and packaged in the <a href="https://tinybase.org/guides/how-tinybase-is-built/architecture/">Architecture</a> guide.</p></section><div class="table"><table class="fixed"><tbody><tr><th> </th><th>Minified .js.gz</th><th>Source .js</th></tr><tr><th class="right"><a href="https://tinybase.org/api/store/">tinybase/store</a> (minimal)</th><td>5.3kB</td><td>52.5kB</td></tr><tr><th class="right">tinybase (complete)</th><td>11.4kB</td><td>119.4kB</td></tr><tr><th class="right"><a href="https://tinybase.org/api/ui-react/">ui-react</a></th><td>4.9kB</td><td>53.6kB</td></tr><tr><th class="right"><a href="https://tinybase.org/api/ui-react-dom/">ui-react-dom</a></th><td>2.6kB</td><td>20.4kB</td></tr></tbody></table></div><section><h2 id="well-tested-and-documented">Well tested and documented.</h2><p>TinyBase has <em>100.0%</em> test coverage, including the code throughout the documentation - even on this page! The guides, demos, and API examples are designed to make it as easy as possible for you to get your TinyBase-powered app up and running.</p><p>Read more about how TinyBase is tested in the Unit <a href="https://tinybase.org/guides/how-tinybase-is-built/testing/">Testing</a> guide.</p></section><div class="table"><table class="fixed"><tbody><tr><th width="30%"> </th><th>Total</th><th>Tested</th><th>Coverage</th></tr><tr><th class="right">Lines</th><td>2,290</td><td>2,290</td><td>100.0%</td></tr><tr><th class="right">Statements</th><td>2,474</td><td>2,474</td><td>100.0%</td></tr><tr><th class="right">Functions</th><td>988</td><td>988</td><td>100.0%</td></tr><tr><th class="right">Branches</th><td>856</td><td>856</td><td>100.0%</td></tr><tr><th class="right">Tests</th><td colspan="3">7,464</td></tr><tr><th class="right">Assertions</th><td colspan="3">33,229</td></tr></tbody></table></div><hr><section id="sponsors"><h2 id="proud-to-be-sponsored-by">Proud to be sponsored by:</h2><a href="https://github.com/cpojer" target="_blank"><img src="https://github.com/cpojer.png?size=48" title="cpojer"></a><a href="https://github.com/expo" target="_blank"><img src="https://github.com/expo.png?size=48" title="expo"></a><a href="https://github.com/beekeeb" target="_blank"><img src="https://github.com/beekeeb.png?size=48" title="beekeeb"></a><a href="https://github.com/cancelself" target="_blank"><img src="https://github.com/cancelself.png?size=48" title="cancelself"></a><a href="https://github.com/WonderPanda" target="_blank"><img src="https://github.com/WonderPanda.png?size=48" title="WonderPanda"></a><a href="https://github.com/arpitBhalla" target="_blank"><img src="https://github.com/arpitBhalla.png?size=48" title="arpitBhalla"></a></section><section id="users"><h2 id="excited-to-be-used-by">Excited to be used by:</h2><a href="https://github.com/Apocalypsor" target="_blank"><img src="https://github.com/Apocalypsor.png?size=48" title="Apocalypsor"></a><a href="https://github.com/brentvatne" target="_blank"><img src="https://github.com/brentvatne.png?size=48" title="brentvatne"></a><a href="https://github.com/byCedric" target="_blank"><img src="https://github.com/byCedric.png?size=48" title="byCedric"></a><a href="https://github.com/circadian-risk" target="_blank"><img src="https://github.com/circadian-risk.png?size=48" title="circadian-risk"></a><a href="https://github.com/cpojer" target="_blank"><img src="https://github.com/cpojer.png?size=48" title="cpojer"></a><a href="https://github.com/cubecull" target="_blank"><img src="https://github.com/cubecull.png?size=48" title="cubecull"></a><a href="https://github.com/erwinkn" target="_blank"><img src="https://github.com/erwinkn.png?size=48" title="erwinkn"></a><a href="https://github.com/expo" target="_blank"><img src="https://github.com/expo.png?size=48" title="expo"></a><a href="https://github.com/ezra-en" target="_blank"><img src="https://github.com/ezra-en.png?size=48" title="ezra-en"></a><a href="https://github.com/fdfontes" target="_blank"><img src="https://github.com/fdfontes.png?size=48" title="fdfontes"></a><a href="https://github.com/feychenie" target="_blank"><img src="https://github.com/feychenie.png?size=48" title="feychenie"></a><a href="https://github.com/flaming-codes" target="_blank"><img src="https://github.com/flaming-codes.png?size=48" title="flaming-codes"></a><a href="https://github.com/fostertheweb" target="_blank"><img src="https://github.com/fostertheweb.png?size=48" title="fostertheweb"></a><a href="https://github.com/generates" target="_blank"><img src="https://github.com/generates.png?size=48" title="generates"></a><a href="https://github.com/Giulio987" target="_blank"><img src="https://github.com/Giulio987.png?size=48" title="Giulio987"></a><a href="https://github.com/itsdevcoffee" target="_blank"><img src="https://github.com/itsdevcoffee.png?size=48" title="itsdevcoffee"></a><a href="https://github.com/jaysc" target="_blank"><img src="https://github.com/jaysc.png?size=48" title="jaysc"></a><a href="https://github.com/jbolda" target="_blank"><img src="https://github.com/jbolda.png?size=48" title="jbolda"></a><a href="https://github.com/Kayoo-asso" target="_blank"><img src="https://github.com/Kayoo-asso.png?size=48" title="Kayoo-asso"></a><a href="https://github.com/kotofurumiya" target="_blank"><img src="https://github.com/kotofurumiya.png?size=48" title="kotofurumiya"></a><a href="https://github.com/Kudo" target="_blank"><img src="https://github.com/Kudo.png?size=48" title="Kudo"></a><a href="https://github.com/learn-anything" target="_blank"><img src="https://github.com/learn-anything.png?size=48" title="learn-anything"></a><a href="https://github.com/lluc" target="_blank"><img src="https://github.com/lluc.png?size=48" title="lluc"></a><a href="https://github.com/marksteve" target="_blank"><img src="https://github.com/marksteve.png?size=48" title="marksteve"></a><a href="https://github.com/miking-the-viking" target="_blank"><img src="https://github.com/miking-the-viking.png?size=48" title="miking-the-viking"></a><a href="https://github.com/mjamesderocher" target="_blank"><img src="https://github.com/mjamesderocher.png?size=48" title="mjamesderocher"></a><a href="https://github.com/mouktardev" target="_blank"><img src="https://github.com/mouktardev.png?size=48" title="mouktardev"></a><a href="https://github.com/nickmessing" target="_blank"><img src="https://github.com/nickmessing.png?size=48" title="nickmessing"></a><a href="https://github.com/nikitavoloboev" target="_blank"><img src="https://github.com/nikitavoloboev.png?size=48" title="nikitavoloboev"></a><a href="https://github.com/nkzw-tech" target="_blank"><img src="https://github.com/nkzw-tech.png?size=48" title="nkzw-tech"></a><a href="https://github.com/palerdot" target="_blank"><img src="https://github.com/palerdot.png?size=48" title="palerdot"></a><a href="https://github.com/PorcoRosso85" target="_blank"><img src="https://github.com/PorcoRosso85.png?size=48" title="PorcoRosso85"></a><a href="https://github.com/primodiumxyz" target="_blank"><img src="https://github.com/primodiumxyz.png?size=48" title="primodiumxyz"></a><a href="https://github.com/shaneosullivan" target="_blank"><img src="https://github.com/shaneosullivan.png?size=48" title="shaneosullivan"></a><a href="https://github.com/sudo-self" target="_blank"><img src="https://github.com/sudo-self.png?size=48" title="sudo-self"></a><a href="https://github.com/SuperSonicHub1" target="_blank"><img src="https://github.com/SuperSonicHub1.png?size=48" title="SuperSonicHub1"></a><a href="https://github.com/threepointone" target="_blank"><img src="https://github.com/threepointone.png?size=48" title="threepointone"></a><a href="https://github.com/uptonking" target="_blank"><img src="https://github.com/uptonking.png?size=48" title="uptonking"></a><a href="https://github.com/ViktorZhurbin" target="_blank"><img src="https://github.com/ViktorZhurbin.png?size=48" title="ViktorZhurbin"></a><a href="https://github.com/WonderPanda" target="_blank"><img src="https://github.com/WonderPanda.png?size=48" title="WonderPanda"></a></section><hr><p><a class="start" href="https://tinybase.org/guides/the-basics/getting-started/">Get started</a></p><p><a href="https://tinybase.org/demos/">Try the demos</a></p><p><a href="https://tinybase.org/api/store/interfaces/store/store/">Read the docs</a></p><hr><section id="about"><h2 id="about">About</h2><p>Modern apps deserve better. Why trade reactive user experiences to be able to use relational data? Or sacrifice features for bundle size? And why does the cloud do all the work <a href="https://localfirstweb.dev/" target="_blank">anyway</a>?</p><p>Building TinyBase was originally an interesting exercise for <a rel="me" href="https://tripleodeon.com">me</a> in API design, minification, and documentation. But now it has taken on a life of its own, and has grown beyond my wildest expectations.</p><p>It could not have been built without these great <a href="https://tinybase.org/guides/how-tinybase-is-built/credits/#giants">projects</a> and <a href="https://tinybase.org/guides/how-tinybase-is-built/credits/#and-friends">friends</a>, and I hope you enjoy using it as much as I do building it!</p></section><section id="story"><h2 id="the-story">The story</h2><a href="https://youtu.be/hXL7OkW-Prk?t=1232" target="_blank"><img src="https://tinybase.org/youtube.webp"></a></section>
297
+ <section><h2 id="did-we-say-tiny">Did we say tiny?</h2><p>If you use the basic <a href="https://tinybase.org/api/store/"><code>store</code></a> module alone, you&#x27;ll only add a gzipped <em>5.3kB</em> to your app. Incrementally add the other modules as you need more functionality, or get it all for <em>11.4kB</em>.</p><p>The optional <a href="https://tinybase.org/api/ui-react/"><code>ui-react</code></a> module is just <em>4.9kB</em>, the ui-react-dom components are another <em>2.6kB</em>, and everything is super fast. Life is easy when you have zero dependencies!</p><p>Read more about how TinyBase is structured and packaged in the <a href="https://tinybase.org/guides/how-tinybase-is-built/architecture/">Architecture</a> guide.</p></section><div class="table"><table class="fixed"><tbody><tr><th> </th><th>Minified .js.gz</th><th>Source .js</th></tr><tr><th class="right"><a href="https://tinybase.org/api/store/">tinybase/store</a> (minimal)</th><td>5.3kB</td><td>52.5kB</td></tr><tr><th class="right">tinybase (complete)</th><td>11.4kB</td><td>119.5kB</td></tr><tr><th class="right"><a href="https://tinybase.org/api/ui-react/">ui-react</a></th><td>4.9kB</td><td>53.7kB</td></tr><tr><th class="right"><a href="https://tinybase.org/api/ui-react-dom/">ui-react-dom</a></th><td>2.6kB</td><td>20.4kB</td></tr></tbody></table></div><section><h2 id="well-tested-and-documented">Well tested and documented.</h2><p>TinyBase has <em>100.0%</em> test coverage, including the code throughout the documentation - even on this page! The guides, demos, and API examples are designed to make it as easy as possible for you to get your TinyBase-powered app up and running.</p><p>Read more about how TinyBase is tested in the Unit <a href="https://tinybase.org/guides/how-tinybase-is-built/testing/">Testing</a> guide.</p></section><div class="table"><table class="fixed"><tbody><tr><th width="30%"> </th><th>Total</th><th>Tested</th><th>Coverage</th></tr><tr><th class="right">Lines</th><td>2,290</td><td>2,290</td><td>100.0%</td></tr><tr><th class="right">Statements</th><td>2,474</td><td>2,474</td><td>100.0%</td></tr><tr><th class="right">Functions</th><td>988</td><td>988</td><td>100.0%</td></tr><tr><th class="right">Branches</th><td>856</td><td>856</td><td>100.0%</td></tr><tr><th class="right">Tests</th><td colspan="3">7,464</td></tr><tr><th class="right">Assertions</th><td colspan="3">33,210</td></tr></tbody></table></div><hr><section id="sponsors"><h2 id="proud-to-be-sponsored-by">Proud to be sponsored by:</h2><a href="https://github.com/cpojer" target="_blank"><img src="https://github.com/cpojer.png?size=48" title="cpojer" width="48" height="48"></a><a href="https://github.com/expo" target="_blank"><img src="https://github.com/expo.png?size=48" title="expo" width="48" height="48"></a><a href="https://github.com/beekeeb" target="_blank"><img src="https://github.com/beekeeb.png?size=48" title="beekeeb" width="48" height="48"></a><a href="https://github.com/cancelself" target="_blank"><img src="https://github.com/cancelself.png?size=48" title="cancelself" width="48" height="48"></a><a href="https://github.com/WonderPanda" target="_blank"><img src="https://github.com/WonderPanda.png?size=48" title="WonderPanda" width="48" height="48"></a><a href="https://github.com/arpitBhalla" target="_blank"><img src="https://github.com/arpitBhalla.png?size=48" title="arpitBhalla" width="48" height="48"></a></section><section id="users"><h2 id="excited-to-be-used-by">Excited to be used by:</h2><a href="https://github.com/behrends" target="_blank"><img src="https://github.com/behrends.png?size=48" title="behrends" width="48" height="48"></a><a href="https://github.com/betomoedano" target="_blank"><img src="https://github.com/betomoedano.png?size=48" title="betomoedano" width="48" height="48"></a><a href="https://github.com/brentvatne" target="_blank"><img src="https://github.com/brentvatne.png?size=48" title="brentvatne" width="48" height="48"></a><a href="https://github.com/byCedric" target="_blank"><img src="https://github.com/byCedric.png?size=48" title="byCedric" width="48" height="48"></a><a href="https://github.com/circadian-risk" target="_blank"><img src="https://github.com/circadian-risk.png?size=48" title="circadian-risk" width="48" height="48"></a><a href="https://github.com/cpojer" target="_blank"><img src="https://github.com/cpojer.png?size=48" title="cpojer" width="48" height="48"></a><a href="https://github.com/cubecull" target="_blank"><img src="https://github.com/cubecull.png?size=48" title="cubecull" width="48" height="48"></a><a href="https://github.com/erwinkn" target="_blank"><img src="https://github.com/erwinkn.png?size=48" title="erwinkn" width="48" height="48"></a><a href="https://github.com/expo" target="_blank"><img src="https://github.com/expo.png?size=48" title="expo" width="48" height="48"></a><a href="https://github.com/ezra-en" target="_blank"><img src="https://github.com/ezra-en.png?size=48" title="ezra-en" width="48" height="48"></a><a href="https://github.com/feychenie" target="_blank"><img src="https://github.com/feychenie.png?size=48" title="feychenie" width="48" height="48"></a><a href="https://github.com/flaming-codes" target="_blank"><img src="https://github.com/flaming-codes.png?size=48" title="flaming-codes" width="48" height="48"></a><a href="https://github.com/fostertheweb" target="_blank"><img src="https://github.com/fostertheweb.png?size=48" title="fostertheweb" width="48" height="48"></a><a href="https://github.com/Giulio987" target="_blank"><img src="https://github.com/Giulio987.png?size=48" title="Giulio987" width="48" height="48"></a><a href="https://github.com/hi-ogawa" target="_blank"><img src="https://github.com/hi-ogawa.png?size=48" title="hi-ogawa" width="48" height="48"></a><a href="https://github.com/itsdevcoffee" target="_blank"><img src="https://github.com/itsdevcoffee.png?size=48" title="itsdevcoffee" width="48" height="48"></a><a href="https://github.com/jbolda" target="_blank"><img src="https://github.com/jbolda.png?size=48" title="jbolda" width="48" height="48"></a><a href="https://github.com/Kayoo-asso" target="_blank"><img src="https://github.com/Kayoo-asso.png?size=48" title="Kayoo-asso" width="48" height="48"></a><a href="https://github.com/kotofurumiya" target="_blank"><img src="https://github.com/kotofurumiya.png?size=48" title="kotofurumiya" width="48" height="48"></a><a href="https://github.com/Kudo" target="_blank"><img src="https://github.com/Kudo.png?size=48" title="Kudo" width="48" height="48"></a><a href="https://github.com/learn-anything" target="_blank"><img src="https://github.com/learn-anything.png?size=48" title="learn-anything" width="48" height="48"></a><a href="https://github.com/lluc" target="_blank"><img src="https://github.com/lluc.png?size=48" title="lluc" width="48" height="48"></a><a href="https://github.com/marksteve" target="_blank"><img src="https://github.com/marksteve.png?size=48" title="marksteve" width="48" height="48"></a><a href="https://github.com/miking-the-viking" target="_blank"><img src="https://github.com/miking-the-viking.png?size=48" title="miking-the-viking" width="48" height="48"></a><a href="https://github.com/mjamesderocher" target="_blank"><img src="https://github.com/mjamesderocher.png?size=48" title="mjamesderocher" width="48" height="48"></a><a href="https://github.com/mouktardev" target="_blank"><img src="https://github.com/mouktardev.png?size=48" title="mouktardev" width="48" height="48"></a><a href="https://github.com/nickmessing" target="_blank"><img src="https://github.com/nickmessing.png?size=48" title="nickmessing" width="48" height="48"></a><a href="https://github.com/nikitavoloboev" target="_blank"><img src="https://github.com/nikitavoloboev.png?size=48" title="nikitavoloboev" width="48" height="48"></a><a href="https://github.com/nkzw-tech" target="_blank"><img src="https://github.com/nkzw-tech.png?size=48" title="nkzw-tech" width="48" height="48"></a><a href="https://github.com/palerdot" target="_blank"><img src="https://github.com/palerdot.png?size=48" title="palerdot" width="48" height="48"></a><a href="https://github.com/PorcoRosso85" target="_blank"><img src="https://github.com/PorcoRosso85.png?size=48" title="PorcoRosso85" width="48" height="48"></a><a href="https://github.com/primodiumxyz" target="_blank"><img src="https://github.com/primodiumxyz.png?size=48" title="primodiumxyz" width="48" height="48"></a><a href="https://github.com/shaneosullivan" target="_blank"><img src="https://github.com/shaneosullivan.png?size=48" title="shaneosullivan" width="48" height="48"></a><a href="https://github.com/sudo-self" target="_blank"><img src="https://github.com/sudo-self.png?size=48" title="sudo-self" width="48" height="48"></a><a href="https://github.com/SuperSonicHub1" target="_blank"><img src="https://github.com/SuperSonicHub1.png?size=48" title="SuperSonicHub1" width="48" height="48"></a><a href="https://github.com/threepointone" target="_blank"><img src="https://github.com/threepointone.png?size=48" title="threepointone" width="48" height="48"></a><a href="https://github.com/uptonking" target="_blank"><img src="https://github.com/uptonking.png?size=48" title="uptonking" width="48" height="48"></a><a href="https://github.com/ViktorZhurbin" target="_blank"><img src="https://github.com/ViktorZhurbin.png?size=48" title="ViktorZhurbin" width="48" height="48"></a><a href="https://github.com/wilkerlucio" target="_blank"><img src="https://github.com/wilkerlucio.png?size=48" title="wilkerlucio" width="48" height="48"></a><a href="https://github.com/WonderPanda" target="_blank"><img src="https://github.com/WonderPanda.png?size=48" title="WonderPanda" width="48" height="48"></a></section><hr><p><a class="start" href="https://tinybase.org/guides/the-basics/getting-started/">Get started</a></p><p><a href="https://tinybase.org/demos/">Try the demos</a></p><p><a href="https://tinybase.org/api/store/interfaces/store/store/">Read the docs</a></p><hr><section id="about"><h2 id="about">About</h2><p>Modern apps deserve better. Why trade reactive user experiences to be able to use relational data? Or sacrifice features for bundle size? And why does the cloud do all the work <a href="https://localfirstweb.dev/" target="_blank">anyway</a>?</p><p>Building TinyBase was originally an interesting exercise for <a rel="me" href="https://tripleodeon.com">me</a> in API design, minification, and documentation. But now it has taken on a life of its own, and has grown beyond my wildest expectations.</p><p>It could not have been built without these great <a href="https://tinybase.org/guides/how-tinybase-is-built/credits/#giants">projects</a> and <a href="https://tinybase.org/guides/how-tinybase-is-built/credits/#and-friends">friends</a>, and I hope you enjoy using it as much as I do building it!</p></section><section id="story"><h2 id="the-story">The story</h2><a href="https://youtu.be/hXL7OkW-Prk?t=1232" target="_blank"><img src="https://tinybase.org/youtube.webp"></a></section>