@v4fire/client
Version:
V4Fire client core library
117 lines (96 loc) • 2.46 kB
JavaScript
;
/*!
* V4Fire Client Core
* https://github.com/V4Fire/Client
*
* Released under the MIT license
* https://github.com/V4Fire/Client/blob/master/LICENSE
*/
const
arg = require('arg');
/**
* Returns a browser instance by the specified parameters
*
* @param {string} browserType
* @param {!Object} params
* @param {!Object} options
* @returns {!Promise<?>}
*/
exports.getBrowserInstance = function getBrowserInstance(browserType, params, options = {}) {
const
playwright = require('playwright');
const args = {
'--firefoxWsEndpoint': '',
'--webkitWsEndpoint': '',
'--chromiumWsEndpoint': ''
};
Object.keys(args).forEach((key) => {
try {
args[key] = arg({[key]: String}, {permissive: true})[key];
} catch {}
});
const endpointMap = {
firefox: '--firefoxWsEndpoint',
webkit: '--webkitWsEndpoint',
chromium: '--chromiumWsEndpoint'
};
if (args[endpointMap[browserType]] && !options.reInit) {
return playwright[browserType].connect({wsEndpoint: args[endpointMap[browserType]], ...params});
}
return playwright[browserType].launch({args: getBrowserArgs(), ...params});
};
/**
* Returns a list of selected browsers
* @returns {!Array<string>}
*/
exports.getSelectedBrowsers = function getSelectedBrowsers() {
const
args = arg({'--browsers': String}, {permissive: true}),
browsers = ['chromium', 'firefox', 'webkit'];
const aliases = {
ff: 'firefox',
firefox: 'firefox',
chr: 'chromium',
chrome: 'chromium',
chromium: 'chromium',
wk: 'webkit',
webkit: 'webkit'
};
if (args['--browsers']) {
const customBrowsers = args['--browsers']
.split(',')
.map((name) => aliases[name] || null)
.filter((name) => name);
if (customBrowsers.length) {
return customBrowsers;
}
}
return browsers;
};
exports.getBrowserArgs = getBrowserArgs;
/**
* Returns a list of arguments that will be provided to a browser
* @returns {!Array<string>}
*/
function getBrowserArgs() {
try {
const
args = arg({'--browser-args': String}, {permissive: true});
if (!args['--browser-args']) {
return [];
}
return args['--browser-args'].split(',').map((v) => `--${v.trim()}`);
} catch {
return [];
}
}
/**
* Generates a `--client-name` using the specified parameters
*
* @param {string=} name
* @param {string=} suit
* @returns {string}
*/
exports.getTestClientName = function getTestClientName(name, suit) {
return `${name || 'b-dummy'}_${suit || 'demo'}`;
};