From b5273b596af82228f8a9dbfd636f7eba207e68fa Mon Sep 17 00:00:00 2001 From: Jannis Braun <151788261+TheZwiss@users.noreply.github.com> Date: Sun, 3 May 2026 04:07:46 +0200 Subject: [PATCH] feat(desktop): add extractErrorCode helper for updater errors --- packages/desktop/src/recovery.test.ts | 30 ++++++++++++++++++++++++++- packages/desktop/src/recovery.ts | 8 +++++++ 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/packages/desktop/src/recovery.test.ts b/packages/desktop/src/recovery.test.ts index 97b540e0..3164662e 100644 --- a/packages/desktop/src/recovery.test.ts +++ b/packages/desktop/src/recovery.test.ts @@ -1,5 +1,5 @@ import { describe, it, expect, vi } from 'vitest'; -import { RecoveryStateStore, type RecoveryState } from './recovery'; +import { RecoveryStateStore, extractErrorCode, type RecoveryState } from './recovery'; describe('RecoveryStateStore', () => { it('returns the initial state', () => { @@ -104,3 +104,31 @@ describe('RecoveryStateStore', () => { expect(Object.isFrozen(s)).toBe(true); }); }); + +describe('extractErrorCode', () => { + it('extracts string code from Error-like object', () => { + const err = new Error('boom') as Error & { code: string }; + err.code = 'ENOSPC'; + expect(extractErrorCode(err)).toBe('ENOSPC'); + }); + + it('returns null for Error without code', () => { + expect(extractErrorCode(new Error('boom'))).toBeNull(); + }); + + it('returns null when code is non-string', () => { + const err = { code: 42 }; + expect(extractErrorCode(err)).toBeNull(); + }); + + it('returns null for null/undefined/primitives', () => { + expect(extractErrorCode(null)).toBeNull(); + expect(extractErrorCode(undefined)).toBeNull(); + expect(extractErrorCode('string')).toBeNull(); + expect(extractErrorCode(42)).toBeNull(); + }); + + it('handles plain objects with code', () => { + expect(extractErrorCode({ code: 'NET_FAIL' })).toBe('NET_FAIL'); + }); +}); diff --git a/packages/desktop/src/recovery.ts b/packages/desktop/src/recovery.ts index edde5074..1d83e95d 100644 --- a/packages/desktop/src/recovery.ts +++ b/packages/desktop/src/recovery.ts @@ -71,3 +71,11 @@ export class RecoveryStateStore { } export const recoveryStore = new RecoveryStateStore(); + +export function extractErrorCode(err: unknown): string | null { + if (typeof err === 'object' && err !== null && 'code' in err) { + const code = (err as { code: unknown }).code; + return typeof code === 'string' ? code : null; + } + return null; +}