node-simctl 7.2.2 → 7.3.0

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.
Files changed (130) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/build/index.js +9 -17
  3. package/build/lib/helpers.d.ts +13 -0
  4. package/build/lib/helpers.d.ts.map +1 -0
  5. package/build/lib/helpers.js +22 -16
  6. package/build/lib/helpers.js.map +1 -1
  7. package/build/lib/logger.d.ts +4 -0
  8. package/build/lib/logger.d.ts.map +1 -0
  9. package/build/lib/logger.js +13 -19
  10. package/build/lib/logger.js.map +1 -1
  11. package/build/lib/simctl.d.ts +131 -0
  12. package/build/lib/simctl.d.ts.map +1 -0
  13. package/build/lib/simctl.js +170 -94
  14. package/build/lib/simctl.js.map +1 -1
  15. package/build/lib/subcommands/addmedia.d.ts +16 -0
  16. package/build/lib/subcommands/addmedia.d.ts.map +1 -0
  17. package/build/lib/subcommands/addmedia.js +17 -12
  18. package/build/lib/subcommands/addmedia.js.map +1 -1
  19. package/build/lib/subcommands/appinfo.d.ts +45 -0
  20. package/build/lib/subcommands/appinfo.d.ts.map +1 -0
  21. package/build/lib/subcommands/appinfo.js +47 -15
  22. package/build/lib/subcommands/appinfo.js.map +1 -1
  23. package/build/lib/subcommands/boot.d.ts +12 -0
  24. package/build/lib/subcommands/boot.d.ts.map +1 -0
  25. package/build/lib/subcommands/boot.js +47 -22
  26. package/build/lib/subcommands/boot.js.map +1 -1
  27. package/build/lib/subcommands/bootstatus.d.ts +56 -0
  28. package/build/lib/subcommands/bootstatus.d.ts.map +1 -0
  29. package/build/lib/subcommands/bootstatus.js +102 -87
  30. package/build/lib/subcommands/bootstatus.js.map +1 -1
  31. package/build/lib/subcommands/create.d.ts +34 -0
  32. package/build/lib/subcommands/create.d.ts.map +1 -0
  33. package/build/lib/subcommands/create.js +115 -65
  34. package/build/lib/subcommands/create.js.map +1 -1
  35. package/build/lib/subcommands/delete.d.ts +12 -0
  36. package/build/lib/subcommands/delete.d.ts.map +1 -0
  37. package/build/lib/subcommands/delete.js +13 -12
  38. package/build/lib/subcommands/delete.js.map +1 -1
  39. package/build/lib/subcommands/erase.d.ts +15 -0
  40. package/build/lib/subcommands/erase.d.ts.map +1 -0
  41. package/build/lib/subcommands/erase.js +19 -14
  42. package/build/lib/subcommands/erase.js.map +1 -1
  43. package/build/lib/subcommands/get_app_container.d.ts +22 -0
  44. package/build/lib/subcommands/get_app_container.d.ts.map +1 -0
  45. package/build/lib/subcommands/get_app_container.js +26 -19
  46. package/build/lib/subcommands/get_app_container.js.map +1 -1
  47. package/build/lib/subcommands/getenv.d.ts +14 -0
  48. package/build/lib/subcommands/getenv.d.ts.map +1 -0
  49. package/build/lib/subcommands/getenv.js +17 -17
  50. package/build/lib/subcommands/getenv.js.map +1 -1
  51. package/build/lib/subcommands/index.d.ts +3 -0
  52. package/build/lib/subcommands/index.d.ts.map +1 -0
  53. package/build/lib/subcommands/index.js +33 -36
  54. package/build/lib/subcommands/index.js.map +1 -1
  55. package/build/lib/subcommands/install.d.ts +15 -0
  56. package/build/lib/subcommands/install.d.ts.map +1 -0
  57. package/build/lib/subcommands/install.js +16 -12
  58. package/build/lib/subcommands/install.js.map +1 -1
  59. package/build/lib/subcommands/io.d.ts +15 -0
  60. package/build/lib/subcommands/io.d.ts.map +1 -0
  61. package/build/lib/subcommands/io.js +32 -25
  62. package/build/lib/subcommands/io.js.map +1 -1
  63. package/build/lib/subcommands/keychain.d.ts +53 -0
  64. package/build/lib/subcommands/keychain.d.ts.map +1 -0
  65. package/build/lib/subcommands/keychain.js +85 -51
  66. package/build/lib/subcommands/keychain.js.map +1 -1
  67. package/build/lib/subcommands/launch.d.ts +19 -0
  68. package/build/lib/subcommands/launch.d.ts.map +1 -0
  69. package/build/lib/subcommands/launch.js +28 -19
  70. package/build/lib/subcommands/launch.js.map +1 -1
  71. package/build/lib/subcommands/list.d.ts +120 -0
  72. package/build/lib/subcommands/list.d.ts.map +1 -0
  73. package/build/lib/subcommands/list.js +296 -138
  74. package/build/lib/subcommands/list.js.map +1 -1
  75. package/build/lib/subcommands/location.d.ts +20 -0
  76. package/build/lib/subcommands/location.d.ts.map +1 -0
  77. package/build/lib/subcommands/location.js +37 -22
  78. package/build/lib/subcommands/location.js.map +1 -1
  79. package/build/lib/subcommands/openurl.d.ts +17 -0
  80. package/build/lib/subcommands/openurl.d.ts.map +1 -0
  81. package/build/lib/subcommands/openurl.js +18 -12
  82. package/build/lib/subcommands/openurl.js.map +1 -1
  83. package/build/lib/subcommands/pbcopy.d.ts +17 -0
  84. package/build/lib/subcommands/pbcopy.d.ts.map +1 -0
  85. package/build/lib/subcommands/pbcopy.js +26 -20
  86. package/build/lib/subcommands/pbcopy.js.map +1 -1
  87. package/build/lib/subcommands/pbpaste.d.ts +17 -0
  88. package/build/lib/subcommands/pbpaste.d.ts.map +1 -0
  89. package/build/lib/subcommands/pbpaste.js +20 -16
  90. package/build/lib/subcommands/pbpaste.js.map +1 -1
  91. package/build/lib/subcommands/privacy.d.ts +55 -0
  92. package/build/lib/subcommands/privacy.d.ts.map +1 -0
  93. package/build/lib/subcommands/privacy.js +60 -18
  94. package/build/lib/subcommands/privacy.js.map +1 -1
  95. package/build/lib/subcommands/push.d.ts +25 -0
  96. package/build/lib/subcommands/push.d.ts.map +1 -0
  97. package/build/lib/subcommands/push.js +41 -24
  98. package/build/lib/subcommands/push.js.map +1 -1
  99. package/build/lib/subcommands/shutdown.d.ts +12 -0
  100. package/build/lib/subcommands/shutdown.d.ts.map +1 -0
  101. package/build/lib/subcommands/shutdown.js +47 -22
  102. package/build/lib/subcommands/shutdown.js.map +1 -1
  103. package/build/lib/subcommands/spawn.d.ts +26 -0
  104. package/build/lib/subcommands/spawn.d.ts.map +1 -0
  105. package/build/lib/subcommands/spawn.js +42 -26
  106. package/build/lib/subcommands/spawn.js.map +1 -1
  107. package/build/lib/subcommands/terminate.d.ts +15 -0
  108. package/build/lib/subcommands/terminate.d.ts.map +1 -0
  109. package/build/lib/subcommands/terminate.js +16 -12
  110. package/build/lib/subcommands/terminate.js.map +1 -1
  111. package/build/lib/subcommands/ui.d.ts +24 -0
  112. package/build/lib/subcommands/ui.d.ts.map +1 -0
  113. package/build/lib/subcommands/ui.js +32 -20
  114. package/build/lib/subcommands/ui.js.map +1 -1
  115. package/build/lib/subcommands/uninstall.d.ts +16 -0
  116. package/build/lib/subcommands/uninstall.d.ts.map +1 -0
  117. package/build/lib/subcommands/uninstall.js +17 -12
  118. package/build/lib/subcommands/uninstall.js.map +1 -1
  119. package/lib/simctl.js +13 -3
  120. package/lib/subcommands/addmedia.js +1 -1
  121. package/lib/subcommands/bootstatus.js +2 -2
  122. package/lib/subcommands/create.js +2 -2
  123. package/lib/subcommands/erase.js +1 -1
  124. package/lib/subcommands/keychain.js +2 -2
  125. package/lib/subcommands/launch.js +1 -0
  126. package/lib/subcommands/list.js +6 -6
  127. package/lib/subcommands/location.js +1 -1
  128. package/lib/subcommands/openurl.js +1 -1
  129. package/lib/subcommands/spawn.js +2 -2
  130. package/package.json +28 -17
@@ -1,157 +1,315 @@
1
1
  "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- Object.defineProperty(exports, "__esModule", {
5
- value: true
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
6
17
  });
7
- exports.default = void 0;
8
- require("source-map-support/register");
9
- var _lodash = _interopRequireDefault(require("lodash"));
10
- var _helpers = require("../helpers");
11
- var _logger = _interopRequireWildcard(require("../logger"));
12
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
13
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ const lodash_1 = __importDefault(require("lodash"));
30
+ const helpers_1 = require("../helpers");
31
+ const logger_1 = __importStar(require("../logger"));
14
32
  const commands = {};
33
+ /**
34
+ * @typedef {Object} DeviceInfo
35
+ * @property {string} name - The device name.
36
+ * @property {string} udid - The device UDID.
37
+ * @property {string} state - The current Simulator state, for example 'booted' or 'shutdown'.
38
+ * @property {string} sdk - The SDK version, for example '10.3'.
39
+ */
40
+ /**
41
+ * Parse the list of existing Simulator devices to represent
42
+ * it as convenient mapping.
43
+ *
44
+ * @param {string?} platform - The platform name, for example 'watchOS'.
45
+ * @return {Promise<Record<string, any>>} The resulting mapping. Each key is platform version,
46
+ * for example '10.3' and the corresponding value is an
47
+ * array of the matching {@link DeviceInfo} instances.
48
+ * @throws {Error} If the corresponding simctl subcommand command
49
+ * returns non-zero return code.
50
+ */
15
51
  commands.getDevicesByParsing = async function getDevicesByParsing(platform) {
16
- const {
17
- stdout
18
- } = await this.exec('list', {
19
- args: ['devices']
20
- });
21
- const deviceSectionRe = _lodash.default.isEmpty(platform) ? new RegExp(`\\-\\-\\s+(\\S+)\\s+(\\S+)\\s+\\-\\-(\\n\\s{4}.+)*`, 'mgi') : new RegExp(`\\-\\-\\s+${_lodash.default.escapeRegExp(platform)}\\s+(\\S+)\\s+\\-\\-(\\n\\s{4}.+)*`, 'mgi');
22
- const matches = [];
23
- let match;
24
- while (match = deviceSectionRe.exec(stdout)) {
25
- matches.push(match);
26
- }
27
- if (_lodash.default.isEmpty(matches)) {
28
- throw new Error('Could not find device section');
29
- }
30
- const lineRe = /([^\s].+) \((\w+-.+\w+)\) \((\w+\s?\w+)\)/;
31
- const devices = {};
32
- for (match of matches) {
33
- const sdk = platform ? match[1] : match[2];
34
- devices[sdk] = devices[sdk] || [];
35
- for (const line of match[0].split('\n').slice(1)) {
36
- if (line.includes('(unavailable, ')) {
37
- continue;
38
- }
39
- const lineMatch = lineRe.exec(line);
40
- if (!lineMatch) {
41
- throw new Error(`Could not match line: ${line}`);
42
- }
43
- devices[sdk].push({
44
- name: lineMatch[1],
45
- udid: lineMatch[2],
46
- state: lineMatch[3],
47
- sdk,
48
- platform: platform || match[1]
49
- });
52
+ // get the list of devices
53
+ const { stdout } = await this.exec('list', {
54
+ args: ['devices'],
55
+ });
56
+ // expect to get a listing like
57
+ // -- iOS 8.1 --
58
+ // iPhone 4s (3CA6E7DD-220E-45E5-B716-1E992B3A429C) (Shutdown)
59
+ // ...
60
+ // -- iOS 8.2 --
61
+ // iPhone 4s (A99FFFC3-8E19-4DCF-B585-7D9D46B4C16E) (Shutdown)
62
+ // ...
63
+ // so, get the `-- iOS X.X --` line to find the sdk (X.X)
64
+ // and the rest of the listing in order to later find the devices
65
+ const deviceSectionRe = lodash_1.default.isEmpty(platform) || !platform
66
+ ? new RegExp(`\\-\\-\\s+(\\S+)\\s+(\\S+)\\s+\\-\\-(\\n\\s{4}.+)*`, 'mgi')
67
+ : new RegExp(`\\-\\-\\s+${lodash_1.default.escapeRegExp(platform)}\\s+(\\S+)\\s+\\-\\-(\\n\\s{4}.+)*`, 'mgi');
68
+ const matches = [];
69
+ let match;
70
+ // make an entry for each sdk version
71
+ while ((match = deviceSectionRe.exec(stdout))) {
72
+ matches.push(match);
73
+ }
74
+ if (lodash_1.default.isEmpty(matches)) {
75
+ throw new Error('Could not find device section');
50
76
  }
51
- }
52
- return devices;
77
+ const lineRe = /([^\s].+) \((\w+-.+\w+)\) \((\w+\s?\w+)\)/; // https://regex101.com/r/lG7mK6/3
78
+ // get all the devices for each sdk
79
+ const devices = {};
80
+ for (match of matches) {
81
+ const sdk = platform ? match[1] : match[2];
82
+ devices[sdk] = devices[sdk] || [];
83
+ // split the full match into lines and remove the first
84
+ for (const line of match[0].split('\n').slice(1)) {
85
+ if (line.includes('(unavailable, ')) {
86
+ continue;
87
+ }
88
+ // a line is something like
89
+ // iPhone 4s (A99FFFC3-8E19-4DCF-B585-7D9D46B4C16E) (Shutdown)
90
+ // retrieve:
91
+ // iPhone 4s
92
+ // A99FFFC3-8E19-4DCF-B585-7D9D46B4C16E
93
+ // Shutdown
94
+ const lineMatch = lineRe.exec(line);
95
+ if (!lineMatch) {
96
+ throw new Error(`Could not match line: ${line}`);
97
+ }
98
+ // save the whole thing as ab object in the list for this sdk
99
+ devices[sdk].push({
100
+ name: lineMatch[1],
101
+ udid: lineMatch[2],
102
+ state: lineMatch[3],
103
+ sdk,
104
+ platform: platform || match[1],
105
+ });
106
+ }
107
+ }
108
+ return devices;
53
109
  };
110
+ /**
111
+ * Parse the list of existing Simulator devices to represent
112
+ * it as convenient mapping for the particular platform version.
113
+ *
114
+ * @param {string?} forSdk - The sdk version,
115
+ * for which the devices list should be parsed,
116
+ * for example '10.3'.
117
+ * @param {string?} platform - The platform name, for example 'watchOS'.
118
+ * @return {Promise<Object|DeviceInfo[]>} If _forSdk_ is set then the list
119
+ * of devices for the particular platform version.
120
+ * Otherwise the same result as for {@link getDevicesByParsing}
121
+ * function.
122
+ * @throws {Error} If the corresponding simctl subcommand command
123
+ * returns non-zero return code or if no matching
124
+ * platform version is found in the system.
125
+ */
54
126
  commands.getDevices = async function getDevices(forSdk, platform) {
55
- let devices = {};
56
- try {
57
- const {
58
- stdout
59
- } = await this.exec('list', {
60
- args: ['devices', '-j']
61
- });
62
- const versionMatchRe = _lodash.default.isEmpty(platform) ? new RegExp(`^([^\\s-]+)[\\s-](\\S+)`, 'i') : new RegExp(`^${_lodash.default.escapeRegExp(platform)}[\\s-](\\S+)`, 'i');
63
- for (let [sdkName, entries] of _lodash.default.toPairs(JSON.parse(stdout).devices)) {
64
- sdkName = sdkName.replace(_helpers.SIM_RUNTIME_NAME, '');
65
- const versionMatch = versionMatchRe.exec(sdkName);
66
- if (!versionMatch) {
67
- continue;
68
- }
69
- const sdk = (platform ? versionMatch[1] : versionMatch[2]).replace('-', '.');
70
- devices[sdk] = devices[sdk] || [];
71
- devices[sdk].push(...entries.filter(el => _lodash.default.isUndefined(el.isAvailable) || el.isAvailable).map(el => {
72
- delete el.availability;
73
- return {
74
- sdk,
75
- ...el,
76
- platform: platform || versionMatch[1]
77
- };
78
- }));
127
+ let devices = {};
128
+ try {
129
+ const { stdout } = await this.exec('list', {
130
+ args: ['devices', '-j'],
131
+ });
132
+ /* JSON should be
133
+ * {
134
+ * "devices" : {
135
+ * "iOS <sdk>" : [ // or
136
+ * "com.apple.CoreSimulator.SimRuntime.iOS-<sdk> : [
137
+ * {
138
+ * "state" : "Booted",
139
+ * "availability" : "(available)",
140
+ * "isAvailable" : true,
141
+ * "name" : "iPhone 6",
142
+ * "udid" : "75E34140-18E8-4D1A-9F45-AAC735DF75DF"
143
+ * }
144
+ * ]
145
+ * }
146
+ * }
147
+ */
148
+ const versionMatchRe = lodash_1.default.isEmpty(platform) || !platform
149
+ ? new RegExp(`^([^\\s-]+)[\\s-](\\S+)`, 'i')
150
+ : new RegExp(`^${lodash_1.default.escapeRegExp(platform)}[\\s-](\\S+)`, 'i');
151
+ for (let [sdkName, entries] of lodash_1.default.toPairs(JSON.parse(stdout).devices)) {
152
+ // there could be a longer name, so remove it
153
+ sdkName = sdkName.replace(helpers_1.SIM_RUNTIME_NAME, '');
154
+ const versionMatch = versionMatchRe.exec(sdkName);
155
+ if (!versionMatch) {
156
+ continue;
157
+ }
158
+ // the sdk can have dashes (`12-2`) or dots (`12.1`)
159
+ const sdk = (platform ? versionMatch[1] : versionMatch[2]).replace('-', '.');
160
+ devices[sdk] = devices[sdk] || [];
161
+ devices[sdk].push(...entries.filter((el) => lodash_1.default.isUndefined(el.isAvailable) || el.isAvailable)
162
+ .map((el) => {
163
+ delete el.availability;
164
+ return {
165
+ sdk,
166
+ ...el,
167
+ platform: platform || versionMatch[1],
168
+ };
169
+ }));
170
+ }
79
171
  }
80
- } catch (err) {
81
- _logger.default.debug(_logger.LOG_PREFIX, `Unable to get JSON device list: ${err.stack}`);
82
- _logger.default.debug(_logger.LOG_PREFIX, 'Falling back to manual parsing');
83
- devices = await this.getDevicesByParsing(platform);
84
- }
85
- if (!forSdk) {
86
- return devices;
87
- }
88
- if (devices[forSdk]) {
89
- return devices[forSdk];
90
- }
91
- let errMsg = `'${forSdk}' does not exist in the list of simctl SDKs.`;
92
- const availableSDKs = _lodash.default.keys(devices);
93
- errMsg += availableSDKs.length ? ` Only the following Simulator SDK versions are available on your system: ${availableSDKs.join(', ')}` : ` No Simulator SDK versions are available on your system. Please install some via Xcode preferences.`;
94
- throw new Error(errMsg);
172
+ catch (err) {
173
+ logger_1.default.debug(logger_1.LOG_PREFIX, `Unable to get JSON device list: ${err.stack}`);
174
+ logger_1.default.debug(logger_1.LOG_PREFIX, 'Falling back to manual parsing');
175
+ devices = await this.getDevicesByParsing(platform);
176
+ }
177
+ if (!forSdk) {
178
+ return devices;
179
+ }
180
+ // if a `forSdk` was passed in, return only the corresponding list
181
+ if (devices[forSdk]) {
182
+ return devices[forSdk];
183
+ }
184
+ let errMsg = `'${forSdk}' does not exist in the list of simctl SDKs.`;
185
+ const availableSDKs = lodash_1.default.keys(devices);
186
+ errMsg += availableSDKs.length
187
+ ? ` Only the following Simulator SDK versions are available on your system: ${availableSDKs.join(', ')}`
188
+ : ` No Simulator SDK versions are available on your system. Please install some via Xcode preferences.`;
189
+ throw new Error(errMsg);
95
190
  };
191
+ /**
192
+ * Get the runtime for the particular platform version using --json flag
193
+ *
194
+ * @param {string} platformVersion - The platform version name,
195
+ * for example '10.3'.
196
+ * @param {string} platform - The platform name, for example 'watchOS'.
197
+ * @return {Promise<string>} The corresponding runtime name for the given
198
+ * platform version.
199
+ */
96
200
  commands.getRuntimeForPlatformVersionViaJson = async function getRuntimeForPlatformVersionViaJson(platformVersion, platform = 'iOS') {
97
- const {
98
- stdout
99
- } = await this.exec('list', {
100
- args: ['runtimes', '--json']
101
- });
102
- for (const {
103
- version,
104
- identifier,
105
- name
106
- } of JSON.parse(stdout).runtimes) {
107
- if ((0, _helpers.normalizeVersion)(version) === (0, _helpers.normalizeVersion)(platformVersion) && name.toLowerCase().startsWith(platform.toLowerCase())) {
108
- return identifier;
201
+ const { stdout } = await this.exec('list', {
202
+ args: ['runtimes', '--json'],
203
+ });
204
+ for (const { version, identifier, name } of JSON.parse(stdout).runtimes) {
205
+ if ((0, helpers_1.normalizeVersion)(version) === (0, helpers_1.normalizeVersion)(platformVersion)
206
+ && name.toLowerCase().startsWith(platform.toLowerCase())) {
207
+ return identifier;
208
+ }
109
209
  }
110
- }
111
- throw new Error(`Could not use --json flag to parse platform version`);
210
+ throw new Error(`Could not use --json flag to parse platform version`);
112
211
  };
212
+ /**
213
+ * Get the runtime for the particular platform version.
214
+ *
215
+ * @param {string} platformVersion - The platform version name,
216
+ * for example '10.3'.
217
+ * @param {string} platform - The platform name, for example 'watchOS'.
218
+ * @return {Promise<string>} The corresponding runtime name for the given
219
+ * platform version.
220
+ */
113
221
  commands.getRuntimeForPlatformVersion = async function getRuntimeForPlatformVersion(platformVersion, platform = 'iOS') {
114
- try {
115
- const {
116
- stdout
117
- } = await this.exec('list', {
118
- args: ['runtimes']
119
- });
120
- const runtimeRe = new RegExp(`${_lodash.default.escapeRegExp(platform)}\\s+(\\d+\\.\\d+)\\s+\\((\\d+\\.\\d+\\.*\\d*)`, 'i');
121
- for (const line of stdout.split('\n')) {
122
- const match = runtimeRe.exec(line);
123
- if (match && match[1] === platformVersion) {
124
- return match[2];
125
- }
222
+ // Try with parsing
223
+ try {
224
+ const { stdout } = await this.exec('list', {
225
+ args: ['runtimes'],
226
+ });
227
+ // https://regex101.com/r/UykjQZ/1
228
+ const runtimeRe = new RegExp(`${lodash_1.default.escapeRegExp(platform)}\\s+(\\d+\\.\\d+)\\s+\\((\\d+\\.\\d+\\.*\\d*)`, 'i');
229
+ for (const line of stdout.split('\n')) {
230
+ const match = runtimeRe.exec(line);
231
+ if (match && match[1] === platformVersion) {
232
+ return match[2];
233
+ }
234
+ }
126
235
  }
127
- } catch (ign) {}
128
- return platformVersion;
236
+ catch (ign) { }
237
+ // if nothing was found, pass platform version back
238
+ return platformVersion;
129
239
  };
240
+ /**
241
+ * Get the list of device types available in the current Xcode installation
242
+ *
243
+ * @return {Promise<string[]>} List of the types of devices available
244
+ * @throws {Error} If the corresponding simctl command fails
245
+ */
130
246
  commands.getDeviceTypes = async function getDeviceTypes() {
131
- const {
132
- stdout
133
- } = await this.exec('list', {
134
- args: ['devicetypes', '-j']
135
- });
136
- try {
137
- const deviceTypes = JSON.parse(stdout.trim());
138
- return deviceTypes.devicetypes.map(type => type.name);
139
- } catch (err) {
140
- throw new Error(`Unable to get list of device types: ${err.message}`);
141
- }
247
+ const { stdout } = await this.exec('list', {
248
+ args: ['devicetypes', '-j'],
249
+ });
250
+ /*
251
+ * JSON will be like:
252
+ * {
253
+ * "devicetypes" : [
254
+ * {
255
+ * "name" : "iPhone 4s",
256
+ * "identifier" : "com.apple.CoreSimulator.SimDeviceType.iPhone-4s"
257
+ * },
258
+ * ...
259
+ * }
260
+ */
261
+ try {
262
+ const deviceTypes = JSON.parse(stdout.trim());
263
+ return deviceTypes.devicetypes.map((type) => type.name);
264
+ }
265
+ catch (err) {
266
+ throw new Error(`Unable to get list of device types: ${err.message}`);
267
+ }
142
268
  };
269
+ /**
270
+ * Get the full list of runtimes, devicetypes, devices and pairs as Object
271
+ *
272
+ * @return {Promise<Object>} Object containing device types, runtimes devices and pairs.
273
+ * The resulting JSON will be like:
274
+ * {
275
+ * "devicetypes" : [
276
+ * {
277
+ * "name" : "iPhone 4s",
278
+ * "identifier" : "com.apple.CoreSimulator.SimDeviceType.iPhone-4s"
279
+ * },
280
+ * ...
281
+ * ],
282
+ * "runtimes" : [
283
+ * {
284
+ * "version" : '13.0',
285
+ * "bundlePath" : '/Applications/Xcode11beta4.app/Contents/Developer/Platforms/iPhoneOS.platform/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS.simruntime',
286
+ * "isAvailable" : true,
287
+ * "name" : 'iOS 13.0',
288
+ * "identifier" : 'com.apple.CoreSimulator.SimRuntime.iOS-13-0',
289
+ * "buildversion" : '17A5534d'
290
+ * },
291
+ * ...
292
+ * },
293
+ * "devices" :
294
+ * {
295
+ * 'com.apple.CoreSimulator.SimRuntime.iOS-13-0': [ [Object], [Object] ] },
296
+ * ...
297
+ * },
298
+ * "pairs" : {} }
299
+ *
300
+ * }
301
+ * @throws {Error} If the corresponding simctl command fails
302
+ */
143
303
  commands.list = async function list() {
144
- const {
145
- stdout
146
- } = await this.exec('list', {
147
- args: ['-j']
148
- });
149
- try {
150
- return JSON.parse(stdout.trim());
151
- } catch (e) {
152
- throw new Error(`Unable to parse simctl list: ${e.message}`);
153
- }
304
+ const { stdout } = await this.exec('list', {
305
+ args: ['-j'],
306
+ });
307
+ try {
308
+ return JSON.parse(stdout.trim());
309
+ }
310
+ catch (e) {
311
+ throw new Error(`Unable to parse simctl list: ${e.message}`);
312
+ }
154
313
  };
155
- var _default = commands;
156
- exports.default = _default;
157
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfaGVscGVycyIsIl9sb2dnZXIiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsIm5vZGVJbnRlcm9wIiwiV2Vha01hcCIsImNhY2hlQmFiZWxJbnRlcm9wIiwiY2FjaGVOb2RlSW50ZXJvcCIsIm9iaiIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiY2FjaGUiLCJoYXMiLCJnZXQiLCJuZXdPYmoiLCJoYXNQcm9wZXJ0eURlc2NyaXB0b3IiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImtleSIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImRlc2MiLCJzZXQiLCJjb21tYW5kcyIsImdldERldmljZXNCeVBhcnNpbmciLCJwbGF0Zm9ybSIsInN0ZG91dCIsImV4ZWMiLCJhcmdzIiwiZGV2aWNlU2VjdGlvblJlIiwiXyIsImlzRW1wdHkiLCJSZWdFeHAiLCJlc2NhcGVSZWdFeHAiLCJtYXRjaGVzIiwibWF0Y2giLCJwdXNoIiwiRXJyb3IiLCJsaW5lUmUiLCJkZXZpY2VzIiwic2RrIiwibGluZSIsInNwbGl0Iiwic2xpY2UiLCJpbmNsdWRlcyIsImxpbmVNYXRjaCIsIm5hbWUiLCJ1ZGlkIiwic3RhdGUiLCJnZXREZXZpY2VzIiwiZm9yU2RrIiwidmVyc2lvbk1hdGNoUmUiLCJzZGtOYW1lIiwiZW50cmllcyIsInRvUGFpcnMiLCJKU09OIiwicGFyc2UiLCJyZXBsYWNlIiwiU0lNX1JVTlRJTUVfTkFNRSIsInZlcnNpb25NYXRjaCIsImZpbHRlciIsImVsIiwiaXNVbmRlZmluZWQiLCJpc0F2YWlsYWJsZSIsIm1hcCIsImF2YWlsYWJpbGl0eSIsImVyciIsImxvZyIsImRlYnVnIiwiTE9HX1BSRUZJWCIsInN0YWNrIiwiZXJyTXNnIiwiYXZhaWxhYmxlU0RLcyIsImtleXMiLCJsZW5ndGgiLCJqb2luIiwiZ2V0UnVudGltZUZvclBsYXRmb3JtVmVyc2lvblZpYUpzb24iLCJwbGF0Zm9ybVZlcnNpb24iLCJ2ZXJzaW9uIiwiaWRlbnRpZmllciIsInJ1bnRpbWVzIiwibm9ybWFsaXplVmVyc2lvbiIsInRvTG93ZXJDYXNlIiwic3RhcnRzV2l0aCIsImdldFJ1bnRpbWVGb3JQbGF0Zm9ybVZlcnNpb24iLCJydW50aW1lUmUiLCJpZ24iLCJnZXREZXZpY2VUeXBlcyIsImRldmljZVR5cGVzIiwidHJpbSIsImRldmljZXR5cGVzIiwidHlwZSIsIm1lc3NhZ2UiLCJsaXN0IiwiZSIsIl9kZWZhdWx0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9zdWJjb21tYW5kcy9saXN0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBTSU1fUlVOVElNRV9OQU1FLCBub3JtYWxpemVWZXJzaW9uIH0gZnJvbSAnLi4vaGVscGVycyc7XG5pbXBvcnQgbG9nLCB7IExPR19QUkVGSVggfSBmcm9tICcuLi9sb2dnZXInO1xuXG5cbmNvbnN0IGNvbW1hbmRzID0ge307XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gRGV2aWNlSW5mb1xuICogQHByb3BlcnR5IHtzdHJpbmd9IG5hbWUgLSBUaGUgZGV2aWNlIG5hbWUuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdWRpZCAtIFRoZSBkZXZpY2UgVURJRC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBzdGF0ZSAtIFRoZSBjdXJyZW50IFNpbXVsYXRvciBzdGF0ZSwgZm9yIGV4YW1wbGUgJ2Jvb3RlZCcgb3IgJ3NodXRkb3duJy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBzZGsgLSBUaGUgU0RLIHZlcnNpb24sIGZvciBleGFtcGxlICcxMC4zJy5cbiAqL1xuXG4vKipcbiAqIFBhcnNlIHRoZSBsaXN0IG9mIGV4aXN0aW5nIFNpbXVsYXRvciBkZXZpY2VzIHRvIHJlcHJlc2VudFxuICogaXQgYXMgY29udmVuaWVudCBtYXBwaW5nLlxuICpcbiAqIEBwYXJhbSB7P3N0cmluZ30gcGxhdGZvcm0gLSBUaGUgcGxhdGZvcm0gbmFtZSwgZm9yIGV4YW1wbGUgJ3dhdGNoT1MnLlxuICogQHJldHVybiB7T2JqZWN0fSBUaGUgcmVzdWx0aW5nIG1hcHBpbmcuIEVhY2gga2V5IGlzIHBsYXRmb3JtIHZlcnNpb24sXG4gKiAgICAgICAgICAgICAgICAgIGZvciBleGFtcGxlICcxMC4zJyBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWUgaXMgYW5cbiAqICAgICAgICAgICAgICAgICAgYXJyYXkgb2YgdGhlIG1hdGNoaW5nIHtAbGluayBEZXZpY2VJbmZvfSBpbnN0YW5jZXMuXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIGNvcnJlc3BvbmRpbmcgc2ltY3RsIHN1YmNvbW1hbmQgY29tbWFuZFxuICogICAgICAgICAgICAgICAgIHJldHVybnMgbm9uLXplcm8gcmV0dXJuIGNvZGUuXG4gKi9cbmNvbW1hbmRzLmdldERldmljZXNCeVBhcnNpbmcgPSBhc3luYyBmdW5jdGlvbiBnZXREZXZpY2VzQnlQYXJzaW5nIChwbGF0Zm9ybSkge1xuICAvLyBnZXQgdGhlIGxpc3Qgb2YgZGV2aWNlc1xuICBjb25zdCB7c3Rkb3V0fSA9IGF3YWl0IHRoaXMuZXhlYygnbGlzdCcsIHtcbiAgICBhcmdzOiBbJ2RldmljZXMnXSxcbiAgfSk7XG5cbiAgLy8gZXhwZWN0IHRvIGdldCBhIGxpc3RpbmcgbGlrZVxuICAvLyAtLSBpT1MgOC4xIC0tXG4gIC8vICAgICBpUGhvbmUgNHMgKDNDQTZFN0RELTIyMEUtNDVFNS1CNzE2LTFFOTkyQjNBNDI5QykgKFNodXRkb3duKVxuICAvLyAgICAgLi4uXG4gIC8vIC0tIGlPUyA4LjIgLS1cbiAgLy8gICAgIGlQaG9uZSA0cyAoQTk5RkZGQzMtOEUxOS00RENGLUI1ODUtN0Q5RDQ2QjRDMTZFKSAoU2h1dGRvd24pXG4gIC8vICAgICAuLi5cbiAgLy8gc28sIGdldCB0aGUgYC0tIGlPUyBYLlggLS1gIGxpbmUgdG8gZmluZCB0aGUgc2RrIChYLlgpXG4gIC8vIGFuZCB0aGUgcmVzdCBvZiB0aGUgbGlzdGluZyBpbiBvcmRlciB0byBsYXRlciBmaW5kIHRoZSBkZXZpY2VzXG4gIGNvbnN0IGRldmljZVNlY3Rpb25SZSA9IF8uaXNFbXB0eShwbGF0Zm9ybSlcbiAgICA/IG5ldyBSZWdFeHAoYFxcXFwtXFxcXC1cXFxccysoXFxcXFMrKVxcXFxzKyhcXFxcUyspXFxcXHMrXFxcXC1cXFxcLShcXFxcblxcXFxzezR9LispKmAsICdtZ2knKVxuICAgIDogbmV3IFJlZ0V4cChgXFxcXC1cXFxcLVxcXFxzKyR7Xy5lc2NhcGVSZWdFeHAocGxhdGZvcm0pfVxcXFxzKyhcXFxcUyspXFxcXHMrXFxcXC1cXFxcLShcXFxcblxcXFxzezR9LispKmAsICdtZ2knKTtcbiAgY29uc3QgbWF0Y2hlcyA9IFtdO1xuICBsZXQgbWF0Y2g7XG4gIC8vIG1ha2UgYW4gZW50cnkgZm9yIGVhY2ggc2RrIHZlcnNpb25cbiAgd2hpbGUgKChtYXRjaCA9IGRldmljZVNlY3Rpb25SZS5leGVjKHN0ZG91dCkpKSB7XG4gICAgbWF0Y2hlcy5wdXNoKG1hdGNoKTtcbiAgfVxuICBpZiAoXy5pc0VtcHR5KG1hdGNoZXMpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgZmluZCBkZXZpY2Ugc2VjdGlvbicpO1xuICB9XG5cbiAgY29uc3QgbGluZVJlID0gLyhbXlxcc10uKykgXFwoKFxcdystLitcXHcrKVxcKSBcXCgoXFx3K1xccz9cXHcrKVxcKS87IC8vIGh0dHBzOi8vcmVnZXgxMDEuY29tL3IvbEc3bUs2LzNcbiAgLy8gZ2V0IGFsbCB0aGUgZGV2aWNlcyBmb3IgZWFjaCBzZGtcbiAgY29uc3QgZGV2aWNlcyA9IHt9O1xuICBmb3IgKG1hdGNoIG9mIG1hdGNoZXMpIHtcbiAgICBjb25zdCBzZGsgPSBwbGF0Zm9ybSA/IG1hdGNoWzFdIDogbWF0Y2hbMl07XG4gICAgZGV2aWNlc1tzZGtdID0gZGV2aWNlc1tzZGtdIHx8IFtdO1xuICAgIC8vIHNwbGl0IHRoZSBmdWxsIG1hdGNoIGludG8gbGluZXMgYW5kIHJlbW92ZSB0aGUgZmlyc3RcbiAgICBmb3IgKGNvbnN0IGxpbmUgb2YgbWF0Y2hbMF0uc3BsaXQoJ1xcbicpLnNsaWNlKDEpKSB7XG4gICAgICBpZiAobGluZS5pbmNsdWRlcygnKHVuYXZhaWxhYmxlLCAnKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIC8vIGEgbGluZSBpcyBzb21ldGhpbmcgbGlrZVxuICAgICAgLy8gICAgaVBob25lIDRzIChBOTlGRkZDMy04RTE5LTREQ0YtQjU4NS03RDlENDZCNEMxNkUpIChTaHV0ZG93bilcbiAgICAgIC8vIHJldHJpZXZlOlxuICAgICAgLy8gICBpUGhvbmUgNHNcbiAgICAgIC8vICAgQTk5RkZGQzMtOEUxOS00RENGLUI1ODUtN0Q5RDQ2QjRDMTZFXG4gICAgICAvLyAgIFNodXRkb3duXG4gICAgICBjb25zdCBsaW5lTWF0Y2ggPSBsaW5lUmUuZXhlYyhsaW5lKTtcbiAgICAgIGlmICghbGluZU1hdGNoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IG1hdGNoIGxpbmU6ICR7bGluZX1gKTtcbiAgICAgIH1cbiAgICAgIC8vIHNhdmUgdGhlIHdob2xlIHRoaW5nIGFzIGFiIG9iamVjdCBpbiB0aGUgbGlzdCBmb3IgdGhpcyBzZGtcbiAgICAgIGRldmljZXNbc2RrXS5wdXNoKHtcbiAgICAgICAgbmFtZTogbGluZU1hdGNoWzFdLFxuICAgICAgICB1ZGlkOiBsaW5lTWF0Y2hbMl0sXG4gICAgICAgIHN0YXRlOiBsaW5lTWF0Y2hbM10sXG4gICAgICAgIHNkayxcbiAgICAgICAgcGxhdGZvcm06IHBsYXRmb3JtIHx8IG1hdGNoWzFdLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBkZXZpY2VzO1xufTtcblxuLyoqXG4gKiBQYXJzZSB0aGUgbGlzdCBvZiBleGlzdGluZyBTaW11bGF0b3IgZGV2aWNlcyB0byByZXByZXNlbnRcbiAqIGl0IGFzIGNvbnZlbmllbnQgbWFwcGluZyBmb3IgdGhlIHBhcnRpY3VsYXIgcGxhdGZvcm0gdmVyc2lvbi5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZz99IGZvclNkayAtIFRoZSBzZGsgdmVyc2lvbixcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHdoaWNoIHRoZSBkZXZpY2VzIGxpc3Qgc2hvdWxkIGJlIHBhcnNlZCxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGV4YW1wbGUgJzEwLjMnLlxuICogQHBhcmFtIHtzdHJpbmc/fSBwbGF0Zm9ybSAtIFRoZSBwbGF0Zm9ybSBuYW1lLCBmb3IgZXhhbXBsZSAnd2F0Y2hPUycuXG4gKiBAcmV0dXJuIHtQcm9taXNlPE9iamVjdHxEZXZpY2VJbmZvW10+fSBJZiBfZm9yU2RrXyBpcyBzZXQgdGhlbiB0aGUgbGlzdFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiBkZXZpY2VzIGZvciB0aGUgcGFydGljdWxhciBwbGF0Zm9ybSB2ZXJzaW9uLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdGhlcndpc2UgdGhlIHNhbWUgcmVzdWx0IGFzIGZvciB7QGxpbmsgZ2V0RGV2aWNlc0J5UGFyc2luZ31cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24uXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIGNvcnJlc3BvbmRpbmcgc2ltY3RsIHN1YmNvbW1hbmQgY29tbWFuZFxuICogICAgICAgICAgICAgICAgIHJldHVybnMgbm9uLXplcm8gcmV0dXJuIGNvZGUgb3IgaWYgbm8gbWF0Y2hpbmdcbiAqICAgICAgICAgICAgICAgICBwbGF0Zm9ybSB2ZXJzaW9uIGlzIGZvdW5kIGluIHRoZSBzeXN0ZW0uXG4gKi9cbmNvbW1hbmRzLmdldERldmljZXMgPSBhc3luYyBmdW5jdGlvbiBnZXREZXZpY2VzIChmb3JTZGssIHBsYXRmb3JtKSB7XG4gIGxldCBkZXZpY2VzID0ge307XG4gIHRyeSB7XG4gICAgY29uc3Qge3N0ZG91dH0gPSBhd2FpdCB0aGlzLmV4ZWMoJ2xpc3QnLCB7XG4gICAgICBhcmdzOiBbJ2RldmljZXMnLCAnLWonXSxcbiAgICB9KTtcbiAgICAvKiBKU09OIHNob3VsZCBiZVxuICAgICAqIHtcbiAgICAgKiAgIFwiZGV2aWNlc1wiIDoge1xuICAgICAqICAgICBcImlPUyA8c2RrPlwiIDogWyAvLyBvclxuICAgICAqICAgICBcImNvbS5hcHBsZS5Db3JlU2ltdWxhdG9yLlNpbVJ1bnRpbWUuaU9TLTxzZGs+IDogW1xuICAgICAqICAgICAgIHtcbiAgICAgKiAgICAgICAgIFwic3RhdGVcIiA6IFwiQm9vdGVkXCIsXG4gICAgICogICAgICAgICBcImF2YWlsYWJpbGl0eVwiIDogXCIoYXZhaWxhYmxlKVwiLFxuICAgICAqICAgICAgICAgXCJpc0F2YWlsYWJsZVwiIDogdHJ1ZSxcbiAgICAgKiAgICAgICAgIFwibmFtZVwiIDogXCJpUGhvbmUgNlwiLFxuICAgICAqICAgICAgICAgXCJ1ZGlkXCIgOiBcIjc1RTM0MTQwLTE4RTgtNEQxQS05RjQ1LUFBQzczNURGNzVERlwiXG4gICAgICogICAgICAgfVxuICAgICAqICAgICBdXG4gICAgICogICB9XG4gICAgICogfVxuICAgICAqL1xuICAgIGNvbnN0IHZlcnNpb25NYXRjaFJlID0gXy5pc0VtcHR5KHBsYXRmb3JtKVxuICAgICAgPyBuZXcgUmVnRXhwKGBeKFteXFxcXHMtXSspW1xcXFxzLV0oXFxcXFMrKWAsICdpJylcbiAgICAgIDogbmV3IFJlZ0V4cChgXiR7Xy5lc2NhcGVSZWdFeHAocGxhdGZvcm0pfVtcXFxccy1dKFxcXFxTKylgLCAnaScpO1xuICAgIGZvciAobGV0IFtzZGtOYW1lLCBlbnRyaWVzXSBvZiBfLnRvUGFpcnMoSlNPTi5wYXJzZShzdGRvdXQpLmRldmljZXMpKSB7XG4gICAgICAvLyB0aGVyZSBjb3VsZCBiZSBhIGxvbmdlciBuYW1lLCBzbyByZW1vdmUgaXRcbiAgICAgIHNka05hbWUgPSBzZGtOYW1lLnJlcGxhY2UoU0lNX1JVTlRJTUVfTkFNRSwgJycpO1xuICAgICAgY29uc3QgdmVyc2lvbk1hdGNoID0gdmVyc2lvbk1hdGNoUmUuZXhlYyhzZGtOYW1lKTtcbiAgICAgIGlmICghdmVyc2lvbk1hdGNoKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyB0aGUgc2RrIGNhbiBoYXZlIGRhc2hlcyAoYDEyLTJgKSBvciBkb3RzIChgMTIuMWApXG4gICAgICBjb25zdCBzZGsgPSAocGxhdGZvcm0gPyB2ZXJzaW9uTWF0Y2hbMV0gOiB2ZXJzaW9uTWF0Y2hbMl0pLnJlcGxhY2UoJy0nLCAnLicpO1xuICAgICAgZGV2aWNlc1tzZGtdID0gZGV2aWNlc1tzZGtdIHx8IFtdO1xuICAgICAgZGV2aWNlc1tzZGtdLnB1c2goLi4uZW50cmllcy5maWx0ZXIoKGVsKSA9PiBfLmlzVW5kZWZpbmVkKGVsLmlzQXZhaWxhYmxlKSB8fCBlbC5pc0F2YWlsYWJsZSlcbiAgICAgICAgLm1hcCgoZWwpID0+IHtcbiAgICAgICAgICBkZWxldGUgZWwuYXZhaWxhYmlsaXR5O1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzZGssXG4gICAgICAgICAgICAuLi5lbCxcbiAgICAgICAgICAgIHBsYXRmb3JtOiBwbGF0Zm9ybSB8fCB2ZXJzaW9uTWF0Y2hbMV0sXG4gICAgICAgICAgfTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2cuZGVidWcoTE9HX1BSRUZJWCwgYFVuYWJsZSB0byBnZXQgSlNPTiBkZXZpY2UgbGlzdDogJHtlcnIuc3RhY2t9YCk7XG4gICAgbG9nLmRlYnVnKExPR19QUkVGSVgsICdGYWxsaW5nIGJhY2sgdG8gbWFudWFsIHBhcnNpbmcnKTtcbiAgICBkZXZpY2VzID0gYXdhaXQgdGhpcy5nZXREZXZpY2VzQnlQYXJzaW5nKHBsYXRmb3JtKTtcbiAgfVxuXG4gIGlmICghZm9yU2RrKSB7XG4gICAgcmV0dXJuIGRldmljZXM7XG4gIH1cbiAgLy8gaWYgYSBgZm9yU2RrYCB3YXMgcGFzc2VkIGluLCByZXR1cm4gb25seSB0aGUgY29ycmVzcG9uZGluZyBsaXN0XG4gIGlmIChkZXZpY2VzW2ZvclNka10pIHtcbiAgICByZXR1cm4gZGV2aWNlc1tmb3JTZGtdO1xuICB9XG5cbiAgbGV0IGVyck1zZyA9IGAnJHtmb3JTZGt9JyBkb2VzIG5vdCBleGlzdCBpbiB0aGUgbGlzdCBvZiBzaW1jdGwgU0RLcy5gO1xuICBjb25zdCBhdmFpbGFibGVTREtzID0gXy5rZXlzKGRldmljZXMpO1xuICBlcnJNc2cgKz0gYXZhaWxhYmxlU0RLcy5sZW5ndGhcbiAgICA/IGAgT25seSB0aGUgZm9sbG93aW5nIFNpbXVsYXRvciBTREsgdmVyc2lvbnMgYXJlIGF2YWlsYWJsZSBvbiB5b3VyIHN5c3RlbTogJHthdmFpbGFibGVTREtzLmpvaW4oJywgJyl9YFxuICAgIDogYCBObyBTaW11bGF0b3IgU0RLIHZlcnNpb25zIGFyZSBhdmFpbGFibGUgb24geW91ciBzeXN0ZW0uIFBsZWFzZSBpbnN0YWxsIHNvbWUgdmlhIFhjb2RlIHByZWZlcmVuY2VzLmA7XG4gIHRocm93IG5ldyBFcnJvcihlcnJNc2cpO1xufTtcblxuLyoqXG4gKiBHZXQgdGhlIHJ1bnRpbWUgZm9yIHRoZSBwYXJ0aWN1bGFyIHBsYXRmb3JtIHZlcnNpb24gdXNpbmcgLS1qc29uIGZsYWdcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcGxhdGZvcm1WZXJzaW9uIC0gVGhlIHBsYXRmb3JtIHZlcnNpb24gbmFtZSxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZXhhbXBsZSAnMTAuMycuXG4gKiBAcGFyYW0ge3N0cmluZz99IHBsYXRmb3JtIC0gVGhlIHBsYXRmb3JtIG5hbWUsIGZvciBleGFtcGxlICd3YXRjaE9TJy5cbiAqIEByZXR1cm4ge1Byb21pc2U8c3RyaW5nPn0gVGhlIGNvcnJlc3BvbmRpbmcgcnVudGltZSBuYW1lIGZvciB0aGUgZ2l2ZW5cbiAqICAgICAgICAgICAgICAgICAgcGxhdGZvcm0gdmVyc2lvbi5cbiAqL1xuY29tbWFuZHMuZ2V0UnVudGltZUZvclBsYXRmb3JtVmVyc2lvblZpYUpzb24gPSBhc3luYyBmdW5jdGlvbiBnZXRSdW50aW1lRm9yUGxhdGZvcm1WZXJzaW9uVmlhSnNvbiAoXG4gIHBsYXRmb3JtVmVyc2lvbiwgcGxhdGZvcm0gPSAnaU9TJykge1xuICBjb25zdCB7c3Rkb3V0fSA9IGF3YWl0IHRoaXMuZXhlYygnbGlzdCcsIHtcbiAgICBhcmdzOiBbJ3J1bnRpbWVzJywgJy0tanNvbiddLFxuICB9KTtcbiAgZm9yIChjb25zdCB7dmVyc2lvbiwgaWRlbnRpZmllciwgbmFtZX0gb2YgSlNPTi5wYXJzZShzdGRvdXQpLnJ1bnRpbWVzKSB7XG4gICAgaWYgKG5vcm1hbGl6ZVZlcnNpb24odmVyc2lvbikgPT09IG5vcm1hbGl6ZVZlcnNpb24ocGxhdGZvcm1WZXJzaW9uKVxuICAgICAgJiYgbmFtZS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgocGxhdGZvcm0udG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgIHJldHVybiBpZGVudGlmaWVyO1xuICAgIH1cbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCB1c2UgLS1qc29uIGZsYWcgdG8gcGFyc2UgcGxhdGZvcm0gdmVyc2lvbmApO1xufTtcblxuLyoqXG4gKiBHZXQgdGhlIHJ1bnRpbWUgZm9yIHRoZSBwYXJ0aWN1bGFyIHBsYXRmb3JtIHZlcnNpb24uXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHBsYXRmb3JtVmVyc2lvbiAtIFRoZSBwbGF0Zm9ybSB2ZXJzaW9uIG5hbWUsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGV4YW1wbGUgJzEwLjMnLlxuICogQHBhcmFtIHtzdHJpbmc/fSBwbGF0Zm9ybSAtIFRoZSBwbGF0Zm9ybSBuYW1lLCBmb3IgZXhhbXBsZSAnd2F0Y2hPUycuXG4gKiBAcmV0dXJuIHtQcm9taXNlPHN0cmluZz59IFRoZSBjb3JyZXNwb25kaW5nIHJ1bnRpbWUgbmFtZSBmb3IgdGhlIGdpdmVuXG4gKiAgICAgICAgICAgICAgICAgIHBsYXRmb3JtIHZlcnNpb24uXG4gKi9cbmNvbW1hbmRzLmdldFJ1bnRpbWVGb3JQbGF0Zm9ybVZlcnNpb24gPSBhc3luYyBmdW5jdGlvbiBnZXRSdW50aW1lRm9yUGxhdGZvcm1WZXJzaW9uIChcbiAgcGxhdGZvcm1WZXJzaW9uLCBwbGF0Zm9ybSA9ICdpT1MnKSB7XG4gIC8vIFRyeSB3aXRoIHBhcnNpbmdcbiAgdHJ5IHtcbiAgICBjb25zdCB7c3Rkb3V0fSA9IGF3YWl0IHRoaXMuZXhlYygnbGlzdCcsIHtcbiAgICAgIGFyZ3M6IFsncnVudGltZXMnXSxcbiAgICB9KTtcbiAgICAvLyBodHRwczovL3JlZ2V4MTAxLmNvbS9yL1V5a2pRWi8xXG4gICAgY29uc3QgcnVudGltZVJlID1cbiAgICAgIG5ldyBSZWdFeHAoYCR7Xy5lc2NhcGVSZWdFeHAocGxhdGZvcm0pfVxcXFxzKyhcXFxcZCtcXFxcLlxcXFxkKylcXFxccytcXFxcKChcXFxcZCtcXFxcLlxcXFxkK1xcXFwuKlxcXFxkKilgLCAnaScpO1xuICAgIGZvciAoY29uc3QgbGluZSBvZiBzdGRvdXQuc3BsaXQoJ1xcbicpKSB7XG4gICAgICBjb25zdCBtYXRjaCA9IHJ1bnRpbWVSZS5leGVjKGxpbmUpO1xuICAgICAgaWYgKG1hdGNoICYmIG1hdGNoWzFdID09PSBwbGF0Zm9ybVZlcnNpb24pIHtcbiAgICAgICAgcmV0dXJuIG1hdGNoWzJdO1xuICAgICAgfVxuICAgIH1cbiAgfSBjYXRjaCAoaWduKSB7fVxuXG4gIC8vIGlmIG5vdGhpbmcgd2FzIGZvdW5kLCBwYXNzIHBsYXRmb3JtIHZlcnNpb24gYmFja1xuICByZXR1cm4gcGxhdGZvcm1WZXJzaW9uO1xufTtcblxuLyoqXG4gKiBHZXQgdGhlIGxpc3Qgb2YgZGV2aWNlIHR5cGVzIGF2YWlsYWJsZSBpbiB0aGUgY3VycmVudCBYY29kZSBpbnN0YWxsYXRpb25cbiAqXG4gKiBAcmV0dXJuIHtQcm9taXNlPHN0cmluZ1tdPn0gTGlzdCBvZiB0aGUgdHlwZXMgb2YgZGV2aWNlcyBhdmFpbGFibGVcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgY29ycmVzcG9uZGluZyBzaW1jdGwgY29tbWFuZCBmYWlsc1xuICovXG5jb21tYW5kcy5nZXREZXZpY2VUeXBlcyA9IGFzeW5jIGZ1bmN0aW9uIGdldERldmljZVR5cGVzICgpIHtcbiAgY29uc3Qge3N0ZG91dH0gPSBhd2FpdCB0aGlzLmV4ZWMoJ2xpc3QnLCB7XG4gICAgYXJnczogWydkZXZpY2V0eXBlcycsICctaiddLFxuICB9KTtcbiAgLypcbiAgICogSlNPTiB3aWxsIGJlIGxpa2U6XG4gICAqICAge1xuICAgKiAgICAgXCJkZXZpY2V0eXBlc1wiIDogW1xuICAgKiAgICAgICB7XG4gICAqICAgICAgICAgXCJuYW1lXCIgOiBcImlQaG9uZSA0c1wiLFxuICAgKiAgICAgICAgIFwiaWRlbnRpZmllclwiIDogXCJjb20uYXBwbGUuQ29yZVNpbXVsYXRvci5TaW1EZXZpY2VUeXBlLmlQaG9uZS00c1wiXG4gICAqICAgICAgIH0sXG4gICAqICAgICAgIC4uLlxuICAgKiAgIH1cbiAgICovXG4gIHRyeSB7XG4gICAgY29uc3QgZGV2aWNlVHlwZXMgPSBKU09OLnBhcnNlKHN0ZG91dC50cmltKCkpO1xuICAgIHJldHVybiBkZXZpY2VUeXBlcy5kZXZpY2V0eXBlcy5tYXAoKHR5cGUpID0+IHR5cGUubmFtZSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIGdldCBsaXN0IG9mIGRldmljZSB0eXBlczogJHtlcnIubWVzc2FnZX1gKTtcbiAgfVxufTtcblxuLyoqXG4gKiBHZXQgdGhlIGZ1bGwgbGlzdCBvZiBydW50aW1lcywgZGV2aWNldHlwZXMsIGRldmljZXMgYW5kIHBhaXJzIGFzIE9iamVjdFxuICpcbiAqIEByZXR1cm4ge1Byb21pc2U8T2JqZWN0Pn0gT2JqZWN0IGNvbnRhaW5pbmcgZGV2aWNlIHR5cGVzLCBydW50aW1lcyBkZXZpY2VzIGFuZCBwYWlycy5cbiAqIFRoZSByZXN1bHRpbmcgSlNPTiB3aWxsIGJlIGxpa2U6XG4gKiAgIHtcbiAqICAgICBcImRldmljZXR5cGVzXCIgOiBbXG4gKiAgICAgICB7XG4gKiAgICAgICAgIFwibmFtZVwiIDogXCJpUGhvbmUgNHNcIixcbiAqICAgICAgICAgXCJpZGVudGlmaWVyXCIgOiBcImNvbS5hcHBsZS5Db3JlU2ltdWxhdG9yLlNpbURldmljZVR5cGUuaVBob25lLTRzXCJcbiAqICAgICAgIH0sXG4gKiAgICAgICAuLi5cbiAqICAgICAgXSxcbiAqICAgICBcInJ1bnRpbWVzXCIgOiBbXG4gKiAgICAgICB7XG4gKiAgICAgICAgIFwidmVyc2lvblwiIDogJzEzLjAnLFxuICogICAgICAgICBcImJ1bmRsZVBhdGhcIiA6ICcvQXBwbGljYXRpb25zL1hjb2RlMTFiZXRhNC5hcHAvQ29udGVudHMvRGV2ZWxvcGVyL1BsYXRmb3Jtcy9pUGhvbmVPUy5wbGF0Zm9ybS9MaWJyYXJ5L0RldmVsb3Blci9Db3JlU2ltdWxhdG9yL1Byb2ZpbGVzL1J1bnRpbWVzL2lPUy5zaW1ydW50aW1lJyxcbiAqICAgICAgICAgXCJpc0F2YWlsYWJsZVwiIDogdHJ1ZSxcbiAqICAgICAgICAgXCJuYW1lXCIgOiAnaU9TIDEzLjAnLFxuICogICAgICAgICBcImlkZW50aWZpZXJcIiA6ICdjb20uYXBwbGUuQ29yZVNpbXVsYXRvci5TaW1SdW50aW1lLmlPUy0xMy0wJyxcbiAqICAgICAgICAgXCJidWlsZHZlcnNpb25cIiA6ICcxN0E1NTM0ZCdcbiAqICAgICAgIH0sXG4gKiAgICAgICAuLi5cbiAqICAgICAgfSxcbiAqICAgICBcImRldmljZXNcIiA6XG4gKiAgICAgICB7XG4gKiAgICAgICAgICdjb20uYXBwbGUuQ29yZVNpbXVsYXRvci5TaW1SdW50aW1lLmlPUy0xMy0wJzogWyBbT2JqZWN0XSwgW09iamVjdF0gXSB9LFxuICogICAgICAgICAuLi5cbiAqICAgICAgIH0sXG4gKiAgICAgXCJwYWlyc1wiIDoge30gfVxuICpcbiAqICAgfVxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBjb3JyZXNwb25kaW5nIHNpbWN0bCBjb21tYW5kIGZhaWxzXG4gKi9cbmNvbW1hbmRzLmxpc3QgPSBhc3luYyBmdW5jdGlvbiBsaXN0ICgpIHtcbiAgY29uc3Qge3N0ZG91dH0gPSBhd2FpdCB0aGlzLmV4ZWMoJ2xpc3QnLCB7XG4gICAgYXJnczogWyctaiddLFxuICB9KTtcbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShzdGRvdXQudHJpbSgpKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIHBhcnNlIHNpbWN0bCBsaXN0OiAke2UubWVzc2FnZX1gKTtcbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgY29tbWFuZHM7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUEsSUFBQUEsT0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsUUFBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsT0FBQSxHQUFBQyx1QkFBQSxDQUFBSCxPQUFBO0FBQTRDLFNBQUFJLHlCQUFBQyxXQUFBLGVBQUFDLE9BQUEsa0NBQUFDLGlCQUFBLE9BQUFELE9BQUEsUUFBQUUsZ0JBQUEsT0FBQUYsT0FBQSxZQUFBRix3QkFBQSxZQUFBQSxDQUFBQyxXQUFBLFdBQUFBLFdBQUEsR0FBQUcsZ0JBQUEsR0FBQUQsaUJBQUEsS0FBQUYsV0FBQTtBQUFBLFNBQUFGLHdCQUFBTSxHQUFBLEVBQUFKLFdBQUEsU0FBQUEsV0FBQSxJQUFBSSxHQUFBLElBQUFBLEdBQUEsQ0FBQUMsVUFBQSxXQUFBRCxHQUFBLFFBQUFBLEdBQUEsb0JBQUFBLEdBQUEsd0JBQUFBLEdBQUEsNEJBQUFFLE9BQUEsRUFBQUYsR0FBQSxVQUFBRyxL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
314
+ exports.default = commands;
315
+ //# sourceMappingURL=list.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"list.js","names":["_lodash","_interopRequireDefault","require","_helpers","_logger","_interopRequireWildcard","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","default","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","commands","getDevicesByParsing","platform","stdout","exec","args","deviceSectionRe","_","isEmpty","RegExp","escapeRegExp","matches","match","push","Error","lineRe","devices","sdk","line","split","slice","includes","lineMatch","name","udid","state","getDevices","forSdk","versionMatchRe","sdkName","entries","toPairs","JSON","parse","replace","SIM_RUNTIME_NAME","versionMatch","filter","el","isUndefined","isAvailable","map","availability","err","log","debug","LOG_PREFIX","stack","errMsg","availableSDKs","keys","length","join","getRuntimeForPlatformVersionViaJson","platformVersion","version","identifier","runtimes","normalizeVersion","toLowerCase","startsWith","getRuntimeForPlatformVersion","runtimeRe","ign","getDeviceTypes","deviceTypes","trim","devicetypes","type","message","list","e","_default","exports"],"sources":["../../../lib/subcommands/list.js"],"sourcesContent":["import _ from 'lodash';\nimport { SIM_RUNTIME_NAME, normalizeVersion } from '../helpers';\nimport log, { LOG_PREFIX } from '../logger';\n\n\nconst commands = {};\n\n/**\n * @typedef {Object} DeviceInfo\n * @property {string} name - The device name.\n * @property {string} udid - The device UDID.\n * @property {string} state - The current Simulator state, for example 'booted' or 'shutdown'.\n * @property {string} sdk - The SDK version, for example '10.3'.\n */\n\n/**\n * Parse the list of existing Simulator devices to represent\n * it as convenient mapping.\n *\n * @param {?string} platform - The platform name, for example 'watchOS'.\n * @return {Object} The resulting mapping. Each key is platform version,\n * for example '10.3' and the corresponding value is an\n * array of the matching {@link DeviceInfo} instances.\n * @throws {Error} If the corresponding simctl subcommand command\n * returns non-zero return code.\n */\ncommands.getDevicesByParsing = async function getDevicesByParsing (platform) {\n // get the list of devices\n const {stdout} = await this.exec('list', {\n args: ['devices'],\n });\n\n // expect to get a listing like\n // -- iOS 8.1 --\n // iPhone 4s (3CA6E7DD-220E-45E5-B716-1E992B3A429C) (Shutdown)\n // ...\n // -- iOS 8.2 --\n // iPhone 4s (A99FFFC3-8E19-4DCF-B585-7D9D46B4C16E) (Shutdown)\n // ...\n // so, get the `-- iOS X.X --` line to find the sdk (X.X)\n // and the rest of the listing in order to later find the devices\n const deviceSectionRe = _.isEmpty(platform)\n ? new RegExp(`\\\\-\\\\-\\\\s+(\\\\S+)\\\\s+(\\\\S+)\\\\s+\\\\-\\\\-(\\\\n\\\\s{4}.+)*`, 'mgi')\n : new RegExp(`\\\\-\\\\-\\\\s+${_.escapeRegExp(platform)}\\\\s+(\\\\S+)\\\\s+\\\\-\\\\-(\\\\n\\\\s{4}.+)*`, 'mgi');\n const matches = [];\n let match;\n // make an entry for each sdk version\n while ((match = deviceSectionRe.exec(stdout))) {\n matches.push(match);\n }\n if (_.isEmpty(matches)) {\n throw new Error('Could not find device section');\n }\n\n const lineRe = /([^\\s].+) \\((\\w+-.+\\w+)\\) \\((\\w+\\s?\\w+)\\)/; // https://regex101.com/r/lG7mK6/3\n // get all the devices for each sdk\n const devices = {};\n for (match of matches) {\n const sdk = platform ? match[1] : match[2];\n devices[sdk] = devices[sdk] || [];\n // split the full match into lines and remove the first\n for (const line of match[0].split('\\n').slice(1)) {\n if (line.includes('(unavailable, ')) {\n continue;\n }\n // a line is something like\n // iPhone 4s (A99FFFC3-8E19-4DCF-B585-7D9D46B4C16E) (Shutdown)\n // retrieve:\n // iPhone 4s\n // A99FFFC3-8E19-4DCF-B585-7D9D46B4C16E\n // Shutdown\n const lineMatch = lineRe.exec(line);\n if (!lineMatch) {\n throw new Error(`Could not match line: ${line}`);\n }\n // save the whole thing as ab object in the list for this sdk\n devices[sdk].push({\n name: lineMatch[1],\n udid: lineMatch[2],\n state: lineMatch[3],\n sdk,\n platform: platform || match[1],\n });\n }\n }\n return devices;\n};\n\n/**\n * Parse the list of existing Simulator devices to represent\n * it as convenient mapping for the particular platform version.\n *\n * @param {string?} forSdk - The sdk version,\n * for which the devices list should be parsed,\n * for example '10.3'.\n * @param {string?} platform - The platform name, for example 'watchOS'.\n * @return {Promise<Object|DeviceInfo[]>} If _forSdk_ is set then the list\n * of devices for the particular platform version.\n * Otherwise the same result as for {@link getDevicesByParsing}\n * function.\n * @throws {Error} If the corresponding simctl subcommand command\n * returns non-zero return code or if no matching\n * platform version is found in the system.\n */\ncommands.getDevices = async function getDevices (forSdk, platform) {\n let devices = {};\n try {\n const {stdout} = await this.exec('list', {\n args: ['devices', '-j'],\n });\n /* JSON should be\n * {\n * \"devices\" : {\n * \"iOS <sdk>\" : [ // or\n * \"com.apple.CoreSimulator.SimRuntime.iOS-<sdk> : [\n * {\n * \"state\" : \"Booted\",\n * \"availability\" : \"(available)\",\n * \"isAvailable\" : true,\n * \"name\" : \"iPhone 6\",\n * \"udid\" : \"75E34140-18E8-4D1A-9F45-AAC735DF75DF\"\n * }\n * ]\n * }\n * }\n */\n const versionMatchRe = _.isEmpty(platform)\n ? new RegExp(`^([^\\\\s-]+)[\\\\s-](\\\\S+)`, 'i')\n : new RegExp(`^${_.escapeRegExp(platform)}[\\\\s-](\\\\S+)`, 'i');\n for (let [sdkName, entries] of _.toPairs(JSON.parse(stdout).devices)) {\n // there could be a longer name, so remove it\n sdkName = sdkName.replace(SIM_RUNTIME_NAME, '');\n const versionMatch = versionMatchRe.exec(sdkName);\n if (!versionMatch) {\n continue;\n }\n\n // the sdk can have dashes (`12-2`) or dots (`12.1`)\n const sdk = (platform ? versionMatch[1] : versionMatch[2]).replace('-', '.');\n devices[sdk] = devices[sdk] || [];\n devices[sdk].push(...entries.filter((el) => _.isUndefined(el.isAvailable) || el.isAvailable)\n .map((el) => {\n delete el.availability;\n return {\n sdk,\n ...el,\n platform: platform || versionMatch[1],\n };\n })\n );\n }\n } catch (err) {\n log.debug(LOG_PREFIX, `Unable to get JSON device list: ${err.stack}`);\n log.debug(LOG_PREFIX, 'Falling back to manual parsing');\n devices = await this.getDevicesByParsing(platform);\n }\n\n if (!forSdk) {\n return devices;\n }\n // if a `forSdk` was passed in, return only the corresponding list\n if (devices[forSdk]) {\n return devices[forSdk];\n }\n\n let errMsg = `'${forSdk}' does not exist in the list of simctl SDKs.`;\n const availableSDKs = _.keys(devices);\n errMsg += availableSDKs.length\n ? ` Only the following Simulator SDK versions are available on your system: ${availableSDKs.join(', ')}`\n : ` No Simulator SDK versions are available on your system. Please install some via Xcode preferences.`;\n throw new Error(errMsg);\n};\n\n/**\n * Get the runtime for the particular platform version using --json flag\n *\n * @param {string} platformVersion - The platform version name,\n * for example '10.3'.\n * @param {string?} platform - The platform name, for example 'watchOS'.\n * @return {Promise<string>} The corresponding runtime name for the given\n * platform version.\n */\ncommands.getRuntimeForPlatformVersionViaJson = async function getRuntimeForPlatformVersionViaJson (\n platformVersion, platform = 'iOS') {\n const {stdout} = await this.exec('list', {\n args: ['runtimes', '--json'],\n });\n for (const {version, identifier, name} of JSON.parse(stdout).runtimes) {\n if (normalizeVersion(version) === normalizeVersion(platformVersion)\n && name.toLowerCase().startsWith(platform.toLowerCase())) {\n return identifier;\n }\n }\n throw new Error(`Could not use --json flag to parse platform version`);\n};\n\n/**\n * Get the runtime for the particular platform version.\n *\n * @param {string} platformVersion - The platform version name,\n * for example '10.3'.\n * @param {string?} platform - The platform name, for example 'watchOS'.\n * @return {Promise<string>} The corresponding runtime name for the given\n * platform version.\n */\ncommands.getRuntimeForPlatformVersion = async function getRuntimeForPlatformVersion (\n platformVersion, platform = 'iOS') {\n // Try with parsing\n try {\n const {stdout} = await this.exec('list', {\n args: ['runtimes'],\n });\n // https://regex101.com/r/UykjQZ/1\n const runtimeRe =\n new RegExp(`${_.escapeRegExp(platform)}\\\\s+(\\\\d+\\\\.\\\\d+)\\\\s+\\\\((\\\\d+\\\\.\\\\d+\\\\.*\\\\d*)`, 'i');\n for (const line of stdout.split('\\n')) {\n const match = runtimeRe.exec(line);\n if (match && match[1] === platformVersion) {\n return match[2];\n }\n }\n } catch (ign) {}\n\n // if nothing was found, pass platform version back\n return platformVersion;\n};\n\n/**\n * Get the list of device types available in the current Xcode installation\n *\n * @return {Promise<string[]>} List of the types of devices available\n * @throws {Error} If the corresponding simctl command fails\n */\ncommands.getDeviceTypes = async function getDeviceTypes () {\n const {stdout} = await this.exec('list', {\n args: ['devicetypes', '-j'],\n });\n /*\n * JSON will be like:\n * {\n * \"devicetypes\" : [\n * {\n * \"name\" : \"iPhone 4s\",\n * \"identifier\" : \"com.apple.CoreSimulator.SimDeviceType.iPhone-4s\"\n * },\n * ...\n * }\n */\n try {\n const deviceTypes = JSON.parse(stdout.trim());\n return deviceTypes.devicetypes.map((type) => type.name);\n } catch (err) {\n throw new Error(`Unable to get list of device types: ${err.message}`);\n }\n};\n\n/**\n * Get the full list of runtimes, devicetypes, devices and pairs as Object\n *\n * @return {Promise<Object>} Object containing device types, runtimes devices and pairs.\n * The resulting JSON will be like:\n * {\n * \"devicetypes\" : [\n * {\n * \"name\" : \"iPhone 4s\",\n * \"identifier\" : \"com.apple.CoreSimulator.SimDeviceType.iPhone-4s\"\n * },\n * ...\n * ],\n * \"runtimes\" : [\n * {\n * \"version\" : '13.0',\n * \"bundlePath\" : '/Applications/Xcode11beta4.app/Contents/Developer/Platforms/iPhoneOS.platform/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS.simruntime',\n * \"isAvailable\" : true,\n * \"name\" : 'iOS 13.0',\n * \"identifier\" : 'com.apple.CoreSimulator.SimRuntime.iOS-13-0',\n * \"buildversion\" : '17A5534d'\n * },\n * ...\n * },\n * \"devices\" :\n * {\n * 'com.apple.CoreSimulator.SimRuntime.iOS-13-0': [ [Object], [Object] ] },\n * ...\n * },\n * \"pairs\" : {} }\n *\n * }\n * @throws {Error} If the corresponding simctl command fails\n */\ncommands.list = async function list () {\n const {stdout} = await this.exec('list', {\n args: ['-j'],\n });\n try {\n return JSON.parse(stdout.trim());\n } catch (e) {\n throw new Error(`Unable to parse simctl list: ${e.message}`);\n }\n};\n\nexport default commands;\n"],"mappings":"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"}
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../lib/subcommands/list.js"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ export default commands;
2
+ declare namespace commands {
3
+ /**
4
+ * Set the Simulator location to a specific latitude and longitude.
5
+ * This functionality is only available since Xcode 14.
6
+ *
7
+ * @param {string|number} latitude Location latitude value
8
+ * @param {string|number} longitude Location longitude value
9
+ * @throws {Error} If the corresponding simctl subcommand command
10
+ * returns non-zero return code.
11
+ * @throws {TypeError} If any of the arguments is not a valid value.
12
+ */
13
+ function setLocation(latitude: string | number, longitude: string | number): Promise<void>;
14
+ /**
15
+ * Stop any running scenario and clear any simulated location.
16
+ * This functionality is only available since Xcode 14.
17
+ */
18
+ function clearLocation(): Promise<void>;
19
+ }
20
+ //# sourceMappingURL=location.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"location.d.ts","sourceRoot":"","sources":["../../../lib/subcommands/location.js"],"names":[],"mappings":";;IAiBA;;;;;;;;;OASG;IACH,2FAMC;IAED;;;OAGG;IACH,wCAIC"}