jsonblade
Version:
A powerful and modular JSON template engine with extensible filters
102 lines • 3.21 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.numberFilters = void 0;
exports.registerNumberFilters = registerNumberFilters;
const filter_registry_1 = require("../filter-registry");
const numberFilters = {
round: (v, ...args) => {
const decimals = Number(args[0]) || 0;
const num = Number(v);
return isNaN(num) ? 0 : Number(num.toFixed(decimals));
},
ceil: (v) => {
const num = Number(v);
return isNaN(num) ? 0 : Math.ceil(num);
},
floor: (v) => {
const num = Number(v);
return isNaN(num) ? 0 : Math.floor(num);
},
abs: (v) => {
const num = Number(v);
return isNaN(num) ? 0 : Math.abs(num);
},
currency: (v, ...args) => {
const currency = args[0] || "EUR";
const num = Number(v);
if (isNaN(num))
return "0,00 €";
// Format number manually for consistent output
const formatted = num
.toFixed(2)
.replace(/\B(?=(\d{3})+(?!\d))/g, " ")
.replace(".", ",");
const symbols = {
EUR: "€",
USD: "$",
GBP: "£",
};
const symbol = symbols[currency] || currency;
return `${formatted} ${symbol}`;
},
percentage: (v, ...args) => {
const decimals = Number(args[0]) || 0;
const num = Number(v);
if (isNaN(num))
return "0%";
return `${(num * 100).toFixed(decimals)}%`;
},
add: (v, ...args) => {
const addend = Number(args[0]) || 0;
const num = Number(v);
if (isNaN(num))
return addend;
const result = num + addend;
return Math.round(result * 10000) / 10000;
},
subtract: (v, ...args) => {
const subtrahend = Number(args[0]) || 0;
const num = Number(v);
return isNaN(num) ? -subtrahend : num - subtrahend;
},
multiply: (v, ...args) => {
const multiplier = Number(args[0]) || 1;
const num = Number(v);
if (isNaN(num))
return 0;
const result = num * multiplier;
return Math.round(result * 10000) / 10000;
},
divide: (v, ...args) => {
const divisor = Number(args[0]) || 1;
const num = Number(v);
if (isNaN(num) || divisor === 0)
return 0;
return num / divisor;
},
min: (v, ...args) => {
const compareValue = Number(args[0]);
const num = Number(v);
if (isNaN(num))
return compareValue || 0;
if (isNaN(compareValue))
return num;
return Math.min(num, compareValue);
},
max: (v, ...args) => {
const compareValue = Number(args[0]);
const num = Number(v);
if (isNaN(num))
return compareValue || 0;
if (isNaN(compareValue))
return num;
return Math.max(num, compareValue);
},
};
exports.numberFilters = numberFilters;
function registerNumberFilters() {
Object.entries(numberFilters).forEach(([name, fn]) => {
(0, filter_registry_1.registerFilter)(name, fn);
});
}
//# sourceMappingURL=number-filters.js.map