UNPKG

@softkit/i18n

Version:

This library is a simple wrapper based on [nestjs-i18n](https://nestjs-i18n.com/)

80 lines 3.33 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.I18nValidationExceptionFilter = void 0; const tslib_1 = require("tslib"); const common_1 = require("@nestjs/common"); const iterare_1 = tslib_1.__importDefault(require("iterare")); const i18n_context_1 = require("../i18n.context"); const interfaces_1 = require("../interfaces"); const utils_1 = require("../utils"); let I18nValidationExceptionFilter = class I18nValidationExceptionFilter { constructor(options = { detailedErrors: true, }) { this.options = options; } catch(exception, host) { const i18n = i18n_context_1.I18nContext.current(); const errors = (0, utils_1.formatI18nErrors)(exception.errors ?? [], i18n?.service, { lang: i18n?.lang, }); const normalizedErrors = this.normalizeValidationErrors(errors); const hostType = host.getType(); if (hostType === 'http') { const response = host.switchToHttp().getResponse(); const responseBody = this.buildResponseBody(host, exception, normalizedErrors); return response .status(this.options.errorHttpStatusCode ?? exception.getStatus()) .send(responseBody); } else if (hostType === 'graphql') { exception.errors = normalizedErrors; return exception; } else { return new Error(`Unsupported host type: ${host.getType()}`); } } buildResponseBody(host, exc, errors) { return 'responseBodyFormatter' in this.options && this.options.responseBodyFormatter ? this.options.responseBodyFormatter(host, exc, errors) : { statusCode: this.options.errorHttpStatusCode === undefined ? exc.getStatus() : this.options.errorHttpStatusCode, message: exc.getResponse(), errors, }; } normalizeValidationErrors(validationErrors) { if (this.isWithErrorFormatter(this.options) && !('detailedErrors' in this.options) && this.options.errorFormatter) { return this.options.errorFormatter(validationErrors); } if (!this.isWithErrorFormatter(this.options) && !this.options.detailedErrors) { return this.flattenValidationErrors(validationErrors); } return validationErrors; } flattenValidationErrors(validationErrors) { return (0, iterare_1.default)(validationErrors) .map((error) => (0, utils_1.mapChildrenToValidationErrors)(error)) .flatten() .filter((item) => !!item.constraints) .map((item) => Object.values(item.constraints ?? {})) .flatten() .toArray(); } isWithErrorFormatter(options) { return 'errorFormatter' in options; } }; exports.I18nValidationExceptionFilter = I18nValidationExceptionFilter; exports.I18nValidationExceptionFilter = I18nValidationExceptionFilter = tslib_1.__decorate([ (0, common_1.Catch)(interfaces_1.I18nValidationException), tslib_1.__metadata("design:paramtypes", [Object]) ], I18nValidationExceptionFilter); //# sourceMappingURL=i18n-validation-exception.filter.js.map