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, 安全插件, 数学计算引擎, 数据可视化, 自动化攻击, 表达式解析, 表达式计算, 零依赖