From 7aaa5b1854e5adca9e9d408a26cc240c31efd260 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 22 Sep 2025 12:29:17 +0000 Subject: [PATCH 1/3] Initial plan From 8098b5f47c4c4e54aedce3fb20c03763f901e288 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 22 Sep 2025 12:43:26 +0000 Subject: [PATCH 2/3] Fix default import placeholder replacement in TypeScript renderer Co-authored-by: mrlubos <12529395+mrlubos@users.noreply.github.com> --- .../src/generate/__tests__/renderer.test.ts | 47 +++++++++++++++++++ packages/openapi-ts/src/generate/renderer.ts | 9 +++- 2 files changed, 55 insertions(+), 1 deletion(-) create mode 100644 packages/openapi-ts/src/generate/__tests__/renderer.test.ts diff --git a/packages/openapi-ts/src/generate/__tests__/renderer.test.ts b/packages/openapi-ts/src/generate/__tests__/renderer.test.ts new file mode 100644 index 0000000000..1c0cccb32c --- /dev/null +++ b/packages/openapi-ts/src/generate/__tests__/renderer.test.ts @@ -0,0 +1,47 @@ +import { describe, expect, it } from 'vitest'; + +import { TypeScriptRenderer } from '../renderer'; + +describe('TypeScriptRenderer', () => { + describe('default import placeholder replacement', () => { + it('should replace placeholders in default imports correctly', () => { + const renderer = new TypeScriptRenderer(); + + // Create a mock project with symbols that have placeholders + const project = { + symbolIdToFiles: () => [], + symbols: new Map(), + } as any; + + // Create a symbol with a placeholder + const symbolId = 95; + const symbol = { + id: symbolId, + name: 'foo', + placeholder: '_heyapi_95_', + }; + project.symbols.set(symbolId, symbol); + + // Create a mock file + const file = { + resolvedNames: new Map([[symbolId, 'foo']]), + } as any; + + // Create bindings with a default import that has a placeholder + const bindings = new Map(); + bindings.set('foo', { + aliases: {}, + defaultBinding: '_heyapi_95_', // Contains placeholder that should be replaced + from: 'foo', + names: [], + typeNames: [], + }); + + // Generate import lines + const importLines = renderer['getImportLines'](bindings, file, project); + + // The import should use 'foo' not '_heyapi_95_' + expect(importLines).toEqual(["import foo from 'foo';"]); + }); + }); +}); diff --git a/packages/openapi-ts/src/generate/renderer.ts b/packages/openapi-ts/src/generate/renderer.ts index 4c53c8b901..17dfb4526f 100644 --- a/packages/openapi-ts/src/generate/renderer.ts +++ b/packages/openapi-ts/src/generate/renderer.ts @@ -281,7 +281,14 @@ export class TypeScriptRenderer implements Renderer { let isTypeOnly = false; if (value.defaultBinding) { - defaultBinding = tsc.identifier({ text: value.defaultBinding }); + const processedDefaultBinding = renderIds( + value.defaultBinding, + (symbolId) => { + const symbol = project.symbols.get(symbolId); + return this.replacerFn({ file, project, symbol }); + }, + ); + defaultBinding = tsc.identifier({ text: processedDefaultBinding }); if (value.typeDefaultBinding) { isTypeOnly = true; } From 762b20e6c8b90d7011ce24a193a66b18e4f74136 Mon Sep 17 00:00:00 2001 From: Lubos Date: Mon, 22 Sep 2025 21:00:08 +0800 Subject: [PATCH 3/3] Fix default import placeholder in openapi-ts --- .changeset/unlucky-foxes-arrive.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/unlucky-foxes-arrive.md diff --git a/.changeset/unlucky-foxes-arrive.md b/.changeset/unlucky-foxes-arrive.md new file mode 100644 index 0000000000..e49dfbd500 --- /dev/null +++ b/.changeset/unlucky-foxes-arrive.md @@ -0,0 +1,5 @@ +--- +"@hey-api/openapi-ts": patch +--- + +fix(renderer): replace default import placeholder