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
package/CHANGELOG.md
CHANGED
|
@@ -1,236 +1,113 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Changelog
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
> **最后更新**: 2026-03-03
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
5
4
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
## 版本概览
|
|
9
|
-
|
|
10
|
-
| 版本 | 日期 | 变更摘要 | 详细 |
|
|
11
|
-
|------|------|---------|------|
|
|
12
|
-
| [v1.2.3](./changelogs/v1.2.3.md) | 2026-03-03 | 🚀 新功能:i18n 子目录合并 - 多人协作独立维护语言文件,自动递归合并 + 冲突检测 | [查看](./changelogs/v1.2.3.md) |
|
|
13
|
-
| [v1.2.2](./changelogs/v1.2.2.md) | 2026-02-06 | 🚀 重大功能:智能类型转换 - 字符串数字自动转换,完美支持 Web API | [查看](./changelogs/v1.2.2.md) |
|
|
14
|
-
| [v1.1.8](./changelogs/v1.1.8.md) | 2026-01-30 | 🚀 新功能:智能参数识别 - 支持简化语法 `dsl.error.throw('key', 'locale')` | [查看](./changelogs/v1.1.8.md) |
|
|
15
|
-
| [v1.1.7](./changelogs/v1.1.7.md) | 2026-01-27 | 🐛 Bug修复:错误消息路径显示优化 - 所有错误类型的 message 只显示字段名 | [查看](./changelogs/v1.1.7.md) |
|
|
16
|
-
| [v1.1.6](./changelogs/v1.1.6.md) | 2026-01-23 | 🐛 Bug修复:enum和additionalProperties错误消息模板变量未替换 | [查看](./changelogs/v1.1.6.md) |
|
|
17
|
-
| [v1.1.5](./changelogs/v1.1.5.md) | 2026-01-17 | 🚀 新功能:错误配置对象格式支持 - 语言包支持 `{ code, message }` 对象格式 | [查看](./changelogs/v1.1.5.md) |
|
|
18
|
-
| [v1.1.4](./changelogs/v1.1.4.md) | 2026-01-13 | 🔧 TypeScript类型修复:移除重复函数签名 + 多语言文档完善 | [查看](./changelogs/v1.1.4.md) |
|
|
19
|
-
| [v1.1.3](./changelogs/v1.1.3.md) | 2026-01-09 | 🐛 Bug修复:类型错误消息模板变量未替换 | [查看](./changelogs/v1.1.3.md) |
|
|
20
|
-
| [v1.1.2](./changelogs/v1.1.2.md) | 2026-01-06 | 🎉 新功能:数字比较运算符 + Bug修复 | [查看](./changelogs/v1.1.2.md) |
|
|
21
|
-
| [v1.1.1](./changelogs/v1.1.1.md) | 2026-01-06 | 🎉 新功能:ConditionalBuilder 独立消息支持 | [查看](./changelogs/v1.1.1.md) |
|
|
22
|
-
| [v1.1.0](./changelogs/v1.1.0.md) | 2026-01-05 | 🎉 重大功能:跨类型联合验证 + 插件系统增强 | [查看](./changelogs/v1.1.0.md) |
|
|
23
|
-
| [v1.0.9](./changelogs/v1.0.9.md) | 2026-01-04 | 🎉 重大改进:多语言支持完善 + TypeScript 类型完整 | [查看](./changelogs/v1.0.9.md) |
|
|
24
|
-
| v1.0.8 | 2026-01-04 | 优化:错误消息过滤增强 | - |
|
|
25
|
-
| v1.0.7 | 2026-01-04 | 修复:dsl.match/dsl.if 嵌套支持 dsl() 包裹 | - |
|
|
26
|
-
| v1.0.6 | 2026-01-04 | 🚨 紧急修复:TypeScript 类型污染 | - |
|
|
27
|
-
| v1.0.5 | 2026-01-04 | 测试覆盖率提升至 97% | - |
|
|
28
|
-
| v1.0.4 | 2025-12-31 | TypeScript 完整支持、validateAsync、ValidationError | - |
|
|
29
|
-
| v1.0.3 | 2025-12-31 | ⚠️ 破坏性变更:单值语法修复 | - |
|
|
30
|
-
| v1.0.2 | 2025-12-31 | 15个新增验证器、完整文档、75个测试 | - |
|
|
31
|
-
| v1.0.1 | 2025-12-31 | 枚举功能、自动类型识别、统一错误消息 | - |
|
|
32
|
-
| [v1.0.0](./changelogs/v1.0.0.md) | 2025-12-29 | 初始发布版本 | [查看](./changelogs/v1.0.0.md) |
|
|
33
|
-
|
|
34
|
-
> 💡 **提示**: 重要版本的详细变更记录在 [changelogs/](./changelogs/) 目录中。
|
|
35
|
-
> 当前已有详细文档的版本:v1.2.3, 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
|
|
36
|
-
> 其他版本的详细变更信息请参考项目提交历史或联系维护者。
|
|
37
|
-
|
|
38
|
-
---
|
|
39
|
-
|
|
40
|
-
## 变更统计
|
|
41
|
-
|
|
42
|
-
| 版本系列 | 版本数 | 主要改进方向 |
|
|
43
|
-
|---------|-------|------------|
|
|
44
|
-
| v1.2.x | 2 | i18n子目录合并、智能类型转换、Web API 完美支持 |
|
|
45
|
-
| v1.1.x | 9 | 智能参数识别、Bug修复、错误消息优化、错误配置增强、TypeScript类型完善、多语言支持、数字运算符、联合类型 |
|
|
46
|
-
| v1.0.x | 10 | 核心功能、验证器、测试覆盖、文档完善 |
|
|
47
|
-
|
|
48
|
-
---
|
|
49
|
-
|
|
50
|
-
## 里程碑版本
|
|
51
|
-
|
|
52
|
-
### v1.2.2 - 智能类型转换 🚀
|
|
53
|
-
|
|
54
|
-
**发布日期**: 2026-02-06
|
|
55
|
-
**重要性**: ⭐⭐⭐⭐⭐
|
|
56
|
-
|
|
57
|
-
**主要改进**:
|
|
58
|
-
- 🚀 新增智能类型转换功能,自动将字符串数字转换为 number 类型
|
|
59
|
-
- ✅ 默认启用,零配置,开箱即用
|
|
60
|
-
- ✅ 完美支持 Web API 项目(Express、Koa 等)
|
|
61
|
-
- ✅ 保持类型安全(枚举字段不转换)
|
|
62
|
-
- ✅ 支持禁用选项 `validate(schema, data, { coerce: false })`
|
|
63
|
-
- ✅ 新增 23 个测试用例,100% 通过率
|
|
64
|
-
|
|
65
|
-
**核心特性**:
|
|
66
|
-
- 智能判断:只转换字符串→数字(且必须是有效数字)
|
|
67
|
-
- 类型安全:string 字段保持字符串,boolean 被正确拒绝
|
|
68
|
-
- 枚举保护:数字枚举 `1|2|3` 不接受字符串 `"1"`
|
|
69
|
-
- 边界处理:支持小数、负数、零、trim 等
|
|
70
|
-
|
|
71
|
-
**使用示例**:
|
|
72
|
-
```javascript
|
|
73
|
-
const { dsl, validate } = require('schema-dsl');
|
|
74
|
-
|
|
75
|
-
const schema = dsl({
|
|
76
|
-
userId: 'number!',
|
|
77
|
-
page: 'number?',
|
|
78
|
-
email: 'email!'
|
|
79
|
-
});
|
|
80
|
-
|
|
81
|
-
// ✅ 字符串自动转换为数字
|
|
82
|
-
const result = validate(schema, {
|
|
83
|
-
userId: '123', // → 123 (number)
|
|
84
|
-
page: '2', // → 2 (number)
|
|
85
|
-
email: 'test@example.com'
|
|
86
|
-
});
|
|
87
|
-
|
|
88
|
-
console.log(result.valid); // true
|
|
89
|
-
console.log(typeof result.data.userId); // 'number'
|
|
90
|
-
```
|
|
91
|
-
|
|
92
|
-
**技术细节**:
|
|
93
|
-
- 新增 `smartCoerceTypes()` 函数(约 60 行)
|
|
94
|
-
- 修改文件:`index.js`
|
|
95
|
-
- 测试文件:`test/unit/smart-coerce.test.js`(23 个测试)
|
|
96
|
-
- 零性能损失,运行时开销可忽略不计
|
|
97
|
-
|
|
98
|
-
**详细信息**: [查看 changelogs/v1.2.2.md](./changelogs/v1.2.2.md)
|
|
5
|
+
> 📂 **Detailed changes**: see [`changelogs/`](./changelogs/) for full notes on major versions.
|
|
99
6
|
|
|
100
7
|
---
|
|
101
8
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
-
|
|
109
|
-
-
|
|
110
|
-
-
|
|
111
|
-
-
|
|
112
|
-
-
|
|
113
|
-
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
-
|
|
117
|
-
-
|
|
118
|
-
-
|
|
119
|
-
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
**发布日期**: 2026-01-27
|
|
133
|
-
**重要性**: ⭐⭐⭐⭐
|
|
134
|
-
|
|
135
|
-
### v1.1.6 - ErrorFormatter Bug修复 🐛
|
|
136
|
-
|
|
137
|
-
**发布日期**: 2026-01-23
|
|
138
|
-
**重要性**: ⭐⭐⭐⭐
|
|
139
|
-
|
|
140
|
-
**主要改进**:
|
|
141
|
-
- 🐛 修复 enum 错误消息模板变量 `{{#valids}}` 未替换问题
|
|
142
|
-
- 🐛 修复 additionalProperties 错误消息缺少属性名问题
|
|
143
|
-
- ✅ 新增完整的错误消息插值测试(14个测试用例)
|
|
144
|
-
- ✅ 确保所有 ajv 错误参数正确映射到模板变量
|
|
145
|
-
|
|
146
|
-
### v1.1.5 - 错误配置对象格式支持 🚀
|
|
147
|
-
|
|
148
|
-
**发布日期**: 2026-01-17
|
|
149
|
-
**重要性**: ⭐⭐⭐⭐
|
|
150
|
-
|
|
151
|
-
**核心改进**:
|
|
152
|
-
- ✨ 语言包支持对象格式 `{ code, message }`,统一错误代码管理
|
|
153
|
-
- ✨ I18nError 新增 `originalKey` 字段,保留原始 key
|
|
154
|
-
- ✨ 多语言共享相同的 `code`,便于前端统一处理
|
|
155
|
-
- ✅ 完全向后兼容,字符串格式自动转换为对象
|
|
156
|
-
- ✅ `error.is()` 同时支持 code 和 originalKey 判断
|
|
157
|
-
|
|
158
|
-
**测试覆盖**: 942 个测试通过 (98.6%)
|
|
159
|
-
|
|
160
|
-
### v1.1.4 - TypeScript类型修复与文档完善 🔧
|
|
161
|
-
|
|
162
|
-
**发布日期**: 2026-01-13
|
|
163
|
-
**重要性**: ⭐⭐⭐
|
|
164
|
-
|
|
165
|
-
**核心改进**:
|
|
166
|
-
- ✅ 修复 index.d.ts 中2处重复函数签名(46个类型错误→0个错误)
|
|
167
|
-
- ✅ 修复 `dsl.error.assert` 重复签名(L1336-1343)
|
|
168
|
-
- ✅ 修复 `I18nError.assert` 重复签名(L1805-1821)
|
|
169
|
-
- ✅ 完善多语言运行时支持文档(docs/runtime-locale-support.md)
|
|
170
|
-
- ✅ README.md 添加运行时语言指定示例
|
|
171
|
-
- ✅ 验证 string? 可选语法完整支持
|
|
172
|
-
|
|
173
|
-
**详细信息**: [查看 changelogs/v1.1.4.md](./changelogs/v1.1.4.md)
|
|
9
|
+
## Version History
|
|
10
|
+
|
|
11
|
+
| Version | Date | Type | Key Theme |
|
|
12
|
+
|---------|------|------|-----------|
|
|
13
|
+
| [2.0.0] | 2026-05-09 | Major | Full release: BC-2/4/5/6/7 fixes, string:N compat, English comments, 58 enriched examples, 1095 tests [View](./changelogs/v2.0.0.md) |
|
|
14
|
+
| [2.0.0-beta.2] | 2026-04-12 | Major | Full TypeScript rewrite: ESM+CJS dual format, AJV 8, tsup build, 1052 tests passing [View](./changelogs/v2.0.0-beta.2.md) |
|
|
15
|
+
| [v1.2.5] | 2026-03-09 | Patch | Feature: `DslBuilder.toJsonSchema()` — exports clean JSON Schema, strips internal markers |
|
|
16
|
+
| [v1.2.4] | 2026-03-09 | Patch | P1 Fix: `enum:a,b,c` comma-separated format parsing completely broken |
|
|
17
|
+
| [v1.2.3] | 2026-03-03 | Patch | Feature: i18n sub-directory merging; collaborative locale maintenance with auto-merge + conflict detection [View](./changelogs/v1.2.3.md) |
|
|
18
|
+
| [v1.2.2] | 2026-02-06 | Minor | Major feature: smart type coercion — auto-converts string numbers, full Web API support [View](./changelogs/v1.2.2.md) |
|
|
19
|
+
| [v1.1.8] | 2026-01-30 | Patch | Feature: smart argument detection, simplified syntax `dsl.error.throw('key', 'locale')` [View](./changelogs/v1.1.8.md) |
|
|
20
|
+
| [v1.1.7] | 2026-01-27 | Patch | Fix: error message path display — all error types now show field name only |
|
|
21
|
+
| [v1.1.6] | 2026-01-23 | Patch | Fix: enum and additionalProperties error message template variables not substituted [View](./changelogs/v1.1.6.md) |
|
|
22
|
+
| [v1.1.5] | 2026-01-17 | Patch | Feature: error config object format; locale messages now support `{ code, message }` object format [View](./changelogs/v1.1.5.md) |
|
|
23
|
+
| [v1.1.4] | 2026-01-13 | Patch | TS fix: remove duplicate function signatures + multilingual docs improvements [View](./changelogs/v1.1.4.md) |
|
|
24
|
+
| [v1.1.3] | 2026-01-09 | Patch | Fix: type error message template variables not substituted [View](./changelogs/v1.1.3.md) |
|
|
25
|
+
| [v1.1.2] | 2026-01-06 | Patch | Feature: numeric comparison operators + bug fixes [View](./changelogs/v1.1.2.md) |
|
|
26
|
+
| [v1.1.1] | 2026-01-06 | Patch | Feature: ConditionalBuilder independent message support [View](./changelogs/v1.1.1.md) |
|
|
27
|
+
| [v1.1.0] | 2026-01-05 | Minor | Major: cross-type union validation + enhanced plugin system [View](./changelogs/v1.1.0.md) |
|
|
28
|
+
| [v1.0.9] | 2026-01-04 | Patch | Major improvement: complete i18n support + full TypeScript types [View](./changelogs/v1.0.9.md) |
|
|
29
|
+
| v1.0.8 | 2026-01-04 | Patch | Improvement: enhanced error message filtering |
|
|
30
|
+
| v1.0.7 | 2026-01-04 | Patch | Fix: dsl.match/dsl.if nesting now supports dsl() wrapper |
|
|
31
|
+
| v1.0.6 | 2026-01-04 | Patch | 🚨 Critical fix: TypeScript type pollution |
|
|
32
|
+
| v1.0.5 | 2026-01-04 | Patch | Test coverage raised to 97% |
|
|
33
|
+
| v1.0.4 | 2025-12-31 | Patch | Full TypeScript support, validateAsync, ValidationError |
|
|
34
|
+
| v1.0.3 | 2025-12-31 | Patch | ⚠️ Breaking change: single-value syntax fix |
|
|
35
|
+
| v1.0.2 | 2025-12-31 | Patch | 15 new validators, complete docs, 75 tests |
|
|
36
|
+
| v1.0.1 | 2025-12-31 | Patch | Enum support, auto type detection, unified error messages |
|
|
37
|
+
| [v1.0.0] | 2025-12-29 | Pre-release | Initial release [View](./changelogs/v1.0.0.md) |
|
|
174
38
|
|
|
175
39
|
---
|
|
176
40
|
|
|
177
|
-
|
|
41
|
+
## [2.0.0] — 2026-05-09
|
|
178
42
|
|
|
179
|
-
|
|
180
|
-
**重要性**: ⭐⭐⭐
|
|
43
|
+
### Breaking Changes (v1 → v2)
|
|
181
44
|
|
|
182
|
-
|
|
183
|
-
-
|
|
184
|
-
-
|
|
185
|
-
-
|
|
45
|
+
- **BC-2**: `DslAdapter.parseObject()` now returns `ObjectDslBuilder` (chainable: `.strict()`, `.requireAll()`, `.toSchema()`, `.toJsonSchema()`) instead of plain `JSONSchema`. Call `.toSchema()` to get the raw schema.
|
|
46
|
+
- **BC-4**: `DslAdapter.typeMap` is now a Proxy getter; `DslAdapter.registerType()` method added for direct registration.
|
|
47
|
+
- **BC-5**: `ConditionalBuilder.require(field)` method added for v1 field-requirement compatibility.
|
|
48
|
+
- **BC-6**: `Validator.validateAsync()` added; async custom validators in sync `validate()` now return `{ valid: false }` with an error message instead of silently passing.
|
|
49
|
+
- **BC-7**: `string:N` single-value DSL now expands to `{ minLength: N, maxLength: N }` (exactLength compat, consistent with v1 behavior).
|
|
186
50
|
|
|
187
|
-
|
|
51
|
+
### New Features
|
|
188
52
|
|
|
189
|
-
|
|
53
|
+
- **ObjectDslBuilder**: New class wrapping object schemas; supports `.strict()`, `.requireAll()`, `.toSchema()`, `.toJsonSchema()`, `.toString()`.
|
|
54
|
+
- **validateAsync()**: Full async validation support with typed return (`Promise<T>`); throws `ValidationError` on failure.
|
|
55
|
+
- **installStringExtensions()**: Opt-in String.prototype extension; auto-installed at module load for v1 compatibility.
|
|
190
56
|
|
|
191
|
-
###
|
|
57
|
+
### Documentation & Examples
|
|
192
58
|
|
|
193
|
-
|
|
194
|
-
|
|
59
|
+
- 58 example files in `examples/docs/` fully enriched (90–130+ lines each) with complete API coverage.
|
|
60
|
+
- All code comments translated to English (CJK locales and output strings preserved).
|
|
61
|
+
- `docs/api-reference.md`: fixed 4 doc inconsistencies (string:N behavior, validateAsync signature, LocaleMessage params, exactOptionalPropertyTypes notes).
|
|
195
62
|
|
|
196
|
-
|
|
197
|
-
- ✅ 跨类型联合验证(email|phone 可以混合不同类型)
|
|
198
|
-
- ✅ 运行时多语言支持(dsl.error.create 可指定 locale 参数)
|
|
199
|
-
- ✅ 插件系统增强
|
|
63
|
+
### Quality
|
|
200
64
|
|
|
201
|
-
|
|
65
|
+
- 1095 tests passing (75 test files).
|
|
66
|
+
- 0 TypeScript errors in source and examples.
|
|
67
|
+
- ESM + CJS dual format build.
|
|
202
68
|
|
|
203
|
-
|
|
69
|
+
### Fixes
|
|
204
70
|
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
- ✅ 完整的多语言支持(5种语言)
|
|
212
|
-
- ✅ TypeScript 类型定义完整
|
|
213
|
-
- ✅ I18nError 多语言错误类
|
|
214
|
-
|
|
215
|
-
**详细信息**: [查看 changelogs/v1.0.9.md](./changelogs/v1.0.9.md)
|
|
71
|
+
- **Security**: replace the custom regex ReDoS heuristic in `CustomKeywords` with `safe-regex`, so catastrophic patterns such as `((a)+)+$` are rejected before execution.
|
|
72
|
+
- **Validation**: stop caching `DslBuilder.toSchema()` results inside `Validator`, so chain mutations made after the first validation call are honored by both `validate()` and `validateAsync()`.
|
|
73
|
+
- **Validation**: make `ConditionalBuilder` cache `Validator` instances by constructor-level option set, so repeated calls with different `allErrors` / `useDefaults` configurations no longer reuse a stale validator.
|
|
74
|
+
- **Exporters**: fix MySQL integer sizing so `TypeConverter.toMySQLType()` checks both `minimum` and `maximum` before choosing `TINYINT` / `SMALLINT` / `INT`, avoiding undersized column types.
|
|
75
|
+
- **Exporters**: escape Markdown table cell content in `MarkdownExporter`, so field names, constraint text, and multiline descriptions containing `|` or newlines no longer break rendered tables.
|
|
76
|
+
- **Tests**: add focused regression coverage for unsafe regex rejection while preserving the existing invalid-regex error path.
|
|
216
77
|
|
|
217
78
|
---
|
|
218
79
|
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
**发布日期**: 2025-12-29
|
|
222
|
-
**重要性**: ⭐⭐⭐⭐⭐
|
|
223
|
-
|
|
224
|
-
**核心成就**:
|
|
225
|
-
- ✅ 初始发布
|
|
226
|
-
- ✅ 简洁的DSL语法
|
|
227
|
-
- ✅ 完整的验证功能
|
|
80
|
+
## [Unreleased]
|
|
228
81
|
|
|
229
|
-
|
|
82
|
+
- docs: aligned 58-to-58 `docs/*.md` ↔ `examples/docs/*.ts` mapping, switched to stable example entry links
|
|
83
|
+
- docs: completed runnable coverage for advanced APIs in `api-reference`, added `ErrorFormatter` reference, corrected `FEATURE-INDEX` method descriptions
|
|
84
|
+
- chore: cleaned up legacy top-level `examples/*` entry paths, unified example entry points and `.tmp` workspace visibility
|
|
230
85
|
|
|
231
86
|
---
|
|
232
87
|
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
88
|
+
## Links
|
|
89
|
+
|
|
90
|
+
- [GitHub Repository](https://github.com/vextjs/schema-dsl)
|
|
91
|
+
- [Online Documentation](https://vextjs.github.io/schema-dsl)
|
|
92
|
+
- [Detailed Changelogs](./changelogs/)
|
|
93
|
+
- [Contributing Guide](./CONTRIBUTING.md)
|
|
94
|
+
|
|
95
|
+
[Unreleased]: https://github.com/vextjs/schema-dsl/compare/v2.0.0...HEAD
|
|
96
|
+
[2.0.0]: https://github.com/vextjs/schema-dsl/compare/v2.0.0-beta.2...v2.0.0
|
|
97
|
+
[2.0.0-beta.2]: https://github.com/vextjs/schema-dsl/releases/tag/v2.0.0-beta.2
|
|
98
|
+
[v1.2.5]: https://github.com/vextjs/schema-dsl/compare/v1.2.4...v1.2.5
|
|
99
|
+
[v1.2.4]: https://github.com/vextjs/schema-dsl/compare/v1.2.3...v1.2.4
|
|
100
|
+
[v1.2.3]: https://github.com/vextjs/schema-dsl/compare/v1.2.2...v1.2.3
|
|
101
|
+
[v1.2.2]: https://github.com/vextjs/schema-dsl/compare/v1.1.8...v1.2.2
|
|
102
|
+
[v1.1.8]: https://github.com/vextjs/schema-dsl/compare/v1.1.7...v1.1.8
|
|
103
|
+
[v1.1.7]: https://github.com/vextjs/schema-dsl/compare/v1.1.6...v1.1.7
|
|
104
|
+
[v1.1.6]: https://github.com/vextjs/schema-dsl/compare/v1.1.5...v1.1.6
|
|
105
|
+
[v1.1.5]: https://github.com/vextjs/schema-dsl/compare/v1.1.4...v1.1.5
|
|
106
|
+
[v1.1.4]: https://github.com/vextjs/schema-dsl/compare/v1.1.3...v1.1.4
|
|
107
|
+
[v1.1.3]: https://github.com/vextjs/schema-dsl/compare/v1.1.2...v1.1.3
|
|
108
|
+
[v1.1.2]: https://github.com/vextjs/schema-dsl/compare/v1.1.1...v1.1.2
|
|
109
|
+
[v1.1.1]: https://github.com/vextjs/schema-dsl/compare/v1.1.0...v1.1.1
|
|
110
|
+
[v1.1.0]: https://github.com/vextjs/schema-dsl/compare/v1.0.9...v1.1.0
|
|
111
|
+
[v1.0.9]: https://github.com/vextjs/schema-dsl/compare/v1.0.8...v1.0.9
|
|
112
|
+
[v1.0.0]: https://github.com/vextjs/schema-dsl/releases/tag/v1.0.0
|
|
236
113
|
|