@nest-js/error-manager
Version:
NestJS error manager library
131 lines (125 loc) • 4.85 kB
JavaScript
"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);
};
var __param = (this && this.__param) || function (paramIndex, decorator) {
return function (target, key) { decorator(target, key, paramIndex); }
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.ErrorHtmlService = void 0;
const common_1 = require("@nestjs/common");
let ErrorHtmlService = class ErrorHtmlService {
constructor(errorConfig) {
this.errorConfig = errorConfig;
}
generateErrorHtml(errorType, errorDescription) {
const normalizedType = errorType.toLowerCase();
const title = this.formatErrorTypeToTitle(normalizedType);
const description = errorDescription || this.getDefaultDescription(normalizedType);
return `
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Error: ${title}</title>
<style>
body {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
line-height: 1.6;
color: #333;
max-width: 800px;
margin: 0 auto;
padding: 20px;
}
h1 {
color: #e53935;
border-bottom: 1px solid #eee;
padding-bottom: 10px;
}
h2 {
color: #424242;
margin-top: 30px;
}
.error-box {
background-color: #f5f5f5;
border-left: 4px solid #e53935;
padding: 15px;
margin: 20px 0;
border-radius: 0 4px 4px 0;
}
code {
background-color: #f1f1f1;
padding: 2px 5px;
border-radius: 3px;
font-family: monospace;
}
.example {
background-color: #f8f9fa;
padding: 15px;
border-radius: 4px;
overflow-x: auto;
}
</style>
</head>
<body>
<h1>Error: ${title}</h1>
<div class="error-box">
<p><strong>Tipo:</strong> ${normalizedType}</p>
</div>
<h2>Descripción</h2>
<p>${description}</p>
<h2>Formato de respuesta</h2>
<p>Este error sigue el estándar <a href="https://datatracker.ietf.org/doc/html/rfc7807" target="_blank">RFC 7807 Problem Details</a> y devuelve una respuesta con el siguiente formato:</p>
<pre class="example">{
"type": "https://api.example.com/errors/${normalizedType}",
"title": "${title}",
"status": [código HTTP correspondiente],
"detail": "Descripción detallada del error",
"instance": "/ruta/donde/ocurrió/el/error",
"timestamp": "2023-07-21T15:30:45.123Z",
"traceId": "${normalizedType}-uuid"
}</pre>
<h2>Posibles soluciones</h2>
<ul>
${this.getPossibleSolutions(normalizedType)}
</ul>
<h2>Información adicional</h2>
<p>Si necesitas más ayuda con este error, contacta al equipo de soporte proporcionando el <code>traceId</code> incluido en la respuesta.</p>
</body>
</html>
`;
}
formatErrorTypeToTitle(errorType) {
return errorType
.split('_')
.map(word => word.charAt(0).toUpperCase() + word.slice(1))
.join(' ');
}
getDefaultDescription(errorType) {
return (this.errorConfig.descriptions[errorType] ||
'Error en la aplicación. Contacta al equipo de soporte si el problema persiste.');
}
getPossibleSolutions(errorType) {
const errorSolutions = this.errorConfig.solutions[errorType] || [
'Contacta al equipo de soporte proporcionando el traceId',
'Verifica la documentación de la API para más información',
];
return errorSolutions
.map(solution => `<li>${solution}</li>`)
.join('\n ');
}
};
exports.ErrorHtmlService = ErrorHtmlService;
exports.ErrorHtmlService = ErrorHtmlService = __decorate([
(0, common_1.Injectable)(),
__param(0, (0, common_1.Inject)('ERROR_CONFIG')),
__metadata("design:paramtypes", [Object])
], ErrorHtmlService);
//# sourceMappingURL=error-html.service.js.map