@formio/core
Version:
The core Form.io renderering framework.
235 lines (234 loc) • 9.07 kB
JavaScript
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;
;