import { ValidationOptions } from "../ValidationOptions"; import { registerDecorator } from "../../register-decorator"; import { ValidationArguments } from "../../validation/ValidationArguments"; import { ValidatorConstraintInterface } from "../../validation/ValidatorConstraintInterface"; export interface ValidateByOptions { name: string; constraints?: any[]; validator: ValidatorConstraintInterface | Function; async?: boolean; } export function buildMessage( impl: (eachPrefix: string, args?: ValidationArguments) => string, validationOptions?: ValidationOptions): (validationArguments?: ValidationArguments) => string { return (validationArguments?: ValidationArguments): string => { const eachPrefix = validationOptions && validationOptions.each ? "each value in " : ""; return impl(eachPrefix, validationArguments); }; } export function ValidateBy(options: ValidateByOptions, validationOptions?: ValidationOptions): PropertyDecorator { return function (object: object, propertyName: string): void { registerDecorator({ name: options.name, target: object.constructor, propertyName: propertyName, options: validationOptions, constraints: options.constraints, validator: options.validator }); }; }