import { ValidationOptions } from '../ValidationOptions'; import { buildMessage, ValidateBy } from '../common/ValidateBy'; export const IS_IN = 'isIn'; /** * Checks if given value is in a array of allowed values. */ export function isIn(value: unknown, possibleValues: readonly unknown[]): boolean { return !(possibleValues instanceof Array) || possibleValues.some(possibleValue => possibleValue === value); } /** * Checks if given value is in a array of allowed values. */ export function IsIn(values: readonly any[], validationOptions?: ValidationOptions): PropertyDecorator { return ValidateBy( { name: IS_IN, constraints: [values], validator: { validate: (value, args): boolean => isIn(value, args.constraints[0]), defaultMessage: buildMessage( eachPrefix => eachPrefix + '$property must be one of the following values: $constraint1', validationOptions ), }, }, validationOptions ); }