33 lines
910 B
TypeScript
33 lines
910 B
TypeScript
/**
|
|
* 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<string, string>;
|
|
devDependencies?: Record<string, string>;
|
|
peerDependencies?: Record<string, string>;
|
|
}
|
|
|
|
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";
|
|
}
|