UNPKG

@expressots/core

Version:

Expressots - modern, fast, lightweight nodejs web framework (@core)

53 lines (52 loc) 2.2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ValidateDTO = ValidateDTO; require("reflect-metadata"); const status_code_1 = require("../../error/status-code"); const package_resolver_1 = require("./package-resolver"); const logger_provider_1 = require("../logger/logger.provider"); /** * Validate the DTO using class-validator and class-transformer. * @param type - The type of the DTO to validate. * @returns A RequestHandler function. * @throws An exception if the DTO is invalid. * @public API */ function ValidateDTO(type) { return async (req, res, next) => { const logger = new logger_provider_1.Logger(); const classValidator = await (0, package_resolver_1.packageResolver)("class-validator"); const classTransformer = await (0, package_resolver_1.packageResolver)("class-transformer"); if (!classValidator || !classTransformer) { return next(); } try { const errors = await classValidator.validate(classTransformer.plainToClass(type, req.body)); if (errors.length > 0) { const DTO = errors.reduce((acc, error) => { if (error.constraints) { const propertyName = error.property; if (!acc.some((e) => e.property === propertyName)) { acc.push({ property: propertyName, messages: [] }); } const target = acc.find((e) => e.property === propertyName); target.messages.push(...Object.values(error.constraints)); } return acc; }, []); res.status(status_code_1.StatusCode.BadRequest).json({ errorCode: status_code_1.StatusCode.BadRequest, errorMessage: "Bad Request", DTO, }); } else { next(); } } catch (error) { logger.error(`An exception occurred while validating the DTO: ${error}`, "validate-dto-provider"); next(error); } }; }