schema-dsl 2.0.0 → 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 (145) hide show
  1. package/CHANGELOG.md +130 -113
  2. package/LICENSE +21 -21
  3. package/README.md +628 -628
  4. package/dist/{DslBuilder-DkLaOo9Q.d.ts → DslBuilder-BIgQOAXp.d.ts} +2 -0
  5. package/dist/{DslBuilder-DQDN0ZxZ.d.cts → DslBuilder-CjHTucNQ.d.cts} +2 -0
  6. package/dist/{Validator-hFWKGxir.d.ts → Validator-CllRdrY0.d.ts} +1 -1
  7. package/dist/{Validator-C7GsVQOH.d.cts → Validator-D6okG9tr.d.cts} +1 -1
  8. package/dist/index.cjs +75 -29
  9. package/dist/index.d.cts +10 -4
  10. package/dist/index.d.ts +10 -4
  11. package/dist/index.js +75 -29
  12. package/dist/plugins/custom-format.cjs +33 -17
  13. package/dist/plugins/custom-format.d.cts +1 -1
  14. package/dist/plugins/custom-format.d.ts +1 -1
  15. package/dist/plugins/custom-format.js +33 -17
  16. package/dist/plugins/custom-type-example.cjs +33 -17
  17. package/dist/plugins/custom-type-example.d.cts +1 -1
  18. package/dist/plugins/custom-type-example.d.ts +1 -1
  19. package/dist/plugins/custom-type-example.js +33 -17
  20. package/dist/plugins/custom-validator.cjs +0 -2
  21. package/dist/plugins/custom-validator.d.cts +1 -1
  22. package/dist/plugins/custom-validator.d.ts +1 -1
  23. package/dist/plugins/custom-validator.js +0 -2
  24. package/docs/FEATURE-INDEX.md +553 -553
  25. package/docs/add-custom-locale.md +496 -496
  26. package/docs/add-keyword.md +24 -24
  27. package/docs/api-reference.md +1047 -1047
  28. package/docs/api.md +13 -13
  29. package/docs/best-practices-project-structure.md +417 -417
  30. package/docs/best-practices.md +712 -712
  31. package/docs/cache-manager.md +344 -344
  32. package/docs/compile.md +45 -45
  33. package/docs/conditional-api.md +1307 -1307
  34. package/docs/custom-extensions-guide.md +339 -339
  35. package/docs/design-philosophy.md +606 -606
  36. package/docs/doc-index.md +324 -324
  37. package/docs/dsl-syntax.md +714 -714
  38. package/docs/dynamic-locale.md +608 -608
  39. package/docs/enum.md +482 -482
  40. package/docs/error-handling.md +1975 -1975
  41. package/docs/export-guide.md +501 -501
  42. package/docs/export-limitations.md +567 -567
  43. package/docs/faq.md +596 -596
  44. package/docs/frontend-i18n-guide.md +307 -307
  45. package/docs/i18n-user-guide.md +487 -487
  46. package/docs/i18n.md +476 -476
  47. package/docs/index.md +48 -48
  48. package/docs/json-schema-basics.md +40 -40
  49. package/docs/label-vs-description.md +271 -271
  50. package/docs/markdown-exporter.md +406 -406
  51. package/docs/mongodb-exporter.md +302 -302
  52. package/docs/multi-language.md +26 -26
  53. package/docs/multi-type-support.md +322 -322
  54. package/docs/mysql-exporter.md +280 -280
  55. package/docs/number-operators.md +449 -449
  56. package/docs/optional-marker-guide.md +326 -326
  57. package/docs/performance-guide.md +49 -49
  58. package/docs/plugin-system.md +381 -381
  59. package/docs/plugin-type-registration.md +34 -34
  60. package/docs/postgresql-exporter.md +311 -311
  61. package/docs/public/favicon.svg +4 -4
  62. package/docs/quick-start.md +435 -435
  63. package/docs/runtime-locale-support.md +532 -532
  64. package/docs/schema-helper.md +345 -345
  65. package/docs/schema-utils-advanced-issues.md +23 -23
  66. package/docs/schema-utils-best-practices.md +20 -20
  67. package/docs/schema-utils-chaining.md +150 -150
  68. package/docs/schema-utils.md +524 -524
  69. package/docs/security-checklist.md +20 -20
  70. package/docs/string-extensions.md +488 -488
  71. package/docs/troubleshooting.md +486 -486
  72. package/docs/type-converter.md +310 -310
  73. package/docs/type-reference.md +242 -242
  74. package/docs/typescript-guide.md +584 -584
  75. package/docs/union-type-guide.md +157 -157
  76. package/docs/union-types.md +284 -284
  77. package/docs/validate-async.md +491 -491
  78. package/docs/validate-batch.md +49 -49
  79. package/docs/validate-dsl-object-support.md +578 -578
  80. package/docs/validate.md +506 -506
  81. package/docs/validation-guide.md +502 -502
  82. package/docs/validator.md +39 -39
  83. package/package.json +131 -131
  84. package/plugins/custom-format.cjs +8 -8
  85. package/plugins/custom-type-example.cjs +8 -8
  86. package/plugins/custom-validator.cjs +8 -8
  87. package/src/adapters/DslAdapter.ts +111 -111
  88. package/src/adapters/index.ts +1 -1
  89. package/src/config/constants.ts +83 -83
  90. package/src/config/index.ts +2 -2
  91. package/src/config/patterns.ts +77 -77
  92. package/src/core/CacheManager.ts +169 -159
  93. package/src/core/ConditionalBuilder.ts +382 -382
  94. package/src/core/ConditionalRuntime.ts +27 -27
  95. package/src/core/ConditionalValidator.ts +254 -254
  96. package/src/core/DslBuilder.ts +687 -677
  97. package/src/core/ErrorCodes.ts +38 -38
  98. package/src/core/ErrorFormatter.ts +271 -271
  99. package/src/core/JSONSchemaCore.ts +65 -65
  100. package/src/core/Locale.ts +187 -187
  101. package/src/core/MessageTemplate.ts +42 -42
  102. package/src/core/ObjectDslBuilder.ts +64 -64
  103. package/src/core/PluginManager.ts +326 -326
  104. package/src/core/StringExtensions.ts +140 -140
  105. package/src/core/TemplateEngine.ts +44 -44
  106. package/src/core/Validator.ts +448 -448
  107. package/src/errors/I18nError.ts +159 -159
  108. package/src/errors/ValidationError.ts +105 -105
  109. package/src/exporters/BaseExporter.ts +60 -60
  110. package/src/exporters/MarkdownExporter.ts +305 -305
  111. package/src/exporters/MongoDBExporter.ts +126 -126
  112. package/src/exporters/MySQLExporter.ts +156 -155
  113. package/src/exporters/PostgreSQLExporter.ts +222 -222
  114. package/src/exporters/index.ts +18 -18
  115. package/src/index.ts +651 -633
  116. package/src/locales/en-US.ts +160 -160
  117. package/src/locales/es-ES.ts +160 -160
  118. package/src/locales/fr-FR.ts +160 -160
  119. package/src/locales/index.ts +103 -103
  120. package/src/locales/ja-JP.ts +160 -160
  121. package/src/locales/types.ts +156 -156
  122. package/src/locales/zh-CN.ts +160 -160
  123. package/src/parser/ConstraintParser.ts +101 -101
  124. package/src/parser/DslParser.ts +470 -470
  125. package/src/parser/SchemaCompiler.ts +66 -66
  126. package/src/parser/TypeRegistry.ts +250 -250
  127. package/src/parser/index.ts +6 -6
  128. package/src/plugins/custom-format.ts +124 -126
  129. package/src/plugins/custom-type-example.ts +106 -108
  130. package/src/plugins/custom-validator.ts +138 -140
  131. package/src/types/conditional.ts +28 -28
  132. package/src/types/config.ts +59 -59
  133. package/src/types/dsl.ts +131 -131
  134. package/src/types/error.ts +60 -60
  135. package/src/types/index.ts +17 -17
  136. package/src/types/infer.ts +127 -127
  137. package/src/types/plugin.ts +58 -58
  138. package/src/types/safe-regex.d.ts +9 -9
  139. package/src/types/schema.ts +66 -66
  140. package/src/types/validate.ts +71 -71
  141. package/src/utils/SchemaHelper.ts +196 -196
  142. package/src/utils/SchemaUtils.ts +365 -346
  143. package/src/utils/TypeConverter.ts +215 -215
  144. package/src/utils/index.ts +10 -10
  145. package/src/validators/CustomKeywords.ts +477 -477
@@ -1,302 +1,302 @@
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
-
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
+
@@ -1,26 +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
-
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
+