UNPKG

@factoryfour/jexl

Version:

Factory Four Jexl Implementation

147 lines (146 loc) 5.94 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.jexl = exports.evaluateString = exports.evaluateBoolean = void 0; var jexl_1 = __importDefault(require("jexl")); exports.jexl = jexl_1.default; var dateformat_1 = __importDefault(require("dateformat")); var util_1 = require("./util"); var type_check_1 = require("@factoryfour/type-check"); jexl_1.default.addTransform('date', function (val, format) { if ((0, util_1.isValidShortIsoDate)(val)) { return (0, dateformat_1.default)((0, util_1.isoDateToJsDate)(val), format); } return (0, dateformat_1.default)(val, format); }); jexl_1.default.addTransform('longISODate', function (val, format) { if ((0, util_1.isValidIsoDate)(val)) { return (0, dateformat_1.default)((0, util_1.isoDateToJsDate)(val), format); } return (0, dateformat_1.default)(val, format); }); jexl_1.default.addTransform('round', function (val) { return Math.round(val); }); jexl_1.default.addTransform('floor', function (val) { return Math.floor(val); }); jexl_1.default.addTransform('ceil', function (val) { return Math.ceil(val); }); jexl_1.default.addTransform('length', function (data) { if ((0, type_check_1.isArray)(data) || (0, type_check_1.isString)(data)) { return data.length; } if ((0, type_check_1.isObject)(data)) { return Object.keys(data).length; } return 0; }); jexl_1.default.addTransform('count', function (data, match) { var dataArray = [data]; if ((0, type_check_1.isArray)(data)) { dataArray = data; } if ((0, type_check_1.isObject)(data)) { dataArray = Object.keys(data).map(function (key) { return data[key]; }); } if (match !== undefined) { dataArray = dataArray.filter(function (item) { return item === match; }); } return dataArray.length; }); jexl_1.default.addTransform('join', function (data, separator) { if (!(0, type_check_1.isArray)(data)) { return data; } return data.join(separator); }); jexl_1.default.addTransform('removeDuplicates', function (data) { if (!(0, type_check_1.isArray)(data)) { return data; } return Array.from(new Set(data)); }); jexl_1.default.addTransform('mapToProperty', function (data, prop) { if ((0, util_1.isObjectArray)(data) && (0, type_check_1.isString)(prop)) { return data.map(function (item) { return item[prop]; }); } if ((0, util_1.isArrayArray)(data) && (0, type_check_1.isNumber)(prop)) { return data.map(function (item) { return item[prop]; }); } throw new Error("".concat(prop, " is not a valid property name for ").concat(typeof data)); }); jexl_1.default.addTransform('clock', function (data) { var parsedNumber = NaN; if ((0, type_check_1.isNumber)(data)) { parsedNumber = data; } if ((0, type_check_1.isString)(data)) { parsedNumber = parseFloat(data); } if (Number.isNaN(parsedNumber)) { return 'Invalid time'; } var durationMs = Math.floor(Math.abs(parsedNumber)); if (durationMs === 0) { return '00:00:00'; } var sign = parsedNumber < 0 ? '-' : ''; var hours = Math.floor(durationMs / util_1.oneHour).toString(); var minutes = Math.floor((durationMs % util_1.oneHour) / util_1.oneMinute).toString(); var seconds = Math.floor((durationMs % util_1.oneMinute) / util_1.oneSecond).toString(); return "".concat(sign).concat((0, util_1.leftPadZeros)(hours), ":").concat((0, util_1.leftPadZeros)(minutes), ":").concat((0, util_1.leftPadZeros)(seconds)); }); jexl_1.default.addTransform('toFixed', function (data, digits) { return (0, util_1.toNumber)(data).toFixed((0, util_1.toNumber)(digits)); }); jexl_1.default.addTransform('abs', function (data) { return Math.abs((0, util_1.toNumber)(data)); }); jexl_1.default.addTransform('sum', function (data) { if (!(0, type_check_1.isArray)(data)) { return data; } return data.reduce(function (sum, curr) { return (sum + (0, util_1.toNumber)(curr)); }, 0); }); var evaluateString = function (templateText, context) { var out = templateText; var matches = templateText.match(util_1.templateParser); if (!matches || !Array.isArray(matches)) { return out; } matches.forEach(function (match) { var toEvaluate = match.slice(2, -2); var replacement = 'Unknown Value'; try { var calc = jexl_1.default.evalSync(toEvaluate, context); if (calc !== undefined && calc !== null) { replacement = calc.toString(); } } catch (e) { if (typeof window !== 'undefined' && window.DEBUG_JEXL === true) { // eslint-disable-next-line no-console console.error("Unable to Evaluate ".concat(toEvaluate), e); // eslint-disable-next-line no-console console.error("Context to ".concat(toEvaluate), context); } } out = out.replace(match, replacement); }); return out; }; exports.evaluateString = evaluateString; var evaluateBoolean = function (toEvaluate, context, def) { if (def === void 0) { def = false; } var out = def; try { var calc = jexl_1.default.evalSync(toEvaluate, context); if (calc !== undefined && calc !== null) { out = !!calc; } } catch (e) { if (typeof window !== 'undefined' && window.DEBUG_JEXL === true) { // eslint-disable-next-line no-console console.error("Unable to Evaluate ".concat(toEvaluate), e); // eslint-disable-next-line no-console console.error("Context to ".concat(toEvaluate), context); } } return out; }; exports.evaluateBoolean = evaluateBoolean;