Skip to content

Commit

Permalink
fix(nuxt-vitest): inject vue plugins if missing (#130)
Browse files Browse the repository at this point in the history
  • Loading branch information
danielroe committed Apr 18, 2023
1 parent dd5d69f commit 09c8c37
Showing 1 changed file with 18 additions and 2 deletions.
20 changes: 18 additions & 2 deletions src/nuxt-vitest/config.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
import type { Nuxt } from '@nuxt/schema'
import type { Nuxt, ViteConfig } from '@nuxt/schema'
import type { InlineConfig as VitestConfig } from 'vitest'
import { InlineConfig, mergeConfig, defineConfig } from 'vite'
import vuePlugin from '@vitejs/plugin-vue'
import viteJsxPlugin from '@vitejs/plugin-vue-jsx'

interface GetVitestConfigOptions {
nuxt: Nuxt
Expand Down Expand Up @@ -46,11 +48,25 @@ async function startNuxtAndGetViteConfig(rootDir = process.cwd()) {
return promise
}

const vuePlugins = {
'vite:vue': [vuePlugin, 'vue'],
'vite:vue-jsx': [viteJsxPlugin, 'vueJsx'],
} as const

export async function getVitestConfigFromNuxt(
options?: GetVitestConfigOptions
): Promise<InlineConfig & { test: VitestConfig }> {
if (!options) options = await startNuxtAndGetViteConfig()
options.viteConfig.plugins = options.viteConfig.plugins?.filter(p => (p as any)?.name !== 'nuxt:import-protection')
options.viteConfig.plugins = options.viteConfig.plugins || []
options.viteConfig.plugins = options.viteConfig.plugins.filter(p => (p as any)?.name !== 'nuxt:import-protection')

for (const name in vuePlugins) {
if (!options.viteConfig.plugins?.some(p => (p as any)?.name === name)) {
const [plugin, key] = vuePlugins[name as keyof typeof vuePlugins]
// @ts-expect-error mismatching component options
options.viteConfig.plugins.push(plugin((options.viteConfig as ViteConfig)[key]))
}
}

return {
...options.viteConfig,
Expand Down

0 comments on commit 09c8c37

Please sign in to comment.