@browserstack/testcafe
Version:
Automated browser testing for the modern web development stack.
76 lines • 9.57 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const runtime_1 = require("./errors/runtime");
const types_1 = require("./errors/types");
const embedding_utils_1 = __importDefault(require("./embedding-utils"));
const exportable_lib_1 = __importDefault(require("./api/exportable-lib"));
const testcafe_configuration_1 = __importDefault(require("./configuration/testcafe-configuration"));
const option_names_1 = __importDefault(require("./configuration/option-names"));
const lazyRequire = require('import-lazy')(require);
const TestCafe = lazyRequire('./testcafe');
const endpointUtils = lazyRequire('endpoint-utils');
const setupExitHook = lazyRequire('async-exit-hook');
// Validations
async function getValidHostname(hostname) {
if (hostname) {
const valid = await endpointUtils.isMyHostname(hostname);
if (!valid)
throw new runtime_1.GeneralError(types_1.RUNTIME_ERRORS.invalidHostname, hostname);
}
else
hostname = endpointUtils.getIPAddress();
return hostname;
}
async function getValidPort(port) {
if (port) {
const isFree = await endpointUtils.isFreePort(port);
if (!isFree)
throw new runtime_1.GeneralError(types_1.RUNTIME_ERRORS.portIsNotFree, port);
}
else
port = await endpointUtils.getFreePort();
return port;
}
// API
async function getConfiguration(args) {
const configuration = new testcafe_configuration_1.default();
if (args.length === 1 && typeof args[0] === 'object')
await configuration.init(args[0]);
else {
const [hostname, port1, port2, ssl, developmentMode = false, retryTestPages] = args;
await configuration.init({
hostname,
port1,
port2,
ssl,
developmentMode,
retryTestPages
});
}
return configuration;
}
// API
async function createTestCafe(...args) {
const configuration = await getConfiguration(args);
const [hostname, port1, port2] = await Promise.all([
getValidHostname(configuration.getOption(option_names_1.default.hostname)),
getValidPort(configuration.getOption(option_names_1.default.port1)),
getValidPort(configuration.getOption(option_names_1.default.port2))
]);
configuration.mergeOptions({ hostname, port1, port2 });
const testcafe = new TestCafe(configuration);
setupExitHook(cb => testcafe.close().then(cb));
return testcafe;
}
// Embedding utils
createTestCafe.embeddingUtils = embedding_utils_1.default;
// Common API
Object.keys(exportable_lib_1.default).forEach(key => {
Object.defineProperty(createTestCafe, key, { get: () => exportable_lib_1.default[key] });
});
exports.default = createTestCafe;
module.exports = exports.default;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXguanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw4Q0FBZ0Q7QUFDaEQsMENBQWdEO0FBQ2hELHdFQUErQztBQUMvQywwRUFBaUQ7QUFDakQsb0dBQTJFO0FBQzNFLGdGQUF3RDtBQUV4RCxNQUFNLFdBQVcsR0FBSyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDdEQsTUFBTSxRQUFRLEdBQVEsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ2hELE1BQU0sYUFBYSxHQUFHLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0FBQ3BELE1BQU0sYUFBYSxHQUFHLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0FBRXJELGNBQWM7QUFDZCxLQUFLLFVBQVUsZ0JBQWdCLENBQUUsUUFBUTtJQUNyQyxJQUFJLFFBQVEsRUFBRTtRQUNWLE1BQU0sS0FBSyxHQUFHLE1BQU0sYUFBYSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUV6RCxJQUFJLENBQUMsS0FBSztZQUNOLE1BQU0sSUFBSSxzQkFBWSxDQUFDLHNCQUFjLENBQUMsZUFBZSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0tBQ3hFOztRQUVHLFFBQVEsR0FBRyxhQUFhLENBQUMsWUFBWSxFQUFFLENBQUM7SUFFNUMsT0FBTyxRQUFRLENBQUM7QUFDcEIsQ0FBQztBQUVELEtBQUssVUFBVSxZQUFZLENBQUUsSUFBSTtJQUM3QixJQUFJLElBQUksRUFBRTtRQUNOLE1BQU0sTUFBTSxHQUFHLE1BQU0sYUFBYSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVwRCxJQUFJLENBQUMsTUFBTTtZQUNQLE1BQU0sSUFBSSxzQkFBWSxDQUFDLHNCQUFjLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQ2xFOztRQUVHLElBQUksR0FBRyxNQUFNLGFBQWEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUU3QyxPQUFPLElBQUksQ0FBQztBQUNoQixDQUFDO0FBRUQsTUFBTTtBQUNOLEtBQUssVUFBVSxnQkFBZ0IsQ0FBRSxJQUFJO0lBQ2pDLE1BQU0sYUFBYSxHQUFHLElBQUksZ0NBQXFCLEVBQUUsQ0FBQztJQUVsRCxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVE7UUFDaEQsTUFBTSxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2pDO1FBQ0QsTUFBTSxDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxlQUFlLEdBQUcsS0FBSyxFQUFFLGNBQWMsQ0FBQyxHQUFHLElBQUksQ0FBQztRQUVwRixNQUFNLGFBQWEsQ0FBQyxJQUFJLENBQUM7WUFDckIsUUFBUTtZQUNSLEtBQUs7WUFDTCxLQUFLO1lBQ0wsR0FBRztZQUNILGVBQWU7WUFDZixjQUFjO1NBQ2pCLENBQUMsQ0FBQztLQUNOO0lBRUQsT0FBTyxhQUFhLENBQUM7QUFDekIsQ0FBQztBQUVELE1BQU07QUFDTixLQUFLLFVBQVUsY0FBYyxDQUFFLEdBQUcsSUFBSTtJQUNsQyxNQUFNLGFBQWEsR0FBRyxNQUFNLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBRW5ELE1BQU0sQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQztRQUMvQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLHNCQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDaEUsWUFBWSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsc0JBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6RCxZQUFZLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxzQkFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQzVELENBQUMsQ0FBQztJQUVILGFBQWEsQ0FBQyxZQUFZLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFFdkQsTUFBTSxRQUFRLEdBQUcsSUFBSSxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUM7SUFFN0MsYUFBYSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRS9DLE9BQU8sUUFBUSxDQUFDO0FBQ3BCLENBQUM7QUFFRCxrQkFBa0I7QUFDbEIsY0FBYyxDQUFDLGNBQWMsR0FBRyx5QkFBYyxDQUFDO0FBRS9DLGFBQWE7QUFDYixNQUFNLENBQUMsSUFBSSxDQUFDLHdCQUFhLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7SUFDckMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxjQUFjLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLHdCQUFhLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2xGLENBQUMsQ0FBQyxDQUFDO0FBRUgsa0JBQWUsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgR2VuZXJhbEVycm9yIH0gZnJvbSAnLi9lcnJvcnMvcnVudGltZSc7XG5pbXBvcnQgeyBSVU5USU1FX0VSUk9SUyB9IGZyb20gJy4vZXJyb3JzL3R5cGVzJztcbmltcG9ydCBlbWJlZGRpbmdVdGlscyBmcm9tICcuL2VtYmVkZGluZy11dGlscyc7XG5pbXBvcnQgZXhwb3J0YWJsZUxpYiBmcm9tICcuL2FwaS9leHBvcnRhYmxlLWxpYic7XG5pbXBvcnQgVGVzdENhZmVDb25maWd1cmF0aW9uIGZyb20gJy4vY29uZmlndXJhdGlvbi90ZXN0Y2FmZS1jb25maWd1cmF0aW9uJztcbmltcG9ydCBPUFRJT05fTkFNRVMgZnJvbSAnLi9jb25maWd1cmF0aW9uL29wdGlvbi1uYW1lcyc7XG5cbmNvbnN0IGxhenlSZXF1aXJlICAgPSByZXF1aXJlKCdpbXBvcnQtbGF6eScpKHJlcXVpcmUpO1xuY29uc3QgVGVzdENhZmUgICAgICA9IGxhenlSZXF1aXJlKCcuL3Rlc3RjYWZlJyk7XG5jb25zdCBlbmRwb2ludFV0aWxzID0gbGF6eVJlcXVpcmUoJ2VuZHBvaW50LXV0aWxzJyk7XG5jb25zdCBzZXR1cEV4aXRIb29rID0gbGF6eVJlcXVpcmUoJ2FzeW5jLWV4aXQtaG9vaycpO1xuXG4vLyBWYWxpZGF0aW9uc1xuYXN5bmMgZnVuY3Rpb24gZ2V0VmFsaWRIb3N0bmFtZSAoaG9zdG5hbWUpIHtcbiAgICBpZiAoaG9zdG5hbWUpIHtcbiAgICAgICAgY29uc3QgdmFsaWQgPSBhd2FpdCBlbmRwb2ludFV0aWxzLmlzTXlIb3N0bmFtZShob3N0bmFtZSk7XG5cbiAgICAgICAgaWYgKCF2YWxpZClcbiAgICAgICAgICAgIHRocm93IG5ldyBHZW5lcmFsRXJyb3IoUlVOVElNRV9FUlJPUlMuaW52YWxpZEhvc3RuYW1lLCBob3N0bmFtZSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICAgICAgaG9zdG5hbWUgPSBlbmRwb2ludFV0aWxzLmdldElQQWRkcmVzcygpO1xuXG4gICAgcmV0dXJuIGhvc3RuYW1lO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRWYWxpZFBvcnQgKHBvcnQpIHtcbiAgICBpZiAocG9ydCkge1xuICAgICAgICBjb25zdCBpc0ZyZWUgPSBhd2FpdCBlbmRwb2ludFV0aWxzLmlzRnJlZVBvcnQocG9ydCk7XG5cbiAgICAgICAgaWYgKCFpc0ZyZWUpXG4gICAgICAgICAgICB0aHJvdyBuZXcgR2VuZXJhbEVycm9yKFJVTlRJTUVfRVJST1JTLnBvcnRJc05vdEZyZWUsIHBvcnQpO1xuICAgIH1cbiAgICBlbHNlXG4gICAgICAgIHBvcnQgPSBhd2FpdCBlbmRwb2ludFV0aWxzLmdldEZyZWVQb3J0KCk7XG5cbiAgICByZXR1cm4gcG9ydDtcbn1cblxuLy8gQVBJXG5hc3luYyBmdW5jdGlvbiBnZXRDb25maWd1cmF0aW9uIChhcmdzKSB7XG4gICAgY29uc3QgY29uZmlndXJhdGlvbiA9IG5ldyBUZXN0Q2FmZUNvbmZpZ3VyYXRpb24oKTtcblxuICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMSAmJiB0eXBlb2YgYXJnc1swXSA9PT0gJ29iamVjdCcpXG4gICAgICAgIGF3YWl0IGNvbmZpZ3VyYXRpb24uaW5pdChhcmdzWzBdKTtcbiAgICBlbHNlIHtcbiAgICAgICAgY29uc3QgW2hvc3RuYW1lLCBwb3J0MSwgcG9ydDIsIHNzbCwgZGV2ZWxvcG1lbnRNb2RlID0gZmFsc2UsIHJldHJ5VGVzdFBhZ2VzXSA9IGFyZ3M7XG5cbiAgICAgICAgYXdhaXQgY29uZmlndXJhdGlvbi5pbml0KHtcbiAgICAgICAgICAgIGhvc3RuYW1lLFxuICAgICAgICAgICAgcG9ydDEsXG4gICAgICAgICAgICBwb3J0MixcbiAgICAgICAgICAgIHNzbCxcbiAgICAgICAgICAgIGRldmVsb3BtZW50TW9kZSxcbiAgICAgICAgICAgIHJldHJ5VGVzdFBhZ2VzXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBjb25maWd1cmF0aW9uO1xufVxuXG4vLyBBUElcbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVRlc3RDYWZlICguLi5hcmdzKSB7XG4gICAgY29uc3QgY29uZmlndXJhdGlvbiA9IGF3YWl0IGdldENvbmZpZ3VyYXRpb24oYXJncyk7XG5cbiAgICBjb25zdCBbaG9zdG5hbWUsIHBvcnQxLCBwb3J0Ml0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgIGdldFZhbGlkSG9zdG5hbWUoY29uZmlndXJhdGlvbi5nZXRPcHRpb24oT1BUSU9OX05BTUVTLmhvc3RuYW1lKSksXG4gICAgICAgIGdldFZhbGlkUG9ydChjb25maWd1cmF0aW9uLmdldE9wdGlvbihPUFRJT05fTkFNRVMucG9ydDEpKSxcbiAgICAgICAgZ2V0VmFsaWRQb3J0KGNvbmZpZ3VyYXRpb24uZ2V0T3B0aW9uKE9QVElPTl9OQU1FUy5wb3J0MikpXG4gICAgXSk7XG5cbiAgICBjb25maWd1cmF0aW9uLm1lcmdlT3B0aW9ucyh7IGhvc3RuYW1lLCBwb3J0MSwgcG9ydDIgfSk7XG5cbiAgICBjb25zdCB0ZXN0Y2FmZSA9IG5ldyBUZXN0Q2FmZShjb25maWd1cmF0aW9uKTtcblxuICAgIHNldHVwRXhpdEhvb2soY2IgPT4gdGVzdGNhZmUuY2xvc2UoKS50aGVuKGNiKSk7XG5cbiAgICByZXR1cm4gdGVzdGNhZmU7XG59XG5cbi8vIEVtYmVkZGluZyB1dGlsc1xuY3JlYXRlVGVzdENhZmUuZW1iZWRkaW5nVXRpbHMgPSBlbWJlZGRpbmdVdGlscztcblxuLy8gQ29tbW9uIEFQSVxuT2JqZWN0LmtleXMoZXhwb3J0YWJsZUxpYikuZm9yRWFjaChrZXkgPT4ge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjcmVhdGVUZXN0Q2FmZSwga2V5LCB7IGdldDogKCkgPT4gZXhwb3J0YWJsZUxpYltrZXldIH0pO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZVRlc3RDYWZlO1xuIl19