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,295 +1,302 @@
1
- # MongoDB 导出器文档
2
-
3
- > **模块**: `lib/exporters/MongoDBExporter.js`
4
-
5
- > **用途**: 将 JSON Schema 转换为 MongoDB 验证 Schema
6
-
7
- ---
8
-
9
- ## 📑 目录
10
-
11
- - [概述](#概述)
12
- - [快速开始](#快速开始)
13
- - [API 参考](#api-参考)
14
- - [配置选项](#配置选项)
15
- - [完整示例](#完整示例)
16
- - [类型映射](#类型映射)
17
-
18
- ---
19
-
20
- ## 概述
21
-
22
- `MongoDBExporter` 将 SchemaI-DSL 生成的 JSON Schema 转换为 MongoDB 的 `$jsonSchema` 验证格式,可直接用于创建集合时的文档验证。
23
-
24
- ### 核心功能
25
-
26
- - ✅ 转换为 MongoDB `$jsonSchema` 格式
27
- - ✅ 自动映射类型为 BSON 类型
28
- - ✅ 保留所有约束条件
29
- - ✅ 生成 `createCollection` 命令
30
- - ✅ 支持严格/宽松验证模式
31
-
32
- ---
33
-
34
- ## 快速开始
35
-
36
- ```javascript
37
- const { dsl, exporters } = require('schema-dsl');
38
-
39
- // 1. 定义 Schema
40
- const userSchema = dsl({
41
- username: 'string:3-32!',
42
- email: 'email!',
43
- age: 'number:18-120'
44
- });
45
-
46
- // 2. 创建导出器
47
- const exporter = new exporters.MongoDBExporter();
48
-
49
- // 3. 导出为 MongoDB Schema
50
- const mongoSchema = exporter.export(userSchema);
51
- console.log(JSON.stringify(mongoSchema, null, 2));
52
- ```
53
-
54
- **输出**:
55
-
56
- ```json
57
- {
58
- "$jsonSchema": {
59
- "bsonType": "object",
60
- "required": ["username", "email"],
61
- "properties": {
62
- "username": {
63
- "bsonType": "string",
64
- "minLength": 3,
65
- "maxLength": 32
66
- },
67
- "email": {
68
- "bsonType": "string"
69
- },
70
- "age": {
71
- "bsonType": "double",
72
- "minimum": 18,
73
- "maximum": 120
74
- }
75
- }
76
- }
77
- }
78
- ```
79
-
80
- ---
81
-
82
- ## API 参考
83
-
84
- ### 构造函数
85
-
86
- ```javascript
87
- new MongoDBExporter(options)
88
- ```
89
-
90
- **参数**:
91
-
92
- | 参数 | 类型 | 默认值 | 说明 |
93
- |------|------|--------|------|
94
- | `options.strict` | boolean | `false` | 是否使用严格验证模式 |
95
-
96
- ### 方法
97
-
98
- #### `export(jsonSchema)`
99
-
100
- 将 JSON Schema 转换为 MongoDB 验证 Schema。
101
-
102
- ```javascript
103
- const mongoSchema = exporter.export(jsonSchema);
104
- ```
105
-
106
- **参数**:
107
- - `jsonSchema` (Object): SchemaI-DSL 生成的 JSON Schema 对象
108
-
109
- **返回值**:
110
- - `Object`: 包含 `$jsonSchema` 的 MongoDB 验证对象
111
-
112
- ---
113
-
114
- #### `generateCreateCommand(collectionName, jsonSchema)`
115
-
116
- 生成 `createCollection` 命令对象。
117
-
118
- ```javascript
119
- const command = exporter.generateCreateCommand('users', userSchema);
120
- ```
121
-
122
- **参数**:
123
- - `collectionName` (string): 集合名称
124
- - `jsonSchema` (Object): JSON Schema 对象
125
-
126
- **返回值**:
127
-
128
- ```javascript
129
- {
130
- collectionName: 'users',
131
- options: {
132
- validator: { $jsonSchema: {...} },
133
- validationLevel: 'moderate', // 或 'strict'
134
- validationAction: 'error'
135
- }
136
- }
137
- ```
138
-
139
- ---
140
-
141
- #### `generateCommand(collectionName, jsonSchema)`
142
-
143
- 生成可执行的 MongoDB 命令字符串。
144
-
145
- ```javascript
146
- const commandStr = exporter.generateCommand('users', userSchema);
147
- console.log(commandStr);
148
- ```
149
-
150
- **输出**:
151
-
152
- ```javascript
153
- db.createCollection("users", {
154
- "validator": {
155
- "$jsonSchema": {
156
- "bsonType": "object",
157
- ...
158
- }
159
- },
160
- "validationLevel": "moderate",
161
- "validationAction": "error"
162
- })
163
- ```
164
-
165
- ---
166
-
167
- #### `MongoDBExporter.export(jsonSchema)` (静态方法)
168
-
169
- 快速导出,无需实例化。
170
-
171
- ```javascript
172
- const mongoSchema = exporters.MongoDBExporter.export(userSchema);
173
- ```
174
-
175
- ---
176
-
177
- ## 配置选项
178
-
179
- ### 验证模式
180
-
181
- | 模式 | 说明 |
182
- |------|------|
183
- | `strict: false` (默认) | `validationLevel: 'moderate'` - 只验证插入和更新操作中涉及的字段 |
184
- | `strict: true` | `validationLevel: 'strict'` - 验证所有插入和更新操作 |
185
-
186
- ```javascript
187
- // 严格模式
188
- const strictExporter = new exporters.MongoDBExporter({ strict: true });
189
- ```
190
-
191
- ---
192
-
193
- ## 完整示例
194
-
195
- ### 用户集合验证
196
-
197
- ```javascript
198
- const { dsl, exporters } = require('schema-dsl');
199
-
200
- // 定义复杂用户 Schema
201
- const userSchema = dsl({
202
- _id: 'string!',
203
- username: 'string:3-32!'
204
- .pattern(/^[a-zA-Z0-9_]+$/)
205
- .label('用户名'),
206
- email: 'email!'.label('邮箱'),
207
- profile: {
208
- bio: 'string:500',
209
- avatar: 'url'
210
- },
211
- status: 'active|inactive|banned',
212
- createdAt: 'datetime!'
213
- });
214
-
215
- // 导出并生成命令
216
- const exporter = new exporters.MongoDBExporter({ strict: true });
217
- const command = exporter.generateCommand('users', userSchema);
218
-
219
- console.log(command);
220
- ```
221
-
222
- ### 在 MongoDB 中使用
223
-
224
- ```javascript
225
- const { MongoClient } = require('mongodb');
226
-
227
- async function createValidatedCollection() {
228
- const client = new MongoClient('mongodb://localhost:27017');
229
- await client.connect();
230
-
231
- const db = client.db('myapp');
232
-
233
- // 获取验证 Schema
234
- const exporter = new exporters.MongoDBExporter({ strict: true });
235
- const { options } = exporter.generateCreateCommand('users', userSchema);
236
-
237
- // 创建带验证的集合
238
- await db.createCollection('users', options);
239
-
240
- console.log('集合创建成功,已启用文档验证');
241
- }
242
- ```
243
-
244
- ---
245
-
246
- ## 类型映射
247
-
248
- | JSON Schema 类型 | MongoDB BSON 类型 |
249
- |------------------|-------------------|
250
- | `string` | `string` |
251
- | `number` | `double` |
252
- | `integer` | `int` |
253
- | `boolean` | `bool` |
254
- | `object` | `object` |
255
- | `array` | `array` |
256
- | `null` | `null` |
257
-
258
- ### 约束映射
259
-
260
- | JSON Schema 约束 | MongoDB 约束 |
261
- |------------------|--------------|
262
- | `minLength` | `minLength` |
263
- | `maxLength` | `maxLength` |
264
- | `minimum` | `minimum` |
265
- | `maximum` | `maximum` |
266
- | `pattern` | `pattern` |
267
- | `enum` | `enum` |
268
- | `minItems` | `minItems` |
269
- | `maxItems` | `maxItems` |
270
-
271
- ---
272
-
273
- ## 导出限制
274
-
275
- ⚠️ **重要提示**: 并非所有 SchemaI-DSL 特性都能导出到数据库 Schema。
276
-
277
- **不支持导出的特性**:
278
- - ❌ 条件验证逻辑(`dsl.match()`, `dsl.if()`)
279
- - ❌ 自定义验证器(`.custom()`)
280
- - ❌ 复杂 JSON Schema 关键字(`allOf`, `anyOf`, `oneOf`)
281
- - ❌ 自定义错误消息(`.messages()`)
282
-
283
- **详细说明**: 请阅读 [导出限制说明文档](export-limitations.md)
284
-
285
- ---
286
-
287
- ## 相关文档
288
-
289
- - [数据库导出指南](export-guide.md)
290
- - [MySQL 导出器](mysql-exporter.md)
291
- - [PostgreSQL 导出器](postgresql-exporter.md)
292
- - [TypeConverter](type-converter.md)
293
- - [**导出限制说明**](export-limitations.md) ⚠️
294
-
295
-
1
+ # MongoDB 导出器文档
2
+
3
+ > **模块**: `src/exporters/MongoDBExporter.ts`
4
+
5
+ > **用途**: 将 JSON Schema 转换为 MongoDB 验证 Schema
6
+
7
+ ---
8
+
9
+ ## 📑 目录
10
+
11
+ - [概述](#概述)
12
+ - [快速开始](#快速开始)
13
+ - [API 参考](#api-参考)
14
+ - [配置选项](#配置选项)
15
+ - [完整示例](#完整示例)
16
+ - [类型映射](#类型映射)
17
+
18
+ ---
19
+
20
+ ## 概述
21
+
22
+ `MongoDBExporter` 将 schema-dsl 生成的 JSON Schema 转换为 MongoDB 的 `$jsonSchema` 验证格式,可直接用于创建集合时的文档验证。
23
+
24
+ ### 核心功能
25
+
26
+ - ✅ 转换为 MongoDB `$jsonSchema` 格式
27
+ - ✅ 自动映射类型为 BSON 类型
28
+ - ✅ 保留所有约束条件
29
+ - ✅ 生成 `createCollection` 命令
30
+ - ✅ 支持严格/宽松验证模式
31
+
32
+ ---
33
+
34
+ ## 快速开始
35
+
36
+ ```javascript
37
+ const { dsl, exporters } = require('schema-dsl');
38
+
39
+ // 1. 定义 Schema
40
+ const userSchema = dsl({
41
+ username: 'string:3-32!',
42
+ email: 'email!',
43
+ age: 'number:18-120'
44
+ });
45
+
46
+ // 2. 创建导出器
47
+ const exporter = new exporters.MongoDBExporter();
48
+
49
+ // 3. 导出为 MongoDB Schema
50
+ const mongoSchema = exporter.export(userSchema);
51
+ console.log(JSON.stringify(mongoSchema, null, 2));
52
+ ```
53
+
54
+ **输出**:
55
+
56
+ ```json
57
+ {
58
+ "$jsonSchema": {
59
+ "bsonType": "object",
60
+ "required": ["username", "email"],
61
+ "properties": {
62
+ "username": {
63
+ "bsonType": "string",
64
+ "minLength": 3,
65
+ "maxLength": 32
66
+ },
67
+ "email": {
68
+ "bsonType": "string"
69
+ },
70
+ "age": {
71
+ "bsonType": "double",
72
+ "minimum": 18,
73
+ "maximum": 120
74
+ }
75
+ }
76
+ }
77
+ }
78
+ ```
79
+
80
+ ---
81
+
82
+ ## API 参考
83
+
84
+ ### 构造函数
85
+
86
+ ```javascript
87
+ new MongoDBExporter(options)
88
+ ```
89
+
90
+ **参数**:
91
+
92
+ | 参数 | 类型 | 默认值 | 说明 |
93
+ |------|------|--------|------|
94
+ | `options.strict` | boolean | `false` | 是否使用严格验证模式 |
95
+
96
+ ### 方法
97
+
98
+ #### `export(jsonSchema)`
99
+
100
+ 将 JSON Schema 转换为 MongoDB 验证 Schema。
101
+
102
+ ```javascript
103
+ const mongoSchema = exporter.export(jsonSchema);
104
+ ```
105
+
106
+ **参数**:
107
+ - `jsonSchema` (Object): schema-dsl 生成的 JSON Schema 对象
108
+
109
+ **返回值**:
110
+ - `Object`: 包含 `$jsonSchema` 的 MongoDB 验证对象
111
+
112
+ ---
113
+
114
+ #### `generateCreateCommand(collectionName, jsonSchema)`
115
+
116
+ 生成 `createCollection` 命令对象。
117
+
118
+ ```javascript
119
+ const command = exporter.generateCreateCommand('users', userSchema);
120
+ ```
121
+
122
+ **参数**:
123
+ - `collectionName` (string): 集合名称
124
+ - `jsonSchema` (Object): JSON Schema 对象
125
+
126
+ **返回值**:
127
+
128
+ ```javascript
129
+ {
130
+ collectionName: 'users',
131
+ options: {
132
+ validator: { $jsonSchema: {...} },
133
+ validationLevel: 'moderate', // 或 'strict'
134
+ validationAction: 'error'
135
+ }
136
+ }
137
+ ```
138
+
139
+ ---
140
+
141
+ #### `generateCommand(collectionName, jsonSchema)`
142
+
143
+ 生成可执行的 MongoDB 命令字符串。
144
+
145
+ ```javascript
146
+ const commandStr = exporter.generateCommand('users', userSchema);
147
+ console.log(commandStr);
148
+ ```
149
+
150
+ **输出**:
151
+
152
+ ```javascript
153
+ db.createCollection("users", {
154
+ "validator": {
155
+ "$jsonSchema": {
156
+ "bsonType": "object",
157
+ ...
158
+ }
159
+ },
160
+ "validationLevel": "moderate",
161
+ "validationAction": "error"
162
+ })
163
+ ```
164
+
165
+ ---
166
+
167
+ #### `MongoDBExporter.export(jsonSchema)` (静态方法)
168
+
169
+ 快速导出,无需实例化。
170
+
171
+ ```javascript
172
+ const mongoSchema = exporters.MongoDBExporter.export(userSchema);
173
+ ```
174
+
175
+ ---
176
+
177
+ ## 配置选项
178
+
179
+ ### 验证模式
180
+
181
+ | 模式 | 说明 |
182
+ |------|------|
183
+ | `strict: false` (默认) | `validationLevel: 'moderate'` - 只验证插入和更新操作中涉及的字段 |
184
+ | `strict: true` | `validationLevel: 'strict'` - 验证所有插入和更新操作 |
185
+
186
+ ```javascript
187
+ // 严格模式
188
+ const strictExporter = new exporters.MongoDBExporter({ strict: true });
189
+ ```
190
+
191
+ ---
192
+
193
+ ## 完整示例
194
+
195
+ ### 用户集合验证
196
+
197
+ ```javascript
198
+ const { dsl, exporters } = require('schema-dsl');
199
+
200
+ // 定义复杂用户 Schema
201
+ const userSchema = dsl({
202
+ _id: 'string!',
203
+ username: 'string:3-32!'
204
+ .pattern(/^[a-zA-Z0-9_]+$/)
205
+ .label('用户名'),
206
+ email: 'email!'.label('邮箱'),
207
+ profile: {
208
+ bio: 'string:500',
209
+ avatar: 'url'
210
+ },
211
+ status: 'active|inactive|banned',
212
+ createdAt: 'datetime!'
213
+ });
214
+
215
+ // 导出并生成命令
216
+ const exporter = new exporters.MongoDBExporter({ strict: true });
217
+ const command = exporter.generateCommand('users', userSchema);
218
+
219
+ console.log(command);
220
+ ```
221
+
222
+ ### 在 MongoDB 中使用
223
+
224
+ ```javascript
225
+ const { MongoClient } = require('mongodb');
226
+
227
+ async function createValidatedCollection() {
228
+ const client = new MongoClient('mongodb://localhost:27017');
229
+ await client.connect();
230
+
231
+ const db = client.db('myapp');
232
+
233
+ // 获取验证 Schema
234
+ const exporter = new exporters.MongoDBExporter({ strict: true });
235
+ const { options } = exporter.generateCreateCommand('users', userSchema);
236
+
237
+ // 创建带验证的集合
238
+ await db.createCollection('users', options);
239
+
240
+ console.log('集合创建成功,已启用文档验证');
241
+ }
242
+ ```
243
+
244
+ ---
245
+
246
+ ## 类型映射
247
+
248
+ | JSON Schema 类型 | MongoDB BSON 类型 |
249
+ |------------------|-------------------|
250
+ | `string` | `string` |
251
+ | `number` | `double` |
252
+ | `integer` | `int` |
253
+ | `boolean` | `bool` |
254
+ | `object` | `object` |
255
+ | `array` | `array` |
256
+ | `null` | `null` |
257
+
258
+ ### 约束映射
259
+
260
+ | JSON Schema 约束 | MongoDB 约束 |
261
+ |------------------|--------------|
262
+ | `minLength` | `minLength` |
263
+ | `maxLength` | `maxLength` |
264
+ | `minimum` | `minimum` |
265
+ | `maximum` | `maximum` |
266
+ | `pattern` | `pattern` |
267
+ | `enum` | `enum` |
268
+ | `minItems` | `minItems` |
269
+ | `maxItems` | `maxItems` |
270
+
271
+ ---
272
+
273
+ ## 导出限制
274
+
275
+ ⚠️ **重要提示**: 并非所有 schema-dsl 特性都能导出到数据库 Schema。
276
+
277
+ **不支持导出的特性**:
278
+ - ❌ 条件验证逻辑(`dsl.match()`, `dsl.if()`)
279
+ - ❌ 自定义验证器(`.custom()`)
280
+ - ❌ 复杂 JSON Schema 关键字(`allOf`, `anyOf`, `oneOf`)
281
+ - ❌ 自定义错误消息(`.messages()`)
282
+
283
+ **详细说明**: 请阅读 [导出限制说明文档](export-limitations.md)
284
+
285
+ ---
286
+
287
+ ## 相关文档
288
+
289
+ - [数据库导出指南](export-guide.md)
290
+ - [MySQL 导出器](mysql-exporter.md)
291
+ - [PostgreSQL 导出器](postgresql-exporter.md)
292
+ - [TypeConverter](type-converter.md)
293
+ - [**导出限制说明**](export-limitations.md) ⚠️
294
+
295
+ ---
296
+
297
+ ## 对应示例文件
298
+
299
+ **示例入口**: [mongodb-exporter.ts](https://github.com/vextjs/schema-dsl/blob/main/examples/docs/mongodb-exporter.ts)
300
+ **说明**: 覆盖 `$jsonSchema` 导出、`generateCreateCommand()` 和 `generateCommand()`,对应文档中的验证集合创建场景。
301
+
302
+
@@ -0,0 +1,26 @@
1
+ # 多语言支持
2
+
3
+ 多语言能力由 `Locale`、`dsl.config({ i18n })` 和验证选项 `locale` 提供。
4
+
5
+ 常见入口:
6
+
7
+ - 运行时切换默认语言:`Locale.setLocale('en-US')`
8
+ - 运行时补充语言包:`Locale.addLocale('en-US', messages)`
9
+ - 从目录扫描语言包:`dsl.config({ i18n: '/path/to/locales' })`
10
+ - 单次验证覆盖语言:`validator.validate(schema, data, { locale: 'en-US' })`
11
+
12
+ 当前 i18n 目录扫描支持这些语言包文件:`.js`、`.cjs`、`.json`、`.jsonc`、`.json5`。
13
+
14
+ 更多内容请见:
15
+
16
+ - [i18n.md](./i18n.md)
17
+ - [i18n-user-guide.md](./i18n-user-guide.md)
18
+ - [dynamic-locale.md](./dynamic-locale.md)
19
+
20
+ ---
21
+
22
+ ## 对应示例文件
23
+
24
+ **示例入口**: [multi-language.ts](https://github.com/vextjs/schema-dsl/blob/main/examples/docs/multi-language.ts)
25
+ **说明**: 展示默认语言、按次覆盖 `locale` 以及可用语言列表的最小运行时示例。
26
+