27 lines
742 B
TypeScript
27 lines
742 B
TypeScript
import {
|
|
registerDecorator,
|
|
ValidationArguments,
|
|
ValidationOptions,
|
|
} from 'class-validator';
|
|
|
|
export function AtLeastOneField(validationOptions?: ValidationOptions) {
|
|
return function (constructor: Function) {
|
|
registerDecorator({
|
|
name: 'atLeastOneField',
|
|
target: constructor,
|
|
propertyName: undefined as any, // important for class-level
|
|
options: validationOptions,
|
|
validator: {
|
|
validate(_: any, args: ValidationArguments) {
|
|
const object = args.object as Record<string, any>;
|
|
|
|
return Object.values(object).some((value) => value !== undefined);
|
|
},
|
|
defaultMessage() {
|
|
return 'At least one field must be provided';
|
|
},
|
|
},
|
|
});
|
|
};
|
|
}
|