tinybase 5.2.0-beta.4 → 5.2.0-beta.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (507) hide show
  1. package/@types/mergeable-store/index.d.cts +114 -11
  2. package/@types/mergeable-store/index.d.ts +114 -11
  3. package/@types/mergeable-store/with-schemas/index.d.cts +192 -11
  4. package/@types/mergeable-store/with-schemas/index.d.ts +192 -11
  5. package/@types/persisters/index.d.cts +167 -11
  6. package/@types/persisters/index.d.ts +167 -11
  7. package/@types/persisters/persister-cr-sqlite-wasm/index.d.cts +1 -1
  8. package/@types/persisters/persister-cr-sqlite-wasm/index.d.ts +1 -1
  9. package/@types/persisters/persister-cr-sqlite-wasm/with-schemas/index.d.cts +2 -2
  10. package/@types/persisters/persister-cr-sqlite-wasm/with-schemas/index.d.ts +2 -2
  11. package/@types/persisters/persister-electric-sql/index.d.cts +1 -1
  12. package/@types/persisters/persister-electric-sql/index.d.ts +1 -1
  13. package/@types/persisters/persister-electric-sql/with-schemas/index.d.cts +2 -2
  14. package/@types/persisters/persister-electric-sql/with-schemas/index.d.ts +2 -2
  15. package/@types/persisters/persister-expo-sqlite/index.d.cts +1 -1
  16. package/@types/persisters/persister-expo-sqlite/index.d.ts +1 -1
  17. package/@types/persisters/persister-expo-sqlite/with-schemas/index.d.cts +2 -2
  18. package/@types/persisters/persister-expo-sqlite/with-schemas/index.d.ts +2 -2
  19. package/@types/persisters/persister-libsql/index.d.cts +1 -1
  20. package/@types/persisters/persister-libsql/index.d.ts +1 -1
  21. package/@types/persisters/persister-libsql/with-schemas/index.d.cts +2 -2
  22. package/@types/persisters/persister-libsql/with-schemas/index.d.ts +2 -2
  23. package/@types/persisters/persister-pglite/index.d.cts +1 -1
  24. package/@types/persisters/persister-pglite/index.d.ts +1 -1
  25. package/@types/persisters/persister-pglite/with-schemas/index.d.cts +2 -2
  26. package/@types/persisters/persister-pglite/with-schemas/index.d.ts +2 -2
  27. package/@types/persisters/persister-postgres/index.d.cts +1 -1
  28. package/@types/persisters/persister-postgres/index.d.ts +1 -1
  29. package/@types/persisters/persister-postgres/with-schemas/index.d.cts +2 -2
  30. package/@types/persisters/persister-postgres/with-schemas/index.d.ts +2 -2
  31. package/@types/persisters/persister-powersync/index.d.cts +1 -1
  32. package/@types/persisters/persister-powersync/index.d.ts +1 -1
  33. package/@types/persisters/persister-powersync/with-schemas/index.d.cts +2 -2
  34. package/@types/persisters/persister-powersync/with-schemas/index.d.ts +2 -2
  35. package/@types/persisters/persister-sqlite-wasm/index.d.cts +1 -1
  36. package/@types/persisters/persister-sqlite-wasm/index.d.ts +1 -1
  37. package/@types/persisters/persister-sqlite-wasm/with-schemas/index.d.cts +2 -2
  38. package/@types/persisters/persister-sqlite-wasm/with-schemas/index.d.ts +2 -2
  39. package/@types/persisters/persister-sqlite3/index.d.cts +1 -1
  40. package/@types/persisters/persister-sqlite3/index.d.ts +1 -1
  41. package/@types/persisters/persister-sqlite3/with-schemas/index.d.cts +2 -2
  42. package/@types/persisters/persister-sqlite3/with-schemas/index.d.ts +2 -2
  43. package/@types/persisters/with-schemas/index.d.cts +217 -14
  44. package/@types/persisters/with-schemas/index.d.ts +217 -14
  45. package/@types/synchronizers/index.d.cts +2 -5
  46. package/@types/synchronizers/index.d.ts +2 -5
  47. package/@types/synchronizers/with-schemas/index.d.cts +2 -5
  48. package/@types/synchronizers/with-schemas/index.d.ts +2 -5
  49. package/cjs/es6/index.cjs +54 -566
  50. package/cjs/es6/mergeable-store/index.cjs +9 -6
  51. package/cjs/es6/mergeable-store/with-schemas/index.cjs +9 -6
  52. package/cjs/es6/min/index.cjs +1 -1
  53. package/cjs/es6/min/index.cjs.gz +0 -0
  54. package/cjs/es6/min/persisters/index.cjs +1 -1
  55. package/cjs/es6/min/persisters/index.cjs.gz +0 -0
  56. package/cjs/es6/min/persisters/persister-cr-sqlite-wasm/index.cjs +1 -1
  57. package/cjs/es6/min/persisters/persister-cr-sqlite-wasm/index.cjs.gz +0 -0
  58. package/cjs/es6/min/persisters/persister-cr-sqlite-wasm/with-schemas/index.cjs +1 -1
  59. package/cjs/es6/min/persisters/persister-cr-sqlite-wasm/with-schemas/index.cjs.gz +0 -0
  60. package/cjs/es6/min/persisters/persister-electric-sql/index.cjs +1 -1
  61. package/cjs/es6/min/persisters/persister-electric-sql/index.cjs.gz +0 -0
  62. package/cjs/es6/min/persisters/persister-electric-sql/with-schemas/index.cjs +1 -1
  63. package/cjs/es6/min/persisters/persister-electric-sql/with-schemas/index.cjs.gz +0 -0
  64. package/cjs/es6/min/persisters/persister-expo-sqlite/index.cjs +1 -1
  65. package/cjs/es6/min/persisters/persister-expo-sqlite/index.cjs.gz +0 -0
  66. package/cjs/es6/min/persisters/persister-expo-sqlite/with-schemas/index.cjs +1 -1
  67. package/cjs/es6/min/persisters/persister-expo-sqlite/with-schemas/index.cjs.gz +0 -0
  68. package/cjs/es6/min/persisters/persister-libsql/index.cjs +1 -1
  69. package/cjs/es6/min/persisters/persister-libsql/index.cjs.gz +0 -0
  70. package/cjs/es6/min/persisters/persister-libsql/with-schemas/index.cjs +1 -1
  71. package/cjs/es6/min/persisters/persister-libsql/with-schemas/index.cjs.gz +0 -0
  72. package/cjs/es6/min/persisters/persister-powersync/index.cjs +1 -1
  73. package/cjs/es6/min/persisters/persister-powersync/index.cjs.gz +0 -0
  74. package/cjs/es6/min/persisters/persister-powersync/with-schemas/index.cjs +1 -1
  75. package/cjs/es6/min/persisters/persister-powersync/with-schemas/index.cjs.gz +0 -0
  76. package/cjs/es6/min/persisters/persister-sqlite-wasm/index.cjs +1 -1
  77. package/cjs/es6/min/persisters/persister-sqlite-wasm/index.cjs.gz +0 -0
  78. package/cjs/es6/min/persisters/persister-sqlite-wasm/with-schemas/index.cjs +1 -1
  79. package/cjs/es6/min/persisters/persister-sqlite-wasm/with-schemas/index.cjs.gz +0 -0
  80. package/cjs/es6/min/persisters/persister-sqlite3/index.cjs +1 -1
  81. package/cjs/es6/min/persisters/persister-sqlite3/index.cjs.gz +0 -0
  82. package/cjs/es6/min/persisters/persister-sqlite3/with-schemas/index.cjs +1 -1
  83. package/cjs/es6/min/persisters/persister-sqlite3/with-schemas/index.cjs.gz +0 -0
  84. package/cjs/es6/min/persisters/with-schemas/index.cjs +1 -1
  85. package/cjs/es6/min/persisters/with-schemas/index.cjs.gz +0 -0
  86. package/cjs/es6/min/synchronizers/synchronizer-ws-server/index.cjs +1 -1
  87. package/cjs/es6/min/synchronizers/synchronizer-ws-server/index.cjs.gz +0 -0
  88. package/cjs/es6/min/synchronizers/synchronizer-ws-server/with-schemas/index.cjs +1 -1
  89. package/cjs/es6/min/synchronizers/synchronizer-ws-server/with-schemas/index.cjs.gz +0 -0
  90. package/cjs/es6/min/with-schemas/index.cjs +1 -1
  91. package/cjs/es6/min/with-schemas/index.cjs.gz +0 -0
  92. package/cjs/es6/persisters/index.cjs +1095 -10
  93. package/cjs/es6/persisters/persister-cr-sqlite-wasm/index.cjs +58 -49
  94. package/cjs/es6/persisters/persister-cr-sqlite-wasm/with-schemas/index.cjs +58 -49
  95. package/cjs/es6/persisters/persister-electric-sql/index.cjs +56 -47
  96. package/cjs/es6/persisters/persister-electric-sql/with-schemas/index.cjs +56 -47
  97. package/cjs/es6/persisters/persister-expo-sqlite/index.cjs +58 -49
  98. package/cjs/es6/persisters/persister-expo-sqlite/with-schemas/index.cjs +58 -49
  99. package/cjs/es6/persisters/persister-indexed-db/index.cjs +2 -2
  100. package/cjs/es6/persisters/persister-indexed-db/with-schemas/index.cjs +2 -2
  101. package/cjs/es6/persisters/persister-libsql/index.cjs +56 -47
  102. package/cjs/es6/persisters/persister-libsql/with-schemas/index.cjs +56 -47
  103. package/cjs/es6/persisters/persister-pglite/index.cjs +61 -54
  104. package/cjs/es6/persisters/persister-pglite/with-schemas/index.cjs +61 -54
  105. package/cjs/es6/persisters/persister-postgres/index.cjs +63 -56
  106. package/cjs/es6/persisters/persister-postgres/with-schemas/index.cjs +63 -56
  107. package/cjs/es6/persisters/persister-powersync/index.cjs +58 -49
  108. package/cjs/es6/persisters/persister-powersync/with-schemas/index.cjs +58 -49
  109. package/cjs/es6/persisters/persister-sqlite-wasm/index.cjs +62 -49
  110. package/cjs/es6/persisters/persister-sqlite-wasm/with-schemas/index.cjs +62 -49
  111. package/cjs/es6/persisters/persister-sqlite3/index.cjs +58 -49
  112. package/cjs/es6/persisters/persister-sqlite3/with-schemas/index.cjs +58 -49
  113. package/cjs/es6/persisters/with-schemas/index.cjs +1095 -10
  114. package/cjs/es6/synchronizers/index.cjs +9 -6
  115. package/cjs/es6/synchronizers/synchronizer-broadcast-channel/index.cjs +9 -6
  116. package/cjs/es6/synchronizers/synchronizer-broadcast-channel/with-schemas/index.cjs +9 -6
  117. package/cjs/es6/synchronizers/synchronizer-local/index.cjs +9 -6
  118. package/cjs/es6/synchronizers/synchronizer-local/with-schemas/index.cjs +9 -6
  119. package/cjs/es6/synchronizers/synchronizer-ws-client/index.cjs +9 -6
  120. package/cjs/es6/synchronizers/synchronizer-ws-client/with-schemas/index.cjs +9 -6
  121. package/cjs/es6/synchronizers/synchronizer-ws-server/index.cjs +17 -14
  122. package/cjs/es6/synchronizers/synchronizer-ws-server/with-schemas/index.cjs +17 -14
  123. package/cjs/es6/synchronizers/with-schemas/index.cjs +9 -6
  124. package/cjs/es6/with-schemas/index.cjs +54 -566
  125. package/cjs/index.cjs +45 -447
  126. package/cjs/mergeable-store/index.cjs +1 -0
  127. package/cjs/mergeable-store/with-schemas/index.cjs +1 -0
  128. package/cjs/min/index.cjs +1 -1
  129. package/cjs/min/index.cjs.gz +0 -0
  130. package/cjs/min/persisters/index.cjs +1 -1
  131. package/cjs/min/persisters/index.cjs.gz +0 -0
  132. package/cjs/min/persisters/persister-cr-sqlite-wasm/index.cjs +1 -1
  133. package/cjs/min/persisters/persister-cr-sqlite-wasm/index.cjs.gz +0 -0
  134. package/cjs/min/persisters/persister-cr-sqlite-wasm/with-schemas/index.cjs +1 -1
  135. package/cjs/min/persisters/persister-cr-sqlite-wasm/with-schemas/index.cjs.gz +0 -0
  136. package/cjs/min/persisters/persister-electric-sql/index.cjs +1 -1
  137. package/cjs/min/persisters/persister-electric-sql/index.cjs.gz +0 -0
  138. package/cjs/min/persisters/persister-electric-sql/with-schemas/index.cjs +1 -1
  139. package/cjs/min/persisters/persister-electric-sql/with-schemas/index.cjs.gz +0 -0
  140. package/cjs/min/persisters/persister-expo-sqlite/index.cjs +1 -1
  141. package/cjs/min/persisters/persister-expo-sqlite/index.cjs.gz +0 -0
  142. package/cjs/min/persisters/persister-expo-sqlite/with-schemas/index.cjs +1 -1
  143. package/cjs/min/persisters/persister-expo-sqlite/with-schemas/index.cjs.gz +0 -0
  144. package/cjs/min/persisters/persister-libsql/index.cjs +1 -1
  145. package/cjs/min/persisters/persister-libsql/index.cjs.gz +0 -0
  146. package/cjs/min/persisters/persister-libsql/with-schemas/index.cjs +1 -1
  147. package/cjs/min/persisters/persister-libsql/with-schemas/index.cjs.gz +0 -0
  148. package/cjs/min/persisters/persister-powersync/index.cjs +1 -1
  149. package/cjs/min/persisters/persister-powersync/index.cjs.gz +0 -0
  150. package/cjs/min/persisters/persister-powersync/with-schemas/index.cjs +1 -1
  151. package/cjs/min/persisters/persister-powersync/with-schemas/index.cjs.gz +0 -0
  152. package/cjs/min/persisters/persister-sqlite-wasm/index.cjs +1 -1
  153. package/cjs/min/persisters/persister-sqlite-wasm/index.cjs.gz +0 -0
  154. package/cjs/min/persisters/persister-sqlite-wasm/with-schemas/index.cjs +1 -1
  155. package/cjs/min/persisters/persister-sqlite-wasm/with-schemas/index.cjs.gz +0 -0
  156. package/cjs/min/persisters/persister-sqlite3/index.cjs +1 -1
  157. package/cjs/min/persisters/persister-sqlite3/index.cjs.gz +0 -0
  158. package/cjs/min/persisters/persister-sqlite3/with-schemas/index.cjs +1 -1
  159. package/cjs/min/persisters/persister-sqlite3/with-schemas/index.cjs.gz +0 -0
  160. package/cjs/min/persisters/with-schemas/index.cjs +1 -1
  161. package/cjs/min/persisters/with-schemas/index.cjs.gz +0 -0
  162. package/cjs/min/synchronizers/synchronizer-ws-server/index.cjs +1 -1
  163. package/cjs/min/synchronizers/synchronizer-ws-server/index.cjs.gz +0 -0
  164. package/cjs/min/synchronizers/synchronizer-ws-server/with-schemas/index.cjs +1 -1
  165. package/cjs/min/synchronizers/synchronizer-ws-server/with-schemas/index.cjs.gz +0 -0
  166. package/cjs/min/with-schemas/index.cjs +1 -1
  167. package/cjs/min/with-schemas/index.cjs.gz +0 -0
  168. package/cjs/persisters/index.cjs +833 -0
  169. package/cjs/persisters/persister-cr-sqlite-wasm/index.cjs +57 -48
  170. package/cjs/persisters/persister-cr-sqlite-wasm/with-schemas/index.cjs +57 -48
  171. package/cjs/persisters/persister-electric-sql/index.cjs +56 -47
  172. package/cjs/persisters/persister-electric-sql/with-schemas/index.cjs +56 -47
  173. package/cjs/persisters/persister-expo-sqlite/index.cjs +57 -48
  174. package/cjs/persisters/persister-expo-sqlite/with-schemas/index.cjs +57 -48
  175. package/cjs/persisters/persister-indexed-db/index.cjs +2 -2
  176. package/cjs/persisters/persister-indexed-db/with-schemas/index.cjs +2 -2
  177. package/cjs/persisters/persister-libsql/index.cjs +56 -47
  178. package/cjs/persisters/persister-libsql/with-schemas/index.cjs +56 -47
  179. package/cjs/persisters/persister-pglite/index.cjs +59 -52
  180. package/cjs/persisters/persister-pglite/with-schemas/index.cjs +59 -52
  181. package/cjs/persisters/persister-postgres/index.cjs +61 -54
  182. package/cjs/persisters/persister-postgres/with-schemas/index.cjs +61 -54
  183. package/cjs/persisters/persister-powersync/index.cjs +60 -49
  184. package/cjs/persisters/persister-powersync/with-schemas/index.cjs +60 -49
  185. package/cjs/persisters/persister-sqlite-wasm/index.cjs +58 -49
  186. package/cjs/persisters/persister-sqlite-wasm/with-schemas/index.cjs +58 -49
  187. package/cjs/persisters/persister-sqlite3/index.cjs +58 -49
  188. package/cjs/persisters/persister-sqlite3/with-schemas/index.cjs +58 -49
  189. package/cjs/persisters/with-schemas/index.cjs +833 -0
  190. package/cjs/synchronizers/index.cjs +1 -0
  191. package/cjs/synchronizers/synchronizer-broadcast-channel/index.cjs +1 -0
  192. package/cjs/synchronizers/synchronizer-broadcast-channel/with-schemas/index.cjs +1 -0
  193. package/cjs/synchronizers/synchronizer-local/index.cjs +1 -0
  194. package/cjs/synchronizers/synchronizer-local/with-schemas/index.cjs +1 -0
  195. package/cjs/synchronizers/synchronizer-ws-client/index.cjs +1 -0
  196. package/cjs/synchronizers/synchronizer-ws-client/with-schemas/index.cjs +1 -0
  197. package/cjs/synchronizers/synchronizer-ws-server/index.cjs +9 -8
  198. package/cjs/synchronizers/synchronizer-ws-server/with-schemas/index.cjs +9 -8
  199. package/cjs/synchronizers/with-schemas/index.cjs +1 -0
  200. package/cjs/with-schemas/index.cjs +45 -447
  201. package/es6/index.js +54 -566
  202. package/es6/mergeable-store/index.js +9 -6
  203. package/es6/mergeable-store/with-schemas/index.js +9 -6
  204. package/es6/min/index.js +1 -1
  205. package/es6/min/index.js.gz +0 -0
  206. package/es6/min/persisters/index.js +1 -1
  207. package/es6/min/persisters/index.js.gz +0 -0
  208. package/es6/min/persisters/persister-cr-sqlite-wasm/index.js +1 -1
  209. package/es6/min/persisters/persister-cr-sqlite-wasm/index.js.gz +0 -0
  210. package/es6/min/persisters/persister-cr-sqlite-wasm/with-schemas/index.js +1 -1
  211. package/es6/min/persisters/persister-cr-sqlite-wasm/with-schemas/index.js.gz +0 -0
  212. package/es6/min/persisters/persister-electric-sql/index.js +1 -1
  213. package/es6/min/persisters/persister-electric-sql/index.js.gz +0 -0
  214. package/es6/min/persisters/persister-electric-sql/with-schemas/index.js +1 -1
  215. package/es6/min/persisters/persister-electric-sql/with-schemas/index.js.gz +0 -0
  216. package/es6/min/persisters/persister-expo-sqlite/index.js +1 -1
  217. package/es6/min/persisters/persister-expo-sqlite/index.js.gz +0 -0
  218. package/es6/min/persisters/persister-expo-sqlite/with-schemas/index.js +1 -1
  219. package/es6/min/persisters/persister-expo-sqlite/with-schemas/index.js.gz +0 -0
  220. package/es6/min/persisters/persister-libsql/index.js +1 -1
  221. package/es6/min/persisters/persister-libsql/index.js.gz +0 -0
  222. package/es6/min/persisters/persister-libsql/with-schemas/index.js +1 -1
  223. package/es6/min/persisters/persister-libsql/with-schemas/index.js.gz +0 -0
  224. package/es6/min/persisters/persister-powersync/index.js +1 -1
  225. package/es6/min/persisters/persister-powersync/index.js.gz +0 -0
  226. package/es6/min/persisters/persister-powersync/with-schemas/index.js +1 -1
  227. package/es6/min/persisters/persister-powersync/with-schemas/index.js.gz +0 -0
  228. package/es6/min/persisters/persister-sqlite-wasm/index.js +1 -1
  229. package/es6/min/persisters/persister-sqlite-wasm/index.js.gz +0 -0
  230. package/es6/min/persisters/persister-sqlite-wasm/with-schemas/index.js +1 -1
  231. package/es6/min/persisters/persister-sqlite-wasm/with-schemas/index.js.gz +0 -0
  232. package/es6/min/persisters/persister-sqlite3/index.js +1 -1
  233. package/es6/min/persisters/persister-sqlite3/index.js.gz +0 -0
  234. package/es6/min/persisters/persister-sqlite3/with-schemas/index.js +1 -1
  235. package/es6/min/persisters/persister-sqlite3/with-schemas/index.js.gz +0 -0
  236. package/es6/min/persisters/with-schemas/index.js +1 -1
  237. package/es6/min/persisters/with-schemas/index.js.gz +0 -0
  238. package/es6/min/synchronizers/synchronizer-ws-server/index.js +1 -1
  239. package/es6/min/synchronizers/synchronizer-ws-server/index.js.gz +0 -0
  240. package/es6/min/synchronizers/synchronizer-ws-server/with-schemas/index.js +1 -1
  241. package/es6/min/synchronizers/synchronizer-ws-server/with-schemas/index.js.gz +0 -0
  242. package/es6/min/with-schemas/index.js +1 -1
  243. package/es6/min/with-schemas/index.js.gz +0 -0
  244. package/es6/persisters/index.js +1099 -11
  245. package/es6/persisters/persister-cr-sqlite-wasm/index.js +58 -49
  246. package/es6/persisters/persister-cr-sqlite-wasm/with-schemas/index.js +58 -49
  247. package/es6/persisters/persister-electric-sql/index.js +56 -47
  248. package/es6/persisters/persister-electric-sql/with-schemas/index.js +56 -47
  249. package/es6/persisters/persister-expo-sqlite/index.js +58 -49
  250. package/es6/persisters/persister-expo-sqlite/with-schemas/index.js +58 -49
  251. package/es6/persisters/persister-indexed-db/index.js +2 -2
  252. package/es6/persisters/persister-indexed-db/with-schemas/index.js +2 -2
  253. package/es6/persisters/persister-libsql/index.js +56 -47
  254. package/es6/persisters/persister-libsql/with-schemas/index.js +56 -47
  255. package/es6/persisters/persister-pglite/index.js +61 -54
  256. package/es6/persisters/persister-pglite/with-schemas/index.js +61 -54
  257. package/es6/persisters/persister-postgres/index.js +63 -56
  258. package/es6/persisters/persister-postgres/with-schemas/index.js +63 -56
  259. package/es6/persisters/persister-powersync/index.js +58 -49
  260. package/es6/persisters/persister-powersync/with-schemas/index.js +58 -49
  261. package/es6/persisters/persister-sqlite-wasm/index.js +62 -49
  262. package/es6/persisters/persister-sqlite-wasm/with-schemas/index.js +62 -49
  263. package/es6/persisters/persister-sqlite3/index.js +58 -49
  264. package/es6/persisters/persister-sqlite3/with-schemas/index.js +58 -49
  265. package/es6/persisters/with-schemas/index.js +1099 -11
  266. package/es6/synchronizers/index.js +9 -6
  267. package/es6/synchronizers/synchronizer-broadcast-channel/index.js +9 -6
  268. package/es6/synchronizers/synchronizer-broadcast-channel/with-schemas/index.js +9 -6
  269. package/es6/synchronizers/synchronizer-local/index.js +9 -6
  270. package/es6/synchronizers/synchronizer-local/with-schemas/index.js +9 -6
  271. package/es6/synchronizers/synchronizer-ws-client/index.js +9 -6
  272. package/es6/synchronizers/synchronizer-ws-client/with-schemas/index.js +9 -6
  273. package/es6/synchronizers/synchronizer-ws-server/index.js +17 -14
  274. package/es6/synchronizers/synchronizer-ws-server/with-schemas/index.js +17 -14
  275. package/es6/synchronizers/with-schemas/index.js +9 -6
  276. package/es6/with-schemas/index.js +54 -566
  277. package/index.js +45 -447
  278. package/mergeable-store/index.js +1 -0
  279. package/mergeable-store/with-schemas/index.js +1 -0
  280. package/min/index.js +1 -1
  281. package/min/index.js.gz +0 -0
  282. package/min/persisters/index.js +1 -1
  283. package/min/persisters/index.js.gz +0 -0
  284. package/min/persisters/persister-cr-sqlite-wasm/index.js +1 -1
  285. package/min/persisters/persister-cr-sqlite-wasm/index.js.gz +0 -0
  286. package/min/persisters/persister-cr-sqlite-wasm/with-schemas/index.js +1 -1
  287. package/min/persisters/persister-cr-sqlite-wasm/with-schemas/index.js.gz +0 -0
  288. package/min/persisters/persister-electric-sql/index.js +1 -1
  289. package/min/persisters/persister-electric-sql/index.js.gz +0 -0
  290. package/min/persisters/persister-electric-sql/with-schemas/index.js +1 -1
  291. package/min/persisters/persister-electric-sql/with-schemas/index.js.gz +0 -0
  292. package/min/persisters/persister-expo-sqlite/index.js +1 -1
  293. package/min/persisters/persister-expo-sqlite/index.js.gz +0 -0
  294. package/min/persisters/persister-expo-sqlite/with-schemas/index.js +1 -1
  295. package/min/persisters/persister-expo-sqlite/with-schemas/index.js.gz +0 -0
  296. package/min/persisters/persister-libsql/index.js +1 -1
  297. package/min/persisters/persister-libsql/index.js.gz +0 -0
  298. package/min/persisters/persister-libsql/with-schemas/index.js +1 -1
  299. package/min/persisters/persister-libsql/with-schemas/index.js.gz +0 -0
  300. package/min/persisters/persister-powersync/index.js +1 -1
  301. package/min/persisters/persister-powersync/index.js.gz +0 -0
  302. package/min/persisters/persister-powersync/with-schemas/index.js +1 -1
  303. package/min/persisters/persister-powersync/with-schemas/index.js.gz +0 -0
  304. package/min/persisters/persister-sqlite-wasm/index.js +1 -1
  305. package/min/persisters/persister-sqlite-wasm/index.js.gz +0 -0
  306. package/min/persisters/persister-sqlite-wasm/with-schemas/index.js +1 -1
  307. package/min/persisters/persister-sqlite-wasm/with-schemas/index.js.gz +0 -0
  308. package/min/persisters/persister-sqlite3/index.js +1 -1
  309. package/min/persisters/persister-sqlite3/index.js.gz +0 -0
  310. package/min/persisters/persister-sqlite3/with-schemas/index.js +1 -1
  311. package/min/persisters/persister-sqlite3/with-schemas/index.js.gz +0 -0
  312. package/min/persisters/with-schemas/index.js +1 -1
  313. package/min/persisters/with-schemas/index.js.gz +0 -0
  314. package/min/synchronizers/synchronizer-ws-server/index.js +1 -1
  315. package/min/synchronizers/synchronizer-ws-server/index.js.gz +0 -0
  316. package/min/synchronizers/synchronizer-ws-server/with-schemas/index.js +1 -1
  317. package/min/synchronizers/synchronizer-ws-server/with-schemas/index.js.gz +0 -0
  318. package/min/with-schemas/index.js +1 -1
  319. package/min/with-schemas/index.js.gz +0 -0
  320. package/package.json +211 -211
  321. package/persisters/index.js +837 -1
  322. package/persisters/persister-cr-sqlite-wasm/index.js +57 -48
  323. package/persisters/persister-cr-sqlite-wasm/with-schemas/index.js +57 -48
  324. package/persisters/persister-electric-sql/index.js +56 -47
  325. package/persisters/persister-electric-sql/with-schemas/index.js +56 -47
  326. package/persisters/persister-expo-sqlite/index.js +57 -48
  327. package/persisters/persister-expo-sqlite/with-schemas/index.js +57 -48
  328. package/persisters/persister-indexed-db/index.js +2 -2
  329. package/persisters/persister-indexed-db/with-schemas/index.js +2 -2
  330. package/persisters/persister-libsql/index.js +56 -47
  331. package/persisters/persister-libsql/with-schemas/index.js +56 -47
  332. package/persisters/persister-pglite/index.js +59 -52
  333. package/persisters/persister-pglite/with-schemas/index.js +59 -52
  334. package/persisters/persister-postgres/index.js +61 -54
  335. package/persisters/persister-postgres/with-schemas/index.js +61 -54
  336. package/persisters/persister-powersync/index.js +60 -49
  337. package/persisters/persister-powersync/with-schemas/index.js +60 -49
  338. package/persisters/persister-sqlite-wasm/index.js +58 -49
  339. package/persisters/persister-sqlite-wasm/with-schemas/index.js +58 -49
  340. package/persisters/persister-sqlite3/index.js +58 -49
  341. package/persisters/persister-sqlite3/with-schemas/index.js +58 -49
  342. package/persisters/with-schemas/index.js +837 -1
  343. package/readme.md +2 -2
  344. package/releases.md +6 -2
  345. package/synchronizers/index.js +1 -0
  346. package/synchronizers/synchronizer-broadcast-channel/index.js +1 -0
  347. package/synchronizers/synchronizer-broadcast-channel/with-schemas/index.js +1 -0
  348. package/synchronizers/synchronizer-local/index.js +1 -0
  349. package/synchronizers/synchronizer-local/with-schemas/index.js +1 -0
  350. package/synchronizers/synchronizer-ws-client/index.js +1 -0
  351. package/synchronizers/synchronizer-ws-client/with-schemas/index.js +1 -0
  352. package/synchronizers/synchronizer-ws-server/index.js +9 -8
  353. package/synchronizers/synchronizer-ws-server/with-schemas/index.js +9 -8
  354. package/synchronizers/with-schemas/index.js +1 -0
  355. package/umd/es6/index.js +54 -577
  356. package/umd/es6/mergeable-store/index.js +9 -6
  357. package/umd/es6/mergeable-store/with-schemas/index.js +9 -6
  358. package/umd/es6/min/index.js +1 -1
  359. package/umd/es6/min/index.js.gz +0 -0
  360. package/umd/es6/min/persisters/index.js +1 -1
  361. package/umd/es6/min/persisters/index.js.gz +0 -0
  362. package/umd/es6/min/persisters/persister-cr-sqlite-wasm/index.js +1 -1
  363. package/umd/es6/min/persisters/persister-cr-sqlite-wasm/index.js.gz +0 -0
  364. package/umd/es6/min/persisters/persister-cr-sqlite-wasm/with-schemas/index.js +1 -1
  365. package/umd/es6/min/persisters/persister-cr-sqlite-wasm/with-schemas/index.js.gz +0 -0
  366. package/umd/es6/min/persisters/persister-electric-sql/index.js +1 -1
  367. package/umd/es6/min/persisters/persister-electric-sql/index.js.gz +0 -0
  368. package/umd/es6/min/persisters/persister-electric-sql/with-schemas/index.js +1 -1
  369. package/umd/es6/min/persisters/persister-electric-sql/with-schemas/index.js.gz +0 -0
  370. package/umd/es6/min/persisters/persister-expo-sqlite/index.js +1 -1
  371. package/umd/es6/min/persisters/persister-expo-sqlite/index.js.gz +0 -0
  372. package/umd/es6/min/persisters/persister-expo-sqlite/with-schemas/index.js +1 -1
  373. package/umd/es6/min/persisters/persister-expo-sqlite/with-schemas/index.js.gz +0 -0
  374. package/umd/es6/min/persisters/persister-libsql/index.js +1 -1
  375. package/umd/es6/min/persisters/persister-libsql/index.js.gz +0 -0
  376. package/umd/es6/min/persisters/persister-libsql/with-schemas/index.js +1 -1
  377. package/umd/es6/min/persisters/persister-libsql/with-schemas/index.js.gz +0 -0
  378. package/umd/es6/min/persisters/persister-powersync/index.js +1 -1
  379. package/umd/es6/min/persisters/persister-powersync/index.js.gz +0 -0
  380. package/umd/es6/min/persisters/persister-powersync/with-schemas/index.js +1 -1
  381. package/umd/es6/min/persisters/persister-powersync/with-schemas/index.js.gz +0 -0
  382. package/umd/es6/min/persisters/persister-sqlite-wasm/index.js +1 -1
  383. package/umd/es6/min/persisters/persister-sqlite-wasm/index.js.gz +0 -0
  384. package/umd/es6/min/persisters/persister-sqlite-wasm/with-schemas/index.js +1 -1
  385. package/umd/es6/min/persisters/persister-sqlite-wasm/with-schemas/index.js.gz +0 -0
  386. package/umd/es6/min/persisters/persister-sqlite3/index.js +1 -1
  387. package/umd/es6/min/persisters/persister-sqlite3/index.js.gz +0 -0
  388. package/umd/es6/min/persisters/persister-sqlite3/with-schemas/index.js +1 -1
  389. package/umd/es6/min/persisters/persister-sqlite3/with-schemas/index.js.gz +0 -0
  390. package/umd/es6/min/persisters/with-schemas/index.js +1 -1
  391. package/umd/es6/min/persisters/with-schemas/index.js.gz +0 -0
  392. package/umd/es6/min/synchronizers/synchronizer-ws-server/index.js +1 -1
  393. package/umd/es6/min/synchronizers/synchronizer-ws-server/index.js.gz +0 -0
  394. package/umd/es6/min/synchronizers/synchronizer-ws-server/with-schemas/index.js +1 -1
  395. package/umd/es6/min/synchronizers/synchronizer-ws-server/with-schemas/index.js.gz +0 -0
  396. package/umd/es6/min/with-schemas/index.js +1 -1
  397. package/umd/es6/min/with-schemas/index.js.gz +0 -0
  398. package/umd/es6/persisters/index.js +1106 -10
  399. package/umd/es6/persisters/persister-cr-sqlite-wasm/index.js +58 -49
  400. package/umd/es6/persisters/persister-cr-sqlite-wasm/with-schemas/index.js +58 -49
  401. package/umd/es6/persisters/persister-electric-sql/index.js +56 -47
  402. package/umd/es6/persisters/persister-electric-sql/with-schemas/index.js +56 -47
  403. package/umd/es6/persisters/persister-expo-sqlite/index.js +58 -49
  404. package/umd/es6/persisters/persister-expo-sqlite/with-schemas/index.js +58 -49
  405. package/umd/es6/persisters/persister-indexed-db/index.js +2 -2
  406. package/umd/es6/persisters/persister-indexed-db/with-schemas/index.js +2 -2
  407. package/umd/es6/persisters/persister-libsql/index.js +56 -47
  408. package/umd/es6/persisters/persister-libsql/with-schemas/index.js +56 -47
  409. package/umd/es6/persisters/persister-pglite/index.js +61 -54
  410. package/umd/es6/persisters/persister-pglite/with-schemas/index.js +61 -54
  411. package/umd/es6/persisters/persister-postgres/index.js +66 -56
  412. package/umd/es6/persisters/persister-postgres/with-schemas/index.js +66 -56
  413. package/umd/es6/persisters/persister-powersync/index.js +58 -49
  414. package/umd/es6/persisters/persister-powersync/with-schemas/index.js +58 -49
  415. package/umd/es6/persisters/persister-sqlite-wasm/index.js +58 -49
  416. package/umd/es6/persisters/persister-sqlite-wasm/with-schemas/index.js +58 -49
  417. package/umd/es6/persisters/persister-sqlite3/index.js +58 -49
  418. package/umd/es6/persisters/persister-sqlite3/with-schemas/index.js +58 -49
  419. package/umd/es6/persisters/with-schemas/index.js +1106 -10
  420. package/umd/es6/synchronizers/index.js +9 -6
  421. package/umd/es6/synchronizers/synchronizer-broadcast-channel/index.js +9 -6
  422. package/umd/es6/synchronizers/synchronizer-broadcast-channel/with-schemas/index.js +9 -6
  423. package/umd/es6/synchronizers/synchronizer-local/index.js +9 -6
  424. package/umd/es6/synchronizers/synchronizer-local/with-schemas/index.js +9 -6
  425. package/umd/es6/synchronizers/synchronizer-ws-client/index.js +9 -6
  426. package/umd/es6/synchronizers/synchronizer-ws-client/with-schemas/index.js +9 -6
  427. package/umd/es6/synchronizers/synchronizer-ws-server/index.js +17 -14
  428. package/umd/es6/synchronizers/synchronizer-ws-server/with-schemas/index.js +17 -14
  429. package/umd/es6/synchronizers/with-schemas/index.js +9 -6
  430. package/umd/es6/with-schemas/index.js +54 -577
  431. package/umd/index.js +45 -454
  432. package/umd/mergeable-store/index.js +1 -0
  433. package/umd/mergeable-store/with-schemas/index.js +1 -0
  434. package/umd/min/index.js +1 -1
  435. package/umd/min/index.js.gz +0 -0
  436. package/umd/min/persisters/index.js +1 -1
  437. package/umd/min/persisters/index.js.gz +0 -0
  438. package/umd/min/persisters/persister-cr-sqlite-wasm/index.js +1 -1
  439. package/umd/min/persisters/persister-cr-sqlite-wasm/index.js.gz +0 -0
  440. package/umd/min/persisters/persister-cr-sqlite-wasm/with-schemas/index.js +1 -1
  441. package/umd/min/persisters/persister-cr-sqlite-wasm/with-schemas/index.js.gz +0 -0
  442. package/umd/min/persisters/persister-electric-sql/index.js +1 -1
  443. package/umd/min/persisters/persister-electric-sql/index.js.gz +0 -0
  444. package/umd/min/persisters/persister-electric-sql/with-schemas/index.js +1 -1
  445. package/umd/min/persisters/persister-electric-sql/with-schemas/index.js.gz +0 -0
  446. package/umd/min/persisters/persister-expo-sqlite/index.js +1 -1
  447. package/umd/min/persisters/persister-expo-sqlite/index.js.gz +0 -0
  448. package/umd/min/persisters/persister-expo-sqlite/with-schemas/index.js +1 -1
  449. package/umd/min/persisters/persister-expo-sqlite/with-schemas/index.js.gz +0 -0
  450. package/umd/min/persisters/persister-libsql/index.js +1 -1
  451. package/umd/min/persisters/persister-libsql/index.js.gz +0 -0
  452. package/umd/min/persisters/persister-libsql/with-schemas/index.js +1 -1
  453. package/umd/min/persisters/persister-libsql/with-schemas/index.js.gz +0 -0
  454. package/umd/min/persisters/persister-powersync/index.js +1 -1
  455. package/umd/min/persisters/persister-powersync/index.js.gz +0 -0
  456. package/umd/min/persisters/persister-powersync/with-schemas/index.js +1 -1
  457. package/umd/min/persisters/persister-powersync/with-schemas/index.js.gz +0 -0
  458. package/umd/min/persisters/persister-sqlite-wasm/index.js +1 -1
  459. package/umd/min/persisters/persister-sqlite-wasm/index.js.gz +0 -0
  460. package/umd/min/persisters/persister-sqlite-wasm/with-schemas/index.js +1 -1
  461. package/umd/min/persisters/persister-sqlite-wasm/with-schemas/index.js.gz +0 -0
  462. package/umd/min/persisters/persister-sqlite3/index.js +1 -1
  463. package/umd/min/persisters/persister-sqlite3/index.js.gz +0 -0
  464. package/umd/min/persisters/persister-sqlite3/with-schemas/index.js +1 -1
  465. package/umd/min/persisters/persister-sqlite3/with-schemas/index.js.gz +0 -0
  466. package/umd/min/persisters/with-schemas/index.js +1 -1
  467. package/umd/min/persisters/with-schemas/index.js.gz +0 -0
  468. package/umd/min/synchronizers/synchronizer-ws-server/index.js +1 -1
  469. package/umd/min/synchronizers/synchronizer-ws-server/index.js.gz +0 -0
  470. package/umd/min/synchronizers/synchronizer-ws-server/with-schemas/index.js +1 -1
  471. package/umd/min/synchronizers/synchronizer-ws-server/with-schemas/index.js.gz +0 -0
  472. package/umd/min/with-schemas/index.js +1 -1
  473. package/umd/min/with-schemas/index.js.gz +0 -0
  474. package/umd/persisters/index.js +835 -0
  475. package/umd/persisters/persister-cr-sqlite-wasm/index.js +57 -48
  476. package/umd/persisters/persister-cr-sqlite-wasm/with-schemas/index.js +57 -48
  477. package/umd/persisters/persister-electric-sql/index.js +56 -47
  478. package/umd/persisters/persister-electric-sql/with-schemas/index.js +56 -47
  479. package/umd/persisters/persister-expo-sqlite/index.js +57 -48
  480. package/umd/persisters/persister-expo-sqlite/with-schemas/index.js +57 -48
  481. package/umd/persisters/persister-indexed-db/index.js +2 -2
  482. package/umd/persisters/persister-indexed-db/with-schemas/index.js +2 -2
  483. package/umd/persisters/persister-libsql/index.js +56 -47
  484. package/umd/persisters/persister-libsql/with-schemas/index.js +56 -47
  485. package/umd/persisters/persister-pglite/index.js +59 -52
  486. package/umd/persisters/persister-pglite/with-schemas/index.js +59 -52
  487. package/umd/persisters/persister-postgres/index.js +61 -54
  488. package/umd/persisters/persister-postgres/with-schemas/index.js +61 -54
  489. package/umd/persisters/persister-powersync/index.js +58 -49
  490. package/umd/persisters/persister-powersync/with-schemas/index.js +58 -49
  491. package/umd/persisters/persister-sqlite-wasm/index.js +62 -49
  492. package/umd/persisters/persister-sqlite-wasm/with-schemas/index.js +62 -49
  493. package/umd/persisters/persister-sqlite3/index.js +58 -49
  494. package/umd/persisters/persister-sqlite3/with-schemas/index.js +58 -49
  495. package/umd/persisters/with-schemas/index.js +835 -0
  496. package/umd/synchronizers/index.js +1 -0
  497. package/umd/synchronizers/synchronizer-broadcast-channel/index.js +1 -0
  498. package/umd/synchronizers/synchronizer-broadcast-channel/with-schemas/index.js +1 -0
  499. package/umd/synchronizers/synchronizer-local/index.js +1 -0
  500. package/umd/synchronizers/synchronizer-local/with-schemas/index.js +1 -0
  501. package/umd/synchronizers/synchronizer-ws-client/index.js +1 -0
  502. package/umd/synchronizers/synchronizer-ws-client/with-schemas/index.js +1 -0
  503. package/umd/synchronizers/synchronizer-ws-server/index.js +9 -8
  504. package/umd/synchronizers/synchronizer-ws-server/with-schemas/index.js +9 -8
  505. package/umd/synchronizers/with-schemas/index.js +1 -0
  506. package/umd/with-schemas/index.js +45 -454
  507. package/with-schemas/index.js +45 -447
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://beta.tinybase.org/guides/releases/#v5-2"><em>NEW!</em> v5.2 release</a></p><p><span id="one-with">&quot;The One With PostgreSQL!&quot;</span></p><p><a class="start" href="https://beta.tinybase.org/guides/the-basics/getting-started/">Get started</a></p><p><a href="https://beta.tinybase.org/demos/">Try the demos</a></p><p><a href="https://beta.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://beta.tinybase.org/guides/synchronization/">synchronize</a> and merge data across multiple sources, clients, and servers. And although TinyBase is an in-memory data store, but you can easily <a href="#persist-to-storage-databases-more">persist</a> your data to file, <a href="https://beta.tinybase.org/api/persister-browser">browser storage</a>, <a href="https://beta.tinybase.org/api/persister-indexed-db">IndexedDB</a>, <a href="https://beta.tinybase.org/guides/persistence/database-persistence/">SQLite or PostgreSQL databases</a>, and <a href="https://beta.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 - 12.7kB</a> and with no dependencies - yet <a href="#well-tested-and-documented">100% tested</a>, <a href="https://beta.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://beta.tinybase.org/guides/building-uis/getting-started-with-ui-react"><img width="48" src="https://beta.tinybase.org/react.svg"> React</a></div><div><a href="https://beta.tinybase.org/api/persister-indexed-db/functions/creation/createindexeddbpersister"><img width="48" src="https://beta.tinybase.org/indexeddb.svg"> IndexedDB</a></div><div><a href="https://beta.tinybase.org/guides/schemas-and-persistence/database-persistence"><img width="48" src="https://beta.tinybase.org/postgresql.svg"> PostgreSQL</a></div><div><a href="https://beta.tinybase.org/guides/schemas-and-persistence/database-persistence"><img width="48" src="https://beta.tinybase.org/sqlite.svg"> SQLite</a></div><div><a href="https://beta.tinybase.org/guides/schemas-and-persistence/database-persistence"><img width="48" src="https://beta.tinybase.org/expo.svg">Expo SQLite</a></div><div><a href="https://beta.tinybase.org/guides/schemas-and-persistence/database-persistence"><img width="48" src="https://beta.tinybase.org/electric.svg">ElectricSQL</a></div><div><a href="https://beta.tinybase.org/guides/schemas-and-persistence/database-persistence"><img width="48" src="https://beta.tinybase.org/turso.svg">Turso</a></div><div><a href="https://beta.tinybase.org/guides/schemas-and-persistence/database-persistence"><img width="48" src="https://beta.tinybase.org/powersync.svg">PowerSync</a></div><div><a href="https://beta.tinybase.org/api/persister-partykit-client"><img width="48" src="https://beta.tinybase.org/partykit.svg"> PartyKit</a></div><div><a href="https://beta.tinybase.org/api/persister-yjs/functions/creation/createyjspersister"><img width="48" src="https://beta.tinybase.org/yjs.svg"> YJS</a></div><div><a href="https://beta.tinybase.org/api/persister-cr-sqlite-wasm"><img width="48" src="https://beta.tinybase.org/crsqlite.png"> CR-SQLite</a></div><div><a href="https://beta.tinybase.org/api/persister-automerge"><img width="48" src="https://beta.tinybase.org/automerge.svg"> Automerge</a></div></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://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><a href="https://twitter.com/tinybasejs" target="_blank"><img src="https://img.shields.io/twitter/follow/tinybasejs?style=for-the-badge&amp;logo=x&amp;logoColor=%23fff&amp;label=Twitter&amp;labelColor=%23333&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.2.0-beta.3" 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://beta.tinybase.org/api/store/interfaces/store/store/"><code>Store</code></a> requires just a simple call to the <a href="https://beta.tinybase.org/api/store/functions/creation/createstore/"><code>createStore</code></a> function. Once you have one, you can easily set <a href="https://beta.tinybase.org/api/store/type-aliases/store/values/"><code>Values</code></a> in it by unique <a href="https://beta.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://beta.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://beta.tinybase.org/guides/releases/#v5-2"><em>NEW!</em> v5.2 release</a></p><p><span id="one-with">&quot;The One With PostgreSQL!&quot;</span></p><p><a class="start" href="https://beta.tinybase.org/guides/the-basics/getting-started/">Get started</a></p><p><a href="https://beta.tinybase.org/demos/">Try the demos</a></p><p><a href="https://beta.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://beta.tinybase.org/guides/synchronization/">synchronize</a> and merge data across multiple sources, clients, and servers. And although TinyBase is an in-memory data store, but you can easily <a href="#persist-to-storage-databases-more">persist</a> your data to file, <a href="https://beta.tinybase.org/api/persister-browser">browser storage</a>, <a href="https://beta.tinybase.org/api/persister-indexed-db">IndexedDB</a>, <a href="https://beta.tinybase.org/guides/persistence/database-persistence/">SQLite or PostgreSQL databases</a>, and <a href="https://beta.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://beta.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://beta.tinybase.org/guides/building-uis/getting-started-with-ui-react"><img width="48" src="https://beta.tinybase.org/react.svg"> React</a></div><div><a href="https://beta.tinybase.org/api/persister-indexed-db/functions/creation/createindexeddbpersister"><img width="48" src="https://beta.tinybase.org/indexeddb.svg"> IndexedDB</a></div><div><a href="https://beta.tinybase.org/guides/schemas-and-persistence/database-persistence"><img width="48" src="https://beta.tinybase.org/postgresql.svg"> PostgreSQL</a></div><div><a href="https://beta.tinybase.org/guides/schemas-and-persistence/database-persistence"><img width="48" src="https://beta.tinybase.org/pglite.svg"> PGlite</a></div><div><a href="https://beta.tinybase.org/guides/schemas-and-persistence/database-persistence"><img width="48" src="https://beta.tinybase.org/sqlite.svg"> SQLite</a></div><div><a href="https://beta.tinybase.org/guides/schemas-and-persistence/database-persistence"><img width="48" src="https://beta.tinybase.org/expo.svg"> Expo SQLite</a></div><div><a href="https://beta.tinybase.org/guides/schemas-and-persistence/database-persistence"><img width="48" src="https://beta.tinybase.org/electric.svg"> ElectricSQL</a></div><div><a href="https://beta.tinybase.org/guides/schemas-and-persistence/database-persistence"><img width="48" src="https://beta.tinybase.org/turso.svg"> Turso</a></div><div><a href="https://beta.tinybase.org/guides/schemas-and-persistence/database-persistence"><img width="48" src="https://beta.tinybase.org/powersync.svg"> PowerSync</a></div><div><a href="https://beta.tinybase.org/api/persister-partykit-client"><img width="48" src="https://beta.tinybase.org/partykit.svg"> PartyKit</a></div><div><a href="https://beta.tinybase.org/api/persister-yjs/functions/creation/createyjspersister"><img width="48" src="https://beta.tinybase.org/yjs.svg"> YJS</a></div><div><a href="https://beta.tinybase.org/api/persister-cr-sqlite-wasm"><img width="48" src="https://beta.tinybase.org/crsqlite.png"> CR-SQLite</a></div><div><a href="https://beta.tinybase.org/api/persister-automerge"><img width="48" src="https://beta.tinybase.org/automerge.svg"> Automerge</a></div></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://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><a href="https://twitter.com/tinybasejs" target="_blank"><img src="https://img.shields.io/twitter/follow/tinybasejs?style=for-the-badge&amp;logo=x&amp;logoColor=%23fff&amp;label=Twitter&amp;labelColor=%23333&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.2.0-beta.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://beta.tinybase.org/api/store/interfaces/store/store/"><code>Store</code></a> requires just a simple call to the <a href="https://beta.tinybase.org/api/store/functions/creation/createstore/"><code>createStore</code></a> function. Once you have one, you can easily set <a href="https://beta.tinybase.org/api/store/type-aliases/store/values/"><code>Values</code></a> in it by unique <a href="https://beta.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://beta.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://beta.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>12.7kB</em>.</p><p>The optional <a href="https://beta.tinybase.org/api/ui-react/"><code>ui-react</code></a> module is just <em>4.6kB</em>, the ui-react-dom components are another <em>2.5kB</em>, and everything is super fast. Life&#x27;s easy when you have zero dependencies!</p><p>Read more about how TinyBase is structured and packaged in the <a href="https://beta.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://beta.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>12.7kB</td><td>130.9kB</td></tr><tr><th class="right"><a href="https://beta.tinybase.org/api/ui-react/">ui-react</a></th><td>4.6kB</td><td>48.3kB</td></tr><tr><th class="right"><a href="https://beta.tinybase.org/api/ui-react-dom/">ui-react-dom</a></th><td>2.5kB</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://beta.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,390</td><td>2,390</td><td>100.0%</td></tr><tr><th class="right">Statements</th><td>2,577</td><td>2,577</td><td>100.0%</td></tr><tr><th class="right">Functions</th><td>1,007</td><td>1,007</td><td>100.0%</td></tr><tr><th class="right">Branches</th><td>951</td><td>951</td><td>100.0%</td></tr><tr><th class="right">Tests</th><td colspan="3">7,109</td></tr><tr><th class="right">Assertions</th><td colspan="3">32,558</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 title="cpojer" src="https://github.com/cpojer.png?size=48" width="48" height="48"></a><a href="https://github.com/expo" target="_blank"><img title="expo" src="https://github.com/expo.png?size=48" width="48" height="48"></a><a href="https://github.com/beekeeb" target="_blank"><img title="beekeeb" src="https://github.com/beekeeb.png?size=48" width="48" height="48"></a><a href="https://github.com/cancelself" target="_blank"><img title="cancelself" src="https://github.com/cancelself.png?size=48" width="48" height="48"></a><a href="https://github.com/WonderPanda" target="_blank"><img title="WonderPanda" src="https://github.com/WonderPanda.png?size=48" width="48" height="48"></a><a href="https://github.com/arpitBhalla" target="_blank"><img title="arpitBhalla" src="https://github.com/arpitBhalla.png?size=48" 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/Apocalypsor" target="_blank"><img title="Apocalypsor" src="https://github.com/Apocalypsor.png?size=48" width="48" height="48"></a><a href="https://github.com/brentvatne" target="_blank"><img title="brentvatne" src="https://github.com/brentvatne.png?size=48" width="48" height="48"></a><a href="https://github.com/byCedric" target="_blank"><img title="byCedric" src="https://github.com/byCedric.png?size=48" width="48" height="48"></a><a href="https://github.com/circadian-risk" target="_blank"><img title="circadian-risk" src="https://github.com/circadian-risk.png?size=48" width="48" height="48"></a><a href="https://github.com/cpojer" target="_blank"><img title="cpojer" src="https://github.com/cpojer.png?size=48" width="48" height="48"></a><a href="https://github.com/cubecull" target="_blank"><img title="cubecull" src="https://github.com/cubecull.png?size=48" width="48" height="48"></a><a href="https://github.com/erwinkn" target="_blank"><img title="erwinkn" src="https://github.com/erwinkn.png?size=48" width="48" height="48"></a><a href="https://github.com/expo" target="_blank"><img title="expo" src="https://github.com/expo.png?size=48" width="48" height="48"></a><a href="https://github.com/ezra-en" target="_blank"><img title="ezra-en" src="https://github.com/ezra-en.png?size=48" width="48" height="48"></a><a href="https://github.com/fdfontes" target="_blank"><img title="fdfontes" src="https://github.com/fdfontes.png?size=48" width="48" height="48"></a><a href="https://github.com/feychenie" target="_blank"><img title="feychenie" src="https://github.com/feychenie.png?size=48" width="48" height="48"></a><a href="https://github.com/flaming-codes" target="_blank"><img title="flaming-codes" src="https://github.com/flaming-codes.png?size=48" width="48" height="48"></a><a href="https://github.com/fostertheweb" target="_blank"><img title="fostertheweb" src="https://github.com/fostertheweb.png?size=48" width="48" height="48"></a><a href="https://github.com/generates" target="_blank"><img title="generates" src="https://github.com/generates.png?size=48" width="48" height="48"></a><a href="https://github.com/Giulio987" target="_blank"><img title="Giulio987" src="https://github.com/Giulio987.png?size=48" width="48" height="48"></a><a href="https://github.com/itsdevcoffee" target="_blank"><img title="itsdevcoffee" src="https://github.com/itsdevcoffee.png?size=48" width="48" height="48"></a><a href="https://github.com/jaysc" target="_blank"><img title="jaysc" src="https://github.com/jaysc.png?size=48" width="48" height="48"></a><a href="https://github.com/jbolda" target="_blank"><img title="jbolda" src="https://github.com/jbolda.png?size=48" width="48" height="48"></a><a href="https://github.com/Kayoo-asso" target="_blank"><img title="Kayoo-asso" src="https://github.com/Kayoo-asso.png?size=48" width="48" height="48"></a><a href="https://github.com/kotofurumiya" target="_blank"><img title="kotofurumiya" src="https://github.com/kotofurumiya.png?size=48" width="48" height="48"></a><a href="https://github.com/Kudo" target="_blank"><img title="Kudo" src="https://github.com/Kudo.png?size=48" width="48" height="48"></a><a href="https://github.com/learn-anything" target="_blank"><img title="learn-anything" src="https://github.com/learn-anything.png?size=48" width="48" height="48"></a><a href="https://github.com/lluc" target="_blank"><img title="lluc" src="https://github.com/lluc.png?size=48" width="48" height="48"></a><a href="https://github.com/marksteve" target="_blank"><img title="marksteve" src="https://github.com/marksteve.png?size=48" width="48" height="48"></a><a href="https://github.com/miking-the-viking" target="_blank"><img title="miking-the-viking" src="https://github.com/miking-the-viking.png?size=48" width="48" height="48"></a><a href="https://github.com/mjamesderocher" target="_blank"><img title="mjamesderocher" src="https://github.com/mjamesderocher.png?size=48" width="48" height="48"></a><a href="https://github.com/mouktardev" target="_blank"><img title="mouktardev" src="https://github.com/mouktardev.png?size=48" width="48" height="48"></a><a href="https://github.com/nickmessing" target="_blank"><img title="nickmessing" src="https://github.com/nickmessing.png?size=48" width="48" height="48"></a><a href="https://github.com/nikitavoloboev" target="_blank"><img title="nikitavoloboev" src="https://github.com/nikitavoloboev.png?size=48" width="48" height="48"></a><a href="https://github.com/nkzw-tech" target="_blank"><img title="nkzw-tech" src="https://github.com/nkzw-tech.png?size=48" width="48" height="48"></a><a href="https://github.com/palerdot" target="_blank"><img title="palerdot" src="https://github.com/palerdot.png?size=48" width="48" height="48"></a><a href="https://github.com/PorcoRosso85" target="_blank"><img title="PorcoRosso85" src="https://github.com/PorcoRosso85.png?size=48" width="48" height="48"></a><a href="https://github.com/primodiumxyz" target="_blank"><img title="primodiumxyz" src="https://github.com/primodiumxyz.png?size=48" width="48" height="48"></a><a href="https://github.com/shaneosullivan" target="_blank"><img title="shaneosullivan" src="https://github.com/shaneosullivan.png?size=48" width="48" height="48"></a><a href="https://github.com/sudo-self" target="_blank"><img title="sudo-self" src="https://github.com/sudo-self.png?size=48" width="48" height="48"></a><a href="https://github.com/SuperSonicHub1" target="_blank"><img title="SuperSonicHub1" src="https://github.com/SuperSonicHub1.png?size=48" width="48" height="48"></a><a href="https://github.com/threepointone" target="_blank"><img title="threepointone" src="https://github.com/threepointone.png?size=48" width="48" height="48"></a><a href="https://github.com/uptonking" target="_blank"><img title="uptonking" src="https://github.com/uptonking.png?size=48" width="48" height="48"></a><a href="https://github.com/ViktorZhurbin" target="_blank"><img title="ViktorZhurbin" src="https://github.com/ViktorZhurbin.png?size=48" width="48" height="48"></a><a href="https://github.com/WonderPanda" target="_blank"><img title="WonderPanda" src="https://github.com/WonderPanda.png?size=48" width="48" height="48"></a></section><hr><p><a class="start" href="https://beta.tinybase.org/guides/the-basics/getting-started/">Get started</a></p><p><a href="https://beta.tinybase.org/demos/">Try the demos</a></p><p><a href="https://beta.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://beta.tinybase.org/guides/how-tinybase-is-built/credits/#giants">projects</a> and <a href="https://beta.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://beta.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://beta.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://beta.tinybase.org/api/ui-react/"><code>ui-react</code></a> module is just <em>4.6kB</em>, the ui-react-dom components are another <em>2.5kB</em>, and everything is super fast. Life&#x27;s easy when you have zero dependencies!</p><p>Read more about how TinyBase is structured and packaged in the <a href="https://beta.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://beta.tinybase.org/api/store/">tinybase/store</a> (minimal)</th><td>5.3kB</td><td>52.6kB</td></tr><tr><th class="right">tinybase (complete)</th><td>11.4kB</td><td>118.8kB</td></tr><tr><th class="right"><a href="https://beta.tinybase.org/api/ui-react/">ui-react</a></th><td>4.6kB</td><td>48.3kB</td></tr><tr><th class="right"><a href="https://beta.tinybase.org/api/ui-react-dom/">ui-react-dom</a></th><td>2.5kB</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://beta.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,391</td><td>2,391</td><td>100.0%</td></tr><tr><th class="right">Statements</th><td>2,578</td><td>2,578</td><td>100.0%</td></tr><tr><th class="right">Functions</th><td>1,007</td><td>1,007</td><td>100.0%</td></tr><tr><th class="right">Branches</th><td>951</td><td>951</td><td>100.0%</td></tr><tr><th class="right">Tests</th><td colspan="3">7,281</td></tr><tr><th class="right">Assertions</th><td colspan="3">32,863</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 title="cpojer" src="https://github.com/cpojer.png?size=48" width="48" height="48"></a><a href="https://github.com/expo" target="_blank"><img title="expo" src="https://github.com/expo.png?size=48" width="48" height="48"></a><a href="https://github.com/beekeeb" target="_blank"><img title="beekeeb" src="https://github.com/beekeeb.png?size=48" width="48" height="48"></a><a href="https://github.com/cancelself" target="_blank"><img title="cancelself" src="https://github.com/cancelself.png?size=48" width="48" height="48"></a><a href="https://github.com/WonderPanda" target="_blank"><img title="WonderPanda" src="https://github.com/WonderPanda.png?size=48" width="48" height="48"></a><a href="https://github.com/arpitBhalla" target="_blank"><img title="arpitBhalla" src="https://github.com/arpitBhalla.png?size=48" 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/Apocalypsor" target="_blank"><img title="Apocalypsor" src="https://github.com/Apocalypsor.png?size=48" width="48" height="48"></a><a href="https://github.com/brentvatne" target="_blank"><img title="brentvatne" src="https://github.com/brentvatne.png?size=48" width="48" height="48"></a><a href="https://github.com/byCedric" target="_blank"><img title="byCedric" src="https://github.com/byCedric.png?size=48" width="48" height="48"></a><a href="https://github.com/circadian-risk" target="_blank"><img title="circadian-risk" src="https://github.com/circadian-risk.png?size=48" width="48" height="48"></a><a href="https://github.com/cpojer" target="_blank"><img title="cpojer" src="https://github.com/cpojer.png?size=48" width="48" height="48"></a><a href="https://github.com/cubecull" target="_blank"><img title="cubecull" src="https://github.com/cubecull.png?size=48" width="48" height="48"></a><a href="https://github.com/erwinkn" target="_blank"><img title="erwinkn" src="https://github.com/erwinkn.png?size=48" width="48" height="48"></a><a href="https://github.com/expo" target="_blank"><img title="expo" src="https://github.com/expo.png?size=48" width="48" height="48"></a><a href="https://github.com/ezra-en" target="_blank"><img title="ezra-en" src="https://github.com/ezra-en.png?size=48" width="48" height="48"></a><a href="https://github.com/fdfontes" target="_blank"><img title="fdfontes" src="https://github.com/fdfontes.png?size=48" width="48" height="48"></a><a href="https://github.com/feychenie" target="_blank"><img title="feychenie" src="https://github.com/feychenie.png?size=48" width="48" height="48"></a><a href="https://github.com/flaming-codes" target="_blank"><img title="flaming-codes" src="https://github.com/flaming-codes.png?size=48" width="48" height="48"></a><a href="https://github.com/fostertheweb" target="_blank"><img title="fostertheweb" src="https://github.com/fostertheweb.png?size=48" width="48" height="48"></a><a href="https://github.com/generates" target="_blank"><img title="generates" src="https://github.com/generates.png?size=48" width="48" height="48"></a><a href="https://github.com/Giulio987" target="_blank"><img title="Giulio987" src="https://github.com/Giulio987.png?size=48" width="48" height="48"></a><a href="https://github.com/itsdevcoffee" target="_blank"><img title="itsdevcoffee" src="https://github.com/itsdevcoffee.png?size=48" width="48" height="48"></a><a href="https://github.com/jaysc" target="_blank"><img title="jaysc" src="https://github.com/jaysc.png?size=48" width="48" height="48"></a><a href="https://github.com/jbolda" target="_blank"><img title="jbolda" src="https://github.com/jbolda.png?size=48" width="48" height="48"></a><a href="https://github.com/Kayoo-asso" target="_blank"><img title="Kayoo-asso" src="https://github.com/Kayoo-asso.png?size=48" width="48" height="48"></a><a href="https://github.com/kotofurumiya" target="_blank"><img title="kotofurumiya" src="https://github.com/kotofurumiya.png?size=48" width="48" height="48"></a><a href="https://github.com/Kudo" target="_blank"><img title="Kudo" src="https://github.com/Kudo.png?size=48" width="48" height="48"></a><a href="https://github.com/learn-anything" target="_blank"><img title="learn-anything" src="https://github.com/learn-anything.png?size=48" width="48" height="48"></a><a href="https://github.com/lluc" target="_blank"><img title="lluc" src="https://github.com/lluc.png?size=48" width="48" height="48"></a><a href="https://github.com/marksteve" target="_blank"><img title="marksteve" src="https://github.com/marksteve.png?size=48" width="48" height="48"></a><a href="https://github.com/miking-the-viking" target="_blank"><img title="miking-the-viking" src="https://github.com/miking-the-viking.png?size=48" width="48" height="48"></a><a href="https://github.com/mjamesderocher" target="_blank"><img title="mjamesderocher" src="https://github.com/mjamesderocher.png?size=48" width="48" height="48"></a><a href="https://github.com/mouktardev" target="_blank"><img title="mouktardev" src="https://github.com/mouktardev.png?size=48" width="48" height="48"></a><a href="https://github.com/nickmessing" target="_blank"><img title="nickmessing" src="https://github.com/nickmessing.png?size=48" width="48" height="48"></a><a href="https://github.com/nikitavoloboev" target="_blank"><img title="nikitavoloboev" src="https://github.com/nikitavoloboev.png?size=48" width="48" height="48"></a><a href="https://github.com/nkzw-tech" target="_blank"><img title="nkzw-tech" src="https://github.com/nkzw-tech.png?size=48" width="48" height="48"></a><a href="https://github.com/palerdot" target="_blank"><img title="palerdot" src="https://github.com/palerdot.png?size=48" width="48" height="48"></a><a href="https://github.com/PorcoRosso85" target="_blank"><img title="PorcoRosso85" src="https://github.com/PorcoRosso85.png?size=48" width="48" height="48"></a><a href="https://github.com/primodiumxyz" target="_blank"><img title="primodiumxyz" src="https://github.com/primodiumxyz.png?size=48" width="48" height="48"></a><a href="https://github.com/shaneosullivan" target="_blank"><img title="shaneosullivan" src="https://github.com/shaneosullivan.png?size=48" width="48" height="48"></a><a href="https://github.com/sudo-self" target="_blank"><img title="sudo-self" src="https://github.com/sudo-self.png?size=48" width="48" height="48"></a><a href="https://github.com/SuperSonicHub1" target="_blank"><img title="SuperSonicHub1" src="https://github.com/SuperSonicHub1.png?size=48" width="48" height="48"></a><a href="https://github.com/threepointone" target="_blank"><img title="threepointone" src="https://github.com/threepointone.png?size=48" width="48" height="48"></a><a href="https://github.com/uptonking" target="_blank"><img title="uptonking" src="https://github.com/uptonking.png?size=48" width="48" height="48"></a><a href="https://github.com/ViktorZhurbin" target="_blank"><img title="ViktorZhurbin" src="https://github.com/ViktorZhurbin.png?size=48" width="48" height="48"></a><a href="https://github.com/WonderPanda" target="_blank"><img title="WonderPanda" src="https://github.com/WonderPanda.png?size=48" width="48" height="48"></a></section><hr><p><a class="start" href="https://beta.tinybase.org/guides/the-basics/getting-started/">Get started</a></p><p><a href="https://beta.tinybase.org/demos/">Try the demos</a></p><p><a href="https://beta.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://beta.tinybase.org/guides/how-tinybase-is-built/credits/#giants">projects</a> and <a href="https://beta.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://beta.tinybase.org/youtube.webp"></a></section>
package/releases.md CHANGED
@@ -1,4 +1,4 @@
1
- <p>This is a reverse chronological list of the major <a href="https://beta.tinybase.org/">TinyBase</a> releases, with highlighted features.</p><h2 id="v5-2">v5.2</h2><p>This release introduces a new <a href="https://beta.tinybase.org/api/persisters/interfaces/persister/persister/"><code>Persister</code></a> for... PostgreSQL!</p><p>Using <a href="https://beta.tinybase.org/">TinyBase</a>&#x27;s new <a href="https://beta.tinybase.org/api/persister-postgres/"><code>persister-postgres</code></a> module (and the excellent <a href="https://github.com/porsager/postgres"><code>postgres</code></a> module for connection duties), things behave in exactly the same way as they do for SQLite. Simply use the <a href="https://beta.tinybase.org/api/persister-postgres/functions/creation/createpostgrespersister/"><code>createPostgresPersister</code></a> function:</p>
1
+ <p>This is a reverse chronological list of the major <a href="https://beta.tinybase.org/">TinyBase</a> releases, with highlighted features.</p><h2 id="v5-2">v5.2</h2><p>This release introduces new Persisters for... PostgreSQL! <a href="https://beta.tinybase.org/">TinyBase</a> now has two new <a href="https://beta.tinybase.org/api/persisters/interfaces/persister/persister/"><code>Persister</code></a> modules:</p><ul><li>The <a href="https://beta.tinybase.org/api/persister-postgres/"><code>persister-postgres</code></a> module provides the <a href="https://beta.tinybase.org/api/persister-postgres/interfaces/persister/postgrespersister/"><code>PostgresPersister</code></a>, which uses the excellent <a href="https://github.com/porsager/postgres"><code>postgres</code></a> module to bind to regular PostgreSQL databases, generally on a server.</li><li>The <a href="https://beta.tinybase.org/api/persister-pglite/"><code>persister-pglite</code></a> module provides the <a href="https://beta.tinybase.org/api/persister-pglite/interfaces/persister/pglitepersister/"><code>PglitePersister</code></a>, which uses the new and exciting <a href="https://github.com/electric-sql/pglite"><code>pglite</code></a> module for running PostgreSQL... in a browser!</li></ul><p>Conceptually, things behave in the same way as they do for the various SQLite persisters. Simply use the <a href="https://beta.tinybase.org/api/persister-postgres/functions/creation/createpostgrespersister/"><code>createPostgresPersister</code></a> function (or the similar <a href="https://beta.tinybase.org/api/persister-pglite/functions/creation/createpglitepersister/"><code>createPglitePersister</code></a> function) to persist your <a href="https://beta.tinybase.org/">TinyBase</a> data:</p>
2
2
 
3
3
  ```js
4
4
  import postgres from 'postgres';
@@ -17,7 +17,11 @@ await pgPersister.save();
17
17
 
18
18
  console.log(await sql`SELECT * FROM my_tinybase;`);
19
19
  // -> [{_id: '_', store: '[{"pets":{"fido":{"species":"dog"}}},{}]'}]
20
+ ```
21
+
22
+ <p>And, as per usual, you can update the database and have <a href="https://beta.tinybase.org/">TinyBase</a> automatically reflect those changes:</p>
20
23
 
24
+ ```js
21
25
  // If separately the database gets updated...
22
26
  const json = '[{"pets":{"felix":{"species":"cat"}}},{}]';
23
27
  await sql`UPDATE my_tinybase SET store = ${json} WHERE _id = '_';`;
@@ -32,7 +36,7 @@ pgPersister.destroy();
32
36
  await sql.end();
33
37
  ```
34
38
 
35
- <p>This is designed for use on a server, where such a database is more likely to be reachable, but any environment that supports the <code>postgres</code> module should work.</p><p>Note that this <a href="https://beta.tinybase.org/api/persisters/interfaces/persister/persister/"><code>Persister</code></a> supports both the <code>json</code> and <code>tabular</code> modes for saving <a href="https://beta.tinybase.org/">TinyBase</a> data into the database. See the <a href="https://beta.tinybase.org/api/persisters/type-aliases/configuration/databasepersisterconfig/"><code>DatabasePersisterConfig</code></a> type for more details. (Note however that, like the SQLite Persisters, only the <code>json</code> mode is supported for <a href="https://beta.tinybase.org/api/mergeable-store/interfaces/mergeable/mergeablestore/"><code>MergeableStore</code></a> instances, due to their additional CRDT metadata.)</p><p>Please provide feedback on this new release on GitHub!</p><h2 id="v5-1">v5.1</h2><p>This release lets you persist data on a server using the <a href="https://beta.tinybase.org/api/synchronizer-ws-server/functions/creation/createwsserver/"><code>createWsServer</code></a> function. This makes it possible for all clients to disconnect from a path, but, when they reconnect, for the data to still be present for them to sync with.</p><p>This is done by passing in a second argument to the <a href="https://beta.tinybase.org/api/synchronizer-ws-server/functions/creation/createwsserver/"><code>createWsServer</code></a> function that creates a <a href="https://beta.tinybase.org/api/persisters/interfaces/persister/persister/"><code>Persister</code></a> instance (for which also need to create or provide a <a href="https://beta.tinybase.org/api/mergeable-store/interfaces/mergeable/mergeablestore/"><code>MergeableStore</code></a>) for a given path:</p>
39
+ <p>Note that these two <a href="https://beta.tinybase.org/api/persisters/interfaces/persister/persister/"><code>Persister</code></a> objects support both the <code>json</code> and <code>tabular</code> modes for saving <a href="https://beta.tinybase.org/">TinyBase</a> data into the database. See the <a href="https://beta.tinybase.org/api/persisters/type-aliases/configuration/databasepersisterconfig/"><code>DatabasePersisterConfig</code></a> type for more details. (Note however that, like the SQLite Persisters, only the <code>json</code> mode is supported for <a href="https://beta.tinybase.org/api/mergeable-store/interfaces/mergeable/mergeablestore/"><code>MergeableStore</code></a> instances, due to their additional CRDT metadata.)</p><p>Please provide feedback on this new release on GitHub!</p><h2 id="v5-1">v5.1</h2><p>This release lets you persist data on a server using the <a href="https://beta.tinybase.org/api/synchronizer-ws-server/functions/creation/createwsserver/"><code>createWsServer</code></a> function. This makes it possible for all clients to disconnect from a path, but, when they reconnect, for the data to still be present for them to sync with.</p><p>This is done by passing in a second argument to the <a href="https://beta.tinybase.org/api/synchronizer-ws-server/functions/creation/createwsserver/"><code>createWsServer</code></a> function that creates a <a href="https://beta.tinybase.org/api/persisters/interfaces/persister/persister/"><code>Persister</code></a> instance (for which also need to create or provide a <a href="https://beta.tinybase.org/api/mergeable-store/interfaces/mergeable/mergeablestore/"><code>MergeableStore</code></a>) for a given path:</p>
36
40
 
37
41
  ```js
38
42
  import {WebSocketServer} from 'ws';
@@ -68,6 +68,7 @@ new GLOBAL.TextEncoder();
68
68
 
69
69
  const newStamp = (value, time) => (time ? [value, time] : [value]);
70
70
  const getLatestTime = (time1, time2) =>
71
+ /* istanbul ignore next */
71
72
  ((time1 ?? '') > (time2 ?? '') ? time1 : time2) ?? '';
72
73
  const stampNewObj = (time = EMPTY_STRING) => newStamp(objNew(), time);
73
74
 
@@ -68,6 +68,7 @@ new GLOBAL.TextEncoder();
68
68
 
69
69
  const newStamp = (value, time) => (time ? [value, time] : [value]);
70
70
  const getLatestTime = (time1, time2) =>
71
+ /* istanbul ignore next */
71
72
  ((time1 ?? '') > (time2 ?? '') ? time1 : time2) ?? '';
72
73
  const stampNewObj = (time = EMPTY_STRING) => newStamp(objNew(), time);
73
74
 
@@ -68,6 +68,7 @@ new GLOBAL.TextEncoder();
68
68
 
69
69
  const newStamp = (value, time) => (time ? [value, time] : [value]);
70
70
  const getLatestTime = (time1, time2) =>
71
+ /* istanbul ignore next */
71
72
  ((time1 ?? '') > (time2 ?? '') ? time1 : time2) ?? '';
72
73
  const stampNewObj = (time = EMPTY_STRING) => newStamp(objNew(), time);
73
74
 
@@ -71,6 +71,7 @@ new GLOBAL.TextEncoder();
71
71
 
72
72
  const newStamp = (value, time) => (time ? [value, time] : [value]);
73
73
  const getLatestTime = (time1, time2) =>
74
+ /* istanbul ignore next */
74
75
  ((time1 ?? '') > (time2 ?? '') ? time1 : time2) ?? '';
75
76
  const stampNewObj = (time = EMPTY_STRING) => newStamp(objNew(), time);
76
77
 
@@ -71,6 +71,7 @@ new GLOBAL.TextEncoder();
71
71
 
72
72
  const newStamp = (value, time) => (time ? [value, time] : [value]);
73
73
  const getLatestTime = (time1, time2) =>
74
+ /* istanbul ignore next */
74
75
  ((time1 ?? '') > (time2 ?? '') ? time1 : time2) ?? '';
75
76
  const stampNewObj = (time = EMPTY_STRING) => newStamp(objNew(), time);
76
77
 
@@ -94,6 +94,7 @@ new GLOBAL.TextEncoder();
94
94
 
95
95
  const newStamp = (value, time) => (time ? [value, time] : [value]);
96
96
  const getLatestTime = (time1, time2) =>
97
+ /* istanbul ignore next */
97
98
  ((time1 ?? '') > (time2 ?? '') ? time1 : time2) ?? '';
98
99
  const stampNewObj = (time = EMPTY_STRING) => newStamp(objNew(), time);
99
100
 
@@ -94,6 +94,7 @@ new GLOBAL.TextEncoder();
94
94
 
95
95
  const newStamp = (value, time) => (time ? [value, time] : [value]);
96
96
  const getLatestTime = (time1, time2) =>
97
+ /* istanbul ignore next */
97
98
  ((time1 ?? '') > (time2 ?? '') ? time1 : time2) ?? '';
98
99
  const stampNewObj = (time = EMPTY_STRING) => newStamp(objNew(), time);
99
100
 
@@ -130,6 +130,7 @@ new GLOBAL.TextEncoder();
130
130
 
131
131
  const newStamp = (value, time) => (time ? [value, time] : [value]);
132
132
  const getLatestTime = (time1, time2) =>
133
+ /* istanbul ignore next */
133
134
  ((time1 ?? '') > (time2 ?? '') ? time1 : time2) ?? '';
134
135
  const stampNewObj = (time = EMPTY_STRING) => newStamp(objNew(), time);
135
136
 
@@ -313,6 +314,14 @@ const createCustomPersister = (
313
314
  return objFreeze(persister);
314
315
  };
315
316
 
317
+ const setNew = (entryOrEntries) =>
318
+ new Set(
319
+ isArray(entryOrEntries) || isUndefined(entryOrEntries)
320
+ ? entryOrEntries
321
+ : [entryOrEntries],
322
+ );
323
+ const setAdd = (set, value) => set?.add(value);
324
+
316
325
  const MASK6 = 63;
317
326
  const ENCODE =
318
327
  '-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz'.split(
@@ -518,14 +527,6 @@ const createCustomSynchronizer = (
518
527
  return persister;
519
528
  };
520
529
 
521
- const setNew = (entryOrEntries) =>
522
- new Set(
523
- isArray(entryOrEntries) || isUndefined(entryOrEntries)
524
- ? entryOrEntries
525
- : [entryOrEntries],
526
- );
527
- const setAdd = (set, value) => set?.add(value);
528
-
529
530
  const INTEGER = /^\d+$/;
530
531
  const getPoolFunctions = () => {
531
532
  const pool = [];
@@ -130,6 +130,7 @@ new GLOBAL.TextEncoder();
130
130
 
131
131
  const newStamp = (value, time) => (time ? [value, time] : [value]);
132
132
  const getLatestTime = (time1, time2) =>
133
+ /* istanbul ignore next */
133
134
  ((time1 ?? '') > (time2 ?? '') ? time1 : time2) ?? '';
134
135
  const stampNewObj = (time = EMPTY_STRING) => newStamp(objNew(), time);
135
136
 
@@ -313,6 +314,14 @@ const createCustomPersister = (
313
314
  return objFreeze(persister);
314
315
  };
315
316
 
317
+ const setNew = (entryOrEntries) =>
318
+ new Set(
319
+ isArray(entryOrEntries) || isUndefined(entryOrEntries)
320
+ ? entryOrEntries
321
+ : [entryOrEntries],
322
+ );
323
+ const setAdd = (set, value) => set?.add(value);
324
+
316
325
  const MASK6 = 63;
317
326
  const ENCODE =
318
327
  '-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz'.split(
@@ -518,14 +527,6 @@ const createCustomSynchronizer = (
518
527
  return persister;
519
528
  };
520
529
 
521
- const setNew = (entryOrEntries) =>
522
- new Set(
523
- isArray(entryOrEntries) || isUndefined(entryOrEntries)
524
- ? entryOrEntries
525
- : [entryOrEntries],
526
- );
527
- const setAdd = (set, value) => set?.add(value);
528
-
529
530
  const INTEGER = /^\d+$/;
530
531
  const getPoolFunctions = () => {
531
532
  const pool = [];
@@ -68,6 +68,7 @@ new GLOBAL.TextEncoder();
68
68
 
69
69
  const newStamp = (value, time) => (time ? [value, time] : [value]);
70
70
  const getLatestTime = (time1, time2) =>
71
+ /* istanbul ignore next */
71
72
  ((time1 ?? '') > (time2 ?? '') ? time1 : time2) ?? '';
72
73
  const stampNewObj = (time = EMPTY_STRING) => newStamp(objNew(), time);
73
74