UNPKG

4.28 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, '__esModule', { value: true });
4
5var slicedToArray = require('./slicedToArray-0711941d.js');
6require('./unsupportedIterableToArray-68db1d3b.js');
7var toConsumableArray = require('./toConsumableArray-d8a4a2c3.js');
8var math = require('./math-f4029164.js');
9var characters = require('./characters.js');
10
11/**
12 * Formats an integer based on a limited range.
13 *
14 * Example:
15 * formatIntegerRange(234, 0, 99, '+') === "99+"
16 *
17 * @param {number} value The number to format.
18 * @param {number} min Range minimum.
19 * @param {number} max Range maximum.
20 * @param {number} maxSuffix Suffix to add if the value exceeds the max.
21 */
22
23function formatIntegerRange() {
24 var value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : -1;
25 var min = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
26 var max = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 99;
27 var maxSuffix = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '';
28 value = parseInt(value, 10);
29
30 if (value <= min) {
31 return "".concat(parseInt(min, 10));
32 }
33
34 if (value > max) {
35 return "".concat(parseInt(max, 10)).concat(maxSuffix);
36 }
37
38 return String(value);
39}
40/**
41 * Formats a number for display purposes.
42 *
43 * This function is not using Intl.NumberFormat() to be compatible with big
44 * integers expressed as string, or BigInt-like objects.
45 *
46 * @param {BigInt|string|number} number Number to convert
47 * @returns {string}
48 */
49
50function formatNumber(number) {
51 var numAsString = String(number);
52
53 var _numAsString$split = numAsString.split('.'),
54 _numAsString$split2 = slicedToArray._slicedToArray(_numAsString$split, 2),
55 integer = _numAsString$split2[0],
56 decimals = _numAsString$split2[1];
57
58 return toConsumableArray._toConsumableArray(integer).reverse().reduce(function (result, digit, index) {
59 return digit + (index > 0 && index % 3 === 0 ? ',' : '') + result;
60 }, decimals ? ".".concat(decimals) : '');
61}
62/**
63 * Formats a token amount for display purposes.
64 *
65 * @param {BigInt|string|number} amount Number to round
66 * @param {BigInt|string|number} decimals Decimal placement for amount
67 * @param {BigInt|string|number} digits Rounds the number to a given decimal place
68 * @param {boolean} options.displaySign Decides if the sign should be displayed
69 * @param {string} options.symbol Symbol for the token amount
70 * @returns {string}
71 */
72
73function formatTokenAmount(amount, decimals) {
74 var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},
75 _ref$digits = _ref.digits,
76 digits = _ref$digits === void 0 ? 2 : _ref$digits,
77 _ref$symbol = _ref.symbol,
78 symbol = _ref$symbol === void 0 ? '' : _ref$symbol,
79 _ref$displaySign = _ref.displaySign,
80 displaySign = _ref$displaySign === void 0 ? false : _ref$displaySign;
81
82 amount = math.JSBI.BigInt(String(amount));
83 decimals = math.JSBI.BigInt(String(decimals));
84 digits = math.JSBI.BigInt(String(digits));
85
86 if (math.JSBI.lessThan(decimals, 0)) {
87 throw new Error('formatTokenAmount(): decimals cannot be negative');
88 }
89
90 if (math.JSBI.lessThan(digits, 0)) {
91 throw new Error('formatTokenAmount(): digits cannot be negative');
92 }
93
94 var _0 = math.JSBI.BigInt(0);
95
96 var _10 = math.JSBI.BigInt(10);
97
98 var negative = math.JSBI.lessThan(amount, _0);
99
100 if (negative) {
101 amount = math.JSBI.unaryMinus(amount);
102 }
103
104 var amountConverted = math.JSBI.BigInt(math.divideRoundBigInt(amount, math.JSBI.exponentiate(_10, math.JSBI.subtract(decimals, digits))));
105 var leftPart = formatNumber(math.JSBI.divide(amountConverted, math.JSBI.exponentiate(_10, digits)));
106 var rightPart = String(math.JSBI.remainder(amountConverted, math.JSBI.exponentiate(_10, digits))).padStart(digits, '0').replace(/0+$/, '');
107 return [displaySign ? negative ? '-' : '+' : '', leftPart, rightPart ? ".".concat(rightPart) : '', symbol ? "".concat(characters.NO_BREAK_SPACE).concat(symbol) : ''].join('');
108}
109
110exports.formatIntegerRange = formatIntegerRange;
111exports.formatNumber = formatNumber;
112exports.formatTokenAmount = formatTokenAmount;
113//# sourceMappingURL=format.js.map