UNPKG

formiojs

Version:

Common js library for client side interaction with <form.io>

62 lines (51 loc) • 1.51 MB
/* * ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development"). * This devtool is neither made for production nor for readable output files. * It uses "eval()" calls to create a separate source file in the browser devtools. * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) * or disable the default devtool with "devtool: false". * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). */ (function webpackUniversalModuleDefinition(root, factory) { if(typeof exports === 'object' && typeof module === 'object') module.exports = factory(); else if(typeof define === 'function' && define.amd) define([], factory); else if(typeof exports === 'object') exports["Formio"] = factory(); else root["Formio"] = factory(); })(self, function() { return /******/ (function() { // webpackBootstrap /******/ var __webpack_modules__ = ({ /***/ "./lib/utils/Evaluator.js": /*!********************************!*\ !*** ./lib/utils/Evaluator.js ***! \********************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { "use strict"; eval("\n\n__webpack_require__(/*! core-js/modules/es.array.from.js */ \"./node_modules/core-js/modules/es.array.from.js\");\n\n__webpack_require__(/*! core-js/modules/es.array.slice.js */ \"./node_modules/core-js/modules/es.array.slice.js\");\n\n__webpack_require__(/*! core-js/modules/es.function.name.js */ \"./node_modules/core-js/modules/es.function.name.js\");\n\n__webpack_require__(/*! core-js/modules/es.reflect.construct.js */ \"./node_modules/core-js/modules/es.reflect.construct.js\");\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports[\"default\"] = void 0;\n\n__webpack_require__(/*! core-js/modules/es.array.iterator.js */ \"./node_modules/core-js/modules/es.array.iterator.js\");\n\n__webpack_require__(/*! core-js/modules/es.object.to-string.js */ \"./node_modules/core-js/modules/es.object.to-string.js\");\n\n__webpack_require__(/*! core-js/modules/web.dom-collections.iterator.js */ \"./node_modules/core-js/modules/web.dom-collections.iterator.js\");\n\n__webpack_require__(/*! core-js/modules/es.array.concat.js */ \"./node_modules/core-js/modules/es.array.concat.js\");\n\n__webpack_require__(/*! core-js/modules/es.regexp.exec.js */ \"./node_modules/core-js/modules/es.regexp.exec.js\");\n\n__webpack_require__(/*! core-js/modules/es.string.replace.js */ \"./node_modules/core-js/modules/es.string.replace.js\");\n\n__webpack_require__(/*! core-js/modules/es.array.map.js */ \"./node_modules/core-js/modules/es.array.map.js\");\n\n__webpack_require__(/*! core-js/modules/es.string.split.js */ \"./node_modules/core-js/modules/es.string.split.js\");\n\n__webpack_require__(/*! core-js/modules/es.string.trim.js */ \"./node_modules/core-js/modules/es.string.trim.js\");\n\n__webpack_require__(/*! core-js/modules/web.dom-collections.for-each.js */ \"./node_modules/core-js/modules/web.dom-collections.for-each.js\");\n\n__webpack_require__(/*! core-js/modules/es.object.keys.js */ \"./node_modules/core-js/modules/es.object.keys.js\");\n\n__webpack_require__(/*! core-js/modules/es.symbol.js */ \"./node_modules/core-js/modules/es.symbol.js\");\n\n__webpack_require__(/*! core-js/modules/es.symbol.description.js */ \"./node_modules/core-js/modules/es.symbol.description.js\");\n\n__webpack_require__(/*! core-js/modules/es.symbol.iterator.js */ \"./node_modules/core-js/modules/es.symbol.iterator.js\");\n\n__webpack_require__(/*! core-js/modules/es.string.iterator.js */ \"./node_modules/core-js/modules/es.string.iterator.js\");\n\nvar _lodash = _interopRequireDefault(__webpack_require__(/*! lodash */ \"./node_modules/lodash/lodash.js\"));\n\nvar _stringHash = _interopRequireDefault(__webpack_require__(/*! string-hash */ \"./node_modules/string-hash/index.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _construct(Parent, args, Class) { if (_isNativeReflectConstruct()) { _construct = Reflect.construct; } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nvar Evaluator = {\n noeval: false,\n protectedEval: false,\n // This property can be customized only by plugins\n cache: {},\n templateSettings: {\n evaluate: /\\{%([\\s\\S]+?)%\\}/g,\n interpolate: /\\{\\{([\\s\\S]+?)\\}\\}/g,\n escape: /\\{\\{\\{([\\s\\S]+?)\\}\\}\\}/g\n },\n evaluator: function evaluator(func) {\n for (var _len = arguments.length, params = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n params[_key - 1] = arguments[_key];\n }\n\n if (Evaluator.noeval) {\n console.warn('No evaluations allowed for this renderer.');\n return _lodash.default.noop;\n }\n\n if (_typeof(params[0]) === 'object') {\n params = _lodash.default.keys(params[0]);\n }\n\n return _construct(Function, _toConsumableArray(params).concat([func]));\n },\n template: function template(_template, hash) {\n hash = hash || (0, _stringHash.default)(_template);\n\n try {\n // Ensure we handle copied templates from the ejs files.\n _template = _template.replace(/ctx\\./g, '');\n return Evaluator.cache[hash] = _lodash.default.template(_template, Evaluator.templateSettings);\n } catch (err) {\n console.warn('Error while processing template', err, _template);\n }\n },\n interpolate: function interpolate(rawTemplate, data, _options) {\n // Ensure reverse compatability.\n var options = _lodash.default.isObject(_options) ? _options : {\n noeval: _options\n };\n\n if (typeof rawTemplate === 'function') {\n try {\n return rawTemplate(data);\n } catch (err) {\n console.warn('Error interpolating template', err, data);\n return err.message;\n }\n }\n\n rawTemplate = String(rawTemplate);\n var hash = (0, _stringHash.default)(rawTemplate);\n var template;\n\n if (Evaluator.cache[hash]) {\n template = Evaluator.cache[hash];\n } else if (Evaluator.noeval || options.noeval) {\n // No cached template methods available. Use poor-mans interpolate without eval.\n return rawTemplate.replace(/({{\\s*(.*?)\\s*}})/g, function (match, $1, $2) {\n // Allow for conditional values.\n var parts = $2.split('||').map(function (item) {\n return item.trim();\n });\n var value = '';\n var path = '';\n\n for (var i = 0; i < parts.length; i++) {\n path = parts[i];\n value = _lodash.default.get(data, path);\n\n if (value) {\n break;\n }\n }\n\n if (options.data) {\n _lodash.default.set(options.data, path, value);\n }\n\n return value;\n });\n } else {\n template = Evaluator.template(rawTemplate, hash);\n }\n\n if (typeof template === 'function') {\n try {\n return template(data);\n } catch (err) {\n console.warn('Error interpolating template', err, rawTemplate, data);\n return err.message;\n }\n }\n\n return template;\n },\n evaluate: function evaluate(func, args) {\n return Array.isArray(args) ? func.apply(void 0, _toConsumableArray(args)) : func(args);\n }\n};\n\nEvaluator.registerEvaluator = function (evaluator) {\n Object.keys(evaluator).forEach(function (key) {\n Evaluator[key] = evaluator[key];\n });\n};\n\nvar _default = Evaluator;\nexports[\"default\"] = _default;\n\n//# sourceURL=webpack://Formio/./lib/utils/Evaluator.js?"); /***/ }), /***/ "./lib/utils/formUtils.js": /*!********************************!*\ !*** ./lib/utils/formUtils.js ***! \********************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { "use strict"; eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.applyFormChanges = applyFormChanges;\nexports.eachComponent = eachComponent;\nexports.escapeRegExCharacters = escapeRegExCharacters;\nexports.findComponent = findComponent;\nexports.findComponents = findComponents;\nexports.flattenComponents = flattenComponents;\nexports.formatAsCurrency = formatAsCurrency;\nexports.generateFormChange = generateFormChange;\nexports.getComponent = getComponent;\nexports.getStrings = getStrings;\nexports.getValue = getValue;\nexports.hasCondition = hasCondition;\nexports.isLayoutComponent = isLayoutComponent;\nexports.matchComponent = matchComponent;\nexports.parseFloatExt = parseFloatExt;\nexports.removeComponent = removeComponent;\nexports.searchComponents = searchComponents;\n\n__webpack_require__(/*! core-js/modules/es.object.to-string.js */ \"./node_modules/core-js/modules/es.object.to-string.js\");\n\n__webpack_require__(/*! core-js/modules/web.dom-collections.for-each.js */ \"./node_modules/core-js/modules/web.dom-collections.for-each.js\");\n\n__webpack_require__(/*! core-js/modules/es.array.concat.js */ \"./node_modules/core-js/modules/es.array.concat.js\");\n\n__webpack_require__(/*! core-js/modules/es.array.includes.js */ \"./node_modules/core-js/modules/es.array.includes.js\");\n\n__webpack_require__(/*! core-js/modules/es.array.slice.js */ \"./node_modules/core-js/modules/es.array.slice.js\");\n\n__webpack_require__(/*! core-js/modules/es.array.splice.js */ \"./node_modules/core-js/modules/es.array.splice.js\");\n\n__webpack_require__(/*! core-js/modules/es.regexp.exec.js */ \"./node_modules/core-js/modules/es.regexp.exec.js\");\n\n__webpack_require__(/*! core-js/modules/es.string.replace.js */ \"./node_modules/core-js/modules/es.string.replace.js\");\n\n__webpack_require__(/*! core-js/modules/es.string.split.js */ \"./node_modules/core-js/modules/es.string.split.js\");\n\n__webpack_require__(/*! core-js/modules/es.regexp.to-string.js */ \"./node_modules/core-js/modules/es.regexp.to-string.js\");\n\n__webpack_require__(/*! core-js/modules/es.array.join.js */ \"./node_modules/core-js/modules/es.array.join.js\");\n\n__webpack_require__(/*! core-js/modules/es.array.map.js */ \"./node_modules/core-js/modules/es.array.map.js\");\n\n__webpack_require__(/*! core-js/modules/es.array.from.js */ \"./node_modules/core-js/modules/es.array.from.js\");\n\n__webpack_require__(/*! core-js/modules/es.string.iterator.js */ \"./node_modules/core-js/modules/es.string.iterator.js\");\n\n__webpack_require__(/*! core-js/modules/es.array.iterator.js */ \"./node_modules/core-js/modules/es.array.iterator.js\");\n\n__webpack_require__(/*! core-js/modules/web.dom-collections.iterator.js */ \"./node_modules/core-js/modules/web.dom-collections.iterator.js\");\n\nvar _get = _interopRequireDefault(__webpack_require__(/*! lodash/get */ \"./node_modules/lodash/get.js\"));\n\nvar _set = _interopRequireDefault(__webpack_require__(/*! lodash/set */ \"./node_modules/lodash/set.js\"));\n\nvar _has = _interopRequireDefault(__webpack_require__(/*! lodash/has */ \"./node_modules/lodash/has.js\"));\n\nvar _clone = _interopRequireDefault(__webpack_require__(/*! lodash/clone */ \"./node_modules/lodash/clone.js\"));\n\nvar _forOwn = _interopRequireDefault(__webpack_require__(/*! lodash/forOwn */ \"./node_modules/lodash/forOwn.js\"));\n\nvar _isString = _interopRequireDefault(__webpack_require__(/*! lodash/isString */ \"./node_modules/lodash/isString.js\"));\n\nvar _isNaN = _interopRequireDefault(__webpack_require__(/*! lodash/isNaN */ \"./node_modules/lodash/isNaN.js\"));\n\nvar _isNil = _interopRequireDefault(__webpack_require__(/*! lodash/isNil */ \"./node_modules/lodash/isNil.js\"));\n\nvar _isPlainObject = _interopRequireDefault(__webpack_require__(/*! lodash/isPlainObject */ \"./node_modules/lodash/isPlainObject.js\"));\n\nvar _round = _interopRequireDefault(__webpack_require__(/*! lodash/round */ \"./node_modules/lodash/round.js\"));\n\nvar _chunk = _interopRequireDefault(__webpack_require__(/*! lodash/chunk */ \"./node_modules/lodash/chunk.js\"));\n\nvar _pad = _interopRequireDefault(__webpack_require__(/*! lodash/pad */ \"./node_modules/lodash/pad.js\"));\n\nvar _fastJsonPatch = __webpack_require__(/*! fast-json-patch */ \"./node_modules/fast-json-patch/index.mjs\");\n\nvar _lodash = _interopRequireDefault(__webpack_require__(/*! lodash */ \"./node_modules/lodash/lodash.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Determine if a component is a layout component or not.\n *\n * @param {Object} component\n * The component to check.\n *\n * @returns {Boolean}\n * Whether or not the component is a layout component.\n */\nfunction isLayoutComponent(component) {\n return Boolean(component.columns && Array.isArray(component.columns) || component.rows && Array.isArray(component.rows) || component.components && Array.isArray(component.components));\n}\n/**\n * Iterate through each component within a form.\n *\n * @param {Object} components\n * The components to iterate.\n * @param {Function} fn\n * The iteration function to invoke for each component.\n * @param {Boolean} includeAll\n * Whether or not to include layout components.\n * @param {String} path\n * The current data path of the element. Example: data.user.firstName\n * @param {Object} parent\n * The parent object.\n */\n\n\nfunction eachComponent(components, fn, includeAll, path, parent, inRecursion) {\n if (!components) return;\n path = path || '';\n\n if (inRecursion) {\n if (components.noRecurse) {\n delete components.noRecurse;\n return;\n }\n\n components.noRecurse = true;\n }\n\n components.forEach(function (component) {\n if (!component) {\n return;\n }\n\n var hasColumns = component.columns && Array.isArray(component.columns);\n var hasRows = component.rows && Array.isArray(component.rows);\n var hasComps = component.components && Array.isArray(component.components);\n var noRecurse = false;\n var newPath = component.key ? path ? \"\".concat(path, \".\").concat(component.key) : component.key : ''; // Keep track of parent references.\n\n if (parent) {\n // Ensure we don't create infinite JSON structures.\n component.parent = (0, _clone.default)(parent);\n delete component.parent.components;\n delete component.parent.componentMap;\n delete component.parent.columns;\n delete component.parent.rows;\n } // there's no need to add other layout components here because we expect that those would either have columns, rows or components\n\n\n var layoutTypes = ['htmlelement', 'content'];\n var isLayoutComponent = hasColumns || hasRows || hasComps && !component.input || layoutTypes.indexOf(component.type) > -1;\n\n if (includeAll || component.tree || !isLayoutComponent) {\n noRecurse = fn(component, newPath, components);\n }\n\n var subPath = function subPath() {\n if (component.key && !['panel', 'table', 'well', 'columns', 'fieldset', 'tabs', 'form'].includes(component.type) && (['datagrid', 'container', 'editgrid', 'address', 'dynamicWizard', 'datatable'].includes(component.type) || component.tree)) {\n return newPath;\n } else if (component.key && component.type === 'form') {\n return \"\".concat(newPath, \".data\");\n }\n\n return path;\n };\n\n if (!noRecurse) {\n if (hasColumns) {\n component.columns.forEach(function (column) {\n return eachComponent(column.components, fn, includeAll, subPath(), parent ? component : null);\n }, true);\n } else if (hasRows) {\n component.rows.forEach(function (row) {\n if (Array.isArray(row)) {\n row.forEach(function (column) {\n return eachComponent(column.components, fn, includeAll, subPath(), parent ? component : null);\n }, true);\n }\n });\n } else if (hasComps) {\n eachComponent(component.components, fn, includeAll, subPath(), parent ? component : null, true);\n }\n }\n });\n\n if (components.noRecurse) {\n delete components.noRecurse;\n }\n}\n/**\n * Matches if a component matches the query.\n *\n * @param component\n * @param query\n * @return {boolean}\n */\n\n\nfunction matchComponent(component, query) {\n if ((0, _isString.default)(query)) {\n return component.key === query || component.path === query;\n } else {\n var matches = false;\n (0, _forOwn.default)(query, function (value, key) {\n matches = (0, _get.default)(component, key) === value;\n\n if (!matches) {\n return false;\n }\n });\n return matches;\n }\n}\n/**\n * Get a component by its key\n *\n * @param {Object} components\n * The components to iterate.\n * @param {String|Object} key\n * The key of the component to get, or a query of the component to search.\n *\n * @returns {Object}\n * The component that matches the given key, or undefined if not found.\n */\n\n\nfunction getComponent(components, key, includeAll) {\n var result;\n eachComponent(components, function (component, path) {\n if (path === key || component.path === key) {\n result = component;\n return true;\n }\n }, includeAll);\n return result;\n}\n/**\n * Finds a component provided a query of properties of that component.\n *\n * @param components\n * @param query\n * @return {*}\n */\n\n\nfunction searchComponents(components, query) {\n var results = [];\n eachComponent(components, function (component) {\n if (matchComponent(component, query)) {\n results.push(component);\n }\n }, true);\n return results;\n}\n/**\n * Deprecated version of findComponents. Renamed to searchComponents.\n *\n * @param components\n * @param query\n * @returns {*}\n */\n\n\nfunction findComponents(components, query) {\n console.warn('formio.js/utils findComponents is deprecated. Use searchComponents instead.');\n return searchComponents(components, query);\n}\n/**\n * This function will find a component in a form and return the component AND THE PATH to the component in the form.\n * Path to the component is stored as an array of nested components and their indexes.The Path is being filled recursively\n * when you iterating through the nested structure.\n * If the component is not found the callback won't be called and function won't return anything.\n *\n * @param components\n * @param key\n * @param fn\n * @param path\n * @returns {*}\n */\n\n\nfunction findComponent(components, key, path, fn) {\n if (!components) return;\n path = path || [];\n\n if (!key) {\n return fn(components);\n }\n\n components.forEach(function (component, index) {\n var newPath = path.slice(); // Add an index of the component it iterates through in nested structure\n\n newPath.push(index);\n if (!component) return;\n\n if (component.hasOwnProperty('columns') && Array.isArray(component.columns)) {\n newPath.push('columns');\n component.columns.forEach(function (column, index) {\n var colPath = newPath.slice();\n colPath.push(index);\n colPath.push('components');\n findComponent(column.components, key, colPath, fn);\n });\n }\n\n if (component.hasOwnProperty('rows') && Array.isArray(component.rows)) {\n newPath.push('rows');\n component.rows.forEach(function (row, index) {\n var rowPath = newPath.slice();\n rowPath.push(index);\n row.forEach(function (column, index) {\n var colPath = rowPath.slice();\n colPath.push(index);\n colPath.push('components');\n findComponent(column.components, key, colPath, fn);\n });\n });\n }\n\n if (component.hasOwnProperty('components') && Array.isArray(component.components)) {\n newPath.push('components');\n findComponent(component.components, key, newPath, fn);\n }\n\n if (component.key === key) {\n //Final callback if the component is found\n fn(component, newPath, components);\n }\n });\n}\n/**\n * Remove a component by path.\n *\n * @param components\n * @param path\n */\n\n\nfunction removeComponent(components, path) {\n // Using _.unset() leave a null value. Use Array splice instead.\n var index = path.pop();\n\n if (path.length !== 0) {\n components = (0, _get.default)(components, path);\n }\n\n components.splice(index, 1);\n}\n\nfunction generateFormChange(type, data) {\n var change;\n\n switch (type) {\n case 'add':\n change = {\n op: 'add',\n key: data.component.key,\n container: data.parent.key,\n // Parent component\n path: data.path,\n // Path to container within parent component.\n index: data.index,\n // Index of component in parent container.\n component: data.component\n };\n break;\n\n case 'edit':\n change = {\n op: 'edit',\n key: data.originalComponent.key,\n patches: (0, _fastJsonPatch.compare)(data.originalComponent, data.component)\n }; // Don't save if nothing changed.\n\n if (!change.patches.length) {\n change = null;\n }\n\n break;\n\n case 'remove':\n change = {\n op: 'remove',\n key: data.component.key\n };\n break;\n }\n\n return change;\n}\n\nfunction applyFormChanges(form, changes) {\n var failed = [];\n changes.forEach(function (change) {\n var found = false;\n\n switch (change.op) {\n case 'add':\n var newComponent = change.component; // Find the container to set the component in.\n\n findComponent(form.components, change.container, null, function (parent) {\n if (!change.container) {\n parent = form;\n } // A move will first run an add so remove any existing components with matching key before inserting.\n\n\n findComponent(form.components, change.key, null, function (component, path) {\n // If found, use the existing component. (If someone else edited it, the changes would be here)\n newComponent = component;\n removeComponent(form.components, path);\n });\n found = true;\n var container = (0, _get.default)(parent, change.path);\n container.splice(change.index, 0, newComponent);\n });\n break;\n\n case 'remove':\n findComponent(form.components, change.key, null, function (component, path) {\n found = true;\n var oldComponent = (0, _get.default)(form.components, path);\n\n if (oldComponent.key !== component.key) {\n path.pop();\n }\n\n removeComponent(form.components, path);\n });\n break;\n\n case 'edit':\n findComponent(form.components, change.key, null, function (component, path) {\n found = true;\n\n try {\n var oldComponent = (0, _get.default)(form.components, path);\n var _newComponent = (0, _fastJsonPatch.applyPatch)(component, change.patches).newDocument;\n\n if (oldComponent.key !== _newComponent.key) {\n path.pop();\n }\n\n (0, _set.default)(form.components, path, _newComponent);\n } catch (err) {\n failed.push(change);\n }\n });\n break;\n\n case 'move':\n break;\n }\n\n if (!found) {\n failed.push(change);\n }\n });\n return {\n form: form,\n failed: failed\n };\n}\n/**\n * Flatten the form components for data manipulation.\n *\n * @param {Object} components\n * The components to iterate.\n * @param {Boolean} includeAll\n * Whether or not to include layout components.\n *\n * @returns {Object}\n * The flattened components map.\n */\n\n\nfunction flattenComponents(components, includeAll) {\n var flattened = {};\n eachComponent(components, function (component, path) {\n flattened[path] = component;\n }, includeAll);\n return flattened;\n}\n/**\n * Returns if this component has a conditional statement.\n *\n * @param component - The component JSON schema.\n *\n * @returns {boolean} - TRUE - This component has a conditional, FALSE - No conditional provided.\n */\n\n\nfunction hasCondition(component) {\n return Boolean(component.customConditional || component.conditional && (component.conditional.when || component.conditional.json || component.conditional.condition));\n}\n/**\n * Extension of standard #parseFloat(value) function, that also clears input string.\n *\n * @param {any} value\n * The value to parse.\n *\n * @returns {Number}\n * Parsed value.\n */\n\n\nfunction parseFloatExt(value) {\n return parseFloat((0, _isString.default)(value) ? value.replace(/[^\\de.+-]/gi, '') : value);\n}\n/**\n * Formats provided value in way how Currency component uses it.\n *\n * @param {any} value\n * The value to format.\n *\n * @returns {String}\n * Value formatted for Currency component.\n */\n\n\nfunction formatAsCurrency(value) {\n var parsedValue = parseFloatExt(value);\n\n if ((0, _isNaN.default)(parsedValue)) {\n return '';\n }\n\n var parts = (0, _round.default)(parsedValue, 2).toString().split('.');\n parts[0] = (0, _chunk.default)(Array.from(parts[0]).reverse(), 3).reverse().map(function (part) {\n return part.reverse().join('');\n }).join(',');\n parts[1] = (0, _pad.default)(parts[1], 2, '0');\n return parts.join('.');\n}\n/**\n * Escapes RegEx characters in provided String value.\n *\n * @param {String} value\n * String for escaping RegEx characters.\n * @returns {string}\n * String with escaped RegEx characters.\n */\n\n\nfunction escapeRegExCharacters(value) {\n return value.replace(/[-[\\]/{}()*+?.\\\\^$|]/g, '\\\\$&');\n}\n/**\n * Get the value for a component key, in the given submission.\n *\n * @param {Object} submission\n * A submission object to search.\n * @param {String} key\n * A for components API key to search for.\n */\n\n\nfunction getValue(submission, key) {\n var search = function search(data) {\n if ((0, _isPlainObject.default)(data)) {\n if ((0, _has.default)(data, key)) {\n return _lodash.default.get(data, key);\n }\n\n var value = null;\n (0, _forOwn.default)(data, function (prop) {\n var result = search(prop);\n\n if (!(0, _isNil.default)(result)) {\n value = result;\n return false;\n }\n });\n return value;\n } else {\n return null;\n }\n };\n\n return search(submission.data);\n}\n/**\n * Iterate over all components in a form and get string values for translation.\n * @param form\n */\n\n\nfunction getStrings(form) {\n var properties = ['label', 'title', 'legend', 'tooltip', 'description', 'placeholder', 'prefix', 'suffix', 'errorLabel', 'content', 'html'];\n var strings = [];\n eachComponent(form.components, function (component) {\n properties.forEach(function (property) {\n if (component.hasOwnProperty(property) && component[property]) {\n strings.push({\n key: component.key,\n type: component.type,\n property: property,\n string: component[property]\n });\n }\n });\n\n if ((!component.dataSrc || component.dataSrc === 'values') && component.hasOwnProperty('values') && Array.isArray(component.values) && component.values.length) {\n component.values.forEach(function (value, index) {\n strings.push({\n key: component.key,\n property: \"value[\".concat(index, \"].label\"),\n string: component.values[index].label\n });\n });\n } // Hard coded values from Day component\n\n\n if (component.type === 'day') {\n ['day', 'month', 'year', 'Day', 'Month', 'Year', 'january', 'february', 'march', 'april', 'may', 'june', 'july', 'august', 'september', 'october', 'november', 'december'].forEach(function (string) {\n strings.push({\n key: component.key,\n property: 'day',\n string: string\n });\n });\n\n if (component.fields.day.placeholder) {\n strings.push({\n key: component.key,\n property: 'fields.day.placeholder',\n string: component.fields.day.placeholder\n });\n }\n\n if (component.fields.month.placeholder) {\n strings.push({\n key: component.key,\n property: 'fields.month.placeholder',\n string: component.fields.month.placeholder\n });\n }\n\n if (component.fields.year.placeholder) {\n strings.push({\n key: component.key,\n property: 'fields.year.placeholder',\n string: component.fields.year.placeholder\n });\n }\n }\n\n if (component.type === 'editgrid') {\n var string = component.addAnother || 'Add Another';\n\n if (component.addAnother) {\n strings.push({\n key: component.key,\n property: 'addAnother',\n string: string\n });\n }\n }\n\n if (component.type === 'select') {\n ['loading...', 'Type to search'].forEach(function (string) {\n strings.push({\n key: component.key,\n property: 'select',\n string: string\n });\n });\n }\n }, true);\n return strings;\n}\n\n//# sourceURL=webpack://Formio/./lib/utils/formUtils.js?"); /***/ }), /***/ "./lib/utils/jsonlogic/operators.js": /*!******************************************!*\ !*** ./lib/utils/jsonlogic/operators.js ***! \******************************************/ /***/ (function(__unused_webpack_module, exports) { "use strict"; eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.lodashOperators = void 0;\n// Use only immutable useful functions from Lodash.\n// Visit https://lodash.com/docs for more info.\nvar lodashOperators = [// Array\n'chunk', 'compact', 'concat', 'difference', 'differenceBy', 'differenceWith', 'drop', 'dropRight', 'dropRightWhile', 'dropWhile', 'findIndex', 'findLastIndex', 'first', 'flatten', 'flattenDeep', 'flattenDepth', 'fromPairs', 'head', 'indexOf', 'initial', 'intersection', 'intersectionBy', 'intersectionWith', 'join', 'last', 'lastIndexOf', 'nth', 'slice', 'sortedIndex', 'sortedIndexBy', 'sortedIndexOf', 'sortedLastIndex', 'sortedLastIndexBy', 'sortedLastIndexOf', 'sortedUniq', 'sortedUniqBy', 'tail', 'take', 'takeRight', 'takeRightWhile', 'takeWhile', 'union', 'unionBy', 'unionWith', 'uniq', 'uniqBy', 'uniqWith', 'unzip', 'unzipWith', 'without', 'xor', 'xorBy', 'xorWith', 'zip', 'zipObject', 'zipObjectDeep', 'zipWith', // Collection\n'countBy', 'every', 'filter', 'find', 'findLast', 'flatMap', 'flatMapDeep', 'flatMapDepth', 'groupBy', 'includes', 'invokeMap', 'keyBy', 'map', 'orderBy', 'partition', 'reduce', 'reduceRight', 'reject', 'sample', 'sampleSize', 'shuffle', 'size', 'some', 'sortBy', // Date\n'now', // Function\n'flip', 'negate', 'overArgs', 'partial', 'partialRight', 'rearg', 'rest', 'spread', // Lang\n'castArray', 'clone', 'cloneDeep', 'cloneDeepWith', 'cloneDeep', 'conformsTo', 'eq', 'gt', 'gte', 'isArguments', 'isArray', 'isArrayBuffer', 'isArrayLike', 'isArrayLikeObject', 'isBoolean', 'isBuffer', 'isDate', 'isElement', 'isEmpty', 'isEqual', 'isEqualWith', 'isError', 'isFinite', 'isFunction', 'isInteger', 'isLength', 'isMap', 'isMatch', 'isMatchWith', 'isNaN', 'isNative', 'isNil', 'isNull', 'isNumber', 'isObject', 'isObjectLike', 'isPlainObject', 'isRegExp', 'isSafeInteger', 'isSet', 'isString', 'isSymbol', 'isTypedArray', 'isUndefined', 'isWeakMap', 'isWeakSet', 'lt', 'lte', 'toArray', 'toFinite', 'toInteger', 'toLength', 'toNumber', 'toPlainObject', 'toSafeInteger', 'toString', // Math\n'add', 'ceil', 'divide', 'floor', 'max', 'maxBy', 'mean', 'meanBy', 'min', 'minBy', 'multiply', 'round', 'subtract', 'sum', 'sumBy', // Number\n'clamp', 'inRange', 'random', // Object\n'at', 'entries', 'entriesIn', 'findKey', 'findLastKey', 'functions', 'functionsIn', 'get', 'has', 'hasIn', 'invert', 'invertBy', 'invoke', 'keys', 'keysIn', 'mapKeys', 'mapValues', 'omit', 'omitBy', 'pick', 'pickBy', 'result', 'toPairs', 'toPairsIn', 'transform', 'values', 'valuesIn', // String\n'camelCase', 'capitalize', 'deburr', 'endsWith', 'escape', 'escapeRegExp', 'kebabCase', 'lowerCase', 'lowerFirst', 'pad', 'padEnd', 'padStart', 'parseInt', 'repeat', 'replace', 'snakeCase', 'split', 'startCase', 'startsWith', 'toLower', 'toUpper', 'trim', 'trimEnd', 'trimStart', 'truncate', 'unescape', 'upperCase', 'upperFirst', 'words', // Util\n'cond', 'conforms', 'constant', 'defaultTo', 'flow', 'flowRight', 'identity', 'iteratee', 'matches', 'matchesProperty', 'method', 'methodOf', 'nthArg', 'over', 'overEvery', 'overSome', 'property', 'propertyOf', 'range', 'rangeRight', 'stubArray', 'stubFalse', 'stubObject', 'stubString', 'stubTrue', 'times', 'toPath', 'uniqueId'];\nexports.lodashOperators = lodashOperators;\n\n//# sourceURL=webpack://Formio/./lib/utils/jsonlogic/operators.js?"); /***/ }), /***/ "./lib/utils/utils.js": /*!****************************!*\ !*** ./lib/utils/utils.js ***! \****************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { "use strict"; eval("\n\n__webpack_require__(/*! core-js/modules/es.symbol.js */ \"./node_modules/core-js/modules/es.symbol.js\");\n\n__webpack_require__(/*! core-js/modules/es.symbol.description.js */ \"./node_modules/core-js/modules/es.symbol.description.js\");\n\n__webpack_require__(/*! core-js/modules/es.symbol.iterator.js */ \"./node_modules/core-js/modules/es.symbol.iterator.js\");\n\n__webpack_require__(/*! core-js/modules/es.string.iterator.js */ \"./node_modules/core-js/modules/es.string.iterator.js\");\n\n__webpack_require__(/*! core-js/modules/es.array.from.js */ \"./node_modules/core-js/modules/es.array.from.js\");\n\n__webpack_require__(/*! core-js/modules/es.object.keys.js */ \"./node_modules/core-js/modules/es.object.keys.js\");\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nvar _exportNames = {\n evaluate: true,\n getRandomComponentId: true,\n getPropertyValue: true,\n getElementRect: true,\n boolValue: true,\n isMongoId: true,\n checkCalculated: true,\n checkSimpleConditional: true,\n checkCustomConditional: true,\n checkJsonConditional: true,\n checkCondition: true,\n checkTrigger: true,\n setActionProperty: true,\n unescapeHTML: true,\n convertStringToHTMLElement: true,\n uniqueName: true,\n guid: true,\n getDateSetting: true,\n isValidDate: true,\n currentTimezone: true,\n offsetDate: true,\n zonesLoaded: true,\n shouldLoadZones: true,\n loadZones: true,\n momentDate: true,\n formatDate: true,\n formatOffset: true,\n getLocaleDateFormatInfo: true,\n convertFormatToFlatpickr: true,\n convertFormatToMoment: true,\n convertFormatToMask: true,\n getInputMask: true,\n unmaskValue: true,\n matchInputMask: true,\n getNumberSeparators: true,\n getNumberDecimalLimit: true,\n getCurrencyAffixes: true,\n fieldData: true,\n delay: true,\n iterateKey: true,\n uniqueKey: true,\n bootstrapVersion: true,\n unfold: true,\n firstNonNil: true,\n withSwitch: true,\n observeOverload: true,\n getContextComponents: true,\n getContextButtons: true,\n translateHTMLTemplate: true,\n sanitize: true,\n fastCloneDeep: true,\n interpolate: true,\n isInputComponent: true,\n getArrayFromComponentPath: true,\n hasInvalidComponent: true,\n getStringFromComponentPath: true,\n round: true,\n getIEBrowserVersion: true,\n getBrowserInfo: true,\n getComponentPathWithoutIndicies: true,\n getComponentPath: true,\n getDataParentComponent: true,\n isPromise: true,\n isInsideScopingComponent: true,\n getFocusableElements: true,\n _: true,\n jsonLogic: true,\n moment: true,\n Evaluator: true\n};\nObject.defineProperty(exports, \"Evaluator\", ({\n enumerable: true,\n get: function get() {\n return _Evaluator.default;\n }\n}));\nObject.defineProperty(exports, \"_\", ({\n enumerable: true,\n get: function get() {\n return _lodash.default;\n }\n}));\nexports.boolValue = boolValue;\nexports.bootstrapVersion = bootstrapVersion;\nexports.checkCalculated = checkCalculated;\nexports.checkCondition = checkCondition;\nexports.checkCustomConditional = checkCustomConditional;\nexports.checkJsonConditional = checkJsonConditional;\nexports.checkSimpleConditional = checkSimpleConditional;\nexports.checkTrigger = checkTrigger;\nexports.convertFormatToFlatpickr = convertFormatToFlatpickr;\nexports.convertFormatToMask = convertFormatToMask;\nexports.convertFormatToMoment = convertFormatToMoment;\nexports.convertStringToHTMLElement = convertStringToHTMLElement;\nexports.currentTimezone = currentTimezone;\nexports.delay = delay;\nexports.evaluate = evaluate;\nexports.fastCloneDeep = fastCloneDeep;\nexports.fieldData = fieldData;\nexports.firstNonNil = void 0;\nexports.formatDate = formatDate;\nexports.formatOffset = formatOffset;\nexports.getArrayFromComponentPath = getArrayFromComponentPath;\nexports.getBrowserInfo = getBrowserInfo;\nexports.getComponentPath = getComponentPath;\nexports.getComponentPathWithoutIndicies = getComponentPathWithoutIndicies;\nexports.getContextButtons = getContextButtons;\nexports.getContextComponents = getContextComponents;\nexports.getCurrencyAffixes = getCurrencyAffixes;\nexports.getDataParentComponent = getDataParentComponent;\nexports.getDateSetting = getDateSetting;\nexports.getElementRect = getElementRect;\nexports.getFocusableElements = getFocusableElements;\nexports.getIEBrowserVersion = getIEBrowserVersion;\nexports.getInputMask = getInputMask;\nexports.getLocaleDateFormatInfo = getLocaleDateFormatInfo;\nexports.getNumberDecimalLimit = getNumberDecimalLimit;\nexports.getNumberSeparators = getNumberSeparators;\nexports.getPropertyValue = getPropertyValue;\nexports.getRandomComponentId = getRandomComponentId;\nexports.getStringFromComponentPath = getStringFromComponentPath;\nexports.guid = guid;\nexports.hasInvalidComponent = hasInvalidComponent;\nexports.interpolate = void 0;\nexports.isInputComponent = isInputComponent;\nexports.isInsideScopingComponent = isInsideScopingComponent;\nexports.isMongoId = isMongoId;\nexports.isPromise = isPromise;\nexports.isValidDate = isValidDate;\nexports.iterateKey = iterateKey;\nObject.defineProperty(exports, \"jsonLogic\", ({\n enumerable: true,\n get: function get() {\n return _jsonLogicJs.default;\n }\n}));\nexports.loadZones = loadZones;\nexports.matchInputMask = matchInputMask;\nObject.defineProperty(exports, \"moment\", ({\n enumerable: true,\n get: function get() {\n return _momentTimezone.default;\n }\n}));\nexports.momentDate = momentDate;\nexports.observeOverload = observeOverload;\nexports.offsetDate = offsetDate;\nexports.round = round;\nexports.sanitize = sanitize;\nexports.setActionProperty = setActionProperty;\nexports.shouldLoadZones = shouldLoadZones;\nexports.translateHTMLTemplate = translateHTMLTemplate;\nexports.unescapeHTML = unescapeHTML;\nexports.unfold = unfold;\nexports.uniqueKey = uniqueKey;\nexports.uniqueName = uniqueName;\nexports.unmaskValue = unmaskValue;\nexports.withSwitch = withSwitch;\nexports.zonesLoaded = zonesLoaded;\n\n__webpack_require__(/*! core-js/modules/es.object.to-string.js */ \"./node_modules/core-js/modules/es.object.to-string.js\");\n\n__webpack_require__(/*! core-js/modules/web.dom-collections.for-each.js */ \"./node_modules/core-js/modules/web.dom-collections.for-each.js\");\n\n__webpack_require__(/*! core-js/modules/es.regexp.exec.js */ \"./node_modules/core-js/modules/es.regexp.exec.js\");\n\n__webpack_require__(/*! core-js/modules/es.string.replace.js */ \"./node_modules/core-js/modules/es.string.replace.js\");\n\n__webpack_require__(/*! core-js/modules/es.array.iterator.js */ \"./node_modules/core-js/modules/es.array.iterator.js\");\n\n__webpack_require__(/*! core-js/modules/web.dom-collections.iterator.js */ \"./node_modules/core-js/modules/web.dom-collections.iterator.js\");\n\n__webpack_require__(/*! core-js/modules/es.regexp.to-string.js */ \"./node_modules/core-js/modules/es.regexp.to-string.js\");\n\n__webpack_require__(/*! core-js/modules/es.string.match.js */ \"./node_modules/core-js/modules/es.string.match.js\");\n\n__webpack_require__(/*! core-js/modules/es.array.includes.js */ \"./node_modules/core-js/modules/es.array.includes.js\");\n\n__webpack_require__(/*! core-js/modules/es.string.includes.js */ \"./node_modules/core-js/modules/es.string.includes.js\");\n\n__webpack_require__(/*! core-js/modules/es.array.map.js */ \"./node_modules/core-js/modules/es.array.map.js\");\n\n__webpack_require__(/*! core-js/modules/es.array.concat.js */ \"./node_modules/core-js/modules/es.array.concat.js\");\n\n__webpack_require__(/*! core-js/modules/es.string.starts-with.js */ \"./node_modules/core-js/modules/es.string.starts-with.js\");\n\n__webpack_require__(/*! core-js/modules/es.string.split.js */ \"./node_modules/core-js/modules/es.string.split.js\");\n\n__webpack_require__(/*! core-js/modules/es.array.join.js */ \"./node_modules/core-js/modules/es.array.join.js\");\n\n__webpack_require__(/*! core-js/modules/es.array.slice.js */ \"./node_modules/core-js/modules/es.array.slice.js\");\n\n__webpack_require__(/*! core-js/modules/es.object.assign.js */ \"./node_modules/core-js/modules/es.object.assign.js\");\n\n__webpack_require__(/*! core-js/modules/es.function.name.js */ \"./node_modules/core-js/modules/es.function.name.js\");\n\n__webpack_require__(/*! core-js/modules/es.regexp.constructor.js */ \"./node_modules/core-js/modules/es.regexp.constructor.js\");\n\n__webpack_require__(/*! core-js/modules/es.number.constructor.js */ \"./node_modules/core-js/modules/es.number.constructor.js\");\n\n__webpack_require__(/*! core-js/modules/es.array.find.js */ \"./node_modules/core-js/modules/es.array.find.js\");\n\n__webpack_require__(/*! core-js/modules/es.string.trim.js */ \"./node_modules/core-js/modules/es.string.trim.js\");\n\n__webpack_require__(/*! core-js/modules/es.number.to-fixed.js */ \"./node_modules/core-js/modules/es.number.to-fixed.js\");\n\nvar _lodash = _interopRequireDefault(__webpack_require__(/*! lodash */ \"./node_modules/lodash/lodash.js\"));\n\nvar _fetchPonyfill2 = _interopRequireDefault(__webpack_require__(/*! fetch-ponyfill */ \"./node_modules/fetch-ponyfill/build/fetch-browser.js\"));\n\nvar _jsonLogicJs = _interopRequireDefault(__webpack_require__(/*! json-logic-js */ \"./node_modules/json-logic-js/logic.js\"));\n\nvar _momentTimezone = _interopRequireDefault(__webpack_require__(/*! moment-timezone/moment-timezone */ \"./node_modules/moment-timezone/moment-timezone.js\"));\n\nvar _jstimezonedetect = _interopRequireDefault(__webpack_require__(/*! jstimezonedetect */ \"./node_modules/jstimezonedetect/dist/jstz.min.js\"));\n\nvar _operators = __webpack_require__(/*! ./jsonlogic/operators */ \"./lib/utils/jsonlogic/operators.js\");\n\nvar _nativePromiseOnly = _interopRequireDefault(__webpack_require__(/*! native-promise-only */ \"./node_modules/native-promise-only/lib/npo.src.js\"));\n\nvar _dompurify = _interopRequireDefault(__webpack_require__(/*! dompurify */ \"./node_modules/dompurify/dist/purify.js\"));\n\nvar _formUtils = __webpack_require__(/*! ./formUtils */ \"./lib/utils/formUtils.js\");\n\nObject.keys(_formUtils).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;\n if (key in exports && exports[key] === _formUtils[key]) return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _formUtils[key];\n }\n });\n});\n\nvar _Evaluator = _interopRequireDefault(__webpack_require__(/*! ./Evaluator */ \"./lib/utils/Evaluator.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nvar interpolate = _Evaluator.default.interpolate;\nexports.interpolate = interpolate;\n\nvar _fetchPonyfill = (0, _fetchPonyfill2.default)({\n Promise: _nativePromiseOnly.default\n}),\n fetch = _fetchPonyfill.fetch;\n\n// Configure JsonLogic\n_operators.lodashOperators.forEach(function (name) {\n return _jsonLogicJs.default.add_operation(\"_\".concat(name), _lodash.default[name]);\n}); // Retrieve Any Date\n\n\n_jsonLogicJs.default.add_operation('getDate', function (date) {\n return (0, _momentTimezone.default)(date).toISOString();\n}); // Set Relative Minimum Date\n\n\n_jsonLogicJs.default.add_operation('relativeMinDate', function (relativeMinDate) {\n return (0, _momentTimezone.default)().subtract(relativeMinDate, 'days').toISOString();\n}); // Set Relative Maximum Date\n\n\n_jsonLogicJs.default.add_operation('relativeMaxDate', function (relativeMaxDate) {\n return (0, _momentTimezone.default)().add(relativeMaxDate, 'days').toISOString();\n});\n\nfunction setPathToComponentAndPerentSchema(component) {\n component.path = getComponentPath(component);\n var dataParent = getDataParentComponent(component);\n\n if (dataParent && _typeof(dataParent) === 'object') {\n dataParent.path = getComponentPath(dataParent);\n }\n}\n/**\n * Evaluate a method.\n *\n * @param func\n * @param args\n * @return {*}\n */\n\n\nfunction evaluate(func, args, ret, tokenize) {\n var returnVal = null;\n var component = args.component ? args.component : {\n key: 'unknown'\n };\n\n if (!args.form && args.instance) {\n args.form = _lodash.default.get(args.instance, 'root._form', {});\n }\n\n var componentKey = component.key;\n\n if (typeof func === 'string') {\n if (ret) {\n func += \";return \".concat(ret);\n }\n\n if (tokenize) {\n // Replace all {{ }} references with actual data.\n func = func.replace(/({{\\s+(.*)\\s+}})/, function (match, $1, $2) {\n if ($2.indexOf('data.') === 0) {\n return _lodash.default.get(args.data, $2.replace('data.', ''));\n } else if ($2.indexOf('row.') === 0) {\n return _lodash.default.get(args.row, $2.r