UNPKG

@fpjs-incubator/broyster

Version:
86 lines (85 loc) 3.76 kB
"use strict"; 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); }