diff --git a/src/plugins/vite/index.ts b/src/plugins/vite/index.ts index 4da2242c5..3c76b1aec 100644 --- a/src/plugins/vite/index.ts +++ b/src/plugins/vite/index.ts @@ -1,7 +1,7 @@ import { timerify } from '../../util/Performance.js'; import { hasDependency, load } from '../../util/plugin.js'; import { findVitestDeps } from '../vitest/index.js'; -import type { ViteConfig } from './types.js'; +import type { ViteConfig, MODE, COMMAND } from './types.js'; import type { IsPluginEnabledCallback, GenericPluginCallback } from '../../types/plugins.js'; // https://vitejs.dev/config/ @@ -20,6 +20,17 @@ const findViteDependencies: GenericPluginCallback = async (configFilePath, optio if (!localConfig) return []; + if (typeof localConfig === 'function') { + const dependencies = new Set(); + for (const command of ['dev', 'serve', 'build'] as COMMAND[]) { + for (const mode of ['development', 'production'] as MODE[]) { + const config = await localConfig({ command, mode, ssrBuild: undefined }); + findVitestDeps(config, options).forEach(dependency => dependencies.add(dependency)); + } + } + return Array.from(dependencies); + } + return findVitestDeps(localConfig, options); }; diff --git a/src/plugins/vite/types.ts b/src/plugins/vite/types.ts index 5e63ffc93..7c3409f7c 100644 --- a/src/plugins/vite/types.ts +++ b/src/plugins/vite/types.ts @@ -1,5 +1,16 @@ import type { VitestConfig } from '../vitest/types.js'; -export interface ViteConfig extends VitestConfig { +interface Config extends VitestConfig { plugins: unknown[]; } + +export type COMMAND = 'dev' | 'serve' | 'build'; +export type MODE = 'development' | 'production'; + +interface Options { + command: COMMAND; + mode: MODE; + ssrBuild?: boolean | undefined; +} + +export type ViteConfig = Config | ((options: Options) => Config) | ((options: Options) => Promise);