diff --git a/packages/core/src/fs-util.ts b/packages/core/src/fs-util.ts index eb68627a55c3..93a551c9b0a2 100644 --- a/packages/core/src/fs-util.ts +++ b/packages/core/src/fs-util.ts @@ -114,7 +114,14 @@ export namespace FSUtil { }) const ensureDir = Effect.fn("FileSystem.ensureDir")(function* (path: string) { - yield* fs.makeDirectory(path, { recursive: true }) + yield* fs.makeDirectory(path, { recursive: true }).pipe( + // Bun on Windows can throw EEXIST here despite recursive mode. + // https://github.com/oven-sh/bun/issues/21901 + Effect.catchIf( + (error) => error.reason._tag === "AlreadyExists", + (error) => isDir(path).pipe(Effect.flatMap((exists) => (exists ? Effect.void : Effect.fail(error)))), + ), + ) }) const writeWithDirs = Effect.fn("FileSystem.writeWithDirs")(function* (