UNPKG

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