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/STATUS.md DELETED
@@ -1,491 +0,0 @@
1
- # schema-dsl 项目状态
2
-
3
- > **最后更新**: 2026-03-03
4
- > **当前版本**: v1.2.3
5
- > **项目状态**: ✅ 全部完成,测试100%通过(1003个测试)
6
-
7
- ---
8
-
9
- ## 📋 目录
10
-
11
- - [v1.2.3](#v123) - 2026-03-03 ✅ 已完成
12
- - [v1.1.5](#v115) - 2026-01-17 ✅ 已完成
13
- - [v1.1.4](#v114) - 2026-01-13 ✅ 已完成
14
- - [v1.1.3](#v113) - 2026-01-09 ✅ 已完成
15
- - [v1.1.1](#v111) - 2026-01-06 ✅ 已完成
16
- - [v1.1.0](#v110) - 2026-01-05 ✅ 已完成
17
- - [v1.0.9](#v109) - 2026-01-04 ✅ 已完成
18
- - [v1.0.8](#v108) - 2026-01-04 ✅ 已完成
19
- - [v1.0.7](#v107) - 2026-01-04 ✅ 已完成
20
- - [v1.0.6](#v106) - 2026-01-04 ✅ 已完成
21
- - [v1.0.5](#v105) - 2026-01-04 ✅ 已完成
22
- - [v1.0.4](#v104) - 2025-12-31 ✅ 已完成
23
- - [v1.0.3](#v103) - 2025-12-31 ⚠️ 破坏性变更
24
- - [v1.0.2](#v102) - 2025-12-31 ✅ 已完成
25
- - [v1.0.1](#v101) - 2025-12-31 ✅ 已完成
26
- - [v1.0.0](#v100) - 2025-12-29 ✅ 已完成
27
-
28
- ---
29
-
30
- ## 版本发布计划
31
-
32
- ### v1.2.3
33
-
34
- **发布日期**: 2026-03-03
35
- **状态**: ✅ 已完成
36
- **类型**: 🚀 功能增强 + 🐛 Bug修复
37
- **进度**: 100%完成 | 测试: 1003个通过 (100%)
38
-
39
- | 需求标题 | 状态 | 优先级 | 详细 |
40
- |---------|------|--------|------|
41
- | i18n 子目录递归扫描 | ✅ 完成 | P0 | index.js `loadLocalesFromDir` |
42
- | 同名 key 冲突检测(WARN + strict 模式)| ✅ 完成 | P1 | index.js |
43
- | 语言文件名格式校验 | ✅ 完成 | P1 | index.js |
44
- | localesPath 对象用法修复 | ✅ 完成 | P1 | index.js |
45
- | TypeScript 类型扩展(I18nConfig + strict)| ✅ 完成 | P0 | index.d.ts |
46
- | 新增单元测试(20个) | ✅ 完成 | P0 | test/unit/i18n-subdir.test.js |
47
- | 修复跨文件测试状态污染(3个 failing → 0)| ✅ 完成 | P0 | test/unit/i18n-subdir.test.js |
48
- | 更新文档 | ✅ 完成 | P1 | docs/add-custom-locale.md |
49
- | 更新 CHANGELOG | ✅ 完成 | P0 | changelogs/v1.2.3.md |
50
- | 更新 STATUS | ✅ 完成 | P0 | STATUS.md |
51
-
52
- **向后兼容性**: ✅ 100% 向后兼容
53
-
54
- ---
55
-
56
- ### v1.1.5
57
-
58
- **发布日期**: 2026-01-17
59
- **状态**: ✅ 已完成
60
- **类型**: 🚀 功能增强 - 错误配置对象格式支持
61
- **进度**: 100%完成 | 测试: 955个通过 (100%)
62
-
63
- | 需求标题 | 状态 | 优先级 | 详细 |
64
- |---------|------|--------|------|
65
- | 实现 Locale.getMessage 对象格式支持 | ✅ 完成 | P0 | lib/core/Locale.js |
66
- | 修改 I18nError 构造函数支持对象格式 | ✅ 完成 | P0 | lib/errors/I18nError.js |
67
- | 新增 originalKey 字段 | ✅ 完成 | P0 | I18nError 类 |
68
- | 更新 TypeScript 类型定义 | ✅ 完成 | P0 | index.d.ts |
69
- | 更新语言包示例(对象格式) | ✅ 完成 | P1 | lib/locales/*.js |
70
- | 新增测试用例(6个) | ✅ 完成 | P0 | test/unit/i18n-error.test.js |
71
- | 更新现有测试适配对象格式 | ✅ 完成 | P0 | test/unit/*.test.js |
72
- | 更新 CHANGELOG | ✅ 完成 | P0 | v1.1.5 变更记录 |
73
- | 更新 STATUS | ✅ 完成 | P0 | 版本号和状态 |
74
-
75
- **实现状态统计**:
76
- - ✅ 完成: 9个
77
- - 🔄 进行中: 0个
78
- - ⏳ 待完成: 0个
79
-
80
- **核心变更**:
81
- - ✨ 语言包支持对象格式 `{ code, message }`
82
- - ✨ I18nError 新增 `originalKey` 字段
83
- - ✨ 多语言共享相同的 `code`
84
- - ✅ 完全向后兼容,字符串格式自动转换
85
- - ✅ `error.is()` 同时支持 code 和 originalKey 判断
86
-
87
- **向后兼容性**: ✅ 100% 向后兼容
88
-
89
- ### v1.1.4
90
-
91
- **发布日期**: 2026-01-13
92
- **状态**: ✅ 已完成
93
- **类型**: 🔧 TypeScript类型修复 + 📚 文档完善
94
- **进度**: 100%完成 | 测试: 921个通过
95
-
96
- | 需求标题 | 状态 | 优先级 | 详细 |
97
- |---------|------|--------|------|
98
- | 修复 dsl.error.assert 重复签名 | ✅ 完成 | P0 | index.d.ts L1336-1343 |
99
- | 修复 I18nError.assert 重复签名 | ✅ 完成 | P0 | index.d.ts L1805-1821 |
100
- | 完善运行时多语言文档 | ✅ 完成 | P1 | docs/runtime-locale-support.md |
101
- | 更新 README.md | ✅ 完成 | P1 | 添加运行时语言支持示例 |
102
- | 生成深度分析报告 | ✅ 完成 | P2 | reports/schema-dsl/analysis/ |
103
- | 更新 CHANGELOG | ✅ 完成 | P0 | v1.1.4 变更记录 |
104
- | 更新 STATUS | ✅ 完成 | P0 | 版本号和状态 |
105
-
106
- **实现状态统计**:
107
- - ✅ 完成: 7个
108
- - 🔄 进行中: 0个
109
- - ⏳ 待完成: 0个
110
-
111
- **核心变更**:
112
- - ✅ **修复**: index.d.ts 中2处重复函数签名(46个类型错误→0个错误)
113
- - ✅ **文档**: 完善运行时多语言支持文档
114
- - ✅ **文档**: README.md 添加运行时语言指定示例
115
- - ✅ **验证**: string? 可选语法完整支持
116
- - ✅ **验证**: 多语言加载机制验证
117
-
118
- ---
119
-
120
- ### v1.1.3
121
-
122
- **发布日期**: 2026-01-09
123
- **状态**: ✅ 已完成
124
- **类型**: 🐛 Bug修复 - 类型错误消息模板变量未替换
125
- **进度**: 100%完成 | 测试: 921个通过
126
-
127
- | 需求标题 | 状态 | 优先级 | 详细 |
128
- |---------|------|--------|------|
129
- | 修复类型错误消息模板 | ✅ 完成 | P0 | `{{#actual}}` 变量未替换 |
130
- | 添加 actual 参数计算 | ✅ 完成 | P0 | 正确显示实际数据类型 |
131
- | 更新 CHANGELOG | ✅ 完成 | P0 | v1.1.3 变更记录 |
132
- | 更新 STATUS | ✅ 完成 | P0 | 版本号和状态 |
133
-
134
- **实现状态统计**:
135
- - ✅ 完成: 4个
136
- - 🔄 进行中: 0个
137
- - ⏳ 待完成: 0个
138
-
139
- **核心变更**:
140
- - ✅ **修复**: ErrorFormatter.formatDetailed() 添加 `actual` 参数
141
- - ✅ **修复**: 类型错误消息正确显示实际数据类型
142
- - ✅ **支持**: `number`, `string`, `boolean`, `object`, `array`, `null`, `undefined`
143
-
144
- **Bug 详情**:
145
- - **问题**: `{{#actual}}` 模板变量未被替换
146
- - **原因**: `interpolateData` 缺少 `actual` 参数
147
- - **修复**: 添加类型计算逻辑(第 280-284 行)
148
- - **影响**: 仅影响错误消息显示,不影响验证逻辑
149
-
150
- ---
151
-
152
- ### v1.1.1
153
-
154
- **发布日期**: 2026-01-06
155
- **状态**: ✅ 已完成
156
- **类型**: 🎉 新功能 - ConditionalBuilder 独立消息 + I18nError 多语言错误
157
- **进度**: 100%完成 | 测试: 921个通过 | 新增: 52个测试
158
-
159
- | 需求标题 | 状态 | 优先级 | 详细 |
160
- |---------|------|--------|------|
161
- | ConditionalBuilder 独立消息 | ✅ 完成 | P1 | `.and()/.or()` 后可调用 `.message()` |
162
- | I18nError 多语言错误 | ✅ 完成 | P1 | 统一的多语言错误抛出机制 |
163
- | dsl.error 快捷方法 | ✅ 完成 | P1 | create/throw/assert 三个方法 |
164
- | TypeScript 类型定义 | ✅ 完成 | P0 | I18nError + dsl.error 类型 |
165
- | 测试用例 | ✅ 完成 | P0 | 52个新测试(24+28) |
166
- | 文档更新 | ✅ 完成 | P0 | README + CHANGELOG + examples |
167
- | 语言包扩充 | ✅ 完成 | P1 | 中英文 20+ 错误消息 |
168
-
169
- **实现状态统计**:
170
- - ✅ 完成: 7个
171
- - 🔄 进行中: 0个
172
- - ⏳ 待完成: 0个
173
-
174
- **核心变更**:
175
- - ✅ **新增**: ConditionalBuilder 支持 `.and()/.or()` 独立消息
176
- - ✅ **新增**: I18nError 类 (lib/errors/I18nError.js)
177
- - ✅ **新增**: dsl.error 快捷方法 (create/throw/assert)
178
- - ✅ **新增**: 20+ 内置错误代码(通用/账户/用户/订单)
179
- - ✅ **新增**: examples/i18n-error.examples.js 示例文件
180
- - ✅ **更新**: README FAQ Q7/Q8
181
- - ✅ **更新**: CHANGELOG v1.1.1 完整记录
182
- - ✅ **更新**: index.d.ts TypeScript 类型定义
183
-
184
- ---
185
-
186
- ### v1.1.0
187
-
188
- **发布日期**: 2026-01-05
189
- **状态**: ✅ 已完成
190
- **类型**: 🎉 重大功能 - 跨类型联合验证 + 插件系统增强
191
- **进度**: 100%完成
192
-
193
- | 需求标题 | 状态 | 优先级 | 详细 |
194
- |---------|------|--------|------|
195
- | 跨类型联合验证 | ✅ 完成 | P1 | `types:string|number` 语法 |
196
- | 插件 DSL 类型注册 | ✅ 完成 | P1 | 插件可注册自定义 DSL 类型 |
197
- | DslBuilder.registerType | ✅ 完成 | P0 | 静态方法供插件使用 |
198
- | 文档更新 | ✅ 完成 | P0 | README + CHANGELOG |
199
-
200
- **实现状态统计**:
201
- - ✅ 完成: 4个
202
- - 🔄 进行中: 0个
203
- - ⏳ 待完成: 0个
204
-
205
- **核心变更**:
206
- - ✅ **新增**: `types:` 语法支持跨类型联合验证
207
- - ✅ **增强**: 插件系统支持 DSL 类型注册
208
- - ✅ **新增**: DslBuilder.registerType() 静态方法
209
-
210
- ---
211
-
212
- ### v1.0.9
213
-
214
- **发布日期**: 2026-01-04
215
- **状态**: ✅ 已完成
216
- **类型**: 📝 文档完善 + 性能验证
217
- **进度**: 100%完成 | 优化: 多语言文档 | 性能: 2,879,606 ops/s
218
-
219
- | 需求标题 | 状态 | 优先级 | 详细 |
220
- |---------|------|--------|------|
221
- | 多语言文档统一 | ✅ 完成 | P0 | "首次加载,运行时切换" |
222
- | 添加文档导航 | ✅ 完成 | P1 | i18n.md 导航指引 |
223
- | 性能数据更新 | ✅ 完成 | P0 | 更新到 2,879,606 ops/s |
224
- | README 更新 | ✅ 完成 | P0 | 性能+多语言章节 |
225
- | CHANGELOG 更新 | ✅ 完成 | P0 | 添加 v1.0.9 记录 |
226
- | 配置示例修复 | ✅ 完成 | P0 | i18n-user-guide.md |
227
-
228
- **实现状态统计**:
229
- - ✅ 完成: 6个
230
- - 🔄 进行中: 0个
231
- - ⏳ 待完成: 0个
232
-
233
- **核心变更**:
234
- - ✅ **优化**: 统一多语言文档描述(5个文档)
235
- - ✅ **新增**: 文档导航(i18n.md)
236
- - ✅ **更新**: 性能对比数据(提升3.19倍)
237
- - ✅ **修复**: i18n-user-guide.md 配置错误
238
- - ✅ **更新**: README.md 和 CHANGELOG.md
239
-
240
- **用户价值**:
241
- - 🎯 文档更清晰,用户快速找到所需信息
242
- - 🎯 性能数据更新,证明库的卓越性能
243
-
244
- ---
245
-
246
- ### v1.0.8
247
-
248
- **发布日期**: 2026-01-04
249
- **状态**: ✅ 已完成
250
- **类型**: 🔧 错误消息过滤增强
251
-
252
- ---
253
-
254
- ### v1.0.7
255
-
256
- **发布日期**: 2026-01-04
257
- **状态**: ✅ 已完成
258
- **类型**: 🐛 嵌套支持修复
259
-
260
- ---
261
-
262
- ### v1.0.6
263
-
264
- **发布日期**: 2026-01-04
265
- **状态**: ✅ 已完成
266
- **类型**: 🚨 TypeScript 类型污染修复
267
-
268
- ---
269
-
270
- ### v1.0.5
271
-
272
- **发布日期**: 2026-01-04
273
- **状态**: ✅ 已完成
274
- **类型**: ✅ 测试覆盖率提升
275
-
276
- ---
277
-
278
- ### v1.0.4
279
-
280
- **发布日期**: 2025-12-31
281
- **状态**: ✅ 已完成
282
- **类型**: ✨ 功能增强(TypeScript 完整支持)
283
- **进度**: 100%完成 | 新增: TypeScript 类型定义、使用指南 | 文档: 1500+ 行
284
-
285
- | 需求标题 | 状态 | 优先级 | 详细 |
286
- |---------|------|--------|------|
287
- | 完善 index.d.ts | ✅ 完成 | P0 | validateAsync、ValidationError 类型 |
288
- | String 扩展 TS 说明 | ✅ 完成 | P0 | 添加详细使用说明和对比 |
289
- | TypeScript 使用指南 | ✅ 完成 | P0 | 1000+ 行完整文档 |
290
- | README 更新 | ✅ 完成 | P0 | 添加 TypeScript 章节 |
291
- | 类型错误修复 | ✅ 完成 | P0 | 修复 dsl.config i18n 类型 |
292
- | 发版文档更新 | ✅ 完成 | P0 | CHANGELOG、STATUS、package.json |
293
-
294
- **实现状态统计**:
295
- - ✅ 完成: 6个
296
- - 🔄 进行中: 0个
297
- - ⏳ 待完成: 0个
298
-
299
- **核心变更**:
300
- - ✅ **新增**: validateAsync 函数完整类型定义
301
- - ✅ **新增**: ValidationError 类完整类型(含所有方法)
302
- - ✅ **优化**: String 扩展添加 TypeScript 使用说明
303
- - ✅ **新增**: TypeScript 使用指南文档(1000+ 行)
304
- - ✅ **修复**: dsl.config 的 i18n 参数类型错误
305
- - ✅ **文档**: README 添加 TypeScript 快速开始章节
306
-
307
- **用户价值**:
308
- - 🎯 TypeScript 用户获得完整的类型安全和 IDE 提示
309
- - 🎯 详细的文档指导如何在 TypeScript 中正确使用
310
- - 🎯 JavaScript 用户体验不变,100% 向后兼容
311
- - 🎯 降低学习成本,提高开发效率
312
-
313
- ---
314
-
315
- ### v1.0.3
316
-
317
- **发布日期**: 2025-12-31
318
- **状态**: ✅ 已完成
319
- **类型**: ⚠️ 破坏性变更
320
- **进度**: 100%完成 | 修复: String单值语法 | 测试: 3个新增测试
321
-
322
- | 需求标题 | 状态 | 优先级 | 详细 |
323
- |---------|------|--------|------|
324
- | String单值语法修复 | ✅ 完成 | P0 | 'string:N' 改为精确长度 |
325
- | 核心代码修改 | ✅ 完成 | P0 | DslBuilder.js |
326
- | 测试用例更新 | ✅ 完成 | P0 | 2个修改 + 1个新增 |
327
- | 文档更新 | ✅ 完成 | P0 | README + CHANGELOG |
328
- | 迁移指南 | ✅ 完成 | P0 | CHANGELOG 破坏性变更说明 |
329
- | 新增链式方法 | ✅ 完成 | P1 | dateGreater, dateLess |
330
-
331
- **实现状态统计**:
332
- - ✅ 完成: 6个
333
- - 🔄 进行中: 0个
334
- - ⏳ 待完成: 0个
335
-
336
- **核心变更**:
337
- - ⚠️ **破坏性**: `'string:N'` → exactLength: N(之前是 maxLength: N)
338
- - ✅ **新增**: `'string:-N'` → maxLength: N(明确语法)
339
- - ✅ **保持**: Number 单值仍为 maximum(无变更)
340
- - ✅ **新增**: dateGreater() 和 dateLess() 链式方法
341
-
342
- ---
343
-
344
- ### v1.0.2
345
-
346
- **发布日期**: 2025-12-31
347
- **状态**: ✅ 已完成
348
- **进度**: 100%完成 | 新增: 15个验证器 | 测试: 75个新增测试
349
-
350
- | 需求标题 | 状态 | 优先级 | 详细 |
351
- |---------|------|--------|------|
352
- | String验证器扩展 | ✅ 完成 | P1 | 6个新增验证器 |
353
- | Number验证器扩展 | ✅ 完成 | P1 | 2个新增验证器 |
354
- | Object验证器扩展 | ✅ 完成 | P1 | 2个新增验证器 |
355
- | Array验证器扩展 | ✅ 完成 | P1 | 2个新增验证器 |
356
- | Date验证器扩展 | ✅ 完成 | P1 | 3个新增验证器 |
357
- | 多语言支持 | ✅ 完成 | P0 | 中英文19个消息 |
358
- | 文档补充 | ✅ 完成 | P0 | 15个验证器文档 |
359
- | 示例代码 | ⏳ 待完成 | P1 | 演示新增功能 |
360
- | 单元测试 | ✅ 完成 | P0 | 75个测试用例 |
361
-
362
- **实现状态统计**:
363
- - ✅ 完成: 8个
364
- - 🔄 进行中: 0个
365
- - ⏳ 待完成: 1个
366
-
367
- **核心功能**:
368
- - ✨ **String验证器**: exactLength, alphanum, trim, lowercase, uppercase, jsonString
369
- - 🔢 **Number验证器**: precision, port
370
- - 📦 **Object验证器**: requiredAll, strictSchema
371
- - 📋 **Array验证器**: noSparse, includesRequired
372
- - 📅 **Date验证器**: dateFormat, dateGreater, dateLess
373
- - 🌍 **多语言支持**: 中英文各19个新增消息
374
- - 📝 **完整文档**: validation-rules-v1.0.2.md(1200行)
375
- - 🧪 **测试覆盖**: 75个测试用例,100%通过
376
-
377
- ### v1.0.1
378
-
379
- **发布日期**: 2025-12-31
380
- **状态**: ✅ 已完成
381
- **进度**: 100%完成 | 新增: 枚举功能 | 测试: 30个新增测试
382
-
383
- | 需求标题 | 状态 | 优先级 | 详细 |
384
- |---------|------|--------|------|
385
- | 枚举语法支持 | ✅ 完成 | P0 | value1\|value2 简写语法 |
386
- | 枚举类型自动识别 | ✅ 完成 | P0 | 字符串/布尔值/数字自动识别 |
387
- | 枚举显式类型 | ✅ 完成 | P1 | enum:type:values 语法 |
388
- | 布尔值枚举 | ✅ 完成 | P0 | true\|false 自动识别 |
389
- | 数字枚举 | ✅ 完成 | P0 | 1\|2\|3 自动识别 |
390
- | 整数枚举 | ✅ 完成 | P1 | enum:integer:values |
391
- | 枚举必填标记 | ✅ 完成 | P0 | value1\|value2! |
392
- | 枚举错误消息 | ✅ 完成 | P0 | 统一使用 'enum' 键 |
393
- | 枚举文档 | ✅ 完成 | P0 | docs/enum.md 完整文档 |
394
- | 枚举示例 | ✅ 完成 | P1 | examples/enum.examples.js |
395
- | 枚举测试 | ✅ 完成 | P0 | 30个测试用例 |
396
-
397
- **实现状态统计**:
398
- - ✅ 完成: 11个
399
- - 🔄 进行中: 0个
400
- - ⏳ 待完成: 0个
401
-
402
- **核心功能**:
403
- - ✨ **枚举支持**: 'active|inactive', '1|2|3', 'true|false' 自动识别类型
404
- - 🎯 **简洁语法**: 统一使用 'enum' 键定义错误消息
405
- - 🔧 **灵活配置**: 支持显式指定类型 enum:type:values
406
-
407
- ### v1.0.0
408
-
409
- **发布日期**: 2025-12-29
410
- **状态**: ✅ 已完成
411
- **进度**: 100%完成 | 测试: 447/447 passing (100%) | 覆盖率: >90%
412
-
413
- | 需求标题 | 状态 | 优先级 | 详细 |
414
- |---------|------|--------|------|
415
- | JSON Schema核心类实现 | ✅ 完成 | P0 | JSONSchemaCore.js |
416
- | ajv验证器集成 | ✅ 完成 | P0 | Validator.js |
417
- | DSL风格适配器 | ✅ 完成 | P0 | DslAdapter.js |
418
- | MongoDB导出器 | ✅ 完成 | P0 | MongoDBExporter.js |
419
- | MySQL导出器 | ✅ 完成 | P1 | MySQLExporter.js |
420
- | PostgreSQL导出器 | ✅ 完成 | P1 | PostgreSQLExporter.js |
421
- | 自定义验证扩展 | ✅ 完成 | P1 | CustomKeywords.js |
422
- | 类型转换工具 | ✅ 完成 | P1 | TypeConverter.js |
423
- | Schema辅助函数 | ✅ 完成 | P2 | SchemaHelper.js |
424
- | SchemaUtils工具 | ✅ 完成 | P1 | 4个核心方法: omit/pick/partial/extend |
425
- | String扩展 | ✅ 完成 | P1 | 字符串链式调用 |
426
- | validateAsync | ✅ 完成 | P1 | 异步验证方法 |
427
- | 多语言支持 | ✅ 完成 | P1 | i18n配置和语言包 |
428
- | 缓存优化 | ✅ 完成 | P1 | Schema和正则缓存 |
429
- | 完整文档 | ✅ 完成 | P0 | 纯使用指南 |
430
- | 示例代码 | ✅ 完成 | P1 | Express集成等 |
431
- | 单元测试 | ✅ 完成 | P0 | 447个测试 |
432
-
433
- **实现状态统计**:
434
- - ✅ 完成: 17个
435
- - 🔄 进行中: 0个
436
- - ⏳ 待完成: 0个
437
-
438
- **核心功能**:
439
- - ✨ **DSL语法**: 简洁的字符串DSL,如 `'string:1-50!'`, `'email!'`
440
- - 🔗 **String扩展**: 字符串直接链式调用,如 `'string!'.pattern(/.../).label('名称')`
441
- - 🛠️ **SchemaUtils**: 4个核心方法复用Schema(omit/pick/partial/extend)
442
- - ⚡ **validateAsync**: 异步验证,失败自动抛出错误
443
- - 🌍 **多语言**: i18n配置,支持自定义语言包
444
- - 📤 **多数据库导出**: MongoDB, MySQL, PostgreSQL
445
-
446
- **重大改进**:
447
- - 🎉 **简化设计**: SchemaUtils 只保留4个核心方法,覆盖95%场景
448
- - 📚 **用户友好**: 所有文档纯使用指南,无过度分析
449
- - ✅ **质量保证**: 447个测试100%通过,三轮验证全部通过
450
- - 🚀 **性能优化**: Schema缓存和正则缓存,大型项目性能提升3-10倍
451
-
452
- **测试数据**:
453
- - 单元测试: 447个全部通过 ✅
454
- - 测试时间: 8秒
455
- - 覆盖率: >90%
456
- - 文档示例: 45个全部可执行 ✅
457
-
458
- ---
459
-
460
- ## 需求状态说明
461
-
462
- - ✅ **完成**: 功能已实现并验证
463
- - ⏳ **待完成**: 计划中,待实施
464
- - 🔄 **进行中**: 正在开发
465
- - ❌ **未开始**: 尚未开始
466
- - 🔴 **阻塞**: 存在阻塞问题
467
-
468
- ---
469
-
470
- ## 进度对比
471
-
472
- | 版本 | 开始日期 | 完成日期 | 计划需求 | 完成需求 | 完成率 |
473
- |------|---------|---------|---------|---------|--------|
474
- | v1.0.0 | 2025-12-24 | 2025-12-24 | 15 | 13 | 87% |
475
-
476
- ---
477
-
478
- ## 关键里程碑
479
-
480
- - [x] 2025-12-24: 架构设计完成(适配器模式)
481
- - [x] 2025-12-24: 核心层实现完成
482
- - [x] 2025-12-24: 适配器层实现完成
483
- - [x] 2025-12-24: 导出器层实现完成
484
- - [x] 2025-12-24: DSL语法验证通过
485
- - [x] 2025-12-24: README文档完成
486
- - [ ] 待定: 测试套件完成(目标覆盖率80%+)
487
- - [ ] 待定: v1.0.0正式版发布
488
-
489
- ---
490
-
491
- **项目总体状态**: ✅ 核心功能已完成,具备发布条件