in core/utils.js [58:136]
format(num, format) {
if (!format) {
return num.toString();
}
const standardMatch = /^([a-zA-Z])(\d+)?(.+)?$/i.exec(format);
if (!standardMatch) {
return format;
}
/** @type {string} */
const formatName = standardMatch[1];
/** @type {number} */
const digitNum = standardMatch[2] ? Number.parseInt(standardMatch[2]) : undefined;
/** @type {string} */
const extraArg = standardMatch[3];
switch (formatName) {
case "c":
case "C":
if (!extraArg) {
throw new Error("Number currency (C) format must include currency code, e.g. USD, CNY.");
}
return Intl.NumberFormat(undefined, { style: "currency", currency: extraArg, minimumFractionDigits: digitNum }).format(num);
case "d":
case "D":
if (!Number.isInteger(num)) {
throw new Error("Decimal (D) format must be applied on an integer.");
}
return Intl.NumberFormat(undefined, { style: "decimal", minimumIntegerDigits: digitNum, useGrouping: false }).format(num);
case "e":
case "E":
return num.toExponential(digitNum);
case "f":
case "F":
return num.toFixed(digitNum >= 0 ? digitNum : 3);
case "g":
case "G":
return num.toPrecision(digitNum);
case "n":
case "N":
return Intl.NumberFormat(undefined, { style: "decimal", minimumFractionDigits: digitNum, useGrouping: true }).format(num);
case "p":
case "P":
return Intl.NumberFormat(undefined, { style: "percent", minimumFractionDigits: digitNum >= 0 ? digitNum : 2 }).format(num);
case "r":
case "R":
return num.toString(10);
case "x":
case "X":
if (!Number.isInteger(num)) {
throw new Error("Hexadecimal (X) format must be applied on an integer.");
}
const numStr = num.toString(16);
if (digitNum) {
return numStr.padStart(digitNum, "0");
}
return numStr;
default:
throw new Error(`Unsupported numeric format: ${format}`);
}
}