UNPKG

@lightningkite/lightning-server-simplified

Version:
130 lines 4.43 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.or = exports.and = exports.condition = exports.evaluateCondition = void 0; function evaluateCondition(condition, model) { const key = Object.keys(condition)[0]; const value = condition[key]; switch (key) { case "Never": return false; case "Always": return true; case "And": return value.every((x) => evaluateCondition(x, model)); case "Or": return value.some((x) => evaluateCondition(x, model)); case "Not": return !evaluateCondition(value, model); case "Equal": return model === value; case "NotEqual": return model !== value; case "Inside": return value.indexOf(model) !== -1; case "NotInside": return value.indexOf(model) === -1; case "GreaterThan": return model > value; case "LessThan": return model < value; case "GreaterThanOrEqual": return model >= value; case "LessThanOrEqual": return model <= value; case "StringContains": const v = value; if (v.ignoreCase) return model.toLowerCase().indexOf(v.value) !== -1; else return model.indexOf(v.value) !== -1; case "FullTextSearch": const v2 = value; if (v2.ignoreCase) return model.toLowerCase().indexOf(v2.value) !== -1; else return model.indexOf(v2.value) !== -1; case "IntBitsClear": return (model & value) === 0; case "IntBitsSet": return (model & value) === value; case "IntBitsAnyClear": return (model & value) < value; case "IntBitsAnySet": return (model & value) > 0; case "ListAllElements": return model.every((x) => evaluateCondition(value, x)); case "ListAnyElements": return model.some((x) => evaluateCondition(value, x)); case "ListSizesEquals": return model.length === value; case "SetAllElements": return Array.from(model).every((x) => evaluateCondition(value, x)); case "SetAnyElements": return Array.from(model).some((x) => evaluateCondition(value, x)); case "SetSizesEquals": return model.size === value; case "Exists": return true; case "IfNotNull": return (model !== null && model !== undefined && evaluateCondition(value, model)); default: return evaluateCondition(value, model[key]); } } exports.evaluateCondition = evaluateCondition; function condition(key, value) { const parts = key.split(":"); const path = parts[0]; const comparison = parts[1]; const pathParts = path.split("."); let current = {}; current[comparison] = value; for (const part of pathParts.reverse()) { const past = current; current = {}; current[part] = past; } return current; } exports.condition = condition; function and(conditionBuilder) { if (Array.isArray(conditionBuilder)) return { And: conditionBuilder }; let subconditions = []; for (const key in conditionBuilder) { if (key.length === 0) { subconditions.push(conditionBuilder[""]); continue; } subconditions.push(condition(key, conditionBuilder[key])); } if (subconditions.length == 1) return subconditions[0]; else if (subconditions.length == 0) return { Always: true }; else return { And: subconditions }; } exports.and = and; function or(conditionBuilder) { if (Array.isArray(conditionBuilder)) return { Or: conditionBuilder }; let subconditions = []; for (const key in conditionBuilder) { if (key.length === 0) { subconditions.push(conditionBuilder[""]); continue; } subconditions.push(condition(key, conditionBuilder[key])); } if (subconditions.length == 1) return subconditions[0]; else if (subconditions.length == 0) return { Always: true }; else return { Or: subconditions }; } exports.or = or; //# sourceMappingURL=Condition.js.map