export function findBestErrorInChain()

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
}