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
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# 添加自定义语言包指南
|
|
2
2
|
|
|
3
|
-
**版本**:
|
|
4
|
-
**最后更新**: 2026-
|
|
3
|
+
**版本**: v2.0.0-beta.1
|
|
4
|
+
**最后更新**: 2026-04-30
|
|
5
5
|
|
|
6
6
|
---
|
|
7
7
|
|
|
@@ -9,6 +9,11 @@
|
|
|
9
9
|
|
|
10
10
|
本指南将教你如何为 schema-dsl 添加自定义语言包或扩展现有语言。
|
|
11
11
|
|
|
12
|
+
> **Node.js 要求**:`>=18.0.0`
|
|
13
|
+
>
|
|
14
|
+
> **目录加载(Node >=18)默认支持的语言文件格式**:`.js`(CommonJS)、`.cjs`、`.json`、`.jsonc`、`.json5`。
|
|
15
|
+
> **推荐**:如果你的应用是 `type: module` / ESM 项目,优先使用 `.cjs`、`.json`、`.jsonc`、`.json5`。
|
|
16
|
+
|
|
12
17
|
---
|
|
13
18
|
|
|
14
19
|
## 🏗️ 多人协作:子目录拆分语言包(v1.2.3 新增)⭐
|
|
@@ -21,34 +26,34 @@
|
|
|
21
26
|
project/
|
|
22
27
|
├── locales/
|
|
23
28
|
│ ├── core/ # 公共 code 段:1000-1999(框架层维护)
|
|
24
|
-
│ │ ├── zh-CN.
|
|
25
|
-
│ │ └── en-US.
|
|
29
|
+
│ │ ├── zh-CN.cjs
|
|
30
|
+
│ │ └── en-US.jsonc
|
|
26
31
|
│ ├── account/ # 账户模块 code 段:10000-10999(开发者A)
|
|
27
|
-
│ │ ├── zh-CN.
|
|
28
|
-
│ │ └── en-US.
|
|
32
|
+
│ │ ├── zh-CN.cjs
|
|
33
|
+
│ │ └── en-US.jsonc
|
|
29
34
|
│ ├── order/ # 订单模块 code 段:20000-20999(开发者B)
|
|
30
|
-
│ │ ├── zh-CN.
|
|
31
|
-
│ │ └── en-US.
|
|
35
|
+
│ │ ├── zh-CN.json5
|
|
36
|
+
│ │ └── en-US.json5
|
|
32
37
|
│ └── payment/ # 支付模块 code 段:30000-30999(开发者C)
|
|
33
|
-
│ ├── zh-CN.
|
|
34
|
-
│ └── en-US.
|
|
38
|
+
│ ├── zh-CN.cjs
|
|
39
|
+
│ └── en-US.cjs
|
|
35
40
|
└── app.js
|
|
36
41
|
```
|
|
37
42
|
|
|
38
43
|
### 每个模块独立维护自己的语言文件
|
|
39
44
|
|
|
40
45
|
```javascript
|
|
41
|
-
// locales/account/zh-CN.
|
|
46
|
+
// locales/account/zh-CN.cjs — 开发者A 独立维护,互不干扰
|
|
42
47
|
module.exports = {
|
|
43
48
|
'account.notFound': { code: 10001, message: '账户不存在' },
|
|
44
49
|
'account.locked': { code: 10002, message: '账户已锁定' },
|
|
45
50
|
};
|
|
46
51
|
|
|
47
|
-
// locales/order/zh-CN.
|
|
48
|
-
|
|
52
|
+
// locales/order/zh-CN.json5 — 开发者B 独立维护
|
|
53
|
+
const orderZhCN = {
|
|
49
54
|
'order.notFound': { code: 20001, message: '订单不存在' },
|
|
50
55
|
'order.notPaid': { code: 20002, message: '订单未支付' },
|
|
51
|
-
}
|
|
56
|
+
}
|
|
52
57
|
```
|
|
53
58
|
|
|
54
59
|
### 应用启动:一行配置,自动递归合并
|
|
@@ -79,7 +84,7 @@ dsl.config({
|
|
|
79
84
|
// 冲突示例输出:
|
|
80
85
|
// Error: [schema-dsl] i18n key 冲突 in locale 'zh-CN'
|
|
81
86
|
// 冲突 key: account.notFound
|
|
82
|
-
// 来源文件: /project/locales/account/zh-CN.
|
|
87
|
+
// 来源文件: /project/locales/account/zh-CN.cjs
|
|
83
88
|
```
|
|
84
89
|
|
|
85
90
|
### Code 段划分建议
|
|
@@ -114,13 +119,13 @@ dsl.config({
|
|
|
114
119
|
# 项目结构
|
|
115
120
|
my-project/
|
|
116
121
|
├── locales/ # 语言包目录
|
|
117
|
-
│ ├── zh-CN.
|
|
118
|
-
│ ├── en-US.
|
|
119
|
-
│ └── pt-BR.
|
|
122
|
+
│ ├── zh-CN.cjs # 中文(CommonJS / ESM 项目都稳定)
|
|
123
|
+
│ ├── en-US.jsonc # 英文(带注释 / 末尾逗号)
|
|
124
|
+
│ └── pt-BR.json5 # 葡萄牙语(JSON5 风格)
|
|
120
125
|
└── app.js
|
|
121
126
|
```
|
|
122
127
|
|
|
123
|
-
#### 第2步:定义语言包(`locales/pt-BR.
|
|
128
|
+
#### 第2步:定义语言包(`locales/pt-BR.json5`)
|
|
124
129
|
|
|
125
130
|
```javascript
|
|
126
131
|
module.exports = {
|
|
@@ -194,8 +199,8 @@ dsl.config({
|
|
|
194
199
|
});
|
|
195
200
|
|
|
196
201
|
// 说明:
|
|
197
|
-
// 1. 自动扫描 locales/
|
|
198
|
-
// 2. 从文件名提取语言代码(如 pt-BR.
|
|
202
|
+
// 1. 自动扫描 locales/ 目录下的 `.js`(CommonJS)、`.cjs`、`.json`、`.jsonc`、`.json5`
|
|
203
|
+
// 2. 从文件名提取语言代码(如 pt-BR.cjs → pt-BR)
|
|
199
204
|
// 3. 自动加载并注册所有语言包
|
|
200
205
|
// 4. 用户自定义的语言包会与系统默认语言包合并,用户的优先
|
|
201
206
|
|
|
@@ -224,7 +229,7 @@ const systemZhCN = {
|
|
|
224
229
|
'string.minLength': '{{#label}}长度不能少于{{#limit}}个字符'
|
|
225
230
|
};
|
|
226
231
|
|
|
227
|
-
// 用户自定义的 locales/zh-CN.
|
|
232
|
+
// 用户自定义的 locales/zh-CN.cjs
|
|
228
233
|
const userZhCN = {
|
|
229
234
|
'required': '{{#label}}必须填写', // 覆盖系统默认
|
|
230
235
|
'custom.myError': '自定义错误' // 新增自定义消息
|
|
@@ -277,8 +282,7 @@ function validateUser(data, locale) {
|
|
|
277
282
|
}
|
|
278
283
|
```
|
|
279
284
|
|
|
280
|
-
|
|
281
|
-
|
|
285
|
+
```javascript
|
|
282
286
|
// ✅ 正确:应用启动时一次性加载
|
|
283
287
|
// app.js 启动入口
|
|
284
288
|
dsl.config({ i18n: './locales' }); // 只加载一次
|
|
@@ -322,7 +326,7 @@ const userSchema = dsl({
|
|
|
322
326
|
|
|
323
327
|
app.post('/api/users', (req, res) => {
|
|
324
328
|
// 从请求头获取用户语言偏好
|
|
325
|
-
const locale = req.headers['accept-language'] || 'en-US';
|
|
329
|
+
const locale = req.headers['accept-language']?.split(',')[0]?.trim() || 'en-US';
|
|
326
330
|
|
|
327
331
|
// 验证(直接切换语言,无需加载)
|
|
328
332
|
const result = validate(userSchema, req.body, { locale });
|
|
@@ -432,21 +436,23 @@ app.post('/api/users', (req, res) => {
|
|
|
432
436
|
你可以参考内置的语言包作为模板:
|
|
433
437
|
|
|
434
438
|
```javascript
|
|
439
|
+
const { Locale } = require('schema-dsl');
|
|
440
|
+
|
|
435
441
|
// 查看中文语言包
|
|
436
|
-
const zhCN =
|
|
442
|
+
const zhCN = Locale.getMessages('zh-CN');
|
|
437
443
|
console.log(zhCN);
|
|
438
444
|
|
|
439
445
|
// 查看英文语言包
|
|
440
|
-
const enUS =
|
|
446
|
+
const enUS = Locale.getMessages('en-US');
|
|
441
447
|
console.log(enUS);
|
|
442
448
|
```
|
|
443
449
|
|
|
444
450
|
或者直接查看源码:
|
|
445
|
-
- 中文:`
|
|
446
|
-
- 英文:`
|
|
447
|
-
- 日语:`
|
|
448
|
-
- 西班牙语:`
|
|
449
|
-
- 法语:`
|
|
451
|
+
- 中文:`src/locales/zh-CN.ts`
|
|
452
|
+
- 英文:`src/locales/en-US.ts`
|
|
453
|
+
- 日语:`src/locales/ja-JP.ts`
|
|
454
|
+
- 西班牙语:`src/locales/es-ES.ts`
|
|
455
|
+
- 法语:`src/locales/fr-FR.ts`
|
|
450
456
|
|
|
451
457
|
---
|
|
452
458
|
|
|
@@ -465,9 +471,9 @@ console.log(enUS);
|
|
|
465
471
|
如果你为 schema-dsl 添加了新语言包,欢迎提交 Pull Request:
|
|
466
472
|
|
|
467
473
|
1. Fork 项目
|
|
468
|
-
2. 在 `
|
|
474
|
+
2. 在 `src/locales/` 目录创建新语言文件(如 `pt-BR.ts`)
|
|
469
475
|
3. 完整翻译所有消息键
|
|
470
|
-
4. 在 `
|
|
476
|
+
4. 在 `src/locales/index.ts` 中注册新语言
|
|
471
477
|
5. 添加测试用例(在 `test/unit/locales/` 目录)
|
|
472
478
|
6. 提交 Pull Request
|
|
473
479
|
|
|
@@ -479,5 +485,12 @@ console.log(enUS);
|
|
|
479
485
|
|
|
480
486
|
- 查看 [多语言配置指南](./i18n.md)
|
|
481
487
|
- 查看 [动态多语言配置指南](./dynamic-locale.md)
|
|
482
|
-
- 提交 Issue: https://github.com/
|
|
488
|
+
- 提交 Issue: https://github.com/vextjs/schema-dsl/issues
|
|
489
|
+
|
|
490
|
+
---
|
|
491
|
+
|
|
492
|
+
## 对应示例文件
|
|
493
|
+
|
|
494
|
+
**示例入口**: [add-custom-locale.ts](https://github.com/vextjs/schema-dsl/blob/main/examples/docs/add-custom-locale.ts)
|
|
495
|
+
**说明**: 覆盖 `Locale.addLocale()` 注册新语言、读取消息文本,以及在自定义 locale 下执行验证的最小工作流。
|
|
483
496
|
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# addKeyword 方法
|
|
2
|
+
|
|
3
|
+
`Validator.addKeyword(name, definition)` 用于向底层 AJV 实例注册自定义关键字。
|
|
4
|
+
|
|
5
|
+
当前实现内部已经兼容 AJV 8 的对象式注册,因此可以继续使用 v1 的两参数写法,而不会把 deprecated 警告暴露给调用方。
|
|
6
|
+
|
|
7
|
+
```javascript
|
|
8
|
+
const { Validator } = require('schema-dsl');
|
|
9
|
+
const validator = new Validator();
|
|
10
|
+
validator.addKeyword('isEven', {
|
|
11
|
+
type: 'number',
|
|
12
|
+
validate: (_schema, data) => data % 2 === 0
|
|
13
|
+
});
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
更多 AJV 关键字定义请参考 AJV 官方文档。
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## 对应示例文件
|
|
21
|
+
|
|
22
|
+
**示例入口**: [add-keyword.ts](https://github.com/vextjs/schema-dsl/blob/main/examples/docs/add-keyword.ts)
|
|
23
|
+
**说明**: 覆盖 `Validator.addKeyword()` 的最小注册与验证路径,直接展示成功 / 失败两种结果。
|
|
24
|
+
|