@fireproof/core 0.14.3 → 0.14.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../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", "../../../../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", "../../../../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.2/node_modules/protobufjs/src/util/longbits.js", "../../../../node_modules/.pnpm/protobufjs@7.2.2/node_modules/protobufjs/src/util/minimal.js", "../../../../node_modules/.pnpm/protobufjs@7.2.2/node_modules/protobufjs/src/writer.js", "../../../../node_modules/.pnpm/protobufjs@7.2.2/node_modules/protobufjs/src/writer_buffer.js", "../../../../node_modules/.pnpm/protobufjs@7.2.2/node_modules/protobufjs/src/reader.js", "../../../../node_modules/.pnpm/protobufjs@7.2.2/node_modules/protobufjs/src/reader_buffer.js", "../../../../node_modules/.pnpm/protobufjs@7.2.2/node_modules/protobufjs/src/rpc/service.js", "../../../../node_modules/.pnpm/protobufjs@7.2.2/node_modules/protobufjs/src/rpc.js", "../../../../node_modules/.pnpm/protobufjs@7.2.2/node_modules/protobufjs/src/roots.js", "../../../../node_modules/.pnpm/protobufjs@7.2.2/node_modules/protobufjs/src/index-minimal.js", "../../../../node_modules/.pnpm/protobufjs@7.2.2/node_modules/protobufjs/minimal.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/err-code@3.0.1/node_modules/err-code/index.js", "../../../../node_modules/.pnpm/sparse-array@1.3.2/node_modules/sparse-array/index.js", "../../../../node_modules/.pnpm/eventemitter3@4.0.7/node_modules/eventemitter3/index.js", "../../../../node_modules/.pnpm/uuidv7@0.6.2/node_modules/uuidv7/dist/index.js", "../../src/write-queue.ts", "../../../../node_modules/.pnpm/multiformats@11.0.2/node_modules/multiformats/vendor/varint.js", "../../../../node_modules/.pnpm/multiformats@11.0.2/node_modules/multiformats/src/varint.js", "../../../../node_modules/.pnpm/multiformats@11.0.2/node_modules/multiformats/src/bytes.js", "../../../../node_modules/.pnpm/multiformats@11.0.2/node_modules/multiformats/src/hashes/digest.js", "../../../../node_modules/.pnpm/multiformats@11.0.2/node_modules/multiformats/src/bases/base58.js", "../../../../node_modules/.pnpm/multiformats@11.0.2/node_modules/multiformats/vendor/base-x.js", "../../../../node_modules/.pnpm/multiformats@11.0.2/node_modules/multiformats/src/bases/base.js", "../../../../node_modules/.pnpm/multiformats@11.0.2/node_modules/multiformats/src/bases/base32.js", "../../../../node_modules/.pnpm/multiformats@11.0.2/node_modules/multiformats/src/cid.js", "../../../../node_modules/.pnpm/multiformats@11.0.2/node_modules/multiformats/src/link.js", "../../../../node_modules/.pnpm/@alanshaw+pail@0.3.3/node_modules/@alanshaw/pail/src/block.js", "../../../../node_modules/.pnpm/yocto-queue@1.0.0/node_modules/yocto-queue/index.js", "../../../../node_modules/.pnpm/p-limit@4.0.0/node_modules/p-limit/index.js", "../../../../node_modules/.pnpm/@ipld+car@5.2.0/node_modules/@ipld/car/src/reader.js", "../../../../node_modules/.pnpm/@ipld+dag-cbor@9.0.4/node_modules/@ipld/dag-cbor/src/index.js", "../../../../node_modules/.pnpm/cborg@2.0.4/node_modules/cborg/esm/lib/is.js", "../../../../node_modules/.pnpm/cborg@2.0.4/node_modules/cborg/esm/lib/token.js", "../../../../node_modules/.pnpm/cborg@2.0.4/node_modules/cborg/esm/lib/byte-utils.js", "../../../../node_modules/.pnpm/cborg@2.0.4/node_modules/cborg/esm/lib/bl.js", "../../../../node_modules/.pnpm/cborg@2.0.4/node_modules/cborg/esm/lib/common.js", "../../../../node_modules/.pnpm/cborg@2.0.4/node_modules/cborg/esm/lib/0uint.js", "../../../../node_modules/.pnpm/cborg@2.0.4/node_modules/cborg/esm/lib/1negint.js", "../../../../node_modules/.pnpm/cborg@2.0.4/node_modules/cborg/esm/lib/2bytes.js", "../../../../node_modules/.pnpm/cborg@2.0.4/node_modules/cborg/esm/lib/3string.js", "../../../../node_modules/.pnpm/cborg@2.0.4/node_modules/cborg/esm/lib/4array.js", "../../../../node_modules/.pnpm/cborg@2.0.4/node_modules/cborg/esm/lib/5map.js", "../../../../node_modules/.pnpm/cborg@2.0.4/node_modules/cborg/esm/lib/6tag.js", "../../../../node_modules/.pnpm/cborg@2.0.4/node_modules/cborg/esm/lib/7float.js", "../../../../node_modules/.pnpm/cborg@2.0.4/node_modules/cborg/esm/lib/jump.js", "../../../../node_modules/.pnpm/cborg@2.0.4/node_modules/cborg/esm/lib/encode.js", "../../../../node_modules/.pnpm/cborg@2.0.4/node_modules/cborg/esm/lib/decode.js", "../../../../node_modules/.pnpm/multiformats@12.0.1/node_modules/multiformats/vendor/varint.js", "../../../../node_modules/.pnpm/multiformats@12.0.1/node_modules/multiformats/src/varint.js", "../../../../node_modules/.pnpm/multiformats@12.0.1/node_modules/multiformats/src/bytes.js", "../../../../node_modules/.pnpm/multiformats@12.0.1/node_modules/multiformats/src/hashes/digest.js", "../../../../node_modules/.pnpm/multiformats@12.0.1/node_modules/multiformats/vendor/base-x.js", "../../../../node_modules/.pnpm/multiformats@12.0.1/node_modules/multiformats/src/bases/base.js", "../../../../node_modules/.pnpm/multiformats@12.0.1/node_modules/multiformats/src/bases/base58.js", "../../../../node_modules/.pnpm/multiformats@12.0.1/node_modules/multiformats/src/bases/base32.js", "../../../../node_modules/.pnpm/multiformats@12.0.1/node_modules/multiformats/src/cid.js", "../../../../node_modules/.pnpm/@ipld+car@5.2.0/node_modules/@ipld/car/src/header-validator.js", "../../../../node_modules/.pnpm/@ipld+car@5.2.0/node_modules/@ipld/car/src/decoder-common.js", "../../../../node_modules/.pnpm/@ipld+car@5.2.0/node_modules/@ipld/car/src/decoder.js", "../../../../node_modules/.pnpm/@ipld+car@5.2.0/node_modules/@ipld/car/src/reader-browser.js", "../../../../node_modules/.pnpm/@ipld+car@5.2.0/node_modules/@ipld/car/src/buffer-reader.js", "../../../../node_modules/.pnpm/@ipld+car@5.2.0/node_modules/@ipld/car/src/indexer.js", "../../../../node_modules/.pnpm/@ipld+car@5.2.0/node_modules/@ipld/car/src/iterator.js", "../../../../node_modules/.pnpm/@ipld+car@5.2.0/node_modules/@ipld/car/src/writer.js", "../../../../node_modules/.pnpm/@ipld+car@5.2.0/node_modules/@ipld/car/src/encoder.js", "../../../../node_modules/.pnpm/@ipld+car@5.2.0/node_modules/@ipld/car/src/writer-browser.js", "../../../../node_modules/.pnpm/@ipld+car@5.2.0/node_modules/@ipld/car/src/buffer-writer.js", "../../../../node_modules/.pnpm/cborg@1.10.0/node_modules/cborg/esm/lib/is.js", "../../../../node_modules/.pnpm/cborg@1.10.0/node_modules/cborg/esm/lib/token.js", "../../../../node_modules/.pnpm/cborg@1.10.0/node_modules/cborg/esm/lib/byte-utils.js", "../../../../node_modules/.pnpm/cborg@1.10.0/node_modules/cborg/esm/lib/bl.js", "../../../../node_modules/.pnpm/cborg@1.10.0/node_modules/cborg/esm/lib/common.js", "../../../../node_modules/.pnpm/cborg@1.10.0/node_modules/cborg/esm/lib/0uint.js", "../../../../node_modules/.pnpm/cborg@1.10.0/node_modules/cborg/esm/lib/1negint.js", "../../../../node_modules/.pnpm/cborg@1.10.0/node_modules/cborg/esm/lib/2bytes.js", "../../../../node_modules/.pnpm/cborg@1.10.0/node_modules/cborg/esm/lib/3string.js", "../../../../node_modules/.pnpm/cborg@1.10.0/node_modules/cborg/esm/lib/4array.js", "../../../../node_modules/.pnpm/cborg@1.10.0/node_modules/cborg/esm/lib/5map.js", "../../../../node_modules/.pnpm/cborg@1.10.0/node_modules/cborg/esm/lib/6tag.js", "../../../../node_modules/.pnpm/cborg@1.10.0/node_modules/cborg/esm/lib/7float.js", "../../../../node_modules/.pnpm/cborg@1.10.0/node_modules/cborg/esm/lib/jump.js", "../../../../node_modules/.pnpm/cborg@1.10.0/node_modules/cborg/esm/lib/encode.js", "../../../../node_modules/.pnpm/cborg@1.10.0/node_modules/cborg/esm/lib/decode.js", "../../../../node_modules/.pnpm/cborg@1.10.0/node_modules/cborg/esm/lib/length.js", "../../../../node_modules/.pnpm/multiformats@12.0.1/node_modules/multiformats/src/hashes/hasher.js", "../../../../node_modules/.pnpm/multiformats@12.0.1/node_modules/multiformats/src/block.js", "../../../../node_modules/.pnpm/multiformats@12.0.1/node_modules/multiformats/src/hashes/sha2.js", "../../../../node_modules/.pnpm/multiformats@12.0.1/node_modules/multiformats/src/codecs/raw.js", "../../src/loader-helpers.ts", "../../src/encrypted-block.ts", "../../src/crypto-web.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/base.js", "../../../../node_modules/.pnpm/prolly-trees@1.0.4/node_modules/prolly-trees/esm/src/cid-set.js", "../../src/crypto-ipld.ts", "../../../../node_modules/.pnpm/prolly-trees@1.0.4/node_modules/prolly-trees/esm/src/cache.js", "../../src/encrypt-helpers.ts", "../../../../node_modules/.pnpm/cborg@2.0.4/node_modules/cborg/esm/lib/json/encode.js", "../../../../node_modules/.pnpm/cborg@2.0.4/node_modules/cborg/esm/lib/json/decode.js", "../../../../node_modules/.pnpm/multiformats@12.0.1/node_modules/multiformats/src/bases/base64.js", "../../../../node_modules/.pnpm/@ipld+dag-json@10.1.3/node_modules/@ipld/dag-json/src/index.js", "../../src/version.ts", "../../src/store.ts", "../../src/commit-queue.ts", "../../src/remote-wal.ts", "../../src/store-memory.ts", "../../src/loader.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/index.ts", "../../../../node_modules/.pnpm/multiformats@12.0.1/node_modules/multiformats/src/link.js", "../../../../node_modules/.pnpm/multiformats@11.0.2/node_modules/multiformats/src/hashes/hasher.js", "../../../../node_modules/.pnpm/multiformats@11.0.2/node_modules/multiformats/src/block.js", "../../../../node_modules/.pnpm/multiformats@11.0.2/node_modules/multiformats/src/hashes/sha2.js", "../../../../node_modules/.pnpm/@alanshaw+pail@0.3.3/node_modules/@alanshaw/pail/src/clock.js", "../../../../node_modules/.pnpm/@alanshaw+pail@0.3.3/node_modules/@alanshaw/pail/src/shard.js", "../../../../node_modules/.pnpm/@alanshaw+pail@0.3.3/node_modules/@alanshaw/pail/src/index.js", "../../../../node_modules/.pnpm/@alanshaw+pail@0.3.3/node_modules/@alanshaw/pail/src/crdt.js", "../../../../node_modules/.pnpm/@ipld+unixfs@2.1.1/node_modules/@ipld/unixfs/src/codec.js", "../../../../node_modules/.pnpm/@ipld+dag-pb@4.0.2/node_modules/@ipld/dag-pb/src/pb-decode.js", "../../../../node_modules/.pnpm/@ipld+dag-pb@4.0.2/node_modules/@ipld/dag-pb/src/pb-encode.js", "../../../../node_modules/.pnpm/@ipld+dag-pb@4.0.2/node_modules/@ipld/dag-pb/src/util.js", "../../../../node_modules/.pnpm/@ipld+dag-pb@4.0.2/node_modules/@ipld/dag-pb/src/index.js", "../../../../node_modules/.pnpm/@ipld+unixfs@2.1.1/node_modules/@ipld/unixfs/gen/unixfs.js", "../../../../node_modules/.pnpm/@ipld+unixfs@2.1.1/node_modules/@ipld/unixfs/src/unixfs.js", "../../../../node_modules/.pnpm/actor@2.3.1/node_modules/actor/src/lib.js", "../../../../node_modules/.pnpm/@ipld+unixfs@2.1.1/node_modules/@ipld/unixfs/src/file/chunker/indexed.js", "../../../../node_modules/.pnpm/@ipld+unixfs@2.1.1/node_modules/@ipld/unixfs/src/file/chunker/buffer.js", "../../../../node_modules/.pnpm/@ipld+unixfs@2.1.1/node_modules/@ipld/unixfs/src/writer/util.js", "../../../../node_modules/.pnpm/@ipld+unixfs@2.1.1/node_modules/@ipld/unixfs/src/file/chunker.js", "../../../../node_modules/.pnpm/@ipld+unixfs@2.1.1/node_modules/@ipld/unixfs/src/file/layout/queue.js", "../../../../node_modules/.pnpm/@ipld+unixfs@2.1.1/node_modules/@ipld/unixfs/src/file/writer.js", "../../../../node_modules/.pnpm/@ipld+unixfs@2.1.1/node_modules/@ipld/unixfs/src/file/chunker/fixed.js", "../../../../node_modules/.pnpm/@ipld+unixfs@2.1.1/node_modules/@ipld/unixfs/src/file/layout/balanced.js", "../../../../node_modules/.pnpm/@ipld+unixfs@2.1.1/node_modules/@ipld/unixfs/src/file.js", "../../../../node_modules/.pnpm/@ipld+unixfs@2.1.1/node_modules/@ipld/unixfs/src/directory.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/bitfield/api.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.5/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@2.1.1/node_modules/@ipld/unixfs/src/sharded-directory.js", "../../../../node_modules/.pnpm/@ipld+unixfs@2.1.1/node_modules/@ipld/unixfs/src/lib.js", "../../../../node_modules/.pnpm/ipfs-unixfs-exporter@13.1.7/node_modules/ipfs-unixfs-exporter/src/index.ts", "../../../../node_modules/.pnpm/it-last@3.0.3/node_modules/it-last/src/index.ts", "../../../../node_modules/.pnpm/ipfs-unixfs-exporter@13.1.7/node_modules/ipfs-unixfs-exporter/src/resolvers/index.ts", "../../../../node_modules/.pnpm/multiformats@12.0.1/node_modules/multiformats/src/hashes/identity.js", "../../../../node_modules/.pnpm/ipfs-unixfs-exporter@13.1.7/node_modules/ipfs-unixfs-exporter/src/resolvers/dag-cbor.ts", "../../../../node_modules/.pnpm/ipfs-unixfs-exporter@13.1.7/node_modules/ipfs-unixfs-exporter/src/resolvers/identity.ts", "../../../../node_modules/.pnpm/progress-events@1.0.0/node_modules/progress-events/src/index.ts", "../../../../node_modules/.pnpm/ipfs-unixfs-exporter@13.1.7/node_modules/ipfs-unixfs-exporter/src/utils/extract-data-from-block.ts", "../../../../node_modules/.pnpm/ipfs-unixfs-exporter@13.1.7/node_modules/ipfs-unixfs-exporter/src/utils/validate-offset-and-length.ts", "../../../../node_modules/.pnpm/ipfs-unixfs-exporter@13.1.7/node_modules/ipfs-unixfs-exporter/src/resolvers/raw.ts", "../../../../node_modules/.pnpm/ipfs-unixfs-exporter@13.1.7/node_modules/ipfs-unixfs-exporter/src/resolvers/unixfs-v1/index.ts", "../../../../node_modules/.pnpm/ipfs-unixfs@11.0.2/node_modules/ipfs-unixfs/src/index.ts", "../../../../node_modules/.pnpm/protons-runtime@5.0.2/node_modules/protons-runtime/src/utils.ts", "../../../../node_modules/.pnpm/protons-runtime@5.0.2/node_modules/protons-runtime/src/decode.ts", "../../../../node_modules/.pnpm/protons-runtime@5.0.2/node_modules/protons-runtime/src/encode.ts", "../../../../node_modules/.pnpm/protons-runtime@5.0.2/node_modules/protons-runtime/src/codec.ts", "../../../../node_modules/.pnpm/protons-runtime@5.0.2/node_modules/protons-runtime/src/codecs/enum.ts", "../../../../node_modules/.pnpm/protons-runtime@5.0.2/node_modules/protons-runtime/src/codecs/message.ts", "../../../../node_modules/.pnpm/ipfs-unixfs@11.0.2/node_modules/ipfs-unixfs/src/unixfs.ts", "../../../../node_modules/.pnpm/hamt-sharding@3.0.2/node_modules/hamt-sharding/src/bucket.ts", "../../../../node_modules/.pnpm/multiformats@11.0.2/node_modules/multiformats/src/bases/identity.js", "../../../../node_modules/.pnpm/multiformats@11.0.2/node_modules/multiformats/src/bases/base2.js", "../../../../node_modules/.pnpm/multiformats@11.0.2/node_modules/multiformats/src/bases/base8.js", "../../../../node_modules/.pnpm/multiformats@11.0.2/node_modules/multiformats/src/bases/base10.js", "../../../../node_modules/.pnpm/multiformats@11.0.2/node_modules/multiformats/src/bases/base16.js", "../../../../node_modules/.pnpm/multiformats@11.0.2/node_modules/multiformats/src/bases/base36.js", "../../../../node_modules/.pnpm/multiformats@11.0.2/node_modules/multiformats/src/bases/base64.js", "../../../../node_modules/.pnpm/multiformats@11.0.2/node_modules/multiformats/src/bases/base256emoji.js", "../../../../node_modules/.pnpm/multiformats@11.0.2/node_modules/multiformats/src/hashes/identity.js", "../../../../node_modules/.pnpm/multiformats@11.0.2/node_modules/multiformats/src/codecs/json.js", "../../../../node_modules/.pnpm/multiformats@11.0.2/node_modules/multiformats/src/basics.js", "../../../../node_modules/.pnpm/uint8arrays@4.0.3/node_modules/uint8arrays/src/util/as-uint8array.ts", "../../../../node_modules/.pnpm/uint8arrays@4.0.3/node_modules/uint8arrays/src/alloc.ts", "../../../../node_modules/.pnpm/uint8arrays@4.0.3/node_modules/uint8arrays/src/util/bases.ts", "../../../../node_modules/.pnpm/uint8arrays@4.0.3/node_modules/uint8arrays/src/from-string.ts", "../../../../node_modules/.pnpm/hamt-sharding@3.0.2/node_modules/hamt-sharding/src/consumable-buffer.ts", "../../../../node_modules/.pnpm/uint8arrays@4.0.3/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.1.7/node_modules/ipfs-unixfs-exporter/src/utils/find-cid-in-shard.ts", "../../../../node_modules/.pnpm/it-peekable@3.0.2/node_modules/it-peekable/src/index.ts", "../../../../node_modules/.pnpm/it-filter@3.0.3/node_modules/it-filter/src/index.ts", "../../../../node_modules/.pnpm/it-map@3.0.4/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.4/node_modules/it-parallel/src/index.ts", "../../../../node_modules/.pnpm/it-pushable@3.2.1/node_modules/it-pushable/src/fifo.ts", "../../../../node_modules/.pnpm/it-pushable@3.2.1/node_modules/it-pushable/src/index.ts", "../../../../node_modules/.pnpm/it-merge@3.0.2/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.1.7/node_modules/ipfs-unixfs-exporter/src/resolvers/unixfs-v1/content/directory.ts", "../../../../node_modules/.pnpm/ipfs-unixfs-exporter@13.1.7/node_modules/ipfs-unixfs-exporter/src/resolvers/unixfs-v1/content/file.ts", "../../../../node_modules/.pnpm/p-queue@7.3.4/node_modules/p-queue/dist/index.js", "../../../../node_modules/.pnpm/p-timeout@5.1.0/node_modules/p-timeout/index.js", "../../../../node_modules/.pnpm/p-queue@7.3.4/node_modules/p-queue/dist/lower-bound.js", "../../../../node_modules/.pnpm/p-queue@7.3.4/node_modules/p-queue/dist/priority-queue.js", "../../../../node_modules/.pnpm/ipfs-unixfs-exporter@13.1.7/node_modules/ipfs-unixfs-exporter/src/resolvers/unixfs-v1/content/hamt-sharded-directory.ts", "../../src/files.ts", "../../src/crdt-helpers.ts", "../../src/loaders.ts", "../../src/transaction.ts", "../../src/apply-head-queue.ts", "../../src/crdt-clock.ts", "../../src/crdt.ts", "../../src/database.ts"],
4
+ "sourcesContent": ["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", "// 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", "\"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 return start === end // fix for IE 10/Win8 and others' subarray returning array of size 1\n ? new this.buf.constructor(0)\n : 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", "/* 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", "'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", "'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}", "'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", "/**\n * uuidv7: An experimental implementation of the proposed UUID Version 7\n *\n * @license Apache-2.0\n * @copyright 2021-2023 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 4122 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 despite a significant rollback of the system clock.\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 monotonically increasing UUIDs unless the up-to-date\n * timestamp is significantly (by more than ten seconds) smaller than the one\n * embedded in the immediately preceding UUID. If such a significant clock\n * rollback is detected, this method resets the generator and returns a new\n * UUID based on the current timestamp.\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 monotonically increasing UUIDs unless the up-to-date\n * timestamp is significantly (by more than ten seconds) smaller than the one\n * embedded in the immediately preceding UUID. If such a significant clock\n * rollback is detected, this method aborts and returns `undefined`.\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", "import { BulkResult, DocUpdate } from './types'\n\ntype WorkerFunction = (tasks: DocUpdate[]) => Promise<BulkResult>;\n\nexport type WriteQueue = {\n push(task: DocUpdate): Promise<BulkResult>;\n};\n\nexport function writeQueue(worker: WorkerFunction, payload: number = Infinity, unbounded: boolean = false): WriteQueue {\n const queue: {\n task: DocUpdate;\n resolve: (result: BulkResult) => void;\n reject: (error: Error) => void;\n }[] = []\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): Promise<BulkResult> {\n return new Promise<BulkResult>((resolve, reject) => {\n queue.push({ task, resolve, reject })\n void process()\n })\n }\n }\n}\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", "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 { 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 { 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", "// 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", "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 { 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 * as varint from './varint.js'\nimport * as Digest from './hashes/digest.js'\nimport { base58btc } from './bases/base58.js'\nimport { base32 } from './bases/base32.js'\nimport { coerce } from './bytes.js'\n// Linter can see that API is used in types.\n// eslint-disable-next-line\nimport * 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\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 */\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 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", "// Linter can see that API is used in types.\n// eslint-disable-next-line\nimport * as API from \"./link/interface.js\"\nimport { CID, format, toJSON, fromJSON } from './cid.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 *\n * @param {API.MultihashDigest<typeof SHA_256_CODE>} digest - Multihash.\n * @returns {API.LegacyLink}\n */\nexport const createLegacy = digest => CID.create(0, DAG_PB_CODE, digest)\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 {API.Link<Data, Code, Alg>}\n */\nexport const create = (code, digest) => CID.create(1, code, digest)\n\n/**\n * Type predicate returns true if value is the link.\n *\n * @template {API.Link<unknown, number, number, 0|1>} L\n * @param {unknown|L} value\n * @returns {value is L & CID}\n */\nexport const isLink = value => {\n if (value == null) {\n return false\n }\n\n const withSlash = /** @type {{'/'?: Uint8Array, bytes: Uint8Array}} */ (value)\n\n if (withSlash['/'] != null && withSlash['/'] === withSlash.bytes) {\n return true\n }\n\n const withAsCID = /** @type {{'asCID'?: unknown}} */ (value)\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 *\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 {API.Link<Data, Code, Alg, Ver>}\n */\nexport const parse = (source, base) => CID.parse(source, base)\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 *\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 {API.Link<Data, Code, Alg, Ver>}\n */\nexport const decode = bytes => CID.decode(bytes)\n", "import { parse } from 'multiformats/link'\n\n/**\n * @typedef {{ cid: import('./link').AnyLink, bytes: Uint8Array }} AnyBlock\n * @typedef {{ get: (link: import('./link').AnyLink) => Promise<AnyBlock | undefined> }} BlockFetcher\n */\n\n/** @implements {BlockFetcher} */\nexport class MemoryBlockstore {\n /** @type {Map<string, Uint8Array>} */\n #blocks = new Map()\n\n /**\n * @param {Array<AnyBlock>} [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 /**\n * @param {import('./link').AnyLink} cid\n * @returns {Promise<AnyBlock | undefined>}\n */\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 {import('./link').AnyLink} cid\n * @param {Uint8Array} bytes\n */\n async put (cid, bytes) {\n this.#blocks.set(cid.toString(), bytes)\n }\n\n /**\n * @param {import('./link').AnyLink} cid\n * @param {Uint8Array} bytes\n */\n putSync (cid, bytes) {\n this.#blocks.set(cid.toString(), bytes)\n }\n\n /** @param {import('./link').AnyLink} cid */\n async delete (cid) {\n this.#blocks.delete(cid.toString())\n }\n\n /** @param {import('./link').AnyLink} 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 {BlockFetcher[]} */\n #fetchers\n\n /** @param {BlockFetcher[]} fetchers */\n constructor (...fetchers) {\n this.#fetchers = fetchers\n }\n\n /** @param {import('./link').AnyLink} link */\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", "/*\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", "import Queue from 'yocto-queue';\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 (fn, resolve, args) => {\n\t\tactiveCount++;\n\n\t\tconst result = (async () => fn(...args))();\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 = (fn, resolve, args) => {\n\t\tqueue.enqueue(run.bind(undefined, fn, resolve, args));\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 = (fn, ...args) => new Promise(resolve => {\n\t\tenqueue(fn, resolve, args);\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 fs from 'fs'\nimport { promisify } from 'util'\nimport { CarReader as BrowserCarReader } from './reader-browser.js'\n\n/**\n * @typedef {import('./api').Block} Block\n * @typedef {import('./api').BlockIndex} BlockIndex\n * @typedef {import('./api').CarReader} CarReaderIface\n */\n\nconst fsread = promisify(fs.read)\n\n/**\n * @class\n * @implements {CarReaderIface}\n */\nexport class CarReader extends BrowserCarReader {\n /**\n * Reads a block directly from a file descriptor for an open CAR file. This\n * function is **only available in Node.js** and not a browser environment.\n *\n * This function can be used in connection with {@link CarIndexer} which emits\n * the `BlockIndex` objects that are required by this function.\n *\n * The user is responsible for opening and closing the file used in this call.\n *\n * @async\n * @static\n * @memberof CarReader\n * @param {fs.promises.FileHandle | number} fd - A file descriptor from the\n * Node.js `fs` module. Either an integer, from `fs.open()` or a `FileHandle`\n * from `fs.promises.open()`.\n * @param {BlockIndex} blockIndex - An index pointing to the location of the\n * Block required. This `BlockIndex` should take the form:\n * `{cid:CID, blockLength:number, blockOffset:number}`.\n * @returns {Promise<Block>} A `{ cid:CID, bytes:Uint8Array }` pair.\n */\n static async readRaw (fd, blockIndex) {\n const { cid, blockLength, blockOffset } = blockIndex\n const bytes = new Uint8Array(blockLength)\n let read\n if (typeof fd === 'number') {\n read = (await fsread(fd, bytes, 0, blockLength, blockOffset)).bytesRead\n } else if (typeof fd === 'object' && typeof fd.read === 'function') { // FileDescriptor\n read = (await fd.read(bytes, 0, blockLength, blockOffset)).bytesRead\n } else {\n throw new TypeError('Bad fd')\n }\n if (read !== blockLength) {\n throw new Error(`Failed to read entire block (${read} instead of ${blockLength})`)\n }\n return { cid, bytes }\n /* c8 ignore next 2 */\n // Node.js 12 c8 bug\n }\n}\n\nexport const __browser = false\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 * 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\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}\ndecodeOptions.tags[CID_CBOR_TAG] = cidDecoder\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>} data\n * @returns {T}\n */\nexport const decode = (data) => cborg.decode(data, decodeOptions)\n", "const typeofs = [\n 'string',\n 'number',\n 'bigint',\n 'symbol'\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];\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 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 return 'Object';\n}\nfunction isBuffer(value) {\n return value && value.constructor && value.constructor.isBuffer && value.constructor.isBuffer.call(null, value);\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 return undefined;\n}", "class Type {\n constructor(major, name, terminal) {\n this.major = major;\n this.majorEncoded = major << 5;\n this.name = name;\n this.terminal = terminal;\n }\n toString() {\n return `Type[${ this.major }].${ this.name }`;\n }\n compare(typ) {\n return this.major < typ.major ? -1 : this.major > typ.major ? 1 : 0;\n }\n}\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);\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);\nclass Token {\n constructor(type, value, encodedLength) {\n this.type = type;\n this.value = value;\n this.encodedLength = encodedLength;\n this.encodedBytes = undefined;\n this.byteValue = undefined;\n }\n toString() {\n return `Token[${ this.type }].${ this.value }`;\n }\n}\nexport {\n Type,\n Token\n};", "export const useBuffer = globalThis.process && !globalThis.process.browser && globalThis.Buffer && typeof globalThis.Buffer.isBuffer === 'function';\nconst textDecoder = new TextDecoder();\nconst textEncoder = new TextEncoder();\nfunction isBuffer(buf) {\n return useBuffer && globalThis.Buffer.isBuffer(buf);\n}\nexport function asU8A(buf) {\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}\nexport const toString = useBuffer ? (bytes, start, end) => {\n return end - start > 64 ? globalThis.Buffer.from(bytes.subarray(start, end)).toString('utf8') : utf8Slice(bytes, start, end);\n} : (bytes, start, end) => {\n return end - start > 64 ? textDecoder.decode(bytes.subarray(start, end)) : utf8Slice(bytes, start, end);\n};\nexport const fromString = useBuffer ? string => {\n return string.length > 64 ? globalThis.Buffer.from(string) : utf8ToBytes(string);\n} : string => {\n return string.length > 64 ? textEncoder.encode(string) : utf8ToBytes(string);\n};\nexport const fromArray = arr => {\n return Uint8Array.from(arr);\n};\nexport const slice = useBuffer ? (bytes, start, end) => {\n if (isBuffer(bytes)) {\n return new Uint8Array(bytes.subarray(start, end));\n }\n return bytes.slice(start, end);\n} : (bytes, start, end) => {\n return bytes.slice(start, end);\n};\nexport const concat = useBuffer ? (chunks, length) => {\n chunks = chunks.map(c => c instanceof Uint8Array ? c : globalThis.Buffer.from(c));\n return asU8A(globalThis.Buffer.concat(chunks, length));\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 b = b.subarray(0, out.length - off);\n }\n out.set(b, off);\n off += b.length;\n }\n return out;\n};\nexport const alloc = useBuffer ? size => {\n return globalThis.Buffer.allocUnsafe(size);\n} : size => {\n return new Uint8Array(size);\n};\nexport const toHex = useBuffer ? d => {\n if (typeof d === 'string') {\n return d;\n }\n return globalThis.Buffer.from(toBytes(d)).toString('hex');\n} : d => {\n if (typeof d === 'string') {\n return d;\n }\n return Array.prototype.reduce.call(toBytes(d), (p, c) => `${ p }${ c.toString(16).padStart(2, '0') }`, '');\n};\nexport const fromHex = useBuffer ? hex => {\n if (hex instanceof Uint8Array) {\n return hex;\n }\n return globalThis.Buffer.from(hex, 'hex');\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('').map((c, i, d) => i % 2 === 0 ? `0x${ c }${ d[i + 1] }` : '').filter(Boolean).map(e => parseInt(e, 16)));\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 throw new Error('Unknown type, must be binary type');\n}\nexport function compare(b1, b2) {\n if (isBuffer(b1) && isBuffer(b2)) {\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 }\n return 0;\n}\nfunction utf8ToBytes(string, units = Infinity) {\n let codePoint;\n const length = string.length;\n let leadSurrogate = null;\n const bytes = [];\n for (let i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i);\n if (codePoint > 55295 && codePoint < 57344) {\n if (!leadSurrogate) {\n if (codePoint > 56319) {\n if ((units -= 3) > -1)\n bytes.push(239, 191, 189);\n continue;\n } else if (i + 1 === length) {\n if ((units -= 3) > -1)\n bytes.push(239, 191, 189);\n continue;\n }\n leadSurrogate = codePoint;\n continue;\n }\n if (codePoint < 56320) {\n if ((units -= 3) > -1)\n bytes.push(239, 191, 189);\n leadSurrogate = codePoint;\n continue;\n }\n codePoint = (leadSurrogate - 55296 << 10 | codePoint - 56320) + 65536;\n } else if (leadSurrogate) {\n if ((units -= 3) > -1)\n bytes.push(239, 191, 189);\n }\n leadSurrogate = null;\n if (codePoint < 128) {\n if ((units -= 1) < 0)\n break;\n bytes.push(codePoint);\n } else if (codePoint < 2048) {\n if ((units -= 2) < 0)\n break;\n bytes.push(codePoint >> 6 | 192, codePoint & 63 | 128);\n } else if (codePoint < 65536) {\n if ((units -= 3) < 0)\n break;\n bytes.push(codePoint >> 12 | 224, codePoint >> 6 & 63 | 128, codePoint & 63 | 128);\n } else if (codePoint < 1114112) {\n if ((units -= 4) < 0)\n break;\n bytes.push(codePoint >> 18 | 240, codePoint >> 12 & 63 | 128, codePoint >> 6 & 63 | 128, codePoint & 63 | 128);\n } else {\n throw new Error('Invalid code point');\n }\n }\n return bytes;\n}\nfunction utf8Slice(buf, offset, end) {\n const res = [];\n while (offset < end) {\n const firstByte = buf[offset];\n let codePoint = null;\n let bytesPerSequence = firstByte > 239 ? 4 : firstByte > 223 ? 3 : firstByte > 191 ? 2 : 1;\n if (offset + bytesPerSequence <= end) {\n let secondByte, thirdByte, fourthByte, tempCodePoint;\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 128) {\n codePoint = firstByte;\n }\n break;\n case 2:\n secondByte = buf[offset + 1];\n if ((secondByte & 192) === 128) {\n tempCodePoint = (firstByte & 31) << 6 | secondByte & 63;\n if (tempCodePoint > 127) {\n codePoint = tempCodePoint;\n }\n }\n break;\n case 3:\n secondByte = buf[offset + 1];\n thirdByte = buf[offset + 2];\n if ((secondByte & 192) === 128 && (thirdByte & 192) === 128) {\n tempCodePoint = (firstByte & 15) << 12 | (secondByte & 63) << 6 | thirdByte & 63;\n if (tempCodePoint > 2047 && (tempCodePoint < 55296 || tempCodePoint > 57343)) {\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 & 192) === 128 && (thirdByte & 192) === 128 && (fourthByte & 192) === 128) {\n tempCodePoint = (firstByte & 15) << 18 | (secondByte & 63) << 12 | (thirdByte & 63) << 6 | fourthByte & 63;\n if (tempCodePoint > 65535 && tempCodePoint < 1114112) {\n codePoint = tempCodePoint;\n }\n }\n }\n }\n if (codePoint === null) {\n codePoint = 65533;\n bytesPerSequence = 1;\n } else if (codePoint > 65535) {\n codePoint -= 65536;\n res.push(codePoint >>> 10 & 1023 | 55296);\n codePoint = 56320 | codePoint & 1023;\n }\n res.push(codePoint);\n offset += bytesPerSequence;\n }\n return decodeCodePointsArray(res);\n}\nconst MAX_ARGUMENTS_LENGTH = 4096;\nexport function decodeCodePointsArray(codePoints) {\n const len = codePoints.length;\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints);\n }\n let res = '';\n let i = 0;\n while (i < len) {\n res += String.fromCharCode.apply(String, codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH));\n }\n return res;\n}", "import {\n alloc,\n concat,\n slice\n} from './byte-utils.js';\nconst defaultChunkSize = 256;\nexport class Bl {\n constructor(chunkSize = defaultChunkSize) {\n this.chunkSize = chunkSize;\n this.cursor = 0;\n this.maxCursor = -1;\n this.chunks = [];\n this._initReuseChunk = null;\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 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 const chunkPos = topChunk.length - (this.maxCursor - this.cursor) - 1;\n topChunk.set(bytes, chunkPos);\n } else {\n if (topChunk) {\n const chunkPos = topChunk.length - (this.maxCursor - this.cursor) - 1;\n if (chunkPos < topChunk.length) {\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 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 topChunk.set(bytes, 0);\n } else {\n this.chunks.push(bytes);\n this.maxCursor += bytes.length;\n }\n }\n this.cursor += bytes.length;\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 byts = this.cursor === chunk.length ? chunk : chunk.subarray(0, this.cursor);\n this._initReuseChunk = null;\n this.chunks = [];\n } else {\n byts = slice(chunk, 0, this.cursor);\n }\n } else {\n byts = concat(this.chunks, this.cursor);\n }\n if (reset) {\n this.reset();\n }\n return byts;\n }\n}", "const decodeErrPrefix = 'CBOR decode error:';\nconst encodeErrPrefix = 'CBOR encode error:';\nconst uintMinorPrefixBytes = [];\nuintMinorPrefixBytes[23] = 1;\nuintMinorPrefixBytes[24] = 2;\nuintMinorPrefixBytes[25] = 3;\nuintMinorPrefixBytes[26] = 5;\nuintMinorPrefixBytes[27] = 9;\nfunction assertEnoughData(data, pos, need) {\n if (data.length - pos < need) {\n throw new Error(`${ decodeErrPrefix } not enough data for type`);\n }\n}\nexport {\n decodeErrPrefix,\n encodeErrPrefix,\n uintMinorPrefixBytes,\n assertEnoughData\n};", "import {\n Token,\n Type\n} from './token.js';\nimport {\n decodeErrPrefix,\n assertEnoughData\n} from './common.js';\nexport const uintBoundaries = [\n 24,\n 256,\n 65536,\n 4294967296,\n BigInt('18446744073709551616')\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}\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}\nexport function readUint32(data, offset, options) {\n assertEnoughData(data, offset, 4);\n const value = data[offset] * 16777216 + (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}\nexport function readUint64(data, offset, options) {\n assertEnoughData(data, offset, 8);\n const hi = data[offset] * 16777216 + (data[offset + 1] << 16) + (data[offset + 2] << 8) + data[offset + 3];\n const lo = data[offset + 4] * 16777216 + (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}\nexport function decodeUint8(data, pos, _minor, options) {\n return new Token(Type.uint, readUint8(data, pos + 1, options), 2);\n}\nexport function decodeUint16(data, pos, _minor, options) {\n return new Token(Type.uint, readUint16(data, pos + 1, options), 3);\n}\nexport function decodeUint32(data, pos, _minor, options) {\n return new Token(Type.uint, readUint32(data, pos + 1, options), 5);\n}\nexport function decodeUint64(data, pos, _minor, options) {\n return new Token(Type.uint, readUint64(data, pos + 1, options), 9);\n}\nexport function encodeUint(buf, token) {\n return encodeUintValue(buf, 0, token.value);\n}\nexport function encodeUintValue(buf, major, uint) {\n if (uint < uintBoundaries[0]) {\n const nuint = Number(uint);\n buf.push([major | nuint]);\n } else if (uint < uintBoundaries[1]) {\n const nuint = Number(uint);\n buf.push([\n major | 24,\n nuint\n ]);\n } else if (uint < uintBoundaries[2]) {\n const nuint = Number(uint);\n buf.push([\n major | 25,\n nuint >>> 8,\n nuint & 255\n ]);\n } else if (uint < uintBoundaries[3]) {\n const nuint = Number(uint);\n buf.push([\n major | 26,\n nuint >>> 24 & 255,\n nuint >>> 16 & 255,\n nuint >>> 8 & 255,\n nuint & 255\n ]);\n } else {\n const buint = BigInt(uint);\n if (buint < uintBoundaries[4]) {\n const set = [\n major | 27,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0\n ];\n let lo = Number(buint & BigInt(4294967295));\n let hi = Number(buint >> BigInt(32) & BigInt(4294967295));\n set[8] = lo & 255;\n lo = lo >> 8;\n set[7] = lo & 255;\n lo = lo >> 8;\n set[6] = lo & 255;\n lo = lo >> 8;\n set[5] = lo & 255;\n set[4] = hi & 255;\n hi = hi >> 8;\n set[3] = hi & 255;\n hi = hi >> 8;\n set[2] = hi & 255;\n hi = hi >> 8;\n set[1] = hi & 255;\n buf.push(set);\n } else {\n throw new Error(`${ decodeErrPrefix } encountered BigInt larger than allowable range`);\n }\n }\n}\nencodeUint.encodedSize = function encodedSize(token) {\n return encodeUintValue.encodedSize(token.value);\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};\nencodeUint.compareTokens = function compareTokens(tok1, tok2) {\n return tok1.value < tok2.value ? -1 : tok1.value > tok2.value ? 1 : 0;\n};", "import {\n Token,\n Type\n} from './token.js';\nimport * as uint from './0uint.js';\nimport { decodeErrPrefix } from './common.js';\nexport function decodeNegint8(data, pos, _minor, options) {\n return new Token(Type.negint, -1 - uint.readUint8(data, pos + 1, options), 2);\n}\nexport function decodeNegint16(data, pos, _minor, options) {\n return new Token(Type.negint, -1 - uint.readUint16(data, pos + 1, options), 3);\n}\nexport function decodeNegint32(data, pos, _minor, options) {\n return new Token(Type.negint, -1 - uint.readUint32(data, pos + 1, options), 5);\n}\nconst neg1b = BigInt(-1);\nconst pos1b = BigInt(1);\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}\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}\nencodeNegint.encodedSize = function encodedSize(token) {\n const negint = token.value;\n const unsigned = typeof negint === 'bigint' ? negint * neg1b - pos1b : negint * -1 - 1;\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};\nencodeNegint.compareTokens = function compareTokens(tok1, tok2) {\n return tok1.value < tok2.value ? 1 : tok1.value > tok2.value ? -1 : 0;\n};", "import {\n Token,\n Type\n} from './token.js';\nimport {\n assertEnoughData,\n decodeErrPrefix\n} from './common.js';\nimport * as uint from './0uint.js';\nimport {\n compare,\n fromString,\n slice\n} from './byte-utils.js';\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}\nexport function decodeBytesCompact(data, pos, minor, _options) {\n return toToken(data, pos, 1, minor);\n}\nexport function decodeBytes8(data, pos, _minor, options) {\n return toToken(data, pos, 2, uint.readUint8(data, pos + 1, options));\n}\nexport function decodeBytes16(data, pos, _minor, options) {\n return toToken(data, pos, 3, uint.readUint16(data, pos + 1, options));\n}\nexport function decodeBytes32(data, pos, _minor, options) {\n return toToken(data, pos, 5, uint.readUint32(data, pos + 1, options));\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}\nfunction tokenBytes(token) {\n if (token.encodedBytes === undefined) {\n token.encodedBytes = token.type === Type.string ? fromString(token.value) : token.value;\n }\n return token.encodedBytes;\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}\nencodeBytes.encodedSize = function encodedSize(token) {\n const bytes = tokenBytes(token);\n return uint.encodeUintValue.encodedSize(bytes.length) + bytes.length;\n};\nencodeBytes.compareTokens = function compareTokens(tok1, tok2) {\n return compareBytes(tokenBytes(tok1), tokenBytes(tok2));\n};\nexport function compareBytes(b1, b2) {\n return b1.length < b2.length ? -1 : b1.length > b2.length ? 1 : compare(b1, b2);\n}", "import {\n Token,\n Type\n} from './token.js';\nimport {\n assertEnoughData,\n decodeErrPrefix\n} from './common.js';\nimport * as uint from './0uint.js';\nimport { encodeBytes } from './2bytes.js';\nimport {\n toString,\n slice\n} from './byte-utils.js';\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}\nexport function decodeStringCompact(data, pos, minor, options) {\n return toToken(data, pos, 1, minor, options);\n}\nexport function decodeString8(data, pos, _minor, options) {\n return toToken(data, pos, 2, uint.readUint8(data, pos + 1, options), options);\n}\nexport function decodeString16(data, pos, _minor, options) {\n return toToken(data, pos, 3, uint.readUint16(data, pos + 1, options), options);\n}\nexport function decodeString32(data, pos, _minor, options) {\n return toToken(data, pos, 5, uint.readUint32(data, pos + 1, options), options);\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}\nexport const encodeString = encodeBytes;", "import {\n Token,\n Type\n} from './token.js';\nimport * as uint from './0uint.js';\nimport { decodeErrPrefix } from './common.js';\nfunction toToken(_data, _pos, prefix, length) {\n return new Token(Type.array, length, prefix);\n}\nexport function decodeArrayCompact(data, pos, minor, _options) {\n return toToken(data, pos, 1, minor);\n}\nexport function decodeArray8(data, pos, _minor, options) {\n return toToken(data, pos, 2, uint.readUint8(data, pos + 1, options));\n}\nexport function decodeArray16(data, pos, _minor, options) {\n return toToken(data, pos, 3, uint.readUint16(data, pos + 1, options));\n}\nexport function decodeArray32(data, pos, _minor, options) {\n return toToken(data, pos, 5, uint.readUint32(data, pos + 1, options));\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}\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}\nexport function encodeArray(buf, token) {\n uint.encodeUintValue(buf, Type.array.majorEncoded, token.value);\n}\nencodeArray.compareTokens = uint.encodeUint.compareTokens;\nencodeArray.encodedSize = function encodedSize(token) {\n return uint.encodeUintValue.encodedSize(token.value);\n};", "import {\n Token,\n Type\n} from './token.js';\nimport * as uint from './0uint.js';\nimport { decodeErrPrefix } from './common.js';\nfunction toToken(_data, _pos, prefix, length) {\n return new Token(Type.map, length, prefix);\n}\nexport function decodeMapCompact(data, pos, minor, _options) {\n return toToken(data, pos, 1, minor);\n}\nexport function decodeMap8(data, pos, _minor, options) {\n return toToken(data, pos, 2, uint.readUint8(data, pos + 1, options));\n}\nexport function decodeMap16(data, pos, _minor, options) {\n return toToken(data, pos, 3, uint.readUint16(data, pos + 1, options));\n}\nexport function decodeMap32(data, pos, _minor, options) {\n return toToken(data, pos, 5, uint.readUint32(data, pos + 1, options));\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}\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}\nexport function encodeMap(buf, token) {\n uint.encodeUintValue(buf, Type.map.majorEncoded, token.value);\n}\nencodeMap.compareTokens = uint.encodeUint.compareTokens;\nencodeMap.encodedSize = function encodedSize(token) {\n return uint.encodeUintValue.encodedSize(token.value);\n};", "import {\n Token,\n Type\n} from './token.js';\nimport * as uint from './0uint.js';\nexport function decodeTagCompact(_data, _pos, minor, _options) {\n return new Token(Type.tag, minor, 1);\n}\nexport function decodeTag8(data, pos, _minor, options) {\n return new Token(Type.tag, uint.readUint8(data, pos + 1, options), 2);\n}\nexport function decodeTag16(data, pos, _minor, options) {\n return new Token(Type.tag, uint.readUint16(data, pos + 1, options), 3);\n}\nexport function decodeTag32(data, pos, _minor, options) {\n return new Token(Type.tag, uint.readUint32(data, pos + 1, options), 5);\n}\nexport function decodeTag64(data, pos, _minor, options) {\n return new Token(Type.tag, uint.readUint64(data, pos + 1, options), 9);\n}\nexport function encodeTag(buf, token) {\n uint.encodeUintValue(buf, Type.tag.majorEncoded, token.value);\n}\nencodeTag.compareTokens = uint.encodeUint.compareTokens;\nencodeTag.encodedSize = function encodedSize(token) {\n return uint.encodeUintValue.encodedSize(token.value);\n};", "import {\n Token,\n Type\n} from './token.js';\nimport { decodeErrPrefix } from './common.js';\nimport { encodeUint } from './0uint.js';\nconst MINOR_FALSE = 20;\nconst MINOR_TRUE = 21;\nconst MINOR_NULL = 22;\nconst MINOR_UNDEFINED = 23;\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}\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}\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}\nexport function decodeFloat16(data, pos, _minor, options) {\n return createToken(readFloat16(data, pos + 1), 3, options);\n}\nexport function decodeFloat32(data, pos, _minor, options) {\n return createToken(readFloat32(data, pos + 1), 5, options);\n}\nexport function decodeFloat64(data, pos, _minor, options) {\n return createToken(readFloat64(data, pos + 1), 9, options);\n}\nexport function encodeFloat(buf, token, options) {\n const float = token.value;\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] = 249;\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] = 250;\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] = 251;\n buf.push(ui8a.slice(0, 9));\n }\n }\n}\nencodeFloat.encodedSize = function encodedSize(token, options) {\n const float = token.value;\n if (float === false || float === true || float === null || float === undefined) {\n return 1;\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};\nconst buffer = new ArrayBuffer(9);\nconst dataView = new DataView(buffer, 1);\nconst ui8a = new Uint8Array(buffer, 0);\nfunction encodeFloat16(inp) {\n if (inp === Infinity) {\n dataView.setUint16(0, 31744, false);\n } else if (inp === -Infinity) {\n dataView.setUint16(0, 64512, false);\n } else if (Number.isNaN(inp)) {\n dataView.setUint16(0, 32256, false);\n } else {\n dataView.setFloat32(0, inp);\n const valu32 = dataView.getUint32(0);\n const exponent = (valu32 & 2139095040) >> 23;\n const mantissa = valu32 & 8388607;\n if (exponent === 255) {\n dataView.setUint16(0, 31744, false);\n } else if (exponent === 0) {\n dataView.setUint16(0, (inp & 2147483648) >> 16 | mantissa >> 13, false);\n } else {\n const logicalExponent = exponent - 127;\n if (logicalExponent < -24) {\n dataView.setUint16(0, 0);\n } else if (logicalExponent < -14) {\n dataView.setUint16(0, (valu32 & 2147483648) >> 16 | 1 << 24 + logicalExponent, false);\n } else {\n dataView.setUint16(0, (valu32 & 2147483648) >> 16 | logicalExponent + 15 << 10 | mantissa >> 13, false);\n }\n }\n }\n}\nfunction readFloat16(ui8a, pos) {\n if (ui8a.length - pos < 2) {\n throw new Error(`${ decodeErrPrefix } not enough data for float16`);\n }\n const half = (ui8a[pos] << 8) + ui8a[pos + 1];\n if (half === 31744) {\n return Infinity;\n }\n if (half === 64512) {\n return -Infinity;\n }\n if (half === 32256) {\n return NaN;\n }\n const exp = half >> 10 & 31;\n const mant = half & 1023;\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 } else {\n val = mant === 0 ? Infinity : NaN;\n }\n return half & 32768 ? -val : val;\n}\nfunction encodeFloat32(inp) {\n dataView.setFloat32(0, inp, false);\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}\nfunction encodeFloat64(inp) {\n dataView.setFloat64(0, inp, false);\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}\nencodeFloat.compareTokens = encodeUint.compareTokens;", "import {\n Token,\n Type\n} 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';\nfunction invalidMinor(data, pos, minor) {\n throw new Error(`${ decodeErrPrefix } encountered invalid minor (${ minor }) for major ${ data[pos] >>> 5 }`);\n}\nfunction errorer(msg) {\n return () => {\n throw new Error(`${ decodeErrPrefix } ${ msg }`);\n };\n}\nexport const jump = [];\nfor (let i = 0; i <= 23; i++) {\n jump[i] = invalidMinor;\n}\njump[24] = uint.decodeUint8;\njump[25] = uint.decodeUint16;\njump[26] = uint.decodeUint32;\njump[27] = uint.decodeUint64;\njump[28] = invalidMinor;\njump[29] = invalidMinor;\njump[30] = invalidMinor;\njump[31] = invalidMinor;\nfor (let i = 32; i <= 55; i++) {\n jump[i] = invalidMinor;\n}\njump[56] = negint.decodeNegint8;\njump[57] = negint.decodeNegint16;\njump[58] = negint.decodeNegint32;\njump[59] = negint.decodeNegint64;\njump[60] = invalidMinor;\njump[61] = invalidMinor;\njump[62] = invalidMinor;\njump[63] = invalidMinor;\nfor (let i = 64; i <= 87; i++) {\n jump[i] = bytes.decodeBytesCompact;\n}\njump[88] = bytes.decodeBytes8;\njump[89] = bytes.decodeBytes16;\njump[90] = bytes.decodeBytes32;\njump[91] = bytes.decodeBytes64;\njump[92] = invalidMinor;\njump[93] = invalidMinor;\njump[94] = invalidMinor;\njump[95] = errorer('indefinite length bytes/strings are not supported');\nfor (let i = 96; i <= 119; i++) {\n jump[i] = string.decodeStringCompact;\n}\njump[120] = string.decodeString8;\njump[121] = string.decodeString16;\njump[122] = string.decodeString32;\njump[123] = string.decodeString64;\njump[124] = invalidMinor;\njump[125] = invalidMinor;\njump[126] = invalidMinor;\njump[127] = errorer('indefinite length bytes/strings are not supported');\nfor (let i = 128; i <= 151; i++) {\n jump[i] = array.decodeArrayCompact;\n}\njump[152] = array.decodeArray8;\njump[153] = array.decodeArray16;\njump[154] = array.decodeArray32;\njump[155] = array.decodeArray64;\njump[156] = invalidMinor;\njump[157] = invalidMinor;\njump[158] = invalidMinor;\njump[159] = array.decodeArrayIndefinite;\nfor (let i = 160; i <= 183; i++) {\n jump[i] = map.decodeMapCompact;\n}\njump[184] = map.decodeMap8;\njump[185] = map.decodeMap16;\njump[186] = map.decodeMap32;\njump[187] = map.decodeMap64;\njump[188] = invalidMinor;\njump[189] = invalidMinor;\njump[190] = invalidMinor;\njump[191] = map.decodeMapIndefinite;\nfor (let i = 192; i <= 215; i++) {\n jump[i] = tag.decodeTagCompact;\n}\njump[216] = tag.decodeTag8;\njump[217] = tag.decodeTag16;\njump[218] = tag.decodeTag32;\njump[219] = tag.decodeTag64;\njump[220] = invalidMinor;\njump[221] = invalidMinor;\njump[222] = invalidMinor;\njump[223] = invalidMinor;\nfor (let i = 224; i <= 243; i++) {\n jump[i] = errorer('simple values are not supported');\n}\njump[244] = invalidMinor;\njump[245] = invalidMinor;\njump[246] = invalidMinor;\njump[247] = float.decodeUndefined;\njump[248] = errorer('simple values are not supported');\njump[249] = float.decodeFloat16;\njump[250] = float.decodeFloat32;\njump[251] = float.decodeFloat64;\njump[252] = invalidMinor;\njump[253] = invalidMinor;\njump[254] = invalidMinor;\njump[255] = float.decodeBreak;\nexport const quick = [];\nfor (let i = 0; i < 24; i++) {\n quick[i] = new Token(Type.uint, i, 1);\n}\nfor (let i = -1; i >= -24; i--) {\n quick[31 - i] = new Token(Type.negint, i, 1);\n}\nquick[64] = new Token(Type.bytes, new Uint8Array(0), 1);\nquick[96] = new Token(Type.string, '', 1);\nquick[128] = new Token(Type.array, 0, 1);\nquick[160] = new Token(Type.map, 0, 1);\nquick[244] = new Token(Type.false, false, 1);\nquick[245] = new Token(Type.true, true, 1);\nquick[246] = new Token(Type.null, null, 1);\nexport function quickEncodeToken(token) {\n switch (token.type) {\n case Type.false:\n return fromArray([244]);\n case Type.true:\n return fromArray([245]);\n case Type.null:\n return fromArray([246]);\n case Type.bytes:\n if (!token.value.length) {\n return fromArray([64]);\n }\n return;\n case Type.string:\n if (token.value === '') {\n return fromArray([96]);\n }\n return;\n case Type.array:\n if (token.value === 0) {\n return fromArray([128]);\n }\n return;\n case Type.map:\n if (token.value === 0) {\n return fromArray([160]);\n }\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}", "import { is } from './is.js';\nimport {\n Token,\n Type\n} from './token.js';\nimport { Bl } from './bl.js';\nimport { encodeErrPrefix } from './common.js';\nimport { quickEncodeToken } from './jump.js';\nimport { asU8A } from './byte-utils.js';\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';\nconst defaultEncodeOptions = {\n float64: false,\n mapSorter,\n quickEncodeToken\n};\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}\nconst cborEncoders = makeCborEncoders();\nconst buf = new Bl();\nclass Ref {\n constructor(obj, parent) {\n this.obj = obj;\n this.parent = parent;\n }\n includes(obj) {\n let p = this;\n do {\n if (p.obj === obj) {\n return true;\n }\n } while (p = p.parent);\n return false;\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}\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};\nconst typeEncoders = {\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 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 Uint8Array(obj, _typ, _options, _refStack) {\n return new Token(Type.bytes, obj);\n },\n string(obj, _typ, _options, _refStack) {\n return new Token(Type.string, obj);\n },\n boolean(obj, _typ, _options, _refStack) {\n return obj ? simpleTokens.true : simpleTokens.false;\n },\n null(_obj, _typ, _options, _refStack) {\n return simpleTokens.null;\n },\n undefined(_obj, _typ, _options, _refStack) {\n return simpleTokens.undefined;\n },\n ArrayBuffer(obj, _typ, _options, _refStack) {\n return new Token(Type.bytes, new Uint8Array(obj));\n },\n DataView(obj, _typ, _options, _refStack) {\n return new Token(Type.bytes, new Uint8Array(obj.buffer, obj.byteOffset, obj.byteLength));\n },\n Array(obj, _typ, options, refStack) {\n if (!obj.length) {\n if (options.addBreakTokens === true) {\n return [\n simpleTokens.emptyArray,\n new Token(Type.break)\n ];\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 [\n new Token(Type.array, obj.length),\n entries,\n new Token(Type.break)\n ];\n }\n return [\n new Token(Type.array, obj.length),\n entries\n ];\n },\n Object(obj, typ, options, refStack) {\n const isMap = typ !== 'Object';\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 [\n simpleTokens.emptyMap,\n new Token(Type.break)\n ];\n }\n return simpleTokens.emptyMap;\n }\n refStack = Ref.createCheck(refStack, obj);\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 [\n new Token(Type.map, length),\n entries,\n new Token(Type.break)\n ];\n }\n return [\n new Token(Type.map, length),\n 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}\nfunction objectToTokens(obj, options = {}, refStack) {\n const typ = is(obj);\n const customTypeEncoder = options && options.typeEncoders && 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}\nfunction sortMapEntries(entries, options) {\n if (options.mapSorter) {\n entries.sort(options.mapSorter);\n }\n}\nfunction mapSorter(e1, e2) {\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 if (keyToken1.type !== keyToken2.type) {\n return keyToken1.type.compare(keyToken2.type);\n }\n const major = keyToken1.type.major;\n const tcmp = cborEncoders[major].compareTokens(keyToken1, keyToken2);\n if (tcmp === 0) {\n console.warn('WARNING: complex key types used, CBOR key sorting guarantees are gone');\n }\n return tcmp;\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}\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 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}\nfunction encode(data, options) {\n options = Object.assign({}, defaultEncodeOptions, options);\n return encodeCustom(data, cborEncoders, options);\n}\nexport {\n objectToTokens,\n encode,\n encodeCustom,\n Ref\n};", "import { decodeErrPrefix } from './common.js';\nimport { Type } from './token.js';\nimport {\n jump,\n quick\n} from './jump.js';\nconst defaultDecodeOptions = {\n strict: false,\n allowIndefinite: true,\n allowUndefined: true,\n allowBigInt: true\n};\nclass Tokeniser {\n constructor(data, options = {}) {\n this.pos = 0;\n this.data = data;\n this.options = options;\n }\n done() {\n return this.pos >= this.data.length;\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 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 this.pos += token.encodedLength;\n return token;\n }\n}\nconst DONE = Symbol.for('DONE');\nconst BREAK = Symbol.for('BREAK');\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 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}\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 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 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 m.set(key, value);\n } else {\n obj[key] = value;\n }\n }\n return useMaps ? m : obj;\n}\nfunction tokensToObject(tokeniser, options) {\n if (tokeniser.done()) {\n return DONE;\n }\n const token = tokeniser.next();\n if (token.type === Type.break) {\n return BREAK;\n }\n if (token.type.terminal) {\n return token.value;\n }\n if (token.type === Type.array) {\n return tokenToArray(token, tokeniser, options);\n }\n if (token.type === Type.map) {\n return tokenToMap(token, tokeniser, options);\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 throw new Error('unsupported');\n}\nfunction decode(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 if (!tokeniser.done()) {\n throw new Error(`${ decodeErrPrefix } too many terminals, data makes no sense`);\n }\n return decoded;\n}\nexport {\n Tokeniser,\n tokensToObject,\n decode\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", "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 { 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", "// 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", "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 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", "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 * as varint from './varint.js'\nimport * as Digest from './hashes/digest.js'\nimport { base58btc } from './bases/base58.js'\nimport { base32 } from './bases/base32.js'\nimport { coerce } from './bytes.js'\n// Linter can see that API is used in types.\n// eslint-disable-next-line\nimport * 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\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 */\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 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", "/* eslint-disable jsdoc/check-indentation */\n\n/** Auto-generated with ipld-schema-validator@0.0.0-dev at Thu Jun 17 2021 from IPLD Schema:\n *\n * type CarHeader struct {\n * version Int\n * roots optional [&Any]\n * # roots is _not_ optional for CarV1 but we defer that check within code to\n * # gracefully handle the >V1 case where it's just {version:X}\n * }\n *\n */\n\nconst Kinds = {\n Null: /**\n * @param {any} obj\n * @returns {boolean}\n */ (/** @type {any} */ obj) => obj === null,\n Int: /**\n * @param {any} obj\n * @returns {boolean}\n */ (/** @type {any} */ obj) => Number.isInteger(obj),\n Float: /**\n * @param {any} obj\n * @returns {boolean}\n */ (/** @type {any} */ obj) => typeof obj === 'number' && Number.isFinite(obj),\n String: /**\n * @param {any} obj\n * @returns {boolean}\n */ (/** @type {any} */ obj) => typeof obj === 'string',\n Bool: /**\n * @param {any} obj\n * @returns {boolean}\n */ (/** @type {any} */ obj) => typeof obj === 'boolean',\n Bytes: /**\n * @param {any} obj\n * @returns {boolean}\n */ (/** @type {any} */ obj) => obj instanceof Uint8Array,\n Link: /**\n * @param {any} obj\n * @returns {boolean}\n */ (/** @type {any} */ obj) => !Kinds.Null(obj) && typeof obj === 'object' && obj.asCID === obj,\n List: /**\n * @param {any} obj\n * @returns {boolean}\n */ (/** @type {any} */ obj) => Array.isArray(obj),\n Map: /**\n * @param {any} obj\n * @returns {boolean}\n */ (/** @type {any} */ obj) => !Kinds.Null(obj) && typeof obj === 'object' && obj.asCID !== obj && !Kinds.List(obj) && !Kinds.Bytes(obj)\n}\n/** @type {{ [k in string]: (obj:any)=>boolean}} */\nconst Types = {\n Int: Kinds.Int,\n 'CarHeader > version': /**\n * @param {any} obj\n * @returns {boolean}\n */ (/** @type {any} */ obj) => Types.Int(obj),\n 'CarHeader > roots (anon) > valueType (anon)': Kinds.Link,\n 'CarHeader > roots (anon)': /**\n * @param {any} obj\n * @returns {boolean}\n */ (/** @type {any} */ obj) => Kinds.List(obj) && Array.prototype.every.call(obj, Types['CarHeader > roots (anon) > valueType (anon)']),\n 'CarHeader > roots': /**\n * @param {any} obj\n * @returns {boolean}\n */ (/** @type {any} */ obj) => Types['CarHeader > roots (anon)'](obj),\n CarHeader: /**\n * @param {any} obj\n * @returns {boolean}\n */ (/** @type {any} */ obj) => { const keys = obj && Object.keys(obj); return Kinds.Map(obj) && ['version'].every((k) => keys.includes(k)) && Object.entries(obj).every(([name, value]) => Types['CarHeader > ' + name] && Types['CarHeader > ' + name](value)) }\n}\n\nexport const CarHeader = Types.CarHeader\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 /* c8 ignore next 2 */\n // Node.js 12 c8 bug\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 /* c8 ignore next 2 */\n // Node.js 12 c8 bug\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", "import { CID } from 'multiformats/cid'\nimport * as Digest from 'multiformats/hashes/digest'\nimport { decode as decodeDagCbor } from '@ipld/dag-cbor'\nimport { CarHeader as headerValidator } from './header-validator.js'\nimport { CIDV0_BYTES, decodeV2Header, decodeVarint, getMultihashLength, V2_HEADER_LENGTH } from './decoder-common.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 (!headerValidator(block)) {\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 // we've made 'roots' optional in the schema so we can do the version check\n // before rejecting the block as invalid if there is no version\n const hasRoots = Array.isArray(block.roots)\n if ((block.version === 1 && !hasRoots) || (block.version === 2 && hasRoots)) {\n throw new Error('Invalid CAR header format')\n }\n if (block.version === 1) {\n return block\n }\n // version 2\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 /* c8 ignore next 2 */\n // Node.js 12 c8 bug\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 /* c8 ignore next 2 */\n // Node.js 12 c8 bug\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 /* c8 ignore next 2 */\n // Node.js 12 c8 bug\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 /* c8 ignore next 2 */\n // Node.js 12 c8 bug\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 /* c8 ignore next 2 */\n // Node.js 12 c8 bug\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 /* c8 ignore next 2 */\n // Node.js 12 c8 bug\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 /* c8 ignore next 2 */\n return out\n // Node.js 12 c8 bug\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 /* c8 ignore next 2 */\n // Node.js 12 c8 bug\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 /* c8 ignore next 2 */\n // Node.js 12 c8 bug\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 /* c8 ignore next 2 */\n // Node.js 12 c8 bug\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 /* c8 ignore next 2 */\n // Node.js 12 c8 bug\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 /* c8 ignore next 2 */\n // Node.js 12 c8 bug\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 /* c8 ignore next 2 */\n // Node.js 12 c8 bug\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 /* c8 ignore next 2 */\n // Node.js 12 c8 bug\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 /* c8 ignore next 2 */\n // Node.js 12 c8 bug\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 /* c8 ignore next 2 */\n // Node.js 12 c8 bug\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 /* c8 ignore next 2 */\n // Node.js 12 c8 bug\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 /* c8 ignore next 2 */\n // Node.js 12 c8 bug\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 /* c8 ignore next 2 */\n // Node.js 12 c8 bug\n}\n\nexport const __browser = true\n", "import fs from 'fs'\nimport { CarBufferReader as BrowserCarBufferReader } from './buffer-reader-browser.js'\n\n/**\n * @typedef {import('./api').Block} Block\n * @typedef {import('./api').BlockIndex} BlockIndex\n * @typedef {import('./api').CarBufferReader} ICarBufferReader\n */\n\nconst fsread = fs.readSync\n\n/**\n * @class\n * @implements {ICarBufferReader}\n */\nexport class CarBufferReader extends BrowserCarBufferReader {\n /**\n * Reads a block directly from a file descriptor for an open CAR file. This\n * function is **only available in Node.js** and not a browser environment.\n *\n * This function can be used in connection with {@link CarIndexer} which emits\n * the `BlockIndex` objects that are required by this function.\n *\n * The user is responsible for opening and closing the file used in this call.\n *\n * @static\n * @memberof CarBufferReader\n * @param {number} fd - A file descriptor from the\n * Node.js `fs` module. An integer, from `fs.open()`.\n * @param {BlockIndex} blockIndex - An index pointing to the location of the\n * Block required. This `BlockIndex` should take the form:\n * `{cid:CID, blockLength:number, blockOffset:number}`.\n * @returns {Block} A `{ cid:CID, bytes:Uint8Array }` pair.\n */\n static readRaw (fd, blockIndex) {\n const { cid, blockLength, blockOffset } = blockIndex\n const bytes = new Uint8Array(blockLength)\n let read\n if (typeof fd === 'number') {\n read = fsread(fd, bytes, 0, blockLength, blockOffset)\n } else {\n throw new TypeError('Bad fd')\n }\n if (read !== blockLength) {\n throw new Error(`Failed to read entire block (${read} instead of ${blockLength})`)\n }\n return { cid, bytes }\n /* c8 ignore next 2 */\n // Node.js 12 c8 bug\n }\n}\n\nexport const __browser = false\n", "import {\n asyncIterableReader,\n bytesReader,\n createDecoder\n} from './decoder.js'\n\n/**\n * @typedef {import('multiformats').CID} CID\n * @typedef {import('./api').Block} Block\n * @typedef {import('./api').RootsReader} RootsReader\n * @typedef {import('./api').BlockIndex} BlockIndex\n * @typedef {import('./coding').BytesReader} BytesReader\n */\n\n/**\n * Provides an iterator over all of the `Block`s in a CAR, returning their CIDs\n * and byte-location information. Implements an `AsyncIterable<BlockIndex>`.\n * Where a `BlockIndex` is a\n * `{ cid:CID, length:number, offset:number, blockLength:number, blockOffset:number }`.\n *\n * As an implementer of `AsyncIterable`, this class can be used directly in a\n * `for await (const blockIndex of iterator) {}` loop. Where the `iterator` is\n * constructed using {@link CarIndexer.fromBytes} or\n * {@link CarIndexer.fromIterable}.\n *\n * An iteration can only be performce _once_ per instantiation.\n *\n * `CarIndexer` also implements the `RootsReader` interface and provides\n * the {@link CarIndexer.getRoots `getRoots()`} method.\n *\n * Load this class with either\n * `import { CarIndexer } from '@ipld/car/indexer'`\n * (`const { CarIndexer } = require('@ipld/car/indexer')`). Or\n * `import { CarIndexer } from '@ipld/car'`\n * (`const { CarIndexer } = require('@ipld/car')`). The former will likely\n * result in smaller bundle sizes where this is important.\n *\n * @name CarIndexer\n * @class\n * @implements {RootsReader}\n * @implements {AsyncIterable<BlockIndex>}\n * @property {number} version The version number of the CAR referenced by this\n * reader (should be `1`).\n */\nexport class CarIndexer {\n /**\n * @param {number} version\n * @param {CID[]} roots\n * @param {AsyncGenerator<BlockIndex>} iterator\n */\n constructor (version, roots, iterator) {\n this._version = version\n this._roots = roots\n this._iterator = iterator\n }\n\n get version () {\n return this._version\n }\n\n /**\n * Get the list of roots defined by the CAR referenced by this indexer. May be\n * zero or more `CID`s.\n *\n * @function\n * @memberof CarIndexer\n * @instance\n * @async\n * @returns {Promise<CID[]>}\n */\n async getRoots () {\n return this._roots\n /* c8 ignore next 2 */\n // Node.js 12 c8 bug\n }\n\n /**\n * @returns {AsyncIterator<BlockIndex>}\n */\n [Symbol.asyncIterator] () {\n return this._iterator\n }\n\n /**\n * Instantiate a {@link CarIndexer} from a `Uint8Array` blob. Only the header\n * is decoded initially, the remainder is processed and emitted via the\n * iterator as it is consumed.\n *\n * @async\n * @static\n * @memberof CarIndexer\n * @param {Uint8Array} bytes\n * @returns {Promise<CarIndexer>}\n */\n static async fromBytes (bytes) {\n if (!(bytes instanceof Uint8Array)) {\n throw new TypeError('fromBytes() requires a Uint8Array')\n }\n return decodeIndexerComplete(bytesReader(bytes))\n /* c8 ignore next 2 */\n // Node.js 12 c8 bug\n }\n\n /**\n * Instantiate a {@link CarIndexer} from a `AsyncIterable<Uint8Array>`,\n * such as a [modern Node.js stream](https://nodejs.org/api/stream.html#stream_streams_compatibility_with_async_generators_and_async_iterators).\n * is decoded initially, the remainder is processed and emitted via the\n * iterator as it is consumed.\n *\n * @async\n * @static\n * @memberof CarIndexer\n * @param {AsyncIterable<Uint8Array>} asyncIterable\n * @returns {Promise<CarIndexer>}\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 decodeIndexerComplete(asyncIterableReader(asyncIterable))\n /* c8 ignore next 2 */\n // Node.js 12 c8 bug\n }\n}\n\n/**\n * @private\n * @param {BytesReader} reader\n * @returns {Promise<CarIndexer>}\n */\nasync function decodeIndexerComplete (reader) {\n const decoder = createDecoder(reader)\n const { version, roots } = await decoder.header()\n\n return new CarIndexer(version, roots, decoder.blocksIndex())\n /* c8 ignore next 2 */\n // Node.js 12 c8 bug\n}\n", "import {\n asyncIterableReader,\n bytesReader,\n createDecoder\n} from './decoder.js'\n\n/**\n * @typedef {import('multiformats').CID} CID\n * @typedef {import('./api').Block} Block\n * @typedef {import('./api').RootsReader} RootsReader\n * @typedef {import('./coding').BytesReader} BytesReader\n */\n\n/**\n * @class\n * @implements {RootsReader}\n * @property {number} version The version number of the CAR referenced by this reader (should be `1`).\n */\nexport class CarIteratorBase {\n /**\n * @param {number} version\n * @param {CID[]} roots\n * @param {AsyncIterable<Block>|void} iterable\n */\n constructor (version, roots, iterable) {\n this._version = version\n this._roots = roots\n this._iterable = iterable\n this._decoded = false\n }\n\n get version () {\n return this._version\n }\n\n /**\n * @returns {Promise<CID[]>}\n */\n async getRoots () {\n return this._roots\n /* c8 ignore next 2 */\n // Node.js 12 c8 bug\n }\n}\n\n/**\n * Provides an iterator over all of the `Block`s in a CAR. Implements a\n * `BlockIterator` interface, or `AsyncIterable<Block>`. Where a `Block` is\n * a `{ cid:CID, bytes:Uint8Array }` pair.\n *\n * As an implementer of `AsyncIterable`, this class can be used directly in a\n * `for await (const block of iterator) {}` loop. Where the `iterator` is\n * constructed using {@link CarBlockiterator.fromBytes} or\n * {@link CarBlockiterator.fromIterable}.\n *\n * An iteration can only be performce _once_ per instantiation.\n *\n * `CarBlockIterator` also implements the `RootsReader` interface and provides\n * the {@link CarBlockiterator.getRoots `getRoots()`} method.\n *\n * Load this class with either\n * `import { CarBlockIterator } from '@ipld/car/iterator'`\n * (`const { CarBlockIterator } = require('@ipld/car/iterator')`). Or\n * `import { CarBlockIterator } from '@ipld/car'`\n * (`const { CarBlockIterator } = require('@ipld/car')`).\n *\n * @name CarBlockIterator\n * @class\n * @implements {RootsReader}\n * @implements {AsyncIterable<Block>}\n * @property {number} version The version number of the CAR referenced by this\n * iterator (should be `1`).\n */\nexport class CarBlockIterator extends CarIteratorBase {\n // inherited method\n /**\n * Get the list of roots defined by the CAR referenced by this iterator. May be\n * zero or more `CID`s.\n *\n * @function getRoots\n * @memberof CarBlockIterator\n * @instance\n * @async\n * @returns {Promise<CID[]>}\n */\n\n /**\n * @returns {AsyncIterator<Block>}\n */\n [Symbol.asyncIterator] () {\n if (this._decoded) {\n throw new Error('Cannot decode more than once')\n }\n /* c8 ignore next 3 */\n if (!this._iterable) {\n throw new Error('Block iterable not found')\n }\n this._decoded = true\n return this._iterable[Symbol.asyncIterator]()\n }\n\n /**\n * Instantiate a {@link CarBlockIterator} from a `Uint8Array` blob. Rather\n * than decoding the entire byte array prior to returning the iterator, as in\n * {@link CarReader.fromBytes}, only the header is decoded and the remainder\n * of the CAR is parsed as the `Block`s as yielded.\n *\n * @async\n * @static\n * @memberof CarBlockIterator\n * @param {Uint8Array} bytes\n * @returns {Promise<CarBlockIterator>}\n */\n static async fromBytes (bytes) {\n const { version, roots, iterator } = await fromBytes(bytes)\n return new CarBlockIterator(version, roots, iterator)\n /* c8 ignore next 2 */\n // Node.js 12 c8 bug\n }\n\n /**\n * Instantiate a {@link CarBlockIterator} from a `AsyncIterable<Uint8Array>`,\n * such as a [modern Node.js stream](https://nodejs.org/api/stream.html#stream_streams_compatibility_with_async_generators_and_async_iterators).\n * Rather than decoding the entire byte array prior to returning the iterator,\n * as in {@link CarReader.fromIterable}, only the header is decoded and the\n * remainder of the CAR is parsed as the `Block`s as yielded.\n *\n * @async\n * @static\n * @param {AsyncIterable<Uint8Array>} asyncIterable\n * @returns {Promise<CarBlockIterator>}\n */\n static async fromIterable (asyncIterable) {\n const { version, roots, iterator } = await fromIterable(asyncIterable)\n return new CarBlockIterator(version, roots, iterator)\n /* c8 ignore next 2 */\n // Node.js 12 c8 bug\n }\n}\n\n/**\n * Provides an iterator over all of the `CID`s in a CAR. Implements a\n * `CIDIterator` interface, or `AsyncIterable<CID>`. Similar to\n * {@link CarBlockIterator} but only yields the CIDs in the CAR.\n *\n * As an implementer of `AsyncIterable`, this class can be used directly in a\n * `for await (const cid of iterator) {}` loop. Where the `iterator` is\n * constructed using {@link CarCIDiterator.fromBytes} or\n * {@link CarCIDiterator.fromIterable}.\n *\n * An iteration can only be performce _once_ per instantiation.\n *\n * `CarCIDIterator` also implements the `RootsReader` interface and provides\n * the {@link CarCIDiterator.getRoots `getRoots()`} method.\n *\n * Load this class with either\n * `import { CarCIDIterator } from '@ipld/car/iterator'`\n * (`const { CarCIDIterator } = require('@ipld/car/iterator')`). Or\n * `import { CarCIDIterator } from '@ipld/car'`\n * (`const { CarCIDIterator } = require('@ipld/car')`).\n *\n * @name CarCIDIterator\n * @class\n * @implements {RootsReader}\n * @implements {AsyncIterable<CID>}\n * @property {number} version The version number of the CAR referenced by this\n * iterator (should be `1`).\n */\nexport class CarCIDIterator extends CarIteratorBase {\n // inherited method\n /**\n * Get the list of roots defined by the CAR referenced by this iterator. May be\n * zero or more `CID`s.\n *\n * @function getRoots\n * @memberof CarCIDIterator\n * @instance\n * @async\n * @returns {Promise<CID[]>}\n */\n\n /**\n * @returns {AsyncIterator<CID>}\n */\n [Symbol.asyncIterator] () {\n if (this._decoded) {\n throw new Error('Cannot decode more than once')\n }\n /* c8 ignore next 3 */\n if (!this._iterable) {\n throw new Error('Block iterable not found')\n }\n this._decoded = true\n const iterable = this._iterable[Symbol.asyncIterator]()\n return {\n async next () {\n const next = await iterable.next()\n if (next.done) {\n return next\n }\n return { done: false, value: next.value.cid }\n /* c8 ignore next 2 */\n // Node.js 12 c8 bug\n }\n }\n }\n\n /**\n * Instantiate a {@link CarCIDIterator} from a `Uint8Array` blob. Rather\n * than decoding the entire byte array prior to returning the iterator, as in\n * {@link CarReader.fromBytes}, only the header is decoded and the remainder\n * of the CAR is parsed as the `CID`s as yielded.\n *\n * @async\n * @static\n * @memberof CarCIDIterator\n * @param {Uint8Array} bytes\n * @returns {Promise<CarCIDIterator>}\n */\n static async fromBytes (bytes) {\n const { version, roots, iterator } = await fromBytes(bytes)\n return new CarCIDIterator(version, roots, iterator)\n /* c8 ignore next 2 */\n // Node.js 12 c8 bug\n }\n\n /**\n * Instantiate a {@link CarCIDIterator} from a `AsyncIterable<Uint8Array>`,\n * such as a [modern Node.js stream](https://nodejs.org/api/stream.html#stream_streams_compatibility_with_async_generators_and_async_iterators).\n * Rather than decoding the entire byte array prior to returning the iterator,\n * as in {@link CarReader.fromIterable}, only the header is decoded and the\n * remainder of the CAR is parsed as the `CID`s as yielded.\n *\n * @async\n * @static\n * @memberof CarCIDIterator\n * @param {AsyncIterable<Uint8Array>} asyncIterable\n * @returns {Promise<CarCIDIterator>}\n */\n static async fromIterable (asyncIterable) {\n const { version, roots, iterator } = await fromIterable(asyncIterable)\n return new CarCIDIterator(version, roots, iterator)\n /* c8 ignore next 2 */\n // Node.js 12 c8 bug\n }\n}\n\n/**\n * @param {Uint8Array} bytes\n * @returns {Promise<{ version:number, roots:CID[], iterator:AsyncIterable<Block>}>}\n */\nasync function fromBytes (bytes) {\n if (!(bytes instanceof Uint8Array)) {\n throw new TypeError('fromBytes() requires a Uint8Array')\n }\n return decodeIterator(bytesReader(bytes))\n /* c8 ignore next 2 */\n // Node.js 12 c8 bug\n}\n\n/**\n * @param {AsyncIterable<Uint8Array>} asyncIterable\n * @returns {Promise<{ version:number, roots:CID[], iterator:AsyncIterable<Block>}>}\n */\nasync function fromIterable (asyncIterable) {\n if (!asyncIterable || !(typeof asyncIterable[Symbol.asyncIterator] === 'function')) {\n throw new TypeError('fromIterable() requires an async iterable')\n }\n return decodeIterator(asyncIterableReader(asyncIterable))\n /* c8 ignore next 2 */\n // Node.js 12 c8 bug\n}\n\n/**\n * @private\n * @param {BytesReader} reader\n * @returns {Promise<{ version:number, roots:CID[], iterator:AsyncIterable<Block>}>}\n */\nasync function decodeIterator (reader) {\n const decoder = createDecoder(reader)\n const { version, roots } = await decoder.header()\n return { version, roots, iterator: decoder.blocks() }\n /* c8 ignore next 2 */\n // Node.js 12 c8 bug\n}\n", "import fs from 'fs'\nimport { promisify } from 'util'\nimport { CarWriter as BrowserCarWriter } from './writer-browser.js'\nimport { readHeader, chunkReader } from './decoder.js'\nimport { createHeader } from './encoder.js'\n\nconst fsread = promisify(fs.read)\nconst fswrite = promisify(fs.write)\n\n/**\n * @typedef {import('multiformats/cid').CID} CID\n * @typedef {import('./api').BlockWriter} BlockWriter\n */\n\n/**\n * @class\n * @implements {BlockWriter}\n */\nexport class CarWriter extends BrowserCarWriter {\n /**\n * Update the list of roots in the header of an existing CAR file. The first\n * argument must be a file descriptor for CAR file that is open in read and\n * write mode (not append), e.g. `fs.open` or `fs.promises.open` with `'r+'`\n * mode.\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 * This function is **only available in Node.js** and not a browser\n * environment.\n *\n * @async\n * @static\n * @memberof CarWriter\n * @param {fs.promises.FileHandle | number} fd - A file descriptor from the\n * Node.js `fs` module. Either an integer, from `fs.open()` or a `FileHandle`\n * from `fs.promises.open()`.\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<void>}\n */\n static async updateRootsInFile (fd, roots) {\n const chunkSize = 256\n /** @type {Uint8Array} */\n let bytes\n let offset = 0\n\n /** @type {() => Promise<number>} */\n let readChunk\n if (typeof fd === 'number') {\n readChunk = async () => (await fsread(fd, bytes, 0, chunkSize, offset)).bytesRead\n } else if (typeof fd === 'object' && typeof fd.read === 'function') { // FileDescriptor\n readChunk = async () => (await fd.read(bytes, 0, chunkSize, offset)).bytesRead\n } else {\n throw new TypeError('Bad fd')\n }\n const fdReader = chunkReader(async () => {\n bytes = new Uint8Array(chunkSize) // need a new chunk each time, can't reuse old\n const read = await readChunk()\n offset += read\n // TODO: test header > 256 bytes\n // also Node.js 12 c8 bug\n /* c8 ignore next 2 */\n return read < chunkSize ? bytes.subarray(0, read) : bytes\n })\n\n await readHeader(fdReader)\n const newHeader = createHeader(roots)\n if (fdReader.pos !== newHeader.length) {\n throw new Error(`updateRoots() can only overwrite a header of the same length (old header is ${fdReader.pos} bytes, new header is ${newHeader.length} bytes)`)\n }\n if (typeof fd === 'number') {\n await fswrite(fd, newHeader, 0, newHeader.length, 0)\n } else if (typeof fd === 'object' && typeof fd.read === 'function') { // FileDescriptor\n await fd.write(newHeader, 0, newHeader.length, 0)\n }\n }\n}\n\nexport const __browser = false\n", "import varint from 'varint'\nimport { encode as dagCborEncode } from '@ipld/dag-cbor'\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\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: 1, 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 /* c8 ignore next 2 */\n // Node.js 12 c8 bug\n }\n }\n}\n\nexport { createEncoder }\n", "import { CID } from 'multiformats/cid'\nimport { createEncoder, createHeader } from './encoder.js'\nimport { create as iteratorChannel } from './iterator-channel.js'\nimport { bytesReader, readHeader } from './decoder.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 /* c8 ignore next 2 */\n // Node.js 12 c8 bug\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 /* c8 ignore next 2 */\n // Node.js 12 c8 bug\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 /* c8 ignore next 2 */\n // Node.js 12 c8 bug\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 varint from 'varint'\nimport { Token, Type } from 'cborg'\nimport { tokensToLength } from 'cborg/length'\nimport * as CBOR from '@ipld/dag-cbor'\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", "const typeofs = [\n 'string',\n 'number',\n 'bigint',\n 'symbol'\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];\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 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 return 'Object';\n}\nfunction isBuffer(value) {\n return value && value.constructor && value.constructor.isBuffer && value.constructor.isBuffer.call(null, value);\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 return undefined;\n}", "class Type {\n constructor(major, name, terminal) {\n this.major = major;\n this.majorEncoded = major << 5;\n this.name = name;\n this.terminal = terminal;\n }\n toString() {\n return `Type[${ this.major }].${ this.name }`;\n }\n compare(typ) {\n return this.major < typ.major ? -1 : this.major > typ.major ? 1 : 0;\n }\n}\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);\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);\nclass Token {\n constructor(type, value, encodedLength) {\n this.type = type;\n this.value = value;\n this.encodedLength = encodedLength;\n this.encodedBytes = undefined;\n this.byteValue = undefined;\n }\n toString() {\n return `Token[${ this.type }].${ this.value }`;\n }\n}\nexport {\n Type,\n Token\n};", "export const useBuffer = globalThis.process && !globalThis.process.browser && globalThis.Buffer && typeof globalThis.Buffer.isBuffer === 'function';\nconst textDecoder = new TextDecoder();\nconst textEncoder = new TextEncoder();\nfunction isBuffer(buf) {\n return useBuffer && globalThis.Buffer.isBuffer(buf);\n}\nexport function asU8A(buf) {\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}\nexport const toString = useBuffer ? (bytes, start, end) => {\n return end - start > 64 ? globalThis.Buffer.from(bytes.subarray(start, end)).toString('utf8') : utf8Slice(bytes, start, end);\n} : (bytes, start, end) => {\n return end - start > 64 ? textDecoder.decode(bytes.subarray(start, end)) : utf8Slice(bytes, start, end);\n};\nexport const fromString = useBuffer ? string => {\n return string.length > 64 ? globalThis.Buffer.from(string) : utf8ToBytes(string);\n} : string => {\n return string.length > 64 ? textEncoder.encode(string) : utf8ToBytes(string);\n};\nexport const fromArray = arr => {\n return Uint8Array.from(arr);\n};\nexport const slice = useBuffer ? (bytes, start, end) => {\n if (isBuffer(bytes)) {\n return new Uint8Array(bytes.subarray(start, end));\n }\n return bytes.slice(start, end);\n} : (bytes, start, end) => {\n return bytes.slice(start, end);\n};\nexport const concat = useBuffer ? (chunks, length) => {\n chunks = chunks.map(c => c instanceof Uint8Array ? c : globalThis.Buffer.from(c));\n return asU8A(globalThis.Buffer.concat(chunks, length));\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 b = b.subarray(0, out.length - off);\n }\n out.set(b, off);\n off += b.length;\n }\n return out;\n};\nexport const alloc = useBuffer ? size => {\n return globalThis.Buffer.allocUnsafe(size);\n} : size => {\n return new Uint8Array(size);\n};\nexport const toHex = useBuffer ? d => {\n if (typeof d === 'string') {\n return d;\n }\n return globalThis.Buffer.from(toBytes(d)).toString('hex');\n} : d => {\n if (typeof d === 'string') {\n return d;\n }\n return Array.prototype.reduce.call(toBytes(d), (p, c) => `${ p }${ c.toString(16).padStart(2, '0') }`, '');\n};\nexport const fromHex = useBuffer ? hex => {\n if (hex instanceof Uint8Array) {\n return hex;\n }\n return globalThis.Buffer.from(hex, 'hex');\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('').map((c, i, d) => i % 2 === 0 ? `0x${ c }${ d[i + 1] }` : '').filter(Boolean).map(e => parseInt(e, 16)));\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 throw new Error('Unknown type, must be binary type');\n}\nexport function compare(b1, b2) {\n if (isBuffer(b1) && isBuffer(b2)) {\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 }\n return 0;\n}\nfunction utf8ToBytes(string, units = Infinity) {\n let codePoint;\n const length = string.length;\n let leadSurrogate = null;\n const bytes = [];\n for (let i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i);\n if (codePoint > 55295 && codePoint < 57344) {\n if (!leadSurrogate) {\n if (codePoint > 56319) {\n if ((units -= 3) > -1)\n bytes.push(239, 191, 189);\n continue;\n } else if (i + 1 === length) {\n if ((units -= 3) > -1)\n bytes.push(239, 191, 189);\n continue;\n }\n leadSurrogate = codePoint;\n continue;\n }\n if (codePoint < 56320) {\n if ((units -= 3) > -1)\n bytes.push(239, 191, 189);\n leadSurrogate = codePoint;\n continue;\n }\n codePoint = (leadSurrogate - 55296 << 10 | codePoint - 56320) + 65536;\n } else if (leadSurrogate) {\n if ((units -= 3) > -1)\n bytes.push(239, 191, 189);\n }\n leadSurrogate = null;\n if (codePoint < 128) {\n if ((units -= 1) < 0)\n break;\n bytes.push(codePoint);\n } else if (codePoint < 2048) {\n if ((units -= 2) < 0)\n break;\n bytes.push(codePoint >> 6 | 192, codePoint & 63 | 128);\n } else if (codePoint < 65536) {\n if ((units -= 3) < 0)\n break;\n bytes.push(codePoint >> 12 | 224, codePoint >> 6 & 63 | 128, codePoint & 63 | 128);\n } else if (codePoint < 1114112) {\n if ((units -= 4) < 0)\n break;\n bytes.push(codePoint >> 18 | 240, codePoint >> 12 & 63 | 128, codePoint >> 6 & 63 | 128, codePoint & 63 | 128);\n } else {\n throw new Error('Invalid code point');\n }\n }\n return bytes;\n}\nfunction utf8Slice(buf, offset, end) {\n const res = [];\n while (offset < end) {\n const firstByte = buf[offset];\n let codePoint = null;\n let bytesPerSequence = firstByte > 239 ? 4 : firstByte > 223 ? 3 : firstByte > 191 ? 2 : 1;\n if (offset + bytesPerSequence <= end) {\n let secondByte, thirdByte, fourthByte, tempCodePoint;\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 128) {\n codePoint = firstByte;\n }\n break;\n case 2:\n secondByte = buf[offset + 1];\n if ((secondByte & 192) === 128) {\n tempCodePoint = (firstByte & 31) << 6 | secondByte & 63;\n if (tempCodePoint > 127) {\n codePoint = tempCodePoint;\n }\n }\n break;\n case 3:\n secondByte = buf[offset + 1];\n thirdByte = buf[offset + 2];\n if ((secondByte & 192) === 128 && (thirdByte & 192) === 128) {\n tempCodePoint = (firstByte & 15) << 12 | (secondByte & 63) << 6 | thirdByte & 63;\n if (tempCodePoint > 2047 && (tempCodePoint < 55296 || tempCodePoint > 57343)) {\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 & 192) === 128 && (thirdByte & 192) === 128 && (fourthByte & 192) === 128) {\n tempCodePoint = (firstByte & 15) << 18 | (secondByte & 63) << 12 | (thirdByte & 63) << 6 | fourthByte & 63;\n if (tempCodePoint > 65535 && tempCodePoint < 1114112) {\n codePoint = tempCodePoint;\n }\n }\n }\n }\n if (codePoint === null) {\n codePoint = 65533;\n bytesPerSequence = 1;\n } else if (codePoint > 65535) {\n codePoint -= 65536;\n res.push(codePoint >>> 10 & 1023 | 55296);\n codePoint = 56320 | codePoint & 1023;\n }\n res.push(codePoint);\n offset += bytesPerSequence;\n }\n return decodeCodePointsArray(res);\n}\nconst MAX_ARGUMENTS_LENGTH = 4096;\nexport function decodeCodePointsArray(codePoints) {\n const len = codePoints.length;\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints);\n }\n let res = '';\n let i = 0;\n while (i < len) {\n res += String.fromCharCode.apply(String, codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH));\n }\n return res;\n}", "import {\n alloc,\n concat,\n slice\n} from './byte-utils.js';\nconst defaultChunkSize = 256;\nexport class Bl {\n constructor(chunkSize = defaultChunkSize) {\n this.chunkSize = chunkSize;\n this.cursor = 0;\n this.maxCursor = -1;\n this.chunks = [];\n this._initReuseChunk = null;\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 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 const chunkPos = topChunk.length - (this.maxCursor - this.cursor) - 1;\n topChunk.set(bytes, chunkPos);\n } else {\n if (topChunk) {\n const chunkPos = topChunk.length - (this.maxCursor - this.cursor) - 1;\n if (chunkPos < topChunk.length) {\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 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 topChunk.set(bytes, 0);\n } else {\n this.chunks.push(bytes);\n this.maxCursor += bytes.length;\n }\n }\n this.cursor += bytes.length;\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 byts = this.cursor === chunk.length ? chunk : chunk.subarray(0, this.cursor);\n this._initReuseChunk = null;\n this.chunks = [];\n } else {\n byts = slice(chunk, 0, this.cursor);\n }\n } else {\n byts = concat(this.chunks, this.cursor);\n }\n if (reset) {\n this.reset();\n }\n return byts;\n }\n}", "const decodeErrPrefix = 'CBOR decode error:';\nconst encodeErrPrefix = 'CBOR encode error:';\nconst uintMinorPrefixBytes = [];\nuintMinorPrefixBytes[23] = 1;\nuintMinorPrefixBytes[24] = 2;\nuintMinorPrefixBytes[25] = 3;\nuintMinorPrefixBytes[26] = 5;\nuintMinorPrefixBytes[27] = 9;\nfunction assertEnoughData(data, pos, need) {\n if (data.length - pos < need) {\n throw new Error(`${ decodeErrPrefix } not enough data for type`);\n }\n}\nexport {\n decodeErrPrefix,\n encodeErrPrefix,\n uintMinorPrefixBytes,\n assertEnoughData\n};", "import {\n Token,\n Type\n} from './token.js';\nimport {\n decodeErrPrefix,\n assertEnoughData\n} from './common.js';\nexport const uintBoundaries = [\n 24,\n 256,\n 65536,\n 4294967296,\n BigInt('18446744073709551616')\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}\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}\nexport function readUint32(data, offset, options) {\n assertEnoughData(data, offset, 4);\n const value = data[offset] * 16777216 + (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}\nexport function readUint64(data, offset, options) {\n assertEnoughData(data, offset, 8);\n const hi = data[offset] * 16777216 + (data[offset + 1] << 16) + (data[offset + 2] << 8) + data[offset + 3];\n const lo = data[offset + 4] * 16777216 + (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}\nexport function decodeUint8(data, pos, _minor, options) {\n return new Token(Type.uint, readUint8(data, pos + 1, options), 2);\n}\nexport function decodeUint16(data, pos, _minor, options) {\n return new Token(Type.uint, readUint16(data, pos + 1, options), 3);\n}\nexport function decodeUint32(data, pos, _minor, options) {\n return new Token(Type.uint, readUint32(data, pos + 1, options), 5);\n}\nexport function decodeUint64(data, pos, _minor, options) {\n return new Token(Type.uint, readUint64(data, pos + 1, options), 9);\n}\nexport function encodeUint(buf, token) {\n return encodeUintValue(buf, 0, token.value);\n}\nexport function encodeUintValue(buf, major, uint) {\n if (uint < uintBoundaries[0]) {\n const nuint = Number(uint);\n buf.push([major | nuint]);\n } else if (uint < uintBoundaries[1]) {\n const nuint = Number(uint);\n buf.push([\n major | 24,\n nuint\n ]);\n } else if (uint < uintBoundaries[2]) {\n const nuint = Number(uint);\n buf.push([\n major | 25,\n nuint >>> 8,\n nuint & 255\n ]);\n } else if (uint < uintBoundaries[3]) {\n const nuint = Number(uint);\n buf.push([\n major | 26,\n nuint >>> 24 & 255,\n nuint >>> 16 & 255,\n nuint >>> 8 & 255,\n nuint & 255\n ]);\n } else {\n const buint = BigInt(uint);\n if (buint < uintBoundaries[4]) {\n const set = [\n major | 27,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0\n ];\n let lo = Number(buint & BigInt(4294967295));\n let hi = Number(buint >> BigInt(32) & BigInt(4294967295));\n set[8] = lo & 255;\n lo = lo >> 8;\n set[7] = lo & 255;\n lo = lo >> 8;\n set[6] = lo & 255;\n lo = lo >> 8;\n set[5] = lo & 255;\n set[4] = hi & 255;\n hi = hi >> 8;\n set[3] = hi & 255;\n hi = hi >> 8;\n set[2] = hi & 255;\n hi = hi >> 8;\n set[1] = hi & 255;\n buf.push(set);\n } else {\n throw new Error(`${ decodeErrPrefix } encountered BigInt larger than allowable range`);\n }\n }\n}\nencodeUint.encodedSize = function encodedSize(token) {\n return encodeUintValue.encodedSize(token.value);\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};\nencodeUint.compareTokens = function compareTokens(tok1, tok2) {\n return tok1.value < tok2.value ? -1 : tok1.value > tok2.value ? 1 : 0;\n};", "import {\n Token,\n Type\n} from './token.js';\nimport * as uint from './0uint.js';\nimport { decodeErrPrefix } from './common.js';\nexport function decodeNegint8(data, pos, _minor, options) {\n return new Token(Type.negint, -1 - uint.readUint8(data, pos + 1, options), 2);\n}\nexport function decodeNegint16(data, pos, _minor, options) {\n return new Token(Type.negint, -1 - uint.readUint16(data, pos + 1, options), 3);\n}\nexport function decodeNegint32(data, pos, _minor, options) {\n return new Token(Type.negint, -1 - uint.readUint32(data, pos + 1, options), 5);\n}\nconst neg1b = BigInt(-1);\nconst pos1b = BigInt(1);\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}\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}\nencodeNegint.encodedSize = function encodedSize(token) {\n const negint = token.value;\n const unsigned = typeof negint === 'bigint' ? negint * neg1b - pos1b : negint * -1 - 1;\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};\nencodeNegint.compareTokens = function compareTokens(tok1, tok2) {\n return tok1.value < tok2.value ? 1 : tok1.value > tok2.value ? -1 : 0;\n};", "import {\n Token,\n Type\n} from './token.js';\nimport {\n assertEnoughData,\n decodeErrPrefix\n} from './common.js';\nimport * as uint from './0uint.js';\nimport {\n compare,\n fromString,\n slice\n} from './byte-utils.js';\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}\nexport function decodeBytesCompact(data, pos, minor, _options) {\n return toToken(data, pos, 1, minor);\n}\nexport function decodeBytes8(data, pos, _minor, options) {\n return toToken(data, pos, 2, uint.readUint8(data, pos + 1, options));\n}\nexport function decodeBytes16(data, pos, _minor, options) {\n return toToken(data, pos, 3, uint.readUint16(data, pos + 1, options));\n}\nexport function decodeBytes32(data, pos, _minor, options) {\n return toToken(data, pos, 5, uint.readUint32(data, pos + 1, options));\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}\nfunction tokenBytes(token) {\n if (token.encodedBytes === undefined) {\n token.encodedBytes = token.type === Type.string ? fromString(token.value) : token.value;\n }\n return token.encodedBytes;\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}\nencodeBytes.encodedSize = function encodedSize(token) {\n const bytes = tokenBytes(token);\n return uint.encodeUintValue.encodedSize(bytes.length) + bytes.length;\n};\nencodeBytes.compareTokens = function compareTokens(tok1, tok2) {\n return compareBytes(tokenBytes(tok1), tokenBytes(tok2));\n};\nexport function compareBytes(b1, b2) {\n return b1.length < b2.length ? -1 : b1.length > b2.length ? 1 : compare(b1, b2);\n}", "import {\n Token,\n Type\n} from './token.js';\nimport {\n assertEnoughData,\n decodeErrPrefix\n} from './common.js';\nimport * as uint from './0uint.js';\nimport { encodeBytes } from './2bytes.js';\nimport {\n toString,\n slice\n} from './byte-utils.js';\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}\nexport function decodeStringCompact(data, pos, minor, options) {\n return toToken(data, pos, 1, minor, options);\n}\nexport function decodeString8(data, pos, _minor, options) {\n return toToken(data, pos, 2, uint.readUint8(data, pos + 1, options), options);\n}\nexport function decodeString16(data, pos, _minor, options) {\n return toToken(data, pos, 3, uint.readUint16(data, pos + 1, options), options);\n}\nexport function decodeString32(data, pos, _minor, options) {\n return toToken(data, pos, 5, uint.readUint32(data, pos + 1, options), options);\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}\nexport const encodeString = encodeBytes;", "import {\n Token,\n Type\n} from './token.js';\nimport * as uint from './0uint.js';\nimport { decodeErrPrefix } from './common.js';\nfunction toToken(_data, _pos, prefix, length) {\n return new Token(Type.array, length, prefix);\n}\nexport function decodeArrayCompact(data, pos, minor, _options) {\n return toToken(data, pos, 1, minor);\n}\nexport function decodeArray8(data, pos, _minor, options) {\n return toToken(data, pos, 2, uint.readUint8(data, pos + 1, options));\n}\nexport function decodeArray16(data, pos, _minor, options) {\n return toToken(data, pos, 3, uint.readUint16(data, pos + 1, options));\n}\nexport function decodeArray32(data, pos, _minor, options) {\n return toToken(data, pos, 5, uint.readUint32(data, pos + 1, options));\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}\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}\nexport function encodeArray(buf, token) {\n uint.encodeUintValue(buf, Type.array.majorEncoded, token.value);\n}\nencodeArray.compareTokens = uint.encodeUint.compareTokens;\nencodeArray.encodedSize = function encodedSize(token) {\n return uint.encodeUintValue.encodedSize(token.value);\n};", "import {\n Token,\n Type\n} from './token.js';\nimport * as uint from './0uint.js';\nimport { decodeErrPrefix } from './common.js';\nfunction toToken(_data, _pos, prefix, length) {\n return new Token(Type.map, length, prefix);\n}\nexport function decodeMapCompact(data, pos, minor, _options) {\n return toToken(data, pos, 1, minor);\n}\nexport function decodeMap8(data, pos, _minor, options) {\n return toToken(data, pos, 2, uint.readUint8(data, pos + 1, options));\n}\nexport function decodeMap16(data, pos, _minor, options) {\n return toToken(data, pos, 3, uint.readUint16(data, pos + 1, options));\n}\nexport function decodeMap32(data, pos, _minor, options) {\n return toToken(data, pos, 5, uint.readUint32(data, pos + 1, options));\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}\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}\nexport function encodeMap(buf, token) {\n uint.encodeUintValue(buf, Type.map.majorEncoded, token.value);\n}\nencodeMap.compareTokens = uint.encodeUint.compareTokens;\nencodeMap.encodedSize = function encodedSize(token) {\n return uint.encodeUintValue.encodedSize(token.value);\n};", "import {\n Token,\n Type\n} from './token.js';\nimport * as uint from './0uint.js';\nexport function decodeTagCompact(_data, _pos, minor, _options) {\n return new Token(Type.tag, minor, 1);\n}\nexport function decodeTag8(data, pos, _minor, options) {\n return new Token(Type.tag, uint.readUint8(data, pos + 1, options), 2);\n}\nexport function decodeTag16(data, pos, _minor, options) {\n return new Token(Type.tag, uint.readUint16(data, pos + 1, options), 3);\n}\nexport function decodeTag32(data, pos, _minor, options) {\n return new Token(Type.tag, uint.readUint32(data, pos + 1, options), 5);\n}\nexport function decodeTag64(data, pos, _minor, options) {\n return new Token(Type.tag, uint.readUint64(data, pos + 1, options), 9);\n}\nexport function encodeTag(buf, token) {\n uint.encodeUintValue(buf, Type.tag.majorEncoded, token.value);\n}\nencodeTag.compareTokens = uint.encodeUint.compareTokens;\nencodeTag.encodedSize = function encodedSize(token) {\n return uint.encodeUintValue.encodedSize(token.value);\n};", "import {\n Token,\n Type\n} from './token.js';\nimport { decodeErrPrefix } from './common.js';\nimport { encodeUint } from './0uint.js';\nconst MINOR_FALSE = 20;\nconst MINOR_TRUE = 21;\nconst MINOR_NULL = 22;\nconst MINOR_UNDEFINED = 23;\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}\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}\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}\nexport function decodeFloat16(data, pos, _minor, options) {\n return createToken(readFloat16(data, pos + 1), 3, options);\n}\nexport function decodeFloat32(data, pos, _minor, options) {\n return createToken(readFloat32(data, pos + 1), 5, options);\n}\nexport function decodeFloat64(data, pos, _minor, options) {\n return createToken(readFloat64(data, pos + 1), 9, options);\n}\nexport function encodeFloat(buf, token, options) {\n const float = token.value;\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] = 249;\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] = 250;\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] = 251;\n buf.push(ui8a.slice(0, 9));\n }\n }\n}\nencodeFloat.encodedSize = function encodedSize(token, options) {\n const float = token.value;\n if (float === false || float === true || float === null || float === undefined) {\n return 1;\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};\nconst buffer = new ArrayBuffer(9);\nconst dataView = new DataView(buffer, 1);\nconst ui8a = new Uint8Array(buffer, 0);\nfunction encodeFloat16(inp) {\n if (inp === Infinity) {\n dataView.setUint16(0, 31744, false);\n } else if (inp === -Infinity) {\n dataView.setUint16(0, 64512, false);\n } else if (Number.isNaN(inp)) {\n dataView.setUint16(0, 32256, false);\n } else {\n dataView.setFloat32(0, inp);\n const valu32 = dataView.getUint32(0);\n const exponent = (valu32 & 2139095040) >> 23;\n const mantissa = valu32 & 8388607;\n if (exponent === 255) {\n dataView.setUint16(0, 31744, false);\n } else if (exponent === 0) {\n dataView.setUint16(0, (inp & 2147483648) >> 16 | mantissa >> 13, false);\n } else {\n const logicalExponent = exponent - 127;\n if (logicalExponent < -24) {\n dataView.setUint16(0, 0);\n } else if (logicalExponent < -14) {\n dataView.setUint16(0, (valu32 & 2147483648) >> 16 | 1 << 24 + logicalExponent, false);\n } else {\n dataView.setUint16(0, (valu32 & 2147483648) >> 16 | logicalExponent + 15 << 10 | mantissa >> 13, false);\n }\n }\n }\n}\nfunction readFloat16(ui8a, pos) {\n if (ui8a.length - pos < 2) {\n throw new Error(`${ decodeErrPrefix } not enough data for float16`);\n }\n const half = (ui8a[pos] << 8) + ui8a[pos + 1];\n if (half === 31744) {\n return Infinity;\n }\n if (half === 64512) {\n return -Infinity;\n }\n if (half === 32256) {\n return NaN;\n }\n const exp = half >> 10 & 31;\n const mant = half & 1023;\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 } else {\n val = mant === 0 ? Infinity : NaN;\n }\n return half & 32768 ? -val : val;\n}\nfunction encodeFloat32(inp) {\n dataView.setFloat32(0, inp, false);\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}\nfunction encodeFloat64(inp) {\n dataView.setFloat64(0, inp, false);\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}\nencodeFloat.compareTokens = encodeUint.compareTokens;", "import {\n Token,\n Type\n} 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';\nfunction invalidMinor(data, pos, minor) {\n throw new Error(`${ decodeErrPrefix } encountered invalid minor (${ minor }) for major ${ data[pos] >>> 5 }`);\n}\nfunction errorer(msg) {\n return () => {\n throw new Error(`${ decodeErrPrefix } ${ msg }`);\n };\n}\nexport const jump = [];\nfor (let i = 0; i <= 23; i++) {\n jump[i] = invalidMinor;\n}\njump[24] = uint.decodeUint8;\njump[25] = uint.decodeUint16;\njump[26] = uint.decodeUint32;\njump[27] = uint.decodeUint64;\njump[28] = invalidMinor;\njump[29] = invalidMinor;\njump[30] = invalidMinor;\njump[31] = invalidMinor;\nfor (let i = 32; i <= 55; i++) {\n jump[i] = invalidMinor;\n}\njump[56] = negint.decodeNegint8;\njump[57] = negint.decodeNegint16;\njump[58] = negint.decodeNegint32;\njump[59] = negint.decodeNegint64;\njump[60] = invalidMinor;\njump[61] = invalidMinor;\njump[62] = invalidMinor;\njump[63] = invalidMinor;\nfor (let i = 64; i <= 87; i++) {\n jump[i] = bytes.decodeBytesCompact;\n}\njump[88] = bytes.decodeBytes8;\njump[89] = bytes.decodeBytes16;\njump[90] = bytes.decodeBytes32;\njump[91] = bytes.decodeBytes64;\njump[92] = invalidMinor;\njump[93] = invalidMinor;\njump[94] = invalidMinor;\njump[95] = errorer('indefinite length bytes/strings are not supported');\nfor (let i = 96; i <= 119; i++) {\n jump[i] = string.decodeStringCompact;\n}\njump[120] = string.decodeString8;\njump[121] = string.decodeString16;\njump[122] = string.decodeString32;\njump[123] = string.decodeString64;\njump[124] = invalidMinor;\njump[125] = invalidMinor;\njump[126] = invalidMinor;\njump[127] = errorer('indefinite length bytes/strings are not supported');\nfor (let i = 128; i <= 151; i++) {\n jump[i] = array.decodeArrayCompact;\n}\njump[152] = array.decodeArray8;\njump[153] = array.decodeArray16;\njump[154] = array.decodeArray32;\njump[155] = array.decodeArray64;\njump[156] = invalidMinor;\njump[157] = invalidMinor;\njump[158] = invalidMinor;\njump[159] = array.decodeArrayIndefinite;\nfor (let i = 160; i <= 183; i++) {\n jump[i] = map.decodeMapCompact;\n}\njump[184] = map.decodeMap8;\njump[185] = map.decodeMap16;\njump[186] = map.decodeMap32;\njump[187] = map.decodeMap64;\njump[188] = invalidMinor;\njump[189] = invalidMinor;\njump[190] = invalidMinor;\njump[191] = map.decodeMapIndefinite;\nfor (let i = 192; i <= 215; i++) {\n jump[i] = tag.decodeTagCompact;\n}\njump[216] = tag.decodeTag8;\njump[217] = tag.decodeTag16;\njump[218] = tag.decodeTag32;\njump[219] = tag.decodeTag64;\njump[220] = invalidMinor;\njump[221] = invalidMinor;\njump[222] = invalidMinor;\njump[223] = invalidMinor;\nfor (let i = 224; i <= 243; i++) {\n jump[i] = errorer('simple values are not supported');\n}\njump[244] = invalidMinor;\njump[245] = invalidMinor;\njump[246] = invalidMinor;\njump[247] = float.decodeUndefined;\njump[248] = errorer('simple values are not supported');\njump[249] = float.decodeFloat16;\njump[250] = float.decodeFloat32;\njump[251] = float.decodeFloat64;\njump[252] = invalidMinor;\njump[253] = invalidMinor;\njump[254] = invalidMinor;\njump[255] = float.decodeBreak;\nexport const quick = [];\nfor (let i = 0; i < 24; i++) {\n quick[i] = new Token(Type.uint, i, 1);\n}\nfor (let i = -1; i >= -24; i--) {\n quick[31 - i] = new Token(Type.negint, i, 1);\n}\nquick[64] = new Token(Type.bytes, new Uint8Array(0), 1);\nquick[96] = new Token(Type.string, '', 1);\nquick[128] = new Token(Type.array, 0, 1);\nquick[160] = new Token(Type.map, 0, 1);\nquick[244] = new Token(Type.false, false, 1);\nquick[245] = new Token(Type.true, true, 1);\nquick[246] = new Token(Type.null, null, 1);\nexport function quickEncodeToken(token) {\n switch (token.type) {\n case Type.false:\n return fromArray([244]);\n case Type.true:\n return fromArray([245]);\n case Type.null:\n return fromArray([246]);\n case Type.bytes:\n if (!token.value.length) {\n return fromArray([64]);\n }\n return;\n case Type.string:\n if (token.value === '') {\n return fromArray([96]);\n }\n return;\n case Type.array:\n if (token.value === 0) {\n return fromArray([128]);\n }\n return;\n case Type.map:\n if (token.value === 0) {\n return fromArray([160]);\n }\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}", "import { is } from './is.js';\nimport {\n Token,\n Type\n} from './token.js';\nimport { Bl } from './bl.js';\nimport { encodeErrPrefix } from './common.js';\nimport { quickEncodeToken } from './jump.js';\nimport { asU8A } from './byte-utils.js';\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';\nconst defaultEncodeOptions = {\n float64: false,\n mapSorter,\n quickEncodeToken\n};\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}\nconst cborEncoders = makeCborEncoders();\nconst buf = new Bl();\nclass Ref {\n constructor(obj, parent) {\n this.obj = obj;\n this.parent = parent;\n }\n includes(obj) {\n let p = this;\n do {\n if (p.obj === obj) {\n return true;\n }\n } while (p = p.parent);\n return false;\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}\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};\nconst typeEncoders = {\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 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 Uint8Array(obj, _typ, _options, _refStack) {\n return new Token(Type.bytes, obj);\n },\n string(obj, _typ, _options, _refStack) {\n return new Token(Type.string, obj);\n },\n boolean(obj, _typ, _options, _refStack) {\n return obj ? simpleTokens.true : simpleTokens.false;\n },\n null(_obj, _typ, _options, _refStack) {\n return simpleTokens.null;\n },\n undefined(_obj, _typ, _options, _refStack) {\n return simpleTokens.undefined;\n },\n ArrayBuffer(obj, _typ, _options, _refStack) {\n return new Token(Type.bytes, new Uint8Array(obj));\n },\n DataView(obj, _typ, _options, _refStack) {\n return new Token(Type.bytes, new Uint8Array(obj.buffer, obj.byteOffset, obj.byteLength));\n },\n Array(obj, _typ, options, refStack) {\n if (!obj.length) {\n if (options.addBreakTokens === true) {\n return [\n simpleTokens.emptyArray,\n new Token(Type.break)\n ];\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 [\n new Token(Type.array, obj.length),\n entries,\n new Token(Type.break)\n ];\n }\n return [\n new Token(Type.array, obj.length),\n entries\n ];\n },\n Object(obj, typ, options, refStack) {\n const isMap = typ !== 'Object';\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 [\n simpleTokens.emptyMap,\n new Token(Type.break)\n ];\n }\n return simpleTokens.emptyMap;\n }\n refStack = Ref.createCheck(refStack, obj);\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 [\n new Token(Type.map, length),\n entries,\n new Token(Type.break)\n ];\n }\n return [\n new Token(Type.map, length),\n 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}\nfunction objectToTokens(obj, options = {}, refStack) {\n const typ = is(obj);\n const customTypeEncoder = options && options.typeEncoders && 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}\nfunction sortMapEntries(entries, options) {\n if (options.mapSorter) {\n entries.sort(options.mapSorter);\n }\n}\nfunction mapSorter(e1, e2) {\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 if (keyToken1.type !== keyToken2.type) {\n return keyToken1.type.compare(keyToken2.type);\n }\n const major = keyToken1.type.major;\n const tcmp = cborEncoders[major].compareTokens(keyToken1, keyToken2);\n if (tcmp === 0) {\n console.warn('WARNING: complex key types used, CBOR key sorting guarantees are gone');\n }\n return tcmp;\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}\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 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}\nfunction encode(data, options) {\n options = Object.assign({}, defaultEncodeOptions, options);\n return encodeCustom(data, cborEncoders, options);\n}\nexport {\n objectToTokens,\n encode,\n encodeCustom,\n Ref\n};", "import { decodeErrPrefix } from './common.js';\nimport { Type } from './token.js';\nimport {\n jump,\n quick\n} from './jump.js';\nconst defaultDecodeOptions = {\n strict: false,\n allowIndefinite: true,\n allowUndefined: true,\n allowBigInt: true\n};\nclass Tokeniser {\n constructor(data, options = {}) {\n this.pos = 0;\n this.data = data;\n this.options = options;\n }\n done() {\n return this.pos >= this.data.length;\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 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 this.pos += token.encodedLength;\n return token;\n }\n}\nconst DONE = Symbol.for('DONE');\nconst BREAK = Symbol.for('BREAK');\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 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}\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 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 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 m.set(key, value);\n } else {\n obj[key] = value;\n }\n }\n return useMaps ? m : obj;\n}\nfunction tokensToObject(tokeniser, options) {\n if (tokeniser.done()) {\n return DONE;\n }\n const token = tokeniser.next();\n if (token.type === Type.break) {\n return BREAK;\n }\n if (token.type.terminal) {\n return token.value;\n }\n if (token.type === Type.array) {\n return tokenToArray(token, tokeniser, options);\n }\n if (token.type === Type.map) {\n return tokenToMap(token, tokeniser, options);\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 throw new Error('unsupported');\n}\nfunction decode(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 if (!tokeniser.done()) {\n throw new Error(`${ decodeErrPrefix } too many terminals, data makes no sense`);\n }\n return decoded;\n}\nexport {\n Tokeniser,\n tokensToObject,\n decode\n};", "import {\n makeCborEncoders,\n objectToTokens\n} from './encode.js';\nimport { quickEncodeToken } from './jump.js';\nconst cborEncoders = makeCborEncoders();\nconst defaultEncodeOptions = {\n float64: false,\n quickEncodeToken\n};\nexport function encodedLength(data, options) {\n options = Object.assign({}, defaultEncodeOptions, options);\n options.mapSorter = undefined;\n const tokens = objectToTokens(data, options);\n return tokensToLength(tokens, cborEncoders, 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 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}", "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", "import { bytes as binary, CID } from './index.js'\n// Linter can see that API is used in types.\n// eslint-disable-next-line\nimport * as API from './interface.js'\n\nfunction readonly ({ enumerable = true, configurable = false } = {}) {\n return { enumerable, configurable, writable: false }\n}\n\n/**\n * @param {[string|number, string]} path\n * @param {any} value\n * @returns {Iterable<[string, CID]>}\n */\nfunction * linksWithin (path, value) {\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) {\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) {\n yield [path.join('/'), cid]\n } else {\n yield * links(value, path)\n }\n }\n }\n}\n\n/**\n * @template T\n * @param {T} source\n * @param {Array<string|number>} base\n * @returns {Iterable<[string, CID]>}\n */\nfunction * links (source, base) {\n if (source == null || source instanceof Uint8Array) {\n return\n }\n const cid = CID.asCID(source)\n if (cid) {\n yield [base.join('/'), cid]\n }\n for (const [key, value] of Object.entries(source)) {\n const path = /** @type {[string|number, string]} */ ([...base, key])\n yield * linksWithin(path, value)\n }\n}\n\n/**\n * @param {[string|number, string]} path\n * @param {any} value\n * @returns {Iterable<string>}\n */\nfunction * treeWithin (path, value) {\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)) {\n yield * tree(element, elementPath)\n }\n }\n } else {\n yield * tree(value, path)\n }\n}\n\n/**\n * @template T\n * @param {T} source\n * @param {Array<string|number>} base\n * @returns {Iterable<string>}\n */\nfunction * tree (source, base) {\n if (source == null || typeof source !== 'object') {\n return\n }\n for (const [key, value] of Object.entries(source)) {\n const path = /** @type {[string|number, string]} */ ([...base, key])\n yield path.join('/')\n if (value != null && !(value instanceof Uint8Array) && typeof value === 'object' && !CID.asCID(value)) {\n yield * treeWithin(path, value)\n }\n }\n}\n\n/**\n *\n * @template T\n * @param {T} source\n * @param {string[]} path\n * @returns {API.BlockCursorView<unknown>}\n */\nfunction get (source, path) {\n let node = /** @type {Record<string, any>} */(source)\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) {\n return { value: cid, remaining: path.slice(index + 1).join('/') }\n }\n }\n return { value: node }\n}\n\n/**\n * @template {unknown} T - Logical type of the data encoded in the block\n * @template {number} C - multicodec code corresponding to codec used to encode the block\n * @template {number} A - multicodec code corresponding to the hashing algorithm used in CID creation.\n * @template {API.Version} V - CID version\n * @implements {API.BlockView<T, C, A, V>}\n */\nclass Block {\n /**\n * @param {object} options\n * @param {CID<T, C, A, V>} options.cid\n * @param {API.ByteView<T>} options.bytes\n * @param {T} options.value\n */\n constructor ({ cid, bytes, value }) {\n if (!cid || !bytes || 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 () {\n return links(this.value, [])\n }\n\n tree () {\n return tree(this.value, [])\n }\n\n /**\n *\n * @param {string} [path]\n * @returns {API.BlockCursorView<unknown>}\n */\n get (path = '/') {\n return get(this.value, path.split('/').filter(Boolean))\n }\n}\n\n/**\n * @template {unknown} T - Logical type of the data encoded in the block\n * @template {number} Code - multicodec code corresponding to codec used to encode the block\n * @template {number} Alg - multicodec code corresponding to the hashing algorithm used in CID creation.\n * @param {object} options\n * @param {T} options.value\n * @param {API.BlockEncoder<Code, T>} options.codec\n * @param {API.MultihashHasher<Alg>} options.hasher\n * @returns {Promise<API.BlockView<T, Code, Alg>>}\n */\nasync function encode ({ value, codec, hasher }) {\n if (typeof value === 'undefined') throw new Error('Missing required argument \"value\"')\n if (!codec || !hasher) throw new Error('Missing required argument: codec or hasher')\n\n const bytes = codec.encode(value)\n const hash = await hasher.digest(bytes)\n /** @type {CID<T, Code, Alg, 1>} */\n const cid = CID.create(\n 1,\n codec.code,\n hash\n )\n\n return new Block({ value, bytes, cid })\n}\n\n/**\n * @template {unknown} T - Logical type of the data encoded in the block\n * @template {number} Code - multicodec code corresponding to codec used to encode the block\n * @template {number} Alg - multicodec code corresponding to the hashing algorithm used in CID creation.\n * @param {object} options\n * @param {API.ByteView<T>} options.bytes\n * @param {API.BlockDecoder<Code, T>} options.codec\n * @param {API.MultihashHasher<Alg>} options.hasher\n * @returns {Promise<API.BlockView<T, Code, Alg>>}\n */\nasync function decode ({ bytes, codec, hasher }) {\n if (!bytes) throw new Error('Missing required argument \"bytes\"')\n if (!codec || !hasher) throw new Error('Missing required argument: codec or hasher')\n\n const value = codec.decode(bytes)\n const hash = await hasher.digest(bytes)\n /** @type {CID<T, Code, Alg, 1>} */\n const cid = CID.create(1, codec.code, hash)\n\n return new Block({ value, bytes, cid })\n}\n\n/**\n * @typedef {object} RequiredCreateOptions\n * @property {CID} options.cid\n */\n\n/**\n * @template {unknown} T - Logical type of the data encoded in the block\n * @template {number} Code - multicodec code corresponding to codec used to encode the block\n * @template {number} Alg - multicodec code corresponding to the hashing algorithm used in CID creation.\n * @template {API.Version} V - CID version\n * @param {{ cid: API.Link<T, Code, Alg, V>, value:T, codec?: API.BlockDecoder<Code, T>, bytes: API.ByteView<T> }|{cid:API.Link<T, Code, Alg, V>, bytes:API.ByteView<T>, value?:void, codec:API.BlockDecoder<Code, T>}} options\n * @returns {API.BlockView<T, Code, Alg, V>}\n */\nfunction createUnsafe ({ bytes, cid, value: maybeValue, codec }) {\n const value = maybeValue !== undefined\n ? maybeValue\n : (codec && 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 // eslint-disable-next-line object-shorthand\n cid: /** @type {CID<T, Code, Alg, V>} */ (cid),\n bytes,\n value\n })\n}\n\n/**\n * @template {unknown} T - Logical type of the data encoded in the block\n * @template {number} Code - multicodec code corresponding to codec used to encode the block\n * @template {number} Alg - multicodec code corresponding to the hashing algorithm used in CID creation.\n * @template {API.Version} V - CID version\n * @param {object} options\n * @param {API.Link<T, Code, Alg, V>} options.cid\n * @param {API.ByteView<T>} options.bytes\n * @param {API.BlockDecoder<Code, T>} options.codec\n * @param {API.MultihashHasher<Alg>} options.hasher\n * @returns {Promise<API.BlockView<T, Code, Alg, V>>}\n */\nasync function create ({ bytes, cid, hasher, codec }) {\n if (!bytes) throw new Error('Missing required argument \"bytes\"')\n if (!hasher) 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\nexport { encode, decode, create, createUnsafe, Block }\n", "// @ts-check\n\nimport crypto from 'crypto'\nimport { from } from './hasher.js'\nimport { coerce } from '../bytes.js'\n\nexport const sha256 = from({\n name: 'sha2-256',\n code: 0x12,\n encode: (input) => coerce(crypto.createHash('sha256').update(input).digest())\n})\n\nexport const sha512 = from({\n name: 'sha2-512',\n code: 0x13,\n encode: input => coerce(crypto.createHash('sha512').update(input).digest())\n})\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", "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'\n\nimport { AnyBlock, AnyCarHeader, AnyLink, CarMakeable } from './types'\n// import { Transaction } from './transaction'\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(fp: AnyCarHeader) {\n return (await encode({\n value: { fp },\n hasher,\n codec\n })) as AnyBlock\n}\n\nexport async function parseCarFile(reader: CarReader): Promise<AnyCarHeader> {\n const roots = await reader.getRoots()\n const header = await reader.get(roots[0])\n if (!header) throw new Error('missing header block')\n const { value } = await decode({ bytes: header.bytes, hasher, codec })\n // @ts-ignore\n if (value && value.fp === undefined) throw new Error('missing fp')\n const { fp } = value as { fp: AnyCarHeader }\n return fp\n}\n", "// from https://github.com/mikeal/encrypted-block\nimport { CID } from 'multiformats'\nimport type { AnyLink } from './types'\nimport { crypto, randomBytes } from './crypto-web'\n\nconst 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\nconst readUInt32LE = (buffer: Uint8Array) => {\n const offset = buffer.byteLength - 4\n return ((buffer[offset]) |\n (buffer[offset + 1] << 8) |\n (buffer[offset + 2] << 16)) +\n (buffer[offset + 3] * 0x1000000)\n}\n\nconst concat = (buffers: Array<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\nconst encode = ({ iv, bytes }: { iv: Uint8Array, bytes: Uint8Array }) => concat([iv, bytes])\nconst decode = (bytes: Uint8Array) => {\n const iv = bytes.subarray(0, 12)\n bytes = bytes.slice(12)\n return { iv, bytes }\n}\n\nconst code = 0x300000 + 1337\n\nasync function subtleKey(key: ArrayBuffer) {\n return await crypto!.subtle.importKey(\n 'raw', // raw or jwk\n key, // raw data\n 'AES-GCM',\n false, // extractable\n ['encrypt', 'decrypt']\n )\n}\n\nconst decrypt = async ({ key, value }:\n {\n key: ArrayBuffer, value: { bytes: Uint8Array, iv: Uint8Array }\n }): Promise<{ cid: AnyLink, bytes: Uint8Array }> => {\n let { bytes, iv } = value\n const cryKey = await subtleKey(key)\n const deBytes = await crypto!.subtle.decrypt(\n {\n name: 'AES-GCM',\n iv,\n tagLength: 128\n },\n cryKey,\n bytes\n )\n bytes = new Uint8Array(deBytes)\n const len = readUInt32LE(bytes.subarray(0, 4))\n const cid = CID.decode(bytes.subarray(4, 4 + len))\n bytes = bytes.subarray(4 + len)\n return { cid, bytes }\n}\nconst encrypt = async ({ key, cid, bytes }: { key: ArrayBuffer, cid: AnyLink, bytes: Uint8Array }) => {\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!.subtle.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 console.log('ee', e)\n throw e\n }\n return { value: { bytes, iv } }\n}\n\nconst cryptoFn = (key: Uint8Array) => {\n // @ts-ignore\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n return { encrypt: opts => encrypt({ key, ...opts }), decrypt: opts => decrypt({ key, ...opts }) }\n}\n\nconst name = 'jchris@encrypted-block:aes-gcm'\n\nexport { encode, decode, code, name, encrypt, decrypt, cryptoFn as crypto }\n", "export function getCrypto() {\n try {\n if (window.crypto && window.crypto.subtle) {\n return window.crypto\n } else {\n return new Crypto()\n }\n } catch (e) {\n return null\n }\n}\nexport const crypto = getCrypto()\n\nexport function randomBytes(size: number) {\n const bytes = new Uint8Array(size)\n if (size > 0) {\n crypto!.getRandomValues(bytes)\n }\n return bytes\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};", "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 * as codec from './encrypted-block.js'\nimport * as dagcbor from '@ipld/dag-cbor'\n// @ts-ignore\nimport { create, load } from 'prolly-trees/cid-set'\nimport { CID } from 'multiformats'\nimport { encode, decode, create as mfCreate } from 'multiformats/block'\nimport type { AnyBlock, AnyDecodedBlock, AnyLink } from './types.js'\nimport type { MultihashHasher, ToString } from 'multiformats'\n\nconst encrypt = async function * ({\n get, cids, hasher,\n key, cache, chunker, root\n}:\n {\n get: (cid: AnyLink) => Promise<AnyBlock | undefined>,\n key: ArrayBuffer, cids: AnyLink[], hasher: MultihashHasher<number>\n chunker: (bytes: Uint8Array) => AsyncGenerator<Uint8Array>,\n cache: (cid: AnyLink) => Promise<AnyBlock>,\n root: AnyLink\n }): AsyncGenerator<any, void, unknown> {\n const set = new Set<ToString<AnyLink>>()\n let eroot\n for (const cid of cids) {\n const unencrypted = await get(cid)\n if (!unencrypted) throw new Error('missing cid: ' + cid.toString())\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 new Error('cids does not include root')\n const list = [...set].map(s => CID.parse(s))\n let last\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n for await (const node of create({ list, get, cache, chunker, hasher, codec: dagcbor })) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n const block = await node.block as AnyBlock\n yield block\n last = block\n }\n if (!last) throw new Error('missing last block')\n const head = [eroot, last.cid]\n const block = await encode({ value: head, codec: dagcbor, hasher })\n yield block\n}\n\nconst decrypt = async function * ({ root, get, key, cache, chunker, hasher }: {\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) => 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) => 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 new Error('missing root')\n if (!decodedRoot.bytes) throw new Error('missing bytes')\n const { value: [eroot, tree] } = decodedRoot as { value: [AnyLink, AnyLink] }\n const rootBlock = await get(eroot) as AnyDecodedBlock\n if (!rootBlock) throw new Error('missing root block')\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call\n const cidset = await load({ cid: tree, get: getWithDecode, cache, chunker, codec, hasher })\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call\n const { result: nodes } = await cidset.getAllEntries() as { result: { cid: CID }[] }\n const unwrap = async (eblock: AnyDecodedBlock | undefined) => {\n if (!eblock) throw new Error('missing block')\n if (!eblock.value) { eblock = await decode({ ...eblock, codec, hasher }) as AnyDecodedBlock }\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}\nexport {\n encrypt,\n decrypt\n}\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 type { CarReader } from '@ipld/car'\n\nimport { sha256 } from 'multiformats/hashes/sha2'\nimport { encrypt, decrypt } from './crypto-ipld'\n// @ts-ignore\nimport { bf } from 'prolly-trees/utils'\n// @ts-ignore\nimport { nocache as cache } from 'prolly-trees/cache'\nimport { encodeCarFile } from './loader-helpers' // Import the existing function\nimport type { AnyBlock, CarMakeable, AnyLink, BlockFetcher } from './types'\nimport { MemoryBlockstore } from '@alanshaw/pail/block'\n\n// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call\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 key: string,\n rootCid: AnyLink,\n t: CarMakeable\n): Promise<AnyBlock> {\n const encryptionKeyUint8 = hexStringToUint8Array(key)\n const encryptionKey = encryptionKeyUint8.buffer.slice(0, encryptionKeyUint8.byteLength)\n const encryptedBlocks = new MemoryBlockstore()\n const cidsToEncrypt = [] as AnyLink[]\n for (const { cid } of t.entries()) {\n cidsToEncrypt.push(cid)\n const g = await t.get(cid)\n if (!g) throw new Error('missing cid block')\n }\n let last: AnyBlock | null = null\n for await (const block of encrypt({\n cids: cidsToEncrypt,\n get: t.get.bind(t),\n key: encryptionKey,\n hasher: sha256,\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n chunker,\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\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 new Error('no blocks encrypted')\n const encryptedCar = await encodeCarFile([last.cid], encryptedBlocks)\n return encryptedCar\n}\n\nexport async function decodeEncryptedCar(key: string, reader: CarReader) {\n const roots = await reader.getRoots()\n const root = roots[0]\n return await decodeCarBlocks(root, reader.get.bind(reader), key)\n}\nasync function decodeCarBlocks(\n root: AnyLink,\n get: (cid: any) => 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 for await (const block of decrypt({\n root,\n get,\n key: decryptionKey,\n hasher: sha256,\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n chunker,\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n cache\n })) {\n await decryptedBlocks.put(block.cid, block.bytes)\n last = block\n }\n if (!last) throw new Error('no blocks decrypted')\n return { blocks: decryptedBlocks, root: last.cid }\n}\n", "import { Type } from '../token.js';\nimport { encodeCustom } from '../encode.js';\nimport { encodeErrPrefix } from '../common.js';\nimport {\n asU8A,\n fromString\n} from '../byte-utils.js';\nclass JSONEncoder extends Array {\n constructor() {\n super();\n this.inRecursive = [];\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) {\n buf.push([44]);\n }\n }\n if (recurs.type === Type.map) {\n recurs.elements++;\n if (recurs.elements !== 1) {\n if (recurs.elements % 2 === 1) {\n buf.push([44]);\n } else {\n buf.push([58]);\n }\n }\n }\n }\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 [Type.negint.major](buf, token) {\n this[Type.uint.major](buf, token);\n }\n [Type.bytes.major](_buf, _token) {\n throw new Error(`${ encodeErrPrefix } unsupported type: Uint8Array`);\n }\n [Type.string.major](buf, token) {\n this.prefix(buf);\n const byts = fromString(JSON.stringify(token.value));\n buf.push(byts.length > 32 ? asU8A(byts) : byts);\n }\n [Type.array.major](buf, _token) {\n this.prefix(buf);\n this.inRecursive.push({\n type: Type.array,\n elements: 0\n });\n buf.push([91]);\n }\n [Type.map.major](buf, _token) {\n this.prefix(buf);\n this.inRecursive.push({\n type: Type.map,\n elements: 0\n });\n buf.push([123]);\n }\n [Type.tag.major](_buf, _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 } else {\n throw new Error('Unexpected recursive type; this should not happen!');\n }\n return;\n }\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 this.prefix(buf);\n if (token.type.name === 'true') {\n buf.push([\n 116,\n 114,\n 117,\n 101\n ]);\n return;\n } else if (token.type.name === 'false') {\n buf.push([\n 102,\n 97,\n 108,\n 115,\n 101\n ]);\n return;\n } else if (token.type.name === 'null') {\n buf.push([\n 110,\n 117,\n 108,\n 108\n ]);\n return;\n }\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)) {\n dp = true;\n }\n }\n if (!dp) {\n isa.push(46);\n isa.push(48);\n }\n buf.push(isa);\n }\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 throw new Error(`${ encodeErrPrefix } unexpected duplicate map keys, this is not supported`);\n}\nconst defaultEncodeOptions = {\n addBreakTokens: true,\n mapSorter\n};\nfunction encode(data, options) {\n options = Object.assign({}, defaultEncodeOptions, options);\n return encodeCustom(data, new JSONEncoder(), options);\n}\nexport {\n encode\n};", "import { decode as _decode } from '../decode.js';\nimport {\n Token,\n Type\n} from '../token.js';\nimport { decodeCodePointsArray } from '../byte-utils.js';\nimport { decodeErrPrefix } from '../common.js';\nclass Tokenizer {\n constructor(data, options = {}) {\n this.pos = 0;\n this.data = data;\n this.options = options;\n this.modeStack = ['value'];\n this.lastToken = '';\n }\n done() {\n return this.pos >= this.data.length;\n }\n ch() {\n return this.data[this.pos];\n }\n currentMode() {\n return this.modeStack[this.modeStack.length - 1];\n }\n skipWhitespace() {\n let c = this.ch();\n while (c === 32 || c === 9 || c === 13 || c === 10) {\n c = this.data[++this.pos];\n }\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 parseNumber() {\n const startPos = this.pos;\n let negative = false;\n let float = false;\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 if (this.ch() === 45) {\n negative = true;\n this.pos++;\n }\n if (this.ch() === 48) {\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([\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 55,\n 56,\n 57\n ]);\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([\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 55,\n 56,\n 57\n ]);\n }\n if (!this.done() && (this.ch() === 101 || this.ch() === 69)) {\n float = true;\n this.pos++;\n if (!this.done() && (this.ch() === 43 || this.ch() === 45)) {\n this.pos++;\n }\n swallow([\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 55,\n 56,\n 57\n ]);\n }\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 parseString() {\n if (this.ch() !== 34) {\n throw new Error(`${ decodeErrPrefix } unexpected character at position ${ this.pos }; this shouldn't happen`);\n }\n this.pos++;\n for (let i = this.pos, l = 0; i < this.data.length && l < 65536; i++, l++) {\n const ch = this.data[i];\n if (ch === 92 || ch < 32 || ch >= 128) {\n break;\n }\n if (ch === 34) {\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 const startPos = this.pos;\n const chars = [];\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) {\n ch -= 48;\n } else if (ch >= 97 && ch <= 102) {\n ch = ch - 97 + 10;\n } else if (ch >= 65 && ch <= 70) {\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 const readUtf8Char = () => {\n const firstByte = this.ch();\n let codePoint = null;\n let bytesPerSequence = firstByte > 239 ? 4 : firstByte > 223 ? 3 : firstByte > 191 ? 2 : 1;\n if (this.pos + bytesPerSequence > this.data.length) {\n throw new Error(`${ decodeErrPrefix } unexpected unicode sequence at position ${ this.pos }`);\n }\n let secondByte, thirdByte, fourthByte, tempCodePoint;\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 128) {\n codePoint = firstByte;\n }\n break;\n case 2:\n secondByte = this.data[this.pos + 1];\n if ((secondByte & 192) === 128) {\n tempCodePoint = (firstByte & 31) << 6 | secondByte & 63;\n if (tempCodePoint > 127) {\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 & 192) === 128 && (thirdByte & 192) === 128) {\n tempCodePoint = (firstByte & 15) << 12 | (secondByte & 63) << 6 | thirdByte & 63;\n if (tempCodePoint > 2047 && (tempCodePoint < 55296 || tempCodePoint > 57343)) {\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 & 192) === 128 && (thirdByte & 192) === 128 && (fourthByte & 192) === 128) {\n tempCodePoint = (firstByte & 15) << 18 | (secondByte & 63) << 12 | (thirdByte & 63) << 6 | fourthByte & 63;\n if (tempCodePoint > 65535 && tempCodePoint < 1114112) {\n codePoint = tempCodePoint;\n }\n }\n }\n if (codePoint === null) {\n codePoint = 65533;\n bytesPerSequence = 1;\n } else if (codePoint > 65535) {\n codePoint -= 65536;\n chars.push(codePoint >>> 10 & 1023 | 55296);\n codePoint = 56320 | codePoint & 1023;\n }\n chars.push(codePoint);\n this.pos += bytesPerSequence;\n };\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:\n chars.push(8);\n break;\n case 116:\n chars.push(9);\n break;\n case 110:\n chars.push(10);\n break;\n case 102:\n chars.push(12);\n break;\n case 114:\n chars.push(13);\n break;\n case 117:\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 < 128) {\n chars.push(ch);\n this.pos++;\n } else {\n readUtf8Char();\n }\n }\n }\n throw new Error(`${ decodeErrPrefix } unexpected end of string at position ${ this.pos }`);\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 this.expect([\n 110,\n 117,\n 108,\n 108\n ]);\n return new Token(Type.null, null, 4);\n case 102:\n this.expect([\n 102,\n 97,\n 108,\n 115,\n 101\n ]);\n return new Token(Type.false, false, 5);\n case 116:\n this.expect([\n 116,\n 114,\n 117,\n 101\n ]);\n return new Token(Type.true, true, 4);\n case 45:\n case 48:\n case 49:\n case 50:\n case 51:\n case 52:\n case 53:\n case 54:\n case 55:\n case 56:\n case 57:\n return this.parseNumber();\n default:\n throw new Error(`${ decodeErrPrefix } unexpected character at position ${ this.pos }`);\n }\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 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': {\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 default:\n throw new Error(`${ decodeErrPrefix } unexpected parse state at position ${ this.pos }; this shouldn't happen`);\n }\n }\n}\nfunction decode(data, options) {\n options = Object.assign({ tokenizer: new Tokenizer(data, options) }, options);\n return _decode(data, options);\n}\nexport {\n decode,\n Tokenizer\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", "/* 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').ToString<T>} ToString\n */\n/**\n * @typedef {import('cborg/interface').DecodeTokenizer} DecodeTokenizer\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>} data\n * @returns {T}\n */\nexport const decode = (data) => {\n // the tokenizer is stateful so we need a single instance of it\n const options = Object.assign(decodeOptions, { tokenizer: new DagJsonTokenizer(data, decodeOptions) })\n return cborgJson.decode(data, 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", "export const PACKAGE_VERSION = \"0.14.4\";\n", "import { format, parse, ToString } from '@ipld/dag-json'\nimport { AnyBlock, AnyLink, DbMeta } from './types'\n\nimport { PACKAGE_VERSION } from './version'\nimport type { Loader } from './loader'\nconst match = PACKAGE_VERSION.match(/^([^.]*\\.[^.]*)/)\nif (!match) throw new Error('invalid version: ' + PACKAGE_VERSION)\nexport const STORAGE_VERSION = match[0]\n\nabstract class VersionedStore {\n STORAGE_VERSION: string = STORAGE_VERSION\n name: string\n constructor(name: string) {\n this.name = name\n }\n}\n\nexport abstract class MetaStore extends VersionedStore {\n tag: string = 'header-base'\n\n makeHeader({ car, key }: DbMeta): ToString<DbMeta> {\n const encoded = format({ car, key } as DbMeta)\n return encoded\n }\n\n parseHeader(headerData: ToString<DbMeta>): DbMeta {\n const got = parse<DbMeta>(headerData)\n return got\n }\n\n abstract load(branch?: string): Promise<DbMeta[] | null>\n abstract save(dbMeta: DbMeta, branch?: string): Promise<DbMeta[] | null>\n}\n\ntype DataSaveOpts = {\n public?: boolean\n}\n\nexport abstract class DataStore {\n tag: string = 'car-base'\n\n STORAGE_VERSION: string = STORAGE_VERSION\n loader: Loader\n constructor(loader: Loader) {\n this.loader = loader\n }\n\n abstract load(cid: AnyLink): Promise<AnyBlock>\n abstract save(car: AnyBlock, opts?: DataSaveOpts): Promise<void | AnyLink>\n abstract remove(cid: AnyLink): Promise<void>\n}\n", "type QueueFunction = () => Promise<void>;\n\nexport class CommitQueue<T = void> {\n private queue: QueueFunction[] = [];\n private 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 private 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 pLimit from 'p-limit';\nimport { AnyLink, CommitOpts, DbMeta } from './types';\nimport { cidListIncludes, type Loader } from './loader';\nimport { DbLoader } from './loaders';\nimport { STORAGE_VERSION } from './store';\nimport { CommitQueue } from './commit-queue'\n\n\nexport type WALState = {\n operations: DbMeta[];\n noLoaderOps: DbMeta[];\n fileOperations: { cid: AnyLink; public: boolean; }[];\n};\n\nexport abstract class RemoteWAL {\n tag: string = 'rwal-base';\n\n STORAGE_VERSION: string = STORAGE_VERSION;\n loader: Loader;\n ready: Promise<void>;\n\n walState: WALState = { operations: [], noLoaderOps: [], fileOperations: [] };\n processing: Promise<void> | undefined = undefined;\n private processQueue = new CommitQueue<void>();\n\n constructor(loader: Loader) {\n this.loader = loader;\n this.ready = (async () => {\n const walState = await this.load().catch(e => {\n console.error('error loading wal', e);\n return null;\n });\n this.walState.operations = walState?.operations || [];\n this.walState.fileOperations = walState?.fileOperations || [];\n })();\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 ||\n this.walState.fileOperations.length ||\n 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 | AnyLink>[] = [];\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 const car = await this.loader.carStore!.load(dbMeta.car).catch(() => null)\n if (!car) {\n if (cidListIncludes(this.loader.carLog, dbMeta.car))\n throw new Error(`missing car ${dbMeta.car.toString()}`)\n } else {\n await this.loader.remoteCarStore!.save(car)\n }\n this.walState.noLoaderOps = this.walState.noLoaderOps.filter(op => op !== dbMeta)\n })\n uploads.push(uploadP)\n }\n\n for (const dbMeta of operations) {\n const uploadP = limit(async () => {\n const car = await this.loader.carStore!.load(dbMeta.car).catch(() => null)\n if (!car) {\n if (cidListIncludes(this.loader.carLog, dbMeta.car))\n throw new Error(`missing car ${dbMeta.car.toString()}`)\n } else {\n await this.loader.remoteCarStore!.save(car)\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 as DbLoader;\n for (const { cid: fileCid, public: publicFile } of fileOperations) {\n const uploadP = limit(async () => {\n const fileBlock = 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 console.error('error uploading', JSON.stringify(errors));\n throw 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 console.error('error saving remote meta', e);\n this.walState.operations.push(lastOp);\n throw e;\n });\n }\n } finally {\n await this.save(this.walState);\n }\n })();\n this.loader.remoteMetaLoading = rmlp;\n await rmlp;\n }\n\n abstract load(branch?: string): Promise<WALState | null>;\n abstract save(state: WALState, branch?: string): Promise<void>;\n}\n", "/* eslint-disable import/first */\nimport { format, parse, ToString } from '@ipld/dag-json'\nimport { AnyBlock, AnyLink, DbMeta } from './types'\nimport { DataStore as DataStoreBase, MetaStore as MetaStoreBase } from './store'\nimport { RemoteWAL as RemoteWALBase, WALState } from './remote-wal'\n\n// ts-unused-exports:disable-next-line\nexport class DataStore extends DataStoreBase {\n tag: string = 'car-mem'\n store = new Map<string, Uint8Array>()\n\n async load(cid: AnyLink): Promise<AnyBlock> {\n const bytes = this.store.get(cid.toString())\n if (!bytes) throw new Error(`missing memory block ${cid.toString()}`)\n return { cid, bytes }\n }\n\n async save(car: AnyBlock): Promise<void> {\n this.store.set(car.cid.toString(), car.bytes)\n }\n\n async remove(cid: AnyLink): Promise<void> {\n this.store.delete(cid.toString())\n }\n}\n\n// ts-unused-exports:disable-next-line\nexport class RemoteWAL extends RemoteWALBase {\n tag: string = 'wal-mem'\n store = new Map<string, string>()\n\n headerKey(branch: string) {\n // remove 'public' on next storage version bump\n return `fp.${this.STORAGE_VERSION}.wal.${this.loader.name}.${branch}`\n }\n\n // eslint-disable-next-line @typescript-eslint/require-await\n async load(branch = 'main'): Promise<WALState | null> {\n try {\n const bytesString = this.store.get(this.headerKey(branch))\n if (!bytesString) return null\n return parse<WALState>(bytesString)\n } catch (e) {\n return null\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/require-await\n async save(state: WALState, branch = 'main'): Promise<void> {\n try {\n const encoded: ToString<WALState> = format(state)\n this.store.set(this.headerKey(branch), encoded)\n } catch (e) {\n console.error('error saving wal', e)\n throw e\n }\n }\n}\n\n// ts-unused-exports:disable-next-line\nexport class MetaStore extends MetaStoreBase {\n tag: string = 'header-mem'\n store = new Map<string, string>()\n\n headerKey(branch: string) {\n return `fp.${this.STORAGE_VERSION}.meta.${this.name}.${branch}`\n }\n\n // eslint-disable-next-line @typescript-eslint/require-await\n async load(branch: string = 'main'): Promise<DbMeta[] | null> {\n try {\n const bytesString = this.store.get(this.headerKey(branch))\n if (!bytesString) return null\n // browser assumes a single writer process\n // to support concurrent updates to the same database across multiple tabs\n // we need to implement the same kind of mvcc.crdt solution as in store-fs and connect-s3\n return [this.parseHeader(bytesString)]\n } catch (e) {\n return null\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/require-await\n async save(meta: DbMeta, branch: string = 'main') {\n try {\n const headerKey = this.headerKey(branch)\n const bytes = this.makeHeader(meta)\n this.store.set(headerKey, bytes)\n return null\n } catch (e) {\n return null\n }\n }\n}\n", "import pLimit from 'p-limit'\nimport { CarReader } from '@ipld/car'\nimport { encodeCarFile, encodeCarHeader, parseCarFile } from './loader-helpers'\nimport { decodeEncryptedCar, encryptedEncodeCarFile } from './encrypt-helpers'\nimport { getCrypto, randomBytes } from './crypto-web'\n\nimport { DataStore, MetaStore, RemoteWAL } from './store-browser'\nimport { DataStore as AbstractDataStore, MetaStore as AbstractMetaStore } from './store'\n\nimport { CID } from 'multiformats'\nimport type { Transaction } from './transaction'\nimport type {\n AnyBlock, AnyCarHeader, AnyLink, BulkResult,\n CarLoaderHeader,\n CommitOpts,\n DbCarHeader,\n DbMeta, FileCarHeader, FileResult, FireproofOptions\n} from './types'\n// import type { Connection } from './connection'\nimport { isFileResult, type DbLoader, type IndexerResult } from './loaders'\nimport { CommitQueue } from './commit-queue'\n\n\n\n\n// ts-unused-exports:disable-next-line\nexport function cidListIncludes(list: AnyLink[], cid: AnyLink) {\n return list.some(c => c.equals(cid))\n}\nexport function uniqueCids(list: AnyLink[], remove: Set<string> = new Set()): AnyLink[] {\n const byString = new Map<string, AnyLink>()\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\n// ts-unused-exports:disable-next-line\nexport function toHexString(byteArray: Uint8Array) {\n return Array.from(byteArray)\n .map(byte => byte.toString(16).padStart(2, '0'))\n .join('')\n}\n\nabstract class AbstractRemoteMetaStore extends AbstractMetaStore {\n abstract handleByteHeads(byteHeads: Uint8Array[], branch?: string): Promise<DbMeta[]>\n}\n\nexport abstract class Loader {\n name: string\n opts: FireproofOptions = {}\n commitQueue = new CommitQueue<AnyLink>()\n isCompacting = false\n isWriting = false\n\n remoteMetaLoading: Promise<void> | undefined\n remoteMetaStore: AbstractRemoteMetaStore | undefined\n remoteCarStore: AbstractDataStore | undefined\n remoteWAL: RemoteWAL\n metaStore: MetaStore\n carStore: DataStore\n carLog: AnyLink[] = []\n carReaders: Map<string, Promise<CarReader>> = new Map()\n ready: Promise<void>\n key: string | undefined\n keyId: string | undefined\n seenCompacted: Set<string> = new Set()\n\n private getBlockCache: Map<string, AnyBlock> = new Map()\n private seenMeta: Set<string> = new Set()\n\n static defaultHeader: AnyCarHeader\n abstract defaultHeader: AnyCarHeader\n\n constructor(name: string, opts?: FireproofOptions) {\n this.name = name\n this.opts = opts || this.opts\n this.metaStore = new MetaStore(this.name)\n this.carStore = new DataStore(this)\n this.remoteWAL = new RemoteWAL(this)\n this.ready = Promise.resolve().then(async () => {\n if (!this.metaStore || !this.carStore || !this.remoteWAL)\n throw new Error('stores not initialized')\n const metas = this.opts.meta ? [this.opts.meta] : await this.metaStore.load('main')\n if (metas) {\n await this.handleDbMetasFromStore(metas)\n }\n })\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 _readyForMerge() {}\n async _setWaitForWrite(_writing: () => Promise<void>) {}\n\n async handleDbMetasFromStore(metas: DbMeta[]): Promise<void> { \n for (const meta of metas) {\n const writingFn = async () => {\n this.isWriting = true\n await this.mergeDbMetaIntoClock(meta)\n this.isWriting = false\n }\n this._setWaitForWrite(writingFn)\n await writingFn()\n }\n }\n\n async mergeDbMetaIntoClock(meta: DbMeta): Promise<void> {\n const ld = this as unknown as DbLoader\n await ld.compacting\n if (this.isCompacting) {\n throw new Error('cannot merge while compacting')\n }\n if (this.seenMeta.has(meta.car.toString())) return\n this.seenMeta.add(meta.car.toString())\n\n if (meta.key) {\n await this.setKey(meta.key)\n }\n if (cidListIncludes(this.carLog, meta.car)) {\n return\n }\n const carHeader = (await this.loadCarHeaderFromMeta(meta)) as DbCarHeader\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)\n this.carLog = [...uniqueCids([meta.car, ...this.carLog, ...carHeader.cars], this.seenCompacted)]\n await this._applyCarHeader(carHeader)\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({ car: cid }: DbMeta): Promise<CarLoaderHeader> {\n const reader = await this.loadCar(cid)\n return (await parseCarFile(reader)) as CarLoaderHeader\n }\n\n protected abstract _applyCarHeader(_carHeader: CarLoaderHeader, snap?: boolean): Promise<void>\n\n // eslint-disable-next-line @typescript-eslint/require-await\n async _getKey() {\n if (this.key) return this.key\n // generate a random key\n if (!this.opts.public) {\n if (getCrypto()) {\n await this.setKey(toHexString(randomBytes(32)))\n } else {\n console.warn('missing crypto module, using public mode')\n }\n }\n return this.key\n }\n\n async commit(\n t: Transaction,\n done: IndexerResult | BulkResult | FileResult,\n opts: CommitOpts = { noLoader: false, compact: false }\n ): Promise<AnyLink> {\n return this.commitQueue.enqueue(() => this._commitInternal(t, done, opts))\n }\n\n async _commitInternal(\n t: Transaction,\n done: IndexerResult | BulkResult | FileResult,\n opts: CommitOpts = { noLoader: false, compact: false }\n ): Promise<AnyLink> {\n await this.ready\n const fp = this.makeCarHeader(done, this.carLog, !!opts.compact)\n let roots: AnyLink[] = []\n // @ts-ignore\n if (fp.files) {\n // @ts-ignore\n roots = fp.files as AnyLink[]\n } else {\n const header = await encodeCarHeader(fp)\n await t.put(header.cid, header.bytes)\n roots = [header.cid]\n // const got = await t.get(header.cid)\n // if (!got) throw new Error('missing header block: '+header.cid.toString())\n }\n\n const theKey = opts.public ? null : await this._getKey()\n const { cid, bytes } = theKey\n ? await encryptedEncodeCarFile(theKey, roots[0], t)\n : await encodeCarFile(roots, t)\n\n if (isFileResult(done)) {\n // move to the db loader?\n const dbLoader = this as unknown as DbLoader\n await dbLoader.fileStore!.save({ cid, bytes })\n await this.remoteWAL!.enqueueFile(cid, opts.public)\n return cid\n }\n // console.log('saving car', cid.toString())\n await this.carStore!.save({ cid, bytes })\n\n const newDbMeta = { car: cid, key: theKey || null } as DbMeta\n await this.remoteWAL!.enqueue(newDbMeta, opts)\n\n await this.metaStore!.save(newDbMeta)\n\n if (opts.compact) {\n const fpCar = fp as CarLoaderHeader\n fpCar.compact.map(c => c.toString()).forEach(this.seenCompacted.add, this.seenCompacted)\n this.carLog = [...uniqueCids([cid, ...this.carLog], this.seenCompacted)]\n setTimeout(async () => {\n if (this.remoteMetaLoading) await this.remoteMetaLoading\n for (const cid of fpCar.compact) {\n await this.carStore!.remove(cid)\n } // todo instead we should have no delay, but delete previous compaction's old files\n }, 5000)\n } else {\n this.carLog.unshift(cid)\n }\n return cid\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(): AsyncIterableIterator<AnyBlock> {\n await this.ready\n for (const cid of this.carLog) {\n const reader = await this.loadCar(cid)\n if (!reader) throw new Error(`missing car reader ${cid.toString()}`)\n for await (const block of reader.blocks()) {\n yield block\n }\n }\n }\n\n async getBlock(cid: AnyLink): Promise<AnyBlock | undefined> {\n await this.ready\n const sCid = cid.toString()\n if (this.getBlockCache.has(sCid)) return this.getBlockCache.get(sCid)\n const got = await Promise.any(\n this.carLog.map(async carCid => {\n const reader = await this.loadCar(carCid)\n if (!reader) {\n throw new Error(`missing car reader ${carCid.toString()}`)\n }\n const block = await reader.get(cid as CID)\n if (block) {\n return block\n }\n throw new Error(`block not in reader: ${cid.toString()}`)\n })\n ).catch(() => undefined)\n if (got) {\n this.getBlockCache.set(sCid, got)\n }\n return got\n }\n\n protected abstract makeCarHeader(\n _result: BulkResult | IndexerResult | FileResult,\n _cars: AnyLink[],\n _compact: boolean\n ): AnyCarHeader | FileCarHeader\n\n protected async loadCar(cid: AnyLink): Promise<CarReader> {\n if (!this.carStore) throw new Error('car store not initialized')\n return await this.storesLoadCar(cid, this.carStore, this.remoteCarStore)\n }\n\n protected async storesLoadCar(\n cid: AnyLink,\n local: AbstractDataStore,\n remote?: AbstractDataStore,\n publicFiles?: boolean\n ): Promise<CarReader> {\n const cidString = cid.toString()\n if (!this.carReaders.has(cidString)) {\n this.carReaders.set(\n cidString,\n (async () => {\n let loadedCar: AnyBlock | null = null\n try {\n loadedCar = await local.load(cid)\n } catch (e) {\n if (remote) {\n const remoteCar = await remote.load(cid)\n if (remoteCar) {\n // todo test for this\n await local.save(remoteCar)\n loadedCar = remoteCar\n }\n }\n }\n if (!loadedCar) throw new Error(`missing car file ${cidString}`)\n const rawReader = await CarReader.fromBytes(loadedCar.bytes)\n const readerP = publicFiles\n ? Promise.resolve(rawReader)\n : this.ensureDecryptedReader(rawReader)\n this.carReaders.set(cidString, readerP)\n return readerP\n })().catch(e => {\n this.carReaders.delete(cidString)\n throw e\n })\n )\n }\n return this.carReaders.get(cidString) as Promise<CarReader>\n }\n\n protected async ensureDecryptedReader(reader: CarReader) {\n const theKey = await this._getKey()\n if (!theKey) return reader\n const { blocks, root } = await decodeEncryptedCar(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) throw new Error('key mismatch')\n this.key = key\n const crypto = getCrypto()\n if (!crypto) throw new Error('missing crypto module')\n const subtle = crypto.subtle\n const encoder = new TextEncoder()\n const data = encoder.encode(key)\n const hashBuffer = await subtle.digest('SHA-256', 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\nexport interface Connection {\n loader: Loader\n loaded: Promise<void>\n}\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-ignore\nimport charwise from 'charwise'\n// @ts-ignore\nimport * as DbIndex from 'prolly-trees/db-index'\n// @ts-ignore\nimport { bf, simpleCompare } from 'prolly-trees/utils'\n// @ts-ignore\nimport { nocache as cache } from 'prolly-trees/cache'\n// @ts-ignore\nimport { ProllyNode as BaseNode } from 'prolly-trees/base'\n\nimport { AnyLink, DocUpdate, MapFn, DocFragment, BlockFetcher, IndexKey, IndexUpdate, QueryOpts, IndexRow, AnyBlock, Doc } from './types'\nimport { Transaction } from './transaction'\nimport { CRDT } from './crdt'\n\nexport class IndexTree {\n cid: AnyLink | null = null\n root: ProllyNode | null = null\n}\n\ntype CompareRef = string | number\ntype CompareKey = [string | number, CompareRef]\n\nconst 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 // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n return simpleCompare(aRef, bRef) as number\n}\n\nconst compare = (a: CompareKey, b: CompareKey) => {\n const [aKey, aRef] = a\n const [bKey, bRef] = b\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call\n const comp: number = simpleCompare(aKey, bKey)\n if (comp !== 0) return comp\n return refCompare(aRef, bRef)\n}\n\n// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call\nexport const byKeyOpts: StaticProllyOptions = { cache, chunker: bf(30), codec, hasher, compare }\n// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call\nexport const byIdOpts: StaticProllyOptions = { cache, chunker: bf(30), codec, hasher, compare: simpleCompare }\n\nexport function indexEntriesForChanges(\n changes: DocUpdate[],\n mapFn: MapFn\n): { key: [string, string]; value: DocFragment }[] {\n const indexEntries: { key: [string, string]; value: DocFragment }[] = []\n changes.forEach(({ key: _id, value, del }) => {\n if (del || !value) return\n let mapCalled = false\n const mapReturn = mapFn({ _id, ...value }, (k: DocFragment, v?: DocFragment) => {\n mapCalled = true\n if (typeof k === 'undefined') return\n indexEntries.push({\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call\n key: [charwise.encode(k) as string, _id],\n value: v || null\n })\n })\n if (!mapCalled && mapReturn) {\n indexEntries.push({\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call\n key: [charwise.encode(mapReturn) as string, _id],\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(tblocks: Transaction, inIndex: IndexTree, indexEntries: IndexUpdate[], opts: StaticProllyOptions): Promise<IndexTree> {\n if (!indexEntries.length) return inIndex\n if (!inIndex.root) {\n if (!inIndex.cid) {\n let returnRootBlock: Block | null = null\n let returnNode: ProllyNode | null = null\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call\n for await (const node of await DbIndex.create({ get: makeProllyGetBlock(tblocks), list: indexEntries, ...opts }) as ProllyNode[]) {\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 // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call\n inIndex.root = await DbIndex.load({ cid: inIndex.cid, get: makeProllyGetBlock(tblocks), ...opts }) as ProllyNode\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: null, cid: null }\n }\n}\n\nexport async function loadIndex(tblocks: BlockFetcher, cid: AnyLink, opts: StaticProllyOptions): Promise<ProllyNode> {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call\n return await DbIndex.load({ cid, get: makeProllyGetBlock(tblocks), ...opts }) as ProllyNode\n}\n\nexport async function applyQuery(crdt: CRDT, resp: { result: IndexRow[] }, query: QueryOpts) {\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 ? ({ _id: row.id, ...val.doc } as Doc) : null\n return { ...row, doc }\n })\n )\n }\n return {\n rows: resp.result.map(row => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call\n row.key = (charwise.decode(row.key) as IndexKey)\n if (row.row && !row.value) {\n row.value = row.row\n delete row.row\n }\n return row\n })\n }\n}\n\nexport function encodeRange(range: [DocFragment, DocFragment]): [IndexKey, IndexKey] {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call\n return range.map(key => charwise.encode(key) as IndexKey) as [IndexKey, IndexKey]\n}\n\nexport function encodeKey(key: DocFragment): string {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call\n return charwise.encode(key) as string\n}\n\n// ProllyNode type based on the ProllyNode from 'prolly-trees/base'\ninterface ProllyNode extends BaseNode {\n getAllEntries(): PromiseLike<{ [x: string]: any; result: IndexRow[] }>\n getMany(removeIds: string[]): Promise<{ [x: string]: any; result: IndexKey[] }>\n range(a: IndexKey, b: IndexKey): Promise<{ result: IndexRow[] }>\n get(key: string): Promise<{ result: IndexRow[] }>\n bulk(bulk: IndexUpdate[]): PromiseLike<{ root: ProllyNode | null; blocks: Block[] }>\n address: Promise<Link>\n distance: number\n compare: (a: any, b: any) => number\n cache: any\n block: Promise<Block>\n}\n\ninterface StaticProllyOptions {\n cache: any\n chunker: (entry: any, distance: number) => boolean\n codec: any\n hasher: any\n compare: (a: any, b: any) => 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 type { ClockHead, DocUpdate, MapFn, IndexUpdate, QueryOpts, IdxMeta, DocFragment } from './types'\nimport { IndexBlockstore } from './transaction'\nimport { bulkIndex, indexEntriesForChanges, byIdOpts, byKeyOpts, IndexTree, applyQuery, encodeRange, encodeKey, loadIndex } from './indexer-helpers'\nimport { CRDT } from './crdt'\n\nexport function index({ _crdt }: { _crdt: CRDT }, name: string, mapFn?: MapFn, meta?: IdxMeta): Index {\n if (mapFn && meta) throw new Error('cannot provide both mapFn and meta')\n if (mapFn && mapFn.constructor.name !== 'Function') throw new Error('mapFn must be a function')\n if (_crdt.indexers.has(name)) {\n const idx = _crdt.indexers.get(name)!\n idx.applyMapFn(name, mapFn, meta)\n } else {\n const idx = new Index(_crdt, name, mapFn, meta)\n _crdt.indexers.set(name, idx)\n }\n return _crdt.indexers.get(name)!\n}\n\nexport class Index {\n blocks: IndexBlockstore\n crdt: CRDT\n name: string | null = null\n mapFn: MapFn | null = null\n mapFnString: string = ''\n byKey = new IndexTree()\n byId = new IndexTree()\n indexHead: ClockHead | undefined = undefined\n includeDocsDefault: boolean = false\n initError: Error | null = null\n ready: Promise<void>\n\n constructor(crdt: CRDT, name: string, mapFn?: MapFn, meta?: IdxMeta) {\n this.blocks = crdt.indexBlocks\n this.crdt = crdt\n this.applyMapFn(name, mapFn, meta)\n if (!(this.mapFnString || this.initError)) throw new Error('missing mapFnString')\n this.ready = this.blocks.ready.then(() => { })\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, meta?: IdxMeta) {\n if (mapFn && meta) throw new Error('cannot provide both mapFn and meta')\n if (this.name && this.name !== name) throw new Error('cannot change name')\n this.name = name\n try {\n if (meta) {\n // hydrating from header\n if (this.indexHead &&\n this.indexHead.map(c => c.toString()).join() !== meta.head.map(c => c.toString()).join()) {\n throw new Error('cannot apply meta to existing index')\n }\n\n if (this.mapFnString) {\n // we already initialized from application code\n if (this.mapFnString !== meta.map) {\n console.log('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()) throw new Error('cannot apply different mapFn app2')\n }\n } else {\n // application code is creating an index\n if (!mapFn) {\n mapFn = makeMapFnFromName(name)\n }\n if (this.mapFnString) {\n // we already loaded from a header\n if (this.mapFnString !== mapFn.toString()) throw new Error('cannot apply different mapFn app')\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 = {}) {\n // this._resetIndex()\n await this._updateIndex()\n await this._hydrateIndex()\n if (!this.byKey.root) return await applyQuery(this.crdt, { result: [] }, opts)\n if (this.includeDocsDefault && opts.includeDocs === undefined) opts.includeDocs = true\n if (opts.range) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call\n const { result, ...all } = await this.byKey.root.range(...encodeRange(opts.range))\n return await applyQuery(this.crdt, { result, ...all }, opts)\n }\n if (opts.key) {\n const encodedKey = encodeKey(opts.key)\n return await applyQuery(this.crdt, await this.byKey.root.get(encodedKey), opts)\n }\n if (Array.isArray(opts.keys)) {\n const results = await Promise.all(opts.keys.map(async (key: DocFragment) => {\n const encodedKey = encodeKey(key)\n return (await applyQuery(this.crdt, await this.byKey.root!.get(encodedKey), opts)).rows\n }))\n return { rows: results.flat() }\n }\n if (opts.prefix) {\n if (!Array.isArray(opts.prefix)) opts.prefix = [opts.prefix]\n const start = [...opts.prefix, NaN]\n const end = [...opts.prefix, Infinity]\n const encodedR = encodeRange([start, end])\n return await applyQuery(this.crdt, await this.byKey.root.range(...encodedR), opts)\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call\n const { result, ...all } = await this.byKey.root.getAllEntries() // funky return type\n return await applyQuery(this.crdt, {\n result: result.map(({ key: [k, id], value }) =>\n ({ key: k, id, value })),\n ...all\n }, opts)\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(this.blocks, this.byId.cid, byIdOpts)\n this.byKey.root = await loadIndex(this.blocks, this.byKey.cid, byKeyOpts)\n }\n\n async _updateIndex() {\n await this.ready\n if (this.initError) throw this.initError\n if (!this.mapFn) throw new Error('No map function defined')\n let result: DocUpdate[], 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 }\n }\n let staleKeyIndexEntries: IndexUpdate[] = []\n let removeIdIndexEntries: IndexUpdate[] = []\n if (this.byId.root) {\n const removeIds = result.map(({ key }) => key)\n const { result: oldChangeEntries } = await this.byId.root.getMany(removeIds) as { result: Array<[string, string] | string> }\n staleKeyIndexEntries = oldChangeEntries.map(key => ({ key, del: true }))\n removeIdIndexEntries = oldChangeEntries.map((key) => ({ key: key[1], del: true }))\n }\n const indexEntries = indexEntriesForChanges(result, this.mapFn) // use a getter to translate from string\n const byIdIndexEntries: DocUpdate[] = indexEntries.map(({ key }) => ({ key: key[1], value: key }))\n const indexerMeta: Map<string, IdxMeta> = new Map()\n\n for (const [name, indexer] of this.crdt.indexers) {\n if (indexer.indexHead) {\n indexerMeta.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 return await this.blocks.transaction(async (tblocks): Promise<IdxMeta> => {\n this.byId = await bulkIndex(\n tblocks,\n this.byId,\n removeIdIndexEntries.concat(byIdIndexEntries),\n byIdOpts\n )\n this.byKey = await bulkIndex(tblocks, this.byKey, staleKeyIndexEntries.concat(indexEntries), byKeyOpts)\n this.indexHead = head\n return { byId: this.byId.cid, byKey: this.byKey.cid, head, map: this.mapFnString, name: this.name } as IdxMeta\n }, indexerMeta)\n }\n}\n\nfunction makeMapFnFromName(name: string): MapFn {\n return (doc) => {\n if (doc[name]) return doc[name]\n }\n}\n", "// Linter can see that API is used in types.\n// eslint-disable-next-line\nimport * as API from \"./link/interface.js\"\nimport { CID, format, toJSON, fromJSON } from './cid.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 *\n * @param {API.MultihashDigest<typeof SHA_256_CODE>} digest - Multihash.\n * @returns {API.LegacyLink}\n */\nexport const createLegacy = digest => CID.create(0, DAG_PB_CODE, digest)\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 {API.Link<Data, Code, Alg>}\n */\nexport const create = (code, digest) => CID.create(1, code, digest)\n\n/**\n * Type predicate returns true if value is the link.\n *\n * @template {API.Link<unknown, number, number, 0|1>} L\n * @param {unknown|L} value\n * @returns {value is L & CID}\n */\nexport const isLink = value => {\n if (value == null) {\n return false\n }\n\n const withSlash = /** @type {{'/'?: Uint8Array, bytes: Uint8Array}} */ (value)\n\n if (withSlash['/'] != null && withSlash['/'] === withSlash.bytes) {\n return true\n }\n\n const withAsCID = /** @type {{'asCID'?: unknown}} */ (value)\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 *\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 {API.Link<Data, Code, Alg, Ver>}\n */\nexport const parse = (source, base) => CID.parse(source, base)\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 *\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 {API.Link<Data, Code, Alg, Ver>}\n */\nexport const decode = bytes => CID.decode(bytes)\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", "import { bytes as binary, CID } from './index.js'\n// Linter can see that API is used in types.\n// eslint-disable-next-line\nimport * as API from './interface.js'\n\nfunction readonly ({ enumerable = true, configurable = false } = {}) {\n return { enumerable, configurable, writable: false }\n}\n\n/**\n * @param {[string|number, string]} path\n * @param {any} value\n * @returns {Iterable<[string, CID]>}\n */\nfunction * linksWithin (path, value) {\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) {\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) {\n yield [path.join('/'), cid]\n } else {\n yield * links(value, path)\n }\n }\n }\n}\n\n/**\n * @template T\n * @param {T} source\n * @param {Array<string|number>} base\n * @returns {Iterable<[string, CID]>}\n */\nfunction * links (source, base) {\n if (source == null || source instanceof Uint8Array) {\n return\n }\n const cid = CID.asCID(source)\n if (cid) {\n yield [base.join('/'), cid]\n }\n for (const [key, value] of Object.entries(source)) {\n const path = /** @type {[string|number, string]} */ ([...base, key])\n yield * linksWithin(path, value)\n }\n}\n\n/**\n * @param {[string|number, string]} path\n * @param {any} value\n * @returns {Iterable<string>}\n */\nfunction * treeWithin (path, value) {\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)) {\n yield * tree(element, elementPath)\n }\n }\n } else {\n yield * tree(value, path)\n }\n}\n\n/**\n * @template T\n * @param {T} source\n * @param {Array<string|number>} base\n * @returns {Iterable<string>}\n */\nfunction * tree (source, base) {\n if (source == null || typeof source !== 'object') {\n return\n }\n for (const [key, value] of Object.entries(source)) {\n const path = /** @type {[string|number, string]} */ ([...base, key])\n yield path.join('/')\n if (value != null && !(value instanceof Uint8Array) && typeof value === 'object' && !CID.asCID(value)) {\n yield * treeWithin(path, value)\n }\n }\n}\n\n/**\n *\n * @template T\n * @param {T} source\n * @param {string[]} path\n * @returns {API.BlockCursorView<unknown>}\n */\nfunction get (source, path) {\n let node = /** @type {Record<string, any>} */(source)\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) {\n return { value: cid, remaining: path.slice(index + 1).join('/') }\n }\n }\n return { value: node }\n}\n\n/**\n * @template {unknown} T - Logical type of the data encoded in the block\n * @template {number} C - multicodec code corresponding to codec used to encode the block\n * @template {number} A - multicodec code corresponding to the hashing algorithm used in CID creation.\n * @template {API.Version} V - CID version\n * @implements {API.BlockView<T, C, A, V>}\n */\nclass Block {\n /**\n * @param {object} options\n * @param {CID<T, C, A, V>} options.cid\n * @param {API.ByteView<T>} options.bytes\n * @param {T} options.value\n */\n constructor ({ cid, bytes, value }) {\n if (!cid || !bytes || 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 () {\n return links(this.value, [])\n }\n\n tree () {\n return tree(this.value, [])\n }\n\n /**\n *\n * @param {string} [path]\n * @returns {API.BlockCursorView<unknown>}\n */\n get (path = '/') {\n return get(this.value, path.split('/').filter(Boolean))\n }\n}\n\n/**\n * @template {unknown} T - Logical type of the data encoded in the block\n * @template {number} Code - multicodec code corresponding to codec used to encode the block\n * @template {number} Alg - multicodec code corresponding to the hashing algorithm used in CID creation.\n * @param {object} options\n * @param {T} options.value\n * @param {API.BlockEncoder<Code, T>} options.codec\n * @param {API.MultihashHasher<Alg>} options.hasher\n * @returns {Promise<API.BlockView<T, Code, Alg>>}\n */\nasync function encode ({ value, codec, hasher }) {\n if (typeof value === 'undefined') throw new Error('Missing required argument \"value\"')\n if (!codec || !hasher) throw new Error('Missing required argument: codec or hasher')\n\n const bytes = codec.encode(value)\n const hash = await hasher.digest(bytes)\n /** @type {CID<T, Code, Alg, 1>} */\n const cid = CID.create(\n 1,\n codec.code,\n hash\n )\n\n return new Block({ value, bytes, cid })\n}\n\n/**\n * @template {unknown} T - Logical type of the data encoded in the block\n * @template {number} Code - multicodec code corresponding to codec used to encode the block\n * @template {number} Alg - multicodec code corresponding to the hashing algorithm used in CID creation.\n * @param {object} options\n * @param {API.ByteView<T>} options.bytes\n * @param {API.BlockDecoder<Code, T>} options.codec\n * @param {API.MultihashHasher<Alg>} options.hasher\n * @returns {Promise<API.BlockView<T, Code, Alg>>}\n */\nasync function decode ({ bytes, codec, hasher }) {\n if (!bytes) throw new Error('Missing required argument \"bytes\"')\n if (!codec || !hasher) throw new Error('Missing required argument: codec or hasher')\n\n const value = codec.decode(bytes)\n const hash = await hasher.digest(bytes)\n /** @type {CID<T, Code, Alg, 1>} */\n const cid = CID.create(1, codec.code, hash)\n\n return new Block({ value, bytes, cid })\n}\n\n/**\n * @typedef {object} RequiredCreateOptions\n * @property {CID} options.cid\n */\n\n/**\n * @template {unknown} T - Logical type of the data encoded in the block\n * @template {number} Code - multicodec code corresponding to codec used to encode the block\n * @template {number} Alg - multicodec code corresponding to the hashing algorithm used in CID creation.\n * @template {API.Version} V - CID version\n * @param {{ cid: API.Link<T, Code, Alg, V>, value:T, codec?: API.BlockDecoder<Code, T>, bytes: API.ByteView<T> }|{cid:API.Link<T, Code, Alg, V>, bytes:API.ByteView<T>, value?:void, codec:API.BlockDecoder<Code, T>}} options\n * @returns {API.BlockView<T, Code, Alg, V>}\n */\nfunction createUnsafe ({ bytes, cid, value: maybeValue, codec }) {\n const value = maybeValue !== undefined\n ? maybeValue\n : (codec && 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 // eslint-disable-next-line object-shorthand\n cid: /** @type {CID<T, Code, Alg, V>} */ (cid),\n bytes,\n value\n })\n}\n\n/**\n * @template {unknown} T - Logical type of the data encoded in the block\n * @template {number} Code - multicodec code corresponding to codec used to encode the block\n * @template {number} Alg - multicodec code corresponding to the hashing algorithm used in CID creation.\n * @template {API.Version} V - CID version\n * @param {object} options\n * @param {API.Link<T, Code, Alg, V>} options.cid\n * @param {API.ByteView<T>} options.bytes\n * @param {API.BlockDecoder<Code, T>} options.codec\n * @param {API.MultihashHasher<Alg>} options.hasher\n * @returns {Promise<API.BlockView<T, Code, Alg, V>>}\n */\nasync function create ({ bytes, cid, hasher, codec }) {\n if (!bytes) throw new Error('Missing required argument \"bytes\"')\n if (!hasher) 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\nexport { encode, decode, create, createUnsafe, Block }\n", "// @ts-check\n\nimport crypto from 'crypto'\nimport { from } from './hasher.js'\nimport { coerce } from '../bytes.js'\n\nexport const sha256 = from({\n name: 'sha2-256',\n code: 0x12,\n encode: (input) => coerce(crypto.createHash('sha256').update(input).digest())\n})\n\nexport const sha512 = from({\n name: 'sha2-512',\n code: 0x13,\n encode: input => coerce(crypto.createHash('sha512').update(input).digest())\n})\n", "import { Block, encode, decode } from 'multiformats/block'\nimport { sha256 } from 'multiformats/hashes/sha2'\nimport * as cbor from '@ipld/dag-cbor'\n\n/**\n * @template T\n * @typedef {{ parents: EventLink<T>[], data: T }} EventView\n */\n\n/**\n * @template T\n * @typedef {import('multiformats').BlockView<EventView<T>>} EventBlockView\n */\n\n/**\n * @template T\n * @typedef {import('multiformats').Link<EventView<T>>} EventLink\n */\n\n/**\n * Advance the clock by adding an event.\n *\n * @template T\n * @param {import('./block').BlockFetcher} blocks Block storage.\n * @param {EventLink<T>[]} head The head of the clock.\n * @param {EventLink<T>} event The event to add.\n */\nexport async function advance (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<EventView<T>, typeof cbor.code, typeof sha256.code, 1>}\n * @implements {EventBlockView<T>}\n */\nexport class EventBlock extends Block {\n /**\n * @param {object} config\n * @param {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 {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 {import('./block').BlockFetcher} blocks */\n constructor (blocks) {\n /** @private */\n this._blocks = blocks\n }\n\n /**\n * @param {EventLink<T>} link\n * @returns {Promise<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 {EventView<T>} value\n * @returns {Promise<EventBlockView<T>>}\n */\nexport async function encodeEventBlock (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<EventBlockView<T>>}\n */\nexport async function decodeEventBlock (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 {EventLink<T>} a\n * @param {EventLink<T>} b\n */\nasync function contains (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 {import('./block').BlockFetcher} blocks Block storage.\n * @param {EventLink<T>[]} head\n * @param {object} [options]\n * @param {(b: EventBlockView<T>) => string} [options.renderNodeLabel]\n */\nexport async function * vis (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<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('./link').AnyLink} l */\nconst shortLink = l => `${String(l).slice(0, 4)}..${String(l).slice(-4)}`\n", "import { Block, encode, decode } from 'multiformats/block'\nimport { sha256 } from 'multiformats/hashes/sha2'\nimport * as cbor from '@ipld/dag-cbor'\n\n/**\n * @typedef {import('./link').AnyLink} ShardEntryValueValue\n * @typedef {[ShardLink]} ShardEntryLinkValue\n * @typedef {[ShardLink, import('./link').AnyLink]} ShardEntryLinkAndValueValue\n * @typedef {[key: string, value: ShardEntryValueValue]} ShardValueEntry\n * @typedef {[key: string, value: ShardEntryLinkValue | ShardEntryLinkAndValueValue]} ShardLinkEntry\n * @typedef {[key: string, value: ShardEntryValueValue | ShardEntryLinkValue | ShardEntryLinkAndValueValue]} ShardEntry\n * @typedef {ShardEntry[]} Shard\n * @typedef {import('multiformats').Link<Shard, typeof cbor.code, typeof sha256.code, 1>} ShardLink\n * @typedef {import('multiformats').BlockView<Shard, typeof cbor.code, typeof sha256.code, 1> & { prefix: string }} ShardBlockView\n */\n\n/**\n * @extends {Block<Shard, typeof cbor.code, typeof sha256.code, 1>}\n * @implements {ShardBlockView}\n */\nexport class ShardBlock extends Block {\n /**\n * @param {object} config\n * @param {ShardLink} config.cid\n * @param {Shard} 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 static create () {\n return encodeShardBlock([])\n }\n}\n\n/** @type {WeakMap<Uint8Array, ShardBlockView>} */\nconst decodeCache = new WeakMap()\n\n/**\n * @param {Shard} value\n * @param {string} [prefix]\n * @returns {Promise<ShardBlockView>}\n */\nexport async function encodeShardBlock (value, prefix) {\n const { cid, bytes } = await encode({ value, codec: cbor, hasher: sha256 })\n const block = new ShardBlock({ cid, value, bytes, prefix: prefix ?? '' })\n decodeCache.set(block.bytes, block)\n return block\n}\n\n/**\n * @param {Uint8Array} bytes\n * @param {string} [prefix]\n * @returns {Promise<ShardBlockView>}\n */\nexport async function decodeShardBlock (bytes, prefix) {\n const block = decodeCache.get(bytes)\n if (block) return block\n const { cid, value } = await decode({ bytes, codec: cbor, hasher: sha256 })\n if (!Array.isArray(value)) throw new Error(`invalid shard: ${cid}`)\n return new ShardBlock({ cid, value, bytes, prefix: prefix ?? '' })\n}\n\nexport class ShardFetcher {\n /** @param {import('./block').BlockFetcher} blocks */\n constructor (blocks) {\n this._blocks = blocks\n }\n\n /**\n * @param {ShardLink} link\n * @param {string} [prefix]\n * @returns {Promise<ShardBlockView>}\n */\n async get (link, prefix = '') {\n const block = await this._blocks.get(link)\n if (!block) throw new Error(`missing block: ${link}`)\n return decodeShardBlock(block.bytes, prefix)\n }\n}\n\n/**\n * @param {Shard} target Shard to put to.\n * @param {ShardEntry} entry\n * @returns {Shard}\n */\nexport function putEntry (target, entry) {\n if (!target.length) return [entry]\n\n /** @type {Shard} */\n const shard = []\n for (const [i, [k, v]] of target.entries()) {\n if (entry[0] === k) {\n // if new value is link to shard...\n if (Array.isArray(entry[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 && entry[1][1] == null) {\n shard.push([k, [entry[1][0], v[1]]])\n } else {\n shard.push(entry)\n }\n } else {\n // shard as well as value?\n /** @type {ShardEntry} */\n const newEntry = Array.isArray(v) ? [k, [v[0], entry[1]]] : entry\n shard.push(newEntry)\n }\n for (let j = i + 1; j < target.length; j++) {\n shard.push(target[j])\n }\n return shard\n }\n if (i === 0 && entry[0] < k) {\n shard.push(entry)\n for (let j = i; j < target.length; j++) {\n shard.push(target[j])\n }\n return shard\n }\n if (i > 0 && entry[0] > target[i - 1][0] && entry[0] < k) {\n shard.push(entry)\n for (let j = i; j < target.length; j++) {\n shard.push(target[j])\n }\n return shard\n }\n shard.push([k, v])\n }\n\n shard.push(entry)\n return shard\n}\n\n/**\n * @param {import('./shard').Shard} shard\n * @param {string} skey Shard key to use as a base.\n */\nexport function findCommonPrefix (shard, skey) {\n const startidx = shard.findIndex(([k]) => skey === k)\n if (startidx === -1) throw new Error(`key not found in shard: ${skey}`)\n let i = startidx\n /** @type {string} */\n let pfx\n while (true) {\n pfx = shard[i][0].slice(0, -1)\n if (pfx.length) {\n while (true) {\n const matches = shard.filter(entry => entry[0].startsWith(pfx))\n if (matches.length > 1) return { prefix: pfx, matches }\n pfx = pfx.slice(0, -1)\n if (!pfx.length) break\n }\n }\n i++\n if (i >= shard.length) {\n i = 0\n }\n if (i === startidx) {\n return\n }\n }\n}\n", "import {\n ShardFetcher,\n ShardBlock,\n encodeShardBlock,\n decodeShardBlock,\n putEntry,\n findCommonPrefix\n} from './shard.js'\n\nexport { ShardBlock, encodeShardBlock, decodeShardBlock }\n\n/**\n * @typedef {{ additions: import('./shard').ShardBlockView[], removals: import('./shard').ShardBlockView[] }} ShardDiff\n */\n\nexport const MaxKeyLength = 64\nexport const MaxShardSize = 512 * 1024\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 {import('./block').BlockFetcher} blocks Bucket block storage.\n * @param {import('./shard').ShardLink} root CID of the root node of the bucket.\n * @param {string} key The key of the value to put.\n * @param {import('./link').AnyLink} value The value to put.\n * @param {object} [options]\n * @param {number} [options.maxShardSize] Maximum shard size in bytes.\n * @returns {Promise<{ root: import('./shard').ShardLink } & ShardDiff>}\n */\nexport async function put (blocks, root, key, value, options = {}) {\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.prefix.length) // key within the shard\n\n /** @type {import('./shard').ShardEntry} */\n let entry = [skey, value]\n\n /** @type {import('./shard').ShardBlockView[]} */\n const additions = []\n\n // if the key in this shard is longer than allowed, then we need to make some\n // intermediate shards.\n if (skey.length > MaxKeyLength) {\n const pfxskeys = Array.from(Array(Math.ceil(skey.length / MaxKeyLength)), (_, i) => {\n const start = i * MaxKeyLength\n return {\n prefix: target.prefix + skey.slice(0, start),\n skey: skey.slice(start, start + MaxKeyLength)\n }\n })\n\n let child = await encodeShardBlock([[pfxskeys[pfxskeys.length - 1].skey, value]], pfxskeys[pfxskeys.length - 1].prefix)\n additions.push(child)\n\n for (let i = pfxskeys.length - 2; i > 0; i--) {\n child = await encodeShardBlock([[pfxskeys[i].skey, [child.cid]]], pfxskeys[i].prefix)\n additions.push(child)\n }\n\n entry = [pfxskeys[0].skey, [child.cid]]\n }\n\n /** @type {import('./shard').Shard} */\n let shard = putEntry(target.value, entry)\n let child = await encodeShardBlock(shard, target.prefix)\n\n if (child.bytes.length > (options.maxShardSize ?? MaxShardSize)) {\n const common = findCommonPrefix(shard, entry[0])\n if (!common) throw new Error('shard limit reached')\n const { prefix, matches } = common\n const block = await encodeShardBlock(\n matches.filter(([k]) => k !== prefix).map(([k, v]) => [k.slice(prefix.length), v]),\n target.prefix + prefix\n )\n additions.push(block)\n\n /** @type {import('./shard').ShardEntryLinkValue | import('./shard').ShardEntryLinkAndValueValue} */\n let value\n const pfxmatch = matches.find(([k]) => k === prefix)\n if (pfxmatch) {\n if (Array.isArray(pfxmatch[1])) {\n // should not happen! all entries with this prefix should have been\n // placed within this shard already.\n throw new Error(`expected \"${prefix}\" to be a shard value but found a shard link`)\n }\n value = [block.cid, pfxmatch[1]]\n } else {\n value = [block.cid]\n }\n\n shard = shard.filter(e => matches.every(m => e[0] !== m[0]))\n shard = putEntry(shard, [prefix, value])\n child = await encodeShardBlock(shard, target.prefix)\n }\n\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.prefix.slice(parent.prefix.length)\n const value = parent.value.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 {import('./shard').ShardEntry} */(v[1] == null ? [k, [child.cid]] : [k, [child.cid, v[1]]])\n })\n\n child = await encodeShardBlock(value, parent.prefix)\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 {import('./block').BlockFetcher} blocks Bucket block storage.\n * @param {import('./shard').ShardLink} root CID of the root node of the bucket.\n * @param {string} key The key of the value to get.\n * @returns {Promise<import('./link').AnyLink | undefined>}\n */\nexport async function get (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.prefix.length) // key within the shard\n const entry = target.value.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 {import('./block').BlockFetcher} blocks Bucket block storage.\n * @param {import('./shard').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: import('./shard').ShardLink } & ShardDiff>}\n */\nexport async function del (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.prefix.length) // key within the shard\n\n const entryidx = target.value.findIndex(([k]) => k === skey)\n if (entryidx === -1) return { root, additions: [], removals: [] }\n\n const entry = target.value[entryidx]\n // cannot delete a shard (without data)\n if (Array.isArray(entry[1]) && entry[1][1] == null) return { root, additions: [], removals: [] }\n\n /** @type {import('./shard').ShardBlockView[]} */\n const additions = []\n /** @type {import('./shard').ShardBlockView[]} */\n const removals = [...path]\n\n let shard = [...target.value]\n\n if (Array.isArray(entry[1])) {\n // remove the value from this link+value\n shard[entryidx] = [entry[0], [entry[1][0]]]\n } else {\n shard.splice(entryidx, 1)\n // if now empty, remove from parent\n while (!shard.length) {\n const child = path[path.length - 1]\n const parent = path[path.length - 2]\n if (!parent) break\n path.pop()\n shard = parent.value.filter(e => {\n if (!Array.isArray(e[1])) return true\n return e[1][0].toString() !== child.cid.toString()\n })\n }\n }\n\n let child = await encodeShardBlock(shard, path[path.length - 1].prefix)\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.prefix.slice(parent.prefix.length)\n const value = parent.value.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 {import('./shard').ShardEntry} */(v[1] == null ? [k, [child.cid]] : [k, [child.cid, v[1]]])\n })\n\n child = await encodeShardBlock(value, parent.prefix)\n additions.push(child)\n }\n\n return { root: additions[additions.length - 1].cid, additions, removals }\n}\n\n/**\n * List entries in the bucket.\n *\n * @param {import('./block').BlockFetcher} blocks Bucket block storage.\n * @param {import('./shard').ShardLink} root CID of the root node of the bucket.\n * @param {object} [options]\n * @param {string} [options.prefix]\n * @returns {AsyncIterableIterator<import('./shard').ShardValueEntry>}\n */\nexport async function * entries (blocks, root, options = {}) {\n const { prefix } = options\n const shards = new ShardFetcher(blocks)\n const rshard = await shards.get(root)\n\n yield * (\n /** @returns {AsyncIterableIterator<import('./shard').ShardValueEntry>} */\n async function * ents (shard) {\n for (const entry of shard.value) {\n const key = shard.prefix + entry[0]\n\n if (Array.isArray(entry[1])) {\n if (entry[1][1]) {\n if (!prefix || (prefix && key.startsWith(prefix))) {\n yield [key, entry[1][1]]\n }\n }\n\n if (prefix) {\n if (prefix.length <= key.length && !key.startsWith(prefix)) {\n continue\n }\n if (prefix.length > key.length && !prefix.startsWith(key)) {\n continue\n }\n }\n yield * ents(await shards.get(entry[1][0], key))\n } else {\n if (prefix && !key.startsWith(prefix)) {\n continue\n }\n yield [key, entry[1]]\n }\n }\n }\n )(rshard)\n}\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 {import('./shard').ShardBlockView} shard\n * @param {string} key\n * @returns {Promise<[import('./shard').ShardBlockView, ...Array<import('./shard').ShardBlockView>]>}\n */\nasync function traverse (shards, shard, key) {\n for (const [k, v] of shard.value) {\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], shard.prefix + k), key.slice(k.length))\n return [shard, ...path]\n }\n }\n return [shard]\n}\n", "import * as Clock from './clock.js'\nimport { EventFetcher, EventBlock } from './clock.js'\nimport * as Pail from './index.js'\nimport { ShardBlock } from './index.js'\nimport { MemoryBlockstore, MultiBlockFetcher } from './block.js'\n\n/**\n * @typedef {{\n * type: 'put'|'del'\n * key: string\n * value: import('./link').AnyLink\n * root: import('./shard').ShardLink\n * }} EventData\n * @typedef {{\n * root: import('./shard').ShardLink\n * head: import('./clock').EventLink<EventData>[]\n * event: import('./clock').EventBlockView<EventData>\n * } & import('./index').ShardDiff} Result\n */\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 {import('./block').BlockFetcher} blocks Bucket block storage.\n * @param {import('./clock').EventLink<EventData>[]} head Merkle clock head.\n * @param {string} key The key of the value to put.\n * @param {import('./link').AnyLink} value The value to put.\n * @param {object} [options]\n * @returns {Promise<Result>}\n */\nexport async function put (blocks, head, key, value, options) {\n // console.log('good put', 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, options)\n /** @type {EventData} */\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 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, import('./shard').ShardBlockView>} */\n const additions = new Map()\n /** @type {Map<string, import('./shard').ShardBlockView>} */\n const removals = new Map()\n\n for (const { value: event } of sorted) {\n if (!['put', 'del'].includes(event.data.type)) {\n throw new Error(`unknown event type: ${event.data.type}`)\n }\n const result = event.data.type === 'put'\n ? await Pail.put(blocks, root, event.data.key, event.data.value)\n : await Pail.del(blocks, root, event.data.key)\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, options)\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 {EventData} */\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, except for the root\n const rootCidString = result.root.toString()\n for (const k of removals.keys()) {\n if (additions.has(k) && k !== rootCidString) {\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 {import('./block').BlockFetcher} blocks Bucket block storage.\n * @param {import('./clock').EventLink<EventData>[]} head Merkle clock head.\n * @param {string} key The key of the value to delete.\n * @param {object} [options]\n * @returns {Promise<Result>}\n */\nexport async function del (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 {import('./block').BlockFetcher} blocks Bucket block storage.\n * @param {import('./clock').EventLink<EventData>[]} head Merkle clock head.\n * @returns {Promise<{ root: import('./shard').ShardLink } & import('./index').ShardDiff>}\n */\nexport async function root (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<EventData>} */\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, import('./shard').ShardBlockView>} */\n const additions = new Map()\n /** @type {Map<string, import('./shard').ShardBlockView>} */\n const removals = new Map()\n\n for (const { value: event } of sorted) {\n if (!['put', 'del'].includes(event.data.type)) {\n throw new Error(`unknown event type: ${event.data.type}`)\n }\n const result = event.data.type === 'put'\n ? await Pail.put(blocks, root, event.data.key, event.data.value)\n : await Pail.del(blocks, root, event.data.key)\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 const rootCidString = root.toString()\n for (const k of removals.keys()) {\n if (additions.has(k) && k !== rootCidString) {\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 {import('./block').BlockFetcher} blocks Bucket block storage.\n * @param {import('./clock').EventLink<EventData>[]} head Merkle clock head.\n * @param {string} key The key of the value to retrieve.\n */\nexport async function get (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 {import('./block').BlockFetcher} blocks Bucket block storage.\n * @param {import('./clock').EventLink<EventData>[]} head Merkle clock head.\n * @param {object} [options]\n * @param {string} [options.prefix]\n */\nexport async function * entries (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 {import('./clock').EventFetcher<EventData>} events\n * @param {import('./clock').EventLink<EventData>[]} children\n */\nasync function findCommonAncestor (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 {import('./clock').EventFetcher<EventData>} events\n * @param {import('./clock').EventLink<EventData>} root\n */\nasync function findAncestorCandidate (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 */\nfunction 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 {import('./clock').EventFetcher<EventData>} events\n * @param {import('./clock').EventLink<EventData>[]} head\n * @param {import('./clock').EventLink<EventData>} tail\n */\nasync function findSortedEvents (events, head, tail) {\n if (head.length === 1 && String(head[0]) === String(tail)) {\n return []\n }\n // get weighted events - heavier events happened first\n /** @type {Map<string, { event: import('./clock').EventBlockView<EventData>, 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, import('./clock').EventBlockView<EventData>[]>} */\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 {import('./clock').EventFetcher<EventData>} events\n * @param {import('./clock').EventLink<EventData>} start\n * @param {import('./clock').EventLink<EventData>} end\n * @returns {Promise<Array<{ event: import('./clock').EventBlockView<EventData>, depth: number }>>}\n */\nasync function findEvents (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", "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", "const textDecoder = new TextDecoder()\n\n/**\n * @typedef {import('./interface').RawPBLink} RawPBLink\n */\n\n/**\n * @typedef {import('./interface').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\n let linksBeforeData = false\n /** @type {Uint8Array|void} */\n let data\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').RawPBLink} RawPBLink\n */\n\n/**\n * @typedef {import('./interface').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').PBLink} PBLink\n * @typedef {import('./interface').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').PBLink} PBLink\n * @typedef {import('./interface').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", "/*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 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 // \u26A0\uFE0F 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", "/**\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", "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", "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", "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", "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 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 offset?: number\n length?: number\n signal?: AbortSignal\n}\n\nexport interface Exportable<T> {\n type: 'file' | 'directory' | 'object' | 'raw' | 'identity'\n name: string\n path: string\n cid: CID\n depth: number\n size: bigint\n content: (options?: ExporterOptions) => AsyncGenerator<T, void, unknown>\n}\n\nexport interface UnixFSFile extends Exportable<Uint8Array> {\n type: 'file'\n unixfs: UnixFS\n node: PBNode\n}\n\nexport interface UnixFSDirectory extends Exportable<UnixFSEntry> {\n type: 'directory'\n unixfs: UnixFS\n node: PBNode\n}\n\nexport interface ObjectNode extends Exportable<any> {\n type: 'object'\n node: Uint8Array\n}\n\nexport interface RawNode extends Exportable<Uint8Array> {\n type: 'raw'\n node: Uint8Array\n}\n\nexport interface IdentityNode extends Exportable<Uint8Array> {\n type: 'identity'\n node: Uint8Array\n}\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\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\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\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\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", "function 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 * as dagCbor from '@ipld/dag-cbor'\nimport * as dagPb from '@ipld/dag-pb'\nimport errCode from 'err-code'\nimport * as raw from 'multiformats/codecs/raw'\nimport { identity } from 'multiformats/hashes/identity'\nimport dagCborResolver from './dag-cbor.js'\nimport identifyResolver from './identity.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 [identity.code]: identifyResolver\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", "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 dagCbor from '@ipld/dag-cbor'\nimport errCode from 'err-code'\nimport { CID } from 'multiformats/cid'\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 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 cbor 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\nexport default resolve\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", "\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 { 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", "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 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 })\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", "// @ts-expect-error no types\nimport ReaderClass from 'protobufjs/src/reader.js'\n// @ts-expect-error no types\nimport ReaderBufferClass from 'protobufjs/src/reader_buffer.js'\n// @ts-expect-error no types\nimport util from 'protobufjs/src/util/minimal.js'\n// @ts-expect-error no types\nimport WriterClass from 'protobufjs/src/writer.js'\n// @ts-expect-error no types\nimport WriterBufferClass from 'protobufjs/src/writer_buffer.js'\nimport type { Reader, Writer } from './index.js'\n\nfunction configure (): void {\n util._configure()\n ReaderClass._configure(ReaderBufferClass)\n WriterClass._configure(WriterBufferClass)\n}\n\n// Set up buffer utility according to the environment\nconfigure()\n\n// monkey patch the reader to add native bigint support\nconst methods = [\n 'uint64', 'int64', 'sint64', 'fixed64', 'sfixed64'\n]\n\nfunction patchReader (obj: any): any {\n for (const method of methods) {\n if (obj[method] == null) {\n continue\n }\n\n const original = obj[method]\n obj[method] = function (): bigint {\n return BigInt(original.call(this).toString())\n }\n }\n\n return obj\n}\n\nexport function reader (buf: Uint8Array): Reader {\n return patchReader(new ReaderClass(buf))\n}\n\nfunction patchWriter (obj: any): any {\n for (const method of methods) {\n if (obj[method] == null) {\n continue\n }\n\n const original = obj[method]\n obj[method] = function (val: bigint) {\n return original.call(this, val.toString())\n }\n }\n\n return obj\n}\n\nexport function writer (): Writer {\n return patchWriter(WriterClass.create())\n}\n", "import { reader } from './utils.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 r = reader(buf instanceof Uint8Array ? buf : buf.subarray())\n\n return codec.decode(r)\n}\n", "import { writer } from './utils.js'\nimport type { Codec } from './codec.js'\n\nexport function encodeMessage <T> (message: T, codec: Codec<T>): Uint8Array {\n const w = writer()\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", "/* 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", "// @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", "// @ts-check\n\nimport { from } from './base.js'\nimport { fromString, toString } from '../bytes.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\nimport { rfc4648 } from './base.js'\n\nexport const base2 = rfc4648({\n prefix: '0',\n name: 'base2',\n alphabet: '01',\n bitsPerChar: 1\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", "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", "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", "// @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", "import { from } from './base.js'\n\nconst alphabet = Array.from('\uD83D\uDE80\uD83E\uDE90\u2604\uD83D\uDEF0\uD83C\uDF0C\uD83C\uDF11\uD83C\uDF12\uD83C\uDF13\uD83C\uDF14\uD83C\uDF15\uD83C\uDF16\uD83C\uDF17\uD83C\uDF18\uD83C\uDF0D\uD83C\uDF0F\uD83C\uDF0E\uD83D\uDC09\u2600\uD83D\uDCBB\uD83D\uDDA5\uD83D\uDCBE\uD83D\uDCBF\uD83D\uDE02\u2764\uD83D\uDE0D\uD83E\uDD23\uD83D\uDE0A\uD83D\uDE4F\uD83D\uDC95\uD83D\uDE2D\uD83D\uDE18\uD83D\uDC4D\uD83D\uDE05\uD83D\uDC4F\uD83D\uDE01\uD83D\uDD25\uD83E\uDD70\uD83D\uDC94\uD83D\uDC96\uD83D\uDC99\uD83D\uDE22\uD83E\uDD14\uD83D\uDE06\uD83D\uDE44\uD83D\uDCAA\uD83D\uDE09\u263A\uD83D\uDC4C\uD83E\uDD17\uD83D\uDC9C\uD83D\uDE14\uD83D\uDE0E\uD83D\uDE07\uD83C\uDF39\uD83E\uDD26\uD83C\uDF89\uD83D\uDC9E\u270C\u2728\uD83E\uDD37\uD83D\uDE31\uD83D\uDE0C\uD83C\uDF38\uD83D\uDE4C\uD83D\uDE0B\uD83D\uDC97\uD83D\uDC9A\uD83D\uDE0F\uD83D\uDC9B\uD83D\uDE42\uD83D\uDC93\uD83E\uDD29\uD83D\uDE04\uD83D\uDE00\uD83D\uDDA4\uD83D\uDE03\uD83D\uDCAF\uD83D\uDE48\uD83D\uDC47\uD83C\uDFB6\uD83D\uDE12\uD83E\uDD2D\u2763\uD83D\uDE1C\uD83D\uDC8B\uD83D\uDC40\uD83D\uDE2A\uD83D\uDE11\uD83D\uDCA5\uD83D\uDE4B\uD83D\uDE1E\uD83D\uDE29\uD83D\uDE21\uD83E\uDD2A\uD83D\uDC4A\uD83E\uDD73\uD83D\uDE25\uD83E\uDD24\uD83D\uDC49\uD83D\uDC83\uD83D\uDE33\u270B\uD83D\uDE1A\uD83D\uDE1D\uD83D\uDE34\uD83C\uDF1F\uD83D\uDE2C\uD83D\uDE43\uD83C\uDF40\uD83C\uDF37\uD83D\uDE3B\uD83D\uDE13\u2B50\u2705\uD83E\uDD7A\uD83C\uDF08\uD83D\uDE08\uD83E\uDD18\uD83D\uDCA6\u2714\uD83D\uDE23\uD83C\uDFC3\uD83D\uDC90\u2639\uD83C\uDF8A\uD83D\uDC98\uD83D\uDE20\u261D\uD83D\uDE15\uD83C\uDF3A\uD83C\uDF82\uD83C\uDF3B\uD83D\uDE10\uD83D\uDD95\uD83D\uDC9D\uD83D\uDE4A\uD83D\uDE39\uD83D\uDDE3\uD83D\uDCAB\uD83D\uDC80\uD83D\uDC51\uD83C\uDFB5\uD83E\uDD1E\uD83D\uDE1B\uD83D\uDD34\uD83D\uDE24\uD83C\uDF3C\uD83D\uDE2B\u26BD\uD83E\uDD19\u2615\uD83C\uDFC6\uD83E\uDD2B\uD83D\uDC48\uD83D\uDE2E\uD83D\uDE46\uD83C\uDF7B\uD83C\uDF43\uD83D\uDC36\uD83D\uDC81\uD83D\uDE32\uD83C\uDF3F\uD83E\uDDE1\uD83C\uDF81\u26A1\uD83C\uDF1E\uD83C\uDF88\u274C\u270A\uD83D\uDC4B\uD83D\uDE30\uD83E\uDD28\uD83D\uDE36\uD83E\uDD1D\uD83D\uDEB6\uD83D\uDCB0\uD83C\uDF53\uD83D\uDCA2\uD83E\uDD1F\uD83D\uDE41\uD83D\uDEA8\uD83D\uDCA8\uD83E\uDD2C\u2708\uD83C\uDF80\uD83C\uDF7A\uD83E\uDD13\uD83D\uDE19\uD83D\uDC9F\uD83C\uDF31\uD83D\uDE16\uD83D\uDC76\uD83E\uDD74\u25B6\u27A1\u2753\uD83D\uDC8E\uD83D\uDCB8\u2B07\uD83D\uDE28\uD83C\uDF1A\uD83E\uDD8B\uD83D\uDE37\uD83D\uDD7A\u26A0\uD83D\uDE45\uD83D\uDE1F\uD83D\uDE35\uD83D\uDC4E\uD83E\uDD32\uD83E\uDD20\uD83E\uDD27\uD83D\uDCCC\uD83D\uDD35\uD83D\uDC85\uD83E\uDDD0\uD83D\uDC3E\uD83C\uDF52\uD83D\uDE17\uD83E\uDD11\uD83C\uDF0A\uD83E\uDD2F\uD83D\uDC37\u260E\uD83D\uDCA7\uD83D\uDE2F\uD83D\uDC86\uD83D\uDC46\uD83C\uDFA4\uD83D\uDE47\uD83C\uDF51\u2744\uD83C\uDF34\uD83D\uDCA3\uD83D\uDC38\uD83D\uDC8C\uD83D\uDCCD\uD83E\uDD40\uD83E\uDD22\uD83D\uDC45\uD83D\uDCA1\uD83D\uDCA9\uD83D\uDC50\uD83D\uDCF8\uD83D\uDC7B\uD83E\uDD10\uD83E\uDD2E\uD83C\uDFBC\uD83E\uDD75\uD83D\uDEA9\uD83C\uDF4E\uD83C\uDF4A\uD83D\uDC7C\uD83D\uDC8D\uD83D\uDCE3\uD83E\uDD42')\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: '\uD83D\uDE80',\n name: 'base256emoji',\n encode,\n decode\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", "// @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 * as identityBase from './bases/identity.js'\nimport * as base2 from './bases/base2.js'\nimport * as base8 from './bases/base8.js'\nimport * as base10 from './bases/base10.js'\nimport * as base16 from './bases/base16.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 base256emoji from './bases/base256emoji.js'\nimport * as sha2 from './hashes/sha2.js'\nimport * as identity from './hashes/identity.js'\n\nimport * as raw from './codecs/raw.js'\nimport * as json from './codecs/json.js'\n\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", "\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", "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 type { MultibaseCodec } from 'multiformats'\nimport { bases } from 'multiformats/basics'\nimport { allocUnsafe } from '../alloc.js'\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: ascii,\n binary: ascii,\n\n ...bases\n}\n\nexport default BASES\n", "import bases, { SupportedEncodings } from './util/bases.js'\nimport { asUint8Array } from './util/as-uint8array.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", "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 { Bucket, type BucketPosition, createHAMT } from 'hamt-sharding'\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 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 === 2) {\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): string => {\n return position\n .toString(16)\n .toUpperCase()\n .padStart(2, '0')\n .substring(0, 2)\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 const rootBucket = createHAMT<boolean>({\n hashFn\n })\n\n context = {\n rootBucket,\n hamtDepth: 1,\n lastBucket: rootBucket\n }\n }\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)\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)\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, 2)\n const entryName = link.Name.substring(2)\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(2) === 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", "interface Peek <T> {\n peek: () => IteratorResult<T, undefined>\n}\n\ninterface AsyncPeek <T> {\n peek: () => Promise<IteratorResult<T, undefined>>\n}\n\ninterface Push <T> {\n push: (value: T) => void\n}\n\ntype Peekable <T> = Iterable<T> & Peek<T> & Push<T> & Iterator<T>\n\ntype 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", "import 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", "import 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", "/* global EventTarget Event */\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 }\n\n return pushable\n}\n", "import { 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, { ordered: true }),\n source => filter(source, entry => entry != null)\n )\n }\n\n return yieldDirectoryContent\n}\n\nexport default directoryContent\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 }),\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", "var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _PQueue_instances, _PQueue_carryoverConcurrencyCount, _PQueue_isIntervalIgnored, _PQueue_intervalCount, _PQueue_intervalCap, _PQueue_interval, _PQueue_intervalEnd, _PQueue_intervalId, _PQueue_timeoutId, _PQueue_queue, _PQueue_queueClass, _PQueue_pending, _PQueue_concurrency, _PQueue_isPaused, _PQueue_throwOnTimeout, _PQueue_doesIntervalAllowAnother_get, _PQueue_doesConcurrentAllowAnother_get, _PQueue_next, _PQueue_onResumeInterval, _PQueue_isIntervalPaused_get, _PQueue_tryToStartAnother, _PQueue_initializeIntervalIfNeeded, _PQueue_onInterval, _PQueue_processQueue, _PQueue_throwOnAbort, _PQueue_onEvent;\nimport EventEmitter from 'eventemitter3';\nimport pTimeout, { TimeoutError } from 'p-timeout';\nimport PriorityQueue from './priority-queue.js';\n/**\nThe error thrown by `queue.add()` when a job is aborted before it is run. See `signal`.\n*/\nexport class AbortError extends Error {\n}\n/**\nPromise queue with concurrency control.\n*/\nexport default class PQueue extends EventEmitter {\n // TODO: The `throwOnTimeout` option should affect the return types of `add()` and `addAll()`\n constructor(options) {\n var _a, _b, _c, _d;\n super();\n _PQueue_instances.add(this);\n _PQueue_carryoverConcurrencyCount.set(this, void 0);\n _PQueue_isIntervalIgnored.set(this, void 0);\n _PQueue_intervalCount.set(this, 0);\n _PQueue_intervalCap.set(this, void 0);\n _PQueue_interval.set(this, void 0);\n _PQueue_intervalEnd.set(this, 0);\n _PQueue_intervalId.set(this, void 0);\n _PQueue_timeoutId.set(this, void 0);\n _PQueue_queue.set(this, void 0);\n _PQueue_queueClass.set(this, void 0);\n _PQueue_pending.set(this, 0);\n // The `!` is needed because of https://github.com/microsoft/TypeScript/issues/32194\n _PQueue_concurrency.set(this, void 0);\n _PQueue_isPaused.set(this, void 0);\n _PQueue_throwOnTimeout.set(this, void 0);\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 Object.defineProperty(this, \"timeout\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\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 \\`${(_b = (_a = options.intervalCap) === null || _a === void 0 ? void 0 : _a.toString()) !== null && _b !== void 0 ? _b : ''}\\` (${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 \\`${(_d = (_c = options.interval) === null || _c === void 0 ? void 0 : _c.toString()) !== null && _d !== void 0 ? _d : ''}\\` (${typeof options.interval})`);\n }\n __classPrivateFieldSet(this, _PQueue_carryoverConcurrencyCount, options.carryoverConcurrencyCount, \"f\");\n __classPrivateFieldSet(this, _PQueue_isIntervalIgnored, options.intervalCap === Number.POSITIVE_INFINITY || options.interval === 0, \"f\");\n __classPrivateFieldSet(this, _PQueue_intervalCap, options.intervalCap, \"f\");\n __classPrivateFieldSet(this, _PQueue_interval, options.interval, \"f\");\n __classPrivateFieldSet(this, _PQueue_queue, new options.queueClass(), \"f\");\n __classPrivateFieldSet(this, _PQueue_queueClass, options.queueClass, \"f\");\n this.concurrency = options.concurrency;\n this.timeout = options.timeout;\n __classPrivateFieldSet(this, _PQueue_throwOnTimeout, options.throwOnTimeout === true, \"f\");\n __classPrivateFieldSet(this, _PQueue_isPaused, options.autoStart === false, \"f\");\n }\n get concurrency() {\n return __classPrivateFieldGet(this, _PQueue_concurrency, \"f\");\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 __classPrivateFieldSet(this, _PQueue_concurrency, newConcurrency, \"f\");\n __classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_processQueue).call(this);\n }\n async add(function_, options = {}) {\n options = {\n timeout: this.timeout,\n throwOnTimeout: __classPrivateFieldGet(this, _PQueue_throwOnTimeout, \"f\"),\n ...options,\n };\n return new Promise((resolve, reject) => {\n __classPrivateFieldGet(this, _PQueue_queue, \"f\").enqueue(async () => {\n var _a;\n var _b, _c;\n __classPrivateFieldSet(this, _PQueue_pending, (_b = __classPrivateFieldGet(this, _PQueue_pending, \"f\"), _b++, _b), \"f\");\n __classPrivateFieldSet(this, _PQueue_intervalCount, (_c = __classPrivateFieldGet(this, _PQueue_intervalCount, \"f\"), _c++, _c), \"f\");\n try {\n // TODO: Use options.signal?.throwIfAborted() when targeting Node.js 18\n if ((_a = options.signal) === null || _a === void 0 ? void 0 : _a.aborted) {\n // TODO: Use ABORT_ERR code when targeting Node.js 16 (https://nodejs.org/docs/latest-v16.x/api/errors.html#abort_err)\n throw new AbortError('The task was aborted.');\n }\n let operation = function_({ signal: options.signal });\n if (options.timeout) {\n operation = pTimeout(Promise.resolve(operation), options.timeout);\n }\n if (options.signal) {\n operation = Promise.race([operation, __classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_throwOnAbort).call(this, 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 __classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_next).call(this);\n }\n }, options);\n this.emit('add');\n __classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_tryToStartAnother).call(this);\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 (!__classPrivateFieldGet(this, _PQueue_isPaused, \"f\")) {\n return this;\n }\n __classPrivateFieldSet(this, _PQueue_isPaused, false, \"f\");\n __classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_processQueue).call(this);\n return this;\n }\n /**\n Put queue execution on hold.\n */\n pause() {\n __classPrivateFieldSet(this, _PQueue_isPaused, true, \"f\");\n }\n /**\n Clear the queue.\n */\n clear() {\n __classPrivateFieldSet(this, _PQueue_queue, new (__classPrivateFieldGet(this, _PQueue_queueClass, \"f\"))(), \"f\");\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 (__classPrivateFieldGet(this, _PQueue_queue, \"f\").size === 0) {\n return;\n }\n await __classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_onEvent).call(this, '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 (__classPrivateFieldGet(this, _PQueue_queue, \"f\").size < limit) {\n return;\n }\n await __classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_onEvent).call(this, 'next', () => __classPrivateFieldGet(this, _PQueue_queue, \"f\").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 (__classPrivateFieldGet(this, _PQueue_pending, \"f\") === 0 && __classPrivateFieldGet(this, _PQueue_queue, \"f\").size === 0) {\n return;\n }\n await __classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_onEvent).call(this, 'idle');\n }\n /**\n Size of the queue, the number of queued items waiting to run.\n */\n get size() {\n return __classPrivateFieldGet(this, _PQueue_queue, \"f\").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 __classPrivateFieldGet(this, _PQueue_queue, \"f\").filter(options).length;\n }\n /**\n Number of running items (no longer in the queue).\n */\n get pending() {\n return __classPrivateFieldGet(this, _PQueue_pending, \"f\");\n }\n /**\n Whether the queue is currently paused.\n */\n get isPaused() {\n return __classPrivateFieldGet(this, _PQueue_isPaused, \"f\");\n }\n}\n_PQueue_carryoverConcurrencyCount = new WeakMap(), _PQueue_isIntervalIgnored = new WeakMap(), _PQueue_intervalCount = new WeakMap(), _PQueue_intervalCap = new WeakMap(), _PQueue_interval = new WeakMap(), _PQueue_intervalEnd = new WeakMap(), _PQueue_intervalId = new WeakMap(), _PQueue_timeoutId = new WeakMap(), _PQueue_queue = new WeakMap(), _PQueue_queueClass = new WeakMap(), _PQueue_pending = new WeakMap(), _PQueue_concurrency = new WeakMap(), _PQueue_isPaused = new WeakMap(), _PQueue_throwOnTimeout = new WeakMap(), _PQueue_instances = new WeakSet(), _PQueue_doesIntervalAllowAnother_get = function _PQueue_doesIntervalAllowAnother_get() {\n return __classPrivateFieldGet(this, _PQueue_isIntervalIgnored, \"f\") || __classPrivateFieldGet(this, _PQueue_intervalCount, \"f\") < __classPrivateFieldGet(this, _PQueue_intervalCap, \"f\");\n}, _PQueue_doesConcurrentAllowAnother_get = function _PQueue_doesConcurrentAllowAnother_get() {\n return __classPrivateFieldGet(this, _PQueue_pending, \"f\") < __classPrivateFieldGet(this, _PQueue_concurrency, \"f\");\n}, _PQueue_next = function _PQueue_next() {\n var _a;\n __classPrivateFieldSet(this, _PQueue_pending, (_a = __classPrivateFieldGet(this, _PQueue_pending, \"f\"), _a--, _a), \"f\");\n __classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_tryToStartAnother).call(this);\n this.emit('next');\n}, _PQueue_onResumeInterval = function _PQueue_onResumeInterval() {\n __classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_onInterval).call(this);\n __classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_initializeIntervalIfNeeded).call(this);\n __classPrivateFieldSet(this, _PQueue_timeoutId, undefined, \"f\");\n}, _PQueue_isIntervalPaused_get = function _PQueue_isIntervalPaused_get() {\n const now = Date.now();\n if (__classPrivateFieldGet(this, _PQueue_intervalId, \"f\") === undefined) {\n const delay = __classPrivateFieldGet(this, _PQueue_intervalEnd, \"f\") - 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 __classPrivateFieldSet(this, _PQueue_intervalCount, (__classPrivateFieldGet(this, _PQueue_carryoverConcurrencyCount, \"f\")) ? __classPrivateFieldGet(this, _PQueue_pending, \"f\") : 0, \"f\");\n }\n else {\n // Act as the interval is pending\n if (__classPrivateFieldGet(this, _PQueue_timeoutId, \"f\") === undefined) {\n __classPrivateFieldSet(this, _PQueue_timeoutId, setTimeout(() => {\n __classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_onResumeInterval).call(this);\n }, delay), \"f\");\n }\n return true;\n }\n }\n return false;\n}, _PQueue_tryToStartAnother = function _PQueue_tryToStartAnother() {\n if (__classPrivateFieldGet(this, _PQueue_queue, \"f\").size === 0) {\n // We can clear the interval (\"pause\")\n // Because we can redo it later (\"resume\")\n if (__classPrivateFieldGet(this, _PQueue_intervalId, \"f\")) {\n clearInterval(__classPrivateFieldGet(this, _PQueue_intervalId, \"f\"));\n }\n __classPrivateFieldSet(this, _PQueue_intervalId, undefined, \"f\");\n this.emit('empty');\n if (__classPrivateFieldGet(this, _PQueue_pending, \"f\") === 0) {\n this.emit('idle');\n }\n return false;\n }\n if (!__classPrivateFieldGet(this, _PQueue_isPaused, \"f\")) {\n const canInitializeInterval = !__classPrivateFieldGet(this, _PQueue_instances, \"a\", _PQueue_isIntervalPaused_get);\n if (__classPrivateFieldGet(this, _PQueue_instances, \"a\", _PQueue_doesIntervalAllowAnother_get) && __classPrivateFieldGet(this, _PQueue_instances, \"a\", _PQueue_doesConcurrentAllowAnother_get)) {\n const job = __classPrivateFieldGet(this, _PQueue_queue, \"f\").dequeue();\n if (!job) {\n return false;\n }\n this.emit('active');\n job();\n if (canInitializeInterval) {\n __classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_initializeIntervalIfNeeded).call(this);\n }\n return true;\n }\n }\n return false;\n}, _PQueue_initializeIntervalIfNeeded = function _PQueue_initializeIntervalIfNeeded() {\n if (__classPrivateFieldGet(this, _PQueue_isIntervalIgnored, \"f\") || __classPrivateFieldGet(this, _PQueue_intervalId, \"f\") !== undefined) {\n return;\n }\n __classPrivateFieldSet(this, _PQueue_intervalId, setInterval(() => {\n __classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_onInterval).call(this);\n }, __classPrivateFieldGet(this, _PQueue_interval, \"f\")), \"f\");\n __classPrivateFieldSet(this, _PQueue_intervalEnd, Date.now() + __classPrivateFieldGet(this, _PQueue_interval, \"f\"), \"f\");\n}, _PQueue_onInterval = function _PQueue_onInterval() {\n if (__classPrivateFieldGet(this, _PQueue_intervalCount, \"f\") === 0 && __classPrivateFieldGet(this, _PQueue_pending, \"f\") === 0 && __classPrivateFieldGet(this, _PQueue_intervalId, \"f\")) {\n clearInterval(__classPrivateFieldGet(this, _PQueue_intervalId, \"f\"));\n __classPrivateFieldSet(this, _PQueue_intervalId, undefined, \"f\");\n }\n __classPrivateFieldSet(this, _PQueue_intervalCount, __classPrivateFieldGet(this, _PQueue_carryoverConcurrencyCount, \"f\") ? __classPrivateFieldGet(this, _PQueue_pending, \"f\") : 0, \"f\");\n __classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_processQueue).call(this);\n}, _PQueue_processQueue = function _PQueue_processQueue() {\n // eslint-disable-next-line no-empty\n while (__classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_tryToStartAnother).call(this)) { }\n}, _PQueue_throwOnAbort = async function _PQueue_throwOnAbort(signal) {\n return new Promise((_resolve, reject) => {\n signal.addEventListener('abort', () => {\n // TODO: Reject with signal.throwIfAborted() when targeting Node.js 18\n // TODO: Use ABORT_ERR code when targeting Node.js 16 (https://nodejs.org/docs/latest-v16.x/api/errors.html#abort_err)\n reject(new AbortError('The task was aborted.'));\n }, { once: true });\n });\n}, _PQueue_onEvent = async function _PQueue_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", "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\tnew AbortError(errorMessage) :\n\tnew 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\tgetDOMException('This operation was aborted.') :\n\t\tsignal.reason;\n\n\treturn reason instanceof Error ? reason : getDOMException(reason);\n};\n\nexport default function pTimeout(promise, milliseconds, fallback, options) {\n\tlet timer;\n\n\tconst cancelablePromise = 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 (milliseconds === Number.POSITIVE_INFINITY) {\n\t\t\tresolve(promise);\n\t\t\treturn;\n\t\t}\n\n\t\toptions = {\n\t\t\tcustomTimers: {setTimeout, clearTimeout},\n\t\t\t...options\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\ttimer = options.customTimers.setTimeout.call(undefined, () => {\n\t\t\tif (typeof fallback === 'function') {\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\tconst message = typeof fallback === 'string' ? fallback : `Promise timed out after ${milliseconds} milliseconds`;\n\t\t\tconst timeoutError = fallback instanceof Error ? fallback : new TimeoutError(message);\n\n\t\t\tif (typeof promise.cancel === 'function') {\n\t\t\t\tpromise.cancel();\n\t\t\t}\n\n\t\t\treject(timeoutError);\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} finally {\n\t\t\t\toptions.customTimers.clearTimeout.call(undefined, timer);\n\t\t\t}\n\t\t})();\n\t});\n\n\tcancelablePromise.clear = () => {\n\t\tclearTimeout(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", "var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _PriorityQueue_queue;\nimport lowerBound from './lower-bound.js';\nexport default class PriorityQueue {\n constructor() {\n _PriorityQueue_queue.set(this, []);\n }\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 && __classPrivateFieldGet(this, _PriorityQueue_queue, \"f\")[this.size - 1].priority >= options.priority) {\n __classPrivateFieldGet(this, _PriorityQueue_queue, \"f\").push(element);\n return;\n }\n const index = lowerBound(__classPrivateFieldGet(this, _PriorityQueue_queue, \"f\"), element, (a, b) => b.priority - a.priority);\n __classPrivateFieldGet(this, _PriorityQueue_queue, \"f\").splice(index, 0, element);\n }\n dequeue() {\n const item = __classPrivateFieldGet(this, _PriorityQueue_queue, \"f\").shift();\n return item === null || item === void 0 ? void 0 : item.run;\n }\n filter(options) {\n return __classPrivateFieldGet(this, _PriorityQueue_queue, \"f\").filter((element) => element.priority === options.priority).map((element) => element.run);\n }\n get size() {\n return __classPrivateFieldGet(this, _PriorityQueue_queue, \"f\").length;\n }\n}\n_PriorityQueue_queue = new WeakMap();\n", "import { decode, type PBNode } from '@ipld/dag-pb'\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 const results = pipe(\n links,\n source => map(source, link => {\n return async () => {\n const name = link.Name != null ? link.Name.substring(2) : 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, { ordered: true })\n )\n\n for await (const { entries } of results) {\n yield * entries\n }\n}\n\nexport default hamtShardedDirectoryContent\n", "// from https://github.com/web3-storage/w3up/blob/main/packages/upload-client/src/unixfs.js#L165\nimport * 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 { AnyBlock, AnyLink, DocFileMeta } from './types'\n// import type { Block } from 'multiformats/dist/types/src/block'\n\nimport { exporter, ReadableStorage } from 'ipfs-unixfs-exporter'\n\n// /** @param {import('@ipld/unixfs').View} writer */\n\n// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call\nconst queuingStrategy = UnixFS.withCapacity()\n\n// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call\nconst settings = UnixFS.configure({\n fileChunkEncoder: raw,\n smallFileEncoder: raw,\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call\n chunker: withMaxChunkSize(1024 * 1024),\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call\n fileLayout: withWidth(1024)\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 // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n return { cid: blocks.at(-1).cid, blocks }\n}\n\nexport async function decodeFile(blocks: unknown, cid: AnyLink, meta: DocFileMeta): Promise<File> {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call\n const entry = await exporter(cid.toString(), blocks as ReadableStorage, { length: meta.size })\n const chunks = []\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call\n for await (const chunk of entry.content()) chunks.push(chunk as Buffer)\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n return new File(chunks, entry.name, { type: meta.type, lastModified: 0 })\n}\n\nfunction createFileEncoderStream(blob: BlobLike) {\n /** @type {TransformStream<import('@ipld/unixfs').Block, import('@ipld/unixfs').Block>} */\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n const { readable, writable } = new TransformStream({}, queuingStrategy)\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call\n const unixfsWriter = UnixFS.createWriter({ writable, settings })\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call\n const fileBuilder = new UnixFSFileBuilder('', blob)\n void (async () => {\n await fileBuilder.finalize(unixfsWriter)\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call\n await unixfsWriter.close()\n })()\n return readable\n}\n\nasync function collect<T>(collectable: ReadableStream<T>): Promise<T[]> {\n // /** @type {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\nclass UnixFSFileBuilder {\n #file\n name: string\n constructor(name: string, file: BlobLike) {\n this.name = name\n this.#file = file\n }\n\n async finalize(writer: View) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call\n const unixfsFileWriter = UnixFS.createFileWriter(writer)\n await this.#file.stream().pipeTo(\n new WritableStream({\n async write(chunk) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call\n await unixfsFileWriter.write(chunk as Uint8Array)\n }\n })\n )\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call\n return await unixfsFileWriter.close()\n }\n}\n\n// ts-unused-exports:disable-next-line\nexport interface BlobLike {\n /**\n * Returns a ReadableStream which yields the Blob data.\n */\n stream: () => ReadableStream\n}\n", "import type { CID } from 'multiformats'\nimport { 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, EventData, root } from '@alanshaw/pail/crdt'\nimport { EventFetcher, vis } from '@alanshaw/pail/clock'\nimport { LoggingFetcher, Transaction } from './transaction'\nimport type { TransactionBlockstore } from './transaction'\nimport type { DocUpdate, ClockHead, AnyLink, DocValue, BulkResult, ChangesOptions, Doc, DocFileMeta, FileResult, DocFiles, BlockFetcher } from './types'\nimport { decodeFile, encodeFile } from './files'\nimport { DbLoader } from './loaders'\n\nexport async function applyBulkUpdateToCrdt(\n tblocks: Transaction,\n head: ClockHead,\n updates: DocUpdate[],\n options?: object\n): Promise<BulkResult> {\n let result\n for (const update of updates) {\n const link = await writeDocContent(tblocks, update)\n result = await put(tblocks, head, update.key, link, options)\n const resRoot = result.root.toString()\n const isReturned = result.additions.some(a => a.cid.toString() === resRoot)\n if (!isReturned) {\n const hasRoot = await tblocks.get(result.root) // is a db-wide get\n if (!hasRoot) {\n throw new Error(`missing root in additions: ${result.additions.length} ${resRoot} keys: ${updates.map(u => u.key).toString()}`)\n\n // make sure https://github.com/alanshaw/pail/pull/20 is applied\n result.head = head\n }\n }\n for (const { cid, bytes } of [...result.additions, ...result.removals, result.event]) {\n tblocks.putSync(cid, bytes)\n }\n head = result.head\n }\n return { head }\n}\n\n// this whole thing can get pulled outside of the write queue\nasync function writeDocContent(blocks: Transaction, update: DocUpdate): Promise<AnyLink> {\n let value: DocValue\n if (update.del) {\n value = { del: true }\n } else {\n await processFiles(blocks, update.value as Doc)\n value = { doc: update.value }\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(blocks: Transaction, doc: Doc) {\n if (doc._files) {\n await processFileset(blocks, doc._files)\n }\n if (doc._publicFiles) {\n await processFileset(blocks, doc._publicFiles, true)\n }\n}\n\nasync function processFileset(blocks: Transaction, files: DocFiles, publicFiles = false) {\n const dbBlockstore = blocks.parent as TransactionBlockstore\n const t = new Transaction(dbBlockstore)\n // dbBlockstore.transactions.add(t)\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 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 }\n }\n // todo option to bypass this limit\n // if (totalSize > 1024 * 1024 * 1) throw new Error('Sync limit for files in a single update is 1MB')\n if (didPut.length) {\n const car = await dbBlockstore.loader?.commit(t, { files } as FileResult, { public: publicFiles })\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(blocks: TransactionBlockstore, head: ClockHead, key: string): Promise<DocValue> {\n if (!head.length) throw new Error('Getting from an empty database')\n const link = await get(blocks, head, key)\n if (!link) throw new Error(`Missing key ${key}`)\n return await getValueFromLink(blocks, link)\n}\n\nexport function readFiles(blocks: TransactionBlockstore | LoggingFetcher, { doc }: DocValue) {\n if (!doc) return\n if (doc._files) {\n readFileset(blocks, doc._files)\n }\n if (doc._publicFiles) {\n readFileset(blocks, doc._publicFiles, true)\n }\n}\n\nfunction readFileset(blocks: TransactionBlockstore | LoggingFetcher, files: DocFiles, isPublic = false) {\n for (const filename in files) {\n const fileMeta = files[filename] as DocFileMeta\n if (fileMeta.cid) {\n // if (!blocks.loader) throw new Error('Missing loader')\n if (isPublic) { fileMeta.url = `https://${fileMeta.cid.toString()}.ipfs.w3s.link/` }\n if (fileMeta.car && blocks.loader) {\n const ld = blocks.loader as DbLoader\n fileMeta.file = async () => await decodeFile({\n get: async (cid: AnyLink) => {\n const reader = await ld.loadFileCar(fileMeta.car!, isPublic)\n const block = await reader.get(cid as CID)\n if (!block) throw new Error(`Missing block ${cid.toString()}`)\n return block.bytes\n }\n }, fileMeta.cid, fileMeta)\n }\n }\n files[filename] = fileMeta\n }\n}\n\nasync function getValueFromLink(blocks: TransactionBlockstore | LoggingFetcher, link: AnyLink): Promise<DocValue> {\n const block = await blocks.get(link)\n if (!block) throw new Error(`Missing linked block ${link.toString()}`)\n const { value } = (await decode({ bytes: block.bytes, hasher, codec })) as { value: DocValue }\n readFiles(blocks, value)\n return value\n}\n\nclass DirtyEventFetcher<T> extends EventFetcher<T> {\n // @ts-ignore\n async get(link) {\n try {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n return await super.get(link)\n } catch (e) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call\n console.error('missing event', link.toString(), e)\n return ({ value: null })\n }\n }\n}\n\nexport async function clockChangesSince(\n blocks: TransactionBlockstore | LoggingFetcher,\n head: ClockHead,\n since: ClockHead,\n opts: ChangesOptions\n): Promise<{ result: DocUpdate[], head: ClockHead }> {\n const eventsFetcher = (opts.dirty ? new DirtyEventFetcher<EventData>(blocks) : new EventFetcher<EventData>(blocks)) as EventFetcher<EventData>\n const keys: Set<string> = new Set()\n const updates = await gatherUpdates(blocks, eventsFetcher, head, since, [], keys, new Set<string>(), opts.limit || Infinity)\n return { result: updates.reverse(), head }\n}\n\nasync function gatherUpdates(\n blocks: TransactionBlockstore | LoggingFetcher,\n eventsFetcher: EventFetcher<EventData>,\n head: ClockHead,\n since: ClockHead,\n updates: DocUpdate[] = [],\n keys: Set<string>, didLinks: Set<string>,\n limit: number\n): Promise<DocUpdate[]> {\n if (limit <= 0) return updates\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 { key, value } = event.data\n if (keys.has(key)) {\n if (event.parents) {\n updates = await gatherUpdates(blocks, eventsFetcher, event.parents, since, updates, keys, didLinks, limit)\n }\n } else {\n keys.add(key)\n const docValue = await getValueFromLink(blocks, value)\n updates.push({ key, value: docValue.doc, del: docValue.del, clock: link })\n limit--\n if (event.parents) {\n updates = await gatherUpdates(blocks, eventsFetcher, event.parents, since, updates, keys, didLinks, limit)\n }\n }\n }\n return updates\n}\n\nexport async function * getAllEntries(blocks: TransactionBlockstore | LoggingFetcher, head: ClockHead) {\n // return entries(blocks, head)\n for await (const [key, link] of entries(blocks, head)) {\n const docValue = await getValueFromLink(blocks, link)\n yield { key, value: docValue.doc, del: docValue.del } as DocUpdate\n }\n}\n\nexport async function * clockVis(blocks: TransactionBlockstore, head: ClockHead) {\n for await (const line of vis(blocks, head)) {\n yield line\n }\n}\n\nlet isCompacting = false\nexport async function doCompact(blocks: TransactionBlockstore, head: ClockHead) {\n if (isCompacting) {\n return\n }\n isCompacting = true\n const blockLog = new LoggingFetcher(blocks)\n\n for (const cid of head) {\n const bl = await blockLog.get(cid)\n if (!bl) throw new Error('Missing head block: ' + cid.toString())\n }\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 for await (const entry of getAllEntries(blockLog, head)) {\n // result.push(entry)\n }\n\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\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n for await (const _line of vis(blockLog, head)) {\n void 1\n }\n\n const result = await root(blockLog, head)\n for (const { cid, bytes } of [...result.additions, ...result.removals]) {\n blockLog.loggedBlocks.putSync(cid, bytes)\n }\n\n await clockChangesSince(blockLog, head, [], {})\n\n const done = await blocks.commitCompaction(blockLog.loggedBlocks, head)\n isCompacting = false\n return done\n}\n\nexport async function getThatBlock({ bytes }: {cid: string, bytes: string }) {\n const realBytes = Uint8Array.from(atob(bytes), c => c.charCodeAt(0))\n const { cid, value } = await decode({ bytes: realBytes, codec, hasher })\n return new Block({ cid, value, bytes: realBytes })\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 type { CarReader } from '@ipld/car'\nimport type {\n AnyLink,\n BulkResult,\n CarCommit,\n DbCarHeader,\n FileCarHeader,\n FileResult,\n FireproofOptions,\n IdxCarHeader,\n IdxMeta,\n IdxMetaMap\n} from './types'\nimport type { CRDT } from './crdt'\nimport type { CRDTClock } from './crdt-clock'\nimport { Loader, Connection } from './loader'\nimport { index } from './index'\nimport type { DataStore as AbstractDataStore } from './store'\n\nimport { DataStore } from './store-browser'\nimport { doCompact } from './crdt-helpers'\nimport { TransactionBlockstore } from './transaction'\n\nexport class IdxLoader extends Loader {\n // declare ready: Promise<IdxCarHeader>\n crdt: CRDT\n\n static defaultHeader = { cars: [], compact: [], indexes: new Map() as Map<string, IdxMeta> }\n defaultHeader = IdxLoader.defaultHeader\n\n constructor(name: string, crdt: CRDT, opts?: FireproofOptions) {\n super(name, opts)\n this.crdt = crdt\n }\n\n // eslint-disable-next-line @typescript-eslint/require-await\n async _applyCarHeader(header: IdxCarHeader) {\n for (const [name, idx] of Object.entries(header.indexes)) {\n index({ _crdt: this.crdt }, name, undefined, idx as IdxMeta)\n }\n }\n\n protected makeCarHeader(\n { indexes }: IndexerResult,\n cars: AnyLink[],\n compact: boolean = false\n ): IdxCarHeader {\n return compact ? { indexes, cars: [], compact: cars } : { indexes, cars, compact: [] }\n }\n}\nexport type IndexerResult = CarCommit & IdxMetaMap\n\nexport class DbLoader extends Loader {\n // declare ready: Promise<DbCarHeader> // todo this will be a map of headers by branch name\n static defaultHeader = { cars: [], compact: [], head: [] }\n defaultHeader = DbLoader.defaultHeader\n\n clock: CRDTClock\n awaitingCompact = false\n compacting: Promise<AnyLink | void> = Promise.resolve()\n writing: Promise<BulkResult | void> = Promise.resolve()\n\n remoteFileStore: AbstractDataStore | undefined\n fileStore: DataStore\n\n constructor(name: string, clock: CRDTClock, opts?: FireproofOptions) {\n super(name, opts)\n this.fileStore = new DataStore(this)\n this.clock = clock\n }\n\n async _readyForMerge() {\n // await this.ready\n await this.compacting\n }\n\n async _setWaitForWrite(_writingFn: () => Promise<any>) {\n const wr = this.writing\n this.writing = wr.then(async () => {\n await _writingFn()\n return wr\n })\n return this.writing.then(() => {})\n }\n\n async compact(blocks: TransactionBlockstore) {\n await this.ready\n if (this.carLog.length < 2) return\n if (this.awaitingCompact) return\n this.awaitingCompact = true\n const compactingFn = async () => {\n // await this.writing\n if (this.isCompacting) {\n return\n }\n\n if (this.isWriting) {\n return\n }\n\n this.isCompacting = true\n const compactHead = this.clock.head\n const compactingResult = await doCompact(blocks, this.clock.head)\n await this.clock.applyHead(compactHead, compactHead, null)\n return compactingResult\n }\n this.compacting = this._setWaitForWrite(compactingFn)\n this.compacting.finally(() => {\n this.isCompacting = false\n this.awaitingCompact = false\n })\n await this.compacting\n }\n\n async loadFileCar(cid: AnyLink, isPublic = false): Promise<CarReader> {\n return await this.storesLoadCar(cid, this.fileStore, this.remoteFileStore, isPublic)\n }\n\n protected async _applyCarHeader(carHeader: DbCarHeader, snap = false) {\n if (snap) {\n await this.clock.applyHead(carHeader.head, this.clock.head)\n } else {\n await this.clock.applyHead(carHeader.head, [])\n }\n }\n\n protected makeCarHeader(\n result: BulkResult | FileResult,\n cars: AnyLink[],\n compact: boolean = false\n ): DbCarHeader | FileCarHeader {\n if (isFileResult(result)) {\n const files = [] as AnyLink[]\n\n for (const [, meta] of Object.entries(result.files)) {\n files.push(meta.cid)\n }\n return { files } as FileCarHeader\n } else {\n const { head } = result\n return compact ? { head, cars: [], compact: cars } : { head, cars, compact: [] }\n }\n }\n}\n\nexport function isFileResult(\n result: IndexerResult | BulkResult | FileResult\n): result is FileResult {\n return result && (result as FileResult).files !== undefined\n}\n", "import { MemoryBlockstore } from '@alanshaw/pail/block'\nimport {\n BlockFetcher, AnyBlock, AnyLink, BulkResult, ClockHead,\n IdxMeta, CarCommit, CarMakeable, FireproofOptions\n} from './types'\nimport { DbLoader, IdxLoader } from './loaders'\n// import { CID } from 'multiformats'\nimport { CRDT } from './crdt'\nimport { CRDTClock } from './crdt-clock'\n\nexport class Transaction extends MemoryBlockstore implements CarMakeable {\n parent: FireproofBlockstore\n constructor(parent: FireproofBlockstore) {\n super()\n parent.transactions.add(this)\n this.parent = parent\n }\n\n async get(cid: AnyLink): Promise<AnyBlock | undefined> {\n return this.parent.get(cid)\n }\n\n async superGet(cid: AnyLink): Promise<AnyBlock | undefined> {\n return super.get(cid)\n }\n}\n\nabstract class FireproofBlockstore implements BlockFetcher {\n ready: Promise<void>\n name: string | null = null\n\n loader: DbLoader | IdxLoader | null = null\n opts: FireproofOptions = {}\n\n transactions: Set<Transaction> = new Set()\n\n constructor(name: string | null, loader?: DbLoader | IdxLoader, opts?: FireproofOptions) {\n this.opts = opts || this.opts\n if (name) {\n this.name = name\n if (!loader) throw new Error('missing loader')\n this.loader = loader\n this.ready = this.loader.ready\n } else {\n this.ready = Promise.resolve() // Promise.reject(new Error('implement default header in subclass'))\n }\n }\n\n abstract transaction(\n fn: (t: Transaction) => Promise<IdxMeta | BulkResult>,\n indexes?: Map<string, IdxMeta>,\n opts?: { noLoader: boolean }\n ): Promise<BulkResultCar | IdxMetaCar>\n\n // eslint-disable-next-line @typescript-eslint/require-await\n async put() {\n throw new Error('use a transaction to put')\n }\n\n async get(cid: AnyLink): Promise<AnyBlock | undefined> {\n if (!cid) throw new Error('required cid')\n for (const f of this.transactions) {\n const v = await f.superGet(cid)\n if (v) return v\n }\n if (!this.loader) return\n return await this.loader.getBlock(cid)\n }\n\n async commitCompaction(t: Transaction, head: ClockHead) {\n const did = await this.loader!.commit(t, { head }, { compact: true, noLoader: true })\n // this.transactions.clear()\n // this.transactions.add(t)\n return did\n }\n\n async *entries(): AsyncIterableIterator<AnyBlock> {\n const seen: Set<string> = new Set()\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 protected async executeTransaction<T, R>(\n fn: (t: Transaction) => Promise<T>,\n commitHandler: (t: Transaction, done: T) => Promise<{ car?: AnyLink; done: R }>\n ): Promise<R> {\n const t = new Transaction(this)\n const done: T = await fn(t)\n const { car, done: result } = await commitHandler(t, done)\n return car ? { ...result, car } : result\n }\n}\n\nexport class IndexBlockstore extends FireproofBlockstore {\n // declare ready: Promise<IdxCarHeader>\n\n constructor(name: string | null, crdt: CRDT, opts?: FireproofOptions) {\n if (name) {\n super(name, new IdxLoader(name, crdt, opts), opts)\n } else {\n super(null)\n // this.ready = Promise.resolve(IdxLoader.defaultHeader as IdxCarHeader)\n }\n }\n\n async transaction(fn: (t: Transaction) => Promise<IdxMeta>, indexes: Map<string, IdxMeta>): Promise<IdxMetaCar> {\n return this.executeTransaction(fn, async (t, done) => {\n indexes.set(done.name, done)\n const car = await this.loader?.commit(t, { indexes })\n return { car, done }\n })\n }\n}\n\nexport class TransactionBlockstore extends FireproofBlockstore {\n // declare ready: Promise<DbCarHeader>\n\n constructor(name: string | null, clock: CRDTClock, opts?: FireproofOptions) {\n // todo this will be a map of headers by branch name\n if (name) {\n super(name, new DbLoader(name, clock, opts), opts)\n } else {\n super(null)\n // this.ready = Promise.resolve(DbLoader.defaultHeader as DbCarHeader)\n }\n }\n\n async transaction(\n fn: (t: Transaction) => Promise<BulkResult>,\n _indexes?: undefined,\n opts = { noLoader: false }\n ): Promise<BulkResultCar> {\n return this.executeTransaction(fn, async (t, done) => {\n // if the fn will change noLoader, it will show up on done\n const car = await this.loader?.commit(t, done, opts)\n return { car, done }\n })\n }\n}\n\ntype IdxMetaCar = IdxMeta & CarCommit\ntype BulkResultCar = BulkResult & CarCommit\n\nexport class LoggingFetcher implements BlockFetcher {\n blocks: TransactionBlockstore\n loader: DbLoader | IdxLoader | null = null\n loggedBlocks : Transaction\n \n\n constructor(blocks: TransactionBlockstore) {\n this.blocks = blocks\n this.loader = blocks.loader\n this.loggedBlocks = new Transaction(blocks)\n }\n\n async get(cid: AnyLink) {\n const block = await this.blocks.get(cid)\n if (block) this.loggedBlocks.putSync(cid, block.bytes)\n return block\n }\n}\n", "// import { Transaction } from './transaction'\nimport { ClockHead, DocUpdate } from './types'\n\ntype ApplyHeadWorkerFunction = (\n id: string,\n // tblocks: Transaction | null,\n newHead: ClockHead,\n prevHead: ClockHead,\n updates: DocUpdate[] | null\n) => Promise<void>\n\ntype ApplyHeadTask = {\n id: string\n // tblocks: Transaction | null\n newHead: ClockHead\n prevHead: ClockHead\n updates: DocUpdate[] | null\n}\n\nexport type ApplyHeadQueue = {\n push(task: ApplyHeadTask): AsyncGenerator<{ updates: DocUpdate[]; all: boolean }, void, unknown>\n}\n\nexport function applyHeadQueue(worker: ApplyHeadWorkerFunction): ApplyHeadQueue {\n const queue: ApplyHeadTask[] = []\n let isProcessing = false\n\n async function * process() {\n if (isProcessing || queue.length === 0) return\n isProcessing = true\n const allUpdates: DocUpdate[] = []\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 await worker(task.id, task.newHead, task.prevHead, task.updates)\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 // console.log('yielding', allUpdates.length, allTasksHaveUpdates)\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(\n task: ApplyHeadTask\n ): AsyncGenerator<{ updates: DocUpdate[]; all: boolean }, void, unknown> {\n queue.push(task)\n return process()\n }\n }\n}\n", "import { clockChangesSince } from './crdt-helpers'\n// import { uniqueCids } from './loader'\nimport { TransactionBlockstore, Transaction } from './transaction'\nimport type { DocUpdate, BulkResult, ClockHead } from './types'\nimport { advance } from '@alanshaw/pail/clock'\nimport { root } from '@alanshaw/pail/crdt'\nimport { applyHeadQueue, ApplyHeadQueue } from './apply-head-queue'\n\nexport class CRDTClock {\n // todo: keep the clock of remote and local changes separate, 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 blocks on write\n head: ClockHead = []\n\n zoomers: Set<() => void> = new Set()\n watchers: Set<(updates: DocUpdate[]) => void> = new Set()\n emptyWatchers: Set<() => void> = new Set()\n\n blocks: TransactionBlockstore | null = null\n\n applyHeadQueue: ApplyHeadQueue\n\n constructor() {\n this.applyHeadQueue = applyHeadQueue(this.int_applyHead.bind(this))\n }\n\n setHead(head: ClockHead) {\n this.head = head\n }\n\n async applyHead(\n // tblocks: Transaction | null,\n newHead: ClockHead,\n prevHead: ClockHead,\n updates: DocUpdate[] | null = null\n ) {\n const taskId = Math.random().toString().slice(2, 8)\n // console.log('applyHead', taskId, updates?.length, 'og', this.head.sort((a, b) => a.toString().localeCompare(b.toString())).toString(), 'new', newHead.toString(), 'prev', prevHead.toString())\n for await (const { updates: updatesAcc, all } of this.applyHeadQueue.push({\n id: taskId,\n // tblocks,\n newHead,\n prevHead,\n updates\n })) {\n ;((updatesAcc, all) => {\n void Promise.resolve().then(async () => {\n let intUpdates = updatesAcc\n if (this.watchers.size && !all) {\n const changes = await clockChangesSince(this.blocks!, this.head, prevHead, {})\n intUpdates = changes.result\n }\n this.zoomers.forEach(fn => fn())\n this.notifyWatchers(intUpdates || [])\n })\n })([...updatesAcc], all)\n }\n }\n\n async int_applyHead(\n taskId: string,\n // tblocks: Transaction | null,\n newHead: ClockHead,\n prevHead: ClockHead\n // updates: DocUpdate[] | null = null\n ) {\n const ogHead = this.head.sort((a, b) => a.toString().localeCompare(b.toString()))\n newHead = newHead.sort((a, b) => a.toString().localeCompare(b.toString()))\n newHead.map(async cid => {\n const got = await this.blocks!.get(cid)\n if (!got) {\n throw new Error('int_applyHead missing block: ' + cid.toString())\n }\n })\n if (ogHead.toString() === newHead.toString()) {\n // this.notifyWatchers(updates || [])\n return\n }\n const ogPrev = prevHead.sort((a, b) => a.toString().localeCompare(b.toString()))\n if (ogHead.toString() === ogPrev.toString()) {\n this.setHead(newHead)\n // this.notifyWatchers(updates || [])\n return\n }\n let head = this.head\n // const noLoader = this.head.length === 1 && !updates?.length\n const noLoader = false\n const withBlocks = async (\n fn: (blocks: Transaction) => Promise<BulkResult>\n ) => {\n if (!this.blocks) throw new Error('missing blocks')\n return await this.blocks.transaction(fn, undefined, { noLoader })\n }\n await withBlocks(async tblocks => {\n for (const cid of newHead) {\n try {\n head = await advance(tblocks, head, cid)\n } catch (e) {\n console.error('failed to advance', cid.toString(), e)\n continue\n }\n }\n const result = await root(tblocks, head)\n for (const { cid, bytes } of [...result.additions, ...result.removals]) {\n tblocks.putSync(cid, bytes)\n }\n return { head }\n })\n this.setHead(head)\n }\n\n notifyWatchers(updates: DocUpdate[]) {\n this.emptyWatchers.forEach(fn => fn())\n this.watchers.forEach(fn => fn(updates || []))\n }\n\n onTick(fn: (updates: DocUpdate[]) => 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", "import { TransactionBlockstore, IndexBlockstore } from './transaction'\nimport { clockChangesSince, applyBulkUpdateToCrdt, getValueFromCrdt, readFiles, getAllEntries, clockVis, getBlock, getThatBlock } from './crdt-helpers'\nimport type { DocUpdate, BulkResult, ClockHead, FireproofOptions, ChangesOptions } from './types'\nimport type { Index } from './index'\nimport { CRDTClock } from './crdt-clock'\nimport { DbLoader } from './loaders'\n\nexport class CRDT {\n name: string | null\n opts: FireproofOptions = {}\n ready: Promise<void>\n blocks: TransactionBlockstore\n indexBlocks: IndexBlockstore\n\n indexers: Map<string, Index> = new Map()\n\n clock: CRDTClock = new CRDTClock()\n // isCompacting = false\n // compacting : Promise<AnyLink|void> = Promise.resolve()\n // writing: Promise<BulkResult|void> = Promise.resolve()\n\n constructor(name?: string, opts?: FireproofOptions) {\n this.name = name || null\n this.opts = opts || this.opts\n this.blocks = new TransactionBlockstore(this.name, this.clock, this.opts)\n this.clock.blocks = this.blocks\n this.indexBlocks = new IndexBlockstore(\n this.opts.persistIndexes && this.name ? this.name + '.idx' : null,\n this,\n this.opts\n )\n this.ready = Promise.all([this.blocks.ready, this.indexBlocks.ready]).then(() => {})\n this.clock.onZoom(() => {\n for (const idx of this.indexers.values()) {\n idx._resetIndex()\n }\n })\n this.clock.onTock(async () => {\n if (this.blocks.loader && this.blocks.loader.carLog.length < 100) return\n await this.compact()\n })\n }\n\n async bulk(updates: DocUpdate[], options?: object): Promise<BulkResult> {\n await this.ready\n const loader = this.blocks.loader as DbLoader\n\n const prevHead = [...this.clock.head]\n\n const writing = (async () => {\n await loader?.compacting\n if (loader?.isCompacting) {\n throw new Error('cant bulk while compacting')\n }\n const got = await this.blocks.transaction(async (tblocks): Promise<BulkResult> => {\n const { head } = await applyBulkUpdateToCrdt(tblocks, this.clock.head, updates, options)\n updates = updates.map(({ key, value, del, clock }) => {\n readFiles(this.blocks, { doc: value })\n return { key, value, del, clock }\n })\n if (loader?.awaitingCompact) {\n console.log('missing?', head.toString())\n }\n if (loader?.isCompacting) {\n console.log('compacting?', head.toString())\n }\n return { head }\n })\n await this.clock.applyHead(got.head, prevHead, updates)\n return got\n })()\n if (loader) {\n const wr = loader.writing\n loader.writing = wr.then(async () => {\n loader.isWriting = true\n await writing\n loader.isWriting = false\n return wr\n })\n }\n return (await writing)!\n }\n\n async allDocs() {\n await this.ready\n const result: DocUpdate[] = []\n for await (const entry of getAllEntries(this.blocks, this.clock.head)) {\n result.push(entry)\n }\n return { result, head: this.clock.head }\n }\n\n async vis() {\n await this.ready\n const txt = []\n for await (const line of clockVis(this.blocks, this.clock.head)) {\n txt.push(line)\n }\n return txt.join('\\n')\n }\n\n async getBlock(cidString: string) {\n await this.ready\n return await getBlock(this.blocks, cidString)\n }\n\n async getThatBlock() {\n const blockJson = { cid: 'bafyreib7ee4pscqpuioxobmh3ac5xbbslypmaqqbkugalhw67hnco6dvoa', bytes: 'omRkYXRhpGNrZXl4JDAxOGFmNzdiLWZmMTUtNzI5Ny04ODZiLTYwMjViM2MxODI2ZWRyb2902CpYJQABcRIgKVLI53HO1TFDbPUoSaybd0mop2oX/CRFm1RrpiY4ne9kdHlwZWNwdXRldmFsdWXYKlglAAFxEiAGw53MVtPzeeGT/itfdLBfCVu6MTj96AHU6v9a3K/wYGdwYXJlbnRzgdgqWCUAAXESIJiL5qjdpgghUfbQLpKJeCgMX+ubhoTpYBoZHYdzbQJ/' }\n return await getThatBlock(blockJson)\n }\n\n async get(key: string) {\n await this.ready\n const result = await getValueFromCrdt(this.blocks, this.clock.head, key)\n if (result.del) return null\n return result\n }\n\n async changes(since: ClockHead = [], opts: ChangesOptions = {}) {\n await this.ready\n return await clockChangesSince(this.blocks, this.clock.head, since, opts)\n }\n\n async compact() {\n await this.ready\n if (this.blocks.loader) {\n await (this.blocks.loader as DbLoader).compact(this.blocks)\n }\n }\n}\n", "import { uuidv7 } from 'uuidv7'\n\nimport { WriteQueue, writeQueue } from './write-queue'\nimport { CRDT } from './crdt'\nimport { index } from './index'\nimport type { BulkResult, DocUpdate, ClockHead, Doc, FireproofOptions, MapFn, QueryOpts, ChangesOptions } from './types'\nimport { DbResponse, ChangesResponse } from './types'\n\ntype DbName = string | null\n\nexport class Database {\n static databases: Map<string, Database> = new Map()\n\n name: DbName\n opts: FireproofOptions = {}\n\n _listening = false\n _listeners: Set<ListenerFn> = new Set()\n _noupdate_listeners: Set<ListenerFn> = new Set()\n _crdt: CRDT\n _writeQueue: WriteQueue\n\n constructor(name?: string, opts?: FireproofOptions) {\n this.name = name || null\n this.opts = opts || this.opts\n this._crdt = new CRDT(name, this.opts)\n this._writeQueue = writeQueue(async (updates: DocUpdate[]) => {\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(id: string): Promise<Doc> {\n const got = await this._crdt.get(id).catch(e => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n e.message = `Not found: ${id} - ` + e.message\n throw e\n })\n if (!got) throw new Error(`Not found: ${id}`)\n const { doc } = got\n return { _id: id, ...doc } as Doc\n }\n\n async put(doc: Doc): Promise<DbResponse> {\n const { _id, ...value } = doc\n const docId = _id || uuidv7()\n const result: BulkResult = await this._writeQueue.push({ key: docId, value } as DocUpdate)\n return { id: docId, clock: result?.head } as DbResponse\n }\n\n async del(id: string): Promise<DbResponse> {\n const result = await this._writeQueue.push({ key: id, del: true })\n return { id, clock: result?.head } as DbResponse\n }\n\n async changes(since: ClockHead = [], opts: ChangesOptions = {}): Promise<ChangesResponse> {\n const { result, head } = await this._crdt.changes(since, opts)\n const rows = result.map(({ key, value, del, clock }) => ({\n key, value: (del ? { _id: key, _deleted: true } : { _id: key, ...value }) as Doc, clock\n }))\n return { rows, clock: head }\n }\n\n async allDocs() {\n const { result, head } = await this._crdt.allDocs()\n const rows = result.map(({ key, value, del }) => ({\n key, value: (del ? { _id: key, _deleted: true } : { _id: key, ...value }) as Doc\n }))\n return { rows, clock: head }\n }\n\n subscribe(listener: ListenerFn|NoUpdateListenerFn, updates?: boolean): () => void {\n if (updates) {\n if (!this._listening) {\n this._listening = true\n this._crdt.clock.onTick((updates: DocUpdate[]) => {\n void this._notify(updates)\n })\n }\n this._listeners.add(listener)\n return () => {\n this._listeners.delete(listener)\n }\n } else {\n this._noupdate_listeners.add(listener)\n return () => {\n this._noupdate_listeners.delete(listener)\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(field: string | MapFn, opts: QueryOpts = {}) {\n const idx = (typeof field === 'string')\n ? index({ _crdt: this._crdt }, field)\n : index({ _crdt: this._crdt }, makeName(field.toString()), field)\n return await idx.query(opts)\n }\n\n async compact() {\n await this._crdt.compact()\n }\n\n // move this stuff to connect\n async getDashboardURL(compact = true) {\n const baseUrl = 'https://dashboard.fireproof.storage/'\n if (!this._crdt.blocks.loader?.remoteCarStore) return new URL('/howto', baseUrl)\n if (compact) {\n await this.compact()\n }\n const currents = await this._crdt.blocks.loader?.metaStore?.load()\n if (!currents) throw new Error('Can\\'t sync empty database: save data first')\n if (currents.length > 1) 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 // @ts-ignore\n if (current.key) { params.key = current.key.toString() }\n // @ts-ignore\n if (this.name) { params.name = this.name }\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 async _notify(updates: DocUpdate[]) {\n if (this._listeners.size) {\n const docs: Doc[] = updates.map(({ key, value }) => ({ _id: key, ...value }))\n for (const listener of this._listeners) {\n await (async () => await listener(docs))().catch((e: Error) => {\n console.error('subscriber error', e)\n })\n }\n }\n }\n\n async _no_update_notify() {\n if (this._noupdate_listeners.size) {\n for (const listener of this._noupdate_listeners) {\n await (async () => await listener([]))().catch((e: Error) => {\n console.error('subscriber error', e)\n })\n }\n }\n }\n}\n\ntype UpdateListenerFn = (docs: Doc[]) => Promise<void> | void\ntype NoUpdateListenerFn = () => Promise<void> | void\ntype ListenerFn = UpdateListenerFn | NoUpdateListenerFn\n\nexport function fireproof(name: string, opts?: FireproofOptions): Database {\n if (!Database.databases.has(name)) {\n Database.databases.set(name, new Database(name, opts))\n }\n return Database.databases.get(name)!\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 everythign after the arrow\n return found[1]\n }\n}\n"],
5
+ "mappings": "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;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAC7C;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAC7C;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAC7C;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAC7C;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAC7C;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAC7C;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAC7C;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAC7C;AAAA,EAAG;A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",
6
+ "names": ["exports", "module", "encode", "MSB", "REST", "MSBALL", "INT", "offset", "exports", "module", "read", "MSB", "REST", "buf", "offset", "exports", "module", "N1", "N2", "N3", "N4", "N5", "N6", "N7", "N8", "N9", "exports", "module", "exports", "exports", "match", "encode", "decode", "open", "close", "exports", "exports", "module", "offset", "index", "resolve", "params", "exports", "base64", "length", "string", "encode", "buffer", "i", "decode", "offset", "exports", "module", "EventEmitter", "exports", "module", "buf", "exports", "utf8", "string", "buffer", "offset", "exports", "module", "alloc", "slice", "size", "offset", "buf", "exports", "module", "util", "from", "mask", "length", "exports", "util", "Buffer", "merge", "src", "keys", "name", "message", "get", "i", "size", "exports", "module", "util", "base64", "utf8", "writer", "create", "alloc", "size", "push", "buf", "writeBytes", "fork", "exports", "module", "util", "buf", "exports", "module", "util", "utf8", "reader", "buffer", "create_array", "create", "buf", "length", "exports", "module", "util", "buffer", "exports", "module", "util", "self", "err", "exports", "exports", "module", "exports", "configure", "require_minimal", "exports", "module", "exports", "module", "root", "undefined", "exports", "module", "exports", "module", "assign", "code", "exports", "module", "index", "last", "exists", "mask", "exports", "module", "has", "context", "EventEmitter", "name", "length", "update", "index", "resolve", "offset", "buf", "decode", "offset", "code", "code", "digest", "size", "decode", "equals", "name", "encode", "length", "size", "i", "j", "decode", "string", "buffer", "name", "encode", "decode", "alphabet", "string", "buffer", "mask", "link", "base", "baseCache", "code", "digest", "self", "equals", "base", "decode", "offset", "length", "size", "cache", "cid", "base", "link", "current", "resolve", "enqueue", "decode", "encode", "name", "type", "isBuffer", "buf", "toString", "fromString", "string", "length", "size", "isBuffer", "string", "length", "buf", "offset", "offset", "buf", "set", "encodedSize", "buf", "encodedSize", "compareTokens", "length", "buf", "fromString", "encodedSize", "compareTokens", "toToken", "length", "toString", "toToken", "length", "buf", "encodedSize", "toToken", "length", "buf", "encodedSize", "buf", "encodedSize", "buf", "encodedSize", "ui8a", "offset", "entries", "keys", "length", "buf", "size", "encode", "decode", "encode_1", "encode", "MSB", "REST", "MSBALL", "INT", "offset", "decode", "read", "MSB$1", "REST$1", "buf", "N1", "N2", "N3", "N4", "N5", "N6", "N7", "N8", "N9", "length", "varint", "_brrp_varint", "varint_default", "decode", "offset", "code", "varint_default", "encodeTo", "encodingLength", "bytes_exports", "coerce", "empty", "equals", "fromString", "toString", "create", "code", "digest", "size", "encodingLength", "encodeTo", "Digest", "decode", "coerce", "equals", "base", "name", "encode", "length", "size", "i", "j", "decode", "string", "buffer", "src", "_brrp__multiformats_scope_baseX", "base_x_default", "Encoder", "name", "Decoder", "or", "ComposedDecoder", "Codec", "from", "encode", "decode", "baseX", "alphabet", "base_x_default", "coerce", "string", "buffer", "mask", "rfc4648", "base58btc", "baseX", "base58flickr", "base32", "rfc4648", "base32upper", "base32pad", "base32padupper", "base32hex", "base32hexupper", "base32hexpad", "base32hexpadupper", "base32z", "format", "link", "base", "toStringV0", "baseCache", "base58btc", "toStringV1", "base32", "cache", "baseCache", "CID", "code", "DAG_PB_CODE", "SHA_256_CODE", "digest", "create", "self", "equals", "base", "format", "encodeCID", "cidSymbol", "decode", "coerce", "Digest", "offset", "length", "size", "parseCIDtoBytes", "base58btc", "base32", "toStringV0", "cid", "toStringV1", "encodingLength", "encodeTo", "CID", "encode", "decode", "keys", "name", "import_varint", "varint", "offset", "length", "reader", "length", "decode", "bytes", "multihash", "blockLength", "offset", "index", "read", "index", "reader", "CarReader", "blockLength", "read", "fs", "fsread", "fs", "reader", "fromBytes", "reader", "fs", "promisify", "import_varint", "fsread", "promisify", "fs", "import_varint", "typeofs", "objectTypeNames", "is", "isBuffer", "getObjectType", "Type", "name", "Token", "type", "useBuffer", "textDecoder", "textEncoder", "isBuffer", "buf", "asU8A", "toString", "utf8Slice", "fromString", "string", "utf8ToBytes", "fromArray", "slice", "concat", "length", "alloc", "size", "compare", "isBuffer", "utf8ToBytes", "string", "length", "utf8Slice", "buf", "offset", "decodeCodePointsArray", "MAX_ARGUMENTS_LENGTH", "defaultChunkSize", "Bl", "alloc", "slice", "concat", "decodeErrPrefix", "encodeErrPrefix", "uintMinorPrefixBytes", "assertEnoughData", "uintBoundaries", "readUint8", "offset", "assertEnoughData", "decodeErrPrefix", "readUint16", "readUint32", "readUint64", "decodeUint8", "Token", "Type", "decodeUint16", "decodeUint32", "decodeUint64", "encodeUint", "buf", "encodeUintValue", "set", "encodedSize", "compareTokens", "decodeNegint8", "Token", "Type", "readUint8", "decodeNegint16", "readUint16", "decodeNegint32", "readUint32", "neg1b", "pos1b", "decodeNegint64", "readUint64", "decodeErrPrefix", "encodeNegint", "buf", "encodeUintValue", "encodedSize", "uintBoundaries", "compareTokens", "toToken", "length", "assertEnoughData", "buf", "slice", "Token", "Type", "decodeBytesCompact", "decodeBytes8", "readUint8", "decodeBytes16", "readUint16", "decodeBytes32", "readUint32", "decodeBytes64", "readUint64", "decodeErrPrefix", "tokenBytes", "fromString", "encodeBytes", "encodeUintValue", "encodedSize", "compareTokens", "compareBytes", "compare", "toToken", "length", "assertEnoughData", "Token", "Type", "toString", "slice", "decodeStringCompact", "decodeString8", "readUint8", "decodeString16", "readUint16", "decodeString32", "readUint32", "decodeString64", "readUint64", "decodeErrPrefix", "encodeString", "encodeBytes", "toToken", "length", "Token", "Type", "decodeArrayCompact", "decodeArray8", "readUint8", "decodeArray16", "readUint16", "decodeArray32", "readUint32", "decodeArray64", "readUint64", "decodeErrPrefix", "decodeArrayIndefinite", "encodeArray", "buf", "encodeUintValue", "encodeUint", "encodedSize", "toToken", "length", "Token", "Type", "decodeMapCompact", "decodeMap8", "readUint8", "decodeMap16", "readUint16", "decodeMap32", "readUint32", "decodeMap64", "readUint64", "decodeErrPrefix", "decodeMapIndefinite", "encodeMap", "buf", "encodeUintValue", "encodeUint", "encodedSize", "decodeTagCompact", "Token", "Type", "decodeTag8", "readUint8", "decodeTag16", "readUint16", "decodeTag32", "readUint32", "decodeTag64", "readUint64", "encodeTag", "buf", "encodeUintValue", "encodeUint", "encodedSize", "MINOR_FALSE", "MINOR_TRUE", "MINOR_NULL", "MINOR_UNDEFINED", "decodeUndefined", "decodeErrPrefix", "Token", "Type", "decodeBreak", "createToken", "decodeFloat16", "readFloat16", "decodeFloat32", "readFloat32", "decodeFloat64", "readFloat64", "encodeFloat", "buf", "encodeFloat16", "ui8a", "encodeFloat32", "encodeFloat64", "encodedSize", "buffer", "dataView", "offset", "encodeUint", "invalidMinor", "decodeErrPrefix", "errorer", "jump", "decodeUint8", "decodeUint16", "decodeUint32", "decodeUint64", "decodeNegint8", "decodeNegint16", "decodeNegint32", "decodeNegint64", "decodeBytesCompact", "decodeBytes8", "decodeBytes16", "decodeBytes32", "decodeBytes64", "decodeStringCompact", "decodeString8", "decodeString16", "decodeString32", "decodeString64", "decodeArrayCompact", "decodeArray8", "decodeArray16", "decodeArray32", "decodeArray64", "decodeArrayIndefinite", "decodeMapCompact", "decodeMap8", "decodeMap16", "decodeMap32", "decodeMap64", "decodeMapIndefinite", "decodeTagCompact", "decodeTag8", "decodeTag16", "decodeTag32", "decodeTag64", "decodeUndefined", "decodeFloat16", "decodeFloat32", "decodeFloat64", "decodeBreak", "quick", "Token", "Type", "quickEncodeToken", "fromArray", "makeCborEncoders", "Type", "encodeUint", "encodeNegint", "encodeBytes", "encodeString", "encodeArray", "encodeMap", "encodeTag", "encodeFloat", "cborEncoders", "buf", "Bl", "Ref", "encodeErrPrefix", "simpleTokens", "Token", "typeEncoders", "entries", "objectToTokens", "keys", "length", "sortMapEntries", "is", "DONE", "BREAK", "cborEncoders", "makeCborEncoders", "defaultEncodeOptions", "quickEncodeToken", "cborEncoders", "defaultEncodeOptions", "root", "writer", "size", "varint", "encode", "offset", "Token", "Type", "length", "buffer", "writer", "root", "from", "name", "code", "encode", "create", "digest", "index", "CID", "base", "encode", "decode", "create", "bytes_exports", "crypto", "from", "coerce", "crypto", "code", "decode", "encode", "name", "name", "code", "encode", "coerce", "decode", "size", "buffer", "writer", "encode", "reader", "decode", "code", "decode", "encode", "name", "crypto", "size", "buffer", "offset", "concat", "encode", "decode", "code", "crypto", "CID", "name", "readUInt32LE", "buffer", "offset", "identity", "entries", "compare", "keys", "last", "del", "chunker", "Node", "root", "newBranchEntries", "cache", "result", "entry", "cids", "results", "LeafClass", "BranchClass", "entries2", "final", "opts", "block", "encode", "create", "compare", "buffer", "readUInt32LE", "get", "cache", "chunker", "entries", "create", "encrypt", "get", "cache", "chunker", "root", "set", "block", "encode", "CID", "last", "create", "decrypt", "decode", "tree", "length", "last", "encrypt", "reader", "root", "get", "decrypt", "buf", "is", "fromString", "mapSorter", "defaultEncodeOptions", "encode", "decode", "rfc4648", "cidEncoder", "CID", "undefinedEncoder", "numberEncoder", "encodeOptions", "decodeOptions", "encode", "encodeOptions", "decode", "decodeOptions", "format", "parse", "decode", "name", "format", "parse", "resolve", "DataStore", "RemoteWAL", "parse", "format", "MetaStore", "remove", "name", "MetaStore", "DataStore", "RemoteWAL", "CID", "reader", "cid", "CarReader", "root", "crypto", "readUInt32LE", "keys", "entries", "createGetNode", "get", "cache", "chunker", "compare", "LeafClass", "BranchClass", "create", "load", "value", "compare", "entries", "key", "classes", "create", "load", "refCompare", "compare", "del", "charwise", "create", "load", "root", "name", "result", "all", "parse", "base", "CID", "from", "name", "code", "encode", "Hasher", "digest", "readonly", "linksWithin", "index", "links", "base", "treeWithin", "tree", "get", "Block", "encode", "decode", "sha256", "sha512", "crypto", "sha256", "from", "crypto", "sha512", "Block", "link", "encode", "sha256", "decode", "links", "Block", "encode", "sha256", "decode", "link", "root", "child", "value", "key", "entry", "get", "put", "result", "data", "event", "root", "root", "get", "entries", "code", "decode", "encode", "encodeLink", "name", "textDecoder", "decodeVarint", "offset", "index", "link", "links", "textEncoder", "link", "size", "index", "offset", "base", "textEncoder", "link", "code", "encode", "link", "decode", "$protobuf", "Data", "encode", "decode", "toJSON", "values", "UnixTime", "Metadata", "code", "name", "links", "encode", "entries", "encodeLink", "encode", "root", "decode", "message", "type", "links", "links", "length", "link", "size", "root", "name", "message", "message", "name", "effect", "effects", "tag", "tag", "group", "self", "group", "fork", "from", "index", "BLANK", "error", "init", "message", "none", "empty", "slice", "buffer", "empty", "offset", "get", "EMPTY_BUFFER", "EMPTY", "config", "empty", "EMPTY", "close", "buffer", "chunker", "offset", "size", "EMPTY", "has", "link", "links", "BLANK", "EMPTY", "keys", "has", "link", "EMPTY", "BLANK", "message", "write", "close", "writer", "config", "chunker", "link", "root", "fork", "EMPTY_BUFFER", "links", "buffer", "name", "name", "Node", "open", "write", "close", "defaults", "EMPTY", "layout", "root", "index", "length", "defaults", "sha256", "config", "code", "name", "create", "writer", "settings", "defaults", "write", "close", "effect", "message", "defaults", "create", "writer", "settings", "name", "link", "close", "entries", "links", "digest", "code", "fork", "empty", "from", "fromBytes", "get", "or", "set", "empty", "size", "from", "set", "bitField", "index", "get", "or", "fromBytes", "murmur", "configure", "bitWidth", "mask", "at", "from", "config", "create", "fork", "entries", "name", "index", "offset", "create", "config", "get", "offset", "index", "set", "remove", "config", "offset", "index", "fork", "entries", "import_murmurhash3js_revisited", "from", "mur", "bytes_exports", "utf8", "configure", "bitWidth", "at", "offset", "from", "mask", "and", "empty", "from", "fromBytes", "get", "or", "popcount", "set", "size", "toBytes", "unset", "empty", "size", "from", "index", "set", "unset", "get", "toBytes", "fromBytes", "popcount", "offset", "byte", "or", "and", "configure", "bitWidth", "get", "config", "configure", "create", "root", "set", "remove", "utf8", "hash64", "configure", "bitWidth", "at", "read", "from", "digest", "bitCount", "offset", "configure", "builder", "builder", "root", "get", "createWriter", "settings", "defaults", "close", "writer", "create", "import_err_code", "res", "import_err_code", "code", "name", "encode", "coerce", "create", "name", "resolve", "decode", "CID", "errCode", "import_err_code", "type", "blockLength", "import_err_code", "size", "offset", "length", "errCode", "buf", "resolve", "name", "errCode", "decode", "import_err_code", "rawContent", "buf", "resolve", "name", "errCode", "import_err_code", "import_err_code", "import_reader", "import_minimal", "import_writer", "configure", "util", "ReaderClass", "ReaderBufferClass", "WriterClass", "WriterBufferClass", "buf", "buf", "message", "CODEC_TYPES", "name", "type", "encode", "decode", "encode", "writer", "decode", "reader", "encode", "decode", "Data", "DataType", "__DataTypeValues", "UnixTime", "reader", "length", "tag", "buf", "Metadata", "DEFAULT_FILE_MODE", "DEFAULT_DIRECTORY_MODE", "message", "Data", "type", "errcode", "size", "index", "identity", "identity", "buf", "base2", "base2", "base64", "base64pad", "base64url", "base64urlpad", "base64", "base64pad", "base64url", "base64urlpad", "encode", "decode", "identity_exports", "identity", "code", "name", "encode", "digest", "identity", "textEncoder", "textDecoder", "identity_exports", "asUint8Array", "buf", "size", "asUint8Array", "createCodec", "name", "encode", "decode", "buf", "string", "fromString", "string", "base", "asUint8Array", "SparseArray", "map", "acc", "index", "fromString", "length", "mask", "concat", "length", "offset", "asUint8Array", "hashFn", "concat", "buffer", "buf", "links", "link", "name", "context", "decode", "src_default", "isAsyncIterable", "peekable", "src_default", "isAsyncIterable", "peekable", "src_default", "resolve", "last", "message", "code", "buffer", "buffer", "pushable", "resolve", "push", "options", "_pushable", "isAsyncIterable", "src_default", "isAsyncIterable", "source", "src_default", "resolve", "offset", "length", "links", "src_default", "link", "import_err_code", "message", "AbortError", "resolve", "step", "index", "__classPrivateFieldGet", "AbortError", "EventEmitter", "resolve", "_PQueue_doesIntervalAllowAnother_get", "_PQueue_doesConcurrentAllowAnother_get", "_PQueue_next", "_PQueue_onResumeInterval", "_PQueue_isIntervalPaused_get", "_PQueue_tryToStartAnother", "_PQueue_initializeIntervalIfNeeded", "_PQueue_onInterval", "_PQueue_processQueue", "_PQueue_throwOnAbort", "_PQueue_onEvent", "filter", "buf", "errCode", "src_default", "link", "code", "decode", "resolve", "read", "resolve", "links", "src_default", "link", "name", "decode", "entries", "name", "link", "resolve", "decode", "errCode", "code", "resolve", "name", "errCode", "CID", "errCode", "name", "encodeFile", "collect", "createWriter", "name", "writer", "create", "update", "link", "put", "encode", "encodeFile", "name", "get", "reader", "decode", "keys", "entries", "parse", "name", "DataStore", "name", "task", "updatesAcc", "all", "name", "del", "name", "del", "updates", "current", "match"]
7
+ }