From 8d913d07390f319cae818cd706c92c7ff4ca03aa Mon Sep 17 00:00:00 2001 From: onmax Date: Fri, 24 Jul 2026 15:24:26 +0700 Subject: [PATCH 1/3] fix: support Nuxt 5 --- src/module.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/module.ts b/src/module.ts index e1beb738..a47eae6e 100644 --- a/src/module.ts +++ b/src/module.ts @@ -25,7 +25,7 @@ export default defineNuxtModule({ version, configKey: 'apollo', compatibility: { - nuxt: '^3.0.0 || ^4.0.0' + nuxt: '^3.0.0 || ^4.0.0 || ^5.0.0-0' } }, defaults: { @@ -159,13 +159,17 @@ export default defineNuxtModule({ ].map(n => ({ name: n, from: '@vue/apollo-composable' }))) ]) + const graphqlPlugin = GraphQLPlugin() as PluginOption + nuxt.hook('vite:extendConfig', (config) => { config.optimizeDeps = config.optimizeDeps || {} config.optimizeDeps.exclude = config.optimizeDeps.exclude || [] config.optimizeDeps.exclude.push('@vue/apollo-composable') config.plugins = config.plugins || [] - config.plugins.push(GraphQLPlugin() as PluginOption) + if (!config.plugins.includes(graphqlPlugin)) { + config.plugins.push(graphqlPlugin) + } if (!nuxt.options.dev) { config.define = { ...config.define, __DEV__: false } From 13fe274b01df5b44c1eec9320ffb8baa88e46a04 Mon Sep 17 00:00:00 2001 From: onmax Date: Sun, 9 Aug 2026 11:11:42 +0200 Subject: [PATCH 2/3] fix: avoid duplicate GraphQL Vite plugin --- playground/nuxt.config.ts | 6 ++++++ src/module.ts | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/playground/nuxt.config.ts b/playground/nuxt.config.ts index 3b483010..c0b61b2d 100644 --- a/playground/nuxt.config.ts +++ b/playground/nuxt.config.ts @@ -1,3 +1,5 @@ +import GraphQLPlugin from '@rollup/plugin-graphql' + export default defineNuxtConfig({ modules: ['@nuxt/ui', '@nuxtjs/apollo'], @@ -8,6 +10,10 @@ export default defineNuxtConfig({ storageKey: 'na-color-scheme' }, + vite: { + plugins: [GraphQLPlugin()] + }, + apollo: { clients: { default: './apollo/default.ts', diff --git a/src/module.ts b/src/module.ts index a47eae6e..b5f1066f 100644 --- a/src/module.ts +++ b/src/module.ts @@ -167,7 +167,7 @@ export default defineNuxtModule({ config.optimizeDeps.exclude.push('@vue/apollo-composable') config.plugins = config.plugins || [] - if (!config.plugins.includes(graphqlPlugin)) { + if (!config.plugins.some(plugin => plugin && typeof plugin === 'object' && 'name' in plugin && plugin.name === 'graphql')) { config.plugins.push(graphqlPlugin) } From 2caf58c0347a178ea50bacf3a2d4eaca0caf6b71 Mon Sep 17 00:00:00 2001 From: onmax Date: Sun, 9 Aug 2026 12:33:42 +0200 Subject: [PATCH 3/3] fix: detect nested GraphQL Vite plugins --- playground/nuxt.config.ts | 2 +- src/module.ts | 14 ++++++++++++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/playground/nuxt.config.ts b/playground/nuxt.config.ts index c0b61b2d..4400cb93 100644 --- a/playground/nuxt.config.ts +++ b/playground/nuxt.config.ts @@ -11,7 +11,7 @@ export default defineNuxtConfig({ }, vite: { - plugins: [GraphQLPlugin()] + plugins: [Promise.resolve([GraphQLPlugin()])] }, apollo: { diff --git a/src/module.ts b/src/module.ts index b5f1066f..f12b5f69 100644 --- a/src/module.ts +++ b/src/module.ts @@ -12,6 +12,16 @@ export type { ClientConfig, ErrorResponse } const logger = useLogger(name) +async function hasGraphQLPlugin(options: PluginOption[]): Promise { + for (const option of options) { + const plugin = await option + if (Array.isArray(plugin) ? await hasGraphQLPlugin(plugin) : plugin && plugin.name === 'graphql') { + return true + } + } + return false +} + async function readConfigFile(path: string): Promise { const jiti = createJiti(import.meta.url) return await jiti.import(path, { default: true }) @@ -161,13 +171,13 @@ export default defineNuxtModule({ const graphqlPlugin = GraphQLPlugin() as PluginOption - nuxt.hook('vite:extendConfig', (config) => { + nuxt.hook('vite:extendConfig', async (config) => { config.optimizeDeps = config.optimizeDeps || {} config.optimizeDeps.exclude = config.optimizeDeps.exclude || [] config.optimizeDeps.exclude.push('@vue/apollo-composable') config.plugins = config.plugins || [] - if (!config.plugins.some(plugin => plugin && typeof plugin === 'object' && 'name' in plugin && plugin.name === 'graphql')) { + if (!await hasGraphQLPlugin(config.plugins)) { config.plugins.push(graphqlPlugin) }