@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.
- package/deno/index.d.ts +7 -0
- package/deno/index.js +66 -0
- package/deno/index.js.map +1 -0
- package/deno/metafile-esm.json +1 -0
- package/deno.json +2 -2
- package/index.cjs +7268 -0
- package/index.cjs.map +1 -0
- package/index.d.cts +2742 -0
- package/index.d.ts +2742 -15
- package/index.js +7267 -14
- package/index.js.map +1 -1
- package/indexeddb/index.cjs +218 -0
- package/indexeddb/index.cjs.map +1 -0
- package/indexeddb/index.d.cts +30 -0
- package/indexeddb/index.d.ts +30 -0
- package/indexeddb/index.js +195 -0
- package/indexeddb/index.js.map +1 -0
- package/indexeddb/metafile-cjs.json +1 -0
- package/indexeddb/metafile-esm.json +1 -0
- package/metafile-cjs.json +1 -0
- package/metafile-esm.json +1 -0
- package/node/index.cjs +97 -0
- package/node/index.cjs.map +1 -0
- package/node/index.d.cts +7 -0
- package/node/index.d.ts +7 -0
- package/node/index.js +64 -0
- package/node/index.js.map +1 -0
- package/node/metafile-cjs.json +1 -0
- package/node/metafile-esm.json +1 -0
- package/package.json +17 -20
- package/react/index.cjs +298 -0
- package/react/index.cjs.map +1 -0
- package/react/{img-file.d.ts → index.d.cts} +53 -6
- package/react/index.d.ts +336 -4
- package/react/index.js +264 -3
- package/react/index.js.map +1 -1
- package/react/metafile-cjs.json +1 -0
- package/react/metafile-esm.json +1 -0
- package/tests/blockstore/loader.test.ts +1 -1
- package/tests/blockstore/store.test.ts +4 -9
- package/tests/fireproof/attachable.test.ts +3 -3
- package/tests/react/use-fireproof-db-switch.test.tsx +91 -0
- package/tests/react/use-fireproof-stability.test.tsx +145 -0
- package/tests/www/gallery.html +132 -0
- package/tests/www/iife.html +42 -0
- package/tests/www/todo-aws.html +232 -0
- package/tests/www/todo-ipfs.html +213 -0
- package/tests/www/todo-local.html +214 -0
- package/tests/www/todo-netlify.html +227 -0
- package/tests/www/todo.html +254 -0
- package/apply-head-queue.d.ts +0 -18
- package/apply-head-queue.d.ts.map +0 -1
- package/apply-head-queue.js +0 -47
- package/apply-head-queue.js.map +0 -1
- package/blockstore/attachable-store.d.ts +0 -17
- package/blockstore/attachable-store.d.ts.map +0 -1
- package/blockstore/attachable-store.js +0 -295
- package/blockstore/attachable-store.js.map +0 -1
- package/blockstore/commit-queue.d.ts +0 -12
- package/blockstore/commit-queue.d.ts.map +0 -1
- package/blockstore/commit-queue.js +0 -52
- package/blockstore/commit-queue.js.map +0 -1
- package/blockstore/commitor.d.ts +0 -21
- package/blockstore/commitor.d.ts.map +0 -1
- package/blockstore/commitor.js +0 -104
- package/blockstore/commitor.js.map +0 -1
- package/blockstore/connect-raw.d.ts +0 -2
- package/blockstore/connect-raw.d.ts.map +0 -1
- package/blockstore/connect-raw.js +0 -2
- package/blockstore/connect-raw.js.map +0 -1
- package/blockstore/connection-base.d.ts +0 -2
- package/blockstore/connection-base.d.ts.map +0 -1
- package/blockstore/connection-base.js +0 -2
- package/blockstore/connection-base.js.map +0 -1
- package/blockstore/encrypt-helpers.d.ts +0 -2
- package/blockstore/encrypt-helpers.d.ts.map +0 -1
- package/blockstore/encrypt-helpers.js +0 -2
- package/blockstore/encrypt-helpers.js.map +0 -1
- package/blockstore/fp-envelope.d.ts +0 -32
- package/blockstore/fp-envelope.d.ts.map +0 -1
- package/blockstore/fp-envelope.js +0 -14
- package/blockstore/fp-envelope.js.map +0 -1
- package/blockstore/gateway.d.ts +0 -20
- package/blockstore/gateway.d.ts.map +0 -1
- package/blockstore/gateway.js +0 -2
- package/blockstore/gateway.js.map +0 -1
- package/blockstore/index.d.ts +0 -16
- package/blockstore/index.d.ts.map +0 -1
- package/blockstore/index.js +0 -16
- package/blockstore/index.js.map +0 -1
- package/blockstore/interceptor-gateway.d.ts +0 -29
- package/blockstore/interceptor-gateway.d.ts.map +0 -1
- package/blockstore/interceptor-gateway.js +0 -137
- package/blockstore/interceptor-gateway.js.map +0 -1
- package/blockstore/loader-helpers.d.ts +0 -4
- package/blockstore/loader-helpers.d.ts.map +0 -1
- package/blockstore/loader-helpers.js +0 -16
- package/blockstore/loader-helpers.js.map +0 -1
- package/blockstore/loader.d.ts +0 -45
- package/blockstore/loader.d.ts.map +0 -1
- package/blockstore/loader.js +0 -352
- package/blockstore/loader.js.map +0 -1
- package/blockstore/register-store-protocol.d.ts +0 -22
- package/blockstore/register-store-protocol.d.ts.map +0 -1
- package/blockstore/register-store-protocol.js +0 -114
- package/blockstore/register-store-protocol.js.map +0 -1
- package/blockstore/serde-gateway.d.ts +0 -78
- package/blockstore/serde-gateway.d.ts.map +0 -1
- package/blockstore/serde-gateway.js +0 -2
- package/blockstore/serde-gateway.js.map +0 -1
- package/blockstore/store-factory.d.ts +0 -11
- package/blockstore/store-factory.d.ts.map +0 -1
- package/blockstore/store-factory.js +0 -105
- package/blockstore/store-factory.js.map +0 -1
- package/blockstore/store-remote.d.ts +0 -2
- package/blockstore/store-remote.d.ts.map +0 -1
- package/blockstore/store-remote.js +0 -2
- package/blockstore/store-remote.js.map +0 -1
- package/blockstore/store.d.ts +0 -82
- package/blockstore/store.d.ts.map +0 -1
- package/blockstore/store.js +0 -438
- package/blockstore/store.js.map +0 -1
- package/blockstore/task-manager.d.ts +0 -19
- package/blockstore/task-manager.d.ts.map +0 -1
- package/blockstore/task-manager.js +0 -50
- package/blockstore/task-manager.js.map +0 -1
- package/blockstore/transaction.d.ts +0 -64
- package/blockstore/transaction.d.ts.map +0 -1
- package/blockstore/transaction.js +0 -249
- package/blockstore/transaction.js.map +0 -1
- package/blockstore/types.d.ts +0 -400
- package/blockstore/types.d.ts.map +0 -1
- package/blockstore/types.js +0 -55
- package/blockstore/types.js.map +0 -1
- package/blockstore/uri-interceptor.d.ts +0 -19
- package/blockstore/uri-interceptor.d.ts.map +0 -1
- package/blockstore/uri-interceptor.js +0 -61
- package/blockstore/uri-interceptor.js.map +0 -1
- package/bundle-not-impl.d.ts +0 -2
- package/bundle-not-impl.d.ts.map +0 -1
- package/bundle-not-impl.js +0 -4
- package/bundle-not-impl.js.map +0 -1
- package/cli/main.js +0 -26114
- package/context.d.ts +0 -7
- package/context.d.ts.map +0 -1
- package/context.js +0 -15
- package/context.js.map +0 -1
- package/crdt-clock.d.ts +0 -27
- package/crdt-clock.d.ts.map +0 -1
- package/crdt-clock.js +0 -140
- package/crdt-clock.js.map +0 -1
- package/crdt-helpers.d.ts +0 -16
- package/crdt-helpers.d.ts.map +0 -1
- package/crdt-helpers.js +0 -316
- package/crdt-helpers.js.map +0 -1
- package/crdt.d.ts +0 -34
- package/crdt.d.ts.map +0 -1
- package/crdt.js +0 -131
- package/crdt.js.map +0 -1
- package/database.d.ts +0 -34
- package/database.d.ts.map +0 -1
- package/database.js +0 -121
- package/database.js.map +0 -1
- package/index.d.ts.map +0 -1
- package/indexer-helpers.d.ts +0 -69
- package/indexer-helpers.d.ts.map +0 -1
- package/indexer-helpers.js +0 -135
- package/indexer-helpers.js.map +0 -1
- package/indexer.d.ts +0 -25
- package/indexer.d.ts.map +0 -1
- package/indexer.js +0 -231
- package/indexer.js.map +0 -1
- package/ledger.d.ts +0 -56
- package/ledger.d.ts.map +0 -1
- package/ledger.js +0 -224
- package/ledger.js.map +0 -1
- package/protocols/cloud/http-connection.d.ts +0 -25
- package/protocols/cloud/http-connection.d.ts.map +0 -1
- package/protocols/cloud/http-connection.js +0 -153
- package/protocols/cloud/http-connection.js.map +0 -1
- package/protocols/cloud/index.d.ts +0 -10
- package/protocols/cloud/index.d.ts.map +0 -1
- package/protocols/cloud/index.js +0 -10
- package/protocols/cloud/index.js.map +0 -1
- package/protocols/cloud/msg-raw-connection-base.d.ts +0 -16
- package/protocols/cloud/msg-raw-connection-base.d.ts.map +0 -1
- package/protocols/cloud/msg-raw-connection-base.js +0 -22
- package/protocols/cloud/msg-raw-connection-base.js.map +0 -1
- package/protocols/cloud/msg-types-data.d.ts +0 -36
- package/protocols/cloud/msg-types-data.d.ts.map +0 -1
- package/protocols/cloud/msg-types-data.js +0 -38
- package/protocols/cloud/msg-types-data.js.map +0 -1
- package/protocols/cloud/msg-types-meta.d.ts +0 -41
- package/protocols/cloud/msg-types-meta.d.ts.map +0 -1
- package/protocols/cloud/msg-types-meta.js +0 -98
- package/protocols/cloud/msg-types-meta.js.map +0 -1
- package/protocols/cloud/msg-types-wal.d.ts +0 -33
- package/protocols/cloud/msg-types-wal.d.ts.map +0 -1
- package/protocols/cloud/msg-types-wal.js +0 -38
- package/protocols/cloud/msg-types-wal.js.map +0 -1
- package/protocols/cloud/msg-types.d.ts +0 -279
- package/protocols/cloud/msg-types.d.ts.map +0 -1
- package/protocols/cloud/msg-types.js +0 -278
- package/protocols/cloud/msg-types.js.map +0 -1
- package/protocols/cloud/msger.d.ts +0 -79
- package/protocols/cloud/msger.d.ts.map +0 -1
- package/protocols/cloud/msger.js +0 -198
- package/protocols/cloud/msger.js.map +0 -1
- package/protocols/cloud/ws-connection.d.ts +0 -29
- package/protocols/cloud/ws-connection.d.ts.map +0 -1
- package/protocols/cloud/ws-connection.js +0 -163
- package/protocols/cloud/ws-connection.js.map +0 -1
- package/protocols/index.d.ts +0 -2
- package/protocols/index.d.ts.map +0 -1
- package/protocols/index.js +0 -2
- package/protocols/index.js.map +0 -1
- package/react/img-file.d.ts.map +0 -1
- package/react/img-file.js +0 -58
- package/react/img-file.js.map +0 -1
- package/react/index.d.ts.map +0 -1
- package/react/types.d.ts +0 -43
- package/react/types.d.ts.map +0 -1
- package/react/types.js +0 -2
- package/react/types.js.map +0 -1
- package/react/use-all-docs.d.ts +0 -4
- package/react/use-all-docs.d.ts.map +0 -1
- package/react/use-all-docs.js +0 -19
- package/react/use-all-docs.js.map +0 -1
- package/react/use-changes.d.ts +0 -4
- package/react/use-changes.d.ts.map +0 -1
- package/react/use-changes.js +0 -19
- package/react/use-changes.js.map +0 -1
- package/react/use-document.d.ts +0 -4
- package/react/use-document.d.ts.map +0 -1
- package/react/use-document.js +0 -99
- package/react/use-document.js.map +0 -1
- package/react/use-fireproof.d.ts +0 -6
- package/react/use-fireproof.d.ts.map +0 -1
- package/react/use-fireproof.js +0 -15
- package/react/use-fireproof.js.map +0 -1
- package/react/use-live-query.d.ts +0 -4
- package/react/use-live-query.d.ts.map +0 -1
- package/react/use-live-query.js +0 -38
- package/react/use-live-query.js.map +0 -1
- package/react/utils.d.ts +0 -2
- package/react/utils.d.ts.map +0 -1
- package/react/utils.js +0 -4
- package/react/utils.js.map +0 -1
- package/runtime/files.d.ts +0 -12
- package/runtime/files.d.ts.map +0 -1
- package/runtime/files.js +0 -29
- package/runtime/files.js.map +0 -1
- package/runtime/gateways/cloud/gateway.d.ts +0 -44
- package/runtime/gateways/cloud/gateway.d.ts.map +0 -1
- package/runtime/gateways/cloud/gateway.js +0 -496
- package/runtime/gateways/cloud/gateway.js.map +0 -1
- package/runtime/gateways/def-serde-gateway.d.ts +0 -19
- package/runtime/gateways/def-serde-gateway.d.ts.map +0 -1
- package/runtime/gateways/def-serde-gateway.js +0 -73
- package/runtime/gateways/def-serde-gateway.js.map +0 -1
- package/runtime/gateways/file/deno/deno-filesystem.d.ts +0 -27
- package/runtime/gateways/file/deno/deno-filesystem.d.ts.map +0 -1
- package/runtime/gateways/file/deno/deno-filesystem.js +0 -51
- package/runtime/gateways/file/deno/deno-filesystem.js.map +0 -1
- package/runtime/gateways/file/deno/get-sys-file-system.d.ts +0 -4
- package/runtime/gateways/file/deno/get-sys-file-system.d.ts.map +0 -1
- package/runtime/gateways/file/deno/get-sys-file-system.js +0 -11
- package/runtime/gateways/file/deno/get-sys-file-system.js.map +0 -1
- package/runtime/gateways/file/deno/index.d.ts +0 -2
- package/runtime/gateways/file/deno/index.d.ts.map +0 -1
- package/runtime/gateways/file/deno/index.js +0 -2
- package/runtime/gateways/file/deno/index.js.map +0 -1
- package/runtime/gateways/file/gateway-impl.d.ts +0 -18
- package/runtime/gateways/file/gateway-impl.d.ts.map +0 -1
- package/runtime/gateways/file/gateway-impl.js +0 -121
- package/runtime/gateways/file/gateway-impl.js.map +0 -1
- package/runtime/gateways/file/index.d.ts +0 -3
- package/runtime/gateways/file/index.d.ts.map +0 -1
- package/runtime/gateways/file/index.js +0 -3
- package/runtime/gateways/file/index.js.map +0 -1
- package/runtime/gateways/file/key-bag-file.d.ts +0 -19
- package/runtime/gateways/file/key-bag-file.d.ts.map +0 -1
- package/runtime/gateways/file/key-bag-file.js +0 -40
- package/runtime/gateways/file/key-bag-file.js.map +0 -1
- package/runtime/gateways/file/node/get-sys-file-system.d.ts +0 -4
- package/runtime/gateways/file/node/get-sys-file-system.d.ts.map +0 -1
- package/runtime/gateways/file/node/get-sys-file-system.js +0 -11
- package/runtime/gateways/file/node/get-sys-file-system.js.map +0 -1
- package/runtime/gateways/file/node/index.d.ts +0 -2
- package/runtime/gateways/file/node/index.d.ts.map +0 -1
- package/runtime/gateways/file/node/index.js +0 -2
- package/runtime/gateways/file/node/index.js.map +0 -1
- package/runtime/gateways/file/node/node-filesystem.d.ts +0 -32
- package/runtime/gateways/file/node/node-filesystem.d.ts.map +0 -1
- package/runtime/gateways/file/node/node-filesystem.js +0 -37
- package/runtime/gateways/file/node/node-filesystem.js.map +0 -1
- package/runtime/gateways/file/node/to-array-buffer.d.ts +0 -2
- package/runtime/gateways/file/node/to-array-buffer.d.ts.map +0 -1
- package/runtime/gateways/file/node/to-array-buffer.js +0 -12
- package/runtime/gateways/file/node/to-array-buffer.js.map +0 -1
- package/runtime/gateways/file/sys-file-system-factory.d.ts +0 -4
- package/runtime/gateways/file/sys-file-system-factory.d.ts.map +0 -1
- package/runtime/gateways/file/sys-file-system-factory.js +0 -13
- package/runtime/gateways/file/sys-file-system-factory.js.map +0 -1
- package/runtime/gateways/file/utils.d.ts +0 -5
- package/runtime/gateways/file/utils.d.ts.map +0 -1
- package/runtime/gateways/file/utils.js +0 -27
- package/runtime/gateways/file/utils.js.map +0 -1
- package/runtime/gateways/file/version.d.ts +0 -2
- package/runtime/gateways/file/version.d.ts.map +0 -1
- package/runtime/gateways/file/version.js +0 -2
- package/runtime/gateways/file/version.js.map +0 -1
- package/runtime/gateways/fp-envelope-serialize.d.ts +0 -50
- package/runtime/gateways/fp-envelope-serialize.d.ts.map +0 -1
- package/runtime/gateways/fp-envelope-serialize.js +0 -141
- package/runtime/gateways/fp-envelope-serialize.js.map +0 -1
- package/runtime/gateways/index.d.ts +0 -6
- package/runtime/gateways/index.d.ts.map +0 -1
- package/runtime/gateways/index.js +0 -6
- package/runtime/gateways/index.js.map +0 -1
- package/runtime/gateways/indexeddb/gateway-impl.d.ts +0 -22
- package/runtime/gateways/indexeddb/gateway-impl.d.ts.map +0 -1
- package/runtime/gateways/indexeddb/gateway-impl.js +0 -147
- package/runtime/gateways/indexeddb/gateway-impl.js.map +0 -1
- package/runtime/gateways/indexeddb/index.d.ts +0 -6
- package/runtime/gateways/indexeddb/index.d.ts.map +0 -1
- package/runtime/gateways/indexeddb/index.js +0 -6
- package/runtime/gateways/indexeddb/index.js.map +0 -1
- package/runtime/gateways/indexeddb/key-bag-indexeddb.d.ts +0 -15
- package/runtime/gateways/indexeddb/key-bag-indexeddb.d.ts.map +0 -1
- package/runtime/gateways/indexeddb/key-bag-indexeddb.js +0 -42
- package/runtime/gateways/indexeddb/key-bag-indexeddb.js.map +0 -1
- package/runtime/gateways/indexeddb-version.d.ts +0 -2
- package/runtime/gateways/indexeddb-version.d.ts.map +0 -1
- package/runtime/gateways/indexeddb-version.js +0 -2
- package/runtime/gateways/indexeddb-version.js.map +0 -1
- package/runtime/gateways/memory/gateway.d.ts +0 -18
- package/runtime/gateways/memory/gateway.d.ts.map +0 -1
- package/runtime/gateways/memory/gateway.js +0 -58
- package/runtime/gateways/memory/gateway.js.map +0 -1
- package/runtime/gateways/memory/version.d.ts +0 -2
- package/runtime/gateways/memory/version.d.ts.map +0 -1
- package/runtime/gateways/memory/version.js +0 -2
- package/runtime/gateways/memory/version.js.map +0 -1
- package/runtime/index.d.ts +0 -13
- package/runtime/index.d.ts.map +0 -1
- package/runtime/index.js +0 -13
- package/runtime/index.js.map +0 -1
- package/runtime/key-bag-memory.d.ts +0 -12
- package/runtime/key-bag-memory.d.ts.map +0 -1
- package/runtime/key-bag-memory.js +0 -23
- package/runtime/key-bag-memory.js.map +0 -1
- package/runtime/key-bag.d.ts +0 -85
- package/runtime/key-bag.d.ts.map +0 -1
- package/runtime/key-bag.js +0 -415
- package/runtime/key-bag.js.map +0 -1
- package/runtime/keyed-crypto.d.ts +0 -19
- package/runtime/keyed-crypto.d.ts.map +0 -1
- package/runtime/keyed-crypto.js +0 -192
- package/runtime/keyed-crypto.js.map +0 -1
- package/runtime/memory-sys-container.d.ts +0 -2
- package/runtime/memory-sys-container.d.ts.map +0 -1
- package/runtime/memory-sys-container.js +0 -2
- package/runtime/memory-sys-container.js.map +0 -1
- package/runtime/meta-key-hack.d.ts +0 -42
- package/runtime/meta-key-hack.d.ts.map +0 -1
- package/runtime/meta-key-hack.js +0 -201
- package/runtime/meta-key-hack.js.map +0 -1
- package/runtime/sts-service/index.d.ts +0 -40
- package/runtime/sts-service/index.d.ts.map +0 -1
- package/runtime/sts-service/index.js +0 -102
- package/runtime/sts-service/index.js.map +0 -1
- package/runtime/sys-container.d.ts +0 -2
- package/runtime/sys-container.d.ts.map +0 -1
- package/runtime/sys-container.js +0 -2
- package/runtime/sys-container.js.map +0 -1
- package/runtime/wait-pr-multiformats/block.d.ts +0 -47
- package/runtime/wait-pr-multiformats/block.d.ts.map +0 -1
- package/runtime/wait-pr-multiformats/block.js +0 -64
- package/runtime/wait-pr-multiformats/block.js.map +0 -1
- package/runtime/wait-pr-multiformats/codec-interface.d.ts +0 -29
- package/runtime/wait-pr-multiformats/codec-interface.d.ts.map +0 -1
- package/runtime/wait-pr-multiformats/codec-interface.js +0 -2
- package/runtime/wait-pr-multiformats/codec-interface.js.map +0 -1
- package/runtime/wait-pr-multiformats/index.d.ts +0 -3
- package/runtime/wait-pr-multiformats/index.d.ts.map +0 -1
- package/runtime/wait-pr-multiformats/index.js +0 -3
- package/runtime/wait-pr-multiformats/index.js.map +0 -1
- package/types.d.ts +0 -427
- package/types.d.ts.map +0 -1
- package/types.js +0 -54
- package/types.js.map +0 -1
- package/use-fireproof/index.d.ts +0 -3
- package/use-fireproof/index.d.ts.map +0 -1
- package/use-fireproof/index.js +0 -3
- package/use-fireproof/index.js.map +0 -1
- package/utils.d.ts +0 -36
- package/utils.d.ts.map +0 -1
- package/utils.js +0 -379
- package/utils.js.map +0 -1
- package/version.d.ts +0 -2
- package/version.d.ts.map +0 -1
- package/version.js +0 -4
- package/version.js.map +0 -1
- package/write-queue.d.ts +0 -9
- package/write-queue.d.ts.map +0 -1
- package/write-queue.js +0 -70
- package/write-queue.js.map +0 -1
package/react/index.d.ts
CHANGED
@@ -1,4 +1,336 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
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
|
-
|
2
|
-
|
3
|
-
|
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
|
package/react/index.js.map
CHANGED
@@ -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":"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","names":["useMemo","useCallback","useEffect","useMemo","useState","useCallback","useEffect","useMemo","useState","useCallback","useEffect","useMemo","useState","useMemo","useState","useEffect"]}
|