-
-
Notifications
You must be signed in to change notification settings - Fork 286
/
ValidationPipe.ts
36 lines (28 loc) · 1021 Bytes
/
ValidationPipe.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import {Injectable} from "@tsed/di";
import {RequiredValidationError} from "../errors/RequiredValidationError";
import {IPipe, ParamMetadata} from "../models/ParamMetadata";
import {ValidationService} from "../services/ValidationService";
@Injectable({
type: "validator"
})
export class ValidationPipe implements IPipe {
constructor(protected validationService: ValidationService) {}
transform(value: any, metadata: ParamMetadata) {
this.checkIsRequired(value, metadata);
if (this.shouldValidate(metadata)) {
const {collectionType} = metadata;
const type = metadata.type || metadata.collectionType;
this.validationService.validate(value, type, collectionType);
}
return value;
}
protected shouldValidate(param: ParamMetadata) {
return !!(param.type || param.collectionType);
}
protected checkIsRequired(value: any, metadata: ParamMetadata) {
if (metadata.isRequired(value)) {
throw RequiredValidationError.from(metadata);
}
return true;
}
}