{"version":3,"file":"currencyFormatting.mjs","sources":["../../src/moneyInput/currencyFormatting.ts"],"sourcesContent":["import { formatAmount, formatNumber } from '@transferwise/formatting';\n\nimport { DEFAULT_LOCALE } from '../common/locale';\n\nexport { formatAmount, formatNumber };\n\n// TODO: do not duplicate this between formatting and components\nconst currencyDecimals: Record<string, number> = {\n  BIF: 0,\n  BYR: 0,\n  CLP: 0,\n  DJF: 0,\n  GNF: 0,\n  JPY: 0,\n  KMF: 0,\n  KRW: 0,\n  MGA: 0,\n  PYG: 0,\n  RWF: 0,\n  VND: 0,\n  VUV: 0,\n  XAF: 0,\n  XOF: 0,\n  XPF: 0,\n  // technically HUF does have decimals, but due to the exchange rate banks\n  // do not accept decimal amounts\n  HUF: 0,\n\n  BHD: 3,\n  JOD: 3,\n  KWD: 3,\n  OMR: 3,\n  TND: 3,\n};\n\nconst DEFAULT_CURRENCY_DECIMALS = 2;\n\nfunction isNumberLocaleSupported() {\n  const number = 1234;\n  const numberString = number.toLocaleString && number.toLocaleString(DEFAULT_LOCALE);\n  return numberString === '1,234';\n}\n\nfunction getValidLocale(locale: string) {\n  try {\n    const noUnderscoreLocale = locale.replace(/_/, '-');\n\n    Intl.NumberFormat(noUnderscoreLocale);\n    return noUnderscoreLocale;\n  } catch {\n    return DEFAULT_LOCALE;\n  }\n}\n\nexport function getCurrencyDecimals(currency: string) {\n  const upperCaseCurrency = currency.toUpperCase();\n  return currencyDecimals[upperCaseCurrency] ?? DEFAULT_CURRENCY_DECIMALS;\n}\n\nfunction getDecimalSeparator(locale: string) {\n  return isNumberLocaleSupported() ? (1.1).toLocaleString(locale)[1] : '.';\n}\n\nexport function parseAmount(\n  number: string,\n  currency: string,\n  locale = DEFAULT_LOCALE,\n  decimals?: number,\n) {\n  const validLocale = getValidLocale(locale);\n\n  const currencyDefault = getCurrencyDecimals(currency);\n  const precision = currencyDefault === 0 ? 0 : (decimals ?? currencyDefault);\n  const groupSeparator = isNumberLocaleSupported() ? (10000).toLocaleString(validLocale)[2] : ',';\n  const decimalSeparator = getDecimalSeparator(validLocale);\n  const numberWithStandardDecimalSeparator = (number || '')\n    .replace(new RegExp(`\\\\${groupSeparator}`, 'g'), '')\n    .replace(new RegExp(`\\\\${decimalSeparator}`, 'g'), '.')\n    .replace(/[^0-9.]/g, '');\n  const parsedAmount = Number.parseFloat(\n    Number.parseFloat(numberWithStandardDecimalSeparator).toFixed(precision),\n  );\n  return Math.abs(parsedAmount);\n}\n"],"names":["currencyDecimals","BIF","BYR","CLP","DJF","GNF","JPY","KMF","KRW","MGA","PYG","RWF","VND","VUV","XAF","XOF","XPF","HUF","BHD","JOD","KWD","OMR","TND","DEFAULT_CURRENCY_DECIMALS","isNumberLocaleSupported","number","numberString","toLocaleString","DEFAULT_LOCALE","getValidLocale","locale","noUnderscoreLocale","replace","Intl","NumberFormat","getCurrencyDecimals","currency","upperCaseCurrency","toUpperCase","getDecimalSeparator","parseAmount","decimals","validLocale","currencyDefault","precision","groupSeparator","decimalSeparator","numberWithStandardDecimalSeparator","RegExp","parsedAmount","Number","parseFloat","toFixed","Math","abs"],"mappings":"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"}