@rpcbase/test 0.342.0 → 0.344.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/clearDatabase.js +10 -12
- package/dist/clearDatabase.js.map +1 -1
- package/dist/cli.js +439 -556
- package/dist/cli.js.map +1 -1
- package/dist/coverage/collect.js +63 -101
- package/dist/coverage/collect.js.map +1 -1
- package/dist/coverage/config-loader.js +180 -230
- package/dist/coverage/config-loader.js.map +1 -1
- package/dist/coverage/config.js +76 -100
- package/dist/coverage/config.js.map +1 -1
- package/dist/coverage/console-text-report.js +175 -220
- package/dist/coverage/console-text-report.js.map +1 -1
- package/dist/coverage/files.js +45 -58
- package/dist/coverage/files.js.map +1 -1
- package/dist/coverage/fixtures.js +27 -38
- package/dist/coverage/fixtures.js.map +1 -1
- package/dist/coverage/global-setup.js +15 -18
- package/dist/coverage/global-setup.js.map +1 -1
- package/dist/coverage/index.js +38 -55
- package/dist/coverage/index.js.map +1 -1
- package/dist/coverage/report.js +341 -466
- package/dist/coverage/report.js.map +1 -1
- package/dist/coverage/reporter.js +47 -61
- package/dist/coverage/reporter.js.map +1 -1
- package/dist/coverage/v8-tracker.js +115 -147
- package/dist/coverage/v8-tracker.js.map +1 -1
- package/dist/index.js +46 -75
- package/dist/index.js.map +1 -1
- package/dist/runners/playwright.d.ts.map +1 -1
- package/dist/runners/playwright.js +398 -449
- package/dist/runners/playwright.js.map +1 -1
- package/dist/runners/process.d.ts +4 -1
- package/dist/runners/process.d.ts.map +1 -1
- package/dist/runners/process.js +111 -101
- package/dist/runners/process.js.map +1 -1
- package/dist/runners/vitest.js +124 -171
- package/dist/runners/vitest.js.map +1 -1
- package/dist/serverCoverage.js +28 -42
- package/dist/serverCoverage.js.map +1 -1
- package/dist/vitest.config.d.ts +1 -1
- package/dist/vitest.config.js +62 -74
- package/dist/vitest.config.js.map +1 -1
- package/package.json +1 -1
package/dist/runners/vitest.js
CHANGED
|
@@ -1,191 +1,144 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
1
|
+
import { isInsideAnyRoot, resolveCollectCoverageRoots } from "../coverage/collect.js";
|
|
2
|
+
import { spawnWithLogs, withRegisterShim } from "./process.js";
|
|
3
|
+
import fsPromises from "node:fs/promises";
|
|
4
|
+
import fs from "node:fs";
|
|
3
5
|
import path from "node:path";
|
|
4
6
|
import { createRequire } from "node:module";
|
|
5
7
|
import { fileURLToPath } from "node:url";
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
name: "Vitest",
|
|
39
|
-
launcher,
|
|
40
|
-
args: vitestArgs,
|
|
41
|
-
env,
|
|
42
|
-
successMessage: "Vitest suite passed!",
|
|
43
|
-
failureMessage: "Vitest failed"
|
|
44
|
-
});
|
|
45
|
-
if (coverage?.enabled && !disableCoverage) {
|
|
46
|
-
await convertNodeCoverage({
|
|
47
|
-
config: combinedConfig ?? coverage.config,
|
|
48
|
-
nodeCoverageDir: resolveNodeCoverageDir(combinedConfig ?? coverage.config)
|
|
49
|
-
});
|
|
50
|
-
}
|
|
8
|
+
//#region src/runners/vitest.ts
|
|
9
|
+
var require = createRequire(import.meta.url);
|
|
10
|
+
var moduleDir = path.dirname(fileURLToPath(import.meta.url));
|
|
11
|
+
async function runVitest(coverage, combinedConfig, userArgs, { disableCoverage = false } = {}) {
|
|
12
|
+
const vitestArgs = ["run", "--passWithNoTests"];
|
|
13
|
+
const vitestConfig = resolveVitestConfig();
|
|
14
|
+
const hasCustomConfig = userArgs.some((arg) => {
|
|
15
|
+
if (arg === "--config" || arg === "-c") return true;
|
|
16
|
+
return arg.startsWith("--config=");
|
|
17
|
+
});
|
|
18
|
+
if (vitestConfig && !hasCustomConfig) vitestArgs.push("--config", vitestConfig);
|
|
19
|
+
vitestArgs.push(...userArgs);
|
|
20
|
+
const launcher = resolveVitestLauncher();
|
|
21
|
+
const env = withRegisterShim(process.env);
|
|
22
|
+
if (disableCoverage) env.RB_DISABLE_COVERAGE = "1";
|
|
23
|
+
if (coverage?.enabled && !disableCoverage) {
|
|
24
|
+
const nodeCoverageDir = resolveNodeCoverageDir(combinedConfig ?? coverage.config);
|
|
25
|
+
await fsPromises.mkdir(nodeCoverageDir, { recursive: true });
|
|
26
|
+
env.NODE_V8_COVERAGE = nodeCoverageDir;
|
|
27
|
+
}
|
|
28
|
+
await spawnWithLogs({
|
|
29
|
+
name: "Vitest",
|
|
30
|
+
launcher,
|
|
31
|
+
args: vitestArgs,
|
|
32
|
+
env,
|
|
33
|
+
successMessage: "Vitest suite passed!",
|
|
34
|
+
failureMessage: "Vitest failed"
|
|
35
|
+
});
|
|
36
|
+
if (coverage?.enabled && !disableCoverage) await convertNodeCoverage({
|
|
37
|
+
config: combinedConfig ?? coverage.config,
|
|
38
|
+
nodeCoverageDir: resolveNodeCoverageDir(combinedConfig ?? coverage.config)
|
|
39
|
+
});
|
|
51
40
|
}
|
|
52
41
|
function resolveNodeCoverageDir(config) {
|
|
53
|
-
|
|
42
|
+
return path.join(config.rootDir, "build", "vitest", "test-results", "node-coverage");
|
|
54
43
|
}
|
|
55
44
|
function resolveVitestLauncher() {
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
return {
|
|
77
|
-
command: localBin,
|
|
78
|
-
args: []
|
|
79
|
-
};
|
|
80
|
-
}
|
|
81
|
-
return {
|
|
82
|
-
command: "vitest",
|
|
83
|
-
args: []
|
|
84
|
-
};
|
|
45
|
+
const searchRoots = [process.cwd(), moduleDir];
|
|
46
|
+
for (const base of searchRoots) try {
|
|
47
|
+
const pkgPath = require.resolve("vitest/package.json", { paths: [base] });
|
|
48
|
+
const pkgDir = path.dirname(pkgPath);
|
|
49
|
+
const pkgJson = JSON.parse(fs.readFileSync(pkgPath, "utf8"));
|
|
50
|
+
const binPath = typeof pkgJson.bin === "string" ? pkgJson.bin : pkgJson.bin?.vitest;
|
|
51
|
+
if (binPath) return {
|
|
52
|
+
command: process.execPath,
|
|
53
|
+
args: [path.join(pkgDir, binPath)]
|
|
54
|
+
};
|
|
55
|
+
} catch (_error) {}
|
|
56
|
+
const localBin = path.resolve(process.cwd(), "node_modules/.bin/vitest");
|
|
57
|
+
if (fs.existsSync(localBin)) return {
|
|
58
|
+
command: localBin,
|
|
59
|
+
args: []
|
|
60
|
+
};
|
|
61
|
+
return {
|
|
62
|
+
command: "vitest",
|
|
63
|
+
args: []
|
|
64
|
+
};
|
|
85
65
|
}
|
|
86
66
|
function resolveVitestConfig() {
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
const bundledConfig = path.join(moduleDir, "..", "vitest.config.js");
|
|
92
|
-
return fs$1.existsSync(bundledConfig) ? bundledConfig : null;
|
|
67
|
+
const userConfig = findVitestConfig(process.cwd());
|
|
68
|
+
if (userConfig) return userConfig;
|
|
69
|
+
const bundledConfig = path.join(moduleDir, "..", "vitest.config.js");
|
|
70
|
+
return fs.existsSync(bundledConfig) ? bundledConfig : null;
|
|
93
71
|
}
|
|
94
72
|
function findVitestConfig(baseDir) {
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
73
|
+
for (const file of [
|
|
74
|
+
"vitest.config.ts",
|
|
75
|
+
"vitest.config.js",
|
|
76
|
+
"vitest.config.mjs"
|
|
77
|
+
]) {
|
|
78
|
+
const fullPath = path.join(baseDir, file);
|
|
79
|
+
if (fs.existsSync(fullPath)) return fullPath;
|
|
80
|
+
}
|
|
81
|
+
return null;
|
|
103
82
|
}
|
|
104
83
|
async function convertNodeCoverage(coverage) {
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
url: script.url
|
|
137
|
-
});
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
if (scripts.length === 0) {
|
|
141
|
-
return;
|
|
142
|
-
}
|
|
143
|
-
const outDir = path.join(config.rootDir, "build", "vitest", "coverage");
|
|
144
|
-
await fs.mkdir(outDir, {
|
|
145
|
-
recursive: true
|
|
146
|
-
});
|
|
147
|
-
const outputFile = path.join(outDir, config.coverageFileName);
|
|
148
|
-
await fs.writeFile(outputFile, JSON.stringify({
|
|
149
|
-
testId: "vitest",
|
|
150
|
-
scripts
|
|
151
|
-
}, null, 2), "utf8");
|
|
84
|
+
const { config, nodeCoverageDir } = coverage;
|
|
85
|
+
const entries = await fsPromises.readdir(nodeCoverageDir).catch(() => []);
|
|
86
|
+
const scripts = [];
|
|
87
|
+
const scriptRoots = resolveCollectCoverageRoots(config.collectCoverageFrom, config.rootDir);
|
|
88
|
+
for (const entry of entries) {
|
|
89
|
+
if (!entry.endsWith(".json")) continue;
|
|
90
|
+
const payload = await readJson(path.join(nodeCoverageDir, entry));
|
|
91
|
+
const results = Array.isArray(payload?.result) ? payload.result : [];
|
|
92
|
+
for (const script of results) {
|
|
93
|
+
const normalized = normalizeNodeScriptUrl(script.url, config.rootDir);
|
|
94
|
+
if (!normalized) continue;
|
|
95
|
+
if (isNodeModulesPath(normalized.absolutePath)) continue;
|
|
96
|
+
if (!isInsideAnyRoot(normalized.absolutePath, scriptRoots)) continue;
|
|
97
|
+
const source = await fsPromises.readFile(normalized.absolutePath, "utf8").catch(() => "");
|
|
98
|
+
scripts.push({
|
|
99
|
+
absolutePath: normalized.absolutePath,
|
|
100
|
+
relativePath: normalized.relativePath,
|
|
101
|
+
source,
|
|
102
|
+
functions: script.functions ?? [],
|
|
103
|
+
url: script.url
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
if (scripts.length === 0) return;
|
|
108
|
+
const outDir = path.join(config.rootDir, "build", "vitest", "coverage");
|
|
109
|
+
await fsPromises.mkdir(outDir, { recursive: true });
|
|
110
|
+
const outputFile = path.join(outDir, config.coverageFileName);
|
|
111
|
+
await fsPromises.writeFile(outputFile, JSON.stringify({
|
|
112
|
+
testId: "vitest",
|
|
113
|
+
scripts
|
|
114
|
+
}, null, 2), "utf8");
|
|
152
115
|
}
|
|
153
116
|
async function readJson(filePath) {
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
117
|
+
try {
|
|
118
|
+
const raw = await fsPromises.readFile(filePath, "utf8");
|
|
119
|
+
return JSON.parse(raw);
|
|
120
|
+
} catch {
|
|
121
|
+
return null;
|
|
122
|
+
}
|
|
160
123
|
}
|
|
161
124
|
function normalizeNodeScriptUrl(rawUrl, rootDir) {
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
}
|
|
175
|
-
if (!absolutePath) {
|
|
176
|
-
return null;
|
|
177
|
-
}
|
|
178
|
-
const normalized = path.normalize(absolutePath);
|
|
179
|
-
return {
|
|
180
|
-
absolutePath: normalized,
|
|
181
|
-
relativePath: path.relative(rootDir, normalized)
|
|
182
|
-
};
|
|
125
|
+
if (!rawUrl || rawUrl.startsWith("node:")) return null;
|
|
126
|
+
let absolutePath = null;
|
|
127
|
+
try {
|
|
128
|
+
if (rawUrl.startsWith("file://")) absolutePath = fileURLToPath(rawUrl);
|
|
129
|
+
} catch (_err) {}
|
|
130
|
+
if (!absolutePath && path.isAbsolute(rawUrl)) absolutePath = rawUrl;
|
|
131
|
+
if (!absolutePath) return null;
|
|
132
|
+
const normalized = path.normalize(absolutePath);
|
|
133
|
+
return {
|
|
134
|
+
absolutePath: normalized,
|
|
135
|
+
relativePath: path.relative(rootDir, normalized)
|
|
136
|
+
};
|
|
183
137
|
}
|
|
184
138
|
function isNodeModulesPath(filePath) {
|
|
185
|
-
|
|
139
|
+
return path.normalize(String(filePath ?? "")).split(path.sep).includes("node_modules");
|
|
186
140
|
}
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
//# sourceMappingURL=vitest.js.map
|
|
141
|
+
//#endregion
|
|
142
|
+
export { resolveNodeCoverageDir, runVitest };
|
|
143
|
+
|
|
144
|
+
//# sourceMappingURL=vitest.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vitest.js","sources":["../../src/runners/vitest.ts"],"sourcesContent":["import fs from \"node:fs\"\nimport fsPromises from \"node:fs/promises\"\nimport path from \"node:path\"\nimport { createRequire } from \"node:module\"\nimport { fileURLToPath } from \"node:url\"\n\nimport { isInsideAnyRoot, resolveCollectCoverageRoots } from \"../coverage/collect\"\nimport type { CoverageConfig } from \"../coverage/types\"\nimport { spawnWithLogs, withRegisterShim, type SpawnLauncher } from \"./process\"\n\n\nconst require = createRequire(import.meta.url)\nconst moduleDir = path.dirname(fileURLToPath(import.meta.url))\n\ntype CoverageState = { config: CoverageConfig; enabled: boolean } | null\n\nexport async function runVitest(\n coverage: CoverageState,\n combinedConfig: CoverageConfig | null,\n userArgs: string[],\n { disableCoverage = false }: { disableCoverage?: boolean } = {},\n): Promise<void> {\n const vitestArgs = [\"run\", \"--passWithNoTests\"]\n const vitestConfig = resolveVitestConfig()\n\n const hasCustomConfig = userArgs.some((arg) => {\n if (arg === \"--config\" || arg === \"-c\") {\n return true\n }\n return arg.startsWith(\"--config=\")\n })\n\n if (vitestConfig && !hasCustomConfig) {\n vitestArgs.push(\"--config\", vitestConfig)\n }\n vitestArgs.push(...userArgs)\n\n const launcher = resolveVitestLauncher()\n const env = withRegisterShim(process.env)\n\n if (disableCoverage) {\n env.RB_DISABLE_COVERAGE = \"1\"\n }\n\n if (coverage?.enabled && !disableCoverage) {\n const nodeCoverageDir = resolveNodeCoverageDir(combinedConfig ?? coverage.config)\n await fsPromises.mkdir(nodeCoverageDir, { recursive: true })\n env.NODE_V8_COVERAGE = nodeCoverageDir\n }\n\n await spawnWithLogs({\n name: \"Vitest\",\n launcher,\n args: vitestArgs,\n env,\n successMessage: \"Vitest suite passed!\",\n failureMessage: \"Vitest failed\",\n })\n\n if (coverage?.enabled && !disableCoverage) {\n await convertNodeCoverage({\n config: combinedConfig ?? coverage.config,\n nodeCoverageDir: resolveNodeCoverageDir(combinedConfig ?? coverage.config),\n })\n }\n}\n\nexport function resolveNodeCoverageDir(config: CoverageConfig): string {\n return path.join(config.rootDir, \"build\", \"vitest\", \"test-results\", \"node-coverage\")\n}\n\nfunction resolveVitestLauncher(): SpawnLauncher {\n const searchRoots = [process.cwd(), moduleDir]\n\n for (const base of searchRoots) {\n try {\n const pkgPath = require.resolve(\"vitest/package.json\", { paths: [base] })\n const pkgDir = path.dirname(pkgPath)\n const pkgJson = JSON.parse(fs.readFileSync(pkgPath, \"utf8\"))\n const binPath = typeof pkgJson.bin === \"string\" ? pkgJson.bin : pkgJson.bin?.vitest\n if (binPath) {\n return {\n command: process.execPath,\n args: [path.join(pkgDir, binPath)],\n }\n }\n } catch (_error) {\n // Continue searching for a usable vitest launcher.\n }\n }\n\n const localBin = path.resolve(process.cwd(), \"node_modules/.bin/vitest\")\n if (fs.existsSync(localBin)) {\n return {\n command: localBin,\n args: [],\n }\n }\n\n return {\n command: \"vitest\",\n args: [],\n }\n}\n\nfunction resolveVitestConfig(): string | null {\n const userConfig = findVitestConfig(process.cwd())\n if (userConfig) {\n return userConfig\n }\n\n const bundledConfig = path.join(moduleDir, \"..\", \"vitest.config.js\")\n return fs.existsSync(bundledConfig) ? bundledConfig : null\n}\n\nfunction findVitestConfig(baseDir: string): string | null {\n const candidates = [\n \"vitest.config.ts\",\n \"vitest.config.js\",\n \"vitest.config.mjs\",\n ]\n\n for (const file of candidates) {\n const fullPath = path.join(baseDir, file)\n if (fs.existsSync(fullPath)) {\n return fullPath\n }\n }\n\n return null\n}\n\nasync function convertNodeCoverage(coverage: { config: CoverageConfig; nodeCoverageDir: string }): Promise<void> {\n const { config, nodeCoverageDir } = coverage\n\n const entries = await fsPromises.readdir(nodeCoverageDir).catch(() => [])\n const scripts = []\n const scriptRoots = resolveCollectCoverageRoots(config.collectCoverageFrom, config.rootDir)\n\n for (const entry of entries) {\n if (!entry.endsWith(\".json\")) {\n continue\n }\n\n const fullPath = path.join(nodeCoverageDir, entry)\n const payload = await readJson(fullPath)\n const results = Array.isArray(payload?.result) ? payload.result : []\n\n for (const script of results) {\n const normalized = normalizeNodeScriptUrl(script.url, config.rootDir)\n if (!normalized) {\n continue\n }\n\n if (isNodeModulesPath(normalized.absolutePath)) {\n continue\n }\n\n if (!isInsideAnyRoot(normalized.absolutePath, scriptRoots)) {\n continue\n }\n\n const source = await fsPromises.readFile(normalized.absolutePath, \"utf8\").catch(() => \"\")\n\n scripts.push({\n absolutePath: normalized.absolutePath,\n relativePath: normalized.relativePath,\n source,\n functions: script.functions ?? [],\n url: script.url,\n })\n }\n }\n\n if (scripts.length === 0) {\n return\n }\n\n const outDir = path.join(config.rootDir, \"build\", \"vitest\", \"coverage\")\n await fsPromises.mkdir(outDir, { recursive: true })\n const outputFile = path.join(outDir, config.coverageFileName)\n await fsPromises.writeFile(outputFile, JSON.stringify({ testId: \"vitest\", scripts }, null, 2), \"utf8\")\n}\n\nasync function readJson(filePath: string): Promise<any | null> {\n try {\n const raw = await fsPromises.readFile(filePath, \"utf8\")\n return JSON.parse(raw)\n } catch {\n return null\n }\n}\n\nfunction normalizeNodeScriptUrl(\n rawUrl: string,\n rootDir: string,\n): { absolutePath: string; relativePath: string } | null {\n if (!rawUrl || rawUrl.startsWith(\"node:\")) {\n return null\n }\n\n let absolutePath = null\n\n try {\n if (rawUrl.startsWith(\"file://\")) {\n absolutePath = fileURLToPath(rawUrl)\n }\n } catch (_err) {\n // Ignore invalid file URLs in raw coverage payloads.\n }\n\n if (!absolutePath && path.isAbsolute(rawUrl)) {\n absolutePath = rawUrl\n }\n\n if (!absolutePath) {\n return null\n }\n\n const normalized = path.normalize(absolutePath)\n\n return {\n absolutePath: normalized,\n relativePath: path.relative(rootDir, normalized),\n }\n}\n\nfunction isNodeModulesPath(filePath: unknown): boolean {\n return path\n .normalize(String(filePath ?? \"\"))\n .split(path.sep)\n .includes(\"node_modules\")\n}\n"],"names":["require","createRequire","import","url","moduleDir","path","dirname","fileURLToPath","runVitest","coverage","combinedConfig","userArgs","disableCoverage","vitestArgs","vitestConfig","resolveVitestConfig","hasCustomConfig","some","arg","startsWith","push","launcher","resolveVitestLauncher","env","withRegisterShim","process","RB_DISABLE_COVERAGE","enabled","nodeCoverageDir","resolveNodeCoverageDir","config","fsPromises","mkdir","recursive","NODE_V8_COVERAGE","spawnWithLogs","name","args","successMessage","failureMessage","convertNodeCoverage","join","rootDir","searchRoots","cwd","base","pkgPath","resolve","paths","pkgDir","pkgJson","JSON","parse","fs","readFileSync","binPath","bin","vitest","command","execPath","_error","localBin","existsSync","userConfig","findVitestConfig","bundledConfig","baseDir","candidates","file","fullPath","entries","readdir","catch","scripts","scriptRoots","resolveCollectCoverageRoots","collectCoverageFrom","entry","endsWith","payload","readJson","results","Array","isArray","result","script","normalized","normalizeNodeScriptUrl","isNodeModulesPath","absolutePath","isInsideAnyRoot","source","readFile","relativePath","functions","length","outDir","outputFile","coverageFileName","writeFile","stringify","testId","filePath","raw","rawUrl","_err","isAbsolute","normalize","relative","String","split","sep","includes"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"vitest.js","names":["fs","fsPromises","path","createRequire","fileURLToPath","isInsideAnyRoot","resolveCollectCoverageRoots","CoverageConfig","spawnWithLogs","withRegisterShim","SpawnLauncher","require","import","meta","url","moduleDir","dirname","CoverageState","config","enabled","runVitest","coverage","combinedConfig","userArgs","disableCoverage","Promise","vitestArgs","vitestConfig","resolveVitestConfig","hasCustomConfig","some","arg","startsWith","push","launcher","resolveVitestLauncher","env","process","RB_DISABLE_COVERAGE","nodeCoverageDir","resolveNodeCoverageDir","mkdir","recursive","NODE_V8_COVERAGE","name","args","successMessage","failureMessage","convertNodeCoverage","join","rootDir","searchRoots","cwd","base","pkgPath","resolve","paths","pkgDir","pkgJson","JSON","parse","readFileSync","binPath","bin","vitest","command","execPath","_error","localBin","existsSync","userConfig","findVitestConfig","bundledConfig","baseDir","candidates","file","fullPath","entries","readdir","catch","scripts","scriptRoots","collectCoverageFrom","entry","endsWith","payload","readJson","results","Array","isArray","result","script","normalized","normalizeNodeScriptUrl","isNodeModulesPath","absolutePath","source","readFile","relativePath","functions","length","outDir","outputFile","coverageFileName","writeFile","stringify","testId","filePath","raw","rawUrl","_err","isAbsolute","normalize","relative","String","split","sep","includes"],"sources":["../../src/runners/vitest.ts"],"sourcesContent":["import fs from \"node:fs\"\nimport fsPromises from \"node:fs/promises\"\nimport path from \"node:path\"\nimport { createRequire } from \"node:module\"\nimport { fileURLToPath } from \"node:url\"\n\nimport { isInsideAnyRoot, resolveCollectCoverageRoots } from \"../coverage/collect\"\nimport type { CoverageConfig } from \"../coverage/types\"\nimport { spawnWithLogs, withRegisterShim, type SpawnLauncher } from \"./process\"\n\n\nconst require = createRequire(import.meta.url)\nconst moduleDir = path.dirname(fileURLToPath(import.meta.url))\n\ntype CoverageState = { config: CoverageConfig; enabled: boolean } | null\n\nexport async function runVitest(\n coverage: CoverageState,\n combinedConfig: CoverageConfig | null,\n userArgs: string[],\n { disableCoverage = false }: { disableCoverage?: boolean } = {},\n): Promise<void> {\n const vitestArgs = [\"run\", \"--passWithNoTests\"]\n const vitestConfig = resolveVitestConfig()\n\n const hasCustomConfig = userArgs.some((arg) => {\n if (arg === \"--config\" || arg === \"-c\") {\n return true\n }\n return arg.startsWith(\"--config=\")\n })\n\n if (vitestConfig && !hasCustomConfig) {\n vitestArgs.push(\"--config\", vitestConfig)\n }\n vitestArgs.push(...userArgs)\n\n const launcher = resolveVitestLauncher()\n const env = withRegisterShim(process.env)\n\n if (disableCoverage) {\n env.RB_DISABLE_COVERAGE = \"1\"\n }\n\n if (coverage?.enabled && !disableCoverage) {\n const nodeCoverageDir = resolveNodeCoverageDir(combinedConfig ?? coverage.config)\n await fsPromises.mkdir(nodeCoverageDir, { recursive: true })\n env.NODE_V8_COVERAGE = nodeCoverageDir\n }\n\n await spawnWithLogs({\n name: \"Vitest\",\n launcher,\n args: vitestArgs,\n env,\n successMessage: \"Vitest suite passed!\",\n failureMessage: \"Vitest failed\",\n })\n\n if (coverage?.enabled && !disableCoverage) {\n await convertNodeCoverage({\n config: combinedConfig ?? coverage.config,\n nodeCoverageDir: resolveNodeCoverageDir(combinedConfig ?? coverage.config),\n })\n }\n}\n\nexport function resolveNodeCoverageDir(config: CoverageConfig): string {\n return path.join(config.rootDir, \"build\", \"vitest\", \"test-results\", \"node-coverage\")\n}\n\nfunction resolveVitestLauncher(): SpawnLauncher {\n const searchRoots = [process.cwd(), moduleDir]\n\n for (const base of searchRoots) {\n try {\n const pkgPath = require.resolve(\"vitest/package.json\", { paths: [base] })\n const pkgDir = path.dirname(pkgPath)\n const pkgJson = JSON.parse(fs.readFileSync(pkgPath, \"utf8\"))\n const binPath = typeof pkgJson.bin === \"string\" ? pkgJson.bin : pkgJson.bin?.vitest\n if (binPath) {\n return {\n command: process.execPath,\n args: [path.join(pkgDir, binPath)],\n }\n }\n } catch (_error) {\n // Continue searching for a usable vitest launcher.\n }\n }\n\n const localBin = path.resolve(process.cwd(), \"node_modules/.bin/vitest\")\n if (fs.existsSync(localBin)) {\n return {\n command: localBin,\n args: [],\n }\n }\n\n return {\n command: \"vitest\",\n args: [],\n }\n}\n\nfunction resolveVitestConfig(): string | null {\n const userConfig = findVitestConfig(process.cwd())\n if (userConfig) {\n return userConfig\n }\n\n const bundledConfig = path.join(moduleDir, \"..\", \"vitest.config.js\")\n return fs.existsSync(bundledConfig) ? bundledConfig : null\n}\n\nfunction findVitestConfig(baseDir: string): string | null {\n const candidates = [\n \"vitest.config.ts\",\n \"vitest.config.js\",\n \"vitest.config.mjs\",\n ]\n\n for (const file of candidates) {\n const fullPath = path.join(baseDir, file)\n if (fs.existsSync(fullPath)) {\n return fullPath\n }\n }\n\n return null\n}\n\nasync function convertNodeCoverage(coverage: { config: CoverageConfig; nodeCoverageDir: string }): Promise<void> {\n const { config, nodeCoverageDir } = coverage\n\n const entries = await fsPromises.readdir(nodeCoverageDir).catch(() => [])\n const scripts = []\n const scriptRoots = resolveCollectCoverageRoots(config.collectCoverageFrom, config.rootDir)\n\n for (const entry of entries) {\n if (!entry.endsWith(\".json\")) {\n continue\n }\n\n const fullPath = path.join(nodeCoverageDir, entry)\n const payload = await readJson(fullPath)\n const results = Array.isArray(payload?.result) ? payload.result : []\n\n for (const script of results) {\n const normalized = normalizeNodeScriptUrl(script.url, config.rootDir)\n if (!normalized) {\n continue\n }\n\n if (isNodeModulesPath(normalized.absolutePath)) {\n continue\n }\n\n if (!isInsideAnyRoot(normalized.absolutePath, scriptRoots)) {\n continue\n }\n\n const source = await fsPromises.readFile(normalized.absolutePath, \"utf8\").catch(() => \"\")\n\n scripts.push({\n absolutePath: normalized.absolutePath,\n relativePath: normalized.relativePath,\n source,\n functions: script.functions ?? [],\n url: script.url,\n })\n }\n }\n\n if (scripts.length === 0) {\n return\n }\n\n const outDir = path.join(config.rootDir, \"build\", \"vitest\", \"coverage\")\n await fsPromises.mkdir(outDir, { recursive: true })\n const outputFile = path.join(outDir, config.coverageFileName)\n await fsPromises.writeFile(outputFile, JSON.stringify({ testId: \"vitest\", scripts }, null, 2), \"utf8\")\n}\n\nasync function readJson(filePath: string): Promise<any | null> {\n try {\n const raw = await fsPromises.readFile(filePath, \"utf8\")\n return JSON.parse(raw)\n } catch {\n return null\n }\n}\n\nfunction normalizeNodeScriptUrl(\n rawUrl: string,\n rootDir: string,\n): { absolutePath: string; relativePath: string } | null {\n if (!rawUrl || rawUrl.startsWith(\"node:\")) {\n return null\n }\n\n let absolutePath = null\n\n try {\n if (rawUrl.startsWith(\"file://\")) {\n absolutePath = fileURLToPath(rawUrl)\n }\n } catch (_err) {\n // Ignore invalid file URLs in raw coverage payloads.\n }\n\n if (!absolutePath && path.isAbsolute(rawUrl)) {\n absolutePath = rawUrl\n }\n\n if (!absolutePath) {\n return null\n }\n\n const normalized = path.normalize(absolutePath)\n\n return {\n absolutePath: normalized,\n relativePath: path.relative(rootDir, normalized),\n }\n}\n\nfunction isNodeModulesPath(filePath: unknown): boolean {\n return path\n .normalize(String(filePath ?? \"\"))\n .split(path.sep)\n .includes(\"node_modules\")\n}\n"],"mappings":"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"}
|
package/dist/serverCoverage.js
CHANGED
|
@@ -1,46 +1,32 @@
|
|
|
1
|
+
//#region src/serverCoverage.ts
|
|
1
2
|
async function setupServerCoverage(config, options = {}) {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
};
|
|
20
|
-
}
|
|
21
|
-
throw new Error(`Failed to start server coverage: ${startResponse.status} ${body}`);
|
|
22
|
-
}
|
|
23
|
-
return async function stopCoverage() {
|
|
24
|
-
const stopResponse = await fetch(`${baseURL}/api/dev/coverage/stop`, {
|
|
25
|
-
method: "POST"
|
|
26
|
-
});
|
|
27
|
-
if (!stopResponse.ok) {
|
|
28
|
-
const body = await stopResponse.text().catch(() => "");
|
|
29
|
-
throw new Error(`Failed to stop server coverage: ${stopResponse.status} ${body}`);
|
|
30
|
-
}
|
|
31
|
-
};
|
|
3
|
+
if (process.env.RB_DISABLE_COVERAGE === "1") return async () => {};
|
|
4
|
+
const strict = options.strict ?? true;
|
|
5
|
+
const baseURL = resolveBaseURL(config, options, strict);
|
|
6
|
+
if (!baseURL) return async () => {};
|
|
7
|
+
const startResponse = await fetch(`${baseURL}/api/dev/coverage/start`, { method: "POST" });
|
|
8
|
+
if (!startResponse.ok) {
|
|
9
|
+
const body = await startResponse.text().catch(() => "");
|
|
10
|
+
if (!strict) return async () => {};
|
|
11
|
+
throw new Error(`Failed to start server coverage: ${startResponse.status} ${body}`);
|
|
12
|
+
}
|
|
13
|
+
return async function stopCoverage() {
|
|
14
|
+
const stopResponse = await fetch(`${baseURL}/api/dev/coverage/stop`, { method: "POST" });
|
|
15
|
+
if (!stopResponse.ok) {
|
|
16
|
+
const body = await stopResponse.text().catch(() => "");
|
|
17
|
+
throw new Error(`Failed to stop server coverage: ${stopResponse.status} ${body}`);
|
|
18
|
+
}
|
|
19
|
+
};
|
|
32
20
|
}
|
|
33
21
|
function resolveBaseURL(config, options, strict) {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
}
|
|
41
|
-
return raw.replace(/\/$/, "");
|
|
22
|
+
const raw = options.baseURL ?? (config.projects?.[0]?.use)?.baseURL ?? (process.env.PORT ? `http://localhost:${process.env.PORT}` : null);
|
|
23
|
+
if (typeof raw !== "string" || !raw.trim()) {
|
|
24
|
+
if (!strict) return null;
|
|
25
|
+
throw new Error("Cannot resolve Playwright baseURL (missing config.projects[0].use.baseURL and PORT)");
|
|
26
|
+
}
|
|
27
|
+
return raw.replace(/\/$/, "");
|
|
42
28
|
}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
//# sourceMappingURL=serverCoverage.js.map
|
|
29
|
+
//#endregion
|
|
30
|
+
export { setupServerCoverage };
|
|
31
|
+
|
|
32
|
+
//# sourceMappingURL=serverCoverage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serverCoverage.js","sources":["../src/serverCoverage.ts"],"sourcesContent":["import type { FullConfig } from \"@playwright/test\"\n\n\ntype SetupServerCoverageOptions = {\n baseURL?: string\n strict?: boolean\n}\n\nexport async function setupServerCoverage(\n config: FullConfig,\n options: SetupServerCoverageOptions = {},\n): Promise<() => Promise<void>> {\n if (process.env.RB_DISABLE_COVERAGE === \"1\") {\n return async () => {}\n }\n\n const strict = options.strict ?? true\n const baseURL = resolveBaseURL(config, options, strict)\n if (!baseURL) {\n return async () => {}\n }\n\n const startResponse = await fetch(`${baseURL}/api/dev/coverage/start`, { method: \"POST\" })\n if (!startResponse.ok) {\n const body = await startResponse.text().catch(() => \"\")\n if (!strict) {\n return async () => {}\n }\n throw new Error(`Failed to start server coverage: ${startResponse.status} ${body}`)\n }\n\n return async function stopCoverage(): Promise<void> {\n const stopResponse = await fetch(`${baseURL}/api/dev/coverage/stop`, { method: \"POST\" })\n if (!stopResponse.ok) {\n const body = await stopResponse.text().catch(() => \"\")\n throw new Error(`Failed to stop server coverage: ${stopResponse.status} ${body}`)\n }\n }\n}\n\nfunction resolveBaseURL(config: FullConfig, options: SetupServerCoverageOptions, strict: boolean): string | null {\n const raw = options.baseURL ?? (config.projects?.[0]?.use as any)?.baseURL\n ?? (process.env.PORT ? `http://localhost:${process.env.PORT}` : null)\n\n if (typeof raw !== \"string\" || !raw.trim()) {\n if (!strict) {\n return null\n }\n throw new Error(\"Cannot resolve Playwright baseURL (missing config.projects[0].use.baseURL and PORT)\")\n }\n\n return raw.replace(/\\/$/, \"\")\n}\n"],"
|
|
1
|
+
{"version":3,"file":"serverCoverage.js","names":["FullConfig","SetupServerCoverageOptions","baseURL","strict","setupServerCoverage","config","options","Promise","process","env","RB_DISABLE_COVERAGE","resolveBaseURL","startResponse","fetch","method","ok","body","text","catch","Error","status","stopCoverage","stopResponse","raw","projects","use","PORT","trim","replace"],"sources":["../src/serverCoverage.ts"],"sourcesContent":["import type { FullConfig } from \"@playwright/test\"\n\n\ntype SetupServerCoverageOptions = {\n baseURL?: string\n strict?: boolean\n}\n\nexport async function setupServerCoverage(\n config: FullConfig,\n options: SetupServerCoverageOptions = {},\n): Promise<() => Promise<void>> {\n if (process.env.RB_DISABLE_COVERAGE === \"1\") {\n return async () => {}\n }\n\n const strict = options.strict ?? true\n const baseURL = resolveBaseURL(config, options, strict)\n if (!baseURL) {\n return async () => {}\n }\n\n const startResponse = await fetch(`${baseURL}/api/dev/coverage/start`, { method: \"POST\" })\n if (!startResponse.ok) {\n const body = await startResponse.text().catch(() => \"\")\n if (!strict) {\n return async () => {}\n }\n throw new Error(`Failed to start server coverage: ${startResponse.status} ${body}`)\n }\n\n return async function stopCoverage(): Promise<void> {\n const stopResponse = await fetch(`${baseURL}/api/dev/coverage/stop`, { method: \"POST\" })\n if (!stopResponse.ok) {\n const body = await stopResponse.text().catch(() => \"\")\n throw new Error(`Failed to stop server coverage: ${stopResponse.status} ${body}`)\n }\n }\n}\n\nfunction resolveBaseURL(config: FullConfig, options: SetupServerCoverageOptions, strict: boolean): string | null {\n const raw = options.baseURL ?? (config.projects?.[0]?.use as any)?.baseURL\n ?? (process.env.PORT ? `http://localhost:${process.env.PORT}` : null)\n\n if (typeof raw !== \"string\" || !raw.trim()) {\n if (!strict) {\n return null\n }\n throw new Error(\"Cannot resolve Playwright baseURL (missing config.projects[0].use.baseURL and PORT)\")\n }\n\n return raw.replace(/\\/$/, \"\")\n}\n"],"mappings":";AAQA,eAAsBI,oBACpBC,QACAC,UAAsC,EAAE,EACV;AAC9B,KAAIE,QAAQC,IAAIC,wBAAwB,IACtC,QAAO,YAAY;CAGrB,MAAMP,SAASG,QAAQH,UAAU;CACjC,MAAMD,UAAUS,eAAeN,QAAQC,SAASH,OAAO;AACvD,KAAI,CAACD,QACH,QAAO,YAAY;CAGrB,MAAMU,gBAAgB,MAAMC,MAAM,GAAGX,QAAO,0BAA2B,EAAEY,QAAQ,QAAQ,CAAC;AAC1F,KAAI,CAACF,cAAcG,IAAI;EACrB,MAAMC,OAAO,MAAMJ,cAAcK,MAAM,CAACC,YAAY,GAAG;AACvD,MAAI,CAACf,OACH,QAAO,YAAY;AAErB,QAAM,IAAIgB,MAAM,oCAAoCP,cAAcQ,OAAM,GAAIJ,OAAO;;AAGrF,QAAO,eAAeK,eAA8B;EAClD,MAAMC,eAAe,MAAMT,MAAM,GAAGX,QAAO,yBAA0B,EAAEY,QAAQ,QAAQ,CAAC;AACxF,MAAI,CAACQ,aAAaP,IAAI;GACpB,MAAMC,OAAO,MAAMM,aAAaL,MAAM,CAACC,YAAY,GAAG;AACtD,SAAM,IAAIC,MAAM,mCAAmCG,aAAaF,OAAM,GAAIJ,OAAO;;;;AAKvF,SAASL,eAAeN,QAAoBC,SAAqCH,QAAgC;CAC/G,MAAMoB,MAAMjB,QAAQJ,YAAYG,OAAOmB,WAAW,IAAIC,MAAavB,YAC7DM,QAAQC,IAAIiB,OAAO,oBAAoBlB,QAAQC,IAAIiB,SAAS;AAElE,KAAI,OAAOH,QAAQ,YAAY,CAACA,IAAII,MAAM,EAAE;AAC1C,MAAI,CAACxB,OACH,QAAO;AAET,QAAM,IAAIgB,MAAM,sFAAsF;;AAGxG,QAAOI,IAAIK,QAAQ,OAAO,GAAG"}
|
package/dist/vitest.config.d.ts
CHANGED