@gabliam/validate-joi
Version:
Gabliam plugin for add validation with joi on web
69 lines (68 loc) • 2.81 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Validate = exports.constructValidator = exports.listParamToValidate = exports.isValidatorConstructor = exports.isValidatorOptions = void 0;
/* eslint-disable @typescript-eslint/no-redeclare */
const core_1 = require("@gabliam/core");
const web_core_1 = require("@gabliam/web-core");
const constants_1 = require("../constants");
const validate_1 = require("../validate");
function isValidatorOptions(value) {
return (typeof value === 'object' &&
Object.prototype.hasOwnProperty.call(value, 'validator'));
}
exports.isValidatorOptions = isValidatorOptions;
function isValidatorConstructor(value) {
return typeof value === 'function';
}
exports.isValidatorConstructor = isValidatorConstructor;
// eslint-disable-next-line @typescript-eslint/naming-convention
const DEFAULT_VAlIDATION_OPTIONS = {
escapeHtml: true,
};
exports.listParamToValidate = [
'headers',
'params',
'query',
'body',
];
const constructValidator = (validator, options = {}) => {
const rules = new Map();
let realValidator;
if (isValidatorOptions(validator)) {
realValidator = validator.validator;
// eslint-disable-next-line no-param-reassign
options = validator.options || {};
}
else {
realValidator = validator;
}
const validationOptions = Object.assign(Object.assign({}, DEFAULT_VAlIDATION_OPTIONS), options);
for (const paramToValidate of exports.listParamToValidate) {
if (realValidator[paramToValidate]) {
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
rules.set(paramToValidate, core_1.Joi.compile(realValidator[paramToValidate]));
}
}
return { rules, validationOptions };
};
exports.constructValidator = constructValidator;
exports.Validate = (0, core_1.makePropDecorator)(constants_1.METADATA_KEY.validate, (validator, options = {}, useInterceptors = true) => {
var _a;
if (isValidatorOptions(validator)) {
// eslint-disable-next-line no-param-reassign
useInterceptors = (_a = validator.useInterceptors) !== null && _a !== void 0 ? _a : useInterceptors;
}
if (isValidatorConstructor(validator)) {
return {
rules: undefined,
validatorCreator: validator,
validationOptions: {},
useInterceptors,
};
}
return Object.assign(Object.assign({}, (0, exports.constructValidator)(validator, options)), { useInterceptors });
}, (target, propertyKey, descriptor, instance) => {
if (instance.useInterceptors) {
(0, web_core_1.UseInterceptors)(validate_1.ValidateInterceptor)(target, propertyKey, descriptor);
}
}, true, constants_1.ERRORS_MSGS.DUPLICATED_VALIDATE_DECORATOR);