@lark-apaas/fullstack-nestjs-core 1.2.0-alpha.1 → 1.2.0-alpha.20261017012411

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 (2) hide show
  1. package/README.md +49 -0
  2. package/package.json +3 -3
package/README.md CHANGED
@@ -138,6 +138,55 @@ export class AppModule implements NestModule {
138
138
 
139
139
  全局平台模块,集成了所有核心功能。
140
140
 
141
+ #### 全局 ValidationPipe 与数字 DTO
142
+
143
+ `PlatformModule.forRoot()` 会以 `APP_PIPE` 注册下面的全局验证管道;该管道来自 `PlatformModule`,不是由 `configureApp()` 注册的:
144
+
145
+ ```typescript
146
+ new ValidationPipe({
147
+ transform: true,
148
+ transformOptions: {
149
+ enableImplicitConversion: true,
150
+ },
151
+ });
152
+ ```
153
+
154
+ 对于带有类型元数据的数字 DTO 字段,请求值会先做隐式类型转换,再由 `class-validator` 执行该字段上的全部校验器。最终是否通过取决于转换后的值是否满足全部约束,而不是只看原始 JSON token 的类型:
155
+
156
+ - 文本 `"1.5"` 转换为数字后可以通过 `@IsNumber()`,但不能通过 `@IsInt()`。
157
+ - 小于 `@Min()` 下限的输入即使能转换为数字,仍会因下限约束失败。
158
+ - 明显非数字的文本无法成为有效数字,会被后续的 `@IsNumber()` / `@IsInt()` 等约束拒绝。
159
+
160
+ **默认合同:** 如果业务合同没有明确要求原始 JSON token 必须是 number,不要仅因为输入是数字文本就额外判定为 400。应按字段实际含义声明数字类型校验器和全部业务约束;这不表示所有数字文本都会成功。例如:
161
+
162
+ ```typescript
163
+ import { IsInt, Min } from 'class-validator';
164
+
165
+ export class CreateOrderDto {
166
+ @IsInt()
167
+ @Min(1)
168
+ quantity!: number;
169
+ }
170
+ ```
171
+
172
+ 在默认全局管道下,`"2"` 转换后满足两个约束;`"1.5"` 不满足 `@IsInt()`,`"0"` 不满足 `@Min(1)`,非数字文本也不会通过。
173
+
174
+ **显式严格合同:** 只有当业务明确要求拒绝原始 JSON 字符串、只接受 JSON number 时,才需要额外实现这一限制。可以在单个 DTO 字段上恢复原始请求值,再继续使用 `@IsNumber()` / `@IsInt()` 以及所有业务约束,不必修改全局管道:
175
+
176
+ ```typescript
177
+ import { Transform } from 'class-transformer';
178
+ import { IsInt, Min } from 'class-validator';
179
+
180
+ export class StrictCreateOrderDto {
181
+ @Transform(({ obj, key }) => obj[key], { toClassOnly: true })
182
+ @IsInt()
183
+ @Min(1)
184
+ quantity!: number;
185
+ }
186
+ ```
187
+
188
+ 这个写法保留 JSON number 的正常校验,同时让原始 JSON string 在校验前恢复为 string,因此由 `@IsInt()` 拒绝;需要允许小数时可以在同一字段局部写法中使用 `@IsNumber()` 并保留其它业务约束。这是经当前依赖版本验证的一种安全局部方案,并非唯一实现要求;它不会改变其他 DTO 字段或全局 `ValidationPipe` 的默认行为。
189
+
141
190
  #### 配置选项
142
191
 
143
192
  | 选项 | 类型 | 默认值 | 描述 |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lark-apaas/fullstack-nestjs-core",
3
- "version": "1.2.0-alpha.1",
3
+ "version": "1.2.0-alpha.20261017012411",
4
4
  "description": "FullStack Nestjs Core",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -16,7 +16,7 @@
16
16
  "typescript"
17
17
  ],
18
18
  "engines": {
19
- "node": ">=20.0.0"
19
+ "node": ">=18.0.0"
20
20
  },
21
21
  "files": [
22
22
  "dist"
@@ -49,7 +49,7 @@
49
49
  "@lark-apaas/nestjs-datapaas": "^1.0.21",
50
50
  "@lark-apaas/nestjs-http-forwarder": "^0.1.3",
51
51
  "@lark-apaas/nestjs-logger": "^1.0.18",
52
- "@lark-apaas/nestjs-mcp": "0.2.0-alpha.1",
52
+ "@lark-apaas/nestjs-mcp": "^0.1.2",
53
53
  "@lark-apaas/nestjs-observable": "^0.0.12",
54
54
  "@lark-apaas/nestjs-openapi-devtools": "^1.0.10",
55
55
  "@lark-apaas/nestjs-trigger": "^0.0.3",