schema-dsl 2.3.0
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.
- package/.eslintignore +10 -0
- package/.eslintrc.json +27 -0
- package/.github/CODE_OF_CONDUCT.md +45 -0
- package/.github/ISSUE_TEMPLATE/bug_report.md +57 -0
- package/.github/ISSUE_TEMPLATE/config.yml +11 -0
- package/.github/ISSUE_TEMPLATE/feature_request.md +45 -0
- package/.github/ISSUE_TEMPLATE/question.md +31 -0
- package/.github/PULL_REQUEST_TEMPLATE.md +70 -0
- package/.github/SECURITY.md +184 -0
- package/.github/workflows/ci.yml +35 -0
- package/CHANGELOG.md +633 -0
- package/CONTRIBUTING.md +368 -0
- package/LICENSE +21 -0
- package/README.md +1122 -0
- package/STATUS.md +273 -0
- package/docs/FEATURE-INDEX.md +521 -0
- package/docs/INDEX.md +224 -0
- package/docs/api-reference.md +1098 -0
- package/docs/best-practices.md +672 -0
- package/docs/cache-manager.md +336 -0
- package/docs/design-philosophy.md +602 -0
- package/docs/dsl-syntax.md +654 -0
- package/docs/dynamic-locale.md +552 -0
- package/docs/error-handling.md +703 -0
- package/docs/export-guide.md +459 -0
- package/docs/faq.md +576 -0
- package/docs/frontend-i18n-guide.md +290 -0
- package/docs/i18n-user-guide.md +488 -0
- package/docs/label-vs-description.md +262 -0
- package/docs/markdown-exporter.md +398 -0
- package/docs/mongodb-exporter.md +279 -0
- package/docs/multi-type-support.md +319 -0
- package/docs/mysql-exporter.md +257 -0
- package/docs/plugin-system.md +542 -0
- package/docs/postgresql-exporter.md +290 -0
- package/docs/quick-start.md +761 -0
- package/docs/schema-helper.md +340 -0
- package/docs/schema-utils.md +492 -0
- package/docs/string-extensions.md +480 -0
- package/docs/troubleshooting.md +471 -0
- package/docs/type-converter.md +319 -0
- package/docs/type-reference.md +219 -0
- package/docs/validate.md +486 -0
- package/docs/validation-guide.md +484 -0
- package/examples/array-dsl-example.js +227 -0
- package/examples/custom-extension.js +85 -0
- package/examples/dsl-match-example.js +74 -0
- package/examples/dsl-style.js +118 -0
- package/examples/dynamic-locale-configuration.js +348 -0
- package/examples/dynamic-locale-example.js +287 -0
- package/examples/export-demo.js +130 -0
- package/examples/i18n-full-demo.js +310 -0
- package/examples/i18n-memory-safety.examples.js +268 -0
- package/examples/markdown-export.js +71 -0
- package/examples/middleware-usage.js +93 -0
- package/examples/password-reset/README.md +153 -0
- package/examples/password-reset/schema.js +26 -0
- package/examples/password-reset/test.js +101 -0
- package/examples/plugin-system.examples.js +205 -0
- package/examples/simple-example.js +122 -0
- package/examples/string-extensions.js +297 -0
- package/examples/user-registration/README.md +156 -0
- package/examples/user-registration/routes.js +92 -0
- package/examples/user-registration/schema.js +150 -0
- package/examples/user-registration/server.js +74 -0
- package/index.d.ts +1999 -0
- package/index.js +270 -0
- package/index.mjs +30 -0
- package/lib/adapters/DslAdapter.js +653 -0
- package/lib/adapters/index.js +20 -0
- package/lib/config/constants.js +286 -0
- package/lib/config/patterns/creditCard.js +9 -0
- package/lib/config/patterns/idCard.js +9 -0
- package/lib/config/patterns/index.js +8 -0
- package/lib/config/patterns/licensePlate.js +4 -0
- package/lib/config/patterns/passport.js +4 -0
- package/lib/config/patterns/phone.js +9 -0
- package/lib/config/patterns/postalCode.js +5 -0
- package/lib/core/CacheManager.js +376 -0
- package/lib/core/DslBuilder.js +740 -0
- package/lib/core/ErrorCodes.js +233 -0
- package/lib/core/ErrorFormatter.js +342 -0
- package/lib/core/JSONSchemaCore.js +347 -0
- package/lib/core/Locale.js +119 -0
- package/lib/core/MessageTemplate.js +89 -0
- package/lib/core/PluginManager.js +448 -0
- package/lib/core/StringExtensions.js +209 -0
- package/lib/core/Validator.js +316 -0
- package/lib/exporters/MarkdownExporter.js +420 -0
- package/lib/exporters/MongoDBExporter.js +162 -0
- package/lib/exporters/MySQLExporter.js +212 -0
- package/lib/exporters/PostgreSQLExporter.js +289 -0
- package/lib/exporters/index.js +24 -0
- package/lib/locales/en-US.js +65 -0
- package/lib/locales/es-ES.js +66 -0
- package/lib/locales/fr-FR.js +66 -0
- package/lib/locales/index.js +8 -0
- package/lib/locales/ja-JP.js +66 -0
- package/lib/locales/zh-CN.js +93 -0
- package/lib/utils/LRUCache.js +174 -0
- package/lib/utils/SchemaHelper.js +240 -0
- package/lib/utils/SchemaUtils.js +313 -0
- package/lib/utils/TypeConverter.js +245 -0
- package/lib/utils/index.js +13 -0
- package/lib/validators/CustomKeywords.js +203 -0
- package/lib/validators/index.js +11 -0
- package/package.json +70 -0
- package/plugins/custom-format.js +101 -0
- package/plugins/custom-validator.js +200 -0
package/STATUS.md
ADDED
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
# schema-dsl 项目状态
|
|
2
|
+
|
|
3
|
+
> **最后更新**: 2025-12-29
|
|
4
|
+
> **当前版本**: v2.3.0
|
|
5
|
+
> **项目状态**: ✅ 全部完成,测试100%通过
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 📋 目录
|
|
10
|
+
|
|
11
|
+
- [v2.3.0](#v230) - 2025-12-29 ✅ 已完成
|
|
12
|
+
- [v2.2.0](#v220) - 2025-12-29 ✅ 已完成
|
|
13
|
+
- [v2.1.3](#v213) - 2025-12-26 ✅ 已完成
|
|
14
|
+
- [v2.1.2](#v212) - 2025-12-26 ✅ 已完成
|
|
15
|
+
- [v2.1.1](#v211) - 2025-12-25 ✅ 已完成
|
|
16
|
+
- [v2.1.0](#v210) - 2025-12-25 ✅ 已完成
|
|
17
|
+
- [v2.0.1](#v201) - 2025-12-25 ✅ 已完成
|
|
18
|
+
- [v1.0.0](#v100) - 2025-12-24 ✅ 已完成
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## 版本发布计划
|
|
23
|
+
|
|
24
|
+
### v2.3.0
|
|
25
|
+
|
|
26
|
+
**发布日期**: 2025-12-29
|
|
27
|
+
**状态**: ✅ 已完成
|
|
28
|
+
**进度**: 100%完成 | 测试: 150+/150+ passing (100%) | 覆盖率: >90%
|
|
29
|
+
|
|
30
|
+
| 需求标题 | 状态 | 优先级 | 详细 |
|
|
31
|
+
|---------|------|--------|------|
|
|
32
|
+
| 用户自定义语言包配置 | ✅ 完成 | P1 | dsl.config() 支持 i18n 配置 |
|
|
33
|
+
| 从目录加载语言包 | ✅ 完成 | P1 | 支持 localesPath 配置 |
|
|
34
|
+
| 从对象加载语言包 | ✅ 完成 | P1 | 支持 locales 对象传入 |
|
|
35
|
+
| 动态缓存配置 | ✅ 完成 | P1 | dsl.config() 支持 cache 配置 |
|
|
36
|
+
| 缓存配置优化 | ✅ 完成 | P1 | SCHEMA_CACHE 5000, REGEX_CACHE 500 |
|
|
37
|
+
| 完整使用示例 | ✅ 完成 | P2 | examples/i18n-full-demo.js |
|
|
38
|
+
| 用户指南文档 | ✅ 完成 | P2 | docs/i18n-user-guide.md |
|
|
39
|
+
| 测试用例编写 | ✅ 完成 | P1 | test/unit/dsl-config.test.js (8个测试) |
|
|
40
|
+
|
|
41
|
+
**实现状态统计**:
|
|
42
|
+
- ✅ 完成: 8个
|
|
43
|
+
- 🔄 进行中: 0个
|
|
44
|
+
- ⏳ 待完成: 0个
|
|
45
|
+
|
|
46
|
+
**重大改进**:
|
|
47
|
+
- 🎉 **用户自定义语言包**: 支持完整的多语言配置,前端可动态切换语言
|
|
48
|
+
- ⚡ **性能提升**: 大型项目性能提升 3倍,超大型项目提升 5-10倍
|
|
49
|
+
- 🔧 **灵活配置**: 支持从目录或对象加载语言包,支持动态缓存配置
|
|
50
|
+
- 📚 **完善文档**: 新增完整的用户指南和示例代码
|
|
51
|
+
- ✅ **质量保证**: 三轮验证全部通过,测试覆盖率 >90%
|
|
52
|
+
|
|
53
|
+
**性能数据**:
|
|
54
|
+
| 项目规模 | Schema数 | 性能提升 | 内存增加 |
|
|
55
|
+
|---------|----------|---------|---------|
|
|
56
|
+
| 小型 | < 100 | 无变化 | 无变化 |
|
|
57
|
+
| 中型 | 100-1000 | 无变化 | 无变化 |
|
|
58
|
+
| 大型 | 1000-5000 | **3倍** ↑ | +12MB |
|
|
59
|
+
| 超大型 | > 5000 | **5-10倍** ↑ | +27MB |
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
### v2.2.0
|
|
64
|
+
|
|
65
|
+
**发布日期**: 2025-12-29
|
|
66
|
+
**状态**: ✅ 已完成
|
|
67
|
+
**进度**: 100%完成 | 测试: 371/371 passing (100%)
|
|
68
|
+
|
|
69
|
+
| 需求标题 | 状态 | 优先级 | 详细 |
|
|
70
|
+
|---------|------|--------|------|
|
|
71
|
+
| Markdown 导出器 | ✅ 完成 | P1 | 新增导出 Schema 为 Markdown 文档的功能 |
|
|
72
|
+
| 多语言支持 | ✅ 完成 | P1 | 支持中文、英文、日文 |
|
|
73
|
+
| 文档示例优化 | ✅ 完成 | P1 | 使用 validate() 便捷函数 |
|
|
74
|
+
| 创建完整文档 | ✅ 完成 | P1 | 添加 markdown-exporter.md |
|
|
75
|
+
| 添加使用示例 | ✅ 完成 | P2 | 创建 examples/markdown-export.js |
|
|
76
|
+
|
|
77
|
+
**实现状态统计**:
|
|
78
|
+
- ✅ 完成: 5个
|
|
79
|
+
- 🔄 进行中: 0个
|
|
80
|
+
- ⏳ 待完成: 0个
|
|
81
|
+
|
|
82
|
+
**重大改进**:
|
|
83
|
+
- ✨ 新增 `MarkdownExporter` 导出人类可读文档
|
|
84
|
+
- 📝 优化所有文档示例使用更简洁的 API
|
|
85
|
+
- 🌍 支持三种语言的文档导出
|
|
86
|
+
|
|
87
|
+
---
|
|
88
|
+
|
|
89
|
+
### v2.1.3
|
|
90
|
+
|
|
91
|
+
**发布日期**: 2025-12-26
|
|
92
|
+
**状态**: ✅ 已完成
|
|
93
|
+
**进度**: 100%完成 | 测试: 371/371 passing (100%)
|
|
94
|
+
|
|
95
|
+
| 需求标题 | 状态 | 优先级 | 详细 |
|
|
96
|
+
|---------|------|--------|------|
|
|
97
|
+
| 包名变更 | ✅ 完成 | P0 | 从 schema-dsl 变更为 schema-dsl |
|
|
98
|
+
| 更新文档引用 | ✅ 完成 | P0 | 更新所有文档中的包名 |
|
|
99
|
+
| 更新示例代码 | ✅ 完成 | P0 | 更新所有示例中的引用 |
|
|
100
|
+
| 发布到 npm | ✅ 完成 | P0 | 发布 schema-dsl@2.1.3 |
|
|
101
|
+
|
|
102
|
+
**实现状态统计**:
|
|
103
|
+
- ✅ 完成: 4个
|
|
104
|
+
- 🔄 进行中: 0个
|
|
105
|
+
- ⏳ 待完成: 0个
|
|
106
|
+
|
|
107
|
+
**重大变更**:
|
|
108
|
+
- 🔴 npm 包名从 `schema-dsl` 变更为 `schema-dsl`
|
|
109
|
+
- ✅ 所有 API 保持向后兼容
|
|
110
|
+
- ✅ 文档和示例全面更新
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
### v2.1.2
|
|
115
|
+
|
|
116
|
+
**发布日期**: 2025-12-26
|
|
117
|
+
**状态**: ✅ 已完成
|
|
118
|
+
**进度**: 100%完成 | 测试: 318/318 passing (100%)
|
|
119
|
+
|
|
120
|
+
| 需求标题 | 状态 | 优先级 | 详细 |
|
|
121
|
+
|---------|------|--------|------|
|
|
122
|
+
| 移除调试代码 | ✅ 完成 | P0 | 清理 DslAdapter 和 ErrorFormatter 中的调试语句 |
|
|
123
|
+
| 清理注释代码 | ✅ 完成 | P0 | 移除所有注释的 console 语句 |
|
|
124
|
+
| min/max 简写支持 | ✅ 完成 | P1 | 支持 min/max 代替 minLength/maxLength |
|
|
125
|
+
| 统一语言包占位符 | ✅ 完成 | P1 | 所有语言包统一使用 {{#limit}} |
|
|
126
|
+
| 更新文档示例 | ✅ 完成 | P1 | 使用 min/max 简写 |
|
|
127
|
+
| 文档一致性修复 | ✅ 完成 | P1 | 修复 dsl-syntax.md 和 string-extensions.md 缺失内容 |
|
|
128
|
+
|
|
129
|
+
**实现状态统计**:
|
|
130
|
+
- ✅ 完成: 6个
|
|
131
|
+
- 🔄 进行中: 0个
|
|
132
|
+
- ⏳ 待完成: 0个
|
|
133
|
+
|
|
134
|
+
**重大改进**:
|
|
135
|
+
- ✅ 更专业的代码 - 移除所有调试输出
|
|
136
|
+
- ✅ 更简洁的API - 支持 min/max 简写
|
|
137
|
+
- ✅ 100%向后兼容 - 旧代码无需修改
|
|
138
|
+
|
|
139
|
+
---
|
|
140
|
+
|
|
141
|
+
### v2.1.1
|
|
142
|
+
|
|
143
|
+
**发布日期**: 2025-12-25
|
|
144
|
+
**状态**: ✅ 已完成
|
|
145
|
+
**进度**: 100%完成
|
|
146
|
+
|
|
147
|
+
| 需求标题 | 状态 | 优先级 | 详细 |
|
|
148
|
+
|---------|------|--------|------|
|
|
149
|
+
| 修复错误键名 | ✅ 完成 | P1 | 修复 schema.js 中的 any.only |
|
|
150
|
+
| 清理遗留代码 | ✅ 完成 | P1 | 移除 ErrorCodes.js 中的 string.* |
|
|
151
|
+
| 统一错误码 | ✅ 完成 | P1 | 统一使用 format.* 错误码 |
|
|
152
|
+
| 多语言架构重构 | ✅ 完成 | P1 | 移除 ErrorCodes.js 硬编码,Locale 自动加载 |
|
|
153
|
+
|
|
154
|
+
**实现状态统计**:
|
|
155
|
+
- ✅ 完成: 4个
|
|
156
|
+
- 🔄 进行中: 0个
|
|
157
|
+
- ⏳ 待完成: 0个
|
|
158
|
+
|
|
159
|
+
---
|
|
160
|
+
|
|
161
|
+
### v2.1.0
|
|
162
|
+
|
|
163
|
+
**发布日期**: 2025-12-25
|
|
164
|
+
**状态**: ✅ 已完成
|
|
165
|
+
**进度**: 100%完成
|
|
166
|
+
|
|
167
|
+
| 需求标题 | 状态 | 优先级 | 详细 |
|
|
168
|
+
|---------|------|--------|------|
|
|
169
|
+
| 号码验证重构 | ✅ 完成 | P1 | 提取配置到 phonePatterns.js |
|
|
170
|
+
| 全局配置API | ✅ 完成 | P1 | dsl.config() 支持动态配置 |
|
|
171
|
+
| 扩展新类型 | ✅ 完成 | P1 | objectId/hexColor/macAddress/cron |
|
|
172
|
+
| 移除Joi对比 | ✅ 完成 | P2 | 文档去Joi化 |
|
|
173
|
+
| 深度质量检查 | ✅ 完成 | P1 | 三轮验证+性能安全评估 |
|
|
174
|
+
|
|
175
|
+
**实现状态统计**:
|
|
176
|
+
- ✅ 完成: 5个
|
|
177
|
+
- 🔄 进行中: 0个
|
|
178
|
+
- ⏳ 待完成: 0个
|
|
179
|
+
|
|
180
|
+
---
|
|
181
|
+
|
|
182
|
+
### v2.0.1
|
|
183
|
+
|
|
184
|
+
**发布日期**: 2025-12-25
|
|
185
|
+
**状态**: ✅ 已完成
|
|
186
|
+
**进度**: 100%完成 | 测试: 215/215 passing (100%)
|
|
187
|
+
|
|
188
|
+
| 需求标题 | 状态 | 优先级 | 详细 |
|
|
189
|
+
|---------|------|--------|------|
|
|
190
|
+
| 移除简写功能 | ✅ 完成 | P0 | 移除s/n/i/b/o/a简写 |
|
|
191
|
+
| 补充新类型 | ✅ 完成 | P0 | time/ipv4/ipv6/binary/any/null |
|
|
192
|
+
| 对象必填优化 | ✅ 完成 | P0 | 'user!': {...} 语法 |
|
|
193
|
+
| 数组DSL语法 | ✅ 完成 | P0 | array!1-10 语法支持 |
|
|
194
|
+
| 文档完全重写 | ✅ 完成 | P0 | dsl-syntax.md (2857→567行) |
|
|
195
|
+
| 错误处理修复 | ✅ 完成 | P1 | ErrorFormatter多错误 |
|
|
196
|
+
| 嵌套深度修复 | ✅ 完成 | P1 | validateNestingDepth |
|
|
197
|
+
| 核心模块测试 | ✅ 完成 | P0 | 215个测试全部通过 |
|
|
198
|
+
|
|
199
|
+
**实现状态统计**:
|
|
200
|
+
- ✅ 完成: 8个
|
|
201
|
+
- 🔄 进行中: 0个
|
|
202
|
+
- ⏳ 待完成: 0个
|
|
203
|
+
|
|
204
|
+
**重大变更**:
|
|
205
|
+
- 🔴 不再支持简写(s/n/i/b等)- 使用完整类型名
|
|
206
|
+
- ✅ 新增6个类型
|
|
207
|
+
- ✅ 文档行数减少80%,清晰度大幅提升
|
|
208
|
+
|
|
209
|
+
---
|
|
210
|
+
|
|
211
|
+
### v1.0.0
|
|
212
|
+
|
|
213
|
+
**发布日期**: 2025-12-24
|
|
214
|
+
**状态**: ✅ 已完成
|
|
215
|
+
**进度**: 98%完成(测试待补充)
|
|
216
|
+
|
|
217
|
+
| 需求标题 | 状态 | 优先级 | 详细 |
|
|
218
|
+
|---------|------|--------|------|
|
|
219
|
+
| JSON Schema核心类实现 | ✅ 完成 | P0 | [JSONSchemaCore.js](../lib/core/JSONSchemaCore.js) |
|
|
220
|
+
| ajv验证器集成 | ✅ 完成 | P0 | [Validator.js](../lib/core/Validator.js) |
|
|
221
|
+
| Joi风格适配器 | ✅ 完成 | P0 | [JoiAdapter.js](../lib/adapters/JoiAdapter.js) |
|
|
222
|
+
| DSL风格适配器 | ✅ 完成 | P0 | [DslAdapter.js](../lib/adapters/DslAdapter.js) |
|
|
223
|
+
| MongoDB导出器 | ✅ 完成 | P0 | [MongoDBExporter.js](../lib/exporters/MongoDBExporter.js) |
|
|
224
|
+
| MySQL导出器 | ✅ 完成 | P1 | [MySQLExporter.js](../lib/exporters/MySQLExporter.js) |
|
|
225
|
+
| PostgreSQL导出器 | ✅ 完成 | P1 | [PostgreSQLExporter.js](../lib/exporters/PostgreSQLExporter.js) |
|
|
226
|
+
| 自定义验证扩展 | ✅ 完成 | P1 | [CustomKeywords.js](../lib/validators/CustomKeywords.js) |
|
|
227
|
+
| 类型转换工具 | ✅ 完成 | P1 | [TypeConverter.js](../lib/utils/TypeConverter.js) |
|
|
228
|
+
| Schema辅助函数 | ✅ 完成 | P2 | [SchemaHelper.js](../lib/utils/SchemaHelper.js) |
|
|
229
|
+
| Joi风格示例 | ❌ 移除 | P1 | 已移除 |
|
|
230
|
+
| DSL风格示例 | ✅ 完成 | P1 | [dsl-style.js](../examples/dsl-style.js) |
|
|
231
|
+
| README文档 | ✅ 完成 | P0 | [README.md](../README.md) |
|
|
232
|
+
| 单元测试 | ⏳ 待完成 | P0 | - |
|
|
233
|
+
| 链式适配器 | ⏳ 待完成 | P2 | - |
|
|
234
|
+
|
|
235
|
+
**实现状态统计**:
|
|
236
|
+
- ✅ 完成: 13个
|
|
237
|
+
- ⏳ 待完成: 2个
|
|
238
|
+
- ❌ 未开始: 0个
|
|
239
|
+
|
|
240
|
+
---
|
|
241
|
+
|
|
242
|
+
## 需求状态说明
|
|
243
|
+
|
|
244
|
+
- ✅ **完成**: 功能已实现并验证
|
|
245
|
+
- ⏳ **待完成**: 计划中,待实施
|
|
246
|
+
- 🔄 **进行中**: 正在开发
|
|
247
|
+
- ❌ **未开始**: 尚未开始
|
|
248
|
+
- 🔴 **阻塞**: 存在阻塞问题
|
|
249
|
+
|
|
250
|
+
---
|
|
251
|
+
|
|
252
|
+
## 进度对比
|
|
253
|
+
|
|
254
|
+
| 版本 | 开始日期 | 完成日期 | 计划需求 | 完成需求 | 完成率 |
|
|
255
|
+
|------|---------|---------|---------|---------|--------|
|
|
256
|
+
| v1.0.0 | 2025-12-24 | 2025-12-24 | 15 | 13 | 87% |
|
|
257
|
+
|
|
258
|
+
---
|
|
259
|
+
|
|
260
|
+
## 关键里程碑
|
|
261
|
+
|
|
262
|
+
- [x] 2025-12-24: 架构设计完成(适配器模式)
|
|
263
|
+
- [x] 2025-12-24: 核心层实现完成
|
|
264
|
+
- [x] 2025-12-24: 适配器层实现完成
|
|
265
|
+
- [x] 2025-12-24: 导出器层实现完成
|
|
266
|
+
- [x] 2025-12-24: DSL语法验证通过
|
|
267
|
+
- [x] 2025-12-24: README文档完成
|
|
268
|
+
- [ ] 待定: 测试套件完成(目标覆盖率80%+)
|
|
269
|
+
- [ ] 待定: v1.0.0正式版发布
|
|
270
|
+
|
|
271
|
+
---
|
|
272
|
+
|
|
273
|
+
**项目总体状态**: ✅ 核心功能已完成,具备发布条件
|