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