schema-dsl 1.2.5 → 2.0.1

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 (243) hide show
  1. package/CHANGELOG.md +130 -238
  2. package/LICENSE +21 -21
  3. package/README.md +628 -2486
  4. package/dist/DslBuilder-BIgQOAXp.d.ts +343 -0
  5. package/dist/DslBuilder-CjHTucNQ.d.cts +343 -0
  6. package/dist/Validator-CllRdrY0.d.ts +192 -0
  7. package/dist/Validator-D6okG9tr.d.cts +192 -0
  8. package/dist/index.cjs +6640 -0
  9. package/dist/index.d.cts +1151 -0
  10. package/dist/index.d.ts +1151 -0
  11. package/dist/index.js +6574 -0
  12. package/dist/plugin-CIKtTMtS.d.cts +246 -0
  13. package/dist/plugin-CIKtTMtS.d.ts +246 -0
  14. package/dist/plugins/custom-format.cjs +3818 -0
  15. package/dist/plugins/custom-format.d.cts +12 -0
  16. package/dist/plugins/custom-format.d.ts +12 -0
  17. package/dist/plugins/custom-format.js +3788 -0
  18. package/dist/plugins/custom-type-example.cjs +3811 -0
  19. package/dist/plugins/custom-type-example.d.cts +8 -0
  20. package/dist/plugins/custom-type-example.d.ts +8 -0
  21. package/dist/plugins/custom-type-example.js +3781 -0
  22. package/dist/plugins/custom-validator.cjs +144 -0
  23. package/dist/plugins/custom-validator.d.cts +10 -0
  24. package/dist/plugins/custom-validator.d.ts +10 -0
  25. package/dist/plugins/custom-validator.js +119 -0
  26. package/docs/FEATURE-INDEX.md +553 -519
  27. package/docs/add-custom-locale.md +496 -483
  28. package/docs/add-keyword.md +24 -0
  29. package/docs/api-reference.md +1047 -805
  30. package/docs/api.md +13 -0
  31. package/docs/best-practices-project-structure.md +417 -408
  32. package/docs/best-practices.md +712 -672
  33. package/docs/cache-manager.md +344 -336
  34. package/docs/compile.md +45 -0
  35. package/docs/conditional-api.md +1307 -1278
  36. package/docs/custom-extensions-guide.md +339 -411
  37. package/docs/design-philosophy.md +606 -601
  38. package/docs/doc-index.md +324 -0
  39. package/docs/dsl-syntax.md +714 -664
  40. package/docs/dynamic-locale.md +608 -598
  41. package/docs/enum.md +482 -475
  42. package/docs/error-handling.md +1975 -1966
  43. package/docs/export-guide.md +501 -462
  44. package/docs/export-limitations.md +567 -551
  45. package/docs/faq.md +596 -577
  46. package/docs/frontend-i18n-guide.md +307 -293
  47. package/docs/i18n-user-guide.md +487 -474
  48. package/docs/i18n.md +476 -457
  49. package/docs/index.md +48 -0
  50. package/docs/json-schema-basics.md +40 -0
  51. package/docs/label-vs-description.md +271 -262
  52. package/docs/markdown-exporter.md +406 -397
  53. package/docs/mongodb-exporter.md +302 -295
  54. package/docs/multi-language.md +26 -0
  55. package/docs/multi-type-support.md +322 -329
  56. package/docs/mysql-exporter.md +280 -273
  57. package/docs/number-operators.md +449 -442
  58. package/docs/optional-marker-guide.md +326 -321
  59. package/docs/performance-guide.md +49 -0
  60. package/docs/plugin-system.md +381 -542
  61. package/docs/plugin-type-registration.md +34 -0
  62. package/docs/postgresql-exporter.md +311 -304
  63. package/docs/public/favicon.svg +5 -0
  64. package/docs/quick-start.md +435 -761
  65. package/docs/runtime-locale-support.md +532 -521
  66. package/docs/schema-helper.md +345 -340
  67. package/docs/schema-utils-advanced-issues.md +23 -0
  68. package/docs/schema-utils-best-practices.md +20 -0
  69. package/docs/schema-utils-chaining.md +150 -143
  70. package/docs/schema-utils.md +524 -490
  71. package/docs/security-checklist.md +20 -0
  72. package/docs/string-extensions.md +488 -480
  73. package/docs/troubleshooting.md +486 -471
  74. package/docs/type-converter.md +310 -319
  75. package/docs/type-reference.md +242 -219
  76. package/docs/typescript-guide.md +584 -573
  77. package/docs/union-type-guide.md +157 -147
  78. package/docs/union-types.md +284 -277
  79. package/docs/validate-async.md +491 -480
  80. package/docs/validate-batch.md +49 -0
  81. package/docs/validate-dsl-object-support.md +578 -573
  82. package/docs/validate.md +506 -486
  83. package/docs/validation-guide.md +502 -484
  84. package/docs/validator.md +39 -0
  85. package/package.json +131 -73
  86. package/plugins/custom-format.cjs +8 -0
  87. package/plugins/custom-type-example.cjs +8 -0
  88. package/plugins/custom-validator.cjs +8 -0
  89. package/src/adapters/DslAdapter.ts +111 -0
  90. package/src/adapters/index.ts +1 -0
  91. package/src/config/constants.ts +83 -0
  92. package/src/config/index.ts +2 -0
  93. package/src/config/patterns.ts +77 -0
  94. package/src/core/CacheManager.ts +169 -0
  95. package/src/core/ConditionalBuilder.ts +382 -0
  96. package/src/core/ConditionalRuntime.ts +28 -0
  97. package/src/core/ConditionalValidator.ts +255 -0
  98. package/src/core/DslBuilder.ts +687 -0
  99. package/src/core/ErrorCodes.ts +38 -0
  100. package/src/core/ErrorFormatter.ts +271 -0
  101. package/src/core/JSONSchemaCore.ts +65 -0
  102. package/src/core/Locale.ts +187 -0
  103. package/src/core/MessageTemplate.ts +42 -0
  104. package/src/core/ObjectDslBuilder.ts +64 -0
  105. package/src/core/PluginManager.ts +326 -0
  106. package/src/core/StringExtensions.ts +140 -0
  107. package/src/core/TemplateEngine.ts +44 -0
  108. package/src/core/Validator.ts +448 -0
  109. package/src/errors/I18nError.ts +159 -0
  110. package/src/errors/ValidationError.ts +105 -0
  111. package/src/exporters/BaseExporter.ts +60 -0
  112. package/src/exporters/MarkdownExporter.ts +305 -0
  113. package/src/exporters/MongoDBExporter.ts +126 -0
  114. package/src/exporters/MySQLExporter.ts +156 -0
  115. package/src/exporters/PostgreSQLExporter.ts +222 -0
  116. package/src/exporters/index.ts +18 -0
  117. package/src/index.ts +651 -0
  118. package/{lib/locales/en-US.js → src/locales/en-US.ts} +160 -176
  119. package/{lib/locales/es-ES.js → src/locales/es-ES.ts} +160 -113
  120. package/{lib/locales/fr-FR.js → src/locales/fr-FR.ts} +160 -113
  121. package/src/locales/index.ts +103 -0
  122. package/{lib/locales/ja-JP.js → src/locales/ja-JP.ts} +160 -118
  123. package/src/locales/types.ts +156 -0
  124. package/{lib/locales/zh-CN.js → src/locales/zh-CN.ts} +160 -177
  125. package/src/parser/ConstraintParser.ts +101 -0
  126. package/src/parser/DslParser.ts +470 -0
  127. package/src/parser/SchemaCompiler.ts +66 -0
  128. package/src/parser/TypeRegistry.ts +250 -0
  129. package/src/parser/index.ts +6 -0
  130. package/src/plugins/custom-format.ts +124 -0
  131. package/src/plugins/custom-type-example.ts +106 -0
  132. package/src/plugins/custom-validator.ts +138 -0
  133. package/src/types/conditional.ts +28 -0
  134. package/src/types/config.ts +59 -0
  135. package/src/types/dsl.ts +131 -0
  136. package/src/types/error.ts +60 -0
  137. package/src/types/index.ts +17 -0
  138. package/src/types/infer.ts +128 -0
  139. package/src/types/plugin.ts +58 -0
  140. package/src/types/safe-regex.d.ts +9 -0
  141. package/src/types/schema.ts +66 -0
  142. package/src/types/validate.ts +71 -0
  143. package/src/utils/SchemaHelper.ts +196 -0
  144. package/src/utils/SchemaUtils.ts +365 -0
  145. package/src/utils/TypeConverter.ts +215 -0
  146. package/src/utils/index.ts +10 -0
  147. package/src/validators/CustomKeywords.ts +477 -0
  148. package/.eslintignore +0 -11
  149. package/.eslintrc.json +0 -27
  150. package/CONTRIBUTING.md +0 -368
  151. package/STATUS.md +0 -491
  152. package/changelogs/v1.0.0.md +0 -328
  153. package/changelogs/v1.0.9.md +0 -367
  154. package/changelogs/v1.1.0.md +0 -389
  155. package/changelogs/v1.1.1.md +0 -308
  156. package/changelogs/v1.1.2.md +0 -183
  157. package/changelogs/v1.1.3.md +0 -161
  158. package/changelogs/v1.1.4.md +0 -432
  159. package/changelogs/v1.1.5.md +0 -493
  160. package/changelogs/v1.1.6.md +0 -211
  161. package/changelogs/v1.1.8.md +0 -376
  162. package/changelogs/v1.2.3.md +0 -124
  163. package/docs/INDEX.md +0 -252
  164. package/docs/issues-resolved-summary.md +0 -196
  165. package/docs/performance-benchmark-report.md +0 -179
  166. package/docs/performance-quick-reference.md +0 -123
  167. package/docs/user-questions-answered.md +0 -353
  168. package/docs/validation-rules-v1.0.2.md +0 -1608
  169. package/examples/README.md +0 -81
  170. package/examples/array-dsl-example.js +0 -227
  171. package/examples/conditional-example.js +0 -288
  172. package/examples/conditional-non-object.js +0 -129
  173. package/examples/conditional-validate-example.js +0 -321
  174. package/examples/custom-extension.js +0 -85
  175. package/examples/dsl-match-example.js +0 -74
  176. package/examples/dsl-style.js +0 -118
  177. package/examples/dynamic-locale-configuration.js +0 -348
  178. package/examples/dynamic-locale-example.js +0 -287
  179. package/examples/enum.examples.js +0 -324
  180. package/examples/export-demo.js +0 -130
  181. package/examples/express-integration.js +0 -376
  182. package/examples/i18n-error-handling-complete.js +0 -381
  183. package/examples/i18n-error-handling-quickstart.md +0 -0
  184. package/examples/i18n-error.examples.js +0 -181
  185. package/examples/i18n-full-demo.js +0 -301
  186. package/examples/i18n-memory-safety.examples.js +0 -268
  187. package/examples/markdown-export.js +0 -71
  188. package/examples/middleware-usage.js +0 -93
  189. package/examples/new-features-comparison.js +0 -315
  190. package/examples/password-reset/README.md +0 -153
  191. package/examples/password-reset/schema.js +0 -26
  192. package/examples/password-reset/test.js +0 -101
  193. package/examples/plugin-system.examples.js +0 -205
  194. package/examples/schema-utils-chaining.examples.js +0 -250
  195. package/examples/simple-example.js +0 -122
  196. package/examples/slug.examples.js +0 -179
  197. package/examples/string-extensions.js +0 -297
  198. package/examples/union-type-example.js +0 -127
  199. package/examples/union-types-example.js +0 -77
  200. package/examples/user-registration/README.md +0 -156
  201. package/examples/user-registration/routes.js +0 -92
  202. package/examples/user-registration/schema.js +0 -150
  203. package/examples/user-registration/server.js +0 -74
  204. package/index.d.ts +0 -3658
  205. package/index.js +0 -475
  206. package/index.mjs +0 -60
  207. package/lib/adapters/DslAdapter.js +0 -995
  208. package/lib/adapters/index.js +0 -20
  209. package/lib/config/constants.js +0 -286
  210. package/lib/config/patterns/common.js +0 -47
  211. package/lib/config/patterns/creditCard.js +0 -9
  212. package/lib/config/patterns/idCard.js +0 -9
  213. package/lib/config/patterns/index.js +0 -9
  214. package/lib/config/patterns/licensePlate.js +0 -4
  215. package/lib/config/patterns/passport.js +0 -4
  216. package/lib/config/patterns/phone.js +0 -9
  217. package/lib/config/patterns/postalCode.js +0 -5
  218. package/lib/core/CacheManager.js +0 -376
  219. package/lib/core/ConditionalBuilder.js +0 -503
  220. package/lib/core/DslBuilder.js +0 -1589
  221. package/lib/core/ErrorCodes.js +0 -233
  222. package/lib/core/ErrorFormatter.js +0 -445
  223. package/lib/core/JSONSchemaCore.js +0 -347
  224. package/lib/core/Locale.js +0 -130
  225. package/lib/core/MessageTemplate.js +0 -98
  226. package/lib/core/PluginManager.js +0 -448
  227. package/lib/core/StringExtensions.js +0 -240
  228. package/lib/core/Validator.js +0 -654
  229. package/lib/errors/I18nError.js +0 -328
  230. package/lib/errors/ValidationError.js +0 -191
  231. package/lib/exporters/MarkdownExporter.js +0 -420
  232. package/lib/exporters/MongoDBExporter.js +0 -162
  233. package/lib/exporters/MySQLExporter.js +0 -212
  234. package/lib/exporters/PostgreSQLExporter.js +0 -289
  235. package/lib/exporters/index.js +0 -24
  236. package/lib/locales/index.js +0 -8
  237. package/lib/utils/LRUCache.js +0 -174
  238. package/lib/utils/SchemaHelper.js +0 -240
  239. package/lib/utils/SchemaUtils.js +0 -445
  240. package/lib/utils/TypeConverter.js +0 -245
  241. package/lib/utils/index.js +0 -13
  242. package/lib/validators/CustomKeywords.js +0 -616
  243. 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
- **项目总体状态**: ✅ 核心功能已完成,具备发布条件