appium-xcode 5.1.7 → 5.2.1

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.2.1](https://github.com/appium/appium-xcode/compare/v5.2.0...v5.2.1) (2023-08-31)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * Tune package.json ([98db315](https://github.com/appium/appium-xcode/commit/98db315fc7b7614a86757dfb31b1bae2ea9ed2b2))
7
+
8
+ ## [5.2.0](https://github.com/appium/appium-xcode/compare/v5.1.7...v5.2.0) (2023-08-31)
9
+
10
+
11
+ ### Features
12
+
13
+ * Switch babel to typescript ([#97](https://github.com/appium/appium-xcode/issues/97)) ([96f85f0](https://github.com/appium/appium-xcode/commit/96f85f0f69fd329503b709c902ab614a6091dfe6))
14
+
1
15
  ## [5.1.7](https://github.com/appium/appium-xcode/compare/v5.1.6...v5.1.7) (2023-08-28)
2
16
 
3
17
 
@@ -1,55 +1,78 @@
1
1
  "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- Object.defineProperty(exports, "__esModule", {
5
- value: true
6
- });
7
- exports.XCRUN_TIMEOUT = void 0;
8
- exports.findAppPaths = findAppPaths;
9
- exports.readXcodePlist = readXcodePlist;
10
- exports.runXcrunCommand = runXcrunCommand;
11
- require("source-map-support/register");
12
- var _lodash = _interopRequireDefault(require("lodash"));
13
- var _bluebird = _interopRequireDefault(require("bluebird"));
14
- var _teen_process = require("teen_process");
15
- var _support = require("@appium/support");
16
- var _path = _interopRequireDefault(require("path"));
17
- const XCRUN_TIMEOUT = 15000;
18
- exports.XCRUN_TIMEOUT = XCRUN_TIMEOUT;
19
- async function runXcrunCommand(args, timeout = XCRUN_TIMEOUT) {
20
- try {
21
- return await (0, _teen_process.exec)('xcrun', args, {
22
- timeout
23
- });
24
- } catch (err) {
25
- if (err.stderr) {
26
- err.message = `${err.message}: ${err.stderr}`;
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.readXcodePlist = exports.findAppPaths = exports.runXcrunCommand = exports.XCRUN_TIMEOUT = void 0;
7
+ const lodash_1 = __importDefault(require("lodash"));
8
+ const bluebird_1 = __importDefault(require("bluebird"));
9
+ const teen_process_1 = require("teen_process");
10
+ const support_1 = require("@appium/support");
11
+ const path_1 = __importDefault(require("path"));
12
+ exports.XCRUN_TIMEOUT = 15000;
13
+ /**
14
+ * Executes 'xcrun' command line utility
15
+ *
16
+ * @param {string[]} args xcrun arguments
17
+ * @param {number} timeout [15000] The maximum number of milliseconds to wait until xcrun exists
18
+ * @returns {Promise<import("teen_process").TeenProcessExecResult>} The result of xcrun execution
19
+ * @throws {Error} If xcrun returned non-zero exit code or timed out
20
+ */
21
+ async function runXcrunCommand(args, timeout = exports.XCRUN_TIMEOUT) {
22
+ try {
23
+ return await (0, teen_process_1.exec)('xcrun', args, { timeout });
24
+ }
25
+ catch (err) {
26
+ // the true error can be hidden within the stderr
27
+ if (err.stderr) {
28
+ err.message = `${err.message}: ${err.stderr}`;
29
+ }
30
+ throw err;
27
31
  }
28
- throw err;
29
- }
30
32
  }
33
+ exports.runXcrunCommand = runXcrunCommand;
34
+ /**
35
+ * Uses macOS Spotlight service to detect where the given app is installed
36
+ *
37
+ * @param {string} bundleId Bundle identifier of the target app
38
+ * @returns {Promise<string[]>} Full paths to where the app with the given bundle id is present.
39
+ */
31
40
  async function findAppPaths(bundleId) {
32
- let stdout;
33
- try {
34
- ({
35
- stdout
36
- } = await (0, _teen_process.exec)('/usr/bin/mdfind', [`kMDItemCFBundleIdentifier=${bundleId}`]));
37
- } catch (e) {
38
- return [];
39
- }
40
- const matchedPaths = _lodash.default.trim(stdout).split('\n').map(_lodash.default.trim).filter(Boolean);
41
- if (_lodash.default.isEmpty(matchedPaths)) {
42
- return [];
43
- }
44
- const results = matchedPaths.map(p => (async () => {
45
- if (await _support.fs.exists(p)) {
46
- return p;
41
+ let stdout;
42
+ try {
43
+ ({ stdout } = await (0, teen_process_1.exec)('/usr/bin/mdfind', [
44
+ `kMDItemCFBundleIdentifier=${bundleId}`
45
+ ]));
47
46
  }
48
- })());
49
- return (await _bluebird.default.all(results)).filter(Boolean);
47
+ catch (e) {
48
+ return [];
49
+ }
50
+ const matchedPaths = lodash_1.default.trim(stdout)
51
+ .split('\n')
52
+ .map(lodash_1.default.trim)
53
+ .filter(Boolean);
54
+ if (lodash_1.default.isEmpty(matchedPaths)) {
55
+ return [];
56
+ }
57
+ const results = matchedPaths.map((p) => (async () => {
58
+ if (await support_1.fs.exists(p)) {
59
+ return p;
60
+ }
61
+ })());
62
+ return /** @type {string[]} */ (await bluebird_1.default.all(results)).filter(Boolean);
50
63
  }
64
+ exports.findAppPaths = findAppPaths;
65
+ /**
66
+ * Finds and retrieves the content of the Xcode's Info.plist file
67
+ *
68
+ * @param {string} developerRoot Full path to the Contents/Developer folder under Xcode.app root
69
+ * @returns {Promise<object>} All plist entries as an object or an empty object if no plist was found
70
+ */
51
71
  async function readXcodePlist(developerRoot) {
52
- const plistPath = _path.default.resolve(developerRoot, '..', 'Info.plist');
53
- return (await _support.fs.exists(plistPath)) ? await _support.plist.parsePlistFile(plistPath) : {};
72
+ const plistPath = path_1.default.resolve(developerRoot, '..', 'Info.plist');
73
+ return await support_1.fs.exists(plistPath)
74
+ ? await support_1.plist.parsePlistFile(plistPath)
75
+ : {};
54
76
  }
55
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfYmx1ZWJpcmQiLCJfdGVlbl9wcm9jZXNzIiwiX3N1cHBvcnQiLCJfcGF0aCIsIlhDUlVOX1RJTUVPVVQiLCJleHBvcnRzIiwicnVuWGNydW5Db21tYW5kIiwiYXJncyIsInRpbWVvdXQiLCJleGVjIiwiZXJyIiwic3RkZXJyIiwibWVzc2FnZSIsImZpbmRBcHBQYXRocyIsImJ1bmRsZUlkIiwic3Rkb3V0IiwiZSIsIm1hdGNoZWRQYXRocyIsIl8iLCJ0cmltIiwic3BsaXQiLCJtYXAiLCJmaWx0ZXIiLCJCb29sZWFuIiwiaXNFbXB0eSIsInJlc3VsdHMiLCJwIiwiZnMiLCJleGlzdHMiLCJCIiwiYWxsIiwicmVhZFhjb2RlUGxpc3QiLCJkZXZlbG9wZXJSb290IiwicGxpc3RQYXRoIiwicGF0aCIsInJlc29sdmUiLCJwbGlzdCIsInBhcnNlUGxpc3RGaWxlIl0sInNvdXJjZXMiOlsiLi4vLi4vbGliL2hlbHBlcnMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCB7IGV4ZWMgfSBmcm9tICd0ZWVuX3Byb2Nlc3MnO1xuaW1wb3J0IHsgZnMsIHBsaXN0IH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuXG5leHBvcnQgY29uc3QgWENSVU5fVElNRU9VVCA9IDE1MDAwO1xuXG4vKipcbiAqIEV4ZWN1dGVzICd4Y3J1bicgY29tbWFuZCBsaW5lIHV0aWxpdHlcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBhcmdzIHhjcnVuIGFyZ3VtZW50c1xuICogQHBhcmFtIHtudW1iZXJ9IHRpbWVvdXQgWzE1MDAwXSBUaGUgbWF4aW11bSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHdhaXQgdW50aWwgeGNydW4gZXhpc3RzXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxpbXBvcnQoXCJ0ZWVuX3Byb2Nlc3NcIikuVGVlblByb2Nlc3NFeGVjUmVzdWx0Pn0gVGhlIHJlc3VsdCBvZiB4Y3J1biBleGVjdXRpb25cbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB4Y3J1biByZXR1cm5lZCBub24temVybyBleGl0IGNvZGUgb3IgdGltZWQgb3V0XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5YY3J1bkNvbW1hbmQgKGFyZ3MsIHRpbWVvdXQgPSBYQ1JVTl9USU1FT1VUKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IGV4ZWMoJ3hjcnVuJywgYXJncywge3RpbWVvdXR9KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gdGhlIHRydWUgZXJyb3IgY2FuIGJlIGhpZGRlbiB3aXRoaW4gdGhlIHN0ZGVyclxuICAgIGlmIChlcnIuc3RkZXJyKSB7XG4gICAgICBlcnIubWVzc2FnZSA9IGAke2Vyci5tZXNzYWdlfTogJHtlcnIuc3RkZXJyfWA7XG4gICAgfVxuXG4gICAgdGhyb3cgZXJyO1xuICB9XG59XG5cbi8qKlxuICogVXNlcyBtYWNPUyBTcG90bGlnaHQgc2VydmljZSB0byBkZXRlY3Qgd2hlcmUgdGhlIGdpdmVuIGFwcCBpcyBpbnN0YWxsZWRcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYnVuZGxlSWQgQnVuZGxlIGlkZW50aWZpZXIgb2YgdGhlIHRhcmdldCBhcHBcbiAqIEByZXR1cm5zIHtQcm9taXNlPHN0cmluZ1tdPn0gRnVsbCBwYXRocyB0byB3aGVyZSB0aGUgYXBwIHdpdGggdGhlIGdpdmVuIGJ1bmRsZSBpZCBpcyBwcmVzZW50LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmluZEFwcFBhdGhzIChidW5kbGVJZCkge1xuICBsZXQgc3Rkb3V0O1xuICB0cnkge1xuICAgICh7c3Rkb3V0fSA9IGF3YWl0IGV4ZWMoJy91c3IvYmluL21kZmluZCcsIFtcbiAgICAgIGBrTURJdGVtQ0ZCdW5kbGVJZGVudGlmaWVyPSR7YnVuZGxlSWR9YFxuICAgIF0pKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGNvbnN0IG1hdGNoZWRQYXRocyA9IF8udHJpbShzdGRvdXQpXG4gICAgLnNwbGl0KCdcXG4nKVxuICAgIC5tYXAoXy50cmltKVxuICAgIC5maWx0ZXIoQm9vbGVhbik7XG4gIGlmIChfLmlzRW1wdHkobWF0Y2hlZFBhdGhzKSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBjb25zdCByZXN1bHRzID0gbWF0Y2hlZFBhdGhzLm1hcCgocCkgPT4gKGFzeW5jICgpID0+IHtcbiAgICBpZiAoYXdhaXQgZnMuZXhpc3RzKHApKSB7XG4gICAgICByZXR1cm4gcDtcbiAgICB9XG4gIH0pKCkpO1xuICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmdbXX0gKi8oYXdhaXQgQi5hbGwocmVzdWx0cykpLmZpbHRlcihCb29sZWFuKTtcbn1cblxuLyoqXG4gKiBGaW5kcyBhbmQgcmV0cmlldmVzIHRoZSBjb250ZW50IG9mIHRoZSBYY29kZSdzIEluZm8ucGxpc3QgZmlsZVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBkZXZlbG9wZXJSb290IEZ1bGwgcGF0aCB0byB0aGUgQ29udGVudHMvRGV2ZWxvcGVyIGZvbGRlciB1bmRlciBYY29kZS5hcHAgcm9vdFxuICogQHJldHVybnMge1Byb21pc2U8b2JqZWN0Pn0gQWxsIHBsaXN0IGVudHJpZXMgYXMgYW4gb2JqZWN0IG9yIGFuIGVtcHR5IG9iamVjdCBpZiBubyBwbGlzdCB3YXMgZm91bmRcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRYY29kZVBsaXN0IChkZXZlbG9wZXJSb290KSB7XG4gIGNvbnN0IHBsaXN0UGF0aCA9IHBhdGgucmVzb2x2ZShkZXZlbG9wZXJSb290LCAnLi4nLCAnSW5mby5wbGlzdCcpO1xuICByZXR1cm4gYXdhaXQgZnMuZXhpc3RzKHBsaXN0UGF0aClcbiAgICA/IGF3YWl0IHBsaXN0LnBhcnNlUGxpc3RGaWxlKHBsaXN0UGF0aClcbiAgICA6IHt9O1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBLElBQUFBLE9BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLFNBQUEsR0FBQUYsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFFLGFBQUEsR0FBQUYsT0FBQTtBQUNBLElBQUFHLFFBQUEsR0FBQUgsT0FBQTtBQUNBLElBQUFJLEtBQUEsR0FBQUwsc0JBQUEsQ0FBQUMsT0FBQTtBQUVPLE1BQU1LLGFBQWEsR0FBRyxLQUFLO0FBQUNDLE9BQUEsQ0FBQUQsYUFBQSxHQUFBQSxhQUFBO0FBVTVCLGVBQWVFLGVBQWVBLENBQUVDLElBQUksRUFBRUMsT0FBTyxHQUFHSixhQUFhLEVBQUU7RUFDcEUsSUFBSTtJQUNGLE9BQU8sTUFBTSxJQUFBSyxrQkFBSSxFQUFDLE9BQU8sRUFBRUYsSUFBSSxFQUFFO01BQUNDO0lBQU8sQ0FBQyxDQUFDO0VBQzdDLENBQUMsQ0FBQyxPQUFPRSxHQUFHLEVBQUU7SUFFWixJQUFJQSxHQUFHLENBQUNDLE1BQU0sRUFBRTtNQUNkRCxHQUFHLENBQUNFLE9BQU8sR0FBSSxHQUFFRixHQUFHLENBQUNFLE9BQVEsS0FBSUYsR0FBRyxDQUFDQyxNQUFPLEVBQUM7SUFDL0M7SUFFQSxNQUFNRCxHQUFHO0VBQ1g7QUFDRjtBQVFPLGVBQWVHLFlBQVlBLENBQUVDLFFBQVEsRUFBRTtFQUM1QyxJQUFJQyxNQUFNO0VBQ1YsSUFBSTtJQUNGLENBQUM7TUFBQ0E7SUFBTSxDQUFDLEdBQUcsTUFBTSxJQUFBTixrQkFBSSxFQUFDLGlCQUFpQixFQUFFLENBQ3ZDLDZCQUE0QkssUUFBUyxFQUFDLENBQ3hDLENBQUM7RUFDSixDQUFDLENBQUMsT0FBT0UsQ0FBQyxFQUFFO0lBQ1YsT0FBTyxFQUFFO0VBQ1g7RUFFQSxNQUFNQyxZQUFZLEdBQUdDLGVBQUMsQ0FBQ0MsSUFBSSxDQUFDSixNQUFNLENBQUMsQ0FDaENLLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FDWEMsR0FBRyxDQUFDSCxlQUFDLENBQUNDLElBQUksQ0FBQyxDQUNYRyxNQUFNLENBQUNDLE9BQU8sQ0FBQztFQUNsQixJQUFJTCxlQUFDLENBQUNNLE9BQU8sQ0FBQ1AsWUFBWSxDQUFDLEVBQUU7SUFDM0IsT0FBTyxFQUFFO0VBQ1g7RUFDQSxNQUFNUSxPQUFPLEdBQUdSLFlBQVksQ0FBQ0ksR0FBRyxDQUFFSyxDQUFDLElBQUssQ0FBQyxZQUFZO0lBQ25ELElBQUksTUFBTUMsV0FBRSxDQUFDQyxNQUFNLENBQUNGLENBQUMsQ0FBQyxFQUFFO01BQ3RCLE9BQU9BLENBQUM7SUFDVjtFQUNGLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDTCxPQUE4QixDQUFDLE1BQU1HLGlCQUFDLENBQUNDLEdBQUcsQ0FBQ0wsT0FBTyxDQUFDLEVBQUVILE1BQU0sQ0FBQ0MsT0FBTyxDQUFDO0FBQ3RFO0FBUU8sZUFBZVEsY0FBY0EsQ0FBRUMsYUFBYSxFQUFFO0VBQ25ELE1BQU1DLFNBQVMsR0FBR0MsYUFBSSxDQUFDQyxPQUFPLENBQUNILGFBQWEsRUFBRSxJQUFJLEVBQUUsWUFBWSxDQUFDO0VBQ2pFLE9BQU8sT0FBTUwsV0FBRSxDQUFDQyxNQUFNLENBQUNLLFNBQVMsQ0FBQyxJQUM3QixNQUFNRyxjQUFLLENBQUNDLGNBQWMsQ0FBQ0osU0FBUyxDQUFDLEdBQ3JDLENBQUMsQ0FBQztBQUNSIn0=
77
+ exports.readXcodePlist = readXcodePlist;
78
+ //# sourceMappingURL=helpers.js.map
@@ -1 +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\").TeenProcessExecResult>} 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 /** @type {string[]} */(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,EAAE,CAAC,CAAC;EACL,OAA8B,CAAC,MAAMG,iBAAC,CAACC,GAAG,CAACL,OAAO,CAAC,EAAEH,MAAM,CAACC,OAAO,CAAC;AACtE;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
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../lib/helpers.js"],"names":[],"mappings":";;;;;;AAAA,oDAAuB;AACvB,wDAAyB;AACzB,+CAAoC;AACpC,6CAA4C;AAC5C,gDAAwB;AAEX,QAAA,aAAa,GAAG,KAAK,CAAC;AAEnC;;;;;;;GAOG;AACI,KAAK,UAAU,eAAe,CAAE,IAAI,EAAE,OAAO,GAAG,qBAAa;IAClE,IAAI;QACF,OAAO,MAAM,IAAA,mBAAI,EAAC,OAAO,EAAE,IAAI,EAAE,EAAC,OAAO,EAAC,CAAC,CAAC;KAC7C;IAAC,OAAO,GAAG,EAAE;QACZ,iDAAiD;QACjD,IAAI,GAAG,CAAC,MAAM,EAAE;YACd,GAAG,CAAC,OAAO,GAAG,GAAG,GAAG,CAAC,OAAO,KAAK,GAAG,CAAC,MAAM,EAAE,CAAC;SAC/C;QAED,MAAM,GAAG,CAAC;KACX;AACH,CAAC;AAXD,0CAWC;AAED;;;;;GAKG;AACI,KAAK,UAAU,YAAY,CAAE,QAAQ;IAC1C,IAAI,MAAM,CAAC;IACX,IAAI;QACF,CAAC,EAAC,MAAM,EAAC,GAAG,MAAM,IAAA,mBAAI,EAAC,iBAAiB,EAAE;YACxC,6BAA6B,QAAQ,EAAE;SACxC,CAAC,CAAC,CAAC;KACL;IAAC,OAAO,CAAC,EAAE;QACV,OAAO,EAAE,CAAC;KACX;IAED,MAAM,YAAY,GAAG,gBAAC,CAAC,IAAI,CAAC,MAAM,CAAC;SAChC,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,gBAAC,CAAC,IAAI,CAAC;SACX,MAAM,CAAC,OAAO,CAAC,CAAC;IACnB,IAAI,gBAAC,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;QAC3B,OAAO,EAAE,CAAC;KACX;IACD,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,EAAE;QAClD,IAAI,MAAM,YAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;YACtB,OAAO,CAAC,CAAC;SACV;IACH,CAAC,CAAC,EAAE,CAAC,CAAC;IACN,OAAO,uBAAuB,CAAA,CAAC,MAAM,kBAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AACvE,CAAC;AAvBD,oCAuBC;AAED;;;;;GAKG;AACI,KAAK,UAAU,cAAc,CAAE,aAAa;IACjD,MAAM,SAAS,GAAG,cAAI,CAAC,OAAO,CAAC,aAAa,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;IAClE,OAAO,MAAM,YAAE,CAAC,MAAM,CAAC,SAAS,CAAC;QAC/B,CAAC,CAAC,MAAM,eAAK,CAAC,cAAc,CAAC,SAAS,CAAC;QACvC,CAAC,CAAC,EAAE,CAAC;AACT,CAAC;AALD,wCAKC"}
@@ -1,48 +1,22 @@
1
1
  "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
- Object.defineProperty(exports, "getClangVersion", {
8
- enumerable: true,
9
- get: function () {
10
- return _xcode.getClangVersion;
11
- }
12
- });
13
- Object.defineProperty(exports, "getMaxIOSSDK", {
14
- enumerable: true,
15
- get: function () {
16
- return _xcode.getMaxIOSSDK;
17
- }
18
- });
19
- Object.defineProperty(exports, "getMaxTVOSSDK", {
20
- enumerable: true,
21
- get: function () {
22
- return _xcode.getMaxTVOSSDK;
23
- }
24
- });
25
- Object.defineProperty(exports, "getPath", {
26
- enumerable: true,
27
- get: function () {
28
- return _xcode.getPath;
29
- }
30
- });
31
- Object.defineProperty(exports, "getVersion", {
32
- enumerable: true,
33
- get: function () {
34
- return _xcode.getVersion;
35
- }
36
- });
37
- require("source-map-support/register");
38
- var _xcode = require("./xcode");
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getClangVersion = exports.getMaxTVOSSDK = exports.getMaxIOSSDK = exports.getVersion = exports.getPath = void 0;
4
+ // transpile:main
5
+ const xcode_1 = require("./xcode");
6
+ Object.defineProperty(exports, "getPath", { enumerable: true, get: function () { return xcode_1.getPath; } });
7
+ Object.defineProperty(exports, "getVersion", { enumerable: true, get: function () { return xcode_1.getVersion; } });
8
+ Object.defineProperty(exports, "getMaxIOSSDK", { enumerable: true, get: function () { return xcode_1.getMaxIOSSDK; } });
9
+ Object.defineProperty(exports, "getMaxTVOSSDK", { enumerable: true, get: function () { return xcode_1.getMaxTVOSSDK; } });
10
+ Object.defineProperty(exports, "getClangVersion", { enumerable: true, get: function () { return xcode_1.getClangVersion; } });
39
11
  const xcode = {
40
- getPath: _xcode.getPath,
41
- getVersion: _xcode.getVersion,
42
- getMaxIOSSDK: _xcode.getMaxIOSSDK,
43
- getMaxTVOSSDK: _xcode.getMaxTVOSSDK,
44
- getClangVersion: _xcode.getClangVersion
12
+ getPath: xcode_1.getPath,
13
+ getVersion: xcode_1.getVersion,
14
+ getMaxIOSSDK: xcode_1.getMaxIOSSDK,
15
+ getMaxTVOSSDK: xcode_1.getMaxTVOSSDK,
16
+ getClangVersion: xcode_1.getClangVersion
45
17
  };
46
- var _default = xcode;
47
- exports.default = _default;
48
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfeGNvZGUiLCJyZXF1aXJlIiwieGNvZGUiLCJnZXRQYXRoIiwiZ2V0VmVyc2lvbiIsImdldE1heElPU1NESyIsImdldE1heFRWT1NTREsiLCJnZXRDbGFuZ1ZlcnNpb24iLCJfZGVmYXVsdCIsImV4cG9ydHMiLCJkZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vLi4vbGliL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIHRyYW5zcGlsZTptYWluXG5pbXBvcnQge1xuICBnZXRQYXRoLFxuICBnZXRWZXJzaW9uLFxuICBnZXRNYXhJT1NTREssXG4gIGdldE1heFRWT1NTREssXG4gIGdldENsYW5nVmVyc2lvbixcbn0gZnJvbSAnLi94Y29kZSc7XG5cbmNvbnN0IHhjb2RlID0ge1xuICBnZXRQYXRoLFxuICBnZXRWZXJzaW9uLFxuICBnZXRNYXhJT1NTREssXG4gIGdldE1heFRWT1NTREssXG4gIGdldENsYW5nVmVyc2lvblxufTtcblxuZXhwb3J0IHtcbiAgZ2V0UGF0aCxcbiAgZ2V0VmVyc2lvbixcbiAgZ2V0TWF4SU9TU0RLLFxuICBnZXRNYXhUVk9TU0RLLFxuICBnZXRDbGFuZ1ZlcnNpb25cbn07XG5leHBvcnQgZGVmYXVsdCB4Y29kZTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuL3hjb2RlJykuWGNvZGVWZXJzaW9ufSBYY29kZVZlcnNpb25cbiAqL1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0EsSUFBQUEsTUFBQSxHQUFBQyxPQUFBO0FBUUEsTUFBTUMsS0FBSyxHQUFHO0VBQ1pDLE9BQU8sRUFBUEEsY0FBTztFQUNQQyxVQUFVLEVBQVZBLGlCQUFVO0VBQ1ZDLFlBQVksRUFBWkEsbUJBQVk7RUFDWkMsYUFBYSxFQUFiQSxvQkFBYTtFQUNiQyxlQUFlLEVBQWZBO0FBQ0YsQ0FBQztBQUFDLElBQUFDLFFBQUEsR0FTYU4sS0FBSztBQUFBTyxPQUFBLENBQUFDLE9BQUEsR0FBQUYsUUFBQSJ9
18
+ exports.default = xcode;
19
+ /**
20
+ * @typedef {import('./xcode').XcodeVersion} XcodeVersion
21
+ */
22
+ //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["_xcode","require","xcode","getPath","getVersion","getMaxIOSSDK","getMaxTVOSSDK","getClangVersion","_default","exports","default"],"sources":["../../lib/index.js"],"sourcesContent":["// transpile:main\nimport {\n getPath,\n getVersion,\n getMaxIOSSDK,\n getMaxTVOSSDK,\n getClangVersion,\n} from './xcode';\n\nconst xcode = {\n getPath,\n getVersion,\n getMaxIOSSDK,\n getMaxTVOSSDK,\n getClangVersion\n};\n\nexport {\n getPath,\n getVersion,\n getMaxIOSSDK,\n getMaxTVOSSDK,\n getClangVersion\n};\nexport default xcode;\n\n/**\n * @typedef {import('./xcode').XcodeVersion} XcodeVersion\n */\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,IAAAA,MAAA,GAAAC,OAAA;AAQA,MAAMC,KAAK,GAAG;EACZC,OAAO,EAAPA,cAAO;EACPC,UAAU,EAAVA,iBAAU;EACVC,YAAY,EAAZA,mBAAY;EACZC,aAAa,EAAbA,oBAAa;EACbC,eAAe,EAAfA;AACF,CAAC;AAAC,IAAAC,QAAA,GASaN,KAAK;AAAAO,OAAA,CAAAC,OAAA,GAAAF,QAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../lib/index.js"],"names":[],"mappings":";;;AAAA,iBAAiB;AACjB,mCAMiB;AAWf,wFAhBA,eAAO,OAgBA;AACP,2FAhBA,kBAAU,OAgBA;AACV,6FAhBA,oBAAY,OAgBA;AACZ,8FAhBA,qBAAa,OAgBA;AACb,gGAhBA,uBAAe,OAgBA;AAbjB,MAAM,KAAK,GAAG;IACZ,OAAO,EAAP,eAAO;IACP,UAAU,EAAV,kBAAU;IACV,YAAY,EAAZ,oBAAY;IACZ,aAAa,EAAb,qBAAa;IACb,eAAe,EAAf,uBAAe;CAChB,CAAC;AASF,kBAAe,KAAK,CAAC;AAErB;;GAEG"}
@@ -1,153 +1,248 @@
1
1
  "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- Object.defineProperty(exports, "__esModule", {
5
- value: true
6
- });
7
- exports.getClangVersion = getClangVersion;
8
- exports.getMaxIOSSDK = void 0;
9
- exports.getMaxIOSSDKWithoutRetry = getMaxIOSSDKWithoutRetry;
10
- exports.getMaxTVOSSDK = void 0;
11
- exports.getMaxTVOSSDKWithoutRetry = getMaxTVOSSDKWithoutRetry;
12
- exports.getPath = void 0;
13
- exports.getPathFromDeveloperDir = getPathFromDeveloperDir;
14
- exports.getPathFromXcodeSelect = getPathFromXcodeSelect;
15
- exports.getVersion = getVersion;
16
- require("source-map-support/register");
17
- var _support = require("@appium/support");
18
- var _path = _interopRequireDefault(require("path"));
19
- var _asyncbox = require("asyncbox");
20
- var _lodash = _interopRequireDefault(require("lodash"));
21
- var _teen_process = require("teen_process");
22
- var _semver = _interopRequireDefault(require("semver"));
23
- var _helpers = require("./helpers");
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getPathFromXcodeSelect = exports.getPathFromDeveloperDir = exports.getClangVersion = exports.getMaxTVOSSDKWithoutRetry = exports.getMaxTVOSSDK = exports.getMaxIOSSDKWithoutRetry = exports.getMaxIOSSDK = exports.getVersion = exports.getPath = void 0;
7
+ const support_1 = require("@appium/support");
8
+ const path_1 = __importDefault(require("path"));
9
+ const asyncbox_1 = require("asyncbox");
10
+ const lodash_1 = __importDefault(require("lodash"));
11
+ const teen_process_1 = require("teen_process");
12
+ const semver_1 = __importDefault(require("semver"));
13
+ const helpers_1 = require("./helpers");
24
14
  const DEFAULT_NUMBER_OF_RETRIES = 2;
25
15
  const XCODE_BUNDLE_ID = 'com.apple.dt.Xcode';
26
- const log = _support.logger.getLogger('Xcode');
27
- async function getPathFromXcodeSelect(timeout = _helpers.XCRUN_TIMEOUT) {
28
- const generateErrorMessage = async prefix => {
29
- const xcodePaths = await (0, _helpers.findAppPaths)(XCODE_BUNDLE_ID);
30
- if (_lodash.default.isEmpty(xcodePaths)) {
31
- return `${prefix}. Consider installing Xcode to address this issue.`;
16
+ const log = support_1.logger.getLogger('Xcode');
17
+ /**
18
+ * Retrieves the full path to Xcode Developer subfolder via xcode-select
19
+ *
20
+ * @param {number} timeout The maximum timeout for xcode-select execution
21
+ * @returns {Promise<string>} Full path to Xcode Developer subfolder
22
+ * @throws {Error} If it is not possible to retrieve a proper path
23
+ */
24
+ async function getPathFromXcodeSelect(timeout = helpers_1.XCRUN_TIMEOUT) {
25
+ /**
26
+ * @param {string} prefix
27
+ * @returns {Promise<string>}
28
+ */
29
+ const generateErrorMessage = async (prefix) => {
30
+ const xcodePaths = await (0, helpers_1.findAppPaths)(XCODE_BUNDLE_ID);
31
+ if (lodash_1.default.isEmpty(xcodePaths)) {
32
+ return `${prefix}. Consider installing Xcode to address this issue.`;
33
+ }
34
+ const proposals = xcodePaths.map((p) => ` sudo xcode-select -s "${path_1.default.join(p, 'Contents', 'Developer')}"`);
35
+ return `${prefix}. ` +
36
+ `Consider running${proposals.length > 1 ? ' any of' : ''}:\n${proposals.join('\n')}\nto address this issue.`;
37
+ };
38
+ let stdout;
39
+ try {
40
+ ({ stdout } = await (0, teen_process_1.exec)('xcode-select', ['--print-path'], { timeout }));
32
41
  }
33
- const proposals = xcodePaths.map(p => ` sudo xcode-select -s "${_path.default.join(p, 'Contents', 'Developer')}"`);
34
- return `${prefix}. ` + `Consider running${proposals.length > 1 ? ' any of' : ''}:\n${proposals.join('\n')}\nto address this issue.`;
35
- };
36
- let stdout;
37
- try {
38
- ({
39
- stdout
40
- } = await (0, _teen_process.exec)('xcode-select', ['--print-path'], {
41
- timeout
42
- }));
43
- } catch (e) {
44
- const msg = `Cannot determine the path to Xcode by running 'xcode-select -p' command. ` + `Original error: ${e.stderr || e.message}`;
45
- log.error(msg);
46
- throw new Error(msg);
47
- }
48
- const developerRoot = String(stdout).replace(/\/$/, '').trim();
49
- if (!developerRoot) {
50
- const msg = await generateErrorMessage(`'xcode-select -p' returned an empty string`);
42
+ catch (e) {
43
+ const msg = `Cannot determine the path to Xcode by running 'xcode-select -p' command. ` +
44
+ `Original error: ${e.stderr || e.message}`;
45
+ log.error(msg);
46
+ throw new Error(msg);
47
+ }
48
+ // trim and remove trailing slash
49
+ const developerRoot = String(stdout).replace(/\/$/, '').trim();
50
+ if (!developerRoot) {
51
+ const msg = await generateErrorMessage(`'xcode-select -p' returned an empty string`);
52
+ log.error(msg);
53
+ throw new Error(msg);
54
+ }
55
+ // xcode-select might also return a path to command line tools
56
+ const { CFBundleIdentifier } = await (0, helpers_1.readXcodePlist)(developerRoot);
57
+ if (CFBundleIdentifier === XCODE_BUNDLE_ID) {
58
+ return developerRoot;
59
+ }
60
+ const msg = await generateErrorMessage(`'${developerRoot}' is not a valid Xcode path`);
51
61
  log.error(msg);
52
- throw new Error(msg);
53
- }
54
- const {
55
- CFBundleIdentifier
56
- } = await (0, _helpers.readXcodePlist)(developerRoot);
57
- if (CFBundleIdentifier === XCODE_BUNDLE_ID) {
58
- return developerRoot;
59
- }
60
- const msg = await generateErrorMessage(`'${developerRoot}' is not a valid Xcode path`);
61
- log.error(msg);
62
- throw msg;
62
+ throw msg;
63
63
  }
64
+ exports.getPathFromXcodeSelect = getPathFromXcodeSelect;
65
+ /**
66
+ * Retrieves the full path to Xcode Developer subfolder via `DEVELOPER_DIR` environment variable
67
+ *
68
+ * @returns {Promise<string>} Full path to Xcode Developer subfolder
69
+ * @throws {Error} If it is not possible to retrieve a proper path
70
+ * @privateRemarks This method assumes `DEVELOPER_DIR` is defined.
71
+ */
64
72
  async function getPathFromDeveloperDir() {
65
- const developerRoot = process.env.DEVELOPER_DIR;
66
- const {
67
- CFBundleIdentifier
68
- } = await (0, _helpers.readXcodePlist)(developerRoot);
69
- if (CFBundleIdentifier === XCODE_BUNDLE_ID) {
70
- return developerRoot;
71
- }
72
- const msg = `The path to Xcode Developer dir '${developerRoot}' provided in DEVELOPER_DIR ` + `environment variable is not a valid path`;
73
- log.error(msg);
74
- throw new Error(msg);
73
+ const developerRoot = /** @type {string} */ (process.env.DEVELOPER_DIR);
74
+ const { CFBundleIdentifier } = await (0, helpers_1.readXcodePlist)(developerRoot);
75
+ if (CFBundleIdentifier === XCODE_BUNDLE_ID) {
76
+ return developerRoot;
77
+ }
78
+ const msg = `The path to Xcode Developer dir '${developerRoot}' provided in DEVELOPER_DIR ` +
79
+ `environment variable is not a valid path`;
80
+ log.error(msg);
81
+ throw new Error(msg);
75
82
  }
76
- const getPath = _lodash.default.memoize((timeout = _helpers.XCRUN_TIMEOUT) => process.env.DEVELOPER_DIR ? getPathFromDeveloperDir() : getPathFromXcodeSelect(timeout));
83
+ exports.getPathFromDeveloperDir = getPathFromDeveloperDir;
84
+ /**
85
+ * Retrieves the full path to Xcode Developer subfolder.
86
+ * If `DEVELOPER_DIR` environment variable is provided then its value has a priority.
87
+ * @param {number} timeout The maximum timeout for xcode-select execution
88
+ * @returns {Promise<string>} Full path to Xcode Developer subfolder timeout
89
+ * @throws {Error} If there was an error while retrieving the path.
90
+ */
91
+ const getPath = lodash_1.default.memoize(
92
+ /**
93
+ * @param {number} timeout
94
+ * @returns {Promise<string>}
95
+ */
96
+ (timeout = helpers_1.XCRUN_TIMEOUT) => process.env.DEVELOPER_DIR ? getPathFromDeveloperDir() : getPathFromXcodeSelect(timeout));
77
97
  exports.getPath = getPath;
78
- async function getVersionWithoutRetry(timeout = _helpers.XCRUN_TIMEOUT) {
79
- const developerPath = await getPath(timeout);
80
- const {
81
- CFBundleShortVersionString
82
- } = await (0, _helpers.readXcodePlist)(developerPath);
83
- return _semver.default.coerce(CFBundleShortVersionString);
98
+ /**
99
+ * Retrieves Xcode version
100
+ *
101
+ * @param {number} timeout [15000] Timeout of milliseconds to wait for terminal commands.
102
+ * @returns {Promise<import("semver").SemVer | null>} Xcode version
103
+ * @throws {Error} If there was a failure while retrieving the version
104
+ */
105
+ async function getVersionWithoutRetry(timeout = helpers_1.XCRUN_TIMEOUT) {
106
+ const developerPath = await getPath(timeout);
107
+ // we want to read the CFBundleShortVersionString from Xcode's plist.
108
+ const { CFBundleShortVersionString } = await (0, helpers_1.readXcodePlist)(developerPath);
109
+ return semver_1.default.coerce(CFBundleShortVersionString);
84
110
  }
85
- const getVersionMemoized = _lodash.default.memoize(function getVersionMemoized(retries = DEFAULT_NUMBER_OF_RETRIES, timeout = _helpers.XCRUN_TIMEOUT) {
86
- return (0, _asyncbox.retry)(retries, getVersionWithoutRetry, timeout);
111
+ /**
112
+ * Retrieves Xcode version or the cached one if called more than once
113
+ *
114
+ * @param {number} retries How many retries to apply for version retrieval
115
+ * @param {number} timeout Timeout of milliseconds to wait for terminal commands
116
+ * @returns {Promise<import("semver").SemVer | null>} Xcode version
117
+ * @throws {Error} If there was a failure while retrieving the version
118
+ */
119
+ const getVersionMemoized = lodash_1.default.memoize(function getVersionMemoized(retries = DEFAULT_NUMBER_OF_RETRIES, timeout = helpers_1.XCRUN_TIMEOUT) {
120
+ return (0, asyncbox_1.retry)(retries, getVersionWithoutRetry, timeout);
87
121
  });
88
- async function getVersion(parse = false, retries = DEFAULT_NUMBER_OF_RETRIES, timeout = _helpers.XCRUN_TIMEOUT) {
89
- const version = await getVersionMemoized(retries, timeout);
90
- const versionString = version.patch > 0 ? version.version : `${version.major}.${version.minor}`;
91
- if (!parse) {
92
- return versionString;
93
- }
94
- return {
95
- versionString,
96
- versionFloat: parseFloat(versionString),
97
- major: version.major,
98
- minor: version.minor,
99
- patch: version.patch > 0 ? version.patch : undefined,
100
- toString() {
101
- return versionString;
122
+ /**
123
+ * @typedef {Object} XcodeVersion
124
+ * @property {string} versionString Xcode version as a string
125
+ * @property {number} versionFloat Xcode version as a float number
126
+ * @property {number} major Major number of Xcode version
127
+ * @property {number} minor Minor number of Xcode version
128
+ * @property {number} [patch] Patch number of Xcode version (if exists)
129
+ * @property {() => string} toString Returns Xcode version as a string
130
+ */
131
+ /**
132
+ * Retrieves Xcode version
133
+ *
134
+ * @param {boolean} parse [false] Whether to parse the version to a XcodeVersion version
135
+ * @param {number} retries [2] How many retries to apply for getting the version number
136
+ * @param {number} timeout [15000] Timeout of milliseconds to wait for terminal commands
137
+ * @returns {Promise<XcodeVersion | string>} Xcode version depending on the value of `parse` flag
138
+ * @throws {Error} If there was a failure while retrieving the version
139
+ */
140
+ async function getVersion(parse = false, retries = DEFAULT_NUMBER_OF_RETRIES, timeout = helpers_1.XCRUN_TIMEOUT) {
141
+ const version = /** @type {import('semver').SemVer} */ (await getVersionMemoized(retries, timeout));
142
+ // xcode version strings are not exactly semver string: patch versions of 0
143
+ // are removed (e.g., '10.0.0' => '10.0')
144
+ const versionString = version.patch > 0 ? version.version : `${version.major}.${version.minor}`;
145
+ if (!parse) {
146
+ return versionString;
102
147
  }
103
- };
148
+ return {
149
+ versionString,
150
+ versionFloat: parseFloat(versionString),
151
+ major: version.major,
152
+ minor: version.minor,
153
+ patch: version.patch > 0 ? version.patch : undefined,
154
+ toString() {
155
+ return versionString;
156
+ },
157
+ };
104
158
  }
159
+ exports.getVersion = getVersion;
160
+ /**
161
+ * Check https://trac.macports.org/wiki/XcodeVersionInfo
162
+ * to see the actual mapping between clang and other components.
163
+ *
164
+ * @returns {Promise<string|null>} The actual Clang version in x.x.x.x or x.x.x format,
165
+ * which is supplied with Command Line Tools. `null` is returned
166
+ * if CLT are not installed.
167
+ */
105
168
  async function getClangVersion() {
106
- try {
107
- await _support.fs.which('clang');
108
- } catch (e) {
109
- log.info('Cannot find clang executable on the local system. ' + 'Are Xcode Command Line Tools installed?');
110
- return null;
111
- }
112
- const {
113
- stdout
114
- } = await (0, _teen_process.exec)('clang', ['--version']);
115
- const match = /clang-([0-9.]+)/.exec(stdout);
116
- if (!match) {
117
- log.info(`Cannot parse clang version from ${stdout}`);
118
- return null;
119
- }
120
- return match[1];
169
+ try {
170
+ await support_1.fs.which('clang');
171
+ }
172
+ catch (e) {
173
+ log.info('Cannot find clang executable on the local system. ' +
174
+ 'Are Xcode Command Line Tools installed?');
175
+ return null;
176
+ }
177
+ const { stdout } = await (0, teen_process_1.exec)('clang', ['--version']);
178
+ const match = /clang-([0-9.]+)/.exec(stdout);
179
+ if (!match) {
180
+ log.info(`Cannot parse clang version from ${stdout}`);
181
+ return null;
182
+ }
183
+ return match[1];
121
184
  }
122
- async function getMaxIOSSDKWithoutRetry(timeout = _helpers.XCRUN_TIMEOUT) {
123
- const args = ['--sdk', 'iphonesimulator', '--show-sdk-version'];
124
- const {
125
- stdout
126
- } = await (0, _helpers.runXcrunCommand)(args, timeout);
127
- const sdkVersion = stdout.trim();
128
- const match = /\d.\d/.exec(stdout);
129
- if (!match) {
130
- throw new Error(`xcrun returned a non-numeric iOS SDK version: '${sdkVersion}'`);
131
- }
132
- return sdkVersion;
185
+ exports.getClangVersion = getClangVersion;
186
+ /**
187
+ * Retrieves the maximum version of iOS SDK supported by the installed Xcode
188
+ *
189
+ * @param {number} timeout [15000] Timeout of milliseconds to wait for terminal commands
190
+ * @returns {Promise<string>} The SDK version
191
+ * @throws {Error} If the SDK version number cannot be determined
192
+ */
193
+ async function getMaxIOSSDKWithoutRetry(timeout = helpers_1.XCRUN_TIMEOUT) {
194
+ const args = ['--sdk', 'iphonesimulator', '--show-sdk-version'];
195
+ const { stdout } = await (0, helpers_1.runXcrunCommand)(args, timeout);
196
+ const sdkVersion = stdout.trim();
197
+ const match = /\d.\d/.exec(stdout);
198
+ if (!match) {
199
+ throw new Error(`xcrun returned a non-numeric iOS SDK version: '${sdkVersion}'`);
200
+ }
201
+ return sdkVersion;
133
202
  }
134
- const getMaxIOSSDK = _lodash.default.memoize(function getMaxIOSSDK(retries = DEFAULT_NUMBER_OF_RETRIES, timeout = _helpers.XCRUN_TIMEOUT) {
135
- return (0, _asyncbox.retry)(retries, getMaxIOSSDKWithoutRetry, timeout);
203
+ exports.getMaxIOSSDKWithoutRetry = getMaxIOSSDKWithoutRetry;
204
+ /**
205
+ * Retrieves the maximum version of iOS SDK supported by the installed Xcode
206
+ *
207
+ * @param {number} timeout Timeout of milliseconds to wait for terminal commands
208
+ * @param {number} retries The maximum number of retries
209
+ * @returns {string} The SDK version
210
+ * @throws {Error} If the SDK version number cannot be determined
211
+ */
212
+ const getMaxIOSSDK = lodash_1.default.memoize(function getMaxIOSSDK(retries = DEFAULT_NUMBER_OF_RETRIES, timeout = helpers_1.XCRUN_TIMEOUT) {
213
+ return (0, asyncbox_1.retry)(retries, getMaxIOSSDKWithoutRetry, timeout);
136
214
  });
137
215
  exports.getMaxIOSSDK = getMaxIOSSDK;
138
- async function getMaxTVOSSDKWithoutRetry(timeout = _helpers.XCRUN_TIMEOUT) {
139
- const args = ['--sdk', 'appletvsimulator', '--show-sdk-version'];
140
- const {
141
- stdout
142
- } = await (0, _helpers.runXcrunCommand)(args, timeout);
143
- const sdkVersion = stdout.trim();
144
- if (isNaN(parseFloat(sdkVersion))) {
145
- throw new Error(`xcrun returned a non-numeric tvOS SDK version: '${sdkVersion}'`);
146
- }
147
- return sdkVersion;
216
+ /**
217
+ * Retrieves the maximum version of tvOS SDK supported by the installed Xcode
218
+ *
219
+ * @param {number} timeout Timeout of milliseconds to wait for terminal commands
220
+ * @returns {Promise<string>} The SDK version
221
+ * @throws {Error} If the SDK version number cannot be determined
222
+ */
223
+ async function getMaxTVOSSDKWithoutRetry(timeout = helpers_1.XCRUN_TIMEOUT) {
224
+ const args = ['--sdk', 'appletvsimulator', '--show-sdk-version'];
225
+ const { stdout } = await (0, helpers_1.runXcrunCommand)(args, timeout);
226
+ const sdkVersion = stdout.trim();
227
+ if (isNaN(parseFloat(sdkVersion))) {
228
+ throw new Error(`xcrun returned a non-numeric tvOS SDK version: '${sdkVersion}'`);
229
+ }
230
+ return sdkVersion;
148
231
  }
149
- const getMaxTVOSSDK = _lodash.default.memoize(async function getMaxTVOSSDK(retries = DEFAULT_NUMBER_OF_RETRIES, timeout = _helpers.XCRUN_TIMEOUT) {
150
- return await (0, _asyncbox.retry)(retries, getMaxTVOSSDKWithoutRetry, timeout);
232
+ exports.getMaxTVOSSDKWithoutRetry = getMaxTVOSSDKWithoutRetry;
233
+ /**
234
+ * Retrieves the maximum version of tvOS SDK supported by the installed Xcode
235
+ *
236
+ * @throws {Error} If the SDK version number cannot be determined
237
+ */
238
+ const getMaxTVOSSDK = lodash_1.default.memoize(
239
+ /**
240
+ * @param {number} timeout Timeout of milliseconds to wait for terminal commands
241
+ * @param {number} retries The maximum number of retries
242
+ * @returns {Promise<string>} The SDK version
243
+ */
244
+ async function getMaxTVOSSDK(retries = DEFAULT_NUMBER_OF_RETRIES, timeout = helpers_1.XCRUN_TIMEOUT) {
245
+ return /** @type {string} */ (await (0, asyncbox_1.retry)(retries, getMaxTVOSSDKWithoutRetry, timeout));
151
246
  });
152
247
  exports.getMaxTVOSSDK = getMaxTVOSSDK;
153
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfc3VwcG9ydCIsInJlcXVpcmUiLCJfcGF0aCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfYXN5bmNib3giLCJfbG9kYXNoIiwiX3RlZW5fcHJvY2VzcyIsIl9zZW12ZXIiLCJfaGVscGVycyIsIkRFRkFVTFRfTlVNQkVSX09GX1JFVFJJRVMiLCJYQ09ERV9CVU5ETEVfSUQiLCJsb2ciLCJsb2dnZXIiLCJnZXRMb2dnZXIiLCJnZXRQYXRoRnJvbVhjb2RlU2VsZWN0IiwidGltZW91dCIsIlhDUlVOX1RJTUVPVVQiLCJnZW5lcmF0ZUVycm9yTWVzc2FnZSIsInByZWZpeCIsInhjb2RlUGF0aHMiLCJmaW5kQXBwUGF0aHMiLCJfIiwiaXNFbXB0eSIsInByb3Bvc2FscyIsIm1hcCIsInAiLCJwYXRoIiwiam9pbiIsImxlbmd0aCIsInN0ZG91dCIsImV4ZWMiLCJlIiwibXNnIiwic3RkZXJyIiwibWVzc2FnZSIsImVycm9yIiwiRXJyb3IiLCJkZXZlbG9wZXJSb290IiwiU3RyaW5nIiwicmVwbGFjZSIsInRyaW0iLCJDRkJ1bmRsZUlkZW50aWZpZXIiLCJyZWFkWGNvZGVQbGlzdCIsImdldFBhdGhGcm9tRGV2ZWxvcGVyRGlyIiwicHJvY2VzcyIsImVudiIsIkRFVkVMT1BFUl9ESVIiLCJnZXRQYXRoIiwibWVtb2l6ZSIsImV4cG9ydHMiLCJnZXRWZXJzaW9uV2l0aG91dFJldHJ5IiwiZGV2ZWxvcGVyUGF0aCIsIkNGQnVuZGxlU2hvcnRWZXJzaW9uU3RyaW5nIiwic2VtdmVyIiwiY29lcmNlIiwiZ2V0VmVyc2lvbk1lbW9pemVkIiwicmV0cmllcyIsInJldHJ5IiwiZ2V0VmVyc2lvbiIsInBhcnNlIiwidmVyc2lvbiIsInZlcnNpb25TdHJpbmciLCJwYXRjaCIsIm1ham9yIiwibWlub3IiLCJ2ZXJzaW9uRmxvYXQiLCJwYXJzZUZsb2F0IiwidW5kZWZpbmVkIiwidG9TdHJpbmciLCJnZXRDbGFuZ1ZlcnNpb24iLCJmcyIsIndoaWNoIiwiaW5mbyIsIm1hdGNoIiwiZ2V0TWF4SU9TU0RLV2l0aG91dFJldHJ5IiwiYXJncyIsInJ1blhjcnVuQ29tbWFuZCIsInNka1ZlcnNpb24iLCJnZXRNYXhJT1NTREsiLCJnZXRNYXhUVk9TU0RLV2l0aG91dFJldHJ5IiwiaXNOYU4iLCJnZXRNYXhUVk9TU0RLIl0sInNvdXJjZXMiOlsiLi4vLi4vbGliL3hjb2RlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZzLCBsb2dnZXIgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyByZXRyeSB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBleGVjIH0gZnJvbSAndGVlbl9wcm9jZXNzJztcbmltcG9ydCBzZW12ZXIgZnJvbSAnc2VtdmVyJztcbmltcG9ydCB7XG4gIHJ1blhjcnVuQ29tbWFuZCwgZmluZEFwcFBhdGhzLCBYQ1JVTl9USU1FT1VULCByZWFkWGNvZGVQbGlzdFxufSBmcm9tICcuL2hlbHBlcnMnO1xuXG5jb25zdCBERUZBVUxUX05VTUJFUl9PRl9SRVRSSUVTID0gMjtcbmNvbnN0IFhDT0RFX0JVTkRMRV9JRCA9ICdjb20uYXBwbGUuZHQuWGNvZGUnO1xuXG5jb25zdCBsb2cgPSBsb2dnZXIuZ2V0TG9nZ2VyKCdYY29kZScpO1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgZnVsbCBwYXRoIHRvIFhjb2RlIERldmVsb3BlciBzdWJmb2xkZXIgdmlhIHhjb2RlLXNlbGVjdFxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB0aW1lb3V0IFRoZSBtYXhpbXVtIHRpbWVvdXQgZm9yIHhjb2RlLXNlbGVjdCBleGVjdXRpb25cbiAqIEByZXR1cm5zIHtQcm9taXNlPHN0cmluZz59IEZ1bGwgcGF0aCB0byBYY29kZSBEZXZlbG9wZXIgc3ViZm9sZGVyXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHJldHJpZXZlIGEgcHJvcGVyIHBhdGhcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0UGF0aEZyb21YY29kZVNlbGVjdCAodGltZW91dCA9IFhDUlVOX1RJTUVPVVQpIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwcmVmaXhcbiAgICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nPn1cbiAgICovXG4gIGNvbnN0IGdlbmVyYXRlRXJyb3JNZXNzYWdlID0gYXN5bmMgKHByZWZpeCkgPT4ge1xuICAgIGNvbnN0IHhjb2RlUGF0aHMgPSBhd2FpdCBmaW5kQXBwUGF0aHMoWENPREVfQlVORExFX0lEKTtcbiAgICBpZiAoXy5pc0VtcHR5KHhjb2RlUGF0aHMpKSB7XG4gICAgICByZXR1cm4gYCR7cHJlZml4fS4gQ29uc2lkZXIgaW5zdGFsbGluZyBYY29kZSB0byBhZGRyZXNzIHRoaXMgaXNzdWUuYDtcbiAgICB9XG5cbiAgICBjb25zdCBwcm9wb3NhbHMgPSB4Y29kZVBhdGhzLm1hcCgocCkgPT4gYCAgICBzdWRvIHhjb2RlLXNlbGVjdCAtcyBcIiR7cGF0aC5qb2luKHAsICdDb250ZW50cycsICdEZXZlbG9wZXInKX1cImApO1xuICAgIHJldHVybiBgJHtwcmVmaXh9LiBgICtcbiAgICAgIGBDb25zaWRlciBydW5uaW5nJHtwcm9wb3NhbHMubGVuZ3RoID4gMSA/ICcgYW55IG9mJyA6ICcnfTpcXG4ke3Byb3Bvc2Fscy5qb2luKCdcXG4nKX1cXG50byBhZGRyZXNzIHRoaXMgaXNzdWUuYDtcbiAgfTtcblxuICBsZXQgc3Rkb3V0O1xuICB0cnkge1xuICAgICh7c3Rkb3V0fSA9IGF3YWl0IGV4ZWMoJ3hjb2RlLXNlbGVjdCcsIFsnLS1wcmludC1wYXRoJ10sIHt0aW1lb3V0fSkpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc3QgbXNnID0gYENhbm5vdCBkZXRlcm1pbmUgdGhlIHBhdGggdG8gWGNvZGUgYnkgcnVubmluZyAneGNvZGUtc2VsZWN0IC1wJyBjb21tYW5kLiBgICtcbiAgICBgT3JpZ2luYWwgZXJyb3I6ICR7ZS5zdGRlcnIgfHwgZS5tZXNzYWdlfWA7XG4gICAgbG9nLmVycm9yKG1zZyk7XG4gICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG4gIH1cbiAgLy8gdHJpbSBhbmQgcmVtb3ZlIHRyYWlsaW5nIHNsYXNoXG4gIGNvbnN0IGRldmVsb3BlclJvb3QgPSBTdHJpbmcoc3Rkb3V0KS5yZXBsYWNlKC9cXC8kLywgJycpLnRyaW0oKTtcbiAgaWYgKCFkZXZlbG9wZXJSb290KSB7XG4gICAgY29uc3QgbXNnID0gYXdhaXQgZ2VuZXJhdGVFcnJvck1lc3NhZ2UoYCd4Y29kZS1zZWxlY3QgLXAnIHJldHVybmVkIGFuIGVtcHR5IHN0cmluZ2ApO1xuICAgIGxvZy5lcnJvcihtc2cpO1xuICAgIHRocm93IG5ldyBFcnJvcihtc2cpO1xuICB9XG4gIC8vIHhjb2RlLXNlbGVjdCBtaWdodCBhbHNvIHJldHVybiBhIHBhdGggdG8gY29tbWFuZCBsaW5lIHRvb2xzXG4gIGNvbnN0IHtDRkJ1bmRsZUlkZW50aWZpZXJ9ID0gYXdhaXQgcmVhZFhjb2RlUGxpc3QoZGV2ZWxvcGVyUm9vdCk7XG4gIGlmIChDRkJ1bmRsZUlkZW50aWZpZXIgPT09IFhDT0RFX0JVTkRMRV9JRCkge1xuICAgIHJldHVybiBkZXZlbG9wZXJSb290O1xuICB9XG5cbiAgY29uc3QgbXNnID0gYXdhaXQgZ2VuZXJhdGVFcnJvck1lc3NhZ2UoYCcke2RldmVsb3BlclJvb3R9JyBpcyBub3QgYSB2YWxpZCBYY29kZSBwYXRoYCk7XG4gIGxvZy5lcnJvcihtc2cpO1xuICB0aHJvdyBtc2c7XG59XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBmdWxsIHBhdGggdG8gWGNvZGUgRGV2ZWxvcGVyIHN1YmZvbGRlciB2aWEgYERFVkVMT1BFUl9ESVJgIGVudmlyb25tZW50IHZhcmlhYmxlXG4gKlxuICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nPn0gRnVsbCBwYXRoIHRvIFhjb2RlIERldmVsb3BlciBzdWJmb2xkZXJcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiBpdCBpcyBub3QgcG9zc2libGUgdG8gcmV0cmlldmUgYSBwcm9wZXIgcGF0aFxuICogQHByaXZhdGVSZW1hcmtzIFRoaXMgbWV0aG9kIGFzc3VtZXMgYERFVkVMT1BFUl9ESVJgIGlzIGRlZmluZWQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldFBhdGhGcm9tRGV2ZWxvcGVyRGlyICgpIHtcbiAgY29uc3QgZGV2ZWxvcGVyUm9vdCA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyhwcm9jZXNzLmVudi5ERVZFTE9QRVJfRElSKTtcbiAgY29uc3Qge0NGQnVuZGxlSWRlbnRpZmllcn0gPSBhd2FpdCByZWFkWGNvZGVQbGlzdChkZXZlbG9wZXJSb290KTtcbiAgaWYgKENGQnVuZGxlSWRlbnRpZmllciA9PT0gWENPREVfQlVORExFX0lEKSB7XG4gICAgcmV0dXJuIGRldmVsb3BlclJvb3Q7XG4gIH1cblxuICBjb25zdCBtc2cgPSBgVGhlIHBhdGggdG8gWGNvZGUgRGV2ZWxvcGVyIGRpciAnJHtkZXZlbG9wZXJSb290fScgcHJvdmlkZWQgaW4gREVWRUxPUEVSX0RJUiBgICtcbiAgYGVudmlyb25tZW50IHZhcmlhYmxlIGlzIG5vdCBhIHZhbGlkIHBhdGhgO1xuICBsb2cuZXJyb3IobXNnKTtcbiAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG59XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBmdWxsIHBhdGggdG8gWGNvZGUgRGV2ZWxvcGVyIHN1YmZvbGRlci5cbiAqIElmIGBERVZFTE9QRVJfRElSYCBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBwcm92aWRlZCB0aGVuIGl0cyB2YWx1ZSBoYXMgYSBwcmlvcml0eS5cbiAqIEBwYXJhbSB7bnVtYmVyfSB0aW1lb3V0IFRoZSBtYXhpbXVtIHRpbWVvdXQgZm9yIHhjb2RlLXNlbGVjdCBleGVjdXRpb25cbiAqIEByZXR1cm5zIHtQcm9taXNlPHN0cmluZz59IEZ1bGwgcGF0aCB0byBYY29kZSBEZXZlbG9wZXIgc3ViZm9sZGVyIHRpbWVvdXRcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGVyZSB3YXMgYW4gZXJyb3Igd2hpbGUgcmV0cmlldmluZyB0aGUgcGF0aC5cbiAqL1xuY29uc3QgZ2V0UGF0aCA9IF8ubWVtb2l6ZShcbiAgLyoqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB0aW1lb3V0XG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHN0cmluZz59XG4gICAqL1xuICAodGltZW91dCA9IFhDUlVOX1RJTUVPVVQpID0+IHByb2Nlc3MuZW52LkRFVkVMT1BFUl9ESVIgPyBnZXRQYXRoRnJvbURldmVsb3BlckRpcigpIDogZ2V0UGF0aEZyb21YY29kZVNlbGVjdCh0aW1lb3V0KSk7XG5cbi8qKlxuICogUmV0cmlldmVzIFhjb2RlIHZlcnNpb25cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gdGltZW91dCBbMTUwMDBdIFRpbWVvdXQgb2YgbWlsbGlzZWNvbmRzIHRvIHdhaXQgZm9yIHRlcm1pbmFsIGNvbW1hbmRzLlxuICogQHJldHVybnMge1Byb21pc2U8aW1wb3J0KFwic2VtdmVyXCIpLlNlbVZlciB8IG51bGw+fSBYY29kZSB2ZXJzaW9uXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlcmUgd2FzIGEgZmFpbHVyZSB3aGlsZSByZXRyaWV2aW5nIHRoZSB2ZXJzaW9uXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldFZlcnNpb25XaXRob3V0UmV0cnkgKHRpbWVvdXQgPSBYQ1JVTl9USU1FT1VUKSB7XG4gIGNvbnN0IGRldmVsb3BlclBhdGggPSBhd2FpdCBnZXRQYXRoKHRpbWVvdXQpO1xuICAvLyB3ZSB3YW50IHRvIHJlYWQgdGhlIENGQnVuZGxlU2hvcnRWZXJzaW9uU3RyaW5nIGZyb20gWGNvZGUncyBwbGlzdC5cbiAgY29uc3Qge0NGQnVuZGxlU2hvcnRWZXJzaW9uU3RyaW5nfSA9IGF3YWl0IHJlYWRYY29kZVBsaXN0KGRldmVsb3BlclBhdGgpO1xuICByZXR1cm4gc2VtdmVyLmNvZXJjZShDRkJ1bmRsZVNob3J0VmVyc2lvblN0cmluZyk7XG59XG5cbi8qKlxuICogUmV0cmlldmVzIFhjb2RlIHZlcnNpb24gb3IgdGhlIGNhY2hlZCBvbmUgaWYgY2FsbGVkIG1vcmUgdGhhbiBvbmNlXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHJldHJpZXMgIEhvdyBtYW55IHJldHJpZXMgdG8gYXBwbHkgZm9yIHZlcnNpb24gcmV0cmlldmFsXG4gKiBAcGFyYW0ge251bWJlcn0gdGltZW91dCBUaW1lb3V0IG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0IGZvciB0ZXJtaW5hbCBjb21tYW5kc1xuICogQHJldHVybnMge1Byb21pc2U8aW1wb3J0KFwic2VtdmVyXCIpLlNlbVZlciB8IG51bGw+fSBYY29kZSB2ZXJzaW9uXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlcmUgd2FzIGEgZmFpbHVyZSB3aGlsZSByZXRyaWV2aW5nIHRoZSB2ZXJzaW9uXG4gKi9cbmNvbnN0IGdldFZlcnNpb25NZW1vaXplZCA9IF8ubWVtb2l6ZShcbiAgZnVuY3Rpb24gZ2V0VmVyc2lvbk1lbW9pemVkIChyZXRyaWVzID0gREVGQVVMVF9OVU1CRVJfT0ZfUkVUUklFUywgdGltZW91dCA9IFhDUlVOX1RJTUVPVVQpIHtcbiAgICByZXR1cm4gcmV0cnkocmV0cmllcywgZ2V0VmVyc2lvbldpdGhvdXRSZXRyeSwgdGltZW91dCk7XG4gIH1cbik7XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gWGNvZGVWZXJzaW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdmVyc2lvblN0cmluZyBYY29kZSB2ZXJzaW9uIGFzIGEgc3RyaW5nXG4gKiBAcHJvcGVydHkge251bWJlcn0gdmVyc2lvbkZsb2F0IFhjb2RlIHZlcnNpb24gYXMgYSBmbG9hdCBudW1iZXJcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBtYWpvciBNYWpvciBudW1iZXIgb2YgWGNvZGUgdmVyc2lvblxuICogQHByb3BlcnR5IHtudW1iZXJ9IG1pbm9yIE1pbm9yIG51bWJlciBvZiBYY29kZSB2ZXJzaW9uXG4gKiBAcHJvcGVydHkge251bWJlcn0gW3BhdGNoXSBQYXRjaCBudW1iZXIgb2YgWGNvZGUgdmVyc2lvbiAoaWYgZXhpc3RzKVxuICogQHByb3BlcnR5IHsoKSA9PiBzdHJpbmd9IHRvU3RyaW5nIFJldHVybnMgWGNvZGUgdmVyc2lvbiBhcyBhIHN0cmluZ1xuICovXG5cbi8qKlxuICogUmV0cmlldmVzIFhjb2RlIHZlcnNpb25cbiAqXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHBhcnNlIFtmYWxzZV0gV2hldGhlciB0byBwYXJzZSB0aGUgdmVyc2lvbiB0byBhIFhjb2RlVmVyc2lvbiB2ZXJzaW9uXG4gKiBAcGFyYW0ge251bWJlcn0gcmV0cmllcyBbMl0gSG93IG1hbnkgcmV0cmllcyB0byBhcHBseSBmb3IgZ2V0dGluZyB0aGUgdmVyc2lvbiBudW1iZXJcbiAqIEBwYXJhbSB7bnVtYmVyfSB0aW1lb3V0IFsxNTAwMF0gVGltZW91dCBvZiBtaWxsaXNlY29uZHMgdG8gd2FpdCBmb3IgdGVybWluYWwgY29tbWFuZHNcbiAqIEByZXR1cm5zIHtQcm9taXNlPFhjb2RlVmVyc2lvbiB8IHN0cmluZz59IFhjb2RlIHZlcnNpb24gZGVwZW5kaW5nIG9uIHRoZSB2YWx1ZSBvZiBgcGFyc2VgIGZsYWdcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGVyZSB3YXMgYSBmYWlsdXJlIHdoaWxlIHJldHJpZXZpbmcgdGhlIHZlcnNpb25cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0VmVyc2lvbiAocGFyc2UgPSBmYWxzZSwgcmV0cmllcyA9IERFRkFVTFRfTlVNQkVSX09GX1JFVFJJRVMsIHRpbWVvdXQgPSBYQ1JVTl9USU1FT1VUKSB7XG4gIGNvbnN0IHZlcnNpb24gPSAvKiogQHR5cGUge2ltcG9ydCgnc2VtdmVyJykuU2VtVmVyfSAqLyhhd2FpdCBnZXRWZXJzaW9uTWVtb2l6ZWQocmV0cmllcywgdGltZW91dCkpO1xuICAvLyB4Y29kZSB2ZXJzaW9uIHN0cmluZ3MgYXJlIG5vdCBleGFjdGx5IHNlbXZlciBzdHJpbmc6IHBhdGNoIHZlcnNpb25zIG9mIDBcbiAgLy8gYXJlIHJlbW92ZWQgKGUuZy4sICcxMC4wLjAnID0+ICcxMC4wJylcbiAgY29uc3QgdmVyc2lvblN0cmluZyA9IHZlcnNpb24ucGF0Y2ggPiAwID8gdmVyc2lvbi52ZXJzaW9uIDogYCR7dmVyc2lvbi5tYWpvcn0uJHt2ZXJzaW9uLm1pbm9yfWA7XG4gIGlmICghcGFyc2UpIHtcbiAgICByZXR1cm4gdmVyc2lvblN0cmluZztcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdmVyc2lvblN0cmluZyxcbiAgICB2ZXJzaW9uRmxvYXQ6IHBhcnNlRmxvYXQodmVyc2lvblN0cmluZyksXG4gICAgbWFqb3I6IHZlcnNpb24ubWFqb3IsXG4gICAgbWlub3I6IHZlcnNpb24ubWlub3IsXG4gICAgcGF0Y2g6IHZlcnNpb24ucGF0Y2ggPiAwID8gdmVyc2lvbi5wYXRjaCA6IHVuZGVmaW5lZCxcbiAgICB0b1N0cmluZyAoKSB7XG4gICAgICByZXR1cm4gdmVyc2lvblN0cmluZztcbiAgICB9LFxuICB9O1xufVxuXG4vKipcbiAqIENoZWNrIGh0dHBzOi8vdHJhYy5tYWNwb3J0cy5vcmcvd2lraS9YY29kZVZlcnNpb25JbmZvXG4gKiB0byBzZWUgdGhlIGFjdHVhbCBtYXBwaW5nIGJldHdlZW4gY2xhbmcgYW5kIG90aGVyIGNvbXBvbmVudHMuXG4gKlxuICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nfG51bGw+fSBUaGUgYWN0dWFsIENsYW5nIHZlcnNpb24gaW4geC54LngueCBvciB4LngueCBmb3JtYXQsXG4gKiB3aGljaCBpcyBzdXBwbGllZCB3aXRoIENvbW1hbmQgTGluZSBUb29scy4gYG51bGxgIGlzIHJldHVybmVkXG4gKiBpZiBDTFQgYXJlIG5vdCBpbnN0YWxsZWQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldENsYW5nVmVyc2lvbiAoKSB7XG4gIHRyeSB7XG4gICAgYXdhaXQgZnMud2hpY2goJ2NsYW5nJyk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2cuaW5mbygnQ2Fubm90IGZpbmQgY2xhbmcgZXhlY3V0YWJsZSBvbiB0aGUgbG9jYWwgc3lzdGVtLiAnICtcbiAgICAgICdBcmUgWGNvZGUgQ29tbWFuZCBMaW5lIFRvb2xzIGluc3RhbGxlZD8nKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCB7c3Rkb3V0fSA9IGF3YWl0IGV4ZWMoJ2NsYW5nJywgWyctLXZlcnNpb24nXSk7XG4gIGNvbnN0IG1hdGNoID0gL2NsYW5nLShbMC05Ll0rKS8uZXhlYyhzdGRvdXQpO1xuICBpZiAoIW1hdGNoKSB7XG4gICAgbG9nLmluZm8oYENhbm5vdCBwYXJzZSBjbGFuZyB2ZXJzaW9uIGZyb20gJHtzdGRvdXR9YCk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIG1hdGNoWzFdO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgbWF4aW11bSB2ZXJzaW9uIG9mIGlPUyBTREsgc3VwcG9ydGVkIGJ5IHRoZSBpbnN0YWxsZWQgWGNvZGVcbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gdGltZW91dCBbMTUwMDBdIFRpbWVvdXQgb2YgbWlsbGlzZWNvbmRzIHRvIHdhaXQgZm9yIHRlcm1pbmFsIGNvbW1hbmRzXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmc+fSBUaGUgU0RLIHZlcnNpb25cbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgU0RLIHZlcnNpb24gbnVtYmVyIGNhbm5vdCBiZSBkZXRlcm1pbmVkXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldE1heElPU1NES1dpdGhvdXRSZXRyeSAodGltZW91dCA9IFhDUlVOX1RJTUVPVVQpIHtcbiAgY29uc3QgYXJncyA9IFsnLS1zZGsnLCAnaXBob25lc2ltdWxhdG9yJywgJy0tc2hvdy1zZGstdmVyc2lvbiddO1xuICBjb25zdCB7c3Rkb3V0fSA9IGF3YWl0IHJ1blhjcnVuQ29tbWFuZChhcmdzLCB0aW1lb3V0KTtcbiAgY29uc3Qgc2RrVmVyc2lvbiA9IHN0ZG91dC50cmltKCk7XG4gIGNvbnN0IG1hdGNoID0gL1xcZC5cXGQvLmV4ZWMoc3Rkb3V0KTtcbiAgaWYgKCFtYXRjaCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgeGNydW4gcmV0dXJuZWQgYSBub24tbnVtZXJpYyBpT1MgU0RLIHZlcnNpb246ICcke3Nka1ZlcnNpb259J2ApO1xuICB9XG4gIHJldHVybiBzZGtWZXJzaW9uO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgbWF4aW11bSB2ZXJzaW9uIG9mIGlPUyBTREsgc3VwcG9ydGVkIGJ5IHRoZSBpbnN0YWxsZWQgWGNvZGVcbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gdGltZW91dCBUaW1lb3V0IG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0IGZvciB0ZXJtaW5hbCBjb21tYW5kc1xuICogQHBhcmFtIHtudW1iZXJ9IHJldHJpZXMgVGhlIG1heGltdW0gbnVtYmVyIG9mIHJldHJpZXNcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBTREsgdmVyc2lvblxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBTREsgdmVyc2lvbiBudW1iZXIgY2Fubm90IGJlIGRldGVybWluZWRcbiAqL1xuY29uc3QgZ2V0TWF4SU9TU0RLID0gXy5tZW1vaXplKFxuICBmdW5jdGlvbiBnZXRNYXhJT1NTREsgKHJldHJpZXMgPSBERUZBVUxUX05VTUJFUl9PRl9SRVRSSUVTLCB0aW1lb3V0ID0gWENSVU5fVElNRU9VVCkge1xuICAgIHJldHVybiByZXRyeShyZXRyaWVzLCBnZXRNYXhJT1NTREtXaXRob3V0UmV0cnksIHRpbWVvdXQpO1xuICB9XG4pO1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgbWF4aW11bSB2ZXJzaW9uIG9mIHR2T1MgU0RLIHN1cHBvcnRlZCBieSB0aGUgaW5zdGFsbGVkIFhjb2RlXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHRpbWVvdXQgVGltZW91dCBvZiBtaWxsaXNlY29uZHMgdG8gd2FpdCBmb3IgdGVybWluYWwgY29tbWFuZHNcbiAqIEByZXR1cm5zIHtQcm9taXNlPHN0cmluZz59IFRoZSBTREsgdmVyc2lvblxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBTREsgdmVyc2lvbiBudW1iZXIgY2Fubm90IGJlIGRldGVybWluZWRcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0TWF4VFZPU1NES1dpdGhvdXRSZXRyeSAodGltZW91dCA9IFhDUlVOX1RJTUVPVVQpIHtcbiAgY29uc3QgYXJncyA9IFsnLS1zZGsnLCAnYXBwbGV0dnNpbXVsYXRvcicsICctLXNob3ctc2RrLXZlcnNpb24nXTtcbiAgY29uc3Qge3N0ZG91dH0gPSBhd2FpdCBydW5YY3J1bkNvbW1hbmQoYXJncywgdGltZW91dCk7XG4gIGNvbnN0IHNka1ZlcnNpb24gPSBzdGRvdXQudHJpbSgpO1xuICBpZiAoaXNOYU4ocGFyc2VGbG9hdChzZGtWZXJzaW9uKSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHhjcnVuIHJldHVybmVkIGEgbm9uLW51bWVyaWMgdHZPUyBTREsgdmVyc2lvbjogJyR7c2RrVmVyc2lvbn0nYCk7XG4gIH1cbiAgcmV0dXJuIHNka1ZlcnNpb247XG59XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBtYXhpbXVtIHZlcnNpb24gb2YgdHZPUyBTREsgc3VwcG9ydGVkIGJ5IHRoZSBpbnN0YWxsZWQgWGNvZGVcbiAqXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIFNESyB2ZXJzaW9uIG51bWJlciBjYW5ub3QgYmUgZGV0ZXJtaW5lZFxuICovXG5jb25zdCBnZXRNYXhUVk9TU0RLID0gXy5tZW1vaXplKFxuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ9IHRpbWVvdXQgVGltZW91dCBvZiBtaWxsaXNlY29uZHMgdG8gd2FpdCBmb3IgdGVybWluYWwgY29tbWFuZHNcbiAgICogQHBhcmFtIHtudW1iZXJ9IHJldHJpZXMgVGhlIG1heGltdW0gbnVtYmVyIG9mIHJldHJpZXNcbiAgICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nPn0gVGhlIFNESyB2ZXJzaW9uXG4gICAqL1xuICBhc3luYyBmdW5jdGlvbiBnZXRNYXhUVk9TU0RLIChyZXRyaWVzID0gREVGQVVMVF9OVU1CRVJfT0ZfUkVUUklFUywgdGltZW91dCA9IFhDUlVOX1RJTUVPVVQpIHtcbiAgICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovKGF3YWl0IHJldHJ5KHJldHJpZXMsIGdldE1heFRWT1NTREtXaXRob3V0UmV0cnksIHRpbWVvdXQpKTtcbiAgfVxuKTtcblxuZXhwb3J0IHtcbiAgZ2V0UGF0aCwgZ2V0VmVyc2lvbiwgZ2V0TWF4SU9TU0RLLCBnZXRNYXhJT1NTREtXaXRob3V0UmV0cnksXG4gIGdldE1heFRWT1NTREssIGdldE1heFRWT1NTREtXaXRob3V0UmV0cnksIGdldENsYW5nVmVyc2lvbixcbiAgZ2V0UGF0aEZyb21EZXZlbG9wZXJEaXIsIGdldFBhdGhGcm9tWGNvZGVTZWxlY3QsXG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsSUFBQUEsUUFBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsS0FBQSxHQUFBQyxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUcsU0FBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUksT0FBQSxHQUFBRixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUssYUFBQSxHQUFBTCxPQUFBO0FBQ0EsSUFBQU0sT0FBQSxHQUFBSixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQU8sUUFBQSxHQUFBUCxPQUFBO0FBSUEsTUFBTVEseUJBQXlCLEdBQUcsQ0FBQztBQUNuQyxNQUFNQyxlQUFlLEdBQUcsb0JBQW9CO0FBRTVDLE1BQU1DLEdBQUcsR0FBR0MsZUFBTSxDQUFDQyxTQUFTLENBQUMsT0FBTyxDQUFDO0FBU3JDLGVBQWVDLHNCQUFzQkEsQ0FBRUMsT0FBTyxHQUFHQyxzQkFBYSxFQUFFO0VBSzlELE1BQU1DLG9CQUFvQixHQUFHLE1BQU9DLE1BQU0sSUFBSztJQUM3QyxNQUFNQyxVQUFVLEdBQUcsTUFBTSxJQUFBQyxxQkFBWSxFQUFDVixlQUFlLENBQUM7SUFDdEQsSUFBSVcsZUFBQyxDQUFDQyxPQUFPLENBQUNILFVB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
248
+ //# sourceMappingURL=xcode.js.map
@@ -1 +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","msg","stderr","message","error","Error","developerRoot","String","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","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 /**\n * @param {string} prefix\n * @returns {Promise<string>}\n */\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 const msg = `Cannot determine the path to Xcode by running 'xcode-select -p' command. ` +\n `Original error: ${e.stderr || e.message}`;\n log.error(msg);\n throw new Error(msg);\n }\n // trim and remove trailing slash\n const developerRoot = String(stdout).replace(/\\/$/, '').trim();\n if (!developerRoot) {\n const msg = await generateErrorMessage(`'xcode-select -p' returned an empty string`);\n log.error(msg);\n throw new Error(msg);\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 const msg = await generateErrorMessage(`'${developerRoot}' is not a valid Xcode path`);\n log.error(msg);\n throw msg;\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 * @privateRemarks This method assumes `DEVELOPER_DIR` is defined.\n */\nasync function getPathFromDeveloperDir () {\n const developerRoot = /** @type {string} */(process.env.DEVELOPER_DIR);\n const {CFBundleIdentifier} = await readXcodePlist(developerRoot);\n if (CFBundleIdentifier === XCODE_BUNDLE_ID) {\n return developerRoot;\n }\n\n const msg = `The path to Xcode Developer dir '${developerRoot}' provided in DEVELOPER_DIR ` +\n `environment variable is not a valid path`;\n log.error(msg);\n throw new Error(msg);\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 * @param {number} timeout The maximum timeout for xcode-select execution\n * @returns {Promise<string>} Full path to Xcode Developer subfolder timeout\n * @throws {Error} If there was an error while retrieving the path.\n */\nconst getPath = _.memoize(\n /**\n * @param {number} timeout\n * @returns {Promise<string>}\n */\n (timeout = XCRUN_TIMEOUT) => process.env.DEVELOPER_DIR ? getPathFromDeveloperDir() : getPathFromXcodeSelect(timeout));\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 How many retries to apply for version retrieval\n * @param {number} timeout 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 * @property {() => string} toString Returns Xcode version as a string\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 = /** @type {import('semver').SemVer} */(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|null>} 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 {Promise<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 Timeout of milliseconds to wait for terminal commands\n * @param {number} retries 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 Timeout of milliseconds to wait for terminal commands\n * @returns {Promise<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 * @throws {Error} If the SDK version number cannot be determined\n */\nconst getMaxTVOSSDK = _.memoize(\n /**\n * @param {number} timeout Timeout of milliseconds to wait for terminal commands\n * @param {number} retries The maximum number of retries\n * @returns {Promise<string>} The SDK version\n */\n async function getMaxTVOSSDK (retries = DEFAULT_NUMBER_OF_RETRIES, timeout = XCRUN_TIMEOUT) {\n return /** @type {string} */(await 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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"}
1
+ {"version":3,"file":"xcode.js","sourceRoot":"","sources":["../../lib/xcode.js"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -6,7 +6,7 @@
6
6
  "ios",
7
7
  "xcode"
8
8
  ],
9
- "version": "5.1.7",
9
+ "version": "5.2.1",
10
10
  "author": "Appium Contributors",
11
11
  "license": "Apache-2.0",
12
12
  "repository": {
@@ -21,18 +21,13 @@
21
21
  "npm": ">=8"
22
22
  },
23
23
  "main": "./build/lib/index.js",
24
- "directories": {
25
- "lib": "lib"
26
- },
27
24
  "files": [
28
- "index.js",
29
25
  "lib",
30
26
  "build/lib",
31
27
  "CHANGELOG.md"
32
28
  ],
33
29
  "dependencies": {
34
30
  "@appium/support": "^4.0.0",
35
- "@babel/runtime": "^7.0.0",
36
31
  "@types/lodash": "^4.14.192",
37
32
  "@types/teen_process": "^2.0.0",
38
33
  "asyncbox": "^2.3.0",
@@ -43,7 +38,9 @@
43
38
  "teen_process": "^2.0.0"
44
39
  },
45
40
  "scripts": {
46
- "build": "rm -rf build && babel --out-dir=build/lib lib && tsc -b",
41
+ "build": "tsc -b",
42
+ "clean": "npm run build -- --clean",
43
+ "rebuild": "npm run clean; npm run build",
47
44
  "dev": "npm run build -- --watch",
48
45
  "lint": "eslint .",
49
46
  "lint:fix": "npm run lint -- --fix",
@@ -68,35 +65,39 @@
68
65
  "singleQuote": true
69
66
  },
70
67
  "devDependencies": {
71
- "@appium/eslint-config-appium": "^6.0.0",
68
+ "@appium/eslint-config-appium": "^8.0.4",
69
+ "@appium/eslint-config-appium-ts": "^0.3.1",
72
70
  "@appium/tsconfig": "^0.3.0",
73
- "@babel/cli": "^7.18.10",
74
- "@babel/core": "^7.18.10",
75
- "@babel/eslint-parser": "^7.18.9",
76
- "@babel/plugin-transform-runtime": "^7.18.10",
77
- "@babel/preset-env": "^7.18.10",
78
- "@babel/register": "^7.18.9",
71
+ "@appium/types": "^0.13.2",
79
72
  "@semantic-release/changelog": "^6.0.1",
80
73
  "@semantic-release/git": "^10.0.1",
81
- "@types/chai": "^4.3.4",
74
+ "@types/bluebird": "^3.5.38",
75
+ "@types/chai": "^4.3.5",
82
76
  "@types/chai-as-promised": "^7.1.5",
77
+ "@types/lodash": "^4.14.196",
83
78
  "@types/mocha": "^10.0.1",
84
- "@types/semver": "^7.3.13",
85
- "babel-plugin-source-map-support": "^2.2.0",
79
+ "@types/node": "^20.4.7",
80
+ "@types/sinon": "^10.0.16",
81
+ "@types/sinon-chai": "^3.2.9",
82
+ "@types/teen_process": "2.0.0",
83
+ "@typescript-eslint/eslint-plugin": "^5.62.0",
84
+ "@typescript-eslint/parser": "^5.62.0",
86
85
  "chai": "^4.1.2",
87
86
  "chai-as-promised": "^7.1.1",
88
87
  "conventional-changelog-conventionalcommits": "^7.0.1",
89
- "eslint": "^7.32.0",
90
- "eslint-config-prettier": "^8.5.0",
91
- "eslint-plugin-import": "^2.26.0",
92
- "eslint-plugin-mocha": "^9.0.0",
93
- "eslint-plugin-promise": "^6.0.0",
88
+ "eslint": "^8.46.0",
89
+ "eslint-config-prettier": "^8.9.0",
90
+ "eslint-import-resolver-typescript": "^3.5.5",
91
+ "eslint-plugin-import": "^2.28.0",
92
+ "eslint-plugin-mocha": "^10.1.0",
93
+ "eslint-plugin-promise": "^6.1.1",
94
94
  "lint-staged": "^14.0.0",
95
95
  "mocha": "^10.0.0",
96
96
  "pre-commit": "^1.1.3",
97
97
  "prettier": "^3.0.0",
98
98
  "semantic-release": "^21.1.0",
99
- "typescript": "^5.0.2"
99
+ "ts-node": "^10.9.1",
100
+ "typescript": "^5.1.6"
100
101
  },
101
102
  "types": "./build/lib/index.d.ts"
102
103
  }