@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,250 +1,205 @@
1
1
  import path from "node:path";
2
- const DEFAULT_CONSOLE_MAX_COLS = 80;
3
- const CONSOLE_SUMMARIZER = "rbCwd";
2
+ //#region src/coverage/console-text-report.ts
3
+ var DEFAULT_CONSOLE_MAX_COLS = 80;
4
+ var CONSOLE_SUMMARIZER = "rbCwd";
4
5
  function generateConsoleTextCoverageReport(reports, context) {
5
- const debug = resolveConsoleReportDebugInfo();
6
- const summarizer = registerConsoleSummarizer(context);
7
- writeConsoleReportDebugLog({
8
- ...debug,
9
- summarizer
10
- });
11
- const reportOutput = createConsoleTextReportOutput(reports, context, {
12
- maxCols: debug.maxCols + 20,
13
- summarizer
14
- });
15
- return {
16
- output: stripUncoveredLineNumbersColumn(reportOutput),
17
- summarizer
18
- };
6
+ const debug = resolveConsoleReportDebugInfo();
7
+ const summarizer = registerConsoleSummarizer(context);
8
+ writeConsoleReportDebugLog({
9
+ ...debug,
10
+ summarizer
11
+ });
12
+ return {
13
+ output: stripUncoveredLineNumbersColumn(createConsoleTextReportOutput(reports, context, {
14
+ maxCols: debug.maxCols + 20,
15
+ summarizer
16
+ })),
17
+ summarizer
18
+ };
19
19
  }
20
20
  function resolveConsoleReportDebugInfo() {
21
- const isTTY = Boolean(process.stdout.isTTY);
22
- const stdoutColumns = process.stdout.columns;
23
- const envColumns = process.env.COLUMNS;
24
- const maxCols = resolveConsoleMaxCols(stdoutColumns, envColumns);
25
- return {
26
- isTTY,
27
- stdoutColumns,
28
- envColumns,
29
- maxCols
30
- };
21
+ const isTTY = Boolean(process.stdout.isTTY);
22
+ const stdoutColumns = process.stdout.columns;
23
+ const envColumns = process.env.COLUMNS;
24
+ return {
25
+ isTTY,
26
+ stdoutColumns,
27
+ envColumns,
28
+ maxCols: resolveConsoleMaxCols(stdoutColumns, envColumns)
29
+ };
31
30
  }
32
31
  function resolveConsoleMaxCols(stdoutColumns, envColumns) {
33
- if (typeof stdoutColumns === "number" && Number.isFinite(stdoutColumns) && stdoutColumns > 0) {
34
- return stdoutColumns;
35
- }
36
- const parsed = typeof envColumns === "string" ? Number.parseInt(envColumns, 10) : Number.NaN;
37
- if (Number.isFinite(parsed) && parsed > 0) {
38
- return parsed;
39
- }
40
- return DEFAULT_CONSOLE_MAX_COLS;
41
- }
42
- function writeConsoleReportDebugLog({
43
- isTTY,
44
- stdoutColumns,
45
- envColumns,
46
- maxCols,
47
- summarizer
48
- }) {
49
- const message = ["[coverage] debug", `stdout.isTTY=${isTTY ? "1" : "0"}`, `stdout.columns=${stdoutColumns ?? "undefined"}`, `env.COLUMNS=${envColumns ?? "undefined"}`, `resolvedMaxCols=${maxCols}`, `summarizer=${summarizer ?? "undefined"}`].join(" ");
50
- process.stderr.write(`${message}
51
- `);
32
+ if (typeof stdoutColumns === "number" && Number.isFinite(stdoutColumns) && stdoutColumns > 0) return stdoutColumns;
33
+ const parsed = typeof envColumns === "string" ? Number.parseInt(envColumns, 10) : NaN;
34
+ if (Number.isFinite(parsed) && parsed > 0) return parsed;
35
+ return DEFAULT_CONSOLE_MAX_COLS;
36
+ }
37
+ function writeConsoleReportDebugLog({ isTTY, stdoutColumns, envColumns, maxCols, summarizer }) {
38
+ const message = [
39
+ "[coverage] debug",
40
+ `stdout.isTTY=${isTTY ? "1" : "0"}`,
41
+ `stdout.columns=${stdoutColumns ?? "undefined"}`,
42
+ `env.COLUMNS=${envColumns ?? "undefined"}`,
43
+ `resolvedMaxCols=${maxCols}`,
44
+ `summarizer=${summarizer ?? "undefined"}`
45
+ ].join(" ");
46
+ process.stderr.write(`${message}\n`);
52
47
  }
53
48
  function createConsoleTextReportOutput(reports, context, options) {
54
- const fileWriter = context?.writer;
55
- const fileWriterCtor = fileWriter?.constructor;
56
- if (!fileWriterCtor || typeof fileWriterCtor.startCapture !== "function" || typeof fileWriterCtor.stopCapture !== "function" || typeof fileWriterCtor.getOutput !== "function" || typeof fileWriterCtor.resetOutput !== "function") {
57
- reports.create("text", {
58
- maxCols: options.maxCols,
59
- summarizer: options.summarizer
60
- }).execute(context);
61
- return "";
62
- }
63
- fileWriterCtor.resetOutput();
64
- fileWriterCtor.startCapture();
65
- try {
66
- reports.create("text", {
67
- maxCols: options.maxCols,
68
- summarizer: options.summarizer
69
- }).execute(context);
70
- } finally {
71
- fileWriterCtor.stopCapture();
72
- }
73
- const output = fileWriterCtor.getOutput();
74
- fileWriterCtor.resetOutput();
75
- return output;
49
+ const fileWriterCtor = (context?.writer)?.constructor;
50
+ if (!fileWriterCtor || typeof fileWriterCtor.startCapture !== "function" || typeof fileWriterCtor.stopCapture !== "function" || typeof fileWriterCtor.getOutput !== "function" || typeof fileWriterCtor.resetOutput !== "function") {
51
+ reports.create("text", {
52
+ maxCols: options.maxCols,
53
+ summarizer: options.summarizer
54
+ }).execute(context);
55
+ return "";
56
+ }
57
+ fileWriterCtor.resetOutput();
58
+ fileWriterCtor.startCapture();
59
+ try {
60
+ reports.create("text", {
61
+ maxCols: options.maxCols,
62
+ summarizer: options.summarizer
63
+ }).execute(context);
64
+ } finally {
65
+ fileWriterCtor.stopCapture();
66
+ }
67
+ const output = fileWriterCtor.getOutput();
68
+ fileWriterCtor.resetOutput();
69
+ return output;
76
70
  }
77
71
  function stripUncoveredLineNumbersColumn(output) {
78
- const lines = output.split("\n");
79
- const filtered = lines.map((line) => {
80
- const parts = line.split("|");
81
- if (parts.length < 6) {
82
- return line.trimEnd();
83
- }
84
- return parts.slice(0, 5).join("|").trimEnd();
85
- });
86
- return filtered.join("\n");
72
+ return output.split("\n").map((line) => {
73
+ const parts = line.split("|");
74
+ if (parts.length < 6) return line.trimEnd();
75
+ return parts.slice(0, 5).join("|").trimEnd();
76
+ }).join("\n");
87
77
  }
88
78
  function registerConsoleSummarizer(context) {
89
- const summarizerFactory = context?._summarizerFactory;
90
- if (!summarizerFactory || typeof summarizerFactory !== "object") {
91
- return void 0;
92
- }
93
- if (CONSOLE_SUMMARIZER in summarizerFactory) {
94
- return CONSOLE_SUMMARIZER;
95
- }
96
- const pkgTree = context.getTree?.("pkg");
97
- const pkgRoot = pkgTree?.getRoot?.();
98
- if (!pkgRoot) {
99
- return void 0;
100
- }
101
- summarizerFactory[CONSOLE_SUMMARIZER] = createCollapsedCwdTree(pkgRoot, process.cwd());
102
- return CONSOLE_SUMMARIZER;
79
+ const summarizerFactory = context?._summarizerFactory;
80
+ if (!summarizerFactory || typeof summarizerFactory !== "object") return;
81
+ if (CONSOLE_SUMMARIZER in summarizerFactory) return CONSOLE_SUMMARIZER;
82
+ const pkgRoot = (context.getTree?.("pkg"))?.getRoot?.();
83
+ if (!pkgRoot) return;
84
+ summarizerFactory[CONSOLE_SUMMARIZER] = createCollapsedCwdTree(pkgRoot, process.cwd());
85
+ return CONSOLE_SUMMARIZER;
103
86
  }
104
87
  function createCollapsedCwdTree(root, cwd) {
105
- const treeRoot = createCwdTreeFromCoverage(root, cwd);
106
- const clonedRoot = cloneReportNode(treeRoot, null);
107
- return {
108
- getRoot: () => clonedRoot,
109
- visit: (visitor, state) => {
110
- const fullVisitor = toFullVisitor(visitor);
111
- fullVisitor.onStart(clonedRoot, state);
112
- clonedRoot.visit(fullVisitor, state);
113
- fullVisitor.onEnd(clonedRoot, state);
114
- }
115
- };
88
+ const clonedRoot = cloneReportNode(createCwdTreeFromCoverage(root, cwd), null);
89
+ return {
90
+ getRoot: () => clonedRoot,
91
+ visit: (visitor, state) => {
92
+ const fullVisitor = toFullVisitor(visitor);
93
+ fullVisitor.onStart(clonedRoot, state);
94
+ clonedRoot.visit(fullVisitor, state);
95
+ fullVisitor.onEnd(clonedRoot, state);
96
+ }
97
+ };
116
98
  }
117
99
  function createCwdTreeFromCoverage(root, cwd) {
118
- const proto = Object.getPrototypeOf(root);
119
- const pathCtor = root?.path?.constructor;
120
- const fileCoverages = [];
121
- collectFileCoverages(root, fileCoverages);
122
- const treeRoot = Object.create(proto);
123
- treeRoot.path = pathCtor ? new pathCtor([]) : root.path;
124
- treeRoot.fileCoverage = null;
125
- treeRoot.parent = null;
126
- treeRoot.children = [];
127
- const dirNodes = /* @__PURE__ */ new Map();
128
- dirNodes.set("", treeRoot);
129
- for (const fileCoverage of fileCoverages) {
130
- const absolutePath = path.resolve(String(fileCoverage?.path ?? ""));
131
- if (!absolutePath) {
132
- continue;
133
- }
134
- let relativePath = toPosix(path.relative(cwd, absolutePath));
135
- if (!relativePath) {
136
- relativePath = toPosix(absolutePath);
137
- }
138
- if (isInsideCwd(relativePath) && (relativePath === "src" || relativePath.startsWith("src/"))) {
139
- relativePath = relativePath === "src" ? "" : relativePath.slice("src/".length);
140
- }
141
- if (!relativePath) {
142
- relativePath = toPosix(path.basename(absolutePath));
143
- }
144
- const segments = relativePath.split("/").filter(Boolean);
145
- if (segments.length === 0) {
146
- continue;
147
- }
148
- let parent = treeRoot;
149
- let prefix = "";
150
- for (let i = 0; i < segments.length - 1; i += 1) {
151
- prefix = prefix ? `${prefix}/${segments[i]}` : segments[i];
152
- const existing = dirNodes.get(prefix);
153
- if (existing) {
154
- parent = existing;
155
- continue;
156
- }
157
- const dirNode = Object.create(proto);
158
- dirNode.path = pathCtor ? new pathCtor(prefix.split("/")) : root.path;
159
- dirNode.fileCoverage = null;
160
- dirNode.parent = parent;
161
- dirNode.children = [];
162
- parent.children.push(dirNode);
163
- dirNodes.set(prefix, dirNode);
164
- parent = dirNode;
165
- }
166
- const fileNode = Object.create(proto);
167
- fileNode.path = pathCtor ? new pathCtor(segments) : root.path;
168
- fileNode.fileCoverage = fileCoverage;
169
- fileNode.parent = parent;
170
- fileNode.children = [];
171
- parent.children.push(fileNode);
172
- }
173
- sortReportTree(treeRoot);
174
- return treeRoot;
100
+ const proto = Object.getPrototypeOf(root);
101
+ const pathCtor = root?.path?.constructor;
102
+ const fileCoverages = [];
103
+ collectFileCoverages(root, fileCoverages);
104
+ const treeRoot = Object.create(proto);
105
+ treeRoot.path = pathCtor ? new pathCtor([]) : root.path;
106
+ treeRoot.fileCoverage = null;
107
+ treeRoot.parent = null;
108
+ treeRoot.children = [];
109
+ const dirNodes = /* @__PURE__ */ new Map();
110
+ dirNodes.set("", treeRoot);
111
+ for (const fileCoverage of fileCoverages) {
112
+ const absolutePath = path.resolve(String(fileCoverage?.path ?? ""));
113
+ if (!absolutePath) continue;
114
+ let relativePath = toPosix(path.relative(cwd, absolutePath));
115
+ if (!relativePath) relativePath = toPosix(absolutePath);
116
+ if (isInsideCwd(relativePath) && (relativePath === "src" || relativePath.startsWith("src/"))) relativePath = relativePath === "src" ? "" : relativePath.slice(4);
117
+ if (!relativePath) relativePath = toPosix(path.basename(absolutePath));
118
+ const segments = relativePath.split("/").filter(Boolean);
119
+ if (segments.length === 0) continue;
120
+ let parent = treeRoot;
121
+ let prefix = "";
122
+ for (let i = 0; i < segments.length - 1; i += 1) {
123
+ prefix = prefix ? `${prefix}/${segments[i]}` : segments[i];
124
+ const existing = dirNodes.get(prefix);
125
+ if (existing) {
126
+ parent = existing;
127
+ continue;
128
+ }
129
+ const dirNode = Object.create(proto);
130
+ dirNode.path = pathCtor ? new pathCtor(prefix.split("/")) : root.path;
131
+ dirNode.fileCoverage = null;
132
+ dirNode.parent = parent;
133
+ dirNode.children = [];
134
+ parent.children.push(dirNode);
135
+ dirNodes.set(prefix, dirNode);
136
+ parent = dirNode;
137
+ }
138
+ const fileNode = Object.create(proto);
139
+ fileNode.path = pathCtor ? new pathCtor(segments) : root.path;
140
+ fileNode.fileCoverage = fileCoverage;
141
+ fileNode.parent = parent;
142
+ fileNode.children = [];
143
+ parent.children.push(fileNode);
144
+ }
145
+ sortReportTree(treeRoot);
146
+ return treeRoot;
175
147
  }
176
148
  function collectFileCoverages(node, out) {
177
- if (!node || typeof node.isSummary !== "function") {
178
- return;
179
- }
180
- if (!node.isSummary()) {
181
- const fileCoverage = typeof node.getFileCoverage === "function" ? node.getFileCoverage() : node.fileCoverage;
182
- if (fileCoverage) {
183
- out.push(fileCoverage);
184
- }
185
- return;
186
- }
187
- const children = typeof node.getChildren === "function" ? node.getChildren() : [];
188
- for (const child of children) {
189
- collectFileCoverages(child, out);
190
- }
149
+ if (!node || typeof node.isSummary !== "function") return;
150
+ if (!node.isSummary()) {
151
+ const fileCoverage = typeof node.getFileCoverage === "function" ? node.getFileCoverage() : node.fileCoverage;
152
+ if (fileCoverage) out.push(fileCoverage);
153
+ return;
154
+ }
155
+ const children = typeof node.getChildren === "function" ? node.getChildren() : [];
156
+ for (const child of children) collectFileCoverages(child, out);
191
157
  }
192
158
  function sortReportTree(node) {
193
- const children = Array.isArray(node?.children) ? node.children : [];
194
- if (children.length === 0) {
195
- return;
196
- }
197
- children.sort((a, b) => {
198
- const aKey = typeof a?.path?.toString === "function" ? a.path.toString() : "";
199
- const bKey = typeof b?.path?.toString === "function" ? b.path.toString() : "";
200
- return aKey < bKey ? -1 : aKey > bKey ? 1 : 0;
201
- });
202
- for (const child of children) {
203
- sortReportTree(child);
204
- }
159
+ const children = Array.isArray(node?.children) ? node.children : [];
160
+ if (children.length === 0) return;
161
+ children.sort((a, b) => {
162
+ const aKey = typeof a?.path?.toString === "function" ? a.path.toString() : "";
163
+ const bKey = typeof b?.path?.toString === "function" ? b.path.toString() : "";
164
+ return aKey < bKey ? -1 : aKey > bKey ? 1 : 0;
165
+ });
166
+ for (const child of children) sortReportTree(child);
205
167
  }
206
168
  function isInsideCwd(relativePosix) {
207
- if (!relativePosix) {
208
- return false;
209
- }
210
- return !(relativePosix === ".." || relativePosix.startsWith("../"));
169
+ if (!relativePosix) return false;
170
+ return !(relativePosix === ".." || relativePosix.startsWith("../"));
211
171
  }
212
172
  function toPosix(input) {
213
- return String(input ?? "").split(path.sep).join("/");
173
+ return String(input ?? "").split(path.sep).join("/");
214
174
  }
215
175
  function toFullVisitor(visitor) {
216
- const call = (method) => (node, state) => {
217
- if (typeof visitor?.[method] === "function") {
218
- visitor[method](node, state);
219
- }
220
- };
221
- return {
222
- onStart: call("onStart"),
223
- onEnd: call("onEnd"),
224
- onSummary: call("onSummary"),
225
- onSummaryEnd: call("onSummaryEnd"),
226
- onDetail: call("onDetail")
227
- };
176
+ const call = (method) => (node, state) => {
177
+ if (typeof visitor?.[method] === "function") visitor[method](node, state);
178
+ };
179
+ return {
180
+ onStart: call("onStart"),
181
+ onEnd: call("onEnd"),
182
+ onSummary: call("onSummary"),
183
+ onSummaryEnd: call("onSummaryEnd"),
184
+ onDetail: call("onDetail")
185
+ };
228
186
  }
229
187
  function cloneReportNode(node, parent) {
230
- const clone = Object.create(Object.getPrototypeOf(node));
231
- clone.path = node.path;
232
- clone.fileCoverage = node.fileCoverage;
233
- clone.parent = parent;
234
- const children = typeof node.getChildren === "function" ? node.getChildren() : [];
235
- clone.children = children.flatMap((child) => cloneOrCollapseNode(child, clone));
236
- return clone;
188
+ const clone = Object.create(Object.getPrototypeOf(node));
189
+ clone.path = node.path;
190
+ clone.fileCoverage = node.fileCoverage;
191
+ clone.parent = parent;
192
+ clone.children = (typeof node.getChildren === "function" ? node.getChildren() : []).flatMap((child) => cloneOrCollapseNode(child, clone));
193
+ return clone;
237
194
  }
238
195
  function cloneOrCollapseNode(node, parent) {
239
- if (typeof node?.isSummary === "function" && node.isSummary() && typeof node.isRoot === "function" && !node.isRoot() && typeof node.getChildren === "function") {
240
- const children = node.getChildren();
241
- if (Array.isArray(children) && children.length === 1 && typeof children[0]?.isSummary === "function" && !children[0].isSummary()) {
242
- return [cloneReportNode(children[0], parent)];
243
- }
244
- }
245
- return [cloneReportNode(node, parent)];
246
- }
247
- export {
248
- generateConsoleTextCoverageReport
249
- };
250
- //# sourceMappingURL=console-text-report.js.map
196
+ if (typeof node?.isSummary === "function" && node.isSummary() && typeof node.isRoot === "function" && !node.isRoot() && typeof node.getChildren === "function") {
197
+ const children = node.getChildren();
198
+ if (Array.isArray(children) && children.length === 1 && typeof children[0]?.isSummary === "function" && !children[0].isSummary()) return [cloneReportNode(children[0], parent)];
199
+ }
200
+ return [cloneReportNode(node, parent)];
201
+ }
202
+ //#endregion
203
+ export { generateConsoleTextCoverageReport };
204
+
205
+ //# sourceMappingURL=console-text-report.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"console-text-report.js","sources":["../../src/coverage/console-text-report.ts"],"sourcesContent":["import path from \"node:path\"\n\n\nconst DEFAULT_CONSOLE_MAX_COLS = 80\nconst CONSOLE_SUMMARIZER = \"rbCwd\"\n\nexport function generateConsoleTextCoverageReport(\n reports: any,\n context: any,\n): { output: string; summarizer: string | undefined } {\n const debug = resolveConsoleReportDebugInfo()\n const summarizer = registerConsoleSummarizer(context)\n writeConsoleReportDebugLog({ ...debug, summarizer })\n\n const reportOutput = createConsoleTextReportOutput(reports, context, {\n maxCols: debug.maxCols + 20,\n summarizer,\n })\n\n return { output: stripUncoveredLineNumbersColumn(reportOutput), summarizer }\n}\n\nfunction resolveConsoleReportDebugInfo(): {\n isTTY: boolean\n stdoutColumns: number | undefined\n envColumns: string | undefined\n maxCols: number\n} {\n const isTTY = Boolean(process.stdout.isTTY)\n const stdoutColumns = process.stdout.columns\n const envColumns = process.env.COLUMNS\n const maxCols = resolveConsoleMaxCols(stdoutColumns, envColumns)\n\n return { isTTY, stdoutColumns, envColumns, maxCols }\n}\n\nfunction resolveConsoleMaxCols(stdoutColumns: number | undefined, envColumns: string | undefined): number {\n if (typeof stdoutColumns === \"number\" && Number.isFinite(stdoutColumns) && stdoutColumns > 0) {\n return stdoutColumns\n }\n\n const parsed = typeof envColumns === \"string\" ? Number.parseInt(envColumns, 10) : Number.NaN\n if (Number.isFinite(parsed) && parsed > 0) {\n return parsed\n }\n\n return DEFAULT_CONSOLE_MAX_COLS\n}\n\nfunction writeConsoleReportDebugLog({\n isTTY,\n stdoutColumns,\n envColumns,\n maxCols,\n summarizer,\n}: {\n isTTY: boolean\n stdoutColumns: number | undefined\n envColumns: string | undefined\n maxCols: number\n summarizer: string | undefined\n}): void {\n const message = [\n \"[coverage] debug\",\n `stdout.isTTY=${isTTY ? \"1\" : \"0\"}`,\n `stdout.columns=${stdoutColumns ?? \"undefined\"}`,\n `env.COLUMNS=${envColumns ?? \"undefined\"}`,\n `resolvedMaxCols=${maxCols}`,\n `summarizer=${summarizer ?? \"undefined\"}`,\n ].join(\" \")\n\n process.stderr.write(`${message}\\n`)\n}\n\nfunction createConsoleTextReportOutput(\n reports: any,\n context: any,\n options: { maxCols: number; summarizer?: string },\n): string {\n const fileWriter = context?.writer\n const fileWriterCtor = fileWriter?.constructor\n\n if (\n !fileWriterCtor\n || typeof fileWriterCtor.startCapture !== \"function\"\n || typeof fileWriterCtor.stopCapture !== \"function\"\n || typeof fileWriterCtor.getOutput !== \"function\"\n || typeof fileWriterCtor.resetOutput !== \"function\"\n ) {\n reports.create(\"text\", { maxCols: options.maxCols, summarizer: options.summarizer }).execute(context)\n return \"\"\n }\n\n fileWriterCtor.resetOutput()\n fileWriterCtor.startCapture()\n try {\n reports.create(\"text\", { maxCols: options.maxCols, summarizer: options.summarizer }).execute(context)\n } finally {\n fileWriterCtor.stopCapture()\n }\n const output = fileWriterCtor.getOutput()\n fileWriterCtor.resetOutput()\n return output\n}\n\nfunction stripUncoveredLineNumbersColumn(output: string): string {\n const lines = output.split(\"\\n\")\n const filtered = lines.map((line) => {\n const parts = line.split(\"|\")\n if (parts.length < 6) {\n return line.trimEnd()\n }\n return parts.slice(0, 5).join(\"|\").trimEnd()\n })\n return filtered.join(\"\\n\")\n}\n\nfunction registerConsoleSummarizer(context: any): string | undefined {\n const summarizerFactory = context?._summarizerFactory\n if (!summarizerFactory || typeof summarizerFactory !== \"object\") {\n return undefined\n }\n\n if (CONSOLE_SUMMARIZER in summarizerFactory) {\n return CONSOLE_SUMMARIZER\n }\n\n const pkgTree = context.getTree?.(\"pkg\")\n const pkgRoot = pkgTree?.getRoot?.()\n if (!pkgRoot) {\n return undefined\n }\n\n summarizerFactory[CONSOLE_SUMMARIZER] = createCollapsedCwdTree(pkgRoot, process.cwd())\n return CONSOLE_SUMMARIZER\n}\n\nfunction createCollapsedCwdTree(\n root: any,\n cwd: string,\n): { getRoot: () => any; visit: (visitor: any, state: any) => void } {\n const treeRoot = createCwdTreeFromCoverage(root, cwd)\n const clonedRoot = cloneReportNode(treeRoot, null)\n return {\n getRoot: () => clonedRoot,\n visit: (visitor: any, state: any) => {\n const fullVisitor = toFullVisitor(visitor)\n fullVisitor.onStart(clonedRoot, state)\n clonedRoot.visit(fullVisitor, state)\n fullVisitor.onEnd(clonedRoot, state)\n },\n }\n}\n\nfunction createCwdTreeFromCoverage(root: any, cwd: string): any {\n const proto = Object.getPrototypeOf(root)\n const pathCtor = root?.path?.constructor\n\n const fileCoverages: any[] = []\n collectFileCoverages(root, fileCoverages)\n\n const treeRoot = Object.create(proto)\n treeRoot.path = pathCtor ? new pathCtor([]) : root.path\n treeRoot.fileCoverage = null\n treeRoot.parent = null\n treeRoot.children = []\n\n const dirNodes = new Map<string, any>()\n dirNodes.set(\"\", treeRoot)\n\n for (const fileCoverage of fileCoverages) {\n const absolutePath = path.resolve(String(fileCoverage?.path ?? \"\"))\n if (!absolutePath) {\n continue\n }\n\n let relativePath = toPosix(path.relative(cwd, absolutePath))\n if (!relativePath) {\n relativePath = toPosix(absolutePath)\n }\n\n if (isInsideCwd(relativePath) && (relativePath === \"src\" || relativePath.startsWith(\"src/\"))) {\n relativePath = relativePath === \"src\" ? \"\" : relativePath.slice(\"src/\".length)\n }\n\n if (!relativePath) {\n relativePath = toPosix(path.basename(absolutePath))\n }\n\n const segments = relativePath.split(\"/\").filter(Boolean)\n if (segments.length === 0) {\n continue\n }\n\n let parent = treeRoot\n let prefix = \"\"\n\n for (let i = 0; i < segments.length - 1; i += 1) {\n prefix = prefix ? `${prefix}/${segments[i]}` : segments[i]\n const existing = dirNodes.get(prefix)\n if (existing) {\n parent = existing\n continue\n }\n\n const dirNode = Object.create(proto)\n dirNode.path = pathCtor ? new pathCtor(prefix.split(\"/\")) : root.path\n dirNode.fileCoverage = null\n dirNode.parent = parent\n dirNode.children = []\n parent.children.push(dirNode)\n dirNodes.set(prefix, dirNode)\n parent = dirNode\n }\n\n const fileNode = Object.create(proto)\n fileNode.path = pathCtor ? new pathCtor(segments) : root.path\n fileNode.fileCoverage = fileCoverage\n fileNode.parent = parent\n fileNode.children = []\n parent.children.push(fileNode)\n }\n\n sortReportTree(treeRoot)\n\n return treeRoot\n}\n\nfunction collectFileCoverages(node: any, out: any[]): void {\n if (!node || typeof node.isSummary !== \"function\") {\n return\n }\n\n if (!node.isSummary()) {\n const fileCoverage = typeof node.getFileCoverage === \"function\" ? node.getFileCoverage() : node.fileCoverage\n if (fileCoverage) {\n out.push(fileCoverage)\n }\n return\n }\n\n const children: any[] = typeof node.getChildren === \"function\" ? node.getChildren() : []\n for (const child of children) {\n collectFileCoverages(child, out)\n }\n}\n\nfunction sortReportTree(node: any): void {\n const children: any[] = Array.isArray(node?.children) ? node.children : []\n if (children.length === 0) {\n return\n }\n\n children.sort((a, b) => {\n const aKey = typeof a?.path?.toString === \"function\" ? a.path.toString() : \"\"\n const bKey = typeof b?.path?.toString === \"function\" ? b.path.toString() : \"\"\n return aKey < bKey ? -1 : aKey > bKey ? 1 : 0\n })\n\n for (const child of children) {\n sortReportTree(child)\n }\n}\n\nfunction isInsideCwd(relativePosix: string): boolean {\n if (!relativePosix) {\n return false\n }\n return !(relativePosix === \"..\" || relativePosix.startsWith(\"../\"))\n}\n\nfunction toPosix(input: string): string {\n return String(input ?? \"\").split(path.sep).join(\"/\")\n}\n\nfunction toFullVisitor(visitor: any): {\n onStart: (node: any, state: any) => void\n onEnd: (node: any, state: any) => void\n onSummary: (node: any, state: any) => void\n onSummaryEnd: (node: any, state: any) => void\n onDetail: (node: any, state: any) => void\n} {\n const call = (method: string) => (node: any, state: any) => {\n if (typeof visitor?.[method] === \"function\") {\n visitor[method](node, state)\n }\n }\n\n return {\n onStart: call(\"onStart\"),\n onEnd: call(\"onEnd\"),\n onSummary: call(\"onSummary\"),\n onSummaryEnd: call(\"onSummaryEnd\"),\n onDetail: call(\"onDetail\"),\n }\n}\n\nfunction cloneReportNode(node: any, parent: any): any {\n const clone = Object.create(Object.getPrototypeOf(node))\n clone.path = node.path\n clone.fileCoverage = node.fileCoverage\n clone.parent = parent\n\n const children: any[] = typeof node.getChildren === \"function\" ? node.getChildren() : []\n clone.children = children.flatMap((child) => cloneOrCollapseNode(child, clone))\n\n return clone\n}\n\nfunction cloneOrCollapseNode(node: any, parent: any): any[] {\n if (\n typeof node?.isSummary === \"function\"\n && node.isSummary()\n && typeof node.isRoot === \"function\"\n && !node.isRoot()\n && typeof node.getChildren === \"function\"\n ) {\n const children = node.getChildren()\n if (\n Array.isArray(children)\n && children.length === 1\n && typeof children[0]?.isSummary === \"function\"\n && !children[0].isSummary()\n ) {\n return [cloneReportNode(children[0], parent)]\n }\n }\n\n return [cloneReportNode(node, parent)]\n}\n"],"names":["DEFAULT_CONSOLE_MAX_COLS","CONSOLE_SUMMARIZER","generateConsoleTextCoverageReport","reports","context","debug","resolveConsoleReportDebugInfo","summarizer","registerConsoleSummarizer","writeConsoleReportDebugLog","reportOutput","createConsoleTextReportOutput","maxCols","output","stripUncoveredLineNumbersColumn","isTTY","Boolean","process","stdout","stdoutColumns","columns","envColumns","env","COLUMNS","resolveConsoleMaxCols","Number","isFinite","parsed","parseInt","NaN","message","join","stderr","write","options","fileWriter","writer","fileWriterCtor","constructor","startCapture","stopCapture","getOutput","resetOutput","create","execute","lines","split","filtered","map","line","parts","length","trimEnd","slice","summarizerFactory","_summarizerFactory","undefined","pkgTree","getTree","pkgRoot","getRoot","createCollapsedCwdTree","cwd","root","treeRoot","createCwdTreeFromCoverage","clonedRoot","cloneReportNode","visit","visitor","state","fullVisitor","toFullVisitor","onStart","onEnd","proto","Object","getPrototypeOf","pathCtor","path","fileCoverages","collectFileCoverages","fileCoverage","parent","children","dirNodes","Map","set","absolutePath","resolve","String","relativePath","toPosix","relative","isInsideCwd","startsWith","basename","segments","filter","prefix","i","existing","get","dirNode","push","fileNode","sortReportTree","node","out","isSummary","getFileCoverage","getChildren","child","Array","isArray","sort","a","b","aKey","toString","bKey","relativePosix","input","sep","call","method","onSummary","onSummaryEnd","onDetail","clone","flatMap","cloneOrCollapseNode","isRoot"],"mappings":"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"}
1
+ {"version":3,"file":"console-text-report.js","names":["path","DEFAULT_CONSOLE_MAX_COLS","CONSOLE_SUMMARIZER","generateConsoleTextCoverageReport","reports","context","output","summarizer","debug","resolveConsoleReportDebugInfo","registerConsoleSummarizer","writeConsoleReportDebugLog","reportOutput","createConsoleTextReportOutput","maxCols","stripUncoveredLineNumbersColumn","isTTY","stdoutColumns","envColumns","Boolean","process","stdout","columns","env","COLUMNS","resolveConsoleMaxCols","Number","isFinite","parsed","parseInt","NaN","message","join","stderr","write","options","fileWriter","writer","fileWriterCtor","constructor","startCapture","stopCapture","getOutput","resetOutput","create","execute","lines","split","filtered","map","line","parts","length","trimEnd","slice","summarizerFactory","_summarizerFactory","undefined","pkgTree","getTree","pkgRoot","getRoot","createCollapsedCwdTree","cwd","root","visit","visitor","state","treeRoot","createCwdTreeFromCoverage","clonedRoot","cloneReportNode","fullVisitor","toFullVisitor","onStart","onEnd","proto","Object","getPrototypeOf","pathCtor","fileCoverages","collectFileCoverages","fileCoverage","parent","children","dirNodes","Map","set","absolutePath","resolve","String","relativePath","toPosix","relative","isInsideCwd","startsWith","basename","segments","filter","prefix","i","existing","get","dirNode","push","fileNode","sortReportTree","node","out","isSummary","getFileCoverage","getChildren","child","Array","isArray","sort","a","b","aKey","toString","bKey","relativePosix","input","sep","onSummary","onSummaryEnd","onDetail","call","method","clone","flatMap","cloneOrCollapseNode","isRoot"],"sources":["../../src/coverage/console-text-report.ts"],"sourcesContent":["import path from \"node:path\"\n\n\nconst DEFAULT_CONSOLE_MAX_COLS = 80\nconst CONSOLE_SUMMARIZER = \"rbCwd\"\n\nexport function generateConsoleTextCoverageReport(\n reports: any,\n context: any,\n): { output: string; summarizer: string | undefined } {\n const debug = resolveConsoleReportDebugInfo()\n const summarizer = registerConsoleSummarizer(context)\n writeConsoleReportDebugLog({ ...debug, summarizer })\n\n const reportOutput = createConsoleTextReportOutput(reports, context, {\n maxCols: debug.maxCols + 20,\n summarizer,\n })\n\n return { output: stripUncoveredLineNumbersColumn(reportOutput), summarizer }\n}\n\nfunction resolveConsoleReportDebugInfo(): {\n isTTY: boolean\n stdoutColumns: number | undefined\n envColumns: string | undefined\n maxCols: number\n} {\n const isTTY = Boolean(process.stdout.isTTY)\n const stdoutColumns = process.stdout.columns\n const envColumns = process.env.COLUMNS\n const maxCols = resolveConsoleMaxCols(stdoutColumns, envColumns)\n\n return { isTTY, stdoutColumns, envColumns, maxCols }\n}\n\nfunction resolveConsoleMaxCols(stdoutColumns: number | undefined, envColumns: string | undefined): number {\n if (typeof stdoutColumns === \"number\" && Number.isFinite(stdoutColumns) && stdoutColumns > 0) {\n return stdoutColumns\n }\n\n const parsed = typeof envColumns === \"string\" ? Number.parseInt(envColumns, 10) : Number.NaN\n if (Number.isFinite(parsed) && parsed > 0) {\n return parsed\n }\n\n return DEFAULT_CONSOLE_MAX_COLS\n}\n\nfunction writeConsoleReportDebugLog({\n isTTY,\n stdoutColumns,\n envColumns,\n maxCols,\n summarizer,\n}: {\n isTTY: boolean\n stdoutColumns: number | undefined\n envColumns: string | undefined\n maxCols: number\n summarizer: string | undefined\n}): void {\n const message = [\n \"[coverage] debug\",\n `stdout.isTTY=${isTTY ? \"1\" : \"0\"}`,\n `stdout.columns=${stdoutColumns ?? \"undefined\"}`,\n `env.COLUMNS=${envColumns ?? \"undefined\"}`,\n `resolvedMaxCols=${maxCols}`,\n `summarizer=${summarizer ?? \"undefined\"}`,\n ].join(\" \")\n\n process.stderr.write(`${message}\\n`)\n}\n\nfunction createConsoleTextReportOutput(\n reports: any,\n context: any,\n options: { maxCols: number; summarizer?: string },\n): string {\n const fileWriter = context?.writer\n const fileWriterCtor = fileWriter?.constructor\n\n if (\n !fileWriterCtor\n || typeof fileWriterCtor.startCapture !== \"function\"\n || typeof fileWriterCtor.stopCapture !== \"function\"\n || typeof fileWriterCtor.getOutput !== \"function\"\n || typeof fileWriterCtor.resetOutput !== \"function\"\n ) {\n reports.create(\"text\", { maxCols: options.maxCols, summarizer: options.summarizer }).execute(context)\n return \"\"\n }\n\n fileWriterCtor.resetOutput()\n fileWriterCtor.startCapture()\n try {\n reports.create(\"text\", { maxCols: options.maxCols, summarizer: options.summarizer }).execute(context)\n } finally {\n fileWriterCtor.stopCapture()\n }\n const output = fileWriterCtor.getOutput()\n fileWriterCtor.resetOutput()\n return output\n}\n\nfunction stripUncoveredLineNumbersColumn(output: string): string {\n const lines = output.split(\"\\n\")\n const filtered = lines.map((line) => {\n const parts = line.split(\"|\")\n if (parts.length < 6) {\n return line.trimEnd()\n }\n return parts.slice(0, 5).join(\"|\").trimEnd()\n })\n return filtered.join(\"\\n\")\n}\n\nfunction registerConsoleSummarizer(context: any): string | undefined {\n const summarizerFactory = context?._summarizerFactory\n if (!summarizerFactory || typeof summarizerFactory !== \"object\") {\n return undefined\n }\n\n if (CONSOLE_SUMMARIZER in summarizerFactory) {\n return CONSOLE_SUMMARIZER\n }\n\n const pkgTree = context.getTree?.(\"pkg\")\n const pkgRoot = pkgTree?.getRoot?.()\n if (!pkgRoot) {\n return undefined\n }\n\n summarizerFactory[CONSOLE_SUMMARIZER] = createCollapsedCwdTree(pkgRoot, process.cwd())\n return CONSOLE_SUMMARIZER\n}\n\nfunction createCollapsedCwdTree(\n root: any,\n cwd: string,\n): { getRoot: () => any; visit: (visitor: any, state: any) => void } {\n const treeRoot = createCwdTreeFromCoverage(root, cwd)\n const clonedRoot = cloneReportNode(treeRoot, null)\n return {\n getRoot: () => clonedRoot,\n visit: (visitor: any, state: any) => {\n const fullVisitor = toFullVisitor(visitor)\n fullVisitor.onStart(clonedRoot, state)\n clonedRoot.visit(fullVisitor, state)\n fullVisitor.onEnd(clonedRoot, state)\n },\n }\n}\n\nfunction createCwdTreeFromCoverage(root: any, cwd: string): any {\n const proto = Object.getPrototypeOf(root)\n const pathCtor = root?.path?.constructor\n\n const fileCoverages: any[] = []\n collectFileCoverages(root, fileCoverages)\n\n const treeRoot = Object.create(proto)\n treeRoot.path = pathCtor ? new pathCtor([]) : root.path\n treeRoot.fileCoverage = null\n treeRoot.parent = null\n treeRoot.children = []\n\n const dirNodes = new Map<string, any>()\n dirNodes.set(\"\", treeRoot)\n\n for (const fileCoverage of fileCoverages) {\n const absolutePath = path.resolve(String(fileCoverage?.path ?? \"\"))\n if (!absolutePath) {\n continue\n }\n\n let relativePath = toPosix(path.relative(cwd, absolutePath))\n if (!relativePath) {\n relativePath = toPosix(absolutePath)\n }\n\n if (isInsideCwd(relativePath) && (relativePath === \"src\" || relativePath.startsWith(\"src/\"))) {\n relativePath = relativePath === \"src\" ? \"\" : relativePath.slice(\"src/\".length)\n }\n\n if (!relativePath) {\n relativePath = toPosix(path.basename(absolutePath))\n }\n\n const segments = relativePath.split(\"/\").filter(Boolean)\n if (segments.length === 0) {\n continue\n }\n\n let parent = treeRoot\n let prefix = \"\"\n\n for (let i = 0; i < segments.length - 1; i += 1) {\n prefix = prefix ? `${prefix}/${segments[i]}` : segments[i]\n const existing = dirNodes.get(prefix)\n if (existing) {\n parent = existing\n continue\n }\n\n const dirNode = Object.create(proto)\n dirNode.path = pathCtor ? new pathCtor(prefix.split(\"/\")) : root.path\n dirNode.fileCoverage = null\n dirNode.parent = parent\n dirNode.children = []\n parent.children.push(dirNode)\n dirNodes.set(prefix, dirNode)\n parent = dirNode\n }\n\n const fileNode = Object.create(proto)\n fileNode.path = pathCtor ? new pathCtor(segments) : root.path\n fileNode.fileCoverage = fileCoverage\n fileNode.parent = parent\n fileNode.children = []\n parent.children.push(fileNode)\n }\n\n sortReportTree(treeRoot)\n\n return treeRoot\n}\n\nfunction collectFileCoverages(node: any, out: any[]): void {\n if (!node || typeof node.isSummary !== \"function\") {\n return\n }\n\n if (!node.isSummary()) {\n const fileCoverage = typeof node.getFileCoverage === \"function\" ? node.getFileCoverage() : node.fileCoverage\n if (fileCoverage) {\n out.push(fileCoverage)\n }\n return\n }\n\n const children: any[] = typeof node.getChildren === \"function\" ? node.getChildren() : []\n for (const child of children) {\n collectFileCoverages(child, out)\n }\n}\n\nfunction sortReportTree(node: any): void {\n const children: any[] = Array.isArray(node?.children) ? node.children : []\n if (children.length === 0) {\n return\n }\n\n children.sort((a, b) => {\n const aKey = typeof a?.path?.toString === \"function\" ? a.path.toString() : \"\"\n const bKey = typeof b?.path?.toString === \"function\" ? b.path.toString() : \"\"\n return aKey < bKey ? -1 : aKey > bKey ? 1 : 0\n })\n\n for (const child of children) {\n sortReportTree(child)\n }\n}\n\nfunction isInsideCwd(relativePosix: string): boolean {\n if (!relativePosix) {\n return false\n }\n return !(relativePosix === \"..\" || relativePosix.startsWith(\"../\"))\n}\n\nfunction toPosix(input: string): string {\n return String(input ?? \"\").split(path.sep).join(\"/\")\n}\n\nfunction toFullVisitor(visitor: any): {\n onStart: (node: any, state: any) => void\n onEnd: (node: any, state: any) => void\n onSummary: (node: any, state: any) => void\n onSummaryEnd: (node: any, state: any) => void\n onDetail: (node: any, state: any) => void\n} {\n const call = (method: string) => (node: any, state: any) => {\n if (typeof visitor?.[method] === \"function\") {\n visitor[method](node, state)\n }\n }\n\n return {\n onStart: call(\"onStart\"),\n onEnd: call(\"onEnd\"),\n onSummary: call(\"onSummary\"),\n onSummaryEnd: call(\"onSummaryEnd\"),\n onDetail: call(\"onDetail\"),\n }\n}\n\nfunction cloneReportNode(node: any, parent: any): any {\n const clone = Object.create(Object.getPrototypeOf(node))\n clone.path = node.path\n clone.fileCoverage = node.fileCoverage\n clone.parent = parent\n\n const children: any[] = typeof node.getChildren === \"function\" ? node.getChildren() : []\n clone.children = children.flatMap((child) => cloneOrCollapseNode(child, clone))\n\n return clone\n}\n\nfunction cloneOrCollapseNode(node: any, parent: any): any[] {\n if (\n typeof node?.isSummary === \"function\"\n && node.isSummary()\n && typeof node.isRoot === \"function\"\n && !node.isRoot()\n && typeof node.getChildren === \"function\"\n ) {\n const children = node.getChildren()\n if (\n Array.isArray(children)\n && children.length === 1\n && typeof children[0]?.isSummary === \"function\"\n && !children[0].isSummary()\n ) {\n return [cloneReportNode(children[0], parent)]\n }\n }\n\n return [cloneReportNode(node, parent)]\n}\n"],"mappings":"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"}
@@ -1,65 +1,52 @@
1
- import fs from "node:fs/promises";
1
+ import fsPromises from "node:fs/promises";
2
2
  import path from "node:path";
3
+ //#region src/coverage/files.ts
3
4
  function resolveCoverageRoots(config) {
4
- const buildDir = path.join(config.rootDir, "build");
5
- const roots = [path.join(buildDir, "playwright", "coverage"), path.join(buildDir, "vitest", "coverage"), path.join(config.testResultsRoot, "playwright"), path.join(config.testResultsRoot, "vitest")];
6
- return Array.from(new Set(roots.map((root) => path.resolve(root))));
5
+ const buildDir = path.join(config.rootDir, "build");
6
+ const roots = [
7
+ path.join(buildDir, "playwright", "coverage"),
8
+ path.join(buildDir, "vitest", "coverage"),
9
+ path.join(config.testResultsRoot, "playwright"),
10
+ path.join(config.testResultsRoot, "vitest")
11
+ ];
12
+ return Array.from(new Set(roots.map((root) => path.resolve(root))));
7
13
  }
8
14
  async function findCoverageFiles(config, root) {
9
- const roots = root === void 0 ? resolveCoverageRoots(config) : Array.isArray(root) ? root : [root];
10
- const files = [];
11
- async function walk(current) {
12
- const entries = await fs.readdir(current, {
13
- withFileTypes: true
14
- });
15
- await Promise.all(entries.map(async (entry) => {
16
- const entryPath = path.join(current, entry.name);
17
- if (entry.isDirectory()) {
18
- await walk(entryPath);
19
- } else if (entry.isFile() && entry.name === config.coverageFileName) {
20
- files.push(entryPath);
21
- }
22
- }));
23
- }
24
- for (const root2 of roots) {
25
- try {
26
- const stats = await fs.stat(root2);
27
- if (!stats.isDirectory()) {
28
- continue;
29
- }
30
- } catch {
31
- continue;
32
- }
33
- await walk(root2);
34
- }
35
- return files.sort();
15
+ const roots = root === void 0 ? resolveCoverageRoots(config) : Array.isArray(root) ? root : [root];
16
+ const files = [];
17
+ async function walk(current) {
18
+ const entries = await fsPromises.readdir(current, { withFileTypes: true });
19
+ await Promise.all(entries.map(async (entry) => {
20
+ const entryPath = path.join(current, entry.name);
21
+ if (entry.isDirectory()) await walk(entryPath);
22
+ else if (entry.isFile() && entry.name === config.coverageFileName) files.push(entryPath);
23
+ }));
24
+ }
25
+ for (const root of roots) {
26
+ try {
27
+ if (!(await fsPromises.stat(root)).isDirectory()) continue;
28
+ } catch {
29
+ continue;
30
+ }
31
+ await walk(root);
32
+ }
33
+ return files.sort();
36
34
  }
37
35
  async function removeCoverageFiles(config, root) {
38
- const roots = root === void 0 ? resolveCoverageRoots(config) : Array.isArray(root) ? root : [root];
39
- async function walk(current) {
40
- const entries = await fs.readdir(current, {
41
- withFileTypes: true
42
- });
43
- await Promise.all(entries.map(async (entry) => {
44
- const entryPath = path.join(current, entry.name);
45
- if (entry.isDirectory()) {
46
- await walk(entryPath);
47
- } else if (entry.isFile() && entry.name === config.coverageFileName) {
48
- await fs.rm(entryPath, {
49
- force: true
50
- });
51
- }
52
- }));
53
- }
54
- for (const root2 of roots) {
55
- try {
56
- await walk(root2);
57
- } catch {
58
- }
59
- }
36
+ const roots = root === void 0 ? resolveCoverageRoots(config) : Array.isArray(root) ? root : [root];
37
+ async function walk(current) {
38
+ const entries = await fsPromises.readdir(current, { withFileTypes: true });
39
+ await Promise.all(entries.map(async (entry) => {
40
+ const entryPath = path.join(current, entry.name);
41
+ if (entry.isDirectory()) await walk(entryPath);
42
+ else if (entry.isFile() && entry.name === config.coverageFileName) await fsPromises.rm(entryPath, { force: true });
43
+ }));
44
+ }
45
+ for (const root of roots) try {
46
+ await walk(root);
47
+ } catch {}
60
48
  }
61
- export {
62
- findCoverageFiles,
63
- removeCoverageFiles
64
- };
65
- //# sourceMappingURL=files.js.map
49
+ //#endregion
50
+ export { findCoverageFiles, removeCoverageFiles };
51
+
52
+ //# sourceMappingURL=files.js.map