@aeternity/aepp-sdk
Version:
SDK for the æternity blockchain
113 lines (107 loc) • 3.53 kB
JavaScript
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