UNPKG

@formio/core

Version:

The core Form.io renderering framework.

235 lines (234 loc) 9.07 kB
"use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { extendStatics = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; return extendStatics(d, b); }; return function (d, b) { if (typeof b !== "function" && b !== null) throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) { if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { if (ar || !(i in from)) { if (!ar) ar = Array.prototype.slice.call(from, 0, i); ar[i] = from[i]; } } return to.concat(ar || Array.prototype.slice.call(from)); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.Evaluator = exports.BaseEvaluator = void 0; var _ = __importStar(require("@formio/lodash")); // BaseEvaluator is for extending. var BaseEvaluator = /** @class */ (function () { function BaseEvaluator() { } BaseEvaluator.evaluator = function (func) { var params = []; for (var _i = 1; _i < arguments.length; _i++) { params[_i - 1] = arguments[_i]; } if (Evaluator.noeval) { console.warn('No evaluations allowed for this renderer.'); return _.noop; } if (typeof func === 'function') { return func; } if (typeof params[0] === 'object') { params = _.keys(params[0]); } return new (Function.bind.apply(Function, __spreadArray(__spreadArray([void 0], params, false), [func], false)))(); }; ; BaseEvaluator.interpolateString = function (rawTemplate, data, options) { if (options === void 0) { options = {}; } return rawTemplate.replace(/({{\s*(.*?)\s*}})/g, function (match, $1, $2) { // If this is a function call and we allow evals. if ($2.indexOf('(') !== -1) { return $2.replace(/([^\(]+)\(([^\)]+)\s*\);?/, function (evalMatch, funcName, args) { funcName = _.trim(funcName); var func = _.get(data, funcName); if (func) { if (args) { args = args.split(',').map(function (arg) { arg = _.trim(arg); if ((arg.indexOf('"') === 0) || (arg.indexOf("'") === 0)) { return arg.substring(1, arg.length - 1); } return _.get(data, arg); }); } return Evaluator.evaluate(func, args, '', false, data, options); } return ''; }); } else { var dataPath = $2; if ($2.indexOf('?') !== -1) { dataPath = $2.replace(/\?\./g, '.'); } // Allow for conditional values. var parts = dataPath.split('||').map(function (item) { return item.trim(); }); var value = ''; var path = ''; for (var i = 0; i < parts.length; i++) { path = parts[i]; value = _.get(data, path); if (value) { break; } } if (options.data) { _.set(options.data, path, value); } return value; } }); }; BaseEvaluator.interpolate = function (rawTemplate, data, options) { if (options === void 0) { options = {}; } if (typeof rawTemplate === 'function') { try { return rawTemplate(data); } catch (err) { console.warn('Error interpolating template', err, data); return err.message; } } return Evaluator.interpolateString(String(rawTemplate), data, options); }; ; /** * Evaluate a method. * * @param func * @param args * @return {*} */ BaseEvaluator.evaluate = function (func, args, ret, interpolate, context, options) { if (args === void 0) { args = {}; } if (ret === void 0) { ret = ''; } if (interpolate === void 0) { interpolate = false; } if (context === void 0) { context = {}; } if (options === void 0) { options = {}; } var returnVal = null; options = _.isObject(options) ? options : { noeval: options }; var component = args.component ? args.component : { key: 'unknown' }; if (!args.form && args.instance) { args.form = _.get(args.instance, 'root._form', {}); } var componentKey = component.key; if (typeof func === 'string') { if (ret) { func += ";return ".concat(ret); } if (interpolate) { func = BaseEvaluator.interpolate(func, args, options); } try { if (Evaluator.noeval || options.noeval) { func = _.noop; } else { func = Evaluator.evaluator(func, args, context); } args = _.values(args); } catch (err) { console.warn("An error occured within the custom function for ".concat(componentKey), err); returnVal = null; func = false; } } if (typeof func === 'function') { try { returnVal = Evaluator.execute(func, args, context, options); } catch (err) { returnVal = null; console.warn("An error occured within custom function for ".concat(componentKey), err); } } else if (func) { console.warn("Unknown function type for ".concat(componentKey)); } return returnVal; }; /** * Execute a function. * * @param func * @param args * @returns */ BaseEvaluator.execute = function (func, args, context, options) { if (context === void 0) { context = {}; } if (options === void 0) { options = {}; } options = _.isObject(options) ? options : { noeval: options }; if (Evaluator.noeval || options.noeval) { console.warn('No evaluations allowed for this renderer.'); return; } return Array.isArray(args) ? func.apply(context, args) : func.call(context, args); }; ; BaseEvaluator.templateSettings = { interpolate: /{{([\s\S]+?)}}/g, evaluate: /\{%([\s\S]+?)%\}/g, escape: /\{\{\{([\s\S]+?)\}\}\}/g }; BaseEvaluator.noeval = false; return BaseEvaluator; }()); exports.BaseEvaluator = BaseEvaluator; // The extendable evaluator var Evaluator = /** @class */ (function (_super) { __extends(Evaluator, _super); function Evaluator() { return _super !== null && _super.apply(this, arguments) || this; } /** * Allow external modules the ability to extend the Evaluator. * @param evaluator */ Evaluator.registerEvaluator = function (evaluator) { Object.keys(evaluator).forEach(function (key) { Evaluator[key] = evaluator[key]; }); }; return Evaluator; }(BaseEvaluator)); exports.Evaluator = Evaluator;