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 +16 -0
- package/README.md +106 -3
- package/dist/README.md +106 -3
- package/dist/index.d.ts +112 -67
- package/dist/index.js +1336 -1228
- package/dist/index.mjs +1336 -1230
- package/dist/package.json +2 -2
- package/examples/validated-async-sync-example.ts +213 -0
- package/package.json +2 -2
- package/.vscode/launch.json +0 -81
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
|
-
//
|
|
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
|
-
//
|
|
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
|
|