zutils/dist/utils/number.util.cjs.map
2024-01-23 19:29:44 +08:00

1 line
13 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{"version":3,"sources":["../../src/utils/number.util.ts"],"sourcesContent":["import Web3 from 'web3'\nimport { BN } from 'ethereumjs-util'\n\n/**\n * Converts some token minimal unit to render format string, showing 5 decimals\n *\n * @param {Number|String|BN} tokenValue - Token value to convert\n * @param {Number} decimals - Token decimals to convert\n * @param {Number} decimalsToShow - Decimals to 5\n * @returns {String} - Number of token minimal unit, in render format\n * If value is less than 5 precision decimals will show '< 0.00001'\n */\nexport function renderFromTokenMinimalUnit(tokenValue, decimals, decimalsToShow = 5) {\n const minimalUnit = fromTokenMinimalUnit(tokenValue || 0, decimals)\n const minimalUnitNumber = parseFloat(minimalUnit)\n let renderMinimalUnit\n if (minimalUnitNumber < 0.00001 && minimalUnitNumber > 0) {\n renderMinimalUnit = '< 0.00001'\n } else {\n const base = Math.pow(10, decimalsToShow)\n renderMinimalUnit = (Math.round(minimalUnitNumber * base) / base).toString()\n }\n return renderMinimalUnit\n}\n/**\n * Converts token minimal unit to readable string value\n *\n * @param {number|string|Object} minimalInput - Token minimal unit to convert\n * @param {string} decimals - Token decimals to convert\n * @returns {string} - String containing the new number\n */\nexport function fromTokenMinimalUnit(minimalInput, decimals) {\n minimalInput = addHexPrefix(Number(minimalInput).toString(16))\n let minimal = safeNumberToBN(minimalInput)\n const negative = minimal.lt(new BN(0))\n const base = Web3.utils.toBN(Math.pow(10, decimals).toString())\n\n if (negative) {\n minimal = minimal.mul(new BN(-1))\n }\n let fraction = minimal.mod(base).toString(10)\n while (fraction.length < decimals) {\n fraction = '0' + fraction\n }\n fraction = fraction.match(/^([0-9]*[1-9]|0)(0*)/)[1]\n const whole = minimal.div(base).toString(10)\n let value = '' + whole + (fraction === '0' ? '' : '.' + fraction)\n if (negative) {\n value = '-' + value\n }\n return value\n}\n\n/**\n * Converts wei to render format string, showing 5 decimals\n *\n * @param {Number|String|BN} value - Wei to convert\n * @param {Number} decimalsToShow - Decimals to 5\n * @returns {String} - Number of token minimal unit, in render format\n * If value is less than 5 precision decimals will show '< 0.00001'\n */\nexport function renderFromWei(value, decimalsToShow = 5) {\n let renderWei = '0'\n // avoid undefined\n if (value) {\n const wei = Web3.utils.fromWei(value)\n const weiNumber = parseFloat(wei)\n if (weiNumber < 0.00001 && weiNumber > 0) {\n renderWei = '< 0.00001'\n } else {\n const base = Math.pow(10, decimalsToShow)\n renderWei = (Math.round(weiNumber * base) / base).toString()\n }\n }\n return renderWei\n}\n\n/**\n * Converts token BN value to hex string number to be sent\n *\n * @param {Object} value - BN instance to convert\n * @param {number} decimals - Decimals to be considered on the conversion\n * @returns {string} - String of the hex token value\n */\nexport function calcTokenValueToSend(value, decimals) {\n return value ? (value * Math.pow(10, decimals)).toString(16) : 0\n}\n\n/**\n * Determines if a string is a valid decimal\n *\n * @param {string} value - String to check\n * @returns {boolean} - True if the string is a valid decimal\n */\nexport function isDecimal(value) {\n return Number.isFinite(parseFloat(value)) && !Number.isNaN(parseFloat(value)) && !isNaN(+value)\n}\n\n/**\n * Creates a BN object from a string\n *\n * @param {string} value - Some numeric value represented as a string\n * @returns {Object} - BN instance\n */\nexport function toBN(value) {\n return Web3.utils.toBN(value)\n}\n\n/**\n * Prefixes a hex string with '0x' or '-0x' and returns it. Idempotent.\n *\n * @param {string} str - The string to prefix.\n * @returns {string} The prefixed string.\n */\nexport const addHexPrefix = (str: string) => {\n if (typeof str !== 'string' || str.match(/^-?0x/u)) {\n return str\n }\n\n if (str.match(/^-?0X/u)) {\n return str.replace('0X', '0x')\n }\n\n if (str.startsWith('-')) {\n return str.replace('-', '-0x')\n }\n\n return `0x${str}`\n}\n\n/**\n * Wraps 'numberToBN' method to avoid potential undefined and decimal values\n *\n * @param {number|string} value - number\n * @returns {Object} - The converted value as BN instance\n */\nexport function safeNumberToBN(value: number | string) {\n const safeValue = fastSplit(value.toString()) || '0'\n return numberToBN(safeValue)\n}\n\n/**\n * Performs a fast string split and returns the first item of the string based on the divider provided\n *\n * @param {number|string} value - number/string to be splitted\n * @param {string} divider - string value to use to split the string (default '.')\n * @returns {string} - the selected splitted element\n */\n\nexport function fastSplit(value, divider = '.') {\n value += ''\n const [from, to] = [value.indexOf(divider), 0]\n return value.substring(from, to) || value\n}\n\nexport function stripHexPrefix(str: string) {\n if (typeof str !== 'string') {\n return str\n }\n\n return str.slice(0, 2) === '0x' ? str.slice(2) : str\n}\n\nexport function numberToBN(arg) {\n if (typeof arg === 'string' || typeof arg === 'number') {\n var multiplier = Web3.utils.toBN(1); // eslint-disable-line\n var formattedString = String(arg).toLowerCase().trim()\n var isHexPrefixed = formattedString.substr(0, 2) === '0x' || formattedString.substr(0, 3) === '-0x'\n var stringArg = stripHexPrefix(formattedString); // eslint-disable-line\n if (stringArg.substr(0, 1) === '-') {\n stringArg = stripHexPrefix(stringArg.slice(1))\n multiplier = Web3.utils.toBN(-1)\n }\n stringArg = stringArg === '' ? '0' : stringArg\n\n if (\n (!stringArg.match(/^-?[0-9]+$/) && stringArg.match(/^[0-9A-Fa-f]+$/)) ||\n stringArg.match(/^[a-fA-F]+$/) ||\n (isHexPrefixed === true && stringArg.match(/^[0-9A-Fa-f]+$/))\n ) {\n return Web3.utils.toBN(stringArg).mul(multiplier)\n }\n\n if ((stringArg.match(/^-?[0-9]+$/) || stringArg === '') && isHexPrefixed === false) {\n return Web3.utils.toBN(stringArg).mul(multiplier)\n }\n } else if (typeof arg === 'object' && arg.toString && !arg.pop && !arg.push) {\n if (arg.toString(10).match(/^-?[0-9]+$/) && (arg.mul || arg.dividedToIntegerBy)) {\n return Web3.utils.toBN(arg.toString(10))\n }\n }\n\n throw new Error(\n '[number-to-bn] while converting number ' +\n JSON.stringify(arg) +\n ' to BN.js instance, error: invalid number value. Value must be an integer, hex string, BN or BigNumber instance. Note, decimals are not supported.',\n )\n}\n\nfunction checkRadixLegal(radix) {\n return radix >= 2 && radix <= 62\n}\n\n/**\n * 将letter转为纯数字\n * @param {string} letter\n * @returns {number}\n */\nfunction transformCharToNum(letter, base) {\n if (base <= 36) {\n letter = letter.toLowerCase()\n }\n if (letter >= '0' && letter <= '9') {\n return parseInt(letter)\n }\n if (letter >= 'a' && letter <= 'z') {\n return letter.charCodeAt(0) - 'a'.charCodeAt(0) + 10\n }\n if (letter >= 'A' && letter <= 'Z') {\n return letter.charCodeAt(0) - 'A'.charCodeAt(0) + 36\n }\n return 0\n}\n\n/**\n * 将数字转为进制里的字母\n * @param {number} num\n * @return {string}\n */\nfunction transformNumToChar(num, alphabet) {\n alphabet = alphabet || '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'\n return alphabet.charAt(num)\n}\n\n/**\n * Converts a number from the base specified by `base` to the base specified by `to`.\n * @param {string} numStr - The number string to be converted.\n * @param {number} base - The base of the number.\n * @param {number} to - The target base for the conversion.\n * @return {string} - The converted number string.\n */\nexport function convert({\n numStr,\n base,\n to,\n alphabet,\n}: {\n numStr: string\n base: number\n to: number\n alphabet?: string\n}): string {\n // 当base和to相等 或 base和to超出转换范围则原样返回\n if (base === to || !checkRadixLegal(base) || !checkRadixLegal(to)) {\n return numStr\n }\n\n // 先转成10进制\n let p = 0\n let number10 = 0\n while (p < numStr.length) {\n number10 *= base\n number10 += transformCharToNum(numStr.charAt(p), base)\n p++\n }\n // 若要转换的正好是进制,则直接返回\n if (to === 10) {\n return number10.toString()\n }\n let result = ''\n let cur\n while (number10) {\n cur = number10 % to\n result = transformNumToChar(cur, alphabet) + result\n number10 = Math.floor(number10 / to)\n }\n return result\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAAiB;AACjB,6BAAmB;AAWZ,SAAS,2BAA2B,YAAY,UAAU,iBAAiB,GAAG;AACnF,QAAM,cAAc,qBAAqB,cAAc,GAAG,QAAQ;AAClE,QAAM,oBAAoB,WAAW,WAAW;AAChD,MAAI;AACJ,MAAI,oBAAoB,QAAW,oBAAoB,GAAG;AACxD,wBAAoB;AAAA,EACtB,OAAO;AACL,UAAM,OAAO,KAAK,IAAI,IAAI,cAAc;AACxC,yBAAqB,KAAK,MAAM,oBAAoB,IAAI,IAAI,MAAM,SAAS;AAAA,EAC7E;AACA,SAAO;AACT;AAQO,SAAS,qBAAqB,cAAc,UAAU;AAC3D,iBAAe,aAAa,OAAO,YAAY,EAAE,SAAS,EAAE,CAAC;AAC7D,MAAI,UAAU,eAAe,YAAY;AACzC,QAAM,WAAW,QAAQ,GAAG,IAAI,0BAAG,CAAC,CAAC;AACrC,QAAM,OAAO,YAAAA,QAAK,MAAM,KAAK,KAAK,IAAI,IAAI,QAAQ,EAAE,SAAS,CAAC;AAE9D,MAAI,UAAU;AACZ,cAAU,QAAQ,IAAI,IAAI,0BAAG,EAAE,CAAC;AAAA,EAClC;AACA,MAAI,WAAW,QAAQ,IAAI,IAAI,EAAE,SAAS,EAAE;AAC5C,SAAO,SAAS,SAAS,UAAU;AACjC,eAAW,MAAM;AAAA,EACnB;AACA,aAAW,SAAS,MAAM,sBAAsB,EAAE,CAAC;AACnD,QAAM,QAAQ,QAAQ,IAAI,IAAI,EAAE,SAAS,EAAE;AAC3C,MAAI,QAAQ,KAAK,SAAS,aAAa,MAAM,KAAK,MAAM;AACxD,MAAI,UAAU;AACZ,YAAQ,MAAM;AAAA,EAChB;AACA,SAAO;AACT;AAUO,SAAS,cAAc,OAAO,iBAAiB,GAAG;AACvD,MAAI,YAAY;AAEhB,MAAI,OAAO;AACT,UAAM,MAAM,YAAAA,QAAK,MAAM,QAAQ,KAAK;AACpC,UAAM,YAAY,WAAW,GAAG;AAChC,QAAI,YAAY,QAAW,YAAY,GAAG;AACxC,kBAAY;AAAA,IACd,OAAO;AACL,YAAM,OAAO,KAAK,IAAI,IAAI,cAAc;AACxC,mBAAa,KAAK,MAAM,YAAY,IAAI,IAAI,MAAM,SAAS;AAAA,IAC7D;AAAA,EACF;AACA,SAAO;AACT;AASO,SAAS,qBAAqB,OAAO,UAAU;AACpD,SAAO,SAAS,QAAQ,KAAK,IAAI,IAAI,QAAQ,GAAG,SAAS,EAAE,IAAI;AACjE;AAQO,SAAS,UAAU,OAAO;AAC/B,SAAO,OAAO,SAAS,WAAW,KAAK,CAAC,KAAK,CAAC,OAAO,MAAM,WAAW,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK;AAChG;AAQO,SAAS,KAAK,OAAO;AAC1B,SAAO,YAAAA,QAAK,MAAM,KAAK,KAAK;AAC9B;AAQO,IAAM,eAAe,CAAC,QAAgB;AAC3C,MAAI,OAAO,QAAQ,YAAY,IAAI,MAAM,QAAQ,GAAG;AAClD,WAAO;AAAA,EACT;AAEA,MAAI,IAAI,MAAM,QAAQ,GAAG;AACvB,WAAO,IAAI,QAAQ,MAAM,IAAI;AAAA,EAC/B;AAEA,MAAI,IAAI,WAAW,GAAG,GAAG;AACvB,WAAO,IAAI,QAAQ,KAAK,KAAK;AAAA,EAC/B;AAEA,SAAO,KAAK,GAAG;AACjB;AAQO,SAAS,eAAe,OAAwB;AACrD,QAAM,YAAY,UAAU,MAAM,SAAS,CAAC,KAAK;AACjD,SAAO,WAAW,SAAS;AAC7B;AAUO,SAAS,UAAU,OAAO,UAAU,KAAK;AAC9C,WAAS;AACT,QAAM,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,QAAQ,OAAO,GAAG,CAAC;AAC7C,SAAO,MAAM,UAAU,MAAM,EAAE,KAAK;AACtC;AAEO,SAAS,eAAe,KAAa;AAC1C,MAAI,OAAO,QAAQ,UAAU;AAC3B,WAAO;AAAA,EACT;AAEA,SAAO,IAAI,MAAM,GAAG,CAAC,MAAM,OAAO,IAAI,MAAM,CAAC,IAAI;AACnD;AAEO,SAAS,WAAW,KAAK;AAC9B,MAAI,OAAO,QAAQ,YAAY,OAAO,QAAQ,UAAU;AACtD,QAAI,aAAa,YAAAA,QAAK,MAAM,KAAK,CAAC;AAClC,QAAI,kBAAkB,OAAO,GAAG,EAAE,YAAY,EAAE,KAAK;AACrD,QAAI,gBAAgB,gBAAgB,OAAO,GAAG,CAAC,MAAM,QAAQ,gBAAgB,OAAO,GAAG,CAAC,MAAM;AAC9F,QAAI,YAAY,eAAe,eAAe;AAC9C,QAAI,UAAU,OAAO,GAAG,CAAC,MAAM,KAAK;AAClC,kBAAY,eAAe,UAAU,MAAM,CAAC,CAAC;AAC7C,mBAAa,YAAAA,QAAK,MAAM,KAAK,EAAE;AAAA,IACjC;AACA,gBAAY,cAAc,KAAK,MAAM;AAErC,QACG,CAAC,UAAU,MAAM,YAAY,KAAK,UAAU,MAAM,gBAAgB,KACnE,UAAU,MAAM,aAAa,KAC5B,kBAAkB,QAAQ,UAAU,MAAM,gBAAgB,GAC3D;AACA,aAAO,YAAAA,QAAK,MAAM,KAAK,SAAS,EAAE,IAAI,UAAU;AAAA,IAClD;AAEA,SAAK,UAAU,MAAM,YAAY,KAAK,cAAc,OAAO,kBAAkB,OAAO;AAClF,aAAO,YAAAA,QAAK,MAAM,KAAK,SAAS,EAAE,IAAI,UAAU;AAAA,IAClD;AAAA,EACF,WAAW,OAAO,QAAQ,YAAY,IAAI,YAAY,CAAC,IAAI,OAAO,CAAC,IAAI,MAAM;AAC3E,QAAI,IAAI,SAAS,EAAE,EAAE,MAAM,YAAY,MAAM,IAAI,OAAO,IAAI,qBAAqB;AAC/E,aAAO,YAAAA,QAAK,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;AAAA,IACzC;AAAA,EACF;AAEA,QAAM,IAAI;AAAA,IACR,4CACE,KAAK,UAAU,GAAG,IAClB;AAAA,EACJ;AACF;AAEA,SAAS,gBAAgB,OAAO;AAC9B,SAAO,SAAS,KAAK,SAAS;AAChC;AAOA,SAAS,mBAAmB,QAAQ,MAAM;AACxC,MAAI,QAAQ,IAAI;AACd,aAAS,OAAO,YAAY;AAAA,EAC9B;AACA,MAAI,UAAU,OAAO,UAAU,KAAK;AAClC,WAAO,SAAS,MAAM;AAAA,EACxB;AACA,MAAI,UAAU,OAAO,UAAU,KAAK;AAClC,WAAO,OAAO,WAAW,CAAC,IAAI,IAAI,WAAW,CAAC,IAAI;AAAA,EACpD;AACA,MAAI,UAAU,OAAO,UAAU,KAAK;AAClC,WAAO,OAAO,WAAW,CAAC,IAAI,IAAI,WAAW,CAAC,IAAI;AAAA,EACpD;AACA,SAAO;AACT;AAOA,SAAS,mBAAmB,KAAK,UAAU;AACzC,aAAW,YAAY;AACvB,SAAO,SAAS,OAAO,GAAG;AAC5B;AASO,SAAS,QAAQ;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAKW;AAET,MAAI,SAAS,MAAM,CAAC,gBAAgB,IAAI,KAAK,CAAC,gBAAgB,EAAE,GAAG;AACjE,WAAO;AAAA,EACT;AAGA,MAAI,IAAI;AACR,MAAI,WAAW;AACf,SAAO,IAAI,OAAO,QAAQ;AACxB,gBAAY;AACZ,gBAAY,mBAAmB,OAAO,OAAO,CAAC,GAAG,IAAI;AACrD;AAAA,EACF;AAEA,MAAI,OAAO,IAAI;AACb,WAAO,SAAS,SAAS;AAAA,EAC3B;AACA,MAAI,SAAS;AACb,MAAI;AACJ,SAAO,UAAU;AACf,UAAM,WAAW;AACjB,aAAS,mBAAmB,KAAK,QAAQ,IAAI;AAC7C,eAAW,KAAK,MAAM,WAAW,EAAE;AAAA,EACrC;AACA,SAAO;AACT;","names":["Web3"]}