-
Notifications
You must be signed in to change notification settings - Fork 7
/
array-validator.models.ts
40 lines (36 loc) · 1.08 KB
/
array-validator.models.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
import {
registerDecorator,
validateSync,
ValidationArguments,
ValidationOptions,
ValidatorConstraint,
ValidatorConstraintInterface,
} from 'class-validator';
import * as _ from 'lodash';
import { UserFrontDetail } from './users.models';
@ValidatorConstraint({ name: 'arrayValidator', async: false })
export class ArrayValidator implements ValidatorConstraintInterface {
public validate(value: string | UserFrontDetail): boolean {
if (_.isString(value)) return true;
if (value instanceof UserFrontDetail) {
const errors = validateSync(value);
return !!errors?.length;
}
return false;
}
public defaultMessage(validationArguments?: ValidationArguments): string {
return `${validationArguments.property} must be string | UserFrontDetail`;
}
}
export function arrayValidator(validationOptions?: ValidationOptions): any {
return (object: object, propertyName: string): void => {
registerDecorator({
propertyName,
name: 'arrayValidator',
target: object.constructor,
constraints: [],
options: validationOptions,
validator: new ArrayValidator(),
});
};
}