-
Notifications
You must be signed in to change notification settings - Fork 2
/
dto-context-validation-pipe.ts
45 lines (37 loc) · 1.19 KB
/
dto-context-validation-pipe.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
37
38
39
40
41
42
43
44
45
import {
ArgumentMetadata,
BadRequestException,
Inject,
Injectable,
PipeTransform,
Scope,
} from '@nestjs/common';
import { REQUEST } from '@nestjs/core';
import { DTObject, ParseError } from 'dto-classes';
import { Request } from 'express'
@Injectable({ scope: Scope.REQUEST })
export class DTOContextValidationPipe implements PipeTransform {
constructor(@Inject(REQUEST) protected readonly request: Request) { }
async transform(value: any, metadata: ArgumentMetadata) {
let DTOClass: typeof DTObject = null;
if (metadata.metatype.prototype instanceof DTObject) {
DTOClass = metadata.metatype as any;
}
if (!DTOClass) {
return value;
}
try {
value = await DTOClass.parse(value, { context: { request: this.request } });
} catch (e) {
if (e instanceof ParseError) {
throw new BadRequestException({
message: 'Validation failed.',
error: e.issues.map(x => {
return { message: x.message, path: x.path }
})
});
}
}
return value;
}
}