@gabliam/validate-joi
Version:
Gabliam plugin for add validation with joi on web
56 lines (55 loc) • 2.59 kB
JavaScript
;
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;