nestjs-custom-class-validators
Version:
This package contains a few custom validator I have found to be repetitive, So I made templates that handles both class-validator checks and Swagger configuration
44 lines • 2.21 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.CustomNumberValidator = void 0;
const class_transformer_1 = require("class-transformer");
const class_validator_1 = require("class-validator");
const validatorTransformers_1 = require("../transformers/validatorTransformers");
const commonDecoratorFunctions_1 = require("../utils/commonDecoratorFunctions");
function MinNumberFN(min, key, isArray = false) {
return (0, class_validator_1.Min)(min, Object.assign(Object.assign({}, (isArray && {
message: `${key}: Must be a list of numbers greater or equals ${min}`,
})), (!isArray && {
message: `${key}: Must be greater or equals ${min}`,
})));
}
function MaxNumberFN(max, key, isArray = false) {
return (0, class_validator_1.Max)(max, Object.assign(Object.assign({}, (isArray && {
message: `${key}: Must be a list of numbers less or equals ${max}`,
})), (!isArray && {
message: `${key}: Must be less or equals ${max}`,
})));
}
function CustomNumberValidator(details) {
const { optional, defaultValue, description, isArray, min, max } = details;
const mySwaggerProp = (0, commonDecoratorFunctions_1.swaggerProp)({
optional,
description,
defaultValue,
type: 'number',
isArray,
});
return function (target, key) {
optional ? (0, class_validator_1.IsOptional)()(target, key) : (0, commonDecoratorFunctions_1.notEmptyFn)(key)(target, key);
min && MinNumberFN(min, key, isArray)(target, key);
max && MaxNumberFN(max, key, isArray)(target, key);
(0, class_transformer_1.Transform)(validatorTransformers_1.TransformNumberStringToNumber)(target, key);
isArray && (0, class_transformer_1.Transform)(validatorTransformers_1.TransformSingleItemToArray)(target, key);
isArray && (0, commonDecoratorFunctions_1.isArrayFn)(key)(target, key);
(0, commonDecoratorFunctions_1.isNumberFn)(key, isArray)(target, key);
(0, commonDecoratorFunctions_1.notEmptyFn)(key)(target, key);
mySwaggerProp(target, key);
};
}
exports.CustomNumberValidator = CustomNumberValidator;
//# sourceMappingURL=number.decorator.js.map