UNPKG

@geekbears/gb-class-validators

Version:

Geekbears custom validators using class-validator package.

38 lines (30 loc) 1.4 kB
import { ValidationOptions, registerDecorator, ValidationArguments } from 'class-validator'; import { parsePhoneNumberFromString, CountryCode } from 'libphonenumber-js'; import { isEmpty } from 'lodash'; interface IsGBPhoneParams { dev: CountryCode[]; prod: CountryCode[]; } export function IsGBPhoneNumber(params: IsGBPhoneParams, validationOptions?: ValidationOptions) { return (object: Record<string, any>, propertyName: string) => { registerDecorator({ name: 'IsGBPhoneNumber', target: object.constructor, propertyName, constraints: [[...params.dev], [...params.prod]], options: validationOptions, validator: { validate(value: any, args: ValidationArguments) { const [validDevRegions, validProdRegions] = args.constraints; if (typeof value !== 'string') return false; const parsed = parsePhoneNumberFromString(value); if (!parsed) return false; if (process.env.NODE_ENV === 'production') { return !isEmpty(validProdRegions) ? validProdRegions.includes(parsed.country) : true; } return !isEmpty(validDevRegions) ? validDevRegions.includes(parsed.country) : true; }, }, }); }; }