From 7d68477e50c3805c7ab2749ef57de715f5633405 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Sun, 15 Feb 2026 02:32:35 +0000 Subject: [PATCH] feat: propagate write errors in writer.ts - Modify WriteResult interface to include optional error property - Update appendToEnv, syncExampleFile, and generateTypeDefinitions to return error on failure - Update ui.ts to log write errors - Add test case for write failure in writer.test.ts Co-authored-by: KevinArce <83199462+KevinArce@users.noreply.github.com> --- src/ui.ts | 3 +++ src/writer.ts | 9 +++++---- tests/writer.test.ts | 11 +++++++++++ 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/ui.ts b/src/ui.ts index 9380317..bdbd062 100644 --- a/src/ui.ts +++ b/src/ui.ts @@ -152,6 +152,9 @@ export async function runWizard( if (!writeResult.success) { s.stop("Failed to write .env file."); + if (writeResult.error) { + console.error(`Error details: ${writeResult.error.message}`); + } cancel("Could not write to .env file."); return; } diff --git a/src/writer.ts b/src/writer.ts index b9f71d9..0afb36d 100644 --- a/src/writer.ts +++ b/src/writer.ts @@ -5,6 +5,7 @@ export interface WriteResult { success: boolean; path: string; keysWritten: number; + error?: Error; } /** @@ -43,7 +44,7 @@ export function appendToEnv( fs.appendFileSync(absolutePath, content); return { success: true, path: absolutePath, keysWritten: entries.length }; } catch (error) { - return { success: false, path: absolutePath, keysWritten: 0 }; + return { success: false, path: absolutePath, keysWritten: 0, error: error as Error }; } } @@ -93,8 +94,8 @@ export function syncExampleFile( try { fs.appendFileSync(absolutePath, content); return { success: true, path: absolutePath, keysWritten: newKeys.length }; - } catch { - return { success: false, path: absolutePath, keysWritten: 0 }; + } catch (error) { + return { success: false, path: absolutePath, keysWritten: 0, error: error as Error }; } } @@ -137,6 +138,6 @@ export function generateTypeDefinitions( fs.writeFileSync(absolutePath, content); return { success: true, path: absolutePath, keysWritten: sortedKeys.length }; } catch (error) { - return { success: false, path: absolutePath, keysWritten: 0 }; + return { success: false, path: absolutePath, keysWritten: 0, error: error as Error }; } } diff --git a/tests/writer.test.ts b/tests/writer.test.ts index 587d5e6..3c91fa2 100644 --- a/tests/writer.test.ts +++ b/tests/writer.test.ts @@ -59,6 +59,17 @@ describe("Writer", () => { expect(result.success).toBe(true); expect(result.keysWritten).toBe(0); }); + + it("should return error when writing fails", () => { + // Create a directory where the file should be to force a write error + // (EISDIR: illegal operation on a directory, open ...) + fs.mkdirSync(path.join(tempDir, ".env")); + + const result = appendToEnv(".env", { KEY: "value" }); + + expect(result.success).toBe(false); + expect(result.error).toBeDefined(); + }); }); describe("syncExampleFile", () => {