alecasg555/safe-expr-eval

GitHub: alecasg555/safe-expr-eval

一款轻量级、零依赖的 JavaScript/TypeScript 表达式评估库,作为 expr-eval 的安全替代方案,修复了 CVE-2025-12735 漏洞。

Stars: 4 | Forks: 1

# safe-expr-eval 适用于 JavaScript 和 TypeScript 的快速且轻量级的表达式评估器。 一个现代的表达式解析器,拥有熟悉的 API、零依赖以及完整的 TypeScript 支持。 ## 功能 * 快速的表达式解析与评估 * 轻量级且零依赖 * 完整的 TypeScript 支持 * 简单且熟悉的 API * 自定义函数和常量 * 兼容 ES2020+ * 经过充分测试 ## 安装 ``` npm install safe-expr-eval ``` # 快速入门 ## 基本用法 ``` import { Parser } from 'safe-expr-eval'; const parser = new Parser(); const expr = parser.parse('2 * x + 1'); console.log(expr.evaluate({ x: 3 })); // 7 console.log(expr.evaluate({ x: 10 })); // 21 ``` ## 直接评估 ``` import { evaluate } from 'safe-expr-eval'; const result = evaluate('10 + 5 * 2'); console.log(result); // 20 ``` ## 编译表达式 ``` import { compile } from 'safe-expr-eval'; const fn = compile('price * quantity * (1 - discount)'); console.log( fn({ price: 100, quantity: 2, discount: 0.1 }) ); // 180 ``` # 支持的操作 ## 算术 ``` + - * / % ``` ## 比较 ``` == != > < >= <= ``` ## 逻辑 ``` and or not && || ! ``` # 数据类型 ``` Numbers → 42, 3.14 Strings → "hello" Booleans → true, false Variables → price, user.name ``` # 自定义函数 ``` const parser = new Parser(); parser.functions.max = Math.max; parser.functions.min = Math.min; parser.functions.round = Math.round; const expr = parser.parse( 'round(max(a, b) * 1.5)' ); console.log( expr.evaluate({ a: 10, b: 20 }) ); // 30 ``` # 常量 ``` const parser = new Parser(); parser.consts.PI = Math.PI; parser.consts.TAX_RATE = 0.15; const expr = parser.parse( 'price * (1 + TAX_RATE)' ); console.log( expr.evaluate({ price: 100 }) ); // 115 ``` # API ## 解析器 ### 创建解析器 ``` new Parser() ``` ### 解析表达式 ``` parser.parse(expression) ``` ### 评估表达式 ``` parser.evaluate(expression, variables?) ``` ### 函数注册表 ``` parser.functions ``` ### 常量注册表 ``` parser.consts ``` # 独立函数 ## evaluate ``` evaluate(expression, variables?) ``` ## compile ``` compile(expression) ``` # 测试 ``` npm test ``` ``` npm run test:coverage ``` # 许可证 MIT 有关详细信息,请参阅 LICENSE 文件。 # 问题 如果您发现 bug 或有功能请求,请提交一个 issue。 # 作者 Alejandro Castrillon ``` GitHub: https://github.com/ ```
标签:CMS安全, JavaScript, MITM代理, TypeScript, 安全插件, 数学计算引擎, 数据可视化, 自动化攻击, 表达式解析, 表达式计算, 零依赖