import { ValidationOptions } from '../ValidationOptions'; import { ValidationMetadataArgs } from '../../metadata/ValidationMetadataArgs'; import { ValidationTypes } from '../../validation/ValidationTypes'; import { ValidationMetadata } from '../../metadata/ValidationMetadata'; import { getMetadataStorage } from '../../metadata/MetadataStorage'; /** * Checks if value is missing and if so, ignores all validators. */ export function IsOptional(validationOptions?: ValidationOptions): PropertyDecorator { return function (object: object, propertyName: string): void { const args: ValidationMetadataArgs = { type: ValidationTypes.CONDITIONAL_VALIDATION, target: object.constructor, propertyName: propertyName, constraints: [ (object: any, value: any): boolean => { return object[propertyName] !== null && object[propertyName] !== undefined; }, ], validationOptions: validationOptions, }; getMetadataStorage().addValidationMetadata(new ValidationMetadata(args)); }; }