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 000000000..1c0cccb32 --- /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 4c53c8b90..17dfb4526 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; } -- 2.51.2 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 000000000..e49dfbd50 --- /dev/null +++ b/.changeset/unlucky-foxes-arrive.md @@ -0,0 +1,5 @@ +--- +"@hey-api/openapi-ts": patch +--- + +fix(renderer): replace default import placeholder