UNPKG

@nest-js/error-manager

Version:
131 lines (125 loc) 4.85 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); }; 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 ` <!DOCTYPE html> <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