@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
@@ -0,0 +1 @@
|
|
1
|
+
{"inputs":{"src/react/utils.ts":{"bytes":156,"imports":[],"format":"esm"},"src/react/use-document.ts":{"bytes":3958,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"src/react/utils.ts","kind":"import-statement","original":"./utils.js"}],"format":"esm"},"src/react/use-live-query.ts":{"bytes":1760,"imports":[{"path":"react","kind":"import-statement","external":true}],"format":"esm"},"src/react/use-all-docs.ts":{"bytes":934,"imports":[{"path":"react","kind":"import-statement","external":true}],"format":"esm"},"src/react/use-changes.ts":{"bytes":974,"imports":[{"path":"react","kind":"import-statement","external":true}],"format":"esm"},"src/react/use-fireproof.ts":{"bytes":2505,"imports":[{"path":"@fireproof/core","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"src/react/use-document.ts","kind":"import-statement","original":"./use-document.js"},{"path":"src/react/use-live-query.ts","kind":"import-statement","original":"./use-live-query.js"},{"path":"src/react/use-all-docs.ts","kind":"import-statement","original":"./use-all-docs.js"},{"path":"src/react/use-changes.ts","kind":"import-statement","original":"./use-changes.js"}],"format":"esm"},"src/react/types.ts":{"bytes":2407,"imports":[],"format":"esm"},"src/react/img-file.ts":{"bytes":2248,"imports":[{"path":"@fireproof/core","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true}],"format":"esm"},"src/react/index.ts":{"bytes":124,"imports":[{"path":"src/react/use-fireproof.ts","kind":"import-statement","original":"./use-fireproof.js"},{"path":"src/react/types.ts","kind":"import-statement","original":"./types.js"},{"path":"src/react/img-file.ts","kind":"import-statement","original":"./img-file.js"}],"format":"esm"}},"outputs":{"dist/fireproof-core/react/index.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":19682},"dist/fireproof-core/react/index.cjs":{"imports":[{"path":"@fireproof/core","kind":"require-call","external":true},{"path":"react","kind":"require-call","external":true},{"path":"react","kind":"require-call","external":true},{"path":"react","kind":"require-call","external":true},{"path":"react","kind":"require-call","external":true},{"path":"react","kind":"require-call","external":true},{"path":"react","kind":"require-call","external":true}],"exports":[],"entryPoint":"src/react/index.ts","inputs":{"src/react/index.ts":{"bytesInOutput":197},"src/react/use-fireproof.ts":{"bytesInOutput":687},"src/react/use-document.ts":{"bytesInOutput":3458},"src/react/utils.ts":{"bytesInOutput":107},"src/react/use-live-query.ts":{"bytesInOutput":1129},"src/react/use-all-docs.ts":{"bytesInOutput":657},"src/react/use-changes.ts":{"bytesInOutput":679},"src/react/img-file.ts":{"bytesInOutput":1499}},"bytes":10094}}}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"inputs":{"src/react/utils.ts":{"bytes":156,"imports":[],"format":"esm"},"src/react/use-document.ts":{"bytes":3958,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"src/react/utils.ts","kind":"import-statement","original":"./utils.js"}],"format":"esm"},"src/react/use-live-query.ts":{"bytes":1760,"imports":[{"path":"react","kind":"import-statement","external":true}],"format":"esm"},"src/react/use-all-docs.ts":{"bytes":934,"imports":[{"path":"react","kind":"import-statement","external":true}],"format":"esm"},"src/react/use-changes.ts":{"bytes":974,"imports":[{"path":"react","kind":"import-statement","external":true}],"format":"esm"},"src/react/use-fireproof.ts":{"bytes":2505,"imports":[{"path":"@fireproof/core","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"src/react/use-document.ts","kind":"import-statement","original":"./use-document.js"},{"path":"src/react/use-live-query.ts","kind":"import-statement","original":"./use-live-query.js"},{"path":"src/react/use-all-docs.ts","kind":"import-statement","original":"./use-all-docs.js"},{"path":"src/react/use-changes.ts","kind":"import-statement","original":"./use-changes.js"}],"format":"esm"},"src/react/types.ts":{"bytes":2407,"imports":[],"format":"esm"},"src/react/img-file.ts":{"bytes":2248,"imports":[{"path":"@fireproof/core","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true}],"format":"esm"},"src/react/index.ts":{"bytes":124,"imports":[{"path":"src/react/use-fireproof.ts","kind":"import-statement","original":"./use-fireproof.js"},{"path":"src/react/types.ts","kind":"import-statement","original":"./types.js"},{"path":"src/react/img-file.ts","kind":"import-statement","original":"./img-file.js"}],"format":"esm"}},"outputs":{"dist/fireproof-core/react/index.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":19722},"dist/fireproof-core/react/index.js":{"imports":[{"path":"@fireproof/core","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true}],"exports":["FireproofCtx","ImgFile","useFireproof"],"entryPoint":"src/react/index.ts","inputs":{"src/react/use-fireproof.ts":{"bytesInOutput":658},"src/react/use-document.ts":{"bytesInOutput":3262},"src/react/utils.ts":{"bytesInOutput":107},"src/react/use-live-query.ts":{"bytesInOutput":1123},"src/react/use-all-docs.ts":{"bytesInOutput":669},"src/react/use-changes.ts":{"bytesInOutput":691},"src/react/index.ts":{"bytesInOutput":0},"src/react/img-file.ts":{"bytesInOutput":1476}},"bytes":8301}}}
|
@@ -2,7 +2,7 @@ import * as codec from "@ipld/dag-cbor";
|
|
2
2
|
import { sha256 as hasher } from "multiformats/hashes/sha2";
|
3
3
|
import { BlockView } from "multiformats";
|
4
4
|
import { CID } from "multiformats/cid";
|
5
|
-
import { MemoryBlockstore } from "@
|
5
|
+
import { MemoryBlockstore } from "@web3-storage/pail/block";
|
6
6
|
import { CRDTMeta, CarTransaction, IndexTransactionMeta, SuperThis, bs, ensureSuperThis, rt } from "@fireproof/core";
|
7
7
|
import { simpleBlockOpts } from "../helpers.js";
|
8
8
|
|
@@ -19,8 +19,7 @@ import { mockLoader, noopUrl } from "../helpers.js";
|
|
19
19
|
describe("CarStore", function () {
|
20
20
|
let store: bs.CarStore;
|
21
21
|
const sthis = ensureSuperThis();
|
22
|
-
|
23
|
-
let loader: bs.Loadable;
|
22
|
+
const loader = mockLoader(sthis);
|
24
23
|
|
25
24
|
afterEach(async () => {
|
26
25
|
await store.close();
|
@@ -28,7 +27,6 @@ describe("CarStore", function () {
|
|
28
27
|
});
|
29
28
|
|
30
29
|
beforeEach(async () => {
|
31
|
-
loader = mockLoader(sthis);
|
32
30
|
await sthis.start();
|
33
31
|
const at = await bs.createAttachedStores(noopUrl("test"), loader);
|
34
32
|
store = at.stores.car;
|
@@ -53,9 +51,9 @@ describe("CarStore", function () {
|
|
53
51
|
describe("CarStore with a saved car", function () {
|
54
52
|
let store: bs.CarStore;
|
55
53
|
let car: bs.AnyBlock;
|
56
|
-
let loader: bs.Loadable;
|
57
54
|
|
58
55
|
const sthis = ensureSuperThis();
|
56
|
+
const loader = mockLoader(sthis);
|
59
57
|
|
60
58
|
afterEach(async () => {
|
61
59
|
await store.close();
|
@@ -63,7 +61,6 @@ describe("CarStore with a saved car", function () {
|
|
63
61
|
});
|
64
62
|
|
65
63
|
beforeEach(async () => {
|
66
|
-
loader = mockLoader(sthis);
|
67
64
|
await sthis.start();
|
68
65
|
|
69
66
|
const at = await bs.createAttachedStores(noopUrl("test2"), loader);
|
@@ -98,7 +95,7 @@ describe("CarStore with a saved car", function () {
|
|
98
95
|
describe("MetaStore", function () {
|
99
96
|
let store: bs.MetaStore;
|
100
97
|
const sthis = ensureSuperThis();
|
101
|
-
|
98
|
+
const loader = mockLoader(sthis);
|
102
99
|
|
103
100
|
afterEach(async () => {
|
104
101
|
await store.close();
|
@@ -106,7 +103,6 @@ describe("MetaStore", function () {
|
|
106
103
|
});
|
107
104
|
|
108
105
|
beforeEach(async () => {
|
109
|
-
loader = mockLoader(sthis);
|
110
106
|
await sthis.start();
|
111
107
|
const at = await bs.createAttachedStores(noopUrl("test"), loader);
|
112
108
|
store = at.stores.meta;
|
@@ -139,7 +135,7 @@ describe("MetaStore with a saved header", function () {
|
|
139
135
|
let store: bs.MetaStore;
|
140
136
|
let cid: CID;
|
141
137
|
const sthis = ensureSuperThis();
|
142
|
-
|
138
|
+
const loader = mockLoader(sthis);
|
143
139
|
|
144
140
|
afterEach(async () => {
|
145
141
|
await store.close();
|
@@ -147,7 +143,6 @@ describe("MetaStore with a saved header", function () {
|
|
147
143
|
});
|
148
144
|
|
149
145
|
beforeEach(async () => {
|
150
|
-
loader = mockLoader(sthis);
|
151
146
|
await sthis.start();
|
152
147
|
const at = await bs.createAttachedStores(noopUrl("test3-meta"), loader);
|
153
148
|
store = at.stores.meta;
|
@@ -176,7 +176,7 @@ describe("activate store", () => {
|
|
176
176
|
|
177
177
|
it("activate by store", async () => {
|
178
178
|
expect(attach.activate(secondAttached.stores).active.car.url().toString()).toBe(
|
179
|
-
"memory://second?
|
179
|
+
"memory://second?name=second&store=car&storekey=%40second-data%40&suffix=.car&version=v0.19-memory",
|
180
180
|
);
|
181
181
|
expect(attach.activate(firstAttached.stores).local().active.car.url().toString()).toBe(
|
182
182
|
"memory://first?name=first&store=car&storekey=%40first-data%40&suffix=.car&version=v0.19-memory",
|
@@ -188,10 +188,10 @@ describe("activate store", () => {
|
|
188
188
|
|
189
189
|
it("activate by store", async () => {
|
190
190
|
expect(attach.activate("memory://second").active.car.url().toString()).toBe(
|
191
|
-
"memory://second?
|
191
|
+
"memory://second?name=second&store=car&storekey=%40second-data%40&suffix=.car&version=v0.19-memory",
|
192
192
|
);
|
193
193
|
expect(attach.activate("memory://second").remotes()[0].active.car.url().toString()).toEqual(
|
194
|
-
"memory://second?
|
194
|
+
"memory://second?name=second&store=car&storekey=%40second-data%40&suffix=.car&version=v0.19-memory",
|
195
195
|
);
|
196
196
|
expect(attach.activate("memory://first?store=meta").active.car.url().toString()).toBe(
|
197
197
|
"memory://first?name=first&store=car&storekey=%40first-data%40&suffix=.car&version=v0.19-memory",
|
@@ -0,0 +1,91 @@
|
|
1
|
+
import { renderHook, waitFor } from "@testing-library/react";
|
2
|
+
import { describe, expect, it } from "vitest";
|
3
|
+
import { fireproof, useFireproof } from "use-fireproof";
|
4
|
+
import type { Database, LiveQueryResult } from "use-fireproof";
|
5
|
+
|
6
|
+
// Test timeout value for CI
|
7
|
+
const TEST_TIMEOUT = 45000;
|
8
|
+
|
9
|
+
describe("HOOK: useFireproof database switching", () => {
|
10
|
+
const db1Name = "db1";
|
11
|
+
const db2Name = "db2";
|
12
|
+
let db1: Database, db2: Database;
|
13
|
+
|
14
|
+
beforeEach(async () => {
|
15
|
+
// Setup two databases with different data
|
16
|
+
db1 = fireproof(db1Name);
|
17
|
+
db2 = fireproof(db2Name);
|
18
|
+
|
19
|
+
// Add data to db1
|
20
|
+
await db1.put({ foo: "db1-data" });
|
21
|
+
|
22
|
+
// Add different data to db2
|
23
|
+
await db2.put({ foo: "db2-data" });
|
24
|
+
});
|
25
|
+
|
26
|
+
it(
|
27
|
+
"should switch databases and update query results when database name changes",
|
28
|
+
async () => {
|
29
|
+
let query: LiveQueryResult<{ foo: string }, string>;
|
30
|
+
let currentDbName: string;
|
31
|
+
let currentDb: Database;
|
32
|
+
|
33
|
+
// Initial render with db1
|
34
|
+
const { rerender } = renderHook(
|
35
|
+
({ dbName }) => {
|
36
|
+
const result = useFireproof(dbName);
|
37
|
+
currentDbName = result.database.name;
|
38
|
+
currentDb = result.database;
|
39
|
+
query = result.useLiveQuery<{ foo: string }>("foo");
|
40
|
+
return result;
|
41
|
+
},
|
42
|
+
{ initialProps: { dbName: db1Name } },
|
43
|
+
);
|
44
|
+
|
45
|
+
// Verify initial state with db1
|
46
|
+
await waitFor(() => {
|
47
|
+
expect(currentDbName).toBe(db1Name);
|
48
|
+
expect(currentDb.name).toBe(db1Name);
|
49
|
+
expect(query.rows.map((row) => row.doc?.foo)).toEqual(["db1-data"]);
|
50
|
+
});
|
51
|
+
|
52
|
+
// Switch to db2
|
53
|
+
rerender({ dbName: db2Name });
|
54
|
+
|
55
|
+
// Verify state with db2
|
56
|
+
await waitFor(() => {
|
57
|
+
expect(currentDbName).toBe(db2Name);
|
58
|
+
expect(currentDb.name).toBe(db2Name);
|
59
|
+
expect(query.rows.map((row) => row.doc?.foo)).toEqual(["db2-data"]);
|
60
|
+
});
|
61
|
+
|
62
|
+
// Switch back to db1
|
63
|
+
rerender({ dbName: db1Name });
|
64
|
+
|
65
|
+
// Verify state is back to db1
|
66
|
+
await waitFor(() => {
|
67
|
+
expect(currentDbName).toBe(db1Name);
|
68
|
+
expect(currentDb.name).toBe(db1Name);
|
69
|
+
expect(query.rows.map((row) => row.doc?.foo)).toEqual(["db1-data"]);
|
70
|
+
});
|
71
|
+
|
72
|
+
// Test that changes to the new database are reflected
|
73
|
+
await db2.put({ foo: "db2-updated" });
|
74
|
+
rerender({ dbName: db2Name });
|
75
|
+
|
76
|
+
await waitFor(() => {
|
77
|
+
expect(currentDbName).toBe(db2Name);
|
78
|
+
expect(currentDb.name).toBe(db2Name);
|
79
|
+
expect(query.rows.map((row) => row.doc?.foo)).toEqual(["db2-data", "db2-updated"]);
|
80
|
+
});
|
81
|
+
},
|
82
|
+
TEST_TIMEOUT,
|
83
|
+
);
|
84
|
+
|
85
|
+
afterEach(async () => {
|
86
|
+
await db1.close();
|
87
|
+
await db1.destroy();
|
88
|
+
await db2.close();
|
89
|
+
await db2.destroy();
|
90
|
+
});
|
91
|
+
});
|
@@ -0,0 +1,145 @@
|
|
1
|
+
import { describe, it, expect, vi } from "vitest";
|
2
|
+
import { render, waitFor, fireEvent, act } from "@testing-library/react";
|
3
|
+
import { useState, useEffect, createElement } from "react";
|
4
|
+
import { useFireproof } from "../../src/react/use-fireproof.js";
|
5
|
+
|
6
|
+
// Extend HTMLElement for TypeScript compatibility
|
7
|
+
declare global {
|
8
|
+
interface HTMLElement {
|
9
|
+
querySelector(selectors: string): HTMLElement | null;
|
10
|
+
getAttribute(name: string): string | null;
|
11
|
+
textContent: string | null;
|
12
|
+
click(): void;
|
13
|
+
}
|
14
|
+
}
|
15
|
+
|
16
|
+
// Test component that triggers state updates and verifies database stability
|
17
|
+
function TestComponent() {
|
18
|
+
const { database } = useFireproof("test-stability-db");
|
19
|
+
const initialDatabaseRef = database;
|
20
|
+
|
21
|
+
const [counter, setCounter] = useState(0);
|
22
|
+
|
23
|
+
// Verify that the database reference remains stable across renders
|
24
|
+
if (counter > 0 && initialDatabaseRef !== database) {
|
25
|
+
throw new Error("Database reference changed between renders!");
|
26
|
+
}
|
27
|
+
|
28
|
+
return createElement("div", {}, [
|
29
|
+
createElement("div", { "data-testid": "db-name", key: "db-name" }, database.name),
|
30
|
+
createElement("div", { "data-testid": "counter", key: "counter" }, String(counter)),
|
31
|
+
createElement(
|
32
|
+
"button",
|
33
|
+
{
|
34
|
+
"data-testid": "increment",
|
35
|
+
key: "increment",
|
36
|
+
onClick: () => setCounter((c) => c + 1),
|
37
|
+
},
|
38
|
+
"Increment",
|
39
|
+
),
|
40
|
+
]);
|
41
|
+
}
|
42
|
+
|
43
|
+
// Test timeout value for CI
|
44
|
+
const TEST_TIMEOUT = 60000; // 1 minute per test
|
45
|
+
|
46
|
+
describe("HOOK: useFireproof stability", () => {
|
47
|
+
it(
|
48
|
+
"database instance remains stable across renders",
|
49
|
+
async () => {
|
50
|
+
// Mock console.error to catch any React errors
|
51
|
+
const consoleErrorMock = vi.spyOn(console, "error").mockImplementation(vi.fn());
|
52
|
+
|
53
|
+
const { findByTestId } = render(createElement(TestComponent, {}));
|
54
|
+
|
55
|
+
// Get initial state
|
56
|
+
const dbNameEl = await findByTestId("db-name" as const);
|
57
|
+
const counterEl = await findByTestId("counter" as const);
|
58
|
+
|
59
|
+
// Verify initial state
|
60
|
+
expect(dbNameEl.textContent).toBe("test-stability-db");
|
61
|
+
expect(counterEl.textContent).toBe("0");
|
62
|
+
|
63
|
+
// Trigger a re-render by updating state
|
64
|
+
const incrementButton = await findByTestId("increment" as const);
|
65
|
+
await act(async () => {
|
66
|
+
incrementButton.click();
|
67
|
+
});
|
68
|
+
|
69
|
+
// Verify state changed but no errors occurred
|
70
|
+
expect(counterEl.textContent).toBe("1");
|
71
|
+
|
72
|
+
// There should be no errors logged from React about database reference changing
|
73
|
+
expect(consoleErrorMock).not.toHaveBeenCalledWith(expect.stringContaining("Database reference changed between renders"));
|
74
|
+
|
75
|
+
// Perform multiple render cycles to ensure stability
|
76
|
+
for (let i = 0; i < 5; i++) {
|
77
|
+
await act(async () => {
|
78
|
+
incrementButton.click();
|
79
|
+
});
|
80
|
+
}
|
81
|
+
|
82
|
+
// Verify no errors occurred during multiple renders
|
83
|
+
expect(consoleErrorMock).not.toHaveBeenCalledWith(expect.stringContaining("Database reference changed between renders"));
|
84
|
+
|
85
|
+
// Restore console
|
86
|
+
consoleErrorMock.mockRestore();
|
87
|
+
},
|
88
|
+
TEST_TIMEOUT,
|
89
|
+
);
|
90
|
+
|
91
|
+
it(
|
92
|
+
"input events do not cause infinite render loops",
|
93
|
+
async () => {
|
94
|
+
// This test is specifically designed to catch the issue reported in v0.20.0
|
95
|
+
|
96
|
+
function InputTestComponent() {
|
97
|
+
// We still create the database to ensure no infinite render loops occur
|
98
|
+
// But we don't need to use any of its features directly in this test
|
99
|
+
useFireproof("test-input-db");
|
100
|
+
const [inputValue, setInputValue] = useState("");
|
101
|
+
const [renderCount, setRenderCount] = useState(0);
|
102
|
+
|
103
|
+
// Track render count
|
104
|
+
useEffect(() => {
|
105
|
+
setRenderCount((c) => c + 1);
|
106
|
+
}, []);
|
107
|
+
|
108
|
+
return createElement("div", {}, [
|
109
|
+
createElement("input", {
|
110
|
+
type: "text",
|
111
|
+
"data-testid": "input",
|
112
|
+
key: "input",
|
113
|
+
value: inputValue,
|
114
|
+
onChange: (e: { target: { value: string } }) => {
|
115
|
+
setInputValue(e.target.value);
|
116
|
+
},
|
117
|
+
}),
|
118
|
+
createElement("div", { "data-testid": "render-count", key: "render-count" }, String(renderCount)),
|
119
|
+
]);
|
120
|
+
}
|
121
|
+
|
122
|
+
// Instead of using createRoot, use the standard render method
|
123
|
+
const { getByTestId } = render(createElement(InputTestComponent));
|
124
|
+
|
125
|
+
// Get the input element
|
126
|
+
const input = getByTestId("input");
|
127
|
+
|
128
|
+
// Simulate typing in the input field - this would trigger the bug in v0.20.0
|
129
|
+
await waitFor(() => {
|
130
|
+
fireEvent.change(input, { target: { value: "test" } });
|
131
|
+
});
|
132
|
+
|
133
|
+
// Wait a bit to ensure no infinite loop occurs
|
134
|
+
await new Promise((resolve) => setTimeout(resolve, 1000));
|
135
|
+
|
136
|
+
// Verify the render count hasn't exploded (if it were an infinite loop, the test would timeout)
|
137
|
+
const renderCount = getByTestId("render-count");
|
138
|
+
|
139
|
+
// The exact number isn't important, but it should be a small number
|
140
|
+
// If we're in an infinite loop, the test would have timed out before reaching here
|
141
|
+
expect(parseInt(renderCount.textContent || "0", 10)).toBeLessThan(10);
|
142
|
+
},
|
143
|
+
TEST_TIMEOUT,
|
144
|
+
);
|
145
|
+
});
|
@@ -0,0 +1,132 @@
|
|
1
|
+
<!doctype html>
|
2
|
+
<html lang="en">
|
3
|
+
<head>
|
4
|
+
<meta charset="UTF-8" />
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
6
|
+
<title>Fireproof Uploads</title>
|
7
|
+
<script src="./fireproof.iife.js?cache=94"></script>
|
8
|
+
<script type="text/javascript">
|
9
|
+
function testApp() {
|
10
|
+
const { fireproof, connect } = Fireproof;
|
11
|
+
let dbName;
|
12
|
+
let db;
|
13
|
+
let cx;
|
14
|
+
|
15
|
+
let dbUnsubscribe = false;
|
16
|
+
|
17
|
+
function setupDb(name) {
|
18
|
+
if (dbUnsubscribe) {
|
19
|
+
dbUnsubscribe();
|
20
|
+
}
|
21
|
+
dbName = name;
|
22
|
+
db = fireproof(name);
|
23
|
+
window.db = db;
|
24
|
+
|
25
|
+
cx = db.connect("jchris+files-30@fireproof.storage", "todo-test");
|
26
|
+
window.cx = cx;
|
27
|
+
|
28
|
+
dbUnsubscribe = db.subscribe(redraw);
|
29
|
+
return db;
|
30
|
+
}
|
31
|
+
|
32
|
+
let doing;
|
33
|
+
const redraw = async () => {
|
34
|
+
if (doing) {
|
35
|
+
return doing;
|
36
|
+
}
|
37
|
+
doing = draw().finally(() => (doing = null));
|
38
|
+
return doing;
|
39
|
+
};
|
40
|
+
|
41
|
+
const draw = async () => {
|
42
|
+
const result = await db.query("_id", { descending: true, limit: 10 });
|
43
|
+
document.querySelector("ul").innerHTML = "";
|
44
|
+
for (const row of result.rows) {
|
45
|
+
const doc = row.doc;
|
46
|
+
if (doc._publicFiles) {
|
47
|
+
const li = document.querySelector("ul").appendChild(document.createElement("li"));
|
48
|
+
li.appendChild(document.createElement("span")).innerText = row.key;
|
49
|
+
li.appendChild(document.createElement("br"));
|
50
|
+
for (const file of Object.keys(doc._publicFiles)) {
|
51
|
+
(async () => {
|
52
|
+
const meta = doc._publicFiles[file];
|
53
|
+
if (meta.file && /image/.test(meta.type)) {
|
54
|
+
const src = URL.createObjectURL(await meta.file());
|
55
|
+
const img = document.createElement("img");
|
56
|
+
img.src = src;
|
57
|
+
img.height = 100;
|
58
|
+
img.onload = () => {
|
59
|
+
URL.revokeObjectURL(img.src);
|
60
|
+
};
|
61
|
+
|
62
|
+
console.log("url", meta.url);
|
63
|
+
li.appendChild(img);
|
64
|
+
}
|
65
|
+
})();
|
66
|
+
}
|
67
|
+
}
|
68
|
+
}
|
69
|
+
};
|
70
|
+
|
71
|
+
async function changeList(e) {
|
72
|
+
e.preventDefault();
|
73
|
+
const input = document.querySelector("#list");
|
74
|
+
dbName = input.value;
|
75
|
+
history.pushState(null, "", location.pathname + "?db=" + encodeURIComponent(dbName));
|
76
|
+
setupDb(dbName);
|
77
|
+
|
78
|
+
redraw();
|
79
|
+
}
|
80
|
+
window.changeList = changeList;
|
81
|
+
|
82
|
+
async function openDashboard(e) {
|
83
|
+
db.openDashboard();
|
84
|
+
}
|
85
|
+
window.openDashboard = openDashboard;
|
86
|
+
|
87
|
+
function handleFiles() {
|
88
|
+
const fileList = this.files;
|
89
|
+
const doc = {
|
90
|
+
_publicFiles: {},
|
91
|
+
};
|
92
|
+
for (const file of fileList) {
|
93
|
+
doc._publicFiles[file.name] = file;
|
94
|
+
}
|
95
|
+
const ok = db.put(doc);
|
96
|
+
}
|
97
|
+
|
98
|
+
async function initialize() {
|
99
|
+
ps = new URLSearchParams(location.search);
|
100
|
+
const listQ = ps.get("db");
|
101
|
+
setupDb(listQ || "hello-world");
|
102
|
+
const input = document.querySelector("#list");
|
103
|
+
input.value = dbName;
|
104
|
+
|
105
|
+
const inputElement = document.getElementById("files-up");
|
106
|
+
inputElement.addEventListener("change", handleFiles, false);
|
107
|
+
db.subscribe(draw);
|
108
|
+
draw();
|
109
|
+
}
|
110
|
+
|
111
|
+
window.onload = initialize;
|
112
|
+
}
|
113
|
+
testApp();
|
114
|
+
</script>
|
115
|
+
</head>
|
116
|
+
|
117
|
+
<body>
|
118
|
+
List:
|
119
|
+
<input title="gallery" type="text" name="list" id="list" />
|
120
|
+
<button onclick="changeList(event)">Change Gallery</button>
|
121
|
+
<button onclick="openDashboard(event)">🔥 Import to Dashboard</button>
|
122
|
+
<h3>Files</h3>
|
123
|
+
<p>
|
124
|
+
Data is stored locally and encrypted before upload to S3. This is a demo so the encryption key is not managed securely. Read
|
125
|
+
more about <a href="https://use-fireproof.com/docs/ledger-api/replication">Fireproof replication options.</a> You can also see
|
126
|
+
a demo without images but <a href="https://fireproof.storage/s3up-test.html">with compaction and refresh buttons.</a>
|
127
|
+
</p>
|
128
|
+
<label for="files-up"><strong>Drop files:</strong></label>
|
129
|
+
<input accept="image/*" title="save to Fireproof" type="file" id="files-up" multiple />
|
130
|
+
<ul></ul>
|
131
|
+
</body>
|
132
|
+
</html>
|
@@ -0,0 +1,42 @@
|
|
1
|
+
<!doctype html>
|
2
|
+
<html lang="en">
|
3
|
+
<head>
|
4
|
+
<meta charset="UTF-8" />
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
6
|
+
<title>Fireproof Test</title>
|
7
|
+
<script src="./fireproof.iife.js"></script>
|
8
|
+
<script type="text/javascript">
|
9
|
+
function testApp() {
|
10
|
+
const db = Fireproof.fireproof("iife-test", { persistIndexes: true });
|
11
|
+
|
12
|
+
const draw = async () => {
|
13
|
+
const result = await db.query("sort", { includeDocs: true });
|
14
|
+
document.querySelector("ul").innerHTML = "";
|
15
|
+
for (const row of result.rows) {
|
16
|
+
document.querySelector("ul").appendChild(document.createElement("li")).innerText = JSON.stringify(row.doc);
|
17
|
+
}
|
18
|
+
};
|
19
|
+
|
20
|
+
async function initialize() {
|
21
|
+
console.log("initialize");
|
22
|
+
db.subscribe(draw);
|
23
|
+
draw();
|
24
|
+
}
|
25
|
+
|
26
|
+
async function onButtonClick(e) {
|
27
|
+
e.preventDefault();
|
28
|
+
console.log("put");
|
29
|
+
const ok = await db.put({ sort: Math.random(), test: "test" });
|
30
|
+
console.log("ok", ok.id);
|
31
|
+
}
|
32
|
+
window.onButtonClick = onButtonClick;
|
33
|
+
window.onload = initialize;
|
34
|
+
}
|
35
|
+
testApp();
|
36
|
+
</script>
|
37
|
+
</head>
|
38
|
+
<body>
|
39
|
+
<button onclick="onButtonClick(event)">Click to Run</button>
|
40
|
+
<ul></ul>
|
41
|
+
</body>
|
42
|
+
</html>
|