{"version":3,"file":"MiniDecimal.mjs","sources":["../../../../../../../packages/components/input-number/src/utils/MiniDecimal.ts"],"sourcesContent":["import type { DecimalClass, ValueType } from '../interface';\nimport { getNumberPrecision, isE, num2str, trimNumber, validateNumber } from './numberUtil';\nimport { supportBigInt } from './supportUtil';\n\nfunction isEmpty(value: ValueType) {\n  return (!value && value !== 0 && !Number.isNaN(value)) || !String(value).trim();\n}\n\n/**\n * We can remove this when IE not support anymore\n */\nexport class NumberDecimal implements DecimalClass {\n  origin = '';\n  number: number;\n  empty: boolean;\n\n  constructor(value: ValueType) {\n    if (isEmpty(value)) {\n      this.empty = true;\n      return;\n    }\n\n    this.origin = String(value);\n    this.number = Number(value);\n  }\n\n  negate() {\n    return new NumberDecimal(-this.toNumber());\n  }\n\n  add(value: ValueType) {\n    if (this.isInvalidate())\n      return new NumberDecimal(value);\n\n    const target = Number(value);\n\n    if (Number.isNaN(target))\n      return this;\n\n    const number = this.number + target;\n\n    // [Legacy] Back to safe integer\n    if (number > Number.MAX_SAFE_INTEGER)\n      return new NumberDecimal(Number.MAX_SAFE_INTEGER);\n\n    if (number < Number.MIN_SAFE_INTEGER)\n      return new NumberDecimal(Number.MIN_SAFE_INTEGER);\n\n    const maxPrecision = Math.max(getNumberPrecision(this.number), getNumberPrecision(target));\n    return new NumberDecimal(number.toFixed(maxPrecision));\n  }\n\n  isEmpty() {\n    return this.empty;\n  }\n\n  isNaN() {\n    return Number.isNaN(this.number);\n  }\n\n  isInvalidate() {\n    return this.isEmpty() || this.isNaN();\n  }\n\n  equals(target: DecimalClass) {\n    return this.toNumber() === target?.toNumber();\n  }\n\n  lessEquals(target: DecimalClass) {\n    return this.add(target.negate().toString()).toNumber() <= 0;\n  }\n\n  toNumber() {\n    return this.number;\n  }\n\n  toString(safe = true) {\n    if (!safe)\n      return this.origin;\n\n    if (this.isInvalidate())\n      return '';\n\n    return num2str(this.number);\n  }\n}\n\nexport class BigIntDecimal implements DecimalClass {\n  origin = '';\n  negative: boolean;\n  integer: bigint;\n  decimal: bigint;\n  /** BigInt will convert `0009` to `9`. We need record the len of decimal */\n  decimalLen: number;\n  empty: boolean;\n  nan: boolean;\n\n  constructor(value: string | number) {\n    if (isEmpty(value)) {\n      this.empty = true;\n      return;\n    }\n\n    this.origin = String(value);\n\n    // Act like Number convert\n    if (value === '-' || Number.isNaN(value)) {\n      this.nan = true;\n      return;\n    }\n\n    let mergedValue = value;\n\n    // We need convert back to Number since it require `toFixed` to handle this\n    if (isE(mergedValue))\n      mergedValue = Number(mergedValue);\n\n    mergedValue = typeof mergedValue === 'string' ? mergedValue : num2str(mergedValue);\n\n    if (validateNumber(mergedValue)) {\n      const trimRet = trimNumber(mergedValue);\n      this.negative = trimRet.negative;\n      const numbers = trimRet.trimStr.split('.');\n      this.integer = BigInt(numbers[0]);\n      const decimalStr = numbers[1] || '0';\n      this.decimal = BigInt(decimalStr);\n      this.decimalLen = decimalStr.length;\n    } else {\n      this.nan = true;\n    }\n  }\n\n  private getMark() {\n    return this.negative ? '-' : '';\n  }\n\n  private getIntegerStr() {\n    return this.integer.toString();\n  }\n\n  private getDecimalStr() {\n    return this.decimal.toString().padStart(this.decimalLen, '0');\n  }\n\n  /**\n   * Align BigIntDecimal with same decimal length. e.g. 12.3 + 5 = 1230000\n   * This is used for add function only.\n   */\n  private alignDecimal(decimalLength: number): bigint {\n    const str = `${this.getMark()}${this.getIntegerStr()}${this.getDecimalStr().padEnd(\n      decimalLength,\n      '0',\n    )}`;\n    return BigInt(str);\n  }\n\n  negate() {\n    const clone = new BigIntDecimal(this.toString());\n    clone.negative = !clone.negative;\n    return clone;\n  }\n\n  add(value: ValueType): BigIntDecimal {\n    if (this.isInvalidate())\n      return new BigIntDecimal(value);\n\n    const offset = new BigIntDecimal(value);\n    if (offset.isInvalidate())\n      return this;\n\n    const maxDecimalLength = Math.max(this.getDecimalStr().length, offset.getDecimalStr().length);\n    const myAlignedDecimal = this.alignDecimal(maxDecimalLength);\n    const offsetAlignedDecimal = offset.alignDecimal(maxDecimalLength);\n\n    const valueStr = (myAlignedDecimal + offsetAlignedDecimal).toString();\n\n    // We need fill string length back to `maxDecimalLength` to avoid parser failed\n    const { negativeStr, trimStr } = trimNumber(valueStr);\n    const hydrateValueStr = `${negativeStr}${trimStr.padStart(maxDecimalLength + 1, '0')}`;\n\n    return new BigIntDecimal(\n      `${hydrateValueStr.slice(0, -maxDecimalLength)}.${hydrateValueStr.slice(-maxDecimalLength)}`,\n    );\n  }\n\n  isEmpty() {\n    return this.empty;\n  }\n\n  isNaN() {\n    return this.nan;\n  }\n\n  isInvalidate() {\n    return this.isEmpty() || this.isNaN();\n  }\n\n  equals(target: DecimalClass) {\n    return this.toString() === target?.toString();\n  }\n\n  lessEquals(target: DecimalClass) {\n    return this.add(target.negate().toString()).toNumber() <= 0;\n  }\n\n  toNumber() {\n    if (this.isNaN())\n      return Number.NaN;\n\n    return Number(this.toString());\n  }\n\n  toString(safe = true) {\n    if (!safe)\n      return this.origin;\n\n    if (this.isInvalidate())\n      return '';\n\n    return trimNumber(`${this.getMark()}${this.getIntegerStr()}.${this.getDecimalStr()}`).fullStr;\n  }\n}\n\nexport default function getMiniDecimal(value: ValueType): DecimalClass {\n  // We use BigInt here.\n  // Will fallback to Number if not support.\n  if (supportBigInt())\n    return new BigIntDecimal(value);\n\n  return new NumberDecimal(value);\n}\n\n/**\n * Align the logic of toFixed to around like 1.5 => 2.\n * If set `cutOnly`, will just remove the over decimal part.\n */\nexport function toFixed(numStr: string, separatorStr: string, precision?: number, cutOnly = false) {\n  if (numStr === '')\n    return '';\n\n  const { negativeStr, integerStr, decimalStr } = trimNumber(numStr);\n  const precisionDecimalStr = `${separatorStr}${decimalStr}`;\n\n  const numberWithoutDecimal = `${negativeStr}${integerStr}`;\n\n  if (precision >= 0) {\n    // We will get last + 1 number to check if need advanced number\n    const advancedNum = Number(decimalStr[precision]);\n\n    if (advancedNum >= 5 && !cutOnly) {\n      const advancedDecimal = getMiniDecimal(numStr).add(\n        `${negativeStr}0.${'0'.repeat(precision)}${10 - advancedNum}`,\n      );\n      return toFixed(advancedDecimal.toString(), separatorStr, precision, cutOnly);\n    }\n\n    if (precision === 0)\n      return numberWithoutDecimal;\n\n    return `${numberWithoutDecimal}${separatorStr}${decimalStr\n      .padEnd(precision, '0')\n      .slice(0, precision)}`;\n  }\n\n  if (precisionDecimalStr === '.0')\n    return numberWithoutDecimal;\n\n  return `${numberWithoutDecimal}${precisionDecimalStr}`;\n}\n"],"names":[],"mappings":"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"}