register-decorator.js 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.registerDecorator = void 0;
  4. const ConstraintMetadata_1 = require("./metadata/ConstraintMetadata");
  5. const ValidationMetadata_1 = require("./metadata/ValidationMetadata");
  6. const ValidationTypes_1 = require("./validation/ValidationTypes");
  7. const container_1 = require("./container");
  8. const MetadataStorage_1 = require("./metadata/MetadataStorage");
  9. /**
  10. * Registers a custom validation decorator.
  11. */
  12. function 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. name: options.name,
  39. target: options.target,
  40. propertyName: options.propertyName,
  41. validationOptions: options.options,
  42. constraintCls: constraintCls,
  43. constraints: options.constraints,
  44. };
  45. (0, MetadataStorage_1.getMetadataStorage)().addValidationMetadata(new ValidationMetadata_1.ValidationMetadata(validationMetadataArgs));
  46. }
  47. exports.registerDecorator = registerDecorator;
  48. //# sourceMappingURL=register-decorator.js.map