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
@@ -1,432 +0,0 @@
1
- # v1.1.4 变更日志
2
-
3
- > **发布日期**: 2026-01-13
4
- > **版本号**: v1.1.4
5
- > **类型**: 🔧 TypeScript类型修复 + 📚 文档完善
6
-
7
- ---
8
-
9
- ## 📋 变更概览
10
-
11
- | 类型 | 数量 | 说明 |
12
- |------|------|------|
13
- | 🔧 Bug修复 | 2 | TypeScript 类型定义重复签名 |
14
- | 📚 文档更新 | 3 | 多语言文档完善 |
15
- | ✅ 验证测试 | 3 | 多语言、语法、类型验证 |
16
- | 🔄 内部改进 | 1 | CHANGELOG 格式统一 |
17
-
18
- ---
19
-
20
- ## 🔧 TypeScript 类型修复
21
-
22
- ### 问题描述
23
-
24
- index.d.ts 中存在2处重复的函数签名定义,导致 TypeScript 编译器报错(46个类型错误)。
25
-
26
- ### 修复详情
27
-
28
- #### 1. dsl.error.assert 重复签名
29
-
30
- **位置**: `index.d.ts` 第1336-1343行
31
-
32
- **修复前**:
33
- ```typescript
34
- assert(
35
- condition: any,
36
- code: string,
37
- params?: Record<string, any>,
38
- statusCode?: number,
39
- locale?: string
40
- ): asserts condition;
41
- statusCode?: number // ❌ 重复行
42
- ): asserts condition; // ❌ 重复行
43
- ```
44
-
45
- **修复后**:
46
- ```typescript
47
- assert(
48
- condition: any,
49
- code: string,
50
- params?: Record<string, any>,
51
- statusCode?: number,
52
- locale?: string
53
- ): asserts condition;
54
- ```
55
-
56
- **错误信息**:
57
- ```
58
- TS1131: Property or signature expected.
59
- TS1128: Declaration or statement expected.
60
- 应为类型成员
61
- ```
62
-
63
- ---
64
-
65
- #### 2. I18nError.assert 重复签名
66
-
67
- **位置**: `index.d.ts` 第1805-1821行
68
-
69
- **修复前**:
70
- ```typescript
71
- static assert(
72
- condition: any,
73
- code: string,
74
- params?: Record<string, any>,
75
- statusCode?: number,
76
- locale?: string
77
- ): asserts condition;
78
- */ // ❌ 注释位置错误
79
- static assert( // ❌ 重复定义
80
- condition: any,
81
- code: string,
82
- params?: Record<string, any>,
83
- statusCode?: number
84
- ): asserts condition;
85
- ```
86
-
87
- **修复后**:
88
- ```typescript
89
- /**
90
- * 断言方法 - 条件不满足时抛错
91
- * @param condition - 条件表达式
92
- * @param code - 错误代码
93
- * @param params - 错误参数
94
- * @param statusCode - HTTP 状态码
95
- * @param locale - 语言环境(可选,不传则使用全局语言)
96
- * @throws I18nError 条件为 false 时抛出
97
- */
98
- static assert(
99
- condition: any,
100
- code: string,
101
- params?: Record<string, any>,
102
- statusCode?: number,
103
- locale?: string
104
- ): asserts condition;
105
- ```
106
-
107
- **错误信息**:
108
- ```
109
- TS1128: Declaration or statement expected.
110
- 应为语句
111
- TS1003: Identifier expected.
112
- ```
113
-
114
- ---
115
-
116
- ### 修复结果
117
-
118
- **修复前**:
119
- - ❌ 46个类型错误
120
- - ⚠️ 1个警告
121
-
122
- **修复后**:
123
- - ✅ 0个类型错误
124
- - ⚠️ 2个可忽略警告(设计决策)
125
-
126
- **剩余警告**:
127
- 1. `export { _if as if }` - 保留词警告(设计决策,为了提供更好的API)
128
- 2. `toJsonSchema()` - 未使用方法警告(向后兼容保留)
129
-
130
- ---
131
-
132
- ### 影响范围
133
-
134
- - ✅ **仅影响**: TypeScript 类型检查
135
- - ✅ **不影响**: 运行时逻辑
136
- - ✅ **向后兼容**: 无破坏性变更
137
- - ✅ **测试状态**: 921个测试全部通过
138
-
139
- ---
140
-
141
- ## 📚 文档更新
142
-
143
- ### 1. 完善运行时多语言支持文档
144
-
145
- **文件**: `docs/runtime-locale-support.md`
146
-
147
- **更新内容**:
148
- - ✅ 版本标记更新为 v1.1.4+
149
- - ✅ 全局语言设置 vs 运行时指定语言对比
150
- - ✅ API 参数详细说明
151
- - ✅ Express/Koa 集成示例
152
- - ✅ 微服务架构中的多语言错误传递
153
- - ✅ 最佳实践建议
154
-
155
- **核心示例**:
156
-
157
- ```javascript
158
- // 运行时指定语言(不影响全局设置)
159
- const error1 = dsl.error.create('account.notFound', {}, 404, 'zh-CN');
160
- // message: "账户不存在"
161
-
162
- const error2 = dsl.error.create('account.notFound', {}, 404, 'en-US');
163
- // message: "Account not found"
164
-
165
- // 根据请求头动态返回
166
- app.post('/api/account', (req, res) => {
167
- const locale = req.headers['accept-language'] || 'en-US';
168
- dsl.error.assert(account, 'account.notFound', {}, 404, locale);
169
- });
170
- ```
171
-
172
- ---
173
-
174
- ### 2. 更新 README.md 多语言章节
175
-
176
- **文件**: `README.md`
177
-
178
- **新增内容**:
179
-
180
- #### 运行时多语言支持(v1.1.0+)
181
-
182
- ```javascript
183
- const { dsl, I18nError } = require('schema-dsl');
184
-
185
- // 方式1: 业务错误 - 运行时指定语言
186
- const error1 = dsl.error.create('account.notFound', {}, 404, 'zh-CN');
187
- console.log(error1.message); // "账户不存在"
188
-
189
- const error2 = dsl.error.create('account.notFound', {}, 404, 'en-US');
190
- console.log(error2.message); // "Account not found"
191
-
192
- // 方式2: 断言风格 - 根据请求头动态指定
193
- app.post('/api/withdraw', (req, res) => {
194
- const locale = req.headers['accept-language'] || 'en-US';
195
- const account = getAccount(req.user.id);
196
-
197
- // 根据请求头返回对应语言的错误
198
- I18nError.assert(account, 'account.notFound', {}, 404, locale);
199
- I18nError.assert(
200
- account.balance >= req.body.amount,
201
- 'account.insufficientBalance',
202
- { balance: account.balance, required: req.body.amount },
203
- 400,
204
- locale
205
- );
206
-
207
- // 验证通过,继续处理...
208
- });
209
- ```
210
-
211
- **适用场景**:
212
- - ✅ 多语言 API(根据请求头返回不同语言)
213
- - ✅ 微服务架构(错误在服务间传递时保持语言)
214
- - ✅ 同一请求中需要多种语言的错误消息
215
-
216
- ---
217
-
218
- ### 3. 更新 README.md Q8章节
219
-
220
- **增强内容**: 添加运行时语言支持示例
221
-
222
- ```javascript
223
- // 根据请求头动态返回不同语言
224
- app.post('/api/account', (req, res, next) => {
225
- const locale = req.headers['accept-language'] || 'en-US';
226
- const account = getAccount(req.user.id);
227
-
228
- try {
229
- // 第5个参数指定语言
230
- dsl.error.assert(account, 'account.notFound', {}, 404, locale);
231
- dsl.error.assert(
232
- account.balance >= 100,
233
- 'account.insufficientBalance',
234
- { balance: account.balance, required: 100 },
235
- 400,
236
- locale
237
- );
238
- // 验证通过...
239
- } catch (error) {
240
- next(error);
241
- }
242
- });
243
-
244
- // 同一请求中使用不同语言
245
- const error1 = dsl.error.create('account.notFound', {}, 404, 'zh-CN');
246
- console.log(error1.message); // "账户不存在"
247
-
248
- const error2 = dsl.error.create('account.notFound', {}, 404, 'en-US');
249
- console.log(error2.message); // "Account not found"
250
- ```
251
-
252
- **新增文档链接**:
253
- - 📖 [运行时多语言支持](./docs/runtime-locale-support.md)
254
-
255
- ---
256
-
257
- ### 4. 生成深度分析报告
258
-
259
- **文件**: `reports/schema-dsl/analysis/deep-analysis-multilang-types-v1.1.2.md`
260
-
261
- **报告内容**:
262
- - ✅ 多语言加载机制详细分析
263
- - ✅ string? 语法支持验证
264
- - ✅ 类型定义问题分析与修复步骤
265
- - ✅ 测试验证结果
266
- - ✅ 优化建议
267
-
268
- **核心发现**:
269
- 1. 多语言包在启动时一次性加载(`lib/locales/index.js`)
270
- 2. 支持全局切换:`Locale.setLocale('zh-CN')`
271
- 3. 支持运行时指定:`dsl.error.create(code, params, statusCode, 'zh-CN')`
272
- 4. string? 语法完整支持(包括 `string:3-32?`、`email?` 等)
273
-
274
- ---
275
-
276
- ## ✅ 验证测试
277
-
278
- ### 1. 多语言测试
279
-
280
- **测试文件**: `test-i18n-support.js`
281
-
282
- **测试覆盖**:
283
- - ✅ dsl.error.create/throw/assert 方法存在性
284
- - ✅ 5种语言支持验证(中英日法西)
285
- - ✅ 参数插值功能
286
- - ✅ 运行时指定语言(不影响全局)
287
- - ✅ 错误对象属性验证
288
- - ✅ toJSON 方法
289
-
290
- **测试结果**:
291
- ```
292
- ========================================
293
- 运行时语言支持测试全部通过!
294
- ========================================
295
- ✅ dsl.error.create 支持运行时指定语言
296
- ✅ I18nError.throw 支持运行时指定语言
297
- ✅ I18nError.assert 支持运行时指定语言
298
- ✅ 运行时语言不影响全局语言设置
299
- ✅ 同一请求可使用多种语言
300
- ✅ 适合 API 开发中根据请求头动态返回多语言错误
301
-
302
- 🎉 所有测试通过!ctx.dsl.error 等方法完全支持多语言!
303
- ```
304
-
305
- ---
306
-
307
- ### 2. string? 语法测试
308
-
309
- **测试文件**: `test-optional-syntax.js`
310
-
311
- **测试覆盖**:
312
- - ✅ `string`(默认可选)
313
- - ✅ `string!`(必填)
314
- - ✅ `string?`(显式可选)
315
- - ✅ `string:3-32?`(范围可选)
316
- - ✅ `email?`(格式可选)
317
-
318
- **测试结果**:
319
- ```
320
- ========================================
321
- 测试总结
322
- ========================================
323
- ✅ string(默认可选)- 支持
324
- ✅ string!(必填)- 支持
325
- ✅ string?(显式可选)- 支持
326
-
327
- 🎯 结论:
328
- 1. string 和 string? 行为相同(都是可选)
329
- 2. string? 提供更明确的语义表达
330
- 3. 建议:在需要明确表达"可选"时使用 ?
331
- ```
332
-
333
- ---
334
-
335
- ### 3. 类型定义验证
336
-
337
- **工具**: TypeScript 编译器 + IDE 类型检查
338
-
339
- **验证结果**:
340
- - ✅ 无类型错误
341
- - ⚠️ 2个可忽略警告
342
- - ✅ dsl.error 类型完整
343
- - ✅ I18nError 类型完整
344
- - ✅ 所有方法签名正确
345
-
346
- ---
347
-
348
- ## 🔄 内部改进
349
-
350
- ### 统一 CHANGELOG.md 格式
351
-
352
- **参考**: monSQLize/CHANGELOG.md
353
-
354
- **改进内容**:
355
- - ✅ 详细变更移至 `changelogs/` 目录
356
- - ✅ CHANGELOG.md 保留版本概览和里程碑摘要
357
- - ✅ 增加版本概览表格
358
- - ✅ 增加变更统计
359
- - ✅ 增加里程碑版本摘要
360
-
361
- **格式特点**:
362
- - ✅ 清晰的表格布局
363
- - ✅ 统一的日期格式(YYYY-MM-DD)
364
- - ✅ 重要性标记(⭐数量)
365
- - ✅ Emoji 图标分类(🔧🐛🎉📚✅)
366
- - ✅ 详细链接到 changelogs/ 目录
367
-
368
- ---
369
-
370
- ## 📦 依赖变更
371
-
372
- **无依赖变更**
373
-
374
- ---
375
-
376
- ## 🎯 升级指南
377
-
378
- ### 从 v1.1.3 升级到 v1.1.4
379
-
380
- **破坏性变更**: ❌ 无
381
-
382
- **推荐操作**:
383
- ```bash
384
- npm install schema-dsl@1.1.4
385
- ```
386
-
387
- **无需修改代码**: 本次更新仅修复 TypeScript 类型定义,不影响运行时行为。
388
-
389
- ---
390
-
391
- ## 📊 统计信息
392
-
393
- ### 代码变更
394
-
395
- | 文件 | 添加 | 删除 | 说明 |
396
- |------|------|------|------|
397
- | index.d.ts | 20 | 9 | 修复重复签名 + 完善注释 |
398
- | CHANGELOG.md | 150 | 1200 | 格式重构,详情移至 changelogs/ |
399
- | README.md | 80 | 10 | 添加运行时多语言示例 |
400
- | STATUS.md | 30 | 10 | 更新版本信息 |
401
- | package.json | 1 | 1 | 版本号更新 |
402
- | changelogs/v1.1.4.md | 500 | 0 | 新增详细变更文档 |
403
-
404
- ### 文档完整性
405
-
406
- - ✅ 多语言文档覆盖: 100%
407
- - ✅ API 文档完整性: 100%
408
- - ✅ 示例代码数量: 15+
409
- - ✅ 测试用例数量: 921
410
-
411
- ---
412
-
413
- ## 🙏 致谢
414
-
415
- 感谢 monSQLize 项目发现并报告类型定义问题。
416
-
417
- ---
418
-
419
- ## 🔗 相关链接
420
-
421
- - [GitHub Repository](https://github.com/vextjs/schema-dsl)
422
- - [npm Package](https://www.npmjs.com/package/schema-dsl)
423
- - [完整文档](./docs/INDEX.md)
424
- - [运行时多语言支持](./docs/runtime-locale-support.md)
425
- - [多语言用户指南](./docs/i18n-user-guide.md)
426
-
427
- ---
428
-
429
- **发布者**: schema-dsl Team
430
- **发布时间**: 2026-01-13
431
- **下一版本**: v1.1.5 (计划中)
432
-