diff --git a/packages/cli/src/ui/utils/updateCheck.test.ts b/packages/cli/src/ui/utils/updateCheck.test.ts index 1361add9df7..3898dfd44cb 100644 --- a/packages/cli/src/ui/utils/updateCheck.test.ts +++ b/packages/cli/src/ui/utils/updateCheck.test.ts @@ -659,22 +659,18 @@ describe('classifyUpdateCheckError', () => { expect(classifyUpdateCheckError(error)).toBe('timeout'); }); - it('classifies ETIMEDOUT errors as timeout', () => { - const error = new Error('request failed') as NodeJS.ErrnoException; - error.code = 'ETIMEDOUT'; - - expect(classifyUpdateCheckError(error)).toBe('timeout'); + it.each([ + 'ENOTFOUND', + 'ECONNREFUSED', + 'EAI_AGAIN', + 'ETIMEDOUT', + 'ENETUNREACH', + ])('classifies %s errors as offline', (code) => { + const error = new Error(`request failed`) as NodeJS.ErrnoException; + error.code = code; + expect(classifyUpdateCheckError(error)).toBe('offline'); }); - it.each(['ENOTFOUND', 'ECONNREFUSED', 'EAI_AGAIN', 'ENETUNREACH'])( - 'classifies %s errors as offline', - (code) => { - const error = new Error(`request failed`) as NodeJS.ErrnoException; - error.code = code; - expect(classifyUpdateCheckError(error)).toBe('offline'); - }, - ); - it('classifies network codes embedded in the message as offline', () => { // npm child-process failures surface the code inside stderr text only. expect( diff --git a/packages/cli/src/ui/utils/updateCheck.ts b/packages/cli/src/ui/utils/updateCheck.ts index 657b3dad5a9..a5e042dd51b 100644 --- a/packages/cli/src/ui/utils/updateCheck.ts +++ b/packages/cli/src/ui/utils/updateCheck.ts @@ -52,6 +52,7 @@ const NETWORK_ERROR_CODES = [ 'ENOTFOUND', 'ECONNREFUSED', 'EAI_AGAIN', + 'ETIMEDOUT', 'ENETUNREACH', ]; @@ -65,7 +66,16 @@ const NETWORK_ERROR_CODES = [ export function classifyUpdateCheckError( error: unknown, ): UpdateCheckFailureReason { + if (error instanceof UpdateCheckTimeoutError) return 'timeout'; if (error instanceof Error) { + if ( + 'killed' in error && + error.killed === true && + 'signal' in error && + error.signal === 'SIGTERM' + ) { + return 'timeout'; + } const errors = [error]; if (error.cause instanceof Error) errors.push(error.cause); const matchesCode = (code: string) => @@ -75,16 +85,6 @@ export function classifyUpdateCheckError( error.message.includes(code), ); - if ( - errors.some((error) => error instanceof UpdateCheckTimeoutError) || - ('killed' in error && - error.killed === true && - 'signal' in error && - error.signal === 'SIGTERM') || - matchesCode('ETIMEDOUT') - ) { - return 'timeout'; - } if (NETWORK_ERROR_CODES.some(matchesCode)) return 'offline'; } return 'registry';