@russ-b/nestjs-common-tools
Version:
NestJS utility tools
38 lines • 1.7 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.classValidatorExceptionFactory = classValidatorExceptionFactory;
const common_1 = require("@nestjs/common");
const api_error_root_field_constant_1 = require("./api-error-root-field.constant");
const api_error_code_enum_1 = require("./api-error-code.enum");
const error_response_factory_1 = require("./error-response.factory");
const DEFAULT_VALIDATION_ERROR_MESSAGE = 'Validation failed';
function classValidatorExceptionFactory(errors, options = {}) {
return new common_1.BadRequestException((0, error_response_factory_1.createApiErrorResponse)({
statusCode: common_1.HttpStatus.BAD_REQUEST,
message: options.message ?? DEFAULT_VALIDATION_ERROR_MESSAGE,
code: api_error_code_enum_1.ApiErrorCode.VALIDATION_FAILED,
errors: flattenValidationErrors(errors),
}));
}
function flattenValidationErrors(errors, parentPath) {
const items = [];
for (const error of errors) {
const field = formatValidationErrorPath(error.property, parentPath);
if (error.constraints) {
for (const message of Object.values(error.constraints)) {
items.push({ field, message });
}
}
if (error.children?.length) {
items.push(...flattenValidationErrors(error.children, field));
}
}
return items;
}
function formatValidationErrorPath(property, parentPath) {
if (!property) {
return parentPath ?? api_error_root_field_constant_1.API_ERROR_ROOT_FIELD;
}
return parentPath ? `${parentPath}.${property}` : property;
}
//# sourceMappingURL=class-validator-exception.factory.js.map