@jsgurucompany/jsg-nestjs-common
Version:
Initial README.md
61 lines • 2.77 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.AppValidationPipe = void 0;
const common_1 = require("@nestjs/common");
let AppValidationPipe = class AppValidationPipe extends common_1.ValidationPipe {
constructor(options) {
super(options !== null && options !== void 0 ? options : {});
this.options = options;
this.classTransformer = this.loadTransformer();
this.classValidator = this.loadValidator();
}
throwException(errors) {
return this.exceptionFactory(errors);
}
async transform(value, metadata) {
const metatype = metadata.metatype;
const entity = this.classTransformer.plainToClass(metatype, value, this.transformOptions);
const rawErrors = await this.classValidator.validate(entity, this.validatorOptions);
if (rawErrors.length > 0) {
const errors = this.transformValidationErrors(rawErrors);
throw this.throwException(errors);
}
return value;
}
transformValidationErrors(initialErrors) {
if (!initialErrors) {
return [];
}
const errors = [];
this.resolveValidationErrors(errors, '', initialErrors);
return errors;
}
resolveValidationErrors(totalErrors, path = '', currentErrors) {
for (const error of currentErrors) {
const currentPath = `${path ? `${path}.` : ''}${error.property}`;
if (error.constraints) {
totalErrors.push({
property: currentPath,
value: error.value,
violations: error.constraints,
});
}
this.resolveValidationErrors(totalErrors, currentPath, error.children);
}
}
};
AppValidationPipe = __decorate([
(0, common_1.Injectable)(),
__metadata("design:paramtypes", [Object])
], AppValidationPipe);
exports.AppValidationPipe = AppValidationPipe;
//# sourceMappingURL=validation.pipe.js.map