{"version":3,"sources":["../src/conversion/chineseCurrency.ts","../src/conversion/chineseCharacter.ts","../src/conversion/englishCharacter.ts","../src/finance/expressions.ts","../src/math/config.ts","../src/finance/sequence.ts","../src/formatting/currency.ts","../src/formatting/padZero.ts","../src/math/computeExpression.ts","../src/math/math.ts","../src/math/unitConversion.ts","../src/network/CIDR.ts","../src/parse/numberDetails.ts","../src/animation/numericCounter.ts"],"names":["digit","unit","MAX_CONVERTIBLE_AMOUNT","numberToChineseUppercaseCurrency","n","head","fractionPart","jiao","fen","fraction","integer","i","p","j","ZERO_DOT_END_REGEX","EMPTY_START_REGEX","ZERO_YUAN_REGEX","ZERO_DOT_PLUS_REGEX","WHOLE_REGEX","digitMap","unitMap","chineseUppercaseCurrencyToNumber","s","result","currentNum","isNegative","temp","tempResult","char","computeExpression","onesZh","tensZh","thousandsZh","MAX_SAFE_INTEGER","numberToChineseCharacter","number_","integerPart","decimalPart","words","convertInteger","convertDecimal","previousPart","index","currentPart","currentWords","helperZh","decimal","zeroFlag","hasNonZero","ones","tens","scales","numberToEnglishCharacter","chunk","convertChunk","onesDigit","englishCharacterToNumber","text","parts","integerWords","decimalWords","integerValue","parseIntegerWords","decimalValue","word","currentNumber","scale","calculateGrossAmount","netAmount","taxRate","calculateTaxRate","grossAmount","calculateTaxAmount","calculateNetAmount","calculateDiscountPrice","originalPrice","discountRate","calculateDiscountAmount","math","create","all","convertToBigNumbers","parameters","convertedParameters","key","value","isValidThousandSeparatedNumber","arithmeticSequence","a","d","sequence","geometricSequence","defaultOptions","getCurrencySeparators","locale","groupSeparator","decimalSeparator","part","convertCurrencyToNumber","groupSeparatorRegex","decimalSeparatorRegex","cleanedValue","TRIM_NON_NUMERIC_REGEX","numericValue","currency","options","style","unitDisplay","notation","signDisplay","currencySign","currencyDisplay","minimumIntegerDigits","minimumFractionDigits","maximumFractionDigits","maximumSignificantDigits","minimumSignificantDigits","prefix","suffix","__spreadValues","padZero","decimalLength","originalString","currentDecimalPlaces","parseNumberDetails","zeroCount","formula","checkParameters","values","length","item","isValidNumeric","arrayToBigNumber","add","subtract","bigNumberValues","multiply","divide","modulo","divisor","round","decimalPlaces","ceil","floor","pickRandom","random","min","max","randomInt","equal","x","y","unequal","larger","largerEq","smaller","smallerEq","unitConversion","fromUnit","toUnit","withUnit","ipToNumber","ip","isValidIPv4","acc","octet","numberToIp","num","pow","calculateSubnetMask","cidrBits","calculateNetworkAddress","ipNum","mask","calculateBroadcastAddress","calculateIpRange","networkAddress","broadcastAddress","firstUsable","lastUsable","calculateTotalIps","calculateUsableIps","isIpInRange","cidrIp","cidrIpNum","cidrCalculator","totalIps","usableIps","unsignedOriginalString","decimalIndex","integerLength","animateNumericCount","start","end","duration","callback","startTime","difference","roundToDecimal","factor","animate","currentTime","elapsedTime","progress","currentValue"],"mappings":"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","file":"chunk-D3SDZHTW.cjs","sourcesContent":["import {\r\n  EMPTY_START_REGEX,\r\n  WHOLE_REGEX,\r\n  ZERO_DOT_END_REGEX,\r\n  ZERO_DOT_PLUS_REGEX,\r\n  ZERO_YUAN_REGEX,\r\n} from '../constants/regex';\r\n\r\nimport { computeExpression } from '..';\r\n\r\nconst digit = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖'];\r\nconst unit = [\r\n  ['元', '万', '亿'],\r\n  ['', '拾', '佰', '仟'],\r\n];\r\n\r\nconst MAX_CONVERTIBLE_AMOUNT = 999999999999.99;\r\n\r\nexport function numberToChineseUppercaseCurrency(n: number): string {\r\n  if (Math.abs(n) > MAX_CONVERTIBLE_AMOUNT) {\r\n    throw new Error('金额超出可转换范围');\r\n  }\r\n\r\n  const head = n < 0 ? '欠' : '';\r\n  n = Math.abs(n);\r\n\r\n  const fractionPart = Math.round((n % 1) * 100);\r\n  const jiao = Math.floor(fractionPart / 10);\r\n  const fen = fractionPart % 10;\r\n\r\n  let fraction = '';\r\n  if (jiao > 0) {\r\n    fraction += `${digit[jiao]}角`;\r\n  }\r\n  if (fen > 0) {\r\n    fraction += `${digit[fen]}分`;\r\n  }\r\n  fraction = fraction || '整';\r\n\r\n  let integer = '';\r\n  n = Math.floor(n);\r\n  for (let i = 0; i < unit[0].length && n > 0; i++) {\r\n    let p = '';\r\n    for (let j = 0; j < unit[1].length && n > 0; j++) {\r\n      p = digit[n % 10] + unit[1][j] + p;\r\n      n = Math.floor(n / 10);\r\n    }\r\n    integer = p.replace(ZERO_DOT_END_REGEX, '').replace(EMPTY_START_REGEX, '零') + unit[0][i] + integer;\r\n  }\r\n\r\n  return head + (integer + fraction)\r\n    .replace(ZERO_YUAN_REGEX, '元')\r\n    .replace(ZERO_DOT_PLUS_REGEX, '零')\r\n    .replace(WHOLE_REGEX, '零元整');\r\n}\r\n\r\n\r\nconst digitMap: Record<string, number> = {\r\n  零: 0, 壹: 1, 贰: 2, 叁: 3, 肆: 4, 伍: 5, 陆: 6, 柒: 7, 捌: 8, 玖: 9,\r\n};\r\n\r\nconst unitMap: Record<string, number> = {\r\n  拾: 10, 佰: 100, 仟: 1000, 万: 10000, 亿: 100000000,\r\n};\r\n\r\nexport function chineseUppercaseCurrencyToNumber(s: string): number {\r\n  let result = 0;\r\n  let currentNum = 0;\r\n  let isNegative = false;\r\n  let temp = 0;\r\n  let tempResult = 0;\r\n\r\n  if (s.startsWith('欠')) {\r\n    isNegative = true;\r\n    s = s.slice(1);\r\n  }\r\n\r\n  for (const char of s) {\r\n    if (char in digitMap) {\r\n      currentNum = digitMap[char];\r\n    } else if (char in unitMap) {\r\n      if (currentNum === 0 && char === '拾') {\r\n        currentNum = 1;\r\n      }\r\n      if (unitMap[char] >= 10000) {\r\n        temp = Number(computeExpression(`${temp}+${currentNum}`));\r\n        tempResult = Number(computeExpression(`${tempResult}+ ${temp} * ${unitMap[char]}`));\r\n        if (char === '亿') {\r\n          result = Number(computeExpression(`${result} + ${tempResult}`));\r\n          tempResult = 0;\r\n        }\r\n        temp = 0;\r\n      } else {\r\n        temp = Number(computeExpression(`${temp} + ${currentNum} * ${unitMap[char]}`));\r\n      }\r\n      currentNum = 0;\r\n    } else if (char === '元' || char === '整') {\r\n      temp = Number(computeExpression(`${temp} + ${currentNum}`));\r\n      tempResult = Number(computeExpression(`${tempResult} + ${temp}`));\r\n      result = Number(computeExpression(`${result} + ${tempResult}`));\r\n      temp = 0;\r\n      tempResult = 0;\r\n      currentNum = 0;\r\n    } else if (char === '角') {\r\n      result = Number(computeExpression(`${result}+${currentNum} * 0.1`));\r\n      currentNum = 0;\r\n    } else if (char === '分') {\r\n      result = Number(computeExpression(`${result}+${currentNum} * 0.01`));\r\n      currentNum = 0;\r\n    }\r\n  }\r\n\r\n  result = Number(computeExpression(`${result} + ${tempResult} + ${temp} + ${currentNum}`));\r\n  return isNegative ? -result : result;\r\n}\r\n","import { computeExpression } from '../index';\r\n\r\nconst onesZh = ['', '一', '二', '三', '四', '五', '六', '七', '八', '九'];\r\nconst tensZh = ['', '十', '百', '千'];\r\nconst thousandsZh = ['', '万', '亿'];\r\nconst MAX_SAFE_INTEGER = 100_000_000_000; // 1000亿\r\n/**\r\n * Convert number to words in English or Chinese.\r\n * 将数字转换为英文或中文表示的文字\r\n *\r\n * @param number_ - The number to convert (要转换的数字)\r\n * @returns The number in words (文字形式的数字)\r\n */\r\nexport function numberToChineseCharacter(number_: number): string {\r\n  if (Math.abs(number_) >= MAX_SAFE_INTEGER) {\r\n    throw new Error('输入的整数部分必须在-1000亿到1000亿之间');\r\n  }\r\n\r\n  if (number_ === 0) return '零';\r\n\r\n  const isNegative = number_ < 0;\r\n  number_ = Math.abs(number_);\r\n\r\n  const integerPart = Math.floor(number_);\r\n  const decimalPart = Number(computeExpression(`${number_} - ${integerPart}`));\r\n\r\n  let words = integerPart === 0 ? '零' : convertInteger(integerPart);\r\n\r\n  if (decimalPart > 0) {\r\n    words += `点${convertDecimal(decimalPart)}`;\r\n  }\r\n\r\n  return isNegative ? `负${words}` : words;\r\n}\r\n\r\nfunction convertInteger(number_: number): string {\r\n  let words = '';\r\n  let previousPart = 0;\r\n  for (let index = 0; number_ > 0; index++) {\r\n    const currentPart = number_ % 10_000;\r\n    if (currentPart !== 0) {\r\n      const currentWords = helperZh(currentPart);\r\n      if (previousPart < 1000 && previousPart !== 0 && index > 0) {\r\n        words = `零${words}`;\r\n      }\r\n      words = currentWords + (index > 0 ? thousandsZh[index] : '') + words;\r\n    }\r\n    previousPart = currentPart;\r\n    number_ = Math.floor(number_ / 10_000);\r\n  }\r\n  return words.trim();\r\n}\r\n\r\nfunction convertDecimal(decimal: number): string {\r\n  const decimalStr = decimal.toString().slice(2); // 保留两位小数并去掉\"0.\"\r\n  return decimalStr.split('').map((digit) => {\r\n    // 如果当前数字是0，并且不是第一个数字，并且下一个数字不是0，则添加\"零\"\r\n    if (digit === '0') {\r\n      return '零';\r\n    }\r\n    return onesZh[parseInt(digit, 10)];\r\n  }).join('');\r\n}\r\n\r\n/**\r\n * Helper function to convert numbers to Chinese words.\r\n * 将数字转换为中文文字的辅助函数.\r\n *\r\n * @param number_ - The number to convert (要转换的数字)\r\n * @returns The number in Chinese words (中文文字形式的数字)\r\n */\r\nfunction helperZh(number_: number): string {\r\n  if (number_ === 0) {\r\n    return '';\r\n  } else if (number_ < 10) {\r\n    return onesZh[number_];\r\n  } else if (number_ === 10) {\r\n    return tensZh[1]; // eg. 10 -> 十\r\n  } else {\r\n    let words = '';\r\n    let unit = 0;\r\n    let zeroFlag = false; // Flag to mark the need to add \"零\" (标记是否需要添加“零”)\r\n    let hasNonZero = false; // Flag to mark the encounter of non-zero digit (标记是否遇到非零数字)\r\n    while (number_ > 0) {\r\n      const digit = number_ % 10;\r\n      if (digit === 0) {\r\n        if (hasNonZero) {\r\n          zeroFlag = true;\r\n        }\r\n      } else {\r\n        hasNonZero = true;\r\n        if (zeroFlag) {\r\n          words = `零${words}`;\r\n          zeroFlag = false;\r\n        }\r\n        words = onesZh[digit] + tensZh[unit] + words;\r\n      }\r\n      number_ = Math.floor(number_ / 10);\r\n      unit++;\r\n    }\r\n    return words.replace(/零+$/, ''); // Remove trailing zeros (去除末尾多余的零)\r\n  }\r\n}\r\n","import { computeExpression } from '../index';\r\n\r\nconst ones = ['', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten',\r\n    'eleven', 'twelve', 'thirteen', 'fourteen', 'fifteen', 'sixteen', 'seventeen', 'eighteen', 'nineteen'];\r\nconst tens = ['', '', 'twenty', 'thirty', 'forty', 'fifty', 'sixty', 'seventy', 'eighty', 'ninety'];\r\nconst scales = ['', 'thousand', 'million', 'billion', 'trillion'];\r\nconst MAX_SAFE_INTEGER = 1_000_000_000_000; // 1 trillion\r\n\r\n/**\r\n * Convert number to words in English.\r\n * 将数字转换为英文表示的文字\r\n *\r\n * @param number_ - The number to convert (要转换的数字)\r\n * @returns The number in words (文字形式的数字)\r\n */\r\nexport function numberToEnglishCharacter(number_: number): string {\r\n    if (Math.abs(number_) >= MAX_SAFE_INTEGER) {\r\n        throw new Error('Input must be between -1 trillion and 1 trillion');\r\n    }\r\n\r\n    if (number_ === 0) return 'zero';\r\n\r\n    const isNegative = number_ < 0;\r\n    number_ = Math.abs(number_);\r\n\r\n    const integerPart = Math.floor(number_);\r\n    const decimalPart = Number(computeExpression(`${number_} - ${integerPart}`));\r\n\r\n    let words = integerPart === 0 ? 'zero' : convertInteger(integerPart);\r\n\r\n    if (decimalPart > 0) {\r\n        words += ` point ${convertDecimal(decimalPart)}`;\r\n    }\r\n\r\n    return isNegative ? `negative ${words}` : words;\r\n}\r\n\r\nfunction convertInteger(number_: number): string {\r\n    if (number_ === 0) return '';\r\n\r\n    let words = '';\r\n\r\n    // Process each group of 3 digits\r\n    for (let i = 0; number_ > 0; i++) {\r\n        const chunk = number_ % 1000;\r\n\r\n        if (chunk !== 0) {\r\n            const chunkWords = convertChunk(chunk);\r\n            words = chunkWords + (i > 0 ? ` ${scales[i]} ` : '') + words;\r\n        } else if (i > 0 && words !== '') {\r\n            // Don't add scale for zero chunks\r\n        }\r\n\r\n        number_ = Math.floor(number_ / 1000);\r\n    }\r\n\r\n    return words.trim();\r\n}\r\n\r\nfunction convertChunk(number_: number): string {\r\n    if (number_ === 0) return '';\r\n\r\n    let words = '';\r\n\r\n    // Handle hundreds\r\n    if (number_ >= 100) {\r\n        words += `${ones[Math.floor(number_ / 100)]} hundred`;\r\n        number_ %= 100;\r\n        if (number_ > 0) {\r\n            words += ' and ';\r\n        }\r\n    }\r\n\r\n    // Handle tens and ones\r\n    if (number_ > 0) {\r\n        if (number_ < 20) {\r\n            words += ones[number_];\r\n        } else {\r\n            words += tens[Math.floor(number_ / 10)];\r\n            const onesDigit = number_ % 10;\r\n            if (onesDigit > 0) {\r\n                words += `-${ones[onesDigit]}`;\r\n            }\r\n        }\r\n    }\r\n\r\n    return words;\r\n}\r\n\r\nfunction convertDecimal(decimal: number): string {\r\n    const decimalStr = decimal.toString().slice(2); // Remove \"0.\"\r\n    return decimalStr.split('').map(digit => {\r\n        return digit === '0' ? 'zero' : ones[parseInt(digit, 10)];\r\n    }).join(' ');\r\n}\r\n\r\n/**\r\n * Convert English words to number.\r\n * 将英文单词转换为数字\r\n *\r\n * @param text - The English words to convert (要转换的英文单词)\r\n * @returns The number (数字)\r\n */\r\nexport function englishCharacterToNumber(text: string): number {\r\n    text = text.toLowerCase().trim();\r\n\r\n    if (text === 'zero') return 0;\r\n\r\n    let isNegative = false;\r\n    if (text.startsWith('negative ')) {\r\n        isNegative = true;\r\n        text = text.substring(9);\r\n    }\r\n\r\n    // Handle decimal part\r\n    const parts = text.split(' point ');\r\n    const integerWords = parts[0];\r\n    const decimalWords = parts.length > 1 ? parts[1] : '';\r\n\r\n    let integerValue = parseIntegerWords(integerWords);\r\n    let decimalValue = 0;\r\n\r\n    if (decimalWords) {\r\n        const decimalDigits = decimalWords.split(' ').map(word => {\r\n            if (word === 'zero') return 0;\r\n            return ones.indexOf(word);\r\n        });\r\n\r\n        let decimalStr = decimalDigits.join('');\r\n        decimalValue = Number(`0.${decimalStr}`);\r\n    }\r\n\r\n    const result = integerValue + decimalValue;\r\n    return isNegative ? -result : result;\r\n}\r\n\r\nfunction parseIntegerWords(text: string): number {\r\n    // Remove 'and' and replace hyphens with spaces\r\n    text = text.replace(/ and /g, ' ').replace(/-/g, ' ');\r\n    const words = text.split(' ').filter(word => word !== '');\r\n\r\n    let result = 0;\r\n    let currentNumber = 0;\r\n\r\n    for (let i = 0; i < words.length; i++) {\r\n        const word = words[i];\r\n\r\n        if (word === 'hundred') {\r\n            currentNumber *= 100;\r\n        } else if (scales.includes(word)) {\r\n            const scale = scales.indexOf(word);\r\n            currentNumber *= Math.pow(1000, scale);\r\n            result += currentNumber;\r\n            currentNumber = 0;\r\n        } else if (ones.includes(word)) {\r\n            currentNumber += ones.indexOf(word);\r\n        } else if (tens.includes(word)) {\r\n            currentNumber += tens.indexOf(word) * 10;\r\n        }\r\n    }\r\n\r\n    return result + currentNumber;\r\n}\r\n","import { computeExpression } from '..';\r\n\r\n/**\r\n * Calculate the gross amount including tax.\r\n * 计算含税金额。\r\n *\r\n * @param netAmount - The net amount (不含税金额).\r\n * @param taxRate - The tax rate in decimal form (税率，以小数形式表示).\r\n * @returns The gross amount including tax (含税金额).\r\n */\r\nexport function calculateGrossAmount(netAmount: number, taxRate: number): number {\r\n  return Number(computeExpression(`${netAmount}*(1+${taxRate})`));\r\n}\r\n\r\n/**\r\n * Calculate the tax rate based on gross and net amounts.\r\n * 根据总金额和净金额计算税率。\r\n *\r\n * @param grossAmount - The gross amount (总金额).\r\n * @param netAmount - The net amount (净金额).\r\n * @returns The tax rate as a decimal (税率，以小数形式).\r\n */\r\nexport function calculateTaxRate(grossAmount: number, netAmount: number): number {\r\n  return Number(computeExpression(`(${grossAmount} - ${netAmount}) / ${netAmount}`));\r\n}\r\n\r\n/**\r\n * Calculate the tax amount based on gross and net amounts.\r\n * 根据总金额和净金额计算税额。\r\n *\r\n * @param grossAmount - The gross amount (总金额).\r\n * @param netAmount - The net amount (净金额).\r\n * @returns The tax amount (税额).\r\n */\r\nexport function calculateTaxAmount(grossAmount: number, netAmount: number): number {\r\n  return Number(computeExpression(`${grossAmount} - ${netAmount}`));\r\n}\r\n\r\n/**\r\n * Calculate the net amount excluding tax.\r\n * 计算裸税金额。\r\n *\r\n * @param grossAmount - The gross amount (含税金额).\r\n * @param taxRate - The tax rate in decimal form (税率，以小数形式表示).\r\n * @returns The net amount excluding tax (裸税金额).\r\n */\r\nexport function calculateNetAmount(grossAmount: number, taxRate: number): number {\r\n  return Number(computeExpression(`${grossAmount} / (1 + ${taxRate})`));\r\n}\r\n\r\n/**\r\n * Calculate the price after applying a discount rate to the original price.\r\n * 根据原价和折扣率计算折扣后的价格。\r\n *\r\n * @param originalPrice - The original price (原价).\r\n * @param discountRate - The discount rate (折扣率).\r\n * @returns The price after discount (折扣后的价格).\r\n */\r\nexport function calculateDiscountPrice(originalPrice: number, discountRate: number): number {\r\n  return Number(computeExpression(`${originalPrice} * (1 - ${discountRate})`));\r\n}\r\n\r\n/**\r\n * Calculate the discount amount based on the original price and discount rate.\r\n * 根据原价和折扣率计算折扣金额。\r\n *\r\n * @param originalPrice - The original price (原价).\r\n * @param discountRate - The discount rate (折扣率).\r\n * @returns The discount amount (折扣金额).\r\n */\r\nexport function calculateDiscountAmount(originalPrice: number, discountRate: number): number {\r\n  return Number(computeExpression(`${originalPrice} * ${discountRate}`));\r\n}\r\n","import { type BigNumber, all, create } from 'mathjs';\r\nimport { isValidThousandSeparatedNumber } from '..';\r\n\r\nexport const math = create(all, { number: 'BigNumber' });\r\n\r\ninterface Parameters {\r\n  [key: string]: number | string | BigNumber;\r\n}\r\n\r\n// 该函数将参数转为BigNumber类型\r\nexport function convertToBigNumbers(parameters: Parameters) {\r\n  const convertedParameters: Parameters = {};\r\n  for (const [key, value] of Object.entries(parameters)) {\r\n    if (typeof value === 'number') {\r\n      convertedParameters[key] = math.bignumber(value);\r\n    } else if (typeof value === 'string') {\r\n      convertedParameters[key] = isValidThousandSeparatedNumber(value)\r\n        ? math.bignumber(Number(value.replaceAll(',', '')))\r\n        : math.bignumber(value);\r\n    }\r\n  }\r\n  return convertedParameters;\r\n}\r\n\r\n\r\nmath.createUnit({\r\n  // 定义长度单位\r\n  Li: { definition: '500 meter' }, // 里\r\n\r\n  // 定义时间单位\r\n  ShiChen: { definition: '2 hour' }, // 时辰\r\n\r\n  // 定义质量单位\r\n  Jin: { definition: '500 g' }, // 斤\r\n  Liang: { definition: '50 g' }, // 两\r\n  Qian: { definition: '5 g' }, // 钱\r\n\r\n  // 定义容量单位\r\n  Dou: { definition: '10 L' }, // 斗\r\n  Hu: { definition: '10 Dou' }, // 斛\r\n\r\n  // 定义面积单位\r\n  Mu: { definition: '666.67 m^2' }, // 亩\r\n  Shang: { definition: '1 hectare' }, // 垧\r\n\r\n  // 定义长度单位\r\n  Chi: { definition: '0.33333333333333333 m' }, // 尺\r\n  Cun: { definition: '0.1 Chi' }, // 寸\r\n  Zhang: { definition: '10 Chi' }, // 丈\r\n});\r\n","import { math } from '../math/config';\r\n\r\n/**\r\n * 生成等差数列。\r\n *\r\n * @param a 首项。\r\n * @param d 公差。\r\n * @param n 项数。\r\n * @returns 返回一个等差数列数组。\r\n */\r\nexport function arithmeticSequence(a: number, d: number, n: number): number[] {\r\n  const sequence: number[] = [];\r\n  for (let index = 0; index < n; index++) {\r\n    sequence.push(math.add(a, index * d));\r\n  }\r\n  return sequence;\r\n}\r\n\r\n/**\r\n * 生成等比数列。\r\n *\r\n * @param a 首项。\r\n * @param r 公比。\r\n * @param n 项数。\r\n * @returns 返回一个等比数列数组。\r\n */\r\nexport function geometricSequence(a: number, r: number, n: number): number[] {\r\n  const sequence: number[] = [];\r\n  for (let index = 0; index < n; index++) {\r\n    sequence.push(math.multiply(a, Number(math.pow(r, index))));\r\n  }\r\n  return sequence;\r\n}\r\n","import { TRIM_NON_NUMERIC_REGEX } from '../constants/regex';\r\nimport { CurrencyCode, CurrencyUnit } from '..';\r\n\r\n\r\nexport type CurrencyCodeType = keyof typeof CurrencyCode;\r\nexport type CurrencyStyleType = 'decimal' | 'currency' | 'unit' | 'percent';\r\nexport type CurrencyUnitType = `${CurrencyUnit}`;\r\n\r\n/**\r\n * @link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat\r\n */\r\nexport interface CurrencyOptions extends Intl.NumberFormatOptions {\r\n  locale?: CurrencyCodeType;\r\n  style?: CurrencyStyleType;\r\n  unit?: CurrencyUnitType;\r\n  /**\r\n   * 返回内容增加前缀\r\n   */\r\n  prefix?: string;\r\n  /**\r\n   * 返回内容增加后缀\r\n   */\r\n  suffix?: string;\r\n}\r\n\r\nconst defaultOptions: CurrencyOptions = {\r\n  locale: CurrencyCode.CNY,\r\n  style: 'decimal',\r\n};\r\n\r\n/**\r\n * 获取当前货币的千位分隔符和小数点符号\r\n * @param locale 货币代码\r\n * @returns 千位分隔符和小数点符号\r\n */\r\nexport const getCurrencySeparators = (\r\n  locale: CurrencyCodeType = defaultOptions.locale!,\r\n): { groupSeparator: string; decimalSeparator: string } => {\r\n  const formatter = new Intl.NumberFormat(locale, {\r\n    style: 'currency',\r\n    currency: locale,\r\n  });\r\n  const parts = formatter.formatToParts(1234567.89);\r\n  let groupSeparator = '';\r\n  let decimalSeparator = '';\r\n  for (const part of parts) {\r\n    if (part.type === 'group') {\r\n      groupSeparator = part.value;\r\n    } else if (part.type === 'decimal') {\r\n      decimalSeparator = part.value;\r\n    }\r\n  }\r\n  return { groupSeparator, decimalSeparator };\r\n};\r\n\r\n/**\r\n * 将货币字符串转换为数字\r\n * @param value 货币字符串\r\n * @param locale 货币代码\r\n * @returns 数字\r\n */\r\nexport const convertCurrencyToNumber = (\r\n  value: string,\r\n  locale: CurrencyCodeType = defaultOptions.locale!,\r\n): number => {\r\n  if (typeof value !== 'string' || value.trim() === '') {\r\n    throw new Error(`Invalid currency format: ${value}`);\r\n  }\r\n  const { groupSeparator, decimalSeparator } = getCurrencySeparators(locale);\r\n  const groupSeparatorRegex = new RegExp(`\\\\${groupSeparator}`, 'g');\r\n  const decimalSeparatorRegex = new RegExp(`\\\\${decimalSeparator}`);\r\n  let cleanedValue = value.replace(groupSeparatorRegex, '');\r\n  cleanedValue = cleanedValue.replace(decimalSeparatorRegex, '.');\r\n  cleanedValue = cleanedValue.replace(TRIM_NON_NUMERIC_REGEX, '');\r\n  const numericValue = parseFloat(cleanedValue);\r\n  if (isNaN(numericValue)) {\r\n    throw new Error(`Invalid currency format: ${value}`);\r\n  }\r\n  return numericValue;\r\n};\r\n\r\n/**\r\n * 格式化货币\r\n * @param value 数字或字符串\r\n * @param options 格式化选项\r\n * @returns 格式化后的货币字符串\r\n */\r\nexport const currency = (\r\n  value: number | string | bigint,\r\n  options: CurrencyOptions = defaultOptions,\r\n): string => {\r\n  const {\r\n    locale = CurrencyCode.CNY,\r\n    style = 'decimal',\r\n    unit,\r\n    unitDisplay,\r\n    notation,\r\n    signDisplay,\r\n    currencySign,\r\n    currencyDisplay,\r\n    minimumIntegerDigits,\r\n    minimumFractionDigits,\r\n    maximumFractionDigits,\r\n    maximumSignificantDigits,\r\n    minimumSignificantDigits,\r\n    prefix,\r\n    suffix,\r\n  } = { ...defaultOptions, ...options };\r\n\r\n  let numericValue: number | bigint = 0;\r\n\r\n  if (typeof value === 'string' && value.trim() !== '') {\r\n    numericValue = convertCurrencyToNumber(value, locale);\r\n  } else if (typeof value === 'bigint' || typeof value === 'number') {\r\n    numericValue = value;\r\n  } else {\r\n    throw new Error(`Invalid value type: ${typeof value} ${value}`);\r\n  }\r\n\r\n  return `${prefix ?? ''}${new Intl.NumberFormat(locale, {\r\n    style,\r\n    currency: locale,\r\n    unit,\r\n    unitDisplay,\r\n    notation,\r\n    signDisplay,\r\n    currencySign,\r\n    currencyDisplay,\r\n    minimumIntegerDigits,\r\n    minimumFractionDigits,\r\n    maximumFractionDigits,\r\n    maximumSignificantDigits,\r\n    minimumSignificantDigits,\r\n  }).format(numericValue)}${suffix ?? ''}`;\r\n};\r\n\r\n/**\r\n * 设置全局默认选项\r\n * @param options 默认选项\r\n */\r\ncurrency.setGlobalOptions = (options: CurrencyOptions) => {\r\n  Object.assign(defaultOptions, options);\r\n};\r\n","import { parseNumberDetails } from '..';\r\n\r\n/**\r\n * 为数字填充零\r\n * @param value - 需要填充的数字\r\n * @param decimalLength - 小数位数\r\n * @returns 如果没有指定小数位数，返回原数字字符串；否则，返回填充后的数字字符串\r\n */\r\nexport const padZero = (value: number, decimalLength = 0): string => {\r\n  const { originalString, decimalLength: currentDecimalPlaces } =\r\n    parseNumberDetails(value);\r\n  if (currentDecimalPlaces < decimalLength) {\r\n    const zeroCount = decimalLength - currentDecimalPlaces;\r\n    return `${originalString}${currentDecimalPlaces === 0 ? '.' : ''}${'0'.repeat(\r\n      zeroCount,\r\n    )}`;\r\n  }\r\n  return originalString;\r\n};\r\n","import { currency, padZero } from '..';\r\nimport { NumberDictionary } from '../../types/common';\r\nimport { convertToBigNumbers, math } from './config';\r\n\r\ninterface ComputeExpressionOptions {\r\n  parameters?: NumberDictionary;\r\n  decimalPlaces?: number;\r\n  useThousandSeparator?: boolean;\r\n}\r\n\r\nexport function computeExpression(\r\n  formula: string,\r\n  options: ComputeExpressionOptions = {},\r\n): string {\r\n  let result;\r\n\r\n  // Check if parameters are provided (检查是否提供了参数)\r\n  result =\r\n    options.parameters === undefined\r\n      ? math.evaluate(formula)\r\n      : math.evaluate(formula, convertToBigNumbers(options.parameters));\r\n\r\n  // Check if useThousandSeparator is provided (检查是否提供了 useThousandSeparator)\r\n  if (options.useThousandSeparator) {\r\n    if (options.decimalPlaces !== undefined) {\r\n      result = currency(result.toFixed(), {\r\n        minimumFractionDigits: options.decimalPlaces,\r\n        maximumFractionDigits: options.decimalPlaces,\r\n      });\r\n    } else {\r\n      result = currency(result.toFixed());\r\n    }\r\n  } else if (options.decimalPlaces !== undefined) {\r\n    result = padZero(\r\n      result.toFixed(options.decimalPlaces),\r\n      options.decimalPlaces,\r\n    );\r\n  }\r\n\r\n  return result.toString();\r\n}\r\n","import { type BigNumber } from 'mathjs';\r\nimport { isValidNumeric } from '..';\r\nimport { math } from './config';\r\n\r\n// Check parameters (检查参数)\r\nfunction checkParameters(values: Array<number | string>, length?: number): void {\r\n  if (length !== undefined && values.length < length) {\r\n    throw new TypeError(\r\n      'Invalid parameter: at least two parameters are required',\r\n    );\r\n  }\r\n  for (const item of values) {\r\n    if (!isValidNumeric(item)) {\r\n      throw new TypeError(\r\n        'Invalid parameter: parameter must be a number or a string number',\r\n      );\r\n    }\r\n  }\r\n}\r\n\r\nfunction arrayToBigNumber(values: Array<number | string>): BigNumber[] {\r\n  return values.map((value) => math.bignumber(value));\r\n}\r\n\r\n// ------------------------ Arithmetic (算术) ------------------------\r\n\r\nexport function add(...values: Array<number | string>): number {\r\n  checkParameters(values, 2);\r\n  return Number(math.add(...arrayToBigNumber(values)));\r\n}\r\nexport function subtract(...values: Array<number | string>): number {\r\n  checkParameters(values, 2);\r\n  const bigNumberValues = arrayToBigNumber(values);\r\n  let result = bigNumberValues[0];\r\n  for (let index = 1; index < bigNumberValues.length; index++) {\r\n    result = math.subtract(result, bigNumberValues[index]);\r\n  }\r\n  return Number(result);\r\n}\r\nexport function multiply(...values: Array<number | string>): number {\r\n  checkParameters(values, 2);\r\n  return Number(math.multiply(...arrayToBigNumber(values)));\r\n}\r\nexport function divide(...values: Array<number | string>): number {\r\n  checkParameters(values, 2);\r\n  const bigNumberValues = arrayToBigNumber(values);\r\n  let result = bigNumberValues[0];\r\n  for (let index = 1; index < bigNumberValues.length; index++) {\r\n    result = math.divide(result, bigNumberValues[index]);\r\n  }\r\n  return Number(result);\r\n}\r\nexport function modulo(value: number, divisor: number): number {\r\n  if (!isValidNumeric(value) || !isValidNumeric(divisor)) {\r\n    throw new TypeError(\r\n      'Invalid parameter: parameter must be a number or a string number',\r\n    );\r\n  }\r\n  return math.mod(value, divisor);\r\n}\r\nexport function round(value: number, decimalPlaces = 0): number {\r\n  if (!isValidNumeric(value) || !isValidNumeric(decimalPlaces)) {\r\n    throw new TypeError(\r\n      'Invalid parameter: parameter must be a number or a string number',\r\n    );\r\n  }\r\n  return math.round(value, decimalPlaces);\r\n}\r\nexport function ceil(value: number): number {\r\n  if (!isValidNumeric(value)) {\r\n    throw new TypeError(\r\n      'Invalid parameter: parameter must be a number or a string number',\r\n    );\r\n  }\r\n  return math.ceil(value);\r\n}\r\nexport function floor(value: number): number {\r\n  if (!isValidNumeric(value)) {\r\n    throw new TypeError(\r\n      'Invalid parameter: parameter must be a number or a string number',\r\n    );\r\n  }\r\n  return math.floor(value);\r\n}\r\n\r\n// ------------------------ Probability (概率) ------------------------\r\nexport function pickRandom(value: any[]): number {\r\n  checkParameters(value);\r\n  return math.pickRandom(value);\r\n}\r\nexport function random(min?: number, max?: number): number {\r\n  if (min === undefined && max === undefined) {\r\n    return math.random();\r\n  }\r\n  if (min !== undefined && max === undefined) {\r\n    return math.random(min);\r\n  }\r\n  if (min === undefined && max !== undefined) {\r\n    return math.random(max);\r\n  }\r\n  return math.random(min, max);\r\n}\r\nexport function randomInt(min: number, max?: number): number {\r\n  if (max === undefined) {\r\n    if (!isValidNumeric(min)) {\r\n      throw new TypeError(\r\n        'Invalid parameter: parameter must be a number or a string number',\r\n      );\r\n    }\r\n    return math.randomInt(min);\r\n  }\r\n  if (!isValidNumeric(min) || !isValidNumeric(max)) {\r\n    throw new TypeError(\r\n      'Invalid parameter: parameter must be a number or a string number',\r\n    );\r\n  }\r\n  return math.randomInt(min, max);\r\n}\r\n\r\n// ------------------------ Relational (关系) ------------------------\r\nexport function equal(x: number | string, y: number | string): boolean {\r\n  if (!isValidNumeric(x) || !isValidNumeric(y)) {\r\n    throw new TypeError(\r\n      'Invalid parameter: parameter must be a number or a string number',\r\n    );\r\n  }\r\n  return math.equal(x, y) as boolean;\r\n}\r\nexport function unequal(x: number | string, y: number | string): boolean {\r\n  if (!isValidNumeric(x) || !isValidNumeric(y)) {\r\n    throw new TypeError(\r\n      'Invalid parameter: parameter must be a number or a string number',\r\n    );\r\n  }\r\n  return math.unequal(x, y) as boolean;\r\n}\r\nexport function larger(x: number | string, y: number | string): boolean {\r\n  if (!isValidNumeric(x) || !isValidNumeric(y)) {\r\n    throw new TypeError(\r\n      'Invalid parameter: parameter must be a number or a string number',\r\n    );\r\n  }\r\n  return math.larger(x, y) as boolean;\r\n}\r\nexport function largerEq(x: number | string, y: number | string): boolean {\r\n  if (!isValidNumeric(x) || !isValidNumeric(y)) {\r\n    throw new TypeError(\r\n      'Invalid parameter: parameter must be a number or a string number',\r\n    );\r\n  }\r\n  return math.largerEq(x, y) as boolean;\r\n}\r\nexport function smaller(x: number | string, y: number | string): boolean {\r\n  if (!isValidNumeric(x) || !isValidNumeric(y)) {\r\n    throw new TypeError(\r\n      'Invalid parameter: parameter must be a number or a string number',\r\n    );\r\n  }\r\n  return math.smaller(x, y) as boolean;\r\n}\r\nexport function smallerEq(x: number | string, y: number | string): boolean {\r\n  if (!isValidNumeric(x) || !isValidNumeric(y)) {\r\n    throw new TypeError(\r\n      'Invalid parameter: parameter must be a number or a string number',\r\n    );\r\n  }\r\n  return math.smallerEq(x, y) as boolean;\r\n}\r\n","import { math } from './config';\r\n\r\nexport function unitConversion(\r\n  value: number,\r\n  fromUnit: string,\r\n  toUnit: string,\r\n  withUnit = false,\r\n): string | number {\r\n  // const result = math.evaluate(`${value} ${fromUnit} to ${toUnit}`);\r\n  const result = math.unit(math.bignumber(value), fromUnit).to(toUnit);\r\n  return withUnit ? result.toString() : result.toNumber();\r\n}\r\n","import { add, subtract, multiply, divide } from '../index';\r\nimport { pow } from 'mathjs';\r\nimport { isValidIPv4 } from '../validation';\r\n\r\n// 将 IP 地址转换为数字\r\nfunction ipToNumber(ip: string) {\r\n  if (isValidIPv4(ip)) {\r\n    return ip.split('.').reduce((acc, octet) => add(multiply(acc, 256), parseInt(octet)), 0);\r\n  } else {\r\n    throw new Error('Invalid IP address');\r\n  }\r\n}\r\n\r\n// 将数字转换为 IP 地址\r\nfunction numberToIp(num: number) {\r\n  return [\r\n    divide(num, Number(pow(256, 3))) & 255,\r\n    divide(num, Number(pow(256, 2))) & 255,\r\n    divide(num, 256) & 255,\r\n    num & 255,\r\n  ].join('.');\r\n}\r\n\r\n// 计算子网掩码\r\nfunction calculateSubnetMask(cidrBits: number) {\r\n  return subtract(Number(pow(2, 32)), Number(pow(2, subtract(32, cidrBits))));\r\n}\r\n// 计算网络地址\r\nfunction calculateNetworkAddress(ip: string, cidrBits: number) {\r\n  const ipNum = ipToNumber(ip);\r\n  const mask = calculateSubnetMask(cidrBits);\r\n  return numberToIp(ipNum & mask);\r\n}\r\n\r\n// 计算广播地址\r\nfunction calculateBroadcastAddress(ip: string, cidrBits: number) {\r\n  const ipNum = ipToNumber(ip);\r\n  const mask = calculateSubnetMask(cidrBits);\r\n  return numberToIp(ipNum | ~mask);\r\n}\r\n\r\n// 计算可用 IP 地址范围\r\nfunction calculateIpRange(ip: string, cidrBits: number) {\r\n  const networkAddress = calculateNetworkAddress(ip, cidrBits);\r\n  const broadcastAddress = calculateBroadcastAddress(ip, cidrBits);\r\n  const firstUsable = numberToIp(add(ipToNumber(networkAddress), 1));\r\n  const lastUsable = numberToIp(subtract(ipToNumber(broadcastAddress), 1));\r\n  return { firstUsable, lastUsable };\r\n}\r\n\r\n// 计算子网中的总 IP 地址数\r\nfunction calculateTotalIps(cidrBits: number) {\r\n  return Number(pow(2, subtract(32, cidrBits)));\r\n}\r\n\r\n// 计算可用 IP 地址数（排除网络地址和广播地址）\r\nfunction calculateUsableIps(cidrBits: number) {\r\n  return subtract(calculateTotalIps(cidrBits), 2);\r\n}\r\n\r\n// 检查 IP 是否在给定的 CIDR 范围内\r\nexport function isIpInRange(ip: string, cidrIp: string, cidrBits: number) {\r\n  const ipNum = ipToNumber(ip);\r\n  const cidrIpNum = ipToNumber(cidrIp);\r\n  const mask = calculateSubnetMask(cidrBits);\r\n  return (ipNum & mask) === (cidrIpNum & mask);\r\n}\r\nexport function cidrCalculator(ip: string, cidrBits: number) {\r\n  const networkAddress = calculateNetworkAddress(ip, cidrBits);\r\n  const broadcastAddress = calculateBroadcastAddress(ip, cidrBits);\r\n  const { firstUsable, lastUsable } = calculateIpRange(ip, cidrBits);\r\n  const totalIps = calculateTotalIps(cidrBits);\r\n  const usableIps = calculateUsableIps(cidrBits);\r\n\r\n  return {\r\n    networkAddress,\r\n    broadcastAddress,\r\n    firstUsableIp: firstUsable,\r\n    lastUsableIp: lastUsable,\r\n    totalIps,\r\n    usableIps,\r\n    subnetMask: numberToIp(calculateSubnetMask(cidrBits)),\r\n  };\r\n}\r\n","import {\r\n  CurrencyCode,\r\n  CurrencyCodeType,\r\n  getCurrencySeparators,\r\n} from '../index';\r\n\r\nexport interface NumberDetails {\r\n  /**\r\n   * 原始数字的字符串形式\r\n   */\r\n  originalString: string;\r\n  /**\r\n   * 小数点在字符串中的位置\r\n   */\r\n  decimalIndex: number;\r\n  /**\r\n   * 小数部分的字符数量\r\n   */\r\n  decimalLength: number;\r\n  /**\r\n   * 数字的整数部分\r\n   */\r\n  integerPart: string;\r\n  /**\r\n   * 数字的小数部分\r\n   */\r\n  decimalPart: string;\r\n  /**\r\n   * 整数部分的字符数量\r\n   */\r\n  integerLength: number;\r\n  /**\r\n   * 是否为负数\r\n   */\r\n  isNegative: boolean;\r\n}\r\n\r\n/**\r\n * 解析数字的各个组成部分及其属性。\r\n *\r\n * @param value - 要解析的数字。\r\n * @param locale - 货币代码，默认为CNY（人民币）。用于确定小数点分隔符。\r\n * @returns 返回一个对象，包含以下属性：\r\n *   - `originalString`: 原始数字的字符串形式。\r\n *   - `decimalIndex`: 小数点在字符串中的位置（如果存在）。\r\n *   - `integerPart`: 数字的整数部分。\r\n *   - `decimalPart`: 数字的小数部分。\r\n *   - `integerLength`: 整数部分的字符数量。\r\n *   - `decimalLength`: 小数部分的字符数量。\r\n *   - `isNegative`: 是否为负数\r\n */\r\nexport const parseNumberDetails = (\r\n  value: number,\r\n  locale: CurrencyCodeType = CurrencyCode.CNY,\r\n): NumberDetails => {\r\n  const originalString = value.toString();\r\n  const { decimalSeparator } = getCurrencySeparators(locale);\r\n  const isNegative = value < 0;\r\n  const unsignedOriginalString = isNegative ? originalString.slice(1) : originalString;\r\n  const [integerPart, decimalPart = ''] = unsignedOriginalString.split(decimalSeparator);\r\n  const decimalIndex = integerPart.length;\r\n  const decimalLength = decimalPart.length;\r\n  const integerLength = integerPart.length;\r\n  return {\r\n    originalString,\r\n    decimalIndex,\r\n    integerPart,\r\n    decimalPart,\r\n    integerLength,\r\n    decimalLength,\r\n    isNegative,\r\n  };\r\n};\r\n","import { parseNumberDetails, computeExpression } from '..';\r\n\r\nexport function animateNumericCount(\r\n  start: number,\r\n  end: number,\r\n  duration: number,\r\n  callback: (value: number) => void,\r\n  decimalPlaces?: number,\r\n): () => void {\r\n  if (decimalPlaces === undefined) {\r\n    const { decimalLength } = parseNumberDetails(start);\r\n    decimalPlaces = decimalLength;\r\n  }\r\n  if (decimalPlaces === 0) {\r\n    const { decimalLength } = parseNumberDetails(end);\r\n    decimalPlaces = decimalLength;\r\n  }\r\n  const startTime = performance.now();\r\n  const difference = Number(computeExpression(`${end} - ${start}`));\r\n\r\n  const roundToDecimal = (num: number): number => {\r\n    const factor = Math.pow(10, decimalPlaces);\r\n    return Number(computeExpression(`${Math.round(Number(computeExpression(`${num} * ${factor}`)))} / ${factor}`));\r\n  };\r\n\r\n  const animate = (currentTime: number) => {\r\n    const elapsedTime = Number(computeExpression(`${currentTime} - ${startTime}`));\r\n    if (elapsedTime >= duration) {\r\n      callback(roundToDecimal(end));\r\n      return;\r\n    }\r\n\r\n    const progress = elapsedTime / duration;\r\n    const currentValue = Number(computeExpression(`${start} + ${difference} * ${progress}`));\r\n    callback(roundToDecimal(currentValue));\r\n    requestAnimationFrame(animate);\r\n  };\r\n\r\n  requestAnimationFrame(animate);\r\n\r\n  // 返回一个取消动画的函数\r\n  return () => {\r\n    callback(roundToDecimal(end));\r\n  };\r\n}\r\n"]}