| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407 |
- "use strict";
- var __create = Object.create;
- var __defProp = Object.defineProperty;
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
- var __getOwnPropNames = Object.getOwnPropertyNames;
- var __getProtoOf = Object.getPrototypeOf;
- var __hasOwnProp = Object.prototype.hasOwnProperty;
- var __export = (target, all) => {
- for (var name in all)
- __defProp(target, name, { get: all[name], enumerable: true });
- };
- var __copyProps = (to, from, except, desc) => {
- if (from && typeof from === "object" || typeof from === "function") {
- for (let key of __getOwnPropNames(from))
- if (!__hasOwnProp.call(to, key) && key !== except)
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
- }
- return to;
- };
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
- // If the importer is in node compatibility mode or this is not an ESM
- // file that has been converted to a CommonJS file using a Babel-
- // compatible transform (i.e. "__esModule" has not been set), then set
- // "default" to the CommonJS "module.exports" for node compatibility.
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
- mod
- ));
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
- var util_exports = {};
- __export(util_exports, {
- addSuffixToFilePath: () => addSuffixToFilePath,
- ansiRegex: () => ansiRegex,
- callLogText: () => callLogText,
- createFileFiltersFromArguments: () => createFileFiltersFromArguments,
- createFileMatcher: () => createFileMatcher,
- createFileMatcherFromArguments: () => createFileMatcherFromArguments,
- createTitleMatcher: () => createTitleMatcher,
- debugTest: () => debugTest,
- errorWithFile: () => errorWithFile,
- expectTypes: () => expectTypes,
- fileExistsAsync: () => fileExistsAsync,
- fileIsModule: () => fileIsModule,
- filterStackFile: () => filterStackFile,
- filterStackTrace: () => filterStackTrace,
- filteredStackTrace: () => filteredStackTrace,
- forceRegExp: () => forceRegExp,
- formatLocation: () => formatLocation,
- getContainedPath: () => getContainedPath,
- getPackageJsonPath: () => getPackageJsonPath,
- mergeObjects: () => mergeObjects,
- normalizeAndSaveAttachment: () => normalizeAndSaveAttachment,
- relativeFilePath: () => relativeFilePath,
- removeDirAndLogToConsole: () => removeDirAndLogToConsole,
- resolveImportSpecifierAfterMapping: () => resolveImportSpecifierAfterMapping,
- resolveReporterOutputPath: () => resolveReporterOutputPath,
- sanitizeFilePathBeforeExtension: () => sanitizeFilePathBeforeExtension,
- serializeError: () => serializeError,
- stripAnsiEscapes: () => stripAnsiEscapes,
- trimLongString: () => trimLongString,
- windowsFilesystemFriendlyLength: () => windowsFilesystemFriendlyLength
- });
- module.exports = __toCommonJS(util_exports);
- var import_fs = __toESM(require("fs"));
- var import_path = __toESM(require("path"));
- var import_url = __toESM(require("url"));
- var import_util = __toESM(require("util"));
- var import_utils = require("playwright-core/lib/utils");
- var import_utilsBundle = require("playwright-core/lib/utilsBundle");
- const PLAYWRIGHT_TEST_PATH = import_path.default.join(__dirname, "..");
- const PLAYWRIGHT_CORE_PATH = import_path.default.dirname(require.resolve("playwright-core/package.json"));
- function filterStackTrace(e) {
- const name = e.name ? e.name + ": " : "";
- const cause = e.cause instanceof Error ? filterStackTrace(e.cause) : void 0;
- if (process.env.PWDEBUGIMPL)
- return { message: name + e.message, stack: e.stack || "", cause };
- const stackLines = (0, import_utils.stringifyStackFrames)(filteredStackTrace(e.stack?.split("\n") || []));
- return {
- message: name + e.message,
- stack: `${name}${e.message}${stackLines.map((line) => "\n" + line).join("")}`,
- cause
- };
- }
- function filterStackFile(file) {
- if (!process.env.PWDEBUGIMPL && file.startsWith(PLAYWRIGHT_TEST_PATH))
- return false;
- if (!process.env.PWDEBUGIMPL && file.startsWith(PLAYWRIGHT_CORE_PATH))
- return false;
- return true;
- }
- function filteredStackTrace(rawStack) {
- const frames = [];
- for (const line of rawStack) {
- const frame = (0, import_utils.parseStackFrame)(line, import_path.default.sep, !!process.env.PWDEBUGIMPL);
- if (!frame || !frame.file)
- continue;
- if (!filterStackFile(frame.file))
- continue;
- frames.push(frame);
- }
- return frames;
- }
- function serializeError(error) {
- if (error instanceof Error)
- return filterStackTrace(error);
- return {
- value: import_util.default.inspect(error)
- };
- }
- function createFileFiltersFromArguments(args) {
- return args.map((arg) => {
- const match = /^(.*?):(\d+):?(\d+)?$/.exec(arg);
- return {
- re: forceRegExp(match ? match[1] : arg),
- line: match ? parseInt(match[2], 10) : null,
- column: match?.[3] ? parseInt(match[3], 10) : null
- };
- });
- }
- function createFileMatcherFromArguments(args) {
- const filters = createFileFiltersFromArguments(args);
- return createFileMatcher(filters.map((filter) => filter.re || filter.exact || ""));
- }
- function createFileMatcher(patterns) {
- const reList = [];
- const filePatterns = [];
- for (const pattern of Array.isArray(patterns) ? patterns : [patterns]) {
- if ((0, import_utils.isRegExp)(pattern)) {
- reList.push(pattern);
- } else {
- if (!pattern.startsWith("**/"))
- filePatterns.push("**/" + pattern);
- else
- filePatterns.push(pattern);
- }
- }
- return (filePath) => {
- for (const re of reList) {
- re.lastIndex = 0;
- if (re.test(filePath))
- return true;
- }
- if (import_path.default.sep === "\\") {
- const fileURL = import_url.default.pathToFileURL(filePath).href;
- for (const re of reList) {
- re.lastIndex = 0;
- if (re.test(fileURL))
- return true;
- }
- }
- for (const pattern of filePatterns) {
- if ((0, import_utilsBundle.minimatch)(filePath, pattern, { nocase: true, dot: true }))
- return true;
- }
- return false;
- };
- }
- function createTitleMatcher(patterns) {
- const reList = Array.isArray(patterns) ? patterns : [patterns];
- return (value) => {
- for (const re of reList) {
- re.lastIndex = 0;
- if (re.test(value))
- return true;
- }
- return false;
- };
- }
- function mergeObjects(a, b, c) {
- const result = { ...a };
- for (const x of [b, c].filter(Boolean)) {
- for (const [name, value] of Object.entries(x)) {
- if (!Object.is(value, void 0))
- result[name] = value;
- }
- }
- return result;
- }
- function forceRegExp(pattern) {
- const match = pattern.match(/^\/(.*)\/([gi]*)$/);
- if (match)
- return new RegExp(match[1], match[2]);
- return new RegExp(pattern, "gi");
- }
- function relativeFilePath(file) {
- if (!import_path.default.isAbsolute(file))
- return file;
- return import_path.default.relative(process.cwd(), file);
- }
- function formatLocation(location) {
- return relativeFilePath(location.file) + ":" + location.line + ":" + location.column;
- }
- function errorWithFile(file, message) {
- return new Error(`${relativeFilePath(file)}: ${message}`);
- }
- function expectTypes(receiver, types, matcherName) {
- if (typeof receiver !== "object" || !types.includes(receiver.constructor.name)) {
- const commaSeparated = types.slice();
- const lastType = commaSeparated.pop();
- const typesString = commaSeparated.length ? commaSeparated.join(", ") + " or " + lastType : lastType;
- throw new Error(`${matcherName} can be only used with ${typesString} object${types.length > 1 ? "s" : ""}`);
- }
- }
- const windowsFilesystemFriendlyLength = 60;
- function trimLongString(s, length = 100) {
- if (s.length <= length)
- return s;
- const hash = (0, import_utils.calculateSha1)(s);
- const middle = `-${hash.substring(0, 5)}-`;
- const start = Math.floor((length - middle.length) / 2);
- const end = length - middle.length - start;
- return s.substring(0, start) + middle + s.slice(-end);
- }
- function addSuffixToFilePath(filePath, suffix) {
- const ext = import_path.default.extname(filePath);
- const base = filePath.substring(0, filePath.length - ext.length);
- return base + suffix + ext;
- }
- function sanitizeFilePathBeforeExtension(filePath, ext) {
- ext ??= import_path.default.extname(filePath);
- const base = filePath.substring(0, filePath.length - ext.length);
- return (0, import_utils.sanitizeForFilePath)(base) + ext;
- }
- function getContainedPath(parentPath, subPath = "") {
- const resolvedPath = import_path.default.resolve(parentPath, subPath);
- if (resolvedPath === parentPath || resolvedPath.startsWith(parentPath + import_path.default.sep))
- return resolvedPath;
- return null;
- }
- const debugTest = (0, import_utilsBundle.debug)("pw:test");
- const callLogText = (log) => {
- if (!log || !log.some((l) => !!l))
- return "";
- return `
- Call log:
- ${import_utilsBundle.colors.dim(log.join("\n"))}
- `;
- };
- const folderToPackageJsonPath = /* @__PURE__ */ new Map();
- function getPackageJsonPath(folderPath) {
- const cached = folderToPackageJsonPath.get(folderPath);
- if (cached !== void 0)
- return cached;
- const packageJsonPath = import_path.default.join(folderPath, "package.json");
- if (import_fs.default.existsSync(packageJsonPath)) {
- folderToPackageJsonPath.set(folderPath, packageJsonPath);
- return packageJsonPath;
- }
- const parentFolder = import_path.default.dirname(folderPath);
- if (folderPath === parentFolder) {
- folderToPackageJsonPath.set(folderPath, "");
- return "";
- }
- const result = getPackageJsonPath(parentFolder);
- folderToPackageJsonPath.set(folderPath, result);
- return result;
- }
- function resolveReporterOutputPath(defaultValue, configDir, configValue) {
- if (configValue)
- return import_path.default.resolve(configDir, configValue);
- let basePath = getPackageJsonPath(configDir);
- basePath = basePath ? import_path.default.dirname(basePath) : process.cwd();
- return import_path.default.resolve(basePath, defaultValue);
- }
- async function normalizeAndSaveAttachment(outputPath, name, options = {}) {
- if (options.path === void 0 && options.body === void 0)
- return { name, contentType: "text/plain" };
- if ((options.path !== void 0 ? 1 : 0) + (options.body !== void 0 ? 1 : 0) !== 1)
- throw new Error(`Exactly one of "path" and "body" must be specified`);
- if (options.path !== void 0) {
- const hash = (0, import_utils.calculateSha1)(options.path);
- if (!(0, import_utils.isString)(name))
- throw new Error('"name" should be string.');
- const sanitizedNamePrefix = (0, import_utils.sanitizeForFilePath)(name) + "-";
- const dest = import_path.default.join(outputPath, "attachments", sanitizedNamePrefix + hash + import_path.default.extname(options.path));
- await import_fs.default.promises.mkdir(import_path.default.dirname(dest), { recursive: true });
- await import_fs.default.promises.copyFile(options.path, dest);
- const contentType = options.contentType ?? (import_utilsBundle.mime.getType(import_path.default.basename(options.path)) || "application/octet-stream");
- return { name, contentType, path: dest };
- } else {
- const contentType = options.contentType ?? (typeof options.body === "string" ? "text/plain" : "application/octet-stream");
- return { name, contentType, body: typeof options.body === "string" ? Buffer.from(options.body) : options.body };
- }
- }
- function fileIsModule(file) {
- if (file.endsWith(".mjs") || file.endsWith(".mts"))
- return true;
- if (file.endsWith(".cjs") || file.endsWith(".cts"))
- return false;
- const folder = import_path.default.dirname(file);
- return folderIsModule(folder);
- }
- function folderIsModule(folder) {
- const packageJsonPath = getPackageJsonPath(folder);
- if (!packageJsonPath)
- return false;
- return require(packageJsonPath).type === "module";
- }
- const packageJsonMainFieldCache = /* @__PURE__ */ new Map();
- function getMainFieldFromPackageJson(packageJsonPath) {
- if (!packageJsonMainFieldCache.has(packageJsonPath)) {
- let mainField;
- try {
- mainField = JSON.parse(import_fs.default.readFileSync(packageJsonPath, "utf8")).main;
- } catch {
- }
- packageJsonMainFieldCache.set(packageJsonPath, mainField);
- }
- return packageJsonMainFieldCache.get(packageJsonPath);
- }
- const kExtLookups = /* @__PURE__ */ new Map([
- [".js", [".jsx", ".ts", ".tsx"]],
- [".jsx", [".tsx"]],
- [".cjs", [".cts"]],
- [".mjs", [".mts"]],
- ["", [".js", ".ts", ".jsx", ".tsx", ".cjs", ".mjs", ".cts", ".mts"]]
- ]);
- function resolveImportSpecifierExtension(resolved) {
- if (fileExists(resolved))
- return resolved;
- for (const [ext, others] of kExtLookups) {
- if (!resolved.endsWith(ext))
- continue;
- for (const other of others) {
- const modified = resolved.substring(0, resolved.length - ext.length) + other;
- if (fileExists(modified))
- return modified;
- }
- break;
- }
- }
- function resolveImportSpecifierAfterMapping(resolved, afterPathMapping) {
- const resolvedFile = resolveImportSpecifierExtension(resolved);
- if (resolvedFile)
- return resolvedFile;
- if (dirExists(resolved)) {
- const packageJsonPath = import_path.default.join(resolved, "package.json");
- if (afterPathMapping) {
- const mainField = getMainFieldFromPackageJson(packageJsonPath);
- const mainFieldResolved = mainField ? resolveImportSpecifierExtension(import_path.default.resolve(resolved, mainField)) : void 0;
- return mainFieldResolved || resolveImportSpecifierExtension(import_path.default.join(resolved, "index"));
- }
- if (fileExists(packageJsonPath))
- return resolved;
- const dirImport = import_path.default.join(resolved, "index");
- return resolveImportSpecifierExtension(dirImport);
- }
- }
- function fileExists(resolved) {
- return import_fs.default.statSync(resolved, { throwIfNoEntry: false })?.isFile();
- }
- async function fileExistsAsync(resolved) {
- try {
- const stat = await import_fs.default.promises.stat(resolved);
- return stat.isFile();
- } catch {
- return false;
- }
- }
- function dirExists(resolved) {
- return import_fs.default.statSync(resolved, { throwIfNoEntry: false })?.isDirectory();
- }
- async function removeDirAndLogToConsole(dir) {
- try {
- if (!import_fs.default.existsSync(dir))
- return;
- console.log(`Removing ${await import_fs.default.promises.realpath(dir)}`);
- await import_fs.default.promises.rm(dir, { recursive: true, force: true });
- } catch {
- }
- }
- const ansiRegex = new RegExp("([\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:[a-zA-Z\\d]*(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)|(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~])))", "g");
- function stripAnsiEscapes(str) {
- return str.replace(ansiRegex, "");
- }
- // Annotate the CommonJS export names for ESM import in node:
- 0 && (module.exports = {
- addSuffixToFilePath,
- ansiRegex,
- callLogText,
- createFileFiltersFromArguments,
- createFileMatcher,
- createFileMatcherFromArguments,
- createTitleMatcher,
- debugTest,
- errorWithFile,
- expectTypes,
- fileExistsAsync,
- fileIsModule,
- filterStackFile,
- filterStackTrace,
- filteredStackTrace,
- forceRegExp,
- formatLocation,
- getContainedPath,
- getPackageJsonPath,
- mergeObjects,
- normalizeAndSaveAttachment,
- relativeFilePath,
- removeDirAndLogToConsole,
- resolveImportSpecifierAfterMapping,
- resolveReporterOutputPath,
- sanitizeFilePathBeforeExtension,
- serializeError,
- stripAnsiEscapes,
- trimLongString,
- windowsFilesystemFriendlyLength
- });
|