ipfs-unixfs-importer 16.0.1 → 16.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.min.js.map +2 -2
- package/dist/src/index.d.ts +21 -9
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +21 -9
package/dist/index.min.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../node_modules/murmurhash3js-revisited/lib/murmurHash3js.js", "../../../node_modules/murmurhash3js-revisited/index.js", "../../../node_modules/sparse-array/index.js", "../src/index.ts", "../../../node_modules/it-first/src/index.ts", "../../../node_modules/it-batch/src/index.ts", "../../../node_modules/it-parallel-batch/src/index.ts", "../../../node_modules/uint8arrays/src/alloc.ts", "../../../node_modules/uint8arrays/src/concat.ts", "../../../node_modules/uint8arrays/src/equals.ts", "../../../node_modules/uint8arraylist/src/index.ts", "../src/chunker/fixed-size.ts", "../../../node_modules/@ipld/dag-pb/src/index.js", "../../../node_modules/multiformats/src/bases/base32.ts", "../../../node_modules/multiformats/src/bytes.ts", "../../../node_modules/multiformats/src/vendor/base-x.js", "../../../node_modules/multiformats/src/bases/base.ts", "../../../node_modules/multiformats/src/bases/base36.ts", "../../../node_modules/multiformats/src/bases/base58.ts", "../../../node_modules/multiformats/src/vendor/varint.js", "../../../node_modules/multiformats/src/varint.ts", "../../../node_modules/multiformats/src/hashes/digest.ts", "../../../node_modules/multiformats/src/cid.ts", "../../../node_modules/@ipld/dag-pb/src/pb-decode.js", "../../../node_modules/@ipld/dag-pb/src/pb-encode.js", "../../../node_modules/@ipld/dag-pb/src/util.js", "../../ipfs-unixfs/src/errors.ts", "../../../node_modules/uint8-varint/src/index.ts", "../../../node_modules/protons-runtime/src/utils/float.ts", "../../../node_modules/protons-runtime/src/utils/longbits.ts", "../../../node_modules/protons-runtime/src/utils/utf8.ts", "../../../node_modules/protons-runtime/src/utils/reader.ts", "../../../node_modules/protons-runtime/src/decode.ts", "../../../node_modules/multiformats/src/bases/base10.ts", "../../../node_modules/multiformats/src/bases/base16.ts", "../../../node_modules/multiformats/src/bases/base2.ts", "../../../node_modules/multiformats/src/bases/base256emoji.ts", "../../../node_modules/multiformats/src/bases/base64.ts", "../../../node_modules/multiformats/src/bases/base8.ts", "../../../node_modules/multiformats/src/bases/identity.ts", "../../../node_modules/multiformats/src/codecs/json.ts", "../../../node_modules/multiformats/src/codecs/raw.ts", "../../../node_modules/multiformats/src/hashes/identity.ts", "../../../node_modules/multiformats/src/hashes/sha2-browser.ts", "../../../node_modules/multiformats/src/hashes/hasher.ts", "../../../node_modules/multiformats/src/basics.ts", "../../../node_modules/uint8arrays/src/util/bases.ts", "../../../node_modules/uint8arrays/src/from-string.ts", "../../../node_modules/protons-runtime/src/utils/pool.ts", "../../../node_modules/protons-runtime/src/utils/writer.ts", "../../../node_modules/protons-runtime/src/encode.ts", "../../../node_modules/protons-runtime/src/codec.ts", "../../../node_modules/protons-runtime/src/codecs/enum.ts", "../../../node_modules/protons-runtime/src/codecs/message.ts", "../../ipfs-unixfs/src/unixfs.ts", "../../ipfs-unixfs/src/index.ts", "../../../node_modules/progress-events/src/index.ts", "../src/utils/persist.ts", "../src/dag-builder/buffer-importer.ts", "../src/errors.ts", "../src/dag-builder/dir.ts", "../src/dag-builder/file.ts", "../src/dag-builder/index.ts", "../src/dag-builder/validate-chunks.ts", "../src/layout/balanced.ts", "../src/dir.ts", "../src/dir-flat.ts", "../../../node_modules/@multiformats/murmur3/src/index.js", "../../../node_modules/hamt-sharding/src/bucket.ts", "../../../node_modules/hamt-sharding/src/consumable-buffer.ts", "../../../node_modules/hamt-sharding/src/consumable-hash.ts", "../../../node_modules/hamt-sharding/src/index.ts", "../src/dir-sharded.ts", "../src/flat-to-shard.ts", "../src/utils/to-path-components.ts", "../src/tree-builder.ts"],
|
|
4
|
-
"sourcesContent": ["/* 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// JS treats subjects of bitwise operators as SIGNED 32 bit numbers,\n// which means the maximum amount of bits we can store inside each byte\n// is 7..\nconst BITS_PER_BYTE = 7\n\nmodule.exports = class SparseArray {\n constructor () {\n this._bitArrays = []\n this._data = []\n this._length = 0\n this._changedLength = false\n this._changedData = false\n }\n\n set (index, value) {\n let pos = this._internalPositionFor(index, false)\n if (value === undefined) {\n // unsetting\n if (pos !== -1) {\n // remove item from bit array and array itself\n this._unsetInternalPos(pos)\n this._unsetBit(index)\n this._changedLength = true\n this._changedData = true\n }\n } else {\n let needsSort = false\n if (pos === -1) {\n pos = this._data.length\n this._setBit(index)\n this._changedData = true\n } else {\n needsSort = true\n }\n this._setInternalPos(pos, index, value, needsSort)\n this._changedLength = true\n }\n }\n\n unset (index) {\n this.set(index, undefined)\n }\n\n get (index) {\n this._sortData()\n const pos = this._internalPositionFor(index, true)\n if (pos === -1) {\n return undefined\n }\n return this._data[pos][1]\n }\n\n push (value) {\n this.set(this.length, value)\n return this.length\n }\n\n get length () {\n this._sortData()\n if (this._changedLength) {\n const last = this._data[this._data.length - 1]\n this._length = last ? last[0] + 1 : 0\n this._changedLength = false\n }\n return this._length\n }\n\n forEach (iterator) {\n let i = 0\n while(i < this.length) {\n iterator(this.get(i), i, this)\n i++\n }\n }\n\n map (iterator) {\n let i = 0\n let mapped = new Array(this.length)\n while(i < this.length) {\n mapped[i] = iterator(this.get(i), i, this)\n i++\n }\n return mapped\n }\n\n reduce (reducer, initialValue) {\n let i = 0\n let acc = initialValue\n while(i < this.length) {\n const value = this.get(i)\n acc = reducer(acc, value, i)\n i++\n }\n return acc\n }\n\n find (finder) {\n let i = 0, found, last\n while ((i < this.length) && !found) {\n last = this.get(i)\n found = finder(last)\n i++\n }\n return found ? last : undefined\n }\n\n _internalPositionFor (index, noCreate) {\n const bytePos = this._bytePosFor(index, noCreate)\n if (bytePos >= this._bitArrays.length) {\n return -1\n }\n const byte = this._bitArrays[bytePos]\n const bitPos = index - bytePos * BITS_PER_BYTE\n const exists = (byte & (1 << bitPos)) > 0\n if (!exists) {\n return -1\n }\n const previousPopCount = this._bitArrays.slice(0, bytePos).reduce(popCountReduce, 0)\n\n const mask = ~(0xffffffff << (bitPos + 1))\n const bytePopCount = popCount(byte & mask)\n const arrayPos = previousPopCount + bytePopCount - 1\n return arrayPos\n }\n\n _bytePosFor (index, noCreate) {\n const bytePos = Math.floor(index / BITS_PER_BYTE)\n const targetLength = bytePos + 1\n while (!noCreate && this._bitArrays.length < targetLength) {\n this._bitArrays.push(0)\n }\n return bytePos\n }\n\n _setBit (index) {\n const bytePos = this._bytePosFor(index, false)\n this._bitArrays[bytePos] |= (1 << (index - (bytePos * BITS_PER_BYTE)))\n }\n\n _unsetBit(index) {\n const bytePos = this._bytePosFor(index, false)\n this._bitArrays[bytePos] &= ~(1 << (index - (bytePos * BITS_PER_BYTE)))\n }\n\n _setInternalPos(pos, index, value, needsSort) {\n const data =this._data\n const elem = [index, value]\n if (needsSort) {\n this._sortData()\n data[pos] = elem\n } else {\n // new element. just shove it into the array\n // but be nice about where we shove it\n // in order to make sorting it later easier\n if (data.length) {\n if (data[data.length - 1][0] >= index) {\n data.push(elem)\n } else if (data[0][0] <= index) {\n data.unshift(elem)\n } else {\n const randomIndex = Math.round(data.length / 2)\n this._data = data.slice(0, randomIndex).concat(elem).concat(data.slice(randomIndex))\n }\n } else {\n this._data.push(elem)\n }\n this._changedData = true\n this._changedLength = true\n }\n }\n\n _unsetInternalPos (pos) {\n this._data.splice(pos, 1)\n }\n\n _sortData () {\n if (this._changedData) {\n this._data.sort(sortInternal)\n }\n\n this._changedData = false\n }\n\n bitField () {\n const bytes = []\n let pendingBitsForResultingByte = 8\n let pendingBitsForNewByte = 0\n let resultingByte = 0\n let newByte\n const pending = this._bitArrays.slice()\n while (pending.length || pendingBitsForNewByte) {\n if (pendingBitsForNewByte === 0) {\n newByte = pending.shift()\n pendingBitsForNewByte = 7\n }\n\n const usingBits = Math.min(pendingBitsForNewByte, pendingBitsForResultingByte)\n const mask = ~(0b11111111 << usingBits)\n const masked = newByte & mask\n resultingByte |= masked << (8 - pendingBitsForResultingByte)\n newByte = newByte >>> usingBits\n pendingBitsForNewByte -= usingBits\n pendingBitsForResultingByte -= usingBits\n\n if (!pendingBitsForResultingByte || (!pendingBitsForNewByte && !pending.length)) {\n bytes.push(resultingByte)\n resultingByte = 0\n pendingBitsForResultingByte = 8\n }\n }\n\n // remove trailing zeroes\n for(var i = bytes.length - 1; i > 0; i--) {\n const value = bytes[i]\n if (value === 0) {\n bytes.pop()\n } else {\n break\n }\n }\n\n return bytes\n }\n\n compactArray () {\n this._sortData()\n return this._data.map(valueOnly)\n }\n}\n\nfunction popCountReduce (count, byte) {\n return count + popCount(byte)\n}\n\nfunction popCount(_v) {\n let v = _v\n v = v - ((v >> 1) & 0x55555555) // reuse input as temporary\n v = (v & 0x33333333) + ((v >> 2) & 0x33333333) // temp\n return ((v + (v >> 4) & 0xF0F0F0F) * 0x1010101) >> 24\n}\n\nfunction sortInternal (a, b) {\n return a[0] - b[0]\n}\n\nfunction valueOnly (elem) {\n return elem[1]\n}", "/**\n * @packageDocumentation\n *\n * @example\n *\n * Let's create a little directory to import:\n *\n * ```console\n * > cd /tmp\n * > mkdir foo\n * > echo 'hello' > foo/bar\n * > echo 'world' > foo/quux\n * ```\n *\n * And write the importing logic:\n *\n * ```TypeScript\n * import { importer } from 'ipfs-unixfs-importer'\n * import { MemoryBlockstore } from 'blockstore-core/memory'\n * import * as fs from 'node:fs'\n *\n * // Where the blocks will be stored\n * const blockstore = new MemoryBlockstore()\n *\n * // Import path /tmp/foo/\n * const source = [{\n * path: '/tmp/foo/bar',\n * content: fs.createReadStream('/tmp/foo/bar')\n * }, {\n * path: '/tmp/foo/quxx',\n * content: fs.createReadStream('/tmp/foo/quux')\n * }]\n *\n * for await (const entry of importer(source, blockstore)) {\n * console.info(entry)\n * }\n * ```\n *\n * When run, metadata about DAGNodes in the created tree is printed until the root:\n *\n * ```\n * {\n * cid: CID, // see https://github.com/multiformats/js-cid\n * path: 'tmp/foo/bar',\n * unixfs: UnixFS // see https://github.com/ipfs/js-ipfs-unixfs\n * }\n * {\n * cid: CID, // see https://github.com/multiformats/js-cid\n * path: 'tmp/foo/quxx',\n * unixfs: UnixFS // see https://github.com/ipfs/js-ipfs-unixfs\n * }\n * {\n * cid: CID, // see https://github.com/multiformats/js-cid\n * path: 'tmp/foo',\n * unixfs: UnixFS // see https://github.com/ipfs/js-ipfs-unixfs\n * }\n * {\n * cid: CID, // see https://github.com/multiformats/js-cid\n * path: 'tmp',\n * unixfs: UnixFS // see https://github.com/ipfs/js-ipfs-unixfs\n * }\n * ```\n */\n\nimport first from 'it-first'\nimport parallelBatch from 'it-parallel-batch'\nimport { fixedSize } from './chunker/fixed-size.js'\nimport { defaultBufferImporter } from './dag-builder/buffer-importer.js'\nimport { defaultDagBuilder } from './dag-builder/index.js'\nimport { defaultChunkValidator } from './dag-builder/validate-chunks.js'\nimport { InvalidParametersError } from './errors.js'\nimport { balanced } from './layout/index.js'\nimport { defaultTreeBuilder } from './tree-builder.js'\nimport type { Chunker } from './chunker/index.js'\nimport type { BufferImportProgressEvents } from './dag-builder/buffer-importer.js'\nimport type { DirBuilder } from './dag-builder/dir.js'\nimport type { FileBuilder, ReducerProgressEvents } from './dag-builder/file.js'\nimport type { DAGBuilder, DagBuilderProgressEvents } from './dag-builder/index.js'\nimport type { ChunkValidator } from './dag-builder/validate-chunks.js'\nimport type { FileLayout } from './layout/index.js'\nimport type { Blockstore } from 'interface-blockstore'\nimport type { AwaitIterable } from 'interface-store'\nimport type { UnixFS, Mtime } from 'ipfs-unixfs'\nimport type { CID, Version as CIDVersion } from 'multiformats/cid'\nimport type { ProgressOptions } from 'progress-events'\n\nexport * from './errors.js'\n\nexport type ByteStream = AwaitIterable<Uint8Array>\nexport type ImportContent = ByteStream | Uint8Array\n\nexport type WritableStorage = Pick<Blockstore, 'put'>\n\nexport interface FileCandidate<T extends ImportContent = ImportContent> {\n path?: string\n content: T\n mtime?: Mtime\n mode?: number\n}\n\nexport interface DirectoryCandidate {\n path: string\n mtime?: Mtime\n mode?: number\n}\n\nexport type ImportCandidate = FileCandidate | DirectoryCandidate\n\nexport interface File {\n content: AsyncIterable<Uint8Array>\n path?: string\n mtime?: Mtime\n mode?: number\n originalPath?: string\n}\n\nexport interface Directory {\n path?: string\n mtime?: Mtime\n mode?: number\n originalPath?: string\n}\n\nexport interface ImportResult {\n cid: CID\n size: bigint\n path?: string\n unixfs?: UnixFS\n}\n\nexport interface MultipleBlockImportResult extends ImportResult {\n originalPath?: string\n}\n\nexport interface SingleBlockImportResult extends ImportResult {\n single: true\n originalPath?: string\n block: Uint8Array\n}\n\nexport type InProgressImportResult = SingleBlockImportResult | MultipleBlockImportResult\n\nexport interface BufferImporterResult extends ImportResult {\n block: Uint8Array\n}\n\nexport interface HamtHashFn { (value: Uint8Array): Promise<Uint8Array> }\nexport interface TreeBuilder { (source: AsyncIterable<InProgressImportResult>, blockstore: WritableStorage): AsyncIterable<ImportResult> }\nexport interface BufferImporter { (file: File, blockstore: WritableStorage): AsyncIterable<() => Promise<BufferImporterResult>> }\n\nexport type ImporterProgressEvents =\n BufferImportProgressEvents |\n DagBuilderProgressEvents |\n ReducerProgressEvents\n\n/**\n * Options to control the importer's behaviour\n */\nexport interface ImporterOptions extends ProgressOptions<ImporterProgressEvents> {\n /**\n * When a file would span multiple DAGNodes, if this is true the leaf nodes\n * will not be wrapped in `UnixFS` protobufs and will instead contain the\n * raw file bytes. Default: true\n */\n rawLeaves?: boolean\n\n /**\n * If the file being imported is small enough to fit into one DAGNodes, store\n * the file data in the root node along with the UnixFS metadata instead of\n * in a leaf node which would then require additional I/O to load. Default: true\n */\n reduceSingleLeafToSelf?: boolean\n\n /**\n * What type of UnixFS node leaves should be - can be `'file'` or `'raw'`\n * (ignored when `rawLeaves` is `true`).\n *\n * This option exists to simulate kubo's trickle dag which uses a combination\n * of `'raw'` UnixFS leaves and `reduceSingleLeafToSelf: false`.\n *\n * For modern code the `rawLeaves: true` option should be used instead so leaves\n * are plain Uint8Arrays without a UnixFS/Protobuf wrapper.\n */\n leafType?: 'file' | 'raw'\n\n /**\n * the CID version to use when storing the data. Default: 1\n */\n cidVersion?: CIDVersion\n\n /**\n * If the serialized node is larger than this it might be converted to a HAMT\n * sharded directory. Default: 256KiB\n */\n shardSplitThresholdBytes?: number\n\n /**\n * The number of bits of a hash digest used at each level of sharding to\n * the child index. 2**shardFanoutBits will dictate the maximum number of\n * children for any shard in the HAMT. Default: 8\n */\n shardFanoutBits?: number\n\n /**\n * How many files to import concurrently. For large numbers of small files this\n * should be high (e.g. 50). Default: 10\n */\n fileImportConcurrency?: number\n\n /**\n * How many blocks to hash and write to the block store concurrently. For small\n * numbers of large files this should be high (e.g. 50). Default: 50\n */\n blockWriteConcurrency?: number\n\n /**\n * If true, all imported files and folders will be contained in a directory that\n * will correspond to the CID of the final entry yielded. Default: false\n */\n wrapWithDirectory?: boolean\n\n /**\n * The chunking strategy. See [./src/chunker/index.ts](./src/chunker/index.ts)\n * for available chunkers. Default: fixedSize\n */\n chunker?: Chunker\n\n /**\n * How the DAG that represents files are created. See\n * [./src/layout/index.ts](./src/layout/index.ts) for available layouts. Default: balanced\n */\n layout?: FileLayout\n\n /**\n * This option can be used to override the importer internals.\n *\n * This function should read `{ path, content }` entries from `source` and turn them\n * into DAGs\n * It should yield a `function` that returns a `Promise` that resolves to\n * `{ cid, path, unixfs, node }` where `cid` is a `CID`, `path` is a string, `unixfs`\n * is a UnixFS entry and `node` is a `DAGNode`.\n * Values will be pulled from this generator in parallel - the amount of parallelisation\n * is controlled by the `fileImportConcurrency` option (default: 50)\n */\n dagBuilder?: DAGBuilder\n\n /**\n * This option can be used to override the importer internals.\n *\n * This function should read `{ cid, path, unixfs, node }` entries from `source` and\n * place them in a directory structure\n * It should yield an object with the properties `{ cid, path, unixfs, size }` where\n * `cid` is a `CID`, `path` is a string, `unixfs` is a UnixFS entry and `size` is a `Number`.\n */\n treeBuilder?: TreeBuilder\n\n /**\n * This option can be used to override the importer internals.\n *\n * This function should read `Buffer`s from `source` and persist them using `blockstore.put`\n * or similar\n * `entry` is the `{ path, content }` entry, where `entry.content` is an async\n * generator that yields Buffers\n * It should yield functions that return a Promise that resolves to an object with\n * the properties `{ cid, unixfs, size }` where `cid` is a [CID], `unixfs` is a [UnixFS] entry and `size` is a `Number` that represents the serialized size of the [IPLD] node that holds the buffer data.\n * Values will be pulled from this generator in parallel - the amount of\n * parallelisation is controlled by the `blockWriteConcurrency` option (default: 10)\n */\n bufferImporter?: BufferImporter\n\n /**\n * This option can be used to override the importer internals.\n *\n * This function takes input from the `content` field of imported entries.\n * It should transform them into `Buffer`s, throwing an error if it cannot.\n * It should yield `Buffer` objects constructed from the `source` or throw an\n * `Error`\n */\n chunkValidator?: ChunkValidator\n\n /**\n * This option can be used to override how a directory IPLD node is built.\n *\n * This function takes a `Directory` object and returns a `Promise` that resolves to an `InProgressImportResult`.\n */\n dirBuilder?: DirBuilder\n\n /**\n * This option can be used to override how a file IPLD node is built.\n *\n * This function takes a `File` object and returns a `Promise` that resolves to an `InProgressImportResult`.\n */\n fileBuilder?: FileBuilder\n}\n\nexport type ImportCandidateStream = AsyncIterable<FileCandidate | DirectoryCandidate> | Iterable<FileCandidate | DirectoryCandidate>\n\n/**\n * The importer creates UnixFS DAGs and stores the blocks that make\n * them up in the passed blockstore.\n *\n * @example\n *\n * ```typescript\n * import { importer } from 'ipfs-unixfs-importer'\n * import { MemoryBlockstore } from 'blockstore-core'\n *\n * // store blocks in memory, other blockstores are available\n * const blockstore = new MemoryBlockstore()\n *\n * const input = [{\n * path: './foo.txt',\n * content: Uint8Array.from([0, 1, 2, 3, 4])\n * }, {\n * path: './bar.txt',\n * content: Uint8Array.from([0, 1, 2, 3, 4])\n * }]\n *\n * for await (const entry of importer(input, blockstore)) {\n * console.info(entry)\n * // { cid: CID(), ... }\n * }\n * ```\n */\nexport async function * importer (source: ImportCandidateStream, blockstore: WritableStorage, options: ImporterOptions = {}): AsyncGenerator<ImportResult, void, unknown> {\n let candidates: AsyncIterable<FileCandidate | DirectoryCandidate> | Iterable<FileCandidate | DirectoryCandidate>\n\n if (Symbol.asyncIterator in source || Symbol.iterator in source) {\n candidates = source\n } else {\n candidates = [source]\n }\n\n const wrapWithDirectory = options.wrapWithDirectory ?? false\n const shardSplitThresholdBytes = options.shardSplitThresholdBytes ?? 262144\n const shardFanoutBits = options.shardFanoutBits ?? 8\n const cidVersion = options.cidVersion ?? 1\n const rawLeaves = options.rawLeaves ?? true\n const leafType = options.leafType ?? 'file'\n const fileImportConcurrency = options.fileImportConcurrency ?? 50\n const blockWriteConcurrency = options.blockWriteConcurrency ?? 10\n const reduceSingleLeafToSelf = options.reduceSingleLeafToSelf ?? true\n\n const chunker = options.chunker ?? fixedSize()\n const chunkValidator = options.chunkValidator ?? defaultChunkValidator()\n const buildDag: DAGBuilder = options.dagBuilder ?? defaultDagBuilder({\n chunker,\n chunkValidator,\n wrapWithDirectory,\n layout: options.layout ?? balanced(),\n bufferImporter: options.bufferImporter ?? defaultBufferImporter({\n cidVersion,\n rawLeaves,\n leafType,\n onProgress: options.onProgress\n }),\n blockWriteConcurrency,\n reduceSingleLeafToSelf,\n cidVersion,\n onProgress: options.onProgress,\n dirBuilder: options.dirBuilder,\n fileBuilder: options.fileBuilder\n })\n const buildTree: TreeBuilder = options.treeBuilder ?? defaultTreeBuilder({\n wrapWithDirectory,\n shardSplitThresholdBytes,\n shardFanoutBits,\n cidVersion,\n onProgress: options.onProgress\n })\n\n for await (const entry of buildTree(parallelBatch(buildDag(candidates, blockstore), fileImportConcurrency), blockstore)) {\n yield {\n cid: entry.cid,\n path: entry.path,\n unixfs: entry.unixfs,\n size: entry.size\n }\n }\n}\n\n/**\n * `importFile` is similar to `importer` except it accepts a single\n * `FileCandidate` and returns a promise of a single `ImportResult`\n * instead of a stream of results.\n *\n * @example\n *\n * ```typescript\n * import { importFile } from 'ipfs-unixfs-importer'\n * import { MemoryBlockstore } from 'blockstore-core'\n *\n * // store blocks in memory, other blockstores are available\n * const blockstore = new MemoryBlockstore()\n *\n * const input: FileCandidate = {\n * path: './foo.txt',\n * content: Uint8Array.from([0, 1, 2, 3, 4])\n * }\n *\n * const entry = await importFile(input, blockstore)\n * ```\n */\nexport async function importFile (content: FileCandidate, blockstore: WritableStorage, options: ImporterOptions = {}): Promise<ImportResult> {\n const result = await first(importer([content], blockstore, options))\n\n if (result == null) {\n throw new InvalidParametersError('Nothing imported')\n }\n\n return result\n}\n\n/**\n * `importDir` is similar to `importer` except it accepts a single\n * `DirectoryCandidate` and returns a promise of a single `ImportResult`\n * instead of a stream of results.\n *\n * @example\n *\n * ```typescript\n * import { importDirectory } from 'ipfs-unixfs-importer'\n * import { MemoryBlockstore } from 'blockstore-core'\n *\n * // store blocks in memory, other blockstores are available\n * const blockstore = new MemoryBlockstore()\n *\n * const input: DirectoryCandidate = {\n * path: './foo.txt'\n * }\n *\n * const entry = await importDirectory(input, blockstore)\n * ```\n */\nexport async function importDirectory (content: DirectoryCandidate, blockstore: WritableStorage, options: ImporterOptions = {}): Promise<ImportResult> {\n const result = await first(importer([content], blockstore, options))\n\n if (result == null) {\n throw new InvalidParametersError('Nothing imported')\n }\n\n return result\n}\n\n/**\n * `importBytes` accepts a single Uint8Array and returns a promise\n * of a single `ImportResult`.\n *\n * @example\n *\n * ```typescript\n * import { importBytes } from 'ipfs-unixfs-importer'\n * import { MemoryBlockstore } from 'blockstore-core'\n *\n * // store blocks in memory, other blockstores are available\n * const blockstore = new MemoryBlockstore()\n *\n * const input = Uint8Array.from([0, 1, 2, 3, 4])\n *\n * const entry = await importBytes(input, blockstore)\n * ```\n */\nexport async function importBytes (buf: ImportContent, blockstore: WritableStorage, options: ImporterOptions = {}): Promise<ImportResult> {\n return importFile({\n content: buf\n }, blockstore, options)\n}\n\n/**\n * `importByteStream` accepts a single stream of Uint8Arrays and\n * returns a promise of a single `ImportResult`.\n *\n * @example\n *\n * ```typescript\n * import { importByteStream } from 'ipfs-unixfs-importer'\n * import { MemoryBlockstore } from 'blockstore-core'\n *\n * // store blocks in memory, other blockstores are available\n * const blockstore = new MemoryBlockstore()\n *\n * const input = [\n * Uint8Array.from([0, 1, 2, 3, 4]),\n * Uint8Array.from([5, 6, 7, 8, 9])\n * ]\n *\n * const entry = await importByteStream(input, blockstore)\n * ```\n */\nexport async function importByteStream (bufs: ByteStream, blockstore: WritableStorage, options: ImporterOptions = {}): Promise<ImportResult> {\n return importFile({\n content: bufs\n }, blockstore, options)\n}\n", "/**\n * @packageDocumentation\n *\n * Return the first value in an (async)iterable\n *\n * @example\n *\n * ```javascript\n * import first from 'it-first'\n *\n * // This can also be an iterator, generator, etc\n * const values = [0, 1, 2, 3, 4]\n *\n * const res = first(values)\n *\n * console.info(res) // 0\n * ```\n *\n * Async sources must be awaited:\n *\n * ```javascript\n * import first from 'it-first'\n *\n * const values = async function * () {\n * yield * [0, 1, 2, 3, 4]\n * }\n *\n * const res = await first(values())\n *\n * console.info(res) // 0\n * ```\n */\n\nfunction isAsyncIterable <T> (thing: any): thing is AsyncIterable<T> {\n return thing[Symbol.asyncIterator] != null\n}\n\n/**\n * Returns the first result from an (async) iterable, unless empty, in which\n * case returns `undefined`\n */\nfunction first <T> (source: Iterable<T>): T | undefined\nfunction first <T> (source: Iterable<T> | AsyncIterable<T>): Promise<T | undefined>\nfunction first <T> (source: Iterable<T> | AsyncIterable<T>): Promise<T | undefined> | T | undefined {\n if (isAsyncIterable(source)) {\n return (async () => {\n for await (const entry of source) { // eslint-disable-line no-unreachable-loop\n return entry\n }\n\n return undefined\n })()\n }\n\n for (const entry of source) { // eslint-disable-line no-unreachable-loop\n return entry\n }\n\n return undefined\n}\n\nexport default first\n", "/**\n * @packageDocumentation\n *\n * The final batch may be smaller than the max.\n *\n * @example\n *\n * ```javascript\n * import batch from 'it-batch'\n * import all from 'it-all'\n *\n * // This can also be an iterator, generator, etc\n * const values = [0, 1, 2, 3, 4]\n * const batchSize = 2\n *\n * const result = all(batch(values, batchSize))\n *\n * console.info(result) // [0, 1], [2, 3], [4]\n * ```\n *\n * Async sources must be awaited:\n *\n * ```javascript\n * import batch from 'it-batch'\n * import all from 'it-all'\n *\n * const values = async function * () {\n * yield * [0, 1, 2, 3, 4]\n * }\n *\n * const batchSize = 2\n * const result = await all(batch(values(), batchSize))\n *\n * console.info(result) // [0, 1], [2, 3], [4]\n * ```\n */\n\nfunction isAsyncIterable <T> (thing: any): thing is AsyncIterable<T> {\n return thing[Symbol.asyncIterator] != null\n}\n\n/**\n * Takes an (async) iterable that emits things and returns an async iterable that\n * emits those things in fixed-sized batches\n */\nfunction batch <T> (source: Iterable<T>, size?: number): Generator<T[], void, undefined>\nfunction batch <T> (source: Iterable<T> | AsyncIterable<T>, size?: number): AsyncGenerator<T[], void, undefined>\nfunction batch <T> (source: Iterable<T> | AsyncIterable<T>, size: number = 1): Generator<T[], void, undefined> | AsyncGenerator<T[], void, undefined> {\n size = Number(size)\n\n if (isAsyncIterable(source)) {\n return (async function * () {\n let things: T[] = []\n\n if (size < 1) {\n size = 1\n }\n\n if (size !== Math.round(size)) {\n throw new Error('Batch size must be an integer')\n }\n\n for await (const thing of source) {\n things.push(thing)\n\n while (things.length >= size) {\n yield things.slice(0, size)\n\n things = things.slice(size)\n }\n }\n\n while (things.length > 0) {\n yield things.slice(0, size)\n\n things = things.slice(size)\n }\n }())\n }\n\n return (function * () {\n let things: T[] = []\n\n if (size < 1) {\n size = 1\n }\n\n if (size !== Math.round(size)) {\n throw new Error('Batch size must be an integer')\n }\n\n for (const thing of source) {\n things.push(thing)\n\n while (things.length >= size) {\n yield things.slice(0, size)\n\n things = things.slice(size)\n }\n }\n\n while (things.length > 0) {\n yield things.slice(0, size)\n\n things = things.slice(size)\n }\n }())\n}\n\nexport default batch\n", "/**\n * @packageDocumentation\n *\n * Takes an async iterator that emits promise-returning functions, invokes them in parallel and emits the results in the same order as the input.\n *\n * The final batch may be smaller than the batch size.\n *\n * @example\n *\n * ```javascript\n * import parallelBatch from 'it-parallel-batch'\n * import all from 'it-all'\n * import delay from 'delay'\n *\n * // This can also be an iterator, async iterator, generator, etc\n * const input = [\n * async () => {\n * await delay(500)\n *\n * return 1\n * },\n * async () => {\n * await delay(200)\n *\n * return 2\n * },\n * async () => {\n * await delay(100)\n *\n * return 3\n * }\n * ]\n *\n * const batchSize = 2\n *\n * const result = await all(parallelBatch(input, batchSize))\n *\n * console.info(result) // [1, 2, 3]\n * ```\n */\n\nimport batch from 'it-batch'\n\ninterface Success<T> {\n ok: true\n value: T\n}\n\ninterface Failure {\n ok: false\n err: Error\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 * parallelBatch <T> (source: AsyncIterable<() => Promise<T>> | Iterable<() => Promise<T>>, size: number = 1): AsyncGenerator<T, void, undefined> {\n for await (const tasks of batch(source, size)) {\n const things: Array<Promise<Success<T> | Failure>> = tasks.map(\n async (p: () => Promise<T>) => {\n return p().then(value => ({ ok: true, value }), err => ({ ok: false, err }))\n })\n\n for (let i = 0; i < things.length; i++) {\n const result = await things[i]\n\n if (result.ok) {\n yield result.value\n } else {\n throw result.err\n }\n }\n }\n}\n", "/**\n * Returns a `Uint8Array` of the requested size. Referenced memory will\n * be initialized to 0.\n */\nexport function alloc (size: number = 0): Uint8Array {\n return new Uint8Array(size)\n}\n\n/**\n * Where possible returns a Uint8Array of the requested size that references\n * uninitialized memory. Only use if you are certain you will immediately\n * overwrite every value in the returned `Uint8Array`.\n */\nexport function allocUnsafe (size: number = 0): Uint8Array {\n return new Uint8Array(size)\n}\n", "import { allocUnsafe } from '#alloc'\nimport { asUint8Array } from '#util/as-uint8array'\n\n/**\n * Returns a new Uint8Array created by concatenating the passed Uint8Arrays\n */\nexport function concat (arrays: Uint8Array[], 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", "/**\n * Returns true if the two passed Uint8Arrays have the same content\n */\nexport function equals (a: Uint8Array, b: Uint8Array): boolean {\n if (a === b) {\n return true\n }\n\n if (a.byteLength !== b.byteLength) {\n return false\n }\n\n for (let i = 0; i < a.byteLength; i++) {\n if (a[i] !== b[i]) {\n return false\n }\n }\n\n return true\n}\n", "/**\n * @packageDocumentation\n *\n * A class that lets you do operations over a list of Uint8Arrays without\n * copying them.\n *\n * ```js\n * import { Uint8ArrayList } from 'uint8arraylist'\n *\n * const list = new Uint8ArrayList()\n * list.append(Uint8Array.from([0, 1, 2]))\n * list.append(Uint8Array.from([3, 4, 5]))\n *\n * list.subarray()\n * // -> Uint8Array([0, 1, 2, 3, 4, 5])\n *\n * list.consume(3)\n * list.subarray()\n * // -> Uint8Array([3, 4, 5])\n *\n * // you can also iterate over the list\n * for (const buf of list) {\n * // ..do something with `buf`\n * }\n *\n * list.subarray(0, 1)\n * // -> Uint8Array([0])\n * ```\n *\n * ## Converting Uint8ArrayLists to Uint8Arrays\n *\n * There are two ways to turn a `Uint8ArrayList` into a `Uint8Array` - `.slice` and `.subarray` and one way to turn a `Uint8ArrayList` into a `Uint8ArrayList` with different contents - `.sublist`.\n *\n * ### slice\n *\n * Slice follows the same semantics as [Uint8Array.slice](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/slice) in that it creates a new `Uint8Array` and copies bytes into it using an optional offset & length.\n *\n * ```js\n * const list = new Uint8ArrayList()\n * list.append(Uint8Array.from([0, 1, 2]))\n * list.append(Uint8Array.from([3, 4, 5]))\n *\n * list.slice(0, 1)\n * // -> Uint8Array([0])\n * ```\n *\n * ### subarray\n *\n * Subarray attempts to follow the same semantics as [Uint8Array.subarray](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/subarray) with one important different - this is a no-copy operation, unless the requested bytes span two internal buffers in which case it is a copy operation.\n *\n * ```js\n * const list = new Uint8ArrayList()\n * list.append(Uint8Array.from([0, 1, 2]))\n * list.append(Uint8Array.from([3, 4, 5]))\n *\n * list.subarray(0, 1)\n * // -> Uint8Array([0]) - no-copy\n *\n * list.subarray(2, 5)\n * // -> Uint8Array([2, 3, 4]) - copy\n * ```\n *\n * ### sublist\n *\n * Sublist creates and returns a new `Uint8ArrayList` that shares the underlying buffers with the original so is always a no-copy operation.\n *\n * ```js\n * const list = new Uint8ArrayList()\n * list.append(Uint8Array.from([0, 1, 2]))\n * list.append(Uint8Array.from([3, 4, 5]))\n *\n * list.sublist(0, 1)\n * // -> Uint8ArrayList([0]) - no-copy\n *\n * list.sublist(2, 5)\n * // -> Uint8ArrayList([2], [3, 4]) - no-copy\n * ```\n *\n * ## Inspiration\n *\n * Borrows liberally from [bl](https://www.npmjs.com/package/bl) but only uses native JS types.\n */\nimport { allocUnsafe, alloc } from 'uint8arrays/alloc'\nimport { concat } from 'uint8arrays/concat'\nimport { equals } from 'uint8arrays/equals'\n\nconst symbol = Symbol.for('@achingbrain/uint8arraylist')\n\nexport type Appendable = Uint8ArrayList | Uint8Array\n\nfunction findBufAndOffset (bufs: Uint8Array[], index: number): { buf: Uint8Array, index: number } {\n if (index == null || index < 0) {\n throw new RangeError('index is out of bounds')\n }\n\n let offset = 0\n\n for (const buf of bufs) {\n const bufEnd = offset + buf.byteLength\n\n if (index < bufEnd) {\n return {\n buf,\n index: index - offset\n }\n }\n\n offset = bufEnd\n }\n\n throw new RangeError('index is out of bounds')\n}\n\n/**\n * Check if object is a CID instance\n *\n * @example\n *\n * ```js\n * import { isUint8ArrayList, Uint8ArrayList } from 'uint8arraylist'\n *\n * isUint8ArrayList(true) // false\n * isUint8ArrayList([]) // false\n * isUint8ArrayList(new Uint8ArrayList()) // true\n * ```\n */\nexport function isUint8ArrayList (value: any): value is Uint8ArrayList {\n return Boolean(value?.[symbol])\n}\n\nexport class Uint8ArrayList implements Iterable<Uint8Array> {\n private bufs: Uint8Array[]\n public length: number\n public readonly [symbol] = true\n\n constructor (...data: Appendable[]) {\n this.bufs = []\n this.length = 0\n\n if (data.length > 0) {\n this.appendAll(data)\n }\n }\n\n * [Symbol.iterator] (): Iterator<Uint8Array> {\n yield * this.bufs\n }\n\n get byteLength (): number {\n return this.length\n }\n\n /**\n * Add one or more `bufs` to the end of this Uint8ArrayList\n */\n append (...bufs: Appendable[]): void {\n this.appendAll(bufs)\n }\n\n /**\n * Add all `bufs` to the end of this Uint8ArrayList\n */\n appendAll (bufs: Appendable[]): void {\n let length = 0\n\n for (const buf of bufs) {\n if (buf instanceof Uint8Array) {\n length += buf.byteLength\n this.bufs.push(buf)\n } else if (isUint8ArrayList(buf)) {\n length += buf.byteLength\n this.bufs.push(...buf.bufs)\n } else {\n throw new Error('Could not append value, must be an Uint8Array or a Uint8ArrayList')\n }\n }\n\n this.length += length\n }\n\n /**\n * Add one or more `bufs` to the start of this Uint8ArrayList\n */\n prepend (...bufs: Appendable[]): void {\n this.prependAll(bufs)\n }\n\n /**\n * Add all `bufs` to the start of this Uint8ArrayList\n */\n prependAll (bufs: Appendable[]): void {\n let length = 0\n\n for (const buf of bufs.reverse()) {\n if (buf instanceof Uint8Array) {\n length += buf.byteLength\n this.bufs.unshift(buf)\n } else if (isUint8ArrayList(buf)) {\n length += buf.byteLength\n this.bufs.unshift(...buf.bufs)\n } else {\n throw new Error('Could not prepend value, must be an Uint8Array or a Uint8ArrayList')\n }\n }\n\n this.length += length\n }\n\n /**\n * Read the value at `index`\n */\n get (index: number): number {\n const res = findBufAndOffset(this.bufs, index)\n\n return res.buf[res.index]\n }\n\n /**\n * Set the value at `index` to `value`\n */\n set (index: number, value: number): void {\n const res = findBufAndOffset(this.bufs, index)\n\n res.buf[res.index] = value\n }\n\n /**\n * Copy bytes from `buf` to the index specified by `offset`\n */\n write (buf: Appendable, offset: number = 0): void {\n if (buf instanceof Uint8Array) {\n for (let i = 0; i < buf.length; i++) {\n this.set(offset + i, buf[i])\n }\n } else if (isUint8ArrayList(buf)) {\n for (let i = 0; i < buf.length; i++) {\n this.set(offset + i, buf.get(i))\n }\n } else {\n throw new Error('Could not write value, must be an Uint8Array or a Uint8ArrayList')\n }\n }\n\n /**\n * Remove bytes from the front of the pool\n */\n consume (bytes: number): void {\n // first, normalize the argument, in accordance with how Buffer does it\n bytes = Math.trunc(bytes)\n\n // do nothing if not a positive number\n if (Number.isNaN(bytes) || bytes <= 0) {\n return\n }\n\n // if consuming all bytes, skip iterating\n if (bytes === this.byteLength) {\n this.bufs = []\n this.length = 0\n return\n }\n\n while (this.bufs.length > 0) {\n if (bytes >= this.bufs[0].byteLength) {\n bytes -= this.bufs[0].byteLength\n this.length -= this.bufs[0].byteLength\n this.bufs.shift()\n } else {\n this.bufs[0] = this.bufs[0].subarray(bytes)\n this.length -= bytes\n break\n }\n }\n }\n\n /**\n * Extracts a section of an array and returns a new array.\n *\n * This is a copy operation as it is with Uint8Arrays and Arrays\n * - note this is different to the behaviour of Node Buffers.\n */\n slice (beginInclusive?: number, endExclusive?: number): Uint8Array {\n const { bufs, length } = this._subList(beginInclusive, endExclusive)\n\n return concat(bufs, length)\n }\n\n /**\n * Returns a alloc from the given start and end element index.\n *\n * In the best case where the data extracted comes from a single Uint8Array\n * internally this is a no-copy operation otherwise it is a copy operation.\n */\n subarray (beginInclusive?: number, endExclusive?: number): Uint8Array {\n const { bufs, length } = this._subList(beginInclusive, endExclusive)\n\n if (bufs.length === 1) {\n return bufs[0]\n }\n\n return concat(bufs, length)\n }\n\n /**\n * Returns a allocList from the given start and end element index.\n *\n * This is a no-copy operation.\n */\n sublist (beginInclusive?: number, endExclusive?: number): Uint8ArrayList {\n const { bufs, length } = this._subList(beginInclusive, endExclusive)\n\n const list = new Uint8ArrayList()\n list.length = length\n // don't loop, just set the bufs\n list.bufs = [...bufs]\n\n return list\n }\n\n private _subList (beginInclusive?: number, endExclusive?: number): { bufs: Uint8Array[], length: number } {\n beginInclusive = beginInclusive ?? 0\n endExclusive = endExclusive ?? this.length\n\n if (beginInclusive < 0) {\n beginInclusive = this.length + beginInclusive\n }\n\n if (endExclusive < 0) {\n endExclusive = this.length + endExclusive\n }\n\n if (beginInclusive < 0 || endExclusive > this.length) {\n throw new RangeError('index is out of bounds')\n }\n\n if (beginInclusive === endExclusive) {\n return { bufs: [], length: 0 }\n }\n\n if (beginInclusive === 0 && endExclusive === this.length) {\n return { bufs: this.bufs, length: this.length }\n }\n\n const bufs: Uint8Array[] = []\n let offset = 0\n\n for (let i = 0; i < this.bufs.length; i++) {\n const buf = this.bufs[i]\n const bufStart = offset\n const bufEnd = bufStart + buf.byteLength\n\n // for next loop\n offset = bufEnd\n\n if (beginInclusive >= bufEnd) {\n // start after this buf\n continue\n }\n\n const sliceStartInBuf = beginInclusive >= bufStart && beginInclusive < bufEnd\n const sliceEndsInBuf = endExclusive > bufStart && endExclusive <= bufEnd\n\n if (sliceStartInBuf && sliceEndsInBuf) {\n // slice is wholly contained within this buffer\n if (beginInclusive === bufStart && endExclusive === bufEnd) {\n // requested whole buffer\n bufs.push(buf)\n break\n }\n\n // requested part of buffer\n const start = beginInclusive - bufStart\n bufs.push(buf.subarray(start, start + (endExclusive - beginInclusive)))\n break\n }\n\n if (sliceStartInBuf) {\n // slice starts in this buffer\n if (beginInclusive === 0) {\n // requested whole buffer\n bufs.push(buf)\n continue\n }\n\n // requested part of buffer\n bufs.push(buf.subarray(beginInclusive - bufStart))\n continue\n }\n\n if (sliceEndsInBuf) {\n if (endExclusive === bufEnd) {\n // requested whole buffer\n bufs.push(buf)\n break\n }\n\n // requested part of buffer\n bufs.push(buf.subarray(0, endExclusive - bufStart))\n break\n }\n\n // slice started before this buffer and ends after it\n bufs.push(buf)\n }\n\n return { bufs, length: endExclusive - beginInclusive }\n }\n\n indexOf (search: Uint8ArrayList | Uint8Array, offset: number = 0): number {\n if (!isUint8ArrayList(search) && !(search instanceof Uint8Array)) {\n throw new TypeError('The \"value\" argument must be a Uint8ArrayList or Uint8Array')\n }\n\n const needle = search instanceof Uint8Array ? search : search.subarray()\n\n offset = Number(offset ?? 0)\n\n if (isNaN(offset)) {\n offset = 0\n }\n\n if (offset < 0) {\n offset = this.length + offset\n }\n\n if (offset < 0) {\n offset = 0\n }\n\n if (search.length === 0) {\n return offset > this.length ? this.length : offset\n }\n\n // https://en.wikipedia.org/wiki/Boyer%E2%80%93Moore_string-search_algorithm\n const M: number = needle.byteLength\n\n if (M === 0) {\n throw new TypeError('search must be at least 1 byte long')\n }\n\n // radix\n const radix: number = 256\n const rightmostPositions: Int32Array = new Int32Array(radix)\n\n // position of the rightmost occurrence of the byte c in the pattern\n for (let c: number = 0; c < radix; c++) {\n // -1 for bytes not in pattern\n rightmostPositions[c] = -1\n }\n\n for (let j = 0; j < M; j++) {\n // rightmost position for bytes in pattern\n rightmostPositions[needle[j]] = j\n }\n\n // Return offset of first match, -1 if no match\n const right = rightmostPositions\n const lastIndex = this.byteLength - needle.byteLength\n const lastPatIndex = needle.byteLength - 1\n let skip: number\n\n for (let i = offset; i <= lastIndex; i += skip) {\n skip = 0\n\n for (let j = lastPatIndex; j >= 0; j--) {\n const char: number = this.get(i + j)\n\n if (needle[j] !== char) {\n skip = Math.max(1, j - right[char])\n break\n }\n }\n\n if (skip === 0) {\n return i\n }\n }\n\n return -1\n }\n\n getInt8 (byteOffset: number): number {\n const buf = this.subarray(byteOffset, byteOffset + 1)\n const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n\n return view.getInt8(0)\n }\n\n setInt8 (byteOffset: number, value: number): void {\n const buf = allocUnsafe(1)\n const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n view.setInt8(0, value)\n\n this.write(buf, byteOffset)\n }\n\n getInt16 (byteOffset: number, littleEndian?: boolean): number {\n const buf = this.subarray(byteOffset, byteOffset + 2)\n const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n\n return view.getInt16(0, littleEndian)\n }\n\n setInt16 (byteOffset: number, value: number, littleEndian?: boolean): void {\n const buf = alloc(2)\n const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n view.setInt16(0, value, littleEndian)\n\n this.write(buf, byteOffset)\n }\n\n getInt32 (byteOffset: number, littleEndian?: boolean): number {\n const buf = this.subarray(byteOffset, byteOffset + 4)\n const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n\n return view.getInt32(0, littleEndian)\n }\n\n setInt32 (byteOffset: number, value: number, littleEndian?: boolean): void {\n const buf = alloc(4)\n const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n view.setInt32(0, value, littleEndian)\n\n this.write(buf, byteOffset)\n }\n\n getBigInt64 (byteOffset: number, littleEndian?: boolean): bigint {\n const buf = this.subarray(byteOffset, byteOffset + 8)\n const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n\n return view.getBigInt64(0, littleEndian)\n }\n\n setBigInt64 (byteOffset: number, value: bigint, littleEndian?: boolean): void {\n const buf = alloc(8)\n const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n view.setBigInt64(0, value, littleEndian)\n\n this.write(buf, byteOffset)\n }\n\n getUint8 (byteOffset: number): number {\n const buf = this.subarray(byteOffset, byteOffset + 1)\n const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n\n return view.getUint8(0)\n }\n\n setUint8 (byteOffset: number, value: number): void {\n const buf = allocUnsafe(1)\n const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n view.setUint8(0, value)\n\n this.write(buf, byteOffset)\n }\n\n getUint16 (byteOffset: number, littleEndian?: boolean): number {\n const buf = this.subarray(byteOffset, byteOffset + 2)\n const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n\n return view.getUint16(0, littleEndian)\n }\n\n setUint16 (byteOffset: number, value: number, littleEndian?: boolean): void {\n const buf = alloc(2)\n const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n view.setUint16(0, value, littleEndian)\n\n this.write(buf, byteOffset)\n }\n\n getUint32 (byteOffset: number, littleEndian?: boolean): number {\n const buf = this.subarray(byteOffset, byteOffset + 4)\n const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n\n return view.getUint32(0, littleEndian)\n }\n\n setUint32 (byteOffset: number, value: number, littleEndian?: boolean): void {\n const buf = alloc(4)\n const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n view.setUint32(0, value, littleEndian)\n\n this.write(buf, byteOffset)\n }\n\n getBigUint64 (byteOffset: number, littleEndian?: boolean): bigint {\n const buf = this.subarray(byteOffset, byteOffset + 8)\n const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n\n return view.getBigUint64(0, littleEndian)\n }\n\n setBigUint64 (byteOffset: number, value: bigint, littleEndian?: boolean): void {\n const buf = alloc(8)\n const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n view.setBigUint64(0, value, littleEndian)\n\n this.write(buf, byteOffset)\n }\n\n getFloat32 (byteOffset: number, littleEndian?: boolean): number {\n const buf = this.subarray(byteOffset, byteOffset + 4)\n const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n\n return view.getFloat32(0, littleEndian)\n }\n\n setFloat32 (byteOffset: number, value: number, littleEndian?: boolean): void {\n const buf = alloc(4)\n const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n view.setFloat32(0, value, littleEndian)\n\n this.write(buf, byteOffset)\n }\n\n getFloat64 (byteOffset: number, littleEndian?: boolean): number {\n const buf = this.subarray(byteOffset, byteOffset + 8)\n const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n\n return view.getFloat64(0, littleEndian)\n }\n\n setFloat64 (byteOffset: number, value: number, littleEndian?: boolean): void {\n const buf = alloc(8)\n const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n view.setFloat64(0, value, littleEndian)\n\n this.write(buf, byteOffset)\n }\n\n equals (other: any): other is Uint8ArrayList {\n if (other == null) {\n return false\n }\n\n if (!(other instanceof Uint8ArrayList)) {\n return false\n }\n\n if (other.bufs.length !== this.bufs.length) {\n return false\n }\n\n for (let i = 0; i < this.bufs.length; i++) {\n if (!equals(this.bufs[i], other.bufs[i])) {\n return false\n }\n }\n\n return true\n }\n\n /**\n * Create a Uint8ArrayList from a pre-existing list of Uint8Arrays. Use this\n * method if you know the total size of all the Uint8Arrays ahead of time.\n */\n static fromUint8Arrays (bufs: Uint8Array[], length?: number): Uint8ArrayList {\n const list = new Uint8ArrayList()\n list.bufs = bufs\n\n if (length == null) {\n length = bufs.reduce((acc, curr) => acc + curr.byteLength, 0)\n }\n\n list.length = length\n\n return list\n }\n}\n\n/*\nfunction indexOf (needle: Uint8Array, haystack: Uint8Array, offset = 0) {\n for (let i = offset; i < haystack.byteLength; i++) {\n for (let j = 0; j < needle.length; j++) {\n if (haystack[i + j] !== needle[j]) {\n break\n }\n\n if (j === needle.byteLength -1) {\n return i\n }\n }\n\n if (haystack.byteLength - i < needle.byteLength) {\n break\n }\n }\n\n return -1\n}\n*/\n", "import { Uint8ArrayList } from 'uint8arraylist'\nimport type { Chunker } from './index.js'\n\nexport interface FixedSizeOptions {\n chunkSize?: number\n}\n\nconst DEFAULT_CHUNK_SIZE = 262144\n\nexport const fixedSize = (options: FixedSizeOptions = {}): Chunker => {\n const chunkSize = options.chunkSize ?? DEFAULT_CHUNK_SIZE\n\n return async function * fixedSizeChunker (source) {\n let list = new Uint8ArrayList()\n let currentLength = 0\n let emitted = false\n\n for await (const buffer of source) {\n list.append(buffer)\n\n currentLength += buffer.length\n\n while (currentLength >= chunkSize) {\n yield list.slice(0, chunkSize)\n emitted = true\n\n // throw away consumed bytes\n if (chunkSize === list.length) {\n list = new Uint8ArrayList()\n currentLength = 0\n } else {\n const newBl = new Uint8ArrayList()\n newBl.append(list.sublist(chunkSize))\n list = newBl\n\n // update our offset\n currentLength -= chunkSize\n }\n }\n }\n\n if (!emitted || currentLength > 0) {\n // return any remaining bytes\n yield list.subarray(0, currentLength)\n }\n }\n}\n", "import { CID } from 'multiformats/cid'\nimport { decodeNode } from './pb-decode.js'\nimport { encodeNode } from './pb-encode.js'\nimport { prepare, validate, createNode, createLink, toByteView } from './util.js'\n\n/**\n * @template T\n * @typedef {import('multiformats/codecs/interface').ByteView<T>} ByteView\n */\n\n/**\n * @template T\n * @typedef {import('multiformats/codecs/interface').ArrayBufferView<T>} ArrayBufferView\n */\n\n/**\n * @typedef {import('./interface.js').PBLink} PBLink\n * @typedef {import('./interface.js').PBNode} PBNode\n */\n\nexport const name = 'dag-pb'\nexport const code = 0x70\n\n/**\n * @param {PBNode} node\n * @returns {ByteView<PBNode>}\n */\nexport function encode (node) {\n validate(node)\n\n const pbn = {}\n if (node.Links) {\n pbn.Links = node.Links.map((l) => {\n const link = {}\n if (l.Hash) {\n link.Hash = l.Hash.bytes // cid -> bytes\n }\n if (l.Name !== undefined) {\n link.Name = l.Name\n }\n if (l.Tsize !== undefined) {\n link.Tsize = l.Tsize\n }\n return link\n })\n }\n if (node.Data) {\n pbn.Data = node.Data\n }\n\n return encodeNode(pbn)\n}\n\n/**\n * @param {ByteView<PBNode> | ArrayBufferView<PBNode>} bytes\n * @returns {PBNode}\n */\nexport function decode (bytes) {\n const buf = toByteView(bytes)\n const pbn = decodeNode(buf)\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 {\n // ignore parse fail\n }\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", "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", "export const empty = new Uint8Array(0)\n\nexport function toHex (d: Uint8Array): string {\n return d.reduce((hex, byte) => hex + byte.toString(16).padStart(2, '0'), '')\n}\n\nexport function fromHex (hex: string): Uint8Array {\n const hexes = hex.match(/../g)\n return hexes != null ? new Uint8Array(hexes.map(b => parseInt(b, 16))) : empty\n}\n\nexport function equals (aa: Uint8Array, bb: Uint8Array): boolean {\n if (aa === bb) { return true }\n if (aa.byteLength !== bb.byteLength) {\n return false\n }\n\n for (let ii = 0; ii < aa.byteLength; ii++) {\n if (aa[ii] !== bb[ii]) {\n return false\n }\n }\n\n return true\n}\n\nexport function coerce (o: ArrayBufferView | ArrayBuffer | Uint8Array): Uint8Array {\n if (o instanceof Uint8Array && o.constructor.name === 'Uint8Array') { return o }\n if (o instanceof ArrayBuffer) { return new Uint8Array(o) }\n if (ArrayBuffer.isView(o)) {\n return new Uint8Array(o.buffer, o.byteOffset, o.byteLength)\n }\n throw new Error('Unknown type, must be binary type')\n}\n\nexport function isBinary (o: unknown): o is ArrayBuffer | ArrayBufferView {\n return o instanceof ArrayBuffer || ArrayBuffer.isView(o)\n}\n\nexport function fromString (str: string): Uint8Array {\n return new TextEncoder().encode(str)\n}\n\nexport function toString (b: Uint8Array): string {\n return new TextDecoder().decode(b)\n}\n", "/* eslint-disable */\n// base-x encoding / decoding\n// Copyright (c) 2018 base-x contributors\n// Copyright (c) 2014-2018 The Bitcoin Core developers (base58.cpp)\n// Distributed under the MIT software license, see the accompanying\n// file LICENSE or http://www.opensource.org/licenses/mit-license.php.\n/**\n * @param {string} ALPHABET\n * @param {any} name\n */\nfunction base (ALPHABET, name) {\n if (ALPHABET.length >= 255) { throw new TypeError('Alphabet too long') }\n var BASE_MAP = new Uint8Array(256);\n for (var j = 0; j < BASE_MAP.length; j++) {\n BASE_MAP[j] = 255;\n }\n for (var i = 0; i < ALPHABET.length; i++) {\n var x = ALPHABET.charAt(i);\n var xc = x.charCodeAt(0);\n if (BASE_MAP[xc] !== 255) { throw new TypeError(x + ' is ambiguous') }\n BASE_MAP[xc] = i;\n }\n var BASE = ALPHABET.length;\n var LEADER = ALPHABET.charAt(0);\n var FACTOR = Math.log(BASE) / Math.log(256); // log(BASE) / log(256), rounded up\n var iFACTOR = Math.log(256) / Math.log(BASE); // log(256) / log(BASE), rounded up\n /**\n * @param {any[] | Iterable<number>} source\n */\n function encode (source) {\n // @ts-ignore\n if (source instanceof Uint8Array) ; else if (ArrayBuffer.isView(source)) {\n source = new Uint8Array(source.buffer, source.byteOffset, source.byteLength);\n } else if (Array.isArray(source)) {\n source = Uint8Array.from(source);\n }\n if (!(source instanceof Uint8Array)) { throw new TypeError('Expected Uint8Array') }\n if (source.length === 0) { return '' }\n // Skip & count leading zeroes.\n var zeroes = 0;\n var length = 0;\n var pbegin = 0;\n var pend = source.length;\n while (pbegin !== pend && source[pbegin] === 0) {\n pbegin++;\n zeroes++;\n }\n // Allocate enough space in big-endian base58 representation.\n var size = ((pend - pbegin) * iFACTOR + 1) >>> 0;\n var b58 = new Uint8Array(size);\n // Process the bytes.\n while (pbegin !== pend) {\n var carry = source[pbegin];\n // Apply \"b58 = b58 * 256 + ch\".\n var i = 0;\n for (var it1 = size - 1; (carry !== 0 || i < length) && (it1 !== -1); it1--, i++) {\n carry += (256 * b58[it1]) >>> 0;\n b58[it1] = (carry % BASE) >>> 0;\n carry = (carry / BASE) >>> 0;\n }\n if (carry !== 0) { throw new Error('Non-zero carry') }\n length = i;\n pbegin++;\n }\n // Skip leading zeroes in base58 result.\n var it2 = size - length;\n while (it2 !== size && b58[it2] === 0) {\n it2++;\n }\n // Translate the result into a string.\n var str = LEADER.repeat(zeroes);\n for (; it2 < size; ++it2) { str += ALPHABET.charAt(b58[it2]); }\n return str\n }\n /**\n * @param {string | string[]} source\n */\n function decodeUnsafe (source) {\n if (typeof source !== 'string') { throw new TypeError('Expected String') }\n if (source.length === 0) { return new Uint8Array() }\n var psz = 0;\n // Skip leading spaces.\n if (source[psz] === ' ') { return }\n // Skip and count leading '1's.\n var zeroes = 0;\n var length = 0;\n while (source[psz] === LEADER) {\n zeroes++;\n psz++;\n }\n // Allocate enough space in big-endian base256 representation.\n var size = (((source.length - psz) * FACTOR) + 1) >>> 0; // log(58) / log(256), rounded up.\n var b256 = new Uint8Array(size);\n // Process the characters.\n while (source[psz]) {\n // Decode character\n var carry = BASE_MAP[source.charCodeAt(psz)];\n // Invalid character\n if (carry === 255) { return }\n var i = 0;\n for (var it3 = size - 1; (carry !== 0 || i < length) && (it3 !== -1); it3--, i++) {\n carry += (BASE * b256[it3]) >>> 0;\n b256[it3] = (carry % 256) >>> 0;\n carry = (carry / 256) >>> 0;\n }\n if (carry !== 0) { throw new Error('Non-zero carry') }\n length = i;\n psz++;\n }\n // Skip trailing spaces.\n if (source[psz] === ' ') { return }\n // Skip leading zeroes in b256.\n var it4 = size - length;\n while (it4 !== size && b256[it4] === 0) {\n it4++;\n }\n var vch = new Uint8Array(zeroes + (size - it4));\n var j = zeroes;\n while (it4 !== size) {\n vch[j++] = b256[it4++];\n }\n return vch\n }\n /**\n * @param {string | string[]} string\n */\n function decode (string) {\n var buffer = decodeUnsafe(string);\n if (buffer) { return buffer }\n throw new Error(`Non-${name} character`)\n }\n return {\n encode: encode,\n decodeUnsafe: decodeUnsafe,\n decode: decode\n }\n}\nvar src = base;\n\nvar _brrp__multiformats_scope_baseX = src;\n\nexport default _brrp__multiformats_scope_baseX;\n", "import { coerce } from '../bytes.js'\nimport basex from '../vendor/base-x.js'\nimport type { BaseCodec, BaseDecoder, BaseEncoder, CombobaseDecoder, Multibase, MultibaseCodec, MultibaseDecoder, MultibaseEncoder, UnibaseDecoder } from './interface.js'\n\ninterface EncodeFn { (bytes: Uint8Array): string }\ninterface DecodeFn { (text: string): Uint8Array }\n\n/**\n * Class represents both BaseEncoder and MultibaseEncoder meaning it\n * can be used to encode to multibase or base encode without multibase\n * prefix.\n */\nclass Encoder<Base extends string, Prefix extends string> implements MultibaseEncoder<Prefix>, BaseEncoder {\n readonly name: Base\n readonly prefix: Prefix\n readonly baseEncode: EncodeFn\n\n constructor (name: Base, prefix: Prefix, baseEncode: EncodeFn) {\n this.name = name\n this.prefix = prefix\n this.baseEncode = baseEncode\n }\n\n encode (bytes: Uint8Array): Multibase<Prefix> {\n if (bytes instanceof Uint8Array) {\n return `${this.prefix}${this.baseEncode(bytes)}`\n } else {\n throw Error('Unknown type, must be binary type')\n }\n }\n}\n\n/**\n * Class represents both BaseDecoder and MultibaseDecoder so it could be used\n * to decode multibases (with matching prefix) or just base decode strings\n * with corresponding base encoding.\n */\nclass Decoder<Base extends string, Prefix extends string> implements MultibaseDecoder<Prefix>, UnibaseDecoder<Prefix>, BaseDecoder {\n readonly name: Base\n readonly prefix: Prefix\n readonly baseDecode: DecodeFn\n private readonly prefixCodePoint: number\n\n constructor (name: Base, prefix: Prefix, baseDecode: DecodeFn) {\n this.name = name\n this.prefix = prefix\n const prefixCodePoint = prefix.codePointAt(0)\n /* c8 ignore next 3 */\n if (prefixCodePoint === undefined) {\n throw new Error('Invalid prefix character')\n }\n this.prefixCodePoint = prefixCodePoint\n this.baseDecode = baseDecode\n }\n\n decode (text: string): Uint8Array {\n if (typeof text === 'string') {\n if (text.codePointAt(0) !== this.prefixCodePoint) {\n throw Error(`Unable to decode multibase string ${JSON.stringify(text)}, ${this.name} decoder only supports inputs prefixed with ${this.prefix}`)\n }\n return this.baseDecode(text.slice(this.prefix.length))\n } else {\n throw Error('Can only multibase decode strings')\n }\n }\n\n or<OtherPrefix extends string> (decoder: UnibaseDecoder<OtherPrefix> | ComposedDecoder<OtherPrefix>): ComposedDecoder<Prefix | OtherPrefix> {\n return or(this, decoder)\n }\n}\n\ntype Decoders<Prefix extends string> = Record<Prefix, UnibaseDecoder<Prefix>>\n\nclass ComposedDecoder<Prefix extends string> implements MultibaseDecoder<Prefix>, CombobaseDecoder<Prefix> {\n readonly decoders: Decoders<Prefix>\n\n constructor (decoders: Decoders<Prefix>) {\n this.decoders = decoders\n }\n\n or <OtherPrefix extends string> (decoder: UnibaseDecoder<OtherPrefix> | ComposedDecoder<OtherPrefix>): ComposedDecoder<Prefix | OtherPrefix> {\n return or(this, decoder)\n }\n\n decode (input: string): Uint8Array {\n const prefix = input[0] as Prefix\n const decoder = this.decoders[prefix]\n if (decoder != null) {\n return decoder.decode(input)\n } else {\n throw RangeError(`Unable to decode multibase string ${JSON.stringify(input)}, only inputs prefixed with ${Object.keys(this.decoders)} are supported`)\n }\n }\n}\n\nexport function or <L extends string, R extends string> (left: UnibaseDecoder<L> | CombobaseDecoder<L>, right: UnibaseDecoder<R> | CombobaseDecoder<R>): ComposedDecoder<L | R> {\n return new ComposedDecoder({\n ...(left.decoders ?? { [(left as UnibaseDecoder<L>).prefix]: left }),\n ...(right.decoders ?? { [(right as UnibaseDecoder<R>).prefix]: right })\n } as Decoders<L | R>)\n}\n\nexport class Codec<Base extends string, Prefix extends string> implements MultibaseCodec<Prefix>, MultibaseEncoder<Prefix>, MultibaseDecoder<Prefix>, BaseCodec, BaseEncoder, BaseDecoder {\n readonly name: Base\n readonly prefix: Prefix\n readonly baseEncode: EncodeFn\n readonly baseDecode: DecodeFn\n readonly encoder: Encoder<Base, Prefix>\n readonly decoder: Decoder<Base, Prefix>\n\n constructor (name: Base, prefix: Prefix, baseEncode: EncodeFn, baseDecode: DecodeFn) {\n this.name = name\n this.prefix = prefix\n this.baseEncode = baseEncode\n this.baseDecode = baseDecode\n this.encoder = new Encoder(name, prefix, baseEncode)\n this.decoder = new Decoder(name, prefix, baseDecode)\n }\n\n encode (input: Uint8Array): string {\n return this.encoder.encode(input)\n }\n\n decode (input: string): Uint8Array {\n return this.decoder.decode(input)\n }\n}\n\nexport function from <Base extends string, Prefix extends string> ({ name, prefix, encode, decode }: { name: Base, prefix: Prefix, encode: EncodeFn, decode: DecodeFn }): Codec<Base, Prefix> {\n return new Codec(name, prefix, encode, decode)\n}\n\nexport function baseX <Base extends string, Prefix extends string> ({ name, prefix, alphabet }: { name: Base, prefix: Prefix, alphabet: string }): Codec<Base, Prefix> {\n const { encode, decode } = basex(alphabet, name)\n return from({\n prefix,\n name,\n encode,\n decode: (text: string): Uint8Array => coerce(decode(text))\n })\n}\n\nfunction decode (string: string, alphabetIdx: Record<string, number>, bitsPerChar: number, name: string): Uint8Array {\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 = alphabetIdx[string[i]]\n if (value === undefined) {\n throw new SyntaxError(`Non-${name} character`)\n }\n\n // Append the bits to the buffer:\n buffer = (buffer << bitsPerChar) | value\n bits += bitsPerChar\n\n // Write out some bits if the buffer has a byte's worth:\n if (bits >= 8) {\n bits -= 8\n out[written++] = 0xff & (buffer >> bits)\n }\n }\n\n // Verify that we have received just enough bits:\n if (bits >= bitsPerChar || (0xff & (buffer << (8 - bits))) !== 0) {\n throw new SyntaxError('Unexpected end of data')\n }\n\n return out\n}\n\nfunction encode (data: Uint8Array, alphabet: string, bitsPerChar: number): string {\n const pad = alphabet[alphabet.length - 1] === '='\n const mask = (1 << bitsPerChar) - 1\n let out = ''\n\n let bits = 0 // Number of bits currently in the buffer\n let buffer = 0 // Bits waiting to be written out, MSB first\n for (let i = 0; i < data.length; ++i) {\n // Slurp data into the buffer:\n buffer = (buffer << 8) | data[i]\n bits += 8\n\n // Write out as much as we can:\n while (bits > bitsPerChar) {\n bits -= bitsPerChar\n out += alphabet[mask & (buffer >> bits)]\n }\n }\n\n // Partial character:\n if (bits !== 0) {\n out += alphabet[mask & (buffer << (bitsPerChar - bits))]\n }\n\n // Add padding characters until we hit a byte boundary:\n if (pad) {\n while (((out.length * bitsPerChar) & 7) !== 0) {\n out += '='\n }\n }\n\n return out\n}\n\nfunction createAlphabetIdx (alphabet: string): Record<string, number> {\n // Build the character lookup table:\n const alphabetIdx: Record<string, number> = {}\n for (let i = 0; i < alphabet.length; ++i) {\n alphabetIdx[alphabet[i]] = i\n }\n return alphabetIdx\n}\n\n/**\n * RFC4648 Factory\n */\nexport function rfc4648 <Base extends string, Prefix extends string> ({ name, prefix, bitsPerChar, alphabet }: { name: Base, prefix: Prefix, bitsPerChar: number, alphabet: string }): Codec<Base, Prefix> {\n const alphabetIdx = createAlphabetIdx(alphabet)\n return from({\n prefix,\n name,\n encode (input: Uint8Array): string {\n return encode(input, alphabet, bitsPerChar)\n },\n decode (input: string): Uint8Array {\n return decode(input, alphabetIdx, bitsPerChar, name)\n }\n })\n}\n", "import { baseX } from './base.js'\n\nexport const base36 = baseX({\n prefix: 'k',\n name: 'base36',\n alphabet: '0123456789abcdefghijklmnopqrstuvwxyz'\n})\n\nexport const base36upper = baseX({\n prefix: 'K',\n name: 'base36upper',\n alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'\n})\n", "import { baseX } from './base.js'\n\nexport const base58btc = baseX({\n name: 'base58btc',\n prefix: 'z',\n alphabet: '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'\n})\n\nexport const base58flickr = baseX({\n name: 'base58flickr',\n prefix: 'Z',\n alphabet: '123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ'\n})\n", "/* eslint-disable */\nvar encode_1 = encode;\n\nvar MSB = 0x80\n , REST = 0x7F\n , MSBALL = ~REST\n , INT = Math.pow(2, 31);\n\n/**\n * @param {number} num\n * @param {number[]} out\n * @param {number} offset\n */\nfunction encode(num, out, offset) {\n out = out || [];\n offset = offset || 0;\n var oldOffset = offset;\n\n while(num >= INT) {\n out[offset++] = (num & 0xFF) | MSB;\n num /= 128;\n }\n while(num & MSBALL) {\n out[offset++] = (num & 0xFF) | MSB;\n num >>>= 7;\n }\n out[offset] = num | 0;\n \n // @ts-ignore\n encode.bytes = offset - oldOffset + 1;\n \n return out\n}\n\nvar decode = read;\n\nvar MSB$1 = 0x80\n , REST$1 = 0x7F;\n\n/**\n * @param {string | any[]} buf\n * @param {number} offset\n */\nfunction read(buf, offset) {\n var res = 0\n , offset = offset || 0\n , shift = 0\n , counter = offset\n , b\n , l = buf.length;\n\n do {\n if (counter >= l) {\n // @ts-ignore\n read.bytes = 0;\n throw new RangeError('Could not decode varint')\n }\n b = buf[counter++];\n res += shift < 28\n ? (b & REST$1) << shift\n : (b & REST$1) * Math.pow(2, shift);\n shift += 7;\n } while (b >= MSB$1)\n\n // @ts-ignore\n read.bytes = counter - offset;\n\n return res\n}\n\nvar N1 = Math.pow(2, 7);\nvar N2 = Math.pow(2, 14);\nvar N3 = Math.pow(2, 21);\nvar N4 = Math.pow(2, 28);\nvar N5 = Math.pow(2, 35);\nvar N6 = Math.pow(2, 42);\nvar N7 = Math.pow(2, 49);\nvar N8 = Math.pow(2, 56);\nvar N9 = Math.pow(2, 63);\n\nvar length = function (/** @type {number} */ value) {\n return (\n value < N1 ? 1\n : value < N2 ? 2\n : value < N3 ? 3\n : value < N4 ? 4\n : value < N5 ? 5\n : value < N6 ? 6\n : value < N7 ? 7\n : value < N8 ? 8\n : value < N9 ? 9\n : 10\n )\n};\n\nvar varint = {\n encode: encode_1\n , decode: decode\n , encodingLength: length\n};\n\nvar _brrp_varint = varint;\n\nexport default _brrp_varint;\n", "import varint from './vendor/varint.js'\n\nexport function decode (data: Uint8Array, offset = 0): [number, number] {\n const code = varint.decode(data, offset)\n return [code, varint.decode.bytes]\n}\n\nexport function encodeTo (int: number, target: Uint8Array, offset = 0): Uint8Array {\n varint.encode(int, target, offset)\n return target\n}\n\nexport function encodingLength (int: number): number {\n return varint.encodingLength(int)\n}\n", "import { coerce, equals as equalBytes } from '../bytes.js'\nimport * as varint from '../varint.js'\nimport type { MultihashDigest } from './interface.js'\n\n/**\n * Creates a multihash digest.\n */\nexport function create <Code extends number> (code: Code, digest: Uint8Array): Digest<Code, number> {\n const size = digest.byteLength\n const sizeOffset = varint.encodingLength(code)\n const digestOffset = sizeOffset + varint.encodingLength(size)\n\n const bytes = new Uint8Array(digestOffset + size)\n varint.encodeTo(code, bytes, 0)\n varint.encodeTo(size, bytes, sizeOffset)\n bytes.set(digest, digestOffset)\n\n return new Digest(code, size, digest, bytes)\n}\n\n/**\n * Turns bytes representation of multihash digest into an instance.\n */\nexport function decode (multihash: Uint8Array): MultihashDigest {\n const bytes = coerce(multihash)\n const [code, sizeOffset] = varint.decode(bytes)\n const [size, digestOffset] = varint.decode(bytes.subarray(sizeOffset))\n const digest = bytes.subarray(sizeOffset + digestOffset)\n\n if (digest.byteLength !== size) {\n throw new Error('Incorrect length')\n }\n\n return new Digest(code, size, digest, bytes)\n}\n\nexport function equals (a: MultihashDigest, b: unknown): b is MultihashDigest {\n if (a === b) {\n return true\n } else {\n const data = b as { code?: unknown, size?: unknown, bytes?: unknown }\n\n return (\n a.code === data.code &&\n a.size === data.size &&\n data.bytes instanceof Uint8Array &&\n equalBytes(a.bytes, data.bytes)\n )\n }\n}\n\n/**\n * Represents a multihash digest which carries information about the\n * hashing algorithm and an actual hash digest.\n */\nexport class Digest<Code extends number, Size extends number> implements MultihashDigest {\n readonly code: Code\n readonly size: Size\n readonly digest: Uint8Array\n readonly bytes: Uint8Array\n\n /**\n * Creates a multihash digest.\n */\n constructor (code: Code, size: Size, digest: Uint8Array, bytes: Uint8Array) {\n this.code = code\n this.size = size\n this.digest = digest\n this.bytes = bytes\n }\n}\n\n/**\n * Used to check that the passed multihash has the passed code\n */\nexport function hasCode <T extends number> (digest: MultihashDigest, code: T): digest is MultihashDigest<T> {\n return digest.code === code\n}\n", "import { base32 } from './bases/base32.js'\nimport { base36 } from './bases/base36.js'\nimport { base58btc } from './bases/base58.js'\nimport { coerce } from './bytes.js'\nimport * as Digest from './hashes/digest.js'\nimport * as varint from './varint.js'\nimport type * as API from './link/interface.js'\n\n// This way TS will also expose all the types from module\nexport * from './link/interface.js'\n\nexport function format <T extends API.Link<unknown, number, number, API.Version>, Prefix extends string> (link: T, base?: API.MultibaseEncoder<Prefix>): API.ToString<T, Prefix> {\n const { bytes, version } = link\n switch (version) {\n case 0:\n return toStringV0(\n bytes,\n baseCache(link),\n base as API.MultibaseEncoder<'z'> ?? base58btc.encoder\n )\n default:\n return toStringV1(\n bytes,\n baseCache(link),\n (base ?? base32.encoder) as API.MultibaseEncoder<Prefix>\n )\n }\n}\n\nexport function toJSON <Link extends API.UnknownLink> (link: Link): API.LinkJSON<Link> {\n return {\n '/': format(link)\n }\n}\n\nexport function fromJSON <Link extends API.UnknownLink> (json: API.LinkJSON<Link>): CID<unknown, number, number, API.Version> {\n return CID.parse(json['/'])\n}\n\nconst cache = new WeakMap<API.UnknownLink, Map<string, string>>()\n\nfunction baseCache (cid: API.UnknownLink): Map<string, string> {\n const baseCache = cache.get(cid)\n if (baseCache == null) {\n const baseCache = new Map()\n cache.set(cid, baseCache)\n return baseCache\n }\n return baseCache\n}\n\nexport class CID<Data = unknown, Format extends number = number, Alg extends number = number, Version extends API.Version = API.Version> implements API.Link<Data, Format, Alg, Version> {\n readonly code: Format\n readonly version: Version\n readonly multihash: API.MultihashDigest<Alg>\n readonly bytes: Uint8Array\n readonly '/': Uint8Array\n\n /**\n * @param version - Version of the CID\n * @param code - Code of the codec content is encoded in, see https://github.com/multiformats/multicodec/blob/master/table.csv\n * @param multihash - (Multi)hash of the of the content.\n */\n constructor (version: Version, code: Format, multihash: API.MultihashDigest<Alg>, bytes: Uint8Array) {\n this.code = code\n this.version = version\n this.multihash = multihash\n this.bytes = bytes\n\n // flag to serializers that this is a CID and\n // should be treated specially\n this['/'] = bytes\n }\n\n /**\n * Signalling `cid.asCID === cid` has been replaced with `cid['/'] === cid.bytes`\n * please either use `CID.asCID(cid)` or switch to new signalling mechanism\n *\n * @deprecated\n */\n get asCID (): this {\n return this\n }\n\n // ArrayBufferView\n get byteOffset (): number {\n return this.bytes.byteOffset\n }\n\n // ArrayBufferView\n get byteLength (): number {\n return this.bytes.byteLength\n }\n\n toV0 (): CID<Data, API.DAG_PB, API.SHA_256, 0> {\n switch (this.version) {\n case 0: {\n return this as CID<Data, API.DAG_PB, API.SHA_256, 0>\n }\n case 1: {\n const { code, multihash } = this\n\n if (code !== DAG_PB_CODE) {\n throw new Error('Cannot convert a non dag-pb CID to CIDv0')\n }\n\n // sha2-256\n if (multihash.code !== SHA_256_CODE) {\n throw new Error('Cannot convert non sha2-256 multihash CID to CIDv0')\n }\n\n return (\n CID.createV0(\n multihash as API.MultihashDigest<API.SHA_256>\n )\n )\n }\n default: {\n throw Error(\n `Can not convert CID version ${this.version} to version 0. This is a bug please report`\n )\n }\n }\n }\n\n toV1 (): CID<Data, Format, Alg, 1> {\n switch (this.version) {\n case 0: {\n const { code, digest } = this.multihash\n const multihash = Digest.create(code, digest)\n return (\n CID.createV1(this.code, multihash)\n )\n }\n case 1: {\n return this as CID<Data, Format, Alg, 1>\n }\n default: {\n throw Error(\n `Can not convert CID version ${this.version} to version 1. This is a bug please report`\n )\n }\n }\n }\n\n equals (other: unknown): other is CID<Data, Format, Alg, Version> {\n return CID.equals(this, other)\n }\n\n static equals <Data, Format extends number, Alg extends number, Version extends API.Version>(self: API.Link<Data, Format, Alg, Version>, other: unknown): other is CID {\n const unknown = other as { code?: unknown, version?: unknown, multihash?: unknown }\n return (\n unknown != null &&\n self.code === unknown.code &&\n self.version === unknown.version &&\n Digest.equals(self.multihash, unknown.multihash)\n )\n }\n\n toString (base?: API.MultibaseEncoder<string>): string {\n return format(this, base)\n }\n\n toJSON (): API.LinkJSON<this> {\n return { '/': format(this) }\n }\n\n link (): this {\n return this\n }\n\n readonly [Symbol.toStringTag] = 'CID';\n\n // Legacy\n\n [Symbol.for('nodejs.util.inspect.custom')] (): string {\n return `CID(${this.toString()})`\n }\n\n /**\n * Takes any input `value` and returns a `CID` instance if it was\n * a `CID` otherwise returns `null`. If `value` is instanceof `CID`\n * it will return value back. If `value` is not instance of this CID\n * class, but is compatible CID it will return new instance of this\n * `CID` class. Otherwise returns null.\n *\n * This allows two different incompatible versions of CID library to\n * co-exist and interop as long as binary interface is compatible.\n */\n static asCID <Data, Format extends number, Alg extends number, Version extends API.Version, U>(input: API.Link<Data, Format, Alg, Version> | U): CID<Data, Format, Alg, Version> | null {\n if (input == null) {\n return null\n }\n\n const value = input as any\n if (value instanceof CID) {\n // If value is instance of CID then we're all set.\n return value\n } else if ((value['/'] != null && value['/'] === value.bytes) || value.asCID === value) {\n // If value isn't instance of this CID class but `this.asCID === this` or\n // `value['/'] === value.bytes` is true it is CID instance coming from a\n // different implementation (diff version or duplicate). In that case we\n // rebase it to this `CID` implementation so caller is guaranteed to get\n // instance with expected API.\n const { version, code, multihash, bytes } = value\n return new CID(\n version,\n code,\n multihash as API.MultihashDigest<Alg>,\n bytes ?? encodeCID(version, code, multihash.bytes)\n )\n } else if (value[cidSymbol] === true) {\n // If value is a CID from older implementation that used to be tagged via\n // symbol we still rebase it to the this `CID` implementation by\n // delegating that to a constructor.\n const { version, multihash, code } = value\n const digest = Digest.decode(multihash) as API.MultihashDigest<Alg>\n return CID.create(version, code, digest)\n } else {\n // Otherwise value is not a CID (or an incompatible version of it) in\n // which case we return `null`.\n return null\n }\n }\n\n /**\n * @param version - Version of the CID\n * @param code - Code of the codec content is encoded in, see https://github.com/multiformats/multicodec/blob/master/table.csv\n * @param digest - (Multi)hash of the of the content.\n */\n static create <Data, Format extends number, Alg extends number, Version extends API.Version>(version: Version, code: Format, digest: API.MultihashDigest<Alg>): CID<Data, Format, Alg, Version> {\n if (typeof code !== 'number') {\n throw new Error('String codecs are no longer supported')\n }\n\n if (!(digest.bytes instanceof Uint8Array)) {\n throw new Error('Invalid digest')\n }\n\n switch (version) {\n case 0: {\n if (code !== DAG_PB_CODE) {\n throw new Error(\n `Version 0 CID must use dag-pb (code: ${DAG_PB_CODE}) block encoding`\n )\n } else {\n return new CID(version, code, digest, digest.bytes)\n }\n }\n case 1: {\n const bytes = encodeCID(version, code, digest.bytes)\n return new CID(version, code, digest, bytes)\n }\n default: {\n throw new Error('Invalid version')\n }\n }\n }\n\n /**\n * Simplified version of `create` for CIDv0.\n */\n static createV0 <T = unknown>(digest: API.MultihashDigest<typeof SHA_256_CODE>): CID<T, typeof DAG_PB_CODE, typeof SHA_256_CODE, 0> {\n return CID.create(0, DAG_PB_CODE, digest)\n }\n\n /**\n * Simplified version of `create` for CIDv1.\n *\n * @param code - Content encoding format code.\n * @param digest - Multihash of the content.\n */\n static createV1 <Data, Code extends number, Alg extends number>(code: Code, digest: API.MultihashDigest<Alg>): CID<Data, Code, Alg, 1> {\n return CID.create(1, code, digest)\n }\n\n /**\n * Decoded a CID from its binary representation. The byte array must contain\n * only the CID with no additional bytes.\n *\n * An error will be thrown if the bytes provided do not contain a valid\n * binary representation of a CID.\n */\n static decode <Data, Code extends number, Alg extends number, Version extends API.Version>(bytes: API.ByteView<API.Link<Data, Code, Alg, Version>>): CID<Data, Code, Alg, Version> {\n const [cid, remainder] = CID.decodeFirst(bytes)\n if (remainder.length !== 0) {\n throw new Error('Incorrect length')\n }\n return cid\n }\n\n /**\n * Decoded a CID from its binary representation at the beginning of a byte\n * array.\n *\n * Returns an array with the first element containing the CID and the second\n * element containing the remainder of the original byte array. The remainder\n * will be a zero-length byte array if the provided bytes only contained a\n * binary CID representation.\n */\n static decodeFirst <T, C extends number, A extends number, V extends API.Version>(bytes: API.ByteView<API.Link<T, C, A, V>>): [CID<T, C, A, V>, Uint8Array] {\n const specs = CID.inspectBytes(bytes)\n const prefixSize = specs.size - specs.multihashSize\n const multihashBytes = coerce(\n bytes.subarray(prefixSize, prefixSize + specs.multihashSize)\n )\n if (multihashBytes.byteLength !== specs.multihashSize) {\n throw new Error('Incorrect length')\n }\n const digestBytes = multihashBytes.subarray(\n specs.multihashSize - specs.digestSize\n )\n const digest = new Digest.Digest(\n specs.multihashCode,\n specs.digestSize,\n digestBytes,\n multihashBytes\n )\n const cid =\n specs.version === 0\n ? CID.createV0(digest as API.MultihashDigest<API.SHA_256>)\n : CID.createV1(specs.codec, digest)\n return [cid as CID<T, C, A, V>, bytes.subarray(specs.size)]\n }\n\n /**\n * Inspect the initial bytes of a CID to determine its properties.\n *\n * Involves decoding up to 4 varints. Typically this will require only 4 to 6\n * bytes but for larger multicodec code values and larger multihash digest\n * lengths these varints can be quite large. It is recommended that at least\n * 10 bytes be made available in the `initialBytes` argument for a complete\n * inspection.\n */\n static inspectBytes <T, C extends number, A extends number, V extends API.Version>(initialBytes: API.ByteView<API.Link<T, C, A, V>>): { version: V, codec: C, multihashCode: A, digestSize: number, multihashSize: number, size: number } {\n let offset = 0\n const next = (): number => {\n const [i, length] = varint.decode(initialBytes.subarray(offset))\n offset += length\n return i\n }\n\n let version = next() as V\n let codec = DAG_PB_CODE as C\n if (version as number === 18) {\n // CIDv0\n version = 0 as V\n offset = 0\n } else {\n codec = next() as C\n }\n\n if (version !== 0 && version !== 1) {\n throw new RangeError(`Invalid CID version ${version}`)\n }\n\n const prefixSize = offset\n const multihashCode = next() as A // multihash code\n const digestSize = next() // multihash length\n const size = offset + digestSize\n const multihashSize = size - prefixSize\n\n return { version, codec, multihashCode, digestSize, multihashSize, size }\n }\n\n /**\n * Takes cid in a string representation and creates an instance. If `base`\n * decoder is not provided will use a default from the configuration. It will\n * throw an error if encoding of the CID is not compatible with supplied (or\n * a default decoder).\n */\n static parse <Prefix extends string, Data, Code extends number, Alg extends number, Version extends API.Version>(source: API.ToString<API.Link<Data, Code, Alg, Version>, Prefix>, base?: API.MultibaseDecoder<Prefix>): CID<Data, Code, Alg, Version> {\n const [prefix, bytes] = parseCIDtoBytes(source, base)\n\n const cid = CID.decode(bytes)\n\n if (cid.version === 0 && source[0] !== 'Q') {\n throw Error('Version 0 CID string must not include multibase prefix')\n }\n\n // Cache string representation to avoid computing it on `this.toString()`\n baseCache(cid).set(prefix, source)\n\n return cid\n }\n}\n\nfunction parseCIDtoBytes <Prefix extends string, Data, Code extends number, Alg extends number, Version extends API.Version> (source: API.ToString<API.Link<Data, Code, Alg, Version>, Prefix>, base?: API.MultibaseDecoder<Prefix>): [Prefix, API.ByteView<API.Link<Data, Code, Alg, Version>>] {\n switch (source[0]) {\n // CIDv0 is parsed differently\n case 'Q': {\n const decoder = base ?? base58btc\n return [\n base58btc.prefix as Prefix,\n decoder.decode(`${base58btc.prefix}${source}`)\n ]\n }\n case base58btc.prefix: {\n const decoder = base ?? base58btc\n return [base58btc.prefix as Prefix, decoder.decode(source)]\n }\n case base32.prefix: {\n const decoder = base ?? base32\n return [base32.prefix as Prefix, decoder.decode(source)]\n }\n case base36.prefix: {\n const decoder = base ?? base36\n return [base36.prefix as Prefix, decoder.decode(source)]\n }\n default: {\n if (base == null) {\n throw Error(\n 'To parse non base32, base36 or base58btc encoded CID multibase decoder must be provided'\n )\n }\n return [source[0] as Prefix, base.decode(source)]\n }\n }\n}\n\nfunction toStringV0 (bytes: Uint8Array, cache: Map<string, string>, base: API.MultibaseEncoder<'z'>): string {\n const { prefix } = base\n if (prefix !== base58btc.prefix) {\n throw Error(`Cannot string encode V0 in ${base.name} encoding`)\n }\n\n const cid = cache.get(prefix)\n if (cid == null) {\n const cid = base.encode(bytes).slice(1)\n cache.set(prefix, cid)\n return cid\n } else {\n return cid\n }\n}\n\nfunction toStringV1 <Prefix extends string> (bytes: Uint8Array, cache: Map<string, string>, base: API.MultibaseEncoder<Prefix>): string {\n const { prefix } = base\n const cid = cache.get(prefix)\n if (cid == null) {\n const cid = base.encode(bytes)\n cache.set(prefix, cid)\n return cid\n } else {\n return cid\n }\n}\n\nconst DAG_PB_CODE = 0x70\nconst SHA_256_CODE = 0x12\n\nfunction encodeCID (version: API.Version, code: number, multihash: Uint8Array): Uint8Array {\n const codeOffset = varint.encodingLength(version)\n const hashOffset = codeOffset + varint.encodingLength(code)\n const bytes = new Uint8Array(hashOffset + multihash.byteLength)\n varint.encodeTo(version, bytes, 0)\n varint.encodeTo(code, bytes, codeOffset)\n bytes.set(multihash, hashOffset)\n return bytes\n}\n\nconst cidSymbol = Symbol.for('@ipld/js-cid/CID')\n", "const textDecoder = new TextDecoder()\n\n/**\n * @typedef {import('./interface.js').RawPBLink} RawPBLink\n */\n\n/**\n * @typedef {import('./interface.js').RawPBNode} RawPBNode\n */\n\n/**\n * @param {Uint8Array} bytes\n * @param {number} offset\n * @returns {[number, number]}\n */\nfunction decodeVarint (bytes, offset) {\n let v = 0\n\n for (let shift = 0; ; shift += 7) {\n /* c8 ignore next 3 */\n if (shift >= 64) {\n throw new Error('protobuf: varint overflow')\n }\n /* c8 ignore next 3 */\n if (offset >= bytes.length) {\n throw new Error('protobuf: unexpected end of data')\n }\n\n const b = bytes[offset++]\n v += shift < 28 ? (b & 0x7f) << shift : (b & 0x7f) * (2 ** shift)\n if (b < 0x80) {\n break\n }\n }\n return [v, offset]\n}\n\n/**\n * @param {Uint8Array} bytes\n * @param {number} offset\n * @returns {[Uint8Array, number]}\n */\nfunction decodeBytes (bytes, offset) {\n let byteLen\n ;[byteLen, offset] = decodeVarint(bytes, offset)\n const postOffset = offset + byteLen\n\n /* c8 ignore next 3 */\n if (byteLen < 0 || postOffset < 0) {\n throw new Error('protobuf: invalid length')\n }\n /* c8 ignore next 3 */\n if (postOffset > bytes.length) {\n throw new Error('protobuf: unexpected end of data')\n }\n\n return [bytes.subarray(offset, postOffset), postOffset]\n}\n\n/**\n * @param {Uint8Array} bytes\n * @param {number} index\n * @returns {[number, number, number]}\n */\nfunction decodeKey (bytes, index) {\n let wire\n ;[wire, index] = decodeVarint(bytes, index)\n // [wireType, fieldNum, newIndex]\n return [wire & 0x7, wire >> 3, index]\n}\n\n/**\n * @param {Uint8Array} bytes\n * @returns {RawPBLink}\n */\nfunction decodeLink (bytes) {\n /** @type {RawPBLink} */\n const link = {}\n const l = bytes.length\n let index = 0\n\n while (index < l) {\n let wireType, fieldNum\n ;[wireType, fieldNum, index] = decodeKey(bytes, index)\n\n if (fieldNum === 1) {\n if (link.Hash) {\n throw new Error('protobuf: (PBLink) duplicate Hash section')\n }\n if (wireType !== 2) {\n throw new Error(`protobuf: (PBLink) wrong wireType (${wireType}) for Hash`)\n }\n if (link.Name !== undefined) {\n throw new Error('protobuf: (PBLink) invalid order, found Name before Hash')\n }\n if (link.Tsize !== undefined) {\n throw new Error('protobuf: (PBLink) invalid order, found Tsize before Hash')\n }\n\n [link.Hash, index] = decodeBytes(bytes, index)\n } else if (fieldNum === 2) {\n if (link.Name !== undefined) {\n throw new Error('protobuf: (PBLink) duplicate Name section')\n }\n if (wireType !== 2) {\n throw new Error(`protobuf: (PBLink) wrong wireType (${wireType}) for Name`)\n }\n if (link.Tsize !== undefined) {\n throw new Error('protobuf: (PBLink) invalid order, found Tsize before Name')\n }\n\n let byts\n ;[byts, index] = decodeBytes(bytes, index)\n link.Name = textDecoder.decode(byts)\n } else if (fieldNum === 3) {\n if (link.Tsize !== undefined) {\n throw new Error('protobuf: (PBLink) duplicate Tsize section')\n }\n if (wireType !== 0) {\n throw new Error(`protobuf: (PBLink) wrong wireType (${wireType}) for Tsize`)\n }\n\n [link.Tsize, index] = decodeVarint(bytes, index)\n } else {\n throw new Error(`protobuf: (PBLink) invalid fieldNumber, expected 1, 2 or 3, got ${fieldNum}`)\n }\n }\n\n /* c8 ignore next 3 */\n if (index > l) {\n throw new Error('protobuf: (PBLink) unexpected end of data')\n }\n\n return link\n}\n\n/**\n * @param {Uint8Array} bytes\n * @returns {RawPBNode}\n */\nexport function decodeNode (bytes) {\n const l = bytes.length\n let index = 0\n /** @type {RawPBLink[]|void} */\n let links = undefined // eslint-disable-line no-undef-init\n let linksBeforeData = false\n /** @type {Uint8Array|void} */\n let data = undefined // eslint-disable-line no-undef-init\n\n while (index < l) {\n let wireType, fieldNum\n ;[wireType, fieldNum, index] = decodeKey(bytes, index)\n\n if (wireType !== 2) {\n throw new Error(`protobuf: (PBNode) invalid wireType, expected 2, got ${wireType}`)\n }\n\n if (fieldNum === 1) {\n if (data) {\n throw new Error('protobuf: (PBNode) duplicate Data section')\n }\n\n [data, index] = decodeBytes(bytes, index)\n if (links) {\n linksBeforeData = true\n }\n } else if (fieldNum === 2) {\n if (linksBeforeData) { // interleaved Links/Data/Links\n throw new Error('protobuf: (PBNode) duplicate Links section')\n } else if (!links) {\n links = []\n }\n let byts\n ;[byts, index] = decodeBytes(bytes, index)\n links.push(decodeLink(byts))\n } else {\n throw new Error(`protobuf: (PBNode) invalid fieldNumber, expected 1 or 2, got ${fieldNum}`)\n }\n }\n\n /* c8 ignore next 3 */\n if (index > l) {\n throw new Error('protobuf: (PBNode) unexpected end of data')\n }\n\n /** @type {RawPBNode} */\n const node = {}\n if (data) {\n node.Data = data\n }\n node.Links = links || []\n return node\n}\n", "const textEncoder = new TextEncoder()\nconst maxInt32 = 2 ** 32\nconst maxUInt32 = 2 ** 31\n\n/**\n * @typedef {import('./interface.js').RawPBLink} RawPBLink\n */\n\n/**\n * @typedef {import('./interface.js').RawPBNode} RawPBNode\n */\n\n// the encoders work backward from the end of the bytes array\n\n/**\n * encodeLink() is passed a slice of the parent byte array that ends where this\n * link needs to end, so it packs to the right-most part of the passed `bytes`\n *\n * @param {RawPBLink} link\n * @param {Uint8Array} bytes\n * @returns {number}\n */\nfunction encodeLink (link, bytes) {\n let i = bytes.length\n\n if (typeof link.Tsize === 'number') {\n if (link.Tsize < 0) {\n throw new Error('Tsize cannot be negative')\n }\n if (!Number.isSafeInteger(link.Tsize)) {\n throw new Error('Tsize too large for encoding')\n }\n i = encodeVarint(bytes, i, link.Tsize) - 1\n bytes[i] = 0x18\n }\n\n if (typeof link.Name === 'string') {\n const nameBytes = textEncoder.encode(link.Name)\n i -= nameBytes.length\n bytes.set(nameBytes, i)\n i = encodeVarint(bytes, i, nameBytes.length) - 1\n bytes[i] = 0x12\n }\n\n if (link.Hash) {\n i -= link.Hash.length\n bytes.set(link.Hash, i)\n i = encodeVarint(bytes, i, link.Hash.length) - 1\n bytes[i] = 0xa\n }\n\n return bytes.length - i\n}\n\n/**\n * Encodes a PBNode into a new byte array of precisely the correct size\n *\n * @param {RawPBNode} node\n * @returns {Uint8Array}\n */\nexport function encodeNode (node) {\n const size = sizeNode(node)\n const bytes = new Uint8Array(size)\n let i = size\n\n if (node.Data) {\n i -= node.Data.length\n bytes.set(node.Data, i)\n i = encodeVarint(bytes, i, node.Data.length) - 1\n bytes[i] = 0xa\n }\n\n if (node.Links) {\n for (let index = node.Links.length - 1; index >= 0; index--) {\n const size = encodeLink(node.Links[index], bytes.subarray(0, i))\n i -= size\n i = encodeVarint(bytes, i, size) - 1\n bytes[i] = 0x12\n }\n }\n\n return bytes\n}\n\n/**\n * work out exactly how many bytes this link takes up\n *\n * @param {RawPBLink} link\n * @returns\n */\nfunction sizeLink (link) {\n let n = 0\n\n if (link.Hash) {\n const l = link.Hash.length\n n += 1 + l + sov(l)\n }\n\n if (typeof link.Name === 'string') {\n const l = textEncoder.encode(link.Name).length\n n += 1 + l + sov(l)\n }\n\n if (typeof link.Tsize === 'number') {\n n += 1 + sov(link.Tsize)\n }\n\n return n\n}\n\n/**\n * Work out exactly how many bytes this node takes up\n *\n * @param {RawPBNode} node\n * @returns {number}\n */\nfunction sizeNode (node) {\n let n = 0\n\n if (node.Data) {\n const l = node.Data.length\n n += 1 + l + sov(l)\n }\n\n if (node.Links) {\n for (const link of node.Links) {\n const l = sizeLink(link)\n n += 1 + l + sov(l)\n }\n }\n\n return n\n}\n\n/**\n * @param {Uint8Array} bytes\n * @param {number} offset\n * @param {number} v\n * @returns {number}\n */\nfunction encodeVarint (bytes, offset, v) {\n offset -= sov(v)\n const base = offset\n\n while (v >= maxUInt32) {\n bytes[offset++] = (v & 0x7f) | 0x80\n v /= 128\n }\n\n while (v >= 128) {\n bytes[offset++] = (v & 0x7f) | 0x80\n v >>>= 7\n }\n\n bytes[offset] = v\n\n return base\n}\n\n/**\n * size of varint\n *\n * @param {number} x\n * @returns {number}\n */\nfunction sov (x) {\n if (x % 2 === 0) {\n x++\n }\n return Math.floor((len64(x) + 6) / 7)\n}\n\n/**\n * golang math/bits, how many bits does it take to represent this integer?\n *\n * @param {number} x\n * @returns {number}\n */\nfunction len64 (x) {\n let n = 0\n if (x >= maxInt32) {\n x = Math.floor(x / maxInt32)\n n = 32\n }\n if (x >= (1 << 16)) {\n x >>>= 16\n n += 16\n }\n if (x >= (1 << 8)) {\n x >>>= 8\n n += 8\n }\n return n + len8tab[x]\n}\n\n// golang math/bits\nconst len8tab = [\n 0, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4,\n 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,\n 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,\n 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,\n 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,\n 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,\n 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,\n 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,\n 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,\n 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,\n 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,\n 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,\n 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,\n 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,\n 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,\n 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8\n]\n", "import { CID } from 'multiformats/cid'\n\n/* eslint-disable complexity, no-nested-ternary */\n\n/**\n * @typedef {import('./interface.js').PBLink} PBLink\n * @typedef {import('./interface.js').PBNode} PBNode\n */\n\n/**\n * @template T\n * @typedef {import('multiformats/codecs/interface').ByteView<T>} ByteView\n */\n\n/**\n * @template T\n * @typedef {import('multiformats/codecs/interface').ArrayBufferView<T>} ArrayBufferView\n */\n\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\n/**\n * @template T\n * @param {ByteView<T> | ArrayBufferView<T>} buf\n * @returns {ByteView<T>}\n */\nexport function toByteView (buf) {\n if (buf instanceof ArrayBuffer) {\n return new Uint8Array(buf, 0, buf.byteLength)\n }\n\n return buf\n}\n", "export class InvalidTypeError extends Error {\n static name = 'InvalidTypeError'\n static code = 'ERR_INVALID_TYPE'\n name = InvalidTypeError.name\n code = InvalidTypeError.code\n\n constructor (message = 'Invalid type') {\n super(message)\n }\n}\n\nexport class InvalidUnixFSMessageError extends Error {\n static name = 'InvalidUnixFSMessageError'\n static code = 'ERR_INVALID_MESSAGE'\n name = InvalidUnixFSMessageError.name\n code = InvalidUnixFSMessageError.code\n\n constructor (message = 'Invalid message') {\n super(message)\n }\n}\n", "/* eslint-disable no-fallthrough */\nimport { allocUnsafe } from 'uint8arrays/alloc'\nimport type { Uint8ArrayList } from 'uint8arraylist'\n\nconst N1 = Math.pow(2, 7)\nconst N2 = Math.pow(2, 14)\nconst N3 = Math.pow(2, 21)\nconst N4 = Math.pow(2, 28)\nconst N5 = Math.pow(2, 35)\nconst N6 = Math.pow(2, 42)\nconst N7 = Math.pow(2, 49)\n\n/** Most significant bit of a byte */\nconst MSB = 0x80\n/** Rest of the bits in a byte */\nconst REST = 0x7f\n\nexport function encodingLength (value: number): number {\n if (value < N1) {\n return 1\n }\n\n if (value < N2) {\n return 2\n }\n\n if (value < N3) {\n return 3\n }\n\n if (value < N4) {\n return 4\n }\n\n if (value < N5) {\n return 5\n }\n\n if (value < N6) {\n return 6\n }\n\n if (value < N7) {\n return 7\n }\n\n if (Number.MAX_SAFE_INTEGER != null && value > Number.MAX_SAFE_INTEGER) {\n throw new RangeError('Could not encode varint')\n }\n\n return 8\n}\n\nexport function encodeUint8Array (value: number, buf: Uint8Array, offset: number = 0): Uint8Array {\n switch (encodingLength(value)) {\n case 8: {\n buf[offset++] = (value & 0xFF) | MSB\n value /= 128\n }\n case 7: {\n buf[offset++] = (value & 0xFF) | MSB\n value /= 128\n }\n case 6: {\n buf[offset++] = (value & 0xFF) | MSB\n value /= 128\n }\n case 5: {\n buf[offset++] = (value & 0xFF) | MSB\n value /= 128\n }\n case 4: {\n buf[offset++] = (value & 0xFF) | MSB\n value >>>= 7\n }\n case 3: {\n buf[offset++] = (value & 0xFF) | MSB\n value >>>= 7\n }\n case 2: {\n buf[offset++] = (value & 0xFF) | MSB\n value >>>= 7\n }\n case 1: {\n buf[offset++] = (value & 0xFF)\n value >>>= 7\n break\n }\n default: throw new Error('unreachable')\n }\n return buf\n}\n\nexport function encodeUint8ArrayList (value: number, buf: Uint8ArrayList, offset: number = 0): Uint8ArrayList {\n switch (encodingLength(value)) {\n case 8: {\n buf.set(offset++, (value & 0xFF) | MSB)\n value /= 128\n }\n case 7: {\n buf.set(offset++, (value & 0xFF) | MSB)\n value /= 128\n }\n case 6: {\n buf.set(offset++, (value & 0xFF) | MSB)\n value /= 128\n }\n case 5: {\n buf.set(offset++, (value & 0xFF) | MSB)\n value /= 128\n }\n case 4: {\n buf.set(offset++, (value & 0xFF) | MSB)\n value >>>= 7\n }\n case 3: {\n buf.set(offset++, (value & 0xFF) | MSB)\n value >>>= 7\n }\n case 2: {\n buf.set(offset++, (value & 0xFF) | MSB)\n value >>>= 7\n }\n case 1: {\n buf.set(offset++, (value & 0xFF))\n value >>>= 7\n break\n }\n default: throw new Error('unreachable')\n }\n return buf\n}\n\nexport function decodeUint8Array (buf: Uint8Array, offset: number): number {\n let b = buf[offset]\n let res = 0\n\n res += b & REST\n if (b < MSB) {\n return res\n }\n\n b = buf[offset + 1]\n res += (b & REST) << 7\n if (b < MSB) {\n return res\n }\n\n b = buf[offset + 2]\n res += (b & REST) << 14\n if (b < MSB) {\n return res\n }\n\n b = buf[offset + 3]\n res += (b & REST) << 21\n if (b < MSB) {\n return res\n }\n\n b = buf[offset + 4]\n res += (b & REST) * N4\n if (b < MSB) {\n return res\n }\n\n b = buf[offset + 5]\n res += (b & REST) * N5\n if (b < MSB) {\n return res\n }\n\n b = buf[offset + 6]\n res += (b & REST) * N6\n if (b < MSB) {\n return res\n }\n\n b = buf[offset + 7]\n res += (b & REST) * N7\n if (b < MSB) {\n return res\n }\n\n throw new RangeError('Could not decode varint')\n}\n\nexport function decodeUint8ArrayList (buf: Uint8ArrayList, offset: number): number {\n let b = buf.get(offset)\n let res = 0\n\n res += b & REST\n if (b < MSB) {\n return res\n }\n\n b = buf.get(offset + 1)\n res += (b & REST) << 7\n if (b < MSB) {\n return res\n }\n\n b = buf.get(offset + 2)\n res += (b & REST) << 14\n if (b < MSB) {\n return res\n }\n\n b = buf.get(offset + 3)\n res += (b & REST) << 21\n if (b < MSB) {\n return res\n }\n\n b = buf.get(offset + 4)\n res += (b & REST) * N4\n if (b < MSB) {\n return res\n }\n\n b = buf.get(offset + 5)\n res += (b & REST) * N5\n if (b < MSB) {\n return res\n }\n\n b = buf.get(offset + 6)\n res += (b & REST) * N6\n if (b < MSB) {\n return res\n }\n\n b = buf.get(offset + 7)\n res += (b & REST) * N7\n if (b < MSB) {\n return res\n }\n\n throw new RangeError('Could not decode varint')\n}\n\nexport function encode (value: number): Uint8Array\nexport function encode (value: number, buf: Uint8Array, offset?: number): Uint8Array\nexport function encode (value: number, buf: Uint8ArrayList, offset?: number): Uint8ArrayList\nexport function encode <T extends Uint8Array | Uint8ArrayList = Uint8Array> (value: number, buf?: T, offset: number = 0): T {\n if (buf == null) {\n buf = allocUnsafe(encodingLength(value)) as T\n }\n if (buf instanceof Uint8Array) {\n return encodeUint8Array(value, buf, offset) as T\n } else {\n return encodeUint8ArrayList(value, buf, offset) as T\n }\n}\n\nexport function decode (buf: Uint8ArrayList | Uint8Array, offset: number = 0): number {\n if (buf instanceof Uint8Array) {\n return decodeUint8Array(buf, offset)\n } else {\n return decodeUint8ArrayList(buf, offset)\n }\n}\n", "const f32 = new Float32Array([-0])\nconst f8b = new Uint8Array(f32.buffer)\n\n/**\n * Writes a 32 bit float to a buffer using little endian byte order\n */\nexport function writeFloatLE (val: number, buf: Uint8Array, pos: number): void {\n f32[0] = val\n buf[pos] = f8b[0]\n buf[pos + 1] = f8b[1]\n buf[pos + 2] = f8b[2]\n buf[pos + 3] = f8b[3]\n}\n\n/**\n * Writes a 32 bit float to a buffer using big endian byte order\n */\nexport function writeFloatBE (val: number, buf: Uint8Array, pos: number): void {\n f32[0] = val\n buf[pos] = f8b[3]\n buf[pos + 1] = f8b[2]\n buf[pos + 2] = f8b[1]\n buf[pos + 3] = f8b[0]\n}\n\n/**\n * Reads a 32 bit float from a buffer using little endian byte order\n */\nexport function readFloatLE (buf: Uint8Array, pos: number): number {\n f8b[0] = buf[pos]\n f8b[1] = buf[pos + 1]\n f8b[2] = buf[pos + 2]\n f8b[3] = buf[pos + 3]\n return f32[0]\n}\n\n/**\n * Reads a 32 bit float from a buffer using big endian byte order\n */\nexport function readFloatBE (buf: Uint8Array, pos: number): number {\n f8b[3] = buf[pos]\n f8b[2] = buf[pos + 1]\n f8b[1] = buf[pos + 2]\n f8b[0] = buf[pos + 3]\n return f32[0]\n}\n\nconst f64 = new Float64Array([-0])\nconst d8b = new Uint8Array(f64.buffer)\n\n/**\n * Writes a 64 bit double to a buffer using little endian byte order\n */\nexport function writeDoubleLE (val: number, buf: Uint8Array, pos: number): void {\n f64[0] = val\n buf[pos] = d8b[0]\n buf[pos + 1] = d8b[1]\n buf[pos + 2] = d8b[2]\n buf[pos + 3] = d8b[3]\n buf[pos + 4] = d8b[4]\n buf[pos + 5] = d8b[5]\n buf[pos + 6] = d8b[6]\n buf[pos + 7] = d8b[7]\n}\n\n/**\n * Writes a 64 bit double to a buffer using big endian byte order\n */\nexport function writeDoubleBE (val: number, buf: Uint8Array, pos: number): void {\n f64[0] = val\n buf[pos] = d8b[7]\n buf[pos + 1] = d8b[6]\n buf[pos + 2] = d8b[5]\n buf[pos + 3] = d8b[4]\n buf[pos + 4] = d8b[3]\n buf[pos + 5] = d8b[2]\n buf[pos + 6] = d8b[1]\n buf[pos + 7] = d8b[0]\n}\n\n/**\n * Reads a 64 bit double from a buffer using little endian byte order\n */\nexport function readDoubleLE (buf: Uint8Array, pos: number): number {\n d8b[0] = buf[pos]\n d8b[1] = buf[pos + 1]\n d8b[2] = buf[pos + 2]\n d8b[3] = buf[pos + 3]\n d8b[4] = buf[pos + 4]\n d8b[5] = buf[pos + 5]\n d8b[6] = buf[pos + 6]\n d8b[7] = buf[pos + 7]\n return f64[0]\n}\n\n/**\n * Reads a 64 bit double from a buffer using big endian byte order\n */\nexport function readDoubleBE (buf: Uint8Array, pos: number): number {\n d8b[7] = buf[pos]\n d8b[6] = buf[pos + 1]\n d8b[5] = buf[pos + 2]\n d8b[4] = buf[pos + 3]\n d8b[3] = buf[pos + 4]\n d8b[2] = buf[pos + 5]\n d8b[1] = buf[pos + 6]\n d8b[0] = buf[pos + 7]\n return f64[0]\n}\n", "// the largest BigInt we can safely downcast to a Number\nconst MAX_SAFE_NUMBER_INTEGER = BigInt(Number.MAX_SAFE_INTEGER)\nconst MIN_SAFE_NUMBER_INTEGER = BigInt(Number.MIN_SAFE_INTEGER)\n\n/**\n * Constructs new long bits.\n *\n * @classdesc Helper class for working with the low and high bits of a 64 bit value.\n * @memberof util\n * @function Object() { [native code] }\n * @param {number} lo - Low 32 bits, unsigned\n * @param {number} hi - High 32 bits, unsigned\n */\nexport class LongBits {\n public lo: number\n public hi: number\n\n constructor (lo: number, hi: number) {\n // note that the casts below are theoretically unnecessary as of today, but older statically\n // generated converter code might still call the ctor with signed 32bits. kept for compat.\n\n /**\n * Low bits\n */\n this.lo = lo | 0\n\n /**\n * High bits\n */\n this.hi = hi | 0\n }\n\n /**\n * Converts this long bits to a possibly unsafe JavaScript number\n */\n toNumber (unsigned: boolean = false): number {\n if (!unsigned && (this.hi >>> 31) > 0) {\n const lo = ~this.lo + 1 >>> 0\n let hi = ~this.hi >>> 0\n if (lo === 0) {\n hi = hi + 1 >>> 0\n }\n return -(lo + hi * 4294967296)\n }\n return this.lo + this.hi * 4294967296\n }\n\n /**\n * Converts this long bits to a bigint\n */\n toBigInt (unsigned: boolean = false): bigint {\n if (unsigned) {\n return BigInt(this.lo >>> 0) + (BigInt(this.hi >>> 0) << 32n)\n }\n\n if ((this.hi >>> 31) !== 0) {\n const lo = ~this.lo + 1 >>> 0\n let hi = ~this.hi >>> 0\n if (lo === 0) {\n hi = hi + 1 >>> 0\n }\n return -(BigInt(lo) + (BigInt(hi) << 32n))\n }\n\n return BigInt(this.lo >>> 0) + (BigInt(this.hi >>> 0) << 32n)\n }\n\n /**\n * Converts this long bits to a string\n */\n toString (unsigned: boolean = false): string {\n return this.toBigInt(unsigned).toString()\n }\n\n /**\n * Zig-zag encodes this long bits\n */\n zzEncode (): this {\n const mask = this.hi >> 31\n this.hi = ((this.hi << 1 | this.lo >>> 31) ^ mask) >>> 0\n this.lo = (this.lo << 1 ^ mask) >>> 0\n return this\n }\n\n /**\n * Zig-zag decodes this long bits\n */\n zzDecode (): this {\n const mask = -(this.lo & 1)\n this.lo = ((this.lo >>> 1 | this.hi << 31) ^ mask) >>> 0\n this.hi = (this.hi >>> 1 ^ mask) >>> 0\n return this\n }\n\n /**\n * Calculates the length of this longbits when encoded as a varint.\n */\n length (): number {\n const part0 = this.lo\n const part1 = (this.lo >>> 28 | this.hi << 4) >>> 0\n const part2 = this.hi >>> 24\n return part2 === 0\n ? part1 === 0\n ? part0 < 16384\n ? part0 < 128 ? 1 : 2\n : part0 < 2097152 ? 3 : 4\n : part1 < 16384\n ? part1 < 128 ? 5 : 6\n : part1 < 2097152 ? 7 : 8\n : part2 < 128 ? 9 : 10\n }\n\n /**\n * Constructs new long bits from the specified number\n */\n static fromBigInt (value: bigint): LongBits {\n if (value === 0n) {\n return zero\n }\n\n if (value < MAX_SAFE_NUMBER_INTEGER && value > MIN_SAFE_NUMBER_INTEGER) {\n return this.fromNumber(Number(value))\n }\n\n const negative = value < 0n\n\n if (negative) {\n value = -value\n }\n\n let hi = value >> 32n\n let lo = value - (hi << 32n)\n\n if (negative) {\n hi = ~hi | 0n\n lo = ~lo | 0n\n\n if (++lo > TWO_32) {\n lo = 0n\n if (++hi > TWO_32) { hi = 0n }\n }\n }\n\n return new LongBits(Number(lo), Number(hi))\n }\n\n /**\n * Constructs new long bits from the specified number\n */\n static fromNumber (value: number): LongBits {\n if (value === 0) { return zero }\n const sign = value < 0\n if (sign) { value = -value }\n let lo = value >>> 0\n let hi = (value - lo) / 4294967296 >>> 0\n if (sign) {\n hi = ~hi >>> 0\n lo = ~lo >>> 0\n if (++lo > 4294967295) {\n lo = 0\n if (++hi > 4294967295) { hi = 0 }\n }\n }\n return new LongBits(lo, hi)\n }\n\n /**\n * Constructs new long bits from a number, long or string\n */\n static from (value: bigint | number | string | { low: number, high: number }): LongBits {\n if (typeof value === 'number') {\n return LongBits.fromNumber(value)\n }\n if (typeof value === 'bigint') {\n return LongBits.fromBigInt(value)\n }\n if (typeof value === 'string') {\n return LongBits.fromBigInt(BigInt(value))\n }\n return value.low != null || value.high != null ? new LongBits(value.low >>> 0, value.high >>> 0) : zero\n }\n}\n\nconst zero = new LongBits(0, 0)\nzero.toBigInt = function () { return 0n }\nzero.zzEncode = zero.zzDecode = function () { return this }\nzero.length = function () { return 1 }\n\nconst TWO_32 = 4294967296n\n", "/**\n * Calculates the UTF8 byte length of a string\n */\nexport function length (string: string): number {\n let len = 0\n let c = 0\n for (let i = 0; i < string.length; ++i) {\n c = string.charCodeAt(i)\n\n if (c < 128) {\n len += 1\n } else if (c < 2048) {\n len += 2\n } else if ((c & 0xFC00) === 0xD800 && (string.charCodeAt(i + 1) & 0xFC00) === 0xDC00) {\n ++i\n len += 4\n } else {\n len += 3\n }\n }\n\n return len\n}\n\n/**\n * Reads UTF8 bytes as a string\n */\nexport function read (buffer: Uint8Array, start: number, end: number): string {\n const len = end - start\n\n if (len < 1) {\n return ''\n }\n\n let parts: string[] | undefined\n const chunk: number[] = []\n let i = 0 // char offset\n let t: number // temporary\n\n while (start < end) {\n t = buffer[start++]\n\n if (t < 128) {\n chunk[i++] = t\n } else if (t > 191 && t < 224) {\n chunk[i++] = (t & 31) << 6 | buffer[start++] & 63\n } else if (t > 239 && t < 365) {\n t = ((t & 7) << 18 | (buffer[start++] & 63) << 12 | (buffer[start++] & 63) << 6 | buffer[start++] & 63) - 0x10000\n chunk[i++] = 0xD800 + (t >> 10)\n chunk[i++] = 0xDC00 + (t & 1023)\n } else {\n chunk[i++] = (t & 15) << 12 | (buffer[start++] & 63) << 6 | buffer[start++] & 63\n }\n\n if (i > 8191) {\n (parts ?? (parts = [])).push(String.fromCharCode.apply(String, chunk))\n i = 0\n }\n }\n\n if (parts != null) {\n if (i > 0) {\n parts.push(String.fromCharCode.apply(String, chunk.slice(0, i)))\n }\n\n return parts.join('')\n }\n\n return String.fromCharCode.apply(String, chunk.slice(0, i))\n}\n\n/**\n * Writes a string as UTF8 bytes\n */\nexport function write (string: string, buffer: Uint8Array, offset: number): number {\n const start = offset\n let c1 // character 1\n let c2 // character 2\n\n for (let i = 0; i < string.length; ++i) {\n c1 = string.charCodeAt(i)\n\n if (c1 < 128) {\n buffer[offset++] = c1\n } else if (c1 < 2048) {\n buffer[offset++] = c1 >> 6 | 192\n buffer[offset++] = c1 & 63 | 128\n } else if ((c1 & 0xFC00) === 0xD800 && ((c2 = string.charCodeAt(i + 1)) & 0xFC00) === 0xDC00) {\n c1 = 0x10000 + ((c1 & 0x03FF) << 10) + (c2 & 0x03FF)\n ++i\n buffer[offset++] = c1 >> 18 | 240\n buffer[offset++] = c1 >> 12 & 63 | 128\n buffer[offset++] = c1 >> 6 & 63 | 128\n buffer[offset++] = c1 & 63 | 128\n } else {\n buffer[offset++] = c1 >> 12 | 224\n buffer[offset++] = c1 >> 6 & 63 | 128\n buffer[offset++] = c1 & 63 | 128\n }\n }\n\n return offset - start\n}\n", "import { decodeUint8Array, encodingLength } from 'uint8-varint'\nimport { readFloatLE, readDoubleLE } from './float.js'\nimport { LongBits } from './longbits.js'\nimport * as utf8 from './utf8.js'\nimport type { Reader } from '../index.js'\nimport type { Uint8ArrayList } from 'uint8arraylist'\n\n/* istanbul ignore next */\nfunction indexOutOfRange (reader: Reader, writeLength?: number): RangeError {\n return RangeError(`index out of range: ${reader.pos} + ${writeLength ?? 1} > ${reader.len}`)\n}\n\nfunction readFixed32End (buf: Uint8Array, end: number): number { // note that this uses `end`, not `pos`\n return (buf[end - 4] |\n buf[end - 3] << 8 |\n buf[end - 2] << 16 |\n buf[end - 1] << 24) >>> 0\n}\n\n/**\n * Constructs a new reader instance using the specified buffer.\n */\nexport class Uint8ArrayReader implements Reader {\n public buf: Uint8Array\n public pos: number\n public len: number\n\n public _slice = Uint8Array.prototype.subarray\n\n constructor (buffer: Uint8Array) {\n /**\n * Read buffer\n */\n this.buf = buffer\n\n /**\n * Read buffer position\n */\n this.pos = 0\n\n /**\n * Read buffer length\n */\n this.len = buffer.length\n }\n\n /**\n * Reads a varint as an unsigned 32 bit value\n */\n uint32 (): number {\n let value = 4294967295\n\n value = (this.buf[this.pos] & 127) >>> 0; if (this.buf[this.pos++] < 128) { return value }\n value = (value | (this.buf[this.pos] & 127) << 7) >>> 0; if (this.buf[this.pos++] < 128) { return value }\n value = (value | (this.buf[this.pos] & 127) << 14) >>> 0; if (this.buf[this.pos++] < 128) { return value }\n value = (value | (this.buf[this.pos] & 127) << 21) >>> 0; if (this.buf[this.pos++] < 128) { return value }\n value = (value | (this.buf[this.pos] & 15) << 28) >>> 0; if (this.buf[this.pos++] < 128) { return value }\n\n if ((this.pos += 5) > this.len) {\n this.pos = this.len\n throw indexOutOfRange(this, 10)\n }\n\n return value\n }\n\n /**\n * Reads a varint as a signed 32 bit value\n */\n int32 (): number {\n return this.uint32() | 0\n }\n\n /**\n * Reads a zig-zag encoded varint as a signed 32 bit value\n */\n sint32 (): number {\n const value = this.uint32()\n return value >>> 1 ^ -(value & 1) | 0\n }\n\n /**\n * Reads a varint as a boolean\n */\n bool (): boolean {\n return this.uint32() !== 0\n }\n\n /**\n * Reads fixed 32 bits as an unsigned 32 bit integer\n */\n fixed32 (): number {\n if (this.pos + 4 > this.len) { throw indexOutOfRange(this, 4) }\n\n const res = readFixed32End(this.buf, this.pos += 4)\n\n return res\n }\n\n /**\n * Reads fixed 32 bits as a signed 32 bit integer\n */\n sfixed32 (): number {\n if (this.pos + 4 > this.len) {\n throw indexOutOfRange(this, 4)\n }\n\n const res = readFixed32End(this.buf, this.pos += 4) | 0\n\n return res\n }\n\n /**\n * Reads a float (32 bit) as a number\n */\n float (): number {\n if (this.pos + 4 > this.len) {\n throw indexOutOfRange(this, 4)\n }\n\n const value = readFloatLE(this.buf, this.pos)\n this.pos += 4\n return value\n }\n\n /**\n * Reads a double (64 bit float) as a number\n */\n double (): number {\n /* istanbul ignore if */\n if (this.pos + 8 > this.len) { throw indexOutOfRange(this, 4) }\n\n const value = readDoubleLE(this.buf, this.pos)\n this.pos += 8\n return value\n }\n\n /**\n * Reads a sequence of bytes preceded by its length as a varint\n */\n bytes (): Uint8Array {\n const length = this.uint32()\n const start = this.pos\n const end = this.pos + length\n\n /* istanbul ignore if */\n if (end > this.len) {\n throw indexOutOfRange(this, length)\n }\n\n this.pos += length\n\n return start === end // fix for IE 10/Win8 and others' subarray returning array of size 1\n ? new Uint8Array(0)\n : this.buf.subarray(start, end)\n }\n\n /**\n * Reads a string preceded by its byte length as a varint\n */\n string (): string {\n const bytes = this.bytes()\n return utf8.read(bytes, 0, bytes.length)\n }\n\n /**\n * Skips the specified number of bytes if specified, otherwise skips a varint\n */\n skip (length?: number): this {\n if (typeof length === 'number') {\n /* istanbul ignore if */\n if (this.pos + length > this.len) { throw indexOutOfRange(this, length) }\n this.pos += length\n } else {\n do {\n /* istanbul ignore if */\n if (this.pos >= this.len) {\n throw indexOutOfRange(this)\n }\n } while ((this.buf[this.pos++] & 128) !== 0)\n }\n return this\n }\n\n /**\n * Skips the next element of the specified wire type\n */\n skipType (wireType: number): this {\n switch (wireType) {\n case 0:\n this.skip()\n break\n case 1:\n this.skip(8)\n break\n case 2:\n this.skip(this.uint32())\n break\n case 3:\n while ((wireType = this.uint32() & 7) !== 4) {\n this.skipType(wireType)\n }\n break\n case 5:\n this.skip(4)\n break\n\n /* istanbul ignore next */\n default:\n throw Error(`invalid wire type ${wireType} at offset ${this.pos}`)\n }\n return this\n }\n\n private readLongVarint (): LongBits {\n // tends to deopt with local vars for octet etc.\n const bits = new LongBits(0, 0)\n let i = 0\n if (this.len - this.pos > 4) { // fast route (lo)\n for (; i < 4; ++i) {\n // 1st..4th\n bits.lo = (bits.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0\n if (this.buf[this.pos++] < 128) { return bits }\n }\n // 5th\n bits.lo = (bits.lo | (this.buf[this.pos] & 127) << 28) >>> 0\n bits.hi = (bits.hi | (this.buf[this.pos] & 127) >> 4) >>> 0\n if (this.buf[this.pos++] < 128) { return bits }\n i = 0\n } else {\n for (; i < 3; ++i) {\n /* istanbul ignore if */\n if (this.pos >= this.len) { throw indexOutOfRange(this) }\n // 1st..3th\n bits.lo = (bits.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0\n if (this.buf[this.pos++] < 128) { return bits }\n }\n // 4th\n bits.lo = (bits.lo | (this.buf[this.pos++] & 127) << i * 7) >>> 0\n return bits\n }\n if (this.len - this.pos > 4) { // fast route (hi)\n for (; i < 5; ++i) {\n // 6th..10th\n bits.hi = (bits.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0\n if (this.buf[this.pos++] < 128) { return bits }\n }\n } else {\n for (; i < 5; ++i) {\n if (this.pos >= this.len) {\n throw indexOutOfRange(this)\n }\n\n // 6th..10th\n bits.hi = (bits.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0\n if (this.buf[this.pos++] < 128) { return bits }\n }\n }\n\n throw Error('invalid varint encoding')\n }\n\n private readFixed64 (): LongBits {\n if (this.pos + 8 > this.len) {\n throw indexOutOfRange(this, 8)\n }\n\n const lo = readFixed32End(this.buf, this.pos += 4)\n const hi = readFixed32End(this.buf, this.pos += 4)\n\n return new LongBits(lo, hi)\n }\n\n /**\n * Reads a varint as a signed 64 bit value\n */\n int64 (): bigint {\n return this.readLongVarint().toBigInt()\n }\n\n /**\n * Reads a varint as a signed 64 bit value returned as a possibly unsafe\n * JavaScript number\n */\n int64Number (): number {\n return this.readLongVarint().toNumber()\n }\n\n /**\n * Reads a varint as a signed 64 bit value returned as a string\n */\n int64String (): string {\n return this.readLongVarint().toString()\n }\n\n /**\n * Reads a varint as an unsigned 64 bit value\n */\n uint64 (): bigint {\n return this.readLongVarint().toBigInt(true)\n }\n\n /**\n * Reads a varint as an unsigned 64 bit value returned as a possibly unsafe\n * JavaScript number\n */\n uint64Number (): number {\n const value = decodeUint8Array(this.buf, this.pos)\n this.pos += encodingLength(value)\n return value\n }\n\n /**\n * Reads a varint as an unsigned 64 bit value returned as a string\n */\n uint64String (): string {\n return this.readLongVarint().toString(true)\n }\n\n /**\n * Reads a zig-zag encoded varint as a signed 64 bit value\n */\n sint64 (): bigint {\n return this.readLongVarint().zzDecode().toBigInt()\n }\n\n /**\n * Reads a zig-zag encoded varint as a signed 64 bit value returned as a\n * possibly unsafe JavaScript number\n */\n sint64Number (): number {\n return this.readLongVarint().zzDecode().toNumber()\n }\n\n /**\n * Reads a zig-zag encoded varint as a signed 64 bit value returned as a\n * string\n */\n sint64String (): string {\n return this.readLongVarint().zzDecode().toString()\n }\n\n /**\n * Reads fixed 64 bits\n */\n fixed64 (): bigint {\n return this.readFixed64().toBigInt()\n }\n\n /**\n * Reads fixed 64 bits returned as a possibly unsafe JavaScript number\n */\n fixed64Number (): number {\n return this.readFixed64().toNumber()\n }\n\n /**\n * Reads fixed 64 bits returned as a string\n */\n fixed64String (): string {\n return this.readFixed64().toString()\n }\n\n /**\n * Reads zig-zag encoded fixed 64 bits\n */\n sfixed64 (): bigint {\n return this.readFixed64().toBigInt()\n }\n\n /**\n * Reads zig-zag encoded fixed 64 bits returned as a possibly unsafe\n * JavaScript number\n */\n sfixed64Number (): number {\n return this.readFixed64().toNumber()\n }\n\n /**\n * Reads zig-zag encoded fixed 64 bits returned as a string\n */\n sfixed64String (): string {\n return this.readFixed64().toString()\n }\n}\n\nexport function createReader (buf: Uint8Array | Uint8ArrayList): Reader {\n return new Uint8ArrayReader(buf instanceof Uint8Array ? buf : buf.subarray())\n}\n", "import { createReader } from './utils/reader.js'\nimport type { Codec, DecodeOptions } from './codec.js'\nimport type { Uint8ArrayList } from 'uint8arraylist'\n\nexport function decodeMessage <T> (buf: Uint8Array | Uint8ArrayList, codec: Pick<Codec<T>, 'decode'>, opts?: DecodeOptions<T>): T {\n const reader = createReader(buf)\n\n return codec.decode(reader, undefined, opts)\n}\n", "import { baseX } from './base.js'\n\nexport const base10 = baseX({\n prefix: '9',\n name: 'base10',\n alphabet: '0123456789'\n})\n", "import { rfc4648 } from './base.js'\n\nexport const base16 = rfc4648({\n prefix: 'f',\n name: 'base16',\n alphabet: '0123456789abcdef',\n bitsPerChar: 4\n})\n\nexport const base16upper = rfc4648({\n prefix: 'F',\n name: 'base16upper',\n alphabet: '0123456789ABCDEF',\n bitsPerChar: 4\n})\n", "import { rfc4648 } from './base.js'\n\nexport const base2 = rfc4648({\n prefix: '0',\n name: 'base2',\n alphabet: '01',\n bitsPerChar: 1\n})\n", "import { from } from './base.js'\n\nconst alphabet = Array.from('\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: string[] = (alphabet.reduce<string[]>((p, c, i) => { p[i] = c; return p }, ([])))\nconst alphabetCharsToBytes: number[] = (alphabet.reduce<number[]>((p, c, i) => {\n const codePoint = c.codePointAt(0)\n if (codePoint == null) {\n throw new Error(`Invalid character: ${c}`)\n }\n p[codePoint] = i\n return p\n}, ([])))\n\nfunction encode (data: Uint8Array): string {\n return data.reduce((p, c) => {\n p += alphabetBytesToChars[c]\n return p\n }, '')\n}\n\nfunction decode (str: string): Uint8Array {\n const byts = []\n for (const char of str) {\n const codePoint = char.codePointAt(0)\n if (codePoint == null) {\n throw new Error(`Invalid character: ${char}`)\n }\n const byt = alphabetCharsToBytes[codePoint]\n if (byt == null) {\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 { 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 { rfc4648 } from './base.js'\n\nexport const base8 = rfc4648({\n prefix: '7',\n name: 'base8',\n alphabet: '01234567',\n bitsPerChar: 3\n})\n", "import { fromString, toString } from '../bytes.js'\nimport { from } from './base.js'\n\nexport const identity = from({\n prefix: '\\x00',\n name: 'identity',\n encode: (buf) => toString(buf),\n decode: (str) => fromString(str)\n})\n", "import type { ArrayBufferView, ByteView } from './interface.js'\n\nconst textEncoder = new TextEncoder()\nconst textDecoder = new TextDecoder()\n\nexport const name = 'json'\nexport const code = 0x0200\n\nexport function encode <T> (node: T): ByteView<T> {\n return textEncoder.encode(JSON.stringify(node))\n}\n\nexport function decode <T> (data: ByteView<T> | ArrayBufferView<T>): T {\n return JSON.parse(textDecoder.decode(data))\n}\n", "import { coerce } from '../bytes.js'\nimport type { ArrayBufferView, ByteView } from './interface.js'\n\nexport const name = 'raw'\nexport const code = 0x55\n\nexport function encode (node: Uint8Array): ByteView<Uint8Array> {\n return coerce(node)\n}\n\nexport function decode (data: ByteView<Uint8Array> | ArrayBufferView<Uint8Array>): Uint8Array {\n return coerce(data)\n}\n", "import { coerce } from '../bytes.js'\nimport * as Digest from './digest.js'\nimport type { DigestOptions } from './hasher.js'\n\nconst code: 0x0 = 0x0\nconst name = 'identity'\n\nconst encode: (input: Uint8Array) => Uint8Array = coerce\n\nfunction digest (input: Uint8Array, options?: DigestOptions): Digest.Digest<typeof code, number> {\n if (options?.truncate != null && options.truncate !== input.byteLength) {\n if (options.truncate < 0 || options.truncate > input.byteLength) {\n throw new Error(`Invalid truncate option, must be less than or equal to ${input.byteLength}`)\n }\n\n input = input.subarray(0, options.truncate)\n }\n\n return Digest.create(code, encode(input))\n}\n\nexport const identity = { code, name, encode, digest }\n", "/* global crypto */\n\nimport { from } from './hasher.js'\n\nfunction sha (name: AlgorithmIdentifier): (data: Uint8Array) => Promise<Uint8Array> {\n return async data => new Uint8Array(await crypto.subtle.digest(name, data))\n}\n\nexport const sha256 = from({\n name: 'sha2-256',\n code: 0x12,\n encode: sha('SHA-256')\n})\n\nexport const sha512 = from({\n name: 'sha2-512',\n code: 0x13,\n encode: sha('SHA-512')\n})\n", "import * as Digest from './digest.js'\nimport type { MultihashHasher } from './interface.js'\n\ntype Await<T> = Promise<T> | T\n\nconst DEFAULT_MIN_DIGEST_LENGTH = 20\n\nexport interface HasherInit <Name extends string, Code extends number> {\n name: Name\n code: Code\n encode(input: Uint8Array): Await<Uint8Array>\n\n /**\n * The minimum length a hash is allowed to be truncated to in bytes\n *\n * @default 20\n */\n minDigestLength?: number\n\n /**\n * The maximum length a hash is allowed to be truncated to in bytes. If not\n * specified it will be inferred from the length of the digest.\n */\n maxDigestLength?: number\n}\n\nexport function from <Name extends string, Code extends number> ({ name, code, encode, minDigestLength, maxDigestLength }: HasherInit<Name, Code>): Hasher<Name, Code> {\n return new Hasher(name, code, encode, minDigestLength, maxDigestLength)\n}\n\nexport interface DigestOptions {\n /**\n * Truncate the returned digest to this number of bytes.\n *\n * This may cause the digest method to throw/reject if the passed value is\n * greater than the digest length or below a threshold under which the risk of\n * hash collisions is significant.\n *\n * The actual value of this threshold can depend on the hashing algorithm in\n * use.\n */\n truncate?: number\n}\n\n/**\n * Hasher represents a hashing algorithm implementation that produces as\n * `MultihashDigest`.\n */\nexport class Hasher<Name extends string, Code extends number> implements MultihashHasher<Code> {\n readonly name: Name\n readonly code: Code\n readonly encode: (input: Uint8Array) => Await<Uint8Array>\n readonly minDigestLength: number\n readonly maxDigestLength?: number\n\n constructor (name: Name, code: Code, encode: (input: Uint8Array) => Await<Uint8Array>, minDigestLength?: number, maxDigestLength?: number) {\n this.name = name\n this.code = code\n this.encode = encode\n this.minDigestLength = minDigestLength ?? DEFAULT_MIN_DIGEST_LENGTH\n this.maxDigestLength = maxDigestLength\n }\n\n digest (input: Uint8Array, options?: DigestOptions): Await<Digest.Digest<Code, number>> {\n if (options?.truncate != null) {\n if (options.truncate < this.minDigestLength) {\n throw new Error(`Invalid truncate option, must be greater than or equal to ${this.minDigestLength}`)\n }\n\n if (this.maxDigestLength != null && options.truncate > this.maxDigestLength) {\n throw new Error(`Invalid truncate option, must be less than or equal to ${this.maxDigestLength}`)\n }\n }\n\n if (input instanceof Uint8Array) {\n const result = this.encode(input)\n\n if (result instanceof Uint8Array) {\n return createDigest(result, this.code, options?.truncate)\n }\n\n return result.then(digest => createDigest(digest, this.code, options?.truncate))\n } else {\n throw Error('Unknown type, must be binary type')\n /* c8 ignore next 1 */\n }\n }\n}\n\n/**\n * Create a Digest from the passed uint8array and code, optionally truncating it\n * first.\n */\nfunction createDigest <Code extends number> (digest: Uint8Array, code: Code, truncate?: number): Digest.Digest<Code, number> {\n if (truncate != null && truncate !== digest.byteLength) {\n if (truncate > digest.byteLength) {\n throw new Error(`Invalid truncate option, must be less than or equal to ${digest.byteLength}`)\n }\n\n digest = digest.subarray(0, truncate)\n }\n\n return Digest.create(code, digest)\n}\n", "import * as base10 from './bases/base10.js'\nimport * as base16 from './bases/base16.js'\nimport * as base2 from './bases/base2.js'\nimport * as base256emoji from './bases/base256emoji.js'\nimport * as base32 from './bases/base32.js'\nimport * as base36 from './bases/base36.js'\nimport * as base58 from './bases/base58.js'\nimport * as base64 from './bases/base64.js'\nimport * as base8 from './bases/base8.js'\nimport * as identityBase from './bases/identity.js'\nimport * as json from './codecs/json.js'\nimport * as raw from './codecs/raw.js'\nimport * as identity from './hashes/identity.js'\nimport * as sha2 from './hashes/sha2.js'\nimport { CID, hasher, digest, varint, bytes } from './index.js'\n\nexport const bases = { ...identityBase, ...base2, ...base8, ...base10, ...base16, ...base32, ...base36, ...base58, ...base64, ...base256emoji }\nexport const hashes = { ...sha2, ...identity }\nexport const codecs = { raw, json }\n\nexport { CID, hasher, digest, varint, bytes }\n", "import { bases } from 'multiformats/basics'\nimport type { MultibaseCodec } from 'multiformats'\nimport { allocUnsafe } from '#alloc'\n\nfunction createCodec (name: string, prefix: string, encode: (buf: Uint8Array) => string, decode: (str: string) => Uint8Array): MultibaseCodec<any> {\n return {\n name,\n prefix,\n encoder: {\n name,\n prefix,\n encode\n },\n decoder: {\n decode\n }\n }\n}\n\nconst string = createCodec('utf8', 'u', (buf) => {\n const decoder = new TextDecoder('utf8')\n return 'u' + decoder.decode(buf)\n}, (str) => {\n const encoder = new TextEncoder()\n return encoder.encode(str.substring(1))\n})\n\nconst ascii = createCodec('ascii', 'a', (buf) => {\n let string = 'a'\n\n for (let i = 0; i < buf.length; i++) {\n string += String.fromCharCode(buf[i])\n }\n return string\n}, (str) => {\n str = str.substring(1)\n const buf = allocUnsafe(str.length)\n\n for (let i = 0; i < str.length; i++) {\n buf[i] = str.charCodeAt(i)\n }\n\n return buf\n})\n\nexport type SupportedEncodings = 'utf8' | 'utf-8' | 'hex' | 'latin1' | 'ascii' | 'binary' | keyof typeof bases\n\nconst BASES: Record<SupportedEncodings, MultibaseCodec<any>> = {\n utf8: string,\n 'utf-8': string,\n hex: bases.base16,\n latin1: ascii,\n ascii,\n binary: ascii,\n\n ...bases\n}\n\nexport default BASES\n", "import bases, { type SupportedEncodings } from './util/bases.js'\n\nexport type { SupportedEncodings }\n\n/**\n * Create a `Uint8Array` from the passed string\n *\n * Supports `utf8`, `utf-8`, `hex`, and any encoding supported by the multiformats module.\n *\n * Also `ascii` which is similar to node's 'binary' encoding.\n */\nexport function fromString (string: string, encoding: SupportedEncodings = 'utf8'): Uint8Array {\n const base = bases[encoding]\n\n if (base == null) {\n throw new Error(`Unsupported encoding \"${encoding}\"`)\n }\n\n // add multibase prefix\n return base.decoder.decode(`${base.prefix}${string}`) // eslint-disable-line @typescript-eslint/restrict-template-expressions\n}\n", "import { allocUnsafe } from 'uint8arrays/alloc'\n\n/**\n * A general purpose buffer pool\n */\nexport default function pool (size?: number): (size: number) => Uint8Array {\n const SIZE = size ?? 8192\n const MAX = SIZE >>> 1\n let slab: Uint8Array\n let offset = SIZE\n return function poolAlloc (size: number) {\n if (size < 1 || size > MAX) {\n return allocUnsafe(size)\n }\n\n if (offset + size > SIZE) {\n slab = allocUnsafe(SIZE)\n offset = 0\n }\n\n const buf = slab.subarray(offset, offset += size)\n\n if ((offset & 7) !== 0) {\n // align to 32 bit\n offset = (offset | 7) + 1\n }\n\n return buf\n }\n}\n", "import { encodeUint8Array, encodingLength } from 'uint8-varint'\nimport { allocUnsafe } from 'uint8arrays/alloc'\nimport { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'\nimport { writeFloatLE, writeDoubleLE } from './float.js'\nimport { LongBits } from './longbits.js'\nimport pool from './pool.js'\nimport * as utf8 from './utf8.js'\nimport type { Writer } from '../index.js'\n\ninterface WriterOperation<T> {\n (val: T, buf: Uint8Array, pos: number): any\n}\n\n/**\n * Constructs a new writer operation instance.\n *\n * @classdesc Scheduled writer operation\n */\nclass Op<T> {\n /**\n * Function to call\n */\n public fn: WriterOperation<T>\n\n /**\n * Value byte length\n */\n public len: number\n\n /**\n * Next operation\n */\n public next?: Op<any>\n\n /**\n * Value to write\n */\n public val: T\n\n constructor (fn: WriterOperation<T>, len: number, val: T) {\n this.fn = fn\n this.len = len\n this.next = undefined\n this.val = val // type varies\n }\n}\n\n/* istanbul ignore next */\nfunction noop (): void {}\n\n/**\n * Constructs a new writer state instance\n */\nclass State {\n /**\n * Current head\n */\n public head: Op<any>\n\n /**\n * Current tail\n */\n public tail: Op<any>\n\n /**\n * Current buffer length\n */\n public len: number\n\n /**\n * Next state\n */\n public next?: State\n\n constructor (writer: Uint8ArrayWriter) {\n this.head = writer.head\n this.tail = writer.tail\n this.len = writer.len\n this.next = writer.states\n }\n}\n\nconst bufferPool = pool()\n\n/**\n * Allocates a buffer of the specified size\n */\nfunction alloc (size: number): Uint8Array {\n if (globalThis.Buffer != null) {\n return allocUnsafe(size)\n }\n\n return bufferPool(size)\n}\n\n/**\n * When a value is written, the writer calculates its byte length and puts it into a linked\n * list of operations to perform when finish() is called. This both allows us to allocate\n * buffers of the exact required size and reduces the amount of work we have to do compared\n * to first calculating over objects and then encoding over objects. In our case, the encoding\n * part is just a linked list walk calling operations with already prepared values.\n */\nclass Uint8ArrayWriter implements Writer {\n /**\n * Current length\n */\n public len: number\n\n /**\n * Operations head\n */\n public head: Op<any>\n\n /**\n * Operations tail\n */\n public tail: Op<any>\n\n /**\n * Linked forked states\n */\n public states?: any\n\n constructor () {\n this.len = 0\n this.head = new Op(noop, 0, 0)\n this.tail = this.head\n this.states = null\n }\n\n /**\n * Pushes a new operation to the queue\n */\n _push (fn: WriterOperation<any>, len: number, val: any): this {\n this.tail = this.tail.next = new Op(fn, len, val)\n this.len += len\n\n return this\n }\n\n /**\n * Writes an unsigned 32 bit value as a varint\n */\n uint32 (value: number): this {\n // here, the call to this.push has been inlined and a varint specific Op subclass is used.\n // uint32 is by far the most frequently used operation and benefits significantly from this.\n this.len += (this.tail = this.tail.next = new VarintOp(\n (value = value >>> 0) <\n 128\n ? 1\n : value < 16384\n ? 2\n : value < 2097152\n ? 3\n : value < 268435456\n ? 4\n : 5,\n value)).len\n return this\n }\n\n /**\n * Writes a signed 32 bit value as a varint`\n */\n int32 (value: number): this {\n return value < 0\n ? this._push(writeVarint64, 10, LongBits.fromNumber(value)) // 10 bytes per spec\n : this.uint32(value)\n }\n\n /**\n * Writes a 32 bit value as a varint, zig-zag encoded\n */\n sint32 (value: number): this {\n return this.uint32((value << 1 ^ value >> 31) >>> 0)\n }\n\n /**\n * Writes an unsigned 64 bit value as a varint\n */\n uint64 (value: bigint): this {\n const bits = LongBits.fromBigInt(value)\n return this._push(writeVarint64, bits.length(), bits)\n }\n\n /**\n * Writes an unsigned 64 bit value as a varint\n */\n uint64Number (value: number): this {\n return this._push(encodeUint8Array, encodingLength(value), value)\n }\n\n /**\n * Writes an unsigned 64 bit value as a varint\n */\n uint64String (value: string): this {\n return this.uint64(BigInt(value))\n }\n\n /**\n * Writes a signed 64 bit value as a varint\n */\n int64 (value: bigint): this {\n return this.uint64(value)\n }\n\n /**\n * Writes a signed 64 bit value as a varint\n */\n int64Number (value: number): this {\n return this.uint64Number(value)\n }\n\n /**\n * Writes a signed 64 bit value as a varint\n */\n int64String (value: string): this {\n return this.uint64String(value)\n }\n\n /**\n * Writes a signed 64 bit value as a varint, zig-zag encoded\n */\n sint64 (value: bigint): this {\n const bits = LongBits.fromBigInt(value).zzEncode()\n return this._push(writeVarint64, bits.length(), bits)\n }\n\n /**\n * Writes a signed 64 bit value as a varint, zig-zag encoded\n */\n sint64Number (value: number): this {\n const bits = LongBits.fromNumber(value).zzEncode()\n return this._push(writeVarint64, bits.length(), bits)\n }\n\n /**\n * Writes a signed 64 bit value as a varint, zig-zag encoded\n */\n sint64String (value: string): this {\n return this.sint64(BigInt(value))\n }\n\n /**\n * Writes a boolish value as a varint\n */\n bool (value: boolean): this {\n return this._push(writeByte, 1, value ? 1 : 0)\n }\n\n /**\n * Writes an unsigned 32 bit value as fixed 32 bits\n */\n fixed32 (value: number): this {\n return this._push(writeFixed32, 4, value >>> 0)\n }\n\n /**\n * Writes a signed 32 bit value as fixed 32 bits\n */\n sfixed32 (value: number): this {\n return this.fixed32(value)\n }\n\n /**\n * Writes an unsigned 64 bit value as fixed 64 bits\n */\n fixed64 (value: bigint): this {\n const bits = LongBits.fromBigInt(value)\n return this._push(writeFixed32, 4, bits.lo)._push(writeFixed32, 4, bits.hi)\n }\n\n /**\n * Writes an unsigned 64 bit value as fixed 64 bits\n */\n fixed64Number (value: number): this {\n const bits = LongBits.fromNumber(value)\n return this._push(writeFixed32, 4, bits.lo)._push(writeFixed32, 4, bits.hi)\n }\n\n /**\n * Writes an unsigned 64 bit value as fixed 64 bits\n */\n fixed64String (value: string): this {\n return this.fixed64(BigInt(value))\n }\n\n /**\n * Writes a signed 64 bit value as fixed 64 bits\n */\n sfixed64 (value: bigint): this {\n return this.fixed64(value)\n }\n\n /**\n * Writes a signed 64 bit value as fixed 64 bits\n */\n sfixed64Number (value: number): this {\n return this.fixed64Number(value)\n }\n\n /**\n * Writes a signed 64 bit value as fixed 64 bits\n */\n sfixed64String (value: string): this {\n return this.fixed64String(value)\n }\n\n /**\n * Writes a float (32 bit)\n */\n float (value: number): this {\n return this._push(writeFloatLE, 4, value)\n }\n\n /**\n * Writes a double (64 bit float).\n *\n * @function\n * @param {number} value - Value to write\n * @returns {Writer} `this`\n */\n double (value: number): this {\n return this._push(writeDoubleLE, 8, value)\n }\n\n /**\n * Writes a sequence of bytes\n */\n bytes (value: Uint8Array): this {\n const len = value.length >>> 0\n\n if (len === 0) {\n return this._push(writeByte, 1, 0)\n }\n\n return this.uint32(len)._push(writeBytes, len, value)\n }\n\n /**\n * Writes a string\n */\n string (value: string): this {\n const len = utf8.length(value)\n return len !== 0\n ? this.uint32(len)._push(utf8.write, len, value)\n : this._push(writeByte, 1, 0)\n }\n\n /**\n * Forks this writer's state by pushing it to a stack.\n * Calling {@link Writer#reset|reset} or {@link Writer#ldelim|ldelim} resets the writer to the previous state.\n */\n fork (): this {\n this.states = new State(this)\n this.head = this.tail = new Op(noop, 0, 0)\n this.len = 0\n return this\n }\n\n /**\n * Resets this instance to the last state\n */\n reset (): this {\n if (this.states != null) {\n this.head = this.states.head\n this.tail = this.states.tail\n this.len = this.states.len\n this.states = this.states.next\n } else {\n this.head = this.tail = new Op(noop, 0, 0)\n this.len = 0\n }\n return this\n }\n\n /**\n * Resets to the last state and appends the fork state's current write length as a varint followed by its operations.\n */\n ldelim (): this {\n const head = this.head\n const tail = this.tail\n const len = this.len\n this.reset().uint32(len)\n if (len !== 0) {\n this.tail.next = head.next // skip noop\n this.tail = tail\n this.len += len\n }\n return this\n }\n\n /**\n * Finishes the write operation\n */\n finish (): Uint8Array {\n let head = this.head.next // skip noop\n const buf = alloc(this.len)\n let pos = 0\n while (head != null) {\n head.fn(head.val, buf, pos)\n pos += head.len\n head = head.next\n }\n // this.head = this.tail = null;\n return buf\n }\n}\n\nfunction writeByte (val: number, buf: Uint8Array, pos: number): void {\n buf[pos] = val & 255\n}\n\nfunction writeVarint32 (val: number, buf: Uint8Array, pos: number): void {\n while (val > 127) {\n buf[pos++] = val & 127 | 128\n val >>>= 7\n }\n buf[pos] = val\n}\n\n/**\n * Constructs a new varint writer operation instance.\n *\n * @classdesc Scheduled varint writer operation\n */\nclass VarintOp extends Op<number> {\n public next?: Op<any>\n\n constructor (len: number, val: number) {\n super(writeVarint32, len, val)\n this.next = undefined\n }\n}\n\nfunction writeVarint64 (val: LongBits, buf: Uint8Array, pos: number): void {\n while (val.hi !== 0) {\n buf[pos++] = val.lo & 127 | 128\n val.lo = (val.lo >>> 7 | val.hi << 25) >>> 0\n val.hi >>>= 7\n }\n while (val.lo > 127) {\n buf[pos++] = val.lo & 127 | 128\n val.lo = val.lo >>> 7\n }\n buf[pos++] = val.lo\n}\n\nfunction writeFixed32 (val: number, buf: Uint8Array, pos: number): void {\n buf[pos] = val & 255\n buf[pos + 1] = val >>> 8 & 255\n buf[pos + 2] = val >>> 16 & 255\n buf[pos + 3] = val >>> 24\n}\n\nfunction writeBytes (val: Uint8Array, buf: Uint8Array, pos: number): void {\n buf.set(val, pos)\n}\n\nif (globalThis.Buffer != null) {\n Uint8ArrayWriter.prototype.bytes = function (value: Uint8Array) {\n const len = value.length >>> 0\n\n this.uint32(len)\n\n if (len > 0) {\n this._push(writeBytesBuffer, len, value)\n }\n\n return this\n }\n\n Uint8ArrayWriter.prototype.string = function (value: string) {\n const len = globalThis.Buffer.byteLength(value)\n\n this.uint32(len)\n\n if (len > 0) {\n this._push(writeStringBuffer, len, value)\n }\n\n return this\n }\n}\n\nfunction writeBytesBuffer (val: Uint8Array, buf: Uint8Array, pos: number): void {\n buf.set(val, pos) // faster than copy (requires node >= 4 where Buffers extend Uint8Array and set is properly inherited)\n // also works for plain array values\n}\n\nfunction writeStringBuffer (val: string, buf: Uint8Array, pos: number): void {\n if (val.length < 40) {\n // plain js is faster for short strings (probably due to redundant assertions)\n utf8.write(val, buf, pos)\n // @ts-expect-error buf isn't a Uint8Array?\n } else if (buf.utf8Write != null) {\n // @ts-expect-error buf isn't a Uint8Array?\n buf.utf8Write(val, pos)\n } else {\n buf.set(uint8ArrayFromString(val), pos)\n }\n}\n\n/**\n * Creates a new writer\n */\nexport function createWriter (): Writer {\n return new Uint8ArrayWriter()\n}\n", "import { createWriter } from './utils/writer.js'\nimport type { Codec } from './codec.js'\n\nexport function encodeMessage <T> (message: Partial<T>, codec: Pick<Codec<T>, 'encode'>): Uint8Array {\n const w = createWriter()\n\n codec.encode(message, w, {\n lengthDelimited: false\n })\n\n return w.finish()\n}\n", "import type { Writer, Reader } from './index.js'\n\n// https://developers.google.com/protocol-buffers/docs/encoding#structure\nexport enum CODEC_TYPES {\n VARINT = 0,\n BIT64,\n LENGTH_DELIMITED,\n START_GROUP,\n END_GROUP,\n BIT32\n}\n\nexport interface EncodeOptions {\n lengthDelimited?: boolean\n writeDefaults?: boolean\n}\n\nexport interface EncodeFunction<T> {\n (value: Partial<T>, writer: Writer, opts?: EncodeOptions): void\n}\n\n// protobuf types that contain multiple values\ntype CollectionTypes = any[] | Map<any, any>\n\n// protobuf types that are not collections or messages\ntype PrimitiveTypes = boolean | number | string | bigint | Uint8Array\n\n// recursive array/map field length limits\ntype CollectionLimits <T> = {\n [K in keyof T]: T[K] extends CollectionTypes ? number :\n T[K] extends PrimitiveTypes ? never : Limits<T[K]>\n}\n\n// recursive array member array/map field length limits\ntype ArrayElementLimits <T> = {\n [K in keyof T as `${string & K}$`]: T[K] extends Array<infer ElementType> ?\n (ElementType extends PrimitiveTypes ? never : Limits<ElementType>) :\n (T[K] extends PrimitiveTypes ? never : Limits<T[K]>)\n}\n\n// recursive map value array/map field length limits\ntype MapValueLimits <T> = {\n [K in keyof T as `${string & K}$value`]: T[K] extends Map<any, infer MapValueType> ?\n (MapValueType extends PrimitiveTypes ? never : Limits<MapValueType>) :\n (T[K] extends PrimitiveTypes ? never : Limits<T[K]>)\n}\n\n// union of collection and array elements\ntype Limits<T> = Partial<CollectionLimits<T> & ArrayElementLimits<T> & MapValueLimits<T>>\n\nexport interface DecodeOptions<T> {\n /**\n * Runtime-specified limits for lengths of repeated/map fields\n */\n limits?: Limits<T>\n}\n\nexport interface DecodeFunction<T> {\n (reader: Reader, length?: number, opts?: DecodeOptions<T>): 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 } from '../codec.js'\nimport type { EncodeFunction, DecodeFunction, Codec } from '../codec.js'\n\nexport interface Factory<A, T> {\n new (obj: A): T\n}\n\nexport function message <T> (encode: EncodeFunction<T>, decode: DecodeFunction<T>): Codec<T> {\n return createCodec('message', CODEC_TYPES.LENGTH_DELIMITED, encode, decode)\n}\n", "import { 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", "/**\n * @packageDocumentation\n *\n * This module contains the protobuf definition of the UnixFS data structure found at the root of all UnixFS DAGs.\n *\n * The UnixFS spec can be found in the [ipfs/specs repository](http://github.com/ipfs/specs)\n *\n * @example Create a file composed of several blocks\n *\n * ```TypeScript\n * import { UnixFS } from 'ipfs-unixfs'\n *\n * const data = new UnixFS({ type: 'file' })\n * data.addBlockSize(256n) // add the size of each block\n * data.addBlockSize(256n)\n * // ...\n * ```\n *\n * @example Create a directory that contains several files\n *\n * Creating a directory that contains several files is achieve by creating a unixfs element that identifies a MerkleDAG node as a directory. The links of that MerkleDAG node are the files that are contained in this directory.\n *\n * ```TypeScript\n * import { UnixFS } from 'ipfs-unixfs'\n *\n * const data = new UnixFS({ type: 'directory' })\n * ```\n *\n * @example Create an unixfs Data element\n *\n * ```TypeScript\n * import { UnixFS } from 'ipfs-unixfs'\n *\n * const data = new UnixFS({\n * // ...options\n * })\n * ```\n *\n * `options` is an optional object argument that might include the following keys:\n *\n * - type (string, default `file`): The type of UnixFS entry. Can be:\n * - `raw`\n * - `directory`\n * - `file`\n * - `metadata`\n * - `symlink`\n * - `hamt-sharded-directory`\n * - data (Uint8Array): The optional data field for this node\n * - blockSizes (Array, default: `[]`): If this is a `file` node that is made up of multiple blocks, `blockSizes` is a list numbers that represent the size of the file chunks stored in each child node. It is used to calculate the total file size.\n * - mode (Number, default `0644` for files, `0755` for directories/hamt-sharded-directories) file mode\n * - mtime (`Date`, `{ secs, nsecs }`, `{ Seconds, FractionalNanoseconds }`, `[ secs, nsecs ]`): The modification time of this node\n *\n * @example Add and remove a block size to the block size list\n *\n * ```TypeScript\n * import { UnixFS } from 'ipfs-unixfs'\n *\n * const data = new UnixFS({ type: 'file' })\n * const sizeInBytes = 100n\n * data.addBlockSize(sizeInBytes)\n * ```\n *\n * ```TypeScript\n * import { UnixFS } from 'ipfs-unixfs'\n *\n * const data = new UnixFS({ type: 'file' })\n *\n * const index = 0\n * data.removeBlockSize(index)\n * ```\n *\n * @example Get total fileSize\n *\n * ```TypeScript\n * import { UnixFS } from 'ipfs-unixfs'\n *\n * const data = new UnixFS({ type: 'file' })\n * data.fileSize() // => size in bytes\n * ```\n *\n * @example Marshal and unmarshal\n *\n * ```TypeScript\n * import { UnixFS } from 'ipfs-unixfs'\n *\n * const data = new UnixFS({ type: 'file' })\n * const marshaled = data.marshal()\n * const unmarshaled = UnixFS.unmarshal(marshaled)\n * ```\n *\n * @example Is this UnixFS entry a directory?\n *\n * ```TypeScript\n * import { UnixFS } from 'ipfs-unixfs'\n *\n * const dir = new UnixFS({ type: 'directory' })\n * dir.isDirectory() // true\n *\n * const file = new UnixFS({ type: 'file' })\n * file.isDirectory() // false\n * ```\n *\n * @example Has an mtime been set?\n *\n * If no modification time has been set, no `mtime` property will be present on the `Data` instance:\n *\n * ```TypeScript\n * import { UnixFS } from 'ipfs-unixfs'\n *\n * const file = new UnixFS({ type: 'file' })\n * file.mtime // undefined\n *\n * Object.prototype.hasOwnProperty.call(file, 'mtime') // false\n *\n * const dir = new UnixFS({ type: 'directory', mtime: { secs: 5n } })\n * dir.mtime // { secs: Number, nsecs: Number }\n * ```\n */\n\nimport { InvalidTypeError, InvalidUnixFSMessageError } from './errors.js'\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\nexport type UnixFSType = 'raw' | 'directory' | 'file' | 'metadata' | 'symlink' | 'hamt-sharded-directory'\n\nconst types: Record<string, UnixFSType> = {\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\n// https://github.com/ipfs/boxo/blob/364c5040ec91ec8e2a61446e9921e9225704c34d/ipld/unixfs/hamt/hamt.go#L778\nconst MAX_FANOUT = BigInt(1 << 10)\n\nexport interface UnixFSOptions {\n type?: UnixFSType\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 if (message.fanout != null && message.fanout > MAX_FANOUT) {\n throw new InvalidUnixFSMessageError(`Fanout size was too large - ${message.fanout} > ${MAX_FANOUT}`)\n }\n\n const data = new UnixFS({\n type: types[message.Type != null ? message.Type.toString() : 'File'],\n data: message.Data,\n blockSizes: message.blocksizes,\n mode: message.mode,\n mtime: message.mtime != null\n ? {\n secs: message.mtime.Seconds ?? 0n,\n nsecs: message.mtime.FractionalNanoseconds\n }\n : undefined,\n fanout: message.fanout\n })\n\n // make sure we honour the original mode\n data._originalMode = message.mode ?? 0\n\n return data\n }\n\n public type: string\n public data?: Uint8Array\n public blockSizes: bigint[]\n public hashType?: bigint\n public fanout?: bigint\n public mtime?: Mtime\n\n private _mode?: number\n private _originalMode: number\n\n constructor (options: UnixFSOptions = {\n type: 'file'\n }) {\n const {\n type,\n data,\n blockSizes,\n hashType,\n fanout,\n mtime,\n mode\n } = options\n\n if (type != null && !Object.values(types).includes(type)) {\n throw new InvalidTypeError('Type: ' + type + ' is not valid')\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 new InvalidTypeError(`Type: ${type} is not valid`)\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 }\nexport * from './errors.js'\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 public type: T\n public detail: D\n\n constructor (type: T, detail?: D) {\n super(type)\n\n this.type = type\n // @ts-expect-error detail may be undefined\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", "import * as dagPb from '@ipld/dag-pb'\nimport { CID } from 'multiformats/cid'\nimport { sha256 } from 'multiformats/hashes/sha2'\nimport type { WritableStorage } from '../index.js'\nimport type { Version as CIDVersion } from 'multiformats/cid'\nimport type { BlockCodec } from 'multiformats/codecs/interface'\nimport type { ProgressOptions } from 'progress-events'\n\nexport interface PersistOptions extends ProgressOptions {\n codec?: BlockCodec<any, any>\n cidVersion: CIDVersion\n signal?: AbortSignal\n}\n\nexport const persist = async (buffer: Uint8Array, blockstore: WritableStorage, options: PersistOptions): Promise<CID> => {\n if (options.codec == null) {\n options.codec = dagPb\n }\n\n const multihash = await sha256.digest(buffer)\n const cid = CID.create(options.cidVersion, options.codec.code, multihash)\n\n await blockstore.put(cid, buffer, options)\n\n return cid\n}\n", "import * as dagPb from '@ipld/dag-pb'\nimport { UnixFS } from 'ipfs-unixfs'\nimport * as raw from 'multiformats/codecs/raw'\nimport { CustomProgressEvent } from 'progress-events'\nimport { persist } from '../utils/persist.js'\nimport type { BufferImporter } from '../index.js'\nimport type { PersistOptions } from '../utils/persist.js'\nimport type { CID, Version } from 'multiformats/cid'\nimport type { ProgressOptions, ProgressEvent } from 'progress-events'\n\n/**\n * Passed to the onProgress callback while importing files\n */\nexport interface ImportWriteProgress {\n /**\n * How many bytes we have written for this source so far - this may be\n * bigger than the file size due to the DAG-PB wrappers of each block\n */\n bytesWritten: bigint\n\n /**\n * The CID of the block that has been written\n */\n cid: CID\n\n /**\n * The path of the file being imported, if one was specified\n */\n path?: string\n}\n\nexport type BufferImportProgressEvents =\n ProgressEvent<'unixfs:importer:progress:file:write', ImportWriteProgress>\n\nexport interface BufferImporterOptions extends ProgressOptions<BufferImportProgressEvents> {\n cidVersion: Version\n rawLeaves: boolean\n leafType: 'file' | 'raw'\n}\n\nexport function defaultBufferImporter (options: BufferImporterOptions): BufferImporter {\n return async function * bufferImporter (file, blockstore) {\n let bytesWritten = 0n\n\n for await (let block of file.content) {\n yield async () => { // eslint-disable-line no-loop-func\n let unixfs\n\n const opts: PersistOptions = {\n codec: dagPb,\n cidVersion: options.cidVersion,\n onProgress: options.onProgress\n }\n\n if (options.rawLeaves) {\n opts.codec = raw\n opts.cidVersion = 1\n } else {\n unixfs = new UnixFS({\n type: options.leafType,\n data: block\n })\n\n block = dagPb.encode({\n Data: unixfs.marshal(),\n Links: []\n })\n }\n\n const cid = await persist(block, blockstore, opts)\n\n bytesWritten += BigInt(block.byteLength)\n\n options.onProgress?.(new CustomProgressEvent<ImportWriteProgress>('unixfs:importer:progress:file:write', {\n bytesWritten,\n cid,\n path: file.path\n }))\n\n return {\n cid,\n unixfs,\n size: BigInt(block.length),\n block\n }\n }\n }\n }\n}\n", "export class InvalidParametersError extends Error {\n static name = 'InvalidParametersError'\n static code = 'ERR_INVALID_PARAMS'\n name = InvalidParametersError.name\n code = InvalidParametersError.code\n\n constructor (message = 'Invalid parameters') {\n super(message)\n }\n}\n\nexport class InvalidAvgChunkSizeError extends Error {\n static name = 'InvalidAvgChunkSizeError'\n static code = 'ERR_INVALID_AVG_CHUNK_SIZE'\n name = InvalidAvgChunkSizeError.name\n code = InvalidAvgChunkSizeError.code\n\n constructor (message = 'Invalid avg chunk size') {\n super(message)\n }\n}\n\nexport class InvalidChunkSizeError extends Error {\n static name = 'InvalidChunkSizeError'\n static code = 'ERR_INVALID_CHUNK_SIZE'\n name = InvalidChunkSizeError.name\n code = InvalidChunkSizeError.code\n\n constructor (message = 'Invalid chunk size') {\n super(message)\n }\n}\n\nexport class InvalidMinChunkSizeError extends Error {\n static name = 'InvalidMinChunkSizeError'\n static code = 'ERR_INVALID_MIN_CHUNK_SIZE'\n name = InvalidMinChunkSizeError.name\n code = InvalidMinChunkSizeError.code\n\n constructor (message = 'Invalid min chunk size') {\n super(message)\n }\n}\n\nexport class InvalidContentError extends Error {\n static name = 'InvalidContentError'\n static code = 'ERR_INVALID_CONTENT'\n name = InvalidContentError.name\n code = InvalidContentError.code\n\n constructor (message = 'Invalid content') {\n super(message)\n }\n}\n", "import { encode, prepare } from '@ipld/dag-pb'\nimport { UnixFS } from 'ipfs-unixfs'\nimport { persist } from '../utils/persist.js'\nimport type { Directory, InProgressImportResult, WritableStorage } from '../index.js'\nimport type { Version } from 'multiformats/cid'\n\nexport interface DirBuilderOptions {\n cidVersion: Version\n signal?: AbortSignal\n}\n\nexport interface DirBuilder {\n (dir: Directory, blockstore: WritableStorage, options: DirBuilderOptions): Promise<InProgressImportResult>\n}\n\nexport const defaultDirBuilder: DirBuilder = async (dir: Directory, blockstore: WritableStorage, options: DirBuilderOptions): Promise<InProgressImportResult> => {\n const unixfs = new UnixFS({\n type: 'directory',\n mtime: dir.mtime,\n mode: dir.mode\n })\n\n const block = encode(prepare({ Data: unixfs.marshal() }))\n const cid = await persist(block, blockstore, options)\n const path = dir.path\n\n return {\n cid,\n path,\n unixfs,\n size: BigInt(block.length),\n originalPath: dir.originalPath,\n block\n }\n}\n", "import { encode, prepare } from '@ipld/dag-pb'\nimport { UnixFS } from 'ipfs-unixfs'\nimport parallelBatch from 'it-parallel-batch'\nimport * as rawCodec from 'multiformats/codecs/raw'\nimport { CustomProgressEvent } from 'progress-events'\nimport { persist } from '../utils/persist.js'\nimport type { BufferImporter, File, InProgressImportResult, WritableStorage, SingleBlockImportResult, ImporterProgressEvents } from '../index.js'\nimport type { FileLayout, Reducer } from '../layout/index.js'\nimport type { PBLink, PBNode } from '@ipld/dag-pb'\nimport type { CID, Version } from 'multiformats/cid'\nimport type { ProgressOptions, ProgressEvent } from 'progress-events'\n\ninterface BuildFileBatchOptions {\n bufferImporter: BufferImporter\n blockWriteConcurrency: number\n}\n\nasync function * buildFileBatch (file: File, blockstore: WritableStorage, options: BuildFileBatchOptions): AsyncGenerator<InProgressImportResult> {\n let count = -1\n let previous: SingleBlockImportResult | undefined\n\n for await (const entry of parallelBatch(options.bufferImporter(file, blockstore), options.blockWriteConcurrency)) {\n count++\n\n if (count === 0) {\n // cache the first entry if case there aren't any more\n previous = {\n ...entry,\n single: true\n }\n\n continue\n } else if (count === 1 && previous != null) {\n // we have the second block of a multiple block import so yield the first\n yield {\n ...previous,\n block: undefined,\n single: undefined\n }\n previous = undefined\n }\n\n // yield the second or later block of a multiple block import\n yield {\n ...entry,\n block: undefined\n }\n }\n\n if (previous != null) {\n yield previous\n }\n}\n\nexport interface LayoutLeafProgress {\n /**\n * The CID of the leaf being written\n */\n cid: CID\n\n /**\n * The path of the file being imported, if one was specified\n */\n path?: string\n}\n\nexport type ReducerProgressEvents =\n ProgressEvent<'unixfs:importer:progress:file:layout', LayoutLeafProgress>\n\ninterface ReduceOptions extends ProgressOptions<ImporterProgressEvents> {\n reduceSingleLeafToSelf: boolean\n cidVersion: Version\n signal?: AbortSignal\n}\n\nfunction isSingleBlockImport (result: any): result is SingleBlockImportResult {\n return result.single === true\n}\n\nconst reduce = (file: File, blockstore: WritableStorage, options: ReduceOptions): Reducer => {\n const reducer: Reducer = async function (leaves) {\n if (leaves.length === 1 && isSingleBlockImport(leaves[0]) && options.reduceSingleLeafToSelf) {\n const leaf = leaves[0]\n let node: Uint8Array | PBNode = leaf.block\n\n if (isSingleBlockImport(leaf) && (file.mtime !== undefined || file.mode !== undefined)) {\n // only one leaf node which is a raw leaf - we have metadata so convert it into a\n // UnixFS entry otherwise we'll have nowhere to store the metadata\n leaf.unixfs = new UnixFS({\n type: 'file',\n mtime: file.mtime,\n mode: file.mode,\n data: leaf.block\n })\n\n node = { Data: leaf.unixfs.marshal(), Links: [] }\n\n leaf.block = encode(prepare(node))\n\n leaf.cid = await persist(leaf.block, blockstore, {\n ...options,\n cidVersion: options.cidVersion\n })\n leaf.size = BigInt(leaf.block.length)\n }\n\n options.onProgress?.(new CustomProgressEvent<LayoutLeafProgress>('unixfs:importer:progress:file:layout', {\n cid: leaf.cid,\n path: leaf.originalPath\n }))\n\n return {\n cid: leaf.cid,\n path: file.path,\n unixfs: leaf.unixfs,\n size: leaf.size,\n originalPath: leaf.originalPath\n }\n }\n\n // create a parent node and add all the leaves\n const f = new UnixFS({\n type: 'file',\n mtime: file.mtime,\n mode: file.mode\n })\n\n const links: PBLink[] = leaves\n .filter(leaf => {\n if (leaf.cid.code === rawCodec.code && leaf.size > 0) {\n return true\n }\n\n if (leaf.unixfs != null && leaf.unixfs.data == null && leaf.unixfs.fileSize() > 0n) {\n return true\n }\n\n return Boolean(leaf.unixfs?.data?.length)\n })\n .map((leaf) => {\n if (leaf.cid.code === rawCodec.code) {\n // node is a leaf buffer\n f.addBlockSize(leaf.size)\n\n return {\n Name: '',\n Tsize: Number(leaf.size),\n Hash: leaf.cid\n }\n }\n\n if ((leaf.unixfs?.data == null)) {\n // node is an intermediate node\n f.addBlockSize(leaf.unixfs?.fileSize() ?? 0n)\n } else {\n // node is a unixfs 'file' leaf node\n f.addBlockSize(BigInt(leaf.unixfs.data.length))\n }\n\n return {\n Name: '',\n Tsize: Number(leaf.size),\n Hash: leaf.cid\n }\n })\n\n const node = {\n Data: f.marshal(),\n Links: links\n }\n const block = encode(prepare(node))\n const cid = await persist(block, blockstore, options)\n\n options.onProgress?.(new CustomProgressEvent<LayoutLeafProgress>('unixfs:importer:progress:file:layout', {\n cid,\n path: file.originalPath\n }))\n\n return {\n cid,\n path: file.path,\n unixfs: f,\n size: BigInt(block.length + node.Links.reduce((acc, curr) => acc + (curr.Tsize ?? 0), 0)),\n originalPath: file.originalPath,\n block\n }\n }\n\n return reducer\n}\n\nexport interface FileBuilder {\n (file: File, blockstore: WritableStorage, options: FileBuilderOptions): Promise<InProgressImportResult>\n}\n\nexport interface FileBuilderOptions extends BuildFileBatchOptions, ReduceOptions {\n layout: FileLayout\n}\n\nexport const defaultFileBuilder: FileBuilder = async (file: File, block: WritableStorage, options: FileBuilderOptions): Promise<InProgressImportResult> => {\n return options.layout(\n buildFileBatch(file, block, options),\n reduce(file, block, options)\n )\n}\n", "import { CustomProgressEvent } from 'progress-events'\nimport { InvalidContentError } from '../errors.js'\nimport { defaultDirBuilder } from './dir.js'\nimport { defaultFileBuilder } from './file.js'\nimport type { DirBuilder, DirBuilderOptions } from './dir.js'\nimport type { FileBuilder, FileBuilderOptions } from './file.js'\nimport type { ChunkValidator } from './validate-chunks.js'\nimport type { Chunker } from '../chunker/index.js'\nimport type { Directory, File, FileCandidate, ImportCandidate, ImporterProgressEvents, InProgressImportResult, WritableStorage } from '../index.js'\nimport type { ProgressEvent, ProgressOptions } from 'progress-events'\n\n/**\n * Passed to the onProgress callback while importing files\n */\nexport interface ImportReadProgress {\n /**\n * How many bytes we have read from this source so far\n */\n bytesRead: bigint\n\n /**\n * The size of the current chunk\n */\n chunkSize: bigint\n\n /**\n * The path of the file being imported, if one was specified\n */\n path?: string\n}\n\nexport type DagBuilderProgressEvents =\n ProgressEvent<'unixfs:importer:progress:file:read', ImportReadProgress>\n\nfunction isIterable (thing: any): thing is Iterable<any> {\n return Symbol.iterator in thing\n}\n\nfunction isAsyncIterable (thing: any): thing is AsyncIterable<any> {\n return Symbol.asyncIterator in thing\n}\n\nfunction contentAsAsyncIterable (content: Uint8Array | AsyncIterable<Uint8Array> | Iterable<Uint8Array>): AsyncIterable<Uint8Array> {\n try {\n if (content instanceof Uint8Array) {\n return (async function * () {\n yield content\n })()\n } else if (isIterable(content)) {\n return (async function * () {\n yield * content\n })()\n } else if (isAsyncIterable(content)) {\n return content\n }\n } catch {\n throw new InvalidContentError('Content was invalid')\n }\n\n throw new InvalidContentError('Content was invalid')\n}\n\nexport interface DagBuilderOptions extends FileBuilderOptions, DirBuilderOptions, ProgressOptions<ImporterProgressEvents> {\n chunker: Chunker\n chunkValidator: ChunkValidator\n wrapWithDirectory: boolean\n dirBuilder?: DirBuilder\n fileBuilder?: FileBuilder\n}\n\nexport type ImporterSourceStream = AsyncIterable<ImportCandidate> | Iterable<ImportCandidate>\n\nexport interface DAGBuilder {\n (source: ImporterSourceStream, blockstore: WritableStorage): AsyncIterable<() => Promise<InProgressImportResult>>\n}\n\nexport function defaultDagBuilder (options: DagBuilderOptions): DAGBuilder {\n return async function * dagBuilder (source, blockstore) {\n for await (const entry of source) {\n let originalPath: string | undefined\n\n if (entry.path != null) {\n originalPath = entry.path\n entry.path = entry.path\n .split('/')\n .filter(path => path != null && path !== '.')\n .join('/')\n }\n\n if (isFileCandidate(entry)) {\n const file: File = {\n path: entry.path,\n mtime: entry.mtime,\n mode: entry.mode,\n content: (async function * () {\n let bytesRead = 0n\n\n for await (const chunk of options.chunker(options.chunkValidator(contentAsAsyncIterable(entry.content)))) {\n const currentChunkSize = BigInt(chunk.byteLength)\n bytesRead += currentChunkSize\n\n options.onProgress?.(new CustomProgressEvent<ImportReadProgress>('unixfs:importer:progress:file:read', {\n bytesRead,\n chunkSize: currentChunkSize,\n path: entry.path\n }))\n\n yield chunk\n }\n })(),\n originalPath\n }\n\n const fileBuilder = options.fileBuilder ?? defaultFileBuilder\n\n yield async () => fileBuilder(file, blockstore, options)\n } else if (entry.path != null) {\n const dir: Directory = {\n path: entry.path,\n mtime: entry.mtime,\n mode: entry.mode,\n originalPath\n }\n\n const dirBuilder = options.dirBuilder ?? defaultDirBuilder\n\n yield async () => dirBuilder(dir, blockstore, options)\n } else {\n throw new Error('Import candidate must have content or path or both')\n }\n }\n }\n}\n\nfunction isFileCandidate (entry: any): entry is FileCandidate {\n return entry.content != null\n}\n", "import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'\nimport { InvalidContentError } from '../errors.js'\n\nexport interface ChunkValidator { (source: AsyncIterable<Uint8Array>): AsyncIterable<Uint8Array> }\n\nexport const defaultChunkValidator = (): ChunkValidator => {\n return async function * validateChunks (source) {\n for await (const content of source) {\n if (content.length === undefined) {\n throw new InvalidContentError('Content was invalid')\n }\n\n if (typeof content === 'string' || content instanceof String) {\n yield uint8ArrayFromString(content.toString())\n } else if (Array.isArray(content)) {\n yield Uint8Array.from(content)\n } else if (content instanceof Uint8Array) {\n yield content\n } else {\n throw new InvalidContentError('Content was invalid')\n }\n }\n }\n}\n", "import batch from 'it-batch'\nimport type { FileLayout } from './index.js'\nimport type { InProgressImportResult } from '../index.js'\n\nconst DEFAULT_MAX_CHILDREN_PER_NODE = 174\n\nexport interface BalancedOptions {\n maxChildrenPerNode?: number\n}\n\nexport function balanced (options?: BalancedOptions): FileLayout {\n const maxChildrenPerNode = options?.maxChildrenPerNode ?? DEFAULT_MAX_CHILDREN_PER_NODE\n\n return async function balancedLayout (source, reduce): Promise<InProgressImportResult> {\n const roots = []\n\n for await (const chunked of batch(source, maxChildrenPerNode)) {\n roots.push(await reduce(chunked))\n }\n\n if (roots.length > 1) {\n return balancedLayout(roots, reduce)\n }\n\n return roots[0]\n }\n}\n", "import { CID } from 'multiformats/cid'\nimport type { WritableStorage, ImportResult, InProgressImportResult } from './index.js'\nimport type { PersistOptions } from './utils/persist.js'\nimport type { Mtime, UnixFS } from 'ipfs-unixfs'\n\nexport interface DirProps {\n root: boolean\n dir: boolean\n path: string\n dirty: boolean\n flat: boolean\n parent?: Dir\n parentKey?: string\n unixfs?: UnixFS\n mode?: number\n mtime?: Mtime\n}\n\nexport abstract class Dir {\n public options: PersistOptions\n public root: boolean\n public dir: boolean\n public path: string\n public dirty: boolean\n public flat: boolean\n public parent?: Dir\n public parentKey?: string\n public unixfs?: UnixFS\n public mode?: number\n public mtime?: Mtime\n public cid?: CID\n public size?: number\n public nodeSize?: number\n\n constructor (props: DirProps, options: PersistOptions) {\n this.options = options ?? {}\n\n this.root = props.root\n this.dir = props.dir\n this.path = props.path\n this.dirty = props.dirty\n this.flat = props.flat\n this.parent = props.parent\n this.parentKey = props.parentKey\n this.unixfs = props.unixfs\n this.mode = props.mode\n this.mtime = props.mtime\n }\n\n abstract put (name: string, value: InProgressImportResult | Dir): Promise<void>\n abstract get (name: string): Promise<InProgressImportResult | Dir | undefined>\n abstract eachChildSeries (): Iterable<{ key: string, child: InProgressImportResult | Dir }>\n abstract flush (blockstore: WritableStorage): AsyncGenerator<ImportResult>\n abstract estimateNodeSize (): number\n abstract childCount (): number\n}\n\n// we use these to calculate the node size to use as a check for whether a directory\n// should be sharded or not. Since CIDs have a constant length and We're only\n// interested in the data length and not the actual content identifier we can use\n// any old CID instead of having to hash the data which is expensive.\nexport const CID_V0 = CID.parse('QmUNLLsPACCz1vLxQVkXqqLX5R1X345qqfHbsf67hvA3Nn')\nexport const CID_V1 = CID.parse('zdj7WbTaiJT1fgatdet9Ei9iDB5hdCxkbVyhyh8YTUnXMiwYi')\n", "import { encode, prepare } from '@ipld/dag-pb'\nimport { UnixFS } from 'ipfs-unixfs'\nimport { Dir, CID_V0, CID_V1 } from './dir.js'\nimport { persist } from './utils/persist.js'\nimport type { DirProps } from './dir.js'\nimport type { ImportResult, InProgressImportResult } from './index.js'\nimport type { PersistOptions } from './utils/persist.js'\nimport type { PBNode } from '@ipld/dag-pb'\nimport type { Blockstore } from 'interface-blockstore'\nimport type { CID } from 'multiformats/cid'\n\nexport class DirFlat extends Dir {\n private readonly _children: Map<string, InProgressImportResult | Dir>\n\n constructor (props: DirProps, options: PersistOptions) {\n super(props, options)\n\n this._children = new Map()\n }\n\n async put (name: string, value: InProgressImportResult | Dir): Promise<void> {\n this.cid = undefined\n this.size = undefined\n this.nodeSize = undefined\n\n this._children.set(name, value)\n }\n\n async get (name: string): Promise<InProgressImportResult | Dir | undefined> {\n return Promise.resolve(this._children.get(name))\n }\n\n childCount (): number {\n return this._children.size\n }\n\n directChildrenCount (): number {\n return this.childCount()\n }\n\n onlyChild (): InProgressImportResult | Dir | undefined {\n return this._children.values().next().value\n }\n\n * eachChildSeries (): Generator<{ key: string, child: InProgressImportResult | Dir }, void, undefined> {\n for (const [key, child] of this._children.entries()) {\n yield {\n key,\n child\n }\n }\n }\n\n estimateNodeSize (): number {\n if (this.nodeSize !== undefined) {\n return this.nodeSize\n }\n\n this.nodeSize = 0\n\n // estimate size only based on DAGLink name and CID byte lengths\n // https://github.com/ipfs/go-unixfsnode/blob/37b47f1f917f1b2f54c207682f38886e49896ef9/data/builder/directory.go#L81-L96\n for (const [name, child] of this._children.entries()) {\n if (child.size != null && (child.cid != null)) {\n this.nodeSize += name.length + (this.options.cidVersion === 1 ? CID_V1.bytes.byteLength : CID_V0.bytes.byteLength)\n }\n }\n\n return this.nodeSize\n }\n\n async * flush (block: Blockstore): AsyncGenerator<ImportResult> {\n const links = []\n\n for (const [name, child] of this._children.entries()) {\n let result: { size?: bigint | number, cid?: CID } = child\n\n if (child instanceof Dir) {\n for await (const entry of child.flush(block)) {\n result = entry\n\n yield entry\n }\n }\n\n if (result.size != null && (result.cid != null)) {\n links.push({\n Name: name,\n Tsize: Number(result.size),\n Hash: result.cid\n })\n }\n }\n\n const unixfs = new UnixFS({\n type: 'directory',\n mtime: this.mtime,\n mode: this.mode\n })\n\n const node: PBNode = { Data: unixfs.marshal(), Links: links }\n const buffer = encode(prepare(node))\n const cid = await persist(buffer, block, this.options)\n const size = buffer.length + node.Links.reduce(\n /**\n * @param {number} acc\n * @param {PBLink} curr\n */\n (acc, curr) => acc + (curr.Tsize ?? 0),\n 0)\n\n this.cid = cid\n this.size = size\n\n yield {\n cid,\n unixfs,\n path: this.path,\n size: BigInt(size)\n }\n }\n}\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", "// @ts-expect-error no types\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): Promise<void> {\n const place = await this._findNewBucketAndPos(key)\n\n place.bucket._putAt(place, key, value)\n }\n\n async get (key: string): Promise<T | undefined> {\n const child = await this._findChild(key)\n\n if (child != null) {\n return child.value\n }\n }\n\n async del (key: string): Promise<void> {\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 (): number {\n return this._children.length\n }\n\n onlyChild (): Bucket<T> | BucketChild<T> {\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 <M> (map: (value: BucketChild<T>, index: number) => M, reduce: (reduced: Bucket<T> | BucketChild<T>) => M): M {\n const acc: M[] = []\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 <R = T> (asyncMap: (value: BucketChild<T>) => Promise<T[]>, asyncReduce: (reduced: any) => Promise<R>): Promise<R> {\n return asyncTransformBucket(this, asyncMap, asyncReduce)\n }\n\n toJSON (): Record<string, any> {\n return this.serialize(mapNode, reduceNodes)\n }\n\n prettyPrint (): string {\n return JSON.stringify(this.toJSON(), null, ' ')\n }\n\n tableSize (): number {\n return Math.pow(2, this._options.bits)\n }\n\n async _findChild (key: string): Promise<BucketChild<T> | undefined> {\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 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 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): void {\n this._putObjectAt(place.pos, {\n key,\n value,\n hash: place.hash\n })\n }\n\n _putObjectAt (pos: number, object: Bucket<T> | BucketChild<T>): void {\n if (this._children.get(pos) == null) {\n this._popCount++\n }\n this._children.set(pos, object)\n }\n\n _delAt (pos: number): void {\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 (): void {\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,\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): Bucket<T> | BucketChild<T> {\n return this._children.get(index)\n }\n}\n\nfunction exists (o: any): boolean {\n return Boolean(o)\n}\n\nfunction mapNode (node: { key: string }, _: number): string {\n return node.key\n}\n\nfunction reduceNodes <T> (nodes: T): any {\n return nodes\n}\n\nasync function asyncTransformBucket <T, R = T> (bucket: Bucket<T>, asyncMap: (value: BucketChild<T>) => Promise<T[]>, asyncReduce: (reduced: any) => Promise<R>): Promise<R> {\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 asyncReduce(output)\n}\n", "const START_MASKS = [\n 0b11111111,\n 0b11111110,\n 0b11111100,\n 0b11111000,\n 0b11110000,\n 0b11100000,\n 0b11000000,\n 0b10000000\n]\n\nconst STOP_MASKS = [\n 0b00000001,\n 0b00000011,\n 0b00000111,\n 0b00001111,\n 0b00011111,\n 0b00111111,\n 0b01111111,\n 0b11111111\n]\n\nexport class ConsumableBuffer {\n _value: Uint8Array\n _currentBytePos: number\n _currentBitPos: number\n\n constructor (value: Uint8Array) {\n this._value = value\n this._currentBytePos = value.length - 1\n this._currentBitPos = 7\n }\n\n availableBits (): number {\n return this._currentBitPos + 1 + this._currentBytePos * 8\n }\n\n totalBits (): number {\n return this._value.length * 8\n }\n\n take (bits: number): 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): void {\n this._currentBitPos += bits\n while (this._currentBitPos > 7) {\n this._currentBitPos -= 8\n this._currentBytePos += 1\n }\n }\n\n _haveBits (): boolean {\n return this._currentBytePos >= 0\n }\n}\n\nfunction byteBitsToInt (byte: number, start: number, length: number): number {\n const mask = maskFor(start, length)\n return (byte & mask) >>> start\n}\n\nfunction maskFor (start: number, length: number): number {\n return START_MASKS[start] & STOP_MASKS[Math.min(length + start - 1, 7)]\n}\n", "import { concat as uint8ArrayConcat } from 'uint8arrays/concat'\nimport { ConsumableBuffer } from './consumable-buffer.js'\n\nexport function wrapHash (hashFn: (value: Uint8Array) => Promise<Uint8Array>): (value: InfiniteHash | Uint8Array) => InfiniteHash {\n function hashing (value: InfiniteHash | Uint8Array): InfiniteHash {\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): Promise<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): void {\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 (): Promise<void> {\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", "/**\n * @packageDocumentation\n *\n * A [Hash Mapped Trie](https://en.wikipedia.org/wiki/Hash_array_mapped_trie) implementation for JavaScript.\n *\n * This is used by [@helia/unixfs](https://www.npmjs.com/package/@helia/unixfs) for it's HAMT-sharded directory implementation.\n *\n * @example\n *\n * ```TypeScript\n * import { createHAMT } from 'hamt-sharding'\n * import crypto from 'crypto-promise'\n *\n * // decide how to hash buffers made from keys, can return a Promise\n * const hashFn = async (buf) => {\n * return crypto\n * .createHash('sha256')\n * .update(buf)\n * .digest()\n * }\n *\n * const bucket = createHAMT({\n * hashFn: hashFn\n * })\n *\n * await bucket.put('key', 'value')\n *\n * const output = await bucket.get('key')\n * // output === 'value'\n * ```\n */\n\nimport { Bucket } from './bucket.js'\nimport { wrapHash } from './consumable-hash.js'\nimport type { BucketOptions, BucketPosition, BucketChild } from './bucket.js'\n\ninterface UserBucketOptions {\n hashFn(value: Uint8Array): Promise<Uint8Array>\n bits?: number\n}\n\nexport function createHAMT<T> (options: UserBucketOptions): Bucket<T> {\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 { encode, prepare } from '@ipld/dag-pb'\nimport { murmur3128 } from '@multiformats/murmur3'\nimport { createHAMT, Bucket } from 'hamt-sharding'\nimport { UnixFS } from 'ipfs-unixfs'\nimport { Dir, CID_V0, CID_V1 } from './dir.js'\nimport { persist } from './utils/persist.js'\nimport type { DirProps } from './dir.js'\nimport type { ImportResult, InProgressImportResult } from './index.js'\nimport type { PersistOptions } from './utils/persist.js'\nimport type { PBLink } from '@ipld/dag-pb'\nimport type { BucketChild } from 'hamt-sharding'\nimport type { Blockstore } from 'interface-blockstore'\n\nasync function hamtHashFn (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 HAMT_HASH_CODE = BigInt(0x22)\nconst DEFAULT_FANOUT_BITS = 8\n\nexport interface DirShardedOptions extends PersistOptions {\n shardFanoutBits: number\n}\n\nclass DirSharded extends Dir {\n private readonly _bucket: Bucket<InProgressImportResult | Dir>\n\n constructor (props: DirProps, options: DirShardedOptions) {\n super(props, options)\n\n this._bucket = createHAMT({\n hashFn: hamtHashFn,\n bits: options.shardFanoutBits ?? DEFAULT_FANOUT_BITS\n })\n }\n\n async put (name: string, value: InProgressImportResult | Dir): Promise<void> {\n this.cid = undefined\n this.size = undefined\n this.nodeSize = undefined\n\n await this._bucket.put(name, value)\n }\n\n async get (name: string): Promise<InProgressImportResult | Dir | undefined> {\n return this._bucket.get(name)\n }\n\n childCount (): number {\n return this._bucket.leafCount()\n }\n\n directChildrenCount (): number {\n return this._bucket.childrenCount()\n }\n\n onlyChild (): Bucket<InProgressImportResult | Dir> | BucketChild<InProgressImportResult | Dir> {\n return this._bucket.onlyChild()\n }\n\n * eachChildSeries (): Generator<{ key: string, child: InProgressImportResult | Dir }> {\n for (const { key, value } of this._bucket.eachLeafSeries()) {\n yield {\n key,\n child: value\n }\n }\n }\n\n estimateNodeSize (): number {\n if (this.nodeSize !== undefined) {\n return this.nodeSize\n }\n\n this.nodeSize = calculateSize(this._bucket, this, this.options)\n\n return this.nodeSize\n }\n\n async * flush (blockstore: Blockstore): AsyncGenerator<ImportResult> {\n for await (const entry of flush(this._bucket, blockstore, this, this.options)) {\n yield {\n ...entry,\n path: this.path\n }\n }\n }\n}\n\nexport default DirSharded\n\nasync function * flush (bucket: Bucket<Dir | InProgressImportResult>, blockstore: Blockstore, shardRoot: DirSharded | null, options: PersistOptions): AsyncIterable<ImportResult> {\n const children = bucket._children\n const padLength = (bucket.tableSize() - 1).toString(16).length\n const links: PBLink[] = []\n let childrenSize = 0n\n\n for (let i = 0; i < children.length; i++) {\n const child = children.get(i)\n\n if (child == null) {\n continue\n }\n\n const labelPrefix = i.toString(16).toUpperCase().padStart(padLength, '0')\n\n if (child instanceof Bucket) {\n let shard\n\n for await (const subShard of flush(child, blockstore, null, options)) {\n shard = subShard\n }\n\n if (shard == null) {\n throw new Error('Could not flush sharded directory, no subshard found')\n }\n\n links.push({\n Name: labelPrefix,\n Tsize: Number(shard.size),\n Hash: shard.cid\n })\n childrenSize += shard.size\n } else if (isDir(child.value)) {\n const dir = child.value\n let flushedDir: ImportResult | undefined\n\n for await (const entry of dir.flush(blockstore)) {\n flushedDir = entry\n\n yield flushedDir\n }\n\n if (flushedDir == null) {\n throw new Error('Did not flush dir')\n }\n\n const label = labelPrefix + child.key\n links.push({\n Name: label,\n Tsize: Number(flushedDir.size),\n Hash: flushedDir.cid\n })\n\n childrenSize += flushedDir.size\n } else {\n const value = child.value\n\n if (value.cid == null) {\n continue\n }\n\n const label = labelPrefix + child.key\n const size = value.size\n\n links.push({\n Name: label,\n Tsize: Number(size),\n Hash: value.cid\n })\n childrenSize += BigInt(size ?? 0)\n }\n }\n\n // go-ipfs uses little endian, that's why we have to\n // reverse the bit field before storing it\n const data = Uint8Array.from(children.bitField().reverse())\n const dir = new UnixFS({\n type: 'hamt-sharded-directory',\n data,\n fanout: BigInt(bucket.tableSize()),\n hashType: HAMT_HASH_CODE,\n mtime: shardRoot?.mtime,\n mode: shardRoot?.mode\n })\n\n const node = {\n Data: dir.marshal(),\n Links: links\n }\n const buffer = encode(prepare(node))\n const cid = await persist(buffer, blockstore, options)\n const size = BigInt(buffer.byteLength) + childrenSize\n\n yield {\n cid,\n unixfs: dir,\n size\n }\n}\n\nfunction isDir (obj: any): obj is Dir {\n return typeof obj.flush === 'function'\n}\n\nfunction calculateSize (bucket: Bucket<any>, shardRoot: DirSharded | null, options: PersistOptions): number {\n const children = bucket._children\n const padLength = (bucket.tableSize() - 1).toString(16).length\n const links: PBLink[] = []\n\n for (let i = 0; i < children.length; i++) {\n const child = children.get(i)\n\n if (child == null) {\n continue\n }\n\n const labelPrefix = i.toString(16).toUpperCase().padStart(padLength, '0')\n\n if (child instanceof Bucket) {\n const size = calculateSize(child, null, options)\n\n links.push({\n Name: labelPrefix,\n Tsize: Number(size),\n Hash: options.cidVersion === 0 ? CID_V0 : CID_V1\n })\n } else if (typeof child.value.flush === 'function') {\n const dir = child.value\n const size = dir.nodeSize()\n\n links.push({\n Name: labelPrefix + child.key,\n Tsize: Number(size),\n Hash: options.cidVersion === 0 ? CID_V0 : CID_V1\n })\n } else {\n const value = child.value\n\n if (value.cid == null) {\n continue\n }\n\n const label = labelPrefix + child.key\n const size = value.size\n\n links.push({\n Name: label,\n Tsize: Number(size),\n Hash: value.cid\n })\n }\n }\n\n // go-ipfs uses little endian, that's why we have to\n // reverse the bit field before storing it\n const data = Uint8Array.from(children.bitField().reverse())\n const dir = new UnixFS({\n type: 'hamt-sharded-directory',\n data,\n fanout: BigInt(bucket.tableSize()),\n hashType: HAMT_HASH_CODE,\n mtime: shardRoot?.mtime,\n mode: shardRoot?.mode\n })\n\n const buffer = encode(prepare({\n Data: dir.marshal(),\n Links: links\n }))\n\n return buffer.length\n}\n", "import { DirFlat } from './dir-flat.js'\nimport DirSharded from './dir-sharded.js'\nimport type { DirShardedOptions } from './dir-sharded.js'\nimport type { Dir } from './dir.js'\n\nexport async function flatToShard (child: Dir | null, dir: Dir, threshold: number, options: DirShardedOptions): Promise<DirSharded> {\n let newDir = dir as DirSharded\n\n if (dir instanceof DirFlat && dir.estimateNodeSize() > threshold) {\n newDir = await convertToShard(dir, options)\n }\n\n const parent = newDir.parent\n\n if (parent != null) {\n if (newDir !== dir) {\n if (child != null) {\n child.parent = newDir\n }\n\n if (newDir.parentKey == null) {\n throw new Error('No parent key found')\n }\n\n await parent.put(newDir.parentKey, newDir)\n }\n\n return flatToShard(newDir, parent, threshold, options)\n }\n\n return newDir\n}\n\nasync function convertToShard (oldDir: DirFlat, options: DirShardedOptions): Promise<DirSharded> {\n const newDir = new DirSharded({\n root: oldDir.root,\n dir: true,\n parent: oldDir.parent,\n parentKey: oldDir.parentKey,\n path: oldDir.path,\n dirty: oldDir.dirty,\n flat: false,\n mtime: oldDir.mtime,\n mode: oldDir.mode\n }, options)\n\n for (const { key, child } of oldDir.eachChildSeries()) {\n await newDir.put(key, child)\n }\n\n return newDir\n}\n", "export const toPathComponents = (path: string = ''): string[] => {\n // split on / unless escaped with \\\n return path.split(/(?<!\\\\)\\//).filter(Boolean)\n}\n", "import { DirFlat } from './dir-flat.js'\nimport { Dir } from './dir.js'\nimport { flatToShard } from './flat-to-shard.js'\nimport { toPathComponents } from './utils/to-path-components.js'\nimport type { ImportResult, InProgressImportResult, TreeBuilder, WritableStorage } from './index.js'\nimport type { PersistOptions } from './utils/persist.js'\n\nexport interface AddToTreeOptions extends PersistOptions {\n shardSplitThresholdBytes: number\n shardFanoutBits: number\n}\n\nasync function addToTree (elem: InProgressImportResult, tree: Dir, options: AddToTreeOptions): Promise<Dir> {\n const pathElems = toPathComponents(elem.path ?? '')\n const lastIndex = pathElems.length - 1\n let parent = tree\n let currentPath = ''\n\n for (let i = 0; i < pathElems.length; i++) {\n const pathElem = pathElems[i]\n\n currentPath += `${currentPath !== '' ? '/' : ''}${pathElem}`\n\n const last = (i === lastIndex)\n parent.dirty = true\n parent.cid = undefined\n parent.size = undefined\n\n if (last) {\n await parent.put(pathElem, elem)\n tree = await flatToShard(null, parent, options.shardSplitThresholdBytes, options)\n } else {\n let dir = await parent.get(pathElem)\n\n if ((dir == null) || !(dir instanceof Dir)) {\n dir = new DirFlat({\n root: false,\n dir: true,\n parent,\n parentKey: pathElem,\n path: currentPath,\n dirty: true,\n flat: true,\n mtime: dir?.unixfs?.mtime,\n mode: dir?.unixfs?.mode\n }, options)\n }\n\n await parent.put(pathElem, dir)\n\n parent = dir\n }\n }\n\n return tree\n}\n\nasync function * flushAndYield (tree: Dir | InProgressImportResult, blockstore: WritableStorage): AsyncGenerator<ImportResult> {\n if (!(tree instanceof Dir)) {\n if (tree.unixfs?.isDirectory() === true) {\n yield tree\n }\n\n return\n }\n\n yield * tree.flush(blockstore)\n}\n\nexport interface TreeBuilderOptions extends AddToTreeOptions {\n wrapWithDirectory: boolean\n}\n\nexport function defaultTreeBuilder (options: TreeBuilderOptions): TreeBuilder {\n return async function * treeBuilder (source, block) {\n let tree: Dir = new DirFlat({\n root: true,\n dir: true,\n path: '',\n dirty: true,\n flat: true\n }, options)\n\n let rootDir: string | undefined\n let singleRoot = false\n\n for await (const entry of source) {\n if (entry == null) {\n continue\n }\n\n // if all paths are from the same root directory, we should\n // wrap them all in that root directory\n const dir = `${entry.originalPath ?? ''}`.split('/')[0]\n\n if (dir != null && dir !== '') {\n if (rootDir == null) {\n rootDir = dir\n singleRoot = true\n } else if (rootDir !== dir) {\n singleRoot = false\n }\n }\n\n tree = await addToTree(entry, tree, options)\n\n if (entry.unixfs?.isDirectory() !== true) {\n yield entry\n }\n }\n\n if (options.wrapWithDirectory || (singleRoot && tree.childCount() > 1)) {\n yield * flushAndYield(tree, block)\n } else {\n for (const unwrapped of tree.eachChildSeries()) {\n if (unwrapped == null) {\n continue\n }\n\n yield * flushAndYield(unwrapped.child, block)\n }\n }\n }\n}\n"],
|
|
5
|
-
"mappings": "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F,CAAC,CACtB,CAGA,IAAME,GAAU,CACd,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EA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",
|
|
4
|
+
"sourcesContent": ["/* 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// JS treats subjects of bitwise operators as SIGNED 32 bit numbers,\n// which means the maximum amount of bits we can store inside each byte\n// is 7..\nconst BITS_PER_BYTE = 7\n\nmodule.exports = class SparseArray {\n constructor () {\n this._bitArrays = []\n this._data = []\n this._length = 0\n this._changedLength = false\n this._changedData = false\n }\n\n set (index, value) {\n let pos = this._internalPositionFor(index, false)\n if (value === undefined) {\n // unsetting\n if (pos !== -1) {\n // remove item from bit array and array itself\n this._unsetInternalPos(pos)\n this._unsetBit(index)\n this._changedLength = true\n this._changedData = true\n }\n } else {\n let needsSort = false\n if (pos === -1) {\n pos = this._data.length\n this._setBit(index)\n this._changedData = true\n } else {\n needsSort = true\n }\n this._setInternalPos(pos, index, value, needsSort)\n this._changedLength = true\n }\n }\n\n unset (index) {\n this.set(index, undefined)\n }\n\n get (index) {\n this._sortData()\n const pos = this._internalPositionFor(index, true)\n if (pos === -1) {\n return undefined\n }\n return this._data[pos][1]\n }\n\n push (value) {\n this.set(this.length, value)\n return this.length\n }\n\n get length () {\n this._sortData()\n if (this._changedLength) {\n const last = this._data[this._data.length - 1]\n this._length = last ? last[0] + 1 : 0\n this._changedLength = false\n }\n return this._length\n }\n\n forEach (iterator) {\n let i = 0\n while(i < this.length) {\n iterator(this.get(i), i, this)\n i++\n }\n }\n\n map (iterator) {\n let i = 0\n let mapped = new Array(this.length)\n while(i < this.length) {\n mapped[i] = iterator(this.get(i), i, this)\n i++\n }\n return mapped\n }\n\n reduce (reducer, initialValue) {\n let i = 0\n let acc = initialValue\n while(i < this.length) {\n const value = this.get(i)\n acc = reducer(acc, value, i)\n i++\n }\n return acc\n }\n\n find (finder) {\n let i = 0, found, last\n while ((i < this.length) && !found) {\n last = this.get(i)\n found = finder(last)\n i++\n }\n return found ? last : undefined\n }\n\n _internalPositionFor (index, noCreate) {\n const bytePos = this._bytePosFor(index, noCreate)\n if (bytePos >= this._bitArrays.length) {\n return -1\n }\n const byte = this._bitArrays[bytePos]\n const bitPos = index - bytePos * BITS_PER_BYTE\n const exists = (byte & (1 << bitPos)) > 0\n if (!exists) {\n return -1\n }\n const previousPopCount = this._bitArrays.slice(0, bytePos).reduce(popCountReduce, 0)\n\n const mask = ~(0xffffffff << (bitPos + 1))\n const bytePopCount = popCount(byte & mask)\n const arrayPos = previousPopCount + bytePopCount - 1\n return arrayPos\n }\n\n _bytePosFor (index, noCreate) {\n const bytePos = Math.floor(index / BITS_PER_BYTE)\n const targetLength = bytePos + 1\n while (!noCreate && this._bitArrays.length < targetLength) {\n this._bitArrays.push(0)\n }\n return bytePos\n }\n\n _setBit (index) {\n const bytePos = this._bytePosFor(index, false)\n this._bitArrays[bytePos] |= (1 << (index - (bytePos * BITS_PER_BYTE)))\n }\n\n _unsetBit(index) {\n const bytePos = this._bytePosFor(index, false)\n this._bitArrays[bytePos] &= ~(1 << (index - (bytePos * BITS_PER_BYTE)))\n }\n\n _setInternalPos(pos, index, value, needsSort) {\n const data =this._data\n const elem = [index, value]\n if (needsSort) {\n this._sortData()\n data[pos] = elem\n } else {\n // new element. just shove it into the array\n // but be nice about where we shove it\n // in order to make sorting it later easier\n if (data.length) {\n if (data[data.length - 1][0] >= index) {\n data.push(elem)\n } else if (data[0][0] <= index) {\n data.unshift(elem)\n } else {\n const randomIndex = Math.round(data.length / 2)\n this._data = data.slice(0, randomIndex).concat(elem).concat(data.slice(randomIndex))\n }\n } else {\n this._data.push(elem)\n }\n this._changedData = true\n this._changedLength = true\n }\n }\n\n _unsetInternalPos (pos) {\n this._data.splice(pos, 1)\n }\n\n _sortData () {\n if (this._changedData) {\n this._data.sort(sortInternal)\n }\n\n this._changedData = false\n }\n\n bitField () {\n const bytes = []\n let pendingBitsForResultingByte = 8\n let pendingBitsForNewByte = 0\n let resultingByte = 0\n let newByte\n const pending = this._bitArrays.slice()\n while (pending.length || pendingBitsForNewByte) {\n if (pendingBitsForNewByte === 0) {\n newByte = pending.shift()\n pendingBitsForNewByte = 7\n }\n\n const usingBits = Math.min(pendingBitsForNewByte, pendingBitsForResultingByte)\n const mask = ~(0b11111111 << usingBits)\n const masked = newByte & mask\n resultingByte |= masked << (8 - pendingBitsForResultingByte)\n newByte = newByte >>> usingBits\n pendingBitsForNewByte -= usingBits\n pendingBitsForResultingByte -= usingBits\n\n if (!pendingBitsForResultingByte || (!pendingBitsForNewByte && !pending.length)) {\n bytes.push(resultingByte)\n resultingByte = 0\n pendingBitsForResultingByte = 8\n }\n }\n\n // remove trailing zeroes\n for(var i = bytes.length - 1; i > 0; i--) {\n const value = bytes[i]\n if (value === 0) {\n bytes.pop()\n } else {\n break\n }\n }\n\n return bytes\n }\n\n compactArray () {\n this._sortData()\n return this._data.map(valueOnly)\n }\n}\n\nfunction popCountReduce (count, byte) {\n return count + popCount(byte)\n}\n\nfunction popCount(_v) {\n let v = _v\n v = v - ((v >> 1) & 0x55555555) // reuse input as temporary\n v = (v & 0x33333333) + ((v >> 2) & 0x33333333) // temp\n return ((v + (v >> 4) & 0xF0F0F0F) * 0x1010101) >> 24\n}\n\nfunction sortInternal (a, b) {\n return a[0] - b[0]\n}\n\nfunction valueOnly (elem) {\n return elem[1]\n}", "/**\n * @packageDocumentation\n *\n * @example\n *\n * Let's create a little directory to import:\n *\n * ```console\n * > cd /tmp\n * > mkdir foo\n * > echo 'hello' > foo/bar\n * > echo 'world' > foo/quux\n * ```\n *\n * And write the importing logic:\n *\n * ```TypeScript\n * import { importer } from 'ipfs-unixfs-importer'\n * import { MemoryBlockstore } from 'blockstore-core/memory'\n * import * as fs from 'node:fs'\n *\n * // Where the blocks will be stored\n * const blockstore = new MemoryBlockstore()\n *\n * // Import path /tmp/foo/\n * const source = [{\n * path: '/tmp/foo/bar',\n * content: fs.createReadStream('/tmp/foo/bar')\n * }, {\n * path: '/tmp/foo/quxx',\n * content: fs.createReadStream('/tmp/foo/quux')\n * }]\n *\n * for await (const entry of importer(source, blockstore)) {\n * console.info(entry)\n * }\n * ```\n *\n * When run, metadata about DAGNodes in the created tree is printed until the root:\n *\n * ```\n * {\n * cid: CID, // see https://github.com/multiformats/js-cid\n * path: 'tmp/foo/bar',\n * unixfs: UnixFS // see https://github.com/ipfs/js-ipfs-unixfs\n * }\n * {\n * cid: CID, // see https://github.com/multiformats/js-cid\n * path: 'tmp/foo/quxx',\n * unixfs: UnixFS // see https://github.com/ipfs/js-ipfs-unixfs\n * }\n * {\n * cid: CID, // see https://github.com/multiformats/js-cid\n * path: 'tmp/foo',\n * unixfs: UnixFS // see https://github.com/ipfs/js-ipfs-unixfs\n * }\n * {\n * cid: CID, // see https://github.com/multiformats/js-cid\n * path: 'tmp',\n * unixfs: UnixFS // see https://github.com/ipfs/js-ipfs-unixfs\n * }\n * ```\n */\n\nimport first from 'it-first'\nimport parallelBatch from 'it-parallel-batch'\nimport { fixedSize } from './chunker/fixed-size.js'\nimport { defaultBufferImporter } from './dag-builder/buffer-importer.js'\nimport { defaultDagBuilder } from './dag-builder/index.js'\nimport { defaultChunkValidator } from './dag-builder/validate-chunks.js'\nimport { InvalidParametersError } from './errors.js'\nimport { balanced } from './layout/index.js'\nimport { defaultTreeBuilder } from './tree-builder.js'\nimport type { Chunker } from './chunker/index.js'\nimport type { BufferImportProgressEvents } from './dag-builder/buffer-importer.js'\nimport type { DirBuilder } from './dag-builder/dir.js'\nimport type { FileBuilder, ReducerProgressEvents } from './dag-builder/file.js'\nimport type { DAGBuilder, DagBuilderProgressEvents } from './dag-builder/index.js'\nimport type { ChunkValidator } from './dag-builder/validate-chunks.js'\nimport type { FileLayout } from './layout/index.js'\nimport type { Blockstore } from 'interface-blockstore'\nimport type { AwaitIterable } from 'interface-store'\nimport type { UnixFS, Mtime } from 'ipfs-unixfs'\nimport type { CID, Version as CIDVersion } from 'multiformats/cid'\nimport type { ProgressOptions } from 'progress-events'\n\nexport * from './errors.js'\n\nexport type ByteStream = AwaitIterable<Uint8Array>\nexport type ImportContent = ByteStream | Uint8Array\n\nexport type WritableStorage = Pick<Blockstore, 'put'>\n\nexport interface FileCandidate<T extends ImportContent = ImportContent> {\n path?: string\n content: T\n mtime?: Mtime\n mode?: number\n}\n\nexport interface DirectoryCandidate {\n path: string\n mtime?: Mtime\n mode?: number\n}\n\nexport type ImportCandidate = FileCandidate | DirectoryCandidate\n\nexport interface File {\n content: AsyncIterable<Uint8Array>\n path?: string\n mtime?: Mtime\n mode?: number\n originalPath?: string\n}\n\nexport interface Directory {\n path?: string\n mtime?: Mtime\n mode?: number\n originalPath?: string\n}\n\nexport interface ImportResult {\n cid: CID\n size: bigint\n path?: string\n unixfs?: UnixFS\n}\n\nexport interface MultipleBlockImportResult extends ImportResult {\n originalPath?: string\n}\n\nexport interface SingleBlockImportResult extends ImportResult {\n single: true\n originalPath?: string\n block: Uint8Array\n}\n\nexport type InProgressImportResult = SingleBlockImportResult | MultipleBlockImportResult\n\nexport interface BufferImporterResult extends ImportResult {\n block: Uint8Array\n}\n\nexport interface HamtHashFn { (value: Uint8Array): Promise<Uint8Array> }\nexport interface TreeBuilder { (source: AsyncIterable<InProgressImportResult>, blockstore: WritableStorage): AsyncIterable<ImportResult> }\nexport interface BufferImporter { (file: File, blockstore: WritableStorage): AsyncIterable<() => Promise<BufferImporterResult>> }\n\nexport type ImporterProgressEvents =\n BufferImportProgressEvents |\n DagBuilderProgressEvents |\n ReducerProgressEvents\n\n/**\n * Options to control the importer's behaviour\n */\nexport interface ImporterOptions extends ProgressOptions<ImporterProgressEvents> {\n /**\n * When a file would span multiple DAGNodes, if this is true the leaf nodes\n * will not be wrapped in `UnixFS` protobufs and will instead contain the\n * raw file bytes. Default: true\n */\n rawLeaves?: boolean\n\n /**\n * If the file being imported is small enough to fit into one DAGNodes, store\n * the file data in the root node along with the UnixFS metadata instead of\n * in a leaf node which would then require additional I/O to load. Default: true\n */\n reduceSingleLeafToSelf?: boolean\n\n /**\n * What type of UnixFS node leaves should be - can be `'file'` or `'raw'`\n * (ignored when `rawLeaves` is `true`).\n *\n * This option exists to simulate kubo's trickle dag which uses a combination\n * of `'raw'` UnixFS leaves and `reduceSingleLeafToSelf: false`.\n *\n * For modern code the `rawLeaves: true` option should be used instead so leaves\n * are plain Uint8Arrays without a UnixFS/Protobuf wrapper.\n */\n leafType?: 'file' | 'raw'\n\n /**\n * the CID version to use when storing the data. Default: 1\n */\n cidVersion?: CIDVersion\n\n /**\n * If the serialized node is larger than this it might be converted to a HAMT\n * sharded directory.\n *\n * @default 262144\n */\n shardSplitThresholdBytes?: number\n\n /**\n * The number of bits of a hash digest used at each level of sharding to\n * the child index. 2**shardFanoutBits will dictate the maximum number of\n * children for any shard in the HAMT.\n *\n * @default 8\n */\n shardFanoutBits?: number\n\n /**\n * How many files to import concurrently. For large numbers of small files this\n * should be high (e.g. 50).\n *\n * @default 10\n */\n fileImportConcurrency?: number\n\n /**\n * How many blocks to hash and write to the block store concurrently. For small\n * numbers of large files this should be high (e.g. 50).\n *\n * @default 50\n */\n blockWriteConcurrency?: number\n\n /**\n * If true, all imported files and folders will be contained in a directory that\n * will correspond to the CID of the final entry yielded.\n *\n * @default false\n */\n wrapWithDirectory?: boolean\n\n /**\n * The chunking strategy. See [./src/chunker/index.ts](./src/chunker/index.ts)\n * for available chunkers.\n */\n chunker?: Chunker\n\n /**\n * How the DAG that represents files are created. See\n * [./src/layout/index.ts](./src/layout/index.ts) for available layouts.\n */\n layout?: FileLayout\n\n /**\n * This option can be used to override the importer internals.\n *\n * This function should read `{ path, content }` entries from `source` and turn them\n * into DAGs\n * It should yield a `function` that returns a `Promise` that resolves to\n * `{ cid, path, unixfs, node }` where `cid` is a `CID`, `path` is a string, `unixfs`\n * is a UnixFS entry and `node` is a `DAGNode`.\n * Values will be pulled from this generator in parallel - the amount of parallelisation\n * is controlled by the `fileImportConcurrency` option\n *\n * @default 50\n */\n dagBuilder?: DAGBuilder\n\n /**\n * This option can be used to override the importer internals.\n *\n * This function should read `{ cid, path, unixfs, node }` entries from `source` and\n * place them in a directory structure\n * It should yield an object with the properties `{ cid, path, unixfs, size }` where\n * `cid` is a `CID`, `path` is a string, `unixfs` is a UnixFS entry and `size` is a `Number`.\n */\n treeBuilder?: TreeBuilder\n\n /**\n * This option can be used to override the importer internals.\n *\n * This function should read `Buffer`s from `source` and persist them using `blockstore.put`\n * or similar\n * `entry` is the `{ path, content }` entry, where `entry.content` is an async\n * generator that yields Buffers\n * It should yield functions that return a Promise that resolves to an object with\n * the properties `{ cid, unixfs, size }` where `cid` is a [CID], `unixfs` is a [UnixFS] entry and `size` is a `Number` that represents the serialized size of the [IPLD] node that holds the buffer data.\n * Values will be pulled from this generator in parallel - the amount of\n * parallelisation is controlled by the `blockWriteConcurrency` option\n */\n bufferImporter?: BufferImporter\n\n /**\n * This option can be used to override the importer internals.\n *\n * This function takes input from the `content` field of imported entries.\n * It should transform them into `Buffer`s, throwing an error if it cannot.\n * It should yield `Buffer` objects constructed from the `source` or throw an\n * `Error`\n */\n chunkValidator?: ChunkValidator\n\n /**\n * This option can be used to override how a directory IPLD node is built.\n *\n * This function takes a `Directory` object and returns a `Promise` that resolves to an `InProgressImportResult`.\n */\n dirBuilder?: DirBuilder\n\n /**\n * This option can be used to override how a file IPLD node is built.\n *\n * This function takes a `File` object and returns a `Promise` that resolves to an `InProgressImportResult`.\n */\n fileBuilder?: FileBuilder\n}\n\nexport type ImportCandidateStream = AsyncIterable<FileCandidate | DirectoryCandidate> | Iterable<FileCandidate | DirectoryCandidate>\n\n/**\n * The importer creates UnixFS DAGs and stores the blocks that make\n * them up in the passed blockstore.\n *\n * @example\n *\n * ```typescript\n * import { importer } from 'ipfs-unixfs-importer'\n * import { MemoryBlockstore } from 'blockstore-core'\n *\n * // store blocks in memory, other blockstores are available\n * const blockstore = new MemoryBlockstore()\n *\n * const input = [{\n * path: './foo.txt',\n * content: Uint8Array.from([0, 1, 2, 3, 4])\n * }, {\n * path: './bar.txt',\n * content: Uint8Array.from([0, 1, 2, 3, 4])\n * }]\n *\n * for await (const entry of importer(input, blockstore)) {\n * console.info(entry)\n * // { cid: CID(), ... }\n * }\n * ```\n */\nexport async function * importer (source: ImportCandidateStream, blockstore: WritableStorage, options: ImporterOptions = {}): AsyncGenerator<ImportResult, void, unknown> {\n let candidates: AsyncIterable<FileCandidate | DirectoryCandidate> | Iterable<FileCandidate | DirectoryCandidate>\n\n if (Symbol.asyncIterator in source || Symbol.iterator in source) {\n candidates = source\n } else {\n candidates = [source]\n }\n\n const wrapWithDirectory = options.wrapWithDirectory ?? false\n const shardSplitThresholdBytes = options.shardSplitThresholdBytes ?? 262144\n const shardFanoutBits = options.shardFanoutBits ?? 8\n const cidVersion = options.cidVersion ?? 1\n const rawLeaves = options.rawLeaves ?? true\n const leafType = options.leafType ?? 'file'\n const fileImportConcurrency = options.fileImportConcurrency ?? 50\n const blockWriteConcurrency = options.blockWriteConcurrency ?? 10\n const reduceSingleLeafToSelf = options.reduceSingleLeafToSelf ?? true\n\n const chunker = options.chunker ?? fixedSize()\n const chunkValidator = options.chunkValidator ?? defaultChunkValidator()\n const buildDag: DAGBuilder = options.dagBuilder ?? defaultDagBuilder({\n chunker,\n chunkValidator,\n wrapWithDirectory,\n layout: options.layout ?? balanced(),\n bufferImporter: options.bufferImporter ?? defaultBufferImporter({\n cidVersion,\n rawLeaves,\n leafType,\n onProgress: options.onProgress\n }),\n blockWriteConcurrency,\n reduceSingleLeafToSelf,\n cidVersion,\n onProgress: options.onProgress,\n dirBuilder: options.dirBuilder,\n fileBuilder: options.fileBuilder\n })\n const buildTree: TreeBuilder = options.treeBuilder ?? defaultTreeBuilder({\n wrapWithDirectory,\n shardSplitThresholdBytes,\n shardFanoutBits,\n cidVersion,\n onProgress: options.onProgress\n })\n\n for await (const entry of buildTree(parallelBatch(buildDag(candidates, blockstore), fileImportConcurrency), blockstore)) {\n yield {\n cid: entry.cid,\n path: entry.path,\n unixfs: entry.unixfs,\n size: entry.size\n }\n }\n}\n\n/**\n * `importFile` is similar to `importer` except it accepts a single\n * `FileCandidate` and returns a promise of a single `ImportResult`\n * instead of a stream of results.\n *\n * @example\n *\n * ```typescript\n * import { importFile } from 'ipfs-unixfs-importer'\n * import { MemoryBlockstore } from 'blockstore-core'\n *\n * // store blocks in memory, other blockstores are available\n * const blockstore = new MemoryBlockstore()\n *\n * const input: FileCandidate = {\n * path: './foo.txt',\n * content: Uint8Array.from([0, 1, 2, 3, 4])\n * }\n *\n * const entry = await importFile(input, blockstore)\n * ```\n */\nexport async function importFile (content: FileCandidate, blockstore: WritableStorage, options: ImporterOptions = {}): Promise<ImportResult> {\n const result = await first(importer([content], blockstore, options))\n\n if (result == null) {\n throw new InvalidParametersError('Nothing imported')\n }\n\n return result\n}\n\n/**\n * `importDir` is similar to `importer` except it accepts a single\n * `DirectoryCandidate` and returns a promise of a single `ImportResult`\n * instead of a stream of results.\n *\n * @example\n *\n * ```typescript\n * import { importDirectory } from 'ipfs-unixfs-importer'\n * import { MemoryBlockstore } from 'blockstore-core'\n *\n * // store blocks in memory, other blockstores are available\n * const blockstore = new MemoryBlockstore()\n *\n * const input: DirectoryCandidate = {\n * path: './foo.txt'\n * }\n *\n * const entry = await importDirectory(input, blockstore)\n * ```\n */\nexport async function importDirectory (content: DirectoryCandidate, blockstore: WritableStorage, options: ImporterOptions = {}): Promise<ImportResult> {\n const result = await first(importer([content], blockstore, options))\n\n if (result == null) {\n throw new InvalidParametersError('Nothing imported')\n }\n\n return result\n}\n\n/**\n * `importBytes` accepts a single Uint8Array and returns a promise\n * of a single `ImportResult`.\n *\n * @example\n *\n * ```typescript\n * import { importBytes } from 'ipfs-unixfs-importer'\n * import { MemoryBlockstore } from 'blockstore-core'\n *\n * // store blocks in memory, other blockstores are available\n * const blockstore = new MemoryBlockstore()\n *\n * const input = Uint8Array.from([0, 1, 2, 3, 4])\n *\n * const entry = await importBytes(input, blockstore)\n * ```\n */\nexport async function importBytes (buf: ImportContent, blockstore: WritableStorage, options: ImporterOptions = {}): Promise<ImportResult> {\n return importFile({\n content: buf\n }, blockstore, options)\n}\n\n/**\n * `importByteStream` accepts a single stream of Uint8Arrays and\n * returns a promise of a single `ImportResult`.\n *\n * @example\n *\n * ```typescript\n * import { importByteStream } from 'ipfs-unixfs-importer'\n * import { MemoryBlockstore } from 'blockstore-core'\n *\n * // store blocks in memory, other blockstores are available\n * const blockstore = new MemoryBlockstore()\n *\n * const input = [\n * Uint8Array.from([0, 1, 2, 3, 4]),\n * Uint8Array.from([5, 6, 7, 8, 9])\n * ]\n *\n * const entry = await importByteStream(input, blockstore)\n * ```\n */\nexport async function importByteStream (bufs: ByteStream, blockstore: WritableStorage, options: ImporterOptions = {}): Promise<ImportResult> {\n return importFile({\n content: bufs\n }, blockstore, options)\n}\n", "/**\n * @packageDocumentation\n *\n * Return the first value in an (async)iterable\n *\n * @example\n *\n * ```javascript\n * import first from 'it-first'\n *\n * // This can also be an iterator, generator, etc\n * const values = [0, 1, 2, 3, 4]\n *\n * const res = first(values)\n *\n * console.info(res) // 0\n * ```\n *\n * Async sources must be awaited:\n *\n * ```javascript\n * import first from 'it-first'\n *\n * const values = async function * () {\n * yield * [0, 1, 2, 3, 4]\n * }\n *\n * const res = await first(values())\n *\n * console.info(res) // 0\n * ```\n */\n\nfunction isAsyncIterable <T> (thing: any): thing is AsyncIterable<T> {\n return thing[Symbol.asyncIterator] != null\n}\n\n/**\n * Returns the first result from an (async) iterable, unless empty, in which\n * case returns `undefined`\n */\nfunction first <T> (source: Iterable<T>): T | undefined\nfunction first <T> (source: Iterable<T> | AsyncIterable<T>): Promise<T | undefined>\nfunction first <T> (source: Iterable<T> | AsyncIterable<T>): Promise<T | undefined> | T | undefined {\n if (isAsyncIterable(source)) {\n return (async () => {\n for await (const entry of source) { // eslint-disable-line no-unreachable-loop\n return entry\n }\n\n return undefined\n })()\n }\n\n for (const entry of source) { // eslint-disable-line no-unreachable-loop\n return entry\n }\n\n return undefined\n}\n\nexport default first\n", "/**\n * @packageDocumentation\n *\n * The final batch may be smaller than the max.\n *\n * @example\n *\n * ```javascript\n * import batch from 'it-batch'\n * import all from 'it-all'\n *\n * // This can also be an iterator, generator, etc\n * const values = [0, 1, 2, 3, 4]\n * const batchSize = 2\n *\n * const result = all(batch(values, batchSize))\n *\n * console.info(result) // [0, 1], [2, 3], [4]\n * ```\n *\n * Async sources must be awaited:\n *\n * ```javascript\n * import batch from 'it-batch'\n * import all from 'it-all'\n *\n * const values = async function * () {\n * yield * [0, 1, 2, 3, 4]\n * }\n *\n * const batchSize = 2\n * const result = await all(batch(values(), batchSize))\n *\n * console.info(result) // [0, 1], [2, 3], [4]\n * ```\n */\n\nfunction isAsyncIterable <T> (thing: any): thing is AsyncIterable<T> {\n return thing[Symbol.asyncIterator] != null\n}\n\n/**\n * Takes an (async) iterable that emits things and returns an async iterable that\n * emits those things in fixed-sized batches\n */\nfunction batch <T> (source: Iterable<T>, size?: number): Generator<T[], void, undefined>\nfunction batch <T> (source: Iterable<T> | AsyncIterable<T>, size?: number): AsyncGenerator<T[], void, undefined>\nfunction batch <T> (source: Iterable<T> | AsyncIterable<T>, size: number = 1): Generator<T[], void, undefined> | AsyncGenerator<T[], void, undefined> {\n size = Number(size)\n\n if (isAsyncIterable(source)) {\n return (async function * () {\n let things: T[] = []\n\n if (size < 1) {\n size = 1\n }\n\n if (size !== Math.round(size)) {\n throw new Error('Batch size must be an integer')\n }\n\n for await (const thing of source) {\n things.push(thing)\n\n while (things.length >= size) {\n yield things.slice(0, size)\n\n things = things.slice(size)\n }\n }\n\n while (things.length > 0) {\n yield things.slice(0, size)\n\n things = things.slice(size)\n }\n }())\n }\n\n return (function * () {\n let things: T[] = []\n\n if (size < 1) {\n size = 1\n }\n\n if (size !== Math.round(size)) {\n throw new Error('Batch size must be an integer')\n }\n\n for (const thing of source) {\n things.push(thing)\n\n while (things.length >= size) {\n yield things.slice(0, size)\n\n things = things.slice(size)\n }\n }\n\n while (things.length > 0) {\n yield things.slice(0, size)\n\n things = things.slice(size)\n }\n }())\n}\n\nexport default batch\n", "/**\n * @packageDocumentation\n *\n * Takes an async iterator that emits promise-returning functions, invokes them in parallel and emits the results in the same order as the input.\n *\n * The final batch may be smaller than the batch size.\n *\n * @example\n *\n * ```javascript\n * import parallelBatch from 'it-parallel-batch'\n * import all from 'it-all'\n * import delay from 'delay'\n *\n * // This can also be an iterator, async iterator, generator, etc\n * const input = [\n * async () => {\n * await delay(500)\n *\n * return 1\n * },\n * async () => {\n * await delay(200)\n *\n * return 2\n * },\n * async () => {\n * await delay(100)\n *\n * return 3\n * }\n * ]\n *\n * const batchSize = 2\n *\n * const result = await all(parallelBatch(input, batchSize))\n *\n * console.info(result) // [1, 2, 3]\n * ```\n */\n\nimport batch from 'it-batch'\n\ninterface Success<T> {\n ok: true\n value: T\n}\n\ninterface Failure {\n ok: false\n err: Error\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 * parallelBatch <T> (source: AsyncIterable<() => Promise<T>> | Iterable<() => Promise<T>>, size: number = 1): AsyncGenerator<T, void, undefined> {\n for await (const tasks of batch(source, size)) {\n const things: Array<Promise<Success<T> | Failure>> = tasks.map(\n async (p: () => Promise<T>) => {\n return p().then(value => ({ ok: true, value }), err => ({ ok: false, err }))\n })\n\n for (let i = 0; i < things.length; i++) {\n const result = await things[i]\n\n if (result.ok) {\n yield result.value\n } else {\n throw result.err\n }\n }\n }\n}\n", "/**\n * Returns a `Uint8Array` of the requested size. Referenced memory will\n * be initialized to 0.\n */\nexport function alloc (size: number = 0): Uint8Array {\n return new Uint8Array(size)\n}\n\n/**\n * Where possible returns a Uint8Array of the requested size that references\n * uninitialized memory. Only use if you are certain you will immediately\n * overwrite every value in the returned `Uint8Array`.\n */\nexport function allocUnsafe (size: number = 0): Uint8Array {\n return new Uint8Array(size)\n}\n", "import { allocUnsafe } from '#alloc'\nimport { asUint8Array } from '#util/as-uint8array'\n\n/**\n * Returns a new Uint8Array created by concatenating the passed Uint8Arrays\n */\nexport function concat (arrays: Uint8Array[], 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", "/**\n * Returns true if the two passed Uint8Arrays have the same content\n */\nexport function equals (a: Uint8Array, b: Uint8Array): boolean {\n if (a === b) {\n return true\n }\n\n if (a.byteLength !== b.byteLength) {\n return false\n }\n\n for (let i = 0; i < a.byteLength; i++) {\n if (a[i] !== b[i]) {\n return false\n }\n }\n\n return true\n}\n", "/**\n * @packageDocumentation\n *\n * A class that lets you do operations over a list of Uint8Arrays without\n * copying them.\n *\n * ```js\n * import { Uint8ArrayList } from 'uint8arraylist'\n *\n * const list = new Uint8ArrayList()\n * list.append(Uint8Array.from([0, 1, 2]))\n * list.append(Uint8Array.from([3, 4, 5]))\n *\n * list.subarray()\n * // -> Uint8Array([0, 1, 2, 3, 4, 5])\n *\n * list.consume(3)\n * list.subarray()\n * // -> Uint8Array([3, 4, 5])\n *\n * // you can also iterate over the list\n * for (const buf of list) {\n * // ..do something with `buf`\n * }\n *\n * list.subarray(0, 1)\n * // -> Uint8Array([0])\n * ```\n *\n * ## Converting Uint8ArrayLists to Uint8Arrays\n *\n * There are two ways to turn a `Uint8ArrayList` into a `Uint8Array` - `.slice` and `.subarray` and one way to turn a `Uint8ArrayList` into a `Uint8ArrayList` with different contents - `.sublist`.\n *\n * ### slice\n *\n * Slice follows the same semantics as [Uint8Array.slice](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/slice) in that it creates a new `Uint8Array` and copies bytes into it using an optional offset & length.\n *\n * ```js\n * const list = new Uint8ArrayList()\n * list.append(Uint8Array.from([0, 1, 2]))\n * list.append(Uint8Array.from([3, 4, 5]))\n *\n * list.slice(0, 1)\n * // -> Uint8Array([0])\n * ```\n *\n * ### subarray\n *\n * Subarray attempts to follow the same semantics as [Uint8Array.subarray](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/subarray) with one important different - this is a no-copy operation, unless the requested bytes span two internal buffers in which case it is a copy operation.\n *\n * ```js\n * const list = new Uint8ArrayList()\n * list.append(Uint8Array.from([0, 1, 2]))\n * list.append(Uint8Array.from([3, 4, 5]))\n *\n * list.subarray(0, 1)\n * // -> Uint8Array([0]) - no-copy\n *\n * list.subarray(2, 5)\n * // -> Uint8Array([2, 3, 4]) - copy\n * ```\n *\n * ### sublist\n *\n * Sublist creates and returns a new `Uint8ArrayList` that shares the underlying buffers with the original so is always a no-copy operation.\n *\n * ```js\n * const list = new Uint8ArrayList()\n * list.append(Uint8Array.from([0, 1, 2]))\n * list.append(Uint8Array.from([3, 4, 5]))\n *\n * list.sublist(0, 1)\n * // -> Uint8ArrayList([0]) - no-copy\n *\n * list.sublist(2, 5)\n * // -> Uint8ArrayList([2], [3, 4]) - no-copy\n * ```\n *\n * ## Inspiration\n *\n * Borrows liberally from [bl](https://www.npmjs.com/package/bl) but only uses native JS types.\n */\nimport { allocUnsafe, alloc } from 'uint8arrays/alloc'\nimport { concat } from 'uint8arrays/concat'\nimport { equals } from 'uint8arrays/equals'\n\nconst symbol = Symbol.for('@achingbrain/uint8arraylist')\n\nexport type Appendable = Uint8ArrayList | Uint8Array\n\nfunction findBufAndOffset (bufs: Uint8Array[], index: number): { buf: Uint8Array, index: number } {\n if (index == null || index < 0) {\n throw new RangeError('index is out of bounds')\n }\n\n let offset = 0\n\n for (const buf of bufs) {\n const bufEnd = offset + buf.byteLength\n\n if (index < bufEnd) {\n return {\n buf,\n index: index - offset\n }\n }\n\n offset = bufEnd\n }\n\n throw new RangeError('index is out of bounds')\n}\n\n/**\n * Check if object is a CID instance\n *\n * @example\n *\n * ```js\n * import { isUint8ArrayList, Uint8ArrayList } from 'uint8arraylist'\n *\n * isUint8ArrayList(true) // false\n * isUint8ArrayList([]) // false\n * isUint8ArrayList(new Uint8ArrayList()) // true\n * ```\n */\nexport function isUint8ArrayList (value: any): value is Uint8ArrayList {\n return Boolean(value?.[symbol])\n}\n\nexport class Uint8ArrayList implements Iterable<Uint8Array> {\n private bufs: Uint8Array[]\n public length: number\n public readonly [symbol] = true\n\n constructor (...data: Appendable[]) {\n this.bufs = []\n this.length = 0\n\n if (data.length > 0) {\n this.appendAll(data)\n }\n }\n\n * [Symbol.iterator] (): Iterator<Uint8Array> {\n yield * this.bufs\n }\n\n get byteLength (): number {\n return this.length\n }\n\n /**\n * Add one or more `bufs` to the end of this Uint8ArrayList\n */\n append (...bufs: Appendable[]): void {\n this.appendAll(bufs)\n }\n\n /**\n * Add all `bufs` to the end of this Uint8ArrayList\n */\n appendAll (bufs: Appendable[]): void {\n let length = 0\n\n for (const buf of bufs) {\n if (buf instanceof Uint8Array) {\n length += buf.byteLength\n this.bufs.push(buf)\n } else if (isUint8ArrayList(buf)) {\n length += buf.byteLength\n this.bufs.push(...buf.bufs)\n } else {\n throw new Error('Could not append value, must be an Uint8Array or a Uint8ArrayList')\n }\n }\n\n this.length += length\n }\n\n /**\n * Add one or more `bufs` to the start of this Uint8ArrayList\n */\n prepend (...bufs: Appendable[]): void {\n this.prependAll(bufs)\n }\n\n /**\n * Add all `bufs` to the start of this Uint8ArrayList\n */\n prependAll (bufs: Appendable[]): void {\n let length = 0\n\n for (const buf of bufs.reverse()) {\n if (buf instanceof Uint8Array) {\n length += buf.byteLength\n this.bufs.unshift(buf)\n } else if (isUint8ArrayList(buf)) {\n length += buf.byteLength\n this.bufs.unshift(...buf.bufs)\n } else {\n throw new Error('Could not prepend value, must be an Uint8Array or a Uint8ArrayList')\n }\n }\n\n this.length += length\n }\n\n /**\n * Read the value at `index`\n */\n get (index: number): number {\n const res = findBufAndOffset(this.bufs, index)\n\n return res.buf[res.index]\n }\n\n /**\n * Set the value at `index` to `value`\n */\n set (index: number, value: number): void {\n const res = findBufAndOffset(this.bufs, index)\n\n res.buf[res.index] = value\n }\n\n /**\n * Copy bytes from `buf` to the index specified by `offset`\n */\n write (buf: Appendable, offset: number = 0): void {\n if (buf instanceof Uint8Array) {\n for (let i = 0; i < buf.length; i++) {\n this.set(offset + i, buf[i])\n }\n } else if (isUint8ArrayList(buf)) {\n for (let i = 0; i < buf.length; i++) {\n this.set(offset + i, buf.get(i))\n }\n } else {\n throw new Error('Could not write value, must be an Uint8Array or a Uint8ArrayList')\n }\n }\n\n /**\n * Remove bytes from the front of the pool\n */\n consume (bytes: number): void {\n // first, normalize the argument, in accordance with how Buffer does it\n bytes = Math.trunc(bytes)\n\n // do nothing if not a positive number\n if (Number.isNaN(bytes) || bytes <= 0) {\n return\n }\n\n // if consuming all bytes, skip iterating\n if (bytes === this.byteLength) {\n this.bufs = []\n this.length = 0\n return\n }\n\n while (this.bufs.length > 0) {\n if (bytes >= this.bufs[0].byteLength) {\n bytes -= this.bufs[0].byteLength\n this.length -= this.bufs[0].byteLength\n this.bufs.shift()\n } else {\n this.bufs[0] = this.bufs[0].subarray(bytes)\n this.length -= bytes\n break\n }\n }\n }\n\n /**\n * Extracts a section of an array and returns a new array.\n *\n * This is a copy operation as it is with Uint8Arrays and Arrays\n * - note this is different to the behaviour of Node Buffers.\n */\n slice (beginInclusive?: number, endExclusive?: number): Uint8Array {\n const { bufs, length } = this._subList(beginInclusive, endExclusive)\n\n return concat(bufs, length)\n }\n\n /**\n * Returns a alloc from the given start and end element index.\n *\n * In the best case where the data extracted comes from a single Uint8Array\n * internally this is a no-copy operation otherwise it is a copy operation.\n */\n subarray (beginInclusive?: number, endExclusive?: number): Uint8Array {\n const { bufs, length } = this._subList(beginInclusive, endExclusive)\n\n if (bufs.length === 1) {\n return bufs[0]\n }\n\n return concat(bufs, length)\n }\n\n /**\n * Returns a allocList from the given start and end element index.\n *\n * This is a no-copy operation.\n */\n sublist (beginInclusive?: number, endExclusive?: number): Uint8ArrayList {\n const { bufs, length } = this._subList(beginInclusive, endExclusive)\n\n const list = new Uint8ArrayList()\n list.length = length\n // don't loop, just set the bufs\n list.bufs = [...bufs]\n\n return list\n }\n\n private _subList (beginInclusive?: number, endExclusive?: number): { bufs: Uint8Array[], length: number } {\n beginInclusive = beginInclusive ?? 0\n endExclusive = endExclusive ?? this.length\n\n if (beginInclusive < 0) {\n beginInclusive = this.length + beginInclusive\n }\n\n if (endExclusive < 0) {\n endExclusive = this.length + endExclusive\n }\n\n if (beginInclusive < 0 || endExclusive > this.length) {\n throw new RangeError('index is out of bounds')\n }\n\n if (beginInclusive === endExclusive) {\n return { bufs: [], length: 0 }\n }\n\n if (beginInclusive === 0 && endExclusive === this.length) {\n return { bufs: this.bufs, length: this.length }\n }\n\n const bufs: Uint8Array[] = []\n let offset = 0\n\n for (let i = 0; i < this.bufs.length; i++) {\n const buf = this.bufs[i]\n const bufStart = offset\n const bufEnd = bufStart + buf.byteLength\n\n // for next loop\n offset = bufEnd\n\n if (beginInclusive >= bufEnd) {\n // start after this buf\n continue\n }\n\n const sliceStartInBuf = beginInclusive >= bufStart && beginInclusive < bufEnd\n const sliceEndsInBuf = endExclusive > bufStart && endExclusive <= bufEnd\n\n if (sliceStartInBuf && sliceEndsInBuf) {\n // slice is wholly contained within this buffer\n if (beginInclusive === bufStart && endExclusive === bufEnd) {\n // requested whole buffer\n bufs.push(buf)\n break\n }\n\n // requested part of buffer\n const start = beginInclusive - bufStart\n bufs.push(buf.subarray(start, start + (endExclusive - beginInclusive)))\n break\n }\n\n if (sliceStartInBuf) {\n // slice starts in this buffer\n if (beginInclusive === 0) {\n // requested whole buffer\n bufs.push(buf)\n continue\n }\n\n // requested part of buffer\n bufs.push(buf.subarray(beginInclusive - bufStart))\n continue\n }\n\n if (sliceEndsInBuf) {\n if (endExclusive === bufEnd) {\n // requested whole buffer\n bufs.push(buf)\n break\n }\n\n // requested part of buffer\n bufs.push(buf.subarray(0, endExclusive - bufStart))\n break\n }\n\n // slice started before this buffer and ends after it\n bufs.push(buf)\n }\n\n return { bufs, length: endExclusive - beginInclusive }\n }\n\n indexOf (search: Uint8ArrayList | Uint8Array, offset: number = 0): number {\n if (!isUint8ArrayList(search) && !(search instanceof Uint8Array)) {\n throw new TypeError('The \"value\" argument must be a Uint8ArrayList or Uint8Array')\n }\n\n const needle = search instanceof Uint8Array ? search : search.subarray()\n\n offset = Number(offset ?? 0)\n\n if (isNaN(offset)) {\n offset = 0\n }\n\n if (offset < 0) {\n offset = this.length + offset\n }\n\n if (offset < 0) {\n offset = 0\n }\n\n if (search.length === 0) {\n return offset > this.length ? this.length : offset\n }\n\n // https://en.wikipedia.org/wiki/Boyer%E2%80%93Moore_string-search_algorithm\n const M: number = needle.byteLength\n\n if (M === 0) {\n throw new TypeError('search must be at least 1 byte long')\n }\n\n // radix\n const radix: number = 256\n const rightmostPositions: Int32Array = new Int32Array(radix)\n\n // position of the rightmost occurrence of the byte c in the pattern\n for (let c: number = 0; c < radix; c++) {\n // -1 for bytes not in pattern\n rightmostPositions[c] = -1\n }\n\n for (let j = 0; j < M; j++) {\n // rightmost position for bytes in pattern\n rightmostPositions[needle[j]] = j\n }\n\n // Return offset of first match, -1 if no match\n const right = rightmostPositions\n const lastIndex = this.byteLength - needle.byteLength\n const lastPatIndex = needle.byteLength - 1\n let skip: number\n\n for (let i = offset; i <= lastIndex; i += skip) {\n skip = 0\n\n for (let j = lastPatIndex; j >= 0; j--) {\n const char: number = this.get(i + j)\n\n if (needle[j] !== char) {\n skip = Math.max(1, j - right[char])\n break\n }\n }\n\n if (skip === 0) {\n return i\n }\n }\n\n return -1\n }\n\n getInt8 (byteOffset: number): number {\n const buf = this.subarray(byteOffset, byteOffset + 1)\n const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n\n return view.getInt8(0)\n }\n\n setInt8 (byteOffset: number, value: number): void {\n const buf = allocUnsafe(1)\n const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n view.setInt8(0, value)\n\n this.write(buf, byteOffset)\n }\n\n getInt16 (byteOffset: number, littleEndian?: boolean): number {\n const buf = this.subarray(byteOffset, byteOffset + 2)\n const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n\n return view.getInt16(0, littleEndian)\n }\n\n setInt16 (byteOffset: number, value: number, littleEndian?: boolean): void {\n const buf = alloc(2)\n const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n view.setInt16(0, value, littleEndian)\n\n this.write(buf, byteOffset)\n }\n\n getInt32 (byteOffset: number, littleEndian?: boolean): number {\n const buf = this.subarray(byteOffset, byteOffset + 4)\n const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n\n return view.getInt32(0, littleEndian)\n }\n\n setInt32 (byteOffset: number, value: number, littleEndian?: boolean): void {\n const buf = alloc(4)\n const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n view.setInt32(0, value, littleEndian)\n\n this.write(buf, byteOffset)\n }\n\n getBigInt64 (byteOffset: number, littleEndian?: boolean): bigint {\n const buf = this.subarray(byteOffset, byteOffset + 8)\n const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n\n return view.getBigInt64(0, littleEndian)\n }\n\n setBigInt64 (byteOffset: number, value: bigint, littleEndian?: boolean): void {\n const buf = alloc(8)\n const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n view.setBigInt64(0, value, littleEndian)\n\n this.write(buf, byteOffset)\n }\n\n getUint8 (byteOffset: number): number {\n const buf = this.subarray(byteOffset, byteOffset + 1)\n const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n\n return view.getUint8(0)\n }\n\n setUint8 (byteOffset: number, value: number): void {\n const buf = allocUnsafe(1)\n const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n view.setUint8(0, value)\n\n this.write(buf, byteOffset)\n }\n\n getUint16 (byteOffset: number, littleEndian?: boolean): number {\n const buf = this.subarray(byteOffset, byteOffset + 2)\n const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n\n return view.getUint16(0, littleEndian)\n }\n\n setUint16 (byteOffset: number, value: number, littleEndian?: boolean): void {\n const buf = alloc(2)\n const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n view.setUint16(0, value, littleEndian)\n\n this.write(buf, byteOffset)\n }\n\n getUint32 (byteOffset: number, littleEndian?: boolean): number {\n const buf = this.subarray(byteOffset, byteOffset + 4)\n const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n\n return view.getUint32(0, littleEndian)\n }\n\n setUint32 (byteOffset: number, value: number, littleEndian?: boolean): void {\n const buf = alloc(4)\n const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n view.setUint32(0, value, littleEndian)\n\n this.write(buf, byteOffset)\n }\n\n getBigUint64 (byteOffset: number, littleEndian?: boolean): bigint {\n const buf = this.subarray(byteOffset, byteOffset + 8)\n const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n\n return view.getBigUint64(0, littleEndian)\n }\n\n setBigUint64 (byteOffset: number, value: bigint, littleEndian?: boolean): void {\n const buf = alloc(8)\n const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n view.setBigUint64(0, value, littleEndian)\n\n this.write(buf, byteOffset)\n }\n\n getFloat32 (byteOffset: number, littleEndian?: boolean): number {\n const buf = this.subarray(byteOffset, byteOffset + 4)\n const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n\n return view.getFloat32(0, littleEndian)\n }\n\n setFloat32 (byteOffset: number, value: number, littleEndian?: boolean): void {\n const buf = alloc(4)\n const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n view.setFloat32(0, value, littleEndian)\n\n this.write(buf, byteOffset)\n }\n\n getFloat64 (byteOffset: number, littleEndian?: boolean): number {\n const buf = this.subarray(byteOffset, byteOffset + 8)\n const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n\n return view.getFloat64(0, littleEndian)\n }\n\n setFloat64 (byteOffset: number, value: number, littleEndian?: boolean): void {\n const buf = alloc(8)\n const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n view.setFloat64(0, value, littleEndian)\n\n this.write(buf, byteOffset)\n }\n\n equals (other: any): other is Uint8ArrayList {\n if (other == null) {\n return false\n }\n\n if (!(other instanceof Uint8ArrayList)) {\n return false\n }\n\n if (other.bufs.length !== this.bufs.length) {\n return false\n }\n\n for (let i = 0; i < this.bufs.length; i++) {\n if (!equals(this.bufs[i], other.bufs[i])) {\n return false\n }\n }\n\n return true\n }\n\n /**\n * Create a Uint8ArrayList from a pre-existing list of Uint8Arrays. Use this\n * method if you know the total size of all the Uint8Arrays ahead of time.\n */\n static fromUint8Arrays (bufs: Uint8Array[], length?: number): Uint8ArrayList {\n const list = new Uint8ArrayList()\n list.bufs = bufs\n\n if (length == null) {\n length = bufs.reduce((acc, curr) => acc + curr.byteLength, 0)\n }\n\n list.length = length\n\n return list\n }\n}\n\n/*\nfunction indexOf (needle: Uint8Array, haystack: Uint8Array, offset = 0) {\n for (let i = offset; i < haystack.byteLength; i++) {\n for (let j = 0; j < needle.length; j++) {\n if (haystack[i + j] !== needle[j]) {\n break\n }\n\n if (j === needle.byteLength -1) {\n return i\n }\n }\n\n if (haystack.byteLength - i < needle.byteLength) {\n break\n }\n }\n\n return -1\n}\n*/\n", "import { Uint8ArrayList } from 'uint8arraylist'\nimport type { Chunker } from './index.js'\n\nexport interface FixedSizeOptions {\n chunkSize?: number\n}\n\nconst DEFAULT_CHUNK_SIZE = 262144\n\nexport const fixedSize = (options: FixedSizeOptions = {}): Chunker => {\n const chunkSize = options.chunkSize ?? DEFAULT_CHUNK_SIZE\n\n return async function * fixedSizeChunker (source) {\n let list = new Uint8ArrayList()\n let currentLength = 0\n let emitted = false\n\n for await (const buffer of source) {\n list.append(buffer)\n\n currentLength += buffer.length\n\n while (currentLength >= chunkSize) {\n yield list.slice(0, chunkSize)\n emitted = true\n\n // throw away consumed bytes\n if (chunkSize === list.length) {\n list = new Uint8ArrayList()\n currentLength = 0\n } else {\n const newBl = new Uint8ArrayList()\n newBl.append(list.sublist(chunkSize))\n list = newBl\n\n // update our offset\n currentLength -= chunkSize\n }\n }\n }\n\n if (!emitted || currentLength > 0) {\n // return any remaining bytes\n yield list.subarray(0, currentLength)\n }\n }\n}\n", "import { CID } from 'multiformats/cid'\nimport { decodeNode } from './pb-decode.js'\nimport { encodeNode } from './pb-encode.js'\nimport { prepare, validate, createNode, createLink, toByteView } from './util.js'\n\n/**\n * @template T\n * @typedef {import('multiformats/codecs/interface').ByteView<T>} ByteView\n */\n\n/**\n * @template T\n * @typedef {import('multiformats/codecs/interface').ArrayBufferView<T>} ArrayBufferView\n */\n\n/**\n * @typedef {import('./interface.js').PBLink} PBLink\n * @typedef {import('./interface.js').PBNode} PBNode\n */\n\nexport const name = 'dag-pb'\nexport const code = 0x70\n\n/**\n * @param {PBNode} node\n * @returns {ByteView<PBNode>}\n */\nexport function encode (node) {\n validate(node)\n\n const pbn = {}\n if (node.Links) {\n pbn.Links = node.Links.map((l) => {\n const link = {}\n if (l.Hash) {\n link.Hash = l.Hash.bytes // cid -> bytes\n }\n if (l.Name !== undefined) {\n link.Name = l.Name\n }\n if (l.Tsize !== undefined) {\n link.Tsize = l.Tsize\n }\n return link\n })\n }\n if (node.Data) {\n pbn.Data = node.Data\n }\n\n return encodeNode(pbn)\n}\n\n/**\n * @param {ByteView<PBNode> | ArrayBufferView<PBNode>} bytes\n * @returns {PBNode}\n */\nexport function decode (bytes) {\n const buf = toByteView(bytes)\n const pbn = decodeNode(buf)\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 {\n // ignore parse fail\n }\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", "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", "export const empty = new Uint8Array(0)\n\nexport function toHex (d: Uint8Array): string {\n return d.reduce((hex, byte) => hex + byte.toString(16).padStart(2, '0'), '')\n}\n\nexport function fromHex (hex: string): Uint8Array {\n const hexes = hex.match(/../g)\n return hexes != null ? new Uint8Array(hexes.map(b => parseInt(b, 16))) : empty\n}\n\nexport function equals (aa: Uint8Array, bb: Uint8Array): boolean {\n if (aa === bb) { return true }\n if (aa.byteLength !== bb.byteLength) {\n return false\n }\n\n for (let ii = 0; ii < aa.byteLength; ii++) {\n if (aa[ii] !== bb[ii]) {\n return false\n }\n }\n\n return true\n}\n\nexport function coerce (o: ArrayBufferView | ArrayBuffer | Uint8Array): Uint8Array {\n if (o instanceof Uint8Array && o.constructor.name === 'Uint8Array') { return o }\n if (o instanceof ArrayBuffer) { return new Uint8Array(o) }\n if (ArrayBuffer.isView(o)) {\n return new Uint8Array(o.buffer, o.byteOffset, o.byteLength)\n }\n throw new Error('Unknown type, must be binary type')\n}\n\nexport function isBinary (o: unknown): o is ArrayBuffer | ArrayBufferView {\n return o instanceof ArrayBuffer || ArrayBuffer.isView(o)\n}\n\nexport function fromString (str: string): Uint8Array {\n return new TextEncoder().encode(str)\n}\n\nexport function toString (b: Uint8Array): string {\n return new TextDecoder().decode(b)\n}\n", "/* eslint-disable */\n// base-x encoding / decoding\n// Copyright (c) 2018 base-x contributors\n// Copyright (c) 2014-2018 The Bitcoin Core developers (base58.cpp)\n// Distributed under the MIT software license, see the accompanying\n// file LICENSE or http://www.opensource.org/licenses/mit-license.php.\n/**\n * @param {string} ALPHABET\n * @param {any} name\n */\nfunction base (ALPHABET, name) {\n if (ALPHABET.length >= 255) { throw new TypeError('Alphabet too long') }\n var BASE_MAP = new Uint8Array(256);\n for (var j = 0; j < BASE_MAP.length; j++) {\n BASE_MAP[j] = 255;\n }\n for (var i = 0; i < ALPHABET.length; i++) {\n var x = ALPHABET.charAt(i);\n var xc = x.charCodeAt(0);\n if (BASE_MAP[xc] !== 255) { throw new TypeError(x + ' is ambiguous') }\n BASE_MAP[xc] = i;\n }\n var BASE = ALPHABET.length;\n var LEADER = ALPHABET.charAt(0);\n var FACTOR = Math.log(BASE) / Math.log(256); // log(BASE) / log(256), rounded up\n var iFACTOR = Math.log(256) / Math.log(BASE); // log(256) / log(BASE), rounded up\n /**\n * @param {any[] | Iterable<number>} source\n */\n function encode (source) {\n // @ts-ignore\n if (source instanceof Uint8Array) ; else if (ArrayBuffer.isView(source)) {\n source = new Uint8Array(source.buffer, source.byteOffset, source.byteLength);\n } else if (Array.isArray(source)) {\n source = Uint8Array.from(source);\n }\n if (!(source instanceof Uint8Array)) { throw new TypeError('Expected Uint8Array') }\n if (source.length === 0) { return '' }\n // Skip & count leading zeroes.\n var zeroes = 0;\n var length = 0;\n var pbegin = 0;\n var pend = source.length;\n while (pbegin !== pend && source[pbegin] === 0) {\n pbegin++;\n zeroes++;\n }\n // Allocate enough space in big-endian base58 representation.\n var size = ((pend - pbegin) * iFACTOR + 1) >>> 0;\n var b58 = new Uint8Array(size);\n // Process the bytes.\n while (pbegin !== pend) {\n var carry = source[pbegin];\n // Apply \"b58 = b58 * 256 + ch\".\n var i = 0;\n for (var it1 = size - 1; (carry !== 0 || i < length) && (it1 !== -1); it1--, i++) {\n carry += (256 * b58[it1]) >>> 0;\n b58[it1] = (carry % BASE) >>> 0;\n carry = (carry / BASE) >>> 0;\n }\n if (carry !== 0) { throw new Error('Non-zero carry') }\n length = i;\n pbegin++;\n }\n // Skip leading zeroes in base58 result.\n var it2 = size - length;\n while (it2 !== size && b58[it2] === 0) {\n it2++;\n }\n // Translate the result into a string.\n var str = LEADER.repeat(zeroes);\n for (; it2 < size; ++it2) { str += ALPHABET.charAt(b58[it2]); }\n return str\n }\n /**\n * @param {string | string[]} source\n */\n function decodeUnsafe (source) {\n if (typeof source !== 'string') { throw new TypeError('Expected String') }\n if (source.length === 0) { return new Uint8Array() }\n var psz = 0;\n // Skip leading spaces.\n if (source[psz] === ' ') { return }\n // Skip and count leading '1's.\n var zeroes = 0;\n var length = 0;\n while (source[psz] === LEADER) {\n zeroes++;\n psz++;\n }\n // Allocate enough space in big-endian base256 representation.\n var size = (((source.length - psz) * FACTOR) + 1) >>> 0; // log(58) / log(256), rounded up.\n var b256 = new Uint8Array(size);\n // Process the characters.\n while (source[psz]) {\n // Decode character\n var carry = BASE_MAP[source.charCodeAt(psz)];\n // Invalid character\n if (carry === 255) { return }\n var i = 0;\n for (var it3 = size - 1; (carry !== 0 || i < length) && (it3 !== -1); it3--, i++) {\n carry += (BASE * b256[it3]) >>> 0;\n b256[it3] = (carry % 256) >>> 0;\n carry = (carry / 256) >>> 0;\n }\n if (carry !== 0) { throw new Error('Non-zero carry') }\n length = i;\n psz++;\n }\n // Skip trailing spaces.\n if (source[psz] === ' ') { return }\n // Skip leading zeroes in b256.\n var it4 = size - length;\n while (it4 !== size && b256[it4] === 0) {\n it4++;\n }\n var vch = new Uint8Array(zeroes + (size - it4));\n var j = zeroes;\n while (it4 !== size) {\n vch[j++] = b256[it4++];\n }\n return vch\n }\n /**\n * @param {string | string[]} string\n */\n function decode (string) {\n var buffer = decodeUnsafe(string);\n if (buffer) { return buffer }\n throw new Error(`Non-${name} character`)\n }\n return {\n encode: encode,\n decodeUnsafe: decodeUnsafe,\n decode: decode\n }\n}\nvar src = base;\n\nvar _brrp__multiformats_scope_baseX = src;\n\nexport default _brrp__multiformats_scope_baseX;\n", "import { coerce } from '../bytes.js'\nimport basex from '../vendor/base-x.js'\nimport type { BaseCodec, BaseDecoder, BaseEncoder, CombobaseDecoder, Multibase, MultibaseCodec, MultibaseDecoder, MultibaseEncoder, UnibaseDecoder } from './interface.js'\n\ninterface EncodeFn { (bytes: Uint8Array): string }\ninterface DecodeFn { (text: string): Uint8Array }\n\n/**\n * Class represents both BaseEncoder and MultibaseEncoder meaning it\n * can be used to encode to multibase or base encode without multibase\n * prefix.\n */\nclass Encoder<Base extends string, Prefix extends string> implements MultibaseEncoder<Prefix>, BaseEncoder {\n readonly name: Base\n readonly prefix: Prefix\n readonly baseEncode: EncodeFn\n\n constructor (name: Base, prefix: Prefix, baseEncode: EncodeFn) {\n this.name = name\n this.prefix = prefix\n this.baseEncode = baseEncode\n }\n\n encode (bytes: Uint8Array): Multibase<Prefix> {\n if (bytes instanceof Uint8Array) {\n return `${this.prefix}${this.baseEncode(bytes)}`\n } else {\n throw Error('Unknown type, must be binary type')\n }\n }\n}\n\n/**\n * Class represents both BaseDecoder and MultibaseDecoder so it could be used\n * to decode multibases (with matching prefix) or just base decode strings\n * with corresponding base encoding.\n */\nclass Decoder<Base extends string, Prefix extends string> implements MultibaseDecoder<Prefix>, UnibaseDecoder<Prefix>, BaseDecoder {\n readonly name: Base\n readonly prefix: Prefix\n readonly baseDecode: DecodeFn\n private readonly prefixCodePoint: number\n\n constructor (name: Base, prefix: Prefix, baseDecode: DecodeFn) {\n this.name = name\n this.prefix = prefix\n const prefixCodePoint = prefix.codePointAt(0)\n /* c8 ignore next 3 */\n if (prefixCodePoint === undefined) {\n throw new Error('Invalid prefix character')\n }\n this.prefixCodePoint = prefixCodePoint\n this.baseDecode = baseDecode\n }\n\n decode (text: string): Uint8Array {\n if (typeof text === 'string') {\n if (text.codePointAt(0) !== this.prefixCodePoint) {\n throw Error(`Unable to decode multibase string ${JSON.stringify(text)}, ${this.name} decoder only supports inputs prefixed with ${this.prefix}`)\n }\n return this.baseDecode(text.slice(this.prefix.length))\n } else {\n throw Error('Can only multibase decode strings')\n }\n }\n\n or<OtherPrefix extends string> (decoder: UnibaseDecoder<OtherPrefix> | ComposedDecoder<OtherPrefix>): ComposedDecoder<Prefix | OtherPrefix> {\n return or(this, decoder)\n }\n}\n\ntype Decoders<Prefix extends string> = Record<Prefix, UnibaseDecoder<Prefix>>\n\nclass ComposedDecoder<Prefix extends string> implements MultibaseDecoder<Prefix>, CombobaseDecoder<Prefix> {\n readonly decoders: Decoders<Prefix>\n\n constructor (decoders: Decoders<Prefix>) {\n this.decoders = decoders\n }\n\n or <OtherPrefix extends string> (decoder: UnibaseDecoder<OtherPrefix> | ComposedDecoder<OtherPrefix>): ComposedDecoder<Prefix | OtherPrefix> {\n return or(this, decoder)\n }\n\n decode (input: string): Uint8Array {\n const prefix = input[0] as Prefix\n const decoder = this.decoders[prefix]\n if (decoder != null) {\n return decoder.decode(input)\n } else {\n throw RangeError(`Unable to decode multibase string ${JSON.stringify(input)}, only inputs prefixed with ${Object.keys(this.decoders)} are supported`)\n }\n }\n}\n\nexport function or <L extends string, R extends string> (left: UnibaseDecoder<L> | CombobaseDecoder<L>, right: UnibaseDecoder<R> | CombobaseDecoder<R>): ComposedDecoder<L | R> {\n return new ComposedDecoder({\n ...(left.decoders ?? { [(left as UnibaseDecoder<L>).prefix]: left }),\n ...(right.decoders ?? { [(right as UnibaseDecoder<R>).prefix]: right })\n } as Decoders<L | R>)\n}\n\nexport class Codec<Base extends string, Prefix extends string> implements MultibaseCodec<Prefix>, MultibaseEncoder<Prefix>, MultibaseDecoder<Prefix>, BaseCodec, BaseEncoder, BaseDecoder {\n readonly name: Base\n readonly prefix: Prefix\n readonly baseEncode: EncodeFn\n readonly baseDecode: DecodeFn\n readonly encoder: Encoder<Base, Prefix>\n readonly decoder: Decoder<Base, Prefix>\n\n constructor (name: Base, prefix: Prefix, baseEncode: EncodeFn, baseDecode: DecodeFn) {\n this.name = name\n this.prefix = prefix\n this.baseEncode = baseEncode\n this.baseDecode = baseDecode\n this.encoder = new Encoder(name, prefix, baseEncode)\n this.decoder = new Decoder(name, prefix, baseDecode)\n }\n\n encode (input: Uint8Array): string {\n return this.encoder.encode(input)\n }\n\n decode (input: string): Uint8Array {\n return this.decoder.decode(input)\n }\n}\n\nexport function from <Base extends string, Prefix extends string> ({ name, prefix, encode, decode }: { name: Base, prefix: Prefix, encode: EncodeFn, decode: DecodeFn }): Codec<Base, Prefix> {\n return new Codec(name, prefix, encode, decode)\n}\n\nexport function baseX <Base extends string, Prefix extends string> ({ name, prefix, alphabet }: { name: Base, prefix: Prefix, alphabet: string }): Codec<Base, Prefix> {\n const { encode, decode } = basex(alphabet, name)\n return from({\n prefix,\n name,\n encode,\n decode: (text: string): Uint8Array => coerce(decode(text))\n })\n}\n\nfunction decode (string: string, alphabetIdx: Record<string, number>, bitsPerChar: number, name: string): Uint8Array {\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 = alphabetIdx[string[i]]\n if (value === undefined) {\n throw new SyntaxError(`Non-${name} character`)\n }\n\n // Append the bits to the buffer:\n buffer = (buffer << bitsPerChar) | value\n bits += bitsPerChar\n\n // Write out some bits if the buffer has a byte's worth:\n if (bits >= 8) {\n bits -= 8\n out[written++] = 0xff & (buffer >> bits)\n }\n }\n\n // Verify that we have received just enough bits:\n if (bits >= bitsPerChar || (0xff & (buffer << (8 - bits))) !== 0) {\n throw new SyntaxError('Unexpected end of data')\n }\n\n return out\n}\n\nfunction encode (data: Uint8Array, alphabet: string, bitsPerChar: number): string {\n const pad = alphabet[alphabet.length - 1] === '='\n const mask = (1 << bitsPerChar) - 1\n let out = ''\n\n let bits = 0 // Number of bits currently in the buffer\n let buffer = 0 // Bits waiting to be written out, MSB first\n for (let i = 0; i < data.length; ++i) {\n // Slurp data into the buffer:\n buffer = (buffer << 8) | data[i]\n bits += 8\n\n // Write out as much as we can:\n while (bits > bitsPerChar) {\n bits -= bitsPerChar\n out += alphabet[mask & (buffer >> bits)]\n }\n }\n\n // Partial character:\n if (bits !== 0) {\n out += alphabet[mask & (buffer << (bitsPerChar - bits))]\n }\n\n // Add padding characters until we hit a byte boundary:\n if (pad) {\n while (((out.length * bitsPerChar) & 7) !== 0) {\n out += '='\n }\n }\n\n return out\n}\n\nfunction createAlphabetIdx (alphabet: string): Record<string, number> {\n // Build the character lookup table:\n const alphabetIdx: Record<string, number> = {}\n for (let i = 0; i < alphabet.length; ++i) {\n alphabetIdx[alphabet[i]] = i\n }\n return alphabetIdx\n}\n\n/**\n * RFC4648 Factory\n */\nexport function rfc4648 <Base extends string, Prefix extends string> ({ name, prefix, bitsPerChar, alphabet }: { name: Base, prefix: Prefix, bitsPerChar: number, alphabet: string }): Codec<Base, Prefix> {\n const alphabetIdx = createAlphabetIdx(alphabet)\n return from({\n prefix,\n name,\n encode (input: Uint8Array): string {\n return encode(input, alphabet, bitsPerChar)\n },\n decode (input: string): Uint8Array {\n return decode(input, alphabetIdx, bitsPerChar, name)\n }\n })\n}\n", "import { baseX } from './base.js'\n\nexport const base36 = baseX({\n prefix: 'k',\n name: 'base36',\n alphabet: '0123456789abcdefghijklmnopqrstuvwxyz'\n})\n\nexport const base36upper = baseX({\n prefix: 'K',\n name: 'base36upper',\n alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'\n})\n", "import { baseX } from './base.js'\n\nexport const base58btc = baseX({\n name: 'base58btc',\n prefix: 'z',\n alphabet: '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'\n})\n\nexport const base58flickr = baseX({\n name: 'base58flickr',\n prefix: 'Z',\n alphabet: '123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ'\n})\n", "/* eslint-disable */\nvar encode_1 = encode;\n\nvar MSB = 0x80\n , REST = 0x7F\n , MSBALL = ~REST\n , INT = Math.pow(2, 31);\n\n/**\n * @param {number} num\n * @param {number[]} out\n * @param {number} offset\n */\nfunction encode(num, out, offset) {\n out = out || [];\n offset = offset || 0;\n var oldOffset = offset;\n\n while(num >= INT) {\n out[offset++] = (num & 0xFF) | MSB;\n num /= 128;\n }\n while(num & MSBALL) {\n out[offset++] = (num & 0xFF) | MSB;\n num >>>= 7;\n }\n out[offset] = num | 0;\n \n // @ts-ignore\n encode.bytes = offset - oldOffset + 1;\n \n return out\n}\n\nvar decode = read;\n\nvar MSB$1 = 0x80\n , REST$1 = 0x7F;\n\n/**\n * @param {string | any[]} buf\n * @param {number} offset\n */\nfunction read(buf, offset) {\n var res = 0\n , offset = offset || 0\n , shift = 0\n , counter = offset\n , b\n , l = buf.length;\n\n do {\n if (counter >= l) {\n // @ts-ignore\n read.bytes = 0;\n throw new RangeError('Could not decode varint')\n }\n b = buf[counter++];\n res += shift < 28\n ? (b & REST$1) << shift\n : (b & REST$1) * Math.pow(2, shift);\n shift += 7;\n } while (b >= MSB$1)\n\n // @ts-ignore\n read.bytes = counter - offset;\n\n return res\n}\n\nvar N1 = Math.pow(2, 7);\nvar N2 = Math.pow(2, 14);\nvar N3 = Math.pow(2, 21);\nvar N4 = Math.pow(2, 28);\nvar N5 = Math.pow(2, 35);\nvar N6 = Math.pow(2, 42);\nvar N7 = Math.pow(2, 49);\nvar N8 = Math.pow(2, 56);\nvar N9 = Math.pow(2, 63);\n\nvar length = function (/** @type {number} */ value) {\n return (\n value < N1 ? 1\n : value < N2 ? 2\n : value < N3 ? 3\n : value < N4 ? 4\n : value < N5 ? 5\n : value < N6 ? 6\n : value < N7 ? 7\n : value < N8 ? 8\n : value < N9 ? 9\n : 10\n )\n};\n\nvar varint = {\n encode: encode_1\n , decode: decode\n , encodingLength: length\n};\n\nvar _brrp_varint = varint;\n\nexport default _brrp_varint;\n", "import varint from './vendor/varint.js'\n\nexport function decode (data: Uint8Array, offset = 0): [number, number] {\n const code = varint.decode(data, offset)\n return [code, varint.decode.bytes]\n}\n\nexport function encodeTo (int: number, target: Uint8Array, offset = 0): Uint8Array {\n varint.encode(int, target, offset)\n return target\n}\n\nexport function encodingLength (int: number): number {\n return varint.encodingLength(int)\n}\n", "import { coerce, equals as equalBytes } from '../bytes.js'\nimport * as varint from '../varint.js'\nimport type { MultihashDigest } from './interface.js'\n\n/**\n * Creates a multihash digest.\n */\nexport function create <Code extends number> (code: Code, digest: Uint8Array): Digest<Code, number> {\n const size = digest.byteLength\n const sizeOffset = varint.encodingLength(code)\n const digestOffset = sizeOffset + varint.encodingLength(size)\n\n const bytes = new Uint8Array(digestOffset + size)\n varint.encodeTo(code, bytes, 0)\n varint.encodeTo(size, bytes, sizeOffset)\n bytes.set(digest, digestOffset)\n\n return new Digest(code, size, digest, bytes)\n}\n\n/**\n * Turns bytes representation of multihash digest into an instance.\n */\nexport function decode (multihash: Uint8Array): MultihashDigest {\n const bytes = coerce(multihash)\n const [code, sizeOffset] = varint.decode(bytes)\n const [size, digestOffset] = varint.decode(bytes.subarray(sizeOffset))\n const digest = bytes.subarray(sizeOffset + digestOffset)\n\n if (digest.byteLength !== size) {\n throw new Error('Incorrect length')\n }\n\n return new Digest(code, size, digest, bytes)\n}\n\nexport function equals (a: MultihashDigest, b: unknown): b is MultihashDigest {\n if (a === b) {\n return true\n } else {\n const data = b as { code?: unknown, size?: unknown, bytes?: unknown }\n\n return (\n a.code === data.code &&\n a.size === data.size &&\n data.bytes instanceof Uint8Array &&\n equalBytes(a.bytes, data.bytes)\n )\n }\n}\n\n/**\n * Represents a multihash digest which carries information about the\n * hashing algorithm and an actual hash digest.\n */\nexport class Digest<Code extends number, Size extends number> implements MultihashDigest {\n readonly code: Code\n readonly size: Size\n readonly digest: Uint8Array\n readonly bytes: Uint8Array\n\n /**\n * Creates a multihash digest.\n */\n constructor (code: Code, size: Size, digest: Uint8Array, bytes: Uint8Array) {\n this.code = code\n this.size = size\n this.digest = digest\n this.bytes = bytes\n }\n}\n\n/**\n * Used to check that the passed multihash has the passed code\n */\nexport function hasCode <T extends number> (digest: MultihashDigest, code: T): digest is MultihashDigest<T> {\n return digest.code === code\n}\n", "import { base32 } from './bases/base32.js'\nimport { base36 } from './bases/base36.js'\nimport { base58btc } from './bases/base58.js'\nimport { coerce } from './bytes.js'\nimport * as Digest from './hashes/digest.js'\nimport * as varint from './varint.js'\nimport type * as API from './link/interface.js'\n\n// This way TS will also expose all the types from module\nexport * from './link/interface.js'\n\nexport function format <T extends API.Link<unknown, number, number, API.Version>, Prefix extends string> (link: T, base?: API.MultibaseEncoder<Prefix>): API.ToString<T, Prefix> {\n const { bytes, version } = link\n switch (version) {\n case 0:\n return toStringV0(\n bytes,\n baseCache(link),\n base as API.MultibaseEncoder<'z'> ?? base58btc.encoder\n )\n default:\n return toStringV1(\n bytes,\n baseCache(link),\n (base ?? base32.encoder) as API.MultibaseEncoder<Prefix>\n )\n }\n}\n\nexport function toJSON <Link extends API.UnknownLink> (link: Link): API.LinkJSON<Link> {\n return {\n '/': format(link)\n }\n}\n\nexport function fromJSON <Link extends API.UnknownLink> (json: API.LinkJSON<Link>): CID<unknown, number, number, API.Version> {\n return CID.parse(json['/'])\n}\n\nconst cache = new WeakMap<API.UnknownLink, Map<string, string>>()\n\nfunction baseCache (cid: API.UnknownLink): Map<string, string> {\n const baseCache = cache.get(cid)\n if (baseCache == null) {\n const baseCache = new Map()\n cache.set(cid, baseCache)\n return baseCache\n }\n return baseCache\n}\n\nexport class CID<Data = unknown, Format extends number = number, Alg extends number = number, Version extends API.Version = API.Version> implements API.Link<Data, Format, Alg, Version> {\n readonly code: Format\n readonly version: Version\n readonly multihash: API.MultihashDigest<Alg>\n readonly bytes: Uint8Array\n readonly '/': Uint8Array\n\n /**\n * @param version - Version of the CID\n * @param code - Code of the codec content is encoded in, see https://github.com/multiformats/multicodec/blob/master/table.csv\n * @param multihash - (Multi)hash of the of the content.\n */\n constructor (version: Version, code: Format, multihash: API.MultihashDigest<Alg>, bytes: Uint8Array) {\n this.code = code\n this.version = version\n this.multihash = multihash\n this.bytes = bytes\n\n // flag to serializers that this is a CID and\n // should be treated specially\n this['/'] = bytes\n }\n\n /**\n * Signalling `cid.asCID === cid` has been replaced with `cid['/'] === cid.bytes`\n * please either use `CID.asCID(cid)` or switch to new signalling mechanism\n *\n * @deprecated\n */\n get asCID (): this {\n return this\n }\n\n // ArrayBufferView\n get byteOffset (): number {\n return this.bytes.byteOffset\n }\n\n // ArrayBufferView\n get byteLength (): number {\n return this.bytes.byteLength\n }\n\n toV0 (): CID<Data, API.DAG_PB, API.SHA_256, 0> {\n switch (this.version) {\n case 0: {\n return this as CID<Data, API.DAG_PB, API.SHA_256, 0>\n }\n case 1: {\n const { code, multihash } = this\n\n if (code !== DAG_PB_CODE) {\n throw new Error('Cannot convert a non dag-pb CID to CIDv0')\n }\n\n // sha2-256\n if (multihash.code !== SHA_256_CODE) {\n throw new Error('Cannot convert non sha2-256 multihash CID to CIDv0')\n }\n\n return (\n CID.createV0(\n multihash as API.MultihashDigest<API.SHA_256>\n )\n )\n }\n default: {\n throw Error(\n `Can not convert CID version ${this.version} to version 0. This is a bug please report`\n )\n }\n }\n }\n\n toV1 (): CID<Data, Format, Alg, 1> {\n switch (this.version) {\n case 0: {\n const { code, digest } = this.multihash\n const multihash = Digest.create(code, digest)\n return (\n CID.createV1(this.code, multihash)\n )\n }\n case 1: {\n return this as CID<Data, Format, Alg, 1>\n }\n default: {\n throw Error(\n `Can not convert CID version ${this.version} to version 1. This is a bug please report`\n )\n }\n }\n }\n\n equals (other: unknown): other is CID<Data, Format, Alg, Version> {\n return CID.equals(this, other)\n }\n\n static equals <Data, Format extends number, Alg extends number, Version extends API.Version>(self: API.Link<Data, Format, Alg, Version>, other: unknown): other is CID {\n const unknown = other as { code?: unknown, version?: unknown, multihash?: unknown }\n return (\n unknown != null &&\n self.code === unknown.code &&\n self.version === unknown.version &&\n Digest.equals(self.multihash, unknown.multihash)\n )\n }\n\n toString (base?: API.MultibaseEncoder<string>): string {\n return format(this, base)\n }\n\n toJSON (): API.LinkJSON<this> {\n return { '/': format(this) }\n }\n\n link (): this {\n return this\n }\n\n readonly [Symbol.toStringTag] = 'CID';\n\n // Legacy\n\n [Symbol.for('nodejs.util.inspect.custom')] (): string {\n return `CID(${this.toString()})`\n }\n\n /**\n * Takes any input `value` and returns a `CID` instance if it was\n * a `CID` otherwise returns `null`. If `value` is instanceof `CID`\n * it will return value back. If `value` is not instance of this CID\n * class, but is compatible CID it will return new instance of this\n * `CID` class. Otherwise returns null.\n *\n * This allows two different incompatible versions of CID library to\n * co-exist and interop as long as binary interface is compatible.\n */\n static asCID <Data, Format extends number, Alg extends number, Version extends API.Version, U>(input: API.Link<Data, Format, Alg, Version> | U): CID<Data, Format, Alg, Version> | null {\n if (input == null) {\n return null\n }\n\n const value = input as any\n if (value instanceof CID) {\n // If value is instance of CID then we're all set.\n return value\n } else if ((value['/'] != null && value['/'] === value.bytes) || value.asCID === value) {\n // If value isn't instance of this CID class but `this.asCID === this` or\n // `value['/'] === value.bytes` is true it is CID instance coming from a\n // different implementation (diff version or duplicate). In that case we\n // rebase it to this `CID` implementation so caller is guaranteed to get\n // instance with expected API.\n const { version, code, multihash, bytes } = value\n return new CID(\n version,\n code,\n multihash as API.MultihashDigest<Alg>,\n bytes ?? encodeCID(version, code, multihash.bytes)\n )\n } else if (value[cidSymbol] === true) {\n // If value is a CID from older implementation that used to be tagged via\n // symbol we still rebase it to the this `CID` implementation by\n // delegating that to a constructor.\n const { version, multihash, code } = value\n const digest = Digest.decode(multihash) as API.MultihashDigest<Alg>\n return CID.create(version, code, digest)\n } else {\n // Otherwise value is not a CID (or an incompatible version of it) in\n // which case we return `null`.\n return null\n }\n }\n\n /**\n * @param version - Version of the CID\n * @param code - Code of the codec content is encoded in, see https://github.com/multiformats/multicodec/blob/master/table.csv\n * @param digest - (Multi)hash of the of the content.\n */\n static create <Data, Format extends number, Alg extends number, Version extends API.Version>(version: Version, code: Format, digest: API.MultihashDigest<Alg>): CID<Data, Format, Alg, Version> {\n if (typeof code !== 'number') {\n throw new Error('String codecs are no longer supported')\n }\n\n if (!(digest.bytes instanceof Uint8Array)) {\n throw new Error('Invalid digest')\n }\n\n switch (version) {\n case 0: {\n if (code !== DAG_PB_CODE) {\n throw new Error(\n `Version 0 CID must use dag-pb (code: ${DAG_PB_CODE}) block encoding`\n )\n } else {\n return new CID(version, code, digest, digest.bytes)\n }\n }\n case 1: {\n const bytes = encodeCID(version, code, digest.bytes)\n return new CID(version, code, digest, bytes)\n }\n default: {\n throw new Error('Invalid version')\n }\n }\n }\n\n /**\n * Simplified version of `create` for CIDv0.\n */\n static createV0 <T = unknown>(digest: API.MultihashDigest<typeof SHA_256_CODE>): CID<T, typeof DAG_PB_CODE, typeof SHA_256_CODE, 0> {\n return CID.create(0, DAG_PB_CODE, digest)\n }\n\n /**\n * Simplified version of `create` for CIDv1.\n *\n * @param code - Content encoding format code.\n * @param digest - Multihash of the content.\n */\n static createV1 <Data, Code extends number, Alg extends number>(code: Code, digest: API.MultihashDigest<Alg>): CID<Data, Code, Alg, 1> {\n return CID.create(1, code, digest)\n }\n\n /**\n * Decoded a CID from its binary representation. The byte array must contain\n * only the CID with no additional bytes.\n *\n * An error will be thrown if the bytes provided do not contain a valid\n * binary representation of a CID.\n */\n static decode <Data, Code extends number, Alg extends number, Version extends API.Version>(bytes: API.ByteView<API.Link<Data, Code, Alg, Version>>): CID<Data, Code, Alg, Version> {\n const [cid, remainder] = CID.decodeFirst(bytes)\n if (remainder.length !== 0) {\n throw new Error('Incorrect length')\n }\n return cid\n }\n\n /**\n * Decoded a CID from its binary representation at the beginning of a byte\n * array.\n *\n * Returns an array with the first element containing the CID and the second\n * element containing the remainder of the original byte array. The remainder\n * will be a zero-length byte array if the provided bytes only contained a\n * binary CID representation.\n */\n static decodeFirst <T, C extends number, A extends number, V extends API.Version>(bytes: API.ByteView<API.Link<T, C, A, V>>): [CID<T, C, A, V>, Uint8Array] {\n const specs = CID.inspectBytes(bytes)\n const prefixSize = specs.size - specs.multihashSize\n const multihashBytes = coerce(\n bytes.subarray(prefixSize, prefixSize + specs.multihashSize)\n )\n if (multihashBytes.byteLength !== specs.multihashSize) {\n throw new Error('Incorrect length')\n }\n const digestBytes = multihashBytes.subarray(\n specs.multihashSize - specs.digestSize\n )\n const digest = new Digest.Digest(\n specs.multihashCode,\n specs.digestSize,\n digestBytes,\n multihashBytes\n )\n const cid =\n specs.version === 0\n ? CID.createV0(digest as API.MultihashDigest<API.SHA_256>)\n : CID.createV1(specs.codec, digest)\n return [cid as CID<T, C, A, V>, bytes.subarray(specs.size)]\n }\n\n /**\n * Inspect the initial bytes of a CID to determine its properties.\n *\n * Involves decoding up to 4 varints. Typically this will require only 4 to 6\n * bytes but for larger multicodec code values and larger multihash digest\n * lengths these varints can be quite large. It is recommended that at least\n * 10 bytes be made available in the `initialBytes` argument for a complete\n * inspection.\n */\n static inspectBytes <T, C extends number, A extends number, V extends API.Version>(initialBytes: API.ByteView<API.Link<T, C, A, V>>): { version: V, codec: C, multihashCode: A, digestSize: number, multihashSize: number, size: number } {\n let offset = 0\n const next = (): number => {\n const [i, length] = varint.decode(initialBytes.subarray(offset))\n offset += length\n return i\n }\n\n let version = next() as V\n let codec = DAG_PB_CODE as C\n if (version as number === 18) {\n // CIDv0\n version = 0 as V\n offset = 0\n } else {\n codec = next() as C\n }\n\n if (version !== 0 && version !== 1) {\n throw new RangeError(`Invalid CID version ${version}`)\n }\n\n const prefixSize = offset\n const multihashCode = next() as A // multihash code\n const digestSize = next() // multihash length\n const size = offset + digestSize\n const multihashSize = size - prefixSize\n\n return { version, codec, multihashCode, digestSize, multihashSize, size }\n }\n\n /**\n * Takes cid in a string representation and creates an instance. If `base`\n * decoder is not provided will use a default from the configuration. It will\n * throw an error if encoding of the CID is not compatible with supplied (or\n * a default decoder).\n */\n static parse <Prefix extends string, Data, Code extends number, Alg extends number, Version extends API.Version>(source: API.ToString<API.Link<Data, Code, Alg, Version>, Prefix>, base?: API.MultibaseDecoder<Prefix>): CID<Data, Code, Alg, Version> {\n const [prefix, bytes] = parseCIDtoBytes(source, base)\n\n const cid = CID.decode(bytes)\n\n if (cid.version === 0 && source[0] !== 'Q') {\n throw Error('Version 0 CID string must not include multibase prefix')\n }\n\n // Cache string representation to avoid computing it on `this.toString()`\n baseCache(cid).set(prefix, source)\n\n return cid\n }\n}\n\nfunction parseCIDtoBytes <Prefix extends string, Data, Code extends number, Alg extends number, Version extends API.Version> (source: API.ToString<API.Link<Data, Code, Alg, Version>, Prefix>, base?: API.MultibaseDecoder<Prefix>): [Prefix, API.ByteView<API.Link<Data, Code, Alg, Version>>] {\n switch (source[0]) {\n // CIDv0 is parsed differently\n case 'Q': {\n const decoder = base ?? base58btc\n return [\n base58btc.prefix as Prefix,\n decoder.decode(`${base58btc.prefix}${source}`)\n ]\n }\n case base58btc.prefix: {\n const decoder = base ?? base58btc\n return [base58btc.prefix as Prefix, decoder.decode(source)]\n }\n case base32.prefix: {\n const decoder = base ?? base32\n return [base32.prefix as Prefix, decoder.decode(source)]\n }\n case base36.prefix: {\n const decoder = base ?? base36\n return [base36.prefix as Prefix, decoder.decode(source)]\n }\n default: {\n if (base == null) {\n throw Error(\n 'To parse non base32, base36 or base58btc encoded CID multibase decoder must be provided'\n )\n }\n return [source[0] as Prefix, base.decode(source)]\n }\n }\n}\n\nfunction toStringV0 (bytes: Uint8Array, cache: Map<string, string>, base: API.MultibaseEncoder<'z'>): string {\n const { prefix } = base\n if (prefix !== base58btc.prefix) {\n throw Error(`Cannot string encode V0 in ${base.name} encoding`)\n }\n\n const cid = cache.get(prefix)\n if (cid == null) {\n const cid = base.encode(bytes).slice(1)\n cache.set(prefix, cid)\n return cid\n } else {\n return cid\n }\n}\n\nfunction toStringV1 <Prefix extends string> (bytes: Uint8Array, cache: Map<string, string>, base: API.MultibaseEncoder<Prefix>): string {\n const { prefix } = base\n const cid = cache.get(prefix)\n if (cid == null) {\n const cid = base.encode(bytes)\n cache.set(prefix, cid)\n return cid\n } else {\n return cid\n }\n}\n\nconst DAG_PB_CODE = 0x70\nconst SHA_256_CODE = 0x12\n\nfunction encodeCID (version: API.Version, code: number, multihash: Uint8Array): Uint8Array {\n const codeOffset = varint.encodingLength(version)\n const hashOffset = codeOffset + varint.encodingLength(code)\n const bytes = new Uint8Array(hashOffset + multihash.byteLength)\n varint.encodeTo(version, bytes, 0)\n varint.encodeTo(code, bytes, codeOffset)\n bytes.set(multihash, hashOffset)\n return bytes\n}\n\nconst cidSymbol = Symbol.for('@ipld/js-cid/CID')\n", "const textDecoder = new TextDecoder()\n\n/**\n * @typedef {import('./interface.js').RawPBLink} RawPBLink\n */\n\n/**\n * @typedef {import('./interface.js').RawPBNode} RawPBNode\n */\n\n/**\n * @param {Uint8Array} bytes\n * @param {number} offset\n * @returns {[number, number]}\n */\nfunction decodeVarint (bytes, offset) {\n let v = 0\n\n for (let shift = 0; ; shift += 7) {\n /* c8 ignore next 3 */\n if (shift >= 64) {\n throw new Error('protobuf: varint overflow')\n }\n /* c8 ignore next 3 */\n if (offset >= bytes.length) {\n throw new Error('protobuf: unexpected end of data')\n }\n\n const b = bytes[offset++]\n v += shift < 28 ? (b & 0x7f) << shift : (b & 0x7f) * (2 ** shift)\n if (b < 0x80) {\n break\n }\n }\n return [v, offset]\n}\n\n/**\n * @param {Uint8Array} bytes\n * @param {number} offset\n * @returns {[Uint8Array, number]}\n */\nfunction decodeBytes (bytes, offset) {\n let byteLen\n ;[byteLen, offset] = decodeVarint(bytes, offset)\n const postOffset = offset + byteLen\n\n /* c8 ignore next 3 */\n if (byteLen < 0 || postOffset < 0) {\n throw new Error('protobuf: invalid length')\n }\n /* c8 ignore next 3 */\n if (postOffset > bytes.length) {\n throw new Error('protobuf: unexpected end of data')\n }\n\n return [bytes.subarray(offset, postOffset), postOffset]\n}\n\n/**\n * @param {Uint8Array} bytes\n * @param {number} index\n * @returns {[number, number, number]}\n */\nfunction decodeKey (bytes, index) {\n let wire\n ;[wire, index] = decodeVarint(bytes, index)\n // [wireType, fieldNum, newIndex]\n return [wire & 0x7, wire >> 3, index]\n}\n\n/**\n * @param {Uint8Array} bytes\n * @returns {RawPBLink}\n */\nfunction decodeLink (bytes) {\n /** @type {RawPBLink} */\n const link = {}\n const l = bytes.length\n let index = 0\n\n while (index < l) {\n let wireType, fieldNum\n ;[wireType, fieldNum, index] = decodeKey(bytes, index)\n\n if (fieldNum === 1) {\n if (link.Hash) {\n throw new Error('protobuf: (PBLink) duplicate Hash section')\n }\n if (wireType !== 2) {\n throw new Error(`protobuf: (PBLink) wrong wireType (${wireType}) for Hash`)\n }\n if (link.Name !== undefined) {\n throw new Error('protobuf: (PBLink) invalid order, found Name before Hash')\n }\n if (link.Tsize !== undefined) {\n throw new Error('protobuf: (PBLink) invalid order, found Tsize before Hash')\n }\n\n [link.Hash, index] = decodeBytes(bytes, index)\n } else if (fieldNum === 2) {\n if (link.Name !== undefined) {\n throw new Error('protobuf: (PBLink) duplicate Name section')\n }\n if (wireType !== 2) {\n throw new Error(`protobuf: (PBLink) wrong wireType (${wireType}) for Name`)\n }\n if (link.Tsize !== undefined) {\n throw new Error('protobuf: (PBLink) invalid order, found Tsize before Name')\n }\n\n let byts\n ;[byts, index] = decodeBytes(bytes, index)\n link.Name = textDecoder.decode(byts)\n } else if (fieldNum === 3) {\n if (link.Tsize !== undefined) {\n throw new Error('protobuf: (PBLink) duplicate Tsize section')\n }\n if (wireType !== 0) {\n throw new Error(`protobuf: (PBLink) wrong wireType (${wireType}) for Tsize`)\n }\n\n [link.Tsize, index] = decodeVarint(bytes, index)\n } else {\n throw new Error(`protobuf: (PBLink) invalid fieldNumber, expected 1, 2 or 3, got ${fieldNum}`)\n }\n }\n\n /* c8 ignore next 3 */\n if (index > l) {\n throw new Error('protobuf: (PBLink) unexpected end of data')\n }\n\n return link\n}\n\n/**\n * @param {Uint8Array} bytes\n * @returns {RawPBNode}\n */\nexport function decodeNode (bytes) {\n const l = bytes.length\n let index = 0\n /** @type {RawPBLink[]|void} */\n let links = undefined // eslint-disable-line no-undef-init\n let linksBeforeData = false\n /** @type {Uint8Array|void} */\n let data = undefined // eslint-disable-line no-undef-init\n\n while (index < l) {\n let wireType, fieldNum\n ;[wireType, fieldNum, index] = decodeKey(bytes, index)\n\n if (wireType !== 2) {\n throw new Error(`protobuf: (PBNode) invalid wireType, expected 2, got ${wireType}`)\n }\n\n if (fieldNum === 1) {\n if (data) {\n throw new Error('protobuf: (PBNode) duplicate Data section')\n }\n\n [data, index] = decodeBytes(bytes, index)\n if (links) {\n linksBeforeData = true\n }\n } else if (fieldNum === 2) {\n if (linksBeforeData) { // interleaved Links/Data/Links\n throw new Error('protobuf: (PBNode) duplicate Links section')\n } else if (!links) {\n links = []\n }\n let byts\n ;[byts, index] = decodeBytes(bytes, index)\n links.push(decodeLink(byts))\n } else {\n throw new Error(`protobuf: (PBNode) invalid fieldNumber, expected 1 or 2, got ${fieldNum}`)\n }\n }\n\n /* c8 ignore next 3 */\n if (index > l) {\n throw new Error('protobuf: (PBNode) unexpected end of data')\n }\n\n /** @type {RawPBNode} */\n const node = {}\n if (data) {\n node.Data = data\n }\n node.Links = links || []\n return node\n}\n", "const textEncoder = new TextEncoder()\nconst maxInt32 = 2 ** 32\nconst maxUInt32 = 2 ** 31\n\n/**\n * @typedef {import('./interface.js').RawPBLink} RawPBLink\n */\n\n/**\n * @typedef {import('./interface.js').RawPBNode} RawPBNode\n */\n\n// the encoders work backward from the end of the bytes array\n\n/**\n * encodeLink() is passed a slice of the parent byte array that ends where this\n * link needs to end, so it packs to the right-most part of the passed `bytes`\n *\n * @param {RawPBLink} link\n * @param {Uint8Array} bytes\n * @returns {number}\n */\nfunction encodeLink (link, bytes) {\n let i = bytes.length\n\n if (typeof link.Tsize === 'number') {\n if (link.Tsize < 0) {\n throw new Error('Tsize cannot be negative')\n }\n if (!Number.isSafeInteger(link.Tsize)) {\n throw new Error('Tsize too large for encoding')\n }\n i = encodeVarint(bytes, i, link.Tsize) - 1\n bytes[i] = 0x18\n }\n\n if (typeof link.Name === 'string') {\n const nameBytes = textEncoder.encode(link.Name)\n i -= nameBytes.length\n bytes.set(nameBytes, i)\n i = encodeVarint(bytes, i, nameBytes.length) - 1\n bytes[i] = 0x12\n }\n\n if (link.Hash) {\n i -= link.Hash.length\n bytes.set(link.Hash, i)\n i = encodeVarint(bytes, i, link.Hash.length) - 1\n bytes[i] = 0xa\n }\n\n return bytes.length - i\n}\n\n/**\n * Encodes a PBNode into a new byte array of precisely the correct size\n *\n * @param {RawPBNode} node\n * @returns {Uint8Array}\n */\nexport function encodeNode (node) {\n const size = sizeNode(node)\n const bytes = new Uint8Array(size)\n let i = size\n\n if (node.Data) {\n i -= node.Data.length\n bytes.set(node.Data, i)\n i = encodeVarint(bytes, i, node.Data.length) - 1\n bytes[i] = 0xa\n }\n\n if (node.Links) {\n for (let index = node.Links.length - 1; index >= 0; index--) {\n const size = encodeLink(node.Links[index], bytes.subarray(0, i))\n i -= size\n i = encodeVarint(bytes, i, size) - 1\n bytes[i] = 0x12\n }\n }\n\n return bytes\n}\n\n/**\n * work out exactly how many bytes this link takes up\n *\n * @param {RawPBLink} link\n * @returns\n */\nfunction sizeLink (link) {\n let n = 0\n\n if (link.Hash) {\n const l = link.Hash.length\n n += 1 + l + sov(l)\n }\n\n if (typeof link.Name === 'string') {\n const l = textEncoder.encode(link.Name).length\n n += 1 + l + sov(l)\n }\n\n if (typeof link.Tsize === 'number') {\n n += 1 + sov(link.Tsize)\n }\n\n return n\n}\n\n/**\n * Work out exactly how many bytes this node takes up\n *\n * @param {RawPBNode} node\n * @returns {number}\n */\nfunction sizeNode (node) {\n let n = 0\n\n if (node.Data) {\n const l = node.Data.length\n n += 1 + l + sov(l)\n }\n\n if (node.Links) {\n for (const link of node.Links) {\n const l = sizeLink(link)\n n += 1 + l + sov(l)\n }\n }\n\n return n\n}\n\n/**\n * @param {Uint8Array} bytes\n * @param {number} offset\n * @param {number} v\n * @returns {number}\n */\nfunction encodeVarint (bytes, offset, v) {\n offset -= sov(v)\n const base = offset\n\n while (v >= maxUInt32) {\n bytes[offset++] = (v & 0x7f) | 0x80\n v /= 128\n }\n\n while (v >= 128) {\n bytes[offset++] = (v & 0x7f) | 0x80\n v >>>= 7\n }\n\n bytes[offset] = v\n\n return base\n}\n\n/**\n * size of varint\n *\n * @param {number} x\n * @returns {number}\n */\nfunction sov (x) {\n if (x % 2 === 0) {\n x++\n }\n return Math.floor((len64(x) + 6) / 7)\n}\n\n/**\n * golang math/bits, how many bits does it take to represent this integer?\n *\n * @param {number} x\n * @returns {number}\n */\nfunction len64 (x) {\n let n = 0\n if (x >= maxInt32) {\n x = Math.floor(x / maxInt32)\n n = 32\n }\n if (x >= (1 << 16)) {\n x >>>= 16\n n += 16\n }\n if (x >= (1 << 8)) {\n x >>>= 8\n n += 8\n }\n return n + len8tab[x]\n}\n\n// golang math/bits\nconst len8tab = [\n 0, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4,\n 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,\n 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,\n 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,\n 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,\n 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,\n 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,\n 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,\n 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,\n 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,\n 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,\n 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,\n 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,\n 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,\n 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,\n 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8\n]\n", "import { CID } from 'multiformats/cid'\n\n/* eslint-disable complexity, no-nested-ternary */\n\n/**\n * @typedef {import('./interface.js').PBLink} PBLink\n * @typedef {import('./interface.js').PBNode} PBNode\n */\n\n/**\n * @template T\n * @typedef {import('multiformats/codecs/interface').ByteView<T>} ByteView\n */\n\n/**\n * @template T\n * @typedef {import('multiformats/codecs/interface').ArrayBufferView<T>} ArrayBufferView\n */\n\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\n/**\n * @template T\n * @param {ByteView<T> | ArrayBufferView<T>} buf\n * @returns {ByteView<T>}\n */\nexport function toByteView (buf) {\n if (buf instanceof ArrayBuffer) {\n return new Uint8Array(buf, 0, buf.byteLength)\n }\n\n return buf\n}\n", "export class InvalidTypeError extends Error {\n static name = 'InvalidTypeError'\n static code = 'ERR_INVALID_TYPE'\n name = InvalidTypeError.name\n code = InvalidTypeError.code\n\n constructor (message = 'Invalid type') {\n super(message)\n }\n}\n\nexport class InvalidUnixFSMessageError extends Error {\n static name = 'InvalidUnixFSMessageError'\n static code = 'ERR_INVALID_MESSAGE'\n name = InvalidUnixFSMessageError.name\n code = InvalidUnixFSMessageError.code\n\n constructor (message = 'Invalid message') {\n super(message)\n }\n}\n", "/* eslint-disable no-fallthrough */\nimport { allocUnsafe } from 'uint8arrays/alloc'\nimport type { Uint8ArrayList } from 'uint8arraylist'\n\nconst N1 = Math.pow(2, 7)\nconst N2 = Math.pow(2, 14)\nconst N3 = Math.pow(2, 21)\nconst N4 = Math.pow(2, 28)\nconst N5 = Math.pow(2, 35)\nconst N6 = Math.pow(2, 42)\nconst N7 = Math.pow(2, 49)\n\n/** Most significant bit of a byte */\nconst MSB = 0x80\n/** Rest of the bits in a byte */\nconst REST = 0x7f\n\nexport function encodingLength (value: number): number {\n if (value < N1) {\n return 1\n }\n\n if (value < N2) {\n return 2\n }\n\n if (value < N3) {\n return 3\n }\n\n if (value < N4) {\n return 4\n }\n\n if (value < N5) {\n return 5\n }\n\n if (value < N6) {\n return 6\n }\n\n if (value < N7) {\n return 7\n }\n\n if (Number.MAX_SAFE_INTEGER != null && value > Number.MAX_SAFE_INTEGER) {\n throw new RangeError('Could not encode varint')\n }\n\n return 8\n}\n\nexport function encodeUint8Array (value: number, buf: Uint8Array, offset: number = 0): Uint8Array {\n switch (encodingLength(value)) {\n case 8: {\n buf[offset++] = (value & 0xFF) | MSB\n value /= 128\n }\n case 7: {\n buf[offset++] = (value & 0xFF) | MSB\n value /= 128\n }\n case 6: {\n buf[offset++] = (value & 0xFF) | MSB\n value /= 128\n }\n case 5: {\n buf[offset++] = (value & 0xFF) | MSB\n value /= 128\n }\n case 4: {\n buf[offset++] = (value & 0xFF) | MSB\n value >>>= 7\n }\n case 3: {\n buf[offset++] = (value & 0xFF) | MSB\n value >>>= 7\n }\n case 2: {\n buf[offset++] = (value & 0xFF) | MSB\n value >>>= 7\n }\n case 1: {\n buf[offset++] = (value & 0xFF)\n value >>>= 7\n break\n }\n default: throw new Error('unreachable')\n }\n return buf\n}\n\nexport function encodeUint8ArrayList (value: number, buf: Uint8ArrayList, offset: number = 0): Uint8ArrayList {\n switch (encodingLength(value)) {\n case 8: {\n buf.set(offset++, (value & 0xFF) | MSB)\n value /= 128\n }\n case 7: {\n buf.set(offset++, (value & 0xFF) | MSB)\n value /= 128\n }\n case 6: {\n buf.set(offset++, (value & 0xFF) | MSB)\n value /= 128\n }\n case 5: {\n buf.set(offset++, (value & 0xFF) | MSB)\n value /= 128\n }\n case 4: {\n buf.set(offset++, (value & 0xFF) | MSB)\n value >>>= 7\n }\n case 3: {\n buf.set(offset++, (value & 0xFF) | MSB)\n value >>>= 7\n }\n case 2: {\n buf.set(offset++, (value & 0xFF) | MSB)\n value >>>= 7\n }\n case 1: {\n buf.set(offset++, (value & 0xFF))\n value >>>= 7\n break\n }\n default: throw new Error('unreachable')\n }\n return buf\n}\n\nexport function decodeUint8Array (buf: Uint8Array, offset: number): number {\n let b = buf[offset]\n let res = 0\n\n res += b & REST\n if (b < MSB) {\n return res\n }\n\n b = buf[offset + 1]\n res += (b & REST) << 7\n if (b < MSB) {\n return res\n }\n\n b = buf[offset + 2]\n res += (b & REST) << 14\n if (b < MSB) {\n return res\n }\n\n b = buf[offset + 3]\n res += (b & REST) << 21\n if (b < MSB) {\n return res\n }\n\n b = buf[offset + 4]\n res += (b & REST) * N4\n if (b < MSB) {\n return res\n }\n\n b = buf[offset + 5]\n res += (b & REST) * N5\n if (b < MSB) {\n return res\n }\n\n b = buf[offset + 6]\n res += (b & REST) * N6\n if (b < MSB) {\n return res\n }\n\n b = buf[offset + 7]\n res += (b & REST) * N7\n if (b < MSB) {\n return res\n }\n\n throw new RangeError('Could not decode varint')\n}\n\nexport function decodeUint8ArrayList (buf: Uint8ArrayList, offset: number): number {\n let b = buf.get(offset)\n let res = 0\n\n res += b & REST\n if (b < MSB) {\n return res\n }\n\n b = buf.get(offset + 1)\n res += (b & REST) << 7\n if (b < MSB) {\n return res\n }\n\n b = buf.get(offset + 2)\n res += (b & REST) << 14\n if (b < MSB) {\n return res\n }\n\n b = buf.get(offset + 3)\n res += (b & REST) << 21\n if (b < MSB) {\n return res\n }\n\n b = buf.get(offset + 4)\n res += (b & REST) * N4\n if (b < MSB) {\n return res\n }\n\n b = buf.get(offset + 5)\n res += (b & REST) * N5\n if (b < MSB) {\n return res\n }\n\n b = buf.get(offset + 6)\n res += (b & REST) * N6\n if (b < MSB) {\n return res\n }\n\n b = buf.get(offset + 7)\n res += (b & REST) * N7\n if (b < MSB) {\n return res\n }\n\n throw new RangeError('Could not decode varint')\n}\n\nexport function encode (value: number): Uint8Array\nexport function encode (value: number, buf: Uint8Array, offset?: number): Uint8Array\nexport function encode (value: number, buf: Uint8ArrayList, offset?: number): Uint8ArrayList\nexport function encode <T extends Uint8Array | Uint8ArrayList = Uint8Array> (value: number, buf?: T, offset: number = 0): T {\n if (buf == null) {\n buf = allocUnsafe(encodingLength(value)) as T\n }\n if (buf instanceof Uint8Array) {\n return encodeUint8Array(value, buf, offset) as T\n } else {\n return encodeUint8ArrayList(value, buf, offset) as T\n }\n}\n\nexport function decode (buf: Uint8ArrayList | Uint8Array, offset: number = 0): number {\n if (buf instanceof Uint8Array) {\n return decodeUint8Array(buf, offset)\n } else {\n return decodeUint8ArrayList(buf, offset)\n }\n}\n", "const f32 = new Float32Array([-0])\nconst f8b = new Uint8Array(f32.buffer)\n\n/**\n * Writes a 32 bit float to a buffer using little endian byte order\n */\nexport function writeFloatLE (val: number, buf: Uint8Array, pos: number): void {\n f32[0] = val\n buf[pos] = f8b[0]\n buf[pos + 1] = f8b[1]\n buf[pos + 2] = f8b[2]\n buf[pos + 3] = f8b[3]\n}\n\n/**\n * Writes a 32 bit float to a buffer using big endian byte order\n */\nexport function writeFloatBE (val: number, buf: Uint8Array, pos: number): void {\n f32[0] = val\n buf[pos] = f8b[3]\n buf[pos + 1] = f8b[2]\n buf[pos + 2] = f8b[1]\n buf[pos + 3] = f8b[0]\n}\n\n/**\n * Reads a 32 bit float from a buffer using little endian byte order\n */\nexport function readFloatLE (buf: Uint8Array, pos: number): number {\n f8b[0] = buf[pos]\n f8b[1] = buf[pos + 1]\n f8b[2] = buf[pos + 2]\n f8b[3] = buf[pos + 3]\n return f32[0]\n}\n\n/**\n * Reads a 32 bit float from a buffer using big endian byte order\n */\nexport function readFloatBE (buf: Uint8Array, pos: number): number {\n f8b[3] = buf[pos]\n f8b[2] = buf[pos + 1]\n f8b[1] = buf[pos + 2]\n f8b[0] = buf[pos + 3]\n return f32[0]\n}\n\nconst f64 = new Float64Array([-0])\nconst d8b = new Uint8Array(f64.buffer)\n\n/**\n * Writes a 64 bit double to a buffer using little endian byte order\n */\nexport function writeDoubleLE (val: number, buf: Uint8Array, pos: number): void {\n f64[0] = val\n buf[pos] = d8b[0]\n buf[pos + 1] = d8b[1]\n buf[pos + 2] = d8b[2]\n buf[pos + 3] = d8b[3]\n buf[pos + 4] = d8b[4]\n buf[pos + 5] = d8b[5]\n buf[pos + 6] = d8b[6]\n buf[pos + 7] = d8b[7]\n}\n\n/**\n * Writes a 64 bit double to a buffer using big endian byte order\n */\nexport function writeDoubleBE (val: number, buf: Uint8Array, pos: number): void {\n f64[0] = val\n buf[pos] = d8b[7]\n buf[pos + 1] = d8b[6]\n buf[pos + 2] = d8b[5]\n buf[pos + 3] = d8b[4]\n buf[pos + 4] = d8b[3]\n buf[pos + 5] = d8b[2]\n buf[pos + 6] = d8b[1]\n buf[pos + 7] = d8b[0]\n}\n\n/**\n * Reads a 64 bit double from a buffer using little endian byte order\n */\nexport function readDoubleLE (buf: Uint8Array, pos: number): number {\n d8b[0] = buf[pos]\n d8b[1] = buf[pos + 1]\n d8b[2] = buf[pos + 2]\n d8b[3] = buf[pos + 3]\n d8b[4] = buf[pos + 4]\n d8b[5] = buf[pos + 5]\n d8b[6] = buf[pos + 6]\n d8b[7] = buf[pos + 7]\n return f64[0]\n}\n\n/**\n * Reads a 64 bit double from a buffer using big endian byte order\n */\nexport function readDoubleBE (buf: Uint8Array, pos: number): number {\n d8b[7] = buf[pos]\n d8b[6] = buf[pos + 1]\n d8b[5] = buf[pos + 2]\n d8b[4] = buf[pos + 3]\n d8b[3] = buf[pos + 4]\n d8b[2] = buf[pos + 5]\n d8b[1] = buf[pos + 6]\n d8b[0] = buf[pos + 7]\n return f64[0]\n}\n", "// the largest BigInt we can safely downcast to a Number\nconst MAX_SAFE_NUMBER_INTEGER = BigInt(Number.MAX_SAFE_INTEGER)\nconst MIN_SAFE_NUMBER_INTEGER = BigInt(Number.MIN_SAFE_INTEGER)\n\n/**\n * Constructs new long bits.\n *\n * @classdesc Helper class for working with the low and high bits of a 64 bit value.\n * @memberof util\n * @function Object() { [native code] }\n * @param {number} lo - Low 32 bits, unsigned\n * @param {number} hi - High 32 bits, unsigned\n */\nexport class LongBits {\n public lo: number\n public hi: number\n\n constructor (lo: number, hi: number) {\n // note that the casts below are theoretically unnecessary as of today, but older statically\n // generated converter code might still call the ctor with signed 32bits. kept for compat.\n\n /**\n * Low bits\n */\n this.lo = lo | 0\n\n /**\n * High bits\n */\n this.hi = hi | 0\n }\n\n /**\n * Converts this long bits to a possibly unsafe JavaScript number\n */\n toNumber (unsigned: boolean = false): number {\n if (!unsigned && (this.hi >>> 31) > 0) {\n const lo = ~this.lo + 1 >>> 0\n let hi = ~this.hi >>> 0\n if (lo === 0) {\n hi = hi + 1 >>> 0\n }\n return -(lo + hi * 4294967296)\n }\n return this.lo + this.hi * 4294967296\n }\n\n /**\n * Converts this long bits to a bigint\n */\n toBigInt (unsigned: boolean = false): bigint {\n if (unsigned) {\n return BigInt(this.lo >>> 0) + (BigInt(this.hi >>> 0) << 32n)\n }\n\n if ((this.hi >>> 31) !== 0) {\n const lo = ~this.lo + 1 >>> 0\n let hi = ~this.hi >>> 0\n if (lo === 0) {\n hi = hi + 1 >>> 0\n }\n return -(BigInt(lo) + (BigInt(hi) << 32n))\n }\n\n return BigInt(this.lo >>> 0) + (BigInt(this.hi >>> 0) << 32n)\n }\n\n /**\n * Converts this long bits to a string\n */\n toString (unsigned: boolean = false): string {\n return this.toBigInt(unsigned).toString()\n }\n\n /**\n * Zig-zag encodes this long bits\n */\n zzEncode (): this {\n const mask = this.hi >> 31\n this.hi = ((this.hi << 1 | this.lo >>> 31) ^ mask) >>> 0\n this.lo = (this.lo << 1 ^ mask) >>> 0\n return this\n }\n\n /**\n * Zig-zag decodes this long bits\n */\n zzDecode (): this {\n const mask = -(this.lo & 1)\n this.lo = ((this.lo >>> 1 | this.hi << 31) ^ mask) >>> 0\n this.hi = (this.hi >>> 1 ^ mask) >>> 0\n return this\n }\n\n /**\n * Calculates the length of this longbits when encoded as a varint.\n */\n length (): number {\n const part0 = this.lo\n const part1 = (this.lo >>> 28 | this.hi << 4) >>> 0\n const part2 = this.hi >>> 24\n return part2 === 0\n ? part1 === 0\n ? part0 < 16384\n ? part0 < 128 ? 1 : 2\n : part0 < 2097152 ? 3 : 4\n : part1 < 16384\n ? part1 < 128 ? 5 : 6\n : part1 < 2097152 ? 7 : 8\n : part2 < 128 ? 9 : 10\n }\n\n /**\n * Constructs new long bits from the specified number\n */\n static fromBigInt (value: bigint): LongBits {\n if (value === 0n) {\n return zero\n }\n\n if (value < MAX_SAFE_NUMBER_INTEGER && value > MIN_SAFE_NUMBER_INTEGER) {\n return this.fromNumber(Number(value))\n }\n\n const negative = value < 0n\n\n if (negative) {\n value = -value\n }\n\n let hi = value >> 32n\n let lo = value - (hi << 32n)\n\n if (negative) {\n hi = ~hi | 0n\n lo = ~lo | 0n\n\n if (++lo > TWO_32) {\n lo = 0n\n if (++hi > TWO_32) { hi = 0n }\n }\n }\n\n return new LongBits(Number(lo), Number(hi))\n }\n\n /**\n * Constructs new long bits from the specified number\n */\n static fromNumber (value: number): LongBits {\n if (value === 0) { return zero }\n const sign = value < 0\n if (sign) { value = -value }\n let lo = value >>> 0\n let hi = (value - lo) / 4294967296 >>> 0\n if (sign) {\n hi = ~hi >>> 0\n lo = ~lo >>> 0\n if (++lo > 4294967295) {\n lo = 0\n if (++hi > 4294967295) { hi = 0 }\n }\n }\n return new LongBits(lo, hi)\n }\n\n /**\n * Constructs new long bits from a number, long or string\n */\n static from (value: bigint | number | string | { low: number, high: number }): LongBits {\n if (typeof value === 'number') {\n return LongBits.fromNumber(value)\n }\n if (typeof value === 'bigint') {\n return LongBits.fromBigInt(value)\n }\n if (typeof value === 'string') {\n return LongBits.fromBigInt(BigInt(value))\n }\n return value.low != null || value.high != null ? new LongBits(value.low >>> 0, value.high >>> 0) : zero\n }\n}\n\nconst zero = new LongBits(0, 0)\nzero.toBigInt = function () { return 0n }\nzero.zzEncode = zero.zzDecode = function () { return this }\nzero.length = function () { return 1 }\n\nconst TWO_32 = 4294967296n\n", "/**\n * Calculates the UTF8 byte length of a string\n */\nexport function length (string: string): number {\n let len = 0\n let c = 0\n for (let i = 0; i < string.length; ++i) {\n c = string.charCodeAt(i)\n\n if (c < 128) {\n len += 1\n } else if (c < 2048) {\n len += 2\n } else if ((c & 0xFC00) === 0xD800 && (string.charCodeAt(i + 1) & 0xFC00) === 0xDC00) {\n ++i\n len += 4\n } else {\n len += 3\n }\n }\n\n return len\n}\n\n/**\n * Reads UTF8 bytes as a string\n */\nexport function read (buffer: Uint8Array, start: number, end: number): string {\n const len = end - start\n\n if (len < 1) {\n return ''\n }\n\n let parts: string[] | undefined\n const chunk: number[] = []\n let i = 0 // char offset\n let t: number // temporary\n\n while (start < end) {\n t = buffer[start++]\n\n if (t < 128) {\n chunk[i++] = t\n } else if (t > 191 && t < 224) {\n chunk[i++] = (t & 31) << 6 | buffer[start++] & 63\n } else if (t > 239 && t < 365) {\n t = ((t & 7) << 18 | (buffer[start++] & 63) << 12 | (buffer[start++] & 63) << 6 | buffer[start++] & 63) - 0x10000\n chunk[i++] = 0xD800 + (t >> 10)\n chunk[i++] = 0xDC00 + (t & 1023)\n } else {\n chunk[i++] = (t & 15) << 12 | (buffer[start++] & 63) << 6 | buffer[start++] & 63\n }\n\n if (i > 8191) {\n (parts ?? (parts = [])).push(String.fromCharCode.apply(String, chunk))\n i = 0\n }\n }\n\n if (parts != null) {\n if (i > 0) {\n parts.push(String.fromCharCode.apply(String, chunk.slice(0, i)))\n }\n\n return parts.join('')\n }\n\n return String.fromCharCode.apply(String, chunk.slice(0, i))\n}\n\n/**\n * Writes a string as UTF8 bytes\n */\nexport function write (string: string, buffer: Uint8Array, offset: number): number {\n const start = offset\n let c1 // character 1\n let c2 // character 2\n\n for (let i = 0; i < string.length; ++i) {\n c1 = string.charCodeAt(i)\n\n if (c1 < 128) {\n buffer[offset++] = c1\n } else if (c1 < 2048) {\n buffer[offset++] = c1 >> 6 | 192\n buffer[offset++] = c1 & 63 | 128\n } else if ((c1 & 0xFC00) === 0xD800 && ((c2 = string.charCodeAt(i + 1)) & 0xFC00) === 0xDC00) {\n c1 = 0x10000 + ((c1 & 0x03FF) << 10) + (c2 & 0x03FF)\n ++i\n buffer[offset++] = c1 >> 18 | 240\n buffer[offset++] = c1 >> 12 & 63 | 128\n buffer[offset++] = c1 >> 6 & 63 | 128\n buffer[offset++] = c1 & 63 | 128\n } else {\n buffer[offset++] = c1 >> 12 | 224\n buffer[offset++] = c1 >> 6 & 63 | 128\n buffer[offset++] = c1 & 63 | 128\n }\n }\n\n return offset - start\n}\n", "import { decodeUint8Array, encodingLength } from 'uint8-varint'\nimport { readFloatLE, readDoubleLE } from './float.js'\nimport { LongBits } from './longbits.js'\nimport * as utf8 from './utf8.js'\nimport type { Reader } from '../index.js'\nimport type { Uint8ArrayList } from 'uint8arraylist'\n\n/* istanbul ignore next */\nfunction indexOutOfRange (reader: Reader, writeLength?: number): RangeError {\n return RangeError(`index out of range: ${reader.pos} + ${writeLength ?? 1} > ${reader.len}`)\n}\n\nfunction readFixed32End (buf: Uint8Array, end: number): number { // note that this uses `end`, not `pos`\n return (buf[end - 4] |\n buf[end - 3] << 8 |\n buf[end - 2] << 16 |\n buf[end - 1] << 24) >>> 0\n}\n\n/**\n * Constructs a new reader instance using the specified buffer.\n */\nexport class Uint8ArrayReader implements Reader {\n public buf: Uint8Array\n public pos: number\n public len: number\n\n public _slice = Uint8Array.prototype.subarray\n\n constructor (buffer: Uint8Array) {\n /**\n * Read buffer\n */\n this.buf = buffer\n\n /**\n * Read buffer position\n */\n this.pos = 0\n\n /**\n * Read buffer length\n */\n this.len = buffer.length\n }\n\n /**\n * Reads a varint as an unsigned 32 bit value\n */\n uint32 (): number {\n let value = 4294967295\n\n value = (this.buf[this.pos] & 127) >>> 0; if (this.buf[this.pos++] < 128) { return value }\n value = (value | (this.buf[this.pos] & 127) << 7) >>> 0; if (this.buf[this.pos++] < 128) { return value }\n value = (value | (this.buf[this.pos] & 127) << 14) >>> 0; if (this.buf[this.pos++] < 128) { return value }\n value = (value | (this.buf[this.pos] & 127) << 21) >>> 0; if (this.buf[this.pos++] < 128) { return value }\n value = (value | (this.buf[this.pos] & 15) << 28) >>> 0; if (this.buf[this.pos++] < 128) { return value }\n\n if ((this.pos += 5) > this.len) {\n this.pos = this.len\n throw indexOutOfRange(this, 10)\n }\n\n return value\n }\n\n /**\n * Reads a varint as a signed 32 bit value\n */\n int32 (): number {\n return this.uint32() | 0\n }\n\n /**\n * Reads a zig-zag encoded varint as a signed 32 bit value\n */\n sint32 (): number {\n const value = this.uint32()\n return value >>> 1 ^ -(value & 1) | 0\n }\n\n /**\n * Reads a varint as a boolean\n */\n bool (): boolean {\n return this.uint32() !== 0\n }\n\n /**\n * Reads fixed 32 bits as an unsigned 32 bit integer\n */\n fixed32 (): number {\n if (this.pos + 4 > this.len) { throw indexOutOfRange(this, 4) }\n\n const res = readFixed32End(this.buf, this.pos += 4)\n\n return res\n }\n\n /**\n * Reads fixed 32 bits as a signed 32 bit integer\n */\n sfixed32 (): number {\n if (this.pos + 4 > this.len) {\n throw indexOutOfRange(this, 4)\n }\n\n const res = readFixed32End(this.buf, this.pos += 4) | 0\n\n return res\n }\n\n /**\n * Reads a float (32 bit) as a number\n */\n float (): number {\n if (this.pos + 4 > this.len) {\n throw indexOutOfRange(this, 4)\n }\n\n const value = readFloatLE(this.buf, this.pos)\n this.pos += 4\n return value\n }\n\n /**\n * Reads a double (64 bit float) as a number\n */\n double (): number {\n /* istanbul ignore if */\n if (this.pos + 8 > this.len) { throw indexOutOfRange(this, 4) }\n\n const value = readDoubleLE(this.buf, this.pos)\n this.pos += 8\n return value\n }\n\n /**\n * Reads a sequence of bytes preceded by its length as a varint\n */\n bytes (): Uint8Array {\n const length = this.uint32()\n const start = this.pos\n const end = this.pos + length\n\n /* istanbul ignore if */\n if (end > this.len) {\n throw indexOutOfRange(this, length)\n }\n\n this.pos += length\n\n return start === end // fix for IE 10/Win8 and others' subarray returning array of size 1\n ? new Uint8Array(0)\n : this.buf.subarray(start, end)\n }\n\n /**\n * Reads a string preceded by its byte length as a varint\n */\n string (): string {\n const bytes = this.bytes()\n return utf8.read(bytes, 0, bytes.length)\n }\n\n /**\n * Skips the specified number of bytes if specified, otherwise skips a varint\n */\n skip (length?: number): this {\n if (typeof length === 'number') {\n /* istanbul ignore if */\n if (this.pos + length > this.len) { throw indexOutOfRange(this, length) }\n this.pos += length\n } else {\n do {\n /* istanbul ignore if */\n if (this.pos >= this.len) {\n throw indexOutOfRange(this)\n }\n } while ((this.buf[this.pos++] & 128) !== 0)\n }\n return this\n }\n\n /**\n * Skips the next element of the specified wire type\n */\n skipType (wireType: number): this {\n switch (wireType) {\n case 0:\n this.skip()\n break\n case 1:\n this.skip(8)\n break\n case 2:\n this.skip(this.uint32())\n break\n case 3:\n while ((wireType = this.uint32() & 7) !== 4) {\n this.skipType(wireType)\n }\n break\n case 5:\n this.skip(4)\n break\n\n /* istanbul ignore next */\n default:\n throw Error(`invalid wire type ${wireType} at offset ${this.pos}`)\n }\n return this\n }\n\n private readLongVarint (): LongBits {\n // tends to deopt with local vars for octet etc.\n const bits = new LongBits(0, 0)\n let i = 0\n if (this.len - this.pos > 4) { // fast route (lo)\n for (; i < 4; ++i) {\n // 1st..4th\n bits.lo = (bits.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0\n if (this.buf[this.pos++] < 128) { return bits }\n }\n // 5th\n bits.lo = (bits.lo | (this.buf[this.pos] & 127) << 28) >>> 0\n bits.hi = (bits.hi | (this.buf[this.pos] & 127) >> 4) >>> 0\n if (this.buf[this.pos++] < 128) { return bits }\n i = 0\n } else {\n for (; i < 3; ++i) {\n /* istanbul ignore if */\n if (this.pos >= this.len) { throw indexOutOfRange(this) }\n // 1st..3th\n bits.lo = (bits.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0\n if (this.buf[this.pos++] < 128) { return bits }\n }\n // 4th\n bits.lo = (bits.lo | (this.buf[this.pos++] & 127) << i * 7) >>> 0\n return bits\n }\n if (this.len - this.pos > 4) { // fast route (hi)\n for (; i < 5; ++i) {\n // 6th..10th\n bits.hi = (bits.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0\n if (this.buf[this.pos++] < 128) { return bits }\n }\n } else {\n for (; i < 5; ++i) {\n if (this.pos >= this.len) {\n throw indexOutOfRange(this)\n }\n\n // 6th..10th\n bits.hi = (bits.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0\n if (this.buf[this.pos++] < 128) { return bits }\n }\n }\n\n throw Error('invalid varint encoding')\n }\n\n private readFixed64 (): LongBits {\n if (this.pos + 8 > this.len) {\n throw indexOutOfRange(this, 8)\n }\n\n const lo = readFixed32End(this.buf, this.pos += 4)\n const hi = readFixed32End(this.buf, this.pos += 4)\n\n return new LongBits(lo, hi)\n }\n\n /**\n * Reads a varint as a signed 64 bit value\n */\n int64 (): bigint {\n return this.readLongVarint().toBigInt()\n }\n\n /**\n * Reads a varint as a signed 64 bit value returned as a possibly unsafe\n * JavaScript number\n */\n int64Number (): number {\n return this.readLongVarint().toNumber()\n }\n\n /**\n * Reads a varint as a signed 64 bit value returned as a string\n */\n int64String (): string {\n return this.readLongVarint().toString()\n }\n\n /**\n * Reads a varint as an unsigned 64 bit value\n */\n uint64 (): bigint {\n return this.readLongVarint().toBigInt(true)\n }\n\n /**\n * Reads a varint as an unsigned 64 bit value returned as a possibly unsafe\n * JavaScript number\n */\n uint64Number (): number {\n const value = decodeUint8Array(this.buf, this.pos)\n this.pos += encodingLength(value)\n return value\n }\n\n /**\n * Reads a varint as an unsigned 64 bit value returned as a string\n */\n uint64String (): string {\n return this.readLongVarint().toString(true)\n }\n\n /**\n * Reads a zig-zag encoded varint as a signed 64 bit value\n */\n sint64 (): bigint {\n return this.readLongVarint().zzDecode().toBigInt()\n }\n\n /**\n * Reads a zig-zag encoded varint as a signed 64 bit value returned as a\n * possibly unsafe JavaScript number\n */\n sint64Number (): number {\n return this.readLongVarint().zzDecode().toNumber()\n }\n\n /**\n * Reads a zig-zag encoded varint as a signed 64 bit value returned as a\n * string\n */\n sint64String (): string {\n return this.readLongVarint().zzDecode().toString()\n }\n\n /**\n * Reads fixed 64 bits\n */\n fixed64 (): bigint {\n return this.readFixed64().toBigInt()\n }\n\n /**\n * Reads fixed 64 bits returned as a possibly unsafe JavaScript number\n */\n fixed64Number (): number {\n return this.readFixed64().toNumber()\n }\n\n /**\n * Reads fixed 64 bits returned as a string\n */\n fixed64String (): string {\n return this.readFixed64().toString()\n }\n\n /**\n * Reads zig-zag encoded fixed 64 bits\n */\n sfixed64 (): bigint {\n return this.readFixed64().toBigInt()\n }\n\n /**\n * Reads zig-zag encoded fixed 64 bits returned as a possibly unsafe\n * JavaScript number\n */\n sfixed64Number (): number {\n return this.readFixed64().toNumber()\n }\n\n /**\n * Reads zig-zag encoded fixed 64 bits returned as a string\n */\n sfixed64String (): string {\n return this.readFixed64().toString()\n }\n}\n\nexport function createReader (buf: Uint8Array | Uint8ArrayList): Reader {\n return new Uint8ArrayReader(buf instanceof Uint8Array ? buf : buf.subarray())\n}\n", "import { createReader } from './utils/reader.js'\nimport type { Codec, DecodeOptions } from './codec.js'\nimport type { Uint8ArrayList } from 'uint8arraylist'\n\nexport function decodeMessage <T> (buf: Uint8Array | Uint8ArrayList, codec: Pick<Codec<T>, 'decode'>, opts?: DecodeOptions<T>): T {\n const reader = createReader(buf)\n\n return codec.decode(reader, undefined, opts)\n}\n", "import { baseX } from './base.js'\n\nexport const base10 = baseX({\n prefix: '9',\n name: 'base10',\n alphabet: '0123456789'\n})\n", "import { rfc4648 } from './base.js'\n\nexport const base16 = rfc4648({\n prefix: 'f',\n name: 'base16',\n alphabet: '0123456789abcdef',\n bitsPerChar: 4\n})\n\nexport const base16upper = rfc4648({\n prefix: 'F',\n name: 'base16upper',\n alphabet: '0123456789ABCDEF',\n bitsPerChar: 4\n})\n", "import { rfc4648 } from './base.js'\n\nexport const base2 = rfc4648({\n prefix: '0',\n name: 'base2',\n alphabet: '01',\n bitsPerChar: 1\n})\n", "import { from } from './base.js'\n\nconst alphabet = Array.from('\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: string[] = (alphabet.reduce<string[]>((p, c, i) => { p[i] = c; return p }, ([])))\nconst alphabetCharsToBytes: number[] = (alphabet.reduce<number[]>((p, c, i) => {\n const codePoint = c.codePointAt(0)\n if (codePoint == null) {\n throw new Error(`Invalid character: ${c}`)\n }\n p[codePoint] = i\n return p\n}, ([])))\n\nfunction encode (data: Uint8Array): string {\n return data.reduce((p, c) => {\n p += alphabetBytesToChars[c]\n return p\n }, '')\n}\n\nfunction decode (str: string): Uint8Array {\n const byts = []\n for (const char of str) {\n const codePoint = char.codePointAt(0)\n if (codePoint == null) {\n throw new Error(`Invalid character: ${char}`)\n }\n const byt = alphabetCharsToBytes[codePoint]\n if (byt == null) {\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 { 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 { rfc4648 } from './base.js'\n\nexport const base8 = rfc4648({\n prefix: '7',\n name: 'base8',\n alphabet: '01234567',\n bitsPerChar: 3\n})\n", "import { fromString, toString } from '../bytes.js'\nimport { from } from './base.js'\n\nexport const identity = from({\n prefix: '\\x00',\n name: 'identity',\n encode: (buf) => toString(buf),\n decode: (str) => fromString(str)\n})\n", "import type { ArrayBufferView, ByteView } from './interface.js'\n\nconst textEncoder = new TextEncoder()\nconst textDecoder = new TextDecoder()\n\nexport const name = 'json'\nexport const code = 0x0200\n\nexport function encode <T> (node: T): ByteView<T> {\n return textEncoder.encode(JSON.stringify(node))\n}\n\nexport function decode <T> (data: ByteView<T> | ArrayBufferView<T>): T {\n return JSON.parse(textDecoder.decode(data))\n}\n", "import { coerce } from '../bytes.js'\nimport type { ArrayBufferView, ByteView } from './interface.js'\n\nexport const name = 'raw'\nexport const code = 0x55\n\nexport function encode (node: Uint8Array): ByteView<Uint8Array> {\n return coerce(node)\n}\n\nexport function decode (data: ByteView<Uint8Array> | ArrayBufferView<Uint8Array>): Uint8Array {\n return coerce(data)\n}\n", "import { coerce } from '../bytes.js'\nimport * as Digest from './digest.js'\nimport type { DigestOptions } from './hasher.js'\n\nconst code: 0x0 = 0x0\nconst name = 'identity'\n\nconst encode: (input: Uint8Array) => Uint8Array = coerce\n\nfunction digest (input: Uint8Array, options?: DigestOptions): Digest.Digest<typeof code, number> {\n if (options?.truncate != null && options.truncate !== input.byteLength) {\n if (options.truncate < 0 || options.truncate > input.byteLength) {\n throw new Error(`Invalid truncate option, must be less than or equal to ${input.byteLength}`)\n }\n\n input = input.subarray(0, options.truncate)\n }\n\n return Digest.create(code, encode(input))\n}\n\nexport const identity = { code, name, encode, digest }\n", "/* global crypto */\n\nimport { from } from './hasher.js'\n\nfunction sha (name: AlgorithmIdentifier): (data: Uint8Array) => Promise<Uint8Array> {\n return async data => new Uint8Array(await crypto.subtle.digest(name, data))\n}\n\nexport const sha256 = from({\n name: 'sha2-256',\n code: 0x12,\n encode: sha('SHA-256')\n})\n\nexport const sha512 = from({\n name: 'sha2-512',\n code: 0x13,\n encode: sha('SHA-512')\n})\n", "import * as Digest from './digest.js'\nimport type { MultihashHasher } from './interface.js'\n\ntype Await<T> = Promise<T> | T\n\nconst DEFAULT_MIN_DIGEST_LENGTH = 20\n\nexport interface HasherInit <Name extends string, Code extends number> {\n name: Name\n code: Code\n encode(input: Uint8Array): Await<Uint8Array>\n\n /**\n * The minimum length a hash is allowed to be truncated to in bytes\n *\n * @default 20\n */\n minDigestLength?: number\n\n /**\n * The maximum length a hash is allowed to be truncated to in bytes. If not\n * specified it will be inferred from the length of the digest.\n */\n maxDigestLength?: number\n}\n\nexport function from <Name extends string, Code extends number> ({ name, code, encode, minDigestLength, maxDigestLength }: HasherInit<Name, Code>): Hasher<Name, Code> {\n return new Hasher(name, code, encode, minDigestLength, maxDigestLength)\n}\n\nexport interface DigestOptions {\n /**\n * Truncate the returned digest to this number of bytes.\n *\n * This may cause the digest method to throw/reject if the passed value is\n * greater than the digest length or below a threshold under which the risk of\n * hash collisions is significant.\n *\n * The actual value of this threshold can depend on the hashing algorithm in\n * use.\n */\n truncate?: number\n}\n\n/**\n * Hasher represents a hashing algorithm implementation that produces as\n * `MultihashDigest`.\n */\nexport class Hasher<Name extends string, Code extends number> implements MultihashHasher<Code> {\n readonly name: Name\n readonly code: Code\n readonly encode: (input: Uint8Array) => Await<Uint8Array>\n readonly minDigestLength: number\n readonly maxDigestLength?: number\n\n constructor (name: Name, code: Code, encode: (input: Uint8Array) => Await<Uint8Array>, minDigestLength?: number, maxDigestLength?: number) {\n this.name = name\n this.code = code\n this.encode = encode\n this.minDigestLength = minDigestLength ?? DEFAULT_MIN_DIGEST_LENGTH\n this.maxDigestLength = maxDigestLength\n }\n\n digest (input: Uint8Array, options?: DigestOptions): Await<Digest.Digest<Code, number>> {\n if (options?.truncate != null) {\n if (options.truncate < this.minDigestLength) {\n throw new Error(`Invalid truncate option, must be greater than or equal to ${this.minDigestLength}`)\n }\n\n if (this.maxDigestLength != null && options.truncate > this.maxDigestLength) {\n throw new Error(`Invalid truncate option, must be less than or equal to ${this.maxDigestLength}`)\n }\n }\n\n if (input instanceof Uint8Array) {\n const result = this.encode(input)\n\n if (result instanceof Uint8Array) {\n return createDigest(result, this.code, options?.truncate)\n }\n\n return result.then(digest => createDigest(digest, this.code, options?.truncate))\n } else {\n throw Error('Unknown type, must be binary type')\n /* c8 ignore next 1 */\n }\n }\n}\n\n/**\n * Create a Digest from the passed uint8array and code, optionally truncating it\n * first.\n */\nfunction createDigest <Code extends number> (digest: Uint8Array, code: Code, truncate?: number): Digest.Digest<Code, number> {\n if (truncate != null && truncate !== digest.byteLength) {\n if (truncate > digest.byteLength) {\n throw new Error(`Invalid truncate option, must be less than or equal to ${digest.byteLength}`)\n }\n\n digest = digest.subarray(0, truncate)\n }\n\n return Digest.create(code, digest)\n}\n", "import * as base10 from './bases/base10.js'\nimport * as base16 from './bases/base16.js'\nimport * as base2 from './bases/base2.js'\nimport * as base256emoji from './bases/base256emoji.js'\nimport * as base32 from './bases/base32.js'\nimport * as base36 from './bases/base36.js'\nimport * as base58 from './bases/base58.js'\nimport * as base64 from './bases/base64.js'\nimport * as base8 from './bases/base8.js'\nimport * as identityBase from './bases/identity.js'\nimport * as json from './codecs/json.js'\nimport * as raw from './codecs/raw.js'\nimport * as identity from './hashes/identity.js'\nimport * as sha2 from './hashes/sha2.js'\nimport { CID, hasher, digest, varint, bytes } from './index.js'\n\nexport const bases = { ...identityBase, ...base2, ...base8, ...base10, ...base16, ...base32, ...base36, ...base58, ...base64, ...base256emoji }\nexport const hashes = { ...sha2, ...identity }\nexport const codecs = { raw, json }\n\nexport { CID, hasher, digest, varint, bytes }\n", "import { bases } from 'multiformats/basics'\nimport type { MultibaseCodec } from 'multiformats'\nimport { allocUnsafe } from '#alloc'\n\nfunction createCodec (name: string, prefix: string, encode: (buf: Uint8Array) => string, decode: (str: string) => Uint8Array): MultibaseCodec<any> {\n return {\n name,\n prefix,\n encoder: {\n name,\n prefix,\n encode\n },\n decoder: {\n decode\n }\n }\n}\n\nconst string = createCodec('utf8', 'u', (buf) => {\n const decoder = new TextDecoder('utf8')\n return 'u' + decoder.decode(buf)\n}, (str) => {\n const encoder = new TextEncoder()\n return encoder.encode(str.substring(1))\n})\n\nconst ascii = createCodec('ascii', 'a', (buf) => {\n let string = 'a'\n\n for (let i = 0; i < buf.length; i++) {\n string += String.fromCharCode(buf[i])\n }\n return string\n}, (str) => {\n str = str.substring(1)\n const buf = allocUnsafe(str.length)\n\n for (let i = 0; i < str.length; i++) {\n buf[i] = str.charCodeAt(i)\n }\n\n return buf\n})\n\nexport type SupportedEncodings = 'utf8' | 'utf-8' | 'hex' | 'latin1' | 'ascii' | 'binary' | keyof typeof bases\n\nconst BASES: Record<SupportedEncodings, MultibaseCodec<any>> = {\n utf8: string,\n 'utf-8': string,\n hex: bases.base16,\n latin1: ascii,\n ascii,\n binary: ascii,\n\n ...bases\n}\n\nexport default BASES\n", "import bases, { type SupportedEncodings } from './util/bases.js'\n\nexport type { SupportedEncodings }\n\n/**\n * Create a `Uint8Array` from the passed string\n *\n * Supports `utf8`, `utf-8`, `hex`, and any encoding supported by the multiformats module.\n *\n * Also `ascii` which is similar to node's 'binary' encoding.\n */\nexport function fromString (string: string, encoding: SupportedEncodings = 'utf8'): Uint8Array {\n const base = bases[encoding]\n\n if (base == null) {\n throw new Error(`Unsupported encoding \"${encoding}\"`)\n }\n\n // add multibase prefix\n return base.decoder.decode(`${base.prefix}${string}`) // eslint-disable-line @typescript-eslint/restrict-template-expressions\n}\n", "import { allocUnsafe } from 'uint8arrays/alloc'\n\n/**\n * A general purpose buffer pool\n */\nexport default function pool (size?: number): (size: number) => Uint8Array {\n const SIZE = size ?? 8192\n const MAX = SIZE >>> 1\n let slab: Uint8Array\n let offset = SIZE\n return function poolAlloc (size: number) {\n if (size < 1 || size > MAX) {\n return allocUnsafe(size)\n }\n\n if (offset + size > SIZE) {\n slab = allocUnsafe(SIZE)\n offset = 0\n }\n\n const buf = slab.subarray(offset, offset += size)\n\n if ((offset & 7) !== 0) {\n // align to 32 bit\n offset = (offset | 7) + 1\n }\n\n return buf\n }\n}\n", "import { encodeUint8Array, encodingLength } from 'uint8-varint'\nimport { allocUnsafe } from 'uint8arrays/alloc'\nimport { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'\nimport { writeFloatLE, writeDoubleLE } from './float.js'\nimport { LongBits } from './longbits.js'\nimport pool from './pool.js'\nimport * as utf8 from './utf8.js'\nimport type { Writer } from '../index.js'\n\ninterface WriterOperation<T> {\n (val: T, buf: Uint8Array, pos: number): any\n}\n\n/**\n * Constructs a new writer operation instance.\n *\n * @classdesc Scheduled writer operation\n */\nclass Op<T> {\n /**\n * Function to call\n */\n public fn: WriterOperation<T>\n\n /**\n * Value byte length\n */\n public len: number\n\n /**\n * Next operation\n */\n public next?: Op<any>\n\n /**\n * Value to write\n */\n public val: T\n\n constructor (fn: WriterOperation<T>, len: number, val: T) {\n this.fn = fn\n this.len = len\n this.next = undefined\n this.val = val // type varies\n }\n}\n\n/* istanbul ignore next */\nfunction noop (): void {}\n\n/**\n * Constructs a new writer state instance\n */\nclass State {\n /**\n * Current head\n */\n public head: Op<any>\n\n /**\n * Current tail\n */\n public tail: Op<any>\n\n /**\n * Current buffer length\n */\n public len: number\n\n /**\n * Next state\n */\n public next?: State\n\n constructor (writer: Uint8ArrayWriter) {\n this.head = writer.head\n this.tail = writer.tail\n this.len = writer.len\n this.next = writer.states\n }\n}\n\nconst bufferPool = pool()\n\n/**\n * Allocates a buffer of the specified size\n */\nfunction alloc (size: number): Uint8Array {\n if (globalThis.Buffer != null) {\n return allocUnsafe(size)\n }\n\n return bufferPool(size)\n}\n\n/**\n * When a value is written, the writer calculates its byte length and puts it into a linked\n * list of operations to perform when finish() is called. This both allows us to allocate\n * buffers of the exact required size and reduces the amount of work we have to do compared\n * to first calculating over objects and then encoding over objects. In our case, the encoding\n * part is just a linked list walk calling operations with already prepared values.\n */\nclass Uint8ArrayWriter implements Writer {\n /**\n * Current length\n */\n public len: number\n\n /**\n * Operations head\n */\n public head: Op<any>\n\n /**\n * Operations tail\n */\n public tail: Op<any>\n\n /**\n * Linked forked states\n */\n public states?: any\n\n constructor () {\n this.len = 0\n this.head = new Op(noop, 0, 0)\n this.tail = this.head\n this.states = null\n }\n\n /**\n * Pushes a new operation to the queue\n */\n _push (fn: WriterOperation<any>, len: number, val: any): this {\n this.tail = this.tail.next = new Op(fn, len, val)\n this.len += len\n\n return this\n }\n\n /**\n * Writes an unsigned 32 bit value as a varint\n */\n uint32 (value: number): this {\n // here, the call to this.push has been inlined and a varint specific Op subclass is used.\n // uint32 is by far the most frequently used operation and benefits significantly from this.\n this.len += (this.tail = this.tail.next = new VarintOp(\n (value = value >>> 0) <\n 128\n ? 1\n : value < 16384\n ? 2\n : value < 2097152\n ? 3\n : value < 268435456\n ? 4\n : 5,\n value)).len\n return this\n }\n\n /**\n * Writes a signed 32 bit value as a varint`\n */\n int32 (value: number): this {\n return value < 0\n ? this._push(writeVarint64, 10, LongBits.fromNumber(value)) // 10 bytes per spec\n : this.uint32(value)\n }\n\n /**\n * Writes a 32 bit value as a varint, zig-zag encoded\n */\n sint32 (value: number): this {\n return this.uint32((value << 1 ^ value >> 31) >>> 0)\n }\n\n /**\n * Writes an unsigned 64 bit value as a varint\n */\n uint64 (value: bigint): this {\n const bits = LongBits.fromBigInt(value)\n return this._push(writeVarint64, bits.length(), bits)\n }\n\n /**\n * Writes an unsigned 64 bit value as a varint\n */\n uint64Number (value: number): this {\n return this._push(encodeUint8Array, encodingLength(value), value)\n }\n\n /**\n * Writes an unsigned 64 bit value as a varint\n */\n uint64String (value: string): this {\n return this.uint64(BigInt(value))\n }\n\n /**\n * Writes a signed 64 bit value as a varint\n */\n int64 (value: bigint): this {\n return this.uint64(value)\n }\n\n /**\n * Writes a signed 64 bit value as a varint\n */\n int64Number (value: number): this {\n return this.uint64Number(value)\n }\n\n /**\n * Writes a signed 64 bit value as a varint\n */\n int64String (value: string): this {\n return this.uint64String(value)\n }\n\n /**\n * Writes a signed 64 bit value as a varint, zig-zag encoded\n */\n sint64 (value: bigint): this {\n const bits = LongBits.fromBigInt(value).zzEncode()\n return this._push(writeVarint64, bits.length(), bits)\n }\n\n /**\n * Writes a signed 64 bit value as a varint, zig-zag encoded\n */\n sint64Number (value: number): this {\n const bits = LongBits.fromNumber(value).zzEncode()\n return this._push(writeVarint64, bits.length(), bits)\n }\n\n /**\n * Writes a signed 64 bit value as a varint, zig-zag encoded\n */\n sint64String (value: string): this {\n return this.sint64(BigInt(value))\n }\n\n /**\n * Writes a boolish value as a varint\n */\n bool (value: boolean): this {\n return this._push(writeByte, 1, value ? 1 : 0)\n }\n\n /**\n * Writes an unsigned 32 bit value as fixed 32 bits\n */\n fixed32 (value: number): this {\n return this._push(writeFixed32, 4, value >>> 0)\n }\n\n /**\n * Writes a signed 32 bit value as fixed 32 bits\n */\n sfixed32 (value: number): this {\n return this.fixed32(value)\n }\n\n /**\n * Writes an unsigned 64 bit value as fixed 64 bits\n */\n fixed64 (value: bigint): this {\n const bits = LongBits.fromBigInt(value)\n return this._push(writeFixed32, 4, bits.lo)._push(writeFixed32, 4, bits.hi)\n }\n\n /**\n * Writes an unsigned 64 bit value as fixed 64 bits\n */\n fixed64Number (value: number): this {\n const bits = LongBits.fromNumber(value)\n return this._push(writeFixed32, 4, bits.lo)._push(writeFixed32, 4, bits.hi)\n }\n\n /**\n * Writes an unsigned 64 bit value as fixed 64 bits\n */\n fixed64String (value: string): this {\n return this.fixed64(BigInt(value))\n }\n\n /**\n * Writes a signed 64 bit value as fixed 64 bits\n */\n sfixed64 (value: bigint): this {\n return this.fixed64(value)\n }\n\n /**\n * Writes a signed 64 bit value as fixed 64 bits\n */\n sfixed64Number (value: number): this {\n return this.fixed64Number(value)\n }\n\n /**\n * Writes a signed 64 bit value as fixed 64 bits\n */\n sfixed64String (value: string): this {\n return this.fixed64String(value)\n }\n\n /**\n * Writes a float (32 bit)\n */\n float (value: number): this {\n return this._push(writeFloatLE, 4, value)\n }\n\n /**\n * Writes a double (64 bit float).\n *\n * @function\n * @param {number} value - Value to write\n * @returns {Writer} `this`\n */\n double (value: number): this {\n return this._push(writeDoubleLE, 8, value)\n }\n\n /**\n * Writes a sequence of bytes\n */\n bytes (value: Uint8Array): this {\n const len = value.length >>> 0\n\n if (len === 0) {\n return this._push(writeByte, 1, 0)\n }\n\n return this.uint32(len)._push(writeBytes, len, value)\n }\n\n /**\n * Writes a string\n */\n string (value: string): this {\n const len = utf8.length(value)\n return len !== 0\n ? this.uint32(len)._push(utf8.write, len, value)\n : this._push(writeByte, 1, 0)\n }\n\n /**\n * Forks this writer's state by pushing it to a stack.\n * Calling {@link Writer#reset|reset} or {@link Writer#ldelim|ldelim} resets the writer to the previous state.\n */\n fork (): this {\n this.states = new State(this)\n this.head = this.tail = new Op(noop, 0, 0)\n this.len = 0\n return this\n }\n\n /**\n * Resets this instance to the last state\n */\n reset (): this {\n if (this.states != null) {\n this.head = this.states.head\n this.tail = this.states.tail\n this.len = this.states.len\n this.states = this.states.next\n } else {\n this.head = this.tail = new Op(noop, 0, 0)\n this.len = 0\n }\n return this\n }\n\n /**\n * Resets to the last state and appends the fork state's current write length as a varint followed by its operations.\n */\n ldelim (): this {\n const head = this.head\n const tail = this.tail\n const len = this.len\n this.reset().uint32(len)\n if (len !== 0) {\n this.tail.next = head.next // skip noop\n this.tail = tail\n this.len += len\n }\n return this\n }\n\n /**\n * Finishes the write operation\n */\n finish (): Uint8Array {\n let head = this.head.next // skip noop\n const buf = alloc(this.len)\n let pos = 0\n while (head != null) {\n head.fn(head.val, buf, pos)\n pos += head.len\n head = head.next\n }\n // this.head = this.tail = null;\n return buf\n }\n}\n\nfunction writeByte (val: number, buf: Uint8Array, pos: number): void {\n buf[pos] = val & 255\n}\n\nfunction writeVarint32 (val: number, buf: Uint8Array, pos: number): void {\n while (val > 127) {\n buf[pos++] = val & 127 | 128\n val >>>= 7\n }\n buf[pos] = val\n}\n\n/**\n * Constructs a new varint writer operation instance.\n *\n * @classdesc Scheduled varint writer operation\n */\nclass VarintOp extends Op<number> {\n public next?: Op<any>\n\n constructor (len: number, val: number) {\n super(writeVarint32, len, val)\n this.next = undefined\n }\n}\n\nfunction writeVarint64 (val: LongBits, buf: Uint8Array, pos: number): void {\n while (val.hi !== 0) {\n buf[pos++] = val.lo & 127 | 128\n val.lo = (val.lo >>> 7 | val.hi << 25) >>> 0\n val.hi >>>= 7\n }\n while (val.lo > 127) {\n buf[pos++] = val.lo & 127 | 128\n val.lo = val.lo >>> 7\n }\n buf[pos++] = val.lo\n}\n\nfunction writeFixed32 (val: number, buf: Uint8Array, pos: number): void {\n buf[pos] = val & 255\n buf[pos + 1] = val >>> 8 & 255\n buf[pos + 2] = val >>> 16 & 255\n buf[pos + 3] = val >>> 24\n}\n\nfunction writeBytes (val: Uint8Array, buf: Uint8Array, pos: number): void {\n buf.set(val, pos)\n}\n\nif (globalThis.Buffer != null) {\n Uint8ArrayWriter.prototype.bytes = function (value: Uint8Array) {\n const len = value.length >>> 0\n\n this.uint32(len)\n\n if (len > 0) {\n this._push(writeBytesBuffer, len, value)\n }\n\n return this\n }\n\n Uint8ArrayWriter.prototype.string = function (value: string) {\n const len = globalThis.Buffer.byteLength(value)\n\n this.uint32(len)\n\n if (len > 0) {\n this._push(writeStringBuffer, len, value)\n }\n\n return this\n }\n}\n\nfunction writeBytesBuffer (val: Uint8Array, buf: Uint8Array, pos: number): void {\n buf.set(val, pos) // faster than copy (requires node >= 4 where Buffers extend Uint8Array and set is properly inherited)\n // also works for plain array values\n}\n\nfunction writeStringBuffer (val: string, buf: Uint8Array, pos: number): void {\n if (val.length < 40) {\n // plain js is faster for short strings (probably due to redundant assertions)\n utf8.write(val, buf, pos)\n // @ts-expect-error buf isn't a Uint8Array?\n } else if (buf.utf8Write != null) {\n // @ts-expect-error buf isn't a Uint8Array?\n buf.utf8Write(val, pos)\n } else {\n buf.set(uint8ArrayFromString(val), pos)\n }\n}\n\n/**\n * Creates a new writer\n */\nexport function createWriter (): Writer {\n return new Uint8ArrayWriter()\n}\n", "import { createWriter } from './utils/writer.js'\nimport type { Codec } from './codec.js'\n\nexport function encodeMessage <T> (message: Partial<T>, codec: Pick<Codec<T>, 'encode'>): Uint8Array {\n const w = createWriter()\n\n codec.encode(message, w, {\n lengthDelimited: false\n })\n\n return w.finish()\n}\n", "import type { Writer, Reader } from './index.js'\n\n// https://developers.google.com/protocol-buffers/docs/encoding#structure\nexport enum CODEC_TYPES {\n VARINT = 0,\n BIT64,\n LENGTH_DELIMITED,\n START_GROUP,\n END_GROUP,\n BIT32\n}\n\nexport interface EncodeOptions {\n lengthDelimited?: boolean\n writeDefaults?: boolean\n}\n\nexport interface EncodeFunction<T> {\n (value: Partial<T>, writer: Writer, opts?: EncodeOptions): void\n}\n\n// protobuf types that contain multiple values\ntype CollectionTypes = any[] | Map<any, any>\n\n// protobuf types that are not collections or messages\ntype PrimitiveTypes = boolean | number | string | bigint | Uint8Array\n\n// recursive array/map field length limits\ntype CollectionLimits <T> = {\n [K in keyof T]: T[K] extends CollectionTypes ? number :\n T[K] extends PrimitiveTypes ? never : Limits<T[K]>\n}\n\n// recursive array member array/map field length limits\ntype ArrayElementLimits <T> = {\n [K in keyof T as `${string & K}$`]: T[K] extends Array<infer ElementType> ?\n (ElementType extends PrimitiveTypes ? never : Limits<ElementType>) :\n (T[K] extends PrimitiveTypes ? never : Limits<T[K]>)\n}\n\n// recursive map value array/map field length limits\ntype MapValueLimits <T> = {\n [K in keyof T as `${string & K}$value`]: T[K] extends Map<any, infer MapValueType> ?\n (MapValueType extends PrimitiveTypes ? never : Limits<MapValueType>) :\n (T[K] extends PrimitiveTypes ? never : Limits<T[K]>)\n}\n\n// union of collection and array elements\ntype Limits<T> = Partial<CollectionLimits<T> & ArrayElementLimits<T> & MapValueLimits<T>>\n\nexport interface DecodeOptions<T> {\n /**\n * Runtime-specified limits for lengths of repeated/map fields\n */\n limits?: Limits<T>\n}\n\nexport interface DecodeFunction<T> {\n (reader: Reader, length?: number, opts?: DecodeOptions<T>): 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 } from '../codec.js'\nimport type { EncodeFunction, DecodeFunction, Codec } from '../codec.js'\n\nexport interface Factory<A, T> {\n new (obj: A): T\n}\n\nexport function message <T> (encode: EncodeFunction<T>, decode: DecodeFunction<T>): Codec<T> {\n return createCodec('message', CODEC_TYPES.LENGTH_DELIMITED, encode, decode)\n}\n", "import { 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", "/**\n * @packageDocumentation\n *\n * This module contains the protobuf definition of the UnixFS data structure found at the root of all UnixFS DAGs.\n *\n * The UnixFS spec can be found in the [ipfs/specs repository](http://github.com/ipfs/specs)\n *\n * @example Create a file composed of several blocks\n *\n * ```TypeScript\n * import { UnixFS } from 'ipfs-unixfs'\n *\n * const data = new UnixFS({ type: 'file' })\n * data.addBlockSize(256n) // add the size of each block\n * data.addBlockSize(256n)\n * // ...\n * ```\n *\n * @example Create a directory that contains several files\n *\n * Creating a directory that contains several files is achieve by creating a unixfs element that identifies a MerkleDAG node as a directory. The links of that MerkleDAG node are the files that are contained in this directory.\n *\n * ```TypeScript\n * import { UnixFS } from 'ipfs-unixfs'\n *\n * const data = new UnixFS({ type: 'directory' })\n * ```\n *\n * @example Create an unixfs Data element\n *\n * ```TypeScript\n * import { UnixFS } from 'ipfs-unixfs'\n *\n * const data = new UnixFS({\n * // ...options\n * })\n * ```\n *\n * `options` is an optional object argument that might include the following keys:\n *\n * - type (string, default `file`): The type of UnixFS entry. Can be:\n * - `raw`\n * - `directory`\n * - `file`\n * - `metadata`\n * - `symlink`\n * - `hamt-sharded-directory`\n * - data (Uint8Array): The optional data field for this node\n * - blockSizes (Array, default: `[]`): If this is a `file` node that is made up of multiple blocks, `blockSizes` is a list numbers that represent the size of the file chunks stored in each child node. It is used to calculate the total file size.\n * - mode (Number, default `0644` for files, `0755` for directories/hamt-sharded-directories) file mode\n * - mtime (`Date`, `{ secs, nsecs }`, `{ Seconds, FractionalNanoseconds }`, `[ secs, nsecs ]`): The modification time of this node\n *\n * @example Add and remove a block size to the block size list\n *\n * ```TypeScript\n * import { UnixFS } from 'ipfs-unixfs'\n *\n * const data = new UnixFS({ type: 'file' })\n * const sizeInBytes = 100n\n * data.addBlockSize(sizeInBytes)\n * ```\n *\n * ```TypeScript\n * import { UnixFS } from 'ipfs-unixfs'\n *\n * const data = new UnixFS({ type: 'file' })\n *\n * const index = 0\n * data.removeBlockSize(index)\n * ```\n *\n * @example Get total fileSize\n *\n * ```TypeScript\n * import { UnixFS } from 'ipfs-unixfs'\n *\n * const data = new UnixFS({ type: 'file' })\n * data.fileSize() // => size in bytes\n * ```\n *\n * @example Marshal and unmarshal\n *\n * ```TypeScript\n * import { UnixFS } from 'ipfs-unixfs'\n *\n * const data = new UnixFS({ type: 'file' })\n * const marshaled = data.marshal()\n * const unmarshaled = UnixFS.unmarshal(marshaled)\n * ```\n *\n * @example Is this UnixFS entry a directory?\n *\n * ```TypeScript\n * import { UnixFS } from 'ipfs-unixfs'\n *\n * const dir = new UnixFS({ type: 'directory' })\n * dir.isDirectory() // true\n *\n * const file = new UnixFS({ type: 'file' })\n * file.isDirectory() // false\n * ```\n *\n * @example Has an mtime been set?\n *\n * If no modification time has been set, no `mtime` property will be present on the `Data` instance:\n *\n * ```TypeScript\n * import { UnixFS } from 'ipfs-unixfs'\n *\n * const file = new UnixFS({ type: 'file' })\n * file.mtime // undefined\n *\n * Object.prototype.hasOwnProperty.call(file, 'mtime') // false\n *\n * const dir = new UnixFS({ type: 'directory', mtime: { secs: 5n } })\n * dir.mtime // { secs: Number, nsecs: Number }\n * ```\n */\n\nimport { InvalidTypeError, InvalidUnixFSMessageError } from './errors.js'\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\nexport type UnixFSType = 'raw' | 'directory' | 'file' | 'metadata' | 'symlink' | 'hamt-sharded-directory'\n\nconst types: Record<string, UnixFSType> = {\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\n// https://github.com/ipfs/boxo/blob/364c5040ec91ec8e2a61446e9921e9225704c34d/ipld/unixfs/hamt/hamt.go#L778\nconst MAX_FANOUT = BigInt(1 << 10)\n\nexport interface UnixFSOptions {\n type?: UnixFSType\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 if (message.fanout != null && message.fanout > MAX_FANOUT) {\n throw new InvalidUnixFSMessageError(`Fanout size was too large - ${message.fanout} > ${MAX_FANOUT}`)\n }\n\n const data = new UnixFS({\n type: types[message.Type != null ? message.Type.toString() : 'File'],\n data: message.Data,\n blockSizes: message.blocksizes,\n mode: message.mode,\n mtime: message.mtime != null\n ? {\n secs: message.mtime.Seconds ?? 0n,\n nsecs: message.mtime.FractionalNanoseconds\n }\n : undefined,\n fanout: message.fanout\n })\n\n // make sure we honour the original mode\n data._originalMode = message.mode ?? 0\n\n return data\n }\n\n public type: string\n public data?: Uint8Array\n public blockSizes: bigint[]\n public hashType?: bigint\n public fanout?: bigint\n public mtime?: Mtime\n\n private _mode?: number\n private _originalMode: number\n\n constructor (options: UnixFSOptions = {\n type: 'file'\n }) {\n const {\n type,\n data,\n blockSizes,\n hashType,\n fanout,\n mtime,\n mode\n } = options\n\n if (type != null && !Object.values(types).includes(type)) {\n throw new InvalidTypeError('Type: ' + type + ' is not valid')\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 new InvalidTypeError(`Type: ${type} is not valid`)\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 }\nexport * from './errors.js'\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 public type: T\n public detail: D\n\n constructor (type: T, detail?: D) {\n super(type)\n\n this.type = type\n // @ts-expect-error detail may be undefined\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", "import * as dagPb from '@ipld/dag-pb'\nimport { CID } from 'multiformats/cid'\nimport { sha256 } from 'multiformats/hashes/sha2'\nimport type { WritableStorage } from '../index.js'\nimport type { Version as CIDVersion } from 'multiformats/cid'\nimport type { BlockCodec } from 'multiformats/codecs/interface'\nimport type { ProgressOptions } from 'progress-events'\n\nexport interface PersistOptions extends ProgressOptions {\n codec?: BlockCodec<any, any>\n cidVersion: CIDVersion\n signal?: AbortSignal\n}\n\nexport const persist = async (buffer: Uint8Array, blockstore: WritableStorage, options: PersistOptions): Promise<CID> => {\n if (options.codec == null) {\n options.codec = dagPb\n }\n\n const multihash = await sha256.digest(buffer)\n const cid = CID.create(options.cidVersion, options.codec.code, multihash)\n\n await blockstore.put(cid, buffer, options)\n\n return cid\n}\n", "import * as dagPb from '@ipld/dag-pb'\nimport { UnixFS } from 'ipfs-unixfs'\nimport * as raw from 'multiformats/codecs/raw'\nimport { CustomProgressEvent } from 'progress-events'\nimport { persist } from '../utils/persist.js'\nimport type { BufferImporter } from '../index.js'\nimport type { PersistOptions } from '../utils/persist.js'\nimport type { CID, Version } from 'multiformats/cid'\nimport type { ProgressOptions, ProgressEvent } from 'progress-events'\n\n/**\n * Passed to the onProgress callback while importing files\n */\nexport interface ImportWriteProgress {\n /**\n * How many bytes we have written for this source so far - this may be\n * bigger than the file size due to the DAG-PB wrappers of each block\n */\n bytesWritten: bigint\n\n /**\n * The CID of the block that has been written\n */\n cid: CID\n\n /**\n * The path of the file being imported, if one was specified\n */\n path?: string\n}\n\nexport type BufferImportProgressEvents =\n ProgressEvent<'unixfs:importer:progress:file:write', ImportWriteProgress>\n\nexport interface BufferImporterOptions extends ProgressOptions<BufferImportProgressEvents> {\n cidVersion: Version\n rawLeaves: boolean\n leafType: 'file' | 'raw'\n}\n\nexport function defaultBufferImporter (options: BufferImporterOptions): BufferImporter {\n return async function * bufferImporter (file, blockstore) {\n let bytesWritten = 0n\n\n for await (let block of file.content) {\n yield async () => { // eslint-disable-line no-loop-func\n let unixfs\n\n const opts: PersistOptions = {\n codec: dagPb,\n cidVersion: options.cidVersion,\n onProgress: options.onProgress\n }\n\n if (options.rawLeaves) {\n opts.codec = raw\n opts.cidVersion = 1\n } else {\n unixfs = new UnixFS({\n type: options.leafType,\n data: block\n })\n\n block = dagPb.encode({\n Data: unixfs.marshal(),\n Links: []\n })\n }\n\n const cid = await persist(block, blockstore, opts)\n\n bytesWritten += BigInt(block.byteLength)\n\n options.onProgress?.(new CustomProgressEvent<ImportWriteProgress>('unixfs:importer:progress:file:write', {\n bytesWritten,\n cid,\n path: file.path\n }))\n\n return {\n cid,\n unixfs,\n size: BigInt(block.length),\n block\n }\n }\n }\n }\n}\n", "export class InvalidParametersError extends Error {\n static name = 'InvalidParametersError'\n static code = 'ERR_INVALID_PARAMS'\n name = InvalidParametersError.name\n code = InvalidParametersError.code\n\n constructor (message = 'Invalid parameters') {\n super(message)\n }\n}\n\nexport class InvalidAvgChunkSizeError extends Error {\n static name = 'InvalidAvgChunkSizeError'\n static code = 'ERR_INVALID_AVG_CHUNK_SIZE'\n name = InvalidAvgChunkSizeError.name\n code = InvalidAvgChunkSizeError.code\n\n constructor (message = 'Invalid avg chunk size') {\n super(message)\n }\n}\n\nexport class InvalidChunkSizeError extends Error {\n static name = 'InvalidChunkSizeError'\n static code = 'ERR_INVALID_CHUNK_SIZE'\n name = InvalidChunkSizeError.name\n code = InvalidChunkSizeError.code\n\n constructor (message = 'Invalid chunk size') {\n super(message)\n }\n}\n\nexport class InvalidMinChunkSizeError extends Error {\n static name = 'InvalidMinChunkSizeError'\n static code = 'ERR_INVALID_MIN_CHUNK_SIZE'\n name = InvalidMinChunkSizeError.name\n code = InvalidMinChunkSizeError.code\n\n constructor (message = 'Invalid min chunk size') {\n super(message)\n }\n}\n\nexport class InvalidContentError extends Error {\n static name = 'InvalidContentError'\n static code = 'ERR_INVALID_CONTENT'\n name = InvalidContentError.name\n code = InvalidContentError.code\n\n constructor (message = 'Invalid content') {\n super(message)\n }\n}\n", "import { encode, prepare } from '@ipld/dag-pb'\nimport { UnixFS } from 'ipfs-unixfs'\nimport { persist } from '../utils/persist.js'\nimport type { Directory, InProgressImportResult, WritableStorage } from '../index.js'\nimport type { Version } from 'multiformats/cid'\n\nexport interface DirBuilderOptions {\n cidVersion: Version\n signal?: AbortSignal\n}\n\nexport interface DirBuilder {\n (dir: Directory, blockstore: WritableStorage, options: DirBuilderOptions): Promise<InProgressImportResult>\n}\n\nexport const defaultDirBuilder: DirBuilder = async (dir: Directory, blockstore: WritableStorage, options: DirBuilderOptions): Promise<InProgressImportResult> => {\n const unixfs = new UnixFS({\n type: 'directory',\n mtime: dir.mtime,\n mode: dir.mode\n })\n\n const block = encode(prepare({ Data: unixfs.marshal() }))\n const cid = await persist(block, blockstore, options)\n const path = dir.path\n\n return {\n cid,\n path,\n unixfs,\n size: BigInt(block.length),\n originalPath: dir.originalPath,\n block\n }\n}\n", "import { encode, prepare } from '@ipld/dag-pb'\nimport { UnixFS } from 'ipfs-unixfs'\nimport parallelBatch from 'it-parallel-batch'\nimport * as rawCodec from 'multiformats/codecs/raw'\nimport { CustomProgressEvent } from 'progress-events'\nimport { persist } from '../utils/persist.js'\nimport type { BufferImporter, File, InProgressImportResult, WritableStorage, SingleBlockImportResult, ImporterProgressEvents } from '../index.js'\nimport type { FileLayout, Reducer } from '../layout/index.js'\nimport type { PBLink, PBNode } from '@ipld/dag-pb'\nimport type { CID, Version } from 'multiformats/cid'\nimport type { ProgressOptions, ProgressEvent } from 'progress-events'\n\ninterface BuildFileBatchOptions {\n bufferImporter: BufferImporter\n blockWriteConcurrency: number\n}\n\nasync function * buildFileBatch (file: File, blockstore: WritableStorage, options: BuildFileBatchOptions): AsyncGenerator<InProgressImportResult> {\n let count = -1\n let previous: SingleBlockImportResult | undefined\n\n for await (const entry of parallelBatch(options.bufferImporter(file, blockstore), options.blockWriteConcurrency)) {\n count++\n\n if (count === 0) {\n // cache the first entry if case there aren't any more\n previous = {\n ...entry,\n single: true\n }\n\n continue\n } else if (count === 1 && previous != null) {\n // we have the second block of a multiple block import so yield the first\n yield {\n ...previous,\n block: undefined,\n single: undefined\n }\n previous = undefined\n }\n\n // yield the second or later block of a multiple block import\n yield {\n ...entry,\n block: undefined\n }\n }\n\n if (previous != null) {\n yield previous\n }\n}\n\nexport interface LayoutLeafProgress {\n /**\n * The CID of the leaf being written\n */\n cid: CID\n\n /**\n * The path of the file being imported, if one was specified\n */\n path?: string\n}\n\nexport type ReducerProgressEvents =\n ProgressEvent<'unixfs:importer:progress:file:layout', LayoutLeafProgress>\n\ninterface ReduceOptions extends ProgressOptions<ImporterProgressEvents> {\n reduceSingleLeafToSelf: boolean\n cidVersion: Version\n signal?: AbortSignal\n}\n\nfunction isSingleBlockImport (result: any): result is SingleBlockImportResult {\n return result.single === true\n}\n\nconst reduce = (file: File, blockstore: WritableStorage, options: ReduceOptions): Reducer => {\n const reducer: Reducer = async function (leaves) {\n if (leaves.length === 1 && isSingleBlockImport(leaves[0]) && options.reduceSingleLeafToSelf) {\n const leaf = leaves[0]\n let node: Uint8Array | PBNode = leaf.block\n\n if (isSingleBlockImport(leaf) && (file.mtime !== undefined || file.mode !== undefined)) {\n // only one leaf node which is a raw leaf - we have metadata so convert it into a\n // UnixFS entry otherwise we'll have nowhere to store the metadata\n leaf.unixfs = new UnixFS({\n type: 'file',\n mtime: file.mtime,\n mode: file.mode,\n data: leaf.block\n })\n\n node = { Data: leaf.unixfs.marshal(), Links: [] }\n\n leaf.block = encode(prepare(node))\n\n leaf.cid = await persist(leaf.block, blockstore, {\n ...options,\n cidVersion: options.cidVersion\n })\n leaf.size = BigInt(leaf.block.length)\n }\n\n options.onProgress?.(new CustomProgressEvent<LayoutLeafProgress>('unixfs:importer:progress:file:layout', {\n cid: leaf.cid,\n path: leaf.originalPath\n }))\n\n return {\n cid: leaf.cid,\n path: file.path,\n unixfs: leaf.unixfs,\n size: leaf.size,\n originalPath: leaf.originalPath\n }\n }\n\n // create a parent node and add all the leaves\n const f = new UnixFS({\n type: 'file',\n mtime: file.mtime,\n mode: file.mode\n })\n\n const links: PBLink[] = leaves\n .filter(leaf => {\n if (leaf.cid.code === rawCodec.code && leaf.size > 0) {\n return true\n }\n\n if (leaf.unixfs != null && leaf.unixfs.data == null && leaf.unixfs.fileSize() > 0n) {\n return true\n }\n\n return Boolean(leaf.unixfs?.data?.length)\n })\n .map((leaf) => {\n if (leaf.cid.code === rawCodec.code) {\n // node is a leaf buffer\n f.addBlockSize(leaf.size)\n\n return {\n Name: '',\n Tsize: Number(leaf.size),\n Hash: leaf.cid\n }\n }\n\n if ((leaf.unixfs?.data == null)) {\n // node is an intermediate node\n f.addBlockSize(leaf.unixfs?.fileSize() ?? 0n)\n } else {\n // node is a unixfs 'file' leaf node\n f.addBlockSize(BigInt(leaf.unixfs.data.length))\n }\n\n return {\n Name: '',\n Tsize: Number(leaf.size),\n Hash: leaf.cid\n }\n })\n\n const node = {\n Data: f.marshal(),\n Links: links\n }\n const block = encode(prepare(node))\n const cid = await persist(block, blockstore, options)\n\n options.onProgress?.(new CustomProgressEvent<LayoutLeafProgress>('unixfs:importer:progress:file:layout', {\n cid,\n path: file.originalPath\n }))\n\n return {\n cid,\n path: file.path,\n unixfs: f,\n size: BigInt(block.length + node.Links.reduce((acc, curr) => acc + (curr.Tsize ?? 0), 0)),\n originalPath: file.originalPath,\n block\n }\n }\n\n return reducer\n}\n\nexport interface FileBuilder {\n (file: File, blockstore: WritableStorage, options: FileBuilderOptions): Promise<InProgressImportResult>\n}\n\nexport interface FileBuilderOptions extends BuildFileBatchOptions, ReduceOptions {\n layout: FileLayout\n}\n\nexport const defaultFileBuilder: FileBuilder = async (file: File, block: WritableStorage, options: FileBuilderOptions): Promise<InProgressImportResult> => {\n return options.layout(\n buildFileBatch(file, block, options),\n reduce(file, block, options)\n )\n}\n", "import { CustomProgressEvent } from 'progress-events'\nimport { InvalidContentError } from '../errors.js'\nimport { defaultDirBuilder } from './dir.js'\nimport { defaultFileBuilder } from './file.js'\nimport type { DirBuilder, DirBuilderOptions } from './dir.js'\nimport type { FileBuilder, FileBuilderOptions } from './file.js'\nimport type { ChunkValidator } from './validate-chunks.js'\nimport type { Chunker } from '../chunker/index.js'\nimport type { Directory, File, FileCandidate, ImportCandidate, ImporterProgressEvents, InProgressImportResult, WritableStorage } from '../index.js'\nimport type { ProgressEvent, ProgressOptions } from 'progress-events'\n\n/**\n * Passed to the onProgress callback while importing files\n */\nexport interface ImportReadProgress {\n /**\n * How many bytes we have read from this source so far\n */\n bytesRead: bigint\n\n /**\n * The size of the current chunk\n */\n chunkSize: bigint\n\n /**\n * The path of the file being imported, if one was specified\n */\n path?: string\n}\n\nexport type DagBuilderProgressEvents =\n ProgressEvent<'unixfs:importer:progress:file:read', ImportReadProgress>\n\nfunction isIterable (thing: any): thing is Iterable<any> {\n return Symbol.iterator in thing\n}\n\nfunction isAsyncIterable (thing: any): thing is AsyncIterable<any> {\n return Symbol.asyncIterator in thing\n}\n\nfunction contentAsAsyncIterable (content: Uint8Array | AsyncIterable<Uint8Array> | Iterable<Uint8Array>): AsyncIterable<Uint8Array> {\n try {\n if (content instanceof Uint8Array) {\n return (async function * () {\n yield content\n })()\n } else if (isIterable(content)) {\n return (async function * () {\n yield * content\n })()\n } else if (isAsyncIterable(content)) {\n return content\n }\n } catch {\n throw new InvalidContentError('Content was invalid')\n }\n\n throw new InvalidContentError('Content was invalid')\n}\n\nexport interface DagBuilderOptions extends FileBuilderOptions, DirBuilderOptions, ProgressOptions<ImporterProgressEvents> {\n chunker: Chunker\n chunkValidator: ChunkValidator\n wrapWithDirectory: boolean\n dirBuilder?: DirBuilder\n fileBuilder?: FileBuilder\n}\n\nexport type ImporterSourceStream = AsyncIterable<ImportCandidate> | Iterable<ImportCandidate>\n\nexport interface DAGBuilder {\n (source: ImporterSourceStream, blockstore: WritableStorage): AsyncIterable<() => Promise<InProgressImportResult>>\n}\n\nexport function defaultDagBuilder (options: DagBuilderOptions): DAGBuilder {\n return async function * dagBuilder (source, blockstore) {\n for await (const entry of source) {\n let originalPath: string | undefined\n\n if (entry.path != null) {\n originalPath = entry.path\n entry.path = entry.path\n .split('/')\n .filter(path => path != null && path !== '.')\n .join('/')\n }\n\n if (isFileCandidate(entry)) {\n const file: File = {\n path: entry.path,\n mtime: entry.mtime,\n mode: entry.mode,\n content: (async function * () {\n let bytesRead = 0n\n\n for await (const chunk of options.chunker(options.chunkValidator(contentAsAsyncIterable(entry.content)))) {\n const currentChunkSize = BigInt(chunk.byteLength)\n bytesRead += currentChunkSize\n\n options.onProgress?.(new CustomProgressEvent<ImportReadProgress>('unixfs:importer:progress:file:read', {\n bytesRead,\n chunkSize: currentChunkSize,\n path: entry.path\n }))\n\n yield chunk\n }\n })(),\n originalPath\n }\n\n const fileBuilder = options.fileBuilder ?? defaultFileBuilder\n\n yield async () => fileBuilder(file, blockstore, options)\n } else if (entry.path != null) {\n const dir: Directory = {\n path: entry.path,\n mtime: entry.mtime,\n mode: entry.mode,\n originalPath\n }\n\n const dirBuilder = options.dirBuilder ?? defaultDirBuilder\n\n yield async () => dirBuilder(dir, blockstore, options)\n } else {\n throw new Error('Import candidate must have content or path or both')\n }\n }\n }\n}\n\nfunction isFileCandidate (entry: any): entry is FileCandidate {\n return entry.content != null\n}\n", "import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'\nimport { InvalidContentError } from '../errors.js'\n\nexport interface ChunkValidator { (source: AsyncIterable<Uint8Array>): AsyncIterable<Uint8Array> }\n\nexport const defaultChunkValidator = (): ChunkValidator => {\n return async function * validateChunks (source) {\n for await (const content of source) {\n if (content.length === undefined) {\n throw new InvalidContentError('Content was invalid')\n }\n\n if (typeof content === 'string' || content instanceof String) {\n yield uint8ArrayFromString(content.toString())\n } else if (Array.isArray(content)) {\n yield Uint8Array.from(content)\n } else if (content instanceof Uint8Array) {\n yield content\n } else {\n throw new InvalidContentError('Content was invalid')\n }\n }\n }\n}\n", "import batch from 'it-batch'\nimport type { FileLayout } from './index.js'\nimport type { InProgressImportResult } from '../index.js'\n\nconst DEFAULT_MAX_CHILDREN_PER_NODE = 174\n\nexport interface BalancedOptions {\n maxChildrenPerNode?: number\n}\n\nexport function balanced (options?: BalancedOptions): FileLayout {\n const maxChildrenPerNode = options?.maxChildrenPerNode ?? DEFAULT_MAX_CHILDREN_PER_NODE\n\n return async function balancedLayout (source, reduce): Promise<InProgressImportResult> {\n const roots = []\n\n for await (const chunked of batch(source, maxChildrenPerNode)) {\n roots.push(await reduce(chunked))\n }\n\n if (roots.length > 1) {\n return balancedLayout(roots, reduce)\n }\n\n return roots[0]\n }\n}\n", "import { CID } from 'multiformats/cid'\nimport type { WritableStorage, ImportResult, InProgressImportResult } from './index.js'\nimport type { PersistOptions } from './utils/persist.js'\nimport type { Mtime, UnixFS } from 'ipfs-unixfs'\n\nexport interface DirProps {\n root: boolean\n dir: boolean\n path: string\n dirty: boolean\n flat: boolean\n parent?: Dir\n parentKey?: string\n unixfs?: UnixFS\n mode?: number\n mtime?: Mtime\n}\n\nexport abstract class Dir {\n public options: PersistOptions\n public root: boolean\n public dir: boolean\n public path: string\n public dirty: boolean\n public flat: boolean\n public parent?: Dir\n public parentKey?: string\n public unixfs?: UnixFS\n public mode?: number\n public mtime?: Mtime\n public cid?: CID\n public size?: number\n public nodeSize?: number\n\n constructor (props: DirProps, options: PersistOptions) {\n this.options = options ?? {}\n\n this.root = props.root\n this.dir = props.dir\n this.path = props.path\n this.dirty = props.dirty\n this.flat = props.flat\n this.parent = props.parent\n this.parentKey = props.parentKey\n this.unixfs = props.unixfs\n this.mode = props.mode\n this.mtime = props.mtime\n }\n\n abstract put (name: string, value: InProgressImportResult | Dir): Promise<void>\n abstract get (name: string): Promise<InProgressImportResult | Dir | undefined>\n abstract eachChildSeries (): Iterable<{ key: string, child: InProgressImportResult | Dir }>\n abstract flush (blockstore: WritableStorage): AsyncGenerator<ImportResult>\n abstract estimateNodeSize (): number\n abstract childCount (): number\n}\n\n// we use these to calculate the node size to use as a check for whether a directory\n// should be sharded or not. Since CIDs have a constant length and We're only\n// interested in the data length and not the actual content identifier we can use\n// any old CID instead of having to hash the data which is expensive.\nexport const CID_V0 = CID.parse('QmUNLLsPACCz1vLxQVkXqqLX5R1X345qqfHbsf67hvA3Nn')\nexport const CID_V1 = CID.parse('zdj7WbTaiJT1fgatdet9Ei9iDB5hdCxkbVyhyh8YTUnXMiwYi')\n", "import { encode, prepare } from '@ipld/dag-pb'\nimport { UnixFS } from 'ipfs-unixfs'\nimport { Dir, CID_V0, CID_V1 } from './dir.js'\nimport { persist } from './utils/persist.js'\nimport type { DirProps } from './dir.js'\nimport type { ImportResult, InProgressImportResult } from './index.js'\nimport type { PersistOptions } from './utils/persist.js'\nimport type { PBNode } from '@ipld/dag-pb'\nimport type { Blockstore } from 'interface-blockstore'\nimport type { CID } from 'multiformats/cid'\n\nexport class DirFlat extends Dir {\n private readonly _children: Map<string, InProgressImportResult | Dir>\n\n constructor (props: DirProps, options: PersistOptions) {\n super(props, options)\n\n this._children = new Map()\n }\n\n async put (name: string, value: InProgressImportResult | Dir): Promise<void> {\n this.cid = undefined\n this.size = undefined\n this.nodeSize = undefined\n\n this._children.set(name, value)\n }\n\n async get (name: string): Promise<InProgressImportResult | Dir | undefined> {\n return Promise.resolve(this._children.get(name))\n }\n\n childCount (): number {\n return this._children.size\n }\n\n directChildrenCount (): number {\n return this.childCount()\n }\n\n onlyChild (): InProgressImportResult | Dir | undefined {\n return this._children.values().next().value\n }\n\n * eachChildSeries (): Generator<{ key: string, child: InProgressImportResult | Dir }, void, undefined> {\n for (const [key, child] of this._children.entries()) {\n yield {\n key,\n child\n }\n }\n }\n\n estimateNodeSize (): number {\n if (this.nodeSize !== undefined) {\n return this.nodeSize\n }\n\n this.nodeSize = 0\n\n // estimate size only based on DAGLink name and CID byte lengths\n // https://github.com/ipfs/go-unixfsnode/blob/37b47f1f917f1b2f54c207682f38886e49896ef9/data/builder/directory.go#L81-L96\n for (const [name, child] of this._children.entries()) {\n if (child.size != null && (child.cid != null)) {\n this.nodeSize += name.length + (this.options.cidVersion === 1 ? CID_V1.bytes.byteLength : CID_V0.bytes.byteLength)\n }\n }\n\n return this.nodeSize\n }\n\n async * flush (block: Blockstore): AsyncGenerator<ImportResult> {\n const links = []\n\n for (const [name, child] of this._children.entries()) {\n let result: { size?: bigint | number, cid?: CID } = child\n\n if (child instanceof Dir) {\n for await (const entry of child.flush(block)) {\n result = entry\n\n yield entry\n }\n }\n\n if (result.size != null && (result.cid != null)) {\n links.push({\n Name: name,\n Tsize: Number(result.size),\n Hash: result.cid\n })\n }\n }\n\n const unixfs = new UnixFS({\n type: 'directory',\n mtime: this.mtime,\n mode: this.mode\n })\n\n const node: PBNode = { Data: unixfs.marshal(), Links: links }\n const buffer = encode(prepare(node))\n const cid = await persist(buffer, block, this.options)\n const size = buffer.length + node.Links.reduce(\n /**\n * @param {number} acc\n * @param {PBLink} curr\n */\n (acc, curr) => acc + (curr.Tsize ?? 0),\n 0)\n\n this.cid = cid\n this.size = size\n\n yield {\n cid,\n unixfs,\n path: this.path,\n size: BigInt(size)\n }\n }\n}\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", "// @ts-expect-error no types\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): Promise<void> {\n const place = await this._findNewBucketAndPos(key)\n\n place.bucket._putAt(place, key, value)\n }\n\n async get (key: string): Promise<T | undefined> {\n const child = await this._findChild(key)\n\n if (child != null) {\n return child.value\n }\n }\n\n async del (key: string): Promise<void> {\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 (): number {\n return this._children.length\n }\n\n onlyChild (): Bucket<T> | BucketChild<T> {\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 <M> (map: (value: BucketChild<T>, index: number) => M, reduce: (reduced: Bucket<T> | BucketChild<T>) => M): M {\n const acc: M[] = []\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 <R = T> (asyncMap: (value: BucketChild<T>) => Promise<T[]>, asyncReduce: (reduced: any) => Promise<R>): Promise<R> {\n return asyncTransformBucket(this, asyncMap, asyncReduce)\n }\n\n toJSON (): Record<string, any> {\n return this.serialize(mapNode, reduceNodes)\n }\n\n prettyPrint (): string {\n return JSON.stringify(this.toJSON(), null, ' ')\n }\n\n tableSize (): number {\n return Math.pow(2, this._options.bits)\n }\n\n async _findChild (key: string): Promise<BucketChild<T> | undefined> {\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 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 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): void {\n this._putObjectAt(place.pos, {\n key,\n value,\n hash: place.hash\n })\n }\n\n _putObjectAt (pos: number, object: Bucket<T> | BucketChild<T>): void {\n if (this._children.get(pos) == null) {\n this._popCount++\n }\n this._children.set(pos, object)\n }\n\n _delAt (pos: number): void {\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 (): void {\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,\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): Bucket<T> | BucketChild<T> {\n return this._children.get(index)\n }\n}\n\nfunction exists (o: any): boolean {\n return Boolean(o)\n}\n\nfunction mapNode (node: { key: string }, _: number): string {\n return node.key\n}\n\nfunction reduceNodes <T> (nodes: T): any {\n return nodes\n}\n\nasync function asyncTransformBucket <T, R = T> (bucket: Bucket<T>, asyncMap: (value: BucketChild<T>) => Promise<T[]>, asyncReduce: (reduced: any) => Promise<R>): Promise<R> {\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 asyncReduce(output)\n}\n", "const START_MASKS = [\n 0b11111111,\n 0b11111110,\n 0b11111100,\n 0b11111000,\n 0b11110000,\n 0b11100000,\n 0b11000000,\n 0b10000000\n]\n\nconst STOP_MASKS = [\n 0b00000001,\n 0b00000011,\n 0b00000111,\n 0b00001111,\n 0b00011111,\n 0b00111111,\n 0b01111111,\n 0b11111111\n]\n\nexport class ConsumableBuffer {\n _value: Uint8Array\n _currentBytePos: number\n _currentBitPos: number\n\n constructor (value: Uint8Array) {\n this._value = value\n this._currentBytePos = value.length - 1\n this._currentBitPos = 7\n }\n\n availableBits (): number {\n return this._currentBitPos + 1 + this._currentBytePos * 8\n }\n\n totalBits (): number {\n return this._value.length * 8\n }\n\n take (bits: number): 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): void {\n this._currentBitPos += bits\n while (this._currentBitPos > 7) {\n this._currentBitPos -= 8\n this._currentBytePos += 1\n }\n }\n\n _haveBits (): boolean {\n return this._currentBytePos >= 0\n }\n}\n\nfunction byteBitsToInt (byte: number, start: number, length: number): number {\n const mask = maskFor(start, length)\n return (byte & mask) >>> start\n}\n\nfunction maskFor (start: number, length: number): number {\n return START_MASKS[start] & STOP_MASKS[Math.min(length + start - 1, 7)]\n}\n", "import { concat as uint8ArrayConcat } from 'uint8arrays/concat'\nimport { ConsumableBuffer } from './consumable-buffer.js'\n\nexport function wrapHash (hashFn: (value: Uint8Array) => Promise<Uint8Array>): (value: InfiniteHash | Uint8Array) => InfiniteHash {\n function hashing (value: InfiniteHash | Uint8Array): InfiniteHash {\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): Promise<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): void {\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 (): Promise<void> {\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", "/**\n * @packageDocumentation\n *\n * A [Hash Mapped Trie](https://en.wikipedia.org/wiki/Hash_array_mapped_trie) implementation for JavaScript.\n *\n * This is used by [@helia/unixfs](https://www.npmjs.com/package/@helia/unixfs) for it's HAMT-sharded directory implementation.\n *\n * @example\n *\n * ```TypeScript\n * import { createHAMT } from 'hamt-sharding'\n * import crypto from 'crypto-promise'\n *\n * // decide how to hash buffers made from keys, can return a Promise\n * const hashFn = async (buf) => {\n * return crypto\n * .createHash('sha256')\n * .update(buf)\n * .digest()\n * }\n *\n * const bucket = createHAMT({\n * hashFn: hashFn\n * })\n *\n * await bucket.put('key', 'value')\n *\n * const output = await bucket.get('key')\n * // output === 'value'\n * ```\n */\n\nimport { Bucket } from './bucket.js'\nimport { wrapHash } from './consumable-hash.js'\nimport type { BucketOptions, BucketPosition, BucketChild } from './bucket.js'\n\ninterface UserBucketOptions {\n hashFn(value: Uint8Array): Promise<Uint8Array>\n bits?: number\n}\n\nexport function createHAMT<T> (options: UserBucketOptions): Bucket<T> {\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 { encode, prepare } from '@ipld/dag-pb'\nimport { murmur3128 } from '@multiformats/murmur3'\nimport { createHAMT, Bucket } from 'hamt-sharding'\nimport { UnixFS } from 'ipfs-unixfs'\nimport { Dir, CID_V0, CID_V1 } from './dir.js'\nimport { persist } from './utils/persist.js'\nimport type { DirProps } from './dir.js'\nimport type { ImportResult, InProgressImportResult } from './index.js'\nimport type { PersistOptions } from './utils/persist.js'\nimport type { PBLink } from '@ipld/dag-pb'\nimport type { BucketChild } from 'hamt-sharding'\nimport type { Blockstore } from 'interface-blockstore'\n\nasync function hamtHashFn (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 HAMT_HASH_CODE = BigInt(0x22)\nconst DEFAULT_FANOUT_BITS = 8\n\nexport interface DirShardedOptions extends PersistOptions {\n shardFanoutBits: number\n}\n\nclass DirSharded extends Dir {\n private readonly _bucket: Bucket<InProgressImportResult | Dir>\n\n constructor (props: DirProps, options: DirShardedOptions) {\n super(props, options)\n\n this._bucket = createHAMT({\n hashFn: hamtHashFn,\n bits: options.shardFanoutBits ?? DEFAULT_FANOUT_BITS\n })\n }\n\n async put (name: string, value: InProgressImportResult | Dir): Promise<void> {\n this.cid = undefined\n this.size = undefined\n this.nodeSize = undefined\n\n await this._bucket.put(name, value)\n }\n\n async get (name: string): Promise<InProgressImportResult | Dir | undefined> {\n return this._bucket.get(name)\n }\n\n childCount (): number {\n return this._bucket.leafCount()\n }\n\n directChildrenCount (): number {\n return this._bucket.childrenCount()\n }\n\n onlyChild (): Bucket<InProgressImportResult | Dir> | BucketChild<InProgressImportResult | Dir> {\n return this._bucket.onlyChild()\n }\n\n * eachChildSeries (): Generator<{ key: string, child: InProgressImportResult | Dir }> {\n for (const { key, value } of this._bucket.eachLeafSeries()) {\n yield {\n key,\n child: value\n }\n }\n }\n\n estimateNodeSize (): number {\n if (this.nodeSize !== undefined) {\n return this.nodeSize\n }\n\n this.nodeSize = calculateSize(this._bucket, this, this.options)\n\n return this.nodeSize\n }\n\n async * flush (blockstore: Blockstore): AsyncGenerator<ImportResult> {\n for await (const entry of flush(this._bucket, blockstore, this, this.options)) {\n yield {\n ...entry,\n path: this.path\n }\n }\n }\n}\n\nexport default DirSharded\n\nasync function * flush (bucket: Bucket<Dir | InProgressImportResult>, blockstore: Blockstore, shardRoot: DirSharded | null, options: PersistOptions): AsyncIterable<ImportResult> {\n const children = bucket._children\n const padLength = (bucket.tableSize() - 1).toString(16).length\n const links: PBLink[] = []\n let childrenSize = 0n\n\n for (let i = 0; i < children.length; i++) {\n const child = children.get(i)\n\n if (child == null) {\n continue\n }\n\n const labelPrefix = i.toString(16).toUpperCase().padStart(padLength, '0')\n\n if (child instanceof Bucket) {\n let shard\n\n for await (const subShard of flush(child, blockstore, null, options)) {\n shard = subShard\n }\n\n if (shard == null) {\n throw new Error('Could not flush sharded directory, no subshard found')\n }\n\n links.push({\n Name: labelPrefix,\n Tsize: Number(shard.size),\n Hash: shard.cid\n })\n childrenSize += shard.size\n } else if (isDir(child.value)) {\n const dir = child.value\n let flushedDir: ImportResult | undefined\n\n for await (const entry of dir.flush(blockstore)) {\n flushedDir = entry\n\n yield flushedDir\n }\n\n if (flushedDir == null) {\n throw new Error('Did not flush dir')\n }\n\n const label = labelPrefix + child.key\n links.push({\n Name: label,\n Tsize: Number(flushedDir.size),\n Hash: flushedDir.cid\n })\n\n childrenSize += flushedDir.size\n } else {\n const value = child.value\n\n if (value.cid == null) {\n continue\n }\n\n const label = labelPrefix + child.key\n const size = value.size\n\n links.push({\n Name: label,\n Tsize: Number(size),\n Hash: value.cid\n })\n childrenSize += BigInt(size ?? 0)\n }\n }\n\n // go-ipfs uses little endian, that's why we have to\n // reverse the bit field before storing it\n const data = Uint8Array.from(children.bitField().reverse())\n const dir = new UnixFS({\n type: 'hamt-sharded-directory',\n data,\n fanout: BigInt(bucket.tableSize()),\n hashType: HAMT_HASH_CODE,\n mtime: shardRoot?.mtime,\n mode: shardRoot?.mode\n })\n\n const node = {\n Data: dir.marshal(),\n Links: links\n }\n const buffer = encode(prepare(node))\n const cid = await persist(buffer, blockstore, options)\n const size = BigInt(buffer.byteLength) + childrenSize\n\n yield {\n cid,\n unixfs: dir,\n size\n }\n}\n\nfunction isDir (obj: any): obj is Dir {\n return typeof obj.flush === 'function'\n}\n\nfunction calculateSize (bucket: Bucket<any>, shardRoot: DirSharded | null, options: PersistOptions): number {\n const children = bucket._children\n const padLength = (bucket.tableSize() - 1).toString(16).length\n const links: PBLink[] = []\n\n for (let i = 0; i < children.length; i++) {\n const child = children.get(i)\n\n if (child == null) {\n continue\n }\n\n const labelPrefix = i.toString(16).toUpperCase().padStart(padLength, '0')\n\n if (child instanceof Bucket) {\n const size = calculateSize(child, null, options)\n\n links.push({\n Name: labelPrefix,\n Tsize: Number(size),\n Hash: options.cidVersion === 0 ? CID_V0 : CID_V1\n })\n } else if (typeof child.value.flush === 'function') {\n const dir = child.value\n const size = dir.nodeSize()\n\n links.push({\n Name: labelPrefix + child.key,\n Tsize: Number(size),\n Hash: options.cidVersion === 0 ? CID_V0 : CID_V1\n })\n } else {\n const value = child.value\n\n if (value.cid == null) {\n continue\n }\n\n const label = labelPrefix + child.key\n const size = value.size\n\n links.push({\n Name: label,\n Tsize: Number(size),\n Hash: value.cid\n })\n }\n }\n\n // go-ipfs uses little endian, that's why we have to\n // reverse the bit field before storing it\n const data = Uint8Array.from(children.bitField().reverse())\n const dir = new UnixFS({\n type: 'hamt-sharded-directory',\n data,\n fanout: BigInt(bucket.tableSize()),\n hashType: HAMT_HASH_CODE,\n mtime: shardRoot?.mtime,\n mode: shardRoot?.mode\n })\n\n const buffer = encode(prepare({\n Data: dir.marshal(),\n Links: links\n }))\n\n return buffer.length\n}\n", "import { DirFlat } from './dir-flat.js'\nimport DirSharded from './dir-sharded.js'\nimport type { DirShardedOptions } from './dir-sharded.js'\nimport type { Dir } from './dir.js'\n\nexport async function flatToShard (child: Dir | null, dir: Dir, threshold: number, options: DirShardedOptions): Promise<DirSharded> {\n let newDir = dir as DirSharded\n\n if (dir instanceof DirFlat && dir.estimateNodeSize() > threshold) {\n newDir = await convertToShard(dir, options)\n }\n\n const parent = newDir.parent\n\n if (parent != null) {\n if (newDir !== dir) {\n if (child != null) {\n child.parent = newDir\n }\n\n if (newDir.parentKey == null) {\n throw new Error('No parent key found')\n }\n\n await parent.put(newDir.parentKey, newDir)\n }\n\n return flatToShard(newDir, parent, threshold, options)\n }\n\n return newDir\n}\n\nasync function convertToShard (oldDir: DirFlat, options: DirShardedOptions): Promise<DirSharded> {\n const newDir = new DirSharded({\n root: oldDir.root,\n dir: true,\n parent: oldDir.parent,\n parentKey: oldDir.parentKey,\n path: oldDir.path,\n dirty: oldDir.dirty,\n flat: false,\n mtime: oldDir.mtime,\n mode: oldDir.mode\n }, options)\n\n for (const { key, child } of oldDir.eachChildSeries()) {\n await newDir.put(key, child)\n }\n\n return newDir\n}\n", "export const toPathComponents = (path: string = ''): string[] => {\n // split on / unless escaped with \\\n return path.split(/(?<!\\\\)\\//).filter(Boolean)\n}\n", "import { DirFlat } from './dir-flat.js'\nimport { Dir } from './dir.js'\nimport { flatToShard } from './flat-to-shard.js'\nimport { toPathComponents } from './utils/to-path-components.js'\nimport type { ImportResult, InProgressImportResult, TreeBuilder, WritableStorage } from './index.js'\nimport type { PersistOptions } from './utils/persist.js'\n\nexport interface AddToTreeOptions extends PersistOptions {\n shardSplitThresholdBytes: number\n shardFanoutBits: number\n}\n\nasync function addToTree (elem: InProgressImportResult, tree: Dir, options: AddToTreeOptions): Promise<Dir> {\n const pathElems = toPathComponents(elem.path ?? '')\n const lastIndex = pathElems.length - 1\n let parent = tree\n let currentPath = ''\n\n for (let i = 0; i < pathElems.length; i++) {\n const pathElem = pathElems[i]\n\n currentPath += `${currentPath !== '' ? '/' : ''}${pathElem}`\n\n const last = (i === lastIndex)\n parent.dirty = true\n parent.cid = undefined\n parent.size = undefined\n\n if (last) {\n await parent.put(pathElem, elem)\n tree = await flatToShard(null, parent, options.shardSplitThresholdBytes, options)\n } else {\n let dir = await parent.get(pathElem)\n\n if ((dir == null) || !(dir instanceof Dir)) {\n dir = new DirFlat({\n root: false,\n dir: true,\n parent,\n parentKey: pathElem,\n path: currentPath,\n dirty: true,\n flat: true,\n mtime: dir?.unixfs?.mtime,\n mode: dir?.unixfs?.mode\n }, options)\n }\n\n await parent.put(pathElem, dir)\n\n parent = dir\n }\n }\n\n return tree\n}\n\nasync function * flushAndYield (tree: Dir | InProgressImportResult, blockstore: WritableStorage): AsyncGenerator<ImportResult> {\n if (!(tree instanceof Dir)) {\n if (tree.unixfs?.isDirectory() === true) {\n yield tree\n }\n\n return\n }\n\n yield * tree.flush(blockstore)\n}\n\nexport interface TreeBuilderOptions extends AddToTreeOptions {\n wrapWithDirectory: boolean\n}\n\nexport function defaultTreeBuilder (options: TreeBuilderOptions): TreeBuilder {\n return async function * treeBuilder (source, block) {\n let tree: Dir = new DirFlat({\n root: true,\n dir: true,\n path: '',\n dirty: true,\n flat: true\n }, options)\n\n let rootDir: string | undefined\n let singleRoot = false\n\n for await (const entry of source) {\n if (entry == null) {\n continue\n }\n\n // if all paths are from the same root directory, we should\n // wrap them all in that root directory\n const dir = `${entry.originalPath ?? ''}`.split('/')[0]\n\n if (dir != null && dir !== '') {\n if (rootDir == null) {\n rootDir = dir\n singleRoot = true\n } else if (rootDir !== dir) {\n singleRoot = false\n }\n }\n\n tree = await addToTree(entry, tree, options)\n\n if (entry.unixfs?.isDirectory() !== true) {\n yield entry\n }\n }\n\n if (options.wrapWithDirectory || (singleRoot && tree.childCount() > 1)) {\n yield * flushAndYield(tree, block)\n } else {\n for (const unwrapped of tree.eachChildSeries()) {\n if (unwrapped == null) {\n continue\n }\n\n yield * flushAndYield(unwrapped.child, block)\n }\n }\n }\n}\n"],
|
|
5
|
+
"mappings": "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F,CAAC,CACtB,CAGA,IAAME,GAAU,CACd,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EA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",
|
|
6
6
|
"names": ["require_murmurHash3js", "__commonJSMin", "exports", "module", "root", "undefined", "library", "_validBytes", "bytes", "i", "_x86Multiply", "m", "n", "_x86Rotl", "_x86Fmix", "h", "_x64Add", "o", "_x64Multiply", "_x64Rotl", "_x64LeftShift", "_x64Xor", "_x64Fmix", "seed", "remainder", "blocks", "h1", "k1", "c1", "c2", "h2", "h3", "h4", "k2", "k3", "k4", "c3", "c4", "require_murmurhash3js_revisited", "__commonJSMin", "exports", "module", "require_sparse_array", "__commonJSMin", "exports", "module", "index", "value", "pos", "needsSort", "last", "iterator", "i", "mapped", "reducer", "initialValue", "acc", "finder", "found", "noCreate", "bytePos", "byte", "bitPos", "previousPopCount", "popCountReduce", "mask", "bytePopCount", "popCount", "targetLength", "data", "elem", "randomIndex", "sortInternal", "bytes", "pendingBitsForResultingByte", "pendingBitsForNewByte", "resultingByte", "newByte", "pending", "usingBits", "masked", "valueOnly", "count", "_v", "v", "a", "b", "index_exports", "__export", "InvalidAvgChunkSizeError", "InvalidChunkSizeError", "InvalidContentError", "InvalidMinChunkSizeError", "InvalidParametersError", "importByteStream", "importBytes", "importDirectory", "importFile", "importer", "isAsyncIterable", "thing", "first", "source", "entry", "src_default", "isAsyncIterable", "thing", "batch", "source", "size", "things", "src_default", "parallelBatch", "source", "size", "tasks", "src_default", "things", "p", "value", "err", "result", "alloc", "size", "allocUnsafe", "concat", "arrays", "length", "acc", "curr", "output", "allocUnsafe", "offset", "arr", "equals", "a", "b", "i", "symbol", "findBufAndOffset", "bufs", "index", "offset", "buf", "bufEnd", "isUint8ArrayList", "value", "Uint8ArrayList", "_Uint8ArrayList", "data", "length", "res", "i", "bytes", "beginInclusive", "endExclusive", "concat", "list", "bufStart", "sliceStartInBuf", "sliceEndsInBuf", "start", "search", "needle", "M", "radix", "rightmostPositions", "c", "j", "right", "lastIndex", "lastPatIndex", "skip", "char", "byteOffset", "allocUnsafe", "littleEndian", "alloc", "other", "equals", "acc", "curr", "DEFAULT_CHUNK_SIZE", "fixedSize", "options", "chunkSize", "source", "list", "Uint8ArrayList", "currentLength", "emitted", "buffer", "newBl", "src_exports", "__export", "code", "createLink", "createNode", "decode", "encode", "name", "prepare", "validate", "base32_exports", "__export", "base32", "base32hex", "base32hexpad", "base32hexpadupper", "base32hexupper", "base32pad", "base32padupper", "base32upper", "base32z", "bytes_exports", "__export", "coerce", "empty", "equals", "fromHex", "fromString", "isBinary", "toHex", "toString", "d", "hex", "byte", "hexes", "b", "aa", "bb", "ii", "o", "str", "base", "ALPHABET", "name", "BASE_MAP", "j", "x", "xc", "BASE", "LEADER", "FACTOR", "iFACTOR", "encode", "source", "zeroes", "length", "pbegin", "pend", "size", "b58", "carry", "i", "it1", "it2", "str", "decodeUnsafe", "psz", "b256", "it3", "it4", "vch", "decode", "string", "buffer", "src", "_brrp__multiformats_scope_baseX", "base_x_default", "Encoder", "name", "prefix", "baseEncode", "bytes", "Decoder", "baseDecode", "prefixCodePoint", "text", "decoder", "or", "ComposedDecoder", "decoders", "input", "left", "right", "Codec", "from", "encode", "decode", "baseX", "alphabet", "base_x_default", "coerce", "string", "alphabetIdx", "bitsPerChar", "end", "out", "bits", "buffer", "written", "i", "value", "data", "pad", "mask", "createAlphabetIdx", "rfc4648", "base32", "rfc4648", "base32upper", "base32pad", "base32padupper", "base32hex", "base32hexupper", "base32hexpad", "base32hexpadupper", "base32z", "base36_exports", "__export", "base36", "base36upper", "base36", "baseX", "base36upper", "base58_exports", "__export", "base58btc", "base58flickr", "base58btc", "baseX", "base58flickr", "encode_1", "encode", "MSB", "REST", "MSBALL", "INT", "num", "out", "offset", "oldOffset", "decode", "read", "MSB$1", "REST$1", "buf", "res", "shift", "counter", "b", "l", "N1", "N2", "N3", "N4", "N5", "N6", "N7", "N8", "N9", "length", "value", "varint", "_brrp_varint", "varint_default", "decode", "data", "offset", "varint_default", "encodeTo", "int", "target", "encodingLength", "create", "code", "digest", "size", "sizeOffset", "encodingLength", "digestOffset", "bytes", "encodeTo", "Digest", "decode", "multihash", "coerce", "equals", "a", "b", "data", "format", "link", "base", "bytes", "version", "toStringV0", "baseCache", "base58btc", "toStringV1", "base32", "cache", "baseCache", "cid", "CID", "_CID", "version", "code", "multihash", "bytes", "DAG_PB_CODE", "SHA_256_CODE", "digest", "create", "other", "self", "unknown", "equals", "base", "format", "input", "value", "encodeCID", "cidSymbol", "decode", "remainder", "specs", "prefixSize", "multihashBytes", "coerce", "digestBytes", "Digest", "initialBytes", "offset", "next", "i", "length", "codec", "multihashCode", "digestSize", "size", "multihashSize", "source", "prefix", "parseCIDtoBytes", "decoder", "base58btc", "base32", "base36", "toStringV0", "toStringV1", "codeOffset", "encodingLength", "hashOffset", "encodeTo", "textDecoder", "decodeVarint", "bytes", "offset", "v", "shift", "b", "decodeBytes", "byteLen", "postOffset", "decodeKey", "index", "wire", "decodeLink", "link", "l", "wireType", "fieldNum", "byts", "decodeNode", "links", "linksBeforeData", "data", "node", "textEncoder", "maxInt32", "maxUInt32", "encodeLink", "link", "bytes", "i", "encodeVarint", "nameBytes", "encodeNode", "node", "size", "sizeNode", "index", "sizeLink", "n", "l", "sov", "offset", "v", "base", "x", "len64", "len8tab", "pbNodeProperties", "pbLinkProperties", "textEncoder", "linkComparator", "a", "b", "abuf", "bbuf", "x", "y", "i", "len", "hasOnlyProperties", "node", "properties", "p", "asLink", "link", "Hash", "CID", "pbl", "cid", "e", "prepare", "pbn", "validate", "createNode", "data", "links", "createLink", "name", "size", "toByteView", "buf", "name", "code", "encode", "node", "validate", "pbn", "l", "link", "encodeNode", "decode", "bytes", "buf", "toByteView", "decodeNode", "CID", "InvalidTypeError", "_InvalidTypeError", "message", "InvalidUnixFSMessageError", "_InvalidUnixFSMessageError", "N1", "N2", "N3", "N4", "N5", "N6", "N7", "MSB", "REST", "encodingLength", "value", "encodeUint8Array", "buf", "offset", "decodeUint8Array", "buf", "offset", "b", "res", "REST", "MSB", "N4", "N5", "N6", "N7", "f32", "f8b", "writeFloatLE", "val", "buf", "pos", "readFloatLE", "buf", "pos", "f8b", "f32", "f64", "d8b", "writeDoubleLE", "val", "buf", "pos", "readDoubleLE", "buf", "pos", "d8b", "f64", "MAX_SAFE_NUMBER_INTEGER", "MIN_SAFE_NUMBER_INTEGER", "LongBits", "_LongBits", "lo", "hi", "unsigned", "mask", "part0", "part1", "part2", "value", "zero", "negative", "TWO_32", "sign", "length", "string", "len", "c", "i", "read", "buffer", "start", "end", "parts", "chunk", "t", "write", "offset", "c1", "c2", "indexOutOfRange", "reader", "writeLength", "readFixed32End", "buf", "end", "Uint8ArrayReader", "buffer", "value", "readFloatLE", "readDoubleLE", "length", "start", "bytes", "read", "wireType", "bits", "LongBits", "i", "lo", "hi", "decodeUint8Array", "encodingLength", "createReader", "decodeMessage", "buf", "codec", "opts", "reader", "createReader", "base10_exports", "__export", "base10", "base10", "baseX", "base16_exports", "__export", "base16", "base16upper", "base16", "rfc4648", "base16upper", "base2_exports", "__export", "base2", "base2", "rfc4648", "base256emoji_exports", "__export", "base256emoji", "alphabet", "alphabetBytesToChars", "p", "c", "i", "alphabetCharsToBytes", "codePoint", "encode", "data", "decode", "str", "byts", "char", "byt", "base256emoji", "from", "base64_exports", "__export", "base64", "base64pad", "base64url", "base64urlpad", "base64", "rfc4648", "base64pad", "base64url", "base64urlpad", "base8_exports", "__export", "base8", "base8", "rfc4648", "identity_exports", "__export", "identity", "identity", "from", "buf", "toString", "str", "fromString", "textEncoder", "textDecoder", "raw_exports", "__export", "code", "decode", "encode", "name", "name", "code", "encode", "node", "coerce", "decode", "data", "identity_exports", "__export", "identity", "code", "name", "encode", "coerce", "digest", "input", "options", "create", "identity", "sha2_browser_exports", "__export", "sha256", "sha512", "DEFAULT_MIN_DIGEST_LENGTH", "from", "name", "code", "encode", "minDigestLength", "maxDigestLength", "Hasher", "input", "options", "result", "createDigest", "digest", "truncate", "create", "sha", "name", "data", "sha256", "from", "sha512", "bases", "identity_exports", "base2_exports", "base8_exports", "base10_exports", "base16_exports", "base32_exports", "base36_exports", "base58_exports", "base64_exports", "base256emoji_exports", "hashes", "sha2_browser_exports", "createCodec", "name", "prefix", "encode", "decode", "string", "buf", "str", "ascii", "i", "allocUnsafe", "BASES", "bases", "bases_default", "fromString", "string", "encoding", "base", "bases_default", "pool", "size", "SIZE", "MAX", "slab", "offset", "allocUnsafe", "buf", "Op", "fn", "len", "val", "noop", "State", "writer", "bufferPool", "pool", "alloc", "size", "allocUnsafe", "Uint8ArrayWriter", "value", "VarintOp", "writeVarint64", "LongBits", "bits", "encodeUint8Array", "encodingLength", "writeByte", "writeFixed32", "writeFloatLE", "writeDoubleLE", "writeBytes", "length", "write", "head", "tail", "buf", "pos", "writeVarint32", "writeBytesBuffer", "writeStringBuffer", "fromString", "createWriter", "encodeMessage", "message", "codec", "w", "createWriter", "CODEC_TYPES", "createCodec", "name", "type", "encode", "decode", "enumeration", "v", "findValue", "val", "encode", "writer", "enumValue", "decode", "reader", "createCodec", "CODEC_TYPES", "message", "encode", "decode", "createCodec", "CODEC_TYPES", "Data", "DataType", "__DataTypeValues", "enumeration", "_codec", "message", "obj", "w", "opts", "value", "UnixTime", "reader", "length", "end", "tag", "encodeMessage", "buf", "decodeMessage", "Metadata", "types", "dirTypes", "DEFAULT_FILE_MODE", "DEFAULT_DIRECTORY_MODE", "MAX_FANOUT", "UnixFS", "_UnixFS", "marshaled", "message", "Data", "InvalidUnixFSMessageError", "data", "options", "type", "blockSizes", "hashType", "fanout", "mtime", "mode", "InvalidTypeError", "size", "index", "sum", "CustomProgressEvent", "type", "detail", "persist", "buffer", "blockstore", "options", "src_exports", "multihash", "sha256", "cid", "CID", "defaultBufferImporter", "options", "file", "blockstore", "bytesWritten", "block", "unixfs", "opts", "src_exports", "raw_exports", "UnixFS", "encode", "cid", "persist", "CustomProgressEvent", "InvalidParametersError", "_InvalidParametersError", "message", "InvalidAvgChunkSizeError", "_InvalidAvgChunkSizeError", "InvalidChunkSizeError", "_InvalidChunkSizeError", "InvalidMinChunkSizeError", "_InvalidMinChunkSizeError", "InvalidContentError", "_InvalidContentError", "defaultDirBuilder", "dir", "blockstore", "options", "unixfs", "UnixFS", "block", "encode", "prepare", "cid", "persist", "path", "buildFileBatch", "file", "blockstore", "options", "count", "previous", "entry", "parallelBatch", "isSingleBlockImport", "result", "reduce", "leaves", "leaf", "node", "UnixFS", "encode", "prepare", "persist", "CustomProgressEvent", "f", "links", "code", "block", "cid", "acc", "curr", "defaultFileBuilder", "isIterable", "thing", "isAsyncIterable", "contentAsAsyncIterable", "content", "InvalidContentError", "defaultDagBuilder", "options", "source", "blockstore", "entry", "originalPath", "path", "isFileCandidate", "file", "bytesRead", "chunk", "currentChunkSize", "CustomProgressEvent", "fileBuilder", "defaultFileBuilder", "dir", "dirBuilder", "defaultDirBuilder", "defaultChunkValidator", "source", "content", "InvalidContentError", "fromString", "DEFAULT_MAX_CHILDREN_PER_NODE", "balanced", "options", "maxChildrenPerNode", "balancedLayout", "source", "reduce", "roots", "chunked", "src_default", "Dir", "props", "options", "CID_V0", "CID", "CID_V1", "DirFlat", "Dir", "props", "options", "name", "value", "key", "child", "CID_V1", "CID_V0", "block", "links", "result", "entry", "unixfs", "UnixFS", "node", "buffer", "encode", "prepare", "cid", "persist", "size", "acc", "curr", "import_murmurhash3js_revisited", "fromNumberTo32BitBuf", "number", "bytes", "i", "murmur332", "from", "input", "mur", "murmur3128", "bytes_exports", "murmur364", "import_sparse_array", "Bucket", "_Bucket", "options", "parent", "posAtParent", "SparseArray", "key", "value", "place", "child", "acc", "children", "map", "reduce", "index", "asyncMap", "asyncReduce", "asyncTransformBucket", "mapNode", "reduceNodes", "result", "hashValue", "fromString", "bucket", "newPlace", "pos", "object", "onlyChild", "exists", "hash", "o", "node", "_", "nodes", "output", "mappedChildren", "START_MASKS", "STOP_MASKS", "ConsumableBuffer", "value", "bits", "pendingBits", "result", "byte", "availableBits", "taking", "byteBitsToInt", "start", "length", "mask", "maskFor", "wrapHash", "hashFn", "hashing", "value", "InfiniteHash", "bits", "pendingBits", "result", "hash", "available", "took", "availableForUntake", "concat", "hashValue", "buffer", "ConsumableBuffer", "createHAMT", "options", "bucketOptions", "wrapHash", "Bucket", "hamtHashFn", "buf", "murmur3128", "HAMT_HASH_CODE", "DEFAULT_FANOUT_BITS", "DirSharded", "Dir", "props", "options", "createHAMT", "name", "value", "key", "calculateSize", "blockstore", "entry", "flush", "dir_sharded_default", "bucket", "shardRoot", "children", "padLength", "links", "childrenSize", "i", "child", "labelPrefix", "Bucket", "shard", "subShard", "isDir", "dir", "flushedDir", "label", "size", "data", "UnixFS", "node", "buffer", "encode", "prepare", "cid", "persist", "obj", "CID_V0", "CID_V1", "flatToShard", "child", "dir", "threshold", "options", "newDir", "DirFlat", "convertToShard", "parent", "oldDir", "dir_sharded_default", "key", "toPathComponents", "path", "addToTree", "elem", "tree", "options", "pathElems", "toPathComponents", "lastIndex", "parent", "currentPath", "i", "pathElem", "last", "flatToShard", "dir", "Dir", "DirFlat", "flushAndYield", "blockstore", "defaultTreeBuilder", "source", "block", "rootDir", "singleRoot", "entry", "unwrapped", "importer", "source", "blockstore", "options", "candidates", "wrapWithDirectory", "shardSplitThresholdBytes", "shardFanoutBits", "cidVersion", "rawLeaves", "leafType", "fileImportConcurrency", "blockWriteConcurrency", "reduceSingleLeafToSelf", "chunker", "fixedSize", "chunkValidator", "defaultChunkValidator", "buildDag", "defaultDagBuilder", "balanced", "defaultBufferImporter", "buildTree", "defaultTreeBuilder", "entry", "parallelBatch", "importFile", "content", "result", "src_default", "InvalidParametersError", "importDirectory", "importBytes", "buf", "importByteStream", "bufs"]
|
|
7
7
|
}
|