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; } |