@btjs/eval-js
Advanced tools
Comparing version 1.0.2 to 1.0.10
@@ -1,2 +0,2 @@ | ||
export declare const OPERATORS: Set<string> | ||
export declare const OPERATORS: Set<string>; | ||
/** | ||
@@ -9,4 +9,4 @@ * Finds a value by a dotted path. | ||
*/ | ||
export declare function findValueByDottedPath(part: string | number, state: Object): any | ||
export declare function parseExpression(expression: string): string[] | ||
export declare function safeEvaluateExpression(expression: string[], state: any): boolean | ||
export declare function findValueByDottedPath(part: string | number, state: Object): any; | ||
export declare function parseExpression(expression: string): string[]; | ||
export declare function safeEvaluateExpression(expression: string[], state: any): boolean; |
// src/index.ts | ||
var OPERATORS_ARRAY = ['&&', '||', '==', '>=', '<=', '>', '<', '!', '(', ')'] | ||
var OPERATORS_ARRAY = ["&&", "||", "==", ">=", "<=", ">", "<", "!", "(", ")"]; | ||
var OPERATOR_REGEX = new RegExp( | ||
`(${OPERATORS_ARRAY.map((op) => op.replace(/\|/g, '\\|').replace(/\(/g, '\\(').replace(/\)/g, '\\)')).join('|')})`, | ||
) | ||
var OPERATORS = new Set(OPERATORS_ARRAY) | ||
`(${OPERATORS_ARRAY.map((op) => op.replace(/\|/g, "\\|").replace(/\(/g, "\\(").replace(/\)/g, "\\)")).join("|")})` | ||
); | ||
var OPERATORS = new Set(OPERATORS_ARRAY); | ||
function findValueByDottedPath(part, state) { | ||
let value | ||
let value; | ||
if (isNaN(Number(part))) { | ||
const properties = part.split('.') | ||
value = state | ||
const properties = part.split("."); | ||
value = state; | ||
for (const property of properties) { | ||
value = value[property] | ||
value = value[property]; | ||
if (value === void 0) { | ||
break | ||
break; | ||
} | ||
} | ||
} else { | ||
value = Number(part) | ||
value = Number(part); | ||
} | ||
return value | ||
return value; | ||
} | ||
function parseExpression(expression) { | ||
return expression.split(OPERATOR_REGEX).filter((part) => part && part.trim().length).map((s) => s.trim()) | ||
return expression.split(OPERATOR_REGEX).filter((part) => part && part.trim().length).map((s) => s.trim()); | ||
} | ||
function safeEvaluateExpression(expression, state) { | ||
const parts = expression.slice().reverse() | ||
return evaluate(parts, state) | ||
const parts = expression.slice().reverse(); | ||
return evaluate(parts, state); | ||
} | ||
function evaluate(tokens, state) { | ||
let currentValue = null | ||
let currentOperator = null | ||
let currentValue = null; | ||
let currentOperator = null; | ||
while (tokens.length > 0) { | ||
let token = tokens.pop() | ||
let token = tokens.pop(); | ||
switch (token) { | ||
case '(': { | ||
let value = evaluate(tokens, state) | ||
currentValue = applyOperator(currentValue, currentOperator, value) | ||
currentOperator = null | ||
break | ||
case "(": { | ||
let value = evaluate(tokens, state); | ||
currentValue = applyOperator(currentValue, currentOperator, value); | ||
currentOperator = null; | ||
break; | ||
} | ||
case ')': | ||
break | ||
case '==': | ||
case '!=': | ||
case '<': | ||
case '<=': | ||
case '>': | ||
case '>=': | ||
case '&&': | ||
case '||': | ||
case '!': { | ||
case ")": | ||
break; | ||
case "==": | ||
case "!=": | ||
case "<": | ||
case "<=": | ||
case ">": | ||
case ">=": | ||
case "&&": | ||
case "||": | ||
case "!": { | ||
if (currentOperator !== null) { | ||
let value = evaluate(tokens, state) | ||
currentValue = applyOperator(currentValue, currentOperator, value) | ||
let value = evaluate(tokens, state); | ||
currentValue = applyOperator(currentValue, currentOperator, value); | ||
} | ||
currentOperator = token | ||
break | ||
currentOperator = token; | ||
break; | ||
} | ||
default: { | ||
let value = parseValue(token, state) | ||
currentValue = applyOperator(currentValue, currentOperator, value) | ||
currentOperator = null | ||
break | ||
let value = parseValue(token, state); | ||
currentValue = applyOperator(currentValue, currentOperator, value); | ||
currentOperator = null; | ||
break; | ||
} | ||
@@ -69,29 +69,29 @@ } | ||
if (currentOperator !== null) { | ||
let value = evaluate(tokens, state) | ||
currentValue = applyOperator(currentValue, currentOperator, value) | ||
let value = evaluate(tokens, state); | ||
currentValue = applyOperator(currentValue, currentOperator, value); | ||
} | ||
return currentValue | ||
return currentValue; | ||
} | ||
function applyOperator(value1, operator, value2) { | ||
switch (operator) { | ||
case '==': | ||
return Boolean(value1 == value2) | ||
case '!=': | ||
return Boolean(value1 != value2) | ||
case '>': | ||
return Boolean(value1 > value2) | ||
case '<': | ||
return Boolean(value1 < value2) | ||
case '>=': | ||
return Boolean(value1 >= value2) | ||
case '<=': | ||
return Boolean(value1 <= value2) | ||
case '&&': | ||
return Boolean(value1 && value2) | ||
case '||': | ||
return Boolean(value1 || value2) | ||
case '!': | ||
return Boolean(!value2) | ||
case "==": | ||
return Boolean(value1 == value2); | ||
case "!=": | ||
return Boolean(value1 != value2); | ||
case ">": | ||
return Boolean(value1 > value2); | ||
case "<": | ||
return Boolean(value1 < value2); | ||
case ">=": | ||
return Boolean(value1 >= value2); | ||
case "<=": | ||
return Boolean(value1 <= value2); | ||
case "&&": | ||
return Boolean(value1 && value2); | ||
case "||": | ||
return Boolean(value1 || value2); | ||
case "!": | ||
return Boolean(!value2); | ||
default: | ||
return value2 | ||
return value2; | ||
} | ||
@@ -101,17 +101,22 @@ } | ||
if (!isNaN(Number(token))) { | ||
return Number(token) | ||
return Number(token); | ||
} | ||
if (token.startsWith('"') || token.startsWith("'")) { | ||
return token.slice(1, -1) | ||
return token.slice(1, -1); | ||
} | ||
switch (token) { | ||
case 'true': | ||
return true | ||
case 'false': | ||
return false | ||
case "true": | ||
return true; | ||
case "false": | ||
return false; | ||
default: | ||
return findValueByDottedPath(token, state) || false | ||
return findValueByDottedPath(token, state) || false; | ||
} | ||
} | ||
export { OPERATORS, findValueByDottedPath, parseExpression, safeEvaluateExpression } | ||
// # sourceMappingURL=index.js.map | ||
export { | ||
OPERATORS, | ||
findValueByDottedPath, | ||
parseExpression, | ||
safeEvaluateExpression | ||
}; | ||
//# sourceMappingURL=index.js.map |
{ | ||
"name": "@btjs/eval-js", | ||
"version": "1.0.2", | ||
"version": "1.0.10", | ||
"description": "BTJS Safge Expression Evaluation", | ||
@@ -5,0 +5,0 @@ "main": "./dist/index.js", |
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
10036
4
131