schema-dsl 1.2.4 → 2.0.0
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 +87 -210
- package/README.md +391 -2249
- package/dist/DslBuilder-DQDN0ZxZ.d.cts +341 -0
- package/dist/DslBuilder-DkLaOo9Q.d.ts +341 -0
- package/dist/Validator-C7GsVQOH.d.cts +192 -0
- package/dist/Validator-hFWKGxir.d.ts +192 -0
- package/dist/index.cjs +6594 -0
- package/dist/index.d.cts +1145 -0
- package/dist/index.d.ts +1145 -0
- package/dist/index.js +6528 -0
- package/dist/plugin-CIKtTMtS.d.cts +246 -0
- package/dist/plugin-CIKtTMtS.d.ts +246 -0
- package/dist/plugins/custom-format.cjs +3802 -0
- package/dist/plugins/custom-format.d.cts +12 -0
- package/dist/plugins/custom-format.d.ts +12 -0
- package/dist/plugins/custom-format.js +3772 -0
- package/dist/plugins/custom-type-example.cjs +3795 -0
- package/dist/plugins/custom-type-example.d.cts +8 -0
- package/dist/plugins/custom-type-example.d.ts +8 -0
- package/dist/plugins/custom-type-example.js +3765 -0
- package/dist/plugins/custom-validator.cjs +146 -0
- package/dist/plugins/custom-validator.d.cts +10 -0
- package/dist/plugins/custom-validator.d.ts +10 -0
- package/dist/plugins/custom-validator.js +121 -0
- package/docs/FEATURE-INDEX.md +102 -68
- package/docs/add-custom-locale.md +48 -35
- package/docs/add-keyword.md +24 -0
- package/docs/api-reference.md +396 -154
- package/docs/api.md +13 -0
- package/docs/best-practices-project-structure.md +19 -10
- package/docs/best-practices.md +93 -53
- package/docs/cache-manager.md +23 -15
- package/docs/compile.md +45 -0
- package/docs/conditional-api.md +40 -11
- package/docs/custom-extensions-guide.md +80 -152
- package/docs/design-philosophy.md +76 -71
- package/docs/doc-index.md +324 -0
- package/docs/dsl-syntax.md +69 -19
- package/docs/dynamic-locale.md +24 -14
- package/docs/enum.md +12 -5
- package/docs/error-handling.md +53 -44
- package/docs/export-guide.md +47 -8
- package/docs/export-limitations.md +27 -11
- package/docs/faq.md +86 -67
- package/docs/frontend-i18n-guide.md +26 -12
- package/docs/i18n-user-guide.md +60 -47
- package/docs/i18n.md +51 -32
- package/docs/index.md +48 -0
- package/docs/json-schema-basics.md +40 -0
- package/docs/label-vs-description.md +12 -3
- package/docs/markdown-exporter.md +15 -6
- package/docs/mongodb-exporter.md +11 -4
- package/docs/multi-language.md +26 -0
- package/docs/multi-type-support.md +26 -33
- package/docs/mysql-exporter.md +9 -2
- package/docs/number-operators.md +12 -5
- package/docs/optional-marker-guide.md +28 -23
- package/docs/performance-guide.md +49 -0
- package/docs/plugin-system.md +205 -366
- package/docs/plugin-type-registration.md +34 -0
- package/docs/postgresql-exporter.md +9 -2
- package/docs/public/favicon.svg +5 -0
- package/docs/quick-start.md +37 -363
- package/docs/runtime-locale-support.md +20 -9
- package/docs/schema-helper.md +10 -5
- package/docs/schema-utils-advanced-issues.md +23 -0
- package/docs/schema-utils-best-practices.md +20 -0
- package/docs/schema-utils-chaining.md +7 -0
- package/docs/schema-utils.md +76 -42
- package/docs/security-checklist.md +20 -0
- package/docs/string-extensions.md +17 -9
- package/docs/troubleshooting.md +36 -21
- package/docs/type-converter.md +41 -50
- package/docs/type-reference.md +38 -15
- package/docs/typescript-guide.md +53 -42
- package/docs/union-type-guide.md +11 -1
- package/docs/union-types.md +10 -3
- package/docs/validate-async.md +36 -25
- package/docs/validate-batch.md +49 -0
- package/docs/validate-dsl-object-support.md +33 -28
- package/docs/validate.md +36 -16
- package/docs/validation-guide.md +25 -7
- package/docs/validator.md +39 -0
- package/package.json +85 -27
- package/plugins/custom-format.cjs +8 -0
- package/plugins/custom-type-example.cjs +8 -0
- package/plugins/custom-validator.cjs +8 -0
- package/src/adapters/DslAdapter.ts +111 -0
- package/src/adapters/index.ts +1 -0
- package/src/config/constants.ts +83 -0
- package/src/config/index.ts +2 -0
- package/src/config/patterns.ts +77 -0
- package/src/core/CacheManager.ts +159 -0
- package/src/core/ConditionalBuilder.ts +382 -0
- package/src/core/ConditionalRuntime.ts +28 -0
- package/src/core/ConditionalValidator.ts +255 -0
- package/src/core/DslBuilder.ts +677 -0
- package/src/core/ErrorCodes.ts +38 -0
- package/src/core/ErrorFormatter.ts +271 -0
- package/src/core/JSONSchemaCore.ts +65 -0
- package/src/core/Locale.ts +187 -0
- package/src/core/MessageTemplate.ts +42 -0
- package/src/core/ObjectDslBuilder.ts +64 -0
- package/src/core/PluginManager.ts +326 -0
- package/src/core/StringExtensions.ts +140 -0
- package/src/core/TemplateEngine.ts +44 -0
- package/src/core/Validator.ts +448 -0
- package/src/errors/I18nError.ts +159 -0
- package/src/errors/ValidationError.ts +105 -0
- package/src/exporters/BaseExporter.ts +60 -0
- package/src/exporters/MarkdownExporter.ts +305 -0
- package/src/exporters/MongoDBExporter.ts +126 -0
- package/src/exporters/MySQLExporter.ts +155 -0
- package/src/exporters/PostgreSQLExporter.ts +222 -0
- package/src/exporters/index.ts +18 -0
- package/src/index.ts +633 -0
- package/{lib/locales/en-US.js → src/locales/en-US.ts} +21 -37
- package/{lib/locales/es-ES.js → src/locales/es-ES.ts} +63 -16
- package/{lib/locales/fr-FR.js → src/locales/fr-FR.ts} +74 -27
- package/src/locales/index.ts +103 -0
- package/{lib/locales/ja-JP.js → src/locales/ja-JP.ts} +59 -17
- package/src/locales/types.ts +156 -0
- package/{lib/locales/zh-CN.js → src/locales/zh-CN.ts} +21 -38
- package/src/parser/ConstraintParser.ts +101 -0
- package/src/parser/DslParser.ts +470 -0
- package/src/parser/SchemaCompiler.ts +66 -0
- package/src/parser/TypeRegistry.ts +250 -0
- package/src/parser/index.ts +6 -0
- package/src/plugins/custom-format.ts +126 -0
- package/src/plugins/custom-type-example.ts +108 -0
- package/src/plugins/custom-validator.ts +140 -0
- package/src/types/conditional.ts +28 -0
- package/src/types/config.ts +59 -0
- package/src/types/dsl.ts +131 -0
- package/src/types/error.ts +60 -0
- package/src/types/index.ts +17 -0
- package/src/types/infer.ts +128 -0
- package/src/types/plugin.ts +58 -0
- package/src/types/safe-regex.d.ts +9 -0
- package/src/types/schema.ts +66 -0
- package/src/types/validate.ts +71 -0
- package/src/utils/SchemaHelper.ts +196 -0
- package/src/utils/SchemaUtils.ts +346 -0
- package/src/utils/TypeConverter.ts +215 -0
- package/src/utils/index.ts +10 -0
- package/src/validators/CustomKeywords.ts +477 -0
- package/.eslintignore +0 -11
- package/.eslintrc.json +0 -27
- package/CONTRIBUTING.md +0 -368
- package/STATUS.md +0 -491
- package/changelogs/v1.0.0.md +0 -328
- package/changelogs/v1.0.9.md +0 -367
- package/changelogs/v1.1.0.md +0 -389
- package/changelogs/v1.1.1.md +0 -308
- package/changelogs/v1.1.2.md +0 -183
- package/changelogs/v1.1.3.md +0 -161
- package/changelogs/v1.1.4.md +0 -432
- package/changelogs/v1.1.5.md +0 -493
- package/changelogs/v1.1.6.md +0 -211
- package/changelogs/v1.1.8.md +0 -376
- package/changelogs/v1.2.3.md +0 -124
- package/docs/INDEX.md +0 -252
- package/docs/issues-resolved-summary.md +0 -196
- package/docs/performance-benchmark-report.md +0 -179
- package/docs/performance-quick-reference.md +0 -123
- package/docs/user-questions-answered.md +0 -353
- package/docs/validation-rules-v1.0.2.md +0 -1608
- package/examples/README.md +0 -81
- package/examples/array-dsl-example.js +0 -227
- package/examples/conditional-example.js +0 -288
- package/examples/conditional-non-object.js +0 -129
- package/examples/conditional-validate-example.js +0 -321
- package/examples/custom-extension.js +0 -85
- package/examples/dsl-match-example.js +0 -74
- package/examples/dsl-style.js +0 -118
- package/examples/dynamic-locale-configuration.js +0 -348
- package/examples/dynamic-locale-example.js +0 -287
- package/examples/enum.examples.js +0 -324
- package/examples/export-demo.js +0 -130
- package/examples/express-integration.js +0 -376
- package/examples/i18n-error-handling-complete.js +0 -381
- package/examples/i18n-error-handling-quickstart.md +0 -0
- package/examples/i18n-error.examples.js +0 -181
- package/examples/i18n-full-demo.js +0 -301
- package/examples/i18n-memory-safety.examples.js +0 -268
- package/examples/markdown-export.js +0 -71
- package/examples/middleware-usage.js +0 -93
- package/examples/new-features-comparison.js +0 -315
- package/examples/password-reset/README.md +0 -153
- package/examples/password-reset/schema.js +0 -26
- package/examples/password-reset/test.js +0 -101
- package/examples/plugin-system.examples.js +0 -205
- package/examples/schema-utils-chaining.examples.js +0 -250
- package/examples/simple-example.js +0 -122
- package/examples/slug.examples.js +0 -179
- package/examples/string-extensions.js +0 -297
- package/examples/union-type-example.js +0 -127
- package/examples/union-types-example.js +0 -77
- package/examples/user-registration/README.md +0 -156
- package/examples/user-registration/routes.js +0 -92
- package/examples/user-registration/schema.js +0 -150
- package/examples/user-registration/server.js +0 -74
- package/index.d.ts +0 -3540
- package/index.js +0 -457
- package/index.mjs +0 -60
- package/lib/adapters/DslAdapter.js +0 -871
- package/lib/adapters/index.js +0 -20
- package/lib/config/constants.js +0 -286
- package/lib/config/patterns/common.js +0 -47
- package/lib/config/patterns/creditCard.js +0 -9
- package/lib/config/patterns/idCard.js +0 -9
- package/lib/config/patterns/index.js +0 -9
- package/lib/config/patterns/licensePlate.js +0 -4
- package/lib/config/patterns/passport.js +0 -4
- package/lib/config/patterns/phone.js +0 -9
- package/lib/config/patterns/postalCode.js +0 -5
- package/lib/core/CacheManager.js +0 -376
- package/lib/core/ConditionalBuilder.js +0 -503
- package/lib/core/DslBuilder.js +0 -1400
- package/lib/core/ErrorCodes.js +0 -233
- package/lib/core/ErrorFormatter.js +0 -445
- package/lib/core/JSONSchemaCore.js +0 -347
- package/lib/core/Locale.js +0 -130
- package/lib/core/MessageTemplate.js +0 -98
- package/lib/core/PluginManager.js +0 -448
- package/lib/core/StringExtensions.js +0 -240
- package/lib/core/Validator.js +0 -654
- package/lib/errors/I18nError.js +0 -328
- package/lib/errors/ValidationError.js +0 -191
- package/lib/exporters/MarkdownExporter.js +0 -420
- package/lib/exporters/MongoDBExporter.js +0 -162
- package/lib/exporters/MySQLExporter.js +0 -212
- package/lib/exporters/PostgreSQLExporter.js +0 -289
- package/lib/exporters/index.js +0 -24
- package/lib/locales/index.js +0 -8
- package/lib/utils/LRUCache.js +0 -174
- package/lib/utils/SchemaHelper.js +0 -240
- package/lib/utils/SchemaUtils.js +0 -445
- package/lib/utils/TypeConverter.js +0 -245
- package/lib/utils/index.js +0 -13
- package/lib/validators/CustomKeywords.js +0 -616
- package/lib/validators/index.js +0 -11
|
@@ -0,0 +1,324 @@
|
|
|
1
|
+
# schema-dsl 文档索引
|
|
2
|
+
|
|
3
|
+
> **更新时间**: 2026-05-06
|
|
4
|
+
> **用途**: 所有文档的快速导航
|
|
5
|
+
> **在线文档**: https://schema-dsl.github.io
|
|
6
|
+
> **文档数量**: `README.md + docs/*.md` 共 58 份
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## 📑 目录
|
|
11
|
+
|
|
12
|
+
### 快速导航
|
|
13
|
+
- [快速开始](#doc-index-quick-start) - 入门必读
|
|
14
|
+
- [核心文档](#doc-index-core-docs) - 主要功能文档
|
|
15
|
+
- [功能索引](#doc-index-feature-map) - 按功能查找
|
|
16
|
+
- [导出器](#doc-index-exporters) - 数据库 Schema 导出
|
|
17
|
+
- [工具类](#doc-index-utilities) - 辅助工具
|
|
18
|
+
- [使用指南](#doc-index-guides) - 完整教程
|
|
19
|
+
- [补充文档](#doc-index-supplemental) - 其余未在专题区展开的文档
|
|
20
|
+
- [故障排查](#doc-index-troubleshooting) - 问题解决
|
|
21
|
+
- [示例代码](#doc-index-examples) - 完整示例
|
|
22
|
+
- [常见问题](#doc-index-faq) - FAQ
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
<a id="doc-index-quick-start"></a>
|
|
27
|
+
|
|
28
|
+
## 🚀 快速开始
|
|
29
|
+
|
|
30
|
+
| 文档 | 阅读时间 | 说明 |
|
|
31
|
+
|------|----------|------|
|
|
32
|
+
| [README.md](https://github.com/vextjs/schema-dsl/blob/main/README.md) | 3分钟 | 项目介绍、安装和快速开始 ⭐ |
|
|
33
|
+
| [quick-start.md](quick-start.md) | 5分钟 | 5分钟快速上手教程 ⭐ |
|
|
34
|
+
| [design-philosophy.md](design-philosophy.md) | 15分钟 | **设计理念与性能权衡** ⭐⭐⭐ |
|
|
35
|
+
| [FEATURE-INDEX.md](FEATURE-INDEX.md) | 10分钟 | 完整功能索引 ⭐ |
|
|
36
|
+
| [best-practices.md](best-practices.md) | 15分钟 | 最佳实践指南 ⭐⭐⭐ |
|
|
37
|
+
| [faq.md](faq.md) | 5分钟 | 常见问题解答 |
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
<a id="doc-index-core-docs"></a>
|
|
42
|
+
|
|
43
|
+
## 📖 核心文档
|
|
44
|
+
|
|
45
|
+
### DSL 语法(核心功能)
|
|
46
|
+
|
|
47
|
+
| 文档 | 说明 |
|
|
48
|
+
|------|------|
|
|
49
|
+
| [dsl-syntax.md](dsl-syntax.md) | **DSL语法完整指南**(最重要)⭐⭐⭐ |
|
|
50
|
+
| [string-extensions.md](string-extensions.md) | **String扩展文档** ⭐⭐ |
|
|
51
|
+
| [plugin-system.md](plugin-system.md) | **插件系统指南** ⭐⭐ |
|
|
52
|
+
| [api-reference.md](api-reference.md) | API完整参考 ⭐⭐ |
|
|
53
|
+
| [validate.md](validate.md) | validate方法详解 ⭐ |
|
|
54
|
+
| [**validate-async.md**](validate-async.md) | **异步验证方法详解** ⭐⭐⭐ |
|
|
55
|
+
| [**schema-utils-chaining.md**](schema-utils-chaining.md) | **Schema链式复用方法** ⭐⭐⭐ |
|
|
56
|
+
| [**schema-utils-best-practices.md**](schema-utils-best-practices.md) | **SchemaUtils最佳实践与常见陷阱** ⭐⭐⭐ |
|
|
57
|
+
| [**schema-utils-advanced-issues.md**](schema-utils-advanced-issues.md) | **SchemaUtils深入问题分析** ⭐⭐ |
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
<a id="doc-index-feature-map"></a>
|
|
62
|
+
|
|
63
|
+
## 🎯 功能索引
|
|
64
|
+
|
|
65
|
+
### 核心API
|
|
66
|
+
|
|
67
|
+
| 功能 | 文档 | 代码位置 |
|
|
68
|
+
|------|------|---------|
|
|
69
|
+
| dsl() 函数 | [api-reference.md](api-reference.md#dsl-函数) | `src/index.ts` / `src/adapters/DslAdapter.ts` |
|
|
70
|
+
| DslBuilder 类 | [api-reference.md](api-reference.md#dslbuilder-类) | `src/core/DslBuilder.ts` |
|
|
71
|
+
| String 扩展 | [string-extensions.md](string-extensions.md) | `src/core/StringExtensions.ts` |
|
|
72
|
+
| Validator 类 | [validate.md](validate.md) | `src/core/Validator.ts` |
|
|
73
|
+
| validate() 函数 | [api-reference.md](api-reference.md) | `src/index.ts` |
|
|
74
|
+
| validateAsync() 函数 | [validate-async.md](validate-async.md) | `src/index.ts` |
|
|
75
|
+
| ValidationError 类 | [validate-async.md](validate-async.md#validationerror) | `src/errors/ValidationError.ts` |
|
|
76
|
+
| SchemaUtils 链式调用 | [schema-utils-chaining.md](schema-utils-chaining.md) | `src/utils/SchemaUtils.ts` |
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
<a id="doc-index-exporters"></a>
|
|
82
|
+
|
|
83
|
+
## 🗄️ 导出器
|
|
84
|
+
|
|
85
|
+
> 将 JSON Schema 转换为数据库 DDL 和验证规则
|
|
86
|
+
|
|
87
|
+
> ⚠️ **重要提示**: 请先阅读 [**导出限制说明**](export-limitations.md),了解哪些特性无法导出到数据库 Schema。
|
|
88
|
+
|
|
89
|
+
### 导出限制说明 ⚠️
|
|
90
|
+
|
|
91
|
+
| 文档 | 说明 |
|
|
92
|
+
|------|------|
|
|
93
|
+
| [**export-limitations.md**](export-limitations.md) | **导出限制完整说明**(必读)⭐⭐⭐ |
|
|
94
|
+
|
|
95
|
+
**主要内容**:
|
|
96
|
+
- ❌ 不支持导出的特性(条件验证、自定义验证器等)
|
|
97
|
+
- ⚠️ 部分支持的特性(正则、范围、枚举等)
|
|
98
|
+
- ✅ 完全支持的特性(基础类型、必填约束等)
|
|
99
|
+
- 数据库特定限制对比(MongoDB/MySQL/PostgreSQL)
|
|
100
|
+
- 最佳实践建议(分层验证、文档化约束等)
|
|
101
|
+
|
|
102
|
+
### MongoDB 导出器
|
|
103
|
+
|
|
104
|
+
| 文档 | 说明 |
|
|
105
|
+
|------|------|
|
|
106
|
+
| [mongodb-exporter.md](mongodb-exporter.md) | MongoDB 导出器完整指南 |
|
|
107
|
+
|
|
108
|
+
**主要功能**:
|
|
109
|
+
- `export()` - 导出 $jsonSchema 验证规则
|
|
110
|
+
- `generateCreateCommand()` - 生成创建集合命令(含验证)
|
|
111
|
+
- `generateCommand()` - 生成完整 runCommand 命令
|
|
112
|
+
- `MongoDBExporter.export()` - 静态快速导出方法
|
|
113
|
+
|
|
114
|
+
### MySQL 导出器
|
|
115
|
+
|
|
116
|
+
| 文档 | 说明 |
|
|
117
|
+
|------|------|
|
|
118
|
+
| [mysql-exporter.md](mysql-exporter.md) | MySQL 导出器完整指南 |
|
|
119
|
+
|
|
120
|
+
**主要功能**:
|
|
121
|
+
- `export()` - 导出 CREATE TABLE DDL
|
|
122
|
+
- `generateIndex()` - 生成 CREATE INDEX DDL
|
|
123
|
+
- 支持 ENGINE、CHARSET、COLLATE 配置
|
|
124
|
+
|
|
125
|
+
### PostgreSQL 导出器
|
|
126
|
+
|
|
127
|
+
| 文档 | 说明 |
|
|
128
|
+
|------|------|
|
|
129
|
+
| [postgresql-exporter.md](postgresql-exporter.md) | PostgreSQL 导出器完整指南 |
|
|
130
|
+
|
|
131
|
+
**主要功能**:
|
|
132
|
+
- `export()` - 导出 CREATE TABLE DDL(含 CHECK 约束)
|
|
133
|
+
- `generateIndex()` - 生成索引 DDL(支持 btree/gin/gist/hash)
|
|
134
|
+
- 支持 Schema 命名空间和 COMMENT
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
<a id="doc-index-utilities"></a>
|
|
139
|
+
|
|
140
|
+
## 🛠️ 工具类(Utilities)
|
|
141
|
+
|
|
142
|
+
| 文档 | 说明 |
|
|
143
|
+
|------|------|
|
|
144
|
+
| [type-converter.md](type-converter.md) | TypeConverter - 类型转换工具 |
|
|
145
|
+
| [schema-helper.md](schema-helper.md) | SchemaHelper - Schema 辅助工具 |
|
|
146
|
+
| [cache-manager.md](cache-manager.md) | CacheManager - LRU缓存管理 |
|
|
147
|
+
|
|
148
|
+
### TypeConverter 主要功能
|
|
149
|
+
- `toMongoDBType()` - 转换为 MongoDB 类型
|
|
150
|
+
- `toMySQLType()` - 转换为 MySQL 类型
|
|
151
|
+
- `toPostgreSQLType()` - 转换为 PostgreSQL 类型
|
|
152
|
+
- `extractConstraints()` - 提取约束信息
|
|
153
|
+
- `mergeSchemas()` - 合并多个 Schema
|
|
154
|
+
|
|
155
|
+
### SchemaHelper 主要功能
|
|
156
|
+
- `isValidSchema()` - 验证 Schema 合法性
|
|
157
|
+
- `cloneSchema()` - 深度克隆 Schema
|
|
158
|
+
- `flattenSchema()` - 扁平化嵌套 Schema
|
|
159
|
+
- `getFieldPaths()` - 获取所有字段路径
|
|
160
|
+
- `summarizeSchema()` - 生成 Schema 摘要
|
|
161
|
+
|
|
162
|
+
### CacheManager 主要功能
|
|
163
|
+
- LRU 缓存策略(最近最少使用淘汰)
|
|
164
|
+
- TTL 过期支持
|
|
165
|
+
- 缓存统计(命中率、大小等)
|
|
166
|
+
- 线程安全设计
|
|
167
|
+
|
|
168
|
+
---
|
|
169
|
+
|
|
170
|
+
<a id="doc-index-guides"></a>
|
|
171
|
+
|
|
172
|
+
## 📖 使用指南(Guides)
|
|
173
|
+
|
|
174
|
+
| 文档 | 说明 |
|
|
175
|
+
|------|------|
|
|
176
|
+
| [validation-guide.md](validation-guide.md) | 数据验证完整指南 |
|
|
177
|
+
| [export-guide.md](export-guide.md) | 数据库导出完整指南 |
|
|
178
|
+
| [error-handling.md](error-handling.md) | 错误处理最佳实践 |
|
|
179
|
+
|
|
180
|
+
### 验证指南内容
|
|
181
|
+
- 基础验证流程
|
|
182
|
+
- 字段类型验证(字符串/数字/布尔/数组/对象)
|
|
183
|
+
- 常用业务验证模式
|
|
184
|
+
- 批量验证与性能优化
|
|
185
|
+
- 错误处理最佳实践
|
|
186
|
+
|
|
187
|
+
### 导出指南内容
|
|
188
|
+
- MongoDB/MySQL/PostgreSQL 导出对比
|
|
189
|
+
- 配置与自定义选项
|
|
190
|
+
- 自动化迁移脚本
|
|
191
|
+
- 版本管理与最佳实践
|
|
192
|
+
- **⚠️ [导出限制说明](export-limitations.md) - 哪些特性无法导出** ⭐⭐⭐
|
|
193
|
+
|
|
194
|
+
|
|
195
|
+
- 数据库导出概述
|
|
196
|
+
- MongoDB/MySQL/PostgreSQL 导出教程
|
|
197
|
+
- 多数据库同步方案
|
|
198
|
+
- 类型映射参考表
|
|
199
|
+
- 最佳实践与常见问题
|
|
200
|
+
|
|
201
|
+
---
|
|
202
|
+
|
|
203
|
+
<a id="doc-index-supplemental"></a>
|
|
204
|
+
|
|
205
|
+
## 🧩 补充文档
|
|
206
|
+
|
|
207
|
+
> 上方专题区主要按学习路径和主题组织;以下补充索引列出当前尚未在专题区单独展开的其余文档,确保导航覆盖 `docs/*.md` 全量文档。
|
|
208
|
+
|
|
209
|
+
| 文档 | 标题 / 说明 |
|
|
210
|
+
|------|-------------|
|
|
211
|
+
| [add-custom-locale.md](add-custom-locale.md) | 添加自定义语言包指南 |
|
|
212
|
+
| [add-keyword.md](add-keyword.md) | addKeyword 方法 |
|
|
213
|
+
| [api.md](api.md) | API 参考入口 |
|
|
214
|
+
| [best-practices-project-structure.md](best-practices-project-structure.md) | Schema-DSL 项目最佳实践示例 |
|
|
215
|
+
| [compile.md](compile.md) | compile 方法 |
|
|
216
|
+
| [conditional-api.md](conditional-api.md) | 链式条件 API - ConditionalBuilder |
|
|
217
|
+
| [custom-extensions-guide.md](custom-extensions-guide.md) | 自定义扩展指南 |
|
|
218
|
+
| [dynamic-locale.md](dynamic-locale.md) | 动态多语言配置指南 |
|
|
219
|
+
| [enum.md](enum.md) | 枚举功能文档 |
|
|
220
|
+
| [frontend-i18n-guide.md](frontend-i18n-guide.md) | 前端动态切换语言 - 最佳实践指南 |
|
|
221
|
+
| [i18n-user-guide.md](i18n-user-guide.md) | 多语言支持用户指南 |
|
|
222
|
+
| [i18n.md](i18n.md) | 多语言配置指南 |
|
|
223
|
+
| [index.md](index.md) | 站点首页文案(文件内未单独声明 H1) |
|
|
224
|
+
| [json-schema-basics.md](json-schema-basics.md) | JSON Schema 基础 |
|
|
225
|
+
| [label-vs-description.md](label-vs-description.md) | label vs description 使用指南 |
|
|
226
|
+
| [markdown-exporter.md](markdown-exporter.md) | Markdown 导出器 |
|
|
227
|
+
| [multi-language.md](multi-language.md) | 多语言支持 |
|
|
228
|
+
| [multi-type-support.md](multi-type-support.md) | 多类型支持设计说明 |
|
|
229
|
+
| [number-operators.md](number-operators.md) | 数字比较运算符 (v1.1.2+) |
|
|
230
|
+
| [optional-marker-guide.md](optional-marker-guide.md) | schema-dsl 可选标记 ? 支持 |
|
|
231
|
+
| [performance-guide.md](performance-guide.md) | 性能优化指南 |
|
|
232
|
+
| [plugin-type-registration.md](plugin-type-registration.md) | 自定义类型注册 |
|
|
233
|
+
| [runtime-locale-support.md](runtime-locale-support.md) | 运行时多语言支持 - schema-dsl |
|
|
234
|
+
| [schema-utils.md](schema-utils.md) | Schema 工具函数文档 |
|
|
235
|
+
| [security-checklist.md](security-checklist.md) | 安全检查清单 |
|
|
236
|
+
| [troubleshooting.md](troubleshooting.md) | 常见问题排查指南 |
|
|
237
|
+
| [type-reference.md](type-reference.md) | schema-dsl 类型参考 |
|
|
238
|
+
| [typescript-guide.md](typescript-guide.md) | TypeScript 使用指南 |
|
|
239
|
+
| [union-type-guide.md](union-type-guide.md) | 一个字段支持多种类型 |
|
|
240
|
+
| [union-types.md](union-types.md) | 跨类型联合验证 - types: 语法 |
|
|
241
|
+
| [validate-batch.md](validate-batch.md) | validateBatch 方法 |
|
|
242
|
+
| [validate-dsl-object-support.md](validate-dsl-object-support.md) | validate() 函数支持 DSL 对象说明 |
|
|
243
|
+
| [validator.md](validator.md) | Validator 类概述 |
|
|
244
|
+
|
|
245
|
+
---
|
|
246
|
+
|
|
247
|
+
<a id="doc-index-examples"></a>
|
|
248
|
+
|
|
249
|
+
## 📝 示例代码(Examples)
|
|
250
|
+
|
|
251
|
+
| 文件 | 说明 |
|
|
252
|
+
|------|------|
|
|
253
|
+
| [quick-start.ts](https://github.com/vextjs/schema-dsl/blob/main/examples/docs/quick-start.ts) | 快速开始示例 |
|
|
254
|
+
| [dsl-syntax.ts](https://github.com/vextjs/schema-dsl/blob/main/examples/docs/dsl-syntax.ts) | DSL 风格完整示例 |
|
|
255
|
+
| [string-extensions.ts](https://github.com/vextjs/schema-dsl/blob/main/examples/docs/string-extensions.ts) | String 扩展示例 |
|
|
256
|
+
| [troubleshooting.ts](https://github.com/vextjs/schema-dsl/blob/main/examples/docs/troubleshooting.ts) | 排障与错误定位示例 |
|
|
257
|
+
|
|
258
|
+
---
|
|
259
|
+
|
|
260
|
+
<a id="doc-index-faq"></a>
|
|
261
|
+
|
|
262
|
+
## ❓ 常见问题(FAQ)
|
|
263
|
+
|
|
264
|
+
| 文档 | 说明 |
|
|
265
|
+
|------|------|
|
|
266
|
+
| [faq.md](faq.md) | 常见问题与解答 |
|
|
267
|
+
|
|
268
|
+
**热门问题**:
|
|
269
|
+
- DSL 语法与 Joi 语法的区别?
|
|
270
|
+
- 如何自定义验证规则?
|
|
271
|
+
- 如何优化验证性能?
|
|
272
|
+
- 不同数据库的类型映射?
|
|
273
|
+
- 如何处理验证错误?
|
|
274
|
+
|
|
275
|
+
---
|
|
276
|
+
|
|
277
|
+
<a id="doc-index-troubleshooting"></a>
|
|
278
|
+
|
|
279
|
+
## 🔧 开发指南
|
|
280
|
+
|
|
281
|
+
| 文档 | 说明 |
|
|
282
|
+
|------|------|
|
|
283
|
+
| [CONTRIBUTING.md](https://github.com/vextjs/schema-dsl/blob/main/CONTRIBUTING.md) | 贡献指南 |
|
|
284
|
+
|
|
285
|
+
---
|
|
286
|
+
|
|
287
|
+
## 📊 版本信息
|
|
288
|
+
|
|
289
|
+
| 文档 | 说明 |
|
|
290
|
+
|------|------|
|
|
291
|
+
| [STATUS.md](https://github.com/vextjs/schema-dsl/blob/main/STATUS.md) | 项目状态(当前测试与发布状态)|
|
|
292
|
+
| [CHANGELOG.md](https://github.com/vextjs/schema-dsl/blob/main/CHANGELOG.md) | 更新日志 |
|
|
293
|
+
|
|
294
|
+
---
|
|
295
|
+
|
|
296
|
+
## 📁 文档统计
|
|
297
|
+
|
|
298
|
+
| 指标 | 当前值 |
|
|
299
|
+
|------|--------|
|
|
300
|
+
| `docs/*.md` 文档数 | **58** |
|
|
301
|
+
| `README.md + docs/*.md` 文档数 | **59** |
|
|
302
|
+
| 文档总行数 | **持续演进(以仓库实时内容为准)** |
|
|
303
|
+
| 测试文件数 | **67** |
|
|
304
|
+
| 最近一次全量验证 | **67 files / 1052 tests passed** |
|
|
305
|
+
|
|
306
|
+
---
|
|
307
|
+
|
|
308
|
+
**图例说明**:
|
|
309
|
+
- ⭐ 重点推荐文档
|
|
310
|
+
- ⭐⭐ 核心文档
|
|
311
|
+
- ⭐⭐⭐ 必读文档
|
|
312
|
+
|
|
313
|
+
---
|
|
314
|
+
|
|
315
|
+
## 对应示例文件
|
|
316
|
+
|
|
317
|
+
**示例入口**: [doc-index.ts](https://github.com/vextjs/schema-dsl/blob/main/examples/docs/doc-index.ts)
|
|
318
|
+
**说明**: 用一个最小入口脚本串起快速开始、编译校验和文档导出,帮助读者从索引页直接落到可运行示例。
|
|
319
|
+
|
|
320
|
+
---
|
|
321
|
+
|
|
322
|
+
**最后更新**: 2026-05-08
|
|
323
|
+
|
|
324
|
+
|
package/docs/dsl-syntax.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# DSL 语法完整指南
|
|
2
2
|
|
|
3
|
-
> **更新时间**:
|
|
3
|
+
> **更新时间**: 2026-05-22
|
|
4
4
|
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -57,14 +57,35 @@ const schema = dsl({
|
|
|
57
57
|
|------|-----|------|
|
|
58
58
|
| 邮箱 | `email` | 邮箱地址 |
|
|
59
59
|
| URL | `url` | 网址 |
|
|
60
|
+
| URI | `uri` | URI 地址 |
|
|
60
61
|
| UUID | `uuid` | UUID格式 |
|
|
61
62
|
| 日期 | `date` | YYYY-MM-DD |
|
|
62
63
|
| 日期时间 | `datetime` | ISO 8601 |
|
|
63
64
|
| 时间 | `time` | HH:mm:ss |
|
|
65
|
+
| 主机名 | `hostname` | 主机名 |
|
|
66
|
+
| IP(IPv4 / IPv6) | `ip` | 自动接受 IPv4 或 IPv6 |
|
|
64
67
|
| IPv4 | `ipv4` | IPv4地址 |
|
|
65
68
|
| IPv6 | `ipv6` | IPv6地址 |
|
|
66
69
|
| 二进制 | `binary` | Base64编码 |
|
|
67
70
|
|
|
71
|
+
### 特殊类型
|
|
72
|
+
|
|
73
|
+
| 类型 | DSL | 说明 |
|
|
74
|
+
|------|-----|------|
|
|
75
|
+
| ObjectId | `objectId` | MongoDB ObjectId |
|
|
76
|
+
| 十六进制颜色 | `hexColor` | CSS 十六进制颜色 |
|
|
77
|
+
| MAC 地址 | `macAddress` | MAC 地址 |
|
|
78
|
+
| Cron 表达式 | `cron` | 标准 Cron 表达式 |
|
|
79
|
+
| URL Slug | `slug` | 小写字母/数字/中横线组成的 URL 友好标识 |
|
|
80
|
+
| 中文姓名 | `chineseName` | 2 到 10 个中文字符 |
|
|
81
|
+
| 纯中文文本 | `chinese` | 仅允许中文字符 |
|
|
82
|
+
| 邮箱域名校验 | `emailDomain` | 邮箱格式基础上的域名约束类型 |
|
|
83
|
+
| 字母数字 | `alphanum` | 仅字母与数字 |
|
|
84
|
+
| 全小写字符串 | `lower` | 自动约束为小写字符串 |
|
|
85
|
+
| 全大写字符串 | `upper` | 自动约束为大写字符串 |
|
|
86
|
+
| JSON 字符串 | `json` | 内容需为合法 JSON 字符串 |
|
|
87
|
+
| 端口号 | `port` | 整数端口号 |
|
|
88
|
+
|
|
68
89
|
|
|
69
90
|
---
|
|
70
91
|
|
|
@@ -100,9 +121,9 @@ const schema = dsl({
|
|
|
100
121
|
```
|
|
101
122
|
|
|
102
123
|
**说明**:
|
|
103
|
-
- `!` -
|
|
104
|
-
- `?` -
|
|
105
|
-
- 不加标记 -
|
|
124
|
+
- `!` - 必填标记,字段必须存在
|
|
125
|
+
- `?` - 可选标记,字段可省略(显式表达)
|
|
126
|
+
- 不加标记 - 默认可选(字段可省略)
|
|
106
127
|
|
|
107
128
|
**推荐**:
|
|
108
129
|
- 使用 `!` 明确标记必填字段
|
|
@@ -137,10 +158,10 @@ const schema2 = dsl({
|
|
|
137
158
|
### 1. 字符串长度
|
|
138
159
|
|
|
139
160
|
```javascript
|
|
140
|
-
'string:10' //
|
|
141
|
-
'string:-10' // 最大长度10
|
|
142
|
-
'string:3-32' //
|
|
143
|
-
'string:10-' // 最小长度10
|
|
161
|
+
'string:10' // 精确长度10(exactLength:minLength=10, maxLength=10)
|
|
162
|
+
'string:-10' // 最大长度10
|
|
163
|
+
'string:3-32' // 长度范围3-32
|
|
164
|
+
'string:10-' // 最小长度10(无最大限制)
|
|
144
165
|
```
|
|
145
166
|
|
|
146
167
|
**示例**:
|
|
@@ -181,7 +202,26 @@ const schema = dsl({
|
|
|
181
202
|
});
|
|
182
203
|
```
|
|
183
204
|
|
|
184
|
-
### 4.
|
|
205
|
+
### 4. `types:` 联合类型
|
|
206
|
+
|
|
207
|
+
当一个字段需要接受多种不同类型时,可以使用 `types:` 前缀生成联合类型:
|
|
208
|
+
|
|
209
|
+
```javascript
|
|
210
|
+
const schema = dsl({
|
|
211
|
+
contact: 'types:email|phone',
|
|
212
|
+
price: 'types:number:0-|string:1-20',
|
|
213
|
+
payload: 'types:object|array<object>'
|
|
214
|
+
});
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
这个语法会被编译为 `oneOf` 结构,适合表达“满足其中任意一种类型即可”的场景。
|
|
218
|
+
|
|
219
|
+
**适用场景**:
|
|
220
|
+
- 联系方式允许邮箱或手机号
|
|
221
|
+
- 价格字段允许数值或说明字符串
|
|
222
|
+
- 兼容历史接口中同字段的多种输入格式
|
|
223
|
+
|
|
224
|
+
### 5. 特殊约束
|
|
185
225
|
|
|
186
226
|
支持特定格式的约束:
|
|
187
227
|
|
|
@@ -380,6 +420,8 @@ const schema = dsl({
|
|
|
380
420
|
|
|
381
421
|
### 1. 链式调用
|
|
382
422
|
|
|
423
|
+
> ⚠️ `.custom()` 当前仅支持同步自定义逻辑;异步业务校验请在验证通过后单独执行。
|
|
424
|
+
|
|
383
425
|
```javascript
|
|
384
426
|
const schema = dsl({
|
|
385
427
|
username: 'string:3-32!'
|
|
@@ -392,9 +434,8 @@ const schema = dsl({
|
|
|
392
434
|
email: 'email!'
|
|
393
435
|
.label('邮箱地址')
|
|
394
436
|
.description('用于登录和接收通知')
|
|
395
|
-
.custom(
|
|
396
|
-
|
|
397
|
-
if (exists) return '邮箱已被占用';
|
|
437
|
+
.custom((value) => {
|
|
438
|
+
if (value.endsWith('@blocked.example')) return '该邮箱域名不允许注册';
|
|
398
439
|
})
|
|
399
440
|
});
|
|
400
441
|
```
|
|
@@ -479,16 +520,18 @@ const schema = dsl({
|
|
|
479
520
|
'string!@custom' // ❌ 不支持
|
|
480
521
|
```
|
|
481
522
|
|
|
482
|
-
**解决方案**: 使用 `.custom()`
|
|
523
|
+
**解决方案**: 使用 `.custom()` 方法承载**同步**自定义逻辑
|
|
483
524
|
```javascript
|
|
484
|
-
'string!'.custom(
|
|
485
|
-
//
|
|
486
|
-
if (
|
|
487
|
-
return '
|
|
525
|
+
'string!'.custom((value) => {
|
|
526
|
+
// 自定义同步逻辑
|
|
527
|
+
if (value === 'reserved') {
|
|
528
|
+
return '该值不可用';
|
|
488
529
|
}
|
|
489
530
|
})
|
|
490
531
|
```
|
|
491
532
|
|
|
533
|
+
异步校验(如数据库查重)请在 `validate()` / `validateAsync()` 通过后于业务层单独执行。
|
|
534
|
+
|
|
492
535
|
---
|
|
493
536
|
|
|
494
537
|
### 5. 对象数组详细定义
|
|
@@ -659,6 +702,13 @@ dsl.match('vipLevel', { gold: 'number:0-50', silver: 'number:0-20' })
|
|
|
659
702
|
|
|
660
703
|
---
|
|
661
704
|
|
|
662
|
-
|
|
663
|
-
|
|
705
|
+
## 对应示例文件
|
|
706
|
+
|
|
707
|
+
**示例入口**: [dsl-syntax.ts](https://github.com/vextjs/schema-dsl/blob/main/examples/docs/dsl-syntax.ts)
|
|
708
|
+
**说明**: 覆盖 Batch 1 中 DSL 语法的基础类型、约束、枚举、数组和嵌套对象写法,可直接运行参考。
|
|
709
|
+
|
|
710
|
+
---
|
|
711
|
+
|
|
712
|
+
**最后更新**: 2026-05-08
|
|
713
|
+
**作者**: schema-dsl Team
|
|
664
714
|
|
package/docs/dynamic-locale.md
CHANGED
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
|
|
19
19
|
## 基本原理
|
|
20
20
|
|
|
21
|
-
|
|
21
|
+
schema-dsl 的 `Validator` 支持在验证时动态指定语言,无需全局切换。
|
|
22
22
|
|
|
23
23
|
### 核心方法
|
|
24
24
|
|
|
@@ -45,7 +45,7 @@ const path = require('path');
|
|
|
45
45
|
// ========== 应用启动时配置(只执行一次)==========
|
|
46
46
|
|
|
47
47
|
// 方式一:传入目录路径(推荐)⭐
|
|
48
|
-
//
|
|
48
|
+
// Node >=18:自动扫描目录下的 .js(CommonJS)、.cjs、.json、.jsonc、.json5 文件
|
|
49
49
|
dsl.config({
|
|
50
50
|
i18n: path.join(__dirname, 'locales')
|
|
51
51
|
});
|
|
@@ -128,7 +128,7 @@ const userSchema = dsl({
|
|
|
128
128
|
// ========== Express 路由 ==========
|
|
129
129
|
app.post('/api/user/register', (req, res) => {
|
|
130
130
|
// 从请求头获取语言偏好
|
|
131
|
-
const locale = req.headers['accept-language']
|
|
131
|
+
const locale = parseAcceptLanguage(req.headers['accept-language']);
|
|
132
132
|
|
|
133
133
|
// 验证数据(直接切换语言,无需重新加载)
|
|
134
134
|
const result = validate(userSchema, req.body, { locale });
|
|
@@ -210,7 +210,7 @@ function validateWithLocale(validator, schema, data, locale) {
|
|
|
210
210
|
|
|
211
211
|
// 使用
|
|
212
212
|
app.post('/api/user/register', (req, res) => {
|
|
213
|
-
const locale = req.headers['accept-language']
|
|
213
|
+
const locale = parseAcceptLanguage(req.headers['accept-language']);
|
|
214
214
|
|
|
215
215
|
const result = validateWithLocale(validator, schema, req.body, locale);
|
|
216
216
|
|
|
@@ -234,7 +234,7 @@ const validator = new Validator();
|
|
|
234
234
|
|
|
235
235
|
const schemaIoMiddleware = (req, res, next) => {
|
|
236
236
|
// 1. 自动获取语言
|
|
237
|
-
const lang = req.headers['accept-language'] || 'en-US';
|
|
237
|
+
const lang = req.headers['accept-language']?.split(',')[0]?.trim() || 'en-US';
|
|
238
238
|
// 简单匹配逻辑 (实际可使用 accept-language-parser)
|
|
239
239
|
const locale = lang.includes('zh') ? 'zh-CN' :
|
|
240
240
|
lang.includes('ja') ? 'ja-JP' :
|
|
@@ -264,12 +264,14 @@ app.post('/users', (req, res) => {
|
|
|
264
264
|
});
|
|
265
265
|
```
|
|
266
266
|
|
|
267
|
-
完整示例请参考
|
|
267
|
+
完整示例请参考 [dynamic-locale.ts](https://github.com/vextjs/schema-dsl/blob/main/examples/docs/dynamic-locale.ts)。
|
|
268
268
|
|
|
269
269
|
### 3.2 Koa 中间件
|
|
270
270
|
|
|
271
271
|
```javascript
|
|
272
|
-
const { Locale } = require('schema-dsl');
|
|
272
|
+
const { Locale, Validator } = require('schema-dsl');
|
|
273
|
+
|
|
274
|
+
const validator = new Validator();
|
|
273
275
|
|
|
274
276
|
/**
|
|
275
277
|
* Koa 语言中间件
|
|
@@ -282,10 +284,8 @@ function localeMiddleware() {
|
|
|
282
284
|
// 保存到上下文
|
|
283
285
|
ctx.locale = locale;
|
|
284
286
|
|
|
285
|
-
//
|
|
287
|
+
// 复用共享 Validator,避免每个请求都重新建立实例和缓存
|
|
286
288
|
ctx.validate = function(schema, data) {
|
|
287
|
-
const { Validator } = require('schema-dsl');
|
|
288
|
-
const validator = new Validator();
|
|
289
289
|
return validator.validate(schema, data, { locale: ctx.locale });
|
|
290
290
|
};
|
|
291
291
|
|
|
@@ -368,11 +368,12 @@ function parseAcceptLanguage(acceptLanguage) {
|
|
|
368
368
|
|
|
369
369
|
// ========== 3. 中间件 ==========
|
|
370
370
|
|
|
371
|
+
const validator = new Validator();
|
|
372
|
+
|
|
371
373
|
function localeMiddleware(req, res, next) {
|
|
372
374
|
req.locale = parseAcceptLanguage(req.headers['accept-language']);
|
|
373
375
|
|
|
374
376
|
req.validate = function(schema, data) {
|
|
375
|
-
const validator = new Validator();
|
|
376
377
|
return validator.validate(schema, data, { locale: req.locale });
|
|
377
378
|
};
|
|
378
379
|
|
|
@@ -525,7 +526,7 @@ if (!result.valid) {
|
|
|
525
526
|
|------|------|------|--------|
|
|
526
527
|
| **方案1: 验证时指定** | ✅ 无竞态问题<br>✅ 支持并发<br>✅ 代码简洁 | - | ⭐⭐⭐⭐⭐ |
|
|
527
528
|
| 方案2: 临时切换 | ✅ 实现简单 | ⚠️ 并发竞态问题 | ⭐⭐⭐ |
|
|
528
|
-
| 方案3: 中间件 | ✅ 自动化<br>✅
|
|
529
|
+
| 方案3: 中间件 | ✅ 自动化<br>✅ 统一管理<br>✅ 可复用共享 Validator 缓存 | - | ⭐⭐⭐⭐⭐ |
|
|
529
530
|
|
|
530
531
|
**推荐**: 方案1 + 方案3(中间件封装)
|
|
531
532
|
|
|
@@ -537,6 +538,8 @@ if (!result.valid) {
|
|
|
537
538
|
|
|
538
539
|
**A**: 回退到默认语言
|
|
539
540
|
|
|
541
|
+
不要直接把原始 `Accept-Language` 头透传给 `locale`;浏览器常见值会带 `q=` 权重,应该先解析再回退。
|
|
542
|
+
|
|
540
543
|
```javascript
|
|
541
544
|
function parseAcceptLanguage(acceptLanguage) {
|
|
542
545
|
// ...解析逻辑
|
|
@@ -592,7 +595,14 @@ const schema = dsl({
|
|
|
592
595
|
|
|
593
596
|
---
|
|
594
597
|
|
|
595
|
-
|
|
596
|
-
|
|
598
|
+
## 对应示例文件
|
|
599
|
+
|
|
600
|
+
**示例入口**: [dynamic-locale.ts](https://github.com/vextjs/schema-dsl/blob/main/examples/docs/dynamic-locale.ts)
|
|
601
|
+
**说明**: 覆盖 `Accept-Language` 解析、运行时 locale 选择,以及同一 schema 在不同请求语言下的验证入口。
|
|
602
|
+
|
|
603
|
+
---
|
|
604
|
+
|
|
605
|
+
**最后更新**: 2026-05-08
|
|
606
|
+
**作者**: schema-dsl Team
|
|
597
607
|
|
|
598
608
|
|
package/docs/enum.md
CHANGED
|
@@ -450,10 +450,17 @@ const schema = dsl({
|
|
|
450
450
|
|
|
451
451
|
## 📖 相关文档
|
|
452
452
|
|
|
453
|
-
- [基础用法](
|
|
454
|
-
- [验证规则](./
|
|
455
|
-
- [API 参考](./
|
|
456
|
-
- [示例代码](
|
|
453
|
+
- [基础用法](https://github.com/vextjs/schema-dsl/blob/main/README.md)
|
|
454
|
+
- [验证规则](./validation-guide.md)
|
|
455
|
+
- [API 参考](./api-reference.md)
|
|
456
|
+
- [示例代码](https://github.com/vextjs/schema-dsl/blob/main/examples/docs/enum.ts)
|
|
457
|
+
|
|
458
|
+
---
|
|
459
|
+
|
|
460
|
+
## 对应示例文件
|
|
461
|
+
|
|
462
|
+
**示例入口**: [enum.ts](https://github.com/vextjs/schema-dsl/blob/main/examples/docs/enum.ts)
|
|
463
|
+
**说明**: 覆盖字符串、数字、布尔值和数组元素枚举的成功/失败路径,并展示自定义枚举错误消息。
|
|
457
464
|
|
|
458
465
|
---
|
|
459
466
|
|
|
@@ -470,6 +477,6 @@ const schema = dsl({
|
|
|
470
477
|
|
|
471
478
|
---
|
|
472
479
|
|
|
473
|
-
**文档生成时间**:
|
|
480
|
+
**文档生成时间**: 2026-05-08
|
|
474
481
|
**版本**: v1.1.0
|
|
475
482
|
|