in packages/core/src/shared/errors.ts [525:565]
export function findBestErrorInChain(error: Error, preferredErrors = _preferredErrors): Error | undefined {
// TODO: Base Error has 'cause' in ES2022. So does our own `ToolkitError`.
// eslint-disable-next-line @typescript-eslint/naming-convention
let bestErr: Error & { code?: string; cause?: Error; error_description?: string } = error
let err: typeof bestErr | undefined
for (let i = 0; i < 100; i++) {
err = i === 0 ? bestErr.cause : err?.cause
if (!err) {
break
}
// const bestErrCode = bestErr.code?.trim() ?? ''
// const preferBest = ...
const errCode = err.code?.trim() ?? ''
const prefer =
(errCode !== '' && preferredErrors.some((re) => re.test(errCode))) ||
// In priority order:
isFilesystemError(err) ||
isPermissionsError(err)
if (isAwsError(err) || (prefer && !isAwsError(bestErr))) {
if (isAwsError(err) && !isAwsError(bestErr)) {
bestErr = err // Prefer AWSError.
continue
}
const errDesc = err.error_description
if (typeof errDesc === 'string' && errDesc.trim() !== '') {
bestErr = err // Prefer (deepest) error with error_description.
continue
}
if (!bestErr.error_description && prefer) {
bestErr = err
}
}
}
return bestErr
}