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.
Files changed (242) hide show
  1. package/CHANGELOG.md +87 -210
  2. package/README.md +391 -2249
  3. package/dist/DslBuilder-DQDN0ZxZ.d.cts +341 -0
  4. package/dist/DslBuilder-DkLaOo9Q.d.ts +341 -0
  5. package/dist/Validator-C7GsVQOH.d.cts +192 -0
  6. package/dist/Validator-hFWKGxir.d.ts +192 -0
  7. package/dist/index.cjs +6594 -0
  8. package/dist/index.d.cts +1145 -0
  9. package/dist/index.d.ts +1145 -0
  10. package/dist/index.js +6528 -0
  11. package/dist/plugin-CIKtTMtS.d.cts +246 -0
  12. package/dist/plugin-CIKtTMtS.d.ts +246 -0
  13. package/dist/plugins/custom-format.cjs +3802 -0
  14. package/dist/plugins/custom-format.d.cts +12 -0
  15. package/dist/plugins/custom-format.d.ts +12 -0
  16. package/dist/plugins/custom-format.js +3772 -0
  17. package/dist/plugins/custom-type-example.cjs +3795 -0
  18. package/dist/plugins/custom-type-example.d.cts +8 -0
  19. package/dist/plugins/custom-type-example.d.ts +8 -0
  20. package/dist/plugins/custom-type-example.js +3765 -0
  21. package/dist/plugins/custom-validator.cjs +146 -0
  22. package/dist/plugins/custom-validator.d.cts +10 -0
  23. package/dist/plugins/custom-validator.d.ts +10 -0
  24. package/dist/plugins/custom-validator.js +121 -0
  25. package/docs/FEATURE-INDEX.md +102 -68
  26. package/docs/add-custom-locale.md +48 -35
  27. package/docs/add-keyword.md +24 -0
  28. package/docs/api-reference.md +396 -154
  29. package/docs/api.md +13 -0
  30. package/docs/best-practices-project-structure.md +19 -10
  31. package/docs/best-practices.md +93 -53
  32. package/docs/cache-manager.md +23 -15
  33. package/docs/compile.md +45 -0
  34. package/docs/conditional-api.md +40 -11
  35. package/docs/custom-extensions-guide.md +80 -152
  36. package/docs/design-philosophy.md +76 -71
  37. package/docs/doc-index.md +324 -0
  38. package/docs/dsl-syntax.md +69 -19
  39. package/docs/dynamic-locale.md +24 -14
  40. package/docs/enum.md +12 -5
  41. package/docs/error-handling.md +53 -44
  42. package/docs/export-guide.md +47 -8
  43. package/docs/export-limitations.md +27 -11
  44. package/docs/faq.md +86 -67
  45. package/docs/frontend-i18n-guide.md +26 -12
  46. package/docs/i18n-user-guide.md +60 -47
  47. package/docs/i18n.md +51 -32
  48. package/docs/index.md +48 -0
  49. package/docs/json-schema-basics.md +40 -0
  50. package/docs/label-vs-description.md +12 -3
  51. package/docs/markdown-exporter.md +15 -6
  52. package/docs/mongodb-exporter.md +11 -4
  53. package/docs/multi-language.md +26 -0
  54. package/docs/multi-type-support.md +26 -33
  55. package/docs/mysql-exporter.md +9 -2
  56. package/docs/number-operators.md +12 -5
  57. package/docs/optional-marker-guide.md +28 -23
  58. package/docs/performance-guide.md +49 -0
  59. package/docs/plugin-system.md +205 -366
  60. package/docs/plugin-type-registration.md +34 -0
  61. package/docs/postgresql-exporter.md +9 -2
  62. package/docs/public/favicon.svg +5 -0
  63. package/docs/quick-start.md +37 -363
  64. package/docs/runtime-locale-support.md +20 -9
  65. package/docs/schema-helper.md +10 -5
  66. package/docs/schema-utils-advanced-issues.md +23 -0
  67. package/docs/schema-utils-best-practices.md +20 -0
  68. package/docs/schema-utils-chaining.md +7 -0
  69. package/docs/schema-utils.md +76 -42
  70. package/docs/security-checklist.md +20 -0
  71. package/docs/string-extensions.md +17 -9
  72. package/docs/troubleshooting.md +36 -21
  73. package/docs/type-converter.md +41 -50
  74. package/docs/type-reference.md +38 -15
  75. package/docs/typescript-guide.md +53 -42
  76. package/docs/union-type-guide.md +11 -1
  77. package/docs/union-types.md +10 -3
  78. package/docs/validate-async.md +36 -25
  79. package/docs/validate-batch.md +49 -0
  80. package/docs/validate-dsl-object-support.md +33 -28
  81. package/docs/validate.md +36 -16
  82. package/docs/validation-guide.md +25 -7
  83. package/docs/validator.md +39 -0
  84. package/package.json +85 -27
  85. package/plugins/custom-format.cjs +8 -0
  86. package/plugins/custom-type-example.cjs +8 -0
  87. package/plugins/custom-validator.cjs +8 -0
  88. package/src/adapters/DslAdapter.ts +111 -0
  89. package/src/adapters/index.ts +1 -0
  90. package/src/config/constants.ts +83 -0
  91. package/src/config/index.ts +2 -0
  92. package/src/config/patterns.ts +77 -0
  93. package/src/core/CacheManager.ts +159 -0
  94. package/src/core/ConditionalBuilder.ts +382 -0
  95. package/src/core/ConditionalRuntime.ts +28 -0
  96. package/src/core/ConditionalValidator.ts +255 -0
  97. package/src/core/DslBuilder.ts +677 -0
  98. package/src/core/ErrorCodes.ts +38 -0
  99. package/src/core/ErrorFormatter.ts +271 -0
  100. package/src/core/JSONSchemaCore.ts +65 -0
  101. package/src/core/Locale.ts +187 -0
  102. package/src/core/MessageTemplate.ts +42 -0
  103. package/src/core/ObjectDslBuilder.ts +64 -0
  104. package/src/core/PluginManager.ts +326 -0
  105. package/src/core/StringExtensions.ts +140 -0
  106. package/src/core/TemplateEngine.ts +44 -0
  107. package/src/core/Validator.ts +448 -0
  108. package/src/errors/I18nError.ts +159 -0
  109. package/src/errors/ValidationError.ts +105 -0
  110. package/src/exporters/BaseExporter.ts +60 -0
  111. package/src/exporters/MarkdownExporter.ts +305 -0
  112. package/src/exporters/MongoDBExporter.ts +126 -0
  113. package/src/exporters/MySQLExporter.ts +155 -0
  114. package/src/exporters/PostgreSQLExporter.ts +222 -0
  115. package/src/exporters/index.ts +18 -0
  116. package/src/index.ts +633 -0
  117. package/{lib/locales/en-US.js → src/locales/en-US.ts} +21 -37
  118. package/{lib/locales/es-ES.js → src/locales/es-ES.ts} +63 -16
  119. package/{lib/locales/fr-FR.js → src/locales/fr-FR.ts} +74 -27
  120. package/src/locales/index.ts +103 -0
  121. package/{lib/locales/ja-JP.js → src/locales/ja-JP.ts} +59 -17
  122. package/src/locales/types.ts +156 -0
  123. package/{lib/locales/zh-CN.js → src/locales/zh-CN.ts} +21 -38
  124. package/src/parser/ConstraintParser.ts +101 -0
  125. package/src/parser/DslParser.ts +470 -0
  126. package/src/parser/SchemaCompiler.ts +66 -0
  127. package/src/parser/TypeRegistry.ts +250 -0
  128. package/src/parser/index.ts +6 -0
  129. package/src/plugins/custom-format.ts +126 -0
  130. package/src/plugins/custom-type-example.ts +108 -0
  131. package/src/plugins/custom-validator.ts +140 -0
  132. package/src/types/conditional.ts +28 -0
  133. package/src/types/config.ts +59 -0
  134. package/src/types/dsl.ts +131 -0
  135. package/src/types/error.ts +60 -0
  136. package/src/types/index.ts +17 -0
  137. package/src/types/infer.ts +128 -0
  138. package/src/types/plugin.ts +58 -0
  139. package/src/types/safe-regex.d.ts +9 -0
  140. package/src/types/schema.ts +66 -0
  141. package/src/types/validate.ts +71 -0
  142. package/src/utils/SchemaHelper.ts +196 -0
  143. package/src/utils/SchemaUtils.ts +346 -0
  144. package/src/utils/TypeConverter.ts +215 -0
  145. package/src/utils/index.ts +10 -0
  146. package/src/validators/CustomKeywords.ts +477 -0
  147. package/.eslintignore +0 -11
  148. package/.eslintrc.json +0 -27
  149. package/CONTRIBUTING.md +0 -368
  150. package/STATUS.md +0 -491
  151. package/changelogs/v1.0.0.md +0 -328
  152. package/changelogs/v1.0.9.md +0 -367
  153. package/changelogs/v1.1.0.md +0 -389
  154. package/changelogs/v1.1.1.md +0 -308
  155. package/changelogs/v1.1.2.md +0 -183
  156. package/changelogs/v1.1.3.md +0 -161
  157. package/changelogs/v1.1.4.md +0 -432
  158. package/changelogs/v1.1.5.md +0 -493
  159. package/changelogs/v1.1.6.md +0 -211
  160. package/changelogs/v1.1.8.md +0 -376
  161. package/changelogs/v1.2.3.md +0 -124
  162. package/docs/INDEX.md +0 -252
  163. package/docs/issues-resolved-summary.md +0 -196
  164. package/docs/performance-benchmark-report.md +0 -179
  165. package/docs/performance-quick-reference.md +0 -123
  166. package/docs/user-questions-answered.md +0 -353
  167. package/docs/validation-rules-v1.0.2.md +0 -1608
  168. package/examples/README.md +0 -81
  169. package/examples/array-dsl-example.js +0 -227
  170. package/examples/conditional-example.js +0 -288
  171. package/examples/conditional-non-object.js +0 -129
  172. package/examples/conditional-validate-example.js +0 -321
  173. package/examples/custom-extension.js +0 -85
  174. package/examples/dsl-match-example.js +0 -74
  175. package/examples/dsl-style.js +0 -118
  176. package/examples/dynamic-locale-configuration.js +0 -348
  177. package/examples/dynamic-locale-example.js +0 -287
  178. package/examples/enum.examples.js +0 -324
  179. package/examples/export-demo.js +0 -130
  180. package/examples/express-integration.js +0 -376
  181. package/examples/i18n-error-handling-complete.js +0 -381
  182. package/examples/i18n-error-handling-quickstart.md +0 -0
  183. package/examples/i18n-error.examples.js +0 -181
  184. package/examples/i18n-full-demo.js +0 -301
  185. package/examples/i18n-memory-safety.examples.js +0 -268
  186. package/examples/markdown-export.js +0 -71
  187. package/examples/middleware-usage.js +0 -93
  188. package/examples/new-features-comparison.js +0 -315
  189. package/examples/password-reset/README.md +0 -153
  190. package/examples/password-reset/schema.js +0 -26
  191. package/examples/password-reset/test.js +0 -101
  192. package/examples/plugin-system.examples.js +0 -205
  193. package/examples/schema-utils-chaining.examples.js +0 -250
  194. package/examples/simple-example.js +0 -122
  195. package/examples/slug.examples.js +0 -179
  196. package/examples/string-extensions.js +0 -297
  197. package/examples/union-type-example.js +0 -127
  198. package/examples/union-types-example.js +0 -77
  199. package/examples/user-registration/README.md +0 -156
  200. package/examples/user-registration/routes.js +0 -92
  201. package/examples/user-registration/schema.js +0 -150
  202. package/examples/user-registration/server.js +0 -74
  203. package/index.d.ts +0 -3540
  204. package/index.js +0 -457
  205. package/index.mjs +0 -60
  206. package/lib/adapters/DslAdapter.js +0 -871
  207. package/lib/adapters/index.js +0 -20
  208. package/lib/config/constants.js +0 -286
  209. package/lib/config/patterns/common.js +0 -47
  210. package/lib/config/patterns/creditCard.js +0 -9
  211. package/lib/config/patterns/idCard.js +0 -9
  212. package/lib/config/patterns/index.js +0 -9
  213. package/lib/config/patterns/licensePlate.js +0 -4
  214. package/lib/config/patterns/passport.js +0 -4
  215. package/lib/config/patterns/phone.js +0 -9
  216. package/lib/config/patterns/postalCode.js +0 -5
  217. package/lib/core/CacheManager.js +0 -376
  218. package/lib/core/ConditionalBuilder.js +0 -503
  219. package/lib/core/DslBuilder.js +0 -1400
  220. package/lib/core/ErrorCodes.js +0 -233
  221. package/lib/core/ErrorFormatter.js +0 -445
  222. package/lib/core/JSONSchemaCore.js +0 -347
  223. package/lib/core/Locale.js +0 -130
  224. package/lib/core/MessageTemplate.js +0 -98
  225. package/lib/core/PluginManager.js +0 -448
  226. package/lib/core/StringExtensions.js +0 -240
  227. package/lib/core/Validator.js +0 -654
  228. package/lib/errors/I18nError.js +0 -328
  229. package/lib/errors/ValidationError.js +0 -191
  230. package/lib/exporters/MarkdownExporter.js +0 -420
  231. package/lib/exporters/MongoDBExporter.js +0 -162
  232. package/lib/exporters/MySQLExporter.js +0 -212
  233. package/lib/exporters/PostgreSQLExporter.js +0 -289
  234. package/lib/exporters/index.js +0 -24
  235. package/lib/locales/index.js +0 -8
  236. package/lib/utils/LRUCache.js +0 -174
  237. package/lib/utils/SchemaHelper.js +0 -240
  238. package/lib/utils/SchemaUtils.js +0 -445
  239. package/lib/utils/TypeConverter.js +0 -245
  240. package/lib/utils/index.js +0 -13
  241. package/lib/validators/CustomKeywords.js +0 -616
  242. package/lib/validators/index.js +0 -11
package/CHANGELOG.md CHANGED
@@ -1,236 +1,113 @@
1
- # 变更日志 (CHANGELOG)
1
+ # Changelog
2
2
 
3
- > **说明**: 版本概览摘要,详细变更见 [changelogs/](./changelogs/) 目录
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
- ### v1.1.8 - 智能参数识别 🚀
103
-
104
- **发布日期**: 2026-01-30
105
- **重要性**: ⭐⭐⭐⭐⭐
106
-
107
- **主要改进**:
108
- - 🚀 新增智能参数识别功能,支持简化语法 `dsl.error.throw('key', 'locale')`
109
- - 从4个参数减少到2个参数(不需要参数对象时)
110
- - 智能识别第2个参数类型:字符串→语言参数,对象→参数对象
111
- - 所有方法都支持:create、throw、assert
112
- - 完全向后兼容,现有代码无需修改
113
- - 新增 17 个测试用例,100%通过率
114
-
115
- **技术细节**:
116
- - 新增 `normalizeParams()` 工具函数
117
- - 修改文件:`lib/errors/I18nError.js`、`index.js`
118
- - 参数识别逻辑:typeof 检查 + Array.isArray 排除
119
- - 零性能损失,运行时开销可忽略不计
120
-
121
- **使用示例**:
122
- ```javascript
123
- // 之前:必须传递空对象
124
- dsl.error.throw('account.notFound', {}, 404, 'zh-CN');
125
-
126
- // 现在:直接传语言参数
127
- dsl.error.throw('account.notFound', 'zh-CN', 404);
128
- ```
129
-
130
- ### v1.1.7 - 错误消息路径显示优化 🐛
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
- ### v1.1.3 - 类型错误消息模板修复 🐛
41
+ ## [2.0.0] — 2026-05-09
178
42
 
179
- **发布日期**: 2026-01-09
180
- **重要性**: ⭐⭐⭐
43
+ ### Breaking Changes (v1 → v2)
181
44
 
182
- **核心改进**:
183
- - 修复类型错误消息中 `{{#actual}}` 模板变量未替换问题
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
- **详细信息**: [查看 changelogs/v1.1.3.md](./changelogs/v1.1.3.md)
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
- ### v1.1.0 - 跨类型联合验证 🎉
57
+ ### Documentation & Examples
192
58
 
193
- **发布日期**: 2026-01-05
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
- **详细信息**: [查看 changelogs/v1.1.0.md](./changelogs/v1.1.0.md)
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
- ### v1.0.9 - 多语言支持完善 🌍
206
-
207
- **发布日期**: 2026-01-04
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
- ### v1.0.0 - 正式发布 🎉
220
-
221
- **发布日期**: 2025-12-29
222
- **重要性**: ⭐⭐⭐⭐⭐
223
-
224
- **核心成就**:
225
- - ✅ 初始发布
226
- - ✅ 简洁的DSL语法
227
- - ✅ 完整的验证功能
80
+ ## [Unreleased]
228
81
 
229
- **详细信息**: [查看 changelogs/v1.0.0.md](./changelogs/v1.0.0.md)
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
- **完整文档**: [docs/INDEX.md](./docs/INDEX.md)
234
- **GitHub**: [https://github.com/vextjs/schema-dsl](https://github.com/vextjs/schema-dsl)
235
- **npm**: [https://www.npmjs.com/package/schema-dsl](https://www.npmjs.com/package/schema-dsl)
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