@fireproof/core 0.19.0-dev-use-fix → 0.19.0-dev-global
Sign up to get free protection for your applications and to get access to all the features.
- package/index.global.js +24688 -0
- package/index.global.js.map +1 -0
- package/metafile-iife.json +1 -0
- package/package.json +1 -1
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../../node_modules/.pnpm/uuidv7@1.0.1/node_modules/uuidv7/dist/index.js","../../node_modules/.pnpm/@adviser+cement@0.2.2/node_modules/@adviser/cement/chunk-ZYFWDQGV.js","../../node_modules/.pnpm/@adviser+cement@0.2.2/node_modules/src/sys_abstraction.ts","../../node_modules/.pnpm/@adviser+cement@0.2.2/node_modules/src/time.ts","../../node_modules/.pnpm/@adviser+cement@0.2.2/node_modules/src/sys_env.ts","../../node_modules/.pnpm/@adviser+cement@0.2.2/node_modules/src/base_sys_abstraction.ts","../../node_modules/.pnpm/@adviser+cement@0.2.2/node_modules/src/web/web_sys_abstraction.ts","../../node_modules/.pnpm/@adviser+cement@0.2.2/node_modules/src/logger.ts","../../node_modules/.pnpm/@adviser+cement@0.2.2/node_modules/src/logger_impl.ts","../../node_modules/.pnpm/@adviser+cement@0.2.2/node_modules/src/test/log_collector.ts","../../node_modules/.pnpm/@adviser+cement@0.2.2/node_modules/src/test/mock_logger.ts","../../node_modules/.pnpm/@adviser+cement@0.2.2/node_modules/src/result.ts","../../node_modules/.pnpm/@adviser+cement@0.2.2/node_modules/src/option.ts","../../node_modules/.pnpm/@adviser+cement@0.2.2/node_modules/src/future.ts","../../node_modules/.pnpm/@adviser+cement@0.2.2/node_modules/src/resolve-once.ts","../../node_modules/.pnpm/multiformats@13.1.1/node_modules/multiformats/src/bytes.ts","../../node_modules/.pnpm/multiformats@13.1.1/node_modules/multiformats/src/vendor/base-x.js","../../node_modules/.pnpm/multiformats@13.1.1/node_modules/multiformats/src/bases/base.ts","../../node_modules/.pnpm/multiformats@13.1.1/node_modules/multiformats/src/bases/base32.ts","../../node_modules/.pnpm/multiformats@13.1.1/node_modules/multiformats/src/bases/base58.ts","../../node_modules/.pnpm/multiformats@13.1.1/node_modules/multiformats/src/vendor/varint.js","../../node_modules/.pnpm/multiformats@13.1.1/node_modules/multiformats/src/varint.ts","../../node_modules/.pnpm/multiformats@13.1.1/node_modules/multiformats/src/hashes/digest.ts","../../node_modules/.pnpm/multiformats@13.1.1/node_modules/multiformats/src/link/interface.ts","../../node_modules/.pnpm/multiformats@13.1.1/node_modules/multiformats/src/cid.ts","../../node_modules/.pnpm/multiformats@13.1.1/node_modules/multiformats/src/hashes/hasher.ts","../../node_modules/.pnpm/multiformats@13.1.1/node_modules/multiformats/src/bases/interface.ts","../../node_modules/.pnpm/multiformats@13.1.1/node_modules/multiformats/src/hashes/interface.ts","../../node_modules/.pnpm/multiformats@13.1.1/node_modules/multiformats/dist/src/codecs/interface.js","../../node_modules/.pnpm/multiformats@13.1.1/node_modules/multiformats/dist/src/block/interface.js","../../node_modules/.pnpm/multiformats@13.1.1/node_modules/multiformats/src/interface.ts","../../node_modules/.pnpm/multiformats@13.1.1/node_modules/multiformats/src/index.ts","../../node_modules/.pnpm/multiformats@13.1.1/node_modules/multiformats/src/block.ts","../../node_modules/.pnpm/multiformats@13.1.1/node_modules/multiformats/src/hashes/sha2-browser.ts","../../node_modules/.pnpm/cborg@4.1.3/node_modules/cborg/lib/is.js","../../node_modules/.pnpm/cborg@4.1.3/node_modules/cborg/lib/token.js","../../node_modules/.pnpm/cborg@4.1.3/node_modules/cborg/lib/byte-utils.js","../../node_modules/.pnpm/cborg@4.1.3/node_modules/cborg/lib/bl.js","../../node_modules/.pnpm/cborg@4.1.3/node_modules/cborg/lib/common.js","../../node_modules/.pnpm/cborg@4.1.3/node_modules/cborg/lib/0uint.js","../../node_modules/.pnpm/cborg@4.1.3/node_modules/cborg/lib/1negint.js","../../node_modules/.pnpm/cborg@4.1.3/node_modules/cborg/lib/2bytes.js","../../node_modules/.pnpm/cborg@4.1.3/node_modules/cborg/lib/3string.js","../../node_modules/.pnpm/cborg@4.1.3/node_modules/cborg/lib/4array.js","../../node_modules/.pnpm/cborg@4.1.3/node_modules/cborg/lib/5map.js","../../node_modules/.pnpm/cborg@4.1.3/node_modules/cborg/lib/6tag.js","../../node_modules/.pnpm/cborg@4.1.3/node_modules/cborg/lib/7float.js","../../node_modules/.pnpm/cborg@4.1.3/node_modules/cborg/lib/jump.js","../../node_modules/.pnpm/cborg@4.1.3/node_modules/cborg/lib/encode.js","../../node_modules/.pnpm/cborg@4.1.3/node_modules/cborg/lib/decode.js","../../node_modules/.pnpm/cborg@4.1.3/node_modules/cborg/cborg.js","../../node_modules/.pnpm/@ipld+dag-cbor@9.2.1/node_modules/@ipld/dag-cbor/src/index.js","../../src/types.ts","../../node_modules/.pnpm/std-env@3.7.0/node_modules/std-env/dist/index.mjs","../../src/runtime/node-sys-container.ts","../../src/runtime/sys-container.ts","../../src/runtime/data-dir.ts","../../src/runtime/store-file-utils.ts","../../src/runtime/store-sql/types.ts","../../src/runtime/store-sql/ensurer.ts","../../src/runtime/store-sql/index.ts","../../src/runtime/crypto.ts","../../node_modules/.pnpm/@ipld+unixfs@3.0.0/node_modules/@ipld/unixfs/src/api.js","../../node_modules/.pnpm/@ipld+unixfs@3.0.0/node_modules/@ipld/unixfs/src/file/api.js","../../node_modules/.pnpm/@ipld+dag-pb@4.0.8/node_modules/@ipld/dag-pb/src/pb-decode.js","../../node_modules/.pnpm/@ipld+dag-pb@4.0.8/node_modules/@ipld/dag-pb/src/pb-encode.js","../../node_modules/.pnpm/@ipld+dag-pb@4.0.8/node_modules/@ipld/dag-pb/src/util.js","../../node_modules/.pnpm/@ipld+dag-pb@4.0.8/node_modules/@ipld/dag-pb/src/index.js","../../node_modules/.pnpm/@protobufjs+aspromise@1.1.2/node_modules/@protobufjs/aspromise/index.js","../../node_modules/.pnpm/@protobufjs+base64@1.1.2/node_modules/@protobufjs/base64/index.js","../../node_modules/.pnpm/@protobufjs+eventemitter@1.1.0/node_modules/@protobufjs/eventemitter/index.js","../../node_modules/.pnpm/@protobufjs+float@1.0.2/node_modules/@protobufjs/float/index.js","../../node_modules/.pnpm/@protobufjs+inquire@1.1.0/node_modules/@protobufjs/inquire/index.js","../../node_modules/.pnpm/@protobufjs+utf8@1.1.0/node_modules/@protobufjs/utf8/index.js","../../node_modules/.pnpm/@protobufjs+pool@1.1.0/node_modules/@protobufjs/pool/index.js","../../node_modules/.pnpm/protobufjs@7.2.5/node_modules/protobufjs/src/util/longbits.js","../../node_modules/.pnpm/protobufjs@7.2.5/node_modules/protobufjs/src/util/minimal.js","../../node_modules/.pnpm/protobufjs@7.2.5/node_modules/protobufjs/src/writer.js","../../node_modules/.pnpm/protobufjs@7.2.5/node_modules/protobufjs/src/writer_buffer.js","../../node_modules/.pnpm/protobufjs@7.2.5/node_modules/protobufjs/src/reader.js","../../node_modules/.pnpm/protobufjs@7.2.5/node_modules/protobufjs/src/reader_buffer.js","../../node_modules/.pnpm/protobufjs@7.2.5/node_modules/protobufjs/src/rpc/service.js","../../node_modules/.pnpm/protobufjs@7.2.5/node_modules/protobufjs/src/rpc.js","../../node_modules/.pnpm/protobufjs@7.2.5/node_modules/protobufjs/src/roots.js","../../node_modules/.pnpm/protobufjs@7.2.5/node_modules/protobufjs/src/index-minimal.js","../../node_modules/.pnpm/protobufjs@7.2.5/node_modules/protobufjs/minimal.js","../../node_modules/.pnpm/@ipld+unixfs@3.0.0/node_modules/@ipld/unixfs/gen/unixfs.js","../../node_modules/.pnpm/@ipld+unixfs@3.0.0/node_modules/@ipld/unixfs/src/unixfs.js","../../node_modules/.pnpm/@ipld+unixfs@3.0.0/node_modules/@ipld/unixfs/src/codec.js","../../node_modules/.pnpm/actor@2.3.1/node_modules/actor/src/task.js","../../node_modules/.pnpm/actor@2.3.1/node_modules/actor/src/lib.js","../../node_modules/.pnpm/@ipld+unixfs@3.0.0/node_modules/@ipld/unixfs/src/file/chunker/indexed.js","../../node_modules/.pnpm/@ipld+unixfs@3.0.0/node_modules/@ipld/unixfs/src/file/chunker/buffer.js","../../node_modules/.pnpm/@ipld+unixfs@3.0.0/node_modules/@ipld/unixfs/src/file/chunker/api.js","../../node_modules/.pnpm/@ipld+unixfs@3.0.0/node_modules/@ipld/unixfs/src/writer/util.js","../../node_modules/.pnpm/@ipld+unixfs@3.0.0/node_modules/@ipld/unixfs/src/file/chunker.js","../../node_modules/.pnpm/@ipld+unixfs@3.0.0/node_modules/@ipld/unixfs/src/file/layout/queue/api.js","../../node_modules/.pnpm/@ipld+unixfs@3.0.0/node_modules/@ipld/unixfs/src/file/layout/queue.js","../../node_modules/.pnpm/@ipld+unixfs@3.0.0/node_modules/@ipld/unixfs/src/file/writer.js","../../node_modules/.pnpm/@ipld+unixfs@3.0.0/node_modules/@ipld/unixfs/src/file/chunker/fixed.js","../../node_modules/.pnpm/@ipld+unixfs@3.0.0/node_modules/@ipld/unixfs/src/file/layout/balanced.js","../../node_modules/.pnpm/@ipld+unixfs@3.0.0/node_modules/@ipld/unixfs/src/file.js","../../node_modules/.pnpm/@ipld+unixfs@3.0.0/node_modules/@ipld/unixfs/src/directory/api.js","../../node_modules/.pnpm/@ipld+unixfs@3.0.0/node_modules/@ipld/unixfs/src/directory.js","../../node_modules/.pnpm/@perma+map@1.0.3/node_modules/@perma/map/src/api.js","../../node_modules/.pnpm/@perma+map@1.0.3/node_modules/@perma/map/src/bitfield/api.js","../../node_modules/.pnpm/@perma+map@1.0.3/node_modules/@perma/map/src/bitfield/Uint32.js","../../node_modules/.pnpm/@perma+map@1.0.3/node_modules/@perma/map/src/path/api.js","../../node_modules/.pnpm/murmurhash3js-revisited@3.0.0/node_modules/murmurhash3js-revisited/lib/murmurHash3js.js","../../node_modules/.pnpm/murmurhash3js-revisited@3.0.0/node_modules/murmurhash3js-revisited/index.js","../../node_modules/.pnpm/@perma+map@1.0.3/node_modules/@perma/map/src/path/Uint32.js","../../node_modules/.pnpm/@perma+map@1.0.3/node_modules/@perma/map/src/node.js","../../node_modules/.pnpm/@multiformats+murmur3@2.1.8/node_modules/@multiformats/murmur3/src/index.js","../../node_modules/.pnpm/@perma+map@1.0.3/node_modules/@perma/map/src/path/Uint8Array.js","../../node_modules/.pnpm/@perma+map@1.0.3/node_modules/@perma/map/src/bitfield/Uint8Array.js","../../node_modules/.pnpm/@perma+map@1.0.3/node_modules/@perma/map/src/lib.js","../../node_modules/.pnpm/@perma+map@1.0.3/node_modules/@perma/map/src/path/InfiniteUint8Array.js","../../node_modules/.pnpm/@perma+map@1.0.3/node_modules/@perma/map/src/unixfs.js","../../node_modules/.pnpm/@ipld+unixfs@3.0.0/node_modules/@ipld/unixfs/src/sharded-directory.js","../../node_modules/.pnpm/@ipld+unixfs@3.0.0/node_modules/@ipld/unixfs/src/lib.js","../../node_modules/.pnpm/multiformats@13.1.1/node_modules/multiformats/src/codecs/raw.ts","../../node_modules/.pnpm/err-code@3.0.1/node_modules/err-code/index.js","../../node_modules/.pnpm/it-last@3.0.4/node_modules/it-last/src/index.ts","../../node_modules/.pnpm/cborg@4.1.3/node_modules/cborg/lib/json/encode.js","../../node_modules/.pnpm/cborg@4.1.3/node_modules/cborg/lib/json/decode.js","../../node_modules/.pnpm/cborg@4.1.3/node_modules/cborg/lib/json/json.js","../../node_modules/.pnpm/multiformats@13.1.1/node_modules/multiformats/src/bases/base64.ts","../../node_modules/.pnpm/@ipld+dag-json@10.2.2/node_modules/@ipld/dag-json/src/index.js","../../node_modules/.pnpm/multiformats@13.1.1/node_modules/multiformats/src/codecs/json.ts","../../node_modules/.pnpm/multiformats@13.1.1/node_modules/multiformats/src/hashes/identity.ts","../../node_modules/.pnpm/ipfs-unixfs-exporter@13.5.0/node_modules/ipfs-unixfs-exporter/src/utils/resolve-object-path.ts","../../node_modules/.pnpm/ipfs-unixfs-exporter@13.5.0/node_modules/ipfs-unixfs-exporter/src/resolvers/dag-cbor.ts","../../node_modules/.pnpm/ipfs-unixfs-exporter@13.5.0/node_modules/ipfs-unixfs-exporter/src/resolvers/dag-json.ts","../../node_modules/.pnpm/progress-events@1.0.0/node_modules/progress-events/src/index.ts","../../node_modules/.pnpm/ipfs-unixfs-exporter@13.5.0/node_modules/ipfs-unixfs-exporter/src/utils/extract-data-from-block.ts","../../node_modules/.pnpm/ipfs-unixfs-exporter@13.5.0/node_modules/ipfs-unixfs-exporter/src/utils/validate-offset-and-length.ts","../../node_modules/.pnpm/ipfs-unixfs-exporter@13.5.0/node_modules/ipfs-unixfs-exporter/src/resolvers/identity.ts","../../node_modules/.pnpm/ipfs-unixfs-exporter@13.5.0/node_modules/ipfs-unixfs-exporter/src/resolvers/json.ts","../../node_modules/.pnpm/ipfs-unixfs-exporter@13.5.0/node_modules/ipfs-unixfs-exporter/src/resolvers/raw.ts","../../node_modules/.pnpm/protons-runtime@5.2.2/node_modules/protons-runtime/src/utils/float.ts","../../node_modules/.pnpm/protons-runtime@5.2.2/node_modules/protons-runtime/src/utils/longbits.ts","../../node_modules/.pnpm/protons-runtime@5.2.2/node_modules/protons-runtime/src/utils/utf8.ts","../../node_modules/.pnpm/protons-runtime@5.2.2/node_modules/protons-runtime/src/utils/reader.ts","../../node_modules/.pnpm/protons-runtime@5.2.2/node_modules/protons-runtime/src/decode.ts","../../node_modules/.pnpm/uint8arrays@5.0.3/node_modules/uint8arrays/src/alloc.ts","../../node_modules/.pnpm/multiformats@13.1.1/node_modules/multiformats/src/bases/base10.ts","../../node_modules/.pnpm/multiformats@13.1.1/node_modules/multiformats/src/bases/base16.ts","../../node_modules/.pnpm/multiformats@13.1.1/node_modules/multiformats/src/bases/base2.ts","../../node_modules/.pnpm/multiformats@13.1.1/node_modules/multiformats/src/bases/base256emoji.ts","../../node_modules/.pnpm/multiformats@13.1.1/node_modules/multiformats/src/bases/base36.ts","../../node_modules/.pnpm/multiformats@13.1.1/node_modules/multiformats/src/bases/base8.ts","../../node_modules/.pnpm/multiformats@13.1.1/node_modules/multiformats/src/bases/identity.ts","../../node_modules/.pnpm/multiformats@13.1.1/node_modules/multiformats/src/basics.ts","../../node_modules/.pnpm/uint8arrays@5.0.3/node_modules/uint8arrays/src/util/bases.ts","../../node_modules/.pnpm/uint8arrays@5.0.3/node_modules/uint8arrays/src/from-string.ts","../../node_modules/.pnpm/protons-runtime@5.2.2/node_modules/protons-runtime/src/utils/pool.ts","../../node_modules/.pnpm/protons-runtime@5.2.2/node_modules/protons-runtime/src/utils/writer.ts","../../node_modules/.pnpm/protons-runtime@5.2.2/node_modules/protons-runtime/src/encode.ts","../../node_modules/.pnpm/protons-runtime@5.2.2/node_modules/protons-runtime/src/codec.ts","../../node_modules/.pnpm/protons-runtime@5.2.2/node_modules/protons-runtime/src/codecs/enum.ts","../../node_modules/.pnpm/protons-runtime@5.2.2/node_modules/protons-runtime/src/codecs/message.ts","../../node_modules/.pnpm/protons-runtime@5.2.2/node_modules/protons-runtime/src/index.ts","../../node_modules/.pnpm/ipfs-unixfs@11.1.2/node_modules/ipfs-unixfs/src/unixfs.ts","../../node_modules/.pnpm/ipfs-unixfs@11.1.2/node_modules/ipfs-unixfs/src/index.ts","../../node_modules/.pnpm/sparse-array@1.3.2/node_modules/sparse-array/index.js","../../node_modules/.pnpm/uint8arrays@4.0.10/node_modules/uint8arrays/src/util/as-uint8array.ts","../../node_modules/.pnpm/multiformats@12.1.3/node_modules/multiformats/vendor/base-x.js","../../node_modules/.pnpm/multiformats@12.1.3/node_modules/multiformats/src/bytes.js","../../node_modules/.pnpm/multiformats@12.1.3/node_modules/multiformats/src/bases/base.js","../../node_modules/.pnpm/multiformats@12.1.3/node_modules/multiformats/src/bases/base10.js","../../node_modules/.pnpm/multiformats@12.1.3/node_modules/multiformats/src/bases/base16.js","../../node_modules/.pnpm/multiformats@12.1.3/node_modules/multiformats/src/bases/base2.js","../../node_modules/.pnpm/multiformats@12.1.3/node_modules/multiformats/src/bases/base256emoji.js","../../node_modules/.pnpm/multiformats@12.1.3/node_modules/multiformats/src/bases/base32.js","../../node_modules/.pnpm/multiformats@12.1.3/node_modules/multiformats/src/bases/base36.js","../../node_modules/.pnpm/multiformats@12.1.3/node_modules/multiformats/src/bases/base58.js","../../node_modules/.pnpm/multiformats@12.1.3/node_modules/multiformats/src/bases/base64.js","../../node_modules/.pnpm/multiformats@12.1.3/node_modules/multiformats/src/bases/base8.js","../../node_modules/.pnpm/multiformats@12.1.3/node_modules/multiformats/src/bases/identity.js","../../node_modules/.pnpm/multiformats@12.1.3/node_modules/multiformats/src/codecs/json.js","../../node_modules/.pnpm/multiformats@12.1.3/node_modules/multiformats/src/codecs/raw.js","../../node_modules/.pnpm/multiformats@12.1.3/node_modules/multiformats/vendor/varint.js","../../node_modules/.pnpm/multiformats@12.1.3/node_modules/multiformats/src/varint.js","../../node_modules/.pnpm/multiformats@12.1.3/node_modules/multiformats/src/hashes/digest.js","../../node_modules/.pnpm/multiformats@12.1.3/node_modules/multiformats/src/hashes/identity.js","../../node_modules/.pnpm/multiformats@12.1.3/node_modules/multiformats/src/hashes/hasher.js","../../node_modules/.pnpm/multiformats@12.1.3/node_modules/multiformats/src/hashes/sha2-browser.js","../../node_modules/.pnpm/multiformats@12.1.3/node_modules/multiformats/src/link/interface.js","../../node_modules/.pnpm/multiformats@12.1.3/node_modules/multiformats/src/cid.js","../../node_modules/.pnpm/multiformats@12.1.3/node_modules/multiformats/src/interface.js","../../node_modules/.pnpm/multiformats@12.1.3/node_modules/multiformats/src/index.js","../../node_modules/.pnpm/multiformats@12.1.3/node_modules/multiformats/src/basics.js","../../node_modules/.pnpm/uint8arrays@4.0.10/node_modules/uint8arrays/src/alloc.ts","../../node_modules/.pnpm/uint8arrays@4.0.10/node_modules/uint8arrays/src/util/bases.ts","../../node_modules/.pnpm/uint8arrays@4.0.10/node_modules/uint8arrays/src/from-string.ts","../../node_modules/.pnpm/hamt-sharding@3.0.2/node_modules/hamt-sharding/src/bucket.ts","../../node_modules/.pnpm/hamt-sharding@3.0.2/node_modules/hamt-sharding/src/consumable-buffer.ts","../../node_modules/.pnpm/uint8arrays@4.0.10/node_modules/uint8arrays/src/concat.ts","../../node_modules/.pnpm/hamt-sharding@3.0.2/node_modules/hamt-sharding/src/consumable-hash.ts","../../node_modules/.pnpm/hamt-sharding@3.0.2/node_modules/hamt-sharding/src/index.ts","../../node_modules/.pnpm/ipfs-unixfs-exporter@13.5.0/node_modules/ipfs-unixfs-exporter/src/utils/find-cid-in-shard.ts","../../node_modules/.pnpm/it-peekable@3.0.3/node_modules/it-peekable/src/index.ts","../../node_modules/.pnpm/it-filter@3.0.4/node_modules/it-filter/src/index.ts","../../node_modules/.pnpm/it-map@3.0.5/node_modules/it-map/src/index.ts","../../node_modules/.pnpm/p-defer@4.0.0/node_modules/p-defer/index.js","../../node_modules/.pnpm/it-parallel@3.0.6/node_modules/it-parallel/src/index.ts","../../node_modules/.pnpm/it-pushable@3.2.3/node_modules/it-pushable/src/fifo.ts","../../node_modules/.pnpm/it-pushable@3.2.3/node_modules/it-pushable/src/index.ts","../../node_modules/.pnpm/it-merge@3.0.3/node_modules/it-merge/src/index.ts","../../node_modules/.pnpm/it-pipe@3.0.1/node_modules/it-pipe/src/index.ts","../../node_modules/.pnpm/ipfs-unixfs-exporter@13.5.0/node_modules/ipfs-unixfs-exporter/src/resolvers/unixfs-v1/content/directory.ts","../../node_modules/.pnpm/eventemitter3@5.0.1/node_modules/eventemitter3/index.js","../../node_modules/.pnpm/eventemitter3@5.0.1/node_modules/eventemitter3/index.mjs","../../node_modules/.pnpm/p-timeout@6.1.2/node_modules/p-timeout/index.js","../../node_modules/.pnpm/p-queue@8.0.1/node_modules/p-queue/dist/lower-bound.js","../../node_modules/.pnpm/p-queue@8.0.1/node_modules/p-queue/dist/priority-queue.js","../../node_modules/.pnpm/p-queue@8.0.1/node_modules/p-queue/dist/index.js","../../node_modules/.pnpm/ipfs-unixfs-exporter@13.5.0/node_modules/ipfs-unixfs-exporter/src/resolvers/unixfs-v1/content/file.ts","../../node_modules/.pnpm/ipfs-unixfs-exporter@13.5.0/node_modules/ipfs-unixfs-exporter/src/resolvers/unixfs-v1/content/hamt-sharded-directory.ts","../../node_modules/.pnpm/ipfs-unixfs-exporter@13.5.0/node_modules/ipfs-unixfs-exporter/src/resolvers/unixfs-v1/index.ts","../../node_modules/.pnpm/ipfs-unixfs-exporter@13.5.0/node_modules/ipfs-unixfs-exporter/src/resolvers/index.ts","../../node_modules/.pnpm/ipfs-unixfs-exporter@13.5.0/node_modules/ipfs-unixfs-exporter/src/index.ts","../../src/runtime/files.ts","../../src/runtime/store-file-version.ts","../../src/runtime/store-indexdb-version.ts","../../src/runtime/store-sql/v0.19-sqlite/version.ts","../../src/runtime/index.ts","../../src/utils.ts","../../src/blockstore/gateway.ts","../../node_modules/.pnpm/idb@8.0.0/node_modules/idb/build/index.js","../../src/runtime/store-indexdb.ts","../../node_modules/.pnpm/varint@6.0.0/node_modules/varint/encode.js","../../node_modules/.pnpm/varint@6.0.0/node_modules/varint/decode.js","../../node_modules/.pnpm/varint@6.0.0/node_modules/varint/length.js","../../node_modules/.pnpm/varint@6.0.0/node_modules/varint/index.js","../../src/runtime/store-file-not-impl.ts","../../src/runtime/store-sql/not-impl.ts","../../node_modules/.pnpm/charwise@3.0.1/node_modules/charwise/codec/number.js","../../node_modules/.pnpm/charwise@3.0.1/node_modules/charwise/codec/object.js","../../node_modules/.pnpm/charwise@3.0.1/node_modules/charwise/index.js","../../src/index.ts","../../src/database.ts","../../src/write-queue.ts","../../src/crdt.ts","../../src/crdt-helpers.ts","../../node_modules/.pnpm/multiformats@13.1.1/node_modules/multiformats/src/link.ts","../../node_modules/.pnpm/@web3-storage+pail@0.6.0/node_modules/@web3-storage/pail/src/clock/index.js","../../node_modules/.pnpm/@web3-storage+pail@0.6.0/node_modules/@web3-storage/pail/src/shard.js","../../node_modules/.pnpm/@web3-storage+pail@0.6.0/node_modules/@web3-storage/pail/src/index.js","../../node_modules/.pnpm/@web3-storage+pail@0.6.0/node_modules/@web3-storage/pail/src/block.js","../../node_modules/.pnpm/@web3-storage+pail@0.6.0/node_modules/@web3-storage/pail/src/batch/shard.js","../../node_modules/.pnpm/@web3-storage+pail@0.6.0/node_modules/@web3-storage/pail/src/batch/index.js","../../node_modules/.pnpm/@web3-storage+pail@0.6.0/node_modules/@web3-storage/pail/src/crdt/index.js","../../node_modules/.pnpm/@web3-storage+pail@0.6.0/node_modules/@web3-storage/pail/src/crdt/batch/index.js","../../src/blockstore/index.ts","../../src/blockstore/connection-base.ts","../../src/blockstore/task-manager.ts","../../src/blockstore/connect-rest.ts","../../src/blockstore/store-factory.ts","../../node_modules/.pnpm/yocto-queue@1.0.0/node_modules/yocto-queue/index.js","../../node_modules/.pnpm/p-limit@5.0.0/node_modules/p-limit/async-hooks-stub.js","../../node_modules/.pnpm/p-limit@5.0.0/node_modules/p-limit/index.js","../../src/blockstore/store.ts","../../node_modules/.pnpm/@ipld+car@5.3.2/node_modules/@ipld/car/src/buffer-decoder.js","../../node_modules/.pnpm/@ipld+car@5.3.2/node_modules/@ipld/car/src/decoder-common.js","../../node_modules/.pnpm/@ipld+car@5.3.2/node_modules/@ipld/car/src/header-validator.js","../../node_modules/.pnpm/@ipld+car@5.3.2/node_modules/@ipld/car/src/buffer-writer.js","../../node_modules/.pnpm/cborg@4.1.3/node_modules/cborg/lib/length.js","../../node_modules/.pnpm/@ipld+car@5.3.2/node_modules/@ipld/car/src/indexed-reader.js","../../node_modules/.pnpm/@ipld+car@5.3.2/node_modules/@ipld/car/src/decoder.js","../../node_modules/.pnpm/@ipld+car@5.3.2/node_modules/@ipld/car/src/reader-browser.js","../../node_modules/.pnpm/@ipld+car@5.3.2/node_modules/@ipld/car/src/writer-browser.js","../../node_modules/.pnpm/@ipld+car@5.3.2/node_modules/@ipld/car/src/encoder.js","../../src/blockstore/loader.ts","../../src/blockstore/types.ts","../../src/blockstore/loader-helpers.ts","../../src/blockstore/encrypt-helpers.ts","../../node_modules/.pnpm/prolly-trees@1.0.4/node_modules/prolly-trees/esm/src/utils.js","../../node_modules/.pnpm/prolly-trees@1.0.4/node_modules/prolly-trees/esm/src/cache.js","../../node_modules/.pnpm/prolly-trees@1.0.4/node_modules/prolly-trees/esm/src/base.js","../../node_modules/.pnpm/prolly-trees@1.0.4/node_modules/prolly-trees/esm/src/cid-set.js","../../src/blockstore/encrypt-codec.ts","../../src/blockstore/transaction.ts","../../src/blockstore/commit-queue.ts","../../src/indexer.ts","../../src/indexer-helpers.ts","../../node_modules/.pnpm/prolly-trees@1.0.4/node_modules/prolly-trees/esm/src/map.js","../../node_modules/.pnpm/prolly-trees@1.0.4/node_modules/prolly-trees/esm/src/db-index.js","../../src/crdt-clock.ts","../../src/apply-head-queue.ts","../../src/version.ts"],"sourcesContent":["/**\n * uuidv7: A JavaScript implementation of UUID version 7\n *\n * @license Apache-2.0\n * @copyright 2021-2024 LiosK\n * @packageDocumentation\n */\nconst DIGITS = \"0123456789abcdef\";\n/** Represents a UUID as a 16-byte byte array. */\nexport class UUID {\n /** @param bytes - The 16-byte byte array representation. */\n constructor(bytes) {\n this.bytes = bytes;\n }\n /**\n * Creates an object from the internal representation, a 16-byte byte array\n * containing the binary UUID representation in the big-endian byte order.\n *\n * This method does NOT shallow-copy the argument, and thus the created object\n * holds the reference to the underlying buffer.\n *\n * @throws TypeError if the length of the argument is not 16.\n */\n static ofInner(bytes) {\n if (bytes.length !== 16) {\n throw new TypeError(\"not 128-bit length\");\n }\n else {\n return new UUID(bytes);\n }\n }\n /**\n * Builds a byte array from UUIDv7 field values.\n *\n * @param unixTsMs - A 48-bit `unix_ts_ms` field value.\n * @param randA - A 12-bit `rand_a` field value.\n * @param randBHi - The higher 30 bits of 62-bit `rand_b` field value.\n * @param randBLo - The lower 32 bits of 62-bit `rand_b` field value.\n * @throws RangeError if any field value is out of the specified range.\n */\n static fromFieldsV7(unixTsMs, randA, randBHi, randBLo) {\n if (!Number.isInteger(unixTsMs) ||\n !Number.isInteger(randA) ||\n !Number.isInteger(randBHi) ||\n !Number.isInteger(randBLo) ||\n unixTsMs < 0 ||\n randA < 0 ||\n randBHi < 0 ||\n randBLo < 0 ||\n unixTsMs > 281474976710655 ||\n randA > 0xfff ||\n randBHi > 1073741823 ||\n randBLo > 4294967295) {\n throw new RangeError(\"invalid field value\");\n }\n const bytes = new Uint8Array(16);\n bytes[0] = unixTsMs / 2 ** 40;\n bytes[1] = unixTsMs / 2 ** 32;\n bytes[2] = unixTsMs / 2 ** 24;\n bytes[3] = unixTsMs / 2 ** 16;\n bytes[4] = unixTsMs / 2 ** 8;\n bytes[5] = unixTsMs;\n bytes[6] = 0x70 | (randA >>> 8);\n bytes[7] = randA;\n bytes[8] = 0x80 | (randBHi >>> 24);\n bytes[9] = randBHi >>> 16;\n bytes[10] = randBHi >>> 8;\n bytes[11] = randBHi;\n bytes[12] = randBLo >>> 24;\n bytes[13] = randBLo >>> 16;\n bytes[14] = randBLo >>> 8;\n bytes[15] = randBLo;\n return new UUID(bytes);\n }\n /**\n * Builds a byte array from a string representation.\n *\n * This method accepts the following formats:\n *\n * - 32-digit hexadecimal format without hyphens: `0189dcd553117d408db09496a2eef37b`\n * - 8-4-4-4-12 hyphenated format: `0189dcd5-5311-7d40-8db0-9496a2eef37b`\n * - Hyphenated format with surrounding braces: `{0189dcd5-5311-7d40-8db0-9496a2eef37b}`\n * - RFC 9562 URN format: `urn:uuid:0189dcd5-5311-7d40-8db0-9496a2eef37b`\n *\n * Leading and trailing whitespaces represents an error.\n *\n * @throws SyntaxError if the argument could not parse as a valid UUID string.\n */\n static parse(uuid) {\n var _a, _b, _c, _d;\n let hex = undefined;\n switch (uuid.length) {\n case 32:\n hex = (_a = /^[0-9a-f]{32}$/i.exec(uuid)) === null || _a === void 0 ? void 0 : _a[0];\n break;\n case 36:\n hex =\n (_b = /^([0-9a-f]{8})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{12})$/i\n .exec(uuid)) === null || _b === void 0 ? void 0 : _b.slice(1, 6).join(\"\");\n break;\n case 38:\n hex =\n (_c = /^\\{([0-9a-f]{8})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{12})\\}$/i\n .exec(uuid)) === null || _c === void 0 ? void 0 : _c.slice(1, 6).join(\"\");\n break;\n case 45:\n hex =\n (_d = /^urn:uuid:([0-9a-f]{8})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{12})$/i\n .exec(uuid)) === null || _d === void 0 ? void 0 : _d.slice(1, 6).join(\"\");\n break;\n default:\n break;\n }\n if (hex) {\n const inner = new Uint8Array(16);\n for (let i = 0; i < 16; i += 4) {\n const n = parseInt(hex.substring(2 * i, 2 * i + 8), 16);\n inner[i + 0] = n >>> 24;\n inner[i + 1] = n >>> 16;\n inner[i + 2] = n >>> 8;\n inner[i + 3] = n;\n }\n return new UUID(inner);\n }\n else {\n throw new SyntaxError(\"could not parse UUID string\");\n }\n }\n /**\n * @returns The 8-4-4-4-12 canonical hexadecimal string representation\n * (`0189dcd5-5311-7d40-8db0-9496a2eef37b`).\n */\n toString() {\n let text = \"\";\n for (let i = 0; i < this.bytes.length; i++) {\n text += DIGITS.charAt(this.bytes[i] >>> 4);\n text += DIGITS.charAt(this.bytes[i] & 0xf);\n if (i === 3 || i === 5 || i === 7 || i === 9) {\n text += \"-\";\n }\n }\n return text;\n }\n /**\n * @returns The 32-digit hexadecimal representation without hyphens\n * (`0189dcd553117d408db09496a2eef37b`).\n */\n toHex() {\n let text = \"\";\n for (let i = 0; i < this.bytes.length; i++) {\n text += DIGITS.charAt(this.bytes[i] >>> 4);\n text += DIGITS.charAt(this.bytes[i] & 0xf);\n }\n return text;\n }\n /** @returns The 8-4-4-4-12 canonical hexadecimal string representation. */\n toJSON() {\n return this.toString();\n }\n /**\n * Reports the variant field value of the UUID or, if appropriate, \"NIL\" or\n * \"MAX\".\n *\n * For convenience, this method reports \"NIL\" or \"MAX\" if `this` represents\n * the Nil or Max UUID, although the Nil and Max UUIDs are technically\n * subsumed under the variants `0b0` and `0b111`, respectively.\n */\n getVariant() {\n const n = this.bytes[8] >>> 4;\n if (n < 0) {\n throw new Error(\"unreachable\");\n }\n else if (n <= 0b0111) {\n return this.bytes.every((e) => e === 0) ? \"NIL\" : \"VAR_0\";\n }\n else if (n <= 0b1011) {\n return \"VAR_10\";\n }\n else if (n <= 0b1101) {\n return \"VAR_110\";\n }\n else if (n <= 0b1111) {\n return this.bytes.every((e) => e === 0xff) ? \"MAX\" : \"VAR_RESERVED\";\n }\n else {\n throw new Error(\"unreachable\");\n }\n }\n /**\n * Returns the version field value of the UUID or `undefined` if the UUID does\n * not have the variant field value of `0b10`.\n */\n getVersion() {\n return this.getVariant() === \"VAR_10\" ? this.bytes[6] >>> 4 : undefined;\n }\n /** Creates an object from `this`. */\n clone() {\n return new UUID(this.bytes.slice(0));\n }\n /** Returns true if `this` is equivalent to `other`. */\n equals(other) {\n return this.compareTo(other) === 0;\n }\n /**\n * Returns a negative integer, zero, or positive integer if `this` is less\n * than, equal to, or greater than `other`, respectively.\n */\n compareTo(other) {\n for (let i = 0; i < 16; i++) {\n const diff = this.bytes[i] - other.bytes[i];\n if (diff !== 0) {\n return Math.sign(diff);\n }\n }\n return 0;\n }\n}\n/**\n * Encapsulates the monotonic counter state.\n *\n * This class provides APIs to utilize a separate counter state from that of the\n * global generator used by {@link uuidv7} and {@link uuidv7obj}. In addition to\n * the default {@link generate} method, this class has {@link generateOrAbort}\n * that is useful to absolutely guarantee the monotonically increasing order of\n * generated UUIDs. See their respective documentation for details.\n */\nexport class V7Generator {\n /**\n * Creates a generator object with the default random number generator, or\n * with the specified one if passed as an argument. The specified random\n * number generator should be cryptographically strong and securely seeded.\n */\n constructor(randomNumberGenerator) {\n this.timestamp = 0;\n this.counter = 0;\n this.random = randomNumberGenerator !== null && randomNumberGenerator !== void 0 ? randomNumberGenerator : getDefaultRandom();\n }\n /**\n * Generates a new UUIDv7 object from the current timestamp, or resets the\n * generator upon significant timestamp rollback.\n *\n * This method returns a monotonically increasing UUID by reusing the previous\n * timestamp even if the up-to-date timestamp is smaller than the immediately\n * preceding UUID's. However, when such a clock rollback is considered\n * significant (i.e., by more than ten seconds), this method resets the\n * generator and returns a new UUID based on the given timestamp, breaking the\n * increasing order of UUIDs.\n *\n * See {@link generateOrAbort} for the other mode of generation and\n * {@link generateOrResetCore} for the low-level primitive.\n */\n generate() {\n return this.generateOrResetCore(Date.now(), 10000);\n }\n /**\n * Generates a new UUIDv7 object from the current timestamp, or returns\n * `undefined` upon significant timestamp rollback.\n *\n * This method returns a monotonically increasing UUID by reusing the previous\n * timestamp even if the up-to-date timestamp is smaller than the immediately\n * preceding UUID's. However, when such a clock rollback is considered\n * significant (i.e., by more than ten seconds), this method aborts and\n * returns `undefined` immediately.\n *\n * See {@link generate} for the other mode of generation and\n * {@link generateOrAbortCore} for the low-level primitive.\n */\n generateOrAbort() {\n return this.generateOrAbortCore(Date.now(), 10000);\n }\n /**\n * Generates a new UUIDv7 object from the `unixTsMs` passed, or resets the\n * generator upon significant timestamp rollback.\n *\n * This method is equivalent to {@link generate} except that it takes a custom\n * timestamp and clock rollback allowance.\n *\n * @param rollbackAllowance - The amount of `unixTsMs` rollback that is\n * considered significant. A suggested value is `10_000` (milliseconds).\n * @throws RangeError if `unixTsMs` is not a 48-bit positive integer.\n */\n generateOrResetCore(unixTsMs, rollbackAllowance) {\n let value = this.generateOrAbortCore(unixTsMs, rollbackAllowance);\n if (value === undefined) {\n // reset state and resume\n this.timestamp = 0;\n value = this.generateOrAbortCore(unixTsMs, rollbackAllowance);\n }\n return value;\n }\n /**\n * Generates a new UUIDv7 object from the `unixTsMs` passed, or returns\n * `undefined` upon significant timestamp rollback.\n *\n * This method is equivalent to {@link generateOrAbort} except that it takes a\n * custom timestamp and clock rollback allowance.\n *\n * @param rollbackAllowance - The amount of `unixTsMs` rollback that is\n * considered significant. A suggested value is `10_000` (milliseconds).\n * @throws RangeError if `unixTsMs` is not a 48-bit positive integer.\n */\n generateOrAbortCore(unixTsMs, rollbackAllowance) {\n const MAX_COUNTER = 4398046511103;\n if (!Number.isInteger(unixTsMs) ||\n unixTsMs < 1 ||\n unixTsMs > 281474976710655) {\n throw new RangeError(\"`unixTsMs` must be a 48-bit positive integer\");\n }\n else if (rollbackAllowance < 0 || rollbackAllowance > 281474976710655) {\n throw new RangeError(\"`rollbackAllowance` out of reasonable range\");\n }\n if (unixTsMs > this.timestamp) {\n this.timestamp = unixTsMs;\n this.resetCounter();\n }\n else if (unixTsMs + rollbackAllowance >= this.timestamp) {\n // go on with previous timestamp if new one is not much smaller\n this.counter++;\n if (this.counter > MAX_COUNTER) {\n // increment timestamp at counter overflow\n this.timestamp++;\n this.resetCounter();\n }\n }\n else {\n // abort if clock went backwards to unbearable extent\n return undefined;\n }\n return UUID.fromFieldsV7(this.timestamp, Math.trunc(this.counter / 2 ** 30), this.counter & (2 ** 30 - 1), this.random.nextUint32());\n }\n /** Initializes the counter at a 42-bit random integer. */\n resetCounter() {\n this.counter =\n this.random.nextUint32() * 0x400 + (this.random.nextUint32() & 0x3ff);\n }\n /**\n * Generates a new UUIDv4 object utilizing the random number generator inside.\n *\n * @internal\n */\n generateV4() {\n const bytes = new Uint8Array(Uint32Array.of(this.random.nextUint32(), this.random.nextUint32(), this.random.nextUint32(), this.random.nextUint32()).buffer);\n bytes[6] = 0x40 | (bytes[6] >>> 4);\n bytes[8] = 0x80 | (bytes[8] >>> 2);\n return UUID.ofInner(bytes);\n }\n}\n/** Returns the default random number generator available in the environment. */\nconst getDefaultRandom = () => {\n // detect Web Crypto API\n if (typeof crypto !== \"undefined\" &&\n typeof crypto.getRandomValues !== \"undefined\") {\n return new BufferedCryptoRandom();\n }\n else {\n // fall back on Math.random() unless the flag is set to true\n if (typeof UUIDV7_DENY_WEAK_RNG !== \"undefined\" && UUIDV7_DENY_WEAK_RNG) {\n throw new Error(\"no cryptographically strong RNG available\");\n }\n return {\n nextUint32: () => Math.trunc(Math.random() * 65536) * 65536 +\n Math.trunc(Math.random() * 65536),\n };\n }\n};\n/**\n * Wraps `crypto.getRandomValues()` to enable buffering; this uses a small\n * buffer by default to avoid both unbearable throughput decline in some\n * environments and the waste of time and space for unused values.\n */\nclass BufferedCryptoRandom {\n constructor() {\n this.buffer = new Uint32Array(8);\n this.cursor = 0xffff;\n }\n nextUint32() {\n if (this.cursor >= this.buffer.length) {\n crypto.getRandomValues(this.buffer);\n this.cursor = 0;\n }\n return this.buffer[this.cursor++];\n }\n}\nlet defaultGenerator;\n/**\n * Generates a UUIDv7 string.\n *\n * @returns The 8-4-4-4-12 canonical hexadecimal string representation\n * (\"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\").\n */\nexport const uuidv7 = () => uuidv7obj().toString();\n/** Generates a UUIDv7 object. */\nexport const uuidv7obj = () => (defaultGenerator || (defaultGenerator = new V7Generator())).generate();\n/**\n * Generates a UUIDv4 string.\n *\n * @returns The 8-4-4-4-12 canonical hexadecimal string representation\n * (\"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\").\n */\nexport const uuidv4 = () => uuidv4obj().toString();\n/** Generates a UUIDv4 object. */\nexport const uuidv4obj = () => (defaultGenerator || (defaultGenerator = new V7Generator())).generateV4();\n","var __defProp = Object.defineProperty;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __knownSymbol = (name, symbol) => (symbol = Symbol[name]) ? symbol : Symbol.for(\"Symbol.\" + name);\nvar __typeError = (msg) => {\n throw TypeError(msg);\n};\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\nvar __accessCheck = (obj, member, msg) => member.has(obj) || __typeError(\"Cannot \" + msg);\nvar __privateGet = (obj, member, getter) => (__accessCheck(obj, member, \"read from private field\"), getter ? getter.call(obj) : member.get(obj));\nvar __privateAdd = (obj, member, value) => member.has(obj) ? __typeError(\"Cannot add the same private member more than once\") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\nvar __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, \"write to private field\"), setter ? setter.call(obj, value) : member.set(obj, value), value);\nvar __privateMethod = (obj, member, method) => (__accessCheck(obj, member, \"access private method\"), method);\nvar __await = function(promise, isYieldStar) {\n this[0] = promise;\n this[1] = isYieldStar;\n};\nvar __yieldStar = (value) => {\n var obj = value[__knownSymbol(\"asyncIterator\")], isAwait = false, method, it = {};\n if (obj == null) {\n obj = value[__knownSymbol(\"iterator\")]();\n method = (k) => it[k] = (x) => obj[k](x);\n } else {\n obj = obj.call(value);\n method = (k) => it[k] = (v) => {\n if (isAwait) {\n isAwait = false;\n if (k === \"throw\") throw v;\n return v;\n }\n isAwait = true;\n return {\n done: false,\n value: new __await(new Promise((resolve) => {\n var x = obj[k](v);\n if (!(x instanceof Object)) __typeError(\"Object expected\");\n resolve(x);\n }), 1)\n };\n };\n }\n return it[__knownSymbol(\"iterator\")] = () => it, method(\"next\"), \"throw\" in obj ? method(\"throw\") : it.throw = (x) => {\n throw x;\n }, \"return\" in obj && method(\"return\"), it;\n};\n\nexport {\n __spreadValues,\n __privateGet,\n __privateAdd,\n __privateSet,\n __privateMethod,\n __yieldStar\n};\n//# sourceMappingURL=chunk-ZYFWDQGV.js.map","import { FileService } from \"./file_service\";\nimport { Env } from \"./sys_env\";\nimport { Time } from \"./time\";\n\nexport enum TimeMode {\n REAL = \"real\",\n CONST = \"const\",\n STEP = \"step\",\n}\n\nexport enum RandomMode {\n CONST = \"const\",\n STEP = \"step\",\n RANDOM = \"random\",\n}\n\nexport enum IDMode {\n UUID = \"uuid\",\n CONST = \"const\",\n STEP = \"step\",\n}\n\nexport function String2TimeMode(s?: string): TimeMode {\n switch (s?.toLowerCase()) {\n case \"real\":\n return TimeMode.REAL;\n case \"const\":\n return TimeMode.CONST;\n case \"step\":\n return TimeMode.STEP;\n default:\n return TimeMode.REAL;\n }\n}\n\nexport type VoidFunc = () => void | Promise<void>;\n\nexport interface SystemService {\n Env(): Env;\n Args(): string[];\n OnExit(hdl: VoidFunc): VoidFunc;\n Exit(code: number): void;\n}\n\nexport interface SysAbstraction {\n Time(): Time;\n Stdout(): WritableStream<Uint8Array>;\n Stderr(): WritableStream<Uint8Array>;\n NextId(): string;\n Random0ToValue(value: number): number;\n System(): SystemService;\n FileSystem(): FileService;\n}\n","export abstract class Time {\n abstract Now(): Date;\n abstract Sleep(duration: Duration): Promise<void>;\n TimeSince(start: Date): Duration {\n const now = this.Now();\n return now.getTime() - start.getTime();\n }\n}\n\nexport type Duration = number;\n\nexport enum TimeUnits {\n Microsecond = 1,\n // eslint-disable-next-line @typescript-eslint/prefer-literal-enum-member\n Second = 1000 * Microsecond,\n // eslint-disable-next-line @typescript-eslint/prefer-literal-enum-member\n Minute = 60 * Second,\n // eslint-disable-next-line @typescript-eslint/prefer-literal-enum-member\n Hour = 60 * Minute,\n}\n","export interface EnvActions {\n get(key: string): string | undefined;\n set(key: string, value?: string): void;\n del(key: string): void;\n keys(): string[];\n use(): boolean;\n}\n\nclass NodeEnvActions implements EnvActions {\n readonly #node = globalThis as unknown as { process: { env: Record<string, string> } };\n\n // eslint-disable-next-line @typescript-eslint/no-useless-constructor, @typescript-eslint/no-unused-vars\n constructor(opts: Partial<EnvFactoryOpts>) {\n // do nothing\n }\n use(): boolean {\n return typeof this.#node === \"object\" && typeof this.#node.process === \"object\" && typeof this.#node.process.env === \"object\";\n }\n readonly #env = this.use() ? process.env : {};\n keys(): string[] {\n return Object.keys(this.#env);\n }\n get(key: string): string | undefined {\n return this.#env[key];\n }\n set(key: string, value?: string): void {\n if (value) {\n this.#env[key] = value;\n }\n }\n del(key: string): void {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete this.#env[key];\n }\n}\n\nclass DenoEnvActions implements EnvActions {\n readonly #deno = globalThis as unknown as { Deno: { env: Map<string, string> } };\n\n readonly #env: Map<string, string>;\n constructor(opts: Partial<EnvFactoryOpts>, env?: Map<string, string>) {\n if (env) {\n this.#env = env;\n } else {\n this.#env = this.use() ? this.#deno.Deno.env : new Map();\n }\n }\n use(): boolean {\n return typeof this.#deno === \"object\" && typeof this.#deno.Deno === \"object\" && typeof this.#deno.Deno.env === \"object\";\n }\n keys(): string[] {\n return Array.from(this.#env.keys());\n }\n get(key: string): string | undefined {\n return this.#env.get(key);\n }\n set(key: string, value?: string): void {\n if (value) {\n this.#env.set(key, value);\n }\n }\n del(key: string): void {\n this.#env.delete(key);\n }\n}\n\nclass BrowserEnvActions extends DenoEnvActions {\n static globalBEA(sym: symbol) {\n const browser = globalThis as unknown as Record<symbol, BrowserEnvActions>;\n if (typeof browser === \"object\" && typeof browser[sym] === \"object\") {\n return { map: browser[sym]._map, finalize: () => browser[sym]._map };\n }\n const map = new Map<string, string>();\n return {\n map,\n finalize: (bea: BrowserEnvActions) => {\n browser[sym] = bea;\n return map;\n },\n };\n }\n\n readonly _map: Map<string, string>;\n constructor(opts: Partial<EnvFactoryOpts>) {\n const { map, finalize } = BrowserEnvActions.globalBEA(Symbol.for(opts.symbol || \"CP_ENV\"));\n // not perfect the globalThis will be polluted\n // also in the case it is not need.\n // better we have a lazy init\n super(opts, map);\n this._map = finalize(this);\n }\n use(): boolean {\n return true;\n }\n}\n\ninterface EnvFactoryOpts {\n readonly symbol: string; // default \"CP_ENV\" used by BrowserEnvActions\n readonly presetEnv: Map<string, string>;\n}\n\nfunction envFactory(opts: Partial<EnvFactoryOpts> = {}): EnvActions {\n const found = [new NodeEnvActions(opts), new DenoEnvActions(opts), new BrowserEnvActions(opts)].find((env) => env.use());\n if (!found) {\n throw new Error(\"SysContainer:envFactory: no env available\");\n }\n return found;\n}\n\ntype OnSetFn = (key: string, value?: string) => void;\nexport interface OnSetItem {\n readonly filter: Set<string>;\n readonly fn: OnSetFn;\n}\n\nexport interface Env extends Omit<EnvActions, \"use\"> {\n onSet(fn: OnSetFn, ...filter: string[]): void;\n}\n\nexport class EnvImpl implements Env {\n readonly #envImpl: EnvActions;\n constructor(opts: Partial<EnvFactoryOpts> = {}) {\n this.#envImpl = envFactory(opts);\n // do nothing\n this.#updatePresets(opts.presetEnv);\n }\n #updatePresets(presetEnv?: Map<string, string>): void {\n if (!presetEnv) {\n return;\n }\n for (const [key, value] of presetEnv) {\n this.#envImpl.set(key, value);\n }\n }\n #applyOnSet(onSet: OnSetItem[], key?: string, value?: string): void {\n onSet.forEach((item) => {\n let keys: string[] = [];\n if (key) {\n keys = [key];\n } else {\n keys = this.#envImpl.keys();\n }\n keys\n .filter((k) => {\n if (item.filter.size === 0) {\n return true;\n }\n if (item.filter.has(k)) {\n return true;\n }\n return false;\n })\n .forEach((k) => {\n let v;\n if (!key && !value) {\n // init\n v = this.#envImpl.get(k);\n } else if (key && !value) {\n // del\n v = undefined;\n } else {\n // set\n v = value;\n }\n item.fn(k, v);\n });\n });\n }\n readonly #onSet: OnSetItem[] = [];\n keys(): string[] {\n return this.#envImpl.keys();\n }\n // filter is not set all sets passed\n onSet(fn: OnSetFn, ...filter: string[]): void {\n const item: OnSetItem = { filter: new Set(filter), fn };\n this.#onSet.push(item);\n this.#applyOnSet([item]);\n }\n get(key: string): string | undefined {\n return this.#envImpl.get(key);\n }\n set(key: string, value?: string): void {\n if (!value) {\n return;\n }\n this.#envImpl.set(key, value);\n this.#applyOnSet(this.#onSet, key, value);\n }\n del(key: string): void {\n this.#envImpl.del(key);\n this.#applyOnSet(this.#onSet, key);\n }\n}\n\nexport const envImpl = new EnvImpl();\n","import { FileService } from \"./file_service\";\nimport { TimeMode, RandomMode, IDMode, SystemService, VoidFunc, SysAbstraction } from \"./sys_abstraction\";\nimport { Time } from \"./time\";\n\nexport class SysTime extends Time {\n Now(): Date {\n return new Date();\n }\n Sleep(duration: number): Promise<void> {\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve();\n }, duration);\n });\n }\n}\n\nexport class ConstTime extends Time {\n Now(): Date {\n return new Date(2021, 1, 1, 0, 0, 0, 0);\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Sleep(duration: number): Promise<void> {\n return Promise.resolve();\n }\n}\n\nexport class StepTime extends Time {\n _step: Date;\n constructor() {\n super();\n this._step = new ConstTime().Now();\n }\n Now() {\n if (this._step.getTime() === 0) {\n this._step = new ConstTime().Now();\n return this._step;\n }\n this._step = new Date(this._step.getTime() + 1000);\n return this._step;\n }\n Sleep(duration: number): Promise<void> {\n this._step = new Date(this._step.getTime() + duration);\n return Promise.resolve();\n }\n}\n\nexport function TimeFactory(timeMode: TimeMode): Time {\n switch (timeMode) {\n case TimeMode.REAL:\n return new SysTime();\n case TimeMode.CONST:\n return new ConstTime();\n case TimeMode.STEP:\n return new StepTime();\n }\n return new SysTime();\n}\n\nexport class RandomService {\n readonly _mode: RandomMode;\n _step = 0;\n constructor(mode: RandomMode) {\n this._mode = mode;\n }\n Random0ToValue(value: number): number {\n switch (this._mode) {\n case RandomMode.CONST:\n return 0.5 * value;\n case RandomMode.STEP:\n this._step += 0.0001;\n return this._step * value;\n case RandomMode.RANDOM:\n return Math.random() * value;\n default:\n throw new Error(\"Unknown RandomMode\");\n }\n }\n}\n\nexport class IdService {\n readonly _mode: IDMode;\n _step = 0;\n constructor(mode?: IDMode) {\n if (!mode) {\n mode = IDMode.UUID;\n }\n this._mode = mode;\n }\n NextId(): string {\n switch (this._mode) {\n case IDMode.UUID:\n return crypto.randomUUID();\n case IDMode.CONST:\n return \"VeryUniqueID\";\n case IDMode.STEP:\n return `STEPId-${this._step++}`;\n default:\n throw new Error(\"Unknown IDMode\");\n }\n }\n}\n\nexport interface BaseSysAbstractionParams {\n readonly FileSystem: FileService;\n readonly SystemService: SystemService;\n}\n\nexport interface ExitHandler {\n readonly hdl: VoidFunc;\n readonly id: string;\n}\n\nexport interface ExitService {\n injectExitHandlers(hdls: ExitHandler[]): void;\n exit(code: number): void;\n}\n\nconst decoder = new TextDecoder();\nexport class BaseSysAbstraction {\n readonly _time = new SysTime();\n readonly _stdout = new WritableStream({\n write(chunk) {\n return new Promise((resolve) => {\n const decoded = decoder.decode(chunk);\n console.log(decoded.trimEnd());\n resolve();\n });\n },\n });\n readonly _stderr = new WritableStream({\n write(chunk) {\n return new Promise((resolve) => {\n const decoded = decoder.decode(chunk);\n console.error(decoded.trimEnd());\n resolve();\n });\n },\n });\n\n readonly _idService = new IdService();\n readonly _randomService = new RandomService(RandomMode.RANDOM);\n readonly _fileSystem: FileService;\n readonly _systemService: SystemService;\n\n constructor(params: BaseSysAbstractionParams) {\n this._fileSystem = params.FileSystem;\n this._systemService = params.SystemService;\n }\n}\n\nexport interface WrapperSysAbstractionParams {\n readonly TimeMode?: TimeMode;\n readonly IdMode?: IDMode;\n readonly Stdout?: WritableStream<Uint8Array>;\n readonly Stderr?: WritableStream<Uint8Array>;\n readonly RandomMode?: RandomMode;\n readonly FileSystem?: FileService;\n readonly SystemService?: SystemService;\n}\n\nexport class WrapperSysAbstraction implements SysAbstraction {\n readonly _time: Time;\n readonly _stdout: WritableStream<Uint8Array>;\n readonly _stderr: WritableStream<Uint8Array>;\n readonly _idService: IdService;\n readonly _randomService: RandomService;\n readonly _fileSystem: FileService;\n readonly _systemService: SystemService;\n constructor(base: BaseSysAbstraction, params?: WrapperSysAbstractionParams) {\n this._time = base._time;\n this._stdout = base._stdout;\n this._stderr = base._stderr;\n this._idService = base._idService;\n this._randomService = base._randomService;\n this._fileSystem = base._fileSystem;\n this._systemService = base._systemService;\n if (params) {\n if (params.TimeMode) {\n this._time = TimeFactory(params.TimeMode);\n }\n if (params.Stdout) {\n this._stdout = params.Stdout;\n }\n if (params.Stderr) {\n this._stderr = params.Stderr;\n }\n if (params.IdMode) {\n this._idService = new IdService(params.IdMode);\n }\n if (params.RandomMode) {\n this._randomService = new RandomService(params.RandomMode);\n }\n if (params.FileSystem) {\n this._fileSystem = params.FileSystem;\n }\n if (params.SystemService) {\n this._systemService = params.SystemService;\n }\n }\n }\n Time(): Time {\n return this._time;\n }\n NextId(): string {\n return this._idService.NextId();\n }\n Random0ToValue(value: number): number {\n return this._randomService.Random0ToValue(value);\n }\n Stdout(): WritableStream {\n return this._stdout;\n }\n Stderr(): WritableStream {\n return this._stderr;\n }\n\n System(): SystemService {\n return this._systemService;\n }\n FileSystem(): FileService {\n return this._fileSystem;\n }\n}\n// export const BaseSysAbstraction = new BaseSysAbstractionImpl()\n","import { BaseSysAbstraction, WrapperSysAbstraction, WrapperSysAbstractionParams } from \"../base_sys_abstraction\";\nimport { FileService, NamedWritableStream } from \"../file_service\";\nimport { SysAbstraction, SystemService, VoidFunc } from \"../sys_abstraction\";\nimport { envImpl } from \"../sys_env\";\n\nclass WebFileService implements FileService {\n get baseDir(): string {\n throw new Error(\"basedir-Method not implemented.\");\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n create(fname: string): Promise<NamedWritableStream> {\n throw new Error(\"create-Method not implemented.\");\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n readFileString(fname: string): Promise<string> {\n throw new Error(\"readFileString-Method not implemented.\");\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n writeFileString(fname: string, content: string): Promise<void> {\n throw new Error(\"writeFileString-Method not implemented.\");\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n abs(fname: string): string {\n throw new Error(\"abs-Method not implemented.\");\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n join(...paths: string[]): string {\n throw new Error(\"join-Method not implemented.\");\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n relative(from: string, to?: string | undefined): string {\n throw new Error(\"relative-Method not implemented.\");\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n dirname(fname: string): string {\n throw new Error(\"dirname-Method not implemented.\");\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n basename(fname: string): string {\n throw new Error(\"basename-Method not implemented.\");\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n nodeImport(fname: string): string {\n throw new Error(\"nodeImport-Method not implemented.\");\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n isAbsolute(fname: string): boolean {\n throw new Error(\"isAbsolute-Method not implemented.\");\n }\n}\n\nclass WebSystemService implements SystemService {\n Env() {\n return envImpl;\n }\n Args(): string[] {\n throw new Error(\"Args-Method not implemented.\");\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n OnExit(hdl: VoidFunc): VoidFunc {\n throw new Error(\"OnExit-Method not implemented.\");\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Exit(code: number): void {\n throw new Error(\"Exit-Method not implemented.\");\n }\n}\n\nlet my: BaseSysAbstraction | undefined = undefined;\nexport function WebSysAbstraction(param?: WrapperSysAbstractionParams): SysAbstraction {\n if (!my) {\n my = new BaseSysAbstraction({\n FileSystem: new WebFileService(),\n SystemService: new WebSystemService(),\n });\n }\n return new WrapperSysAbstraction(my, param);\n}\n","import { Result } from \"./result\";\n\nexport enum Level {\n WARN = \"warn\",\n DEBUG = \"debug\",\n INFO = \"info\",\n ERROR = \"error\",\n}\n\nexport type Serialized = string | number | boolean;\nexport type FnSerialized = () => Serialized;\nexport interface LoggerInterface<R> {\n Module(key: string): R;\n // if modules is empty, set for all Levels\n EnableLevel(level: Level, ...modules: string[]): R;\n DisableLevel(level: Level, ...modules: string[]): R;\n\n SetDebug(...modules: (string | string[])[]): R;\n\n Ref(key: string, action: { toString: () => string } | FnSerialized): R;\n Result<T>(key: string, res: Result<T>): R;\n // default key url\n Url(url: URL, key?: string): R;\n // len\n Len(value: object | { length: number } | string | undefined | null, key?: string): R;\n\n Str(key: string, value?: string): R;\n Error(): R;\n Warn(): R;\n Debug(): R;\n Log(): R;\n WithLevel(level: Level): R;\n\n Err(err: unknown): R; // could be Error, or something which coerces to string\n Info(): R;\n Timestamp(): R;\n Any(key: string, value: unknown): R;\n Dur(key: string, nsec: number): R;\n Uint64(key: string, value: number): R;\n Int(key: string, value: number): R;\n Bool(key: string, value: unknown): R;\n}\n\nexport function IsLogger(obj: unknown): obj is Logger {\n return (\n typeof obj === \"object\" &&\n [\n \"Module\",\n \"EnableLevel\",\n \"DisableLevel\",\n \"SetDebug\",\n \"Str\",\n \"Error\",\n \"Warn\",\n \"Debug\",\n \"Log\",\n \"WithLevel\",\n \"Err\",\n \"Info\",\n \"Timestamp\",\n \"Any\",\n \"Dur\",\n \"Uint64\",\n ]\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .map((fn) => typeof (obj as any)[fn] === \"function\")\n .reduce((a, b) => a && b, true)\n );\n}\n\nexport interface WithLogger extends LoggerInterface<WithLogger> {\n Logger(): Logger;\n}\n\nexport interface AsError {\n AsError(): Error;\n}\n\nexport interface Logger extends LoggerInterface<Logger> {\n With(): WithLogger;\n\n Msg(...args: string[]): AsError;\n Flush(): Promise<void>;\n}\n","// import { v4 } from \"uuid\";\nimport { AsError, FnSerialized, Level, Logger, Serialized, WithLogger } from \"./logger\";\nimport { WebSysAbstraction } from \"./web/web_sys_abstraction\";\nimport { SysAbstraction } from \"./sys_abstraction\";\nimport { Result } from \"./result\";\n\nconst encoder = new TextEncoder();\n\nclass LogValue {\n constructor(readonly fn: FnSerialized) {}\n value(): Serialized {\n return this.fn();\n }\n}\n\nfunction resolveLogValue(val: JsonRecord): Record<string, Serialized> {\n const ret: Record<string, Serialized> = {};\n Object.keys(val).forEach((key) => {\n const v = val[key];\n if (v instanceof LogValue) {\n ret[key] = v.value();\n }\n });\n return ret;\n}\n\nfunction logValue(val: Serialized | FnSerialized | JsonRecord | undefined | null): LogValue {\n switch (typeof val) {\n case \"function\":\n return new LogValue(val);\n case \"string\":\n return new LogValue(() => val.toString());\n case \"number\":\n return new LogValue(() => val);\n case \"boolean\":\n return new LogValue(() => val);\n case \"object\":\n return new LogValue(() => JSON.stringify(val));\n default:\n if (!val) {\n return new LogValue(() => \"--Falsy--\");\n }\n throw new Error(`Invalid type:${typeof val}`);\n }\n}\n\ntype JsonRecord = Record<string, LogValue>;\n\nexport interface LevelHandler {\n enableLevel(level: Level, ...modules: string[]): void;\n disableLevel(level: Level, ...modules: string[]): void;\n setDebug(...modules: (string | string[])[]): void;\n isEnabled(ilevel: unknown, module: unknown): boolean;\n}\n\nexport class LevelHandlerImpl implements LevelHandler {\n readonly _globalLevels = new Set<Level>([Level.INFO, Level.ERROR, Level.WARN]);\n readonly _modules = new Map<string, Set<Level>>();\n enableLevel(level: Level, ...modules: string[]): void {\n if (modules.length == 0) {\n this._globalLevels.add(level);\n return;\n }\n this.forModules(\n level,\n (p) => {\n this._modules.set(p, new Set([...this._globalLevels, level]));\n },\n ...modules,\n );\n }\n disableLevel(level: Level, ...modules: string[]): void {\n if (modules.length == 0) {\n this._globalLevels.delete(level);\n return;\n }\n this.forModules(\n level,\n (p) => {\n this._modules.delete(p);\n },\n ...modules,\n );\n }\n\n forModules(level: Level, fnAction: (p: string) => void, ...modules: (string | string[])[]): void {\n for (const m of modules.flat()) {\n if (typeof m !== \"string\") {\n continue;\n }\n const parts = m\n .split(\",\")\n .map((s) => s.trim())\n .filter((s) => s.length);\n for (const p of parts) {\n fnAction(p);\n }\n }\n }\n setDebug(...modules: (string | string[])[]): void {\n this.forModules(\n Level.DEBUG,\n (p) => {\n this._modules.set(p, new Set([...this._globalLevels, Level.DEBUG]));\n },\n ...modules,\n );\n }\n isEnabled(ilevel: unknown, module: unknown): boolean {\n const level = ilevel as Level; // what if it's not a level?\n if (typeof module === \"string\") {\n const levels = this._modules.get(module);\n if (levels && levels.has(level)) {\n return true;\n }\n }\n const wlevel = this._modules.get(\"*\");\n if (wlevel && typeof level === \"string\") {\n if (wlevel.has(level)) {\n return true;\n }\n }\n if (typeof level !== \"string\") {\n // this is a plain log\n return true;\n }\n return this._globalLevels.has(level);\n }\n}\n\nconst levelSingleton = new LevelHandlerImpl();\n\n// globalThis[Symbol(\"levelSingleton\")] = new LevelHandlerImpl()\n\nexport class LogWriter {\n readonly _out: WritableStream<Uint8Array>;\n readonly _toFlush: (() => Promise<void>)[] = [];\n\n constructor(out: WritableStream<Uint8Array>) {\n this._out = out;\n }\n\n write(encoded: Uint8Array) {\n const my = async () => {\n // const val = Math.random();\n // console.log(\">>>My:\", val)\n try {\n const writer = this._out.getWriter();\n await writer.ready;\n await writer.write(encoded);\n await writer.releaseLock();\n } catch (err) {\n console.error(\"Chunk error:\", err);\n }\n // console.log(\"<<<My:\", val)\n };\n this._toFlush.push(my);\n this._flush();\n }\n\n _flushIsRunning = false;\n _flushDoneFns = Array<() => void>();\n _flush(toFlush: (() => Promise<void>)[] | undefined = undefined, done?: () => void): void {\n if (done) {\n this._flushDoneFns.push(done);\n }\n\n if (this._toFlush.length == 0) {\n // console.log(\"Flush is stopped\", this._toFlush.length)\n this._flushIsRunning = false;\n this._flushDoneFns.forEach((fn) => fn());\n this._flushDoneFns = [];\n return;\n }\n\n if (!toFlush && this._toFlush.length == 1 && !this._flushIsRunning) {\n this._flushIsRunning = true;\n // console.log(\"Flush is started\", this._toFlush.length)\n } else if (!toFlush) {\n // console.log(\"flush queue check but is running\", this._toFlush.length)\n return;\n }\n\n // console.log(\">>>Msg:\", this._toFlush.length)\n const my = this._toFlush.shift();\n my?.().finally(() => {\n // console.log(\"<<<Msg:\", this._toFlush.length)\n this._flush(this._toFlush);\n });\n }\n}\n\nexport interface LoggerImplParams {\n readonly out?: WritableStream<Uint8Array>;\n readonly logWriter?: LogWriter;\n readonly sys?: SysAbstraction;\n readonly withAttributes?: JsonRecord;\n readonly levelHandler?: LevelHandler;\n}\nexport class LoggerImpl implements Logger {\n readonly _sys: SysAbstraction;\n readonly _attributes: JsonRecord = {};\n readonly _withAttributes: JsonRecord;\n readonly _logWriter: LogWriter;\n readonly _levelHandler: LevelHandler;\n // readonly _id: string = \"logger-\" + Math.random().toString(36)\n\n constructor(params?: LoggerImplParams) {\n if (!params) {\n params = {};\n }\n if (!params.sys) {\n this._sys = WebSysAbstraction();\n } else {\n this._sys = params.sys;\n }\n if (params.logWriter) {\n this._logWriter = params.logWriter;\n } else {\n if (!params.out) {\n this._logWriter = new LogWriter(this._sys.Stdout());\n } else {\n this._logWriter = new LogWriter(params.out);\n }\n }\n if (!params.withAttributes) {\n this._withAttributes = {};\n } else {\n this._withAttributes = { ...params.withAttributes };\n }\n this._attributes = { ...this._withAttributes };\n if (params.levelHandler) {\n this._levelHandler = params.levelHandler;\n } else {\n this._levelHandler = levelSingleton;\n }\n // console.log(\"LoggerImpl\", this._id, this._attributes, this._withAttributes)\n }\n\n EnableLevel(level: Level, ...modules: string[]): Logger {\n this._levelHandler.enableLevel(level, ...modules);\n return this;\n }\n DisableLevel(level: Level, ...modules: string[]): Logger {\n this._levelHandler.disableLevel(level, ...modules);\n return this;\n }\n\n Module(key: string): Logger {\n this._attributes[\"module\"] = logValue(key);\n this._withAttributes[\"module\"] = logValue(key);\n return this;\n }\n // if the string is \"*\" it will enable for all modules\n SetDebug(...modules: (string | string[])[]): Logger {\n this._levelHandler.setDebug(...modules);\n return this;\n }\n\n Timestamp(): Logger {\n // this is called with .call from _produceError where this\n // this is crafted to have _sys and _attributes\n // CAUTION so done use other ref from this\n this._attributes[\"ts\"] = logValue(this._sys.Time().Now().toISOString());\n return this;\n }\n Warn(): Logger {\n this._attributes[\"level\"] = logValue(Level.WARN);\n return this;\n }\n Log(): Logger {\n return this;\n }\n Debug(): Logger {\n this._attributes[\"level\"] = logValue(Level.DEBUG);\n return this;\n }\n Error(): Logger {\n this._attributes[\"level\"] = logValue(Level.ERROR);\n return this;\n }\n Info(): Logger {\n this._attributes[\"level\"] = logValue(Level.INFO);\n return this;\n }\n Err(err: unknown): Logger {\n if (err instanceof Error) {\n this._attributes[\"error\"] = logValue(err.message);\n } else {\n this._attributes[\"error\"] = logValue(\"\" + err);\n }\n return this;\n }\n WithLevel(l: Level): Logger {\n this._attributes[\"level\"] = logValue(l);\n return this;\n }\n\n Ref(key: string, action: { toString: () => string } | FnSerialized): Logger {\n if (typeof action === \"function\") {\n this._attributes[key] = logValue(action as FnSerialized);\n } else if (typeof action.toString === \"function\") {\n this._attributes[key] = logValue(() => action.toString());\n } else {\n this._attributes[key] = logValue(\"INVALID REF\");\n }\n return this;\n }\n Bool(key: string, value: unknown): Logger {\n this._attributes[key] = logValue(!!value);\n return this;\n }\n Result<T>(key: string, res: Result<T, Error>): Logger {\n if (res.isOk()) {\n this._attributes[key] = logValue(res.Ok() as Serialized);\n } else {\n this.Err(res.Err());\n }\n return this;\n }\n\n Len(value: unknown, key = \"len\"): Logger {\n if (Array.isArray(value)) {\n this._attributes[key] = logValue(() => value.length);\n } else if (typeof value === \"string\") {\n this._attributes[key] = logValue(() => value.length);\n } else if (typeof value === \"object\" && value !== null) {\n this._attributes[key] = logValue(() => Object.keys(value).length);\n } else {\n this.Int(key, -1);\n }\n return this;\n }\n\n Url(url: URL, key = \"url\"): Logger {\n this.Ref(key, () => url.toString());\n return this;\n }\n\n Str(key: string, value?: string): Logger {\n this._attributes[key] = logValue(value);\n return this;\n }\n\n Any(key: string, value: string | number | boolean | JsonRecord): Logger {\n this._attributes[key] = logValue(value);\n return this;\n }\n Dur(key: string, nsec: number): Logger {\n this._attributes[key] = logValue(`${nsec}ms`);\n // new Intl.DurationFormat(\"en\", { style: \"narrow\" }).format(nsec);\n return this;\n }\n Uint64(key: string, value: number): Logger {\n this._attributes[key] = logValue(value);\n return this;\n }\n Int(key: string, value: number): Logger {\n return this.Uint64(key, value);\n }\n\n async Flush(): Promise<void> {\n return new Promise((resolve) => {\n this._logWriter._flush(undefined, resolve);\n });\n }\n\n With(): WithLogger {\n // console.log(\"WithLoggerBuilder.With\", this._id, this._attributes, this._withAttributes);\n return new WithLoggerBuilder(\n new LoggerImpl({\n logWriter: this._logWriter,\n sys: this._sys,\n levelHandler: this._levelHandler,\n withAttributes: {\n module: this._attributes[\"module\"],\n ...this._withAttributes,\n },\n }),\n );\n }\n\n _resetAttributes(fn: () => () => string): () => string {\n const ret = fn();\n Object.keys(this._attributes).forEach((key) => {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete this._attributes[key];\n });\n Object.assign(this._attributes, this._withAttributes);\n return ret;\n }\n _produceError(attr: JsonRecord, ...args: string[]): string {\n attr[\"msg\"] = logValue(args.join(\" \"));\n const msg = attr[\"msg\"].value();\n if (typeof msg === \"string\" && !msg.trim().length) {\n delete attr[\"msg\"];\n }\n if (attr[\"ts\"]?.value() === \"ETERNITY\") {\n // hacky but it works\n this.Timestamp.call({\n _sys: this._sys,\n _attributes: attr,\n });\n }\n return JSON.stringify(resolveLogValue(attr));\n }\n\n Msg(...args: string[]): AsError {\n const fnError = this._resetAttributes(() => {\n const doWrite = this._levelHandler.isEnabled(this._attributes[\"level\"]?.value(), this._attributes[\"module\"]?.value());\n let fnRet = () => this._produceError({ ...this._attributes }, ...args);\n if (doWrite) {\n const str = this._produceError({ ...this._attributes }, ...args);\n const encoded = encoder.encode(str + \"\\n\");\n this._logWriter.write(encoded);\n fnRet = () => str;\n }\n return fnRet;\n });\n return {\n AsError: () => new Error(fnError()),\n };\n }\n}\n\nclass WithLoggerBuilder implements WithLogger {\n readonly _li: LoggerImpl;\n constructor(li: LoggerImpl) {\n this._li = li;\n }\n\n Logger(): Logger {\n Object.assign(this._li._withAttributes, this._li._attributes);\n return this._li;\n }\n\n EnableLevel(level: Level, ...modules: string[]): WithLogger {\n this._li._levelHandler.enableLevel(level, ...modules);\n return this;\n }\n DisableLevel(level: Level, ...modules: string[]): WithLogger {\n this._li._levelHandler.enableLevel(level, ...modules);\n return this;\n }\n\n Module(key: string): WithLogger {\n this._li.Module(key);\n return this;\n }\n SetDebug(...modules: (string | string[])[]): WithLogger {\n this._li.SetDebug(...modules);\n return this;\n }\n\n Str(key: string, value?: string): WithLogger {\n this._li.Str(key, value);\n return this;\n }\n\n Len(value: unknown, key?: string): WithLogger {\n this._li.Len(value, key);\n return this;\n }\n\n Ref(key: string, action: Serialized | FnSerialized): WithLogger {\n this._li.Ref(key, action);\n return this;\n }\n Bool(key: string, value: unknown): WithLogger {\n this._li.Bool(key, value);\n return this;\n }\n Result<T>(key: string, res: Result<T, Error>): WithLogger {\n this._li.Result(key, res);\n return this;\n }\n Url(url: URL, key?: string): WithLogger {\n this._li.Url(url, key);\n return this;\n }\n Int(key: string, value: number): WithLogger {\n this._li.Int(key, value);\n return this;\n }\n\n Log(): WithLogger {\n this._li.Log();\n return this;\n }\n\n WithLevel(level: Level): WithLogger {\n this._li.WithLevel(level);\n return this;\n }\n\n Error(): WithLogger {\n this._li.Error();\n return this;\n }\n Warn(): WithLogger {\n this._li.Error();\n return this;\n }\n Debug(): WithLogger {\n this._li.Debug();\n return this;\n }\n Err(err: unknown): WithLogger {\n this._li.Err(err);\n return this;\n }\n Info(): WithLogger {\n this._li.Info();\n return this;\n }\n Timestamp(): WithLogger {\n this._li._attributes[\"ts\"] = logValue(\"ETERNITY\");\n return this;\n }\n Any(key: string, value: JsonRecord): WithLogger {\n this._li.Any(key, value);\n return this;\n }\n Dur(key: string, nsec: number): WithLogger {\n this._li.Dur(key, nsec);\n return this;\n }\n Uint64(key: string, value: number): WithLogger {\n this._li.Uint64(key, value);\n return this;\n }\n}\n","class LogWriter implements WritableStreamDefaultWriter<Uint8Array> {\n readonly _bufferArr: Uint8Array[] = [];\n\n _resolveClosed: (value?: PromiseLike<undefined>) => void;\n closed: Promise<undefined>;\n desiredSize: number | null = null;\n ready: Promise<undefined> = Promise.resolve(undefined);\n\n constructor() {\n this._resolveClosed = () => {\n // do nothing\n };\n this.closed = new Promise((resolve) => {\n this._resolveClosed = resolve;\n });\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any\n abort(reason?: any): Promise<void> {\n throw new Error(\"Method not implemented.\");\n }\n close(): Promise<void> {\n this._resolveClosed();\n return Promise.resolve(undefined);\n }\n releaseLock(): void {\n // do nothing\n }\n write(chunk?: Uint8Array): Promise<void> {\n chunk && this._bufferArr.push(chunk);\n return Promise.resolve(undefined);\n }\n}\n\nexport class LogCollector implements WritableStream<Uint8Array> {\n readonly locked: boolean = false;\n _writer?: LogWriter;\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n abort(reason?: Uint8Array): Promise<void> {\n throw new Error(\"Method not implemented.\");\n }\n\n async close(): Promise<void> {\n if (this._writer) {\n const ret = await this._writer.close();\n this._writer = undefined;\n return ret;\n }\n return Promise.resolve(undefined);\n }\n\n getWriter(): WritableStreamDefaultWriter<Uint8Array> {\n if (!this._writer) {\n this._writer = new LogWriter();\n }\n return this._writer;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Logs(): any[] {\n if (!this._writer) {\n return [];\n }\n const jsonNlStr = new TextDecoder().decode(\n new Uint8Array(\n (function* (res: Uint8Array[]) {\n for (const x of res) {\n yield* x;\n }\n })(this._writer._bufferArr),\n ),\n );\n const splitStr = jsonNlStr.split(\"\\n\");\n const filterStr = splitStr.filter((a) => a.length);\n const mapStr = filterStr.map((a) => JSON.parse(a));\n return mapStr;\n }\n}\n","import { Logger } from \"../logger\";\nimport { LevelHandlerImpl, LoggerImpl } from \"../logger_impl\";\nimport { SysAbstraction } from \"../sys_abstraction\";\nimport { LogCollector } from \"./log_collector\";\n\nexport interface MockLoggerReturn {\n readonly logger: Logger;\n readonly logCollector: LogCollector;\n}\n\nexport function MockLogger(params?: {\n readonly sys?: SysAbstraction;\n moduleName?: string | string[];\n readonly disableDebug?: boolean;\n}): MockLoggerReturn {\n const lc = new LogCollector();\n let modNames = [\"MockLogger\"];\n if (typeof params?.moduleName === \"string\") {\n modNames = [params?.moduleName];\n } else if (Array.isArray(params?.moduleName)) {\n modNames = [...params.moduleName, ...modNames];\n }\n const logger = new LoggerImpl({\n out: lc,\n sys: params?.sys,\n levelHandler: new LevelHandlerImpl(),\n })\n .With()\n .Module(modNames[0])\n .Logger();\n !params?.disableDebug && logger.SetDebug(...modNames);\n return {\n logCollector: lc,\n logger,\n };\n}\n","export abstract class Result<T, E = Error> {\n static Ok<T>(t: T): Result<T, Error> {\n return new ResultOK(t);\n }\n static Err<T extends Error = Error>(t: T | string): Result<never, T> {\n if (typeof t === \"string\") {\n return new ResultError(new Error(t) as T);\n }\n return new ResultError(t);\n }\n static Is<T>(t: unknown): t is Result<T> {\n return t instanceof Result;\n }\n\n isOk(): boolean {\n return this.is_ok();\n }\n isErr(): boolean {\n return this.is_err();\n }\n\n Ok(): T {\n return this.unwrap();\n }\n Err(): E {\n return this.unwrap_err();\n }\n\n abstract is_ok(): boolean;\n abstract is_err(): boolean;\n abstract unwrap(): T;\n abstract unwrap_err(): E;\n}\n\nexport class ResultOK<T> extends Result<T, Error> {\n private _t: T;\n constructor(t: T) {\n super();\n this._t = t;\n }\n is_ok(): boolean {\n return true;\n }\n is_err(): boolean {\n return false;\n }\n unwrap_err(): Error {\n throw new Error(\"Result is Ok\");\n }\n unwrap(): T {\n return this._t;\n }\n}\n\nexport class ResultError<T extends Error> extends Result<never, T> {\n private _error: T;\n constructor(t: T) {\n super();\n this._error = t;\n }\n is_ok(): boolean {\n return false;\n }\n is_err(): boolean {\n return true;\n }\n unwrap(): never {\n throw new Error(`Result is Err: ${this._error}`);\n }\n unwrap_err(): T {\n return this._error;\n }\n}\n\nexport type WithoutResult<T> = T extends Result<infer U> ? U : T;\n\n/*\n\ntype FinalizedResult<T> = {\n result: T;\n scopeResult?: Result<void>;\n finally: () => Promise<void>;\n}\n\ntype exection2ResultParam<T> = {\n init: () => Promise<T>;\n inScope?: (t: T) => Promise<void>;\n cleanup: (t: T) => Promise<void>;\n\n}\n\nasync function expection2Result<T>({fn, inScope, cleanup}: exection2ResultParam<T>): Promise<Result<FinalizedResult<T>>> {\n try {\n const res = await fn();\n if (inScope) {\n try {\n await inScope?.(res)\n } catch (err) {\n return Result.Err(err as Error)\n }\n await cleanup(res)\n return Result.Ok({\n result: res,\n finally: async () => { }\n })\n }\n return Result.Ok({\n result: res ,\n finally: async () => {\n return cleanup(res)\n }\n })\n } catch (err) {\n return Result.Err(err as Error)\n }\n}\n*/\n\n// await expection2Result({\n// init: openDB,\n// inScope: (res) => {\n// res.query()\n// },\n// cleanup: async (y) => {\n// await y.close()\n// }\n// })\n// async function openDB() {\n// try {\n// const opendb = await openDB()\n// return Result.Ok({\n// openDB,\n// finally: async () => {\n// await opendb.close()\n// }})\n// } catch (err) {\n// return Result.Err(err)\n// }\n// }\n// }\n","export abstract class Option<T> {\n static Some<T>(t: T): Option<T> {\n return new Some(t);\n }\n\n static None<T>(): Option<T> {\n return new None();\n }\n\n static Is<T>(t: unknown): t is Option<T> {\n return t instanceof Option;\n }\n\n IsNone(): boolean {\n return this.is_none();\n }\n\n IsSome(): boolean {\n return this.is_some();\n }\n Unwrap(): T {\n return this.unwrap();\n }\n\n abstract is_none(): boolean;\n abstract is_some(): boolean;\n abstract unwrap(): T;\n}\n\nexport class Some<T> extends Option<T> {\n private _t: T;\n constructor(_t: T) {\n super();\n this._t = _t;\n }\n\n is_none(): boolean {\n return false;\n }\n is_some(): boolean {\n return true;\n }\n unwrap(): T {\n return this._t;\n }\n}\n\nexport class None<T> extends Option<T> {\n is_none(): boolean {\n return true;\n }\n is_some(): boolean {\n return false;\n }\n unwrap(): T {\n throw new Error(\"None.unwrap\");\n }\n}\n\nexport type WithoutOption<T> = T extends Option<infer U> ? U : T;\n","export class Future<T> {\n readonly #promise: Promise<T>;\n #resolveFn: (value: T) => void = () => {\n throw new Error(\"This Promise is not working as expected.\");\n };\n #rejectFn: (reason: unknown) => void = () => {\n throw new Error(\"This Promise is not working as expected.\");\n };\n\n constructor() {\n this.#promise = new Promise<T>((resolve, reject) => {\n this.#resolveFn = resolve;\n this.#rejectFn = reject;\n });\n }\n\n async asPromise(): Promise<T> {\n return this.#promise;\n }\n\n resolve(value: T) {\n this.#resolveFn(value);\n }\n reject(reason: unknown) {\n this.#rejectFn(reason);\n }\n}\n","import { Future } from \"./future\";\n\ninterface ResolveSeqItem<T, C> {\n future: Future<T>;\n fn: (c: C) => Promise<T>;\n}\n\nexport class ResolveSeq<T, C = void> {\n readonly ctx: C;\n constructor(ctx?: C) {\n this.ctx = ctx as C;\n }\n reset() {\n /* noop */\n }\n async _step(item?: ResolveSeqItem<T, C> | undefined) {\n if (!item) {\n // done\n return;\n }\n item\n .fn(this.ctx)\n .then((value) => item.future.resolve(value))\n .catch((e) => item.future.reject(e as Error))\n .finally(() => this._step(this._seqFutures.shift()));\n }\n readonly _seqFutures: ResolveSeqItem<T, C>[] = [];\n async add(fn: (c: C) => Promise<T>): Promise<T> {\n const future = new Future<T>();\n this._seqFutures.push({ future, fn });\n this._step(this._seqFutures.shift());\n return future.asPromise();\n }\n}\n\nexport class ResolveOnce<T, C = void> {\n _onceDone = false;\n readonly _onceFutures: Future<T>[] = [];\n _onceOk = false;\n _onceValue?: T;\n _onceError?: Error;\n\n readonly ctx: C;\n\n constructor(ctx?: C) {\n this.ctx = ctx as C;\n }\n\n get ready() {\n return this._onceDone;\n }\n\n reset() {\n this._onceDone = false;\n this._onceOk = false;\n this._onceValue = undefined;\n this._onceError = undefined;\n this._onceFutures.length = 0;\n }\n\n async once(fn: (c: C) => Promise<T>): Promise<T> {\n if (this._onceDone) {\n if (this._onceError) {\n return Promise.reject(this._onceError);\n }\n if (this._onceOk) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return Promise.resolve(this._onceValue!);\n }\n throw new Error(\"ResolveOnce.once impossible\");\n }\n const future = new Future<T>();\n this._onceFutures.push(future);\n if (this._onceFutures.length === 1) {\n fn(this.ctx)\n .then((value) => {\n this._onceValue = value;\n this._onceOk = true;\n this._onceDone = true;\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n this._onceFutures.forEach((f) => f.resolve(this._onceValue!));\n this._onceFutures.length = 0;\n })\n .catch((e) => {\n this._onceError = e as Error;\n this._onceOk = false;\n this._onceValue = undefined;\n this._onceDone = true;\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n this._onceFutures.forEach((f) => f.reject(this._onceError!));\n this._onceFutures.length = 0;\n });\n }\n return future.asPromise();\n }\n}\n\nexport class Keyed<T extends { reset: () => void }, K = string> {\n private readonly _map = new Map<K, T>();\n\n readonly factory: (key: K) => T;\n constructor(factory: (key: K) => T) {\n this.factory = factory;\n }\n\n async asyncGet(key: () => Promise<K>): Promise<T> {\n return this.get(await key());\n }\n\n get(key: K | (() => K)): T {\n if (typeof key === \"function\") {\n key = (key as () => K)();\n }\n let keyed = this._map.get(key);\n if (!keyed) {\n keyed = this.factory(key);\n this._map.set(key, keyed);\n }\n return keyed;\n }\n\n reset() {\n this._map.forEach((keyed) => keyed.reset());\n this._map.clear();\n }\n}\n\nexport class KeyedResolvOnce<T, K = string> extends Keyed<ResolveOnce<T, K>, K> {\n constructor() {\n super((key) => new ResolveOnce<T, K>(key));\n }\n}\n\nexport class KeyedResolvSeq<T, K = string> extends Keyed<ResolveSeq<T, K>, K> {\n constructor() {\n super((key) => new ResolveSeq<T, K>(key));\n }\n}\n","export const empty = new Uint8Array(0)\n\nexport function toHex (d: Uint8Array): string {\n return d.reduce((hex, byte) => hex + byte.toString(16).padStart(2, '0'), '')\n}\n\nexport function fromHex (hex: string): Uint8Array {\n const hexes = hex.match(/../g)\n return hexes != null ? new Uint8Array(hexes.map(b => parseInt(b, 16))) : empty\n}\n\nexport function equals (aa: Uint8Array, bb: Uint8Array): boolean {\n if (aa === bb) return true\n if (aa.byteLength !== bb.byteLength) {\n return false\n }\n\n for (let ii = 0; ii < aa.byteLength; ii++) {\n if (aa[ii] !== bb[ii]) {\n return false\n }\n }\n\n return true\n}\n\nexport function coerce (o: ArrayBufferView | ArrayBuffer | Uint8Array): Uint8Array {\n if (o instanceof Uint8Array && o.constructor.name === 'Uint8Array') return o\n if (o instanceof ArrayBuffer) return new Uint8Array(o)\n if (ArrayBuffer.isView(o)) {\n return new Uint8Array(o.buffer, o.byteOffset, o.byteLength)\n }\n throw new Error('Unknown type, must be binary type')\n}\n\nexport function isBinary (o: unknown): o is ArrayBuffer | ArrayBufferView {\n return o instanceof ArrayBuffer || ArrayBuffer.isView(o)\n}\n\nexport function fromString (str: string): Uint8Array {\n return new TextEncoder().encode(str)\n}\n\nexport function toString (b: Uint8Array): string {\n return new TextDecoder().decode(b)\n}\n","/* eslint-disable */\n// base-x encoding / decoding\n// Copyright (c) 2018 base-x contributors\n// Copyright (c) 2014-2018 The Bitcoin Core developers (base58.cpp)\n// Distributed under the MIT software license, see the accompanying\n// file LICENSE or http://www.opensource.org/licenses/mit-license.php.\n/**\n * @param {string} ALPHABET\n * @param {any} name\n */\nfunction base (ALPHABET, name) {\n if (ALPHABET.length >= 255) { throw new TypeError('Alphabet too long') }\n var BASE_MAP = new Uint8Array(256);\n for (var j = 0; j < BASE_MAP.length; j++) {\n BASE_MAP[j] = 255;\n }\n for (var i = 0; i < ALPHABET.length; i++) {\n var x = ALPHABET.charAt(i);\n var xc = x.charCodeAt(0);\n if (BASE_MAP[xc] !== 255) { throw new TypeError(x + ' is ambiguous') }\n BASE_MAP[xc] = i;\n }\n var BASE = ALPHABET.length;\n var LEADER = ALPHABET.charAt(0);\n var FACTOR = Math.log(BASE) / Math.log(256); // log(BASE) / log(256), rounded up\n var iFACTOR = Math.log(256) / Math.log(BASE); // log(256) / log(BASE), rounded up\n /**\n * @param {any[] | Iterable<number>} source\n */\n function encode (source) {\n // @ts-ignore\n if (source instanceof Uint8Array) ; else if (ArrayBuffer.isView(source)) {\n source = new Uint8Array(source.buffer, source.byteOffset, source.byteLength);\n } else if (Array.isArray(source)) {\n source = Uint8Array.from(source);\n }\n if (!(source instanceof Uint8Array)) { throw new TypeError('Expected Uint8Array') }\n if (source.length === 0) { return '' }\n // Skip & count leading zeroes.\n var zeroes = 0;\n var length = 0;\n var pbegin = 0;\n var pend = source.length;\n while (pbegin !== pend && source[pbegin] === 0) {\n pbegin++;\n zeroes++;\n }\n // Allocate enough space in big-endian base58 representation.\n var size = ((pend - pbegin) * iFACTOR + 1) >>> 0;\n var b58 = new Uint8Array(size);\n // Process the bytes.\n while (pbegin !== pend) {\n var carry = source[pbegin];\n // Apply \"b58 = b58 * 256 + ch\".\n var i = 0;\n for (var it1 = size - 1; (carry !== 0 || i < length) && (it1 !== -1); it1--, i++) {\n carry += (256 * b58[it1]) >>> 0;\n b58[it1] = (carry % BASE) >>> 0;\n carry = (carry / BASE) >>> 0;\n }\n if (carry !== 0) { throw new Error('Non-zero carry') }\n length = i;\n pbegin++;\n }\n // Skip leading zeroes in base58 result.\n var it2 = size - length;\n while (it2 !== size && b58[it2] === 0) {\n it2++;\n }\n // Translate the result into a string.\n var str = LEADER.repeat(zeroes);\n for (; it2 < size; ++it2) { str += ALPHABET.charAt(b58[it2]); }\n return str\n }\n /**\n * @param {string | string[]} source\n */\n function decodeUnsafe (source) {\n if (typeof source !== 'string') { throw new TypeError('Expected String') }\n if (source.length === 0) { return new Uint8Array() }\n var psz = 0;\n // Skip leading spaces.\n if (source[psz] === ' ') { return }\n // Skip and count leading '1's.\n var zeroes = 0;\n var length = 0;\n while (source[psz] === LEADER) {\n zeroes++;\n psz++;\n }\n // Allocate enough space in big-endian base256 representation.\n var size = (((source.length - psz) * FACTOR) + 1) >>> 0; // log(58) / log(256), rounded up.\n var b256 = new Uint8Array(size);\n // Process the characters.\n while (source[psz]) {\n // Decode character\n var carry = BASE_MAP[source.charCodeAt(psz)];\n // Invalid character\n if (carry === 255) { return }\n var i = 0;\n for (var it3 = size - 1; (carry !== 0 || i < length) && (it3 !== -1); it3--, i++) {\n carry += (BASE * b256[it3]) >>> 0;\n b256[it3] = (carry % 256) >>> 0;\n carry = (carry / 256) >>> 0;\n }\n if (carry !== 0) { throw new Error('Non-zero carry') }\n length = i;\n psz++;\n }\n // Skip trailing spaces.\n if (source[psz] === ' ') { return }\n // Skip leading zeroes in b256.\n var it4 = size - length;\n while (it4 !== size && b256[it4] === 0) {\n it4++;\n }\n var vch = new Uint8Array(zeroes + (size - it4));\n var j = zeroes;\n while (it4 !== size) {\n vch[j++] = b256[it4++];\n }\n return vch\n }\n /**\n * @param {string | string[]} string\n */\n function decode (string) {\n var buffer = decodeUnsafe(string);\n if (buffer) { return buffer }\n throw new Error(`Non-${name} character`)\n }\n return {\n encode: encode,\n decodeUnsafe: decodeUnsafe,\n decode: decode\n }\n}\nvar src = base;\n\nvar _brrp__multiformats_scope_baseX = src;\n\nexport default _brrp__multiformats_scope_baseX;\n","import { coerce } from '../bytes.js'\nimport basex from '../vendor/base-x.js'\nimport type { BaseCodec, BaseDecoder, BaseEncoder, CombobaseDecoder, Multibase, MultibaseCodec, MultibaseDecoder, MultibaseEncoder, UnibaseDecoder } from './interface.js'\n\ninterface EncodeFn { (bytes: Uint8Array): string }\ninterface DecodeFn { (text: string): Uint8Array }\n\n/**\n * Class represents both BaseEncoder and MultibaseEncoder meaning it\n * can be used to encode to multibase or base encode without multibase\n * prefix.\n */\nclass Encoder<Base extends string, Prefix extends string> implements MultibaseEncoder<Prefix>, BaseEncoder {\n readonly name: Base\n readonly prefix: Prefix\n readonly baseEncode: EncodeFn\n\n constructor (name: Base, prefix: Prefix, baseEncode: EncodeFn) {\n this.name = name\n this.prefix = prefix\n this.baseEncode = baseEncode\n }\n\n encode (bytes: Uint8Array): Multibase<Prefix> {\n if (bytes instanceof Uint8Array) {\n return `${this.prefix}${this.baseEncode(bytes)}`\n } else {\n throw Error('Unknown type, must be binary type')\n }\n }\n}\n\n/**\n * Class represents both BaseDecoder and MultibaseDecoder so it could be used\n * to decode multibases (with matching prefix) or just base decode strings\n * with corresponding base encoding.\n */\nclass Decoder<Base extends string, Prefix extends string> implements MultibaseDecoder<Prefix>, UnibaseDecoder<Prefix>, BaseDecoder {\n readonly name: Base\n readonly prefix: Prefix\n readonly baseDecode: DecodeFn\n private readonly prefixCodePoint: number\n\n constructor (name: Base, prefix: Prefix, baseDecode: DecodeFn) {\n this.name = name\n this.prefix = prefix\n /* c8 ignore next 3 */\n if (prefix.codePointAt(0) === undefined) {\n throw new Error('Invalid prefix character')\n }\n this.prefixCodePoint = prefix.codePointAt(0) as number\n this.baseDecode = baseDecode\n }\n\n decode (text: string): Uint8Array {\n if (typeof text === 'string') {\n if (text.codePointAt(0) !== this.prefixCodePoint) {\n throw Error(`Unable to decode multibase string ${JSON.stringify(text)}, ${this.name} decoder only supports inputs prefixed with ${this.prefix}`)\n }\n return this.baseDecode(text.slice(this.prefix.length))\n } else {\n throw Error('Can only multibase decode strings')\n }\n }\n\n or<OtherPrefix extends string> (decoder: UnibaseDecoder<OtherPrefix> | ComposedDecoder<OtherPrefix>): ComposedDecoder<Prefix | OtherPrefix> {\n return or(this, decoder)\n }\n}\n\ntype Decoders<Prefix extends string> = Record<Prefix, UnibaseDecoder<Prefix>>\n\nclass ComposedDecoder<Prefix extends string> implements MultibaseDecoder<Prefix>, CombobaseDecoder<Prefix> {\n readonly decoders: Decoders<Prefix>\n\n constructor (decoders: Decoders<Prefix>) {\n this.decoders = decoders\n }\n\n or <OtherPrefix extends string> (decoder: UnibaseDecoder<OtherPrefix> | ComposedDecoder<OtherPrefix>): ComposedDecoder<Prefix | OtherPrefix> {\n return or(this, decoder)\n }\n\n decode (input: string): Uint8Array {\n const prefix = input[0] as Prefix\n const decoder = this.decoders[prefix]\n if (decoder != null) {\n return decoder.decode(input)\n } else {\n throw RangeError(`Unable to decode multibase string ${JSON.stringify(input)}, only inputs prefixed with ${Object.keys(this.decoders)} are supported`)\n }\n }\n}\n\nexport function or <L extends string, R extends string> (left: UnibaseDecoder<L> | CombobaseDecoder<L>, right: UnibaseDecoder<R> | CombobaseDecoder<R>): ComposedDecoder<L | R> {\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n return new ComposedDecoder({\n ...(left.decoders ?? { [(left as UnibaseDecoder<L>).prefix]: left }),\n ...(right.decoders ?? { [(right as UnibaseDecoder<R>).prefix]: right })\n } as Decoders<L | R>)\n}\n\nexport class Codec<Base extends string, Prefix extends string> implements MultibaseCodec<Prefix>, MultibaseEncoder<Prefix>, MultibaseDecoder<Prefix>, BaseCodec, BaseEncoder, BaseDecoder {\n readonly name: Base\n readonly prefix: Prefix\n readonly baseEncode: EncodeFn\n readonly baseDecode: DecodeFn\n readonly encoder: Encoder<Base, Prefix>\n readonly decoder: Decoder<Base, Prefix>\n\n constructor (name: Base, prefix: Prefix, baseEncode: EncodeFn, baseDecode: DecodeFn) {\n this.name = name\n this.prefix = prefix\n this.baseEncode = baseEncode\n this.baseDecode = baseDecode\n this.encoder = new Encoder(name, prefix, baseEncode)\n this.decoder = new Decoder(name, prefix, baseDecode)\n }\n\n encode (input: Uint8Array): string {\n return this.encoder.encode(input)\n }\n\n decode (input: string): Uint8Array {\n return this.decoder.decode(input)\n }\n}\n\nexport function from <Base extends string, Prefix extends string> ({ name, prefix, encode, decode }: { name: Base, prefix: Prefix, encode: EncodeFn, decode: DecodeFn }): Codec<Base, Prefix> {\n return new Codec(name, prefix, encode, decode)\n}\n\nexport function baseX <Base extends string, Prefix extends string> ({ name, prefix, alphabet }: { name: Base, prefix: Prefix, alphabet: string }): Codec<Base, Prefix> {\n const { encode, decode } = basex(alphabet, name)\n return from({\n prefix,\n name,\n encode,\n decode: (text: string): Uint8Array => coerce(decode(text))\n })\n}\n\nfunction decode (string: string, alphabet: string, bitsPerChar: number, name: string): Uint8Array {\n // Build the character lookup table:\n const codes: Record<string, number> = {}\n for (let i = 0; i < alphabet.length; ++i) {\n codes[alphabet[i]] = i\n }\n\n // Count the padding bytes:\n let end = string.length\n while (string[end - 1] === '=') {\n --end\n }\n\n // Allocate the output:\n const out = new Uint8Array((end * bitsPerChar / 8) | 0)\n\n // Parse the data:\n let bits = 0 // Number of bits currently in the buffer\n let buffer = 0 // Bits waiting to be written out, MSB first\n let written = 0 // Next byte to write\n for (let i = 0; i < end; ++i) {\n // Read one character from the string:\n const value = codes[string[i]]\n if (value === undefined) {\n throw new SyntaxError(`Non-${name} character`)\n }\n\n // Append the bits to the buffer:\n buffer = (buffer << bitsPerChar) | value\n bits += bitsPerChar\n\n // Write out some bits if the buffer has a byte's worth:\n if (bits >= 8) {\n bits -= 8\n out[written++] = 0xff & (buffer >> bits)\n }\n }\n\n // Verify that we have received just enough bits:\n if (bits >= bitsPerChar || (0xff & (buffer << (8 - bits))) !== 0) {\n throw new SyntaxError('Unexpected end of data')\n }\n\n return out\n}\n\nfunction encode (data: Uint8Array, alphabet: string, bitsPerChar: number): string {\n const pad = alphabet[alphabet.length - 1] === '='\n const mask = (1 << bitsPerChar) - 1\n let out = ''\n\n let bits = 0 // Number of bits currently in the buffer\n let buffer = 0 // Bits waiting to be written out, MSB first\n for (let i = 0; i < data.length; ++i) {\n // Slurp data into the buffer:\n buffer = (buffer << 8) | data[i]\n bits += 8\n\n // Write out as much as we can:\n while (bits > bitsPerChar) {\n bits -= bitsPerChar\n out += alphabet[mask & (buffer >> bits)]\n }\n }\n\n // Partial character:\n if (bits !== 0) {\n out += alphabet[mask & (buffer << (bitsPerChar - bits))]\n }\n\n // Add padding characters until we hit a byte boundary:\n if (pad) {\n while (((out.length * bitsPerChar) & 7) !== 0) {\n out += '='\n }\n }\n\n return out\n}\n\n/**\n * RFC4648 Factory\n */\nexport function rfc4648 <Base extends string, Prefix extends string> ({ name, prefix, bitsPerChar, alphabet }: { name: Base, prefix: Prefix, bitsPerChar: number, alphabet: string }): Codec<Base, Prefix> {\n return from({\n prefix,\n name,\n encode (input: Uint8Array): string {\n return encode(input, alphabet, bitsPerChar)\n },\n decode (input: string): Uint8Array {\n return decode(input, alphabet, bitsPerChar, name)\n }\n })\n}\n","import { rfc4648 } from './base.js'\n\nexport const base32 = rfc4648({\n prefix: 'b',\n name: 'base32',\n alphabet: 'abcdefghijklmnopqrstuvwxyz234567',\n bitsPerChar: 5\n})\n\nexport const base32upper = rfc4648({\n prefix: 'B',\n name: 'base32upper',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567',\n bitsPerChar: 5\n})\n\nexport const base32pad = rfc4648({\n prefix: 'c',\n name: 'base32pad',\n alphabet: 'abcdefghijklmnopqrstuvwxyz234567=',\n bitsPerChar: 5\n})\n\nexport const base32padupper = rfc4648({\n prefix: 'C',\n name: 'base32padupper',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=',\n bitsPerChar: 5\n})\n\nexport const base32hex = rfc4648({\n prefix: 'v',\n name: 'base32hex',\n alphabet: '0123456789abcdefghijklmnopqrstuv',\n bitsPerChar: 5\n})\n\nexport const base32hexupper = rfc4648({\n prefix: 'V',\n name: 'base32hexupper',\n alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUV',\n bitsPerChar: 5\n})\n\nexport const base32hexpad = rfc4648({\n prefix: 't',\n name: 'base32hexpad',\n alphabet: '0123456789abcdefghijklmnopqrstuv=',\n bitsPerChar: 5\n})\n\nexport const base32hexpadupper = rfc4648({\n prefix: 'T',\n name: 'base32hexpadupper',\n alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUV=',\n bitsPerChar: 5\n})\n\nexport const base32z = rfc4648({\n prefix: 'h',\n name: 'base32z',\n alphabet: 'ybndrfg8ejkmcpqxot1uwisza345h769',\n bitsPerChar: 5\n})\n","import { baseX } from './base.js'\n\nexport const base58btc = baseX({\n name: 'base58btc',\n prefix: 'z',\n alphabet: '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'\n})\n\nexport const base58flickr = baseX({\n name: 'base58flickr',\n prefix: 'Z',\n alphabet: '123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ'\n})\n","/* eslint-disable */\nvar encode_1 = encode;\n\nvar MSB = 0x80\n , REST = 0x7F\n , MSBALL = ~REST\n , INT = Math.pow(2, 31);\n\n/**\n * @param {number} num\n * @param {number[]} out\n * @param {number} offset\n */\nfunction encode(num, out, offset) {\n out = out || [];\n offset = offset || 0;\n var oldOffset = offset;\n\n while(num >= INT) {\n out[offset++] = (num & 0xFF) | MSB;\n num /= 128;\n }\n while(num & MSBALL) {\n out[offset++] = (num & 0xFF) | MSB;\n num >>>= 7;\n }\n out[offset] = num | 0;\n \n // @ts-ignore\n encode.bytes = offset - oldOffset + 1;\n \n return out\n}\n\nvar decode = read;\n\nvar MSB$1 = 0x80\n , REST$1 = 0x7F;\n\n/**\n * @param {string | any[]} buf\n * @param {number} offset\n */\nfunction read(buf, offset) {\n var res = 0\n , offset = offset || 0\n , shift = 0\n , counter = offset\n , b\n , l = buf.length;\n\n do {\n if (counter >= l) {\n // @ts-ignore\n read.bytes = 0;\n throw new RangeError('Could not decode varint')\n }\n b = buf[counter++];\n res += shift < 28\n ? (b & REST$1) << shift\n : (b & REST$1) * Math.pow(2, shift);\n shift += 7;\n } while (b >= MSB$1)\n\n // @ts-ignore\n read.bytes = counter - offset;\n\n return res\n}\n\nvar N1 = Math.pow(2, 7);\nvar N2 = Math.pow(2, 14);\nvar N3 = Math.pow(2, 21);\nvar N4 = Math.pow(2, 28);\nvar N5 = Math.pow(2, 35);\nvar N6 = Math.pow(2, 42);\nvar N7 = Math.pow(2, 49);\nvar N8 = Math.pow(2, 56);\nvar N9 = Math.pow(2, 63);\n\nvar length = function (/** @type {number} */ value) {\n return (\n value < N1 ? 1\n : value < N2 ? 2\n : value < N3 ? 3\n : value < N4 ? 4\n : value < N5 ? 5\n : value < N6 ? 6\n : value < N7 ? 7\n : value < N8 ? 8\n : value < N9 ? 9\n : 10\n )\n};\n\nvar varint = {\n encode: encode_1\n , decode: decode\n , encodingLength: length\n};\n\nvar _brrp_varint = varint;\n\nexport default _brrp_varint;\n","import varint from './vendor/varint.js'\n\nexport function decode (data: Uint8Array, offset = 0): [number, number] {\n const code = varint.decode(data, offset)\n return [code, varint.decode.bytes]\n}\n\nexport function encodeTo (int: number, target: Uint8Array, offset = 0): Uint8Array {\n varint.encode(int, target, offset)\n return target\n}\n\nexport function encodingLength (int: number): number {\n return varint.encodingLength(int)\n}\n","import { coerce, equals as equalBytes } from '../bytes.js'\nimport * as varint from '../varint.js'\nimport type { MultihashDigest } from './interface.js'\n\n/**\n * Creates a multihash digest.\n */\nexport function create <Code extends number> (code: Code, digest: Uint8Array): Digest<Code, number> {\n const size = digest.byteLength\n const sizeOffset = varint.encodingLength(code)\n const digestOffset = sizeOffset + varint.encodingLength(size)\n\n const bytes = new Uint8Array(digestOffset + size)\n varint.encodeTo(code, bytes, 0)\n varint.encodeTo(size, bytes, sizeOffset)\n bytes.set(digest, digestOffset)\n\n return new Digest(code, size, digest, bytes)\n}\n\n/**\n * Turns bytes representation of multihash digest into an instance.\n */\nexport function decode (multihash: Uint8Array): MultihashDigest {\n const bytes = coerce(multihash)\n const [code, sizeOffset] = varint.decode(bytes)\n const [size, digestOffset] = varint.decode(bytes.subarray(sizeOffset))\n const digest = bytes.subarray(sizeOffset + digestOffset)\n\n if (digest.byteLength !== size) {\n throw new Error('Incorrect length')\n }\n\n return new Digest(code, size, digest, bytes)\n}\n\nexport function equals (a: MultihashDigest, b: unknown): b is MultihashDigest {\n if (a === b) {\n return true\n } else {\n const data = b as { code?: unknown, size?: unknown, bytes?: unknown }\n\n return (\n a.code === data.code &&\n a.size === data.size &&\n data.bytes instanceof Uint8Array &&\n equalBytes(a.bytes, data.bytes)\n )\n }\n}\n\n/**\n * Represents a multihash digest which carries information about the\n * hashing algorithm and an actual hash digest.\n */\nexport class Digest<Code extends number, Size extends number> implements MultihashDigest {\n readonly code: Code\n readonly size: Size\n readonly digest: Uint8Array\n readonly bytes: Uint8Array\n\n /**\n * Creates a multihash digest.\n */\n constructor (code: Code, size: Size, digest: Uint8Array, bytes: Uint8Array) {\n this.code = code\n this.size = size\n this.digest = digest\n this.bytes = bytes\n }\n}\n","/* eslint-disable @typescript-eslint/no-unnecessary-type-constraint */\n/* eslint-disable no-use-before-define */\n\nimport type { MultibaseEncoder, MultibaseDecoder, Multibase } from '../bases/interface.js'\nimport type { Phantom, ByteView } from '../block/interface.js'\nimport type { MultihashDigest } from '../hashes/interface.js'\n\nexport type { MultihashDigest, MultibaseEncoder, MultibaseDecoder }\nexport type Version = 0 | 1\n\nexport type DAG_PB = 0x70\nexport type SHA_256 = 0x12\n\n/**\n * Represents an IPLD link to a specific data of type `T`.\n *\n * @template T - Logical type of the data being linked to.\n * @template C - multicodec code corresponding to a codec linked data is encoded with\n * @template A - multicodec code corresponding to the hashing algorithm of the CID\n * @template V - CID version\n */\nexport interface Link<\n Data extends unknown = unknown,\n Format extends number = number,\n Alg extends number = number,\n V extends Version = 1\n > extends Phantom<Data> {\n readonly version: V\n readonly code: Format\n readonly multihash: MultihashDigest<Alg>\n\n readonly byteOffset: number\n readonly byteLength: number\n readonly bytes: ByteView<Link<Data, Format, Alg, V>>\n\n equals(other: unknown): other is Link<Data, Format, Alg, Version>\n\n toString<Prefix extends string>(base?: MultibaseEncoder<Prefix>): ToString<Link<Data, Format, Alg, Version>, Prefix>\n link(): Link<Data, Format, Alg, V>\n\n toV1(): Link<Data, Format, Alg, 1>\n}\n\nexport interface LinkJSON<T extends UnknownLink = UnknownLink> {\n '/': ToString<T>\n}\n\nexport interface LegacyLink<T extends unknown = unknown> extends Link<T, DAG_PB, SHA_256, 0> {\n}\n\nexport type UnknownLink =\n | LegacyLink<unknown>\n | Link<unknown, number, number, Version>\n\nexport type ToString<T, Prefix extends string = string> = Multibase<Prefix> & Phantom<T>\n\nexport type { ByteView }\n","import { base32 } from './bases/base32.js'\nimport { base58btc } from './bases/base58.js'\nimport { coerce } from './bytes.js'\nimport * as Digest from './hashes/digest.js'\nimport * as varint from './varint.js'\nimport type * as API from './link/interface.js'\n\n// This way TS will also expose all the types from module\nexport * from './link/interface.js'\n\nexport function format <T extends API.Link<unknown, number, number, API.Version>, Prefix extends string> (link: T, base?: API.MultibaseEncoder<Prefix>): API.ToString<T, Prefix> {\n const { bytes, version } = link\n switch (version) {\n case 0:\n return toStringV0(\n bytes,\n baseCache(link),\n base as API.MultibaseEncoder<'z'> ?? base58btc.encoder\n )\n default:\n return toStringV1(\n bytes,\n baseCache(link),\n (base ?? base32.encoder) as API.MultibaseEncoder<Prefix>\n )\n }\n}\n\nexport function toJSON <Link extends API.UnknownLink> (link: Link): API.LinkJSON<Link> {\n return {\n '/': format(link)\n }\n}\n\nexport function fromJSON <Link extends API.UnknownLink> (json: API.LinkJSON<Link>): CID<unknown, number, number, API.Version> {\n return CID.parse(json['/'])\n}\n\nconst cache = new WeakMap<API.UnknownLink, Map<string, string>>()\n\nfunction baseCache (cid: API.UnknownLink): Map<string, string> {\n const baseCache = cache.get(cid)\n if (baseCache == null) {\n const baseCache = new Map()\n cache.set(cid, baseCache)\n return baseCache\n }\n return baseCache\n}\n\nexport class CID<Data = unknown, Format extends number = number, Alg extends number = number, Version extends API.Version = API.Version> implements API.Link<Data, Format, Alg, Version> {\n readonly code: Format\n readonly version: Version\n readonly multihash: API.MultihashDigest<Alg>\n readonly bytes: Uint8Array\n readonly '/': Uint8Array\n\n /**\n * @param version - Version of the CID\n * @param code - Code of the codec content is encoded in, see https://github.com/multiformats/multicodec/blob/master/table.csv\n * @param multihash - (Multi)hash of the of the content.\n */\n constructor (version: Version, code: Format, multihash: API.MultihashDigest<Alg>, bytes: Uint8Array) {\n this.code = code\n this.version = version\n this.multihash = multihash\n this.bytes = bytes\n\n // flag to serializers that this is a CID and\n // should be treated specially\n this['/'] = bytes\n }\n\n /**\n * Signalling `cid.asCID === cid` has been replaced with `cid['/'] === cid.bytes`\n * please either use `CID.asCID(cid)` or switch to new signalling mechanism\n *\n * @deprecated\n */\n get asCID (): this {\n return this\n }\n\n // ArrayBufferView\n get byteOffset (): number {\n return this.bytes.byteOffset\n }\n\n // ArrayBufferView\n get byteLength (): number {\n return this.bytes.byteLength\n }\n\n toV0 (): CID<Data, API.DAG_PB, API.SHA_256, 0> {\n switch (this.version) {\n case 0: {\n return this as CID<Data, API.DAG_PB, API.SHA_256, 0>\n }\n case 1: {\n const { code, multihash } = this\n\n if (code !== DAG_PB_CODE) {\n throw new Error('Cannot convert a non dag-pb CID to CIDv0')\n }\n\n // sha2-256\n if (multihash.code !== SHA_256_CODE) {\n throw new Error('Cannot convert non sha2-256 multihash CID to CIDv0')\n }\n\n return (\n CID.createV0(\n multihash as API.MultihashDigest<API.SHA_256>\n )\n )\n }\n default: {\n throw Error(\n `Can not convert CID version ${this.version} to version 0. This is a bug please report`\n )\n }\n }\n }\n\n toV1 (): CID<Data, Format, Alg, 1> {\n switch (this.version) {\n case 0: {\n const { code, digest } = this.multihash\n const multihash = Digest.create(code, digest)\n return (\n CID.createV1(this.code, multihash)\n )\n }\n case 1: {\n return this as CID<Data, Format, Alg, 1>\n }\n default: {\n throw Error(\n `Can not convert CID version ${this.version} to version 1. This is a bug please report`\n )\n }\n }\n }\n\n equals (other: unknown): other is CID<Data, Format, Alg, Version> {\n return CID.equals(this, other)\n }\n\n static equals <Data, Format extends number, Alg extends number, Version extends API.Version>(self: API.Link<Data, Format, Alg, Version>, other: unknown): other is CID {\n const unknown = other as { code?: unknown, version?: unknown, multihash?: unknown }\n return (\n unknown != null &&\n self.code === unknown.code &&\n self.version === unknown.version &&\n Digest.equals(self.multihash, unknown.multihash)\n )\n }\n\n toString (base?: API.MultibaseEncoder<string>): string {\n return format(this, base)\n }\n\n toJSON (): API.LinkJSON<this> {\n return { '/': format(this) }\n }\n\n link (): this {\n return this\n }\n\n readonly [Symbol.toStringTag] = 'CID';\n\n // Legacy\n\n [Symbol.for('nodejs.util.inspect.custom')] (): string {\n return `CID(${this.toString()})`\n }\n\n /**\n * Takes any input `value` and returns a `CID` instance if it was\n * a `CID` otherwise returns `null`. If `value` is instanceof `CID`\n * it will return value back. If `value` is not instance of this CID\n * class, but is compatible CID it will return new instance of this\n * `CID` class. Otherwise returns null.\n *\n * This allows two different incompatible versions of CID library to\n * co-exist and interop as long as binary interface is compatible.\n */\n static asCID <Data, Format extends number, Alg extends number, Version extends API.Version, U>(input: API.Link<Data, Format, Alg, Version> | U): CID<Data, Format, Alg, Version> | null {\n if (input == null) {\n return null\n }\n\n const value = input as any\n if (value instanceof CID) {\n // If value is instance of CID then we're all set.\n return value\n } else if ((value['/'] != null && value['/'] === value.bytes) || value.asCID === value) {\n // If value isn't instance of this CID class but `this.asCID === this` or\n // `value['/'] === value.bytes` is true it is CID instance coming from a\n // different implementation (diff version or duplicate). In that case we\n // rebase it to this `CID` implementation so caller is guaranteed to get\n // instance with expected API.\n const { version, code, multihash, bytes } = value\n return new CID(\n version,\n code,\n multihash as API.MultihashDigest<Alg>,\n bytes ?? encodeCID(version, code, multihash.bytes)\n )\n } else if (value[cidSymbol] === true) {\n // If value is a CID from older implementation that used to be tagged via\n // symbol we still rebase it to the this `CID` implementation by\n // delegating that to a constructor.\n const { version, multihash, code } = value\n const digest = Digest.decode(multihash) as API.MultihashDigest<Alg>\n return CID.create(version, code, digest)\n } else {\n // Otherwise value is not a CID (or an incompatible version of it) in\n // which case we return `null`.\n return null\n }\n }\n\n /**\n * @param version - Version of the CID\n * @param code - Code of the codec content is encoded in, see https://github.com/multiformats/multicodec/blob/master/table.csv\n * @param digest - (Multi)hash of the of the content.\n */\n static create <Data, Format extends number, Alg extends number, Version extends API.Version>(version: Version, code: Format, digest: API.MultihashDigest<Alg>): CID<Data, Format, Alg, Version> {\n if (typeof code !== 'number') {\n throw new Error('String codecs are no longer supported')\n }\n\n if (!(digest.bytes instanceof Uint8Array)) {\n throw new Error('Invalid digest')\n }\n\n switch (version) {\n case 0: {\n if (code !== DAG_PB_CODE) {\n throw new Error(\n `Version 0 CID must use dag-pb (code: ${DAG_PB_CODE}) block encoding`\n )\n } else {\n return new CID(version, code, digest, digest.bytes)\n }\n }\n case 1: {\n const bytes = encodeCID(version, code, digest.bytes)\n return new CID(version, code, digest, bytes)\n }\n default: {\n throw new Error('Invalid version')\n }\n }\n }\n\n /**\n * Simplified version of `create` for CIDv0.\n */\n static createV0 <T = unknown>(digest: API.MultihashDigest<typeof SHA_256_CODE>): CID<T, typeof DAG_PB_CODE, typeof SHA_256_CODE, 0> {\n return CID.create(0, DAG_PB_CODE, digest)\n }\n\n /**\n * Simplified version of `create` for CIDv1.\n *\n * @param code - Content encoding format code.\n * @param digest - Multihash of the content.\n */\n static createV1 <Data, Code extends number, Alg extends number>(code: Code, digest: API.MultihashDigest<Alg>): CID<Data, Code, Alg, 1> {\n return CID.create(1, code, digest)\n }\n\n /**\n * Decoded a CID from its binary representation. The byte array must contain\n * only the CID with no additional bytes.\n *\n * An error will be thrown if the bytes provided do not contain a valid\n * binary representation of a CID.\n */\n static decode <Data, Code extends number, Alg extends number, Version extends API.Version>(bytes: API.ByteView<API.Link<Data, Code, Alg, Version>>): CID<Data, Code, Alg, Version> {\n const [cid, remainder] = CID.decodeFirst(bytes)\n if (remainder.length !== 0) {\n throw new Error('Incorrect length')\n }\n return cid\n }\n\n /**\n * Decoded a CID from its binary representation at the beginning of a byte\n * array.\n *\n * Returns an array with the first element containing the CID and the second\n * element containing the remainder of the original byte array. The remainder\n * will be a zero-length byte array if the provided bytes only contained a\n * binary CID representation.\n */\n static decodeFirst <T, C extends number, A extends number, V extends API.Version>(bytes: API.ByteView<API.Link<T, C, A, V>>): [CID<T, C, A, V>, Uint8Array] {\n const specs = CID.inspectBytes(bytes)\n const prefixSize = specs.size - specs.multihashSize\n const multihashBytes = coerce(\n bytes.subarray(prefixSize, prefixSize + specs.multihashSize)\n )\n if (multihashBytes.byteLength !== specs.multihashSize) {\n throw new Error('Incorrect length')\n }\n const digestBytes = multihashBytes.subarray(\n specs.multihashSize - specs.digestSize\n )\n const digest = new Digest.Digest(\n specs.multihashCode,\n specs.digestSize,\n digestBytes,\n multihashBytes\n )\n const cid =\n specs.version === 0\n ? CID.createV0(digest as API.MultihashDigest<API.SHA_256>)\n : CID.createV1(specs.codec, digest)\n return [cid as CID<T, C, A, V>, bytes.subarray(specs.size)]\n }\n\n /**\n * Inspect the initial bytes of a CID to determine its properties.\n *\n * Involves decoding up to 4 varints. Typically this will require only 4 to 6\n * bytes but for larger multicodec code values and larger multihash digest\n * lengths these varints can be quite large. It is recommended that at least\n * 10 bytes be made available in the `initialBytes` argument for a complete\n * inspection.\n */\n static inspectBytes <T, C extends number, A extends number, V extends API.Version>(initialBytes: API.ByteView<API.Link<T, C, A, V>>): { version: V, codec: C, multihashCode: A, digestSize: number, multihashSize: number, size: number } {\n let offset = 0\n const next = (): number => {\n const [i, length] = varint.decode(initialBytes.subarray(offset))\n offset += length\n return i\n }\n\n let version = next() as V\n let codec = DAG_PB_CODE as C\n if (version as number === 18) {\n // CIDv0\n version = 0 as V\n offset = 0\n } else {\n codec = next() as C\n }\n\n if (version !== 0 && version !== 1) {\n throw new RangeError(`Invalid CID version ${version}`)\n }\n\n const prefixSize = offset\n const multihashCode = next() as A // multihash code\n const digestSize = next() // multihash length\n const size = offset + digestSize\n const multihashSize = size - prefixSize\n\n return { version, codec, multihashCode, digestSize, multihashSize, size }\n }\n\n /**\n * Takes cid in a string representation and creates an instance. If `base`\n * decoder is not provided will use a default from the configuration. It will\n * throw an error if encoding of the CID is not compatible with supplied (or\n * a default decoder).\n */\n static parse <Prefix extends string, Data, Code extends number, Alg extends number, Version extends API.Version>(source: API.ToString<API.Link<Data, Code, Alg, Version>, Prefix>, base?: API.MultibaseDecoder<Prefix>): CID<Data, Code, Alg, Version> {\n const [prefix, bytes] = parseCIDtoBytes(source, base)\n\n const cid = CID.decode(bytes)\n\n if (cid.version === 0 && source[0] !== 'Q') {\n throw Error('Version 0 CID string must not include multibase prefix')\n }\n\n // Cache string representation to avoid computing it on `this.toString()`\n baseCache(cid).set(prefix, source)\n\n return cid\n }\n}\n\nfunction parseCIDtoBytes <Prefix extends string, Data, Code extends number, Alg extends number, Version extends API.Version> (source: API.ToString<API.Link<Data, Code, Alg, Version>, Prefix>, base?: API.MultibaseDecoder<Prefix>): [Prefix, API.ByteView<API.Link<Data, Code, Alg, Version>>] {\n switch (source[0]) {\n // CIDv0 is parsed differently\n case 'Q': {\n const decoder = base ?? base58btc\n return [\n base58btc.prefix as Prefix,\n decoder.decode(`${base58btc.prefix}${source}`)\n ]\n }\n case base58btc.prefix: {\n const decoder = base ?? base58btc\n return [base58btc.prefix as Prefix, decoder.decode(source)]\n }\n case base32.prefix: {\n const decoder = base ?? base32\n return [base32.prefix as Prefix, decoder.decode(source)]\n }\n default: {\n if (base == null) {\n throw Error(\n 'To parse non base32 or base58btc encoded CID multibase decoder must be provided'\n )\n }\n return [source[0] as Prefix, base.decode(source)]\n }\n }\n}\n\nfunction toStringV0 (bytes: Uint8Array, cache: Map<string, string>, base: API.MultibaseEncoder<'z'>): string {\n const { prefix } = base\n if (prefix !== base58btc.prefix) {\n throw Error(`Cannot string encode V0 in ${base.name} encoding`)\n }\n\n const cid = cache.get(prefix)\n if (cid == null) {\n const cid = base.encode(bytes).slice(1)\n cache.set(prefix, cid)\n return cid\n } else {\n return cid\n }\n}\n\nfunction toStringV1 <Prefix extends string> (bytes: Uint8Array, cache: Map<string, string>, base: API.MultibaseEncoder<Prefix>): string {\n const { prefix } = base\n const cid = cache.get(prefix)\n if (cid == null) {\n const cid = base.encode(bytes)\n cache.set(prefix, cid)\n return cid\n } else {\n return cid\n }\n}\n\nconst DAG_PB_CODE = 0x70\nconst SHA_256_CODE = 0x12\n\nfunction encodeCID (version: API.Version, code: number, multihash: Uint8Array): Uint8Array {\n const codeOffset = varint.encodingLength(version)\n const hashOffset = codeOffset + varint.encodingLength(code)\n const bytes = new Uint8Array(hashOffset + multihash.byteLength)\n varint.encodeTo(version, bytes, 0)\n varint.encodeTo(code, bytes, codeOffset)\n bytes.set(multihash, hashOffset)\n return bytes\n}\n\nconst cidSymbol = Symbol.for('@ipld/js-cid/CID')\n","import * as Digest from './digest.js'\nimport type { MultihashHasher } from './interface.js'\n\ntype Await<T> = Promise<T> | T\n\nexport function from <Name extends string, Code extends number> ({ name, code, encode }: { name: Name, code: Code, encode(input: Uint8Array): Await<Uint8Array> }): Hasher<Name, Code> {\n return new Hasher(name, code, encode)\n}\n\n/**\n * Hasher represents a hashing algorithm implementation that produces as\n * `MultihashDigest`.\n */\nexport class Hasher<Name extends string, Code extends number> implements MultihashHasher<Code> {\n readonly name: Name\n readonly code: Code\n readonly encode: (input: Uint8Array) => Await<Uint8Array>\n\n constructor (name: Name, code: Code, encode: (input: Uint8Array) => Await<Uint8Array>) {\n this.name = name\n this.code = code\n this.encode = encode\n }\n\n digest (input: Uint8Array): Await<Digest.Digest<Code, number>> {\n if (input instanceof Uint8Array) {\n const result = this.encode(input)\n return result instanceof Uint8Array\n ? Digest.create(this.code, result)\n /* c8 ignore next 1 */\n : result.then(digest => Digest.create(this.code, digest))\n } else {\n throw Error('Unknown type, must be binary type')\n /* c8 ignore next 1 */\n }\n }\n}\n","// Base encoders / decoders just base encode / decode between binary and\n// textual representation. They are unaware of multibase.\n\n/**\n * Base encoder just encodes bytes into base encoded string.\n */\nexport interface BaseEncoder {\n /**\n * Base encodes to a **plain** (and not a multibase) string. Unlike\n * `encode` no multibase prefix is added.\n */\n baseEncode(bytes: Uint8Array): string\n}\n\n/**\n * Base decoder decodes encoded with matching base encoding into bytes.\n */\nexport interface BaseDecoder {\n /**\n * Decodes **plain** (and not a multibase) string. Unlike\n * decode\n */\n baseDecode(text: string): Uint8Array\n}\n\n/**\n * Base codec is just dual of encoder and decoder.\n */\nexport interface BaseCodec {\n encoder: BaseEncoder\n decoder: BaseDecoder\n}\n\n/**\n * Multibase represents base encoded strings with a prefix first character\n * describing it's encoding.\n */\nexport type Multibase<Prefix extends string> =\n | string\n | string & { [0]: Prefix }\n\n/**\n * Multibase encoder for the specific base encoding encodes bytes into\n * multibase of that encoding.\n */\nexport interface MultibaseEncoder<Prefix extends string> {\n /**\n * Name of the encoding.\n */\n name: string\n /**\n * Prefix character for that base encoding.\n */\n prefix: Prefix\n /**\n * Encodes binary data into **multibase** string (which will have a\n * prefix added).\n */\n encode(bytes: Uint8Array): Multibase<Prefix>\n}\n\n/**\n * Interface implemented by multibase decoder, that takes multibase strings\n * to bytes. It may support single encoding like base32 or multiple encodings\n * like base32, base58btc, base64. If passed multibase is incompatible it will\n * throw an exception.\n */\nexport interface MultibaseDecoder<Prefix extends string> {\n /**\n * Decodes **multibase** string (which must have a multibase prefix added).\n * If prefix does not match\n */\n decode(multibase: Multibase<Prefix>): Uint8Array\n}\n\n/**\n * Dual of multibase encoder and decoder.\n */\nexport interface MultibaseCodec<Prefix extends string> {\n name: string\n prefix: Prefix\n encoder: MultibaseEncoder<Prefix>\n decoder: MultibaseDecoder<Prefix>\n}\n\nexport interface UnibaseDecoder<Prefix extends string> extends MultibaseDecoder<Prefix> {\n // Reserve this property so it can be used to derive type.\n readonly decoders?: null\n\n readonly prefix: Prefix\n}\n\nexport interface CombobaseDecoder<Prefix extends string> extends MultibaseDecoder<Prefix> {\n readonly decoders: Record<Prefix, UnibaseDecoder<Prefix>>\n}\n","// # Multihash\n\n/**\n * Represents a multihash digest which carries information about the\n * hashing algorithm and an actual hash digest.\n */\n// Note: In the current version there is no first class multihash\n// representation (plain Uint8Array is used instead) instead there seems to be\n// a bunch of places that parse it to extract (code, digest, size). By creating\n// this first class representation we avoid reparsing and things generally fit\n// really nicely.\nexport interface MultihashDigest<Code extends number = number> {\n /**\n * Code of the multihash\n */\n code: Code\n\n /**\n * Raw digest (without a hashing algorithm info)\n */\n digest: Uint8Array\n\n /**\n * byte length of the `this.digest`\n */\n size: number\n\n /**\n * Binary representation of this multihash digest.\n */\n bytes: Uint8Array\n}\n\n/**\n * Hasher represents a hashing algorithm implementation that produces as\n * `MultihashDigest`.\n */\nexport interface MultihashHasher<Code extends number = number> {\n /**\n * Takes binary `input` and returns it (multi) hash digest. Return value is\n * either promise of a digest or a digest. This way general use can `await`\n * while performance critical code may asses return value to decide whether\n * await is needed.\n */\n digest(input: Uint8Array): Promise<MultihashDigest<Code>> | MultihashDigest<Code>\n\n /**\n * Name of the multihash\n */\n name: string\n\n /**\n * Code of the multihash\n */\n code: Code\n}\n\n/**\n * Sync variant of `MultihashHasher` that refines return type of the `digest`\n * to `MultihashDigest`. It is subtype of `MultihashHasher` so implementations\n * of this interface can be passed anywhere `MultihashHasher` is expected,\n * allowing consumer to either `await` or check the return type to decide\n * whether to await or proceed with return value.\n *\n * `SyncMultihashHasher` is useful in certain APIs where async hashing would be\n * impractical e.g. implementation of Hash Array Mapped Trie (HAMT).\n */\nexport interface SyncMultihashHasher<Code extends number = number> extends MultihashHasher<Code> {\n digest(input: Uint8Array): MultihashDigest<Code>\n}\n","export {};\n//# sourceMappingURL=interface.js.map","export {};\n//# sourceMappingURL=interface.js.map","export * from './bases/interface.js'\nexport * from './hashes/interface.js'\nexport * from './codecs/interface.js'\nexport * from './link/interface.js'\nexport * from './block/interface.js'\n","/**\n * @packageDocumentation\n *\n * This library defines common interfaces and low level building blocks for various interrelated multiformat technologies (multicodec, multihash, multibase, and CID). They can be used to implement custom base encoders / decoders / codecs, codec encoders /decoders and multihash hashers that comply to the interface that layers above assume.\n *\n * This library provides implementations for most basics and many others can be found in linked repositories.\n *\n * ```TypeScript\n * import { CID } from 'multiformats/cid'\n * import * as json from 'multiformats/codecs/json'\n * import { sha256 } from 'multiformats/hashes/sha2'\n *\n * const bytes = json.encode({ hello: 'world' })\n *\n * const hash = await sha256.digest(bytes)\n * const cid = CID.create(1, json.code, hash)\n * //> CID(bagaaierasords4njcts6vs7qvdjfcvgnume4hqohf65zsfguprqphs3icwea)\n * ```\n *\n * ## Creating Blocks\n *\n * ```TypeScript\n * import * as Block from 'multiformats/block'\n * import * as codec from '@ipld/dag-cbor'\n * import { sha256 as hasher } from 'multiformats/hashes/sha2'\n *\n * const value = { hello: 'world' }\n *\n * // encode a block\n * let block = await Block.encode({ value, codec, hasher })\n *\n * block.value // { hello: 'world' }\n * block.bytes // Uint8Array\n * block.cid // CID() w/ sha2-256 hash address and dag-cbor codec\n *\n * // you can also decode blocks from their binary state\n * block = await Block.decode({ bytes: block.bytes, codec, hasher })\n *\n * // if you have the cid you can also verify the hash on decode\n * block = await Block.create({ bytes: block.bytes, cid: block.cid, codec, hasher })\n * ```\n *\n * ## Multibase Encoders / Decoders / Codecs\n *\n * CIDs can be serialized to string representation using multibase encoders that implement [`MultibaseEncoder`](https://github.com/multiformats/js-multiformats/blob/master/src/bases/interface.ts) interface. This library provides quite a few implementations that can be imported:\n *\n * ```TypeScript\n * import { base64 } from \"multiformats/bases/base64\"\n * cid.toString(base64.encoder)\n * //> 'mAYAEEiCTojlxqRTl6svwqNJRVM2jCcPBxy+7mRTUfGDzy2gViA'\n * ```\n *\n * Parsing CID string serialized CIDs requires multibase decoder that implements [`MultibaseDecoder`](https://github.com/multiformats/js-multiformats/blob/master/src/bases/interface.ts) interface. This library provides a decoder for every encoder it provides:\n *\n * ```TypeScript\n * CID.parse('mAYAEEiCTojlxqRTl6svwqNJRVM2jCcPBxy+7mRTUfGDzy2gViA', base64.decoder)\n * //> CID(bagaaierasords4njcts6vs7qvdjfcvgnume4hqohf65zsfguprqphs3icwea)\n * ```\n *\n * Dual of multibase encoder & decoder is defined as multibase codec and it exposes\n * them as `encoder` and `decoder` properties. For added convenience codecs also\n * implement `MultibaseEncoder` and `MultibaseDecoder` interfaces so they could be\n * used as either or both:\n *\n * ```TypeScript\n * cid.toString(base64)\n * CID.parse(cid.toString(base64), base64)\n * ```\n *\n * **Note:** CID implementation comes bundled with `base32` and `base58btc`\n * multibase codecs so that CIDs can be base serialized to (version specific)\n * default base encoding and parsed without having to supply base encoders/decoders:\n *\n * ```TypeScript\n * const v1 = CID.parse('bagaaierasords4njcts6vs7qvdjfcvgnume4hqohf65zsfguprqphs3icwea')\n * v1.toString()\n * //> 'bagaaierasords4njcts6vs7qvdjfcvgnume4hqohf65zsfguprqphs3icwea'\n *\n * const v0 = CID.parse('QmdfTbBqBPQ7VNxZEYEj14VmRuZBkqFbiwReogJgS1zR1n')\n * v0.toString()\n * //> 'QmdfTbBqBPQ7VNxZEYEj14VmRuZBkqFbiwReogJgS1zR1n'\n * v0.toV1().toString()\n * //> 'bafybeihdwdcefgh4dqkjv67uzcmw7ojee6xedzdetojuzjevtenxquvyku'\n * ```\n *\n * ## Multicodec Encoders / Decoders / Codecs\n *\n * This library defines [`BlockEncoder`, `BlockDecoder` and `BlockCodec` interfaces](https://github.com/multiformats/js-multiformats/blob/master/src/codecs/interface.ts).\n * Codec implementations should conform to the `BlockCodec` interface which implements both `BlockEncoder` and `BlockDecoder`.\n * Here is an example implementation of JSON `BlockCodec`.\n *\n * ```TypeScript\n * export const { name, code, encode, decode } = {\n * name: 'json',\n * code: 0x0200,\n * encode: json => new TextEncoder().encode(JSON.stringify(json)),\n * decode: bytes => JSON.parse(new TextDecoder().decode(bytes))\n * }\n * ```\n *\n * ## Multihash Hashers\n *\n * This library defines [`MultihashHasher` and `MultihashDigest` interfaces](https://github.com/multiformats/js-multiformats/blob/master/src/hashes/interface.ts) and convinient function for implementing them:\n *\n * ```TypeScript\n * import * as hasher from 'multiformats/hashes/hasher'\n *\n * const sha256 = hasher.from({\n * // As per multiformats table\n * // https://github.com/multiformats/multicodec/blob/master/table.csv#L9\n * name: 'sha2-256',\n * code: 0x12,\n *\n * encode: (input) => new Uint8Array(crypto.createHash('sha256').update(input).digest())\n * })\n *\n * const hash = await sha256.digest(json.encode({ hello: 'world' }))\n * CID.create(1, json.code, hash)\n *\n * //> CID(bagaaierasords4njcts6vs7qvdjfcvgnume4hqohf65zsfguprqphs3icwea)\n * ```\n *\n * ## Traversal\n *\n * This library contains higher-order functions for traversing graphs of data easily.\n *\n * `walk()` walks through the links in each block of a DAG calling a user-supplied loader function for each one, in depth-first order with no duplicate block visits. The loader should return a `Block` object and can be used to inspect and collect block ordering for a full DAG walk. The loader should `throw` on error, and return `null` if a block should be skipped by `walk()`.\n *\n * ```TypeScript\n * import { walk } from 'multiformats/traversal'\n * import * as Block from 'multiformats/block'\n * import * as codec from 'multiformats/codecs/json'\n * import { sha256 as hasher } from 'multiformats/hashes/sha2'\n *\n * // build a DAG (a single block for this simple example)\n * const value = { hello: 'world' }\n * const block = await Block.encode({ value, codec, hasher })\n * const { cid } = block\n * console.log(cid)\n * //> CID(bagaaierasords4njcts6vs7qvdjfcvgnume4hqohf65zsfguprqphs3icwea)\n *\n * // create a loader function that also collects CIDs of blocks in\n * // their traversal order\n * const load = (cid, blocks) => async (cid) => {\n * // fetch a block using its cid\n * // e.g.: const block = await fetchBlockByCID(cid)\n * blocks.push(cid)\n * return block\n * }\n *\n * // collect blocks in this DAG starting from the root `cid`\n * const blocks = []\n * await walk({ cid, load: load(cid, blocks) })\n *\n * console.log(blocks)\n * //> [CID(bagaaierasords4njcts6vs7qvdjfcvgnume4hqohf65zsfguprqphs3icwea)]\n * ```\n *\n * ## Legacy interface\n *\n * [`blockcodec-to-ipld-format`](https://github.com/ipld/js-blockcodec-to-ipld-format) converts a multiformats [`BlockCodec`](https://github.com/multiformats/js-multiformats/blob/master/src/codecs/interface.ts#L21) into an\n * [`interface-ipld-format`](https://github.com/ipld/interface-ipld-format) for use with the [`ipld`](https://github.com/ipld/ipld) package. This can help bridge IPLD codecs implemented using the structure and interfaces defined here to existing code that assumes, or requires `interface-ipld-format`. This bridge also includes the relevant TypeScript definitions.\n *\n * ## Implementations\n *\n * By default, no base encodings (other than base32 & base58btc), hash functions,\n * or codec implementations are exposed by `multiformats`, you need to\n * import the ones you need yourself.\n *\n * ### Multibase codecs\n *\n * | bases | import | repo |\n * | ------------------------------------------------------------- | --------------------------- | ------------------------------------------------------------------------------------------------- |\n * | `base16` | `multiformats/bases/base16` | [multiformats/js-multiformats](https://github.com/multiformats/js-multiformats/tree/master/bases) |\n * | `base32`, `base32pad`, `base32hex`, `base32hexpad`, `base32z` | `multiformats/bases/base32` | [multiformats/js-multiformats](https://github.com/multiformats/js-multiformats/tree/master/bases) |\n * | `base64`, `base64pad`, `base64url`, `base64urlpad` | `multiformats/bases/base64` | [multiformats/js-multiformats](https://github.com/multiformats/js-multiformats/tree/master/bases) |\n * | `base58btc`, `base58flick4` | `multiformats/bases/base58` | [multiformats/js-multiformats](https://github.com/multiformats/js-multiformats/tree/master/bases) |\n *\n * Other (less useful) bases implemented in [multiformats/js-multiformats](https://github.com/multiformats/js-multiformats/tree/master/bases) include: `base2`, `base8`, `base10`, `base36` and `base256emoji`.\n *\n * ### Multihash hashers\n *\n * | hashes | import | repo |\n * | ------------------------------------------------------------------------------------------------------------------------------- | ------------------------------ | ------------------------------------------------------------------------------------------------------------------ |\n * | `sha2-256`, `sha2-512` | `multiformats/hashes/sha2` | [multiformats/js-multiformats](https://github.com/multiformats/js-multiformats/tree/master/src/hashes) |\n * | `sha3-224`, `sha3-256`, `sha3-384`,`sha3-512`, `shake-128`, `shake-256`, `keccak-224`, `keccak-256`, `keccak-384`, `keccak-512` | `@multiformats/sha3` | [multiformats/js-sha3](https://github.com/multiformats/js-sha3) |\n * | `identity` | `multiformats/hashes/identity` | [multiformats/js-multiformats](https://github.com/multiformats/js-multiformats/tree/master/src/hashes/identity.js) |\n * | `murmur3-128`, `murmur3-32` | `@multiformats/murmur3` | [multiformats/js-murmur3](https://github.com/multiformats/js-murmur3) |\n * | `blake2b-*`, `blake2s-*` | `@multiformats/blake2` | [multiformats/js-blake2](https://github.com/multiformats/js-blake2) |\n *\n * ### IPLD codecs (multicodec)\n *\n * | codec | import | repo |\n * | ---------- | -------------------------- | ------------------------------------------------------------------------------------------------------ |\n * | `raw` | `multiformats/codecs/raw` | [multiformats/js-multiformats](https://github.com/multiformats/js-multiformats/tree/master/src/codecs) |\n * | `json` | `multiformats/codecs/json` | [multiformats/js-multiformats](https://github.com/multiformats/js-multiformats/tree/master/src/codecs) |\n * | `dag-cbor` | `@ipld/dag-cbor` | [ipld/js-dag-cbor](https://github.com/ipld/js-dag-cbor) |\n * | `dag-json` | `@ipld/dag-json` | [ipld/js-dag-json](https://github.com/ipld/js-dag-json) |\n * | `dag-pb` | `@ipld/dag-pb` | [ipld/js-dag-pb](https://github.com/ipld/js-dag-pb) |\n * | `dag-jose` | `dag-jose` | [ceramicnetwork/js-dag-jose](https://github.com/ceramicnetwork/js-dag-jose) |\n */\n\nimport * as bytes from './bytes.js'\nimport { CID } from './cid.js'\nimport * as digest from './hashes/digest.js'\nimport * as hasher from './hashes/hasher.js'\nimport * as varint from './varint.js'\n\n// This way TS will also expose all the types from module\nexport * from './interface.js'\n\nexport { CID, hasher, digest, varint, bytes }\n","import { bytes as binary, CID } from './index.js'\nimport type * as API from './interface.js'\n\nfunction readonly ({ enumerable = true, configurable = false } = {}): { enumerable: boolean, configurable: boolean, writable: false } {\n return { enumerable, configurable, writable: false }\n}\n\nfunction * linksWithin (path: [string | number, string], value: any): Iterable<[string, CID]> {\n if (value != null && typeof value === 'object') {\n if (Array.isArray(value)) {\n for (const [index, element] of value.entries()) {\n const elementPath = [...path, index]\n const cid = CID.asCID(element)\n if (cid != null) {\n yield [elementPath.join('/'), cid]\n } else if (typeof element === 'object') {\n yield * links(element, elementPath)\n }\n }\n } else {\n const cid = CID.asCID(value)\n if (cid != null) {\n yield [path.join('/'), cid]\n } else {\n yield * links(value, path)\n }\n }\n }\n}\n\nfunction * links <T> (source: T, base: Array<string | number>): Iterable<[string, CID]> {\n if (source == null || source instanceof Uint8Array) {\n return\n }\n const cid = CID.asCID(source)\n if (cid != null) {\n yield [base.join('/'), cid]\n }\n for (const [key, value] of Object.entries(source)) {\n const path = [...base, key] as [string | number, string]\n yield * linksWithin(path, value)\n }\n}\n\nfunction * treeWithin (path: [string | number, string], value: any): Iterable<string> {\n if (Array.isArray(value)) {\n for (const [index, element] of value.entries()) {\n const elementPath = [...path, index]\n yield elementPath.join('/')\n if (typeof element === 'object' && (CID.asCID(element) == null)) {\n yield * tree(element, elementPath)\n }\n }\n } else {\n yield * tree(value, path)\n }\n}\n\nfunction * tree <T> (source: T, base: Array<string | number>): Iterable<string> {\n if (source == null || typeof source !== 'object') {\n return\n }\n for (const [key, value] of Object.entries(source)) {\n const path = [...base, key] as [string | number, string]\n yield path.join('/')\n if (value != null && !(value instanceof Uint8Array) && typeof value === 'object' && (CID.asCID(value) == null)) {\n yield * treeWithin(path, value)\n }\n }\n}\n\nfunction get <T> (source: T, path: string[]): API.BlockCursorView<unknown> {\n let node = source as Record<string, any>\n for (const [index, key] of path.entries()) {\n node = node[key]\n if (node == null) {\n throw new Error(`Object has no property at ${path.slice(0, index + 1).map(part => `[${JSON.stringify(part)}]`).join('')}`)\n }\n const cid = CID.asCID(node)\n if (cid != null) {\n return { value: cid, remaining: path.slice(index + 1).join('/') }\n }\n }\n return { value: node }\n}\n\n/**\n * @template T - Logical type of the data encoded in the block\n * @template C - multicodec code corresponding to codec used to encode the block\n * @template A - multicodec code corresponding to the hashing algorithm used in CID creation.\n * @template V - CID version\n */\nexport class Block<T, C extends number, A extends number, V extends API.Version> implements API.BlockView<T, C, A, V> {\n readonly cid: CID<T, C, A, V>\n readonly bytes: API.ByteView<T>\n readonly value: T\n readonly asBlock: this\n\n constructor ({ cid, bytes, value }: { cid: CID<T, C, A, V>, bytes: API.ByteView<T>, value: T }) {\n if (cid == null || bytes == null || typeof value === 'undefined') { throw new Error('Missing required argument') }\n\n this.cid = cid\n this.bytes = bytes\n this.value = value\n this.asBlock = this\n\n // Mark all the properties immutable\n Object.defineProperties(this, {\n cid: readonly(),\n bytes: readonly(),\n value: readonly(),\n asBlock: readonly()\n })\n }\n\n links (): Iterable<[string, CID<unknown, number, number, API.Version>]> {\n return links(this.value, [])\n }\n\n tree (): Iterable<string> {\n return tree(this.value, [])\n }\n\n get (path = '/'): API.BlockCursorView<unknown> {\n return get(this.value, path.split('/').filter(Boolean))\n }\n}\n\ninterface EncodeInput <T, Code extends number, Alg extends number> {\n value: T\n codec: API.BlockEncoder<Code, T>\n hasher: API.MultihashHasher<Alg>\n}\n\n/**\n * @template T - Logical type of the data encoded in the block\n * @template Code - multicodec code corresponding to codec used to encode the block\n * @template Alg - multicodec code corresponding to the hashing algorithm used in CID creation.\n */\nexport async function encode <T, Code extends number, Alg extends number> ({ value, codec, hasher }: EncodeInput<T, Code, Alg>): Promise<API.BlockView<T, Code, Alg>> {\n if (typeof value === 'undefined') throw new Error('Missing required argument \"value\"')\n if (codec == null || hasher == null) throw new Error('Missing required argument: codec or hasher')\n\n const bytes = codec.encode(value)\n const hash = await hasher.digest(bytes)\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n const cid = CID.create(\n 1,\n codec.code,\n hash\n ) as CID<T, Code, Alg, 1>\n\n return new Block({ value, bytes, cid })\n}\n\ninterface DecodeInput <T, Code extends number, Alg extends number> {\n bytes: API.ByteView<T>\n codec: API.BlockDecoder<Code, T>\n hasher: API.MultihashHasher<Alg>\n}\n\n/**\n * @template T - Logical type of the data encoded in the block\n * @template Code - multicodec code corresponding to codec used to encode the block\n * @template Alg - multicodec code corresponding to the hashing algorithm used in CID creation.\n */\nexport async function decode <T, Code extends number, Alg extends number> ({ bytes, codec, hasher }: DecodeInput<T, Code, Alg>): Promise<API.BlockView<T, Code, Alg>> {\n if (bytes == null) throw new Error('Missing required argument \"bytes\"')\n if (codec == null || hasher == null) throw new Error('Missing required argument: codec or hasher')\n\n const value = codec.decode(bytes)\n const hash = await hasher.digest(bytes)\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n const cid = CID.create(1, codec.code, hash) as CID<T, Code, Alg, 1>\n\n return new Block({ value, bytes, cid })\n}\n\ntype CreateUnsafeInput <T, Code extends number, Alg extends number, V extends API.Version> = {\n cid: API.Link<T, Code, Alg, V>\n value: T\n codec?: API.BlockDecoder<Code, T>\n bytes: API.ByteView<T>\n} | {\n cid: API.Link<T, Code, Alg, V>\n value?: undefined\n codec: API.BlockDecoder<Code, T>\n bytes: API.ByteView<T>\n}\n\n/**\n * @template T - Logical type of the data encoded in the block\n * @template Code - multicodec code corresponding to codec used to encode the block\n * @template Alg - multicodec code corresponding to the hashing algorithm used in CID creation.\n * @template V - CID version\n */\nexport function createUnsafe <T, Code extends number, Alg extends number, V extends API.Version> ({ bytes, cid, value: maybeValue, codec }: CreateUnsafeInput<T, Code, Alg, V>): API.BlockView<T, Code, Alg, V> {\n const value = maybeValue !== undefined\n ? maybeValue\n : (codec?.decode(bytes))\n\n if (value === undefined) throw new Error('Missing required argument, must either provide \"value\" or \"codec\"')\n\n return new Block({\n cid: cid as CID<T, Code, Alg, V>,\n bytes,\n value\n })\n}\n\ninterface CreateInput <T, Code extends number, Alg extends number, V extends API.Version> {\n bytes: API.ByteView<T>\n cid: API.Link<T, Code, Alg, V>\n hasher: API.MultihashHasher<Alg>\n codec: API.BlockDecoder<Code, T>\n}\n\n/**\n * @template T - Logical type of the data encoded in the block\n * @template Code - multicodec code corresponding to codec used to encode the block\n * @template Alg - multicodec code corresponding to the hashing algorithm used in CID creation.\n * @template V - CID version\n */\nexport async function create <T, Code extends number, Alg extends number, V extends API.Version> ({ bytes, cid, hasher, codec }: CreateInput<T, Code, Alg, V>): Promise<API.BlockView<T, Code, Alg, V>> {\n if (bytes == null) throw new Error('Missing required argument \"bytes\"')\n if (hasher == null) throw new Error('Missing required argument \"hasher\"')\n const value = codec.decode(bytes)\n const hash = await hasher.digest(bytes)\n if (!binary.equals(cid.multihash.bytes, hash.bytes)) {\n throw new Error('CID hash does not match bytes')\n }\n\n return createUnsafe({\n bytes,\n cid,\n value,\n codec\n })\n}\n","/* global crypto */\n\nimport { from } from './hasher.js'\n\nfunction sha (name: AlgorithmIdentifier): (data: Uint8Array) => Promise<Uint8Array> {\n return async data => new Uint8Array(await crypto.subtle.digest(name, data))\n}\n\nexport const sha256 = from({\n name: 'sha2-256',\n code: 0x12,\n encode: sha('SHA-256')\n})\n\nexport const sha512 = from({\n name: 'sha2-512',\n code: 0x13,\n encode: sha('SHA-512')\n})\n","// This is an unfortunate replacement for @sindresorhus/is that we need to\n// re-implement for performance purposes. In particular the is.observable()\n// check is expensive, and unnecessary for our purposes. The values returned\n// are compatible with @sindresorhus/is, however.\n\nconst typeofs = [\n 'string',\n 'number',\n 'bigint',\n 'symbol'\n]\n\nconst objectTypeNames = [\n 'Function',\n 'Generator',\n 'AsyncGenerator',\n 'GeneratorFunction',\n 'AsyncGeneratorFunction',\n 'AsyncFunction',\n 'Observable',\n 'Array',\n 'Buffer',\n 'Object',\n 'RegExp',\n 'Date',\n 'Error',\n 'Map',\n 'Set',\n 'WeakMap',\n 'WeakSet',\n 'ArrayBuffer',\n 'SharedArrayBuffer',\n 'DataView',\n 'Promise',\n 'URL',\n 'HTMLElement',\n 'Int8Array',\n 'Uint8Array',\n 'Uint8ClampedArray',\n 'Int16Array',\n 'Uint16Array',\n 'Int32Array',\n 'Uint32Array',\n 'Float32Array',\n 'Float64Array',\n 'BigInt64Array',\n 'BigUint64Array'\n]\n\n/**\n * @param {any} value\n * @returns {string}\n */\nexport function is (value) {\n if (value === null) {\n return 'null'\n }\n if (value === undefined) {\n return 'undefined'\n }\n if (value === true || value === false) {\n return 'boolean'\n }\n const typeOf = typeof value\n if (typeofs.includes(typeOf)) {\n return typeOf\n }\n /* c8 ignore next 4 */\n // not going to bother testing this, it's not going to be valid anyway\n if (typeOf === 'function') {\n return 'Function'\n }\n if (Array.isArray(value)) {\n return 'Array'\n }\n if (isBuffer(value)) {\n return 'Buffer'\n }\n const objectType = getObjectType(value)\n if (objectType) {\n return objectType\n }\n /* c8 ignore next */\n return 'Object'\n}\n\n/**\n * @param {any} value\n * @returns {boolean}\n */\nfunction isBuffer (value) {\n return value && value.constructor && value.constructor.isBuffer && value.constructor.isBuffer.call(null, value)\n}\n\n/**\n * @param {any} value\n * @returns {string|undefined}\n */\nfunction getObjectType (value) {\n const objectTypeName = Object.prototype.toString.call(value).slice(8, -1)\n if (objectTypeNames.includes(objectTypeName)) {\n return objectTypeName\n }\n /* c8 ignore next */\n return undefined\n}\n","class Type {\n /**\n * @param {number} major\n * @param {string} name\n * @param {boolean} terminal\n */\n constructor (major, name, terminal) {\n this.major = major\n this.majorEncoded = major << 5\n this.name = name\n this.terminal = terminal\n }\n\n /* c8 ignore next 3 */\n toString () {\n return `Type[${this.major}].${this.name}`\n }\n\n /**\n * @param {Type} typ\n * @returns {number}\n */\n compare (typ) {\n /* c8 ignore next 1 */\n return this.major < typ.major ? -1 : this.major > typ.major ? 1 : 0\n }\n}\n\n// convert to static fields when better supported\nType.uint = new Type(0, 'uint', true)\nType.negint = new Type(1, 'negint', true)\nType.bytes = new Type(2, 'bytes', true)\nType.string = new Type(3, 'string', true)\nType.array = new Type(4, 'array', false)\nType.map = new Type(5, 'map', false)\nType.tag = new Type(6, 'tag', false) // terminal?\nType.float = new Type(7, 'float', true)\nType.false = new Type(7, 'false', true)\nType.true = new Type(7, 'true', true)\nType.null = new Type(7, 'null', true)\nType.undefined = new Type(7, 'undefined', true)\nType.break = new Type(7, 'break', true)\n// Type.indefiniteLength = new Type(0, 'indefiniteLength', true)\n\nclass Token {\n /**\n * @param {Type} type\n * @param {any} [value]\n * @param {number} [encodedLength]\n */\n constructor (type, value, encodedLength) {\n this.type = type\n this.value = value\n this.encodedLength = encodedLength\n /** @type {Uint8Array|undefined} */\n this.encodedBytes = undefined\n /** @type {Uint8Array|undefined} */\n this.byteValue = undefined\n }\n\n /* c8 ignore next 3 */\n toString () {\n return `Token[${this.type}].${this.value}`\n }\n}\n\nexport { Type, Token }\n","// Use Uint8Array directly in the browser, use Buffer in Node.js but don't\n// speak its name directly to avoid bundlers pulling in the `Buffer` polyfill\n\n// @ts-ignore\nexport const useBuffer = globalThis.process &&\n // @ts-ignore\n !globalThis.process.browser &&\n // @ts-ignore\n globalThis.Buffer &&\n // @ts-ignore\n typeof globalThis.Buffer.isBuffer === 'function'\n\nconst textDecoder = new TextDecoder()\nconst textEncoder = new TextEncoder()\n\n/**\n * @param {Uint8Array} buf\n * @returns {boolean}\n */\nfunction isBuffer (buf) {\n // @ts-ignore\n return useBuffer && globalThis.Buffer.isBuffer(buf)\n}\n\n/**\n * @param {Uint8Array|number[]} buf\n * @returns {Uint8Array}\n */\nexport function asU8A (buf) {\n /* c8 ignore next */\n if (!(buf instanceof Uint8Array)) {\n return Uint8Array.from(buf)\n }\n return isBuffer(buf) ? new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength) : buf\n}\n\nexport const toString = useBuffer\n ? // eslint-disable-line operator-linebreak\n /**\n * @param {Uint8Array} bytes\n * @param {number} start\n * @param {number} end\n */\n (bytes, start, end) => {\n return end - start > 64\n ? // eslint-disable-line operator-linebreak\n // @ts-ignore\n globalThis.Buffer.from(bytes.subarray(start, end)).toString('utf8')\n : utf8Slice(bytes, start, end)\n }\n /* c8 ignore next 11 */\n : // eslint-disable-line operator-linebreak\n /**\n * @param {Uint8Array} bytes\n * @param {number} start\n * @param {number} end\n */\n (bytes, start, end) => {\n return end - start > 64\n ? textDecoder.decode(bytes.subarray(start, end))\n : utf8Slice(bytes, start, end)\n }\n\nexport const fromString = useBuffer\n ? // eslint-disable-line operator-linebreak\n /**\n * @param {string} string\n */\n (string) => {\n return string.length > 64\n ? // eslint-disable-line operator-linebreak\n // @ts-ignore\n globalThis.Buffer.from(string)\n : utf8ToBytes(string)\n }\n /* c8 ignore next 7 */\n : // eslint-disable-line operator-linebreak\n /**\n * @param {string} string\n */\n (string) => {\n return string.length > 64 ? textEncoder.encode(string) : utf8ToBytes(string)\n }\n\n/**\n * Buffer variant not fast enough for what we need\n * @param {number[]} arr\n * @returns {Uint8Array}\n */\nexport const fromArray = (arr) => {\n return Uint8Array.from(arr)\n}\n\nexport const slice = useBuffer\n ? // eslint-disable-line operator-linebreak\n /**\n * @param {Uint8Array} bytes\n * @param {number} start\n * @param {number} end\n */\n (bytes, start, end) => {\n if (isBuffer(bytes)) {\n return new Uint8Array(bytes.subarray(start, end))\n }\n return bytes.slice(start, end)\n }\n /* c8 ignore next 9 */\n : // eslint-disable-line operator-linebreak\n /**\n * @param {Uint8Array} bytes\n * @param {number} start\n * @param {number} end\n */\n (bytes, start, end) => {\n return bytes.slice(start, end)\n }\n\nexport const concat = useBuffer\n ? // eslint-disable-line operator-linebreak\n /**\n * @param {Uint8Array[]} chunks\n * @param {number} length\n * @returns {Uint8Array}\n */\n (chunks, length) => {\n // might get a stray plain Array here\n /* c8 ignore next 1 */\n chunks = chunks.map((c) => c instanceof Uint8Array\n ? c\n // this case is occasionally missed during test runs so becomes coverage-flaky\n /* c8 ignore next 4 */\n : // eslint-disable-line operator-linebreak\n // @ts-ignore\n globalThis.Buffer.from(c))\n // @ts-ignore\n return asU8A(globalThis.Buffer.concat(chunks, length))\n }\n /* c8 ignore next 19 */\n : // eslint-disable-line operator-linebreak\n /**\n * @param {Uint8Array[]} chunks\n * @param {number} length\n * @returns {Uint8Array}\n */\n (chunks, length) => {\n const out = new Uint8Array(length)\n let off = 0\n for (let b of chunks) {\n if (off + b.length > out.length) {\n // final chunk that's bigger than we need\n b = b.subarray(0, out.length - off)\n }\n out.set(b, off)\n off += b.length\n }\n return out\n }\n\nexport const alloc = useBuffer\n ? // eslint-disable-line operator-linebreak\n /**\n * @param {number} size\n * @returns {Uint8Array}\n */\n (size) => {\n // we always write over the contents we expose so this should be safe\n // @ts-ignore\n return globalThis.Buffer.allocUnsafe(size)\n }\n /* c8 ignore next 8 */\n : // eslint-disable-line operator-linebreak\n /**\n * @param {number} size\n * @returns {Uint8Array}\n */\n (size) => {\n return new Uint8Array(size)\n }\n\nexport const toHex = useBuffer\n ? // eslint-disable-line operator-linebreak\n /**\n * @param {Uint8Array} d\n * @returns {string}\n */\n (d) => {\n if (typeof d === 'string') {\n return d\n }\n // @ts-ignore\n return globalThis.Buffer.from(toBytes(d)).toString('hex')\n }\n /* c8 ignore next 12 */\n : // eslint-disable-line operator-linebreak\n /**\n * @param {Uint8Array} d\n * @returns {string}\n */\n (d) => {\n if (typeof d === 'string') {\n return d\n }\n // @ts-ignore not smart enough to figure this out\n return Array.prototype.reduce.call(toBytes(d), (p, c) => `${p}${c.toString(16).padStart(2, '0')}`, '')\n }\n\nexport const fromHex = useBuffer\n ? // eslint-disable-line operator-linebreak\n /**\n * @param {string|Uint8Array} hex\n * @returns {Uint8Array}\n */\n (hex) => {\n if (hex instanceof Uint8Array) {\n return hex\n }\n // @ts-ignore\n return globalThis.Buffer.from(hex, 'hex')\n }\n /* c8 ignore next 17 */\n : // eslint-disable-line operator-linebreak\n /**\n * @param {string|Uint8Array} hex\n * @returns {Uint8Array}\n */\n (hex) => {\n if (hex instanceof Uint8Array) {\n return hex\n }\n if (!hex.length) {\n return new Uint8Array(0)\n }\n return new Uint8Array(hex.split('')\n .map((/** @type {string} */ c, /** @type {number} */ i, /** @type {string[]} */ d) => i % 2 === 0 ? `0x${c}${d[i + 1]}` : '')\n .filter(Boolean)\n .map((/** @type {string} */ e) => parseInt(e, 16)))\n }\n\n/**\n * @param {Uint8Array|ArrayBuffer|ArrayBufferView} obj\n * @returns {Uint8Array}\n */\nfunction toBytes (obj) {\n if (obj instanceof Uint8Array && obj.constructor.name === 'Uint8Array') {\n return obj\n }\n if (obj instanceof ArrayBuffer) {\n return new Uint8Array(obj)\n }\n if (ArrayBuffer.isView(obj)) {\n return new Uint8Array(obj.buffer, obj.byteOffset, obj.byteLength)\n }\n /* c8 ignore next */\n throw new Error('Unknown type, must be binary type')\n}\n\n/**\n * @param {Uint8Array} b1\n * @param {Uint8Array} b2\n * @returns {number}\n */\nexport function compare (b1, b2) {\n /* c8 ignore next 5 */\n if (isBuffer(b1) && isBuffer(b2)) {\n // probably not possible to get here in the current API\n // @ts-ignore Buffer\n return b1.compare(b2)\n }\n for (let i = 0; i < b1.length; i++) {\n if (b1[i] === b2[i]) {\n continue\n }\n return b1[i] < b2[i] ? -1 : 1\n } /* c8 ignore next 3 */\n return 0\n}\n\n// The below code is taken from https://github.com/google/closure-library/blob/8598d87242af59aac233270742c8984e2b2bdbe0/closure/goog/crypt/crypt.js#L117-L143\n// Licensed Apache-2.0.\n\n/**\n * @param {string} str\n * @returns {number[]}\n */\nfunction utf8ToBytes (str) {\n const out = []\n let p = 0\n for (let i = 0; i < str.length; i++) {\n let c = str.charCodeAt(i)\n if (c < 128) {\n out[p++] = c\n } else if (c < 2048) {\n out[p++] = (c >> 6) | 192\n out[p++] = (c & 63) | 128\n } else if (\n ((c & 0xFC00) === 0xD800) && (i + 1) < str.length &&\n ((str.charCodeAt(i + 1) & 0xFC00) === 0xDC00)) {\n // Surrogate Pair\n c = 0x10000 + ((c & 0x03FF) << 10) + (str.charCodeAt(++i) & 0x03FF)\n out[p++] = (c >> 18) | 240\n out[p++] = ((c >> 12) & 63) | 128\n out[p++] = ((c >> 6) & 63) | 128\n out[p++] = (c & 63) | 128\n } else {\n out[p++] = (c >> 12) | 224\n out[p++] = ((c >> 6) & 63) | 128\n out[p++] = (c & 63) | 128\n }\n }\n return out\n}\n\n// The below code is mostly taken from https://github.com/feross/buffer\n// Licensed MIT. Copyright (c) Feross Aboukhadijeh\n\n/**\n * @param {Uint8Array} buf\n * @param {number} offset\n * @param {number} end\n * @returns {string}\n */\nfunction utf8Slice (buf, offset, end) {\n const res = []\n\n while (offset < end) {\n const firstByte = buf[offset]\n let codePoint = null\n let bytesPerSequence = (firstByte > 0xef) ? 4 : (firstByte > 0xdf) ? 3 : (firstByte > 0xbf) ? 2 : 1\n\n if (offset + bytesPerSequence <= end) {\n let secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[offset + 1]\n if ((secondByte & 0xc0) === 0x80) {\n tempCodePoint = (firstByte & 0x1f) << 0x6 | (secondByte & 0x3f)\n if (tempCodePoint > 0x7f) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[offset + 1]\n thirdByte = buf[offset + 2]\n if ((secondByte & 0xc0) === 0x80 && (thirdByte & 0xc0) === 0x80) {\n tempCodePoint = (firstByte & 0xf) << 0xc | (secondByte & 0x3f) << 0x6 | (thirdByte & 0x3f)\n /* c8 ignore next 3 */\n if (tempCodePoint > 0x7ff && (tempCodePoint < 0xd800 || tempCodePoint > 0xdfff)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[offset + 1]\n thirdByte = buf[offset + 2]\n fourthByte = buf[offset + 3]\n if ((secondByte & 0xc0) === 0x80 && (thirdByte & 0xc0) === 0x80 && (fourthByte & 0xc0) === 0x80) {\n tempCodePoint = (firstByte & 0xf) << 0x12 | (secondByte & 0x3f) << 0xc | (thirdByte & 0x3f) << 0x6 | (fourthByte & 0x3f)\n if (tempCodePoint > 0xffff && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n /* c8 ignore next 5 */\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xfffd\n bytesPerSequence = 1\n } else if (codePoint > 0xffff) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3ff | 0xd800)\n codePoint = 0xdc00 | codePoint & 0x3ff\n }\n\n res.push(codePoint)\n offset += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nconst MAX_ARGUMENTS_LENGTH = 0x1000\n\n/**\n * @param {number[]} codePoints\n * @returns {string}\n */\nexport function decodeCodePointsArray (codePoints) {\n const len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n /* c8 ignore next 10 */\n // Decode in chunks to avoid \"call stack size exceeded\".\n let res = ''\n let i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n","/**\n * Bl is a list of byte chunks, similar to https://github.com/rvagg/bl but for\n * writing rather than reading.\n * A Bl object accepts set() operations for individual bytes and copyTo() for\n * inserting byte arrays. These write operations don't automatically increment\n * the internal cursor so its \"length\" won't be changed. Instead, increment()\n * must be called to extend its length to cover the inserted data.\n * The toBytes() call will convert all internal memory to a single Uint8Array of\n * the correct length, truncating any data that is stored but hasn't been\n * included by an increment().\n * get() can retrieve a single byte.\n * All operations (except toBytes()) take an \"offset\" argument that will perform\n * the write at the offset _from the current cursor_. For most operations this\n * will be `0` to write at the current cursor position but it can be ahead of\n * the current cursor. Negative offsets probably work but are untested.\n */\n\n// TODO: ipjs doesn't support this, only for test files: https://github.com/mikeal/ipjs/blob/master/src/package/testFile.js#L39\nimport { alloc, concat, slice } from './byte-utils.js'\n\n// the ts-ignores in this file are almost all for the `Uint8Array|number[]` duality that exists\n// for perf reasons. Consider better approaches to this or removing it entirely, it is quite\n// risky because of some assumptions about small chunks === number[] and everything else === Uint8Array.\n\nconst defaultChunkSize = 256\n\nexport class Bl {\n /**\n * @param {number} [chunkSize]\n */\n constructor (chunkSize = defaultChunkSize) {\n this.chunkSize = chunkSize\n /** @type {number} */\n this.cursor = 0\n /** @type {number} */\n this.maxCursor = -1\n /** @type {(Uint8Array|number[])[]} */\n this.chunks = []\n // keep the first chunk around if we can to save allocations for future encodes\n /** @type {Uint8Array|number[]|null} */\n this._initReuseChunk = null\n }\n\n reset () {\n this.cursor = 0\n this.maxCursor = -1\n if (this.chunks.length) {\n this.chunks = []\n }\n if (this._initReuseChunk !== null) {\n this.chunks.push(this._initReuseChunk)\n this.maxCursor = this._initReuseChunk.length - 1\n }\n }\n\n /**\n * @param {Uint8Array|number[]} bytes\n */\n push (bytes) {\n let topChunk = this.chunks[this.chunks.length - 1]\n const newMax = this.cursor + bytes.length\n if (newMax <= this.maxCursor + 1) {\n // we have at least one chunk and we can fit these bytes into that chunk\n const chunkPos = topChunk.length - (this.maxCursor - this.cursor) - 1\n // @ts-ignore\n topChunk.set(bytes, chunkPos)\n } else {\n // can't fit it in\n if (topChunk) {\n // trip the last chunk to `cursor` if we need to\n const chunkPos = topChunk.length - (this.maxCursor - this.cursor) - 1\n if (chunkPos < topChunk.length) {\n // @ts-ignore\n this.chunks[this.chunks.length - 1] = topChunk.subarray(0, chunkPos)\n this.maxCursor = this.cursor - 1\n }\n }\n if (bytes.length < 64 && bytes.length < this.chunkSize) {\n // make a new chunk and copy the new one into it\n topChunk = alloc(this.chunkSize)\n this.chunks.push(topChunk)\n this.maxCursor += topChunk.length\n if (this._initReuseChunk === null) {\n this._initReuseChunk = topChunk\n }\n // @ts-ignore\n topChunk.set(bytes, 0)\n } else {\n // push the new bytes in as its own chunk\n this.chunks.push(bytes)\n this.maxCursor += bytes.length\n }\n }\n this.cursor += bytes.length\n }\n\n /**\n * @param {boolean} [reset]\n * @returns {Uint8Array}\n */\n toBytes (reset = false) {\n let byts\n if (this.chunks.length === 1) {\n const chunk = this.chunks[0]\n if (reset && this.cursor > chunk.length / 2) {\n /* c8 ignore next 2 */\n // @ts-ignore\n byts = this.cursor === chunk.length ? chunk : chunk.subarray(0, this.cursor)\n this._initReuseChunk = null\n this.chunks = []\n } else {\n // @ts-ignore\n byts = slice(chunk, 0, this.cursor)\n }\n } else {\n // @ts-ignore\n byts = concat(this.chunks, this.cursor)\n }\n if (reset) {\n this.reset()\n }\n return byts\n }\n}\n","const decodeErrPrefix = 'CBOR decode error:'\nconst encodeErrPrefix = 'CBOR encode error:'\n\nconst uintMinorPrefixBytes = []\nuintMinorPrefixBytes[23] = 1\nuintMinorPrefixBytes[24] = 2\nuintMinorPrefixBytes[25] = 3\nuintMinorPrefixBytes[26] = 5\nuintMinorPrefixBytes[27] = 9\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} need\n */\nfunction assertEnoughData (data, pos, need) {\n if (data.length - pos < need) {\n throw new Error(`${decodeErrPrefix} not enough data for type`)\n }\n}\n\nexport {\n decodeErrPrefix,\n encodeErrPrefix,\n uintMinorPrefixBytes,\n assertEnoughData\n}\n","/* globals BigInt */\n\nimport { Token, Type } from './token.js'\nimport { decodeErrPrefix, assertEnoughData } from './common.js'\n\nexport const uintBoundaries = [24, 256, 65536, 4294967296, BigInt('18446744073709551616')]\n\n/**\n * @typedef {import('./bl.js').Bl} Bl\n * @typedef {import('../interface').DecodeOptions} DecodeOptions\n */\n\n/**\n * @param {Uint8Array} data\n * @param {number} offset\n * @param {DecodeOptions} options\n * @returns {number}\n */\nexport function readUint8 (data, offset, options) {\n assertEnoughData(data, offset, 1)\n const value = data[offset]\n if (options.strict === true && value < uintBoundaries[0]) {\n throw new Error(`${decodeErrPrefix} integer encoded in more bytes than necessary (strict decode)`)\n }\n return value\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} offset\n * @param {DecodeOptions} options\n * @returns {number}\n */\nexport function readUint16 (data, offset, options) {\n assertEnoughData(data, offset, 2)\n const value = (data[offset] << 8) | data[offset + 1]\n if (options.strict === true && value < uintBoundaries[1]) {\n throw new Error(`${decodeErrPrefix} integer encoded in more bytes than necessary (strict decode)`)\n }\n return value\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} offset\n * @param {DecodeOptions} options\n * @returns {number}\n */\nexport function readUint32 (data, offset, options) {\n assertEnoughData(data, offset, 4)\n const value = (data[offset] * 16777216 /* 2 ** 24 */) + (data[offset + 1] << 16) + (data[offset + 2] << 8) + data[offset + 3]\n if (options.strict === true && value < uintBoundaries[2]) {\n throw new Error(`${decodeErrPrefix} integer encoded in more bytes than necessary (strict decode)`)\n }\n return value\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} offset\n * @param {DecodeOptions} options\n * @returns {number|bigint}\n */\nexport function readUint64 (data, offset, options) {\n // assume BigInt, convert back to Number if within safe range\n assertEnoughData(data, offset, 8)\n const hi = (data[offset] * 16777216 /* 2 ** 24 */) + (data[offset + 1] << 16) + (data[offset + 2] << 8) + data[offset + 3]\n const lo = (data[offset + 4] * 16777216 /* 2 ** 24 */) + (data[offset + 5] << 16) + (data[offset + 6] << 8) + data[offset + 7]\n const value = (BigInt(hi) << BigInt(32)) + BigInt(lo)\n if (options.strict === true && value < uintBoundaries[3]) {\n throw new Error(`${decodeErrPrefix} integer encoded in more bytes than necessary (strict decode)`)\n }\n if (value <= Number.MAX_SAFE_INTEGER) {\n return Number(value)\n }\n if (options.allowBigInt === true) {\n return value\n }\n throw new Error(`${decodeErrPrefix} integers outside of the safe integer range are not supported`)\n}\n\n/* not required thanks to quick[] list\nconst oneByteTokens = new Array(24).fill(0).map((v, i) => new Token(Type.uint, i, 1))\nexport function decodeUintCompact (data, pos, minor, options) {\n return oneByteTokens[minor]\n}\n*/\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeUint8 (data, pos, _minor, options) {\n return new Token(Type.uint, readUint8(data, pos + 1, options), 2)\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeUint16 (data, pos, _minor, options) {\n return new Token(Type.uint, readUint16(data, pos + 1, options), 3)\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeUint32 (data, pos, _minor, options) {\n return new Token(Type.uint, readUint32(data, pos + 1, options), 5)\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeUint64 (data, pos, _minor, options) {\n return new Token(Type.uint, readUint64(data, pos + 1, options), 9)\n}\n\n/**\n * @param {Bl} buf\n * @param {Token} token\n */\nexport function encodeUint (buf, token) {\n return encodeUintValue(buf, 0, token.value)\n}\n\n/**\n * @param {Bl} buf\n * @param {number} major\n * @param {number|bigint} uint\n */\nexport function encodeUintValue (buf, major, uint) {\n if (uint < uintBoundaries[0]) {\n const nuint = Number(uint)\n // pack into one byte, minor=0, additional=value\n buf.push([major | nuint])\n } else if (uint < uintBoundaries[1]) {\n const nuint = Number(uint)\n // pack into two byte, minor=0, additional=24\n buf.push([major | 24, nuint])\n } else if (uint < uintBoundaries[2]) {\n const nuint = Number(uint)\n // pack into three byte, minor=0, additional=25\n buf.push([major | 25, nuint >>> 8, nuint & 0xff])\n } else if (uint < uintBoundaries[3]) {\n const nuint = Number(uint)\n // pack into five byte, minor=0, additional=26\n buf.push([major | 26, (nuint >>> 24) & 0xff, (nuint >>> 16) & 0xff, (nuint >>> 8) & 0xff, nuint & 0xff])\n } else {\n const buint = BigInt(uint)\n if (buint < uintBoundaries[4]) {\n // pack into nine byte, minor=0, additional=27\n const set = [major | 27, 0, 0, 0, 0, 0, 0, 0]\n // simulate bitwise above 32 bits\n let lo = Number(buint & BigInt(0xffffffff))\n let hi = Number(buint >> BigInt(32) & BigInt(0xffffffff))\n set[8] = lo & 0xff\n lo = lo >> 8\n set[7] = lo & 0xff\n lo = lo >> 8\n set[6] = lo & 0xff\n lo = lo >> 8\n set[5] = lo & 0xff\n set[4] = hi & 0xff\n hi = hi >> 8\n set[3] = hi & 0xff\n hi = hi >> 8\n set[2] = hi & 0xff\n hi = hi >> 8\n set[1] = hi & 0xff\n buf.push(set)\n } else {\n throw new Error(`${decodeErrPrefix} encountered BigInt larger than allowable range`)\n }\n }\n}\n\n/**\n * @param {Token} token\n * @returns {number}\n */\nencodeUint.encodedSize = function encodedSize (token) {\n return encodeUintValue.encodedSize(token.value)\n}\n\n/**\n * @param {number} uint\n * @returns {number}\n */\nencodeUintValue.encodedSize = function encodedSize (uint) {\n if (uint < uintBoundaries[0]) {\n return 1\n }\n if (uint < uintBoundaries[1]) {\n return 2\n }\n if (uint < uintBoundaries[2]) {\n return 3\n }\n if (uint < uintBoundaries[3]) {\n return 5\n }\n return 9\n}\n\n/**\n * @param {Token} tok1\n * @param {Token} tok2\n * @returns {number}\n */\nencodeUint.compareTokens = function compareTokens (tok1, tok2) {\n return tok1.value < tok2.value ? -1 : tok1.value > tok2.value ? 1 : /* c8 ignore next */ 0\n}\n","/* eslint-env es2020 */\n\nimport { Token, Type } from './token.js'\nimport * as uint from './0uint.js'\nimport { decodeErrPrefix } from './common.js'\n\n/**\n * @typedef {import('./bl.js').Bl} Bl\n * @typedef {import('../interface').DecodeOptions} DecodeOptions\n */\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeNegint8 (data, pos, _minor, options) {\n return new Token(Type.negint, -1 - uint.readUint8(data, pos + 1, options), 2)\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeNegint16 (data, pos, _minor, options) {\n return new Token(Type.negint, -1 - uint.readUint16(data, pos + 1, options), 3)\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeNegint32 (data, pos, _minor, options) {\n return new Token(Type.negint, -1 - uint.readUint32(data, pos + 1, options), 5)\n}\n\nconst neg1b = BigInt(-1)\nconst pos1b = BigInt(1)\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeNegint64 (data, pos, _minor, options) {\n const int = uint.readUint64(data, pos + 1, options)\n if (typeof int !== 'bigint') {\n const value = -1 - int\n if (value >= Number.MIN_SAFE_INTEGER) {\n return new Token(Type.negint, value, 9)\n }\n }\n if (options.allowBigInt !== true) {\n throw new Error(`${decodeErrPrefix} integers outside of the safe integer range are not supported`)\n }\n return new Token(Type.negint, neg1b - BigInt(int), 9)\n}\n\n/**\n * @param {Bl} buf\n * @param {Token} token\n */\nexport function encodeNegint (buf, token) {\n const negint = token.value\n const unsigned = (typeof negint === 'bigint' ? (negint * neg1b - pos1b) : (negint * -1 - 1))\n uint.encodeUintValue(buf, token.type.majorEncoded, unsigned)\n}\n\n/**\n * @param {Token} token\n * @returns {number}\n */\nencodeNegint.encodedSize = function encodedSize (token) {\n const negint = token.value\n const unsigned = (typeof negint === 'bigint' ? (negint * neg1b - pos1b) : (negint * -1 - 1))\n /* c8 ignore next 4 */\n // handled by quickEncode, we shouldn't get here but it's included for completeness\n if (unsigned < uint.uintBoundaries[0]) {\n return 1\n }\n if (unsigned < uint.uintBoundaries[1]) {\n return 2\n }\n if (unsigned < uint.uintBoundaries[2]) {\n return 3\n }\n if (unsigned < uint.uintBoundaries[3]) {\n return 5\n }\n return 9\n}\n\n/**\n * @param {Token} tok1\n * @param {Token} tok2\n * @returns {number}\n */\nencodeNegint.compareTokens = function compareTokens (tok1, tok2) {\n // opposite of the uint comparison since we store the uint version in bytes\n return tok1.value < tok2.value ? 1 : tok1.value > tok2.value ? -1 : /* c8 ignore next */ 0\n}\n","import { Token, Type } from './token.js'\nimport { assertEnoughData, decodeErrPrefix } from './common.js'\nimport * as uint from './0uint.js'\nimport { compare, fromString, slice } from './byte-utils.js'\n\n/**\n * @typedef {import('./bl.js').Bl} Bl\n * @typedef {import('../interface').DecodeOptions} DecodeOptions\n */\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} prefix\n * @param {number} length\n * @returns {Token}\n */\nfunction toToken (data, pos, prefix, length) {\n assertEnoughData(data, pos, prefix + length)\n const buf = slice(data, pos + prefix, pos + prefix + length)\n return new Token(Type.bytes, buf, prefix + length)\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} minor\n * @param {DecodeOptions} _options\n * @returns {Token}\n */\nexport function decodeBytesCompact (data, pos, minor, _options) {\n return toToken(data, pos, 1, minor)\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeBytes8 (data, pos, _minor, options) {\n return toToken(data, pos, 2, uint.readUint8(data, pos + 1, options))\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeBytes16 (data, pos, _minor, options) {\n return toToken(data, pos, 3, uint.readUint16(data, pos + 1, options))\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeBytes32 (data, pos, _minor, options) {\n return toToken(data, pos, 5, uint.readUint32(data, pos + 1, options))\n}\n\n// TODO: maybe we shouldn't support this ..\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeBytes64 (data, pos, _minor, options) {\n const l = uint.readUint64(data, pos + 1, options)\n if (typeof l === 'bigint') {\n throw new Error(`${decodeErrPrefix} 64-bit integer bytes lengths not supported`)\n }\n return toToken(data, pos, 9, l)\n}\n\n/**\n * `encodedBytes` allows for caching when we do a byte version of a string\n * for key sorting purposes\n * @param {Token} token\n * @returns {Uint8Array}\n */\nfunction tokenBytes (token) {\n if (token.encodedBytes === undefined) {\n token.encodedBytes = token.type === Type.string ? fromString(token.value) : token.value\n }\n // @ts-ignore c'mon\n return token.encodedBytes\n}\n\n/**\n * @param {Bl} buf\n * @param {Token} token\n */\nexport function encodeBytes (buf, token) {\n const bytes = tokenBytes(token)\n uint.encodeUintValue(buf, token.type.majorEncoded, bytes.length)\n buf.push(bytes)\n}\n\n/**\n * @param {Token} token\n * @returns {number}\n */\nencodeBytes.encodedSize = function encodedSize (token) {\n const bytes = tokenBytes(token)\n return uint.encodeUintValue.encodedSize(bytes.length) + bytes.length\n}\n\n/**\n * @param {Token} tok1\n * @param {Token} tok2\n * @returns {number}\n */\nencodeBytes.compareTokens = function compareTokens (tok1, tok2) {\n return compareBytes(tokenBytes(tok1), tokenBytes(tok2))\n}\n\n/**\n * @param {Uint8Array} b1\n * @param {Uint8Array} b2\n * @returns {number}\n */\nexport function compareBytes (b1, b2) {\n return b1.length < b2.length ? -1 : b1.length > b2.length ? 1 : compare(b1, b2)\n}\n","import { Token, Type } from './token.js'\nimport { assertEnoughData, decodeErrPrefix } from './common.js'\nimport * as uint from './0uint.js'\nimport { encodeBytes } from './2bytes.js'\nimport { toString, slice } from './byte-utils.js'\n\n/**\n * @typedef {import('./bl.js').Bl} Bl\n * @typedef {import('../interface').DecodeOptions} DecodeOptions\n */\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} prefix\n * @param {number} length\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nfunction toToken (data, pos, prefix, length, options) {\n const totLength = prefix + length\n assertEnoughData(data, pos, totLength)\n const tok = new Token(Type.string, toString(data, pos + prefix, pos + totLength), totLength)\n if (options.retainStringBytes === true) {\n tok.byteValue = slice(data, pos + prefix, pos + totLength)\n }\n return tok\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeStringCompact (data, pos, minor, options) {\n return toToken(data, pos, 1, minor, options)\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeString8 (data, pos, _minor, options) {\n return toToken(data, pos, 2, uint.readUint8(data, pos + 1, options), options)\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeString16 (data, pos, _minor, options) {\n return toToken(data, pos, 3, uint.readUint16(data, pos + 1, options), options)\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeString32 (data, pos, _minor, options) {\n return toToken(data, pos, 5, uint.readUint32(data, pos + 1, options), options)\n}\n\n// TODO: maybe we shouldn't support this ..\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeString64 (data, pos, _minor, options) {\n const l = uint.readUint64(data, pos + 1, options)\n if (typeof l === 'bigint') {\n throw new Error(`${decodeErrPrefix} 64-bit integer string lengths not supported`)\n }\n return toToken(data, pos, 9, l, options)\n}\n\nexport const encodeString = encodeBytes\n","import { Token, Type } from './token.js'\nimport * as uint from './0uint.js'\nimport { decodeErrPrefix } from './common.js'\n\n/**\n * @typedef {import('./bl.js').Bl} Bl\n * @typedef {import('../interface').DecodeOptions} DecodeOptions\n */\n\n/**\n * @param {Uint8Array} _data\n * @param {number} _pos\n * @param {number} prefix\n * @param {number} length\n * @returns {Token}\n */\nfunction toToken (_data, _pos, prefix, length) {\n return new Token(Type.array, length, prefix)\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} minor\n * @param {DecodeOptions} _options\n * @returns {Token}\n */\nexport function decodeArrayCompact (data, pos, minor, _options) {\n return toToken(data, pos, 1, minor)\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeArray8 (data, pos, _minor, options) {\n return toToken(data, pos, 2, uint.readUint8(data, pos + 1, options))\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeArray16 (data, pos, _minor, options) {\n return toToken(data, pos, 3, uint.readUint16(data, pos + 1, options))\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeArray32 (data, pos, _minor, options) {\n return toToken(data, pos, 5, uint.readUint32(data, pos + 1, options))\n}\n\n// TODO: maybe we shouldn't support this ..\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeArray64 (data, pos, _minor, options) {\n const l = uint.readUint64(data, pos + 1, options)\n if (typeof l === 'bigint') {\n throw new Error(`${decodeErrPrefix} 64-bit integer array lengths not supported`)\n }\n return toToken(data, pos, 9, l)\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeArrayIndefinite (data, pos, _minor, options) {\n if (options.allowIndefinite === false) {\n throw new Error(`${decodeErrPrefix} indefinite length items not allowed`)\n }\n return toToken(data, pos, 1, Infinity)\n}\n\n/**\n * @param {Bl} buf\n * @param {Token} token\n */\nexport function encodeArray (buf, token) {\n uint.encodeUintValue(buf, Type.array.majorEncoded, token.value)\n}\n\n// using an array as a map key, are you sure about this? we can only sort\n// by map length here, it's up to the encoder to decide to look deeper\nencodeArray.compareTokens = uint.encodeUint.compareTokens\n\n/**\n * @param {Token} token\n * @returns {number}\n */\nencodeArray.encodedSize = function encodedSize (token) {\n return uint.encodeUintValue.encodedSize(token.value)\n}\n","import { Token, Type } from './token.js'\nimport * as uint from './0uint.js'\nimport { decodeErrPrefix } from './common.js'\n\n/**\n * @typedef {import('./bl.js').Bl} Bl\n * @typedef {import('../interface').DecodeOptions} DecodeOptions\n */\n\n/**\n * @param {Uint8Array} _data\n * @param {number} _pos\n * @param {number} prefix\n * @param {number} length\n * @returns {Token}\n */\nfunction toToken (_data, _pos, prefix, length) {\n return new Token(Type.map, length, prefix)\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} minor\n * @param {DecodeOptions} _options\n * @returns {Token}\n */\nexport function decodeMapCompact (data, pos, minor, _options) {\n return toToken(data, pos, 1, minor)\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeMap8 (data, pos, _minor, options) {\n return toToken(data, pos, 2, uint.readUint8(data, pos + 1, options))\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeMap16 (data, pos, _minor, options) {\n return toToken(data, pos, 3, uint.readUint16(data, pos + 1, options))\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeMap32 (data, pos, _minor, options) {\n return toToken(data, pos, 5, uint.readUint32(data, pos + 1, options))\n}\n\n// TODO: maybe we shouldn't support this ..\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeMap64 (data, pos, _minor, options) {\n const l = uint.readUint64(data, pos + 1, options)\n if (typeof l === 'bigint') {\n throw new Error(`${decodeErrPrefix} 64-bit integer map lengths not supported`)\n }\n return toToken(data, pos, 9, l)\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeMapIndefinite (data, pos, _minor, options) {\n if (options.allowIndefinite === false) {\n throw new Error(`${decodeErrPrefix} indefinite length items not allowed`)\n }\n return toToken(data, pos, 1, Infinity)\n}\n\n/**\n * @param {Bl} buf\n * @param {Token} token\n */\nexport function encodeMap (buf, token) {\n uint.encodeUintValue(buf, Type.map.majorEncoded, token.value)\n}\n\n// using a map as a map key, are you sure about this? we can only sort\n// by map length here, it's up to the encoder to decide to look deeper\nencodeMap.compareTokens = uint.encodeUint.compareTokens\n\n/**\n * @param {Token} token\n * @returns {number}\n */\nencodeMap.encodedSize = function encodedSize (token) {\n return uint.encodeUintValue.encodedSize(token.value)\n}\n","import { Token, Type } from './token.js'\nimport * as uint from './0uint.js'\n\n/**\n * @typedef {import('./bl.js').Bl} Bl\n * @typedef {import('../interface').DecodeOptions} DecodeOptions\n */\n\n/**\n * @param {Uint8Array} _data\n * @param {number} _pos\n * @param {number} minor\n * @param {DecodeOptions} _options\n * @returns {Token}\n */\nexport function decodeTagCompact (_data, _pos, minor, _options) {\n return new Token(Type.tag, minor, 1)\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeTag8 (data, pos, _minor, options) {\n return new Token(Type.tag, uint.readUint8(data, pos + 1, options), 2)\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeTag16 (data, pos, _minor, options) {\n return new Token(Type.tag, uint.readUint16(data, pos + 1, options), 3)\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeTag32 (data, pos, _minor, options) {\n return new Token(Type.tag, uint.readUint32(data, pos + 1, options), 5)\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeTag64 (data, pos, _minor, options) {\n return new Token(Type.tag, uint.readUint64(data, pos + 1, options), 9)\n}\n\n/**\n * @param {Bl} buf\n * @param {Token} token\n */\nexport function encodeTag (buf, token) {\n uint.encodeUintValue(buf, Type.tag.majorEncoded, token.value)\n}\n\nencodeTag.compareTokens = uint.encodeUint.compareTokens\n\n/**\n * @param {Token} token\n * @returns {number}\n */\nencodeTag.encodedSize = function encodedSize (token) {\n return uint.encodeUintValue.encodedSize(token.value)\n}\n","// TODO: shift some of the bytes logic to bytes-utils so we can use Buffer\n// where possible\n\nimport { Token, Type } from './token.js'\nimport { decodeErrPrefix } from './common.js'\nimport { encodeUint } from './0uint.js'\n\n/**\n * @typedef {import('./bl.js').Bl} Bl\n * @typedef {import('../interface').DecodeOptions} DecodeOptions\n * @typedef {import('../interface').EncodeOptions} EncodeOptions\n */\n\nconst MINOR_FALSE = 20\nconst MINOR_TRUE = 21\nconst MINOR_NULL = 22\nconst MINOR_UNDEFINED = 23\n\n/**\n * @param {Uint8Array} _data\n * @param {number} _pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeUndefined (_data, _pos, _minor, options) {\n if (options.allowUndefined === false) {\n throw new Error(`${decodeErrPrefix} undefined values are not supported`)\n } else if (options.coerceUndefinedToNull === true) {\n return new Token(Type.null, null, 1)\n }\n return new Token(Type.undefined, undefined, 1)\n}\n\n/**\n * @param {Uint8Array} _data\n * @param {number} _pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeBreak (_data, _pos, _minor, options) {\n if (options.allowIndefinite === false) {\n throw new Error(`${decodeErrPrefix} indefinite length items not allowed`)\n }\n return new Token(Type.break, undefined, 1)\n}\n\n/**\n * @param {number} value\n * @param {number} bytes\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nfunction createToken (value, bytes, options) {\n if (options) {\n if (options.allowNaN === false && Number.isNaN(value)) {\n throw new Error(`${decodeErrPrefix} NaN values are not supported`)\n }\n if (options.allowInfinity === false && (value === Infinity || value === -Infinity)) {\n throw new Error(`${decodeErrPrefix} Infinity values are not supported`)\n }\n }\n return new Token(Type.float, value, bytes)\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeFloat16 (data, pos, _minor, options) {\n return createToken(readFloat16(data, pos + 1), 3, options)\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeFloat32 (data, pos, _minor, options) {\n return createToken(readFloat32(data, pos + 1), 5, options)\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeFloat64 (data, pos, _minor, options) {\n return createToken(readFloat64(data, pos + 1), 9, options)\n}\n\n/**\n * @param {Bl} buf\n * @param {Token} token\n * @param {EncodeOptions} options\n */\nexport function encodeFloat (buf, token, options) {\n const float = token.value\n\n if (float === false) {\n buf.push([Type.float.majorEncoded | MINOR_FALSE])\n } else if (float === true) {\n buf.push([Type.float.majorEncoded | MINOR_TRUE])\n } else if (float === null) {\n buf.push([Type.float.majorEncoded | MINOR_NULL])\n } else if (float === undefined) {\n buf.push([Type.float.majorEncoded | MINOR_UNDEFINED])\n } else {\n let decoded\n let success = false\n if (!options || options.float64 !== true) {\n encodeFloat16(float)\n decoded = readFloat16(ui8a, 1)\n if (float === decoded || Number.isNaN(float)) {\n ui8a[0] = 0xf9\n buf.push(ui8a.slice(0, 3))\n success = true\n } else {\n encodeFloat32(float)\n decoded = readFloat32(ui8a, 1)\n if (float === decoded) {\n ui8a[0] = 0xfa\n buf.push(ui8a.slice(0, 5))\n success = true\n }\n }\n }\n if (!success) {\n encodeFloat64(float)\n decoded = readFloat64(ui8a, 1)\n ui8a[0] = 0xfb\n buf.push(ui8a.slice(0, 9))\n }\n }\n}\n\n/**\n * @param {Token} token\n * @param {EncodeOptions} options\n * @returns {number}\n */\nencodeFloat.encodedSize = function encodedSize (token, options) {\n const float = token.value\n\n if (float === false || float === true || float === null || float === undefined) {\n return 1\n }\n\n if (!options || options.float64 !== true) {\n encodeFloat16(float)\n let decoded = readFloat16(ui8a, 1)\n if (float === decoded || Number.isNaN(float)) {\n return 3\n }\n encodeFloat32(float)\n decoded = readFloat32(ui8a, 1)\n if (float === decoded) {\n return 5\n }\n }\n return 9\n}\n\nconst buffer = new ArrayBuffer(9)\nconst dataView = new DataView(buffer, 1)\nconst ui8a = new Uint8Array(buffer, 0)\n\n/**\n * @param {number} inp\n */\nfunction encodeFloat16 (inp) {\n if (inp === Infinity) {\n dataView.setUint16(0, 0x7c00, false)\n } else if (inp === -Infinity) {\n dataView.setUint16(0, 0xfc00, false)\n } else if (Number.isNaN(inp)) {\n dataView.setUint16(0, 0x7e00, false)\n } else {\n dataView.setFloat32(0, inp)\n const valu32 = dataView.getUint32(0)\n const exponent = (valu32 & 0x7f800000) >> 23\n const mantissa = valu32 & 0x7fffff\n\n /* c8 ignore next 6 */\n if (exponent === 0xff) {\n // too big, Infinity, but this should be hard (impossible?) to trigger\n dataView.setUint16(0, 0x7c00, false)\n } else if (exponent === 0x00) {\n // 0.0, -0.0 and subnormals, shouldn't be possible to get here because 0.0 should be counted as an int\n dataView.setUint16(0, ((inp & 0x80000000) >> 16) | (mantissa >> 13), false)\n } else { // standard numbers\n // chunks of logic here borrowed from https://github.com/PJK/libcbor/blob/c78f437182533e3efa8d963ff4b945bb635c2284/src/cbor/encoding.c#L127\n const logicalExponent = exponent - 127\n // Now we know that 2^exponent <= 0 logically\n /* c8 ignore next 6 */\n if (logicalExponent < -24) {\n /* No unambiguous representation exists, this float is not a half float\n and is too small to be represented using a half, round off to zero.\n Consistent with the reference implementation. */\n // should be difficult (impossible?) to get here in JS\n dataView.setUint16(0, 0)\n } else if (logicalExponent < -14) {\n /* Offset the remaining decimal places by shifting the significand, the\n value is lost. This is an implementation decision that works around the\n absence of standard half-float in the language. */\n dataView.setUint16(0, ((valu32 & 0x80000000) >> 16) | /* sign bit */ (1 << (24 + logicalExponent)), false)\n } else {\n dataView.setUint16(0, ((valu32 & 0x80000000) >> 16) | ((logicalExponent + 15) << 10) | (mantissa >> 13), false)\n }\n }\n }\n}\n\n/**\n * @param {Uint8Array} ui8a\n * @param {number} pos\n * @returns {number}\n */\nfunction readFloat16 (ui8a, pos) {\n if (ui8a.length - pos < 2) {\n throw new Error(`${decodeErrPrefix} not enough data for float16`)\n }\n\n const half = (ui8a[pos] << 8) + ui8a[pos + 1]\n if (half === 0x7c00) {\n return Infinity\n }\n if (half === 0xfc00) {\n return -Infinity\n }\n if (half === 0x7e00) {\n return NaN\n }\n const exp = (half >> 10) & 0x1f\n const mant = half & 0x3ff\n let val\n if (exp === 0) {\n val = mant * (2 ** -24)\n } else if (exp !== 31) {\n val = (mant + 1024) * (2 ** (exp - 25))\n /* c8 ignore next 4 */\n } else {\n // may not be possible to get here\n val = mant === 0 ? Infinity : NaN\n }\n return (half & 0x8000) ? -val : val\n}\n\n/**\n * @param {number} inp\n */\nfunction encodeFloat32 (inp) {\n dataView.setFloat32(0, inp, false)\n}\n\n/**\n * @param {Uint8Array} ui8a\n * @param {number} pos\n * @returns {number}\n */\nfunction readFloat32 (ui8a, pos) {\n if (ui8a.length - pos < 4) {\n throw new Error(`${decodeErrPrefix} not enough data for float32`)\n }\n const offset = (ui8a.byteOffset || 0) + pos\n return new DataView(ui8a.buffer, offset, 4).getFloat32(0, false)\n}\n\n/**\n * @param {number} inp\n */\nfunction encodeFloat64 (inp) {\n dataView.setFloat64(0, inp, false)\n}\n\n/**\n * @param {Uint8Array} ui8a\n * @param {number} pos\n * @returns {number}\n */\nfunction readFloat64 (ui8a, pos) {\n if (ui8a.length - pos < 8) {\n throw new Error(`${decodeErrPrefix} not enough data for float64`)\n }\n const offset = (ui8a.byteOffset || 0) + pos\n return new DataView(ui8a.buffer, offset, 8).getFloat64(0, false)\n}\n\n/**\n * @param {Token} _tok1\n * @param {Token} _tok2\n * @returns {number}\n */\nencodeFloat.compareTokens = encodeUint.compareTokens\n/*\nencodeFloat.compareTokens = function compareTokens (_tok1, _tok2) {\n return _tok1\n throw new Error(`${encodeErrPrefix} cannot use floats as map keys`)\n}\n*/\n","import { Token, Type } from './token.js'\nimport * as uint from './0uint.js'\nimport * as negint from './1negint.js'\nimport * as bytes from './2bytes.js'\nimport * as string from './3string.js'\nimport * as array from './4array.js'\nimport * as map from './5map.js'\nimport * as tag from './6tag.js'\nimport * as float from './7float.js'\nimport { decodeErrPrefix } from './common.js'\nimport { fromArray } from './byte-utils.js'\n\n/**\n * @typedef {import('../interface').DecodeOptions} DecodeOptions\n */\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} minor\n */\nfunction invalidMinor (data, pos, minor) {\n throw new Error(`${decodeErrPrefix} encountered invalid minor (${minor}) for major ${data[pos] >>> 5}`)\n}\n\n/**\n * @param {string} msg\n * @returns {()=>any}\n */\nfunction errorer (msg) {\n return () => { throw new Error(`${decodeErrPrefix} ${msg}`) }\n}\n\n/** @type {((data:Uint8Array, pos:number, minor:number, options?:DecodeOptions) => any)[]} */\nexport const jump = []\n\n// unsigned integer, 0x00..0x17 (0..23)\nfor (let i = 0; i <= 0x17; i++) {\n jump[i] = invalidMinor // uint.decodeUintCompact, handled by quick[]\n}\njump[0x18] = uint.decodeUint8 // unsigned integer, one-byte uint8_t follows\njump[0x19] = uint.decodeUint16 // unsigned integer, two-byte uint16_t follows\njump[0x1a] = uint.decodeUint32 // unsigned integer, four-byte uint32_t follows\njump[0x1b] = uint.decodeUint64 // unsigned integer, eight-byte uint64_t follows\njump[0x1c] = invalidMinor\njump[0x1d] = invalidMinor\njump[0x1e] = invalidMinor\njump[0x1f] = invalidMinor\n// negative integer, -1-0x00..-1-0x17 (-1..-24)\nfor (let i = 0x20; i <= 0x37; i++) {\n jump[i] = invalidMinor // negintDecode, handled by quick[]\n}\njump[0x38] = negint.decodeNegint8 // negative integer, -1-n one-byte uint8_t for n follows\njump[0x39] = negint.decodeNegint16 // negative integer, -1-n two-byte uint16_t for n follows\njump[0x3a] = negint.decodeNegint32 // negative integer, -1-n four-byte uint32_t for follows\njump[0x3b] = negint.decodeNegint64 // negative integer, -1-n eight-byte uint64_t for follows\njump[0x3c] = invalidMinor\njump[0x3d] = invalidMinor\njump[0x3e] = invalidMinor\njump[0x3f] = invalidMinor\n// byte string, 0x00..0x17 bytes follow\nfor (let i = 0x40; i <= 0x57; i++) {\n jump[i] = bytes.decodeBytesCompact\n}\njump[0x58] = bytes.decodeBytes8 // byte string, one-byte uint8_t for n, and then n bytes follow\njump[0x59] = bytes.decodeBytes16 // byte string, two-byte uint16_t for n, and then n bytes follow\njump[0x5a] = bytes.decodeBytes32 // byte string, four-byte uint32_t for n, and then n bytes follow\njump[0x5b] = bytes.decodeBytes64 // byte string, eight-byte uint64_t for n, and then n bytes follow\njump[0x5c] = invalidMinor\njump[0x5d] = invalidMinor\njump[0x5e] = invalidMinor\njump[0x5f] = errorer('indefinite length bytes/strings are not supported') // byte string, byte strings follow, terminated by \"break\"\n// UTF-8 string 0x00..0x17 bytes follow\nfor (let i = 0x60; i <= 0x77; i++) {\n jump[i] = string.decodeStringCompact\n}\njump[0x78] = string.decodeString8 // UTF-8 string, one-byte uint8_t for n, and then n bytes follow\njump[0x79] = string.decodeString16 // UTF-8 string, two-byte uint16_t for n, and then n bytes follow\njump[0x7a] = string.decodeString32 // UTF-8 string, four-byte uint32_t for n, and then n bytes follow\njump[0x7b] = string.decodeString64 // UTF-8 string, eight-byte uint64_t for n, and then n bytes follow\njump[0x7c] = invalidMinor\njump[0x7d] = invalidMinor\njump[0x7e] = invalidMinor\njump[0x7f] = errorer('indefinite length bytes/strings are not supported') // UTF-8 strings follow, terminated by \"break\"\n// array, 0x00..0x17 data items follow\nfor (let i = 0x80; i <= 0x97; i++) {\n jump[i] = array.decodeArrayCompact\n}\njump[0x98] = array.decodeArray8 // array, one-byte uint8_t for n, and then n data items follow\njump[0x99] = array.decodeArray16 // array, two-byte uint16_t for n, and then n data items follow\njump[0x9a] = array.decodeArray32 // array, four-byte uint32_t for n, and then n data items follow\njump[0x9b] = array.decodeArray64 // array, eight-byte uint64_t for n, and then n data items follow\njump[0x9c] = invalidMinor\njump[0x9d] = invalidMinor\njump[0x9e] = invalidMinor\njump[0x9f] = array.decodeArrayIndefinite // array, data items follow, terminated by \"break\"\n// map, 0x00..0x17 pairs of data items follow\nfor (let i = 0xa0; i <= 0xb7; i++) {\n jump[i] = map.decodeMapCompact\n}\njump[0xb8] = map.decodeMap8 // map, one-byte uint8_t for n, and then n pairs of data items follow\njump[0xb9] = map.decodeMap16 // map, two-byte uint16_t for n, and then n pairs of data items follow\njump[0xba] = map.decodeMap32 // map, four-byte uint32_t for n, and then n pairs of data items follow\njump[0xbb] = map.decodeMap64 // map, eight-byte uint64_t for n, and then n pairs of data items follow\njump[0xbc] = invalidMinor\njump[0xbd] = invalidMinor\njump[0xbe] = invalidMinor\njump[0xbf] = map.decodeMapIndefinite // map, pairs of data items follow, terminated by \"break\"\n// tags\nfor (let i = 0xc0; i <= 0xd7; i++) {\n jump[i] = tag.decodeTagCompact\n}\njump[0xd8] = tag.decodeTag8\njump[0xd9] = tag.decodeTag16\njump[0xda] = tag.decodeTag32\njump[0xdb] = tag.decodeTag64\njump[0xdc] = invalidMinor\njump[0xdd] = invalidMinor\njump[0xde] = invalidMinor\njump[0xdf] = invalidMinor\n// 0xe0..0xf3 simple values, unsupported\nfor (let i = 0xe0; i <= 0xf3; i++) {\n jump[i] = errorer('simple values are not supported')\n}\njump[0xf4] = invalidMinor // false, handled by quick[]\njump[0xf5] = invalidMinor // true, handled by quick[]\njump[0xf6] = invalidMinor // null, handled by quick[]\njump[0xf7] = float.decodeUndefined // undefined\njump[0xf8] = errorer('simple values are not supported') // simple value, one byte follows, unsupported\njump[0xf9] = float.decodeFloat16 // half-precision float (two-byte IEEE 754)\njump[0xfa] = float.decodeFloat32 // single-precision float (four-byte IEEE 754)\njump[0xfb] = float.decodeFloat64 // double-precision float (eight-byte IEEE 754)\njump[0xfc] = invalidMinor\njump[0xfd] = invalidMinor\njump[0xfe] = invalidMinor\njump[0xff] = float.decodeBreak // \"break\" stop code\n\n/** @type {Token[]} */\nexport const quick = []\n// ints <24\nfor (let i = 0; i < 24; i++) {\n quick[i] = new Token(Type.uint, i, 1)\n}\n// negints >= -24\nfor (let i = -1; i >= -24; i--) {\n quick[31 - i] = new Token(Type.negint, i, 1)\n}\n// empty bytes\nquick[0x40] = new Token(Type.bytes, new Uint8Array(0), 1)\n// empty string\nquick[0x60] = new Token(Type.string, '', 1)\n// empty list\nquick[0x80] = new Token(Type.array, 0, 1)\n// empty map\nquick[0xa0] = new Token(Type.map, 0, 1)\n// false\nquick[0xf4] = new Token(Type.false, false, 1)\n// true\nquick[0xf5] = new Token(Type.true, true, 1)\n// null\nquick[0xf6] = new Token(Type.null, null, 1)\n\n/**\n * @param {Token} token\n * @returns {Uint8Array|undefined}\n */\nexport function quickEncodeToken (token) {\n switch (token.type) {\n case Type.false:\n return fromArray([0xf4])\n case Type.true:\n return fromArray([0xf5])\n case Type.null:\n return fromArray([0xf6])\n case Type.bytes:\n if (!token.value.length) {\n return fromArray([0x40])\n }\n return\n case Type.string:\n if (token.value === '') {\n return fromArray([0x60])\n }\n return\n case Type.array:\n if (token.value === 0) {\n return fromArray([0x80])\n }\n /* c8 ignore next 2 */\n // shouldn't be possible if this were called when there was only one token\n return\n case Type.map:\n if (token.value === 0) {\n return fromArray([0xa0])\n }\n /* c8 ignore next 2 */\n // shouldn't be possible if this were called when there was only one token\n return\n case Type.uint:\n if (token.value < 24) {\n return fromArray([Number(token.value)])\n }\n return\n case Type.negint:\n if (token.value >= -24) {\n return fromArray([31 - Number(token.value)])\n }\n }\n}\n","import { is } from './is.js'\nimport { Token, Type } from './token.js'\nimport { Bl } from './bl.js'\nimport { encodeErrPrefix } from './common.js'\nimport { quickEncodeToken } from './jump.js'\nimport { asU8A } from './byte-utils.js'\n\nimport { encodeUint } from './0uint.js'\nimport { encodeNegint } from './1negint.js'\nimport { encodeBytes } from './2bytes.js'\nimport { encodeString } from './3string.js'\nimport { encodeArray } from './4array.js'\nimport { encodeMap } from './5map.js'\nimport { encodeTag } from './6tag.js'\nimport { encodeFloat } from './7float.js'\n\n/**\n * @typedef {import('../interface').EncodeOptions} EncodeOptions\n * @typedef {import('../interface').OptionalTypeEncoder} OptionalTypeEncoder\n * @typedef {import('../interface').Reference} Reference\n * @typedef {import('../interface').StrictTypeEncoder} StrictTypeEncoder\n * @typedef {import('../interface').TokenTypeEncoder} TokenTypeEncoder\n * @typedef {import('../interface').TokenOrNestedTokens} TokenOrNestedTokens\n */\n\n/** @type {EncodeOptions} */\nconst defaultEncodeOptions = {\n float64: false,\n mapSorter,\n quickEncodeToken\n}\n\n/** @returns {TokenTypeEncoder[]} */\nexport function makeCborEncoders () {\n const encoders = []\n encoders[Type.uint.major] = encodeUint\n encoders[Type.negint.major] = encodeNegint\n encoders[Type.bytes.major] = encodeBytes\n encoders[Type.string.major] = encodeString\n encoders[Type.array.major] = encodeArray\n encoders[Type.map.major] = encodeMap\n encoders[Type.tag.major] = encodeTag\n encoders[Type.float.major] = encodeFloat\n return encoders\n}\n\nconst cborEncoders = makeCborEncoders()\n\nconst buf = new Bl()\n\n/** @implements {Reference} */\nclass Ref {\n /**\n * @param {object|any[]} obj\n * @param {Reference|undefined} parent\n */\n constructor (obj, parent) {\n this.obj = obj\n this.parent = parent\n }\n\n /**\n * @param {object|any[]} obj\n * @returns {boolean}\n */\n includes (obj) {\n /** @type {Reference|undefined} */\n let p = this\n do {\n if (p.obj === obj) {\n return true\n }\n } while (p = p.parent) // eslint-disable-line\n return false\n }\n\n /**\n * @param {Reference|undefined} stack\n * @param {object|any[]} obj\n * @returns {Reference}\n */\n static createCheck (stack, obj) {\n if (stack && stack.includes(obj)) {\n throw new Error(`${encodeErrPrefix} object contains circular references`)\n }\n return new Ref(obj, stack)\n }\n}\n\nconst simpleTokens = {\n null: new Token(Type.null, null),\n undefined: new Token(Type.undefined, undefined),\n true: new Token(Type.true, true),\n false: new Token(Type.false, false),\n emptyArray: new Token(Type.array, 0),\n emptyMap: new Token(Type.map, 0)\n}\n\n/** @type {{[typeName: string]: StrictTypeEncoder}} */\nconst typeEncoders = {\n /**\n * @param {any} obj\n * @param {string} _typ\n * @param {EncodeOptions} _options\n * @param {Reference} [_refStack]\n * @returns {TokenOrNestedTokens}\n */\n number (obj, _typ, _options, _refStack) {\n if (!Number.isInteger(obj) || !Number.isSafeInteger(obj)) {\n return new Token(Type.float, obj)\n } else if (obj >= 0) {\n return new Token(Type.uint, obj)\n } else {\n return new Token(Type.negint, obj)\n }\n },\n\n /**\n * @param {any} obj\n * @param {string} _typ\n * @param {EncodeOptions} _options\n * @param {Reference} [_refStack]\n * @returns {TokenOrNestedTokens}\n */\n bigint (obj, _typ, _options, _refStack) {\n if (obj >= BigInt(0)) {\n return new Token(Type.uint, obj)\n } else {\n return new Token(Type.negint, obj)\n }\n },\n\n /**\n * @param {any} obj\n * @param {string} _typ\n * @param {EncodeOptions} _options\n * @param {Reference} [_refStack]\n * @returns {TokenOrNestedTokens}\n */\n Uint8Array (obj, _typ, _options, _refStack) {\n return new Token(Type.bytes, obj)\n },\n\n /**\n * @param {any} obj\n * @param {string} _typ\n * @param {EncodeOptions} _options\n * @param {Reference} [_refStack]\n * @returns {TokenOrNestedTokens}\n */\n string (obj, _typ, _options, _refStack) {\n return new Token(Type.string, obj)\n },\n\n /**\n * @param {any} obj\n * @param {string} _typ\n * @param {EncodeOptions} _options\n * @param {Reference} [_refStack]\n * @returns {TokenOrNestedTokens}\n */\n boolean (obj, _typ, _options, _refStack) {\n return obj ? simpleTokens.true : simpleTokens.false\n },\n\n /**\n * @param {any} _obj\n * @param {string} _typ\n * @param {EncodeOptions} _options\n * @param {Reference} [_refStack]\n * @returns {TokenOrNestedTokens}\n */\n null (_obj, _typ, _options, _refStack) {\n return simpleTokens.null\n },\n\n /**\n * @param {any} _obj\n * @param {string} _typ\n * @param {EncodeOptions} _options\n * @param {Reference} [_refStack]\n * @returns {TokenOrNestedTokens}\n */\n undefined (_obj, _typ, _options, _refStack) {\n return simpleTokens.undefined\n },\n\n /**\n * @param {any} obj\n * @param {string} _typ\n * @param {EncodeOptions} _options\n * @param {Reference} [_refStack]\n * @returns {TokenOrNestedTokens}\n */\n ArrayBuffer (obj, _typ, _options, _refStack) {\n return new Token(Type.bytes, new Uint8Array(obj))\n },\n\n /**\n * @param {any} obj\n * @param {string} _typ\n * @param {EncodeOptions} _options\n * @param {Reference} [_refStack]\n * @returns {TokenOrNestedTokens}\n */\n DataView (obj, _typ, _options, _refStack) {\n return new Token(Type.bytes, new Uint8Array(obj.buffer, obj.byteOffset, obj.byteLength))\n },\n\n /**\n * @param {any} obj\n * @param {string} _typ\n * @param {EncodeOptions} options\n * @param {Reference} [refStack]\n * @returns {TokenOrNestedTokens}\n */\n Array (obj, _typ, options, refStack) {\n if (!obj.length) {\n if (options.addBreakTokens === true) {\n return [simpleTokens.emptyArray, new Token(Type.break)]\n }\n return simpleTokens.emptyArray\n }\n refStack = Ref.createCheck(refStack, obj)\n const entries = []\n let i = 0\n for (const e of obj) {\n entries[i++] = objectToTokens(e, options, refStack)\n }\n if (options.addBreakTokens) {\n return [new Token(Type.array, obj.length), entries, new Token(Type.break)]\n }\n return [new Token(Type.array, obj.length), entries]\n },\n\n /**\n * @param {any} obj\n * @param {string} typ\n * @param {EncodeOptions} options\n * @param {Reference} [refStack]\n * @returns {TokenOrNestedTokens}\n */\n Object (obj, typ, options, refStack) {\n // could be an Object or a Map\n const isMap = typ !== 'Object'\n // it's slightly quicker to use Object.keys() than Object.entries()\n const keys = isMap ? obj.keys() : Object.keys(obj)\n const length = isMap ? obj.size : keys.length\n if (!length) {\n if (options.addBreakTokens === true) {\n return [simpleTokens.emptyMap, new Token(Type.break)]\n }\n return simpleTokens.emptyMap\n }\n refStack = Ref.createCheck(refStack, obj)\n /** @type {TokenOrNestedTokens[]} */\n const entries = []\n let i = 0\n for (const key of keys) {\n entries[i++] = [\n objectToTokens(key, options, refStack),\n objectToTokens(isMap ? obj.get(key) : obj[key], options, refStack)\n ]\n }\n sortMapEntries(entries, options)\n if (options.addBreakTokens) {\n return [new Token(Type.map, length), entries, new Token(Type.break)]\n }\n return [new Token(Type.map, length), entries]\n }\n}\n\ntypeEncoders.Map = typeEncoders.Object\ntypeEncoders.Buffer = typeEncoders.Uint8Array\nfor (const typ of 'Uint8Clamped Uint16 Uint32 Int8 Int16 Int32 BigUint64 BigInt64 Float32 Float64'.split(' ')) {\n typeEncoders[`${typ}Array`] = typeEncoders.DataView\n}\n\n/**\n * @param {any} obj\n * @param {EncodeOptions} [options]\n * @param {Reference} [refStack]\n * @returns {TokenOrNestedTokens}\n */\nfunction objectToTokens (obj, options = {}, refStack) {\n const typ = is(obj)\n const customTypeEncoder = (options && options.typeEncoders && /** @type {OptionalTypeEncoder} */ options.typeEncoders[typ]) || typeEncoders[typ]\n if (typeof customTypeEncoder === 'function') {\n const tokens = customTypeEncoder(obj, typ, options, refStack)\n if (tokens != null) {\n return tokens\n }\n }\n const typeEncoder = typeEncoders[typ]\n if (!typeEncoder) {\n throw new Error(`${encodeErrPrefix} unsupported type: ${typ}`)\n }\n return typeEncoder(obj, typ, options, refStack)\n}\n\n/*\nCBOR key sorting is a mess.\n\nThe canonicalisation recommendation from https://tools.ietf.org/html/rfc7049#section-3.9\nincludes the wording:\n\n> The keys in every map must be sorted lowest value to highest.\n> Sorting is performed on the bytes of the representation of the key\n> data items without paying attention to the 3/5 bit splitting for\n> major types.\n> ...\n> * If two keys have different lengths, the shorter one sorts\n earlier;\n> * If two keys have the same length, the one with the lower value\n in (byte-wise) lexical order sorts earlier.\n\n1. It is not clear what \"bytes of the representation of the key\" means: is it\n the CBOR representation, or the binary representation of the object itself?\n Consider the int and uint difference here.\n2. It is not clear what \"without paying attention to\" means: do we include it\n and compare on that? Or do we omit the special prefix byte, (mostly) treating\n the key in its plain binary representation form.\n\nThe FIDO 2.0: Client To Authenticator Protocol spec takes the original CBOR\nwording and clarifies it according to their understanding.\nhttps://fidoalliance.org/specs/fido-v2.0-rd-20170927/fido-client-to-authenticator-protocol-v2.0-rd-20170927.html#message-encoding\n\n> The keys in every map must be sorted lowest value to highest. Sorting is\n> performed on the bytes of the representation of the key data items without\n> paying attention to the 3/5 bit splitting for major types. The sorting rules\n> are:\n> * If the major types are different, the one with the lower value in numerical\n> order sorts earlier.\n> * If two keys have different lengths, the shorter one sorts earlier;\n> * If two keys have the same length, the one with the lower value in\n> (byte-wise) lexical order sorts earlier.\n\nSome other implementations, such as borc, do a full encode then do a\nlength-first, byte-wise-second comparison:\nhttps://github.com/dignifiedquire/borc/blob/b6bae8b0bcde7c3976b0f0f0957208095c392a36/src/encoder.js#L358\nhttps://github.com/dignifiedquire/borc/blob/b6bae8b0bcde7c3976b0f0f0957208095c392a36/src/utils.js#L143-L151\n\nThis has the benefit of being able to easily handle arbitrary keys, including\ncomplex types (maps and arrays).\n\nWe'll opt for the FIDO approach, since it affords some efficies since we don't\nneed a full encode of each key to determine order and can defer to the types\nto determine how to most efficiently order their values (i.e. int and uint\nordering can be done on the numbers, no need for byte-wise, for example).\n\nRecommendation: stick to single key types or you'll get into trouble, and prefer\nstring keys because it's much simpler that way.\n*/\n\n/*\n(UPDATE, Dec 2020)\nhttps://tools.ietf.org/html/rfc8949 is the updated CBOR spec and clarifies some\nof the questions above with a new recommendation for sorting order being much\ncloser to what would be expected in other environments (i.e. no length-first\nweirdness).\nThis new sorting order is not yet implemented here but could be added as an\noption. \"Determinism\" (canonicity) is system dependent and it's difficult to\nchange existing systems that are built with existing expectations. So if a new\nordering is introduced here, the old needs to be kept as well with the user\nhaving the option.\n*/\n\n/**\n * @param {TokenOrNestedTokens[]} entries\n * @param {EncodeOptions} options\n */\nfunction sortMapEntries (entries, options) {\n if (options.mapSorter) {\n entries.sort(options.mapSorter)\n }\n}\n\n/**\n * @param {(Token|Token[])[]} e1\n * @param {(Token|Token[])[]} e2\n * @returns {number}\n */\nfunction mapSorter (e1, e2) {\n // the key position ([0]) could have a single token or an array\n // almost always it'll be a single token but complex key might get involved\n /* c8 ignore next 2 */\n const keyToken1 = Array.isArray(e1[0]) ? e1[0][0] : e1[0]\n const keyToken2 = Array.isArray(e2[0]) ? e2[0][0] : e2[0]\n\n // different key types\n if (keyToken1.type !== keyToken2.type) {\n return keyToken1.type.compare(keyToken2.type)\n }\n\n const major = keyToken1.type.major\n // TODO: handle case where cmp === 0 but there are more keyToken e. complex type)\n const tcmp = cborEncoders[major].compareTokens(keyToken1, keyToken2)\n /* c8 ignore next 5 */\n if (tcmp === 0) {\n // duplicate key or complex type where the first token matched,\n // i.e. a map or array and we're only comparing the opening token\n console.warn('WARNING: complex key types used, CBOR key sorting guarantees are gone')\n }\n return tcmp\n}\n\n/**\n * @param {Bl} buf\n * @param {TokenOrNestedTokens} tokens\n * @param {TokenTypeEncoder[]} encoders\n * @param {EncodeOptions} options\n */\nfunction tokensToEncoded (buf, tokens, encoders, options) {\n if (Array.isArray(tokens)) {\n for (const token of tokens) {\n tokensToEncoded(buf, token, encoders, options)\n }\n } else {\n encoders[tokens.type.major](buf, tokens, options)\n }\n}\n\n/**\n * @param {any} data\n * @param {TokenTypeEncoder[]} encoders\n * @param {EncodeOptions} options\n * @returns {Uint8Array}\n */\nfunction encodeCustom (data, encoders, options) {\n const tokens = objectToTokens(data, options)\n if (!Array.isArray(tokens) && options.quickEncodeToken) {\n const quickBytes = options.quickEncodeToken(tokens)\n if (quickBytes) {\n return quickBytes\n }\n const encoder = encoders[tokens.type.major]\n if (encoder.encodedSize) {\n const size = encoder.encodedSize(tokens, options)\n const buf = new Bl(size)\n encoder(buf, tokens, options)\n /* c8 ignore next 4 */\n // this would be a problem with encodedSize() functions\n if (buf.chunks.length !== 1) {\n throw new Error(`Unexpected error: pre-calculated length for ${tokens} was wrong`)\n }\n return asU8A(buf.chunks[0])\n }\n }\n buf.reset()\n tokensToEncoded(buf, tokens, encoders, options)\n return buf.toBytes(true)\n}\n\n/**\n * @param {any} data\n * @param {EncodeOptions} [options]\n * @returns {Uint8Array}\n */\nfunction encode (data, options) {\n options = Object.assign({}, defaultEncodeOptions, options)\n return encodeCustom(data, cborEncoders, options)\n}\n\nexport { objectToTokens, encode, encodeCustom, Ref }\n","import { decodeErrPrefix } from './common.js'\nimport { Type } from './token.js'\nimport { jump, quick } from './jump.js'\n\n/**\n * @typedef {import('./token.js').Token} Token\n * @typedef {import('../interface').DecodeOptions} DecodeOptions\n * @typedef {import('../interface').DecodeTokenizer} DecodeTokenizer\n */\n\nconst defaultDecodeOptions = {\n strict: false,\n allowIndefinite: true,\n allowUndefined: true,\n allowBigInt: true\n}\n\n/**\n * @implements {DecodeTokenizer}\n */\nclass Tokeniser {\n /**\n * @param {Uint8Array} data\n * @param {DecodeOptions} options\n */\n constructor (data, options = {}) {\n this._pos = 0\n this.data = data\n this.options = options\n }\n\n pos () {\n return this._pos\n }\n\n done () {\n return this._pos >= this.data.length\n }\n\n next () {\n const byt = this.data[this._pos]\n let token = quick[byt]\n if (token === undefined) {\n const decoder = jump[byt]\n /* c8 ignore next 4 */\n // if we're here then there's something wrong with our jump or quick lists!\n if (!decoder) {\n throw new Error(`${decodeErrPrefix} no decoder for major type ${byt >>> 5} (byte 0x${byt.toString(16).padStart(2, '0')})`)\n }\n const minor = byt & 31\n token = decoder(this.data, this._pos, minor, this.options)\n }\n // @ts-ignore we get to assume encodedLength is set (crossing fingers slightly)\n this._pos += token.encodedLength\n return token\n }\n}\n\nconst DONE = Symbol.for('DONE')\nconst BREAK = Symbol.for('BREAK')\n\n/**\n * @param {Token} token\n * @param {DecodeTokenizer} tokeniser\n * @param {DecodeOptions} options\n * @returns {any|BREAK|DONE}\n */\nfunction tokenToArray (token, tokeniser, options) {\n const arr = []\n for (let i = 0; i < token.value; i++) {\n const value = tokensToObject(tokeniser, options)\n if (value === BREAK) {\n if (token.value === Infinity) {\n // normal end to indefinite length array\n break\n }\n throw new Error(`${decodeErrPrefix} got unexpected break to lengthed array`)\n }\n if (value === DONE) {\n throw new Error(`${decodeErrPrefix} found array but not enough entries (got ${i}, expected ${token.value})`)\n }\n arr[i] = value\n }\n return arr\n}\n\n/**\n * @param {Token} token\n * @param {DecodeTokenizer} tokeniser\n * @param {DecodeOptions} options\n * @returns {any|BREAK|DONE}\n */\nfunction tokenToMap (token, tokeniser, options) {\n const useMaps = options.useMaps === true\n const obj = useMaps ? undefined : {}\n const m = useMaps ? new Map() : undefined\n for (let i = 0; i < token.value; i++) {\n const key = tokensToObject(tokeniser, options)\n if (key === BREAK) {\n if (token.value === Infinity) {\n // normal end to indefinite length map\n break\n }\n throw new Error(`${decodeErrPrefix} got unexpected break to lengthed map`)\n }\n if (key === DONE) {\n throw new Error(`${decodeErrPrefix} found map but not enough entries (got ${i} [no key], expected ${token.value})`)\n }\n if (useMaps !== true && typeof key !== 'string') {\n throw new Error(`${decodeErrPrefix} non-string keys not supported (got ${typeof key})`)\n }\n if (options.rejectDuplicateMapKeys === true) {\n // @ts-ignore\n if ((useMaps && m.has(key)) || (!useMaps && (key in obj))) {\n throw new Error(`${decodeErrPrefix} found repeat map key \"${key}\"`)\n }\n }\n const value = tokensToObject(tokeniser, options)\n if (value === DONE) {\n throw new Error(`${decodeErrPrefix} found map but not enough entries (got ${i} [no value], expected ${token.value})`)\n }\n if (useMaps) {\n // @ts-ignore TODO reconsider this .. maybe needs to be strict about key types\n m.set(key, value)\n } else {\n // @ts-ignore TODO reconsider this .. maybe needs to be strict about key types\n obj[key] = value\n }\n }\n // @ts-ignore c'mon man\n return useMaps ? m : obj\n}\n\n/**\n * @param {DecodeTokenizer} tokeniser\n * @param {DecodeOptions} options\n * @returns {any|BREAK|DONE}\n */\nfunction tokensToObject (tokeniser, options) {\n // should we support array as an argument?\n // check for tokenIter[Symbol.iterator] and replace tokenIter with what that returns?\n if (tokeniser.done()) {\n return DONE\n }\n\n const token = tokeniser.next()\n\n if (token.type === Type.break) {\n return BREAK\n }\n\n if (token.type.terminal) {\n return token.value\n }\n\n if (token.type === Type.array) {\n return tokenToArray(token, tokeniser, options)\n }\n\n if (token.type === Type.map) {\n return tokenToMap(token, tokeniser, options)\n }\n\n if (token.type === Type.tag) {\n if (options.tags && typeof options.tags[token.value] === 'function') {\n const tagged = tokensToObject(tokeniser, options)\n return options.tags[token.value](tagged)\n }\n throw new Error(`${decodeErrPrefix} tag not supported (${token.value})`)\n }\n /* c8 ignore next */\n throw new Error('unsupported')\n}\n\n/**\n * @param {Uint8Array} data\n * @param {DecodeOptions} [options]\n * @returns {[any, Uint8Array]}\n */\nfunction decodeFirst (data, options) {\n if (!(data instanceof Uint8Array)) {\n throw new Error(`${decodeErrPrefix} data to decode must be a Uint8Array`)\n }\n options = Object.assign({}, defaultDecodeOptions, options)\n const tokeniser = options.tokenizer || new Tokeniser(data, options)\n const decoded = tokensToObject(tokeniser, options)\n if (decoded === DONE) {\n throw new Error(`${decodeErrPrefix} did not find any content to decode`)\n }\n if (decoded === BREAK) {\n throw new Error(`${decodeErrPrefix} got unexpected break`)\n }\n return [decoded, data.subarray(tokeniser.pos())]\n}\n\n/**\n * @param {Uint8Array} data\n * @param {DecodeOptions} [options]\n * @returns {any}\n */\nfunction decode (data, options) {\n const [decoded, remainder] = decodeFirst(data, options)\n if (remainder.length > 0) {\n throw new Error(`${decodeErrPrefix} too many terminals, data makes no sense`)\n }\n return decoded\n}\n\nexport { Tokeniser, tokensToObject, decode, decodeFirst }\n","import { encode } from './lib/encode.js'\nimport { decode, decodeFirst, Tokeniser, tokensToObject } from './lib/decode.js'\nimport { Token, Type } from './lib/token.js'\n\n/**\n * Export the types that were present in the original manual cborg.d.ts\n * @typedef {import('./interface').TagDecoder} TagDecoder\n * There was originally just `TypeEncoder` so don't break types by renaming or not exporting\n * @typedef {import('./interface').OptionalTypeEncoder} TypeEncoder\n * @typedef {import('./interface').DecodeOptions} DecodeOptions\n * @typedef {import('./interface').EncodeOptions} EncodeOptions\n */\n\nexport {\n decode,\n decodeFirst,\n Tokeniser as Tokenizer,\n tokensToObject,\n encode,\n Token,\n Type\n}\n","import * as cborg from 'cborg'\nimport { CID } from 'multiformats/cid'\n\n// https://github.com/ipfs/go-ipfs/issues/3570#issuecomment-273931692\nconst CID_CBOR_TAG = 42\n\n/**\n * @template T\n * @typedef {import('multiformats/codecs/interface').ByteView<T>} ByteView\n */\n\n/**\n * @template T\n * @typedef {import('multiformats/codecs/interface').ArrayBufferView<T>} ArrayBufferView\n */\n\n/**\n * @template T\n * @param {ByteView<T> | ArrayBufferView<T>} buf\n * @returns {ByteView<T>}\n */\nexport function toByteView (buf) {\n if (buf instanceof ArrayBuffer) {\n return new Uint8Array(buf, 0, buf.byteLength)\n }\n\n return buf\n}\n\n/**\n * cidEncoder will receive all Objects during encode, it needs to filter out\n * anything that's not a CID and return `null` for that so it's encoded as\n * normal.\n *\n * @param {any} obj\n * @returns {cborg.Token[]|null}\n */\nfunction cidEncoder (obj) {\n if (obj.asCID !== obj && obj['/'] !== obj.bytes) {\n return null // any other kind of object\n }\n const cid = CID.asCID(obj)\n /* c8 ignore next 4 */\n // very unlikely case, and it'll probably throw a recursion error in cborg\n if (!cid) {\n return null\n }\n const bytes = new Uint8Array(cid.bytes.byteLength + 1)\n bytes.set(cid.bytes, 1) // prefix is 0x00, for historical reasons\n return [\n new cborg.Token(cborg.Type.tag, CID_CBOR_TAG),\n new cborg.Token(cborg.Type.bytes, bytes)\n ]\n}\n\n// eslint-disable-next-line jsdoc/require-returns-check\n/**\n * Intercept all `undefined` values from an object walk and reject the entire\n * object if we find one.\n *\n * @returns {null}\n */\nfunction undefinedEncoder () {\n throw new Error('`undefined` is not supported by the IPLD Data Model and cannot be encoded')\n}\n\n/**\n * Intercept all `number` values from an object walk and reject the entire\n * object if we find something that doesn't fit the IPLD data model (NaN &\n * Infinity).\n *\n * @param {number} num\n * @returns {null}\n */\nfunction numberEncoder (num) {\n if (Number.isNaN(num)) {\n throw new Error('`NaN` is not supported by the IPLD Data Model and cannot be encoded')\n }\n if (num === Infinity || num === -Infinity) {\n throw new Error('`Infinity` and `-Infinity` is not supported by the IPLD Data Model and cannot be encoded')\n }\n return null\n}\n\nconst _encodeOptions = {\n float64: true,\n typeEncoders: {\n Object: cidEncoder,\n undefined: undefinedEncoder,\n number: numberEncoder\n }\n}\n\nexport const encodeOptions = {\n ..._encodeOptions,\n typeEncoders: {\n ..._encodeOptions.typeEncoders\n }\n}\n\n/**\n * @param {Uint8Array} bytes\n * @returns {CID}\n */\nfunction cidDecoder (bytes) {\n if (bytes[0] !== 0) {\n throw new Error('Invalid CID for CBOR tag 42; expected leading 0x00')\n }\n return CID.decode(bytes.subarray(1)) // ignore leading 0x00\n}\n\nconst _decodeOptions = {\n allowIndefinite: false,\n coerceUndefinedToNull: true,\n allowNaN: false,\n allowInfinity: false,\n allowBigInt: true, // this will lead to BigInt for ints outside of\n // safe-integer range, which may surprise users\n strict: true,\n useMaps: false,\n rejectDuplicateMapKeys: true,\n /** @type {import('cborg').TagDecoder[]} */\n tags: []\n}\n_decodeOptions.tags[CID_CBOR_TAG] = cidDecoder\n\nexport const decodeOptions = {\n ..._decodeOptions,\n tags: _decodeOptions.tags.slice()\n}\n\nexport const name = 'dag-cbor'\nexport const code = 0x71\n\n/**\n * @template T\n * @param {T} node\n * @returns {ByteView<T>}\n */\nexport const encode = (node) => cborg.encode(node, _encodeOptions)\n\n/**\n * @template T\n * @param {ByteView<T> | ArrayBufferView<T>} data\n * @returns {T}\n */\nexport const decode = (data) => cborg.decode(toByteView(data), _decodeOptions)\n","import type { EventLink } from \"@web3-storage/pail/clock/api\";\nimport type { Operation } from \"@web3-storage/pail/crdt/api\";\n\nimport type { DbMeta, CryptoOpts, StoreOpts, AnyLink } from \"./blockstore/index.js\";\nimport { Logger } from \"@adviser/cement\";\n\nexport type Falsy = false | null | undefined;\n\nexport function isFalsy(value: unknown): value is Falsy {\n return value === false && value === null && value === undefined;\n}\n\nexport function throwFalsy<T>(value: T | Falsy): T {\n if (isFalsy(value)) {\n throw new Error(\"value is Falsy\");\n }\n return value;\n}\n\nexport function falsyToUndef<T>(value: T | Falsy): T | undefined {\n if (isFalsy(value)) {\n return undefined;\n }\n return value;\n}\n\nexport interface ConfigOpts {\n readonly public?: boolean;\n readonly meta?: DbMeta;\n readonly persistIndexes?: boolean;\n readonly autoCompact?: number;\n readonly crypto?: CryptoOpts;\n readonly store?: StoreOpts;\n // readonly indexStore?: StoreOpts;\n readonly threshold?: number;\n readonly logger?: Logger;\n}\n\nexport type ClockLink = EventLink<Operation>;\n\nexport type ClockHead = ClockLink[];\n\nexport type DocFragment = Uint8Array | string | number | boolean | null | AnyLink | DocFragment[] | object;\n// | { [key: string]: DocFragment };\n\nexport type DocLiteral = string | number | boolean | Uint8Array | unknown;\n\nexport type DocObject = NonNullable<unknown>;\nexport type DocTypes = DocObject;\n\nexport type DocRecord<T extends DocObject> = T;\n\nexport type UnknownDoc = DocRecord<never>;\n\nexport type DocFiles = Record<string, DocFileMeta | File>;\n\nexport interface DocBase {\n readonly _id: string;\n readonly _files?: DocFiles;\n readonly _publicFiles?: DocFiles;\n readonly _deleted?: boolean;\n}\n\nexport type DocWithId<T extends DocTypes> = DocBase & T;\n\nexport type DocSet<T extends DocTypes> = Partial<DocBase> & T;\n\nexport interface DocFileMeta {\n readonly type: string;\n readonly size: number;\n readonly cid: AnyLink;\n readonly car?: AnyLink;\n url?: string;\n file?: () => Promise<File>;\n}\n\nexport interface DocUpdate<T extends DocTypes> {\n readonly id: string;\n readonly value?: DocSet<T>;\n readonly del?: boolean;\n readonly clock?: ClockLink; // would be useful to give ClockLinks a type\n}\n\n// todo merge into above\nexport interface DocValue<T extends DocTypes> {\n readonly doc: DocWithId<T>;\n readonly del: boolean;\n readonly cid: AnyLink;\n}\n\nexport type KeyLiteral = string | number | boolean;\nexport type IndexKeyType = KeyLiteral | KeyLiteral[];\nexport type IndexKey<K extends IndexKeyType> = [K, string];\n\nexport interface IndexUpdate<K extends IndexKeyType> {\n readonly key: IndexKey<K>;\n readonly value?: DocFragment;\n readonly del?: boolean;\n}\n\nexport interface IndexUpdateString {\n readonly key: string;\n readonly value?: DocFragment;\n readonly del?: boolean;\n}\n\n// export interface IndexRowObject<K extends IndexKeyType, T extends DocObject> {\n// readonly id: string;\n// readonly key: K;\n// readonly value: T\n// // readonly row: T // DocFragment;\n// // readonly doc?: DocWithId<T>;\n// // value?: T;\n// // readonly del?: boolean;\n// }\n\n// export interface IndexRowLiteral<K extends IndexKeyType, T extends DocLiteral> {\n// readonly id: string;\n// readonly key: IndexKey<K>;\n// readonly value: T\n// }\n\n// export type IndexRow<K extends IndexKeyType, T extends DocTypes> =\n// T extends DocLiteral ? IndexRowLiteral<K, T> : IndexRowObject<K, T>\n\nexport interface IndexRow<K extends IndexKeyType, T extends DocObject, R extends DocFragment> {\n readonly id: string;\n readonly key: K; // IndexKey<K>;\n readonly value: R;\n readonly doc?: DocWithId<T>;\n}\n\nexport interface IndexRows<K extends IndexKeyType, T extends DocObject, R extends DocFragment = T> {\n readonly rows: IndexRow<K, T, R>[];\n}\nexport interface CRDTMeta {\n readonly head: ClockHead;\n}\n\nexport interface IndexTransactionMeta {\n readonly indexes: Record<string, IdxMeta>;\n}\n\nexport interface FileTransactionMeta {\n readonly files?: AnyLink[];\n}\n\nexport type MetaType = CRDTMeta | IndexTransactionMeta | FileTransactionMeta;\n\nexport interface IdxMeta {\n readonly byId: AnyLink;\n readonly byKey: AnyLink;\n readonly map: string;\n readonly name: string;\n readonly head: ClockHead;\n}\n\nexport interface IdxMetaMap {\n readonly indexes?: Map<string, IdxMeta>;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport interface QueryOpts<K extends IndexKeyType> {\n readonly descending?: boolean;\n readonly limit?: number;\n includeDocs?: boolean;\n readonly range?: [IndexKeyType, IndexKeyType];\n readonly key?: DocFragment;\n readonly keys?: DocFragment[];\n prefix?: IndexKeyType;\n}\n\ntype EmitFn = (k: IndexKeyType, v?: DocFragment) => void;\nexport type MapFn<T extends DocTypes> = (doc: DocWithId<T>, emit: EmitFn) => DocFragment | unknown;\n\nexport interface ChangesOptions {\n readonly dirty?: boolean;\n readonly limit?: number;\n}\n\nexport interface ChangesResponseRow<T extends DocTypes> {\n readonly key: string;\n readonly value: DocWithId<T>;\n readonly clock?: ClockLink;\n}\n\nexport interface ChangesResponse<T extends DocTypes> {\n readonly clock: ClockHead;\n readonly rows: ChangesResponseRow<T>[];\n}\n\nexport interface DbResponse {\n readonly id: string;\n readonly clock: ClockHead;\n}\n\nexport type UpdateListenerFn<T extends DocTypes> = (docs: DocWithId<T>[]) => Promise<void> | void;\nexport type NoUpdateListenerFn = () => Promise<void> | void;\nexport type ListenerFn<T extends DocTypes> = UpdateListenerFn<T> | NoUpdateListenerFn;\n","const r=Object.create(null),E=e=>globalThis.process?.env||import.meta.env||globalThis.Deno?.env.toObject()||globalThis.__env__||(e?r:globalThis),s=new Proxy(r,{get(e,o){return E()[o]??r[o]},has(e,o){const i=E();return o in i||o in r},set(e,o,i){const g=E(!0);return g[o]=i,!0},deleteProperty(e,o){if(!o)return!1;const i=E(!0);return delete i[o],!0},ownKeys(){const e=E(!0);return Object.keys(e)}}),t=typeof process<\"u\"&&process.env&&process.env.NODE_ENV||\"\",p=[[\"APPVEYOR\"],[\"AWS_AMPLIFY\",\"AWS_APP_ID\",{ci:!0}],[\"AZURE_PIPELINES\",\"SYSTEM_TEAMFOUNDATIONCOLLECTIONURI\"],[\"AZURE_STATIC\",\"INPUT_AZURE_STATIC_WEB_APPS_API_TOKEN\"],[\"APPCIRCLE\",\"AC_APPCIRCLE\"],[\"BAMBOO\",\"bamboo_planKey\"],[\"BITBUCKET\",\"BITBUCKET_COMMIT\"],[\"BITRISE\",\"BITRISE_IO\"],[\"BUDDY\",\"BUDDY_WORKSPACE_ID\"],[\"BUILDKITE\"],[\"CIRCLE\",\"CIRCLECI\"],[\"CIRRUS\",\"CIRRUS_CI\"],[\"CLOUDFLARE_PAGES\",\"CF_PAGES\",{ci:!0}],[\"CODEBUILD\",\"CODEBUILD_BUILD_ARN\"],[\"CODEFRESH\",\"CF_BUILD_ID\"],[\"DRONE\"],[\"DRONE\",\"DRONE_BUILD_EVENT\"],[\"DSARI\"],[\"GITHUB_ACTIONS\"],[\"GITLAB\",\"GITLAB_CI\"],[\"GITLAB\",\"CI_MERGE_REQUEST_ID\"],[\"GOCD\",\"GO_PIPELINE_LABEL\"],[\"LAYERCI\"],[\"HUDSON\",\"HUDSON_URL\"],[\"JENKINS\",\"JENKINS_URL\"],[\"MAGNUM\"],[\"NETLIFY\"],[\"NETLIFY\",\"NETLIFY_LOCAL\",{ci:!1}],[\"NEVERCODE\"],[\"RENDER\"],[\"SAIL\",\"SAILCI\"],[\"SEMAPHORE\"],[\"SCREWDRIVER\"],[\"SHIPPABLE\"],[\"SOLANO\",\"TDDIUM\"],[\"STRIDER\"],[\"TEAMCITY\",\"TEAMCITY_VERSION\"],[\"TRAVIS\"],[\"VERCEL\",\"NOW_BUILDER\"],[\"VERCEL\",\"VERCEL\",{ci:!1}],[\"VERCEL\",\"VERCEL_ENV\",{ci:!1}],[\"APPCENTER\",\"APPCENTER_BUILD_ID\"],[\"CODESANDBOX\",\"CODESANDBOX_SSE\",{ci:!1}],[\"STACKBLITZ\"],[\"STORMKIT\"],[\"CLEAVR\"],[\"ZEABUR\"],[\"CODESPHERE\",\"CODESPHERE_APP_ID\",{ci:!0}],[\"RAILWAY\",\"RAILWAY_PROJECT_ID\"],[\"RAILWAY\",\"RAILWAY_SERVICE_ID\"]];function B(){if(globalThis.process?.env)for(const e of p){const o=e[1]||e[0];if(globalThis.process?.env[o])return{name:e[0].toLowerCase(),...e[2]}}return globalThis.process?.env?.SHELL===\"/bin/jsh\"&&globalThis.process?.versions?.webcontainer?{name:\"stackblitz\",ci:!1}:{name:\"\",ci:!1}}const l=B(),d=l.name;function n(e){return e?e!==\"false\":!1}const I=globalThis.process?.platform||\"\",T=n(s.CI)||l.ci!==!1,R=n(globalThis.process?.stdout&&globalThis.process?.stdout.isTTY),U=typeof window<\"u\",h=n(s.DEBUG),C=t===\"test\"||n(s.TEST),f=t===\"production\",v=t===\"dev\"||t===\"development\",m=n(s.MINIMAL)||T||C||!R,a=/^win/i.test(I),M=/^linux/i.test(I),V=/^darwin/i.test(I),Y=!n(s.NO_COLOR)&&(n(s.FORCE_COLOR)||(R||a)&&s.TERM!==\"dumb\"||T),_=(globalThis.process?.versions?.node||\"\").replace(/^v/,\"\")||null,y=Number(_?.split(\".\")[0])||null,W=globalThis.process||Object.create(null),c={versions:{}},w=new Proxy(W,{get(e,o){if(o===\"env\")return s;if(o in e)return e[o];if(o in c)return c[o]}}),A=globalThis.process?.release?.name===\"node\",L=!!globalThis.Bun||!!globalThis.process?.versions?.bun,D=!!globalThis.Deno,O=!!globalThis.fastly,S=!!globalThis.Netlify,N=!!globalThis.EdgeRuntime,u=globalThis.navigator?.userAgent===\"Cloudflare-Workers\",b=!!globalThis.__lagon__,F=[[S,\"netlify\"],[N,\"edge-light\"],[u,\"workerd\"],[O,\"fastly\"],[D,\"deno\"],[L,\"bun\"],[A,\"node\"],[b,\"lagon\"]];function G(){const e=F.find(o=>o[0]);if(e)return{name:e[1]}}const P=G(),K=P?.name||\"\";export{s as env,R as hasTTY,U as hasWindow,L as isBun,T as isCI,Y as isColorSupported,h as isDebug,D as isDeno,v as isDevelopment,N as isEdgeLight,O as isFastly,b as isLagon,M as isLinux,V as isMacOS,m as isMinimal,S as isNetlify,A as isNode,f as isProduction,C as isTest,a as isWindows,u as isWorkerd,t as nodeENV,y as nodeMajorVersion,_ as nodeVersion,I as platform,w as process,d as provider,l as providerInfo,K as runtime,P as runtimeInfo};\n","import { type NodeMap, join } from \"./sys-container.js\";\n\nexport async function createNodeSysContainer(): Promise<NodeMap> {\n const nodePath = \"node:path\";\n const nodeOS = \"node:os\";\n const nodeURL = \"node:url\";\n const nodeFS = \"node:fs\";\n const fs = (await import(nodeFS)).promises;\n // const assert = \"assert\";\n const path = await import(nodePath);\n return {\n state: \"node\",\n ...path,\n ...(await import(nodeOS)),\n ...(await import(nodeURL)),\n ...fs,\n join,\n stat: fs.stat as NodeMap[\"stat\"],\n readdir: fs.readdir as NodeMap[\"readdir\"],\n readfile: fs.readFile as NodeMap[\"readfile\"],\n writefile: fs.writeFile as NodeMap[\"writefile\"],\n };\n}\n","import type { Dirent, MakeDirectoryOptions, ObjectEncodingOptions, PathLike, Stats } from \"node:fs\";\n\nimport * as stdEnv from \"std-env\";\nimport { uuidv4 } from \"uuidv7\";\nimport { ResolveOnce, EnvImpl } from \"@adviser/cement\";\n\nimport { throwFalsy } from \"../types.js\";\n\nexport interface NodeMap {\n state: \"seeded\" | \"browser\" | \"node\";\n join: (...args: string[]) => string;\n dirname: (path: string) => string;\n homedir: () => string;\n fileURLToPath: (url: string | URL) => string;\n // assert: (condition: unknown, message?: string | Error) => void;\n\n mkdir: (path: PathLike, options?: { recursive: boolean }) => Promise<string | undefined>;\n readdir: (path: PathLike, options?: unknown) => Promise<unknown[]>;\n\n rm: (path: PathLike, options?: MakeDirectoryOptions & { recursive: boolean }) => Promise<void>;\n copyFile: (source: PathLike, destination: PathLike) => Promise<void>;\n\n readfile: (path: PathLike, options?: { encoding: BufferEncoding; flag?: string }) => Promise<string>;\n\n stat: (path: PathLike) => Promise<Stats>;\n\n unlink: (path: PathLike) => Promise<void>;\n writefile: (path: PathLike, data: Uint8Array | string) => Promise<void>;\n}\n\n// export function assert(condition: unknown, message?: string | Error): asserts condition {\n// SysContainer.freight?.assert(condition, message);\n// }\n\nconst onceStart = new ResolveOnce<void>();\n\nexport function join(...paths: string[]): string {\n return paths.map((i) => i.replace(/\\/+$/, \"\")).join(\"/\");\n}\n\nconst envImpl = new EnvImpl({\n symbol: \"FP_ENV\",\n presetEnv: new Map([\n // [\"FP_DEBUG\", \"xxx\"],\n // [\"FP_ENV\", \"development\"],\n ]),\n});\n// console.log(`EnvImpl`, envImpl);\n\nclass sysContainer {\n freight: NodeMap = {\n state: \"seeded\",\n join,\n dirname: (path: string) => path.split(\"/\").slice(0, -1).join(\"/\"),\n homedir: () => {\n throw new Error(\"SysContainer:homedir is not available in seeded state\");\n },\n fileURLToPath: (strurl: string | URL) => {\n let url: URL;\n if (typeof strurl === \"string\") {\n url = new URL(strurl);\n } else {\n url = strurl;\n }\n return url.pathname;\n },\n // assert: (condition: unknown, message?: string | Error) => {\n // if (!condition) {\n // if (message instanceof Error) {\n // throw message;\n // } else {\n // throw new Error(message);\n // }\n // }\n // },\n mkdir: () => Promise.reject(new Error(\"SysContainer:mkdir is not available in seeded state\")),\n readdir: () => Promise.reject(new Error(\"SysContainer:readdir is not available in seeded state\")),\n rm: () => Promise.reject(new Error(\"SysContainer:rm is not available in seeded state\")),\n copyFile: () => Promise.reject(new Error(\"SysContainer:copyFile is not available in seeded state\")),\n readfile: () => Promise.reject(new Error(\"SysContainer:readfile is not available in seeded state\")),\n unlink: () => Promise.reject(new Error(\"SysContainer:unlink is not available in seeded state\")),\n writefile: () => Promise.reject(new Error(\"SysContainer:writefile is not available in seeded state\")),\n stat: () => Promise.reject(new Error(\"SysContainer:stat is not available in seeded state\")),\n };\n\n readonly id = uuidv4();\n\n async start(): Promise<void> {\n await onceStart.once(async () => {\n switch (this.freight.state) {\n case \"seeded\":\n if (stdEnv.isNode) {\n const { createNodeSysContainer } = await import(\"./node-sys-container.js\");\n // console.log(\"use NodeSysContainer\");\n this.freight = await createNodeSysContainer();\n } else {\n // console.log(\"use BrowserSysContainer\");\n this.freight.state = \"browser\";\n }\n return;\n case \"browser\":\n case \"node\":\n return;\n }\n });\n }\n\n async readdir(\n path: PathLike,\n options?:\n | (ObjectEncodingOptions & { withFileTypes?: false | undefined; recursive?: boolean })\n | BufferEncoding\n | null\n | undefined,\n ) {\n this.logSeeded(\"readdir\");\n return (throwFalsy(this.freight).readdir(path, options) as Promise<string[]>) || [];\n }\n async readdirent(\n path: PathLike,\n options: (ObjectEncodingOptions & { withFileTypes: true; recursive?: boolean }) | BufferEncoding | null | undefined,\n ): Promise<Dirent[]> {\n this.logSeeded(\"readdirent\");\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return (throwFalsy(this.freight).readdir(path, { ...(options as any), withFileTypes: true }) as Promise<Dirent[]>) || [];\n }\n\n async readfile(path: PathLike, options?: { encoding: BufferEncoding; flag?: string }) {\n this.logSeeded(\"readfile\");\n return throwFalsy(this.freight).readfile(path, options) as unknown as Promise<Buffer>;\n }\n\n async mkdir(path: PathLike, options: { recursive: boolean }) {\n this.logSeeded(\"mkdir\");\n return throwFalsy(this.freight).mkdir(path, options);\n }\n\n async rm(path: PathLike, options: MakeDirectoryOptions & { recursive: boolean }) {\n this.logSeeded(\"rm\");\n return throwFalsy(this.freight).rm(path, options);\n }\n\n async unlink(path: PathLike) {\n this.logSeeded(\"unlink\");\n return throwFalsy(this.freight).unlink(path);\n }\n\n async writefile(path: PathLike, data: Uint8Array | string) {\n this.logSeeded(\"writefile\");\n return throwFalsy(this.freight).writefile(path, data);\n }\n\n async copyFile(source: PathLike, destination: PathLike) {\n this.logSeeded(\"copyFile\");\n return throwFalsy(this.freight).copyFile(source, destination);\n }\n\n async stat(path: PathLike) {\n this.logSeeded(\"stat\");\n return throwFalsy(this.freight).stat(path);\n }\n\n fileURLToPath(url: string | URL) {\n this.logSeeded(\"fileURLToPath\");\n return throwFalsy(this.freight).fileURLToPath(url);\n }\n\n dirname(path: string) {\n this.logSeeded(\"dirname\");\n return throwFalsy(this.freight).dirname(path);\n }\n\n join(...args: string[]): string {\n this.logSeeded(\"join\");\n return throwFalsy(this.freight).join(...args);\n }\n\n homedir = () => {\n this.logSeeded(\"homedir\");\n return throwFalsy(this.freight).homedir();\n };\n\n logSeeded(method: string) {\n if (this.freight.state === \"seeded\") {\n const err = new Error();\n console.warn(`SysContainer.${method} is not available in seeded state:`, err.stack);\n }\n }\n readonly env = envImpl;\n}\n\n// // eslint-disable-next-line @typescript-eslint/no-explicit-any\n// export async function saveImport(fName: string): Promise<any> {\n// try {\n// const i = await import(fName);\n// return i;\n// } catch (e: unknown) {\n// console.error(`saveImport failed for ${fName} with`, e);\n// throw e;\n// }\n// }\n\nexport const SysContainer = new sysContainer();\n","import { SysContainer } from \"./sys-container.js\";\nimport { isDeno, isNode } from \"std-env\";\n\nexport function dataDir(name?: string, base?: string | URL): string {\n if (!base) {\n if (isNode || isDeno) {\n base = SysContainer.env.get(\"FP_STORAGE_URL\") || `file://${SysContainer.join(SysContainer.homedir(), \".fireproof\")}`;\n } else {\n base = `indexdb://fp`;\n }\n }\n let url: URL;\n if (typeof base === \"string\") {\n try {\n url = new URL(base.toString());\n } catch (e) {\n try {\n base = `file://${base}`;\n url = new URL(base);\n } catch (e) {\n throw new Error(`invalid base url: ${base}`);\n }\n }\n } else {\n url = base;\n }\n url.searchParams.set(\"name\", name || \"\");\n return url.toString();\n}\n","import { Logger, getStore } from \"../utils.js\";\nimport { SysContainer } from \"./sys-container.js\";\n\nexport async function getPath(url: URL, logger: Logger): Promise<string> {\n const basePath = url\n .toString()\n .replace(new RegExp(`^${url.protocol}//`), \"\")\n .replace(/\\?.*$/, \"\");\n const name = url.searchParams.get(\"name\");\n if (name) {\n const version = url.searchParams.get(\"version\");\n if (!version) throw logger.Error().Str(\"url\", url.toString()).Msg(`version not found`).AsError();\n return SysContainer.join(basePath, version, name);\n }\n return SysContainer.join(basePath);\n}\n\nexport function getFileName(url: URL, key: string, logger: Logger): string {\n switch (getStore(url, logger, (...a: string[]) => a.join(\"/\"))) {\n case \"data\":\n return key + \".car\";\n case \"meta\":\n return key + \".json\";\n default:\n throw logger.Error().Str(\"url\", url.toString()).Msg(`unsupported store type`).AsError();\n }\n}\n\nexport function ensureIndexName(url: URL, name: string): string {\n if (url.searchParams.has(\"index\")) {\n name = (url.searchParams.get(\"index\")?.replace(/[^a-zA-Z0-9]/g, \"\") || \"idx\") + \"-\" + name;\n }\n return name;\n}\n","import { Logger, Result } from \"@adviser/cement\";\nimport type { RunResult } from \"better-sqlite3\";\n\nexport interface DBConnection {\n connect(): Promise<void>;\n readonly opts: SQLOpts;\n}\n\nexport interface SQLStore<IType, KType, OType = IType[]> {\n readonly dbConn: DBConnection;\n start(url: URL): Promise<void>;\n insert(url: URL, ose: IType): Promise<RunResult>;\n select(url: URL, car: KType): Promise<OType>;\n delete(url: URL, car: KType): Promise<RunResult>;\n close(url: URL): Promise<Result<void>>;\n destroy(url: URL): Promise<Result<void>>;\n}\n\nexport interface SQLTableNames {\n readonly data: string;\n readonly meta: string;\n readonly wal: string;\n}\n\nexport const DefaultSQLTableNames: SQLTableNames = {\n data: \"Datas\",\n meta: \"Metas\",\n wal: \"Wals\",\n};\n\nexport interface SQLOpts {\n readonly url: URL;\n readonly sqlFlavor: \"sqlite\" | \"mysql\" | \"postgres\";\n readonly tableNames: SQLTableNames;\n readonly logger: Logger;\n readonly textEncoder: TextEncoder;\n readonly textDecoder: TextDecoder;\n}\n\nexport interface WalKey {\n readonly name: string;\n readonly branch: string;\n}\n\nexport interface WalRecord extends WalKey {\n readonly state: Uint8Array;\n readonly updated_at: Date;\n}\n\nexport type WalSQLStore = SQLStore<WalRecord, WalKey>;\n\nexport interface MetaType {\n readonly name: string;\n readonly branch: string;\n readonly meta: Uint8Array;\n}\n\nexport interface MetaRecordKey {\n readonly name: string;\n readonly branch: string;\n}\n\nexport interface MetaRecord extends MetaRecordKey {\n readonly meta: Uint8Array;\n readonly updated_at: Date;\n}\n\nexport type MetaSQLStore = SQLStore<MetaRecord, MetaRecordKey>;\n\nexport interface DataRecord {\n readonly name: string;\n readonly car: string;\n readonly data: Uint8Array;\n readonly updated_at: Date;\n}\n\nexport type DataSQLStore = SQLStore<DataRecord, string>;\n","import { ensureLogger, type Logger } from \"../../utils\";\nimport { SQLOpts, SQLTableNames, DefaultSQLTableNames } from \"./types\";\n\nfunction sqlTableName(...names: string[]): string {\n return names\n .map((name) => name.replace(/^[^a-zA-Z0-9]+/, \"\").replace(/[^a-zA-Z0-9]+/g, \"_\"))\n .filter((i) => i.length)\n .join(\"_\");\n}\n\nfunction ensureTableNames(url: URL, opts?: Partial<SQLOpts>): SQLTableNames {\n let isIndex = \"\";\n if (url.searchParams.has(\"index\")) {\n isIndex = url.searchParams.get(\"index\") || \".idx\";\n }\n const ret = opts?.tableNames || DefaultSQLTableNames;\n // console.log(\"isIndex->\", opts?.url, isIndex, sqlTableName(isIndex, ret.data));\n if (isIndex.length) {\n return {\n data: sqlTableName(isIndex, ret.data),\n meta: sqlTableName(isIndex, ret.meta),\n wal: sqlTableName(isIndex, ret.wal),\n };\n }\n return {\n data: sqlTableName(ret.data),\n meta: sqlTableName(ret.meta),\n wal: sqlTableName(ret.wal),\n };\n}\n\nconst textEncoder = new TextEncoder();\nfunction ensureTextEncoder(opts?: Partial<SQLOpts>): TextEncoder {\n return opts?.textEncoder || textEncoder;\n}\n\nconst textDecoder = new TextDecoder();\nfunction ensureTextDecoder(opts?: Partial<SQLOpts>): TextDecoder {\n return opts?.textDecoder || textDecoder;\n}\n\nfunction url2sqlFlavor(url: URL, logger: Logger): \"sqlite\" | \"mysql\" | \"postgres\" {\n const flavor = url.protocol.replace(/:.*$/, \"\");\n switch (flavor) {\n case \"sqlite\":\n case \"mysql\":\n case \"postgres\":\n return flavor;\n default:\n throw logger.Error().Str(\"flavor\", flavor).Msg(\"unsupported protocol\").AsError();\n }\n}\n\nexport function ensureSQLOpts(url: URL, opts: Partial<SQLOpts>, componentName: string, ctx?: Record<string, unknown>): SQLOpts {\n const logger = ensureLogger(opts, componentName, ctx);\n return {\n url,\n sqlFlavor: url2sqlFlavor(url, logger),\n tableNames: ensureTableNames(url, opts),\n logger,\n textEncoder: ensureTextEncoder(opts),\n textDecoder: ensureTextDecoder(opts),\n };\n}\n","// export * from \"./sqlite-adapter-better-sqlite3.js\";\nexport * from \"./types.js\";\nexport * from \"./ensurer.js\";\n","import { CryptoOpts } from \"../blockstore/index.js\";\n\nfunction randomBytes(size: number) {\n const bytes = new Uint8Array(size);\n if (size > 0) {\n crypto.getRandomValues(bytes);\n }\n return bytes;\n}\n\nfunction digestSHA256(data: Uint8Array): Promise<ArrayBuffer> {\n return Promise.resolve(crypto.subtle.digest(\"SHA-256\", data));\n}\n\nexport function toCryptoOpts(cryptoOpts: Partial<CryptoOpts> = {}): CryptoOpts {\n const opts = {\n importKey: cryptoOpts.importKey || crypto.subtle.importKey.bind(crypto.subtle),\n encrypt: cryptoOpts.encrypt || crypto.subtle.encrypt.bind(crypto.subtle),\n decrypt: cryptoOpts.decrypt || crypto.subtle.decrypt.bind(crypto.subtle),\n randomBytes: cryptoOpts.randomBytes || randomBytes,\n digestSHA256: cryptoOpts.digestSHA256 || digestSHA256,\n };\n // console.log(\"cryptoOpts\", cryptoOpts, opts)\n return opts;\n}\n","// @ts-nocheck\n\n/**\n * This is file is shadowed by api.ts and only exists so JS could import it to\n * refer to types without encountering runtime errors\n * @see https://github.com/microsoft/TypeScript/issues/41825\n */\n","// @ts-nocheck\n\n/**\n * This is file is shadowed by api.ts and only exists so JS could import it to\n * refer to types without encountering runtime errors\n * @see https://github.com/microsoft/TypeScript/issues/41825\n */\n","const textDecoder = new TextDecoder()\n\n/**\n * @typedef {import('./interface.js').RawPBLink} RawPBLink\n */\n\n/**\n * @typedef {import('./interface.js').RawPBNode} RawPBNode\n */\n\n/**\n * @param {Uint8Array} bytes\n * @param {number} offset\n * @returns {[number, number]}\n */\nfunction decodeVarint (bytes, offset) {\n let v = 0\n\n for (let shift = 0; ; shift += 7) {\n /* c8 ignore next 3 */\n if (shift >= 64) {\n throw new Error('protobuf: varint overflow')\n }\n /* c8 ignore next 3 */\n if (offset >= bytes.length) {\n throw new Error('protobuf: unexpected end of data')\n }\n\n const b = bytes[offset++]\n v += shift < 28 ? (b & 0x7f) << shift : (b & 0x7f) * (2 ** shift)\n if (b < 0x80) {\n break\n }\n }\n return [v, offset]\n}\n\n/**\n * @param {Uint8Array} bytes\n * @param {number} offset\n * @returns {[Uint8Array, number]}\n */\nfunction decodeBytes (bytes, offset) {\n let byteLen\n ;[byteLen, offset] = decodeVarint(bytes, offset)\n const postOffset = offset + byteLen\n\n /* c8 ignore next 3 */\n if (byteLen < 0 || postOffset < 0) {\n throw new Error('protobuf: invalid length')\n }\n /* c8 ignore next 3 */\n if (postOffset > bytes.length) {\n throw new Error('protobuf: unexpected end of data')\n }\n\n return [bytes.subarray(offset, postOffset), postOffset]\n}\n\n/**\n * @param {Uint8Array} bytes\n * @param {number} index\n * @returns {[number, number, number]}\n */\nfunction decodeKey (bytes, index) {\n let wire\n ;[wire, index] = decodeVarint(bytes, index)\n // [wireType, fieldNum, newIndex]\n return [wire & 0x7, wire >> 3, index]\n}\n\n/**\n * @param {Uint8Array} bytes\n * @returns {RawPBLink}\n */\nfunction decodeLink (bytes) {\n /** @type {RawPBLink} */\n const link = {}\n const l = bytes.length\n let index = 0\n\n while (index < l) {\n let wireType, fieldNum\n ;[wireType, fieldNum, index] = decodeKey(bytes, index)\n\n if (fieldNum === 1) {\n if (link.Hash) {\n throw new Error('protobuf: (PBLink) duplicate Hash section')\n }\n if (wireType !== 2) {\n throw new Error(`protobuf: (PBLink) wrong wireType (${wireType}) for Hash`)\n }\n if (link.Name !== undefined) {\n throw new Error('protobuf: (PBLink) invalid order, found Name before Hash')\n }\n if (link.Tsize !== undefined) {\n throw new Error('protobuf: (PBLink) invalid order, found Tsize before Hash')\n }\n\n [link.Hash, index] = decodeBytes(bytes, index)\n } else if (fieldNum === 2) {\n if (link.Name !== undefined) {\n throw new Error('protobuf: (PBLink) duplicate Name section')\n }\n if (wireType !== 2) {\n throw new Error(`protobuf: (PBLink) wrong wireType (${wireType}) for Name`)\n }\n if (link.Tsize !== undefined) {\n throw new Error('protobuf: (PBLink) invalid order, found Tsize before Name')\n }\n\n let byts\n ;[byts, index] = decodeBytes(bytes, index)\n link.Name = textDecoder.decode(byts)\n } else if (fieldNum === 3) {\n if (link.Tsize !== undefined) {\n throw new Error('protobuf: (PBLink) duplicate Tsize section')\n }\n if (wireType !== 0) {\n throw new Error(`protobuf: (PBLink) wrong wireType (${wireType}) for Tsize`)\n }\n\n [link.Tsize, index] = decodeVarint(bytes, index)\n } else {\n throw new Error(`protobuf: (PBLink) invalid fieldNumber, expected 1, 2 or 3, got ${fieldNum}`)\n }\n }\n\n /* c8 ignore next 3 */\n if (index > l) {\n throw new Error('protobuf: (PBLink) unexpected end of data')\n }\n\n return link\n}\n\n/**\n * @param {Uint8Array} bytes\n * @returns {RawPBNode}\n */\nexport function decodeNode (bytes) {\n const l = bytes.length\n let index = 0\n /** @type {RawPBLink[]|void} */\n let links = undefined // eslint-disable-line no-undef-init\n let linksBeforeData = false\n /** @type {Uint8Array|void} */\n let data = undefined // eslint-disable-line no-undef-init\n\n while (index < l) {\n let wireType, fieldNum\n ;[wireType, fieldNum, index] = decodeKey(bytes, index)\n\n if (wireType !== 2) {\n throw new Error(`protobuf: (PBNode) invalid wireType, expected 2, got ${wireType}`)\n }\n\n if (fieldNum === 1) {\n if (data) {\n throw new Error('protobuf: (PBNode) duplicate Data section')\n }\n\n [data, index] = decodeBytes(bytes, index)\n if (links) {\n linksBeforeData = true\n }\n } else if (fieldNum === 2) {\n if (linksBeforeData) { // interleaved Links/Data/Links\n throw new Error('protobuf: (PBNode) duplicate Links section')\n } else if (!links) {\n links = []\n }\n let byts\n ;[byts, index] = decodeBytes(bytes, index)\n links.push(decodeLink(byts))\n } else {\n throw new Error(`protobuf: (PBNode) invalid fieldNumber, expected 1 or 2, got ${fieldNum}`)\n }\n }\n\n /* c8 ignore next 3 */\n if (index > l) {\n throw new Error('protobuf: (PBNode) unexpected end of data')\n }\n\n /** @type {RawPBNode} */\n const node = {}\n if (data) {\n node.Data = data\n }\n node.Links = links || []\n return node\n}\n","const textEncoder = new TextEncoder()\nconst maxInt32 = 2 ** 32\nconst maxUInt32 = 2 ** 31\n\n/**\n * @typedef {import('./interface.js').RawPBLink} RawPBLink\n */\n\n/**\n * @typedef {import('./interface.js').RawPBNode} RawPBNode\n */\n\n// the encoders work backward from the end of the bytes array\n\n/**\n * encodeLink() is passed a slice of the parent byte array that ends where this\n * link needs to end, so it packs to the right-most part of the passed `bytes`\n *\n * @param {RawPBLink} link\n * @param {Uint8Array} bytes\n * @returns {number}\n */\nfunction encodeLink (link, bytes) {\n let i = bytes.length\n\n if (typeof link.Tsize === 'number') {\n if (link.Tsize < 0) {\n throw new Error('Tsize cannot be negative')\n }\n if (!Number.isSafeInteger(link.Tsize)) {\n throw new Error('Tsize too large for encoding')\n }\n i = encodeVarint(bytes, i, link.Tsize) - 1\n bytes[i] = 0x18\n }\n\n if (typeof link.Name === 'string') {\n const nameBytes = textEncoder.encode(link.Name)\n i -= nameBytes.length\n bytes.set(nameBytes, i)\n i = encodeVarint(bytes, i, nameBytes.length) - 1\n bytes[i] = 0x12\n }\n\n if (link.Hash) {\n i -= link.Hash.length\n bytes.set(link.Hash, i)\n i = encodeVarint(bytes, i, link.Hash.length) - 1\n bytes[i] = 0xa\n }\n\n return bytes.length - i\n}\n\n/**\n * Encodes a PBNode into a new byte array of precisely the correct size\n *\n * @param {RawPBNode} node\n * @returns {Uint8Array}\n */\nexport function encodeNode (node) {\n const size = sizeNode(node)\n const bytes = new Uint8Array(size)\n let i = size\n\n if (node.Data) {\n i -= node.Data.length\n bytes.set(node.Data, i)\n i = encodeVarint(bytes, i, node.Data.length) - 1\n bytes[i] = 0xa\n }\n\n if (node.Links) {\n for (let index = node.Links.length - 1; index >= 0; index--) {\n const size = encodeLink(node.Links[index], bytes.subarray(0, i))\n i -= size\n i = encodeVarint(bytes, i, size) - 1\n bytes[i] = 0x12\n }\n }\n\n return bytes\n}\n\n/**\n * work out exactly how many bytes this link takes up\n *\n * @param {RawPBLink} link\n * @returns\n */\nfunction sizeLink (link) {\n let n = 0\n\n if (link.Hash) {\n const l = link.Hash.length\n n += 1 + l + sov(l)\n }\n\n if (typeof link.Name === 'string') {\n const l = textEncoder.encode(link.Name).length\n n += 1 + l + sov(l)\n }\n\n if (typeof link.Tsize === 'number') {\n n += 1 + sov(link.Tsize)\n }\n\n return n\n}\n\n/**\n * Work out exactly how many bytes this node takes up\n *\n * @param {RawPBNode} node\n * @returns {number}\n */\nfunction sizeNode (node) {\n let n = 0\n\n if (node.Data) {\n const l = node.Data.length\n n += 1 + l + sov(l)\n }\n\n if (node.Links) {\n for (const link of node.Links) {\n const l = sizeLink(link)\n n += 1 + l + sov(l)\n }\n }\n\n return n\n}\n\n/**\n * @param {Uint8Array} bytes\n * @param {number} offset\n * @param {number} v\n * @returns {number}\n */\nfunction encodeVarint (bytes, offset, v) {\n offset -= sov(v)\n const base = offset\n\n while (v >= maxUInt32) {\n bytes[offset++] = (v & 0x7f) | 0x80\n v /= 128\n }\n\n while (v >= 128) {\n bytes[offset++] = (v & 0x7f) | 0x80\n v >>>= 7\n }\n\n bytes[offset] = v\n\n return base\n}\n\n/**\n * size of varint\n *\n * @param {number} x\n * @returns {number}\n */\nfunction sov (x) {\n if (x % 2 === 0) {\n x++\n }\n return Math.floor((len64(x) + 6) / 7)\n}\n\n/**\n * golang math/bits, how many bits does it take to represent this integer?\n *\n * @param {number} x\n * @returns {number}\n */\nfunction len64 (x) {\n let n = 0\n if (x >= maxInt32) {\n x = Math.floor(x / maxInt32)\n n = 32\n }\n if (x >= (1 << 16)) {\n x >>>= 16\n n += 16\n }\n if (x >= (1 << 8)) {\n x >>>= 8\n n += 8\n }\n return n + len8tab[x]\n}\n\n// golang math/bits\nconst len8tab = [\n 0, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4,\n 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,\n 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,\n 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,\n 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,\n 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,\n 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,\n 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,\n 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,\n 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,\n 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,\n 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,\n 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,\n 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,\n 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,\n 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8\n]\n","import { CID } from 'multiformats/cid'\n\n/**\n * @typedef {import('./interface.js').PBLink} PBLink\n * @typedef {import('./interface.js').PBNode} PBNode\n */\n\nconst pbNodeProperties = ['Data', 'Links']\nconst pbLinkProperties = ['Hash', 'Name', 'Tsize']\n\nconst textEncoder = new TextEncoder()\n\n/**\n * @param {PBLink} a\n * @param {PBLink} b\n * @returns {number}\n */\nfunction linkComparator (a, b) {\n if (a === b) {\n return 0\n }\n\n const abuf = a.Name ? textEncoder.encode(a.Name) : []\n const bbuf = b.Name ? textEncoder.encode(b.Name) : []\n\n let x = abuf.length\n let y = bbuf.length\n\n for (let i = 0, len = Math.min(x, y); i < len; ++i) {\n if (abuf[i] !== bbuf[i]) {\n x = abuf[i]\n y = bbuf[i]\n break\n }\n }\n\n return x < y ? -1 : y < x ? 1 : 0\n}\n\n/**\n * @param {any} node\n * @param {string[]} properties\n * @returns {boolean}\n */\nfunction hasOnlyProperties (node, properties) {\n return !Object.keys(node).some((p) => !properties.includes(p))\n}\n\n/**\n * Converts a CID, or a PBLink-like object to a PBLink\n *\n * @param {any} link\n * @returns {PBLink}\n */\nfunction asLink (link) {\n if (typeof link.asCID === 'object') {\n const Hash = CID.asCID(link)\n if (!Hash) {\n throw new TypeError('Invalid DAG-PB form')\n }\n return { Hash }\n }\n\n if (typeof link !== 'object' || Array.isArray(link)) {\n throw new TypeError('Invalid DAG-PB form')\n }\n\n const pbl = {}\n\n if (link.Hash) {\n let cid = CID.asCID(link.Hash)\n try {\n if (!cid) {\n if (typeof link.Hash === 'string') {\n cid = CID.parse(link.Hash)\n } else if (link.Hash instanceof Uint8Array) {\n cid = CID.decode(link.Hash)\n }\n }\n } catch (/** @type {any} */ e) {\n throw new TypeError(`Invalid DAG-PB form: ${e.message}`)\n }\n\n if (cid) {\n pbl.Hash = cid\n }\n }\n\n if (!pbl.Hash) {\n throw new TypeError('Invalid DAG-PB form')\n }\n\n if (typeof link.Name === 'string') {\n pbl.Name = link.Name\n }\n\n if (typeof link.Tsize === 'number') {\n pbl.Tsize = link.Tsize\n }\n\n return pbl\n}\n\n/**\n * @param {any} node\n * @returns {PBNode}\n */\nexport function prepare (node) {\n if (node instanceof Uint8Array || typeof node === 'string') {\n node = { Data: node }\n }\n\n if (typeof node !== 'object' || Array.isArray(node)) {\n throw new TypeError('Invalid DAG-PB form')\n }\n\n /** @type {PBNode} */\n const pbn = {}\n\n if (node.Data !== undefined) {\n if (typeof node.Data === 'string') {\n pbn.Data = textEncoder.encode(node.Data)\n } else if (node.Data instanceof Uint8Array) {\n pbn.Data = node.Data\n } else {\n throw new TypeError('Invalid DAG-PB form')\n }\n }\n\n if (node.Links !== undefined) {\n if (Array.isArray(node.Links)) {\n pbn.Links = node.Links.map(asLink)\n pbn.Links.sort(linkComparator)\n } else {\n throw new TypeError('Invalid DAG-PB form')\n }\n } else {\n pbn.Links = []\n }\n\n return pbn\n}\n\n/**\n * @param {PBNode} node\n */\nexport function validate (node) {\n /*\n type PBLink struct {\n Hash optional Link\n Name optional String\n Tsize optional Int\n }\n\n type PBNode struct {\n Links [PBLink]\n Data optional Bytes\n }\n */\n // @ts-ignore private property for TS\n if (!node || typeof node !== 'object' || Array.isArray(node) || node instanceof Uint8Array || (node['/'] && node['/'] === node.bytes)) {\n throw new TypeError('Invalid DAG-PB form')\n }\n\n if (!hasOnlyProperties(node, pbNodeProperties)) {\n throw new TypeError('Invalid DAG-PB form (extraneous properties)')\n }\n\n if (node.Data !== undefined && !(node.Data instanceof Uint8Array)) {\n throw new TypeError('Invalid DAG-PB form (Data must be bytes)')\n }\n\n if (!Array.isArray(node.Links)) {\n throw new TypeError('Invalid DAG-PB form (Links must be a list)')\n }\n\n for (let i = 0; i < node.Links.length; i++) {\n const link = node.Links[i]\n // @ts-ignore private property for TS\n if (!link || typeof link !== 'object' || Array.isArray(link) || link instanceof Uint8Array || (link['/'] && link['/'] === link.bytes)) {\n throw new TypeError('Invalid DAG-PB form (bad link)')\n }\n\n if (!hasOnlyProperties(link, pbLinkProperties)) {\n throw new TypeError('Invalid DAG-PB form (extraneous properties on link)')\n }\n\n if (link.Hash === undefined) {\n throw new TypeError('Invalid DAG-PB form (link must have a Hash)')\n }\n\n // @ts-ignore private property for TS\n if (link.Hash == null || !link.Hash['/'] || link.Hash['/'] !== link.Hash.bytes) {\n throw new TypeError('Invalid DAG-PB form (link Hash must be a CID)')\n }\n\n if (link.Name !== undefined && typeof link.Name !== 'string') {\n throw new TypeError('Invalid DAG-PB form (link Name must be a string)')\n }\n\n if (link.Tsize !== undefined) {\n if (typeof link.Tsize !== 'number' || link.Tsize % 1 !== 0) {\n throw new TypeError('Invalid DAG-PB form (link Tsize must be an integer)')\n }\n if (link.Tsize < 0) {\n throw new TypeError('Invalid DAG-PB form (link Tsize cannot be negative)')\n }\n }\n\n if (i > 0 && linkComparator(link, node.Links[i - 1]) === -1) {\n throw new TypeError('Invalid DAG-PB form (links must be sorted by Name bytes)')\n }\n }\n}\n\n/**\n * @param {Uint8Array} data\n * @param {PBLink[]} [links=[]]\n * @returns {PBNode}\n */\nexport function createNode (data, links = []) {\n return prepare({ Data: data, Links: links })\n}\n\n/**\n * @param {string} name\n * @param {number} size\n * @param {CID} cid\n * @returns {PBLink}\n */\nexport function createLink (name, size, cid) {\n return asLink({ Hash: cid, Name: name, Tsize: size })\n}\n","import { CID } from 'multiformats/cid'\nimport { decodeNode } from './pb-decode.js'\nimport { encodeNode } from './pb-encode.js'\nimport { prepare, validate, createNode, createLink } from './util.js'\n\n/**\n * @template T\n * @typedef {import('multiformats/codecs/interface').ByteView<T>} ByteView\n */\n\n/**\n * @typedef {import('./interface.js').PBLink} PBLink\n * @typedef {import('./interface.js').PBNode} PBNode\n */\n\nexport const name = 'dag-pb'\nexport const code = 0x70\n\n/**\n * @param {PBNode} node\n * @returns {ByteView<PBNode>}\n */\nexport function encode (node) {\n validate(node)\n\n const pbn = {}\n if (node.Links) {\n pbn.Links = node.Links.map((l) => {\n const link = {}\n if (l.Hash) {\n link.Hash = l.Hash.bytes // cid -> bytes\n }\n if (l.Name !== undefined) {\n link.Name = l.Name\n }\n if (l.Tsize !== undefined) {\n link.Tsize = l.Tsize\n }\n return link\n })\n }\n if (node.Data) {\n pbn.Data = node.Data\n }\n\n return encodeNode(pbn)\n}\n\n/**\n * @param {ByteView<PBNode>} bytes\n * @returns {PBNode}\n */\nexport function decode (bytes) {\n const pbn = decodeNode(bytes)\n\n const node = {}\n\n if (pbn.Data) {\n node.Data = pbn.Data\n }\n\n if (pbn.Links) {\n node.Links = pbn.Links.map((l) => {\n const link = {}\n try {\n link.Hash = CID.decode(l.Hash)\n } catch (e) {}\n if (!link.Hash) {\n throw new Error('Invalid Hash field found in link, expected CID')\n }\n if (l.Name !== undefined) {\n link.Name = l.Name\n }\n if (l.Tsize !== undefined) {\n link.Tsize = l.Tsize\n }\n return link\n })\n }\n\n return node\n}\n\nexport { prepare, validate, createNode, createLink }\n","\"use strict\";\r\nmodule.exports = asPromise;\r\n\r\n/**\r\n * Callback as used by {@link util.asPromise}.\r\n * @typedef asPromiseCallback\r\n * @type {function}\r\n * @param {Error|null} error Error, if any\r\n * @param {...*} params Additional arguments\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Returns a promise from a node-style callback function.\r\n * @memberof util\r\n * @param {asPromiseCallback} fn Function to call\r\n * @param {*} ctx Function context\r\n * @param {...*} params Function arguments\r\n * @returns {Promise<*>} Promisified function\r\n */\r\nfunction asPromise(fn, ctx/*, varargs */) {\r\n var params = new Array(arguments.length - 1),\r\n offset = 0,\r\n index = 2,\r\n pending = true;\r\n while (index < arguments.length)\r\n params[offset++] = arguments[index++];\r\n return new Promise(function executor(resolve, reject) {\r\n params[offset] = function callback(err/*, varargs */) {\r\n if (pending) {\r\n pending = false;\r\n if (err)\r\n reject(err);\r\n else {\r\n var params = new Array(arguments.length - 1),\r\n offset = 0;\r\n while (offset < params.length)\r\n params[offset++] = arguments[offset];\r\n resolve.apply(null, params);\r\n }\r\n }\r\n };\r\n try {\r\n fn.apply(ctx || null, params);\r\n } catch (err) {\r\n if (pending) {\r\n pending = false;\r\n reject(err);\r\n }\r\n }\r\n });\r\n}\r\n","\"use strict\";\r\n\r\n/**\r\n * A minimal base64 implementation for number arrays.\r\n * @memberof util\r\n * @namespace\r\n */\r\nvar base64 = exports;\r\n\r\n/**\r\n * Calculates the byte length of a base64 encoded string.\r\n * @param {string} string Base64 encoded string\r\n * @returns {number} Byte length\r\n */\r\nbase64.length = function length(string) {\r\n var p = string.length;\r\n if (!p)\r\n return 0;\r\n var n = 0;\r\n while (--p % 4 > 1 && string.charAt(p) === \"=\")\r\n ++n;\r\n return Math.ceil(string.length * 3) / 4 - n;\r\n};\r\n\r\n// Base64 encoding table\r\nvar b64 = new Array(64);\r\n\r\n// Base64 decoding table\r\nvar s64 = new Array(123);\r\n\r\n// 65..90, 97..122, 48..57, 43, 47\r\nfor (var i = 0; i < 64;)\r\n s64[b64[i] = i < 26 ? i + 65 : i < 52 ? i + 71 : i < 62 ? i - 4 : i - 59 | 43] = i++;\r\n\r\n/**\r\n * Encodes a buffer to a base64 encoded string.\r\n * @param {Uint8Array} buffer Source buffer\r\n * @param {number} start Source start\r\n * @param {number} end Source end\r\n * @returns {string} Base64 encoded string\r\n */\r\nbase64.encode = function encode(buffer, start, end) {\r\n var parts = null,\r\n chunk = [];\r\n var i = 0, // output index\r\n j = 0, // goto index\r\n t; // temporary\r\n while (start < end) {\r\n var b = buffer[start++];\r\n switch (j) {\r\n case 0:\r\n chunk[i++] = b64[b >> 2];\r\n t = (b & 3) << 4;\r\n j = 1;\r\n break;\r\n case 1:\r\n chunk[i++] = b64[t | b >> 4];\r\n t = (b & 15) << 2;\r\n j = 2;\r\n break;\r\n case 2:\r\n chunk[i++] = b64[t | b >> 6];\r\n chunk[i++] = b64[b & 63];\r\n j = 0;\r\n break;\r\n }\r\n if (i > 8191) {\r\n (parts || (parts = [])).push(String.fromCharCode.apply(String, chunk));\r\n i = 0;\r\n }\r\n }\r\n if (j) {\r\n chunk[i++] = b64[t];\r\n chunk[i++] = 61;\r\n if (j === 1)\r\n chunk[i++] = 61;\r\n }\r\n if (parts) {\r\n if (i)\r\n parts.push(String.fromCharCode.apply(String, chunk.slice(0, i)));\r\n return parts.join(\"\");\r\n }\r\n return String.fromCharCode.apply(String, chunk.slice(0, i));\r\n};\r\n\r\nvar invalidEncoding = \"invalid encoding\";\r\n\r\n/**\r\n * Decodes a base64 encoded string to a buffer.\r\n * @param {string} string Source string\r\n * @param {Uint8Array} buffer Destination buffer\r\n * @param {number} offset Destination offset\r\n * @returns {number} Number of bytes written\r\n * @throws {Error} If encoding is invalid\r\n */\r\nbase64.decode = function decode(string, buffer, offset) {\r\n var start = offset;\r\n var j = 0, // goto index\r\n t; // temporary\r\n for (var i = 0; i < string.length;) {\r\n var c = string.charCodeAt(i++);\r\n if (c === 61 && j > 1)\r\n break;\r\n if ((c = s64[c]) === undefined)\r\n throw Error(invalidEncoding);\r\n switch (j) {\r\n case 0:\r\n t = c;\r\n j = 1;\r\n break;\r\n case 1:\r\n buffer[offset++] = t << 2 | (c & 48) >> 4;\r\n t = c;\r\n j = 2;\r\n break;\r\n case 2:\r\n buffer[offset++] = (t & 15) << 4 | (c & 60) >> 2;\r\n t = c;\r\n j = 3;\r\n break;\r\n case 3:\r\n buffer[offset++] = (t & 3) << 6 | c;\r\n j = 0;\r\n break;\r\n }\r\n }\r\n if (j === 1)\r\n throw Error(invalidEncoding);\r\n return offset - start;\r\n};\r\n\r\n/**\r\n * Tests if the specified string appears to be base64 encoded.\r\n * @param {string} string String to test\r\n * @returns {boolean} `true` if probably base64 encoded, otherwise false\r\n */\r\nbase64.test = function test(string) {\r\n return /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(string);\r\n};\r\n","\"use strict\";\r\nmodule.exports = EventEmitter;\r\n\r\n/**\r\n * Constructs a new event emitter instance.\r\n * @classdesc A minimal event emitter.\r\n * @memberof util\r\n * @constructor\r\n */\r\nfunction EventEmitter() {\r\n\r\n /**\r\n * Registered listeners.\r\n * @type {Object.<string,*>}\r\n * @private\r\n */\r\n this._listeners = {};\r\n}\r\n\r\n/**\r\n * Registers an event listener.\r\n * @param {string} evt Event name\r\n * @param {function} fn Listener\r\n * @param {*} [ctx] Listener context\r\n * @returns {util.EventEmitter} `this`\r\n */\r\nEventEmitter.prototype.on = function on(evt, fn, ctx) {\r\n (this._listeners[evt] || (this._listeners[evt] = [])).push({\r\n fn : fn,\r\n ctx : ctx || this\r\n });\r\n return this;\r\n};\r\n\r\n/**\r\n * Removes an event listener or any matching listeners if arguments are omitted.\r\n * @param {string} [evt] Event name. Removes all listeners if omitted.\r\n * @param {function} [fn] Listener to remove. Removes all listeners of `evt` if omitted.\r\n * @returns {util.EventEmitter} `this`\r\n */\r\nEventEmitter.prototype.off = function off(evt, fn) {\r\n if (evt === undefined)\r\n this._listeners = {};\r\n else {\r\n if (fn === undefined)\r\n this._listeners[evt] = [];\r\n else {\r\n var listeners = this._listeners[evt];\r\n for (var i = 0; i < listeners.length;)\r\n if (listeners[i].fn === fn)\r\n listeners.splice(i, 1);\r\n else\r\n ++i;\r\n }\r\n }\r\n return this;\r\n};\r\n\r\n/**\r\n * Emits an event by calling its listeners with the specified arguments.\r\n * @param {string} evt Event name\r\n * @param {...*} args Arguments\r\n * @returns {util.EventEmitter} `this`\r\n */\r\nEventEmitter.prototype.emit = function emit(evt) {\r\n var listeners = this._listeners[evt];\r\n if (listeners) {\r\n var args = [],\r\n i = 1;\r\n for (; i < arguments.length;)\r\n args.push(arguments[i++]);\r\n for (i = 0; i < listeners.length;)\r\n listeners[i].fn.apply(listeners[i++].ctx, args);\r\n }\r\n return this;\r\n};\r\n","\"use strict\";\r\n\r\nmodule.exports = factory(factory);\r\n\r\n/**\r\n * Reads / writes floats / doubles from / to buffers.\r\n * @name util.float\r\n * @namespace\r\n */\r\n\r\n/**\r\n * Writes a 32 bit float to a buffer using little endian byte order.\r\n * @name util.float.writeFloatLE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Writes a 32 bit float to a buffer using big endian byte order.\r\n * @name util.float.writeFloatBE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Reads a 32 bit float from a buffer using little endian byte order.\r\n * @name util.float.readFloatLE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n/**\r\n * Reads a 32 bit float from a buffer using big endian byte order.\r\n * @name util.float.readFloatBE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n/**\r\n * Writes a 64 bit double to a buffer using little endian byte order.\r\n * @name util.float.writeDoubleLE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Writes a 64 bit double to a buffer using big endian byte order.\r\n * @name util.float.writeDoubleBE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Reads a 64 bit double from a buffer using little endian byte order.\r\n * @name util.float.readDoubleLE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n/**\r\n * Reads a 64 bit double from a buffer using big endian byte order.\r\n * @name util.float.readDoubleBE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n// Factory function for the purpose of node-based testing in modified global environments\r\nfunction factory(exports) {\r\n\r\n // float: typed array\r\n if (typeof Float32Array !== \"undefined\") (function() {\r\n\r\n var f32 = new Float32Array([ -0 ]),\r\n f8b = new Uint8Array(f32.buffer),\r\n le = f8b[3] === 128;\r\n\r\n function writeFloat_f32_cpy(val, buf, pos) {\r\n f32[0] = val;\r\n buf[pos ] = f8b[0];\r\n buf[pos + 1] = f8b[1];\r\n buf[pos + 2] = f8b[2];\r\n buf[pos + 3] = f8b[3];\r\n }\r\n\r\n function writeFloat_f32_rev(val, buf, pos) {\r\n f32[0] = val;\r\n buf[pos ] = f8b[3];\r\n buf[pos + 1] = f8b[2];\r\n buf[pos + 2] = f8b[1];\r\n buf[pos + 3] = f8b[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.writeFloatLE = le ? writeFloat_f32_cpy : writeFloat_f32_rev;\r\n /* istanbul ignore next */\r\n exports.writeFloatBE = le ? writeFloat_f32_rev : writeFloat_f32_cpy;\r\n\r\n function readFloat_f32_cpy(buf, pos) {\r\n f8b[0] = buf[pos ];\r\n f8b[1] = buf[pos + 1];\r\n f8b[2] = buf[pos + 2];\r\n f8b[3] = buf[pos + 3];\r\n return f32[0];\r\n }\r\n\r\n function readFloat_f32_rev(buf, pos) {\r\n f8b[3] = buf[pos ];\r\n f8b[2] = buf[pos + 1];\r\n f8b[1] = buf[pos + 2];\r\n f8b[0] = buf[pos + 3];\r\n return f32[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.readFloatLE = le ? readFloat_f32_cpy : readFloat_f32_rev;\r\n /* istanbul ignore next */\r\n exports.readFloatBE = le ? readFloat_f32_rev : readFloat_f32_cpy;\r\n\r\n // float: ieee754\r\n })(); else (function() {\r\n\r\n function writeFloat_ieee754(writeUint, val, buf, pos) {\r\n var sign = val < 0 ? 1 : 0;\r\n if (sign)\r\n val = -val;\r\n if (val === 0)\r\n writeUint(1 / val > 0 ? /* positive */ 0 : /* negative 0 */ 2147483648, buf, pos);\r\n else if (isNaN(val))\r\n writeUint(2143289344, buf, pos);\r\n else if (val > 3.4028234663852886e+38) // +-Infinity\r\n writeUint((sign << 31 | 2139095040) >>> 0, buf, pos);\r\n else if (val < 1.1754943508222875e-38) // denormal\r\n writeUint((sign << 31 | Math.round(val / 1.401298464324817e-45)) >>> 0, buf, pos);\r\n else {\r\n var exponent = Math.floor(Math.log(val) / Math.LN2),\r\n mantissa = Math.round(val * Math.pow(2, -exponent) * 8388608) & 8388607;\r\n writeUint((sign << 31 | exponent + 127 << 23 | mantissa) >>> 0, buf, pos);\r\n }\r\n }\r\n\r\n exports.writeFloatLE = writeFloat_ieee754.bind(null, writeUintLE);\r\n exports.writeFloatBE = writeFloat_ieee754.bind(null, writeUintBE);\r\n\r\n function readFloat_ieee754(readUint, buf, pos) {\r\n var uint = readUint(buf, pos),\r\n sign = (uint >> 31) * 2 + 1,\r\n exponent = uint >>> 23 & 255,\r\n mantissa = uint & 8388607;\r\n return exponent === 255\r\n ? mantissa\r\n ? NaN\r\n : sign * Infinity\r\n : exponent === 0 // denormal\r\n ? sign * 1.401298464324817e-45 * mantissa\r\n : sign * Math.pow(2, exponent - 150) * (mantissa + 8388608);\r\n }\r\n\r\n exports.readFloatLE = readFloat_ieee754.bind(null, readUintLE);\r\n exports.readFloatBE = readFloat_ieee754.bind(null, readUintBE);\r\n\r\n })();\r\n\r\n // double: typed array\r\n if (typeof Float64Array !== \"undefined\") (function() {\r\n\r\n var f64 = new Float64Array([-0]),\r\n f8b = new Uint8Array(f64.buffer),\r\n le = f8b[7] === 128;\r\n\r\n function writeDouble_f64_cpy(val, buf, pos) {\r\n f64[0] = val;\r\n buf[pos ] = f8b[0];\r\n buf[pos + 1] = f8b[1];\r\n buf[pos + 2] = f8b[2];\r\n buf[pos + 3] = f8b[3];\r\n buf[pos + 4] = f8b[4];\r\n buf[pos + 5] = f8b[5];\r\n buf[pos + 6] = f8b[6];\r\n buf[pos + 7] = f8b[7];\r\n }\r\n\r\n function writeDouble_f64_rev(val, buf, pos) {\r\n f64[0] = val;\r\n buf[pos ] = f8b[7];\r\n buf[pos + 1] = f8b[6];\r\n buf[pos + 2] = f8b[5];\r\n buf[pos + 3] = f8b[4];\r\n buf[pos + 4] = f8b[3];\r\n buf[pos + 5] = f8b[2];\r\n buf[pos + 6] = f8b[1];\r\n buf[pos + 7] = f8b[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.writeDoubleLE = le ? writeDouble_f64_cpy : writeDouble_f64_rev;\r\n /* istanbul ignore next */\r\n exports.writeDoubleBE = le ? writeDouble_f64_rev : writeDouble_f64_cpy;\r\n\r\n function readDouble_f64_cpy(buf, pos) {\r\n f8b[0] = buf[pos ];\r\n f8b[1] = buf[pos + 1];\r\n f8b[2] = buf[pos + 2];\r\n f8b[3] = buf[pos + 3];\r\n f8b[4] = buf[pos + 4];\r\n f8b[5] = buf[pos + 5];\r\n f8b[6] = buf[pos + 6];\r\n f8b[7] = buf[pos + 7];\r\n return f64[0];\r\n }\r\n\r\n function readDouble_f64_rev(buf, pos) {\r\n f8b[7] = buf[pos ];\r\n f8b[6] = buf[pos + 1];\r\n f8b[5] = buf[pos + 2];\r\n f8b[4] = buf[pos + 3];\r\n f8b[3] = buf[pos + 4];\r\n f8b[2] = buf[pos + 5];\r\n f8b[1] = buf[pos + 6];\r\n f8b[0] = buf[pos + 7];\r\n return f64[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.readDoubleLE = le ? readDouble_f64_cpy : readDouble_f64_rev;\r\n /* istanbul ignore next */\r\n exports.readDoubleBE = le ? readDouble_f64_rev : readDouble_f64_cpy;\r\n\r\n // double: ieee754\r\n })(); else (function() {\r\n\r\n function writeDouble_ieee754(writeUint, off0, off1, val, buf, pos) {\r\n var sign = val < 0 ? 1 : 0;\r\n if (sign)\r\n val = -val;\r\n if (val === 0) {\r\n writeUint(0, buf, pos + off0);\r\n writeUint(1 / val > 0 ? /* positive */ 0 : /* negative 0 */ 2147483648, buf, pos + off1);\r\n } else if (isNaN(val)) {\r\n writeUint(0, buf, pos + off0);\r\n writeUint(2146959360, buf, pos + off1);\r\n } else if (val > 1.7976931348623157e+308) { // +-Infinity\r\n writeUint(0, buf, pos + off0);\r\n writeUint((sign << 31 | 2146435072) >>> 0, buf, pos + off1);\r\n } else {\r\n var mantissa;\r\n if (val < 2.2250738585072014e-308) { // denormal\r\n mantissa = val / 5e-324;\r\n writeUint(mantissa >>> 0, buf, pos + off0);\r\n writeUint((sign << 31 | mantissa / 4294967296) >>> 0, buf, pos + off1);\r\n } else {\r\n var exponent = Math.floor(Math.log(val) / Math.LN2);\r\n if (exponent === 1024)\r\n exponent = 1023;\r\n mantissa = val * Math.pow(2, -exponent);\r\n writeUint(mantissa * 4503599627370496 >>> 0, buf, pos + off0);\r\n writeUint((sign << 31 | exponent + 1023 << 20 | mantissa * 1048576 & 1048575) >>> 0, buf, pos + off1);\r\n }\r\n }\r\n }\r\n\r\n exports.writeDoubleLE = writeDouble_ieee754.bind(null, writeUintLE, 0, 4);\r\n exports.writeDoubleBE = writeDouble_ieee754.bind(null, writeUintBE, 4, 0);\r\n\r\n function readDouble_ieee754(readUint, off0, off1, buf, pos) {\r\n var lo = readUint(buf, pos + off0),\r\n hi = readUint(buf, pos + off1);\r\n var sign = (hi >> 31) * 2 + 1,\r\n exponent = hi >>> 20 & 2047,\r\n mantissa = 4294967296 * (hi & 1048575) + lo;\r\n return exponent === 2047\r\n ? mantissa\r\n ? NaN\r\n : sign * Infinity\r\n : exponent === 0 // denormal\r\n ? sign * 5e-324 * mantissa\r\n : sign * Math.pow(2, exponent - 1075) * (mantissa + 4503599627370496);\r\n }\r\n\r\n exports.readDoubleLE = readDouble_ieee754.bind(null, readUintLE, 0, 4);\r\n exports.readDoubleBE = readDouble_ieee754.bind(null, readUintBE, 4, 0);\r\n\r\n })();\r\n\r\n return exports;\r\n}\r\n\r\n// uint helpers\r\n\r\nfunction writeUintLE(val, buf, pos) {\r\n buf[pos ] = val & 255;\r\n buf[pos + 1] = val >>> 8 & 255;\r\n buf[pos + 2] = val >>> 16 & 255;\r\n buf[pos + 3] = val >>> 24;\r\n}\r\n\r\nfunction writeUintBE(val, buf, pos) {\r\n buf[pos ] = val >>> 24;\r\n buf[pos + 1] = val >>> 16 & 255;\r\n buf[pos + 2] = val >>> 8 & 255;\r\n buf[pos + 3] = val & 255;\r\n}\r\n\r\nfunction readUintLE(buf, pos) {\r\n return (buf[pos ]\r\n | buf[pos + 1] << 8\r\n | buf[pos + 2] << 16\r\n | buf[pos + 3] << 24) >>> 0;\r\n}\r\n\r\nfunction readUintBE(buf, pos) {\r\n return (buf[pos ] << 24\r\n | buf[pos + 1] << 16\r\n | buf[pos + 2] << 8\r\n | buf[pos + 3]) >>> 0;\r\n}\r\n","\"use strict\";\r\nmodule.exports = inquire;\r\n\r\n/**\r\n * Requires a module only if available.\r\n * @memberof util\r\n * @param {string} moduleName Module to require\r\n * @returns {?Object} Required module if available and not empty, otherwise `null`\r\n */\r\nfunction inquire(moduleName) {\r\n try {\r\n var mod = eval(\"quire\".replace(/^/,\"re\"))(moduleName); // eslint-disable-line no-eval\r\n if (mod && (mod.length || Object.keys(mod).length))\r\n return mod;\r\n } catch (e) {} // eslint-disable-line no-empty\r\n return null;\r\n}\r\n","\"use strict\";\r\n\r\n/**\r\n * A minimal UTF8 implementation for number arrays.\r\n * @memberof util\r\n * @namespace\r\n */\r\nvar utf8 = exports;\r\n\r\n/**\r\n * Calculates the UTF8 byte length of a string.\r\n * @param {string} string String\r\n * @returns {number} Byte length\r\n */\r\nutf8.length = function utf8_length(string) {\r\n var len = 0,\r\n c = 0;\r\n for (var i = 0; i < string.length; ++i) {\r\n c = string.charCodeAt(i);\r\n if (c < 128)\r\n len += 1;\r\n else if (c < 2048)\r\n len += 2;\r\n else if ((c & 0xFC00) === 0xD800 && (string.charCodeAt(i + 1) & 0xFC00) === 0xDC00) {\r\n ++i;\r\n len += 4;\r\n } else\r\n len += 3;\r\n }\r\n return len;\r\n};\r\n\r\n/**\r\n * Reads UTF8 bytes as a string.\r\n * @param {Uint8Array} buffer Source buffer\r\n * @param {number} start Source start\r\n * @param {number} end Source end\r\n * @returns {string} String read\r\n */\r\nutf8.read = function utf8_read(buffer, start, end) {\r\n var len = end - start;\r\n if (len < 1)\r\n return \"\";\r\n var parts = null,\r\n chunk = [],\r\n i = 0, // char offset\r\n t; // temporary\r\n while (start < end) {\r\n t = buffer[start++];\r\n if (t < 128)\r\n chunk[i++] = t;\r\n else if (t > 191 && t < 224)\r\n chunk[i++] = (t & 31) << 6 | buffer[start++] & 63;\r\n else if (t > 239 && t < 365) {\r\n t = ((t & 7) << 18 | (buffer[start++] & 63) << 12 | (buffer[start++] & 63) << 6 | buffer[start++] & 63) - 0x10000;\r\n chunk[i++] = 0xD800 + (t >> 10);\r\n chunk[i++] = 0xDC00 + (t & 1023);\r\n } else\r\n chunk[i++] = (t & 15) << 12 | (buffer[start++] & 63) << 6 | buffer[start++] & 63;\r\n if (i > 8191) {\r\n (parts || (parts = [])).push(String.fromCharCode.apply(String, chunk));\r\n i = 0;\r\n }\r\n }\r\n if (parts) {\r\n if (i)\r\n parts.push(String.fromCharCode.apply(String, chunk.slice(0, i)));\r\n return parts.join(\"\");\r\n }\r\n return String.fromCharCode.apply(String, chunk.slice(0, i));\r\n};\r\n\r\n/**\r\n * Writes a string as UTF8 bytes.\r\n * @param {string} string Source string\r\n * @param {Uint8Array} buffer Destination buffer\r\n * @param {number} offset Destination offset\r\n * @returns {number} Bytes written\r\n */\r\nutf8.write = function utf8_write(string, buffer, offset) {\r\n var start = offset,\r\n c1, // character 1\r\n c2; // character 2\r\n for (var i = 0; i < string.length; ++i) {\r\n c1 = string.charCodeAt(i);\r\n if (c1 < 128) {\r\n buffer[offset++] = c1;\r\n } else if (c1 < 2048) {\r\n buffer[offset++] = c1 >> 6 | 192;\r\n buffer[offset++] = c1 & 63 | 128;\r\n } else if ((c1 & 0xFC00) === 0xD800 && ((c2 = string.charCodeAt(i + 1)) & 0xFC00) === 0xDC00) {\r\n c1 = 0x10000 + ((c1 & 0x03FF) << 10) + (c2 & 0x03FF);\r\n ++i;\r\n buffer[offset++] = c1 >> 18 | 240;\r\n buffer[offset++] = c1 >> 12 & 63 | 128;\r\n buffer[offset++] = c1 >> 6 & 63 | 128;\r\n buffer[offset++] = c1 & 63 | 128;\r\n } else {\r\n buffer[offset++] = c1 >> 12 | 224;\r\n buffer[offset++] = c1 >> 6 & 63 | 128;\r\n buffer[offset++] = c1 & 63 | 128;\r\n }\r\n }\r\n return offset - start;\r\n};\r\n","\"use strict\";\r\nmodule.exports = pool;\r\n\r\n/**\r\n * An allocator as used by {@link util.pool}.\r\n * @typedef PoolAllocator\r\n * @type {function}\r\n * @param {number} size Buffer size\r\n * @returns {Uint8Array} Buffer\r\n */\r\n\r\n/**\r\n * A slicer as used by {@link util.pool}.\r\n * @typedef PoolSlicer\r\n * @type {function}\r\n * @param {number} start Start offset\r\n * @param {number} end End offset\r\n * @returns {Uint8Array} Buffer slice\r\n * @this {Uint8Array}\r\n */\r\n\r\n/**\r\n * A general purpose buffer pool.\r\n * @memberof util\r\n * @function\r\n * @param {PoolAllocator} alloc Allocator\r\n * @param {PoolSlicer} slice Slicer\r\n * @param {number} [size=8192] Slab size\r\n * @returns {PoolAllocator} Pooled allocator\r\n */\r\nfunction pool(alloc, slice, size) {\r\n var SIZE = size || 8192;\r\n var MAX = SIZE >>> 1;\r\n var slab = null;\r\n var offset = SIZE;\r\n return function pool_alloc(size) {\r\n if (size < 1 || size > MAX)\r\n return alloc(size);\r\n if (offset + size > SIZE) {\r\n slab = alloc(SIZE);\r\n offset = 0;\r\n }\r\n var buf = slice.call(slab, offset, offset += size);\r\n if (offset & 7) // align to 32 bit\r\n offset = (offset | 7) + 1;\r\n return buf;\r\n };\r\n}\r\n","\"use strict\";\nmodule.exports = LongBits;\n\nvar util = require(\"../util/minimal\");\n\n/**\n * Constructs new long bits.\n * @classdesc Helper class for working with the low and high bits of a 64 bit value.\n * @memberof util\n * @constructor\n * @param {number} lo Low 32 bits, unsigned\n * @param {number} hi High 32 bits, unsigned\n */\nfunction LongBits(lo, hi) {\n\n // note that the casts below are theoretically unnecessary as of today, but older statically\n // generated converter code might still call the ctor with signed 32bits. kept for compat.\n\n /**\n * Low bits.\n * @type {number}\n */\n this.lo = lo >>> 0;\n\n /**\n * High bits.\n * @type {number}\n */\n this.hi = hi >>> 0;\n}\n\n/**\n * Zero bits.\n * @memberof util.LongBits\n * @type {util.LongBits}\n */\nvar zero = LongBits.zero = new LongBits(0, 0);\n\nzero.toNumber = function() { return 0; };\nzero.zzEncode = zero.zzDecode = function() { return this; };\nzero.length = function() { return 1; };\n\n/**\n * Zero hash.\n * @memberof util.LongBits\n * @type {string}\n */\nvar zeroHash = LongBits.zeroHash = \"\\0\\0\\0\\0\\0\\0\\0\\0\";\n\n/**\n * Constructs new long bits from the specified number.\n * @param {number} value Value\n * @returns {util.LongBits} Instance\n */\nLongBits.fromNumber = function fromNumber(value) {\n if (value === 0)\n return zero;\n var sign = value < 0;\n if (sign)\n value = -value;\n var lo = value >>> 0,\n hi = (value - lo) / 4294967296 >>> 0;\n if (sign) {\n hi = ~hi >>> 0;\n lo = ~lo >>> 0;\n if (++lo > 4294967295) {\n lo = 0;\n if (++hi > 4294967295)\n hi = 0;\n }\n }\n return new LongBits(lo, hi);\n};\n\n/**\n * Constructs new long bits from a number, long or string.\n * @param {Long|number|string} value Value\n * @returns {util.LongBits} Instance\n */\nLongBits.from = function from(value) {\n if (typeof value === \"number\")\n return LongBits.fromNumber(value);\n if (util.isString(value)) {\n /* istanbul ignore else */\n if (util.Long)\n value = util.Long.fromString(value);\n else\n return LongBits.fromNumber(parseInt(value, 10));\n }\n return value.low || value.high ? new LongBits(value.low >>> 0, value.high >>> 0) : zero;\n};\n\n/**\n * Converts this long bits to a possibly unsafe JavaScript number.\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {number} Possibly unsafe number\n */\nLongBits.prototype.toNumber = function toNumber(unsigned) {\n if (!unsigned && this.hi >>> 31) {\n var lo = ~this.lo + 1 >>> 0,\n hi = ~this.hi >>> 0;\n if (!lo)\n hi = hi + 1 >>> 0;\n return -(lo + hi * 4294967296);\n }\n return this.lo + this.hi * 4294967296;\n};\n\n/**\n * Converts this long bits to a long.\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {Long} Long\n */\nLongBits.prototype.toLong = function toLong(unsigned) {\n return util.Long\n ? new util.Long(this.lo | 0, this.hi | 0, Boolean(unsigned))\n /* istanbul ignore next */\n : { low: this.lo | 0, high: this.hi | 0, unsigned: Boolean(unsigned) };\n};\n\nvar charCodeAt = String.prototype.charCodeAt;\n\n/**\n * Constructs new long bits from the specified 8 characters long hash.\n * @param {string} hash Hash\n * @returns {util.LongBits} Bits\n */\nLongBits.fromHash = function fromHash(hash) {\n if (hash === zeroHash)\n return zero;\n return new LongBits(\n ( charCodeAt.call(hash, 0)\n | charCodeAt.call(hash, 1) << 8\n | charCodeAt.call(hash, 2) << 16\n | charCodeAt.call(hash, 3) << 24) >>> 0\n ,\n ( charCodeAt.call(hash, 4)\n | charCodeAt.call(hash, 5) << 8\n | charCodeAt.call(hash, 6) << 16\n | charCodeAt.call(hash, 7) << 24) >>> 0\n );\n};\n\n/**\n * Converts this long bits to a 8 characters long hash.\n * @returns {string} Hash\n */\nLongBits.prototype.toHash = function toHash() {\n return String.fromCharCode(\n this.lo & 255,\n this.lo >>> 8 & 255,\n this.lo >>> 16 & 255,\n this.lo >>> 24 ,\n this.hi & 255,\n this.hi >>> 8 & 255,\n this.hi >>> 16 & 255,\n this.hi >>> 24\n );\n};\n\n/**\n * Zig-zag encodes this long bits.\n * @returns {util.LongBits} `this`\n */\nLongBits.prototype.zzEncode = function zzEncode() {\n var mask = this.hi >> 31;\n this.hi = ((this.hi << 1 | this.lo >>> 31) ^ mask) >>> 0;\n this.lo = ( this.lo << 1 ^ mask) >>> 0;\n return this;\n};\n\n/**\n * Zig-zag decodes this long bits.\n * @returns {util.LongBits} `this`\n */\nLongBits.prototype.zzDecode = function zzDecode() {\n var mask = -(this.lo & 1);\n this.lo = ((this.lo >>> 1 | this.hi << 31) ^ mask) >>> 0;\n this.hi = ( this.hi >>> 1 ^ mask) >>> 0;\n return this;\n};\n\n/**\n * Calculates the length of this longbits when encoded as a varint.\n * @returns {number} Length\n */\nLongBits.prototype.length = function length() {\n var part0 = this.lo,\n part1 = (this.lo >>> 28 | this.hi << 4) >>> 0,\n part2 = this.hi >>> 24;\n return part2 === 0\n ? part1 === 0\n ? part0 < 16384\n ? part0 < 128 ? 1 : 2\n : part0 < 2097152 ? 3 : 4\n : part1 < 16384\n ? part1 < 128 ? 5 : 6\n : part1 < 2097152 ? 7 : 8\n : part2 < 128 ? 9 : 10;\n};\n","\"use strict\";\nvar util = exports;\n\n// used to return a Promise where callback is omitted\nutil.asPromise = require(\"@protobufjs/aspromise\");\n\n// converts to / from base64 encoded strings\nutil.base64 = require(\"@protobufjs/base64\");\n\n// base class of rpc.Service\nutil.EventEmitter = require(\"@protobufjs/eventemitter\");\n\n// float handling accross browsers\nutil.float = require(\"@protobufjs/float\");\n\n// requires modules optionally and hides the call from bundlers\nutil.inquire = require(\"@protobufjs/inquire\");\n\n// converts to / from utf8 encoded strings\nutil.utf8 = require(\"@protobufjs/utf8\");\n\n// provides a node-like buffer pool in the browser\nutil.pool = require(\"@protobufjs/pool\");\n\n// utility to work with the low and high bits of a 64 bit value\nutil.LongBits = require(\"./longbits\");\n\n/**\n * Whether running within node or not.\n * @memberof util\n * @type {boolean}\n */\nutil.isNode = Boolean(typeof global !== \"undefined\"\n && global\n && global.process\n && global.process.versions\n && global.process.versions.node);\n\n/**\n * Global object reference.\n * @memberof util\n * @type {Object}\n */\nutil.global = util.isNode && global\n || typeof window !== \"undefined\" && window\n || typeof self !== \"undefined\" && self\n || this; // eslint-disable-line no-invalid-this\n\n/**\n * An immuable empty array.\n * @memberof util\n * @type {Array.<*>}\n * @const\n */\nutil.emptyArray = Object.freeze ? Object.freeze([]) : /* istanbul ignore next */ []; // used on prototypes\n\n/**\n * An immutable empty object.\n * @type {Object}\n * @const\n */\nutil.emptyObject = Object.freeze ? Object.freeze({}) : /* istanbul ignore next */ {}; // used on prototypes\n\n/**\n * Tests if the specified value is an integer.\n * @function\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is an integer\n */\nutil.isInteger = Number.isInteger || /* istanbul ignore next */ function isInteger(value) {\n return typeof value === \"number\" && isFinite(value) && Math.floor(value) === value;\n};\n\n/**\n * Tests if the specified value is a string.\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is a string\n */\nutil.isString = function isString(value) {\n return typeof value === \"string\" || value instanceof String;\n};\n\n/**\n * Tests if the specified value is a non-null object.\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is a non-null object\n */\nutil.isObject = function isObject(value) {\n return value && typeof value === \"object\";\n};\n\n/**\n * Checks if a property on a message is considered to be present.\n * This is an alias of {@link util.isSet}.\n * @function\n * @param {Object} obj Plain object or message instance\n * @param {string} prop Property name\n * @returns {boolean} `true` if considered to be present, otherwise `false`\n */\nutil.isset =\n\n/**\n * Checks if a property on a message is considered to be present.\n * @param {Object} obj Plain object or message instance\n * @param {string} prop Property name\n * @returns {boolean} `true` if considered to be present, otherwise `false`\n */\nutil.isSet = function isSet(obj, prop) {\n var value = obj[prop];\n if (value != null && obj.hasOwnProperty(prop)) // eslint-disable-line eqeqeq, no-prototype-builtins\n return typeof value !== \"object\" || (Array.isArray(value) ? value.length : Object.keys(value).length) > 0;\n return false;\n};\n\n/**\n * Any compatible Buffer instance.\n * This is a minimal stand-alone definition of a Buffer instance. The actual type is that exported by node's typings.\n * @interface Buffer\n * @extends Uint8Array\n */\n\n/**\n * Node's Buffer class if available.\n * @type {Constructor<Buffer>}\n */\nutil.Buffer = (function() {\n try {\n var Buffer = util.inquire(\"buffer\").Buffer;\n // refuse to use non-node buffers if not explicitly assigned (perf reasons):\n return Buffer.prototype.utf8Write ? Buffer : /* istanbul ignore next */ null;\n } catch (e) {\n /* istanbul ignore next */\n return null;\n }\n})();\n\n// Internal alias of or polyfull for Buffer.from.\nutil._Buffer_from = null;\n\n// Internal alias of or polyfill for Buffer.allocUnsafe.\nutil._Buffer_allocUnsafe = null;\n\n/**\n * Creates a new buffer of whatever type supported by the environment.\n * @param {number|number[]} [sizeOrArray=0] Buffer size or number array\n * @returns {Uint8Array|Buffer} Buffer\n */\nutil.newBuffer = function newBuffer(sizeOrArray) {\n /* istanbul ignore next */\n return typeof sizeOrArray === \"number\"\n ? util.Buffer\n ? util._Buffer_allocUnsafe(sizeOrArray)\n : new util.Array(sizeOrArray)\n : util.Buffer\n ? util._Buffer_from(sizeOrArray)\n : typeof Uint8Array === \"undefined\"\n ? sizeOrArray\n : new Uint8Array(sizeOrArray);\n};\n\n/**\n * Array implementation used in the browser. `Uint8Array` if supported, otherwise `Array`.\n * @type {Constructor<Uint8Array>}\n */\nutil.Array = typeof Uint8Array !== \"undefined\" ? Uint8Array /* istanbul ignore next */ : Array;\n\n/**\n * Any compatible Long instance.\n * This is a minimal stand-alone definition of a Long instance. The actual type is that exported by long.js.\n * @interface Long\n * @property {number} low Low bits\n * @property {number} high High bits\n * @property {boolean} unsigned Whether unsigned or not\n */\n\n/**\n * Long.js's Long class if available.\n * @type {Constructor<Long>}\n */\nutil.Long = /* istanbul ignore next */ util.global.dcodeIO && /* istanbul ignore next */ util.global.dcodeIO.Long\n || /* istanbul ignore next */ util.global.Long\n || util.inquire(\"long\");\n\n/**\n * Regular expression used to verify 2 bit (`bool`) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key2Re = /^true|false|0|1$/;\n\n/**\n * Regular expression used to verify 32 bit (`int32` etc.) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key32Re = /^-?(?:0|[1-9][0-9]*)$/;\n\n/**\n * Regular expression used to verify 64 bit (`int64` etc.) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key64Re = /^(?:[\\\\x00-\\\\xff]{8}|-?(?:0|[1-9][0-9]*))$/;\n\n/**\n * Converts a number or long to an 8 characters long hash string.\n * @param {Long|number} value Value to convert\n * @returns {string} Hash\n */\nutil.longToHash = function longToHash(value) {\n return value\n ? util.LongBits.from(value).toHash()\n : util.LongBits.zeroHash;\n};\n\n/**\n * Converts an 8 characters long hash string to a long or number.\n * @param {string} hash Hash\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {Long|number} Original value\n */\nutil.longFromHash = function longFromHash(hash, unsigned) {\n var bits = util.LongBits.fromHash(hash);\n if (util.Long)\n return util.Long.fromBits(bits.lo, bits.hi, unsigned);\n return bits.toNumber(Boolean(unsigned));\n};\n\n/**\n * Merges the properties of the source object into the destination object.\n * @memberof util\n * @param {Object.<string,*>} dst Destination object\n * @param {Object.<string,*>} src Source object\n * @param {boolean} [ifNotSet=false] Merges only if the key is not already set\n * @returns {Object.<string,*>} Destination object\n */\nfunction merge(dst, src, ifNotSet) { // used by converters\n for (var keys = Object.keys(src), i = 0; i < keys.length; ++i)\n if (dst[keys[i]] === undefined || !ifNotSet)\n dst[keys[i]] = src[keys[i]];\n return dst;\n}\n\nutil.merge = merge;\n\n/**\n * Converts the first character of a string to lower case.\n * @param {string} str String to convert\n * @returns {string} Converted string\n */\nutil.lcFirst = function lcFirst(str) {\n return str.charAt(0).toLowerCase() + str.substring(1);\n};\n\n/**\n * Creates a custom error constructor.\n * @memberof util\n * @param {string} name Error name\n * @returns {Constructor<Error>} Custom error constructor\n */\nfunction newError(name) {\n\n function CustomError(message, properties) {\n\n if (!(this instanceof CustomError))\n return new CustomError(message, properties);\n\n // Error.call(this, message);\n // ^ just returns a new error instance because the ctor can be called as a function\n\n Object.defineProperty(this, \"message\", { get: function() { return message; } });\n\n /* istanbul ignore next */\n if (Error.captureStackTrace) // node\n Error.captureStackTrace(this, CustomError);\n else\n Object.defineProperty(this, \"stack\", { value: new Error().stack || \"\" });\n\n if (properties)\n merge(this, properties);\n }\n\n CustomError.prototype = Object.create(Error.prototype, {\n constructor: {\n value: CustomError,\n writable: true,\n enumerable: false,\n configurable: true,\n },\n name: {\n get: function get() { return name; },\n set: undefined,\n enumerable: false,\n // configurable: false would accurately preserve the behavior of\n // the original, but I'm guessing that was not intentional.\n // For an actual error subclass, this property would\n // be configurable.\n configurable: true,\n },\n toString: {\n value: function value() { return this.name + \": \" + this.message; },\n writable: true,\n enumerable: false,\n configurable: true,\n },\n });\n\n return CustomError;\n}\n\nutil.newError = newError;\n\n/**\n * Constructs a new protocol error.\n * @classdesc Error subclass indicating a protocol specifc error.\n * @memberof util\n * @extends Error\n * @template T extends Message<T>\n * @constructor\n * @param {string} message Error message\n * @param {Object.<string,*>} [properties] Additional properties\n * @example\n * try {\n * MyMessage.decode(someBuffer); // throws if required fields are missing\n * } catch (e) {\n * if (e instanceof ProtocolError && e.instance)\n * console.log(\"decoded so far: \" + JSON.stringify(e.instance));\n * }\n */\nutil.ProtocolError = newError(\"ProtocolError\");\n\n/**\n * So far decoded message instance.\n * @name util.ProtocolError#instance\n * @type {Message<T>}\n */\n\n/**\n * A OneOf getter as returned by {@link util.oneOfGetter}.\n * @typedef OneOfGetter\n * @type {function}\n * @returns {string|undefined} Set field name, if any\n */\n\n/**\n * Builds a getter for a oneof's present field name.\n * @param {string[]} fieldNames Field names\n * @returns {OneOfGetter} Unbound getter\n */\nutil.oneOfGetter = function getOneOf(fieldNames) {\n var fieldMap = {};\n for (var i = 0; i < fieldNames.length; ++i)\n fieldMap[fieldNames[i]] = 1;\n\n /**\n * @returns {string|undefined} Set field name, if any\n * @this Object\n * @ignore\n */\n return function() { // eslint-disable-line consistent-return\n for (var keys = Object.keys(this), i = keys.length - 1; i > -1; --i)\n if (fieldMap[keys[i]] === 1 && this[keys[i]] !== undefined && this[keys[i]] !== null)\n return keys[i];\n };\n};\n\n/**\n * A OneOf setter as returned by {@link util.oneOfSetter}.\n * @typedef OneOfSetter\n * @type {function}\n * @param {string|undefined} value Field name\n * @returns {undefined}\n */\n\n/**\n * Builds a setter for a oneof's present field name.\n * @param {string[]} fieldNames Field names\n * @returns {OneOfSetter} Unbound setter\n */\nutil.oneOfSetter = function setOneOf(fieldNames) {\n\n /**\n * @param {string} name Field name\n * @returns {undefined}\n * @this Object\n * @ignore\n */\n return function(name) {\n for (var i = 0; i < fieldNames.length; ++i)\n if (fieldNames[i] !== name)\n delete this[fieldNames[i]];\n };\n};\n\n/**\n * Default conversion options used for {@link Message#toJSON} implementations.\n *\n * These options are close to proto3's JSON mapping with the exception that internal types like Any are handled just like messages. More precisely:\n *\n * - Longs become strings\n * - Enums become string keys\n * - Bytes become base64 encoded strings\n * - (Sub-)Messages become plain objects\n * - Maps become plain objects with all string keys\n * - Repeated fields become arrays\n * - NaN and Infinity for float and double fields become strings\n *\n * @type {IConversionOptions}\n * @see https://developers.google.com/protocol-buffers/docs/proto3?hl=en#json\n */\nutil.toJSONOptions = {\n longs: String,\n enums: String,\n bytes: String,\n json: true\n};\n\n// Sets up buffer utility according to the environment (called in index-minimal)\nutil._configure = function() {\n var Buffer = util.Buffer;\n /* istanbul ignore if */\n if (!Buffer) {\n util._Buffer_from = util._Buffer_allocUnsafe = null;\n return;\n }\n // because node 4.x buffers are incompatible & immutable\n // see: https://github.com/dcodeIO/protobuf.js/pull/665\n util._Buffer_from = Buffer.from !== Uint8Array.from && Buffer.from ||\n /* istanbul ignore next */\n function Buffer_from(value, encoding) {\n return new Buffer(value, encoding);\n };\n util._Buffer_allocUnsafe = Buffer.allocUnsafe ||\n /* istanbul ignore next */\n function Buffer_allocUnsafe(size) {\n return new Buffer(size);\n };\n};\n","\"use strict\";\nmodule.exports = Writer;\n\nvar util = require(\"./util/minimal\");\n\nvar BufferWriter; // cyclic\n\nvar LongBits = util.LongBits,\n base64 = util.base64,\n utf8 = util.utf8;\n\n/**\n * Constructs a new writer operation instance.\n * @classdesc Scheduled writer operation.\n * @constructor\n * @param {function(*, Uint8Array, number)} fn Function to call\n * @param {number} len Value byte length\n * @param {*} val Value to write\n * @ignore\n */\nfunction Op(fn, len, val) {\n\n /**\n * Function to call.\n * @type {function(Uint8Array, number, *)}\n */\n this.fn = fn;\n\n /**\n * Value byte length.\n * @type {number}\n */\n this.len = len;\n\n /**\n * Next operation.\n * @type {Writer.Op|undefined}\n */\n this.next = undefined;\n\n /**\n * Value to write.\n * @type {*}\n */\n this.val = val; // type varies\n}\n\n/* istanbul ignore next */\nfunction noop() {} // eslint-disable-line no-empty-function\n\n/**\n * Constructs a new writer state instance.\n * @classdesc Copied writer state.\n * @memberof Writer\n * @constructor\n * @param {Writer} writer Writer to copy state from\n * @ignore\n */\nfunction State(writer) {\n\n /**\n * Current head.\n * @type {Writer.Op}\n */\n this.head = writer.head;\n\n /**\n * Current tail.\n * @type {Writer.Op}\n */\n this.tail = writer.tail;\n\n /**\n * Current buffer length.\n * @type {number}\n */\n this.len = writer.len;\n\n /**\n * Next state.\n * @type {State|null}\n */\n this.next = writer.states;\n}\n\n/**\n * Constructs a new writer instance.\n * @classdesc Wire format writer using `Uint8Array` if available, otherwise `Array`.\n * @constructor\n */\nfunction Writer() {\n\n /**\n * Current length.\n * @type {number}\n */\n this.len = 0;\n\n /**\n * Operations head.\n * @type {Object}\n */\n this.head = new Op(noop, 0, 0);\n\n /**\n * Operations tail\n * @type {Object}\n */\n this.tail = this.head;\n\n /**\n * Linked forked states.\n * @type {Object|null}\n */\n this.states = null;\n\n // When a value is written, the writer calculates its byte length and puts it into a linked\n // list of operations to perform when finish() is called. This both allows us to allocate\n // buffers of the exact required size and reduces the amount of work we have to do compared\n // to first calculating over objects and then encoding over objects. In our case, the encoding\n // part is just a linked list walk calling operations with already prepared values.\n}\n\nvar create = function create() {\n return util.Buffer\n ? function create_buffer_setup() {\n return (Writer.create = function create_buffer() {\n return new BufferWriter();\n })();\n }\n /* istanbul ignore next */\n : function create_array() {\n return new Writer();\n };\n};\n\n/**\n * Creates a new writer.\n * @function\n * @returns {BufferWriter|Writer} A {@link BufferWriter} when Buffers are supported, otherwise a {@link Writer}\n */\nWriter.create = create();\n\n/**\n * Allocates a buffer of the specified size.\n * @param {number} size Buffer size\n * @returns {Uint8Array} Buffer\n */\nWriter.alloc = function alloc(size) {\n return new util.Array(size);\n};\n\n// Use Uint8Array buffer pool in the browser, just like node does with buffers\n/* istanbul ignore else */\nif (util.Array !== Array)\n Writer.alloc = util.pool(Writer.alloc, util.Array.prototype.subarray);\n\n/**\n * Pushes a new operation to the queue.\n * @param {function(Uint8Array, number, *)} fn Function to call\n * @param {number} len Value byte length\n * @param {number} val Value to write\n * @returns {Writer} `this`\n * @private\n */\nWriter.prototype._push = function push(fn, len, val) {\n this.tail = this.tail.next = new Op(fn, len, val);\n this.len += len;\n return this;\n};\n\nfunction writeByte(val, buf, pos) {\n buf[pos] = val & 255;\n}\n\nfunction writeVarint32(val, buf, pos) {\n while (val > 127) {\n buf[pos++] = val & 127 | 128;\n val >>>= 7;\n }\n buf[pos] = val;\n}\n\n/**\n * Constructs a new varint writer operation instance.\n * @classdesc Scheduled varint writer operation.\n * @extends Op\n * @constructor\n * @param {number} len Value byte length\n * @param {number} val Value to write\n * @ignore\n */\nfunction VarintOp(len, val) {\n this.len = len;\n this.next = undefined;\n this.val = val;\n}\n\nVarintOp.prototype = Object.create(Op.prototype);\nVarintOp.prototype.fn = writeVarint32;\n\n/**\n * Writes an unsigned 32 bit value as a varint.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.uint32 = function write_uint32(value) {\n // here, the call to this.push has been inlined and a varint specific Op subclass is used.\n // uint32 is by far the most frequently used operation and benefits significantly from this.\n this.len += (this.tail = this.tail.next = new VarintOp(\n (value = value >>> 0)\n < 128 ? 1\n : value < 16384 ? 2\n : value < 2097152 ? 3\n : value < 268435456 ? 4\n : 5,\n value)).len;\n return this;\n};\n\n/**\n * Writes a signed 32 bit value as a varint.\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.int32 = function write_int32(value) {\n return value < 0\n ? this._push(writeVarint64, 10, LongBits.fromNumber(value)) // 10 bytes per spec\n : this.uint32(value);\n};\n\n/**\n * Writes a 32 bit value as a varint, zig-zag encoded.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.sint32 = function write_sint32(value) {\n return this.uint32((value << 1 ^ value >> 31) >>> 0);\n};\n\nfunction writeVarint64(val, buf, pos) {\n while (val.hi) {\n buf[pos++] = val.lo & 127 | 128;\n val.lo = (val.lo >>> 7 | val.hi << 25) >>> 0;\n val.hi >>>= 7;\n }\n while (val.lo > 127) {\n buf[pos++] = val.lo & 127 | 128;\n val.lo = val.lo >>> 7;\n }\n buf[pos++] = val.lo;\n}\n\n/**\n * Writes an unsigned 64 bit value as a varint.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.uint64 = function write_uint64(value) {\n var bits = LongBits.from(value);\n return this._push(writeVarint64, bits.length(), bits);\n};\n\n/**\n * Writes a signed 64 bit value as a varint.\n * @function\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.int64 = Writer.prototype.uint64;\n\n/**\n * Writes a signed 64 bit value as a varint, zig-zag encoded.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.sint64 = function write_sint64(value) {\n var bits = LongBits.from(value).zzEncode();\n return this._push(writeVarint64, bits.length(), bits);\n};\n\n/**\n * Writes a boolish value as a varint.\n * @param {boolean} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.bool = function write_bool(value) {\n return this._push(writeByte, 1, value ? 1 : 0);\n};\n\nfunction writeFixed32(val, buf, pos) {\n buf[pos ] = val & 255;\n buf[pos + 1] = val >>> 8 & 255;\n buf[pos + 2] = val >>> 16 & 255;\n buf[pos + 3] = val >>> 24;\n}\n\n/**\n * Writes an unsigned 32 bit value as fixed 32 bits.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.fixed32 = function write_fixed32(value) {\n return this._push(writeFixed32, 4, value >>> 0);\n};\n\n/**\n * Writes a signed 32 bit value as fixed 32 bits.\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.sfixed32 = Writer.prototype.fixed32;\n\n/**\n * Writes an unsigned 64 bit value as fixed 64 bits.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.fixed64 = function write_fixed64(value) {\n var bits = LongBits.from(value);\n return this._push(writeFixed32, 4, bits.lo)._push(writeFixed32, 4, bits.hi);\n};\n\n/**\n * Writes a signed 64 bit value as fixed 64 bits.\n * @function\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.sfixed64 = Writer.prototype.fixed64;\n\n/**\n * Writes a float (32 bit).\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.float = function write_float(value) {\n return this._push(util.float.writeFloatLE, 4, value);\n};\n\n/**\n * Writes a double (64 bit float).\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.double = function write_double(value) {\n return this._push(util.float.writeDoubleLE, 8, value);\n};\n\nvar writeBytes = util.Array.prototype.set\n ? function writeBytes_set(val, buf, pos) {\n buf.set(val, pos); // also works for plain array values\n }\n /* istanbul ignore next */\n : function writeBytes_for(val, buf, pos) {\n for (var i = 0; i < val.length; ++i)\n buf[pos + i] = val[i];\n };\n\n/**\n * Writes a sequence of bytes.\n * @param {Uint8Array|string} value Buffer or base64 encoded string to write\n * @returns {Writer} `this`\n */\nWriter.prototype.bytes = function write_bytes(value) {\n var len = value.length >>> 0;\n if (!len)\n return this._push(writeByte, 1, 0);\n if (util.isString(value)) {\n var buf = Writer.alloc(len = base64.length(value));\n base64.decode(value, buf, 0);\n value = buf;\n }\n return this.uint32(len)._push(writeBytes, len, value);\n};\n\n/**\n * Writes a string.\n * @param {string} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.string = function write_string(value) {\n var len = utf8.length(value);\n return len\n ? this.uint32(len)._push(utf8.write, len, value)\n : this._push(writeByte, 1, 0);\n};\n\n/**\n * Forks this writer's state by pushing it to a stack.\n * Calling {@link Writer#reset|reset} or {@link Writer#ldelim|ldelim} resets the writer to the previous state.\n * @returns {Writer} `this`\n */\nWriter.prototype.fork = function fork() {\n this.states = new State(this);\n this.head = this.tail = new Op(noop, 0, 0);\n this.len = 0;\n return this;\n};\n\n/**\n * Resets this instance to the last state.\n * @returns {Writer} `this`\n */\nWriter.prototype.reset = function reset() {\n if (this.states) {\n this.head = this.states.head;\n this.tail = this.states.tail;\n this.len = this.states.len;\n this.states = this.states.next;\n } else {\n this.head = this.tail = new Op(noop, 0, 0);\n this.len = 0;\n }\n return this;\n};\n\n/**\n * Resets to the last state and appends the fork state's current write length as a varint followed by its operations.\n * @returns {Writer} `this`\n */\nWriter.prototype.ldelim = function ldelim() {\n var head = this.head,\n tail = this.tail,\n len = this.len;\n this.reset().uint32(len);\n if (len) {\n this.tail.next = head.next; // skip noop\n this.tail = tail;\n this.len += len;\n }\n return this;\n};\n\n/**\n * Finishes the write operation.\n * @returns {Uint8Array} Finished buffer\n */\nWriter.prototype.finish = function finish() {\n var head = this.head.next, // skip noop\n buf = this.constructor.alloc(this.len),\n pos = 0;\n while (head) {\n head.fn(head.val, buf, pos);\n pos += head.len;\n head = head.next;\n }\n // this.head = this.tail = null;\n return buf;\n};\n\nWriter._configure = function(BufferWriter_) {\n BufferWriter = BufferWriter_;\n Writer.create = create();\n BufferWriter._configure();\n};\n","\"use strict\";\nmodule.exports = BufferWriter;\n\n// extends Writer\nvar Writer = require(\"./writer\");\n(BufferWriter.prototype = Object.create(Writer.prototype)).constructor = BufferWriter;\n\nvar util = require(\"./util/minimal\");\n\n/**\n * Constructs a new buffer writer instance.\n * @classdesc Wire format writer using node buffers.\n * @extends Writer\n * @constructor\n */\nfunction BufferWriter() {\n Writer.call(this);\n}\n\nBufferWriter._configure = function () {\n /**\n * Allocates a buffer of the specified size.\n * @function\n * @param {number} size Buffer size\n * @returns {Buffer} Buffer\n */\n BufferWriter.alloc = util._Buffer_allocUnsafe;\n\n BufferWriter.writeBytesBuffer = util.Buffer && util.Buffer.prototype instanceof Uint8Array && util.Buffer.prototype.set.name === \"set\"\n ? function writeBytesBuffer_set(val, buf, pos) {\n buf.set(val, pos); // faster than copy (requires node >= 4 where Buffers extend Uint8Array and set is properly inherited)\n // also works for plain array values\n }\n /* istanbul ignore next */\n : function writeBytesBuffer_copy(val, buf, pos) {\n if (val.copy) // Buffer values\n val.copy(buf, pos, 0, val.length);\n else for (var i = 0; i < val.length;) // plain array values\n buf[pos++] = val[i++];\n };\n};\n\n\n/**\n * @override\n */\nBufferWriter.prototype.bytes = function write_bytes_buffer(value) {\n if (util.isString(value))\n value = util._Buffer_from(value, \"base64\");\n var len = value.length >>> 0;\n this.uint32(len);\n if (len)\n this._push(BufferWriter.writeBytesBuffer, len, value);\n return this;\n};\n\nfunction writeStringBuffer(val, buf, pos) {\n if (val.length < 40) // plain js is faster for short strings (probably due to redundant assertions)\n util.utf8.write(val, buf, pos);\n else if (buf.utf8Write)\n buf.utf8Write(val, pos);\n else\n buf.write(val, pos);\n}\n\n/**\n * @override\n */\nBufferWriter.prototype.string = function write_string_buffer(value) {\n var len = util.Buffer.byteLength(value);\n this.uint32(len);\n if (len)\n this._push(writeStringBuffer, len, value);\n return this;\n};\n\n\n/**\n * Finishes the write operation.\n * @name BufferWriter#finish\n * @function\n * @returns {Buffer} Finished buffer\n */\n\nBufferWriter._configure();\n","\"use strict\";\nmodule.exports = Reader;\n\nvar util = require(\"./util/minimal\");\n\nvar BufferReader; // cyclic\n\nvar LongBits = util.LongBits,\n utf8 = util.utf8;\n\n/* istanbul ignore next */\nfunction indexOutOfRange(reader, writeLength) {\n return RangeError(\"index out of range: \" + reader.pos + \" + \" + (writeLength || 1) + \" > \" + reader.len);\n}\n\n/**\n * Constructs a new reader instance using the specified buffer.\n * @classdesc Wire format reader using `Uint8Array` if available, otherwise `Array`.\n * @constructor\n * @param {Uint8Array} buffer Buffer to read from\n */\nfunction Reader(buffer) {\n\n /**\n * Read buffer.\n * @type {Uint8Array}\n */\n this.buf = buffer;\n\n /**\n * Read buffer position.\n * @type {number}\n */\n this.pos = 0;\n\n /**\n * Read buffer length.\n * @type {number}\n */\n this.len = buffer.length;\n}\n\nvar create_array = typeof Uint8Array !== \"undefined\"\n ? function create_typed_array(buffer) {\n if (buffer instanceof Uint8Array || Array.isArray(buffer))\n return new Reader(buffer);\n throw Error(\"illegal buffer\");\n }\n /* istanbul ignore next */\n : function create_array(buffer) {\n if (Array.isArray(buffer))\n return new Reader(buffer);\n throw Error(\"illegal buffer\");\n };\n\nvar create = function create() {\n return util.Buffer\n ? function create_buffer_setup(buffer) {\n return (Reader.create = function create_buffer(buffer) {\n return util.Buffer.isBuffer(buffer)\n ? new BufferReader(buffer)\n /* istanbul ignore next */\n : create_array(buffer);\n })(buffer);\n }\n /* istanbul ignore next */\n : create_array;\n};\n\n/**\n * Creates a new reader using the specified buffer.\n * @function\n * @param {Uint8Array|Buffer} buffer Buffer to read from\n * @returns {Reader|BufferReader} A {@link BufferReader} if `buffer` is a Buffer, otherwise a {@link Reader}\n * @throws {Error} If `buffer` is not a valid buffer\n */\nReader.create = create();\n\nReader.prototype._slice = util.Array.prototype.subarray || /* istanbul ignore next */ util.Array.prototype.slice;\n\n/**\n * Reads a varint as an unsigned 32 bit value.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.uint32 = (function read_uint32_setup() {\n var value = 4294967295; // optimizer type-hint, tends to deopt otherwise (?!)\n return function read_uint32() {\n value = ( this.buf[this.pos] & 127 ) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 127) << 7) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 127) << 14) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 127) << 21) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 15) << 28) >>> 0; if (this.buf[this.pos++] < 128) return value;\n\n /* istanbul ignore if */\n if ((this.pos += 5) > this.len) {\n this.pos = this.len;\n throw indexOutOfRange(this, 10);\n }\n return value;\n };\n})();\n\n/**\n * Reads a varint as a signed 32 bit value.\n * @returns {number} Value read\n */\nReader.prototype.int32 = function read_int32() {\n return this.uint32() | 0;\n};\n\n/**\n * Reads a zig-zag encoded varint as a signed 32 bit value.\n * @returns {number} Value read\n */\nReader.prototype.sint32 = function read_sint32() {\n var value = this.uint32();\n return value >>> 1 ^ -(value & 1) | 0;\n};\n\n/* eslint-disable no-invalid-this */\n\nfunction readLongVarint() {\n // tends to deopt with local vars for octet etc.\n var bits = new LongBits(0, 0);\n var i = 0;\n if (this.len - this.pos > 4) { // fast route (lo)\n for (; i < 4; ++i) {\n // 1st..4th\n bits.lo = (bits.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n // 5th\n bits.lo = (bits.lo | (this.buf[this.pos] & 127) << 28) >>> 0;\n bits.hi = (bits.hi | (this.buf[this.pos] & 127) >> 4) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n i = 0;\n } else {\n for (; i < 3; ++i) {\n /* istanbul ignore if */\n if (this.pos >= this.len)\n throw indexOutOfRange(this);\n // 1st..3th\n bits.lo = (bits.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n // 4th\n bits.lo = (bits.lo | (this.buf[this.pos++] & 127) << i * 7) >>> 0;\n return bits;\n }\n if (this.len - this.pos > 4) { // fast route (hi)\n for (; i < 5; ++i) {\n // 6th..10th\n bits.hi = (bits.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n } else {\n for (; i < 5; ++i) {\n /* istanbul ignore if */\n if (this.pos >= this.len)\n throw indexOutOfRange(this);\n // 6th..10th\n bits.hi = (bits.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n }\n /* istanbul ignore next */\n throw Error(\"invalid varint encoding\");\n}\n\n/* eslint-enable no-invalid-this */\n\n/**\n * Reads a varint as a signed 64 bit value.\n * @name Reader#int64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a varint as an unsigned 64 bit value.\n * @name Reader#uint64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a zig-zag encoded varint as a signed 64 bit value.\n * @name Reader#sint64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a varint as a boolean.\n * @returns {boolean} Value read\n */\nReader.prototype.bool = function read_bool() {\n return this.uint32() !== 0;\n};\n\nfunction readFixed32_end(buf, end) { // note that this uses `end`, not `pos`\n return (buf[end - 4]\n | buf[end - 3] << 8\n | buf[end - 2] << 16\n | buf[end - 1] << 24) >>> 0;\n}\n\n/**\n * Reads fixed 32 bits as an unsigned 32 bit integer.\n * @returns {number} Value read\n */\nReader.prototype.fixed32 = function read_fixed32() {\n\n /* istanbul ignore if */\n if (this.pos + 4 > this.len)\n throw indexOutOfRange(this, 4);\n\n return readFixed32_end(this.buf, this.pos += 4);\n};\n\n/**\n * Reads fixed 32 bits as a signed 32 bit integer.\n * @returns {number} Value read\n */\nReader.prototype.sfixed32 = function read_sfixed32() {\n\n /* istanbul ignore if */\n if (this.pos + 4 > this.len)\n throw indexOutOfRange(this, 4);\n\n return readFixed32_end(this.buf, this.pos += 4) | 0;\n};\n\n/* eslint-disable no-invalid-this */\n\nfunction readFixed64(/* this: Reader */) {\n\n /* istanbul ignore if */\n if (this.pos + 8 > this.len)\n throw indexOutOfRange(this, 8);\n\n return new LongBits(readFixed32_end(this.buf, this.pos += 4), readFixed32_end(this.buf, this.pos += 4));\n}\n\n/* eslint-enable no-invalid-this */\n\n/**\n * Reads fixed 64 bits.\n * @name Reader#fixed64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads zig-zag encoded fixed 64 bits.\n * @name Reader#sfixed64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a float (32 bit) as a number.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.float = function read_float() {\n\n /* istanbul ignore if */\n if (this.pos + 4 > this.len)\n throw indexOutOfRange(this, 4);\n\n var value = util.float.readFloatLE(this.buf, this.pos);\n this.pos += 4;\n return value;\n};\n\n/**\n * Reads a double (64 bit float) as a number.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.double = function read_double() {\n\n /* istanbul ignore if */\n if (this.pos + 8 > this.len)\n throw indexOutOfRange(this, 4);\n\n var value = util.float.readDoubleLE(this.buf, this.pos);\n this.pos += 8;\n return value;\n};\n\n/**\n * Reads a sequence of bytes preceeded by its length as a varint.\n * @returns {Uint8Array} Value read\n */\nReader.prototype.bytes = function read_bytes() {\n var length = this.uint32(),\n start = this.pos,\n end = this.pos + length;\n\n /* istanbul ignore if */\n if (end > this.len)\n throw indexOutOfRange(this, length);\n\n this.pos += length;\n if (Array.isArray(this.buf)) // plain array\n return this.buf.slice(start, end);\n\n if (start === end) { // fix for IE 10/Win8 and others' subarray returning array of size 1\n var nativeBuffer = util.Buffer;\n return nativeBuffer\n ? nativeBuffer.alloc(0)\n : new this.buf.constructor(0);\n }\n return this._slice.call(this.buf, start, end);\n};\n\n/**\n * Reads a string preceeded by its byte length as a varint.\n * @returns {string} Value read\n */\nReader.prototype.string = function read_string() {\n var bytes = this.bytes();\n return utf8.read(bytes, 0, bytes.length);\n};\n\n/**\n * Skips the specified number of bytes if specified, otherwise skips a varint.\n * @param {number} [length] Length if known, otherwise a varint is assumed\n * @returns {Reader} `this`\n */\nReader.prototype.skip = function skip(length) {\n if (typeof length === \"number\") {\n /* istanbul ignore if */\n if (this.pos + length > this.len)\n throw indexOutOfRange(this, length);\n this.pos += length;\n } else {\n do {\n /* istanbul ignore if */\n if (this.pos >= this.len)\n throw indexOutOfRange(this);\n } while (this.buf[this.pos++] & 128);\n }\n return this;\n};\n\n/**\n * Skips the next element of the specified wire type.\n * @param {number} wireType Wire type received\n * @returns {Reader} `this`\n */\nReader.prototype.skipType = function(wireType) {\n switch (wireType) {\n case 0:\n this.skip();\n break;\n case 1:\n this.skip(8);\n break;\n case 2:\n this.skip(this.uint32());\n break;\n case 3:\n while ((wireType = this.uint32() & 7) !== 4) {\n this.skipType(wireType);\n }\n break;\n case 5:\n this.skip(4);\n break;\n\n /* istanbul ignore next */\n default:\n throw Error(\"invalid wire type \" + wireType + \" at offset \" + this.pos);\n }\n return this;\n};\n\nReader._configure = function(BufferReader_) {\n BufferReader = BufferReader_;\n Reader.create = create();\n BufferReader._configure();\n\n var fn = util.Long ? \"toLong\" : /* istanbul ignore next */ \"toNumber\";\n util.merge(Reader.prototype, {\n\n int64: function read_int64() {\n return readLongVarint.call(this)[fn](false);\n },\n\n uint64: function read_uint64() {\n return readLongVarint.call(this)[fn](true);\n },\n\n sint64: function read_sint64() {\n return readLongVarint.call(this).zzDecode()[fn](false);\n },\n\n fixed64: function read_fixed64() {\n return readFixed64.call(this)[fn](true);\n },\n\n sfixed64: function read_sfixed64() {\n return readFixed64.call(this)[fn](false);\n }\n\n });\n};\n","\"use strict\";\nmodule.exports = BufferReader;\n\n// extends Reader\nvar Reader = require(\"./reader\");\n(BufferReader.prototype = Object.create(Reader.prototype)).constructor = BufferReader;\n\nvar util = require(\"./util/minimal\");\n\n/**\n * Constructs a new buffer reader instance.\n * @classdesc Wire format reader using node buffers.\n * @extends Reader\n * @constructor\n * @param {Buffer} buffer Buffer to read from\n */\nfunction BufferReader(buffer) {\n Reader.call(this, buffer);\n\n /**\n * Read buffer.\n * @name BufferReader#buf\n * @type {Buffer}\n */\n}\n\nBufferReader._configure = function () {\n /* istanbul ignore else */\n if (util.Buffer)\n BufferReader.prototype._slice = util.Buffer.prototype.slice;\n};\n\n\n/**\n * @override\n */\nBufferReader.prototype.string = function read_string_buffer() {\n var len = this.uint32(); // modifies pos\n return this.buf.utf8Slice\n ? this.buf.utf8Slice(this.pos, this.pos = Math.min(this.pos + len, this.len))\n : this.buf.toString(\"utf-8\", this.pos, this.pos = Math.min(this.pos + len, this.len));\n};\n\n/**\n * Reads a sequence of bytes preceeded by its length as a varint.\n * @name BufferReader#bytes\n * @function\n * @returns {Buffer} Value read\n */\n\nBufferReader._configure();\n","\"use strict\";\nmodule.exports = Service;\n\nvar util = require(\"../util/minimal\");\n\n// Extends EventEmitter\n(Service.prototype = Object.create(util.EventEmitter.prototype)).constructor = Service;\n\n/**\n * A service method callback as used by {@link rpc.ServiceMethod|ServiceMethod}.\n *\n * Differs from {@link RPCImplCallback} in that it is an actual callback of a service method which may not return `response = null`.\n * @typedef rpc.ServiceMethodCallback\n * @template TRes extends Message<TRes>\n * @type {function}\n * @param {Error|null} error Error, if any\n * @param {TRes} [response] Response message\n * @returns {undefined}\n */\n\n/**\n * A service method part of a {@link rpc.Service} as created by {@link Service.create}.\n * @typedef rpc.ServiceMethod\n * @template TReq extends Message<TReq>\n * @template TRes extends Message<TRes>\n * @type {function}\n * @param {TReq|Properties<TReq>} request Request message or plain object\n * @param {rpc.ServiceMethodCallback<TRes>} [callback] Node-style callback called with the error, if any, and the response message\n * @returns {Promise<Message<TRes>>} Promise if `callback` has been omitted, otherwise `undefined`\n */\n\n/**\n * Constructs a new RPC service instance.\n * @classdesc An RPC service as returned by {@link Service#create}.\n * @exports rpc.Service\n * @extends util.EventEmitter\n * @constructor\n * @param {RPCImpl} rpcImpl RPC implementation\n * @param {boolean} [requestDelimited=false] Whether requests are length-delimited\n * @param {boolean} [responseDelimited=false] Whether responses are length-delimited\n */\nfunction Service(rpcImpl, requestDelimited, responseDelimited) {\n\n if (typeof rpcImpl !== \"function\")\n throw TypeError(\"rpcImpl must be a function\");\n\n util.EventEmitter.call(this);\n\n /**\n * RPC implementation. Becomes `null` once the service is ended.\n * @type {RPCImpl|null}\n */\n this.rpcImpl = rpcImpl;\n\n /**\n * Whether requests are length-delimited.\n * @type {boolean}\n */\n this.requestDelimited = Boolean(requestDelimited);\n\n /**\n * Whether responses are length-delimited.\n * @type {boolean}\n */\n this.responseDelimited = Boolean(responseDelimited);\n}\n\n/**\n * Calls a service method through {@link rpc.Service#rpcImpl|rpcImpl}.\n * @param {Method|rpc.ServiceMethod<TReq,TRes>} method Reflected or static method\n * @param {Constructor<TReq>} requestCtor Request constructor\n * @param {Constructor<TRes>} responseCtor Response constructor\n * @param {TReq|Properties<TReq>} request Request message or plain object\n * @param {rpc.ServiceMethodCallback<TRes>} callback Service callback\n * @returns {undefined}\n * @template TReq extends Message<TReq>\n * @template TRes extends Message<TRes>\n */\nService.prototype.rpcCall = function rpcCall(method, requestCtor, responseCtor, request, callback) {\n\n if (!request)\n throw TypeError(\"request must be specified\");\n\n var self = this;\n if (!callback)\n return util.asPromise(rpcCall, self, method, requestCtor, responseCtor, request);\n\n if (!self.rpcImpl) {\n setTimeout(function() { callback(Error(\"already ended\")); }, 0);\n return undefined;\n }\n\n try {\n return self.rpcImpl(\n method,\n requestCtor[self.requestDelimited ? \"encodeDelimited\" : \"encode\"](request).finish(),\n function rpcCallback(err, response) {\n\n if (err) {\n self.emit(\"error\", err, method);\n return callback(err);\n }\n\n if (response === null) {\n self.end(/* endedByRPC */ true);\n return undefined;\n }\n\n if (!(response instanceof responseCtor)) {\n try {\n response = responseCtor[self.responseDelimited ? \"decodeDelimited\" : \"decode\"](response);\n } catch (err) {\n self.emit(\"error\", err, method);\n return callback(err);\n }\n }\n\n self.emit(\"data\", response, method);\n return callback(null, response);\n }\n );\n } catch (err) {\n self.emit(\"error\", err, method);\n setTimeout(function() { callback(err); }, 0);\n return undefined;\n }\n};\n\n/**\n * Ends this service and emits the `end` event.\n * @param {boolean} [endedByRPC=false] Whether the service has been ended by the RPC implementation.\n * @returns {rpc.Service} `this`\n */\nService.prototype.end = function end(endedByRPC) {\n if (this.rpcImpl) {\n if (!endedByRPC) // signal end to rpcImpl\n this.rpcImpl(null, null, null);\n this.rpcImpl = null;\n this.emit(\"end\").off();\n }\n return this;\n};\n","\"use strict\";\n\n/**\n * Streaming RPC helpers.\n * @namespace\n */\nvar rpc = exports;\n\n/**\n * RPC implementation passed to {@link Service#create} performing a service request on network level, i.e. by utilizing http requests or websockets.\n * @typedef RPCImpl\n * @type {function}\n * @param {Method|rpc.ServiceMethod<Message<{}>,Message<{}>>} method Reflected or static method being called\n * @param {Uint8Array} requestData Request data\n * @param {RPCImplCallback} callback Callback function\n * @returns {undefined}\n * @example\n * function rpcImpl(method, requestData, callback) {\n * if (protobuf.util.lcFirst(method.name) !== \"myMethod\") // compatible with static code\n * throw Error(\"no such method\");\n * asynchronouslyObtainAResponse(requestData, function(err, responseData) {\n * callback(err, responseData);\n * });\n * }\n */\n\n/**\n * Node-style callback as used by {@link RPCImpl}.\n * @typedef RPCImplCallback\n * @type {function}\n * @param {Error|null} error Error, if any, otherwise `null`\n * @param {Uint8Array|null} [response] Response data or `null` to signal end of stream, if there hasn't been an error\n * @returns {undefined}\n */\n\nrpc.Service = require(\"./rpc/service\");\n","\"use strict\";\nmodule.exports = {};\n\n/**\n * Named roots.\n * This is where pbjs stores generated structures (the option `-r, --root` specifies a name).\n * Can also be used manually to make roots available across modules.\n * @name roots\n * @type {Object.<string,Root>}\n * @example\n * // pbjs -r myroot -o compiled.js ...\n *\n * // in another module:\n * require(\"./compiled.js\");\n *\n * // in any subsequent module:\n * var root = protobuf.roots[\"myroot\"];\n */\n","\"use strict\";\nvar protobuf = exports;\n\n/**\n * Build type, one of `\"full\"`, `\"light\"` or `\"minimal\"`.\n * @name build\n * @type {string}\n * @const\n */\nprotobuf.build = \"minimal\";\n\n// Serialization\nprotobuf.Writer = require(\"./writer\");\nprotobuf.BufferWriter = require(\"./writer_buffer\");\nprotobuf.Reader = require(\"./reader\");\nprotobuf.BufferReader = require(\"./reader_buffer\");\n\n// Utility\nprotobuf.util = require(\"./util/minimal\");\nprotobuf.rpc = require(\"./rpc\");\nprotobuf.roots = require(\"./roots\");\nprotobuf.configure = configure;\n\n/* istanbul ignore next */\n/**\n * Reconfigures the library according to the environment.\n * @returns {undefined}\n */\nfunction configure() {\n protobuf.util._configure();\n protobuf.Writer._configure(protobuf.BufferWriter);\n protobuf.Reader._configure(protobuf.BufferReader);\n}\n\n// Set up buffer utility according to the environment\nconfigure();\n","// minimal library entry point.\n\n\"use strict\";\nmodule.exports = require(\"./src/index-minimal\");\n","/*eslint-disable*/\nimport $protobuf from \"protobufjs/minimal.js\";\n\n// Common aliases\nconst $Reader = $protobuf.Reader, $Writer = $protobuf.Writer, $util = $protobuf.util;\n\n// Exported root namespace\nconst $root = $protobuf.roots.unixfs || ($protobuf.roots.unixfs = {});\n\nexport const Data = $root.Data = (() => {\n\n /**\n * Properties of a Data.\n * @exports IData\n * @interface IData\n * @property {Data.DataType} Type Data Type\n * @property {Uint8Array|null} [Data] Data Data\n * @property {number|null} [filesize] Data filesize\n * @property {Array.<number>|null} [blocksizes] Data blocksizes\n * @property {number|null} [hashType] Data hashType\n * @property {number|null} [fanout] Data fanout\n * @property {number|null} [mode] Data mode\n * @property {IUnixTime|null} [mtime] Data mtime\n */\n\n /**\n * Constructs a new Data.\n * @exports Data\n * @classdesc Represents a Data.\n * @implements IData\n * @constructor\n * @param {IData=} [p] Properties to set\n */\n function Data(p) {\n this.blocksizes = [];\n if (p)\n for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)\n if (p[ks[i]] != null)\n this[ks[i]] = p[ks[i]];\n }\n\n /**\n * Data Type.\n * @member {Data.DataType} Type\n * @memberof Data\n * @instance\n */\n Data.prototype.Type = 0;\n\n /**\n * Data Data.\n * @member {Uint8Array} Data\n * @memberof Data\n * @instance\n */\n Data.prototype.Data = $util.newBuffer([]);\n\n /**\n * Data filesize.\n * @member {number} filesize\n * @memberof Data\n * @instance\n */\n Data.prototype.filesize = $util.Long ? $util.Long.fromBits(0,0,true) : 0;\n\n /**\n * Data blocksizes.\n * @member {Array.<number>} blocksizes\n * @memberof Data\n * @instance\n */\n Data.prototype.blocksizes = $util.emptyArray;\n\n /**\n * Data hashType.\n * @member {number} hashType\n * @memberof Data\n * @instance\n */\n Data.prototype.hashType = $util.Long ? $util.Long.fromBits(0,0,true) : 0;\n\n /**\n * Data fanout.\n * @member {number} fanout\n * @memberof Data\n * @instance\n */\n Data.prototype.fanout = $util.Long ? $util.Long.fromBits(0,0,true) : 0;\n\n /**\n * Data mode.\n * @member {number} mode\n * @memberof Data\n * @instance\n */\n Data.prototype.mode = 0;\n\n /**\n * Data mtime.\n * @member {IUnixTime|null|undefined} mtime\n * @memberof Data\n * @instance\n */\n Data.prototype.mtime = null;\n\n /**\n * Encodes the specified Data message. Does not implicitly {@link Data.verify|verify} messages.\n * @function encode\n * @memberof Data\n * @static\n * @param {IData} m Data message or plain object to encode\n * @param {$protobuf.Writer} [w] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n Data.encode = function encode(m, w) {\n if (!w)\n w = $Writer.create();\n w.uint32(8).int32(m.Type);\n if (m.Data != null && Object.hasOwnProperty.call(m, \"Data\"))\n w.uint32(18).bytes(m.Data);\n if (m.filesize != null && Object.hasOwnProperty.call(m, \"filesize\"))\n w.uint32(24).uint64(m.filesize);\n if (m.blocksizes != null && m.blocksizes.length) {\n for (var i = 0; i < m.blocksizes.length; ++i)\n w.uint32(32).uint64(m.blocksizes[i]);\n }\n if (m.hashType != null && Object.hasOwnProperty.call(m, \"hashType\"))\n w.uint32(40).uint64(m.hashType);\n if (m.fanout != null && Object.hasOwnProperty.call(m, \"fanout\"))\n w.uint32(48).uint64(m.fanout);\n if (m.mode != null && Object.hasOwnProperty.call(m, \"mode\"))\n w.uint32(56).uint32(m.mode);\n if (m.mtime != null && Object.hasOwnProperty.call(m, \"mtime\"))\n $root.UnixTime.encode(m.mtime, w.uint32(66).fork()).ldelim();\n return w;\n };\n\n /**\n * Decodes a Data message from the specified reader or buffer.\n * @function decode\n * @memberof Data\n * @static\n * @param {$protobuf.Reader|Uint8Array} r Reader or buffer to decode from\n * @param {number} [l] Message length if known beforehand\n * @returns {Data} Data\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n Data.decode = function decode(r, l) {\n if (!(r instanceof $Reader))\n r = $Reader.create(r);\n var c = l === undefined ? r.len : r.pos + l, m = new $root.Data();\n while (r.pos < c) {\n var t = r.uint32();\n switch (t >>> 3) {\n case 1:\n m.Type = r.int32();\n break;\n case 2:\n m.Data = r.bytes();\n break;\n case 3:\n m.filesize = r.uint64();\n break;\n case 4:\n if (!(m.blocksizes && m.blocksizes.length))\n m.blocksizes = [];\n if ((t & 7) === 2) {\n var c2 = r.uint32() + r.pos;\n while (r.pos < c2)\n m.blocksizes.push(r.uint64());\n } else\n m.blocksizes.push(r.uint64());\n break;\n case 5:\n m.hashType = r.uint64();\n break;\n case 6:\n m.fanout = r.uint64();\n break;\n case 7:\n m.mode = r.uint32();\n break;\n case 8:\n m.mtime = $root.UnixTime.decode(r, r.uint32());\n break;\n default:\n r.skipType(t & 7);\n break;\n }\n }\n if (!m.hasOwnProperty(\"Type\"))\n throw $util.ProtocolError(\"missing required 'Type'\", { instance: m });\n return m;\n };\n\n /**\n * Creates a Data message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof Data\n * @static\n * @param {Object.<string,*>} d Plain object\n * @returns {Data} Data\n */\n Data.fromObject = function fromObject(d) {\n if (d instanceof $root.Data)\n return d;\n var m = new $root.Data();\n switch (d.Type) {\n case \"Raw\":\n case 0:\n m.Type = 0;\n break;\n case \"Directory\":\n case 1:\n m.Type = 1;\n break;\n case \"File\":\n case 2:\n m.Type = 2;\n break;\n case \"Metadata\":\n case 3:\n m.Type = 3;\n break;\n case \"Symlink\":\n case 4:\n m.Type = 4;\n break;\n case \"HAMTShard\":\n case 5:\n m.Type = 5;\n break;\n }\n if (d.Data != null) {\n if (typeof d.Data === \"string\")\n $util.base64.decode(d.Data, m.Data = $util.newBuffer($util.base64.length(d.Data)), 0);\n else if (d.Data.length)\n m.Data = d.Data;\n }\n if (d.filesize != null) {\n if ($util.Long)\n (m.filesize = $util.Long.fromValue(d.filesize)).unsigned = true;\n else if (typeof d.filesize === \"string\")\n m.filesize = parseInt(d.filesize, 10);\n else if (typeof d.filesize === \"number\")\n m.filesize = d.filesize;\n else if (typeof d.filesize === \"object\")\n m.filesize = new $util.LongBits(d.filesize.low >>> 0, d.filesize.high >>> 0).toNumber(true);\n }\n if (d.blocksizes) {\n if (!Array.isArray(d.blocksizes))\n throw TypeError(\".Data.blocksizes: array expected\");\n m.blocksizes = [];\n for (var i = 0; i < d.blocksizes.length; ++i) {\n if ($util.Long)\n (m.blocksizes[i] = $util.Long.fromValue(d.blocksizes[i])).unsigned = true;\n else if (typeof d.blocksizes[i] === \"string\")\n m.blocksizes[i] = parseInt(d.blocksizes[i], 10);\n else if (typeof d.blocksizes[i] === \"number\")\n m.blocksizes[i] = d.blocksizes[i];\n else if (typeof d.blocksizes[i] === \"object\")\n m.blocksizes[i] = new $util.LongBits(d.blocksizes[i].low >>> 0, d.blocksizes[i].high >>> 0).toNumber(true);\n }\n }\n if (d.hashType != null) {\n if ($util.Long)\n (m.hashType = $util.Long.fromValue(d.hashType)).unsigned = true;\n else if (typeof d.hashType === \"string\")\n m.hashType = parseInt(d.hashType, 10);\n else if (typeof d.hashType === \"number\")\n m.hashType = d.hashType;\n else if (typeof d.hashType === \"object\")\n m.hashType = new $util.LongBits(d.hashType.low >>> 0, d.hashType.high >>> 0).toNumber(true);\n }\n if (d.fanout != null) {\n if ($util.Long)\n (m.fanout = $util.Long.fromValue(d.fanout)).unsigned = true;\n else if (typeof d.fanout === \"string\")\n m.fanout = parseInt(d.fanout, 10);\n else if (typeof d.fanout === \"number\")\n m.fanout = d.fanout;\n else if (typeof d.fanout === \"object\")\n m.fanout = new $util.LongBits(d.fanout.low >>> 0, d.fanout.high >>> 0).toNumber(true);\n }\n if (d.mode != null) {\n m.mode = d.mode >>> 0;\n }\n if (d.mtime != null) {\n if (typeof d.mtime !== \"object\")\n throw TypeError(\".Data.mtime: object expected\");\n m.mtime = $root.UnixTime.fromObject(d.mtime);\n }\n return m;\n };\n\n /**\n * Creates a plain object from a Data message. Also converts values to other types if specified.\n * @function toObject\n * @memberof Data\n * @static\n * @param {Data} m Data\n * @param {$protobuf.IConversionOptions} [o] Conversion options\n * @returns {Object.<string,*>} Plain object\n */\n Data.toObject = function toObject(m, o) {\n if (!o)\n o = {};\n var d = {};\n if (o.arrays || o.defaults) {\n d.blocksizes = [];\n }\n if (o.defaults) {\n d.Type = o.enums === String ? \"Raw\" : 0;\n if (o.bytes === String)\n d.Data = \"\";\n else {\n d.Data = [];\n if (o.bytes !== Array)\n d.Data = $util.newBuffer(d.Data);\n }\n if ($util.Long) {\n var n = new $util.Long(0, 0, true);\n d.filesize = o.longs === String ? n.toString() : o.longs === Number ? n.toNumber() : n;\n } else\n d.filesize = o.longs === String ? \"0\" : 0;\n if ($util.Long) {\n var n = new $util.Long(0, 0, true);\n d.hashType = o.longs === String ? n.toString() : o.longs === Number ? n.toNumber() : n;\n } else\n d.hashType = o.longs === String ? \"0\" : 0;\n if ($util.Long) {\n var n = new $util.Long(0, 0, true);\n d.fanout = o.longs === String ? n.toString() : o.longs === Number ? n.toNumber() : n;\n } else\n d.fanout = o.longs === String ? \"0\" : 0;\n d.mode = 0;\n d.mtime = null;\n }\n if (m.Type != null && m.hasOwnProperty(\"Type\")) {\n d.Type = o.enums === String ? $root.Data.DataType[m.Type] : m.Type;\n }\n if (m.Data != null && m.hasOwnProperty(\"Data\")) {\n d.Data = o.bytes === String ? $util.base64.encode(m.Data, 0, m.Data.length) : o.bytes === Array ? Array.prototype.slice.call(m.Data) : m.Data;\n }\n if (m.filesize != null && m.hasOwnProperty(\"filesize\")) {\n if (typeof m.filesize === \"number\")\n d.filesize = o.longs === String ? String(m.filesize) : m.filesize;\n else\n d.filesize = o.longs === String ? $util.Long.prototype.toString.call(m.filesize) : o.longs === Number ? new $util.LongBits(m.filesize.low >>> 0, m.filesize.high >>> 0).toNumber(true) : m.filesize;\n }\n if (m.blocksizes && m.blocksizes.length) {\n d.blocksizes = [];\n for (var j = 0; j < m.blocksizes.length; ++j) {\n if (typeof m.blocksizes[j] === \"number\")\n d.blocksizes[j] = o.longs === String ? String(m.blocksizes[j]) : m.blocksizes[j];\n else\n d.blocksizes[j] = o.longs === String ? $util.Long.prototype.toString.call(m.blocksizes[j]) : o.longs === Number ? new $util.LongBits(m.blocksizes[j].low >>> 0, m.blocksizes[j].high >>> 0).toNumber(true) : m.blocksizes[j];\n }\n }\n if (m.hashType != null && m.hasOwnProperty(\"hashType\")) {\n if (typeof m.hashType === \"number\")\n d.hashType = o.longs === String ? String(m.hashType) : m.hashType;\n else\n d.hashType = o.longs === String ? $util.Long.prototype.toString.call(m.hashType) : o.longs === Number ? new $util.LongBits(m.hashType.low >>> 0, m.hashType.high >>> 0).toNumber(true) : m.hashType;\n }\n if (m.fanout != null && m.hasOwnProperty(\"fanout\")) {\n if (typeof m.fanout === \"number\")\n d.fanout = o.longs === String ? String(m.fanout) : m.fanout;\n else\n d.fanout = o.longs === String ? $util.Long.prototype.toString.call(m.fanout) : o.longs === Number ? new $util.LongBits(m.fanout.low >>> 0, m.fanout.high >>> 0).toNumber(true) : m.fanout;\n }\n if (m.mode != null && m.hasOwnProperty(\"mode\")) {\n d.mode = m.mode;\n }\n if (m.mtime != null && m.hasOwnProperty(\"mtime\")) {\n d.mtime = $root.UnixTime.toObject(m.mtime, o);\n }\n return d;\n };\n\n /**\n * Converts this Data to JSON.\n * @function toJSON\n * @memberof Data\n * @instance\n * @returns {Object.<string,*>} JSON object\n */\n Data.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n /**\n * DataType enum.\n * @name Data.DataType\n * @enum {number}\n * @property {number} Raw=0 Raw value\n * @property {number} Directory=1 Directory value\n * @property {number} File=2 File value\n * @property {number} Metadata=3 Metadata value\n * @property {number} Symlink=4 Symlink value\n * @property {number} HAMTShard=5 HAMTShard value\n */\n Data.DataType = (function() {\n const valuesById = {}, values = Object.create(valuesById);\n values[valuesById[0] = \"Raw\"] = 0;\n values[valuesById[1] = \"Directory\"] = 1;\n values[valuesById[2] = \"File\"] = 2;\n values[valuesById[3] = \"Metadata\"] = 3;\n values[valuesById[4] = \"Symlink\"] = 4;\n values[valuesById[5] = \"HAMTShard\"] = 5;\n return values;\n })();\n\n return Data;\n})();\n\nexport const UnixTime = $root.UnixTime = (() => {\n\n /**\n * Properties of an UnixTime.\n * @exports IUnixTime\n * @interface IUnixTime\n * @property {number} Seconds UnixTime Seconds\n * @property {number|null} [FractionalNanoseconds] UnixTime FractionalNanoseconds\n */\n\n /**\n * Constructs a new UnixTime.\n * @exports UnixTime\n * @classdesc Represents an UnixTime.\n * @implements IUnixTime\n * @constructor\n * @param {IUnixTime=} [p] Properties to set\n */\n function UnixTime(p) {\n if (p)\n for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)\n if (p[ks[i]] != null)\n this[ks[i]] = p[ks[i]];\n }\n\n /**\n * UnixTime Seconds.\n * @member {number} Seconds\n * @memberof UnixTime\n * @instance\n */\n UnixTime.prototype.Seconds = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n /**\n * UnixTime FractionalNanoseconds.\n * @member {number} FractionalNanoseconds\n * @memberof UnixTime\n * @instance\n */\n UnixTime.prototype.FractionalNanoseconds = 0;\n\n /**\n * Encodes the specified UnixTime message. Does not implicitly {@link UnixTime.verify|verify} messages.\n * @function encode\n * @memberof UnixTime\n * @static\n * @param {IUnixTime} m UnixTime message or plain object to encode\n * @param {$protobuf.Writer} [w] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n UnixTime.encode = function encode(m, w) {\n if (!w)\n w = $Writer.create();\n w.uint32(8).int64(m.Seconds);\n if (m.FractionalNanoseconds != null && Object.hasOwnProperty.call(m, \"FractionalNanoseconds\"))\n w.uint32(21).fixed32(m.FractionalNanoseconds);\n return w;\n };\n\n /**\n * Decodes an UnixTime message from the specified reader or buffer.\n * @function decode\n * @memberof UnixTime\n * @static\n * @param {$protobuf.Reader|Uint8Array} r Reader or buffer to decode from\n * @param {number} [l] Message length if known beforehand\n * @returns {UnixTime} UnixTime\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n UnixTime.decode = function decode(r, l) {\n if (!(r instanceof $Reader))\n r = $Reader.create(r);\n var c = l === undefined ? r.len : r.pos + l, m = new $root.UnixTime();\n while (r.pos < c) {\n var t = r.uint32();\n switch (t >>> 3) {\n case 1:\n m.Seconds = r.int64();\n break;\n case 2:\n m.FractionalNanoseconds = r.fixed32();\n break;\n default:\n r.skipType(t & 7);\n break;\n }\n }\n if (!m.hasOwnProperty(\"Seconds\"))\n throw $util.ProtocolError(\"missing required 'Seconds'\", { instance: m });\n return m;\n };\n\n /**\n * Creates an UnixTime message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof UnixTime\n * @static\n * @param {Object.<string,*>} d Plain object\n * @returns {UnixTime} UnixTime\n */\n UnixTime.fromObject = function fromObject(d) {\n if (d instanceof $root.UnixTime)\n return d;\n var m = new $root.UnixTime();\n if (d.Seconds != null) {\n if ($util.Long)\n (m.Seconds = $util.Long.fromValue(d.Seconds)).unsigned = false;\n else if (typeof d.Seconds === \"string\")\n m.Seconds = parseInt(d.Seconds, 10);\n else if (typeof d.Seconds === \"number\")\n m.Seconds = d.Seconds;\n else if (typeof d.Seconds === \"object\")\n m.Seconds = new $util.LongBits(d.Seconds.low >>> 0, d.Seconds.high >>> 0).toNumber();\n }\n if (d.FractionalNanoseconds != null) {\n m.FractionalNanoseconds = d.FractionalNanoseconds >>> 0;\n }\n return m;\n };\n\n /**\n * Creates a plain object from an UnixTime message. Also converts values to other types if specified.\n * @function toObject\n * @memberof UnixTime\n * @static\n * @param {UnixTime} m UnixTime\n * @param {$protobuf.IConversionOptions} [o] Conversion options\n * @returns {Object.<string,*>} Plain object\n */\n UnixTime.toObject = function toObject(m, o) {\n if (!o)\n o = {};\n var d = {};\n if (o.defaults) {\n if ($util.Long) {\n var n = new $util.Long(0, 0, false);\n d.Seconds = o.longs === String ? n.toString() : o.longs === Number ? n.toNumber() : n;\n } else\n d.Seconds = o.longs === String ? \"0\" : 0;\n d.FractionalNanoseconds = 0;\n }\n if (m.Seconds != null && m.hasOwnProperty(\"Seconds\")) {\n if (typeof m.Seconds === \"number\")\n d.Seconds = o.longs === String ? String(m.Seconds) : m.Seconds;\n else\n d.Seconds = o.longs === String ? $util.Long.prototype.toString.call(m.Seconds) : o.longs === Number ? new $util.LongBits(m.Seconds.low >>> 0, m.Seconds.high >>> 0).toNumber() : m.Seconds;\n }\n if (m.FractionalNanoseconds != null && m.hasOwnProperty(\"FractionalNanoseconds\")) {\n d.FractionalNanoseconds = m.FractionalNanoseconds;\n }\n return d;\n };\n\n /**\n * Converts this UnixTime to JSON.\n * @function toJSON\n * @memberof UnixTime\n * @instance\n * @returns {Object.<string,*>} JSON object\n */\n UnixTime.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n return UnixTime;\n})();\n\nexport const Metadata = $root.Metadata = (() => {\n\n /**\n * Properties of a Metadata.\n * @exports IMetadata\n * @interface IMetadata\n * @property {string|null} [MimeType] Metadata MimeType\n */\n\n /**\n * Constructs a new Metadata.\n * @exports Metadata\n * @classdesc Represents a Metadata.\n * @implements IMetadata\n * @constructor\n * @param {IMetadata=} [p] Properties to set\n */\n function Metadata(p) {\n if (p)\n for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)\n if (p[ks[i]] != null)\n this[ks[i]] = p[ks[i]];\n }\n\n /**\n * Metadata MimeType.\n * @member {string} MimeType\n * @memberof Metadata\n * @instance\n */\n Metadata.prototype.MimeType = \"\";\n\n /**\n * Encodes the specified Metadata message. Does not implicitly {@link Metadata.verify|verify} messages.\n * @function encode\n * @memberof Metadata\n * @static\n * @param {IMetadata} m Metadata message or plain object to encode\n * @param {$protobuf.Writer} [w] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n Metadata.encode = function encode(m, w) {\n if (!w)\n w = $Writer.create();\n if (m.MimeType != null && Object.hasOwnProperty.call(m, \"MimeType\"))\n w.uint32(10).string(m.MimeType);\n return w;\n };\n\n /**\n * Decodes a Metadata message from the specified reader or buffer.\n * @function decode\n * @memberof Metadata\n * @static\n * @param {$protobuf.Reader|Uint8Array} r Reader or buffer to decode from\n * @param {number} [l] Message length if known beforehand\n * @returns {Metadata} Metadata\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n Metadata.decode = function decode(r, l) {\n if (!(r instanceof $Reader))\n r = $Reader.create(r);\n var c = l === undefined ? r.len : r.pos + l, m = new $root.Metadata();\n while (r.pos < c) {\n var t = r.uint32();\n switch (t >>> 3) {\n case 1:\n m.MimeType = r.string();\n break;\n default:\n r.skipType(t & 7);\n break;\n }\n }\n return m;\n };\n\n /**\n * Creates a Metadata message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof Metadata\n * @static\n * @param {Object.<string,*>} d Plain object\n * @returns {Metadata} Metadata\n */\n Metadata.fromObject = function fromObject(d) {\n if (d instanceof $root.Metadata)\n return d;\n var m = new $root.Metadata();\n if (d.MimeType != null) {\n m.MimeType = String(d.MimeType);\n }\n return m;\n };\n\n /**\n * Creates a plain object from a Metadata message. Also converts values to other types if specified.\n * @function toObject\n * @memberof Metadata\n * @static\n * @param {Metadata} m Metadata\n * @param {$protobuf.IConversionOptions} [o] Conversion options\n * @returns {Object.<string,*>} Plain object\n */\n Metadata.toObject = function toObject(m, o) {\n if (!o)\n o = {};\n var d = {};\n if (o.defaults) {\n d.MimeType = \"\";\n }\n if (m.MimeType != null && m.hasOwnProperty(\"MimeType\")) {\n d.MimeType = m.MimeType;\n }\n return d;\n };\n\n /**\n * Converts this Metadata to JSON.\n * @function toJSON\n * @memberof Metadata\n * @instance\n * @returns {Object.<string,*>} JSON object\n */\n Metadata.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n return Metadata;\n})();\n\nexport { $root as default };\n","// @ts-nocheck\n\n/**\n * This is file is shadowed by api.ts and only exists so JS could import it to\n * refer to types without encountering runtime errors\n * @see https://github.com/microsoft/TypeScript/issues/41825\n */\n\nimport { Data } from \"../gen/unixfs.js\"\nexport const NodeType = Data.DataType\n","import * as PB from \"@ipld/dag-pb\"\nimport * as UnixFS from \"./unixfs.js\"\nimport { NodeType } from \"./unixfs.js\"\nimport { Data } from \"../gen/unixfs.js\"\n\nexport * from \"./unixfs.js\"\n\n/** @type {ReadonlyArray<any>} */\nconst EMPTY = Object.freeze([])\nconst EMPTY_BUFFER = new Uint8Array(0)\n\nconst BLANK = Object.freeze({})\nexport const DEFAULT_FILE_MODE = parseInt(\"0644\", 8)\nexport const DEFAULT_DIRECTORY_MODE = parseInt(\"0755\", 8)\n\nexport const code = PB.code\nexport const name = \"UnixFS\"\n\n/**\n * @param {UnixFS.IData} data\n * @param {ReadonlyArray<UnixFS.PBLink>} links\n */\nconst encodePB = (data, links) => {\n Object(globalThis).debug && console.log({ data, links })\n\n return PB.encode(\n // We run through prepare as links need to be sorted by name which it will\n // do.\n PB.prepare({\n Data: Data.encode(data).finish(),\n // We can cast to mutable array as we know no mutation occurs there\n Links:\n /** @type {PB.PBLink[]} */ (links),\n })\n )\n}\n\n/**\n * @param {Uint8Array} content\n * @returns {UnixFS.Raw}\n */\nexport const createRaw = content => ({\n type: NodeType.Raw,\n content,\n})\n\n/**\n * @param {UnixFS.Metadata} [metadata]\n * @returns {UnixFS.SimpleFile}\n */\nexport const createEmptyFile = metadata =>\n createSimpleFile(EMPTY_BUFFER, metadata)\n\n/**\n * @param {Uint8Array} content\n * @param {UnixFS.Metadata} [metadata]\n * @returns {UnixFS.SimpleFile}\n */\nexport const createSimpleFile = (content, metadata) => ({\n type: NodeType.File,\n layout: \"simple\",\n content,\n metadata: decodeMetadata(metadata),\n})\n\n/**\n * @param {Uint8Array} content\n * @returns {UnixFS.FileChunk}\n */\nexport const createFileChunk = content => ({\n type: NodeType.File,\n layout: \"simple\",\n content,\n})\n\n/**\n * @param {UnixFS.FileLink[]} parts\n * @param {UnixFS.Metadata} [metadata]\n * @returns {UnixFS.AdvancedFile}\n */\nexport const createAdvancedFile = (parts, metadata) => ({\n type: NodeType.File,\n layout: \"advanced\",\n parts,\n metadata: decodeMetadata(metadata),\n})\n\n/**\n * @param {UnixFS.FileLink[]} parts\n * @returns {UnixFS.FileShard}\n */\nexport const createFileShard = parts => ({\n type: NodeType.File,\n layout: \"advanced\",\n parts,\n})\n\n/**\n * @deprecated\n * @param {Uint8Array} content\n * @param {UnixFS.FileLink[]} parts\n * @param {UnixFS.Metadata} [metadata]\n * @returns {UnixFS.ComplexFile}\n */\nexport const createComplexFile = (content, parts, metadata) => ({\n type: NodeType.File,\n layout: \"complex\",\n content,\n parts,\n metadata: decodeMetadata(metadata),\n})\n\n/**\n * @param {UnixFS.DirectoryEntryLink[]} entries\n * @param {UnixFS.Metadata} [metadata]\n * @returns {UnixFS.FlatDirectory}\n */\nexport const createFlatDirectory = (entries, metadata) => ({\n type: NodeType.Directory,\n metadata: decodeMetadata(metadata),\n entries,\n})\n\n/**\n * @param {UnixFS.ShardedDirectoryLink[]} entries\n * @param {Uint8Array} bitfield\n * @param {number} fanout\n * @param {number} hashType\n * @param {UnixFS.Metadata} [metadata]\n * @returns {UnixFS.ShardedDirectory}\n */\nexport const createShardedDirectory = (\n entries,\n bitfield,\n fanout,\n hashType,\n metadata = BLANK\n) => ({\n type: NodeType.HAMTShard,\n bitfield,\n fanout: readFanout(fanout),\n hashType: readInt(hashType),\n entries,\n metadata: decodeMetadata(metadata),\n})\n\n/**\n * @param {UnixFS.ShardedDirectoryLink[]} entries\n * @param {Uint8Array} bitfield\n * @param {number} fanout\n * @param {number} hashType\n * @returns {UnixFS.DirectoryShard}\n */\nexport const createDirectoryShard = (entries, bitfield, fanout, hashType) => ({\n type: NodeType.HAMTShard,\n bitfield,\n fanout: readFanout(fanout),\n hashType: readInt(hashType),\n entries,\n})\n\n/**\n *\n * @param {Uint8Array} content\n * @returns {UnixFS.ByteView<UnixFS.Raw>}\n */\nexport const encodeRaw = content =>\n encodePB(\n {\n Type: NodeType.Raw,\n // TODO:\n Data: content.byteLength > 0 ? content : undefined,\n filesize: content.byteLength,\n // @ts-ignore\n blocksizes: EMPTY,\n },\n []\n )\n\n/**\n * @param {UnixFS.File|UnixFS.FileChunk|UnixFS.FileShard} node\n * @param {boolean} [ignoreMetadata]\n * @returns {UnixFS.ByteView<UnixFS.SimpleFile|UnixFS.AdvancedFile|UnixFS.ComplexFile>}\n */\nexport const encodeFile = (node, ignoreMetadata = false) => {\n const metadata = ignoreMetadata ? BLANK : Object(node).metadata\n switch (node.layout) {\n case \"simple\":\n return encodeSimpleFile(node.content, metadata)\n case \"advanced\":\n return encodeAdvancedFile(node.parts, metadata)\n case \"complex\":\n return encodeComplexFile(node.content, node.parts, metadata)\n default:\n throw new TypeError(\n `File with unknown layout \"${Object(node).layout}\" was passed`\n )\n }\n}\n\n/**\n * @param {Uint8Array} content\n * @returns {UnixFS.ByteView<UnixFS.FileChunk>}\n */\nexport const encodeFileChunk = content => encodeSimpleFile(content, BLANK)\n\n/**\n * @param {ReadonlyArray<UnixFS.FileLink>} parts\n * @returns {UnixFS.ByteView<UnixFS.FileShard>}\n */\nexport const encodeFileShard = parts =>\n encodePB(\n {\n Type: NodeType.File,\n blocksizes: parts.map(contentByteLength),\n filesize: cumulativeContentByteLength(parts),\n },\n parts.map(encodeLink)\n )\n\n/**\n * @param {ReadonlyArray<UnixFS.FileLink>} parts\n * @param {UnixFS.Metadata} [metadata]\n * @returns {UnixFS.ByteView<UnixFS.AdvancedFile>}\n */\nexport const encodeAdvancedFile = (parts, metadata = BLANK) =>\n encodePB(\n {\n Type: NodeType.File,\n blocksizes: parts.map(contentByteLength),\n filesize: cumulativeContentByteLength(parts),\n\n ...encodeMetadata(metadata),\n },\n parts.map(encodeLink)\n )\n\n/**\n * @param {UnixFS.DAGLink} dag\n * @returns {UnixFS.PBLink}\n */\nexport const encodeLink = dag => ({\n Name: \"\",\n Tsize: dag.dagByteLength,\n // @ts-ignore - @see https://github.com/multiformats/js-multiformats/pull/161\n Hash: dag.cid,\n})\n\n/**\n * @param {Uint8Array} content\n * @param {UnixFS.Metadata} [metadata]\n * @returns {UnixFS.ByteView<UnixFS.SimpleFile>}\n */\n\nexport const encodeSimpleFile = (content, metadata = BLANK) =>\n encodePB(\n {\n Type: NodeType.File,\n // adding empty file to both go-ipfs and js-ipfs produces block in\n // which `Data` is omitted but filesize and blocksizes are present.\n // For the sake of hash consistency we do the same.\n Data: content.byteLength > 0 ? content : undefined,\n filesize: content.byteLength,\n blocksizes: [],\n ...encodeMetadata(metadata),\n },\n []\n )\n\n/**\n *\n * @param {Uint8Array} content\n * @param {ReadonlyArray<UnixFS.FileLink>} parts\n * @param {UnixFS.Metadata} [metadata]\n * @returns {UnixFS.ByteView<UnixFS.ComplexFile>}\n */\nexport const encodeComplexFile = (content, parts, metadata = BLANK) =>\n encodePB(\n {\n Type: NodeType.File,\n Data: content,\n filesize: content.byteLength + cumulativeContentByteLength(parts),\n blocksizes: parts.map(contentByteLength),\n },\n parts.map(encodeLink)\n )\n\n/**\n * @param {UnixFS.FlatDirectory} node\n * @returns {UnixFS.ByteView<UnixFS.FlatDirectory>}\n */\nexport const encodeDirectory = node =>\n encodePB(\n {\n Type: node.type,\n ...encodeDirectoryMetadata(node.metadata || BLANK),\n },\n node.entries.map(encodeNamedLink)\n )\n\n/**\n * @param {UnixFS.ShardedDirectory|UnixFS.DirectoryShard} node\n * @returns {UnixFS.ByteView<UnixFS.ShardedDirectory>}\n */\nexport const encodeHAMTShard = ({\n bitfield,\n fanout,\n hashType,\n entries,\n metadata = BLANK,\n}) =>\n encodePB(\n {\n Type: NodeType.HAMTShard,\n Data: bitfield.byteLength > 0 ? bitfield : undefined,\n fanout: readFanout(fanout),\n hashType: readInt(hashType),\n\n ...encodeDirectoryMetadata(metadata),\n },\n entries.map(encodeNamedLink)\n )\n\n/**\n * @param {number} n\n * @returns {number}\n */\nconst readFanout = n => {\n if (Math.log2(n) % 1 === 0) {\n return n\n } else {\n throw new TypeError(\n `Expected hamt size to be a power of two instead got ${n}`\n )\n }\n}\n\n/**\n * @param {number} n\n * @returns {number}\n */\n\nconst readInt = n => {\n if (Number.isInteger(n)) {\n return n\n } else {\n throw new TypeError(`Expected an integer value instead got ${n}`)\n }\n}\n\n/**\n * @param {Uint8Array} bytes\n */\nconst readData = bytes => (bytes.byteLength > 0 ? bytes : undefined)\n\n/**\n * @param {Uint8Array} path\n * @param {UnixFS.Metadata} [metadata]\n * @returns {UnixFS.Symlink}\n */\nexport const createSymlink = (path, metadata = BLANK) => ({\n type: NodeType.Symlink,\n content: path,\n metadata: decodeMetadata(metadata),\n})\n\n/**\n * @param {UnixFS.Symlink} node\n * @param {boolean} [ignoreMetadata]\n * @returns {UnixFS.ByteView<UnixFS.Symlink>}\n */\nexport const encodeSymlink = (node, ignoreMetadata = false) => {\n const metadata = ignoreMetadata ? BLANK : Object(node).metadata\n // We do not include filesize on symlinks because that is what go-ipfs does\n // when doing `ipfs add mysymlink`. js-ipfs on the other hand seems to store\n // it, here we choose to follow go-ipfs\n // @see https://explore.ipld.io/#/explore/QmPZ1CTc5fYErTH2XXDGrfsPsHicYXtkZeVojGycwAfm3v\n // @see https://github.com/ipfs/js-ipfs-unixfs/issues/195\n return encodePB(\n {\n Type: NodeType.Symlink,\n Data: node.content,\n ...encodeMetadata(metadata || BLANK),\n },\n []\n )\n}\n\n/**\n * @template {UnixFS.Node} T\n * @param {T} node\n * @param {boolean} root\n */\nexport const encode = (node, root = true) => {\n switch (node.type) {\n case NodeType.Raw:\n return encodeRaw(node.content)\n case NodeType.File:\n return encodeFile(node)\n case NodeType.Directory:\n return encodeDirectory(node)\n case NodeType.HAMTShard:\n return encodeHAMTShard(node)\n case NodeType.Symlink:\n return encodeSymlink(node)\n default:\n throw new Error(`Unknown node type ${Object(node).type}`)\n }\n}\n\n/**\n * @param {UnixFS.ByteView<UnixFS.Node>} bytes\n * @returns {UnixFS.Node}\n */\nexport const decode = bytes => {\n const pb = PB.decode(bytes)\n const message = Data.decode(/** @type {Uint8Array} */ (pb.Data))\n\n const {\n Type: type,\n Data: data,\n mtime,\n mode,\n blocksizes,\n ...rest\n } = Data.toObject(message, {\n defaults: false,\n arrays: true,\n longs: Number,\n objects: false,\n })\n const metadata = {\n ...(mode && { mode }),\n ...decodeMtime(mtime),\n }\n /** @type {UnixFS.PBLink[]} */\n const links = pb.Links\n\n switch (message.Type) {\n case NodeType.Raw:\n return createRaw(data)\n case NodeType.File:\n if (links.length === 0) {\n return new SimpleFileView(data, metadata)\n } else if (data.byteLength === 0) {\n return new AdvancedFileView(\n decodeFileLinks(rest.blocksizes, links),\n metadata\n )\n } else {\n return new ComplexFileView(\n data,\n decodeFileLinks(rest.blocksizes, links),\n metadata\n )\n }\n case NodeType.Directory:\n return createFlatDirectory(decodeDirectoryLinks(links), metadata)\n case NodeType.HAMTShard:\n return createShardedDirectory(\n decodeDirectoryLinks(links),\n data || EMPTY_BUFFER,\n rest.fanout,\n rest.hashType,\n metadata\n )\n case NodeType.Symlink:\n return createSymlink(data, metadata)\n default:\n throw new TypeError(`Unsupported node type ${message.Type}`)\n }\n}\n\n/**\n * @param {UnixFS.UnixTime|undefined} mtime\n */\nconst decodeMtime = mtime =>\n mtime == null\n ? undefined\n : {\n mtime: { secs: mtime.Seconds, nsecs: mtime.FractionalNanoseconds || 0 },\n }\n\n/**\n * @param {NodeType} type\n * @param {number[]|undefined} blocksizes\n */\nconst decodeBlocksizes = (type, blocksizes) => {\n switch (type) {\n case NodeType.File:\n return blocksizes && blocksizes.length > 0 ? { blocksizes } : undefined\n default:\n return undefined\n }\n}\n\n/**\n *\n * @param {number[]} blocksizes\n * @param {UnixFS.PBLink[]} links\n * @returns {UnixFS.FileLink[]}\n */\n\nconst decodeFileLinks = (blocksizes, links) => {\n const parts = []\n const length = blocksizes.length\n let n = 0\n while (n < length) {\n parts.push(\n /** @type {UnixFS.FileLink} */ ({\n cid: links[n].Hash,\n dagByteLength: links[n].Tsize || 0,\n contentByteLength: blocksizes[n],\n })\n )\n }\n return parts\n}\n\n/**\n * @param {UnixFS.PBLink[]} links\n * @returns {UnixFS.DirectoryEntryLink[]}\n */\nconst decodeDirectoryLinks = links =>\n links.map(\n link =>\n /** @type {UnixFS.DirectoryEntryLink} */ ({\n cid: link.Hash,\n name: link.Name || \"\",\n dagByteLength: link.Tsize || 0,\n })\n )\n\n/**\n * @param {ReadonlyArray<UnixFS.FileLink>} links\n * @returns {number}\n */\nexport const cumulativeContentByteLength = links =>\n links.reduce((size, link) => size + link.contentByteLength, 0)\n\n/**\n * @param {Uint8Array} root\n * @param {ReadonlyArray<UnixFS.DAGLink>} links\n * @returns {number}\n */\nexport const cumulativeDagByteLength = (root, links) =>\n links.reduce((size, link) => size + link.dagByteLength, root.byteLength)\n\n/**\n *\n * @param {UnixFS.FileLink} link\n */\nconst contentByteLength = link => link.contentByteLength\n\n/**\n * @param {UnixFS.NamedDAGLink<unknown>} link\n * @returns {UnixFS.PBLink}\n */\nconst encodeNamedLink = ({ name, dagByteLength, cid }) => ({\n Name: name,\n Tsize: dagByteLength,\n Hash: cid,\n})\n\n/**\n * @param {UnixFS.Metadata} metadata\n */\nexport const encodeDirectoryMetadata = metadata =>\n encodeMetadata(metadata, DEFAULT_DIRECTORY_MODE)\n\n/**\n * @param {UnixFS.Metadata} metadata\n * @param {UnixFS.Mode} defaultMode\n */\nexport const encodeMetadata = (\n { mode, mtime },\n defaultMode = DEFAULT_FILE_MODE\n) => ({\n mode: mode != null ? encodeMode(mode, defaultMode) : undefined,\n mtime: mtime != null ? encodeMTime(mtime) : undefined,\n})\n\n/**\n * @param {UnixFS.Metadata} [data]\n */\nexport const decodeMetadata = data =>\n data == null\n ? BLANK\n : {\n ...(data.mode == null ? undefined : { mode: decodeMode(data.mode) }),\n ...(data.mtime == null ? undefined : { mtime: data.mtime }),\n }\n\n/**\n * @param {UnixFS.MTime} mtime\n */\nconst encodeMTime = mtime => {\n return mtime == null\n ? undefined\n : mtime.nsecs !== 0\n ? { Seconds: mtime.secs, FractionalNanoseconds: mtime.nsecs }\n : { Seconds: mtime.secs }\n}\n\n/**\n * @param {number} specifiedMode\n * @param {number} defaultMode\n */\nexport const encodeMode = (specifiedMode, defaultMode) => {\n const mode = specifiedMode == null ? undefined : decodeMode(specifiedMode)\n return mode === defaultMode || mode == null ? undefined : mode\n}\n\n/**\n * @param {UnixFS.Mode} mode\n * @returns {UnixFS.Mode}\n */\nconst decodeMode = mode => (mode & 0xfff) | (mode & 0xfffff000)\n\n/**\n * @param {{content?: Uint8Array, parts?: ReadonlyArray<UnixFS.FileLink>, metadata?: UnixFS.Metadata }} node\n * @returns {UnixFS.SimpleFile|UnixFS.AdvancedFile|UnixFS.ComplexFile}\n */\nexport const matchFile = ({\n content = EMPTY_BUFFER,\n parts = EMPTY,\n metadata = BLANK,\n ...rest\n}) => {\n if (parts.length === 0) {\n return new SimpleFileView(content, metadata)\n } else if (content.byteLength === 0) {\n return new AdvancedFileView(parts, metadata)\n } else {\n return new ComplexFileView(content, parts, metadata)\n }\n}\n\n/**\n * @implements {UnixFS.SimpleFile}\n */\nclass SimpleFileView {\n /**\n * @param {Uint8Array} content\n * @param {UnixFS.Metadata} metadata\n */\n constructor(content, metadata) {\n this.content = content\n this.metadata = metadata\n /**\n * @readonly\n * @type {\"simple\"}\n */\n this.layout = \"simple\"\n /**\n * @readonly\n * @type {NodeType.File}\n */\n this.type = NodeType.File\n }\n\n get filesize() {\n return this.content.byteLength\n }\n\n encode() {\n return encodeSimpleFile(this.content, this.metadata)\n }\n}\n\n/**\n * @implements {UnixFS.AdvancedFile}\n */\nclass AdvancedFileView {\n /**\n * @param {ReadonlyArray<UnixFS.FileLink>} parts\n * @param {UnixFS.Metadata} metadata\n */\n constructor(parts, metadata) {\n this.parts = parts\n this.metadata = metadata\n }\n /** @type {\"advanced\"} */\n get layout() {\n return \"advanced\"\n }\n\n /**\n * @returns {NodeType.File}\n */\n get type() {\n return NodeType.File\n }\n get fileSize() {\n return cumulativeContentByteLength(this.parts)\n }\n get blockSizes() {\n return this.parts.map(contentByteLength)\n }\n\n encode() {\n return encodeAdvancedFile(this.parts, this.metadata)\n }\n}\n\n/**\n * @implements {UnixFS.ComplexFile}\n */\nclass ComplexFileView {\n /**\n * @param {Uint8Array} content\n * @param {ReadonlyArray<UnixFS.FileLink>} parts\n * @param {UnixFS.Metadata} metadata\n */\n constructor(content, parts, metadata) {\n this.content = content\n this.parts = parts\n this.metadata = metadata\n }\n /** @type {\"complex\"} */\n get layout() {\n return \"complex\"\n }\n\n /**\n * @returns {NodeType.File}\n */\n get type() {\n return NodeType.File\n }\n get fileSize() {\n return this.content.byteLength + cumulativeContentByteLength(this.parts)\n }\n get blockSizes() {\n return this.parts.map(contentByteLength)\n }\n\n encode() {\n return encodeComplexFile(this.content, this.parts, this.metadata)\n }\n}\n\n/**\n * @param {UnixFS.File|UnixFS.Raw|UnixFS.FileChunk|UnixFS.FileShard|UnixFS.Symlink} node\n * @returns {number}\n */\nexport const filesize = node => {\n switch (node.type) {\n case NodeType.Raw:\n case NodeType.Symlink:\n return node.content.byteLength\n case NodeType.File:\n switch (node.layout) {\n case \"simple\":\n return node.content.byteLength\n case \"advanced\":\n return cumulativeContentByteLength(node.parts)\n case \"complex\":\n return (\n node.content.byteLength + cumulativeContentByteLength(node.parts)\n )\n }\n default:\n return 0\n }\n}\n","// This is file is only here to allow importing type namespace\n// from JS.\nexport * from \"./lib.js\"\n","import * as Task from \"./task.js\"\nexport * from \"./task.js\"\n\n/**\n * Turns a task (that never fails or sends messages) into an effect of it's\n * result.\n *\n * @template T\n * @param {Task.Task<T, never>} task\n * @returns {Task.Effect<T>}\n */\nexport const effect = function* (task) {\n const message = yield* task\n yield* send(message)\n}\n\n/**\n * Gets a handle to the task that invoked it. Useful when task needs to\n * suspend execution until some outside event occurs, in which case handle\n * can be used resume execution (see `suspend` code example for more details)\n *\n * @template T, M, X\n * @returns {Task.Task<Task.Controller<T, X, M>, never>}\n */\nexport function* current() {\n return /** @type {Task.Controller<T, X, M>} */ (yield CURRENT)\n}\n\n/**\n * Suspends the current task (task that invokes it), which can then be\n * resumed from another task or an outside event (e.g. `setTimeout` callback)\n * by calling the `resume` with an task's handle.\n *\n * Calling this in almost all cases is preceeded by call to `current()` in\n * order to obtain a `handle` which can be passed to `resume` function\n * to resume the execution.\n *\n * Note: This task never fails, although it may never resume either. However\n * you can utilize `finally` block to do a necessary cleanup in case execution\n * is aborted.\n *\n * @example\n * ```js\n * import { current, suspend, resume } from \"actor\"\n * function * sleep(duration) {\n * // get a reference to this task so we can resume it.\n * const self = yield * current()\n * // resume this task when timeout fires\n * const id = setTimeout(() => resume(self), duration)\n * try {\n * // suspend this task nothing below this line will run until task is\n * // resumed.\n * yield * suspend()\n * } finally {\n * // if task is aborted finally block will still run which given you\n * // chance to cleanup.\n * clearTimeout(id)\n * }\n * }\n * ```\n *\n * @returns {Task.Task<void, never>}\n */\nexport const suspend = function* () {\n yield SUSPEND\n}\n\n/**\n * Suspends execution for the given duration in milliseconds, after which\n * execution is resumed (unless it was aborted in the meantime).\n *\n * @example\n * ```js\n * function * demo() {\n * console.log(\"I'm going to take small nap\")\n * yield * sleep(200)\n * console.log(\"I am back to work\")\n * }\n * ```\n *\n * @param {number} [duration]\n * @returns {Task.Task<void, never>}\n */\nexport function* sleep(duration = 0) {\n const task = yield* current()\n const id = setTimeout(enqueue, duration, task)\n\n try {\n yield* suspend()\n } finally {\n clearTimeout(id)\n }\n}\n\n/**\n * Provides equivalent of `await` in async functions. Specifically it takes\n * a value that you can `await` on (that is `Promise<T>|T`) and suspends\n * execution until promise is settled. If promise succeeds execution is resumed\n * with `T` otherwise an error of type `X` is thrown (which is by default\n * `unknown` since promises do not encode error type).\n *\n * It is useful when you need to deal with potentially async set of operations\n * without having to check if thing is a promise at every step.\n *\n * Please note: This that execution is suspended even if given value is not a\n * promise, however scheduler will still resume it in the same tick of the event\n * loop after, just processing other scheduled tasks. This avoids problematic\n * race condititions that can otherwise occur when values are sometimes promises\n * and other times are not.\n *\n * @example\n * ```js\n * function * fetchJSON (url, options) {\n * const response = yield * wait(fetch(url, options))\n * const json = yield * wait(response.json())\n * return json\n * }\n * ```\n *\n * @template T, [X=unknown]\n * @param {Task.Await<T>} input\n * @returns {Task.Task<T, Error>}\n */\nexport const wait = function* (input) {\n const task = yield* current()\n if (isAsync(input)) {\n let failed = false\n /** @type {unknown} */\n let output = undefined\n input.then(\n value => {\n failed = false\n output = value\n enqueue(task)\n },\n error => {\n failed = true\n output = error\n enqueue(task)\n }\n )\n\n yield* suspend()\n if (failed) {\n throw output\n } else {\n return /** @type {T} */ (output)\n }\n } else {\n // This may seem redundunt but it is not, by enqueuing this task we allow\n // scheduler to perform other queued tasks first. This way many race\n // conditions can be avoided when values are sometimes promises and other\n // times aren't.\n // Unlike `await` however this will resume in the same tick.\n main(wake(task))\n yield* suspend()\n return input\n }\n}\n\n/**\n * @template T, X, M\n * @param {Task.Controller<T, X, M>} task\n * @returns {Task.Task<void, never, never>}\n */\nfunction* wake(task) {\n enqueue(task)\n}\n\n/**\n * Checks if value value is a promise (or it's lookalike).\n *\n * @template T\n * @param {any} node\n * @returns {node is PromiseLike<T>}\n */\n\nconst isAsync = node =>\n node != null &&\n typeof (/** @type {{then?:unknown}} */ (node).then) === \"function\"\n\n/**\n * Task that sends given message (or rather an effect producing this message).\n * Please note, that while you could use `yield message` instead, but you'd risk\n * having to deal with potential breaking changes if library internals change\n * in the future, which in fact may happen as anticipated improvements in\n * TS generator inference could enable replace need for `yield *`.\n *\n * @see https://github.com/microsoft/TypeScript/issues/43632\n *\n * @template T\n * @param {T} message\n * @returns {Task.Effect<T>}\n */\nexport const send = function* (message) {\n yield /** @type {Task.Message<T>} */ (message)\n}\n\n/**\n * Takes several effects and merges them into a single effect of tagged\n * variants so that their source could be identified via `type` field.\n *\n * @example\n * ```js\n * listen({\n * read: Task.effect(dbRead),\n * write: Task.effect(dbWrite)\n * })\n * ```\n *\n * @template {string} Tag\n * @template T\n * @param {{ [K in Tag]: Task.Effect<T> }} source\n * @returns {Task.Effect<Tagged<Tag, T>>}\n */\nexport const listen = function* (source) {\n /** @type {Task.Fork<void, never, Tagged<Tag, T>>[]} */\n const forks = []\n for (const entry of Object.entries(source)) {\n const [name, effect] = /** @type {[Tag, Task.Effect<T>]} */ (entry)\n if (effect !== NONE) {\n forks.push(yield* fork(tag(effect, name)))\n }\n }\n\n yield* group(forks)\n}\n\n/**\n * Takes several tasks and creates an effect of them all.\n *\n * @example\n * ```js\n * Task.effects([\n * dbRead,\n * dbWrite\n * ])\n * ```\n *\n * @template {string} Tag\n * @template T\n * @param {Task.Task<T, never>[]} tasks\n * @returns {Task.Effect<T>}\n */\n\nexport const effects = tasks =>\n tasks.length > 0 ? batch(tasks.map(effect)) : NONE\n\n/**\n * Takes several effects and combines them into a one.\n *\n * @template T\n * @param {Task.Effect<T>[]} effects\n * @returns {Task.Effect<T>}\n */\nexport function* batch(effects) {\n const forks = []\n for (const effect of effects) {\n forks.push(yield* fork(effect))\n }\n\n yield* group(forks)\n}\n\n/**\n * @template {string} Tag\n * @template T\n * @typedef {{type: Tag} & {[K in Tag]: T}} Tagged\n */\n/**\n * Tags an effect by boxing each event with an object that has `type` field\n * corresponding to given tag and same named field holding original message\n * e.g. given `nums` effect that produces numbers, `tag(nums, \"inc\")` would\n * create an effect that produces events like `{type:'inc', inc:1}`.\n *\n * @template {string} Tag\n * @template T, M, X\n * @param {Task.Task<T, X, M>} effect\n * @param {Tag} tag\n * @returns {Task.Task<T, X, Tagged<Tag, M>>}\n */\nexport const tag = (effect, tag) =>\n // @ts-ignore\n effect === NONE\n ? NONE\n : effect instanceof Tagger\n ? new Tagger([...effect.tags, tag], effect.source)\n : new Tagger([tag], effect)\n\n/**\n * @template {string} Tag\n * @template Success, Failure, Message\n *\n * @implements {Task.Task<Success, Failure, Tagged<Tag, Message>>}\n * @implements {Task.Controller<Success, Failure, Tagged<Tag, Message>>}\n */\nclass Tagger {\n /**\n * @param {Task.Task<Success, Failure, Message>} source\n * @param {string[]} tags\n */\n constructor(tags, source) {\n this.tags = tags\n this.source = source\n /** @type {Task.Controller<Success, Failure, Message>} */\n this.controller\n }\n /* c8 ignore next 3 */\n [Symbol.iterator]() {\n if (!this.controller) {\n this.controller = this.source[Symbol.iterator]()\n }\n return this\n }\n /**\n * @param {Task.TaskState<Success, Message>} state\n * @returns {Task.TaskState<Success, Tagged<Tag, Message>>}\n */\n box(state) {\n if (state.done) {\n return state\n } else {\n switch (state.value) {\n case SUSPEND:\n case CURRENT:\n return /** @type {Task.TaskState<Success, Tagged<Tag, Message>>} */ (\n state\n )\n default: {\n // Instead of boxing result at each transform step we perform in-place\n // mutation as we know nothing else is accessing this value.\n const tagged = /** @type {{ done: false, value: any }} */ (state)\n let { value } = tagged\n for (const tag of this.tags) {\n value = withTag(tag, value)\n }\n tagged.value = value\n return tagged\n }\n }\n }\n }\n /**\n *\n * @param {Task.Instruction<Message>} instruction\n */\n next(instruction) {\n return this.box(this.controller.next(instruction))\n }\n /**\n *\n * @param {Failure} error\n */\n throw(error) {\n return this.box(this.controller.throw(error))\n }\n /**\n * @param {Success} value\n */\n return(value) {\n return this.box(this.controller.return(value))\n }\n\n get [Symbol.toStringTag]() {\n return \"TaggedEffect\"\n }\n}\n\n/**\n * Returns empty `Effect`, that is produces no messages. Kind of like `[]` or\n * `\"\"` but for effects.\n *\n * @type {() => Task.Effect<never>}\n */\nexport const none = () => NONE\n\n/**\n * Takes iterable of tasks and runs them concurrently, returning array of\n * results in an order of tasks (not the order of completion). If any of the\n * tasks fail all the rest are aborted and error is throw into calling task.\n *\n * > This is basically equivalent of `Promise.all` except cancelation logic\n * because tasks unlike promises can be cancelled.\n *\n * @template T, X\n * @param {Iterable<Task.Task<T, X>>} tasks\n * @returns {Task.Task<T[], X>}\n */\nexport const all = function* (tasks) {\n const self = yield* current()\n\n /** @type {(id:number) => (value:T) => void} */\n const succeed = id => value => {\n delete forks[id]\n results[id] = value\n count -= 1\n if (count === 0) {\n enqueue(self)\n }\n }\n\n /** @type {(error:X) => void} */\n const fail = error => {\n for (const handle of forks) {\n if (handle) {\n enqueue(abort(handle, error))\n }\n }\n\n enqueue(abort(self, error))\n }\n\n /** @type {Task.Fork<void, never>[]} */\n let forks = []\n let count = 0\n for (const task of tasks) {\n forks.push(yield* fork(then(task, succeed(count++), fail)))\n }\n const results = new Array(count)\n\n if (count > 0) {\n yield* suspend()\n }\n\n return results\n}\n\n/**\n * @template {string} Tag\n * @template T\n * @param {Tag} tag\n * @param {Task.Message<T>} value\n */\nconst withTag = (tag, value) =>\n /** @type {Tagged<Tag, T>} */\n ({ type: tag, [tag]: value })\n\n/**\n * Kind of like promise.then which is handy when you want to extract result\n * from the given task from the outside.\n *\n * @template T, U, X, M\n * @param {Task.Task<T, X, M>} task\n * @param {(value:T) => U} resolve\n * @param {(error:X) => U} reject\n * @returns {Task.Task<U, never, M>}\n */\nexport function* then(task, resolve, reject) {\n try {\n return resolve(yield* task)\n } catch (error) {\n return reject(/** @type {X} */ (error))\n }\n}\n\n// Special control instructions recognized by a scheduler.\nconst CURRENT = Symbol(\"current\")\nconst SUSPEND = Symbol(\"suspend\")\n/** @typedef {typeof SUSPEND|typeof CURRENT} Control */\n\n/**\n * @template M\n * @param {Task.Instruction<M>} value\n * @returns {value is M}\n */\nexport const isMessage = value => {\n switch (value) {\n case SUSPEND:\n case CURRENT:\n return false\n default:\n return true\n }\n}\n\n/**\n * @template M\n * @param {Task.Instruction<M>} value\n * @returns {value is Control}\n */\nexport const isInstruction = value => !isMessage(value)\n\n/**\n * @template T, X, M\n * @implements {Task.TaskGroup<T, X, M>}\n */\nclass Group {\n /**\n * @template T, X, M\n * @param {Task.Controller<T, X, M>|Task.Fork<T, X, M>} member\n * @returns {Task.Group<T, X, M>}\n */\n static of(member) {\n return (\n /** @type {{group?:Task.TaskGroup<T, X, M>}} */ (member).group || MAIN\n )\n }\n\n /**\n * @template T, X, M\n * @param {(Task.Controller<T, X, M>|Task.Fork<T, X, M>) & {group?:Task.TaskGroup<T, X, M>}} member\n * @param {Task.TaskGroup<T, X, M>} group\n */\n static enqueue(member, group) {\n member.group = group\n group.stack.active.push(member)\n }\n /**\n * @param {Task.Controller<T, X, M>} driver\n * @param {Task.Controller<T, X, M>[]} [active]\n * @param {Set<Task.Controller<T, X, M>>} [idle]\n * @param {Task.Stack<T, X, M>} [stack]\n */\n constructor(\n driver,\n active = [],\n idle = new Set(),\n stack = new Stack(active, idle)\n ) {\n this.driver = driver\n this.parent = Group.of(driver)\n this.stack = stack\n this.id = ++ID\n }\n}\n\n/**\n * @template T, X, M\n * @implements {Task.Main<T, X, M>}\n */\nclass Main {\n constructor() {\n this.status = IDLE\n this.stack = new Stack()\n this.id = /** @type {0} */ (0)\n }\n}\n\n/**\n * @template T, X, M\n */\nclass Stack {\n /**\n * @param {Task.Controller<T, X, M>[]} [active]\n * @param {Set<Task.Controller<T, X, M>>} [idle]\n */\n constructor(active = [], idle = new Set()) {\n this.active = active\n this.idle = idle\n }\n\n /**\n *\n * @param {Task.Stack<unknown, unknown, unknown>} stack\n * @returns\n */\n static size({ active, idle }) {\n return active.length + idle.size\n }\n}\n\n/**\n * Starts a main task.\n *\n * @param {Task.Task<void, never>} task\n */\nexport const main = task => enqueue(task[Symbol.iterator]())\n\n/**\n * @template T, X, M\n * @param {Task.Controller<T, X, M>} task\n */\nconst enqueue = task => {\n let group = Group.of(task)\n group.stack.active.push(task)\n group.stack.idle.delete(task)\n\n // then walk up the group chain and unblock their driver tasks.\n while (group.parent) {\n const { idle, active } = group.parent.stack\n if (idle.has(group.driver)) {\n idle.delete(group.driver)\n active.push(group.driver)\n } else {\n // if driver was not blocked it must have been unblocked by\n // other task so stop there.\n break\n }\n\n group = group.parent\n }\n\n if (MAIN.status === IDLE) {\n MAIN.status = ACTIVE\n while (true) {\n try {\n for (const _message of step(MAIN)) {\n }\n MAIN.status = IDLE\n break\n } catch (_error) {\n // Top level task may crash and throw an error, but given this is a main\n // group we do not want to interupt other unrelated tasks, which is why\n // we discard the error and the task that caused it.\n MAIN.stack.active.shift()\n }\n }\n }\n}\n\n/**\n * @template T, X, M\n * @param {Task.Controller<T, X, M>} task\n */\nexport const resume = task => enqueue(task)\n\n/**\n * @template T, X, M\n * @param {Task.Group<T, X, M>} group\n */\n\nconst step = function* (group) {\n const { active } = group.stack\n let task = active[0]\n group.stack.idle.delete(task)\n while (task) {\n /** @type {Task.TaskState<T, M>} */\n let state = INIT\n // Keep processing insturctions until task is done, it send suspend request\n // or it's has been removed from the active queue.\n // ⚠️ Group changes require extra care so please make sure to understand\n // the detail here. It occurs when spawned task(s) are joined into a group\n // which will change the task driver, that is when `task === active[0]` will\n // became false and need to to drop the task immediately otherwise race\n // condition will occur due to task been driven by multiple concurrent\n // schedulers.\n loop: while (!state.done && task === active[0]) {\n const instruction = state.value\n switch (instruction) {\n // if task is suspended we add it to the idle list and break the loop\n // to move to a next task.\n case SUSPEND:\n group.stack.idle.add(task)\n break loop\n // if task requested a context (which is usually to suspend itself)\n // pass back a task reference and continue.\n case CURRENT:\n state = task.next(task)\n break\n default:\n // otherwise task sent a message which we yield to the driver and\n // continue\n state = task.next(\n yield /** @type {M & Task.Message<M>}*/ (instruction)\n )\n break\n }\n }\n\n // If task is complete, or got suspended we move to a next task\n active.shift()\n task = active[0]\n group.stack.idle.delete(task)\n }\n}\n\n/**\n * Executes given task concurrently with a current task (task that spawned it).\n * Spawned task is detached from the task that spawned it and it can outlive it\n * and / or fail without affecting a task that spawned it. If you need to wait\n * on concurrent task completion consider using `fork` instead which can be\n * later `joined`. If you just want a to block on task execution you can just\n * `yield* work()` directly instead.\n *\n * @param {Task.Task<void, never, never>} task\n * @returns {Task.Task<void, never>}\n */\nexport function* spawn(task) {\n main(task)\n}\n\n/**\n * Executes given task concurrently with current task (the task that initiated\n * fork). Froked task is detached from the task that created it and it can\n * outlive it and / or fail without affecting it. You do however get a handle\n * for the fork which could be used to `join` the task, in which case `joining`\n * task will block until fork finishes execution.\n *\n * This is also a primary interface for executing tasks from the outside of the\n * task context. Function returns `Fork` which implements `Promise` interface\n * so it could be awaited. Please note that calling `fork` does not really do\n * anything, it lazily starts execution when you either `await fork(work())`\n * from arbitray context or `yield* fork(work())` in anothe task context.\n *\n * @template T, X, M\n * @param {Task.Task<T, X, M>} task\n * @param {Task.ForkOptions} [options]\n * @returns {Task.Fork<T, X, M>}\n */\nexport const fork = (task, options) => new Fork(task, options)\n\n/**\n * Exits task succesfully with a given return value.\n *\n * @template T, M, X\n * @param {Task.Controller<T, M, X>} handle\n * @param {T} value\n * @returns {Task.Task<void, never>}\n */\nexport const exit = (handle, value) => conclude(handle, { ok: true, value })\n\n/**\n * Terminates task execution execution. Only takes task that produces no\n * result, if your task has non `void` return type you should use `exit` instead.\n *\n * @template M, X\n * @param {Task.Controller<void, X, M>} handle\n */\nexport const terminate = handle =>\n conclude(handle, { ok: true, value: undefined })\n\n/**\n * Aborts given task with an error. Task error type should match provided error.\n *\n * @template T, M, X\n * @param {Task.Controller<T, X, M>} handle\n * @param {X} [error]\n */\nexport const abort = (handle, error) => conclude(handle, { ok: false, error })\n\n/**\n * Aborts given task with an given error.\n *\n * @template T, M, X\n * @param {Task.Controller<T, X, M>} handle\n * @param {Task.Result<T, X>} result\n * @returns {Task.Task<void, never> & Task.Controller<void, never>}\n */\nfunction* conclude(handle, result) {\n try {\n const task = handle\n const state = result.ok\n ? task.return(result.value)\n : task.throw(result.error)\n\n if (!state.done) {\n if (state.value === SUSPEND) {\n const { idle } = Group.of(task).stack\n idle.add(task)\n } else {\n enqueue(task)\n }\n }\n } catch (error) {}\n}\n\n/**\n * Groups multiple forks togather and joins joins them with current task.\n *\n * @template T, X, M\n * @param {Task.Fork<T, X, M>[]} forks\n * @returns {Task.Task<void, X, M>}\n */\nexport function* group(forks) {\n // Abort eraly if there'se no work todo.\n if (forks.length === 0) return\n\n const self = yield* current()\n /** @type {Task.TaskGroup<T, X, M>} */\n const group = new Group(self)\n /** @type {Task.Failure<X>|null} */\n let failure = null\n\n for (const fork of forks) {\n const { result } = fork\n if (result) {\n if (!result.ok && !failure) {\n failure = result\n }\n continue\n }\n move(fork, group)\n }\n\n // Keep work looping until there is nom more work to be done\n try {\n if (failure) {\n throw failure.error\n }\n\n while (true) {\n yield* step(group)\n if (Stack.size(group.stack) > 0) {\n yield* suspend()\n } else {\n break\n }\n }\n } catch (error) {\n for (const task of group.stack.active) {\n yield* abort(task, error)\n }\n\n for (const task of group.stack.idle) {\n yield* abort(task, error)\n enqueue(task)\n }\n\n throw error\n }\n}\n\n/**\n * @template T, X, M\n * @param {Task.Fork<T, X, M>} fork\n * @param {Task.TaskGroup<T, X, M>} group\n */\nconst move = (fork, group) => {\n const from = Group.of(fork)\n if (from !== group) {\n const { active, idle } = from.stack\n const target = group.stack\n fork.group = group\n // If it is idle just move from one group to the other\n // and update the group task thinks it belongs to.\n if (idle.has(fork)) {\n idle.delete(fork)\n target.idle.add(fork)\n } else {\n const index = active.indexOf(fork)\n // If task is in the job queue, we move it to a target job queue. Moving\n // top task in the queue requires extra care so it does not end up\n // processed by two groups which would lead to race. For that reason\n // `step` loop checks for group changes on each turn.\n if (index >= 0) {\n active.splice(index, 1)\n target.active.push(fork)\n }\n // otherwise task is complete\n }\n }\n}\n\n/**\n * @template T, X, M\n * @param {Task.Fork<T, X, M>} fork\n * @returns {Task.Task<T, X, M>}\n */\nexport function* join(fork) {\n // If fork is still idle activate it.\n if (fork.status === IDLE) {\n yield* fork\n }\n\n if (!fork.result) {\n yield* group([fork])\n }\n\n const result = /** @type {Task.Result<T, X>} */ (fork.result)\n if (result.ok) {\n return result.value\n } else {\n throw result.error\n }\n}\n\n/**\n * @template T, X\n * @implements {Task.Future<T, X>}\n */\nclass Future {\n /**\n * @param {Task.StateHandler<T, X>} handler\n */\n constructor(handler) {\n this.handler = handler\n /**\n * @abstract\n * @type {Task.Result<T, X>|void}\n */\n this.result\n }\n /**\n * @type {Promise<T>}\n */\n get promise() {\n const { result } = this\n const promise =\n result == null\n ? new Promise((succeed, fail) => {\n this.handler.onsuccess = succeed\n this.handler.onfailure = fail\n })\n : result.ok\n ? Promise.resolve(result.value)\n : Promise.reject(result.error)\n Object.defineProperty(this, \"promise\", { value: promise })\n return promise\n }\n\n /**\n * @template U, [E=never]\n * @param {((value:T) => U | PromiseLike<U>)|undefined|null} [onresolve]\n * @param {((error:X) => E|PromiseLike<E>)|undefined|null} [onreject]\n * @returns {Promise<U|E>}\n */\n then(onresolve, onreject) {\n return this.activate().promise.then(onresolve, onreject)\n }\n /**\n * @template [U=never]\n * @param {(error:X) => U} onreject\n */\n catch(onreject) {\n return /** @type {Task.Future<T|U, never>} */ (\n this.activate().promise.catch(onreject)\n )\n }\n /**\n * @param {() => void} onfinally\n * @returns {Task.Future<T, X>}\n */\n finally(onfinally) {\n return /** @type {Task.Future<T, X>} */ (\n this.activate().promise.finally(onfinally)\n )\n }\n /**\n * @abstract\n */\n /* c8 ignore next 3 */\n activate() {\n return this\n }\n}\n\n/**\n * @template T, X, M\n * @implements {Task.Fork<T, X, M>}\n * @implements {Task.Controller<T, X, M>}\n * @implements {Task.Task<Task.Fork<T, X, M>, never>}\n * @implements {Task.Future<T, X>}\n * @extends {Future<T, X>}\n */\nclass Fork extends Future {\n /**\n * @param {Task.Task<T, X, M>} task\n * @param {Task.ForkOptions} [options]\n * @param {Task.StateHandler<T, X>} [handler]\n * @param {Task.TaskState<T, M>} [state]\n */\n constructor(task, options = BLANK, handler = {}, state = INIT) {\n super(handler)\n this.id = ++ID\n this.name = options.name || \"\"\n /** @type {Task.Task<T, X, M>} */\n this.task = task\n this.state = state\n this.status = IDLE\n /** @type {Task.Result<T, X>} */\n this.result\n this.handler = handler\n\n /** @type {Task.Controller<T, X, M>} */\n this.controller\n }\n\n *resume() {\n resume(this)\n }\n\n /**\n * @returns {Task.Task<T, X, M>}\n */\n join() {\n return join(this)\n }\n\n /**\n * @param {X} error\n */\n abort(error) {\n return abort(this, error)\n }\n /**\n * @param {T} value\n */\n exit(value) {\n return exit(this, value)\n }\n get [Symbol.toStringTag]() {\n return \"Fork\"\n }\n\n /**\n * @returns {Task.Controller<Task.Fork<T, X, M>, never, never>}\n */\n *[Symbol.iterator]() {\n return this.activate()\n }\n\n activate() {\n this.controller = this.task[Symbol.iterator]()\n this.status = ACTIVE\n enqueue(this)\n return this\n }\n\n /**\n * @private\n * @param {any} error\n * @returns {never}\n */\n panic(error) {\n this.result = { ok: false, error }\n this.status = FINISHED\n const { handler } = this\n if (handler.onfailure) {\n handler.onfailure(error)\n }\n\n throw error\n }\n\n /**\n * @private\n * @param {Task.TaskState<T, M>} state\n */\n step(state) {\n this.state = state\n if (state.done) {\n this.result = { ok: true, value: state.value }\n this.status = FINISHED\n const { handler } = this\n if (handler.onsuccess) {\n handler.onsuccess(state.value)\n }\n }\n\n return state\n }\n\n /**\n * @param {unknown} value\n */\n next(value) {\n try {\n return this.step(this.controller.next(value))\n } catch (error) {\n return this.panic(error)\n }\n }\n /**\n * @param {T} value\n */\n return(value) {\n try {\n return this.step(this.controller.return(value))\n } catch (error) {\n return this.panic(error)\n }\n }\n /**\n * @param {X} error\n */\n throw(error) {\n try {\n return this.step(this.controller.throw(error))\n } catch (error) {\n return this.panic(error)\n }\n }\n}\n\n/**\n * @template M\n * @param {Task.Effect<M>} init\n * @param {(message:M) => Task.Effect<M>} next\n * @returns {Task.Task<void, never, never>}\n */\nexport const loop = function* (init, next) {\n /** @type {Task.Controller<void, never, M>} */\n const controller = yield* current()\n const group = new Group(controller)\n Group.enqueue(init[Symbol.iterator](), group)\n\n while (true) {\n for (const message of step(group)) {\n Group.enqueue(next(message)[Symbol.iterator](), group)\n }\n\n if (Stack.size(group.stack) > 0) {\n yield* suspend()\n } else {\n break\n }\n }\n}\n\nlet ID = 0\n/** @type {Task.Status} */\nconst IDLE = \"idle\"\nconst ACTIVE = \"active\"\nconst FINISHED = \"finished\"\n/** @type {Task.TaskState<any, any>} */\nconst INIT = { done: false, value: CURRENT }\n\nconst BLANK = {}\n\n/** @type {Task.Effect<never>} */\nconst NONE = (function* none() {})()\n\n/** @type {Task.Main<any, any, any>} */\nconst MAIN = new Main()\n","function Indexed() {}\n\nObject.defineProperties(Indexed, {\n prototype: {\n value: new Proxy(Object.prototype, {\n /**\n * @param {object} target\n * @param {PropertyKey} property\n * @param {{get(key:PropertyKey): any}} receiver\n */\n get(target, property, receiver) {\n return typeof property === \"symbol\"\n ? Reflect.get(target, property, receiver)\n : receiver.get(property)\n },\n }),\n },\n})\n\nexport { Indexed }\n","import { Indexed } from \"./indexed.js\"\n\n/**\n * @typedef {{\n * readonly byteOffset: number\n * readonly byteLength: number\n * readonly segments: Uint8Array[]\n * }} BufferSlice\n */\n\n/** @typedef {BufferView} View */\nexport const empty = () => new BufferView()\n\n/**\n * @param {Uint8Array[]} segments\n * @param {number} byteOffset\n * @param {number} byteLength\n */\nexport const create = (\n segments,\n byteOffset = 0,\n byteLength = totalByteLength(segments)\n) => new BufferView(segments, byteOffset, byteLength)\n\n/**\n *\n * @param {Uint8Array[]} segments\n * @returns\n */\nconst totalByteLength = segments => {\n let byteLength = 0\n for (const segment of segments) {\n byteLength += segment.byteLength\n }\n return byteLength\n}\n\n/**\n * @param {BufferSlice} buffer\n * @param {number} [startOffset]\n * @param {number} [endOffset]\n */\nexport const slice = (\n buffer,\n startOffset = 0,\n endOffset = buffer.byteLength\n) => {\n const segments = []\n const start = startOffset < 0 ? buffer.byteLength - startOffset : startOffset\n const end = endOffset < 0 ? buffer.byteLength - endOffset : endOffset\n\n // If start at 0 offset and end is past buffer range it is effectively\n // as same buffer.\n if (start === 0 && end >= buffer.byteLength) {\n return buffer\n }\n\n // If range is not within the current buffer just create an empty slice.\n if (start > end || start > buffer.byteLength || end <= 0) {\n return empty()\n }\n\n let byteLength = 0\n let offset = 0\n for (const segment of buffer.segments) {\n const nextOffset = offset + segment.byteLength\n // Have not found a start yet\n if (byteLength === 0) {\n // If end offset is within the current segment we know start is also,\n // because it preceeds the end & we had not found start yet.\n // In such case we create a view with only single segment of bytes\n // in the range.\n if (end <= nextOffset) {\n const range = segment.subarray(start - offset, end - offset)\n segments.push(range)\n byteLength = range.byteLength\n break\n }\n // If start offeset falls with in current range (but not the end)\n // we save matching buffer slice and update byteLength.\n else if (start < nextOffset) {\n const range =\n start === offset ? segment : segment.subarray(start - offset)\n segments.push(range)\n byteLength = range.byteLength\n }\n }\n // Otherwise we already started collecting matching segments and are looking\n // for the end end of the slice. If it is with in the current range capture\n // the segment and create a view.\n else if (end <= nextOffset) {\n const range =\n end === nextOffset ? segment : segment.subarray(0, end - offset)\n segments.push(range)\n byteLength += range.byteLength\n break\n }\n // If end is past current range we just save the segment and continue.\n else {\n segments.push(segment)\n byteLength += segment.byteLength\n }\n\n offset = nextOffset\n }\n\n return new BufferView(segments, buffer.byteOffset + start, byteLength)\n}\n\n/**\n * @param {BufferSlice} buffer\n * @param {Uint8Array} part\n */\n\nexport const push = (buffer, part) => {\n if (part.byteLength > 0) {\n // We MUTATE here but that is ok because it is out of bound for the passed\n // buffer view so there will be no visible side effects.\n buffer.segments.push(part)\n return new BufferView(\n buffer.segments,\n buffer.byteOffset,\n buffer.byteLength + part.byteLength\n )\n } else {\n return buffer\n }\n}\n\n/**\n * @param {BufferSlice} buffer\n * @param {number} n\n */\nexport const get = (buffer, n) => {\n if (n < buffer.byteLength) {\n let offset = 0\n for (const segment of buffer.segments) {\n if (n < offset + segment.byteLength) {\n return segment[n - offset]\n } else {\n offset += segment.byteLength\n }\n }\n }\n\n return undefined\n}\n\n/**\n *\n * @param {BufferView} buffer\n * @param {Uint8Array} target\n * @param {number} byteOffset\n */\nexport const copyTo = (buffer, target, byteOffset) => {\n let offset = byteOffset\n for (const segment of buffer.segments) {\n target.set(segment, offset)\n offset += segment.byteLength\n }\n\n return target\n}\n\n/**\n *\n * @param {BufferView} buffer\n */\nexport function* iterate(buffer) {\n for (const part of buffer.segments) {\n yield* part\n }\n}\n\n/**\n * @extends {Indexed<number>}\n */\nclass BufferView extends Indexed {\n /**\n * @param {Uint8Array[]} segments\n * @param {number} byteOffset\n * @param {number} byteLength\n */\n constructor(segments = [], byteOffset = 0, byteLength = 0) {\n super()\n /** @hide */\n this.segments = segments\n /** @readonly */\n this.byteLength = byteLength\n /** @readonly */\n this.length = byteLength\n /** @readonly */\n this.byteOffset = byteOffset\n }\n\n [Symbol.iterator]() {\n return iterate(this)\n }\n\n /**\n * @param {number} [start]\n * @param {number} [end]\n */\n slice(start, end) {\n return /** @type {BufferView} */ (slice(this, start, end))\n }\n\n /**\n * @param {number} [start]\n * @param {number} [end]\n */\n subarray(start, end) {\n return /** @type {BufferView} */ (slice(this, start, end))\n }\n\n /**\n *\n * @param {Uint8Array} bytes\n */\n push(bytes) {\n return /** @type {BufferView} */ (push(this, bytes))\n }\n\n /**\n * @param {number} n\n */\n get(n) {\n return get(this, n)\n }\n\n /**\n *\n * @param {Uint8Array} target\n * @param {number} offset\n */\n copyTo(target, offset) {\n return copyTo(this, target, offset)\n }\n}\n","// @ts-nocheck\n\n/**\n * This is file is shadowed by api.ts and only exists so JS could import it to\n * refer to types without encountering runtime errors\n * @see https://github.com/microsoft/TypeScript/issues/41825\n */\n","/**\n * @param {string} reason\n * @returns {never}\n */\nexport const panic = reason => {\n throw new Error(reason)\n}\n\n/**\n * @param {{ raw: readonly string[] | ArrayLike<string>}} template\n * @param {never} [subject]\n * @param {unknown[]} substitutions\n * @returns {never}\n */\nexport const unreachable = (template, subject, ...substitutions) =>\n panic(String.raw(template, JSON.stringify(subject), ...substitutions))\n\nexport const EMPTY_BUFFER = new Uint8Array(0)\n/** @type {any[]} */\nexport const EMPTY = []\n","import * as BufferQueue from \"./chunker/buffer.js\"\nimport * as Chunker from \"./chunker/api.js\"\nimport { EMPTY } from \"../writer/util.js\"\nexport * from \"./chunker/api.js\"\n\n/**\n * @typedef {{\n * chunker: Chunker.Chunker\n * }} Config\n *\n *\n * @typedef {{\n * buffer: BufferQueue.View\n * config: Config\n * }} Chunker\n *\n * @typedef {Chunker & {chunks: Chunker.Chunk[]}} ChunkerWithChunks\n */\n\n/**\n * @param {Config} config\n * @returns {Chunker}\n */\nexport const open = config => ({\n config,\n buffer: BufferQueue.empty(),\n})\n\n/**\n * @param {Chunker} state\n * @param {Uint8Array} bytes\n * @returns {ChunkerWithChunks}\n */\nexport const write = (state, bytes) =>\n bytes.byteLength > 0\n ? split(state.config, state.buffer.push(bytes), false)\n : { ...state, chunks: EMPTY }\n\n/**\n * @param {Chunker} state\n * @returns {ChunkerWithChunks}\n */\nexport const close = state => split(state.config, state.buffer, true)\n\n/**\n * @param {Config} config\n * @param {BufferQueue.View} buffer\n * @param {boolean} end\n * @returns {ChunkerWithChunks}\n */\n\nexport const split = (config, buffer, end) => {\n const chunker = config.chunker\n const chunks = []\n\n let offset = 0\n for (const size of chunker.cut(chunker.context, buffer, end)) {\n // We may be splitting empty buffer in which case there will be no chunks\n // in it so we make sure that we do not emit empty buffer.\n if (size > 0) {\n const chunk = buffer.subarray(offset, offset + size)\n chunks.push(chunk)\n offset += size\n }\n }\n\n return { config, chunks, buffer: buffer.subarray(offset) }\n}\n","// @ts-nocheck\n\n/**\n * This is file is shadowed by api.ts and only exists so JS could import it to\n * refer to types without encountering runtime errors\n * @see https://github.com/microsoft/TypeScript/issues/41825\n */\n","import * as Layout from \"./api.js\"\nimport * as Queue from \"./queue/api.js\"\nexport * from \"./queue/api.js\"\n\n/**\n * @returns {Queue.Result}\n */\nexport const empty = () => ({\n mutable: false,\n needs: {},\n nodes: {},\n links: {},\n linked: [],\n})\n\nexport const mutable = () => ({\n mutable: true,\n needs: {},\n nodes: {},\n links: {},\n linked: EMPTY,\n})\n\n/**\n * Adds given layout node to the layout queue. If links for all of the node\n * children are available correspnoding linked node is added (removing links\n * form the queue) otherwise `nood` is added to the wait queue until all the\n * needed links are added.\n *\n *\n * @param {Layout.Branch} node\n * @param {Queue.Queue} queue\n * @returns {Queue.Result}\n */\nexport const addNode = (node, queue) => addNodes([node], queue)\n\n/**\n *\n * @param {Layout.Branch[]} newNodes\n * @param {Queue.Queue} input\n * @returns {Queue.Result}\n */\nexport const addNodes = (newNodes, input) => {\n let queue = patch(input, {})\n for (const node of newNodes) {\n const { ready, has, wants } = collect(node.children, queue.links)\n // If node isn't waiting on any of the children it's ready to be linked\n // so we add linked node diretly.\n if (wants.length === 0) {\n queue = patch(queue, {\n links: assign(undefined, has),\n linked: [{ id: node.id, links: ready }],\n })\n } else {\n queue = patch(queue, {\n needs: assign(node.id, wants),\n nodes: {\n [node.id]: {\n children: node.children,\n count: wants.length,\n },\n },\n })\n }\n }\n\n return queue\n}\n\n/**\n * Adds link to the queue. If queue contains a node that needs this link it gets\n * updated. Either it's gets linked (when it was blocked only on this link) or\n * it's want could is reduced. If no node needed this link it just gets stored\n * for the future node that will need it.\n *\n *\n * @param {Queue.NodeID} id\n * @param {Queue.Link} link\n * @param {Queue.Queue} queue\n * @returns {Queue.Result}\n */\n\nexport const addLink = (id, link, queue) => {\n const nodeID = queue.needs[id]\n const node = queue.nodes[nodeID]\n // We have node than needs this link.\n if (node != null) {\n // This is the only link it needed so we materialize the node and remove\n // links and needs associated with it.\n if (node.count === 1) {\n const { ready, has } = collect(node.children, {\n ...queue.links,\n [id]: link,\n })\n\n return patch(queue, {\n needs: { [id]: undefined },\n links: assign(undefined, has),\n nodes: { [nodeID]: undefined },\n linked: [{ id: nodeID, links: ready }],\n })\n }\n // If node needs more links we just reduce a want count and remove this\n // need.\n else {\n return patch(queue, {\n needs: { [id]: undefined },\n links: { [id]: link },\n nodes: {\n [nodeID]: {\n ...node,\n count: node.count - 1,\n },\n },\n })\n }\n }\n // If we have no one waiting for this link just add it to the queue\n else {\n return patch(queue, {\n links: { [id]: link },\n })\n }\n}\n\n/**\n *\n * @param {Queue.Queue} queue\n * @param {Queue.Delta} delta\n */\n\nconst patch = (queue, { needs, nodes, links, linked }) => {\n const result = queue.mutable ? queue : { ...queue }\n const original = queue.mutable ? BLANK : undefined\n\n if (needs) {\n result.needs = patchDict(queue.needs, needs, original)\n }\n\n if (nodes) {\n result.nodes = patchDict(queue.nodes, nodes, original)\n }\n\n if (links) {\n result.links = patchDict(queue.links, links, original)\n }\n\n result.linked = linked\n ? append(queue.linked || EMPTY, linked, EMPTY)\n : queue.linked || []\n\n return /** @type {Queue.Result} */ (result)\n}\n\n/**\n * @template V\n * @template {PropertyKey} K\n * @param {V} value\n * @param {K[]} keys\n * @returns {Record<K, V>}\n */\n\nconst assign = (value, keys) => {\n const delta = /** @type {Record<K, V>} */ ({})\n for (const key of keys) {\n delta[key] = value\n }\n\n return delta\n}\n\n/**\n * @template {PropertyKey} K\n * @template V\n * @param {Record<K, V>} target\n *\n * @param {Record<K, V|void>} delta\n * @param {Record<K, V>} original\n * @returns {Record<K, V>}\n */\n\nconst patchDict = (target, delta, original = target) => {\n const result = target === original ? { ...target } : target\n for (const entry of Object.entries(delta)) {\n const [id, value] = /** @type {[K, V|void]} */ (entry)\n if (value == null) {\n delete result[id]\n } else {\n result[id] = value\n }\n }\n\n return result\n}\n/**\n *\n * @param {Iterable<[Queue.NodeID, Queue.Link]>} entries\n * @param {Queue.Queue} queue\n * @returns {Queue.Queue}\n */\nexport const addLinks = (entries, queue) => {\n for (const [id, link] of entries) {\n queue = addLink(id, link, queue)\n }\n return queue\n}\n\n/**\n * @param {Queue.Queue} queue\n */\n\nexport const isEmpty = queue =>\n Object.keys(queue.nodes).length === 0 && Object.keys(queue.links).length === 0\n\n/**\n * @template T\n * @param {T[]} target\n * @param {T[]} items\n * @param {T[]} original\n */\nconst append = (target, items, original = target) => {\n if (target === original) {\n return [...target, ...items]\n } else {\n for (const item of items) {\n target.push(item)\n }\n return target\n }\n}\n\n/**\n * @param {Queue.NodeID[]} children\n * @param {Record<Queue.NodeID, Queue.Link>} source\n * @returns {{has:Queue.NodeID[], wants:Queue.NodeID[], ready:Queue.Link[]}}\n */\nconst collect = (children, source) => {\n const has = []\n const wants = []\n const ready = []\n for (const child of children) {\n const link = source[child]\n if (link) {\n has.push(child)\n ready.push(link)\n } else {\n wants.push(child)\n }\n }\n\n return { has, wants, ready }\n}\n\nconst EMPTY = /** @type {never[]} */ (Object.freeze([]))\n\nconst BLANK = /** @type {Record<never, never>} */ (Object.freeze({}))\n","import * as Task from \"actor\"\nimport * as API from \"./api.js\"\nimport * as Layout from \"./layout/api.js\"\nimport * as UnixFS from \"../codec.js\"\nimport * as Chunker from \"./chunker.js\"\nimport { EMPTY_BUFFER, panic, unreachable } from \"../writer/util.js\"\nimport * as Queue from \"./layout/queue.js\"\n\n/**\n * @template Layout\n * @typedef {{\n * readonly status: 'open'\n * readonly metadata: UnixFS.Metadata\n * readonly config: API.EncoderSettings<Layout>\n * readonly writer: API.BlockWriter\n * chunker: Chunker.Chunker\n * layout: Layout\n * nodeQueue: Queue.Queue\n * }} Open\n */\n/**\n * @template Layout\n * @typedef {{\n * readonly status: 'closed'\n * readonly metadata: UnixFS.Metadata\n * readonly config: API.EncoderSettings<Layout>\n * readonly writer: API.BlockWriter\n * readonly rootID: Layout.NodeID\n * readonly end?: Task.Fork<void, never>\n * chunker?: null\n * layout?: null\n * nodeQueue: Queue.Queue\n * }} Closed\n */\n/**\n * @template Layout\n * @typedef {{\n * readonly status: 'linked'\n * readonly metadata: UnixFS.Metadata\n * readonly config: API.EncoderSettings<Layout>\n * readonly writer: API.BlockWriter\n * readonly link: Layout.Link\n * chunker?: null\n * layout?: null\n * nodeQueue: Queue.Queue\n * }} Linked\n */\n\n/**\n * @template Layout\n * @typedef {Open<Layout>|Closed<Layout>|Linked<Layout>} State\n */\n\n/**\n * @template {object} Layout\n * @typedef {{\n * state: State<Layout>\n * effect: Task.Effect<Message>\n * }} Update\n */\n/**\n * @typedef {never\n * |{type:\"write\", bytes:Uint8Array}\n * |{type:\"link\", link:API.EncodedFile}\n * |{type:\"block\"}\n * |{type: \"close\"}\n * |{type: \"end\"}\n * } Message\n */\n\n/**\n * @template Layout\n * @param {Message} message\n * @param {State<Layout>} state\n */\nexport const update = (message, state) => {\n switch (message.type) {\n case \"write\":\n return write(state, message.bytes)\n case \"link\":\n return link(state, message.link)\n /* c8 ignore next 2 */\n case \"block\":\n return { state, effect: Task.none() }\n case \"close\":\n return close(state)\n case \"end\":\n return { state, effect: Task.none() }\n default:\n return unreachable`File Writer got unknown message ${message}`\n }\n}\n\n/**\n * @template Layout\n * @param {API.BlockWriter} writer\n * @param {UnixFS.Metadata} metadata\n * @param {API.EncoderSettings} config\n * @returns {State<Layout>}\n */\nexport const init = (writer, metadata, config) => {\n return {\n status: \"open\",\n metadata,\n config,\n writer,\n chunker: Chunker.open({ chunker: config.chunker }),\n layout: config.fileLayout.open(),\n // Note: Writing in large slices e.g. 1GiB at a time creates large queues\n // with around `16353` items. Immutable version ends up copying it every\n // time state of the queue changes, which introduces significant overhead.\n // To avoid this overhead we use mutable implementation which is API\n // compatible but makes in place updates.\n // TODO: We should consider using Persistent bit-partitioned vector tries\n // instead of arrays which would provide immutable interface with neglegable\n // overhead.\n // @see https://github.com/Gozala/vectrie\n nodeQueue: Queue.mutable(),\n }\n}\n/**\n * @template Layout\n * @param {State<Layout>} state\n * @param {Uint8Array} bytes\n * @returns {Update<Layout>}\n */\nexport const write = (state, bytes) => {\n if (state.status === \"open\") {\n // Chunk up provided bytes\n const { chunks, ...chunker } = Chunker.write(state.chunker, bytes)\n\n // Pass chunks to layout engine to produce nodes\n const { nodes, leaves, layout } = state.config.fileLayout.write(\n state.layout,\n chunks\n )\n\n const { linked, ...nodeQueue } = Queue.addNodes(nodes, state.nodeQueue)\n\n // Create leaf encode tasks for all new leaves\n const tasks = [\n ...encodeLeaves(leaves, state.config),\n ...encodeBranches(linked, state.config),\n ]\n\n return {\n state: {\n ...state,\n chunker,\n layout,\n nodeQueue,\n },\n effect: Task.listen({\n link: Task.effects(tasks),\n }),\n }\n } else {\n return panic(\"Unable to perform write on closed file\")\n }\n}\n\n/**\n * @template Layout\n * @param {State<Layout>} state\n * @param {API.EncodedFile} entry\n * @returns {Update<Layout>}\n */\nexport const link = (state, { id, link, block }) => {\n let { linked, ...nodeQueue } = Queue.addLink(id, link, state.nodeQueue)\n\n const tasks = encodeBranches(linked, state.config)\n\n /** @type {State<Layout>} */\n const newState =\n state.status === \"closed\" && id === state.rootID\n ? {\n ...state,\n status: \"linked\",\n link,\n nodeQueue,\n }\n : { ...state, nodeQueue }\n\n // If we just linked a root and there is a **suspended** \"end\" task we create\n // a task to resume it.\n const end =\n state.status === \"closed\" && id === state.rootID && state.end\n ? state.end.resume()\n : Task.none()\n\n return {\n state: newState,\n effect: Task.listen({\n link: Task.effects(tasks),\n block: writeBlock(state.writer, block),\n end,\n }),\n }\n}\n\n/**\n * @template Layout\n * @param {State<Layout>} state\n * @returns {Update<Layout>}\n */\nexport const close = state => {\n if (state.status === \"open\") {\n const { chunks } = Chunker.close(state.chunker)\n const { layout, ...write } = state.config.fileLayout.write(\n state.layout,\n chunks\n )\n\n const { root, ...close } = state.config.fileLayout.close(\n layout,\n state.metadata\n )\n\n const [nodes, leaves] = isLeafNode(root)\n ? [\n [...write.nodes, ...close.nodes],\n [...write.leaves, ...close.leaves, root],\n ]\n : [\n [...write.nodes, ...close.nodes, root],\n [...write.leaves, ...close.leaves],\n ]\n\n const { linked, ...nodeQueue } = Queue.addNodes(nodes, state.nodeQueue)\n\n const tasks = [\n ...encodeLeaves(leaves, state.config),\n ...encodeBranches(linked, state.config),\n ]\n\n // We want to keep run loop around until root node is linked. To\n // accomplish this we fork a task that suspends itself, which we will\n // resume when root is linked (see link function).\n // Below we join this forked task in our effect, this way effect is not\n // complete until task forked task is, which will do once we link the\n // root.\n const fork = Task.fork(Task.suspend())\n\n return {\n state: {\n ...state,\n chunker: null,\n layout: null,\n rootID: root.id,\n status: \"closed\",\n end: fork,\n nodeQueue,\n },\n effect: Task.listen({\n link: Task.effects(tasks),\n end: Task.join(fork),\n }),\n }\n } else {\n return { state, effect: Task.none() }\n }\n}\n\n/**\n * Creates concurrent leaf encode tasks. Each one will have an ID corresponding\n * to index in the queue.\n *\n * @param {Layout.Leaf[]} leaves\n * @param {API.EncoderSettings} config\n */\nconst encodeLeaves = (leaves, config) =>\n leaves.map(leaf => encodeLeaf(config, leaf, config.fileChunkEncoder))\n\n/**\n * @param {API.EncoderSettings} config\n * @param {Layout.Leaf} leaf\n * @param {API.FileChunkEncoder} encoder\n * @returns {Task.Task<API.EncodedFile, never>}\n */\nconst encodeLeaf = function* ({ hasher, linker }, { id, content }, encoder) {\n const bytes = encoder.encode(content ? asUint8Array(content) : EMPTY_BUFFER)\n const hash = yield* Task.wait(hasher.digest(bytes))\n const cid = linker.createLink(encoder.code, hash)\n\n const block = { cid, bytes }\n const link = /** @type {UnixFS.FileLink} */ ({\n cid,\n contentByteLength: content ? content.byteLength : 0,\n dagByteLength: bytes.byteLength,\n })\n\n return { id, block, link }\n}\n\n/**\n * @param {Queue.LinkedNode[]} nodes\n * @param {API.EncoderSettings} config\n */\nconst encodeBranches = (nodes, config) =>\n nodes.map(node => encodeBranch(config, node))\n\n/**\n * @template Layout\n * @param {API.EncoderSettings<Layout>} config\n * @param {Queue.LinkedNode} node\n * @param {UnixFS.Metadata} [metadata]\n * @returns {Task.Task<API.EncodedFile>}\n */\nexport const encodeBranch = function* (config, { id, links }, metadata) {\n const bytes = config.fileEncoder.encode({\n type: UnixFS.NodeType.File,\n layout: \"advanced\",\n parts: links,\n metadata,\n })\n const hash = yield* Task.wait(Promise.resolve(config.hasher.digest(bytes)))\n const cid = config.linker.createLink(config.fileEncoder.code, hash)\n const block = { bytes, cid }\n const link = /** @type {UnixFS.FileLink} */ ({\n cid,\n contentByteLength: UnixFS.cumulativeContentByteLength(links),\n dagByteLength: UnixFS.cumulativeDagByteLength(bytes, links),\n })\n\n return { id, block, link }\n}\n\n/**\n * @param {API.BlockWriter} writer\n * @param {UnixFS.Block} block\n * @returns {Task.Task<void, never>}\n */\n\nexport const writeBlock = function* (writer, block) {\n if ((writer.desiredSize || 0) <= 0) {\n yield* Task.wait(writer.ready)\n }\n writer.write(block)\n}\n\n/**\n *\n * @param {Uint8Array|Chunker.Chunk} buffer\n * @returns\n */\n\nconst asUint8Array = buffer =>\n buffer instanceof Uint8Array\n ? buffer\n : buffer.copyTo(new Uint8Array(buffer.byteLength), 0)\n\n/**\n * @param {Layout.Node} node\n * @returns {node is Layout.Leaf}\n */\nconst isLeafNode = node => node.children == null\n","import * as API from \"./api.js\"\n\nexport const name = \"fixed\"\n/**\n * @typedef {Object} FixedSize\n * @property {number} maxChunkSize\n */\n\n/** @type {FixedSize} */\nexport const context = {\n maxChunkSize: 262144,\n}\n\nexport const type = \"Stateless\"\n\n/**\n * @param {number} maxChunkSize\n * @returns {API.StatelessChunker<FixedSize>}\n */\nexport const withMaxChunkSize = maxChunkSize => ({\n type: \"Stateless\",\n context: { maxChunkSize },\n name,\n cut,\n})\n\n/**\n * @param {FixedSize} maxChunkSize\n * @param {API.Chunk} buffer\n * @param {boolean} end\n * @returns {number[]}\n */\nexport const cut = ({ maxChunkSize }, { byteLength }, end) => {\n // number of fixed size chunks that would fit\n const n = (byteLength / maxChunkSize) | 0\n const chunks = new Array(n).fill(maxChunkSize)\n const lastChunkSize = end ? byteLength - n * maxChunkSize : 0\n if (lastChunkSize > 0) {\n chunks.push(lastChunkSize)\n }\n return chunks\n}\n","import * as Layout from \"./api.js\"\nimport * as Chunker from \"./../chunker/api.js\"\n\n/**\n * Type representing a state of the balanced tree. First row hold leaves coming\n * into a builder, once number of leaves in the stack reaches `maxChildren` they\n * are moved into `RootNode` instance which is pushed into the next row of nodes.\n * If next row now contains `maxChildren` nodes from there are again moved into\n * a new `RootNode` and pushed into next row etc...\n *\n * For illustration let's assume we have `maxChildren: 3`, after 3 leafs were\n * added tree will have following layout\n *\n * ```\n * (root1)\n * |\n * ----------------------\n * | | |\n * (leaf1) (leaf2) (leaf3)\n * ```\n *\n * Which in our model before flushing is represented as follows:\n *\n * ```js\n * {\n * width: 3\n * leafIndex: [leaf1, leaf2, leaf3]\n * nodeIndex: []\n * nodes: []\n * }\n * ```\n *\n * After flushing 3 leaves (which is width) are moved into a `RootNode` that\n * is added to `nodes` array (and returned so that caller can create a block).\n * Additionally position of the added node is captured in the `index` at an\n * appropriate depth `0` (that is because we don't count leaves into depth).\n *\n * ```js\n * {\n * width: 3\n * leafIndex: []\n * nodeIndex: [[0]]\n * nodes: [new RootNode([leaf1, leaf2, leaf3])]\n * }\n * ```\n *\n * Increasing number of leaves to 10 would produce following tree layout\n *\n *```\n * (root7)\n * |\n * ------------------------------------------\n * | |\n * (root4) (root6)\n * | |\n * ------------------------------------------------- |\n * | | | |\n * (root1) (root2) (root3) (root5)\n * | | | |\n * --------|-------- --------|-------- --------|-------- |\n * | | | | | | | | | |\n * (leaf1) (leaf2) (leaf3) (leaf4) (leaf5) (leaf6) (leaf7) (leaf8) (leaf9) (leaf10)\n * ```\n *\n * Which in our model will look as follows (note we do not have root5 - root7\n * in model because they are build once width is reached or once builder is\n * closed)\n *\n * ```js\n * {\n * width: 3\n * leafIndex: [leaf10]\n * nodeIndex: [\n * [0, 1, 2], // [r1, r2, r3]\n * [3] // [r4]\n * ]\n * nodes: [\n * new Node([leaf1, leaf2, leaf3]), // r1\n * new Node([leaf4, leaf5, leaf6]), // r2\n * new Node([leaf7, leaf8, leaf9]), // r3\n * new Node([ // r4\n * new Node([leaf1, leaf2, leaf3]), // r1\n * new Node([leaf4, leaf5, leaf6]), // r2\n * new Node([leaf7, leaf8, leaf9]), // r3\n * ])\n * ]\n * }\n * ```\n *\n * @typedef {{\n * width: number\n * head: Chunker.Chunk | null\n * leafIndex: number[]\n * nodeIndex: number[][]\n * lastID: number\n * }} Balanced\n */\n\nclass Node {\n /**\n *\n * @param {number} id\n * @param {number[]} children\n * @param {Layout.Metadata} [metadata]\n */\n constructor(id, children, metadata) {\n this.id = id\n this.children = children\n this.metadata = metadata\n }\n}\n\n/**\n * @typedef Options\n * @property {number} width - Max children per node.\n *\n * @param {number} width\n * @returns {Layout.LayoutEngine<Balanced>}\n */\nexport const withWidth = width => ({\n open: () => open({ width }),\n write,\n close,\n})\n\nexport const defaults = { width: 174 }\n\n/**\n * @param {Options} options\n * @returns {Balanced}\n */\nexport const open = ({ width } = defaults) => ({\n width,\n\n head: null,\n leafIndex: [],\n nodeIndex: [],\n lastID: 0,\n})\n\n/**\n *\n * @param {Balanced} layout\n * @param {Chunker.Chunk[]} chunks\n * @returns {Layout.WriteResult<Balanced>}\n */\nexport const write = (layout, chunks) => {\n if (chunks.length === 0) {\n return { layout, nodes: EMPTY, leaves: EMPTY }\n } else {\n let { lastID } = layout\n // We need to hold on to the first chunk until we either get a second chunk\n // (at which point we know our layout will have branches) or until we close\n // (at which point our layout will be single leaf or node depneding on\n // metadata)\n const [head, slices] = layout.head\n ? // If we had a head we have more then two chunks (we already checked\n // chunks weren't empty) so we process head along with other chunks.\n [null, (chunks.unshift(layout.head), chunks)]\n : // If we have no head no leaves and got only one chunk we have to save it\n // until we can decide what to do with it.\n chunks.length === 1 && layout.leafIndex.length === 0\n ? [chunks[0], EMPTY]\n : // Otherwise we have no head but got enough chunks to know we'll have a\n // node.\n [null, chunks]\n\n if (slices.length === 0) {\n return { layout: { ...layout, head }, nodes: EMPTY, leaves: EMPTY }\n } else {\n const leafIndex = [...layout.leafIndex]\n const leaves = []\n for (const chunk of slices) {\n const leaf = { id: ++lastID, content: chunk }\n leaves.push(leaf)\n leafIndex.push(leaf.id)\n }\n\n if (leafIndex.length > layout.width) {\n return flush({ ...layout, leafIndex, head, lastID }, leaves)\n } else {\n return {\n layout: { ...layout, head, leafIndex, lastID },\n leaves,\n nodes: EMPTY,\n }\n }\n }\n }\n}\n\n/**\n * @param {Balanced} state\n * @param {Layout.Leaf[]} leaves\n * @param {Layout.Branch[]} [nodes]\n * @param {boolean} [close]\n * @returns {Layout.WriteResult<Balanced>}\n */\nexport const flush = (state, leaves = EMPTY, nodes = [], close = false) => {\n let { lastID } = state\n const nodeIndex = state.nodeIndex.map(row => [...row])\n const leafIndex = [...state.leafIndex]\n const { width } = state\n\n // Move leaves into nodes\n while (leafIndex.length > width || (leafIndex.length > 0 && close)) {\n grow(nodeIndex, 1)\n const node = new Node(++lastID, leafIndex.splice(0, width))\n nodeIndex[0].push(node.id)\n nodes.push(node)\n }\n\n let depth = 0\n while (depth < nodeIndex.length) {\n const row = nodeIndex[depth]\n depth++\n\n while (\n row.length > width ||\n (row.length > 0 && close && depth < nodeIndex.length)\n ) {\n const node = new Node(++lastID, row.splice(0, width))\n grow(nodeIndex, depth + 1)\n nodeIndex[depth].push(node.id)\n nodes.push(node)\n }\n }\n\n return { layout: { ...state, lastID, leafIndex, nodeIndex }, leaves, nodes }\n}\n\n/**\n * @param {Balanced} layout\n * @param {Layout.Metadata} [metadata]\n * @returns {Layout.CloseResult}\n */\nexport const close = (layout, metadata) => {\n const state = layout\n if (layout.head) {\n return {\n root: { id: 1, content: layout.head, metadata },\n leaves: EMPTY,\n nodes: EMPTY,\n }\n } else if (layout.leafIndex.length === 0) {\n return {\n root: { id: 1, metadata },\n leaves: EMPTY,\n nodes: EMPTY,\n }\n } else {\n // Flush with width 1 so all the items will be propagate up the tree\n // and height of `depth-1` so we propagate nodes all but from the top\n // most level\n const { nodes, layout } = flush(state, EMPTY, [], true)\n\n const { nodeIndex } = layout\n const height = nodeIndex.length - 1\n\n const top = nodeIndex[height]\n if (top.length === 1) {\n const root = nodes[nodes.length - 1]\n nodes.length = nodes.length - 1\n return { root, nodes, leaves: EMPTY }\n } else {\n const root = new Node(layout.lastID + 1, top, metadata)\n return { root, nodes, leaves: EMPTY }\n }\n }\n}\n\n/**\n * @template T\n * @param {T[][]} index\n * @param {number} length\n */\nconst grow = (index, length) => {\n while (index.length < length) {\n index.push([])\n }\n return index\n}\n\n/** @type {never[]} */\nconst EMPTY = []\n","import * as API from \"./file/api.js\"\nimport * as UnixFS from \"./codec.js\"\nimport * as Writer from \"./file/writer.js\"\nimport * as Task from \"actor\"\nimport { panic } from \"./writer/util.js\"\nimport * as FixedSize from \"./file/chunker/fixed.js\"\nimport { sha256 } from \"multiformats/hashes/sha2\"\nimport { CID } from \"multiformats/cid\"\nimport * as Balanced from \"./file/layout/balanced.js\"\n\nexport * from \"./file/api.js\"\n\n/**\n * @returns {API.EncoderSettings}\n */\nexport const defaults = () => ({\n chunker: FixedSize,\n fileChunkEncoder: UnixFSLeaf,\n smallFileEncoder: UnixFSLeaf,\n fileEncoder: UnixFS,\n fileLayout: Balanced.withWidth(174),\n hasher: sha256,\n linker: { createLink: CID.createV1 },\n})\n\n/**\n * @template {unknown} Layout\n * @param {Partial<API.EncoderSettings<Layout>>} config\n * @returns {API.EncoderSettings<Layout>}\n */\nexport const configure = config => ({\n ...defaults(),\n ...config,\n})\n\nexport const UnixFSLeaf = {\n code: UnixFS.code,\n name: UnixFS.name,\n encode: UnixFS.encodeFileChunk,\n}\n\nexport const UnixFSRawLeaf = {\n code: UnixFS.code,\n name: UnixFS.name,\n encode: UnixFS.encodeRaw,\n}\n\n/**\n * @template Layout\n * @param {API.Options<Layout>} options\n * @returns {API.View<Layout>}\n */\nexport const create = ({ writer, metadata = {}, settings = defaults() }) =>\n new FileWriterView(Writer.init(writer, metadata, configure(settings)))\n\n/**\n * @template T\n * @param {API.View<T>} view\n * @param {Uint8Array} bytes\n * @return {Promise<API.View<T>>}\n */\n\nexport const write = async (view, bytes) => {\n await perform(view, Task.send({ type: \"write\", bytes }))\n return view\n}\n\n/**\n * @template T\n * @param {API.View<T>} view\n * @param {API.CloseOptions} options\n */\nexport const close = async (\n view,\n { releaseLock = false, closeWriter = false } = {}\n) => {\n await perform(view, Task.send({ type: \"close\" }))\n const { state } = view\n if (state.status === \"linked\") {\n if (closeWriter) {\n await view.state.writer.close()\n } else if (releaseLock) {\n view.state.writer.releaseLock()\n }\n return state.link\n /* c8 ignore next 5 */\n } else {\n panic(\n `Expected writer to be in 'linked' state after close, but it is in \"${state.status}\" instead`\n )\n }\n}\n\n/**\n * @template T\n * @param {API.View<T>} view\n * @param {Task.Effect<Writer.Message>} effect\n */\nconst perform = (view, effect) =>\n Task.fork(\n Task.loop(effect, message => {\n const { state, effect } = Writer.update(message, view.state)\n view.state = state\n return effect\n })\n )\n\n/**\n * @template Layout\n * @implements {API.View<Layout>}\n */\nclass FileWriterView {\n /**\n * @param {Writer.State<Layout>} state\n */\n constructor(state) {\n this.state = state\n }\n get writer() {\n return this.state.writer\n }\n get settings() {\n return this.state.config\n }\n /**\n * @param {Uint8Array} bytes\n * @returns {Promise<API.View<Layout>>}\n */\n write(bytes) {\n return write(this, bytes)\n }\n /**\n * @param {API.CloseOptions} [options]\n * @returns {Promise<UnixFS.FileLink>}\n */\n close(options) {\n return close(this, options)\n }\n}\n","// @ts-nocheck\n\n/**\n * This is file is shadowed by api.ts and only exists so JS could import it to\n * refer to types without encountering runtime errors\n * @see https://github.com/microsoft/TypeScript/issues/41825\n */\n","import * as API from \"./directory/api.js\"\nimport * as File from \"./file.js\"\nimport * as UnixFS from \"./codec.js\"\nexport * from \"./directory/api.js\"\n\nexport const configure = File.configure\nexport const defaults = File.defaults\n\n/**\n * @template [Layout=unknown]\n * @param {API.Options<Layout>} config\n * @returns {API.View<Layout>}\n */\nexport const create = ({ writer, settings = defaults(), metadata = {} }) =>\n new DirectoryWriter({\n writer,\n metadata,\n settings,\n entries: new Map(),\n closed: false,\n })\n\n/**\n * @template {unknown} L\n * @template {{ state: API.State<L> }} View\n * @param {View} view\n * @param {string} name\n * @param {API.EntryLink} link\n * @param {API.WriteOptions} options\n */\nexport const set = (view, name, link, { overwrite = false } = {}) => {\n const writable = asWritable(view.state)\n if (name.includes(\"/\")) {\n throw new Error(\n `Directory entry name \"${name}\" contains forbidden \"/\" character`\n )\n }\n if (!overwrite && writable.entries.has(name)) {\n throw new Error(`Directory already contains entry with name \"${name}\"`)\n } else {\n writable.entries.set(name, link)\n return view\n }\n}\n\n/**\n * @template {unknown} L\n * @template {{ state: API.State<L> }} View\n * @param {View} view\n * @param {string} name\n */\nexport const remove = (view, name) => {\n const writer = asWritable(view.state)\n writer.entries.delete(name)\n return view\n}\n\n/**\n * @template {API.State} Writer\n * @param {Writer} writer\n * @returns {Writer}\n */\nconst asWritable = writer => {\n if (!writer.closed) {\n return writer\n } else {\n throw new Error(\n `Can not change written directory, but you can .fork() and make changes to it`\n )\n }\n}\n\n/**\n * @template {unknown} Layout\n * @param {{ state: API.State<Layout> }} view\n * @param {API.CloseOptions} options\n * @returns {Promise<UnixFS.DirectoryLink>}\n */\nexport const close = async (\n view,\n { closeWriter = false, releaseLock = false } = {}\n) => {\n const { writer, settings, metadata } = asWritable(view.state)\n view.state.closed = true\n const entries = [...links(view)]\n const node = UnixFS.createFlatDirectory(entries, metadata)\n const bytes = UnixFS.encodeDirectory(node)\n const digest = await settings.hasher.digest(bytes)\n /** @type {UnixFS.Link<UnixFS.Directory>} */\n const cid = settings.linker.createLink(UnixFS.code, digest)\n\n // we make sure that writer has some capacity for this write. If it\n // does not we await.\n if ((writer.desiredSize || 0) <= 0) {\n await writer.ready\n }\n // once writer has some capacity we write a block, however we do not\n // await completion as we don't care when it's taken off the stream.\n writer.write({ cid, bytes })\n\n if (closeWriter) {\n await writer.close()\n } else if (releaseLock) {\n writer.releaseLock()\n }\n\n return {\n cid,\n dagByteLength: UnixFS.cumulativeDagByteLength(bytes, entries),\n }\n}\n\n/**\n * @template {unknown} Layout\n * @param {{ state: API.State<Layout> }} view\n * @returns {IterableIterator<UnixFS.DirectoryEntryLink>}\n */\nexport const links = function* ({ state }) {\n for (const [name, { dagByteLength, cid }] of state.entries) {\n yield /** @type {UnixFS.DirectoryEntryLink} */ ({\n name,\n dagByteLength,\n cid,\n })\n }\n}\n\n/**\n * @template L1, L2\n * @param {API.View<L1>} state\n * @param {Partial<API.Options<L1|L2>>} options\n * @returns {API.View<L1|L2>}\n */\nexport const fork = (\n { state },\n {\n writer = state.writer,\n metadata = state.metadata,\n settings = state.settings,\n } = {}\n) =>\n new DirectoryWriter({\n writer,\n metadata,\n settings,\n entries: new Map(state.entries.entries()),\n closed: false,\n })\n\n/**\n * @template [Layout=unknown]\n * @implements {API.View<Layout>}\n */\nclass DirectoryWriter {\n /**\n * @param {API.State<Layout>} state\n */\n constructor(state) {\n this.state = state\n }\n get writer() {\n return this.state.writer\n }\n get settings() {\n return this.state.settings\n }\n\n links() {\n return links(this)\n }\n\n /**\n * @param {string} name\n * @param {UnixFS.FileLink | UnixFS.DirectoryLink} link\n * @param {API.WriteOptions} [options]\n */\n\n set(name, link, options) {\n return set(this, name, link, options)\n }\n\n /**\n * @param {string} name\n */\n remove(name) {\n return remove(this, name)\n }\n\n /**\n * @template L\n * @param {Partial<API.Options<L>>} [options]\n * @returns {API.View<Layout|L>}\n */\n fork(options) {\n return fork(this, options)\n }\n\n /**\n * @param {API.CloseOptions} [options]\n * @returns {Promise<UnixFS.DirectoryLink>}\n */\n close(options) {\n return close(this, options)\n }\n\n entries() {\n return this.state.entries.entries()\n }\n /**\n * @param {string} name\n */\n has(name) {\n return this.state.entries.has(name)\n }\n get size() {\n return this.state.entries.size\n }\n}\n","export {}\n","export {}\n","import * as API from \"./api.js\"\n\nexport { API }\n\n/**\n * @param {API.Uint32} size\n */\nexport const empty = (size = 32) => {\n // We could support < 32, but it seems impractical and would negatively affect\n // performance as we would have to do extra bound checks.\n if (size !== 32) {\n throw new Error(`Uint32 BitField does not support size: ${size}`)\n }\n\n return 0\n}\n\n/**\n * @param {API.Uint32[]} bits\n * @param {API.Uint32} [size]\n */\nexport const from = (bits, size) => {\n let bitfield = empty(size)\n for (const bit of bits) {\n bitfield = set(bitfield, bit)\n }\n return bitfield\n}\n\n/**\n * @param {API.Uint32} _bitField\n */\nexport const size = _bitField => 32\n\n/**\n * Reads out 5 bits at the given bit offset.\n *\n * @param {API.Uint32} bitField - Bitfield in Uint32 representation.\n * @param {API.Uint32} index - Index with-in `bitField` to read bits from.\n * @returns {API.Uint32}\n */\nconst mask = (bitField, index) => (bitField >>> index) & 0b11111\n\n/**\n * Creates mask that can be used to check a bit in nodes bitmap for the give\n * key (hash) at given depth.\n *\n * @param {API.Uint32} bitField - Key hash as 32 bit integer.\n * @param {API.Uint32} index - Index with-in the 32bit bitfield\n */\nconst offset = (bitField, index) => 1 << mask(bitField, index)\n\n/**\n * Maps numbers [0, 31] to powers of two. Creates mask that can be used\n * to check a bit in nodes bitmap for the give key (hash) at given depth.\n *\n * @param {API.Uint32} bitField - Key hash as 32 bit integer.\n * @param {API.Uint32} index - Index with-in the 32bit bitfield\n */\nexport const popcount = (bitField, index = 31) =>\n bitCount(bitField & (offset(index, 0) - 1))\n\n/**\n * @param {API.Uint32} bitField\n * @param {API.Uint32} index\n */\nexport const set = (bitField, index) => bitField | (1 << index)\n\n/**\n * @param {API.Uint32} bitField\n * @param {API.Uint32} index\n */\nexport const unset = (bitField, index) => bitField & (0xff ^ (1 << index))\n\n/**\n * @param {API.Uint32} bitField\n * @param {API.Uint32} index\n */\nexport const get = (bitField, index) => ((bitField >> index) & 0x1) !== 0\n\n/**\n * Counts the number of bits set in n\n * @param {API.Uint32} bitField\n */\nexport const bitCount = bitField => {\n const n1 = bitField - ((bitField >> 1) & 0x55555555)\n const n2 = (n1 & 0x33333333) + ((n1 >> 2) & 0x33333333)\n const n3 = ((n2 + (n2 >> 4)) & 0xf0f0f0f) * 0x1010101\n return n3 >> 24\n}\n\n/**\n * @param {API.Uint32} left\n * @param {API.Uint32} right\n * @returns {API.Uint32}\n */\nexport const and = (left, right) => left & right\n\n/**\n * @param {API.Uint32} left\n * @param {API.Uint32} right\n * @returns {API.Uint32}\n */\nexport const or = (left, right) => left | right\n\n/**\n * Counts the number of bits set in n\n * @param {API.Uint32} bitField\n * @returns {Uint8Array}\n */\nexport const toBytes = bitField =>\n Uint8Array.of(\n (bitField >> 24) & 0b1111_1111,\n (bitField >> 16) & 0b1111_1111,\n (bitField >> 8) & 0b1111_1111,\n bitField & 0b1111_1111\n )\n\n/**\n *\n * @param {Uint8Array} bytes\n * @returns {API.Uint32}\n */\nexport const fromBytes = bytes => {\n if (bytes.length !== 4) {\n throw new Error(`Expected 4 bytes instead got ${bytes.length}`)\n }\n return (bytes[0] << 24) + (bytes[1] << 16) + (bytes[2] << 8) + bytes[3]\n}\n","export {}\n","/* jshint -W086: true */\n// +----------------------------------------------------------------------+\n// | murmurHash3js.js v3.0.1 // https://github.com/pid/murmurHash3js\n// | A javascript implementation of MurmurHash3's x86 hashing algorithms. |\n// |----------------------------------------------------------------------|\n// | Copyright (c) 2012-2015 Karan Lyons |\n// | https://github.com/karanlyons/murmurHash3.js/blob/c1778f75792abef7bdd74bc85d2d4e1a3d25cfe9/murmurHash3.js |\n// | Freely distributable under the MIT license. |\n// +----------------------------------------------------------------------+\n\n;(function (root, undefined) {\n 'use strict';\n\n // Create a local object that'll be exported or referenced globally.\n var library = {\n 'version': '3.0.0',\n 'x86': {},\n 'x64': {},\n 'inputValidation': true\n };\n\n // PRIVATE FUNCTIONS\n // -----------------\n\n function _validBytes(bytes) {\n // check the input is an array or a typed array\n if (!Array.isArray(bytes) && !ArrayBuffer.isView(bytes)) {\n return false;\n }\n\n // check all bytes are actually bytes\n for (var i = 0; i < bytes.length; i++) {\n if (!Number.isInteger(bytes[i]) || bytes[i] < 0 || bytes[i] > 255) {\n return false;\n }\n }\n return true;\n }\n\n function _x86Multiply(m, n) {\n //\n // Given two 32bit ints, returns the two multiplied together as a\n // 32bit int.\n //\n\n return ((m & 0xffff) * n) + ((((m >>> 16) * n) & 0xffff) << 16);\n }\n\n function _x86Rotl(m, n) {\n //\n // Given a 32bit int and an int representing a number of bit positions,\n // returns the 32bit int rotated left by that number of positions.\n //\n\n return (m << n) | (m >>> (32 - n));\n }\n\n function _x86Fmix(h) {\n //\n // Given a block, returns murmurHash3's final x86 mix of that block.\n //\n\n h ^= h >>> 16;\n h = _x86Multiply(h, 0x85ebca6b);\n h ^= h >>> 13;\n h = _x86Multiply(h, 0xc2b2ae35);\n h ^= h >>> 16;\n\n return h;\n }\n\n function _x64Add(m, n) {\n //\n // Given two 64bit ints (as an array of two 32bit ints) returns the two\n // added together as a 64bit int (as an array of two 32bit ints).\n //\n\n m = [m[0] >>> 16, m[0] & 0xffff, m[1] >>> 16, m[1] & 0xffff];\n n = [n[0] >>> 16, n[0] & 0xffff, n[1] >>> 16, n[1] & 0xffff];\n var o = [0, 0, 0, 0];\n\n o[3] += m[3] + n[3];\n o[2] += o[3] >>> 16;\n o[3] &= 0xffff;\n\n o[2] += m[2] + n[2];\n o[1] += o[2] >>> 16;\n o[2] &= 0xffff;\n\n o[1] += m[1] + n[1];\n o[0] += o[1] >>> 16;\n o[1] &= 0xffff;\n\n o[0] += m[0] + n[0];\n o[0] &= 0xffff;\n\n return [(o[0] << 16) | o[1], (o[2] << 16) | o[3]];\n }\n\n function _x64Multiply(m, n) {\n //\n // Given two 64bit ints (as an array of two 32bit ints) returns the two\n // multiplied together as a 64bit int (as an array of two 32bit ints).\n //\n\n m = [m[0] >>> 16, m[0] & 0xffff, m[1] >>> 16, m[1] & 0xffff];\n n = [n[0] >>> 16, n[0] & 0xffff, n[1] >>> 16, n[1] & 0xffff];\n var o = [0, 0, 0, 0];\n\n o[3] += m[3] * n[3];\n o[2] += o[3] >>> 16;\n o[3] &= 0xffff;\n\n o[2] += m[2] * n[3];\n o[1] += o[2] >>> 16;\n o[2] &= 0xffff;\n\n o[2] += m[3] * n[2];\n o[1] += o[2] >>> 16;\n o[2] &= 0xffff;\n\n o[1] += m[1] * n[3];\n o[0] += o[1] >>> 16;\n o[1] &= 0xffff;\n\n o[1] += m[2] * n[2];\n o[0] += o[1] >>> 16;\n o[1] &= 0xffff;\n\n o[1] += m[3] * n[1];\n o[0] += o[1] >>> 16;\n o[1] &= 0xffff;\n\n o[0] += (m[0] * n[3]) + (m[1] * n[2]) + (m[2] * n[1]) + (m[3] * n[0]);\n o[0] &= 0xffff;\n\n return [(o[0] << 16) | o[1], (o[2] << 16) | o[3]];\n }\n\n function _x64Rotl(m, n) {\n //\n // Given a 64bit int (as an array of two 32bit ints) and an int\n // representing a number of bit positions, returns the 64bit int (as an\n // array of two 32bit ints) rotated left by that number of positions.\n //\n\n n %= 64;\n\n if (n === 32) {\n return [m[1], m[0]];\n } else if (n < 32) {\n return [(m[0] << n) | (m[1] >>> (32 - n)), (m[1] << n) | (m[0] >>> (32 - n))];\n } else {\n n -= 32;\n return [(m[1] << n) | (m[0] >>> (32 - n)), (m[0] << n) | (m[1] >>> (32 - n))];\n }\n }\n\n function _x64LeftShift(m, n) {\n //\n // Given a 64bit int (as an array of two 32bit ints) and an int\n // representing a number of bit positions, returns the 64bit int (as an\n // array of two 32bit ints) shifted left by that number of positions.\n //\n\n n %= 64;\n\n if (n === 0) {\n return m;\n } else if (n < 32) {\n return [(m[0] << n) | (m[1] >>> (32 - n)), m[1] << n];\n } else {\n return [m[1] << (n - 32), 0];\n }\n }\n\n function _x64Xor(m, n) {\n //\n // Given two 64bit ints (as an array of two 32bit ints) returns the two\n // xored together as a 64bit int (as an array of two 32bit ints).\n //\n\n return [m[0] ^ n[0], m[1] ^ n[1]];\n }\n\n function _x64Fmix(h) {\n //\n // Given a block, returns murmurHash3's final x64 mix of that block.\n // (`[0, h[0] >>> 1]` is a 33 bit unsigned right shift. This is the\n // only place where we need to right shift 64bit ints.)\n //\n\n h = _x64Xor(h, [0, h[0] >>> 1]);\n h = _x64Multiply(h, [0xff51afd7, 0xed558ccd]);\n h = _x64Xor(h, [0, h[0] >>> 1]);\n h = _x64Multiply(h, [0xc4ceb9fe, 0x1a85ec53]);\n h = _x64Xor(h, [0, h[0] >>> 1]);\n\n return h;\n }\n\n // PUBLIC FUNCTIONS\n // ----------------\n\n library.x86.hash32 = function (bytes, seed) {\n //\n // Given a string and an optional seed as an int, returns a 32 bit hash\n // using the x86 flavor of MurmurHash3, as an unsigned int.\n //\n if (library.inputValidation && !_validBytes(bytes)) {\n return undefined;\n }\n seed = seed || 0;\n\n var remainder = bytes.length % 4;\n var blocks = bytes.length - remainder;\n\n var h1 = seed;\n\n var k1 = 0;\n\n var c1 = 0xcc9e2d51;\n var c2 = 0x1b873593;\n\n for (var i = 0; i < blocks; i = i + 4) {\n k1 = (bytes[i]) | (bytes[i + 1] << 8) | (bytes[i + 2] << 16) | (bytes[i + 3] << 24);\n\n k1 = _x86Multiply(k1, c1);\n k1 = _x86Rotl(k1, 15);\n k1 = _x86Multiply(k1, c2);\n\n h1 ^= k1;\n h1 = _x86Rotl(h1, 13);\n h1 = _x86Multiply(h1, 5) + 0xe6546b64;\n }\n\n k1 = 0;\n\n switch (remainder) {\n case 3:\n k1 ^= bytes[i + 2] << 16;\n\n case 2:\n k1 ^= bytes[i + 1] << 8;\n\n case 1:\n k1 ^= bytes[i];\n k1 = _x86Multiply(k1, c1);\n k1 = _x86Rotl(k1, 15);\n k1 = _x86Multiply(k1, c2);\n h1 ^= k1;\n }\n\n h1 ^= bytes.length;\n h1 = _x86Fmix(h1);\n\n return h1 >>> 0;\n };\n\n library.x86.hash128 = function (bytes, seed) {\n //\n // Given a string and an optional seed as an int, returns a 128 bit\n // hash using the x86 flavor of MurmurHash3, as an unsigned hex.\n //\n if (library.inputValidation && !_validBytes(bytes)) {\n return undefined;\n }\n\n seed = seed || 0;\n var remainder = bytes.length % 16;\n var blocks = bytes.length - remainder;\n\n var h1 = seed;\n var h2 = seed;\n var h3 = seed;\n var h4 = seed;\n\n var k1 = 0;\n var k2 = 0;\n var k3 = 0;\n var k4 = 0;\n\n var c1 = 0x239b961b;\n var c2 = 0xab0e9789;\n var c3 = 0x38b34ae5;\n var c4 = 0xa1e38b93;\n\n for (var i = 0; i < blocks; i = i + 16) {\n k1 = (bytes[i]) | (bytes[i + 1] << 8) | (bytes[i + 2] << 16) | (bytes[i + 3] << 24);\n k2 = (bytes[i + 4]) | (bytes[i + 5] << 8) | (bytes[i + 6] << 16) | (bytes[i + 7] << 24);\n k3 = (bytes[i + 8]) | (bytes[i + 9] << 8) | (bytes[i + 10] << 16) | (bytes[i + 11] << 24);\n k4 = (bytes[i + 12]) | (bytes[i + 13] << 8) | (bytes[i + 14] << 16) | (bytes[i + 15] << 24);\n\n k1 = _x86Multiply(k1, c1);\n k1 = _x86Rotl(k1, 15);\n k1 = _x86Multiply(k1, c2);\n h1 ^= k1;\n\n h1 = _x86Rotl(h1, 19);\n h1 += h2;\n h1 = _x86Multiply(h1, 5) + 0x561ccd1b;\n\n k2 = _x86Multiply(k2, c2);\n k2 = _x86Rotl(k2, 16);\n k2 = _x86Multiply(k2, c3);\n h2 ^= k2;\n\n h2 = _x86Rotl(h2, 17);\n h2 += h3;\n h2 = _x86Multiply(h2, 5) + 0x0bcaa747;\n\n k3 = _x86Multiply(k3, c3);\n k3 = _x86Rotl(k3, 17);\n k3 = _x86Multiply(k3, c4);\n h3 ^= k3;\n\n h3 = _x86Rotl(h3, 15);\n h3 += h4;\n h3 = _x86Multiply(h3, 5) + 0x96cd1c35;\n\n k4 = _x86Multiply(k4, c4);\n k4 = _x86Rotl(k4, 18);\n k4 = _x86Multiply(k4, c1);\n h4 ^= k4;\n\n h4 = _x86Rotl(h4, 13);\n h4 += h1;\n h4 = _x86Multiply(h4, 5) + 0x32ac3b17;\n }\n\n k1 = 0;\n k2 = 0;\n k3 = 0;\n k4 = 0;\n\n switch (remainder) {\n case 15:\n k4 ^= bytes[i + 14] << 16;\n\n case 14:\n k4 ^= bytes[i + 13] << 8;\n\n case 13:\n k4 ^= bytes[i + 12];\n k4 = _x86Multiply(k4, c4);\n k4 = _x86Rotl(k4, 18);\n k4 = _x86Multiply(k4, c1);\n h4 ^= k4;\n\n case 12:\n k3 ^= bytes[i + 11] << 24;\n\n case 11:\n k3 ^= bytes[i + 10] << 16;\n\n case 10:\n k3 ^= bytes[i + 9] << 8;\n\n case 9:\n k3 ^= bytes[i + 8];\n k3 = _x86Multiply(k3, c3);\n k3 = _x86Rotl(k3, 17);\n k3 = _x86Multiply(k3, c4);\n h3 ^= k3;\n\n case 8:\n k2 ^= bytes[i + 7] << 24;\n\n case 7:\n k2 ^= bytes[i + 6] << 16;\n\n case 6:\n k2 ^= bytes[i + 5] << 8;\n\n case 5:\n k2 ^= bytes[i + 4];\n k2 = _x86Multiply(k2, c2);\n k2 = _x86Rotl(k2, 16);\n k2 = _x86Multiply(k2, c3);\n h2 ^= k2;\n\n case 4:\n k1 ^= bytes[i + 3] << 24;\n\n case 3:\n k1 ^= bytes[i + 2] << 16;\n\n case 2:\n k1 ^= bytes[i + 1] << 8;\n\n case 1:\n k1 ^= bytes[i];\n k1 = _x86Multiply(k1, c1);\n k1 = _x86Rotl(k1, 15);\n k1 = _x86Multiply(k1, c2);\n h1 ^= k1;\n }\n\n h1 ^= bytes.length;\n h2 ^= bytes.length;\n h3 ^= bytes.length;\n h4 ^= bytes.length;\n\n h1 += h2;\n h1 += h3;\n h1 += h4;\n h2 += h1;\n h3 += h1;\n h4 += h1;\n\n h1 = _x86Fmix(h1);\n h2 = _x86Fmix(h2);\n h3 = _x86Fmix(h3);\n h4 = _x86Fmix(h4);\n\n h1 += h2;\n h1 += h3;\n h1 += h4;\n h2 += h1;\n h3 += h1;\n h4 += h1;\n\n return (\"00000000\" + (h1 >>> 0).toString(16)).slice(-8) + (\"00000000\" + (h2 >>> 0).toString(16)).slice(-8) + (\"00000000\" + (h3 >>> 0).toString(16)).slice(-8) + (\"00000000\" + (h4 >>> 0).toString(16)).slice(-8);\n };\n\n library.x64.hash128 = function (bytes, seed) {\n //\n // Given a string and an optional seed as an int, returns a 128 bit\n // hash using the x64 flavor of MurmurHash3, as an unsigned hex.\n //\n if (library.inputValidation && !_validBytes(bytes)) {\n return undefined;\n }\n seed = seed || 0;\n\n var remainder = bytes.length % 16;\n var blocks = bytes.length - remainder;\n\n var h1 = [0, seed];\n var h2 = [0, seed];\n\n var k1 = [0, 0];\n var k2 = [0, 0];\n\n var c1 = [0x87c37b91, 0x114253d5];\n var c2 = [0x4cf5ad43, 0x2745937f];\n\n for (var i = 0; i < blocks; i = i + 16) {\n k1 = [(bytes[i + 4]) | (bytes[i + 5] << 8) | (bytes[i + 6] << 16) | (bytes[i + 7] << 24), (bytes[i]) |\n (bytes[i + 1] << 8) | (bytes[i + 2] << 16) | (bytes[i + 3] << 24)];\n k2 = [(bytes[i + 12]) | (bytes[i + 13] << 8) | (bytes[i + 14] << 16) | (bytes[i + 15] << 24), (bytes[i + 8]) |\n (bytes[i + 9] << 8) | (bytes[i + 10] << 16) | (bytes[i + 11] << 24)];\n\n k1 = _x64Multiply(k1, c1);\n k1 = _x64Rotl(k1, 31);\n k1 = _x64Multiply(k1, c2);\n h1 = _x64Xor(h1, k1);\n\n h1 = _x64Rotl(h1, 27);\n h1 = _x64Add(h1, h2);\n h1 = _x64Add(_x64Multiply(h1, [0, 5]), [0, 0x52dce729]);\n\n k2 = _x64Multiply(k2, c2);\n k2 = _x64Rotl(k2, 33);\n k2 = _x64Multiply(k2, c1);\n h2 = _x64Xor(h2, k2);\n\n h2 = _x64Rotl(h2, 31);\n h2 = _x64Add(h2, h1);\n h2 = _x64Add(_x64Multiply(h2, [0, 5]), [0, 0x38495ab5]);\n }\n\n k1 = [0, 0];\n k2 = [0, 0];\n\n switch (remainder) {\n case 15:\n k2 = _x64Xor(k2, _x64LeftShift([0, bytes[i + 14]], 48));\n\n case 14:\n k2 = _x64Xor(k2, _x64LeftShift([0, bytes[i + 13]], 40));\n\n case 13:\n k2 = _x64Xor(k2, _x64LeftShift([0, bytes[i + 12]], 32));\n\n case 12:\n k2 = _x64Xor(k2, _x64LeftShift([0, bytes[i + 11]], 24));\n\n case 11:\n k2 = _x64Xor(k2, _x64LeftShift([0, bytes[i + 10]], 16));\n\n case 10:\n k2 = _x64Xor(k2, _x64LeftShift([0, bytes[i + 9]], 8));\n\n case 9:\n k2 = _x64Xor(k2, [0, bytes[i + 8]]);\n k2 = _x64Multiply(k2, c2);\n k2 = _x64Rotl(k2, 33);\n k2 = _x64Multiply(k2, c1);\n h2 = _x64Xor(h2, k2);\n\n case 8:\n k1 = _x64Xor(k1, _x64LeftShift([0, bytes[i + 7]], 56));\n\n case 7:\n k1 = _x64Xor(k1, _x64LeftShift([0, bytes[i + 6]], 48));\n\n case 6:\n k1 = _x64Xor(k1, _x64LeftShift([0, bytes[i + 5]], 40));\n\n case 5:\n k1 = _x64Xor(k1, _x64LeftShift([0, bytes[i + 4]], 32));\n\n case 4:\n k1 = _x64Xor(k1, _x64LeftShift([0, bytes[i + 3]], 24));\n\n case 3:\n k1 = _x64Xor(k1, _x64LeftShift([0, bytes[i + 2]], 16));\n\n case 2:\n k1 = _x64Xor(k1, _x64LeftShift([0, bytes[i + 1]], 8));\n\n case 1:\n k1 = _x64Xor(k1, [0, bytes[i]]);\n k1 = _x64Multiply(k1, c1);\n k1 = _x64Rotl(k1, 31);\n k1 = _x64Multiply(k1, c2);\n h1 = _x64Xor(h1, k1);\n }\n\n h1 = _x64Xor(h1, [0, bytes.length]);\n h2 = _x64Xor(h2, [0, bytes.length]);\n\n h1 = _x64Add(h1, h2);\n h2 = _x64Add(h2, h1);\n\n h1 = _x64Fmix(h1);\n h2 = _x64Fmix(h2);\n\n h1 = _x64Add(h1, h2);\n h2 = _x64Add(h2, h1);\n\n return (\"00000000\" + (h1[0] >>> 0).toString(16)).slice(-8) + (\"00000000\" + (h1[1] >>> 0).toString(16)).slice(-8) + (\"00000000\" + (h2[0] >>> 0).toString(16)).slice(-8) + (\"00000000\" + (h2[1] >>> 0).toString(16)).slice(-8);\n };\n\n // INITIALIZATION\n // --------------\n\n // Export murmurHash3 for CommonJS, either as an AMD module or just as part\n // of the global object.\n if (typeof exports !== 'undefined') {\n\n if (typeof module !== 'undefined' && module.exports) {\n exports = module.exports = library;\n }\n\n exports.murmurHash3 = library;\n\n } else if (typeof define === 'function' && define.amd) {\n\n define([], function () {\n return library;\n });\n } else {\n\n // Use murmurHash3.noConflict to restore `murmurHash3` back to its\n // original value. Returns a reference to the library object, to allow\n // it to be used under a different name.\n library._murmurHash3 = root.murmurHash3;\n\n library.noConflict = function () {\n root.murmurHash3 = library._murmurHash3;\n library._murmurHash3 = undefined;\n library.noConflict = undefined;\n\n return library;\n };\n\n root.murmurHash3 = library;\n }\n})(this);\n","module.exports = require('./lib/murmurHash3js');\n","import * as API from \"./api.js\"\n// @ts-expect-error - has no types\nimport murmur from \"murmurhash3js-revisited\"\n\nconst utf8 = new TextEncoder()\n\n/**\n * @typedef {(bytes:Uint8Array) => API.Uint32} Hasher\n * @type {Hasher}\n */\nexport const hash32 = murmur.x64.hash126\n\n/**\n * @param {Partial<API.Options<API.Uint32>>} options\n * @returns {API.Path<API.Uint32>}\n */\n/* c8 ignore next 45 */\nexport const configure = ({ bitWidth = 5, hash = hash32 }) => {\n const hashSize = 4\n if (bitWidth > hashSize * 8) {\n throw new RangeError(\n `Can not use bitWidth ${bitWidth} which exceeds the hashSize ${hashSize}`\n )\n }\n\n if (hashSize * 8 > 32) {\n throw new RangeError(\n `Can not use hashSize ${hashSize} as it can not be encoded in Uint32`\n )\n }\n\n // Mask for reading `bitWidth` number of bits from the end.\n const mask = 0xffffffff >>> (32 - bitWidth)\n\n /**\n * Determines bit position for the path entry at the given `depth`.\n * ```js\n * const key = hash(\"result\") // 0b00011010010110010101111100110010\n * // Which is following path (in reverse as we read from the right)\n * // 10010/11001/10111/10010/00101/01101/00000 -> [ 18, 25, 23, 18, 5, 13, 0 ]\n * at(key, 0) // 0b10010 -> 18\n * at(key, 1) // 0b11001 -> 25\n * at(key, 2) // 0b10111 -> 23\n * at(key, 3) // 0b10010 -> 18\n * at(key, 4) // 0b00101 -> 5\n * at(key, 5) // 0b01101 -> 13\n * at(key, 6) // 0b00000 -> 0\n * ```\n *\n * @param {API.Uint32} path\n * @param {number} depth\n */\n const at = (path, depth) => (path >>> (depth * bitWidth)) & mask\n\n /**\n * @param {string} key\n * @returns {API.Uint32}\n */\n const from = key => hash(utf8.encode(key))\n\n return { at, from, size: Math.ceil((hashSize * 8) / bitWidth) }\n}\n","import * as API from \"./api.js\"\nexport * from \"./api.js\"\nimport * as BitField from \"./bitfield/Uint32.js\"\nimport * as Path from \"./path/Uint32.js\"\nexport { API }\n\n/**\n * @template T\n * @template {string} K\n * @template {API.Config} C\n * @implements {API.BitmapIndexedNode<T, K, C>}\n */\nclass BitmapIndexedNode {\n /**\n * @param {API.Edit|null} edit\n * @param {ReturnType<C['BitField']['empty']>} datamap\n * @param {ReturnType<C['BitField']['empty']>} nodemap\n * @param {API.Children<T, K, C>} children\n * @param {C} config\n */\n constructor(edit, datamap, nodemap, children, config) {\n this.edit = edit\n this.config = config\n this.datamap = datamap\n this.nodemap = nodemap\n this.children = children\n }\n\n get nodeArity() {\n return this.config.BitField.popcount(this.nodemap)\n }\n get dataArity() {\n return this.config.BitField.popcount(this.datamap)\n }\n\n /**\n * @returns {API.BitmapIndexedNode<T, K, C>}\n */\n /* c8 ignore next 3 */\n empty() {\n return create(this.config)\n }\n\n /**\n * @template X\n * @param {API.Uint32} depth\n * @param {ReturnType<C['Path']['from']>} path\n * @param {K} key\n * @param {X} notFound\n * @returns {T|X}\n */\n\n lookup(depth, path, key, notFound) {\n return lookup(this, depth, path, key, notFound)\n }\n\n /**\n * @template {string} R\n * @param {API.Edit|null} edit\n * @param {API.Uint32} depth\n * @param {ReturnType<C['Path']['from']>} path\n * @param {K|R} key\n * @param {T} value\n * @param {{value:boolean}} addedLeaf\n * @returns {API.BitmapIndexedNode<T, K | R, C>}\n */\n associate(edit, depth, path, key, value, addedLeaf) {\n return associate(this, edit, depth, path, key, value, addedLeaf)\n }\n\n /**\n * @param {API.Edit|null} edit\n * @param {API.Uint32} depth\n * @param {ReturnType<C['Path']['from']>} path\n * @param {K} key\n * @param {{value:boolean}} removedLeaf\n * @returns {API.BitmapIndexedNode<T, K, C>}\n */\n dissociate(edit, depth, path, key, removedLeaf) {\n return dissociate(this, edit, depth, path, key, removedLeaf)\n }\n\n /**\n * @param {API.Edit|null} edit\n * @returns {API.BitmapIndexedNode<T, K, C>}\n */\n fork(edit = null) {\n return fork(this, edit)\n }\n\n /**\n * @returns {IterableIterator<[K, T]>}\n */\n entries() {\n return entries(this)\n }\n\n /**\n * @returns {IterableIterator<K>}\n */\n keys() {\n return keys(this)\n }\n\n /**\n * @returns {IterableIterator<T>}\n */\n values() {\n return values(this)\n }\n}\n\n/**\n * @template T\n * @template {string} K\n * @template {API.Config} C\n * @implements {API.HashCollisionNode<T, K, C>}\n */\nclass HashCollisionNode {\n /**\n * @param {API.Edit|null} edit\n * @param {number} count\n * @param {API.CollisionEntries<T, K>} children\n * @param {C} config\n */\n /* c8 ignore next 12 */\n constructor(edit, count, children, config) {\n this.edit = edit\n this.count = count\n this.children = children\n this.config = config\n }\n get nodeArity() {\n return /** @type {0} */ (0)\n }\n get dataArity() {\n return this.count\n }\n\n /**\n * @template X\n * @param {API.Uint32} _shift\n * @param {unknown} _path\n * @param {K} key\n * @param {X} notFound\n * @returns {T|X}\n */\n /* c8 ignore next 3 */\n lookup(_shift, _path, key, notFound) {\n return lookupCollision(this, key, notFound)\n }\n\n /**\n * @template {string} R\n * @param {API.Edit|null} edit\n * @param {API.Uint32} _shift\n * @param {ReturnType<C['Path']['from']>} path\n * @param {K|R} key\n * @param {T} value\n * @param {{value:boolean}} addedLeaf\n * @returns {API.HashCollisionNode<T, K | R, C>}\n */\n /* c8 ignore next 3 */\n associate(edit, _shift, path, key, value, addedLeaf) {\n return associateCollision(this, edit, path, key, value, addedLeaf)\n }\n\n /**\n * @param {API.Edit|null} edit\n * @param {API.Uint32} _shift\n * @param {ReturnType<C['Path']['from']>} path\n * @param {K} key\n * @param {{value:boolean}} removedLeaf\n * @returns {API.Node<T, K, C>}\n */\n /* c8 ignore next 3 */\n dissociate(edit, _shift, path, key, removedLeaf) {\n return dissociateCollision(this, edit, path, key, removedLeaf)\n }\n\n /**\n * @param {API.Edit|null} edit\n * @returns {this}\n */\n /* c8 ignore next 3 */\n fork(edit = null) {\n return /** @type {this} */ (forkCollision(this, edit))\n }\n\n /**\n * @returns {IterableIterator<[K, T]>}\n */\n /* c8 ignore next 3 */\n entries() {\n return entries(this)\n }\n\n /**\n * @returns {IterableIterator<K>}\n */\n /* c8 ignore next 3 */\n keys() {\n return keys(this)\n }\n\n /**\n * @returns {IterableIterator<T>}\n */\n /* c8 ignore next 3 */\n values() {\n return values(this)\n }\n}\n\n/**\n * @template T\n * @template {string} K\n * @template {API.Config} C\n * @template X\n * @param {API.HashCollisionNode<T, K, C>} node\n * @param {K} name\n * @param {X} notFound\n * @returns {T|X}\n */\n/* c8 ignore next 8 */\nexport const lookupCollision = (node, name, notFound) => {\n const { children: entries, count } = node\n // find where entry with this name belongs\n const n = findHashCollisionNodeIndex(entries, count, name)\n // if entry name at this index matches given name return the value otherwise\n // return `notFound` as we have no such entry.\n return entries[n] === name ? /** @type {T} */ (entries[n + 1]) : notFound\n}\n\n/**\n * @template T\n * @template {string} K\n * @template {API.Config} C\n * @template {string} R\n * @param {API.HashCollisionNode<T, K, C>} node\n * @param {API.Edit|null} edit\n * @param {ReturnType<C['Path']['from']>} key\n * @param {K|R} name\n * @param {T} value\n * @param {{value:boolean}} addedLeaf\n * @returns {API.HashCollisionNode<T, K | R, C>}\n */\n/* c8 ignore next 26 */\nexport const associateCollision = (node, edit, key, name, value, addedLeaf) => {\n const { children, count } = node\n\n const index = findHashCollisionNodeIndex(children, count, name)\n // If entry at this index has a different name we fork the node and\n // add a new entry.\n if (children[index] !== name) {\n const newNode = node.fork(edit)\n addedLeaf.value = true\n newNode.count += 1\n newNode.children.splice(index, key, value)\n return newNode\n }\n // If name is the same but value is not we fork the node and update\n // the value\n else if (children[index + 1] !== value) {\n const newNode = node.fork(edit)\n newNode.children[index + 1] = value\n return newNode\n }\n // If we got this far entry with this exact name and value is already\n // present making this a noop, so we return this node back.\n else {\n return node\n }\n}\n\n/**\n * @template T\n * @template {string} K\n * @template {API.Config} C\n * @param {API.HashCollisionNode<T, K, C>} node\n * @param {API.Edit|null} edit\n * @param {ReturnType<C['Path']['from']>} hash\n * @param {K} name\n * @param {{value:boolean}} removedLeaf\n * @returns {API.Node<T, K, C>}\n */\n/* c8 ignore next 37 */\nexport const dissociateCollision = (node, edit, hash, name, removedLeaf) => {\n const { children: entries, count, config } = node\n const index = findHashCollisionNodeIndex(entries, count, name)\n // If there is no entry with a the given name this is noop so we just\n // return back this node.\n if (entries[index] !== name) {\n return node\n } else {\n removedLeaf.value = true\n // If conflict contained only two entries removing one of them would\n // leave us with no conflict which is why we create a new node with a\n // an entry other than one that would correspond provided name\n if (count === 2) {\n const offset = index === 0 ? 2 : 0\n return /** @type {API.BitmapIndexedNode<T, K, C>} */ (\n associate(\n create(config),\n edit,\n 0,\n hash,\n /** @type {K} */ (entries[offset]),\n /** @type {T} */ (entries[offset + 1]),\n removedLeaf\n )\n )\n }\n // otherwise we got this far we have more than two colliding entries in\n // which case we simply remove one corresponding to given `name`.\n //\n else {\n const newNode = node.fork(edit)\n newNode.children.splice(index, 2)\n newNode.count -= 1\n return newNode\n }\n }\n}\n\n/**\n * @template T\n * @template {string} K\n * @template {API.Config} C\n * @param {API.HashCollisionNode<T, K, C>} node\n * @param {API.Edit|null} edit\n * @returns {API.HashCollisionNode<T, K, C>}\n */\n/* c8 ignore next 12 */\nexport const forkCollision = (node, edit = null) => {\n if (canEdit(node.edit, edit)) {\n return node\n } else {\n return new HashCollisionNode(\n edit,\n node.count,\n /** @type {API.CollisionEntries<T, K>} */ (node.children.slice()),\n node.config\n )\n }\n}\n\n/**\n * Finds the index inside collision entries where given `key` belongs, which is\n * index where `key <= entries[index]` is `true`. If no index satisfies this\n * constraint index will be `entries.length` indicating that key belongs in the\n * last position.\n *\n * @template T\n * @template {string} K\n * @param {API.CollisionEntries<T, K>} entries\n * @param {number} count\n * @param {K} key\n */\n/* c8 ignore next 8 */\nconst findHashCollisionNodeIndex = (entries, count, key) => {\n let index = 0\n // increase index until we find a index where key <= entries[index]\n while (index < count && entries[index] > key) {\n index += 2\n }\n return index\n}\n\nconst defaultConfig = { bitWidth: 32, BitField, Path }\n/**\n * @template T\n * @template {string} K\n * @template {API.Config} C\n * @param {API.Edit|null} [edit]\n * @param {C} config\n * @returns {API.BitmapIndexedNode<T, K, C>}\n */\nexport const create = (config, edit = null) =>\n new BitmapIndexedNode(\n edit,\n config.BitField.empty(Math.pow(2, config.bitWidth)),\n config.BitField.empty(Math.pow(2, config.bitWidth)),\n /** @type {API.Children<T, K, C>} */ ([]),\n config\n )\n\n/**\n * @template T, U\n * @template {string} K\n * @param {API.BitmapIndexedNode<T, K>} node\n * @param {K} key\n * @param {U} notFound\n */\nexport const get = (node, key, notFound) =>\n lookup(node, 0, node.config.Path.from(key), key, notFound)\n\n/**\n * @template T, U\n * @template {string} K\n * @template Bits, BitMap\n * @param {API.BitmapIndexedNode<T, K, API.Config<Bits, BitMap>>} node\n * @param {API.Uint32} depth\n * @param {Bits} path\n * @param {K} key\n * @param {U} notFound\n * @returns {T|U}\n */\nexport const lookup = (node, depth, path, key, notFound) => {\n const { datamap, nodemap, config } = node\n const { Path, BitField } = config\n const offset = Path.at(path, depth)\n\n // If bit is set in the data bitmap we have some key, value under the\n // matching hash segment.\n if (BitField.get(datamap, offset)) {\n const index = BitField.popcount(datamap, offset)\n // If key matches actual key in the map we found the the value\n // otherwise we did not.\n if (keyAt(node, index) === key) {\n return valueAt(node, index)\n } else {\n return notFound\n }\n }\n // If bit is set in the node bitmapt we have a node under the\n // matching hash segment.\n else if (BitField.get(nodemap, offset)) {\n // Resolve node and continue lookup within it.\n const child = resolveNode(node, offset)\n return child.lookup(depth + 1, path, key, notFound)\n }\n // If we have neither node nor key-pair for this hash segment\n // we return notFound.\n else {\n return notFound\n }\n}\n\n/**\n * @template T, U\n * @template {string} K\n * @template {string} R\n * @template {API.Config} C\n * @param {API.BitmapIndexedNode<T, K, C>} node\n * @param {API.Edit|null} edit\n * @param {R} key\n * @param {T} value\n * @param {{ value: boolean }} addedLeaf\n * @returns {API.BitmapIndexedNode<T, K|R, C>}\n */\nexport const set = (node, edit, key, value, addedLeaf) =>\n associate(node, edit, 0, node.config.Path.from(key), key, value, addedLeaf)\n\n/**\n * @template T\n * @template {string} K\n * @template {string} R\n * @template {API.Config} C\n * @param {API.BitmapIndexedNode<T, K, C>} node\n * @param {API.Edit|null} edit\n * @param {API.Uint32} depth\n * @param {ReturnType<C['Path']['from']>} path\n * @param {K|R} key\n * @param {T} value\n * @param {{value:boolean}} addedLeaf\n * @returns {API.BitmapIndexedNode<T, K | R, C>}\n */\nexport const associate = (node, edit, depth, path, key, value, addedLeaf) => {\n const { datamap, nodemap, config } = node\n const { Path, BitField } = config\n const offset = Path.at(path, depth)\n // If bit is set in the data bitmap we have some key, value under the\n // matching hash segment.\n if (BitField.get(datamap, offset)) {\n const index = BitField.popcount(datamap, offset)\n const found = keyAt(node, index)\n // If we have entry with given name and value is the same return node\n // as is, otherwise fork node and set the value.\n if (key === found) {\n return valueAt(node, index) === value\n ? node\n : forkAndSet(node, edit, index, value)\n }\n // Otherwise we need to create a branch to contain current key, value and\n // one been passed.\n else {\n const branch = mergeTwoLeaves(\n config,\n edit,\n depth + 1,\n Path.from(found),\n found,\n valueAt(node, index),\n path,\n key,\n value\n )\n addedLeaf.value = true\n\n return migrateLeafToBranch(node, edit, offset, branch)\n }\n }\n // If bit is set in the node bitmap we have a branch under the current\n // hash slice.\n else if (BitField.get(nodemap, offset)) {\n const child = resolveNode(node, offset)\n const newChild = child.associate(\n edit,\n depth + 1,\n path,\n key,\n value,\n addedLeaf\n )\n\n if (child === newChild) {\n return node\n } else {\n return copyAndSetChild(node, edit, offset, newChild)\n }\n }\n // If we have neither node nor a key-value for this hash segment. We copy\n // current children and add new key-value pair\n else {\n const index = BitField.popcount(datamap, offset)\n addedLeaf.value = true\n\n /** @type {API.BitmapIndexedNode<T, K|R, C>} */\n const newNode = node.fork(edit)\n\n // Capture new entry in the data bitmap\n newNode.datamap = BitField.set(datamap, offset)\n newNode.children.splice(keyPosition(index), 0, key, value)\n return newNode\n }\n}\n\n/**\n * @template T\n * @template {string} K\n * @template {API.Config} C\n * @param {API.BitmapIndexedNode<T, K, C>} node\n * @param {API.Edit|null} edit\n * @param {K} key\n * @param {{ value: boolean }} removedLeaf\n * @returns {API.BitmapIndexedNode<T, K, C>}\n */\nconst remove = (node, edit, key, removedLeaf) =>\n dissociate(node, edit, 0, node.config.Path.from(key), key, removedLeaf)\n\nexport { remove as delete }\n\n/**\n * @template T\n * @template {string} K\n * @template {API.Config} C\n * @param {API.BitmapIndexedNode<T, K, C>} source\n * @param {API.Edit|null} edit\n * @param {API.Uint32} depth\n * @param {ReturnType<C['Path']['from']>} path\n * @param {K} key\n * @param {{value:boolean}} removedLeaf\n * @returns {API.BitmapIndexedNode<T, K, C>}\n */\nexport const dissociate = (source, edit, depth, path, key, removedLeaf) => {\n const { datamap, nodemap, config } = source\n const { BitField, Path } = config\n const offset = Path.at(path, depth)\n // If bit is set in the data bitmap we have an entry under the\n // matching hash segment.\n if (BitField.get(datamap, offset)) {\n const index = BitField.popcount(datamap, offset)\n // If key at a given index matches given `name` we fork a node and remove\n // the entry\n if (key === keyAt(source, index)) {\n removedLeaf.value = true\n const node = fork(source, edit)\n // Update the bitmap\n node.datamap = BitField.unset(source.datamap, offset)\n // remove the child\n node.children.splice(keyPosition(index), 2)\n return node\n }\n // otherwise we don't have such entry so we return node back as is.\n else {\n return source\n }\n }\n // If bit is set in the node bitmapt we have a node under the\n // matching hash segment.\n else if (BitField.get(nodemap, offset)) {\n const node = resolveNode(source, offset)\n const child = node.dissociate(edit, depth + 1, path, key, removedLeaf)\n // if child has a single element we need to canonicalize\n if (hasSingleLeaf(child)) {\n // if source has a single child, we collapse and return the child\n // otherwise we inline the child.\n return hasSingleNode(source)\n ? child\n : inlineChild(source, edit, offset, child)\n } else if (node === child) {\n return source\n } else {\n return copyAndSetChild(source, edit, offset, child)\n }\n }\n // If we have neither node nor a key-value for this hash segment this is a\n // noop.\n else {\n return source\n }\n}\n\n/**\n * @template T\n * @template {string} K\n * @template {API.Config} C\n * @param {API.Node<T, K, C>} node\n * @returns {IterableIterator<[K, T]>}\n */\nexport const entries = function* ({ children }) {\n let offset = 0\n const count = children.length\n while (offset < count) {\n const key = children[offset]\n if (typeof key === \"string\") {\n offset += 1\n const value = children[offset]\n yield /** @type {[K, T]} */ ([key, value])\n offset += 1\n } else {\n break\n }\n }\n\n while (offset < count) {\n const node = /** @type {API.BitmapIndexedNode<T, K, C>} */ (\n children[offset]\n )\n yield* node.entries()\n offset += 1\n }\n}\n\n/**\n * @template T\n * @template {string} K\n * @template {API.Config} C\n * @param {API.BitmapIndexedNode<T, K, C>} node\n * @param {API.Edit|null} edit\n * @returns {API.BitmapIndexedNode<T, K, C>}\n */\nexport const fork = (node, edit) => {\n if (canEdit(node.edit, edit)) {\n return node\n } else {\n const newNode = new BitmapIndexedNode(\n edit,\n node.datamap,\n node.nodemap,\n node.children.slice(),\n node.config\n )\n return newNode\n }\n}\n\n/**\n * @template T\n * @template {string} K\n * @template {API.Config} C\n * @param {API.Node<T, K, C>} node\n * @returns {IterableIterator<K>}\n */\nexport const keys = function* ({ children }) {\n let offset = 0\n const count = children.length\n while (offset < count) {\n const key = children[offset]\n if (typeof key === \"string\") {\n yield /** @type {K} */ (key)\n offset += 2\n } else {\n break\n }\n }\n\n while (offset < count) {\n const node = /** @type {API.BitmapIndexedNode<T, K>} */ (children[offset])\n yield* node.keys()\n offset += 1\n }\n}\n\n/**\n * @template T\n * @template {string} K\n * @template {API.Config} C\n * @param {API.Node<T, K, C>} node\n * @returns {IterableIterator<T>}\n */\nexport const values = function* ({ children }) {\n let offset = 0\n const count = children.length\n while (offset < count) {\n const key = children[offset]\n if (typeof key === \"string\") {\n offset += 1\n yield /** @type {T} */ (children[offset])\n offset += 1\n } else {\n break\n }\n }\n\n while (offset < count) {\n const node = /** @type {API.BitmapIndexedNode<T, K>} */ (children[offset])\n yield* node.values()\n offset += 1\n }\n}\n\n/**\n * @template T\n * @template {string} K\n * @template {API.Config} C\n * @param {API.BitmapIndexedNode<T, K, C>} node\n * @param {API.Edit|null} edit\n * @param {number} offset\n * @param {T} value\n */\nexport const forkAndSet = (node, edit, offset, value) => {\n const newNode = node.fork(edit)\n newNode.children[valuePosition(offset)] = value\n return newNode\n}\n\n/**\n * @template T\n * @template {string} K\n * @template {API.Config} C\n * @param {API.BitmapIndexedNode<T, K, C>} source\n * @param {API.Edit|null} edit\n * @param {number} offset\n * @param {API.Node<T, K, C>} child\n * @returns {API.BitmapIndexedNode<T, K, C>}\n */\nexport const inlineChild = (source, edit, offset, child) => {\n const { datamap, nodemap, config } = source\n const { BitField } = config\n const node = fork(source, edit)\n\n // remove the node that we are inlining\n node.children.splice(nodePosition(source, offset), 1)\n // add key-value pair where it wolud fall\n node.children.splice(\n keyPosition(BitField.popcount(datamap, offset)),\n 0,\n child.children[0],\n child.children[1]\n )\n\n node.datamap = BitField.set(datamap, offset)\n node.nodemap = BitField.unset(nodemap, offset)\n\n return node\n}\n\n/**\n * @template T\n * @template {string} K\n * @template {API.Config} C\n * @param {API.BitmapIndexedNode<T, K, C>} node\n * @param {API.Edit|null} edit\n * @param {number} offset\n * @param {API.Node<T, K, C>} child\n * @returns {API.BitmapIndexedNode<T, K, C>}\n */\nexport const copyAndSetChild = (node, edit, offset, child) => {\n const newNode = fork(node, edit)\n newNode.children[nodePosition(node, offset)] = child\n return newNode\n}\n\n/**\n * @template T\n * @template {string} K\n * @template {API.Config} C\n * @param {API.BitmapIndexedNode<T, K, C>} source\n * @param {API.Edit|null} edit\n * @param {number} offset\n * @param {API.Node<T, K, C>} branch\n * @returns {API.BitmapIndexedNode<T, K, C>}\n */\nexport const migrateLeafToBranch = (source, edit, offset, branch) => {\n const { nodemap, datamap, config } = source\n const { BitField } = config\n const index = BitField.popcount(datamap, offset)\n // Previous id corresponds to the key position\n const oldId = keyPosition(index)\n const newId = nodePosition(source, offset)\n\n const node = fork(source, edit)\n\n // remove an old leaf\n node.datamap = BitField.unset(datamap, offset)\n node.children.splice(oldId, 2)\n\n // add a new branch\n node.nodemap = BitField.set(nodemap, offset)\n node.children.splice(newId - 1, 0, branch)\n\n return node\n}\n\n/**\n * @template T\n * @template {string} K\n * @template {API.Config} C\n * @param {C} config\n * @param {API.Edit|null} edit\n * @param {number} depth\n * @param {ReturnType<C['Path']['from']>} oldPath\n * @param {K} oldKey\n * @param {T} oldValue\n * @param {ReturnType<C['Path']['from']>} newPath\n * @param {K} newKey\n * @param {T} newValue\n * @returns {API.Node<T, K, C>}\n */\nexport const mergeTwoLeaves = (\n config,\n edit,\n depth,\n oldPath,\n oldKey,\n oldValue,\n newPath,\n newKey,\n newValue\n) => {\n const { BitField, Path } = config\n // If we have reached end of the path we can no longer create another\n // `BitmapIndexedNode`, instead we create a node containing (hash) colliding\n // entries\n /* c8 ignore next 7 */\n if (Path.size < depth) {\n return new HashCollisionNode(\n edit,\n 2,\n [oldKey, oldValue, newKey, newValue],\n config\n )\n } else {\n const oldOffset = Path.at(oldPath, depth)\n const newOffset = Path.at(newPath, depth)\n // If offsets still match create another intermediery node and merge these\n // two nodes at next depth level.\n if (oldOffset === newOffset) {\n return new BitmapIndexedNode(\n edit,\n BitField.empty(Math.pow(2, config.bitWidth)),\n BitField.from([oldOffset], Math.pow(2, config.bitWidth)),\n [\n mergeTwoLeaves(\n config,\n edit,\n depth + 1,\n oldPath,\n oldKey,\n oldValue,\n newPath,\n newKey,\n newValue\n ),\n ],\n config\n )\n }\n // otherwise create new node with both key-value pairs as it's children\n else {\n return new BitmapIndexedNode(\n edit,\n BitField.from([oldOffset, newOffset], Math.pow(2, config.bitWidth)),\n BitField.empty(Math.pow(2, config.bitWidth)),\n /** @type {API.Children<T, K, C>} */\n (\n // We insert child with a lower index first so that we can derive it's\n // index on access via popcount\n oldOffset < newOffset\n ? [oldKey, oldValue, newKey, newValue]\n : [newKey, newValue, oldKey, oldValue]\n ),\n config\n )\n }\n }\n}\n\n/**\n * @template {string} K\n * @param {API.BitmapIndexedNode<unknown, K>} node\n * @param {number} index\n */\nexport const keyAt = ({ children }, index) =>\n /** @type {K} */ (children[keyPosition(index)])\n\n/**\n * @param {number} index\n */\nexport const keyPosition = index => index * 2\n\n/**\n * @template T\n * @param {API.BitmapIndexedNode<T>} node\n * @param {number} index\n */\nexport const valueAt = ({ children }, index) =>\n /** @type {T} */ (children[valuePosition(index)])\n\n/**\n * @param {number} index\n */\nexport const valuePosition = index => index * 2 + 1\n\n/**\n * @template T\n * @template {string} K\n * @template {API.Config} C\n * @param {API.BitmapIndexedNode<T, K, C>} node\n * @param {number} offset\n * @returns {API.BitmapIndexedNode<T, K, C>|API.HashCollisionNode<T, K, C>}\n */\nexport const resolveNode = (node, offset) =>\n /** @type {API.BitmapIndexedNode<T, K, C>|API.HashCollisionNode<T, K, C>} */ (\n node.children[nodePosition(node, offset)]\n )\n\n/**\n * @template T\n * @template {string} K\n * @template {API.Config} C\n * @param {API.BitmapIndexedNode<T, K, C>} node\n * @param {number} offset\n */\nconst nodePosition = ({ children, nodemap, config }, offset) =>\n children.length - 1 - config.BitField.popcount(nodemap, offset)\n\n/**\n * @param {API.Edit|null} owner\n * @param {API.Edit|null} editor\n */\nconst canEdit = (owner, editor) => owner != null && owner === editor\n\n/**\n * Returns `true` if node has a single entry. It also refines type to\n * `BitmapIndexedNode` because `HashCollisionNode` is normalized to\n * `BitmapIndexedNode` when it contains only a single entry.\n *\n * @template T\n * @template {string} K\n * @template {API.Config} C\n * @param {API.Node<T, K, C>} node\n * @returns {node is API.BitmapIndexedNode<T, K, C>}\n */\nconst hasSingleLeaf = node => node.nodeArity === 0 && node.dataArity === 1\n\n/**\n * Returns `true` if node has a single childe node and 0 child leaves.\n *\n * @template T\n * @template {string} K\n * @template {API.Config} C\n * @param {API.BitmapIndexedNode<T, K, C>} node\n * @returns {node is API.BitmapIndexedNode<T, K, C>}\n */\nconst hasSingleNode = ({ config: { BitField }, datamap, nodemap }) =>\n BitField.popcount(datamap) === 0 && BitField.popcount(nodemap) === 1\n","import { bytes } from 'multiformats'\nimport { from } from 'multiformats/hashes/hasher'\n// @ts-expect-error no types\nimport mur from 'murmurhash3js-revisited'\n\n/**\n * @param {number} number\n * @returns {Uint8Array}\n */\nfunction fromNumberTo32BitBuf (number) {\n const bytes = new Array(4)\n for (let i = 0; i < 4; i++) {\n bytes[i] = number & 0xff\n number = number >> 8\n }\n return new Uint8Array(bytes)\n}\n\nexport const murmur332 = from({\n name: 'murmur3-32',\n code: 0x23,\n encode: (input) => fromNumberTo32BitBuf(mur.x86.hash32(input))\n})\n\nexport const murmur3128 = from({\n name: 'murmur3-128',\n code: 0x22,\n encode: (input) => bytes.fromHex(mur.x64.hash128(input))\n})\n\n// A special-use 0x22 that truncates 64 bits, specifically for use in the UnixFS HAMT\nexport const murmur364 = from({\n name: 'murmur3-x64-64',\n code: 0x22,\n encode: (input) => bytes.fromHex(mur.x64.hash128(input)).subarray(0, 8)\n})\n","import * as API from \"./api.js\"\nconst utf8 = new TextEncoder()\nimport { murmur364 } from \"@multiformats/murmur3\"\n\n/**\n * @param {Uint8Array} bytes\n */\n/* c8 ignore next 2 */\nexport const hash64 = bytes =>\n /** @type {Uint8Array} */ (murmur364.encode(bytes))\n\n/**\n * @param {Partial<API.Options<Uint8Array>>} options\n * @returns {API.Path<Uint8Array>}\n */\n/* c8 ignore next 25 */\nexport const configure = ({ bitWidth = 8, hash = hash64 } = {}) => {\n const hashSize = hash(new Uint8Array()).byteLength\n\n /**\n * @param {Uint8Array} path\n * @param {number} depth\n * @returns {API.Uint32}\n */\n const at = (path, depth) => {\n const offset = depth * bitWidth\n if (offset > hashSize) {\n throw new RangeError(`Out of bounds`)\n }\n\n return toInt(path, offset, bitWidth)\n }\n\n /**\n * @param {string} key\n * @returns {Uint8Array}\n */\n const from = key => hash(utf8.encode(key))\n\n return { from, at, size: Math.ceil((hashSize * 8) / bitWidth) }\n}\n\n/**\n * @param {Uint8Array} bytes\n * @param {number} offset - bit offset\n * @param {number} count - number of bits to consume\n */\nexport const toInt = (bytes, offset, count) => {\n let byteOffset = (offset / 8) | 0\n let bitOffset = offset % 8\n let desired = count\n let bits = 0\n while (desired > 0 && byteOffset < bytes.byteLength) {\n const byte = bytes[byteOffset]\n const available = 8 - bitOffset\n\n const taking = available < desired ? available : desired\n const bitsLeft = 8 - bitOffset - taking\n // mask to turn of bits before bitOffset\n const mask = 0xff >> bitOffset\n // turn off offset bits and shift to drop remaining bit on the right\n const value = (mask & byte) >> bitsLeft\n bits = (bits << taking) + value\n\n desired -= taking\n byteOffset++\n bitOffset = 0\n }\n\n return bits\n}\n","import { bitCount, popcount as popcount32 } from \"./Uint32.js\"\nimport * as API from \"./api.js\"\n\n/**\n * @param {number} size\n */\nexport const empty = (size = 256) => {\n if (size % 8 !== 0) {\n throw new Error(`Must be multiple of 8`)\n }\n\n return new Uint8Array(size / 8)\n}\n\n/**\n * Creates bitfield with specific bits set.\n *\n * @param {number[]} bits\n * @param {number} [size]\n * @returns {Uint8Array}\n */\nexport const from = (bits, size) => {\n let bitfield = empty(size)\n for (const index of bits) {\n const { byte, byteOffset, bitOffset } = at(bitfield, index)\n bitfield[byteOffset] = byte | (1 << bitOffset)\n }\n return bitfield\n}\n\n/**\n * @param {Uint8Array} bitfield\n */\nexport const size = bitfield => bitfield.byteLength * 8\n\n/**\n * Compute offset for the given index\n *\n * @param {Uint8Array} bitfield\n * @param {number} index\n */\nconst at = (bitfield, index) => {\n const byteOffset = bitfield.byteLength - 1 - ((index / 8) | 0)\n const bitOffset = index % 8\n const byte = bitfield[byteOffset]\n\n return { byte, byteOffset, bitOffset }\n}\n\n/**\n * Set a particular bit.\n *\n * @param {Uint8Array} bytes\n * @param {number} index\n * @param {number} byte\n * @returns {Uint8Array}\n */\nconst setByte = (bytes, index, byte) => {\n if (bytes[index] !== byte) {\n const result = bytes.slice(0)\n result[index] = byte\n return result\n }\n return bytes\n}\n\n/**\n * Set a particular bit.\n *\n * @param {Uint8Array} bitfield\n * @param {number} index\n * @returns {Uint8Array}\n */\nexport const set = (bitfield, index) => {\n const { byte, byteOffset, bitOffset } = at(bitfield, index)\n return setByte(bitfield, byteOffset, byte | (1 << bitOffset))\n}\n\n/**\n * Unsets a particular bit.\n\n * @param {Uint8Array} bitfield\n * @param {number} index\n * @returns {Uint8Array}\n */\nexport const unset = (bitfield, index) => {\n const { byte, byteOffset, bitOffset } = at(bitfield, index)\n return setByte(bitfield, byteOffset, byte & (0xff ^ (1 << bitOffset)))\n}\n\n/**\n * Returns `true` if bit at given index is set.\n *\n * @param {Uint8Array} bitfield\n * @param {number} index\n */\nexport const get = (bitfield, index) => {\n var { byte, bitOffset } = at(bitfield, index)\n return ((byte >> bitOffset) & 0x1) !== 0\n}\n\n/**\n * @param {Uint8Array} bitfield\n */\nexport const toBytes = bitfield => bitfield\n\n/**\n * @param {Uint8Array} bytes\n */\nexport const fromBytes = bytes => bytes\n\n/**\n * @param {Uint8Array} bitfield\n * @param {number} index\n */\nexport const popcount = (bitfield, index = bitfield.byteLength * 8) => {\n const { byteOffset, bitOffset, byte } = at(bitfield, index)\n\n let count = popcount32(byte, bitOffset)\n let offset = bitfield.byteLength - 1\n while (offset > byteOffset) {\n const byte = bitfield[offset]\n count += bitCount(byte)\n offset--\n }\n\n return count\n}\n\n/**\n * @param {Uint8Array} left\n * @param {Uint8Array} right\n */\nexport const or = (left, right) => {\n const result = left.slice()\n let offset = 0\n while (offset < left.length) {\n result[offset] |= right[offset]\n offset++\n }\n return result\n}\n\n/**\n * @param {Uint8Array} left\n * @param {Uint8Array} right\n */\nexport const and = (left, right) => {\n const result = left.slice()\n let offset = 0\n while (offset < left.length) {\n result[offset] &= right[offset]\n offset++\n }\n return result\n}\n\nexport { API }\n","export * from \"./api.js\"\nimport * as Node from \"./node.js\"\nimport { create as createBitmapIndexedNode } from \"./node.js\"\nimport * as API from \"./api.js\"\nimport * as Uint32Path from \"./path/Uint32.js\"\nimport * as Uint8ArrayPath from \"./path/Uint8Array.js\"\nimport * as Uint32BitField from \"./bitfield/Uint32.js\"\nimport * as Uint8ArrayBitField from \"./bitfield/Uint8Array.js\"\n\nconst NOT_FOUND = new RangeError(\"Not Found\")\n\n/**\n * A `bitWidth` determines the number of bits of the hash to use for index\n * calculation at each level of the tree. In first layer will distribute\n * children by the first `bitWidth` bits of the key hash. In the next layer\n * next `bitWidth` number of bits of the key hash are used to determine\n * placement of it's children and so on. Each node in the tree will hold\n * `2 ** bitWidth` number of elements.\n *\n * For example when we insert an entry named `result` it will generate a\n * folowing hash (with murmur3 32) `442064690` which in binary would be\n *\n * ```\n * 11010010110010101111100110010\n * ```\n *\n * Which will correspond to a following key path\n *\n * ```\n * 11010/01011/00101/01111/10011/0010\n * ```\n *\n * Whis in decimals would be\n *\n * ```ts\n * 26/11/5/15/19/2'\n * ```\n *\n * If we then insert `fish` it would produce following path\n *\n * ```ts\n * 26/3/4/18/28/19/1\n * ```\n * @template [V=unknown]\n * @template {string} [K=string]\n * @template {API.Config} [C=API.Config<API.Uint32>]\n * @param {Partial<C>} [options]\n * @returns {API.PersistentHashMap<V, K, C>}\n */\nexport const empty = options => {\n const config = configure(options)\n return new PersistentHashMap(0, createBitmapIndexedNode(config, null), config)\n}\n\n/**\n * @template {API.Config} [C=API.Config<API.Uint32>]\n * @param {Partial<C>} config\n * @returns {C}\n */\nconst configure = ({\n bitWidth = 5,\n /* c8 ignore next 4 */\n BitField = bitWidth === 5 ? Uint32BitField : Uint8ArrayBitField,\n Path = bitWidth === 5\n ? Uint32Path.configure({ bitWidth })\n : Uint8ArrayPath.configure({ bitWidth }),\n} = {}) => /** @type {C} */ ({ bitWidth, BitField, Path })\n\n/**\n * Creates HashMap from the provided entries.\n *\n * @template [V=unknown]\n * @template {string} [K=string]\n * @template {API.Config} [C=API.Config<API.Uint32>]\n * @param {Iterable<[K, V]>} entries\n * @param {Partial<C>} [options]\n * @returns {API.PersistentHashMap<V, K, C>}\n */\nexport const from = (entries, options) => {\n const node = /** @type {API.HashMapBuilder<V, K, C>} */ (builder(options))\n for (const [key, value] of entries) {\n node.set(key, value)\n }\n\n return node.build()\n}\n\n/**\n * @template T\n * @template {string} K\n * @param {API.HAMT<T, K>} hamt\n * @param {K} key\n */\nexport const has = (hamt, key) =>\n Node.get(hamt.root, key, NOT_FOUND) !== NOT_FOUND\n\n/**\n * @template T\n * @template {string} K\n * @template [U=undefined]\n * @param {API.HAMT<T, K>} hamt\n * @param {K} key\n * @param {U} notFound\n * @returns {T|U}\n */\nexport const get = (hamt, key, notFound = /** @type {U} */ (undefined)) =>\n Node.get(hamt.root, key, notFound)\n\n/**\n * @template {string} K\n * @template T\n * @template {API.Config} C\n * @param {Partial<C>} [options]\n * @returns {API.HashMapBuilder<T, K, C>}\n */\nexport const builder = options => {\n const edit = {}\n const config = configure(options)\n return new HashMapBuilder(\n edit,\n 0,\n createBitmapIndexedNode(config, edit),\n config\n )\n}\n\n/**\n * @template T\n * @template {string} K\n * @template {API.Config} C\n * @implements {API.PersistentHashMap<T, K, C>}\n */\nclass PersistentHashMap {\n /**\n *\n * @param {number} count\n * @param {API.BitmapIndexedNode<T, K, C>} root\n * @param {C} config\n */\n constructor(count = 0, root, config) {\n this.count = count\n this.root = root\n this.config = config\n }\n\n get size() {\n return this.count\n }\n\n clone() {\n return new PersistentHashMap(this.count, this.root, this.config)\n }\n\n /**\n * @returns {API.PersistentHashMap<T, K, C>}\n */\n empty() {\n return new PersistentHashMap(\n 0,\n createBitmapIndexedNode(this.config, null),\n this.config\n )\n }\n /**\n * @param {K} key\n * @returns {boolean}\n */\n has(key) {\n return has(this, key)\n }\n /**\n * @param {K} key\n * @returns {T|undefined}\n */\n get(key) {\n return Node.get(this.root, key, undefined)\n }\n /**\n * @template {string} R\n * @param {R} key\n * @param {T} value\n * @returns {PersistentHashMap<T, K|R, C>}\n */\n set(key, value) {\n const addedLeaf = { value: false }\n const root = Node.set(this.root, null, key, value, addedLeaf)\n if (root === this.root) {\n return this\n } else {\n return new PersistentHashMap(\n addedLeaf.value ? this.count + 1 : this.count,\n root,\n this.config\n )\n }\n }\n /**\n * @param {K} key\n */\n delete(key) {\n const root = Node.delete(this.root, null, key, { value: false })\n\n if (root === this.root) {\n return this\n } else {\n return new PersistentHashMap(this.count - 1, root, this.config)\n }\n }\n\n /* c8 ignore next 3 */\n get bitField() {\n return this.config.BitField.or(this.root.datamap, this.root.nodemap)\n }\n\n [Symbol.iterator]() {\n return this.entries()\n }\n\n entries() {\n return this.root.entries()\n }\n keys() {\n return this.root.keys()\n }\n values() {\n return this.root.values()\n }\n\n /**\n * @returns {API.HashMapBuilder<T, K, C>}\n */\n\n createBuilder() {\n return new HashMapBuilder({}, this.count, this.root, this.config)\n }\n}\n\n/**\n * @template T\n * @template {string} K\n * @template {API.Config} C\n */\nclass HashMapBuilder {\n /**\n * @param {API.Edit} edit\n * @param {number} count\n * @param {API.BitmapIndexedNode<T, K, C>} root\n * @param {C} config\n */\n constructor(edit, count, root, config) {\n /**\n * @type {API.Edit|null}\n * @private\n */\n this.edit = edit\n /**\n * @private\n */\n this.count = count\n this.root = root\n this.config = config\n }\n\n get size() {\n if (this.edit) {\n return this.count\n } else {\n throw new Error(`.size was accessed on the finalized builder`)\n }\n }\n /**\n * @template {string} R\n * @param {R} key\n * @param {T} value\n * @returns {HashMapBuilder<T, K|R, C>}\n */\n set(key, value) {\n if (this.edit) {\n const addedLeaf = { value: false }\n const root = Node.set(this.root, this.edit, key, value, addedLeaf)\n\n if (this.root !== root) {\n this.root = /** @type {API.BitmapIndexedNode<T, K, C>} */ (root)\n }\n\n if (addedLeaf.value) {\n this.count += 1\n }\n\n return this\n } else {\n throw new Error(`.set was called on the finalized builder`)\n }\n }\n /**\n * @param {K} key\n */\n delete(key) {\n if (this.edit) {\n if (this.count === 0) {\n return this\n }\n const removedLeaf = { value: false }\n const root = Node.delete(this.root, this.edit, key, removedLeaf)\n\n if (root !== this.root) {\n this.root = root\n }\n if (removedLeaf.value) {\n this.count -= 1\n }\n return this\n } else {\n throw new Error(`.delete was called on the finalized builder`)\n }\n }\n\n build() {\n if (this.edit) {\n this.edit = null\n return new PersistentHashMap(this.count, this.root, this.config)\n } else {\n throw new Error(`.build was called on the finalized builder`)\n }\n }\n}\n","import * as API from \"./api.js\"\nimport { toInt } from \"./Uint8Array.js\"\nimport { murmur364 } from \"@multiformats/murmur3\"\nconst utf8 = new TextEncoder()\n\n/**\n * @param {Uint8Array} bytes\n */\nexport const hash64 = bytes =>\n /** @type {Uint8Array} */ (murmur364.encode(bytes))\n\n/**\n * @param {Partial<API.Options<Uint8Array>>} options\n * @returns {API.Path<Uint8Array>}\n */\nexport const configure = ({ bitWidth = 8, hash = hash64 }) => {\n const hashSize = hash(new Uint8Array()).byteLength\n const options = { bitWidth, hash, hashSize }\n\n /**\n * @param {Uint8Array} path\n * @param {number} depth\n * @returns {API.Uint32}\n */\n const at = (path, depth) => read(path, depth, options)\n\n /**\n * @param {string} key\n */\n const from = key => utf8.encode(key)\n\n return { at, from, size: Infinity }\n}\n\n/**\n * @param {Uint8Array} key\n * @param {number} depth\n * @param {object} options\n * @param {number} [options.bitWidth]\n * @param {number} options.hashSize\n * @param {(input:Uint8Array) => Uint8Array} options.hash\n */\nexport const read = (key, depth = 0, { bitWidth = 8, hash, hashSize }) => {\n // key digest consists of infinite number of hash frames that are computed\n // from key + frame n which looks like\n // [hash(key), hash([key, 1]), hash([key, n])]\n // You can think of the hash as concatination of all frames. Here we calculate\n // frame bit size from hash size as we going to use that several times.\n const frameBitSize = hashSize * 8\n\n // We start with 0 digest and required `bitCount` corresponding to `bitWith`.\n // In the loop we'll going to consume `bitCount` hash bits.\n let digest = 0\n let bitCount = bitWidth\n // Calculate absolute bit offset within the key digest.\n let bitOffset = bitWidth * depth\n while (bitCount > 0) {\n // We derive frame number based on current bit offset.\n const frameOffset = (bitOffset / frameBitSize) >> 0\n // Then we compute that hash frame\n const frame =\n frameOffset === 0 ? hash(key) : hash(appendByte(key, frameOffset))\n\n // compute bit offset within the current frame\n const offset =\n frameBitSize <= bitOffset ? bitOffset % frameBitSize : bitOffset\n // calculate number of bits remaining in this frame\n const maxBits = frameBitSize - offset\n // we will consume all required bits from frame if enough are available\n // otherwise we consume whatever's available and continue rest in the next\n // cycle(s).\n const count = maxBits < bitCount ? maxBits : bitCount\n digest = (digest << count) + toInt(frame, offset, count)\n bitCount -= count\n bitOffset += count\n }\n\n return digest\n}\n\n/**\n * @param {Uint8Array} source\n * @param {number} byte\n */\nconst appendByte = (source, byte) => {\n const bytes = new Uint8Array(source.byteLength + 1).fill(\n byte,\n source.byteLength\n )\n bytes.set(source)\n return bytes\n}\n","import * as HAMT from \"./lib.js\"\nimport * as Node from \"./node.js\"\nimport * as Path from \"./path/InfiniteUint8Array.js\"\n\nexport * from \"./api.js\"\n\nexport { Path }\n\nexport const bitWidth = 8\nexport const config = {\n bitWidth,\n Path: Path.configure({ bitWidth }),\n}\n\n/**\n * @param {HAMT.PersistentHashMap} hamt\n */\nexport const tableSize = hamt => Math.pow(2, hamt.config.bitWidth)\n\n/**\n * @template [T=unknown]\n * @template {string} [K=string]\n * @template {HAMT.Config} [C=HAMT.Config<Uint8Array>]\n * @param {Partial<C>} options\n * @returns {HAMT.PersistentHashMap<T, K, C>}\n */\nexport const empty = (options = /** @type {C} */ (config)) =>\n HAMT.empty(options)\n\n/**\n * @template [T=unknown]\n * @template {string} [K=string]\n * @template {HAMT.Config} [C=HAMT.Config<Uint8Array>]\n * @param {Partial<C>} options\n * @returns {HAMT.HashMapBuilder<T, K, C>}\n */\nexport const builder = (options = /** @type {C} */ (config)) =>\n HAMT.builder(options)\n\n/**\n * @template [V=unknown]\n * @template {string} [K=string]\n * @template {HAMT.Config} [C=HAMT.Config<Uint8Array>]\n * @param {Iterable<[K, V]>} entries\n * @param {Partial<C>} options\n */\nexport const from = (entries, options = /** @type {C} */ (config)) =>\n HAMT.from(entries, options)\n\n/**\n * @template T\n * @template {string} K\n * @template Bits, Bitmap\n * @param {HAMT.BitmapIndexedNode<T, K, HAMT.Config<Bits, Bitmap>>} hamt\n */\nexport const bitField = ({ datamap, nodemap, config: { BitField } }) =>\n withoutLeadingZeros(BitField.toBytes(BitField.or(datamap, nodemap)))\n\n/**\n * @param {Uint8Array} bytes\n */\nconst withoutLeadingZeros = bytes => {\n let offset = 0\n while (offset < bytes.byteLength) {\n if (bytes[offset] !== 0) {\n return bytes.subarray(offset)\n }\n offset += 1\n }\n return bytes.subarray(offset)\n}\n\n/**\n * Maps HAMT node into IPFS UnixFS compatible format.\n *\n * @template T\n * @template {string} K\n * @template {HAMT.Config} C\n * @param {HAMT.BitmapIndexedNode<T, K, C>} root\n * @returns {IterableIterator<{prefix:string, key:K, value:T, node?:void}|{prefix:string, node:HAMT.BitmapIndexedNode<T, K, C>}>}\n */\nexport const iterate = function* (root) {\n const { config, datamap, nodemap } = root\n const { BitField: bitfield } = config\n const size = bitfield.size(datamap)\n let bitOffset = 0\n let dataCount = 0\n while (bitOffset < size) {\n const prefix = bitOffset.toString(16).toUpperCase().padStart(2, \"0\")\n if (bitfield.get(datamap, bitOffset)) {\n const key = Node.keyAt(root, dataCount)\n yield {\n prefix,\n key,\n value: Node.valueAt(root, dataCount),\n }\n dataCount++\n } else if (bitfield.get(nodemap, bitOffset)) {\n yield {\n prefix,\n // UnixFS never contains hash collision nodes because it uses\n // inifinite hashes\n node: /** @type {HAMT.BitmapIndexedNode<T, K, C>} */ (\n Node.resolveNode(root, bitOffset)\n ),\n }\n }\n bitOffset++\n }\n}\n","\nimport * as PermaMap from \"@perma/map\"\nimport * as UnixFSPermaMap from \"@perma/map/unixfs\"\nimport * as PB from \"@ipld/dag-pb\"\nimport { murmur364 } from \"@multiformats/murmur3\"\nimport { Block } from 'multiformats/block'\nimport * as API from \"./directory/api.js\"\nimport * as File from \"./file.js\"\nimport * as UnixFS from \"./codec.js\"\nimport { set, remove } from \"./directory.js\"\n\nexport * from \"./directory/api.js\"\nexport { set, remove } from \"./directory.js\"\n\nexport const configure = File.configure\nexport const defaults = File.defaults\n\n/**\n * @template [Layout=unknown]\n * @param {API.Options<Layout>} config\n * @returns {API.View<Layout>}\n */\nexport const create = ({ writer, settings = defaults(), metadata = {} }) =>\n new HAMTDirectoryWriter({\n writer,\n metadata,\n settings,\n entries: new HashMap(),\n closed: false,\n })\n\n/**\n * @template {API.State} Writer\n * @param {Writer} writer\n * @returns {Writer}\n */\nconst asWritable = writer => {\n if (!writer.closed) {\n return writer\n } else {\n throw new Error(\"Can not change written HAMT directory, but you can .fork() and make changes to it\")\n }\n}\n\n/**\n * @template {unknown} Layout\n * @param {{ state: API.State<Layout> }} view\n * @param {API.CloseOptions} options\n * @returns {Promise<UnixFS.DirectoryLink>}\n */\nexport const close = async (\n view,\n { closeWriter = false, releaseLock = false } = {}\n) => {\n const { writer, settings, metadata } = asWritable(view.state)\n view.state.closed = true\n\n const { entries } = view.state\n /* c8 ignore next 3 */\n if (!(entries instanceof HashMap)) {\n throw new Error(`not a HAMT: ${entries}`)\n }\n\n const hamt = entries.builder.build()\n const blocks = iterateBlocks(hamt, hamt.root, settings)\n\n /** @type {UnixFS.BlockView<UnixFS.DirectoryShard>?} */\n let root = null\n for await (const block of blocks) {\n root = block\n // we make sure that writer has some capacity for this write. If it\n // does not we await.\n if ((writer.desiredSize || 0) <= 0) {\n await writer.ready\n }\n // once writer has some capacity we write a block, however we do not\n // await completion as we don't care when it's taken off the stream.\n writer.write(block)\n }\n /* c8 ignore next */\n if (root == null) throw new Error(\"no root block yielded\")\n\n if (closeWriter) {\n await writer.close()\n } else if (releaseLock) {\n writer.releaseLock()\n }\n\n return {\n cid: root.cid,\n dagByteLength: UnixFS.cumulativeDagByteLength(root.bytes, root.value.entries),\n }\n}\n\n/**\n * @template {unknown} Layout\n * @param {UnixFSPermaMap.PersistentHashMap<API.EntryLink>} hamt\n * @param {UnixFSPermaMap.BitmapIndexedNode<API.EntryLink>} node\n * @param {API.EncoderSettings<Layout>} settings\n * @returns {AsyncIterableIterator<UnixFS.BlockView<UnixFS.DirectoryShard>>}\n */\nconst iterateBlocks = async function* (hamt, node, settings) {\n /** @type {UnixFS.DirectoryEntryLink[]} */\n const entries = []\n for (const ent of UnixFSPermaMap.iterate(node)) {\n if ('key' in ent) {\n entries.push(/** @type {UnixFS.DirectoryEntryLink} */ ({\n name: `${ent.prefix ?? ''}${ent.key ?? ''}`,\n dagByteLength: ent.value.dagByteLength,\n cid: ent.value.cid,\n }))\n } else {\n /** @type {UnixFS.BlockView<UnixFS.DirectoryShard>?} */\n let root = null\n for await (const block of iterateBlocks(hamt, ent.node, settings)) {\n yield block\n root = block\n }\n /* c8 ignore next */\n if (root == null) throw new Error(\"no root block yielded\")\n\n entries.push(/** @type {UnixFS.ShardedDirectoryLink} */ ({\n name: ent.prefix,\n dagByteLength: UnixFS.cumulativeDagByteLength(root.bytes, root.value.entries),\n cid: root.cid\n }))\n }\n }\n\n const shard = UnixFS.createDirectoryShard(\n entries,\n UnixFSPermaMap.bitField(node),\n UnixFSPermaMap.tableSize(hamt),\n murmur364.code\n )\n yield await encodeHAMTShardBlock(shard, settings)\n}\n\n/**\n * @template {unknown} Layout\n * @param {UnixFS.DirectoryShard} shard\n * @param {API.EncoderSettings<Layout>} settings\n * @returns {Promise<UnixFS.BlockView<UnixFS.DirectoryShard>>}\n */\nasync function encodeHAMTShardBlock (shard, settings) {\n const bytes = UnixFS.encodeHAMTShard(shard)\n const hash = await settings.hasher.digest(bytes)\n const cid = settings.linker.createLink(PB.code, hash)\n // @ts-ignore Link is not CID\n return new Block({ cid, bytes, value: shard })\n}\n\n/**\n * @template L1, L2\n * @param {API.View<L1>} state\n * @param {Partial<API.Options<L1|L2>>} options\n * @returns {API.View<L1|L2>}\n */\nexport const fork = (\n { state },\n {\n writer = state.writer,\n metadata = state.metadata,\n settings = state.settings,\n } = {}\n) =>\n new HAMTDirectoryWriter({\n writer,\n metadata,\n settings,\n entries: new HashMap(UnixFSPermaMap.from(state.entries.entries()).createBuilder()),\n closed: false,\n })\n\n/**\n * @template [Layout=unknown]\n * @implements {API.View<Layout>}\n */\nclass HAMTDirectoryWriter {\n /**\n * @param {API.State<Layout>} state\n */\n constructor(state) {\n this.state = state\n }\n get writer() {\n return this.state.writer\n }\n get settings() {\n return this.state.settings\n }\n\n /**\n * @param {string} name\n * @param {UnixFS.FileLink | UnixFS.DirectoryLink} link\n * @param {API.WriteOptions} [options]\n */\n\n set(name, link, options) {\n return set(this, name, link, options)\n }\n\n /**\n * @param {string} name\n */\n remove(name) {\n return remove(this, name)\n }\n\n /**\n * @template L\n * @param {Partial<API.Options<L>>} [options]\n * @returns {API.View<Layout|L>}\n */\n fork(options) {\n return fork(this, options)\n }\n\n /**\n * @param {API.CloseOptions} [options]\n * @returns {Promise<UnixFS.DirectoryLink>}\n */\n close(options) {\n return close(this, options)\n }\n\n entries() {\n return this.state.entries.entries()\n }\n /**\n * @param {string} name\n */\n has(name) {\n return this.state.entries.has(name)\n }\n get size() {\n return this.state.entries.size\n }\n}\n\n/**\n * @implements {Map<string, API.EntryLink>}\n */\nclass HashMap extends Map {\n /**\n * @param {UnixFSPermaMap.HashMapBuilder} [builder]\n */\n constructor (builder = UnixFSPermaMap.builder()) {\n super()\n /** @type {UnixFSPermaMap.HashMapBuilder} */\n this.builder = builder\n }\n\n clear() {\n this.builder = UnixFSPermaMap.builder()\n }\n\n /**\n * @param {string} key\n */\n delete(key) {\n const { root } = this.builder\n this.builder.delete(key)\n return this.builder.root !== root\n }\n\n /**\n * @param {(value: API.EntryLink, key: string, map: Map<string, API.EntryLink>) => void} callbackfn\n * @param {any} [thisArg]\n */\n forEach(callbackfn, thisArg = this) {\n for (const [k, v] of this.builder.root.entries()) {\n callbackfn.call(thisArg, v, k, this)\n }\n }\n\n /**\n * @param {string} key\n */\n get(key) {\n return PermaMap.get(this.builder, key)\n }\n\n /**\n * @param {string} key\n */\n has(key) {\n return PermaMap.has(this.builder, key)\n }\n\n /**\n * @param {string} key \n * @param {API.EntryLink} value \n */\n set(key, value) {\n this.builder.set(key, value)\n return this\n }\n\n get size () {\n return this.builder.size\n }\n\n [Symbol.iterator]() {\n return this.builder.root.entries()\n }\n\n entries() {\n return this.builder.root.entries()\n }\n\n keys() {\n return this.builder.root.keys()\n }\n\n values() {\n return this.builder.root.values()\n }\n}\n","import * as API from \"./api.js\"\nimport * as File from \"./file.js\"\nimport * as Directory from \"./directory.js\"\n\nexport * from \"./api.js\"\n\nexport { encode, decode, NodeType, code } from \"./codec.js\"\nexport {\n create as createFileWriter,\n close as closeFile,\n write,\n configure,\n defaults,\n UnixFSLeaf,\n UnixFSRawLeaf,\n} from \"./file.js\"\nexport {\n create as createDirectoryWriter,\n close as closeDirectory,\n fork as forkDirectory,\n set,\n remove,\n} from \"./directory.js\"\nexport {\n create as createShardedDirectoryWriter,\n close as closeShardedDirectory,\n fork as forkShardedDirectory,\n} from \"./sharded-directory.js\"\n\n/**\n * @template [Layout=unknown]\n * @param {API.Options<Layout>} options\n * @returns {API.View<Layout>}\n */\nexport const createWriter = ({ writable, settings = File.defaults() }) =>\n new FileSystemWriter({\n writer: writable.getWriter(),\n settings,\n })\n\n/**\n * @template {{writer:API.BlockWriter}} View\n * @param {View} view\n * @param {API.CloseOptions} options\n */\nexport const close = async (\n view,\n { releaseLock = true, closeWriter = true } = {}\n) => {\n if (closeWriter) {\n await view.writer.close()\n } else if (releaseLock) {\n view.writer.releaseLock()\n }\n\n return view\n}\n\n/**\n * @template [Layout=unknown]\n * @implemets {API.View<Layout>}\n */\nclass FileSystemWriter {\n /**\n * @param {object} options\n * @param {API.BlockWriter} options.writer\n * @param {Partial<API.EncoderSettings<Layout>>} options.settings\n */\n constructor({ writer, settings }) {\n this.writer = writer\n this.settings = File.configure(settings)\n }\n\n /**\n * @template [L=unknown]\n * @param {API.WriterOptions<L|Layout>} config\n */\n createFileWriter({ settings = this.settings, metadata } = {}) {\n return File.create({\n writer: this.writer,\n settings,\n metadata,\n })\n }\n\n /**\n * @template [L=unknown]\n * @param {API.WriterOptions<L|Layout>} config\n */\n createDirectoryWriter({ settings = this.settings, metadata } = {}) {\n return Directory.create({\n writer: this.writer,\n settings,\n metadata,\n })\n }\n\n /**\n * @param {API.CloseOptions} [options]\n */\n close(options) {\n return close(this, options)\n }\n}\n\n// BlockSizeLimit specifies the maximum size an imported block can have.\n// @see https://github.com/ipfs/go-unixfs/blob/68c015a6f317ed5e21a4870f7c423a4b38b90a96/importer/helpers/helpers.go#L7-L8\nexport const BLOCK_SIZE_LIMIT = 1048576 // 1 MB\nexport const defaultCapacity = BLOCK_SIZE_LIMIT * 100\n\n/**\n * Creates `QueuingStrategy` that can fit blocks with total size up to given\n * byteLength.\n *\n * @param {number} byteLength\n * @returns {Required<QueuingStrategy<API.Block>>}\n */\nexport const withCapacity = (byteLength = defaultCapacity) => ({\n highWaterMark: byteLength,\n size: block => block.bytes.length,\n})\n","import { coerce } from '../bytes.js'\nimport type { ArrayBufferView, ByteView } from './interface.js'\n\nexport const name = 'raw'\nexport const code = 0x55\n\nexport function encode (node: Uint8Array): ByteView<Uint8Array> {\n return coerce(node)\n}\n\nexport function decode (data: ByteView<Uint8Array> | ArrayBufferView<Uint8Array>): Uint8Array {\n return coerce(data)\n}\n","'use strict';\n\n/**\n * @typedef {{ [key: string]: any }} Extensions\n * @typedef {Error} Err\n * @property {string} message\n */\n\n/**\n *\n * @param {Error} obj\n * @param {Extensions} props\n * @returns {Error & Extensions}\n */\nfunction assign(obj, props) {\n for (const key in props) {\n Object.defineProperty(obj, key, {\n value: props[key],\n enumerable: true,\n configurable: true,\n });\n }\n\n return obj;\n}\n\n/**\n *\n * @param {any} err - An Error\n * @param {string|Extensions} code - A string code or props to set on the error\n * @param {Extensions} [props] - Props to set on the error\n * @returns {Error & Extensions}\n */\nfunction createError(err, code, props) {\n if (!err || typeof err === 'string') {\n throw new TypeError('Please pass an Error to err-code');\n }\n\n if (!props) {\n props = {};\n }\n\n if (typeof code === 'object') {\n props = code;\n code = '';\n }\n\n if (code) {\n props.code = code;\n }\n\n try {\n return assign(err, props);\n } catch (_) {\n props.message = err.message;\n props.stack = err.stack;\n\n const ErrClass = function () {};\n\n ErrClass.prototype = Object.create(Object.getPrototypeOf(err));\n\n // @ts-ignore\n const output = assign(new ErrClass(), props);\n\n return output;\n }\n}\n\nmodule.exports = createError;\n","/**\n * @packageDocumentation\n *\n * Return the last value from an (async)iterable.\n *\n * @example\n *\n * ```javascript\n * import last from 'it-last'\n *\n * // This can also be an iterator, generator, etc\n * const values = [0, 1, 2, 3, 4]\n *\n * const res = last(values)\n *\n * console.info(res) // 4\n * ```\n *\n * Async sources must be awaited:\n *\n * ```javascript\n * import last from 'it-last'\n *\n * const values = async function * () {\n * yield * [0, 1, 2, 3, 4]\n * }\n *\n * const res = await last(values())\n *\n * console.info(res) // 4\n * ```\n */\n\nfunction isAsyncIterable <T> (thing: any): thing is AsyncIterable<T> {\n return thing[Symbol.asyncIterator] != null\n}\n\n/**\n * Returns the last item of an (async) iterable, unless empty, in which case\n * return `undefined`\n */\nfunction last <T> (source: Iterable<T>): T | undefined\nfunction last <T> (source: Iterable<T> | AsyncIterable<T>): Promise<T | undefined>\nfunction last <T> (source: Iterable<T> | AsyncIterable<T>): Promise<T | undefined> | T | undefined {\n if (isAsyncIterable(source)) {\n return (async () => {\n let res\n\n for await (const entry of source) {\n res = entry\n }\n\n return res\n })()\n }\n\n let res\n\n for (const entry of source) {\n res = entry\n }\n\n return res\n}\n\nexport default last\n","import { Type } from '../token.js'\nimport { encodeCustom } from '../encode.js'\nimport { encodeErrPrefix } from '../common.js'\nimport { asU8A, fromString } from '../byte-utils.js'\n\n/**\n * @typedef {import('../../interface').EncodeOptions} EncodeOptions\n * @typedef {import('../token').Token} Token\n * @typedef {import('../bl').Bl} Bl\n */\n\nclass JSONEncoder extends Array {\n constructor () {\n super()\n /** @type {{type:Type,elements:number}[]} */\n this.inRecursive = []\n }\n\n /**\n * @param {Bl} buf\n */\n prefix (buf) {\n const recurs = this.inRecursive[this.inRecursive.length - 1]\n if (recurs) {\n if (recurs.type === Type.array) {\n recurs.elements++\n if (recurs.elements !== 1) { // >first\n buf.push([44]) // ','\n }\n }\n if (recurs.type === Type.map) {\n recurs.elements++\n if (recurs.elements !== 1) { // >first\n if (recurs.elements % 2 === 1) { // key\n buf.push([44]) // ','\n } else {\n buf.push([58]) // ':'\n }\n }\n }\n }\n }\n\n /**\n * @param {Bl} buf\n * @param {Token} token\n */\n [Type.uint.major] (buf, token) {\n this.prefix(buf)\n const is = String(token.value)\n const isa = []\n for (let i = 0; i < is.length; i++) {\n isa[i] = is.charCodeAt(i)\n }\n buf.push(isa)\n }\n\n /**\n * @param {Bl} buf\n * @param {Token} token\n */\n [Type.negint.major] (buf, token) {\n // @ts-ignore hack\n this[Type.uint.major](buf, token)\n }\n\n /**\n * @param {Bl} _buf\n * @param {Token} _token\n */\n [Type.bytes.major] (_buf, _token) {\n throw new Error(`${encodeErrPrefix} unsupported type: Uint8Array`)\n }\n\n /**\n * @param {Bl} buf\n * @param {Token} token\n */\n [Type.string.major] (buf, token) {\n this.prefix(buf)\n // buf.push(34) // '\"'\n // encodeUtf8(token.value, byts)\n // buf.push(34) // '\"'\n const byts = fromString(JSON.stringify(token.value))\n buf.push(byts.length > 32 ? asU8A(byts) : byts)\n }\n\n /**\n * @param {Bl} buf\n * @param {Token} _token\n */\n [Type.array.major] (buf, _token) {\n this.prefix(buf)\n this.inRecursive.push({ type: Type.array, elements: 0 })\n buf.push([91]) // '['\n }\n\n /**\n * @param {Bl} buf\n * @param {Token} _token\n */\n [Type.map.major] (buf, _token) {\n this.prefix(buf)\n this.inRecursive.push({ type: Type.map, elements: 0 })\n buf.push([123]) // '{'\n }\n\n /**\n * @param {Bl} _buf\n * @param {Token} _token\n */\n [Type.tag.major] (_buf, _token) {}\n\n /**\n * @param {Bl} buf\n * @param {Token} token\n */\n [Type.float.major] (buf, token) {\n if (token.type.name === 'break') {\n const recurs = this.inRecursive.pop()\n if (recurs) {\n if (recurs.type === Type.array) {\n buf.push([93]) // ']'\n } else if (recurs.type === Type.map) {\n buf.push([125]) // '}'\n /* c8 ignore next 3 */\n } else {\n throw new Error('Unexpected recursive type; this should not happen!')\n }\n return\n }\n /* c8 ignore next 2 */\n throw new Error('Unexpected break; this should not happen!')\n }\n if (token.value === undefined) {\n throw new Error(`${encodeErrPrefix} unsupported type: undefined`)\n }\n\n this.prefix(buf)\n if (token.type.name === 'true') {\n buf.push([116, 114, 117, 101]) // 'true'\n return\n } else if (token.type.name === 'false') {\n buf.push([102, 97, 108, 115, 101]) // 'false'\n return\n } else if (token.type.name === 'null') {\n buf.push([110, 117, 108, 108]) // 'null'\n return\n }\n\n // number\n const is = String(token.value)\n const isa = []\n let dp = false\n for (let i = 0; i < is.length; i++) {\n isa[i] = is.charCodeAt(i)\n if (!dp && (isa[i] === 46 || isa[i] === 101 || isa[i] === 69)) { // '[.eE]'\n dp = true\n }\n }\n if (!dp) { // need a decimal point for floats\n isa.push(46) // '.'\n isa.push(48) // '0'\n }\n buf.push(isa)\n }\n}\n\n// The below code is mostly taken and modified from https://github.com/feross/buffer\n// Licensed MIT. Copyright (c) Feross Aboukhadijeh\n// function encodeUtf8 (string, byts) {\n// let codePoint\n// const length = string.length\n// let leadSurrogate = null\n\n// for (let i = 0; i < length; ++i) {\n// codePoint = string.charCodeAt(i)\n\n// // is surrogate component\n// if (codePoint > 0xd7ff && codePoint < 0xe000) {\n// // last char was a lead\n// if (!leadSurrogate) {\n// // no lead yet\n// /* c8 ignore next 9 */\n// if (codePoint > 0xdbff) {\n// // unexpected trail\n// byts.push(0xef, 0xbf, 0xbd)\n// continue\n// } else if (i + 1 === length) {\n// // unpaired lead\n// byts.push(0xef, 0xbf, 0xbd)\n// continue\n// }\n\n// // valid lead\n// leadSurrogate = codePoint\n\n// continue\n// }\n\n// // 2 leads in a row\n// /* c8 ignore next 5 */\n// if (codePoint < 0xdc00) {\n// byts.push(0xef, 0xbf, 0xbd)\n// leadSurrogate = codePoint\n// continue\n// }\n\n// // valid surrogate pair\n// codePoint = (leadSurrogate - 0xd800 << 10 | codePoint - 0xdc00) + 0x10000\n// /* c8 ignore next 4 */\n// } else if (leadSurrogate) {\n// // valid bmp char, but last char was a lead\n// byts.push(0xef, 0xbf, 0xbd)\n// }\n\n// leadSurrogate = null\n\n// // encode utf8\n// if (codePoint < 0x80) {\n// // special JSON escapes\n// switch (codePoint) {\n// case 8: // '\\b'\n// byts.push(92, 98) // '\\\\b'\n// continue\n// case 9: // '\\t'\n// byts.push(92, 116) // '\\\\t'\n// continue\n// case 10: // '\\n'\n// byts.push(92, 110) // '\\\\n'\n// continue\n// case 12: // '\\f'\n// byts.push(92, 102) // '\\\\f'\n// continue\n// case 13: // '\\r'\n// byts.push(92, 114) // '\\\\r'\n// continue\n// case 34: // '\"'\n// byts.push(92, 34) // '\\\\\"'\n// continue\n// case 92: // '\\\\'\n// byts.push(92, 92) // '\\\\\\\\'\n// continue\n// }\n\n// byts.push(codePoint)\n// } else if (codePoint < 0x800) {\n// /* c8 ignore next 1 */\n// byts.push(\n// codePoint >> 0x6 | 0xc0,\n// codePoint & 0x3f | 0x80\n// )\n// } else if (codePoint < 0x10000) {\n// /* c8 ignore next 1 */\n// byts.push(\n// codePoint >> 0xc | 0xe0,\n// codePoint >> 0x6 & 0x3f | 0x80,\n// codePoint & 0x3f | 0x80\n// )\n// /* c8 ignore next 9 */\n// } else if (codePoint < 0x110000) {\n// byts.push(\n// codePoint >> 0x12 | 0xf0,\n// codePoint >> 0xc & 0x3f | 0x80,\n// codePoint >> 0x6 & 0x3f | 0x80,\n// codePoint & 0x3f | 0x80\n// )\n// } else {\n// /* c8 ignore next 2 */\n// throw new Error('Invalid code point')\n// }\n// }\n// }\n\n/**\n * @param {(Token|Token[])[]} e1\n * @param {(Token|Token[])[]} e2\n * @returns {number}\n */\nfunction mapSorter (e1, e2) {\n if (Array.isArray(e1[0]) || Array.isArray(e2[0])) {\n throw new Error(`${encodeErrPrefix} complex map keys are not supported`)\n }\n const keyToken1 = e1[0]\n const keyToken2 = e2[0]\n if (keyToken1.type !== Type.string || keyToken2.type !== Type.string) {\n throw new Error(`${encodeErrPrefix} non-string map keys are not supported`)\n }\n if (keyToken1 < keyToken2) {\n return -1\n }\n if (keyToken1 > keyToken2) {\n return 1\n }\n /* c8 ignore next 1 */\n throw new Error(`${encodeErrPrefix} unexpected duplicate map keys, this is not supported`)\n}\n\nconst defaultEncodeOptions = { addBreakTokens: true, mapSorter }\n\n/**\n * @param {any} data\n * @param {EncodeOptions} [options]\n * @returns {Uint8Array}\n */\nfunction encode (data, options) {\n options = Object.assign({}, defaultEncodeOptions, options)\n return encodeCustom(data, new JSONEncoder(), options)\n}\n\nexport { encode }\n","import { decode as _decode, decodeFirst as _decodeFirst } from '../decode.js'\nimport { Token, Type } from '../token.js'\nimport { decodeCodePointsArray } from '../byte-utils.js'\nimport { decodeErrPrefix } from '../common.js'\n\n/**\n * @typedef {import('../../interface').DecodeOptions} DecodeOptions\n * @typedef {import('../../interface').DecodeTokenizer} DecodeTokenizer\n */\n\n/**\n * @implements {DecodeTokenizer}\n */\nclass Tokenizer {\n /**\n * @param {Uint8Array} data\n * @param {DecodeOptions} options\n */\n constructor (data, options = {}) {\n this._pos = 0\n this.data = data\n this.options = options\n /** @type {string[]} */\n this.modeStack = ['value']\n this.lastToken = ''\n }\n\n pos () {\n return this._pos\n }\n\n /**\n * @returns {boolean}\n */\n done () {\n return this._pos >= this.data.length\n }\n\n /**\n * @returns {number}\n */\n ch () {\n return this.data[this._pos]\n }\n\n /**\n * @returns {string}\n */\n currentMode () {\n return this.modeStack[this.modeStack.length - 1]\n }\n\n skipWhitespace () {\n let c = this.ch()\n // @ts-ignore\n while (c === 32 /* ' ' */ || c === 9 /* '\\t' */ || c === 13 /* '\\r' */ || c === 10 /* '\\n' */) {\n c = this.data[++this._pos]\n }\n }\n\n /**\n * @param {number[]} str\n */\n expect (str) {\n if (this.data.length - this._pos < str.length) {\n throw new Error(`${decodeErrPrefix} unexpected end of input at position ${this._pos}`)\n }\n for (let i = 0; i < str.length; i++) {\n if (this.data[this._pos++] !== str[i]) {\n throw new Error(`${decodeErrPrefix} unexpected token at position ${this._pos}, expected to find '${String.fromCharCode(...str)}'`)\n }\n }\n }\n\n parseNumber () {\n const startPos = this._pos\n let negative = false\n let float = false\n\n /**\n * @param {number[]} chars\n */\n const swallow = (chars) => {\n while (!this.done()) {\n const ch = this.ch()\n if (chars.includes(ch)) {\n this._pos++\n } else {\n break\n }\n }\n }\n\n // lead\n if (this.ch() === 45) { // '-'\n negative = true\n this._pos++\n }\n if (this.ch() === 48) { // '0'\n this._pos++\n if (this.ch() === 46) { // '.'\n this._pos++\n float = true\n } else {\n return new Token(Type.uint, 0, this._pos - startPos)\n }\n }\n swallow([48, 49, 50, 51, 52, 53, 54, 55, 56, 57]) // DIGIT\n if (negative && this._pos === startPos + 1) {\n throw new Error(`${decodeErrPrefix} unexpected token at position ${this._pos}`)\n }\n if (!this.done() && this.ch() === 46) { // '.'\n if (float) {\n throw new Error(`${decodeErrPrefix} unexpected token at position ${this._pos}`)\n }\n float = true\n this._pos++\n swallow([48, 49, 50, 51, 52, 53, 54, 55, 56, 57]) // DIGIT\n }\n if (!this.done() && (this.ch() === 101 || this.ch() === 69)) { // '[eE]'\n float = true\n this._pos++\n if (!this.done() && (this.ch() === 43 || this.ch() === 45)) { // '+', '-'\n this._pos++\n }\n swallow([48, 49, 50, 51, 52, 53, 54, 55, 56, 57]) // DIGIT\n }\n // @ts-ignore\n const numStr = String.fromCharCode.apply(null, this.data.subarray(startPos, this._pos))\n const num = parseFloat(numStr)\n if (float) {\n return new Token(Type.float, num, this._pos - startPos)\n }\n if (this.options.allowBigInt !== true || Number.isSafeInteger(num)) {\n return new Token(num >= 0 ? Type.uint : Type.negint, num, this._pos - startPos)\n }\n return new Token(num >= 0 ? Type.uint : Type.negint, BigInt(numStr), this._pos - startPos)\n }\n\n /**\n * @returns {Token}\n */\n parseString () {\n /* c8 ignore next 4 */\n if (this.ch() !== 34) { // '\"'\n // this would be a programming error\n throw new Error(`${decodeErrPrefix} unexpected character at position ${this._pos}; this shouldn't happen`)\n }\n this._pos++\n\n // check for simple fast-path, all printable ascii, no escapes\n // >0x10000 elements may fail fn.apply() (http://stackoverflow.com/a/22747272/680742)\n for (let i = this._pos, l = 0; i < this.data.length && l < 0x10000; i++, l++) {\n const ch = this.data[i]\n if (ch === 92 || ch < 32 || ch >= 128) { // '\\', ' ', control-chars or non-trivial\n break\n }\n if (ch === 34) { // '\"'\n // @ts-ignore\n const str = String.fromCharCode.apply(null, this.data.subarray(this._pos, i))\n this._pos = i + 1\n return new Token(Type.string, str, l)\n }\n }\n\n const startPos = this._pos\n const chars = []\n\n const readu4 = () => {\n if (this._pos + 4 >= this.data.length) {\n throw new Error(`${decodeErrPrefix} unexpected end of unicode escape sequence at position ${this._pos}`)\n }\n let u4 = 0\n for (let i = 0; i < 4; i++) {\n let ch = this.ch()\n if (ch >= 48 && ch <= 57) { // '0' && '9'\n ch -= 48\n } else if (ch >= 97 && ch <= 102) { // 'a' && 'f'\n ch = ch - 97 + 10\n } else if (ch >= 65 && ch <= 70) { // 'A' && 'F'\n ch = ch - 65 + 10\n } else {\n throw new Error(`${decodeErrPrefix} unexpected unicode escape character at position ${this._pos}`)\n }\n u4 = u4 * 16 + ch\n this._pos++\n }\n return u4\n }\n\n // mostly taken from feross/buffer and adjusted to fit\n const readUtf8Char = () => {\n const firstByte = this.ch()\n let codePoint = null\n /* c8 ignore next 1 */\n let bytesPerSequence = (firstByte > 0xef) ? 4 : (firstByte > 0xdf) ? 3 : (firstByte > 0xbf) ? 2 : 1\n\n if (this._pos + bytesPerSequence > this.data.length) {\n throw new Error(`${decodeErrPrefix} unexpected unicode sequence at position ${this._pos}`)\n }\n\n let secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n /* c8 ignore next 6 */\n // this case is dealt with by the caller function\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = this.data[this._pos + 1]\n if ((secondByte & 0xc0) === 0x80) {\n tempCodePoint = (firstByte & 0x1f) << 0x6 | (secondByte & 0x3f)\n if (tempCodePoint > 0x7f) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = this.data[this._pos + 1]\n thirdByte = this.data[this._pos + 2]\n if ((secondByte & 0xc0) === 0x80 && (thirdByte & 0xc0) === 0x80) {\n tempCodePoint = (firstByte & 0xf) << 0xc | (secondByte & 0x3f) << 0x6 | (thirdByte & 0x3f)\n /* c8 ignore next 3 */\n if (tempCodePoint > 0x7ff && (tempCodePoint < 0xd800 || tempCodePoint > 0xdfff)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = this.data[this._pos + 1]\n thirdByte = this.data[this._pos + 2]\n fourthByte = this.data[this._pos + 3]\n if ((secondByte & 0xc0) === 0x80 && (thirdByte & 0xc0) === 0x80 && (fourthByte & 0xc0) === 0x80) {\n tempCodePoint = (firstByte & 0xf) << 0x12 | (secondByte & 0x3f) << 0xc | (thirdByte & 0x3f) << 0x6 | (fourthByte & 0x3f)\n if (tempCodePoint > 0xffff && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n\n /* c8 ignore next 5 */\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xfffd\n bytesPerSequence = 1\n } else if (codePoint > 0xffff) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n chars.push(codePoint >>> 10 & 0x3ff | 0xd800)\n codePoint = 0xdc00 | codePoint & 0x3ff\n }\n\n chars.push(codePoint)\n this._pos += bytesPerSequence\n }\n\n // TODO: could take the approach of a quick first scan for special chars like encoding/json/decode.go#unquoteBytes\n // and converting all of the ascii chars from the base array in bulk\n while (!this.done()) {\n const ch = this.ch()\n let ch1\n switch (ch) {\n case 92: // '\\'\n this._pos++\n if (this.done()) {\n throw new Error(`${decodeErrPrefix} unexpected string termination at position ${this._pos}`)\n }\n ch1 = this.ch()\n this._pos++\n switch (ch1) {\n case 34: // '\"'\n case 39: // '\\''\n case 92: // '\\'\n case 47: // '/'\n chars.push(ch1)\n break\n case 98: // 'b'\n chars.push(8)\n break\n case 116: // 't'\n chars.push(9)\n break\n case 110: // 'n'\n chars.push(10)\n break\n case 102: // 'f'\n chars.push(12)\n break\n case 114: // 'r'\n chars.push(13)\n break\n case 117: // 'u'\n chars.push(readu4())\n break\n default:\n throw new Error(`${decodeErrPrefix} unexpected string escape character at position ${this._pos}`)\n }\n break\n case 34: // '\"'\n this._pos++\n return new Token(Type.string, decodeCodePointsArray(chars), this._pos - startPos)\n default:\n if (ch < 32) { // ' '\n throw new Error(`${decodeErrPrefix} invalid control character at position ${this._pos}`)\n } else if (ch < 0x80) {\n chars.push(ch)\n this._pos++\n } else {\n readUtf8Char()\n }\n }\n }\n\n throw new Error(`${decodeErrPrefix} unexpected end of string at position ${this._pos}`)\n }\n\n /**\n * @returns {Token}\n */\n parseValue () {\n switch (this.ch()) {\n case 123: // '{'\n this.modeStack.push('obj-start')\n this._pos++\n return new Token(Type.map, Infinity, 1)\n case 91: // '['\n this.modeStack.push('array-start')\n this._pos++\n return new Token(Type.array, Infinity, 1)\n case 34: { // '\"'\n return this.parseString()\n }\n case 110: // 'n' / null\n this.expect([110, 117, 108, 108]) // 'null'\n return new Token(Type.null, null, 4)\n case 102: // 'f' / // false\n this.expect([102, 97, 108, 115, 101]) // 'false'\n return new Token(Type.false, false, 5)\n case 116: // 't' / // true\n this.expect([116, 114, 117, 101]) // 'true'\n return new Token(Type.true, true, 4)\n case 45: // '-'\n case 48: // '0'\n case 49: // '1'\n case 50: // '2'\n case 51: // '3'\n case 52: // '4'\n case 53: // '5'\n case 54: // '6'\n case 55: // '7'\n case 56: // '8'\n case 57: // '9'\n return this.parseNumber()\n default:\n throw new Error(`${decodeErrPrefix} unexpected character at position ${this._pos}`)\n }\n }\n\n /**\n * @returns {Token}\n */\n next () {\n this.skipWhitespace()\n switch (this.currentMode()) {\n case 'value':\n this.modeStack.pop()\n return this.parseValue()\n case 'array-value': {\n this.modeStack.pop()\n if (this.ch() === 93) { // ']'\n this._pos++\n this.skipWhitespace()\n return new Token(Type.break, undefined, 1)\n }\n if (this.ch() !== 44) { // ','\n throw new Error(`${decodeErrPrefix} unexpected character at position ${this._pos}, was expecting array delimiter but found '${String.fromCharCode(this.ch())}'`)\n }\n this._pos++\n this.modeStack.push('array-value')\n this.skipWhitespace()\n return this.parseValue()\n }\n case 'array-start': {\n this.modeStack.pop()\n if (this.ch() === 93) { // ']'\n this._pos++\n this.skipWhitespace()\n return new Token(Type.break, undefined, 1)\n }\n this.modeStack.push('array-value')\n this.skipWhitespace()\n return this.parseValue()\n }\n // @ts-ignore\n case 'obj-key':\n if (this.ch() === 125) { // '}'\n this.modeStack.pop()\n this._pos++\n this.skipWhitespace()\n return new Token(Type.break, undefined, 1)\n }\n if (this.ch() !== 44) { // ','\n throw new Error(`${decodeErrPrefix} unexpected character at position ${this._pos}, was expecting object delimiter but found '${String.fromCharCode(this.ch())}'`)\n }\n this._pos++\n this.skipWhitespace()\n case 'obj-start': { // eslint-disable-line no-fallthrough\n this.modeStack.pop()\n if (this.ch() === 125) { // '}'\n this._pos++\n this.skipWhitespace()\n return new Token(Type.break, undefined, 1)\n }\n const token = this.parseString()\n this.skipWhitespace()\n if (this.ch() !== 58) { // ':'\n throw new Error(`${decodeErrPrefix} unexpected character at position ${this._pos}, was expecting key/value delimiter ':' but found '${String.fromCharCode(this.ch())}'`)\n }\n this._pos++\n this.modeStack.push('obj-value')\n return token\n }\n case 'obj-value': {\n this.modeStack.pop()\n this.modeStack.push('obj-key')\n this.skipWhitespace()\n return this.parseValue()\n }\n /* c8 ignore next 2 */\n default:\n throw new Error(`${decodeErrPrefix} unexpected parse state at position ${this._pos}; this shouldn't happen`)\n }\n }\n}\n\n/**\n * @param {Uint8Array} data\n * @param {DecodeOptions} [options]\n * @returns {any}\n */\nfunction decode (data, options) {\n options = Object.assign({ tokenizer: new Tokenizer(data, options) }, options)\n return _decode(data, options)\n}\n\n/**\n * @param {Uint8Array} data\n * @param {DecodeOptions} [options]\n * @returns {[any, Uint8Array]}\n */\nfunction decodeFirst (data, options) {\n options = Object.assign({ tokenizer: new Tokenizer(data, options) }, options)\n return _decodeFirst(data, options)\n}\n\nexport { decode, decodeFirst, Tokenizer }\n","import { encode } from './encode.js'\nimport { decode, decodeFirst, Tokenizer } from './decode.js'\n\nexport { encode, decode, decodeFirst, Tokenizer }\n","import { rfc4648 } from './base.js'\n\nexport const base64 = rfc4648({\n prefix: 'm',\n name: 'base64',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',\n bitsPerChar: 6\n})\n\nexport const base64pad = rfc4648({\n prefix: 'M',\n name: 'base64pad',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=',\n bitsPerChar: 6\n})\n\nexport const base64url = rfc4648({\n prefix: 'u',\n name: 'base64url',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_',\n bitsPerChar: 6\n})\n\nexport const base64urlpad = rfc4648({\n prefix: 'U',\n name: 'base64urlpad',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=',\n bitsPerChar: 6\n})\n","/* eslint max-depth: [\"error\", 7] */\nimport { Token, Type } from 'cborg'\nimport * as cborgJson from 'cborg/json'\nimport { CID } from 'multiformats'\nimport { base64 } from 'multiformats/bases/base64'\n\n/**\n * @template T\n * @typedef {import('multiformats/codecs/interface').ByteView<T>} ByteView\n */\n/**\n * @template T\n * @typedef {import('multiformats/codecs/interface').ArrayBufferView<T>} ArrayBufferView\n */\n/**\n * @template T\n * @typedef {import('multiformats').ToString<T>} ToString\n */\n/**\n * @typedef {import('cborg/interface').DecodeTokenizer} DecodeTokenizer\n */\n\n/**\n * @template T\n * @param {ByteView<T> | ArrayBufferView<T>} buf\n * @returns {ByteView<T>}\n */\nfunction toByteView (buf) {\n if (buf instanceof ArrayBuffer) {\n return new Uint8Array(buf, 0, buf.byteLength)\n }\n\n return buf\n}\n\n/**\n * cidEncoder will receive all Objects during encode, it needs to filter out\n * anything that's not a CID and return `null` for that so it's encoded as\n * normal. Encoding a CID means replacing it with a `{\"/\":\"<CidString>}`\n * object as per the DAG-JSON spec.\n *\n * @param {any} obj\n * @returns {Token[]|null}\n */\nfunction cidEncoder (obj) {\n if (obj.asCID !== obj && obj['/'] !== obj.bytes) {\n return null // any other kind of object\n }\n const cid = CID.asCID(obj)\n /* c8 ignore next 4 */\n // very unlikely case, and it'll probably throw a recursion error in cborg\n if (!cid) {\n return null\n }\n const cidString = cid.toString()\n\n return [\n new Token(Type.map, Infinity, 1),\n new Token(Type.string, '/', 1), // key\n new Token(Type.string, cidString, cidString.length), // value\n new Token(Type.break, undefined, 1)\n ]\n}\n\n/**\n * bytesEncoder will receive all Uint8Arrays (and friends) during encode, it\n * needs to replace it with a `{\"/\":{\"bytes\":\"Base64ByteString\"}}` object as\n * per the DAG-JSON spec.\n *\n * @param {Uint8Array} bytes\n * @returns {Token[]|null}\n */\nfunction bytesEncoder (bytes) {\n const bytesString = base64.encode(bytes).slice(1) // no mbase prefix\n return [\n new Token(Type.map, Infinity, 1),\n new Token(Type.string, '/', 1), // key\n new Token(Type.map, Infinity, 1), // value\n new Token(Type.string, 'bytes', 5), // inner key\n new Token(Type.string, bytesString, bytesString.length), // inner value\n new Token(Type.break, undefined, 1),\n new Token(Type.break, undefined, 1)\n ]\n}\n\n/**\n * taBytesEncoder wraps bytesEncoder() but for the more exotic typed arrays so\n * that we access the underlying ArrayBuffer data\n *\n * @param {Int8Array|Uint16Array|Int16Array|Uint32Array|Int32Array|Float32Array|Float64Array|Uint8ClampedArray|BigInt64Array|BigUint64Array} obj\n * @returns {Token[]|null}\n */\nfunction taBytesEncoder (obj) {\n return bytesEncoder(new Uint8Array(obj.buffer, obj.byteOffset, obj.byteLength))\n}\n\n/**\n * abBytesEncoder wraps bytesEncoder() but for plain ArrayBuffers\n *\n * @param {ArrayBuffer} ab\n * @returns {Token[]|null}\n */\nfunction abBytesEncoder (ab) {\n return bytesEncoder(new Uint8Array(ab))\n}\n\n// eslint-disable-next-line jsdoc/require-returns-check\n/**\n * Intercept all `undefined` values from an object walk and reject the entire\n * object if we find one.\n *\n * @returns {null}\n */\nfunction undefinedEncoder () {\n throw new Error('`undefined` is not supported by the IPLD Data Model and cannot be encoded')\n}\n\n/**\n * Intercept all `number` values from an object walk and reject the entire\n * object if we find something that doesn't fit the IPLD data model (NaN &\n * Infinity).\n *\n * @param {number} num\n * @returns {null}\n */\nfunction numberEncoder (num) {\n if (Number.isNaN(num)) {\n throw new Error('`NaN` is not supported by the IPLD Data Model and cannot be encoded')\n }\n if (num === Infinity || num === -Infinity) {\n throw new Error('`Infinity` and `-Infinity` is not supported by the IPLD Data Model and cannot be encoded')\n }\n return null // process with standard number encoder\n}\n\nconst encodeOptions = {\n typeEncoders: {\n Object: cidEncoder,\n Buffer: bytesEncoder,\n Uint8Array: bytesEncoder,\n Int8Array: taBytesEncoder,\n Uint16Array: taBytesEncoder,\n Int16Array: taBytesEncoder,\n Uint32Array: taBytesEncoder,\n Int32Array: taBytesEncoder,\n Float32Array: taBytesEncoder,\n Float64Array: taBytesEncoder,\n Uint8ClampedArray: taBytesEncoder,\n BigInt64Array: taBytesEncoder,\n BigUint64Array: taBytesEncoder,\n DataView: taBytesEncoder,\n ArrayBuffer: abBytesEncoder,\n undefined: undefinedEncoder,\n number: numberEncoder\n }\n}\n\n/**\n * @implements {DecodeTokenizer}\n */\nclass DagJsonTokenizer extends cborgJson.Tokenizer {\n /**\n * @param {Uint8Array} data\n * @param {object} [options]\n */\n constructor (data, options) {\n super(data, options)\n /** @type {Token[]} */\n this.tokenBuffer = []\n }\n\n /**\n * @returns {boolean}\n */\n done () {\n return this.tokenBuffer.length === 0 && super.done()\n }\n\n /**\n * @returns {Token}\n */\n _next () {\n if (this.tokenBuffer.length > 0) {\n // @ts-ignore https://github.com/Microsoft/TypeScript/issues/30406\n return this.tokenBuffer.pop()\n }\n return super.next()\n }\n\n /**\n * Implements rules outlined in https://github.com/ipld/specs/pull/356\n *\n * @returns {Token}\n */\n next () {\n const token = this._next()\n\n if (token.type === Type.map) {\n const keyToken = this._next()\n if (keyToken.type === Type.string && keyToken.value === '/') {\n const valueToken = this._next()\n if (valueToken.type === Type.string) { // *must* be a CID\n const breakToken = this._next() // swallow the end-of-map token\n if (breakToken.type !== Type.break) {\n throw new Error('Invalid encoded CID form')\n }\n this.tokenBuffer.push(valueToken) // CID.parse will pick this up after our tag token\n return new Token(Type.tag, 42, 0)\n }\n if (valueToken.type === Type.map) {\n const innerKeyToken = this._next()\n if (innerKeyToken.type === Type.string && innerKeyToken.value === 'bytes') {\n const innerValueToken = this._next()\n if (innerValueToken.type === Type.string) { // *must* be Bytes\n for (let i = 0; i < 2; i++) {\n const breakToken = this._next() // swallow two end-of-map tokens\n if (breakToken.type !== Type.break) {\n throw new Error('Invalid encoded Bytes form')\n }\n }\n const bytes = base64.decode(`m${innerValueToken.value}`)\n return new Token(Type.bytes, bytes, innerValueToken.value.length)\n }\n this.tokenBuffer.push(innerValueToken) // bail\n }\n this.tokenBuffer.push(innerKeyToken) // bail\n }\n this.tokenBuffer.push(valueToken) // bail\n }\n this.tokenBuffer.push(keyToken) // bail\n }\n return token\n }\n}\n\nconst decodeOptions = {\n allowIndefinite: false,\n allowUndefined: false,\n allowNaN: false,\n allowInfinity: false,\n allowBigInt: true, // this will lead to BigInt for ints outside of\n // safe-integer range, which may surprise users\n strict: true,\n useMaps: false,\n rejectDuplicateMapKeys: true,\n /** @type {import('cborg').TagDecoder[]} */\n tags: []\n}\n\n// we're going to get TAG(42)STRING(\"bafy...\") from the tokenizer so we only need\n// to deal with the STRING(\"bafy...\") at this point\ndecodeOptions.tags[42] = CID.parse\n\nexport const name = 'dag-json'\nexport const code = 0x0129\n\n/**\n * @template T\n * @param {T} node\n * @returns {ByteView<T>}\n */\nexport const encode = (node) => cborgJson.encode(node, encodeOptions)\n\n/**\n * @template T\n * @param {ByteView<T> | ArrayBufferView<T>} data\n * @returns {T}\n */\nexport const decode = (data) => {\n const buf = toByteView(data)\n // the tokenizer is stateful so we need a single instance of it\n const options = Object.assign(decodeOptions, { tokenizer: new DagJsonTokenizer(buf, decodeOptions) })\n return cborgJson.decode(buf, options)\n}\n\n/**\n * @template T\n * @param {T} node\n * @returns {ToString<T>}\n */\nexport const format = (node) => utf8Decoder.decode(encode(node))\nexport { format as stringify }\nconst utf8Decoder = new TextDecoder()\n\n/**\n * @template T\n * @param {ToString<T>} data\n * @returns {T}\n */\nexport const parse = (data) => decode(utf8Encoder.encode(data))\nconst utf8Encoder = new TextEncoder()\n","import type { ArrayBufferView, ByteView } from './interface.js'\n\nconst textEncoder = new TextEncoder()\nconst textDecoder = new TextDecoder()\n\nexport const name = 'json'\nexport const code = 0x0200\n\nexport function encode <T> (node: T): ByteView<T> {\n return textEncoder.encode(JSON.stringify(node))\n}\n\nexport function decode <T> (data: ByteView<T> | ArrayBufferView<T>): T {\n return JSON.parse(textDecoder.decode(data))\n}\n","import { coerce } from '../bytes.js'\nimport * as Digest from './digest.js'\n\nconst code = 0x0\nconst name = 'identity'\n\nconst encode: (input: Uint8Array) => Uint8Array = coerce\n\nfunction digest (input: Uint8Array): Digest.Digest<typeof code, number> {\n return Digest.create(code, encode(input))\n}\n\nexport const identity = { code, name, encode, digest }\n","import errCode from 'err-code'\nimport { CID } from 'multiformats/cid'\nimport type { ResolveResult } from '../index.js'\n\nexport function resolveObjectPath (object: any, block: Uint8Array, cid: CID, name: string, path: string, toResolve: string[], depth: number): ResolveResult {\n let subObject = object\n let subPath = path\n\n while (toResolve.length > 0) {\n const prop = toResolve[0]\n\n if (prop in subObject) {\n // remove the bit of the path we have resolved\n toResolve.shift()\n subPath = `${subPath}/${prop}`\n\n const subObjectCid = CID.asCID(subObject[prop])\n if (subObjectCid != null) {\n return {\n entry: {\n type: 'object',\n name,\n path,\n cid,\n node: block,\n depth,\n size: BigInt(block.length),\n content: async function * () {\n yield object\n }\n },\n next: {\n cid: subObjectCid,\n name: prop,\n path: subPath,\n toResolve\n }\n }\n }\n\n subObject = subObject[prop]\n } else {\n // cannot resolve further\n throw errCode(new Error(`No property named ${prop} found in node ${cid}`), 'ERR_NO_PROP')\n }\n }\n\n return {\n entry: {\n type: 'object',\n name,\n path,\n cid,\n node: block,\n depth,\n size: BigInt(block.length),\n content: async function * () {\n yield object\n }\n }\n }\n}\n","import * as dagCbor from '@ipld/dag-cbor'\nimport { resolveObjectPath } from '../utils/resolve-object-path.js'\nimport type { Resolver } from '../index.js'\n\nconst resolve: Resolver = async (cid, name, path, toResolve, resolve, depth, blockstore, options) => {\n const block = await blockstore.get(cid, options)\n const object = dagCbor.decode<any>(block)\n\n return resolveObjectPath(object, block, cid, name, path, toResolve, depth)\n}\n\nexport default resolve\n","import * as dagJson from '@ipld/dag-json'\nimport { resolveObjectPath } from '../utils/resolve-object-path.js'\nimport type { Resolver } from '../index.js'\n\nconst resolve: Resolver = async (cid, name, path, toResolve, resolve, depth, blockstore, options) => {\n const block = await blockstore.get(cid, options)\n const object = dagJson.decode<any>(block)\n\n return resolveObjectPath(object, block, cid, name, path, toResolve, depth)\n}\n\nexport default resolve\n","\n/**\n * Progress events are emitted during long running operations\n */\nexport interface ProgressEvent<T extends string = any, D = unknown> {\n /**\n * The event type\n */\n type: T\n\n /**\n * Context-specific event information\n */\n detail: D\n}\n\n/**\n * An implementation of the ProgressEvent interface, this is essentially\n * a typed `CustomEvent` with a `type` property that lets us disambiguate\n * events passed to `progress` callbacks.\n */\nexport class CustomProgressEvent<D = unknown, T extends string = any> extends Event implements ProgressEvent<T, D> {\n // @ts-expect-error type is a property of Event, we just declare it here for use as a type disambiguator\n public type: T\n public detail: D\n\n constructor (type: T, detail?: any) {\n super(type)\n\n this.detail = detail\n }\n}\n\n/**\n * Define an `onProgress` callback that can be invoked with `ProgressEvent`s\n *\n * @example\n *\n * ```typescript\n * type MyOperationProgressEvents =\n * ProgressEvent<'operation:start'> |\n * ProgressEvent<'operation:success', Result> |\n * ProgressEvent<'operation:error', Error>\n *\n * export interface MyOperationOptions extends ProgressOptions<MyOperationProgressEvents> {\n * // define options here\n * }\n * ```\n */\nexport interface ProgressOptions<Event extends ProgressEvent = any> {\n onProgress?: (evt: Event) => void\n}\n","function extractDataFromBlock (block: Uint8Array, blockStart: bigint, requestedStart: bigint, requestedEnd: bigint): Uint8Array {\n const blockLength = BigInt(block.length)\n const blockEnd = BigInt(blockStart + blockLength)\n\n if (requestedStart >= blockEnd || requestedEnd < blockStart) {\n // If we are looking for a byte range that is starts after the start of the block,\n // return an empty block. This can happen when internal nodes contain data\n return new Uint8Array(0)\n }\n\n if (requestedEnd >= blockStart && requestedEnd < blockEnd) {\n // If the end byte is in the current block, truncate the block to the end byte\n block = block.subarray(0, Number(requestedEnd - blockStart))\n }\n\n if (requestedStart >= blockStart && requestedStart < blockEnd) {\n // If the start byte is in the current block, skip to the start byte\n block = block.subarray(Number(requestedStart - blockStart))\n }\n\n return block\n}\n\nexport default extractDataFromBlock\n","import errCode from 'err-code'\n\nconst validateOffsetAndLength = (size: number | bigint, offset: number | bigint = 0, length: number | bigint = size): { start: bigint, end: bigint } => {\n const fileSize = BigInt(size)\n const start = BigInt(offset ?? 0)\n let end = BigInt(length)\n\n if (end !== fileSize) {\n end = start + end\n }\n\n if (end > fileSize) {\n end = fileSize\n }\n\n if (start < 0n) {\n throw errCode(new Error('Offset must be greater than or equal to 0'), 'ERR_INVALID_PARAMS')\n }\n\n if (start > fileSize) {\n throw errCode(new Error('Offset must be less than the file size'), 'ERR_INVALID_PARAMS')\n }\n\n if (end < 0n) {\n throw errCode(new Error('Length must be greater than or equal to 0'), 'ERR_INVALID_PARAMS')\n }\n\n if (end > fileSize) {\n throw errCode(new Error('Length must be less than the file size'), 'ERR_INVALID_PARAMS')\n }\n\n return {\n start,\n end\n }\n}\n\nexport default validateOffsetAndLength\n","import errCode from 'err-code'\nimport * as mh from 'multiformats/hashes/digest'\nimport { CustomProgressEvent } from 'progress-events'\nimport extractDataFromBlock from '../utils/extract-data-from-block.js'\nimport validateOffsetAndLength from '../utils/validate-offset-and-length.js'\nimport type { ExporterOptions, Resolver, ExportProgress } from '../index.js'\n\nconst rawContent = (node: Uint8Array): ((options?: ExporterOptions) => AsyncGenerator<Uint8Array, void, undefined>) => {\n async function * contentGenerator (options: ExporterOptions = {}): AsyncGenerator<Uint8Array, void, undefined> {\n const {\n start,\n end\n } = validateOffsetAndLength(node.length, options.offset, options.length)\n\n const buf = extractDataFromBlock(node, 0n, start, end)\n\n options.onProgress?.(new CustomProgressEvent<ExportProgress>('unixfs:exporter:progress:identity', {\n bytesRead: BigInt(buf.byteLength),\n totalBytes: end - start,\n fileSize: BigInt(node.byteLength)\n }))\n\n yield buf\n }\n\n return contentGenerator\n}\n\nconst resolve: Resolver = async (cid, name, path, toResolve, resolve, depth, blockstore, options) => {\n if (toResolve.length > 0) {\n throw errCode(new Error(`No link named ${path} found in raw node ${cid}`), 'ERR_NOT_FOUND')\n }\n const buf = mh.decode(cid.multihash.bytes)\n\n return {\n entry: {\n type: 'identity',\n name,\n path,\n cid,\n content: rawContent(buf.digest),\n depth,\n size: BigInt(buf.digest.length),\n node: buf.digest\n }\n }\n}\n\nexport default resolve\n","import * as json from 'multiformats/codecs/json'\nimport { resolveObjectPath } from '../utils/resolve-object-path.js'\nimport type { Resolver } from '../index.js'\n\nconst resolve: Resolver = async (cid, name, path, toResolve, resolve, depth, blockstore, options) => {\n const block = await blockstore.get(cid, options)\n const object = json.decode<any>(block)\n\n return resolveObjectPath(object, block, cid, name, path, toResolve, depth)\n}\n\nexport default resolve\n","import errCode from 'err-code'\nimport { CustomProgressEvent } from 'progress-events'\nimport extractDataFromBlock from '../utils/extract-data-from-block.js'\nimport validateOffsetAndLength from '../utils/validate-offset-and-length.js'\nimport type { ExporterOptions, Resolver, ExportProgress } from '../index.js'\n\nconst rawContent = (node: Uint8Array): ((options?: ExporterOptions) => AsyncGenerator<Uint8Array, void, undefined>) => {\n async function * contentGenerator (options: ExporterOptions = {}): AsyncGenerator<Uint8Array, void, undefined> {\n const {\n start,\n end\n } = validateOffsetAndLength(node.length, options.offset, options.length)\n\n const buf = extractDataFromBlock(node, 0n, start, end)\n\n options.onProgress?.(new CustomProgressEvent<ExportProgress>('unixfs:exporter:progress:raw', {\n bytesRead: BigInt(buf.byteLength),\n totalBytes: end - start,\n fileSize: BigInt(node.byteLength)\n }))\n\n yield buf\n }\n\n return contentGenerator\n}\n\nconst resolve: Resolver = async (cid, name, path, toResolve, resolve, depth, blockstore, options) => {\n if (toResolve.length > 0) {\n throw errCode(new Error(`No link named ${path} found in raw node ${cid}`), 'ERR_NOT_FOUND')\n }\n\n const block = await blockstore.get(cid, options)\n\n return {\n entry: {\n type: 'raw',\n name,\n path,\n cid,\n content: rawContent(block),\n depth,\n size: BigInt(block.length),\n node: block\n }\n }\n}\n\nexport default resolve\n","const f32 = new Float32Array([-0])\nconst f8b = new Uint8Array(f32.buffer)\n\n/**\n * Writes a 32 bit float to a buffer using little endian byte order\n */\nexport function writeFloatLE (val: number, buf: Uint8Array, pos: number): void {\n f32[0] = val\n buf[pos] = f8b[0]\n buf[pos + 1] = f8b[1]\n buf[pos + 2] = f8b[2]\n buf[pos + 3] = f8b[3]\n}\n\n/**\n * Writes a 32 bit float to a buffer using big endian byte order\n */\nexport function writeFloatBE (val: number, buf: Uint8Array, pos: number): void {\n f32[0] = val\n buf[pos] = f8b[3]\n buf[pos + 1] = f8b[2]\n buf[pos + 2] = f8b[1]\n buf[pos + 3] = f8b[0]\n}\n\n/**\n * Reads a 32 bit float from a buffer using little endian byte order\n */\nexport function readFloatLE (buf: Uint8Array, pos: number): number {\n f8b[0] = buf[pos]\n f8b[1] = buf[pos + 1]\n f8b[2] = buf[pos + 2]\n f8b[3] = buf[pos + 3]\n return f32[0]\n}\n\n/**\n * Reads a 32 bit float from a buffer using big endian byte order\n */\nexport function readFloatBE (buf: Uint8Array, pos: number): number {\n f8b[3] = buf[pos]\n f8b[2] = buf[pos + 1]\n f8b[1] = buf[pos + 2]\n f8b[0] = buf[pos + 3]\n return f32[0]\n}\n\nconst f64 = new Float64Array([-0])\nconst d8b = new Uint8Array(f64.buffer)\n\n/**\n * Writes a 64 bit double to a buffer using little endian byte order\n */\nexport function writeDoubleLE (val: number, buf: Uint8Array, pos: number): void {\n f64[0] = val\n buf[pos] = d8b[0]\n buf[pos + 1] = d8b[1]\n buf[pos + 2] = d8b[2]\n buf[pos + 3] = d8b[3]\n buf[pos + 4] = d8b[4]\n buf[pos + 5] = d8b[5]\n buf[pos + 6] = d8b[6]\n buf[pos + 7] = d8b[7]\n}\n\n/**\n * Writes a 64 bit double to a buffer using big endian byte order\n */\nexport function writeDoubleBE (val: number, buf: Uint8Array, pos: number): void {\n f64[0] = val\n buf[pos] = d8b[7]\n buf[pos + 1] = d8b[6]\n buf[pos + 2] = d8b[5]\n buf[pos + 3] = d8b[4]\n buf[pos + 4] = d8b[3]\n buf[pos + 5] = d8b[2]\n buf[pos + 6] = d8b[1]\n buf[pos + 7] = d8b[0]\n}\n\n/**\n * Reads a 64 bit double from a buffer using little endian byte order\n */\nexport function readDoubleLE (buf: Uint8Array, pos: number): number {\n d8b[0] = buf[pos]\n d8b[1] = buf[pos + 1]\n d8b[2] = buf[pos + 2]\n d8b[3] = buf[pos + 3]\n d8b[4] = buf[pos + 4]\n d8b[5] = buf[pos + 5]\n d8b[6] = buf[pos + 6]\n d8b[7] = buf[pos + 7]\n return f64[0]\n}\n\n/**\n * Reads a 64 bit double from a buffer using big endian byte order\n */\nexport function readDoubleBE (buf: Uint8Array, pos: number): number {\n d8b[7] = buf[pos]\n d8b[6] = buf[pos + 1]\n d8b[5] = buf[pos + 2]\n d8b[4] = buf[pos + 3]\n d8b[3] = buf[pos + 4]\n d8b[2] = buf[pos + 5]\n d8b[1] = buf[pos + 6]\n d8b[0] = buf[pos + 7]\n return f64[0]\n}\n","// the largest BigInt we can safely downcast to a Number\nconst MAX_SAFE_NUMBER_INTEGER = BigInt(Number.MAX_SAFE_INTEGER)\nconst MIN_SAFE_NUMBER_INTEGER = BigInt(Number.MIN_SAFE_INTEGER)\n\n/**\n * Constructs new long bits.\n *\n * @classdesc Helper class for working with the low and high bits of a 64 bit value.\n * @memberof util\n * @function Object() { [native code] }\n * @param {number} lo - Low 32 bits, unsigned\n * @param {number} hi - High 32 bits, unsigned\n */\nexport class LongBits {\n public lo: number\n public hi: number\n\n constructor (lo: number, hi: number) {\n // note that the casts below are theoretically unnecessary as of today, but older statically\n // generated converter code might still call the ctor with signed 32bits. kept for compat.\n\n /**\n * Low bits\n */\n this.lo = lo | 0\n\n /**\n * High bits\n */\n this.hi = hi | 0\n }\n\n /**\n * Converts this long bits to a possibly unsafe JavaScript number\n */\n toNumber (unsigned: boolean = false): number {\n if (!unsigned && (this.hi >>> 31) > 0) {\n const lo = ~this.lo + 1 >>> 0\n let hi = ~this.hi >>> 0\n if (lo === 0) {\n hi = hi + 1 >>> 0\n }\n return -(lo + hi * 4294967296)\n }\n return this.lo + this.hi * 4294967296\n }\n\n /**\n * Converts this long bits to a bigint\n */\n toBigInt (unsigned: boolean = false): bigint {\n if (unsigned) {\n return BigInt(this.lo >>> 0) + (BigInt(this.hi >>> 0) << 32n)\n }\n\n if ((this.hi >>> 31) !== 0) {\n const lo = ~this.lo + 1 >>> 0\n let hi = ~this.hi >>> 0\n if (lo === 0) {\n hi = hi + 1 >>> 0\n }\n return -(BigInt(lo) + (BigInt(hi) << 32n))\n }\n\n return BigInt(this.lo >>> 0) + (BigInt(this.hi >>> 0) << 32n)\n }\n\n /**\n * Converts this long bits to a string\n */\n toString (unsigned: boolean = false): string {\n return this.toBigInt(unsigned).toString()\n }\n\n /**\n * Zig-zag encodes this long bits\n */\n zzEncode (): this {\n const mask = this.hi >> 31\n this.hi = ((this.hi << 1 | this.lo >>> 31) ^ mask) >>> 0\n this.lo = (this.lo << 1 ^ mask) >>> 0\n return this\n }\n\n /**\n * Zig-zag decodes this long bits\n */\n zzDecode (): this {\n const mask = -(this.lo & 1)\n this.lo = ((this.lo >>> 1 | this.hi << 31) ^ mask) >>> 0\n this.hi = (this.hi >>> 1 ^ mask) >>> 0\n return this\n }\n\n /**\n * Calculates the length of this longbits when encoded as a varint.\n */\n length (): number {\n const part0 = this.lo\n const part1 = (this.lo >>> 28 | this.hi << 4) >>> 0\n const part2 = this.hi >>> 24\n return part2 === 0\n ? part1 === 0\n ? part0 < 16384\n ? part0 < 128 ? 1 : 2\n : part0 < 2097152 ? 3 : 4\n : part1 < 16384\n ? part1 < 128 ? 5 : 6\n : part1 < 2097152 ? 7 : 8\n : part2 < 128 ? 9 : 10\n }\n\n /**\n * Constructs new long bits from the specified number\n */\n static fromBigInt (value: bigint): LongBits {\n if (value === 0n) {\n return zero\n }\n\n if (value < MAX_SAFE_NUMBER_INTEGER && value > MIN_SAFE_NUMBER_INTEGER) {\n return this.fromNumber(Number(value))\n }\n\n const negative = value < 0n\n\n if (negative) {\n value = -value\n }\n\n let hi = value >> 32n\n let lo = value - (hi << 32n)\n\n if (negative) {\n hi = ~hi | 0n\n lo = ~lo | 0n\n\n if (++lo > TWO_32) {\n lo = 0n\n if (++hi > TWO_32) { hi = 0n }\n }\n }\n\n return new LongBits(Number(lo), Number(hi))\n }\n\n /**\n * Constructs new long bits from the specified number\n */\n static fromNumber (value: number): LongBits {\n if (value === 0) { return zero }\n const sign = value < 0\n if (sign) { value = -value }\n let lo = value >>> 0\n let hi = (value - lo) / 4294967296 >>> 0\n if (sign) {\n hi = ~hi >>> 0\n lo = ~lo >>> 0\n if (++lo > 4294967295) {\n lo = 0\n if (++hi > 4294967295) { hi = 0 }\n }\n }\n return new LongBits(lo, hi)\n }\n\n /**\n * Constructs new long bits from a number, long or string\n */\n static from (value: bigint | number | string | { low: number, high: number }): LongBits {\n if (typeof value === 'number') {\n return LongBits.fromNumber(value)\n }\n if (typeof value === 'bigint') {\n return LongBits.fromBigInt(value)\n }\n if (typeof value === 'string') {\n return LongBits.fromBigInt(BigInt(value))\n }\n return value.low != null || value.high != null ? new LongBits(value.low >>> 0, value.high >>> 0) : zero\n }\n}\n\nconst zero = new LongBits(0, 0)\nzero.toBigInt = function () { return 0n }\nzero.zzEncode = zero.zzDecode = function () { return this }\nzero.length = function () { return 1 }\n\nconst TWO_32 = 4294967296n\n","/**\n * Calculates the UTF8 byte length of a string\n */\nexport function length (string: string): number {\n let len = 0\n let c = 0\n for (let i = 0; i < string.length; ++i) {\n c = string.charCodeAt(i)\n\n if (c < 128) {\n len += 1\n } else if (c < 2048) {\n len += 2\n } else if ((c & 0xFC00) === 0xD800 && (string.charCodeAt(i + 1) & 0xFC00) === 0xDC00) {\n ++i\n len += 4\n } else {\n len += 3\n }\n }\n\n return len\n}\n\n/**\n * Reads UTF8 bytes as a string\n */\nexport function read (buffer: Uint8Array, start: number, end: number): string {\n const len = end - start\n\n if (len < 1) {\n return ''\n }\n\n let parts: string[] | undefined\n const chunk: number[] = []\n let i = 0 // char offset\n let t: number // temporary\n\n while (start < end) {\n t = buffer[start++]\n\n if (t < 128) {\n chunk[i++] = t\n } else if (t > 191 && t < 224) {\n chunk[i++] = (t & 31) << 6 | buffer[start++] & 63\n } else if (t > 239 && t < 365) {\n t = ((t & 7) << 18 | (buffer[start++] & 63) << 12 | (buffer[start++] & 63) << 6 | buffer[start++] & 63) - 0x10000\n chunk[i++] = 0xD800 + (t >> 10)\n chunk[i++] = 0xDC00 + (t & 1023)\n } else {\n chunk[i++] = (t & 15) << 12 | (buffer[start++] & 63) << 6 | buffer[start++] & 63\n }\n\n if (i > 8191) {\n (parts ?? (parts = [])).push(String.fromCharCode.apply(String, chunk))\n i = 0\n }\n }\n\n if (parts != null) {\n if (i > 0) {\n parts.push(String.fromCharCode.apply(String, chunk.slice(0, i)))\n }\n\n return parts.join('')\n }\n\n return String.fromCharCode.apply(String, chunk.slice(0, i))\n}\n\n/**\n * Writes a string as UTF8 bytes\n */\nexport function write (string: string, buffer: Uint8Array, offset: number): number {\n const start = offset\n let c1 // character 1\n let c2 // character 2\n\n for (let i = 0; i < string.length; ++i) {\n c1 = string.charCodeAt(i)\n\n if (c1 < 128) {\n buffer[offset++] = c1\n } else if (c1 < 2048) {\n buffer[offset++] = c1 >> 6 | 192\n buffer[offset++] = c1 & 63 | 128\n } else if ((c1 & 0xFC00) === 0xD800 && ((c2 = string.charCodeAt(i + 1)) & 0xFC00) === 0xDC00) {\n c1 = 0x10000 + ((c1 & 0x03FF) << 10) + (c2 & 0x03FF)\n ++i\n buffer[offset++] = c1 >> 18 | 240\n buffer[offset++] = c1 >> 12 & 63 | 128\n buffer[offset++] = c1 >> 6 & 63 | 128\n buffer[offset++] = c1 & 63 | 128\n } else {\n buffer[offset++] = c1 >> 12 | 224\n buffer[offset++] = c1 >> 6 & 63 | 128\n buffer[offset++] = c1 & 63 | 128\n }\n }\n\n return offset - start\n}\n","import { readFloatLE, readDoubleLE } from './float.js'\nimport { LongBits } from './longbits.js'\nimport * as utf8 from './utf8.js'\nimport type { Reader } from '../index.js'\nimport type { Uint8ArrayList } from 'uint8arraylist'\n\n/* istanbul ignore next */\nfunction indexOutOfRange (reader: Reader, writeLength?: number): RangeError {\n return RangeError(`index out of range: ${reader.pos} + ${writeLength ?? 1} > ${reader.len}`)\n}\n\nfunction readFixed32End (buf: Uint8Array, end: number): number { // note that this uses `end`, not `pos`\n return (buf[end - 4] |\n buf[end - 3] << 8 |\n buf[end - 2] << 16 |\n buf[end - 1] << 24) >>> 0\n}\n\n/**\n * Constructs a new reader instance using the specified buffer.\n */\nexport class Uint8ArrayReader implements Reader {\n public buf: Uint8Array\n public pos: number\n public len: number\n\n public _slice = Uint8Array.prototype.subarray\n\n constructor (buffer: Uint8Array) {\n /**\n * Read buffer\n */\n this.buf = buffer\n\n /**\n * Read buffer position\n */\n this.pos = 0\n\n /**\n * Read buffer length\n */\n this.len = buffer.length\n }\n\n /**\n * Reads a varint as an unsigned 32 bit value\n */\n uint32 (): number {\n let value = 4294967295\n\n value = (this.buf[this.pos] & 127) >>> 0; if (this.buf[this.pos++] < 128) return value\n value = (value | (this.buf[this.pos] & 127) << 7) >>> 0; if (this.buf[this.pos++] < 128) return value\n value = (value | (this.buf[this.pos] & 127) << 14) >>> 0; if (this.buf[this.pos++] < 128) return value\n value = (value | (this.buf[this.pos] & 127) << 21) >>> 0; if (this.buf[this.pos++] < 128) return value\n value = (value | (this.buf[this.pos] & 15) << 28) >>> 0; if (this.buf[this.pos++] < 128) return value\n\n if ((this.pos += 5) > this.len) {\n this.pos = this.len\n throw indexOutOfRange(this, 10)\n }\n\n return value\n }\n\n /**\n * Reads a varint as a signed 32 bit value\n */\n int32 (): number {\n return this.uint32() | 0\n }\n\n /**\n * Reads a zig-zag encoded varint as a signed 32 bit value\n */\n sint32 (): number {\n const value = this.uint32()\n return value >>> 1 ^ -(value & 1) | 0\n }\n\n /**\n * Reads a varint as a boolean\n */\n bool (): boolean {\n return this.uint32() !== 0\n }\n\n /**\n * Reads fixed 32 bits as an unsigned 32 bit integer\n */\n fixed32 (): number {\n if (this.pos + 4 > this.len) { throw indexOutOfRange(this, 4) }\n\n const res = readFixed32End(this.buf, this.pos += 4)\n\n return res\n }\n\n /**\n * Reads fixed 32 bits as a signed 32 bit integer\n */\n sfixed32 (): number {\n if (this.pos + 4 > this.len) {\n throw indexOutOfRange(this, 4)\n }\n\n const res = readFixed32End(this.buf, this.pos += 4) | 0\n\n return res\n }\n\n /**\n * Reads a float (32 bit) as a number\n */\n float (): number {\n if (this.pos + 4 > this.len) {\n throw indexOutOfRange(this, 4)\n }\n\n const value = readFloatLE(this.buf, this.pos)\n this.pos += 4\n return value\n }\n\n /**\n * Reads a double (64 bit float) as a number\n */\n double (): number {\n /* istanbul ignore if */\n if (this.pos + 8 > this.len) { throw indexOutOfRange(this, 4) }\n\n const value = readDoubleLE(this.buf, this.pos)\n this.pos += 8\n return value\n }\n\n /**\n * Reads a sequence of bytes preceded by its length as a varint\n */\n bytes (): Uint8Array {\n const length = this.uint32()\n const start = this.pos\n const end = this.pos + length\n\n /* istanbul ignore if */\n if (end > this.len) {\n throw indexOutOfRange(this, length)\n }\n\n this.pos += length\n\n return start === end // fix for IE 10/Win8 and others' subarray returning array of size 1\n ? new Uint8Array(0)\n : this.buf.subarray(start, end)\n }\n\n /**\n * Reads a string preceded by its byte length as a varint\n */\n string (): string {\n const bytes = this.bytes()\n return utf8.read(bytes, 0, bytes.length)\n }\n\n /**\n * Skips the specified number of bytes if specified, otherwise skips a varint\n */\n skip (length?: number): this {\n if (typeof length === 'number') {\n /* istanbul ignore if */\n if (this.pos + length > this.len) { throw indexOutOfRange(this, length) }\n this.pos += length\n } else {\n do {\n /* istanbul ignore if */\n if (this.pos >= this.len) {\n throw indexOutOfRange(this)\n }\n } while ((this.buf[this.pos++] & 128) !== 0)\n }\n return this\n }\n\n /**\n * Skips the next element of the specified wire type\n */\n skipType (wireType: number): this {\n switch (wireType) {\n case 0:\n this.skip()\n break\n case 1:\n this.skip(8)\n break\n case 2:\n this.skip(this.uint32())\n break\n case 3:\n while ((wireType = this.uint32() & 7) !== 4) {\n this.skipType(wireType)\n }\n break\n case 5:\n this.skip(4)\n break\n\n /* istanbul ignore next */\n default:\n throw Error(`invalid wire type ${wireType} at offset ${this.pos}`)\n }\n return this\n }\n\n private readLongVarint (): LongBits {\n // tends to deopt with local vars for octet etc.\n const bits = new LongBits(0, 0)\n let i = 0\n if (this.len - this.pos > 4) { // fast route (lo)\n for (; i < 4; ++i) {\n // 1st..4th\n bits.lo = (bits.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0\n if (this.buf[this.pos++] < 128) { return bits }\n }\n // 5th\n bits.lo = (bits.lo | (this.buf[this.pos] & 127) << 28) >>> 0\n bits.hi = (bits.hi | (this.buf[this.pos] & 127) >> 4) >>> 0\n if (this.buf[this.pos++] < 128) { return bits }\n i = 0\n } else {\n for (; i < 3; ++i) {\n /* istanbul ignore if */\n if (this.pos >= this.len) { throw indexOutOfRange(this) }\n // 1st..3th\n bits.lo = (bits.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0\n if (this.buf[this.pos++] < 128) { return bits }\n }\n // 4th\n bits.lo = (bits.lo | (this.buf[this.pos++] & 127) << i * 7) >>> 0\n return bits\n }\n if (this.len - this.pos > 4) { // fast route (hi)\n for (; i < 5; ++i) {\n // 6th..10th\n bits.hi = (bits.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0\n if (this.buf[this.pos++] < 128) { return bits }\n }\n } else {\n for (; i < 5; ++i) {\n if (this.pos >= this.len) {\n throw indexOutOfRange(this)\n }\n\n // 6th..10th\n bits.hi = (bits.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0\n if (this.buf[this.pos++] < 128) { return bits }\n }\n }\n\n throw Error('invalid varint encoding')\n }\n\n private readFixed64 (): LongBits {\n if (this.pos + 8 > this.len) {\n throw indexOutOfRange(this, 8)\n }\n\n const lo = readFixed32End(this.buf, this.pos += 4)\n const hi = readFixed32End(this.buf, this.pos += 4)\n\n return new LongBits(lo, hi)\n }\n\n /**\n * Reads a varint as a signed 64 bit value\n */\n int64 (): bigint {\n return this.readLongVarint().toBigInt()\n }\n\n /**\n * Reads a varint as a signed 64 bit value returned as a possibly unsafe\n * JavaScript number\n */\n int64Number (): number {\n return this.readLongVarint().toNumber()\n }\n\n /**\n * Reads a varint as a signed 64 bit value returned as a string\n */\n int64String (): string {\n return this.readLongVarint().toString()\n }\n\n /**\n * Reads a varint as an unsigned 64 bit value\n */\n uint64 (): bigint {\n return this.readLongVarint().toBigInt(true)\n }\n\n /**\n * Reads a varint as an unsigned 64 bit value returned as a possibly unsafe\n * JavaScript number\n */\n uint64Number (): number {\n return this.readLongVarint().toNumber(true)\n }\n\n /**\n * Reads a varint as an unsigned 64 bit value returned as a string\n */\n uint64String (): string {\n return this.readLongVarint().toString(true)\n }\n\n /**\n * Reads a zig-zag encoded varint as a signed 64 bit value\n */\n sint64 (): bigint {\n return this.readLongVarint().zzDecode().toBigInt()\n }\n\n /**\n * Reads a zig-zag encoded varint as a signed 64 bit value returned as a\n * possibly unsafe JavaScript number\n */\n sint64Number (): number {\n return this.readLongVarint().zzDecode().toNumber()\n }\n\n /**\n * Reads a zig-zag encoded varint as a signed 64 bit value returned as a\n * string\n */\n sint64String (): string {\n return this.readLongVarint().zzDecode().toString()\n }\n\n /**\n * Reads fixed 64 bits\n */\n fixed64 (): bigint {\n return this.readFixed64().toBigInt()\n }\n\n /**\n * Reads fixed 64 bits returned as a possibly unsafe JavaScript number\n */\n fixed64Number (): number {\n return this.readFixed64().toNumber()\n }\n\n /**\n * Reads fixed 64 bits returned as a string\n */\n fixed64String (): string {\n return this.readFixed64().toString()\n }\n\n /**\n * Reads zig-zag encoded fixed 64 bits\n */\n sfixed64 (): bigint {\n return this.readFixed64().toBigInt()\n }\n\n /**\n * Reads zig-zag encoded fixed 64 bits returned as a possibly unsafe\n * JavaScript number\n */\n sfixed64Number (): number {\n return this.readFixed64().toNumber()\n }\n\n /**\n * Reads zig-zag encoded fixed 64 bits returned as a string\n */\n sfixed64String (): string {\n return this.readFixed64().toString()\n }\n}\n\nexport function createReader (buf: Uint8Array | Uint8ArrayList): Reader {\n return new Uint8ArrayReader(buf instanceof Uint8Array ? buf : buf.subarray())\n}\n","import { createReader } from './utils/reader.js'\nimport type { Codec } from './codec.js'\nimport type { Uint8ArrayList } from 'uint8arraylist'\n\nexport function decodeMessage <T> (buf: Uint8Array | Uint8ArrayList, codec: Codec<T>): T {\n const reader = createReader(buf)\n\n return codec.decode(reader)\n}\n","/**\n * Returns a `Uint8Array` of the requested size. Referenced memory will\n * be initialized to 0.\n */\nexport function alloc (size: number = 0): Uint8Array {\n return new Uint8Array(size)\n}\n\n/**\n * Where possible returns a Uint8Array of the requested size that references\n * uninitialized memory. Only use if you are certain you will immediately\n * overwrite every value in the returned `Uint8Array`.\n */\nexport function allocUnsafe (size: number = 0): Uint8Array {\n return new Uint8Array(size)\n}\n","import { baseX } from './base.js'\n\nexport const base10 = baseX({\n prefix: '9',\n name: 'base10',\n alphabet: '0123456789'\n})\n","import { rfc4648 } from './base.js'\n\nexport const base16 = rfc4648({\n prefix: 'f',\n name: 'base16',\n alphabet: '0123456789abcdef',\n bitsPerChar: 4\n})\n\nexport const base16upper = rfc4648({\n prefix: 'F',\n name: 'base16upper',\n alphabet: '0123456789ABCDEF',\n bitsPerChar: 4\n})\n","import { rfc4648 } from './base.js'\n\nexport const base2 = rfc4648({\n prefix: '0',\n name: 'base2',\n alphabet: '01',\n bitsPerChar: 1\n})\n","import { from } from './base.js'\n\nconst alphabet = Array.from('🚀🪐☄🛰🌌🌑🌒🌓🌔🌕🌖🌗🌘🌍🌏🌎🐉☀💻🖥💾💿😂❤😍🤣😊🙏💕😭😘👍😅👏😁🔥🥰💔💖💙😢🤔😆🙄💪😉☺👌🤗💜😔😎😇🌹🤦🎉💞✌✨🤷😱😌🌸🙌😋💗💚😏💛🙂💓🤩😄😀🖤😃💯🙈👇🎶😒🤭❣😜💋👀😪😑💥🙋😞😩😡🤪👊🥳😥🤤👉💃😳✋😚😝😴🌟😬🙃🍀🌷😻😓⭐✅🥺🌈😈🤘💦✔😣🏃💐☹🎊💘😠☝😕🌺🎂🌻😐🖕💝🙊😹🗣💫💀👑🎵🤞😛🔴😤🌼😫⚽🤙☕🏆🤫👈😮🙆🍻🍃🐶💁😲🌿🧡🎁⚡🌞🎈❌✊👋😰🤨😶🤝🚶💰🍓💢🤟🙁🚨💨🤬✈🎀🍺🤓😙💟🌱😖👶🥴▶➡❓💎💸⬇😨🌚🦋😷🕺⚠🙅😟😵👎🤲🤠🤧📌🔵💅🧐🐾🍒😗🤑🌊🤯🐷☎💧😯💆👆🎤🙇🍑❄🌴💣🐸💌📍🥀🤢👅💡💩👐📸👻🤐🤮🎼🥵🚩🍎🍊👼💍📣🥂')\nconst alphabetBytesToChars: string[] = (alphabet.reduce<string[]>((p, c, i) => { p[i] = c; return p }, ([])))\nconst alphabetCharsToBytes: number[] = (alphabet.reduce<number[]>((p, c, i) => { p[c.codePointAt(0) as number] = i; return p }, ([])))\n\nfunction encode (data: Uint8Array): string {\n return data.reduce((p, c) => {\n p += alphabetBytesToChars[c]\n return p\n }, '')\n}\n\nfunction decode (str: string): Uint8Array {\n const byts = []\n for (const char of str) {\n const byt = alphabetCharsToBytes[char.codePointAt(0) as number]\n if (byt === undefined) {\n throw new Error(`Non-base256emoji character: ${char}`)\n }\n byts.push(byt)\n }\n return new Uint8Array(byts)\n}\n\nexport const base256emoji = from({\n prefix: '🚀',\n name: 'base256emoji',\n encode,\n decode\n})\n","import { baseX } from './base.js'\n\nexport const base36 = baseX({\n prefix: 'k',\n name: 'base36',\n alphabet: '0123456789abcdefghijklmnopqrstuvwxyz'\n})\n\nexport const base36upper = baseX({\n prefix: 'K',\n name: 'base36upper',\n alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'\n})\n","import { rfc4648 } from './base.js'\n\nexport const base8 = rfc4648({\n prefix: '7',\n name: 'base8',\n alphabet: '01234567',\n bitsPerChar: 3\n})\n","import { fromString, toString } from '../bytes.js'\nimport { from } from './base.js'\n\nexport const identity = from({\n prefix: '\\x00',\n name: 'identity',\n encode: (buf) => toString(buf),\n decode: (str) => fromString(str)\n})\n","import * as base10 from './bases/base10.js'\nimport * as base16 from './bases/base16.js'\nimport * as base2 from './bases/base2.js'\nimport * as base256emoji from './bases/base256emoji.js'\nimport * as base32 from './bases/base32.js'\nimport * as base36 from './bases/base36.js'\nimport * as base58 from './bases/base58.js'\nimport * as base64 from './bases/base64.js'\nimport * as base8 from './bases/base8.js'\nimport * as identityBase from './bases/identity.js'\nimport * as json from './codecs/json.js'\nimport * as raw from './codecs/raw.js'\nimport * as identity from './hashes/identity.js'\nimport * as sha2 from './hashes/sha2.js'\nimport { CID, hasher, digest, varint, bytes } from './index.js'\n\nexport const bases = { ...identityBase, ...base2, ...base8, ...base10, ...base16, ...base32, ...base36, ...base58, ...base64, ...base256emoji }\nexport const hashes = { ...sha2, ...identity }\nexport const codecs = { raw, json }\n\nexport { CID, hasher, digest, varint, bytes }\n","import { bases } from 'multiformats/basics'\nimport type { MultibaseCodec } from 'multiformats'\nimport { allocUnsafe } from '#alloc'\n\nfunction createCodec (name: string, prefix: string, encode: (buf: Uint8Array) => string, decode: (str: string) => Uint8Array): MultibaseCodec<any> {\n return {\n name,\n prefix,\n encoder: {\n name,\n prefix,\n encode\n },\n decoder: {\n decode\n }\n }\n}\n\nconst string = createCodec('utf8', 'u', (buf) => {\n const decoder = new TextDecoder('utf8')\n return 'u' + decoder.decode(buf)\n}, (str) => {\n const encoder = new TextEncoder()\n return encoder.encode(str.substring(1))\n})\n\nconst ascii = createCodec('ascii', 'a', (buf) => {\n let string = 'a'\n\n for (let i = 0; i < buf.length; i++) {\n string += String.fromCharCode(buf[i])\n }\n return string\n}, (str) => {\n str = str.substring(1)\n const buf = allocUnsafe(str.length)\n\n for (let i = 0; i < str.length; i++) {\n buf[i] = str.charCodeAt(i)\n }\n\n return buf\n})\n\nexport type SupportedEncodings = 'utf8' | 'utf-8' | 'hex' | 'latin1' | 'ascii' | 'binary' | keyof typeof bases\n\nconst BASES: Record<SupportedEncodings, MultibaseCodec<any>> = {\n utf8: string,\n 'utf-8': string,\n hex: bases.base16,\n latin1: ascii,\n ascii,\n binary: ascii,\n\n ...bases\n}\n\nexport default BASES\n","import bases, { type SupportedEncodings } from './util/bases.js'\n\nexport type { SupportedEncodings }\n\n/**\n * Create a `Uint8Array` from the passed string\n *\n * Supports `utf8`, `utf-8`, `hex`, and any encoding supported by the multiformats module.\n *\n * Also `ascii` which is similar to node's 'binary' encoding.\n */\nexport function fromString (string: string, encoding: SupportedEncodings = 'utf8'): Uint8Array {\n const base = bases[encoding]\n\n if (base == null) {\n throw new Error(`Unsupported encoding \"${encoding}\"`)\n }\n\n // add multibase prefix\n return base.decoder.decode(`${base.prefix}${string}`) // eslint-disable-line @typescript-eslint/restrict-template-expressions\n}\n","import { allocUnsafe } from 'uint8arrays/alloc'\n\n/**\n * A general purpose buffer pool\n */\nexport default function pool (size?: number): (size: number) => Uint8Array {\n const SIZE = size ?? 8192\n const MAX = SIZE >>> 1\n let slab: Uint8Array\n let offset = SIZE\n return function poolAlloc (size: number) {\n if (size < 1 || size > MAX) {\n return allocUnsafe(size)\n }\n\n if (offset + size > SIZE) {\n slab = allocUnsafe(SIZE)\n offset = 0\n }\n\n const buf = slab.subarray(offset, offset += size)\n\n if ((offset & 7) !== 0) {\n // align to 32 bit\n offset = (offset | 7) + 1\n }\n\n return buf\n }\n}\n","import { allocUnsafe } from 'uint8arrays/alloc'\nimport { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'\nimport { writeFloatLE, writeDoubleLE } from './float.js'\nimport { LongBits } from './longbits.js'\nimport pool from './pool.js'\nimport * as utf8 from './utf8.js'\nimport type { Writer } from '../index.js'\n\ninterface WriterOperation<T> {\n (val: T, buf: Uint8Array, pos: number): any\n}\n\n/**\n * Constructs a new writer operation instance.\n *\n * @classdesc Scheduled writer operation\n */\nclass Op<T> {\n /**\n * Function to call\n */\n public fn: WriterOperation<T>\n\n /**\n * Value byte length\n */\n public len: number\n\n /**\n * Next operation\n */\n public next?: Op<any>\n\n /**\n * Value to write\n */\n public val: T\n\n constructor (fn: WriterOperation<T>, len: number, val: T) {\n this.fn = fn\n this.len = len\n this.next = undefined\n this.val = val // type varies\n }\n}\n\n/* istanbul ignore next */\nfunction noop (): void {} // eslint-disable-line no-empty-function\n\n/**\n * Constructs a new writer state instance\n */\nclass State {\n /**\n * Current head\n */\n public head: Op<any>\n\n /**\n * Current tail\n */\n public tail: Op<any>\n\n /**\n * Current buffer length\n */\n public len: number\n\n /**\n * Next state\n */\n public next?: State\n\n constructor (writer: Uint8ArrayWriter) {\n this.head = writer.head\n this.tail = writer.tail\n this.len = writer.len\n this.next = writer.states\n }\n}\n\nconst bufferPool = pool()\n\n/**\n * Allocates a buffer of the specified size\n */\nfunction alloc (size: number): Uint8Array {\n if (globalThis.Buffer != null) {\n return allocUnsafe(size)\n }\n\n return bufferPool(size)\n}\n\n/**\n * When a value is written, the writer calculates its byte length and puts it into a linked\n * list of operations to perform when finish() is called. This both allows us to allocate\n * buffers of the exact required size and reduces the amount of work we have to do compared\n * to first calculating over objects and then encoding over objects. In our case, the encoding\n * part is just a linked list walk calling operations with already prepared values.\n */\nclass Uint8ArrayWriter implements Writer {\n /**\n * Current length\n */\n public len: number\n\n /**\n * Operations head\n */\n public head: Op<any>\n\n /**\n * Operations tail\n */\n public tail: Op<any>\n\n /**\n * Linked forked states\n */\n public states?: any\n\n constructor () {\n this.len = 0\n this.head = new Op(noop, 0, 0)\n this.tail = this.head\n this.states = null\n }\n\n /**\n * Pushes a new operation to the queue\n */\n _push (fn: WriterOperation<any>, len: number, val: any): this {\n this.tail = this.tail.next = new Op(fn, len, val)\n this.len += len\n\n return this\n }\n\n /**\n * Writes an unsigned 32 bit value as a varint\n */\n uint32 (value: number): this {\n // here, the call to this.push has been inlined and a varint specific Op subclass is used.\n // uint32 is by far the most frequently used operation and benefits significantly from this.\n this.len += (this.tail = this.tail.next = new VarintOp(\n (value = value >>> 0) <\n 128\n ? 1\n : value < 16384\n ? 2\n : value < 2097152\n ? 3\n : value < 268435456\n ? 4\n : 5,\n value)).len\n return this\n }\n\n /**\n * Writes a signed 32 bit value as a varint`\n */\n int32 (value: number): this {\n return value < 0\n ? this._push(writeVarint64, 10, LongBits.fromNumber(value)) // 10 bytes per spec\n : this.uint32(value)\n }\n\n /**\n * Writes a 32 bit value as a varint, zig-zag encoded\n */\n sint32 (value: number): this {\n return this.uint32((value << 1 ^ value >> 31) >>> 0)\n }\n\n /**\n * Writes an unsigned 64 bit value as a varint\n */\n uint64 (value: bigint): this {\n const bits = LongBits.fromBigInt(value)\n return this._push(writeVarint64, bits.length(), bits)\n }\n\n /**\n * Writes an unsigned 64 bit value as a varint\n */\n uint64Number (value: number): this {\n const bits = LongBits.fromNumber(value)\n return this._push(writeVarint64, bits.length(), bits)\n }\n\n /**\n * Writes an unsigned 64 bit value as a varint\n */\n uint64String (value: string): this {\n return this.uint64(BigInt(value))\n }\n\n /**\n * Writes a signed 64 bit value as a varint\n */\n int64 (value: bigint): this {\n return this.uint64(value)\n }\n\n /**\n * Writes a signed 64 bit value as a varint\n */\n int64Number (value: number): this {\n return this.uint64Number(value)\n }\n\n /**\n * Writes a signed 64 bit value as a varint\n */\n int64String (value: string): this {\n return this.uint64String(value)\n }\n\n /**\n * Writes a signed 64 bit value as a varint, zig-zag encoded\n */\n sint64 (value: bigint): this {\n const bits = LongBits.fromBigInt(value).zzEncode()\n return this._push(writeVarint64, bits.length(), bits)\n }\n\n /**\n * Writes a signed 64 bit value as a varint, zig-zag encoded\n */\n sint64Number (value: number): this {\n const bits = LongBits.fromNumber(value).zzEncode()\n return this._push(writeVarint64, bits.length(), bits)\n }\n\n /**\n * Writes a signed 64 bit value as a varint, zig-zag encoded\n */\n sint64String (value: string): this {\n return this.sint64(BigInt(value))\n }\n\n /**\n * Writes a boolish value as a varint\n */\n bool (value: boolean): this {\n return this._push(writeByte, 1, value ? 1 : 0)\n }\n\n /**\n * Writes an unsigned 32 bit value as fixed 32 bits\n */\n fixed32 (value: number): this {\n return this._push(writeFixed32, 4, value >>> 0)\n }\n\n /**\n * Writes a signed 32 bit value as fixed 32 bits\n */\n sfixed32 (value: number): this {\n return this.fixed32(value)\n }\n\n /**\n * Writes an unsigned 64 bit value as fixed 64 bits\n */\n fixed64 (value: bigint): this {\n const bits = LongBits.fromBigInt(value)\n return this._push(writeFixed32, 4, bits.lo)._push(writeFixed32, 4, bits.hi)\n }\n\n /**\n * Writes an unsigned 64 bit value as fixed 64 bits\n */\n fixed64Number (value: number): this {\n const bits = LongBits.fromNumber(value)\n return this._push(writeFixed32, 4, bits.lo)._push(writeFixed32, 4, bits.hi)\n }\n\n /**\n * Writes an unsigned 64 bit value as fixed 64 bits\n */\n fixed64String (value: string): this {\n return this.fixed64(BigInt(value))\n }\n\n /**\n * Writes a signed 64 bit value as fixed 64 bits\n */\n sfixed64 (value: bigint): this {\n return this.fixed64(value)\n }\n\n /**\n * Writes a signed 64 bit value as fixed 64 bits\n */\n sfixed64Number (value: number): this {\n return this.fixed64Number(value)\n }\n\n /**\n * Writes a signed 64 bit value as fixed 64 bits\n */\n sfixed64String (value: string): this {\n return this.fixed64String(value)\n }\n\n /**\n * Writes a float (32 bit)\n */\n float (value: number): this {\n return this._push(writeFloatLE, 4, value)\n }\n\n /**\n * Writes a double (64 bit float).\n *\n * @function\n * @param {number} value - Value to write\n * @returns {Writer} `this`\n */\n double (value: number): this {\n return this._push(writeDoubleLE, 8, value)\n }\n\n /**\n * Writes a sequence of bytes\n */\n bytes (value: Uint8Array): this {\n const len = value.length >>> 0\n\n if (len === 0) {\n return this._push(writeByte, 1, 0)\n }\n\n return this.uint32(len)._push(writeBytes, len, value)\n }\n\n /**\n * Writes a string\n */\n string (value: string): this {\n const len = utf8.length(value)\n return len !== 0\n ? this.uint32(len)._push(utf8.write, len, value)\n : this._push(writeByte, 1, 0)\n }\n\n /**\n * Forks this writer's state by pushing it to a stack.\n * Calling {@link Writer#reset|reset} or {@link Writer#ldelim|ldelim} resets the writer to the previous state.\n */\n fork (): this {\n this.states = new State(this)\n this.head = this.tail = new Op(noop, 0, 0)\n this.len = 0\n return this\n }\n\n /**\n * Resets this instance to the last state\n */\n reset (): this {\n if (this.states != null) {\n this.head = this.states.head\n this.tail = this.states.tail\n this.len = this.states.len\n this.states = this.states.next\n } else {\n this.head = this.tail = new Op(noop, 0, 0)\n this.len = 0\n }\n return this\n }\n\n /**\n * Resets to the last state and appends the fork state's current write length as a varint followed by its operations.\n */\n ldelim (): this {\n const head = this.head\n const tail = this.tail\n const len = this.len\n this.reset().uint32(len)\n if (len !== 0) {\n this.tail.next = head.next // skip noop\n this.tail = tail\n this.len += len\n }\n return this\n }\n\n /**\n * Finishes the write operation\n */\n finish (): Uint8Array {\n let head = this.head.next // skip noop\n const buf = alloc(this.len)\n let pos = 0\n while (head != null) {\n head.fn(head.val, buf, pos)\n pos += head.len\n head = head.next\n }\n // this.head = this.tail = null;\n return buf\n }\n}\n\nfunction writeByte (val: number, buf: Uint8Array, pos: number): void {\n buf[pos] = val & 255\n}\n\nfunction writeVarint32 (val: number, buf: Uint8Array, pos: number): void {\n while (val > 127) {\n buf[pos++] = val & 127 | 128\n val >>>= 7\n }\n buf[pos] = val\n}\n\n/**\n * Constructs a new varint writer operation instance.\n *\n * @classdesc Scheduled varint writer operation\n */\nclass VarintOp extends Op<number> {\n public next?: Op<any>\n\n constructor (len: number, val: number) {\n super(writeVarint32, len, val)\n this.next = undefined\n }\n}\n\nfunction writeVarint64 (val: LongBits, buf: Uint8Array, pos: number): void {\n while (val.hi !== 0) {\n buf[pos++] = val.lo & 127 | 128\n val.lo = (val.lo >>> 7 | val.hi << 25) >>> 0\n val.hi >>>= 7\n }\n while (val.lo > 127) {\n buf[pos++] = val.lo & 127 | 128\n val.lo = val.lo >>> 7\n }\n buf[pos++] = val.lo\n}\n\nfunction writeFixed32 (val: number, buf: Uint8Array, pos: number): void {\n buf[pos] = val & 255\n buf[pos + 1] = val >>> 8 & 255\n buf[pos + 2] = val >>> 16 & 255\n buf[pos + 3] = val >>> 24\n}\n\nfunction writeBytes (val: Uint8Array, buf: Uint8Array, pos: number): void {\n buf.set(val, pos)\n}\n\nif (globalThis.Buffer != null) {\n Uint8ArrayWriter.prototype.bytes = function (value: Uint8Array) {\n const len = value.length >>> 0\n\n this.uint32(len)\n\n if (len > 0) {\n this._push(writeBytesBuffer, len, value)\n }\n\n return this\n }\n\n Uint8ArrayWriter.prototype.string = function (value: string) {\n const len = globalThis.Buffer.byteLength(value)\n\n this.uint32(len)\n\n if (len > 0) {\n this._push(writeStringBuffer, len, value)\n }\n\n return this\n }\n}\n\nfunction writeBytesBuffer (val: Uint8Array, buf: Uint8Array, pos: number): void {\n buf.set(val, pos) // faster than copy (requires node >= 4 where Buffers extend Uint8Array and set is properly inherited)\n // also works for plain array values\n}\n\nfunction writeStringBuffer (val: string, buf: Uint8Array, pos: number): void {\n if (val.length < 40) {\n // plain js is faster for short strings (probably due to redundant assertions)\n utf8.write(val, buf, pos)\n // @ts-expect-error buf isn't a Uint8Array?\n } else if (buf.utf8Write != null) {\n // @ts-expect-error buf isn't a Uint8Array?\n buf.utf8Write(val, pos)\n } else {\n buf.set(uint8ArrayFromString(val), pos)\n }\n}\n\n/**\n * Creates a new writer\n */\nexport function createWriter (): Writer {\n return new Uint8ArrayWriter()\n}\n","import { createWriter } from './utils/writer.js'\nimport type { Codec } from './codec.js'\n\nexport function encodeMessage <T> (message: T, codec: Codec<T>): Uint8Array {\n const w = createWriter()\n\n codec.encode(message, w, {\n lengthDelimited: false\n })\n\n return w.finish()\n}\n","import type { Writer, Reader } from './index.js'\n\n// https://developers.google.com/protocol-buffers/docs/encoding#structure\nexport enum CODEC_TYPES {\n VARINT = 0,\n BIT64,\n LENGTH_DELIMITED,\n START_GROUP,\n END_GROUP,\n BIT32\n}\n\nexport interface EncodeOptions {\n lengthDelimited?: boolean\n writeDefaults?: boolean\n}\n\nexport interface EncodeFunction<T> {\n (value: Partial<T>, writer: Writer, opts?: EncodeOptions): void\n}\n\nexport interface DecodeFunction<T> {\n (reader: Reader, length?: number): T\n}\n\nexport interface Codec<T> {\n name: string\n type: CODEC_TYPES\n encode: EncodeFunction<T>\n decode: DecodeFunction<T>\n}\n\nexport function createCodec <T> (name: string, type: CODEC_TYPES, encode: EncodeFunction<T>, decode: DecodeFunction<T>): Codec<T> {\n return {\n name,\n type,\n encode,\n decode\n }\n}\n","import { createCodec, CODEC_TYPES } from '../codec.js'\nimport type { DecodeFunction, EncodeFunction, Codec } from '../codec.js'\n\nexport function enumeration <T> (v: any): Codec<T> {\n function findValue (val: string | number): number {\n // Use the reverse mapping to look up the enum key for the stored value\n // https://www.typescriptlang.org/docs/handbook/enums.html#reverse-mappings\n if (v[val.toString()] == null) {\n throw new Error('Invalid enum value')\n }\n\n return v[val]\n }\n\n const encode: EncodeFunction<number | string> = function enumEncode (val, writer) {\n const enumValue = findValue(val)\n\n writer.int32(enumValue)\n }\n\n const decode: DecodeFunction<number | string> = function enumDecode (reader) {\n const val = reader.int32()\n\n return findValue(val)\n }\n\n // @ts-expect-error yeah yeah\n return createCodec('enum', CODEC_TYPES.VARINT, encode, decode)\n}\n","import { createCodec, CODEC_TYPES, type EncodeOptions, type Codec } from '../codec.js'\nimport type { Reader, Writer } from '../index.js'\n\nexport interface Factory<A, T> {\n new (obj: A): T\n}\n\nexport function message <T> (encode: (obj: Partial<T>, writer: Writer, opts?: EncodeOptions) => void, decode: (reader: Reader, length?: number) => T): Codec<T> {\n return createCodec('message', CODEC_TYPES.LENGTH_DELIMITED, encode, decode)\n}\n","import type { Codec } from './codec.js'\n\nexport interface FieldDef {\n name: string\n codec: Codec<any>\n optional?: true\n repeats?: true\n packed?: true\n}\n\nexport {\n decodeMessage\n} from './decode.js'\n\nexport {\n encodeMessage\n} from './encode.js'\n\nexport { enumeration } from './codecs/enum.js'\nexport { message } from './codecs/message.js'\nexport { createReader as reader } from './utils/reader.js'\nexport { createWriter as writer } from './utils/writer.js'\nexport type { Codec, EncodeOptions } from './codec.js'\n\nexport interface Writer {\n /**\n * Current length\n */\n len: number\n\n /**\n * Writes an unsigned 32 bit value as a varint\n */\n uint32(value: number): this\n\n /**\n * Writes a signed 32 bit value as a varint`\n */\n int32(value: number): this\n\n /**\n * Writes a 32 bit value as a varint, zig-zag encoded\n */\n sint32(value: number): this\n\n /**\n * Writes an unsigned 64 bit value as a varint\n */\n uint64(value: bigint): this\n\n /**\n * Writes an unsigned 64 bit value as a varint\n */\n uint64Number(value: number): this\n\n /**\n * Writes an unsigned 64 bit value as a varint\n */\n uint64String(value: string): this\n\n /**\n * Writes a signed 64 bit value as a varint\n */\n int64(value: bigint): this\n\n /**\n * Writes a signed 64 bit value as a varint\n */\n int64Number(value: number): this\n\n /**\n * Writes a signed 64 bit value as a varint\n */\n int64String(value: string): this\n\n /**\n * Writes a signed 64 bit value as a varint, zig-zag encoded\n */\n sint64(value: bigint): this\n\n /**\n * Writes a signed 64 bit value as a varint, zig-zag encoded\n */\n sint64Number(value: number): this\n\n /**\n * Writes a signed 64 bit value as a varint, zig-zag encoded\n */\n sint64String(value: string): this\n\n /**\n * Writes a boolish value as a varint\n */\n bool(value: boolean): this\n\n /**\n * Writes an unsigned 32 bit value as fixed 32 bits\n */\n fixed32(value: number): this\n\n /**\n * Writes a signed 32 bit value as fixed 32 bits\n */\n sfixed32(value: number): this\n\n /**\n * Writes an unsigned 64 bit value as fixed 64 bits\n */\n fixed64(value: bigint): this\n\n /**\n * Writes an unsigned 64 bit value as fixed 64 bits\n */\n fixed64Number(value: number): this\n\n /**\n * Writes an unsigned 64 bit value as fixed 64 bits\n */\n fixed64String(value: string): this\n\n /**\n * Writes a signed 64 bit value as fixed 64 bits\n */\n sfixed64(value: bigint): this\n\n /**\n * Writes a signed 64 bit value as fixed 64 bits\n */\n sfixed64Number(value: number): this\n\n /**\n * Writes a signed 64 bit value as fixed 64 bits\n */\n sfixed64String(value: string): this\n\n /**\n * Writes a float (32 bit)\n */\n float(value: number): this\n\n /**\n * Writes a double (64 bit float)\n */\n double(value: number): this\n\n /**\n * Writes a sequence of bytes\n */\n bytes(value: Uint8Array): this\n\n /**\n * Writes a string\n */\n string(value: string): this\n\n /**\n * Forks this writer's state by pushing it to a stack.\n * Calling {@link Writer#reset|reset} or {@link Writer#ldelim|ldelim} resets the writer to the previous state.\n */\n fork(): this\n\n /**\n * Resets this instance to the last state.\n */\n reset(): this\n\n /**\n * Resets to the last state and appends the fork state's current write length as a varint followed by its operations.\n */\n ldelim(): this\n\n /**\n * Finishes the write operation\n */\n finish(): Uint8Array\n}\n\nexport interface Reader {\n /**\n * Read buffer\n */\n buf: Uint8Array\n\n /**\n * Read buffer position\n */\n pos: number\n\n /**\n * Read buffer length\n */\n len: number\n\n /**\n * Reads a varint as an unsigned 32 bit value\n */\n uint32(): number\n\n /**\n * Reads a varint as a signed 32 bit value\n */\n int32(): number\n\n /**\n * Reads a zig-zag encoded varint as a signed 32 bit value\n */\n sint32(): number\n\n /**\n * Reads a varint as a boolean\n */\n bool(): boolean\n\n /**\n * Reads fixed 32 bits as an unsigned 32 bit integer\n */\n fixed32(): number\n\n /**\n * Reads fixed 32 bits as a signed 32 bit integer\n */\n sfixed32(): number\n\n /**\n * Reads a float (32 bit) as a number\n */\n float(): number\n\n /**\n * Reads a double (64 bit float) as a number\n */\n double(): number\n\n /**\n * Reads a sequence of bytes preceded by its length as a varint\n */\n bytes(): Uint8Array\n\n /**\n * Reads a string preceded by its byte length as a varint\n */\n string(): string\n\n /**\n * Skips the specified number of bytes if specified, otherwise skips a varints`\n */\n skip(length?: number): void\n\n /**\n * Skips the next element of the specified wire type\n */\n skipType(wireType: number): void\n\n /**\n * Reads a varint as a signed 64 bit value\n */\n int64(): bigint\n\n /**\n * Reads a varint as a signed 64 bit value\n */\n int64Number(): number\n\n /**\n * Reads a varint as a signed 64 bit value\n */\n int64String(): string\n\n /**\n * Reads a varint as an unsigned 64 bit value\n */\n uint64(): bigint\n\n /**\n * Reads a varint as an unsigned 64 bit value\n */\n uint64Number(): number\n\n /**\n * Reads a varint as an unsigned 64 bit value\n */\n uint64String(): string\n\n /**\n * Reads a zig-zag encoded varint as a signed 64 bit value\n */\n sint64(): bigint\n\n /**\n * Reads a zig-zag encoded varint as a signed 64 bit value\n */\n sint64Number(): number\n\n /**\n * Reads a zig-zag encoded varint as a signed 64 bit value\n */\n sint64String(): string\n\n /**\n * Reads fixed 64 bits\n */\n fixed64(): bigint\n\n /**\n * Reads fixed 64 bits\n */\n fixed64Number(): number\n\n /**\n * Reads fixed 64 bits\n */\n fixed64String(): string\n\n /**\n * Reads zig-zag encoded fixed 64 bits\n */\n sfixed64(): bigint\n\n /**\n * Reads zig-zag encoded fixed 64 bits\n */\n sfixed64Number(): number\n\n /**\n * Reads zig-zag encoded fixed 64 bits\n */\n sfixed64String(): string\n}\n\nexport class CodeError extends Error {\n public code: string\n\n constructor (message: string, code: string, options?: ErrorOptions) {\n super(message, options)\n\n this.code = code\n }\n}\n","/* eslint-disable import/export */\n/* eslint-disable complexity */\n/* eslint-disable @typescript-eslint/no-namespace */\n/* eslint-disable @typescript-eslint/no-unnecessary-boolean-literal-compare */\n/* eslint-disable @typescript-eslint/no-empty-interface */\n\nimport { enumeration, encodeMessage, decodeMessage, message } from 'protons-runtime'\nimport type { Codec } from 'protons-runtime'\nimport type { Uint8ArrayList } from 'uint8arraylist'\n\nexport interface Data {\n Type?: Data.DataType\n Data?: Uint8Array\n filesize?: bigint\n blocksizes: bigint[]\n hashType?: bigint\n fanout?: bigint\n mode?: number\n mtime?: UnixTime\n}\n\nexport namespace Data {\n export enum DataType {\n Raw = 'Raw',\n Directory = 'Directory',\n File = 'File',\n Metadata = 'Metadata',\n Symlink = 'Symlink',\n HAMTShard = 'HAMTShard'\n }\n\n enum __DataTypeValues {\n Raw = 0,\n Directory = 1,\n File = 2,\n Metadata = 3,\n Symlink = 4,\n HAMTShard = 5\n }\n\n export namespace DataType {\n export const codec = (): Codec<DataType> => {\n return enumeration<DataType>(__DataTypeValues)\n }\n }\n\n let _codec: Codec<Data>\n\n export const codec = (): Codec<Data> => {\n if (_codec == null) {\n _codec = message<Data>((obj, w, opts = {}) => {\n if (opts.lengthDelimited !== false) {\n w.fork()\n }\n\n if (obj.Type != null) {\n w.uint32(8)\n Data.DataType.codec().encode(obj.Type, w)\n }\n\n if (obj.Data != null) {\n w.uint32(18)\n w.bytes(obj.Data)\n }\n\n if (obj.filesize != null) {\n w.uint32(24)\n w.uint64(obj.filesize)\n }\n\n if (obj.blocksizes != null) {\n for (const value of obj.blocksizes) {\n w.uint32(32)\n w.uint64(value)\n }\n }\n\n if (obj.hashType != null) {\n w.uint32(40)\n w.uint64(obj.hashType)\n }\n\n if (obj.fanout != null) {\n w.uint32(48)\n w.uint64(obj.fanout)\n }\n\n if (obj.mode != null) {\n w.uint32(56)\n w.uint32(obj.mode)\n }\n\n if (obj.mtime != null) {\n w.uint32(66)\n UnixTime.codec().encode(obj.mtime, w)\n }\n\n if (opts.lengthDelimited !== false) {\n w.ldelim()\n }\n }, (reader, length) => {\n const obj: any = {\n blocksizes: []\n }\n\n const end = length == null ? reader.len : reader.pos + length\n\n while (reader.pos < end) {\n const tag = reader.uint32()\n\n switch (tag >>> 3) {\n case 1:\n obj.Type = Data.DataType.codec().decode(reader)\n break\n case 2:\n obj.Data = reader.bytes()\n break\n case 3:\n obj.filesize = reader.uint64()\n break\n case 4:\n obj.blocksizes.push(reader.uint64())\n break\n case 5:\n obj.hashType = reader.uint64()\n break\n case 6:\n obj.fanout = reader.uint64()\n break\n case 7:\n obj.mode = reader.uint32()\n break\n case 8:\n obj.mtime = UnixTime.codec().decode(reader, reader.uint32())\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n\n return obj\n })\n }\n\n return _codec\n }\n\n export const encode = (obj: Partial<Data>): Uint8Array => {\n return encodeMessage(obj, Data.codec())\n }\n\n export const decode = (buf: Uint8Array | Uint8ArrayList): Data => {\n return decodeMessage(buf, Data.codec())\n }\n}\n\nexport interface UnixTime {\n Seconds?: bigint\n FractionalNanoseconds?: number\n}\n\nexport namespace UnixTime {\n let _codec: Codec<UnixTime>\n\n export const codec = (): Codec<UnixTime> => {\n if (_codec == null) {\n _codec = message<UnixTime>((obj, w, opts = {}) => {\n if (opts.lengthDelimited !== false) {\n w.fork()\n }\n\n if (obj.Seconds != null) {\n w.uint32(8)\n w.int64(obj.Seconds)\n }\n\n if (obj.FractionalNanoseconds != null) {\n w.uint32(21)\n w.fixed32(obj.FractionalNanoseconds)\n }\n\n if (opts.lengthDelimited !== false) {\n w.ldelim()\n }\n }, (reader, length) => {\n const obj: any = {}\n\n const end = length == null ? reader.len : reader.pos + length\n\n while (reader.pos < end) {\n const tag = reader.uint32()\n\n switch (tag >>> 3) {\n case 1:\n obj.Seconds = reader.int64()\n break\n case 2:\n obj.FractionalNanoseconds = reader.fixed32()\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n\n return obj\n })\n }\n\n return _codec\n }\n\n export const encode = (obj: Partial<UnixTime>): Uint8Array => {\n return encodeMessage(obj, UnixTime.codec())\n }\n\n export const decode = (buf: Uint8Array | Uint8ArrayList): UnixTime => {\n return decodeMessage(buf, UnixTime.codec())\n }\n}\n\nexport interface Metadata {\n MimeType?: string\n}\n\nexport namespace Metadata {\n let _codec: Codec<Metadata>\n\n export const codec = (): Codec<Metadata> => {\n if (_codec == null) {\n _codec = message<Metadata>((obj, w, opts = {}) => {\n if (opts.lengthDelimited !== false) {\n w.fork()\n }\n\n if (obj.MimeType != null) {\n w.uint32(10)\n w.string(obj.MimeType)\n }\n\n if (opts.lengthDelimited !== false) {\n w.ldelim()\n }\n }, (reader, length) => {\n const obj: any = {}\n\n const end = length == null ? reader.len : reader.pos + length\n\n while (reader.pos < end) {\n const tag = reader.uint32()\n\n switch (tag >>> 3) {\n case 1:\n obj.MimeType = reader.string()\n break\n default:\n reader.skipType(tag & 7)\n break\n }\n }\n\n return obj\n })\n }\n\n return _codec\n }\n\n export const encode = (obj: Partial<Metadata>): Uint8Array => {\n return encodeMessage(obj, Metadata.codec())\n }\n\n export const decode = (buf: Uint8Array | Uint8ArrayList): Metadata => {\n return decodeMessage(buf, Metadata.codec())\n }\n}\n","import errcode from 'err-code'\nimport { Data as PBData } from './unixfs.js'\n\nexport interface Mtime {\n secs: bigint\n nsecs?: number\n}\n\nexport type MtimeLike = Mtime | { Seconds: number, FractionalNanoseconds?: number } | [number, number] | Date\n\nconst types: Record<string, string> = {\n Raw: 'raw',\n Directory: 'directory',\n File: 'file',\n Metadata: 'metadata',\n Symlink: 'symlink',\n HAMTShard: 'hamt-sharded-directory'\n}\n\nconst dirTypes = [\n 'directory',\n 'hamt-sharded-directory'\n]\n\nconst DEFAULT_FILE_MODE = parseInt('0644', 8)\nconst DEFAULT_DIRECTORY_MODE = parseInt('0755', 8)\n\nexport interface UnixFSOptions {\n type?: string\n data?: Uint8Array\n blockSizes?: bigint[]\n hashType?: bigint\n fanout?: bigint\n mtime?: Mtime\n mode?: number\n}\n\nclass UnixFS {\n /**\n * Decode from protobuf https://github.com/ipfs/specs/blob/master/UNIXFS.md\n */\n static unmarshal (marshaled: Uint8Array): UnixFS {\n const message = PBData.decode(marshaled)\n\n const data = new UnixFS({\n type: types[message.Type != null ? message.Type.toString() : 'File'],\n data: message.Data,\n blockSizes: message.blocksizes,\n mode: message.mode,\n mtime: message.mtime != null\n ? {\n secs: message.mtime.Seconds ?? 0n,\n nsecs: message.mtime.FractionalNanoseconds\n }\n : undefined,\n fanout: message.fanout\n })\n\n // make sure we honour the original mode\n data._originalMode = message.mode ?? 0\n\n return data\n }\n\n public type: string\n public data?: Uint8Array\n public blockSizes: bigint[]\n public hashType?: bigint\n public fanout?: bigint\n public mtime?: Mtime\n\n private _mode?: number\n private _originalMode: number\n\n constructor (options: UnixFSOptions = {\n type: 'file'\n }) {\n const {\n type,\n data,\n blockSizes,\n hashType,\n fanout,\n mtime,\n mode\n } = options\n\n if (type != null && !Object.values(types).includes(type)) {\n throw errcode(new Error('Type: ' + type + ' is not valid'), 'ERR_INVALID_TYPE')\n }\n\n this.type = type ?? 'file'\n this.data = data\n this.hashType = hashType\n this.fanout = fanout\n this.blockSizes = blockSizes ?? []\n this._originalMode = 0\n this.mode = mode\n this.mtime = mtime\n }\n\n set mode (mode: number | undefined) {\n if (mode == null) {\n this._mode = this.isDirectory() ? DEFAULT_DIRECTORY_MODE : DEFAULT_FILE_MODE\n } else {\n this._mode = (mode & 0xFFF)\n }\n }\n\n get mode (): number | undefined {\n return this._mode\n }\n\n isDirectory (): boolean {\n return dirTypes.includes(this.type)\n }\n\n addBlockSize (size: bigint): void {\n this.blockSizes.push(size)\n }\n\n removeBlockSize (index: number): void {\n this.blockSizes.splice(index, 1)\n }\n\n /**\n * Returns `0n` for directories or `data.length + sum(blockSizes)` for everything else\n */\n fileSize (): bigint {\n if (this.isDirectory()) {\n // dirs don't have file size\n return 0n\n }\n\n let sum = 0n\n this.blockSizes.forEach((size) => {\n sum += size\n })\n\n if (this.data != null) {\n sum += BigInt(this.data.length)\n }\n\n return sum\n }\n\n /**\n * encode to protobuf Uint8Array\n */\n marshal (): Uint8Array {\n let type\n\n switch (this.type) {\n case 'raw': type = PBData.DataType.Raw; break\n case 'directory': type = PBData.DataType.Directory; break\n case 'file': type = PBData.DataType.File; break\n case 'metadata': type = PBData.DataType.Metadata; break\n case 'symlink': type = PBData.DataType.Symlink; break\n case 'hamt-sharded-directory': type = PBData.DataType.HAMTShard; break\n default:\n throw errcode(new Error(`Type: ${type} is not valid`), 'ERR_INVALID_TYPE')\n }\n\n let data = this.data\n\n if (this.data == null || this.data.length === 0) {\n data = undefined\n }\n\n let mode\n\n if (this.mode != null) {\n mode = (this._originalMode & 0xFFFFF000) | (this.mode ?? 0)\n\n if (mode === DEFAULT_FILE_MODE && !this.isDirectory()) {\n mode = undefined\n }\n\n if (mode === DEFAULT_DIRECTORY_MODE && this.isDirectory()) {\n mode = undefined\n }\n }\n\n let mtime\n\n if (this.mtime != null) {\n mtime = {\n Seconds: this.mtime.secs,\n FractionalNanoseconds: this.mtime.nsecs\n }\n }\n\n return PBData.encode({\n Type: type,\n Data: data,\n filesize: this.isDirectory() ? undefined : this.fileSize(),\n blocksizes: this.blockSizes,\n hashType: this.hashType,\n fanout: this.fanout,\n mode,\n mtime\n })\n }\n}\n\nexport { UnixFS }\n","'use strict'\n\n// JS treats subjects of bitwise operators as SIGNED 32 bit numbers,\n// which means the maximum amount of bits we can store inside each byte\n// is 7..\nconst BITS_PER_BYTE = 7\n\nmodule.exports = class SparseArray {\n constructor () {\n this._bitArrays = []\n this._data = []\n this._length = 0\n this._changedLength = false\n this._changedData = false\n }\n\n set (index, value) {\n let pos = this._internalPositionFor(index, false)\n if (value === undefined) {\n // unsetting\n if (pos !== -1) {\n // remove item from bit array and array itself\n this._unsetInternalPos(pos)\n this._unsetBit(index)\n this._changedLength = true\n this._changedData = true\n }\n } else {\n let needsSort = false\n if (pos === -1) {\n pos = this._data.length\n this._setBit(index)\n this._changedData = true\n } else {\n needsSort = true\n }\n this._setInternalPos(pos, index, value, needsSort)\n this._changedLength = true\n }\n }\n\n unset (index) {\n this.set(index, undefined)\n }\n\n get (index) {\n this._sortData()\n const pos = this._internalPositionFor(index, true)\n if (pos === -1) {\n return undefined\n }\n return this._data[pos][1]\n }\n\n push (value) {\n this.set(this.length, value)\n return this.length\n }\n\n get length () {\n this._sortData()\n if (this._changedLength) {\n const last = this._data[this._data.length - 1]\n this._length = last ? last[0] + 1 : 0\n this._changedLength = false\n }\n return this._length\n }\n\n forEach (iterator) {\n let i = 0\n while(i < this.length) {\n iterator(this.get(i), i, this)\n i++\n }\n }\n\n map (iterator) {\n let i = 0\n let mapped = new Array(this.length)\n while(i < this.length) {\n mapped[i] = iterator(this.get(i), i, this)\n i++\n }\n return mapped\n }\n\n reduce (reducer, initialValue) {\n let i = 0\n let acc = initialValue\n while(i < this.length) {\n const value = this.get(i)\n acc = reducer(acc, value, i)\n i++\n }\n return acc\n }\n\n find (finder) {\n let i = 0, found, last\n while ((i < this.length) && !found) {\n last = this.get(i)\n found = finder(last)\n i++\n }\n return found ? last : undefined\n }\n\n _internalPositionFor (index, noCreate) {\n const bytePos = this._bytePosFor(index, noCreate)\n if (bytePos >= this._bitArrays.length) {\n return -1\n }\n const byte = this._bitArrays[bytePos]\n const bitPos = index - bytePos * BITS_PER_BYTE\n const exists = (byte & (1 << bitPos)) > 0\n if (!exists) {\n return -1\n }\n const previousPopCount = this._bitArrays.slice(0, bytePos).reduce(popCountReduce, 0)\n\n const mask = ~(0xffffffff << (bitPos + 1))\n const bytePopCount = popCount(byte & mask)\n const arrayPos = previousPopCount + bytePopCount - 1\n return arrayPos\n }\n\n _bytePosFor (index, noCreate) {\n const bytePos = Math.floor(index / BITS_PER_BYTE)\n const targetLength = bytePos + 1\n while (!noCreate && this._bitArrays.length < targetLength) {\n this._bitArrays.push(0)\n }\n return bytePos\n }\n\n _setBit (index) {\n const bytePos = this._bytePosFor(index, false)\n this._bitArrays[bytePos] |= (1 << (index - (bytePos * BITS_PER_BYTE)))\n }\n\n _unsetBit(index) {\n const bytePos = this._bytePosFor(index, false)\n this._bitArrays[bytePos] &= ~(1 << (index - (bytePos * BITS_PER_BYTE)))\n }\n\n _setInternalPos(pos, index, value, needsSort) {\n const data =this._data\n const elem = [index, value]\n if (needsSort) {\n this._sortData()\n data[pos] = elem\n } else {\n // new element. just shove it into the array\n // but be nice about where we shove it\n // in order to make sorting it later easier\n if (data.length) {\n if (data[data.length - 1][0] >= index) {\n data.push(elem)\n } else if (data[0][0] <= index) {\n data.unshift(elem)\n } else {\n const randomIndex = Math.round(data.length / 2)\n this._data = data.slice(0, randomIndex).concat(elem).concat(data.slice(randomIndex))\n }\n } else {\n this._data.push(elem)\n }\n this._changedData = true\n this._changedLength = true\n }\n }\n\n _unsetInternalPos (pos) {\n this._data.splice(pos, 1)\n }\n\n _sortData () {\n if (this._changedData) {\n this._data.sort(sortInternal)\n }\n\n this._changedData = false\n }\n\n bitField () {\n const bytes = []\n let pendingBitsForResultingByte = 8\n let pendingBitsForNewByte = 0\n let resultingByte = 0\n let newByte\n const pending = this._bitArrays.slice()\n while (pending.length || pendingBitsForNewByte) {\n if (pendingBitsForNewByte === 0) {\n newByte = pending.shift()\n pendingBitsForNewByte = 7\n }\n\n const usingBits = Math.min(pendingBitsForNewByte, pendingBitsForResultingByte)\n const mask = ~(0b11111111 << usingBits)\n const masked = newByte & mask\n resultingByte |= masked << (8 - pendingBitsForResultingByte)\n newByte = newByte >>> usingBits\n pendingBitsForNewByte -= usingBits\n pendingBitsForResultingByte -= usingBits\n\n if (!pendingBitsForResultingByte || (!pendingBitsForNewByte && !pending.length)) {\n bytes.push(resultingByte)\n resultingByte = 0\n pendingBitsForResultingByte = 8\n }\n }\n\n // remove trailing zeroes\n for(var i = bytes.length - 1; i > 0; i--) {\n const value = bytes[i]\n if (value === 0) {\n bytes.pop()\n } else {\n break\n }\n }\n\n return bytes\n }\n\n compactArray () {\n this._sortData()\n return this._data.map(valueOnly)\n }\n}\n\nfunction popCountReduce (count, byte) {\n return count + popCount(byte)\n}\n\nfunction popCount(_v) {\n let v = _v\n v = v - ((v >> 1) & 0x55555555) // reuse input as temporary\n v = (v & 0x33333333) + ((v >> 2) & 0x33333333) // temp\n return ((v + (v >> 4) & 0xF0F0F0F) * 0x1010101) >> 24\n}\n\nfunction sortInternal (a, b) {\n return a[0] - b[0]\n}\n\nfunction valueOnly (elem) {\n return elem[1]\n}","/**\n * To guarantee Uint8Array semantics, convert nodejs Buffers\n * into vanilla Uint8Arrays\n */\nexport function asUint8Array (buf: Uint8Array): Uint8Array {\n if (globalThis.Buffer != null) {\n return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength)\n }\n\n return buf\n}\n","// base-x encoding / decoding\n// Copyright (c) 2018 base-x contributors\n// Copyright (c) 2014-2018 The Bitcoin Core developers (base58.cpp)\n// Distributed under the MIT software license, see the accompanying\n// file LICENSE or http://www.opensource.org/licenses/mit-license.php.\nfunction base (ALPHABET, name) {\n if (ALPHABET.length >= 255) { throw new TypeError('Alphabet too long') }\n var BASE_MAP = new Uint8Array(256);\n for (var j = 0; j < BASE_MAP.length; j++) {\n BASE_MAP[j] = 255;\n }\n for (var i = 0; i < ALPHABET.length; i++) {\n var x = ALPHABET.charAt(i);\n var xc = x.charCodeAt(0);\n if (BASE_MAP[xc] !== 255) { throw new TypeError(x + ' is ambiguous') }\n BASE_MAP[xc] = i;\n }\n var BASE = ALPHABET.length;\n var LEADER = ALPHABET.charAt(0);\n var FACTOR = Math.log(BASE) / Math.log(256); // log(BASE) / log(256), rounded up\n var iFACTOR = Math.log(256) / Math.log(BASE); // log(256) / log(BASE), rounded up\n function encode (source) {\n if (source instanceof Uint8Array) ; else if (ArrayBuffer.isView(source)) {\n source = new Uint8Array(source.buffer, source.byteOffset, source.byteLength);\n } else if (Array.isArray(source)) {\n source = Uint8Array.from(source);\n }\n if (!(source instanceof Uint8Array)) { throw new TypeError('Expected Uint8Array') }\n if (source.length === 0) { return '' }\n // Skip & count leading zeroes.\n var zeroes = 0;\n var length = 0;\n var pbegin = 0;\n var pend = source.length;\n while (pbegin !== pend && source[pbegin] === 0) {\n pbegin++;\n zeroes++;\n }\n // Allocate enough space in big-endian base58 representation.\n var size = ((pend - pbegin) * iFACTOR + 1) >>> 0;\n var b58 = new Uint8Array(size);\n // Process the bytes.\n while (pbegin !== pend) {\n var carry = source[pbegin];\n // Apply \"b58 = b58 * 256 + ch\".\n var i = 0;\n for (var it1 = size - 1; (carry !== 0 || i < length) && (it1 !== -1); it1--, i++) {\n carry += (256 * b58[it1]) >>> 0;\n b58[it1] = (carry % BASE) >>> 0;\n carry = (carry / BASE) >>> 0;\n }\n if (carry !== 0) { throw new Error('Non-zero carry') }\n length = i;\n pbegin++;\n }\n // Skip leading zeroes in base58 result.\n var it2 = size - length;\n while (it2 !== size && b58[it2] === 0) {\n it2++;\n }\n // Translate the result into a string.\n var str = LEADER.repeat(zeroes);\n for (; it2 < size; ++it2) { str += ALPHABET.charAt(b58[it2]); }\n return str\n }\n function decodeUnsafe (source) {\n if (typeof source !== 'string') { throw new TypeError('Expected String') }\n if (source.length === 0) { return new Uint8Array() }\n var psz = 0;\n // Skip leading spaces.\n if (source[psz] === ' ') { return }\n // Skip and count leading '1's.\n var zeroes = 0;\n var length = 0;\n while (source[psz] === LEADER) {\n zeroes++;\n psz++;\n }\n // Allocate enough space in big-endian base256 representation.\n var size = (((source.length - psz) * FACTOR) + 1) >>> 0; // log(58) / log(256), rounded up.\n var b256 = new Uint8Array(size);\n // Process the characters.\n while (source[psz]) {\n // Decode character\n var carry = BASE_MAP[source.charCodeAt(psz)];\n // Invalid character\n if (carry === 255) { return }\n var i = 0;\n for (var it3 = size - 1; (carry !== 0 || i < length) && (it3 !== -1); it3--, i++) {\n carry += (BASE * b256[it3]) >>> 0;\n b256[it3] = (carry % 256) >>> 0;\n carry = (carry / 256) >>> 0;\n }\n if (carry !== 0) { throw new Error('Non-zero carry') }\n length = i;\n psz++;\n }\n // Skip trailing spaces.\n if (source[psz] === ' ') { return }\n // Skip leading zeroes in b256.\n var it4 = size - length;\n while (it4 !== size && b256[it4] === 0) {\n it4++;\n }\n var vch = new Uint8Array(zeroes + (size - it4));\n var j = zeroes;\n while (it4 !== size) {\n vch[j++] = b256[it4++];\n }\n return vch\n }\n function decode (string) {\n var buffer = decodeUnsafe(string);\n if (buffer) { return buffer }\n throw new Error(`Non-${name} character`)\n }\n return {\n encode: encode,\n decodeUnsafe: decodeUnsafe,\n decode: decode\n }\n}\nvar src = base;\n\nvar _brrp__multiformats_scope_baseX = src;\n\nexport default _brrp__multiformats_scope_baseX;\n","const empty = new Uint8Array(0)\n\n/**\n * @param {Uint8Array} d\n */\nconst toHex = d => d.reduce((hex, byte) => hex + byte.toString(16).padStart(2, '0'), '')\n\n/**\n * @param {string} hex\n */\nconst fromHex = hex => {\n const hexes = hex.match(/../g)\n return hexes ? new Uint8Array(hexes.map(b => parseInt(b, 16))) : empty\n}\n\n/**\n * @param {Uint8Array} aa\n * @param {Uint8Array} bb\n */\nconst equals = (aa, bb) => {\n if (aa === bb) return true\n if (aa.byteLength !== bb.byteLength) {\n return false\n }\n\n for (let ii = 0; ii < aa.byteLength; ii++) {\n if (aa[ii] !== bb[ii]) {\n return false\n }\n }\n\n return true\n}\n\n/**\n * @param {ArrayBufferView|ArrayBuffer|Uint8Array} o\n * @returns {Uint8Array}\n */\nconst coerce = o => {\n if (o instanceof Uint8Array && o.constructor.name === 'Uint8Array') return o\n if (o instanceof ArrayBuffer) return new Uint8Array(o)\n if (ArrayBuffer.isView(o)) {\n return new Uint8Array(o.buffer, o.byteOffset, o.byteLength)\n }\n throw new Error('Unknown type, must be binary type')\n}\n\n/**\n * @param {any} o\n * @returns {o is ArrayBuffer|ArrayBufferView}\n */\nconst isBinary = o =>\n o instanceof ArrayBuffer || ArrayBuffer.isView(o)\n\n/**\n * @param {string} str\n * @returns {Uint8Array}\n */\nconst fromString = str => (new TextEncoder()).encode(str)\n\n/**\n * @param {Uint8Array} b\n * @returns {string}\n */\nconst toString = b => (new TextDecoder()).decode(b)\n\nexport { equals, coerce, isBinary, fromHex, toHex, fromString, toString, empty }\n","import basex from '../../vendor/base-x.js'\nimport { coerce } from '../bytes.js'\n// Linter can't see that API is used in types.\n// eslint-disable-next-line\nimport * as API from './interface.js'\n\n/**\n * Class represents both BaseEncoder and MultibaseEncoder meaning it\n * can be used to encode to multibase or base encode without multibase\n * prefix.\n *\n * @class\n * @template {string} Base\n * @template {string} Prefix\n * @implements {API.MultibaseEncoder<Prefix>}\n * @implements {API.BaseEncoder}\n */\nclass Encoder {\n /**\n * @param {Base} name\n * @param {Prefix} prefix\n * @param {(bytes:Uint8Array) => string} baseEncode\n */\n constructor (name, prefix, baseEncode) {\n this.name = name\n this.prefix = prefix\n this.baseEncode = baseEncode\n }\n\n /**\n * @param {Uint8Array} bytes\n * @returns {API.Multibase<Prefix>}\n */\n encode (bytes) {\n if (bytes instanceof Uint8Array) {\n return `${this.prefix}${this.baseEncode(bytes)}`\n } else {\n throw Error('Unknown type, must be binary type')\n }\n }\n}\n\n/**\n * @template {string} Prefix\n */\n/**\n * Class represents both BaseDecoder and MultibaseDecoder so it could be used\n * to decode multibases (with matching prefix) or just base decode strings\n * with corresponding base encoding.\n *\n * @class\n * @template {string} Base\n * @template {string} Prefix\n * @implements {API.MultibaseDecoder<Prefix>}\n * @implements {API.UnibaseDecoder<Prefix>}\n * @implements {API.BaseDecoder}\n */\nclass Decoder {\n /**\n * @param {Base} name\n * @param {Prefix} prefix\n * @param {(text:string) => Uint8Array} baseDecode\n */\n constructor (name, prefix, baseDecode) {\n this.name = name\n this.prefix = prefix\n /* c8 ignore next 3 */\n if (prefix.codePointAt(0) === undefined) {\n throw new Error('Invalid prefix character')\n }\n /** @private */\n this.prefixCodePoint = /** @type {number} */ (prefix.codePointAt(0))\n this.baseDecode = baseDecode\n }\n\n /**\n * @param {string} text\n */\n decode (text) {\n if (typeof text === 'string') {\n if (text.codePointAt(0) !== this.prefixCodePoint) {\n throw Error(`Unable to decode multibase string ${JSON.stringify(text)}, ${this.name} decoder only supports inputs prefixed with ${this.prefix}`)\n }\n return this.baseDecode(text.slice(this.prefix.length))\n } else {\n throw Error('Can only multibase decode strings')\n }\n }\n\n /**\n * @template {string} OtherPrefix\n * @param {API.UnibaseDecoder<OtherPrefix>|ComposedDecoder<OtherPrefix>} decoder\n * @returns {ComposedDecoder<Prefix|OtherPrefix>}\n */\n or (decoder) {\n return or(this, decoder)\n }\n}\n\n/**\n * @template {string} Prefix\n * @typedef {Record<Prefix, API.UnibaseDecoder<Prefix>>} Decoders\n */\n\n/**\n * @template {string} Prefix\n * @implements {API.MultibaseDecoder<Prefix>}\n * @implements {API.CombobaseDecoder<Prefix>}\n */\nclass ComposedDecoder {\n /**\n * @param {Decoders<Prefix>} decoders\n */\n constructor (decoders) {\n this.decoders = decoders\n }\n\n /**\n * @template {string} OtherPrefix\n * @param {API.UnibaseDecoder<OtherPrefix>|ComposedDecoder<OtherPrefix>} decoder\n * @returns {ComposedDecoder<Prefix|OtherPrefix>}\n */\n or (decoder) {\n return or(this, decoder)\n }\n\n /**\n * @param {string} input\n * @returns {Uint8Array}\n */\n decode (input) {\n const prefix = /** @type {Prefix} */ (input[0])\n const decoder = this.decoders[prefix]\n if (decoder) {\n return decoder.decode(input)\n } else {\n throw RangeError(`Unable to decode multibase string ${JSON.stringify(input)}, only inputs prefixed with ${Object.keys(this.decoders)} are supported`)\n }\n }\n}\n\n/**\n * @template {string} L\n * @template {string} R\n * @param {API.UnibaseDecoder<L>|API.CombobaseDecoder<L>} left\n * @param {API.UnibaseDecoder<R>|API.CombobaseDecoder<R>} right\n * @returns {ComposedDecoder<L|R>}\n */\nexport const or = (left, right) => new ComposedDecoder(/** @type {Decoders<L|R>} */({\n ...(left.decoders || { [/** @type API.UnibaseDecoder<L> */(left).prefix]: left }),\n ...(right.decoders || { [/** @type API.UnibaseDecoder<R> */(right).prefix]: right })\n}))\n\n/**\n * @class\n * @template {string} Base\n * @template {string} Prefix\n * @implements {API.MultibaseCodec<Prefix>}\n * @implements {API.MultibaseEncoder<Prefix>}\n * @implements {API.MultibaseDecoder<Prefix>}\n * @implements {API.BaseCodec}\n * @implements {API.BaseEncoder}\n * @implements {API.BaseDecoder}\n */\nexport class Codec {\n /**\n * @param {Base} name\n * @param {Prefix} prefix\n * @param {(bytes:Uint8Array) => string} baseEncode\n * @param {(text:string) => Uint8Array} baseDecode\n */\n constructor (name, prefix, baseEncode, baseDecode) {\n this.name = name\n this.prefix = prefix\n this.baseEncode = baseEncode\n this.baseDecode = baseDecode\n this.encoder = new Encoder(name, prefix, baseEncode)\n this.decoder = new Decoder(name, prefix, baseDecode)\n }\n\n /**\n * @param {Uint8Array} input\n */\n encode (input) {\n return this.encoder.encode(input)\n }\n\n /**\n * @param {string} input\n */\n decode (input) {\n return this.decoder.decode(input)\n }\n}\n\n/**\n * @template {string} Base\n * @template {string} Prefix\n * @param {object} options\n * @param {Base} options.name\n * @param {Prefix} options.prefix\n * @param {(bytes:Uint8Array) => string} options.encode\n * @param {(input:string) => Uint8Array} options.decode\n * @returns {Codec<Base, Prefix>}\n */\nexport const from = ({ name, prefix, encode, decode }) =>\n new Codec(name, prefix, encode, decode)\n\n/**\n * @template {string} Base\n * @template {string} Prefix\n * @param {object} options\n * @param {Base} options.name\n * @param {Prefix} options.prefix\n * @param {string} options.alphabet\n * @returns {Codec<Base, Prefix>}\n */\nexport const baseX = ({ prefix, name, alphabet }) => {\n const { encode, decode } = basex(alphabet, name)\n return from({\n prefix,\n name,\n encode,\n /**\n * @param {string} text\n */\n decode: text => coerce(decode(text))\n })\n}\n\n/**\n * @param {string} string\n * @param {string} alphabet\n * @param {number} bitsPerChar\n * @param {string} name\n * @returns {Uint8Array}\n */\nconst decode = (string, alphabet, bitsPerChar, name) => {\n // Build the character lookup table:\n /** @type {Record<string, number>} */\n const codes = {}\n for (let i = 0; i < alphabet.length; ++i) {\n codes[alphabet[i]] = i\n }\n\n // Count the padding bytes:\n let end = string.length\n while (string[end - 1] === '=') {\n --end\n }\n\n // Allocate the output:\n const out = new Uint8Array((end * bitsPerChar / 8) | 0)\n\n // Parse the data:\n let bits = 0 // Number of bits currently in the buffer\n let buffer = 0 // Bits waiting to be written out, MSB first\n let written = 0 // Next byte to write\n for (let i = 0; i < end; ++i) {\n // Read one character from the string:\n const value = codes[string[i]]\n if (value === undefined) {\n throw new SyntaxError(`Non-${name} character`)\n }\n\n // Append the bits to the buffer:\n buffer = (buffer << bitsPerChar) | value\n bits += bitsPerChar\n\n // Write out some bits if the buffer has a byte's worth:\n if (bits >= 8) {\n bits -= 8\n out[written++] = 0xff & (buffer >> bits)\n }\n }\n\n // Verify that we have received just enough bits:\n if (bits >= bitsPerChar || 0xff & (buffer << (8 - bits))) {\n throw new SyntaxError('Unexpected end of data')\n }\n\n return out\n}\n\n/**\n * @param {Uint8Array} data\n * @param {string} alphabet\n * @param {number} bitsPerChar\n * @returns {string}\n */\nconst encode = (data, alphabet, bitsPerChar) => {\n const pad = alphabet[alphabet.length - 1] === '='\n const mask = (1 << bitsPerChar) - 1\n let out = ''\n\n let bits = 0 // Number of bits currently in the buffer\n let buffer = 0 // Bits waiting to be written out, MSB first\n for (let i = 0; i < data.length; ++i) {\n // Slurp data into the buffer:\n buffer = (buffer << 8) | data[i]\n bits += 8\n\n // Write out as much as we can:\n while (bits > bitsPerChar) {\n bits -= bitsPerChar\n out += alphabet[mask & (buffer >> bits)]\n }\n }\n\n // Partial character:\n if (bits) {\n out += alphabet[mask & (buffer << (bitsPerChar - bits))]\n }\n\n // Add padding characters until we hit a byte boundary:\n if (pad) {\n while ((out.length * bitsPerChar) & 7) {\n out += '='\n }\n }\n\n return out\n}\n\n/**\n * RFC4648 Factory\n *\n * @template {string} Base\n * @template {string} Prefix\n * @param {object} options\n * @param {Base} options.name\n * @param {Prefix} options.prefix\n * @param {string} options.alphabet\n * @param {number} options.bitsPerChar\n */\nexport const rfc4648 = ({ name, prefix, bitsPerChar, alphabet }) => {\n return from({\n prefix,\n name,\n encode (input) {\n return encode(input, alphabet, bitsPerChar)\n },\n decode (input) {\n return decode(input, alphabet, bitsPerChar, name)\n }\n })\n}\n","import { baseX } from './base.js'\n\nexport const base10 = baseX({\n prefix: '9',\n name: 'base10',\n alphabet: '0123456789'\n})\n","// @ts-check\n\nimport { rfc4648 } from './base.js'\n\nexport const base16 = rfc4648({\n prefix: 'f',\n name: 'base16',\n alphabet: '0123456789abcdef',\n bitsPerChar: 4\n})\n\nexport const base16upper = rfc4648({\n prefix: 'F',\n name: 'base16upper',\n alphabet: '0123456789ABCDEF',\n bitsPerChar: 4\n})\n","// @ts-check\n\nimport { rfc4648 } from './base.js'\n\nexport const base2 = rfc4648({\n prefix: '0',\n name: 'base2',\n alphabet: '01',\n bitsPerChar: 1\n})\n","import { from } from './base.js'\n\nconst alphabet = Array.from('🚀🪐☄🛰🌌🌑🌒🌓🌔🌕🌖🌗🌘🌍🌏🌎🐉☀💻🖥💾💿😂❤😍🤣😊🙏💕😭😘👍😅👏😁🔥🥰💔💖💙😢🤔😆🙄💪😉☺👌🤗💜😔😎😇🌹🤦🎉💞✌✨🤷😱😌🌸🙌😋💗💚😏💛🙂💓🤩😄😀🖤😃💯🙈👇🎶😒🤭❣😜💋👀😪😑💥🙋😞😩😡🤪👊🥳😥🤤👉💃😳✋😚😝😴🌟😬🙃🍀🌷😻😓⭐✅🥺🌈😈🤘💦✔😣🏃💐☹🎊💘😠☝😕🌺🎂🌻😐🖕💝🙊😹🗣💫💀👑🎵🤞😛🔴😤🌼😫⚽🤙☕🏆🤫👈😮🙆🍻🍃🐶💁😲🌿🧡🎁⚡🌞🎈❌✊👋😰🤨😶🤝🚶💰🍓💢🤟🙁🚨💨🤬✈🎀🍺🤓😙💟🌱😖👶🥴▶➡❓💎💸⬇😨🌚🦋😷🕺⚠🙅😟😵👎🤲🤠🤧📌🔵💅🧐🐾🍒😗🤑🌊🤯🐷☎💧😯💆👆🎤🙇🍑❄🌴💣🐸💌📍🥀🤢👅💡💩👐📸👻🤐🤮🎼🥵🚩🍎🍊👼💍📣🥂')\nconst alphabetBytesToChars = /** @type {string[]} */ (alphabet.reduce((p, c, i) => { p[i] = c; return p }, /** @type {string[]} */([])))\nconst alphabetCharsToBytes = /** @type {number[]} */ (alphabet.reduce((p, c, i) => { p[/** @type {number} */ (c.codePointAt(0))] = i; return p }, /** @type {number[]} */([])))\n\n/**\n * @param {Uint8Array} data\n * @returns {string}\n */\nfunction encode (data) {\n return data.reduce((p, c) => {\n p += alphabetBytesToChars[c]\n return p\n }, '')\n}\n\n/**\n * @param {string} str\n * @returns {Uint8Array}\n */\nfunction decode (str) {\n const byts = []\n for (const char of str) {\n const byt = alphabetCharsToBytes[/** @type {number} */ (char.codePointAt(0))]\n if (byt === undefined) {\n throw new Error(`Non-base256emoji character: ${char}`)\n }\n byts.push(byt)\n }\n return new Uint8Array(byts)\n}\n\nexport const base256emoji = from({\n prefix: '🚀',\n name: 'base256emoji',\n encode,\n decode\n})\n","import { rfc4648 } from './base.js'\n\nexport const base32 = rfc4648({\n prefix: 'b',\n name: 'base32',\n alphabet: 'abcdefghijklmnopqrstuvwxyz234567',\n bitsPerChar: 5\n})\n\nexport const base32upper = rfc4648({\n prefix: 'B',\n name: 'base32upper',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567',\n bitsPerChar: 5\n})\n\nexport const base32pad = rfc4648({\n prefix: 'c',\n name: 'base32pad',\n alphabet: 'abcdefghijklmnopqrstuvwxyz234567=',\n bitsPerChar: 5\n})\n\nexport const base32padupper = rfc4648({\n prefix: 'C',\n name: 'base32padupper',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=',\n bitsPerChar: 5\n})\n\nexport const base32hex = rfc4648({\n prefix: 'v',\n name: 'base32hex',\n alphabet: '0123456789abcdefghijklmnopqrstuv',\n bitsPerChar: 5\n})\n\nexport const base32hexupper = rfc4648({\n prefix: 'V',\n name: 'base32hexupper',\n alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUV',\n bitsPerChar: 5\n})\n\nexport const base32hexpad = rfc4648({\n prefix: 't',\n name: 'base32hexpad',\n alphabet: '0123456789abcdefghijklmnopqrstuv=',\n bitsPerChar: 5\n})\n\nexport const base32hexpadupper = rfc4648({\n prefix: 'T',\n name: 'base32hexpadupper',\n alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUV=',\n bitsPerChar: 5\n})\n\nexport const base32z = rfc4648({\n prefix: 'h',\n name: 'base32z',\n alphabet: 'ybndrfg8ejkmcpqxot1uwisza345h769',\n bitsPerChar: 5\n})\n","import { baseX } from './base.js'\n\nexport const base36 = baseX({\n prefix: 'k',\n name: 'base36',\n alphabet: '0123456789abcdefghijklmnopqrstuvwxyz'\n})\n\nexport const base36upper = baseX({\n prefix: 'K',\n name: 'base36upper',\n alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'\n})\n","import { baseX } from './base.js'\n\nexport const base58btc = baseX({\n name: 'base58btc',\n prefix: 'z',\n alphabet: '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'\n})\n\nexport const base58flickr = baseX({\n name: 'base58flickr',\n prefix: 'Z',\n alphabet: '123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ'\n})\n","// @ts-check\n\nimport { rfc4648 } from './base.js'\n\nexport const base64 = rfc4648({\n prefix: 'm',\n name: 'base64',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',\n bitsPerChar: 6\n})\n\nexport const base64pad = rfc4648({\n prefix: 'M',\n name: 'base64pad',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=',\n bitsPerChar: 6\n})\n\nexport const base64url = rfc4648({\n prefix: 'u',\n name: 'base64url',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_',\n bitsPerChar: 6\n})\n\nexport const base64urlpad = rfc4648({\n prefix: 'U',\n name: 'base64urlpad',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=',\n bitsPerChar: 6\n})\n","// @ts-check\n\nimport { rfc4648 } from './base.js'\n\nexport const base8 = rfc4648({\n prefix: '7',\n name: 'base8',\n alphabet: '01234567',\n bitsPerChar: 3\n})\n","// @ts-check\n\nimport { fromString, toString } from '../bytes.js'\nimport { from } from './base.js'\n\nexport const identity = from({\n prefix: '\\x00',\n name: 'identity',\n encode: (buf) => toString(buf),\n decode: (str) => fromString(str)\n})\n","// @ts-check\n\n/**\n * @template T\n * @typedef {import('./interface.js').ByteView<T>} ByteView\n */\n\nconst textEncoder = new TextEncoder()\nconst textDecoder = new TextDecoder()\n\nexport const name = 'json'\nexport const code = 0x0200\n\n/**\n * @template T\n * @param {T} node\n * @returns {ByteView<T>}\n */\nexport const encode = (node) => textEncoder.encode(JSON.stringify(node))\n\n/**\n * @template T\n * @param {ByteView<T>} data\n * @returns {T}\n */\nexport const decode = (data) => JSON.parse(textDecoder.decode(data))\n","// @ts-check\n\nimport { coerce } from '../bytes.js'\n\n/**\n * @template T\n * @typedef {import('./interface.js').ByteView<T>} ByteView\n */\n\nexport const name = 'raw'\nexport const code = 0x55\n\n/**\n * @param {Uint8Array} node\n * @returns {ByteView<Uint8Array>}\n */\nexport const encode = (node) => coerce(node)\n\n/**\n * @param {ByteView<Uint8Array>} data\n * @returns {Uint8Array}\n */\nexport const decode = (data) => coerce(data)\n","var encode_1 = encode;\n\nvar MSB = 0x80\n , REST = 0x7F\n , MSBALL = ~REST\n , INT = Math.pow(2, 31);\n\nfunction encode(num, out, offset) {\n out = out || [];\n offset = offset || 0;\n var oldOffset = offset;\n\n while(num >= INT) {\n out[offset++] = (num & 0xFF) | MSB;\n num /= 128;\n }\n while(num & MSBALL) {\n out[offset++] = (num & 0xFF) | MSB;\n num >>>= 7;\n }\n out[offset] = num | 0;\n \n encode.bytes = offset - oldOffset + 1;\n \n return out\n}\n\nvar decode = read;\n\nvar MSB$1 = 0x80\n , REST$1 = 0x7F;\n\nfunction read(buf, offset) {\n var res = 0\n , offset = offset || 0\n , shift = 0\n , counter = offset\n , b\n , l = buf.length;\n\n do {\n if (counter >= l) {\n read.bytes = 0;\n throw new RangeError('Could not decode varint')\n }\n b = buf[counter++];\n res += shift < 28\n ? (b & REST$1) << shift\n : (b & REST$1) * Math.pow(2, shift);\n shift += 7;\n } while (b >= MSB$1)\n\n read.bytes = counter - offset;\n\n return res\n}\n\nvar N1 = Math.pow(2, 7);\nvar N2 = Math.pow(2, 14);\nvar N3 = Math.pow(2, 21);\nvar N4 = Math.pow(2, 28);\nvar N5 = Math.pow(2, 35);\nvar N6 = Math.pow(2, 42);\nvar N7 = Math.pow(2, 49);\nvar N8 = Math.pow(2, 56);\nvar N9 = Math.pow(2, 63);\n\nvar length = function (value) {\n return (\n value < N1 ? 1\n : value < N2 ? 2\n : value < N3 ? 3\n : value < N4 ? 4\n : value < N5 ? 5\n : value < N6 ? 6\n : value < N7 ? 7\n : value < N8 ? 8\n : value < N9 ? 9\n : 10\n )\n};\n\nvar varint = {\n encode: encode_1\n , decode: decode\n , encodingLength: length\n};\n\nvar _brrp_varint = varint;\n\nexport default _brrp_varint;\n","import varint from '../vendor/varint.js'\n\n/**\n * @param {Uint8Array} data\n * @param {number} [offset=0]\n * @returns {[number, number]}\n */\nexport const decode = (data, offset = 0) => {\n const code = varint.decode(data, offset)\n return [code, varint.decode.bytes]\n}\n\n/**\n * @param {number} int\n * @param {Uint8Array} target\n * @param {number} [offset=0]\n */\nexport const encodeTo = (int, target, offset = 0) => {\n varint.encode(int, target, offset)\n return target\n}\n\n/**\n * @param {number} int\n * @returns {number}\n */\nexport const encodingLength = (int) => {\n return varint.encodingLength(int)\n}\n","import { coerce, equals as equalBytes } from '../bytes.js'\nimport * as varint from '../varint.js'\n\n/**\n * Creates a multihash digest.\n *\n * @template {number} Code\n * @param {Code} code\n * @param {Uint8Array} digest\n */\nexport const create = (code, digest) => {\n const size = digest.byteLength\n const sizeOffset = varint.encodingLength(code)\n const digestOffset = sizeOffset + varint.encodingLength(size)\n\n const bytes = new Uint8Array(digestOffset + size)\n varint.encodeTo(code, bytes, 0)\n varint.encodeTo(size, bytes, sizeOffset)\n bytes.set(digest, digestOffset)\n\n return new Digest(code, size, digest, bytes)\n}\n\n/**\n * Turns bytes representation of multihash digest into an instance.\n *\n * @param {Uint8Array} multihash\n * @returns {MultihashDigest}\n */\nexport const decode = (multihash) => {\n const bytes = coerce(multihash)\n const [code, sizeOffset] = varint.decode(bytes)\n const [size, digestOffset] = varint.decode(bytes.subarray(sizeOffset))\n const digest = bytes.subarray(sizeOffset + digestOffset)\n\n if (digest.byteLength !== size) {\n throw new Error('Incorrect length')\n }\n\n return new Digest(code, size, digest, bytes)\n}\n\n/**\n * @param {MultihashDigest} a\n * @param {unknown} b\n * @returns {b is MultihashDigest}\n */\nexport const equals = (a, b) => {\n if (a === b) {\n return true\n } else {\n const data = /** @type {{code?:unknown, size?:unknown, bytes?:unknown}} */(b)\n\n return (\n a.code === data.code &&\n a.size === data.size &&\n data.bytes instanceof Uint8Array &&\n equalBytes(a.bytes, data.bytes)\n )\n }\n}\n\n/**\n * @typedef {import('./interface.js').MultihashDigest} MultihashDigest\n */\n\n/**\n * Represents a multihash digest which carries information about the\n * hashing algorithm and an actual hash digest.\n *\n * @template {number} Code\n * @template {number} Size\n * @class\n * @implements {MultihashDigest}\n */\nexport class Digest {\n /**\n * Creates a multihash digest.\n *\n * @param {Code} code\n * @param {Size} size\n * @param {Uint8Array} digest\n * @param {Uint8Array} bytes\n */\n constructor (code, size, digest, bytes) {\n this.code = code\n this.size = size\n this.digest = digest\n this.bytes = bytes\n }\n}\n","import { coerce } from '../bytes.js'\nimport * as Digest from './digest.js'\n\nconst code = 0x0\nconst name = 'identity'\n\n/** @type {(input:Uint8Array) => Uint8Array} */\nconst encode = coerce\n\n/**\n * @param {Uint8Array} input\n * @returns {Digest.Digest<typeof code, number>}\n */\nconst digest = (input) => Digest.create(code, encode(input))\n\nexport const identity = { code, name, encode, digest }\n","import * as Digest from './digest.js'\n\n/**\n * @template {string} Name\n * @template {number} Code\n * @param {object} options\n * @param {Name} options.name\n * @param {Code} options.code\n * @param {(input: Uint8Array) => Await<Uint8Array>} options.encode\n */\nexport const from = ({ name, code, encode }) => new Hasher(name, code, encode)\n\n/**\n * Hasher represents a hashing algorithm implementation that produces as\n * `MultihashDigest`.\n *\n * @template {string} Name\n * @template {number} Code\n * @class\n * @implements {MultihashHasher<Code>}\n */\nexport class Hasher {\n /**\n *\n * @param {Name} name\n * @param {Code} code\n * @param {(input: Uint8Array) => Await<Uint8Array>} encode\n */\n constructor (name, code, encode) {\n this.name = name\n this.code = code\n this.encode = encode\n }\n\n /**\n * @param {Uint8Array} input\n * @returns {Await<Digest.Digest<Code, number>>}\n */\n digest (input) {\n if (input instanceof Uint8Array) {\n const result = this.encode(input)\n return result instanceof Uint8Array\n ? Digest.create(this.code, result)\n /* c8 ignore next 1 */\n : result.then(digest => Digest.create(this.code, digest))\n } else {\n throw Error('Unknown type, must be binary type')\n /* c8 ignore next 1 */\n }\n }\n}\n\n/**\n * @template {number} Alg\n * @typedef {import('./interface.js').MultihashHasher} MultihashHasher\n */\n\n/**\n * @template T\n * @typedef {Promise<T>|T} Await\n */\n","/* global crypto */\n\nimport { from } from './hasher.js'\n\n/**\n * @param {AlgorithmIdentifier} name\n */\nconst sha = name =>\n /**\n * @param {Uint8Array} data\n */\n async data => new Uint8Array(await crypto.subtle.digest(name, data))\n\nexport const sha256 = from({\n name: 'sha2-256',\n code: 0x12,\n encode: sha('SHA-256')\n})\n\nexport const sha512 = from({\n name: 'sha2-512',\n code: 0x13,\n encode: sha('SHA-512')\n})\n","// this is dummy module overlayed by interface.ts\n","import { base32 } from './bases/base32.js'\nimport { base58btc } from './bases/base58.js'\nimport { coerce } from './bytes.js'\nimport * as Digest from './hashes/digest.js'\n// Linter can see that API is used in types.\n// eslint-disable-next-line\nimport * as API from \"./link/interface.js\"\nimport * as varint from './varint.js'\n\n// This way TS will also expose all the types from module\nexport * from './link/interface.js'\n\n/**\n * @template {API.Link<unknown, number, number, API.Version>} T\n * @template {string} Prefix\n * @param {T} link\n * @param {API.MultibaseEncoder<Prefix>} [base]\n * @returns {API.ToString<T, Prefix>}\n */\nexport const format = (link, base) => {\n const { bytes, version } = link\n switch (version) {\n case 0:\n return toStringV0(\n bytes,\n baseCache(link),\n /** @type {API.MultibaseEncoder<\"z\">} */ (base) || base58btc.encoder\n )\n default:\n return toStringV1(\n bytes,\n baseCache(link),\n /** @type {API.MultibaseEncoder<Prefix>} */ (base || base32.encoder)\n )\n }\n}\n\n/**\n * @template {API.UnknownLink} Link\n * @param {Link} link\n * @returns {API.LinkJSON<Link>}\n */\nexport const toJSON = (link) => ({\n '/': format(link)\n})\n\n/**\n * @template {API.UnknownLink} Link\n * @param {API.LinkJSON<Link>} json\n */\nexport const fromJSON = (json) =>\n CID.parse(json['/'])\n\n/** @type {WeakMap<API.UnknownLink, Map<string, string>>} */\nconst cache = new WeakMap()\n\n/**\n * @param {API.UnknownLink} cid\n * @returns {Map<string, string>}\n */\nconst baseCache = cid => {\n const baseCache = cache.get(cid)\n if (baseCache == null) {\n const baseCache = new Map()\n cache.set(cid, baseCache)\n return baseCache\n }\n return baseCache\n}\n\n/**\n * @template {unknown} [Data=unknown]\n * @template {number} [Format=number]\n * @template {number} [Alg=number]\n * @template {API.Version} [Version=API.Version]\n * @implements {API.Link<Data, Format, Alg, Version>}\n */\n\nexport class CID {\n /**\n * @param {Version} version - Version of the CID\n * @param {Format} code - Code of the codec content is encoded in, see https://github.com/multiformats/multicodec/blob/master/table.csv\n * @param {API.MultihashDigest<Alg>} multihash - (Multi)hash of the of the content.\n * @param {Uint8Array} bytes\n */\n constructor (version, code, multihash, bytes) {\n /** @readonly */\n this.code = code\n /** @readonly */\n this.version = version\n /** @readonly */\n this.multihash = multihash\n /** @readonly */\n this.bytes = bytes\n\n // flag to serializers that this is a CID and\n // should be treated specially\n /** @readonly */\n this['/'] = bytes\n }\n\n /**\n * Signalling `cid.asCID === cid` has been replaced with `cid['/'] === cid.bytes`\n * please either use `CID.asCID(cid)` or switch to new signalling mechanism\n *\n * @deprecated\n */\n get asCID () {\n return this\n }\n\n // ArrayBufferView\n get byteOffset () {\n return this.bytes.byteOffset\n }\n\n // ArrayBufferView\n get byteLength () {\n return this.bytes.byteLength\n }\n\n /**\n * @returns {CID<Data, API.DAG_PB, API.SHA_256, 0>}\n */\n toV0 () {\n switch (this.version) {\n case 0: {\n return /** @type {CID<Data, API.DAG_PB, API.SHA_256, 0>} */ (this)\n }\n case 1: {\n const { code, multihash } = this\n\n if (code !== DAG_PB_CODE) {\n throw new Error('Cannot convert a non dag-pb CID to CIDv0')\n }\n\n // sha2-256\n if (multihash.code !== SHA_256_CODE) {\n throw new Error('Cannot convert non sha2-256 multihash CID to CIDv0')\n }\n\n return /** @type {CID<Data, API.DAG_PB, API.SHA_256, 0>} */ (\n CID.createV0(\n /** @type {API.MultihashDigest<API.SHA_256>} */ (multihash)\n )\n )\n }\n default: {\n throw Error(\n `Can not convert CID version ${this.version} to version 0. This is a bug please report`\n )\n }\n }\n }\n\n /**\n * @returns {CID<Data, Format, Alg, 1>}\n */\n toV1 () {\n switch (this.version) {\n case 0: {\n const { code, digest } = this.multihash\n const multihash = Digest.create(code, digest)\n return /** @type {CID<Data, Format, Alg, 1>} */ (\n CID.createV1(this.code, multihash)\n )\n }\n case 1: {\n return /** @type {CID<Data, Format, Alg, 1>} */ (this)\n }\n default: {\n throw Error(\n `Can not convert CID version ${this.version} to version 1. This is a bug please report`\n )\n }\n }\n }\n\n /**\n * @param {unknown} other\n * @returns {other is CID<Data, Format, Alg, Version>}\n */\n equals (other) {\n return CID.equals(this, other)\n }\n\n /**\n * @template {unknown} Data\n * @template {number} Format\n * @template {number} Alg\n * @template {API.Version} Version\n * @param {API.Link<Data, Format, Alg, Version>} self\n * @param {unknown} other\n * @returns {other is CID}\n */\n static equals (self, other) {\n const unknown =\n /** @type {{code?:unknown, version?:unknown, multihash?:unknown}} */ (\n other\n )\n return (\n unknown &&\n self.code === unknown.code &&\n self.version === unknown.version &&\n Digest.equals(self.multihash, unknown.multihash)\n )\n }\n\n /**\n * @param {API.MultibaseEncoder<string>} [base]\n * @returns {string}\n */\n toString (base) {\n return format(this, base)\n }\n\n /**\n * @returns {API.LinkJSON<this>}\n */\n toJSON () {\n return { '/': format(this) }\n }\n\n link () {\n return this\n }\n\n get [Symbol.toStringTag] () {\n return 'CID'\n }\n\n // Legacy\n\n [Symbol.for('nodejs.util.inspect.custom')] () {\n return `CID(${this.toString()})`\n }\n\n /**\n * Takes any input `value` and returns a `CID` instance if it was\n * a `CID` otherwise returns `null`. If `value` is instanceof `CID`\n * it will return value back. If `value` is not instance of this CID\n * class, but is compatible CID it will return new instance of this\n * `CID` class. Otherwise returns null.\n *\n * This allows two different incompatible versions of CID library to\n * co-exist and interop as long as binary interface is compatible.\n *\n * @template {unknown} Data\n * @template {number} Format\n * @template {number} Alg\n * @template {API.Version} Version\n * @template {unknown} U\n * @param {API.Link<Data, Format, Alg, Version>|U} input\n * @returns {CID<Data, Format, Alg, Version>|null}\n */\n static asCID (input) {\n if (input == null) {\n return null\n }\n\n const value = /** @type {any} */ (input)\n if (value instanceof CID) {\n // If value is instance of CID then we're all set.\n return value\n } else if ((value['/'] != null && value['/'] === value.bytes) || value.asCID === value) {\n // If value isn't instance of this CID class but `this.asCID === this` or\n // `value['/'] === value.bytes` is true it is CID instance coming from a\n // different implementation (diff version or duplicate). In that case we\n // rebase it to this `CID` implementation so caller is guaranteed to get\n // instance with expected API.\n const { version, code, multihash, bytes } = value\n return new CID(\n version,\n code,\n /** @type {API.MultihashDigest<Alg>} */ (multihash),\n bytes || encodeCID(version, code, multihash.bytes)\n )\n } else if (value[cidSymbol] === true) {\n // If value is a CID from older implementation that used to be tagged via\n // symbol we still rebase it to the this `CID` implementation by\n // delegating that to a constructor.\n const { version, multihash, code } = value\n const digest =\n /** @type {API.MultihashDigest<Alg>} */\n (Digest.decode(multihash))\n return CID.create(version, code, digest)\n } else {\n // Otherwise value is not a CID (or an incompatible version of it) in\n // which case we return `null`.\n return null\n }\n }\n\n /**\n *\n * @template {unknown} Data\n * @template {number} Format\n * @template {number} Alg\n * @template {API.Version} Version\n * @param {Version} version - Version of the CID\n * @param {Format} code - Code of the codec content is encoded in, see https://github.com/multiformats/multicodec/blob/master/table.csv\n * @param {API.MultihashDigest<Alg>} digest - (Multi)hash of the of the content.\n * @returns {CID<Data, Format, Alg, Version>}\n */\n static create (version, code, digest) {\n if (typeof code !== 'number') {\n throw new Error('String codecs are no longer supported')\n }\n\n if (!(digest.bytes instanceof Uint8Array)) {\n throw new Error('Invalid digest')\n }\n\n switch (version) {\n case 0: {\n if (code !== DAG_PB_CODE) {\n throw new Error(\n `Version 0 CID must use dag-pb (code: ${DAG_PB_CODE}) block encoding`\n )\n } else {\n return new CID(version, code, digest, digest.bytes)\n }\n }\n case 1: {\n const bytes = encodeCID(version, code, digest.bytes)\n return new CID(version, code, digest, bytes)\n }\n default: {\n throw new Error('Invalid version')\n }\n }\n }\n\n /**\n * Simplified version of `create` for CIDv0.\n *\n * @template {unknown} [T=unknown]\n * @param {API.MultihashDigest<typeof SHA_256_CODE>} digest - Multihash.\n * @returns {CID<T, typeof DAG_PB_CODE, typeof SHA_256_CODE, 0>}\n */\n static createV0 (digest) {\n return CID.create(0, DAG_PB_CODE, digest)\n }\n\n /**\n * Simplified version of `create` for CIDv1.\n *\n * @template {unknown} Data\n * @template {number} Code\n * @template {number} Alg\n * @param {Code} code - Content encoding format code.\n * @param {API.MultihashDigest<Alg>} digest - Miltihash of the content.\n * @returns {CID<Data, Code, Alg, 1>}\n */\n static createV1 (code, digest) {\n return CID.create(1, code, digest)\n }\n\n /**\n * Decoded a CID from its binary representation. The byte array must contain\n * only the CID with no additional bytes.\n *\n * An error will be thrown if the bytes provided do not contain a valid\n * binary representation of a CID.\n *\n * @template {unknown} Data\n * @template {number} Code\n * @template {number} Alg\n * @template {API.Version} Ver\n * @param {API.ByteView<API.Link<Data, Code, Alg, Ver>>} bytes\n * @returns {CID<Data, Code, Alg, Ver>}\n */\n static decode (bytes) {\n const [cid, remainder] = CID.decodeFirst(bytes)\n if (remainder.length) {\n throw new Error('Incorrect length')\n }\n return cid\n }\n\n /**\n * Decoded a CID from its binary representation at the beginning of a byte\n * array.\n *\n * Returns an array with the first element containing the CID and the second\n * element containing the remainder of the original byte array. The remainder\n * will be a zero-length byte array if the provided bytes only contained a\n * binary CID representation.\n *\n * @template {unknown} T\n * @template {number} C\n * @template {number} A\n * @template {API.Version} V\n * @param {API.ByteView<API.Link<T, C, A, V>>} bytes\n * @returns {[CID<T, C, A, V>, Uint8Array]}\n */\n static decodeFirst (bytes) {\n const specs = CID.inspectBytes(bytes)\n const prefixSize = specs.size - specs.multihashSize\n const multihashBytes = coerce(\n bytes.subarray(prefixSize, prefixSize + specs.multihashSize)\n )\n if (multihashBytes.byteLength !== specs.multihashSize) {\n throw new Error('Incorrect length')\n }\n const digestBytes = multihashBytes.subarray(\n specs.multihashSize - specs.digestSize\n )\n const digest = new Digest.Digest(\n specs.multihashCode,\n specs.digestSize,\n digestBytes,\n multihashBytes\n )\n const cid =\n specs.version === 0\n ? CID.createV0(/** @type {API.MultihashDigest<API.SHA_256>} */ (digest))\n : CID.createV1(specs.codec, digest)\n return [/** @type {CID<T, C, A, V>} */(cid), bytes.subarray(specs.size)]\n }\n\n /**\n * Inspect the initial bytes of a CID to determine its properties.\n *\n * Involves decoding up to 4 varints. Typically this will require only 4 to 6\n * bytes but for larger multicodec code values and larger multihash digest\n * lengths these varints can be quite large. It is recommended that at least\n * 10 bytes be made available in the `initialBytes` argument for a complete\n * inspection.\n *\n * @template {unknown} T\n * @template {number} C\n * @template {number} A\n * @template {API.Version} V\n * @param {API.ByteView<API.Link<T, C, A, V>>} initialBytes\n * @returns {{ version:V, codec:C, multihashCode:A, digestSize:number, multihashSize:number, size:number }}\n */\n static inspectBytes (initialBytes) {\n let offset = 0\n const next = () => {\n const [i, length] = varint.decode(initialBytes.subarray(offset))\n offset += length\n return i\n }\n\n let version = /** @type {V} */ (next())\n let codec = /** @type {C} */ (DAG_PB_CODE)\n if (/** @type {number} */(version) === 18) {\n // CIDv0\n version = /** @type {V} */ (0)\n offset = 0\n } else {\n codec = /** @type {C} */ (next())\n }\n\n if (version !== 0 && version !== 1) {\n throw new RangeError(`Invalid CID version ${version}`)\n }\n\n const prefixSize = offset\n const multihashCode = /** @type {A} */ (next()) // multihash code\n const digestSize = next() // multihash length\n const size = offset + digestSize\n const multihashSize = size - prefixSize\n\n return { version, codec, multihashCode, digestSize, multihashSize, size }\n }\n\n /**\n * Takes cid in a string representation and creates an instance. If `base`\n * decoder is not provided will use a default from the configuration. It will\n * throw an error if encoding of the CID is not compatible with supplied (or\n * a default decoder).\n *\n * @template {string} Prefix\n * @template {unknown} Data\n * @template {number} Code\n * @template {number} Alg\n * @template {API.Version} Ver\n * @param {API.ToString<API.Link<Data, Code, Alg, Ver>, Prefix>} source\n * @param {API.MultibaseDecoder<Prefix>} [base]\n * @returns {CID<Data, Code, Alg, Ver>}\n */\n static parse (source, base) {\n const [prefix, bytes] = parseCIDtoBytes(source, base)\n\n const cid = CID.decode(bytes)\n\n if (cid.version === 0 && source[0] !== 'Q') {\n throw Error('Version 0 CID string must not include multibase prefix')\n }\n\n // Cache string representation to avoid computing it on `this.toString()`\n baseCache(cid).set(prefix, source)\n\n return cid\n }\n}\n\n/**\n * @template {string} Prefix\n * @template {unknown} Data\n * @template {number} Code\n * @template {number} Alg\n * @template {API.Version} Ver\n * @param {API.ToString<API.Link<Data, Code, Alg, Ver>, Prefix>} source\n * @param {API.MultibaseDecoder<Prefix>} [base]\n * @returns {[Prefix, API.ByteView<API.Link<Data, Code, Alg, Ver>>]}\n */\nconst parseCIDtoBytes = (source, base) => {\n switch (source[0]) {\n // CIDv0 is parsed differently\n case 'Q': {\n const decoder = base || base58btc\n return [\n /** @type {Prefix} */ (base58btc.prefix),\n decoder.decode(`${base58btc.prefix}${source}`)\n ]\n }\n case base58btc.prefix: {\n const decoder = base || base58btc\n return [/** @type {Prefix} */(base58btc.prefix), decoder.decode(source)]\n }\n case base32.prefix: {\n const decoder = base || base32\n return [/** @type {Prefix} */(base32.prefix), decoder.decode(source)]\n }\n default: {\n if (base == null) {\n throw Error(\n 'To parse non base32 or base58btc encoded CID multibase decoder must be provided'\n )\n }\n return [/** @type {Prefix} */(source[0]), base.decode(source)]\n }\n }\n}\n\n/**\n *\n * @param {Uint8Array} bytes\n * @param {Map<string, string>} cache\n * @param {API.MultibaseEncoder<'z'>} base\n */\nconst toStringV0 = (bytes, cache, base) => {\n const { prefix } = base\n if (prefix !== base58btc.prefix) {\n throw Error(`Cannot string encode V0 in ${base.name} encoding`)\n }\n\n const cid = cache.get(prefix)\n if (cid == null) {\n const cid = base.encode(bytes).slice(1)\n cache.set(prefix, cid)\n return cid\n } else {\n return cid\n }\n}\n\n/**\n * @template {string} Prefix\n * @param {Uint8Array} bytes\n * @param {Map<string, string>} cache\n * @param {API.MultibaseEncoder<Prefix>} base\n */\nconst toStringV1 = (bytes, cache, base) => {\n const { prefix } = base\n const cid = cache.get(prefix)\n if (cid == null) {\n const cid = base.encode(bytes)\n cache.set(prefix, cid)\n return cid\n } else {\n return cid\n }\n}\n\nconst DAG_PB_CODE = 0x70\nconst SHA_256_CODE = 0x12\n\n/**\n * @param {API.Version} version\n * @param {number} code\n * @param {Uint8Array} multihash\n * @returns {Uint8Array}\n */\nconst encodeCID = (version, code, multihash) => {\n const codeOffset = varint.encodingLength(version)\n const hashOffset = codeOffset + varint.encodingLength(code)\n const bytes = new Uint8Array(hashOffset + multihash.byteLength)\n varint.encodeTo(version, bytes, 0)\n varint.encodeTo(code, bytes, codeOffset)\n bytes.set(multihash, hashOffset)\n return bytes\n}\n\nconst cidSymbol = Symbol.for('@ipld/js-cid/CID')\n","// this is dummy module overlayed by interface.ts\n","import * as bytes from './bytes.js'\nimport { CID } from './cid.js'\nimport * as digest from './hashes/digest.js'\nimport * as hasher from './hashes/hasher.js'\nimport * as varint from './varint.js'\n\n// This way TS will also expose all the types from module\nexport * from './interface.js'\n\nexport { CID, hasher, digest, varint, bytes }\n","// @ts-check\n\nimport * as base10 from './bases/base10.js'\nimport * as base16 from './bases/base16.js'\nimport * as base2 from './bases/base2.js'\nimport * as base256emoji from './bases/base256emoji.js'\nimport * as base32 from './bases/base32.js'\nimport * as base36 from './bases/base36.js'\nimport * as base58 from './bases/base58.js'\nimport * as base64 from './bases/base64.js'\nimport * as base8 from './bases/base8.js'\nimport * as identityBase from './bases/identity.js'\nimport * as json from './codecs/json.js'\nimport * as raw from './codecs/raw.js'\nimport * as identity from './hashes/identity.js'\nimport * as sha2 from './hashes/sha2.js'\nimport { CID, hasher, digest, varint, bytes } from './index.js'\n\nconst bases = { ...identityBase, ...base2, ...base8, ...base10, ...base16, ...base32, ...base36, ...base58, ...base64, ...base256emoji }\nconst hashes = { ...sha2, ...identity }\nconst codecs = { raw, json }\n\nexport { CID, hasher, digest, varint, bytes, hashes, bases, codecs }\n","import { asUint8Array } from './util/as-uint8array.js'\n\n/**\n * Returns a `Uint8Array` of the requested size. Referenced memory will\n * be initialized to 0.\n */\nexport function alloc (size: number = 0): Uint8Array {\n if (globalThis.Buffer?.alloc != null) {\n return asUint8Array(globalThis.Buffer.alloc(size))\n }\n\n return new Uint8Array(size)\n}\n\n/**\n * Where possible returns a Uint8Array of the requested size that references\n * uninitialized memory. Only use if you are certain you will immediately\n * overwrite every value in the returned `Uint8Array`.\n */\nexport function allocUnsafe (size: number = 0): Uint8Array {\n if (globalThis.Buffer?.allocUnsafe != null) {\n return asUint8Array(globalThis.Buffer.allocUnsafe(size))\n }\n\n return new Uint8Array(size)\n}\n","import { bases } from 'multiformats/basics'\nimport { allocUnsafe } from '../alloc.js'\nimport type { MultibaseCodec } from 'multiformats'\n\nfunction createCodec (name: string, prefix: string, encode: (buf: Uint8Array) => string, decode: (str: string) => Uint8Array): MultibaseCodec<any> {\n return {\n name,\n prefix,\n encoder: {\n name,\n prefix,\n encode\n },\n decoder: {\n decode\n }\n }\n}\n\nconst string = createCodec('utf8', 'u', (buf) => {\n const decoder = new TextDecoder('utf8')\n return 'u' + decoder.decode(buf)\n}, (str) => {\n const encoder = new TextEncoder()\n return encoder.encode(str.substring(1))\n})\n\nconst ascii = createCodec('ascii', 'a', (buf) => {\n let string = 'a'\n\n for (let i = 0; i < buf.length; i++) {\n string += String.fromCharCode(buf[i])\n }\n return string\n}, (str) => {\n str = str.substring(1)\n const buf = allocUnsafe(str.length)\n\n for (let i = 0; i < str.length; i++) {\n buf[i] = str.charCodeAt(i)\n }\n\n return buf\n})\n\nexport type SupportedEncodings = 'utf8' | 'utf-8' | 'hex' | 'latin1' | 'ascii' | 'binary' | keyof typeof bases\n\nconst BASES: Record<SupportedEncodings, MultibaseCodec<any>> = {\n utf8: string,\n 'utf-8': string,\n hex: bases.base16,\n latin1: ascii,\n ascii,\n binary: ascii,\n\n ...bases\n}\n\nexport default BASES\n","import { asUint8Array } from './util/as-uint8array.js'\nimport bases, { type SupportedEncodings } from './util/bases.js'\n\nexport type { SupportedEncodings }\n\n/**\n * Create a `Uint8Array` from the passed string\n *\n * Supports `utf8`, `utf-8`, `hex`, and any encoding supported by the multiformats module.\n *\n * Also `ascii` which is similar to node's 'binary' encoding.\n */\nexport function fromString (string: string, encoding: SupportedEncodings = 'utf8'): Uint8Array {\n const base = bases[encoding]\n\n if (base == null) {\n throw new Error(`Unsupported encoding \"${encoding}\"`)\n }\n\n if ((encoding === 'utf8' || encoding === 'utf-8') && globalThis.Buffer != null && globalThis.Buffer.from != null) {\n return asUint8Array(globalThis.Buffer.from(string, 'utf-8'))\n }\n\n // add multibase prefix\n return base.decoder.decode(`${base.prefix}${string}`) // eslint-disable-line @typescript-eslint/restrict-template-expressions\n}\n","// @ts-expect-error\nimport SparseArray from 'sparse-array'\nimport { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'\nimport type { InfiniteHash } from './consumable-hash.js'\n\nexport interface BucketChild<V> {\n key: string\n value: V\n hash: InfiniteHash\n}\n\ninterface SA<B> {\n length: number\n compactArray: () => B[]\n get: (i: number) => B\n set: (i: number, value: B) => void\n reduce: <A> (fn: (acc: A, curr: B, index: number) => A, initial: A) => B\n find: (fn: (item: B) => boolean) => B | undefined\n bitField: () => number[]\n unset: (i: number) => void\n}\n\nexport interface BucketPosition<T> {\n bucket: Bucket<T>\n pos: number\n hash: InfiniteHash\n existingChild?: BucketChild<T>\n}\n\nexport interface BucketOptions {\n bits: number\n hash: (value: Uint8Array | InfiniteHash) => InfiniteHash\n}\n\nexport class Bucket<T> {\n _options: BucketOptions\n _popCount: number\n _parent?: Bucket<T>\n _posAtParent: number\n _children: SA<Bucket<T> | BucketChild<T>>\n\n key: string | null\n\n constructor (options: BucketOptions, parent?: Bucket<T>, posAtParent = 0) {\n this._options = options\n this._popCount = 0\n this._parent = parent\n this._posAtParent = posAtParent\n this._children = new SparseArray()\n this.key = null\n }\n\n async put (key: string, value: T) {\n const place = await this._findNewBucketAndPos(key)\n\n await place.bucket._putAt(place, key, value)\n }\n\n async get (key: string) {\n const child = await this._findChild(key)\n\n if (child != null) {\n return child.value\n }\n }\n\n async del (key: string) {\n const place = await this._findPlace(key)\n const child = place.bucket._at(place.pos)\n\n if (child != null && child.key === key) {\n place.bucket._delAt(place.pos)\n }\n }\n\n leafCount (): number {\n const children = this._children.compactArray()\n\n return children.reduce((acc, child) => {\n if (child instanceof Bucket) {\n return acc + child.leafCount()\n }\n\n return acc + 1\n }, 0)\n }\n\n childrenCount () {\n return this._children.length\n }\n\n onlyChild () {\n return this._children.get(0)\n }\n\n * eachLeafSeries (): Iterable<BucketChild<T>> {\n const children = this._children.compactArray()\n\n for (const child of children) {\n if (child instanceof Bucket) {\n yield * child.eachLeafSeries()\n } else {\n yield child\n }\n }\n }\n\n serialize (map: (value: BucketChild<T>, index: number) => T, reduce: (reduced: any) => any) {\n const acc: T[] = []\n // serialize to a custom non-sparse representation\n return reduce(this._children.reduce((acc, child, index) => {\n if (child != null) {\n if (child instanceof Bucket) {\n acc.push(child.serialize(map, reduce))\n } else {\n acc.push(map(child, index))\n }\n }\n return acc\n }, acc))\n }\n\n async asyncTransform (asyncMap: (value: BucketChild<T>) => Promise<T[]>, asyncReduce: (reduced: any) => Promise<any>) {\n return await asyncTransformBucket(this, asyncMap, asyncReduce)\n }\n\n toJSON () {\n return this.serialize(mapNode, reduceNodes)\n }\n\n prettyPrint () {\n return JSON.stringify(this.toJSON(), null, ' ')\n }\n\n tableSize () {\n return Math.pow(2, this._options.bits)\n }\n\n async _findChild (key: string) {\n const result = await this._findPlace(key)\n const child = result.bucket._at(result.pos)\n\n if (child instanceof Bucket) {\n // should not be possible, this._findPlace should always\n // return a location for a child, not a bucket\n return undefined\n }\n\n if (child != null && child.key === key) {\n return child\n }\n }\n\n async _findPlace (key: string | InfiniteHash): Promise<BucketPosition<T>> {\n const hashValue = this._options.hash(typeof key === 'string' ? uint8ArrayFromString(key) : key)\n const index = await hashValue.take(this._options.bits)\n\n const child = this._children.get(index)\n\n if (child instanceof Bucket) {\n return await child._findPlace(hashValue)\n }\n\n return {\n bucket: this,\n pos: index,\n hash: hashValue,\n existingChild: child\n }\n }\n\n async _findNewBucketAndPos (key: string | InfiniteHash): Promise<BucketPosition<T>> {\n const place = await this._findPlace(key)\n\n if ((place.existingChild != null) && place.existingChild.key !== key) {\n // conflict\n const bucket = new Bucket(this._options, place.bucket, place.pos)\n place.bucket._putObjectAt(place.pos, bucket)\n\n // put the previous value\n const newPlace = await bucket._findPlace(place.existingChild.hash)\n newPlace.bucket._putAt(newPlace, place.existingChild.key, place.existingChild.value)\n\n return await bucket._findNewBucketAndPos(place.hash)\n }\n\n // no conflict, we found the place\n return place\n }\n\n _putAt (place: BucketPosition<T>, key: string, value: T) {\n this._putObjectAt(place.pos, {\n key: key,\n value: value,\n hash: place.hash\n })\n }\n\n _putObjectAt (pos: number, object: Bucket<T> | BucketChild<T>) {\n if (this._children.get(pos) == null) {\n this._popCount++\n }\n this._children.set(pos, object)\n }\n\n _delAt (pos: number) {\n if (pos === -1) {\n throw new Error('Invalid position')\n }\n\n if (this._children.get(pos) != null) {\n this._popCount--\n }\n this._children.unset(pos)\n this._level()\n }\n\n _level () {\n if (this._parent != null && this._popCount <= 1) {\n if (this._popCount === 1) {\n // remove myself from parent, replacing me with my only child\n const onlyChild = this._children.find(exists)\n\n if ((onlyChild != null) && !(onlyChild instanceof Bucket)) {\n const hash = onlyChild.hash\n hash.untake(this._options.bits)\n const place = {\n pos: this._posAtParent,\n hash: hash,\n bucket: this._parent\n }\n this._parent._putAt(place, onlyChild.key, onlyChild.value)\n }\n } else {\n this._parent._delAt(this._posAtParent)\n }\n }\n }\n\n _at (index: number) {\n return this._children.get(index)\n }\n}\n\nfunction exists (o: any) {\n return Boolean(o)\n}\n\nfunction mapNode (node: any, _: number) {\n return node.key\n}\n\nfunction reduceNodes (nodes: any) {\n return nodes\n}\n\nasync function asyncTransformBucket<T> (bucket: Bucket<T>, asyncMap: (value: BucketChild<T>) => Promise<T[]>, asyncReduce: (reduced: any) => Promise<any>) {\n const output = []\n\n for (const child of bucket._children.compactArray()) {\n if (child instanceof Bucket) {\n await asyncTransformBucket(child, asyncMap, asyncReduce)\n } else {\n const mappedChildren = await asyncMap(child)\n\n output.push({\n bitField: bucket._children.bitField(),\n children: mappedChildren\n })\n }\n }\n\n return await asyncReduce(output)\n}\n","const START_MASKS = [\n 0b11111111,\n 0b11111110,\n 0b11111100,\n 0b11111000,\n 0b11110000,\n 0b11100000,\n 0b11000000,\n 0b10000000\n]\n\nconst STOP_MASKS = [\n 0b00000001,\n 0b00000011,\n 0b00000111,\n 0b00001111,\n 0b00011111,\n 0b00111111,\n 0b01111111,\n 0b11111111\n]\n\nexport class ConsumableBuffer {\n _value: Uint8Array\n _currentBytePos: number\n _currentBitPos: number\n\n constructor (value: Uint8Array) {\n this._value = value\n this._currentBytePos = value.length - 1\n this._currentBitPos = 7\n }\n\n availableBits () {\n return this._currentBitPos + 1 + this._currentBytePos * 8\n }\n\n totalBits () {\n return this._value.length * 8\n }\n\n take (bits: number) {\n let pendingBits = bits\n let result = 0\n while (pendingBits > 0 && this._haveBits()) {\n const byte = this._value[this._currentBytePos]\n const availableBits = this._currentBitPos + 1\n const taking = Math.min(availableBits, pendingBits)\n const value = byteBitsToInt(byte, availableBits - taking, taking)\n result = (result << taking) + value\n\n pendingBits -= taking\n\n this._currentBitPos -= taking\n if (this._currentBitPos < 0) {\n this._currentBitPos = 7\n this._currentBytePos--\n }\n }\n\n return result\n }\n\n untake (bits: number) {\n this._currentBitPos += bits\n while (this._currentBitPos > 7) {\n this._currentBitPos -= 8\n this._currentBytePos += 1\n }\n }\n\n _haveBits () {\n return this._currentBytePos >= 0\n }\n}\n\nfunction byteBitsToInt (byte: number, start: number, length: number) {\n const mask = maskFor(start, length)\n return (byte & mask) >>> start\n}\n\nfunction maskFor (start: number, length: number) {\n return START_MASKS[start] & STOP_MASKS[Math.min(length + start - 1, 7)]\n}\n","import { allocUnsafe } from './alloc.js'\nimport { asUint8Array } from './util/as-uint8array.js'\n\n/**\n * Returns a new Uint8Array created by concatenating the passed ArrayLikes\n */\nexport function concat (arrays: Array<ArrayLike<number>>, length?: number): Uint8Array {\n if (length == null) {\n length = arrays.reduce((acc, curr) => acc + curr.length, 0)\n }\n\n const output = allocUnsafe(length)\n let offset = 0\n\n for (const arr of arrays) {\n output.set(arr, offset)\n offset += arr.length\n }\n\n return asUint8Array(output)\n}\n","import { ConsumableBuffer } from './consumable-buffer.js'\nimport { concat as uint8ArrayConcat } from 'uint8arrays/concat'\n\nexport function wrapHash (hashFn: (value: Uint8Array) => Promise<Uint8Array>) {\n function hashing (value: InfiniteHash | Uint8Array) {\n if (value instanceof InfiniteHash) {\n // already a hash. return it\n return value\n } else {\n return new InfiniteHash(value, hashFn)\n }\n }\n\n return hashing\n}\n\nexport class InfiniteHash {\n _value: Uint8Array\n _hashFn: (value: Uint8Array) => Promise<Uint8Array>\n _depth: number\n _availableBits: number\n _currentBufferIndex: number\n _buffers: ConsumableBuffer[]\n\n constructor (value: Uint8Array, hashFn: (value: Uint8Array) => Promise<Uint8Array>) {\n if (!(value instanceof Uint8Array)) {\n throw new Error('can only hash Uint8Arrays')\n }\n\n this._value = value\n this._hashFn = hashFn\n this._depth = -1\n this._availableBits = 0\n this._currentBufferIndex = 0\n this._buffers = []\n }\n\n async take (bits: number) {\n let pendingBits = bits\n\n while (this._availableBits < pendingBits) {\n await this._produceMoreBits()\n }\n\n let result = 0\n\n while (pendingBits > 0) {\n const hash = this._buffers[this._currentBufferIndex]\n const available = Math.min(hash.availableBits(), pendingBits)\n const took = hash.take(available)\n result = (result << available) + took\n pendingBits -= available\n this._availableBits -= available\n\n if (hash.availableBits() === 0) {\n this._currentBufferIndex++\n }\n }\n\n return result\n }\n\n untake (bits: number) {\n let pendingBits = bits\n\n while (pendingBits > 0) {\n const hash = this._buffers[this._currentBufferIndex]\n const availableForUntake = Math.min(hash.totalBits() - hash.availableBits(), pendingBits)\n hash.untake(availableForUntake)\n pendingBits -= availableForUntake\n this._availableBits += availableForUntake\n\n if (this._currentBufferIndex > 0 && hash.totalBits() === hash.availableBits()) {\n this._depth--\n this._currentBufferIndex--\n }\n }\n }\n\n async _produceMoreBits () {\n this._depth++\n\n const value = this._depth > 0 ? uint8ArrayConcat([this._value, Uint8Array.from([this._depth])]) : this._value\n const hashValue = await this._hashFn(value)\n const buffer = new ConsumableBuffer(hashValue)\n\n this._buffers.push(buffer)\n this._availableBits += buffer.availableBits()\n }\n}\n","import { Bucket } from './bucket.js'\nimport type { BucketOptions, BucketPosition, BucketChild } from './bucket.js'\nimport { wrapHash } from './consumable-hash.js'\n\ninterface UserBucketOptions {\n hashFn: (value: Uint8Array) => Promise<Uint8Array>\n bits?: number\n}\n\nexport function createHAMT<T> (options: UserBucketOptions) {\n if (options == null || options.hashFn == null) {\n throw new Error('please define an options.hashFn')\n }\n\n const bucketOptions = {\n bits: options.bits ?? 8,\n hash: wrapHash(options.hashFn)\n }\n\n return new Bucket<T>(bucketOptions)\n}\n\nexport { Bucket }\nexport type { BucketOptions, BucketPosition, BucketChild }\n","import { decode, type PBLink, type PBNode } from '@ipld/dag-pb'\nimport { murmur3128 } from '@multiformats/murmur3'\nimport errCode from 'err-code'\nimport { Bucket, type BucketPosition, createHAMT } from 'hamt-sharding'\nimport { UnixFS } from 'ipfs-unixfs'\nimport type { ExporterOptions, ShardTraversalContext, ReadableStorage } from '../index.js'\nimport type { CID } from 'multiformats/cid'\n\n// FIXME: this is copy/pasted from ipfs-unixfs-importer/src/options.js\nconst hashFn = async function (buf: Uint8Array): Promise<Uint8Array> {\n return (await murmur3128.encode(buf))\n // Murmur3 outputs 128 bit but, accidentally, IPFS Go's\n // implementation only uses the first 64, so we must do the same\n // for parity..\n .slice(0, 8)\n // Invert buffer because that's how Go impl does it\n .reverse()\n}\n\nconst addLinksToHamtBucket = async (links: PBLink[], bucket: Bucket<boolean>, rootBucket: Bucket<boolean>): Promise<void> => {\n const padLength = (bucket.tableSize() - 1).toString(16).length\n await Promise.all(\n links.map(async link => {\n if (link.Name == null) {\n // TODO(@rvagg): what do? this is technically possible\n throw new Error('Unexpected Link without a Name')\n }\n if (link.Name.length === padLength) {\n const pos = parseInt(link.Name, 16)\n\n bucket._putObjectAt(pos, new Bucket({\n hash: rootBucket._options.hash,\n bits: rootBucket._options.bits\n }, bucket, pos))\n return\n }\n\n await rootBucket.put(link.Name.substring(2), true)\n })\n )\n}\n\nconst toPrefix = (position: number, padLength: number): string => {\n return position\n .toString(16)\n .toUpperCase()\n .padStart(padLength, '0')\n .substring(0, padLength)\n}\n\nconst toBucketPath = (position: BucketPosition<boolean>): Array<Bucket<boolean>> => {\n let bucket = position.bucket\n const path = []\n\n while (bucket._parent != null) {\n path.push(bucket)\n\n bucket = bucket._parent\n }\n\n path.push(bucket)\n\n return path.reverse()\n}\n\nconst findShardCid = async (node: PBNode, name: string, blockstore: ReadableStorage, context?: ShardTraversalContext, options?: ExporterOptions): Promise<CID | undefined> => {\n if (context == null) {\n if (node.Data == null) {\n throw errCode(new Error('no data in PBNode'), 'ERR_NOT_UNIXFS')\n }\n\n let dir: UnixFS\n try {\n dir = UnixFS.unmarshal(node.Data)\n } catch (err: any) {\n throw errCode(err, 'ERR_NOT_UNIXFS')\n }\n\n if (dir.type !== 'hamt-sharded-directory') {\n throw errCode(new Error('not a HAMT'), 'ERR_NOT_UNIXFS')\n }\n if (dir.fanout == null) {\n throw errCode(new Error('missing fanout'), 'ERR_NOT_UNIXFS')\n }\n\n const rootBucket = createHAMT<boolean>({\n hashFn,\n bits: Math.log2(Number(dir.fanout))\n })\n\n context = {\n rootBucket,\n hamtDepth: 1,\n lastBucket: rootBucket\n }\n }\n\n const padLength = (context.lastBucket.tableSize() - 1).toString(16).length\n\n await addLinksToHamtBucket(node.Links, context.lastBucket, context.rootBucket)\n\n const position = await context.rootBucket._findNewBucketAndPos(name)\n let prefix = toPrefix(position.pos, padLength)\n const bucketPath = toBucketPath(position)\n\n if (bucketPath.length > context.hamtDepth) {\n context.lastBucket = bucketPath[context.hamtDepth]\n\n prefix = toPrefix(context.lastBucket._posAtParent, padLength)\n }\n\n const link = node.Links.find(link => {\n if (link.Name == null) {\n return false\n }\n\n const entryPrefix = link.Name.substring(0, padLength)\n const entryName = link.Name.substring(padLength)\n\n if (entryPrefix !== prefix) {\n // not the entry or subshard we're looking for\n return false\n }\n\n if (entryName !== '' && entryName !== name) {\n // not the entry we're looking for\n return false\n }\n\n return true\n })\n\n if (link == null) {\n return\n }\n\n if (link.Name != null && link.Name.substring(padLength) === name) {\n return link.Hash\n }\n\n context.hamtDepth++\n\n const block = await blockstore.get(link.Hash, options)\n node = decode(block)\n\n return findShardCid(node, name, blockstore, context, options)\n}\n\nexport default findShardCid\n","/**\n * @packageDocumentation\n *\n * Lets you look at the contents of an async iterator and decide what to do\n *\n * @example\n *\n * ```javascript\n * import peekable from 'it-peekable'\n *\n * // This can also be an iterator, generator, etc\n * const values = [0, 1, 2, 3, 4]\n *\n * const it = peekable(value)\n *\n * const first = it.peek()\n *\n * console.info(first) // 0\n *\n * it.push(first)\n *\n * console.info([...it])\n * // [ 0, 1, 2, 3, 4 ]\n * ```\n *\n * Async sources must be awaited:\n *\n * ```javascript\n * import peekable from 'it-peekable'\n *\n * const values = async function * () {\n * yield * [0, 1, 2, 3, 4]\n * }\n *\n * const it = peekable(values())\n *\n * const first = await it.peek()\n *\n * console.info(first) // 0\n *\n * it.push(first)\n *\n * console.info(await all(it))\n * // [ 0, 1, 2, 3, 4 ]\n * ```\n */\n\nexport interface Peek <T> {\n peek(): IteratorResult<T, undefined>\n}\n\nexport interface AsyncPeek <T> {\n peek(): Promise<IteratorResult<T, undefined>>\n}\n\nexport interface Push <T> {\n push(value: T): void\n}\n\nexport type Peekable <T> = Iterable<T> & Peek<T> & Push<T> & Iterator<T>\n\nexport type AsyncPeekable <T> = AsyncIterable<T> & AsyncPeek<T> & Push<T> & AsyncIterator<T>\n\nfunction peekable <T> (iterable: Iterable<T>): Peekable<T>\nfunction peekable <T> (iterable: AsyncIterable<T>): AsyncPeekable<T>\nfunction peekable <T> (iterable: Iterable<T> | AsyncIterable<T>): Peekable<T> | AsyncPeekable<T> {\n // @ts-expect-error can't use Symbol.asyncIterator to index iterable since it might be Iterable\n const [iterator, symbol] = iterable[Symbol.asyncIterator] != null\n // @ts-expect-error can't use Symbol.asyncIterator to index iterable since it might be Iterable\n ? [iterable[Symbol.asyncIterator](), Symbol.asyncIterator]\n // @ts-expect-error can't use Symbol.iterator to index iterable since it might be AsyncIterable\n : [iterable[Symbol.iterator](), Symbol.iterator]\n\n const queue: any[] = []\n\n // @ts-expect-error can't use symbol to index peekable\n return {\n peek: () => {\n return iterator.next()\n },\n push: (value: any) => {\n queue.push(value)\n },\n next: () => {\n if (queue.length > 0) {\n return {\n done: false,\n value: queue.shift()\n }\n }\n\n return iterator.next()\n },\n [symbol] () {\n return this\n }\n }\n}\n\nexport default peekable\n","/**\n * @packageDocumentation\n *\n * Filter values out of an (async)iterable\n *\n * @example\n *\n * ```javascript\n * import all from 'it-all'\n * import filter from 'it-filter'\n *\n * // This can also be an iterator, generator, etc\n * const values = [0, 1, 2, 3, 4]\n *\n * const fn = val => val > 2 // Return boolean to keep item\n *\n * const arr = all(filter(values, fn))\n *\n * console.info(arr) // 3, 4\n * ```\n *\n * Async sources and filter functions must be awaited:\n *\n * ```javascript\n * import all from 'it-all'\n * import filter from 'it-filter'\n *\n * const values = async function * () {\n * yield * [0, 1, 2, 3, 4]\n * }\n *\n * const fn = async val => val > 2 // Return boolean or promise of boolean to keep item\n *\n * const arr = await all(filter(values, fn))\n *\n * console.info(arr) // 3, 4\n * ```\n */\n\nimport peek from 'it-peekable'\n\nfunction isAsyncIterable <T> (thing: any): thing is AsyncIterable<T> {\n return thing[Symbol.asyncIterator] != null\n}\n\n/**\n * Filters the passed (async) iterable by using the filter function\n */\nfunction filter <T> (source: Iterable<T>, fn: (val: T) => Promise<boolean>): AsyncGenerator<T, void, undefined>\nfunction filter <T> (source: Iterable<T>, fn: (val: T) => boolean): Generator<T, void, undefined>\nfunction filter <T> (source: Iterable<T> | AsyncIterable<T>, fn: (val: T) => boolean | Promise<boolean>): AsyncGenerator<T, void, undefined>\nfunction filter <T> (source: Iterable<T> | AsyncIterable<T>, fn: (val: T) => boolean | Promise<boolean>): Generator<T, void, undefined> | AsyncGenerator<T, void, undefined> {\n if (isAsyncIterable(source)) {\n return (async function * () {\n for await (const entry of source) {\n if (await fn(entry)) {\n yield entry\n }\n }\n })()\n }\n\n // if mapping function returns a promise we have to return an async generator\n const peekable = peek(source)\n const { value, done } = peekable.next()\n\n if (done === true) {\n return (function * () {}())\n }\n\n const res = fn(value)\n\n // @ts-expect-error .then is not present on O\n if (typeof res.then === 'function') {\n return (async function * () {\n if (await res) {\n yield value\n }\n\n for await (const entry of peekable) {\n if (await fn(entry)) {\n yield entry\n }\n }\n })()\n }\n\n const func = fn as (val: T) => boolean\n\n return (function * () {\n if (res === true) {\n yield value\n }\n\n for (const entry of peekable) {\n if (func(entry)) {\n yield entry\n }\n }\n })()\n}\n\nexport default filter\n","/**\n * @packageDocumentation\n *\n * Convert one value from an (async)iterator into another.\n *\n * @example\n *\n * ```javascript\n * import map from 'it-map'\n *\n * // This can also be an iterator, generator, etc\n * const values = [0, 1, 2, 3, 4]\n *\n * const result = map(values, (val) => val++)\n *\n * console.info(result) // [1, 2, 3, 4, 5]\n * ```\n *\n * Async sources and transforms must be awaited:\n *\n * ```javascript\n * import map from 'it-map'\n *\n * const values = async function * () {\n * yield * [0, 1, 2, 3, 4]\n * }\n *\n * const result = await map(values(), async (val) => val++)\n *\n * console.info(result) // [1, 2, 3, 4, 5]\n * ```\n */\n\nimport peek from 'it-peekable'\n\nfunction isAsyncIterable <T> (thing: any): thing is AsyncIterable<T> {\n return thing[Symbol.asyncIterator] != null\n}\n\n/**\n * Takes an (async) iterable and returns one with each item mapped by the passed\n * function\n */\nfunction map <I, O> (source: Iterable<I>, func: (val: I) => Promise<O>): AsyncGenerator<O, void, undefined>\nfunction map <I, O> (source: Iterable<I>, func: (val: I) => O): Generator<O, void, undefined>\nfunction map <I, O> (source: AsyncIterable<I> | Iterable<I>, func: (val: I) => O | Promise<O>): AsyncGenerator<O, void, undefined>\nfunction map <I, O> (source: AsyncIterable<I> | Iterable<I>, func: (val: I) => O | Promise<O>): AsyncGenerator<O, void, undefined> | Generator<O, void, undefined> {\n if (isAsyncIterable(source)) {\n return (async function * () {\n for await (const val of source) {\n yield func(val)\n }\n })()\n }\n\n // if mapping function returns a promise we have to return an async generator\n const peekable = peek(source)\n const { value, done } = peekable.next()\n\n if (done === true) {\n return (function * () {}())\n }\n\n const res = func(value)\n\n // @ts-expect-error .then is not present on O\n if (typeof res.then === 'function') {\n return (async function * () {\n yield await res\n\n for await (const val of peekable) {\n yield func(val)\n }\n })()\n }\n\n const fn = func as (val: I) => O\n\n return (function * () {\n yield res as O\n\n for (const val of peekable) {\n yield fn(val)\n }\n })()\n}\n\nexport default map\n","export default function pDefer() {\n\tconst deferred = {};\n\n\tdeferred.promise = new Promise((resolve, reject) => {\n\t\tdeferred.resolve = resolve;\n\t\tdeferred.reject = reject;\n\t});\n\n\treturn deferred;\n}\n","/**\n * @packageDocumentation\n *\n * Takes an (async) iterable that emits promise-returning functions, invokes them in parallel up to the concurrency limit and emits the results as they become available, optionally in the same order as the input\n *\n * @example\n *\n * ```javascript\n * import parallel from 'it-parallel'\n * import all from 'it-all'\n * import delay from 'delay'\n *\n * // This can also be an iterator, async iterator, generator, etc\n * const input = [\n * async () => {\n * console.info('start 1')\n * await delay(500)\n *\n * console.info('end 1')\n * return 1\n * },\n * async () => {\n * console.info('start 2')\n * await delay(200)\n *\n * console.info('end 2')\n * return 2\n * },\n * async () => {\n * console.info('start 3')\n * await delay(100)\n *\n * console.info('end 3')\n * return 3\n * }\n * ]\n *\n * const result = await all(parallel(input, {\n * concurrency: 2\n * }))\n *\n * // output:\n * // start 1\n * // start 2\n * // end 2\n * // start 3\n * // end 3\n * // end 1\n *\n * console.info(result) // [2, 3, 1]\n * ```\n *\n * If order is important, pass `ordered: true` as an option:\n *\n * ```javascript\n * const result = await all(parallel(input, {\n * concurrency: 2,\n * ordered: true\n * }))\n *\n * // output:\n * // start 1\n * // start 2\n * // end 2\n * // start 3\n * // end 3\n * // end 1\n *\n * console.info(result) // [1, 2, 3]\n * ```\n */\n\nimport defer from 'p-defer'\n\ninterface Operation<T> {\n done: boolean\n ok: boolean\n err: Error\n value: T\n}\n\nconst CustomEvent = globalThis.CustomEvent ?? Event\n\nexport interface ParallelOptions {\n /**\n * How many jobs to execute in parallel (default: )\n */\n concurrency?: number\n ordered?: boolean\n}\n\n/**\n * Takes an (async) iterator that emits promise-returning functions,\n * invokes them in parallel and emits the results as they become available but\n * in the same order as the input\n */\nexport default async function * parallel <T> (source: Iterable<() => Promise<T>> | AsyncIterable<() => Promise<T>>, options: ParallelOptions = {}): AsyncGenerator<T, void, undefined> {\n let concurrency = options.concurrency ?? Infinity\n\n if (concurrency < 1) {\n concurrency = Infinity\n }\n\n const ordered = options.ordered == null ? false : options.ordered\n const emitter = new EventTarget()\n\n const ops: Array<Operation<T>> = []\n let slotAvailable = defer()\n let resultAvailable = defer()\n let sourceFinished = false\n let sourceErr: Error | undefined\n let opErred = false\n\n emitter.addEventListener('task-complete', () => {\n resultAvailable.resolve()\n })\n\n void Promise.resolve().then(async () => {\n try {\n for await (const task of source) {\n if (ops.length === concurrency) {\n slotAvailable = defer()\n await slotAvailable.promise\n }\n\n if (opErred) {\n break\n }\n\n const op: any = {\n done: false\n }\n ops.push(op)\n\n task()\n .then(result => {\n op.done = true\n op.ok = true\n op.value = result\n emitter.dispatchEvent(new CustomEvent('task-complete'))\n }, err => {\n op.done = true\n op.err = err\n emitter.dispatchEvent(new CustomEvent('task-complete'))\n })\n }\n\n sourceFinished = true\n emitter.dispatchEvent(new CustomEvent('task-complete'))\n } catch (err: any) {\n sourceErr = err\n emitter.dispatchEvent(new CustomEvent('task-complete'))\n }\n })\n\n function valuesAvailable (): boolean {\n if (ordered) {\n return ops[0]?.done\n }\n\n return Boolean(ops.find(op => op.done))\n }\n\n function * yieldOrderedValues (): Generator<T, void, unknown> {\n while ((ops.length > 0) && ops[0].done) {\n const op = ops[0]\n ops.shift()\n\n if (op.ok) {\n yield op.value\n } else {\n // allow the source to exit\n opErred = true\n slotAvailable.resolve()\n\n throw op.err\n }\n\n slotAvailable.resolve()\n }\n }\n\n function * yieldUnOrderedValues (): Generator<T, void, unknown> {\n // more values can become available while we wait for `yield`\n // to return control to this function\n while (valuesAvailable()) {\n for (let i = 0; i < ops.length; i++) {\n if (ops[i].done) {\n const op = ops[i]\n ops.splice(i, 1)\n i--\n\n if (op.ok) {\n yield op.value\n } else {\n opErred = true\n slotAvailable.resolve()\n\n throw op.err\n }\n\n slotAvailable.resolve()\n }\n }\n }\n }\n\n while (true) {\n if (!valuesAvailable()) {\n resultAvailable = defer()\n await resultAvailable.promise\n }\n\n if (sourceErr != null) {\n // the source threw an error, propagate it\n throw sourceErr\n }\n\n if (ordered) {\n yield * yieldOrderedValues()\n } else {\n yield * yieldUnOrderedValues()\n }\n\n if (sourceFinished && ops.length === 0) {\n // not waiting for any results and no more tasks so we are done\n break\n }\n }\n}\n","// ported from https://www.npmjs.com/package/fast-fifo\n\nexport interface Next<T> {\n done?: boolean\n error?: Error\n value?: T\n}\n\nclass FixedFIFO<T> {\n public buffer: Array<Next<T> | undefined>\n private readonly mask: number\n private top: number\n private btm: number\n public next: FixedFIFO<T> | null\n\n constructor (hwm: number) {\n if (!(hwm > 0) || ((hwm - 1) & hwm) !== 0) {\n throw new Error('Max size for a FixedFIFO should be a power of two')\n }\n\n this.buffer = new Array(hwm)\n this.mask = hwm - 1\n this.top = 0\n this.btm = 0\n this.next = null\n }\n\n push (data: Next<T>): boolean {\n if (this.buffer[this.top] !== undefined) {\n return false\n }\n\n this.buffer[this.top] = data\n this.top = (this.top + 1) & this.mask\n\n return true\n }\n\n shift (): Next<T> | undefined {\n const last = this.buffer[this.btm]\n\n if (last === undefined) {\n return undefined\n }\n\n this.buffer[this.btm] = undefined\n this.btm = (this.btm + 1) & this.mask\n return last\n }\n\n isEmpty (): boolean {\n return this.buffer[this.btm] === undefined\n }\n}\n\nexport interface FIFOOptions {\n /**\n * When the queue reaches this size, it will be split into head/tail parts\n */\n splitLimit?: number\n}\n\nexport class FIFO<T> {\n public size: number\n private readonly hwm: number\n private head: FixedFIFO<T>\n private tail: FixedFIFO<T>\n\n constructor (options: FIFOOptions = {}) {\n this.hwm = options.splitLimit ?? 16\n this.head = new FixedFIFO<T>(this.hwm)\n this.tail = this.head\n this.size = 0\n }\n\n calculateSize (obj: any): number {\n if (obj?.byteLength != null) {\n return obj.byteLength\n }\n\n return 1\n }\n\n push (val: Next<T>): void {\n if (val?.value != null) {\n this.size += this.calculateSize(val.value)\n }\n\n if (!this.head.push(val)) {\n const prev = this.head\n this.head = prev.next = new FixedFIFO<T>(2 * this.head.buffer.length)\n this.head.push(val)\n }\n }\n\n shift (): Next<T> | undefined {\n let val = this.tail.shift()\n\n if (val === undefined && (this.tail.next != null)) {\n const next = this.tail.next\n this.tail.next = null\n this.tail = next\n val = this.tail.shift()\n }\n\n if (val?.value != null) {\n this.size -= this.calculateSize(val.value)\n }\n\n return val\n }\n\n isEmpty (): boolean {\n return this.head.isEmpty()\n }\n}\n","/**\n * @packageDocumentation\n *\n * An iterable that you can push values into.\n *\n * @example\n *\n * ```js\n * import { pushable } from 'it-pushable'\n *\n * const source = pushable()\n *\n * setTimeout(() => source.push('hello'), 100)\n * setTimeout(() => source.push('world'), 200)\n * setTimeout(() => source.end(), 300)\n *\n * const start = Date.now()\n *\n * for await (const value of source) {\n * console.log(`got \"${value}\" after ${Date.now() - start}ms`)\n * }\n * console.log(`done after ${Date.now() - start}ms`)\n *\n * // Output:\n * // got \"hello\" after 105ms\n * // got \"world\" after 207ms\n * // done after 309ms\n * ```\n *\n * @example\n *\n * ```js\n * import { pushableV } from 'it-pushable'\n * import all from 'it-all'\n *\n * const source = pushableV()\n *\n * source.push(1)\n * source.push(2)\n * source.push(3)\n * source.end()\n *\n * console.info(await all(source))\n *\n * // Output:\n * // [ [1, 2, 3] ]\n * ```\n */\n\nimport deferred from 'p-defer'\nimport { FIFO, type Next } from './fifo.js'\n\nexport class AbortError extends Error {\n type: string\n code: string\n\n constructor (message?: string, code?: string) {\n super(message ?? 'The operation was aborted')\n this.type = 'aborted'\n this.code = code ?? 'ABORT_ERR'\n }\n}\n\nexport interface AbortOptions {\n signal?: AbortSignal\n}\n\ninterface BasePushable<T> {\n /**\n * End the iterable after all values in the buffer (if any) have been yielded. If an\n * error is passed the buffer is cleared immediately and the next iteration will\n * throw the passed error\n */\n end(err?: Error): this\n\n /**\n * Push a value into the iterable. Values are yielded from the iterable in the order\n * they are pushed. Values not yet consumed from the iterable are buffered.\n */\n push(value: T): this\n\n /**\n * Returns a promise that resolves when the underlying queue becomes empty (e.g.\n * this.readableLength === 0).\n *\n * If an AbortSignal is passed as an option and that signal aborts, it only\n * causes the returned promise to reject - it does not end the pushable.\n */\n onEmpty(options?: AbortOptions): Promise<void>\n\n /**\n * This property contains the number of bytes (or objects) in the queue ready to be read.\n *\n * If `objectMode` is true, this is the number of objects in the queue, if false it's the\n * total number of bytes in the queue.\n */\n readableLength: number\n}\n\n/**\n * An iterable that you can push values into.\n */\nexport interface Pushable<T, R = void, N = unknown> extends AsyncGenerator<T, R, N>, BasePushable<T> {}\n\n/**\n * Similar to `pushable`, except it yields multiple buffered chunks at a time. All values yielded from the iterable will be arrays.\n */\nexport interface PushableV<T, R = void, N = unknown> extends AsyncGenerator<T[], R, N>, BasePushable<T> {}\n\nexport interface Options {\n /**\n * A boolean value that means non-`Uint8Array`s will be passed to `.push`, default: `false`\n */\n objectMode?: boolean\n\n /**\n * A function called after *all* values have been yielded from the iterator (including\n * buffered values). In the case when the iterator is ended with an error it will be\n * passed the error as a parameter.\n */\n onEnd?(err?: Error): void\n}\n\nexport interface DoneResult { done: true }\nexport interface ValueResult<T> { done: false, value: T }\nexport type NextResult<T> = ValueResult<T> | DoneResult\n\ninterface getNext<T, V = T> { (buffer: FIFO<T>): NextResult<V> }\n\nexport interface ObjectPushableOptions extends Options {\n objectMode: true\n}\n\nexport interface BytePushableOptions extends Options {\n objectMode?: false\n}\n\n/**\n * Create a new async iterable. The values yielded from calls to `.next()`\n * or when used in a `for await of`loop are \"pushed\" into the iterable.\n * Returns an async iterable object with additional methods.\n */\nexport function pushable<T extends { byteLength: number } = Uint8Array> (options?: BytePushableOptions): Pushable<T>\nexport function pushable<T> (options: ObjectPushableOptions): Pushable<T>\nexport function pushable<T> (options: Options = {}): Pushable<T> {\n const getNext = (buffer: FIFO<T>): NextResult<T> => {\n const next: Next<T> | undefined = buffer.shift()\n\n if (next == null) {\n return { done: true }\n }\n\n if (next.error != null) {\n throw next.error\n }\n\n return {\n done: next.done === true,\n // @ts-expect-error if done is false, value will be present\n value: next.value\n }\n }\n\n return _pushable<T, T, Pushable<T>>(getNext, options)\n}\n\nexport function pushableV<T extends { byteLength: number } = Uint8Array> (options?: BytePushableOptions): PushableV<T>\nexport function pushableV<T> (options: ObjectPushableOptions): PushableV<T>\nexport function pushableV<T> (options: Options = {}): PushableV<T> {\n const getNext = (buffer: FIFO<T>): NextResult<T[]> => {\n let next: Next<T> | undefined\n const values: T[] = []\n\n while (!buffer.isEmpty()) {\n next = buffer.shift()\n\n if (next == null) {\n break\n }\n\n if (next.error != null) {\n throw next.error\n }\n\n if (next.done === false) {\n // @ts-expect-error if done is false value should be pushed\n values.push(next.value)\n }\n }\n\n if (next == null) {\n return { done: true }\n }\n\n return {\n done: next.done === true,\n value: values\n }\n }\n\n return _pushable<T, T[], PushableV<T>>(getNext, options)\n}\n\nfunction _pushable<PushType, ValueType, ReturnType> (getNext: getNext<PushType, ValueType>, options?: Options): ReturnType {\n options = options ?? {}\n let onEnd = options.onEnd\n let buffer = new FIFO<PushType>()\n let pushable: any\n let onNext: ((next: Next<PushType>) => ReturnType) | null\n let ended: boolean\n let drain = deferred()\n\n const waitNext = async (): Promise<NextResult<ValueType>> => {\n try {\n if (!buffer.isEmpty()) {\n return getNext(buffer)\n }\n\n if (ended) {\n return { done: true }\n }\n\n return await new Promise<NextResult<ValueType>>((resolve, reject) => {\n onNext = (next: Next<PushType>) => {\n onNext = null\n buffer.push(next)\n\n try {\n resolve(getNext(buffer))\n } catch (err) {\n reject(err)\n }\n\n return pushable\n }\n })\n } finally {\n if (buffer.isEmpty()) {\n // settle promise in the microtask queue to give consumers a chance to\n // await after calling .push\n queueMicrotask(() => {\n drain.resolve()\n drain = deferred()\n })\n }\n }\n }\n\n const bufferNext = (next: Next<PushType>): ReturnType => {\n if (onNext != null) {\n return onNext(next)\n }\n\n buffer.push(next)\n return pushable\n }\n\n const bufferError = (err: Error): ReturnType => {\n buffer = new FIFO()\n\n if (onNext != null) {\n return onNext({ error: err })\n }\n\n buffer.push({ error: err })\n return pushable\n }\n\n const push = (value: PushType): ReturnType => {\n if (ended) {\n return pushable\n }\n\n // @ts-expect-error `byteLength` is not declared on PushType\n if (options?.objectMode !== true && value?.byteLength == null) {\n throw new Error('objectMode was not true but tried to push non-Uint8Array value')\n }\n\n return bufferNext({ done: false, value })\n }\n const end = (err?: Error): ReturnType => {\n if (ended) return pushable\n ended = true\n\n return (err != null) ? bufferError(err) : bufferNext({ done: true })\n }\n const _return = (): DoneResult => {\n buffer = new FIFO()\n end()\n\n return { done: true }\n }\n const _throw = (err: Error): DoneResult => {\n end(err)\n\n return { done: true }\n }\n\n pushable = {\n [Symbol.asyncIterator] () { return this },\n next: waitNext,\n return: _return,\n throw: _throw,\n push,\n end,\n get readableLength (): number {\n return buffer.size\n },\n onEmpty: async (options?: AbortOptions) => {\n const signal = options?.signal\n signal?.throwIfAborted()\n\n if (buffer.isEmpty()) {\n return\n }\n\n let cancel: Promise<void> | undefined\n let listener: (() => void) | undefined\n\n if (signal != null) {\n cancel = new Promise((resolve, reject) => {\n listener = () => {\n reject(new AbortError())\n }\n\n signal.addEventListener('abort', listener)\n })\n }\n\n try {\n await Promise.race([\n drain.promise,\n cancel\n ])\n } finally {\n if (listener != null && signal != null) {\n signal?.removeEventListener('abort', listener)\n }\n }\n }\n }\n\n if (onEnd == null) {\n return pushable\n }\n\n const _pushable = pushable\n\n pushable = {\n [Symbol.asyncIterator] () { return this },\n next () {\n return _pushable.next()\n },\n throw (err: Error) {\n _pushable.throw(err)\n\n if (onEnd != null) {\n onEnd(err)\n onEnd = undefined\n }\n\n return { done: true }\n },\n return () {\n _pushable.return()\n\n if (onEnd != null) {\n onEnd()\n onEnd = undefined\n }\n\n return { done: true }\n },\n push,\n end (err: Error) {\n _pushable.end(err)\n\n if (onEnd != null) {\n onEnd(err)\n onEnd = undefined\n }\n\n return pushable\n },\n get readableLength () {\n return _pushable.readableLength\n },\n onEmpty: (opts?: AbortOptions) => {\n return _pushable.onEmpty(opts)\n }\n }\n\n return pushable\n}\n","/**\n * @packageDocumentation\n *\n * Merge several (async)iterables into one, yield values as they arrive.\n *\n * Nb. sources are iterated over in parallel so the order of emitted items is not guaranteed.\n *\n * @example\n *\n * ```javascript\n * import merge from 'it-merge'\n * import all from 'it-all'\n *\n * // This can also be an iterator, generator, etc\n * const values1 = [0, 1, 2, 3, 4]\n * const values2 = [5, 6, 7, 8, 9]\n *\n * const arr = all(merge(values1, values2))\n *\n * console.info(arr) // 0, 1, 2, 3, 4, 5, 6, 7, 8, 9\n * ```\n *\n * Async sources must be awaited:\n *\n * ```javascript\n * import merge from 'it-merge'\n * import all from 'it-all'\n *\n * // This can also be an iterator, async iterator, generator, etc\n * const values1 = async function * () {\n * yield * [0, 1, 2, 3, 4]\n * }\n * const values2 = async function * () {\n * yield * [5, 6, 7, 8, 9]\n * }\n *\n * const arr = await all(merge(values1(), values2()))\n *\n * console.info(arr) // 0, 1, 5, 6, 2, 3, 4, 7, 8, 9 <- nb. order is not guaranteed\n * ```\n */\n\nimport { pushable } from 'it-pushable'\n\nfunction isAsyncIterable <T> (thing: any): thing is AsyncIterable<T> {\n return thing[Symbol.asyncIterator] != null\n}\n\n/**\n * Treat one or more iterables as a single iterable.\n *\n * Nb. sources are iterated over in parallel so the\n * order of emitted items is not guaranteed.\n */\nfunction merge <T> (...sources: Array<Iterable<T>>): Generator<T, void, undefined>\nfunction merge <T> (...sources: Array<AsyncIterable<T> | Iterable<T>>): AsyncGenerator<T, void, undefined>\nfunction merge <T> (...sources: Array<AsyncIterable<T> | Iterable<T>>): AsyncGenerator<T, void, undefined> | Generator<T, void, undefined> {\n const syncSources: Array<Iterable<T>> = []\n\n for (const source of sources) {\n if (!isAsyncIterable(source)) {\n syncSources.push(source)\n }\n }\n\n if (syncSources.length === sources.length) {\n // all sources are synchronous\n return (function * () {\n for (const source of syncSources) {\n yield * source\n }\n })()\n }\n\n return (async function * () {\n const output = pushable<T>({\n objectMode: true\n })\n\n void Promise.resolve().then(async () => {\n try {\n await Promise.all(\n sources.map(async (source) => {\n for await (const item of source) {\n output.push(item)\n }\n })\n )\n\n output.end()\n } catch (err: any) {\n output.end(err)\n }\n })\n\n yield * output\n })()\n}\n\nexport default merge\n","import { pushable } from 'it-pushable'\nimport merge from 'it-merge'\nimport type { Duplex, Transform, Sink } from 'it-stream-types'\n\ninterface SourceFn<A = any> { (): A }\n\ntype PipeSource<A = any> =\n Iterable<A> |\n AsyncIterable<A> |\n SourceFn<A> |\n Duplex<A, any, any>\n\ntype PipeTransform<A = any, B = any> =\n Transform<A, B> |\n Duplex<B, A>\n\ntype PipeSink<A = any, B = any> =\n Sink<A, B> |\n Duplex<any, A, B>\n\ntype PipeOutput<A> =\n A extends Sink<any> ? ReturnType<A> :\n A extends Duplex<any, any, any> ? ReturnType<A['sink']> :\n never\n\n// single item pipe output includes pipe source types\ntype SingleItemPipeOutput<A> =\n A extends Iterable<any> ? A :\n A extends AsyncIterable<any> ? A :\n A extends SourceFn ? ReturnType<A> :\n A extends Duplex<any, any, any> ? A['source'] :\n PipeOutput<A>\n\ntype PipeFnInput<A> =\n A extends Iterable<any> ? A :\n A extends AsyncIterable<any> ? A :\n A extends SourceFn ? ReturnType<A> :\n A extends Transform<any, any> ? ReturnType<A> :\n A extends Duplex<any, any, any> ? A['source'] :\n never\n\n// one item, just a pass-through\nexport function pipe<\n A extends PipeSource\n> (\n source: A\n): SingleItemPipeOutput<A>\n\n// two items, source to sink\nexport function pipe<\n A extends PipeSource,\n B extends PipeSink<PipeFnInput<A>>\n> (\n source: A,\n sink: B\n): PipeOutput<B>\n\n// three items, source to sink with transform(s) in between\nexport function pipe<\n A extends PipeSource,\n B extends PipeTransform<PipeFnInput<A>>,\n C extends PipeSink<PipeFnInput<B>>\n> (\n source: A,\n transform1: B,\n sink: C\n): PipeOutput<C>\n\n// many items, source to sink with transform(s) in between\nexport function pipe<\n A extends PipeSource,\n B extends PipeTransform<PipeFnInput<A>>,\n C extends PipeTransform<PipeFnInput<B>>,\n D extends PipeSink<PipeFnInput<C>>\n> (\n source: A,\n transform1: B,\n transform2: C,\n sink: D\n): PipeOutput<D>\n\n// lots of items, source to sink with transform(s) in between\nexport function pipe<\n A extends PipeSource,\n B extends PipeTransform<PipeFnInput<A>>,\n C extends PipeTransform<PipeFnInput<B>>,\n D extends PipeTransform<PipeFnInput<C>>,\n E extends PipeSink<PipeFnInput<D>>\n> (\n source: A,\n transform1: B,\n transform2: C,\n transform3: D,\n sink: E\n): PipeOutput<E>\n\n// lots of items, source to sink with transform(s) in between\nexport function pipe<\n A extends PipeSource,\n B extends PipeTransform<PipeFnInput<A>>,\n C extends PipeTransform<PipeFnInput<B>>,\n D extends PipeTransform<PipeFnInput<C>>,\n E extends PipeTransform<PipeFnInput<D>>,\n F extends PipeSink<PipeFnInput<E>>\n> (\n source: A,\n transform1: B,\n transform2: C,\n transform3: D,\n transform4: E,\n sink: F\n): PipeOutput<F>\n\n// lots of items, source to sink with transform(s) in between\nexport function pipe<\n A extends PipeSource,\n B extends PipeTransform<PipeFnInput<A>>,\n C extends PipeTransform<PipeFnInput<B>>,\n D extends PipeTransform<PipeFnInput<C>>,\n E extends PipeTransform<PipeFnInput<D>>,\n F extends PipeTransform<PipeFnInput<E>>,\n G extends PipeSink<PipeFnInput<F>>\n> (\n source: A,\n transform1: B,\n transform2: C,\n transform3: D,\n transform4: E,\n transform5: F,\n sink: G\n): PipeOutput<G>\n\n// lots of items, source to sink with transform(s) in between\nexport function pipe<\n A extends PipeSource,\n B extends PipeTransform<PipeFnInput<A>>,\n C extends PipeTransform<PipeFnInput<B>>,\n D extends PipeTransform<PipeFnInput<C>>,\n E extends PipeTransform<PipeFnInput<D>>,\n F extends PipeTransform<PipeFnInput<E>>,\n G extends PipeTransform<PipeFnInput<F>>,\n H extends PipeSink<PipeFnInput<G>>\n> (\n source: A,\n transform1: B,\n transform2: C,\n transform3: D,\n transform4: E,\n transform5: F,\n transform6: G,\n sink: H\n): PipeOutput<H>\n\n// lots of items, source to sink with transform(s) in between\nexport function pipe<\n A extends PipeSource,\n B extends PipeTransform<PipeFnInput<A>>,\n C extends PipeTransform<PipeFnInput<B>>,\n D extends PipeTransform<PipeFnInput<C>>,\n E extends PipeTransform<PipeFnInput<D>>,\n F extends PipeTransform<PipeFnInput<E>>,\n G extends PipeTransform<PipeFnInput<F>>,\n H extends PipeTransform<PipeFnInput<G>>,\n I extends PipeSink<PipeFnInput<H>>\n> (\n source: A,\n transform1: B,\n transform2: C,\n transform3: D,\n transform4: E,\n transform5: F,\n transform6: G,\n transform7: H,\n sink: I\n): PipeOutput<I>\n\n// lots of items, source to sink with transform(s) in between\nexport function pipe<\n A extends PipeSource,\n B extends PipeTransform<PipeFnInput<A>>,\n C extends PipeTransform<PipeFnInput<B>>,\n D extends PipeTransform<PipeFnInput<C>>,\n E extends PipeTransform<PipeFnInput<D>>,\n F extends PipeTransform<PipeFnInput<E>>,\n G extends PipeTransform<PipeFnInput<F>>,\n H extends PipeTransform<PipeFnInput<G>>,\n I extends PipeTransform<PipeFnInput<H>>,\n J extends PipeSink<PipeFnInput<I>>\n> (\n source: A,\n transform1: B,\n transform2: C,\n transform3: D,\n transform4: E,\n transform5: F,\n transform6: G,\n transform7: H,\n transform8: I,\n sink: J\n): PipeOutput<J>\n\n// lots of items, source to sink with transform(s) in between\nexport function pipe<\n A extends PipeSource,\n B extends PipeTransform<PipeFnInput<A>>,\n C extends PipeTransform<PipeFnInput<B>>,\n D extends PipeTransform<PipeFnInput<C>>,\n E extends PipeTransform<PipeFnInput<D>>,\n F extends PipeTransform<PipeFnInput<E>>,\n G extends PipeTransform<PipeFnInput<F>>,\n H extends PipeTransform<PipeFnInput<G>>,\n I extends PipeTransform<PipeFnInput<H>>,\n J extends PipeTransform<PipeFnInput<I>>,\n K extends PipeSink<PipeFnInput<J>>\n> (\n source: A,\n transform1: B,\n transform2: C,\n transform3: D,\n transform4: E,\n transform5: F,\n transform6: G,\n transform7: H,\n transform8: I,\n transform9: J,\n sink: K\n): PipeOutput<K>\n\n// lots of items, source to sink with transform(s) in between\nexport function pipe<\n A extends PipeSource,\n B extends PipeTransform<PipeFnInput<A>>,\n C extends PipeTransform<PipeFnInput<B>>,\n D extends PipeTransform<PipeFnInput<C>>,\n E extends PipeTransform<PipeFnInput<D>>,\n F extends PipeTransform<PipeFnInput<E>>,\n G extends PipeTransform<PipeFnInput<F>>,\n H extends PipeTransform<PipeFnInput<G>>,\n I extends PipeTransform<PipeFnInput<H>>,\n J extends PipeTransform<PipeFnInput<I>>,\n K extends PipeTransform<PipeFnInput<J>>,\n L extends PipeSink<PipeFnInput<K>>\n> (\n source: A,\n transform1: B,\n transform2: C,\n transform3: D,\n transform4: E,\n transform5: F,\n transform6: G,\n transform7: H,\n transform8: I,\n transform9: J,\n transform10: K,\n sink: L\n): PipeOutput<L>\n\nexport function pipe (first: any, ...rest: any[]): any {\n if (first == null) {\n throw new Error('Empty pipeline')\n }\n\n // Duplex at start: wrap in function and return duplex source\n if (isDuplex(first)) {\n const duplex = first\n first = () => duplex.source\n // Iterable at start: wrap in function\n } else if (isIterable(first) || isAsyncIterable(first)) {\n const source = first\n first = () => source\n }\n\n const fns = [first, ...rest]\n\n if (fns.length > 1) {\n // Duplex at end: use duplex sink\n if (isDuplex(fns[fns.length - 1])) {\n fns[fns.length - 1] = fns[fns.length - 1].sink\n }\n }\n\n if (fns.length > 2) {\n // Duplex in the middle, consume source with duplex sink and return duplex source\n for (let i = 1; i < fns.length - 1; i++) {\n if (isDuplex(fns[i])) {\n fns[i] = duplexPipelineFn(fns[i])\n }\n }\n }\n\n return rawPipe(...fns)\n}\n\nexport const rawPipe = (...fns: any): any => {\n let res\n while (fns.length > 0) {\n res = fns.shift()(res)\n }\n return res\n}\n\nconst isAsyncIterable = (obj: any): obj is AsyncIterable<unknown> => {\n return obj?.[Symbol.asyncIterator] != null\n}\n\nconst isIterable = (obj: any): obj is Iterable<unknown> => {\n return obj?.[Symbol.iterator] != null\n}\n\nconst isDuplex = (obj: any): obj is Duplex => {\n if (obj == null) {\n return false\n }\n\n return obj.sink != null && obj.source != null\n}\n\nconst duplexPipelineFn = (duplex: Duplex<any, any, any>) => {\n return (source: any) => {\n const p = duplex.sink(source)\n\n if (p?.then != null) {\n const stream = pushable<any>({\n objectMode: true\n })\n p.then(() => {\n stream.end()\n }, (err: Error) => {\n stream.end(err)\n })\n\n let sourceWrap: () => Iterable<any> | AsyncIterable<any>\n const source = duplex.source\n\n if (isAsyncIterable(source)) {\n sourceWrap = async function * () {\n yield * source\n stream.end()\n }\n } else if (isIterable(source)) {\n sourceWrap = function * () {\n yield * source\n stream.end()\n }\n } else {\n throw new Error('Unknown duplex source type - must be Iterable or AsyncIterable')\n }\n\n return merge(stream, sourceWrap())\n }\n\n return duplex.source\n }\n}\n","import filter from 'it-filter'\nimport map from 'it-map'\nimport parallel from 'it-parallel'\nimport { pipe } from 'it-pipe'\nimport { CustomProgressEvent } from 'progress-events'\nimport type { ExporterOptions, ExportWalk, UnixfsV1DirectoryContent, UnixfsV1Resolver } from '../../../index.js'\n\nconst directoryContent: UnixfsV1Resolver = (cid, node, unixfs, path, resolve, depth, blockstore) => {\n async function * yieldDirectoryContent (options: ExporterOptions = {}): UnixfsV1DirectoryContent {\n const offset = options.offset ?? 0\n const length = options.length ?? node.Links.length\n const links = node.Links.slice(offset, length)\n\n options.onProgress?.(new CustomProgressEvent<ExportWalk>('unixfs:exporter:walk:directory', {\n cid\n }))\n\n yield * pipe(\n links,\n source => map(source, link => {\n return async () => {\n const linkName = link.Name ?? ''\n const linkPath = `${path}/${linkName}`\n const result = await resolve(link.Hash, linkName, linkPath, [], depth + 1, blockstore, options)\n return result.entry\n }\n }),\n source => parallel(source, {\n ordered: true,\n concurrency: options.blockReadConcurrency\n }),\n source => filter(source, entry => entry != null)\n )\n }\n\n return yieldDirectoryContent\n}\n\nexport default directoryContent\n","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n Events.prototype = Object.create(null);\n\n //\n // This hack is needed because the `__proto__` property is still inherited in\n // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n //\n if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n this.fn = fn;\n this.context = context;\n this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n if (typeof fn !== 'function') {\n throw new TypeError('The listener must be a function');\n }\n\n var listener = new EE(fn, context || emitter, once)\n , evt = prefix ? prefix + event : event;\n\n if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n else emitter._events[evt] = [emitter._events[evt], listener];\n\n return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n if (--emitter._eventsCount === 0) emitter._events = new Events();\n else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n this._events = new Events();\n this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n var names = []\n , events\n , name;\n\n if (this._eventsCount === 0) return names;\n\n for (name in (events = this._events)) {\n if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n }\n\n if (Object.getOwnPropertySymbols) {\n return names.concat(Object.getOwnPropertySymbols(events));\n }\n\n return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n var evt = prefix ? prefix + event : event\n , handlers = this._events[evt];\n\n if (!handlers) return [];\n if (handlers.fn) return [handlers.fn];\n\n for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n ee[i] = handlers[i].fn;\n }\n\n return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n var evt = prefix ? prefix + event : event\n , listeners = this._events[evt];\n\n if (!listeners) return 0;\n if (listeners.fn) return 1;\n return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return false;\n\n var listeners = this._events[evt]\n , len = arguments.length\n , args\n , i;\n\n if (listeners.fn) {\n if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n switch (len) {\n case 1: return listeners.fn.call(listeners.context), true;\n case 2: return listeners.fn.call(listeners.context, a1), true;\n case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n }\n\n for (i = 1, args = new Array(len -1); i < len; i++) {\n args[i - 1] = arguments[i];\n }\n\n listeners.fn.apply(listeners.context, args);\n } else {\n var length = listeners.length\n , j;\n\n for (i = 0; i < length; i++) {\n if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n switch (len) {\n case 1: listeners[i].fn.call(listeners[i].context); break;\n case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n default:\n if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n args[j - 1] = arguments[j];\n }\n\n listeners[i].fn.apply(listeners[i].context, args);\n }\n }\n }\n\n return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return this;\n if (!fn) {\n clearEvent(this, evt);\n return this;\n }\n\n var listeners = this._events[evt];\n\n if (listeners.fn) {\n if (\n listeners.fn === fn &&\n (!once || listeners.once) &&\n (!context || listeners.context === context)\n ) {\n clearEvent(this, evt);\n }\n } else {\n for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n if (\n listeners[i].fn !== fn ||\n (once && !listeners[i].once) ||\n (context && listeners[i].context !== context)\n ) {\n events.push(listeners[i]);\n }\n }\n\n //\n // Reset the array, or remove it completely if we have no more listeners.\n //\n if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n else clearEvent(this, evt);\n }\n\n return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n var evt;\n\n if (event) {\n evt = prefix ? prefix + event : event;\n if (this._events[evt]) clearEvent(this, evt);\n } else {\n this._events = new Events();\n this._eventsCount = 0;\n }\n\n return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n module.exports = EventEmitter;\n}\n","import EventEmitter from './index.js'\n\nexport { EventEmitter }\nexport default EventEmitter\n","export class TimeoutError extends Error {\n\tconstructor(message) {\n\t\tsuper(message);\n\t\tthis.name = 'TimeoutError';\n\t}\n}\n\n/**\nAn error to be thrown when the request is aborted by AbortController.\nDOMException is thrown instead of this Error when DOMException is available.\n*/\nexport class AbortError extends Error {\n\tconstructor(message) {\n\t\tsuper();\n\t\tthis.name = 'AbortError';\n\t\tthis.message = message;\n\t}\n}\n\n/**\nTODO: Remove AbortError and just throw DOMException when targeting Node 18.\n*/\nconst getDOMException = errorMessage => globalThis.DOMException === undefined\n\t? new AbortError(errorMessage)\n\t: new DOMException(errorMessage);\n\n/**\nTODO: Remove below function and just 'reject(signal.reason)' when targeting Node 18.\n*/\nconst getAbortedReason = signal => {\n\tconst reason = signal.reason === undefined\n\t\t? getDOMException('This operation was aborted.')\n\t\t: signal.reason;\n\n\treturn reason instanceof Error ? reason : getDOMException(reason);\n};\n\nexport default function pTimeout(promise, options) {\n\tconst {\n\t\tmilliseconds,\n\t\tfallback,\n\t\tmessage,\n\t\tcustomTimers = {setTimeout, clearTimeout},\n\t} = options;\n\n\tlet timer;\n\n\tconst wrappedPromise = new Promise((resolve, reject) => {\n\t\tif (typeof milliseconds !== 'number' || Math.sign(milliseconds) !== 1) {\n\t\t\tthrow new TypeError(`Expected \\`milliseconds\\` to be a positive number, got \\`${milliseconds}\\``);\n\t\t}\n\n\t\tif (options.signal) {\n\t\t\tconst {signal} = options;\n\t\t\tif (signal.aborted) {\n\t\t\t\treject(getAbortedReason(signal));\n\t\t\t}\n\n\t\t\tsignal.addEventListener('abort', () => {\n\t\t\t\treject(getAbortedReason(signal));\n\t\t\t});\n\t\t}\n\n\t\tif (milliseconds === Number.POSITIVE_INFINITY) {\n\t\t\tpromise.then(resolve, reject);\n\t\t\treturn;\n\t\t}\n\n\t\t// We create the error outside of `setTimeout` to preserve the stack trace.\n\t\tconst timeoutError = new TimeoutError();\n\n\t\ttimer = customTimers.setTimeout.call(undefined, () => {\n\t\t\tif (fallback) {\n\t\t\t\ttry {\n\t\t\t\t\tresolve(fallback());\n\t\t\t\t} catch (error) {\n\t\t\t\t\treject(error);\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (typeof promise.cancel === 'function') {\n\t\t\t\tpromise.cancel();\n\t\t\t}\n\n\t\t\tif (message === false) {\n\t\t\t\tresolve();\n\t\t\t} else if (message instanceof Error) {\n\t\t\t\treject(message);\n\t\t\t} else {\n\t\t\t\ttimeoutError.message = message ?? `Promise timed out after ${milliseconds} milliseconds`;\n\t\t\t\treject(timeoutError);\n\t\t\t}\n\t\t}, milliseconds);\n\n\t\t(async () => {\n\t\t\ttry {\n\t\t\t\tresolve(await promise);\n\t\t\t} catch (error) {\n\t\t\t\treject(error);\n\t\t\t}\n\t\t})();\n\t});\n\n\tconst cancelablePromise = wrappedPromise.finally(() => {\n\t\tcancelablePromise.clear();\n\t});\n\n\tcancelablePromise.clear = () => {\n\t\tcustomTimers.clearTimeout.call(undefined, timer);\n\t\ttimer = undefined;\n\t};\n\n\treturn cancelablePromise;\n}\n","// Port of lower_bound from https://en.cppreference.com/w/cpp/algorithm/lower_bound\n// Used to compute insertion index to keep queue sorted after insertion\nexport default function lowerBound(array, value, comparator) {\n let first = 0;\n let count = array.length;\n while (count > 0) {\n const step = Math.trunc(count / 2);\n let it = first + step;\n if (comparator(array[it], value) <= 0) {\n first = ++it;\n count -= step + 1;\n }\n else {\n count = step;\n }\n }\n return first;\n}\n","import lowerBound from './lower-bound.js';\nexport default class PriorityQueue {\n #queue = [];\n enqueue(run, options) {\n options = {\n priority: 0,\n ...options,\n };\n const element = {\n priority: options.priority,\n run,\n };\n if (this.size && this.#queue[this.size - 1].priority >= options.priority) {\n this.#queue.push(element);\n return;\n }\n const index = lowerBound(this.#queue, element, (a, b) => b.priority - a.priority);\n this.#queue.splice(index, 0, element);\n }\n dequeue() {\n const item = this.#queue.shift();\n return item?.run;\n }\n filter(options) {\n return this.#queue.filter((element) => element.priority === options.priority).map((element) => element.run);\n }\n get size() {\n return this.#queue.length;\n }\n}\n","import { EventEmitter } from 'eventemitter3';\nimport pTimeout, { TimeoutError } from 'p-timeout';\nimport PriorityQueue from './priority-queue.js';\n/**\nPromise queue with concurrency control.\n*/\nexport default class PQueue extends EventEmitter {\n #carryoverConcurrencyCount;\n #isIntervalIgnored;\n #intervalCount = 0;\n #intervalCap;\n #interval;\n #intervalEnd = 0;\n #intervalId;\n #timeoutId;\n #queue;\n #queueClass;\n #pending = 0;\n // The `!` is needed because of https://github.com/microsoft/TypeScript/issues/32194\n #concurrency;\n #isPaused;\n #throwOnTimeout;\n /**\n Per-operation timeout in milliseconds. Operations fulfill once `timeout` elapses if they haven't already.\n\n Applies to each future operation.\n */\n timeout;\n // TODO: The `throwOnTimeout` option should affect the return types of `add()` and `addAll()`\n constructor(options) {\n super();\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n options = {\n carryoverConcurrencyCount: false,\n intervalCap: Number.POSITIVE_INFINITY,\n interval: 0,\n concurrency: Number.POSITIVE_INFINITY,\n autoStart: true,\n queueClass: PriorityQueue,\n ...options,\n };\n if (!(typeof options.intervalCap === 'number' && options.intervalCap >= 1)) {\n throw new TypeError(`Expected \\`intervalCap\\` to be a number from 1 and up, got \\`${options.intervalCap?.toString() ?? ''}\\` (${typeof options.intervalCap})`);\n }\n if (options.interval === undefined || !(Number.isFinite(options.interval) && options.interval >= 0)) {\n throw new TypeError(`Expected \\`interval\\` to be a finite number >= 0, got \\`${options.interval?.toString() ?? ''}\\` (${typeof options.interval})`);\n }\n this.#carryoverConcurrencyCount = options.carryoverConcurrencyCount;\n this.#isIntervalIgnored = options.intervalCap === Number.POSITIVE_INFINITY || options.interval === 0;\n this.#intervalCap = options.intervalCap;\n this.#interval = options.interval;\n this.#queue = new options.queueClass();\n this.#queueClass = options.queueClass;\n this.concurrency = options.concurrency;\n this.timeout = options.timeout;\n this.#throwOnTimeout = options.throwOnTimeout === true;\n this.#isPaused = options.autoStart === false;\n }\n get #doesIntervalAllowAnother() {\n return this.#isIntervalIgnored || this.#intervalCount < this.#intervalCap;\n }\n get #doesConcurrentAllowAnother() {\n return this.#pending < this.#concurrency;\n }\n #next() {\n this.#pending--;\n this.#tryToStartAnother();\n this.emit('next');\n }\n #onResumeInterval() {\n this.#onInterval();\n this.#initializeIntervalIfNeeded();\n this.#timeoutId = undefined;\n }\n get #isIntervalPaused() {\n const now = Date.now();\n if (this.#intervalId === undefined) {\n const delay = this.#intervalEnd - now;\n if (delay < 0) {\n // Act as the interval was done\n // We don't need to resume it here because it will be resumed on line 160\n this.#intervalCount = (this.#carryoverConcurrencyCount) ? this.#pending : 0;\n }\n else {\n // Act as the interval is pending\n if (this.#timeoutId === undefined) {\n this.#timeoutId = setTimeout(() => {\n this.#onResumeInterval();\n }, delay);\n }\n return true;\n }\n }\n return false;\n }\n #tryToStartAnother() {\n if (this.#queue.size === 0) {\n // We can clear the interval (\"pause\")\n // Because we can redo it later (\"resume\")\n if (this.#intervalId) {\n clearInterval(this.#intervalId);\n }\n this.#intervalId = undefined;\n this.emit('empty');\n if (this.#pending === 0) {\n this.emit('idle');\n }\n return false;\n }\n if (!this.#isPaused) {\n const canInitializeInterval = !this.#isIntervalPaused;\n if (this.#doesIntervalAllowAnother && this.#doesConcurrentAllowAnother) {\n const job = this.#queue.dequeue();\n if (!job) {\n return false;\n }\n this.emit('active');\n job();\n if (canInitializeInterval) {\n this.#initializeIntervalIfNeeded();\n }\n return true;\n }\n }\n return false;\n }\n #initializeIntervalIfNeeded() {\n if (this.#isIntervalIgnored || this.#intervalId !== undefined) {\n return;\n }\n this.#intervalId = setInterval(() => {\n this.#onInterval();\n }, this.#interval);\n this.#intervalEnd = Date.now() + this.#interval;\n }\n #onInterval() {\n if (this.#intervalCount === 0 && this.#pending === 0 && this.#intervalId) {\n clearInterval(this.#intervalId);\n this.#intervalId = undefined;\n }\n this.#intervalCount = this.#carryoverConcurrencyCount ? this.#pending : 0;\n this.#processQueue();\n }\n /**\n Executes all queued functions until it reaches the limit.\n */\n #processQueue() {\n // eslint-disable-next-line no-empty\n while (this.#tryToStartAnother()) { }\n }\n get concurrency() {\n return this.#concurrency;\n }\n set concurrency(newConcurrency) {\n if (!(typeof newConcurrency === 'number' && newConcurrency >= 1)) {\n throw new TypeError(`Expected \\`concurrency\\` to be a number from 1 and up, got \\`${newConcurrency}\\` (${typeof newConcurrency})`);\n }\n this.#concurrency = newConcurrency;\n this.#processQueue();\n }\n async #throwOnAbort(signal) {\n return new Promise((_resolve, reject) => {\n signal.addEventListener('abort', () => {\n reject(signal.reason);\n }, { once: true });\n });\n }\n async add(function_, options = {}) {\n options = {\n timeout: this.timeout,\n throwOnTimeout: this.#throwOnTimeout,\n ...options,\n };\n return new Promise((resolve, reject) => {\n this.#queue.enqueue(async () => {\n this.#pending++;\n this.#intervalCount++;\n try {\n options.signal?.throwIfAborted();\n let operation = function_({ signal: options.signal });\n if (options.timeout) {\n operation = pTimeout(Promise.resolve(operation), { milliseconds: options.timeout });\n }\n if (options.signal) {\n operation = Promise.race([operation, this.#throwOnAbort(options.signal)]);\n }\n const result = await operation;\n resolve(result);\n this.emit('completed', result);\n }\n catch (error) {\n if (error instanceof TimeoutError && !options.throwOnTimeout) {\n resolve();\n return;\n }\n reject(error);\n this.emit('error', error);\n }\n finally {\n this.#next();\n }\n }, options);\n this.emit('add');\n this.#tryToStartAnother();\n });\n }\n async addAll(functions, options) {\n return Promise.all(functions.map(async (function_) => this.add(function_, options)));\n }\n /**\n Start (or resume) executing enqueued tasks within concurrency limit. No need to call this if queue is not paused (via `options.autoStart = false` or by `.pause()` method.)\n */\n start() {\n if (!this.#isPaused) {\n return this;\n }\n this.#isPaused = false;\n this.#processQueue();\n return this;\n }\n /**\n Put queue execution on hold.\n */\n pause() {\n this.#isPaused = true;\n }\n /**\n Clear the queue.\n */\n clear() {\n this.#queue = new this.#queueClass();\n }\n /**\n Can be called multiple times. Useful if you for example add additional items at a later time.\n\n @returns A promise that settles when the queue becomes empty.\n */\n async onEmpty() {\n // Instantly resolve if the queue is empty\n if (this.#queue.size === 0) {\n return;\n }\n await this.#onEvent('empty');\n }\n /**\n @returns A promise that settles when the queue size is less than the given limit: `queue.size < limit`.\n\n If you want to avoid having the queue grow beyond a certain size you can `await queue.onSizeLessThan()` before adding a new item.\n\n Note that this only limits the number of items waiting to start. There could still be up to `concurrency` jobs already running that this call does not include in its calculation.\n */\n async onSizeLessThan(limit) {\n // Instantly resolve if the queue is empty.\n if (this.#queue.size < limit) {\n return;\n }\n await this.#onEvent('next', () => this.#queue.size < limit);\n }\n /**\n The difference with `.onEmpty` is that `.onIdle` guarantees that all work from the queue has finished. `.onEmpty` merely signals that the queue is empty, but it could mean that some promises haven't completed yet.\n\n @returns A promise that settles when the queue becomes empty, and all promises have completed; `queue.size === 0 && queue.pending === 0`.\n */\n async onIdle() {\n // Instantly resolve if none pending and if nothing else is queued\n if (this.#pending === 0 && this.#queue.size === 0) {\n return;\n }\n await this.#onEvent('idle');\n }\n async #onEvent(event, filter) {\n return new Promise(resolve => {\n const listener = () => {\n if (filter && !filter()) {\n return;\n }\n this.off(event, listener);\n resolve();\n };\n this.on(event, listener);\n });\n }\n /**\n Size of the queue, the number of queued items waiting to run.\n */\n get size() {\n return this.#queue.size;\n }\n /**\n Size of the queue, filtered by the given options.\n\n For example, this can be used to find the number of items remaining in the queue with a specific priority level.\n */\n sizeBy(options) {\n // eslint-disable-next-line unicorn/no-array-callback-reference\n return this.#queue.filter(options).length;\n }\n /**\n Number of running items (no longer in the queue).\n */\n get pending() {\n return this.#pending;\n }\n /**\n Whether the queue is currently paused.\n */\n get isPaused() {\n return this.#isPaused;\n }\n}\n","import * as dagPb from '@ipld/dag-pb'\nimport errCode from 'err-code'\nimport { UnixFS } from 'ipfs-unixfs'\nimport map from 'it-map'\nimport parallel from 'it-parallel'\nimport { pipe } from 'it-pipe'\nimport { type Pushable, pushable } from 'it-pushable'\nimport * as raw from 'multiformats/codecs/raw'\nimport PQueue from 'p-queue'\nimport { CustomProgressEvent } from 'progress-events'\nimport extractDataFromBlock from '../../../utils/extract-data-from-block.js'\nimport validateOffsetAndLength from '../../../utils/validate-offset-and-length.js'\nimport type { ExporterOptions, UnixfsV1FileContent, UnixfsV1Resolver, ReadableStorage, ExportProgress, ExportWalk } from '../../../index.js'\n\nasync function walkDAG (blockstore: ReadableStorage, node: dagPb.PBNode | Uint8Array, queue: Pushable<Uint8Array>, streamPosition: bigint, start: bigint, end: bigint, options: ExporterOptions): Promise<void> {\n // a `raw` node\n if (node instanceof Uint8Array) {\n const buf = extractDataFromBlock(node, streamPosition, start, end)\n\n queue.push(buf)\n\n return\n }\n\n if (node.Data == null) {\n throw errCode(new Error('no data in PBNode'), 'ERR_NOT_UNIXFS')\n }\n\n let file: UnixFS\n\n try {\n file = UnixFS.unmarshal(node.Data)\n } catch (err: any) {\n throw errCode(err, 'ERR_NOT_UNIXFS')\n }\n\n // might be a unixfs `raw` node or have data on intermediate nodes\n if (file.data != null) {\n const data = file.data\n const buf = extractDataFromBlock(data, streamPosition, start, end)\n\n queue.push(buf)\n\n streamPosition += BigInt(buf.byteLength)\n }\n\n const childOps: Array<{ link: dagPb.PBLink, blockStart: bigint }> = []\n\n if (node.Links.length !== file.blockSizes.length) {\n throw errCode(new Error('Inconsistent block sizes and dag links'), 'ERR_NOT_UNIXFS')\n }\n\n for (let i = 0; i < node.Links.length; i++) {\n const childLink = node.Links[i]\n const childStart = streamPosition // inclusive\n const childEnd = childStart + file.blockSizes[i] // exclusive\n\n if ((start >= childStart && start < childEnd) || // child has offset byte\n (end >= childStart && end <= childEnd) || // child has end byte\n (start < childStart && end > childEnd)) { // child is between offset and end bytes\n childOps.push({\n link: childLink,\n blockStart: streamPosition\n })\n }\n\n streamPosition = childEnd\n\n if (streamPosition > end) {\n break\n }\n }\n\n await pipe(\n childOps,\n (source) => map(source, (op) => {\n return async () => {\n const block = await blockstore.get(op.link.Hash, options)\n\n return {\n ...op,\n block\n }\n }\n }),\n (source) => parallel(source, {\n ordered: true,\n concurrency: options.blockReadConcurrency\n }),\n async (source) => {\n for await (const { link, block, blockStart } of source) {\n let child: dagPb.PBNode | Uint8Array\n switch (link.Hash.code) {\n case dagPb.code:\n child = dagPb.decode(block)\n break\n case raw.code:\n child = block\n break\n default:\n queue.end(errCode(new Error(`Unsupported codec: ${link.Hash.code}`), 'ERR_NOT_UNIXFS'))\n return\n }\n\n // create a queue for this child - we use a queue instead of recursion\n // to avoid overflowing the stack\n const childQueue = new PQueue({\n concurrency: 1\n })\n // if any of the child jobs error, end the read queue with the error\n childQueue.on('error', error => {\n queue.end(error)\n })\n\n // if the job rejects the 'error' event will be emitted on the child queue\n void childQueue.add(async () => {\n options.onProgress?.(new CustomProgressEvent<ExportWalk>('unixfs:exporter:walk:file', {\n cid: link.Hash\n }))\n\n await walkDAG(blockstore, child, queue, blockStart, start, end, options)\n })\n\n // wait for this child to complete before moving on to the next\n await childQueue.onIdle()\n }\n }\n )\n\n if (streamPosition >= end) {\n queue.end()\n }\n}\n\nconst fileContent: UnixfsV1Resolver = (cid, node, unixfs, path, resolve, depth, blockstore) => {\n async function * yieldFileContent (options: ExporterOptions = {}): UnixfsV1FileContent {\n const fileSize = unixfs.fileSize()\n\n if (fileSize === undefined) {\n throw new Error('File was a directory')\n }\n\n const {\n start,\n end\n } = validateOffsetAndLength(fileSize, options.offset, options.length)\n\n if (end === 0n) {\n return\n }\n\n let read = 0n\n const wanted = end - start\n const queue = pushable()\n\n options.onProgress?.(new CustomProgressEvent<ExportWalk>('unixfs:exporter:walk:file', {\n cid\n }))\n\n void walkDAG(blockstore, node, queue, 0n, start, end, options)\n .catch(err => {\n queue.end(err)\n })\n\n for await (const buf of queue) {\n if (buf == null) {\n continue\n }\n\n read += BigInt(buf.byteLength)\n\n if (read > wanted) {\n queue.end()\n throw errCode(new Error('Read too many bytes - the file size reported by the UnixFS data in the root node may be incorrect'), 'ERR_OVER_READ')\n }\n\n if (read === wanted) {\n queue.end()\n }\n\n options.onProgress?.(new CustomProgressEvent<ExportProgress>('unixfs:exporter:progress:unixfs:file', {\n bytesRead: read,\n totalBytes: wanted,\n fileSize\n }))\n\n yield buf\n }\n\n if (read < wanted) {\n throw errCode(new Error('Traversed entire DAG but did not read enough bytes'), 'ERR_UNDER_READ')\n }\n }\n\n return yieldFileContent\n}\n\nexport default fileContent\n","import { decode, type PBNode } from '@ipld/dag-pb'\nimport errCode from 'err-code'\nimport { UnixFS } from 'ipfs-unixfs'\nimport map from 'it-map'\nimport parallel from 'it-parallel'\nimport { pipe } from 'it-pipe'\nimport { CustomProgressEvent } from 'progress-events'\nimport type { ExporterOptions, Resolve, UnixfsV1DirectoryContent, UnixfsV1Resolver, ReadableStorage, ExportWalk } from '../../../index.js'\n\nconst hamtShardedDirectoryContent: UnixfsV1Resolver = (cid, node, unixfs, path, resolve, depth, blockstore) => {\n function yieldHamtDirectoryContent (options: ExporterOptions = {}): UnixfsV1DirectoryContent {\n options.onProgress?.(new CustomProgressEvent<ExportWalk>('unixfs:exporter:walk:hamt-sharded-directory', {\n cid\n }))\n\n return listDirectory(node, path, resolve, depth, blockstore, options)\n }\n\n return yieldHamtDirectoryContent\n}\n\nasync function * listDirectory (node: PBNode, path: string, resolve: Resolve, depth: number, blockstore: ReadableStorage, options: ExporterOptions): UnixfsV1DirectoryContent {\n const links = node.Links\n\n if (node.Data == null) {\n throw errCode(new Error('no data in PBNode'), 'ERR_NOT_UNIXFS')\n }\n\n let dir: UnixFS\n try {\n dir = UnixFS.unmarshal(node.Data)\n } catch (err: any) {\n throw errCode(err, 'ERR_NOT_UNIXFS')\n }\n\n if (dir.fanout == null) {\n throw errCode(new Error('missing fanout'), 'ERR_NOT_UNIXFS')\n }\n\n const padLength = (dir.fanout - 1n).toString(16).length\n\n const results = pipe(\n links,\n source => map(source, link => {\n return async () => {\n const name = link.Name != null ? link.Name.substring(padLength) : null\n\n if (name != null && name !== '') {\n const result = await resolve(link.Hash, name, `${path}/${name}`, [], depth + 1, blockstore, options)\n\n return { entries: result.entry == null ? [] : [result.entry] }\n } else {\n // descend into subshard\n const block = await blockstore.get(link.Hash, options)\n node = decode(block)\n\n options.onProgress?.(new CustomProgressEvent<ExportWalk>('unixfs:exporter:walk:hamt-sharded-directory', {\n cid: link.Hash\n }))\n\n return { entries: listDirectory(node, path, resolve, depth, blockstore, options) }\n }\n }\n }),\n source => parallel(source, {\n ordered: true,\n concurrency: options.blockReadConcurrency\n })\n )\n\n for await (const { entries } of results) {\n yield * entries\n }\n}\n\nexport default hamtShardedDirectoryContent\n","import { decode, type PBNode } from '@ipld/dag-pb'\nimport errCode from 'err-code'\nimport { UnixFS } from 'ipfs-unixfs'\nimport findShardCid from '../../utils/find-cid-in-shard.js'\nimport contentDirectory from './content/directory.js'\nimport contentFile from './content/file.js'\nimport contentHamtShardedDirectory from './content/hamt-sharded-directory.js'\nimport type { Resolver, UnixfsV1Resolver } from '../../index.js'\nimport type { CID } from 'multiformats/cid'\n\nconst findLinkCid = (node: PBNode, name: string): CID | undefined => {\n const link = node.Links.find(link => link.Name === name)\n\n return link?.Hash\n}\n\nconst contentExporters: Record<string, UnixfsV1Resolver> = {\n raw: contentFile,\n file: contentFile,\n directory: contentDirectory,\n 'hamt-sharded-directory': contentHamtShardedDirectory,\n metadata: (cid, node, unixfs, path, resolve, depth, blockstore) => {\n return () => []\n },\n symlink: (cid, node, unixfs, path, resolve, depth, blockstore) => {\n return () => []\n }\n}\n\n// @ts-expect-error types are wrong\nconst unixFsResolver: Resolver = async (cid, name, path, toResolve, resolve, depth, blockstore, options) => {\n const block = await blockstore.get(cid, options)\n const node = decode(block)\n let unixfs\n let next\n\n if (name == null) {\n name = cid.toString()\n }\n\n if (node.Data == null) {\n throw errCode(new Error('no data in PBNode'), 'ERR_NOT_UNIXFS')\n }\n\n try {\n unixfs = UnixFS.unmarshal(node.Data)\n } catch (err: any) {\n // non-UnixFS dag-pb node? It could happen.\n throw errCode(err, 'ERR_NOT_UNIXFS')\n }\n\n if (path == null) {\n path = name\n }\n\n if (toResolve.length > 0) {\n let linkCid\n\n if (unixfs?.type === 'hamt-sharded-directory') {\n // special case - unixfs v1 hamt shards\n linkCid = await findShardCid(node, toResolve[0], blockstore)\n } else {\n linkCid = findLinkCid(node, toResolve[0])\n }\n\n if (linkCid == null) {\n throw errCode(new Error('file does not exist'), 'ERR_NOT_FOUND')\n }\n\n // remove the path component we have resolved\n const nextName = toResolve.shift()\n const nextPath = `${path}/${nextName}`\n\n next = {\n cid: linkCid,\n toResolve,\n name: nextName ?? '',\n path: nextPath\n }\n }\n\n const content = contentExporters[unixfs.type](cid, node, unixfs, path, resolve, depth, blockstore)\n\n if (content == null) {\n throw errCode(new Error('could not find content exporter'), 'ERR_NOT_FOUND')\n }\n\n if (unixfs.isDirectory()) {\n return {\n entry: {\n type: 'directory',\n name,\n path,\n cid,\n content,\n unixfs,\n depth,\n node,\n size: unixfs.fileSize()\n },\n next\n }\n }\n\n return {\n entry: {\n type: 'file',\n name,\n path,\n cid,\n content,\n unixfs,\n depth,\n node,\n size: unixfs.fileSize()\n },\n next\n }\n}\n\nexport default unixFsResolver\n","import * as dagCbor from '@ipld/dag-cbor'\nimport * as dagJson from '@ipld/dag-json'\nimport * as dagPb from '@ipld/dag-pb'\nimport errCode from 'err-code'\nimport * as json from 'multiformats/codecs/json'\nimport * as raw from 'multiformats/codecs/raw'\nimport { identity } from 'multiformats/hashes/identity'\nimport dagCborResolver from './dag-cbor.js'\nimport dagJsonResolver from './dag-json.js'\nimport identifyResolver from './identity.js'\nimport jsonResolver from './json.js'\nimport rawResolver from './raw.js'\nimport dagPbResolver from './unixfs-v1/index.js'\nimport type { Resolve, Resolver } from '../index.js'\n\nconst resolvers: Record<number, Resolver> = {\n [dagPb.code]: dagPbResolver,\n [raw.code]: rawResolver,\n [dagCbor.code]: dagCborResolver,\n [dagJson.code]: dagJsonResolver,\n [identity.code]: identifyResolver,\n [json.code]: jsonResolver\n}\n\nconst resolve: Resolve = async (cid, name, path, toResolve, depth, blockstore, options) => {\n const resolver = resolvers[cid.code]\n\n if (resolver == null) {\n throw errCode(new Error(`No resolver for code ${cid.code}`), 'ERR_NO_RESOLVER')\n }\n\n return resolver(cid, name, path, toResolve, resolve, depth, blockstore, options)\n}\n\nexport default resolve\n","/**\n * @packageDocumentation\n *\n * The UnixFS Exporter provides a means to read DAGs from a blockstore given a CID.\n *\n * @example\n *\n * ```js\n * // import a file and export it again\n * import { importer } from 'ipfs-unixfs-importer'\n * import { exporter } from 'ipfs-unixfs-exporter'\n * import { MemoryBlockstore } from 'blockstore-core/memory'\n *\n * // Should contain the blocks we are trying to export\n * const blockstore = new MemoryBlockstore()\n * const files = []\n *\n * for await (const file of importer([{\n * path: '/foo/bar.txt',\n * content: new Uint8Array([0, 1, 2, 3])\n * }], blockstore)) {\n * files.push(file)\n * }\n *\n * console.info(files[0].cid) // Qmbaz\n *\n * const entry = await exporter(files[0].cid, blockstore)\n *\n * console.info(entry.cid) // Qmqux\n * console.info(entry.path) // Qmbaz/foo/bar.txt\n * console.info(entry.name) // bar.txt\n * console.info(entry.unixfs.fileSize()) // 4\n *\n * // stream content from unixfs node\n * const size = entry.unixfs.fileSize()\n * const bytes = new Uint8Array(size)\n * let offset = 0\n *\n * for await (const buf of entry.content()) {\n * bytes.set(buf, offset)\n * offset += chunk.length\n * }\n *\n * console.info(bytes) // 0, 1, 2, 3\n * ```\n */\n\nimport errCode from 'err-code'\nimport last from 'it-last'\nimport { CID } from 'multiformats/cid'\nimport resolve from './resolvers/index.js'\nimport type { PBNode } from '@ipld/dag-pb'\nimport type { Bucket } from 'hamt-sharding'\nimport type { Blockstore } from 'interface-blockstore'\nimport type { UnixFS } from 'ipfs-unixfs'\nimport type { ProgressOptions, ProgressEvent } from 'progress-events'\n\nexport interface ExportProgress {\n /**\n * How many bytes of the file have been read\n */\n bytesRead: bigint\n\n /**\n * How many bytes of the file will be read - n.b. this may be\n * smaller than `fileSize` if `offset`/`length` have been\n * specified\n */\n totalBytes: bigint\n\n /**\n * The size of the file being read - n.b. this may be\n * larger than `total` if `offset`/`length` has been\n * specified\n */\n fileSize: bigint\n}\n\nexport interface ExportWalk {\n cid: CID\n}\n\n/**\n * Progress events emitted by the exporter\n */\nexport type ExporterProgressEvents =\n ProgressEvent<'unixfs:exporter:progress:unixfs:file', ExportProgress> |\n ProgressEvent<'unixfs:exporter:progress:unixfs:raw', ExportProgress> |\n ProgressEvent<'unixfs:exporter:progress:raw', ExportProgress> |\n ProgressEvent<'unixfs:exporter:progress:identity', ExportProgress> |\n ProgressEvent<'unixfs:exporter:walk:file', ExportWalk> |\n ProgressEvent<'unixfs:exporter:walk:directory', ExportWalk> |\n ProgressEvent<'unixfs:exporter:walk:hamt-sharded-directory', ExportWalk> |\n ProgressEvent<'unixfs:exporter:walk:raw', ExportWalk>\n\nexport interface ExporterOptions extends ProgressOptions<ExporterProgressEvents> {\n /**\n * An optional offset to start reading at.\n *\n * If the CID resolves to a file this will be a byte offset within that file,\n * otherwise if it's a directory it will be a directory entry offset within\n * the directory listing. (default: undefined)\n */\n offset?: number\n\n /**\n * An optional length to read.\n *\n * If the CID resolves to a file this will be the number of bytes read from\n * the file, otherwise if it's a directory it will be the number of directory\n * entries read from the directory listing. (default: undefined)\n */\n length?: number\n\n /**\n * This signal can be used to abort any long-lived operations such as fetching\n * blocks from the network. (default: undefined)\n */\n signal?: AbortSignal\n\n /**\n * When a DAG layer is encountered, all child nodes are loaded in parallel but\n * processed as they arrive. This allows us to load sibling nodes in advance\n * of yielding their bytes. Pass a value here to control the number of blocks\n * loaded in parallel. If a strict depth-first traversal is required, this\n * value should be set to `1`, otherwise the traversal order will tend to\n * resemble a breadth-first fan-out and yield a have stable ordering.\n * (default: undefined)\n */\n blockReadConcurrency?: number\n}\n\nexport interface Exportable<T> {\n /**\n * A disambiguator to allow TypeScript to work out the type of the entry.\n *\n * @example\n *\n * ```TypeScript\n * if (entry.type === 'file') {\n * // access UnixFSFile properties safely\n * }\n *\n * if (entry.type === 'directory') {\n * // access UnixFSDirectory properties safely\n * }\n * ```\n */\n type: 'file' | 'directory' | 'object' | 'raw' | 'identity'\n\n /**\n * The name of the entry\n */\n name: string\n\n /**\n * The path of the entry within the DAG in which it was encountered\n */\n path: string\n\n /**\n * The CID of the entry\n */\n cid: CID\n\n /**\n * How far down the DAG the entry is\n */\n depth: number\n\n /**\n * The size of the entry\n */\n size: bigint\n\n /**\n * @example File content\n *\n * When `entry` is a file or a `raw` node, `offset` and/or `length` arguments can be passed to `entry.content()` to return slices of data:\n *\n * ```javascript\n * const length = 5\n * const data = new Uint8Array(length)\n * let offset = 0\n *\n * for await (const chunk of entry.content({\n * offset: 0,\n * length\n * })) {\n * data.set(chunk, offset)\n * offset += chunk.length\n * }\n *\n * // `data` contains the first 5 bytes of the file\n * return data\n * ```\n *\n * @example Directory content\n *\n * If `entry` is a directory, passing `offset` and/or `length` to `entry.content()` will limit the number of files returned from the directory.\n *\n * ```javascript\n * const entries = []\n *\n * for await (const entry of dir.content({\n * offset: 0,\n * length: 5\n * })) {\n * entries.push(entry)\n * }\n *\n * // `entries` contains the first 5 files/directories in the directory\n * ```\n */\n content(options?: ExporterOptions): AsyncGenerator<T, void, unknown>\n}\n\n/**\n * If the entry is a file, `entry.content()` returns an async iterator that yields one or more Uint8Arrays containing the file content:\n *\n * ```javascript\n * if (entry.type === 'file') {\n * for await (const chunk of entry.content()) {\n * // chunk is a Buffer\n * }\n * }\n * ```\n */\nexport interface UnixFSFile extends Exportable<Uint8Array> {\n type: 'file'\n unixfs: UnixFS\n node: PBNode\n}\n\n/**\n * If the entry is a directory, `entry.content()` returns further `entry` objects:\n *\n * ```javascript\n * if (entry.type === 'directory') {\n * for await (const entry of dir.content()) {\n * console.info(entry.name)\n * }\n * }\n * ```\n */\nexport interface UnixFSDirectory extends Exportable<UnixFSEntry> {\n type: 'directory'\n unixfs: UnixFS\n node: PBNode\n}\n\n/**\n * Entries with a `dag-cbor` or `dag-json` codec {@link CID} return JavaScript object entries\n */\nexport interface ObjectNode extends Exportable<any> {\n type: 'object'\n node: Uint8Array\n}\n\n/**\n * Entries with a `raw` codec {@link CID} return raw entries.\n *\n * `entry.content()` returns an async iterator that yields a buffer containing the node content:\n *\n * ```javascript\n * for await (const chunk of entry.content()) {\n * // chunk is a Buffer\n * }\n * ```\n *\n * Unless you an options object containing `offset` and `length` keys as an argument to `entry.content()`, `chunk` will be equal to `entry.node`.\n */\nexport interface RawNode extends Exportable<Uint8Array> {\n type: 'raw'\n node: Uint8Array\n}\n\n/**\n * Entries with a `identity` codec {@link CID} return identity entries.\n *\n * These are entries where the data payload is stored in the CID itself,\n * otherwise they are identical to {@link RawNode}s.\n */\nexport interface IdentityNode extends Exportable<Uint8Array> {\n type: 'identity'\n node: Uint8Array\n}\n\n/**\n * A UnixFSEntry is a representation of the types of node that can be\n * encountered in a DAG.\n */\nexport type UnixFSEntry = UnixFSFile | UnixFSDirectory | ObjectNode | RawNode | IdentityNode\n\nexport interface NextResult {\n cid: CID\n name: string\n path: string\n toResolve: string[]\n}\n\nexport interface ResolveResult {\n entry: UnixFSEntry\n next?: NextResult\n}\n\nexport interface Resolve { (cid: CID, name: string, path: string, toResolve: string[], depth: number, blockstore: ReadableStorage, options: ExporterOptions): Promise<ResolveResult> }\nexport interface Resolver { (cid: CID, name: string, path: string, toResolve: string[], resolve: Resolve, depth: number, blockstore: ReadableStorage, options: ExporterOptions): Promise<ResolveResult> }\n\nexport type UnixfsV1FileContent = AsyncIterable<Uint8Array> | Iterable<Uint8Array>\nexport type UnixfsV1DirectoryContent = AsyncIterable<UnixFSEntry> | Iterable<UnixFSEntry>\nexport type UnixfsV1Content = UnixfsV1FileContent | UnixfsV1DirectoryContent\nexport interface UnixfsV1Resolver { (cid: CID, node: PBNode, unixfs: UnixFS, path: string, resolve: Resolve, depth: number, blockstore: ReadableStorage): (options: ExporterOptions) => UnixfsV1Content }\n\nexport interface ShardTraversalContext {\n hamtDepth: number\n rootBucket: Bucket<boolean>\n lastBucket: Bucket<boolean>\n}\n\n/**\n * A subset of the {@link Blockstore} interface that just contains the get\n * method.\n */\nexport type ReadableStorage = Pick<Blockstore, 'get'>\n\nconst toPathComponents = (path: string = ''): string[] => {\n // split on / unless escaped with \\\n return (path\n .trim()\n .match(/([^\\\\^/]|\\\\\\/)+/g) ?? [])\n .filter(Boolean)\n}\n\nconst cidAndRest = (path: string | Uint8Array | CID): { cid: CID, toResolve: string[] } => {\n if (path instanceof Uint8Array) {\n return {\n cid: CID.decode(path),\n toResolve: []\n }\n }\n\n const cid = CID.asCID(path)\n if (cid != null) {\n return {\n cid,\n toResolve: []\n }\n }\n\n if (typeof path === 'string') {\n if (path.indexOf('/ipfs/') === 0) {\n path = path.substring(6)\n }\n\n const output = toPathComponents(path)\n\n return {\n cid: CID.parse(output[0]),\n toResolve: output.slice(1)\n }\n }\n\n throw errCode(new Error(`Unknown path type ${path}`), 'ERR_BAD_PATH')\n}\n\n/**\n * Returns an async iterator that yields entries for all segments in a path\n *\n * @example\n *\n * ```javascript\n * import { walkPath } from 'ipfs-unixfs-exporter'\n *\n * const entries = []\n *\n * for await (const entry of walkPath('Qmfoo/foo/bar/baz.txt', blockstore)) {\n * entries.push(entry)\n * }\n *\n * // entries contains 4x `entry` objects\n * ```\n */\nexport async function * walkPath (path: string | CID, blockstore: ReadableStorage, options: ExporterOptions = {}): AsyncGenerator<UnixFSEntry, void, any> {\n let {\n cid,\n toResolve\n } = cidAndRest(path)\n let name = cid.toString()\n let entryPath = name\n const startingDepth = toResolve.length\n\n while (true) {\n const result = await resolve(cid, name, entryPath, toResolve, startingDepth, blockstore, options)\n\n if (result.entry == null && result.next == null) {\n throw errCode(new Error(`Could not resolve ${path}`), 'ERR_NOT_FOUND')\n }\n\n if (result.entry != null) {\n yield result.entry\n }\n\n if (result.next == null) {\n return\n }\n\n // resolve further parts\n toResolve = result.next.toResolve\n cid = result.next.cid\n name = result.next.name\n entryPath = result.next.path\n }\n}\n\n/**\n * Uses the given blockstore instance to fetch an IPFS node by a CID or path.\n *\n * Returns a {@link Promise} which resolves to a {@link UnixFSEntry}.\n *\n * @example\n *\n * ```typescript\n * import { exporter } from 'ipfs-unixfs-exporter'\n * import { CID } from 'multiformats/cid'\n *\n * const cid = CID.parse('QmFoo')\n *\n * const entry = await exporter(cid, blockstore, {\n * signal: AbortSignal.timeout(50000)\n * })\n *\n * if (entry.type === 'file') {\n * for await (const chunk of entry.content()) {\n * // chunk is a Uint8Array\n * }\n * }\n * ```\n */\nexport async function exporter (path: string | CID, blockstore: ReadableStorage, options: ExporterOptions = {}): Promise<UnixFSEntry> {\n const result = await last(walkPath(path, blockstore, options))\n\n if (result == null) {\n throw errCode(new Error(`Could not resolve ${path}`), 'ERR_NOT_FOUND')\n }\n\n return result\n}\n\n/**\n * Returns an async iterator that yields all entries beneath a given CID or IPFS\n * path, as well as the containing directory.\n *\n * @example\n *\n * ```typescript\n * import { recursive } from 'ipfs-unixfs-exporter'\n *\n * const entries = []\n *\n * for await (const child of recursive('Qmfoo/foo/bar', blockstore)) {\n * entries.push(entry)\n * }\n *\n * // entries contains all children of the `Qmfoo/foo/bar` directory and it's children\n * ```\n */\nexport async function * recursive (path: string | CID, blockstore: ReadableStorage, options: ExporterOptions = {}): AsyncGenerator<UnixFSEntry, void, any> {\n const node = await exporter(path, blockstore, options)\n\n if (node == null) {\n return\n }\n\n yield node\n\n if (node.type === 'directory') {\n for await (const child of recurse(node, options)) {\n yield child\n }\n }\n\n async function * recurse (node: UnixFSDirectory, options: ExporterOptions): AsyncGenerator<UnixFSEntry, void, any> {\n for await (const file of node.content(options)) {\n yield file\n\n if (file instanceof Uint8Array) {\n continue\n }\n\n if (file.type === 'directory') {\n yield * recurse(file, options)\n }\n }\n }\n}\n","import * as UnixFS from \"@ipld/unixfs\";\nimport * as raw from \"multiformats/codecs/raw\";\nimport { withMaxChunkSize } from \"@ipld/unixfs/file/chunker/fixed\";\nimport { withWidth } from \"@ipld/unixfs/file/layout/balanced\";\n\nimport type { View } from \"@ipld/unixfs\";\nimport { DocFileMeta } from \"../types.js\";\n\nimport { exporter, ReadableStorage } from \"ipfs-unixfs-exporter\";\nimport { BlobLike, AnyLink, AnyBlock } from \"../blockstore/index.js\";\n\nconst queuingStrategy = UnixFS.withCapacity();\n\nconst settings = UnixFS.configure({\n fileChunkEncoder: raw,\n smallFileEncoder: raw,\n chunker: withMaxChunkSize(1024 * 1024),\n fileLayout: withWidth(1024),\n});\n\nasync function collect<T>(collectable: ReadableStream<T>): Promise<T[]> {\n const chunks: T[] = [];\n await collectable.pipeTo(\n new WritableStream({\n write(chunk) {\n chunks.push(chunk);\n },\n }),\n );\n return chunks;\n}\n\nexport async function encodeFile(blob: BlobLike): Promise<{ cid: AnyLink; blocks: AnyBlock[] }> {\n const readable = createFileEncoderStream(blob);\n const blocks = await collect(readable);\n return { cid: blocks.at(-1).cid, blocks };\n}\n\nexport async function decodeFile(blocks: unknown, cid: AnyLink, meta: DocFileMeta): Promise<File> {\n const entry = await exporter(cid.toString(), blocks as ReadableStorage, { length: meta.size });\n const chunks = [];\n for await (const chunk of entry.content()) {\n chunks.push(chunk);\n }\n return new File(chunks, entry.name, { type: meta.type, lastModified: 0 });\n}\n\nfunction createFileEncoderStream(blob: BlobLike) {\n const { readable, writable } = new TransformStream({}, queuingStrategy);\n const unixfsWriter = UnixFS.createWriter({ writable, settings });\n const fileBuilder = new UnixFSFileBuilder(\"\", blob);\n void (async () => {\n await fileBuilder.finalize(unixfsWriter);\n await unixfsWriter.close();\n })();\n return readable;\n}\n\nclass UnixFSFileBuilder {\n #file;\n readonly name: string;\n constructor(name: string, file: BlobLike) {\n this.name = name;\n this.#file = file;\n }\n\n async finalize(writer: View) {\n const unixfsFileWriter = UnixFS.createFileWriter(writer);\n await this.#file.stream().pipeTo(\n new WritableStream({\n async write(chunk) {\n await unixfsFileWriter.write(chunk as Uint8Array);\n },\n }),\n );\n return await unixfsFileWriter.close();\n }\n}\n","export const FILESTORE_VERSION = \"v0.19-file\";\n","export const INDEXDB_VERSION = \"v0.19-indexdb\";\n","export const SQLITE_VERSION = \"v0.19-sqlite\";\n","export * from \"./sys-container.js\";\nexport * from \"./data-dir.js\";\nexport * from \"./store-file-utils.js\";\n\nexport * as sql from \"./store-sql/index.js\";\nexport * as crypto from \"./crypto.js\";\nexport * as files from \"./files.js\";\n\nexport { FILESTORE_VERSION } from \"./store-file-version.js\";\nexport { INDEXDB_VERSION } from \"./store-indexdb-version.js\";\nexport { SQLITE_VERSION } from \"./store-sql/v0.19-sqlite/version.js\";\n","import { Logger, LoggerImpl, IsLogger, Result, ResolveOnce } from \"@adviser/cement\";\nimport { SysContainer } from \"./runtime\";\nimport { uuidv7 } from \"uuidv7\";\n\nexport type { Logger };\n\nconst globalLogger: Logger = new LoggerImpl();\n\nexport interface LoggerOpts {\n readonly logger?: Logger;\n}\n\nconst registerFP_DEBUG = new ResolveOnce();\n\nexport function ensureLogger(\n optsOrLogger: Partial<LoggerOpts> | Logger,\n componentName: string,\n ctx?: Record<string, unknown>,\n): Logger {\n // if (!opts?.logger) {\n // throw new Error(\"logger is required\");\n // }\n let logger = globalLogger;\n if (IsLogger(optsOrLogger)) {\n logger = optsOrLogger;\n } else if (optsOrLogger && IsLogger(optsOrLogger.logger)) {\n logger = optsOrLogger.logger;\n }\n const cLogger = logger.With().Module(componentName); //.Str(\"this\", uuidv7());\n const debug: string[] = [];\n if (ctx) {\n if (\"debug\" in ctx) {\n if (typeof ctx.debug === \"string\" && ctx.debug.length > 0) {\n debug.push(ctx.debug);\n } else {\n debug.push(componentName);\n }\n delete ctx.debug;\n }\n if (\"this\" in ctx) {\n cLogger.Str(\"this\", uuidv7());\n delete ctx.this;\n }\n for (const [key, value] of Object.entries(ctx)) {\n switch (typeof value) {\n case \"string\":\n cLogger.Str(key, value);\n break;\n case \"number\":\n cLogger.Uint64(key, value);\n break;\n default:\n if (value instanceof Date) {\n cLogger.Str(key, value.toISOString());\n } else if (value instanceof URL) {\n cLogger.Str(key, value.toString());\n } else if (typeof value === \"function\") {\n cLogger.Ref(key, value);\n } else {\n cLogger.Any(key, value);\n }\n break;\n }\n }\n }\n registerFP_DEBUG\n .once(async () => {\n // console.log(\"registerFP_DEBUG\", SysContainer.env)\n SysContainer.env.onSet((key, value) => {\n // console.log(\"FP_DEBUG\", key, value, debug)\n if (value) {\n logger.SetDebug(value);\n }\n }, \"FP_DEBUG\");\n })\n .finally(() => {\n /* do nothing */\n });\n\n if (debug.length > 0) {\n logger.SetDebug(debug);\n }\n const out = cLogger.Logger();\n // out.Debug().Msg(\"logger ready\");\n return out;\n}\n\nexport type Joiner = (...toJoin: string[]) => string;\n\nexport function getStore(url: URL, logger: Logger, joiner: Joiner): string {\n let result = url.searchParams.get(\"store\");\n if (!result) throw logger.Error().Str(\"url\", url.toString()).Msg(`store not found`).AsError();\n if (url.searchParams.has(\"index\")) {\n result = joiner(url.searchParams.get(\"index\") || \"idx\", result);\n }\n return result;\n}\n\nexport function getKey(url: URL, logger: Logger): string {\n const result = url.searchParams.get(\"key\");\n if (!result) throw logger.Error().Str(\"url\", url.toString()).Msg(`key not found`).AsError();\n return result;\n}\n\nexport function getName(url: URL, logger: Logger): string {\n let result = url.searchParams.get(\"name\");\n if (!result) {\n result = SysContainer.dirname(url.pathname);\n if (result.length === 0) {\n throw logger.Error().Str(\"url\", url.toString()).Msg(`name not found`).AsError();\n }\n }\n return result;\n}\n\nexport function exception2Result<T = void>(fn: () => Promise<T>): Promise<Result<T>> {\n return fn()\n .then((value) => Result.Ok(value))\n .catch((e) => Result.Err(e));\n}\n\nexport async function exceptionWrapper<T, E extends Error>(fn: () => Promise<Result<T, E>>): Promise<Result<T, E>> {\n return fn().catch((e) => Result.Err(e));\n}\n","import { Result } from \"@adviser/cement\";\n\nexport interface GatewayOpts {\n readonly gateway: Gateway;\n}\n\nexport class NotFoundError extends Error {\n readonly code = \"ENOENT\";\n}\n\nexport function isNotFoundError(e: Error | Result<unknown> | unknown): e is NotFoundError {\n if (Result.Is(e)) {\n if (e.isOk()) return false;\n e = e.Err();\n }\n if ((e as NotFoundError).code === \"ENOENT\") return true;\n return false;\n}\n\nexport type GetResult = Result<Uint8Array, NotFoundError | Error>;\nexport type VoidResult = Result<void>;\n\nexport interface Gateway {\n // all the methods never throw!\n // an error is reported as a Result\n buildUrl(baseUrl: URL, key: string): Promise<Result<URL>>;\n // start updates URL --> hate this side effect\n start(baseUrl: URL): Promise<VoidResult>;\n close(baseUrl: URL): Promise<VoidResult>;\n destroy(baseUrl: URL): Promise<VoidResult>;\n put(url: URL, body: Uint8Array): Promise<VoidResult>;\n // get could return a NotFoundError if the key is not found\n get(url: URL): Promise<GetResult>;\n delete(url: URL): Promise<VoidResult>;\n}\n","const instanceOfAny = (object, constructors) => constructors.some((c) => object instanceof c);\n\nlet idbProxyableTypes;\nlet cursorAdvanceMethods;\n// This is a function to prevent it throwing up in node environments.\nfunction getIdbProxyableTypes() {\n return (idbProxyableTypes ||\n (idbProxyableTypes = [\n IDBDatabase,\n IDBObjectStore,\n IDBIndex,\n IDBCursor,\n IDBTransaction,\n ]));\n}\n// This is a function to prevent it throwing up in node environments.\nfunction getCursorAdvanceMethods() {\n return (cursorAdvanceMethods ||\n (cursorAdvanceMethods = [\n IDBCursor.prototype.advance,\n IDBCursor.prototype.continue,\n IDBCursor.prototype.continuePrimaryKey,\n ]));\n}\nconst transactionDoneMap = new WeakMap();\nconst transformCache = new WeakMap();\nconst reverseTransformCache = new WeakMap();\nfunction promisifyRequest(request) {\n const promise = new Promise((resolve, reject) => {\n const unlisten = () => {\n request.removeEventListener('success', success);\n request.removeEventListener('error', error);\n };\n const success = () => {\n resolve(wrap(request.result));\n unlisten();\n };\n const error = () => {\n reject(request.error);\n unlisten();\n };\n request.addEventListener('success', success);\n request.addEventListener('error', error);\n });\n // This mapping exists in reverseTransformCache but doesn't doesn't exist in transformCache. This\n // is because we create many promises from a single IDBRequest.\n reverseTransformCache.set(promise, request);\n return promise;\n}\nfunction cacheDonePromiseForTransaction(tx) {\n // Early bail if we've already created a done promise for this transaction.\n if (transactionDoneMap.has(tx))\n return;\n const done = new Promise((resolve, reject) => {\n const unlisten = () => {\n tx.removeEventListener('complete', complete);\n tx.removeEventListener('error', error);\n tx.removeEventListener('abort', error);\n };\n const complete = () => {\n resolve();\n unlisten();\n };\n const error = () => {\n reject(tx.error || new DOMException('AbortError', 'AbortError'));\n unlisten();\n };\n tx.addEventListener('complete', complete);\n tx.addEventListener('error', error);\n tx.addEventListener('abort', error);\n });\n // Cache it for later retrieval.\n transactionDoneMap.set(tx, done);\n}\nlet idbProxyTraps = {\n get(target, prop, receiver) {\n if (target instanceof IDBTransaction) {\n // Special handling for transaction.done.\n if (prop === 'done')\n return transactionDoneMap.get(target);\n // Make tx.store return the only store in the transaction, or undefined if there are many.\n if (prop === 'store') {\n return receiver.objectStoreNames[1]\n ? undefined\n : receiver.objectStore(receiver.objectStoreNames[0]);\n }\n }\n // Else transform whatever we get back.\n return wrap(target[prop]);\n },\n set(target, prop, value) {\n target[prop] = value;\n return true;\n },\n has(target, prop) {\n if (target instanceof IDBTransaction &&\n (prop === 'done' || prop === 'store')) {\n return true;\n }\n return prop in target;\n },\n};\nfunction replaceTraps(callback) {\n idbProxyTraps = callback(idbProxyTraps);\n}\nfunction wrapFunction(func) {\n // Due to expected object equality (which is enforced by the caching in `wrap`), we\n // only create one new func per func.\n // Cursor methods are special, as the behaviour is a little more different to standard IDB. In\n // IDB, you advance the cursor and wait for a new 'success' on the IDBRequest that gave you the\n // cursor. It's kinda like a promise that can resolve with many values. That doesn't make sense\n // with real promises, so each advance methods returns a new promise for the cursor object, or\n // undefined if the end of the cursor has been reached.\n if (getCursorAdvanceMethods().includes(func)) {\n return function (...args) {\n // Calling the original function with the proxy as 'this' causes ILLEGAL INVOCATION, so we use\n // the original object.\n func.apply(unwrap(this), args);\n return wrap(this.request);\n };\n }\n return function (...args) {\n // Calling the original function with the proxy as 'this' causes ILLEGAL INVOCATION, so we use\n // the original object.\n return wrap(func.apply(unwrap(this), args));\n };\n}\nfunction transformCachableValue(value) {\n if (typeof value === 'function')\n return wrapFunction(value);\n // This doesn't return, it just creates a 'done' promise for the transaction,\n // which is later returned for transaction.done (see idbObjectHandler).\n if (value instanceof IDBTransaction)\n cacheDonePromiseForTransaction(value);\n if (instanceOfAny(value, getIdbProxyableTypes()))\n return new Proxy(value, idbProxyTraps);\n // Return the same value back if we're not going to transform it.\n return value;\n}\nfunction wrap(value) {\n // We sometimes generate multiple promises from a single IDBRequest (eg when cursoring), because\n // IDB is weird and a single IDBRequest can yield many responses, so these can't be cached.\n if (value instanceof IDBRequest)\n return promisifyRequest(value);\n // If we've already transformed this value before, reuse the transformed value.\n // This is faster, but it also provides object equality.\n if (transformCache.has(value))\n return transformCache.get(value);\n const newValue = transformCachableValue(value);\n // Not all types are transformed.\n // These may be primitive types, so they can't be WeakMap keys.\n if (newValue !== value) {\n transformCache.set(value, newValue);\n reverseTransformCache.set(newValue, value);\n }\n return newValue;\n}\nconst unwrap = (value) => reverseTransformCache.get(value);\n\n/**\n * Open a database.\n *\n * @param name Name of the database.\n * @param version Schema version.\n * @param callbacks Additional callbacks.\n */\nfunction openDB(name, version, { blocked, upgrade, blocking, terminated } = {}) {\n const request = indexedDB.open(name, version);\n const openPromise = wrap(request);\n if (upgrade) {\n request.addEventListener('upgradeneeded', (event) => {\n upgrade(wrap(request.result), event.oldVersion, event.newVersion, wrap(request.transaction), event);\n });\n }\n if (blocked) {\n request.addEventListener('blocked', (event) => blocked(\n // Casting due to https://github.com/microsoft/TypeScript-DOM-lib-generator/pull/1405\n event.oldVersion, event.newVersion, event));\n }\n openPromise\n .then((db) => {\n if (terminated)\n db.addEventListener('close', () => terminated());\n if (blocking) {\n db.addEventListener('versionchange', (event) => blocking(event.oldVersion, event.newVersion, event));\n }\n })\n .catch(() => { });\n return openPromise;\n}\n/**\n * Delete a database.\n *\n * @param name Name of the database.\n */\nfunction deleteDB(name, { blocked } = {}) {\n const request = indexedDB.deleteDatabase(name);\n if (blocked) {\n request.addEventListener('blocked', (event) => blocked(\n // Casting due to https://github.com/microsoft/TypeScript-DOM-lib-generator/pull/1405\n event.oldVersion, event));\n }\n return wrap(request).then(() => undefined);\n}\n\nconst readMethods = ['get', 'getKey', 'getAll', 'getAllKeys', 'count'];\nconst writeMethods = ['put', 'add', 'delete', 'clear'];\nconst cachedMethods = new Map();\nfunction getMethod(target, prop) {\n if (!(target instanceof IDBDatabase &&\n !(prop in target) &&\n typeof prop === 'string')) {\n return;\n }\n if (cachedMethods.get(prop))\n return cachedMethods.get(prop);\n const targetFuncName = prop.replace(/FromIndex$/, '');\n const useIndex = prop !== targetFuncName;\n const isWrite = writeMethods.includes(targetFuncName);\n if (\n // Bail if the target doesn't exist on the target. Eg, getAll isn't in Edge.\n !(targetFuncName in (useIndex ? IDBIndex : IDBObjectStore).prototype) ||\n !(isWrite || readMethods.includes(targetFuncName))) {\n return;\n }\n const method = async function (storeName, ...args) {\n // isWrite ? 'readwrite' : undefined gzipps better, but fails in Edge :(\n const tx = this.transaction(storeName, isWrite ? 'readwrite' : 'readonly');\n let target = tx.store;\n if (useIndex)\n target = target.index(args.shift());\n // Must reject if op rejects.\n // If it's a write operation, must reject if tx.done rejects.\n // Must reject with op rejection first.\n // Must resolve with op value.\n // Must handle both promises (no unhandled rejections)\n return (await Promise.all([\n target[targetFuncName](...args),\n isWrite && tx.done,\n ]))[0];\n };\n cachedMethods.set(prop, method);\n return method;\n}\nreplaceTraps((oldTraps) => ({\n ...oldTraps,\n get: (target, prop, receiver) => getMethod(target, prop) || oldTraps.get(target, prop, receiver),\n has: (target, prop) => !!getMethod(target, prop) || oldTraps.has(target, prop),\n}));\n\nconst advanceMethodProps = ['continue', 'continuePrimaryKey', 'advance'];\nconst methodMap = {};\nconst advanceResults = new WeakMap();\nconst ittrProxiedCursorToOriginalProxy = new WeakMap();\nconst cursorIteratorTraps = {\n get(target, prop) {\n if (!advanceMethodProps.includes(prop))\n return target[prop];\n let cachedFunc = methodMap[prop];\n if (!cachedFunc) {\n cachedFunc = methodMap[prop] = function (...args) {\n advanceResults.set(this, ittrProxiedCursorToOriginalProxy.get(this)[prop](...args));\n };\n }\n return cachedFunc;\n },\n};\nasync function* iterate(...args) {\n // tslint:disable-next-line:no-this-assignment\n let cursor = this;\n if (!(cursor instanceof IDBCursor)) {\n cursor = await cursor.openCursor(...args);\n }\n if (!cursor)\n return;\n cursor = cursor;\n const proxiedCursor = new Proxy(cursor, cursorIteratorTraps);\n ittrProxiedCursorToOriginalProxy.set(proxiedCursor, cursor);\n // Map this double-proxy back to the original, so other cursor methods work.\n reverseTransformCache.set(proxiedCursor, unwrap(cursor));\n while (cursor) {\n yield proxiedCursor;\n // If one of the advancing methods was not called, call continue().\n cursor = await (advanceResults.get(proxiedCursor) || cursor.continue());\n advanceResults.delete(proxiedCursor);\n }\n}\nfunction isIteratorProp(target, prop) {\n return ((prop === Symbol.asyncIterator &&\n instanceOfAny(target, [IDBIndex, IDBObjectStore, IDBCursor])) ||\n (prop === 'iterate' && instanceOfAny(target, [IDBIndex, IDBObjectStore])));\n}\nreplaceTraps((oldTraps) => ({\n ...oldTraps,\n get(target, prop, receiver) {\n if (isIteratorProp(target, prop))\n return iterate;\n return oldTraps.get(target, prop, receiver);\n },\n has(target, prop) {\n return isIteratorProp(target, prop) || oldTraps.has(target, prop);\n },\n}));\n\nexport { deleteDB, openDB, unwrap, wrap };\n","import { openDB, IDBPDatabase } from \"idb\";\nimport { KeyedResolvOnce, Logger, Result } from \"@adviser/cement\";\n\nimport { TestStore } from \"../blockstore/types.js\";\nimport { INDEXDB_VERSION } from \"./store-indexdb-version.js\";\nimport { ensureLogger, exception2Result, exceptionWrapper, getKey, getStore } from \"../utils.js\";\nimport { Gateway, NotFoundError } from \"../blockstore/gateway.js\";\nimport { SysContainer } from \"./sys-container.js\";\n\nfunction ensureVersion(url: URL): URL {\n const ret = new URL(url.toString());\n ret.searchParams.set(\"version\", url.searchParams.get(\"version\") || INDEXDB_VERSION);\n return ret;\n}\n\nexport function guardVersion(url: URL): Result<URL> {\n if (!url.searchParams.has(\"version\")) {\n return Result.Err(`missing version: ${url.toString()}`);\n }\n return Result.Ok(url);\n}\n\nconst onceIndexDB = new KeyedResolvOnce<{\n readonly db: IDBPDatabase<unknown>;\n readonly dbName: DbName;\n readonly version: string;\n}>();\n\nfunction sanitzeKey(key: string | string[]): string | string[] {\n if (key.length === 1) {\n key = key[0];\n }\n return key;\n}\n\nasync function connectIdb(url: URL, logger: Logger): Promise<IDBPDatabase<unknown>> {\n const dbName = getIndexDBName(url, logger); // `fp.${this.STORAGE_VERSION}.${this.name}`;\n // const urlStr = url.toString().replace(/\\?.*$/, \"\");\n // console.log(`get:${this.id}`);\n // console.log(`connectIdb:pre:`, dbName, url.toString());\n const once = await onceIndexDB.get(dbName.fullDb).once(async () => {\n // console.log(`connectIdb:once:`, dbName, url.toString());\n const db = await openDB(dbName.fullDb, 1, {\n upgrade(db) {\n // console.log('upgrade:', dbName);\n [\"version\", \"data\", \"wal\", \"meta\", \"idx.data\", \"idx.wal\", \"idx.meta\"].map((store) => {\n db.createObjectStore(store, {\n autoIncrement: false,\n });\n });\n },\n });\n const found = await db.get(\"version\", \"version\");\n const version = url.searchParams.get(\"version\") || INDEXDB_VERSION;\n if (!found) {\n await db.put(\"version\", { version }, \"version\");\n } else if (found.version !== version) {\n logger\n .Warn()\n .Str(\"url\", url.toString())\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n .Str(\"version\", version!)\n .Str(\"found\", found.version)\n .Msg(\"version mismatch\");\n }\n return { db, dbName, version };\n });\n url.searchParams.set(\"version\", once.version);\n return once.db;\n}\n\nexport interface DbName {\n readonly fullDb: string;\n readonly objStore: string;\n readonly connectionKey: string;\n // readonly version: number;\n // readonly type: \"data\" | \"meta\" | \"wal\";\n readonly dbName: string;\n}\n\nfunction joinDBName(...names: string[]): string {\n return names\n .map((i) => i.replace(/^[^a-zA-Z0-9]+/g, \"\").replace(/[^a-zA-Z0-9]+/g, \"_\"))\n .filter((i) => i.length)\n .join(\".\");\n}\n\n// const schemaVersion = new Map<string, number>();\nexport function getIndexDBName(iurl: URL, logger: Logger): DbName {\n const url = ensureVersion(iurl);\n const fullDb = url.pathname.replace(/^\\/+/, \"\").replace(/\\?.*$/, \"\"); // cut leading slashes\n // const type = getStore(url);\n // const storageVersion = url.searchParams.get(\"version\");\n // not nice but we need to pass the version to the db name\n // url.searchParams.set(\"version\", storageVersion);\n // console.log(\"getIndexDBName:\", url.toString(), { fullDb, type, branch });\n // const dbName = fullDb.replace(new RegExp(`^fp.${storageVersion}.`), \"\"); // cut fp prefix\n const dbName = url.searchParams.get(\"name\");\n if (!dbName) throw logger.Error().Str(\"url\", url.toString()).Msg(`name not found`).AsError();\n const result = joinDBName(fullDb, dbName);\n const objStore = getStore(url, logger, joinDBName);\n const connectionKey = [result, objStore].join(\":\");\n return {\n fullDb: result,\n objStore,\n connectionKey,\n dbName,\n };\n}\n\nabstract class IndexDBGateway implements Gateway {\n readonly logger: Logger;\n constructor(logger: Logger) {\n this.logger = logger;\n }\n db: IDBPDatabase<unknown> = {} as IDBPDatabase<unknown>;\n idb() {\n this.db;\n }\n\n async start(baseURL: URL): Promise<Result<void>> {\n return exception2Result(async () => {\n this.logger.Debug().Url(baseURL).Msg(\"starting\");\n await SysContainer.start();\n this.db = await connectIdb(baseURL, this.logger);\n this.logger.Debug().Url(baseURL).Msg(\"started\");\n });\n }\n async close(): Promise<Result<void>> {\n return Result.Ok(undefined);\n }\n async destroy(baseUrl: URL): Promise<Result<void>> {\n return exception2Result(async () => {\n // return deleteDB(getIndexDBName(this.url).fullDb);\n const type = getStore(baseUrl, this.logger, joinDBName);\n // console.log(\"IndexDBDataStore:destroy\", type);\n const idb = this.db;\n const trans = idb.transaction(type, \"readwrite\");\n const object_store = trans.objectStore(type);\n const toDelete = [];\n for (let cursor = await object_store.openCursor(); cursor; cursor = await cursor.continue()) {\n toDelete.push(cursor.primaryKey);\n }\n for (const key of toDelete) {\n await trans.db.delete(type, key);\n }\n await trans.done;\n });\n }\n\n abstract buildUrl(baseUrl: URL, key: string): Promise<Result<URL>>;\n\n async get(url: URL) {\n return exceptionWrapper(async () => {\n const key = getKey(url, this.logger);\n const store = getStore(url, this.logger, joinDBName);\n this.logger.Debug().Url(url).Str(\"key\", key).Str(\"store\", store).Msg(\"getting\");\n const tx = this.db.transaction([store], \"readonly\");\n const bytes = await tx.objectStore(store).get(sanitzeKey(key));\n await tx.done;\n if (!bytes) {\n return Result.Err(new NotFoundError(`missing ${key}`));\n }\n return Result.Ok(bytes as Uint8Array);\n });\n }\n async put(url: URL, value: Uint8Array) {\n return exception2Result(async () => {\n const key = getKey(url, this.logger);\n const store = getStore(url, this.logger, joinDBName);\n this.logger.Debug().Url(url).Str(\"key\", key).Str(\"store\", store).Msg(\"putting\");\n const tx = this.db.transaction([store], \"readwrite\");\n await tx.objectStore(store).put(value, sanitzeKey(key));\n await tx.done;\n });\n }\n async delete(url: URL) {\n return exception2Result(async () => {\n const key = getKey(url, this.logger);\n const store = getStore(url, this.logger, joinDBName);\n this.logger.Debug().Url(url).Str(\"key\", key).Str(\"store\", store).Msg(\"deleting\");\n const tx = this.db.transaction([store], \"readwrite\");\n await tx.objectStore(store).delete(sanitzeKey(key));\n await tx.done;\n return Result.Ok(undefined);\n });\n }\n}\n\nexport class IndexDBDataGateway extends IndexDBGateway {\n constructor(logger: Logger) {\n super(ensureLogger(logger, \"IndexDBDataGateway\", {}));\n }\n\n buildUrl(baseUrl: URL, key: string): Promise<Result<URL>> {\n const url = new URL(baseUrl.toString());\n url.searchParams.set(\"key\", key);\n return Promise.resolve(Result.Ok(url));\n }\n}\n\nexport class IndexDBWalGateway extends IndexDBGateway {\n constructor(logger: Logger) {\n super(ensureLogger(logger, \"IndexDBWalGateway\", {}));\n }\n buildUrl(baseUrl: URL, key: string): Promise<Result<URL>> {\n const url = new URL(baseUrl.toString());\n url.searchParams.set(\"key\", key);\n return Promise.resolve(Result.Ok(url));\n }\n}\nexport class IndexDBMetaGateway extends IndexDBGateway {\n constructor(logger: Logger) {\n super(ensureLogger(logger, \"IndexDBDataGateway\", {}));\n }\n\n readonly branches = new Set<string>();\n async buildUrl(baseUrl: URL, key: string): Promise<Result<URL>> {\n const url = new URL(baseUrl.toString());\n this.branches.add(key);\n url.searchParams.set(\"key\", key);\n return Result.Ok(url);\n }\n}\n\nconst txtEncoder = new TextEncoder();\nexport class IndexDBTestStore implements TestStore {\n readonly logger: Logger;\n constructor(logger: Logger) {\n this.logger = ensureLogger(logger, \"IndexDBTestStore\", {});\n }\n async get(url: URL, key: string) {\n const db = await connectIdb(url, this.logger);\n const store = getStore(url, this.logger, joinDBName);\n this.logger.Debug().Str(\"key\", key).Str(\"store\", store).Msg(\"getting\");\n let bytes = await db.get(store, sanitzeKey(key));\n this.logger.Debug().Str(\"key\", key).Str(\"store\", store).Int(\"len\", bytes.length).Msg(\"got\");\n if (typeof bytes === \"string\") {\n bytes = txtEncoder.encode(bytes);\n }\n return bytes as Uint8Array;\n }\n}\n","module.exports = encode\n\nvar MSB = 0x80\n , REST = 0x7F\n , MSBALL = ~REST\n , INT = Math.pow(2, 31)\n\nfunction encode(num, out, offset) {\n if (Number.MAX_SAFE_INTEGER && num > Number.MAX_SAFE_INTEGER) {\n encode.bytes = 0\n throw new RangeError('Could not encode varint')\n }\n out = out || []\n offset = offset || 0\n var oldOffset = offset\n\n while(num >= INT) {\n out[offset++] = (num & 0xFF) | MSB\n num /= 128\n }\n while(num & MSBALL) {\n out[offset++] = (num & 0xFF) | MSB\n num >>>= 7\n }\n out[offset] = num | 0\n \n encode.bytes = offset - oldOffset + 1\n \n return out\n}\n","module.exports = read\n\nvar MSB = 0x80\n , REST = 0x7F\n\nfunction read(buf, offset) {\n var res = 0\n , offset = offset || 0\n , shift = 0\n , counter = offset\n , b\n , l = buf.length\n\n do {\n if (counter >= l || shift > 49) {\n read.bytes = 0\n throw new RangeError('Could not decode varint')\n }\n b = buf[counter++]\n res += shift < 28\n ? (b & REST) << shift\n : (b & REST) * Math.pow(2, shift)\n shift += 7\n } while (b >= MSB)\n\n read.bytes = counter - offset\n\n return res\n}\n","\nvar N1 = Math.pow(2, 7)\nvar N2 = Math.pow(2, 14)\nvar N3 = Math.pow(2, 21)\nvar N4 = Math.pow(2, 28)\nvar N5 = Math.pow(2, 35)\nvar N6 = Math.pow(2, 42)\nvar N7 = Math.pow(2, 49)\nvar N8 = Math.pow(2, 56)\nvar N9 = Math.pow(2, 63)\n\nmodule.exports = function (value) {\n return (\n value < N1 ? 1\n : value < N2 ? 2\n : value < N3 ? 3\n : value < N4 ? 4\n : value < N5 ? 5\n : value < N6 ? 6\n : value < N7 ? 7\n : value < N8 ? 8\n : value < N9 ? 9\n : 10\n )\n}\n","module.exports = {\n encode: require('./encode.js')\n , decode: require('./decode.js')\n , encodingLength: require('./length.js')\n}\n","throw new Error(\"store-file not implemented\");\n","throw new Error(\"store-sql not implemented\");\n","// Number is encoded in scientific notation.\n// A Number is composed of an exponent and a mantissa. The exponent isan integer\n// in [-324, 308] and the mantissa is a decimal in ]-10, 10[.\n// First we encode the sign as N or P, then E marking the start of the exponent.\n// The exponent is offseted of 500 to be positive and startpadded to 3 chars.\n// We endpad mantissa with enough zero to exceed mantissa precision.\n// Then negative numbers' mantissa and exponent are flipped (nines' complement)\n\nexports.encode = function (number) {\n if (isNaN(number)) { return \"DaN\"; }\n if (number === 0) { return \"FE 0M0\"; }\n if (number === Infinity) { return \"FF\"; }\n if (number === -Infinity) { return \"DD\"; }\n\n var splitScientificNotation = number.toExponential().split('e');\n var exponent = Number(splitScientificNotation[1]) + 500;\n var mantissa = splitScientificNotation[0] + (splitScientificNotation[0].indexOf('.') === -1 ? '.' : '') + '0'.repeat(20);\n var encoded = 'E' + padStart(String(exponent), 3) + 'M' + String(mantissa);\n if (number > 0) {\n return 'F' + encoded;\n } else {\n return 'D' + flip(encoded);\n }\n}\n\nexports.decode = function (encoded) {\n if (encoded === 'DaN') { return NaN; }\n if (encoded === 'FF') { return Infinity; }\n if (encoded === 'DD') { return -Infinity; }\n\n var isNegative = encoded[0] === 'D';\n var splitEncoded = (isNegative ? flip(encoded) : encoded).slice(2).split('M');\n return Number((isNegative ? '-':'') + splitEncoded[1] + 'e' + String(Number(splitEncoded[0])-500));\n}\n\nfunction flip(number) {\n var flipped = '';\n for (var i = 0; i < number.length; i++) {\n var digit = number[i];\n if (isNaN(Number(digit)) || digit === ' ') {\n if (digit !== '-') { flipped += digit; }\n } else {\n flipped += String(9 - Number(digit));\n }\n }\n return flipped;\n}\n\nfunction padStart (str, count) {\n return (' ').repeat(count - str.length).substr(0,count) + str;\n};\n","var dictEscape = { '?': '?@', '!': '??', '\"': '?%' };\nfunction escape(str) {\n if (!/[!\"]/.test(str)) { return str; }\n return str.replace(/[\\?!\"]/g, function (match) {\n return dictEscape[match];\n });\n\n}\n\nvar dictUnescape = { '?@': '?', '??': '!', '?%': '\"' };\nfunction unescape(str) {\n if (!/\\?[%\\?@]/.test(str)) { return str; }\n return str.replace(/\\?[%\\?@]/g, function (match) {\n return dictUnescape[match];\n });\n}\n\nexports.factory = function (codec) {\n\n return {\n encode: encode,\n decode: decode\n };\n\n function encode(array) {\n if (array === null) { return 'A'; }\n if (!Array.isArray(array)) { throw new Error('can only encode arrays'); }\n var l = array.length;\n if (l == 0) { return 'K!'; }\n\n var s = encodeItem(array[0]);\n for (var i = 1; i < l; i++) {\n s += '\"' + encodeItem(array[i]);\n }\n\n return 'K'+ s + '!';\n }\n\n function encodeItem(item) {\n if (typeof item === 'object') {\n return encode(item);\n }\n return escape(codec.encode(item));\n }\n\n function decode(encoded) {\n if (encoded === 'A') { return null; }\n if (encoded === 'K!') { return []; }\n var items = encoded.split('\"');\n\n var pointers = [[]];\n var array;\n var depth = 0;\n\n var l = items.length;\n for (var i = 0; i < l; i++) {\n var item = items[i];\n var itemLength = item.length;\n\n var open = 0;\n while (item[open] == 'K') { open++; }\n\n var close = 0;\n while (item[itemLength-close - 1] == '!') { close++; }\n\n var content = item.slice(open, itemLength-close);\n\n var newdepth = depth + open;\n for (var j = depth; j < newdepth; j++) {\n pointers[j + 1] = [];\n pointers[j].push(pointers[j + 1]);\n depth = newdepth;\n array = pointers[depth];\n }\n\n if (content.length !== 0) {\n array.push(codec.decode(unescape(content)));\n }\n\n var newdepth = depth - close;\n for (var j = newdepth; j < depth; j++) {\n pointers[j + 1] = [];\n depth = newdepth;\n array = pointers[depth];\n }\n\n }\n return pointers[0][0];\n }\n}\n","var number = require('./codec/number.js');\nvar object = require('./codec/object.js');\n\nvar flip = exports.flip = function (n) {\n var s = n.toString()\n var f = ''\n for(var i in s) {\n f += s[i] == '.' ? '.' : (9 - +s[i])\n }\n return f\n}\n\nfunction round (n) {\n return n < 0 ? Math.ceil(n) : Math.floor(n)\n}\n\nfunction fraction (f) {\n return f - round(f)\n}\n\nexports.number = number;\n\nexports.string = {\n encode: function (s) {\n //we'll need to escape the separators\n if(!/\\x00|\\x01/.test(s))\n return 'J'+s\n else {\n return 'J'+s.replace(/\\x01/g, '\\x01\\x01').replace(/\\x00/g, '\\x01')\n }\n },\n decode: function (s) {\n if('J' === s[0])\n return s.substring(1) //TODO, unescape things...\n }\n}\n\nexports.encode = function (t) {\n return exports[typeof t].encode(t)\n}\n\nexports.decode = function (s) {\n if(s === '') return s\n\n if(!decoders[s[0]])\n throw new Error('no decoder for:'+JSON.stringify(s))\n return decoders[s[0]](s)\n}\n\nexports.object = object.factory(exports);\n\nexports.boolean = {\n encode: function (b) {\n return b ? 'C' : 'B'\n },\n decode: function (b) {\n return 'C' === b\n }\n}\n\nexports.undefined = {\n encode: function (b) {\n return 'L'\n },\n decode: function () {\n return undefined\n }\n}\n\nvar decoders = {\n A: exports.object.decode, //null\n B: exports.boolean.decode, // false\n C: exports.boolean.decode, // true\n D: exports.number.decode, // number\n F: exports.number.decode, // number\n // G Date\n // H Date\n // I Buffer\n J: exports.string.decode, // String\n K: exports.object.decode, // Array\n L: exports.undefined.decode, // undefined\n}\n\n\n//for leveldb, request strings\nexports.buffer = false\nexports.type = 'charwise'\n","export * from \"./database.js\";\nexport * from \"./types.js\";\n\nexport * from \"./crdt.js\";\n\nexport * from \"./indexer.js\";\n\nexport * as bs from \"./blockstore/index.js\";\nexport * as blockstore from \"./blockstore/index.js\";\n\nexport * as rt from \"./runtime/index.js\";\nexport * as runtime from \"./runtime/index.js\";\n\nexport * from \"./utils.js\";\n\nexport * from \"./version.js\";\n","import { uuidv7 } from \"uuidv7\";\nimport { Logger, ResolveOnce } from \"@adviser/cement\";\n\nimport { WriteQueue, writeQueue } from \"./write-queue.js\";\nimport { CRDT } from \"./crdt.js\";\nimport { index } from \"./indexer.js\";\nimport type {\n DocUpdate,\n ClockHead,\n ConfigOpts,\n MapFn,\n QueryOpts,\n ChangesOptions,\n DocSet,\n DocWithId,\n IndexKeyType,\n ListenerFn,\n DbResponse,\n ChangesResponse,\n DocTypes,\n IndexRows,\n DocFragment,\n ChangesResponseRow,\n CRDTMeta,\n} from \"./types.js\";\nimport { BaseBlockstore, Connectable } from \"./blockstore/index.js\";\nimport { SysContainer } from \"./runtime/sys-container.js\";\nimport { ensureLogger } from \"./utils.js\";\nimport { NotFoundError } from \"./blockstore/gateway.js\";\n\nexport class Database<DT extends DocTypes = NonNullable<unknown>> implements Connectable {\n static databases = new Map<string, Database>();\n\n readonly name?: string;\n readonly opts: ConfigOpts = {};\n\n _listening = false;\n readonly _listeners = new Set<ListenerFn<DT>>();\n readonly _noupdate_listeners = new Set<ListenerFn<DT>>();\n readonly _crdt: CRDT<DT>;\n readonly _writeQueue: WriteQueue<DT>;\n readonly blockstore: BaseBlockstore;\n\n async close() {\n await this.ready();\n await this._crdt.close();\n await this.blockstore.close();\n }\n\n async destroy() {\n await this.ready();\n await this._crdt.destroy();\n await this.blockstore.destroy();\n }\n\n readonly _ready = new ResolveOnce<void>();\n async ready() {\n return this._ready.once(async () => {\n await SysContainer.start();\n await this._crdt.ready();\n await this.blockstore.ready();\n });\n }\n\n readonly logger: Logger;\n\n constructor(name?: string, opts?: ConfigOpts) {\n this.name = name;\n this.opts = opts || this.opts;\n this.logger = ensureLogger(this.opts, \"Database\");\n this._crdt = new CRDT(name, this.opts);\n this.blockstore = this._crdt.blockstore; // for connector compatibility\n this._writeQueue = writeQueue(async (updates: DocUpdate<DT>[]) => {\n return await this._crdt.bulk(updates);\n }); //, Infinity)\n this._crdt.clock.onTock(() => {\n this._no_update_notify();\n });\n }\n\n async get<T extends DocTypes>(id: string): Promise<DocWithId<T>> {\n this.logger.Debug().Str(\"id\", id).Msg(\"get-pre-ready\");\n await this.ready();\n this.logger.Debug().Str(\"id\", id).Msg(\"get-post-ready\");\n const got = await this._crdt.get(id).catch((e) => {\n throw new NotFoundError(`Not found: ${id} - ${e.message}`);\n });\n if (!got) throw new NotFoundError(`Not found: ${id}`);\n const { doc } = got;\n return { ...(doc as unknown as DocWithId<T>), _id: id };\n }\n\n async put<T extends DocTypes>(doc: DocSet<T>): Promise<DbResponse> {\n this.logger.Debug().Str(\"id\", doc._id).Msg(\"put-pre-ready\");\n await this.ready();\n this.logger.Debug().Str(\"id\", doc._id).Msg(\"put-post-ready\");\n const { _id, ...value } = doc;\n const docId = _id || uuidv7();\n const result = (await this._writeQueue.push({\n id: docId,\n value: {\n ...(value as unknown as DocSet<DT>),\n _id: docId,\n },\n })) as CRDTMeta;\n return { id: docId, clock: result?.head };\n }\n\n async del(id: string): Promise<DbResponse> {\n await this.ready();\n const result = (await this._writeQueue.push({ id: id, del: true })) as CRDTMeta;\n return { id, clock: result?.head } as DbResponse;\n }\n\n async changes<T extends DocTypes>(since: ClockHead = [], opts: ChangesOptions = {}): Promise<ChangesResponse<T>> {\n await this.ready();\n const { result, head } = await this._crdt.changes(since, opts);\n const rows: ChangesResponseRow<T>[] = result.map(({ id: key, value, del, clock }) => ({\n key,\n value: (del ? { _id: key, _deleted: true } : { _id: key, ...value }) as DocWithId<T>,\n clock,\n }));\n return { rows, clock: head };\n }\n\n async allDocs<T extends DocTypes>(): Promise<{\n rows: {\n key: string;\n value: DocWithId<T>;\n }[];\n clock: ClockHead;\n }> {\n await this.ready();\n const { result, head } = await this._crdt.allDocs();\n const rows = result.map(({ id: key, value, del }) => ({\n key,\n value: (del ? { _id: key, _deleted: true } : { _id: key, ...value }) as DocWithId<T>,\n }));\n return { rows, clock: head };\n }\n\n async allDocuments<T extends DocTypes>(): Promise<{\n rows: {\n key: string;\n value: DocWithId<T>;\n }[];\n clock: ClockHead;\n }> {\n return this.allDocs<T>();\n }\n\n subscribe<T extends DocTypes>(listener: ListenerFn<T>, updates?: boolean): () => void {\n if (updates) {\n if (!this._listening) {\n this._listening = true;\n this._crdt.clock.onTick((updates: DocUpdate<NonNullable<unknown>>[]) => {\n void this._notify(updates);\n });\n }\n this._listeners.add(listener as ListenerFn<NonNullable<unknown>>);\n return () => {\n this._listeners.delete(listener as ListenerFn<NonNullable<unknown>>);\n };\n } else {\n this._noupdate_listeners.add(listener as ListenerFn<NonNullable<unknown>>);\n return () => {\n this._noupdate_listeners.delete(listener as ListenerFn<NonNullable<unknown>>);\n };\n }\n }\n\n // todo if we add this onto dbs in fireproof.ts then we can make index.ts a separate package\n async query<K extends IndexKeyType, T extends DocTypes, R extends DocFragment = T>(\n field: string | MapFn<T>,\n opts: QueryOpts<K> = {},\n ): Promise<IndexRows<K, T, R>> {\n await this.ready();\n const _crdt = this._crdt as unknown as CRDT<T>;\n const idx =\n typeof field === \"string\" ? index<K, T, R>({ _crdt }, field) : index<K, T, R>({ _crdt }, makeName(field.toString()), field);\n return await idx.query(opts);\n }\n\n async compact() {\n await this.ready();\n await this._crdt.compact();\n }\n\n async _notify(updates: DocUpdate<NonNullable<unknown>>[]) {\n await this.ready();\n if (this._listeners.size) {\n const docs: DocWithId<NonNullable<unknown>>[] = updates.map(({ id, value }) => ({ ...value, _id: id }));\n for (const listener of this._listeners) {\n await (async () => await listener(docs as DocWithId<DT>[]))().catch((e: Error) => {\n this.logger.Error().Err(e).Msg(\"subscriber error\");\n });\n }\n }\n }\n\n async _no_update_notify() {\n await this.ready();\n if (this._noupdate_listeners.size) {\n for (const listener of this._noupdate_listeners) {\n await (async () => await listener([]))().catch((e: Error) => {\n this.logger.Error().Err(e).Msg(\"subscriber error\");\n });\n }\n }\n }\n}\n\nfunction toSortedArray(set?: Record<string, unknown>): Record<string, unknown>[] {\n if (!set) return [];\n return Object.entries(set)\n .sort(([a], [b]) => a.localeCompare(b))\n .map(([k, v]) => ({ [k]: v }));\n}\n\nexport function fireproof(name: string, opts?: ConfigOpts): Database {\n const key = JSON.stringify(\n toSortedArray({\n name,\n stores: toSortedArray(opts?.store?.stores),\n\n makeMetaStore: !!opts?.store?.makeMetaStore,\n makeDataStore: !!opts?.store?.makeDataStore,\n makeRemoteWAL: !!opts?.store?.makeRemoteWAL,\n\n encodeFile: !!opts?.store?.encodeFile,\n decodeFile: !!opts?.store?.decodeFile,\n }),\n );\n let db = Database.databases.get(key);\n if (!db) {\n db = new Database(name, opts);\n Database.databases.set(key, db);\n }\n return db;\n}\n\nfunction makeName(fnString: string) {\n const regex = /\\(([^,()]+,\\s*[^,()]+|\\[[^\\]]+\\],\\s*[^,()]+)\\)/g;\n let found: RegExpExecArray | null = null;\n const matches = Array.from(fnString.matchAll(regex), (match) => match[1].trim());\n if (matches.length === 0) {\n found = /=>\\s*(.*)/.exec(fnString);\n }\n if (!found) {\n return fnString;\n } else {\n // it's a consise arrow function, match everything after the arrow\n return found[1];\n }\n}\n","import { DocTypes, MetaType, DocUpdate } from \"./types.js\";\n\ntype WorkerFunction<T extends DocTypes> = (tasks: DocUpdate<T>[]) => Promise<MetaType>;\n\nexport interface WriteQueue<T extends DocTypes> {\n push(task: DocUpdate<T>): Promise<MetaType>;\n}\n\ninterface WriteQueueItem<T extends DocTypes> {\n readonly task: DocUpdate<T>;\n resolve(result: MetaType): void;\n reject(error: Error): void;\n}\n\nexport function writeQueue<T extends DocTypes>(worker: WorkerFunction<T>, payload = Infinity, unbounded = false): WriteQueue<T> {\n const queue: WriteQueueItem<T>[] = [];\n let isProcessing = false;\n\n async function process() {\n if (isProcessing || queue.length === 0) return;\n isProcessing = true;\n\n const tasksToProcess = queue.splice(0, payload);\n const updates = tasksToProcess.map((item) => item.task);\n\n if (unbounded) {\n // Run all updates in parallel and resolve/reject them individually\n const promises = updates.map(async (update, index) => {\n try {\n const result = await worker([update]);\n tasksToProcess[index].resolve(result);\n } catch (error) {\n tasksToProcess[index].reject(error as Error);\n }\n });\n\n await Promise.all(promises);\n } else {\n // Original logic: Run updates in a batch and resolve/reject them together\n try {\n const result = await worker(updates);\n tasksToProcess.forEach((task) => task.resolve(result));\n } catch (error) {\n tasksToProcess.forEach((task) => task.reject(error as Error));\n }\n }\n\n isProcessing = false;\n void process();\n }\n\n return {\n push(task: DocUpdate<T>): Promise<MetaType> {\n return new Promise<MetaType>((resolve, reject) => {\n queue.push({ task, resolve, reject });\n void process();\n });\n },\n };\n}\n","import { Block } from \"multiformats\";\nimport { Logger, ResolveOnce } from \"@adviser/cement\";\n\nimport {\n EncryptedBlockstore,\n type CompactionFetcher,\n type TransactionMeta,\n type CarTransaction,\n BaseBlockstore,\n} from \"./blockstore/index.js\";\nimport {\n clockChangesSince,\n applyBulkUpdateToCrdt,\n getValueFromCrdt,\n readFiles,\n getAllEntries,\n clockVis,\n getBlock,\n doCompact,\n} from \"./crdt-helpers.js\";\nimport type {\n DocUpdate,\n CRDTMeta,\n ClockHead,\n ConfigOpts,\n ChangesOptions,\n IdxMetaMap,\n DocValue,\n IndexKeyType,\n DocWithId,\n DocTypes,\n Falsy,\n} from \"./types.js\";\nimport { index, type Index } from \"./indexer.js\";\nimport { CRDTClock } from \"./crdt-clock.js\";\nimport { blockstoreFactory } from \"./blockstore/transaction.js\";\nimport { ensureLogger } from \"./utils.js\";\n\nexport class CRDT<T extends DocTypes> {\n readonly name?: string;\n readonly opts: ConfigOpts;\n\n readonly onceReady = new ResolveOnce<void>();\n async ready(): Promise<void> {\n return this.onceReady.once(async () => {\n await Promise.all([this.blockstore.ready(), this.indexBlockstore.ready(), this.clock.ready()]);\n });\n }\n\n async close(): Promise<void> {\n await Promise.all([this.blockstore.close(), this.indexBlockstore.close(), this.clock.close()]);\n }\n\n async destroy(): Promise<void> {\n await Promise.all([this.blockstore.destroy(), this.indexBlockstore.destroy()]);\n }\n\n readonly blockstore: BaseBlockstore;\n readonly indexBlockstore: BaseBlockstore;\n readonly indexers = new Map<string, Index<IndexKeyType, NonNullable<unknown>>>();\n readonly clock: CRDTClock<T>;\n\n readonly logger: Logger;\n\n constructor(name?: string, opts: ConfigOpts = {}) {\n this.name = name;\n this.logger = ensureLogger(opts, \"CRDT\");\n this.opts = opts;\n this.blockstore = blockstoreFactory({\n name: name,\n applyMeta: async (meta: TransactionMeta) => {\n const crdtMeta = meta as CRDTMeta;\n if (!crdtMeta.head) throw this.logger.Error().Msg(\"missing head\").AsError();\n await this.clock.applyHead(crdtMeta.head, []);\n },\n compact: async (blocks: CompactionFetcher) => {\n await doCompact(blocks, this.clock.head, this.logger);\n return { head: this.clock.head } as TransactionMeta;\n },\n autoCompact: this.opts.autoCompact || 100,\n crypto: this.opts.crypto,\n store: { ...this.opts.store, isIndex: undefined },\n public: this.opts.public,\n meta: this.opts.meta,\n threshold: this.opts.threshold,\n });\n this.indexBlockstore = blockstoreFactory({\n name: name,\n applyMeta: async (meta: TransactionMeta) => {\n const idxCarMeta = meta as IdxMetaMap;\n if (!idxCarMeta.indexes) throw this.logger.Error().Msg(\"missing indexes\").AsError();\n for (const [name, idx] of Object.entries(idxCarMeta.indexes)) {\n index({ _crdt: this }, name, undefined, idx);\n }\n },\n crypto: this.opts.crypto,\n store: { ...this.opts.store, isIndex: this.opts.store?.isIndex || \"idx\" },\n public: this.opts.public,\n });\n this.clock = new CRDTClock<T>(this.blockstore);\n this.clock.onZoom(() => {\n for (const idx of this.indexers.values()) {\n idx._resetIndex();\n }\n });\n }\n\n async bulk(updates: DocUpdate<T>[]): Promise<CRDTMeta> {\n await this.ready();\n const prevHead = [...this.clock.head];\n\n const done = await this.blockstore.transaction<CRDTMeta>(async (blocks: CarTransaction): Promise<CRDTMeta> => {\n const { head } = await applyBulkUpdateToCrdt<T>(\n this.blockstore.ebOpts.storeRuntime,\n blocks,\n this.clock.head,\n updates,\n this.logger,\n );\n updates = updates.map((dupdate: DocUpdate<T>) => {\n // if (!dupdate.value) throw new Error(\"missing value\");\n readFiles(this.blockstore, { doc: dupdate.value as DocWithId<T> });\n return dupdate;\n });\n return { head };\n });\n await this.clock.applyHead(done.meta.head, prevHead, updates);\n return done.meta;\n }\n\n // if (snap) await this.clock.applyHead(crdtMeta.head, this.clock.head)\n\n async allDocs(): Promise<{ result: DocUpdate<T>[]; head: ClockHead }> {\n await this.ready();\n const result: DocUpdate<T>[] = [];\n for await (const entry of getAllEntries<T>(this.blockstore, this.clock.head, this.logger)) {\n result.push(entry);\n }\n return { result, head: this.clock.head };\n }\n\n async vis(): Promise<string> {\n await this.ready();\n const txt: string[] = [];\n for await (const line of clockVis(this.blockstore, this.clock.head)) {\n txt.push(line);\n }\n return txt.join(\"\\n\");\n }\n\n async getBlock(cidString: string): Promise<Block> {\n await this.ready();\n return await getBlock(this.blockstore, cidString);\n }\n\n async get(key: string): Promise<DocValue<T> | Falsy> {\n await this.ready();\n const result = await getValueFromCrdt<T>(this.blockstore, this.clock.head, key, this.logger);\n if (result.del) return undefined;\n return result;\n }\n\n async changes(\n since: ClockHead = [],\n opts: ChangesOptions = {},\n ): Promise<{\n result: DocUpdate<T>[];\n head: ClockHead;\n }> {\n await this.ready();\n return await clockChangesSince<T>(this.blockstore, this.clock.head, since, opts, this.logger);\n }\n\n async compact(): Promise<void> {\n const blocks = this.blockstore as EncryptedBlockstore;\n return await blocks.compact();\n }\n}\n","import { encode, decode, Block } from \"multiformats/block\";\nimport { parse } from \"multiformats/link\";\nimport { sha256 as hasher } from \"multiformats/hashes/sha2\";\nimport * as codec from \"@ipld/dag-cbor\";\nimport { put, get, entries, root } from \"@web3-storage/pail/crdt\";\nimport { EventBlockView, EventLink, Operation, PutOperation } from \"@web3-storage/pail/crdt/api\";\nimport { EventFetcher, vis } from \"@web3-storage/pail/clock\";\nimport * as Batch from \"@web3-storage/pail/crdt/batch\";\nimport {\n type EncryptedBlockstore,\n type CompactionFetcher,\n CarTransaction,\n BlockFetcher,\n TransactionMeta,\n AnyLink,\n StoreRuntime,\n BaseBlockstore,\n} from \"./blockstore/index.js\";\nimport {\n type IndexKeyType,\n type DocUpdate,\n type ClockHead,\n type DocValue,\n type CRDTMeta,\n type ChangesOptions,\n type DocFileMeta,\n type DocFiles,\n type DocSet,\n type DocWithId,\n type DocTypes,\n throwFalsy,\n} from \"./types.js\";\nimport { Result } from \"@web3-storage/pail/crdt/api\";\nimport { Logger } from \"@adviser/cement\";\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nfunction time(tag: string) {\n // console.time(tag)\n}\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nfunction timeEnd(tag: string) {\n // console.timeEnd(tag)\n}\n\nfunction toString<K extends IndexKeyType>(key: K, logger: Logger): string {\n switch (typeof key) {\n case \"string\":\n case \"number\":\n return key.toString();\n default:\n throw logger.Error().Msg(\"Invalid key type\").AsError();\n }\n}\n\nexport async function applyBulkUpdateToCrdt<T extends DocTypes>(\n store: StoreRuntime,\n tblocks: CarTransaction,\n head: ClockHead,\n updates: DocUpdate<T>[],\n logger: Logger,\n): Promise<CRDTMeta> {\n let result: Result | null = null;\n if (updates.length > 1) {\n const batch = await Batch.create(tblocks, head);\n for (const update of updates) {\n const link = await writeDocContent(store, tblocks, update, logger);\n await batch.put(toString(update.id, logger), link);\n }\n result = await batch.commit();\n } else if (updates.length === 1) {\n const link = await writeDocContent(store, tblocks, updates[0], logger);\n result = await put(tblocks, head, toString(updates[0].id, logger), link);\n }\n if (!result) throw logger.Error().Uint64(\"updates.len\", updates.length).Msg(\"Missing result\").AsError();\n\n if (result.event) {\n for (const { cid, bytes } of [\n ...result.additions,\n // ...result.removals,\n result.event,\n ]) {\n tblocks.putSync(cid, bytes);\n }\n }\n return { head: result.head } as CRDTMeta;\n}\n\n// this whole thing can get pulled outside of the write queue\nasync function writeDocContent<T extends DocTypes>(\n store: StoreRuntime,\n blocks: CarTransaction,\n update: DocUpdate<T>,\n logger: Logger,\n): Promise<AnyLink> {\n let value: Partial<DocValue<T>>;\n if (update.del) {\n value = { del: true };\n } else {\n if (!update.value) throw logger.Error().Msg(\"Missing value\").AsError();\n await processFiles(store, blocks, update.value, logger);\n value = { doc: update.value as DocWithId<T> };\n }\n const block = await encode({ value, hasher, codec });\n blocks.putSync(block.cid, block.bytes);\n return block.cid;\n}\n\nasync function processFiles<T extends DocTypes>(store: StoreRuntime, blocks: CarTransaction, doc: DocSet<T>, logger: Logger) {\n if (doc._files) {\n await processFileset(logger, store, blocks, doc._files);\n }\n if (doc._publicFiles) {\n await processFileset(logger, store, blocks, doc._publicFiles, true);\n }\n}\n\nasync function processFileset(logger: Logger, store: StoreRuntime, blocks: CarTransaction, files: DocFiles, publicFiles = false) {\n const dbBlockstore = blocks.parent as EncryptedBlockstore;\n if (!dbBlockstore.loader) throw logger.Error().Msg(\"Missing loader, database name is required\").AsError();\n const t = new CarTransaction(dbBlockstore); // maybe this should move to encrypted-blockstore\n const didPut = [];\n // let totalSize = 0\n for (const filename in files) {\n if (File === files[filename].constructor) {\n const file = files[filename] as File;\n\n // totalSize += file.size\n const { cid, blocks: fileBlocks } = await store.encodeFile(file);\n didPut.push(filename);\n for (const block of fileBlocks) {\n t.putSync(block.cid, block.bytes);\n }\n files[filename] = { cid, type: file.type, size: file.size } as DocFileMeta;\n } else {\n const { cid, type, size, car } = files[filename] as DocFileMeta;\n if (cid && type && size && car) {\n files[filename] = { cid, type, size, car };\n }\n }\n }\n\n if (didPut.length) {\n const car = await dbBlockstore.loader.commitFiles(t, { files } as unknown as TransactionMeta, {\n public: publicFiles,\n });\n if (car) {\n for (const name of didPut) {\n files[name] = { car, ...files[name] } as DocFileMeta;\n }\n }\n }\n}\n\nexport async function getValueFromCrdt<T extends DocTypes>(\n blocks: BaseBlockstore,\n head: ClockHead,\n key: string,\n logger: Logger,\n): Promise<DocValue<T>> {\n if (!head.length) throw logger.Debug().Msg(\"Getting from an empty database\").AsError();\n const link = await get(blocks, head, key);\n if (!link) throw logger.Error().Str(\"key\", key).Msg(`Missing key`).AsError();\n return await getValueFromLink(blocks, link, logger);\n}\n\nexport function readFiles<T extends DocTypes>(blocks: BaseBlockstore, { doc }: Partial<DocValue<T>>) {\n if (!doc) return;\n if (doc._files) {\n readFileset(blocks as EncryptedBlockstore, doc._files);\n }\n if (doc._publicFiles) {\n readFileset(blocks as EncryptedBlockstore, doc._publicFiles, true);\n }\n}\n\nfunction readFileset(blocks: EncryptedBlockstore, files: DocFiles, isPublic = false) {\n for (const filename in files) {\n const fileMeta = files[filename] as DocFileMeta;\n if (fileMeta.cid) {\n if (isPublic) {\n fileMeta.url = `https://${fileMeta.cid.toString()}.ipfs.w3s.link/`;\n }\n if (fileMeta.car) {\n fileMeta.file = async () =>\n await blocks.ebOpts.storeRuntime.decodeFile(\n {\n get: async (cid: AnyLink) => {\n return await blocks.getFile(throwFalsy(fileMeta.car), cid, isPublic);\n },\n },\n fileMeta.cid,\n fileMeta,\n );\n }\n }\n files[filename] = fileMeta;\n }\n}\n\nasync function getValueFromLink<T extends DocTypes>(blocks: BlockFetcher, link: AnyLink, logger: Logger): Promise<DocValue<T>> {\n const block = await blocks.get(link);\n if (!block) throw logger.Error().Str(\"link\", link.toString()).Msg(`Missing linked block`).AsError();\n const { value } = (await decode({ bytes: block.bytes, hasher, codec })) as { value: DocValue<T> };\n const cvalue = {\n ...value,\n cid: link,\n };\n readFiles(blocks as EncryptedBlockstore, cvalue);\n return cvalue;\n}\n\nclass DirtyEventFetcher<T> extends EventFetcher<T> {\n async get(link: EventLink<T>): Promise<EventBlockView<T>> {\n try {\n return super.get(link);\n } catch (e) {\n console.error(\"missing event\", link.toString(), e);\n return { value: undefined } as unknown as EventBlockView<T>;\n }\n }\n}\n\nexport async function clockChangesSince<T extends DocTypes>(\n blocks: BlockFetcher,\n head: ClockHead,\n since: ClockHead,\n opts: ChangesOptions,\n logger: Logger,\n): Promise<{ result: DocUpdate<T>[]; head: ClockHead }> {\n const eventsFetcher = (\n opts.dirty ? new DirtyEventFetcher<Operation>(blocks) : new EventFetcher<Operation>(blocks)\n ) as EventFetcher<Operation>;\n const keys = new Set<string>();\n const updates = await gatherUpdates<T>(\n blocks,\n eventsFetcher,\n head,\n since,\n [],\n keys,\n new Set<string>(),\n opts.limit || Infinity,\n logger,\n );\n return { result: updates.reverse(), head };\n}\n\nasync function gatherUpdates<T extends DocTypes>(\n blocks: BlockFetcher,\n eventsFetcher: EventFetcher<Operation>,\n head: ClockHead,\n since: ClockHead,\n updates: DocUpdate<T>[] = [],\n keys: Set<string>,\n didLinks: Set<string>,\n limit: number,\n logger: Logger,\n): Promise<DocUpdate<T>[]> {\n if (limit <= 0) return updates;\n // if (Math.random() < 0.001) console.log('gatherUpdates', head.length, since.length, updates.length)\n const sHead = head.map((l) => l.toString());\n for (const link of since) {\n if (sHead.includes(link.toString())) {\n return updates;\n }\n }\n for (const link of head) {\n if (didLinks.has(link.toString())) continue;\n didLinks.add(link.toString());\n const { value: event } = await eventsFetcher.get(link);\n if (!event) continue;\n const { type } = event.data;\n let ops = [] as PutOperation[];\n if (type === \"batch\") {\n ops = event.data.ops as PutOperation[];\n } else if (type === \"put\") {\n ops = [event.data] as PutOperation[];\n }\n for (let i = ops.length - 1; i >= 0; i--) {\n const { key, value } = ops[i];\n if (!keys.has(key)) {\n // todo option to see all updates\n const docValue = await getValueFromLink<T>(blocks, value, logger);\n updates.push({ id: key, value: docValue.doc, del: docValue.del, clock: link });\n limit--;\n keys.add(key);\n }\n }\n if (event.parents) {\n updates = await gatherUpdates(blocks, eventsFetcher, event.parents, since, updates, keys, didLinks, limit, logger);\n }\n }\n return updates;\n}\n\nexport async function* getAllEntries<T extends DocTypes>(blocks: BlockFetcher, head: ClockHead, logger: Logger) {\n // return entries(blocks, head)\n for await (const [key, link] of entries(blocks, head)) {\n const docValue = await getValueFromLink(blocks, link, logger);\n yield { id: key, value: docValue.doc, del: docValue.del } as DocUpdate<T>;\n }\n}\n\nexport async function* clockVis(blocks: BlockFetcher, head: ClockHead) {\n for await (const line of vis(blocks, head)) {\n yield line;\n }\n}\n\nlet isCompacting = false;\nexport async function doCompact(blockLog: CompactionFetcher, head: ClockHead, logger: Logger) {\n if (isCompacting) {\n // console.log('already compacting')\n return;\n }\n isCompacting = true;\n\n time(\"compact head\");\n for (const cid of head) {\n const bl = await blockLog.get(cid);\n if (!bl) throw logger.Error().Ref(\"cid\", cid).Msg(\"Missing head block\").AsError();\n }\n timeEnd(\"compact head\");\n\n // for await (const blk of blocks.entries()) {\n // const bl = await blockLog.get(blk.cid)\n // if (!bl) throw new Error('Missing tblock: ' + blk.cid.toString())\n // }\n\n // todo maybe remove\n // for await (const blk of blocks.loader!.entries()) {\n // const bl = await blockLog.get(blk.cid)\n // if (!bl) throw new Error('Missing db block: ' + blk.cid.toString())\n // }\n\n time(\"compact all entries\");\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n for await (const _entry of getAllEntries(blockLog, head, logger)) {\n // result.push(entry)\n // void 1;\n continue;\n }\n timeEnd(\"compact all entries\");\n\n // time(\"compact crdt entries\")\n // for await (const [, link] of entries(blockLog, head)) {\n // const bl = await blockLog.get(link)\n // if (!bl) throw new Error('Missing entry block: ' + link.toString())\n // }\n // timeEnd(\"compact crdt entries\")\n\n time(\"compact clock vis\");\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n for await (const _line of vis(blockLog, head)) {\n void 1;\n }\n timeEnd(\"compact clock vis\");\n\n time(\"compact root\");\n const result = await root(blockLog, head);\n timeEnd(\"compact root\");\n\n time(\"compact root blocks\");\n for (const { cid, bytes } of [...result.additions, ...result.removals]) {\n blockLog.loggedBlocks.putSync(cid, bytes);\n }\n timeEnd(\"compact root blocks\");\n\n time(\"compact changes\");\n await clockChangesSince(blockLog, head, [], {}, logger);\n timeEnd(\"compact changes\");\n\n isCompacting = false;\n}\n\nexport async function getBlock(blocks: BlockFetcher, cidString: string) {\n const block = await blocks.get(parse(cidString));\n if (!block) throw new Error(`Missing block ${cidString}`);\n const { cid, value } = await decode({ bytes: block.bytes, codec, hasher });\n return new Block({ cid, value, bytes: block.bytes });\n}\n","import { CID, format, toJSON, fromJSON } from './cid.js'\nimport type * as API from './link/interface.js'\n// This way TS will also expose all the types from module\nexport * from './link/interface.js'\n\nconst DAG_PB_CODE = 0x70\n// eslint-disable-next-line\nconst SHA_256_CODE = 0x12\n\n/**\n * Simplified version of `create` for CIDv0.\n */\nexport function createLegacy (digest: API.MultihashDigest<typeof SHA_256_CODE>): API.LegacyLink {\n return CID.create(0, DAG_PB_CODE, digest)\n}\n\n/**\n * Simplified version of `create` for CIDv1.\n *\n * @param code - Content encoding format code.\n * @param digest - Miltihash of the content.\n */\nexport function create <Data, Code extends number, Alg extends number> (code: Code, digest: API.MultihashDigest<Alg>): API.Link<Data, Code, Alg> {\n return CID.create(1, code, digest)\n}\n\n/**\n * Type predicate returns true if value is the link.\n */\nexport function isLink <L extends API.Link<unknown, number, number, 0 | 1>> (value: unknown | L): value is L & CID {\n if (value == null) {\n return false\n }\n\n const withSlash = value as { '/'?: Uint8Array, bytes: Uint8Array }\n\n if (withSlash['/'] != null && withSlash['/'] === withSlash.bytes) {\n return true\n }\n\n const withAsCID = value as { 'asCID'?: unknown }\n\n if (withAsCID.asCID === value) {\n return true\n }\n\n return false\n}\n\n/**\n * Takes cid in a string representation and creates an instance. If `base`\n * decoder is not provided will use a default from the configuration. It will\n * throw an error if encoding of the CID is not compatible with supplied (or\n * a default decoder).\n */\nexport function parse <Prefix extends string, Data, Code extends number, Alg extends number, Ver extends API.Version> (source: API.ToString<API.Link<Data, Code, Alg, Ver>, Prefix>, base?: API.MultibaseDecoder<Prefix>): API.Link<Data, Code, Alg, Ver> {\n return CID.parse(source, base)\n}\n\nexport { format, toJSON, fromJSON }\n\n/**\n * Decoded a CID from its binary representation. The byte array must contain\n * only the CID with no additional bytes.\n *\n * An error will be thrown if the bytes provided do not contain a valid\n * binary representation of a CID.\n */\nexport function decode <Data, Code extends number, Alg extends number, Ver extends API.Version> (bytes: API.ByteView<API.Link<Data, Code, Alg, Ver>>): API.Link<Data, Code, Alg, Ver> {\n return CID.decode(bytes)\n}\n","import { Block, encode, decode } from 'multiformats/block'\nimport { sha256 } from 'multiformats/hashes/sha2'\nimport * as cbor from '@ipld/dag-cbor'\n// eslint-disable-next-line no-unused-vars\nimport * as API from './api.js'\n\n/**\n * Advance the clock by adding an event.\n *\n * @template T\n * @param {API.BlockFetcher} blocks Block storage.\n * @param {API.EventLink<T>[]} head The head of the clock.\n * @param {API.EventLink<T>} event The event to add.\n */\nexport const advance = async (blocks, head, event) => {\n const events = new EventFetcher(blocks)\n const headmap = new Map(head.map(cid => [cid.toString(), cid]))\n if (headmap.has(event.toString())) return head\n\n // does event contain the clock?\n let changed = false\n for (const cid of head) {\n if (await contains(events, event, cid)) {\n headmap.delete(cid.toString())\n headmap.set(event.toString(), event)\n changed = true\n }\n }\n if (changed) {\n return [...headmap.values()]\n }\n\n // does clock contain the event?\n for (const p of head) {\n if (await contains(events, p, event)) {\n return head\n }\n }\n\n return head.concat(event)\n}\n\n/**\n * @template T\n * @extends {Block<API.EventView<T>, typeof cbor.code, typeof sha256.code, 1>}\n * @implements {API.EventBlockView<T>}\n */\nexport class EventBlock extends Block {\n /**\n * @param {object} config\n * @param {API.EventLink<T>} config.cid\n * @param {Event} config.value\n * @param {Uint8Array} config.bytes\n * @param {string} config.prefix\n */\n constructor ({ cid, value, bytes, prefix }) {\n // @ts-expect-error\n super({ cid, value, bytes })\n this.prefix = prefix\n }\n\n /**\n * @template T\n * @param {T} data\n * @param {API.EventLink<T>[]} [parents]\n */\n static create (data, parents) {\n return encodeEventBlock({ data, parents: parents ?? [] })\n }\n}\n\n/** @template T */\nexport class EventFetcher {\n /** @param {API.BlockFetcher} blocks */\n constructor (blocks) {\n /** @private */\n this._blocks = blocks\n }\n\n /**\n * @param {API.EventLink<T>} link\n * @returns {Promise<API.EventBlockView<T>>}\n */\n async get (link) {\n const block = await this._blocks.get(link)\n if (!block) throw new Error(`missing block: ${link}`)\n return decodeEventBlock(block.bytes)\n }\n}\n\n/**\n * @template T\n * @param {API.EventView<T>} value\n * @returns {Promise<API.EventBlockView<T>>}\n */\nexport const encodeEventBlock = async (value) => {\n // TODO: sort parents\n const { cid, bytes } = await encode({ value, codec: cbor, hasher: sha256 })\n // @ts-expect-error\n return new Block({ cid, value, bytes })\n}\n\n/**\n * @template T\n * @param {Uint8Array} bytes\n * @returns {Promise<API.EventBlockView<T>>}\n */\nexport const decodeEventBlock = async (bytes) => {\n const { cid, value } = await decode({ bytes, codec: cbor, hasher: sha256 })\n // @ts-expect-error\n return new Block({ cid, value, bytes })\n}\n\n/**\n * Returns true if event \"a\" contains event \"b\". Breadth first search.\n * @template T\n * @param {EventFetcher<T>} events\n * @param {API.EventLink<T>} a\n * @param {API.EventLink<T>} b\n */\nconst contains = async (events, a, b) => {\n if (a.toString() === b.toString()) return true\n const [{ value: aevent }, { value: bevent }] = await Promise.all([events.get(a), events.get(b)])\n const links = [...aevent.parents]\n const seen = new Set()\n while (links.length) {\n const link = links.shift()\n if (!link) break\n if (link.toString() === b.toString()) return true\n // if any of b's parents are this link, then b cannot exist in any of the\n // tree below, since that would create a cycle.\n if (bevent.parents.some(p => link.toString() === p.toString())) continue\n if (seen.has(link.toString())) continue\n seen.add(link.toString())\n const { value: event } = await events.get(link)\n links.push(...event.parents)\n }\n return false\n}\n\n/**\n * @template T\n * @param {API.BlockFetcher} blocks Block storage.\n * @param {API.EventLink<T>[]} head\n * @param {object} [options]\n * @param {(b: API.EventBlockView<T>) => string} [options.renderNodeLabel]\n */\nexport const vis = async function * (blocks, head, options = {}) {\n const renderNodeLabel = options.renderNodeLabel ?? (b => shortLink(b.cid))\n const events = new EventFetcher(blocks)\n yield 'digraph clock {'\n yield ' node [shape=point fontname=\"Courier\"]; head;'\n const hevents = await Promise.all(head.map(link => events.get(link)))\n /** @type {import('multiformats').Link<API.EventView<any>>[]} */\n const links = []\n const nodes = new Set()\n for (const e of hevents) {\n nodes.add(e.cid.toString())\n yield ` node [shape=oval fontname=\"Courier\"]; ${e.cid} [label=\"${renderNodeLabel(e)}\"];`\n yield ` head -> ${e.cid};`\n for (const p of e.value.parents) {\n yield ` ${e.cid} -> ${p};`\n }\n links.push(...e.value.parents)\n }\n while (links.length) {\n const link = links.shift()\n if (!link) break\n if (nodes.has(link.toString())) continue\n nodes.add(link.toString())\n const block = await events.get(link)\n yield ` node [shape=oval]; ${link} [label=\"${renderNodeLabel(block)}\" fontname=\"Courier\"];`\n for (const p of block.value.parents) {\n yield ` ${link} -> ${p};`\n }\n links.push(...block.value.parents)\n }\n yield '}'\n}\n\n/** @param {import('multiformats').UnknownLink} l */\nconst shortLink = l => `${String(l).slice(0, 4)}..${String(l).slice(-4)}`\n","import * as Link from 'multiformats/link'\nimport { Block, encode, decode } from 'multiformats/block'\nimport { sha256 } from 'multiformats/hashes/sha2'\nimport * as dagCBOR from '@ipld/dag-cbor'\n// eslint-disable-next-line no-unused-vars\nimport * as API from './api.js'\n\nexport const KeyCharsASCII = 'ascii'\nexport const MaxKeySize = 4096\n\n/**\n * @extends {Block<API.Shard, typeof dagCBOR.code, typeof sha256.code, 1>}\n * @implements {API.ShardBlockView}\n */\nexport class ShardBlock extends Block {\n /**\n * @param {object} config\n * @param {API.ShardLink} config.cid\n * @param {API.Shard} config.value\n * @param {Uint8Array} config.bytes\n */\n constructor ({ cid, value, bytes }) {\n // @ts-expect-error\n super({ cid, value, bytes })\n }\n\n /** @param {API.ShardOptions} [options] */\n static create (options) {\n return encodeBlock(create(options))\n }\n}\n\n/**\n * @param {API.ShardOptions} [options]\n * @returns {API.Shard}\n */\nexport const create = (options) => ({ entries: [], ...configure(options) })\n\n/**\n * @param {API.ShardOptions} [options]\n * @returns {API.ShardConfig}\n */\nexport const configure = (options) => ({\n version: 1,\n keyChars: options?.keyChars ?? KeyCharsASCII,\n maxKeySize: options?.maxKeySize ?? MaxKeySize,\n prefix: options?.prefix ?? ''\n})\n\n/**\n * @param {API.ShardEntry[]} entries\n * @param {API.ShardOptions} [options]\n * @returns {API.Shard}\n */\nexport const withEntries = (entries, options) => ({ ...create(options), entries })\n\n/** @type {WeakMap<Uint8Array, API.ShardBlockView>} */\nconst decodeCache = new WeakMap()\n\n/**\n * @param {API.Shard} value\n * @returns {Promise<API.ShardBlockView>}\n */\nexport const encodeBlock = async value => {\n const { cid, bytes } = await encode({ value, codec: dagCBOR, hasher: sha256 })\n const block = new ShardBlock({ cid, value, bytes })\n decodeCache.set(block.bytes, block)\n return block\n}\n\n/**\n * @param {Uint8Array} bytes\n * @returns {Promise<API.ShardBlockView>}\n */\nexport const decodeBlock = async bytes => {\n const block = decodeCache.get(bytes)\n if (block) return block\n const { cid, value } = await decode({ bytes, codec: dagCBOR, hasher: sha256 })\n if (!isShard(value)) throw new Error(`invalid shard: ${cid}`)\n return new ShardBlock({ cid, value, bytes })\n}\n\n/**\n * @param {any} value\n * @returns {value is API.Shard}\n */\nexport const isShard = value =>\n value != null &&\n typeof value === 'object' &&\n Array.isArray(value.entries) &&\n value.version === 1 &&\n typeof value.maxKeySize === 'number' &&\n typeof value.keyChars === 'string' &&\n typeof value.prefix === 'string'\n\n/**\n * @param {any} value\n * @returns {value is API.ShardLink}\n */\nexport const isShardLink = (value) =>\n Link.isLink(value) &&\n value.code === dagCBOR.code\n\nexport class ShardFetcher {\n /** @param {API.BlockFetcher} blocks */\n constructor (blocks) {\n this._blocks = blocks\n }\n\n /**\n * @param {API.ShardLink} link\n * @returns {Promise<API.ShardBlockView>}\n */\n async get (link) {\n const block = await this._blocks.get(link)\n if (!block) throw new Error(`missing block: ${link}`)\n return decodeBlock(block.bytes)\n }\n}\n\n/**\n * @param {API.ShardEntry[]} target Entries to insert into.\n * @param {API.ShardEntry} newEntry\n * @returns {API.ShardEntry[]}\n */\nexport const putEntry = (target, newEntry) => {\n /** @type {API.ShardEntry[]} */\n const entries = []\n\n for (const [i, entry] of target.entries()) {\n const [k, v] = entry\n if (newEntry[0] === k) {\n // if new value is link to shard...\n if (Array.isArray(newEntry[1])) {\n // and old value is link to shard\n // and old value is _also_ link to data\n // and new value does not have link to data\n // then preserve old data\n if (Array.isArray(v) && v[1] != null && newEntry[1][1] == null) {\n entries.push([k, [newEntry[1][0], v[1]]])\n } else {\n entries.push(newEntry)\n }\n } else {\n // shard as well as value?\n if (Array.isArray(v)) {\n entries.push([k, [v[0], newEntry[1]]])\n } else {\n entries.push(newEntry)\n }\n }\n for (let j = i + 1; j < target.length; j++) {\n entries.push(target[j])\n }\n return entries\n }\n if (i === 0 && newEntry[0] < k) {\n entries.push(newEntry)\n for (let j = i; j < target.length; j++) {\n entries.push(target[j])\n }\n return entries\n }\n if (i > 0 && newEntry[0] > target[i - 1][0] && newEntry[0] < k) {\n entries.push(newEntry)\n for (let j = i; j < target.length; j++) {\n entries.push(target[j])\n }\n return entries\n }\n entries.push(entry)\n }\n\n entries.push(newEntry)\n\n return entries\n}\n\n/** @param {string} s */\nexport const isPrintableASCII = s => /^[\\x20-\\x7E]*$/.test(s)\n","// eslint-disable-next-line no-unused-vars\nimport * as API from './api.js'\nimport { ShardFetcher, isPrintableASCII } from './shard.js'\nimport * as Shard from './shard.js'\n\n/**\n * Put a value (a CID) for the given key. If the key exists it's value is\n * overwritten.\n *\n * @param {API.BlockFetcher} blocks Bucket block storage.\n * @param {API.ShardLink} root CID of the root node of the bucket.\n * @param {string} key The key of the value to put.\n * @param {API.UnknownLink} value The value to put.\n * @returns {Promise<{ root: API.ShardLink } & API.ShardDiff>}\n */\nexport const put = async (blocks, root, key, value) => {\n const shards = new ShardFetcher(blocks)\n const rshard = await shards.get(root)\n\n if (rshard.value.keyChars !== Shard.KeyCharsASCII) {\n throw new Error(`unsupported key character set: ${rshard.value.keyChars}`)\n }\n if (!isPrintableASCII(key)) {\n throw new Error('key contains non-ASCII characters')\n }\n // ensure utf8 encoded key is smaller than max\n if (new TextEncoder().encode(key).length > rshard.value.maxKeySize) {\n throw new Error(`UTF-8 encoded key exceeds max size of ${rshard.value.maxKeySize} bytes`)\n }\n\n const path = await traverse(shards, rshard, key)\n const target = path[path.length - 1]\n const skey = key.slice(target.value.prefix.length) // key within the shard\n\n /** @type {API.ShardEntry} */\n let entry = [skey, value]\n let targetEntries = [...target.value.entries]\n\n /** @type {API.ShardBlockView[]} */\n const additions = []\n\n for (const [i, e] of targetEntries.entries()) {\n const [k, v] = e\n\n // is this just a replace?\n if (k === skey) break\n\n // do we need to shard this entry?\n const shortest = k.length < skey.length ? k : skey\n const other = shortest === k ? skey : k\n let common = ''\n for (const char of shortest) {\n const next = common + char\n if (!other.startsWith(next)) break\n common = next\n }\n if (common.length) {\n /** @type {API.ShardEntry[]} */\n let entries = []\n\n // if the existing entry key or new key is equal to the common prefix,\n // then the existing value / new value needs to persist in the parent\n // shard. Otherwise they persist in this new shard.\n if (common !== skey) {\n entries = Shard.putEntry(entries, [skey.slice(common.length), value])\n }\n if (common !== k) {\n entries = Shard.putEntry(entries, [k.slice(common.length), v])\n }\n\n let child = await Shard.encodeBlock(\n Shard.withEntries(entries, { ...target.value, prefix: target.value.prefix + common })\n )\n additions.push(child)\n \n // need to spread as access by index does not consider utf-16 surrogates\n const commonChars = [...common]\n\n // create parent shards for each character of the common prefix\n for (let i = commonChars.length - 1; i > 0; i--) {\n const parentConfig = { ...target.value, prefix: target.value.prefix + commonChars.slice(0, i).join('') }\n /** @type {API.ShardEntryLinkValue | API.ShardEntryValueValue | API.ShardEntryLinkAndValueValue} */\n let parentValue\n // if the first iteration and the existing entry key is equal to the\n // common prefix, then existing value needs to persist in this parent\n if (i === commonChars.length - 1 && common === k) {\n if (Array.isArray(v)) throw new Error('found a shard link when expecting a value')\n parentValue = [child.cid, v]\n } else if (i === commonChars.length - 1 && common === skey) {\n parentValue = [child.cid, value]\n } else {\n parentValue = [child.cid]\n }\n const parent = await Shard.encodeBlock(Shard.withEntries([[commonChars[i], parentValue]], parentConfig))\n additions.push(parent)\n child = parent\n }\n\n // remove the sharded entry\n targetEntries.splice(i, 1)\n\n // create the entry that will be added to target\n if (commonChars.length === 1 && common === k) {\n if (Array.isArray(v)) throw new Error('found a shard link when expecting a value')\n entry = [commonChars[0], [child.cid, v]]\n } else if (commonChars.length === 1 && common === skey) {\n entry = [commonChars[0], [child.cid, value]]\n } else {\n entry = [commonChars[0], [child.cid]]\n }\n break\n }\n }\n\n const shard = Shard.withEntries(Shard.putEntry(targetEntries, entry), target.value)\n let child = await Shard.encodeBlock(shard)\n\n // if no change in the target then we're done\n if (child.cid.toString() === target.cid.toString()) {\n return { root, additions: [], removals: [] }\n }\n\n additions.push(child)\n\n // path is root -> target, so work backwards, propagating the new shard CID\n for (let i = path.length - 2; i >= 0; i--) {\n const parent = path[i]\n const key = child.value.prefix.slice(parent.value.prefix.length)\n const value = Shard.withEntries(\n parent.value.entries.map((entry) => {\n const [k, v] = entry\n if (k !== key) return entry\n if (!Array.isArray(v)) throw new Error(`\"${key}\" is not a shard link in: ${parent.cid}`)\n return /** @type {API.ShardEntry} */(v[1] == null ? [k, [child.cid]] : [k, [child.cid, v[1]]])\n }),\n parent.value\n )\n\n child = await Shard.encodeBlock(value)\n additions.push(child)\n }\n\n return { root: additions[additions.length - 1].cid, additions, removals: path }\n}\n\n/**\n * Get the stored value for the given key from the bucket. If the key is not\n * found, `undefined` is returned.\n *\n * @param {API.BlockFetcher} blocks Bucket block storage.\n * @param {API.ShardLink} root CID of the root node of the bucket.\n * @param {string} key The key of the value to get.\n * @returns {Promise<API.UnknownLink | undefined>}\n */\nexport const get = async (blocks, root, key) => {\n const shards = new ShardFetcher(blocks)\n const rshard = await shards.get(root)\n const path = await traverse(shards, rshard, key)\n const target = path[path.length - 1]\n const skey = key.slice(target.value.prefix.length) // key within the shard\n const entry = target.value.entries.find(([k]) => k === skey)\n if (!entry) return\n return Array.isArray(entry[1]) ? entry[1][1] : entry[1]\n}\n\n/**\n * Delete the value for the given key from the bucket. If the key is not found\n * no operation occurs.\n *\n * @param {API.BlockFetcher} blocks Bucket block storage.\n * @param {API.ShardLink} root CID of the root node of the bucket.\n * @param {string} key The key of the value to delete.\n * @returns {Promise<{ root: API.ShardLink } & API.ShardDiff>}\n */\nexport const del = async (blocks, root, key) => {\n const shards = new ShardFetcher(blocks)\n const rshard = await shards.get(root)\n const path = await traverse(shards, rshard, key)\n const target = path[path.length - 1]\n const skey = key.slice(target.value.prefix.length) // key within the shard\n\n const entryidx = target.value.entries.findIndex(([k]) => k === skey)\n if (entryidx === -1) return { root, additions: [], removals: [] }\n\n const entry = target.value.entries[entryidx]\n // cannot delete a shard (without data)\n if (Array.isArray(entry[1]) && entry[1][1] == null) {\n return { root, additions: [], removals: [] }\n }\n\n /** @type {API.ShardBlockView[]} */\n const additions = []\n /** @type {API.ShardBlockView[]} */\n const removals = [...path]\n\n let shard = Shard.withEntries([...target.value.entries], target.value)\n\n if (Array.isArray(entry[1])) {\n // remove the value from this link+value\n shard.entries[entryidx] = [entry[0], [entry[1][0]]]\n } else {\n shard.entries.splice(entryidx, 1)\n // if now empty, remove from parent\n while (!shard.entries.length) {\n const child = path[path.length - 1]\n const parent = path[path.length - 2]\n if (!parent) break\n path.pop()\n shard = Shard.withEntries(\n parent.value.entries.filter(e => {\n if (!Array.isArray(e[1])) return true\n return e[1][0].toString() !== child.cid.toString()\n }),\n parent.value\n )\n }\n }\n\n let child = await Shard.encodeBlock(shard)\n additions.push(child)\n\n // path is root -> shard, so work backwards, propagating the new shard CID\n for (let i = path.length - 2; i >= 0; i--) {\n const parent = path[i]\n const key = child.value.prefix.slice(parent.value.prefix.length)\n const value = Shard.withEntries(\n parent.value.entries.map((entry) => {\n const [k, v] = entry\n if (k !== key) return entry\n if (!Array.isArray(v)) throw new Error(`\"${key}\" is not a shard link in: ${parent.cid}`)\n return /** @type {API.ShardEntry} */(v[1] == null ? [k, [child.cid]] : [k, [child.cid, v[1]]])\n }),\n parent.value\n )\n\n child = await Shard.encodeBlock(value)\n additions.push(child)\n }\n\n return { root: additions[additions.length - 1].cid, additions, removals }\n}\n\n/**\n * @param {API.EntriesOptions} [options]\n * @returns {options is API.KeyPrefixOption}\n */\nconst isKeyPrefixOption = options => {\n const opts = options ?? {}\n return 'prefix' in opts && Boolean(opts.prefix)\n}\n\n/**\n * @param {API.EntriesOptions} [options]\n * @returns {options is API.KeyRangeOption}\n */\nconst isKeyRangeOption = options => {\n const opts = options ?? {}\n return ('gt' in opts && Boolean(opts.gt)) || ('gte' in opts && Boolean(opts.gte)) || ('lt' in opts && Boolean(opts.lt)) || ('lte' in opts && Boolean(opts.lte))\n}\n\n/**\n * @param {API.KeyRangeOption} options\n * @returns {options is API.KeyLowerBoundRangeOption}\n */\nconst isKeyLowerBoundRangeOption = options => ('gt' in options && Boolean(options.gt)) || ('gte' in options && Boolean(options.gte))\n\n/**\n * @param {API.KeyLowerBoundRangeOption} options\n * @returns {options is API.KeyLowerBoundRangeInclusiveOption}\n */\nconst isKeyLowerBoundRangeInclusiveOption = options => 'gte' in options && Boolean(options.gte)\n\n/**\n * @param {API.KeyLowerBoundRangeOption} options\n * @returns {options is API.KeyLowerBoundRangeExclusiveOption}\n */\nconst isKeyLowerBoundRangeExclusiveOption = options => 'gt' in options && Boolean(options.gt)\n\n/**\n * @param {API.KeyRangeOption} options\n * @returns {options is API.KeyUpperBoundRangeOption}\n */\nconst isKeyUpperBoundRangeOption = options => ('lt' in options && Boolean(options.lt)) || ('lte' in options && Boolean(options.lte))\n\n/**\n * @param {API.KeyUpperBoundRangeOption} options\n * @returns {options is API.KeyUpperBoundRangeInclusiveOption}\n */\nconst isKeyUpperBoundRangeInclusiveOption = options => 'lte' in options && Boolean(options.lte)\n\n/**\n * @param {API.KeyUpperBoundRangeOption} options\n * @returns {options is API.KeyUpperBoundRangeExclusiveOption}\n */\nconst isKeyUpperBoundRangeExclusiveOption = options => 'lt' in options && Boolean(options.lt)\n\n/**\n * List entries in the bucket.\n *\n * @param {API.BlockFetcher} blocks Bucket block storage.\n * @param {API.ShardLink} root CID of the root node of the bucket.\n * @param {API.EntriesOptions} [options]\n * @returns {AsyncIterableIterator<API.ShardValueEntry>}\n */\nexport const entries = async function * (blocks, root, options) {\n const hasKeyPrefix = isKeyPrefixOption(options)\n const hasKeyRange = isKeyRangeOption(options)\n const hasKeyLowerBoundRange = hasKeyRange && isKeyLowerBoundRangeOption(options)\n const hasKeyLowerBoundRangeInclusive = hasKeyLowerBoundRange && isKeyLowerBoundRangeInclusiveOption(options)\n const hasKeyLowerBoundRangeExclusive = hasKeyLowerBoundRange && isKeyLowerBoundRangeExclusiveOption(options)\n const hasKeyUpperBoundRange = hasKeyRange && isKeyUpperBoundRangeOption(options)\n const hasKeyUpperBoundRangeInclusive = hasKeyUpperBoundRange && isKeyUpperBoundRangeInclusiveOption(options)\n const hasKeyUpperBoundRangeExclusive = hasKeyUpperBoundRange && isKeyUpperBoundRangeExclusiveOption(options)\n const hasKeyUpperAndLowerBoundRange = hasKeyLowerBoundRange && hasKeyUpperBoundRange\n\n const shards = new ShardFetcher(blocks)\n const rshard = await shards.get(root)\n\n yield * (\n /** @returns {AsyncIterableIterator<API.ShardValueEntry>} */\n async function * ents (shard) {\n for (const entry of shard.value.entries) {\n const key = shard.value.prefix + entry[0]\n\n // if array, this is a link to a shard\n if (Array.isArray(entry[1])) {\n if (entry[1][1]) {\n if (\n (hasKeyPrefix && key.startsWith(options.prefix)) ||\n (hasKeyUpperAndLowerBoundRange && (\n ((hasKeyLowerBoundRangeExclusive && key > options.gt) || (hasKeyLowerBoundRangeInclusive && key >= options.gte)) &&\n ((hasKeyUpperBoundRangeExclusive && key < options.lt) || (hasKeyUpperBoundRangeInclusive && key <= options.lte))\n )) ||\n (hasKeyLowerBoundRangeExclusive && key > options.gt) ||\n (hasKeyLowerBoundRangeInclusive && key >= options.gte) ||\n (hasKeyUpperBoundRangeExclusive && key < options.lt) ||\n (hasKeyUpperBoundRangeInclusive && key <= options.lte) ||\n (!hasKeyPrefix && !hasKeyRange)\n ) {\n yield [key, entry[1][1]]\n }\n }\n\n if (hasKeyPrefix) {\n if (options.prefix.length <= key.length && !key.startsWith(options.prefix)) {\n continue\n }\n if (options.prefix.length > key.length && !options.prefix.startsWith(key)) {\n continue\n }\n } else if (\n (hasKeyLowerBoundRangeExclusive && (trunc(key, Math.min(key.length, options.gt.length)) < trunc(options.gt, Math.min(key.length, options.gt.length)))) ||\n (hasKeyLowerBoundRangeInclusive && (trunc(key, Math.min(key.length, options.gte.length)) < trunc(options.gte, Math.min(key.length, options.gte.length)))) ||\n (hasKeyUpperBoundRangeExclusive && (trunc(key, Math.min(key.length, options.lt.length)) > trunc(options.lt, Math.min(key.length, options.lt.length)))) ||\n (hasKeyUpperBoundRangeInclusive && (trunc(key, Math.min(key.length, options.lte.length)) > trunc(options.lte, Math.min(key.length, options.lte.length))))\n ) {\n continue\n }\n yield * ents(await shards.get(entry[1][0]))\n } else {\n if (\n (hasKeyPrefix && key.startsWith(options.prefix)) ||\n (hasKeyRange && hasKeyUpperAndLowerBoundRange && (\n ((hasKeyLowerBoundRangeExclusive && key > options.gt) || (hasKeyLowerBoundRangeInclusive && key >= options.gte)) &&\n ((hasKeyUpperBoundRangeExclusive && key < options.lt) || (hasKeyUpperBoundRangeInclusive && key <= options.lte))\n )) ||\n (hasKeyRange && !hasKeyUpperAndLowerBoundRange && (\n (hasKeyLowerBoundRangeExclusive && key > options.gt) || (hasKeyLowerBoundRangeInclusive && key >= options.gte) ||\n (hasKeyUpperBoundRangeExclusive && key < options.lt) || (hasKeyUpperBoundRangeInclusive && key <= options.lte)\n )) ||\n (!hasKeyPrefix && !hasKeyRange)\n ) {\n yield [key, entry[1]]\n }\n }\n }\n }\n )(rshard)\n}\n\n/**\n * @param {string} str\n * @param {number} len\n */\nconst trunc = (str, len) => str.length <= len ? str : str.slice(0, len)\n\n/**\n * Traverse from the passed shard block to the target shard block using the\n * passed key. All traversed shards are returned, starting with the passed\n * shard and ending with the target.\n *\n * @param {ShardFetcher} shards\n * @param {API.ShardBlockView} shard\n * @param {string} key\n * @returns {Promise<[API.ShardBlockView, ...Array<API.ShardBlockView>]>}\n */\nconst traverse = async (shards, shard, key) => {\n for (const [k, v] of shard.value.entries) {\n if (key === k) return [shard]\n if (key.startsWith(k) && Array.isArray(v)) {\n const path = await traverse(shards, await shards.get(v[0]), key.slice(k.length))\n return [shard, ...path]\n }\n }\n return [shard]\n}\n","// eslint-disable-next-line no-unused-vars\nimport * as API from './api.js'\nimport { parse } from 'multiformats/link'\n\n/** @implements {API.BlockFetcher} */\nexport class MemoryBlockstore {\n /** @type {Map<string, Uint8Array>} */\n #blocks = new Map()\n\n /**\n * @param {Array<import('multiformats').Block>} [blocks]\n */\n constructor (blocks) {\n if (blocks) {\n this.#blocks = new Map(blocks.map(b => [b.cid.toString(), b.bytes]))\n }\n }\n\n /** @type {API.BlockFetcher['get']} */\n async get (cid) {\n const bytes = this.#blocks.get(cid.toString())\n if (!bytes) return\n return { cid, bytes }\n }\n\n /**\n * @param {API.UnknownLink} cid\n * @param {Uint8Array} bytes\n */\n async put (cid, bytes) {\n this.#blocks.set(cid.toString(), bytes)\n }\n\n /**\n * @param {API.UnknownLink} cid\n * @param {Uint8Array} bytes\n */\n putSync (cid, bytes) {\n this.#blocks.set(cid.toString(), bytes)\n }\n\n /** @param {API.UnknownLink} cid */\n async delete (cid) {\n this.#blocks.delete(cid.toString())\n }\n\n /** @param {API.UnknownLink} cid */\n deleteSync (cid) {\n this.#blocks.delete(cid.toString())\n }\n\n * entries () {\n for (const [str, bytes] of this.#blocks) {\n yield { cid: parse(str), bytes }\n }\n }\n}\n\nexport class MultiBlockFetcher {\n /** @type {API.BlockFetcher[]} */\n #fetchers\n\n /** @param {API.BlockFetcher[]} fetchers */\n constructor (...fetchers) {\n this.#fetchers = fetchers\n }\n\n /** @type {API.BlockFetcher['get']} */\n async get (link) {\n for (const f of this.#fetchers) {\n const v = await f.get(link)\n if (v) return v\n }\n }\n}\n","// eslint-disable-next-line no-unused-vars\nimport * as API from './api.js'\nimport { configure } from '../shard.js'\n\n/**\n * @param {API.BatcherShardInit} [init]\n * @returns {API.BatcherShard}\n */\nexport const create = init => ({\n base: init?.base,\n entries: [...init?.entries ?? []],\n ...configure(init)\n})\n","// eslint-disable-next-line no-unused-vars\nimport * as API from './api.js'\nimport { ShardFetcher, isPrintableASCII } from '../shard.js'\nimport * as Shard from '../shard.js'\nimport * as BatcherShard from './shard.js'\n\n/** @implements {API.Batcher} */\nclass Batcher {\n #committed = false\n\n /**\n * @param {object} init\n * @param {API.BlockFetcher} init.blocks Block storage.\n * @param {API.BatcherShardEntry[]} init.entries The entries in this shard.\n * @param {string} init.prefix Key prefix.\n * @param {number} init.version Shard compatibility version.\n * @param {string} init.keyChars Characters allowed in keys, referring to a known character set.\n * @param {number} init.maxKeySize Max key size in bytes.\n * @param {API.ShardBlockView} init.base Original shard this batcher is based on.\n */\n constructor ({ blocks, entries, prefix, version, keyChars, maxKeySize, base }) {\n this.blocks = blocks\n this.prefix = prefix\n this.entries = [...entries]\n this.base = base\n this.version = version\n this.keyChars = keyChars\n this.maxKeySize = maxKeySize\n }\n\n /**\n * @param {string} key The key of the value to put.\n * @param {API.UnknownLink} value The value to put.\n * @returns {Promise<void>}\n */\n async put (key, value) {\n if (this.#committed) throw new BatchCommittedError()\n return put(this.blocks, this, key, value)\n }\n\n async commit () {\n if (this.#committed) throw new BatchCommittedError()\n this.#committed = true\n return commit(this)\n }\n\n /**\n * @param {object} init\n * @param {API.BlockFetcher} init.blocks Block storage.\n * @param {API.ShardLink} init.link CID of the shard block.\n */\n static async create ({ blocks, link }) {\n const shards = new ShardFetcher(blocks)\n const base = await shards.get(link)\n return new Batcher({ blocks, base, ...base.value })\n }\n}\n\n/**\n * @param {API.BlockFetcher} blocks\n * @param {API.BatcherShard} shard\n * @param {string} key The key of the value to put.\n * @param {API.UnknownLink} value The value to put.\n * @returns {Promise<void>}\n */\nexport const put = async (blocks, shard, key, value) => {\n if (shard.keyChars !== Shard.KeyCharsASCII) {\n throw new Error(`unsupported key character set: ${shard.keyChars}`)\n }\n if (!isPrintableASCII(key)) {\n throw new Error('key contains non-ASCII characters')\n }\n // ensure utf8 encoded key is smaller than max\n if (new TextEncoder().encode(key).length > shard.maxKeySize) {\n throw new Error(`UTF-8 encoded key exceeds max size of ${shard.maxKeySize} bytes`)\n }\n\n const shards = new ShardFetcher(blocks)\n const dest = await traverse(shards, shard, key)\n if (dest.shard !== shard) {\n shard = dest.shard\n key = dest.key\n }\n\n /** @type {API.BatcherShardEntry} */\n let entry = [dest.key, value]\n let targetEntries = [...dest.shard.entries]\n\n for (const [i, e] of targetEntries.entries()) {\n const [k, v] = e\n\n // is this just a replace?\n if (k === dest.key) break\n\n // do we need to shard this entry?\n const shortest = k.length < dest.key.length ? k : dest.key\n const other = shortest === k ? dest.key : k\n let common = ''\n for (const char of shortest) {\n const next = common + char\n if (!other.startsWith(next)) break\n common = next\n }\n if (common.length) {\n /** @type {API.ShardEntry[]} */\n let entries = []\n\n // if the existing entry key or new key is equal to the common prefix,\n // then the existing value / new value needs to persist in the parent\n // shard. Otherwise they persist in this new shard.\n if (common !== dest.key) {\n entries = Shard.putEntry(entries, [dest.key.slice(common.length), value])\n }\n if (common !== k) {\n entries = Shard.putEntry(entries, asShardEntry([k.slice(common.length), v]))\n }\n\n let child = BatcherShard.create({\n ...Shard.configure(dest.shard),\n prefix: dest.shard.prefix + common,\n entries\n })\n \n // need to spread as access by index does not consider utf-16 surrogates\n const commonChars = [...common]\n\n // create parent shards for each character of the common prefix\n for (let i = commonChars.length - 1; i > 0; i--) {\n /** @type {API.ShardEntryShardValue | API.ShardEntryShardAndValueValue} */\n let parentValue\n // if the first iteration and the existing entry key is equal to the\n // common prefix, then existing value needs to persist in this parent\n if (i === commonChars.length - 1 && common === k) {\n if (Array.isArray(v)) throw new Error('found a shard link when expecting a value')\n parentValue = [child, v]\n } else if (i === commonChars.length - 1 && common === dest.key) {\n parentValue = [child, value]\n } else {\n parentValue = [child]\n }\n const parent = BatcherShard.create({\n ...Shard.configure(dest.shard),\n prefix: dest.shard.prefix + commonChars.slice(0, i).join(''),\n entries: [[commonChars[i], parentValue]]\n })\n child = parent\n }\n\n // remove the sharded entry\n targetEntries.splice(i, 1)\n\n // create the entry that will be added to target\n if (commonChars.length === 1 && common === k) {\n if (Array.isArray(v)) throw new Error('found a shard link when expecting a value')\n entry = [commonChars[0], [child, v]]\n } else if (commonChars.length === 1 && common === dest.key) {\n entry = [commonChars[0], [child, value]]\n } else {\n entry = [commonChars[0], [child]]\n }\n break\n }\n }\n\n shard.entries = Shard.putEntry(asShardEntries(targetEntries), asShardEntry(entry))\n}\n\n/**\n * Traverse from the passed shard through to the correct shard for the passed\n * key.\n *\n * @param {ShardFetcher} shards\n * @param {API.BatcherShard} shard\n * @param {string} key\n * @returns {Promise<{ shard: API.BatcherShard, key: string }>}\n */\nexport const traverse = async (shards, shard, key) => {\n for (let i = 0; i < shard.entries.length; i++) {\n const [k, v] = shard.entries[i]\n if (key <= k) break\n if (key.startsWith(k) && Array.isArray(v)) {\n if (Shard.isShardLink(v[0])) {\n const blk = await shards.get(v[0])\n const batcher = BatcherShard.create({ base: blk, ...blk.value })\n shard.entries[i] = [k, v[1] == null ? [batcher] : [batcher, v[1]]]\n return traverse(shards, batcher, key.slice(k.length))\n }\n return traverse(shards, v[0], key.slice(k.length))\n }\n }\n return { shard, key }\n}\n\n/**\n * Encode all altered shards in the batch and return the new root CID and\n * difference blocks.\n *\n * @param {API.BatcherShard} shard\n */\nexport const commit = async shard => {\n /** @type {API.ShardBlockView[]} */\n const additions = []\n /** @type {API.ShardBlockView[]} */\n const removals = []\n\n /** @type {API.ShardEntry[]} */\n const entries = []\n for (const entry of shard.entries) {\n if (Array.isArray(entry[1]) && !Shard.isShardLink(entry[1][0])) {\n const result = await commit(entry[1][0])\n entries.push([\n entry[0],\n entry[1][1] == null ? [result.root] : [result.root, entry[1][1]]\n ])\n additions.push(...result.additions)\n removals.push(...result.removals)\n } else {\n entries.push(asShardEntry(entry))\n }\n }\n\n const block = await Shard.encodeBlock(Shard.withEntries(entries, shard))\n additions.push(block)\n\n if (shard.base && shard.base.cid.toString() === block.cid.toString()) {\n return { root: block.cid, additions: [], removals: [] }\n }\n\n if (shard.base) removals.push(shard.base)\n\n return { root: block.cid, additions, removals }\n}\n\n/** @param {API.BatcherShardEntry[]} entries */\nconst asShardEntries = entries => /** @type {API.ShardEntry[]} */ (entries)\n\n/** @param {API.BatcherShardEntry} entry */\nconst asShardEntry = entry => /** @type {API.ShardEntry} */ (entry)\n\n/**\n * @param {API.BlockFetcher} blocks Bucket block storage.\n * @param {API.ShardLink} root CID of the root shard block.\n * @returns {Promise<API.Batcher>}\n */\nexport const create = (blocks, root) => Batcher.create({ blocks, link: root })\n\nexport class BatchCommittedError extends Error {\n /**\n * @param {string} [message]\n * @param {ErrorOptions} [options]\n */\n constructor (message, options) {\n super(message ?? 'batch already committed', options)\n this.code = BatchCommittedError.code\n }\n\n static code = 'ERR_BATCH_COMMITTED'\n}\n","// eslint-disable-next-line no-unused-vars\nimport * as API from './api.js'\nimport * as Clock from '../clock/index.js'\nimport { EventFetcher, EventBlock } from '../clock/index.js'\nimport * as Pail from '../index.js'\nimport { ShardBlock } from '../shard.js'\nimport { MemoryBlockstore, MultiBlockFetcher } from '../block.js'\nimport * as Batch from '../batch/index.js'\n\n/**\n * Put a value (a CID) for the given key. If the key exists it's value is\n * overwritten.\n *\n * @param {API.BlockFetcher} blocks Bucket block storage.\n * @param {API.EventLink<API.Operation>[]} head Merkle clock head.\n * @param {string} key The key of the value to put.\n * @param {API.UnknownLink} value The value to put.\n * @returns {Promise<API.Result>}\n */\nexport const put = async (blocks, head, key, value) => {\n const mblocks = new MemoryBlockstore()\n blocks = new MultiBlockFetcher(mblocks, blocks)\n\n if (!head.length) {\n const shard = await ShardBlock.create()\n mblocks.putSync(shard.cid, shard.bytes)\n const result = await Pail.put(blocks, shard.cid, key, value)\n /** @type {API.Operation} */\n const data = { type: 'put', root: result.root, key, value }\n const event = await EventBlock.create(data, head)\n head = await Clock.advance(blocks, head, event.cid)\n return {\n root: result.root,\n additions: [shard, ...result.additions],\n removals: result.removals,\n head,\n event\n }\n }\n\n /** @type {EventFetcher<API.Operation>} */\n const events = new EventFetcher(blocks)\n const ancestor = await findCommonAncestor(events, head)\n if (!ancestor) throw new Error('failed to find common ancestor event')\n\n const aevent = await events.get(ancestor)\n let { root } = aevent.value.data\n\n const sorted = await findSortedEvents(events, head, ancestor)\n /** @type {Map<string, API.ShardBlockView>} */\n const additions = new Map()\n /** @type {Map<string, API.ShardBlockView>} */\n const removals = new Map()\n\n for (const { value: event } of sorted) {\n let result\n if (event.data.type === 'put') {\n result = await Pail.put(blocks, root, event.data.key, event.data.value)\n } else if (event.data.type === 'del') {\n result = await Pail.del(blocks, root, event.data.key)\n } else if (event.data.type === 'batch') {\n const batch = await Batch.create(blocks, root)\n for (const op of event.data.ops) {\n if (op.type !== 'put') throw new Error(`unsupported batch operation: ${op.type}`)\n await batch.put(op.key, op.value)\n }\n result = await batch.commit()\n } else {\n // @ts-expect-error type does not exist on never\n throw new Error(`unknown operation: ${event.data.type}`)\n }\n\n root = result.root\n for (const a of result.additions) {\n mblocks.putSync(a.cid, a.bytes)\n additions.set(a.cid.toString(), a)\n }\n for (const r of result.removals) {\n removals.set(r.cid.toString(), r)\n }\n }\n\n const result = await Pail.put(blocks, root, key, value)\n // if we didn't change the pail we're done\n if (result.root.toString() === root.toString()) {\n return { root, additions: [], removals: [], head }\n }\n\n for (const a of result.additions) {\n mblocks.putSync(a.cid, a.bytes)\n additions.set(a.cid.toString(), a)\n }\n for (const r of result.removals) {\n removals.set(r.cid.toString(), r)\n }\n\n /** @type {API.Operation} */\n const data = { type: 'put', root: result.root, key, value }\n const event = await EventBlock.create(data, head)\n mblocks.putSync(event.cid, event.bytes)\n head = await Clock.advance(blocks, head, event.cid)\n\n // filter blocks that were added _and_ removed\n for (const k of removals.keys()) {\n if (additions.has(k)) {\n additions.delete(k)\n removals.delete(k)\n }\n }\n\n return {\n root: result.root,\n additions: [...additions.values()],\n removals: [...removals.values()],\n head,\n event\n }\n}\n\n/**\n * Delete the value for the given key from the bucket. If the key is not found\n * no operation occurs.\n *\n * @param {API.BlockFetcher} blocks Bucket block storage.\n * @param {API.EventLink<API.Operation>[]} head Merkle clock head.\n * @param {string} key The key of the value to delete.\n * @param {object} [options]\n * @returns {Promise<API.Result>}\n */\nexport const del = async (blocks, head, key, options) => {\n throw new Error('not implemented')\n}\n\n/**\n * Determine the effective pail root given the current merkle clock head.\n *\n * Clocks with multiple head events may return blocks that were added or\n * removed while playing forward events from their common ancestor.\n *\n * @param {API.BlockFetcher} blocks Bucket block storage.\n * @param {API.EventLink<API.Operation>[]} head Merkle clock head.\n * @returns {Promise<{ root: API.ShardLink } & API.ShardDiff>}\n */\nexport const root = async (blocks, head) => {\n if (!head.length) throw new Error('cannot determine root of headless clock')\n\n const mblocks = new MemoryBlockstore()\n blocks = new MultiBlockFetcher(mblocks, blocks)\n\n /** @type {EventFetcher<API.Operation>} */\n const events = new EventFetcher(blocks)\n\n if (head.length === 1) {\n const event = await events.get(head[0])\n const { root } = event.value.data\n return { root, additions: [], removals: [] }\n }\n\n const ancestor = await findCommonAncestor(events, head)\n if (!ancestor) throw new Error('failed to find common ancestor event')\n\n const aevent = await events.get(ancestor)\n let { root } = aevent.value.data\n\n const sorted = await findSortedEvents(events, head, ancestor)\n /** @type {Map<string, API.ShardBlockView>} */\n const additions = new Map()\n /** @type {Map<string, API.ShardBlockView>} */\n const removals = new Map()\n\n for (const { value: event } of sorted) {\n let result\n if (event.data.type === 'put') {\n result = await Pail.put(blocks, root, event.data.key, event.data.value)\n } else if (event.data.type === 'del') {\n result = await Pail.del(blocks, root, event.data.key)\n } else if (event.data.type === 'batch') {\n const batch = await Batch.create(blocks, root)\n for (const op of event.data.ops) {\n if (op.type !== 'put') throw new Error(`unsupported batch operation: ${op.type}`)\n await batch.put(op.key, op.value)\n }\n result = await batch.commit()\n } else {\n // @ts-expect-error type does not exist on never\n throw new Error(`unknown operation: ${event.data.type}`)\n }\n\n root = result.root\n for (const a of result.additions) {\n mblocks.putSync(a.cid, a.bytes)\n additions.set(a.cid.toString(), a)\n }\n for (const r of result.removals) {\n removals.set(r.cid.toString(), r)\n }\n }\n\n // filter blocks that were added _and_ removed\n for (const k of removals.keys()) {\n if (additions.has(k)) {\n additions.delete(k)\n removals.delete(k)\n }\n }\n\n return {\n root,\n additions: [...additions.values()],\n removals: [...removals.values()]\n }\n}\n\n/**\n * @param {API.BlockFetcher} blocks Bucket block storage.\n * @param {API.EventLink<API.Operation>[]} head Merkle clock head.\n * @param {string} key The key of the value to retrieve.\n */\nexport const get = async (blocks, head, key) => {\n if (!head.length) return\n const result = await root(blocks, head)\n if (result.additions.length) {\n blocks = new MultiBlockFetcher(new MemoryBlockstore(result.additions), blocks)\n }\n return Pail.get(blocks, result.root, key)\n}\n\n/**\n * @param {API.BlockFetcher} blocks Bucket block storage.\n * @param {API.EventLink<API.Operation>[]} head Merkle clock head.\n * @param {API.EntriesOptions} [options]\n */\nexport const entries = async function * (blocks, head, options) {\n if (!head.length) return\n const result = await root(blocks, head)\n if (result.additions.length) {\n blocks = new MultiBlockFetcher(new MemoryBlockstore(result.additions), blocks)\n }\n yield * Pail.entries(blocks, result.root, options)\n}\n\n/**\n * Find the common ancestor event of the passed children. A common ancestor is\n * the first single event in the DAG that _all_ paths from children lead to.\n *\n * @param {EventFetcher<API.Operation>} events\n * @param {API.EventLink<API.Operation>[]} children\n */\nconst findCommonAncestor = async (events, children) => {\n if (!children.length) return\n const candidates = children.map(c => [c])\n while (true) {\n let changed = false\n for (const c of candidates) {\n const candidate = await findAncestorCandidate(events, c[c.length - 1])\n if (!candidate) continue\n changed = true\n c.push(candidate)\n const ancestor = findCommonString(candidates)\n if (ancestor) return ancestor\n }\n if (!changed) return\n }\n}\n\n/**\n * @param {EventFetcher<API.Operation>} events\n * @param {API.EventLink<API.Operation>} root\n */\nconst findAncestorCandidate = async (events, root) => {\n const { value: event } = await events.get(root)\n if (!event.parents.length) return root\n return event.parents.length === 1\n ? event.parents[0]\n : findCommonAncestor(events, event.parents)\n}\n\n/**\n * @template {{ toString: () => string }} T\n * @param {Array<T[]>} arrays\n */\nconst findCommonString = (arrays) => {\n arrays = arrays.map(a => [...a])\n for (const arr of arrays) {\n for (const item of arr) {\n let matched = true\n for (const other of arrays) {\n if (arr === other) continue\n matched = other.some(i => String(i) === String(item))\n if (!matched) break\n }\n if (matched) return item\n }\n }\n}\n\n/**\n * Find and sort events between the head(s) and the tail.\n * @param {EventFetcher<API.Operation>} events\n * @param {API.EventLink<API.Operation>[]} head\n * @param {API.EventLink<API.Operation>} tail\n */\nconst findSortedEvents = async (events, head, tail) => {\n if (head.length === 1 && head[0].toString() === tail.toString()) {\n return []\n }\n\n // get weighted events - heavier events happened first\n /** @type {Map<string, { event: API.EventBlockView<API.Operation>, weight: number }>} */\n const weights = new Map()\n const all = await Promise.all(head.map(h => findEvents(events, h, tail)))\n for (const arr of all) {\n for (const { event, depth } of arr) {\n const info = weights.get(event.cid.toString())\n if (info) {\n info.weight += depth\n } else {\n weights.set(event.cid.toString(), { event, weight: depth })\n }\n }\n }\n\n // group events into buckets by weight\n /** @type {Map<number, API.EventBlockView<API.Operation>[]>} */\n const buckets = new Map()\n for (const { event, weight } of weights.values()) {\n const bucket = buckets.get(weight)\n if (bucket) {\n bucket.push(event)\n } else {\n buckets.set(weight, [event])\n }\n }\n\n // sort by weight, and by CID within weight\n return Array.from(buckets)\n .sort((a, b) => b[0] - a[0])\n .flatMap(([, es]) => es.sort((a, b) => String(a.cid) < String(b.cid) ? -1 : 1))\n}\n\n/**\n * @param {EventFetcher<API.Operation>} events\n * @param {API.EventLink<API.Operation>} start\n * @param {API.EventLink<API.Operation>} end\n * @returns {Promise<Array<{ event: API.EventBlockView<API.Operation>, depth: number }>>}\n */\nconst findEvents = async (events, start, end, depth = 0) => {\n const event = await events.get(start)\n const acc = [{ event, depth }]\n const { parents } = event.value\n if (parents.length === 1 && String(parents[0]) === String(end)) return acc\n const rest = await Promise.all(parents.map(p => findEvents(events, p, end, depth + 1)))\n return acc.concat(...rest)\n}\n","// eslint-disable-next-line no-unused-vars\nimport * as API from './api.js'\nimport * as Shard from '../../shard.js'\nimport { ShardFetcher, ShardBlock } from '../../shard.js'\nimport * as Batch from '../../batch/index.js'\nimport { BatchCommittedError } from '../../batch/index.js'\nimport * as CRDT from '../index.js'\nimport * as Clock from '../../clock/index.js'\nimport { EventBlock } from '../../clock/index.js'\nimport { MemoryBlockstore, MultiBlockFetcher } from '../../block.js'\n\nexport { BatchCommittedError }\n\n/** @implements {API.CRDTBatcher} */\nclass Batcher {\n #committed = false\n\n /**\n * @param {object} init\n * @param {API.BlockFetcher} init.blocks Block storage.\n * @param {API.EventLink<API.Operation>[]} init.head Merkle clock head.\n * @param {API.BatcherShardEntry[]} init.entries The entries in this shard.\n * @param {string} init.prefix Key prefix.\n * @param {number} init.version Shard compatibility version.\n * @param {string} init.keyChars Characters allowed in keys, referring to a known character set.\n * @param {number} init.maxKeySize Max key size in bytes.\n * @param {API.ShardBlockView} init.base Original shard this batcher is based on.\n * @param {API.ShardBlockView[]} init.additions Additions to include in the committed batch.\n * @param {API.ShardBlockView[]} init.removals Removals to include in the committed batch.\n */\n constructor ({ blocks, head, entries, prefix, version, keyChars, maxKeySize, base, additions, removals }) {\n this.blocks = blocks\n this.head = head\n this.prefix = prefix\n this.entries = [...entries]\n this.base = base\n this.version = version\n this.keyChars = keyChars\n this.maxKeySize = maxKeySize\n this.additions = additions\n this.removals = removals\n /** @type {API.BatchOperation['ops']} */\n this.ops = []\n }\n\n /**\n * @param {string} key The key of the value to put.\n * @param {API.UnknownLink} value The value to put.\n * @returns {Promise<void>}\n */\n async put (key, value) {\n if (this.#committed) throw new BatchCommittedError()\n await Batch.put(this.blocks, this, key, value)\n this.ops.push({ type: 'put', key, value })\n }\n\n async commit () {\n if (this.#committed) throw new BatchCommittedError()\n this.#committed = true\n\n const res = await Batch.commit(this)\n\n /** @type {API.Operation} */\n const data = { type: 'batch', ops: this.ops, root: res.root }\n const event = await EventBlock.create(data, this.head)\n\n const mblocks = new MemoryBlockstore()\n const blocks = new MultiBlockFetcher(mblocks, this.blocks)\n mblocks.putSync(event.cid, event.bytes)\n\n const head = await Clock.advance(blocks, this.head, event.cid)\n\n /** @type {Map<string, API.ShardBlockView>} */\n const additions = new Map()\n /** @type {Map<string, API.ShardBlockView>} */\n const removals = new Map()\n\n for (const a of this.additions) {\n additions.set(a.cid.toString(), a)\n }\n for (const r of this.removals) {\n removals.set(r.cid.toString(), r)\n }\n\n for (const a of res.additions) {\n if (removals.has(a.cid.toString())) {\n removals.delete(a.cid.toString())\n }\n additions.set(a.cid.toString(), a)\n }\n for (const r of res.removals) {\n if (additions.has(r.cid.toString())) {\n additions.delete(r.cid.toString())\n } else {\n removals.set(r.cid.toString(), r)\n }\n }\n\n return {\n head,\n event,\n root: res.root,\n additions: [...additions.values()],\n removals: [...removals.values()]\n }\n }\n\n /**\n * @param {object} init\n * @param {API.BlockFetcher} init.blocks Block storage.\n * @param {API.EventLink<API.Operation>[]} init.head Merkle clock head.\n */\n static async create ({ blocks, head }) {\n const mblocks = new MemoryBlockstore()\n blocks = new MultiBlockFetcher(mblocks, blocks)\n\n if (!head.length) {\n const base = await ShardBlock.create()\n mblocks.putSync(base.cid, base.bytes)\n return new Batcher({\n blocks,\n head,\n entries: [],\n base,\n additions: [base],\n removals: [],\n ...Shard.configure(base.value)\n })\n }\n\n const { root, additions, removals } = await CRDT.root(blocks, head)\n for (const a of additions) {\n mblocks.putSync(a.cid, a.bytes)\n }\n\n const shards = new ShardFetcher(blocks)\n const base = await shards.get(root)\n return new Batcher({\n blocks,\n head,\n entries: base.value.entries,\n base,\n additions,\n removals,\n ...Shard.configure(base.value)\n })\n }\n}\n\n/**\n * @param {API.BlockFetcher} blocks Bucket block storage.\n * @param {API.EventLink<API.Operation>[]} head Merkle clock head.\n * @returns {Promise<API.CRDTBatcher>}\n */\nexport const create = (blocks, head) => Batcher.create({ blocks, head })\n","import { ConnectREST } from \"./connect-rest.js\";\nexport type {\n AnyBlock,\n AnyLink,\n AnyAnyLink,\n CarGroup,\n UploadDataFnParams,\n UploadMetaFnParams,\n DownloadDataFnParams,\n DownloadMetaFnParams,\n DbMeta,\n CommitOpts,\n CryptoOpts,\n StoreFactory,\n StoreOpts,\n StoreRuntime,\n TransactionMeta,\n BlobLike,\n Connection,\n TestStore,\n} from \"./types.js\";\n\nexport * from \"./store-factory.js\";\nexport * from \"./gateway.js\";\n\nimport { type CarClockHead, type Connectable, type DbMetaEventBlock } from \"./connection-base.js\";\nexport { ConnectREST, CarClockHead, Connectable, DbMetaEventBlock };\n\nexport { EncryptedBlockstore, BaseBlockstore, CompactionFetcher, type BlockFetcher, CarTransaction } from \"./transaction.js\";\nexport { Loader, Loadable } from \"./loader.js\";\nexport { DataStore, type DataSaveOpts, MetaStore, RemoteWAL, type WALState } from \"./store.js\";\nexport { parseCarFile } from \"./loader-helpers.js\";\nexport { ConnectionBase } from \"./connection-base.js\";\n","import { EventBlock, decodeEventBlock } from \"@web3-storage/pail/clock\";\nimport { EventView } from \"@web3-storage/pail/clock/api\";\nimport { MemoryBlockstore } from \"@web3-storage/pail/block\";\nimport type { Link, Version } from \"multiformats\";\nimport { Logger } from \"@adviser/cement\";\n\nimport { Falsy, throwFalsy } from \"../types.js\";\nimport { TaskManager } from \"./task-manager.js\";\nimport type { BlockstoreOpts } from \"./transaction.js\";\nimport type { UploadMetaFnParams, UploadDataFnParams, DownloadMetaFnParams, DownloadDataFnParams, Connection } from \"./types.js\";\nimport { Loadable, type Loader } from \"./loader.js\";\nimport { ensureLogger } from \"../utils.js\";\n\nexport type CarClockHead = Link<DbMetaEventBlock, number, number, Version>[];\n\nexport interface Connectable {\n readonly blockstore: {\n readonly loader?: Loader;\n readonly ebOpts: BlockstoreOpts;\n };\n readonly name?: string;\n}\n\nexport abstract class ConnectionBase implements Connection {\n // readonly ready: Promise<unknown>;\n // todo move to LRU blockstore https://github.com/web3-storage/w3clock/blob/main/src/worker/block.js\n readonly eventBlocks = new MemoryBlockstore();\n parents: CarClockHead = [];\n loader?: Loadable;\n taskManager?: TaskManager;\n loaded: Promise<void> = Promise.resolve();\n\n abstract metaUpload(bytes: Uint8Array, params: UploadMetaFnParams): Promise<Uint8Array[] | Falsy>;\n abstract dataUpload(bytes: Uint8Array, params: UploadDataFnParams, opts?: { public?: boolean }): Promise<void>;\n abstract metaDownload(params: DownloadMetaFnParams): Promise<Uint8Array[] | Falsy>;\n abstract dataDownload(params: DownloadDataFnParams): Promise<Uint8Array | Falsy>;\n\n readonly logger: Logger;\n constructor(logger: Logger) {\n this.logger = ensureLogger(logger, \"ConnectionBase\");\n }\n\n async refresh() {\n await throwFalsy(throwFalsy(this.loader).remoteMetaStore).load(\"main\");\n await (await throwFalsy(this.loader).remoteWAL())._process();\n }\n\n connect({ loader }: { loader?: Loader }) {\n if (!loader) throw this.logger.Error().Msg(\"loader is required\").AsError();\n this.connectMeta({ loader });\n this.connectStorage({ loader });\n }\n\n connectMeta({ loader }: { loader?: Loader }) {\n if (!loader) throw this.logger.Error().Msg(\"loader is required\").AsError();\n this.loader = loader;\n this.taskManager = new TaskManager(loader);\n this.onConnect();\n this.logger.Warn().Msg(\"connectMeta: connecting to remote meta store is disabled\");\n // const remote = new RemoteMetaStore(new URL(`remote://connectMeta`), this.loader.name, this, this.logger);\n // remote.onLoad(\"main\", async (metas) => {\n // if (metas) {\n // await throwFalsy(this.loader).handleDbMetasFromStore(metas);\n // }\n // });\n // this.loader.remoteMetaStore = remote;\n // this.loaded = this.loader.ready().then(async () => {\n // remote.load(\"main\").then(async () => {\n // (await throwFalsy(this.loader).remoteWAL())._process();\n // });\n // });\n }\n\n async onConnect() {\n return;\n }\n\n connectStorage({ loader }: { loader?: Loader }) {\n if (!loader) throw this.logger.Error().Msg(\"loader is required\").AsError();\n this.loader = loader;\n this.logger.Warn().Msg(\"connectStorage: connecting to remote meta store is disabled\");\n // loader.remoteCarStore = new RemoteDataStore(new URL(`remote://remoteCarStore`), this.loader.name, this, this.logger);\n // loader.remoteFileStore = new RemoteDataStore(new URL(`remote://remoteFileStore`), this.loader.name, this, this.logger);\n }\n\n async createEventBlock(bytes: Uint8Array): Promise<DbMetaEventBlock> {\n const data = {\n dbMeta: bytes,\n };\n const event = await EventBlock.create(\n data,\n this.parents as unknown as Link<EventView<{ dbMeta: Uint8Array }>, number, number, 1>[],\n );\n await this.eventBlocks.put(event.cid, event.bytes);\n return event as EventBlock<{ dbMeta: Uint8Array }>; // todo test these `as` casts\n }\n\n async decodeEventBlock(bytes: Uint8Array): Promise<DbMetaEventBlock> {\n const event = await decodeEventBlock<{ dbMeta: Uint8Array }>(bytes);\n return event as EventBlock<{ dbMeta: Uint8Array }>; // todo test these `as` casts\n }\n\n // move this stuff to connect\n // async getDashboardURL(compact = true) {\n // const baseUrl = 'https://dashboard.fireproof.storage/'\n // if (!this.loader?.remoteCarStore) return new URL('/howto', baseUrl)\n // // if (compact) {\n // // await this.compact()\n // // }\n // const currents = await this.loader?.metaStore?.load()\n // if (!currents) throw new Error(\"Can't sync empty database: save data first\")\n // if (currents.length > 1)\n // throw new Error(\"Can't sync database with split heads: make an update first\")\n // const current = currents[0]\n // const params = {\n // car: current.car.toString()\n // }\n // if (current.key) {\n // // @ts-ignore\n // params.key = current.key.toString()\n // }\n // // @ts-ignore\n // if (this.name) {\n // // @ts-ignore\n // params.name = this.name\n // }\n // const url = new URL('/import#' + new URLSearchParams(params).toString(), baseUrl)\n // console.log('Import to dashboard: ' + url.toString())\n // return url\n // }\n\n // openDashboard() {\n // void this.getDashboardURL().then(url => {\n // if (url) window.open(url.toString(), '_blank')\n // })\n // }\n}\n\nexport type DbMetaEventBlock = EventBlock<{ dbMeta: Uint8Array }>;\n","import { Logger } from \"@adviser/cement\";\nimport { DbMetaEventBlock } from \"./connection-base.js\";\nimport { AnyLink, Loader } from \"./index.js\";\nimport { ensureLogger } from \"../utils.js\";\n\ninterface TaskItem {\n readonly cid: string;\n readonly eventBlock: DbMetaEventBlock;\n retries: number;\n}\n\nexport class TaskManager {\n private readonly eventsWeHandled = new Set<string>();\n private readonly loader: Loader;\n\n private queue: TaskItem[] = [];\n private isProcessing = false;\n\n readonly logger: Logger;\n constructor(loader: Loader) {\n this.loader = loader;\n this.logger = ensureLogger(loader.logger, \"TaskManager\");\n }\n\n async handleEvent(eventBlock: DbMetaEventBlock) {\n const cid = eventBlock.cid.toString();\n const parents = eventBlock.value.parents.map((cid: AnyLink) => cid.toString());\n for (const parent of parents) {\n this.eventsWeHandled.add(parent);\n }\n this.queue.push({ cid, eventBlock, retries: 0 });\n this.queue = this.queue.filter(({ cid }) => !this.eventsWeHandled.has(cid));\n void this.processQueue();\n }\n\n private async processQueue() {\n if (this.isProcessing) return;\n this.isProcessing = true;\n const filteredQueue = this.queue.filter(({ cid }) => !this.eventsWeHandled.has(cid));\n const first = filteredQueue[0];\n if (!first) {\n return;\n }\n try {\n this.loader?.remoteMetaStore?.handleByteHeads([first.eventBlock.value.data.dbMeta]);\n this.eventsWeHandled.add(first.cid);\n this.queue = this.queue.filter(({ cid }) => !this.eventsWeHandled.has(cid));\n } catch (err) {\n if (first.retries++ > 3) {\n this.logger.Error().Str(\"cid\", first.cid).Msg(\"failed to process event block after 3 retries\");\n this.queue = this.queue.filter(({ cid }) => cid !== first.cid);\n }\n await new Promise((resolve) => setTimeout(resolve, 50));\n throw this.logger.Error().Err(err).Msg(\"failed to process event block\").AsError();\n } finally {\n this.isProcessing = false;\n if (this.queue.length > 0) {\n void this.processQueue();\n }\n }\n }\n}\n","import type { DownloadMetaFnParams, DownloadDataFnParams, UploadMetaFnParams, UploadDataFnParams } from \"./types.js\";\nimport { ConnectionBase } from \"./connection-base.js\";\nimport { ensureLogger } from \"../utils.js\";\nimport { Logger } from \"@adviser/cement\";\n\nexport class ConnectREST extends ConnectionBase {\n readonly baseUrl: URL;\n\n constructor(base: string, logger: Logger) {\n super(ensureLogger(logger, \"ConnectREST\"));\n this.baseUrl = new URL(base);\n }\n\n async dataUpload(bytes: Uint8Array, params: UploadDataFnParams) {\n // console.log('s3 dataUpload', params.car.toString())\n const carCid = params.car.toString();\n const uploadURL = new URL(`/cars/${carCid}.car`, this.baseUrl);\n\n const done = await fetch(uploadURL, { method: \"PUT\", body: bytes });\n // console.log('rest dataUpload done', params.car.toString(), done)\n if (!done.ok) {\n throw this.logger.Error().Msg(\"failed to upload data \" + done.statusText);\n }\n }\n\n async dataDownload(params: DownloadDataFnParams) {\n const { car } = params;\n const fetchFromUrl = new URL(`/cars/${car.toString()}.car`, this.baseUrl);\n const response = await fetch(fetchFromUrl);\n if (!response.ok) {\n return undefined; // throw new Error('failed to download data ' + response.statusText)\n }\n const bytes = new Uint8Array(await response.arrayBuffer());\n return bytes;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n async metaUpload(bytes: Uint8Array, params: UploadMetaFnParams) {\n // const event = await this.createEventBlock(bytes)\n // const base64String = Base64.fromUint8Array(bytes)\n // const crdtEntry = {\n // cid: event.cid.toString(),\n // data: base64String,\n // parents: this.parents.map(p => p.toString())\n // }\n // const fetchUploadUrl = new URL(\n // `?${new URLSearchParams({ type: 'meta', ...params }).toString()}`,\n // this.uploadUrl\n // )\n // const done = await fetch(fetchUploadUrl, {\n // method: 'PUT',\n // body: JSON.stringify(crdtEntry)\n // })\n // const result = await done.json()\n // if (result.status != 201) {\n // throw new Error('failed to upload data ' + JSON.parse(result.body).message)\n // }\n // this.parents = [event.cid]\n return undefined;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n async metaDownload(params: DownloadMetaFnParams) {\n // const { name, branch } = params\n // const fetchUploadUrl = new URL(`?${new URLSearchParams({ type: \"meta\", ...params }).toString()}`,this.uploadUrl)\n // const data = await fetch(fetchUploadUrl)\n // let response = await data.json()\n // if (response.status != 200) throw new Error(\"Failed to download data\")\n // response = JSON.parse(response.body).items\n // const events = await Promise.all(\n // response.map(async (element: any) => {\n // const base64String = element.data\n // const bytes = Base64.toUint8Array(base64String)\n // return { cid: element.cid, bytes }\n // })\n // )\n // const cids = events.map((e) => e.cid)\n // const uniqueParentsMap = new Map([...this.parents, ...cids].map((p) => [p.toString(), p]))\n // this.parents = Array.from(uniqueParentsMap.values())\n // return events.map((e) => e.bytes)\n return [];\n }\n}\n","import { Logger, KeyedResolvOnce } from \"@adviser/cement\";\n\nimport { dataDir } from \"../runtime/data-dir.js\";\nimport { decodeFile, encodeFile } from \"../runtime/files.js\";\nimport { Loadable } from \"./loader.js\";\nimport { DataStore, MetaStore, RemoteWAL } from \"./store.js\";\nimport { StoreOpts, StoreRuntime, TestStore } from \"./types.js\";\nimport { ensureLogger } from \"../utils.js\";\nimport { Gateway } from \"./gateway.js\";\n\nfunction ensureIsIndex(url: URL, isIndex?: string): URL {\n if (isIndex) {\n url.searchParams.set(\"index\", isIndex);\n return url;\n } else {\n url.searchParams.delete(\"index\");\n return url;\n }\n}\n\nexport function toURL(pathOrUrl: string | URL, isIndex?: string): URL {\n if (pathOrUrl instanceof URL) return ensureIsIndex(pathOrUrl, isIndex);\n try {\n const url = new URL(pathOrUrl);\n return ensureIsIndex(url, isIndex);\n } catch (e) {\n const url = new URL(`file://${pathOrUrl}`);\n return ensureIsIndex(url, isIndex);\n }\n}\n\nexport interface StoreFactoryItem {\n readonly protocol: string;\n readonly overrideBaseURL?: string; // if this set it overrides the defaultURL\n // which switches between file and indexdb\n readonly data: (logger: Logger) => Promise<Gateway>;\n readonly meta: (logger: Logger) => Promise<Gateway>;\n readonly wal: (logger: Logger) => Promise<Gateway>;\n readonly test: (logger: Logger) => Promise<TestStore>;\n}\n\nconst storeFactory = new Map<string, StoreFactoryItem>();\n\nfunction ensureName(name: string, url: URL) {\n if (!url.searchParams.has(\"name\")) {\n url.searchParams.set(\"name\", name);\n }\n}\n\nfunction buildURL(optURL: string | URL | undefined, loader: Loadable): URL {\n const storeOpts = loader.ebOpts.store;\n const obuItem = Array.from(storeFactory.values()).find((items) => items.overrideBaseURL);\n let obuUrl: URL | undefined;\n if (obuItem && obuItem.overrideBaseURL) {\n obuUrl = new URL(obuItem.overrideBaseURL);\n }\n return toURL(optURL || obuUrl || dataDir(loader.name, storeOpts.stores?.base), storeOpts.isIndex);\n}\n\nexport function registerStoreProtocol(item: StoreFactoryItem) {\n if (storeFactory.has(item.protocol)) {\n throw new Error(`protocol ${item.protocol} already registered`);\n }\n // we need to clear the overrideBaseURL if it is set\n if (item.overrideBaseURL) {\n Array.from(storeFactory.values()).forEach((items) => {\n (\n items as {\n overrideBaseURL?: string;\n }\n ).overrideBaseURL = undefined;\n });\n }\n storeFactory.set(item.protocol, item);\n return () => {\n storeFactory.delete(item.protocol);\n };\n}\n\nfunction runStoreFactory<T>(url: URL, logger: Logger, run: (item: StoreFactoryItem) => Promise<T>): Promise<T> {\n const item = storeFactory.get(url.protocol);\n if (!item) {\n throw logger\n .Error()\n .Url(url)\n .Str(\"protocol\", url.protocol)\n .Any(\"keys\", Array(storeFactory.keys()))\n .Msg(`unsupported protocol`)\n .AsError();\n }\n logger.Debug().Str(\"protocol\", url.protocol).Msg(\"run\");\n return run(item);\n}\n\nconst onceLoadDataGateway = new KeyedResolvOnce<Gateway>();\nfunction loadDataGateway(url: URL, logger: Logger) {\n return onceLoadDataGateway.get(url.protocol).once(async () => {\n return runStoreFactory(url, logger, async (item) => item.data(logger));\n });\n}\n\nconst onceDataStoreFactory = new KeyedResolvOnce<DataStore>();\nasync function dataStoreFactory(loader: Loadable): Promise<DataStore> {\n const url = buildURL(loader.ebOpts.store.stores?.data, loader);\n ensureName(loader.name, url);\n const logger = ensureLogger(loader.logger, \"dataStoreFactory\", { url: url.toString() });\n url.searchParams.set(\"store\", \"data\");\n return onceDataStoreFactory.get(url.toString()).once(async () => {\n const gateway = await loadDataGateway(url, logger);\n const store = new DataStore(loader.name, url, loader.logger, gateway);\n await store.start();\n logger.Debug().Str(\"prepared\", store.url.toString()).Msg(\"produced\");\n return store;\n });\n}\n\nconst onceLoadMetaGateway = new KeyedResolvOnce<Gateway>();\nfunction loadMetaGateway(url: URL, logger: Logger) {\n return onceLoadMetaGateway.get(url.protocol).once(async () => {\n return runStoreFactory(url, logger, async (item) => item.meta(logger));\n });\n}\n\nconst onceMetaStoreFactory = new KeyedResolvOnce<MetaStore>();\nasync function metaStoreFactory(loader: Loadable): Promise<MetaStore> {\n const url = buildURL(loader.ebOpts.store.stores?.meta, loader);\n ensureName(loader.name, url);\n const logger = ensureLogger(loader.logger, \"metaStoreFactory\", { url: () => url.toString() });\n url.searchParams.set(\"store\", \"meta\");\n return onceMetaStoreFactory.get(url.toString()).once(async () => {\n logger.Debug().Str(\"protocol\", url.protocol).Msg(\"pre-protocol switch\");\n const gateway = await loadMetaGateway(url, logger);\n const store = new MetaStore(loader.name, url, loader.logger, gateway);\n await store.start();\n return store;\n });\n}\n\nconst onceWalGateway = new KeyedResolvOnce<Gateway>();\nfunction loadWalGateway(url: URL, logger: Logger) {\n return onceWalGateway.get(url.protocol).once(async () => {\n return runStoreFactory(url, logger, async (item) => item.wal(logger));\n });\n}\n\nconst onceRemoteWalFactory = new KeyedResolvOnce<RemoteWAL>();\nasync function remoteWalFactory(loader: Loadable): Promise<RemoteWAL> {\n const url = buildURL(loader.ebOpts.store.stores?.meta, loader);\n ensureName(loader.name, url);\n const logger = ensureLogger(loader.logger, \"remoteWalFactory\", { url: url.toString() });\n url.searchParams.set(\"store\", \"wal\");\n return onceRemoteWalFactory.get(url.toString()).once(async () => {\n const gateway = await loadWalGateway(url, logger);\n logger.Debug().Str(\"prepared\", url.toString()).Msg(\"produced\");\n const store = new RemoteWAL(loader, url, loader.logger, gateway);\n await store.start();\n return store;\n });\n}\n\nexport async function testStoreFactory(url: URL, ilogger?: Logger): Promise<TestStore> {\n const logger = ensureLogger(\n {\n logger: ilogger,\n },\n \"testStoreFactory\",\n );\n return runStoreFactory(url, logger, async (item) => item.test(logger));\n}\n\nexport function toStoreRuntime(opts: StoreOpts, ilogger: Logger): StoreRuntime {\n const logger = ensureLogger(ilogger, \"toStoreRuntime\", {});\n return {\n makeMetaStore: (loader: Loadable) => {\n logger\n .Debug()\n .Str(\"fromOpts\", \"\" + !!loader.ebOpts.store.makeMetaStore)\n .Msg(\"makeMetaStore\");\n return (loader.ebOpts.store.makeMetaStore || metaStoreFactory)(loader);\n },\n makeDataStore: (loader: Loadable) => {\n logger\n .Debug()\n .Str(\"fromOpts\", \"\" + !!loader.ebOpts.store.makeDataStore)\n .Msg(\"makeDataStore\");\n return (loader.ebOpts.store.makeDataStore || dataStoreFactory)(loader);\n },\n makeRemoteWAL: (loader: Loadable) => {\n logger\n .Debug()\n .Str(\"fromOpts\", \"\" + !!loader.ebOpts.store.makeRemoteWAL)\n .Msg(\"makeRemoteWAL\");\n return (loader.ebOpts.store.makeRemoteWAL || remoteWalFactory)(loader);\n },\n\n encodeFile: opts.encodeFile || encodeFile,\n decodeFile: opts.decodeFile || decodeFile,\n };\n}\n\nregisterStoreProtocol({\n protocol: \"file:\",\n data: async (logger) => {\n const { FileDataGateway } = await import(\"../runtime/store-file.js\");\n return new FileDataGateway(logger);\n },\n meta: async (logger) => {\n const { FileMetaGateway } = await import(\"../runtime/store-file.js\");\n return new FileMetaGateway(logger);\n },\n wal: async (logger) => {\n const { FileWALGateway } = await import(\"../runtime/store-file.js\");\n return new FileWALGateway(logger);\n },\n test: async (logger) => {\n const { FileTestStore } = await import(\"../runtime/store-file.js\");\n return new FileTestStore(logger);\n },\n});\n\nregisterStoreProtocol({\n protocol: \"indexdb:\",\n data: async (logger) => {\n const { IndexDBDataGateway } = await import(\"../runtime/store-indexdb.js\");\n return new IndexDBDataGateway(logger);\n },\n meta: async (logger) => {\n const { IndexDBMetaGateway } = await import(\"../runtime/store-indexdb.js\");\n return new IndexDBMetaGateway(logger);\n },\n wal: async (logger) => {\n const { IndexDBMetaGateway } = await import(\"../runtime/store-indexdb.js\");\n return new IndexDBMetaGateway(logger);\n },\n test: async (logger) => {\n const { IndexDBTestStore } = await import(\"../runtime/store-indexdb.js\");\n return new IndexDBTestStore(logger);\n },\n});\n\nregisterStoreProtocol({\n protocol: \"sqlite:\",\n data: async (logger) => {\n const { SQLDataGateway } = await import(\"../runtime/store-sql/store-sql.js\");\n return new SQLDataGateway(logger);\n },\n meta: async (logger) => {\n const { SQLMetaGateway } = await import(\"../runtime/store-sql/store-sql.js\");\n return new SQLMetaGateway(logger);\n },\n wal: async (logger) => {\n const { SQLWalGateway } = await import(\"../runtime/store-sql/store-sql.js\");\n return new SQLWalGateway(logger);\n },\n test: async (logger) => {\n const { SQLTestStore } = await import(\"../runtime/store-sql/store-sql.js\");\n return new SQLTestStore(logger);\n },\n});\n","/*\nHow it works:\n`this.#head` is an instance of `Node` which keeps track of its current value and nests another instance of `Node` that keeps the value that comes after it. When a value is provided to `.enqueue()`, the code needs to iterate through `this.#head`, going deeper and deeper to find the last value. However, iterating through every single item is slow. This problem is solved by saving a reference to the last value as `this.#tail` so that it can reference it to add a new value.\n*/\n\nclass Node {\n\tvalue;\n\tnext;\n\n\tconstructor(value) {\n\t\tthis.value = value;\n\t}\n}\n\nexport default class Queue {\n\t#head;\n\t#tail;\n\t#size;\n\n\tconstructor() {\n\t\tthis.clear();\n\t}\n\n\tenqueue(value) {\n\t\tconst node = new Node(value);\n\n\t\tif (this.#head) {\n\t\t\tthis.#tail.next = node;\n\t\t\tthis.#tail = node;\n\t\t} else {\n\t\t\tthis.#head = node;\n\t\t\tthis.#tail = node;\n\t\t}\n\n\t\tthis.#size++;\n\t}\n\n\tdequeue() {\n\t\tconst current = this.#head;\n\t\tif (!current) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#head = this.#head.next;\n\t\tthis.#size--;\n\t\treturn current.value;\n\t}\n\n\tclear() {\n\t\tthis.#head = undefined;\n\t\tthis.#tail = undefined;\n\t\tthis.#size = 0;\n\t}\n\n\tget size() {\n\t\treturn this.#size;\n\t}\n\n\t* [Symbol.iterator]() {\n\t\tlet current = this.#head;\n\n\t\twhile (current) {\n\t\t\tyield current.value;\n\t\t\tcurrent = current.next;\n\t\t}\n\t}\n}\n","export const AsyncResource = {\n\tbind(fn, _type, thisArg) {\n\t\treturn fn.bind(thisArg);\n\t},\n};\n\nexport class AsyncLocalStorage {\n\tgetStore() {\n\t\treturn undefined;\n\t}\n\n\trun(_store, callback) {\n\t\treturn callback();\n\t}\n}\n","import Queue from 'yocto-queue';\nimport {AsyncResource} from '#async_hooks';\n\nexport default function pLimit(concurrency) {\n\tif (!((Number.isInteger(concurrency) || concurrency === Number.POSITIVE_INFINITY) && concurrency > 0)) {\n\t\tthrow new TypeError('Expected `concurrency` to be a number from 1 and up');\n\t}\n\n\tconst queue = new Queue();\n\tlet activeCount = 0;\n\n\tconst next = () => {\n\t\tactiveCount--;\n\n\t\tif (queue.size > 0) {\n\t\t\tqueue.dequeue()();\n\t\t}\n\t};\n\n\tconst run = async (function_, resolve, arguments_) => {\n\t\tactiveCount++;\n\n\t\tconst result = (async () => function_(...arguments_))();\n\n\t\tresolve(result);\n\n\t\ttry {\n\t\t\tawait result;\n\t\t} catch {}\n\n\t\tnext();\n\t};\n\n\tconst enqueue = (function_, resolve, arguments_) => {\n\t\tqueue.enqueue(\n\t\t\tAsyncResource.bind(run.bind(undefined, function_, resolve, arguments_)),\n\t\t);\n\n\t\t(async () => {\n\t\t\t// This function needs to wait until the next microtask before comparing\n\t\t\t// `activeCount` to `concurrency`, because `activeCount` is updated asynchronously\n\t\t\t// when the run function is dequeued and called. The comparison in the if-statement\n\t\t\t// needs to happen asynchronously as well to get an up-to-date value for `activeCount`.\n\t\t\tawait Promise.resolve();\n\n\t\t\tif (activeCount < concurrency && queue.size > 0) {\n\t\t\t\tqueue.dequeue()();\n\t\t\t}\n\t\t})();\n\t};\n\n\tconst generator = (function_, ...arguments_) => new Promise(resolve => {\n\t\tenqueue(function_, resolve, arguments_);\n\t});\n\n\tObject.defineProperties(generator, {\n\t\tactiveCount: {\n\t\t\tget: () => activeCount,\n\t\t},\n\t\tpendingCount: {\n\t\t\tget: () => queue.size,\n\t\t},\n\t\tclearQueue: {\n\t\t\tvalue() {\n\t\t\t\tqueue.clear();\n\t\t\t},\n\t\t},\n\t});\n\n\treturn generator;\n}\n","import pLimit from \"p-limit\";\nimport { format, parse, ToString } from \"@ipld/dag-json\";\nimport { Logger, ResolveOnce, Result } from \"@adviser/cement\";\n\nimport type { AnyBlock, AnyLink, CommitOpts, DbMeta } from \"./types.js\";\nimport { Falsy, throwFalsy } from \"../types.js\";\nimport { Gateway, isNotFoundError } from \"./gateway.js\";\nimport { ensureLogger, exception2Result } from \"../utils.js\";\nimport { guardVersion } from \"../runtime/store-indexdb.js\";\nimport { carLogIncludesGroup, Loadable } from \"./loader.js\";\nimport { CommitQueue } from \"./commit-queue.js\";\n\n// const match = PACKAGE_VERSION.match(/^([^.]*\\.[^.]*)/);\n// if (!match) throw new Error(\"invalid version: \" + PACKAGE_VERSION);\n// export const STORAGE_VERSION = match[0];\n\nabstract class VersionedStore {\n // readonly STORAGE_VERSION: string;\n readonly name: string;\n readonly url: URL;\n readonly logger: Logger;\n constructor(name: string, url: URL, logger: Logger) {\n this.name = name;\n this.url = url;\n this.logger = logger;\n // const sv = url.searchParams.get(\"version\");\n // if (!sv) throw this.logger.Error().Str(\"url\", url.toString()).Msg(`version not found`);\n // this.STORAGE_VERSION = sv;\n }\n\n readonly _onStarted: (() => void)[] = [];\n onStarted(fn: () => void) {\n this._onStarted.push(fn);\n }\n abstract start(): Promise<Result<void>>;\n\n readonly _onClosed: (() => void)[] = [];\n onClosed(fn: () => void) {\n this._onClosed.push(fn);\n }\n abstract close(): Promise<Result<void>>;\n}\n\nconst textEncoder = new TextEncoder();\nconst textDecoder = new TextDecoder();\n\nexport class MetaStore extends VersionedStore {\n readonly tag: string = \"header-base\";\n\n readonly gateway: Gateway;\n\n constructor(name: string, url: URL, logger: Logger, gateway: Gateway) {\n super(name, url, ensureLogger(logger, \"MetaStore\", {}));\n this.gateway = gateway;\n }\n\n makeHeader({ cars, key }: DbMeta): ToString<DbMeta> {\n const toEncode: DbMeta = { cars };\n if (key) toEncode.key = key;\n return format(toEncode);\n }\n\n parseHeader(headerData: ToString<DbMeta>): DbMeta {\n const got = parse<DbMeta>(headerData);\n return got;\n }\n\n async start(): Promise<Result<void>> {\n this.logger.Debug().Msg(\"starting\");\n const res = await this.gateway.start(this.url);\n if (res.isErr()) {\n return res;\n }\n this._onStarted.forEach((fn) => fn());\n return guardVersion(this.url);\n }\n\n async load(branch?: string): Promise<DbMeta[] | Falsy> {\n this.logger\n .Debug()\n .Str(\"branch\", branch || \"\")\n .Msg(\"loading\");\n const url = await this.gateway.buildUrl(this.url, branch || \"main\");\n if (url.isErr()) {\n throw this.logger\n .Error()\n .Err(url.Err())\n .Str(\"branch\", branch || \"\")\n .Str(\"url\", this.url.toString())\n .Msg(\"got error from gateway.buildUrl\")\n .AsError();\n }\n const bytes = await this.gateway.get(url.Ok());\n if (bytes.isErr()) {\n if (isNotFoundError(bytes)) {\n return undefined;\n }\n throw this.logger.Error().Err(bytes.Err()).Msg(\"gateway get\").AsError();\n }\n try {\n return [this.parseHeader(textDecoder.decode(bytes.Ok()))];\n } catch (e) {\n throw this.logger.Error().Err(e).Msg(\"parseHeader\").AsError();\n }\n }\n\n async save(meta: DbMeta, branch = \"main\") {\n this.logger.Debug().Str(\"branch\", branch).Any(\"meta\", meta).Msg(\"saving meta\");\n const bytes = this.makeHeader(meta);\n const url = await this.gateway.buildUrl(this.url, branch);\n if (url.isErr()) {\n throw this.logger.Error().Err(url.Err()).Str(\"branch\", branch).Url(this.url).Msg(\"got error from gateway.buildUrl\").AsError();\n }\n const res = await this.gateway.put(url.Ok(), textEncoder.encode(bytes));\n if (res.isErr()) {\n throw this.logger.Error().Err(res.Err()).Msg(\"got error from gateway.put\").AsError();\n }\n return res.Ok();\n }\n\n async close(): Promise<Result<void>> {\n await this.gateway.close(this.url);\n this._onClosed.forEach((fn) => fn());\n return Result.Ok(undefined);\n }\n async destroy(): Promise<Result<void>> {\n return this.gateway.destroy(this.url);\n }\n}\n\nexport interface DataSaveOpts {\n readonly public: boolean;\n}\n\nexport class DataStore extends VersionedStore {\n readonly tag: string = \"car-base\";\n readonly gateway: Gateway;\n\n constructor(name: string, url: URL, logger: Logger, gateway: Gateway) {\n super(\n name,\n url,\n ensureLogger(logger, \"DataStore\", {\n url: () => url.toString(),\n }),\n );\n this.gateway = gateway;\n }\n\n async start(): Promise<Result<void>> {\n this.logger.Debug().Msg(\"starting-gateway\");\n const res = await this.gateway.start(this.url);\n if (res.isErr()) {\n this.logger.Error().Err(res.Err()).Msg(\"started-gateway\");\n return res;\n }\n this._onStarted.forEach((fn) => fn());\n const version = guardVersion(this.url);\n if (version.isErr()) {\n this.logger.Error().Err(res.Err()).Msg(\"guardVersion\");\n await this.close();\n return version;\n }\n this.logger.Debug().Msg(\"started\");\n return version;\n }\n\n async load(cid: AnyLink): Promise<AnyBlock> {\n this.logger.Debug().Any(\"cid\", cid).Msg(\"loading\");\n const url = await this.gateway.buildUrl(this.url, cid.toString());\n if (url.isErr()) {\n throw this.logger.Error().Err(url.Err()).Str(\"cid\", cid.toString()).Msg(\"got error from gateway.buildUrl\").AsError();\n }\n const res = await this.gateway.get(url.Ok());\n if (res.isErr()) {\n throw res.Err();\n }\n return { cid, bytes: res.Ok() };\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n async save(car: AnyBlock, opts?: DataSaveOpts): Promise</*AnyLink | */ void> {\n this.logger.Debug().Any(\"cid\", car.cid.toString()).Msg(\"saving\");\n const url = await this.gateway.buildUrl(this.url, car.cid.toString());\n if (url.isErr()) {\n throw this.logger.Error().Err(url.Err()).Ref(\"cid\", car.cid).Msg(\"got error from gateway.buildUrl\").AsError();\n }\n const res = await this.gateway.put(url.Ok(), car.bytes);\n if (res.isErr()) {\n throw this.logger.Error().Err(res.Err()).Msg(\"got error from gateway.put\").AsError();\n }\n return res.Ok();\n }\n async remove(cid: AnyLink): Promise<Result<void>> {\n const url = await this.gateway.buildUrl(this.url, cid.toString());\n if (url.isErr()) {\n return url;\n }\n return this.gateway.delete(url.Ok());\n }\n async close(): Promise<Result<void>> {\n await this.gateway.close(this.url);\n this._onClosed.forEach((fn) => fn());\n return Result.Ok(undefined);\n }\n destroy(): Promise<Result<void>> {\n return this.gateway.destroy(this.url);\n }\n}\n\nexport interface WALState {\n operations: DbMeta[];\n noLoaderOps: DbMeta[];\n fileOperations: {\n readonly cid: AnyLink;\n readonly public: boolean;\n }[];\n}\n\nexport class RemoteWAL extends VersionedStore {\n readonly tag: string = \"rwal-base\";\n\n readonly loader: Loadable;\n\n readonly _ready = new ResolveOnce<void>();\n\n private async ready() {\n return this._ready.once(async () => {\n const walState = await this.load().catch((e) => {\n this.logger.Error().Any(\"error\", e).Msg(\"error loading wal\");\n return undefined;\n });\n if (!walState) {\n this.walState.operations = [];\n this.walState.fileOperations = [];\n } else {\n this.walState.operations = walState.operations || [];\n this.walState.fileOperations = walState.fileOperations || [];\n }\n });\n }\n\n walState: WALState = { operations: [], noLoaderOps: [], fileOperations: [] };\n readonly processing: Promise<void> | undefined = undefined;\n readonly processQueue: CommitQueue<void> = new CommitQueue<void>();\n\n readonly gateway: Gateway;\n\n constructor(loader: Loadable, url: URL, logger: Logger, gateway: Gateway) {\n super(loader.name, url, ensureLogger(logger, \"RemoteWAL\"));\n this.loader = loader;\n this.gateway = gateway;\n }\n\n async enqueue(dbMeta: DbMeta, opts: CommitOpts) {\n await this.ready();\n if (opts.noLoader) {\n this.walState.noLoaderOps.push(dbMeta);\n } else {\n this.walState.operations.push(dbMeta);\n }\n await this.save(this.walState);\n void this._process();\n }\n\n async enqueueFile(fileCid: AnyLink, publicFile = false) {\n await this.ready();\n this.walState.fileOperations.push({ cid: fileCid, public: publicFile });\n // await this.save(this.walState)\n }\n\n async _process() {\n await this.ready();\n if (!this.loader.remoteCarStore) return;\n await this.processQueue.enqueue(async () => {\n await this._doProcess();\n if (this.walState.operations.length || this.walState.fileOperations.length || this.walState.noLoaderOps.length) {\n setTimeout(() => void this._process(), 0);\n }\n });\n }\n\n async _doProcess() {\n if (!this.loader.remoteCarStore) return;\n const rmlp = (async () => {\n const operations = [...this.walState.operations];\n const fileOperations = [...this.walState.fileOperations];\n const uploads: Promise<void>[] = [];\n const noLoaderOps = [...this.walState.noLoaderOps];\n const limit = pLimit(5);\n\n if (operations.length + fileOperations.length + noLoaderOps.length === 0) return;\n\n for (const dbMeta of noLoaderOps) {\n const uploadP = limit(async () => {\n for (const cid of dbMeta.cars) {\n const car = await (await this.loader.carStore()).load(cid);\n if (!car) {\n if (carLogIncludesGroup(this.loader.carLog, dbMeta.cars))\n throw this.logger.Error().Ref(\"cid\", cid).Msg(\"missing local car\").AsError();\n } else {\n await throwFalsy(this.loader.remoteCarStore).save(car);\n }\n this.walState.noLoaderOps = this.walState.noLoaderOps.filter((op) => op !== dbMeta);\n }\n });\n uploads.push(uploadP);\n }\n\n for (const dbMeta of operations) {\n const uploadP = limit(async () => {\n for (const cid of dbMeta.cars) {\n const car = await (await this.loader.carStore()).load(cid).catch(() => null);\n if (!car) {\n if (carLogIncludesGroup(this.loader.carLog, dbMeta.cars))\n throw this.logger.Error().Ref(\"cid\", cid).Msg(`missing local car`).AsError();\n } else {\n await throwFalsy(this.loader.remoteCarStore).save(car);\n }\n }\n this.walState.operations = this.walState.operations.filter((op) => op !== dbMeta);\n });\n uploads.push(uploadP);\n }\n\n if (fileOperations.length) {\n const dbLoader = this.loader;\n for (const { cid: fileCid, public: publicFile } of fileOperations) {\n const uploadP = limit(async () => {\n const fileBlock = await (await dbLoader.fileStore()).load(fileCid); // .catch(() => false)\n await dbLoader.remoteFileStore?.save(fileBlock, { public: publicFile });\n this.walState.fileOperations = this.walState.fileOperations.filter((op) => op.cid !== fileCid);\n });\n uploads.push(uploadP);\n }\n }\n\n try {\n const res = await Promise.allSettled(uploads);\n const errors = res.filter((r) => r.status === \"rejected\") as PromiseRejectedResult[];\n if (errors.length) {\n throw this.logger\n .Error()\n .Any(\n \"errors\",\n errors.map((e) => e.reason),\n )\n .Msg(\"error uploading\")\n .AsError();\n\n errors[0].reason;\n }\n if (operations.length) {\n const lastOp = operations[operations.length - 1];\n // console.log('saving remote meta', lastOp.car.toString())\n await this.loader.remoteMetaStore?.save(lastOp).catch((e: Error) => {\n this.walState.operations.push(lastOp);\n throw this.logger.Error().Any(\"error\", e).Msg(\"error saving remote meta\").AsError();\n });\n }\n } finally {\n await this.save(this.walState);\n }\n })();\n // this.loader.remoteMetaLoading = rmlp;\n await rmlp;\n }\n\n async start() {\n const res = await this.gateway.start(this.url);\n if (res.isErr()) {\n return res;\n }\n const ver = guardVersion(this.url);\n if (ver.isErr()) {\n await this.close();\n return ver;\n }\n const ready = await exception2Result(() => this.ready());\n this._onStarted.forEach((fn) => fn());\n if (ready.isErr()) {\n await this.close();\n return ready;\n }\n return ready;\n }\n\n async load(): Promise<WALState | Falsy> {\n this.logger.Debug().Msg(\"loading\");\n const filepath = await this.gateway.buildUrl(this.url, \"main\");\n if (filepath.isErr()) {\n throw this.logger.Error().Err(filepath.Err()).Str(\"url\", this.url.toString()).Msg(\"error building url\").AsError();\n }\n const bytes = await this.gateway.get(filepath.Ok());\n if (bytes.isErr()) {\n if (isNotFoundError(bytes)) {\n return undefined;\n }\n throw this.logger.Error().Err(bytes.Err()).Msg(\"error get\").AsError();\n }\n try {\n return bytes && parse<WALState>(textDecoder.decode(bytes.Ok()));\n } catch (e) {\n throw this.logger.Error().Err(e).Msg(\"error parse\").AsError();\n }\n }\n\n async save(state: WALState) {\n const filepath = await this.gateway.buildUrl(this.url, \"main\");\n if (filepath.isErr()) {\n throw this.logger.Error().Err(filepath.Err()).Str(\"url\", this.url.toString()).Msg(\"error building url\").AsError();\n }\n let encoded: ToString<WALState>;\n try {\n encoded = format(state);\n } catch (e) {\n throw this.logger.Error().Err(e).Any(\"state\", state).Msg(\"error format\").AsError();\n }\n const res = await this.gateway.put(filepath.Ok(), textEncoder.encode(encoded));\n if (res.isErr()) {\n throw this.logger.Error().Err(res.Err()).Str(\"filePath\", filepath.Ok().toString()).Msg(\"error saving\").AsError();\n }\n }\n\n async close() {\n await this.gateway.close(this.url);\n this._onClosed.forEach((fn) => fn());\n return Result.Ok(undefined);\n }\n\n destroy() {\n return this.gateway.destroy(this.url);\n }\n}\n","import { decode as decodeDagCbor } from '@ipld/dag-cbor'\nimport { CID } from 'multiformats/cid'\nimport * as Digest from 'multiformats/hashes/digest'\nimport { CIDV0_BYTES, decodeV2Header, decodeVarint, getMultihashLength, V2_HEADER_LENGTH } from './decoder-common.js'\nimport { CarV1HeaderOrV2Pragma } from './header-validator.js'\n\n/**\n * @typedef {import('./api').Block} Block\n * @typedef {import('./api').BlockHeader} BlockHeader\n * @typedef {import('./api').BlockIndex} BlockIndex\n * @typedef {import('./coding').BytesBufferReader} BytesBufferReader\n * @typedef {import('./coding').CarHeader} CarHeader\n * @typedef {import('./coding').CarV2Header} CarV2Header\n * @typedef {import('./coding').CarV2FixedHeader} CarV2FixedHeader\n */\n\n/**\n * Reads header data from a `BytesReader`. The header may either be in the form\n * of a `CarHeader` or `CarV2Header` depending on the CAR being read.\n *\n * @name decoder.readHeader(reader)\n * @param {BytesBufferReader} reader\n * @param {number} [strictVersion]\n * @returns {CarHeader | CarV2Header}\n */\nexport function readHeader (reader, strictVersion) {\n const length = decodeVarint(reader.upTo(8), reader)\n if (length === 0) {\n throw new Error('Invalid CAR header (zero length)')\n }\n const header = reader.exactly(length, true)\n const block = decodeDagCbor(header)\n if (CarV1HeaderOrV2Pragma.toTyped(block) === undefined) {\n throw new Error('Invalid CAR header format')\n }\n if ((block.version !== 1 && block.version !== 2) || (strictVersion !== undefined && block.version !== strictVersion)) {\n throw new Error(`Invalid CAR version: ${block.version}${strictVersion !== undefined ? ` (expected ${strictVersion})` : ''}`)\n }\n if (block.version === 1) {\n // CarV1HeaderOrV2Pragma makes roots optional, let's make it mandatory\n if (!Array.isArray(block.roots)) {\n throw new Error('Invalid CAR header format')\n }\n return block\n }\n // version 2\n if (block.roots !== undefined) {\n throw new Error('Invalid CAR header format')\n }\n const v2Header = decodeV2Header(reader.exactly(V2_HEADER_LENGTH, true))\n reader.seek(v2Header.dataOffset - reader.pos)\n const v1Header = readHeader(reader, 1)\n return Object.assign(v1Header, v2Header)\n}\n\n/**\n * Reads CID sync\n *\n * @param {BytesBufferReader} reader\n * @returns {CID}\n */\nfunction readCid (reader) {\n const first = reader.exactly(2, false)\n if (first[0] === CIDV0_BYTES.SHA2_256 && first[1] === CIDV0_BYTES.LENGTH) {\n // cidv0 32-byte sha2-256\n const bytes = reader.exactly(34, true)\n const multihash = Digest.decode(bytes)\n return CID.create(0, CIDV0_BYTES.DAG_PB, multihash)\n }\n\n const version = decodeVarint(reader.upTo(8), reader)\n if (version !== 1) {\n throw new Error(`Unexpected CID version (${version})`)\n }\n const codec = decodeVarint(reader.upTo(8), reader)\n const bytes = reader.exactly(getMultihashLength(reader.upTo(8)), true)\n const multihash = Digest.decode(bytes)\n return CID.create(version, codec, multihash)\n}\n\n/**\n * Reads the leading data of an individual block from CAR data from a\n * `BytesBufferReader`. Returns a `BlockHeader` object which contains\n * `{ cid, length, blockLength }` which can be used to either index the block\n * or read the block binary data.\n *\n * @name async decoder.readBlockHead(reader)\n * @param {BytesBufferReader} reader\n * @returns {BlockHeader}\n */\nexport function readBlockHead (reader) {\n // length includes a CID + Binary, where CID has a variable length\n // we have to deal with\n const start = reader.pos\n let length = decodeVarint(reader.upTo(8), reader)\n if (length === 0) {\n throw new Error('Invalid CAR section (zero length)')\n }\n length += (reader.pos - start)\n const cid = readCid(reader)\n const blockLength = length - Number(reader.pos - start) // subtract CID length\n\n return { cid, length, blockLength }\n}\n\n/**\n * Returns Car header and blocks from a Uint8Array\n *\n * @param {Uint8Array} bytes\n * @returns {{ header : CarHeader | CarV2Header , blocks: Block[]}}\n */\nexport function fromBytes (bytes) {\n let reader = bytesReader(bytes)\n const header = readHeader(reader)\n if (header.version === 2) {\n const v1length = reader.pos - header.dataOffset\n reader = limitReader(reader, header.dataSize - v1length)\n }\n\n const blocks = []\n while (reader.upTo(8).length > 0) {\n const { cid, blockLength } = readBlockHead(reader)\n\n blocks.push({ cid, bytes: reader.exactly(blockLength, true) })\n }\n\n return {\n header, blocks\n }\n}\n\n/**\n * Creates a `BytesBufferReader` from a `Uint8Array`.\n *\n * @name decoder.bytesReader(bytes)\n * @param {Uint8Array} bytes\n * @returns {BytesBufferReader}\n */\nexport function bytesReader (bytes) {\n let pos = 0\n\n /** @type {BytesBufferReader} */\n return {\n upTo (length) {\n return bytes.subarray(pos, pos + Math.min(length, bytes.length - pos))\n },\n\n exactly (length, seek = false) {\n if (length > bytes.length - pos) {\n throw new Error('Unexpected end of data')\n }\n\n const out = bytes.subarray(pos, pos + length)\n if (seek) {\n pos += length\n }\n return out\n },\n\n seek (length) {\n pos += length\n },\n\n get pos () {\n return pos\n }\n }\n}\n\n/**\n * Wraps a `BytesBufferReader` in a limiting `BytesBufferReader` which limits maximum read\n * to `byteLimit` bytes. It _does not_ update `pos` of the original\n * `BytesBufferReader`.\n *\n * @name decoder.limitReader(reader, byteLimit)\n * @param {BytesBufferReader} reader\n * @param {number} byteLimit\n * @returns {BytesBufferReader}\n */\nexport function limitReader (reader, byteLimit) {\n let bytesRead = 0\n\n /** @type {BytesBufferReader} */\n return {\n upTo (length) {\n let bytes = reader.upTo(length)\n if (bytes.length + bytesRead > byteLimit) {\n bytes = bytes.subarray(0, byteLimit - bytesRead)\n }\n return bytes\n },\n\n exactly (length, seek = false) {\n const bytes = reader.exactly(length, seek)\n if (bytes.length + bytesRead > byteLimit) {\n throw new Error('Unexpected end of data')\n }\n if (seek) {\n bytesRead += length\n }\n return bytes\n },\n\n seek (length) {\n bytesRead += length\n reader.seek(length)\n },\n\n get pos () {\n return reader.pos\n }\n }\n}\n","import varint from 'varint'\n\nexport const CIDV0_BYTES = {\n SHA2_256: 0x12,\n LENGTH: 0x20,\n DAG_PB: 0x70\n}\n\nexport const V2_HEADER_LENGTH = /* characteristics */ 16 /* v1 offset */ + 8 /* v1 size */ + 8 /* index offset */ + 8\n\n/**\n * Decodes varint and seeks the buffer\n *\n * ```js\n * // needs bytes to be read first\n * const bytes = reader.upTo(8) // maybe async\n * ```\n *\n * @param {Uint8Array} bytes\n * @param {import('./coding').Seekable} seeker\n * @returns {number}\n */\nexport function decodeVarint (bytes, seeker) {\n if (!bytes.length) {\n throw new Error('Unexpected end of data')\n }\n const i = varint.decode(bytes)\n seeker.seek(/** @type {number} */(varint.decode.bytes))\n return i\n}\n\n/**\n * Decode v2 header\n *\n * ```js\n * // needs bytes to be read first\n * const bytes = reader.exactly(V2_HEADER_LENGTH, true) // maybe async\n * ```\n *\n * @param {Uint8Array} bytes\n * @returns {import('./coding').CarV2FixedHeader}\n */\nexport function decodeV2Header (bytes) {\n const dv = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength)\n let offset = 0\n const header = {\n version: 2,\n /** @type {[bigint, bigint]} */\n characteristics: [\n dv.getBigUint64(offset, true),\n dv.getBigUint64(offset += 8, true)\n ],\n dataOffset: Number(dv.getBigUint64(offset += 8, true)),\n dataSize: Number(dv.getBigUint64(offset += 8, true)),\n indexOffset: Number(dv.getBigUint64(offset += 8, true))\n }\n return header\n}\n\n/**\n * Checks the length of the multihash to be read afterwards\n *\n * ```js\n * // needs bytes to be read first\n * const bytes = reader.upTo(8) // maybe async\n * ```\n *\n * @param {Uint8Array} bytes\n */\nexport function getMultihashLength (bytes) {\n // | code | length | .... |\n // where both code and length are varints, so we have to decode\n // them first before we can know total length\n\n varint.decode(bytes) // code\n const codeLength = /** @type {number} */(varint.decode.bytes)\n const length = varint.decode(bytes.subarray(varint.decode.bytes))\n const lengthLength = /** @type {number} */(varint.decode.bytes)\n const mhLength = codeLength + lengthLength + length\n\n return mhLength\n}\n","/** Auto-generated with @ipld/schema@v4.2.0 at Thu Sep 14 2023 from IPLD Schema:\n *\n * # CarV1HeaderOrV2Pragma is a more relaxed form, and can parse {version:x} where\n * # roots are optional. This is typically useful for the {verison:2} CARv2\n * # pragma.\n *\n * type CarV1HeaderOrV2Pragma struct {\n * \troots optional [&Any]\n * \t# roots is _not_ optional for CarV1 but we defer that check within code to\n * \t# gracefully handle the V2 case where it's just {version:X}\n * \tversion Int\n * }\n *\n * # CarV1Header is the strict form of the header, and requires roots to be\n * # present. This is compatible with the CARv1 specification.\n *\n * # type CarV1Header struct {\n * # \troots [&Any]\n * # \tversion Int\n * # }\n *\n */\n\nconst Kinds = {\n Null: /** @returns {undefined|null} */ (/** @type {any} */ obj) => obj === null ? obj : undefined,\n Int: /** @returns {undefined|number} */ (/** @type {any} */ obj) => Number.isInteger(obj) ? obj : undefined,\n Float: /** @returns {undefined|number} */ (/** @type {any} */ obj) => typeof obj === 'number' && Number.isFinite(obj) ? obj : undefined,\n String: /** @returns {undefined|string} */ (/** @type {any} */ obj) => typeof obj === 'string' ? obj : undefined,\n Bool: /** @returns {undefined|boolean} */ (/** @type {any} */ obj) => typeof obj === 'boolean' ? obj : undefined,\n Bytes: /** @returns {undefined|Uint8Array} */ (/** @type {any} */ obj) => obj instanceof Uint8Array ? obj : undefined,\n Link: /** @returns {undefined|object} */ (/** @type {any} */ obj) => obj !== null && typeof obj === 'object' && obj.asCID === obj ? obj : undefined,\n List: /** @returns {undefined|Array<any>} */ (/** @type {any} */ obj) => Array.isArray(obj) ? obj : undefined,\n Map: /** @returns {undefined|object} */ (/** @type {any} */ obj) => obj !== null && typeof obj === 'object' && obj.asCID !== obj && !Array.isArray(obj) && !(obj instanceof Uint8Array) ? obj : undefined\n}\n/** @type {{ [k in string]: (obj:any)=>undefined|any}} */\nconst Types = {\n 'CarV1HeaderOrV2Pragma > roots (anon) > valueType (anon)': Kinds.Link,\n 'CarV1HeaderOrV2Pragma > roots (anon)': /** @returns {undefined|any} */ (/** @type {any} */ obj) => {\n if (Kinds.List(obj) === undefined) {\n return undefined\n }\n for (let i = 0; i < obj.length; i++) {\n let v = obj[i]\n v = Types['CarV1HeaderOrV2Pragma > roots (anon) > valueType (anon)'](v)\n if (v === undefined) {\n return undefined\n }\n if (v !== obj[i]) {\n const ret = obj.slice(0, i)\n for (let j = i; j < obj.length; j++) {\n let v = obj[j]\n v = Types['CarV1HeaderOrV2Pragma > roots (anon) > valueType (anon)'](v)\n if (v === undefined) {\n return undefined\n }\n ret.push(v)\n }\n return ret\n }\n }\n return obj\n },\n Int: Kinds.Int,\n CarV1HeaderOrV2Pragma: /** @returns {undefined|any} */ (/** @type {any} */ obj) => {\n if (Kinds.Map(obj) === undefined) {\n return undefined\n }\n const entries = Object.entries(obj)\n /** @type {{[k in string]: any}} */\n let ret = obj\n let requiredCount = 1\n for (let i = 0; i < entries.length; i++) {\n const [key, value] = entries[i]\n switch (key) {\n case 'roots':\n {\n const v = Types['CarV1HeaderOrV2Pragma > roots (anon)'](obj[key])\n if (v === undefined) {\n return undefined\n }\n if (v !== value || ret !== obj) {\n if (ret === obj) {\n /** @type {{[k in string]: any}} */\n ret = {}\n for (let j = 0; j < i; j++) {\n ret[entries[j][0]] = entries[j][1]\n }\n }\n ret.roots = v\n }\n }\n break\n case 'version':\n {\n requiredCount--\n const v = Types.Int(obj[key])\n if (v === undefined) {\n return undefined\n }\n if (v !== value || ret !== obj) {\n if (ret === obj) {\n /** @type {{[k in string]: any}} */\n ret = {}\n for (let j = 0; j < i; j++) {\n ret[entries[j][0]] = entries[j][1]\n }\n }\n ret.version = v\n }\n }\n break\n default:\n return undefined\n }\n }\n\n if (requiredCount > 0) {\n return undefined\n }\n return ret\n }\n}\n/** @type {{ [k in string]: (obj:any)=>undefined|any}} */\nconst Reprs = {\n 'CarV1HeaderOrV2Pragma > roots (anon) > valueType (anon)': Kinds.Link,\n 'CarV1HeaderOrV2Pragma > roots (anon)': /** @returns {undefined|any} */ (/** @type {any} */ obj) => {\n if (Kinds.List(obj) === undefined) {\n return undefined\n }\n for (let i = 0; i < obj.length; i++) {\n let v = obj[i]\n v = Reprs['CarV1HeaderOrV2Pragma > roots (anon) > valueType (anon)'](v)\n if (v === undefined) {\n return undefined\n }\n if (v !== obj[i]) {\n const ret = obj.slice(0, i)\n for (let j = i; j < obj.length; j++) {\n let v = obj[j]\n v = Reprs['CarV1HeaderOrV2Pragma > roots (anon) > valueType (anon)'](v)\n if (v === undefined) {\n return undefined\n }\n ret.push(v)\n }\n return ret\n }\n }\n return obj\n },\n Int: Kinds.Int,\n CarV1HeaderOrV2Pragma: /** @returns {undefined|any} */ (/** @type {any} */ obj) => {\n if (Kinds.Map(obj) === undefined) {\n return undefined\n }\n const entries = Object.entries(obj)\n /** @type {{[k in string]: any}} */\n let ret = obj\n let requiredCount = 1\n for (let i = 0; i < entries.length; i++) {\n const [key, value] = entries[i]\n switch (key) {\n case 'roots':\n {\n const v = Reprs['CarV1HeaderOrV2Pragma > roots (anon)'](value)\n if (v === undefined) {\n return undefined\n }\n if (v !== value || ret !== obj) {\n if (ret === obj) {\n /** @type {{[k in string]: any}} */\n ret = {}\n for (let j = 0; j < i; j++) {\n ret[entries[j][0]] = entries[j][1]\n }\n }\n ret.roots = v\n }\n }\n break\n case 'version':\n {\n requiredCount--\n const v = Reprs.Int(value)\n if (v === undefined) {\n return undefined\n }\n if (v !== value || ret !== obj) {\n if (ret === obj) {\n /** @type {{[k in string]: any}} */\n ret = {}\n for (let j = 0; j < i; j++) {\n ret[entries[j][0]] = entries[j][1]\n }\n }\n ret.version = v\n }\n }\n break\n default:\n return undefined\n }\n }\n if (requiredCount > 0) {\n return undefined\n }\n return ret\n }\n}\n\nexport const CarV1HeaderOrV2Pragma = {\n toTyped: Types.CarV1HeaderOrV2Pragma,\n toRepresentation: Reprs.CarV1HeaderOrV2Pragma\n}\n","import * as CBOR from '@ipld/dag-cbor'\nimport { Token, Type } from 'cborg'\nimport { tokensToLength } from 'cborg/length'\nimport varint from 'varint'\n\n/**\n * @typedef {import('./api').CID} CID\n * @typedef {import('./api').Block} Block\n * @typedef {import('./api').CarBufferWriter} Writer\n * @typedef {import('./api').CarBufferWriterOptions} Options\n * @typedef {import('./coding').CarEncoder} CarEncoder\n */\n\n/**\n * A simple CAR writer that writes to a pre-allocated buffer.\n *\n * @class\n * @name CarBufferWriter\n * @implements {Writer}\n */\nclass CarBufferWriter {\n /**\n * @param {Uint8Array} bytes\n * @param {number} headerSize\n */\n constructor (bytes, headerSize) {\n /** @readonly */\n this.bytes = bytes\n this.byteOffset = headerSize\n\n /**\n * @readonly\n * @type {CID[]}\n */\n this.roots = []\n this.headerSize = headerSize\n }\n\n /**\n * Add a root to this writer, to be used to create a header when the CAR is\n * finalized with {@link CarBufferWriter.close `close()`}\n *\n * @param {CID} root\n * @param {{resize?:boolean}} [options]\n * @returns {CarBufferWriter}\n */\n addRoot (root, options) {\n addRoot(this, root, options)\n return this\n }\n\n /**\n * Write a `Block` (a `{ cid:CID, bytes:Uint8Array }` pair) to the archive.\n * Throws if there is not enough capacity.\n *\n * @param {Block} block - A `{ cid:CID, bytes:Uint8Array }` pair.\n * @returns {CarBufferWriter}\n */\n write (block) {\n addBlock(this, block)\n return this\n }\n\n /**\n * Finalize the CAR and return it as a `Uint8Array`.\n *\n * @param {object} [options]\n * @param {boolean} [options.resize]\n * @returns {Uint8Array}\n */\n close (options) {\n return close(this, options)\n }\n}\n\n/**\n * @param {CarBufferWriter} writer\n * @param {CID} root\n * @param {{resize?:boolean}} [options]\n */\nexport const addRoot = (writer, root, options = {}) => {\n const { resize = false } = options\n const { bytes, headerSize, byteOffset, roots } = writer\n writer.roots.push(root)\n const size = headerLength(writer)\n // If there is not enough space for the new root\n if (size > headerSize) {\n // Check if we root would fit if we were to resize the head.\n if (size - headerSize + byteOffset < bytes.byteLength) {\n // If resize is enabled resize head\n if (resize) {\n resizeHeader(writer, size)\n // otherwise remove head and throw an error suggesting to resize\n } else {\n roots.pop()\n throw new RangeError(`Header of size ${headerSize} has no capacity for new root ${root}.\n However there is a space in the buffer and you could call addRoot(root, { resize: root }) to resize header to make a space for this root.`)\n }\n // If head would not fit even with resize pop new root and throw error\n } else {\n roots.pop()\n throw new RangeError(`Buffer has no capacity for a new root ${root}`)\n }\n }\n}\n\n/**\n * Calculates number of bytes required for storing given block in CAR. Useful in\n * estimating size of an `ArrayBuffer` for the `CarBufferWriter`.\n *\n * @name CarBufferWriter.blockLength(Block)\n * @param {Block} block\n * @returns {number}\n */\nexport const blockLength = ({ cid, bytes }) => {\n const size = cid.bytes.byteLength + bytes.byteLength\n return varint.encodingLength(size) + size\n}\n\n/**\n * @param {CarBufferWriter} writer\n * @param {Block} block\n */\nexport const addBlock = (writer, { cid, bytes }) => {\n const byteLength = cid.bytes.byteLength + bytes.byteLength\n const size = varint.encode(byteLength)\n if (writer.byteOffset + size.length + byteLength > writer.bytes.byteLength) {\n throw new RangeError('Buffer has no capacity for this block')\n } else {\n writeBytes(writer, size)\n writeBytes(writer, cid.bytes)\n writeBytes(writer, bytes)\n }\n}\n\n/**\n * @param {CarBufferWriter} writer\n * @param {object} [options]\n * @param {boolean} [options.resize]\n */\nexport const close = (writer, options = {}) => {\n const { resize = false } = options\n const { roots, bytes, byteOffset, headerSize } = writer\n\n const headerBytes = CBOR.encode({ version: 1, roots })\n const varintBytes = varint.encode(headerBytes.length)\n\n const size = varintBytes.length + headerBytes.byteLength\n const offset = headerSize - size\n\n // If header size estimate was accurate we just write header and return\n // view into buffer.\n if (offset === 0) {\n writeHeader(writer, varintBytes, headerBytes)\n return bytes.subarray(0, byteOffset)\n // If header was overestimated and `{resize: true}` is passed resize header\n } else if (resize) {\n resizeHeader(writer, size)\n writeHeader(writer, varintBytes, headerBytes)\n return bytes.subarray(0, writer.byteOffset)\n } else {\n throw new RangeError(`Header size was overestimated.\nYou can use close({ resize: true }) to resize header`)\n }\n}\n\n/**\n * @param {CarBufferWriter} writer\n * @param {number} byteLength\n */\nexport const resizeHeader = (writer, byteLength) => {\n const { bytes, headerSize } = writer\n // Move data section to a new offset\n bytes.set(bytes.subarray(headerSize, writer.byteOffset), byteLength)\n // Update header size & byteOffset\n writer.byteOffset += byteLength - headerSize\n writer.headerSize = byteLength\n}\n\n/**\n * @param {CarBufferWriter} writer\n * @param {number[]|Uint8Array} bytes\n */\n\nconst writeBytes = (writer, bytes) => {\n writer.bytes.set(bytes, writer.byteOffset)\n writer.byteOffset += bytes.length\n}\n/**\n * @param {{bytes:Uint8Array}} writer\n * @param {number[]} varint\n * @param {Uint8Array} header\n */\nconst writeHeader = ({ bytes }, varint, header) => {\n bytes.set(varint)\n bytes.set(header, varint.length)\n}\n\nconst headerPreludeTokens = [\n new Token(Type.map, 2),\n new Token(Type.string, 'version'),\n new Token(Type.uint, 1),\n new Token(Type.string, 'roots')\n]\n\nconst CID_TAG = new Token(Type.tag, 42)\n\n/**\n * Calculates header size given the array of byteLength for roots.\n *\n * @name CarBufferWriter.calculateHeaderLength(rootLengths)\n * @param {number[]} rootLengths\n * @returns {number}\n */\nexport const calculateHeaderLength = (rootLengths) => {\n const tokens = [...headerPreludeTokens]\n tokens.push(new Token(Type.array, rootLengths.length))\n for (const rootLength of rootLengths) {\n tokens.push(CID_TAG)\n tokens.push(new Token(Type.bytes, { length: rootLength + 1 }))\n }\n const length = tokensToLength(tokens) // no options needed here because we have simple tokens\n return varint.encodingLength(length) + length\n}\n\n/**\n * Calculates header size given the array of roots.\n *\n * @name CarBufferWriter.headerLength({ roots })\n * @param {object} options\n * @param {CID[]} options.roots\n * @returns {number}\n */\nexport const headerLength = ({ roots }) =>\n calculateHeaderLength(roots.map(cid => cid.bytes.byteLength))\n\n/**\n * Estimates header size given a count of the roots and the expected byte length\n * of the root CIDs. The default length works for a standard CIDv1 with a\n * single-byte multihash code, such as SHA2-256 (i.e. the most common CIDv1).\n *\n * @name CarBufferWriter.estimateHeaderLength(rootCount[, rootByteLength])\n * @param {number} rootCount\n * @param {number} [rootByteLength]\n * @returns {number}\n */\nexport const estimateHeaderLength = (rootCount, rootByteLength = 36) =>\n calculateHeaderLength(new Array(rootCount).fill(rootByteLength))\n\n/**\n * Creates synchronous CAR writer that can be used to encode blocks into a given\n * buffer. Optionally you could pass `byteOffset` and `byteLength` to specify a\n * range inside buffer to write into. If car file is going to have `roots` you\n * need to either pass them under `options.roots` (from which header size will\n * be calculated) or provide `options.headerSize` to allocate required space\n * in the buffer. You may also provide known `roots` and `headerSize` to\n * allocate space for the roots that may not be known ahead of time.\n *\n * Note: Incorrect `headerSize` may lead to copying bytes inside a buffer\n * which will have a negative impact on performance.\n *\n * @name CarBufferWriter.createWriter(buffer[, options])\n * @param {ArrayBuffer} buffer\n * @param {object} [options]\n * @param {CID[]} [options.roots]\n * @param {number} [options.byteOffset]\n * @param {number} [options.byteLength]\n * @param {number} [options.headerSize]\n * @returns {CarBufferWriter}\n */\nexport const createWriter = (buffer, options = {}) => {\n const {\n roots = [],\n byteOffset = 0,\n byteLength = buffer.byteLength,\n headerSize = headerLength({ roots })\n } = options\n const bytes = new Uint8Array(buffer, byteOffset, byteLength)\n\n const writer = new CarBufferWriter(bytes, headerSize)\n for (const root of roots) {\n writer.addRoot(root)\n }\n\n return writer\n}\n","import { makeCborEncoders, objectToTokens } from './encode.js'\nimport { quickEncodeToken } from './jump.js'\n\n/**\n * @typedef {import('../interface').EncodeOptions} EncodeOptions\n * @typedef {import('../interface').TokenTypeEncoder} TokenTypeEncoder\n * @typedef {import('../interface').TokenOrNestedTokens} TokenOrNestedTokens\n */\n\nconst cborEncoders = makeCborEncoders()\n\n/** @type {EncodeOptions} */\nconst defaultEncodeOptions = {\n float64: false,\n quickEncodeToken\n}\n\n/**\n * Calculate the byte length of the given data when encoded as CBOR with the\n * options provided.\n * This calculation will be accurate if the same options are used as when\n * performing a normal encode. Some encode options can change the encoding\n * output length.\n *\n * @param {any} data\n * @param {EncodeOptions} [options]\n * @returns {number}\n */\nexport function encodedLength (data, options) {\n options = Object.assign({}, defaultEncodeOptions, options)\n options.mapSorter = undefined // won't change the length\n const tokens = objectToTokens(data, options)\n return tokensToLength(tokens, cborEncoders, options)\n}\n\n/**\n * Calculate the byte length of the data as represented by the given tokens when\n * encoded as CBOR with the options provided.\n * This function is for advanced users and would not normally be called\n * directly. See `encodedLength()` for appropriate use.\n *\n * @param {TokenOrNestedTokens} tokens\n * @param {TokenTypeEncoder[]} [encoders]\n * @param {EncodeOptions} [options]\n */\nexport function tokensToLength (tokens, encoders = cborEncoders, options = defaultEncodeOptions) {\n if (Array.isArray(tokens)) {\n let len = 0\n for (const token of tokens) {\n len += tokensToLength(token, encoders, options)\n }\n return len\n } else {\n const encoder = encoders[tokens.type.major]\n /* c8 ignore next 3 */\n if (encoder.encodedSize === undefined || typeof encoder.encodedSize !== 'function') {\n throw new Error(`Encoder for ${tokens.type.name} does not have an encodedSize()`)\n }\n return encoder.encodedSize(tokens, options)\n }\n}\n","import fs from 'fs'\nimport { Readable } from 'stream'\nimport { CID } from 'multiformats/cid'\nimport { CarIndexer } from './indexer.js'\nimport { CarReader as NodeCarReader } from './reader.js'\n\n/**\n * @typedef {import('fs').promises.FileHandle} FileHandle\n * @typedef {import('./api').Block} Block\n * @typedef {import('./api').BlockIndex} BlockIndex\n * @typedef {import('./api').CarReader} CarReaderIface\n * @typedef {import('./reader-browser').CarReader} CarReader\n * @typedef {{ blockLength:number, blockOffset:number }} RawLocation\n */\n\n/**\n * A form of {@link CarReader} that pre-indexes a CAR archive from a file and\n * provides random access to blocks within the file using the index data. This\n * function is **only available in Node.js** and not a browser environment.\n *\n * For large CAR files, using this form of `CarReader` can be singificantly more\n * efficient in terms of memory. The index consists of a list of `CID`s and\n * their location within the archive (see {@link CarIndexer}). For large numbers\n * of blocks, this index can also occupy a significant amount of memory. In some\n * cases it may be necessary to expand the memory capacity of a Node.js instance\n * to allow this index to fit. (e.g. by running with\n * `NODE_OPTIONS=\"--max-old-space-size=16384\"`).\n *\n * As an `CarIndexedReader` instance maintains an open file descriptor for its\n * CAR file, an additional {@link CarReader#close} method is attached. This\n * _must_ be called to have full clean-up of resources after use.\n *\n * Load this class with either\n * `import { CarIndexedReader } from '@ipld/car/indexed-reader'`\n * (`const { CarIndexedReader } = require('@ipld/car/indexed-reader')`). Or\n * `import { CarIndexedReader } from '@ipld/car'`\n * (`const { CarIndexedReader } = require('@ipld/car')`). The former will likely\n * result in smaller bundle sizes where this is important.\n *\n * @name CarIndexedReader\n * @class\n * @implements {CarReaderIface}\n * @extends {CarReader}\n * @property {number} version The version number of the CAR referenced by this\n * reader (should be `1`).\n */\nexport class CarIndexedReader {\n /**\n * @param {number} version\n * @param {string} path\n * @param {CID[]} roots\n * @param {Map<string, RawLocation>} index\n * @param {string[]} order\n */\n constructor (version, path, roots, index, order) {\n this._version = version\n this._path = path\n this._roots = roots\n this._index = index\n this._order = order\n this._fd = null\n }\n\n get version () {\n return this._version\n }\n\n /**\n * See {@link CarReader#getRoots}\n *\n * @function\n * @memberof CarIndexedReader\n * @instance\n * @async\n * @returns {Promise<CID[]>}\n */\n async getRoots () {\n return this._roots\n }\n\n /**\n * See {@link CarReader#has}\n *\n * @function\n * @memberof CarIndexedReader\n * @instance\n * @async\n * @param {CID} key\n * @returns {Promise<boolean>}\n */\n async has (key) {\n return this._index.has(key.toString())\n }\n\n /**\n * See {@link CarReader#get}\n *\n * @function\n * @memberof CarIndexedReader\n * @instance\n * @async\n * @param {CID} key\n * @returns {Promise<Block | undefined>}\n */\n async get (key) {\n const blockIndex = this._index.get(key.toString())\n if (!blockIndex) {\n return undefined\n }\n if (!this._fd) {\n this._fd = await fs.promises.open(this._path, 'r')\n }\n const readIndex = {\n cid: key,\n length: 0,\n offset: 0,\n blockLength: blockIndex.blockLength,\n blockOffset: blockIndex.blockOffset\n }\n return NodeCarReader.readRaw(this._fd, readIndex)\n }\n\n /**\n * See {@link CarReader#blocks}\n *\n * @function\n * @memberof CarIndexedReader\n * @instance\n * @async\n * @generator\n * @returns {AsyncGenerator<Block>}\n */\n async * blocks () {\n for (const cidStr of this._order) {\n const block = await this.get(CID.parse(cidStr))\n /* c8 ignore next 3 */\n if (!block) {\n throw new Error('Unexpected internal error')\n }\n yield block\n }\n }\n\n /**\n * See {@link CarReader#cids}\n *\n * @function\n * @memberof CarIndexedReader\n * @instance\n * @async\n * @generator\n * @returns {AsyncGenerator<CID>}\n */\n async * cids () {\n for (const cidStr of this._order) {\n yield CID.parse(cidStr)\n }\n }\n\n /**\n * Close the underlying file descriptor maintained by this `CarIndexedReader`.\n * This must be called for proper resource clean-up to occur.\n *\n * @function\n * @memberof CarIndexedReader\n * @instance\n * @async\n * @returns {Promise<void>}\n */\n async close () {\n if (this._fd) {\n return this._fd.close()\n }\n }\n\n /**\n * Instantiate an {@link CarIndexedReader} from a file with the provided\n * `path`. The CAR file is first indexed with a full path that collects `CID`s\n * and block locations. This index is maintained in memory. Subsequent reads\n * operate on a read-only file descriptor, fetching the block from its in-file\n * location.\n *\n * For large archives, the initial indexing may take some time. The returned\n * `Promise` will resolve only after this is complete.\n *\n * @async\n * @static\n * @memberof CarIndexedReader\n * @param {string} path\n * @returns {Promise<CarIndexedReader>}\n */\n static async fromFile (path) {\n if (typeof path !== 'string') {\n throw new TypeError('fromFile() requires a file path string')\n }\n\n const iterable = await CarIndexer.fromIterable(Readable.from(fs.createReadStream(path)))\n /** @type {Map<string, RawLocation>} */\n const index = new Map()\n /** @type {string[]} */\n const order = []\n for await (const { cid, blockLength, blockOffset } of iterable) {\n const cidStr = cid.toString()\n index.set(cidStr, { blockLength, blockOffset })\n order.push(cidStr)\n }\n return new CarIndexedReader(iterable.version, path, await iterable.getRoots(), index, order)\n }\n}\n\nexport const __browser = false\n","import { decode as decodeDagCbor } from '@ipld/dag-cbor'\nimport { CID } from 'multiformats/cid'\nimport * as Digest from 'multiformats/hashes/digest'\nimport { CIDV0_BYTES, decodeV2Header, decodeVarint, getMultihashLength, V2_HEADER_LENGTH } from './decoder-common.js'\nimport { CarV1HeaderOrV2Pragma } from './header-validator.js'\n\n/**\n * @typedef {import('./api').Block} Block\n * @typedef {import('./api').BlockHeader} BlockHeader\n * @typedef {import('./api').BlockIndex} BlockIndex\n * @typedef {import('./coding').BytesReader} BytesReader\n * @typedef {import('./coding').CarHeader} CarHeader\n * @typedef {import('./coding').CarV2Header} CarV2Header\n * @typedef {import('./coding').CarV2FixedHeader} CarV2FixedHeader\n * @typedef {import('./coding').CarDecoder} CarDecoder\n */\n\n/**\n * Reads header data from a `BytesReader`. The header may either be in the form\n * of a `CarHeader` or `CarV2Header` depending on the CAR being read.\n *\n * @name async decoder.readHeader(reader)\n * @param {BytesReader} reader\n * @param {number} [strictVersion]\n * @returns {Promise<CarHeader|CarV2Header>}\n */\nexport async function readHeader (reader, strictVersion) {\n const length = decodeVarint(await reader.upTo(8), reader)\n if (length === 0) {\n throw new Error('Invalid CAR header (zero length)')\n }\n const header = await reader.exactly(length, true)\n const block = decodeDagCbor(header)\n if (CarV1HeaderOrV2Pragma.toTyped(block) === undefined) {\n throw new Error('Invalid CAR header format')\n }\n if ((block.version !== 1 && block.version !== 2) || (strictVersion !== undefined && block.version !== strictVersion)) {\n throw new Error(`Invalid CAR version: ${block.version}${strictVersion !== undefined ? ` (expected ${strictVersion})` : ''}`)\n }\n if (block.version === 1) {\n // CarV1HeaderOrV2Pragma makes roots optional, let's make it mandatory\n if (!Array.isArray(block.roots)) {\n throw new Error('Invalid CAR header format')\n }\n return block\n }\n // version 2\n if (block.roots !== undefined) {\n throw new Error('Invalid CAR header format')\n }\n const v2Header = decodeV2Header(await reader.exactly(V2_HEADER_LENGTH, true))\n reader.seek(v2Header.dataOffset - reader.pos)\n const v1Header = await readHeader(reader, 1)\n return Object.assign(v1Header, v2Header)\n}\n\n/**\n * @param {BytesReader} reader\n * @returns {Promise<CID>}\n */\nasync function readCid (reader) {\n const first = await reader.exactly(2, false)\n if (first[0] === CIDV0_BYTES.SHA2_256 && first[1] === CIDV0_BYTES.LENGTH) {\n // cidv0 32-byte sha2-256\n const bytes = await reader.exactly(34, true)\n const multihash = Digest.decode(bytes)\n return CID.create(0, CIDV0_BYTES.DAG_PB, multihash)\n }\n\n const version = decodeVarint(await reader.upTo(8), reader)\n if (version !== 1) {\n throw new Error(`Unexpected CID version (${version})`)\n }\n const codec = decodeVarint(await reader.upTo(8), reader)\n const bytes = await reader.exactly(getMultihashLength(await reader.upTo(8)), true)\n const multihash = Digest.decode(bytes)\n return CID.create(version, codec, multihash)\n}\n\n/**\n * Reads the leading data of an individual block from CAR data from a\n * `BytesReader`. Returns a `BlockHeader` object which contains\n * `{ cid, length, blockLength }` which can be used to either index the block\n * or read the block binary data.\n *\n * @name async decoder.readBlockHead(reader)\n * @param {BytesReader} reader\n * @returns {Promise<BlockHeader>}\n */\nexport async function readBlockHead (reader) {\n // length includes a CID + Binary, where CID has a variable length\n // we have to deal with\n const start = reader.pos\n let length = decodeVarint(await reader.upTo(8), reader)\n if (length === 0) {\n throw new Error('Invalid CAR section (zero length)')\n }\n length += (reader.pos - start)\n const cid = await readCid(reader)\n const blockLength = length - Number(reader.pos - start) // subtract CID length\n\n return { cid, length, blockLength }\n}\n\n/**\n * @param {BytesReader} reader\n * @returns {Promise<Block>}\n */\nasync function readBlock (reader) {\n const { cid, blockLength } = await readBlockHead(reader)\n const bytes = await reader.exactly(blockLength, true)\n return { bytes, cid }\n}\n\n/**\n * @param {BytesReader} reader\n * @returns {Promise<BlockIndex>}\n */\nasync function readBlockIndex (reader) {\n const offset = reader.pos\n const { cid, length, blockLength } = await readBlockHead(reader)\n const index = { cid, length, blockLength, offset, blockOffset: reader.pos }\n reader.seek(index.blockLength)\n return index\n}\n\n/**\n * Creates a `CarDecoder` from a `BytesReader`. The `CarDecoder` is as async\n * interface that will consume the bytes from the `BytesReader` to yield a\n * `header()` and either `blocks()` or `blocksIndex()` data.\n *\n * @name decoder.createDecoder(reader)\n * @param {BytesReader} reader\n * @returns {CarDecoder}\n */\nexport function createDecoder (reader) {\n const headerPromise = (async () => {\n const header = await readHeader(reader)\n if (header.version === 2) {\n const v1length = reader.pos - header.dataOffset\n reader = limitReader(reader, header.dataSize - v1length)\n }\n return header\n })()\n\n return {\n header: () => headerPromise,\n\n async * blocks () {\n await headerPromise\n while ((await reader.upTo(8)).length > 0) {\n yield await readBlock(reader)\n }\n },\n\n async * blocksIndex () {\n await headerPromise\n while ((await reader.upTo(8)).length > 0) {\n yield await readBlockIndex(reader)\n }\n }\n }\n}\n\n/**\n * Creates a `BytesReader` from a `Uint8Array`.\n *\n * @name decoder.bytesReader(bytes)\n * @param {Uint8Array} bytes\n * @returns {BytesReader}\n */\nexport function bytesReader (bytes) {\n let pos = 0\n\n /** @type {BytesReader} */\n return {\n async upTo (length) {\n const out = bytes.subarray(pos, pos + Math.min(length, bytes.length - pos))\n return out\n },\n\n async exactly (length, seek = false) {\n if (length > bytes.length - pos) {\n throw new Error('Unexpected end of data')\n }\n const out = bytes.subarray(pos, pos + length)\n if (seek) {\n pos += length\n }\n return out\n },\n\n seek (length) {\n pos += length\n },\n\n get pos () {\n return pos\n }\n }\n}\n\n/**\n * @ignore\n * reusable reader for streams and files, we just need a way to read an\n * additional chunk (of some undetermined size) and a way to close the\n * reader when finished\n * @param {() => Promise<Uint8Array|null>} readChunk\n * @returns {BytesReader}\n */\nexport function chunkReader (readChunk /*, closer */) {\n let pos = 0\n let have = 0\n let offset = 0\n let currentChunk = new Uint8Array(0)\n\n const read = async (/** @type {number} */ length) => {\n have = currentChunk.length - offset\n const bufa = [currentChunk.subarray(offset)]\n while (have < length) {\n const chunk = await readChunk()\n if (chunk == null) {\n break\n }\n /* c8 ignore next 8 */\n // undo this ignore ^ when we have a fd implementation that can seek()\n if (have < 0) { // because of a seek()\n /* c8 ignore next 4 */\n // toohard to test the else\n if (chunk.length > have) {\n bufa.push(chunk.subarray(-have))\n } // else discard\n } else {\n bufa.push(chunk)\n }\n have += chunk.length\n }\n currentChunk = new Uint8Array(bufa.reduce((p, c) => p + c.length, 0))\n let off = 0\n for (const b of bufa) {\n currentChunk.set(b, off)\n off += b.length\n }\n offset = 0\n }\n\n /** @type {BytesReader} */\n return {\n async upTo (length) {\n if (currentChunk.length - offset < length) {\n await read(length)\n }\n return currentChunk.subarray(offset, offset + Math.min(currentChunk.length - offset, length))\n },\n\n async exactly (length, seek = false) {\n if (currentChunk.length - offset < length) {\n await read(length)\n }\n if (currentChunk.length - offset < length) {\n throw new Error('Unexpected end of data')\n }\n const out = currentChunk.subarray(offset, offset + length)\n if (seek) {\n pos += length\n offset += length\n }\n return out\n },\n\n seek (length) {\n pos += length\n offset += length\n },\n\n get pos () {\n return pos\n }\n }\n}\n\n/**\n * Creates a `BytesReader` from an `AsyncIterable<Uint8Array>`, which allows for\n * consumption of CAR data from a streaming source.\n *\n * @name decoder.asyncIterableReader(asyncIterable)\n * @param {AsyncIterable<Uint8Array>} asyncIterable\n * @returns {BytesReader}\n */\nexport function asyncIterableReader (asyncIterable) {\n const iterator = asyncIterable[Symbol.asyncIterator]()\n\n async function readChunk () {\n const next = await iterator.next()\n if (next.done) {\n return null\n }\n return next.value\n }\n\n return chunkReader(readChunk)\n}\n\n/**\n * Wraps a `BytesReader` in a limiting `BytesReader` which limits maximum read\n * to `byteLimit` bytes. It _does not_ update `pos` of the original\n * `BytesReader`.\n *\n * @name decoder.limitReader(reader, byteLimit)\n * @param {BytesReader} reader\n * @param {number} byteLimit\n * @returns {BytesReader}\n */\nexport function limitReader (reader, byteLimit) {\n let bytesRead = 0\n\n /** @type {BytesReader} */\n return {\n async upTo (length) {\n let bytes = await reader.upTo(length)\n if (bytes.length + bytesRead > byteLimit) {\n bytes = bytes.subarray(0, byteLimit - bytesRead)\n }\n return bytes\n },\n\n async exactly (length, seek = false) {\n const bytes = await reader.exactly(length, seek)\n if (bytes.length + bytesRead > byteLimit) {\n throw new Error('Unexpected end of data')\n }\n if (seek) {\n bytesRead += length\n }\n return bytes\n },\n\n seek (length) {\n bytesRead += length\n reader.seek(length)\n },\n\n get pos () {\n return reader.pos\n }\n }\n}\n","import { asyncIterableReader, bytesReader, createDecoder } from './decoder.js'\n\n/**\n * @typedef {import('multiformats').CID} CID\n * @typedef {import('./api').Block} Block\n * @typedef {import('./api').CarReader} CarReaderIface\n * @typedef {import('./coding').BytesReader} BytesReader\n * @typedef {import('./coding').CarHeader} CarHeader\n * @typedef {import('./coding').CarV2Header} CarV2Header\n */\n\n/**\n * Provides blockstore-like access to a CAR.\n *\n * Implements the `RootsReader` interface:\n * {@link CarReader.getRoots `getRoots()`}. And the `BlockReader` interface:\n * {@link CarReader.get `get()`}, {@link CarReader.has `has()`},\n * {@link CarReader.blocks `blocks()`} (defined as a `BlockIterator`) and\n * {@link CarReader.cids `cids()`} (defined as a `CIDIterator`).\n *\n * Load this class with either `import { CarReader } from '@ipld/car/reader'`\n * (`const { CarReader } = require('@ipld/car/reader')`). Or\n * `import { CarReader } from '@ipld/car'` (`const { CarReader } = require('@ipld/car')`).\n * The former will likely result in smaller bundle sizes where this is\n * important.\n *\n * @name CarReader\n * @class\n * @implements {CarReaderIface}\n * @property {number} version The version number of the CAR referenced by this\n * reader (should be `1` or `2`).\n */\nexport class CarReader {\n /**\n * @constructs CarReader\n * @param {CarHeader|CarV2Header} header\n * @param {Block[]} blocks\n */\n constructor (header, blocks) {\n this._header = header\n this._blocks = blocks\n this._keys = blocks.map((b) => b.cid.toString())\n }\n\n /**\n * @property\n * @memberof CarReader\n * @instance\n */\n get version () {\n return this._header.version\n }\n\n /**\n * Get the list of roots defined by the CAR referenced by this reader. May be\n * zero or more `CID`s.\n *\n * @function\n * @memberof CarReader\n * @instance\n * @async\n * @returns {Promise<CID[]>}\n */\n async getRoots () {\n return this._header.roots\n }\n\n /**\n * Check whether a given `CID` exists within the CAR referenced by this\n * reader.\n *\n * @function\n * @memberof CarReader\n * @instance\n * @async\n * @param {CID} key\n * @returns {Promise<boolean>}\n */\n async has (key) {\n return this._keys.indexOf(key.toString()) > -1\n }\n\n /**\n * Fetch a `Block` (a `{ cid:CID, bytes:Uint8Array }` pair) from the CAR\n * referenced by this reader matching the provided `CID`. In the case where\n * the provided `CID` doesn't exist within the CAR, `undefined` will be\n * returned.\n *\n * @function\n * @memberof CarReader\n * @instance\n * @async\n * @param {CID} key\n * @returns {Promise<Block | undefined>}\n */\n async get (key) {\n const index = this._keys.indexOf(key.toString())\n return index > -1 ? this._blocks[index] : undefined\n }\n\n /**\n * Returns a `BlockIterator` (`AsyncIterable<Block>`) that iterates over all\n * of the `Block`s (`{ cid:CID, bytes:Uint8Array }` pairs) contained within\n * the CAR referenced by this reader.\n *\n * @function\n * @memberof CarReader\n * @instance\n * @async\n * @generator\n * @returns {AsyncGenerator<Block>}\n */\n async * blocks () {\n for (const block of this._blocks) {\n yield block\n }\n }\n\n /**\n * Returns a `CIDIterator` (`AsyncIterable<CID>`) that iterates over all of\n * the `CID`s contained within the CAR referenced by this reader.\n *\n * @function\n * @memberof CarReader\n * @instance\n * @async\n * @generator\n * @returns {AsyncGenerator<CID>}\n */\n async * cids () {\n for (const block of this._blocks) {\n yield block.cid\n }\n }\n\n /**\n * Instantiate a {@link CarReader} from a `Uint8Array` blob. This performs a\n * decode fully in memory and maintains the decoded state in memory for full\n * access to the data via the `CarReader` API.\n *\n * @async\n * @static\n * @memberof CarReader\n * @param {Uint8Array} bytes\n * @returns {Promise<CarReader>}\n */\n static async fromBytes (bytes) {\n if (!(bytes instanceof Uint8Array)) {\n throw new TypeError('fromBytes() requires a Uint8Array')\n }\n return decodeReaderComplete(bytesReader(bytes))\n }\n\n /**\n * Instantiate a {@link CarReader} from a `AsyncIterable<Uint8Array>`, such as\n * a [modern Node.js stream](https://nodejs.org/api/stream.html#stream_streams_compatibility_with_async_generators_and_async_iterators).\n * This performs a decode fully in memory and maintains the decoded state in\n * memory for full access to the data via the `CarReader` API.\n *\n * Care should be taken for large archives; this API may not be appropriate\n * where memory is a concern or the archive is potentially larger than the\n * amount of memory that the runtime can handle.\n *\n * @async\n * @static\n * @memberof CarReader\n * @param {AsyncIterable<Uint8Array>} asyncIterable\n * @returns {Promise<CarReader>}\n */\n static async fromIterable (asyncIterable) {\n if (!asyncIterable || !(typeof asyncIterable[Symbol.asyncIterator] === 'function')) {\n throw new TypeError('fromIterable() requires an async iterable')\n }\n return decodeReaderComplete(asyncIterableReader(asyncIterable))\n }\n}\n\n/**\n * @private\n * @param {BytesReader} reader\n * @returns {Promise<CarReader>}\n */\nexport async function decodeReaderComplete (reader) {\n const decoder = createDecoder(reader)\n const header = await decoder.header()\n const blocks = []\n for await (const block of decoder.blocks()) {\n blocks.push(block)\n }\n\n return new CarReader(header, blocks)\n}\n\nexport const __browser = true\n","import { CID } from 'multiformats/cid'\nimport { bytesReader, readHeader } from './decoder.js'\nimport { createEncoder, createHeader } from './encoder.js'\nimport { create as iteratorChannel } from './iterator-channel.js'\n\n/**\n * @typedef {import('./api').Block} Block\n * @typedef {import('./api').BlockWriter} BlockWriter\n * @typedef {import('./api').WriterChannel} WriterChannel\n * @typedef {import('./coding').CarEncoder} CarEncoder\n * @typedef {import('./coding').IteratorChannel<Uint8Array>} IteratorChannel\n */\n\n/**\n * Provides a writer interface for the creation of CAR files.\n *\n * Creation of a `CarWriter` involves the instatiation of an input / output pair\n * in the form of a `WriterChannel`, which is a\n * `{ writer:CarWriter, out:AsyncIterable<Uint8Array> }` pair. These two\n * components form what can be thought of as a stream-like interface. The\n * `writer` component (an instantiated `CarWriter`), has methods to\n * {@link CarWriter.put `put()`} new blocks and {@link CarWriter.put `close()`}\n * the writing operation (finalising the CAR archive). The `out` component is\n * an `AsyncIterable` that yields the bytes of the archive. This can be\n * redirected to a file or other sink. In Node.js, you can use the\n * [`Readable.from()`](https://nodejs.org/api/stream.html#stream_stream_readable_from_iterable_options)\n * API to convert this to a standard Node.js stream, or it can be directly fed\n * to a\n * [`stream.pipeline()`](https://nodejs.org/api/stream.html#stream_stream_pipeline_source_transforms_destination_callback).\n *\n * The channel will provide a form of backpressure. The `Promise` from a\n * `write()` won't resolve until the resulting data is drained from the `out`\n * iterable.\n *\n * It is also possible to ignore the `Promise` from `write()` calls and allow\n * the generated data to queue in memory. This should be avoided for large CAR\n * archives of course due to the memory costs and potential for memory overflow.\n *\n * Load this class with either\n * `import { CarWriter } from '@ipld/car/writer'`\n * (`const { CarWriter } = require('@ipld/car/writer')`). Or\n * `import { CarWriter } from '@ipld/car'`\n * (`const { CarWriter } = require('@ipld/car')`). The former will likely\n * result in smaller bundle sizes where this is important.\n *\n * @name CarWriter\n * @class\n * @implements {BlockWriter}\n */\nexport class CarWriter {\n /**\n * @param {CID[]} roots\n * @param {CarEncoder} encoder\n */\n constructor (roots, encoder) {\n this._encoder = encoder\n /** @type {Promise<void>} */\n this._mutex = encoder.setRoots(roots)\n this._ended = false\n }\n\n /**\n * Write a `Block` (a `{ cid:CID, bytes:Uint8Array }` pair) to the archive.\n *\n * @function\n * @memberof CarWriter\n * @instance\n * @async\n * @param {Block} block - A `{ cid:CID, bytes:Uint8Array }` pair.\n * @returns {Promise<void>} The returned promise will only resolve once the\n * bytes this block generates are written to the `out` iterable.\n */\n async put (block) {\n if (!(block.bytes instanceof Uint8Array) || !block.cid) {\n throw new TypeError('Can only write {cid, bytes} objects')\n }\n if (this._ended) {\n throw new Error('Already closed')\n }\n const cid = CID.asCID(block.cid)\n if (!cid) {\n throw new TypeError('Can only write {cid, bytes} objects')\n }\n this._mutex = this._mutex.then(() => this._encoder.writeBlock({ cid, bytes: block.bytes }))\n return this._mutex\n }\n\n /**\n * Finalise the CAR archive and signal that the `out` iterable should end once\n * any remaining bytes are written.\n *\n * @function\n * @memberof CarWriter\n * @instance\n * @async\n * @returns {Promise<void>}\n */\n async close () {\n if (this._ended) {\n throw new Error('Already closed')\n }\n await this._mutex\n this._ended = true\n return this._encoder.close()\n }\n\n /**\n * Returns the version number of the CAR file being written\n *\n * @returns {number}\n */\n version () {\n return this._encoder.version()\n }\n\n /**\n * Create a new CAR writer \"channel\" which consists of a\n * `{ writer:CarWriter, out:AsyncIterable<Uint8Array> }` pair.\n *\n * @async\n * @static\n * @memberof CarWriter\n * @param {CID[] | CID | void} roots\n * @returns {WriterChannel} The channel takes the form of\n * `{ writer:CarWriter, out:AsyncIterable<Uint8Array> }`.\n */\n static create (roots) {\n roots = toRoots(roots)\n const { encoder, iterator } = encodeWriter()\n const writer = new CarWriter(roots, encoder)\n const out = new CarWriterOut(iterator)\n return { writer, out }\n }\n\n /**\n * Create a new CAR appender \"channel\" which consists of a\n * `{ writer:CarWriter, out:AsyncIterable<Uint8Array> }` pair.\n * This appender does not consider roots and does not produce a CAR header.\n * It is designed to append blocks to an _existing_ CAR archive. It is\n * expected that `out` will be concatenated onto the end of an existing\n * archive that already has a properly formatted header.\n *\n * @async\n * @static\n * @memberof CarWriter\n * @returns {WriterChannel} The channel takes the form of\n * `{ writer:CarWriter, out:AsyncIterable<Uint8Array> }`.\n */\n static createAppender () {\n const { encoder, iterator } = encodeWriter()\n encoder.setRoots = () => Promise.resolve()\n const writer = new CarWriter([], encoder)\n const out = new CarWriterOut(iterator)\n return { writer, out }\n }\n\n /**\n * Update the list of roots in the header of an existing CAR as represented\n * in a Uint8Array.\n *\n * This operation is an _overwrite_, the total length of the CAR will not be\n * modified. A rejection will occur if the new header will not be the same\n * length as the existing header, in which case the CAR will not be modified.\n * It is the responsibility of the user to ensure that the roots being\n * replaced encode as the same length as the new roots.\n *\n * The byte array passed in an argument will be modified and also returned\n * upon successful modification.\n *\n * @async\n * @static\n * @memberof CarWriter\n * @param {Uint8Array} bytes\n * @param {CID[]} roots - A new list of roots to replace the existing list in\n * the CAR header. The new header must take up the same number of bytes as the\n * existing header, so the roots should collectively be the same byte length\n * as the existing roots.\n * @returns {Promise<Uint8Array>}\n */\n static async updateRootsInBytes (bytes, roots) {\n const reader = bytesReader(bytes)\n await readHeader(reader)\n const newHeader = createHeader(roots)\n if (Number(reader.pos) !== newHeader.length) {\n throw new Error(`updateRoots() can only overwrite a header of the same length (old header is ${reader.pos} bytes, new header is ${newHeader.length} bytes)`)\n }\n bytes.set(newHeader, 0)\n return bytes\n }\n}\n\n/**\n * @class\n * @implements {AsyncIterable<Uint8Array>}\n */\nexport class CarWriterOut {\n /**\n * @param {AsyncIterator<Uint8Array>} iterator\n */\n constructor (iterator) {\n this._iterator = iterator\n }\n\n [Symbol.asyncIterator] () {\n if (this._iterating) {\n throw new Error('Multiple iterator not supported')\n }\n this._iterating = true\n return this._iterator\n }\n}\n\nfunction encodeWriter () {\n /** @type {IteratorChannel} */\n const iw = iteratorChannel()\n const { writer, iterator } = iw\n const encoder = createEncoder(writer)\n return { encoder, iterator }\n}\n\n/**\n * @private\n * @param {CID[] | CID | void} roots\n * @returns {CID[]}\n */\nfunction toRoots (roots) {\n if (roots === undefined) {\n return []\n }\n\n if (!Array.isArray(roots)) {\n const cid = CID.asCID(roots)\n if (!cid) {\n throw new TypeError('roots must be a single CID or an array of CIDs')\n }\n return [cid]\n }\n\n const _roots = []\n for (const root of roots) {\n const _root = CID.asCID(root)\n if (!_root) {\n throw new TypeError('roots must be a single CID or an array of CIDs')\n }\n _roots.push(_root)\n }\n return _roots\n}\n\nexport const __browser = true\n","import { encode as dagCborEncode } from '@ipld/dag-cbor'\nimport varint from 'varint'\n\n/**\n * @typedef {import('multiformats').CID} CID\n * @typedef {import('./api').Block} Block\n * @typedef {import('./coding').CarEncoder} CarEncoder\n * @typedef {import('./coding').IteratorChannel_Writer<Uint8Array>} IteratorChannel_Writer\n */\n\nconst CAR_V1_VERSION = 1\n\n/**\n * Create a header from an array of roots.\n *\n * @param {CID[]} roots\n * @returns {Uint8Array}\n */\nexport function createHeader (roots) {\n const headerBytes = dagCborEncode({ version: CAR_V1_VERSION, roots })\n const varintBytes = varint.encode(headerBytes.length)\n const header = new Uint8Array(varintBytes.length + headerBytes.length)\n header.set(varintBytes, 0)\n header.set(headerBytes, varintBytes.length)\n return header\n}\n\n/**\n * @param {IteratorChannel_Writer} writer\n * @returns {CarEncoder}\n */\nfunction createEncoder (writer) {\n // none of this is wrapped in a mutex, that needs to happen above this to\n // avoid overwrites\n\n return {\n /**\n * @param {CID[]} roots\n * @returns {Promise<void>}\n */\n async setRoots (roots) {\n const bytes = createHeader(roots)\n await writer.write(bytes)\n },\n\n /**\n * @param {Block} block\n * @returns {Promise<void>}\n */\n async writeBlock (block) {\n const { cid, bytes } = block\n await writer.write(new Uint8Array(varint.encode(cid.bytes.length + bytes.length)))\n await writer.write(cid.bytes)\n if (bytes.length) {\n // zero-length blocks are valid, but it'd be safer if we didn't write them\n await writer.write(bytes)\n }\n },\n\n /**\n * @returns {Promise<void>}\n */\n async close () {\n await writer.end()\n },\n\n /**\n * @returns {number}\n */\n version () {\n return CAR_V1_VERSION\n }\n }\n}\n\nexport { createEncoder }\n","import pLimit from \"p-limit\";\nimport { CarReader } from \"@ipld/car\";\nimport { Logger, ResolveOnce } from \"@adviser/cement\";\n// import { uuidv4 } from \"uuidv7\";\n\nimport {\n type AnyBlock,\n type AnyLink,\n type CarHeader,\n type CommitOpts,\n type DbMeta,\n type TransactionMeta,\n type CarGroup,\n type CarLog,\n toCIDBlock,\n} from \"./types.js\";\nimport type { BlockstoreOpts, BlockstoreRuntime } from \"./transaction.js\";\n\nimport { encodeCarFile, encodeCarHeader, parseCarFile } from \"./loader-helpers.js\";\nimport { decodeEncryptedCar, encryptedEncodeCarFile } from \"./encrypt-helpers.js\";\n\nimport { DataStore, MetaStore, RemoteWAL } from \"./store.js\";\n\nimport { CarTransaction, defaultedBlockstoreRuntime } from \"./transaction.js\";\nimport { CommitQueue } from \"./commit-queue.js\";\nimport * as CBW from \"@ipld/car/buffer-writer\";\nimport type { Falsy, FileTransactionMeta } from \"../types.js\";\n\nexport function carLogIncludesGroup(list: CarLog, cids: CarGroup) {\n return list.some((arr: CarGroup) => {\n return arr.toString() === cids.toString();\n });\n}\n\n// this works for car groups because toString looks like bafy,bafy\nfunction uniqueCids(list: CarLog, remove = new Set<string>()): CarLog {\n const byString = new Map<string, CarGroup>();\n for (const cid of list) {\n if (remove.has(cid.toString())) continue;\n byString.set(cid.toString(), cid);\n }\n return [...byString.values()];\n}\n\nexport function toHexString(byteArray: Uint8Array) {\n return Array.from(byteArray)\n .map((byte) => byte.toString(16).padStart(2, \"0\"))\n .join(\"\");\n}\n\ntype AbstractRemoteMetaStore = MetaStore & {\n handleByteHeads(byteHeads: Uint8Array[], branch?: string): Promise<DbMeta[]>;\n};\n\nexport abstract class Loadable {\n name = \"\";\n abstract readonly logger: Logger;\n abstract readonly ebOpts: BlockstoreRuntime;\n remoteCarStore?: DataStore;\n abstract carStore(): Promise<DataStore>;\n carLog: CarLog = new Array<CarGroup>();\n remoteMetaStore?: AbstractRemoteMetaStore;\n remoteFileStore?: DataStore;\n abstract ready(): Promise<void>;\n abstract close(): Promise<void>;\n abstract fileStore(): Promise<DataStore>;\n abstract remoteWAL(): Promise<RemoteWAL>;\n abstract handleDbMetasFromStore(metas: DbMeta[]): Promise<void>;\n}\n\nexport class Loader implements Loadable {\n readonly name: string;\n readonly ebOpts: BlockstoreRuntime;\n readonly commitQueue: CommitQueue<CarGroup> = new CommitQueue<CarGroup>();\n readonly isCompacting = false;\n readonly carReaders = new Map<string, Promise<CarReader>>();\n readonly seenCompacted = new Set<string>();\n readonly processedCars = new Set<string>();\n\n carLog: CarLog = [];\n key?: string;\n keyId?: string;\n remoteMetaStore?: AbstractRemoteMetaStore;\n remoteCarStore?: DataStore;\n remoteFileStore?: DataStore;\n\n private getBlockCache = new Map<string, AnyBlock>();\n private seenMeta = new Set<string>();\n private writeLimit = pLimit(1);\n\n // readonly id = uuidv4();\n\n async carStore(): Promise<DataStore> {\n return this.ebOpts.storeRuntime.makeDataStore(this);\n }\n\n async fileStore(): Promise<DataStore> {\n return this.ebOpts.storeRuntime.makeDataStore(this);\n }\n async remoteWAL(): Promise<RemoteWAL> {\n return this.ebOpts.storeRuntime.makeRemoteWAL(this);\n }\n\n async metaStore(): Promise<MetaStore> {\n return this.ebOpts.storeRuntime.makeMetaStore(this);\n }\n\n readonly onceReady = new ResolveOnce<void>();\n async ready(): Promise<void> {\n return this.onceReady.once(async () => {\n const metas = this.ebOpts.meta ? [this.ebOpts.meta] : await (await this.metaStore()).load(\"main\");\n if (metas) {\n await this.handleDbMetasFromStore(metas);\n }\n });\n }\n\n async close() {\n const toClose = await Promise.all([this.carStore(), this.metaStore(), this.fileStore(), this.remoteWAL()]);\n await Promise.all(toClose.map((store) => store.close()));\n }\n\n async destroy() {\n const toDestroy = await Promise.all([this.carStore(), this.metaStore(), this.fileStore(), this.remoteWAL()]);\n await Promise.all(toDestroy.map((store) => store.destroy()));\n }\n\n readonly logger: Logger;\n constructor(name: string, ebOpts: BlockstoreOpts) {\n this.name = name;\n // console.log(\"Loader\", name, ebOpts)\n this.ebOpts = defaultedBlockstoreRuntime(\n {\n ...ebOpts,\n name,\n },\n \"Loader\",\n );\n this.logger = this.ebOpts.logger;\n }\n\n // async snapToCar(carCid: AnyLink | string) {\n // await this.ready\n // if (typeof carCid === 'string') {\n // carCid = CID.parse(carCid)\n // }\n // const carHeader = await this.loadCarHeaderFromMeta({ car: carCid, key: this.key || null })\n // this.carLog = [carCid, ...carHeader.cars]\n // await this.getMoreReaders(carHeader.cars)\n // await this._applyCarHeader(carHeader, true)\n // }\n\n async handleDbMetasFromStore(metas: DbMeta[]): Promise<void> {\n for (const meta of metas) {\n await this.writeLimit(async () => {\n await this.mergeDbMetaIntoClock(meta);\n });\n }\n }\n\n async mergeDbMetaIntoClock(meta: DbMeta): Promise<void> {\n if (this.isCompacting) {\n throw this.logger.Error().Msg(\"cannot merge while compacting\").AsError();\n }\n\n if (this.seenMeta.has(meta.cars.toString())) return;\n this.seenMeta.add(meta.cars.toString());\n\n if (meta.key) {\n await this.setKey(meta.key);\n }\n if (carLogIncludesGroup(this.carLog, meta.cars)) {\n return;\n }\n const carHeader = await this.loadCarHeaderFromMeta<TransactionMeta>(meta);\n // fetch other cars down the compact log?\n // todo we should use a CID set for the compacted cids (how to expire?)\n // console.log('merge carHeader', carHeader.head.length, carHeader.head.toString(), meta.car.toString())\n carHeader.compact.map((c) => c.toString()).forEach(this.seenCompacted.add, this.seenCompacted);\n await this.getMoreReaders(carHeader.cars.flat());\n this.carLog = [...uniqueCids([meta.cars, ...this.carLog, ...carHeader.cars], this.seenCompacted)];\n await this.ebOpts.applyMeta?.(carHeader.meta);\n }\n\n protected async ingestKeyFromMeta(meta: DbMeta): Promise<void> {\n const { key } = meta;\n if (key) {\n await this.setKey(key);\n }\n }\n\n async loadCarHeaderFromMeta<T>({ cars: cids }: DbMeta): Promise<CarHeader<T>> {\n //Call loadCar for every cid\n const reader = await this.loadCar(cids[0]);\n return await parseCarFile(reader, this.logger);\n }\n\n async _getKey(): Promise<string | undefined> {\n if (this.key) return this.key;\n // generate a random key\n if (!this.ebOpts.public) {\n await this.setKey(toHexString(this.ebOpts.crypto.randomBytes(32)));\n }\n return this.key || undefined;\n }\n\n async commitFiles(\n t: CarTransaction,\n done: TransactionMeta,\n opts: CommitOpts = { noLoader: false, compact: false },\n ): Promise<CarGroup> {\n return this.commitQueue.enqueue(() => this._commitInternalFiles(t, done, opts));\n }\n // can these skip the queue? or have a file queue?\n async _commitInternalFiles(\n t: CarTransaction,\n done: TransactionMeta,\n opts: CommitOpts = { noLoader: false, compact: false },\n ): Promise<CarGroup> {\n await this.ready();\n const { files: roots } = this.makeFileCarHeader(done as FileTransactionMeta) as {\n files: AnyLink[];\n };\n const cids: AnyLink[] = [];\n const cars = await this.prepareCarFilesFiles(roots, t, !!opts.public);\n for (const car of cars) {\n const { cid, bytes } = car;\n await (await this.fileStore()).save({ cid, bytes });\n await (await this.remoteWAL()).enqueueFile(cid, !!opts.public);\n cids.push(cid);\n }\n\n return cids;\n }\n\n async loadFileCar(cid: AnyLink, isPublic = false): Promise<CarReader> {\n return await this.storesLoadCar(cid, await this.fileStore(), this.remoteFileStore, isPublic);\n }\n\n async commit<T = TransactionMeta>(\n t: CarTransaction,\n done: T,\n opts: CommitOpts = { noLoader: false, compact: false },\n ): Promise<CarGroup> {\n return this.commitQueue.enqueue(() => this._commitInternal(t, done, opts));\n }\n\n async cacheTransaction(t: CarTransaction) {\n for await (const block of t.entries()) {\n const sBlock = block.cid.toString();\n if (!this.getBlockCache.has(sBlock)) {\n this.getBlockCache.set(sBlock, block);\n }\n }\n }\n\n async cacheCarReader(carCidStr: string, reader: CarReader) {\n if (this.processedCars.has(carCidStr)) return;\n this.processedCars.add(carCidStr);\n for await (const block of reader.blocks()) {\n const sBlock = block.cid.toString();\n if (!this.getBlockCache.has(sBlock)) {\n this.getBlockCache.set(sBlock, block);\n }\n }\n }\n\n async _commitInternal<T>(t: CarTransaction, done: T, opts: CommitOpts = { noLoader: false, compact: false }): Promise<CarGroup> {\n await this.ready();\n const fp = this.makeCarHeader<T>(done, this.carLog, !!opts.compact);\n const rootBlock = await encodeCarHeader(fp);\n\n const cars = await this.prepareCarFiles(rootBlock, t, !!opts.public);\n const cids: AnyLink[] = [];\n for (const car of cars) {\n const { cid, bytes } = car;\n await (await this.carStore()).save({ cid, bytes });\n cids.push(cid);\n }\n\n await this.cacheTransaction(t);\n const newDbMeta = { cars: cids, key: this.key || null } as DbMeta;\n await (await this.remoteWAL()).enqueue(newDbMeta, opts);\n await (await this.metaStore()).save(newDbMeta);\n await this.updateCarLog(cids, fp, !!opts.compact);\n return cids;\n }\n\n async prepareCarFilesFiles(\n roots: AnyLink[],\n t: CarTransaction,\n isPublic: boolean,\n ): Promise<{ cid: AnyLink; bytes: Uint8Array }[]> {\n const theKey = isPublic ? null : await this._getKey();\n const car =\n theKey && this.ebOpts.crypto\n ? await encryptedEncodeCarFile(this.logger, this.ebOpts.crypto, theKey, roots[0], t)\n : await encodeCarFile(roots, t);\n return [car];\n }\n\n async prepareCarFiles(rootBlock: AnyBlock, t: CarTransaction, isPublic: boolean): Promise<{ cid: AnyLink; bytes: Uint8Array }[]> {\n const theKey = isPublic ? undefined : await this._getKey();\n const carFiles: { cid: AnyLink; bytes: Uint8Array }[] = [];\n const threshold = this.ebOpts.threshold || 1000 * 1000;\n let clonedt = new CarTransaction(t.parent, { add: false });\n clonedt.putSync(rootBlock.cid, rootBlock.bytes);\n let newsize = CBW.blockLength(toCIDBlock(rootBlock));\n let cidRootBlock = rootBlock;\n for (const { cid, bytes } of t.entries()) {\n newsize += CBW.blockLength(toCIDBlock({ cid: cid, bytes }));\n if (newsize >= threshold) {\n carFiles.push(await this.createCarFile(theKey, cidRootBlock.cid, clonedt));\n clonedt = new CarTransaction(t.parent, { add: false });\n clonedt.putSync(cid, bytes);\n cidRootBlock = { cid, bytes };\n newsize = CBW.blockLength(toCIDBlock({ cid, bytes })); //+ CBW.blockLength(rootBlock)\n } else {\n clonedt.putSync(cid, bytes);\n }\n }\n carFiles.push(await this.createCarFile(theKey, cidRootBlock.cid, clonedt));\n // console.log(\"split to \", carFiles.length, \"files\")\n return carFiles;\n }\n\n private async createCarFile(\n theKey: string | undefined,\n cid: AnyLink,\n t: CarTransaction,\n ): Promise<{ cid: AnyLink; bytes: Uint8Array }> {\n try {\n return theKey && this.ebOpts.crypto\n ? await encryptedEncodeCarFile(this.logger, this.ebOpts.crypto, theKey, cid, t)\n : await encodeCarFile([cid], t);\n } catch (e) {\n console.error(\"error creating car file\", e);\n throw e;\n }\n }\n\n protected makeFileCarHeader(result: FileTransactionMeta): TransactionMeta {\n const files: AnyLink[] = [];\n for (const [, meta] of Object.entries(result.files || {})) {\n if (meta && typeof meta === \"object\" && \"cid\" in meta && meta !== null) {\n files.push(meta.cid as AnyLink);\n }\n }\n return { ...result, files };\n }\n\n async updateCarLog<T>(cids: CarGroup, fp: CarHeader<T>, compact: boolean): Promise<void> {\n if (compact) {\n const previousCompactCid = fp.compact[fp.compact.length - 1];\n fp.compact.map((c) => c.toString()).forEach(this.seenCompacted.add, this.seenCompacted);\n this.carLog = [...uniqueCids([...this.carLog, ...fp.cars, cids], this.seenCompacted)];\n await this.removeCidsForCompact(previousCompactCid[0]);\n } else {\n this.carLog.unshift(cids);\n }\n }\n\n async removeCidsForCompact(cid: AnyLink) {\n const carHeader = await this.loadCarHeaderFromMeta({\n cars: [cid],\n } as unknown as DbMeta);\n for (const cids of carHeader.compact) {\n for (const cid of cids) {\n await (await this.carStore()).remove(cid);\n }\n }\n }\n\n // async flushCars() {\n // await this.ready\n // // for each cid in car log, make a dbMeta\n // for (const cid of this.carLog) {\n // const dbMeta = { car: cid, key: this.key || null } as DbMeta\n // await this.remoteWAL!.enqueue(dbMeta, { public: false })\n // }\n // }\n\n async *entries(cache = true): AsyncIterableIterator<AnyBlock> {\n await this.ready();\n if (cache) {\n for (const [, block] of this.getBlockCache) {\n yield block;\n }\n } else {\n for (const [, block] of this.getBlockCache) {\n yield block;\n }\n for (const cids of this.carLog) {\n for (const cid of cids) {\n const reader = await this.loadCar(cid);\n if (!reader) throw this.logger.Error().Ref(\"cid\", cid).Msg(\"missing car reader\").AsError();\n for await (const block of reader.blocks()) {\n const sCid = block.cid.toString();\n if (!this.getBlockCache.has(sCid)) {\n yield block;\n }\n }\n }\n }\n }\n }\n\n async getBlock(cid: AnyLink): Promise<AnyBlock | Falsy> {\n await this.ready();\n const sCid = cid.toString();\n if (this.getBlockCache.has(sCid)) return this.getBlockCache.get(sCid);\n\n const getCarCid = async (carCid: AnyLink) => {\n if (this.getBlockCache.has(sCid)) return this.getBlockCache.get(sCid);\n const reader = await this.loadCar(carCid);\n if (!reader) {\n throw this.logger.Error().Ref(\"cid\", carCid).Msg(\"missing car reader\").AsError();\n }\n await this.cacheCarReader(carCid.toString(), reader).catch(() => {\n return;\n });\n if (this.getBlockCache.has(sCid)) return this.getBlockCache.get(sCid);\n throw this.logger.Error().Str(\"cid\", sCid).Msg(\"block not in reader\").AsError();\n };\n\n const getCompactCarCids = async (carCid: AnyLink) => {\n // console.log(\"getCompactCarCids\", carCid.toString())\n\n const reader = await this.loadCar(carCid);\n if (!reader) {\n throw this.logger.Error().Str(\"cid\", carCid.toString()).Msg(\"missing car reader\").AsError();\n }\n\n const header = await parseCarFile(reader, this.logger);\n\n const compacts = header.compact;\n\n let got: AnyBlock | undefined;\n const batchSize = 5;\n for (let i = 0; i < compacts.length; i += batchSize) {\n const promises: Promise<AnyBlock | undefined>[] = [];\n for (let j = i; j < Math.min(i + batchSize, compacts.length); j++) {\n for (const cid of compacts[j]) {\n promises.push(getCarCid(cid));\n }\n }\n try {\n got = await Promise.any(promises);\n } catch {\n // Ignore the error and continue with the next iteration\n }\n if (got) break;\n }\n\n if (this.getBlockCache.has(sCid)) return this.getBlockCache.get(sCid);\n throw this.logger.Error().Str(\"cid\", sCid).Msg(\"block not in compact reader\").AsError();\n };\n\n let got;\n const batchSize = 5;\n for (let i = 0; i < this.carLog.length; i += batchSize) {\n const batch = this.carLog.slice(i, i + batchSize);\n const promises: Promise<AnyBlock | undefined>[] = batch.flatMap((slice) => slice.map(getCarCid));\n try {\n got = await Promise.any(promises);\n } catch {\n // Ignore the error and continue with the next iteration\n }\n if (got) break;\n }\n\n if (!got) {\n try {\n got = await getCompactCarCids(this.carLog[this.carLog.length - 1][0]);\n } catch {\n // Ignore the error and continue with the next iteration\n }\n }\n\n return got;\n }\n\n protected makeCarHeader<T>(meta: T, cars: CarLog, compact = false): CarHeader<T> {\n const coreHeader = compact ? { cars: [], compact: cars } : { cars, compact: [] };\n return { ...coreHeader, meta };\n }\n\n async loadCar(cid: AnyLink): Promise<CarReader> {\n if (!this.carStore) {\n throw this.logger.Error().Msg(\"car store not initialized\").AsError();\n }\n const loaded = await this.storesLoadCar(cid, await this.carStore(), this.remoteCarStore);\n return loaded;\n }\n\n //What if instead it returns an Array of CarHeader\n protected async storesLoadCar(cid: AnyLink, local: DataStore, remote?: DataStore, publicFiles?: boolean): Promise<CarReader> {\n const cidsString = cid.toString();\n if (!this.carReaders.has(cidsString)) {\n this.carReaders.set(\n cidsString,\n (async () => {\n let loadedCar: AnyBlock | undefined = undefined;\n try {\n //loadedCar now is an array of AnyBlocks\n this.logger.Debug().Str(\"cid\", cidsString).Msg(\"loading car\");\n loadedCar = await local.load(cid);\n this.logger.Debug().Bool(\"loadedCar\", loadedCar).Msg(\"loaded\");\n } catch (e) {\n if (remote) {\n const remoteCar = await remote.load(cid);\n if (remoteCar) {\n // todo test for this\n this.logger.Debug().Ref(\"cid\", remoteCar.cid).Msg(\"saving remote car locally\");\n await local.save(remoteCar);\n loadedCar = remoteCar;\n }\n } else {\n this.logger.Error().Str(\"cid\", cidsString).Err(e).Msg(\"loading car\");\n }\n }\n if (!loadedCar) {\n throw this.logger.Error().Url(local.url).Str(\"cid\", cidsString).Msg(\"missing car files\").AsError();\n }\n //This needs a fix as well as the fromBytes function expects a Uint8Array\n //Either we can merge the bytes or return an array of rawReaders\n const rawReader = await CarReader.fromBytes(loadedCar.bytes);\n const readerP = publicFiles ? Promise.resolve(rawReader) : this.ensureDecryptedReader(rawReader);\n\n const cachedReaderP = readerP.then(async (reader) => {\n await this.cacheCarReader(cidsString, reader).catch(() => {\n return;\n });\n return reader;\n });\n this.carReaders.set(cidsString, cachedReaderP);\n return readerP;\n })().catch((e) => {\n this.carReaders.delete(cidsString);\n throw e;\n }),\n );\n }\n return this.carReaders.get(cidsString) as Promise<CarReader>;\n }\n\n protected async ensureDecryptedReader(reader: CarReader): Promise<CarReader> {\n const theKey = await this._getKey();\n if (this.ebOpts.public || !(theKey && this.ebOpts.crypto)) {\n return reader;\n }\n const { blocks, root } = await decodeEncryptedCar(this.logger, this.ebOpts.crypto, theKey, reader);\n return {\n getRoots: () => [root],\n get: blocks.get.bind(blocks),\n blocks: blocks.entries.bind(blocks),\n } as unknown as CarReader;\n }\n\n protected async setKey(key: string) {\n if (this.key && this.key !== key)\n throw this.logger.Error().Str(\"this.key\", this.key).Str(\"key\", key).Msg(\"setting key\").AsError();\n this.key = key;\n const encoder = new TextEncoder();\n const data = encoder.encode(key);\n const hashBuffer = await this.ebOpts.crypto.digestSHA256(data);\n const hashArray = Array.from(new Uint8Array(hashBuffer));\n this.keyId = hashArray.map((b) => b.toString(16).padStart(2, \"0\")).join(\"\");\n }\n\n protected async getMoreReaders(cids: AnyLink[]) {\n const limit = pLimit(5);\n const missing = cids.filter((cid) => !this.carReaders.has(cid.toString()));\n await Promise.all(missing.map((cid) => limit(() => this.loadCar(cid))));\n }\n}\n","import type { CID, Link, Version } from \"multiformats\";\nimport { DataStore, MetaStore, RemoteWAL } from \"./store.js\";\nimport type { Loadable } from \"./loader.js\";\nimport { DocFileMeta, Falsy } from \"../types.js\";\nimport { CarTransaction } from \"./transaction.js\";\n\nexport type AnyLink = Link<unknown, number, number, Version>;\nexport type CarGroup = AnyLink[];\nexport type CarLog = CarGroup[];\nexport type AnyAnyLink = Link<unknown, number, number, Version>;\n\nexport type AnyLinkFn = (cid: AnyLink) => Promise<AnyBlock | undefined>;\n\nexport interface AnyBlock {\n readonly cid: Link<unknown, number, number, Version>;\n readonly bytes: Uint8Array;\n}\n\nexport interface CIDBlock {\n readonly cid: CID<unknown, number, number, Version>;\n readonly bytes: Uint8Array;\n}\n\nexport function toCIDBlock(block: AnyBlock): CIDBlock {\n return block as CIDBlock;\n}\nexport interface AnyAnyBlock {\n readonly cid: AnyAnyLink;\n readonly bytes: Uint8Array;\n}\n\nexport interface EncryptOpts {\n readonly key: ArrayBuffer;\n readonly cid: AnyLink;\n readonly bytes: Uint8Array;\n}\n\nexport interface DecryptOptsValue {\n readonly bytes: Uint8Array;\n readonly iv: Uint8Array;\n}\n\nexport interface DecryptOpts {\n readonly key: ArrayBuffer;\n readonly value: DecryptOptsValue;\n}\n\nexport interface AnyDecodedBlock {\n readonly cid: AnyLink;\n readonly bytes: Uint8Array;\n readonly value: DecryptOptsValue;\n}\n\nexport interface CarMakeable {\n entries(): Iterable<AnyBlock>;\n get(cid: AnyLink): Promise<AnyBlock | undefined>;\n}\n\nexport interface CarHeader<T> {\n readonly cars: CarLog;\n readonly compact: CarLog;\n readonly meta: T;\n}\n\n// type NestedData =\n// | Uint8Array\n// | string\n// | number\n// | boolean\n// | undefined\n// | null\n// | AnyLink\n// | NestedData[]\n// | { [key: string]: NestedData };\n\nexport interface TransactionWrapper<M extends TransactionMeta> {\n meta: M;\n cars?: CarGroup;\n t: CarTransaction;\n}\n\nexport type TransactionMeta = unknown;\n//CRDTMeta | IndexTransactionMeta | FileTransactionMeta;\n\n// export interface MakeCodecCrypto {\n// subtle: {\n// decrypt: (algo: { name: string; iv: Uint8Array; tagLength: number }, key: CryptoKey, data: Uint8Array) => Promise<ArrayBuffer>;\n// encrypt: (algo: { name: string; iv: Uint8Array; tagLength: number }, key: CryptoKey, data: Uint8Array) => Promise<ArrayBuffer>;\n// };\n// }\n\nexport interface CryptoOpts {\n // readonly crypto: MakeCodecCrypto; //| unknown;\n readonly importKey: typeof crypto.subtle.importKey;\n //(format: \"raw\", key: ArrayBuffer, algo: string, extractable: boolean, usages: string[]) => Promise<CryptoKey>;\n readonly decrypt: (\n algo: { name: string; iv: Uint8Array; tagLength: number },\n key: CryptoKey,\n data: Uint8Array,\n ) => Promise<ArrayBuffer>;\n readonly encrypt: (\n algo: { name: string; iv: Uint8Array; tagLength: number },\n key: CryptoKey,\n data: Uint8Array,\n ) => Promise<ArrayBuffer>;\n readonly digestSHA256: (data: Uint8Array) => Promise<ArrayBuffer>;\n readonly randomBytes: (size: number) => Uint8Array;\n}\n\nexport interface BlobLike {\n /**\n * Returns a ReadableStream which yields the Blob data.\n */\n stream: () => ReadableStream;\n}\n\nexport interface StoreFactory {\n makeMetaStore?: (loader: Loadable) => Promise<MetaStore>;\n makeDataStore?: (loader: Loadable) => Promise<DataStore>;\n makeRemoteWAL?: (loader: Loadable) => Promise<RemoteWAL>;\n\n encodeFile?: (blob: BlobLike) => Promise<{ cid: AnyLink; blocks: AnyBlock[] }>;\n decodeFile?: (blocks: unknown, cid: AnyLink, meta: DocFileMeta) => Promise<File>;\n}\n\nexport interface StoreOpts extends StoreFactory {\n readonly isIndex?: string; // index prefix\n readonly stores?: {\n // string means local storage\n // URL means schema selects the storeType\n readonly base?: string | URL;\n\n readonly meta?: string | URL;\n readonly data?: string | URL;\n readonly index?: string | URL;\n readonly remoteWAL?: string | URL;\n };\n}\n\nexport interface TestStore {\n // readonly url: URL;\n get(url: URL, key: string): Promise<Uint8Array>;\n // delete the underlying store and all its data\n // delete(): Promise<void>;\n}\n\nexport interface StoreRuntime {\n // the factories should produce ready-to-use stores\n // which means they have to call start() on the store\n // to fullfill lifecycle requirements\n // to release resources, like one database connection\n // for all stores a refcount on close() should be used\n makeMetaStore(loader: Loadable): Promise<MetaStore>;\n makeDataStore(loader: Loadable): Promise<DataStore>;\n makeRemoteWAL(loader: Loadable): Promise<RemoteWAL>;\n encodeFile(blob: BlobLike): Promise<{ cid: AnyLink; blocks: AnyBlock[] }>;\n decodeFile(blocks: unknown, cid: AnyLink, meta: DocFileMeta): Promise<File>;\n}\n\nexport interface CommitOpts {\n readonly noLoader?: boolean;\n readonly compact?: boolean;\n readonly public?: boolean;\n}\n\nexport interface DbMeta {\n readonly cars: CarGroup;\n key?: string;\n}\n\nexport interface UploadMetaFnParams {\n readonly name: string;\n readonly branch: string;\n}\n\nexport type FnParamTypes = \"data\" | \"file\";\n\nexport interface UploadDataFnParams {\n readonly type: FnParamTypes;\n readonly name: string;\n readonly car: string;\n readonly size: string;\n}\n\nexport interface DownloadDataFnParams {\n readonly type: FnParamTypes;\n readonly name: string;\n readonly car: string;\n}\n\nexport interface DownloadMetaFnParams {\n readonly name: string;\n readonly branch: string;\n}\n\nexport interface Connection {\n readonly loader?: Loadable;\n readonly loaded: Promise<void>;\n connectMeta({ loader }: { loader?: Loadable }): void;\n connectStorage({ loader }: { loader?: Loadable }): void;\n\n metaUpload(bytes: Uint8Array, params: UploadMetaFnParams): Promise<Uint8Array[] | Falsy>;\n dataUpload(bytes: Uint8Array, params: UploadDataFnParams, opts?: { public?: boolean }): Promise<void>;\n metaDownload(params: DownloadMetaFnParams): Promise<Uint8Array[] | Falsy>;\n dataDownload(params: DownloadDataFnParams): Promise<Uint8Array | Falsy>;\n}\n","import { CID } from \"multiformats\";\nimport { Block, encode, decode } from \"multiformats/block\";\nimport { sha256 as hasher } from \"multiformats/hashes/sha2\";\nimport * as raw from \"multiformats/codecs/raw\";\nimport * as CBW from \"@ipld/car/buffer-writer\";\nimport * as codec from \"@ipld/dag-cbor\";\nimport { CarReader } from \"@ipld/car\";\nimport type { Logger } from \"@adviser/cement\";\n\nimport { AnyBlock, AnyLink, CarHeader, CarMakeable } from \"./types.js\";\n\nexport async function encodeCarFile(roots: AnyLink[], t: CarMakeable): Promise<AnyBlock> {\n let size = 0;\n const headerSize = CBW.headerLength({ roots } as { roots: CID<unknown, number, number, 1>[] });\n size += headerSize;\n for (const { cid, bytes } of t.entries()) {\n size += CBW.blockLength({ cid, bytes } as Block<unknown, number, number, 1>);\n }\n const buffer = new Uint8Array(size);\n const writer = CBW.createWriter(buffer, { headerSize });\n\n for (const r of roots) {\n writer.addRoot(r as CID<unknown, number, number, 1>);\n }\n\n for (const { cid, bytes } of t.entries()) {\n writer.write({ cid, bytes } as Block<unknown, number, number, 1>);\n }\n writer.close();\n return await encode({ value: writer.bytes, hasher, codec: raw });\n}\n\nexport async function encodeCarHeader<T>(fp: CarHeader<T>) {\n return (await encode({\n value: { fp },\n hasher,\n codec,\n })) as AnyBlock;\n}\n\nexport async function parseCarFile<T>(reader: CarReader, logger: Logger): Promise<CarHeader<T>> {\n const roots = await reader.getRoots();\n const header = await reader.get(roots[0]);\n if (!header) throw logger.Error().Msg(\"missing header block\").AsError();\n const { value } = await decode({ bytes: header.bytes, hasher, codec });\n const fpvalue = value as { readonly fp: CarHeader<T> };\n // @jchris where is the fp attribute coming from?\n if (fpvalue && !fpvalue.fp) {\n throw logger.Error().Msg(\"missing fp\").AsError();\n }\n return fpvalue.fp;\n}\n","import { sha256 } from \"multiformats/hashes/sha2\";\nimport { CID } from \"multiformats\";\nimport { encode, decode, create as mfCreate } from \"multiformats/block\";\nimport type { MultihashHasher, ToString } from \"multiformats\";\n\nimport type { CarReader } from \"@ipld/car\";\nimport * as dagcbor from \"@ipld/dag-cbor\";\n\nimport { MemoryBlockstore } from \"@web3-storage/pail/block\";\n\n// @ts-expect-error \"prolly-trees\" has no types\nimport { bf } from \"prolly-trees/utils\";\n// @ts-expect-error \"prolly-trees\" has no types\nimport { nocache as cache } from \"prolly-trees/cache\";\n// @ts-expect-error \"prolly-trees\" has no types\nimport { create, load } from \"prolly-trees/cid-set\";\n\nimport { encodeCarFile } from \"./loader-helpers.js\";\nimport { makeCodec } from \"./encrypt-codec.js\";\nimport type { AnyLinkFn, AnyBlock, CarMakeable, AnyLink, AnyDecodedBlock, CryptoOpts } from \"./types.js\";\nimport { Logger } from \"@adviser/cement\";\n\nfunction carLogIncludesGroup(list: AnyLink[], cidMatch: AnyLink) {\n return list.some((cid: AnyLink) => {\n return cid.toString() === cidMatch.toString();\n });\n}\n\nfunction makeEncDec(logger: Logger, crypto: CryptoOpts, randomBytes: (size: number) => Uint8Array) {\n const codec = makeCodec(logger, crypto, randomBytes);\n\n const encrypt = async function* ({\n get,\n cids,\n hasher,\n key,\n cache,\n chunker,\n root,\n }: {\n get: (cid: AnyLink) => Promise<AnyBlock | undefined>;\n key: ArrayBuffer;\n cids: AnyLink[];\n hasher: MultihashHasher<number>;\n chunker: (bytes: Uint8Array) => AsyncGenerator<Uint8Array>;\n cache: (cid: AnyLink) => Promise<AnyBlock>;\n root: AnyLink;\n }): AsyncGenerator<unknown, void, unknown> {\n const set = new Set<ToString<AnyLink>>();\n let eroot;\n if (!carLogIncludesGroup(cids, root)) cids.push(root);\n for (const cid of cids) {\n const unencrypted = await get(cid);\n if (!unencrypted) throw logger.Error().Ref(\"cid\", cid).Msg(\"missing cid block\").AsError();\n const encrypted = await codec.encrypt({ ...unencrypted, key });\n const block = await encode({ ...encrypted, codec, hasher });\n yield block;\n set.add(block.cid.toString());\n if (unencrypted.cid.equals(root)) eroot = block.cid;\n }\n if (!eroot) throw logger.Error().Msg(\"cids does not include root\").AsError();\n const list = [...set].map((s) => CID.parse(s));\n let last;\n for await (const node of create({ list, get, cache, chunker, hasher, codec: dagcbor })) {\n const block = (await node.block) as AnyBlock;\n yield block;\n last = block;\n }\n if (!last) throw logger.Error().Msg(\"missing last block\").AsError();\n const head = [eroot, last.cid];\n const block = await encode({ value: head, codec: dagcbor, hasher });\n yield block;\n };\n\n const decrypt = async function* ({\n root,\n get,\n key,\n cache,\n chunker,\n hasher,\n }: {\n root: AnyLink;\n get: (cid: AnyLink) => Promise<AnyBlock | undefined>;\n key: ArrayBuffer;\n cache: (cid: AnyLink) => Promise<AnyBlock>;\n chunker: (bytes: Uint8Array) => AsyncGenerator<Uint8Array>;\n hasher: MultihashHasher<number>;\n }): AsyncGenerator<AnyBlock, void, undefined> {\n const getWithDecode = async (cid: AnyLink) =>\n get(cid).then(async (block) => {\n if (!block) return;\n const decoded = await decode({ ...block, codec: dagcbor, hasher });\n return decoded;\n });\n const getWithDecrypt = async (cid: AnyLink) =>\n get(cid).then(async (block) => {\n if (!block) return;\n const decoded = await decode({ ...block, codec, hasher });\n return decoded;\n });\n const decodedRoot = await getWithDecode(root);\n if (!decodedRoot) throw logger.Error().Msg(\"missing root\").AsError();\n if (!decodedRoot.bytes) throw logger.Error().Msg(\"missing bytes\").AsError();\n const {\n value: [eroot, tree],\n } = decodedRoot as { value: [AnyLink, AnyLink] };\n const rootBlock = (await get(eroot)) as AnyDecodedBlock;\n if (!rootBlock) throw logger.Error().Msg(\"missing root block\").AsError();\n const cidset = await load({ cid: tree, get: getWithDecode, cache, chunker, codec, hasher });\n const { result: nodes } = (await cidset.getAllEntries()) as { result: { cid: CID }[] };\n const unwrap = async (eblock?: AnyDecodedBlock) => {\n if (!eblock) throw logger.Error().Msg(\"missing block\").AsError();\n if (!eblock.value) {\n eblock = await decode({ ...eblock, codec, hasher });\n if (!eblock.value) throw logger.Error().Msg(\"missing value\").AsError();\n }\n const { bytes, cid } = await codec.decrypt({ ...eblock, key }).catch((e) => {\n throw e;\n });\n const block = await mfCreate({ cid, bytes, hasher, codec });\n return block;\n };\n const promises = [];\n for (const { cid } of nodes) {\n if (!rootBlock.cid.equals(cid)) promises.push(getWithDecrypt(cid).then(unwrap));\n }\n yield* promises;\n yield unwrap(rootBlock);\n };\n return { encrypt, decrypt };\n}\nconst chunker = bf(30);\n\nfunction hexStringToUint8Array(hexString: string) {\n const length = hexString.length;\n const uint8Array = new Uint8Array(length / 2);\n for (let i = 0; i < length; i += 2) {\n uint8Array[i / 2] = parseInt(hexString.substring(i, i + 2), 16);\n }\n return uint8Array;\n}\n\nexport async function encryptedEncodeCarFile(\n logger: Logger,\n crypto: CryptoOpts,\n key: string,\n rootCid: AnyLink,\n t: CarMakeable,\n): Promise<AnyBlock> {\n const encryptionKey = hexStringToUint8Array(key);\n const encryptedBlocks = new MemoryBlockstore();\n const cidsToEncrypt = [] as AnyLink[];\n for (const { cid, bytes } of t.entries()) {\n cidsToEncrypt.push(cid);\n const g = await t.get(cid);\n if (!g) throw logger.Error().Ref(\"cid\", cid).Int(\"bytes\", bytes.length).Msg(\"missing cid block\").AsError();\n }\n let last: AnyBlock | null = null;\n const { encrypt } = makeEncDec(logger, crypto, crypto.randomBytes);\n\n for await (const block of encrypt({\n cids: cidsToEncrypt,\n get: t.get.bind(t),\n key: encryptionKey,\n hasher: sha256,\n chunker,\n cache,\n root: rootCid,\n }) as AsyncGenerator<AnyBlock, void, unknown>) {\n await encryptedBlocks.put(block.cid, block.bytes);\n last = block;\n }\n if (!last) throw logger.Error().Msg(\"no blocks encrypted\").AsError();\n const encryptedCar = await encodeCarFile([last.cid], encryptedBlocks);\n return encryptedCar;\n}\n\nexport async function decodeEncryptedCar(logger: Logger, crypto: CryptoOpts, key: string, reader: CarReader) {\n const roots = await reader.getRoots();\n const root = roots[0];\n return await decodeCarBlocks(logger, crypto, root, reader.get.bind(reader) as AnyLinkFn, key);\n}\nasync function decodeCarBlocks(\n logger: Logger,\n crypto: CryptoOpts,\n root: AnyLink,\n get: (cid: AnyLink) => Promise<AnyBlock | undefined>,\n keyMaterial: string,\n): Promise<{ blocks: MemoryBlockstore; root: AnyLink }> {\n const decryptionKeyUint8 = hexStringToUint8Array(keyMaterial);\n const decryptionKey = decryptionKeyUint8.buffer.slice(0, decryptionKeyUint8.byteLength);\n\n const decryptedBlocks = new MemoryBlockstore();\n let last: AnyBlock | null = null;\n\n const { decrypt } = makeEncDec(logger, crypto, crypto.randomBytes);\n\n for await (const block of decrypt({\n root,\n get,\n key: decryptionKey,\n hasher: sha256,\n chunker,\n cache,\n })) {\n await decryptedBlocks.put(block.cid, block.bytes);\n last = block;\n }\n if (!last) throw logger.Error().Msg(\"no blocks decrypted\").AsError();\n return { blocks: decryptedBlocks, root: last.cid };\n}\n","const readUInt32LE = buffer => {\n const offset = buffer.byteLength - 4;\n return (buffer[offset] | buffer[offset + 1] << 8 | buffer[offset + 2] << 16) + buffer[offset + 3] * 16777216;\n};\nconst MAX_UINT32 = 4294967295;\nconst bf = factor => {\n const threshold = Math.floor(MAX_UINT32 / factor);\n return async entry => {\n const identity = await entry.identity();\n if (typeof identity !== 'number') {\n throw new Error('Identity must be a number');\n }\n if (identity <= threshold) {\n return true;\n }\n return false;\n };\n};\nconst enc32 = value => {\n value = +value;\n const buff = new Uint8Array(4);\n buff[3] = value >>> 24;\n buff[2] = value >>> 16;\n buff[1] = value >>> 8;\n buff[0] = value & 255;\n return buff;\n};\nconst simpleCompare = (a, b) => {\n if (a === b)\n return 0;\n if (a > b)\n return 1;\n return -1;\n};\nconst binaryCompare = (b1, b2) => {\n for (let i = 0; i < b1.byteLength; i++) {\n if (b2.byteLength === i)\n return 1;\n const c1 = b1[i];\n const c2 = b2[i];\n if (c1 === c2)\n continue;\n if (c1 > c2)\n return 1;\n else\n return -1;\n }\n if (b2.byteLength > b1.byteLength)\n return -1;\n return 0;\n};\nclass CIDCounter {\n constructor() {\n this._cids = new Set();\n }\n add(node) {\n if (!node.address) {\n throw new Error('Cannot add node without address');\n }\n if (node.address.then) {\n const p = node.address.then(cid => this._cids.add(cid.toString()));\n this._cids.add(p);\n p.then(() => this._cids.delete(p));\n } else {\n this._cids.add(node.address.toString());\n }\n }\n async all() {\n await Promise.all([...this._cids]);\n return this._cids;\n }\n}\nexport {\n readUInt32LE,\n enc32,\n bf,\n binaryCompare,\n simpleCompare,\n CIDCounter\n};","const nocache = {\n has: () => false,\n get: () => {\n throw new Error('Cannot ask for entries from nocache');\n },\n set: () => {\n }\n};\nconst toKey = key => key.asCID === key ? key.toString() : JSON.stringify(key);\nconst global = {\n blocks: {},\n has: key => !!global.blocks[toKey(key)],\n set: async node => {\n let key = node.address;\n if (key.then)\n key = await key;\n key = toKey(key);\n if (!global.blocks[key])\n global.blocks[key] = node;\n },\n get: key => {\n key = toKey(key);\n if (typeof global.blocks[key] === 'undefined')\n throw new Error('Not found');\n return global.blocks[key];\n }\n};\nexport {\n nocache,\n global\n};","import { encode as multiformatEncode } from 'multiformats/block';\nimport { CIDCounter } from './utils.js';\nclass Entry {\n constructor({key, address}, opts = {}) {\n this.key = key;\n this.address = address;\n this.codec = opts.codec;\n this.hasher = opts.hasher;\n }\n get isEntry() {\n return true;\n }\n}\nclass EntryList {\n constructor({entries, closed}) {\n if (typeof closed !== 'boolean')\n throw new Error('Missing required argument \"closed\"');\n this.entries = entries;\n this.closed = closed;\n this.startKey = entries[0].key;\n }\n find(key, compare) {\n const {entries} = this;\n for (let i = entries.length - 1; i > -1; i--) {\n const entry = entries[i];\n const comp = compare(key, entry.key);\n if (comp > -1) {\n return [\n i,\n entry\n ];\n }\n }\n return null;\n }\n findMany(keys, compare, sorted = false, strict = false) {\n const {entries} = this;\n const results = new Map();\n if (!sorted) {\n keys = keys.sort(compare);\n } else {\n keys = [...keys];\n }\n for (let i = entries.length - 1; i > -1; i--) {\n if (!keys.length)\n break;\n const entry = entries[i];\n const found = [];\n while (keys.length) {\n let key = keys[keys.length - 1];\n key = key.key ? key.key : key;\n const comp = compare(key, entry.key);\n if (!strict) {\n if (comp > -1) {\n found.push(keys.pop());\n } else {\n break;\n }\n } else {\n if (comp === 0) {\n found.push(keys.pop());\n } else if (comp > 0) {\n keys.pop();\n } else {\n break;\n }\n }\n }\n if (found.length) {\n results.set(i, [\n entry,\n found\n ]);\n }\n }\n return results;\n }\n findRange(start, end, compare) {\n const {entries} = this;\n let last;\n let first = 0;\n for (let i = entries.length - 1; i > -1; i--) {\n const entry = entries[i];\n const comp = compare(end, entry.key);\n if (comp > 0) {\n last = i;\n break;\n }\n }\n for (let i = 0; i < entries.length; i++) {\n const entry = entries[i];\n const comp = compare(start, entry.key);\n if (comp === 0) {\n first = i;\n break;\n } else if (comp < 0) {\n break;\n }\n first = i;\n }\n return {\n first,\n last,\n entries: entries.slice(first, last + 1)\n };\n }\n}\nconst stringKey = key => typeof key === 'string' ? key : JSON.stringify(key);\nfunction sortBulk(bulk, opts) {\n return bulk.sort(({key: a}, {key: b}) => opts.compare(a, b));\n}\nasync function filterLeftmostInserts(first, bulk, compare) {\n const inserts = [];\n for (const b of bulk) {\n const {key, del} = b;\n if (compare(key, first) < 0) {\n if (!del)\n inserts.push(b);\n } else {\n break;\n }\n }\n return inserts;\n}\nasync function generateNewLeaves(inserts, opts, {chunker, compare}) {\n return await Node.from({\n entries: inserts.map(insert => new opts.LeafEntryClass(insert, opts)).sort((a, b) => compare(a.key, b.key)),\n chunker,\n NodeClass: opts.LeafClass,\n distance: 0,\n opts\n });\n}\nasync function generateBranchEntries(that, newLeaves, results, opts) {\n return await Promise.all(newLeaves.map(async node => {\n const block = await node.encode();\n results.blocks.push({\n block,\n node\n });\n that.cache.set(node);\n const newBranchEntry = new opts.BranchEntryClass({\n key: node.key,\n address: await node.address\n }, opts);\n return newBranchEntry;\n }));\n}\nasync function processRoot(that, results, bulk, nodeOptions) {\n const root = results.root;\n results.blocks.push({\n block: await root.encode(),\n node: root\n });\n that.cache.set(root);\n const opts = nodeOptions.opts;\n const distance = root.distance;\n const first = root.entryList.startKey;\n const inserts = await filterLeftmostInserts(first, bulk, that.compare);\n if (inserts.length) {\n const newLeaves = await generateNewLeaves(inserts, opts, that);\n const branchEntries = await generateBranchEntries(that, newLeaves, results, opts);\n const firstRootEntry = new opts.BranchEntryClass({\n key: root.entryList.startKey,\n address: await root.address\n }, opts);\n const newBranchEntries = [\n firstRootEntry,\n ...branchEntries\n ].sort(({key: a}, {key: b}) => opts.compare(a, b));\n let newBranches = await Node.from({\n ...nodeOptions,\n entries: newBranchEntries,\n chunker: that.chunker,\n NodeClass: opts.BranchClass,\n distance: distance + 1\n });\n let allBranches = [...newBranches];\n while (newBranches.length > 1) {\n const newBranchEntries = await Promise.all(newBranches.map(async l => new opts.BranchEntryClass({\n key: l.key,\n address: await l.address\n }, opts)));\n newBranches = await Node.from({\n ...nodeOptions,\n entries: newBranchEntries.sort(({key: a}, {key: b}) => opts.compare(a, b)),\n chunker: that.chunker,\n NodeClass: opts.BranchClass,\n distance: distance + 1\n });\n allBranches = [\n ...allBranches,\n ...newBranches\n ];\n }\n await Promise.all(allBranches.map(async m => {\n const block = await m.encode();\n that.cache.set(m);\n results.blocks.push({\n block,\n node: m\n });\n }));\n results.root = newBranches[0];\n results.nodes = [\n ...results.nodes,\n ...allBranches\n ];\n }\n}\nclass Node {\n constructor({entryList, chunker, distance, getNode, compare, cache}) {\n this.entryList = entryList;\n this.chunker = chunker;\n this.distance = distance;\n this.getNode = getNode;\n this.compare = compare;\n this.cache = cache;\n }\n get closed() {\n return this.entryList.closed;\n }\n get key() {\n return this.entryList.startKey;\n }\n async getEntry(key, cids = new CIDCounter()) {\n const result = await this._getEntry(key, cids);\n return {\n result,\n cids\n };\n }\n async _getEntry(key, cids) {\n cids.add(this);\n let node = this;\n while (!node.isLeaf) {\n const result = node.entryList.find(key, this.compare);\n if (result === null)\n throw new Error('Not found');\n const [, entry] = result;\n node = await this.getNode(await entry.address);\n cids.add(node);\n }\n const result = node.entryList.find(key, this.compare);\n if (result === null || result[1].key.toString() !== key.toString())\n throw new Error('Not found');\n const [, entry] = result;\n return entry;\n }\n async getAllEntries(cids = new CIDCounter()) {\n const result = await this._getAllEntries(cids);\n return {\n result,\n cids\n };\n }\n _getAllEntries(cids) {\n cids.add(this);\n if (this.isLeaf) {\n return this.entryList.entries;\n } else {\n const {entries} = this.entryList;\n const mapper = async entry => this.getNode(await entry.address).then(node => node._getAllEntries(cids)).catch(async err => {\n throw err;\n });\n return Promise.all(entries.map(mapper)).then(results => results.flat());\n }\n }\n async *vis(cids = new Set()) {\n const renderNodeLabel = async node => {\n if (node.isLeaf) {\n const entries = node.entryList.entries.map(e => `[${ e.key },${ JSON.stringify(e.value).replace(/\"/g, '\\'') }]`).join(', ');\n return `Leaf [${ entries }]`;\n } else {\n const entries = node.entryList.entries.map(e => `[${ e.key }]`).join(', ');\n return `Branch [${ entries }]`;\n }\n };\n const shortCid = cid => cid.toString().slice(0, 4) + cid.toString().slice(-4);\n const visit = async function* (node, parentId, cids) {\n const nodeId = await node.address;\n if (!cids.has(nodeId)) {\n cids.add(nodeId);\n const nodeLabel = await renderNodeLabel(node);\n yield ` node [shape=ellipse fontname=\"Courier\"]; ${ shortCid(nodeId) } [label=\"${ nodeLabel }\"];`;\n yield ` ${ shortCid(parentId) } -> ${ shortCid(nodeId) };`;\n for (const entry of node.entryList.entries) {\n if (entry.address) {\n const entryId = await entry.address;\n try {\n const childNode = await node.getNode(entryId);\n yield* await visit(childNode, nodeId, cids);\n } catch (err) {\n yield ` ${ shortCid(nodeId) } -> ${ shortCid(entryId) };`;\n yield ` node [shape=ellipse fontname=\"Courier\"]; ${ shortCid(entryId) } [label=\"Error: ${ err.message }\"];`;\n }\n }\n }\n }\n };\n yield 'digraph tree {';\n yield ' node [shape=ellipse fontname=\"Courier\"]; rootnode;';\n for await (const line of visit(this, 'rootnode', cids)) {\n yield line;\n }\n yield '}';\n }\n async getEntries(keys, sorted = false, cids = new CIDCounter()) {\n const result = await this._getEntries(keys, sorted, cids);\n return {\n result,\n cids\n };\n }\n async _getEntries(keys, sorted, cids) {\n cids.add(this);\n if (!sorted)\n keys = keys.sort(this.compare);\n const results = this.entryList.findMany(keys, this.compare, true, this.isLeaf);\n if (this.isLeaf) {\n return [...results.values()].map(([entry]) => entry);\n }\n let entries = [];\n for (const [entry, keys] of [...results.values()].reverse()) {\n const p = this.getNode(await entry.address);\n entries.push(p.then(node => node._getEntries(keys.reverse(), true, cids)));\n }\n entries = await Promise.all(entries);\n return entries.flat();\n }\n async getRangeEntries(start, end, cids = new CIDCounter()) {\n const result = await this._getRangeEntries(start, end, cids);\n return {\n result,\n cids\n };\n }\n _getRangeEntries(start, end, cids) {\n cids.add(this);\n const {entries} = this.entryList.findRange(start, end, this.compare);\n if (this.isLeaf) {\n return entries.filter(entry => {\n const s = this.compare(start, entry.key);\n const e = this.compare(end, entry.key);\n if (s <= 0 && e >= 0)\n return true;\n return false;\n });\n }\n if (!entries.length)\n return [];\n const thenRange = async entry => this.getNode(await entry.address).then(node => node._getRangeEntries(start, end, cids));\n const results = [thenRange(entries.shift())];\n if (!entries.length)\n return results[0];\n const last = thenRange(entries.pop());\n while (entries.length) {\n const thenAll = async entry => this.getNode(await entry.address).then(async node => node._getAllEntries(cids));\n results.push(thenAll(entries.shift()));\n }\n results.push(last);\n return Promise.all(results).then(results => results.flat());\n }\n async transaction(bulk, opts = {}) {\n opts = {\n codec: this.codec,\n hasher: this.hasher,\n getNode: this.getNode,\n compare: this.compare,\n cache: this.cache,\n ...opts\n };\n const nodeOptions = {\n chunker: this.chunker,\n opts\n };\n const results = this.entryList.findMany(bulk, opts.compare, true, this.isLeaf);\n if (this.isLeaf) {\n return await this.transactionLeaf(bulk, opts, nodeOptions, results);\n } else {\n return await this.transactionBranch(bulk, opts, nodeOptions, results);\n }\n }\n async transactionLeaf(bulk, opts, nodeOptions, results) {\n const {LeafClass, LeafEntryClass} = opts;\n const {entries, previous} = this.processLeafEntries(bulk, results, LeafEntryClass, opts);\n const _opts = {\n ...nodeOptions,\n entries,\n NodeClass: LeafClass,\n distance: 0\n };\n const nodes = await Node.from(_opts);\n return {\n nodes,\n previous,\n blocks: await Promise.all(nodes.map(async n => {\n const block = await n.encode();\n this.cache.set(n);\n return {\n block,\n node: n\n };\n })),\n distance: 0\n };\n }\n processLeafEntries(bulk, results, LeafEntryClass, opts) {\n const previous = [];\n let entries = [];\n const changes = {};\n const deletes = new Map();\n for (const {key, del, value} of bulk) {\n const skey = stringKey(key);\n if (del) {\n if (typeof changes[skey] === 'undefined')\n deletes.set(skey, null);\n } else {\n changes[skey] = {\n key,\n value\n };\n deletes.delete(skey);\n }\n }\n entries = [...this.entryList.entries];\n for (const [i, [entry]] of results) {\n previous.push(entry);\n const skey = stringKey(entry.key);\n if (deletes.has(skey)) {\n deletes.set(skey, i);\n } else {\n entries[i] = new LeafEntryClass(changes[skey], opts);\n delete changes[skey];\n }\n }\n let count = 0;\n for (const [, i] of deletes) {\n if (i !== null)\n entries.splice(i - count++, 1);\n }\n const appends = Object.values(changes).map(obj => new LeafEntryClass(obj, opts));\n entries = entries.concat(appends).sort(({key: a}, {key: b}) => opts.compare(a, b));\n return {\n entries,\n previous\n };\n }\n async transactionBranch(bulk, opts, nodeOptions, results) {\n const {BranchClass, BranchEntryClass} = opts;\n let distance = 0;\n for (const [i, [entry, keys]] of results) {\n const p = this.getNode(await entry.address).then(node => node.transaction(keys.reverse(), {\n ...opts,\n sorted: true\n })).then(r => ({\n entry,\n keys,\n distance,\n ...r\n }));\n results.set(i, p);\n }\n let entries = [...this.entryList.entries];\n const final = {\n previous: [],\n blocks: [],\n nodes: []\n };\n for (const [i, p] of results) {\n const {\n nodes,\n previous,\n blocks,\n distance: _distance\n } = await p;\n distance = _distance;\n entries[i] = nodes;\n if (previous.length)\n final.previous = final.previous.concat(previous);\n if (blocks.length)\n final.blocks = final.blocks.concat(blocks);\n if (nodes.length)\n final.nodes = final.nodes.concat(nodes);\n }\n entries = entries.flat();\n const newEntries = await this.handlePrepend(entries, opts, nodeOptions, final, distance);\n distance++;\n const toEntry = async branch => {\n if (branch.isEntry)\n return branch;\n const block = await branch.encode();\n final.blocks.push({\n block,\n node: branch\n });\n this.cache.set(branch);\n return new BranchEntryClass(branch, opts);\n };\n entries = await Promise.all(newEntries.map(toEntry));\n const _opts = {\n ...nodeOptions,\n entries,\n NodeClass: BranchClass,\n distance\n };\n const newNodes = await Node.from(_opts);\n await Promise.all(newNodes.map(async n => {\n const block = await n.encode();\n final.blocks.push({\n block,\n node: n\n });\n this.cache.set(n);\n }));\n final.nodes = newNodes;\n return {\n ...final,\n distance\n };\n }\n async handlePrepend(entries, opts, nodeOptions, final, distance) {\n const {BranchClass, LeafClass} = opts;\n let newEntries = [];\n let prepend = null;\n for (const entry of entries) {\n if (prepend) {\n const mergeEntries = await this.mergeFirstLeftEntries(entry, prepend, nodeOptions, final, distance);\n prepend = null;\n const NodeClass = !mergeEntries[0].address ? LeafClass : BranchClass;\n const _opts = {\n ...nodeOptions,\n entries: mergeEntries.sort(({key: a}, {key: b}) => opts.compare(a, b)),\n NodeClass,\n distance: distance\n };\n const nodes = await Node.from(_opts);\n if (!nodes[nodes.length - 1].closed) {\n prepend = nodes.pop();\n }\n if (nodes.length) {\n newEntries = newEntries.concat(nodes);\n }\n } else {\n if (!entry.isEntry && !entry.closed) {\n prepend = entry;\n } else {\n newEntries.push(entry);\n }\n }\n }\n if (prepend) {\n newEntries.push(prepend);\n }\n return newEntries;\n }\n async getNodeFirstFromBlocks(blocks, addr) {\n for (const {block, node} of blocks) {\n if (await block.cid === addr)\n return node;\n }\n return await this.getNode(addr);\n }\n async mergeFirstLeftEntries(entry, prepend, nodeOptions, final, distance) {\n const opts = nodeOptions.opts;\n const {LeafClass, BranchClass, BranchEntryClass} = opts;\n if (entry.isEntry) {\n const addr = await entry.address;\n entry = await this.getNodeFirstFromBlocks(final.blocks, addr);\n }\n const es = entry.entryList.entries;\n if (!es.length)\n throw new Error('unreachable no entries');\n const basicMerge = (entries1, entries2) => {\n return entries1.concat(entries2);\n };\n const processNodesAndCreateEntries = async (nodes, final, opts) => {\n return await Promise.all(nodes.map(async l => {\n final.blocks.push({\n block: await l.encode(),\n node: l\n });\n this.cache.set(l);\n return new BranchEntryClass({\n key: l.key,\n address: await l.address\n }, opts);\n }));\n };\n if (es[0].constructor.name === prepend.entryList.entries[0].constructor.name) {\n return await basicMerge(prepend.entryList.entries, es);\n } else {\n const leftEntry = es.shift();\n if (!leftEntry)\n throw new Error('unreachable no left entry');\n if (!leftEntry.address)\n throw new Error('unreachable existing leaf, no leftEntry.address');\n const mergeLeftEntries = await this.mergeFirstLeftEntries(leftEntry, prepend, nodeOptions, final, distance - 1);\n const esf = es.shift();\n if (!esf) {\n return mergeLeftEntries;\n }\n if (!esf.address)\n throw new Error('unreachable existing leaf, no esf.address');\n const oldFront = await this.getNodeFirstFromBlocks(final.blocks, await esf.address);\n if (!oldFront.entryList.entries[0].address) {\n const leftLeafEntries = await basicMerge(mergeLeftEntries, oldFront.entryList.entries);\n const leftLeafNodes = await Node.from({\n ...nodeOptions,\n entries: leftLeafEntries.sort(({key: a}, {key: b}) => opts.compare(a, b)),\n NodeClass: LeafClass,\n distance\n });\n const leftBranches = await processNodesAndCreateEntries(leftLeafNodes, final, opts);\n return await basicMerge(leftBranches, es);\n } else {\n if (mergeLeftEntries[0].address) {\n return mergeLeftEntries.concat(oldFront.entryList.entries);\n } else {\n const mergeLeftNodes = await Node.from({\n ...nodeOptions,\n entries: mergeLeftEntries.sort(({key: a}, {key: b}) => opts.compare(a, b)),\n NodeClass: LeafClass,\n distance\n });\n const mergeLeftBranchEntries = await processNodesAndCreateEntries(mergeLeftNodes, final, opts);\n const newFirstNodes = await Node.from({\n ...nodeOptions,\n entries: [\n ...oldFront.entryList.entries,\n ...mergeLeftBranchEntries,\n ...es\n ].sort(({key: a}, {key: b}) => opts.compare(a, b)),\n NodeClass: BranchClass,\n distance\n });\n const newBranchEntries = await processNodesAndCreateEntries(newFirstNodes, final, opts);\n return newBranchEntries;\n }\n }\n }\n }\n async bulk(bulk, opts = {}, isRoot = true) {\n const {BranchClass} = opts;\n opts = {\n codec: this.codec,\n hasher: this.hasher,\n getNode: this.getNode,\n compare: this.compare,\n cache: this.cache,\n ...opts\n };\n if (!opts.sorted) {\n bulk = sortBulk(bulk, opts);\n opts.sorted = true;\n }\n const nodeOptions = {\n chunker: this.chunker,\n opts\n };\n const results = await this.transaction(bulk, opts);\n while (results.nodes.length > 1) {\n const newDistance = results.nodes[0].distance + 1;\n const branchEntries = await Promise.all(results.nodes.map(async node => {\n const block = await node.encode();\n results.blocks.push({\n block,\n node\n });\n this.cache.set(node);\n return new opts.BranchEntryClass(node, opts);\n }));\n const newNodes = await Node.from({\n ...nodeOptions,\n entries: branchEntries,\n NodeClass: BranchClass,\n distance: newDistance\n });\n await Promise.all(newNodes.map(async node => {\n const block = await node.encode();\n this.cache.set(node);\n results.blocks.push({\n block,\n node\n });\n }));\n results.nodes = newNodes;\n }\n results.root = results.nodes[0];\n if (isRoot && results.root) {\n await processRoot(this, results, bulk, nodeOptions);\n }\n results.blocks = results.blocks.map(({block}) => block);\n return results;\n }\n static async from({entries, chunker, NodeClass, distance, opts}) {\n if (!entries.every(entry => entry.constructor.name === entries[0].constructor.name))\n throw new Error('all entries must be of the same type');\n const parts = [];\n let chunk = [];\n for (const entry of entries) {\n chunk.push(entry);\n if (await chunker(entry, distance)) {\n parts.push(new EntryList({\n entries: chunk,\n closed: true\n }));\n chunk = [];\n }\n }\n if (chunk.length) {\n parts.push(new EntryList({\n entries: chunk,\n closed: false\n }));\n }\n return parts.map(entryList => new NodeClass({\n entryList,\n chunker,\n distance,\n ...opts\n }));\n }\n}\nclass IPLDNode extends Node {\n constructor({codec, hasher, block, ...opts}) {\n super(opts);\n this.codec = codec;\n this.hasher = hasher;\n if (!block) {\n this.block = this.encode();\n this.address = this.block.then(block => block.cid);\n } else {\n this.block = block;\n this.address = block.cid;\n }\n }\n async get(key) {\n const {\n result: entry,\n cids\n } = await this.getEntry(key);\n return {\n result: entry.key,\n cids\n };\n }\n async encode() {\n if (this.block)\n return this.block;\n const value = await this.encodeNode();\n const opts = {\n codec: this.codec,\n hasher: this.hasher,\n value\n };\n this.block = await multiformatEncode(opts);\n return this.block;\n }\n}\nclass IPLDBranch extends IPLDNode {\n async encodeNode() {\n const {entries} = this.entryList;\n const mapper = async entry => {\n if (!entry.address)\n throw new Error('entry.address required');\n return [\n entry.key,\n await entry.address\n ];\n };\n const list = await Promise.all(entries.map(mapper));\n return {\n branch: [\n this.distance,\n list\n ],\n closed: this.closed\n };\n }\n get isBranch() {\n return true;\n }\n}\nclass IPLDLeaf extends IPLDNode {\n async encodeNode() {\n const list = await Promise.all(this.entryList.entries.map(async entry => await entry.encodeNode()));\n return {\n leaf: list,\n closed: this.closed\n };\n }\n get isLeaf() {\n return true;\n }\n}\nconst create = async function* (obj) {\n let {LeafClass, LeafEntryClass, BranchClass, BranchEntryClass, list, chunker, compare, ...opts} = obj;\n list = list.map(value => new LeafEntryClass(value, opts));\n opts.compare = compare;\n let nodes = await Node.from({\n entries: list,\n chunker,\n NodeClass: LeafClass,\n distance: 0,\n opts\n });\n yield* nodes;\n let distance = 1;\n while (nodes.length > 1) {\n const mapper = async node => new BranchEntryClass({\n key: node.key,\n address: await node.address\n }, opts);\n const entries = await Promise.all(nodes.map(mapper));\n nodes = await Node.from({\n entries,\n chunker,\n NodeClass: BranchClass,\n distance,\n opts\n });\n yield* nodes;\n distance++;\n }\n};\nexport {\n Node,\n Entry,\n EntryList,\n IPLDNode,\n IPLDLeaf,\n IPLDBranch,\n create\n};","import {\n Entry,\n EntryList,\n IPLDLeaf,\n IPLDBranch,\n create as baseCreate\n} from './base.js';\nimport {\n readUInt32LE,\n binaryCompare\n} from './utils.js';\nconst compare = ({bytes: a}, {bytes: b}) => binaryCompare(a, b);\nclass CIDEntry extends Entry {\n constructor(cid) {\n super({\n address: cid,\n key: cid\n });\n this.cid = cid;\n }\n encodeNode() {\n return this.cid;\n }\n identity() {\n const buffer = this.cid.multihash.bytes;\n return readUInt32LE(buffer);\n }\n}\nclass CIDNodeEntry extends Entry {\n async identity() {\n const {\n multihash: {bytes}\n } = await this.address;\n return readUInt32LE(bytes);\n }\n}\nclass CIDSetBranch extends IPLDBranch {\n}\nclass CIDSetLeaf extends IPLDLeaf {\n}\nconst createGetNode = (get, cache, chunker, codec, hasher) => {\n const decoder = block => {\n const {value} = block;\n const opts = {\n chunker,\n cache,\n block,\n getNode,\n codec,\n hasher,\n compare\n };\n let entries;\n let CLS;\n if (value.leaf) {\n entries = value.leaf.map(cid => new CIDEntry(cid));\n CLS = CIDSetLeaf;\n } else if (value.branch) {\n const [distance, _entries] = value.branch;\n opts.distance = distance;\n entries = _entries.map(([key, address]) => new CIDNodeEntry({\n key,\n address\n }));\n CLS = CIDSetBranch;\n } else {\n throw new Error('Unknown block data, does not match schema');\n }\n const entryList = new EntryList({\n entries,\n closed: value.closed\n });\n const node = new CLS({\n entryList,\n ...opts\n });\n cache.set(node);\n return node;\n };\n const getNode = cid => {\n if (cache.has(cid))\n return cache.get(cid);\n return get(cid).then(block => decoder(block));\n };\n return getNode;\n};\nconst create = ({get, cache, chunker, list, codec, hasher, sorted}) => {\n if (!sorted)\n list = list.sort(compare);\n const getNode = createGetNode(get, cache, chunker, codec, hasher);\n const opts = {\n list,\n codec,\n hasher,\n chunker,\n getNode,\n sorted,\n compare,\n cache,\n LeafClass: CIDSetLeaf,\n LeafEntryClass: CIDEntry,\n BranchClass: CIDSetBranch,\n BranchEntryClass: CIDNodeEntry\n };\n return baseCreate(opts);\n};\nconst load = ({cid, get, cache, chunker, codec, hasher, ...opts}) => {\n const getNode = createGetNode(get, cache, chunker, codec, hasher, opts);\n return getNode(cid);\n};\nexport {\n create,\n load\n};","import { CID } from \"multiformats\";\nimport type { AnyLink, CryptoOpts, DecryptOpts, EncryptOpts } from \"./types.js\";\nimport { ensureLogger } from \"../utils.js\";\nimport { Logger } from \"@adviser/cement\";\n\nexport function makeCodec(ilogger: Logger, crypto: CryptoOpts, randomBytes: (size: number) => Uint8Array) {\n const logger = ensureLogger(ilogger, \"makeCodec\");\n const enc32 = (value: number) => {\n value = +value;\n const buff = new Uint8Array(4);\n buff[3] = value >>> 24;\n buff[2] = value >>> 16;\n buff[1] = value >>> 8;\n buff[0] = value & 0xff;\n return buff;\n };\n\n const readUInt32LE = (buffer: Uint8Array) => {\n const offset = buffer.byteLength - 4;\n return (buffer[offset] | (buffer[offset + 1] << 8) | (buffer[offset + 2] << 16)) + buffer[offset + 3] * 0x1000000;\n };\n\n const concat = (buffers: (ArrayBuffer | Uint8Array)[]) => {\n const uint8Arrays = buffers.map((b) => (b instanceof ArrayBuffer ? new Uint8Array(b) : b));\n const totalLength = uint8Arrays.reduce((sum, arr) => sum + arr.length, 0);\n const result = new Uint8Array(totalLength);\n\n let offset = 0;\n for (const arr of uint8Arrays) {\n result.set(arr, offset);\n offset += arr.length;\n }\n\n return result;\n };\n\n const encode = ({ iv, bytes }: { iv: Uint8Array; bytes: Uint8Array }) => concat([iv, bytes]);\n const decode = (bytes: Uint8Array) => {\n const iv = bytes.subarray(0, 12);\n bytes = bytes.slice(12);\n return { iv, bytes };\n };\n\n const code = 0x300000 + 1337;\n\n async function subtleKey(key: ArrayBuffer) {\n return await crypto.importKey(\n \"raw\", // raw or jwk\n key, // raw data\n \"AES-GCM\",\n false, // extractable\n [\"encrypt\", \"decrypt\"],\n );\n }\n\n const decrypt = async ({ key, value }: DecryptOpts): Promise<{ cid: AnyLink; bytes: Uint8Array }> => {\n const { bytes: inBytes, iv } = value;\n const cryKey = await subtleKey(key);\n const deBytes = await crypto.decrypt(\n {\n name: \"AES-GCM\",\n iv,\n tagLength: 128,\n },\n cryKey,\n inBytes,\n );\n const bytes = new Uint8Array(deBytes);\n const len = readUInt32LE(bytes.subarray(0, 4));\n const cid = CID.decode(bytes.subarray(4, 4 + len));\n return { cid, bytes: bytes.subarray(4 + len) };\n };\n const encrypt = async ({ key, cid, bytes }: EncryptOpts) => {\n const len = enc32(cid.bytes.byteLength);\n const iv = randomBytes(12);\n const msg = concat([len, cid.bytes, bytes]);\n try {\n const cryKey = await subtleKey(key);\n const deBytes = await crypto.encrypt(\n {\n name: \"AES-GCM\",\n iv,\n tagLength: 128,\n },\n cryKey,\n msg,\n );\n bytes = new Uint8Array(deBytes);\n } catch (e) {\n throw logger.Error().Err(e).Msg(\"encrypt failed\").AsError();\n }\n return { value: { bytes, iv } };\n };\n\n const cryptoFn = (key: Uint8Array) => {\n return { encrypt: (opts: EncryptOpts) => encrypt({ ...opts, key }), decrypt: (opts: DecryptOpts) => decrypt({ ...opts, key }) };\n };\n\n const name = \"jchris@encrypted-block:aes-gcm\";\n\n return { encode, decode, code, name, encrypt, decrypt, crypto: cryptoFn };\n}\n","import { MemoryBlockstore } from \"@web3-storage/pail/block\";\nimport { BlockFetcher as BlockFetcherApi } from \"@web3-storage/pail/api\";\n\nimport {\n AnyAnyLink,\n AnyBlock,\n AnyLink,\n CarMakeable,\n DbMeta,\n StoreRuntime,\n StoreOpts,\n TransactionMeta,\n TransactionWrapper,\n} from \"./types.js\";\n\nimport { Loader } from \"./loader.js\";\nimport type { CID, Block, Version } from \"multiformats\";\nimport { CryptoOpts } from \"./types.js\";\nimport { falsyToUndef } from \"../types.js\";\nimport { toCryptoOpts } from \"../runtime/crypto.js\";\nimport { toStoreRuntime } from \"./store-factory.js\";\nimport { Logger } from \"@adviser/cement\";\nimport { ensureLogger } from \"../utils.js\";\n\nexport type BlockFetcher = BlockFetcherApi;\n\nexport class CarTransaction extends MemoryBlockstore implements CarMakeable {\n readonly parent: BaseBlockstore;\n constructor(parent: BaseBlockstore, opts = { add: true }) {\n super();\n if (opts.add) {\n parent.transactions.add(this);\n }\n this.parent = parent;\n }\n\n async get<T, C extends number, A extends number, V extends Version>(cid: AnyLink): Promise<Block<T, C, A, V> | undefined> {\n return ((await this.superGet(cid)) || falsyToUndef(await this.parent.get(cid))) as Block<T, C, A, V>;\n }\n\n async superGet(cid: AnyLink): Promise<AnyBlock | undefined> {\n return super.get(cid);\n }\n}\n\nexport function defaultedBlockstoreRuntime(\n opts: BlockstoreOpts,\n component: string,\n ctx?: Record<string, unknown>,\n): BlockstoreRuntime {\n const logger = ensureLogger(opts, component, ctx);\n const store = opts.store || {};\n return {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n applyMeta: (meta: TransactionMeta, snap?: boolean): Promise<void> => {\n return Promise.resolve();\n },\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n compact: async (blocks: CompactionFetcher) => {\n return {} as unknown as TransactionMeta;\n },\n autoCompact: 100,\n public: false,\n name: undefined,\n threshold: 1000 * 1000,\n ...opts,\n logger,\n crypto: toCryptoOpts(opts.crypto),\n store,\n storeRuntime: toStoreRuntime(store, logger),\n };\n}\n\nconst blockstoreFactory = function (opts: BlockstoreOpts): BaseBlockstore | EncryptedBlockstore {\n if (opts.name) {\n return new EncryptedBlockstore(opts);\n } else {\n return new BaseBlockstore(opts);\n }\n};\n\nexport { blockstoreFactory };\n\nexport class BaseBlockstore implements BlockFetcher {\n readonly transactions = new Set<CarTransaction>();\n readonly ebOpts: BlockstoreRuntime;\n\n readonly loader?: Loader;\n readonly name?: string;\n\n // ready: Promise<void>;\n ready(): Promise<void> {\n return Promise.resolve();\n }\n\n async close(): Promise<void> {\n // no-op\n }\n\n async destroy(): Promise<void> {\n // no-op\n }\n\n readonly logger: Logger;\n constructor(ebOpts: BlockstoreOpts = {}) {\n // console.log(\"BaseBlockstore\", ebOpts)\n this.ebOpts = defaultedBlockstoreRuntime(ebOpts, \"BaseBlockstore\");\n this.logger = this.ebOpts.logger;\n }\n\n async get<T, C extends number, A extends number, V extends Version>(cid: AnyAnyLink): Promise<Block<T, C, A, V> | undefined> {\n if (!cid) throw this.logger.Error().Msg(\"required cid\").AsError();\n for (const f of this.transactions) {\n // if (Math.random() < 0.001) console.log('get', cid.toString(), this.transactions.size)\n const v = await f.superGet(cid);\n if (v) return v as Block<T, C, A, V>;\n }\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n async put(cid: AnyAnyLink, block: Uint8Array): Promise<void> {\n throw this.logger.Error().Msg(\"use a transaction to put\").AsError();\n }\n\n lastTxMeta?: unknown; // TransactionMeta\n\n async transaction<M extends TransactionMeta>(\n fn: (t: CarTransaction) => Promise<M>,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _opts = {},\n ): Promise<TransactionWrapper<M>> {\n const t = new CarTransaction(this);\n const done: M = await fn(t);\n this.lastTxMeta = done;\n return { t, meta: done };\n }\n\n async *entries(): AsyncIterableIterator<AnyBlock> {\n const seen = new Set<string>();\n for (const t of this.transactions) {\n for await (const blk of t.entries()) {\n if (seen.has(blk.cid.toString())) continue;\n seen.add(blk.cid.toString());\n yield blk;\n }\n }\n }\n}\n\nexport class EncryptedBlockstore extends BaseBlockstore {\n readonly name: string;\n readonly loader: Loader;\n\n ready(): Promise<void> {\n return this.loader.ready();\n }\n\n close(): Promise<void> {\n return this.loader.close();\n }\n\n destroy(): Promise<void> {\n return this.loader.destroy();\n }\n\n compacting = false;\n readonly logger: Logger;\n\n constructor(ebOpts: BlockstoreOpts) {\n super(ebOpts);\n this.logger = ensureLogger(ebOpts, \"EncryptedBlockstore\");\n const { name } = ebOpts;\n if (!name) {\n throw this.logger.Error().Msg(\"name required\").AsError();\n }\n this.name = name;\n this.loader = new Loader(this.name, ebOpts);\n }\n\n async get<T, C extends number, A extends number, V extends Version>(cid: AnyAnyLink): Promise<Block<T, C, A, V> | undefined> {\n const got = await super.get(cid);\n if (got) return got as Block<T, C, A, V>;\n if (!this.loader) {\n return;\n }\n return falsyToUndef(await this.loader.getBlock(cid)) as Block<T, C, A, V>;\n }\n\n async transaction<M extends TransactionMeta>(\n fn: (t: CarTransaction) => Promise<M>,\n opts = { noLoader: false },\n ): Promise<TransactionWrapper<M>> {\n const { t, meta: done } = await super.transaction<M>(fn);\n const cars = await this.loader.commit<M>(t, done, opts);\n if (this.ebOpts.autoCompact && this.loader.carLog.length > this.ebOpts.autoCompact) {\n setTimeout(() => void this.compact(), 10);\n }\n if (cars) {\n this.transactions.delete(t);\n return { meta: done, cars, t };\n }\n throw this.logger.Error().Msg(\"failed to commit car files\").AsError();\n }\n\n async getFile(car: AnyLink, cid: AnyLink, isPublic = false): Promise<Uint8Array> {\n await this.ready();\n if (!this.loader) throw this.logger.Error().Msg(\"loader required to get file, database must be named\").AsError();\n const reader = await this.loader.loadFileCar(car, isPublic);\n const block = await reader.get(cid as CID);\n if (!block) throw this.logger.Error().Str(\"cid\", cid.toString()).Msg(`Missing block`).AsError();\n return block.bytes;\n }\n\n async compact() {\n await this.ready();\n if (!this.loader) throw this.logger.Error().Msg(\"loader required to compact\").AsError();\n if (this.loader.carLog.length < 2) return;\n const compactFn = this.ebOpts.compact || ((blocks: CompactionFetcher) => this.defaultCompact(blocks, this.logger));\n if (!compactFn || this.compacting) return;\n const blockLog = new CompactionFetcher(this);\n this.compacting = true;\n const meta = await compactFn(blockLog);\n await this.loader?.commit(blockLog.loggedBlocks, meta, {\n compact: true,\n noLoader: true,\n });\n this.compacting = false;\n }\n\n async defaultCompact(blocks: CompactionFetcher, logger: Logger): Promise<TransactionMeta> {\n // console.log('eb compact')\n if (!this.loader) {\n throw logger.Error().Msg(\"no loader\").AsError();\n }\n if (!this.lastTxMeta) {\n throw logger.Error().Msg(\"no lastTxMeta\").AsError();\n }\n for await (const blk of this.loader.entries(false)) {\n blocks.loggedBlocks.putSync(blk.cid, blk.bytes);\n }\n for (const t of this.transactions) {\n for await (const blk of t.entries()) {\n blocks.loggedBlocks.putSync(blk.cid, blk.bytes);\n }\n }\n return this.lastTxMeta as TransactionMeta;\n }\n\n async *entries(): AsyncIterableIterator<AnyBlock> {\n // const seen = new Set<string>();\n for await (const blk of this.loader.entries()) {\n // if (seen.has(blk.cid.toString())) continue\n // seen.add(blk.cid.toString())\n yield blk;\n }\n }\n}\n\nexport class CompactionFetcher implements BlockFetcher {\n blockstore: EncryptedBlockstore;\n // loader: Loader | null = null\n loggedBlocks: CarTransaction;\n\n constructor(blocks: EncryptedBlockstore) {\n this.blockstore = blocks;\n // this.loader = blocks.loader\n this.loggedBlocks = new CarTransaction(blocks);\n }\n\n async get<T, C extends number, A extends number, V extends Version>(cid: AnyLink): Promise<Block<T, C, A, V> | undefined> {\n const block = await this.blockstore.get(cid);\n if (block) this.loggedBlocks.putSync(cid, block.bytes);\n return falsyToUndef(block) as Block<T, C, A, V>;\n }\n}\n\nexport type CompactFn = (blocks: CompactionFetcher) => Promise<TransactionMeta>;\n\nexport interface BlockstoreOpts {\n readonly logger?: Logger;\n readonly applyMeta?: (meta: TransactionMeta, snap?: boolean) => Promise<void>;\n readonly compact?: CompactFn;\n readonly autoCompact?: number;\n readonly crypto?: CryptoOpts;\n readonly store?: StoreOpts;\n readonly public?: boolean;\n readonly meta?: DbMeta;\n readonly name?: string;\n readonly threshold?: number;\n}\n\nexport interface BlockstoreRuntime {\n readonly logger: Logger;\n readonly applyMeta: (meta: TransactionMeta, snap?: boolean) => Promise<void>;\n readonly compact: CompactFn;\n readonly autoCompact: number;\n readonly crypto: CryptoOpts;\n readonly store: StoreOpts;\n readonly storeRuntime: StoreRuntime;\n readonly public: boolean;\n readonly meta?: DbMeta;\n readonly name?: string;\n readonly threshold: number;\n}\n","type QueueFunction = () => Promise<void>;\n\nexport class CommitQueue<T = void> {\n readonly queue: QueueFunction[] = [];\n processing = false;\n\n async enqueue(fn: () => Promise<T>): Promise<T> {\n return new Promise<T>((resolve, reject) => {\n const queueFn = async () => {\n try {\n resolve(await fn());\n } catch (e) {\n reject(e);\n } finally {\n this.processing = false;\n this.processNext();\n }\n };\n this.queue.push(queueFn);\n if (!this.processing) {\n this.processNext();\n }\n });\n }\n\n processNext() {\n if (this.queue.length > 0 && !this.processing) {\n this.processing = true;\n const queueFn = this.queue.shift();\n if (queueFn) {\n queueFn();\n }\n }\n }\n}\n","import {\n type ClockHead,\n type DocUpdate,\n type MapFn,\n type IndexUpdate,\n type QueryOpts,\n type IdxMeta,\n type DocFragment,\n type IdxMetaMap,\n type IndexKeyType,\n type IndexRows,\n type DocTypes,\n type IndexUpdateString,\n throwFalsy,\n IndexTransactionMeta,\n} from \"./types.js\";\nimport { BaseBlockstore } from \"./blockstore/index.js\";\n\nimport {\n bulkIndex,\n indexEntriesForChanges,\n byIdOpts,\n byKeyOpts,\n IndexTree,\n applyQuery,\n encodeRange,\n encodeKey,\n loadIndex,\n IndexDocString,\n CompareKey,\n} from \"./indexer-helpers.js\";\nimport { CRDT } from \"./crdt.js\";\nimport { ensureLogger } from \"./utils.js\";\nimport { Logger } from \"@adviser/cement\";\n\nexport function index<K extends IndexKeyType = string, T extends DocTypes = NonNullable<unknown>, R extends DocFragment = T>(\n { _crdt }: { _crdt: CRDT<T> | CRDT<NonNullable<unknown>> },\n name: string,\n mapFn?: MapFn<T>,\n meta?: IdxMeta,\n): Index<K, T, R> {\n if (mapFn && meta) throw _crdt.logger.Error().Msg(\"cannot provide both mapFn and meta\").AsError();\n if (mapFn && mapFn.constructor.name !== \"Function\") throw _crdt.logger.Error().Msg(\"mapFn must be a function\").AsError();\n if (_crdt.indexers.has(name)) {\n const idx = _crdt.indexers.get(name) as unknown as Index<K, T>;\n idx.applyMapFn(name, mapFn, meta);\n } else {\n const idx = new Index<K, T>(_crdt, name, mapFn, meta);\n _crdt.indexers.set(name, idx as unknown as Index<K, NonNullable<unknown>, NonNullable<unknown>>);\n }\n return _crdt.indexers.get(name) as unknown as Index<K, T, R>;\n}\n\n// interface ByIdIndexIten<K extends IndexKeyType> {\n// readonly key: K;\n// readonly value: [K, K];\n// }\n\nexport class Index<K extends IndexKeyType, T extends DocTypes, R extends DocFragment = T> {\n readonly blockstore: BaseBlockstore;\n readonly crdt: CRDT<T>;\n name: string;\n mapFn?: MapFn<T>;\n mapFnString = \"\";\n byKey = new IndexTree<K, R>();\n byId = new IndexTree<K, R>();\n indexHead?: ClockHead;\n includeDocsDefault = false;\n initError?: Error;\n\n ready(): Promise<void> {\n return Promise.all([this.blockstore.ready(), this.crdt.ready()]).then(() => {\n /* noop */\n });\n }\n\n close(): Promise<void> {\n return Promise.all([this.blockstore.close(), this.crdt.close()]).then(() => {\n /* noop */\n });\n }\n destroy(): Promise<void> {\n return Promise.all([this.blockstore.destroy(), this.crdt.destroy()]).then(() => {\n /* noop */\n });\n }\n\n readonly logger: Logger;\n\n constructor(crdt: CRDT<T> | CRDT<NonNullable<unknown>>, name: string, mapFn?: MapFn<T>, meta?: IdxMeta) {\n this.logger = ensureLogger(crdt.logger, \"Index\");\n this.blockstore = crdt.indexBlockstore;\n this.crdt = crdt as CRDT<T>;\n this.applyMapFn(name, mapFn, meta);\n this.name = name;\n if (!(this.mapFnString || this.initError)) throw this.logger.Error().Msg(\"missing mapFnString\").AsError();\n // this.ready = this.blockstore.ready.then(() => {\n // return;\n // });\n // .then((header: IdxCarHeader) => {\n // // @ts-ignore\n // if (header.head) throw new Error('cannot have head in idx header')\n // if (header.indexes === undefined) throw new Error('missing indexes in idx header')\n // // for (const [name, idx] of Object.entries(header.indexes)) {\n // // index({ _crdt: crdt }, name, undefined, idx as IdxMeta)\n // // }\n // })\n }\n\n applyMapFn(name: string, mapFn?: MapFn<T>, meta?: IdxMeta) {\n if (mapFn && meta) throw this.logger.Error().Msg(\"cannot provide both mapFn and meta\").AsError();\n if (this.name && this.name !== name) throw this.logger.Error().Msg(\"cannot change name\").AsError();\n this.name = name;\n try {\n if (meta) {\n // hydrating from header\n if (this.indexHead && this.indexHead.map((c) => c.toString()).join() !== meta.head.map((c) => c.toString()).join()) {\n throw this.logger.Error().Msg(\"cannot apply different head meta\").AsError();\n }\n\n if (this.mapFnString) {\n // we already initialized from application code\n if (this.mapFnString !== meta.map) {\n this.logger\n .Warn()\n .Msg(`cannot apply different mapFn meta: old mapFnString ${this.mapFnString} new mapFnString ${meta.map}`);\n // throw new Error('cannot apply different mapFn meta')\n } else {\n this.byId.cid = meta.byId;\n this.byKey.cid = meta.byKey;\n this.indexHead = meta.head;\n }\n } else {\n // we are first\n this.mapFnString = meta.map;\n this.byId.cid = meta.byId;\n this.byKey.cid = meta.byKey;\n this.indexHead = meta.head;\n }\n } else {\n if (this.mapFn) {\n // we already initialized from application code\n if (mapFn) {\n if (this.mapFn.toString() !== mapFn.toString()) {\n throw this.logger.Error().Msg(\"cannot apply different mapFn app2\").AsError();\n }\n }\n } else {\n // application code is creating an index\n if (!mapFn) {\n mapFn = ((doc) => (doc as unknown as Record<string, unknown>)[name] ?? undefined) as MapFn<T>;\n }\n if (this.mapFnString) {\n // we already loaded from a header\n if (this.mapFnString !== mapFn.toString()) {\n throw this.logger.Error().Msg(\"cannot apply different mapFn app\").AsError();\n }\n } else {\n // we are first\n this.mapFnString = mapFn.toString();\n }\n this.mapFn = mapFn;\n }\n }\n const matches = /=>\\s*(.*)/.test(this.mapFnString);\n this.includeDocsDefault = matches;\n } catch (e) {\n this.initError = e as Error;\n }\n }\n\n async query(opts: QueryOpts<K> = {}): Promise<IndexRows<K, T, R>> {\n await this.ready();\n // this._resetIndex();\n await this._updateIndex();\n await this._hydrateIndex();\n if (!this.byKey.root) {\n return await applyQuery<K, T, R>(this.crdt, { result: [] }, opts);\n }\n if (this.includeDocsDefault && opts.includeDocs === undefined) opts.includeDocs = true;\n if (opts.range) {\n const eRange = encodeRange(opts.range);\n return await applyQuery<K, T, R>(this.crdt, await throwFalsy(this.byKey.root).range(eRange[0], eRange[1]), opts);\n }\n if (opts.key) {\n const encodedKey = encodeKey(opts.key);\n return await applyQuery<K, T, R>(this.crdt, await throwFalsy(this.byKey.root).get(encodedKey), opts);\n }\n if (Array.isArray(opts.keys)) {\n const results = await Promise.all(\n opts.keys.map(async (key: DocFragment) => {\n const encodedKey = encodeKey(key);\n return (await applyQuery<K, T, R>(this.crdt, await throwFalsy(this.byKey.root).get(encodedKey), opts)).rows;\n }),\n );\n return { rows: results.flat() };\n }\n if (opts.prefix) {\n if (!Array.isArray(opts.prefix)) opts.prefix = [opts.prefix];\n // prefix should be always an array\n const start = [...opts.prefix, NaN];\n const end = [...opts.prefix, Infinity];\n const encodedR = encodeRange([start, end]);\n return await applyQuery<K, T, R>(this.crdt, await this.byKey.root.range(...encodedR), opts);\n }\n const all = await this.byKey.root.getAllEntries(); // funky return type\n return await applyQuery<K, T, R>(\n this.crdt,\n {\n // @ts-expect-error getAllEntries returns a different type than range\n result: all.result.map(({ key: [k, id], value }) => ({\n key: k,\n id,\n value,\n })),\n },\n opts,\n );\n }\n\n _resetIndex() {\n this.byId = new IndexTree();\n this.byKey = new IndexTree();\n this.indexHead = undefined;\n }\n\n async _hydrateIndex() {\n if (this.byId.root && this.byKey.root) return;\n if (!this.byId.cid || !this.byKey.cid) return;\n this.byId.root = await loadIndex<K, R, K>(this.blockstore, this.byId.cid, byIdOpts);\n this.byKey.root = await loadIndex<K, R, CompareKey>(this.blockstore, this.byKey.cid, byKeyOpts);\n }\n\n async _updateIndex(): Promise<IndexTransactionMeta> {\n await this.ready();\n if (this.initError) throw this.initError;\n if (!this.mapFn) throw this.logger.Error().Msg(\"No map function defined\").AsError();\n let result: DocUpdate<T>[], head: ClockHead;\n if (!this.indexHead || this.indexHead.length === 0) {\n ({ result, head } = await this.crdt.allDocs());\n } else {\n ({ result, head } = await this.crdt.changes(this.indexHead));\n }\n if (result.length === 0) {\n this.indexHead = head;\n // return { byId: this.byId, byKey: this.byKey } as IndexTransactionMeta;\n }\n let staleKeyIndexEntries: IndexUpdate<K>[] = [];\n let removeIdIndexEntries: IndexUpdateString[] = [];\n if (this.byId.root) {\n const removeIds = result.map(({ id: key }) => key);\n const { result: oldChangeEntries } = await this.byId.root.getMany(removeIds);\n staleKeyIndexEntries = oldChangeEntries.map((key) => ({ key, del: true }));\n removeIdIndexEntries = oldChangeEntries.map((key) => ({ key: key[1], del: true }));\n }\n const indexEntries = indexEntriesForChanges<T, K>(result, this.mapFn); // use a getter to translate from string\n const byIdIndexEntries: IndexDocString[] = indexEntries.map(({ key }) => ({\n key: key[1],\n value: key,\n }));\n const indexerMeta: IdxMetaMap = { indexes: new Map() };\n\n for (const [name, indexer] of this.crdt.indexers) {\n if (indexer.indexHead) {\n indexerMeta.indexes?.set(name, {\n byId: indexer.byId.cid,\n byKey: indexer.byKey.cid,\n head: indexer.indexHead,\n map: indexer.mapFnString,\n name: indexer.name,\n } as IdxMeta);\n }\n }\n if (result.length === 0) {\n return indexerMeta as unknown as IndexTransactionMeta;\n }\n const { meta } = await this.blockstore.transaction<IndexTransactionMeta>(async (tblocks): Promise<IndexTransactionMeta> => {\n this.byId = await bulkIndex<K, R, K>(tblocks, this.byId, removeIdIndexEntries.concat(byIdIndexEntries), byIdOpts);\n this.byKey = await bulkIndex<K, R, CompareKey>(tblocks, this.byKey, staleKeyIndexEntries.concat(indexEntries), byKeyOpts);\n this.indexHead = head;\n if (this.byId.cid && this.byKey.cid) {\n const idxMeta = {\n byId: this.byId.cid,\n byKey: this.byKey.cid,\n head,\n map: this.mapFnString,\n name: this.name,\n } as IdxMeta;\n indexerMeta.indexes?.set(this.name, idxMeta);\n }\n return indexerMeta as unknown as IndexTransactionMeta;\n });\n return meta;\n }\n}\n","import type { Block, Link } from \"multiformats\";\nimport { create } from \"multiformats/block\";\nimport { sha256 as hasher } from \"multiformats/hashes/sha2\";\nimport * as codec from \"@ipld/dag-cbor\";\n\n// @ts-expect-error \"charwise\" has no types\nimport charwise from \"charwise\";\n// @ts-expect-error \"prolly-trees\" has no types\nimport * as DbIndex from \"prolly-trees/db-index\";\n// @ts-expect-error \"prolly-trees\" has no types\nimport { bf, simpleCompare } from \"prolly-trees/utils\";\n// @ts-expect-error \"prolly-trees\" has no types\nimport { nocache as cache } from \"prolly-trees/cache\";\n// @ts-expect-error \"prolly-trees\" has no types\nimport { ProllyNode as BaseNode } from \"prolly-trees/db-index\";\n\nimport {\n DocUpdate,\n MapFn,\n DocFragment,\n IndexUpdate,\n QueryOpts,\n IndexRow,\n DocWithId,\n IndexKeyType,\n IndexKey,\n DocTypes,\n DocObject,\n IndexUpdateString,\n} from \"./types.js\";\nimport { CarTransaction, BlockFetcher, AnyLink, AnyBlock } from \"./blockstore/index.js\";\nimport { CRDT } from \"./crdt.js\";\n\nexport class IndexTree<K extends IndexKeyType, R extends DocFragment> {\n cid?: AnyLink;\n root?: ProllyNode<K, R>;\n}\n\ntype CompareRef = string | number;\nexport type CompareKey = [string | number, CompareRef];\n\nfunction refCompare(aRef: CompareRef, bRef: CompareRef) {\n if (Number.isNaN(aRef)) return -1;\n if (Number.isNaN(bRef)) throw new Error(\"ref may not be Infinity or NaN\");\n if (aRef === Infinity) return 1;\n // if (!Number.isFinite(bRef)) throw new Error('ref may not be Infinity or NaN')\n\n return simpleCompare(aRef, bRef) as number;\n}\n\nfunction compare(a: CompareKey, b: CompareKey) {\n const [aKey, aRef] = a;\n const [bKey, bRef] = b;\n\n const comp: number = simpleCompare(aKey, bKey);\n if (comp !== 0) return comp;\n return refCompare(aRef, bRef);\n}\n\nexport const byKeyOpts: StaticProllyOptions<CompareKey> = { cache, chunker: bf(30), codec, hasher, compare };\n\nexport const byIdOpts: StaticProllyOptions<unknown> = { cache, chunker: bf(30), codec, hasher, compare: simpleCompare };\n\nexport interface IndexDoc<K extends IndexKeyType> {\n readonly key: IndexKey<K>;\n readonly value: DocFragment;\n}\n\nexport interface IndexDocString {\n readonly key: string;\n readonly value: DocFragment;\n}\n\nexport function indexEntriesForChanges<T extends DocTypes, K extends IndexKeyType>(\n changes: DocUpdate<T>[],\n mapFn: MapFn<T>,\n): IndexDoc<K>[] {\n const indexEntries: IndexDoc<K>[] = [];\n changes.forEach(({ id: key, value, del }) => {\n if (del || !value) return;\n let mapCalled = false;\n const mapReturn = mapFn({ ...(value as DocWithId<T>), _id: key }, (k: IndexKeyType, v?: DocFragment) => {\n mapCalled = true;\n if (typeof k === \"undefined\") return;\n indexEntries.push({\n key: [charwise.encode(k) as K, key],\n value: v || null,\n });\n });\n if (!mapCalled && mapReturn) {\n indexEntries.push({\n key: [charwise.encode(mapReturn) as K, key],\n value: null,\n });\n }\n });\n return indexEntries;\n}\n\nfunction makeProllyGetBlock(blocks: BlockFetcher): (address: AnyLink) => Promise<AnyBlock> {\n return async (address: AnyLink) => {\n const block = await blocks.get(address);\n if (!block) throw new Error(`Missing block ${address.toString()}`);\n const { cid, bytes } = block;\n return create({ cid, bytes, hasher, codec }) as Promise<AnyBlock>;\n };\n}\n\nexport async function bulkIndex<K extends IndexKeyType, T extends DocFragment, CT>(\n tblocks: CarTransaction,\n inIndex: IndexTree<K, T>,\n indexEntries: (IndexUpdate<K> | IndexUpdateString)[],\n opts: StaticProllyOptions<CT>,\n): Promise<IndexTree<K, T>> {\n if (!indexEntries.length) return inIndex;\n if (!inIndex.root) {\n if (!inIndex.cid) {\n let returnRootBlock: Block | undefined = undefined;\n let returnNode: ProllyNode<K, T> | undefined = undefined;\n\n for await (const node of (await DbIndex.create({\n get: makeProllyGetBlock(tblocks),\n list: indexEntries,\n ...opts,\n })) as ProllyNode<K, T>[]) {\n const block = await node.block;\n await tblocks.put(block.cid, block.bytes);\n returnRootBlock = block;\n returnNode = node;\n }\n if (!returnNode || !returnRootBlock) throw new Error(\"failed to create index\");\n return { root: returnNode, cid: returnRootBlock.cid };\n } else {\n inIndex.root = (await DbIndex.load({ cid: inIndex.cid, get: makeProllyGetBlock(tblocks), ...opts })) as ProllyNode<K, T>;\n }\n }\n const { root, blocks: newBlocks } = await inIndex.root.bulk(indexEntries);\n if (root) {\n for await (const block of newBlocks) {\n await tblocks.put(block.cid, block.bytes);\n }\n return { root, cid: (await root.block).cid };\n } else {\n return { root: undefined, cid: undefined };\n }\n}\n\nexport async function loadIndex<K extends IndexKeyType, T extends DocFragment, CT>(\n tblocks: BlockFetcher,\n cid: AnyLink,\n opts: StaticProllyOptions<CT>,\n): Promise<ProllyNode<K, T>> {\n return (await DbIndex.load({ cid, get: makeProllyGetBlock(tblocks), ...opts })) as ProllyNode<K, T>;\n}\n\nexport async function applyQuery<K extends IndexKeyType, T extends DocObject, R extends DocFragment>(\n crdt: CRDT<T>,\n resp: { result: ProllyIndexRow<K, R>[] },\n query: QueryOpts<K>,\n): Promise<{\n rows: IndexRow<K, T, R>[];\n}> {\n if (query.descending) {\n resp.result = resp.result.reverse();\n }\n if (query.limit) {\n resp.result = resp.result.slice(0, query.limit);\n }\n if (query.includeDocs) {\n resp.result = await Promise.all(\n resp.result.map(async (row) => {\n const val = await crdt.get(row.id);\n const doc = val ? ({ ...val.doc, _id: row.id } as DocWithId<T>) : undefined;\n return { ...row, doc };\n }),\n );\n }\n return {\n rows: resp.result.map(({ key, ...row }) => {\n return {\n key: charwise.decode(key),\n ...row,\n };\n }),\n };\n}\n\nexport function encodeRange(range: [IndexKeyType, IndexKeyType]): [string, string] {\n return [charwise.encode(range[0]), charwise.encode(range[1])];\n}\n\nexport function encodeKey(key: DocFragment): string {\n return charwise.encode(key) as string;\n}\n\nexport interface ProllyIndexRow<K extends IndexKeyType, T extends DocFragment> {\n readonly id: string;\n readonly key: IndexKey<K>;\n readonly value: T;\n}\n\n// ProllyNode type based on the ProllyNode from 'prolly-trees/base'\ninterface ProllyNode<K extends IndexKeyType, T extends DocFragment> extends BaseNode {\n getAllEntries(): PromiseLike<{ [x: string]: unknown; result: ProllyIndexRow<K, T>[] }>;\n getMany<KI extends IndexKeyType>(removeIds: KI[]): Promise<{ /* [x: K]: unknown; */ result: IndexKey<K>[] }>;\n range(a: string, b: string): Promise<{ result: ProllyIndexRow<K, T>[] }>;\n get(key: string): Promise<{ result: ProllyIndexRow<K, T>[] }>;\n bulk(bulk: (IndexUpdate<K> | IndexUpdateString)[]): PromiseLike<{\n readonly root?: ProllyNode<K, T>;\n readonly blocks: Block[];\n }>;\n readonly address: Promise<Link>;\n readonly distance: number;\n compare: (a: unknown, b: unknown) => number;\n readonly cache: unknown;\n readonly block: Promise<Block>;\n}\n\ninterface StaticProllyOptions<T> {\n readonly cache: unknown;\n chunker: (entry: T, distance: number) => boolean;\n readonly codec: unknown;\n readonly hasher: unknown;\n compare: (a: T, b: T) => number;\n}\n","import {\n Entry,\n EntryList,\n IPLDLeaf,\n IPLDBranch,\n create as baseCreate\n} from './base.js';\nimport { readUInt32LE } from './utils.js';\nclass MapEntry extends Entry {\n async identity() {\n const encoded = await this.codec.encode(await this.encodeNode());\n const hash = await this.hasher.encode(encoded);\n return readUInt32LE(hash);\n }\n}\nclass MapLeafEntry extends MapEntry {\n constructor(node, opts) {\n super(node, opts);\n this.value = node.value;\n }\n encodeNode() {\n return [\n this.key,\n this.value\n ];\n }\n}\nclass MapBranchEntry extends MapEntry {\n constructor(node, opts) {\n if (!node.address)\n throw new Error('Cannot create MapBranchEntry without address');\n super(node, opts);\n }\n async encodeNode() {\n return [\n this.key,\n await this.address\n ];\n }\n}\nconst getValue = async (node, key) => {\n const {\n result: entry,\n cids\n } = await node.getEntry(key);\n return {\n result: entry.value,\n cids\n };\n};\nconst getManyValues = async (node, keys) => {\n const {\n result: entries,\n cids\n } = await node.getEntries(keys);\n return {\n result: entries.map(entry => entry.value),\n cids\n };\n};\nclass MapLeaf extends IPLDLeaf {\n get(key) {\n return getValue(this, key);\n }\n getMany(keys) {\n return getManyValues(this, keys);\n }\n bulk(bulk, opts = {}, isRoot = true) {\n return super.bulk(bulk, {\n ...classes,\n ...opts\n }, isRoot);\n }\n}\nclass MapBranch extends IPLDBranch {\n get(key) {\n return getValue(this, key);\n }\n getMany(keys) {\n return getManyValues(this, keys);\n }\n bulk(bulk, opts = {}, isRoot = true) {\n return super.bulk(bulk, {\n ...classes,\n ...opts\n }, isRoot);\n }\n}\nconst classes = {\n LeafClass: MapLeaf,\n LeafEntryClass: MapLeafEntry,\n BranchClass: MapBranch,\n BranchEntryClass: MapBranchEntry\n};\nconst createGetNode = (get, cache, chunker, codec, hasher, compare, opts) => {\n const LeafClass = opts.LeafClass || MapLeaf;\n const LeafEntryClass = opts.LeafEntryClass || MapLeafEntry;\n const BranchClass = opts.BranchClass || MapBranch;\n const BranchEntryClass = opts.BranchEntryClass || MapBranchEntry;\n const getNode = async cid => {\n if (cache.has(cid))\n return cache.get(cid);\n return get(cid).then(block => decoder(block));\n };\n const decoder = makeDecoder({\n chunker,\n cache,\n getNode,\n codec,\n hasher,\n compare,\n LeafEntryClass,\n LeafClass,\n BranchEntryClass,\n BranchClass\n });\n return getNode;\n};\nconst create = ({get, cache, chunker, list, codec, hasher, sorted, compare, ...opts}) => {\n if (!sorted)\n list = list.sort(({key: a}, {key: b}) => compare(a, b));\n const getNode = createGetNode(get, cache, chunker, codec, hasher, compare, opts);\n const _opts = {\n list,\n codec,\n hasher,\n chunker,\n getNode,\n sorted,\n compare,\n cache,\n LeafClass: opts.LeafClass || MapLeaf,\n LeafEntryClass: opts.LeafEntryClass || MapLeafEntry,\n BranchClass: opts.BranchClass || MapBranch,\n BranchEntryClass: opts.BranchEntryClass || MapBranchEntry\n };\n return baseCreate(_opts);\n};\nconst load = ({cid, get, cache, chunker, codec, hasher, compare, ...opts}) => {\n const getNode = createGetNode(get, cache, chunker, codec, hasher, compare, opts);\n return getNode(cid);\n};\nfunction makeDecoder({chunker, cache, getNode, codec, hasher, compare, LeafEntryClass, LeafClass, BranchEntryClass, BranchClass}) {\n const entryOpts = {\n codec,\n hasher\n };\n return block => {\n const {value} = block;\n const opts = {\n chunker,\n cache,\n block,\n getNode,\n codec,\n hasher,\n compare\n };\n let entries;\n let CLS;\n if (value.leaf) {\n entries = value.leaf.map(([key, value]) => new LeafEntryClass({\n key,\n value\n }, entryOpts));\n CLS = LeafClass;\n } else if (value.branch) {\n const [distance, _entries] = value.branch;\n opts.distance = distance;\n entries = _entries.map(([key, address]) => new BranchEntryClass({\n key,\n address\n }, entryOpts));\n CLS = BranchClass;\n } else {\n throw new Error('Unknown block data, does not match schema');\n }\n const entryList = new EntryList({\n entries,\n closed: value.closed\n });\n const node = new CLS({\n entryList,\n ...opts\n });\n cache.set(node);\n return node;\n };\n}\nexport {\n create,\n load,\n MapLeaf,\n MapBranch,\n MapLeafEntry,\n MapBranchEntry\n};","import {\n create as mapCreate,\n load as mapLoad,\n MapLeaf,\n MapBranch,\n MapLeafEntry,\n MapBranchEntry\n} from './map.js';\nimport { simpleCompare } from './utils.js';\nconst compare = (a, b) => {\n const [aKey, aRef] = a;\n const [bKey, bRef] = b;\n const comp = simpleCompare(aKey, bKey);\n if (comp !== 0)\n return comp;\n return refCompare(aRef, bRef);\n};\nconst refCompare = (aRef, bRef) => {\n if (Number.isNaN(aRef))\n return -1;\n if (Number.isNaN(bRef))\n throw new Error('ref may not be Infinity or NaN');\n if (!Number.isFinite(aRef))\n return 1;\n return simpleCompare(aRef, bRef);\n};\nconst getIndex = async (node, key) => {\n const start = [\n key,\n NaN\n ];\n const end = [\n key,\n Infinity\n ];\n const {\n result: entries,\n cids\n } = await node.getRangeEntries(start, end);\n return {\n result: entries.map(entry => {\n const [key, id] = entry.key;\n return {\n id,\n key,\n row: entry.value\n };\n }),\n cids\n };\n};\nconst getRange = async (node, start, end) => {\n start = [\n start,\n NaN\n ];\n end = [\n end,\n Infinity\n ];\n const {\n result: entries,\n cids\n } = await node.getRangeEntries(start, end);\n const result = entries.map(entry => {\n const [key, id] = entry.key;\n return {\n id,\n key,\n row: entry.value\n };\n });\n return {\n result,\n cids\n };\n};\nclass DBIndexLeaf extends MapLeaf {\n get(key) {\n return getIndex(this, key);\n }\n range(start, end) {\n return getRange(this, start, end);\n }\n bulk(bulk, opts = {}, isRoot = true) {\n return super.bulk(bulk, {\n ...classes,\n ...opts\n }, isRoot);\n }\n}\nclass DBIndexBranch extends MapBranch {\n get(key) {\n return getIndex(this, key);\n }\n range(start, end) {\n return getRange(this, start, end);\n }\n bulk(bulk, opts = {}, isRoot = true) {\n return super.bulk(bulk, {\n ...classes,\n ...opts\n }, isRoot);\n }\n}\nconst LeafClass = DBIndexLeaf;\nconst BranchClass = DBIndexBranch;\nconst classes = {\n LeafClass,\n BranchClass,\n LeafEntryClass: MapLeafEntry,\n BranchEntryClass: MapBranchEntry\n};\nconst defaults = {\n ...classes,\n compare\n};\nconst create = opts => {\n opts = {\n ...defaults,\n ...opts\n };\n return mapCreate(opts);\n};\nconst load = opts => {\n opts = {\n ...defaults,\n ...opts\n };\n return mapLoad(opts);\n};\nexport {\n create,\n load,\n DBIndexBranch,\n DBIndexLeaf\n};","import { advance } from \"@web3-storage/pail/clock\";\nimport { root } from \"@web3-storage/pail/crdt\";\nimport { Logger, ResolveOnce } from \"@adviser/cement\";\n\nimport { clockChangesSince } from \"./crdt-helpers.js\";\nimport type { BaseBlockstore, CarTransaction } from \"./blockstore/index.js\";\nimport { type DocUpdate, type ClockHead, type DocTypes, throwFalsy, CRDTMeta } from \"./types.js\";\nimport { applyHeadQueue, ApplyHeadQueue } from \"./apply-head-queue.js\";\nimport { ensureLogger } from \"./utils.js\";\n\nexport class CRDTClock<T extends DocTypes> {\n // todo: track local and remote clocks independently, merge on read\n // that way we can drop the whole remote if we need to\n // should go with making sure the local clock only references locally available blockstore on write\n head: ClockHead = [];\n\n readonly zoomers = new Set<() => void>();\n readonly watchers = new Set<(updates: DocUpdate<T>[]) => void>();\n readonly emptyWatchers = new Set<() => void>();\n\n readonly blockstore: BaseBlockstore;\n\n readonly applyHeadQueue: ApplyHeadQueue<T>;\n\n readonly _ready = new ResolveOnce<void>();\n async ready() {\n return this._ready.once(async () => {\n await this.blockstore.ready();\n });\n }\n\n async close() {\n await this.blockstore.close();\n }\n\n readonly logger: Logger;\n constructor(blockstore: BaseBlockstore) {\n this.blockstore = blockstore;\n this.logger = ensureLogger(blockstore.logger, \"CRDTClock\");\n this.applyHeadQueue = applyHeadQueue(this.int_applyHead.bind(this), this.logger);\n }\n\n setHead(head: ClockHead) {\n this.head = head;\n }\n\n async applyHead(newHead: ClockHead, prevHead: ClockHead, updates?: DocUpdate<T>[]) {\n for await (const { updates: updatesAcc, all } of this.applyHeadQueue.push({\n newHead,\n prevHead,\n updates,\n })) {\n return this.processUpdates(updatesAcc, all, prevHead);\n }\n }\n\n async processUpdates(updatesAcc: DocUpdate<T>[], all: boolean, prevHead: ClockHead) {\n let internalUpdates = updatesAcc;\n if (this.watchers.size && !all) {\n const changes = await clockChangesSince<T>(throwFalsy(this.blockstore), this.head, prevHead, {}, this.logger);\n internalUpdates = changes.result;\n }\n this.zoomers.forEach((fn) => fn());\n this.notifyWatchers(internalUpdates || []);\n }\n\n notifyWatchers(updates: DocUpdate<T>[]) {\n this.emptyWatchers.forEach((fn) => fn());\n this.watchers.forEach((fn) => fn(updates || []));\n }\n\n onTick(fn: (updates: DocUpdate<T>[]) => void) {\n this.watchers.add(fn);\n }\n\n onTock(fn: () => void) {\n this.emptyWatchers.add(fn);\n }\n\n onZoom(fn: () => void) {\n this.zoomers.add(fn);\n }\n\n async int_applyHead(newHead: ClockHead, prevHead: ClockHead, localUpdates: boolean) {\n // if (!(this.head && prevHead && newHead)) {\n // throw new Error(\"missing head\");\n // }\n // console.log(\"int_applyHead\", this.applyHeadQueue.size(), this.head, newHead, prevHead, localUpdates);\n const ogHead = sortClockHead(this.head);\n newHead = sortClockHead(newHead);\n if (compareClockHeads(ogHead, newHead)) {\n return;\n }\n const ogPrev = sortClockHead(prevHead);\n if (compareClockHeads(ogHead, ogPrev)) {\n this.setHead(newHead);\n return;\n }\n\n const noLoader = !localUpdates;\n // const noLoader = this.head.length === 1 && !updates?.length\n if (!this.blockstore) {\n throw this.logger.Error().Msg(\"missing blockstore\").AsError();\n }\n await validateBlocks(this.logger, newHead, this.blockstore);\n const { meta } = await this.blockstore.transaction<CRDTMeta>(\n async (tblocks: CarTransaction) => {\n const advancedHead = await advanceBlocks(this.logger, newHead, tblocks, this.head);\n const result = await root(tblocks, advancedHead);\n for (const { cid, bytes } of [\n ...result.additions,\n // ...result.removals\n ]) {\n tblocks.putSync(cid, bytes);\n }\n return { head: advancedHead };\n },\n { noLoader },\n );\n this.setHead(meta.head);\n }\n}\n\n// Helper functions\nfunction sortClockHead(clockHead: ClockHead) {\n return clockHead.sort((a, b) => a.toString().localeCompare(b.toString()));\n}\n\nasync function validateBlocks(logger: Logger, newHead: ClockHead, blockstore?: BaseBlockstore) {\n if (!blockstore) throw logger.Error().Msg(\"missing blockstore\");\n newHead.map(async (cid) => {\n const got = await blockstore.get(cid);\n if (!got) {\n throw logger.Error().Str(\"cid\", cid.toString()).Msg(\"int_applyHead missing block\").AsError();\n }\n });\n}\n\nfunction compareClockHeads(head1: ClockHead, head2: ClockHead) {\n return head1.toString() === head2.toString();\n}\n\nasync function advanceBlocks(logger: Logger, newHead: ClockHead, tblocks: CarTransaction, head: ClockHead) {\n for (const cid of newHead) {\n try {\n head = await advance(tblocks, head, cid);\n } catch (e) {\n logger.Debug().Err(e).Msg(\"failed to advance head\");\n // console.log('failed to advance head:', cid.toString(), e)\n continue;\n }\n }\n return head;\n}\n","import { Logger } from \"@adviser/cement\";\nimport { ClockHead, DocTypes, DocUpdate } from \"./types.js\";\n\ntype ApplyHeadWorkerFunction = (newHead: ClockHead, prevHead: ClockHead, localUpdates: boolean) => Promise<void>;\n\ninterface ApplyHeadTask<T extends DocTypes> {\n readonly newHead: ClockHead;\n readonly prevHead: ClockHead;\n readonly updates?: DocUpdate<T>[];\n}\n\nexport interface ApplyHeadQueue<T extends DocTypes> {\n push(task: ApplyHeadTask<T>): AsyncGenerator<\n {\n readonly updates: DocUpdate<T>[];\n readonly all: boolean;\n },\n void,\n unknown\n >;\n size(): number;\n}\n\nexport function applyHeadQueue<T extends DocTypes>(worker: ApplyHeadWorkerFunction, logger: Logger): ApplyHeadQueue<T> {\n const queue: ApplyHeadTask<T>[] = [];\n let isProcessing = false;\n\n async function* process() {\n if (isProcessing || queue.length === 0) return;\n isProcessing = true;\n const allUpdates: DocUpdate<T>[] = [];\n try {\n while (queue.length > 0) {\n queue.sort((a, b) => (b.updates ? 1 : -1));\n const task = queue.shift();\n if (!task) continue;\n\n // console.time('int_applyHead worker')\n await worker(task.newHead, task.prevHead, task.updates !== null).catch((e) => {\n throw logger.Error().Err(e).Msg(\"int_applyHead worker error\").AsError();\n });\n // console.timeEnd('int_applyHead worker')\n\n if (task.updates) {\n allUpdates.push(...task.updates);\n }\n // Yield the updates if there are no tasks with updates left in the queue or the current task has updates\n if (!queue.some((t) => t.updates) || task.updates) {\n const allTasksHaveUpdates = queue.every((task) => task.updates !== null);\n yield { updates: allUpdates, all: allTasksHaveUpdates };\n allUpdates.length = 0;\n }\n }\n } finally {\n isProcessing = false;\n const generator = process();\n let result = await generator.next();\n while (!result.done) {\n result = await generator.next();\n }\n }\n }\n\n return {\n push(task: ApplyHeadTask<T>): AsyncGenerator<{ updates: DocUpdate<T>[]; all: boolean }, void, unknown> {\n queue.push(task);\n return process();\n },\n size() {\n return queue.length;\n },\n };\n}\n","export const PACKAGE_VERSION = Object.keys({\n \"0.0.0-dev\": \"xxxx\",\n})[0] as string;\n"],"mappings":"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AAG;AAAA,QAAG;AAAA,QAC7C;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAC7C;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAC7C;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAC7C;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAC7C;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAC7C;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAC7C;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAC7C;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAC7C;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAC7C;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAC7C;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAC7C;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAC7C;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAC7C;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAC7C;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;A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","names":["n","__defProp","__hasOwnProp","a","b","_env","map","filter","resolve","base","from","code","a","b","p","m","s","module","my","l","resolve","t","d","b","name","encode","length","i","j","decode","string","buffer","name","encode","decode","alphabet","string","buffer","decoder","encode","buf","b","l","decode","decode","code","init_varint","code","digest","decode","equals","a","b","init_varint","link","base","baseCache","decoder","cache","cid","code","init_varint","digest","self","equals","decode","length","from","name","code","encode","digest","init_interface","init_interface","init_interface","init_interface","init_interface","init_varint","init_interface","index","base","encode","decode","create","name","from","name","type","isBuffer","buf","p","c","toString","fromString","string","length","b","buf","set","encodedSize","buf","encodedSize","compareTokens","length","buf","l","fromString","init_bytes","encodedSize","compareTokens","toToken","length","toString","l","init_bytes","toToken","length","l","buf","encodedSize","toToken","length","l","buf","encodedSize","buf","encodedSize","buf","ui8a","encodedSize","init_bytes","entries","buf","encoder","encode","init_bytes","p","length","m","decode","decoder","decode","encode","buf","init_src","init_dist","envImpl","init_dist","createNodeSysContainer","name","base","e","init_dist","name","a","init_types","name","textEncoder","textDecoder","init_types","init_types","init_api","b","index","link","l","textDecoder","links","link","textEncoder","index","size","n","l","base","a","b","textEncoder","y","p","link","encode","l","link","decode","code","init_src","exports","module","index","resolve","params","offset","exports","base64","length","string","p","n","encode","buffer","i","t","b","decode","c","exports","module","EventEmitter","exports","module","f32","f8b","buf","f64","exports","utf8","string","c","buffer","t","exports","module","pool","alloc","slice","size","buf","exports","module","LongBits","zero","from","length","exports","Buffer","merge","src","name","message","get","i","exports","module","LongBits","base64","utf8","Op","noop","State","create","alloc","push","writeByte","buf","writeVarint32","VarintOp","writeVarint64","writeFixed32","writeBytes","fork","exports","module","buf","writeStringBuffer","exports","module","LongBits","utf8","indexOutOfRange","buffer","create_array","create","buf","length","exports","module","buffer","exports","module","self","err","exports","exports","module","exports","configure","require_minimal","exports","module","$protobuf","Data","p","encode","m","w","decode","r","l","c","t","c2","d","n","toJSON","UnixTime","Metadata","init_unixfs","code","decode","encode","encodeLink","name","init_src","init_unixfs","links","entries","n","root","message","type","length","link","effects","effect","self","group","fork","join","Future","BLANK","message","name","tag","from","index","error","init","none","buffer","empty","slice","get","n","init_api","EMPTY_BUFFER","EMPTY","init_util","init_util","init_api","config","empty","EMPTY","buffer","chunker","init_api","EMPTY","BLANK","init_api","has","link","links","write","close","init_util","message","config","chunker","link","root","fork","join","encoder","EMPTY_BUFFER","links","buffer","name","n","open","write","close","EMPTY","layout","root","index","length","defaults","configure","create","write","close","init_util","init_api","config","code","name","settings","effect","message","init_api","defaults","create","close","links","fork","init_api","settings","name","link","entries","digest","code","init_api","init_api","init_api","init_api","exports","module","root","undefined","m","n","h","exports","module","init_Uint32","init_api","murmur","init_api","init_Uint32","import_murmurhash3js_revisited","init_src","from","mur","utf8","init_api","init_src","init_Uint8Array","init_api","init_lib","init_api","init_Uint32","init_Uint8Array","utf8","configure","read","init_api","init_src","bitWidth","from","digest","bitCount","init_unixfs","init_lib","init_api","configure","init_lib","init_unixfs","init_src","init_api","close","init_lib","settings","defaults","configure","create","code","decode","encode","name","exports","module","assign","code","_","res","init_src","mapSorter","encode","defaultEncodeOptions","init_encode","buf","is","fromString","decode","init_decode","c","l","init_encode","init_decode","toByteView","buf","cidEncoder","undefinedEncoder","numberEncoder","encodeOptions","decodeOptions","code","encode","decode","format","parse","init_src","decode","textDecoder","textEncoder","code","init_json","code","encode","name","name","errCode","init_src","name","resolve","decode","resolve","init_src","name","decode","init_src","type","blockLength","import_err_code","length","errCode","import_err_code","resolve","init_identity","init_src","buf","name","errCode","decode","resolve","init_json","name","decode","import_err_code","rawContent","resolve","init_raw","init_src","buf","name","errCode","buf","init_float","length","string","c","read","buffer","t","write","buf","init_float","buffer","length","read","buf","init_decode","encode","p","c","decode","identity_exports","identity","init_identity","buf","init_identity","init_json","identity_exports","name","encode","decode","buf","decoder","encoder","string","fromString","string","base","size","buf","alloc","buf","write","fromString","createWriter","init_writer","init_float","length","message","w","createWriter","init_encode","init_writer","createCodec","name","type","encode","decode","init_codec","CODEC_TYPES","encode","decode","createCodec","init_codec","encode","decode","createCodec","init_codec","init_src","init_decode","init_encode","init_writer","Data","UnixTime","Metadata","init_unixfs","init_src","DataType","__DataTypeValues","w","length","tag","buf","import_err_code","DEFAULT_FILE_MODE","DEFAULT_DIRECTORY_MODE","init_src","init_unixfs","message","Data","type","errcode","index","exports","module","index","last","exists","a","b","asUint8Array","buf","base","name","encode","length","i","j","decode","string","buffer","src","_brrp__multiformats_scope_baseX","base_x_default","init_base_x","empty","equals","coerce","fromString","toString","init_bytes","b","Encoder","Decoder","ComposedDecoder","or","Codec","from","baseX","decode","encode","rfc4648","init_base","init_base_x","init_bytes","name","decoder","alphabet","base_x_default","coerce","string","buffer","base10_exports","base10","init_base10","init_base","baseX","base16_exports","base16","base16upper","init_base16","init_base","rfc4648","base2_exports","base2","init_base2","init_base","rfc4648","base256emoji_exports","base256emoji","encode","p","c","alphabetBytesToChars","decode","alphabetCharsToBytes","alphabet","init_base256emoji","init_base","from","base32_exports","base32","base32hex","base32hexpad","base32hexpadupper","base32hexupper","base32pad","base32padupper","base32upper","base32z","init_base32","init_base","rfc4648","base36_exports","base36","base36upper","init_base36","init_base","baseX","base58_exports","base58btc","base58flickr","init_base58","init_base","baseX","base64_exports","base64","base64pad","base64url","base64urlpad","init_base64","init_base","rfc4648","base8_exports","base8","init_base8","init_base","rfc4648","identity_exports","identity","init_identity","init_bytes","init_base","from","buf","toString","fromString","textEncoder","textDecoder","init_json","init_raw","init_bytes","encode","INT","MSB","MSBALL","read","buf","b","l","REST$1","MSB$1","encode_1","REST","decode","N1","N2","N3","N4","N5","N6","N7","N8","N9","length","varint","_brrp_varint","varint_default","init_varint","decode","encodeTo","encodingLength","init_varint","code","varint_default","create","decode","equals","Digest","init_digest","init_bytes","init_varint","code","digest","encodingLength","encodeTo","coerce","a","b","identity_exports","identity","code","name","encode","digest","init_identity","init_bytes","init_digest","coerce","create","from","Hasher","init_hasher","init_digest","name","code","encode","create","digest","sha2_browser_exports","sha256","sha512","sha","init_sha2_browser","init_hasher","name","from","init_interface","format","cache","baseCache","CID","parseCIDtoBytes","toStringV0","toStringV1","DAG_PB_CODE","SHA_256_CODE","encodeCID","cidSymbol","init_cid","init_base32","init_base58","init_bytes","init_digest","init_varint","init_interface","link","base","base58btc","base32","code","digest","create","self","equals","decode","coerce","Digest","length","decoder","cid","encodingLength","encodeTo","init_interface","init_src","init_bytes","init_cid","init_digest","init_hasher","init_varint","init_interface","bases","hashes","init_basics","init_base10","init_base16","init_base2","init_base256emoji","init_base32","init_base36","init_base58","init_base64","init_base8","init_identity","init_json","init_raw","init_sha2_browser","init_src","identity_exports","base2_exports","base8_exports","base10_exports","base16_exports","base32_exports","base36_exports","base58_exports","base64_exports","base256emoji_exports","sha2_browser_exports","allocUnsafe","asUint8Array","init_alloc","createCodec","name","encode","decode","string","ascii","BASES","bases_default","init_bases","init_basics","init_alloc","buf","decoder","encoder","allocUnsafe","bases","fromString","string","base","bases_default","asUint8Array","init_from_string","init_bases","_","init_from_string","SparseArray","map","acc","index","fromString","length","concat","length","allocUnsafe","asUint8Array","init_alloc","hashFn","concat","buffer","init_src","import_err_code","init_src","buf","links","link","name","context","errCode","decode","src_default","init_src","isAsyncIterable","peekable","src_default","init_src","isAsyncIterable","peekable","src_default","init_src","resolve","init_src","last","buffer","pushable","resolve","push","options","_pushable","init_src","message","code","isAsyncIterable","src_default","init_src","isAsyncIterable","init_src","p","source","src_default","init_directory","init_src","resolve","length","links","src_default","link","exports","module","has","context","EventEmitter","name","l","length","import_index","message","resolve","AbortError","step","index","a","b","init_dist","EventEmitter","resolve","filter","buf","errCode","src_default","link","code","decode","import_err_code","init_file","init_src","init_dist","resolve","read","resolve","links","errCode","src_default","link","name","decode","entries","import_err_code","init_src","import_err_code","init_src","init_directory","init_file","name","link","resolve","decode","errCode","import_err_code","resolve","init_src","init_json","init_identity","init_raw","code","name","errCode","name","errCode","import_err_code","init_src","encodeFile","collect","init_lib","init_src","configure","name","create","resolve","name","target","iterate","c","db","type","exports","module","encode","MSB","REST","MSBALL","INT","exports","module","read","MSB","REST","buf","b","l","exports","module","N1","N2","N3","N4","N5","N6","N7","N8","N9","exports","module","exports","exports","encode","decode","l","s","open","close","exports","n","s","t","b","src_exports","process","update","index","resolve","base","init_src","init_src","p","link","encode","decode","a","b","links","l","init_src","create","entries","encode","decode","link","s","root","entries","child","i","key","value","entry","get","b","link","create","init","entries","base","put","link","traverse","create","i","root","message","put","result","data","event","root","batch","create","a","r","root","batch","create","a","r","get","entries","c","h","b","p","Batcher","entries","base","put","a","r","root","create","cid","resolve","base","Node","current","resolve","enqueue","init_src","init_src","import_varint","decodeVarint","varint","length","v","entries","init_src","cborEncoders","defaultEncodeOptions","cborEncoders","defaultEncodeOptions","encoder","import_varint","root","close","varint","writeBytes","encode","length","createWriter","buffer","root","init_src","length","decodeVarint","decode","bytes","multihash","blockLength","index","read","p","c","b","b","index","decoder","init_src","import_varint","init_src","t","buffer","createWriter","r","encode","decode","init_src","buffer","identity","a","b","p","entries","compare","last","a","b","del","chunker","Node","root","newBranchEntries","l","m","cache","result","entry","cids","keys","p","s","results","LeafClass","n","BranchClass","r","entries2","final","opts","block","encode","create","compare","a","b","buffer","get","cache","chunker","decoder","entries","create","crypto","randomBytes","readUInt32LE","buffer","concat","b","encode","decode","code","name","crypto","randomBytes","get","cache","chunker","root","set","block","encode","s","last","create","decode","tree","unwrap","length","t","t","name","resolve","carLogIncludesGroup","remove","name","c","t","cid","cache","got","batchSize","batch","slice","root","encoder","b","name","textEncoder","textDecoder","format","parse","carLogIncludesGroup","r","name","encodeFile","IndexDBDataGateway","IndexDBMetaGateway","IndexDBTestStore","tag","toString","batch","create","update","link","put","encode","t","type","name","get","decode","l","entries","init_src","entries","createGetNode","get","cache","chunker","compare","LeafClass","BranchClass","decoder","create","a","b","load","value","compare","a","b","entries","key","classes","defaults","create","load","refCompare","compare","a","b","del","charwise","create","load","root","name","c","process","a","b","t","task","a","b","name","name","del","updates","set","a","b"]}
|