appium-xcode 5.0.0 → 5.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,17 @@
1
+ ## [5.0.2](https://github.com/appium/appium-xcode/compare/v5.0.1...v5.0.2) (2023-03-27)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * Join array items properly ([#80](https://github.com/appium/appium-xcode/issues/80)) ([02f7bbf](https://github.com/appium/appium-xcode/commit/02f7bbfe7a16386094f3ec34a516a2b39a4e2fae))
7
+
8
+ ## [5.0.1](https://github.com/appium/appium-xcode/compare/v5.0.0...v5.0.1) (2023-01-17)
9
+
10
+
11
+ ### Miscellaneous Chores
12
+
13
+ * **deps-dev:** bump semantic-release from 19.0.5 to 20.0.2 ([#76](https://github.com/appium/appium-xcode/issues/76)) ([72df142](https://github.com/appium/appium-xcode/commit/72df1426d3d1d400b554fe5d4d2345ceaacd6059))
14
+
1
15
  ## [4.0.5](https://github.com/appium/appium-xcode/compare/v4.0.4...v4.0.5) (2022-12-14)
2
16
 
3
17
 
package/build/index.js CHANGED
@@ -34,11 +34,8 @@ Object.defineProperty(exports, "getVersion", {
34
34
  return _xcode.getVersion;
35
35
  }
36
36
  });
37
-
38
37
  require("source-map-support/register");
39
-
40
38
  var _xcode = require("./lib/xcode");
41
-
42
39
  const xcode = {
43
40
  getPath: _xcode.getPath,
44
41
  getVersion: _xcode.getVersion,
@@ -48,4 +45,4 @@ const xcode = {
48
45
  };
49
46
  var _default = xcode;
50
47
  exports.default = _default;
51
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ4Y29kZSIsImdldFBhdGgiLCJnZXRWZXJzaW9uIiwiZ2V0TWF4SU9TU0RLIiwiZ2V0TWF4VFZPU1NESyIsImdldENsYW5nVmVyc2lvbiJdLCJzb3VyY2VzIjpbIi4uL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIHRyYW5zcGlsZTptYWluXG5pbXBvcnQge1xuICBnZXRQYXRoLFxuICBnZXRWZXJzaW9uLFxuICBnZXRNYXhJT1NTREssXG4gIGdldE1heFRWT1NTREssXG4gIGdldENsYW5nVmVyc2lvbixcbn0gZnJvbSAnLi9saWIveGNvZGUnO1xuXG5jb25zdCB4Y29kZSA9IHtcbiAgZ2V0UGF0aCxcbiAgZ2V0VmVyc2lvbixcbiAgZ2V0TWF4SU9TU0RLLFxuICBnZXRNYXhUVk9TU0RLLFxuICBnZXRDbGFuZ1ZlcnNpb25cbn07XG5cbmV4cG9ydCB7XG4gIGdldFBhdGgsXG4gIGdldFZlcnNpb24sXG4gIGdldE1heElPU1NESyxcbiAgZ2V0TWF4VFZPU1NESyxcbiAgZ2V0Q2xhbmdWZXJzaW9uXG59O1xuZXhwb3J0IGRlZmF1bHQgeGNvZGU7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBOztBQVFBLE1BQU1BLEtBQUssR0FBRztFQUNaQyxPQUFPLEVBQVBBLGNBRFk7RUFFWkMsVUFBVSxFQUFWQSxpQkFGWTtFQUdaQyxZQUFZLEVBQVpBLG1CQUhZO0VBSVpDLGFBQWEsRUFBYkEsb0JBSlk7RUFLWkMsZUFBZSxFQUFmQTtBQUxZLENBQWQ7ZUFlZUwsSyJ9
48
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfeGNvZGUiLCJyZXF1aXJlIiwieGNvZGUiLCJnZXRQYXRoIiwiZ2V0VmVyc2lvbiIsImdldE1heElPU1NESyIsImdldE1heFRWT1NTREsiLCJnZXRDbGFuZ1ZlcnNpb24iLCJfZGVmYXVsdCIsImV4cG9ydHMiLCJkZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vaW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gdHJhbnNwaWxlOm1haW5cbmltcG9ydCB7XG4gIGdldFBhdGgsXG4gIGdldFZlcnNpb24sXG4gIGdldE1heElPU1NESyxcbiAgZ2V0TWF4VFZPU1NESyxcbiAgZ2V0Q2xhbmdWZXJzaW9uLFxufSBmcm9tICcuL2xpYi94Y29kZSc7XG5cbmNvbnN0IHhjb2RlID0ge1xuICBnZXRQYXRoLFxuICBnZXRWZXJzaW9uLFxuICBnZXRNYXhJT1NTREssXG4gIGdldE1heFRWT1NTREssXG4gIGdldENsYW5nVmVyc2lvblxufTtcblxuZXhwb3J0IHtcbiAgZ2V0UGF0aCxcbiAgZ2V0VmVyc2lvbixcbiAgZ2V0TWF4SU9TU0RLLFxuICBnZXRNYXhUVk9TU0RLLFxuICBnZXRDbGFuZ1ZlcnNpb25cbn07XG5leHBvcnQgZGVmYXVsdCB4Y29kZTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBLElBQUFBLE1BQUEsR0FBQUMsT0FBQTtBQVFBLE1BQU1DLEtBQUssR0FBRztFQUNaQyxPQUFPLEVBQVBBLGNBQU87RUFDUEMsVUFBVSxFQUFWQSxpQkFBVTtFQUNWQyxZQUFZLEVBQVpBLG1CQUFZO0VBQ1pDLGFBQWEsRUFBYkEsb0JBQWE7RUFDYkMsZUFBZSxFQUFmQTtBQUNGLENBQUM7QUFBQyxJQUFBQyxRQUFBLEdBU2FOLEtBQUs7QUFBQU8sT0FBQSxDQUFBQyxPQUFBLEdBQUFGLFFBQUEifQ==
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
@@ -9,22 +8,14 @@ exports.XCRUN_TIMEOUT = void 0;
9
8
  exports.findAppPaths = findAppPaths;
10
9
  exports.readXcodePlist = readXcodePlist;
11
10
  exports.runXcrunCommand = runXcrunCommand;
12
-
13
11
  require("source-map-support/register");
14
-
15
12
  var _lodash = _interopRequireDefault(require("lodash"));
16
-
17
13
  var _bluebird = _interopRequireDefault(require("bluebird"));
18
-
19
14
  var _teen_process = require("teen_process");
20
-
21
15
  var _support = require("@appium/support");
22
-
23
16
  var _path = _interopRequireDefault(require("path"));
24
-
25
17
  const XCRUN_TIMEOUT = 15000;
26
18
  exports.XCRUN_TIMEOUT = XCRUN_TIMEOUT;
27
-
28
19
  async function runXcrunCommand(args, timeout = XCRUN_TIMEOUT) {
29
20
  try {
30
21
  return await (0, _teen_process.exec)('xcrun', args, {
@@ -34,14 +25,11 @@ async function runXcrunCommand(args, timeout = XCRUN_TIMEOUT) {
34
25
  if (err.stderr) {
35
26
  err.message = `${err.message}: ${err.stderr}`;
36
27
  }
37
-
38
28
  throw err;
39
29
  }
40
30
  }
41
-
42
31
  async function findAppPaths(bundleId) {
43
32
  let stdout;
44
-
45
33
  try {
46
34
  ({
47
35
  stdout
@@ -49,13 +37,10 @@ async function findAppPaths(bundleId) {
49
37
  } catch (e) {
50
38
  return [];
51
39
  }
52
-
53
40
  const matchedPaths = _lodash.default.trim(stdout).split('\n').map(_lodash.default.trim).filter(Boolean);
54
-
55
41
  if (_lodash.default.isEmpty(matchedPaths)) {
56
42
  return [];
57
43
  }
58
-
59
44
  const results = matchedPaths.map(p => (async () => {
60
45
  if (await _support.fs.exists(p)) {
61
46
  return p;
@@ -63,10 +48,8 @@ async function findAppPaths(bundleId) {
63
48
  })());
64
49
  return (await _bluebird.default.all(results)).filter(Boolean);
65
50
  }
66
-
67
51
  async function readXcodePlist(developerRoot) {
68
52
  const plistPath = _path.default.resolve(developerRoot, '..', 'Info.plist');
69
-
70
53
  return (await _support.fs.exists(plistPath)) ? await _support.plist.parsePlistFile(plistPath) : {};
71
54
  }
72
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJYQ1JVTl9USU1FT1VUIiwicnVuWGNydW5Db21tYW5kIiwiYXJncyIsInRpbWVvdXQiLCJleGVjIiwiZXJyIiwic3RkZXJyIiwibWVzc2FnZSIsImZpbmRBcHBQYXRocyIsImJ1bmRsZUlkIiwic3Rkb3V0IiwiZSIsIm1hdGNoZWRQYXRocyIsIl8iLCJ0cmltIiwic3BsaXQiLCJtYXAiLCJmaWx0ZXIiLCJCb29sZWFuIiwiaXNFbXB0eSIsInJlc3VsdHMiLCJwIiwiZnMiLCJleGlzdHMiLCJCIiwiYWxsIiwicmVhZFhjb2RlUGxpc3QiLCJkZXZlbG9wZXJSb290IiwicGxpc3RQYXRoIiwicGF0aCIsInJlc29sdmUiLCJwbGlzdCIsInBhcnNlUGxpc3RGaWxlIl0sInNvdXJjZXMiOlsiLi4vLi4vbGliL2hlbHBlcnMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCB7IGV4ZWMgfSBmcm9tICd0ZWVuX3Byb2Nlc3MnO1xuaW1wb3J0IHsgZnMsIHBsaXN0IH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuXG5leHBvcnQgY29uc3QgWENSVU5fVElNRU9VVCA9IDE1MDAwO1xuXG4vKipcbiAqIEV4ZWN1dGVzICd4Y3J1bicgY29tbWFuZCBsaW5lIHV0aWxpdHlcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBhcmdzIHhjcnVuIGFyZ3VtZW50c1xuICogQHBhcmFtIHtudW1iZXJ9IHRpbWVvdXQgWzE1MDAwXSBUaGUgbWF4aW11bSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHdhaXQgdW50aWwgeGNydW4gZXhpc3RzXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxpbXBvcnQoXCJ0ZWVuX3Byb2Nlc3NcIikuRXhlY1Jlc3VsdD59IFRoZSByZXN1bHQgb2YgeGNydW4gZXhlY3V0aW9uXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgeGNydW4gcmV0dXJuZWQgbm9uLXplcm8gZXhpdCBjb2RlIG9yIHRpbWVkIG91dFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuWGNydW5Db21tYW5kIChhcmdzLCB0aW1lb3V0ID0gWENSVU5fVElNRU9VVCkge1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBleGVjKCd4Y3J1bicsIGFyZ3MsIHt0aW1lb3V0fSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIHRoZSB0cnVlIGVycm9yIGNhbiBiZSBoaWRkZW4gd2l0aGluIHRoZSBzdGRlcnJcbiAgICBpZiAoZXJyLnN0ZGVycikge1xuICAgICAgZXJyLm1lc3NhZ2UgPSBgJHtlcnIubWVzc2FnZX06ICR7ZXJyLnN0ZGVycn1gO1xuICAgIH1cblxuICAgIHRocm93IGVycjtcbiAgfVxufVxuXG4vKipcbiAqIFVzZXMgbWFjT1MgU3BvdGxpZ2h0IHNlcnZpY2UgdG8gZGV0ZWN0IHdoZXJlIHRoZSBnaXZlbiBhcHAgaXMgaW5zdGFsbGVkXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGJ1bmRsZUlkIEJ1bmRsZSBpZGVudGlmaWVyIG9mIHRoZSB0YXJnZXQgYXBwXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmdbXT59IEZ1bGwgcGF0aHMgdG8gd2hlcmUgdGhlIGFwcCB3aXRoIHRoZSBnaXZlbiBidW5kbGUgaWQgaXMgcHJlc2VudC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZpbmRBcHBQYXRocyAoYnVuZGxlSWQpIHtcbiAgbGV0IHN0ZG91dDtcbiAgdHJ5IHtcbiAgICAoe3N0ZG91dH0gPSBhd2FpdCBleGVjKCcvdXNyL2Jpbi9tZGZpbmQnLCBbXG4gICAgICBga01ESXRlbUNGQnVuZGxlSWRlbnRpZmllcj0ke2J1bmRsZUlkfWBcbiAgICBdKSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBjb25zdCBtYXRjaGVkUGF0aHMgPSBfLnRyaW0oc3Rkb3V0KVxuICAgIC5zcGxpdCgnXFxuJylcbiAgICAubWFwKF8udHJpbSlcbiAgICAuZmlsdGVyKEJvb2xlYW4pO1xuICBpZiAoXy5pc0VtcHR5KG1hdGNoZWRQYXRocykpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgY29uc3QgcmVzdWx0cyA9IG1hdGNoZWRQYXRocy5tYXAoKHApID0+IChhc3luYyAoKSA9PiB7XG4gICAgaWYgKGF3YWl0IGZzLmV4aXN0cyhwKSkge1xuICAgICAgcmV0dXJuIHA7XG4gICAgfVxuICB9KSgpKTtcbiAgcmV0dXJuIChhd2FpdCBCLmFsbChyZXN1bHRzKSkuZmlsdGVyKEJvb2xlYW4pO1xufVxuXG4vKipcbiAqIEZpbmRzIGFuZCByZXRyaWV2ZXMgdGhlIGNvbnRlbnQgb2YgdGhlIFhjb2RlJ3MgSW5mby5wbGlzdCBmaWxlXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGRldmVsb3BlclJvb3QgRnVsbCBwYXRoIHRvIHRoZSBDb250ZW50cy9EZXZlbG9wZXIgZm9sZGVyIHVuZGVyIFhjb2RlLmFwcCByb290XG4gKiBAcmV0dXJucyB7UHJvbWlzZTxvYmplY3Q+fSBBbGwgcGxpc3QgZW50cmllcyBhcyBhbiBvYmplY3Qgb3IgYW4gZW1wdHkgb2JqZWN0IGlmIG5vIHBsaXN0IHdhcyBmb3VuZFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZFhjb2RlUGxpc3QgKGRldmVsb3BlclJvb3QpIHtcbiAgY29uc3QgcGxpc3RQYXRoID0gcGF0aC5yZXNvbHZlKGRldmVsb3BlclJvb3QsICcuLicsICdJbmZvLnBsaXN0Jyk7XG4gIHJldHVybiBhd2FpdCBmcy5leGlzdHMocGxpc3RQYXRoKVxuICAgID8gYXdhaXQgcGxpc3QucGFyc2VQbGlzdEZpbGUocGxpc3RQYXRoKVxuICAgIDoge307XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRU8sTUFBTUEsYUFBYSxHQUFHLEtBQXRCOzs7QUFVQSxlQUFlQyxlQUFmLENBQWdDQyxJQUFoQyxFQUFzQ0MsT0FBTyxHQUFHSCxhQUFoRCxFQUErRDtFQUNwRSxJQUFJO0lBQ0YsT0FBTyxNQUFNLElBQUFJLGtCQUFBLEVBQUssT0FBTCxFQUFjRixJQUFkLEVBQW9CO01BQUNDO0lBQUQsQ0FBcEIsQ0FBYjtFQUNELENBRkQsQ0FFRSxPQUFPRSxHQUFQLEVBQVk7SUFFWixJQUFJQSxHQUFHLENBQUNDLE1BQVIsRUFBZ0I7TUFDZEQsR0FBRyxDQUFDRSxPQUFKLEdBQWUsR0FBRUYsR0FBRyxDQUFDRSxPQUFRLEtBQUlGLEdBQUcsQ0FBQ0MsTUFBTyxFQUE1QztJQUNEOztJQUVELE1BQU1ELEdBQU47RUFDRDtBQUNGOztBQVFNLGVBQWVHLFlBQWYsQ0FBNkJDLFFBQTdCLEVBQXVDO0VBQzVDLElBQUlDLE1BQUo7O0VBQ0EsSUFBSTtJQUNGLENBQUM7TUFBQ0E7SUFBRCxJQUFXLE1BQU0sSUFBQU4sa0JBQUEsRUFBSyxpQkFBTCxFQUF3QixDQUN2Qyw2QkFBNEJLLFFBQVMsRUFERSxDQUF4QixDQUFsQjtFQUdELENBSkQsQ0FJRSxPQUFPRSxDQUFQLEVBQVU7SUFDVixPQUFPLEVBQVA7RUFDRDs7RUFFRCxNQUFNQyxZQUFZLEdBQUdDLGVBQUEsQ0FBRUMsSUFBRixDQUFPSixNQUFQLEVBQ2xCSyxLQURrQixDQUNaLElBRFksRUFFbEJDLEdBRmtCLENBRWRILGVBQUEsQ0FBRUMsSUFGWSxFQUdsQkcsTUFIa0IsQ0FHWEMsT0FIVyxDQUFyQjs7RUFJQSxJQUFJTCxlQUFBLENBQUVNLE9BQUYsQ0FBVVAsWUFBVixDQUFKLEVBQTZCO0lBQzNCLE9BQU8sRUFBUDtFQUNEOztFQUNELE1BQU1RLE9BQU8sR0FBR1IsWUFBWSxDQUFDSSxHQUFiLENBQWtCSyxDQUFELElBQU8sQ0FBQyxZQUFZO0lBQ25ELElBQUksTUFBTUMsV0FBQSxDQUFHQyxNQUFILENBQVVGLENBQVYsQ0FBVixFQUF3QjtNQUN0QixPQUFPQSxDQUFQO0lBQ0Q7RUFDRixDQUp1QyxHQUF4QixDQUFoQjtFQUtBLE9BQU8sQ0FBQyxNQUFNRyxpQkFBQSxDQUFFQyxHQUFGLENBQU1MLE9BQU4sQ0FBUCxFQUF1QkgsTUFBdkIsQ0FBOEJDLE9BQTlCLENBQVA7QUFDRDs7QUFRTSxlQUFlUSxjQUFmLENBQStCQyxhQUEvQixFQUE4QztFQUNuRCxNQUFNQyxTQUFTLEdBQUdDLGFBQUEsQ0FBS0MsT0FBTCxDQUFhSCxhQUFiLEVBQTRCLElBQTVCLEVBQWtDLFlBQWxDLENBQWxCOztFQUNBLE9BQU8sT0FBTUwsV0FBQSxDQUFHQyxNQUFILENBQVVLLFNBQVYsQ0FBTixJQUNILE1BQU1HLGNBQUEsQ0FBTUMsY0FBTixDQUFxQkosU0FBckIsQ0FESCxHQUVILEVBRko7QUFHRCJ9
55
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfYmx1ZWJpcmQiLCJfdGVlbl9wcm9jZXNzIiwiX3N1cHBvcnQiLCJfcGF0aCIsIlhDUlVOX1RJTUVPVVQiLCJleHBvcnRzIiwicnVuWGNydW5Db21tYW5kIiwiYXJncyIsInRpbWVvdXQiLCJleGVjIiwiZXJyIiwic3RkZXJyIiwibWVzc2FnZSIsImZpbmRBcHBQYXRocyIsImJ1bmRsZUlkIiwic3Rkb3V0IiwiZSIsIm1hdGNoZWRQYXRocyIsIl8iLCJ0cmltIiwic3BsaXQiLCJtYXAiLCJmaWx0ZXIiLCJCb29sZWFuIiwiaXNFbXB0eSIsInJlc3VsdHMiLCJwIiwiZnMiLCJleGlzdHMiLCJCIiwiYWxsIiwicmVhZFhjb2RlUGxpc3QiLCJkZXZlbG9wZXJSb290IiwicGxpc3RQYXRoIiwicGF0aCIsInJlc29sdmUiLCJwbGlzdCIsInBhcnNlUGxpc3RGaWxlIl0sInNvdXJjZXMiOlsiLi4vLi4vbGliL2hlbHBlcnMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCB7IGV4ZWMgfSBmcm9tICd0ZWVuX3Byb2Nlc3MnO1xuaW1wb3J0IHsgZnMsIHBsaXN0IH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuXG5leHBvcnQgY29uc3QgWENSVU5fVElNRU9VVCA9IDE1MDAwO1xuXG4vKipcbiAqIEV4ZWN1dGVzICd4Y3J1bicgY29tbWFuZCBsaW5lIHV0aWxpdHlcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBhcmdzIHhjcnVuIGFyZ3VtZW50c1xuICogQHBhcmFtIHtudW1iZXJ9IHRpbWVvdXQgWzE1MDAwXSBUaGUgbWF4aW11bSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHdhaXQgdW50aWwgeGNydW4gZXhpc3RzXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxpbXBvcnQoXCJ0ZWVuX3Byb2Nlc3NcIikuRXhlY1Jlc3VsdD59IFRoZSByZXN1bHQgb2YgeGNydW4gZXhlY3V0aW9uXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgeGNydW4gcmV0dXJuZWQgbm9uLXplcm8gZXhpdCBjb2RlIG9yIHRpbWVkIG91dFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuWGNydW5Db21tYW5kIChhcmdzLCB0aW1lb3V0ID0gWENSVU5fVElNRU9VVCkge1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBleGVjKCd4Y3J1bicsIGFyZ3MsIHt0aW1lb3V0fSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIHRoZSB0cnVlIGVycm9yIGNhbiBiZSBoaWRkZW4gd2l0aGluIHRoZSBzdGRlcnJcbiAgICBpZiAoZXJyLnN0ZGVycikge1xuICAgICAgZXJyLm1lc3NhZ2UgPSBgJHtlcnIubWVzc2FnZX06ICR7ZXJyLnN0ZGVycn1gO1xuICAgIH1cblxuICAgIHRocm93IGVycjtcbiAgfVxufVxuXG4vKipcbiAqIFVzZXMgbWFjT1MgU3BvdGxpZ2h0IHNlcnZpY2UgdG8gZGV0ZWN0IHdoZXJlIHRoZSBnaXZlbiBhcHAgaXMgaW5zdGFsbGVkXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGJ1bmRsZUlkIEJ1bmRsZSBpZGVudGlmaWVyIG9mIHRoZSB0YXJnZXQgYXBwXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmdbXT59IEZ1bGwgcGF0aHMgdG8gd2hlcmUgdGhlIGFwcCB3aXRoIHRoZSBnaXZlbiBidW5kbGUgaWQgaXMgcHJlc2VudC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZpbmRBcHBQYXRocyAoYnVuZGxlSWQpIHtcbiAgbGV0IHN0ZG91dDtcbiAgdHJ5IHtcbiAgICAoe3N0ZG91dH0gPSBhd2FpdCBleGVjKCcvdXNyL2Jpbi9tZGZpbmQnLCBbXG4gICAgICBga01ESXRlbUNGQnVuZGxlSWRlbnRpZmllcj0ke2J1bmRsZUlkfWBcbiAgICBdKSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBjb25zdCBtYXRjaGVkUGF0aHMgPSBfLnRyaW0oc3Rkb3V0KVxuICAgIC5zcGxpdCgnXFxuJylcbiAgICAubWFwKF8udHJpbSlcbiAgICAuZmlsdGVyKEJvb2xlYW4pO1xuICBpZiAoXy5pc0VtcHR5KG1hdGNoZWRQYXRocykpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgY29uc3QgcmVzdWx0cyA9IG1hdGNoZWRQYXRocy5tYXAoKHApID0+IChhc3luYyAoKSA9PiB7XG4gICAgaWYgKGF3YWl0IGZzLmV4aXN0cyhwKSkge1xuICAgICAgcmV0dXJuIHA7XG4gICAgfVxuICB9KSgpKTtcbiAgcmV0dXJuIChhd2FpdCBCLmFsbChyZXN1bHRzKSkuZmlsdGVyKEJvb2xlYW4pO1xufVxuXG4vKipcbiAqIEZpbmRzIGFuZCByZXRyaWV2ZXMgdGhlIGNvbnRlbnQgb2YgdGhlIFhjb2RlJ3MgSW5mby5wbGlzdCBmaWxlXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGRldmVsb3BlclJvb3QgRnVsbCBwYXRoIHRvIHRoZSBDb250ZW50cy9EZXZlbG9wZXIgZm9sZGVyIHVuZGVyIFhjb2RlLmFwcCByb290XG4gKiBAcmV0dXJucyB7UHJvbWlzZTxvYmplY3Q+fSBBbGwgcGxpc3QgZW50cmllcyBhcyBhbiBvYmplY3Qgb3IgYW4gZW1wdHkgb2JqZWN0IGlmIG5vIHBsaXN0IHdhcyBmb3VuZFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZFhjb2RlUGxpc3QgKGRldmVsb3BlclJvb3QpIHtcbiAgY29uc3QgcGxpc3RQYXRoID0gcGF0aC5yZXNvbHZlKGRldmVsb3BlclJvb3QsICcuLicsICdJbmZvLnBsaXN0Jyk7XG4gIHJldHVybiBhd2FpdCBmcy5leGlzdHMocGxpc3RQYXRoKVxuICAgID8gYXdhaXQgcGxpc3QucGFyc2VQbGlzdEZpbGUocGxpc3RQYXRoKVxuICAgIDoge307XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUEsSUFBQUEsT0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsU0FBQSxHQUFBRixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUUsYUFBQSxHQUFBRixPQUFBO0FBQ0EsSUFBQUcsUUFBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUksS0FBQSxHQUFBTCxzQkFBQSxDQUFBQyxPQUFBO0FBRU8sTUFBTUssYUFBYSxHQUFHLEtBQUs7QUFBQ0MsT0FBQSxDQUFBRCxhQUFBLEdBQUFBLGFBQUE7QUFVNUIsZUFBZUUsZUFBZUEsQ0FBRUMsSUFBSSxFQUFFQyxPQUFPLEdBQUdKLGFBQWEsRUFBRTtFQUNwRSxJQUFJO0lBQ0YsT0FBTyxNQUFNLElBQUFLLGtCQUFJLEVBQUMsT0FBTyxFQUFFRixJQUFJLEVBQUU7TUFBQ0M7SUFBTyxDQUFDLENBQUM7RUFDN0MsQ0FBQyxDQUFDLE9BQU9FLEdBQUcsRUFBRTtJQUVaLElBQUlBLEdBQUcsQ0FBQ0MsTUFBTSxFQUFFO01BQ2RELEdBQUcsQ0FBQ0UsT0FBTyxHQUFJLEdBQUVGLEdBQUcsQ0FBQ0UsT0FBUSxLQUFJRixHQUFHLENBQUNDLE1BQU8sRUFBQztJQUMvQztJQUVBLE1BQU1ELEdBQUc7RUFDWDtBQUNGO0FBUU8sZUFBZUcsWUFBWUEsQ0FBRUMsUUFBUSxFQUFFO0VBQzVDLElBQUlDLE1BQU07RUFDVixJQUFJO0lBQ0YsQ0FBQztNQUFDQTtJQUFNLENBQUMsR0FBRyxNQUFNLElBQUFOLGtCQUFJLEVBQUMsaUJBQWlCLEVBQUUsQ0FDdkMsNkJBQTRCSyxRQUFTLEVBQUMsQ0FDeEMsQ0FBQztFQUNKLENBQUMsQ0FBQyxPQUFPRSxDQUFDLEVBQUU7SUFDVixPQUFPLEVBQUU7RUFDWDtFQUVBLE1BQU1DLFlBQVksR0FBR0MsZUFBQyxDQUFDQyxJQUFJLENBQUNKLE1BQU0sQ0FBQyxDQUNoQ0ssS0FBSyxDQUFDLElBQUksQ0FBQyxDQUNYQyxHQUFHLENBQUNILGVBQUMsQ0FBQ0MsSUFBSSxDQUFDLENBQ1hHLE1BQU0sQ0FBQ0MsT0FBTyxDQUFDO0VBQ2xCLElBQUlMLGVBQUMsQ0FBQ00sT0FBTyxDQUFDUCxZQUFZLENBQUMsRUFBRTtJQUMzQixPQUFPLEVBQUU7RUFDWDtFQUNBLE1BQU1RLE9BQU8sR0FBR1IsWUFBWSxDQUFDSSxHQUFHLENBQUVLLENBQUMsSUFBSyxDQUFDLFlBQVk7SUFDbkQsSUFBSSxNQUFNQyxXQUFFLENBQUNDLE1BQU0sQ0FBQ0YsQ0FBQyxDQUFDLEVBQUU7TUFDdEIsT0FBT0EsQ0FBQztJQUNWO0VBQ0YsQ0FBQyxHQUFHLENBQUM7RUFDTCxPQUFPLENBQUMsTUFBTUcsaUJBQUMsQ0FBQ0MsR0FBRyxDQUFDTCxPQUFPLENBQUMsRUFBRUgsTUFBTSxDQUFDQyxPQUFPLENBQUM7QUFDL0M7QUFRTyxlQUFlUSxjQUFjQSxDQUFFQyxhQUFhLEVBQUU7RUFDbkQsTUFBTUMsU0FBUyxHQUFHQyxhQUFJLENBQUNDLE9BQU8sQ0FBQ0gsYUFBYSxFQUFFLElBQUksRUFBRSxZQUFZLENBQUM7RUFDakUsT0FBTyxPQUFNTCxXQUFFLENBQUNDLE1BQU0sQ0FBQ0ssU0FBUyxDQUFDLElBQzdCLE1BQU1HLGNBQUssQ0FBQ0MsY0FBYyxDQUFDSixTQUFTLENBQUMsR0FDckMsQ0FBQyxDQUFDO0FBQ1IifQ==
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","names":["_lodash","_interopRequireDefault","require","_bluebird","_teen_process","_support","_path","XCRUN_TIMEOUT","exports","runXcrunCommand","args","timeout","exec","err","stderr","message","findAppPaths","bundleId","stdout","e","matchedPaths","_","trim","split","map","filter","Boolean","isEmpty","results","p","fs","exists","B","all","readXcodePlist","developerRoot","plistPath","path","resolve","plist","parsePlistFile"],"sources":["../../lib/helpers.js"],"sourcesContent":["import _ from 'lodash';\nimport B from 'bluebird';\nimport { exec } from 'teen_process';\nimport { fs, plist } from '@appium/support';\nimport path from 'path';\n\nexport const XCRUN_TIMEOUT = 15000;\n\n/**\n * Executes 'xcrun' command line utility\n *\n * @param {string[]} args xcrun arguments\n * @param {number} timeout [15000] The maximum number of milliseconds to wait until xcrun exists\n * @returns {Promise<import(\"teen_process\").ExecResult>} The result of xcrun execution\n * @throws {Error} If xcrun returned non-zero exit code or timed out\n */\nexport async function runXcrunCommand (args, timeout = XCRUN_TIMEOUT) {\n try {\n return await exec('xcrun', args, {timeout});\n } catch (err) {\n // the true error can be hidden within the stderr\n if (err.stderr) {\n err.message = `${err.message}: ${err.stderr}`;\n }\n\n throw err;\n }\n}\n\n/**\n * Uses macOS Spotlight service to detect where the given app is installed\n *\n * @param {string} bundleId Bundle identifier of the target app\n * @returns {Promise<string[]>} Full paths to where the app with the given bundle id is present.\n */\nexport async function findAppPaths (bundleId) {\n let stdout;\n try {\n ({stdout} = await exec('/usr/bin/mdfind', [\n `kMDItemCFBundleIdentifier=${bundleId}`\n ]));\n } catch (e) {\n return [];\n }\n\n const matchedPaths = _.trim(stdout)\n .split('\\n')\n .map(_.trim)\n .filter(Boolean);\n if (_.isEmpty(matchedPaths)) {\n return [];\n }\n const results = matchedPaths.map((p) => (async () => {\n if (await fs.exists(p)) {\n return p;\n }\n })());\n return (await B.all(results)).filter(Boolean);\n}\n\n/**\n * Finds and retrieves the content of the Xcode's Info.plist file\n *\n * @param {string} developerRoot Full path to the Contents/Developer folder under Xcode.app root\n * @returns {Promise<object>} All plist entries as an object or an empty object if no plist was found\n */\nexport async function readXcodePlist (developerRoot) {\n const plistPath = path.resolve(developerRoot, '..', 'Info.plist');\n return await fs.exists(plistPath)\n ? await plist.parsePlistFile(plistPath)\n : {};\n}\n"],"mappings":";;;;;;;;;;;AAAA,IAAAA,OAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,SAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,aAAA,GAAAF,OAAA;AACA,IAAAG,QAAA,GAAAH,OAAA;AACA,IAAAI,KAAA,GAAAL,sBAAA,CAAAC,OAAA;AAEO,MAAMK,aAAa,GAAG,KAAK;AAACC,OAAA,CAAAD,aAAA,GAAAA,aAAA;AAU5B,eAAeE,eAAeA,CAAEC,IAAI,EAAEC,OAAO,GAAGJ,aAAa,EAAE;EACpE,IAAI;IACF,OAAO,MAAM,IAAAK,kBAAI,EAAC,OAAO,EAAEF,IAAI,EAAE;MAACC;IAAO,CAAC,CAAC;EAC7C,CAAC,CAAC,OAAOE,GAAG,EAAE;IAEZ,IAAIA,GAAG,CAACC,MAAM,EAAE;MACdD,GAAG,CAACE,OAAO,GAAI,GAAEF,GAAG,CAACE,OAAQ,KAAIF,GAAG,CAACC,MAAO,EAAC;IAC/C;IAEA,MAAMD,GAAG;EACX;AACF;AAQO,eAAeG,YAAYA,CAAEC,QAAQ,EAAE;EAC5C,IAAIC,MAAM;EACV,IAAI;IACF,CAAC;MAACA;IAAM,CAAC,GAAG,MAAM,IAAAN,kBAAI,EAAC,iBAAiB,EAAE,CACvC,6BAA4BK,QAAS,EAAC,CACxC,CAAC;EACJ,CAAC,CAAC,OAAOE,CAAC,EAAE;IACV,OAAO,EAAE;EACX;EAEA,MAAMC,YAAY,GAAGC,eAAC,CAACC,IAAI,CAACJ,MAAM,CAAC,CAChCK,KAAK,CAAC,IAAI,CAAC,CACXC,GAAG,CAACH,eAAC,CAACC,IAAI,CAAC,CACXG,MAAM,CAACC,OAAO,CAAC;EAClB,IAAIL,eAAC,CAACM,OAAO,CAACP,YAAY,CAAC,EAAE;IAC3B,OAAO,EAAE;EACX;EACA,MAAMQ,OAAO,GAAGR,YAAY,CAACI,GAAG,CAAEK,CAAC,IAAK,CAAC,YAAY;IACnD,IAAI,MAAMC,WAAE,CAACC,MAAM,CAACF,CAAC,CAAC,EAAE;MACtB,OAAOA,CAAC;IACV;EACF,CAAC,GAAG,CAAC;EACL,OAAO,CAAC,MAAMG,iBAAC,CAACC,GAAG,CAACL,OAAO,CAAC,EAAEH,MAAM,CAACC,OAAO,CAAC;AAC/C;AAQO,eAAeQ,cAAcA,CAAEC,aAAa,EAAE;EACnD,MAAMC,SAAS,GAAGC,aAAI,CAACC,OAAO,CAACH,aAAa,EAAE,IAAI,EAAE,YAAY,CAAC;EACjE,OAAO,OAAML,WAAE,CAACC,MAAM,CAACK,SAAS,CAAC,IAC7B,MAAMG,cAAK,CAACC,cAAc,CAACJ,SAAS,CAAC,GACrC,CAAC,CAAC;AACR"}
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
@@ -14,42 +13,27 @@ exports.getPath = void 0;
14
13
  exports.getPathFromDeveloperDir = getPathFromDeveloperDir;
15
14
  exports.getPathFromXcodeSelect = getPathFromXcodeSelect;
16
15
  exports.getVersion = getVersion;
17
-
18
16
  require("source-map-support/register");
19
-
20
17
  var _support = require("@appium/support");
21
-
22
18
  var _path = _interopRequireDefault(require("path"));
23
-
24
19
  var _asyncbox = require("asyncbox");
25
-
26
20
  var _lodash = _interopRequireDefault(require("lodash"));
27
-
28
21
  var _teen_process = require("teen_process");
29
-
30
22
  var _semver = _interopRequireDefault(require("semver"));
31
-
32
23
  var _helpers = require("./helpers");
33
-
34
24
  const DEFAULT_NUMBER_OF_RETRIES = 2;
35
25
  const XCODE_BUNDLE_ID = 'com.apple.dt.Xcode';
36
-
37
26
  const log = _support.logger.getLogger('Xcode');
38
-
39
27
  async function getPathFromXcodeSelect(timeout = _helpers.XCRUN_TIMEOUT) {
40
28
  const generateErrorMessage = async prefix => {
41
29
  const xcodePaths = await (0, _helpers.findAppPaths)(XCODE_BUNDLE_ID);
42
-
43
30
  if (_lodash.default.isEmpty(xcodePaths)) {
44
31
  return `${prefix}. Consider installing Xcode to address this issue.`;
45
32
  }
46
-
47
33
  const proposals = xcodePaths.map(p => ` sudo xcode-select -s "${_path.default.join(p, 'Contents', 'Developer')}"`);
48
- return `${prefix}. ` + `Consider running${proposals.length > 1 ? ' any of' : ''}:\n${'\n'.join(proposals)}\nto address this issue.`;
34
+ return `${prefix}. ` + `Consider running${proposals.length > 1 ? ' any of' : ''}:\n${proposals.join('\n')}\nto address this issue.`;
49
35
  };
50
-
51
36
  let stdout;
52
-
53
37
  try {
54
38
  ({
55
39
  stdout
@@ -59,43 +43,32 @@ async function getPathFromXcodeSelect(timeout = _helpers.XCRUN_TIMEOUT) {
59
43
  } catch (e) {
60
44
  log.errorAndThrow(`Cannot determine the path to Xcode by running 'xcode-select -p' command. ` + `Original error: ${e.stderr || e.message}`);
61
45
  }
62
-
63
46
  const developerRoot = stdout.replace(/\/$/, '').trim();
64
-
65
47
  if (!developerRoot) {
66
48
  log.errorAndThrow(await generateErrorMessage(`'xcode-select -p' returned an empty string`));
67
49
  }
68
-
69
50
  const {
70
51
  CFBundleIdentifier
71
52
  } = await (0, _helpers.readXcodePlist)(developerRoot);
72
-
73
53
  if (CFBundleIdentifier === XCODE_BUNDLE_ID) {
74
54
  return developerRoot;
75
55
  }
76
-
77
56
  log.errorAndThrow(await generateErrorMessage(`'${developerRoot}' is not a valid Xcode path`));
78
57
  }
79
-
80
58
  async function getPathFromDeveloperDir() {
81
59
  const developerRoot = process.env.DEVELOPER_DIR;
82
60
  const {
83
61
  CFBundleIdentifier
84
62
  } = await (0, _helpers.readXcodePlist)(developerRoot);
85
-
86
63
  if (CFBundleIdentifier === XCODE_BUNDLE_ID) {
87
64
  return developerRoot;
88
65
  }
89
-
90
66
  log.errorAndThrow(`The path to Xcode Developer dir '${developerRoot}' provided in DEVELOPER_DIR ` + `environment variable is not a valid path`);
91
67
  }
92
-
93
68
  const getPath = _lodash.default.memoize(function getPath(timeout = _helpers.XCRUN_TIMEOUT) {
94
69
  return process.env.DEVELOPER_DIR ? getPathFromDeveloperDir() : getPathFromXcodeSelect(timeout);
95
70
  });
96
-
97
71
  exports.getPath = getPath;
98
-
99
72
  async function getVersionWithoutRetry(timeout = _helpers.XCRUN_TIMEOUT) {
100
73
  const developerPath = await getPath(timeout);
101
74
  const {
@@ -103,33 +76,26 @@ async function getVersionWithoutRetry(timeout = _helpers.XCRUN_TIMEOUT) {
103
76
  } = await (0, _helpers.readXcodePlist)(developerPath);
104
77
  return _semver.default.coerce(CFBundleShortVersionString);
105
78
  }
106
-
107
79
  const getVersionMemoized = _lodash.default.memoize(function getVersionMemoized(retries = DEFAULT_NUMBER_OF_RETRIES, timeout = _helpers.XCRUN_TIMEOUT) {
108
80
  return (0, _asyncbox.retry)(retries, getVersionWithoutRetry, timeout);
109
81
  });
110
-
111
82
  async function getVersion(parse = false, retries = DEFAULT_NUMBER_OF_RETRIES, timeout = _helpers.XCRUN_TIMEOUT) {
112
83
  const version = await getVersionMemoized(retries, timeout);
113
84
  const versionString = version.patch > 0 ? version.version : `${version.major}.${version.minor}`;
114
-
115
85
  if (!parse) {
116
86
  return versionString;
117
87
  }
118
-
119
88
  return {
120
89
  versionString,
121
90
  versionFloat: parseFloat(versionString),
122
91
  major: version.major,
123
92
  minor: version.minor,
124
93
  patch: version.patch > 0 ? version.patch : undefined,
125
-
126
94
  toString() {
127
95
  return versionString;
128
96
  }
129
-
130
97
  };
131
98
  }
132
-
133
99
  async function getClangVersion() {
134
100
  try {
135
101
  await _support.fs.which('clang');
@@ -137,20 +103,16 @@ async function getClangVersion() {
137
103
  log.info('Cannot find clang executable on the local system. ' + 'Are Xcode Command Line Tools installed?');
138
104
  return null;
139
105
  }
140
-
141
106
  const {
142
107
  stdout
143
108
  } = await (0, _teen_process.exec)('clang', ['--version']);
144
109
  const match = /clang-([0-9.]+)/.exec(stdout);
145
-
146
110
  if (!match) {
147
111
  log.info(`Cannot parse clang version from ${stdout}`);
148
112
  return null;
149
113
  }
150
-
151
114
  return match[1];
152
115
  }
153
-
154
116
  async function getMaxIOSSDKWithoutRetry(timeout = _helpers.XCRUN_TIMEOUT) {
155
117
  const args = ['--sdk', 'iphonesimulator', '--show-sdk-version'];
156
118
  const {
@@ -158,37 +120,28 @@ async function getMaxIOSSDKWithoutRetry(timeout = _helpers.XCRUN_TIMEOUT) {
158
120
  } = await (0, _helpers.runXcrunCommand)(args, timeout);
159
121
  const sdkVersion = stdout.trim();
160
122
  const match = /\d.\d/.exec(stdout);
161
-
162
123
  if (!match) {
163
124
  throw new Error(`xcrun returned a non-numeric iOS SDK version: '${sdkVersion}'`);
164
125
  }
165
-
166
126
  return sdkVersion;
167
127
  }
168
-
169
128
  const getMaxIOSSDK = _lodash.default.memoize(function getMaxIOSSDK(retries = DEFAULT_NUMBER_OF_RETRIES, timeout = _helpers.XCRUN_TIMEOUT) {
170
129
  return (0, _asyncbox.retry)(retries, getMaxIOSSDKWithoutRetry, timeout);
171
130
  });
172
-
173
131
  exports.getMaxIOSSDK = getMaxIOSSDK;
174
-
175
132
  async function getMaxTVOSSDKWithoutRetry(timeout = _helpers.XCRUN_TIMEOUT) {
176
133
  const args = ['--sdk', 'appletvsimulator', '--show-sdk-version'];
177
134
  const {
178
135
  stdout
179
136
  } = await (0, _helpers.runXcrunCommand)(args, timeout);
180
137
  const sdkVersion = stdout.trim();
181
-
182
138
  if (isNaN(parseFloat(sdkVersion))) {
183
139
  throw new Error(`xcrun returned a non-numeric tvOS SDK version: '${sdkVersion}'`);
184
140
  }
185
-
186
141
  return sdkVersion;
187
142
  }
188
-
189
143
  const getMaxTVOSSDK = _lodash.default.memoize(function getMaxTVOSSDK(retries = DEFAULT_NUMBER_OF_RETRIES, timeout = _helpers.XCRUN_TIMEOUT) {
190
144
  return (0, _asyncbox.retry)(retries, getMaxTVOSSDKWithoutRetry, timeout);
191
145
  });
192
-
193
146
  exports.getMaxTVOSSDK = getMaxTVOSSDK;
194
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJERUZBVUxUX05VTUJFUl9PRl9SRVRSSUVTIiwiWENPREVfQlVORExFX0lEIiwibG9nIiwibG9nZ2VyIiwiZ2V0TG9nZ2VyIiwiZ2V0UGF0aEZyb21YY29kZVNlbGVjdCIsInRpbWVvdXQiLCJYQ1JVTl9USU1FT1VUIiwiZ2VuZXJhdGVFcnJvck1lc3NhZ2UiLCJwcmVmaXgiLCJ4Y29kZVBhdGhzIiwiZmluZEFwcFBhdGhzIiwiXyIsImlzRW1wdHkiLCJwcm9wb3NhbHMiLCJtYXAiLCJwIiwicGF0aCIsImpvaW4iLCJsZW5ndGgiLCJzdGRvdXQiLCJleGVjIiwiZSIsImVycm9yQW5kVGhyb3ciLCJzdGRlcnIiLCJtZXNzYWdlIiwiZGV2ZWxvcGVyUm9vdCIsInJlcGxhY2UiLCJ0cmltIiwiQ0ZCdW5kbGVJZGVudGlmaWVyIiwicmVhZFhjb2RlUGxpc3QiLCJnZXRQYXRoRnJvbURldmVsb3BlckRpciIsInByb2Nlc3MiLCJlbnYiLCJERVZFTE9QRVJfRElSIiwiZ2V0UGF0aCIsIm1lbW9pemUiLCJnZXRWZXJzaW9uV2l0aG91dFJldHJ5IiwiZGV2ZWxvcGVyUGF0aCIsIkNGQnVuZGxlU2hvcnRWZXJzaW9uU3RyaW5nIiwic2VtdmVyIiwiY29lcmNlIiwiZ2V0VmVyc2lvbk1lbW9pemVkIiwicmV0cmllcyIsInJldHJ5IiwiZ2V0VmVyc2lvbiIsInBhcnNlIiwidmVyc2lvbiIsInZlcnNpb25TdHJpbmciLCJwYXRjaCIsIm1ham9yIiwibWlub3IiLCJ2ZXJzaW9uRmxvYXQiLCJwYXJzZUZsb2F0IiwidW5kZWZpbmVkIiwidG9TdHJpbmciLCJnZXRDbGFuZ1ZlcnNpb24iLCJmcyIsIndoaWNoIiwiaW5mbyIsIm1hdGNoIiwiZ2V0TWF4SU9TU0RLV2l0aG91dFJldHJ5IiwiYXJncyIsInJ1blhjcnVuQ29tbWFuZCIsInNka1ZlcnNpb24iLCJFcnJvciIsImdldE1heElPU1NESyIsImdldE1heFRWT1NTREtXaXRob3V0UmV0cnkiLCJpc05hTiIsImdldE1heFRWT1NTREsiXSwic291cmNlcyI6WyIuLi8uLi9saWIveGNvZGUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZnMsIGxvZ2dlciB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IHJldHJ5IH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IGV4ZWMgfSBmcm9tICd0ZWVuX3Byb2Nlc3MnO1xuaW1wb3J0IHNlbXZlciBmcm9tICdzZW12ZXInO1xuaW1wb3J0IHtcbiAgcnVuWGNydW5Db21tYW5kLCBmaW5kQXBwUGF0aHMsIFhDUlVOX1RJTUVPVVQsIHJlYWRYY29kZVBsaXN0XG59IGZyb20gJy4vaGVscGVycyc7XG5cbmNvbnN0IERFRkFVTFRfTlVNQkVSX09GX1JFVFJJRVMgPSAyO1xuY29uc3QgWENPREVfQlVORExFX0lEID0gJ2NvbS5hcHBsZS5kdC5YY29kZSc7XG5cbmNvbnN0IGxvZyA9IGxvZ2dlci5nZXRMb2dnZXIoJ1hjb2RlJyk7XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBmdWxsIHBhdGggdG8gWGNvZGUgRGV2ZWxvcGVyIHN1YmZvbGRlciB2aWEgeGNvZGUtc2VsZWN0XG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHRpbWVvdXQgVGhlIG1heGltdW0gdGltZW91dCBmb3IgeGNvZGUtc2VsZWN0IGV4ZWN1dGlvblxuICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nPn0gRnVsbCBwYXRoIHRvIFhjb2RlIERldmVsb3BlciBzdWJmb2xkZXJcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiBpdCBpcyBub3QgcG9zc2libGUgdG8gcmV0cmlldmUgYSBwcm9wZXIgcGF0aFxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRQYXRoRnJvbVhjb2RlU2VsZWN0ICh0aW1lb3V0ID0gWENSVU5fVElNRU9VVCkge1xuICBjb25zdCBnZW5lcmF0ZUVycm9yTWVzc2FnZSA9IGFzeW5jIChwcmVmaXgpID0+IHtcbiAgICBjb25zdCB4Y29kZVBhdGhzID0gYXdhaXQgZmluZEFwcFBhdGhzKFhDT0RFX0JVTkRMRV9JRCk7XG4gICAgaWYgKF8uaXNFbXB0eSh4Y29kZVBhdGhzKSkge1xuICAgICAgcmV0dXJuIGAke3ByZWZpeH0uIENvbnNpZGVyIGluc3RhbGxpbmcgWGNvZGUgdG8gYWRkcmVzcyB0aGlzIGlzc3VlLmA7XG4gICAgfVxuXG4gICAgY29uc3QgcHJvcG9zYWxzID0geGNvZGVQYXRocy5tYXAoKHApID0+IGAgICAgc3VkbyB4Y29kZS1zZWxlY3QgLXMgXCIke3BhdGguam9pbihwLCAnQ29udGVudHMnLCAnRGV2ZWxvcGVyJyl9XCJgKTtcbiAgICByZXR1cm4gYCR7cHJlZml4fS4gYCArXG4gICAgICBgQ29uc2lkZXIgcnVubmluZyR7cHJvcG9zYWxzLmxlbmd0aCA+IDEgPyAnIGFueSBvZicgOiAnJ306XFxuJHsnXFxuJy5qb2luKHByb3Bvc2Fscyl9XFxudG8gYWRkcmVzcyB0aGlzIGlzc3VlLmA7XG4gIH07XG5cbiAgbGV0IHN0ZG91dDtcbiAgdHJ5IHtcbiAgICAoe3N0ZG91dH0gPSBhd2FpdCBleGVjKCd4Y29kZS1zZWxlY3QnLCBbJy0tcHJpbnQtcGF0aCddLCB7dGltZW91dH0pKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZy5lcnJvckFuZFRocm93KGBDYW5ub3QgZGV0ZXJtaW5lIHRoZSBwYXRoIHRvIFhjb2RlIGJ5IHJ1bm5pbmcgJ3hjb2RlLXNlbGVjdCAtcCcgY29tbWFuZC4gYCArXG4gICAgICBgT3JpZ2luYWwgZXJyb3I6ICR7ZS5zdGRlcnIgfHwgZS5tZXNzYWdlfWApO1xuICB9XG4gIC8vIHRyaW0gYW5kIHJlbW92ZSB0cmFpbGluZyBzbGFzaFxuICBjb25zdCBkZXZlbG9wZXJSb290ID0gc3Rkb3V0LnJlcGxhY2UoL1xcLyQvLCAnJykudHJpbSgpO1xuICBpZiAoIWRldmVsb3BlclJvb3QpIHtcbiAgICBsb2cuZXJyb3JBbmRUaHJvdyhhd2FpdCBnZW5lcmF0ZUVycm9yTWVzc2FnZShgJ3hjb2RlLXNlbGVjdCAtcCcgcmV0dXJuZWQgYW4gZW1wdHkgc3RyaW5nYCkpO1xuICB9XG4gIC8vIHhjb2RlLXNlbGVjdCBtaWdodCBhbHNvIHJldHVybiBhIHBhdGggdG8gY29tbWFuZCBsaW5lIHRvb2xzXG4gIGNvbnN0IHtDRkJ1bmRsZUlkZW50aWZpZXJ9ID0gYXdhaXQgcmVhZFhjb2RlUGxpc3QoZGV2ZWxvcGVyUm9vdCk7XG4gIGlmIChDRkJ1bmRsZUlkZW50aWZpZXIgPT09IFhDT0RFX0JVTkRMRV9JRCkge1xuICAgIHJldHVybiBkZXZlbG9wZXJSb290O1xuICB9XG5cbiAgbG9nLmVycm9yQW5kVGhyb3coYXdhaXQgZ2VuZXJhdGVFcnJvck1lc3NhZ2UoYCcke2RldmVsb3BlclJvb3R9JyBpcyBub3QgYSB2YWxpZCBYY29kZSBwYXRoYCkpO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgZnVsbCBwYXRoIHRvIFhjb2RlIERldmVsb3BlciBzdWJmb2xkZXIgdmlhIERFVkVMT1BFUl9ESVIgZW52aXJvbm1lbnQgdmFyaWFibGVcbiAqXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmc+fSBGdWxsIHBhdGggdG8gWGNvZGUgRGV2ZWxvcGVyIHN1YmZvbGRlclxuICogQHRocm93cyB7RXJyb3J9IElmIGl0IGlzIG5vdCBwb3NzaWJsZSB0byByZXRyaWV2ZSBhIHByb3BlciBwYXRoXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldFBhdGhGcm9tRGV2ZWxvcGVyRGlyICgpIHtcbiAgY29uc3QgZGV2ZWxvcGVyUm9vdCA9IHByb2Nlc3MuZW52LkRFVkVMT1BFUl9ESVI7XG4gIGNvbnN0IHtDRkJ1bmRsZUlkZW50aWZpZXJ9ID0gYXdhaXQgcmVhZFhjb2RlUGxpc3QoZGV2ZWxvcGVyUm9vdCk7XG4gIGlmIChDRkJ1bmRsZUlkZW50aWZpZXIgPT09IFhDT0RFX0JVTkRMRV9JRCkge1xuICAgIHJldHVybiBkZXZlbG9wZXJSb290O1xuICB9XG5cbiAgbG9nLmVycm9yQW5kVGhyb3coYFRoZSBwYXRoIHRvIFhjb2RlIERldmVsb3BlciBkaXIgJyR7ZGV2ZWxvcGVyUm9vdH0nIHByb3ZpZGVkIGluIERFVkVMT1BFUl9ESVIgYCArXG4gICAgYGVudmlyb25tZW50IHZhcmlhYmxlIGlzIG5vdCBhIHZhbGlkIHBhdGhgKTtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGZ1bGwgcGF0aCB0byBYY29kZSBEZXZlbG9wZXIgc3ViZm9sZGVyLlxuICogSWYgREVWRUxPUEVSX0RJUiBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBwcm92aWRlZCB0aGVuIGl0cyB2YWx1ZSBoYXMgYSBwcmlvcml0eS5cbiAqXG4gKiBAcHJvcGVydHkge251bWJlcn0gdGltZW91dCBbMTUwMDBdIFRoZSBtYXhpbXVtIHRpbWVvdXQgZm9yIHhjb2RlLXNlbGVjdCBleGVjdXRpb25cbiAqIEByZXR1cm5zIHtzdHJpbmd9IEZ1bGwgcGF0aCB0byBYY29kZSBEZXZlbG9wZXIgc3ViZm9sZGVyXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlcmUgd2FzIGFuIGVycm9yIHdoaWxlIHJldHJpZXZpbmcgdGhlIHBhdGguXG4gKi9cbmNvbnN0IGdldFBhdGggPSBfLm1lbW9pemUoZnVuY3Rpb24gZ2V0UGF0aCAodGltZW91dCA9IFhDUlVOX1RJTUVPVVQpIHtcbiAgcmV0dXJuIHByb2Nlc3MuZW52LkRFVkVMT1BFUl9ESVIgPyBnZXRQYXRoRnJvbURldmVsb3BlckRpcigpIDogZ2V0UGF0aEZyb21YY29kZVNlbGVjdCh0aW1lb3V0KTtcbn0pO1xuXG4vKipcbiAqIFJldHJpZXZlcyBYY29kZSB2ZXJzaW9uXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHRpbWVvdXQgWzE1MDAwXSBUaW1lb3V0IG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0IGZvciB0ZXJtaW5hbCBjb21tYW5kcy5cbiAqIEByZXR1cm5zIHtQcm9taXNlPGltcG9ydChcInNlbXZlclwiKS5TZW1WZXIgfCBudWxsPn0gWGNvZGUgdmVyc2lvblxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIHdhcyBhIGZhaWx1cmUgd2hpbGUgcmV0cmlldmluZyB0aGUgdmVyc2lvblxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRWZXJzaW9uV2l0aG91dFJldHJ5ICh0aW1lb3V0ID0gWENSVU5fVElNRU9VVCkge1xuICBjb25zdCBkZXZlbG9wZXJQYXRoID0gYXdhaXQgZ2V0UGF0aCh0aW1lb3V0KTtcbiAgLy8gd2Ugd2FudCB0byByZWFkIHRoZSBDRkJ1bmRsZVNob3J0VmVyc2lvblN0cmluZyBmcm9tIFhjb2RlJ3MgcGxpc3QuXG4gIGNvbnN0IHtDRkJ1bmRsZVNob3J0VmVyc2lvblN0cmluZ30gPSBhd2FpdCByZWFkWGNvZGVQbGlzdChkZXZlbG9wZXJQYXRoKTtcbiAgcmV0dXJuIHNlbXZlci5jb2VyY2UoQ0ZCdW5kbGVTaG9ydFZlcnNpb25TdHJpbmcpO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyBYY29kZSB2ZXJzaW9uIG9yIHRoZSBjYWNoZWQgb25lIGlmIGNhbGxlZCBtb3JlIHRoYW4gb25jZVxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSByZXRyaWVzIFsyXSBIb3cgbWFueSByZXRyaWVzIHRvIGFwcGx5IGZvciB2ZXJzaW9uIHJldHJpZXZhbFxuICogQHBhcmFtIHtudW1iZXJ9IHRpbWVvdXQgWzE1MDAwXSBUaW1lb3V0IG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0IGZvciB0ZXJtaW5hbCBjb21tYW5kc1xuICogQHJldHVybnMge1Byb21pc2U8aW1wb3J0KFwic2VtdmVyXCIpLlNlbVZlciB8IG51bGw+fSBYY29kZSB2ZXJzaW9uXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlcmUgd2FzIGEgZmFpbHVyZSB3aGlsZSByZXRyaWV2aW5nIHRoZSB2ZXJzaW9uXG4gKi9cbmNvbnN0IGdldFZlcnNpb25NZW1vaXplZCA9IF8ubWVtb2l6ZShcbiAgZnVuY3Rpb24gZ2V0VmVyc2lvbk1lbW9pemVkIChyZXRyaWVzID0gREVGQVVMVF9OVU1CRVJfT0ZfUkVUUklFUywgdGltZW91dCA9IFhDUlVOX1RJTUVPVVQpIHtcbiAgICByZXR1cm4gcmV0cnkocmV0cmllcywgZ2V0VmVyc2lvbldpdGhvdXRSZXRyeSwgdGltZW91dCk7XG4gIH1cbik7XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gWGNvZGVWZXJzaW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdmVyc2lvblN0cmluZyBYY29kZSB2ZXJzaW9uIGFzIGEgc3RyaW5nXG4gKiBAcHJvcGVydHkge251bWJlcn0gdmVyc2lvbkZsb2F0IFhjb2RlIHZlcnNpb24gYXMgYSBmbG9hdCBudW1iZXJcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBtYWpvciBNYWpvciBudW1iZXIgb2YgWGNvZGUgdmVyc2lvblxuICogQHByb3BlcnR5IHtudW1iZXJ9IG1pbm9yIE1pbm9yIG51bWJlciBvZiBYY29kZSB2ZXJzaW9uXG4gKiBAcHJvcGVydHkge251bWJlcj99IHBhdGNoIFBhdGNoIG51bWJlciBvZiBYY29kZSB2ZXJzaW9uIChpZiBleGlzdHMpXG4gKi9cblxuLyoqXG4gKiBSZXRyaWV2ZXMgWGNvZGUgdmVyc2lvblxuICpcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gcGFyc2UgW2ZhbHNlXSBXaGV0aGVyIHRvIHBhcnNlIHRoZSB2ZXJzaW9uIHRvIGEgWGNvZGVWZXJzaW9uIHZlcnNpb25cbiAqIEBwYXJhbSB7bnVtYmVyfSByZXRyaWVzIFsyXSBIb3cgbWFueSByZXRyaWVzIHRvIGFwcGx5IGZvciBnZXR0aW5nIHRoZSB2ZXJzaW9uIG51bWJlclxuICogQHBhcmFtIHtudW1iZXJ9IHRpbWVvdXQgWzE1MDAwXSBUaW1lb3V0IG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0IGZvciB0ZXJtaW5hbCBjb21tYW5kc1xuICogQHJldHVybnMge1Byb21pc2U8WGNvZGVWZXJzaW9uIHwgc3RyaW5nPn0gWGNvZGUgdmVyc2lvbiBkZXBlbmRpbmcgb24gdGhlIHZhbHVlIG9mIGBwYXJzZWAgZmxhZ1xuICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIHdhcyBhIGZhaWx1cmUgd2hpbGUgcmV0cmlldmluZyB0aGUgdmVyc2lvblxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRWZXJzaW9uIChwYXJzZSA9IGZhbHNlLCByZXRyaWVzID0gREVGQVVMVF9OVU1CRVJfT0ZfUkVUUklFUywgdGltZW91dCA9IFhDUlVOX1RJTUVPVVQpIHtcbiAgY29uc3QgdmVyc2lvbiA9IGF3YWl0IGdldFZlcnNpb25NZW1vaXplZChyZXRyaWVzLCB0aW1lb3V0KTtcbiAgLy8geGNvZGUgdmVyc2lvbiBzdHJpbmdzIGFyZSBub3QgZXhhY3RseSBzZW12ZXIgc3RyaW5nOiBwYXRjaCB2ZXJzaW9ucyBvZiAwXG4gIC8vIGFyZSByZW1vdmVkIChlLmcuLCAnMTAuMC4wJyA9PiAnMTAuMCcpXG4gIGNvbnN0IHZlcnNpb25TdHJpbmcgPSB2ZXJzaW9uLnBhdGNoID4gMCA/IHZlcnNpb24udmVyc2lvbiA6IGAke3ZlcnNpb24ubWFqb3J9LiR7dmVyc2lvbi5taW5vcn1gO1xuICBpZiAoIXBhcnNlKSB7XG4gICAgcmV0dXJuIHZlcnNpb25TdHJpbmc7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHZlcnNpb25TdHJpbmcsXG4gICAgdmVyc2lvbkZsb2F0OiBwYXJzZUZsb2F0KHZlcnNpb25TdHJpbmcpLFxuICAgIG1ham9yOiB2ZXJzaW9uLm1ham9yLFxuICAgIG1pbm9yOiB2ZXJzaW9uLm1pbm9yLFxuICAgIHBhdGNoOiB2ZXJzaW9uLnBhdGNoID4gMCA/IHZlcnNpb24ucGF0Y2ggOiB1bmRlZmluZWQsXG4gICAgdG9TdHJpbmcgKCkge1xuICAgICAgcmV0dXJuIHZlcnNpb25TdHJpbmc7XG4gICAgfSxcbiAgfTtcbn1cblxuLyoqXG4gKiBDaGVjayBodHRwczovL3RyYWMubWFjcG9ydHMub3JnL3dpa2kvWGNvZGVWZXJzaW9uSW5mb1xuICogdG8gc2VlIHRoZSBhY3R1YWwgbWFwcGluZyBiZXR3ZWVuIGNsYW5nIGFuZCBvdGhlciBjb21wb25lbnRzLlxuICpcbiAqIEByZXR1cm5zIHtQcm9taXNlPHN0cmluZz8+fSBUaGUgYWN0dWFsIENsYW5nIHZlcnNpb24gaW4geC54LngueCBvciB4LngueCBmb3JtYXQsXG4gKiB3aGljaCBpcyBzdXBwbGllZCB3aXRoIENvbW1hbmQgTGluZSBUb29scy4gYG51bGxgIGlzIHJldHVybmVkXG4gKiBpZiBDTFQgYXJlIG5vdCBpbnN0YWxsZWQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldENsYW5nVmVyc2lvbiAoKSB7XG4gIHRyeSB7XG4gICAgYXdhaXQgZnMud2hpY2goJ2NsYW5nJyk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2cuaW5mbygnQ2Fubm90IGZpbmQgY2xhbmcgZXhlY3V0YWJsZSBvbiB0aGUgbG9jYWwgc3lzdGVtLiAnICtcbiAgICAgICdBcmUgWGNvZGUgQ29tbWFuZCBMaW5lIFRvb2xzIGluc3RhbGxlZD8nKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCB7c3Rkb3V0fSA9IGF3YWl0IGV4ZWMoJ2NsYW5nJywgWyctLXZlcnNpb24nXSk7XG4gIGNvbnN0IG1hdGNoID0gL2NsYW5nLShbMC05Ll0rKS8uZXhlYyhzdGRvdXQpO1xuICBpZiAoIW1hdGNoKSB7XG4gICAgbG9nLmluZm8oYENhbm5vdCBwYXJzZSBjbGFuZyB2ZXJzaW9uIGZyb20gJHtzdGRvdXR9YCk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIG1hdGNoWzFdO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgbWF4aW11bSB2ZXJzaW9uIG9mIGlPUyBTREsgc3VwcG9ydGVkIGJ5IHRoZSBpbnN0YWxsZWQgWGNvZGVcbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gdGltZW91dCBbMTUwMDBdIFRpbWVvdXQgb2YgbWlsbGlzZWNvbmRzIHRvIHdhaXQgZm9yIHRlcm1pbmFsIGNvbW1hbmRzXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgU0RLIHZlcnNpb25cbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgU0RLIHZlcnNpb24gbnVtYmVyIGNhbm5vdCBiZSBkZXRlcm1pbmVkXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldE1heElPU1NES1dpdGhvdXRSZXRyeSAodGltZW91dCA9IFhDUlVOX1RJTUVPVVQpIHtcbiAgY29uc3QgYXJncyA9IFsnLS1zZGsnLCAnaXBob25lc2ltdWxhdG9yJywgJy0tc2hvdy1zZGstdmVyc2lvbiddO1xuICBjb25zdCB7c3Rkb3V0fSA9IGF3YWl0IHJ1blhjcnVuQ29tbWFuZChhcmdzLCB0aW1lb3V0KTtcbiAgY29uc3Qgc2RrVmVyc2lvbiA9IHN0ZG91dC50cmltKCk7XG4gIGNvbnN0IG1hdGNoID0gL1xcZC5cXGQvLmV4ZWMoc3Rkb3V0KTtcbiAgaWYgKCFtYXRjaCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgeGNydW4gcmV0dXJuZWQgYSBub24tbnVtZXJpYyBpT1MgU0RLIHZlcnNpb246ICcke3Nka1ZlcnNpb259J2ApO1xuICB9XG4gIHJldHVybiBzZGtWZXJzaW9uO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgbWF4aW11bSB2ZXJzaW9uIG9mIGlPUyBTREsgc3VwcG9ydGVkIGJ5IHRoZSBpbnN0YWxsZWQgWGNvZGVcbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gdGltZW91dCBbMTUwMDBdIFRpbWVvdXQgb2YgbWlsbGlzZWNvbmRzIHRvIHdhaXQgZm9yIHRlcm1pbmFsIGNvbW1hbmRzXG4gKiBAcGFyYW0ge251bWJlcn0gcmV0cmllcyBbMl0gVGhlIG1heGltdW0gbnVtYmVyIG9mIHJldHJpZXNcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBTREsgdmVyc2lvblxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBTREsgdmVyc2lvbiBudW1iZXIgY2Fubm90IGJlIGRldGVybWluZWRcbiAqL1xuY29uc3QgZ2V0TWF4SU9TU0RLID0gXy5tZW1vaXplKFxuICBmdW5jdGlvbiBnZXRNYXhJT1NTREsgKHJldHJpZXMgPSBERUZBVUxUX05VTUJFUl9PRl9SRVRSSUVTLCB0aW1lb3V0ID0gWENSVU5fVElNRU9VVCkge1xuICAgIHJldHVybiByZXRyeShyZXRyaWVzLCBnZXRNYXhJT1NTREtXaXRob3V0UmV0cnksIHRpbWVvdXQpO1xuICB9XG4pO1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgbWF4aW11bSB2ZXJzaW9uIG9mIHR2T1MgU0RLIHN1cHBvcnRlZCBieSB0aGUgaW5zdGFsbGVkIFhjb2RlXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHRpbWVvdXQgWzE1MDAwXSBUaW1lb3V0IG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0IGZvciB0ZXJtaW5hbCBjb21tYW5kc1xuICogQHJldHVybnMge3N0cmluZ30gVGhlIFNESyB2ZXJzaW9uXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIFNESyB2ZXJzaW9uIG51bWJlciBjYW5ub3QgYmUgZGV0ZXJtaW5lZFxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRNYXhUVk9TU0RLV2l0aG91dFJldHJ5ICh0aW1lb3V0ID0gWENSVU5fVElNRU9VVCkge1xuICBjb25zdCBhcmdzID0gWyctLXNkaycsICdhcHBsZXR2c2ltdWxhdG9yJywgJy0tc2hvdy1zZGstdmVyc2lvbiddO1xuICBjb25zdCB7c3Rkb3V0fSA9IGF3YWl0IHJ1blhjcnVuQ29tbWFuZChhcmdzLCB0aW1lb3V0KTtcbiAgY29uc3Qgc2RrVmVyc2lvbiA9IHN0ZG91dC50cmltKCk7XG4gIGlmIChpc05hTihwYXJzZUZsb2F0KHNka1ZlcnNpb24pKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgeGNydW4gcmV0dXJuZWQgYSBub24tbnVtZXJpYyB0dk9TIFNESyB2ZXJzaW9uOiAnJHtzZGtWZXJzaW9ufSdgKTtcbiAgfVxuICByZXR1cm4gc2RrVmVyc2lvbjtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIG1heGltdW0gdmVyc2lvbiBvZiB0dk9TIFNESyBzdXBwb3J0ZWQgYnkgdGhlIGluc3RhbGxlZCBYY29kZVxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB0aW1lb3V0IFsxNTAwMF0gVGltZW91dCBvZiBtaWxsaXNlY29uZHMgdG8gd2FpdCBmb3IgdGVybWluYWwgY29tbWFuZHNcbiAqIEBwYXJhbSB7bnVtYmVyfSByZXRyaWVzIFsyXSBUaGUgbWF4aW11bSBudW1iZXIgb2YgcmV0cmllc1xuICogQHJldHVybnMge3N0cmluZ30gVGhlIFNESyB2ZXJzaW9uXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIFNESyB2ZXJzaW9uIG51bWJlciBjYW5ub3QgYmUgZGV0ZXJtaW5lZFxuICovXG5jb25zdCBnZXRNYXhUVk9TU0RLID0gXy5tZW1vaXplKFxuICBmdW5jdGlvbiBnZXRNYXhUVk9TU0RLIChyZXRyaWVzID0gREVGQVVMVF9OVU1CRVJfT0ZfUkVUUklFUywgdGltZW91dCA9IFhDUlVOX1RJTUVPVVQpIHtcbiAgICByZXR1cm4gcmV0cnkocmV0cmllcywgZ2V0TWF4VFZPU1NES1dpdGhvdXRSZXRyeSwgdGltZW91dCk7XG4gIH1cbik7XG5cbmV4cG9ydCB7XG4gIGdldFBhdGgsIGdldFZlcnNpb24sIGdldE1heElPU1NESywgZ2V0TWF4SU9TU0RLV2l0aG91dFJldHJ5LFxuICBnZXRNYXhUVk9TU0RLLCBnZXRNYXhUVk9TU0RLV2l0aG91dFJldHJ5LCBnZXRDbGFuZ1ZlcnNpb24sXG4gIGdldFBhdGhGcm9tRGV2ZWxvcGVyRGlyLCBnZXRQYXRoRnJvbVhjb2RlU2VsZWN0LFxufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUlBLE1BQU1BLHlCQUF5QixHQUFHLENBQWxDO0FBQ0EsTUFBTUMsZUFBZSxHQUFHLG9CQUF4Qjs7QUFFQSxNQUFNQyxHQUFHLEdBQUdDLGVBQUEsQ0FBT0MsU0FBUCxDQUFpQixPQUFqQixDQUFaOztBQVNBLGVBQWVDLHNCQUFmLENBQXVDQyxPQUFPLEdBQUdDLHNCQUFqRCxFQUFnRTtFQUM5RCxNQUFNQyxvQkFBb0IsR0FBRyxNQUFPQyxNQUFQLElBQWtCO0lBQzdDLE1BQU1DLFVBQVUsR0FBRyxNQUFN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
147
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfc3VwcG9ydCIsInJlcXVpcmUiLCJfcGF0aCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfYXN5bmNib3giLCJfbG9kYXNoIiwiX3RlZW5fcHJvY2VzcyIsIl9zZW12ZXIiLCJfaGVscGVycyIsIkRFRkFVTFRfTlVNQkVSX09GX1JFVFJJRVMiLCJYQ09ERV9CVU5ETEVfSUQiLCJsb2ciLCJsb2dnZXIiLCJnZXRMb2dnZXIiLCJnZXRQYXRoRnJvbVhjb2RlU2VsZWN0IiwidGltZW91dCIsIlhDUlVOX1RJTUVPVVQiLCJnZW5lcmF0ZUVycm9yTWVzc2FnZSIsInByZWZpeCIsInhjb2RlUGF0aHMiLCJmaW5kQXBwUGF0aHMiLCJfIiwiaXNFbXB0eSIsInByb3Bvc2FscyIsIm1hcCIsInAiLCJwYXRoIiwiam9pbiIsImxlbmd0aCIsInN0ZG91dCIsImV4ZWMiLCJlIiwiZXJyb3JBbmRUaHJvdyIsInN0ZGVyciIsIm1lc3NhZ2UiLCJkZXZlbG9wZXJSb290IiwicmVwbGFjZSIsInRyaW0iLCJDRkJ1bmRsZUlkZW50aWZpZXIiLCJyZWFkWGNvZGVQbGlzdCIsImdldFBhdGhGcm9tRGV2ZWxvcGVyRGlyIiwicHJvY2VzcyIsImVudiIsIkRFVkVMT1BFUl9ESVIiLCJnZXRQYXRoIiwibWVtb2l6ZSIsImV4cG9ydHMiLCJnZXRWZXJzaW9uV2l0aG91dFJldHJ5IiwiZGV2ZWxvcGVyUGF0aCIsIkNGQnVuZGxlU2hvcnRWZXJzaW9uU3RyaW5nIiwic2VtdmVyIiwiY29lcmNlIiwiZ2V0VmVyc2lvbk1lbW9pemVkIiwicmV0cmllcyIsInJldHJ5IiwiZ2V0VmVyc2lvbiIsInBhcnNlIiwidmVyc2lvbiIsInZlcnNpb25TdHJpbmciLCJwYXRjaCIsIm1ham9yIiwibWlub3IiLCJ2ZXJzaW9uRmxvYXQiLCJwYXJzZUZsb2F0IiwidW5kZWZpbmVkIiwidG9TdHJpbmciLCJnZXRDbGFuZ1ZlcnNpb24iLCJmcyIsIndoaWNoIiwiaW5mbyIsIm1hdGNoIiwiZ2V0TWF4SU9TU0RLV2l0aG91dFJldHJ5IiwiYXJncyIsInJ1blhjcnVuQ29tbWFuZCIsInNka1ZlcnNpb24iLCJFcnJvciIsImdldE1heElPU1NESyIsImdldE1heFRWT1NTREtXaXRob3V0UmV0cnkiLCJpc05hTiIsImdldE1heFRWT1NTREsiXSwic291cmNlcyI6WyIuLi8uLi9saWIveGNvZGUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZnMsIGxvZ2dlciB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IHJldHJ5IH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IGV4ZWMgfSBmcm9tICd0ZWVuX3Byb2Nlc3MnO1xuaW1wb3J0IHNlbXZlciBmcm9tICdzZW12ZXInO1xuaW1wb3J0IHtcbiAgcnVuWGNydW5Db21tYW5kLCBmaW5kQXBwUGF0aHMsIFhDUlVOX1RJTUVPVVQsIHJlYWRYY29kZVBsaXN0XG59IGZyb20gJy4vaGVscGVycyc7XG5cbmNvbnN0IERFRkFVTFRfTlVNQkVSX09GX1JFVFJJRVMgPSAyO1xuY29uc3QgWENPREVfQlVORExFX0lEID0gJ2NvbS5hcHBsZS5kdC5YY29kZSc7XG5cbmNvbnN0IGxvZyA9IGxvZ2dlci5nZXRMb2dnZXIoJ1hjb2RlJyk7XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBmdWxsIHBhdGggdG8gWGNvZGUgRGV2ZWxvcGVyIHN1YmZvbGRlciB2aWEgeGNvZGUtc2VsZWN0XG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHRpbWVvdXQgVGhlIG1heGltdW0gdGltZW91dCBmb3IgeGNvZGUtc2VsZWN0IGV4ZWN1dGlvblxuICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nPn0gRnVsbCBwYXRoIHRvIFhjb2RlIERldmVsb3BlciBzdWJmb2xkZXJcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiBpdCBpcyBub3QgcG9zc2libGUgdG8gcmV0cmlldmUgYSBwcm9wZXIgcGF0aFxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRQYXRoRnJvbVhjb2RlU2VsZWN0ICh0aW1lb3V0ID0gWENSVU5fVElNRU9VVCkge1xuICBjb25zdCBnZW5lcmF0ZUVycm9yTWVzc2FnZSA9IGFzeW5jIChwcmVmaXgpID0+IHtcbiAgICBjb25zdCB4Y29kZVBhdGhzID0gYXdhaXQgZmluZEFwcFBhdGhzKFhDT0RFX0JVTkRMRV9JRCk7XG4gICAgaWYgKF8uaXNFbXB0eSh4Y29kZVBhdGhzKSkge1xuICAgICAgcmV0dXJuIGAke3ByZWZpeH0uIENvbnNpZGVyIGluc3RhbGxpbmcgWGNvZGUgdG8gYWRkcmVzcyB0aGlzIGlzc3VlLmA7XG4gICAgfVxuXG4gICAgY29uc3QgcHJvcG9zYWxzID0geGNvZGVQYXRocy5tYXAoKHApID0+IGAgICAgc3VkbyB4Y29kZS1zZWxlY3QgLXMgXCIke3BhdGguam9pbihwLCAnQ29udGVudHMnLCAnRGV2ZWxvcGVyJyl9XCJgKTtcbiAgICByZXR1cm4gYCR7cHJlZml4fS4gYCArXG4gICAgICBgQ29uc2lkZXIgcnVubmluZyR7cHJvcG9zYWxzLmxlbmd0aCA+IDEgPyAnIGFueSBvZicgOiAnJ306XFxuJHtwcm9wb3NhbHMuam9pbignXFxuJyl9XFxudG8gYWRkcmVzcyB0aGlzIGlzc3VlLmA7XG4gIH07XG5cbiAgbGV0IHN0ZG91dDtcbiAgdHJ5IHtcbiAgICAoe3N0ZG91dH0gPSBhd2FpdCBleGVjKCd4Y29kZS1zZWxlY3QnLCBbJy0tcHJpbnQtcGF0aCddLCB7dGltZW91dH0pKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZy5lcnJvckFuZFRocm93KGBDYW5ub3QgZGV0ZXJtaW5lIHRoZSBwYXRoIHRvIFhjb2RlIGJ5IHJ1bm5pbmcgJ3hjb2RlLXNlbGVjdCAtcCcgY29tbWFuZC4gYCArXG4gICAgICBgT3JpZ2luYWwgZXJyb3I6ICR7ZS5zdGRlcnIgfHwgZS5tZXNzYWdlfWApO1xuICB9XG4gIC8vIHRyaW0gYW5kIHJlbW92ZSB0cmFpbGluZyBzbGFzaFxuICBjb25zdCBkZXZlbG9wZXJSb290ID0gc3Rkb3V0LnJlcGxhY2UoL1xcLyQvLCAnJykudHJpbSgpO1xuICBpZiAoIWRldmVsb3BlclJvb3QpIHtcbiAgICBsb2cuZXJyb3JBbmRUaHJvdyhhd2FpdCBnZW5lcmF0ZUVycm9yTWVzc2FnZShgJ3hjb2RlLXNlbGVjdCAtcCcgcmV0dXJuZWQgYW4gZW1wdHkgc3RyaW5nYCkpO1xuICB9XG4gIC8vIHhjb2RlLXNlbGVjdCBtaWdodCBhbHNvIHJldHVybiBhIHBhdGggdG8gY29tbWFuZCBsaW5lIHRvb2xzXG4gIGNvbnN0IHtDRkJ1bmRsZUlkZW50aWZpZXJ9ID0gYXdhaXQgcmVhZFhjb2RlUGxpc3QoZGV2ZWxvcGVyUm9vdCk7XG4gIGlmIChDRkJ1bmRsZUlkZW50aWZpZXIgPT09IFhDT0RFX0JVTkRMRV9JRCkge1xuICAgIHJldHVybiBkZXZlbG9wZXJSb290O1xuICB9XG5cbiAgbG9nLmVycm9yQW5kVGhyb3coYXdhaXQgZ2VuZXJhdGVFcnJvck1lc3NhZ2UoYCcke2RldmVsb3BlclJvb3R9JyBpcyBub3QgYSB2YWxpZCBYY29kZSBwYXRoYCkpO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgZnVsbCBwYXRoIHRvIFhjb2RlIERldmVsb3BlciBzdWJmb2xkZXIgdmlhIERFVkVMT1BFUl9ESVIgZW52aXJvbm1lbnQgdmFyaWFibGVcbiAqXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmc+fSBGdWxsIHBhdGggdG8gWGNvZGUgRGV2ZWxvcGVyIHN1YmZvbGRlclxuICogQHRocm93cyB7RXJyb3J9IElmIGl0IGlzIG5vdCBwb3NzaWJsZSB0byByZXRyaWV2ZSBhIHByb3BlciBwYXRoXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldFBhdGhGcm9tRGV2ZWxvcGVyRGlyICgpIHtcbiAgY29uc3QgZGV2ZWxvcGVyUm9vdCA9IHByb2Nlc3MuZW52LkRFVkVMT1BFUl9ESVI7XG4gIGNvbnN0IHtDRkJ1bmRsZUlkZW50aWZpZXJ9ID0gYXdhaXQgcmVhZFhjb2RlUGxpc3QoZGV2ZWxvcGVyUm9vdCk7XG4gIGlmIChDRkJ1bmRsZUlkZW50aWZpZXIgPT09IFhDT0RFX0JVTkRMRV9JRCkge1xuICAgIHJldHVybiBkZXZlbG9wZXJSb290O1xuICB9XG5cbiAgbG9nLmVycm9yQW5kVGhyb3coYFRoZSBwYXRoIHRvIFhjb2RlIERldmVsb3BlciBkaXIgJyR7ZGV2ZWxvcGVyUm9vdH0nIHByb3ZpZGVkIGluIERFVkVMT1BFUl9ESVIgYCArXG4gICAgYGVudmlyb25tZW50IHZhcmlhYmxlIGlzIG5vdCBhIHZhbGlkIHBhdGhgKTtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGZ1bGwgcGF0aCB0byBYY29kZSBEZXZlbG9wZXIgc3ViZm9sZGVyLlxuICogSWYgREVWRUxPUEVSX0RJUiBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBwcm92aWRlZCB0aGVuIGl0cyB2YWx1ZSBoYXMgYSBwcmlvcml0eS5cbiAqXG4gKiBAcHJvcGVydHkge251bWJlcn0gdGltZW91dCBbMTUwMDBdIFRoZSBtYXhpbXVtIHRpbWVvdXQgZm9yIHhjb2RlLXNlbGVjdCBleGVjdXRpb25cbiAqIEByZXR1cm5zIHtzdHJpbmd9IEZ1bGwgcGF0aCB0byBYY29kZSBEZXZlbG9wZXIgc3ViZm9sZGVyXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlcmUgd2FzIGFuIGVycm9yIHdoaWxlIHJldHJpZXZpbmcgdGhlIHBhdGguXG4gKi9cbmNvbnN0IGdldFBhdGggPSBfLm1lbW9pemUoZnVuY3Rpb24gZ2V0UGF0aCAodGltZW91dCA9IFhDUlVOX1RJTUVPVVQpIHtcbiAgcmV0dXJuIHByb2Nlc3MuZW52LkRFVkVMT1BFUl9ESVIgPyBnZXRQYXRoRnJvbURldmVsb3BlckRpcigpIDogZ2V0UGF0aEZyb21YY29kZVNlbGVjdCh0aW1lb3V0KTtcbn0pO1xuXG4vKipcbiAqIFJldHJpZXZlcyBYY29kZSB2ZXJzaW9uXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHRpbWVvdXQgWzE1MDAwXSBUaW1lb3V0IG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0IGZvciB0ZXJtaW5hbCBjb21tYW5kcy5cbiAqIEByZXR1cm5zIHtQcm9taXNlPGltcG9ydChcInNlbXZlclwiKS5TZW1WZXIgfCBudWxsPn0gWGNvZGUgdmVyc2lvblxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIHdhcyBhIGZhaWx1cmUgd2hpbGUgcmV0cmlldmluZyB0aGUgdmVyc2lvblxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRWZXJzaW9uV2l0aG91dFJldHJ5ICh0aW1lb3V0ID0gWENSVU5fVElNRU9VVCkge1xuICBjb25zdCBkZXZlbG9wZXJQYXRoID0gYXdhaXQgZ2V0UGF0aCh0aW1lb3V0KTtcbiAgLy8gd2Ugd2FudCB0byByZWFkIHRoZSBDRkJ1bmRsZVNob3J0VmVyc2lvblN0cmluZyBmcm9tIFhjb2RlJ3MgcGxpc3QuXG4gIGNvbnN0IHtDRkJ1bmRsZVNob3J0VmVyc2lvblN0cmluZ30gPSBhd2FpdCByZWFkWGNvZGVQbGlzdChkZXZlbG9wZXJQYXRoKTtcbiAgcmV0dXJuIHNlbXZlci5jb2VyY2UoQ0ZCdW5kbGVTaG9ydFZlcnNpb25TdHJpbmcpO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyBYY29kZSB2ZXJzaW9uIG9yIHRoZSBjYWNoZWQgb25lIGlmIGNhbGxlZCBtb3JlIHRoYW4gb25jZVxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSByZXRyaWVzIFsyXSBIb3cgbWFueSByZXRyaWVzIHRvIGFwcGx5IGZvciB2ZXJzaW9uIHJldHJpZXZhbFxuICogQHBhcmFtIHtudW1iZXJ9IHRpbWVvdXQgWzE1MDAwXSBUaW1lb3V0IG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0IGZvciB0ZXJtaW5hbCBjb21tYW5kc1xuICogQHJldHVybnMge1Byb21pc2U8aW1wb3J0KFwic2VtdmVyXCIpLlNlbVZlciB8IG51bGw+fSBYY29kZSB2ZXJzaW9uXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlcmUgd2FzIGEgZmFpbHVyZSB3aGlsZSByZXRyaWV2aW5nIHRoZSB2ZXJzaW9uXG4gKi9cbmNvbnN0IGdldFZlcnNpb25NZW1vaXplZCA9IF8ubWVtb2l6ZShcbiAgZnVuY3Rpb24gZ2V0VmVyc2lvbk1lbW9pemVkIChyZXRyaWVzID0gREVGQVVMVF9OVU1CRVJfT0ZfUkVUUklFUywgdGltZW91dCA9IFhDUlVOX1RJTUVPVVQpIHtcbiAgICByZXR1cm4gcmV0cnkocmV0cmllcywgZ2V0VmVyc2lvbldpdGhvdXRSZXRyeSwgdGltZW91dCk7XG4gIH1cbik7XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gWGNvZGVWZXJzaW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdmVyc2lvblN0cmluZyBYY29kZSB2ZXJzaW9uIGFzIGEgc3RyaW5nXG4gKiBAcHJvcGVydHkge251bWJlcn0gdmVyc2lvbkZsb2F0IFhjb2RlIHZlcnNpb24gYXMgYSBmbG9hdCBudW1iZXJcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBtYWpvciBNYWpvciBudW1iZXIgb2YgWGNvZGUgdmVyc2lvblxuICogQHByb3BlcnR5IHtudW1iZXJ9IG1pbm9yIE1pbm9yIG51bWJlciBvZiBYY29kZSB2ZXJzaW9uXG4gKiBAcHJvcGVydHkge251bWJlcj99IHBhdGNoIFBhdGNoIG51bWJlciBvZiBYY29kZSB2ZXJzaW9uIChpZiBleGlzdHMpXG4gKi9cblxuLyoqXG4gKiBSZXRyaWV2ZXMgWGNvZGUgdmVyc2lvblxuICpcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gcGFyc2UgW2ZhbHNlXSBXaGV0aGVyIHRvIHBhcnNlIHRoZSB2ZXJzaW9uIHRvIGEgWGNvZGVWZXJzaW9uIHZlcnNpb25cbiAqIEBwYXJhbSB7bnVtYmVyfSByZXRyaWVzIFsyXSBIb3cgbWFueSByZXRyaWVzIHRvIGFwcGx5IGZvciBnZXR0aW5nIHRoZSB2ZXJzaW9uIG51bWJlclxuICogQHBhcmFtIHtudW1iZXJ9IHRpbWVvdXQgWzE1MDAwXSBUaW1lb3V0IG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0IGZvciB0ZXJtaW5hbCBjb21tYW5kc1xuICogQHJldHVybnMge1Byb21pc2U8WGNvZGVWZXJzaW9uIHwgc3RyaW5nPn0gWGNvZGUgdmVyc2lvbiBkZXBlbmRpbmcgb24gdGhlIHZhbHVlIG9mIGBwYXJzZWAgZmxhZ1xuICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIHdhcyBhIGZhaWx1cmUgd2hpbGUgcmV0cmlldmluZyB0aGUgdmVyc2lvblxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRWZXJzaW9uIChwYXJzZSA9IGZhbHNlLCByZXRyaWVzID0gREVGQVVMVF9OVU1CRVJfT0ZfUkVUUklFUywgdGltZW91dCA9IFhDUlVOX1RJTUVPVVQpIHtcbiAgY29uc3QgdmVyc2lvbiA9IGF3YWl0IGdldFZlcnNpb25NZW1vaXplZChyZXRyaWVzLCB0aW1lb3V0KTtcbiAgLy8geGNvZGUgdmVyc2lvbiBzdHJpbmdzIGFyZSBub3QgZXhhY3RseSBzZW12ZXIgc3RyaW5nOiBwYXRjaCB2ZXJzaW9ucyBvZiAwXG4gIC8vIGFyZSByZW1vdmVkIChlLmcuLCAnMTAuMC4wJyA9PiAnMTAuMCcpXG4gIGNvbnN0IHZlcnNpb25TdHJpbmcgPSB2ZXJzaW9uLnBhdGNoID4gMCA/IHZlcnNpb24udmVyc2lvbiA6IGAke3ZlcnNpb24ubWFqb3J9LiR7dmVyc2lvbi5taW5vcn1gO1xuICBpZiAoIXBhcnNlKSB7XG4gICAgcmV0dXJuIHZlcnNpb25TdHJpbmc7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHZlcnNpb25TdHJpbmcsXG4gICAgdmVyc2lvbkZsb2F0OiBwYXJzZUZsb2F0KHZlcnNpb25TdHJpbmcpLFxuICAgIG1ham9yOiB2ZXJzaW9uLm1ham9yLFxuICAgIG1pbm9yOiB2ZXJzaW9uLm1pbm9yLFxuICAgIHBhdGNoOiB2ZXJzaW9uLnBhdGNoID4gMCA/IHZlcnNpb24ucGF0Y2ggOiB1bmRlZmluZWQsXG4gICAgdG9TdHJpbmcgKCkge1xuICAgICAgcmV0dXJuIHZlcnNpb25TdHJpbmc7XG4gICAgfSxcbiAgfTtcbn1cblxuLyoqXG4gKiBDaGVjayBodHRwczovL3RyYWMubWFjcG9ydHMub3JnL3dpa2kvWGNvZGVWZXJzaW9uSW5mb1xuICogdG8gc2VlIHRoZSBhY3R1YWwgbWFwcGluZyBiZXR3ZWVuIGNsYW5nIGFuZCBvdGhlciBjb21wb25lbnRzLlxuICpcbiAqIEByZXR1cm5zIHtQcm9taXNlPHN0cmluZz8+fSBUaGUgYWN0dWFsIENsYW5nIHZlcnNpb24gaW4geC54LngueCBvciB4LngueCBmb3JtYXQsXG4gKiB3aGljaCBpcyBzdXBwbGllZCB3aXRoIENvbW1hbmQgTGluZSBUb29scy4gYG51bGxgIGlzIHJldHVybmVkXG4gKiBpZiBDTFQgYXJlIG5vdCBpbnN0YWxsZWQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldENsYW5nVmVyc2lvbiAoKSB7XG4gIHRyeSB7XG4gICAgYXdhaXQgZnMud2hpY2goJ2NsYW5nJyk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2cuaW5mbygnQ2Fubm90IGZpbmQgY2xhbmcgZXhlY3V0YWJsZSBvbiB0aGUgbG9jYWwgc3lzdGVtLiAnICtcbiAgICAgICdBcmUgWGNvZGUgQ29tbWFuZCBMaW5lIFRvb2xzIGluc3RhbGxlZD8nKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCB7c3Rkb3V0fSA9IGF3YWl0IGV4ZWMoJ2NsYW5nJywgWyctLXZlcnNpb24nXSk7XG4gIGNvbnN0IG1hdGNoID0gL2NsYW5nLShbMC05Ll0rKS8uZXhlYyhzdGRvdXQpO1xuICBpZiAoIW1hdGNoKSB7XG4gICAgbG9nLmluZm8oYENhbm5vdCBwYXJzZSBjbGFuZyB2ZXJzaW9uIGZyb20gJHtzdGRvdXR9YCk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIG1hdGNoWzFdO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgbWF4aW11bSB2ZXJzaW9uIG9mIGlPUyBTREsgc3VwcG9ydGVkIGJ5IHRoZSBpbnN0YWxsZWQgWGNvZGVcbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gdGltZW91dCBbMTUwMDBdIFRpbWVvdXQgb2YgbWlsbGlzZWNvbmRzIHRvIHdhaXQgZm9yIHRlcm1pbmFsIGNvbW1hbmRzXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgU0RLIHZlcnNpb25cbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgU0RLIHZlcnNpb24gbnVtYmVyIGNhbm5vdCBiZSBkZXRlcm1pbmVkXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldE1heElPU1NES1dpdGhvdXRSZXRyeSAodGltZW91dCA9IFhDUlVOX1RJTUVPVVQpIHtcbiAgY29uc3QgYXJncyA9IFsnLS1zZGsnLCAnaXBob25lc2ltdWxhdG9yJywgJy0tc2hvdy1zZGstdmVyc2lvbiddO1xuICBjb25zdCB7c3Rkb3V0fSA9IGF3YWl0IHJ1blhjcnVuQ29tbWFuZChhcmdzLCB0aW1lb3V0KTtcbiAgY29uc3Qgc2RrVmVyc2lvbiA9IHN0ZG91dC50cmltKCk7XG4gIGNvbnN0IG1hdGNoID0gL1xcZC5cXGQvLmV4ZWMoc3Rkb3V0KTtcbiAgaWYgKCFtYXRjaCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgeGNydW4gcmV0dXJuZWQgYSBub24tbnVtZXJpYyBpT1MgU0RLIHZlcnNpb246ICcke3Nka1ZlcnNpb259J2ApO1xuICB9XG4gIHJldHVybiBzZGtWZXJzaW9uO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgbWF4aW11bSB2ZXJzaW9uIG9mIGlPUyBTREsgc3VwcG9ydGVkIGJ5IHRoZSBpbnN0YWxsZWQgWGNvZGVcbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gdGltZW91dCBbMTUwMDBdIFRpbWVvdXQgb2YgbWlsbGlzZWNvbmRzIHRvIHdhaXQgZm9yIHRlcm1pbmFsIGNvbW1hbmRzXG4gKiBAcGFyYW0ge251bWJlcn0gcmV0cmllcyBbMl0gVGhlIG1heGltdW0gbnVtYmVyIG9mIHJldHJpZXNcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBTREsgdmVyc2lvblxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBTREsgdmVyc2lvbiBudW1iZXIgY2Fubm90IGJlIGRldGVybWluZWRcbiAqL1xuY29uc3QgZ2V0TWF4SU9TU0RLID0gXy5tZW1vaXplKFxuICBmdW5jdGlvbiBnZXRNYXhJT1NTREsgKHJldHJpZXMgPSBERUZBVUxUX05VTUJFUl9PRl9SRVRSSUVTLCB0aW1lb3V0ID0gWENSVU5fVElNRU9VVCkge1xuICAgIHJldHVybiByZXRyeShyZXRyaWVzLCBnZXRNYXhJT1NTREtXaXRob3V0UmV0cnksIHRpbWVvdXQpO1xuICB9XG4pO1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgbWF4aW11bSB2ZXJzaW9uIG9mIHR2T1MgU0RLIHN1cHBvcnRlZCBieSB0aGUgaW5zdGFsbGVkIFhjb2RlXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHRpbWVvdXQgWzE1MDAwXSBUaW1lb3V0IG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0IGZvciB0ZXJtaW5hbCBjb21tYW5kc1xuICogQHJldHVybnMge3N0cmluZ30gVGhlIFNESyB2ZXJzaW9uXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIFNESyB2ZXJzaW9uIG51bWJlciBjYW5ub3QgYmUgZGV0ZXJtaW5lZFxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRNYXhUVk9TU0RLV2l0aG91dFJldHJ5ICh0aW1lb3V0ID0gWENSVU5fVElNRU9VVCkge1xuICBjb25zdCBhcmdzID0gWyctLXNkaycsICdhcHBsZXR2c2ltdWxhdG9yJywgJy0tc2hvdy1zZGstdmVyc2lvbiddO1xuICBjb25zdCB7c3Rkb3V0fSA9IGF3YWl0IHJ1blhjcnVuQ29tbWFuZChhcmdzLCB0aW1lb3V0KTtcbiAgY29uc3Qgc2RrVmVyc2lvbiA9IHN0ZG91dC50cmltKCk7XG4gIGlmIChpc05hTihwYXJzZUZsb2F0KHNka1ZlcnNpb24pKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgeGNydW4gcmV0dXJuZWQgYSBub24tbnVtZXJpYyB0dk9TIFNESyB2ZXJzaW9uOiAnJHtzZGtWZXJzaW9ufSdgKTtcbiAgfVxuICByZXR1cm4gc2RrVmVyc2lvbjtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIG1heGltdW0gdmVyc2lvbiBvZiB0dk9TIFNESyBzdXBwb3J0ZWQgYnkgdGhlIGluc3RhbGxlZCBYY29kZVxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB0aW1lb3V0IFsxNTAwMF0gVGltZW91dCBvZiBtaWxsaXNlY29uZHMgdG8gd2FpdCBmb3IgdGVybWluYWwgY29tbWFuZHNcbiAqIEBwYXJhbSB7bnVtYmVyfSByZXRyaWVzIFsyXSBUaGUgbWF4aW11bSBudW1iZXIgb2YgcmV0cmllc1xuICogQHJldHVybnMge3N0cmluZ30gVGhlIFNESyB2ZXJzaW9uXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIFNESyB2ZXJzaW9uIG51bWJlciBjYW5ub3QgYmUgZGV0ZXJtaW5lZFxuICovXG5jb25zdCBnZXRNYXhUVk9TU0RLID0gXy5tZW1vaXplKFxuICBmdW5jdGlvbiBnZXRNYXhUVk9TU0RLIChyZXRyaWVzID0gREVGQVVMVF9OVU1CRVJfT0ZfUkVUUklFUywgdGltZW91dCA9IFhDUlVOX1RJTUVPVVQpIHtcbiAgICByZXR1cm4gcmV0cnkocmV0cmllcywgZ2V0TWF4VFZPU1NES1dpdGhvdXRSZXRyeSwgdGltZW91dCk7XG4gIH1cbik7XG5cbmV4cG9ydCB7XG4gIGdldFBhdGgsIGdldFZlcnNpb24sIGdldE1heElPU1NESywgZ2V0TWF4SU9TU0RLV2l0aG91dFJldHJ5LFxuICBnZXRNYXhUVk9TU0RLLCBnZXRNYXhUVk9TU0RLV2l0aG91dFJldHJ5LCBnZXRDbGFuZ1ZlcnNpb24sXG4gIGdldFBhdGhGcm9tRGV2ZWxvcGVyRGlyLCBnZXRQYXRoRnJvbVhjb2RlU2VsZWN0LFxufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLElBQUFBLFFBQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLEtBQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLFNBQUEsR0FBQUgsT0FBQTtBQUNBLElBQUFJLE9BQUEsR0FBQUYsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFLLGFBQUEsR0FB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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xcode.js","names":["_support","require","_path","_interopRequireDefault","_asyncbox","_lodash","_teen_process","_semver","_helpers","DEFAULT_NUMBER_OF_RETRIES","XCODE_BUNDLE_ID","log","logger","getLogger","getPathFromXcodeSelect","timeout","XCRUN_TIMEOUT","generateErrorMessage","prefix","xcodePaths","findAppPaths","_","isEmpty","proposals","map","p","path","join","length","stdout","exec","e","errorAndThrow","stderr","message","developerRoot","replace","trim","CFBundleIdentifier","readXcodePlist","getPathFromDeveloperDir","process","env","DEVELOPER_DIR","getPath","memoize","exports","getVersionWithoutRetry","developerPath","CFBundleShortVersionString","semver","coerce","getVersionMemoized","retries","retry","getVersion","parse","version","versionString","patch","major","minor","versionFloat","parseFloat","undefined","toString","getClangVersion","fs","which","info","match","getMaxIOSSDKWithoutRetry","args","runXcrunCommand","sdkVersion","Error","getMaxIOSSDK","getMaxTVOSSDKWithoutRetry","isNaN","getMaxTVOSSDK"],"sources":["../../lib/xcode.js"],"sourcesContent":["import { fs, logger } from '@appium/support';\nimport path from 'path';\nimport { retry } from 'asyncbox';\nimport _ from 'lodash';\nimport { exec } from 'teen_process';\nimport semver from 'semver';\nimport {\n runXcrunCommand, findAppPaths, XCRUN_TIMEOUT, readXcodePlist\n} from './helpers';\n\nconst DEFAULT_NUMBER_OF_RETRIES = 2;\nconst XCODE_BUNDLE_ID = 'com.apple.dt.Xcode';\n\nconst log = logger.getLogger('Xcode');\n\n/**\n * Retrieves the full path to Xcode Developer subfolder via xcode-select\n *\n * @param {number} timeout The maximum timeout for xcode-select execution\n * @returns {Promise<string>} Full path to Xcode Developer subfolder\n * @throws {Error} If it is not possible to retrieve a proper path\n */\nasync function getPathFromXcodeSelect (timeout = XCRUN_TIMEOUT) {\n const generateErrorMessage = async (prefix) => {\n const xcodePaths = await findAppPaths(XCODE_BUNDLE_ID);\n if (_.isEmpty(xcodePaths)) {\n return `${prefix}. Consider installing Xcode to address this issue.`;\n }\n\n const proposals = xcodePaths.map((p) => ` sudo xcode-select -s \"${path.join(p, 'Contents', 'Developer')}\"`);\n return `${prefix}. ` +\n `Consider running${proposals.length > 1 ? ' any of' : ''}:\\n${proposals.join('\\n')}\\nto address this issue.`;\n };\n\n let stdout;\n try {\n ({stdout} = await exec('xcode-select', ['--print-path'], {timeout}));\n } catch (e) {\n log.errorAndThrow(`Cannot determine the path to Xcode by running 'xcode-select -p' command. ` +\n `Original error: ${e.stderr || e.message}`);\n }\n // trim and remove trailing slash\n const developerRoot = stdout.replace(/\\/$/, '').trim();\n if (!developerRoot) {\n log.errorAndThrow(await generateErrorMessage(`'xcode-select -p' returned an empty string`));\n }\n // xcode-select might also return a path to command line tools\n const {CFBundleIdentifier} = await readXcodePlist(developerRoot);\n if (CFBundleIdentifier === XCODE_BUNDLE_ID) {\n return developerRoot;\n }\n\n log.errorAndThrow(await generateErrorMessage(`'${developerRoot}' is not a valid Xcode path`));\n}\n\n/**\n * Retrieves the full path to Xcode Developer subfolder via DEVELOPER_DIR environment variable\n *\n * @returns {Promise<string>} Full path to Xcode Developer subfolder\n * @throws {Error} If it is not possible to retrieve a proper path\n */\nasync function getPathFromDeveloperDir () {\n const developerRoot = process.env.DEVELOPER_DIR;\n const {CFBundleIdentifier} = await readXcodePlist(developerRoot);\n if (CFBundleIdentifier === XCODE_BUNDLE_ID) {\n return developerRoot;\n }\n\n log.errorAndThrow(`The path to Xcode Developer dir '${developerRoot}' provided in DEVELOPER_DIR ` +\n `environment variable is not a valid path`);\n}\n\n/**\n * Retrieves the full path to Xcode Developer subfolder.\n * If DEVELOPER_DIR environment variable is provided then its value has a priority.\n *\n * @property {number} timeout [15000] The maximum timeout for xcode-select execution\n * @returns {string} Full path to Xcode Developer subfolder\n * @throws {Error} If there was an error while retrieving the path.\n */\nconst getPath = _.memoize(function getPath (timeout = XCRUN_TIMEOUT) {\n return process.env.DEVELOPER_DIR ? getPathFromDeveloperDir() : getPathFromXcodeSelect(timeout);\n});\n\n/**\n * Retrieves Xcode version\n *\n * @param {number} timeout [15000] Timeout of milliseconds to wait for terminal commands.\n * @returns {Promise<import(\"semver\").SemVer | null>} Xcode version\n * @throws {Error} If there was a failure while retrieving the version\n */\nasync function getVersionWithoutRetry (timeout = XCRUN_TIMEOUT) {\n const developerPath = await getPath(timeout);\n // we want to read the CFBundleShortVersionString from Xcode's plist.\n const {CFBundleShortVersionString} = await readXcodePlist(developerPath);\n return semver.coerce(CFBundleShortVersionString);\n}\n\n/**\n * Retrieves Xcode version or the cached one if called more than once\n *\n * @param {number} retries [2] How many retries to apply for version retrieval\n * @param {number} timeout [15000] Timeout of milliseconds to wait for terminal commands\n * @returns {Promise<import(\"semver\").SemVer | null>} Xcode version\n * @throws {Error} If there was a failure while retrieving the version\n */\nconst getVersionMemoized = _.memoize(\n function getVersionMemoized (retries = DEFAULT_NUMBER_OF_RETRIES, timeout = XCRUN_TIMEOUT) {\n return retry(retries, getVersionWithoutRetry, timeout);\n }\n);\n\n/**\n * @typedef {Object} XcodeVersion\n * @property {string} versionString Xcode version as a string\n * @property {number} versionFloat Xcode version as a float number\n * @property {number} major Major number of Xcode version\n * @property {number} minor Minor number of Xcode version\n * @property {number?} patch Patch number of Xcode version (if exists)\n */\n\n/**\n * Retrieves Xcode version\n *\n * @param {boolean} parse [false] Whether to parse the version to a XcodeVersion version\n * @param {number} retries [2] How many retries to apply for getting the version number\n * @param {number} timeout [15000] Timeout of milliseconds to wait for terminal commands\n * @returns {Promise<XcodeVersion | string>} Xcode version depending on the value of `parse` flag\n * @throws {Error} If there was a failure while retrieving the version\n */\nasync function getVersion (parse = false, retries = DEFAULT_NUMBER_OF_RETRIES, timeout = XCRUN_TIMEOUT) {\n const version = await getVersionMemoized(retries, timeout);\n // xcode version strings are not exactly semver string: patch versions of 0\n // are removed (e.g., '10.0.0' => '10.0')\n const versionString = version.patch > 0 ? version.version : `${version.major}.${version.minor}`;\n if (!parse) {\n return versionString;\n }\n\n return {\n versionString,\n versionFloat: parseFloat(versionString),\n major: version.major,\n minor: version.minor,\n patch: version.patch > 0 ? version.patch : undefined,\n toString () {\n return versionString;\n },\n };\n}\n\n/**\n * Check https://trac.macports.org/wiki/XcodeVersionInfo\n * to see the actual mapping between clang and other components.\n *\n * @returns {Promise<string?>} The actual Clang version in x.x.x.x or x.x.x format,\n * which is supplied with Command Line Tools. `null` is returned\n * if CLT are not installed.\n */\nasync function getClangVersion () {\n try {\n await fs.which('clang');\n } catch (e) {\n log.info('Cannot find clang executable on the local system. ' +\n 'Are Xcode Command Line Tools installed?');\n return null;\n }\n const {stdout} = await exec('clang', ['--version']);\n const match = /clang-([0-9.]+)/.exec(stdout);\n if (!match) {\n log.info(`Cannot parse clang version from ${stdout}`);\n return null;\n }\n return match[1];\n}\n\n/**\n * Retrieves the maximum version of iOS SDK supported by the installed Xcode\n *\n * @param {number} timeout [15000] Timeout of milliseconds to wait for terminal commands\n * @returns {string} The SDK version\n * @throws {Error} If the SDK version number cannot be determined\n */\nasync function getMaxIOSSDKWithoutRetry (timeout = XCRUN_TIMEOUT) {\n const args = ['--sdk', 'iphonesimulator', '--show-sdk-version'];\n const {stdout} = await runXcrunCommand(args, timeout);\n const sdkVersion = stdout.trim();\n const match = /\\d.\\d/.exec(stdout);\n if (!match) {\n throw new Error(`xcrun returned a non-numeric iOS SDK version: '${sdkVersion}'`);\n }\n return sdkVersion;\n}\n\n/**\n * Retrieves the maximum version of iOS SDK supported by the installed Xcode\n *\n * @param {number} timeout [15000] Timeout of milliseconds to wait for terminal commands\n * @param {number} retries [2] The maximum number of retries\n * @returns {string} The SDK version\n * @throws {Error} If the SDK version number cannot be determined\n */\nconst getMaxIOSSDK = _.memoize(\n function getMaxIOSSDK (retries = DEFAULT_NUMBER_OF_RETRIES, timeout = XCRUN_TIMEOUT) {\n return retry(retries, getMaxIOSSDKWithoutRetry, timeout);\n }\n);\n\n/**\n * Retrieves the maximum version of tvOS SDK supported by the installed Xcode\n *\n * @param {number} timeout [15000] Timeout of milliseconds to wait for terminal commands\n * @returns {string} The SDK version\n * @throws {Error} If the SDK version number cannot be determined\n */\nasync function getMaxTVOSSDKWithoutRetry (timeout = XCRUN_TIMEOUT) {\n const args = ['--sdk', 'appletvsimulator', '--show-sdk-version'];\n const {stdout} = await runXcrunCommand(args, timeout);\n const sdkVersion = stdout.trim();\n if (isNaN(parseFloat(sdkVersion))) {\n throw new Error(`xcrun returned a non-numeric tvOS SDK version: '${sdkVersion}'`);\n }\n return sdkVersion;\n}\n\n/**\n * Retrieves the maximum version of tvOS SDK supported by the installed Xcode\n *\n * @param {number} timeout [15000] Timeout of milliseconds to wait for terminal commands\n * @param {number} retries [2] The maximum number of retries\n * @returns {string} The SDK version\n * @throws {Error} If the SDK version number cannot be determined\n */\nconst getMaxTVOSSDK = _.memoize(\n function getMaxTVOSSDK (retries = DEFAULT_NUMBER_OF_RETRIES, timeout = XCRUN_TIMEOUT) {\n return retry(retries, getMaxTVOSSDKWithoutRetry, timeout);\n }\n);\n\nexport {\n getPath, getVersion, getMaxIOSSDK, getMaxIOSSDKWithoutRetry,\n getMaxTVOSSDK, getMaxTVOSSDKWithoutRetry, getClangVersion,\n getPathFromDeveloperDir, getPathFromXcodeSelect,\n};\n"],"mappings":"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"}
package/lib/xcode.js CHANGED
@@ -29,7 +29,7 @@ async function getPathFromXcodeSelect (timeout = XCRUN_TIMEOUT) {
29
29
 
30
30
  const proposals = xcodePaths.map((p) => ` sudo xcode-select -s "${path.join(p, 'Contents', 'Developer')}"`);
31
31
  return `${prefix}. ` +
32
- `Consider running${proposals.length > 1 ? ' any of' : ''}:\n${'\n'.join(proposals)}\nto address this issue.`;
32
+ `Consider running${proposals.length > 1 ? ' any of' : ''}:\n${proposals.join('\n')}\nto address this issue.`;
33
33
  };
34
34
 
35
35
  let stdout;
package/package.json CHANGED
@@ -6,7 +6,7 @@
6
6
  "ios",
7
7
  "xcode"
8
8
  ],
9
- "version": "5.0.0",
9
+ "version": "5.0.2",
10
10
  "author": "Appium Contributors",
11
11
  "license": "Apache-2.0",
12
12
  "repository": {
@@ -90,6 +90,6 @@
90
90
  "mocha": "^10.0.0",
91
91
  "pre-commit": "^1.1.3",
92
92
  "prettier": "^2.7.1",
93
- "semantic-release": "^19.0.2"
93
+ "semantic-release": "^20.0.2"
94
94
  }
95
95
  }