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/CONTRIBUTING.md DELETED
@@ -1,368 +0,0 @@
1
- # 贡献指南
2
-
3
- 感谢您对 schema-dsl 的关注!我们欢迎所有形式的贡献。
4
-
5
- ---
6
-
7
- ## 📋 目录
8
-
9
- - [行为准则](#行为准则)
10
- - [如何贡献](#如何贡献)
11
- - [开发流程](#开发流程)
12
- - [代码规范](#代码规范)
13
- - [提交规范](#提交规范)
14
- - [测试要求](#测试要求)
15
-
16
- ---
17
-
18
- ## 行为准则
19
-
20
- 请遵守我们的行为准则,保持尊重和友好的交流环境。
21
-
22
- ---
23
-
24
- ## 如何贡献
25
-
26
- ### 报告 Bug
27
-
28
- 发现 Bug?请[创建 Issue](https://github.com/vextjs/schema-dsl/issues),并提供以下信息:
29
-
30
- - **环境信息**: Node.js 版本、操作系统
31
- - **重现步骤**: 详细的步骤描述
32
- - **期望行为**: 您期望发生什么
33
- - **实际行为**: 实际发生了什么
34
- - **错误信息**: 完整的错误堆栈
35
-
36
- **示例**:
37
- ```markdown
38
- ### 环境
39
- - Node.js: v18.0.0
40
- - OS: Windows 11
41
-
42
- ### 重现步骤
43
- 1. 运行 `const schema = dsl('string:3-32!')`
44
- 2. 验证数据 `validator.validate(schema, 'ab')`
45
- 3. 期望返回验证失败,但返回成功
46
-
47
- ### 期望行为
48
- 应该验证失败,因为长度小于3
49
-
50
- ### 实际行为
51
- 验证通过
52
-
53
- ### 错误信息
54
- 无错误信息
55
- ```
56
-
57
- ### 提出功能请求
58
-
59
- 有好的想法?请[创建 Feature Request](https://github.com/vextjs/schema-dsl/issues),说明:
60
-
61
- - **功能描述**: 您想要什么功能
62
- - **使用场景**: 这个功能解决什么问题
63
- - **期望API**: 您期望的API设计
64
- - **替代方案**: 是否有替代方案
65
-
66
- ### 提交代码
67
-
68
- 1. Fork 本仓库
69
- 2. 创建功能分支 (`git checkout -b feature/amazing-feature`)
70
- 3. 提交更改 (`git commit -m 'feat: add amazing feature'`)
71
- 4. 推送到分支 (`git push origin feature/amazing-feature`)
72
- 5. 创建 Pull Request
73
-
74
- ---
75
-
76
- ## 开发流程
77
-
78
- ### 1. 克隆仓库
79
-
80
- ```bash
81
- git clone https://github.com/vextjs/schema-dsl.git
82
- cd schema-dsl
83
- ```
84
-
85
- ### 2. 安装依赖
86
-
87
- ```bash
88
- npm install
89
- ```
90
-
91
- ### 3. 运行测试
92
-
93
- ```bash
94
- # 运行单元测试
95
- npm test
96
-
97
- # 运行集成测试
98
- npm run test:integration
99
-
100
- # 运行所有测试
101
- npm run test:all
102
-
103
- # 生成覆盖率报告
104
- npm run coverage
105
- ```
106
-
107
- ### 4. 运行示例
108
-
109
- ```bash
110
- # 运行 Joi 风格示例
111
- node examples/joi-style.js
112
-
113
- # 运行 DSL 风格示例
114
- node examples/dsl-style.js
115
-
116
- # 运行导出示例
117
- node examples/export-demo.js
118
- ```
119
-
120
- ### 5. 代码检查
121
-
122
- ```bash
123
- npm run lint
124
- ```
125
-
126
- ### 6. 提交代码
127
-
128
- 请遵循[提交规范](#提交规范)。
129
-
130
- ---
131
-
132
- ## 代码规范
133
-
134
- ### 命名规范
135
-
136
- - **变量/函数**: camelCase(`userName`, `getUserName`)
137
- - **类**: PascalCase(`Validator`, `JSONSchemaCore`)
138
- - **常量**: UPPER_SNAKE_CASE(`MAX_LENGTH`, `DEFAULT_VALUE`)
139
- - **私有方法**: 前缀下划线(`_internalMethod`)
140
-
141
- ### 代码风格
142
-
143
- - 使用 2 空格缩进
144
- - 字符串使用单引号 `'`
145
- - 分号结尾
146
- - 每行最多 100 字符
147
- - 函数最多 50 行
148
-
149
- ### 注释规范
150
-
151
- 使用 JSDoc 注释:
152
-
153
- ```javascript
154
- /**
155
- * 验证数据
156
- *
157
- * @param {Object} schema - JSON Schema 对象
158
- * @param {*} data - 待验证的数据
159
- * @param {Object} options - 验证选项
160
- * @returns {Object} 验证结果
161
- *
162
- * @example
163
- * const result = validator.validate(schema, data);
164
- */
165
- validate(schema, data, options = {}) {
166
- // 实现...
167
- }
168
- ```
169
-
170
- ### 错误处理
171
-
172
- 必须包含错误处理:
173
-
174
- ```javascript
175
- try {
176
- // 可能抛出错误的代码
177
- const result = dangerousOperation();
178
- return result;
179
- } catch (error) {
180
- // 记录错误
181
- console.error('Operation failed:', error);
182
- // 抛出或返回错误
183
- throw new Error(`Operation failed: ${error.message}`);
184
- }
185
- ```
186
-
187
- ---
188
-
189
- ## 提交规范
190
-
191
- ### Git 忽略规则
192
-
193
- 以下目录包含 AI 生成的临时文件或本地报告,**不应提交到 Git**:
194
-
195
- - `plans/`: 需求分析、设计方案、技术规划文档
196
- - `reports/`: 执行报告、分析报告、审计日志
197
- - `.temp/`: 临时状态文件
198
-
199
- 请确保您的 `.gitignore` 文件包含以上目录。
200
-
201
- 使用 [Conventional Commits](https://www.conventionalcommits.org/) 规范。
202
-
203
- ### 提交类型
204
-
205
- - `feat`: 新功能
206
- - `fix`: Bug修复
207
- - `docs`: 文档更新
208
- - `style`: 代码格式调整(不影响功能)
209
- - `refactor`: 代码重构
210
- - `perf`: 性能优化
211
- - `test`: 测试相关
212
- - `chore`: 构建/工具相关
213
-
214
- ### 提交格式
215
-
216
- ```
217
- <type>(<scope>): <subject>
218
-
219
- <body>
220
-
221
- <footer>
222
- ```
223
-
224
- **示例**:
225
-
226
- ```
227
- feat(validator): add batch validation support
228
-
229
- Add validateBatch() method to validate multiple data items at once.
230
- This improves performance when validating large datasets.
231
-
232
- Closes #123
233
- ```
234
-
235
- ```
236
- fix(dsl): fix enum parsing with spaces
237
-
238
- Fixed issue where enum values with spaces were not trimmed correctly.
239
-
240
- Before: ['a ', ' b', ' c']
241
- After: ['a', 'b', 'c']
242
-
243
- Fixes #456
244
- ```
245
-
246
- ### Scope 说明
247
-
248
- - `core`: 核心类(JSONSchemaCore, Validator)
249
- - `adapters`: 适配器(Joi, DSL)
250
- - `exporters`: 导出器(MongoDB, MySQL, PostgreSQL)
251
- - `validators`: 验证器扩展
252
- - `utils`: 工具函数
253
- - `docs`: 文档
254
- - `tests`: 测试
255
-
256
- ---
257
-
258
- ## 测试要求
259
-
260
- ### 单元测试
261
-
262
- 每个新功能必须包含单元测试:
263
-
264
- ```javascript
265
- describe('新功能', () => {
266
- it('应该正常工作', () => {
267
- const result = newFeature();
268
- expect(result).to.equal(expectedValue);
269
- });
270
-
271
- it('应该处理边界情况', () => {
272
- expect(() => newFeature(null)).to.throw();
273
- });
274
- });
275
- ```
276
-
277
- ### 测试覆盖率
278
-
279
- - **目标覆盖率**: ≥ 80%
280
- - **核心功能**: ≥ 90%
281
- - **工具函数**: ≥ 70%
282
-
283
- ### 运行测试
284
-
285
- ```bash
286
- # 快速测试
287
- npm test
288
-
289
- # 完整测试+覆盖率
290
- npm run coverage
291
- ```
292
-
293
- ---
294
-
295
- ## Pull Request 流程
296
-
297
- ### 1. 创建 PR
298
-
299
- - 标题清晰描述更改
300
- - 详细说明更改内容
301
- - 关联相关 Issue
302
- - 提供测试结果
303
-
304
- ### 2. PR 检查清单
305
-
306
- - [ ] 代码通过所有测试
307
- - [ ] 添加了新的测试
308
- - [ ] 更新了相关文档
309
- - [ ] 遵循代码规范
310
- - [ ] 提交信息符合规范
311
- - [ ] 无合并冲突
312
-
313
- ### 3. 代码审查
314
-
315
- 维护者会审查您的代码,可能会:
316
-
317
- - 提出修改建议
318
- - 请求补充测试
319
- - 讨论实现方案
320
-
321
- 请耐心等待并积极响应反馈。
322
-
323
- ### 4. 合并
324
-
325
- 通过审查后,维护者会合并您的 PR。
326
-
327
- ---
328
-
329
- ## 开发技巧
330
-
331
- ### 调试
332
-
333
- 使用 Node.js 调试器:
334
-
335
- ```bash
336
- node inspect examples/joi-style.js
337
- ```
338
-
339
- 或使用 VSCode 调试配置。
340
-
341
- ### 性能测试
342
-
343
- ```bash
344
- node test/benchmarks/validation-speed.js
345
- ```
346
-
347
- ### 文档预览
348
-
349
- 更新文档后,可以使用 Markdown 预览工具查看效果。
350
-
351
- ---
352
-
353
- ## 获取帮助
354
-
355
- - **提问**: [GitHub Discussions](https://github.com/vextjs/schema-dsl/discussions)
356
- - **Bug 报告**: [GitHub Issues](https://github.com/vextjs/schema-dsl/issues)
357
- - **邮件**: rockyshi1993@gmail.com
358
-
359
- ---
360
-
361
- ## 许可证
362
-
363
- 贡献代码即表示您同意将代码以 [MIT](LICENSE) 许可证发布。
364
-
365
- ---
366
-
367
- **感谢您的贡献!** 🎉
368
-