error-response-handler
Version:
Comprehensive error handling and response formatting for Node.js applications
54 lines (53 loc) • 1.97 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.errorResponse = exports.AppError = void 0;
const statusCodes_1 = require("./statusCodes");
const resolveStatusCode = (input) => {
// Handle number inputs
if (typeof input === 'number') {
const found = Object.values(statusCodes_1.StatusCode).find((sc) => sc.code === input);
return found || {
code: 500,
text: `Internal Server Error`
};
}
// Handle string inputs (StatusCodeKey)
if (typeof input === 'string') {
if (!(input in statusCodes_1.StatusCode)) {
throw new Error(`Invalid status code key: ${input}`);
}
return statusCodes_1.StatusCode[input];
}
// Handle direct StatusCodeValue inputs
return input;
};
class AppError extends Error {
constructor(message, status = statusCodes_1.StatusCode.INTERNAL_SERVER_ERROR, isOperational = true) {
super(message);
const { code, text } = resolveStatusCode(status);
this.statusCode = code;
this.statusText = text;
this.isOperational = isOperational;
this.timestamp = new Date().toISOString();
if (typeof Error.captureStackTrace === 'function') {
Error.captureStackTrace(this, this.constructor);
}
}
}
exports.AppError = AppError;
const errorResponse = (options) => {
const { code, text } = resolveStatusCode(options.statusCode || statusCodes_1.StatusCode.INTERNAL_SERVER_ERROR);
const isDev = options.isDev ?? false;
return {
success: false,
message: options.message || text,
error: isDev ? options.error : undefined,
statusCode: code,
statusText: text,
timestamp: new Date().toISOString(),
stack: (isDev && options.includeStack && options.error instanceof Error)
? options.error.stack
: undefined,
};
};
exports.errorResponse = errorResponse;