UNPKG

@gabliam/validate-class

Version:
43 lines (42 loc) 1.66 kB
"use strict"; 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;