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
41 lines • 1.77 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.CustomEnumValidator = void 0;
const class_validator_1 = require("class-validator");
const commonDecoratorFunctions_1 = require("../utils/commonDecoratorFunctions");
function CustomEnumValidator(details) {
const { validEnum, optional, defaultValue, description, isArray } = details;
const mySwaggerProp = (0, commonDecoratorFunctions_1.swaggerProp)({
validEnum,
optional,
description,
defaultValue,
isArray,
});
const throwError = (target) => {
throw new Error(`Enum with keys ${Object.keys(validEnum)} got invalid default value ${defaultValue} in ${target.constructor.name}`);
};
return function (target, key) {
if (!validEnum) {
throw new Error(`Please provide a validEnum for ${target.constructor.name}}.${key}`);
}
if (defaultValue &&
!isArray &&
!Object.values(validEnum).includes(defaultValue)) {
throwError(target);
}
if (defaultValue && isArray && Array.isArray(defaultValue)) {
const allDefaultsValues = Object.values(defaultValue);
const invalidDefault = defaultValue.filter((value) => !allDefaultsValues.includes(value));
if (invalidDefault.length)
throwError(target);
}
if (optional)
(0, class_validator_1.IsOptional)()(target, key);
(0, commonDecoratorFunctions_1.notEmptyFn)(key)(target, key);
(0, commonDecoratorFunctions_1.isEnumFn)(key, validEnum, isArray)(target, key);
mySwaggerProp(target, key);
};
}
exports.CustomEnumValidator = CustomEnumValidator;
//# sourceMappingURL=enum.decorator.js.map