UNPKG

@digifi/jexl-functions

Version:
46 lines (45 loc) 2.04 kB
"use strict"; 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, }; });