diff --git a/packages/http-client-csharp/emitter/src/code-model-writer.ts b/packages/http-client-csharp/emitter/src/code-model-writer.ts index 994d0bad2e7..5693d2bf253 100644 --- a/packages/http-client-csharp/emitter/src/code-model-writer.ts +++ b/packages/http-client-csharp/emitter/src/code-model-writer.ts @@ -20,6 +20,7 @@ export async function writeCodeModel( codeModel: CodeModel, outputFolder: string, ) { + await context.program.host.mkdirp(outputFolder); await context.program.host.writeFile( resolvePath(outputFolder, tspOutputFileName), prettierOutput(JSON.stringify(buildJson(context, codeModel), transformJSONProperties, 2)), @@ -104,6 +105,7 @@ export async function writeConfiguration( configurations: Configuration, outputFolder: string, ) { + await context.program.host.mkdirp(outputFolder); await context.program.host.writeFile( resolvePath(outputFolder, configurationFileName), prettierOutput(JSON.stringify(configurations, null, 2)), diff --git a/packages/http-client-csharp/emitter/test/Unit/emitter.test.ts b/packages/http-client-csharp/emitter/test/Unit/emitter.test.ts index 6755c79fde1..e9314af1a39 100644 --- a/packages/http-client-csharp/emitter/test/Unit/emitter.test.ts +++ b/packages/http-client-csharp/emitter/test/Unit/emitter.test.ts @@ -66,6 +66,7 @@ describe("$onEmit tests", () => { hasError: () => false, host: { writeFile: vi.fn(), + mkdirp: vi.fn(), rm: vi.fn(), }, tracer: { @@ -84,6 +85,13 @@ describe("$onEmit tests", () => { $onEmit = (await import("../../src/emitter.js")).$onEmit; }); + it("should ensure output folder exists before writing files", async () => { + const context: EmitContext = createEmitterContext(program); + await $onEmit(context); + // writeCodeModel and writeConfiguration each call mkdirp with the output folder + expect(program.host.mkdirp).toHaveBeenCalledWith(context.emitterOutputDir); + }); + it("should apply the update-code-model callback just once", async () => { const context: EmitContext = createEmitterContext(program); const updateCallback = vi.fn().mockImplementation((model: CodeModel) => {