schema-dsl 2.3.0 → 2.3.1

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.
@@ -13,7 +13,7 @@ jobs:
13
13
 
14
14
  strategy:
15
15
  matrix:
16
- node-version: [14.x, 16.x, 18.x, 20.x]
16
+ node-version: [16.x, 18.x, 20.x]
17
17
 
18
18
  steps:
19
19
  - uses: actions/checkout@v3
@@ -30,6 +30,4 @@ jobs:
30
30
  - name: Run tests
31
31
  run: npm test
32
32
 
33
- - name: Run benchmarks
34
- run: npm run test:benchmark
35
33
 
package/README.md CHANGED
@@ -17,6 +17,8 @@
17
17
 
18
18
  ### 代码量减少 65% | 性能优秀 | 独家数据库导出
19
19
 
20
+ ### 🆕 v2.1.0 新特性:异步验证 + Schema 链式复用
21
+
20
22
  </div>
21
23
 
22
24
  ---
@@ -69,6 +71,63 @@ const result = validate(schema, {
69
71
  console.log(result.valid); // true
70
72
  ```
71
73
 
74
+ ### 🆕 v2.1.0 新特性快速示例
75
+
76
+ #### 异步验证 + 自动错误处理
77
+
78
+ ```javascript
79
+ const { dsl, validateAsync, ValidationError } = require('schema-dsl');
80
+
81
+ // Express 中使用
82
+ app.post('/users', async (req, res, next) => {
83
+ try {
84
+ // 验证通过返回数据,失败自动抛出 ValidationError
85
+ const data = await validateAsync(userSchema, req.body);
86
+ const user = await db.users.insert(data);
87
+ res.json(user);
88
+ } catch (error) {
89
+ next(error); // 自动传递给错误处理中间件
90
+ }
91
+ });
92
+
93
+ // 全局错误处理
94
+ app.use((error, req, res, next) => {
95
+ if (error instanceof ValidationError) {
96
+ return res.status(error.statusCode).json(error.toJSON());
97
+ }
98
+ next(error);
99
+ });
100
+ ```
101
+
102
+ #### Schema 链式复用 - 一行代码搞定
103
+
104
+ ```javascript
105
+ const { SchemaUtils } = require('schema-dsl');
106
+
107
+ // POST /users - 创建用户(严格模式)
108
+ const createSchema = SchemaUtils
109
+ .omit(fullUserSchema, ['id', 'createdAt', 'updatedAt'])
110
+ .strict();
111
+
112
+ // GET /users/:id - 查询用户(移除敏感字段)
113
+ const publicSchema = SchemaUtils
114
+ .omit(fullUserSchema, ['password'])
115
+ .clean();
116
+
117
+ // PATCH /users/:id - 更新用户(部分验证,宽松模式)
118
+ const updateSchema = SchemaUtils
119
+ .pick(fullUserSchema, ['name', 'age'])
120
+ .partial()
121
+ .loose();
122
+ ```
123
+
124
+ **详细文档**:
125
+ - [异步验证完整指南](./docs/validate-async.md)
126
+ - [Schema链式复用方法](./docs/schema-utils-chaining.md)
127
+ - [Express集成示例](./examples/express-integration.js)
128
+
129
+ ---
130
+
72
131
  ### 📊 与其他库对比
73
132
 
74
133
  <table>
@@ -114,7 +173,9 @@ const schema = Joi.object({
114
173
  - **简洁语法**: 一行代码定义验证规则
115
174
  - **String扩展**: 字符串直接链式调用方法
116
175
  - **默认验证器**: 内置用户名、手机号、密码验证
117
- - **插件系统**: 强大的插件机制,支持自定义验证器和格式 🆕
176
+ - **🆕 异步验证(v2.1.0)**: `validateAsync` + `ValidationError` 自动错误处理
177
+ - **🆕 Schema链式复用(v2.1.0)**: 8个链式方法简化Schema复用
178
+ - **插件系统**: 强大的插件机制,支持自定义验证器和格式
118
179
  - **数据库导出**: 导出MongoDB/MySQL/PostgreSQL Schema
119
180
  - **多语言支持**: 内置中英文,可自定义语言包
120
181
  - **高性能**: 基于ajv,支持编译缓存
@@ -260,7 +321,7 @@ schema-dsl 使用**运行时解析**,而 Zod 使用**编译时构建**。
260
321
  res.json({ rules: { username: 'string:3-32!' } });
261
322
  ```
262
323
 
263
- **权衡结果**:
324
+ **权衡结果**
264
325
  ```
265
326
  损失:比 Zod 慢 1.9倍
266
327
  换来:代码量减少 65% + 完全动态性 + 独家功能
@@ -548,7 +609,7 @@ const result = validator.validate(validate, data);
548
609
 
549
610
  ## � 插件系统
550
611
 
551
- **v2.2.0 新增**:强大的插件机制,轻松扩展 SchemaIO 功能。
612
+ **v2.2.0 新增**:强大的插件机制,轻松扩展 schema-dsl 功能。
552
613
 
553
614
  ### 快速开始
554
615
 
@@ -688,6 +749,8 @@ pluginManager.clear(schema-dsl);
688
749
 
689
750
  ## �🗄️ 数据库导出
690
751
 
752
+ > ⚠️ **重要提示**: 并非所有 schema-dsl 特性都能导出到数据库。条件验证(`dsl.match()`、`dsl.if()`)、自定义验证器等无法导出。详见 [**导出限制说明**](docs/export-limitations.md)。
753
+
691
754
  ### MongoDB Schema
692
755
 
693
756
  ```javascript
@@ -861,7 +924,7 @@ const schema = dsl({
861
924
  - `type` - 类型不匹配
862
925
 
863
926
  **💡 简化的错误关键字**:
864
- SchemaIO 对常见的错误关键字做了简化:
927
+ schema-dsl 对常见的错误关键字做了简化:
865
928
  - `min` / `max` 代替 `minLength` / `maxLength` - 更简洁
866
929
  - 同时也支持完整关键字 `minLength` / `maxLength` - 向后兼容
867
930
 
@@ -932,7 +995,7 @@ const schema2 = dsl({ contactEmail: emailField() });
932
995
  const baseUser = dsl({ name: 'string!', email: 'email!' });
933
996
  const withAge = dsl({ age: 'number:18-120' });
934
997
 
935
- const merged = SchemaUtils.merge(baseUser, withAge);
998
+ const extended = SchemaUtils.extend(baseUser, { age: 'number:18-120' });
936
999
  ```
937
1000
 
938
1001
  ### Schema 筛选
@@ -1067,7 +1130,7 @@ npm run coverage # 测试覆盖率
1067
1130
 
1068
1131
  ### 贡献者
1069
1132
 
1070
- 感谢所有为 SchemaIO 做出贡献的开发者!
1133
+ 感谢所有为 schema-dsl 做出贡献的开发者!
1071
1134
 
1072
1135
  <a href="https://github.com/vextjs/schema-dsl/graphs/contributors">
1073
1136
  <img src="https://contrib.rocks/image?repo=vextjs/schema-dsl" />
@@ -1119,4 +1182,3 @@ Made with ❤️ by [vextjs](https://github.com/vextjs)
1119
1182
  </div>
1120
1183
 
1121
1184
 
1122
-
@@ -290,7 +290,7 @@ const schema1 = dsl({ email: emailField() });
290
290
  const schema2 = dsl({ contactEmail: emailField() });
291
291
 
292
292
  // Schema合并
293
- const merged = SchemaUtils.merge(schema1, schema2);
293
+ const extended = SchemaUtils.extend(schema1, { age: 'number' });
294
294
  ```
295
295
 
296
296
  **文档位置**:
package/docs/INDEX.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  > **更新时间**: 2025-12-29
4
4
  > **用途**: 所有文档的快速导航
5
- > **文档数量**: 26个文档(总计 11,600+ 行)
5
+ > **文档数量**: 27个文档(总计 12,450+ 行)
6
6
 
7
7
  ---
8
8
 
@@ -45,6 +45,10 @@
45
45
  | [plugin-system.md](plugin-system.md) | 580行 | **插件系统指南** ⭐⭐ |
46
46
  | [api-reference.md](api-reference.md) | 534行 | API完整参考 ⭐⭐ |
47
47
  | [validate.md](validate.md) | 452行 | validate方法详解 ⭐ |
48
+ | [**validate-async.md**](validate-async.md) | ~700行 | **异步验证方法详解** ⭐⭐⭐ |
49
+ | [**schema-utils-chaining.md**](schema-utils-chaining.md) | ~680行 | **Schema链式复用方法** ⭐⭐⭐ |
50
+ | [**schema-utils-best-practices.md**](schema-utils-best-practices.md) | ~500行 | **SchemaUtils最佳实践与常见陷阱** ⭐⭐⭐ |
51
+ | [**schema-utils-advanced-issues.md**](schema-utils-advanced-issues.md) | ~600行 | **SchemaUtils深入问题分析** ⭐⭐ |
48
52
 
49
53
  ---
50
54
 
@@ -59,6 +63,9 @@
59
63
  | String 扩展 | [string-extensions.md](string-extensions.md) | `lib/core/StringExtensions.js` |
60
64
  | Validator 类 | [validate.md](validate.md) | `lib/core/Validator.js` |
61
65
  | validate() 函数 | [api-reference.md](api-reference.md) | `index.js` |
66
+ | **validateAsync() 函数(v2.1.0)** | [validate-async.md](validate-async.md) | `index.js` |
67
+ | **ValidationError 类(v2.1.0)** | [validate-async.md](validate-async.md#validationerror) | `lib/errors/ValidationError.js` |
68
+ | **SchemaUtils 链式调用(v2.1.0)** | [schema-utils-chaining.md](schema-utils-chaining.md) | `lib/utils/SchemaUtils.js` |
62
69
 
63
70
 
64
71
  ---
@@ -67,6 +74,21 @@
67
74
 
68
75
  > 将 JSON Schema 转换为数据库 DDL 和验证规则
69
76
 
77
+ > ⚠️ **重要提示**: 请先阅读 [**导出限制说明**](export-limitations.md),了解哪些特性无法导出到数据库 Schema。
78
+
79
+ ### 导出限制说明 ⚠️
80
+
81
+ | 文档 | 说明 |
82
+ |------|------|
83
+ | [**export-limitations.md**](export-limitations.md) | **导出限制完整说明**(必读)⭐⭐⭐ |
84
+
85
+ **主要内容**:
86
+ - ❌ 不支持导出的特性(条件验证、自定义验证器等)
87
+ - ⚠️ 部分支持的特性(正则、范围、枚举等)
88
+ - ✅ 完全支持的特性(基础类型、必填约束等)
89
+ - 数据库特定限制对比(MongoDB/MySQL/PostgreSQL)
90
+ - 最佳实践建议(分层验证、文档化约束等)
91
+
70
92
  ### MongoDB 导出器
71
93
 
72
94
  | 文档 | 行数 | 说明 |
@@ -149,6 +171,13 @@
149
171
  - 错误处理最佳实践
150
172
 
151
173
  ### 导出指南内容
174
+ - MongoDB/MySQL/PostgreSQL 导出对比
175
+ - 配置与自定义选项
176
+ - 自动化迁移脚本
177
+ - 版本管理与最佳实践
178
+ - **⚠️ [导出限制说明](export-limitations.md) - 哪些特性无法导出** ⭐⭐⭐
179
+
180
+
152
181
  - 数据库导出概述
153
182
  - MongoDB/MySQL/PostgreSQL 导出教程
154
183
  - 多数据库同步方案
@@ -219,6 +248,6 @@
219
248
  - ⭐⭐ 核心文档
220
249
  - ⭐⭐⭐ 必读文档
221
250
 
222
- **最后更新**: 2025-12-26
251
+ **最后更新**: 2025-12-29
223
252
 
224
253
 
@@ -3,6 +3,8 @@
3
3
  > **用途**: Schema 到数据库 DDL 的完整导出指南
4
4
  > **阅读时间**: 10分钟
5
5
 
6
+ > ⚠️ **重要提示**: 并非所有 SchemaIO 特性都能导出到数据库。请先阅读 [导出限制说明](export-limitations.md) 了解哪些特性不支持导出。
7
+
6
8
  ---
7
9
 
8
10
  ## 📑 目录
@@ -451,6 +453,7 @@ console.log('导出完成!');
451
453
 
452
454
  ## 相关文档
453
455
 
456
+ - [**导出限制说明**](export-limitations.md) ⚠️ **必读**
454
457
  - [MongoDB 导出器](mongodb-exporter.md)
455
458
  - [MySQL 导出器](mysql-exporter.md)
456
459
  - [PostgreSQL 导出器](postgresql-exporter.md)