From d47040555f30a2f552108f8d01c1cdd2df679180 Mon Sep 17 00:00:00 2001 From: Lucas Coratger <73360179+coratgerl@users.noreply.github.com> Date: Sun, 19 Apr 2026 10:55:40 +0200 Subject: [PATCH] fix(wabe): codegen for fiel fields --- .../wabe/src/server/generateCodegen.test.ts | 30 +++++++------------ packages/wabe/src/server/generateCodegen.ts | 14 ++++----- 2 files changed, 16 insertions(+), 28 deletions(-) diff --git a/packages/wabe/src/server/generateCodegen.test.ts b/packages/wabe/src/server/generateCodegen.test.ts index 0b461a45..2840571d 100644 --- a/packages/wabe/src/server/generateCodegen.test.ts +++ b/packages/wabe/src/server/generateCodegen.test.ts @@ -66,30 +66,20 @@ describe('Format helpers', () => { }) describe('getFileOutputTypeString', () => { - it('should use comma separator by default', () => { + it('should use semicolon separators for inline object members', () => { expect(getFileOutputTypeString()).toBe( - '{ name: string, url?: string, urlGeneratedAt?: string, isPresignedUrl: boolean }', - ) - }) - - it('should use semicolon separator when semi is true', () => { - expect(getFileOutputTypeString({ semi: true })).toBe( '{ name: string; url?: string; urlGeneratedAt?: string; isPresignedUrl: boolean }', ) + expect(getFileOutputTypeString({ semi: true })).toBe(getFileOutputTypeString()) }) }) describe('getFileInputTypeString', () => { - it('should return an XOR union (file | url+name) with comma separator by default', () => { + it('should return an XOR union (file | url+name) with semicolon separators', () => { expect(getFileInputTypeString()).toBe( - '{ file: File, url?: never, name?: never } | { file?: never, url: string, name: string }', - ) - }) - - it('should return an XOR union (file | url+name) with semicolon separator when semi is true', () => { - expect(getFileInputTypeString({ semi: true })).toBe( '{ file: File; url?: never; name?: never } | { file?: never; url: string; name: string }', ) + expect(getFileInputTypeString({ semi: true })).toBe(getFileInputTypeString()) }) }) @@ -131,11 +121,11 @@ describe('wabeTypesToTypescriptTypes', () => { it('should return File output type object by default', () => { expect(wabeTypesToTypescriptTypes({ field: mkField({ type: 'File' }) })).toBe( - '{ name: string, url?: string, urlGeneratedAt?: string, isPresignedUrl: boolean }', + '{ name: string; url?: string; urlGeneratedAt?: string; isPresignedUrl: boolean }', ) }) - it('should return File output type with semi format', () => { + it('should return File output type with same inline separators when semi is set on formatOptions', () => { expect( wabeTypesToTypescriptTypes({ field: mkField({ type: 'File' }), @@ -151,11 +141,11 @@ describe('wabeTypesToTypescriptTypes', () => { isInput: true, }), ).toBe( - '{ file: File, url?: never, name?: never } | { file?: never, url: string, name: string }', + '{ file: File; url?: never; name?: never } | { file?: never; url: string; name: string }', ) }) - it('should return File input type with semi format when isInput', () => { + it('should return File input type with same inline separators when isInput and semi formatOptions', () => { expect( wabeTypesToTypescriptTypes({ field: mkField({ type: 'File' }), @@ -199,7 +189,7 @@ describe('wabeTypesToTypescriptTypes', () => { field: mkField({ type: 'Array', typeValue: 'File' }), }), ).toBe( - 'Array<{ name: string, url?: string, urlGeneratedAt?: string, isPresignedUrl: boolean }>', + 'Array<{ name: string; url?: string; urlGeneratedAt?: string; isPresignedUrl: boolean }>', ) }) @@ -210,7 +200,7 @@ describe('wabeTypesToTypescriptTypes', () => { isInput: true, }), ).toBe( - 'Array<{ file: File, url?: never, name?: never } | { file?: never, url: string, name: string }>', + 'Array<{ file: File; url?: never; name?: never } | { file?: never; url: string; name: string }>', ) }) diff --git a/packages/wabe/src/server/generateCodegen.ts b/packages/wabe/src/server/generateCodegen.ts index a018f55e..f750e29c 100644 --- a/packages/wabe/src/server/generateCodegen.ts +++ b/packages/wabe/src/server/generateCodegen.ts @@ -46,15 +46,13 @@ export const getEndChar = (options?: CodegenFormatOptions): string => export const getQuoteChar = (options?: CodegenFormatOptions): string => options?.quote === 'double' ? '"' : "'" -export const getFileOutputTypeString = (options?: CodegenFormatOptions) => { - const sep = options?.semi ? '; ' : ', ' - return `{ name: string${sep}url?: string${sep}urlGeneratedAt?: string${sep}isPresignedUrl: boolean }` -} +const inlineObjectTypeMemberSep = '; ' -export const getFileInputTypeString = (options?: CodegenFormatOptions) => { - const sep = options?.semi ? '; ' : ', ' - return `{ file: File${sep}url?: never${sep}name?: never } | { file?: never${sep}url: string${sep}name: string }` -} +export const getFileOutputTypeString = (_options?: CodegenFormatOptions) => + `{ name: string${inlineObjectTypeMemberSep}url?: string${inlineObjectTypeMemberSep}urlGeneratedAt?: string${inlineObjectTypeMemberSep}isPresignedUrl: boolean }` + +export const getFileInputTypeString = (_options?: CodegenFormatOptions) => + `{ file: File${inlineObjectTypeMemberSep}url?: never${inlineObjectTypeMemberSep}name?: never } | { file?: never${inlineObjectTypeMemberSep}url: string${inlineObjectTypeMemberSep}name: string }` export const getFileTypeString = (options?: CodegenFormatOptions, isInput = false) => isInput ? getFileInputTypeString(options) : getFileOutputTypeString(options)