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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tinybase",
3
- "version": "7.0.0-beta.1",
3
+ "version": "7.0.0-beta.3",
4
4
  "author": "jamesgpearce",
5
5
  "repository": "github:tinyplex/tinybase",
6
6
  "license": "MIT",
@@ -22,23 +22,25 @@
22
22
  "sideEffects": false,
23
23
  "peerDependencies": {
24
24
  "@automerge/automerge-repo": "^1.2.1",
25
- "@cloudflare/workers-types": "^4.20250619.0",
26
- "@electric-sql/pglite": "^0.2.17",
27
- "@libsql/client": "^0.15.9",
28
- "@powersync/common": "^1.33.0",
29
- "@sqlite.org/sqlite-wasm": "^3.50.1-build1",
25
+ "@cloudflare/workers-types": "^4.20251202.0",
26
+ "@electric-sql/pglite": "^0.3.14",
27
+ "@libsql/client": "^0.15.15",
28
+ "@powersync/common": "^1.43.1",
29
+ "@sqlite.org/sqlite-wasm": "^3.50.4-build1",
30
30
  "@vlcn.io/crsqlite-wasm": "^0.16.0",
31
- "bun": "^1.2.16",
31
+ "bun": "^1.3.3",
32
32
  "electric-sql": "^0.12.1",
33
- "expo": "^53.0.9",
34
- "expo-sqlite": "^15.2.12",
33
+ "expo": "^54.0.10",
34
+ "expo-sqlite": "^16.0.9",
35
35
  "partykit": "^0.0.115",
36
- "partysocket": "^1.1.4",
36
+ "partysocket": "^1.1.6",
37
37
  "postgres": "^3.4.7",
38
38
  "react": "^19.0.0",
39
39
  "react-dom": "^19.0.0",
40
+ "react-native-mmkv": "4.0.0",
41
+ "react-native-sqlite-storage": "^6.0.1",
40
42
  "sqlite3": "^5.1.7",
41
- "ws": "^8.18.2",
43
+ "ws": "^8.18.3",
42
44
  "yjs": "^13.6.27"
43
45
  },
44
46
  "peerDependenciesMeta": {
@@ -90,6 +92,12 @@
90
92
  "react-dom": {
91
93
  "optional": true
92
94
  },
95
+ "react-native-sqlite-storage": {
96
+ "optional": true
97
+ },
98
+ "react-native-mmkv": {
99
+ "optional": true
100
+ },
93
101
  "sqlite3": {
94
102
  "optional": true
95
103
  },
@@ -242,6 +250,18 @@
242
250
  "persisters/persister-powersync/with-schemas": [
243
251
  "./@types/persisters/persister-powersync/with-schemas/index.d.ts"
244
252
  ],
253
+ "persisters/persister-react-native-mmkv": [
254
+ "./@types/persisters/persister-react-native-mmkv/index.d.ts"
255
+ ],
256
+ "persisters/persister-react-native-mmkv/with-schemas": [
257
+ "./@types/persisters/persister-react-native-mmkv/with-schemas/index.d.ts"
258
+ ],
259
+ "persisters/persister-react-native-sqlite": [
260
+ "./@types/persisters/persister-react-native-sqlite/index.d.ts"
261
+ ],
262
+ "persisters/persister-react-native-sqlite/with-schemas": [
263
+ "./@types/persisters/persister-react-native-sqlite/with-schemas/index.d.ts"
264
+ ],
245
265
  "persisters/persister-remote": [
246
266
  "./@types/persisters/persister-remote/index.d.ts"
247
267
  ],
@@ -488,6 +508,18 @@
488
508
  "min/persisters/persister-powersync/with-schemas": [
489
509
  "./@types/persisters/persister-powersync/with-schemas/index.d.ts"
490
510
  ],
511
+ "min/persisters/persister-react-native-mmkv": [
512
+ "./@types/persisters/persister-react-native-mmkv/index.d.ts"
513
+ ],
514
+ "min/persisters/persister-react-native-mmkv/with-schemas": [
515
+ "./@types/persisters/persister-react-native-mmkv/with-schemas/index.d.ts"
516
+ ],
517
+ "min/persisters/persister-react-native-sqlite": [
518
+ "./@types/persisters/persister-react-native-sqlite/index.d.ts"
519
+ ],
520
+ "min/persisters/persister-react-native-sqlite/with-schemas": [
521
+ "./@types/persisters/persister-react-native-sqlite/with-schemas/index.d.ts"
522
+ ],
491
523
  "min/persisters/persister-remote": [
492
524
  "./@types/persisters/persister-remote/index.d.ts"
493
525
  ],
@@ -875,6 +907,30 @@
875
907
  "default": "./persisters/persister-powersync/index.js"
876
908
  }
877
909
  },
910
+ "./persisters/persister-react-native-mmkv": {
911
+ "default": {
912
+ "types": "./@types/persisters/persister-react-native-mmkv/index.d.ts",
913
+ "default": "./persisters/persister-react-native-mmkv/index.js"
914
+ }
915
+ },
916
+ "./persisters/persister-react-native-mmkv/with-schemas": {
917
+ "default": {
918
+ "types": "./@types/persisters/persister-react-native-mmkv/with-schemas/index.d.ts",
919
+ "default": "./persisters/persister-react-native-mmkv/index.js"
920
+ }
921
+ },
922
+ "./persisters/persister-react-native-sqlite": {
923
+ "default": {
924
+ "types": "./@types/persisters/persister-react-native-sqlite/index.d.ts",
925
+ "default": "./persisters/persister-react-native-sqlite/index.js"
926
+ }
927
+ },
928
+ "./persisters/persister-react-native-sqlite/with-schemas": {
929
+ "default": {
930
+ "types": "./@types/persisters/persister-react-native-sqlite/with-schemas/index.d.ts",
931
+ "default": "./persisters/persister-react-native-sqlite/index.js"
932
+ }
933
+ },
878
934
  "./persisters/persister-remote": {
879
935
  "default": {
880
936
  "types": "./@types/persisters/persister-remote/index.d.ts",
@@ -1367,6 +1423,30 @@
1367
1423
  "default": "./min/persisters/persister-powersync/index.js"
1368
1424
  }
1369
1425
  },
1426
+ "./min/persisters/persister-react-native-mmkv": {
1427
+ "default": {
1428
+ "types": "./@types/persisters/persister-react-native-mmkv/index.d.ts",
1429
+ "default": "./min/persisters/persister-react-native-mmkv/index.js"
1430
+ }
1431
+ },
1432
+ "./min/persisters/persister-react-native-mmkv/with-schemas": {
1433
+ "default": {
1434
+ "types": "./@types/persisters/persister-react-native-mmkv/with-schemas/index.d.ts",
1435
+ "default": "./min/persisters/persister-react-native-mmkv/index.js"
1436
+ }
1437
+ },
1438
+ "./min/persisters/persister-react-native-sqlite": {
1439
+ "default": {
1440
+ "types": "./@types/persisters/persister-react-native-sqlite/index.d.ts",
1441
+ "default": "./min/persisters/persister-react-native-sqlite/index.js"
1442
+ }
1443
+ },
1444
+ "./min/persisters/persister-react-native-sqlite/with-schemas": {
1445
+ "default": {
1446
+ "types": "./@types/persisters/persister-react-native-sqlite/with-schemas/index.d.ts",
1447
+ "default": "./min/persisters/persister-react-native-sqlite/index.js"
1448
+ }
1449
+ },
1370
1450
  "./min/persisters/persister-remote": {
1371
1451
  "default": {
1372
1452
  "types": "./@types/persisters/persister-remote/index.d.ts",
@@ -13,15 +13,21 @@ const strReplace = (str, searchValue, replaceValue) =>
13
13
  str.replace(searchValue, replaceValue);
14
14
 
15
15
  const promise = Promise;
16
+ const getIfNotFunction =
17
+ (predicate = isNullish) =>
18
+ (value, then, otherwise) =>
19
+ predicate(value) ? otherwise?.() : then(value);
16
20
  const GLOBAL = globalThis;
17
21
  const THOUSAND = 1e3;
18
22
  const startInterval = (callback, sec, immediate) => {
19
23
  return setInterval(callback, sec * THOUSAND);
20
24
  };
21
25
  const stopInterval = clearInterval;
22
- const isUndefined = (thing) => thing == void 0;
23
- const ifNotUndefined = (value, then, otherwise) =>
24
- isUndefined(value) ? otherwise?.() : then(value);
26
+ const isNullish = (thing) => thing == null;
27
+ const isUndefined = (thing) => thing === void 0;
28
+ const isNull = (thing) => thing === null;
29
+ const ifNotNullish = getIfNotFunction(isNullish);
30
+ const ifNotUndefined = getIfNotFunction(isUndefined);
25
31
  const isString = (thing) => getTypeOf(thing) == STRING;
26
32
  const isArray = (thing) => Array.isArray(thing);
27
33
  const slice = (arrayOrString, start, end) => arrayOrString.slice(start, end);
@@ -61,12 +67,12 @@ const object = Object;
61
67
  const getPrototypeOf = (obj) => object.getPrototypeOf(obj);
62
68
  const objEntries = object.entries;
63
69
  const isObject = (obj) =>
64
- !isUndefined(obj) &&
65
- ifNotUndefined(
70
+ !isNullish(obj) &&
71
+ ifNotNullish(
66
72
  getPrototypeOf(obj),
67
73
  (objPrototype) =>
68
74
  objPrototype == object.prototype ||
69
- isUndefined(getPrototypeOf(objPrototype)),
75
+ isNullish(getPrototypeOf(objPrototype)),
70
76
 
71
77
  /* istanbul ignore next */
72
78
  () => true,
@@ -95,7 +101,7 @@ const mapForEach = (map, cb) =>
95
101
  const mapMap = (coll, cb) =>
96
102
  arrayMap([...(coll?.entries() ?? [])], ([key, value]) => cb(value, key));
97
103
  const mapSet = (map, key, value) =>
98
- isUndefined(value) ? (collDel(map, key), map) : map?.set(key, value);
104
+ value === void 0 ? (collDel(map, key), map) : map?.set(key, value);
99
105
  const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
100
106
  if (!collHas(map, key)) {
101
107
  mapSet(map, key, getDefaultValue());
@@ -206,7 +212,7 @@ const getListenerFunctions = (getThing) => {
206
212
  const index = size(ids);
207
213
  if (index == size(path)) {
208
214
  listener(thing, ...ids, ...extraArgsGetter(ids));
209
- } else if (isUndefined(path[index])) {
215
+ } else if (isNull(path[index])) {
210
216
  arrayForEach(pathGetters[index]?.(...ids) ?? [], (id2) =>
211
217
  callWithIds(...ids, id2),
212
218
  );
@@ -579,7 +585,7 @@ const getDefaultedTabularConfigMap = (
579
585
  0,
580
586
  objSize(defaultObj),
581
587
  );
582
- if (!isUndefined(defaultedConfig[0]) && !exclude(id, defaultedConfig[0])) {
588
+ if (!isNull(defaultedConfig[0]) && !exclude(id, defaultedConfig[0])) {
583
589
  then(id, defaultedConfig[0]);
584
590
  mapSet(configMap, id, defaultedConfig);
585
591
  }
@@ -1306,7 +1312,7 @@ const createCustomSqlitePersister = (
1306
1312
  ` ${DATA_VERSION} d,${SCHEMA_VERSION} s,TOTAL_CHANGES() c FROM ${PRAGMA}${DATA_VERSION} JOIN ${PRAGMA}${SCHEMA_VERSION}`,
1307
1313
  );
1308
1314
  if (d != dataVersion || s != schemaVersion || c != totalChanges) {
1309
- if (dataVersion != null) {
1315
+ if (!isNullish(dataVersion)) {
1310
1316
  listener();
1311
1317
  }
1312
1318
  dataVersion = d;
@@ -1,9 +1,15 @@
1
1
  const TINYBASE = 'tinybase';
2
2
  const EMPTY_STRING = '';
3
3
 
4
- const isUndefined = (thing) => thing == void 0;
5
- const ifNotUndefined = (value, then, otherwise) =>
6
- isUndefined(value) ? otherwise?.() : then(value);
4
+ const getIfNotFunction =
5
+ (predicate = isNullish) =>
6
+ (value, then, otherwise) =>
7
+ predicate(value) ? otherwise?.() : then(value);
8
+ const isNullish = (thing) => thing == null;
9
+ const isUndefined = (thing) => thing === void 0;
10
+ const isNull = (thing) => thing === null;
11
+ const ifNotNullish = getIfNotFunction(isNullish);
12
+ const ifNotUndefined = getIfNotFunction(isUndefined);
7
13
  const isArray = (thing) => Array.isArray(thing);
8
14
  const size = (arrayOrString) => arrayOrString.length;
9
15
  const test = (regex, subject) => regex.test(subject);
@@ -29,12 +35,12 @@ const object = Object;
29
35
  const getPrototypeOf = (obj) => object.getPrototypeOf(obj);
30
36
  const objEntries = object.entries;
31
37
  const isObject = (obj) =>
32
- !isUndefined(obj) &&
33
- ifNotUndefined(
38
+ !isNullish(obj) &&
39
+ ifNotNullish(
34
40
  getPrototypeOf(obj),
35
41
  (objPrototype) =>
36
42
  objPrototype == object.prototype ||
37
- isUndefined(getPrototypeOf(objPrototype)),
43
+ isNullish(getPrototypeOf(objPrototype)),
38
44
 
39
45
  /* istanbul ignore next */
40
46
  () => true,
@@ -70,7 +76,7 @@ const collDel = (coll, keyOrValue) => coll?.delete(keyOrValue);
70
76
  const mapNew = (entries) => new Map(entries);
71
77
  const mapGet = (map, key) => map?.get(key);
72
78
  const mapSet = (map, key, value) =>
73
- isUndefined(value) ? (collDel(map, key), map) : map?.set(key, value);
79
+ value === void 0 ? (collDel(map, key), map) : map?.set(key, value);
74
80
  const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
75
81
  if (!collHas(map, key)) {
76
82
  mapSet(map, key, getDefaultValue());
@@ -181,7 +187,7 @@ const getListenerFunctions = (getThing) => {
181
187
  const index = size(ids);
182
188
  if (index == size(path)) {
183
189
  listener(thing, ...ids, ...extraArgsGetter(ids));
184
- } else if (isUndefined(path[index])) {
190
+ } else if (isNull(path[index])) {
185
191
  arrayForEach(pathGetters[index]?.(...ids) ?? [], (id2) =>
186
192
  callWithIds(...ids, id2),
187
193
  );
@@ -534,7 +540,7 @@ const createAutomergePersister = (
534
540
  ) => {
535
541
  docHandle.change((doc) => objEnsure(doc, docObjName, objNew));
536
542
  const getPersisted = async () => {
537
- const doc = await docHandle.doc();
543
+ const doc = docHandle.doc();
538
544
  return objSize(doc?.[docObjName]) == 2
539
545
  ? getDocContent(doc, docObjName)
540
546
  : void 0;
@@ -1,9 +1,15 @@
1
1
  const TINYBASE = 'tinybase';
2
2
  const EMPTY_STRING = '';
3
3
 
4
- const isUndefined = (thing) => thing == void 0;
5
- const ifNotUndefined = (value, then, otherwise) =>
6
- isUndefined(value) ? otherwise?.() : then(value);
4
+ const getIfNotFunction =
5
+ (predicate = isNullish) =>
6
+ (value, then, otherwise) =>
7
+ predicate(value) ? otherwise?.() : then(value);
8
+ const isNullish = (thing) => thing == null;
9
+ const isUndefined = (thing) => thing === void 0;
10
+ const isNull = (thing) => thing === null;
11
+ const ifNotNullish = getIfNotFunction(isNullish);
12
+ const ifNotUndefined = getIfNotFunction(isUndefined);
7
13
  const isArray = (thing) => Array.isArray(thing);
8
14
  const size = (arrayOrString) => arrayOrString.length;
9
15
  const test = (regex, subject) => regex.test(subject);
@@ -29,12 +35,12 @@ const object = Object;
29
35
  const getPrototypeOf = (obj) => object.getPrototypeOf(obj);
30
36
  const objEntries = object.entries;
31
37
  const isObject = (obj) =>
32
- !isUndefined(obj) &&
33
- ifNotUndefined(
38
+ !isNullish(obj) &&
39
+ ifNotNullish(
34
40
  getPrototypeOf(obj),
35
41
  (objPrototype) =>
36
42
  objPrototype == object.prototype ||
37
- isUndefined(getPrototypeOf(objPrototype)),
43
+ isNullish(getPrototypeOf(objPrototype)),
38
44
 
39
45
  /* istanbul ignore next */
40
46
  () => true,
@@ -70,7 +76,7 @@ const collDel = (coll, keyOrValue) => coll?.delete(keyOrValue);
70
76
  const mapNew = (entries) => new Map(entries);
71
77
  const mapGet = (map, key) => map?.get(key);
72
78
  const mapSet = (map, key, value) =>
73
- isUndefined(value) ? (collDel(map, key), map) : map?.set(key, value);
79
+ value === void 0 ? (collDel(map, key), map) : map?.set(key, value);
74
80
  const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
75
81
  if (!collHas(map, key)) {
76
82
  mapSet(map, key, getDefaultValue());
@@ -181,7 +187,7 @@ const getListenerFunctions = (getThing) => {
181
187
  const index = size(ids);
182
188
  if (index == size(path)) {
183
189
  listener(thing, ...ids, ...extraArgsGetter(ids));
184
- } else if (isUndefined(path[index])) {
190
+ } else if (isNull(path[index])) {
185
191
  arrayForEach(pathGetters[index]?.(...ids) ?? [], (id2) =>
186
192
  callWithIds(...ids, id2),
187
193
  );
@@ -534,7 +540,7 @@ const createAutomergePersister = (
534
540
  ) => {
535
541
  docHandle.change((doc) => objEnsure(doc, docObjName, objNew));
536
542
  const getPersisted = async () => {
537
- const doc = await docHandle.doc();
543
+ const doc = docHandle.doc();
538
544
  return objSize(doc?.[docObjName]) == 2
539
545
  ? getDocContent(doc, docObjName)
540
546
  : void 0;
@@ -1,11 +1,17 @@
1
1
  const EMPTY_STRING = '';
2
2
  const UNDEFINED = '\uFFFC';
3
3
 
4
+ const getIfNotFunction =
5
+ (predicate = isNullish) =>
6
+ (value, then, otherwise) =>
7
+ predicate(value) ? otherwise?.() : then(value);
4
8
  const GLOBAL = globalThis;
5
9
  const WINDOW = GLOBAL.window;
6
- const isUndefined = (thing) => thing == void 0;
7
- const ifNotUndefined = (value, then, otherwise) =>
8
- isUndefined(value) ? otherwise?.() : then(value);
10
+ const isNullish = (thing) => thing == null;
11
+ const isUndefined = (thing) => thing === void 0;
12
+ const isNull = (thing) => thing === null;
13
+ const ifNotNullish = getIfNotFunction(isNullish);
14
+ const ifNotUndefined = getIfNotFunction(isUndefined);
9
15
  const isArray = (thing) => Array.isArray(thing);
10
16
  const size = (arrayOrString) => arrayOrString.length;
11
17
  const test = (regex, subject) => regex.test(subject);
@@ -29,12 +35,12 @@ const arrayShift = (array) => array.shift();
29
35
  const object = Object;
30
36
  const getPrototypeOf = (obj) => object.getPrototypeOf(obj);
31
37
  const isObject = (obj) =>
32
- !isUndefined(obj) &&
33
- ifNotUndefined(
38
+ !isNullish(obj) &&
39
+ ifNotNullish(
34
40
  getPrototypeOf(obj),
35
41
  (objPrototype) =>
36
42
  objPrototype == object.prototype ||
37
- isUndefined(getPrototypeOf(objPrototype)),
43
+ isNullish(getPrototypeOf(objPrototype)),
38
44
 
39
45
  /* istanbul ignore next */
40
46
  () => true,
@@ -60,7 +66,7 @@ const collDel = (coll, keyOrValue) => coll?.delete(keyOrValue);
60
66
  const mapNew = (entries) => new Map(entries);
61
67
  const mapGet = (map, key) => map?.get(key);
62
68
  const mapSet = (map, key, value) =>
63
- isUndefined(value) ? (collDel(map, key), map) : map?.set(key, value);
69
+ value === void 0 ? (collDel(map, key), map) : map?.set(key, value);
64
70
  const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
65
71
  if (!collHas(map, key)) {
66
72
  mapSet(map, key, getDefaultValue());
@@ -171,7 +177,7 @@ const getListenerFunctions = (getThing) => {
171
177
  const index = size(ids);
172
178
  if (index == size(path)) {
173
179
  listener(thing, ...ids, ...extraArgsGetter(ids));
174
- } else if (isUndefined(path[index])) {
180
+ } else if (isNull(path[index])) {
175
181
  arrayForEach(pathGetters[index]?.(...ids) ?? [], (id2) =>
176
182
  callWithIds(...ids, id2),
177
183
  );
@@ -464,5 +470,31 @@ const createLocalPersister = (store, storageName, onIgnoredError) =>
464
470
  createStoragePersister(store, storageName, localStorage, onIgnoredError);
465
471
  const createSessionPersister = (store, storageName, onIgnoredError) =>
466
472
  createStoragePersister(store, storageName, sessionStorage, onIgnoredError);
473
+ const createOpfsPersister = (store, handle, onIgnoredError) => {
474
+ const getPersisted = async () =>
475
+ jsonParseWithUndefined(await (await handle.getFile()).text());
476
+ const setPersisted = async (getContent) => {
477
+ const writable = await handle.createWritable();
478
+ await writable.write(jsonStringWithUndefined(getContent()));
479
+ await writable.close();
480
+ };
481
+ const addPersisterListener = async (listener) => {
482
+ const observer = new FileSystemObserver(() => listener());
483
+ await observer.observe(handle);
484
+ return observer;
485
+ };
486
+ const delPersisterListener = (observer) => observer?.disconnect();
487
+ return createCustomPersister(
488
+ store,
489
+ getPersisted,
490
+ setPersisted,
491
+ addPersisterListener,
492
+ delPersisterListener,
493
+ onIgnoredError,
494
+ 3,
495
+ // StoreOrMergeableStore,
496
+ {getHandle: () => handle},
497
+ );
498
+ };
467
499
 
468
- export {createLocalPersister, createSessionPersister};
500
+ export {createLocalPersister, createOpfsPersister, createSessionPersister};
@@ -1,11 +1,17 @@
1
1
  const EMPTY_STRING = '';
2
2
  const UNDEFINED = '\uFFFC';
3
3
 
4
+ const getIfNotFunction =
5
+ (predicate = isNullish) =>
6
+ (value, then, otherwise) =>
7
+ predicate(value) ? otherwise?.() : then(value);
4
8
  const GLOBAL = globalThis;
5
9
  const WINDOW = GLOBAL.window;
6
- const isUndefined = (thing) => thing == void 0;
7
- const ifNotUndefined = (value, then, otherwise) =>
8
- isUndefined(value) ? otherwise?.() : then(value);
10
+ const isNullish = (thing) => thing == null;
11
+ const isUndefined = (thing) => thing === void 0;
12
+ const isNull = (thing) => thing === null;
13
+ const ifNotNullish = getIfNotFunction(isNullish);
14
+ const ifNotUndefined = getIfNotFunction(isUndefined);
9
15
  const isArray = (thing) => Array.isArray(thing);
10
16
  const size = (arrayOrString) => arrayOrString.length;
11
17
  const test = (regex, subject) => regex.test(subject);
@@ -29,12 +35,12 @@ const arrayShift = (array) => array.shift();
29
35
  const object = Object;
30
36
  const getPrototypeOf = (obj) => object.getPrototypeOf(obj);
31
37
  const isObject = (obj) =>
32
- !isUndefined(obj) &&
33
- ifNotUndefined(
38
+ !isNullish(obj) &&
39
+ ifNotNullish(
34
40
  getPrototypeOf(obj),
35
41
  (objPrototype) =>
36
42
  objPrototype == object.prototype ||
37
- isUndefined(getPrototypeOf(objPrototype)),
43
+ isNullish(getPrototypeOf(objPrototype)),
38
44
 
39
45
  /* istanbul ignore next */
40
46
  () => true,
@@ -60,7 +66,7 @@ const collDel = (coll, keyOrValue) => coll?.delete(keyOrValue);
60
66
  const mapNew = (entries) => new Map(entries);
61
67
  const mapGet = (map, key) => map?.get(key);
62
68
  const mapSet = (map, key, value) =>
63
- isUndefined(value) ? (collDel(map, key), map) : map?.set(key, value);
69
+ value === void 0 ? (collDel(map, key), map) : map?.set(key, value);
64
70
  const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
65
71
  if (!collHas(map, key)) {
66
72
  mapSet(map, key, getDefaultValue());
@@ -171,7 +177,7 @@ const getListenerFunctions = (getThing) => {
171
177
  const index = size(ids);
172
178
  if (index == size(path)) {
173
179
  listener(thing, ...ids, ...extraArgsGetter(ids));
174
- } else if (isUndefined(path[index])) {
180
+ } else if (isNull(path[index])) {
175
181
  arrayForEach(pathGetters[index]?.(...ids) ?? [], (id2) =>
176
182
  callWithIds(...ids, id2),
177
183
  );
@@ -464,5 +470,31 @@ const createLocalPersister = (store, storageName, onIgnoredError) =>
464
470
  createStoragePersister(store, storageName, localStorage, onIgnoredError);
465
471
  const createSessionPersister = (store, storageName, onIgnoredError) =>
466
472
  createStoragePersister(store, storageName, sessionStorage, onIgnoredError);
473
+ const createOpfsPersister = (store, handle, onIgnoredError) => {
474
+ const getPersisted = async () =>
475
+ jsonParseWithUndefined(await (await handle.getFile()).text());
476
+ const setPersisted = async (getContent) => {
477
+ const writable = await handle.createWritable();
478
+ await writable.write(jsonStringWithUndefined(getContent()));
479
+ await writable.close();
480
+ };
481
+ const addPersisterListener = async (listener) => {
482
+ const observer = new FileSystemObserver(() => listener());
483
+ await observer.observe(handle);
484
+ return observer;
485
+ };
486
+ const delPersisterListener = (observer) => observer?.disconnect();
487
+ return createCustomPersister(
488
+ store,
489
+ getPersisted,
490
+ setPersisted,
491
+ addPersisterListener,
492
+ delPersisterListener,
493
+ onIgnoredError,
494
+ 3,
495
+ // StoreOrMergeableStore,
496
+ {getHandle: () => handle},
497
+ );
498
+ };
467
499
 
468
- export {createLocalPersister, createSessionPersister};
500
+ export {createLocalPersister, createOpfsPersister, createSessionPersister};
@@ -12,14 +12,20 @@ const strReplace = (str, searchValue, replaceValue) =>
12
12
  str.replace(searchValue, replaceValue);
13
13
 
14
14
  const promise = Promise;
15
+ const getIfNotFunction =
16
+ (predicate = isNullish) =>
17
+ (value, then, otherwise) =>
18
+ predicate(value) ? otherwise?.() : then(value);
15
19
  const THOUSAND = 1e3;
16
20
  const startInterval = (callback, sec, immediate) => {
17
21
  return setInterval(callback, sec * THOUSAND);
18
22
  };
19
23
  const stopInterval = clearInterval;
20
- const isUndefined = (thing) => thing == void 0;
21
- const ifNotUndefined = (value, then, otherwise) =>
22
- isUndefined(value) ? otherwise?.() : then(value);
24
+ const isNullish = (thing) => thing == null;
25
+ const isUndefined = (thing) => thing === void 0;
26
+ const isNull = (thing) => thing === null;
27
+ const ifNotNullish = getIfNotFunction(isNullish);
28
+ const ifNotUndefined = getIfNotFunction(isUndefined);
23
29
  const isString = (thing) => getTypeOf(thing) == STRING;
24
30
  const isArray = (thing) => Array.isArray(thing);
25
31
  const slice = (arrayOrString, start, end) => arrayOrString.slice(start, end);
@@ -102,12 +108,12 @@ const object = Object;
102
108
  const getPrototypeOf = (obj) => object.getPrototypeOf(obj);
103
109
  const objEntries = object.entries;
104
110
  const isObject = (obj) =>
105
- !isUndefined(obj) &&
106
- ifNotUndefined(
111
+ !isNullish(obj) &&
112
+ ifNotNullish(
107
113
  getPrototypeOf(obj),
108
114
  (objPrototype) =>
109
115
  objPrototype == object.prototype ||
110
- isUndefined(getPrototypeOf(objPrototype)),
116
+ isNullish(getPrototypeOf(objPrototype)),
111
117
 
112
118
  /* istanbul ignore next */
113
119
  () => true,
@@ -136,7 +142,7 @@ const mapForEach = (map, cb) =>
136
142
  const mapMap = (coll, cb) =>
137
143
  arrayMap([...(coll?.entries() ?? [])], ([key, value]) => cb(value, key));
138
144
  const mapSet = (map, key, value) =>
139
- isUndefined(value) ? (collDel(map, key), map) : map?.set(key, value);
145
+ value === void 0 ? (collDel(map, key), map) : map?.set(key, value);
140
146
  const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
141
147
  if (!collHas(map, key)) {
142
148
  mapSet(map, key, getDefaultValue());
@@ -223,7 +229,7 @@ const getDefaultedTabularConfigMap = (
223
229
  0,
224
230
  objSize(defaultObj),
225
231
  );
226
- if (!isUndefined(defaultedConfig[0]) && !exclude(id, defaultedConfig[0])) {
232
+ if (!isNull(defaultedConfig[0]) && !exclude(id, defaultedConfig[0])) {
227
233
  then(id, defaultedConfig[0]);
228
234
  mapSet(configMap, id, defaultedConfig);
229
235
  }
@@ -372,7 +378,7 @@ const getListenerFunctions = (getThing) => {
372
378
  const index = size(ids);
373
379
  if (index == size(path)) {
374
380
  listener(thing, ...ids, ...extraArgsGetter(ids));
375
- } else if (isUndefined(path[index])) {
381
+ } else if (isNull(path[index])) {
376
382
  arrayForEach(pathGetters[index]?.(...ids) ?? [], (id2) =>
377
383
  callWithIds(...ids, id2),
378
384
  );
@@ -1117,7 +1123,7 @@ const createCustomSqlitePersister = (
1117
1123
  ` ${DATA_VERSION} d,${SCHEMA_VERSION} s,TOTAL_CHANGES() c FROM ${PRAGMA}${DATA_VERSION} JOIN ${PRAGMA}${SCHEMA_VERSION}`,
1118
1124
  );
1119
1125
  if (d != dataVersion || s != schemaVersion || c != totalChanges) {
1120
- if (dataVersion != null) {
1126
+ if (!isNullish(dataVersion)) {
1121
1127
  listener();
1122
1128
  }
1123
1129
  dataVersion = d;