@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.
Files changed (43) hide show
  1. package/dist/clearDatabase.js +10 -12
  2. package/dist/clearDatabase.js.map +1 -1
  3. package/dist/cli.js +439 -556
  4. package/dist/cli.js.map +1 -1
  5. package/dist/coverage/collect.js +63 -101
  6. package/dist/coverage/collect.js.map +1 -1
  7. package/dist/coverage/config-loader.js +180 -230
  8. package/dist/coverage/config-loader.js.map +1 -1
  9. package/dist/coverage/config.js +76 -100
  10. package/dist/coverage/config.js.map +1 -1
  11. package/dist/coverage/console-text-report.js +175 -220
  12. package/dist/coverage/console-text-report.js.map +1 -1
  13. package/dist/coverage/files.js +45 -58
  14. package/dist/coverage/files.js.map +1 -1
  15. package/dist/coverage/fixtures.js +27 -38
  16. package/dist/coverage/fixtures.js.map +1 -1
  17. package/dist/coverage/global-setup.js +15 -18
  18. package/dist/coverage/global-setup.js.map +1 -1
  19. package/dist/coverage/index.js +38 -55
  20. package/dist/coverage/index.js.map +1 -1
  21. package/dist/coverage/report.js +341 -466
  22. package/dist/coverage/report.js.map +1 -1
  23. package/dist/coverage/reporter.js +47 -61
  24. package/dist/coverage/reporter.js.map +1 -1
  25. package/dist/coverage/v8-tracker.js +115 -147
  26. package/dist/coverage/v8-tracker.js.map +1 -1
  27. package/dist/index.js +46 -75
  28. package/dist/index.js.map +1 -1
  29. package/dist/runners/playwright.d.ts.map +1 -1
  30. package/dist/runners/playwright.js +398 -449
  31. package/dist/runners/playwright.js.map +1 -1
  32. package/dist/runners/process.d.ts +4 -1
  33. package/dist/runners/process.d.ts.map +1 -1
  34. package/dist/runners/process.js +111 -101
  35. package/dist/runners/process.js.map +1 -1
  36. package/dist/runners/vitest.js +124 -171
  37. package/dist/runners/vitest.js.map +1 -1
  38. package/dist/serverCoverage.js +28 -42
  39. package/dist/serverCoverage.js.map +1 -1
  40. package/dist/vitest.config.d.ts +1 -1
  41. package/dist/vitest.config.js +62 -74
  42. package/dist/vitest.config.js.map +1 -1
  43. package/package.json +1 -1
@@ -1,191 +1,144 @@
1
- import fs$1 from "node:fs";
2
- import fs from "node:fs/promises";
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
- import { resolveCollectCoverageRoots, isInsideAnyRoot } from "../coverage/collect.js";
7
- import { withRegisterShim, spawnWithLogs } from "./process.js";
8
- const require$1 = createRequire(import.meta.url);
9
- const moduleDir = path.dirname(fileURLToPath(import.meta.url));
10
- async function runVitest(coverage, combinedConfig, userArgs, {
11
- disableCoverage = false
12
- } = {}) {
13
- const vitestArgs = ["run", "--passWithNoTests"];
14
- const vitestConfig = resolveVitestConfig();
15
- const hasCustomConfig = userArgs.some((arg) => {
16
- if (arg === "--config" || arg === "-c") {
17
- return true;
18
- }
19
- return arg.startsWith("--config=");
20
- });
21
- if (vitestConfig && !hasCustomConfig) {
22
- vitestArgs.push("--config", vitestConfig);
23
- }
24
- vitestArgs.push(...userArgs);
25
- const launcher = resolveVitestLauncher();
26
- const env = withRegisterShim(process.env);
27
- if (disableCoverage) {
28
- env.RB_DISABLE_COVERAGE = "1";
29
- }
30
- if (coverage?.enabled && !disableCoverage) {
31
- const nodeCoverageDir = resolveNodeCoverageDir(combinedConfig ?? coverage.config);
32
- await fs.mkdir(nodeCoverageDir, {
33
- recursive: true
34
- });
35
- env.NODE_V8_COVERAGE = nodeCoverageDir;
36
- }
37
- await spawnWithLogs({
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
- return path.join(config.rootDir, "build", "vitest", "test-results", "node-coverage");
42
+ return path.join(config.rootDir, "build", "vitest", "test-results", "node-coverage");
54
43
  }
55
44
  function resolveVitestLauncher() {
56
- const searchRoots = [process.cwd(), moduleDir];
57
- for (const base of searchRoots) {
58
- try {
59
- const pkgPath = require$1.resolve("vitest/package.json", {
60
- paths: [base]
61
- });
62
- const pkgDir = path.dirname(pkgPath);
63
- const pkgJson = JSON.parse(fs$1.readFileSync(pkgPath, "utf8"));
64
- const binPath = typeof pkgJson.bin === "string" ? pkgJson.bin : pkgJson.bin?.vitest;
65
- if (binPath) {
66
- return {
67
- command: process.execPath,
68
- args: [path.join(pkgDir, binPath)]
69
- };
70
- }
71
- } catch (_error) {
72
- }
73
- }
74
- const localBin = path.resolve(process.cwd(), "node_modules/.bin/vitest");
75
- if (fs$1.existsSync(localBin)) {
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
- const userConfig = findVitestConfig(process.cwd());
88
- if (userConfig) {
89
- return userConfig;
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
- const candidates = ["vitest.config.ts", "vitest.config.js", "vitest.config.mjs"];
96
- for (const file of candidates) {
97
- const fullPath = path.join(baseDir, file);
98
- if (fs$1.existsSync(fullPath)) {
99
- return fullPath;
100
- }
101
- }
102
- return null;
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
- const {
106
- config,
107
- nodeCoverageDir
108
- } = coverage;
109
- const entries = await fs.readdir(nodeCoverageDir).catch(() => []);
110
- const scripts = [];
111
- const scriptRoots = resolveCollectCoverageRoots(config.collectCoverageFrom, config.rootDir);
112
- for (const entry of entries) {
113
- if (!entry.endsWith(".json")) {
114
- continue;
115
- }
116
- const fullPath = path.join(nodeCoverageDir, entry);
117
- const payload = await readJson(fullPath);
118
- const results = Array.isArray(payload?.result) ? payload.result : [];
119
- for (const script of results) {
120
- const normalized = normalizeNodeScriptUrl(script.url, config.rootDir);
121
- if (!normalized) {
122
- continue;
123
- }
124
- if (isNodeModulesPath(normalized.absolutePath)) {
125
- continue;
126
- }
127
- if (!isInsideAnyRoot(normalized.absolutePath, scriptRoots)) {
128
- continue;
129
- }
130
- const source = await fs.readFile(normalized.absolutePath, "utf8").catch(() => "");
131
- scripts.push({
132
- absolutePath: normalized.absolutePath,
133
- relativePath: normalized.relativePath,
134
- source,
135
- functions: script.functions ?? [],
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
- try {
155
- const raw = await fs.readFile(filePath, "utf8");
156
- return JSON.parse(raw);
157
- } catch {
158
- return null;
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
- if (!rawUrl || rawUrl.startsWith("node:")) {
163
- return null;
164
- }
165
- let absolutePath = null;
166
- try {
167
- if (rawUrl.startsWith("file://")) {
168
- absolutePath = fileURLToPath(rawUrl);
169
- }
170
- } catch (_err) {
171
- }
172
- if (!absolutePath && path.isAbsolute(rawUrl)) {
173
- absolutePath = rawUrl;
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
- return path.normalize(String(filePath ?? "")).split(path.sep).includes("node_modules");
139
+ return path.normalize(String(filePath ?? "")).split(path.sep).includes("node_modules");
186
140
  }
187
- export {
188
- resolveNodeCoverageDir,
189
- runVitest
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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"}
@@ -1,46 +1,32 @@
1
+ //#region src/serverCoverage.ts
1
2
  async function setupServerCoverage(config, options = {}) {
2
- if (process.env.RB_DISABLE_COVERAGE === "1") {
3
- return async () => {
4
- };
5
- }
6
- const strict = options.strict ?? true;
7
- const baseURL = resolveBaseURL(config, options, strict);
8
- if (!baseURL) {
9
- return async () => {
10
- };
11
- }
12
- const startResponse = await fetch(`${baseURL}/api/dev/coverage/start`, {
13
- method: "POST"
14
- });
15
- if (!startResponse.ok) {
16
- const body = await startResponse.text().catch(() => "");
17
- if (!strict) {
18
- return async () => {
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
- const raw = options.baseURL ?? config.projects?.[0]?.use?.baseURL ?? (process.env.PORT ? `http://localhost:${process.env.PORT}` : null);
35
- if (typeof raw !== "string" || !raw.trim()) {
36
- if (!strict) {
37
- return null;
38
- }
39
- throw new Error("Cannot resolve Playwright baseURL (missing config.projects[0].use.baseURL and PORT)");
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
- export {
44
- setupServerCoverage
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"],"names":["setupServerCoverage","config","options","process","env","RB_DISABLE_COVERAGE","strict","baseURL","resolveBaseURL","startResponse","fetch","method","ok","body","text","catch","Error","status","stopCoverage","stopResponse","raw","projects","use","PORT","trim","replace"],"mappings":"AAQA,eAAsBA,oBACpBC,QACAC,UAAsC,IACR;AAC9B,MAAIC,QAAQC,IAAIC,wBAAwB,KAAK;AAC3C,WAAO,YAAY;AAAA,IAAC;AAAA,EACtB;AAEA,QAAMC,SAASJ,QAAQI,UAAU;AACjC,QAAMC,UAAUC,eAAeP,QAAQC,SAASI,MAAM;AACtD,MAAI,CAACC,SAAS;AACZ,WAAO,YAAY;AAAA,IAAC;AAAA,EACtB;AAEA,QAAME,gBAAgB,MAAMC,MAAM,GAAGH,OAAO,2BAA2B;AAAA,IAAEI,QAAQ;AAAA,EAAA,CAAQ;AACzF,MAAI,CAACF,cAAcG,IAAI;AACrB,UAAMC,OAAO,MAAMJ,cAAcK,OAAOC,MAAM,MAAM,EAAE;AACtD,QAAI,CAACT,QAAQ;AACX,aAAO,YAAY;AAAA,MAAC;AAAA,IACtB;AACA,UAAM,IAAIU,MAAM,oCAAoCP,cAAcQ,MAAM,IAAIJ,IAAI,EAAE;AAAA,EACpF;AAEA,SAAO,eAAeK,eAA8B;AAClD,UAAMC,eAAe,MAAMT,MAAM,GAAGH,OAAO,0BAA0B;AAAA,MAAEI,QAAQ;AAAA,IAAA,CAAQ;AACvF,QAAI,CAACQ,aAAaP,IAAI;AACpB,YAAMC,OAAO,MAAMM,aAAaL,OAAOC,MAAM,MAAM,EAAE;AACrD,YAAM,IAAIC,MAAM,mCAAmCG,aAAaF,MAAM,IAAIJ,IAAI,EAAE;AAAA,IAClF;AAAA,EACF;AACF;AAEA,SAASL,eAAeP,QAAoBC,SAAqCI,QAAgC;AAC/G,QAAMc,MAAMlB,QAAQK,WAAYN,OAAOoB,WAAW,CAAC,GAAGC,KAAaf,YAC7DJ,QAAQC,IAAImB,OAAO,oBAAoBpB,QAAQC,IAAImB,IAAI,KAAK;AAElE,MAAI,OAAOH,QAAQ,YAAY,CAACA,IAAII,QAAQ;AAC1C,QAAI,CAAClB,QAAQ;AACX,aAAO;AAAA,IACT;AACA,UAAM,IAAIU,MAAM,qFAAqF;AAAA,EACvG;AAEA,SAAOI,IAAIK,QAAQ,OAAO,EAAE;AAC9B;"}
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"}
@@ -1,3 +1,3 @@
1
- declare const _default: import('vite').UserConfig;
1
+ declare const _default: import('../../node_modules/vite/dist/node/index.d.ts').UserConfig;
2
2
  export default _default;
3
3
  //# sourceMappingURL=vitest.config.d.ts.map