rebrowser-playwright-core
Version:
A drop-in replacement for playwright-core patched with rebrowser-patches. It allows to pass modern automation detection tests.
101 lines (100 loc) • 4.12 kB
JavaScript
;
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 recorderUtils_exports = {};
__export(recorderUtils_exports, {
buildFullSelector: () => buildFullSelector,
collapseActions: () => collapseActions,
frameForAction: () => frameForAction,
mainFrameForAction: () => mainFrameForAction,
metadataToCallLog: () => metadataToCallLog
});
module.exports = __toCommonJS(recorderUtils_exports);
function buildFullSelector(framePath, selector) {
return [...framePath, selector].join(" >> internal:control=enter-frame >> ");
}
function metadataToCallLog(metadata, status) {
let title = metadata.apiName || metadata.method;
if (metadata.method === "waitForEventInfo")
title += `(${metadata.params.info.event})`;
title = title.replace("object.expect", "expect");
if (metadata.error)
status = "error";
const params = {
url: metadata.params?.url,
selector: metadata.params?.selector
};
let duration = metadata.endTime ? metadata.endTime - metadata.startTime : void 0;
if (typeof duration === "number" && metadata.pauseStartTime && metadata.pauseEndTime) {
duration -= metadata.pauseEndTime - metadata.pauseStartTime;
duration = Math.max(duration, 0);
}
const callLog = {
id: metadata.id,
messages: metadata.log,
title,
status,
error: metadata.error?.error?.message,
params,
duration
};
return callLog;
}
function mainFrameForAction(pageAliases, actionInContext) {
const pageAlias = actionInContext.frame.pageAlias;
const page = [...pageAliases.entries()].find(([, alias]) => pageAlias === alias)?.[0];
if (!page)
throw new Error(`Internal error: page ${pageAlias} not found in [${[...pageAliases.values()]}]`);
return page.mainFrame();
}
async function frameForAction(pageAliases, actionInContext, action) {
const pageAlias = actionInContext.frame.pageAlias;
const page = [...pageAliases.entries()].find(([, alias]) => pageAlias === alias)?.[0];
if (!page)
throw new Error("Internal error: page not found");
const fullSelector = buildFullSelector(actionInContext.frame.framePath, action.selector);
const result = await page.mainFrame().selectors.resolveFrameForSelector(fullSelector);
if (!result)
throw new Error("Internal error: frame not found");
return result.frame;
}
function collapseActions(actions) {
const result = [];
for (const action of actions) {
const lastAction = result[result.length - 1];
const isSameAction = lastAction && lastAction.action.name === action.action.name && lastAction.frame.pageAlias === action.frame.pageAlias && lastAction.frame.framePath.join("|") === action.frame.framePath.join("|");
const isSameSelector = lastAction && "selector" in lastAction.action && "selector" in action.action && action.action.selector === lastAction.action.selector;
const shouldMerge = isSameAction && (action.action.name === "navigate" || action.action.name === "fill" && isSameSelector);
if (!shouldMerge) {
result.push(action);
continue;
}
const startTime = result[result.length - 1].startTime;
result[result.length - 1] = action;
result[result.length - 1].startTime = startTime;
}
return result;
}
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
buildFullSelector,
collapseActions,
frameForAction,
mainFrameForAction,
metadataToCallLog
});