UNPKG

@khoativi/nestjs-class-validator-i18n

Version:

NestJS integration for class-validator with i18n support using Accept-Language headers and customizable locale files.

45 lines 2.4 kB
"use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.I18nValidationFilter = void 0; const common_1 = require("@nestjs/common"); const core_1 = require("@nestjs/core"); const i18n_1 = require("./i18n"); const i18n_validation_exception_1 = require("./i18n-validation.exception"); let I18nValidationFilter = class I18nValidationFilter { adapterHost; i18n; fallback; constructor(adapterHost, opts = {}) { this.adapterHost = adapterHost; this.fallback = opts.fallbackLanguage ?? 'en'; this.i18n = new i18n_1.I18n(this.fallback); } catch(exception, host) { const { httpAdapter } = this.adapterHost; const ctx = host.switchToHttp(); const req = ctx.getRequest(); const res = ctx.getResponse(); const lang = req.headers?.['accept-language']?.toLowerCase() || this.fallback; const messages = exception.validationErrors.flatMap((err) => Object.entries(err.constraints || {}).map(([key]) => this.i18n.translate(lang, key, err.property, err.contexts?.[key]?.constraints || []))); httpAdapter.reply(res, { statusCode: exception.getStatus(), message: messages[0] ?? 'Validation failed', error: 'Bad Request' }, exception.getStatus()); } }; exports.I18nValidationFilter = I18nValidationFilter; exports.I18nValidationFilter = I18nValidationFilter = __decorate([ (0, common_1.Catch)(i18n_validation_exception_1.I18nValidationException), __metadata("design:paramtypes", [core_1.HttpAdapterHost, Object]) ], I18nValidationFilter); //# sourceMappingURL=i18n-validation.filter.js.map