@fireproof/core 0.10.0-dev → 0.10.2-dev

Sign up to get free protection for your applications and to get access to all the features.
Files changed (96) hide show
  1. package/dist/fireproof.browser.js +2 -3
  2. package/dist/fireproof.browser.js.map +2 -2
  3. package/dist/fireproof.cjs.js +2 -3
  4. package/dist/fireproof.cjs.js.map +2 -2
  5. package/dist/fireproof.esm.js +2 -3
  6. package/dist/fireproof.esm.js.map +2 -2
  7. package/package.json +5 -1
  8. package/.eslintrc.cjs +0 -37
  9. package/.vscode/launch.json +0 -12
  10. package/dist/crdt-helpers.browser.js +0 -4961
  11. package/dist/crdt-helpers.browser.js.map +0 -7
  12. package/dist/crdt-helpers.cjs.js +0 -4823
  13. package/dist/crdt-helpers.cjs.js.map +0 -7
  14. package/dist/crdt-helpers.esm.js +0 -4788
  15. package/dist/crdt-helpers.esm.js.map +0 -7
  16. package/dist/crdt.browser.js +0 -18214
  17. package/dist/crdt.browser.js.map +0 -7
  18. package/dist/crdt.cjs.js +0 -8692
  19. package/dist/crdt.cjs.js.map +0 -7
  20. package/dist/crdt.esm.js +0 -8682
  21. package/dist/crdt.esm.js.map +0 -7
  22. package/dist/database.browser.js +0 -18867
  23. package/dist/database.browser.js.map +0 -7
  24. package/dist/database.cjs.js +0 -9296
  25. package/dist/database.cjs.js.map +0 -7
  26. package/dist/database.esm.js +0 -9288
  27. package/dist/database.esm.js.map +0 -7
  28. package/dist/loader-helpers.browser.js +0 -6943
  29. package/dist/loader-helpers.browser.js.map +0 -7
  30. package/dist/loader-helpers.cjs.js +0 -4419
  31. package/dist/loader-helpers.cjs.js.map +0 -7
  32. package/dist/loader-helpers.esm.js +0 -4408
  33. package/dist/loader-helpers.esm.js.map +0 -7
  34. package/dist/loader.browser.js +0 -15968
  35. package/dist/loader.browser.js.map +0 -7
  36. package/dist/loader.cjs.js +0 -6667
  37. package/dist/loader.cjs.js.map +0 -7
  38. package/dist/loader.esm.js +0 -6657
  39. package/dist/loader.esm.js.map +0 -7
  40. package/dist/store-browser.browser.js +0 -1414
  41. package/dist/store-browser.browser.js.map +0 -7
  42. package/dist/store-browser.cjs.js +0 -1387
  43. package/dist/store-browser.cjs.js.map +0 -7
  44. package/dist/store-browser.esm.js +0 -1358
  45. package/dist/store-browser.esm.js.map +0 -7
  46. package/dist/store-fs.browser.js +0 -16142
  47. package/dist/store-fs.browser.js.map +0 -7
  48. package/dist/store-fs.cjs.js +0 -1171
  49. package/dist/store-fs.cjs.js.map +0 -7
  50. package/dist/store-fs.esm.js +0 -1143
  51. package/dist/store-fs.esm.js.map +0 -7
  52. package/dist/store.browser.js +0 -1113
  53. package/dist/store.browser.js.map +0 -7
  54. package/dist/store.cjs.js +0 -1126
  55. package/dist/store.cjs.js.map +0 -7
  56. package/dist/store.esm.js +0 -1097
  57. package/dist/store.esm.js.map +0 -7
  58. package/dist/transaction.browser.js +0 -17241
  59. package/dist/transaction.browser.js.map +0 -7
  60. package/dist/transaction.cjs.js +0 -7842
  61. package/dist/transaction.cjs.js.map +0 -7
  62. package/dist/transaction.esm.js +0 -7831
  63. package/dist/transaction.esm.js.map +0 -7
  64. package/dist/types.d.browser.js +0 -4
  65. package/dist/types.d.browser.js.map +0 -7
  66. package/dist/types.d.cjs.js +0 -19
  67. package/dist/types.d.cjs.js.map +0 -7
  68. package/dist/types.d.esm.js +0 -1
  69. package/dist/types.d.esm.js.map +0 -7
  70. package/scripts/analyze.js +0 -31
  71. package/scripts/build.js +0 -20
  72. package/scripts/serve.js +0 -20
  73. package/scripts/settings.js +0 -65
  74. package/scripts/test.js +0 -14
  75. package/src/crdt-helpers.ts +0 -89
  76. package/src/crdt.ts +0 -45
  77. package/src/database.ts +0 -61
  78. package/src/fireproof.ts +0 -6
  79. package/src/loader-helpers.ts +0 -53
  80. package/src/loader.ts +0 -66
  81. package/src/store-browser.ts +0 -76
  82. package/src/store-fs.ts +0 -51
  83. package/src/store.ts +0 -32
  84. package/src/transaction.ts +0 -68
  85. package/src/types.d.ts +0 -38
  86. package/test/crdt.test.js +0 -142
  87. package/test/database.test.js +0 -144
  88. package/test/fireproof.test.js +0 -50
  89. package/test/globals.d.ts +0 -4
  90. package/test/hello.test.js +0 -9
  91. package/test/helpers.js +0 -34
  92. package/test/loader.test.js +0 -112
  93. package/test/store-fs.test.js +0 -105
  94. package/test/transaction.test.js +0 -90
  95. package/tsconfig.json +0 -18
  96. package/webpack.config.cjs +0 -17
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../node_modules/multiformats/vendor/varint.js", "../node_modules/multiformats/src/varint.js", "../node_modules/multiformats/src/bytes.js", "../node_modules/multiformats/src/hashes/digest.js", "../node_modules/multiformats/vendor/base-x.js", "../node_modules/multiformats/src/bases/base.js", "../node_modules/multiformats/src/bases/base58.js", "../node_modules/multiformats/src/bases/base32.js", "../node_modules/multiformats/src/cid.js", "../node_modules/multiformats/src/hashes/hasher.js", "../node_modules/multiformats/src/block.js", "../node_modules/multiformats/src/hashes/sha2-browser.js", "../node_modules/@ipld/dag-cbor/src/index.js", "../node_modules/@ipld/dag-cbor/node_modules/cborg/esm/lib/is.js", "../node_modules/@ipld/dag-cbor/node_modules/cborg/esm/lib/token.js", "../node_modules/@ipld/dag-cbor/node_modules/cborg/esm/lib/byte-utils.js", "../node_modules/@ipld/dag-cbor/node_modules/cborg/esm/lib/bl.js", "../node_modules/@ipld/dag-cbor/node_modules/cborg/esm/lib/common.js", "../node_modules/@ipld/dag-cbor/node_modules/cborg/esm/lib/0uint.js", "../node_modules/@ipld/dag-cbor/node_modules/cborg/esm/lib/1negint.js", "../node_modules/@ipld/dag-cbor/node_modules/cborg/esm/lib/2bytes.js", "../node_modules/@ipld/dag-cbor/node_modules/cborg/esm/lib/3string.js", "../node_modules/@ipld/dag-cbor/node_modules/cborg/esm/lib/4array.js", "../node_modules/@ipld/dag-cbor/node_modules/cborg/esm/lib/5map.js", "../node_modules/@ipld/dag-cbor/node_modules/cborg/esm/lib/6tag.js", "../node_modules/@ipld/dag-cbor/node_modules/cborg/esm/lib/7float.js", "../node_modules/@ipld/dag-cbor/node_modules/cborg/esm/lib/jump.js", "../node_modules/@ipld/dag-cbor/node_modules/cborg/esm/lib/encode.js", "../node_modules/@ipld/dag-cbor/node_modules/cborg/esm/lib/decode.js", "../node_modules/@alanshaw/pail/node_modules/multiformats/vendor/varint.js", "../node_modules/@alanshaw/pail/node_modules/multiformats/src/varint.js", "../node_modules/@alanshaw/pail/node_modules/multiformats/src/bytes.js", "../node_modules/@alanshaw/pail/node_modules/multiformats/src/hashes/digest.js", "../node_modules/@alanshaw/pail/node_modules/multiformats/vendor/base-x.js", "../node_modules/@alanshaw/pail/node_modules/multiformats/src/bases/base.js", "../node_modules/@alanshaw/pail/node_modules/multiformats/src/bases/base58.js", "../node_modules/@alanshaw/pail/node_modules/multiformats/src/bases/base32.js", "../node_modules/@alanshaw/pail/node_modules/multiformats/src/cid.js", "../node_modules/@alanshaw/pail/node_modules/multiformats/src/hashes/hasher.js", "../node_modules/@alanshaw/pail/node_modules/multiformats/src/block.js", "../node_modules/@alanshaw/pail/node_modules/multiformats/src/hashes/sha2-browser.js", "../node_modules/@alanshaw/pail/src/clock.js", "../node_modules/@alanshaw/pail/src/shard.js", "../node_modules/@alanshaw/pail/src/index.js", "../node_modules/@alanshaw/pail/node_modules/multiformats/src/link.js", "../node_modules/@alanshaw/pail/src/block.js", "../node_modules/@alanshaw/pail/src/crdt.js", "../src/crdt-helpers.ts"],
4
- "sourcesContent": ["var encode_1 = encode;\n\nvar MSB = 0x80\n , REST = 0x7F\n , MSBALL = ~REST\n , INT = Math.pow(2, 31);\n\nfunction encode(num, out, offset) {\n out = out || [];\n offset = offset || 0;\n var oldOffset = offset;\n\n while(num >= INT) {\n out[offset++] = (num & 0xFF) | MSB;\n num /= 128;\n }\n while(num & MSBALL) {\n out[offset++] = (num & 0xFF) | MSB;\n num >>>= 7;\n }\n out[offset] = num | 0;\n \n encode.bytes = offset - oldOffset + 1;\n \n return out\n}\n\nvar decode = read;\n\nvar MSB$1 = 0x80\n , REST$1 = 0x7F;\n\nfunction read(buf, offset) {\n var res = 0\n , offset = offset || 0\n , shift = 0\n , counter = offset\n , b\n , l = buf.length;\n\n do {\n if (counter >= l) {\n read.bytes = 0;\n throw new RangeError('Could not decode varint')\n }\n b = buf[counter++];\n res += shift < 28\n ? (b & REST$1) << shift\n : (b & REST$1) * Math.pow(2, shift);\n shift += 7;\n } while (b >= MSB$1)\n\n read.bytes = counter - offset;\n\n return res\n}\n\nvar N1 = Math.pow(2, 7);\nvar N2 = Math.pow(2, 14);\nvar N3 = Math.pow(2, 21);\nvar N4 = Math.pow(2, 28);\nvar N5 = Math.pow(2, 35);\nvar N6 = Math.pow(2, 42);\nvar N7 = Math.pow(2, 49);\nvar N8 = Math.pow(2, 56);\nvar N9 = Math.pow(2, 63);\n\nvar length = function (value) {\n return (\n value < N1 ? 1\n : value < N2 ? 2\n : value < N3 ? 3\n : value < N4 ? 4\n : value < N5 ? 5\n : value < N6 ? 6\n : value < N7 ? 7\n : value < N8 ? 8\n : value < N9 ? 9\n : 10\n )\n};\n\nvar varint = {\n encode: encode_1\n , decode: decode\n , encodingLength: length\n};\n\nvar _brrp_varint = varint;\n\nexport default _brrp_varint;\n", "import varint from '../vendor/varint.js'\n\n/**\n * @param {Uint8Array} data\n * @param {number} [offset=0]\n * @returns {[number, number]}\n */\nexport const decode = (data, offset = 0) => {\n const code = varint.decode(data, offset)\n return [code, varint.decode.bytes]\n}\n\n/**\n * @param {number} int\n * @param {Uint8Array} target\n * @param {number} [offset=0]\n */\nexport const encodeTo = (int, target, offset = 0) => {\n varint.encode(int, target, offset)\n return target\n}\n\n/**\n * @param {number} int\n * @returns {number}\n */\nexport const encodingLength = (int) => {\n return varint.encodingLength(int)\n}\n", "const empty = new Uint8Array(0)\n\n/**\n * @param {Uint8Array} d\n */\nconst toHex = d => d.reduce((hex, byte) => hex + byte.toString(16).padStart(2, '0'), '')\n\n/**\n * @param {string} hex\n */\nconst fromHex = hex => {\n const hexes = hex.match(/../g)\n return hexes ? new Uint8Array(hexes.map(b => parseInt(b, 16))) : empty\n}\n\n/**\n * @param {Uint8Array} aa\n * @param {Uint8Array} bb\n */\nconst equals = (aa, bb) => {\n if (aa === bb) return true\n if (aa.byteLength !== bb.byteLength) {\n return false\n }\n\n for (let ii = 0; ii < aa.byteLength; ii++) {\n if (aa[ii] !== bb[ii]) {\n return false\n }\n }\n\n return true\n}\n\n/**\n * @param {ArrayBufferView|ArrayBuffer|Uint8Array} o\n * @returns {Uint8Array}\n */\nconst coerce = o => {\n if (o instanceof Uint8Array && o.constructor.name === 'Uint8Array') return o\n if (o instanceof ArrayBuffer) return new Uint8Array(o)\n if (ArrayBuffer.isView(o)) {\n return new Uint8Array(o.buffer, o.byteOffset, o.byteLength)\n }\n throw new Error('Unknown type, must be binary type')\n}\n\n/**\n * @param {any} o\n * @returns {o is ArrayBuffer|ArrayBufferView}\n */\nconst isBinary = o =>\n o instanceof ArrayBuffer || ArrayBuffer.isView(o)\n\n/**\n * @param {string} str\n * @returns {Uint8Array}\n */\nconst fromString = str => (new TextEncoder()).encode(str)\n\n/**\n * @param {Uint8Array} b\n * @returns {string}\n */\nconst toString = b => (new TextDecoder()).decode(b)\n\nexport { equals, coerce, isBinary, fromHex, toHex, fromString, toString, empty }\n", "import { coerce, equals as equalBytes } from '../bytes.js'\nimport * as varint from '../varint.js'\n\n/**\n * Creates a multihash digest.\n *\n * @template {number} Code\n * @param {Code} code\n * @param {Uint8Array} digest\n */\nexport const create = (code, digest) => {\n const size = digest.byteLength\n const sizeOffset = varint.encodingLength(code)\n const digestOffset = sizeOffset + varint.encodingLength(size)\n\n const bytes = new Uint8Array(digestOffset + size)\n varint.encodeTo(code, bytes, 0)\n varint.encodeTo(size, bytes, sizeOffset)\n bytes.set(digest, digestOffset)\n\n return new Digest(code, size, digest, bytes)\n}\n\n/**\n * Turns bytes representation of multihash digest into an instance.\n *\n * @param {Uint8Array} multihash\n * @returns {MultihashDigest}\n */\nexport const decode = (multihash) => {\n const bytes = coerce(multihash)\n const [code, sizeOffset] = varint.decode(bytes)\n const [size, digestOffset] = varint.decode(bytes.subarray(sizeOffset))\n const digest = bytes.subarray(sizeOffset + digestOffset)\n\n if (digest.byteLength !== size) {\n throw new Error('Incorrect length')\n }\n\n return new Digest(code, size, digest, bytes)\n}\n\n/**\n * @param {MultihashDigest} a\n * @param {unknown} b\n * @returns {b is MultihashDigest}\n */\nexport const equals = (a, b) => {\n if (a === b) {\n return true\n } else {\n const data = /** @type {{code?:unknown, size?:unknown, bytes?:unknown}} */(b)\n\n return (\n a.code === data.code &&\n a.size === data.size &&\n data.bytes instanceof Uint8Array &&\n equalBytes(a.bytes, data.bytes)\n )\n }\n}\n\n/**\n * @typedef {import('./interface.js').MultihashDigest} MultihashDigest\n */\n\n/**\n * Represents a multihash digest which carries information about the\n * hashing algorithm and an actual hash digest.\n *\n * @template {number} Code\n * @template {number} Size\n * @class\n * @implements {MultihashDigest}\n */\nexport class Digest {\n /**\n * Creates a multihash digest.\n *\n * @param {Code} code\n * @param {Size} size\n * @param {Uint8Array} digest\n * @param {Uint8Array} bytes\n */\n constructor (code, size, digest, bytes) {\n this.code = code\n this.size = size\n this.digest = digest\n this.bytes = bytes\n }\n}\n", "// base-x encoding / decoding\n// Copyright (c) 2018 base-x contributors\n// Copyright (c) 2014-2018 The Bitcoin Core developers (base58.cpp)\n// Distributed under the MIT software license, see the accompanying\n// file LICENSE or http://www.opensource.org/licenses/mit-license.php.\nfunction base (ALPHABET, name) {\n if (ALPHABET.length >= 255) { throw new TypeError('Alphabet too long') }\n var BASE_MAP = new Uint8Array(256);\n for (var j = 0; j < BASE_MAP.length; j++) {\n BASE_MAP[j] = 255;\n }\n for (var i = 0; i < ALPHABET.length; i++) {\n var x = ALPHABET.charAt(i);\n var xc = x.charCodeAt(0);\n if (BASE_MAP[xc] !== 255) { throw new TypeError(x + ' is ambiguous') }\n BASE_MAP[xc] = i;\n }\n var BASE = ALPHABET.length;\n var LEADER = ALPHABET.charAt(0);\n var FACTOR = Math.log(BASE) / Math.log(256); // log(BASE) / log(256), rounded up\n var iFACTOR = Math.log(256) / Math.log(BASE); // log(256) / log(BASE), rounded up\n function encode (source) {\n if (source instanceof Uint8Array) ; else if (ArrayBuffer.isView(source)) {\n source = new Uint8Array(source.buffer, source.byteOffset, source.byteLength);\n } else if (Array.isArray(source)) {\n source = Uint8Array.from(source);\n }\n if (!(source instanceof Uint8Array)) { throw new TypeError('Expected Uint8Array') }\n if (source.length === 0) { return '' }\n // Skip & count leading zeroes.\n var zeroes = 0;\n var length = 0;\n var pbegin = 0;\n var pend = source.length;\n while (pbegin !== pend && source[pbegin] === 0) {\n pbegin++;\n zeroes++;\n }\n // Allocate enough space in big-endian base58 representation.\n var size = ((pend - pbegin) * iFACTOR + 1) >>> 0;\n var b58 = new Uint8Array(size);\n // Process the bytes.\n while (pbegin !== pend) {\n var carry = source[pbegin];\n // Apply \"b58 = b58 * 256 + ch\".\n var i = 0;\n for (var it1 = size - 1; (carry !== 0 || i < length) && (it1 !== -1); it1--, i++) {\n carry += (256 * b58[it1]) >>> 0;\n b58[it1] = (carry % BASE) >>> 0;\n carry = (carry / BASE) >>> 0;\n }\n if (carry !== 0) { throw new Error('Non-zero carry') }\n length = i;\n pbegin++;\n }\n // Skip leading zeroes in base58 result.\n var it2 = size - length;\n while (it2 !== size && b58[it2] === 0) {\n it2++;\n }\n // Translate the result into a string.\n var str = LEADER.repeat(zeroes);\n for (; it2 < size; ++it2) { str += ALPHABET.charAt(b58[it2]); }\n return str\n }\n function decodeUnsafe (source) {\n if (typeof source !== 'string') { throw new TypeError('Expected String') }\n if (source.length === 0) { return new Uint8Array() }\n var psz = 0;\n // Skip leading spaces.\n if (source[psz] === ' ') { return }\n // Skip and count leading '1's.\n var zeroes = 0;\n var length = 0;\n while (source[psz] === LEADER) {\n zeroes++;\n psz++;\n }\n // Allocate enough space in big-endian base256 representation.\n var size = (((source.length - psz) * FACTOR) + 1) >>> 0; // log(58) / log(256), rounded up.\n var b256 = new Uint8Array(size);\n // Process the characters.\n while (source[psz]) {\n // Decode character\n var carry = BASE_MAP[source.charCodeAt(psz)];\n // Invalid character\n if (carry === 255) { return }\n var i = 0;\n for (var it3 = size - 1; (carry !== 0 || i < length) && (it3 !== -1); it3--, i++) {\n carry += (BASE * b256[it3]) >>> 0;\n b256[it3] = (carry % 256) >>> 0;\n carry = (carry / 256) >>> 0;\n }\n if (carry !== 0) { throw new Error('Non-zero carry') }\n length = i;\n psz++;\n }\n // Skip trailing spaces.\n if (source[psz] === ' ') { return }\n // Skip leading zeroes in b256.\n var it4 = size - length;\n while (it4 !== size && b256[it4] === 0) {\n it4++;\n }\n var vch = new Uint8Array(zeroes + (size - it4));\n var j = zeroes;\n while (it4 !== size) {\n vch[j++] = b256[it4++];\n }\n return vch\n }\n function decode (string) {\n var buffer = decodeUnsafe(string);\n if (buffer) { return buffer }\n throw new Error(`Non-${name} character`)\n }\n return {\n encode: encode,\n decodeUnsafe: decodeUnsafe,\n decode: decode\n }\n}\nvar src = base;\n\nvar _brrp__multiformats_scope_baseX = src;\n\nexport default _brrp__multiformats_scope_baseX;\n", "import basex from '../../vendor/base-x.js'\nimport { coerce } from '../bytes.js'\n// Linter can't see that API is used in types.\n// eslint-disable-next-line\nimport * as API from './interface.js'\n\n/**\n * Class represents both BaseEncoder and MultibaseEncoder meaning it\n * can be used to encode to multibase or base encode without multibase\n * prefix.\n *\n * @class\n * @template {string} Base\n * @template {string} Prefix\n * @implements {API.MultibaseEncoder<Prefix>}\n * @implements {API.BaseEncoder}\n */\nclass Encoder {\n /**\n * @param {Base} name\n * @param {Prefix} prefix\n * @param {(bytes:Uint8Array) => string} baseEncode\n */\n constructor (name, prefix, baseEncode) {\n this.name = name\n this.prefix = prefix\n this.baseEncode = baseEncode\n }\n\n /**\n * @param {Uint8Array} bytes\n * @returns {API.Multibase<Prefix>}\n */\n encode (bytes) {\n if (bytes instanceof Uint8Array) {\n return `${this.prefix}${this.baseEncode(bytes)}`\n } else {\n throw Error('Unknown type, must be binary type')\n }\n }\n}\n\n/**\n * @template {string} Prefix\n */\n/**\n * Class represents both BaseDecoder and MultibaseDecoder so it could be used\n * to decode multibases (with matching prefix) or just base decode strings\n * with corresponding base encoding.\n *\n * @class\n * @template {string} Base\n * @template {string} Prefix\n * @implements {API.MultibaseDecoder<Prefix>}\n * @implements {API.UnibaseDecoder<Prefix>}\n * @implements {API.BaseDecoder}\n */\nclass Decoder {\n /**\n * @param {Base} name\n * @param {Prefix} prefix\n * @param {(text:string) => Uint8Array} baseDecode\n */\n constructor (name, prefix, baseDecode) {\n this.name = name\n this.prefix = prefix\n /* c8 ignore next 3 */\n if (prefix.codePointAt(0) === undefined) {\n throw new Error('Invalid prefix character')\n }\n /** @private */\n this.prefixCodePoint = /** @type {number} */ (prefix.codePointAt(0))\n this.baseDecode = baseDecode\n }\n\n /**\n * @param {string} text\n */\n decode (text) {\n if (typeof text === 'string') {\n if (text.codePointAt(0) !== this.prefixCodePoint) {\n throw Error(`Unable to decode multibase string ${JSON.stringify(text)}, ${this.name} decoder only supports inputs prefixed with ${this.prefix}`)\n }\n return this.baseDecode(text.slice(this.prefix.length))\n } else {\n throw Error('Can only multibase decode strings')\n }\n }\n\n /**\n * @template {string} OtherPrefix\n * @param {API.UnibaseDecoder<OtherPrefix>|ComposedDecoder<OtherPrefix>} decoder\n * @returns {ComposedDecoder<Prefix|OtherPrefix>}\n */\n or (decoder) {\n return or(this, decoder)\n }\n}\n\n/**\n * @template {string} Prefix\n * @typedef {Record<Prefix, API.UnibaseDecoder<Prefix>>} Decoders\n */\n\n/**\n * @template {string} Prefix\n * @implements {API.MultibaseDecoder<Prefix>}\n * @implements {API.CombobaseDecoder<Prefix>}\n */\nclass ComposedDecoder {\n /**\n * @param {Decoders<Prefix>} decoders\n */\n constructor (decoders) {\n this.decoders = decoders\n }\n\n /**\n * @template {string} OtherPrefix\n * @param {API.UnibaseDecoder<OtherPrefix>|ComposedDecoder<OtherPrefix>} decoder\n * @returns {ComposedDecoder<Prefix|OtherPrefix>}\n */\n or (decoder) {\n return or(this, decoder)\n }\n\n /**\n * @param {string} input\n * @returns {Uint8Array}\n */\n decode (input) {\n const prefix = /** @type {Prefix} */ (input[0])\n const decoder = this.decoders[prefix]\n if (decoder) {\n return decoder.decode(input)\n } else {\n throw RangeError(`Unable to decode multibase string ${JSON.stringify(input)}, only inputs prefixed with ${Object.keys(this.decoders)} are supported`)\n }\n }\n}\n\n/**\n * @template {string} L\n * @template {string} R\n * @param {API.UnibaseDecoder<L>|API.CombobaseDecoder<L>} left\n * @param {API.UnibaseDecoder<R>|API.CombobaseDecoder<R>} right\n * @returns {ComposedDecoder<L|R>}\n */\nexport const or = (left, right) => new ComposedDecoder(/** @type {Decoders<L|R>} */({\n ...(left.decoders || { [/** @type API.UnibaseDecoder<L> */(left).prefix]: left }),\n ...(right.decoders || { [/** @type API.UnibaseDecoder<R> */(right).prefix]: right })\n}))\n\n/**\n * @class\n * @template {string} Base\n * @template {string} Prefix\n * @implements {API.MultibaseCodec<Prefix>}\n * @implements {API.MultibaseEncoder<Prefix>}\n * @implements {API.MultibaseDecoder<Prefix>}\n * @implements {API.BaseCodec}\n * @implements {API.BaseEncoder}\n * @implements {API.BaseDecoder}\n */\nexport class Codec {\n /**\n * @param {Base} name\n * @param {Prefix} prefix\n * @param {(bytes:Uint8Array) => string} baseEncode\n * @param {(text:string) => Uint8Array} baseDecode\n */\n constructor (name, prefix, baseEncode, baseDecode) {\n this.name = name\n this.prefix = prefix\n this.baseEncode = baseEncode\n this.baseDecode = baseDecode\n this.encoder = new Encoder(name, prefix, baseEncode)\n this.decoder = new Decoder(name, prefix, baseDecode)\n }\n\n /**\n * @param {Uint8Array} input\n */\n encode (input) {\n return this.encoder.encode(input)\n }\n\n /**\n * @param {string} input\n */\n decode (input) {\n return this.decoder.decode(input)\n }\n}\n\n/**\n * @template {string} Base\n * @template {string} Prefix\n * @param {object} options\n * @param {Base} options.name\n * @param {Prefix} options.prefix\n * @param {(bytes:Uint8Array) => string} options.encode\n * @param {(input:string) => Uint8Array} options.decode\n * @returns {Codec<Base, Prefix>}\n */\nexport const from = ({ name, prefix, encode, decode }) =>\n new Codec(name, prefix, encode, decode)\n\n/**\n * @template {string} Base\n * @template {string} Prefix\n * @param {object} options\n * @param {Base} options.name\n * @param {Prefix} options.prefix\n * @param {string} options.alphabet\n * @returns {Codec<Base, Prefix>}\n */\nexport const baseX = ({ prefix, name, alphabet }) => {\n const { encode, decode } = basex(alphabet, name)\n return from({\n prefix,\n name,\n encode,\n /**\n * @param {string} text\n */\n decode: text => coerce(decode(text))\n })\n}\n\n/**\n * @param {string} string\n * @param {string} alphabet\n * @param {number} bitsPerChar\n * @param {string} name\n * @returns {Uint8Array}\n */\nconst decode = (string, alphabet, bitsPerChar, name) => {\n // Build the character lookup table:\n /** @type {Record<string, number>} */\n const codes = {}\n for (let i = 0; i < alphabet.length; ++i) {\n codes[alphabet[i]] = i\n }\n\n // Count the padding bytes:\n let end = string.length\n while (string[end - 1] === '=') {\n --end\n }\n\n // Allocate the output:\n const out = new Uint8Array((end * bitsPerChar / 8) | 0)\n\n // Parse the data:\n let bits = 0 // Number of bits currently in the buffer\n let buffer = 0 // Bits waiting to be written out, MSB first\n let written = 0 // Next byte to write\n for (let i = 0; i < end; ++i) {\n // Read one character from the string:\n const value = codes[string[i]]\n if (value === undefined) {\n throw new SyntaxError(`Non-${name} character`)\n }\n\n // Append the bits to the buffer:\n buffer = (buffer << bitsPerChar) | value\n bits += bitsPerChar\n\n // Write out some bits if the buffer has a byte's worth:\n if (bits >= 8) {\n bits -= 8\n out[written++] = 0xff & (buffer >> bits)\n }\n }\n\n // Verify that we have received just enough bits:\n if (bits >= bitsPerChar || 0xff & (buffer << (8 - bits))) {\n throw new SyntaxError('Unexpected end of data')\n }\n\n return out\n}\n\n/**\n * @param {Uint8Array} data\n * @param {string} alphabet\n * @param {number} bitsPerChar\n * @returns {string}\n */\nconst encode = (data, alphabet, bitsPerChar) => {\n const pad = alphabet[alphabet.length - 1] === '='\n const mask = (1 << bitsPerChar) - 1\n let out = ''\n\n let bits = 0 // Number of bits currently in the buffer\n let buffer = 0 // Bits waiting to be written out, MSB first\n for (let i = 0; i < data.length; ++i) {\n // Slurp data into the buffer:\n buffer = (buffer << 8) | data[i]\n bits += 8\n\n // Write out as much as we can:\n while (bits > bitsPerChar) {\n bits -= bitsPerChar\n out += alphabet[mask & (buffer >> bits)]\n }\n }\n\n // Partial character:\n if (bits) {\n out += alphabet[mask & (buffer << (bitsPerChar - bits))]\n }\n\n // Add padding characters until we hit a byte boundary:\n if (pad) {\n while ((out.length * bitsPerChar) & 7) {\n out += '='\n }\n }\n\n return out\n}\n\n/**\n * RFC4648 Factory\n *\n * @template {string} Base\n * @template {string} Prefix\n * @param {object} options\n * @param {Base} options.name\n * @param {Prefix} options.prefix\n * @param {string} options.alphabet\n * @param {number} options.bitsPerChar\n */\nexport const rfc4648 = ({ name, prefix, bitsPerChar, alphabet }) => {\n return from({\n prefix,\n name,\n encode (input) {\n return encode(input, alphabet, bitsPerChar)\n },\n decode (input) {\n return decode(input, alphabet, bitsPerChar, name)\n }\n })\n}\n", "import { baseX } from './base.js'\n\nexport const base58btc = baseX({\n name: 'base58btc',\n prefix: 'z',\n alphabet: '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'\n})\n\nexport const base58flickr = baseX({\n name: 'base58flickr',\n prefix: 'Z',\n alphabet: '123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ'\n})\n", "import { rfc4648 } from './base.js'\n\nexport const base32 = rfc4648({\n prefix: 'b',\n name: 'base32',\n alphabet: 'abcdefghijklmnopqrstuvwxyz234567',\n bitsPerChar: 5\n})\n\nexport const base32upper = rfc4648({\n prefix: 'B',\n name: 'base32upper',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567',\n bitsPerChar: 5\n})\n\nexport const base32pad = rfc4648({\n prefix: 'c',\n name: 'base32pad',\n alphabet: 'abcdefghijklmnopqrstuvwxyz234567=',\n bitsPerChar: 5\n})\n\nexport const base32padupper = rfc4648({\n prefix: 'C',\n name: 'base32padupper',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=',\n bitsPerChar: 5\n})\n\nexport const base32hex = rfc4648({\n prefix: 'v',\n name: 'base32hex',\n alphabet: '0123456789abcdefghijklmnopqrstuv',\n bitsPerChar: 5\n})\n\nexport const base32hexupper = rfc4648({\n prefix: 'V',\n name: 'base32hexupper',\n alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUV',\n bitsPerChar: 5\n})\n\nexport const base32hexpad = rfc4648({\n prefix: 't',\n name: 'base32hexpad',\n alphabet: '0123456789abcdefghijklmnopqrstuv=',\n bitsPerChar: 5\n})\n\nexport const base32hexpadupper = rfc4648({\n prefix: 'T',\n name: 'base32hexpadupper',\n alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUV=',\n bitsPerChar: 5\n})\n\nexport const base32z = rfc4648({\n prefix: 'h',\n name: 'base32z',\n alphabet: 'ybndrfg8ejkmcpqxot1uwisza345h769',\n bitsPerChar: 5\n})\n", "import * as varint from './varint.js'\nimport * as Digest from './hashes/digest.js'\nimport { base58btc } from './bases/base58.js'\nimport { base32 } from './bases/base32.js'\nimport { coerce } from './bytes.js'\n// Linter can see that API is used in types.\n// eslint-disable-next-line\nimport * as API from \"./link/interface.js\"\n\n// This way TS will also expose all the types from module\nexport * from './link/interface.js'\n\n/**\n * @template {API.Link<unknown, number, number, API.Version>} T\n * @template {string} Prefix\n * @param {T} link\n * @param {API.MultibaseEncoder<Prefix>} [base]\n * @returns {API.ToString<T, Prefix>}\n */\nexport const format = (link, base) => {\n const { bytes, version } = link\n switch (version) {\n case 0:\n return toStringV0(\n bytes,\n baseCache(link),\n /** @type {API.MultibaseEncoder<\"z\">} */ (base) || base58btc.encoder\n )\n default:\n return toStringV1(\n bytes,\n baseCache(link),\n /** @type {API.MultibaseEncoder<Prefix>} */ (base || base32.encoder)\n )\n }\n}\n\n/**\n * @template {API.UnknownLink} Link\n * @param {Link} link\n * @returns {API.LinkJSON<Link>}\n */\nexport const toJSON = (link) => ({\n '/': format(link)\n})\n\n/**\n * @template {API.UnknownLink} Link\n * @param {API.LinkJSON<Link>} json\n */\nexport const fromJSON = (json) =>\n CID.parse(json['/'])\n\n/** @type {WeakMap<API.UnknownLink, Map<string, string>>} */\nconst cache = new WeakMap()\n\n/**\n * @param {API.UnknownLink} cid\n * @returns {Map<string, string>}\n */\nconst baseCache = cid => {\n const baseCache = cache.get(cid)\n if (baseCache == null) {\n const baseCache = new Map()\n cache.set(cid, baseCache)\n return baseCache\n }\n return baseCache\n}\n\n/**\n * @template {unknown} [Data=unknown]\n * @template {number} [Format=number]\n * @template {number} [Alg=number]\n * @template {API.Version} [Version=API.Version]\n * @implements {API.Link<Data, Format, Alg, Version>}\n */\n\nexport class CID {\n /**\n * @param {Version} version - Version of the CID\n * @param {Format} code - Code of the codec content is encoded in, see https://github.com/multiformats/multicodec/blob/master/table.csv\n * @param {API.MultihashDigest<Alg>} multihash - (Multi)hash of the of the content.\n * @param {Uint8Array} bytes\n *\n */\n constructor (version, code, multihash, bytes) {\n /** @readonly */\n this.code = code\n /** @readonly */\n this.version = version\n /** @readonly */\n this.multihash = multihash\n /** @readonly */\n this.bytes = bytes\n\n // flag to serializers that this is a CID and\n // should be treated specially\n /** @readonly */\n this['/'] = bytes\n }\n\n /**\n * Signalling `cid.asCID === cid` has been replaced with `cid['/'] === cid.bytes`\n * please either use `CID.asCID(cid)` or switch to new signalling mechanism\n *\n * @deprecated\n */\n get asCID () {\n return this\n }\n\n // ArrayBufferView\n get byteOffset () {\n return this.bytes.byteOffset\n }\n\n // ArrayBufferView\n get byteLength () {\n return this.bytes.byteLength\n }\n\n /**\n * @returns {CID<Data, API.DAG_PB, API.SHA_256, 0>}\n */\n toV0 () {\n switch (this.version) {\n case 0: {\n return /** @type {CID<Data, API.DAG_PB, API.SHA_256, 0>} */ (this)\n }\n case 1: {\n const { code, multihash } = this\n\n if (code !== DAG_PB_CODE) {\n throw new Error('Cannot convert a non dag-pb CID to CIDv0')\n }\n\n // sha2-256\n if (multihash.code !== SHA_256_CODE) {\n throw new Error('Cannot convert non sha2-256 multihash CID to CIDv0')\n }\n\n return /** @type {CID<Data, API.DAG_PB, API.SHA_256, 0>} */ (\n CID.createV0(\n /** @type {API.MultihashDigest<API.SHA_256>} */ (multihash)\n )\n )\n }\n default: {\n throw Error(\n `Can not convert CID version ${this.version} to version 0. This is a bug please report`\n )\n }\n }\n }\n\n /**\n * @returns {CID<Data, Format, Alg, 1>}\n */\n toV1 () {\n switch (this.version) {\n case 0: {\n const { code, digest } = this.multihash\n const multihash = Digest.create(code, digest)\n return /** @type {CID<Data, Format, Alg, 1>} */ (\n CID.createV1(this.code, multihash)\n )\n }\n case 1: {\n return /** @type {CID<Data, Format, Alg, 1>} */ (this)\n }\n default: {\n throw Error(\n `Can not convert CID version ${this.version} to version 1. This is a bug please report`\n )\n }\n }\n }\n\n /**\n * @param {unknown} other\n * @returns {other is CID<Data, Format, Alg, Version>}\n */\n equals (other) {\n return CID.equals(this, other)\n }\n\n /**\n * @template {unknown} Data\n * @template {number} Format\n * @template {number} Alg\n * @template {API.Version} Version\n * @param {API.Link<Data, Format, Alg, Version>} self\n * @param {unknown} other\n * @returns {other is CID}\n */\n static equals (self, other) {\n const unknown =\n /** @type {{code?:unknown, version?:unknown, multihash?:unknown}} */ (\n other\n )\n return (\n unknown &&\n self.code === unknown.code &&\n self.version === unknown.version &&\n Digest.equals(self.multihash, unknown.multihash)\n )\n }\n\n /**\n * @param {API.MultibaseEncoder<string>} [base]\n * @returns {string}\n */\n toString (base) {\n return format(this, base)\n }\n\n toJSON () {\n return { '/': format(this) }\n }\n\n link () {\n return this\n }\n\n get [Symbol.toStringTag] () {\n return 'CID'\n }\n\n // Legacy\n\n [Symbol.for('nodejs.util.inspect.custom')] () {\n return `CID(${this.toString()})`\n }\n\n /**\n * Takes any input `value` and returns a `CID` instance if it was\n * a `CID` otherwise returns `null`. If `value` is instanceof `CID`\n * it will return value back. If `value` is not instance of this CID\n * class, but is compatible CID it will return new instance of this\n * `CID` class. Otherwise returns null.\n *\n * This allows two different incompatible versions of CID library to\n * co-exist and interop as long as binary interface is compatible.\n *\n * @template {unknown} Data\n * @template {number} Format\n * @template {number} Alg\n * @template {API.Version} Version\n * @template {unknown} U\n * @param {API.Link<Data, Format, Alg, Version>|U} input\n * @returns {CID<Data, Format, Alg, Version>|null}\n */\n static asCID (input) {\n if (input == null) {\n return null\n }\n\n const value = /** @type {any} */ (input)\n if (value instanceof CID) {\n // If value is instance of CID then we're all set.\n return value\n } else if ((value['/'] != null && value['/'] === value.bytes) || value.asCID === value) {\n // If value isn't instance of this CID class but `this.asCID === this` or\n // `value['/'] === value.bytes` is true it is CID instance coming from a\n // different implementation (diff version or duplicate). In that case we\n // rebase it to this `CID` implementation so caller is guaranteed to get\n // instance with expected API.\n const { version, code, multihash, bytes } = value\n return new CID(\n version,\n code,\n /** @type {API.MultihashDigest<Alg>} */ (multihash),\n bytes || encodeCID(version, code, multihash.bytes)\n )\n } else if (value[cidSymbol] === true) {\n // If value is a CID from older implementation that used to be tagged via\n // symbol we still rebase it to the this `CID` implementation by\n // delegating that to a constructor.\n const { version, multihash, code } = value\n const digest =\n /** @type {API.MultihashDigest<Alg>} */\n (Digest.decode(multihash))\n return CID.create(version, code, digest)\n } else {\n // Otherwise value is not a CID (or an incompatible version of it) in\n // which case we return `null`.\n return null\n }\n }\n\n /**\n *\n * @template {unknown} Data\n * @template {number} Format\n * @template {number} Alg\n * @template {API.Version} Version\n * @param {Version} version - Version of the CID\n * @param {Format} code - Code of the codec content is encoded in, see https://github.com/multiformats/multicodec/blob/master/table.csv\n * @param {API.MultihashDigest<Alg>} digest - (Multi)hash of the of the content.\n * @returns {CID<Data, Format, Alg, Version>}\n */\n static create (version, code, digest) {\n if (typeof code !== 'number') {\n throw new Error('String codecs are no longer supported')\n }\n\n if (!(digest.bytes instanceof Uint8Array)) {\n throw new Error('Invalid digest')\n }\n\n switch (version) {\n case 0: {\n if (code !== DAG_PB_CODE) {\n throw new Error(\n `Version 0 CID must use dag-pb (code: ${DAG_PB_CODE}) block encoding`\n )\n } else {\n return new CID(version, code, digest, digest.bytes)\n }\n }\n case 1: {\n const bytes = encodeCID(version, code, digest.bytes)\n return new CID(version, code, digest, bytes)\n }\n default: {\n throw new Error('Invalid version')\n }\n }\n }\n\n /**\n * Simplified version of `create` for CIDv0.\n *\n * @template {unknown} [T=unknown]\n * @param {API.MultihashDigest<typeof SHA_256_CODE>} digest - Multihash.\n * @returns {CID<T, typeof DAG_PB_CODE, typeof SHA_256_CODE, 0>}\n */\n static createV0 (digest) {\n return CID.create(0, DAG_PB_CODE, digest)\n }\n\n /**\n * Simplified version of `create` for CIDv1.\n *\n * @template {unknown} Data\n * @template {number} Code\n * @template {number} Alg\n * @param {Code} code - Content encoding format code.\n * @param {API.MultihashDigest<Alg>} digest - Miltihash of the content.\n * @returns {CID<Data, Code, Alg, 1>}\n */\n static createV1 (code, digest) {\n return CID.create(1, code, digest)\n }\n\n /**\n * Decoded a CID from its binary representation. The byte array must contain\n * only the CID with no additional bytes.\n *\n * An error will be thrown if the bytes provided do not contain a valid\n * binary representation of a CID.\n *\n * @template {unknown} Data\n * @template {number} Code\n * @template {number} Alg\n * @template {API.Version} Ver\n * @param {API.ByteView<API.Link<Data, Code, Alg, Ver>>} bytes\n * @returns {CID<Data, Code, Alg, Ver>}\n */\n static decode (bytes) {\n const [cid, remainder] = CID.decodeFirst(bytes)\n if (remainder.length) {\n throw new Error('Incorrect length')\n }\n return cid\n }\n\n /**\n * Decoded a CID from its binary representation at the beginning of a byte\n * array.\n *\n * Returns an array with the first element containing the CID and the second\n * element containing the remainder of the original byte array. The remainder\n * will be a zero-length byte array if the provided bytes only contained a\n * binary CID representation.\n *\n * @template {unknown} T\n * @template {number} C\n * @template {number} A\n * @template {API.Version} V\n * @param {API.ByteView<API.Link<T, C, A, V>>} bytes\n * @returns {[CID<T, C, A, V>, Uint8Array]}\n */\n static decodeFirst (bytes) {\n const specs = CID.inspectBytes(bytes)\n const prefixSize = specs.size - specs.multihashSize\n const multihashBytes = coerce(\n bytes.subarray(prefixSize, prefixSize + specs.multihashSize)\n )\n if (multihashBytes.byteLength !== specs.multihashSize) {\n throw new Error('Incorrect length')\n }\n const digestBytes = multihashBytes.subarray(\n specs.multihashSize - specs.digestSize\n )\n const digest = new Digest.Digest(\n specs.multihashCode,\n specs.digestSize,\n digestBytes,\n multihashBytes\n )\n const cid =\n specs.version === 0\n ? CID.createV0(/** @type {API.MultihashDigest<API.SHA_256>} */ (digest))\n : CID.createV1(specs.codec, digest)\n return [/** @type {CID<T, C, A, V>} */(cid), bytes.subarray(specs.size)]\n }\n\n /**\n * Inspect the initial bytes of a CID to determine its properties.\n *\n * Involves decoding up to 4 varints. Typically this will require only 4 to 6\n * bytes but for larger multicodec code values and larger multihash digest\n * lengths these varints can be quite large. It is recommended that at least\n * 10 bytes be made available in the `initialBytes` argument for a complete\n * inspection.\n *\n * @template {unknown} T\n * @template {number} C\n * @template {number} A\n * @template {API.Version} V\n * @param {API.ByteView<API.Link<T, C, A, V>>} initialBytes\n * @returns {{ version:V, codec:C, multihashCode:A, digestSize:number, multihashSize:number, size:number }}\n */\n static inspectBytes (initialBytes) {\n let offset = 0\n const next = () => {\n const [i, length] = varint.decode(initialBytes.subarray(offset))\n offset += length\n return i\n }\n\n let version = /** @type {V} */ (next())\n let codec = /** @type {C} */ (DAG_PB_CODE)\n if (/** @type {number} */(version) === 18) {\n // CIDv0\n version = /** @type {V} */ (0)\n offset = 0\n } else {\n codec = /** @type {C} */ (next())\n }\n\n if (version !== 0 && version !== 1) {\n throw new RangeError(`Invalid CID version ${version}`)\n }\n\n const prefixSize = offset\n const multihashCode = /** @type {A} */ (next()) // multihash code\n const digestSize = next() // multihash length\n const size = offset + digestSize\n const multihashSize = size - prefixSize\n\n return { version, codec, multihashCode, digestSize, multihashSize, size }\n }\n\n /**\n * Takes cid in a string representation and creates an instance. If `base`\n * decoder is not provided will use a default from the configuration. It will\n * throw an error if encoding of the CID is not compatible with supplied (or\n * a default decoder).\n *\n * @template {string} Prefix\n * @template {unknown} Data\n * @template {number} Code\n * @template {number} Alg\n * @template {API.Version} Ver\n * @param {API.ToString<API.Link<Data, Code, Alg, Ver>, Prefix>} source\n * @param {API.MultibaseDecoder<Prefix>} [base]\n * @returns {CID<Data, Code, Alg, Ver>}\n */\n static parse (source, base) {\n const [prefix, bytes] = parseCIDtoBytes(source, base)\n\n const cid = CID.decode(bytes)\n\n if (cid.version === 0 && source[0] !== 'Q') {\n throw Error('Version 0 CID string must not include multibase prefix')\n }\n\n // Cache string representation to avoid computing it on `this.toString()`\n baseCache(cid).set(prefix, source)\n\n return cid\n }\n}\n\n/**\n * @template {string} Prefix\n * @template {unknown} Data\n * @template {number} Code\n * @template {number} Alg\n * @template {API.Version} Ver\n * @param {API.ToString<API.Link<Data, Code, Alg, Ver>, Prefix>} source\n * @param {API.MultibaseDecoder<Prefix>} [base]\n * @returns {[Prefix, API.ByteView<API.Link<Data, Code, Alg, Ver>>]}\n */\nconst parseCIDtoBytes = (source, base) => {\n switch (source[0]) {\n // CIDv0 is parsed differently\n case 'Q': {\n const decoder = base || base58btc\n return [\n /** @type {Prefix} */ (base58btc.prefix),\n decoder.decode(`${base58btc.prefix}${source}`)\n ]\n }\n case base58btc.prefix: {\n const decoder = base || base58btc\n return [/** @type {Prefix} */(base58btc.prefix), decoder.decode(source)]\n }\n case base32.prefix: {\n const decoder = base || base32\n return [/** @type {Prefix} */(base32.prefix), decoder.decode(source)]\n }\n default: {\n if (base == null) {\n throw Error(\n 'To parse non base32 or base58btc encoded CID multibase decoder must be provided'\n )\n }\n return [/** @type {Prefix} */(source[0]), base.decode(source)]\n }\n }\n}\n\n/**\n *\n * @param {Uint8Array} bytes\n * @param {Map<string, string>} cache\n * @param {API.MultibaseEncoder<'z'>} base\n */\nconst toStringV0 = (bytes, cache, base) => {\n const { prefix } = base\n if (prefix !== base58btc.prefix) {\n throw Error(`Cannot string encode V0 in ${base.name} encoding`)\n }\n\n const cid = cache.get(prefix)\n if (cid == null) {\n const cid = base.encode(bytes).slice(1)\n cache.set(prefix, cid)\n return cid\n } else {\n return cid\n }\n}\n\n/**\n * @template {string} Prefix\n * @param {Uint8Array} bytes\n * @param {Map<string, string>} cache\n * @param {API.MultibaseEncoder<Prefix>} base\n */\nconst toStringV1 = (bytes, cache, base) => {\n const { prefix } = base\n const cid = cache.get(prefix)\n if (cid == null) {\n const cid = base.encode(bytes)\n cache.set(prefix, cid)\n return cid\n } else {\n return cid\n }\n}\n\nconst DAG_PB_CODE = 0x70\nconst SHA_256_CODE = 0x12\n\n/**\n * @param {API.Version} version\n * @param {number} code\n * @param {Uint8Array} multihash\n * @returns {Uint8Array}\n */\nconst encodeCID = (version, code, multihash) => {\n const codeOffset = varint.encodingLength(version)\n const hashOffset = codeOffset + varint.encodingLength(code)\n const bytes = new Uint8Array(hashOffset + multihash.byteLength)\n varint.encodeTo(version, bytes, 0)\n varint.encodeTo(code, bytes, codeOffset)\n bytes.set(multihash, hashOffset)\n return bytes\n}\n\nconst cidSymbol = Symbol.for('@ipld/js-cid/CID')\n", "import * as Digest from './digest.js'\n\n/**\n * @template {string} Name\n * @template {number} Code\n * @param {object} options\n * @param {Name} options.name\n * @param {Code} options.code\n * @param {(input: Uint8Array) => Await<Uint8Array>} options.encode\n */\nexport const from = ({ name, code, encode }) => new Hasher(name, code, encode)\n\n/**\n * Hasher represents a hashing algorithm implementation that produces as\n * `MultihashDigest`.\n *\n * @template {string} Name\n * @template {number} Code\n * @class\n * @implements {MultihashHasher<Code>}\n */\nexport class Hasher {\n /**\n *\n * @param {Name} name\n * @param {Code} code\n * @param {(input: Uint8Array) => Await<Uint8Array>} encode\n */\n constructor (name, code, encode) {\n this.name = name\n this.code = code\n this.encode = encode\n }\n\n /**\n * @param {Uint8Array} input\n * @returns {Await<Digest.Digest<Code, number>>}\n */\n digest (input) {\n if (input instanceof Uint8Array) {\n const result = this.encode(input)\n return result instanceof Uint8Array\n ? Digest.create(this.code, result)\n /* c8 ignore next 1 */\n : result.then(digest => Digest.create(this.code, digest))\n } else {\n throw Error('Unknown type, must be binary type')\n /* c8 ignore next 1 */\n }\n }\n}\n\n/**\n * @template {number} Alg\n * @typedef {import('./interface.js').MultihashHasher} MultihashHasher\n */\n\n/**\n * @template T\n * @typedef {Promise<T>|T} Await\n */\n", "import { bytes as binary, CID } from './index.js'\n// Linter can see that API is used in types.\n// eslint-disable-next-line\nimport * as API from './interface.js'\n\nfunction readonly ({ enumerable = true, configurable = false } = {}) {\n return { enumerable, configurable, writable: false }\n}\n\n/**\n * @param {[string|number, string]} path\n * @param {any} value\n * @returns {Iterable<[string, CID]>}\n */\nfunction * linksWithin (path, value) {\n if (value != null && typeof value === 'object') {\n if (Array.isArray(value)) {\n for (const [index, element] of value.entries()) {\n const elementPath = [...path, index]\n const cid = CID.asCID(element)\n if (cid) {\n yield [elementPath.join('/'), cid]\n } else if (typeof element === 'object') {\n yield * links(element, elementPath)\n }\n }\n } else {\n const cid = CID.asCID(value)\n if (cid) {\n yield [path.join('/'), cid]\n } else {\n yield * links(value, path)\n }\n }\n }\n}\n\n/**\n * @template T\n * @param {T} source\n * @param {Array<string|number>} base\n * @returns {Iterable<[string, CID]>}\n */\nfunction * links (source, base) {\n if (source == null || source instanceof Uint8Array) {\n return\n }\n const cid = CID.asCID(source)\n if (cid) {\n yield [base.join('/'), cid]\n }\n for (const [key, value] of Object.entries(source)) {\n const path = /** @type {[string|number, string]} */ ([...base, key])\n yield * linksWithin(path, value)\n }\n}\n\n/**\n * @param {[string|number, string]} path\n * @param {any} value\n * @returns {Iterable<string>}\n */\nfunction * treeWithin (path, value) {\n if (Array.isArray(value)) {\n for (const [index, element] of value.entries()) {\n const elementPath = [...path, index]\n yield elementPath.join('/')\n if (typeof element === 'object' && !CID.asCID(element)) {\n yield * tree(element, elementPath)\n }\n }\n } else {\n yield * tree(value, path)\n }\n}\n\n/**\n * @template T\n * @param {T} source\n * @param {Array<string|number>} base\n * @returns {Iterable<string>}\n */\nfunction * tree (source, base) {\n if (source == null || typeof source !== 'object') {\n return\n }\n for (const [key, value] of Object.entries(source)) {\n const path = /** @type {[string|number, string]} */ ([...base, key])\n yield path.join('/')\n if (value != null && !(value instanceof Uint8Array) && typeof value === 'object' && !CID.asCID(value)) {\n yield * treeWithin(path, value)\n }\n }\n}\n\n/**\n *\n * @template T\n * @param {T} source\n * @param {string[]} path\n * @returns {API.BlockCursorView<unknown>}\n */\nfunction get (source, path) {\n let node = /** @type {Record<string, any>} */(source)\n for (const [index, key] of path.entries()) {\n node = node[key]\n if (node == null) {\n throw new Error(`Object has no property at ${path.slice(0, index + 1).map(part => `[${JSON.stringify(part)}]`).join('')}`)\n }\n const cid = CID.asCID(node)\n if (cid) {\n return { value: cid, remaining: path.slice(index + 1).join('/') }\n }\n }\n return { value: node }\n}\n\n/**\n * @template {unknown} T - Logical type of the data encoded in the block\n * @template {number} C - multicodec code corresponding to codec used to encode the block\n * @template {number} A - multicodec code corresponding to the hashing algorithm used in CID creation.\n * @template {API.Version} V - CID version\n * @implements {API.BlockView<T, C, A, V>}\n */\nclass Block {\n /**\n * @param {object} options\n * @param {CID<T, C, A, V>} options.cid\n * @param {API.ByteView<T>} options.bytes\n * @param {T} options.value\n */\n constructor ({ cid, bytes, value }) {\n if (!cid || !bytes || typeof value === 'undefined') { throw new Error('Missing required argument') }\n\n this.cid = cid\n this.bytes = bytes\n this.value = value\n this.asBlock = this\n\n // Mark all the properties immutable\n Object.defineProperties(this, {\n cid: readonly(),\n bytes: readonly(),\n value: readonly(),\n asBlock: readonly()\n })\n }\n\n links () {\n return links(this.value, [])\n }\n\n tree () {\n return tree(this.value, [])\n }\n\n /**\n *\n * @param {string} [path]\n * @returns {API.BlockCursorView<unknown>}\n */\n get (path = '/') {\n return get(this.value, path.split('/').filter(Boolean))\n }\n}\n\n/**\n * @template {unknown} T - Logical type of the data encoded in the block\n * @template {number} Code - multicodec code corresponding to codec used to encode the block\n * @template {number} Alg - multicodec code corresponding to the hashing algorithm used in CID creation.\n * @param {object} options\n * @param {T} options.value\n * @param {API.BlockEncoder<Code, T>} options.codec\n * @param {API.MultihashHasher<Alg>} options.hasher\n * @returns {Promise<API.BlockView<T, Code, Alg>>}\n */\nasync function encode ({ value, codec, hasher }) {\n if (typeof value === 'undefined') throw new Error('Missing required argument \"value\"')\n if (!codec || !hasher) throw new Error('Missing required argument: codec or hasher')\n\n const bytes = codec.encode(value)\n const hash = await hasher.digest(bytes)\n /** @type {CID<T, Code, Alg, 1>} */\n const cid = CID.create(\n 1,\n codec.code,\n hash\n )\n\n return new Block({ value, bytes, cid })\n}\n\n/**\n * @template {unknown} T - Logical type of the data encoded in the block\n * @template {number} Code - multicodec code corresponding to codec used to encode the block\n * @template {number} Alg - multicodec code corresponding to the hashing algorithm used in CID creation.\n * @param {object} options\n * @param {API.ByteView<T>} options.bytes\n * @param {API.BlockDecoder<Code, T>} options.codec\n * @param {API.MultihashHasher<Alg>} options.hasher\n * @returns {Promise<API.BlockView<T, Code, Alg>>}\n */\nasync function decode ({ bytes, codec, hasher }) {\n if (!bytes) throw new Error('Missing required argument \"bytes\"')\n if (!codec || !hasher) throw new Error('Missing required argument: codec or hasher')\n\n const value = codec.decode(bytes)\n const hash = await hasher.digest(bytes)\n /** @type {CID<T, Code, Alg, 1>} */\n const cid = CID.create(1, codec.code, hash)\n\n return new Block({ value, bytes, cid })\n}\n\n/**\n * @typedef {object} RequiredCreateOptions\n * @property {CID} options.cid\n */\n\n/**\n * @template {unknown} T - Logical type of the data encoded in the block\n * @template {number} Code - multicodec code corresponding to codec used to encode the block\n * @template {number} Alg - multicodec code corresponding to the hashing algorithm used in CID creation.\n * @template {API.Version} V - CID version\n * @param {{ cid: API.Link<T, Code, Alg, V>, value:T, codec?: API.BlockDecoder<Code, T>, bytes: API.ByteView<T> }|{cid:API.Link<T, Code, Alg, V>, bytes:API.ByteView<T>, value?:void, codec:API.BlockDecoder<Code, T>}} options\n * @returns {API.BlockView<T, Code, Alg, V>}\n */\nfunction createUnsafe ({ bytes, cid, value: maybeValue, codec }) {\n const value = maybeValue !== undefined\n ? maybeValue\n : (codec && codec.decode(bytes))\n\n if (value === undefined) throw new Error('Missing required argument, must either provide \"value\" or \"codec\"')\n\n return new Block({\n // eslint-disable-next-line object-shorthand\n cid: /** @type {CID<T, Code, Alg, V>} */ (cid),\n bytes,\n value\n })\n}\n\n/**\n * @template {unknown} T - Logical type of the data encoded in the block\n * @template {number} Code - multicodec code corresponding to codec used to encode the block\n * @template {number} Alg - multicodec code corresponding to the hashing algorithm used in CID creation.\n * @template {API.Version} V - CID version\n * @param {object} options\n * @param {API.Link<T, Code, Alg, V>} options.cid\n * @param {API.ByteView<T>} options.bytes\n * @param {API.BlockDecoder<Code, T>} options.codec\n * @param {API.MultihashHasher<Alg>} options.hasher\n * @returns {Promise<API.BlockView<T, Code, Alg, V>>}\n */\nasync function create ({ bytes, cid, hasher, codec }) {\n if (!bytes) throw new Error('Missing required argument \"bytes\"')\n if (!hasher) throw new Error('Missing required argument \"hasher\"')\n const value = codec.decode(bytes)\n const hash = await hasher.digest(bytes)\n if (!binary.equals(cid.multihash.bytes, hash.bytes)) {\n throw new Error('CID hash does not match bytes')\n }\n\n return createUnsafe({\n bytes,\n cid,\n value,\n codec\n })\n}\n\nexport { encode, decode, create, createUnsafe, Block }\n", "/* global crypto */\n\nimport { from } from './hasher.js'\n\n/**\n * @param {AlgorithmIdentifier} name\n */\nconst sha = name =>\n /**\n * @param {Uint8Array} data\n */\n async data => new Uint8Array(await crypto.subtle.digest(name, data))\n\nexport const sha256 = from({\n name: 'sha2-256',\n code: 0x12,\n encode: sha('SHA-256')\n})\n\nexport const sha512 = from({\n name: 'sha2-512',\n code: 0x13,\n encode: sha('SHA-512')\n})\n", "import * as cborg from 'cborg'\nimport { CID } from 'multiformats/cid'\n\n// https://github.com/ipfs/go-ipfs/issues/3570#issuecomment-273931692\nconst CID_CBOR_TAG = 42\n\n/**\n * @template T\n * @typedef {import('multiformats/codecs/interface').ByteView<T>} ByteView\n */\n\n/**\n * cidEncoder will receive all Objects during encode, it needs to filter out\n * anything that's not a CID and return `null` for that so it's encoded as\n * normal.\n *\n * @param {any} obj\n * @returns {cborg.Token[]|null}\n */\nfunction cidEncoder (obj) {\n if (obj.asCID !== obj && obj['/'] !== obj.bytes) {\n return null // any other kind of object\n }\n const cid = CID.asCID(obj)\n /* c8 ignore next 4 */\n // very unlikely case, and it'll probably throw a recursion error in cborg\n if (!cid) {\n return null\n }\n const bytes = new Uint8Array(cid.bytes.byteLength + 1)\n bytes.set(cid.bytes, 1) // prefix is 0x00, for historical reasons\n return [\n new cborg.Token(cborg.Type.tag, CID_CBOR_TAG),\n new cborg.Token(cborg.Type.bytes, bytes)\n ]\n}\n\n// eslint-disable-next-line jsdoc/require-returns-check\n/**\n * Intercept all `undefined` values from an object walk and reject the entire\n * object if we find one.\n *\n * @returns {null}\n */\nfunction undefinedEncoder () {\n throw new Error('`undefined` is not supported by the IPLD Data Model and cannot be encoded')\n}\n\n/**\n * Intercept all `number` values from an object walk and reject the entire\n * object if we find something that doesn't fit the IPLD data model (NaN &\n * Infinity).\n *\n * @param {number} num\n * @returns {null}\n */\nfunction numberEncoder (num) {\n if (Number.isNaN(num)) {\n throw new Error('`NaN` is not supported by the IPLD Data Model and cannot be encoded')\n }\n if (num === Infinity || num === -Infinity) {\n throw new Error('`Infinity` and `-Infinity` is not supported by the IPLD Data Model and cannot be encoded')\n }\n return null\n}\n\nconst encodeOptions = {\n float64: true,\n typeEncoders: {\n Object: cidEncoder,\n undefined: undefinedEncoder,\n number: numberEncoder\n }\n}\n\n/**\n * @param {Uint8Array} bytes\n * @returns {CID}\n */\nfunction cidDecoder (bytes) {\n if (bytes[0] !== 0) {\n throw new Error('Invalid CID for CBOR tag 42; expected leading 0x00')\n }\n return CID.decode(bytes.subarray(1)) // ignore leading 0x00\n}\n\nconst decodeOptions = {\n allowIndefinite: false,\n coerceUndefinedToNull: true,\n allowNaN: false,\n allowInfinity: false,\n allowBigInt: true, // this will lead to BigInt for ints outside of\n // safe-integer range, which may surprise users\n strict: true,\n useMaps: false,\n rejectDuplicateMapKeys: true,\n /** @type {import('cborg').TagDecoder[]} */\n tags: []\n}\ndecodeOptions.tags[CID_CBOR_TAG] = cidDecoder\n\nexport const name = 'dag-cbor'\nexport const code = 0x71\n\n/**\n * @template T\n * @param {T} node\n * @returns {ByteView<T>}\n */\nexport const encode = (node) => cborg.encode(node, encodeOptions)\n\n/**\n * @template T\n * @param {ByteView<T>} data\n * @returns {T}\n */\nexport const decode = (data) => cborg.decode(data, decodeOptions)\n", "const typeofs = [\n 'string',\n 'number',\n 'bigint',\n 'symbol'\n];\nconst objectTypeNames = [\n 'Function',\n 'Generator',\n 'AsyncGenerator',\n 'GeneratorFunction',\n 'AsyncGeneratorFunction',\n 'AsyncFunction',\n 'Observable',\n 'Array',\n 'Buffer',\n 'Object',\n 'RegExp',\n 'Date',\n 'Error',\n 'Map',\n 'Set',\n 'WeakMap',\n 'WeakSet',\n 'ArrayBuffer',\n 'SharedArrayBuffer',\n 'DataView',\n 'Promise',\n 'URL',\n 'HTMLElement',\n 'Int8Array',\n 'Uint8Array',\n 'Uint8ClampedArray',\n 'Int16Array',\n 'Uint16Array',\n 'Int32Array',\n 'Uint32Array',\n 'Float32Array',\n 'Float64Array',\n 'BigInt64Array',\n 'BigUint64Array'\n];\nexport function is(value) {\n if (value === null) {\n return 'null';\n }\n if (value === undefined) {\n return 'undefined';\n }\n if (value === true || value === false) {\n return 'boolean';\n }\n const typeOf = typeof value;\n if (typeofs.includes(typeOf)) {\n return typeOf;\n }\n if (typeOf === 'function') {\n return 'Function';\n }\n if (Array.isArray(value)) {\n return 'Array';\n }\n if (isBuffer(value)) {\n return 'Buffer';\n }\n const objectType = getObjectType(value);\n if (objectType) {\n return objectType;\n }\n return 'Object';\n}\nfunction isBuffer(value) {\n return value && value.constructor && value.constructor.isBuffer && value.constructor.isBuffer.call(null, value);\n}\nfunction getObjectType(value) {\n const objectTypeName = Object.prototype.toString.call(value).slice(8, -1);\n if (objectTypeNames.includes(objectTypeName)) {\n return objectTypeName;\n }\n return undefined;\n}", "class Type {\n constructor(major, name, terminal) {\n this.major = major;\n this.majorEncoded = major << 5;\n this.name = name;\n this.terminal = terminal;\n }\n toString() {\n return `Type[${ this.major }].${ this.name }`;\n }\n compare(typ) {\n return this.major < typ.major ? -1 : this.major > typ.major ? 1 : 0;\n }\n}\nType.uint = new Type(0, 'uint', true);\nType.negint = new Type(1, 'negint', true);\nType.bytes = new Type(2, 'bytes', true);\nType.string = new Type(3, 'string', true);\nType.array = new Type(4, 'array', false);\nType.map = new Type(5, 'map', false);\nType.tag = new Type(6, 'tag', false);\nType.float = new Type(7, 'float', true);\nType.false = new Type(7, 'false', true);\nType.true = new Type(7, 'true', true);\nType.null = new Type(7, 'null', true);\nType.undefined = new Type(7, 'undefined', true);\nType.break = new Type(7, 'break', true);\nclass Token {\n constructor(type, value, encodedLength) {\n this.type = type;\n this.value = value;\n this.encodedLength = encodedLength;\n this.encodedBytes = undefined;\n this.byteValue = undefined;\n }\n toString() {\n return `Token[${ this.type }].${ this.value }`;\n }\n}\nexport {\n Type,\n Token\n};", "export const useBuffer = globalThis.process && !globalThis.process.browser && globalThis.Buffer && typeof globalThis.Buffer.isBuffer === 'function';\nconst textDecoder = new TextDecoder();\nconst textEncoder = new TextEncoder();\nfunction isBuffer(buf) {\n return useBuffer && globalThis.Buffer.isBuffer(buf);\n}\nexport function asU8A(buf) {\n if (!(buf instanceof Uint8Array)) {\n return Uint8Array.from(buf);\n }\n return isBuffer(buf) ? new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength) : buf;\n}\nexport const toString = useBuffer ? (bytes, start, end) => {\n return end - start > 64 ? globalThis.Buffer.from(bytes.subarray(start, end)).toString('utf8') : utf8Slice(bytes, start, end);\n} : (bytes, start, end) => {\n return end - start > 64 ? textDecoder.decode(bytes.subarray(start, end)) : utf8Slice(bytes, start, end);\n};\nexport const fromString = useBuffer ? string => {\n return string.length > 64 ? globalThis.Buffer.from(string) : utf8ToBytes(string);\n} : string => {\n return string.length > 64 ? textEncoder.encode(string) : utf8ToBytes(string);\n};\nexport const fromArray = arr => {\n return Uint8Array.from(arr);\n};\nexport const slice = useBuffer ? (bytes, start, end) => {\n if (isBuffer(bytes)) {\n return new Uint8Array(bytes.subarray(start, end));\n }\n return bytes.slice(start, end);\n} : (bytes, start, end) => {\n return bytes.slice(start, end);\n};\nexport const concat = useBuffer ? (chunks, length) => {\n chunks = chunks.map(c => c instanceof Uint8Array ? c : globalThis.Buffer.from(c));\n return asU8A(globalThis.Buffer.concat(chunks, length));\n} : (chunks, length) => {\n const out = new Uint8Array(length);\n let off = 0;\n for (let b of chunks) {\n if (off + b.length > out.length) {\n b = b.subarray(0, out.length - off);\n }\n out.set(b, off);\n off += b.length;\n }\n return out;\n};\nexport const alloc = useBuffer ? size => {\n return globalThis.Buffer.allocUnsafe(size);\n} : size => {\n return new Uint8Array(size);\n};\nexport const toHex = useBuffer ? d => {\n if (typeof d === 'string') {\n return d;\n }\n return globalThis.Buffer.from(toBytes(d)).toString('hex');\n} : d => {\n if (typeof d === 'string') {\n return d;\n }\n return Array.prototype.reduce.call(toBytes(d), (p, c) => `${ p }${ c.toString(16).padStart(2, '0') }`, '');\n};\nexport const fromHex = useBuffer ? hex => {\n if (hex instanceof Uint8Array) {\n return hex;\n }\n return globalThis.Buffer.from(hex, 'hex');\n} : hex => {\n if (hex instanceof Uint8Array) {\n return hex;\n }\n if (!hex.length) {\n return new Uint8Array(0);\n }\n return new Uint8Array(hex.split('').map((c, i, d) => i % 2 === 0 ? `0x${ c }${ d[i + 1] }` : '').filter(Boolean).map(e => parseInt(e, 16)));\n};\nfunction toBytes(obj) {\n if (obj instanceof Uint8Array && obj.constructor.name === 'Uint8Array') {\n return obj;\n }\n if (obj instanceof ArrayBuffer) {\n return new Uint8Array(obj);\n }\n if (ArrayBuffer.isView(obj)) {\n return new Uint8Array(obj.buffer, obj.byteOffset, obj.byteLength);\n }\n throw new Error('Unknown type, must be binary type');\n}\nexport function compare(b1, b2) {\n if (isBuffer(b1) && isBuffer(b2)) {\n return b1.compare(b2);\n }\n for (let i = 0; i < b1.length; i++) {\n if (b1[i] === b2[i]) {\n continue;\n }\n return b1[i] < b2[i] ? -1 : 1;\n }\n return 0;\n}\nfunction utf8ToBytes(string, units = Infinity) {\n let codePoint;\n const length = string.length;\n let leadSurrogate = null;\n const bytes = [];\n for (let i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i);\n if (codePoint > 55295 && codePoint < 57344) {\n if (!leadSurrogate) {\n if (codePoint > 56319) {\n if ((units -= 3) > -1)\n bytes.push(239, 191, 189);\n continue;\n } else if (i + 1 === length) {\n if ((units -= 3) > -1)\n bytes.push(239, 191, 189);\n continue;\n }\n leadSurrogate = codePoint;\n continue;\n }\n if (codePoint < 56320) {\n if ((units -= 3) > -1)\n bytes.push(239, 191, 189);\n leadSurrogate = codePoint;\n continue;\n }\n codePoint = (leadSurrogate - 55296 << 10 | codePoint - 56320) + 65536;\n } else if (leadSurrogate) {\n if ((units -= 3) > -1)\n bytes.push(239, 191, 189);\n }\n leadSurrogate = null;\n if (codePoint < 128) {\n if ((units -= 1) < 0)\n break;\n bytes.push(codePoint);\n } else if (codePoint < 2048) {\n if ((units -= 2) < 0)\n break;\n bytes.push(codePoint >> 6 | 192, codePoint & 63 | 128);\n } else if (codePoint < 65536) {\n if ((units -= 3) < 0)\n break;\n bytes.push(codePoint >> 12 | 224, codePoint >> 6 & 63 | 128, codePoint & 63 | 128);\n } else if (codePoint < 1114112) {\n if ((units -= 4) < 0)\n break;\n bytes.push(codePoint >> 18 | 240, codePoint >> 12 & 63 | 128, codePoint >> 6 & 63 | 128, codePoint & 63 | 128);\n } else {\n throw new Error('Invalid code point');\n }\n }\n return bytes;\n}\nfunction utf8Slice(buf, offset, end) {\n const res = [];\n while (offset < end) {\n const firstByte = buf[offset];\n let codePoint = null;\n let bytesPerSequence = firstByte > 239 ? 4 : firstByte > 223 ? 3 : firstByte > 191 ? 2 : 1;\n if (offset + bytesPerSequence <= end) {\n let secondByte, thirdByte, fourthByte, tempCodePoint;\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 128) {\n codePoint = firstByte;\n }\n break;\n case 2:\n secondByte = buf[offset + 1];\n if ((secondByte & 192) === 128) {\n tempCodePoint = (firstByte & 31) << 6 | secondByte & 63;\n if (tempCodePoint > 127) {\n codePoint = tempCodePoint;\n }\n }\n break;\n case 3:\n secondByte = buf[offset + 1];\n thirdByte = buf[offset + 2];\n if ((secondByte & 192) === 128 && (thirdByte & 192) === 128) {\n tempCodePoint = (firstByte & 15) << 12 | (secondByte & 63) << 6 | thirdByte & 63;\n if (tempCodePoint > 2047 && (tempCodePoint < 55296 || tempCodePoint > 57343)) {\n codePoint = tempCodePoint;\n }\n }\n break;\n case 4:\n secondByte = buf[offset + 1];\n thirdByte = buf[offset + 2];\n fourthByte = buf[offset + 3];\n if ((secondByte & 192) === 128 && (thirdByte & 192) === 128 && (fourthByte & 192) === 128) {\n tempCodePoint = (firstByte & 15) << 18 | (secondByte & 63) << 12 | (thirdByte & 63) << 6 | fourthByte & 63;\n if (tempCodePoint > 65535 && tempCodePoint < 1114112) {\n codePoint = tempCodePoint;\n }\n }\n }\n }\n if (codePoint === null) {\n codePoint = 65533;\n bytesPerSequence = 1;\n } else if (codePoint > 65535) {\n codePoint -= 65536;\n res.push(codePoint >>> 10 & 1023 | 55296);\n codePoint = 56320 | codePoint & 1023;\n }\n res.push(codePoint);\n offset += bytesPerSequence;\n }\n return decodeCodePointsArray(res);\n}\nconst MAX_ARGUMENTS_LENGTH = 4096;\nexport function decodeCodePointsArray(codePoints) {\n const len = codePoints.length;\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints);\n }\n let res = '';\n let i = 0;\n while (i < len) {\n res += String.fromCharCode.apply(String, codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH));\n }\n return res;\n}", "import {\n alloc,\n concat,\n slice\n} from './byte-utils.js';\nconst defaultChunkSize = 256;\nexport class Bl {\n constructor(chunkSize = defaultChunkSize) {\n this.chunkSize = chunkSize;\n this.cursor = 0;\n this.maxCursor = -1;\n this.chunks = [];\n this._initReuseChunk = null;\n }\n reset() {\n this.cursor = 0;\n this.maxCursor = -1;\n if (this.chunks.length) {\n this.chunks = [];\n }\n if (this._initReuseChunk !== null) {\n this.chunks.push(this._initReuseChunk);\n this.maxCursor = this._initReuseChunk.length - 1;\n }\n }\n push(bytes) {\n let topChunk = this.chunks[this.chunks.length - 1];\n const newMax = this.cursor + bytes.length;\n if (newMax <= this.maxCursor + 1) {\n const chunkPos = topChunk.length - (this.maxCursor - this.cursor) - 1;\n topChunk.set(bytes, chunkPos);\n } else {\n if (topChunk) {\n const chunkPos = topChunk.length - (this.maxCursor - this.cursor) - 1;\n if (chunkPos < topChunk.length) {\n this.chunks[this.chunks.length - 1] = topChunk.subarray(0, chunkPos);\n this.maxCursor = this.cursor - 1;\n }\n }\n if (bytes.length < 64 && bytes.length < this.chunkSize) {\n topChunk = alloc(this.chunkSize);\n this.chunks.push(topChunk);\n this.maxCursor += topChunk.length;\n if (this._initReuseChunk === null) {\n this._initReuseChunk = topChunk;\n }\n topChunk.set(bytes, 0);\n } else {\n this.chunks.push(bytes);\n this.maxCursor += bytes.length;\n }\n }\n this.cursor += bytes.length;\n }\n toBytes(reset = false) {\n let byts;\n if (this.chunks.length === 1) {\n const chunk = this.chunks[0];\n if (reset && this.cursor > chunk.length / 2) {\n byts = this.cursor === chunk.length ? chunk : chunk.subarray(0, this.cursor);\n this._initReuseChunk = null;\n this.chunks = [];\n } else {\n byts = slice(chunk, 0, this.cursor);\n }\n } else {\n byts = concat(this.chunks, this.cursor);\n }\n if (reset) {\n this.reset();\n }\n return byts;\n }\n}", "const decodeErrPrefix = 'CBOR decode error:';\nconst encodeErrPrefix = 'CBOR encode error:';\nconst uintMinorPrefixBytes = [];\nuintMinorPrefixBytes[23] = 1;\nuintMinorPrefixBytes[24] = 2;\nuintMinorPrefixBytes[25] = 3;\nuintMinorPrefixBytes[26] = 5;\nuintMinorPrefixBytes[27] = 9;\nfunction assertEnoughData(data, pos, need) {\n if (data.length - pos < need) {\n throw new Error(`${ decodeErrPrefix } not enough data for type`);\n }\n}\nexport {\n decodeErrPrefix,\n encodeErrPrefix,\n uintMinorPrefixBytes,\n assertEnoughData\n};", "import {\n Token,\n Type\n} from './token.js';\nimport {\n decodeErrPrefix,\n assertEnoughData\n} from './common.js';\nexport const uintBoundaries = [\n 24,\n 256,\n 65536,\n 4294967296,\n BigInt('18446744073709551616')\n];\nexport function readUint8(data, offset, options) {\n assertEnoughData(data, offset, 1);\n const value = data[offset];\n if (options.strict === true && value < uintBoundaries[0]) {\n throw new Error(`${ decodeErrPrefix } integer encoded in more bytes than necessary (strict decode)`);\n }\n return value;\n}\nexport function readUint16(data, offset, options) {\n assertEnoughData(data, offset, 2);\n const value = data[offset] << 8 | data[offset + 1];\n if (options.strict === true && value < uintBoundaries[1]) {\n throw new Error(`${ decodeErrPrefix } integer encoded in more bytes than necessary (strict decode)`);\n }\n return value;\n}\nexport function readUint32(data, offset, options) {\n assertEnoughData(data, offset, 4);\n const value = data[offset] * 16777216 + (data[offset + 1] << 16) + (data[offset + 2] << 8) + data[offset + 3];\n if (options.strict === true && value < uintBoundaries[2]) {\n throw new Error(`${ decodeErrPrefix } integer encoded in more bytes than necessary (strict decode)`);\n }\n return value;\n}\nexport function readUint64(data, offset, options) {\n assertEnoughData(data, offset, 8);\n const hi = data[offset] * 16777216 + (data[offset + 1] << 16) + (data[offset + 2] << 8) + data[offset + 3];\n const lo = data[offset + 4] * 16777216 + (data[offset + 5] << 16) + (data[offset + 6] << 8) + data[offset + 7];\n const value = (BigInt(hi) << BigInt(32)) + BigInt(lo);\n if (options.strict === true && value < uintBoundaries[3]) {\n throw new Error(`${ decodeErrPrefix } integer encoded in more bytes than necessary (strict decode)`);\n }\n if (value <= Number.MAX_SAFE_INTEGER) {\n return Number(value);\n }\n if (options.allowBigInt === true) {\n return value;\n }\n throw new Error(`${ decodeErrPrefix } integers outside of the safe integer range are not supported`);\n}\nexport function decodeUint8(data, pos, _minor, options) {\n return new Token(Type.uint, readUint8(data, pos + 1, options), 2);\n}\nexport function decodeUint16(data, pos, _minor, options) {\n return new Token(Type.uint, readUint16(data, pos + 1, options), 3);\n}\nexport function decodeUint32(data, pos, _minor, options) {\n return new Token(Type.uint, readUint32(data, pos + 1, options), 5);\n}\nexport function decodeUint64(data, pos, _minor, options) {\n return new Token(Type.uint, readUint64(data, pos + 1, options), 9);\n}\nexport function encodeUint(buf, token) {\n return encodeUintValue(buf, 0, token.value);\n}\nexport function encodeUintValue(buf, major, uint) {\n if (uint < uintBoundaries[0]) {\n const nuint = Number(uint);\n buf.push([major | nuint]);\n } else if (uint < uintBoundaries[1]) {\n const nuint = Number(uint);\n buf.push([\n major | 24,\n nuint\n ]);\n } else if (uint < uintBoundaries[2]) {\n const nuint = Number(uint);\n buf.push([\n major | 25,\n nuint >>> 8,\n nuint & 255\n ]);\n } else if (uint < uintBoundaries[3]) {\n const nuint = Number(uint);\n buf.push([\n major | 26,\n nuint >>> 24 & 255,\n nuint >>> 16 & 255,\n nuint >>> 8 & 255,\n nuint & 255\n ]);\n } else {\n const buint = BigInt(uint);\n if (buint < uintBoundaries[4]) {\n const set = [\n major | 27,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0\n ];\n let lo = Number(buint & BigInt(4294967295));\n let hi = Number(buint >> BigInt(32) & BigInt(4294967295));\n set[8] = lo & 255;\n lo = lo >> 8;\n set[7] = lo & 255;\n lo = lo >> 8;\n set[6] = lo & 255;\n lo = lo >> 8;\n set[5] = lo & 255;\n set[4] = hi & 255;\n hi = hi >> 8;\n set[3] = hi & 255;\n hi = hi >> 8;\n set[2] = hi & 255;\n hi = hi >> 8;\n set[1] = hi & 255;\n buf.push(set);\n } else {\n throw new Error(`${ decodeErrPrefix } encountered BigInt larger than allowable range`);\n }\n }\n}\nencodeUint.encodedSize = function encodedSize(token) {\n return encodeUintValue.encodedSize(token.value);\n};\nencodeUintValue.encodedSize = function encodedSize(uint) {\n if (uint < uintBoundaries[0]) {\n return 1;\n }\n if (uint < uintBoundaries[1]) {\n return 2;\n }\n if (uint < uintBoundaries[2]) {\n return 3;\n }\n if (uint < uintBoundaries[3]) {\n return 5;\n }\n return 9;\n};\nencodeUint.compareTokens = function compareTokens(tok1, tok2) {\n return tok1.value < tok2.value ? -1 : tok1.value > tok2.value ? 1 : 0;\n};", "import {\n Token,\n Type\n} from './token.js';\nimport * as uint from './0uint.js';\nimport { decodeErrPrefix } from './common.js';\nexport function decodeNegint8(data, pos, _minor, options) {\n return new Token(Type.negint, -1 - uint.readUint8(data, pos + 1, options), 2);\n}\nexport function decodeNegint16(data, pos, _minor, options) {\n return new Token(Type.negint, -1 - uint.readUint16(data, pos + 1, options), 3);\n}\nexport function decodeNegint32(data, pos, _minor, options) {\n return new Token(Type.negint, -1 - uint.readUint32(data, pos + 1, options), 5);\n}\nconst neg1b = BigInt(-1);\nconst pos1b = BigInt(1);\nexport function decodeNegint64(data, pos, _minor, options) {\n const int = uint.readUint64(data, pos + 1, options);\n if (typeof int !== 'bigint') {\n const value = -1 - int;\n if (value >= Number.MIN_SAFE_INTEGER) {\n return new Token(Type.negint, value, 9);\n }\n }\n if (options.allowBigInt !== true) {\n throw new Error(`${ decodeErrPrefix } integers outside of the safe integer range are not supported`);\n }\n return new Token(Type.negint, neg1b - BigInt(int), 9);\n}\nexport function encodeNegint(buf, token) {\n const negint = token.value;\n const unsigned = typeof negint === 'bigint' ? negint * neg1b - pos1b : negint * -1 - 1;\n uint.encodeUintValue(buf, token.type.majorEncoded, unsigned);\n}\nencodeNegint.encodedSize = function encodedSize(token) {\n const negint = token.value;\n const unsigned = typeof negint === 'bigint' ? negint * neg1b - pos1b : negint * -1 - 1;\n if (unsigned < uint.uintBoundaries[0]) {\n return 1;\n }\n if (unsigned < uint.uintBoundaries[1]) {\n return 2;\n }\n if (unsigned < uint.uintBoundaries[2]) {\n return 3;\n }\n if (unsigned < uint.uintBoundaries[3]) {\n return 5;\n }\n return 9;\n};\nencodeNegint.compareTokens = function compareTokens(tok1, tok2) {\n return tok1.value < tok2.value ? 1 : tok1.value > tok2.value ? -1 : 0;\n};", "import {\n Token,\n Type\n} from './token.js';\nimport {\n assertEnoughData,\n decodeErrPrefix\n} from './common.js';\nimport * as uint from './0uint.js';\nimport {\n compare,\n fromString,\n slice\n} from './byte-utils.js';\nfunction toToken(data, pos, prefix, length) {\n assertEnoughData(data, pos, prefix + length);\n const buf = slice(data, pos + prefix, pos + prefix + length);\n return new Token(Type.bytes, buf, prefix + length);\n}\nexport function decodeBytesCompact(data, pos, minor, _options) {\n return toToken(data, pos, 1, minor);\n}\nexport function decodeBytes8(data, pos, _minor, options) {\n return toToken(data, pos, 2, uint.readUint8(data, pos + 1, options));\n}\nexport function decodeBytes16(data, pos, _minor, options) {\n return toToken(data, pos, 3, uint.readUint16(data, pos + 1, options));\n}\nexport function decodeBytes32(data, pos, _minor, options) {\n return toToken(data, pos, 5, uint.readUint32(data, pos + 1, options));\n}\nexport function decodeBytes64(data, pos, _minor, options) {\n const l = uint.readUint64(data, pos + 1, options);\n if (typeof l === 'bigint') {\n throw new Error(`${ decodeErrPrefix } 64-bit integer bytes lengths not supported`);\n }\n return toToken(data, pos, 9, l);\n}\nfunction tokenBytes(token) {\n if (token.encodedBytes === undefined) {\n token.encodedBytes = token.type === Type.string ? fromString(token.value) : token.value;\n }\n return token.encodedBytes;\n}\nexport function encodeBytes(buf, token) {\n const bytes = tokenBytes(token);\n uint.encodeUintValue(buf, token.type.majorEncoded, bytes.length);\n buf.push(bytes);\n}\nencodeBytes.encodedSize = function encodedSize(token) {\n const bytes = tokenBytes(token);\n return uint.encodeUintValue.encodedSize(bytes.length) + bytes.length;\n};\nencodeBytes.compareTokens = function compareTokens(tok1, tok2) {\n return compareBytes(tokenBytes(tok1), tokenBytes(tok2));\n};\nexport function compareBytes(b1, b2) {\n return b1.length < b2.length ? -1 : b1.length > b2.length ? 1 : compare(b1, b2);\n}", "import {\n Token,\n Type\n} from './token.js';\nimport {\n assertEnoughData,\n decodeErrPrefix\n} from './common.js';\nimport * as uint from './0uint.js';\nimport { encodeBytes } from './2bytes.js';\nimport {\n toString,\n slice\n} from './byte-utils.js';\nfunction toToken(data, pos, prefix, length, options) {\n const totLength = prefix + length;\n assertEnoughData(data, pos, totLength);\n const tok = new Token(Type.string, toString(data, pos + prefix, pos + totLength), totLength);\n if (options.retainStringBytes === true) {\n tok.byteValue = slice(data, pos + prefix, pos + totLength);\n }\n return tok;\n}\nexport function decodeStringCompact(data, pos, minor, options) {\n return toToken(data, pos, 1, minor, options);\n}\nexport function decodeString8(data, pos, _minor, options) {\n return toToken(data, pos, 2, uint.readUint8(data, pos + 1, options), options);\n}\nexport function decodeString16(data, pos, _minor, options) {\n return toToken(data, pos, 3, uint.readUint16(data, pos + 1, options), options);\n}\nexport function decodeString32(data, pos, _minor, options) {\n return toToken(data, pos, 5, uint.readUint32(data, pos + 1, options), options);\n}\nexport function decodeString64(data, pos, _minor, options) {\n const l = uint.readUint64(data, pos + 1, options);\n if (typeof l === 'bigint') {\n throw new Error(`${ decodeErrPrefix } 64-bit integer string lengths not supported`);\n }\n return toToken(data, pos, 9, l, options);\n}\nexport const encodeString = encodeBytes;", "import {\n Token,\n Type\n} from './token.js';\nimport * as uint from './0uint.js';\nimport { decodeErrPrefix } from './common.js';\nfunction toToken(_data, _pos, prefix, length) {\n return new Token(Type.array, length, prefix);\n}\nexport function decodeArrayCompact(data, pos, minor, _options) {\n return toToken(data, pos, 1, minor);\n}\nexport function decodeArray8(data, pos, _minor, options) {\n return toToken(data, pos, 2, uint.readUint8(data, pos + 1, options));\n}\nexport function decodeArray16(data, pos, _minor, options) {\n return toToken(data, pos, 3, uint.readUint16(data, pos + 1, options));\n}\nexport function decodeArray32(data, pos, _minor, options) {\n return toToken(data, pos, 5, uint.readUint32(data, pos + 1, options));\n}\nexport function decodeArray64(data, pos, _minor, options) {\n const l = uint.readUint64(data, pos + 1, options);\n if (typeof l === 'bigint') {\n throw new Error(`${ decodeErrPrefix } 64-bit integer array lengths not supported`);\n }\n return toToken(data, pos, 9, l);\n}\nexport function decodeArrayIndefinite(data, pos, _minor, options) {\n if (options.allowIndefinite === false) {\n throw new Error(`${ decodeErrPrefix } indefinite length items not allowed`);\n }\n return toToken(data, pos, 1, Infinity);\n}\nexport function encodeArray(buf, token) {\n uint.encodeUintValue(buf, Type.array.majorEncoded, token.value);\n}\nencodeArray.compareTokens = uint.encodeUint.compareTokens;\nencodeArray.encodedSize = function encodedSize(token) {\n return uint.encodeUintValue.encodedSize(token.value);\n};", "import {\n Token,\n Type\n} from './token.js';\nimport * as uint from './0uint.js';\nimport { decodeErrPrefix } from './common.js';\nfunction toToken(_data, _pos, prefix, length) {\n return new Token(Type.map, length, prefix);\n}\nexport function decodeMapCompact(data, pos, minor, _options) {\n return toToken(data, pos, 1, minor);\n}\nexport function decodeMap8(data, pos, _minor, options) {\n return toToken(data, pos, 2, uint.readUint8(data, pos + 1, options));\n}\nexport function decodeMap16(data, pos, _minor, options) {\n return toToken(data, pos, 3, uint.readUint16(data, pos + 1, options));\n}\nexport function decodeMap32(data, pos, _minor, options) {\n return toToken(data, pos, 5, uint.readUint32(data, pos + 1, options));\n}\nexport function decodeMap64(data, pos, _minor, options) {\n const l = uint.readUint64(data, pos + 1, options);\n if (typeof l === 'bigint') {\n throw new Error(`${ decodeErrPrefix } 64-bit integer map lengths not supported`);\n }\n return toToken(data, pos, 9, l);\n}\nexport function decodeMapIndefinite(data, pos, _minor, options) {\n if (options.allowIndefinite === false) {\n throw new Error(`${ decodeErrPrefix } indefinite length items not allowed`);\n }\n return toToken(data, pos, 1, Infinity);\n}\nexport function encodeMap(buf, token) {\n uint.encodeUintValue(buf, Type.map.majorEncoded, token.value);\n}\nencodeMap.compareTokens = uint.encodeUint.compareTokens;\nencodeMap.encodedSize = function encodedSize(token) {\n return uint.encodeUintValue.encodedSize(token.value);\n};", "import {\n Token,\n Type\n} from './token.js';\nimport * as uint from './0uint.js';\nexport function decodeTagCompact(_data, _pos, minor, _options) {\n return new Token(Type.tag, minor, 1);\n}\nexport function decodeTag8(data, pos, _minor, options) {\n return new Token(Type.tag, uint.readUint8(data, pos + 1, options), 2);\n}\nexport function decodeTag16(data, pos, _minor, options) {\n return new Token(Type.tag, uint.readUint16(data, pos + 1, options), 3);\n}\nexport function decodeTag32(data, pos, _minor, options) {\n return new Token(Type.tag, uint.readUint32(data, pos + 1, options), 5);\n}\nexport function decodeTag64(data, pos, _minor, options) {\n return new Token(Type.tag, uint.readUint64(data, pos + 1, options), 9);\n}\nexport function encodeTag(buf, token) {\n uint.encodeUintValue(buf, Type.tag.majorEncoded, token.value);\n}\nencodeTag.compareTokens = uint.encodeUint.compareTokens;\nencodeTag.encodedSize = function encodedSize(token) {\n return uint.encodeUintValue.encodedSize(token.value);\n};", "import {\n Token,\n Type\n} from './token.js';\nimport { decodeErrPrefix } from './common.js';\nimport { encodeUint } from './0uint.js';\nconst MINOR_FALSE = 20;\nconst MINOR_TRUE = 21;\nconst MINOR_NULL = 22;\nconst MINOR_UNDEFINED = 23;\nexport function decodeUndefined(_data, _pos, _minor, options) {\n if (options.allowUndefined === false) {\n throw new Error(`${ decodeErrPrefix } undefined values are not supported`);\n } else if (options.coerceUndefinedToNull === true) {\n return new Token(Type.null, null, 1);\n }\n return new Token(Type.undefined, undefined, 1);\n}\nexport function decodeBreak(_data, _pos, _minor, options) {\n if (options.allowIndefinite === false) {\n throw new Error(`${ decodeErrPrefix } indefinite length items not allowed`);\n }\n return new Token(Type.break, undefined, 1);\n}\nfunction createToken(value, bytes, options) {\n if (options) {\n if (options.allowNaN === false && Number.isNaN(value)) {\n throw new Error(`${ decodeErrPrefix } NaN values are not supported`);\n }\n if (options.allowInfinity === false && (value === Infinity || value === -Infinity)) {\n throw new Error(`${ decodeErrPrefix } Infinity values are not supported`);\n }\n }\n return new Token(Type.float, value, bytes);\n}\nexport function decodeFloat16(data, pos, _minor, options) {\n return createToken(readFloat16(data, pos + 1), 3, options);\n}\nexport function decodeFloat32(data, pos, _minor, options) {\n return createToken(readFloat32(data, pos + 1), 5, options);\n}\nexport function decodeFloat64(data, pos, _minor, options) {\n return createToken(readFloat64(data, pos + 1), 9, options);\n}\nexport function encodeFloat(buf, token, options) {\n const float = token.value;\n if (float === false) {\n buf.push([Type.float.majorEncoded | MINOR_FALSE]);\n } else if (float === true) {\n buf.push([Type.float.majorEncoded | MINOR_TRUE]);\n } else if (float === null) {\n buf.push([Type.float.majorEncoded | MINOR_NULL]);\n } else if (float === undefined) {\n buf.push([Type.float.majorEncoded | MINOR_UNDEFINED]);\n } else {\n let decoded;\n let success = false;\n if (!options || options.float64 !== true) {\n encodeFloat16(float);\n decoded = readFloat16(ui8a, 1);\n if (float === decoded || Number.isNaN(float)) {\n ui8a[0] = 249;\n buf.push(ui8a.slice(0, 3));\n success = true;\n } else {\n encodeFloat32(float);\n decoded = readFloat32(ui8a, 1);\n if (float === decoded) {\n ui8a[0] = 250;\n buf.push(ui8a.slice(0, 5));\n success = true;\n }\n }\n }\n if (!success) {\n encodeFloat64(float);\n decoded = readFloat64(ui8a, 1);\n ui8a[0] = 251;\n buf.push(ui8a.slice(0, 9));\n }\n }\n}\nencodeFloat.encodedSize = function encodedSize(token, options) {\n const float = token.value;\n if (float === false || float === true || float === null || float === undefined) {\n return 1;\n }\n if (!options || options.float64 !== true) {\n encodeFloat16(float);\n let decoded = readFloat16(ui8a, 1);\n if (float === decoded || Number.isNaN(float)) {\n return 3;\n }\n encodeFloat32(float);\n decoded = readFloat32(ui8a, 1);\n if (float === decoded) {\n return 5;\n }\n }\n return 9;\n};\nconst buffer = new ArrayBuffer(9);\nconst dataView = new DataView(buffer, 1);\nconst ui8a = new Uint8Array(buffer, 0);\nfunction encodeFloat16(inp) {\n if (inp === Infinity) {\n dataView.setUint16(0, 31744, false);\n } else if (inp === -Infinity) {\n dataView.setUint16(0, 64512, false);\n } else if (Number.isNaN(inp)) {\n dataView.setUint16(0, 32256, false);\n } else {\n dataView.setFloat32(0, inp);\n const valu32 = dataView.getUint32(0);\n const exponent = (valu32 & 2139095040) >> 23;\n const mantissa = valu32 & 8388607;\n if (exponent === 255) {\n dataView.setUint16(0, 31744, false);\n } else if (exponent === 0) {\n dataView.setUint16(0, (inp & 2147483648) >> 16 | mantissa >> 13, false);\n } else {\n const logicalExponent = exponent - 127;\n if (logicalExponent < -24) {\n dataView.setUint16(0, 0);\n } else if (logicalExponent < -14) {\n dataView.setUint16(0, (valu32 & 2147483648) >> 16 | 1 << 24 + logicalExponent, false);\n } else {\n dataView.setUint16(0, (valu32 & 2147483648) >> 16 | logicalExponent + 15 << 10 | mantissa >> 13, false);\n }\n }\n }\n}\nfunction readFloat16(ui8a, pos) {\n if (ui8a.length - pos < 2) {\n throw new Error(`${ decodeErrPrefix } not enough data for float16`);\n }\n const half = (ui8a[pos] << 8) + ui8a[pos + 1];\n if (half === 31744) {\n return Infinity;\n }\n if (half === 64512) {\n return -Infinity;\n }\n if (half === 32256) {\n return NaN;\n }\n const exp = half >> 10 & 31;\n const mant = half & 1023;\n let val;\n if (exp === 0) {\n val = mant * 2 ** -24;\n } else if (exp !== 31) {\n val = (mant + 1024) * 2 ** (exp - 25);\n } else {\n val = mant === 0 ? Infinity : NaN;\n }\n return half & 32768 ? -val : val;\n}\nfunction encodeFloat32(inp) {\n dataView.setFloat32(0, inp, false);\n}\nfunction readFloat32(ui8a, pos) {\n if (ui8a.length - pos < 4) {\n throw new Error(`${ decodeErrPrefix } not enough data for float32`);\n }\n const offset = (ui8a.byteOffset || 0) + pos;\n return new DataView(ui8a.buffer, offset, 4).getFloat32(0, false);\n}\nfunction encodeFloat64(inp) {\n dataView.setFloat64(0, inp, false);\n}\nfunction readFloat64(ui8a, pos) {\n if (ui8a.length - pos < 8) {\n throw new Error(`${ decodeErrPrefix } not enough data for float64`);\n }\n const offset = (ui8a.byteOffset || 0) + pos;\n return new DataView(ui8a.buffer, offset, 8).getFloat64(0, false);\n}\nencodeFloat.compareTokens = encodeUint.compareTokens;", "import {\n Token,\n Type\n} from './token.js';\nimport * as uint from './0uint.js';\nimport * as negint from './1negint.js';\nimport * as bytes from './2bytes.js';\nimport * as string from './3string.js';\nimport * as array from './4array.js';\nimport * as map from './5map.js';\nimport * as tag from './6tag.js';\nimport * as float from './7float.js';\nimport { decodeErrPrefix } from './common.js';\nimport { fromArray } from './byte-utils.js';\nfunction invalidMinor(data, pos, minor) {\n throw new Error(`${ decodeErrPrefix } encountered invalid minor (${ minor }) for major ${ data[pos] >>> 5 }`);\n}\nfunction errorer(msg) {\n return () => {\n throw new Error(`${ decodeErrPrefix } ${ msg }`);\n };\n}\nexport const jump = [];\nfor (let i = 0; i <= 23; i++) {\n jump[i] = invalidMinor;\n}\njump[24] = uint.decodeUint8;\njump[25] = uint.decodeUint16;\njump[26] = uint.decodeUint32;\njump[27] = uint.decodeUint64;\njump[28] = invalidMinor;\njump[29] = invalidMinor;\njump[30] = invalidMinor;\njump[31] = invalidMinor;\nfor (let i = 32; i <= 55; i++) {\n jump[i] = invalidMinor;\n}\njump[56] = negint.decodeNegint8;\njump[57] = negint.decodeNegint16;\njump[58] = negint.decodeNegint32;\njump[59] = negint.decodeNegint64;\njump[60] = invalidMinor;\njump[61] = invalidMinor;\njump[62] = invalidMinor;\njump[63] = invalidMinor;\nfor (let i = 64; i <= 87; i++) {\n jump[i] = bytes.decodeBytesCompact;\n}\njump[88] = bytes.decodeBytes8;\njump[89] = bytes.decodeBytes16;\njump[90] = bytes.decodeBytes32;\njump[91] = bytes.decodeBytes64;\njump[92] = invalidMinor;\njump[93] = invalidMinor;\njump[94] = invalidMinor;\njump[95] = errorer('indefinite length bytes/strings are not supported');\nfor (let i = 96; i <= 119; i++) {\n jump[i] = string.decodeStringCompact;\n}\njump[120] = string.decodeString8;\njump[121] = string.decodeString16;\njump[122] = string.decodeString32;\njump[123] = string.decodeString64;\njump[124] = invalidMinor;\njump[125] = invalidMinor;\njump[126] = invalidMinor;\njump[127] = errorer('indefinite length bytes/strings are not supported');\nfor (let i = 128; i <= 151; i++) {\n jump[i] = array.decodeArrayCompact;\n}\njump[152] = array.decodeArray8;\njump[153] = array.decodeArray16;\njump[154] = array.decodeArray32;\njump[155] = array.decodeArray64;\njump[156] = invalidMinor;\njump[157] = invalidMinor;\njump[158] = invalidMinor;\njump[159] = array.decodeArrayIndefinite;\nfor (let i = 160; i <= 183; i++) {\n jump[i] = map.decodeMapCompact;\n}\njump[184] = map.decodeMap8;\njump[185] = map.decodeMap16;\njump[186] = map.decodeMap32;\njump[187] = map.decodeMap64;\njump[188] = invalidMinor;\njump[189] = invalidMinor;\njump[190] = invalidMinor;\njump[191] = map.decodeMapIndefinite;\nfor (let i = 192; i <= 215; i++) {\n jump[i] = tag.decodeTagCompact;\n}\njump[216] = tag.decodeTag8;\njump[217] = tag.decodeTag16;\njump[218] = tag.decodeTag32;\njump[219] = tag.decodeTag64;\njump[220] = invalidMinor;\njump[221] = invalidMinor;\njump[222] = invalidMinor;\njump[223] = invalidMinor;\nfor (let i = 224; i <= 243; i++) {\n jump[i] = errorer('simple values are not supported');\n}\njump[244] = invalidMinor;\njump[245] = invalidMinor;\njump[246] = invalidMinor;\njump[247] = float.decodeUndefined;\njump[248] = errorer('simple values are not supported');\njump[249] = float.decodeFloat16;\njump[250] = float.decodeFloat32;\njump[251] = float.decodeFloat64;\njump[252] = invalidMinor;\njump[253] = invalidMinor;\njump[254] = invalidMinor;\njump[255] = float.decodeBreak;\nexport const quick = [];\nfor (let i = 0; i < 24; i++) {\n quick[i] = new Token(Type.uint, i, 1);\n}\nfor (let i = -1; i >= -24; i--) {\n quick[31 - i] = new Token(Type.negint, i, 1);\n}\nquick[64] = new Token(Type.bytes, new Uint8Array(0), 1);\nquick[96] = new Token(Type.string, '', 1);\nquick[128] = new Token(Type.array, 0, 1);\nquick[160] = new Token(Type.map, 0, 1);\nquick[244] = new Token(Type.false, false, 1);\nquick[245] = new Token(Type.true, true, 1);\nquick[246] = new Token(Type.null, null, 1);\nexport function quickEncodeToken(token) {\n switch (token.type) {\n case Type.false:\n return fromArray([244]);\n case Type.true:\n return fromArray([245]);\n case Type.null:\n return fromArray([246]);\n case Type.bytes:\n if (!token.value.length) {\n return fromArray([64]);\n }\n return;\n case Type.string:\n if (token.value === '') {\n return fromArray([96]);\n }\n return;\n case Type.array:\n if (token.value === 0) {\n return fromArray([128]);\n }\n return;\n case Type.map:\n if (token.value === 0) {\n return fromArray([160]);\n }\n return;\n case Type.uint:\n if (token.value < 24) {\n return fromArray([Number(token.value)]);\n }\n return;\n case Type.negint:\n if (token.value >= -24) {\n return fromArray([31 - Number(token.value)]);\n }\n }\n}", "import { is } from './is.js';\nimport {\n Token,\n Type\n} from './token.js';\nimport { Bl } from './bl.js';\nimport { encodeErrPrefix } from './common.js';\nimport { quickEncodeToken } from './jump.js';\nimport { asU8A } from './byte-utils.js';\nimport { encodeUint } from './0uint.js';\nimport { encodeNegint } from './1negint.js';\nimport { encodeBytes } from './2bytes.js';\nimport { encodeString } from './3string.js';\nimport { encodeArray } from './4array.js';\nimport { encodeMap } from './5map.js';\nimport { encodeTag } from './6tag.js';\nimport { encodeFloat } from './7float.js';\nconst defaultEncodeOptions = {\n float64: false,\n mapSorter,\n quickEncodeToken\n};\nexport function makeCborEncoders() {\n const encoders = [];\n encoders[Type.uint.major] = encodeUint;\n encoders[Type.negint.major] = encodeNegint;\n encoders[Type.bytes.major] = encodeBytes;\n encoders[Type.string.major] = encodeString;\n encoders[Type.array.major] = encodeArray;\n encoders[Type.map.major] = encodeMap;\n encoders[Type.tag.major] = encodeTag;\n encoders[Type.float.major] = encodeFloat;\n return encoders;\n}\nconst cborEncoders = makeCborEncoders();\nconst buf = new Bl();\nclass Ref {\n constructor(obj, parent) {\n this.obj = obj;\n this.parent = parent;\n }\n includes(obj) {\n let p = this;\n do {\n if (p.obj === obj) {\n return true;\n }\n } while (p = p.parent);\n return false;\n }\n static createCheck(stack, obj) {\n if (stack && stack.includes(obj)) {\n throw new Error(`${ encodeErrPrefix } object contains circular references`);\n }\n return new Ref(obj, stack);\n }\n}\nconst simpleTokens = {\n null: new Token(Type.null, null),\n undefined: new Token(Type.undefined, undefined),\n true: new Token(Type.true, true),\n false: new Token(Type.false, false),\n emptyArray: new Token(Type.array, 0),\n emptyMap: new Token(Type.map, 0)\n};\nconst typeEncoders = {\n number(obj, _typ, _options, _refStack) {\n if (!Number.isInteger(obj) || !Number.isSafeInteger(obj)) {\n return new Token(Type.float, obj);\n } else if (obj >= 0) {\n return new Token(Type.uint, obj);\n } else {\n return new Token(Type.negint, obj);\n }\n },\n bigint(obj, _typ, _options, _refStack) {\n if (obj >= BigInt(0)) {\n return new Token(Type.uint, obj);\n } else {\n return new Token(Type.negint, obj);\n }\n },\n Uint8Array(obj, _typ, _options, _refStack) {\n return new Token(Type.bytes, obj);\n },\n string(obj, _typ, _options, _refStack) {\n return new Token(Type.string, obj);\n },\n boolean(obj, _typ, _options, _refStack) {\n return obj ? simpleTokens.true : simpleTokens.false;\n },\n null(_obj, _typ, _options, _refStack) {\n return simpleTokens.null;\n },\n undefined(_obj, _typ, _options, _refStack) {\n return simpleTokens.undefined;\n },\n ArrayBuffer(obj, _typ, _options, _refStack) {\n return new Token(Type.bytes, new Uint8Array(obj));\n },\n DataView(obj, _typ, _options, _refStack) {\n return new Token(Type.bytes, new Uint8Array(obj.buffer, obj.byteOffset, obj.byteLength));\n },\n Array(obj, _typ, options, refStack) {\n if (!obj.length) {\n if (options.addBreakTokens === true) {\n return [\n simpleTokens.emptyArray,\n new Token(Type.break)\n ];\n }\n return simpleTokens.emptyArray;\n }\n refStack = Ref.createCheck(refStack, obj);\n const entries = [];\n let i = 0;\n for (const e of obj) {\n entries[i++] = objectToTokens(e, options, refStack);\n }\n if (options.addBreakTokens) {\n return [\n new Token(Type.array, obj.length),\n entries,\n new Token(Type.break)\n ];\n }\n return [\n new Token(Type.array, obj.length),\n entries\n ];\n },\n Object(obj, typ, options, refStack) {\n const isMap = typ !== 'Object';\n const keys = isMap ? obj.keys() : Object.keys(obj);\n const length = isMap ? obj.size : keys.length;\n if (!length) {\n if (options.addBreakTokens === true) {\n return [\n simpleTokens.emptyMap,\n new Token(Type.break)\n ];\n }\n return simpleTokens.emptyMap;\n }\n refStack = Ref.createCheck(refStack, obj);\n const entries = [];\n let i = 0;\n for (const key of keys) {\n entries[i++] = [\n objectToTokens(key, options, refStack),\n objectToTokens(isMap ? obj.get(key) : obj[key], options, refStack)\n ];\n }\n sortMapEntries(entries, options);\n if (options.addBreakTokens) {\n return [\n new Token(Type.map, length),\n entries,\n new Token(Type.break)\n ];\n }\n return [\n new Token(Type.map, length),\n entries\n ];\n }\n};\ntypeEncoders.Map = typeEncoders.Object;\ntypeEncoders.Buffer = typeEncoders.Uint8Array;\nfor (const typ of 'Uint8Clamped Uint16 Uint32 Int8 Int16 Int32 BigUint64 BigInt64 Float32 Float64'.split(' ')) {\n typeEncoders[`${ typ }Array`] = typeEncoders.DataView;\n}\nfunction objectToTokens(obj, options = {}, refStack) {\n const typ = is(obj);\n const customTypeEncoder = options && options.typeEncoders && options.typeEncoders[typ] || typeEncoders[typ];\n if (typeof customTypeEncoder === 'function') {\n const tokens = customTypeEncoder(obj, typ, options, refStack);\n if (tokens != null) {\n return tokens;\n }\n }\n const typeEncoder = typeEncoders[typ];\n if (!typeEncoder) {\n throw new Error(`${ encodeErrPrefix } unsupported type: ${ typ }`);\n }\n return typeEncoder(obj, typ, options, refStack);\n}\nfunction sortMapEntries(entries, options) {\n if (options.mapSorter) {\n entries.sort(options.mapSorter);\n }\n}\nfunction mapSorter(e1, e2) {\n const keyToken1 = Array.isArray(e1[0]) ? e1[0][0] : e1[0];\n const keyToken2 = Array.isArray(e2[0]) ? e2[0][0] : e2[0];\n if (keyToken1.type !== keyToken2.type) {\n return keyToken1.type.compare(keyToken2.type);\n }\n const major = keyToken1.type.major;\n const tcmp = cborEncoders[major].compareTokens(keyToken1, keyToken2);\n if (tcmp === 0) {\n console.warn('WARNING: complex key types used, CBOR key sorting guarantees are gone');\n }\n return tcmp;\n}\nfunction tokensToEncoded(buf, tokens, encoders, options) {\n if (Array.isArray(tokens)) {\n for (const token of tokens) {\n tokensToEncoded(buf, token, encoders, options);\n }\n } else {\n encoders[tokens.type.major](buf, tokens, options);\n }\n}\nfunction encodeCustom(data, encoders, options) {\n const tokens = objectToTokens(data, options);\n if (!Array.isArray(tokens) && options.quickEncodeToken) {\n const quickBytes = options.quickEncodeToken(tokens);\n if (quickBytes) {\n return quickBytes;\n }\n const encoder = encoders[tokens.type.major];\n if (encoder.encodedSize) {\n const size = encoder.encodedSize(tokens, options);\n const buf = new Bl(size);\n encoder(buf, tokens, options);\n if (buf.chunks.length !== 1) {\n throw new Error(`Unexpected error: pre-calculated length for ${ tokens } was wrong`);\n }\n return asU8A(buf.chunks[0]);\n }\n }\n buf.reset();\n tokensToEncoded(buf, tokens, encoders, options);\n return buf.toBytes(true);\n}\nfunction encode(data, options) {\n options = Object.assign({}, defaultEncodeOptions, options);\n return encodeCustom(data, cborEncoders, options);\n}\nexport {\n objectToTokens,\n encode,\n encodeCustom,\n Ref\n};", "import { decodeErrPrefix } from './common.js';\nimport { Type } from './token.js';\nimport {\n jump,\n quick\n} from './jump.js';\nconst defaultDecodeOptions = {\n strict: false,\n allowIndefinite: true,\n allowUndefined: true,\n allowBigInt: true\n};\nclass Tokeniser {\n constructor(data, options = {}) {\n this.pos = 0;\n this.data = data;\n this.options = options;\n }\n done() {\n return this.pos >= this.data.length;\n }\n next() {\n const byt = this.data[this.pos];\n let token = quick[byt];\n if (token === undefined) {\n const decoder = jump[byt];\n if (!decoder) {\n throw new Error(`${ decodeErrPrefix } no decoder for major type ${ byt >>> 5 } (byte 0x${ byt.toString(16).padStart(2, '0') })`);\n }\n const minor = byt & 31;\n token = decoder(this.data, this.pos, minor, this.options);\n }\n this.pos += token.encodedLength;\n return token;\n }\n}\nconst DONE = Symbol.for('DONE');\nconst BREAK = Symbol.for('BREAK');\nfunction tokenToArray(token, tokeniser, options) {\n const arr = [];\n for (let i = 0; i < token.value; i++) {\n const value = tokensToObject(tokeniser, options);\n if (value === BREAK) {\n if (token.value === Infinity) {\n break;\n }\n throw new Error(`${ decodeErrPrefix } got unexpected break to lengthed array`);\n }\n if (value === DONE) {\n throw new Error(`${ decodeErrPrefix } found array but not enough entries (got ${ i }, expected ${ token.value })`);\n }\n arr[i] = value;\n }\n return arr;\n}\nfunction tokenToMap(token, tokeniser, options) {\n const useMaps = options.useMaps === true;\n const obj = useMaps ? undefined : {};\n const m = useMaps ? new Map() : undefined;\n for (let i = 0; i < token.value; i++) {\n const key = tokensToObject(tokeniser, options);\n if (key === BREAK) {\n if (token.value === Infinity) {\n break;\n }\n throw new Error(`${ decodeErrPrefix } got unexpected break to lengthed map`);\n }\n if (key === DONE) {\n throw new Error(`${ decodeErrPrefix } found map but not enough entries (got ${ i } [no key], expected ${ token.value })`);\n }\n if (useMaps !== true && typeof key !== 'string') {\n throw new Error(`${ decodeErrPrefix } non-string keys not supported (got ${ typeof key })`);\n }\n if (options.rejectDuplicateMapKeys === true) {\n if (useMaps && m.has(key) || !useMaps && key in obj) {\n throw new Error(`${ decodeErrPrefix } found repeat map key \"${ key }\"`);\n }\n }\n const value = tokensToObject(tokeniser, options);\n if (value === DONE) {\n throw new Error(`${ decodeErrPrefix } found map but not enough entries (got ${ i } [no value], expected ${ token.value })`);\n }\n if (useMaps) {\n m.set(key, value);\n } else {\n obj[key] = value;\n }\n }\n return useMaps ? m : obj;\n}\nfunction tokensToObject(tokeniser, options) {\n if (tokeniser.done()) {\n return DONE;\n }\n const token = tokeniser.next();\n if (token.type === Type.break) {\n return BREAK;\n }\n if (token.type.terminal) {\n return token.value;\n }\n if (token.type === Type.array) {\n return tokenToArray(token, tokeniser, options);\n }\n if (token.type === Type.map) {\n return tokenToMap(token, tokeniser, options);\n }\n if (token.type === Type.tag) {\n if (options.tags && typeof options.tags[token.value] === 'function') {\n const tagged = tokensToObject(tokeniser, options);\n return options.tags[token.value](tagged);\n }\n throw new Error(`${ decodeErrPrefix } tag not supported (${ token.value })`);\n }\n throw new Error('unsupported');\n}\nfunction decode(data, options) {\n if (!(data instanceof Uint8Array)) {\n throw new Error(`${ decodeErrPrefix } data to decode must be a Uint8Array`);\n }\n options = Object.assign({}, defaultDecodeOptions, options);\n const tokeniser = options.tokenizer || new Tokeniser(data, options);\n const decoded = tokensToObject(tokeniser, options);\n if (decoded === DONE) {\n throw new Error(`${ decodeErrPrefix } did not find any content to decode`);\n }\n if (decoded === BREAK) {\n throw new Error(`${ decodeErrPrefix } got unexpected break`);\n }\n if (!tokeniser.done()) {\n throw new Error(`${ decodeErrPrefix } too many terminals, data makes no sense`);\n }\n return decoded;\n}\nexport {\n Tokeniser,\n tokensToObject,\n decode\n};", "var encode_1 = encode;\n\nvar MSB = 0x80\n , REST = 0x7F\n , MSBALL = ~REST\n , INT = Math.pow(2, 31);\n\nfunction encode(num, out, offset) {\n out = out || [];\n offset = offset || 0;\n var oldOffset = offset;\n\n while(num >= INT) {\n out[offset++] = (num & 0xFF) | MSB;\n num /= 128;\n }\n while(num & MSBALL) {\n out[offset++] = (num & 0xFF) | MSB;\n num >>>= 7;\n }\n out[offset] = num | 0;\n \n encode.bytes = offset - oldOffset + 1;\n \n return out\n}\n\nvar decode = read;\n\nvar MSB$1 = 0x80\n , REST$1 = 0x7F;\n\nfunction read(buf, offset) {\n var res = 0\n , offset = offset || 0\n , shift = 0\n , counter = offset\n , b\n , l = buf.length;\n\n do {\n if (counter >= l) {\n read.bytes = 0;\n throw new RangeError('Could not decode varint')\n }\n b = buf[counter++];\n res += shift < 28\n ? (b & REST$1) << shift\n : (b & REST$1) * Math.pow(2, shift);\n shift += 7;\n } while (b >= MSB$1)\n\n read.bytes = counter - offset;\n\n return res\n}\n\nvar N1 = Math.pow(2, 7);\nvar N2 = Math.pow(2, 14);\nvar N3 = Math.pow(2, 21);\nvar N4 = Math.pow(2, 28);\nvar N5 = Math.pow(2, 35);\nvar N6 = Math.pow(2, 42);\nvar N7 = Math.pow(2, 49);\nvar N8 = Math.pow(2, 56);\nvar N9 = Math.pow(2, 63);\n\nvar length = function (value) {\n return (\n value < N1 ? 1\n : value < N2 ? 2\n : value < N3 ? 3\n : value < N4 ? 4\n : value < N5 ? 5\n : value < N6 ? 6\n : value < N7 ? 7\n : value < N8 ? 8\n : value < N9 ? 9\n : 10\n )\n};\n\nvar varint = {\n encode: encode_1\n , decode: decode\n , encodingLength: length\n};\n\nvar _brrp_varint = varint;\n\nexport default _brrp_varint;\n", "import varint from '../vendor/varint.js'\n\n/**\n * @param {Uint8Array} data\n * @param {number} [offset=0]\n * @returns {[number, number]}\n */\nexport const decode = (data, offset = 0) => {\n const code = varint.decode(data, offset)\n return [code, varint.decode.bytes]\n}\n\n/**\n * @param {number} int\n * @param {Uint8Array} target\n * @param {number} [offset=0]\n */\nexport const encodeTo = (int, target, offset = 0) => {\n varint.encode(int, target, offset)\n return target\n}\n\n/**\n * @param {number} int\n * @returns {number}\n */\nexport const encodingLength = (int) => {\n return varint.encodingLength(int)\n}\n", "const empty = new Uint8Array(0)\n\n/**\n * @param {Uint8Array} d\n */\nconst toHex = d => d.reduce((hex, byte) => hex + byte.toString(16).padStart(2, '0'), '')\n\n/**\n * @param {string} hex\n */\nconst fromHex = hex => {\n const hexes = hex.match(/../g)\n return hexes ? new Uint8Array(hexes.map(b => parseInt(b, 16))) : empty\n}\n\n/**\n * @param {Uint8Array} aa\n * @param {Uint8Array} bb\n */\nconst equals = (aa, bb) => {\n if (aa === bb) return true\n if (aa.byteLength !== bb.byteLength) {\n return false\n }\n\n for (let ii = 0; ii < aa.byteLength; ii++) {\n if (aa[ii] !== bb[ii]) {\n return false\n }\n }\n\n return true\n}\n\n/**\n * @param {ArrayBufferView|ArrayBuffer|Uint8Array} o\n * @returns {Uint8Array}\n */\nconst coerce = o => {\n if (o instanceof Uint8Array && o.constructor.name === 'Uint8Array') return o\n if (o instanceof ArrayBuffer) return new Uint8Array(o)\n if (ArrayBuffer.isView(o)) {\n return new Uint8Array(o.buffer, o.byteOffset, o.byteLength)\n }\n throw new Error('Unknown type, must be binary type')\n}\n\n/**\n * @param {any} o\n * @returns {o is ArrayBuffer|ArrayBufferView}\n */\nconst isBinary = o =>\n o instanceof ArrayBuffer || ArrayBuffer.isView(o)\n\n/**\n * @param {string} str\n * @returns {Uint8Array}\n */\nconst fromString = str => (new TextEncoder()).encode(str)\n\n/**\n * @param {Uint8Array} b\n * @returns {string}\n */\nconst toString = b => (new TextDecoder()).decode(b)\n\nexport { equals, coerce, isBinary, fromHex, toHex, fromString, toString, empty }\n", "import { coerce, equals as equalBytes } from '../bytes.js'\nimport * as varint from '../varint.js'\n\n/**\n * Creates a multihash digest.\n *\n * @template {number} Code\n * @param {Code} code\n * @param {Uint8Array} digest\n */\nexport const create = (code, digest) => {\n const size = digest.byteLength\n const sizeOffset = varint.encodingLength(code)\n const digestOffset = sizeOffset + varint.encodingLength(size)\n\n const bytes = new Uint8Array(digestOffset + size)\n varint.encodeTo(code, bytes, 0)\n varint.encodeTo(size, bytes, sizeOffset)\n bytes.set(digest, digestOffset)\n\n return new Digest(code, size, digest, bytes)\n}\n\n/**\n * Turns bytes representation of multihash digest into an instance.\n *\n * @param {Uint8Array} multihash\n * @returns {MultihashDigest}\n */\nexport const decode = (multihash) => {\n const bytes = coerce(multihash)\n const [code, sizeOffset] = varint.decode(bytes)\n const [size, digestOffset] = varint.decode(bytes.subarray(sizeOffset))\n const digest = bytes.subarray(sizeOffset + digestOffset)\n\n if (digest.byteLength !== size) {\n throw new Error('Incorrect length')\n }\n\n return new Digest(code, size, digest, bytes)\n}\n\n/**\n * @param {MultihashDigest} a\n * @param {unknown} b\n * @returns {b is MultihashDigest}\n */\nexport const equals = (a, b) => {\n if (a === b) {\n return true\n } else {\n const data = /** @type {{code?:unknown, size?:unknown, bytes?:unknown}} */(b)\n\n return (\n a.code === data.code &&\n a.size === data.size &&\n data.bytes instanceof Uint8Array &&\n equalBytes(a.bytes, data.bytes)\n )\n }\n}\n\n/**\n * @typedef {import('./interface.js').MultihashDigest} MultihashDigest\n */\n\n/**\n * Represents a multihash digest which carries information about the\n * hashing algorithm and an actual hash digest.\n *\n * @template {number} Code\n * @template {number} Size\n * @class\n * @implements {MultihashDigest}\n */\nexport class Digest {\n /**\n * Creates a multihash digest.\n *\n * @param {Code} code\n * @param {Size} size\n * @param {Uint8Array} digest\n * @param {Uint8Array} bytes\n */\n constructor (code, size, digest, bytes) {\n this.code = code\n this.size = size\n this.digest = digest\n this.bytes = bytes\n }\n}\n", "// base-x encoding / decoding\n// Copyright (c) 2018 base-x contributors\n// Copyright (c) 2014-2018 The Bitcoin Core developers (base58.cpp)\n// Distributed under the MIT software license, see the accompanying\n// file LICENSE or http://www.opensource.org/licenses/mit-license.php.\nfunction base (ALPHABET, name) {\n if (ALPHABET.length >= 255) { throw new TypeError('Alphabet too long') }\n var BASE_MAP = new Uint8Array(256);\n for (var j = 0; j < BASE_MAP.length; j++) {\n BASE_MAP[j] = 255;\n }\n for (var i = 0; i < ALPHABET.length; i++) {\n var x = ALPHABET.charAt(i);\n var xc = x.charCodeAt(0);\n if (BASE_MAP[xc] !== 255) { throw new TypeError(x + ' is ambiguous') }\n BASE_MAP[xc] = i;\n }\n var BASE = ALPHABET.length;\n var LEADER = ALPHABET.charAt(0);\n var FACTOR = Math.log(BASE) / Math.log(256); // log(BASE) / log(256), rounded up\n var iFACTOR = Math.log(256) / Math.log(BASE); // log(256) / log(BASE), rounded up\n function encode (source) {\n if (source instanceof Uint8Array) ; else if (ArrayBuffer.isView(source)) {\n source = new Uint8Array(source.buffer, source.byteOffset, source.byteLength);\n } else if (Array.isArray(source)) {\n source = Uint8Array.from(source);\n }\n if (!(source instanceof Uint8Array)) { throw new TypeError('Expected Uint8Array') }\n if (source.length === 0) { return '' }\n // Skip & count leading zeroes.\n var zeroes = 0;\n var length = 0;\n var pbegin = 0;\n var pend = source.length;\n while (pbegin !== pend && source[pbegin] === 0) {\n pbegin++;\n zeroes++;\n }\n // Allocate enough space in big-endian base58 representation.\n var size = ((pend - pbegin) * iFACTOR + 1) >>> 0;\n var b58 = new Uint8Array(size);\n // Process the bytes.\n while (pbegin !== pend) {\n var carry = source[pbegin];\n // Apply \"b58 = b58 * 256 + ch\".\n var i = 0;\n for (var it1 = size - 1; (carry !== 0 || i < length) && (it1 !== -1); it1--, i++) {\n carry += (256 * b58[it1]) >>> 0;\n b58[it1] = (carry % BASE) >>> 0;\n carry = (carry / BASE) >>> 0;\n }\n if (carry !== 0) { throw new Error('Non-zero carry') }\n length = i;\n pbegin++;\n }\n // Skip leading zeroes in base58 result.\n var it2 = size - length;\n while (it2 !== size && b58[it2] === 0) {\n it2++;\n }\n // Translate the result into a string.\n var str = LEADER.repeat(zeroes);\n for (; it2 < size; ++it2) { str += ALPHABET.charAt(b58[it2]); }\n return str\n }\n function decodeUnsafe (source) {\n if (typeof source !== 'string') { throw new TypeError('Expected String') }\n if (source.length === 0) { return new Uint8Array() }\n var psz = 0;\n // Skip leading spaces.\n if (source[psz] === ' ') { return }\n // Skip and count leading '1's.\n var zeroes = 0;\n var length = 0;\n while (source[psz] === LEADER) {\n zeroes++;\n psz++;\n }\n // Allocate enough space in big-endian base256 representation.\n var size = (((source.length - psz) * FACTOR) + 1) >>> 0; // log(58) / log(256), rounded up.\n var b256 = new Uint8Array(size);\n // Process the characters.\n while (source[psz]) {\n // Decode character\n var carry = BASE_MAP[source.charCodeAt(psz)];\n // Invalid character\n if (carry === 255) { return }\n var i = 0;\n for (var it3 = size - 1; (carry !== 0 || i < length) && (it3 !== -1); it3--, i++) {\n carry += (BASE * b256[it3]) >>> 0;\n b256[it3] = (carry % 256) >>> 0;\n carry = (carry / 256) >>> 0;\n }\n if (carry !== 0) { throw new Error('Non-zero carry') }\n length = i;\n psz++;\n }\n // Skip trailing spaces.\n if (source[psz] === ' ') { return }\n // Skip leading zeroes in b256.\n var it4 = size - length;\n while (it4 !== size && b256[it4] === 0) {\n it4++;\n }\n var vch = new Uint8Array(zeroes + (size - it4));\n var j = zeroes;\n while (it4 !== size) {\n vch[j++] = b256[it4++];\n }\n return vch\n }\n function decode (string) {\n var buffer = decodeUnsafe(string);\n if (buffer) { return buffer }\n throw new Error(`Non-${name} character`)\n }\n return {\n encode: encode,\n decodeUnsafe: decodeUnsafe,\n decode: decode\n }\n}\nvar src = base;\n\nvar _brrp__multiformats_scope_baseX = src;\n\nexport default _brrp__multiformats_scope_baseX;\n", "import basex from '../../vendor/base-x.js'\nimport { coerce } from '../bytes.js'\n// Linter can't see that API is used in types.\n// eslint-disable-next-line\nimport * as API from './interface.js'\n\n/**\n * Class represents both BaseEncoder and MultibaseEncoder meaning it\n * can be used to encode to multibase or base encode without multibase\n * prefix.\n *\n * @class\n * @template {string} Base\n * @template {string} Prefix\n * @implements {API.MultibaseEncoder<Prefix>}\n * @implements {API.BaseEncoder}\n */\nclass Encoder {\n /**\n * @param {Base} name\n * @param {Prefix} prefix\n * @param {(bytes:Uint8Array) => string} baseEncode\n */\n constructor (name, prefix, baseEncode) {\n this.name = name\n this.prefix = prefix\n this.baseEncode = baseEncode\n }\n\n /**\n * @param {Uint8Array} bytes\n * @returns {API.Multibase<Prefix>}\n */\n encode (bytes) {\n if (bytes instanceof Uint8Array) {\n return `${this.prefix}${this.baseEncode(bytes)}`\n } else {\n throw Error('Unknown type, must be binary type')\n }\n }\n}\n\n/**\n * @template {string} Prefix\n */\n/**\n * Class represents both BaseDecoder and MultibaseDecoder so it could be used\n * to decode multibases (with matching prefix) or just base decode strings\n * with corresponding base encoding.\n *\n * @class\n * @template {string} Base\n * @template {string} Prefix\n * @implements {API.MultibaseDecoder<Prefix>}\n * @implements {API.UnibaseDecoder<Prefix>}\n * @implements {API.BaseDecoder}\n */\nclass Decoder {\n /**\n * @param {Base} name\n * @param {Prefix} prefix\n * @param {(text:string) => Uint8Array} baseDecode\n */\n constructor (name, prefix, baseDecode) {\n this.name = name\n this.prefix = prefix\n /* c8 ignore next 3 */\n if (prefix.codePointAt(0) === undefined) {\n throw new Error('Invalid prefix character')\n }\n /** @private */\n this.prefixCodePoint = /** @type {number} */ (prefix.codePointAt(0))\n this.baseDecode = baseDecode\n }\n\n /**\n * @param {string} text\n */\n decode (text) {\n if (typeof text === 'string') {\n if (text.codePointAt(0) !== this.prefixCodePoint) {\n throw Error(`Unable to decode multibase string ${JSON.stringify(text)}, ${this.name} decoder only supports inputs prefixed with ${this.prefix}`)\n }\n return this.baseDecode(text.slice(this.prefix.length))\n } else {\n throw Error('Can only multibase decode strings')\n }\n }\n\n /**\n * @template {string} OtherPrefix\n * @param {API.UnibaseDecoder<OtherPrefix>|ComposedDecoder<OtherPrefix>} decoder\n * @returns {ComposedDecoder<Prefix|OtherPrefix>}\n */\n or (decoder) {\n return or(this, decoder)\n }\n}\n\n/**\n * @template {string} Prefix\n * @typedef {Record<Prefix, API.UnibaseDecoder<Prefix>>} Decoders\n */\n\n/**\n * @template {string} Prefix\n * @implements {API.MultibaseDecoder<Prefix>}\n * @implements {API.CombobaseDecoder<Prefix>}\n */\nclass ComposedDecoder {\n /**\n * @param {Decoders<Prefix>} decoders\n */\n constructor (decoders) {\n this.decoders = decoders\n }\n\n /**\n * @template {string} OtherPrefix\n * @param {API.UnibaseDecoder<OtherPrefix>|ComposedDecoder<OtherPrefix>} decoder\n * @returns {ComposedDecoder<Prefix|OtherPrefix>}\n */\n or (decoder) {\n return or(this, decoder)\n }\n\n /**\n * @param {string} input\n * @returns {Uint8Array}\n */\n decode (input) {\n const prefix = /** @type {Prefix} */ (input[0])\n const decoder = this.decoders[prefix]\n if (decoder) {\n return decoder.decode(input)\n } else {\n throw RangeError(`Unable to decode multibase string ${JSON.stringify(input)}, only inputs prefixed with ${Object.keys(this.decoders)} are supported`)\n }\n }\n}\n\n/**\n * @template {string} L\n * @template {string} R\n * @param {API.UnibaseDecoder<L>|API.CombobaseDecoder<L>} left\n * @param {API.UnibaseDecoder<R>|API.CombobaseDecoder<R>} right\n * @returns {ComposedDecoder<L|R>}\n */\nexport const or = (left, right) => new ComposedDecoder(/** @type {Decoders<L|R>} */({\n ...(left.decoders || { [/** @type API.UnibaseDecoder<L> */(left).prefix]: left }),\n ...(right.decoders || { [/** @type API.UnibaseDecoder<R> */(right).prefix]: right })\n}))\n\n/**\n * @class\n * @template {string} Base\n * @template {string} Prefix\n * @implements {API.MultibaseCodec<Prefix>}\n * @implements {API.MultibaseEncoder<Prefix>}\n * @implements {API.MultibaseDecoder<Prefix>}\n * @implements {API.BaseCodec}\n * @implements {API.BaseEncoder}\n * @implements {API.BaseDecoder}\n */\nexport class Codec {\n /**\n * @param {Base} name\n * @param {Prefix} prefix\n * @param {(bytes:Uint8Array) => string} baseEncode\n * @param {(text:string) => Uint8Array} baseDecode\n */\n constructor (name, prefix, baseEncode, baseDecode) {\n this.name = name\n this.prefix = prefix\n this.baseEncode = baseEncode\n this.baseDecode = baseDecode\n this.encoder = new Encoder(name, prefix, baseEncode)\n this.decoder = new Decoder(name, prefix, baseDecode)\n }\n\n /**\n * @param {Uint8Array} input\n */\n encode (input) {\n return this.encoder.encode(input)\n }\n\n /**\n * @param {string} input\n */\n decode (input) {\n return this.decoder.decode(input)\n }\n}\n\n/**\n * @template {string} Base\n * @template {string} Prefix\n * @param {object} options\n * @param {Base} options.name\n * @param {Prefix} options.prefix\n * @param {(bytes:Uint8Array) => string} options.encode\n * @param {(input:string) => Uint8Array} options.decode\n * @returns {Codec<Base, Prefix>}\n */\nexport const from = ({ name, prefix, encode, decode }) =>\n new Codec(name, prefix, encode, decode)\n\n/**\n * @template {string} Base\n * @template {string} Prefix\n * @param {object} options\n * @param {Base} options.name\n * @param {Prefix} options.prefix\n * @param {string} options.alphabet\n * @returns {Codec<Base, Prefix>}\n */\nexport const baseX = ({ prefix, name, alphabet }) => {\n const { encode, decode } = basex(alphabet, name)\n return from({\n prefix,\n name,\n encode,\n /**\n * @param {string} text\n */\n decode: text => coerce(decode(text))\n })\n}\n\n/**\n * @param {string} string\n * @param {string} alphabet\n * @param {number} bitsPerChar\n * @param {string} name\n * @returns {Uint8Array}\n */\nconst decode = (string, alphabet, bitsPerChar, name) => {\n // Build the character lookup table:\n /** @type {Record<string, number>} */\n const codes = {}\n for (let i = 0; i < alphabet.length; ++i) {\n codes[alphabet[i]] = i\n }\n\n // Count the padding bytes:\n let end = string.length\n while (string[end - 1] === '=') {\n --end\n }\n\n // Allocate the output:\n const out = new Uint8Array((end * bitsPerChar / 8) | 0)\n\n // Parse the data:\n let bits = 0 // Number of bits currently in the buffer\n let buffer = 0 // Bits waiting to be written out, MSB first\n let written = 0 // Next byte to write\n for (let i = 0; i < end; ++i) {\n // Read one character from the string:\n const value = codes[string[i]]\n if (value === undefined) {\n throw new SyntaxError(`Non-${name} character`)\n }\n\n // Append the bits to the buffer:\n buffer = (buffer << bitsPerChar) | value\n bits += bitsPerChar\n\n // Write out some bits if the buffer has a byte's worth:\n if (bits >= 8) {\n bits -= 8\n out[written++] = 0xff & (buffer >> bits)\n }\n }\n\n // Verify that we have received just enough bits:\n if (bits >= bitsPerChar || 0xff & (buffer << (8 - bits))) {\n throw new SyntaxError('Unexpected end of data')\n }\n\n return out\n}\n\n/**\n * @param {Uint8Array} data\n * @param {string} alphabet\n * @param {number} bitsPerChar\n * @returns {string}\n */\nconst encode = (data, alphabet, bitsPerChar) => {\n const pad = alphabet[alphabet.length - 1] === '='\n const mask = (1 << bitsPerChar) - 1\n let out = ''\n\n let bits = 0 // Number of bits currently in the buffer\n let buffer = 0 // Bits waiting to be written out, MSB first\n for (let i = 0; i < data.length; ++i) {\n // Slurp data into the buffer:\n buffer = (buffer << 8) | data[i]\n bits += 8\n\n // Write out as much as we can:\n while (bits > bitsPerChar) {\n bits -= bitsPerChar\n out += alphabet[mask & (buffer >> bits)]\n }\n }\n\n // Partial character:\n if (bits) {\n out += alphabet[mask & (buffer << (bitsPerChar - bits))]\n }\n\n // Add padding characters until we hit a byte boundary:\n if (pad) {\n while ((out.length * bitsPerChar) & 7) {\n out += '='\n }\n }\n\n return out\n}\n\n/**\n * RFC4648 Factory\n *\n * @template {string} Base\n * @template {string} Prefix\n * @param {object} options\n * @param {Base} options.name\n * @param {Prefix} options.prefix\n * @param {string} options.alphabet\n * @param {number} options.bitsPerChar\n */\nexport const rfc4648 = ({ name, prefix, bitsPerChar, alphabet }) => {\n return from({\n prefix,\n name,\n encode (input) {\n return encode(input, alphabet, bitsPerChar)\n },\n decode (input) {\n return decode(input, alphabet, bitsPerChar, name)\n }\n })\n}\n", "import { baseX } from './base.js'\n\nexport const base58btc = baseX({\n name: 'base58btc',\n prefix: 'z',\n alphabet: '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'\n})\n\nexport const base58flickr = baseX({\n name: 'base58flickr',\n prefix: 'Z',\n alphabet: '123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ'\n})\n", "import { rfc4648 } from './base.js'\n\nexport const base32 = rfc4648({\n prefix: 'b',\n name: 'base32',\n alphabet: 'abcdefghijklmnopqrstuvwxyz234567',\n bitsPerChar: 5\n})\n\nexport const base32upper = rfc4648({\n prefix: 'B',\n name: 'base32upper',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567',\n bitsPerChar: 5\n})\n\nexport const base32pad = rfc4648({\n prefix: 'c',\n name: 'base32pad',\n alphabet: 'abcdefghijklmnopqrstuvwxyz234567=',\n bitsPerChar: 5\n})\n\nexport const base32padupper = rfc4648({\n prefix: 'C',\n name: 'base32padupper',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=',\n bitsPerChar: 5\n})\n\nexport const base32hex = rfc4648({\n prefix: 'v',\n name: 'base32hex',\n alphabet: '0123456789abcdefghijklmnopqrstuv',\n bitsPerChar: 5\n})\n\nexport const base32hexupper = rfc4648({\n prefix: 'V',\n name: 'base32hexupper',\n alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUV',\n bitsPerChar: 5\n})\n\nexport const base32hexpad = rfc4648({\n prefix: 't',\n name: 'base32hexpad',\n alphabet: '0123456789abcdefghijklmnopqrstuv=',\n bitsPerChar: 5\n})\n\nexport const base32hexpadupper = rfc4648({\n prefix: 'T',\n name: 'base32hexpadupper',\n alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUV=',\n bitsPerChar: 5\n})\n\nexport const base32z = rfc4648({\n prefix: 'h',\n name: 'base32z',\n alphabet: 'ybndrfg8ejkmcpqxot1uwisza345h769',\n bitsPerChar: 5\n})\n", "import * as varint from './varint.js'\nimport * as Digest from './hashes/digest.js'\nimport { base58btc } from './bases/base58.js'\nimport { base32 } from './bases/base32.js'\nimport { coerce } from './bytes.js'\n// Linter can see that API is used in types.\n// eslint-disable-next-line\nimport * as API from \"./link/interface.js\"\n\n// This way TS will also expose all the types from module\nexport * from './link/interface.js'\n\n/**\n * @template {API.Link<unknown, number, number, API.Version>} T\n * @template {string} Prefix\n * @param {T} link\n * @param {API.MultibaseEncoder<Prefix>} [base]\n * @returns {API.ToString<T, Prefix>}\n */\nexport const format = (link, base) => {\n const { bytes, version } = link\n switch (version) {\n case 0:\n return toStringV0(\n bytes,\n baseCache(link),\n /** @type {API.MultibaseEncoder<\"z\">} */ (base) || base58btc.encoder\n )\n default:\n return toStringV1(\n bytes,\n baseCache(link),\n /** @type {API.MultibaseEncoder<Prefix>} */ (base || base32.encoder)\n )\n }\n}\n\n/**\n * @template {API.UnknownLink} Link\n * @param {Link} link\n * @returns {API.LinkJSON<Link>}\n */\nexport const toJSON = (link) => ({\n '/': format(link)\n})\n\n/**\n * @template {API.UnknownLink} Link\n * @param {API.LinkJSON<Link>} json\n */\nexport const fromJSON = (json) =>\n CID.parse(json['/'])\n\n/** @type {WeakMap<API.UnknownLink, Map<string, string>>} */\nconst cache = new WeakMap()\n\n/**\n * @param {API.UnknownLink} cid\n * @returns {Map<string, string>}\n */\nconst baseCache = cid => {\n const baseCache = cache.get(cid)\n if (baseCache == null) {\n const baseCache = new Map()\n cache.set(cid, baseCache)\n return baseCache\n }\n return baseCache\n}\n\n/**\n * @template {unknown} [Data=unknown]\n * @template {number} [Format=number]\n * @template {number} [Alg=number]\n * @template {API.Version} [Version=API.Version]\n * @implements {API.Link<Data, Format, Alg, Version>}\n */\n\nexport class CID {\n /**\n * @param {Version} version - Version of the CID\n * @param {Format} code - Code of the codec content is encoded in, see https://github.com/multiformats/multicodec/blob/master/table.csv\n * @param {API.MultihashDigest<Alg>} multihash - (Multi)hash of the of the content.\n * @param {Uint8Array} bytes\n *\n */\n constructor (version, code, multihash, bytes) {\n /** @readonly */\n this.code = code\n /** @readonly */\n this.version = version\n /** @readonly */\n this.multihash = multihash\n /** @readonly */\n this.bytes = bytes\n\n // flag to serializers that this is a CID and\n // should be treated specially\n /** @readonly */\n this['/'] = bytes\n }\n\n /**\n * Signalling `cid.asCID === cid` has been replaced with `cid['/'] === cid.bytes`\n * please either use `CID.asCID(cid)` or switch to new signalling mechanism\n *\n * @deprecated\n */\n get asCID () {\n return this\n }\n\n // ArrayBufferView\n get byteOffset () {\n return this.bytes.byteOffset\n }\n\n // ArrayBufferView\n get byteLength () {\n return this.bytes.byteLength\n }\n\n /**\n * @returns {CID<Data, API.DAG_PB, API.SHA_256, 0>}\n */\n toV0 () {\n switch (this.version) {\n case 0: {\n return /** @type {CID<Data, API.DAG_PB, API.SHA_256, 0>} */ (this)\n }\n case 1: {\n const { code, multihash } = this\n\n if (code !== DAG_PB_CODE) {\n throw new Error('Cannot convert a non dag-pb CID to CIDv0')\n }\n\n // sha2-256\n if (multihash.code !== SHA_256_CODE) {\n throw new Error('Cannot convert non sha2-256 multihash CID to CIDv0')\n }\n\n return /** @type {CID<Data, API.DAG_PB, API.SHA_256, 0>} */ (\n CID.createV0(\n /** @type {API.MultihashDigest<API.SHA_256>} */ (multihash)\n )\n )\n }\n default: {\n throw Error(\n `Can not convert CID version ${this.version} to version 0. This is a bug please report`\n )\n }\n }\n }\n\n /**\n * @returns {CID<Data, Format, Alg, 1>}\n */\n toV1 () {\n switch (this.version) {\n case 0: {\n const { code, digest } = this.multihash\n const multihash = Digest.create(code, digest)\n return /** @type {CID<Data, Format, Alg, 1>} */ (\n CID.createV1(this.code, multihash)\n )\n }\n case 1: {\n return /** @type {CID<Data, Format, Alg, 1>} */ (this)\n }\n default: {\n throw Error(\n `Can not convert CID version ${this.version} to version 1. This is a bug please report`\n )\n }\n }\n }\n\n /**\n * @param {unknown} other\n * @returns {other is CID<Data, Format, Alg, Version>}\n */\n equals (other) {\n return CID.equals(this, other)\n }\n\n /**\n * @template {unknown} Data\n * @template {number} Format\n * @template {number} Alg\n * @template {API.Version} Version\n * @param {API.Link<Data, Format, Alg, Version>} self\n * @param {unknown} other\n * @returns {other is CID}\n */\n static equals (self, other) {\n const unknown =\n /** @type {{code?:unknown, version?:unknown, multihash?:unknown}} */ (\n other\n )\n return (\n unknown &&\n self.code === unknown.code &&\n self.version === unknown.version &&\n Digest.equals(self.multihash, unknown.multihash)\n )\n }\n\n /**\n * @param {API.MultibaseEncoder<string>} [base]\n * @returns {string}\n */\n toString (base) {\n return format(this, base)\n }\n\n toJSON () {\n return { '/': format(this) }\n }\n\n link () {\n return this\n }\n\n get [Symbol.toStringTag] () {\n return 'CID'\n }\n\n // Legacy\n\n [Symbol.for('nodejs.util.inspect.custom')] () {\n return `CID(${this.toString()})`\n }\n\n /**\n * Takes any input `value` and returns a `CID` instance if it was\n * a `CID` otherwise returns `null`. If `value` is instanceof `CID`\n * it will return value back. If `value` is not instance of this CID\n * class, but is compatible CID it will return new instance of this\n * `CID` class. Otherwise returns null.\n *\n * This allows two different incompatible versions of CID library to\n * co-exist and interop as long as binary interface is compatible.\n *\n * @template {unknown} Data\n * @template {number} Format\n * @template {number} Alg\n * @template {API.Version} Version\n * @template {unknown} U\n * @param {API.Link<Data, Format, Alg, Version>|U} input\n * @returns {CID<Data, Format, Alg, Version>|null}\n */\n static asCID (input) {\n if (input == null) {\n return null\n }\n\n const value = /** @type {any} */ (input)\n if (value instanceof CID) {\n // If value is instance of CID then we're all set.\n return value\n } else if ((value['/'] != null && value['/'] === value.bytes) || value.asCID === value) {\n // If value isn't instance of this CID class but `this.asCID === this` or\n // `value['/'] === value.bytes` is true it is CID instance coming from a\n // different implementation (diff version or duplicate). In that case we\n // rebase it to this `CID` implementation so caller is guaranteed to get\n // instance with expected API.\n const { version, code, multihash, bytes } = value\n return new CID(\n version,\n code,\n /** @type {API.MultihashDigest<Alg>} */ (multihash),\n bytes || encodeCID(version, code, multihash.bytes)\n )\n } else if (value[cidSymbol] === true) {\n // If value is a CID from older implementation that used to be tagged via\n // symbol we still rebase it to the this `CID` implementation by\n // delegating that to a constructor.\n const { version, multihash, code } = value\n const digest =\n /** @type {API.MultihashDigest<Alg>} */\n (Digest.decode(multihash))\n return CID.create(version, code, digest)\n } else {\n // Otherwise value is not a CID (or an incompatible version of it) in\n // which case we return `null`.\n return null\n }\n }\n\n /**\n *\n * @template {unknown} Data\n * @template {number} Format\n * @template {number} Alg\n * @template {API.Version} Version\n * @param {Version} version - Version of the CID\n * @param {Format} code - Code of the codec content is encoded in, see https://github.com/multiformats/multicodec/blob/master/table.csv\n * @param {API.MultihashDigest<Alg>} digest - (Multi)hash of the of the content.\n * @returns {CID<Data, Format, Alg, Version>}\n */\n static create (version, code, digest) {\n if (typeof code !== 'number') {\n throw new Error('String codecs are no longer supported')\n }\n\n if (!(digest.bytes instanceof Uint8Array)) {\n throw new Error('Invalid digest')\n }\n\n switch (version) {\n case 0: {\n if (code !== DAG_PB_CODE) {\n throw new Error(\n `Version 0 CID must use dag-pb (code: ${DAG_PB_CODE}) block encoding`\n )\n } else {\n return new CID(version, code, digest, digest.bytes)\n }\n }\n case 1: {\n const bytes = encodeCID(version, code, digest.bytes)\n return new CID(version, code, digest, bytes)\n }\n default: {\n throw new Error('Invalid version')\n }\n }\n }\n\n /**\n * Simplified version of `create` for CIDv0.\n *\n * @template {unknown} [T=unknown]\n * @param {API.MultihashDigest<typeof SHA_256_CODE>} digest - Multihash.\n * @returns {CID<T, typeof DAG_PB_CODE, typeof SHA_256_CODE, 0>}\n */\n static createV0 (digest) {\n return CID.create(0, DAG_PB_CODE, digest)\n }\n\n /**\n * Simplified version of `create` for CIDv1.\n *\n * @template {unknown} Data\n * @template {number} Code\n * @template {number} Alg\n * @param {Code} code - Content encoding format code.\n * @param {API.MultihashDigest<Alg>} digest - Miltihash of the content.\n * @returns {CID<Data, Code, Alg, 1>}\n */\n static createV1 (code, digest) {\n return CID.create(1, code, digest)\n }\n\n /**\n * Decoded a CID from its binary representation. The byte array must contain\n * only the CID with no additional bytes.\n *\n * An error will be thrown if the bytes provided do not contain a valid\n * binary representation of a CID.\n *\n * @template {unknown} Data\n * @template {number} Code\n * @template {number} Alg\n * @template {API.Version} Ver\n * @param {API.ByteView<API.Link<Data, Code, Alg, Ver>>} bytes\n * @returns {CID<Data, Code, Alg, Ver>}\n */\n static decode (bytes) {\n const [cid, remainder] = CID.decodeFirst(bytes)\n if (remainder.length) {\n throw new Error('Incorrect length')\n }\n return cid\n }\n\n /**\n * Decoded a CID from its binary representation at the beginning of a byte\n * array.\n *\n * Returns an array with the first element containing the CID and the second\n * element containing the remainder of the original byte array. The remainder\n * will be a zero-length byte array if the provided bytes only contained a\n * binary CID representation.\n *\n * @template {unknown} T\n * @template {number} C\n * @template {number} A\n * @template {API.Version} V\n * @param {API.ByteView<API.Link<T, C, A, V>>} bytes\n * @returns {[CID<T, C, A, V>, Uint8Array]}\n */\n static decodeFirst (bytes) {\n const specs = CID.inspectBytes(bytes)\n const prefixSize = specs.size - specs.multihashSize\n const multihashBytes = coerce(\n bytes.subarray(prefixSize, prefixSize + specs.multihashSize)\n )\n if (multihashBytes.byteLength !== specs.multihashSize) {\n throw new Error('Incorrect length')\n }\n const digestBytes = multihashBytes.subarray(\n specs.multihashSize - specs.digestSize\n )\n const digest = new Digest.Digest(\n specs.multihashCode,\n specs.digestSize,\n digestBytes,\n multihashBytes\n )\n const cid =\n specs.version === 0\n ? CID.createV0(/** @type {API.MultihashDigest<API.SHA_256>} */ (digest))\n : CID.createV1(specs.codec, digest)\n return [/** @type {CID<T, C, A, V>} */(cid), bytes.subarray(specs.size)]\n }\n\n /**\n * Inspect the initial bytes of a CID to determine its properties.\n *\n * Involves decoding up to 4 varints. Typically this will require only 4 to 6\n * bytes but for larger multicodec code values and larger multihash digest\n * lengths these varints can be quite large. It is recommended that at least\n * 10 bytes be made available in the `initialBytes` argument for a complete\n * inspection.\n *\n * @template {unknown} T\n * @template {number} C\n * @template {number} A\n * @template {API.Version} V\n * @param {API.ByteView<API.Link<T, C, A, V>>} initialBytes\n * @returns {{ version:V, codec:C, multihashCode:A, digestSize:number, multihashSize:number, size:number }}\n */\n static inspectBytes (initialBytes) {\n let offset = 0\n const next = () => {\n const [i, length] = varint.decode(initialBytes.subarray(offset))\n offset += length\n return i\n }\n\n let version = /** @type {V} */ (next())\n let codec = /** @type {C} */ (DAG_PB_CODE)\n if (/** @type {number} */(version) === 18) {\n // CIDv0\n version = /** @type {V} */ (0)\n offset = 0\n } else {\n codec = /** @type {C} */ (next())\n }\n\n if (version !== 0 && version !== 1) {\n throw new RangeError(`Invalid CID version ${version}`)\n }\n\n const prefixSize = offset\n const multihashCode = /** @type {A} */ (next()) // multihash code\n const digestSize = next() // multihash length\n const size = offset + digestSize\n const multihashSize = size - prefixSize\n\n return { version, codec, multihashCode, digestSize, multihashSize, size }\n }\n\n /**\n * Takes cid in a string representation and creates an instance. If `base`\n * decoder is not provided will use a default from the configuration. It will\n * throw an error if encoding of the CID is not compatible with supplied (or\n * a default decoder).\n *\n * @template {string} Prefix\n * @template {unknown} Data\n * @template {number} Code\n * @template {number} Alg\n * @template {API.Version} Ver\n * @param {API.ToString<API.Link<Data, Code, Alg, Ver>, Prefix>} source\n * @param {API.MultibaseDecoder<Prefix>} [base]\n * @returns {CID<Data, Code, Alg, Ver>}\n */\n static parse (source, base) {\n const [prefix, bytes] = parseCIDtoBytes(source, base)\n\n const cid = CID.decode(bytes)\n\n if (cid.version === 0 && source[0] !== 'Q') {\n throw Error('Version 0 CID string must not include multibase prefix')\n }\n\n // Cache string representation to avoid computing it on `this.toString()`\n baseCache(cid).set(prefix, source)\n\n return cid\n }\n}\n\n/**\n * @template {string} Prefix\n * @template {unknown} Data\n * @template {number} Code\n * @template {number} Alg\n * @template {API.Version} Ver\n * @param {API.ToString<API.Link<Data, Code, Alg, Ver>, Prefix>} source\n * @param {API.MultibaseDecoder<Prefix>} [base]\n * @returns {[Prefix, API.ByteView<API.Link<Data, Code, Alg, Ver>>]}\n */\nconst parseCIDtoBytes = (source, base) => {\n switch (source[0]) {\n // CIDv0 is parsed differently\n case 'Q': {\n const decoder = base || base58btc\n return [\n /** @type {Prefix} */ (base58btc.prefix),\n decoder.decode(`${base58btc.prefix}${source}`)\n ]\n }\n case base58btc.prefix: {\n const decoder = base || base58btc\n return [/** @type {Prefix} */(base58btc.prefix), decoder.decode(source)]\n }\n case base32.prefix: {\n const decoder = base || base32\n return [/** @type {Prefix} */(base32.prefix), decoder.decode(source)]\n }\n default: {\n if (base == null) {\n throw Error(\n 'To parse non base32 or base58btc encoded CID multibase decoder must be provided'\n )\n }\n return [/** @type {Prefix} */(source[0]), base.decode(source)]\n }\n }\n}\n\n/**\n *\n * @param {Uint8Array} bytes\n * @param {Map<string, string>} cache\n * @param {API.MultibaseEncoder<'z'>} base\n */\nconst toStringV0 = (bytes, cache, base) => {\n const { prefix } = base\n if (prefix !== base58btc.prefix) {\n throw Error(`Cannot string encode V0 in ${base.name} encoding`)\n }\n\n const cid = cache.get(prefix)\n if (cid == null) {\n const cid = base.encode(bytes).slice(1)\n cache.set(prefix, cid)\n return cid\n } else {\n return cid\n }\n}\n\n/**\n * @template {string} Prefix\n * @param {Uint8Array} bytes\n * @param {Map<string, string>} cache\n * @param {API.MultibaseEncoder<Prefix>} base\n */\nconst toStringV1 = (bytes, cache, base) => {\n const { prefix } = base\n const cid = cache.get(prefix)\n if (cid == null) {\n const cid = base.encode(bytes)\n cache.set(prefix, cid)\n return cid\n } else {\n return cid\n }\n}\n\nconst DAG_PB_CODE = 0x70\nconst SHA_256_CODE = 0x12\n\n/**\n * @param {API.Version} version\n * @param {number} code\n * @param {Uint8Array} multihash\n * @returns {Uint8Array}\n */\nconst encodeCID = (version, code, multihash) => {\n const codeOffset = varint.encodingLength(version)\n const hashOffset = codeOffset + varint.encodingLength(code)\n const bytes = new Uint8Array(hashOffset + multihash.byteLength)\n varint.encodeTo(version, bytes, 0)\n varint.encodeTo(code, bytes, codeOffset)\n bytes.set(multihash, hashOffset)\n return bytes\n}\n\nconst cidSymbol = Symbol.for('@ipld/js-cid/CID')\n", "import * as Digest from './digest.js'\n\n/**\n * @template {string} Name\n * @template {number} Code\n * @param {object} options\n * @param {Name} options.name\n * @param {Code} options.code\n * @param {(input: Uint8Array) => Await<Uint8Array>} options.encode\n */\nexport const from = ({ name, code, encode }) => new Hasher(name, code, encode)\n\n/**\n * Hasher represents a hashing algorithm implementation that produces as\n * `MultihashDigest`.\n *\n * @template {string} Name\n * @template {number} Code\n * @class\n * @implements {MultihashHasher<Code>}\n */\nexport class Hasher {\n /**\n *\n * @param {Name} name\n * @param {Code} code\n * @param {(input: Uint8Array) => Await<Uint8Array>} encode\n */\n constructor (name, code, encode) {\n this.name = name\n this.code = code\n this.encode = encode\n }\n\n /**\n * @param {Uint8Array} input\n * @returns {Await<Digest.Digest<Code, number>>}\n */\n digest (input) {\n if (input instanceof Uint8Array) {\n const result = this.encode(input)\n return result instanceof Uint8Array\n ? Digest.create(this.code, result)\n /* c8 ignore next 1 */\n : result.then(digest => Digest.create(this.code, digest))\n } else {\n throw Error('Unknown type, must be binary type')\n /* c8 ignore next 1 */\n }\n }\n}\n\n/**\n * @template {number} Alg\n * @typedef {import('./interface.js').MultihashHasher} MultihashHasher\n */\n\n/**\n * @template T\n * @typedef {Promise<T>|T} Await\n */\n", "import { bytes as binary, CID } from './index.js'\n// Linter can see that API is used in types.\n// eslint-disable-next-line\nimport * as API from './interface.js'\n\nfunction readonly ({ enumerable = true, configurable = false } = {}) {\n return { enumerable, configurable, writable: false }\n}\n\n/**\n * @param {[string|number, string]} path\n * @param {any} value\n * @returns {Iterable<[string, CID]>}\n */\nfunction * linksWithin (path, value) {\n if (value != null && typeof value === 'object') {\n if (Array.isArray(value)) {\n for (const [index, element] of value.entries()) {\n const elementPath = [...path, index]\n const cid = CID.asCID(element)\n if (cid) {\n yield [elementPath.join('/'), cid]\n } else if (typeof element === 'object') {\n yield * links(element, elementPath)\n }\n }\n } else {\n const cid = CID.asCID(value)\n if (cid) {\n yield [path.join('/'), cid]\n } else {\n yield * links(value, path)\n }\n }\n }\n}\n\n/**\n * @template T\n * @param {T} source\n * @param {Array<string|number>} base\n * @returns {Iterable<[string, CID]>}\n */\nfunction * links (source, base) {\n if (source == null || source instanceof Uint8Array) {\n return\n }\n const cid = CID.asCID(source)\n if (cid) {\n yield [base.join('/'), cid]\n }\n for (const [key, value] of Object.entries(source)) {\n const path = /** @type {[string|number, string]} */ ([...base, key])\n yield * linksWithin(path, value)\n }\n}\n\n/**\n * @param {[string|number, string]} path\n * @param {any} value\n * @returns {Iterable<string>}\n */\nfunction * treeWithin (path, value) {\n if (Array.isArray(value)) {\n for (const [index, element] of value.entries()) {\n const elementPath = [...path, index]\n yield elementPath.join('/')\n if (typeof element === 'object' && !CID.asCID(element)) {\n yield * tree(element, elementPath)\n }\n }\n } else {\n yield * tree(value, path)\n }\n}\n\n/**\n * @template T\n * @param {T} source\n * @param {Array<string|number>} base\n * @returns {Iterable<string>}\n */\nfunction * tree (source, base) {\n if (source == null || typeof source !== 'object') {\n return\n }\n for (const [key, value] of Object.entries(source)) {\n const path = /** @type {[string|number, string]} */ ([...base, key])\n yield path.join('/')\n if (value != null && !(value instanceof Uint8Array) && typeof value === 'object' && !CID.asCID(value)) {\n yield * treeWithin(path, value)\n }\n }\n}\n\n/**\n *\n * @template T\n * @param {T} source\n * @param {string[]} path\n * @returns {API.BlockCursorView<unknown>}\n */\nfunction get (source, path) {\n let node = /** @type {Record<string, any>} */(source)\n for (const [index, key] of path.entries()) {\n node = node[key]\n if (node == null) {\n throw new Error(`Object has no property at ${path.slice(0, index + 1).map(part => `[${JSON.stringify(part)}]`).join('')}`)\n }\n const cid = CID.asCID(node)\n if (cid) {\n return { value: cid, remaining: path.slice(index + 1).join('/') }\n }\n }\n return { value: node }\n}\n\n/**\n * @template {unknown} T - Logical type of the data encoded in the block\n * @template {number} C - multicodec code corresponding to codec used to encode the block\n * @template {number} A - multicodec code corresponding to the hashing algorithm used in CID creation.\n * @template {API.Version} V - CID version\n * @implements {API.BlockView<T, C, A, V>}\n */\nclass Block {\n /**\n * @param {object} options\n * @param {CID<T, C, A, V>} options.cid\n * @param {API.ByteView<T>} options.bytes\n * @param {T} options.value\n */\n constructor ({ cid, bytes, value }) {\n if (!cid || !bytes || typeof value === 'undefined') { throw new Error('Missing required argument') }\n\n this.cid = cid\n this.bytes = bytes\n this.value = value\n this.asBlock = this\n\n // Mark all the properties immutable\n Object.defineProperties(this, {\n cid: readonly(),\n bytes: readonly(),\n value: readonly(),\n asBlock: readonly()\n })\n }\n\n links () {\n return links(this.value, [])\n }\n\n tree () {\n return tree(this.value, [])\n }\n\n /**\n *\n * @param {string} [path]\n * @returns {API.BlockCursorView<unknown>}\n */\n get (path = '/') {\n return get(this.value, path.split('/').filter(Boolean))\n }\n}\n\n/**\n * @template {unknown} T - Logical type of the data encoded in the block\n * @template {number} Code - multicodec code corresponding to codec used to encode the block\n * @template {number} Alg - multicodec code corresponding to the hashing algorithm used in CID creation.\n * @param {object} options\n * @param {T} options.value\n * @param {API.BlockEncoder<Code, T>} options.codec\n * @param {API.MultihashHasher<Alg>} options.hasher\n * @returns {Promise<API.BlockView<T, Code, Alg>>}\n */\nasync function encode ({ value, codec, hasher }) {\n if (typeof value === 'undefined') throw new Error('Missing required argument \"value\"')\n if (!codec || !hasher) throw new Error('Missing required argument: codec or hasher')\n\n const bytes = codec.encode(value)\n const hash = await hasher.digest(bytes)\n /** @type {CID<T, Code, Alg, 1>} */\n const cid = CID.create(\n 1,\n codec.code,\n hash\n )\n\n return new Block({ value, bytes, cid })\n}\n\n/**\n * @template {unknown} T - Logical type of the data encoded in the block\n * @template {number} Code - multicodec code corresponding to codec used to encode the block\n * @template {number} Alg - multicodec code corresponding to the hashing algorithm used in CID creation.\n * @param {object} options\n * @param {API.ByteView<T>} options.bytes\n * @param {API.BlockDecoder<Code, T>} options.codec\n * @param {API.MultihashHasher<Alg>} options.hasher\n * @returns {Promise<API.BlockView<T, Code, Alg>>}\n */\nasync function decode ({ bytes, codec, hasher }) {\n if (!bytes) throw new Error('Missing required argument \"bytes\"')\n if (!codec || !hasher) throw new Error('Missing required argument: codec or hasher')\n\n const value = codec.decode(bytes)\n const hash = await hasher.digest(bytes)\n /** @type {CID<T, Code, Alg, 1>} */\n const cid = CID.create(1, codec.code, hash)\n\n return new Block({ value, bytes, cid })\n}\n\n/**\n * @typedef {object} RequiredCreateOptions\n * @property {CID} options.cid\n */\n\n/**\n * @template {unknown} T - Logical type of the data encoded in the block\n * @template {number} Code - multicodec code corresponding to codec used to encode the block\n * @template {number} Alg - multicodec code corresponding to the hashing algorithm used in CID creation.\n * @template {API.Version} V - CID version\n * @param {{ cid: API.Link<T, Code, Alg, V>, value:T, codec?: API.BlockDecoder<Code, T>, bytes: API.ByteView<T> }|{cid:API.Link<T, Code, Alg, V>, bytes:API.ByteView<T>, value?:void, codec:API.BlockDecoder<Code, T>}} options\n * @returns {API.BlockView<T, Code, Alg, V>}\n */\nfunction createUnsafe ({ bytes, cid, value: maybeValue, codec }) {\n const value = maybeValue !== undefined\n ? maybeValue\n : (codec && codec.decode(bytes))\n\n if (value === undefined) throw new Error('Missing required argument, must either provide \"value\" or \"codec\"')\n\n return new Block({\n // eslint-disable-next-line object-shorthand\n cid: /** @type {CID<T, Code, Alg, V>} */ (cid),\n bytes,\n value\n })\n}\n\n/**\n * @template {unknown} T - Logical type of the data encoded in the block\n * @template {number} Code - multicodec code corresponding to codec used to encode the block\n * @template {number} Alg - multicodec code corresponding to the hashing algorithm used in CID creation.\n * @template {API.Version} V - CID version\n * @param {object} options\n * @param {API.Link<T, Code, Alg, V>} options.cid\n * @param {API.ByteView<T>} options.bytes\n * @param {API.BlockDecoder<Code, T>} options.codec\n * @param {API.MultihashHasher<Alg>} options.hasher\n * @returns {Promise<API.BlockView<T, Code, Alg, V>>}\n */\nasync function create ({ bytes, cid, hasher, codec }) {\n if (!bytes) throw new Error('Missing required argument \"bytes\"')\n if (!hasher) throw new Error('Missing required argument \"hasher\"')\n const value = codec.decode(bytes)\n const hash = await hasher.digest(bytes)\n if (!binary.equals(cid.multihash.bytes, hash.bytes)) {\n throw new Error('CID hash does not match bytes')\n }\n\n return createUnsafe({\n bytes,\n cid,\n value,\n codec\n })\n}\n\nexport { encode, decode, create, createUnsafe, Block }\n", "/* global crypto */\n\nimport { from } from './hasher.js'\n\n/**\n * @param {AlgorithmIdentifier} name\n */\nconst sha = name =>\n /**\n * @param {Uint8Array} data\n */\n async data => new Uint8Array(await crypto.subtle.digest(name, data))\n\nexport const sha256 = from({\n name: 'sha2-256',\n code: 0x12,\n encode: sha('SHA-256')\n})\n\nexport const sha512 = from({\n name: 'sha2-512',\n code: 0x13,\n encode: sha('SHA-512')\n})\n", "import { Block, encode, decode } from 'multiformats/block'\nimport { sha256 } from 'multiformats/hashes/sha2'\nimport * as cbor from '@ipld/dag-cbor'\n\n/**\n * @template T\n * @typedef {{ parents: EventLink<T>[], data: T }} EventView\n */\n\n/**\n * @template T\n * @typedef {import('multiformats').BlockView<EventView<T>>} EventBlockView\n */\n\n/**\n * @template T\n * @typedef {import('multiformats').Link<EventView<T>>} EventLink\n */\n\n/**\n * Advance the clock by adding an event.\n *\n * @template T\n * @param {import('./block').BlockFetcher} blocks Block storage.\n * @param {EventLink<T>[]} head The head of the clock.\n * @param {EventLink<T>} event The event to add.\n */\nexport async function advance (blocks, head, event) {\n const events = new EventFetcher(blocks)\n const headmap = new Map(head.map(cid => [cid.toString(), cid]))\n if (headmap.has(event.toString())) return head\n\n // does event contain the clock?\n let changed = false\n for (const cid of head) {\n if (await contains(events, event, cid)) {\n headmap.delete(cid.toString())\n headmap.set(event.toString(), event)\n changed = true\n }\n }\n if (changed) {\n return [...headmap.values()]\n }\n\n // does clock contain the event?\n for (const p of head) {\n if (await contains(events, p, event)) {\n return head\n }\n }\n\n return head.concat(event)\n}\n\n/**\n * @template T\n * @extends {Block<EventView<T>, typeof cbor.code, typeof sha256.code, 1>}\n * @implements {EventBlockView<T>}\n */\nexport class EventBlock extends Block {\n /**\n * @param {object} config\n * @param {EventLink<T>} config.cid\n * @param {Event} config.value\n * @param {Uint8Array} config.bytes\n * @param {string} config.prefix\n */\n constructor ({ cid, value, bytes, prefix }) {\n // @ts-expect-error\n super({ cid, value, bytes })\n this.prefix = prefix\n }\n\n /**\n * @template T\n * @param {T} data\n * @param {EventLink<T>[]} [parents]\n */\n static create (data, parents) {\n return encodeEventBlock({ data, parents: parents ?? [] })\n }\n}\n\n/** @template T */\nexport class EventFetcher {\n /** @param {import('./block').BlockFetcher} blocks */\n constructor (blocks) {\n /** @private */\n this._blocks = blocks\n }\n\n /**\n * @param {EventLink<T>} link\n * @returns {Promise<EventBlockView<T>>}\n */\n async get (link) {\n const block = await this._blocks.get(link)\n if (!block) throw new Error(`missing block: ${link}`)\n return decodeEventBlock(block.bytes)\n }\n}\n\n/**\n * @template T\n * @param {EventView<T>} value\n * @returns {Promise<EventBlockView<T>>}\n */\nexport async function encodeEventBlock (value) {\n // TODO: sort parents\n const { cid, bytes } = await encode({ value, codec: cbor, hasher: sha256 })\n // @ts-expect-error\n return new Block({ cid, value, bytes })\n}\n\n/**\n * @template T\n * @param {Uint8Array} bytes\n * @returns {Promise<EventBlockView<T>>}\n */\nexport async function decodeEventBlock (bytes) {\n const { cid, value } = await decode({ bytes, codec: cbor, hasher: sha256 })\n // @ts-expect-error\n return new Block({ cid, value, bytes })\n}\n\n/**\n * Returns true if event \"a\" contains event \"b\". Breadth first search.\n * @template T\n * @param {EventFetcher<T>} events\n * @param {EventLink<T>} a\n * @param {EventLink<T>} b\n */\nasync function contains (events, a, b) {\n if (a.toString() === b.toString()) return true\n const [{ value: aevent }, { value: bevent }] = await Promise.all([events.get(a), events.get(b)])\n const links = [...aevent.parents]\n while (links.length) {\n const link = links.shift()\n if (!link) break\n if (link.toString() === b.toString()) return true\n // if any of b's parents are this link, then b cannot exist in any of the\n // tree below, since that would create a cycle.\n if (bevent.parents.some(p => link.toString() === p.toString())) continue\n const { value: event } = await events.get(link)\n links.push(...event.parents)\n }\n return false\n}\n\n/**\n * @template T\n * @param {import('./block').BlockFetcher} blocks Block storage.\n * @param {EventLink<T>[]} head\n * @param {object} [options]\n * @param {(b: EventBlockView<T>) => string} [options.renderNodeLabel]\n */\nexport async function * vis (blocks, head, options = {}) {\n const renderNodeLabel = options.renderNodeLabel ?? (b => shortLink(b.cid))\n const events = new EventFetcher(blocks)\n yield 'digraph clock {'\n yield ' node [shape=point fontname=\"Courier\"]; head;'\n const hevents = await Promise.all(head.map(link => events.get(link)))\n /** @type {import('multiformats').Link<EventView<any>>[]} */\n const links = []\n const nodes = new Set()\n for (const e of hevents) {\n nodes.add(e.cid.toString())\n yield ` node [shape=oval fontname=\"Courier\"]; ${e.cid} [label=\"${renderNodeLabel(e)}\"];`\n yield ` head -> ${e.cid};`\n for (const p of e.value.parents) {\n yield ` ${e.cid} -> ${p};`\n }\n links.push(...e.value.parents)\n }\n while (links.length) {\n const link = links.shift()\n if (!link) break\n if (nodes.has(link.toString())) continue\n nodes.add(link.toString())\n const block = await events.get(link)\n yield ` node [shape=oval]; ${link} [label=\"${renderNodeLabel(block)}\" fontname=\"Courier\"];`\n for (const p of block.value.parents) {\n yield ` ${link} -> ${p};`\n }\n links.push(...block.value.parents)\n }\n yield '}'\n}\n\n/** @param {import('./link').AnyLink} l */\nconst shortLink = l => `${String(l).slice(0, 4)}..${String(l).slice(-4)}`\n", "import { Block, encode, decode } from 'multiformats/block'\nimport { sha256 } from 'multiformats/hashes/sha2'\nimport * as cbor from '@ipld/dag-cbor'\n\n/**\n * @typedef {import('./link').AnyLink} ShardEntryValueValue\n * @typedef {[ShardLink]} ShardEntryLinkValue\n * @typedef {[ShardLink, import('./link').AnyLink]} ShardEntryLinkAndValueValue\n * @typedef {[key: string, value: ShardEntryValueValue]} ShardValueEntry\n * @typedef {[key: string, value: ShardEntryLinkValue | ShardEntryLinkAndValueValue]} ShardLinkEntry\n * @typedef {[key: string, value: ShardEntryValueValue | ShardEntryLinkValue | ShardEntryLinkAndValueValue]} ShardEntry\n * @typedef {ShardEntry[]} Shard\n * @typedef {import('multiformats').Link<Shard, typeof cbor.code, typeof sha256.code, 1>} ShardLink\n * @typedef {import('multiformats').BlockView<Shard, typeof cbor.code, typeof sha256.code, 1> & { prefix: string }} ShardBlockView\n */\n\n/**\n * @extends {Block<Shard, typeof cbor.code, typeof sha256.code, 1>}\n * @implements {ShardBlockView}\n */\nexport class ShardBlock extends Block {\n /**\n * @param {object} config\n * @param {ShardLink} config.cid\n * @param {Shard} config.value\n * @param {Uint8Array} config.bytes\n * @param {string} config.prefix\n */\n constructor ({ cid, value, bytes, prefix }) {\n // @ts-expect-error\n super({ cid, value, bytes })\n this.prefix = prefix\n }\n\n static create () {\n return encodeShardBlock([])\n }\n}\n\n/**\n * @param {Shard} value\n * @param {string} [prefix]\n * @returns {Promise<ShardBlockView>}\n */\nexport async function encodeShardBlock (value, prefix) {\n const { cid, bytes } = await encode({ value, codec: cbor, hasher: sha256 })\n return new ShardBlock({ cid, value, bytes, prefix: prefix ?? '' })\n}\n\n/**\n * @param {Uint8Array} bytes\n * @param {string} [prefix]\n * @returns {Promise<ShardBlockView>}\n */\nexport async function decodeShardBlock (bytes, prefix) {\n const { cid, value } = await decode({ bytes, codec: cbor, hasher: sha256 })\n if (!Array.isArray(value)) throw new Error(`invalid shard: ${cid}`)\n return new ShardBlock({ cid, value, bytes, prefix: prefix ?? '' })\n}\n\nexport class ShardFetcher {\n /** @param {import('./block').BlockFetcher} blocks */\n constructor (blocks) {\n this._blocks = blocks\n }\n\n /**\n * @param {ShardLink} link\n * @param {string} [prefix]\n * @returns {Promise<ShardBlockView>}\n */\n async get (link, prefix = '') {\n const block = await this._blocks.get(link)\n if (!block) throw new Error(`missing block: ${link}`)\n return decodeShardBlock(block.bytes, prefix)\n }\n}\n\n/**\n * @param {Shard} target Shard to put to.\n * @param {ShardEntry} entry\n * @returns {Shard}\n */\nexport function putEntry (target, entry) {\n if (!target.length) return [entry]\n\n /** @type {Shard} */\n const shard = []\n for (const [i, [k, v]] of target.entries()) {\n if (entry[0] === k) {\n // if new value is link to shard...\n if (Array.isArray(entry[1])) {\n // and old value is link to shard\n // and old value is _also_ link to data\n // and new value does not have link to data\n // then preserve old data\n if (Array.isArray(v) && v[1] != null && entry[1][1] == null) {\n shard.push([k, [entry[1][0], v[1]]])\n } else {\n shard.push(entry)\n }\n } else {\n // shard as well as value?\n /** @type {ShardEntry} */\n const newEntry = Array.isArray(v) ? [k, [v[0], entry[1]]] : entry\n shard.push(newEntry)\n }\n for (let j = i + 1; j < target.length; j++) {\n shard.push(target[j])\n }\n return shard\n }\n if (i === 0 && entry[0] < k) {\n shard.push(entry)\n for (let j = i; j < target.length; j++) {\n shard.push(target[j])\n }\n return shard\n }\n if (i > 0 && entry[0] > target[i - 1][0] && entry[0] < k) {\n shard.push(entry)\n for (let j = i; j < target.length; j++) {\n shard.push(target[j])\n }\n return shard\n }\n shard.push([k, v])\n }\n\n shard.push(entry)\n return shard\n}\n\n/**\n * @param {import('./shard').Shard} shard\n * @param {string} skey Shard key to use as a base.\n */\nexport function findCommonPrefix (shard, skey) {\n const startidx = shard.findIndex(([k]) => skey === k)\n if (startidx === -1) throw new Error(`key not found in shard: ${skey}`)\n let i = startidx\n /** @type {string} */\n let pfx\n while (true) {\n pfx = shard[i][0].slice(0, -1)\n if (pfx.length) {\n while (true) {\n const matches = shard.filter(entry => entry[0].startsWith(pfx))\n if (matches.length > 1) return { prefix: pfx, matches }\n pfx = pfx.slice(0, -1)\n if (!pfx.length) break\n }\n }\n i++\n if (i >= shard.length) {\n i = 0\n }\n if (i === startidx) {\n return\n }\n }\n}\n", "import {\n ShardFetcher,\n ShardBlock,\n encodeShardBlock,\n decodeShardBlock,\n putEntry,\n findCommonPrefix\n} from './shard.js'\n\nexport { ShardBlock, encodeShardBlock, decodeShardBlock }\n\n/**\n * @typedef {{ additions: import('./shard').ShardBlockView[], removals: import('./shard').ShardBlockView[] }} ShardDiff\n */\n\nexport const MaxKeyLength = 64\nexport const MaxShardSize = 512 * 1024\n\n/**\n * Put a value (a CID) for the given key. If the key exists it's value is\n * overwritten.\n *\n * @param {import('./block').BlockFetcher} blocks Bucket block storage.\n * @param {import('./shard').ShardLink} root CID of the root node of the bucket.\n * @param {string} key The key of the value to put.\n * @param {import('./link').AnyLink} value The value to put.\n * @param {object} [options]\n * @param {number} [options.maxShardSize] Maximum shard size in bytes.\n * @returns {Promise<{ root: import('./shard').ShardLink } & ShardDiff>}\n */\nexport async function put (blocks, root, key, value, options = {}) {\n const shards = new ShardFetcher(blocks)\n const rshard = await shards.get(root)\n const path = await traverse(shards, rshard, key)\n const target = path[path.length - 1]\n const skey = key.slice(target.prefix.length) // key within the shard\n\n /** @type {import('./shard').ShardEntry} */\n let entry = [skey, value]\n\n /** @type {import('./shard').ShardBlockView[]} */\n const additions = []\n\n // if the key in this shard is longer than allowed, then we need to make some\n // intermediate shards.\n if (skey.length > MaxKeyLength) {\n const pfxskeys = Array.from(Array(Math.ceil(skey.length / MaxKeyLength)), (_, i) => {\n const start = i * MaxKeyLength\n return {\n prefix: target.prefix + skey.slice(0, start),\n skey: skey.slice(start, start + MaxKeyLength)\n }\n })\n\n let child = await encodeShardBlock([[pfxskeys[pfxskeys.length - 1].skey, value]], pfxskeys[pfxskeys.length - 1].prefix)\n additions.push(child)\n\n for (let i = pfxskeys.length - 2; i > 0; i--) {\n child = await encodeShardBlock([[pfxskeys[i].skey, [child.cid]]], pfxskeys[i].prefix)\n additions.push(child)\n }\n\n entry = [pfxskeys[0].skey, [child.cid]]\n }\n\n /** @type {import('./shard').Shard} */\n let shard = putEntry(target.value, entry)\n let child = await encodeShardBlock(shard, target.prefix)\n\n if (child.bytes.length > (options.maxShardSize ?? MaxShardSize)) {\n const common = findCommonPrefix(shard, entry[0])\n if (!common) throw new Error('shard limit reached')\n const { prefix, matches } = common\n const block = await encodeShardBlock(\n matches.filter(([k]) => k !== prefix).map(([k, v]) => [k.slice(prefix.length), v]),\n target.prefix + prefix\n )\n additions.push(block)\n\n /** @type {import('./shard').ShardEntryLinkValue | import('./shard').ShardEntryLinkAndValueValue} */\n let value\n const pfxmatch = matches.find(([k]) => k === prefix)\n if (pfxmatch) {\n if (Array.isArray(pfxmatch[1])) {\n // should not happen! all entries with this prefix should have been\n // placed within this shard already.\n throw new Error(`expected \"${prefix}\" to be a shard value but found a shard link`)\n }\n value = [block.cid, pfxmatch[1]]\n } else {\n value = [block.cid]\n }\n\n shard = shard.filter(e => matches.every(m => e[0] !== m[0]))\n shard = putEntry(shard, [prefix, value])\n child = await encodeShardBlock(shard, target.prefix)\n }\n\n additions.push(child)\n\n // path is root -> shard, so work backwards, propagating the new shard CID\n for (let i = path.length - 2; i >= 0; i--) {\n const parent = path[i]\n const key = child.prefix.slice(parent.prefix.length)\n const value = parent.value.map((entry) => {\n const [k, v] = entry\n if (k !== key) return entry\n if (!Array.isArray(v)) throw new Error(`\"${key}\" is not a shard link in: ${parent.cid}`)\n return /** @type {import('./shard').ShardEntry} */(v[1] == null ? [k, [child.cid]] : [k, [child.cid, v[1]]])\n })\n\n child = await encodeShardBlock(value, parent.prefix)\n additions.push(child)\n }\n\n return { root: additions[additions.length - 1].cid, additions, removals: path }\n}\n\n/**\n * Get the stored value for the given key from the bucket. If the key is not\n * found, `undefined` is returned.\n *\n * @param {import('./block').BlockFetcher} blocks Bucket block storage.\n * @param {import('./shard').ShardLink} root CID of the root node of the bucket.\n * @param {string} key The key of the value to get.\n * @returns {Promise<import('./link').AnyLink | undefined>}\n */\nexport async function get (blocks, root, key) {\n const shards = new ShardFetcher(blocks)\n const rshard = await shards.get(root)\n const path = await traverse(shards, rshard, key)\n const target = path[path.length - 1]\n const skey = key.slice(target.prefix.length) // key within the shard\n const entry = target.value.find(([k]) => k === skey)\n if (!entry) return\n return Array.isArray(entry[1]) ? entry[1][1] : entry[1]\n}\n\n/**\n * Delete the value for the given key from the bucket. If the key is not found\n * no operation occurs.\n *\n * @param {import('./block').BlockFetcher} blocks Bucket block storage.\n * @param {import('./shard').ShardLink} root CID of the root node of the bucket.\n * @param {string} key The key of the value to delete.\n * @returns {Promise<{ root: import('./shard').ShardLink } & ShardDiff>}\n */\nexport async function del (blocks, root, key) {\n const shards = new ShardFetcher(blocks)\n const rshard = await shards.get(root)\n const path = await traverse(shards, rshard, key)\n const target = path[path.length - 1]\n const skey = key.slice(target.prefix.length) // key within the shard\n\n const entryidx = target.value.findIndex(([k]) => k === skey)\n if (entryidx === -1) return { root, additions: [], removals: [] }\n\n const entry = target.value[entryidx]\n // cannot delete a shard (without data)\n if (Array.isArray(entry[1]) && entry[1][1] == null) return { root, additions: [], removals: [] }\n\n /** @type {import('./shard').ShardBlockView[]} */\n const additions = []\n /** @type {import('./shard').ShardBlockView[]} */\n const removals = [...path]\n\n let shard = [...target.value]\n\n if (Array.isArray(entry[1])) {\n // remove the value from this link+value\n shard[entryidx] = [entry[0], [entry[1][0]]]\n } else {\n shard.splice(entryidx, 1)\n // if now empty, remove from parent\n while (!shard.length) {\n const child = path[path.length - 1]\n const parent = path[path.length - 2]\n if (!parent) break\n path.pop()\n shard = parent.value.filter(e => {\n if (!Array.isArray(e[1])) return true\n return e[1][0].toString() !== child.cid.toString()\n })\n }\n }\n\n let child = await encodeShardBlock(shard, path[path.length - 1].prefix)\n additions.push(child)\n\n // path is root -> shard, so work backwards, propagating the new shard CID\n for (let i = path.length - 2; i >= 0; i--) {\n const parent = path[i]\n const key = child.prefix.slice(parent.prefix.length)\n const value = parent.value.map((entry) => {\n const [k, v] = entry\n if (k !== key) return entry\n if (!Array.isArray(v)) throw new Error(`\"${key}\" is not a shard link in: ${parent.cid}`)\n return /** @type {import('./shard').ShardEntry} */(v[1] == null ? [k, [child.cid]] : [k, [child.cid, v[1]]])\n })\n\n child = await encodeShardBlock(value, parent.prefix)\n additions.push(child)\n }\n\n return { root: additions[additions.length - 1].cid, additions, removals }\n}\n\n/**\n * List entries in the bucket.\n *\n * @param {import('./block').BlockFetcher} blocks Bucket block storage.\n * @param {import('./shard').ShardLink} root CID of the root node of the bucket.\n * @param {object} [options]\n * @param {string} [options.prefix]\n * @returns {AsyncIterableIterator<import('./shard').ShardValueEntry>}\n */\nexport async function * entries (blocks, root, options = {}) {\n const { prefix } = options\n const shards = new ShardFetcher(blocks)\n const rshard = await shards.get(root)\n\n yield * (\n /** @returns {AsyncIterableIterator<import('./shard').ShardValueEntry>} */\n async function * ents (shard) {\n for (const entry of shard.value) {\n const key = shard.prefix + entry[0]\n\n if (Array.isArray(entry[1])) {\n if (entry[1][1]) {\n if (!prefix || (prefix && key.startsWith(prefix))) {\n yield [key, entry[1][1]]\n }\n }\n\n if (prefix) {\n if (prefix.length <= key.length && !key.startsWith(prefix)) {\n continue\n }\n if (prefix.length > key.length && !prefix.startsWith(key)) {\n continue\n }\n }\n yield * ents(await shards.get(entry[1][0], key))\n } else {\n if (prefix && !key.startsWith(prefix)) {\n continue\n }\n yield [key, entry[1]]\n }\n }\n }\n )(rshard)\n}\n\n/**\n * Traverse from the passed shard block to the target shard block using the\n * passed key. All traversed shards are returned, starting with the passed\n * shard and ending with the target.\n *\n * @param {ShardFetcher} shards\n * @param {import('./shard').ShardBlockView} shard\n * @param {string} key\n * @returns {Promise<[import('./shard').ShardBlockView, ...Array<import('./shard').ShardBlockView>]>}\n */\nasync function traverse (shards, shard, key) {\n for (const [k, v] of shard.value) {\n if (key === k) return [shard]\n if (key.startsWith(k) && Array.isArray(v)) {\n const path = await traverse(shards, await shards.get(v[0], shard.prefix + k), key.slice(k.length))\n return [shard, ...path]\n }\n }\n return [shard]\n}\n", "// Linter can see that API is used in types.\n// eslint-disable-next-line\nimport * as API from \"./link/interface.js\"\nimport { CID, format, toJSON, fromJSON } from './cid.js'\n// This way TS will also expose all the types from module\nexport * from './link/interface.js'\n\nconst DAG_PB_CODE = 0x70\n// eslint-disable-next-line\nconst SHA_256_CODE = 0x12\n\n/**\n * Simplified version of `create` for CIDv0.\n *\n * @param {API.MultihashDigest<typeof SHA_256_CODE>} digest - Multihash.\n * @returns {API.LegacyLink}\n */\nexport const createLegacy = digest => CID.create(0, DAG_PB_CODE, digest)\n\n/**\n * Simplified version of `create` for CIDv1.\n *\n * @template {unknown} Data\n * @template {number} Code\n * @template {number} Alg\n * @param {Code} code - Content encoding format code.\n * @param {API.MultihashDigest<Alg>} digest - Miltihash of the content.\n * @returns {API.Link<Data, Code, Alg>}\n */\nexport const create = (code, digest) => CID.create(1, code, digest)\n\n/**\n * Type predicate returns true if value is the link.\n *\n * @template {API.Link<unknown, number, number, 0|1>} L\n * @param {unknown|L} value\n * @returns {value is L & CID}\n */\nexport const isLink = value => {\n if (value == null) {\n return false\n }\n\n const withSlash = /** @type {{'/'?: Uint8Array, bytes: Uint8Array}} */ (value)\n\n if (withSlash['/'] != null && withSlash['/'] === withSlash.bytes) {\n return true\n }\n\n const withAsCID = /** @type {{'asCID'?: unknown}} */ (value)\n\n if (withAsCID.asCID === value) {\n return true\n }\n\n return false\n}\n\n/**\n * Takes cid in a string representation and creates an instance. If `base`\n * decoder is not provided will use a default from the configuration. It will\n * throw an error if encoding of the CID is not compatible with supplied (or\n * a default decoder).\n *\n * @template {string} Prefix\n * @template {unknown} Data\n * @template {number} Code\n * @template {number} Alg\n * @template {API.Version} Ver\n * @param {API.ToString<API.Link<Data, Code, Alg, Ver>, Prefix>} source\n * @param {API.MultibaseDecoder<Prefix>} [base]\n * @returns {API.Link<Data, Code, Alg, Ver>}\n */\nexport const parse = (source, base) => CID.parse(source, base)\n\nexport { format, toJSON, fromJSON }\n\n/**\n * Decoded a CID from its binary representation. The byte array must contain\n * only the CID with no additional bytes.\n *\n * An error will be thrown if the bytes provided do not contain a valid\n * binary representation of a CID.\n *\n * @template {unknown} Data\n * @template {number} Code\n * @template {number} Alg\n * @template {API.Version} Ver\n * @param {API.ByteView<API.Link<Data, Code, Alg, Ver>>} bytes\n * @returns {API.Link<Data, Code, Alg, Ver>}\n */\nexport const decode = bytes => CID.decode(bytes)\n", "import { parse } from 'multiformats/link'\n\n/**\n * @typedef {{ cid: import('./link').AnyLink, bytes: Uint8Array }} AnyBlock\n * @typedef {{ get: (link: import('./link').AnyLink) => Promise<AnyBlock | undefined> }} BlockFetcher\n */\n\n/** @implements {BlockFetcher} */\nexport class MemoryBlockstore {\n /** @type {Map<string, Uint8Array>} */\n #blocks = new Map()\n\n /**\n * @param {Array<AnyBlock>} [blocks]\n */\n constructor (blocks) {\n if (blocks) {\n this.#blocks = new Map(blocks.map(b => [b.cid.toString(), b.bytes]))\n }\n }\n\n /**\n * @param {import('./link').AnyLink} cid\n * @returns {Promise<AnyBlock | undefined>}\n */\n async get (cid) {\n const bytes = this.#blocks.get(cid.toString())\n if (!bytes) return\n return { cid, bytes }\n }\n\n /**\n * @param {import('./link').AnyLink} cid\n * @param {Uint8Array} bytes\n */\n async put (cid, bytes) {\n this.#blocks.set(cid.toString(), bytes)\n }\n\n /**\n * @param {import('./link').AnyLink} cid\n * @param {Uint8Array} bytes\n */\n putSync (cid, bytes) {\n this.#blocks.set(cid.toString(), bytes)\n }\n\n /** @param {import('./link').AnyLink} cid */\n async delete (cid) {\n this.#blocks.delete(cid.toString())\n }\n\n /** @param {import('./link').AnyLink} cid */\n deleteSync (cid) {\n this.#blocks.delete(cid.toString())\n }\n\n * entries () {\n for (const [str, bytes] of this.#blocks) {\n yield { cid: parse(str), bytes }\n }\n }\n}\n\nexport class MultiBlockFetcher {\n /** @type {BlockFetcher[]} */\n #fetchers\n\n /** @param {BlockFetcher[]} fetchers */\n constructor (...fetchers) {\n this.#fetchers = fetchers\n }\n\n /** @param {import('./link').AnyLink} link */\n async get (link) {\n for (const f of this.#fetchers) {\n const v = await f.get(link)\n if (v) return v\n }\n }\n}\n", "import * as Clock from './clock.js'\nimport { EventFetcher, EventBlock } from './clock.js'\nimport * as Pail from './index.js'\nimport { ShardBlock } from './index.js'\nimport { MemoryBlockstore, MultiBlockFetcher } from './block.js'\n\n/**\n * @typedef {{\n * type: 'put'|'del'\n * key: string\n * value: import('./link').AnyLink\n * root: import('./shard').ShardLink\n * }} EventData\n * @typedef {{\n * root: import('./shard').ShardLink\n * head: import('./clock').EventLink<EventData>[]\n * event: import('./clock').EventBlockView<EventData>\n * } & import('./index').ShardDiff} Result\n */\n\n/**\n * Put a value (a CID) for the given key. If the key exists it's value is\n * overwritten.\n *\n * @param {import('./block').BlockFetcher} blocks Bucket block storage.\n * @param {import('./clock').EventLink<EventData>[]} head Merkle clock head.\n * @param {string} key The key of the value to put.\n * @param {import('./link').AnyLink} value The value to put.\n * @param {object} [options]\n * @returns {Promise<Result>}\n */\nexport async function put (blocks, head, key, value, options) {\n const mblocks = new MemoryBlockstore()\n blocks = new MultiBlockFetcher(mblocks, blocks)\n\n if (!head.length) {\n const shard = await ShardBlock.create()\n mblocks.putSync(shard.cid, shard.bytes)\n const result = await Pail.put(blocks, shard.cid, key, value, options)\n /** @type {EventData} */\n const data = { type: 'put', root: result.root, key, value }\n const event = await EventBlock.create(data, head)\n head = await Clock.advance(blocks, head, event.cid)\n return {\n root: result.root,\n additions: [shard, ...result.additions],\n removals: result.removals,\n head,\n event\n }\n }\n\n const events = new EventFetcher(blocks)\n const ancestor = await findCommonAncestor(events, head)\n if (!ancestor) throw new Error('failed to find common ancestor event')\n\n const aevent = await events.get(ancestor)\n let { root } = aevent.value.data\n\n const sorted = await findSortedEvents(events, head, ancestor)\n /** @type {Map<string, import('./shard').ShardBlockView>} */\n const additions = new Map()\n /** @type {Map<string, import('./shard').ShardBlockView>} */\n const removals = new Map()\n\n for (const { value: event } of sorted) {\n if (!['put', 'del'].includes(event.data.type)) {\n throw new Error(`unknown event type: ${event.data.type}`)\n }\n const result = event.data.type === 'put'\n ? await Pail.put(blocks, root, event.data.key, event.data.value)\n : await Pail.del(blocks, root, event.data.key)\n\n root = result.root\n for (const a of result.additions) {\n mblocks.putSync(a.cid, a.bytes)\n additions.set(a.cid.toString(), a)\n }\n for (const r of result.removals) {\n removals.set(r.cid.toString(), r)\n }\n }\n\n const result = await Pail.put(blocks, root, key, value, options)\n for (const a of result.additions) {\n mblocks.putSync(a.cid, a.bytes)\n additions.set(a.cid.toString(), a)\n }\n for (const r of result.removals) {\n removals.set(r.cid.toString(), r)\n }\n\n /** @type {EventData} */\n const data = { type: 'put', root: result.root, key, value }\n const event = await EventBlock.create(data, head)\n mblocks.putSync(event.cid, event.bytes)\n head = await Clock.advance(blocks, head, event.cid)\n\n // filter blocks that were added _and_ removed\n for (const k of removals.keys()) {\n if (additions.has(k)) {\n additions.delete(k)\n removals.delete(k)\n }\n }\n\n return {\n root: result.root,\n additions: [...additions.values()],\n removals: [...removals.values()],\n head,\n event\n }\n}\n\n/**\n * Delete the value for the given key from the bucket. If the key is not found\n * no operation occurs.\n *\n * @param {import('./block').BlockFetcher} blocks Bucket block storage.\n * @param {import('./clock').EventLink<EventData>[]} head Merkle clock head.\n * @param {string} key The key of the value to delete.\n * @param {object} [options]\n * @returns {Promise<Result>}\n */\nexport async function del (blocks, head, key, options) {\n throw new Error('not implemented')\n}\n\n/**\n * Determine the effective pail root given the current merkle clock head.\n *\n * Clocks with multiple head events may return blocks that were added or\n * removed while playing forward events from their common ancestor.\n *\n * @param {import('./block').BlockFetcher} blocks Bucket block storage.\n * @param {import('./clock').EventLink<EventData>[]} head Merkle clock head.\n * @returns {Promise<{ root: import('./shard').ShardLink } & import('./index').ShardDiff>}\n */\nexport async function root (blocks, head) {\n if (!head.length) throw new Error('cannot determine root of headless clock')\n\n const mblocks = new MemoryBlockstore()\n blocks = new MultiBlockFetcher(mblocks, blocks)\n\n /** @type {EventFetcher<EventData>} */\n const events = new EventFetcher(blocks)\n\n if (head.length === 1) {\n const event = await events.get(head[0])\n const { root } = event.value.data\n return { root, additions: [], removals: [] }\n }\n\n const ancestor = await findCommonAncestor(events, head)\n if (!ancestor) throw new Error('failed to find common ancestor event')\n\n const aevent = await events.get(ancestor)\n let { root } = aevent.value.data\n\n const sorted = await findSortedEvents(events, head, ancestor)\n /** @type {Map<string, import('./shard').ShardBlockView>} */\n const additions = new Map()\n /** @type {Map<string, import('./shard').ShardBlockView>} */\n const removals = new Map()\n\n for (const { value: event } of sorted) {\n if (!['put', 'del'].includes(event.data.type)) {\n throw new Error(`unknown event type: ${event.data.type}`)\n }\n const result = event.data.type === 'put'\n ? await Pail.put(blocks, root, event.data.key, event.data.value)\n : await Pail.del(blocks, root, event.data.key)\n\n root = result.root\n for (const a of result.additions) {\n mblocks.putSync(a.cid, a.bytes)\n additions.set(a.cid.toString(), a)\n }\n for (const r of result.removals) {\n removals.set(r.cid.toString(), r)\n }\n }\n\n // filter blocks that were added _and_ removed\n for (const k of removals.keys()) {\n if (additions.has(k)) {\n additions.delete(k)\n removals.delete(k)\n }\n }\n\n return {\n root,\n additions: [...additions.values()],\n removals: [...removals.values()]\n }\n}\n\n/**\n * @param {import('./block').BlockFetcher} blocks Bucket block storage.\n * @param {import('./clock').EventLink<EventData>[]} head Merkle clock head.\n * @param {string} key The key of the value to retrieve.\n */\nexport async function get (blocks, head, key) {\n if (!head.length) return\n const result = await root(blocks, head)\n if (result.additions.length) {\n blocks = new MultiBlockFetcher(new MemoryBlockstore(result.additions), blocks)\n }\n return Pail.get(blocks, result.root, key)\n}\n\n/**\n * @param {import('./block').BlockFetcher} blocks Bucket block storage.\n * @param {import('./clock').EventLink<EventData>[]} head Merkle clock head.\n * @param {object} [options]\n * @param {string} [options.prefix]\n */\nexport async function * entries (blocks, head, options) {\n if (!head.length) return\n const result = await root(blocks, head)\n if (result.additions.length) {\n blocks = new MultiBlockFetcher(new MemoryBlockstore(result.additions), blocks)\n }\n yield * Pail.entries(blocks, result.root, options)\n}\n\n/**\n * Find the common ancestor event of the passed children. A common ancestor is\n * the first single event in the DAG that _all_ paths from children lead to.\n *\n * @param {import('./clock').EventFetcher<EventData>} events\n * @param {import('./clock').EventLink<EventData>[]} children\n */\nasync function findCommonAncestor (events, children) {\n if (!children.length) return\n const candidates = children.map(c => [c])\n while (true) {\n let changed = false\n for (const c of candidates) {\n const candidate = await findAncestorCandidate(events, c[c.length - 1])\n if (!candidate) continue\n changed = true\n c.push(candidate)\n const ancestor = findCommonString(candidates)\n if (ancestor) return ancestor\n }\n if (!changed) return\n }\n}\n\n/**\n * @param {import('./clock').EventFetcher<EventData>} events\n * @param {import('./clock').EventLink<EventData>} root\n */\nasync function findAncestorCandidate (events, root) {\n const { value: event } = await events.get(root)\n if (!event.parents.length) return root\n return event.parents.length === 1\n ? event.parents[0]\n : findCommonAncestor(events, event.parents)\n}\n\n/**\n * @template {{ toString: () => string }} T\n * @param {Array<T[]>} arrays\n */\nfunction findCommonString (arrays) {\n arrays = arrays.map(a => [...a])\n for (const arr of arrays) {\n for (const item of arr) {\n let matched = true\n for (const other of arrays) {\n if (arr === other) continue\n matched = other.some(i => String(i) === String(item))\n if (!matched) break\n }\n if (matched) return item\n }\n }\n}\n\n/**\n * Find and sort events between the head(s) and the tail.\n * @param {import('./clock').EventFetcher<EventData>} events\n * @param {import('./clock').EventLink<EventData>[]} head\n * @param {import('./clock').EventLink<EventData>} tail\n */\nasync function findSortedEvents (events, head, tail) {\n // get weighted events - heavier events happened first\n /** @type {Map<string, { event: import('./clock').EventBlockView<EventData>, weight: number }>} */\n const weights = new Map()\n const all = await Promise.all(head.map(h => findEvents(events, h, tail)))\n for (const arr of all) {\n for (const { event, depth } of arr) {\n const info = weights.get(event.cid.toString())\n if (info) {\n info.weight += depth\n } else {\n weights.set(event.cid.toString(), { event, weight: depth })\n }\n }\n }\n\n // group events into buckets by weight\n /** @type {Map<number, import('./clock').EventBlockView<EventData>[]>} */\n const buckets = new Map()\n for (const { event, weight } of weights.values()) {\n const bucket = buckets.get(weight)\n if (bucket) {\n bucket.push(event)\n } else {\n buckets.set(weight, [event])\n }\n }\n\n // sort by weight, and by CID within weight\n return Array.from(buckets)\n .sort((a, b) => b[0] - a[0])\n .flatMap(([, es]) => es.sort((a, b) => String(a.cid) < String(b.cid) ? -1 : 1))\n}\n\n/**\n * @param {import('./clock').EventFetcher<EventData>} events\n * @param {import('./clock').EventLink<EventData>} start\n * @param {import('./clock').EventLink<EventData>} end\n * @returns {Promise<Array<{ event: import('./clock').EventBlockView<EventData>, depth: number }>>}\n */\nasync function findEvents (events, start, end, depth = 0) {\n const event = await events.get(start)\n const acc = [{ event, depth }]\n const { parents } = event.value\n if (parents.length === 1 && String(parents[0]) === String(end)) return acc\n const rest = await Promise.all(parents.map(p => findEvents(events, p, end, depth + 1)))\n return acc.concat(...rest)\n}\n", "import { Link } from 'multiformats'\nimport { create, encode, decode } from 'multiformats/block'\nimport { sha256 as hasher } from 'multiformats/hashes/sha2'\nimport * as codec from '@ipld/dag-cbor'\nimport { put, get, EventData } from '@alanshaw/pail/crdt'\nimport { EventFetcher } from '@alanshaw/pail/clock'\n\nimport { TransactionBlockstore as Blockstore, Transaction } from './transaction'\nimport { DocUpdate, ClockHead, BlockFetcher, AnyLink, DocValue, BulkResult } from './types'\n\nexport function makeGetBlock(blocks: BlockFetcher) {\n return async (address: Link) => {\n const block = await blocks.get(address)\n if (!block) throw new Error(`Missing block ${address.toString()}`)\n const { cid, bytes } = block\n return create({ cid, bytes, hasher, codec })\n }\n}\n\nexport async function applyBulkUpdateToCrdt(\n tblocks: Transaction,\n head: ClockHead,\n updates: DocUpdate[],\n options?: object\n): Promise<BulkResult> {\n for (const update of updates) {\n const link = await makeLinkForDoc(tblocks, update)\n const result = await put(tblocks, head, update.key, link, options)\n for (const { cid, bytes } of [...result.additions, ...result.removals, result.event]) {\n tblocks.putSync(cid, bytes)\n }\n head = result.head\n }\n return { head }\n}\n\nasync function makeLinkForDoc(blocks: Transaction, update: DocUpdate): Promise<AnyLink> {\n let value: DocValue\n if (update.del) {\n value = { del: true }\n } else {\n value = { doc: update.value }\n }\n const block = await encode({ value, hasher, codec })\n blocks.putSync(block.cid, block.bytes)\n return block.cid\n}\n\nexport async function getValueFromCrdt(blocks: Blockstore, head: ClockHead, key: string): Promise<DocValue> {\n const link = await get(blocks, head, key)\n if (!link) throw new Error(`Missing key ${key}`)\n return await getValueFromLink(blocks, link)\n}\n\nexport async function getValueFromLink(blocks: Blockstore, link: AnyLink): Promise<DocValue> {\n const block = await blocks.get(link)\n if (!block) throw new Error(`Missing block ${link.toString()}`)\n const { value } = (await decode({ bytes: block.bytes, hasher, codec })) as { value: DocValue }\n return value\n}\n\nexport async function clockChangesSince(\n blocks: Blockstore,\n _head: ClockHead,\n _since: ClockHead\n): Promise<{ result: DocUpdate[] }> {\n const eventsFetcher = new EventFetcher<EventData>(blocks)\n const updates = await gatherUpdates(blocks, eventsFetcher, _head, _since)\n return { result: updates.reverse() }\n}\n\nasync function gatherUpdates(blocks: Blockstore, eventsFetcher: EventFetcher<EventData>, head: ClockHead, since: ClockHead, updates: DocUpdate[] = []): Promise<DocUpdate[]> {\n for (const link of since) {\n if (head.includes(link)) {\n throw new Error('found since in head, this is good, remove this error ' + updates.length)\n return updates\n }\n }\n for (const link of head) {\n const { value: event } = await eventsFetcher.get(link)\n const { key, value } = event.data\n const docValue = await getValueFromLink(blocks, value)\n updates.push({ key, value: docValue.doc, del: docValue.del })\n if (event.parents) {\n updates = await gatherUpdates(blocks, eventsFetcher, event.parents, since, updates)\n }\n }\n return updates\n}\n"],
5
- "mappings": "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",
6
- "names": ["buf", "decode", "code", "code", "decode", "equals", "name", "encode", "length", "i", "j", "decode", "buffer", "name", "encode", "decode", "buffer", "base", "baseCache", "code", "equals", "base", "decode", "length", "cache", "cid", "from", "name", "code", "encode", "base", "encode", "decode", "create", "name", "from", "decode", "encode", "name", "isBuffer", "buf", "toString", "fromString", "length", "isBuffer", "length", "buf", "buf", "encodedSize", "buf", "encodedSize", "compareTokens", "length", "buf", "fromString", "encodedSize", "compareTokens", "toToken", "length", "toString", "toToken", "length", "buf", "encodedSize", "toToken", "length", "buf", "encodedSize", "buf", "encodedSize", "buf", "encodedSize", "ui8a", "entries", "length", "buf", "encode", "decode", "encode", "decode", "encode_1", "encode", "MSB", "REST", "MSBALL", "INT", "decode", "read", "MSB$1", "REST$1", "buf", "N1", "N2", "N3", "N4", "N5", "N6", "N7", "N8", "N9", "length", "varint", "_brrp_varint", "varint_default", "decode", "code", "varint_default", "encodeTo", "encodingLength", "empty", "equals", "coerce", "create", "code", "encodingLength", "encodeTo", "Digest", "decode", "coerce", "equals", "base", "name", "encode", "length", "i", "j", "decode", "buffer", "src", "_brrp__multiformats_scope_baseX", "base_x_default", "Encoder", "name", "Decoder", "or", "ComposedDecoder", "Codec", "from", "encode", "decode", "baseX", "base_x_default", "coerce", "buffer", "rfc4648", "base58btc", "baseX", "base58flickr", "base32", "rfc4648", "base32upper", "base32pad", "base32padupper", "base32hex", "base32hexupper", "base32hexpad", "base32hexpadupper", "base32z", "format", "base", "toStringV0", "baseCache", "base58btc", "toStringV1", "base32", "cache", "baseCache", "CID", "code", "DAG_PB_CODE", "SHA_256_CODE", "create", "equals", "base", "format", "encodeCID", "cidSymbol", "decode", "coerce", "Digest", "length", "parseCIDtoBytes", "base58btc", "base32", "toStringV0", "cid", "toStringV1", "encodingLength", "encodeTo", "from", "name", "code", "encode", "Hasher", "create", "readonly", "linksWithin", "CID", "links", "base", "treeWithin", "tree", "get", "Block", "encode", "decode", "sha", "name", "sha256", "from", "sha512", "Block", "encode", "sha256", "decode", "links", "Block", "encode", "sha256", "decode", "root", "child", "value", "key", "entry", "get", "base", "CID", "put", "result", "data", "event", "root", "root", "get", "root", "create", "put", "encode", "get", "decode"]
7
- }