koatty_validation 1.4.0 → 1.6.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.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,22 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
4
4
 
5
+ ### [1.6.1](https://github.com/koatty/koatty_validation/compare/v1.6.0...v1.6.1) (2025-10-23)
6
+
7
+ ## [1.6.0](https://github.com/koatty/koatty_validation/compare/v1.5.0...v1.6.0) (2025-10-22)
8
+
9
+
10
+ ### Features
11
+
12
+ * improve validation with instance conversion and caching ([9865b93](https://github.com/koatty/koatty_validation/commit/9865b93e469a7df16fe67e0b85dab3191437b0a8))
13
+
14
+ ## [1.5.0](https://github.com/koatty/koatty_validation/compare/v1.4.0...v1.5.0) (2025-10-22)
15
+
16
+
17
+ ### Features
18
+
19
+ * comprehensive code optimization and enhancements ([f7ac738](https://github.com/koatty/koatty_validation/commit/f7ac7381a75a12365aee2a83530a12044c5e1d44))
20
+
5
21
  ## [1.4.0](https://github.com/koatty/koatty_validation/compare/v1.3.2...v1.4.0) (2025-06-10)
6
22
 
7
23
 
package/README.md CHANGED
@@ -36,10 +36,16 @@ export class Controller {
36
36
  // 业务逻辑
37
37
  }
38
38
 
39
- // DTO 验证
39
+ // DTO 验证 - 异步模式(默认,适用于 Koatty 框架)
40
40
  @Validated()
41
41
  TestDto(user: UserDTO) {
42
- // 自动验证 UserDTO
42
+ // 框架会在异步获取参数后自动验证 UserDTO
43
+ }
44
+
45
+ // DTO 验证 - 同步模式(适用于参数已准备好的场景)
46
+ @Validated(false)
47
+ TestDtoSync(user: UserDTO) {
48
+ // 方法执行前立即验证 UserDTO
43
49
  }
44
50
  }
45
51
 
@@ -101,11 +107,107 @@ export class UserDTO {
101
107
 
102
108
  ```typescript
103
109
  @Valid(rule, options) // 参数验证
104
- @Validated() // DTO验证
110
+ @Validated() // DTO验证 (默认异步模式)
111
+ @Validated(true) // DTO验证 (异步模式)
112
+ @Validated(false) // DTO验证 (同步模式)
105
113
  @Expose() // 暴露属性
106
114
  @IsDefined() // 已定义(Expose别名)
107
115
  ```
108
116
 
117
+ ## 🎭 Validated 装饰器
118
+
119
+ `@Validated` 装饰器支持同步和异步两种验证模式,以适应不同的应用场景。
120
+
121
+ ### 异步模式(默认)
122
+
123
+ 适用于 **Koatty 框架**中,控制器方法的参数需要异步获取的场景。
124
+
125
+ ```typescript
126
+ import { Validated, checkValidated } from 'koatty_validation';
127
+
128
+ class UserController {
129
+ // 默认异步模式
130
+ @Validated()
131
+ async register(user: UserDTO) {
132
+ // 框架流程:
133
+ // 1. 框架接收 HTTP 请求
134
+ // 2. 框架异步解析请求体,构造 UserDTO 实例
135
+ // 3. 框架检测到 @Validated() 元数据
136
+ // 4. 框架调用 checkValidated() 验证参数
137
+ // 5. 验证通过后调用此方法
138
+ return { success: true };
139
+ }
140
+
141
+ // 显式指定异步模式
142
+ @Validated(true)
143
+ async update(id: number, user: UserDTO) {
144
+ return { success: true };
145
+ }
146
+ }
147
+ ```
148
+
149
+ **异步模式特点:**
150
+ - ✅ 装饰器保存验证元数据到 IOC 容器
151
+ - ✅ 由框架在异步获取参数后执行验证
152
+ - ✅ 适用于参数值需要异步获取的场景
153
+ - ✅ 是 Koatty 框架的推荐模式
154
+
155
+ ### 同步模式
156
+
157
+ 适用于**单元测试**或参数值已经准备好的场景。
158
+
159
+ ```typescript
160
+ class UserService {
161
+ // 同步模式 - 立即验证
162
+ @Validated(false)
163
+ async createUser(user: UserDTO) {
164
+ // 方法执行前已经完成验证
165
+ return { success: true };
166
+ }
167
+
168
+ // 适用于多个参数的场景
169
+ @Validated(false)
170
+ async updateUser(id: number, user: UserDTO) {
171
+ // 只验证类类型参数(UserDTO),基础类型(number)不验证
172
+ return { success: true };
173
+ }
174
+ }
175
+ ```
176
+
177
+ **同步模式特点:**
178
+ - ✅ 装饰器包装原方法,在调用时立即执行验证
179
+ - ✅ 适用于单元测试场景
180
+ - ✅ 适用于参数已准备好的场景
181
+ - ✅ 验证失败立即抛出错误
182
+
183
+ ### 手动调用 checkValidated
184
+
185
+ 在框架拦截器或中间件中,可以手动调用 `checkValidated` 函数:
186
+
187
+ ```typescript
188
+ import { checkValidated } from 'koatty_validation';
189
+
190
+ async function validateInMiddleware(args: any[], paramTypes: any[]) {
191
+ try {
192
+ const { validatedArgs, validationTargets } = await checkValidated(args, paramTypes);
193
+ console.log('验证通过');
194
+ return validationTargets;
195
+ } catch (error) {
196
+ console.error('验证失败:', error);
197
+ throw error;
198
+ }
199
+ }
200
+ ```
201
+
202
+ ### 选择合适的模式
203
+
204
+ | 场景 | 推荐模式 | 原因 |
205
+ |------|---------|------|
206
+ | Koatty 框架控制器 | 异步 `@Validated()` | 参数需要异步获取 |
207
+ | 单元测试 | 同步 `@Validated(false)` | 参数已准备好,立即验证 |
208
+ | 独立服务/工具 | 同步 `@Validated(false)` | 不依赖框架,立即验证 |
209
+ | 框架拦截器 | 手动 `checkValidated()` | 完全控制验证时机 |
210
+
109
211
  ## 🔧 自定义装饰器
110
212
 
111
213
  ### 使用装饰器工厂创建自定义验证器
@@ -310,6 +412,7 @@ const validatedData = await ClassValidator.valid(UserSchema, rawData, true);
310
412
  - [基础用法示例](./examples/basic-usage.ts)
311
413
  - [自定义装饰器示例](./examples/custom-decorators-example.ts)
312
414
  - [完整使用示例](./examples/usage-example.ts)
415
+ - [Validated 异步/同步模式示例](./examples/validated-async-sync-example.ts)
313
416
 
314
417
  ## 🔍 可用验证函数
315
418
 
package/dist/README.md CHANGED
@@ -36,10 +36,16 @@ export class Controller {
36
36
  // 业务逻辑
37
37
  }
38
38
 
39
- // DTO 验证
39
+ // DTO 验证 - 异步模式(默认,适用于 Koatty 框架)
40
40
  @Validated()
41
41
  TestDto(user: UserDTO) {
42
- // 自动验证 UserDTO
42
+ // 框架会在异步获取参数后自动验证 UserDTO
43
+ }
44
+
45
+ // DTO 验证 - 同步模式(适用于参数已准备好的场景)
46
+ @Validated(false)
47
+ TestDtoSync(user: UserDTO) {
48
+ // 方法执行前立即验证 UserDTO
43
49
  }
44
50
  }
45
51
 
@@ -101,11 +107,107 @@ export class UserDTO {
101
107
 
102
108
  ```typescript
103
109
  @Valid(rule, options) // 参数验证
104
- @Validated() // DTO验证
110
+ @Validated() // DTO验证 (默认异步模式)
111
+ @Validated(true) // DTO验证 (异步模式)
112
+ @Validated(false) // DTO验证 (同步模式)
105
113
  @Expose() // 暴露属性
106
114
  @IsDefined() // 已定义(Expose别名)
107
115
  ```
108
116
 
117
+ ## 🎭 Validated 装饰器
118
+
119
+ `@Validated` 装饰器支持同步和异步两种验证模式,以适应不同的应用场景。
120
+
121
+ ### 异步模式(默认)
122
+
123
+ 适用于 **Koatty 框架**中,控制器方法的参数需要异步获取的场景。
124
+
125
+ ```typescript
126
+ import { Validated, checkValidated } from 'koatty_validation';
127
+
128
+ class UserController {
129
+ // 默认异步模式
130
+ @Validated()
131
+ async register(user: UserDTO) {
132
+ // 框架流程:
133
+ // 1. 框架接收 HTTP 请求
134
+ // 2. 框架异步解析请求体,构造 UserDTO 实例
135
+ // 3. 框架检测到 @Validated() 元数据
136
+ // 4. 框架调用 checkValidated() 验证参数
137
+ // 5. 验证通过后调用此方法
138
+ return { success: true };
139
+ }
140
+
141
+ // 显式指定异步模式
142
+ @Validated(true)
143
+ async update(id: number, user: UserDTO) {
144
+ return { success: true };
145
+ }
146
+ }
147
+ ```
148
+
149
+ **异步模式特点:**
150
+ - ✅ 装饰器保存验证元数据到 IOC 容器
151
+ - ✅ 由框架在异步获取参数后执行验证
152
+ - ✅ 适用于参数值需要异步获取的场景
153
+ - ✅ 是 Koatty 框架的推荐模式
154
+
155
+ ### 同步模式
156
+
157
+ 适用于**单元测试**或参数值已经准备好的场景。
158
+
159
+ ```typescript
160
+ class UserService {
161
+ // 同步模式 - 立即验证
162
+ @Validated(false)
163
+ async createUser(user: UserDTO) {
164
+ // 方法执行前已经完成验证
165
+ return { success: true };
166
+ }
167
+
168
+ // 适用于多个参数的场景
169
+ @Validated(false)
170
+ async updateUser(id: number, user: UserDTO) {
171
+ // 只验证类类型参数(UserDTO),基础类型(number)不验证
172
+ return { success: true };
173
+ }
174
+ }
175
+ ```
176
+
177
+ **同步模式特点:**
178
+ - ✅ 装饰器包装原方法,在调用时立即执行验证
179
+ - ✅ 适用于单元测试场景
180
+ - ✅ 适用于参数已准备好的场景
181
+ - ✅ 验证失败立即抛出错误
182
+
183
+ ### 手动调用 checkValidated
184
+
185
+ 在框架拦截器或中间件中,可以手动调用 `checkValidated` 函数:
186
+
187
+ ```typescript
188
+ import { checkValidated } from 'koatty_validation';
189
+
190
+ async function validateInMiddleware(args: any[], paramTypes: any[]) {
191
+ try {
192
+ const { validatedArgs, validationTargets } = await checkValidated(args, paramTypes);
193
+ console.log('验证通过');
194
+ return validationTargets;
195
+ } catch (error) {
196
+ console.error('验证失败:', error);
197
+ throw error;
198
+ }
199
+ }
200
+ ```
201
+
202
+ ### 选择合适的模式
203
+
204
+ | 场景 | 推荐模式 | 原因 |
205
+ |------|---------|------|
206
+ | Koatty 框架控制器 | 异步 `@Validated()` | 参数需要异步获取 |
207
+ | 单元测试 | 同步 `@Validated(false)` | 参数已准备好,立即验证 |
208
+ | 独立服务/工具 | 同步 `@Validated(false)` | 不依赖框架,立即验证 |
209
+ | 框架拦截器 | 手动 `checkValidated()` | 完全控制验证时机 |
210
+
109
211
  ## 🔧 自定义装饰器
110
212
 
111
213
  ### 使用装饰器工厂创建自定义验证器
@@ -310,6 +412,7 @@ const validatedData = await ClassValidator.valid(UserSchema, rawData, true);
310
412
  - [基础用法示例](./examples/basic-usage.ts)
311
413
  - [自定义装饰器示例](./examples/custom-decorators-example.ts)
312
414
  - [完整使用示例](./examples/usage-example.ts)
415
+ - [Validated 异步/同步模式示例](./examples/validated-async-sync-example.ts)
313
416
 
314
417
  ## 🔍 可用验证函数
315
418