All files / src/utils result.ts

0% Statements 0/8
0% Branches 0/5
0% Functions 0/5
0% Lines 0/8

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51                                                                                                     
// Result pattern for better error handling in services
export interface ServiceResult<T> {
  success: boolean;
  data?: T;
  error?: {
    code: string;
    message: string;
    details?: any;
  };
}
 
export class Result {
  static success<T>(data: T): ServiceResult<T> {
    return {
      success: true,
      data
    };
  }
 
  static failure<T>(code: string, message: string, details?: any): ServiceResult<T> {
    return {
      success: false,
      error: {
        code,
        message,
        details
      }
    };
  }
 
  static fromError<T>(error: Error, code: string = 'UNKNOWN_ERROR'): ServiceResult<T> {
    return {
      success: false,
      error: {
        code,
        message: error.message,
        details: error.stack
      }
    };
  }
}
 
// Type guard to check if result is successful
export function isSuccess<T>(result: ServiceResult<T>): result is ServiceResult<T> & { data: T } {
  return result.success && result.data !== undefined;
}
 
export function isFailure<T>(result: ServiceResult<T>): result is ServiceResult<T> & { error: NonNullable<ServiceResult<T>['error']> } {
  return !result.success && result.error !== undefined;
}