@gabliam/validate-class
Version:
Gabliam plugin for add validation with joi on web
43 lines (42 loc) • 1.66 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ValidatePipe = void 0;
const tslib_1 = require("tslib");
const core_1 = require("@gabliam/core");
const classTransformer = tslib_1.__importStar(require("class-transformer"));
const classValidator = tslib_1.__importStar(require("class-validator"));
const metadatas_1 = require("../metadatas");
let ValidatePipe = class ValidatePipe {
constructor(options) {
this.options = options;
}
async transform(value, type) {
if (!type || !this.toValidate(type)) {
return value;
}
const entity = classTransformer.plainToClass(type, this.toEmptyIfNil(value), this.options.transformOptions);
const errors = await classValidator.validate(entity, this.options.validatorOptions);
if (errors.length > 0) {
throw this.options.exceptionFactory(errors, this.options.disableErrorMessages);
}
if (this.options.transform) {
return entity;
}
if (Object.keys(this.options.validatorOptions).length > 0) {
return classTransformer.classToPlain(entity, this.options.transformOptions);
}
return value;
}
toEmptyIfNil(value) {
return (0, core_1.isNil)(value) ? {} : value;
}
toValidate(type) {
const types = [String, Boolean, Number, Array, Object];
return !types.some((t) => type === t) && !(0, core_1.isNil)(type);
}
};
ValidatePipe = tslib_1.__decorate([
(0, core_1.Service)(),
tslib_1.__metadata("design:paramtypes", [metadatas_1.Validate])
], ValidatePipe);
exports.ValidatePipe = ValidatePipe;