Socket
Socket
Sign inDemoInstall

@btjs/eval-js

Package Overview
Dependencies
0
Maintainers
1
Versions
4
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 1.0.2 to 1.0.10

8

dist/dts/index.d.ts

@@ -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",

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc