ethers.js/packages/units/lib.esm/index.js

78 lines
2.3 KiB
JavaScript
Raw Permalink Normal View History

2019-05-14 18:48:48 -04:00
"use strict";
import { formatFixed, parseFixed } from "@ethersproject/bignumber";
import { Logger } from "@ethersproject/logger";
import { version } from "./_version";
const logger = new Logger(version);
const names = [
2019-05-14 18:48:48 -04:00
"wei",
"kwei",
"mwei",
"gwei",
"szabo",
"finney",
"ether",
];
// Some environments have issues with RegEx that contain back-tracking, so we cannot
// use them.
export function commify(value) {
2019-11-20 18:57:38 +09:00
const comps = String(value).split(".");
2019-05-14 18:48:48 -04:00
if (comps.length > 2 || !comps[0].match(/^-?[0-9]*$/) || (comps[1] && !comps[1].match(/^[0-9]*$/)) || value === "." || value === "-.") {
2019-08-02 02:10:58 -04:00
logger.throwArgumentError("invalid value", "value", value);
2019-05-14 18:48:48 -04:00
}
// Make sure we have at least one whole digit (0 if none)
let whole = comps[0];
let negative = "";
2019-05-14 18:48:48 -04:00
if (whole.substring(0, 1) === "-") {
negative = "-";
whole = whole.substring(1);
}
// Make sure we have at least 1 whole digit with no leading zeros
while (whole.substring(0, 1) === "0") {
whole = whole.substring(1);
}
if (whole === "") {
whole = "0";
}
let suffix = "";
2019-05-14 18:48:48 -04:00
if (comps.length === 2) {
suffix = "." + (comps[1] || "0");
}
2019-11-20 18:57:38 +09:00
const formatted = [];
2019-05-14 18:48:48 -04:00
while (whole.length) {
if (whole.length <= 3) {
formatted.unshift(whole);
break;
}
else {
2019-11-20 18:57:38 +09:00
const index = whole.length - 3;
2019-05-14 18:48:48 -04:00
formatted.unshift(whole.substring(index));
whole = whole.substring(0, index);
}
}
return negative + formatted.join(",") + suffix;
}
export function formatUnits(value, unitName) {
2019-05-14 18:48:48 -04:00
if (typeof (unitName) === "string") {
2019-11-20 18:57:38 +09:00
const index = names.indexOf(unitName);
2019-05-14 18:48:48 -04:00
if (index !== -1) {
unitName = 3 * index;
}
}
return formatFixed(value, (unitName != null) ? unitName : 18);
2019-05-14 18:48:48 -04:00
}
export function parseUnits(value, unitName) {
2019-05-14 18:48:48 -04:00
if (typeof (unitName) === "string") {
2019-11-20 18:57:38 +09:00
const index = names.indexOf(unitName);
2019-05-14 18:48:48 -04:00
if (index !== -1) {
unitName = 3 * index;
}
}
return parseFixed(value, (unitName != null) ? unitName : 18);
2019-05-14 18:48:48 -04:00
}
export function formatEther(wei) {
2019-05-14 18:48:48 -04:00
return formatUnits(wei, 18);
}
export function parseEther(ether) {
2019-05-14 18:48:48 -04:00
return parseUnits(ether, 18);
}