claude-flow-novice
Version:
Claude Flow Novice - Advanced orchestration platform for multi-agent AI workflows with CFN Loop architecture Includes Local RuVector Accelerator and all CFN skills for complete functionality.
120 lines (119 loc) • 3.62 kB
JavaScript
/**
* Database Error Handling Utilities
*
* Provides standardized error handling for database operations.
* Part of Task 0.4: Database Query Abstraction Layer (MVP)
*/ /**
* Database error codes
*/ export var DatabaseErrorCode = /*#__PURE__*/ function(DatabaseErrorCode) {
DatabaseErrorCode["CONNECTION_FAILED"] = "DB_CONNECTION_FAILED";
DatabaseErrorCode["QUERY_FAILED"] = "DB_QUERY_FAILED";
DatabaseErrorCode["TRANSACTION_FAILED"] = "DB_TRANSACTION_FAILED";
DatabaseErrorCode["VALIDATION_FAILED"] = "DB_VALIDATION_FAILED";
DatabaseErrorCode["NOT_FOUND"] = "DB_NOT_FOUND";
DatabaseErrorCode["DUPLICATE_KEY"] = "DB_DUPLICATE_KEY";
DatabaseErrorCode["TIMEOUT"] = "DB_TIMEOUT";
DatabaseErrorCode["CONSTRAINT_VIOLATION"] = "DB_CONSTRAINT_VIOLATION";
DatabaseErrorCode["UNKNOWN_ERROR"] = "DB_UNKNOWN_ERROR";
return DatabaseErrorCode;
}({});
/**
* Create standardized database error
*/ export function createDatabaseError(code, message, originalError, context) {
return {
code,
message,
originalError,
context
};
}
/**
* Create failed operation result
*/ export function createFailedResult(error) {
return {
success: false,
error
};
}
/**
* Create successful operation result
*/ export function createSuccessResult(data, rowsAffected, insertId) {
return {
success: true,
data,
rowsAffected,
insertId
};
}
/**
* Wrap database operation with error handling
*/ export async function wrapDatabaseOperation(operation, errorCode, errorMessage, context) {
try {
const data = await operation();
return createSuccessResult(data);
} catch (err) {
const error = createDatabaseError(errorCode, errorMessage, err instanceof Error ? err : new Error(String(err)), context);
return createFailedResult(error);
}
}
/**
* Check if error is a specific database error code
*/ export function isDatabaseError(error, code) {
return error && typeof error === 'object' && error.code === code;
}
/**
* Map SQLite error to database error code
*/ export function mapSQLiteError(error) {
const message = error.message.toLowerCase();
if (message.includes('unique constraint')) {
return "DB_DUPLICATE_KEY";
}
if (message.includes('foreign key constraint')) {
return "DB_CONSTRAINT_VIOLATION";
}
if (message.includes('not found')) {
return "DB_NOT_FOUND";
}
if (message.includes('timeout')) {
return "DB_TIMEOUT";
}
return "DB_QUERY_FAILED";
}
/**
* Map PostgreSQL error to database error code
*/ export function mapPostgresError(error) {
const code = error.code;
// PostgreSQL error codes
if (code === '23505') {
return "DB_DUPLICATE_KEY";
}
if (code === '23503') {
return "DB_CONSTRAINT_VIOLATION";
}
if (code === '42P01') {
return "DB_NOT_FOUND";
}
if (code === '57014') {
return "DB_TIMEOUT";
}
if (code?.startsWith('08')) {
return "DB_CONNECTION_FAILED";
}
return "DB_QUERY_FAILED";
}
/**
* Map Redis error to database error code
*/ export function mapRedisError(error) {
const message = error.message.toLowerCase();
if (message.includes('connection')) {
return "DB_CONNECTION_FAILED";
}
if (message.includes('timeout')) {
return "DB_TIMEOUT";
}
if (message.includes('not found') || message.includes('nil')) {
return "DB_NOT_FOUND";
}
return "DB_QUERY_FAILED";
}
//# sourceMappingURL=errors.js.map