feat: robust error handling and type safety
Add type-safe error helpers and remove 'as any' casts. Changes: - Add isAbortError() helper for checking abort signals - Add getEventDetail() helper for CustomEvent extraction - Fix variable naming in isRetryable() (isAborted vs isAbortError) - Use proper instanceof checks instead of casting - Add proper interface for normalized response data - Type-safe tool execution error messages
This commit is contained in:
@@ -101,3 +101,30 @@ export function assert(condition: unknown, message?: string, silent?: boolean):
|
||||
throw new Error(errorMessage)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if an error is an AbortError (from AbortController)
|
||||
* Handles various forms: Error with name 'AbortError', or rawError property
|
||||
*/
|
||||
export function isAbortError(error: unknown): boolean {
|
||||
if (error instanceof Error && error.name === 'AbortError') return true
|
||||
if (
|
||||
typeof error === 'object' &&
|
||||
error !== null &&
|
||||
'rawError' in error &&
|
||||
(error as { rawError?: Error }).rawError?.name === 'AbortError'
|
||||
)
|
||||
return true
|
||||
return false
|
||||
}
|
||||
|
||||
/**
|
||||
* Safely extract detail from CustomEvent
|
||||
* @returns The detail object or null if not a CustomEvent
|
||||
*/
|
||||
export function getEventDetail<T>(event: Event): T | null {
|
||||
if (event instanceof CustomEvent) {
|
||||
return event.detail as T
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user