schema-dsl 1.0.0 → 1.0.4
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 +263 -529
- package/README.md +814 -896
- package/STATUS.md +135 -2
- package/docs/INDEX.md +1 -2
- package/docs/api-reference.md +1 -292
- package/docs/custom-extensions-guide.md +411 -0
- package/docs/enum.md +475 -0
- package/docs/i18n.md +394 -0
- package/docs/performance-benchmark-report.md +179 -0
- package/docs/plugin-system.md +8 -8
- package/docs/typescript-guide.md +554 -0
- package/docs/validate-async.md +1 -1
- package/docs/validation-rules-v1.0.2.md +1601 -0
- package/examples/README.md +81 -0
- package/examples/enum.examples.js +324 -0
- package/examples/express-integration.js +54 -54
- package/examples/i18n-full-demo.js +15 -24
- package/examples/schema-utils-chaining.examples.js +2 -2
- package/examples/slug.examples.js +179 -0
- package/index.d.ts +246 -17
- package/index.js +30 -34
- package/lib/config/constants.js +1 -1
- package/lib/config/patterns/common.js +47 -0
- package/lib/config/patterns/index.js +2 -1
- package/lib/core/DslBuilder.js +500 -8
- package/lib/core/StringExtensions.js +31 -0
- package/lib/core/Validator.js +42 -15
- package/lib/errors/ValidationError.js +3 -3
- package/lib/locales/en-US.js +79 -19
- package/lib/locales/es-ES.js +60 -19
- package/lib/locales/fr-FR.js +84 -43
- package/lib/locales/ja-JP.js +83 -42
- package/lib/locales/zh-CN.js +32 -0
- package/lib/validators/CustomKeywords.js +405 -0
- package/package.json +1 -1
- package/.github/CODE_OF_CONDUCT.md +0 -45
- package/.github/ISSUE_TEMPLATE/bug_report.md +0 -57
- package/.github/ISSUE_TEMPLATE/config.yml +0 -11
- package/.github/ISSUE_TEMPLATE/feature_request.md +0 -45
- package/.github/ISSUE_TEMPLATE/question.md +0 -31
- package/.github/PULL_REQUEST_TEMPLATE.md +0 -70
- package/.github/SECURITY.md +0 -184
- package/.github/workflows/ci.yml +0 -33
- package/plugins/custom-format.js +0 -101
- package/plugins/custom-validator.js +0 -200
package/STATUS.md
CHANGED
|
@@ -1,19 +1,152 @@
|
|
|
1
1
|
# schema-dsl 项目状态
|
|
2
2
|
|
|
3
|
-
> **最后更新**: 2025-12-
|
|
4
|
-
> **当前版本**: v1.0.
|
|
3
|
+
> **最后更新**: 2025-12-31
|
|
4
|
+
> **当前版本**: v1.0.4
|
|
5
5
|
> **项目状态**: ✅ 全部完成,测试100%通过
|
|
6
6
|
|
|
7
7
|
---
|
|
8
8
|
|
|
9
9
|
## 📋 目录
|
|
10
10
|
|
|
11
|
+
- [v1.0.4](#v104) - 2025-12-31 ✅ 已完成
|
|
12
|
+
- [v1.0.3](#v103) - 2025-12-31 ⚠️ 破坏性变更
|
|
13
|
+
- [v1.0.2](#v102) - 2025-12-31 ✅ 已完成
|
|
14
|
+
- [v1.0.1](#v101) - 2025-12-31 ✅ 已完成
|
|
11
15
|
- [v1.0.0](#v100) - 2025-12-29 ✅ 已完成
|
|
12
16
|
|
|
13
17
|
---
|
|
14
18
|
|
|
15
19
|
## 版本发布计划
|
|
16
20
|
|
|
21
|
+
### v1.0.4
|
|
22
|
+
|
|
23
|
+
**发布日期**: 2025-12-31
|
|
24
|
+
**状态**: ✅ 已完成
|
|
25
|
+
**类型**: ✨ 功能增强(TypeScript 完整支持)
|
|
26
|
+
**进度**: 100%完成 | 新增: TypeScript 类型定义、使用指南 | 文档: 1500+ 行
|
|
27
|
+
|
|
28
|
+
| 需求标题 | 状态 | 优先级 | 详细 |
|
|
29
|
+
|---------|------|--------|------|
|
|
30
|
+
| 完善 index.d.ts | ✅ 完成 | P0 | validateAsync、ValidationError 类型 |
|
|
31
|
+
| String 扩展 TS 说明 | ✅ 完成 | P0 | 添加详细使用说明和对比 |
|
|
32
|
+
| TypeScript 使用指南 | ✅ 完成 | P0 | 1000+ 行完整文档 |
|
|
33
|
+
| README 更新 | ✅ 完成 | P0 | 添加 TypeScript 章节 |
|
|
34
|
+
| 类型错误修复 | ✅ 完成 | P0 | 修复 dsl.config i18n 类型 |
|
|
35
|
+
| 发版文档更新 | ✅ 完成 | P0 | CHANGELOG、STATUS、package.json |
|
|
36
|
+
|
|
37
|
+
**实现状态统计**:
|
|
38
|
+
- ✅ 完成: 6个
|
|
39
|
+
- 🔄 进行中: 0个
|
|
40
|
+
- ⏳ 待完成: 0个
|
|
41
|
+
|
|
42
|
+
**核心变更**:
|
|
43
|
+
- ✅ **新增**: validateAsync 函数完整类型定义
|
|
44
|
+
- ✅ **新增**: ValidationError 类完整类型(含所有方法)
|
|
45
|
+
- ✅ **优化**: String 扩展添加 TypeScript 使用说明
|
|
46
|
+
- ✅ **新增**: TypeScript 使用指南文档(1000+ 行)
|
|
47
|
+
- ✅ **修复**: dsl.config 的 i18n 参数类型错误
|
|
48
|
+
- ✅ **文档**: README 添加 TypeScript 快速开始章节
|
|
49
|
+
|
|
50
|
+
**用户价值**:
|
|
51
|
+
- 🎯 TypeScript 用户获得完整的类型安全和 IDE 提示
|
|
52
|
+
- 🎯 详细的文档指导如何在 TypeScript 中正确使用
|
|
53
|
+
- 🎯 JavaScript 用户体验不变,100% 向后兼容
|
|
54
|
+
- 🎯 降低学习成本,提高开发效率
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
### v1.0.3
|
|
59
|
+
|
|
60
|
+
**发布日期**: 2025-12-31
|
|
61
|
+
**状态**: ✅ 已完成
|
|
62
|
+
**类型**: ⚠️ 破坏性变更
|
|
63
|
+
**进度**: 100%完成 | 修复: String单值语法 | 测试: 3个新增测试
|
|
64
|
+
|
|
65
|
+
| 需求标题 | 状态 | 优先级 | 详细 |
|
|
66
|
+
|---------|------|--------|------|
|
|
67
|
+
| String单值语法修复 | ✅ 完成 | P0 | 'string:N' 改为精确长度 |
|
|
68
|
+
| 核心代码修改 | ✅ 完成 | P0 | DslBuilder.js |
|
|
69
|
+
| 测试用例更新 | ✅ 完成 | P0 | 2个修改 + 1个新增 |
|
|
70
|
+
| 文档更新 | ✅ 完成 | P0 | README + CHANGELOG |
|
|
71
|
+
| 迁移指南 | ✅ 完成 | P0 | CHANGELOG 破坏性变更说明 |
|
|
72
|
+
| 新增链式方法 | ✅ 完成 | P1 | dateGreater, dateLess |
|
|
73
|
+
|
|
74
|
+
**实现状态统计**:
|
|
75
|
+
- ✅ 完成: 6个
|
|
76
|
+
- 🔄 进行中: 0个
|
|
77
|
+
- ⏳ 待完成: 0个
|
|
78
|
+
|
|
79
|
+
**核心变更**:
|
|
80
|
+
- ⚠️ **破坏性**: `'string:N'` → exactLength: N(之前是 maxLength: N)
|
|
81
|
+
- ✅ **新增**: `'string:-N'` → maxLength: N(明确语法)
|
|
82
|
+
- ✅ **保持**: Number 单值仍为 maximum(无变更)
|
|
83
|
+
- ✅ **新增**: dateGreater() 和 dateLess() 链式方法
|
|
84
|
+
|
|
85
|
+
---
|
|
86
|
+
|
|
87
|
+
### v1.0.2
|
|
88
|
+
|
|
89
|
+
**发布日期**: 2025-12-31
|
|
90
|
+
**状态**: ✅ 已完成
|
|
91
|
+
**进度**: 100%完成 | 新增: 15个验证器 | 测试: 75个新增测试
|
|
92
|
+
|
|
93
|
+
| 需求标题 | 状态 | 优先级 | 详细 |
|
|
94
|
+
|---------|------|--------|------|
|
|
95
|
+
| String验证器扩展 | ✅ 完成 | P1 | 6个新增验证器 |
|
|
96
|
+
| Number验证器扩展 | ✅ 完成 | P1 | 2个新增验证器 |
|
|
97
|
+
| Object验证器扩展 | ✅ 完成 | P1 | 2个新增验证器 |
|
|
98
|
+
| Array验证器扩展 | ✅ 完成 | P1 | 2个新增验证器 |
|
|
99
|
+
| Date验证器扩展 | ✅ 完成 | P1 | 3个新增验证器 |
|
|
100
|
+
| 多语言支持 | ✅ 完成 | P0 | 中英文19个消息 |
|
|
101
|
+
| 文档补充 | ✅ 完成 | P0 | 15个验证器文档 |
|
|
102
|
+
| 示例代码 | ⏳ 待完成 | P1 | 演示新增功能 |
|
|
103
|
+
| 单元测试 | ✅ 完成 | P0 | 75个测试用例 |
|
|
104
|
+
|
|
105
|
+
**实现状态统计**:
|
|
106
|
+
- ✅ 完成: 8个
|
|
107
|
+
- 🔄 进行中: 0个
|
|
108
|
+
- ⏳ 待完成: 1个
|
|
109
|
+
|
|
110
|
+
**核心功能**:
|
|
111
|
+
- ✨ **String验证器**: exactLength, alphanum, trim, lowercase, uppercase, jsonString
|
|
112
|
+
- 🔢 **Number验证器**: precision, port
|
|
113
|
+
- 📦 **Object验证器**: requiredAll, strictSchema
|
|
114
|
+
- 📋 **Array验证器**: noSparse, includesRequired
|
|
115
|
+
- 📅 **Date验证器**: dateFormat, dateGreater, dateLess
|
|
116
|
+
- 🌍 **多语言支持**: 中英文各19个新增消息
|
|
117
|
+
- 📝 **完整文档**: validation-rules-v1.0.2.md(1200行)
|
|
118
|
+
- 🧪 **测试覆盖**: 75个测试用例,100%通过
|
|
119
|
+
|
|
120
|
+
### v1.0.1
|
|
121
|
+
|
|
122
|
+
**发布日期**: 2025-12-31
|
|
123
|
+
**状态**: ✅ 已完成
|
|
124
|
+
**进度**: 100%完成 | 新增: 枚举功能 | 测试: 30个新增测试
|
|
125
|
+
|
|
126
|
+
| 需求标题 | 状态 | 优先级 | 详细 |
|
|
127
|
+
|---------|------|--------|------|
|
|
128
|
+
| 枚举语法支持 | ✅ 完成 | P0 | value1\|value2 简写语法 |
|
|
129
|
+
| 枚举类型自动识别 | ✅ 完成 | P0 | 字符串/布尔值/数字自动识别 |
|
|
130
|
+
| 枚举显式类型 | ✅ 完成 | P1 | enum:type:values 语法 |
|
|
131
|
+
| 布尔值枚举 | ✅ 完成 | P0 | true\|false 自动识别 |
|
|
132
|
+
| 数字枚举 | ✅ 完成 | P0 | 1\|2\|3 自动识别 |
|
|
133
|
+
| 整数枚举 | ✅ 完成 | P1 | enum:integer:values |
|
|
134
|
+
| 枚举必填标记 | ✅ 完成 | P0 | value1\|value2! |
|
|
135
|
+
| 枚举错误消息 | ✅ 完成 | P0 | 统一使用 'enum' 键 |
|
|
136
|
+
| 枚举文档 | ✅ 完成 | P0 | docs/enum.md 完整文档 |
|
|
137
|
+
| 枚举示例 | ✅ 完成 | P1 | examples/enum.examples.js |
|
|
138
|
+
| 枚举测试 | ✅ 完成 | P0 | 30个测试用例 |
|
|
139
|
+
|
|
140
|
+
**实现状态统计**:
|
|
141
|
+
- ✅ 完成: 11个
|
|
142
|
+
- 🔄 进行中: 0个
|
|
143
|
+
- ⏳ 待完成: 0个
|
|
144
|
+
|
|
145
|
+
**核心功能**:
|
|
146
|
+
- ✨ **枚举支持**: 'active|inactive', '1|2|3', 'true|false' 自动识别类型
|
|
147
|
+
- 🎯 **简洁语法**: 统一使用 'enum' 键定义错误消息
|
|
148
|
+
- 🔧 **灵活配置**: 支持显式指定类型 enum:type:values
|
|
149
|
+
|
|
17
150
|
### v1.0.0
|
|
18
151
|
|
|
19
152
|
**发布日期**: 2025-12-29
|
package/docs/INDEX.md
CHANGED
|
@@ -190,7 +190,7 @@
|
|
|
190
190
|
|
|
191
191
|
| 文件 | 说明 |
|
|
192
192
|
|------|------|
|
|
193
|
-
| [
|
|
193
|
+
| [simple-example.js](../examples/simple-example.js) | 简单示例 |
|
|
194
194
|
| [dsl-style.js](../examples/dsl-style.js) | DSL 风格完整示例 |
|
|
195
195
|
| [string-extensions.js](../examples/string-extensions.js) | String 扩展示例 |
|
|
196
196
|
| [password-reset/](../examples/password-reset/) | 密码重置表单示例 |
|
|
@@ -217,7 +217,6 @@
|
|
|
217
217
|
| 文档 | 说明 |
|
|
218
218
|
|------|------|
|
|
219
219
|
| [CONTRIBUTING.md](../CONTRIBUTING.md) | 贡献指南 |
|
|
220
|
-
| [DOCUMENTATION-ISSUES.md](../DOCUMENTATION-ISSUES.md) | 文档审核报告 |
|
|
221
220
|
|
|
222
221
|
---
|
|
223
222
|
|
package/docs/api-reference.md
CHANGED
|
@@ -337,298 +337,7 @@ dsl.if('isVip', 'number:0-50', 'number:0-10')
|
|
|
337
337
|
|
|
338
338
|
---
|
|
339
339
|
|
|
340
|
-
##
|
|
341
|
-
|
|
342
|
-
### 描述
|
|
343
|
-
|
|
344
|
-
Schema 构建器类,支持链式调用添加验证规则。
|
|
345
|
-
|
|
346
|
-
### 构造函数
|
|
347
|
-
|
|
348
|
-
```javascript
|
|
349
|
-
new DslBuilder(dslString: string)
|
|
350
|
-
```
|
|
351
|
-
|
|
352
|
-
**参数**:
|
|
353
|
-
- `dslString` (**string**) - DSL字符串,如 `'string:3-32!'`
|
|
354
|
-
|
|
355
|
-
### 方法
|
|
356
|
-
|
|
357
|
-
#### `.pattern(regex, message?)`
|
|
358
|
-
|
|
359
|
-
添加正则表达式验证。
|
|
360
|
-
|
|
361
|
-
**参数**:
|
|
362
|
-
- `regex` (**RegExp** | **string**) - 正则表达式
|
|
363
|
-
- `message` (**string**, 可选) - 自定义错误消息
|
|
364
|
-
|
|
365
|
-
**返回**: **DslBuilder**
|
|
366
|
-
|
|
367
|
-
**示例**:
|
|
368
|
-
```javascript
|
|
369
|
-
dsl('string:3-32!')
|
|
370
|
-
.pattern(/^[a-zA-Z0-9_]+$/, '只能包含字母、数字和下划线')
|
|
371
|
-
```
|
|
372
|
-
|
|
373
|
-
---
|
|
374
|
-
|
|
375
|
-
#### `.label(text)`
|
|
376
|
-
|
|
377
|
-
设置字段标签(用于错误消息)。
|
|
378
|
-
|
|
379
|
-
**参数**:
|
|
380
|
-
- `text` (**string**) - 标签文本
|
|
381
|
-
|
|
382
|
-
**返回**: **DslBuilder**
|
|
383
|
-
|
|
384
|
-
**示例**:
|
|
385
|
-
```javascript
|
|
386
|
-
dsl('email!').label('邮箱地址')
|
|
387
|
-
```
|
|
388
|
-
|
|
389
|
-
---
|
|
390
|
-
|
|
391
|
-
#### `.messages(messages)`
|
|
392
|
-
|
|
393
|
-
自定义错误消息。
|
|
394
|
-
|
|
395
|
-
**参数**:
|
|
396
|
-
- `messages` (**Object**) - 错误消息对象
|
|
397
|
-
- 键:错误代码(如 `'string.min'`)
|
|
398
|
-
- 值:错误消息模板
|
|
399
|
-
|
|
400
|
-
**返回**: **DslBuilder**
|
|
401
|
-
|
|
402
|
-
**示例**:
|
|
403
|
-
```javascript
|
|
404
|
-
dsl('string:3-32!')
|
|
405
|
-
.messages({
|
|
406
|
-
'string.min': '至少{{#limit}}个字符',
|
|
407
|
-
'string.max': '最多{{#limit}}个字符'
|
|
408
|
-
})
|
|
409
|
-
```
|
|
410
|
-
|
|
411
|
-
---
|
|
412
|
-
|
|
413
|
-
#### `.description(text)`
|
|
414
|
-
|
|
415
|
-
设置字段描述。
|
|
416
|
-
|
|
417
|
-
**参数**:
|
|
418
|
-
- `text` (**string**) - 描述文本
|
|
419
|
-
|
|
420
|
-
**返回**: **DslBuilder**
|
|
421
|
-
|
|
422
|
-
**示例**:
|
|
423
|
-
```javascript
|
|
424
|
-
dsl('url').description('个人主页链接')
|
|
425
|
-
```
|
|
426
|
-
|
|
427
|
-
---
|
|
428
|
-
|
|
429
|
-
#### `.custom(validator)`
|
|
430
|
-
|
|
431
|
-
添加自定义验证器。
|
|
432
|
-
|
|
433
|
-
**参数**:
|
|
434
|
-
- `validator` (**Function**) - 验证函数
|
|
435
|
-
- 签名:`(value) => boolean | Promise<boolean> | { error, message }`
|
|
436
|
-
- 返回 `true` 表示通过
|
|
437
|
-
- 返回 `false` 或错误对象表示失败
|
|
438
|
-
|
|
439
|
-
**返回**: **DslBuilder**
|
|
440
|
-
|
|
441
|
-
**示例**:
|
|
442
|
-
```javascript
|
|
443
|
-
dsl('string:3-32!')
|
|
444
|
-
.custom(async (value) => {
|
|
445
|
-
const exists = await checkUsernameExists(value);
|
|
446
|
-
if (exists) {
|
|
447
|
-
return { error: 'username.exists', message: '用户名已存在' };
|
|
448
|
-
}
|
|
449
|
-
return true;
|
|
450
|
-
})
|
|
451
|
-
```
|
|
452
|
-
|
|
453
|
-
---
|
|
454
|
-
|
|
455
|
-
#### `.default(value)`
|
|
456
|
-
|
|
457
|
-
设置默认值。
|
|
458
|
-
|
|
459
|
-
**参数**:
|
|
460
|
-
- `value` (**any**) - 默认值
|
|
461
|
-
|
|
462
|
-
**返回**: **DslBuilder**
|
|
463
|
-
|
|
464
|
-
**示例**:
|
|
465
|
-
```javascript
|
|
466
|
-
dsl('string').default('guest')
|
|
467
|
-
```
|
|
468
|
-
|
|
469
|
-
---
|
|
470
|
-
|
|
471
|
-
#### `.username(preset?)`
|
|
472
|
-
|
|
473
|
-
用户名验证(自动设置长度和正则)。
|
|
474
|
-
|
|
475
|
-
**参数**:
|
|
476
|
-
- `preset` (**string** | **Object**, 可选) - 预设配置
|
|
477
|
-
- 字符串:`'short'` | `'medium'` | `'long'` | `'5-20'`
|
|
478
|
-
- 对象:`{ minLength, maxLength, allowUnderscore, allowNumber }`
|
|
479
|
-
- 默认值:`'medium'` (3-32位)
|
|
480
|
-
|
|
481
|
-
**返回**: **DslBuilder**
|
|
482
|
-
|
|
483
|
-
**示例**:
|
|
484
|
-
```javascript
|
|
485
|
-
// 默认 medium (3-32位)
|
|
486
|
-
dsl('string!').username()
|
|
487
|
-
|
|
488
|
-
// 自定义范围
|
|
489
|
-
dsl('string!').username('5-20')
|
|
490
|
-
|
|
491
|
-
// 使用预设
|
|
492
|
-
dsl('string!').username('short') // 3-16位
|
|
493
|
-
```
|
|
494
|
-
|
|
495
|
-
---
|
|
496
|
-
|
|
497
|
-
#### `.password(strength?)`
|
|
498
|
-
|
|
499
|
-
密码强度验证(自动设置长度和正则)。
|
|
500
|
-
|
|
501
|
-
**参数**:
|
|
502
|
-
- `strength` (**string**, 可选) - 强度级别
|
|
503
|
-
- `'weak'` - 最少6位
|
|
504
|
-
- `'medium'` - 8位,字母+数字(默认)
|
|
505
|
-
- `'strong'` - 8位,大小写+数字
|
|
506
|
-
- `'veryStrong'` - 10位,大小写+数字+特殊字符
|
|
507
|
-
|
|
508
|
-
**返回**: **DslBuilder**
|
|
509
|
-
|
|
510
|
-
**示例**:
|
|
511
|
-
```javascript
|
|
512
|
-
dsl('string!').password('strong')
|
|
513
|
-
```
|
|
514
|
-
|
|
515
|
-
---
|
|
516
|
-
|
|
517
|
-
#### `.phone(country?)`
|
|
518
|
-
|
|
519
|
-
手机号验证(自动设置长度和正则)。
|
|
520
|
-
|
|
521
|
-
**参数**:
|
|
522
|
-
- `country` (**string**, 可选) - 国家代码
|
|
523
|
-
- `'cn'` - 中国(默认)
|
|
524
|
-
- `'us'` - 美国
|
|
525
|
-
- `'uk'` - 英国
|
|
526
|
-
- `'hk'` - 香港
|
|
527
|
-
- `'tw'` - 台湾
|
|
528
|
-
- `'international'` - 国际格式
|
|
529
|
-
|
|
530
|
-
**返回**: **DslBuilder**
|
|
531
|
-
|
|
532
|
-
**注意**: 自动将类型纠正为 `string`(即使写成 `number` 也会自动修正)
|
|
533
|
-
|
|
534
|
-
**示例**:
|
|
535
|
-
```javascript
|
|
536
|
-
// 推荐写法
|
|
537
|
-
dsl('string!').phone('cn')
|
|
538
|
-
|
|
539
|
-
// 自动纠正:number → string
|
|
540
|
-
dsl('number!').phone('cn') // 自动纠正为 string
|
|
541
|
-
```
|
|
542
|
-
|
|
543
|
-
---
|
|
544
|
-
|
|
545
|
-
#### `.toSchema()`
|
|
546
|
-
|
|
547
|
-
转换为 JSON Schema 对象。
|
|
548
|
-
|
|
549
|
-
**返回**: **Object** - JSON Schema对象
|
|
550
|
-
|
|
551
|
-
**示例**:
|
|
552
|
-
```javascript
|
|
553
|
-
const schema = dsl('email!').label('邮箱').toSchema();
|
|
554
|
-
// { type: 'string', format: 'email', _label: '邮箱', _required: true }
|
|
555
|
-
```
|
|
556
|
-
|
|
557
|
-
---
|
|
558
|
-
|
|
559
|
-
#### `.validate(data, context?)`
|
|
560
|
-
|
|
561
|
-
验证数据(便捷方法)。
|
|
562
|
-
|
|
563
|
-
**参数**:
|
|
564
|
-
- `data` (**any**) - 待验证数据
|
|
565
|
-
- `context` (**Object**, 可选) - 验证上下文
|
|
566
|
-
|
|
567
|
-
**返回**: **Promise<Object>** - 验证结果
|
|
568
|
-
- `valid` (**boolean**) - 是否通过
|
|
569
|
-
- `errors` (**Array**, 可选) - 错误列表
|
|
570
|
-
- `data` (**any**, 可选) - 验证通过的数据
|
|
571
|
-
|
|
572
|
-
**示例**:
|
|
573
|
-
```javascript
|
|
574
|
-
const result = await dsl('email!').validate('user@example.com');
|
|
575
|
-
console.log(result.valid); // true
|
|
576
|
-
```
|
|
577
|
-
|
|
578
|
-
---
|
|
579
|
-
|
|
580
|
-
### 静态方法
|
|
581
|
-
|
|
582
|
-
#### `dsl.match(field, map)```
|
|
583
|
-
|
|
584
|
-
创建条件验证规则(类似 switch-case)。
|
|
585
|
-
|
|
586
|
-
**参数**:
|
|
587
|
-
- `field` (**string**) - 依赖的字段名
|
|
588
|
-
- `map` (**Object**) - 值与Schema的映射
|
|
589
|
-
- `[value: string]`: 对应的Schema
|
|
590
|
-
- `_default` (**optional**): 默认Schema
|
|
591
|
-
|
|
592
|
-
**返回**: **Object** - 内部Match结构
|
|
593
|
-
|
|
594
|
-
**示例**:
|
|
595
|
-
```javascript
|
|
596
|
-
dsl.match('type', {
|
|
597
|
-
email: 'email!',
|
|
598
|
-
phone: 'string:11!',
|
|
599
|
-
_default: 'string'
|
|
600
|
-
})
|
|
601
|
-
```
|
|
602
|
-
|
|
603
|
-
#### `dsl.if(condition, thenSchema, elseSchema)`
|
|
604
|
-
|
|
605
|
-
创建简单的条件验证规则。
|
|
606
|
-
|
|
607
|
-
**参数**:
|
|
608
|
-
- `condition` (**string**) - 条件字段名
|
|
609
|
-
- `thenSchema` (**string|Object**) - 满足条件时的Schema
|
|
610
|
-
- `elseSchema` (**string|Object**, 可选) - 不满足条件时的Schema
|
|
611
|
-
|
|
612
|
-
**返回**: **Object** - 内部If结构
|
|
613
|
-
|
|
614
|
-
**示例**:
|
|
615
|
-
```javascript
|
|
616
|
-
dsl.if('isVip', 'number:0-50', 'number:0-10')
|
|
617
|
-
```
|
|
618
|
-
|
|
619
|
-
---
|
|
620
|
-
|
|
621
|
-
## DslBuilder 类
|
|
622
|
-
|
|
623
|
-
### 描述
|
|
624
|
-
|
|
625
|
-
Schema 构建器类,支持链式调用添加验证规则。
|
|
626
|
-
|
|
627
|
-
### 构造函数
|
|
628
|
-
|
|
629
|
-
```javascript
|
|
630
|
-
new DslBuilder(dslString: string)
|
|
631
|
-
```
|
|
340
|
+
## Validator 类
|
|
632
341
|
|
|
633
342
|
**参数**:
|
|
634
343
|
- `dslString` (**string**) - DSL字符串,如 `'string:3-32!'`
|