UNPKG

appium-doctor

Version:

Test environment for fitness to run Appium

129 lines (87 loc) 11.8 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; require("source-map-support/register"); var _appiumSupport = require("appium-support"); var _teen_process = require("teen_process"); var _logger = _interopRequireDefault(require("./logger")); var _path = _interopRequireDefault(require("path")); var _utils = require("./utils"); const NODE_COMMON_PATHS = [process.env.NODE_BIN, '/usr/local/bin/node', '/opt/local/bin/node']; class NodeDetector { static async retrieveInCommonPlaces() { for (let p of NODE_COMMON_PATHS) { if (p && (await _appiumSupport.fs.exists(p))) { _logger.default.debug(`Node binary found at common place: ${p}`); return p; } } _logger.default.debug('Node binary wasn\'t found at common places.'); return null; } static async retrieveUsingSystemCall() { const nodePath = await (0, _utils.resolveExecutablePath)('node'); if (!nodePath) { _logger.default.debug(`Node binary not found in PATH: ${process.env.PATH}`); return null; } _logger.default.debug(`Node binary found at: ${nodePath}`); return nodePath; } static async retrieveUsingAppleScript() { if (!_appiumSupport.system.isMac()) { _logger.default.debug('Not on Darwin, skipping Apple Script'); return null; } const appScript = ['try', ' set appiumIsRunning to false', ' tell application "System Events"', ' set appiumIsRunning to name of every process contains "Appium"', ' end tell', ' if appiumIsRunning then', ' tell application "Appium" to return node path', ' end if', 'end try', 'return "NULL"'].join('\n'); let stdout; try { stdout = (await (0, _teen_process.exec)('osascript', ['-e', appScript])).stdout; } catch (err) { _logger.default.debug(err); return null; } let nodePath = stdout.replace('\n', ''); if (await _appiumSupport.fs.exists(nodePath)) { _logger.default.debug(`Node binary found using AppleScript at: ${nodePath}`); return nodePath; } else { _logger.default.debug('Node binary not found using AppleScript.'); return null; } } static async retrieveUsingAppiumConfigFile() { let jsonobj; try { const appiumConfigPath = _path.default.resolve(__dirname, '..', '..', '.appiumconfig.json'); if (await _appiumSupport.fs.exists(appiumConfigPath)) { jsonobj = JSON.parse(await _appiumSupport.fs.readFile(appiumConfigPath, 'utf8')); } } catch (err) { _logger.default.debug(err); return null; } if (jsonobj && jsonobj.node_bin && (await _appiumSupport.fs.exists(jsonobj.node_bin))) { _logger.default.debug(`Node binary found using .appiumconfig.json at: ${jsonobj.node_bin}`); return jsonobj.node_bin; } else { _logger.default.debug('Node binary not found in the .appiumconfig.json file.'); return null; } } static async detect() { let nodePath = (await NodeDetector.retrieveUsingSystemCall()) || (await NodeDetector.retrieveInCommonPlaces()) || (await NodeDetector.retrieveUsingAppleScript()) || (await NodeDetector.retrieveUsingAppiumConfigFile()); if (nodePath) { return nodePath; } else { _logger.default.warn('The node binary could not be found.'); return null; } } } var _default = NodeDetector; exports.default = _default;require('source-map-support').install(); //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL25vZGUtZGV0ZWN0b3IuanMiLCJuYW1lcyI6WyJOT0RFX0NPTU1PTl9QQVRIUyIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0JJTiIsIk5vZGVEZXRlY3RvciIsInJldHJpZXZlSW5Db21tb25QbGFjZXMiLCJwIiwiZnMiLCJleGlzdHMiLCJsb2ciLCJkZWJ1ZyIsInJldHJpZXZlVXNpbmdTeXN0ZW1DYWxsIiwibm9kZVBhdGgiLCJyZXNvbHZlRXhlY3V0YWJsZVBhdGgiLCJQQVRIIiwicmV0cmlldmVVc2luZ0FwcGxlU2NyaXB0Iiwic3lzdGVtIiwiaXNNYWMiLCJhcHBTY3JpcHQiLCJqb2luIiwic3Rkb3V0IiwiZXhlYyIsImVyciIsInJlcGxhY2UiLCJyZXRyaWV2ZVVzaW5nQXBwaXVtQ29uZmlnRmlsZSIsImpzb25vYmoiLCJhcHBpdW1Db25maWdQYXRoIiwicGF0aCIsInJlc29sdmUiLCJfX2Rpcm5hbWUiLCJKU09OIiwicGFyc2UiLCJyZWFkRmlsZSIsIm5vZGVfYmluIiwiZGV0ZWN0Iiwid2FybiJdLCJzb3VyY2VSb290IjoiLi4vLi4iLCJzb3VyY2VzIjpbImxpYi9ub2RlLWRldGVjdG9yLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZzLCBzeXN0ZW0gfSBmcm9tICdhcHBpdW0tc3VwcG9ydCc7XG5pbXBvcnQgeyBleGVjIH0gZnJvbSAndGVlbl9wcm9jZXNzJztcbmltcG9ydCBsb2cgZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyByZXNvbHZlRXhlY3V0YWJsZVBhdGggfSBmcm9tICcuL3V0aWxzJztcblxuY29uc3QgTk9ERV9DT01NT05fUEFUSFMgPSBbXG4gIHByb2Nlc3MuZW52Lk5PREVfQklOLFxuICAnL3Vzci9sb2NhbC9iaW4vbm9kZScsXG4gICcvb3B0L2xvY2FsL2Jpbi9ub2RlJyxcbl07XG5cbi8vIExvb2sgZm9yIG5vZGVcbmNsYXNzIE5vZGVEZXRlY3RvciB7XG4gIHN0YXRpYyBhc3luYyByZXRyaWV2ZUluQ29tbW9uUGxhY2VzICgpIHtcbiAgICBmb3IgKGxldCBwIG9mIE5PREVfQ09NTU9OX1BBVEhTKSB7XG4gICAgICBpZiAocCAmJiBhd2FpdCBmcy5leGlzdHMocCkpIHtcbiAgICAgICAgbG9nLmRlYnVnKGBOb2RlIGJpbmFyeSBmb3VuZCBhdCBjb21tb24gcGxhY2U6ICR7cH1gKTtcbiAgICAgICAgcmV0dXJuIHA7XG4gICAgICB9XG4gICAgfVxuICAgIGxvZy5kZWJ1ZygnTm9kZSBiaW5hcnkgd2FzblxcJ3QgZm91bmQgYXQgY29tbW9uIHBsYWNlcy4nKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyByZXRyaWV2ZVVzaW5nU3lzdGVtQ2FsbCAoKSB7XG4gICAgY29uc3Qgbm9kZVBhdGggPSBhd2FpdCByZXNvbHZlRXhlY3V0YWJsZVBhdGgoJ25vZGUnKTtcblxuICAgIGlmICghbm9kZVBhdGgpIHtcbiAgICAgIGxvZy5kZWJ1ZyhgTm9kZSBiaW5hcnkgbm90IGZvdW5kIGluIFBBVEg6ICR7cHJvY2Vzcy5lbnYuUEFUSH1gKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGxvZy5kZWJ1ZyhgTm9kZSBiaW5hcnkgZm91bmQgYXQ6ICR7bm9kZVBhdGh9YCk7XG4gICAgcmV0dXJuIG5vZGVQYXRoO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIHJldHJpZXZlVXNpbmdBcHBsZVNjcmlwdCAoKSB7XG4gICAgaWYgKCFzeXN0ZW0uaXNNYWMoKSkge1xuICAgICAgbG9nLmRlYnVnKCdOb3Qgb24gRGFyd2luLCBza2lwcGluZyBBcHBsZSBTY3JpcHQnKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGFwcFNjcmlwdCA9IFtcbiAgICAgICd0cnknXG4gICAgICAsICcgIHNldCBhcHBpdW1Jc1J1bm5pbmcgdG8gZmFsc2UnXG4gICAgICAsICcgIHRlbGwgYXBwbGljYXRpb24gXCJTeXN0ZW0gRXZlbnRzXCInXG4gICAgICAsICcgICAgc2V0IGFwcGl1bUlzUnVubmluZyB0byBuYW1lIG9mIGV2ZXJ5IHByb2Nlc3MgY29udGFpbnMgXCJBcHBpdW1cIidcbiAgICAgICwgJyAgZW5kIHRlbGwnXG4gICAgICAsICcgIGlmIGFwcGl1bUlzUnVubmluZyB0aGVuJ1xuICAgICAgLCAnICAgIHRlbGwgYXBwbGljYXRpb24gXCJBcHBpdW1cIiB0byByZXR1cm4gbm9kZSBwYXRoJ1xuICAgICAgLCAnICBlbmQgaWYnXG4gICAgICAsICdlbmQgdHJ5J1xuICAgICAgLCAncmV0dXJuIFwiTlVMTFwiJ1xuICAgIF0uam9pbignXFxuJyk7XG4gICAgbGV0IHN0ZG91dDtcbiAgICB0cnkge1xuICAgICAgc3Rkb3V0ID0gKGF3YWl0IGV4ZWMoJ29zYXNjcmlwdCcsIFsnLWUnLCBhcHBTY3JpcHRdKSkuc3Rkb3V0O1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nLmRlYnVnKGVycik7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgbGV0IG5vZGVQYXRoID0gc3Rkb3V0LnJlcGxhY2UoJ1xcbicsICcnKTtcbiAgICBpZiAoYXdhaXQgZnMuZXhpc3RzKG5vZGVQYXRoKSkge1xuICAgICAgbG9nLmRlYnVnKGBOb2RlIGJpbmFyeSBmb3VuZCB1c2luZyBBcHBsZVNjcmlwdCBhdDogJHtub2RlUGF0aH1gKTtcbiAgICAgIHJldHVybiBub2RlUGF0aDtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nLmRlYnVnKCdOb2RlIGJpbmFyeSBub3QgZm91bmQgdXNpbmcgQXBwbGVTY3JpcHQuJyk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgcmV0cmlldmVVc2luZ0FwcGl1bUNvbmZpZ0ZpbGUgKCkge1xuICAgIGxldCBqc29ub2JqO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBhcHBpdW1Db25maWdQYXRoID0gcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJy4uJywgJy4uJywgJy5hcHBpdW1jb25maWcuanNvbicpO1xuICAgICAgaWYgKGF3YWl0IGZzLmV4aXN0cyhhcHBpdW1Db25maWdQYXRoKSkge1xuICAgICAgICBqc29ub2JqID0gSlNPTi5wYXJzZShhd2FpdCBmcy5yZWFkRmlsZShhcHBpdW1Db25maWdQYXRoLCAndXRmOCcpKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxvZy5kZWJ1ZyhlcnIpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmIChqc29ub2JqICYmIGpzb25vYmoubm9kZV9iaW4gJiYgYXdhaXQgZnMuZXhpc3RzKGpzb25vYmoubm9kZV9iaW4pKSB7XG4gICAgICBsb2cuZGVidWcoYE5vZGUgYmluYXJ5IGZvdW5kIHVzaW5nIC5hcHBpdW1jb25maWcuanNvbiBhdDogJHtqc29ub2JqLm5vZGVfYmlufWApO1xuICAgICAgcmV0dXJuIGpzb25vYmoubm9kZV9iaW47XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZy5kZWJ1ZygnTm9kZSBiaW5hcnkgbm90IGZvdW5kIGluIHRoZSAuYXBwaXVtY29uZmlnLmpzb24gZmlsZS4nKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBkZXRlY3QgKCkge1xuICAgIGxldCBub2RlUGF0aCA9IGF3YWl0IE5vZGVEZXRlY3Rvci5yZXRyaWV2ZVVzaW5nU3lzdGVtQ2FsbCgpIHx8XG4gICAgICBhd2FpdCBOb2RlRGV0ZWN0b3IucmV0cmlldmVJbkNvbW1vblBsYWNlcygpIHx8XG4gICAgICBhd2FpdCBOb2RlRGV0ZWN0b3IucmV0cmlldmVVc2luZ0FwcGxlU2NyaXB0KCkgfHxcbiAgICAgIGF3YWl0IE5vZGVEZXRlY3Rvci5yZXRyaWV2ZVVzaW5nQXBwaXVtQ29uZmlnRmlsZSgpO1xuICAgIGlmIChub2RlUGF0aCkge1xuICAgICAgcmV0dXJuIG5vZGVQYXRoO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2cud2FybignVGhlIG5vZGUgYmluYXJ5IGNvdWxkIG5vdCBiZSBmb3VuZC4nKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBOb2RlRGV0ZWN0b3I7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsaUJBQWlCLEdBQUcsQ0FDeEJDLE9BQU8sQ0FBQ0MsR0FBUixDQUFZQyxRQURZLEVBRXhCLHFCQUZ3QixFQUd4QixxQkFId0IsQ0FBMUI7O0FBT0EsTUFBTUMsWUFBTixDQUFtQjtFQUNrQixhQUF0QkMsc0JBQXNCLEdBQUk7SUFDckMsS0FBSyxJQUFJQyxDQUFULElBQWNOLGlCQUFkLEVBQWlDO01BQy9CLElBQUlNLENBQUMsS0FBSSxNQUFNQyxpQkFBQSxDQUFHQyxNQUFILENBQVVGLENBQVYsQ0FBVixDQUFMLEVBQTZCO1FBQzNCRyxlQUFBLENBQUlDLEtBQUosQ0FBVyxzQ0FBcUNKLENBQUUsRUFBbEQ7O1FBQ0EsT0FBT0EsQ0FBUDtNQUNEO0lBQ0Y7O0lBQ0RHLGVBQUEsQ0FBSUMsS0FBSixDQUFVLDZDQUFWOztJQUNBLE9BQU8sSUFBUDtFQUNEOztFQUVtQyxhQUF2QkMsdUJBQXVCLEdBQUk7SUFDdEMsTUFBTUMsUUFBUSxHQUFHLE1BQU0sSUFBQUMsNEJBQUEsRUFBc0IsTUFBdEIsQ0FBdkI7O0lBRUEsSUFBSSxDQUFDRCxRQUFMLEVBQWU7TUFDYkgsZUFBQSxDQUFJQyxLQUFKLENBQVcsa0NBQWlDVCxPQUFPLENBQUNDLEdBQVIsQ0FBWVksSUFBSyxFQUE3RDs7TUFDQSxPQUFPLElBQVA7SUFDRDs7SUFFREwsZUFBQSxDQUFJQyxLQUFKLENBQVcseUJBQXdCRSxRQUFTLEVBQTVDOztJQUNBLE9BQU9BLFFBQVA7RUFDRDs7RUFFb0MsYUFBeEJHLHdCQUF3QixHQUFJO0lBQ3ZDLElBQUksQ0FBQ0MscUJBQUEsQ0FBT0MsS0FBUCxFQUFMLEVBQXFCO01BQ25CUixlQUFBLENBQUlDLEtBQUosQ0FBVSxzQ0FBVjs7TUFDQSxPQUFPLElBQVA7SUFDRDs7SUFFRCxNQUFNUSxTQUFTLEdBQUcsQ0FDaEIsS0FEZ0IsRUFFZCxnQ0FGYyxFQUdkLG9DQUhjLEVBSWQsb0VBSmMsRUFLZCxZQUxjLEVBTWQsMkJBTmMsRUFPZCxtREFQYyxFQVFkLFVBUmMsRUFTZCxTQVRjLEVBVWQsZUFWYyxFQVdoQkMsSUFYZ0IsQ0FXWCxJQVhXLENBQWxCO0lBWUEsSUFBSUMsTUFBSjs7SUFDQSxJQUFJO01BQ0ZBLE1BQU0sR0FBRyxDQUFDLE1BQU0sSUFBQUMsa0JBQUEsRUFBSyxXQUFMLEVBQWtCLENBQUMsSUFBRCxFQUFPSCxTQUFQLENBQWxCLENBQVAsRUFBNkNFLE1BQXREO0lBQ0QsQ0FGRCxDQUVFLE9BQU9FLEdBQVAsRUFBWTtNQUNaYixlQUFBLENBQUlDLEtBQUosQ0FBVVksR0FBVjs7TUFDQSxPQUFPLElBQVA7SUFDRDs7SUFDRCxJQUFJVixRQUFRLEdBQUdRLE1BQU0sQ0FBQ0csT0FBUCxDQUFlLElBQWYsRUFBcUIsRUFBckIsQ0FBZjs7SUFDQSxJQUFJLE1BQU1oQixpQkFBQSxDQUFHQyxNQUFILENBQVVJLFFBQVYsQ0FBVixFQUErQjtNQUM3QkgsZUFBQSxDQUFJQyxLQUFKLENBQVcsMkNBQTBDRSxRQUFTLEVBQTlEOztNQUNBLE9BQU9BLFFBQVA7SUFDRCxDQUhELE1BR087TUFDTEgsZUFBQSxDQUFJQyxLQUFKLENBQVUsMENBQVY7O01BQ0EsT0FBTyxJQUFQO0lBQ0Q7RUFDRjs7RUFFeUMsYUFBN0JjLDZCQUE2QixHQUFJO0lBQzVDLElBQUlDLE9BQUo7O0lBQ0EsSUFBSTtNQUNGLE1BQU1DLGdCQUFnQixHQUFHQyxhQUFBLENBQUtDLE9BQUwsQ0FBYUMsU0FBYixFQUF3QixJQUF4QixFQUE4QixJQUE5QixFQUFvQyxvQkFBcEMsQ0FBekI7O01BQ0EsSUFBSSxNQUFNdEIsaUJBQUEsQ0FBR0MsTUFBSCxDQUFVa0IsZ0JBQVYsQ0FBVixFQUF1QztRQUNyQ0QsT0FBTyxHQUFHSyxJQUFJLENBQUNDLEtBQUwsQ0FBVyxNQUFNeEIsaUJBQUEsQ0FBR3lCLFFBQUgsQ0FBWU4sZ0JBQVosRUFBOEIsTUFBOUIsQ0FBakIsQ0FBVjtNQUNEO0lBQ0YsQ0FMRCxDQUtFLE9BQU9KLEdBQVAsRUFBWTtNQUNaYixlQUFBLENBQUlDLEtBQUosQ0FBVVksR0FBVjs7TUFDQSxPQUFPLElBQVA7SUFDRDs7SUFDRCxJQUFJRyxPQUFPLElBQUlBLE9BQU8sQ0FBQ1EsUUFBbkIsS0FBK0IsTUFBTTFCLGlCQUFBLENBQUdDLE1BQUgsQ0FBVWlCLE9BQU8sQ0FBQ1EsUUFBbEIsQ0FBckMsQ0FBSixFQUFzRTtNQUNwRXhCLGVBQUEsQ0FBSUMsS0FBSixDQUFXLGtEQUFpRGUsT0FBTyxDQUFDUSxRQUFTLEVBQTdFOztNQUNBLE9BQU9SLE9BQU8sQ0FBQ1EsUUFBZjtJQUNELENBSEQsTUFHTztNQUNMeEIsZUFBQSxDQUFJQyxLQUFKLENBQVUsdURBQVY7O01BQ0EsT0FBTyxJQUFQO0lBQ0Q7RUFDRjs7RUFFa0IsYUFBTndCLE1BQU0sR0FBSTtJQUNyQixJQUFJdEIsUUFBUSxHQUFHLE9BQU1SLFlBQVksQ0FBQ08sdUJBQWIsRUFBTixNQUNiLE1BQU1QLFlBQVksQ0FBQ0Msc0JBQWIsRUFETyxNQUViLE1BQU1ELFlBQVksQ0FBQ1csd0JBQWIsRUFGTyxNQUdiLE1BQU1YLFlBQVksQ0FBQ29CLDZCQUFiLEVBSE8sQ0FBZjs7SUFJQSxJQUFJWixRQUFKLEVBQWM7TUFDWixPQUFPQSxRQUFQO0lBQ0QsQ0FGRCxNQUVPO01BQ0xILGVBQUEsQ0FBSTBCLElBQUosQ0FBUyxxQ0FBVDs7TUFDQSxPQUFPLElBQVA7SUFDRDtFQUNGOztBQTFGZ0I7O2VBNkZKL0IsWSJ9