




















@@ -1,6 +1,7 @@
11import { spawn } from "node:child_process";
22import { createRequire } from "node:module";
33import path from "node:path";
4+import { isUnitUiTestTarget } from "../test/vitest/vitest.ui-paths.mjs";
45import { resolveLocalVitestEnv } from "./lib/vitest-local-scheduling.mjs";
56import { spawnPnpmRunner } from "./pnpm-runner.mjs";
67import {
@@ -13,6 +14,7 @@ const TRUTHY_ENV_VALUES = new Set(["1", "true", "yes", "on"]);
1314const ANSI_CSI_PREFIX = `${String.fromCharCode(27)}[`;
1415const ANSI_CSI_SUFFIX_RE = /^[0-?]*[ -/]*[@-~]/u;
1516const SUPPRESSED_VITEST_STDERR_PATTERNS = ["[PLUGIN_TIMINGS]"];
17+const UNIT_UI_VITEST_CONFIG = "test/vitest/vitest.unit-ui.config.ts";
1618const require = createRequire(import.meta.url);
17191820function isTruthyEnvValue(value) {
@@ -92,6 +94,31 @@ export function resolveDirectNodeVitestArgs(pnpmArgs) {
9294return pnpmArgs[0] === "exec" && pnpmArgs[1] === "node" ? pnpmArgs.slice(2) : null;
9395}
949697+function hasExplicitVitestConfigArg(argv) {
98+return argv.some((arg) => arg === "--config" || arg === "-c" || arg.startsWith("--config="));
99+}
100+101+function toRepoRelativeArg(arg, cwd) {
102+const normalized = path.isAbsolute(arg) ? path.relative(cwd, arg) : arg;
103+return normalized.replaceAll(path.sep, "/").replace(/^\.\//u, "");
104+}
105+106+export function resolveImplicitVitestArgs(argv, cwd = process.cwd()) {
107+if (hasExplicitVitestConfigArg(argv)) {
108+return argv;
109+}
110+const testTargets = argv
111+.filter((arg) => !arg.startsWith("-") && arg.endsWith(".test.ts"))
112+.map((arg) => toRepoRelativeArg(arg, cwd));
113+if (testTargets.length === 0 || !testTargets.every(isUnitUiTestTarget)) {
114+return argv;
115+}
116+if (argv[0] === "run") {
117+return ["run", "--config", UNIT_UI_VITEST_CONFIG, ...argv.slice(1)];
118+}
119+return ["--config", UNIT_UI_VITEST_CONFIG, ...argv];
120+}
121+95122function spawnVitestProcess({ pnpmArgs, spawnParams }) {
96123const directNodeArgs = resolveDirectNodeVitestArgs(pnpmArgs);
97124if (directNodeArgs) {
@@ -271,11 +298,18 @@ function main(argv = process.argv.slice(2), env = process.env) {
271298process.exit(1);
272299}
273300301+const vitestArgs = resolveImplicitVitestArgs(argv);
274302const { child, teardown } = spawnWatchedVitestProcess({
275-pnpmArgs: ["exec", "node", ...resolveVitestNodeArgs(env), resolveVitestCliEntry(), ...argv],
303+pnpmArgs: [
304+"exec",
305+"node",
306+ ...resolveVitestNodeArgs(env),
307+resolveVitestCliEntry(),
308+ ...vitestArgs,
309+],
276310spawnParams: resolveVitestSpawnParams(env),
277311 env,
278-label: argv.join(" "),
312+label: vitestArgs.join(" "),
279313});
280314281315child.on("exit", (code, signal) => {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。