@fpjs-incubator/broyster
Version:
86 lines (85 loc) • 3.76 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.makeBrowserStackBrowsers = exports.BrowserStackBrowsers = void 0;
const tslib_1 = require("tslib");
const browserstack_helpers_1 = require("./browserstack_helpers");
/**
* Loads and caches the list of browsers supported by BrowserStack
*/
class BrowserStackBrowsers {
constructor(_credentials) {
this._credentials = _credentials;
}
getIOSDevices(osVersion, deviceType, browserType, realDevices, log) {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
const allBrowsers = yield this.getAllBrowsers(log);
return allBrowsers.filter((browser) => browser.os === 'ios' &&
ignoreNullExpected(doesOSVersionMatch, browser, osVersion) &&
ignoreNullExpected(doesDeviceTypeMatch, browser, deviceType) &&
ignoreNullExpected(doesIOSBrowserTypeMatch, browser, browserType) &&
ignoreNullExpected(doesRealDeviceMatch, browser, realDevices));
});
}
getAndroidDevices(osVersion, browserType, realDevices, log) {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
const allBrowsers = yield this.getAllBrowsers(log);
return allBrowsers.filter((browser) => browser.os === 'android' &&
ignoreNullExpected(doesOSVersionMatch, browser, osVersion) &&
ignoreNullExpected(doesAndroidBrowserTypeMatch, browser, browserType) &&
ignoreNullExpected(doesRealDeviceMatch, browser, realDevices));
});
}
getAllBrowsers(log) {
var _a;
return tslib_1.__awaiter(this, void 0, void 0, function* () {
(_a = this._allBrowsersPromise) !== null && _a !== void 0 ? _a : (this._allBrowsersPromise = (0, browserstack_helpers_1.getBrowsers)(this._credentials, log));
return yield this._allBrowsersPromise;
});
}
}
exports.BrowserStackBrowsers = BrowserStackBrowsers;
function makeBrowserStackBrowsers(browserStackCredentials) {
return new BrowserStackBrowsers(browserStackCredentials);
}
exports.makeBrowserStackBrowsers = makeBrowserStackBrowsers;
function doesOSVersionMatch(browser, expectedOSVersion) {
return (
// Direct match
browser.os_version === expectedOSVersion ||
// Beta version match
(browser.os_version.startsWith(expectedOSVersion) &&
/^[ \-_]beta$/i.test(browser.os_version.slice(expectedOSVersion.length))));
}
function doesDeviceTypeMatch(browser, expectedDeviceType) {
var _a;
return ((_a = browser.device) === null || _a === void 0 ? void 0 : _a.slice(0, expectedDeviceType.length).toLowerCase()) === expectedDeviceType.toLowerCase();
}
function doesRealDeviceMatch(browser, expectedRealDevice) {
return browser.real_mobile === expectedRealDevice;
}
function doesIOSBrowserTypeMatch(browser, expectedBrowserType) {
if (expectedBrowserType === 'safari') {
return browser.browser === 'iphone' || browser.browser === 'ipad';
}
else if (expectedBrowserType === 'chrome') {
// The browser name accepted by BrowserStack is "Chrome" despite returning "chromium" from /automate/browsers.json
return browser.browser === 'chromium';
}
else {
return browser.browser === expectedBrowserType;
}
}
function doesAndroidBrowserTypeMatch(browser, expectedBrowserType) {
if (expectedBrowserType === 'chrome') {
return browser.browser === 'android';
}
else {
return browser.browser === expectedBrowserType;
}
}
function ignoreNullExpected(criterion, browser, expected) {
if (expected === null) {
return true;
}
return criterion(browser, expected);
}
;