UNPKG

nestjs-custom-class-validators

Version:

This package contains a few custom validator I have found to be repetitive, So I made templates that handles both class-validator checks and Swagger configuration

53 lines (48 loc) 1.63 kB
import { IsOptional, registerDecorator, ValidationOptions, } from "class-validator"; import { ICustomOnlyDateStringOptions } from "../dto/customValidatorOptions.dto"; import { notEmptyFn, swaggerProp } from "../utils/commonDecoratorFunctions"; import { Transform } from "class-transformer"; import { TransformDateStringToDateObject } from "../transformers/validatorTransformers"; function IsOnlyDate(validationOptions?: ValidationOptions) { return function (object: Object, propertyName: string) { registerDecorator({ name: "IsOnlyDate", target: object.constructor, propertyName: propertyName, constraints: [], options: { message: "Please provide only date like 2020-12-08", ...validationOptions, }, validator: { validate(value: any) { const regex = /([12]\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01]))/; return ( (typeof value === "string" && regex.test(value)) || value instanceof Date ); }, }, }); }; } export function CustomOnlyDateString(details: ICustomOnlyDateStringOptions) { const { isArray, optional, description, defaultValue } = details; const mySwaggerProp = swaggerProp({ optional, description, defaultValue: defaultValue || "2013-02-23", type: "string", isArray, }); return function (target: any, key: string) { optional ? IsOptional()(target, key) : notEmptyFn(key)(target, key); IsOnlyDate({ each: isArray })(target, key); Transform(TransformDateStringToDateObject)(target, key); mySwaggerProp(target, key); }; }