@fireproof/core 0.20.0-dev-preview-63 → 0.20.1-dev-preview-01

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 (408) hide show
  1. package/deno/index.d.ts +7 -0
  2. package/deno/index.js +66 -0
  3. package/deno/index.js.map +1 -0
  4. package/deno/metafile-esm.json +1 -0
  5. package/deno.json +2 -2
  6. package/index.cjs +7268 -0
  7. package/index.cjs.map +1 -0
  8. package/index.d.cts +2742 -0
  9. package/index.d.ts +2742 -15
  10. package/index.js +7267 -14
  11. package/index.js.map +1 -1
  12. package/indexeddb/index.cjs +218 -0
  13. package/indexeddb/index.cjs.map +1 -0
  14. package/indexeddb/index.d.cts +30 -0
  15. package/indexeddb/index.d.ts +30 -0
  16. package/indexeddb/index.js +195 -0
  17. package/indexeddb/index.js.map +1 -0
  18. package/indexeddb/metafile-cjs.json +1 -0
  19. package/indexeddb/metafile-esm.json +1 -0
  20. package/metafile-cjs.json +1 -0
  21. package/metafile-esm.json +1 -0
  22. package/node/index.cjs +97 -0
  23. package/node/index.cjs.map +1 -0
  24. package/node/index.d.cts +7 -0
  25. package/node/index.d.ts +7 -0
  26. package/node/index.js +64 -0
  27. package/node/index.js.map +1 -0
  28. package/node/metafile-cjs.json +1 -0
  29. package/node/metafile-esm.json +1 -0
  30. package/package.json +17 -20
  31. package/react/index.cjs +298 -0
  32. package/react/index.cjs.map +1 -0
  33. package/react/{img-file.d.ts → index.d.cts} +53 -6
  34. package/react/index.d.ts +336 -4
  35. package/react/index.js +264 -3
  36. package/react/index.js.map +1 -1
  37. package/react/metafile-cjs.json +1 -0
  38. package/react/metafile-esm.json +1 -0
  39. package/tests/blockstore/loader.test.ts +1 -1
  40. package/tests/blockstore/store.test.ts +4 -9
  41. package/tests/fireproof/attachable.test.ts +3 -3
  42. package/tests/react/use-fireproof-db-switch.test.tsx +91 -0
  43. package/tests/react/use-fireproof-stability.test.tsx +145 -0
  44. package/tests/www/gallery.html +132 -0
  45. package/tests/www/iife.html +42 -0
  46. package/tests/www/todo-aws.html +232 -0
  47. package/tests/www/todo-ipfs.html +213 -0
  48. package/tests/www/todo-local.html +214 -0
  49. package/tests/www/todo-netlify.html +227 -0
  50. package/tests/www/todo.html +254 -0
  51. package/apply-head-queue.d.ts +0 -18
  52. package/apply-head-queue.d.ts.map +0 -1
  53. package/apply-head-queue.js +0 -47
  54. package/apply-head-queue.js.map +0 -1
  55. package/blockstore/attachable-store.d.ts +0 -17
  56. package/blockstore/attachable-store.d.ts.map +0 -1
  57. package/blockstore/attachable-store.js +0 -295
  58. package/blockstore/attachable-store.js.map +0 -1
  59. package/blockstore/commit-queue.d.ts +0 -12
  60. package/blockstore/commit-queue.d.ts.map +0 -1
  61. package/blockstore/commit-queue.js +0 -52
  62. package/blockstore/commit-queue.js.map +0 -1
  63. package/blockstore/commitor.d.ts +0 -21
  64. package/blockstore/commitor.d.ts.map +0 -1
  65. package/blockstore/commitor.js +0 -104
  66. package/blockstore/commitor.js.map +0 -1
  67. package/blockstore/connect-raw.d.ts +0 -2
  68. package/blockstore/connect-raw.d.ts.map +0 -1
  69. package/blockstore/connect-raw.js +0 -2
  70. package/blockstore/connect-raw.js.map +0 -1
  71. package/blockstore/connection-base.d.ts +0 -2
  72. package/blockstore/connection-base.d.ts.map +0 -1
  73. package/blockstore/connection-base.js +0 -2
  74. package/blockstore/connection-base.js.map +0 -1
  75. package/blockstore/encrypt-helpers.d.ts +0 -2
  76. package/blockstore/encrypt-helpers.d.ts.map +0 -1
  77. package/blockstore/encrypt-helpers.js +0 -2
  78. package/blockstore/encrypt-helpers.js.map +0 -1
  79. package/blockstore/fp-envelope.d.ts +0 -32
  80. package/blockstore/fp-envelope.d.ts.map +0 -1
  81. package/blockstore/fp-envelope.js +0 -14
  82. package/blockstore/fp-envelope.js.map +0 -1
  83. package/blockstore/gateway.d.ts +0 -20
  84. package/blockstore/gateway.d.ts.map +0 -1
  85. package/blockstore/gateway.js +0 -2
  86. package/blockstore/gateway.js.map +0 -1
  87. package/blockstore/index.d.ts +0 -16
  88. package/blockstore/index.d.ts.map +0 -1
  89. package/blockstore/index.js +0 -16
  90. package/blockstore/index.js.map +0 -1
  91. package/blockstore/interceptor-gateway.d.ts +0 -29
  92. package/blockstore/interceptor-gateway.d.ts.map +0 -1
  93. package/blockstore/interceptor-gateway.js +0 -137
  94. package/blockstore/interceptor-gateway.js.map +0 -1
  95. package/blockstore/loader-helpers.d.ts +0 -4
  96. package/blockstore/loader-helpers.d.ts.map +0 -1
  97. package/blockstore/loader-helpers.js +0 -16
  98. package/blockstore/loader-helpers.js.map +0 -1
  99. package/blockstore/loader.d.ts +0 -45
  100. package/blockstore/loader.d.ts.map +0 -1
  101. package/blockstore/loader.js +0 -352
  102. package/blockstore/loader.js.map +0 -1
  103. package/blockstore/register-store-protocol.d.ts +0 -22
  104. package/blockstore/register-store-protocol.d.ts.map +0 -1
  105. package/blockstore/register-store-protocol.js +0 -114
  106. package/blockstore/register-store-protocol.js.map +0 -1
  107. package/blockstore/serde-gateway.d.ts +0 -78
  108. package/blockstore/serde-gateway.d.ts.map +0 -1
  109. package/blockstore/serde-gateway.js +0 -2
  110. package/blockstore/serde-gateway.js.map +0 -1
  111. package/blockstore/store-factory.d.ts +0 -11
  112. package/blockstore/store-factory.d.ts.map +0 -1
  113. package/blockstore/store-factory.js +0 -105
  114. package/blockstore/store-factory.js.map +0 -1
  115. package/blockstore/store-remote.d.ts +0 -2
  116. package/blockstore/store-remote.d.ts.map +0 -1
  117. package/blockstore/store-remote.js +0 -2
  118. package/blockstore/store-remote.js.map +0 -1
  119. package/blockstore/store.d.ts +0 -82
  120. package/blockstore/store.d.ts.map +0 -1
  121. package/blockstore/store.js +0 -438
  122. package/blockstore/store.js.map +0 -1
  123. package/blockstore/task-manager.d.ts +0 -19
  124. package/blockstore/task-manager.d.ts.map +0 -1
  125. package/blockstore/task-manager.js +0 -50
  126. package/blockstore/task-manager.js.map +0 -1
  127. package/blockstore/transaction.d.ts +0 -64
  128. package/blockstore/transaction.d.ts.map +0 -1
  129. package/blockstore/transaction.js +0 -249
  130. package/blockstore/transaction.js.map +0 -1
  131. package/blockstore/types.d.ts +0 -400
  132. package/blockstore/types.d.ts.map +0 -1
  133. package/blockstore/types.js +0 -55
  134. package/blockstore/types.js.map +0 -1
  135. package/blockstore/uri-interceptor.d.ts +0 -19
  136. package/blockstore/uri-interceptor.d.ts.map +0 -1
  137. package/blockstore/uri-interceptor.js +0 -61
  138. package/blockstore/uri-interceptor.js.map +0 -1
  139. package/bundle-not-impl.d.ts +0 -2
  140. package/bundle-not-impl.d.ts.map +0 -1
  141. package/bundle-not-impl.js +0 -4
  142. package/bundle-not-impl.js.map +0 -1
  143. package/cli/main.js +0 -26114
  144. package/context.d.ts +0 -7
  145. package/context.d.ts.map +0 -1
  146. package/context.js +0 -15
  147. package/context.js.map +0 -1
  148. package/crdt-clock.d.ts +0 -27
  149. package/crdt-clock.d.ts.map +0 -1
  150. package/crdt-clock.js +0 -140
  151. package/crdt-clock.js.map +0 -1
  152. package/crdt-helpers.d.ts +0 -16
  153. package/crdt-helpers.d.ts.map +0 -1
  154. package/crdt-helpers.js +0 -316
  155. package/crdt-helpers.js.map +0 -1
  156. package/crdt.d.ts +0 -34
  157. package/crdt.d.ts.map +0 -1
  158. package/crdt.js +0 -131
  159. package/crdt.js.map +0 -1
  160. package/database.d.ts +0 -34
  161. package/database.d.ts.map +0 -1
  162. package/database.js +0 -121
  163. package/database.js.map +0 -1
  164. package/index.d.ts.map +0 -1
  165. package/indexer-helpers.d.ts +0 -69
  166. package/indexer-helpers.d.ts.map +0 -1
  167. package/indexer-helpers.js +0 -135
  168. package/indexer-helpers.js.map +0 -1
  169. package/indexer.d.ts +0 -25
  170. package/indexer.d.ts.map +0 -1
  171. package/indexer.js +0 -231
  172. package/indexer.js.map +0 -1
  173. package/ledger.d.ts +0 -56
  174. package/ledger.d.ts.map +0 -1
  175. package/ledger.js +0 -224
  176. package/ledger.js.map +0 -1
  177. package/protocols/cloud/http-connection.d.ts +0 -25
  178. package/protocols/cloud/http-connection.d.ts.map +0 -1
  179. package/protocols/cloud/http-connection.js +0 -153
  180. package/protocols/cloud/http-connection.js.map +0 -1
  181. package/protocols/cloud/index.d.ts +0 -10
  182. package/protocols/cloud/index.d.ts.map +0 -1
  183. package/protocols/cloud/index.js +0 -10
  184. package/protocols/cloud/index.js.map +0 -1
  185. package/protocols/cloud/msg-raw-connection-base.d.ts +0 -16
  186. package/protocols/cloud/msg-raw-connection-base.d.ts.map +0 -1
  187. package/protocols/cloud/msg-raw-connection-base.js +0 -22
  188. package/protocols/cloud/msg-raw-connection-base.js.map +0 -1
  189. package/protocols/cloud/msg-types-data.d.ts +0 -36
  190. package/protocols/cloud/msg-types-data.d.ts.map +0 -1
  191. package/protocols/cloud/msg-types-data.js +0 -38
  192. package/protocols/cloud/msg-types-data.js.map +0 -1
  193. package/protocols/cloud/msg-types-meta.d.ts +0 -41
  194. package/protocols/cloud/msg-types-meta.d.ts.map +0 -1
  195. package/protocols/cloud/msg-types-meta.js +0 -98
  196. package/protocols/cloud/msg-types-meta.js.map +0 -1
  197. package/protocols/cloud/msg-types-wal.d.ts +0 -33
  198. package/protocols/cloud/msg-types-wal.d.ts.map +0 -1
  199. package/protocols/cloud/msg-types-wal.js +0 -38
  200. package/protocols/cloud/msg-types-wal.js.map +0 -1
  201. package/protocols/cloud/msg-types.d.ts +0 -279
  202. package/protocols/cloud/msg-types.d.ts.map +0 -1
  203. package/protocols/cloud/msg-types.js +0 -278
  204. package/protocols/cloud/msg-types.js.map +0 -1
  205. package/protocols/cloud/msger.d.ts +0 -79
  206. package/protocols/cloud/msger.d.ts.map +0 -1
  207. package/protocols/cloud/msger.js +0 -198
  208. package/protocols/cloud/msger.js.map +0 -1
  209. package/protocols/cloud/ws-connection.d.ts +0 -29
  210. package/protocols/cloud/ws-connection.d.ts.map +0 -1
  211. package/protocols/cloud/ws-connection.js +0 -163
  212. package/protocols/cloud/ws-connection.js.map +0 -1
  213. package/protocols/index.d.ts +0 -2
  214. package/protocols/index.d.ts.map +0 -1
  215. package/protocols/index.js +0 -2
  216. package/protocols/index.js.map +0 -1
  217. package/react/img-file.d.ts.map +0 -1
  218. package/react/img-file.js +0 -58
  219. package/react/img-file.js.map +0 -1
  220. package/react/index.d.ts.map +0 -1
  221. package/react/types.d.ts +0 -43
  222. package/react/types.d.ts.map +0 -1
  223. package/react/types.js +0 -2
  224. package/react/types.js.map +0 -1
  225. package/react/use-all-docs.d.ts +0 -4
  226. package/react/use-all-docs.d.ts.map +0 -1
  227. package/react/use-all-docs.js +0 -19
  228. package/react/use-all-docs.js.map +0 -1
  229. package/react/use-changes.d.ts +0 -4
  230. package/react/use-changes.d.ts.map +0 -1
  231. package/react/use-changes.js +0 -19
  232. package/react/use-changes.js.map +0 -1
  233. package/react/use-document.d.ts +0 -4
  234. package/react/use-document.d.ts.map +0 -1
  235. package/react/use-document.js +0 -99
  236. package/react/use-document.js.map +0 -1
  237. package/react/use-fireproof.d.ts +0 -6
  238. package/react/use-fireproof.d.ts.map +0 -1
  239. package/react/use-fireproof.js +0 -15
  240. package/react/use-fireproof.js.map +0 -1
  241. package/react/use-live-query.d.ts +0 -4
  242. package/react/use-live-query.d.ts.map +0 -1
  243. package/react/use-live-query.js +0 -38
  244. package/react/use-live-query.js.map +0 -1
  245. package/react/utils.d.ts +0 -2
  246. package/react/utils.d.ts.map +0 -1
  247. package/react/utils.js +0 -4
  248. package/react/utils.js.map +0 -1
  249. package/runtime/files.d.ts +0 -12
  250. package/runtime/files.d.ts.map +0 -1
  251. package/runtime/files.js +0 -29
  252. package/runtime/files.js.map +0 -1
  253. package/runtime/gateways/cloud/gateway.d.ts +0 -44
  254. package/runtime/gateways/cloud/gateway.d.ts.map +0 -1
  255. package/runtime/gateways/cloud/gateway.js +0 -496
  256. package/runtime/gateways/cloud/gateway.js.map +0 -1
  257. package/runtime/gateways/def-serde-gateway.d.ts +0 -19
  258. package/runtime/gateways/def-serde-gateway.d.ts.map +0 -1
  259. package/runtime/gateways/def-serde-gateway.js +0 -73
  260. package/runtime/gateways/def-serde-gateway.js.map +0 -1
  261. package/runtime/gateways/file/deno/deno-filesystem.d.ts +0 -27
  262. package/runtime/gateways/file/deno/deno-filesystem.d.ts.map +0 -1
  263. package/runtime/gateways/file/deno/deno-filesystem.js +0 -51
  264. package/runtime/gateways/file/deno/deno-filesystem.js.map +0 -1
  265. package/runtime/gateways/file/deno/get-sys-file-system.d.ts +0 -4
  266. package/runtime/gateways/file/deno/get-sys-file-system.d.ts.map +0 -1
  267. package/runtime/gateways/file/deno/get-sys-file-system.js +0 -11
  268. package/runtime/gateways/file/deno/get-sys-file-system.js.map +0 -1
  269. package/runtime/gateways/file/deno/index.d.ts +0 -2
  270. package/runtime/gateways/file/deno/index.d.ts.map +0 -1
  271. package/runtime/gateways/file/deno/index.js +0 -2
  272. package/runtime/gateways/file/deno/index.js.map +0 -1
  273. package/runtime/gateways/file/gateway-impl.d.ts +0 -18
  274. package/runtime/gateways/file/gateway-impl.d.ts.map +0 -1
  275. package/runtime/gateways/file/gateway-impl.js +0 -121
  276. package/runtime/gateways/file/gateway-impl.js.map +0 -1
  277. package/runtime/gateways/file/index.d.ts +0 -3
  278. package/runtime/gateways/file/index.d.ts.map +0 -1
  279. package/runtime/gateways/file/index.js +0 -3
  280. package/runtime/gateways/file/index.js.map +0 -1
  281. package/runtime/gateways/file/key-bag-file.d.ts +0 -19
  282. package/runtime/gateways/file/key-bag-file.d.ts.map +0 -1
  283. package/runtime/gateways/file/key-bag-file.js +0 -40
  284. package/runtime/gateways/file/key-bag-file.js.map +0 -1
  285. package/runtime/gateways/file/node/get-sys-file-system.d.ts +0 -4
  286. package/runtime/gateways/file/node/get-sys-file-system.d.ts.map +0 -1
  287. package/runtime/gateways/file/node/get-sys-file-system.js +0 -11
  288. package/runtime/gateways/file/node/get-sys-file-system.js.map +0 -1
  289. package/runtime/gateways/file/node/index.d.ts +0 -2
  290. package/runtime/gateways/file/node/index.d.ts.map +0 -1
  291. package/runtime/gateways/file/node/index.js +0 -2
  292. package/runtime/gateways/file/node/index.js.map +0 -1
  293. package/runtime/gateways/file/node/node-filesystem.d.ts +0 -32
  294. package/runtime/gateways/file/node/node-filesystem.d.ts.map +0 -1
  295. package/runtime/gateways/file/node/node-filesystem.js +0 -37
  296. package/runtime/gateways/file/node/node-filesystem.js.map +0 -1
  297. package/runtime/gateways/file/node/to-array-buffer.d.ts +0 -2
  298. package/runtime/gateways/file/node/to-array-buffer.d.ts.map +0 -1
  299. package/runtime/gateways/file/node/to-array-buffer.js +0 -12
  300. package/runtime/gateways/file/node/to-array-buffer.js.map +0 -1
  301. package/runtime/gateways/file/sys-file-system-factory.d.ts +0 -4
  302. package/runtime/gateways/file/sys-file-system-factory.d.ts.map +0 -1
  303. package/runtime/gateways/file/sys-file-system-factory.js +0 -13
  304. package/runtime/gateways/file/sys-file-system-factory.js.map +0 -1
  305. package/runtime/gateways/file/utils.d.ts +0 -5
  306. package/runtime/gateways/file/utils.d.ts.map +0 -1
  307. package/runtime/gateways/file/utils.js +0 -27
  308. package/runtime/gateways/file/utils.js.map +0 -1
  309. package/runtime/gateways/file/version.d.ts +0 -2
  310. package/runtime/gateways/file/version.d.ts.map +0 -1
  311. package/runtime/gateways/file/version.js +0 -2
  312. package/runtime/gateways/file/version.js.map +0 -1
  313. package/runtime/gateways/fp-envelope-serialize.d.ts +0 -50
  314. package/runtime/gateways/fp-envelope-serialize.d.ts.map +0 -1
  315. package/runtime/gateways/fp-envelope-serialize.js +0 -141
  316. package/runtime/gateways/fp-envelope-serialize.js.map +0 -1
  317. package/runtime/gateways/index.d.ts +0 -6
  318. package/runtime/gateways/index.d.ts.map +0 -1
  319. package/runtime/gateways/index.js +0 -6
  320. package/runtime/gateways/index.js.map +0 -1
  321. package/runtime/gateways/indexeddb/gateway-impl.d.ts +0 -22
  322. package/runtime/gateways/indexeddb/gateway-impl.d.ts.map +0 -1
  323. package/runtime/gateways/indexeddb/gateway-impl.js +0 -147
  324. package/runtime/gateways/indexeddb/gateway-impl.js.map +0 -1
  325. package/runtime/gateways/indexeddb/index.d.ts +0 -6
  326. package/runtime/gateways/indexeddb/index.d.ts.map +0 -1
  327. package/runtime/gateways/indexeddb/index.js +0 -6
  328. package/runtime/gateways/indexeddb/index.js.map +0 -1
  329. package/runtime/gateways/indexeddb/key-bag-indexeddb.d.ts +0 -15
  330. package/runtime/gateways/indexeddb/key-bag-indexeddb.d.ts.map +0 -1
  331. package/runtime/gateways/indexeddb/key-bag-indexeddb.js +0 -42
  332. package/runtime/gateways/indexeddb/key-bag-indexeddb.js.map +0 -1
  333. package/runtime/gateways/indexeddb-version.d.ts +0 -2
  334. package/runtime/gateways/indexeddb-version.d.ts.map +0 -1
  335. package/runtime/gateways/indexeddb-version.js +0 -2
  336. package/runtime/gateways/indexeddb-version.js.map +0 -1
  337. package/runtime/gateways/memory/gateway.d.ts +0 -18
  338. package/runtime/gateways/memory/gateway.d.ts.map +0 -1
  339. package/runtime/gateways/memory/gateway.js +0 -58
  340. package/runtime/gateways/memory/gateway.js.map +0 -1
  341. package/runtime/gateways/memory/version.d.ts +0 -2
  342. package/runtime/gateways/memory/version.d.ts.map +0 -1
  343. package/runtime/gateways/memory/version.js +0 -2
  344. package/runtime/gateways/memory/version.js.map +0 -1
  345. package/runtime/index.d.ts +0 -13
  346. package/runtime/index.d.ts.map +0 -1
  347. package/runtime/index.js +0 -13
  348. package/runtime/index.js.map +0 -1
  349. package/runtime/key-bag-memory.d.ts +0 -12
  350. package/runtime/key-bag-memory.d.ts.map +0 -1
  351. package/runtime/key-bag-memory.js +0 -23
  352. package/runtime/key-bag-memory.js.map +0 -1
  353. package/runtime/key-bag.d.ts +0 -85
  354. package/runtime/key-bag.d.ts.map +0 -1
  355. package/runtime/key-bag.js +0 -415
  356. package/runtime/key-bag.js.map +0 -1
  357. package/runtime/keyed-crypto.d.ts +0 -19
  358. package/runtime/keyed-crypto.d.ts.map +0 -1
  359. package/runtime/keyed-crypto.js +0 -192
  360. package/runtime/keyed-crypto.js.map +0 -1
  361. package/runtime/memory-sys-container.d.ts +0 -2
  362. package/runtime/memory-sys-container.d.ts.map +0 -1
  363. package/runtime/memory-sys-container.js +0 -2
  364. package/runtime/memory-sys-container.js.map +0 -1
  365. package/runtime/meta-key-hack.d.ts +0 -42
  366. package/runtime/meta-key-hack.d.ts.map +0 -1
  367. package/runtime/meta-key-hack.js +0 -201
  368. package/runtime/meta-key-hack.js.map +0 -1
  369. package/runtime/sts-service/index.d.ts +0 -40
  370. package/runtime/sts-service/index.d.ts.map +0 -1
  371. package/runtime/sts-service/index.js +0 -102
  372. package/runtime/sts-service/index.js.map +0 -1
  373. package/runtime/sys-container.d.ts +0 -2
  374. package/runtime/sys-container.d.ts.map +0 -1
  375. package/runtime/sys-container.js +0 -2
  376. package/runtime/sys-container.js.map +0 -1
  377. package/runtime/wait-pr-multiformats/block.d.ts +0 -47
  378. package/runtime/wait-pr-multiformats/block.d.ts.map +0 -1
  379. package/runtime/wait-pr-multiformats/block.js +0 -64
  380. package/runtime/wait-pr-multiformats/block.js.map +0 -1
  381. package/runtime/wait-pr-multiformats/codec-interface.d.ts +0 -29
  382. package/runtime/wait-pr-multiformats/codec-interface.d.ts.map +0 -1
  383. package/runtime/wait-pr-multiformats/codec-interface.js +0 -2
  384. package/runtime/wait-pr-multiformats/codec-interface.js.map +0 -1
  385. package/runtime/wait-pr-multiformats/index.d.ts +0 -3
  386. package/runtime/wait-pr-multiformats/index.d.ts.map +0 -1
  387. package/runtime/wait-pr-multiformats/index.js +0 -3
  388. package/runtime/wait-pr-multiformats/index.js.map +0 -1
  389. package/types.d.ts +0 -427
  390. package/types.d.ts.map +0 -1
  391. package/types.js +0 -54
  392. package/types.js.map +0 -1
  393. package/use-fireproof/index.d.ts +0 -3
  394. package/use-fireproof/index.d.ts.map +0 -1
  395. package/use-fireproof/index.js +0 -3
  396. package/use-fireproof/index.js.map +0 -1
  397. package/utils.d.ts +0 -36
  398. package/utils.d.ts.map +0 -1
  399. package/utils.js +0 -379
  400. package/utils.js.map +0 -1
  401. package/version.d.ts +0 -2
  402. package/version.d.ts.map +0 -1
  403. package/version.js +0 -4
  404. package/version.js.map +0 -1
  405. package/write-queue.d.ts +0 -9
  406. package/write-queue.d.ts.map +0 -1
  407. package/write-queue.js +0 -70
  408. package/write-queue.js.map +0 -1
package/react/index.d.ts CHANGED
@@ -1,4 +1,336 @@
1
- export { FireproofCtx, useFireproof } from "./use-fireproof.js";
2
- export * from "./types.js";
3
- export * from "./img-file.js";
4
- //# sourceMappingURL=index.d.ts.map
1
+ import { Database, DocTypes, DocSet, DocWithId, DocResponse, IndexKeyType, DocFragment, MapFn, QueryOpts, IndexRow, AllDocsQueryOpts, ClockHead, ChangesOptions, ConfigOpts, DocFileMeta } from '@fireproof/core';
2
+ import React, { ImgHTMLAttributes } from 'react';
3
+
4
+ interface LiveQueryResult<T extends DocTypes, K extends IndexKeyType, R extends DocFragment = T> {
5
+ readonly docs: DocWithId<T>[];
6
+ readonly rows: IndexRow<K, T, R>[];
7
+ }
8
+ type UseLiveQuery = <T extends DocTypes, K extends IndexKeyType = string, R extends DocFragment = T>(mapFn: string | MapFn<T>, query?: QueryOpts<K>, initialRows?: IndexRow<K, T, R>[]) => LiveQueryResult<T, K, R>;
9
+ interface AllDocsResult<T extends DocTypes> {
10
+ readonly docs: DocWithId<T>[];
11
+ }
12
+ interface ChangesResult<T extends DocTypes> {
13
+ readonly docs: DocWithId<T>[];
14
+ }
15
+ type UseAllDocs = <T extends DocTypes>(query?: AllDocsQueryOpts) => AllDocsResult<T>;
16
+ type UseChanges = <T extends DocTypes>(since: ClockHead, opts: ChangesOptions) => ChangesResult<T>;
17
+ interface UpdateDocFnOptions {
18
+ replace?: boolean;
19
+ reset?: boolean;
20
+ }
21
+ type UpdateDocFn<T extends DocTypes> = (newDoc?: DocSet<T>, options?: UpdateDocFnOptions) => void;
22
+ type StoreDocFn<T extends DocTypes> = (existingDoc?: DocWithId<T>) => Promise<DocResponse>;
23
+ type DeleteDocFn<T extends DocTypes> = (existingDoc?: DocWithId<T>) => Promise<DocResponse>;
24
+ type UseDocumentResultTuple<T extends DocTypes> = [DocWithId<T>, UpdateDocFn<T>, StoreDocFn<T>, DeleteDocFn<T>];
25
+ interface UseDocumentResultObject<T extends DocTypes> {
26
+ readonly doc: DocWithId<T>;
27
+ merge(newDoc: Partial<T>): void;
28
+ replace(newDoc: T): void;
29
+ reset(): void;
30
+ refresh(): Promise<void>;
31
+ save(existingDoc?: DocWithId<T>): Promise<DocResponse>;
32
+ remove(existingDoc?: DocWithId<T>): Promise<DocResponse>;
33
+ submit(e?: Event): Promise<void>;
34
+ }
35
+ type UseDocumentResult<T extends DocTypes> = UseDocumentResultObject<T> & UseDocumentResultTuple<T>;
36
+ type UseDocumentInitialDocOrFn<T extends DocTypes> = DocSet<T> | (() => DocSet<T>);
37
+ type UseDocument = <T extends DocTypes>(initialDocOrFn: UseDocumentInitialDocOrFn<T>) => UseDocumentResult<T>;
38
+ interface UseFireproof {
39
+ readonly database: Database;
40
+ readonly useDocument: UseDocument;
41
+ readonly useLiveQuery: UseLiveQuery;
42
+ readonly useAllDocs: UseAllDocs;
43
+ readonly useChanges: UseChanges;
44
+ }
45
+
46
+ declare const FireproofCtx: UseFireproof;
47
+ declare function useFireproof(name?: string | Database, config?: ConfigOpts): UseFireproof;
48
+
49
+ type FileType = File | DocFileMeta;
50
+ interface ImgFileProps extends Omit<ImgHTMLAttributes<HTMLImageElement>, "src"> {
51
+ file?: FileType;
52
+ meta?: FileType;
53
+ }
54
+ declare function ImgFile({ file, meta, ...imgProps }: ImgFileProps): React.DetailedReactHTMLElement<{
55
+ id?: string | undefined | undefined;
56
+ loading?: "eager" | "lazy" | undefined | undefined;
57
+ dir?: string | undefined | undefined;
58
+ alt?: string | undefined | undefined;
59
+ crossOrigin?: "" | "anonymous" | "use-credentials" | undefined;
60
+ decoding?: "async" | "auto" | "sync" | undefined | undefined;
61
+ fetchPriority?: "high" | "low" | "auto" | undefined;
62
+ height?: number | string | undefined | undefined;
63
+ referrerPolicy?: React.HTMLAttributeReferrerPolicy | undefined;
64
+ sizes?: string | undefined | undefined;
65
+ srcSet?: string | undefined | undefined;
66
+ useMap?: string | undefined | undefined;
67
+ width?: number | string | undefined | undefined;
68
+ defaultChecked?: boolean | undefined | undefined;
69
+ defaultValue?: string | number | readonly string[] | undefined;
70
+ suppressContentEditableWarning?: boolean | undefined | undefined;
71
+ suppressHydrationWarning?: boolean | undefined | undefined;
72
+ accessKey?: string | undefined | undefined;
73
+ autoCapitalize?: "off" | "none" | "on" | "sentences" | "words" | "characters" | undefined | (string & {}) | undefined;
74
+ autoFocus?: boolean | undefined | undefined;
75
+ className?: string | undefined | undefined;
76
+ contentEditable?: (boolean | "true" | "false") | "inherit" | "plaintext-only" | undefined;
77
+ contextMenu?: string | undefined | undefined;
78
+ draggable?: (boolean | "true" | "false") | undefined;
79
+ enterKeyHint?: "enter" | "done" | "go" | "next" | "previous" | "search" | "send" | undefined | undefined;
80
+ hidden?: boolean | undefined | undefined;
81
+ lang?: string | undefined | undefined;
82
+ nonce?: string | undefined | undefined;
83
+ slot?: string | undefined | undefined;
84
+ spellCheck?: (boolean | "true" | "false") | undefined;
85
+ style?: React.CSSProperties | undefined;
86
+ tabIndex?: number | undefined | undefined;
87
+ title?: string | undefined | undefined;
88
+ translate?: "yes" | "no" | undefined | undefined;
89
+ radioGroup?: string | undefined | undefined;
90
+ role?: React.AriaRole | undefined;
91
+ about?: string | undefined | undefined;
92
+ content?: string | undefined | undefined;
93
+ datatype?: string | undefined | undefined;
94
+ inlist?: any;
95
+ prefix?: string | undefined | undefined;
96
+ property?: string | undefined | undefined;
97
+ rel?: string | undefined | undefined;
98
+ resource?: string | undefined | undefined;
99
+ rev?: string | undefined | undefined;
100
+ typeof?: string | undefined | undefined;
101
+ vocab?: string | undefined | undefined;
102
+ autoCorrect?: string | undefined | undefined;
103
+ autoSave?: string | undefined | undefined;
104
+ color?: string | undefined | undefined;
105
+ itemProp?: string | undefined | undefined;
106
+ itemScope?: boolean | undefined | undefined;
107
+ itemType?: string | undefined | undefined;
108
+ itemID?: string | undefined | undefined;
109
+ itemRef?: string | undefined | undefined;
110
+ results?: number | undefined | undefined;
111
+ security?: string | undefined | undefined;
112
+ unselectable?: "on" | "off" | undefined | undefined;
113
+ inputMode?: "none" | "text" | "tel" | "url" | "email" | "numeric" | "decimal" | "search" | undefined | undefined;
114
+ is?: string | undefined | undefined;
115
+ "aria-activedescendant"?: string | undefined | undefined;
116
+ "aria-atomic"?: (boolean | "true" | "false") | undefined;
117
+ "aria-autocomplete"?: "none" | "inline" | "list" | "both" | undefined | undefined;
118
+ "aria-braillelabel"?: string | undefined | undefined;
119
+ "aria-brailleroledescription"?: string | undefined | undefined;
120
+ "aria-busy"?: (boolean | "true" | "false") | undefined;
121
+ "aria-checked"?: boolean | "false" | "mixed" | "true" | undefined | undefined;
122
+ "aria-colcount"?: number | undefined | undefined;
123
+ "aria-colindex"?: number | undefined | undefined;
124
+ "aria-colindextext"?: string | undefined | undefined;
125
+ "aria-colspan"?: number | undefined | undefined;
126
+ "aria-controls"?: string | undefined | undefined;
127
+ "aria-current"?: boolean | "false" | "true" | "page" | "step" | "location" | "date" | "time" | undefined | undefined;
128
+ "aria-describedby"?: string | undefined | undefined;
129
+ "aria-description"?: string | undefined | undefined;
130
+ "aria-details"?: string | undefined | undefined;
131
+ "aria-disabled"?: (boolean | "true" | "false") | undefined;
132
+ "aria-dropeffect"?: "none" | "copy" | "execute" | "link" | "move" | "popup" | undefined | undefined;
133
+ "aria-errormessage"?: string | undefined | undefined;
134
+ "aria-expanded"?: (boolean | "true" | "false") | undefined;
135
+ "aria-flowto"?: string | undefined | undefined;
136
+ "aria-grabbed"?: (boolean | "true" | "false") | undefined;
137
+ "aria-haspopup"?: boolean | "false" | "true" | "menu" | "listbox" | "tree" | "grid" | "dialog" | undefined | undefined;
138
+ "aria-hidden"?: (boolean | "true" | "false") | undefined;
139
+ "aria-invalid"?: boolean | "false" | "true" | "grammar" | "spelling" | undefined | undefined;
140
+ "aria-keyshortcuts"?: string | undefined | undefined;
141
+ "aria-label"?: string | undefined | undefined;
142
+ "aria-labelledby"?: string | undefined | undefined;
143
+ "aria-level"?: number | undefined | undefined;
144
+ "aria-live"?: "off" | "assertive" | "polite" | undefined | undefined;
145
+ "aria-modal"?: (boolean | "true" | "false") | undefined;
146
+ "aria-multiline"?: (boolean | "true" | "false") | undefined;
147
+ "aria-multiselectable"?: (boolean | "true" | "false") | undefined;
148
+ "aria-orientation"?: "horizontal" | "vertical" | undefined | undefined;
149
+ "aria-owns"?: string | undefined | undefined;
150
+ "aria-placeholder"?: string | undefined | undefined;
151
+ "aria-posinset"?: number | undefined | undefined;
152
+ "aria-pressed"?: boolean | "false" | "mixed" | "true" | undefined | undefined;
153
+ "aria-readonly"?: (boolean | "true" | "false") | undefined;
154
+ "aria-relevant"?: "additions" | "additions removals" | "additions text" | "all" | "removals" | "removals additions" | "removals text" | "text" | "text additions" | "text removals" | undefined | undefined;
155
+ "aria-required"?: (boolean | "true" | "false") | undefined;
156
+ "aria-roledescription"?: string | undefined | undefined;
157
+ "aria-rowcount"?: number | undefined | undefined;
158
+ "aria-rowindex"?: number | undefined | undefined;
159
+ "aria-rowindextext"?: string | undefined | undefined;
160
+ "aria-rowspan"?: number | undefined | undefined;
161
+ "aria-selected"?: (boolean | "true" | "false") | undefined;
162
+ "aria-setsize"?: number | undefined | undefined;
163
+ "aria-sort"?: "none" | "ascending" | "descending" | "other" | undefined | undefined;
164
+ "aria-valuemax"?: number | undefined | undefined;
165
+ "aria-valuemin"?: number | undefined | undefined;
166
+ "aria-valuenow"?: number | undefined | undefined;
167
+ "aria-valuetext"?: string | undefined | undefined;
168
+ children?: React.ReactNode;
169
+ dangerouslySetInnerHTML?: {
170
+ __html: string | TrustedHTML;
171
+ } | undefined | undefined;
172
+ onCopy?: React.ClipboardEventHandler<HTMLImageElement> | undefined;
173
+ onCopyCapture?: React.ClipboardEventHandler<HTMLImageElement> | undefined;
174
+ onCut?: React.ClipboardEventHandler<HTMLImageElement> | undefined;
175
+ onCutCapture?: React.ClipboardEventHandler<HTMLImageElement> | undefined;
176
+ onPaste?: React.ClipboardEventHandler<HTMLImageElement> | undefined;
177
+ onPasteCapture?: React.ClipboardEventHandler<HTMLImageElement> | undefined;
178
+ onCompositionEnd?: React.CompositionEventHandler<HTMLImageElement> | undefined;
179
+ onCompositionEndCapture?: React.CompositionEventHandler<HTMLImageElement> | undefined;
180
+ onCompositionStart?: React.CompositionEventHandler<HTMLImageElement> | undefined;
181
+ onCompositionStartCapture?: React.CompositionEventHandler<HTMLImageElement> | undefined;
182
+ onCompositionUpdate?: React.CompositionEventHandler<HTMLImageElement> | undefined;
183
+ onCompositionUpdateCapture?: React.CompositionEventHandler<HTMLImageElement> | undefined;
184
+ onFocus?: React.FocusEventHandler<HTMLImageElement> | undefined;
185
+ onFocusCapture?: React.FocusEventHandler<HTMLImageElement> | undefined;
186
+ onBlur?: React.FocusEventHandler<HTMLImageElement> | undefined;
187
+ onBlurCapture?: React.FocusEventHandler<HTMLImageElement> | undefined;
188
+ onChange?: React.FormEventHandler<HTMLImageElement> | undefined;
189
+ onChangeCapture?: React.FormEventHandler<HTMLImageElement> | undefined;
190
+ onBeforeInput?: React.FormEventHandler<HTMLImageElement> | undefined;
191
+ onBeforeInputCapture?: React.FormEventHandler<HTMLImageElement> | undefined;
192
+ onInput?: React.FormEventHandler<HTMLImageElement> | undefined;
193
+ onInputCapture?: React.FormEventHandler<HTMLImageElement> | undefined;
194
+ onReset?: React.FormEventHandler<HTMLImageElement> | undefined;
195
+ onResetCapture?: React.FormEventHandler<HTMLImageElement> | undefined;
196
+ onSubmit?: React.FormEventHandler<HTMLImageElement> | undefined;
197
+ onSubmitCapture?: React.FormEventHandler<HTMLImageElement> | undefined;
198
+ onInvalid?: React.FormEventHandler<HTMLImageElement> | undefined;
199
+ onInvalidCapture?: React.FormEventHandler<HTMLImageElement> | undefined;
200
+ onLoad?: React.ReactEventHandler<HTMLImageElement> | undefined;
201
+ onLoadCapture?: React.ReactEventHandler<HTMLImageElement> | undefined;
202
+ onError?: React.ReactEventHandler<HTMLImageElement> | undefined;
203
+ onErrorCapture?: React.ReactEventHandler<HTMLImageElement> | undefined;
204
+ onKeyDown?: React.KeyboardEventHandler<HTMLImageElement> | undefined;
205
+ onKeyDownCapture?: React.KeyboardEventHandler<HTMLImageElement> | undefined;
206
+ onKeyPress?: React.KeyboardEventHandler<HTMLImageElement> | undefined;
207
+ onKeyPressCapture?: React.KeyboardEventHandler<HTMLImageElement> | undefined;
208
+ onKeyUp?: React.KeyboardEventHandler<HTMLImageElement> | undefined;
209
+ onKeyUpCapture?: React.KeyboardEventHandler<HTMLImageElement> | undefined;
210
+ onAbort?: React.ReactEventHandler<HTMLImageElement> | undefined;
211
+ onAbortCapture?: React.ReactEventHandler<HTMLImageElement> | undefined;
212
+ onCanPlay?: React.ReactEventHandler<HTMLImageElement> | undefined;
213
+ onCanPlayCapture?: React.ReactEventHandler<HTMLImageElement> | undefined;
214
+ onCanPlayThrough?: React.ReactEventHandler<HTMLImageElement> | undefined;
215
+ onCanPlayThroughCapture?: React.ReactEventHandler<HTMLImageElement> | undefined;
216
+ onDurationChange?: React.ReactEventHandler<HTMLImageElement> | undefined;
217
+ onDurationChangeCapture?: React.ReactEventHandler<HTMLImageElement> | undefined;
218
+ onEmptied?: React.ReactEventHandler<HTMLImageElement> | undefined;
219
+ onEmptiedCapture?: React.ReactEventHandler<HTMLImageElement> | undefined;
220
+ onEncrypted?: React.ReactEventHandler<HTMLImageElement> | undefined;
221
+ onEncryptedCapture?: React.ReactEventHandler<HTMLImageElement> | undefined;
222
+ onEnded?: React.ReactEventHandler<HTMLImageElement> | undefined;
223
+ onEndedCapture?: React.ReactEventHandler<HTMLImageElement> | undefined;
224
+ onLoadedData?: React.ReactEventHandler<HTMLImageElement> | undefined;
225
+ onLoadedDataCapture?: React.ReactEventHandler<HTMLImageElement> | undefined;
226
+ onLoadedMetadata?: React.ReactEventHandler<HTMLImageElement> | undefined;
227
+ onLoadedMetadataCapture?: React.ReactEventHandler<HTMLImageElement> | undefined;
228
+ onLoadStart?: React.ReactEventHandler<HTMLImageElement> | undefined;
229
+ onLoadStartCapture?: React.ReactEventHandler<HTMLImageElement> | undefined;
230
+ onPause?: React.ReactEventHandler<HTMLImageElement> | undefined;
231
+ onPauseCapture?: React.ReactEventHandler<HTMLImageElement> | undefined;
232
+ onPlay?: React.ReactEventHandler<HTMLImageElement> | undefined;
233
+ onPlayCapture?: React.ReactEventHandler<HTMLImageElement> | undefined;
234
+ onPlaying?: React.ReactEventHandler<HTMLImageElement> | undefined;
235
+ onPlayingCapture?: React.ReactEventHandler<HTMLImageElement> | undefined;
236
+ onProgress?: React.ReactEventHandler<HTMLImageElement> | undefined;
237
+ onProgressCapture?: React.ReactEventHandler<HTMLImageElement> | undefined;
238
+ onRateChange?: React.ReactEventHandler<HTMLImageElement> | undefined;
239
+ onRateChangeCapture?: React.ReactEventHandler<HTMLImageElement> | undefined;
240
+ onResize?: React.ReactEventHandler<HTMLImageElement> | undefined;
241
+ onResizeCapture?: React.ReactEventHandler<HTMLImageElement> | undefined;
242
+ onSeeked?: React.ReactEventHandler<HTMLImageElement> | undefined;
243
+ onSeekedCapture?: React.ReactEventHandler<HTMLImageElement> | undefined;
244
+ onSeeking?: React.ReactEventHandler<HTMLImageElement> | undefined;
245
+ onSeekingCapture?: React.ReactEventHandler<HTMLImageElement> | undefined;
246
+ onStalled?: React.ReactEventHandler<HTMLImageElement> | undefined;
247
+ onStalledCapture?: React.ReactEventHandler<HTMLImageElement> | undefined;
248
+ onSuspend?: React.ReactEventHandler<HTMLImageElement> | undefined;
249
+ onSuspendCapture?: React.ReactEventHandler<HTMLImageElement> | undefined;
250
+ onTimeUpdate?: React.ReactEventHandler<HTMLImageElement> | undefined;
251
+ onTimeUpdateCapture?: React.ReactEventHandler<HTMLImageElement> | undefined;
252
+ onVolumeChange?: React.ReactEventHandler<HTMLImageElement> | undefined;
253
+ onVolumeChangeCapture?: React.ReactEventHandler<HTMLImageElement> | undefined;
254
+ onWaiting?: React.ReactEventHandler<HTMLImageElement> | undefined;
255
+ onWaitingCapture?: React.ReactEventHandler<HTMLImageElement> | undefined;
256
+ onAuxClick?: React.MouseEventHandler<HTMLImageElement> | undefined;
257
+ onAuxClickCapture?: React.MouseEventHandler<HTMLImageElement> | undefined;
258
+ onClick?: React.MouseEventHandler<HTMLImageElement> | undefined;
259
+ onClickCapture?: React.MouseEventHandler<HTMLImageElement> | undefined;
260
+ onContextMenu?: React.MouseEventHandler<HTMLImageElement> | undefined;
261
+ onContextMenuCapture?: React.MouseEventHandler<HTMLImageElement> | undefined;
262
+ onDoubleClick?: React.MouseEventHandler<HTMLImageElement> | undefined;
263
+ onDoubleClickCapture?: React.MouseEventHandler<HTMLImageElement> | undefined;
264
+ onDrag?: React.DragEventHandler<HTMLImageElement> | undefined;
265
+ onDragCapture?: React.DragEventHandler<HTMLImageElement> | undefined;
266
+ onDragEnd?: React.DragEventHandler<HTMLImageElement> | undefined;
267
+ onDragEndCapture?: React.DragEventHandler<HTMLImageElement> | undefined;
268
+ onDragEnter?: React.DragEventHandler<HTMLImageElement> | undefined;
269
+ onDragEnterCapture?: React.DragEventHandler<HTMLImageElement> | undefined;
270
+ onDragExit?: React.DragEventHandler<HTMLImageElement> | undefined;
271
+ onDragExitCapture?: React.DragEventHandler<HTMLImageElement> | undefined;
272
+ onDragLeave?: React.DragEventHandler<HTMLImageElement> | undefined;
273
+ onDragLeaveCapture?: React.DragEventHandler<HTMLImageElement> | undefined;
274
+ onDragOver?: React.DragEventHandler<HTMLImageElement> | undefined;
275
+ onDragOverCapture?: React.DragEventHandler<HTMLImageElement> | undefined;
276
+ onDragStart?: React.DragEventHandler<HTMLImageElement> | undefined;
277
+ onDragStartCapture?: React.DragEventHandler<HTMLImageElement> | undefined;
278
+ onDrop?: React.DragEventHandler<HTMLImageElement> | undefined;
279
+ onDropCapture?: React.DragEventHandler<HTMLImageElement> | undefined;
280
+ onMouseDown?: React.MouseEventHandler<HTMLImageElement> | undefined;
281
+ onMouseDownCapture?: React.MouseEventHandler<HTMLImageElement> | undefined;
282
+ onMouseEnter?: React.MouseEventHandler<HTMLImageElement> | undefined;
283
+ onMouseLeave?: React.MouseEventHandler<HTMLImageElement> | undefined;
284
+ onMouseMove?: React.MouseEventHandler<HTMLImageElement> | undefined;
285
+ onMouseMoveCapture?: React.MouseEventHandler<HTMLImageElement> | undefined;
286
+ onMouseOut?: React.MouseEventHandler<HTMLImageElement> | undefined;
287
+ onMouseOutCapture?: React.MouseEventHandler<HTMLImageElement> | undefined;
288
+ onMouseOver?: React.MouseEventHandler<HTMLImageElement> | undefined;
289
+ onMouseOverCapture?: React.MouseEventHandler<HTMLImageElement> | undefined;
290
+ onMouseUp?: React.MouseEventHandler<HTMLImageElement> | undefined;
291
+ onMouseUpCapture?: React.MouseEventHandler<HTMLImageElement> | undefined;
292
+ onSelect?: React.ReactEventHandler<HTMLImageElement> | undefined;
293
+ onSelectCapture?: React.ReactEventHandler<HTMLImageElement> | undefined;
294
+ onTouchCancel?: React.TouchEventHandler<HTMLImageElement> | undefined;
295
+ onTouchCancelCapture?: React.TouchEventHandler<HTMLImageElement> | undefined;
296
+ onTouchEnd?: React.TouchEventHandler<HTMLImageElement> | undefined;
297
+ onTouchEndCapture?: React.TouchEventHandler<HTMLImageElement> | undefined;
298
+ onTouchMove?: React.TouchEventHandler<HTMLImageElement> | undefined;
299
+ onTouchMoveCapture?: React.TouchEventHandler<HTMLImageElement> | undefined;
300
+ onTouchStart?: React.TouchEventHandler<HTMLImageElement> | undefined;
301
+ onTouchStartCapture?: React.TouchEventHandler<HTMLImageElement> | undefined;
302
+ onPointerDown?: React.PointerEventHandler<HTMLImageElement> | undefined;
303
+ onPointerDownCapture?: React.PointerEventHandler<HTMLImageElement> | undefined;
304
+ onPointerMove?: React.PointerEventHandler<HTMLImageElement> | undefined;
305
+ onPointerMoveCapture?: React.PointerEventHandler<HTMLImageElement> | undefined;
306
+ onPointerUp?: React.PointerEventHandler<HTMLImageElement> | undefined;
307
+ onPointerUpCapture?: React.PointerEventHandler<HTMLImageElement> | undefined;
308
+ onPointerCancel?: React.PointerEventHandler<HTMLImageElement> | undefined;
309
+ onPointerCancelCapture?: React.PointerEventHandler<HTMLImageElement> | undefined;
310
+ onPointerEnter?: React.PointerEventHandler<HTMLImageElement> | undefined;
311
+ onPointerLeave?: React.PointerEventHandler<HTMLImageElement> | undefined;
312
+ onPointerOver?: React.PointerEventHandler<HTMLImageElement> | undefined;
313
+ onPointerOverCapture?: React.PointerEventHandler<HTMLImageElement> | undefined;
314
+ onPointerOut?: React.PointerEventHandler<HTMLImageElement> | undefined;
315
+ onPointerOutCapture?: React.PointerEventHandler<HTMLImageElement> | undefined;
316
+ onGotPointerCapture?: React.PointerEventHandler<HTMLImageElement> | undefined;
317
+ onGotPointerCaptureCapture?: React.PointerEventHandler<HTMLImageElement> | undefined;
318
+ onLostPointerCapture?: React.PointerEventHandler<HTMLImageElement> | undefined;
319
+ onLostPointerCaptureCapture?: React.PointerEventHandler<HTMLImageElement> | undefined;
320
+ onScroll?: React.UIEventHandler<HTMLImageElement> | undefined;
321
+ onScrollCapture?: React.UIEventHandler<HTMLImageElement> | undefined;
322
+ onWheel?: React.WheelEventHandler<HTMLImageElement> | undefined;
323
+ onWheelCapture?: React.WheelEventHandler<HTMLImageElement> | undefined;
324
+ onAnimationStart?: React.AnimationEventHandler<HTMLImageElement> | undefined;
325
+ onAnimationStartCapture?: React.AnimationEventHandler<HTMLImageElement> | undefined;
326
+ onAnimationEnd?: React.AnimationEventHandler<HTMLImageElement> | undefined;
327
+ onAnimationEndCapture?: React.AnimationEventHandler<HTMLImageElement> | undefined;
328
+ onAnimationIteration?: React.AnimationEventHandler<HTMLImageElement> | undefined;
329
+ onAnimationIterationCapture?: React.AnimationEventHandler<HTMLImageElement> | undefined;
330
+ onTransitionEnd?: React.TransitionEventHandler<HTMLImageElement> | undefined;
331
+ onTransitionEndCapture?: React.TransitionEventHandler<HTMLImageElement> | undefined;
332
+ src: string;
333
+ }, HTMLElement> | null;
334
+
335
+ export { type AllDocsResult, type ChangesResult, type DeleteDocFn, FireproofCtx, ImgFile, type LiveQueryResult, type StoreDocFn, type UpdateDocFn, type UpdateDocFnOptions, type UseAllDocs, type UseChanges, type UseDocument, type UseDocumentInitialDocOrFn, type UseDocumentResult, type UseDocumentResultObject, type UseDocumentResultTuple, type UseFireproof, type UseLiveQuery, useFireproof };
336
+ declare module '@fireproof/core/react'
package/react/index.js CHANGED
@@ -1,4 +1,265 @@
1
- export { FireproofCtx, useFireproof } from "./use-fireproof.js";
2
- export * from "./types.js";
3
- export * from "./img-file.js";
1
+ // src/react/use-fireproof.ts
2
+ import { fireproof } from "@fireproof/core";
3
+ import { useMemo as useMemo5 } from "react";
4
+
5
+ // src/react/use-document.ts
6
+ import { useCallback, useEffect, useMemo, useState, useRef } from "react";
7
+
8
+ // src/react/utils.ts
9
+ function deepClone(value) {
10
+ return (structuredClone ?? ((v) => JSON.parse(JSON.stringify(v))))(value);
11
+ }
12
+
13
+ // src/react/use-document.ts
14
+ function createUseDocument(database) {
15
+ const updateHappenedRef = useRef(false);
16
+ return function useDocument(initialDocOrFn) {
17
+ let initialDoc;
18
+ if (typeof initialDocOrFn === "function") {
19
+ initialDoc = initialDocOrFn();
20
+ } else {
21
+ initialDoc = initialDocOrFn ?? {};
22
+ }
23
+ const originalInitialDoc = useMemo(() => deepClone({ ...initialDoc }), []);
24
+ const [doc, setDoc] = useState(initialDoc);
25
+ const refresh = useCallback(async () => {
26
+ const gotDoc = doc._id ? await database.get(doc._id).catch(() => initialDoc) : initialDoc;
27
+ setDoc(gotDoc);
28
+ }, [doc._id]);
29
+ const save = useCallback(
30
+ async (existingDoc) => {
31
+ updateHappenedRef.current = false;
32
+ const toSave = existingDoc ?? doc;
33
+ const res = await database.put(toSave);
34
+ if (!updateHappenedRef.current && !doc._id && !existingDoc) {
35
+ setDoc((d) => ({ ...d, _id: res.id }));
36
+ }
37
+ return res;
38
+ },
39
+ [doc]
40
+ );
41
+ const remove = useCallback(
42
+ async (existingDoc) => {
43
+ const id = existingDoc?._id ?? doc._id;
44
+ if (!id) throw database.logger.Error().Msg(`Document must have an _id to be removed`).AsError();
45
+ const gotDoc = await database.get(id).catch(() => void 0);
46
+ if (!gotDoc) throw database.logger.Error().Str("id", id).Msg(`Document not found`).AsError();
47
+ const res = await database.del(id);
48
+ setDoc(initialDoc);
49
+ return res;
50
+ },
51
+ [doc, initialDoc]
52
+ );
53
+ const merge = useCallback((newDoc) => {
54
+ updateHappenedRef.current = true;
55
+ setDoc((prev) => ({ ...prev, ...newDoc }));
56
+ }, []);
57
+ const replace = useCallback((newDoc) => {
58
+ updateHappenedRef.current = true;
59
+ setDoc(newDoc);
60
+ }, []);
61
+ const reset = useCallback(() => {
62
+ updateHappenedRef.current = true;
63
+ setDoc({ ...originalInitialDoc });
64
+ }, [originalInitialDoc]);
65
+ const updateDoc = useCallback(
66
+ (newDoc, opts = { replace: false, reset: false }) => {
67
+ if (!newDoc) {
68
+ return opts.reset ? reset() : refresh();
69
+ }
70
+ return opts.replace ? replace(newDoc) : merge(newDoc);
71
+ },
72
+ [refresh, reset, replace, merge]
73
+ );
74
+ useEffect(() => {
75
+ if (!doc._id) return;
76
+ return database.subscribe((changes) => {
77
+ if (updateHappenedRef.current) {
78
+ return;
79
+ }
80
+ if (changes.find((c) => c._id === doc._id)) {
81
+ void refresh();
82
+ }
83
+ }, true);
84
+ }, [doc._id, refresh]);
85
+ useEffect(() => {
86
+ void refresh();
87
+ }, [refresh]);
88
+ const submit = useCallback(
89
+ async (e) => {
90
+ if (e?.preventDefault) e.preventDefault();
91
+ await save();
92
+ reset();
93
+ },
94
+ [save, reset]
95
+ );
96
+ const apiObject = {
97
+ doc: { ...doc },
98
+ merge,
99
+ replace,
100
+ reset,
101
+ refresh,
102
+ save,
103
+ remove,
104
+ submit
105
+ };
106
+ const tuple = [{ ...doc }, updateDoc, save, remove, reset, refresh];
107
+ Object.assign(apiObject, tuple);
108
+ Object.defineProperty(apiObject, Symbol.iterator, {
109
+ enumerable: false,
110
+ value: function* () {
111
+ yield* tuple;
112
+ }
113
+ });
114
+ return apiObject;
115
+ };
116
+ }
117
+
118
+ // src/react/use-live-query.ts
119
+ import { useCallback as useCallback2, useEffect as useEffect2, useMemo as useMemo2, useState as useState2 } from "react";
120
+ function createUseLiveQuery(database) {
121
+ return function useLiveQuery(mapFn, query = {}, initialRows = []) {
122
+ const [result, setResult] = useState2(() => {
123
+ const docs = initialRows.map((r) => r.doc).filter((r) => !!r);
124
+ return Object.assign(docs, {
125
+ docs,
126
+ rows: initialRows
127
+ });
128
+ });
129
+ const queryString = useMemo2(() => JSON.stringify(query), [query]);
130
+ const mapFnString = useMemo2(() => mapFn.toString(), [mapFn]);
131
+ const refreshRows = useCallback2(async () => {
132
+ const res = await database.query(mapFn, query);
133
+ const docs = res.rows.map((r) => r.doc).filter((r) => !!r);
134
+ setResult(
135
+ Object.assign(docs, {
136
+ docs,
137
+ rows: res.rows
138
+ })
139
+ );
140
+ }, [database, mapFnString, queryString]);
141
+ useEffect2(() => {
142
+ refreshRows();
143
+ const unsubscribe = database.subscribe(refreshRows);
144
+ return () => {
145
+ unsubscribe();
146
+ };
147
+ }, [database, refreshRows]);
148
+ return result;
149
+ };
150
+ }
151
+
152
+ // src/react/use-all-docs.ts
153
+ import { useCallback as useCallback3, useEffect as useEffect3, useMemo as useMemo3, useState as useState3 } from "react";
154
+ function createUseAllDocs(database) {
155
+ return function useAllDocs(query = {}) {
156
+ const [result, setResult] = useState3({
157
+ docs: []
158
+ });
159
+ const queryString = useMemo3(() => JSON.stringify(query), [query]);
160
+ const refreshRows = useCallback3(async () => {
161
+ const res = await database.allDocs(query);
162
+ setResult({ ...res, docs: res.rows.map((r) => r.value) });
163
+ }, [queryString]);
164
+ useEffect3(() => {
165
+ refreshRows();
166
+ return database.subscribe(refreshRows);
167
+ }, [refreshRows]);
168
+ return result;
169
+ };
170
+ }
171
+
172
+ // src/react/use-changes.ts
173
+ import { useCallback as useCallback4, useEffect as useEffect4, useMemo as useMemo4, useState as useState4 } from "react";
174
+ function createUseChanges(database) {
175
+ return function useChanges(since = [], opts = {}) {
176
+ const [result, setResult] = useState4({
177
+ docs: []
178
+ });
179
+ const queryString = useMemo4(() => JSON.stringify(opts), [opts]);
180
+ const refreshRows = useCallback4(async () => {
181
+ const res = await database.changes(since, opts);
182
+ setResult({ ...res, docs: res.rows.map((r) => r.value) });
183
+ }, [since, queryString]);
184
+ useEffect4(() => {
185
+ refreshRows();
186
+ return database.subscribe(refreshRows);
187
+ }, [refreshRows]);
188
+ return result;
189
+ };
190
+ }
191
+
192
+ // src/react/use-fireproof.ts
193
+ var FireproofCtx = {};
194
+ function useFireproof(name = "useFireproof", config = {}) {
195
+ const database = typeof name === "string" ? fireproof(name, config) : name;
196
+ const hooks = useMemo5(() => {
197
+ return {
198
+ useDocument: createUseDocument(database),
199
+ useLiveQuery: createUseLiveQuery(database),
200
+ useAllDocs: createUseAllDocs(database),
201
+ useChanges: createUseChanges(database)
202
+ };
203
+ }, [database]);
204
+ const { useDocument, useLiveQuery, useAllDocs, useChanges } = hooks;
205
+ return { database, useLiveQuery, useDocument, useAllDocs, useChanges };
206
+ }
207
+
208
+ // src/react/img-file.ts
209
+ import React, { useState as useState5, useEffect as useEffect5 } from "react";
210
+ var { URL } = globalThis;
211
+ function isFile(obj) {
212
+ return "type" in obj && "size" in obj && "stream" in obj && typeof obj.stream === "function";
213
+ }
214
+ function isFileMeta(obj) {
215
+ return "type" in obj && "size" in obj && "file" in obj && typeof obj.file === "function";
216
+ }
217
+ function ImgFile({ file, meta, ...imgProps }) {
218
+ const [imgDataUrl, setImgDataUrl] = useState5("");
219
+ const fileData = file || meta;
220
+ useEffect5(() => {
221
+ if (!fileData) return;
222
+ const loadFile = async () => {
223
+ let fileObj = null;
224
+ let fileType = "";
225
+ switch (true) {
226
+ case isFile(fileData):
227
+ fileObj = fileData;
228
+ fileType = fileData.type;
229
+ break;
230
+ case isFileMeta(fileData):
231
+ fileType = fileData.type;
232
+ fileObj = await fileData.file?.() || null;
233
+ break;
234
+ }
235
+ if (fileObj && /image/.test(fileType)) {
236
+ const src = URL.createObjectURL(fileObj);
237
+ setImgDataUrl(src);
238
+ return () => URL.revokeObjectURL(src);
239
+ }
240
+ };
241
+ let isMounted = true;
242
+ let cleanup;
243
+ loadFile().then((result) => {
244
+ if (isMounted) {
245
+ cleanup = result;
246
+ } else if (result) {
247
+ result();
248
+ }
249
+ });
250
+ return () => {
251
+ isMounted = false;
252
+ if (cleanup) cleanup();
253
+ };
254
+ }, [fileData]);
255
+ return imgDataUrl ? React.createElement("img", {
256
+ src: imgDataUrl,
257
+ ...imgProps
258
+ }) : null;
259
+ }
260
+ export {
261
+ FireproofCtx,
262
+ ImgFile,
263
+ useFireproof
264
+ };
4
265
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/react/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAChE,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC"}
1
+ {"version":3,"sources":["../../../src/react/use-fireproof.ts","../../../src/react/use-document.ts","../../../src/react/utils.ts","../../../src/react/use-live-query.ts","../../../src/react/use-all-docs.ts","../../../src/react/use-changes.ts","../../../src/react/img-file.ts"],"sourcesContent":["import type { ConfigOpts, Database } from \"@fireproof/core\";\nimport { fireproof } from \"@fireproof/core\";\nimport { useMemo } from \"react\";\nimport type { UseFireproof } from \"./types.js\";\nimport { createUseDocument } from \"./use-document.js\";\nimport { createUseLiveQuery } from \"./use-live-query.js\";\nimport { createUseAllDocs } from \"./use-all-docs.js\";\nimport { createUseChanges } from \"./use-changes.js\";\n\n/**\n * @deprecated Use the `useFireproof` hook instead\n */\nexport const FireproofCtx = {} as UseFireproof;\n\n/**\n *\n * ## Summary\n *\n * React hook to create a custom-named Fireproof database and provides the utility hooks to query against it.\n *\n * ## Usage\n * ```tsx\n * const { database, useLiveQuery, useDocument } = useFireproof(\"dbname\");\n * const { database, useLiveQuery, useDocument } = useFireproof(\"dbname\", { ...options });\n * ```\n *\n * ## Overview\n *\n * TL;DR: Only use this hook if you need to configure a database name other than the default `useFireproof`.\n *\n * For most applications, using the `useLiveQuery` or `useDocument` hooks exported from `use-fireproof` should\n * suffice for the majority of use-cases. Under the hood, they act against a database named `useFireproof` instantiated with\n * default configurations. However, if you need to do a custom database setup or configure a database name more to your liking\n * than the default `useFireproof`, then use `useFireproof` as it exists for that purpose. It will provide you with the\n * custom database accessor and *lexically scoped* versions of `useLiveQuery` and `useDocument` that act against said\n * custom database.\n *\n */\nexport function useFireproof(name: string | Database = \"useFireproof\", config: ConfigOpts = {}): UseFireproof {\n const database = typeof name === \"string\" ? fireproof(name, config) : name;\n\n // Memoize the hook factory functions together to ensure they don't recreate on every render\n const hooks = useMemo(() => {\n return {\n useDocument: createUseDocument(database),\n useLiveQuery: createUseLiveQuery(database),\n useAllDocs: createUseAllDocs(database),\n useChanges: createUseChanges(database),\n };\n }, [database]);\n\n const { useDocument, useLiveQuery, useAllDocs, useChanges } = hooks;\n\n return { database, useLiveQuery, useDocument, useAllDocs, useChanges };\n}\n\n// Export types\nexport type {\n LiveQueryResult,\n UseDocumentResult,\n AllDocsResult,\n ChangesResult,\n UseDocument,\n UseLiveQuery,\n UseAllDocs,\n UseChanges,\n UseFireproof,\n} from \"./types.js\";\n","import { useCallback, useEffect, useMemo, useState, useRef } from \"react\";\nimport type { DocSet, DocTypes, DocWithId, Database } from \"@fireproof/core\";\nimport { deepClone } from \"./utils.js\";\nimport type { DeleteDocFn, StoreDocFn, UseDocumentInitialDocOrFn, UseDocumentResult } from \"./types.js\";\n\n/**\n * Implementation of the useDocument hook\n */\nexport function createUseDocument(database: Database) {\n const updateHappenedRef = useRef(false);\n\n return function useDocument<T extends DocTypes>(initialDocOrFn?: UseDocumentInitialDocOrFn<T>): UseDocumentResult<T> {\n let initialDoc: DocSet<T>;\n if (typeof initialDocOrFn === \"function\") {\n initialDoc = initialDocOrFn();\n } else {\n initialDoc = initialDocOrFn ?? ({} as T);\n }\n\n const originalInitialDoc = useMemo(() => deepClone({ ...initialDoc }), []);\n\n const [doc, setDoc] = useState(initialDoc);\n\n const refresh = useCallback(async () => {\n const gotDoc = doc._id ? await database.get<T>(doc._id).catch(() => initialDoc) : initialDoc;\n setDoc(gotDoc);\n }, [doc._id]);\n\n const save: StoreDocFn<T> = useCallback(\n async (existingDoc) => {\n updateHappenedRef.current = false;\n const toSave = existingDoc ?? doc;\n const res = await database.put(toSave);\n\n if (!updateHappenedRef.current && !doc._id && !existingDoc) {\n setDoc((d) => ({ ...d, _id: res.id }));\n }\n\n return res;\n },\n [doc],\n );\n\n const remove: DeleteDocFn<T> = useCallback(\n async (existingDoc) => {\n const id = existingDoc?._id ?? doc._id;\n if (!id) throw database.logger.Error().Msg(`Document must have an _id to be removed`).AsError();\n const gotDoc = await database.get<T>(id).catch(() => undefined);\n if (!gotDoc) throw database.logger.Error().Str(\"id\", id).Msg(`Document not found`).AsError();\n const res = await database.del(id);\n setDoc(initialDoc);\n return res;\n },\n [doc, initialDoc],\n );\n\n // New granular update methods\n const merge = useCallback((newDoc: Partial<T>) => {\n updateHappenedRef.current = true;\n setDoc((prev) => ({ ...prev, ...newDoc }));\n }, []);\n\n const replace = useCallback((newDoc: T) => {\n updateHappenedRef.current = true;\n setDoc(newDoc);\n }, []);\n\n const reset = useCallback(() => {\n updateHappenedRef.current = true;\n setDoc({ ...originalInitialDoc });\n }, [originalInitialDoc]);\n\n // Legacy-compatible updateDoc\n const updateDoc = useCallback(\n (newDoc?: DocSet<T>, opts = { replace: false, reset: false }) => {\n if (!newDoc) {\n return opts.reset ? reset() : refresh();\n }\n return opts.replace ? replace(newDoc as T) : merge(newDoc);\n },\n [refresh, reset, replace, merge],\n );\n\n useEffect(() => {\n if (!doc._id) return;\n return database.subscribe((changes) => {\n if (updateHappenedRef.current) {\n return;\n }\n if (changes.find((c) => c._id === doc._id)) {\n void refresh();\n }\n }, true);\n }, [doc._id, refresh]);\n\n useEffect(() => {\n void refresh();\n }, [refresh]);\n\n const submit = useCallback(\n async (e?: Event) => {\n if (e?.preventDefault) e.preventDefault();\n await save();\n reset();\n },\n [save, reset],\n );\n\n // Primary Object API with both new and legacy methods\n const apiObject = {\n doc: { ...doc } as DocWithId<T>,\n merge,\n replace,\n reset,\n refresh,\n save,\n remove,\n submit,\n };\n\n // Make the object properly iterable\n const tuple = [{ ...doc }, updateDoc, save, remove, reset, refresh];\n Object.assign(apiObject, tuple);\n Object.defineProperty(apiObject, Symbol.iterator, {\n enumerable: false,\n value: function* () {\n yield* tuple;\n },\n });\n\n return apiObject as UseDocumentResult<T>;\n };\n}\n","/**\n * Deep clone a value\n */\nexport function deepClone<T>(value: T): T {\n return (structuredClone ?? ((v: T) => JSON.parse(JSON.stringify(v))))(value);\n}\n","import { useCallback, useEffect, useMemo, useState } from \"react\";\nimport type { DocFragment, DocTypes, DocWithId, IndexKeyType, IndexRow, MapFn, Database } from \"@fireproof/core\";\nimport type { LiveQueryResult } from \"./types.js\";\n\n// Internal shadow type for array-like behavior (implementation detail)\ntype EnhancedQueryResult<T extends DocTypes, K extends IndexKeyType, R extends DocFragment = T> = LiveQueryResult<T, K, R> &\n DocWithId<T>[];\n\n/**\n * Implementation of the useLiveQuery hook\n */\nexport function createUseLiveQuery(database: Database) {\n return function useLiveQuery<T extends DocTypes, K extends IndexKeyType = string, R extends DocFragment = T>(\n mapFn: MapFn<T> | string,\n query = {},\n initialRows: IndexRow<K, T, R>[] = [],\n ): LiveQueryResult<T, K, R> {\n const [result, setResult] = useState<EnhancedQueryResult<T, K, R>>(() => {\n const docs = initialRows.map((r) => r.doc).filter((r): r is DocWithId<T> => !!r);\n return Object.assign(docs, {\n docs,\n rows: initialRows,\n });\n });\n\n const queryString = useMemo(() => JSON.stringify(query), [query]);\n const mapFnString = useMemo(() => mapFn.toString(), [mapFn]);\n\n const refreshRows = useCallback(async () => {\n const res = await database.query<K, T, R>(mapFn, query);\n const docs = res.rows.map((r) => r.doc).filter((r): r is DocWithId<T> => !!r);\n setResult(\n Object.assign(docs, {\n docs,\n rows: res.rows,\n }),\n );\n }, [database, mapFnString, queryString]);\n\n useEffect(() => {\n refreshRows();\n const unsubscribe = database.subscribe(refreshRows);\n return () => {\n unsubscribe();\n };\n }, [database, refreshRows]);\n\n return result;\n };\n}\n","import { useCallback, useEffect, useMemo, useState } from \"react\";\nimport type { AllDocsQueryOpts, DocTypes, DocWithId, Database } from \"@fireproof/core\";\nimport type { AllDocsResult } from \"./types.js\";\n\n/**\n * Implementation of the useAllDocs hook\n */\nexport function createUseAllDocs(database: Database) {\n return function useAllDocs<T extends DocTypes>(query: AllDocsQueryOpts = {}): AllDocsResult<T> {\n const [result, setResult] = useState<AllDocsResult<T>>({\n docs: [],\n });\n\n const queryString = useMemo(() => JSON.stringify(query), [query]);\n\n const refreshRows = useCallback(async () => {\n const res = await database.allDocs<T>(query);\n setResult({ ...res, docs: res.rows.map((r) => r.value as DocWithId<T>) });\n }, [queryString]);\n\n useEffect(() => {\n refreshRows(); // Initial data fetch\n return database.subscribe(refreshRows);\n }, [refreshRows]);\n\n return result;\n };\n}\n","import { useCallback, useEffect, useMemo, useState } from \"react\";\nimport type { ChangesOptions, ClockHead, DocTypes, DocWithId, Database } from \"@fireproof/core\";\nimport type { ChangesResult } from \"./types.js\";\n\n/**\n * Implementation of the useChanges hook\n */\nexport function createUseChanges(database: Database) {\n return function useChanges<T extends DocTypes>(since: ClockHead = [], opts: ChangesOptions = {}): ChangesResult<T> {\n const [result, setResult] = useState<ChangesResult<T>>({\n docs: [],\n });\n\n const queryString = useMemo(() => JSON.stringify(opts), [opts]);\n\n const refreshRows = useCallback(async () => {\n const res = await database.changes<T>(since, opts);\n setResult({ ...res, docs: res.rows.map((r) => r.value as DocWithId<T>) });\n }, [since, queryString]);\n\n useEffect(() => {\n refreshRows(); // Initial data fetch\n return database.subscribe(refreshRows);\n }, [refreshRows]);\n\n return result;\n };\n}\n","import { DocFileMeta } from \"@fireproof/core\";\nimport React, { useState, useEffect, ImgHTMLAttributes } from \"react\";\n\nconst { URL } = globalThis;\n\n// Union type to support both direct File objects and metadata objects\ntype FileType = File | DocFileMeta;\n\ninterface ImgFileProps extends Omit<ImgHTMLAttributes<HTMLImageElement>, \"src\"> {\n file?: FileType;\n /**\n * @deprecated Use 'file' instead. This is for internal use only to support legacy code.\n * @internal\n */\n meta?: FileType;\n}\n\n// Helper function to determine if the object is a File-like object\nfunction isFile(obj: FileType): obj is File {\n return \"type\" in obj && \"size\" in obj && \"stream\" in obj && typeof obj.stream === \"function\";\n}\n\n// Helper function to determine if the object is a DocFileMeta\nfunction isFileMeta(obj: FileType): obj is DocFileMeta {\n return \"type\" in obj && \"size\" in obj && \"file\" in obj && typeof obj.file === \"function\";\n}\n\nexport function ImgFile({ file, meta, ...imgProps }: ImgFileProps) {\n const [imgDataUrl, setImgDataUrl] = useState(\"\");\n\n // Use meta as fallback if file is not provided (for backward compatibility)\n const fileData = file || meta;\n\n useEffect(() => {\n if (!fileData) return;\n\n const loadFile = async () => {\n let fileObj: File | null = null;\n let fileType = \"\";\n\n switch (true) {\n case isFile(fileData):\n fileObj = fileData;\n fileType = fileData.type;\n break;\n case isFileMeta(fileData):\n fileType = fileData.type;\n fileObj = (await fileData.file?.()) || null;\n break;\n }\n\n if (fileObj && /image/.test(fileType)) {\n const src = URL.createObjectURL(fileObj);\n setImgDataUrl(src);\n return () => URL.revokeObjectURL(src);\n }\n };\n\n let isMounted = true;\n let cleanup: (() => void) | undefined;\n\n loadFile().then((result) => {\n if (isMounted) {\n cleanup = result;\n } else if (result) {\n result();\n }\n });\n\n return () => {\n isMounted = false;\n if (cleanup) cleanup();\n };\n }, [fileData]);\n\n return imgDataUrl\n ? React.createElement(\"img\", {\n src: imgDataUrl,\n ...imgProps,\n })\n : null;\n}\n\nexport default ImgFile;\n"],"mappings":";AACA,SAAS,iBAAiB;AAC1B,SAAS,WAAAA,gBAAe;;;ACFxB,SAAS,aAAa,WAAW,SAAS,UAAU,cAAc;;;ACG3D,SAAS,UAAa,OAAa;AACxC,UAAQ,oBAAoB,CAAC,MAAS,KAAK,MAAM,KAAK,UAAU,CAAC,CAAC,IAAI,KAAK;AAC7E;;;ADGO,SAAS,kBAAkB,UAAoB;AACpD,QAAM,oBAAoB,OAAO,KAAK;AAEtC,SAAO,SAAS,YAAgC,gBAAqE;AACnH,QAAI;AACJ,QAAI,OAAO,mBAAmB,YAAY;AACxC,mBAAa,eAAe;AAAA,IAC9B,OAAO;AACL,mBAAa,kBAAmB,CAAC;AAAA,IACnC;AAEA,UAAM,qBAAqB,QAAQ,MAAM,UAAU,EAAE,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;AAEzE,UAAM,CAAC,KAAK,MAAM,IAAI,SAAS,UAAU;AAEzC,UAAM,UAAU,YAAY,YAAY;AACtC,YAAM,SAAS,IAAI,MAAM,MAAM,SAAS,IAAO,IAAI,GAAG,EAAE,MAAM,MAAM,UAAU,IAAI;AAClF,aAAO,MAAM;AAAA,IACf,GAAG,CAAC,IAAI,GAAG,CAAC;AAEZ,UAAM,OAAsB;AAAA,MAC1B,OAAO,gBAAgB;AACrB,0BAAkB,UAAU;AAC5B,cAAM,SAAS,eAAe;AAC9B,cAAM,MAAM,MAAM,SAAS,IAAI,MAAM;AAErC,YAAI,CAAC,kBAAkB,WAAW,CAAC,IAAI,OAAO,CAAC,aAAa;AAC1D,iBAAO,CAAC,OAAO,EAAE,GAAG,GAAG,KAAK,IAAI,GAAG,EAAE;AAAA,QACvC;AAEA,eAAO;AAAA,MACT;AAAA,MACA,CAAC,GAAG;AAAA,IACN;AAEA,UAAM,SAAyB;AAAA,MAC7B,OAAO,gBAAgB;AACrB,cAAM,KAAK,aAAa,OAAO,IAAI;AACnC,YAAI,CAAC,GAAI,OAAM,SAAS,OAAO,MAAM,EAAE,IAAI,yCAAyC,EAAE,QAAQ;AAC9F,cAAM,SAAS,MAAM,SAAS,IAAO,EAAE,EAAE,MAAM,MAAM,MAAS;AAC9D,YAAI,CAAC,OAAQ,OAAM,SAAS,OAAO,MAAM,EAAE,IAAI,MAAM,EAAE,EAAE,IAAI,oBAAoB,EAAE,QAAQ;AAC3F,cAAM,MAAM,MAAM,SAAS,IAAI,EAAE;AACjC,eAAO,UAAU;AACjB,eAAO;AAAA,MACT;AAAA,MACA,CAAC,KAAK,UAAU;AAAA,IAClB;AAGA,UAAM,QAAQ,YAAY,CAAC,WAAuB;AAChD,wBAAkB,UAAU;AAC5B,aAAO,CAAC,UAAU,EAAE,GAAG,MAAM,GAAG,OAAO,EAAE;AAAA,IAC3C,GAAG,CAAC,CAAC;AAEL,UAAM,UAAU,YAAY,CAAC,WAAc;AACzC,wBAAkB,UAAU;AAC5B,aAAO,MAAM;AAAA,IACf,GAAG,CAAC,CAAC;AAEL,UAAM,QAAQ,YAAY,MAAM;AAC9B,wBAAkB,UAAU;AAC5B,aAAO,EAAE,GAAG,mBAAmB,CAAC;AAAA,IAClC,GAAG,CAAC,kBAAkB,CAAC;AAGvB,UAAM,YAAY;AAAA,MAChB,CAAC,QAAoB,OAAO,EAAE,SAAS,OAAO,OAAO,MAAM,MAAM;AAC/D,YAAI,CAAC,QAAQ;AACX,iBAAO,KAAK,QAAQ,MAAM,IAAI,QAAQ;AAAA,QACxC;AACA,eAAO,KAAK,UAAU,QAAQ,MAAW,IAAI,MAAM,MAAM;AAAA,MAC3D;AAAA,MACA,CAAC,SAAS,OAAO,SAAS,KAAK;AAAA,IACjC;AAEA,cAAU,MAAM;AACd,UAAI,CAAC,IAAI,IAAK;AACd,aAAO,SAAS,UAAU,CAAC,YAAY;AACrC,YAAI,kBAAkB,SAAS;AAC7B;AAAA,QACF;AACA,YAAI,QAAQ,KAAK,CAAC,MAAM,EAAE,QAAQ,IAAI,GAAG,GAAG;AAC1C,eAAK,QAAQ;AAAA,QACf;AAAA,MACF,GAAG,IAAI;AAAA,IACT,GAAG,CAAC,IAAI,KAAK,OAAO,CAAC;AAErB,cAAU,MAAM;AACd,WAAK,QAAQ;AAAA,IACf,GAAG,CAAC,OAAO,CAAC;AAEZ,UAAM,SAAS;AAAA,MACb,OAAO,MAAc;AACnB,YAAI,GAAG,eAAgB,GAAE,eAAe;AACxC,cAAM,KAAK;AACX,cAAM;AAAA,MACR;AAAA,MACA,CAAC,MAAM,KAAK;AAAA,IACd;AAGA,UAAM,YAAY;AAAA,MAChB,KAAK,EAAE,GAAG,IAAI;AAAA,MACd;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAGA,UAAM,QAAQ,CAAC,EAAE,GAAG,IAAI,GAAG,WAAW,MAAM,QAAQ,OAAO,OAAO;AAClE,WAAO,OAAO,WAAW,KAAK;AAC9B,WAAO,eAAe,WAAW,OAAO,UAAU;AAAA,MAChD,YAAY;AAAA,MACZ,OAAO,aAAa;AAClB,eAAO;AAAA,MACT;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AACF;;;AEpIA,SAAS,eAAAC,cAAa,aAAAC,YAAW,WAAAC,UAAS,YAAAC,iBAAgB;AAWnD,SAAS,mBAAmB,UAAoB;AACrD,SAAO,SAAS,aACd,OACA,QAAQ,CAAC,GACT,cAAmC,CAAC,GACV;AAC1B,UAAM,CAAC,QAAQ,SAAS,IAAIA,UAAuC,MAAM;AACvE,YAAM,OAAO,YAAY,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC,MAAyB,CAAC,CAAC,CAAC;AAC/E,aAAO,OAAO,OAAO,MAAM;AAAA,QACzB;AAAA,QACA,MAAM;AAAA,MACR,CAAC;AAAA,IACH,CAAC;AAED,UAAM,cAAcD,SAAQ,MAAM,KAAK,UAAU,KAAK,GAAG,CAAC,KAAK,CAAC;AAChE,UAAM,cAAcA,SAAQ,MAAM,MAAM,SAAS,GAAG,CAAC,KAAK,CAAC;AAE3D,UAAM,cAAcF,aAAY,YAAY;AAC1C,YAAM,MAAM,MAAM,SAAS,MAAe,OAAO,KAAK;AACtD,YAAM,OAAO,IAAI,KAAK,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC,MAAyB,CAAC,CAAC,CAAC;AAC5E;AAAA,QACE,OAAO,OAAO,MAAM;AAAA,UAClB;AAAA,UACA,MAAM,IAAI;AAAA,QACZ,CAAC;AAAA,MACH;AAAA,IACF,GAAG,CAAC,UAAU,aAAa,WAAW,CAAC;AAEvC,IAAAC,WAAU,MAAM;AACd,kBAAY;AACZ,YAAM,cAAc,SAAS,UAAU,WAAW;AAClD,aAAO,MAAM;AACX,oBAAY;AAAA,MACd;AAAA,IACF,GAAG,CAAC,UAAU,WAAW,CAAC;AAE1B,WAAO;AAAA,EACT;AACF;;;ACjDA,SAAS,eAAAG,cAAa,aAAAC,YAAW,WAAAC,UAAS,YAAAC,iBAAgB;AAOnD,SAAS,iBAAiB,UAAoB;AACnD,SAAO,SAAS,WAA+B,QAA0B,CAAC,GAAqB;AAC7F,UAAM,CAAC,QAAQ,SAAS,IAAIA,UAA2B;AAAA,MACrD,MAAM,CAAC;AAAA,IACT,CAAC;AAED,UAAM,cAAcD,SAAQ,MAAM,KAAK,UAAU,KAAK,GAAG,CAAC,KAAK,CAAC;AAEhE,UAAM,cAAcF,aAAY,YAAY;AAC1C,YAAM,MAAM,MAAM,SAAS,QAAW,KAAK;AAC3C,gBAAU,EAAE,GAAG,KAAK,MAAM,IAAI,KAAK,IAAI,CAAC,MAAM,EAAE,KAAqB,EAAE,CAAC;AAAA,IAC1E,GAAG,CAAC,WAAW,CAAC;AAEhB,IAAAC,WAAU,MAAM;AACd,kBAAY;AACZ,aAAO,SAAS,UAAU,WAAW;AAAA,IACvC,GAAG,CAAC,WAAW,CAAC;AAEhB,WAAO;AAAA,EACT;AACF;;;AC3BA,SAAS,eAAAG,cAAa,aAAAC,YAAW,WAAAC,UAAS,YAAAC,iBAAgB;AAOnD,SAAS,iBAAiB,UAAoB;AACnD,SAAO,SAAS,WAA+B,QAAmB,CAAC,GAAG,OAAuB,CAAC,GAAqB;AACjH,UAAM,CAAC,QAAQ,SAAS,IAAIA,UAA2B;AAAA,MACrD,MAAM,CAAC;AAAA,IACT,CAAC;AAED,UAAM,cAAcD,SAAQ,MAAM,KAAK,UAAU,IAAI,GAAG,CAAC,IAAI,CAAC;AAE9D,UAAM,cAAcF,aAAY,YAAY;AAC1C,YAAM,MAAM,MAAM,SAAS,QAAW,OAAO,IAAI;AACjD,gBAAU,EAAE,GAAG,KAAK,MAAM,IAAI,KAAK,IAAI,CAAC,MAAM,EAAE,KAAqB,EAAE,CAAC;AAAA,IAC1E,GAAG,CAAC,OAAO,WAAW,CAAC;AAEvB,IAAAC,WAAU,MAAM;AACd,kBAAY;AACZ,aAAO,SAAS,UAAU,WAAW;AAAA,IACvC,GAAG,CAAC,WAAW,CAAC;AAEhB,WAAO;AAAA,EACT;AACF;;;ALfO,IAAM,eAAe,CAAC;AA0BtB,SAAS,aAAa,OAA0B,gBAAgB,SAAqB,CAAC,GAAiB;AAC5G,QAAM,WAAW,OAAO,SAAS,WAAW,UAAU,MAAM,MAAM,IAAI;AAGtE,QAAM,QAAQG,SAAQ,MAAM;AAC1B,WAAO;AAAA,MACL,aAAa,kBAAkB,QAAQ;AAAA,MACvC,cAAc,mBAAmB,QAAQ;AAAA,MACzC,YAAY,iBAAiB,QAAQ;AAAA,MACrC,YAAY,iBAAiB,QAAQ;AAAA,IACvC;AAAA,EACF,GAAG,CAAC,QAAQ,CAAC;AAEb,QAAM,EAAE,aAAa,cAAc,YAAY,WAAW,IAAI;AAE9D,SAAO,EAAE,UAAU,cAAc,aAAa,YAAY,WAAW;AACvE;;;AMrDA,OAAO,SAAS,YAAAC,WAAU,aAAAC,kBAAoC;AAE9D,IAAM,EAAE,IAAI,IAAI;AAehB,SAAS,OAAO,KAA4B;AAC1C,SAAO,UAAU,OAAO,UAAU,OAAO,YAAY,OAAO,OAAO,IAAI,WAAW;AACpF;AAGA,SAAS,WAAW,KAAmC;AACrD,SAAO,UAAU,OAAO,UAAU,OAAO,UAAU,OAAO,OAAO,IAAI,SAAS;AAChF;AAEO,SAAS,QAAQ,EAAE,MAAM,MAAM,GAAG,SAAS,GAAiB;AACjE,QAAM,CAAC,YAAY,aAAa,IAAID,UAAS,EAAE;AAG/C,QAAM,WAAW,QAAQ;AAEzB,EAAAC,WAAU,MAAM;AACd,QAAI,CAAC,SAAU;AAEf,UAAM,WAAW,YAAY;AAC3B,UAAI,UAAuB;AAC3B,UAAI,WAAW;AAEf,cAAQ,MAAM;AAAA,QACZ,KAAK,OAAO,QAAQ;AAClB,oBAAU;AACV,qBAAW,SAAS;AACpB;AAAA,QACF,KAAK,WAAW,QAAQ;AACtB,qBAAW,SAAS;AACpB,oBAAW,MAAM,SAAS,OAAO,KAAM;AACvC;AAAA,MACJ;AAEA,UAAI,WAAW,QAAQ,KAAK,QAAQ,GAAG;AACrC,cAAM,MAAM,IAAI,gBAAgB,OAAO;AACvC,sBAAc,GAAG;AACjB,eAAO,MAAM,IAAI,gBAAgB,GAAG;AAAA,MACtC;AAAA,IACF;AAEA,QAAI,YAAY;AAChB,QAAI;AAEJ,aAAS,EAAE,KAAK,CAAC,WAAW;AAC1B,UAAI,WAAW;AACb,kBAAU;AAAA,MACZ,WAAW,QAAQ;AACjB,eAAO;AAAA,MACT;AAAA,IACF,CAAC;AAED,WAAO,MAAM;AACX,kBAAY;AACZ,UAAI,QAAS,SAAQ;AAAA,IACvB;AAAA,EACF,GAAG,CAAC,QAAQ,CAAC;AAEb,SAAO,aACH,MAAM,cAAc,OAAO;AAAA,IACzB,KAAK;AAAA,IACL,GAAG;AAAA,EACL,CAAC,IACD;AACN;","names":["useMemo","useCallback","useEffect","useMemo","useState","useCallback","useEffect","useMemo","useState","useCallback","useEffect","useMemo","useState","useMemo","useState","useEffect"]}