52 lines
1.7 KiB
JavaScript
52 lines
1.7 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.AppError = void 0;
|
|
exports.errorHandler = errorHandler;
|
|
const zod_1 = require("zod");
|
|
const logger_1 = require("../utils/logger");
|
|
const env_1 = require("../config/env");
|
|
class AppError extends Error {
|
|
statusCode;
|
|
code;
|
|
constructor(statusCode, message, code) {
|
|
super(message);
|
|
this.statusCode = statusCode;
|
|
this.code = code;
|
|
this.name = 'AppError';
|
|
}
|
|
}
|
|
exports.AppError = AppError;
|
|
function errorHandler(err, _req, res, _next) {
|
|
if (err instanceof AppError) {
|
|
res.status(err.statusCode).json({
|
|
error: {
|
|
message: err.message,
|
|
code: err.code,
|
|
},
|
|
});
|
|
return;
|
|
}
|
|
if (err instanceof zod_1.ZodError) {
|
|
const fieldErrors = err.flatten().fieldErrors;
|
|
const errorCount = Object.keys(fieldErrors).length;
|
|
res.status(400).json({
|
|
error: {
|
|
message: 'Validation error',
|
|
code: 'VALIDATION_ERROR',
|
|
// Only expose details in development
|
|
...(env_1.env.NODE_ENV === 'development' && { details: fieldErrors }),
|
|
// In production, only show count
|
|
...(env_1.env.NODE_ENV === 'production' && { fieldCount: errorCount }),
|
|
},
|
|
});
|
|
return;
|
|
}
|
|
logger_1.logger.error('Unhandled error:', err);
|
|
res.status(500).json({
|
|
error: {
|
|
message: env_1.env.NODE_ENV === 'production' ? 'Internal server error' : err.message,
|
|
code: 'INTERNAL_ERROR',
|
|
},
|
|
});
|
|
}
|
|
//# sourceMappingURL=error-handler.js.map
|