UNPKG

@aeternity/aepp-sdk

Version:

SDK for the æternity blockchain

113 lines (107 loc) 3.53 kB
import BigNumber from 'bignumber.js'; import { isBigNumber } from './bignumber.js'; import { ArgumentError } from './errors.js'; /** * @deprecated no replacement implemented yet * @category utils */ export let AE_AMOUNT_FORMATS = /*#__PURE__*/function (AE_AMOUNT_FORMATS) { AE_AMOUNT_FORMATS["AE"] = "ae"; AE_AMOUNT_FORMATS["MILI_AE"] = "miliAE"; AE_AMOUNT_FORMATS["MICRO_AE"] = "microAE"; AE_AMOUNT_FORMATS["NANO_AE"] = "nanoAE"; AE_AMOUNT_FORMATS["PICO_AE"] = "picoAE"; AE_AMOUNT_FORMATS["FEMTO_AE"] = "femtoAE"; AE_AMOUNT_FORMATS["AETTOS"] = "aettos"; return AE_AMOUNT_FORMATS; }({}); /** * DENOMINATION_MAGNITUDE */ const DENOMINATION_MAGNITUDE = { [AE_AMOUNT_FORMATS.AE]: 0, [AE_AMOUNT_FORMATS.MILI_AE]: -3, [AE_AMOUNT_FORMATS.MICRO_AE]: -6, [AE_AMOUNT_FORMATS.NANO_AE]: -9, [AE_AMOUNT_FORMATS.PICO_AE]: -12, [AE_AMOUNT_FORMATS.FEMTO_AE]: -15, [AE_AMOUNT_FORMATS.AETTOS]: -18 }; /** * Convert amount from one to other denomination * @deprecated no replacement implemented yet * @category utils * @param value - amount to convert * @param options - options * @param options.denomination - denomination of amount, can be ['ae', 'aettos'] * @param options.targetDenomination - target denomination, * can be ['ae', 'aettos'] */ export const formatAmount = (value, { denomination = AE_AMOUNT_FORMATS.AETTOS, targetDenomination = AE_AMOUNT_FORMATS.AETTOS }) => { if (!isBigNumber(value)) throw new ArgumentError('value', 'a number', value); return new BigNumber(typeof value === 'bigint' ? value.toString() : value).shiftedBy(DENOMINATION_MAGNITUDE[denomination] - DENOMINATION_MAGNITUDE[targetDenomination]).toFixed(); }; /** * Convert amount to AE * @deprecated no replacement implemented yet * @category utils * @param value - amount to convert * @param options - options * @param options.denomination - denomination of amount, can be ['ae', 'aettos'] */ export const toAe = (value, { denomination = AE_AMOUNT_FORMATS.AETTOS } = {}) => formatAmount(value, { denomination, targetDenomination: AE_AMOUNT_FORMATS.AE }); /** * Convert amount to aettos * @deprecated no replacement implemented yet * @category utils * @param value - amount to convert * @param options - options * @param options.denomination - denomination of amount, can be ['ae', 'aettos'] */ export const toAettos = (value, { denomination = AE_AMOUNT_FORMATS.AE } = {}) => formatAmount(value, { denomination }); const prefixes = [{ name: 'exa', magnitude: 18 }, { name: 'giga', magnitude: 9 }, { name: '', magnitude: 0 }, { name: 'pico', magnitude: -12 }]; const getNearestPrefix = exponent => prefixes.reduce((p, n) => Math.abs(n.magnitude - exponent) < Math.abs(p.magnitude - exponent) ? n : p); const getLowerBoundPrefix = exponent => { var _prefixes$find; return (_prefixes$find = prefixes.find(p => p.magnitude <= exponent)) !== null && _prefixes$find !== void 0 ? _prefixes$find : prefixes[prefixes.length - 1]; }; /** * @deprecated no replacement implemented yet * @category utils */ export const prefixedAmount = rawValue => { var _value$e; const value = new BigNumber(rawValue); const exp = (_value$e = value.e) !== null && _value$e !== void 0 ? _value$e : 0; const { name, magnitude } = (exp < 0 ? getNearestPrefix : getLowerBoundPrefix)(exp); const v = value.shiftedBy(-magnitude).precision(9 + Math.min(exp - magnitude, 0)).toFixed(); return `${v}${name !== '' ? ' ' : ''}${name}`; }; //# sourceMappingURL=amount-formatter.js.map