UNPKG

1.99 kBJavaScriptView Raw
1import { ConstraintMetadata } from './metadata/ConstraintMetadata';
2import { ValidationMetadata } from './metadata/ValidationMetadata';
3import { ValidationTypes } from './validation/ValidationTypes';
4import { getFromContainer } from './container';
5import { MetadataStorage, getMetadataStorage } from './metadata/MetadataStorage';
6/**
7 * Registers a custom validation decorator.
8 */
9export function registerDecorator(options) {
10 let constraintCls;
11 if (options.validator instanceof Function) {
12 constraintCls = options.validator;
13 const constraintClasses = getFromContainer(MetadataStorage).getTargetValidatorConstraints(options.validator);
14 if (constraintClasses.length > 1) {
15 throw `More than one implementation of ValidatorConstraintInterface found for validator on: ${options.target.name}:${options.propertyName}`;
16 }
17 }
18 else {
19 const validator = options.validator;
20 constraintCls = class CustomConstraint {
21 validate(value, validationArguments) {
22 return validator.validate(value, validationArguments);
23 }
24 defaultMessage(validationArguments) {
25 if (validator.defaultMessage) {
26 return validator.defaultMessage(validationArguments);
27 }
28 return '';
29 }
30 };
31 getMetadataStorage().addConstraintMetadata(new ConstraintMetadata(constraintCls, options.name, options.async));
32 }
33 const validationMetadataArgs = {
34 type: options.name && ValidationTypes.isValid(options.name) ? options.name : ValidationTypes.CUSTOM_VALIDATION,
35 target: options.target,
36 propertyName: options.propertyName,
37 validationOptions: options.options,
38 constraintCls: constraintCls,
39 constraints: options.constraints,
40 };
41 getMetadataStorage().addValidationMetadata(new ValidationMetadata(validationMetadataArgs));
42}
43//# sourceMappingURL=register-decorator.js.map
\No newline at end of file