Skip to content

Commit a761808

Browse files
feat: enhance client type generation by merging server scalars into client config and improve error logging
1 parent 21f4a43 commit a761808

File tree

2 files changed

+17
-3
lines changed

2 files changed

+17
-3
lines changed

src/core/codegen/client.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import { plugin as typescriptPlugin } from '@graphql-codegen/typescript'
1818
import { plugin as typescriptGenericSdk } from '@graphql-codegen/typescript-generic-sdk'
1919
import { plugin as typescriptOperations } from '@graphql-codegen/typescript-operations'
2020
import { printSchemaWithDirectives } from '@graphql-tools/utils'
21+
import consola from 'consola'
2122
import { defu } from 'defu'
2223
import { Kind, parse } from 'graphql'
2324
import { DEFAULT_GRAPHQL_SCALARS } from '../constants'
@@ -194,7 +195,9 @@ export async function generateClientTypesCore(
194195
sdk: sdkContent,
195196
}
196197
}
197-
catch {
198+
catch (error) {
199+
// Log codegen errors - these are usually configuration issues like missing scalar definitions
200+
consola.error('[nitro-graphql] Client type generation failed:', (error as Error).message)
198201
return false
199202
}
200203
}

src/nitro/codegen.ts

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -167,16 +167,26 @@ async function generateMainClientTypes(
167167
// Read schema as string to avoid graphql instance mismatch
168168
const schemaString = readFileSync(schemaPath, 'utf-8')
169169

170+
// Merge server scalars into client config if client scalars not explicitly set
171+
// This ensures custom scalars defined for server types are also available for client types
172+
const serverScalars = nitro.options.graphql?.codegen?.server?.scalars
173+
const clientConfig = nitro.options.graphql?.codegen?.client || {}
174+
const mergedClientConfig = {
175+
...clientConfig,
176+
scalars: clientConfig.scalars ?? serverScalars,
177+
}
178+
170179
const types = await generateClientTypesCore({
171180
schemaString,
172181
documents: docs,
173-
config: nitro.options.graphql?.codegen?.client as any,
182+
config: mergedClientConfig as any,
174183
sdkConfig: nitro.options.graphql?.codegen?.clientSDK as any,
175184
options,
176185
})
177186

178-
if (types === false)
187+
if (types === false) {
179188
return
189+
}
180190

181191
const placeholders = getDefaultPaths(nitro)
182192
const typesConfig = getTypesConfig(nitro)
@@ -185,6 +195,7 @@ async function generateMainClientTypes(
185195

186196
// Write client types
187197
const clientPath = resolveFilePath(typesConfig.client, typesConfig.enabled, true, '{typesDir}/nitro-graphql-client.d.ts', placeholders)
198+
188199
if (clientPath) {
189200
writeFile(clientPath, types.types)
190201
if (!options.silent)

0 commit comments

Comments
 (0)