testcafe
Version:
Automated browser testing for the modern web development stack.
73 lines • 9.94 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.parseUserAgent = exports.calculatePrettyUserAgent = void 0;
const bowser_1 = __importDefault(require("bowser"));
const DEFAULT_NAME = 'Other';
const DEFAULT_VERSION = '0.0';
const DEFAULT_PLATFORM_TYPE = DEFAULT_NAME.toLowerCase();
const EMPTY_PARSED_USER_AGENT = bowser_1.default.parse(' ');
const HEADLESS_EDGE = {
regExp: /HeadlessEdg/i,
browserName: 'Microsoft Edge',
};
function calculateBrowser(browserDetails) {
return {
name: browserDetails.name || DEFAULT_NAME,
version: browserDetails.version || DEFAULT_VERSION,
};
}
function calculateOs(parsedOsDetails) {
const name = parsedOsDetails.name || DEFAULT_NAME;
let version = DEFAULT_VERSION;
// NOTE: a 'versionName' property value is more readable in the case of Windows (GH-481):
// Windows 8.1: os.version: "NT 6.3", os.versionName: "8.1".
if (name.toLowerCase() === 'windows') {
if (parsedOsDetails.versionName)
version = parsedOsDetails.versionName;
}
else if (parsedOsDetails.version)
version = parsedOsDetails.version;
return { name, version };
}
function calculateEngine(engineDetails) {
return {
name: engineDetails.name || DEFAULT_NAME,
version: engineDetails.version || DEFAULT_VERSION,
};
}
function calculateParsedUserAgent(userAgent) {
if (!userAgent)
return EMPTY_PARSED_USER_AGENT;
// The 'bowser' module incorrectly determine the headless edge browser.
// Since this module is abandoned, we are forced to fix it on our side.
const isHeadlessEdge = HEADLESS_EDGE.regExp.test(userAgent);
const parsedUserAgent = bowser_1.default.parse(userAgent);
if (isHeadlessEdge)
parsedUserAgent.browser.name = HEADLESS_EDGE.browserName;
return parsedUserAgent;
}
function calculatePrettyUserAgent(browser, os) {
return `${browser.name} ${browser.version} / ${os.name} ${os.version}`;
}
exports.calculatePrettyUserAgent = calculatePrettyUserAgent;
function parseUserAgent(userAgent = '', osInfo) {
const parsedUserAgent = calculateParsedUserAgent(userAgent);
const browser = calculateBrowser(parsedUserAgent.browser);
const os = osInfo || calculateOs(parsedUserAgent.os);
const engine = calculateEngine(parsedUserAgent.engine);
const prettyUserAgent = calculatePrettyUserAgent(browser, os);
return {
name: browser.name,
version: browser.version,
platform: parsedUserAgent.platform.type || DEFAULT_PLATFORM_TYPE,
os,
engine,
prettyUserAgent: prettyUserAgent,
userAgent,
};
}
exports.parseUserAgent = parseUserAgent;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2UtdXNlci1hZ2VudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9wYXJzZS11c2VyLWFnZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLG9EQUE0QjtBQUc1QixNQUFNLFlBQVksR0FBYyxPQUFPLENBQUM7QUFDeEMsTUFBTSxlQUFlLEdBQVcsS0FBSyxDQUFDO0FBQ3RDLE1BQU0scUJBQXFCLEdBQUssWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQzNELE1BQU0sdUJBQXVCLEdBQUcsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFFbEQsTUFBTSxhQUFhLEdBQUc7SUFDbEIsTUFBTSxFQUFPLGNBQWM7SUFDM0IsV0FBVyxFQUFFLGdCQUFnQjtDQUNoQyxDQUFDO0FBaUJGLFNBQVMsZ0JBQWdCLENBQUUsY0FBNEM7SUFDbkUsT0FBTztRQUNILElBQUksRUFBSyxjQUFjLENBQUMsSUFBSSxJQUFJLFlBQVk7UUFDNUMsT0FBTyxFQUFFLGNBQWMsQ0FBQyxPQUFPLElBQUksZUFBZTtLQUNyRCxDQUFDO0FBQ04sQ0FBQztBQUVELFNBQVMsV0FBVyxDQUFFLGVBQXdDO0lBQzFELE1BQU0sSUFBSSxHQUFHLGVBQWUsQ0FBQyxJQUFJLElBQUksWUFBWSxDQUFDO0lBRWxELElBQUksT0FBTyxHQUFHLGVBQWUsQ0FBQztJQUU5Qix5RkFBeUY7SUFDekYsNERBQTREO0lBQzVELElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxLQUFLLFNBQVMsRUFBRTtRQUNsQyxJQUFJLGVBQWUsQ0FBQyxXQUFXO1lBQzNCLE9BQU8sR0FBRyxlQUFlLENBQUMsV0FBVyxDQUFDO0tBQzdDO1NBQ0ksSUFBSSxlQUFlLENBQUMsT0FBTztRQUM1QixPQUFPLEdBQUcsZUFBZSxDQUFDLE9BQU8sQ0FBQztJQUV0QyxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDO0FBQzdCLENBQUM7QUFFRCxTQUFTLGVBQWUsQ0FBRSxhQUEwQztJQUNoRSxPQUFPO1FBQ0gsSUFBSSxFQUFLLGFBQWEsQ0FBQyxJQUFJLElBQUksWUFBWTtRQUMzQyxPQUFPLEVBQUUsYUFBYSxDQUFDLE9BQU8sSUFBSSxlQUFlO0tBQ3BELENBQUM7QUFDTixDQUFDO0FBRUQsU0FBUyx3QkFBd0IsQ0FBRSxTQUFpQjtJQUNoRCxJQUFJLENBQUMsU0FBUztRQUNWLE9BQU8sdUJBQXVCLENBQUM7SUFFbkMsdUVBQXVFO0lBQ3ZFLHVFQUF1RTtJQUN2RSxNQUFNLGNBQWMsR0FBSSxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM3RCxNQUFNLGVBQWUsR0FBRyxnQkFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUVoRCxJQUFJLGNBQWM7UUFDZCxlQUFlLENBQUMsT0FBTyxDQUFDLElBQUksR0FBRyxhQUFhLENBQUMsV0FBVyxDQUFDO0lBRTdELE9BQU8sZUFBZSxDQUFDO0FBQzNCLENBQUM7QUFFRCxTQUFnQix3QkFBd0IsQ0FBRSxPQUF3QixFQUFFLEVBQW1CO0lBQ25GLE9BQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxJQUFJLE9BQU8sQ0FBQyxPQUFPLE1BQU0sRUFBRSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDM0UsQ0FBQztBQUZELDREQUVDO0FBRUQsU0FBZ0IsY0FBYyxDQUFFLFNBQVMsR0FBRyxFQUFFLEVBQUUsTUFBZTtJQUMzRCxNQUFNLGVBQWUsR0FBRyx3QkFBd0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM1RCxNQUFNLE9BQU8sR0FBVyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbEUsTUFBTSxFQUFFLEdBQWdCLE1BQU0sSUFBSSxXQUFXLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2xFLE1BQU0sTUFBTSxHQUFZLGVBQWUsQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDaEUsTUFBTSxlQUFlLEdBQUcsd0JBQXdCLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBRTlELE9BQU87UUFDSCxJQUFJLEVBQWEsT0FBTyxDQUFDLElBQUk7UUFDN0IsT0FBTyxFQUFVLE9BQU8sQ0FBQyxPQUFPO1FBQ2hDLFFBQVEsRUFBUyxlQUFlLENBQUMsUUFBUSxDQUFDLElBQUksSUFBSSxxQkFBcUI7UUFDdkUsRUFBRTtRQUNGLE1BQU07UUFDTixlQUFlLEVBQUUsZUFBZTtRQUNoQyxTQUFTO0tBQ1osQ0FBQztBQUNOLENBQUM7QUFoQkQsd0NBZ0JDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJvd3NlciBmcm9tICdib3dzZXInO1xuaW1wb3J0IHsgT1NJbmZvIH0gZnJvbSAnZ2V0LW9zLWluZm8nO1xuXG5jb25zdCBERUZBVUxUX05BTUUgICAgICAgICAgICA9ICdPdGhlcic7XG5jb25zdCBERUZBVUxUX1ZFUlNJT04gICAgICAgICA9ICcwLjAnO1xuY29uc3QgREVGQVVMVF9QTEFURk9STV9UWVBFICAgPSBERUZBVUxUX05BTUUudG9Mb3dlckNhc2UoKTtcbmNvbnN0IEVNUFRZX1BBUlNFRF9VU0VSX0FHRU5UID0gQm93c2VyLnBhcnNlKCcgJyk7XG5cbmNvbnN0IEhFQURMRVNTX0VER0UgPSB7XG4gICAgcmVnRXhwOiAgICAgIC9IZWFkbGVzc0VkZy9pLFxuICAgIGJyb3dzZXJOYW1lOiAnTWljcm9zb2Z0IEVkZ2UnLFxufTtcblxuaW50ZXJmYWNlIFBhcnNlZENvbXBvbmVudCB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHZlcnNpb246IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQYXJzZWRVc2VyQWdlbnQge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICB2ZXJzaW9uOiBzdHJpbmc7XG4gICAgcGxhdGZvcm06IHN0cmluZztcbiAgICBvczogUGFyc2VkQ29tcG9uZW50O1xuICAgIGVuZ2luZTogUGFyc2VkQ29tcG9uZW50O1xuICAgIHByZXR0eVVzZXJBZ2VudDogc3RyaW5nO1xuICAgIHVzZXJBZ2VudDogc3RyaW5nO1xufVxuXG5mdW5jdGlvbiBjYWxjdWxhdGVCcm93c2VyIChicm93c2VyRGV0YWlsczogQm93c2VyLlBhcnNlci5Ccm93c2VyRGV0YWlscyk6IFBhcnNlZENvbXBvbmVudCB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogICAgYnJvd3NlckRldGFpbHMubmFtZSB8fCBERUZBVUxUX05BTUUsXG4gICAgICAgIHZlcnNpb246IGJyb3dzZXJEZXRhaWxzLnZlcnNpb24gfHwgREVGQVVMVF9WRVJTSU9OLFxuICAgIH07XG59XG5cbmZ1bmN0aW9uIGNhbGN1bGF0ZU9zIChwYXJzZWRPc0RldGFpbHM6IEJvd3Nlci5QYXJzZXIuT1NEZXRhaWxzKTogUGFyc2VkQ29tcG9uZW50IHtcbiAgICBjb25zdCBuYW1lID0gcGFyc2VkT3NEZXRhaWxzLm5hbWUgfHwgREVGQVVMVF9OQU1FO1xuXG4gICAgbGV0IHZlcnNpb24gPSBERUZBVUxUX1ZFUlNJT047XG5cbiAgICAvLyBOT1RFOiBhICd2ZXJzaW9uTmFtZScgcHJvcGVydHkgdmFsdWUgaXMgbW9yZSByZWFkYWJsZSBpbiB0aGUgY2FzZSBvZiBXaW5kb3dzIChHSC00ODEpOlxuICAgIC8vIFdpbmRvd3MgOC4xOiBvcy52ZXJzaW9uOiBcIk5UIDYuM1wiLCBvcy52ZXJzaW9uTmFtZTogXCI4LjFcIi5cbiAgICBpZiAobmFtZS50b0xvd2VyQ2FzZSgpID09PSAnd2luZG93cycpIHtcbiAgICAgICAgaWYgKHBhcnNlZE9zRGV0YWlscy52ZXJzaW9uTmFtZSlcbiAgICAgICAgICAgIHZlcnNpb24gPSBwYXJzZWRPc0RldGFpbHMudmVyc2lvbk5hbWU7XG4gICAgfVxuICAgIGVsc2UgaWYgKHBhcnNlZE9zRGV0YWlscy52ZXJzaW9uKVxuICAgICAgICB2ZXJzaW9uID0gcGFyc2VkT3NEZXRhaWxzLnZlcnNpb247XG5cbiAgICByZXR1cm4geyBuYW1lLCB2ZXJzaW9uIH07XG59XG5cbmZ1bmN0aW9uIGNhbGN1bGF0ZUVuZ2luZSAoZW5naW5lRGV0YWlsczogQm93c2VyLlBhcnNlci5FbmdpbmVEZXRhaWxzKTogUGFyc2VkQ29tcG9uZW50IHtcbiAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiAgICBlbmdpbmVEZXRhaWxzLm5hbWUgfHwgREVGQVVMVF9OQU1FLFxuICAgICAgICB2ZXJzaW9uOiBlbmdpbmVEZXRhaWxzLnZlcnNpb24gfHwgREVGQVVMVF9WRVJTSU9OLFxuICAgIH07XG59XG5cbmZ1bmN0aW9uIGNhbGN1bGF0ZVBhcnNlZFVzZXJBZ2VudCAodXNlckFnZW50OiBzdHJpbmcpOiBCb3dzZXIuUGFyc2VyLlBhcnNlZFJlc3VsdCB7XG4gICAgaWYgKCF1c2VyQWdlbnQpXG4gICAgICAgIHJldHVybiBFTVBUWV9QQVJTRURfVVNFUl9BR0VOVDtcblxuICAgIC8vIFRoZSAnYm93c2VyJyBtb2R1bGUgaW5jb3JyZWN0bHkgZGV0ZXJtaW5lIHRoZSBoZWFkbGVzcyBlZGdlIGJyb3dzZXIuXG4gICAgLy8gU2luY2UgdGhpcyBtb2R1bGUgaXMgYWJhbmRvbmVkLCB3ZSBhcmUgZm9yY2VkIHRvIGZpeCBpdCBvbiBvdXIgc2lkZS5cbiAgICBjb25zdCBpc0hlYWRsZXNzRWRnZSAgPSBIRUFETEVTU19FREdFLnJlZ0V4cC50ZXN0KHVzZXJBZ2VudCk7XG4gICAgY29uc3QgcGFyc2VkVXNlckFnZW50ID0gQm93c2VyLnBhcnNlKHVzZXJBZ2VudCk7XG5cbiAgICBpZiAoaXNIZWFkbGVzc0VkZ2UpXG4gICAgICAgIHBhcnNlZFVzZXJBZ2VudC5icm93c2VyLm5hbWUgPSBIRUFETEVTU19FREdFLmJyb3dzZXJOYW1lO1xuXG4gICAgcmV0dXJuIHBhcnNlZFVzZXJBZ2VudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGF0ZVByZXR0eVVzZXJBZ2VudCAoYnJvd3NlcjogUGFyc2VkQ29tcG9uZW50LCBvczogUGFyc2VkQ29tcG9uZW50KTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7YnJvd3Nlci5uYW1lfSAke2Jyb3dzZXIudmVyc2lvbn0gLyAke29zLm5hbWV9ICR7b3MudmVyc2lvbn1gO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VVc2VyQWdlbnQgKHVzZXJBZ2VudCA9ICcnLCBvc0luZm8/OiBPU0luZm8pOiBQYXJzZWRVc2VyQWdlbnQge1xuICAgIGNvbnN0IHBhcnNlZFVzZXJBZ2VudCA9IGNhbGN1bGF0ZVBhcnNlZFVzZXJBZ2VudCh1c2VyQWdlbnQpO1xuICAgIGNvbnN0IGJyb3dzZXIgICAgICAgICA9IGNhbGN1bGF0ZUJyb3dzZXIocGFyc2VkVXNlckFnZW50LmJyb3dzZXIpO1xuICAgIGNvbnN0IG9zICAgICAgICAgICAgICA9IG9zSW5mbyB8fCBjYWxjdWxhdGVPcyhwYXJzZWRVc2VyQWdlbnQub3MpO1xuICAgIGNvbnN0IGVuZ2luZSAgICAgICAgICA9IGNhbGN1bGF0ZUVuZ2luZShwYXJzZWRVc2VyQWdlbnQuZW5naW5lKTtcbiAgICBjb25zdCBwcmV0dHlVc2VyQWdlbnQgPSBjYWxjdWxhdGVQcmV0dHlVc2VyQWdlbnQoYnJvd3Nlciwgb3MpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogICAgICAgICAgICBicm93c2VyLm5hbWUsXG4gICAgICAgIHZlcnNpb246ICAgICAgICAgYnJvd3Nlci52ZXJzaW9uLFxuICAgICAgICBwbGF0Zm9ybTogICAgICAgIHBhcnNlZFVzZXJBZ2VudC5wbGF0Zm9ybS50eXBlIHx8IERFRkFVTFRfUExBVEZPUk1fVFlQRSxcbiAgICAgICAgb3MsXG4gICAgICAgIGVuZ2luZSxcbiAgICAgICAgcHJldHR5VXNlckFnZW50OiBwcmV0dHlVc2VyQWdlbnQsXG4gICAgICAgIHVzZXJBZ2VudCxcbiAgICB9O1xufVxuIl19