1
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"use strict";
2
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
var __create = Object.create;
3
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
var __defProp = Object.defineProperty;
4
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
var __getOwnPropNames = Object.getOwnPropertyNames;
6
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
var __getProtoOf = Object.getPrototypeOf;
7
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
var __hasOwnProp = Object.prototype.hasOwnProperty;
8
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
var __export = (target, all) => {
9
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
for (var name in all)
10
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
__defProp(target, name, { get: all[name], enumerable: true });
11
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
};
12
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
var __copyProps = (to, from, except, desc) => {
13
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (from && typeof from === "object" || typeof from === "function") {
14
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
for (let key of __getOwnPropNames(from))
15
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (!__hasOwnProp.call(to, key) && key !== except)
16
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
18
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return to;
19
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
};
20
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
// If the importer is in node compatibility mode or this is not an ESM
22
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
// file that has been converted to a CommonJS file using a Babel-
23
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
// compatible transform (i.e. "__esModule" has not been set), then set
24
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
// "default" to the CommonJS "module.exports" for node compatibility.
25
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
mod
27
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
));
28
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
var html_exports = {};
30
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
__export(html_exports, {
31
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
default: () => html_default,
32
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
showHTMLReport: () => showHTMLReport,
33
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
startHtmlReportServer: () => startHtmlReportServer
34
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
});
35
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
module.exports = __toCommonJS(html_exports);
36
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
var import_fs = __toESM(require("fs"));
37
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
var import_path = __toESM(require("path"));
38
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
var import_stream = require("stream");
39
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
var import_utils = require("playwright-core/lib/utils");
40
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
var import_utils2 = require("playwright-core/lib/utils");
41
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
var import_utilsBundle = require("playwright-core/lib/utilsBundle");
42
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
var import_utilsBundle2 = require("playwright-core/lib/utilsBundle");
43
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
var import_zipBundle = require("playwright-core/lib/zipBundle");
44
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
var import_base = require("./base");
45
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
var import_babelBundle = require("../transform/babelBundle");
46
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
var import_util = require("../util");
47
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const htmlReportOptions = ["always", "never", "on-failure"];
48
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const isHtmlReportOption = (type) => {
49
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return htmlReportOptions.includes(type);
50
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
};
51
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
class HtmlReporter {
52
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
constructor(options) {
53
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
this._topLevelErrors = [];
54
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
this._machines = [];
55
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
this._options = options;
56
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
57
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
version() {
58
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return "v2";
59
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
60
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
printsToStdio() {
61
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return false;
62
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
63
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
onConfigure(config) {
64
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
this.config = config;
65
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
66
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
onBegin(suite) {
67
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const { outputFolder, open: open2, attachmentsBaseURL, host, port } = this._resolveOptions();
68
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
this._outputFolder = outputFolder;
69
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
this._open = open2;
70
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
this._host = host;
71
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
this._port = port;
72
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
this._attachmentsBaseURL = attachmentsBaseURL;
73
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const reportedWarnings = /* @__PURE__ */ new Set();
74
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
for (const project of this.config.projects) {
75
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (this._isSubdirectory(outputFolder, project.outputDir) || this._isSubdirectory(project.outputDir, outputFolder)) {
76
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const key = outputFolder + "|" + project.outputDir;
77
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (reportedWarnings.has(key))
78
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
continue;
79
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
reportedWarnings.add(key);
80
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
writeLine(import_utils2.colors.red(`Configuration Error: HTML reporter output folder clashes with the tests output folder:`));
81
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
writeLine(`
82
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
html reporter folder: ${import_utils2.colors.bold(outputFolder)}
83
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
test results folder: ${import_utils2.colors.bold(project.outputDir)}`);
84
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
writeLine("");
85
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
writeLine(`HTML reporter will clear its output directory prior to being generated, which will lead to the artifact loss.
86
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
`);
87
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
88
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
89
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
this.suite = suite;
90
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
91
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
_resolveOptions() {
92
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const outputFolder = reportFolderFromEnv() ?? (0, import_util.resolveReporterOutputPath)("playwright-report", this._options.configDir, this._options.outputFolder);
93
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return {
94
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
outputFolder,
95
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
open: getHtmlReportOptionProcessEnv() || this._options.open || "on-failure",
96
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
attachmentsBaseURL: process.env.PLAYWRIGHT_HTML_ATTACHMENTS_BASE_URL || this._options.attachmentsBaseURL || "data/",
97
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
host: process.env.PLAYWRIGHT_HTML_HOST || this._options.host,
98
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
port: process.env.PLAYWRIGHT_HTML_PORT ? +process.env.PLAYWRIGHT_HTML_PORT : this._options.port
99
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
};
100
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
101
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
_isSubdirectory(parentDir, dir) {
102
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const relativePath = import_path.default.relative(parentDir, dir);
103
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return !!relativePath && !relativePath.startsWith("..") && !import_path.default.isAbsolute(relativePath);
104
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
105
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
onError(error) {
106
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
this._topLevelErrors.push(error);
107
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
108
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
onMachineEnd(result) {
109
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
this._machines.push(result);
110
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
111
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
async onEnd(result) {
112
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const projectSuites = this.suite.suites;
113
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
await (0, import_utils.removeFolders)([this._outputFolder]);
114
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
let noSnippets;
115
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (process.env.PLAYWRIGHT_HTML_NO_SNIPPETS === "false" || process.env.PLAYWRIGHT_HTML_NO_SNIPPETS === "0")
116
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
noSnippets = false;
117
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
else if (process.env.PLAYWRIGHT_HTML_NO_SNIPPETS)
118
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
noSnippets = true;
119
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
noSnippets = noSnippets || this._options.noSnippets;
120
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
let noCopyPrompt;
121
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (process.env.PLAYWRIGHT_HTML_NO_COPY_PROMPT === "false" || process.env.PLAYWRIGHT_HTML_NO_COPY_PROMPT === "0")
122
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
noCopyPrompt = false;
123
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
else if (process.env.PLAYWRIGHT_HTML_NO_COPY_PROMPT)
124
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
noCopyPrompt = true;
125
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
noCopyPrompt = noCopyPrompt || this._options.noCopyPrompt;
126
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const builder = new HtmlBuilder(this.config, this._outputFolder, this._attachmentsBaseURL, {
127
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
title: process.env.PLAYWRIGHT_HTML_TITLE || this._options.title,
128
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
noSnippets,
129
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
noCopyPrompt
130
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
});
131
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
this._buildResult = await builder.build(this.config.metadata, projectSuites, result, this._topLevelErrors, this._machines);
132
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
133
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
async onExit() {
134
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (process.env.CI || !this._buildResult)
135
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return;
136
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const { ok, singleTestId } = this._buildResult;
137
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const shouldOpen = !!process.stdin.isTTY && (this._open === "always" || !ok && this._open === "on-failure");
138
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (shouldOpen) {
139
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
await showHTMLReport(this._outputFolder, this._host, this._port, singleTestId);
140
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
} else if (this._options._mode === "test" && !!process.stdin.isTTY) {
141
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const packageManagerCommand = (0, import_utils.getPackageManagerExecCommand)();
142
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const relativeReportPath = this._outputFolder === standaloneDefaultFolder() ? "" : " " + import_path.default.relative(process.cwd(), this._outputFolder);
143
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const hostArg = this._host ? ` --host ${this._host}` : "";
144
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const portArg = this._port ? ` --port ${this._port}` : "";
145
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
writeLine("");
146
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
writeLine("To open last HTML report run:");
147
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
writeLine(import_utils2.colors.cyan(`
148
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
${packageManagerCommand} playwright show-report${relativeReportPath}${hostArg}${portArg}
149
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
`));
150
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
151
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
152
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
153
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
function reportFolderFromEnv() {
154
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const envValue = process.env.PLAYWRIGHT_HTML_OUTPUT_DIR || process.env.PLAYWRIGHT_HTML_REPORT;
155
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return envValue ? import_path.default.resolve(envValue) : void 0;
156
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
157
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
function getHtmlReportOptionProcessEnv() {
158
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const htmlOpenEnv = process.env.PLAYWRIGHT_HTML_OPEN || process.env.PW_TEST_HTML_REPORT_OPEN;
159
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (!htmlOpenEnv)
160
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return void 0;
161
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (!isHtmlReportOption(htmlOpenEnv)) {
162
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
writeLine(import_utils2.colors.red(`Configuration Error: HTML reporter Invalid value for PLAYWRIGHT_HTML_OPEN: ${htmlOpenEnv}. Valid values are: ${htmlReportOptions.join(", ")}`));
163
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return void 0;
164
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
165
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return htmlOpenEnv;
166
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
167
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
function standaloneDefaultFolder() {
168
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return reportFolderFromEnv() ?? (0, import_util.resolveReporterOutputPath)("playwright-report", process.cwd(), void 0);
169
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
170
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
async function showHTMLReport(reportFolder, host = "localhost", port, testId) {
171
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const folder = reportFolder ?? standaloneDefaultFolder();
172
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
try {
173
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
(0, import_utils.assert)(import_fs.default.statSync(folder).isDirectory());
174
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
} catch (e) {
175
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
writeLine(import_utils2.colors.red(`No report found at "${folder}"`));
176
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
(0, import_utils.gracefullyProcessExitDoNotHang)(1);
177
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return;
178
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
179
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const server = startHtmlReportServer(folder);
180
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
await server.start({ port, host, preferredPort: port ? void 0 : 9323 });
181
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
let url = server.urlPrefix("human-readable");
182
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
writeLine("");
183
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
writeLine(import_utils2.colors.cyan(` Serving HTML report at ${url}. Press Ctrl+C to quit.`));
184
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (testId)
185
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
url += `#?testId=${testId}`;
186
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
url = url.replace("0.0.0.0", "localhost");
187
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
await (0, import_utilsBundle.open)(url, { wait: true }).catch(() => {
188
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
});
189
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
await new Promise(() => {
190
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
});
191
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
192
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
function startHtmlReportServer(folder) {
193
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const server = new import_utils.HttpServer();
194
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
server.routePrefix("/", (request, response) => {
195
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
let relativePath = new URL("http://localhost" + request.url).pathname;
196
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (relativePath.startsWith("/trace/file")) {
197
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const url = new URL("http://localhost" + request.url);
198
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
try {
199
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return server.serveFile(request, response, url.searchParams.get("path"));
200
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
} catch (e) {
201
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return false;
202
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
203
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
204
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (relativePath === "/")
205
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
relativePath = "/index.html";
206
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const absolutePath = import_path.default.join(folder, ...relativePath.split("/"));
207
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return server.serveFile(request, response, absolutePath);
208
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
});
209
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return server;
210
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
211
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
class HtmlBuilder {
212
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
constructor(config, outputDir, attachmentsBaseURL, options) {
213
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
this._stepsInFile = new import_utils.MultiMap();
214
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
this._hasTraces = false;
215
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
this._config = config;
216
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
this._reportFolder = outputDir;
217
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
this._options = options;
218
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
import_fs.default.mkdirSync(this._reportFolder, { recursive: true });
219
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
this._dataZipFile = new import_zipBundle.yazl.ZipFile();
220
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
this._attachmentsBaseURL = attachmentsBaseURL;
221
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
222
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
async build(metadata, projectSuites, result, topLevelErrors, machines) {
223
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const data = /* @__PURE__ */ new Map();
224
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
for (const projectSuite of projectSuites) {
225
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const projectName = projectSuite.project().name;
226
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
for (const fileSuite of projectSuite.suites) {
227
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const fileName = this._relativeLocation(fileSuite.location).file;
228
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
this._createEntryForSuite(data, projectName, fileSuite, fileName, true);
229
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
230
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
231
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (!this._options.noSnippets)
232
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
createSnippets(this._stepsInFile);
233
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
let ok = true;
234
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
for (const [fileId, { testFile, testFileSummary }] of data) {
235
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const stats = testFileSummary.stats;
236
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
for (const test of testFileSummary.tests) {
237
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (test.outcome === "expected")
238
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
++stats.expected;
239
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (test.outcome === "skipped")
240
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
++stats.skipped;
241
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (test.outcome === "unexpected")
242
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
++stats.unexpected;
243
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (test.outcome === "flaky")
244
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
++stats.flaky;
245
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
++stats.total;
246
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
247
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
stats.ok = stats.unexpected + stats.flaky === 0;
248
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (!stats.ok)
249
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
ok = false;
250
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const testCaseSummaryComparator = (t1, t2) => {
251
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const w1 = (t1.outcome === "unexpected" ? 1e3 : 0) + (t1.outcome === "flaky" ? 1 : 0);
252
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const w2 = (t2.outcome === "unexpected" ? 1e3 : 0) + (t2.outcome === "flaky" ? 1 : 0);
253
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return w2 - w1;
254
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
};
255
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
testFileSummary.tests.sort(testCaseSummaryComparator);
256
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
this._addDataFile(fileId + ".json", testFile);
257
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
258
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const htmlReport = {
259
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
metadata,
260
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
startTime: result.startTime.getTime(),
261
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
duration: result.duration,
262
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
files: [...data.values()].map((e) => e.testFileSummary),
263
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
projectNames: projectSuites.map((r) => r.project().name),
264
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
stats: { ...[...data.values()].reduce((a, e) => addStats(a, e.testFileSummary.stats), emptyStats()) },
265
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
errors: topLevelErrors.map((error) => (0, import_base.formatError)(import_base.internalScreen, error).message),
266
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
options: this._options,
267
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
machines: machines.map((s) => ({
268
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
duration: s.duration,
269
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
startTime: s.startTime.getTime(),
270
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
tag: s.tag,
271
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
shardIndex: s.shardIndex
272
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}))
273
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
};
274
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
htmlReport.files.sort((f1, f2) => {
275
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const w1 = f1.stats.unexpected * 1e3 + f1.stats.flaky;
276
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const w2 = f2.stats.unexpected * 1e3 + f2.stats.flaky;
277
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return w2 - w1;
278
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
});
279
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
this._addDataFile("report.json", htmlReport);
280
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
let singleTestId;
281
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (htmlReport.stats.total === 1) {
282
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const testFile = data.values().next().value.testFile;
283
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
singleTestId = testFile.tests[0].testId;
284
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
285
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const appFolder = import_path.default.join(require.resolve("playwright-core"), "..", "lib", "vite", "htmlReport");
286
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
await (0, import_utils.copyFileAndMakeWritable)(import_path.default.join(appFolder, "index.html"), import_path.default.join(this._reportFolder, "index.html"));
287
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (this._hasTraces) {
288
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const traceViewerFolder = import_path.default.join(require.resolve("playwright-core"), "..", "lib", "vite", "traceViewer");
289
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const traceViewerTargetFolder = import_path.default.join(this._reportFolder, "trace");
290
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const traceViewerAssetsTargetFolder = import_path.default.join(traceViewerTargetFolder, "assets");
291
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
import_fs.default.mkdirSync(traceViewerAssetsTargetFolder, { recursive: true });
292
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
for (const file of import_fs.default.readdirSync(traceViewerFolder)) {
293
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (file.endsWith(".map") || file.includes("watch") || file.includes("assets"))
294
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
continue;
295
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
await (0, import_utils.copyFileAndMakeWritable)(import_path.default.join(traceViewerFolder, file), import_path.default.join(traceViewerTargetFolder, file));
296
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
297
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
for (const file of import_fs.default.readdirSync(import_path.default.join(traceViewerFolder, "assets"))) {
298
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (file.endsWith(".map") || file.includes("xtermModule"))
299
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
continue;
300
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
await (0, import_utils.copyFileAndMakeWritable)(import_path.default.join(traceViewerFolder, "assets", file), import_path.default.join(traceViewerAssetsTargetFolder, file));
301
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
302
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
303
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
await this._writeReportData(import_path.default.join(this._reportFolder, "index.html"));
304
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return { ok, singleTestId };
305
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
306
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
async _writeReportData(filePath) {
307
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
import_fs.default.appendFileSync(filePath, '<script id="playwrightReportBase64" type="application/zip">data:application/zip;base64,');
308
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
await new Promise((f) => {
309
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
this._dataZipFile.end(void 0, () => {
310
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
this._dataZipFile.outputStream.pipe(new Base64Encoder()).pipe(import_fs.default.createWriteStream(filePath, { flags: "a" })).on("close", f);
311
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
});
312
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
});
313
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
import_fs.default.appendFileSync(filePath, "</script>");
314
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
315
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
_addDataFile(fileName, data) {
316
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
this._dataZipFile.addBuffer(Buffer.from(JSON.stringify(data)), fileName);
317
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
318
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
_createEntryForSuite(data, projectName, suite, fileName, deep) {
319
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const fileId = (0, import_utils.calculateSha1)(fileName).slice(0, 20);
320
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
let fileEntry = data.get(fileId);
321
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (!fileEntry) {
322
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
fileEntry = {
323
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
testFile: { fileId, fileName, tests: [] },
324
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
testFileSummary: { fileId, fileName, tests: [], stats: emptyStats() }
325
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
};
326
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
data.set(fileId, fileEntry);
327
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
328
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const { testFile, testFileSummary } = fileEntry;
329
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const testEntries = [];
330
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
this._processSuite(suite, projectName, [], deep, testEntries);
331
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
for (const test of testEntries) {
332
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
testFile.tests.push(test.testCase);
333
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
testFileSummary.tests.push(test.testCaseSummary);
334
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
335
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
336
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
_processSuite(suite, projectName, path2, deep, outTests) {
337
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const newPath = [...path2, suite.title];
338
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
suite.entries().forEach((e) => {
339
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (e.type === "test")
340
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
outTests.push(this._createTestEntry(e, projectName, newPath));
341
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
else if (deep)
342
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
this._processSuite(e, projectName, newPath, deep, outTests);
343
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
});
344
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
345
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
_createTestEntry(test, projectName, path2) {
346
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const duration = test.results.reduce((a, r) => a + r.duration, 0);
347
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const location = this._relativeLocation(test.location);
348
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
path2 = path2.slice(1).filter((path3) => path3.length > 0);
349
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const results = test.results.map((r) => this._createTestResult(test, r));
350
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return {
351
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
testCase: {
352
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
testId: test.id,
353
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
title: test.title,
354
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
projectName,
355
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
location,
356
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
duration,
357
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
annotations: this._serializeAnnotations(test.annotations),
358
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
tags: test.tags,
359
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
outcome: test.outcome(),
360
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
path: path2,
361
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
results,
362
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
ok: test.outcome() === "expected" || test.outcome() === "flaky"
363
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
},
364
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
testCaseSummary: {
365
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
testId: test.id,
366
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
title: test.title,
367
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
projectName,
368
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
location,
369
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
duration,
370
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
annotations: this._serializeAnnotations(test.annotations),
371
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
tags: test.tags,
372
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
outcome: test.outcome(),
373
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
path: path2,
374
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
ok: test.outcome() === "expected" || test.outcome() === "flaky",
375
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
results: results.map((result) => {
376
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return { attachments: result.attachments.map((a) => ({ name: a.name, contentType: a.contentType, path: a.path })) };
377
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
})
378
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
379
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
};
380
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
381
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
_serializeAttachments(attachments) {
382
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
let lastAttachment;
383
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return attachments.map((a) => {
384
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (a.name === "trace")
385
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
this._hasTraces = true;
386
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if ((a.name === "stdout" || a.name === "stderr") && a.contentType === "text/plain") {
387
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (lastAttachment && lastAttachment.name === a.name && lastAttachment.contentType === a.contentType) {
388
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
lastAttachment.body += (0, import_util.stripAnsiEscapes)(a.body);
389
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return null;
390
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
391
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
a.body = (0, import_util.stripAnsiEscapes)(a.body);
392
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
lastAttachment = a;
393
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return a;
394
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
395
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (a.path) {
396
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
let fileName = a.path;
397
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
try {
398
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const buffer = import_fs.default.readFileSync(a.path);
399
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const sha1 = (0, import_utils.calculateSha1)(buffer) + import_path.default.extname(a.path);
400
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
fileName = this._attachmentsBaseURL + sha1;
401
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
import_fs.default.mkdirSync(import_path.default.join(this._reportFolder, "data"), { recursive: true });
402
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
import_fs.default.writeFileSync(import_path.default.join(this._reportFolder, "data", sha1), buffer);
403
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
} catch (e) {
404
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
405
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return {
406
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
name: a.name,
407
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
contentType: a.contentType,
408
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
path: fileName,
409
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
body: a.body
410
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
};
411
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
412
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (a.body instanceof Buffer) {
413
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (isTextContentType(a.contentType)) {
414
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const charset = a.contentType.match(/charset=(.*)/)?.[1];
415
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
try {
416
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const body = a.body.toString(charset || "utf-8");
417
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return {
418
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
name: a.name,
419
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
contentType: a.contentType,
420
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
body
421
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
};
422
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
} catch (e) {
423
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
424
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
425
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
import_fs.default.mkdirSync(import_path.default.join(this._reportFolder, "data"), { recursive: true });
426
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const extension = (0, import_utils.sanitizeForFilePath)(import_path.default.extname(a.name).replace(/^\./, "")) || import_utilsBundle2.mime.getExtension(a.contentType) || "dat";
427
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const sha1 = (0, import_utils.calculateSha1)(a.body) + "." + extension;
428
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
import_fs.default.writeFileSync(import_path.default.join(this._reportFolder, "data", sha1), a.body);
429
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return {
430
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
name: a.name,
431
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
contentType: a.contentType,
432
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
path: this._attachmentsBaseURL + sha1
433
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
};
434
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
435
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return {
436
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
name: a.name,
437
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
contentType: a.contentType,
438
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
body: a.body
439
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
};
440
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}).filter(Boolean);
441
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
442
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
_serializeAnnotations(annotations) {
443
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return annotations.map((a) => ({
444
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
type: a.type,
445
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
description: a.description === void 0 ? void 0 : String(a.description),
446
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
location: a.location ? {
447
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
file: a.location.file,
448
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
line: a.location.line,
449
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
column: a.location.column
450
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
} : void 0
451
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}));
452
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
453
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
_createTestResult(test, result) {
454
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return {
455
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
duration: result.duration,
456
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
startTime: result.startTime.toISOString(),
457
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
retry: result.retry,
458
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
steps: dedupeSteps(result.steps).map((s) => this._createTestStep(s, result)),
459
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
errors: (0, import_base.formatResultFailure)(import_base.internalScreen, test, result, "").map((error) => {
460
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return {
461
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
message: error.message,
462
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
codeframe: error.location ? createErrorCodeframe(error.message, error.location) : void 0
463
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
};
464
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}),
465
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
status: result.status,
466
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
annotations: this._serializeAnnotations(result.annotations),
467
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
attachments: this._serializeAttachments([
468
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
...result.attachments,
469
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
...result.stdout.map((m) => stdioAttachment(m, "stdout")),
470
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
...result.stderr.map((m) => stdioAttachment(m, "stderr"))
471
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
])
472
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
};
473
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
474
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
_createTestStep(dedupedStep, result) {
475
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const { step, duration, count } = dedupedStep;
476
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const skipped = dedupedStep.step.annotations?.find((a) => a.type === "skip");
477
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
let title = step.title;
478
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (skipped)
479
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
title = `${title} (skipped${skipped.description ? ": " + skipped.description : ""})`;
480
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const testStep = {
481
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
title,
482
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
startTime: step.startTime.toISOString(),
483
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
duration,
484
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
steps: dedupeSteps(step.steps).map((s) => this._createTestStep(s, result)),
485
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
attachments: step.attachments.map((s) => {
486
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const index = result.attachments.indexOf(s);
487
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (index === -1)
488
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
throw new Error("Unexpected, attachment not found");
489
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return index;
490
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}),
491
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
location: this._relativeLocation(step.location),
492
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
error: step.error?.message,
493
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
count,
494
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
skipped: !!skipped
495
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
};
496
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (step.location)
497
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
this._stepsInFile.set(step.location.file, testStep);
498
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return testStep;
499
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
500
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
_relativeLocation(location) {
501
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (!location)
502
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return void 0;
503
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const file = (0, import_utils.toPosixPath)(import_path.default.relative(this._config.rootDir, location.file));
504
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return {
505
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
file,
506
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
line: location.line,
507
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
column: location.column
508
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
};
509
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
510
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
511
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const emptyStats = () => {
512
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return {
513
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
total: 0,
514
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
expected: 0,
515
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
unexpected: 0,
516
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
flaky: 0,
517
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
skipped: 0,
518
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
ok: true
519
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
};
520
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
};
521
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const addStats = (stats, delta) => {
522
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
stats.total += delta.total;
523
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
stats.skipped += delta.skipped;
524
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
stats.expected += delta.expected;
525
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
stats.unexpected += delta.unexpected;
526
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
stats.flaky += delta.flaky;
527
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
stats.ok = stats.ok && delta.ok;
528
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return stats;
529
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
};
530
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
class Base64Encoder extends import_stream.Transform {
531
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
_transform(chunk, encoding, callback) {
532
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (this._remainder) {
533
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
chunk = Buffer.concat([this._remainder, chunk]);
534
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
this._remainder = void 0;
535
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
536
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const remaining = chunk.length % 3;
537
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (remaining) {
538
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
this._remainder = chunk.slice(chunk.length - remaining);
539
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
chunk = chunk.slice(0, chunk.length - remaining);
540
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
541
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
chunk = chunk.toString("base64");
542
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
this.push(Buffer.from(chunk));
543
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
callback();
544
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
545
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
_flush(callback) {
546
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (this._remainder)
547
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
this.push(Buffer.from(this._remainder.toString("base64")));
548
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
callback();
549
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
550
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
551
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
function isTextContentType(contentType) {
552
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return contentType.startsWith("text/") || contentType.startsWith("application/json");
553
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
554
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
function stdioAttachment(chunk, type) {
555
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return {
556
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
name: type,
557
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
contentType: "text/plain",
558
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
body: typeof chunk === "string" ? chunk : chunk.toString("utf-8")
559
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
};
560
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
561
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
function dedupeSteps(steps) {
562
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const result = [];
563
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
let lastResult = void 0;
564
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
for (const step of steps) {
565
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const canDedupe = !step.error && step.duration >= 0 && step.location?.file && !step.steps.length;
566
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const lastStep = lastResult?.step;
567
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (canDedupe && lastResult && lastStep && step.category === lastStep.category && step.title === lastStep.title && step.location?.file === lastStep.location?.file && step.location?.line === lastStep.location?.line && step.location?.column === lastStep.location?.column) {
568
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
++lastResult.count;
569
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
lastResult.duration += step.duration;
570
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
continue;
571
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
572
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
lastResult = { step, count: 1, duration: step.duration };
573
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
result.push(lastResult);
574
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (!canDedupe)
575
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
lastResult = void 0;
576
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
577
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return result;
578
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
579
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
function createSnippets(stepsInFile) {
580
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
for (const file of stepsInFile.keys()) {
581
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
let source;
582
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
try {
583
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
source = import_fs.default.readFileSync(file, "utf-8") + "\n//";
584
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
} catch (e) {
585
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
continue;
586
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
587
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const lines = source.split("\n").length;
588
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const highlighted = (0, import_babelBundle.codeFrameColumns)(source, { start: { line: lines, column: 1 } }, { highlightCode: true, linesAbove: lines, linesBelow: 0 });
589
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const highlightedLines = highlighted.split("\n");
590
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const lineWithArrow = highlightedLines[highlightedLines.length - 1];
591
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
for (const step of stepsInFile.get(file)) {
592
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if (step.location.line < 2 || step.location.line >= lines)
593
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
continue;
594
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const snippetLines = highlightedLines.slice(step.location.line - 2, step.location.line + 1);
595
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const index = lineWithArrow.indexOf("^");
596
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const shiftedArrow = lineWithArrow.slice(0, index) + " ".repeat(step.location.column - 1) + lineWithArrow.slice(index);
597
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
snippetLines.splice(2, 0, shiftedArrow);
598
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
step.snippet = snippetLines.join("\n");
599
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
600
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
601
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
602
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
function createErrorCodeframe(message, location) {
603
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
let source;
604
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
try {
605
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
source = import_fs.default.readFileSync(location.file, "utf-8") + "\n//";
606
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
} catch (e) {
607
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return;
608
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
609
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return (0, import_babelBundle.codeFrameColumns)(
610
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
source,
611
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
{
612
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
start: {
613
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
line: location.line,
614
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
column: location.column
615
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
616
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
},
617
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
{
618
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
highlightCode: false,
619
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
linesAbove: 100,
620
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
linesBelow: 100,
621
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
message: (0, import_util.stripAnsiEscapes)(message).split("\n")[0] || void 0
622
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
623
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
);
624
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
625
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
function writeLine(line) {
626
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
process.stdout.write(line + "\n");
627
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
628
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
var html_default = HtmlReporter;
629
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
// Annotate the CommonJS export names for ESM import in node:
630
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
0 && (module.exports = {
631
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
showHTMLReport,
632
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
startHtmlReportServer
633
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
});
634
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!