UNPKG

@gabliam/validate-joi

Version:
56 lines (55 loc) 2.59 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ValidateInterceptor = void 0; const tslib_1 = require("tslib"); const core_1 = require("@gabliam/core"); const web_core_1 = require("@gabliam/web-core"); const metadatas_1 = require("../metadatas"); const validate_request_1 = require("./validate-request"); let ValidateInterceptor = class ValidateInterceptor { constructor(valueExtractor) { this.valueExtractor = valueExtractor; } async intercept(execCtx, req) { const target = execCtx.getConstructor(); const key = execCtx.getHandlerName(); const [metadata] = (core_1.reflection.propMetadataOfDecorator(target, metadatas_1.Validate)[key] || []).slice(-1); if (!metadata) { return; } let rules; let validationOptions = metadata.validationOptions; if (metadata.rules === undefined && metadata.validatorCreator) { const validator = (0, metadatas_1.constructValidator)(metadata.validatorCreator(this.valueExtractor)); rules = validator.rules; validationOptions = Object.assign(Object.assign({}, validationOptions), validator.validationOptions); // save rules and validationOptions in metadata for prevent validator construct on each call metadata.rules = rules; metadata.validationOptions = validationOptions; } else { // eslint-disable-next-line @typescript-eslint/no-non-null-assertion rules = metadata.rules; } const validateRequest = (0, validate_request_1.createValidateRequest)(rules, validationOptions); for (const paramToValidate of metadatas_1.listParamToValidate) { const val = validateRequest(paramToValidate, req[paramToValidate]); if (val !== validate_request_1.NO_VALIDATION) { req[paramToValidate] = val; } } } }; tslib_1.__decorate([ tslib_1.__param(0, (0, web_core_1.ExecContext)()), tslib_1.__param(1, (0, web_core_1.Request)()), tslib_1.__metadata("design:type", Function), tslib_1.__metadata("design:paramtypes", [web_core_1.ExecutionContext, Object]), tslib_1.__metadata("design:returntype", Promise) ], ValidateInterceptor.prototype, "intercept", null); ValidateInterceptor = tslib_1.__decorate([ (0, core_1.Service)(), tslib_1.__param(0, (0, core_1.inject)(core_1.VALUE_EXTRACTOR)), tslib_1.__metadata("design:paramtypes", [Function]) ], ValidateInterceptor); exports.ValidateInterceptor = ValidateInterceptor;