/** * Detect the appropriate vitest `environment` for a package. * * Order of precedence: * 1. Explicit override * 2. Package depends on `react` / `react-dom` → `happy-dom` * 3. Package depends on `jsdom` → `jsdom` * 4. Default: `node` */ export type TestEnvironment = "node" | "happy-dom" | "jsdom"; interface MinimalPackageJson { dependencies?: Record; devDependencies?: Record; peerDependencies?: Record; } export function detectEnvironment( pkg: MinimalPackageJson, override?: TestEnvironment ): TestEnvironment { if (override) return override; const deps = { ...(pkg.dependencies ?? {}), ...(pkg.devDependencies ?? {}), ...(pkg.peerDependencies ?? {}), }; if ("react" in deps || "react-dom" in deps) return "happy-dom"; if ("jsdom" in deps) return "jsdom"; return "node"; }