@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
JavaScript
;
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