UNPKG

@applitools/driver

Version:

Applitools universal framework wrapper

177 lines (176 loc) 8.44 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.extractUserAgentEnvironment = void 0; const utils = __importStar(require("@applitools/utils")); const majorMinorRegexpString = '(?<majorVersion>[^ .;_)]+)[_.;](?<minorVersion>[^ .;_)]*)'; const platformRegexpMapping = [ ['Windows', new RegExp(`Windows(?:(?: NT)? ${majorMinorRegexpString}?)?`)], ['iOS', new RegExp(`CPU(?: i[a-zA-Z]+)? OS ${majorMinorRegexpString}`)], ['Mac OS X', new RegExp(`Mac OS X(?: ${majorMinorRegexpString})?`)], ['Android', new RegExp(`Android ${majorMinorRegexpString}`)], ['Macintosh', new RegExp(`Mac_PowerPC`)], ['Linux', new RegExp(`Linux`)], ['Chrome OS', new RegExp(`CrOS`)], ['SymbOS', new RegExp(`SymbOS`)], ]; const browserRegexpMapping = [ ['IE', new RegExp(`rv:${majorMinorRegexpString}\\) like Gecko`)], ['IE', new RegExp(`MSIE ${majorMinorRegexpString}`)], ['Electron', new RegExp(`Electron/${majorMinorRegexpString}`)], ['Opera', new RegExp(`Opera/${majorMinorRegexpString}`)], ['Edge', new RegExp(`(?:Edg|Edge)/${majorMinorRegexpString}`)], ['Chrome', new RegExp(`Chrome/${majorMinorRegexpString}`)], ['Safari', new RegExp(`Safari/${majorMinorRegexpString}`)], ['Firefox', new RegExp(`Firefox/${majorMinorRegexpString}`)], ]; const browserVersionRegexp = new RegExp(`(?:Version/${majorMinorRegexpString})`); const windowsVersionsMapping = { '0.1.0': '7', '0.2.0': '8', '0.3.0': '8.1', '10.0.0': '10', '15.0.0': '11', }; function extractUserAgentEnvironment(userAgent) { var _a, _b, _c, _d; let userAgentLegacy, userAgentObject; if (utils.types.isString(userAgent)) { userAgentLegacy = userAgent.trim(); } else { userAgentLegacy = userAgent.legacy.trim(); userAgentObject = userAgent; } const userAgentLegacyEnvironment = { ...extractUserAgentLegacyPlatform(userAgentLegacy), ...extractUserAgentLegacyBrowser(userAgentLegacy), }; const userAgentEnvironment = userAgentObject && extractUserAgentObjectEnvironment(userAgentObject); return { ...userAgentEnvironment, platformName: (_a = userAgentEnvironment === null || userAgentEnvironment === void 0 ? void 0 : userAgentEnvironment.platformName) !== null && _a !== void 0 ? _a : userAgentLegacyEnvironment.platformName, platformVersion: (_b = userAgentEnvironment === null || userAgentEnvironment === void 0 ? void 0 : userAgentEnvironment.platformVersion) !== null && _b !== void 0 ? _b : userAgentLegacyEnvironment.platformVersion, browserName: (_c = userAgentLegacyEnvironment.browserName) !== null && _c !== void 0 ? _c : userAgentEnvironment === null || userAgentEnvironment === void 0 ? void 0 : userAgentEnvironment.browserName, browserVersion: (_d = userAgentLegacyEnvironment.browserVersion) !== null && _d !== void 0 ? _d : userAgentEnvironment === null || userAgentEnvironment === void 0 ? void 0 : userAgentEnvironment.browserVersion, isReliable: !!((userAgentEnvironment === null || userAgentEnvironment === void 0 ? void 0 : userAgentEnvironment.platformName) && (userAgentEnvironment === null || userAgentEnvironment === void 0 ? void 0 : userAgentEnvironment.platformVersion)), }; } exports.extractUserAgentEnvironment = extractUserAgentEnvironment; function extractUserAgentLegacyPlatform(userAgent) { let info; for (const [platformName, regexp] of platformRegexpMapping) { const match = regexp.exec(userAgent); if (match) { info = { platformName, ...match.groups }; break; } } if (!info) return { platformName: 'Unknown' }; if (info.platformName === 'Macintosh' || info.platformName === 'Chrome OS') { info.minorVersion = undefined; } else if (info.platformName === 'Windows') { if (info.majorVersion === 'XP') { info.majorVersion = '5'; info.minorVersion = '1'; } else if (info.majorVersion === '6' && info.minorVersion === '1') { info.majorVersion = '7'; info.minorVersion = undefined; } else if (info.majorVersion === '6' && info.minorVersion === '2') { info.majorVersion = '8'; info.minorVersion = undefined; } else if (info.majorVersion === '6' && info.minorVersion === '3') { info.majorVersion = '8'; info.minorVersion = '1'; } else if (info.majorVersion === '10') { info.minorVersion = undefined; } else { info.majorVersion = undefined; info.minorVersion = undefined; } } return { platformName: info.platformName, platformVersion: info.minorVersion ? `${info.majorVersion}.${info.minorVersion}` : info.majorVersion, }; } function extractUserAgentLegacyBrowser(userAgent) { let info; for (const [browserName, browserRegexp] of browserRegexpMapping) { const browserMatch = browserRegexp.exec(userAgent); if (browserMatch) { info = { browserName, ...browserMatch.groups }; const versionMatch = browserVersionRegexp.exec(userAgent); if (versionMatch) info = { ...info, ...versionMatch.groups }; break; } } if (!info) return { browserName: 'Unknown' }; return { browserName: info.browserName, browserVersion: info.minorVersion ? `${info.majorVersion}.${info.minorVersion}` : info.majorVersion, }; } function extractUserAgentObjectEnvironment(userAgent) { var _a, _b, _c, _d, _e, _f; if (typeof userAgent.brands === 'string') { try { userAgent.brands = JSON.parse(userAgent.brands); } catch (e) { userAgent.brands = []; } } // we assume the structure of the brands array, but since it's an experimental API, we use optional chaining to stay on the safe side const chromiumBrand = (_b = (_a = userAgent.brands) === null || _a === void 0 ? void 0 : _a.find) === null || _b === void 0 ? void 0 : _b.call(_a, brand => /Chromium/i.test(brand.brand)); const browserBrand = (_e = (_d = (_c = userAgent.brands) === null || _c === void 0 ? void 0 : _c.find) === null || _d === void 0 ? void 0 : _d.call(_c, brand => brand !== chromiumBrand && !/Not.?A.?Brand/i.test(brand.brand))) !== null && _e !== void 0 ? _e : chromiumBrand; const environment = { browserName: browserBrand === null || browserBrand === void 0 ? void 0 : browserBrand.brand, browserVersion: browserBrand === null || browserBrand === void 0 ? void 0 : browserBrand.version, platformName: userAgent.platform || undefined, platformVersion: userAgent.platformVersion || undefined, deviceName: userAgent.model || undefined, isMobile: userAgent.mobile, isChromium: Boolean(chromiumBrand), }; if (environment.platformName === 'Windows') { environment.platformVersion = windowsVersionsMapping[environment.platformVersion]; } else if (environment.platformName === 'macOS') { environment.platformName = 'Mac OS X'; environment.platformVersion = (_f = environment.platformVersion) === null || _f === void 0 ? void 0 : _f.split(/[._]/, 2).join('.'); } return environment; }