{"version":3,"file":"basex.cjs","names":["toUint8Array"],"sources":["../../../src/common/data/basex.ts"],"sourcesContent":["// Originial code at https://github.com/cryptocoinjs/base-x/blob/master/ts_src/index.ts\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.\n\n// \"Fast base encoding / decoding of any given alphabet using bitcoin style leading zero compression.\"\n// \"WARNING: This module is NOT RFC3548 compliant, it cannot be used for base16 (hex), base32, or base64 encoding in a standards compliant manner.\"\n\nimport type { BinInput } from './bin-types'\nimport { toUint8Array } from './bin'\n\nconst alphabets = {\n  '2': '01',\n  '8': '01234567',\n  '11': '0123456789a',\n  '16': '0123456789abcdef',\n  '32': '0123456789abcdefghjkmnpqrtuvwxyz', // Agnoster, because least mix up and good sorting\n  '32-crockford': '0123456789ABCDEFGHJKMNPQRSTVWXYZ', // Crockford\n  '32-geohash': '0123456789bcdefghjkmnpqrstuvwxyz', // https://en.wikipedia.org/wiki/Base32#Geohash\n  '32-agnoster': '0123456789abcdefghjkmnpqrtuvwxyz', // https://github.com/agnoster/base32-js/blob/master/lib/base32.js#L6 without i(1), l(1), o(0), s(5); keeps sort order\n  '32-rfc': 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567', // https://datatracker.ietf.org/doc/html/rfc4648#section-6\n  '32-hex': '0123456789ABCDEFGHIJKLMNOPQRSTUV', // https://datatracker.ietf.org/doc/html/rfc4648#section-7\n  '32-zbase': 'ybndrfg8ejkmcpqxot1uwisza345h769', //  https://en.wikipedia.org/wiki/Base32#z-base-32\n  '36': '0123456789abcdefghijklmnopqrstuvwxyz',\n  '58': '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz',\n  '62': '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz', // Correct sort order\n  '64': 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',\n  '64-url': 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_', // https://datatracker.ietf.org/doc/html/rfc4648#section-5\n  '66': 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_.!~',\n  '85': '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!#$%&()*+-;<=>?@^_`{|}~', // https://datatracker.ietf.org/doc/html/rfc1924#section-4.2\n}\n\nexport type BaseXEncodeFunction = (source: BinInput, padToLength?: number) => string\nexport type BaseXDecodeFunction = (source: string, padToLength?: number) => Uint8Array\n\nexport function _useBase(alphaOrBase: string | number): {\n  encode: BaseXEncodeFunction\n  decode: BaseXDecodeFunction\n} {\n  let ALPHABET: string | undefined = (alphabets as any)[String(alphaOrBase)]\n\n  if (!ALPHABET) {\n    if (typeof alphaOrBase === 'string')\n      ALPHABET = alphaOrBase\n    else\n      throw new Error(`Unknown base ${alphaOrBase}`)\n  }\n\n  if (ALPHABET.length >= 255)\n    throw new TypeError('Alphabet too long')\n\n  const BASE_MAP = new Uint8Array(256)\n  for (let j = 0; j < BASE_MAP.length; j++)\n    BASE_MAP[j] = 255\n\n  for (let i = 0; i < ALPHABET.length; i++) {\n    const x = ALPHABET.charAt(i)\n    const xc = x.charCodeAt(0)\n\n    if (BASE_MAP[xc] !== 255)\n      throw new TypeError(`${x} is ambiguous`)\n    BASE_MAP[xc] = i\n  }\n\n  const BASE = ALPHABET.length\n  const LEADER = ALPHABET.charAt(0)\n  const FACTOR = Math.log(BASE) / Math.log(256) // log(BASE) / log(256), rounded up\n  const iFACTOR = Math.log(256) / Math.log(BASE) // log(256) / log(BASE), rounded up\n\n  function encode(source: BinInput, padToLength = -1): string {\n    const data = toUint8Array(source)\n    if (data.byteLength === 0)\n      return ''\n\n    // Skip & count leading zeroes.\n    let length = 0\n    let pbegin = 0\n    const pend = data.byteLength\n\n    while (pbegin !== pend && data[pbegin] === 0) pbegin++\n\n    // Allocate enough space in big-endian base58 representation.\n    const size = ((pend - pbegin) * iFACTOR + 1) >>> 0\n    const dataEncoded = new Uint8Array(size)\n\n    // Process the bytes.\n    while (pbegin !== pend) {\n      let carry = data[pbegin]\n\n      // Apply \"dataEncoded = dataEncoded * 256 + ch\".\n      let i = 0\n      for (\n        let it1 = size - 1;\n        (carry !== 0 || i < length) && it1 !== -1;\n        it1--, i++\n      ) {\n        carry += (256 * dataEncoded[it1]) >>> 0\n        dataEncoded[it1] = carry % BASE >>> 0\n        carry = (carry / BASE) >>> 0\n      }\n\n      if (carry !== 0) {\n        // log.warn('Non-zero carry', data, padToLength, i, size)\n        throw new Error('Non-zero carry')\n      }\n\n      length = i\n      pbegin++\n    }\n\n    let it2 = size - length\n\n    // Skip leading zeroes\n    while (it2 !== size && dataEncoded[it2] === 0) it2++\n\n    // Translate the result into a string.\n    let str = ''\n    for (; it2 < size; ++it2) str += ALPHABET!.charAt(dataEncoded[it2])\n\n    if (padToLength > 0) {\n      // const pad = Math.ceil(source.length * iFACTOR)\n      return str.padStart(padToLength, LEADER)\n    }\n    return str\n  }\n\n  function decode(source: string, padToLength = -1): Uint8Array {\n    if (typeof source !== 'string')\n      throw new TypeError('Expected String')\n    if (source.length === 0)\n      return new Uint8Array()\n\n    // Normalize\n    source = source.replace(/\\s+/g, '')\n\n    let psz = 0\n    let length = 0\n\n    while (source[psz] === LEADER) psz++\n\n    // Allocate enough space in big-endian base256 representation.\n    const size = ((source.length - psz) * FACTOR + 1) >>> 0 // log(58) / log(256), rounded up.\n    const dataDecoded = new Uint8Array(size)\n\n    // Process the characters.\n    while (source[psz]) {\n      let carry = BASE_MAP[source.charCodeAt(psz)]\n\n      // Invalid character\n      if (carry === 255)\n        throw new Error(`Unsupported character \"${source[psz]}\"`)\n\n      let i = 0\n      for (\n        let it3 = size - 1;\n        (carry !== 0 || i < length) && it3 !== -1;\n        it3--, i++\n      ) {\n        carry += (BASE * dataDecoded[it3]) >>> 0\n        dataDecoded[it3] = carry % 256 >>> 0\n        carry = (carry / 256) >>> 0\n      }\n\n      if (carry !== 0)\n        throw new Error('Non-zero carry')\n      length = i\n      psz++\n    }\n\n    // Skip leading zeroes\n    let it4 = size - length\n    while (it4 !== size && dataDecoded[it4] === 0) it4++\n\n    if (padToLength > 0) {\n      return new Uint8Array([\n        ...new Uint8Array(padToLength - dataDecoded.length + it4),\n        ...dataDecoded.slice(it4),\n      ])\n    }\n\n    return dataDecoded.slice(it4)\n  }\n\n  return {\n    encode,\n    decode,\n  }\n}\n\nlet cache: Map<number | string, any> | undefined\n\nexport function useBase(alphaOrBase: string | number) {\n  if (cache == null)\n    cache = new Map()\n\n  function getFromCache() {\n    let fn = cache!.get(alphaOrBase)\n    if (fn == null) {\n      fn = _useBase(alphaOrBase)\n      cache!.set(alphaOrBase, fn)\n    }\n    return fn\n  }\n\n  function encode(source: BinInput, padToLength = -1): string {\n    return getFromCache().encode(source, padToLength)\n  }\n\n  function decode(source: string, padToLength = -1): Uint8Array {\n    return getFromCache().decode(source, padToLength)\n  }\n\n  return { encode, decode }\n}\n\n// Shortcuts\n\nexport function encodeBase32(bin: BinInput, padding = -1) {\n  return useBase(32).encode(bin, padding)\n}\n\nexport function decodeBase32(s: string, padding = -1) {\n  return useBase(32).decode(s\n    .toLocaleLowerCase()\n    .replace(/l/g, '1')\n    .replace(/s/g, '5')\n    .replace(/o/g, '0')\n    .replace(/i/g, '1'), padding)\n}\n\nexport function encodeBase16(bin: BinInput, padding = -1) {\n  return useBase(16).encode(bin, padding)\n}\n\nexport function decodeBase16(s: string, padding = -1) {\n  return useBase(16).decode(s, padding)\n}\n\nexport function encodeBase58(bin: BinInput, padding = -1) {\n  return useBase(58).encode(bin, padding)\n}\n\nexport function decodeBase58(s: string, padding = -1) {\n  return useBase(58).decode(s, padding)\n}\n\nexport function encodeBase62(bin: BinInput, padding = -1) {\n  return useBase(62).encode(bin, padding)\n}\n\nexport function decodeBase62(s: string, padding = -1) {\n  return useBase(62).decode(s, padding)\n}\n\nexport function estimateSizeForBase(bytes: number, base: number) {\n  return Math.ceil(bytes * (Math.log(256) / Math.log(base)))\n}\n"],"mappings":"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"}