UNPKG

@gabliam/validate-joi

Version:
69 lines (68 loc) 2.81 kB
"use strict"; 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);