(error: Error)
| 15 | * Classifies an error into a known type for appropriate handling. |
| 16 | */ |
| 17 | export function classifyError(error: Error): AppErrorType { |
| 18 | const message = error.message.toLowerCase(); |
| 19 | const name = error.name.toLowerCase(); |
| 20 | |
| 21 | // WebGL context lost |
| 22 | if ( |
| 23 | message.includes('context lost') || |
| 24 | message.includes('webgl') || |
| 25 | message.includes('gl_') |
| 26 | ) { |
| 27 | return 'webgl_context_lost'; |
| 28 | } |
| 29 | |
| 30 | // WebGL render errors (shader compilation, buffer issues, etc.) |
| 31 | if ( |
| 32 | message.includes('shader') || |
| 33 | message.includes('render') || |
| 34 | message.includes('draw') || |
| 35 | message.includes('buffer') || |
| 36 | message.includes('three') |
| 37 | ) { |
| 38 | return 'webgl_render_error'; |
| 39 | } |
| 40 | |
| 41 | // Image loading errors |
| 42 | if ( |
| 43 | message.includes('image') || |
| 44 | message.includes('load') || |
| 45 | message.includes('decode') || |
| 46 | message.includes('blob') |
| 47 | ) { |
| 48 | return 'image_load_error'; |
| 49 | } |
| 50 | |
| 51 | // Network errors |
| 52 | if ( |
| 53 | name.includes('networkerror') || |
| 54 | message.includes('fetch') || |
| 55 | message.includes('network') || |
| 56 | message.includes('timeout') || |
| 57 | message.includes('cors') |
| 58 | ) { |
| 59 | return 'network_error'; |
| 60 | } |
| 61 | |
| 62 | return 'unknown'; |
| 63 | } |
| 64 | |
| 65 | /** |
| 66 | * Determines the appropriate recovery strategy for an error type. |
no outgoing calls
no test coverage detected