From ea50e8fad748c188f98fb4202641890f9b4d1b0e Mon Sep 17 00:00:00 2001 From: Dmytro Date: Sun, 22 Jun 2025 02:10:11 +0300 Subject: [PATCH] Refactor SDK generation to support optional codegen. Introduce conditional logic to handle SDK generation on nitro size based on whether codegen is enabled or not. When enabled, SDKs are imported as modules; otherwise, mock templates are used as before. This fixes issues with missing fragments on server(nitro) side. https://github.com/Diizzayy/nuxt-graphql-client/issues/333 --- src/module.ts | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/src/module.ts b/src/module.ts index ddaef5d..9ba2d88 100644 --- a/src/module.ts +++ b/src/module.ts @@ -256,15 +256,33 @@ export default defineNuxtModule({ nitro.externals.inline = nitro.externals.inline || [] nitro.externals.inline.push(resolver.resolve('runtime')) - const clientSdks = Object.entries(ctx.clientDocs || {}).reduce((acc, [client, docs]) => { - const entries = extractGqlOperations(docs) + let clientSdksCode: string - return [...acc, `${client}: ` + mockTemplate(entries).replace('export ', '')] - }, []) + if (ctx.codegen) { + // When codegen is enabled, import the generated SDK + const clientImports = Object.keys(ctx.clientDocs || {}).map(client => + `import { getSdk as ${client}Sdk } from '#gql/${client}'` + ).join('\n') + + const clientSdkEntries = Object.keys(ctx.clientDocs || {}).map(client => + `${client}: ${client}Sdk` + ).join(',\n ') + + clientSdksCode = `${clientImports}\n\nconst clientSdks = {\n ${clientSdkEntries}\n}` + } + else { + // When codegen is disabled, use mockTemplate as before + const clientSdks = Object.entries(ctx.clientDocs || {}).reduce((acc, [client, docs]) => { + const entries = extractGqlOperations(docs) + return [...acc, `${client}: ` + mockTemplate(entries).replace('export ', '')] + }, []) + + clientSdksCode = 'const clientSdks = {' + clientSdks + '}' + } nitro.virtual = nitro.virtual || {} nitro.virtual['#gql-nitro'] = [ - 'const clientSdks = {' + clientSdks + '}', + clientSdksCode, 'const config = ' + JSON.stringify(config.clients), 'const ops = ' + JSON.stringify(ctx.clientOps), 'const clients = {}',