{"version":3,"sources":["jsdelivr-header.js","/npm/multihashes@4.0.3/src/index.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,ACHA,aAEA,MAAM,UAAY,QAAQ,aACpB,OAAS,QAAQ,WACjB,MAAE,OAAU,QAAQ,gBAClB,SAAU,oBAAuB,QAAQ,0BACzC,WAAY,sBAAyB,QAAQ,4BAC7C,OAAQ,kBAAqB,QAAQ,sBAEvC,MAAoD,CAAG,EAG7D,IAAK,MAAM,KAAO,MAAO,CACvB,MAAM,EAA8B,EACpC,MAAM,MAAM,IAAS,CACvB,CASA,SAAS,YAAa,GACpB,KAAM,aAAgB,YACpB,MAAM,IAAI,MAAM,+BAGlB,OAAO,mBAAmB,EAAM,SAClC,CAQA,SAAS,cAAe,GACtB,OAAO,qBAAqB,EAAM,SACpC,CAQA,SAAS,YAAa,GACpB,KAAM,aAAgB,YACpB,MAAM,IAAI,MAAM,+BAGlB,OAAO,mBAAmB,UAAU,OAAO,YAAa,IAAO,MAAM,EACvE,CAQA,SAAS,cAAe,GACtB,MAAM,EAAU,aAAgB,WAC5B,mBAAmB,GACnB,EAEJ,OAAO,UAAU,OAAO,IAAM,EAChC,CAQA,SAAS,OAAQ,GACf,KAAM,aAAiB,YACrB,MAAM,IAAI,MAAM,kCAGlB,GAAI,EAAM,OAAS,EACjB,MAAM,IAAI,MAAM,2CAGlB,MAAM,EAA+B,OAAO,OAAO,GACnD,IAAK,YAAY,GACf,MAAM,IAAI,MAAM,sCAAsC,EAAK,SAAS,OAEtE,EAAQ,EAAM,MAAM,OAAO,OAAO,OAElC,MAAM,EAAM,OAAO,OAAO,GAC1B,GAAI,EAAM,EACR,MAAM,IAAI,MAAM,6BAA6B,KAI/C,IAFA,EAAQ,EAAM,MAAM,OAAO,OAAO,QAExB,SAAW,EACnB,MAAM,IAAI,MAAM,oCAAoC,mBAAmB,EAAO,aAGhF,MAAO,CACL,OACA,KAAM,MAAM,GACZ,OAAQ,EACR,OAAQ,EAEZ,CAYA,SAAS,OAAQ,EAAQ,EAAM,GAC7B,IAAK,QAAmB,IAAT,EACb,MAAM,IAAI,MAAM,6DAIlB,MAAM,EAAS,WAAW,GAE1B,KAAM,aAAkB,YACtB,MAAM,IAAI,MAAM,iCAOlB,GAJc,MAAV,IACF,EAAS,EAAO,QAGd,GAAU,EAAO,SAAW,EAC9B,MAAM,IAAI,MAAM,sDAGlB,MAAM,EAAO,OAAO,OAAO,GACrB,EAAM,OAAO,OAAO,GAC1B,OAAO,iBAAiB,CAAC,EAAM,EAAK,GAAS,EAAK,OAAS,EAAI,OAAS,EAAO,OACjF,CASA,SAAS,WAAY,GACnB,IAAI,EAAO,EAEX,GAAoB,iBAAT,EAAmB,CAC5B,QAAoB,IAAhB,MAAM,GACR,MAAM,IAAI,MAAM,qCAAqC,KAEvD,EAAO,MAAM,EACf,CAEA,GAAoB,iBAAT,EACT,MAAM,IAAI,MAAM,+CAA+C,KAIjE,QAAoB,IAAhB,MAAM,KAAwB,UAAU,GAC1C,MAAM,IAAI,MAAM,+BAA+B,KAGjD,OAAO,CACT,CAQA,SAAS,UAAW,GAClB,OAAO,EAAO,GAAK,EAAO,EAC5B,CAQA,SAAS,YAAa,GACpB,QAAI,UAAU,MAIV,MAAM,EAKZ,CASA,SAAS,SAAU,GACjB,OAAO,EACT,CASA,SAAS,OAAQ,GAGf,OAFA,SAAS,GAEF,EAAU,SAAS,EAAG,EAC/B,CA/MA,OAAO,OAAO,OAiNd,OAAO,QAAU,CACf,YACA,YACA,wBACA,4BACA,wBACA,4BACA,cACA,cACA,sBACA,oBACA,kBACA,cACA","file":"/npm/multihashes@4.0.3/src/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.37.0.\n * Original file: /npm/multihashes@4.0.3/src/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","/**\n * Multihash implementation in JavaScript.\n */\n'use strict'\n\nconst multibase = require('multibase')\nconst varint = require('varint')\nconst { names } = require('./constants')\nconst { toString: uint8ArrayToString } = require('uint8arrays/to-string')\nconst { fromString: uint8ArrayFromString } = require('uint8arrays/from-string')\nconst { concat: uint8ArrayConcat } = require('uint8arrays/concat')\n\nconst codes = /** @type {import('./types').CodeNameMap} */({})\n\n// eslint-disable-next-line guard-for-in\nfor (const key in names) {\n  const name = /** @type {HashName} */(key)\n  codes[names[name]] = name\n}\nObject.freeze(codes)\n\n/**\n * Convert the given multihash to a hex encoded string.\n *\n * @param {Uint8Array} hash\n * @returns {string}\n */\nfunction toHexString (hash) {\n  if (!(hash instanceof Uint8Array)) {\n    throw new Error('must be passed a Uint8Array')\n  }\n\n  return uint8ArrayToString(hash, 'base16')\n}\n\n/**\n * Convert the given hex encoded string to a multihash.\n *\n * @param {string} hash\n * @returns {Uint8Array}\n */\nfunction fromHexString (hash) {\n  return uint8ArrayFromString(hash, 'base16')\n}\n\n/**\n * Convert the given multihash to a base58 encoded string.\n *\n * @param {Uint8Array} hash\n * @returns {string}\n */\nfunction toB58String (hash) {\n  if (!(hash instanceof Uint8Array)) {\n    throw new Error('must be passed a Uint8Array')\n  }\n\n  return uint8ArrayToString(multibase.encode('base58btc', hash)).slice(1)\n}\n\n/**\n * Convert the given base58 encoded string to a multihash.\n *\n * @param {string|Uint8Array} hash\n * @returns {Uint8Array}\n */\nfunction fromB58String (hash) {\n  const encoded = hash instanceof Uint8Array\n    ? uint8ArrayToString(hash)\n    : hash\n\n  return multibase.decode('z' + encoded)\n}\n\n/**\n * Decode a hash from the given multihash.\n *\n * @param {Uint8Array} bytes\n * @returns {{code: HashCode, name: HashName, length: number, digest: Uint8Array}} result\n */\nfunction decode (bytes) {\n  if (!(bytes instanceof Uint8Array)) {\n    throw new Error('multihash must be a Uint8Array')\n  }\n\n  if (bytes.length < 2) {\n    throw new Error('multihash too short. must be > 2 bytes.')\n  }\n\n  const code = /** @type {HashCode} */(varint.decode(bytes))\n  if (!isValidCode(code)) {\n    throw new Error(`multihash unknown function code: 0x${code.toString(16)}`)\n  }\n  bytes = bytes.slice(varint.decode.bytes)\n\n  const len = varint.decode(bytes)\n  if (len < 0) {\n    throw new Error(`multihash invalid length: ${len}`)\n  }\n  bytes = bytes.slice(varint.decode.bytes)\n\n  if (bytes.length !== len) {\n    throw new Error(`multihash length inconsistent: 0x${uint8ArrayToString(bytes, 'base16')}`)\n  }\n\n  return {\n    code,\n    name: codes[code],\n    length: len,\n    digest: bytes\n  }\n}\n\n/**\n * Encode a hash digest along with the specified function code.\n *\n * > **Note:** the length is derived from the length of the digest itself.\n *\n * @param {Uint8Array} digest\n * @param {HashName | HashCode} code\n * @param {number} [length]\n * @returns {Uint8Array}\n */\nfunction encode (digest, code, length) {\n  if (!digest || code === undefined) {\n    throw new Error('multihash encode requires at least two args: digest, code')\n  }\n\n  // ensure it's a hashfunction code.\n  const hashfn = coerceCode(code)\n\n  if (!(digest instanceof Uint8Array)) {\n    throw new Error('digest should be a Uint8Array')\n  }\n\n  if (length == null) {\n    length = digest.length\n  }\n\n  if (length && digest.length !== length) {\n    throw new Error('digest length should be equal to specified length.')\n  }\n\n  const hash = varint.encode(hashfn)\n  const len = varint.encode(length)\n  return uint8ArrayConcat([hash, len, digest], hash.length + len.length + digest.length)\n}\n\n/**\n * Converts a hash function name into the matching code.\n * If passed a number it will return the number if it's a valid code.\n *\n * @param {HashName | number} name\n * @returns {number}\n */\nfunction coerceCode (name) {\n  let code = name\n\n  if (typeof name === 'string') {\n    if (names[name] === undefined) {\n      throw new Error(`Unrecognized hash function named: ${name}`)\n    }\n    code = names[name]\n  }\n\n  if (typeof code !== 'number') {\n    throw new Error(`Hash function code should be a number. Got: ${code}`)\n  }\n\n  // @ts-ignore\n  if (codes[code] === undefined && !isAppCode(code)) {\n    throw new Error(`Unrecognized function code: ${code}`)\n  }\n\n  return code\n}\n\n/**\n * Checks if a code is part of the app range\n *\n * @param {number} code\n * @returns {boolean}\n */\nfunction isAppCode (code) {\n  return code > 0 && code < 0x10\n}\n\n/**\n * Checks whether a multihash code is valid.\n *\n * @param {HashCode} code\n * @returns {boolean}\n */\nfunction isValidCode (code) {\n  if (isAppCode(code)) {\n    return true\n  }\n\n  if (codes[code]) {\n    return true\n  }\n\n  return false\n}\n\n/**\n * Check if the given buffer is a valid multihash. Throws an error if it is not valid.\n *\n * @param {Uint8Array} multihash\n * @returns {void}\n * @throws {Error}\n */\nfunction validate (multihash) {\n  decode(multihash) // throws if bad.\n}\n\n/**\n * Returns a prefix from a valid multihash. Throws an error if it is not valid.\n *\n * @param {Uint8Array} multihash\n * @returns {Uint8Array}\n * @throws {Error}\n */\nfunction prefix (multihash) {\n  validate(multihash)\n\n  return multihash.subarray(0, 2)\n}\n\nmodule.exports = {\n  names,\n  codes,\n  toHexString,\n  fromHexString,\n  toB58String,\n  fromB58String,\n  decode,\n  encode,\n  coerceCode,\n  isAppCode,\n  validate,\n  prefix,\n  isValidCode\n}\n\n/**\n * @typedef { import(\"./constants\").HashCode } HashCode\n * @typedef { import(\"./constants\").HashName } HashName\n */\n"]}