diff --git a/src/generators/jsx-ast/utils/__tests__/buildSignature.test.mjs b/src/generators/jsx-ast/utils/__tests__/buildSignature.test.mjs new file mode 100644 index 00000000..f65d7e6f --- /dev/null +++ b/src/generators/jsx-ast/utils/__tests__/buildSignature.test.mjs @@ -0,0 +1,45 @@ +import assert from 'node:assert/strict'; +import { describe, it } from 'node:test'; + +import { generateSignature } from '../buildSignature.mjs'; + +describe('generateSignature', () => { + it('formats union return types without spaces as spaced ("|" surrounded)', () => { + const sig = generateSignature( + 'foo', + { + params: [], + return: { type: 'string|number' }, + }, + '' + ); + + assert.equal(sig, 'foo(): string | number'); + }); + + it('preserves already spaced union return types', () => { + const sig = generateSignature( + 'bar', + { + params: [], + return: { type: 'Promise | undefined' }, + }, + '' + ); + + assert.equal(sig, 'bar(): Promise | undefined'); + }); + + it('omits return type when undefined', () => { + const sig = generateSignature( + 'baz', + { + params: [], + return: undefined, + }, + '' + ); + + assert.equal(sig, 'baz()'); + }); +}); diff --git a/src/generators/jsx-ast/utils/buildSignature.mjs b/src/generators/jsx-ast/utils/buildSignature.mjs index b6ba238a..e649b66e 100644 --- a/src/generators/jsx-ast/utils/buildSignature.mjs +++ b/src/generators/jsx-ast/utils/buildSignature.mjs @@ -23,7 +23,11 @@ export const generateSignature = ( } // Function or method - const returnStr = returnType ? `: ${returnType.type}` : ''; + const returnStr = (returnType ? `: ${returnType.type}` : '') + .split('|') + .map(part => part.trim()) + .filter(Boolean) + .join(' | '); const paramsStr = params .map(param => {