@daimo/pay
Version:
Seamless crypto payments. Onboard users from any chain, any coin into your app with one click.
46 lines (43 loc) • 1.53 kB
JavaScript
import { formatUnits } from 'viem';
const USD_DECIMALS = 2;
function roundDecimals(value, decimals, round) {
const factor = 10 ** decimals;
const multiplied = value * factor;
let rounded;
if (round === "up") {
rounded = Math.ceil(multiplied);
} else if (round === "down") {
rounded = Math.floor(multiplied);
} else {
rounded = Math.round(multiplied);
}
return (rounded / factor).toFixed(decimals);
}
function formatUsd(usd, round = "down") {
return new Intl.NumberFormat("en-US", {
style: "currency",
currency: "USD"
}).format(Number(roundUsd(usd, round)));
}
function roundUsd(usd, round = "down") {
return roundDecimals(usd, USD_DECIMALS, round);
}
function roundTokenAmount(amount, token, round = "down") {
return roundDecimals(
Number(formatUnits(BigInt(amount), token.decimals)),
token.displayDecimals,
round
);
}
function roundTokenAmountUnits(amountUnits, token, round = "down") {
return roundDecimals(amountUnits, token.displayDecimals, round);
}
function usdToRoundedTokenAmount(usd, token, round = "down") {
return roundTokenAmountUnits(usd / token.usd, token, round);
}
function tokenAmountToRoundedUsd(amount, token, round = "nearest") {
const amountUnits = formatUnits(BigInt(amount), token.decimals);
return roundUsd(Number(amountUnits) * token.usd, round);
}
export { USD_DECIMALS, formatUsd, roundDecimals, roundTokenAmount, roundTokenAmountUnits, roundUsd, tokenAmountToRoundedUsd, usdToRoundedTokenAmount };
//# sourceMappingURL=format.js.map