@digifi/jexl-functions
Version:
Package with available JEXL functions
46 lines (45 loc) • 2.04 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const module_1 = require("../utils/module");
const errors_1 = require("../errors");
exports.default = (0, module_1.createModule)(({ coerceToNumber, validateTextLength }) => {
const MONETARY_FORMAT_MAX_CURRENCY_SYMBOL_LENGTH = 5;
const MONETARY_FORMAT_CURRENCY_POSITIONS = ['left', 'right'];
const MONETARYFORMAT = (value, fractionDigits = 2, useGrouping = true, currencySymbol = '$', currencyPosition = 'left') => {
const coercedValue = coerceToNumber(value);
if (typeof fractionDigits !== 'number') {
throw new errors_1.JexlFunctionExecutionError('Fraction digits must be a number');
}
if (typeof useGrouping !== 'boolean') {
throw new errors_1.JexlFunctionExecutionError('Use grouping must be a boolean');
}
if (typeof currencySymbol !== 'string') {
throw new errors_1.JexlFunctionExecutionError('Currency symbol must be a string');
}
validateTextLength(currencySymbol, MONETARY_FORMAT_MAX_CURRENCY_SYMBOL_LENGTH);
if (typeof currencyPosition !== 'string') {
throw new errors_1.JexlFunctionExecutionError('Currency position must be a string');
}
if (!MONETARY_FORMAT_CURRENCY_POSITIONS.includes(currencyPosition)) {
throw new errors_1.JexlFunctionExecutionError('Currency position must be either "left" or "right"');
}
if (isNaN(coercedValue)) {
return value;
}
let formattedValue = coercedValue.toLocaleString('en-US', {
minimumFractionDigits: fractionDigits,
maximumFractionDigits: fractionDigits,
useGrouping,
});
if (currencyPosition === 'left') {
formattedValue = `${currencySymbol}${formattedValue}`;
}
else {
formattedValue = `${formattedValue}${currencySymbol}`;
}
return formattedValue;
};
return {
MONETARYFORMAT,
};
});