@rpcbase/test 0.357.0 → 0.358.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 (41) hide show
  1. package/dist/clearDatabase.js +12 -10
  2. package/dist/clearDatabase.js.map +1 -1
  3. package/dist/cli.js +556 -439
  4. package/dist/cli.js.map +1 -1
  5. package/dist/coverage/collect.js +101 -63
  6. package/dist/coverage/collect.js.map +1 -1
  7. package/dist/coverage/config-loader.js +230 -180
  8. package/dist/coverage/config-loader.js.map +1 -1
  9. package/dist/coverage/config.js +100 -76
  10. package/dist/coverage/config.js.map +1 -1
  11. package/dist/coverage/console-text-report.js +220 -175
  12. package/dist/coverage/console-text-report.js.map +1 -1
  13. package/dist/coverage/files.js +58 -45
  14. package/dist/coverage/files.js.map +1 -1
  15. package/dist/coverage/fixtures.js +38 -27
  16. package/dist/coverage/fixtures.js.map +1 -1
  17. package/dist/coverage/global-setup.js +18 -15
  18. package/dist/coverage/global-setup.js.map +1 -1
  19. package/dist/coverage/index.js +55 -38
  20. package/dist/coverage/index.js.map +1 -1
  21. package/dist/coverage/report.js +466 -341
  22. package/dist/coverage/report.js.map +1 -1
  23. package/dist/coverage/reporter.js +60 -47
  24. package/dist/coverage/reporter.js.map +1 -1
  25. package/dist/coverage/v8-tracker.js +147 -115
  26. package/dist/coverage/v8-tracker.js.map +1 -1
  27. package/dist/index.js +75 -46
  28. package/dist/index.js.map +1 -1
  29. package/dist/runners/playwright.js +563 -438
  30. package/dist/runners/playwright.js.map +1 -1
  31. package/dist/runners/process.d.ts.map +1 -1
  32. package/dist/runners/process.js +183 -125
  33. package/dist/runners/process.js.map +1 -1
  34. package/dist/runners/vitest.js +171 -124
  35. package/dist/runners/vitest.js.map +1 -1
  36. package/dist/serverCoverage.js +42 -28
  37. package/dist/serverCoverage.js.map +1 -1
  38. package/dist/vitest.config.d.ts +1 -1
  39. package/dist/vitest.config.js +74 -62
  40. package/dist/vitest.config.js.map +1 -1
  41. package/package.json +6 -6
@@ -1,205 +1,250 @@
1
1
  import path from "node:path";
2
- //#region src/coverage/console-text-report.ts
3
- var DEFAULT_CONSOLE_MAX_COLS = 80;
4
- var CONSOLE_SUMMARIZER = "rbCwd";
2
+ const DEFAULT_CONSOLE_MAX_COLS = 80;
3
+ const CONSOLE_SUMMARIZER = "rbCwd";
5
4
  function generateConsoleTextCoverageReport(reports, context) {
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
- };
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
+ };
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
- return {
25
- isTTY,
26
- stdoutColumns,
27
- envColumns,
28
- maxCols: resolveConsoleMaxCols(stdoutColumns, envColumns)
29
- };
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
+ };
30
31
  }
31
32
  function resolveConsoleMaxCols(stdoutColumns, envColumns) {
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`);
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
+ `);
47
52
  }
48
53
  function createConsoleTextReportOutput(reports, context, options) {
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;
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;
70
76
  }
71
77
  function stripUncoveredLineNumbersColumn(output) {
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");
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");
77
87
  }
78
88
  function registerConsoleSummarizer(context) {
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;
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;
86
103
  }
87
104
  function createCollapsedCwdTree(root, cwd) {
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
- };
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
+ };
98
116
  }
99
117
  function createCwdTreeFromCoverage(root, cwd) {
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;
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;
147
175
  }
148
176
  function collectFileCoverages(node, out) {
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);
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
+ }
157
191
  }
158
192
  function sortReportTree(node) {
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);
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
+ }
167
205
  }
168
206
  function isInsideCwd(relativePosix) {
169
- if (!relativePosix) return false;
170
- return !(relativePosix === ".." || relativePosix.startsWith("../"));
207
+ if (!relativePosix) {
208
+ return false;
209
+ }
210
+ return !(relativePosix === ".." || relativePosix.startsWith("../"));
171
211
  }
172
212
  function toPosix(input) {
173
- return String(input ?? "").split(path.sep).join("/");
213
+ return String(input ?? "").split(path.sep).join("/");
174
214
  }
175
215
  function toFullVisitor(visitor) {
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
- };
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
+ };
186
228
  }
187
229
  function cloneReportNode(node, parent) {
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;
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;
194
237
  }
195
238
  function cloneOrCollapseNode(node, parent) {
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
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
@@ -1 +1 @@
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
+ {"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,52 +1,65 @@
1
- import fsPromises from "node:fs/promises";
1
+ import fs from "node:fs/promises";
2
2
  import path from "node:path";
3
- //#region src/coverage/files.ts
4
3
  function resolveCoverageRoots(config) {
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))));
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))));
13
7
  }
14
8
  async function findCoverageFiles(config, root) {
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();
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();
34
36
  }
35
37
  async function removeCoverageFiles(config, root) {
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 {}
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
+ }
48
60
  }
49
- //#endregion
50
- export { findCoverageFiles, removeCoverageFiles };
51
-
52
- //# sourceMappingURL=files.js.map
61
+ export {
62
+ findCoverageFiles,
63
+ removeCoverageFiles
64
+ };
65
+ //# sourceMappingURL=files.js.map