tinybase 7.0.0-beta.1 → 7.0.0-beta.3

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 (329) hide show
  1. package/@types/common/index.d.ts +1 -1
  2. package/@types/mergeable-store/index.d.ts +2 -1
  3. package/@types/mergeable-store/with-schemas/index.d.ts +5 -3
  4. package/@types/omni/index.d.ts +2 -0
  5. package/@types/omni/with-schemas/index.d.ts +2 -0
  6. package/@types/persisters/index.d.ts +4 -0
  7. package/@types/persisters/persister-automerge/index.d.ts +4 -6
  8. package/@types/persisters/persister-automerge/with-schemas/index.d.ts +7 -8
  9. package/@types/persisters/persister-browser/index.d.ts +97 -6
  10. package/@types/persisters/persister-browser/with-schemas/index.d.ts +113 -6
  11. package/@types/persisters/persister-cr-sqlite-wasm/index.d.ts +4 -0
  12. package/@types/persisters/persister-cr-sqlite-wasm/with-schemas/index.d.ts +7 -2
  13. package/@types/persisters/persister-durable-object-sql-storage/index.d.ts +6 -2
  14. package/@types/persisters/persister-durable-object-sql-storage/with-schemas/index.d.ts +5 -0
  15. package/@types/persisters/persister-durable-object-storage/index.d.ts +1 -2
  16. package/@types/persisters/persister-durable-object-storage/with-schemas/index.d.ts +3 -2
  17. package/@types/persisters/persister-electric-sql/index.d.ts +4 -0
  18. package/@types/persisters/persister-electric-sql/with-schemas/index.d.ts +7 -2
  19. package/@types/persisters/persister-expo-sqlite/index.d.ts +5 -2
  20. package/@types/persisters/persister-expo-sqlite/with-schemas/index.d.ts +7 -2
  21. package/@types/persisters/persister-file/index.d.ts +1 -2
  22. package/@types/persisters/persister-file/with-schemas/index.d.ts +3 -2
  23. package/@types/persisters/persister-indexed-db/with-schemas/index.d.ts +3 -2
  24. package/@types/persisters/persister-libsql/index.d.ts +4 -0
  25. package/@types/persisters/persister-libsql/with-schemas/index.d.ts +7 -2
  26. package/@types/persisters/persister-partykit-client/with-schemas/index.d.ts +3 -2
  27. package/@types/persisters/persister-pglite/index.d.ts +7 -3
  28. package/@types/persisters/persister-pglite/with-schemas/index.d.ts +9 -3
  29. package/@types/persisters/persister-postgres/index.d.ts +5 -2
  30. package/@types/persisters/persister-postgres/with-schemas/index.d.ts +7 -2
  31. package/@types/persisters/persister-powersync/index.d.ts +4 -0
  32. package/@types/persisters/persister-powersync/with-schemas/index.d.ts +7 -2
  33. package/@types/persisters/persister-react-native-mmkv/index.d.ts +117 -0
  34. package/@types/persisters/persister-react-native-mmkv/with-schemas/index.d.ts +133 -0
  35. package/@types/persisters/persister-react-native-sqlite/index.d.ts +184 -0
  36. package/@types/persisters/persister-react-native-sqlite/with-schemas/index.d.ts +207 -0
  37. package/@types/persisters/persister-remote/with-schemas/index.d.ts +3 -2
  38. package/@types/persisters/persister-sqlite-bun/index.d.ts +5 -2
  39. package/@types/persisters/persister-sqlite-bun/with-schemas/index.d.ts +7 -2
  40. package/@types/persisters/persister-sqlite-wasm/index.d.ts +6 -2
  41. package/@types/persisters/persister-sqlite-wasm/with-schemas/index.d.ts +8 -2
  42. package/@types/persisters/persister-sqlite3/index.d.ts +5 -2
  43. package/@types/persisters/persister-sqlite3/with-schemas/index.d.ts +7 -2
  44. package/@types/persisters/persister-yjs/with-schemas/index.d.ts +3 -2
  45. package/@types/persisters/with-schemas/index.d.ts +4 -0
  46. package/@types/queries/index.d.ts +1 -1
  47. package/@types/queries/with-schemas/index.d.ts +4 -8
  48. package/@types/store/index.d.ts +34 -19
  49. package/@types/store/with-schemas/index.d.ts +28 -13
  50. package/@types/synchronizers/index.d.ts +1 -0
  51. package/@types/synchronizers/synchronizer-broadcast-channel/with-schemas/index.d.ts +3 -2
  52. package/@types/synchronizers/synchronizer-local/with-schemas/index.d.ts +3 -2
  53. package/@types/synchronizers/synchronizer-ws-client/index.d.ts +4 -2
  54. package/@types/synchronizers/synchronizer-ws-client/with-schemas/index.d.ts +1 -0
  55. package/@types/synchronizers/synchronizer-ws-server/index.d.ts +7 -7
  56. package/@types/synchronizers/synchronizer-ws-server/with-schemas/index.d.ts +7 -7
  57. package/@types/synchronizers/synchronizer-ws-server-durable-object/index.d.ts +1 -0
  58. package/@types/synchronizers/synchronizer-ws-server-durable-object/with-schemas/index.d.ts +1 -0
  59. package/@types/synchronizers/synchronizer-ws-server-simple/index.d.ts +1 -1
  60. package/@types/synchronizers/synchronizer-ws-server-simple/with-schemas/index.d.ts +1 -1
  61. package/@types/synchronizers/with-schemas/index.d.ts +4 -2
  62. package/@types/ui-react/index.d.ts +6 -1
  63. package/@types/ui-react/with-schemas/index.d.ts +6 -1
  64. package/@types/ui-react-dom/index.d.ts +153 -20
  65. package/@types/ui-react-dom/with-schemas/index.d.ts +72 -20
  66. package/@types/ui-react-inspector/index.d.ts +8 -0
  67. package/@types/ui-react-inspector/with-schemas/index.d.ts +27 -1925
  68. package/agents.md +343 -0
  69. package/checkpoints/index.js +11 -6
  70. package/checkpoints/with-schemas/index.js +11 -6
  71. package/common/index.js +8 -4
  72. package/common/with-schemas/index.js +8 -4
  73. package/index.js +63 -31
  74. package/indexes/index.js +10 -5
  75. package/indexes/with-schemas/index.js +10 -5
  76. package/mergeable-store/index.js +54 -22
  77. package/mergeable-store/with-schemas/index.js +54 -22
  78. package/metrics/index.js +10 -5
  79. package/metrics/with-schemas/index.js +10 -5
  80. package/min/checkpoints/index.js +1 -1
  81. package/min/checkpoints/index.js.gz +0 -0
  82. package/min/checkpoints/with-schemas/index.js +1 -1
  83. package/min/checkpoints/with-schemas/index.js.gz +0 -0
  84. package/min/common/index.js +1 -1
  85. package/min/common/index.js.gz +0 -0
  86. package/min/common/with-schemas/index.js +1 -1
  87. package/min/common/with-schemas/index.js.gz +0 -0
  88. package/min/index.js +1 -1
  89. package/min/index.js.gz +0 -0
  90. package/min/indexes/index.js +1 -1
  91. package/min/indexes/index.js.gz +0 -0
  92. package/min/indexes/with-schemas/index.js +1 -1
  93. package/min/indexes/with-schemas/index.js.gz +0 -0
  94. package/min/mergeable-store/index.js +1 -1
  95. package/min/mergeable-store/index.js.gz +0 -0
  96. package/min/mergeable-store/with-schemas/index.js +1 -1
  97. package/min/mergeable-store/with-schemas/index.js.gz +0 -0
  98. package/min/metrics/index.js +1 -1
  99. package/min/metrics/index.js.gz +0 -0
  100. package/min/metrics/with-schemas/index.js +1 -1
  101. package/min/metrics/with-schemas/index.js.gz +0 -0
  102. package/min/omni/index.js +1 -1
  103. package/min/omni/index.js.gz +0 -0
  104. package/min/omni/with-schemas/index.js +1 -1
  105. package/min/omni/with-schemas/index.js.gz +0 -0
  106. package/min/persisters/index.js +1 -1
  107. package/min/persisters/index.js.gz +0 -0
  108. package/min/persisters/persister-automerge/index.js +1 -1
  109. package/min/persisters/persister-automerge/index.js.gz +0 -0
  110. package/min/persisters/persister-automerge/with-schemas/index.js +1 -1
  111. package/min/persisters/persister-automerge/with-schemas/index.js.gz +0 -0
  112. package/min/persisters/persister-browser/index.js +1 -1
  113. package/min/persisters/persister-browser/index.js.gz +0 -0
  114. package/min/persisters/persister-browser/with-schemas/index.js +1 -1
  115. package/min/persisters/persister-browser/with-schemas/index.js.gz +0 -0
  116. package/min/persisters/persister-cr-sqlite-wasm/index.js +1 -1
  117. package/min/persisters/persister-cr-sqlite-wasm/index.js.gz +0 -0
  118. package/min/persisters/persister-cr-sqlite-wasm/with-schemas/index.js +1 -1
  119. package/min/persisters/persister-cr-sqlite-wasm/with-schemas/index.js.gz +0 -0
  120. package/min/persisters/persister-durable-object-sql-storage/index.js +1 -1
  121. package/min/persisters/persister-durable-object-sql-storage/index.js.gz +0 -0
  122. package/min/persisters/persister-durable-object-sql-storage/with-schemas/index.js +1 -1
  123. package/min/persisters/persister-durable-object-sql-storage/with-schemas/index.js.gz +0 -0
  124. package/min/persisters/persister-durable-object-storage/index.js +1 -1
  125. package/min/persisters/persister-durable-object-storage/index.js.gz +0 -0
  126. package/min/persisters/persister-durable-object-storage/with-schemas/index.js +1 -1
  127. package/min/persisters/persister-durable-object-storage/with-schemas/index.js.gz +0 -0
  128. package/min/persisters/persister-electric-sql/index.js +1 -1
  129. package/min/persisters/persister-electric-sql/index.js.gz +0 -0
  130. package/min/persisters/persister-electric-sql/with-schemas/index.js +1 -1
  131. package/min/persisters/persister-electric-sql/with-schemas/index.js.gz +0 -0
  132. package/min/persisters/persister-expo-sqlite/index.js +1 -1
  133. package/min/persisters/persister-expo-sqlite/index.js.gz +0 -0
  134. package/min/persisters/persister-expo-sqlite/with-schemas/index.js +1 -1
  135. package/min/persisters/persister-expo-sqlite/with-schemas/index.js.gz +0 -0
  136. package/min/persisters/persister-file/index.js +1 -1
  137. package/min/persisters/persister-file/index.js.gz +0 -0
  138. package/min/persisters/persister-file/with-schemas/index.js +1 -1
  139. package/min/persisters/persister-file/with-schemas/index.js.gz +0 -0
  140. package/min/persisters/persister-indexed-db/index.js +1 -1
  141. package/min/persisters/persister-indexed-db/index.js.gz +0 -0
  142. package/min/persisters/persister-indexed-db/with-schemas/index.js +1 -1
  143. package/min/persisters/persister-indexed-db/with-schemas/index.js.gz +0 -0
  144. package/min/persisters/persister-libsql/index.js +1 -1
  145. package/min/persisters/persister-libsql/index.js.gz +0 -0
  146. package/min/persisters/persister-libsql/with-schemas/index.js +1 -1
  147. package/min/persisters/persister-libsql/with-schemas/index.js.gz +0 -0
  148. package/min/persisters/persister-partykit-client/index.js +1 -1
  149. package/min/persisters/persister-partykit-client/index.js.gz +0 -0
  150. package/min/persisters/persister-partykit-client/with-schemas/index.js +1 -1
  151. package/min/persisters/persister-partykit-client/with-schemas/index.js.gz +0 -0
  152. package/min/persisters/persister-partykit-server/index.js +1 -1
  153. package/min/persisters/persister-partykit-server/index.js.gz +0 -0
  154. package/min/persisters/persister-partykit-server/with-schemas/index.js +1 -1
  155. package/min/persisters/persister-partykit-server/with-schemas/index.js.gz +0 -0
  156. package/min/persisters/persister-pglite/index.js +1 -1
  157. package/min/persisters/persister-pglite/index.js.gz +0 -0
  158. package/min/persisters/persister-pglite/with-schemas/index.js +1 -1
  159. package/min/persisters/persister-pglite/with-schemas/index.js.gz +0 -0
  160. package/min/persisters/persister-postgres/index.js +1 -1
  161. package/min/persisters/persister-postgres/index.js.gz +0 -0
  162. package/min/persisters/persister-postgres/with-schemas/index.js +1 -1
  163. package/min/persisters/persister-postgres/with-schemas/index.js.gz +0 -0
  164. package/min/persisters/persister-powersync/index.js +1 -1
  165. package/min/persisters/persister-powersync/index.js.gz +0 -0
  166. package/min/persisters/persister-powersync/with-schemas/index.js +1 -1
  167. package/min/persisters/persister-powersync/with-schemas/index.js.gz +0 -0
  168. package/min/persisters/persister-react-native-mmkv/index.js +1 -0
  169. package/min/persisters/persister-react-native-mmkv/index.js.gz +0 -0
  170. package/min/persisters/persister-react-native-mmkv/with-schemas/index.js +1 -0
  171. package/min/persisters/persister-react-native-mmkv/with-schemas/index.js.gz +0 -0
  172. package/min/persisters/persister-react-native-sqlite/index.js +1 -0
  173. package/min/persisters/persister-react-native-sqlite/index.js.gz +0 -0
  174. package/min/persisters/persister-react-native-sqlite/with-schemas/index.js +1 -0
  175. package/min/persisters/persister-react-native-sqlite/with-schemas/index.js.gz +0 -0
  176. package/min/persisters/persister-remote/index.js +1 -1
  177. package/min/persisters/persister-remote/index.js.gz +0 -0
  178. package/min/persisters/persister-remote/with-schemas/index.js +1 -1
  179. package/min/persisters/persister-remote/with-schemas/index.js.gz +0 -0
  180. package/min/persisters/persister-sqlite-bun/index.js +1 -1
  181. package/min/persisters/persister-sqlite-bun/index.js.gz +0 -0
  182. package/min/persisters/persister-sqlite-bun/with-schemas/index.js +1 -1
  183. package/min/persisters/persister-sqlite-bun/with-schemas/index.js.gz +0 -0
  184. package/min/persisters/persister-sqlite-wasm/index.js +1 -1
  185. package/min/persisters/persister-sqlite-wasm/index.js.gz +0 -0
  186. package/min/persisters/persister-sqlite-wasm/with-schemas/index.js +1 -1
  187. package/min/persisters/persister-sqlite-wasm/with-schemas/index.js.gz +0 -0
  188. package/min/persisters/persister-sqlite3/index.js +1 -1
  189. package/min/persisters/persister-sqlite3/index.js.gz +0 -0
  190. package/min/persisters/persister-sqlite3/with-schemas/index.js +1 -1
  191. package/min/persisters/persister-sqlite3/with-schemas/index.js.gz +0 -0
  192. package/min/persisters/persister-yjs/index.js +1 -1
  193. package/min/persisters/persister-yjs/index.js.gz +0 -0
  194. package/min/persisters/persister-yjs/with-schemas/index.js +1 -1
  195. package/min/persisters/persister-yjs/with-schemas/index.js.gz +0 -0
  196. package/min/persisters/with-schemas/index.js +1 -1
  197. package/min/persisters/with-schemas/index.js.gz +0 -0
  198. package/min/queries/index.js +1 -1
  199. package/min/queries/index.js.gz +0 -0
  200. package/min/queries/with-schemas/index.js +1 -1
  201. package/min/queries/with-schemas/index.js.gz +0 -0
  202. package/min/relationships/index.js +1 -1
  203. package/min/relationships/index.js.gz +0 -0
  204. package/min/relationships/with-schemas/index.js +1 -1
  205. package/min/relationships/with-schemas/index.js.gz +0 -0
  206. package/min/store/index.js +1 -1
  207. package/min/store/index.js.gz +0 -0
  208. package/min/store/with-schemas/index.js +1 -1
  209. package/min/store/with-schemas/index.js.gz +0 -0
  210. package/min/synchronizers/index.js +1 -1
  211. package/min/synchronizers/index.js.gz +0 -0
  212. package/min/synchronizers/synchronizer-broadcast-channel/index.js +1 -1
  213. package/min/synchronizers/synchronizer-broadcast-channel/index.js.gz +0 -0
  214. package/min/synchronizers/synchronizer-broadcast-channel/with-schemas/index.js +1 -1
  215. package/min/synchronizers/synchronizer-broadcast-channel/with-schemas/index.js.gz +0 -0
  216. package/min/synchronizers/synchronizer-local/index.js +1 -1
  217. package/min/synchronizers/synchronizer-local/index.js.gz +0 -0
  218. package/min/synchronizers/synchronizer-local/with-schemas/index.js +1 -1
  219. package/min/synchronizers/synchronizer-local/with-schemas/index.js.gz +0 -0
  220. package/min/synchronizers/synchronizer-ws-client/index.js +1 -1
  221. package/min/synchronizers/synchronizer-ws-client/index.js.gz +0 -0
  222. package/min/synchronizers/synchronizer-ws-client/with-schemas/index.js +1 -1
  223. package/min/synchronizers/synchronizer-ws-client/with-schemas/index.js.gz +0 -0
  224. package/min/synchronizers/synchronizer-ws-server/index.js +1 -1
  225. package/min/synchronizers/synchronizer-ws-server/index.js.gz +0 -0
  226. package/min/synchronizers/synchronizer-ws-server/with-schemas/index.js +1 -1
  227. package/min/synchronizers/synchronizer-ws-server/with-schemas/index.js.gz +0 -0
  228. package/min/synchronizers/synchronizer-ws-server-durable-object/index.js +1 -1
  229. package/min/synchronizers/synchronizer-ws-server-durable-object/index.js.gz +0 -0
  230. package/min/synchronizers/synchronizer-ws-server-durable-object/with-schemas/index.js +1 -1
  231. package/min/synchronizers/synchronizer-ws-server-durable-object/with-schemas/index.js.gz +0 -0
  232. package/min/synchronizers/synchronizer-ws-server-simple/index.js +1 -1
  233. package/min/synchronizers/synchronizer-ws-server-simple/index.js.gz +0 -0
  234. package/min/synchronizers/synchronizer-ws-server-simple/with-schemas/index.js +1 -1
  235. package/min/synchronizers/synchronizer-ws-server-simple/with-schemas/index.js.gz +0 -0
  236. package/min/synchronizers/with-schemas/index.js +1 -1
  237. package/min/synchronizers/with-schemas/index.js.gz +0 -0
  238. package/min/ui-react/index.js +1 -1
  239. package/min/ui-react/index.js.gz +0 -0
  240. package/min/ui-react/with-schemas/index.js +1 -1
  241. package/min/ui-react/with-schemas/index.js.gz +0 -0
  242. package/min/ui-react-dom/index.js +1 -1
  243. package/min/ui-react-dom/index.js.gz +0 -0
  244. package/min/ui-react-dom/with-schemas/index.js +1 -1
  245. package/min/ui-react-dom/with-schemas/index.js.gz +0 -0
  246. package/min/ui-react-inspector/index.js +1 -1
  247. package/min/ui-react-inspector/index.js.gz +0 -0
  248. package/min/ui-react-inspector/with-schemas/index.js +1 -1
  249. package/min/ui-react-inspector/with-schemas/index.js.gz +0 -0
  250. package/min/with-schemas/index.js +1 -1
  251. package/min/with-schemas/index.js.gz +0 -0
  252. package/omni/index.js +2178 -1203
  253. package/omni/with-schemas/index.js +2178 -1203
  254. package/package.json +91 -11
  255. package/persisters/index.js +16 -10
  256. package/persisters/persister-automerge/index.js +15 -9
  257. package/persisters/persister-automerge/with-schemas/index.js +15 -9
  258. package/persisters/persister-browser/index.js +41 -9
  259. package/persisters/persister-browser/with-schemas/index.js +41 -9
  260. package/persisters/persister-cr-sqlite-wasm/index.js +16 -10
  261. package/persisters/persister-cr-sqlite-wasm/with-schemas/index.js +16 -10
  262. package/persisters/persister-durable-object-sql-storage/index.js +16 -10
  263. package/persisters/persister-durable-object-sql-storage/with-schemas/index.js +16 -10
  264. package/persisters/persister-durable-object-storage/index.js +14 -8
  265. package/persisters/persister-durable-object-storage/with-schemas/index.js +14 -8
  266. package/persisters/persister-electric-sql/index.js +16 -10
  267. package/persisters/persister-electric-sql/with-schemas/index.js +16 -10
  268. package/persisters/persister-expo-sqlite/index.js +16 -10
  269. package/persisters/persister-expo-sqlite/with-schemas/index.js +16 -10
  270. package/persisters/persister-file/index.js +14 -8
  271. package/persisters/persister-file/with-schemas/index.js +14 -8
  272. package/persisters/persister-indexed-db/index.js +14 -8
  273. package/persisters/persister-indexed-db/with-schemas/index.js +14 -8
  274. package/persisters/persister-libsql/index.js +16 -10
  275. package/persisters/persister-libsql/with-schemas/index.js +16 -10
  276. package/persisters/persister-partykit-client/index.js +14 -8
  277. package/persisters/persister-partykit-client/with-schemas/index.js +14 -8
  278. package/persisters/persister-partykit-server/index.js +7 -3
  279. package/persisters/persister-partykit-server/with-schemas/index.js +7 -3
  280. package/persisters/persister-pglite/index.js +15 -9
  281. package/persisters/persister-pglite/with-schemas/index.js +15 -9
  282. package/persisters/persister-postgres/index.js +15 -9
  283. package/persisters/persister-postgres/with-schemas/index.js +15 -9
  284. package/persisters/persister-powersync/index.js +16 -10
  285. package/persisters/persister-powersync/with-schemas/index.js +16 -10
  286. package/persisters/persister-react-native-mmkv/index.js +465 -0
  287. package/persisters/persister-react-native-mmkv/with-schemas/index.js +465 -0
  288. package/persisters/persister-react-native-sqlite/index.js +1195 -0
  289. package/persisters/persister-react-native-sqlite/with-schemas/index.js +1195 -0
  290. package/persisters/persister-remote/index.js +16 -10
  291. package/persisters/persister-remote/with-schemas/index.js +16 -10
  292. package/persisters/persister-sqlite-bun/index.js +16 -10
  293. package/persisters/persister-sqlite-bun/with-schemas/index.js +16 -10
  294. package/persisters/persister-sqlite-wasm/index.js +16 -10
  295. package/persisters/persister-sqlite-wasm/with-schemas/index.js +16 -10
  296. package/persisters/persister-sqlite3/index.js +16 -10
  297. package/persisters/persister-sqlite3/with-schemas/index.js +16 -10
  298. package/persisters/persister-yjs/index.js +20 -12
  299. package/persisters/persister-yjs/with-schemas/index.js +20 -12
  300. package/persisters/with-schemas/index.js +16 -10
  301. package/queries/index.js +20 -12
  302. package/queries/with-schemas/index.js +20 -12
  303. package/readme.md +13 -13
  304. package/relationships/index.js +10 -5
  305. package/relationships/with-schemas/index.js +10 -5
  306. package/releases.md +179 -41
  307. package/store/index.js +50 -18
  308. package/store/with-schemas/index.js +50 -18
  309. package/synchronizers/index.js +16 -10
  310. package/synchronizers/synchronizer-broadcast-channel/index.js +17 -11
  311. package/synchronizers/synchronizer-broadcast-channel/with-schemas/index.js +17 -11
  312. package/synchronizers/synchronizer-local/index.js +17 -11
  313. package/synchronizers/synchronizer-local/with-schemas/index.js +17 -11
  314. package/synchronizers/synchronizer-ws-client/index.js +16 -10
  315. package/synchronizers/synchronizer-ws-client/with-schemas/index.js +16 -10
  316. package/synchronizers/synchronizer-ws-server/index.js +16 -10
  317. package/synchronizers/synchronizer-ws-server/with-schemas/index.js +16 -10
  318. package/synchronizers/synchronizer-ws-server-durable-object/index.js +16 -10
  319. package/synchronizers/synchronizer-ws-server-durable-object/with-schemas/index.js +16 -10
  320. package/synchronizers/synchronizer-ws-server-simple/index.js +8 -4
  321. package/synchronizers/synchronizer-ws-server-simple/with-schemas/index.js +8 -4
  322. package/synchronizers/with-schemas/index.js +16 -10
  323. package/ui-react/index.js +408 -374
  324. package/ui-react/with-schemas/index.js +408 -374
  325. package/ui-react-dom/index.js +883 -437
  326. package/ui-react-dom/with-schemas/index.js +883 -437
  327. package/ui-react-inspector/index.js +1761 -556
  328. package/ui-react-inspector/with-schemas/index.js +1761 -556
  329. package/with-schemas/index.js +63 -31
package/agents.md ADDED
@@ -0,0 +1,343 @@
1
+ # Agents Guide
2
+
3
+ This file follows the [agents.md](https://agents.md/) specification for AI agent
4
+ context. If you're a human reading this, it provides a comprehensive overview of
5
+ the TinyBase project for AI assistants working with the codebase.
6
+
7
+ ## Overview
8
+
9
+ **TinyBase** is a reactive data store and sync engine for local-first
10
+ applications. It is a TypeScript library that provides a reactive, in-memory
11
+ data store with a powerful synchronization engine. It's designed for building
12
+ local-first applications that work offline and sync across devices. The library
13
+ is exceptionally small (5.3kB-11.7kB), has zero runtime dependencies, and
14
+ maintains 100% test coverage.
15
+
16
+ - **Website**: https://tinybase.org
17
+ - **Repository**: https://github.com/tinyplex/tinybase
18
+ - **Documentation**: https://tinybase.org/api/
19
+ - **License**: MIT
20
+ - **Author**: James Pearce (@jamesgpearce)
21
+
22
+ ## Core Concepts
23
+
24
+ ### Data Store
25
+
26
+ TinyBase provides two types of data structures:
27
+
28
+ - **Tables**: Tabular data organized as Table → Row → Cell (similar to
29
+ relational databases)
30
+ - **Values**: Simple key-value pairs for application state
31
+
32
+ Both can coexist in the same Store and support optional schemas with type
33
+ enforcement.
34
+
35
+ ### Reactivity
36
+
37
+ The library implements a fine-grained reactive system where you can listen to
38
+ changes at any level:
39
+
40
+ - Entire store changes
41
+ - Table/value additions or removals
42
+ - Row changes within a table
43
+ - Individual cell or value changes
44
+
45
+ Listeners fire automatically when data changes, enabling efficient UI updates
46
+ that only re-render affected components.
47
+
48
+ ### Synchronization
49
+
50
+ TinyBase includes native CRDT (Conflict-free Replicated Data Type) support via
51
+ the MergeableStore, allowing deterministic synchronization across multiple
52
+ clients and servers using Hybrid Logical Clocks for causality tracking.
53
+
54
+ ## Key Features
55
+
56
+ ### Data Management
57
+
58
+ - **Schemas**: Optional TypeScript-inferred schemas for type safety
59
+ - **Indexes**: Fast lookups by cell values with slice-based grouping
60
+ - **Queries**: SQL-like query engine (select, join, filter, group) without
61
+ actual SQL
62
+ - **Relationships**: Define foreign-key relationships between tables
63
+ - **Metrics**: Built-in aggregations (sum, avg, min, max)
64
+ - **Checkpoints**: Undo/redo functionality with branching support
65
+
66
+ ### Persistence
67
+
68
+ Multiple storage backends supported via Persisters:
69
+
70
+ - **Browser**: LocalStorage, SessionStorage, IndexedDB, OPFS
71
+ - **Databases**: SQLite (Bun, WASM, sqlite3), PostgreSQL, PGlite, Turso (libSQL)
72
+ - **Third-party**: ElectricSQL, PowerSync, CR-SQLite
73
+ - **Cloud**: PartyKit, Cloudflare Durable Objects
74
+ - **Files**: Node.js file system
75
+ - **CRDT**: Yjs, Automerge integration
76
+ - **React Native**: MMKV, SQLite
77
+
78
+ ### Synchronization
79
+
80
+ Synchronizers enable real-time data sync:
81
+
82
+ - WebSocket (client and server)
83
+ - BroadcastChannel (same-origin tabs)
84
+ - Local (in-memory for testing)
85
+ - Custom transports (extensible)
86
+
87
+ ### React Integration
88
+
89
+ Optional `ui-react` module provides:
90
+
91
+ - **Hooks**: `useCell`, `useRow`, `useTable`, `useTables`, `useValue`, etc.
92
+ - **Components**: Pre-built reactive views for data rendering
93
+ - **Context**: Multi-store support with ID-based contexts
94
+ - **DOM Components**: `ui-react-dom` with interactive tables
95
+ - **Inspector**: Developer tools overlay for debugging
96
+
97
+ ## Architecture
98
+
99
+ ### Modular Design
100
+
101
+ TinyBase uses a modular architecture where each feature is an independent module
102
+ that can be imported separately:
103
+
104
+ ```
105
+ tinybase # Core store module
106
+ tinybase/indexes # Indexing
107
+ tinybase/queries # Query engine
108
+ tinybase/relationships # Relationships
109
+ tinybase/metrics # Aggregations
110
+ tinybase/checkpoints # Undo/redo
111
+ tinybase/mergeable-store # CRDT support
112
+ tinybase/persisters/persister-* # Storage backends
113
+ tinybase/synchronizers/synchronizer-* # Sync transports
114
+ tinybase/ui-react # React hooks
115
+ tinybase/ui-react-dom # React DOM components
116
+ tinybase/ui-react-inspector # DevTools
117
+ ```
118
+
119
+ ### Type System
120
+
121
+ Strong TypeScript support with:
122
+
123
+ - Generic types that infer from schemas
124
+ - Conditional types for schema-aware APIs
125
+ - Mapped types for compile-time validation
126
+ - Type-safe hooks and components
127
+
128
+ ### Build System
129
+
130
+ - **Gulp**: Build orchestration
131
+ - **TypeScript**: Source language with strict mode
132
+ - **Rollup**: Bundling (implied)
133
+ - **ESM**: Primary module format
134
+ - **Tree-shaking**: Aggressive optimization for minimal bundles
135
+
136
+ ## Development
137
+
138
+ ### Prerequisites
139
+
140
+ - Node.js >= 23.10.0
141
+ - npm >= 10.9.2
142
+
143
+ ### Setup
144
+
145
+ ```bash
146
+ git clone https://github.com/tinyplex/tinybase.git
147
+ cd tinybase
148
+ npm install
149
+ ```
150
+
151
+ ### Common Commands
152
+
153
+ ```bash
154
+ npm run compileAndTestUnit # Compile and run unit tests
155
+ npm run testUnitFast # Quick test iteration
156
+ npm run lint # Run ESLint
157
+ npm run spell # Spell check
158
+ npm run preCommit # Full pre-commit check
159
+ npm run compileDocs # Generate API documentation
160
+ npm run serveDocs # Preview documentation locally
161
+ ```
162
+
163
+ ### Testing
164
+
165
+ - **Framework**: Vitest
166
+ - **Coverage**: 100% required (enforced)
167
+ - **Types**: Unit, performance, end-to-end, production
168
+ - **Environment**: happy-dom (unit), puppeteer (e2e)
169
+
170
+ ### Code Style
171
+
172
+ - **ESLint**: Enforced with strict rules
173
+ - **Prettier**: Automatic formatting
174
+ - **Max line length**: 80 characters
175
+ - **Quotes**: Single quotes (template literals allowed)
176
+ - **Semicolons**: Required
177
+ - **Object spacing**: No spaces in braces `{key: value}`
178
+
179
+ ## Project Structure
180
+
181
+ ```
182
+ tinybase/
183
+ ├── src/ # Source code
184
+ │ ├── @types/ # TypeScript declarations
185
+ │ ├── store/ # Core store implementation
186
+ │ ├── indexes/ # Indexing module
187
+ │ ├── queries/ # Query engine
188
+ │ ├── relationships/ # Relationships module
189
+ │ ├── metrics/ # Metrics module
190
+ │ ├── checkpoints/ # Checkpoints module
191
+ │ ├── mergeable-store/ # CRDT implementation
192
+ │ ├── persisters/ # Storage backends
193
+ │ ├── synchronizers/ # Sync transports
194
+ │ ├── ui-react/ # React hooks
195
+ │ ├── ui-react-dom/ # React DOM components
196
+ │ ├── ui-react-inspector/ # DevTools
197
+ │ └── common/ # Shared utilities
198
+ ├── test/ # Tests
199
+ │ ├── unit/ # Unit tests
200
+ │ ├── perf/ # Performance tests
201
+ │ ├── e2e/ # End-to-end tests
202
+ │ └── prod/ # Production build tests
203
+ ├── docs/ # Generated documentation
204
+ ├── dist/ # Build output
205
+ ├── site/ # Documentation site source
206
+ ├── gulpfile.mjs # Build configuration
207
+ ├── vitest.config.ts # Test configuration
208
+ ├── eslint.config.js # Linting rules
209
+ └── tsconfig.json # TypeScript config
210
+ ```
211
+
212
+ ## Contributing
213
+
214
+ Contributions are welcome! This is a spare-time project, so response times may
215
+ vary.
216
+
217
+ **Requirements**:
218
+
219
+ 1. Follow the Prettier and ESLint configurations
220
+ 2. Maintain 100% test coverage
221
+ 3. Update documentation for API changes
222
+ 4. Add examples for new features
223
+
224
+ **Process**:
225
+
226
+ 1. Fork the repository
227
+ 2. Create a feature branch
228
+ 3. Make your changes with tests
229
+ 4. Run `npm run preCommit` to verify
230
+ 5. Submit a pull request
231
+
232
+ See [CONTRIBUTING.md](CONTRIBUTING.md) for details.
233
+
234
+ ## Community
235
+
236
+ - **Discord**: https://discord.com/invite/mGz3mevwP8
237
+ - **Discussions**: https://github.com/tinyplex/tinybase/discussions
238
+ - **Issues**: https://github.com/tinyplex/tinybase/issues
239
+ - **Bluesky**: https://bsky.app/profile/tinybase.bsky.social
240
+ - **Twitter/X**: https://x.com/tinybasejs
241
+
242
+ ## Use Cases
243
+
244
+ TinyBase is ideal for:
245
+
246
+ - **Local-first applications**: Apps that work offline and sync later
247
+ - **Real-time collaboration**: Multi-user applications with CRDT sync
248
+ - **Reactive UIs**: Applications requiring fine-grained reactivity
249
+ - **Mobile apps**: React Native apps with local storage
250
+ - **Edge computing**: Cloudflare Workers, Durable Objects
251
+ - **Progressive Web Apps**: Offline-capable web applications
252
+ - **Games**: Real-time state management with undo/redo
253
+ - **Data dashboards**: Reactive data visualization
254
+
255
+ ## Performance
256
+
257
+ - Tiny bundle sizes (5.3kB - 11.7kB depending on features)
258
+ - Zero runtime dependencies
259
+ - Efficient change detection and listener notification
260
+ - Memory pooling for ID generation
261
+ - Tree-shakeable modular design
262
+ - Optimized for bundle size and runtime performance
263
+
264
+ ## Related Projects
265
+
266
+ - **Synclets**: Generic synchronization library (https://synclets.org)
267
+ - **TinyWidgets**: Widget toolkit built on TinyBase (https://tinywidgets.org)
268
+ - **TinyTick**: Reactive ticker tape component (https://tinytick.org)
269
+
270
+ ## License
271
+
272
+ MIT License - see [LICENSE](LICENSE) file for details.
273
+
274
+ ---
275
+
276
+ **Note for AI Agents**: TinyBase uses unique patterns including utility function
277
+ wrappers (e.g., `arrayForEach`, `mapGet`, `objHas`) instead of native methods
278
+ for consistency and tree-shaking. Always use factory functions (`createStore`,
279
+ `createIndexes`, etc.) with builder pattern chaining. Maintain 100% test
280
+ coverage and follow the strict 80-character line length. See
281
+ `.github/copilot-instructions.md` for detailed coding patterns.
282
+
283
+ ## Documentation System
284
+
285
+ TinyBase has a sophisticated documentation system that generates the website
286
+ from source code and markdown files.
287
+
288
+ ### Documentation Structure
289
+
290
+ 1. **Type Definitions (`src/@types/*/`)**: TypeScript `.d.ts` files contain the
291
+ API type definitions. **Never add comments directly to `.d.ts` files**.
292
+
293
+ 2. **Documentation Files (`src/@types/*/docs.js`)**: Companion `docs.js` files
294
+ sit alongside `.d.ts` files. Use `///` convention to document types and
295
+ functions. These are stitched together at build time to generate
296
+ documentation.
297
+
298
+ 3. **Guide Files (`site/guides/*/*.md`)**: Markdown files in the `site/guides/`
299
+ directory, organized by topic (basics, schemas, persistence, etc.). These are
300
+ source files for guides on the website.
301
+
302
+ 4. **Generated Files**: `/releases.md` and `/readme.md` in the root are
303
+ **GENERATED** from `/site/guides/16_releases.md` and `/site/home/index.md`.
304
+ **Never edit the generated files directly**.
305
+
306
+ ### Documentation Testing
307
+
308
+ TinyBase has automated tests that validate all inline code examples in
309
+ documentation:
310
+
311
+ ```bash
312
+ npx vitest run ./test/unit/documentation.test.ts --retry=0
313
+ ```
314
+
315
+ **How it works**:
316
+
317
+ - Extracts all code blocks from markdown files and `docs.js` files
318
+ - Concatenates all examples from each file together
319
+ - Parses and executes them to ensure they work
320
+ - This means examples in the same file share scope
321
+
322
+ **Critical constraints**:
323
+
324
+ - Don't redeclare variables across examples in the same file
325
+ - First example can declare `const store = createStore()`, subsequent examples
326
+ reuse it
327
+ - Include necessary imports in examples that use them
328
+ - Avoid async operations in examples unless necessary
329
+ - Keep examples simple and focused
330
+
331
+ **Common pitfalls**:
332
+
333
+ - ❌ Declaring `const store` multiple times in the same file
334
+ - ❌ Using undefined functions (forgot import statement)
335
+ - ✅ First example: `const store = createStore()`
336
+ - ✅ Later examples: `store.setCell(...)` (reuses existing store)
337
+
338
+ ### Adding New Documentation
339
+
340
+ 1. **API Documentation**: Edit `docs.js` file next to the type definition
341
+ 2. **Guide Content**: Edit markdown files in `/site/guides/`
342
+ 3. **Release Notes**: Edit `/site/guides/16_releases.md` (not `/releases.md`)
343
+ 4. **Always run documentation tests** after changes to verify examples work
@@ -1,8 +1,13 @@
1
1
  const EMPTY_STRING = '';
2
2
 
3
- const isUndefined = (thing) => thing == void 0;
4
- const ifNotUndefined = (value, then, otherwise) =>
5
- isUndefined(value) ? otherwise?.() : then(value);
3
+ const getIfNotFunction =
4
+ (predicate = isNullish) =>
5
+ (value, then, otherwise) =>
6
+ predicate(value) ? otherwise?.() : then(value);
7
+ const isNullish = (thing) => thing == null;
8
+ const isUndefined = (thing) => thing === void 0;
9
+ const isNull = (thing) => thing === null;
10
+ const ifNotUndefined = getIfNotFunction(isUndefined);
6
11
  const isArray = (thing) => Array.isArray(thing);
7
12
  const size = (arrayOrString) => arrayOrString.length;
8
13
  const test = (regex, subject) => regex.test(subject);
@@ -42,7 +47,7 @@ const mapGet = (map, key) => map?.get(key);
42
47
  const mapForEach = (map, cb) =>
43
48
  collForEach(map, (value, key) => cb(key, value));
44
49
  const mapSet = (map, key, value) =>
45
- isUndefined(value) ? (collDel(map, key), map) : map?.set(key, value);
50
+ value === void 0 ? (collDel(map, key), map) : map?.set(key, value);
46
51
  const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
47
52
  if (!collHas(map, key)) {
48
53
  mapSet(map, key, getDefaultValue());
@@ -165,7 +170,7 @@ const getListenerFunctions = (getThing) => {
165
170
  const index = size(ids);
166
171
  if (index == size(path)) {
167
172
  listener(thing, ...ids, ...extraArgsGetter(ids));
168
- } else if (isUndefined(path[index])) {
173
+ } else if (isNull(path[index])) {
169
174
  arrayForEach(pathGetters[index]?.(...ids) ?? [], (id2) =>
170
175
  callWithIds(...ids, id2),
171
176
  );
@@ -318,7 +323,7 @@ const createCheckpoints = getCreateFunction(
318
323
  ? goBackwardImpl
319
324
  : arrayHas(forwardIds, checkpointId)
320
325
  ? goForwardImpl
321
- : null;
326
+ : void 0;
322
327
  while (!isUndefined(action) && checkpointId != currentId) {
323
328
  action();
324
329
  }
@@ -1,8 +1,13 @@
1
1
  const EMPTY_STRING = '';
2
2
 
3
- const isUndefined = (thing) => thing == void 0;
4
- const ifNotUndefined = (value, then, otherwise) =>
5
- isUndefined(value) ? otherwise?.() : then(value);
3
+ const getIfNotFunction =
4
+ (predicate = isNullish) =>
5
+ (value, then, otherwise) =>
6
+ predicate(value) ? otherwise?.() : then(value);
7
+ const isNullish = (thing) => thing == null;
8
+ const isUndefined = (thing) => thing === void 0;
9
+ const isNull = (thing) => thing === null;
10
+ const ifNotUndefined = getIfNotFunction(isUndefined);
6
11
  const isArray = (thing) => Array.isArray(thing);
7
12
  const size = (arrayOrString) => arrayOrString.length;
8
13
  const test = (regex, subject) => regex.test(subject);
@@ -42,7 +47,7 @@ const mapGet = (map, key) => map?.get(key);
42
47
  const mapForEach = (map, cb) =>
43
48
  collForEach(map, (value, key) => cb(key, value));
44
49
  const mapSet = (map, key, value) =>
45
- isUndefined(value) ? (collDel(map, key), map) : map?.set(key, value);
50
+ value === void 0 ? (collDel(map, key), map) : map?.set(key, value);
46
51
  const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
47
52
  if (!collHas(map, key)) {
48
53
  mapSet(map, key, getDefaultValue());
@@ -165,7 +170,7 @@ const getListenerFunctions = (getThing) => {
165
170
  const index = size(ids);
166
171
  if (index == size(path)) {
167
172
  listener(thing, ...ids, ...extraArgsGetter(ids));
168
- } else if (isUndefined(path[index])) {
173
+ } else if (isNull(path[index])) {
169
174
  arrayForEach(pathGetters[index]?.(...ids) ?? [], (id2) =>
170
175
  callWithIds(...ids, id2),
171
176
  );
@@ -318,7 +323,7 @@ const createCheckpoints = getCreateFunction(
318
323
  ? goBackwardImpl
319
324
  : arrayHas(forwardIds, checkpointId)
320
325
  ? goForwardImpl
321
- : null;
326
+ : void 0;
322
327
  while (!isUndefined(action) && checkpointId != currentId) {
323
328
  action();
324
329
  }
package/common/index.js CHANGED
@@ -2,14 +2,18 @@ const EMPTY_STRING = '';
2
2
  const strSplit = (str, separator = EMPTY_STRING, limit) =>
3
3
  str.split(separator, limit);
4
4
 
5
+ const getIfNotFunction =
6
+ (predicate = isNullish) =>
7
+ (value, then, otherwise) =>
8
+ predicate(value) ? otherwise?.() : then(value);
5
9
  const GLOBAL = globalThis;
6
10
  const math = Math;
7
11
  const mathMax = math.max;
8
12
  const mathFloor = math.floor;
9
13
  const isInstanceOf = (thing, cls) => thing instanceof cls;
10
- const isUndefined = (thing) => thing == void 0;
11
- const ifNotUndefined = (value, then, otherwise) =>
12
- isUndefined(value) ? otherwise?.() : then(value);
14
+ const isNullish = (thing) => thing == null;
15
+ const isUndefined = (thing) => thing === void 0;
16
+ const ifNotUndefined = getIfNotFunction(isUndefined);
13
17
 
14
18
  const arrayForEach = (array, cb) => array.forEach(cb);
15
19
  const arrayMap = (array, cb) => array.map(cb);
@@ -38,7 +42,7 @@ const getUniqueId = (length = 16) =>
38
42
  arrayReduce(
39
43
  getRandomValues(new Uint8Array(length)),
40
44
  (uniqueId, number) => uniqueId + encode(number),
41
- '',
45
+ EMPTY_STRING,
42
46
  );
43
47
 
44
48
  const jsonString = JSON.stringify;
@@ -2,14 +2,18 @@ const EMPTY_STRING = '';
2
2
  const strSplit = (str, separator = EMPTY_STRING, limit) =>
3
3
  str.split(separator, limit);
4
4
 
5
+ const getIfNotFunction =
6
+ (predicate = isNullish) =>
7
+ (value, then, otherwise) =>
8
+ predicate(value) ? otherwise?.() : then(value);
5
9
  const GLOBAL = globalThis;
6
10
  const math = Math;
7
11
  const mathMax = math.max;
8
12
  const mathFloor = math.floor;
9
13
  const isInstanceOf = (thing, cls) => thing instanceof cls;
10
- const isUndefined = (thing) => thing == void 0;
11
- const ifNotUndefined = (value, then, otherwise) =>
12
- isUndefined(value) ? otherwise?.() : then(value);
14
+ const isNullish = (thing) => thing == null;
15
+ const isUndefined = (thing) => thing === void 0;
16
+ const ifNotUndefined = getIfNotFunction(isUndefined);
13
17
 
14
18
  const arrayForEach = (array, cb) => array.forEach(cb);
15
19
  const arrayMap = (array, cb) => array.map(cb);
@@ -38,7 +42,7 @@ const getUniqueId = (length = 16) =>
38
42
  arrayReduce(
39
43
  getRandomValues(new Uint8Array(length)),
40
44
  (uniqueId, number) => uniqueId + encode(number),
41
- '',
45
+ EMPTY_STRING,
42
46
  );
43
47
 
44
48
  const jsonString = JSON.stringify;