{"version":3,"file":"stringify-balance.mjs","sourceRoot":"","sources":["../../src/selectors/stringify-balance.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,2DAA2D;AAE3D,OAAO,EAAE,WAAW,EAAE,wBAAwB;AAG9C;;;;;GAKG;AACH,MAAM,UAAU,4BAA4B,CAC1C,OAAe,EACf,QAAgB,EAChB,eAAe,GAAG,CAAC;IAEnB,IAAI,OAAO,KAAK,EAAE,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;QACrC,OAAO,OAAO,CAAC,QAAQ,EAAE,CAAC;IAC5B,CAAC;IAED,IAAI,GAAG,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAC7B,IAAI,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC;IACrB,IAAI,YAAY,GAAG,GAAG,GAAG,QAAQ,CAAC;IAClC,IAAI,MAAM,GAAG,EAAE,CAAC;IAEhB,IAAI,YAAY,IAAI,CAAC,EAAE,CAAC;QACtB,OAAO,MAAM,CAAC,MAAM,IAAI,YAAY,GAAG,CAAC,CAAC,EAAE,CAAC;YAC1C,MAAM,IAAI,GAAG,CAAC;YACd,GAAG,IAAI,CAAC,CAAC;QACX,CAAC;QACD,GAAG,GAAG,MAAM,GAAG,GAAG,CAAC;QACnB,YAAY,GAAG,CAAC,CAAC;IACnB,CAAC;IAED,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,QAAQ,CAAC,CAAC;IAE3C,IAAI,eAAe,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,UAAU,GAAG,GAAG,CAAC,KAAK,CAAC,YAAY,EAAE,YAAY,GAAG,eAAe,CAAC,CAAC;IAC3E,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,IAAI,iBAAiB,GAAG,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACpE,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjC,iBAAiB,GAAG,IAAI,iBAAiB,EAAE,CAAC;QAC9C,CAAC;QACD,OAAO,GAAG,KAAK,GAAG,iBAAiB,EAAE,CAAC;IACxC,CAAC;IACD,OAAO,GAAG,KAAK,IAAI,UAAU,EAAE,CAAC;AAClC,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,wBAAwB,CACtC,aAAqB,EACrB,QAAgB;IAEhB,gFAAgF;IAChF,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;QAC1C,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,CAAC,WAAW,EAAE,cAAc,GAAG,EAAE,CAAC,GAAG,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAEpE,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;QACnB,OAAO,WAAW,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;IAC1C,CAAC;IAED,IAAI,cAAc,CAAC,MAAM,IAAI,QAAQ,EAAE,CAAC;QACtC,OAAO,WAAW,CAChB,MAAM,CAAC,GAAG,WAAW,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,CAC7D,CAAC;IACJ,CAAC;IAED,OAAO,WAAW,CAChB,MAAM,CACJ,GAAG,WAAW,GAAG,cAAc,GAAG,GAAG,CAAC,MAAM,CAC1C,QAAQ,GAAG,cAAc,CAAC,MAAM,CACjC,EAAE,CACJ,CACF,CAAC;AACJ,CAAC","sourcesContent":["// From https://github.com/MetaMask/eth-token-tracker/blob/main/lib/util.js\n// Ensures backwards compatibility with display formatting.\n\nimport { bigIntToHex } from '@metamask/utils';\nimport type { Hex } from '@metamask/utils';\n\n/**\n * @param balance - The balance to stringify as a decimal string\n * @param decimals - The number of decimals of the balance\n * @param balanceDecimals - The number of decimals to display\n * @returns The stringified balance with the specified number of decimals\n */\nexport function stringifyBalanceWithDecimals(\n  balance: bigint,\n  decimals: number,\n  balanceDecimals = 5,\n) {\n  if (balance === 0n || decimals === 0) {\n    return balance.toString();\n  }\n\n  let bal = balance.toString();\n  let len = bal.length;\n  let decimalIndex = len - decimals;\n  let prefix = '';\n\n  if (decimalIndex <= 0) {\n    while (prefix.length <= decimalIndex * -1) {\n      prefix += '0';\n      len += 1;\n    }\n    bal = prefix + bal;\n    decimalIndex = 1;\n  }\n\n  const whole = bal.slice(0, len - decimals);\n\n  if (balanceDecimals === 0) {\n    return whole;\n  }\n\n  const fractional = bal.slice(decimalIndex, decimalIndex + balanceDecimals);\n  if (/0+$/u.test(fractional)) {\n    let withOnlySigZeroes = bal.slice(decimalIndex).replace(/0+$/u, '');\n    if (withOnlySigZeroes.length > 0) {\n      withOnlySigZeroes = `.${withOnlySigZeroes}`;\n    }\n    return `${whole}${withOnlySigZeroes}`;\n  }\n  return `${whole}.${fractional}`;\n}\n\n/**\n * Converts a decimal string representation back to a Hex balance.\n * This is the inverse operation of stringifyBalanceWithDecimals.\n *\n * @param balanceString - The decimal string representation (e.g., \"123.456\")\n * @param decimals - The number of decimals to apply (shifts decimal point right)\n * @returns The balance as a Hex string\n *\n * @example\n * parseBalanceWithDecimals(\"123.456\", 18) // Returns '0x6B14BD1E6EEA00000'\n * parseBalanceWithDecimals(\"0.001\", 18)   // Returns '0x38D7EA4C68000'\n * parseBalanceWithDecimals(\"123\", 18)     // Returns '0x6AAF7C8516D0C0000'\n */\nexport function parseBalanceWithDecimals(\n  balanceString: string,\n  decimals: number,\n): Hex | undefined {\n  // Allows: \"123\", \"123.456\", \"0.123\", but not: \"-123\", \"123.\", \"abc\", \"12.34.56\"\n  if (!/^\\d+(\\.\\d+)?$/u.test(balanceString)) {\n    return undefined;\n  }\n\n  const [integerPart, fractionalPart = ''] = balanceString.split('.');\n\n  if (decimals === 0) {\n    return bigIntToHex(BigInt(integerPart));\n  }\n\n  if (fractionalPart.length >= decimals) {\n    return bigIntToHex(\n      BigInt(`${integerPart}${fractionalPart.slice(0, decimals)}`),\n    );\n  }\n\n  return bigIntToHex(\n    BigInt(\n      `${integerPart}${fractionalPart}${'0'.repeat(\n        decimals - fractionalPart.length,\n      )}`,\n    ),\n  );\n}\n"]}