schema-dsl 1.2.0 → 1.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +46 -34
- package/docs/error-handling.md +928 -2
- package/index.js +90 -10
- package/lib/errors/I18nError.js +0 -3
- package/package.json +1 -1
- package/changelogs/v1.2.0.md +0 -220
package/CHANGELOG.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# 变更日志 (CHANGELOG)
|
|
2
2
|
|
|
3
3
|
> **说明**: 版本概览摘要,详细变更见 [changelogs/](./changelogs/) 目录
|
|
4
|
-
> **最后更新**: 2026-02-
|
|
4
|
+
> **最后更新**: 2026-02-06
|
|
5
5
|
|
|
6
6
|
---
|
|
7
7
|
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
|
|
10
10
|
| 版本 | 日期 | 变更摘要 | 详细 |
|
|
11
11
|
|------|------|---------|------|
|
|
12
|
-
| [v1.2.
|
|
12
|
+
| [v1.2.2](./changelogs/v1.2.2.md) | 2026-02-06 | 🚀 重大功能:智能类型转换 - 字符串数字自动转换,完美支持 Web API | [查看](./changelogs/v1.2.2.md) |
|
|
13
13
|
| [v1.1.8](./changelogs/v1.1.8.md) | 2026-01-30 | 🚀 新功能:智能参数识别 - 支持简化语法 `dsl.error.throw('key', 'locale')` | [查看](./changelogs/v1.1.8.md) |
|
|
14
14
|
| [v1.1.7](./changelogs/v1.1.7.md) | 2026-01-27 | 🐛 Bug修复:错误消息路径显示优化 - 所有错误类型的 message 只显示字段名 | [查看](./changelogs/v1.1.7.md) |
|
|
15
15
|
| [v1.1.6](./changelogs/v1.1.6.md) | 2026-01-23 | 🐛 Bug修复:enum和additionalProperties错误消息模板变量未替换 | [查看](./changelogs/v1.1.6.md) |
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
| [v1.0.0](./changelogs/v1.0.0.md) | 2025-12-29 | 初始发布版本 | [查看](./changelogs/v1.0.0.md) |
|
|
32
32
|
|
|
33
33
|
> 💡 **提示**: 重要版本的详细变更记录在 [changelogs/](./changelogs/) 目录中。
|
|
34
|
-
> 当前已有详细文档的版本:v1.2.
|
|
34
|
+
> 当前已有详细文档的版本:v1.2.2, v1.1.8, v1.1.7, v1.1.6, v1.1.5, v1.1.4, v1.1.3, v1.1.2, v1.1.1, v1.1.0, v1.0.9, v1.0.0
|
|
35
35
|
> 其他版本的详细变更信息请参考项目提交历史或联系维护者。
|
|
36
36
|
|
|
37
37
|
---
|
|
@@ -40,51 +40,63 @@
|
|
|
40
40
|
|
|
41
41
|
| 版本系列 | 版本数 | 主要改进方向 |
|
|
42
42
|
|---------|-------|------------|
|
|
43
|
-
| v1.2.x | 1 |
|
|
44
|
-
| v1.1.x | 9 | 智能参数识别、Bug
|
|
43
|
+
| v1.2.x | 1 | 智能类型转换、Web API 完美支持 |
|
|
44
|
+
| v1.1.x | 9 | 智能参数识别、Bug修复、错误消息优化、错误配置增强、TypeScript类型完善、多语言支持、数字运算符、联合类型 |
|
|
45
45
|
| v1.0.x | 10 | 核心功能、验证器、测试覆盖、文档完善 |
|
|
46
46
|
|
|
47
47
|
---
|
|
48
48
|
|
|
49
49
|
## 里程碑版本
|
|
50
50
|
|
|
51
|
-
### v1.2.
|
|
51
|
+
### v1.2.2 - 智能类型转换 🚀
|
|
52
52
|
|
|
53
|
-
**发布日期**: 2026-02-
|
|
54
|
-
**重要性**:
|
|
53
|
+
**发布日期**: 2026-02-06
|
|
54
|
+
**重要性**: ⭐⭐⭐⭐⭐
|
|
55
55
|
|
|
56
56
|
**主要改进**:
|
|
57
|
-
-
|
|
58
|
-
- ✅
|
|
59
|
-
- ✅
|
|
60
|
-
- ✅
|
|
61
|
-
- ✅
|
|
62
|
-
|
|
63
|
-
**技术细节**:
|
|
64
|
-
- 在两个 `throw` 方法末尾添加 `throw new Error('unreachable')`
|
|
65
|
-
- 使用 `eslint-disable-next-line no-unreachable` 禁用 ESLint 警告
|
|
66
|
-
- 修改文件:`lib/errors/I18nError.js` (L211), `index.js` (L94-97)
|
|
67
|
-
- `assert` 方法使用 `asserts condition` 类型,无需修改
|
|
57
|
+
- 🚀 新增智能类型转换功能,自动将字符串数字转换为 number 类型
|
|
58
|
+
- ✅ 默认启用,零配置,开箱即用
|
|
59
|
+
- ✅ 完美支持 Web API 项目(Express、Koa 等)
|
|
60
|
+
- ✅ 保持类型安全(枚举字段不转换)
|
|
61
|
+
- ✅ 支持禁用选项 `validate(schema, data, { coerce: false })`
|
|
62
|
+
- ✅ 新增 23 个测试用例,100% 通过率
|
|
68
63
|
|
|
69
|
-
|
|
70
|
-
|
|
64
|
+
**核心特性**:
|
|
65
|
+
- 智能判断:只转换字符串→数字(且必须是有效数字)
|
|
66
|
+
- 类型安全:string 字段保持字符串,boolean 被正确拒绝
|
|
67
|
+
- 枚举保护:数字枚举 `1|2|3` 不接受字符串 `"1"`
|
|
68
|
+
- 边界处理:支持小数、负数、零、trim 等
|
|
71
69
|
|
|
72
70
|
**使用示例**:
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
71
|
+
```javascript
|
|
72
|
+
const { dsl, validate } = require('schema-dsl');
|
|
73
|
+
|
|
74
|
+
const schema = dsl({
|
|
75
|
+
userId: 'number!',
|
|
76
|
+
page: 'number?',
|
|
77
|
+
email: 'email!'
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
// ✅ 字符串自动转换为数字
|
|
81
|
+
const result = validate(schema, {
|
|
82
|
+
userId: '123', // → 123 (number)
|
|
83
|
+
page: '2', // → 2 (number)
|
|
84
|
+
email: 'test@example.com'
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
console.log(result.valid); // true
|
|
88
|
+
console.log(typeof result.data.userId); // 'number'
|
|
82
89
|
```
|
|
83
90
|
|
|
84
|
-
|
|
85
|
-
-
|
|
86
|
-
-
|
|
87
|
-
-
|
|
91
|
+
**技术细节**:
|
|
92
|
+
- 新增 `smartCoerceTypes()` 函数(约 60 行)
|
|
93
|
+
- 修改文件:`index.js`
|
|
94
|
+
- 测试文件:`test/unit/smart-coerce.test.js`(23 个测试)
|
|
95
|
+
- 零性能损失,运行时开销可忽略不计
|
|
96
|
+
|
|
97
|
+
**详细信息**: [查看 changelogs/v1.2.2.md](./changelogs/v1.2.2.md)
|
|
98
|
+
|
|
99
|
+
---
|
|
88
100
|
|
|
89
101
|
### v1.1.8 - 智能参数识别 🚀
|
|
90
102
|
|