UNPKG

brave-real-playwright-core

Version:

Brave-optimized Playwright Core (v1.56.1) with comprehensive stealth patches and error stack sanitization

159 lines (158 loc) 5.33 kB
"use strict"; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; 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 __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); var stackTrace_exports = {}; __export(stackTrace_exports, { captureRawStack: () => captureRawStack, parseErrorStack: () => parseErrorStack, parseStackFrame: () => parseStackFrame, rewriteErrorMessage: () => rewriteErrorMessage, splitErrorMessage: () => splitErrorMessage, stringifyStackFrames: () => stringifyStackFrames }); module.exports = __toCommonJS(stackTrace_exports); function captureRawStack() { const stackTraceLimit = Error.stackTraceLimit; Error.stackTraceLimit = 50; const error = new Error(); const stack = error.stack || ""; Error.stackTraceLimit = stackTraceLimit; return stack.split("\n"); } function parseStackFrame(text, pathSeparator, showInternalStackFrames) { const match = text && text.match(re); if (!match) return null; let fname = match[2]; let file = match[7]; if (!file) return null; if (!showInternalStackFrames && (file.startsWith("internal") || file.startsWith("node:"))) return null; const line = match[8]; const column = match[9]; const closeParen = match[11] === ")"; const frame = { file: "", line: 0, column: 0 }; if (line) frame.line = Number(line); if (column) frame.column = Number(column); if (closeParen && file) { let closes = 0; for (let i = file.length - 1; i > 0; i--) { if (file.charAt(i) === ")") { closes++; } else if (file.charAt(i) === "(" && file.charAt(i - 1) === " ") { closes--; if (closes === -1 && file.charAt(i - 1) === " ") { const before = file.slice(0, i - 1); const after = file.slice(i + 1); file = after; fname += ` (${before}`; break; } } } } if (fname) { const methodMatch = fname.match(methodRe); if (methodMatch) fname = methodMatch[1]; } if (file) { if (file.startsWith("file://")) file = fileURLToPath(file, pathSeparator); frame.file = file; } if (fname) frame.function = fname; return frame; } function rewriteErrorMessage(e, newMessage) { const lines = (e.stack?.split("\n") || []).filter((l) => l.startsWith(" at ")); e.message = newMessage; const errorTitle = `${e.name}: ${e.message}`; if (lines.length) e.stack = `${errorTitle} ${lines.join("\n")}`; return e; } function stringifyStackFrames(frames) { const stackLines = []; for (const frame of frames) { if (frame.function) stackLines.push(` at ${frame.function} (${frame.file}:${frame.line}:${frame.column})`); else stackLines.push(` at ${frame.file}:${frame.line}:${frame.column}`); } return stackLines; } function splitErrorMessage(message) { const separationIdx = message.indexOf(":"); return { name: separationIdx !== -1 ? message.slice(0, separationIdx) : "", message: separationIdx !== -1 && separationIdx + 2 <= message.length ? message.substring(separationIdx + 2) : message }; } function parseErrorStack(stack, pathSeparator, showInternalStackFrames = false) { const lines = stack.split("\n"); let firstStackLine = lines.findIndex((line) => line.startsWith(" at ")); if (firstStackLine === -1) firstStackLine = lines.length; const message = lines.slice(0, firstStackLine).join("\n"); const stackLines = lines.slice(firstStackLine); let location; for (const line of stackLines) { const frame = parseStackFrame(line, pathSeparator, showInternalStackFrames); if (!frame || !frame.file) continue; if (belongsToNodeModules(frame.file, pathSeparator)) continue; location = { file: frame.file, column: frame.column || 0, line: frame.line || 0 }; break; } return { message, stackLines, location }; } function belongsToNodeModules(file, pathSeparator) { return file.includes(`${pathSeparator}node_modules${pathSeparator}`); } const re = new RegExp( "^(?:\\s*at )?(?:(new) )?(?:(.*?) \\()?(?:eval at ([^ ]+) \\((.+?):(\\d+):(\\d+)\\), )?(?:(.+?):(\\d+):(\\d+)|(native))(\\)?)$" ); const methodRe = /^(.*?) \[as (.*?)\]$/; function fileURLToPath(fileUrl, pathSeparator) { if (!fileUrl.startsWith("file://")) return fileUrl; let path = decodeURIComponent(fileUrl.slice(7)); if (path.startsWith("/") && /^[a-zA-Z]:/.test(path.slice(1))) path = path.slice(1); return path.replace(/\//g, pathSeparator); } // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { captureRawStack, parseErrorStack, parseStackFrame, rewriteErrorMessage, splitErrorMessage, stringifyStackFrames });