UNPKG

low-code-service

Version:

to handle workflow execution, handlebars execution and condition execution for low code service

245 lines 7.7 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.LOGICAL_OPERATORS = exports.RELATIONAL_OPERATORS = exports.validateDataUsingFilters = exports.sanitizeDataForFilters = exports.parseBoolean = void 0; var lodash_1 = require("lodash"); var sift_1 = __importDefault(require("sift")); var parseBoolean = function (string) { switch (String(string).toLowerCase()) { case 'true': case 'yes': case 'y': case '1': return true; case 'false': case 'no': case 'n': case '0': return false; default: return undefined; } }; exports.parseBoolean = parseBoolean; var sanitizeDataForFilters = function (dataForFilters, rawConditionData) { if (!(Array.isArray(rawConditionData) && rawConditionData.length)) { return dataForFilters; } try { var toRet = (0, lodash_1.cloneDeep)(dataForFilters); for (var _i = 0, rawConditionData_1 = rawConditionData; _i < rawConditionData_1.length; _i++) { var conditionObj = rawConditionData_1[_i]; if (!conditionObj.type) { continue; } if (conditionObj.type === 'number') { var sanitizedData = Number((0, lodash_1.get)(toRet, conditionObj.field, 0)); (0, lodash_1.set)(toRet, conditionObj.field, sanitizedData); } if (conditionObj.type === 'boolean') { var sanitizedData = (0, exports.parseBoolean)((0, lodash_1.get)(toRet, conditionObj.field, false)); (0, lodash_1.set)(toRet, conditionObj.field, sanitizedData); } } return toRet; } catch (err) { // returning unsanitized data return dataForFilters; } }; exports.sanitizeDataForFilters = sanitizeDataForFilters; var validateDataUsingFilters = function (filters, dataForFilters) { for (var _i = 0, filters_1 = filters; _i < filters_1.length; _i++) { var filter = filters_1[_i]; var whenCondition = filter.whenCondition; var isWhenSatisfied = true; if (whenCondition) { var sanitizedData = (0, exports.sanitizeDataForFilters)(dataForFilters, whenCondition); var shifted = converterForSIFT(filter); var whenSiftFunc = (0, sift_1.default)(shifted.when); try { isWhenSatisfied = whenSiftFunc(sanitizedData); } catch (err) { console.log(err); return false; } if (isWhenSatisfied) { return filter; } } } return false; }; exports.validateDataUsingFilters = validateDataUsingFilters; function converterForSIFT(obj) { var cloneObj = (0, lodash_1.cloneDeep)(obj); //structuredClone(obj); //cloneDeep var whenOperator = cloneObj.whenOperator, whenCondition = cloneObj.whenCondition; var filter = {}; if (whenCondition && Array.isArray(whenCondition) && whenCondition.length) { filter['when'] = transform(whenOperator, whenCondition); } var result = filter; return result; } exports.RELATIONAL_OPERATORS = { greater_than: { pretty_name: 'Greater Than', query: '$gt', value_required: true, sql_query: '>', }, greater_than_or_equal: { pretty_name: 'Greater than or equal', query: '$gte', value_required: true, sql_query: '>=', }, less_than: { pretty_name: 'Less than', query: '$lt', value_required: true, sql_query: '<', }, less_than_or_equal: { pretty_name: 'Less than or equal', query: '$lte', value_required: true, sql_query: '<=', }, equal_to: { pretty_name: 'Equal to', query: '$eq', value_required: true, sql_query: '=', }, not_equal_to: { pretty_name: 'Not Equal to', query: '$ne', value_required: true, sql_query: '!=', }, should_be_true: { pretty_name: 'Should be TRUE', query: '$eq', value_required: false, default_value: true, sql_query: 'IS TRUE', }, should_be_false: { pretty_name: 'Should be FALSE', query: '$eq', value_required: false, default_value: false, sql_query: 'IS FALSE', }, is_number: { pretty_name: 'Is number', query: '$type', value_required: false, default_value: 'number', }, is_text: { pretty_name: 'Is text', query: '$type', value_required: false, default_value: 'string', }, in: { pretty_name: 'In Array/List', query: '$in', value_required: true, render_type: 'TAG', default_value: [], sql_query: 'IN', }, nin: { pretty_name: 'Not In Array/List', query: '$nin', value_required: true, render_type: 'TAG', default_value: [], sql_query: 'NOT IN', }, is_required: { pretty_name: 'Is required', query: '$nin', value_required: false, default_value: [null, undefined, '', 0], }, regex: { pretty_name: 'Regex', query: '$regex', value_required: true, default_value: null, sql_query: 'LIKE', }, should_exist: { pretty_name: 'Should exist', query: '$exists', value_required: false, default_value: true, sql_query: 'IS NOT NULL', }, should_not_exist: { pretty_name: 'Should not exist', query: '$exists', value_required: false, default_value: false, sql_query: 'IS NULL', }, }; exports.LOGICAL_OPERATORS = { AND: '$and', OR: '$or', }; function transform(operator, condition) { var _a; var result = null; var converter = function (conditionObj) { var _a, _b, _c; var field = conditionObj.field, relation = conditionObj.relation, value = conditionObj.value; var relation_obj = exports.RELATIONAL_OPERATORS[relation]; var relation_str = {}; if (relation_obj.value_required) { relation_str = (_a = {}, _a[relation_obj.query] = value, _a); } else { relation_str = (_b = {}, _b[relation_obj.query] = relation_obj.default_value, _b); } return _c = {}, _c[field] = relation_str, _c; }; if (!operator) { //single value var validationObj = condition[0]; result = converter(validationObj); } else { //multiple value, operator (whatOperator) is required var requiredOperator = operator; var logicalOperatorCondition = (_a = {}, _a[requiredOperator] = [], _a); for (var _i = 0, condition_1 = condition; _i < condition_1.length; _i++) { var validationObj = condition_1[_i]; var convertedResult = validationObj.is_already_processed ? validationObj : converter(validationObj); if (convertedResult.is_already_processed) { delete convertedResult.is_already_processed; } logicalOperatorCondition[requiredOperator].push(convertedResult); } result = logicalOperatorCondition; } return result; } //# sourceMappingURL=condition-handler.js.map