UNPKG

@memory-bank/mcp

Version:

Memory-enabled Co-Pilot (MCP) server for managing project documentation and context

130 lines 5.36 kB
import { BaseError } from './BaseError.js'; /** * Error class for application layer * Used for use case execution errors and application flow errors */ export class ApplicationError extends BaseError { /** * Create a new ApplicationError * * @param code Error code (without prefix) * @param message Human-readable error message * @param details Additional error details * @param options Additional error options */ constructor(code, message, details, options) { super(`APP_ERROR.${code}`, message, details, options); } /** * Application errors may be either client or server errors * depending on the specific error code */ getHttpStatusCode() { const codeWithoutPrefix = this.code.replace('APP_ERROR.', ''); // Map specific error codes to HTTP status codes switch (codeWithoutPrefix) { case ApplicationErrorCodes.INVALID_INPUT: return 400; // Bad Request case ApplicationErrorCodes.UNAUTHORIZED: return 401; // Unauthorized case ApplicationErrorCodes.FORBIDDEN: return 403; // Forbidden case ApplicationErrorCodes.NOT_FOUND: return 404; // Not Found case ApplicationErrorCodes.CONFLICT: return 409; // Conflict case ApplicationErrorCodes.BRANCH_INITIALIZATION_FAILED: return 500; // Internal Server Error default: return 500; // Internal Server Error } } /** * Create a new ApplicationError with the same code but a new message * Useful for adding context to existing errors * * @param newMessage New error message * @param additionalDetails Additional details to merge with existing details */ withMessage(newMessage, additionalDetails) { const combinedDetails = { ...this.details, ...additionalDetails, originalMessage: this.message }; return new ApplicationError(this.code.replace('APP_ERROR.', ''), newMessage, combinedDetails, { cause: this.cause }); } } /** * Application error code constants */ export const ApplicationErrorCodes = { INVALID_INPUT: 'INVALID_INPUT', USE_CASE_EXECUTION_FAILED: 'USE_CASE_EXECUTION_FAILED', UNAUTHORIZED: 'UNAUTHORIZED', FORBIDDEN: 'FORBIDDEN', NOT_FOUND: 'NOT_FOUND', CONFLICT: 'CONFLICT', UNKNOWN_ERROR: 'UNKNOWN_ERROR', UNEXPECTED_CONTROLLER_ERROR: 'UNEXPECTED_CONTROLLER_ERROR', INVALID_STATE: 'INVALID_STATE', OPERATION_NOT_ALLOWED: 'OPERATION_NOT_ALLOWED', CONFIGURATION_ERROR: 'CONFIGURATION_ERROR', // Added VALIDATION_FAILED: 'VALIDATION_FAILED', // Added BRANCH_INITIALIZATION_FAILED: 'BRANCH_INITIALIZATION_FAILED', // Added for branch init errors }; /** * Factory functions for creating standard application errors */ export const ApplicationErrors = { /** * Create an invalid input error */ invalidInput: (message, additionalDetails) => { return new ApplicationError(ApplicationErrorCodes.INVALID_INPUT, message, additionalDetails); }, /** * Create a not found error */ notFound: (resource, id, additionalDetails) => { return new ApplicationError(ApplicationErrorCodes.NOT_FOUND, `${resource} with id ${id} was not found`, { resourceType: resource, resourceId: id, ...additionalDetails }); }, /** * Create an unauthorized error */ unauthorized: (message, additionalDetails) => { return new ApplicationError(ApplicationErrorCodes.UNAUTHORIZED, message, additionalDetails); }, /** * Create an execution failed error */ executionFailed: (useCaseName, cause, additionalDetails) => { return new ApplicationError(ApplicationErrorCodes.USE_CASE_EXECUTION_FAILED, `Execution of use case '${useCaseName}' failed`, { useCaseName, ...additionalDetails }, { cause }); }, /** * Create an unexpected controller error */ unexpectedControllerError: (controllerName, cause, additionalDetails) => { return new ApplicationError('UNEXPECTED_CONTROLLER_ERROR', // Assuming UNEXPECTED_CONTROLLER_ERROR is a valid code or needs to be added `An unexpected error occurred in controller '${controllerName}'`, { controllerName, ...additionalDetails }, { cause }); }, /** * Create a configuration error */ configurationError: (message, cause, additionalDetails) => { return new ApplicationError(ApplicationErrorCodes.CONFIGURATION_ERROR, message, additionalDetails, { cause }); }, /** * Create a validation failed error for use cases */ validationFailed: (useCaseName, message, additionalDetails) => { return new ApplicationError(ApplicationErrorCodes.VALIDATION_FAILED, `Validation failed in ${useCaseName}: ${message}`, { useCaseName, ...additionalDetails }); }, /** * Create a branch initialization failed error */ branchInitializationFailed: (branchName, cause, additionalDetails) => { return new ApplicationError(ApplicationErrorCodes.BRANCH_INITIALIZATION_FAILED, `Failed to initialize branch '${branchName}'`, { branchName, ...additionalDetails }, { cause }); } }; //# sourceMappingURL=ApplicationError.js.map