appium-xcuitest-driver 4.12.1 → 4.12.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (131) hide show
  1. package/CHANGELOG.md +1 -0
  2. package/README.md +1 -1
  3. package/build/index.js +1 -4
  4. package/build/lib/app-utils.js +1 -56
  5. package/build/lib/app-utils.js.map +1 -1
  6. package/build/lib/build-wda.js +1 -9
  7. package/build/lib/build-wda.js.map +1 -1
  8. package/build/lib/cert-utils.js +1 -7
  9. package/build/lib/cert-utils.js.map +1 -1
  10. package/build/lib/commands/activeAppInfo.js +3 -6
  11. package/build/lib/commands/activeAppInfo.js.map +1 -1
  12. package/build/lib/commands/alert.js +1 -16
  13. package/build/lib/commands/alert.js.map +1 -1
  14. package/build/lib/commands/app-management.js +3 -32
  15. package/build/lib/commands/app-management.js.map +1 -1
  16. package/build/lib/commands/appearance.js +2 -16
  17. package/build/lib/commands/appearance.js.map +1 -1
  18. package/build/lib/commands/battery.js +3 -5
  19. package/build/lib/commands/battery.js.map +1 -1
  20. package/build/lib/commands/biometric.js +3 -7
  21. package/build/lib/commands/biometric.js.map +1 -1
  22. package/build/lib/commands/certificate.js +2 -57
  23. package/build/lib/commands/certificate.js.map +1 -1
  24. package/build/lib/commands/clipboard.js +3 -6
  25. package/build/lib/commands/clipboard.js.map +1 -1
  26. package/build/lib/commands/condition.js +1 -20
  27. package/build/lib/commands/condition.js.map +1 -1
  28. package/build/lib/commands/context.js +8 -104
  29. package/build/lib/commands/context.js.map +1 -1
  30. package/build/lib/commands/cookies.js +5 -19
  31. package/build/lib/commands/cookies.js.map +1 -1
  32. package/build/lib/commands/deviceInfo.js +5 -10
  33. package/build/lib/commands/deviceInfo.js.map +1 -1
  34. package/build/lib/commands/element.js +4 -71
  35. package/build/lib/commands/element.js.map +1 -1
  36. package/build/lib/commands/execute.js +2 -19
  37. package/build/lib/commands/execute.js.map +1 -1
  38. package/build/lib/commands/file-movement.js +1 -66
  39. package/build/lib/commands/file-movement.js.map +1 -1
  40. package/build/lib/commands/find.js +5 -36
  41. package/build/lib/commands/find.js.map +1 -1
  42. package/build/lib/commands/general.js +4 -61
  43. package/build/lib/commands/general.js.map +1 -1
  44. package/build/lib/commands/gesture.js +7 -92
  45. package/build/lib/commands/gesture.js.map +1 -1
  46. package/build/lib/commands/index.js +1 -42
  47. package/build/lib/commands/index.js.map +1 -1
  48. package/build/lib/commands/iohid.js +2 -11
  49. package/build/lib/commands/iohid.js.map +1 -1
  50. package/build/lib/commands/keychains.js +3 -7
  51. package/build/lib/commands/keychains.js.map +1 -1
  52. package/build/lib/commands/localization.js +2 -5
  53. package/build/lib/commands/localization.js.map +1 -1
  54. package/build/lib/commands/location.js +2 -15
  55. package/build/lib/commands/location.js.map +1 -1
  56. package/build/lib/commands/lock.js +1 -13
  57. package/build/lib/commands/lock.js.map +1 -1
  58. package/build/lib/commands/log.js +1 -44
  59. package/build/lib/commands/log.js.map +1 -1
  60. package/build/lib/commands/navigation.js +4 -20
  61. package/build/lib/commands/navigation.js.map +1 -1
  62. package/build/lib/commands/notifications.js +3 -13
  63. package/build/lib/commands/notifications.js.map +1 -1
  64. package/build/lib/commands/pasteboard.js +1 -10
  65. package/build/lib/commands/pasteboard.js.map +1 -1
  66. package/build/lib/commands/pcap.js +1 -34
  67. package/build/lib/commands/pcap.js.map +1 -1
  68. package/build/lib/commands/performance.js +5 -78
  69. package/build/lib/commands/performance.js.map +1 -1
  70. package/build/lib/commands/permissions.js +4 -20
  71. package/build/lib/commands/permissions.js.map +1 -1
  72. package/build/lib/commands/proxy-helper.js +2 -21
  73. package/build/lib/commands/proxy-helper.js.map +1 -1
  74. package/build/lib/commands/record-audio.js +1 -37
  75. package/build/lib/commands/record-audio.js.map +1 -1
  76. package/build/lib/commands/recordscreen.js +3 -58
  77. package/build/lib/commands/recordscreen.js.map +1 -1
  78. package/build/lib/commands/screenshots.js +1 -21
  79. package/build/lib/commands/screenshots.js.map +1 -1
  80. package/build/lib/commands/source.js +3 -25
  81. package/build/lib/commands/source.js.map +1 -1
  82. package/build/lib/commands/timeouts.js +4 -14
  83. package/build/lib/commands/timeouts.js.map +1 -1
  84. package/build/lib/commands/web.js +18 -138
  85. package/build/lib/commands/web.js.map +1 -1
  86. package/build/lib/commands/xctest.js +2 -38
  87. package/build/lib/commands/xctest.js.map +1 -1
  88. package/build/lib/cookies.js +3 -10
  89. package/build/lib/cookies.js.map +1 -1
  90. package/build/lib/css-converter.js +1 -46
  91. package/build/lib/css-converter.js.map +1 -1
  92. package/build/lib/desired-caps.js +7 -6
  93. package/build/lib/desired-caps.js.map +1 -1
  94. package/build/lib/device-connections-factory.js +1 -64
  95. package/build/lib/device-connections-factory.js.map +1 -1
  96. package/build/lib/device-log/ios-crash-log.js +3 -39
  97. package/build/lib/device-log/ios-crash-log.js.map +1 -1
  98. package/build/lib/device-log/ios-device-log.js +1 -16
  99. package/build/lib/device-log/ios-device-log.js.map +1 -1
  100. package/build/lib/device-log/ios-log.js +1 -18
  101. package/build/lib/device-log/ios-log.js.map +1 -1
  102. package/build/lib/device-log/ios-performance-log.js +2 -15
  103. package/build/lib/device-log/ios-performance-log.js.map +1 -1
  104. package/build/lib/device-log/ios-simulator-log.js +1 -36
  105. package/build/lib/device-log/ios-simulator-log.js.map +1 -1
  106. package/build/lib/device-log/rotating-log.js +1 -19
  107. package/build/lib/device-log/rotating-log.js.map +1 -1
  108. package/build/lib/device-log/safari-console-log.js +2 -15
  109. package/build/lib/device-log/safari-console-log.js.map +1 -1
  110. package/build/lib/device-log/safari-network-log.js +2 -36
  111. package/build/lib/device-log/safari-network-log.js.map +1 -1
  112. package/build/lib/driver.js +15 -236
  113. package/build/lib/driver.js.map +1 -1
  114. package/build/lib/ios-deploy.js +1 -54
  115. package/build/lib/ios-deploy.js.map +1 -1
  116. package/build/lib/ios-fs-helpers.js +1 -52
  117. package/build/lib/ios-fs-helpers.js.map +1 -1
  118. package/build/lib/ios-generic-simulators.js +1 -3
  119. package/build/lib/ios-generic-simulators.js.map +1 -1
  120. package/build/lib/logger.js +1 -5
  121. package/build/lib/logger.js.map +1 -1
  122. package/build/lib/py-ios-device-client.js +1 -30
  123. package/build/lib/py-ios-device-client.js.map +1 -1
  124. package/build/lib/real-device-management.js +1 -34
  125. package/build/lib/real-device-management.js.map +1 -1
  126. package/build/lib/simulator-management.js +2 -96
  127. package/build/lib/simulator-management.js.map +1 -1
  128. package/build/lib/utils.js +2 -100
  129. package/build/lib/utils.js.map +1 -1
  130. package/npm-shrinkwrap.json +309 -350
  131. package/package.json +4 -2
package/CHANGELOG.md ADDED
@@ -0,0 +1 @@
1
+ ## [4.12.2](https://github.com/appium/appium-xcuitest-driver/compare/v4.12.1...v4.12.2) (2022-11-06)
package/README.md CHANGED
@@ -25,7 +25,7 @@ On top of standard Appium requirements XCUITest driver also expects the followin
25
25
  - Only macOS is supported as the host platform
26
26
  - Xcode and developer tools must be installed. Note, that usually some time is needed for the Appium team to pick up with the support of the most recent Xcode versions, especially beta ones (check [Xcode version support](#xcode-version-support) section below).
27
27
  - Connected real devices must be trusted, added to your developer profile and configured properly along with WebDriverAgent signing. Read [Real devices](#real-devices) section _carefully_ to set them up properly before running your tests.
28
- - Starting from iOS/iPadOS version iOS/iPadOS 16 real devices require enabling of _Developer Mode_ option in _Settings -> Privacy & Security_
28
+ - iOS/iPadOS 16 real devices require enabling developer mode. Please read [Enabling Developer Mode on a device](https://developer.apple.com/documentation/xcode/enabling-developer-mode-on-a-device) for more details. `devmodectl streaming` CLI on macOS 13+ and installing development signed apps also help enabling the mode.
29
29
  - Consider using earlier releases of the driver (check [Xcode version support](#xcode-version-support) section below) if it is necessary to test iOS versions older than the current iOS major version minus one on real devices. Also, it is highly recommended to always use the same major version of Xcode SDK, which was used to build the particular iOS/tvOS version on your real device under test (for example Xcode 11 for iOS 13, Xcode 12 for iOS 14, etc).
30
30
  - Web views must be debuggable in order to test them. If it is not possible to connect to your web view(s) using [Safari remote debugger](https://appletoolbox.com/use-web-inspector-debug-mobile-safari/) then XCUITest won't be able to connect to them as well.
31
31
  - Since version 3.33.0 (included into Appium 1.20.0+) of XCUITest driver the [Carthage](https://github.com/Carthage/Carthage) dependency *is not needed anymore*. Prior to that version it was required and could be installed using [brew](https://brew.sh/): `brew install carthage`.
package/build/index.js CHANGED
@@ -10,11 +10,8 @@ Object.defineProperty(exports, "XCUITestDriver", {
10
10
  }
11
11
  });
12
12
  exports.default = void 0;
13
-
14
13
  require("source-map-support/register");
15
-
16
14
  var _driver = require("./lib/driver");
17
-
18
15
  var _default = _driver.XCUITestDriver;
19
16
  exports.default = _default;
20
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJYQ1VJVGVzdERyaXZlciJdLCJzb3VyY2VzIjpbIi4uL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIHRyYW5zcGlsZTptYWluXG5pbXBvcnQgeyBYQ1VJVGVzdERyaXZlciB9IGZyb20gJy4vbGliL2RyaXZlcic7XG5cbmV4cG9ydCB7IFhDVUlUZXN0RHJpdmVyIH07XG5leHBvcnQgZGVmYXVsdCBYQ1VJVGVzdERyaXZlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQ0E7O2VBR2VBLHNCIn0=
17
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJYQ1VJVGVzdERyaXZlciJdLCJzb3VyY2VzIjpbIi4uL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIHRyYW5zcGlsZTptYWluXG5pbXBvcnQgeyBYQ1VJVGVzdERyaXZlciB9IGZyb20gJy4vbGliL2RyaXZlcic7XG5cbmV4cG9ydCB7IFhDVUlUZXN0RHJpdmVyIH07XG5leHBvcnQgZGVmYXVsdCBYQ1VJVGVzdERyaXZlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUNBO0FBQThDLGVBRy9CQSxzQkFBYztBQUFBIn0=
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
@@ -13,17 +12,11 @@ exports.isAppBundle = isAppBundle;
13
12
  exports.isolateAppBundle = isolateAppBundle;
14
13
  exports.parseLocalizableStrings = parseLocalizableStrings;
15
14
  exports.verifyApplicationPlatform = verifyApplicationPlatform;
16
-
17
15
  require("source-map-support/register");
18
-
19
16
  var _lodash = _interopRequireDefault(require("lodash"));
20
-
21
17
  var _path = _interopRequireDefault(require("path"));
22
-
23
18
  var _support = require("appium/support");
24
-
25
19
  var _logger = _interopRequireDefault(require("./logger.js"));
26
-
27
20
  const STRINGSDICT_RESOURCE = '.stringsdict';
28
21
  const STRINGS_RESOURCE = '.strings';
29
22
  const SAFARI_BUNDLE_ID = 'com.apple.mobilesafari';
@@ -32,50 +25,37 @@ const APP_EXT = '.app';
32
25
  exports.APP_EXT = APP_EXT;
33
26
  const IPA_EXT = '.ipa';
34
27
  exports.IPA_EXT = IPA_EXT;
35
-
36
28
  async function extractPlistEntry(app, entryName) {
37
29
  const plistPath = _path.default.resolve(app, 'Info.plist');
38
-
39
30
  try {
40
31
  return (await _support.plist.parsePlistFile(plistPath))[entryName];
41
32
  } catch (err) {
42
33
  throw new Error(`Could not extract Info.plist from '${_path.default.basename(app)}': ${err.message}`);
43
34
  }
44
35
  }
45
-
46
36
  async function extractBundleId(app) {
47
37
  const bundleId = await extractPlistEntry(app, 'CFBundleIdentifier');
48
-
49
38
  _logger.default.debug(`Getting bundle ID from app '${app}': '${bundleId}'`);
50
-
51
39
  return bundleId;
52
40
  }
53
-
54
41
  async function fetchSupportedAppPlatforms(app) {
55
42
  try {
56
43
  const result = await extractPlistEntry(app, 'CFBundleSupportedPlatforms');
57
-
58
44
  if (!_lodash.default.isArray(result)) {
59
45
  _logger.default.warn(`${_path.default.basename(app)}': CFBundleSupportedPlatforms is not a valid list`);
60
-
61
46
  return [];
62
47
  }
63
-
64
48
  return result;
65
49
  } catch (err) {
66
50
  _logger.default.warn(`Cannot extract the list of supported platforms from '${_path.default.basename(app)}': ${err.message}`);
67
-
68
51
  return [];
69
52
  }
70
53
  }
71
54
 
72
55
  async function verifyApplicationPlatform(app, expectedPlatform) {
73
56
  _logger.default.debug('Verifying application platform');
74
-
75
57
  const supportedPlatforms = await fetchSupportedAppPlatforms(app);
76
-
77
58
  _logger.default.debug(`CFBundleSupportedPlatforms: ${JSON.stringify(supportedPlatforms)}`);
78
-
79
59
  const {
80
60
  isSimulator,
81
61
  isTvOS
@@ -83,23 +63,18 @@ async function verifyApplicationPlatform(app, expectedPlatform) {
83
63
  const prefix = isTvOS ? 'AppleTV' : 'iPhone';
84
64
  const suffix = isSimulator ? 'Simulator' : 'OS';
85
65
  const dstPlatform = `${prefix}${suffix}`;
86
-
87
66
  if (!supportedPlatforms.includes(dstPlatform)) {
88
67
  throw new Error(`${isSimulator ? 'Simulator' : 'Real device'} architecture is unsupported by the '${app}' application. ` + `Make sure the correct deployment target has been selected for its compilation in Xcode.`);
89
68
  }
90
69
  }
91
-
92
70
  async function readResource(resourcePath) {
93
71
  const data = await _support.plist.parsePlistFile(resourcePath);
94
72
  const result = {};
95
-
96
73
  for (const [key, value] of _lodash.default.toPairs(data)) {
97
74
  result[key] = _lodash.default.isString(value) ? value : JSON.stringify(value);
98
75
  }
99
-
100
76
  return result;
101
77
  }
102
-
103
78
  async function parseLocalizableStrings(opts) {
104
79
  const {
105
80
  app,
@@ -108,94 +83,66 @@ async function parseLocalizableStrings(opts) {
108
83
  stringFile,
109
84
  strictMode
110
85
  } = opts;
111
-
112
86
  if (!app) {
113
87
  const message = `Strings extraction is not supported if 'app' capability is not set`;
114
-
115
88
  if (strictMode) {
116
89
  throw new Error(message);
117
90
  }
118
-
119
91
  _logger.default.info(message);
120
-
121
92
  return {};
122
93
  }
123
-
124
94
  let lprojRoot;
125
-
126
95
  for (const subfolder of [`${language}.lproj`, localizableStringsDir, '']) {
127
96
  lprojRoot = _path.default.resolve(app, subfolder);
128
-
129
97
  if (await _support.fs.exists(lprojRoot)) {
130
98
  break;
131
99
  }
132
-
133
100
  const message = `No '${lprojRoot}' resources folder has been found`;
134
-
135
101
  if (strictMode) {
136
102
  throw new Error(message);
137
103
  }
138
-
139
104
  _logger.default.debug(message);
140
105
  }
141
-
142
106
  _logger.default.info(`Will extract resource strings from '${lprojRoot}'`);
143
-
144
107
  const resourcePaths = [];
145
-
146
108
  if (stringFile) {
147
109
  const dstPath = _path.default.resolve(lprojRoot, stringFile);
148
-
149
110
  if (await _support.fs.exists(dstPath)) {
150
111
  resourcePaths.push(dstPath);
151
112
  } else {
152
113
  const message = `No '${dstPath}' resource file has been found for '${app}'`;
153
-
154
114
  if (strictMode) {
155
115
  throw new Error(message);
156
116
  }
157
-
158
117
  _logger.default.info(message);
159
-
160
118
  _logger.default.info(`Getting all the available strings from '${lprojRoot}'`);
161
119
  }
162
120
  }
163
-
164
121
  if (_lodash.default.isEmpty(resourcePaths) && (await _support.fs.exists(lprojRoot))) {
165
122
  const resourceFiles = (await _support.fs.readdir(lprojRoot)).filter(name => _lodash.default.some([STRINGS_RESOURCE, STRINGSDICT_RESOURCE], x => name.endsWith(x))).map(name => _path.default.resolve(lprojRoot, name));
166
123
  resourcePaths.push(...resourceFiles);
167
124
  }
168
-
169
125
  _logger.default.info(`Got ${resourcePaths.length} resource file(s) in '${lprojRoot}'`);
170
-
171
126
  if (_lodash.default.isEmpty(resourcePaths)) {
172
127
  return {};
173
128
  }
174
-
175
129
  const resultStrings = {};
176
-
177
130
  const toAbsolutePath = function (p) {
178
131
  return _path.default.isAbsolute(p) ? p : _path.default.resolve(process.cwd(), p);
179
132
  };
180
-
181
133
  for (const resourcePath of resourcePaths) {
182
134
  if (!_support.util.isSubPath(toAbsolutePath(resourcePath), toAbsolutePath(app))) {
183
135
  throw new Error(`'${resourcePath}' is expected to be located under '${app}'`);
184
136
  }
185
-
186
137
  try {
187
138
  const data = await readResource(resourcePath);
188
-
189
139
  _logger.default.debug(`Parsed ${_lodash.default.keys(data).length} string(s) from '${resourcePath}'`);
190
-
191
140
  _lodash.default.merge(resultStrings, data);
192
141
  } catch (e) {
193
142
  _logger.default.warn(`Cannot parse '${resourcePath}' resource. Original error: ${e.message}`);
194
143
  }
195
144
  }
196
-
197
145
  _logger.default.info(`Got ${_lodash.default.keys(resultStrings).length} string(s) from '${lprojRoot}'`);
198
-
199
146
  return resultStrings;
200
147
  }
201
148
 
@@ -220,12 +167,10 @@ async function findApps(archivePath, appExtensions) {
220
167
 
221
168
  async function isolateAppBundle(appRoot) {
222
169
  const tmpRoot = await _support.tempDir.openDir();
223
-
224
170
  const dstRoot = _path.default.join(tmpRoot, _path.default.basename(appRoot));
225
-
226
171
  await _support.fs.mv(appRoot, dstRoot, {
227
172
  mkdirp: true
228
173
  });
229
174
  return dstRoot;
230
175
  }
231
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTVFJJTkdTRElDVF9SRVNPVVJDRSIsIlNUUklOR1NfUkVTT1VSQ0UiLCJTQUZBUklfQlVORExFX0lEIiwiQVBQX0VYVCIsIklQQV9FWFQiLCJleHRyYWN0UGxpc3RFbnRyeSIsImFwcCIsImVudHJ5TmFtZSIsInBsaXN0UGF0aCIsInBhdGgiLCJyZXNvbHZlIiwicGxpc3QiLCJwYXJzZVBsaXN0RmlsZSIsImVyciIsIkVycm9yIiwiYmFzZW5hbWUiLCJtZXNzYWdlIiwiZXh0cmFjdEJ1bmRsZUlkIiwiYnVuZGxlSWQiLCJsb2ciLCJkZWJ1ZyIsImZldGNoU3VwcG9ydGVkQXBwUGxhdGZvcm1zIiwicmVzdWx0IiwiXyIsImlzQXJyYXkiLCJ3YXJuIiwidmVyaWZ5QXBwbGljYXRpb25QbGF0Zm9ybSIsImV4cGVjdGVkUGxhdGZvcm0iLCJzdXBwb3J0ZWRQbGF0Zm9ybXMiLCJKU09OIiwic3RyaW5naWZ5IiwiaXNTaW11bGF0b3IiLCJpc1R2T1MiLCJwcmVmaXgiLCJzdWZmaXgiLCJkc3RQbGF0Zm9ybSIsImluY2x1ZGVzIiwicmVhZFJlc291cmNlIiwicmVzb3VyY2VQYXRoIiwiZGF0YSIsImtleSIsInZhbHVlIiwidG9QYWlycyIsImlzU3RyaW5nIiwicGFyc2VMb2NhbGl6YWJsZVN0cmluZ3MiLCJvcHRzIiwibGFuZ3VhZ2UiLCJsb2NhbGl6YWJsZVN0cmluZ3NEaXIiLCJzdHJpbmdGaWxlIiwic3RyaWN0TW9kZSIsImluZm8iLCJscHJvalJvb3QiLCJzdWJmb2xkZXIiLCJmcyIsImV4aXN0cyIsInJlc291cmNlUGF0aHMiLCJkc3RQYXRoIiwicHVzaCIsImlzRW1wdHkiLCJyZXNvdXJjZUZpbGVzIiwicmVhZGRpciIsImZpbHRlciIsIm5hbWUiLCJzb21lIiwieCIsImVuZHNXaXRoIiwibWFwIiwibGVuZ3RoIiwicmVzdWx0U3RyaW5ncyIsInRvQWJzb2x1dGVQYXRoIiwicCIsImlzQWJzb2x1dGUiLCJwcm9jZXNzIiwiY3dkIiwidXRpbCIsImlzU3ViUGF0aCIsImtleXMiLCJtZXJnZSIsImUiLCJpc0FwcEJ1bmRsZSIsImFwcFBhdGgiLCJ0b0xvd2VyIiwic3RhdCIsImlzRGlyZWN0b3J5Iiwiam9pbiIsImZpbmRBcHBzIiwiYXJjaGl2ZVBhdGgiLCJhcHBFeHRlbnNpb25zIiwidXNlU3lzdGVtVW56aXBFbnYiLCJlbnYiLCJBUFBJVU1fUFJFRkVSX1NZU1RFTV9VTlpJUCIsInVzZVN5c3RlbVVuemlwIiwidG1wUm9vdCIsInRlbXBEaXIiLCJvcGVuRGlyIiwiemlwIiwiZXh0cmFjdEFsbFRvIiwiZ2xvYlBhdHRlcm4iLCJleHQiLCJyZXBsYWNlIiwic29ydGVkQnVuZGxlSXRlbXMiLCJnbG9iIiwic3RyaWN0Iiwic29ydCIsImEiLCJiIiwic3BsaXQiLCJzZXAiLCJpc29sYXRlQXBwQnVuZGxlIiwiYXBwUm9vdCIsImRzdFJvb3QiLCJtdiIsIm1rZGlycCJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9hcHAtdXRpbHMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgcGxpc3QsIGZzLCB1dGlsLCB0ZW1wRGlyLCB6aXAgfSBmcm9tICdhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgbG9nIGZyb20gJy4vbG9nZ2VyLmpzJztcblxuY29uc3QgU1RSSU5HU0RJQ1RfUkVTT1VSQ0UgPSAnLnN0cmluZ3NkaWN0JztcbmNvbnN0IFNUUklOR1NfUkVTT1VSQ0UgPSAnLnN0cmluZ3MnO1xuY29uc3QgU0FGQVJJX0JVTkRMRV9JRCA9ICdjb20uYXBwbGUubW9iaWxlc2FmYXJpJztcbmNvbnN0IEFQUF9FWFQgPSAnLmFwcCc7XG5jb25zdCBJUEFfRVhUID0gJy5pcGEnO1xuXG5hc3luYyBmdW5jdGlvbiBleHRyYWN0UGxpc3RFbnRyeSAoYXBwLCBlbnRyeU5hbWUpIHtcbiAgY29uc3QgcGxpc3RQYXRoID0gcGF0aC5yZXNvbHZlKGFwcCwgJ0luZm8ucGxpc3QnKTtcbiAgdHJ5IHtcbiAgICByZXR1cm4gKGF3YWl0IHBsaXN0LnBhcnNlUGxpc3RGaWxlKHBsaXN0UGF0aCkpW2VudHJ5TmFtZV07XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGV4dHJhY3QgSW5mby5wbGlzdCBmcm9tICcke3BhdGguYmFzZW5hbWUoYXBwKX0nOiAke2Vyci5tZXNzYWdlfWApO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGV4dHJhY3RCdW5kbGVJZCAoYXBwKSB7XG4gIGNvbnN0IGJ1bmRsZUlkID0gYXdhaXQgZXh0cmFjdFBsaXN0RW50cnkoYXBwLCAnQ0ZCdW5kbGVJZGVudGlmaWVyJyk7XG4gIGxvZy5kZWJ1ZyhgR2V0dGluZyBidW5kbGUgSUQgZnJvbSBhcHAgJyR7YXBwfSc6ICcke2J1bmRsZUlkfSdgKTtcbiAgcmV0dXJuIGJ1bmRsZUlkO1xufVxuXG5hc3luYyBmdW5jdGlvbiBmZXRjaFN1cHBvcnRlZEFwcFBsYXRmb3JtcyAoYXBwKSB7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZXh0cmFjdFBsaXN0RW50cnkoYXBwLCAnQ0ZCdW5kbGVTdXBwb3J0ZWRQbGF0Zm9ybXMnKTtcbiAgICBpZiAoIV8uaXNBcnJheShyZXN1bHQpKSB7XG4gICAgICBsb2cud2FybihgJHtwYXRoLmJhc2VuYW1lKGFwcCl9JzogQ0ZCdW5kbGVTdXBwb3J0ZWRQbGF0Zm9ybXMgaXMgbm90IGEgdmFsaWQgbGlzdGApO1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2cud2FybihcbiAgICAgIGBDYW5ub3QgZXh0cmFjdCB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgcGxhdGZvcm1zIGZyb20gJyR7cGF0aC5iYXNlbmFtZShhcHApfSc6ICR7ZXJyLm1lc3NhZ2V9YFxuICAgICk7XG4gICAgcmV0dXJuIFtdO1xuICB9XG59XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gUGxhdGZvcm1PcHRzXG4gKlxuICogQHByb3BlcnR5IHtib29sZWFufSBpc1NpbXVsYXRvciAtIFdoZXRoZXIgdGhlIGRlc3RpbmF0aW9uIHBsYXRmb3JtIGlzIGEgU2ltdWxhdG9yXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGlzVHZPUyAtIFdoZXRoZXIgdGhlIGRlc3RpbmF0aW9uIHBsYXRmb3JtIGlzIGEgU2ltdWxhdG9yXG4gKi9cblxuLyoqXG4gKiBWZXJpZnkgd2hldGhlciB0aGUgZ2l2ZW4gYXBwbGljYXRpb24gaXMgY29tcGF0aWJsZSB0byB0aGVcbiAqIHBsYXRmb3JtIHdoZXJlIGl0IGlzIGdvaW5nIHRvIGJlIGluc3RhbGxlZCBhbmQgdGVzdGVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcHAgLSBUaGUgYWN0dWFsIHBhdGggdG8gdGhlIGFwcGxpY2F0aW9uIGJ1bmRsZVxuICogQHBhcmFtIHtQbGF0Zm9ybU9wdHN9IGV4cGVjdGVkUGxhdGZvcm1cbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiBidW5kbGUgYXJjaGl0ZWN0dXJlIGRvZXMgbm90IG1hdGNoIHRoZSBleHBlY3RlZCBkZXZpY2UgYXJjaGl0ZWN0dXJlLlxuICovXG5hc3luYyBmdW5jdGlvbiB2ZXJpZnlBcHBsaWNhdGlvblBsYXRmb3JtIChhcHAsIGV4cGVjdGVkUGxhdGZvcm0pIHtcbiAgbG9nLmRlYnVnKCdWZXJpZnlpbmcgYXBwbGljYXRpb24gcGxhdGZvcm0nKTtcblxuICBjb25zdCBzdXBwb3J0ZWRQbGF0Zm9ybXMgPSBhd2FpdCBmZXRjaFN1cHBvcnRlZEFwcFBsYXRmb3JtcyhhcHApO1xuICBsb2cuZGVidWcoYENGQnVuZGxlU3VwcG9ydGVkUGxhdGZvcm1zOiAke0pTT04uc3RyaW5naWZ5KHN1cHBvcnRlZFBsYXRmb3Jtcyl9YCk7XG5cbiAgY29uc3Qge1xuICAgIGlzU2ltdWxhdG9yLFxuICAgIGlzVHZPUyxcbiAgfSA9IGV4cGVjdGVkUGxhdGZvcm07XG4gIGNvbnN0IHByZWZpeCA9IGlzVHZPUyA/ICdBcHBsZVRWJyA6ICdpUGhvbmUnO1xuICBjb25zdCBzdWZmaXggPSBpc1NpbXVsYXRvciA/ICdTaW11bGF0b3InIDogJ09TJztcbiAgY29uc3QgZHN0UGxhdGZvcm0gPSBgJHtwcmVmaXh9JHtzdWZmaXh9YDtcbiAgaWYgKCFzdXBwb3J0ZWRQbGF0Zm9ybXMuaW5jbHVkZXMoZHN0UGxhdGZvcm0pKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAke2lzU2ltdWxhdG9yID8gJ1NpbXVsYXRvcicgOiAnUmVhbCBkZXZpY2UnfSBhcmNoaXRlY3R1cmUgaXMgdW5zdXBwb3J0ZWQgYnkgdGhlICcke2FwcH0nIGFwcGxpY2F0aW9uLiBgICtcbiAgICAgIGBNYWtlIHN1cmUgdGhlIGNvcnJlY3QgZGVwbG95bWVudCB0YXJnZXQgaGFzIGJlZW4gc2VsZWN0ZWQgZm9yIGl0cyBjb21waWxhdGlvbiBpbiBYY29kZS5gKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiByZWFkUmVzb3VyY2UgKHJlc291cmNlUGF0aCkge1xuICBjb25zdCBkYXRhID0gYXdhaXQgcGxpc3QucGFyc2VQbGlzdEZpbGUocmVzb3VyY2VQYXRoKTtcbiAgY29uc3QgcmVzdWx0ID0ge307XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIF8udG9QYWlycyhkYXRhKSkge1xuICAgIHJlc3VsdFtrZXldID0gXy5pc1N0cmluZyh2YWx1ZSkgPyB2YWx1ZSA6IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5hc3luYyBmdW5jdGlvbiBwYXJzZUxvY2FsaXphYmxlU3RyaW5ncyAob3B0cykge1xuICBjb25zdCB7XG4gICAgYXBwLFxuICAgIGxhbmd1YWdlID0gJ2VuJyxcbiAgICBsb2NhbGl6YWJsZVN0cmluZ3NEaXIsXG4gICAgc3RyaW5nRmlsZSxcbiAgICBzdHJpY3RNb2RlLFxuICB9ID0gb3B0cztcblxuICBpZiAoIWFwcCkge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBgU3RyaW5ncyBleHRyYWN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgaWYgJ2FwcCcgY2FwYWJpbGl0eSBpcyBub3Qgc2V0YDtcbiAgICBpZiAoc3RyaWN0TW9kZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgIH1cbiAgICBsb2cuaW5mbyhtZXNzYWdlKTtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICBsZXQgbHByb2pSb290O1xuICBmb3IgKGNvbnN0IHN1YmZvbGRlciBvZiBbYCR7bGFuZ3VhZ2V9Lmxwcm9qYCwgbG9jYWxpemFibGVTdHJpbmdzRGlyLCAnJ10pIHtcbiAgICBscHJvalJvb3QgPSBwYXRoLnJlc29sdmUoYXBwLCBzdWJmb2xkZXIpO1xuICAgIGlmIChhd2FpdCBmcy5leGlzdHMobHByb2pSb290KSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNvbnN0IG1lc3NhZ2UgPSBgTm8gJyR7bHByb2pSb290fScgcmVzb3VyY2VzIGZvbGRlciBoYXMgYmVlbiBmb3VuZGA7XG4gICAgaWYgKHN0cmljdE1vZGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICB9XG4gICAgbG9nLmRlYnVnKG1lc3NhZ2UpO1xuICB9XG4gIGxvZy5pbmZvKGBXaWxsIGV4dHJhY3QgcmVzb3VyY2Ugc3RyaW5ncyBmcm9tICcke2xwcm9qUm9vdH0nYCk7XG5cbiAgY29uc3QgcmVzb3VyY2VQYXRocyA9IFtdO1xuICBpZiAoc3RyaW5nRmlsZSkge1xuICAgIGNvbnN0IGRzdFBhdGggPSBwYXRoLnJlc29sdmUobHByb2pSb290LCBzdHJpbmdGaWxlKTtcbiAgICBpZiAoYXdhaXQgZnMuZXhpc3RzKGRzdFBhdGgpKSB7XG4gICAgICByZXNvdXJjZVBhdGhzLnB1c2goZHN0UGF0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgTm8gJyR7ZHN0UGF0aH0nIHJlc291cmNlIGZpbGUgaGFzIGJlZW4gZm91bmQgZm9yICcke2FwcH0nYDtcbiAgICAgIGlmIChzdHJpY3RNb2RlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICAgIH1cbiAgICAgIGxvZy5pbmZvKG1lc3NhZ2UpO1xuICAgICAgbG9nLmluZm8oYEdldHRpbmcgYWxsIHRoZSBhdmFpbGFibGUgc3RyaW5ncyBmcm9tICcke2xwcm9qUm9vdH0nYCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKF8uaXNFbXB0eShyZXNvdXJjZVBhdGhzKSAmJiBhd2FpdCBmcy5leGlzdHMobHByb2pSb290KSkge1xuICAgIGNvbnN0IHJlc291cmNlRmlsZXMgPSAoYXdhaXQgZnMucmVhZGRpcihscHJvalJvb3QpKVxuICAgICAgLmZpbHRlcigobmFtZSkgPT4gXy5zb21lKFtTVFJJTkdTX1JFU09VUkNFLCBTVFJJTkdTRElDVF9SRVNPVVJDRV0sICh4KSA9PiBuYW1lLmVuZHNXaXRoKHgpKSlcbiAgICAgIC5tYXAoKG5hbWUpID0+IHBhdGgucmVzb2x2ZShscHJvalJvb3QsIG5hbWUpKTtcbiAgICByZXNvdXJjZVBhdGhzLnB1c2goLi4ucmVzb3VyY2VGaWxlcyk7XG4gIH1cbiAgbG9nLmluZm8oYEdvdCAke3Jlc291cmNlUGF0aHMubGVuZ3RofSByZXNvdXJjZSBmaWxlKHMpIGluICcke2xwcm9qUm9vdH0nYCk7XG5cbiAgaWYgKF8uaXNFbXB0eShyZXNvdXJjZVBhdGhzKSkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGNvbnN0IHJlc3VsdFN0cmluZ3MgPSB7fTtcbiAgY29uc3QgdG9BYnNvbHV0ZVBhdGggPSBmdW5jdGlvbiAocCkge1xuICAgIHJldHVybiBwYXRoLmlzQWJzb2x1dGUocCkgPyBwIDogcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksIHApO1xuICB9O1xuICBmb3IgKGNvbnN0IHJlc291cmNlUGF0aCBvZiByZXNvdXJjZVBhdGhzKSB7XG4gICAgaWYgKCF1dGlsLmlzU3ViUGF0aCh0b0Fic29sdXRlUGF0aChyZXNvdXJjZVBhdGgpLCB0b0Fic29sdXRlUGF0aChhcHApKSkge1xuICAgICAgLy8gc2VjdXJpdHkgcHJlY2F1dGlvblxuICAgICAgdGhyb3cgbmV3IEVycm9yKGAnJHtyZXNvdXJjZVBhdGh9JyBpcyBleHBlY3RlZCB0byBiZSBsb2NhdGVkIHVuZGVyICcke2FwcH0nYCk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVhZFJlc291cmNlKHJlc291cmNlUGF0aCk7XG4gICAgICBsb2cuZGVidWcoYFBhcnNlZCAke18ua2V5cyhkYXRhKS5sZW5ndGh9IHN0cmluZyhzKSBmcm9tICcke3Jlc291cmNlUGF0aH0nYCk7XG4gICAgICBfLm1lcmdlKHJlc3VsdFN0cmluZ3MsIGRhdGEpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZy53YXJuKGBDYW5ub3QgcGFyc2UgJyR7cmVzb3VyY2VQYXRofScgcmVzb3VyY2UuIE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICBsb2cuaW5mbyhgR290ICR7Xy5rZXlzKHJlc3VsdFN0cmluZ3MpLmxlbmd0aH0gc3RyaW5nKHMpIGZyb20gJyR7bHByb2pSb290fSdgKTtcbiAgcmV0dXJuIHJlc3VsdFN0cmluZ3M7XG59XG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gcGF0aCBvbiB0aGUgZmlsZSBzeXN0ZW0gcG9pbnRzIHRvIHRoZSAuYXBwIGJ1bmRsZSByb290XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGFwcFBhdGggUG9zc2libGUgLmFwcCBidW5kbGUgcm9vdFxuICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgdGhlIGdpdmVuIHBhdGggcG9pbnRzIHRvIGFuIC5hcHAgYnVuZGxlXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGlzQXBwQnVuZGxlIChhcHBQYXRoKSB7XG4gIHJldHVybiBfLmVuZHNXaXRoKF8udG9Mb3dlcihhcHBQYXRoKSwgQVBQX0VYVClcbiAgICAmJiAoYXdhaXQgZnMuc3RhdChhcHBQYXRoKSkuaXNEaXJlY3RvcnkoKVxuICAgICYmIGF3YWl0IGZzLmV4aXN0cyhwYXRoLmpvaW4oYXBwUGF0aCwgJ0luZm8ucGxpc3QnKSk7XG59XG5cbi8qKlxuICogRXh0cmFjdCB0aGUgZ2l2ZW4gYXJjaGl2ZSBhbmQgbG9va3MgZm9yIGl0ZW1zIHdpdGggZ2l2ZW4gZXh0ZW5zaW9ucyBpbiBpdFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcmNoaXZlUGF0aCBGdWxsIHBhdGggdG8gYSAuemlwIGFyY2hpdmVcbiAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gYXBwRXh0ZW5zaW9ucyBMaXN0IG9mIG1hdGNoaW5nIGl0ZW0gZXh0ZW5zaW9uc1xuICogQHJldHVybnMge1tzdHJpbmcsIEFycmF5PFN0cmluZz5dfSBUdXBsZSwgd2hlcmUgdGhlIGZpcnN0IGVsZW1lbnQgcG9pbnRzIHRvXG4gKiBhIHRlbXBvcmFyeSBmb2xkZXIgcm9vdCB3aGVyZSB0aGUgYXJjaGl2ZSBoYXMgYmVlbiBleHRyYWN0ZWQgYW5kIHRoZSBzZWNvbmQgaXRlbVxuICogY29udGFpbnMgYSBsaXN0IG9mIHJlbGF0aXZlIHBhdGhzIHRvIG1hdGNoZWQgaXRlbXNcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZmluZEFwcHMgKGFyY2hpdmVQYXRoLCBhcHBFeHRlbnNpb25zKSB7XG4gIGNvbnN0IHVzZVN5c3RlbVVuemlwRW52ID0gcHJvY2Vzcy5lbnYuQVBQSVVNX1BSRUZFUl9TWVNURU1fVU5aSVA7XG4gIGNvbnN0IHVzZVN5c3RlbVVuemlwID0gXy5pc0VtcHR5KHVzZVN5c3RlbVVuemlwRW52KVxuICAgIHx8ICFbJzAnLCAnZmFsc2UnXS5pbmNsdWRlcyhfLnRvTG93ZXIodXNlU3lzdGVtVW56aXBFbnYpKTtcbiAgY29uc3QgdG1wUm9vdCA9IGF3YWl0IHRlbXBEaXIub3BlbkRpcigpO1xuICBhd2FpdCB6aXAuZXh0cmFjdEFsbFRvKGFyY2hpdmVQYXRoLCB0bXBSb290LCB7dXNlU3lzdGVtVW56aXB9KTtcbiAgY29uc3QgZ2xvYlBhdHRlcm4gPSBgKiovKi4rKCR7YXBwRXh0ZW5zaW9ucy5tYXAoKGV4dCkgPT4gZXh0LnJlcGxhY2UoL15cXC4vLCAnJykpLmpvaW4oJ3wnKX0pYDtcbiAgY29uc3Qgc29ydGVkQnVuZGxlSXRlbXMgPSAoYXdhaXQgZnMuZ2xvYihnbG9iUGF0dGVybiwge1xuICAgIGN3ZDogdG1wUm9vdCxcbiAgICBzdHJpY3Q6IGZhbHNlLFxuICB9KSkuc29ydCgoYSwgYikgPT4gYS5zcGxpdChwYXRoLnNlcCkubGVuZ3RoIC0gYi5zcGxpdChwYXRoLnNlcCkubGVuZ3RoKTtcbiAgcmV0dXJuIFt0bXBSb290LCBzb3J0ZWRCdW5kbGVJdGVtc107XG59XG5cbi8qKlxuICogTW92ZXMgdGhlIGFwcGxpY2F0aW9uIGJ1bmRsZSB0byBhIG5ld2x5IGNyZWF0ZWQgdGVtcG9yYXJ5IGZvbGRlclxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcHBSb290IEZ1bGwgcGF0aCB0byB0aGUgLmFwcCBidW5kbGVcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBuZXcgcGF0aCB0byB0aGUgYXBwIGJ1bmRsZS5cbiAqIFRoZSBuYW1lIG9mIHRoZSBhcHAgYnVuZGxlIHJlbWFpbnMgdGhvdWdoXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGlzb2xhdGVBcHBCdW5kbGUgKGFwcFJvb3QpIHtcbiAgY29uc3QgdG1wUm9vdCA9IGF3YWl0IHRlbXBEaXIub3BlbkRpcigpO1xuICBjb25zdCBkc3RSb290ID0gcGF0aC5qb2luKHRtcFJvb3QsIHBhdGguYmFzZW5hbWUoYXBwUm9vdCkpO1xuICBhd2FpdCBmcy5tdihhcHBSb290LCBkc3RSb290LCB7bWtkaXJwOiB0cnVlfSk7XG4gIHJldHVybiBkc3RSb290O1xufVxuXG5leHBvcnQge1xuICBleHRyYWN0QnVuZGxlSWQsIHZlcmlmeUFwcGxpY2F0aW9uUGxhdGZvcm0sIHBhcnNlTG9jYWxpemFibGVTdHJpbmdzLFxuICBTQUZBUklfQlVORExFX0lELCBmZXRjaFN1cHBvcnRlZEFwcFBsYXRmb3JtcywgQVBQX0VYVCwgSVBBX0VY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
176
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTVFJJTkdTRElDVF9SRVNPVVJDRSIsIlNUUklOR1NfUkVTT1VSQ0UiLCJTQUZBUklfQlVORExFX0lEIiwiQVBQX0VYVCIsIklQQV9FWFQiLCJleHRyYWN0UGxpc3RFbnRyeSIsImFwcCIsImVudHJ5TmFtZSIsInBsaXN0UGF0aCIsInBhdGgiLCJyZXNvbHZlIiwicGxpc3QiLCJwYXJzZVBsaXN0RmlsZSIsImVyciIsIkVycm9yIiwiYmFzZW5hbWUiLCJtZXNzYWdlIiwiZXh0cmFjdEJ1bmRsZUlkIiwiYnVuZGxlSWQiLCJsb2ciLCJkZWJ1ZyIsImZldGNoU3VwcG9ydGVkQXBwUGxhdGZvcm1zIiwicmVzdWx0IiwiXyIsImlzQXJyYXkiLCJ3YXJuIiwidmVyaWZ5QXBwbGljYXRpb25QbGF0Zm9ybSIsImV4cGVjdGVkUGxhdGZvcm0iLCJzdXBwb3J0ZWRQbGF0Zm9ybXMiLCJKU09OIiwic3RyaW5naWZ5IiwiaXNTaW11bGF0b3IiLCJpc1R2T1MiLCJwcmVmaXgiLCJzdWZmaXgiLCJkc3RQbGF0Zm9ybSIsImluY2x1ZGVzIiwicmVhZFJlc291cmNlIiwicmVzb3VyY2VQYXRoIiwiZGF0YSIsImtleSIsInZhbHVlIiwidG9QYWlycyIsImlzU3RyaW5nIiwicGFyc2VMb2NhbGl6YWJsZVN0cmluZ3MiLCJvcHRzIiwibGFuZ3VhZ2UiLCJsb2NhbGl6YWJsZVN0cmluZ3NEaXIiLCJzdHJpbmdGaWxlIiwic3RyaWN0TW9kZSIsImluZm8iLCJscHJvalJvb3QiLCJzdWJmb2xkZXIiLCJmcyIsImV4aXN0cyIsInJlc291cmNlUGF0aHMiLCJkc3RQYXRoIiwicHVzaCIsImlzRW1wdHkiLCJyZXNvdXJjZUZpbGVzIiwicmVhZGRpciIsImZpbHRlciIsIm5hbWUiLCJzb21lIiwieCIsImVuZHNXaXRoIiwibWFwIiwibGVuZ3RoIiwicmVzdWx0U3RyaW5ncyIsInRvQWJzb2x1dGVQYXRoIiwicCIsImlzQWJzb2x1dGUiLCJwcm9jZXNzIiwiY3dkIiwidXRpbCIsImlzU3ViUGF0aCIsImtleXMiLCJtZXJnZSIsImUiLCJpc0FwcEJ1bmRsZSIsImFwcFBhdGgiLCJ0b0xvd2VyIiwic3RhdCIsImlzRGlyZWN0b3J5Iiwiam9pbiIsImZpbmRBcHBzIiwiYXJjaGl2ZVBhdGgiLCJhcHBFeHRlbnNpb25zIiwidXNlU3lzdGVtVW56aXBFbnYiLCJlbnYiLCJBUFBJVU1fUFJFRkVSX1NZU1RFTV9VTlpJUCIsInVzZVN5c3RlbVVuemlwIiwidG1wUm9vdCIsInRlbXBEaXIiLCJvcGVuRGlyIiwiemlwIiwiZXh0cmFjdEFsbFRvIiwiZ2xvYlBhdHRlcm4iLCJleHQiLCJyZXBsYWNlIiwic29ydGVkQnVuZGxlSXRlbXMiLCJnbG9iIiwic3RyaWN0Iiwic29ydCIsImEiLCJiIiwic3BsaXQiLCJzZXAiLCJpc29sYXRlQXBwQnVuZGxlIiwiYXBwUm9vdCIsImRzdFJvb3QiLCJtdiIsIm1rZGlycCJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9hcHAtdXRpbHMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgcGxpc3QsIGZzLCB1dGlsLCB0ZW1wRGlyLCB6aXAgfSBmcm9tICdhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgbG9nIGZyb20gJy4vbG9nZ2VyLmpzJztcblxuY29uc3QgU1RSSU5HU0RJQ1RfUkVTT1VSQ0UgPSAnLnN0cmluZ3NkaWN0JztcbmNvbnN0IFNUUklOR1NfUkVTT1VSQ0UgPSAnLnN0cmluZ3MnO1xuY29uc3QgU0FGQVJJX0JVTkRMRV9JRCA9ICdjb20uYXBwbGUubW9iaWxlc2FmYXJpJztcbmNvbnN0IEFQUF9FWFQgPSAnLmFwcCc7XG5jb25zdCBJUEFfRVhUID0gJy5pcGEnO1xuXG5hc3luYyBmdW5jdGlvbiBleHRyYWN0UGxpc3RFbnRyeSAoYXBwLCBlbnRyeU5hbWUpIHtcbiAgY29uc3QgcGxpc3RQYXRoID0gcGF0aC5yZXNvbHZlKGFwcCwgJ0luZm8ucGxpc3QnKTtcbiAgdHJ5IHtcbiAgICByZXR1cm4gKGF3YWl0IHBsaXN0LnBhcnNlUGxpc3RGaWxlKHBsaXN0UGF0aCkpW2VudHJ5TmFtZV07XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGV4dHJhY3QgSW5mby5wbGlzdCBmcm9tICcke3BhdGguYmFzZW5hbWUoYXBwKX0nOiAke2Vyci5tZXNzYWdlfWApO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGV4dHJhY3RCdW5kbGVJZCAoYXBwKSB7XG4gIGNvbnN0IGJ1bmRsZUlkID0gYXdhaXQgZXh0cmFjdFBsaXN0RW50cnkoYXBwLCAnQ0ZCdW5kbGVJZGVudGlmaWVyJyk7XG4gIGxvZy5kZWJ1ZyhgR2V0dGluZyBidW5kbGUgSUQgZnJvbSBhcHAgJyR7YXBwfSc6ICcke2J1bmRsZUlkfSdgKTtcbiAgcmV0dXJuIGJ1bmRsZUlkO1xufVxuXG5hc3luYyBmdW5jdGlvbiBmZXRjaFN1cHBvcnRlZEFwcFBsYXRmb3JtcyAoYXBwKSB7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZXh0cmFjdFBsaXN0RW50cnkoYXBwLCAnQ0ZCdW5kbGVTdXBwb3J0ZWRQbGF0Zm9ybXMnKTtcbiAgICBpZiAoIV8uaXNBcnJheShyZXN1bHQpKSB7XG4gICAgICBsb2cud2FybihgJHtwYXRoLmJhc2VuYW1lKGFwcCl9JzogQ0ZCdW5kbGVTdXBwb3J0ZWRQbGF0Zm9ybXMgaXMgbm90IGEgdmFsaWQgbGlzdGApO1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2cud2FybihcbiAgICAgIGBDYW5ub3QgZXh0cmFjdCB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgcGxhdGZvcm1zIGZyb20gJyR7cGF0aC5iYXNlbmFtZShhcHApfSc6ICR7ZXJyLm1lc3NhZ2V9YFxuICAgICk7XG4gICAgcmV0dXJuIFtdO1xuICB9XG59XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gUGxhdGZvcm1PcHRzXG4gKlxuICogQHByb3BlcnR5IHtib29sZWFufSBpc1NpbXVsYXRvciAtIFdoZXRoZXIgdGhlIGRlc3RpbmF0aW9uIHBsYXRmb3JtIGlzIGEgU2ltdWxhdG9yXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGlzVHZPUyAtIFdoZXRoZXIgdGhlIGRlc3RpbmF0aW9uIHBsYXRmb3JtIGlzIGEgU2ltdWxhdG9yXG4gKi9cblxuLyoqXG4gKiBWZXJpZnkgd2hldGhlciB0aGUgZ2l2ZW4gYXBwbGljYXRpb24gaXMgY29tcGF0aWJsZSB0byB0aGVcbiAqIHBsYXRmb3JtIHdoZXJlIGl0IGlzIGdvaW5nIHRvIGJlIGluc3RhbGxlZCBhbmQgdGVzdGVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcHAgLSBUaGUgYWN0dWFsIHBhdGggdG8gdGhlIGFwcGxpY2F0aW9uIGJ1bmRsZVxuICogQHBhcmFtIHtQbGF0Zm9ybU9wdHN9IGV4cGVjdGVkUGxhdGZvcm1cbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiBidW5kbGUgYXJjaGl0ZWN0dXJlIGRvZXMgbm90IG1hdGNoIHRoZSBleHBlY3RlZCBkZXZpY2UgYXJjaGl0ZWN0dXJlLlxuICovXG5hc3luYyBmdW5jdGlvbiB2ZXJpZnlBcHBsaWNhdGlvblBsYXRmb3JtIChhcHAsIGV4cGVjdGVkUGxhdGZvcm0pIHtcbiAgbG9nLmRlYnVnKCdWZXJpZnlpbmcgYXBwbGljYXRpb24gcGxhdGZvcm0nKTtcblxuICBjb25zdCBzdXBwb3J0ZWRQbGF0Zm9ybXMgPSBhd2FpdCBmZXRjaFN1cHBvcnRlZEFwcFBsYXRmb3JtcyhhcHApO1xuICBsb2cuZGVidWcoYENGQnVuZGxlU3VwcG9ydGVkUGxhdGZvcm1zOiAke0pTT04uc3RyaW5naWZ5KHN1cHBvcnRlZFBsYXRmb3Jtcyl9YCk7XG5cbiAgY29uc3Qge1xuICAgIGlzU2ltdWxhdG9yLFxuICAgIGlzVHZPUyxcbiAgfSA9IGV4cGVjdGVkUGxhdGZvcm07XG4gIGNvbnN0IHByZWZpeCA9IGlzVHZPUyA/ICdBcHBsZVRWJyA6ICdpUGhvbmUnO1xuICBjb25zdCBzdWZmaXggPSBpc1NpbXVsYXRvciA/ICdTaW11bGF0b3InIDogJ09TJztcbiAgY29uc3QgZHN0UGxhdGZvcm0gPSBgJHtwcmVmaXh9JHtzdWZmaXh9YDtcbiAgaWYgKCFzdXBwb3J0ZWRQbGF0Zm9ybXMuaW5jbHVkZXMoZHN0UGxhdGZvcm0pKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAke2lzU2ltdWxhdG9yID8gJ1NpbXVsYXRvcicgOiAnUmVhbCBkZXZpY2UnfSBhcmNoaXRlY3R1cmUgaXMgdW5zdXBwb3J0ZWQgYnkgdGhlICcke2FwcH0nIGFwcGxpY2F0aW9uLiBgICtcbiAgICAgIGBNYWtlIHN1cmUgdGhlIGNvcnJlY3QgZGVwbG95bWVudCB0YXJnZXQgaGFzIGJlZW4gc2VsZWN0ZWQgZm9yIGl0cyBjb21waWxhdGlvbiBpbiBYY29kZS5gKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiByZWFkUmVzb3VyY2UgKHJlc291cmNlUGF0aCkge1xuICBjb25zdCBkYXRhID0gYXdhaXQgcGxpc3QucGFyc2VQbGlzdEZpbGUocmVzb3VyY2VQYXRoKTtcbiAgY29uc3QgcmVzdWx0ID0ge307XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIF8udG9QYWlycyhkYXRhKSkge1xuICAgIHJlc3VsdFtrZXldID0gXy5pc1N0cmluZyh2YWx1ZSkgPyB2YWx1ZSA6IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5hc3luYyBmdW5jdGlvbiBwYXJzZUxvY2FsaXphYmxlU3RyaW5ncyAob3B0cykge1xuICBjb25zdCB7XG4gICAgYXBwLFxuICAgIGxhbmd1YWdlID0gJ2VuJyxcbiAgICBsb2NhbGl6YWJsZVN0cmluZ3NEaXIsXG4gICAgc3RyaW5nRmlsZSxcbiAgICBzdHJpY3RNb2RlLFxuICB9ID0gb3B0cztcblxuICBpZiAoIWFwcCkge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBgU3RyaW5ncyBleHRyYWN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgaWYgJ2FwcCcgY2FwYWJpbGl0eSBpcyBub3Qgc2V0YDtcbiAgICBpZiAoc3RyaWN0TW9kZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgIH1cbiAgICBsb2cuaW5mbyhtZXNzYWdlKTtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICBsZXQgbHByb2pSb290O1xuICBmb3IgKGNvbnN0IHN1YmZvbGRlciBvZiBbYCR7bGFuZ3VhZ2V9Lmxwcm9qYCwgbG9jYWxpemFibGVTdHJpbmdzRGlyLCAnJ10pIHtcbiAgICBscHJvalJvb3QgPSBwYXRoLnJlc29sdmUoYXBwLCBzdWJmb2xkZXIpO1xuICAgIGlmIChhd2FpdCBmcy5leGlzdHMobHByb2pSb290KSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNvbnN0IG1lc3NhZ2UgPSBgTm8gJyR7bHByb2pSb290fScgcmVzb3VyY2VzIGZvbGRlciBoYXMgYmVlbiBmb3VuZGA7XG4gICAgaWYgKHN0cmljdE1vZGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICB9XG4gICAgbG9nLmRlYnVnKG1lc3NhZ2UpO1xuICB9XG4gIGxvZy5pbmZvKGBXaWxsIGV4dHJhY3QgcmVzb3VyY2Ugc3RyaW5ncyBmcm9tICcke2xwcm9qUm9vdH0nYCk7XG5cbiAgY29uc3QgcmVzb3VyY2VQYXRocyA9IFtdO1xuICBpZiAoc3RyaW5nRmlsZSkge1xuICAgIGNvbnN0IGRzdFBhdGggPSBwYXRoLnJlc29sdmUobHByb2pSb290LCBzdHJpbmdGaWxlKTtcbiAgICBpZiAoYXdhaXQgZnMuZXhpc3RzKGRzdFBhdGgpKSB7XG4gICAgICByZXNvdXJjZVBhdGhzLnB1c2goZHN0UGF0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgTm8gJyR7ZHN0UGF0aH0nIHJlc291cmNlIGZpbGUgaGFzIGJlZW4gZm91bmQgZm9yICcke2FwcH0nYDtcbiAgICAgIGlmIChzdHJpY3RNb2RlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICAgIH1cbiAgICAgIGxvZy5pbmZvKG1lc3NhZ2UpO1xuICAgICAgbG9nLmluZm8oYEdldHRpbmcgYWxsIHRoZSBhdmFpbGFibGUgc3RyaW5ncyBmcm9tICcke2xwcm9qUm9vdH0nYCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKF8uaXNFbXB0eShyZXNvdXJjZVBhdGhzKSAmJiBhd2FpdCBmcy5leGlzdHMobHByb2pSb290KSkge1xuICAgIGNvbnN0IHJlc291cmNlRmlsZXMgPSAoYXdhaXQgZnMucmVhZGRpcihscHJvalJvb3QpKVxuICAgICAgLmZpbHRlcigobmFtZSkgPT4gXy5zb21lKFtTVFJJTkdTX1JFU09VUkNFLCBTVFJJTkdTRElDVF9SRVNPVVJDRV0sICh4KSA9PiBuYW1lLmVuZHNXaXRoKHgpKSlcbiAgICAgIC5tYXAoKG5hbWUpID0+IHBhdGgucmVzb2x2ZShscHJvalJvb3QsIG5hbWUpKTtcbiAgICByZXNvdXJjZVBhdGhzLnB1c2goLi4ucmVzb3VyY2VGaWxlcyk7XG4gIH1cbiAgbG9nLmluZm8oYEdvdCAke3Jlc291cmNlUGF0aHMubGVuZ3RofSByZXNvdXJjZSBmaWxlKHMpIGluICcke2xwcm9qUm9vdH0nYCk7XG5cbiAgaWYgKF8uaXNFbXB0eShyZXNvdXJjZVBhdGhzKSkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGNvbnN0IHJlc3VsdFN0cmluZ3MgPSB7fTtcbiAgY29uc3QgdG9BYnNvbHV0ZVBhdGggPSBmdW5jdGlvbiAocCkge1xuICAgIHJldHVybiBwYXRoLmlzQWJzb2x1dGUocCkgPyBwIDogcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksIHApO1xuICB9O1xuICBmb3IgKGNvbnN0IHJlc291cmNlUGF0aCBvZiByZXNvdXJjZVBhdGhzKSB7XG4gICAgaWYgKCF1dGlsLmlzU3ViUGF0aCh0b0Fic29sdXRlUGF0aChyZXNvdXJjZVBhdGgpLCB0b0Fic29sdXRlUGF0aChhcHApKSkge1xuICAgICAgLy8gc2VjdXJpdHkgcHJlY2F1dGlvblxuICAgICAgdGhyb3cgbmV3IEVycm9yKGAnJHtyZXNvdXJjZVBhdGh9JyBpcyBleHBlY3RlZCB0byBiZSBsb2NhdGVkIHVuZGVyICcke2FwcH0nYCk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVhZFJlc291cmNlKHJlc291cmNlUGF0aCk7XG4gICAgICBsb2cuZGVidWcoYFBhcnNlZCAke18ua2V5cyhkYXRhKS5sZW5ndGh9IHN0cmluZyhzKSBmcm9tICcke3Jlc291cmNlUGF0aH0nYCk7XG4gICAgICBfLm1lcmdlKHJlc3VsdFN0cmluZ3MsIGRhdGEpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZy53YXJuKGBDYW5ub3QgcGFyc2UgJyR7cmVzb3VyY2VQYXRofScgcmVzb3VyY2UuIE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICBsb2cuaW5mbyhgR290ICR7Xy5rZXlzKHJlc3VsdFN0cmluZ3MpLmxlbmd0aH0gc3RyaW5nKHMpIGZyb20gJyR7bHByb2pSb290fSdgKTtcbiAgcmV0dXJuIHJlc3VsdFN0cmluZ3M7XG59XG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gcGF0aCBvbiB0aGUgZmlsZSBzeXN0ZW0gcG9pbnRzIHRvIHRoZSAuYXBwIGJ1bmRsZSByb290XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGFwcFBhdGggUG9zc2libGUgLmFwcCBidW5kbGUgcm9vdFxuICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgdGhlIGdpdmVuIHBhdGggcG9pbnRzIHRvIGFuIC5hcHAgYnVuZGxlXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGlzQXBwQnVuZGxlIChhcHBQYXRoKSB7XG4gIHJldHVybiBfLmVuZHNXaXRoKF8udG9Mb3dlcihhcHBQYXRoKSwgQVBQX0VYVClcbiAgICAmJiAoYXdhaXQgZnMuc3RhdChhcHBQYXRoKSkuaXNEaXJlY3RvcnkoKVxuICAgICYmIGF3YWl0IGZzLmV4aXN0cyhwYXRoLmpvaW4oYXBwUGF0aCwgJ0luZm8ucGxpc3QnKSk7XG59XG5cbi8qKlxuICogRXh0cmFjdCB0aGUgZ2l2ZW4gYXJjaGl2ZSBhbmQgbG9va3MgZm9yIGl0ZW1zIHdpdGggZ2l2ZW4gZXh0ZW5zaW9ucyBpbiBpdFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcmNoaXZlUGF0aCBGdWxsIHBhdGggdG8gYSAuemlwIGFyY2hpdmVcbiAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gYXBwRXh0ZW5zaW9ucyBMaXN0IG9mIG1hdGNoaW5nIGl0ZW0gZXh0ZW5zaW9uc1xuICogQHJldHVybnMge1tzdHJpbmcsIEFycmF5PFN0cmluZz5dfSBUdXBsZSwgd2hlcmUgdGhlIGZpcnN0IGVsZW1lbnQgcG9pbnRzIHRvXG4gKiBhIHRlbXBvcmFyeSBmb2xkZXIgcm9vdCB3aGVyZSB0aGUgYXJjaGl2ZSBoYXMgYmVlbiBleHRyYWN0ZWQgYW5kIHRoZSBzZWNvbmQgaXRlbVxuICogY29udGFpbnMgYSBsaXN0IG9mIHJlbGF0aXZlIHBhdGhzIHRvIG1hdGNoZWQgaXRlbXNcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZmluZEFwcHMgKGFyY2hpdmVQYXRoLCBhcHBFeHRlbnNpb25zKSB7XG4gIGNvbnN0IHVzZVN5c3RlbVVuemlwRW52ID0gcHJvY2Vzcy5lbnYuQVBQSVVNX1BSRUZFUl9TWVNURU1fVU5aSVA7XG4gIGNvbnN0IHVzZVN5c3RlbVVuemlwID0gXy5pc0VtcHR5KHVzZVN5c3RlbVVuemlwRW52KVxuICAgIHx8ICFbJzAnLCAnZmFsc2UnXS5pbmNsdWRlcyhfLnRvTG93ZXIodXNlU3lzdGVtVW56aXBFbnYpKTtcbiAgY29uc3QgdG1wUm9vdCA9IGF3YWl0IHRlbXBEaXIub3BlbkRpcigpO1xuICBhd2FpdCB6aXAuZXh0cmFjdEFsbFRvKGFyY2hpdmVQYXRoLCB0bXBSb290LCB7dXNlU3lzdGVtVW56aXB9KTtcbiAgY29uc3QgZ2xvYlBhdHRlcm4gPSBgKiovKi4rKCR7YXBwRXh0ZW5zaW9ucy5tYXAoKGV4dCkgPT4gZXh0LnJlcGxhY2UoL15cXC4vLCAnJykpLmpvaW4oJ3wnKX0pYDtcbiAgY29uc3Qgc29ydGVkQnVuZGxlSXRlbXMgPSAoYXdhaXQgZnMuZ2xvYihnbG9iUGF0dGVybiwge1xuICAgIGN3ZDogdG1wUm9vdCxcbiAgICBzdHJpY3Q6IGZhbHNlLFxuICB9KSkuc29ydCgoYSwgYikgPT4gYS5zcGxpdChwYXRoLnNlcCkubGVuZ3RoIC0gYi5zcGxpdChwYXRoLnNlcCkubGVuZ3RoKTtcbiAgcmV0dXJuIFt0bXBSb290LCBzb3J0ZWRCdW5kbGVJdGVtc107XG59XG5cbi8qKlxuICogTW92ZXMgdGhlIGFwcGxpY2F0aW9uIGJ1bmRsZSB0byBhIG5ld2x5IGNyZWF0ZWQgdGVtcG9yYXJ5IGZvbGRlclxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcHBSb290IEZ1bGwgcGF0aCB0byB0aGUgLmFwcCBidW5kbGVcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBuZXcgcGF0aCB0byB0aGUgYXBwIGJ1bmRsZS5cbiAqIFRoZSBuYW1lIG9mIHRoZSBhcHAgYnVuZGxlIHJlbWFpbnMgdGhvdWdoXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGlzb2xhdGVBcHBCdW5kbGUgKGFwcFJvb3QpIHtcbiAgY29uc3QgdG1wUm9vdCA9IGF3YWl0IHRlbXBEaXIub3BlbkRpcigpO1xuICBjb25zdCBkc3RSb290ID0gcGF0aC5qb2luKHRtcFJvb3QsIHBhdGguYmFzZW5hbWUoYXBwUm9vdCkpO1xuICBhd2FpdCBmcy5tdihhcHBSb290LCBkc3RSb290LCB7bWtkaXJwOiB0cnVlfSk7XG4gIHJldHVybiBkc3RSb290O1xufVxuXG5leHBvcnQge1xuICBleHRyYWN0QnVuZGxlSWQsIHZlcmlmeUFwcGxpY2F0aW9uUGxhdGZvcm0sIHBhcnNlTG9jYWxpemFibGVTdHJpbmdzLFxuICBTQUZBUklfQlVORExFX0lELCBmZXRjaFN1cHBvcnRlZEFwcFBsYXRmb3JtcywgQVBQX0VYVCwgSVBBX0VY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
@@ -1 +1 @@
1
- {"version":3,"file":"app-utils.js","names":["STRINGSDICT_RESOURCE","STRINGS_RESOURCE","SAFARI_BUNDLE_ID","APP_EXT","IPA_EXT","extractPlistEntry","app","entryName","plistPath","path","resolve","plist","parsePlistFile","err","Error","basename","message","extractBundleId","bundleId","log","debug","fetchSupportedAppPlatforms","result","_","isArray","warn","verifyApplicationPlatform","expectedPlatform","supportedPlatforms","JSON","stringify","isSimulator","isTvOS","prefix","suffix","dstPlatform","includes","readResource","resourcePath","data","key","value","toPairs","isString","parseLocalizableStrings","opts","language","localizableStringsDir","stringFile","strictMode","info","lprojRoot","subfolder","fs","exists","resourcePaths","dstPath","push","isEmpty","resourceFiles","readdir","filter","name","some","x","endsWith","map","length","resultStrings","toAbsolutePath","p","isAbsolute","process","cwd","util","isSubPath","keys","merge","e","isAppBundle","appPath","toLower","stat","isDirectory","join","findApps","archivePath","appExtensions","useSystemUnzipEnv","env","APPIUM_PREFER_SYSTEM_UNZIP","useSystemUnzip","tmpRoot","tempDir","openDir","zip","extractAllTo","globPattern","ext","replace","sortedBundleItems","glob","strict","sort","a","b","split","sep","isolateAppBundle","appRoot","dstRoot","mv","mkdirp"],"sources":["../../lib/app-utils.js"],"sourcesContent":["import _ from 'lodash';\nimport path from 'path';\nimport { plist, fs, util, tempDir, zip } from 'appium/support';\nimport log from './logger.js';\n\nconst STRINGSDICT_RESOURCE = '.stringsdict';\nconst STRINGS_RESOURCE = '.strings';\nconst SAFARI_BUNDLE_ID = 'com.apple.mobilesafari';\nconst APP_EXT = '.app';\nconst IPA_EXT = '.ipa';\n\nasync function extractPlistEntry (app, entryName) {\n const plistPath = path.resolve(app, 'Info.plist');\n try {\n return (await plist.parsePlistFile(plistPath))[entryName];\n } catch (err) {\n throw new Error(`Could not extract Info.plist from '${path.basename(app)}': ${err.message}`);\n }\n}\n\nasync function extractBundleId (app) {\n const bundleId = await extractPlistEntry(app, 'CFBundleIdentifier');\n log.debug(`Getting bundle ID from app '${app}': '${bundleId}'`);\n return bundleId;\n}\n\nasync function fetchSupportedAppPlatforms (app) {\n try {\n const result = await extractPlistEntry(app, 'CFBundleSupportedPlatforms');\n if (!_.isArray(result)) {\n log.warn(`${path.basename(app)}': CFBundleSupportedPlatforms is not a valid list`);\n return [];\n }\n return result;\n } catch (err) {\n log.warn(\n `Cannot extract the list of supported platforms from '${path.basename(app)}': ${err.message}`\n );\n return [];\n }\n}\n\n/**\n * @typedef {Object} PlatformOpts\n *\n * @property {boolean} isSimulator - Whether the destination platform is a Simulator\n * @property {boolean} isTvOS - Whether the destination platform is a Simulator\n */\n\n/**\n * Verify whether the given application is compatible to the\n * platform where it is going to be installed and tested.\n *\n * @param {string} app - The actual path to the application bundle\n * @param {PlatformOpts} expectedPlatform\n * @throws {Error} If bundle architecture does not match the expected device architecture.\n */\nasync function verifyApplicationPlatform (app, expectedPlatform) {\n log.debug('Verifying application platform');\n\n const supportedPlatforms = await fetchSupportedAppPlatforms(app);\n log.debug(`CFBundleSupportedPlatforms: ${JSON.stringify(supportedPlatforms)}`);\n\n const {\n isSimulator,\n isTvOS,\n } = expectedPlatform;\n const prefix = isTvOS ? 'AppleTV' : 'iPhone';\n const suffix = isSimulator ? 'Simulator' : 'OS';\n const dstPlatform = `${prefix}${suffix}`;\n if (!supportedPlatforms.includes(dstPlatform)) {\n throw new Error(`${isSimulator ? 'Simulator' : 'Real device'} architecture is unsupported by the '${app}' application. ` +\n `Make sure the correct deployment target has been selected for its compilation in Xcode.`);\n }\n}\n\nasync function readResource (resourcePath) {\n const data = await plist.parsePlistFile(resourcePath);\n const result = {};\n for (const [key, value] of _.toPairs(data)) {\n result[key] = _.isString(value) ? value : JSON.stringify(value);\n }\n return result;\n}\n\nasync function parseLocalizableStrings (opts) {\n const {\n app,\n language = 'en',\n localizableStringsDir,\n stringFile,\n strictMode,\n } = opts;\n\n if (!app) {\n const message = `Strings extraction is not supported if 'app' capability is not set`;\n if (strictMode) {\n throw new Error(message);\n }\n log.info(message);\n return {};\n }\n\n let lprojRoot;\n for (const subfolder of [`${language}.lproj`, localizableStringsDir, '']) {\n lprojRoot = path.resolve(app, subfolder);\n if (await fs.exists(lprojRoot)) {\n break;\n }\n const message = `No '${lprojRoot}' resources folder has been found`;\n if (strictMode) {\n throw new Error(message);\n }\n log.debug(message);\n }\n log.info(`Will extract resource strings from '${lprojRoot}'`);\n\n const resourcePaths = [];\n if (stringFile) {\n const dstPath = path.resolve(lprojRoot, stringFile);\n if (await fs.exists(dstPath)) {\n resourcePaths.push(dstPath);\n } else {\n const message = `No '${dstPath}' resource file has been found for '${app}'`;\n if (strictMode) {\n throw new Error(message);\n }\n log.info(message);\n log.info(`Getting all the available strings from '${lprojRoot}'`);\n }\n }\n\n if (_.isEmpty(resourcePaths) && await fs.exists(lprojRoot)) {\n const resourceFiles = (await fs.readdir(lprojRoot))\n .filter((name) => _.some([STRINGS_RESOURCE, STRINGSDICT_RESOURCE], (x) => name.endsWith(x)))\n .map((name) => path.resolve(lprojRoot, name));\n resourcePaths.push(...resourceFiles);\n }\n log.info(`Got ${resourcePaths.length} resource file(s) in '${lprojRoot}'`);\n\n if (_.isEmpty(resourcePaths)) {\n return {};\n }\n\n const resultStrings = {};\n const toAbsolutePath = function (p) {\n return path.isAbsolute(p) ? p : path.resolve(process.cwd(), p);\n };\n for (const resourcePath of resourcePaths) {\n if (!util.isSubPath(toAbsolutePath(resourcePath), toAbsolutePath(app))) {\n // security precaution\n throw new Error(`'${resourcePath}' is expected to be located under '${app}'`);\n }\n try {\n const data = await readResource(resourcePath);\n log.debug(`Parsed ${_.keys(data).length} string(s) from '${resourcePath}'`);\n _.merge(resultStrings, data);\n } catch (e) {\n log.warn(`Cannot parse '${resourcePath}' resource. Original error: ${e.message}`);\n }\n }\n\n log.info(`Got ${_.keys(resultStrings).length} string(s) from '${lprojRoot}'`);\n return resultStrings;\n}\n\n/**\n * Check whether the given path on the file system points to the .app bundle root\n *\n * @param {string} appPath Possible .app bundle root\n * @returns {boolean} Whether the given path points to an .app bundle\n */\nasync function isAppBundle (appPath) {\n return _.endsWith(_.toLower(appPath), APP_EXT)\n && (await fs.stat(appPath)).isDirectory()\n && await fs.exists(path.join(appPath, 'Info.plist'));\n}\n\n/**\n * Extract the given archive and looks for items with given extensions in it\n *\n * @param {string} archivePath Full path to a .zip archive\n * @param {Array<string>} appExtensions List of matching item extensions\n * @returns {[string, Array<String>]} Tuple, where the first element points to\n * a temporary folder root where the archive has been extracted and the second item\n * contains a list of relative paths to matched items\n */\nasync function findApps (archivePath, appExtensions) {\n const useSystemUnzipEnv = process.env.APPIUM_PREFER_SYSTEM_UNZIP;\n const useSystemUnzip = _.isEmpty(useSystemUnzipEnv)\n || !['0', 'false'].includes(_.toLower(useSystemUnzipEnv));\n const tmpRoot = await tempDir.openDir();\n await zip.extractAllTo(archivePath, tmpRoot, {useSystemUnzip});\n const globPattern = `**/*.+(${appExtensions.map((ext) => ext.replace(/^\\./, '')).join('|')})`;\n const sortedBundleItems = (await fs.glob(globPattern, {\n cwd: tmpRoot,\n strict: false,\n })).sort((a, b) => a.split(path.sep).length - b.split(path.sep).length);\n return [tmpRoot, sortedBundleItems];\n}\n\n/**\n * Moves the application bundle to a newly created temporary folder\n *\n * @param {string} appRoot Full path to the .app bundle\n * @returns {string} The new path to the app bundle.\n * The name of the app bundle remains though\n */\nasync function isolateAppBundle (appRoot) {\n const tmpRoot = await tempDir.openDir();\n const dstRoot = path.join(tmpRoot, path.basename(appRoot));\n await fs.mv(appRoot, dstRoot, {mkdirp: true});\n return dstRoot;\n}\n\nexport {\n extractBundleId, verifyApplicationPlatform, parseLocalizableStrings,\n SAFARI_BUNDLE_ID, fetchSupportedAppPlatforms, APP_EXT, IPA_EXT,\n isAppBundle, findApps, isolateAppBundle,\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"app-utils.js","names":["STRINGSDICT_RESOURCE","STRINGS_RESOURCE","SAFARI_BUNDLE_ID","APP_EXT","IPA_EXT","extractPlistEntry","app","entryName","plistPath","path","resolve","plist","parsePlistFile","err","Error","basename","message","extractBundleId","bundleId","log","debug","fetchSupportedAppPlatforms","result","_","isArray","warn","verifyApplicationPlatform","expectedPlatform","supportedPlatforms","JSON","stringify","isSimulator","isTvOS","prefix","suffix","dstPlatform","includes","readResource","resourcePath","data","key","value","toPairs","isString","parseLocalizableStrings","opts","language","localizableStringsDir","stringFile","strictMode","info","lprojRoot","subfolder","fs","exists","resourcePaths","dstPath","push","isEmpty","resourceFiles","readdir","filter","name","some","x","endsWith","map","length","resultStrings","toAbsolutePath","p","isAbsolute","process","cwd","util","isSubPath","keys","merge","e","isAppBundle","appPath","toLower","stat","isDirectory","join","findApps","archivePath","appExtensions","useSystemUnzipEnv","env","APPIUM_PREFER_SYSTEM_UNZIP","useSystemUnzip","tmpRoot","tempDir","openDir","zip","extractAllTo","globPattern","ext","replace","sortedBundleItems","glob","strict","sort","a","b","split","sep","isolateAppBundle","appRoot","dstRoot","mv","mkdirp"],"sources":["../../lib/app-utils.js"],"sourcesContent":["import _ from 'lodash';\nimport path from 'path';\nimport { plist, fs, util, tempDir, zip } from 'appium/support';\nimport log from './logger.js';\n\nconst STRINGSDICT_RESOURCE = '.stringsdict';\nconst STRINGS_RESOURCE = '.strings';\nconst SAFARI_BUNDLE_ID = 'com.apple.mobilesafari';\nconst APP_EXT = '.app';\nconst IPA_EXT = '.ipa';\n\nasync function extractPlistEntry (app, entryName) {\n const plistPath = path.resolve(app, 'Info.plist');\n try {\n return (await plist.parsePlistFile(plistPath))[entryName];\n } catch (err) {\n throw new Error(`Could not extract Info.plist from '${path.basename(app)}': ${err.message}`);\n }\n}\n\nasync function extractBundleId (app) {\n const bundleId = await extractPlistEntry(app, 'CFBundleIdentifier');\n log.debug(`Getting bundle ID from app '${app}': '${bundleId}'`);\n return bundleId;\n}\n\nasync function fetchSupportedAppPlatforms (app) {\n try {\n const result = await extractPlistEntry(app, 'CFBundleSupportedPlatforms');\n if (!_.isArray(result)) {\n log.warn(`${path.basename(app)}': CFBundleSupportedPlatforms is not a valid list`);\n return [];\n }\n return result;\n } catch (err) {\n log.warn(\n `Cannot extract the list of supported platforms from '${path.basename(app)}': ${err.message}`\n );\n return [];\n }\n}\n\n/**\n * @typedef {Object} PlatformOpts\n *\n * @property {boolean} isSimulator - Whether the destination platform is a Simulator\n * @property {boolean} isTvOS - Whether the destination platform is a Simulator\n */\n\n/**\n * Verify whether the given application is compatible to the\n * platform where it is going to be installed and tested.\n *\n * @param {string} app - The actual path to the application bundle\n * @param {PlatformOpts} expectedPlatform\n * @throws {Error} If bundle architecture does not match the expected device architecture.\n */\nasync function verifyApplicationPlatform (app, expectedPlatform) {\n log.debug('Verifying application platform');\n\n const supportedPlatforms = await fetchSupportedAppPlatforms(app);\n log.debug(`CFBundleSupportedPlatforms: ${JSON.stringify(supportedPlatforms)}`);\n\n const {\n isSimulator,\n isTvOS,\n } = expectedPlatform;\n const prefix = isTvOS ? 'AppleTV' : 'iPhone';\n const suffix = isSimulator ? 'Simulator' : 'OS';\n const dstPlatform = `${prefix}${suffix}`;\n if (!supportedPlatforms.includes(dstPlatform)) {\n throw new Error(`${isSimulator ? 'Simulator' : 'Real device'} architecture is unsupported by the '${app}' application. ` +\n `Make sure the correct deployment target has been selected for its compilation in Xcode.`);\n }\n}\n\nasync function readResource (resourcePath) {\n const data = await plist.parsePlistFile(resourcePath);\n const result = {};\n for (const [key, value] of _.toPairs(data)) {\n result[key] = _.isString(value) ? value : JSON.stringify(value);\n }\n return result;\n}\n\nasync function parseLocalizableStrings (opts) {\n const {\n app,\n language = 'en',\n localizableStringsDir,\n stringFile,\n strictMode,\n } = opts;\n\n if (!app) {\n const message = `Strings extraction is not supported if 'app' capability is not set`;\n if (strictMode) {\n throw new Error(message);\n }\n log.info(message);\n return {};\n }\n\n let lprojRoot;\n for (const subfolder of [`${language}.lproj`, localizableStringsDir, '']) {\n lprojRoot = path.resolve(app, subfolder);\n if (await fs.exists(lprojRoot)) {\n break;\n }\n const message = `No '${lprojRoot}' resources folder has been found`;\n if (strictMode) {\n throw new Error(message);\n }\n log.debug(message);\n }\n log.info(`Will extract resource strings from '${lprojRoot}'`);\n\n const resourcePaths = [];\n if (stringFile) {\n const dstPath = path.resolve(lprojRoot, stringFile);\n if (await fs.exists(dstPath)) {\n resourcePaths.push(dstPath);\n } else {\n const message = `No '${dstPath}' resource file has been found for '${app}'`;\n if (strictMode) {\n throw new Error(message);\n }\n log.info(message);\n log.info(`Getting all the available strings from '${lprojRoot}'`);\n }\n }\n\n if (_.isEmpty(resourcePaths) && await fs.exists(lprojRoot)) {\n const resourceFiles = (await fs.readdir(lprojRoot))\n .filter((name) => _.some([STRINGS_RESOURCE, STRINGSDICT_RESOURCE], (x) => name.endsWith(x)))\n .map((name) => path.resolve(lprojRoot, name));\n resourcePaths.push(...resourceFiles);\n }\n log.info(`Got ${resourcePaths.length} resource file(s) in '${lprojRoot}'`);\n\n if (_.isEmpty(resourcePaths)) {\n return {};\n }\n\n const resultStrings = {};\n const toAbsolutePath = function (p) {\n return path.isAbsolute(p) ? p : path.resolve(process.cwd(), p);\n };\n for (const resourcePath of resourcePaths) {\n if (!util.isSubPath(toAbsolutePath(resourcePath), toAbsolutePath(app))) {\n // security precaution\n throw new Error(`'${resourcePath}' is expected to be located under '${app}'`);\n }\n try {\n const data = await readResource(resourcePath);\n log.debug(`Parsed ${_.keys(data).length} string(s) from '${resourcePath}'`);\n _.merge(resultStrings, data);\n } catch (e) {\n log.warn(`Cannot parse '${resourcePath}' resource. Original error: ${e.message}`);\n }\n }\n\n log.info(`Got ${_.keys(resultStrings).length} string(s) from '${lprojRoot}'`);\n return resultStrings;\n}\n\n/**\n * Check whether the given path on the file system points to the .app bundle root\n *\n * @param {string} appPath Possible .app bundle root\n * @returns {boolean} Whether the given path points to an .app bundle\n */\nasync function isAppBundle (appPath) {\n return _.endsWith(_.toLower(appPath), APP_EXT)\n && (await fs.stat(appPath)).isDirectory()\n && await fs.exists(path.join(appPath, 'Info.plist'));\n}\n\n/**\n * Extract the given archive and looks for items with given extensions in it\n *\n * @param {string} archivePath Full path to a .zip archive\n * @param {Array<string>} appExtensions List of matching item extensions\n * @returns {[string, Array<String>]} Tuple, where the first element points to\n * a temporary folder root where the archive has been extracted and the second item\n * contains a list of relative paths to matched items\n */\nasync function findApps (archivePath, appExtensions) {\n const useSystemUnzipEnv = process.env.APPIUM_PREFER_SYSTEM_UNZIP;\n const useSystemUnzip = _.isEmpty(useSystemUnzipEnv)\n || !['0', 'false'].includes(_.toLower(useSystemUnzipEnv));\n const tmpRoot = await tempDir.openDir();\n await zip.extractAllTo(archivePath, tmpRoot, {useSystemUnzip});\n const globPattern = `**/*.+(${appExtensions.map((ext) => ext.replace(/^\\./, '')).join('|')})`;\n const sortedBundleItems = (await fs.glob(globPattern, {\n cwd: tmpRoot,\n strict: false,\n })).sort((a, b) => a.split(path.sep).length - b.split(path.sep).length);\n return [tmpRoot, sortedBundleItems];\n}\n\n/**\n * Moves the application bundle to a newly created temporary folder\n *\n * @param {string} appRoot Full path to the .app bundle\n * @returns {string} The new path to the app bundle.\n * The name of the app bundle remains though\n */\nasync function isolateAppBundle (appRoot) {\n const tmpRoot = await tempDir.openDir();\n const dstRoot = path.join(tmpRoot, path.basename(appRoot));\n await fs.mv(appRoot, dstRoot, {mkdirp: true});\n return dstRoot;\n}\n\nexport {\n extractBundleId, verifyApplicationPlatform, parseLocalizableStrings,\n SAFARI_BUNDLE_ID, fetchSupportedAppPlatforms, APP_EXT, IPA_EXT,\n isAppBundle, findApps, isolateAppBundle,\n};\n"],"mappings":"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"}
@@ -4,17 +4,11 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
-
8
7
  require("source-map-support/register");
9
-
10
8
  var _appiumWebdriveragent = require("appium-webdriveragent");
11
-
12
9
  var _utils = require("./utils");
13
-
14
10
  var _simulatorManagement = require("./simulator-management");
15
-
16
11
  var _asyncbox = require("asyncbox");
17
-
18
12
  const DEFAULT_SIM_NAME = 'iPhone 12';
19
13
 
20
14
  async function build() {
@@ -33,11 +27,9 @@ async function build() {
33
27
  });
34
28
  await wda.xcodebuild.start(true);
35
29
  }
36
-
37
30
  if (require.main === module) {
38
31
  (0, _asyncbox.asyncify)(build);
39
32
  }
40
-
41
33
  var _default = build;
42
34
  exports.default = _default;
43
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJERUZBVUxUX1NJTV9OQU1FIiwiYnVpbGQiLCJ4Y29kZVZlcnNpb24iLCJnZXRBbmRDaGVja1hjb2RlVmVyc2lvbiIsImlvc1ZlcnNpb24iLCJnZXRBbmRDaGVja0lvc1Nka1ZlcnNpb24iLCJkZXZpY2VOYW1lIiwidHJhbnNsYXRlRGV2aWNlTmFtZSIsImRldmljZSIsImdldEV4aXN0aW5nU2ltIiwicGxhdGZvcm1WZXJzaW9uIiwid2RhIiwiV2ViRHJpdmVyQWdlbnQiLCJpb3NTZGtWZXJzaW9uIiwic2hvd1hjb2RlTG9nIiwieGNvZGVidWlsZCIsInN0YXJ0IiwicmVxdWlyZSIsIm1haW4iLCJtb2R1bGUiLCJhc3luY2lmeSJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9idWlsZC13ZGEuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgV2ViRHJpdmVyQWdlbnQgfSBmcm9tICdhcHBpdW0td2ViZHJpdmVyYWdlbnQnO1xuaW1wb3J0IHsgdHJhbnNsYXRlRGV2aWNlTmFtZSwgZ2V0QW5kQ2hlY2tYY29kZVZlcnNpb24sIGdldEFuZENoZWNrSW9zU2RrVmVyc2lvbiB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgZ2V0RXhpc3RpbmdTaW0gfSBmcm9tICcuL3NpbXVsYXRvci1tYW5hZ2VtZW50JztcbmltcG9ydCB7IGFzeW5jaWZ5IH0gZnJvbSAnYXN5bmNib3gnO1xuXG5jb25zdCBERUZBVUxUX1NJTV9OQU1FID0gJ2lQaG9uZSAxMic7XG5cbi8vIFRPRE86IGFsbG93IHBhc3NpbmcgaW4gYWxsIHRoZSB2YXJpb3VzIGJ1aWxkIHBhcmFtcyBhcyBDTEkgYXJnc1xuYXN5bmMgZnVuY3Rpb24gYnVpbGQgKCkge1xuICBjb25zdCB4Y29kZVZlcnNpb24gPSBhd2FpdCBnZXRBbmRDaGVja1hjb2RlVmVyc2lvbigpO1xuICBjb25zdCBpb3NWZXJzaW9uID0gYXdhaXQgZ2V0QW5kQ2hlY2tJb3NTZGtWZXJzaW9uKCk7XG4gIGNvbnN0IGRldmljZU5hbWUgPSB0cmFuc2xhdGVEZXZpY2VOYW1lKGlvc1ZlcnNpb24sIERFRkFVTFRfU0lNX05BTUUpO1xuICBjb25zdCBkZXZpY2UgPSBhd2FpdCBnZXRFeGlzdGluZ1NpbSh7XG4gICAgcGxhdGZvcm1WZXJzaW9uOiBpb3NWZXJzaW9uLFxuICAgIGRldmljZU5hbWVcbiAgfSk7XG4gIGNvbnN0IHdkYSA9IG5ldyBXZWJEcml2ZXJBZ2VudCh4Y29kZVZlcnNpb24sIHtcbiAgICBpb3NTZGtWZXJzaW9uOiBpb3NWZXJzaW9uLFxuICAgIHBsYXRmb3JtVmVyc2lvbjogaW9zVmVyc2lvbixcbiAgICBzaG93WGNvZGVMb2c6IHRydWUsXG4gICAgZGV2aWNlLFxuICB9KTtcbiAgYXdhaXQgd2RhLnhjb2RlYnVpbGQuc3RhcnQodHJ1ZSk7XG59XG5cbmlmIChyZXF1aXJlLm1haW4gPT09IG1vZHVsZSkge1xuICBhc3luY2lmeShidWlsZCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJ1aWxkO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxNQUFNQSxnQkFBZ0IsR0FBRyxXQUF6Qjs7QUFHQSxlQUFlQyxLQUFmLEdBQXdCO0VBQ3RCLE1BQU1DLFlBQVksR0FBRyxNQUFNLElBQUFDLDhCQUFBLEdBQTNCO0VBQ0EsTUFBTUMsVUFBVSxHQUFHLE1BQU0sSUFBQUMsK0JBQUEsR0FBekI7RUFDQSxNQUFNQyxVQUFVLEdBQUcsSUFBQUMsMEJBQUEsRUFBb0JILFVBQXBCLEVBQWdDSixnQkFBaEMsQ0FBbkI7RUFDQSxNQUFNUSxNQUFNLEdBQUcsTUFBTSxJQUFBQyxtQ0FBQSxFQUFlO0lBQ2xDQyxlQUFlLEVBQUVOLFVBRGlCO0lBRWxDRTtFQUZrQyxDQUFmLENBQXJCO0VBSUEsTUFBTUssR0FBRyxHQUFHLElBQUlDLG9DQUFKLENBQW1CVixZQUFuQixFQUFpQztJQUMzQ1csYUFBYSxFQUFFVCxVQUQ0QjtJQUUzQ00sZUFBZSxFQUFFTixVQUYwQjtJQUczQ1UsWUFBWSxFQUFFLElBSDZCO0lBSTNDTjtFQUoyQyxDQUFqQyxDQUFaO0VBTUEsTUFBTUcsR0FBRyxDQUFDSSxVQUFKLENBQWVDLEtBQWYsQ0FBcUIsSUFBckIsQ0FBTjtBQUNEOztBQUVELElBQUlDLE9BQU8sQ0FBQ0MsSUFBUixLQUFpQkMsTUFBckIsRUFBNkI7RUFDM0IsSUFBQUMsa0JBQUEsRUFBU25CLEtBQVQ7QUFDRDs7ZUFFY0EsSyJ9
35
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJERUZBVUxUX1NJTV9OQU1FIiwiYnVpbGQiLCJ4Y29kZVZlcnNpb24iLCJnZXRBbmRDaGVja1hjb2RlVmVyc2lvbiIsImlvc1ZlcnNpb24iLCJnZXRBbmRDaGVja0lvc1Nka1ZlcnNpb24iLCJkZXZpY2VOYW1lIiwidHJhbnNsYXRlRGV2aWNlTmFtZSIsImRldmljZSIsImdldEV4aXN0aW5nU2ltIiwicGxhdGZvcm1WZXJzaW9uIiwid2RhIiwiV2ViRHJpdmVyQWdlbnQiLCJpb3NTZGtWZXJzaW9uIiwic2hvd1hjb2RlTG9nIiwieGNvZGVidWlsZCIsInN0YXJ0IiwicmVxdWlyZSIsIm1haW4iLCJtb2R1bGUiLCJhc3luY2lmeSJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9idWlsZC13ZGEuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgV2ViRHJpdmVyQWdlbnQgfSBmcm9tICdhcHBpdW0td2ViZHJpdmVyYWdlbnQnO1xuaW1wb3J0IHsgdHJhbnNsYXRlRGV2aWNlTmFtZSwgZ2V0QW5kQ2hlY2tYY29kZVZlcnNpb24sIGdldEFuZENoZWNrSW9zU2RrVmVyc2lvbiB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgZ2V0RXhpc3RpbmdTaW0gfSBmcm9tICcuL3NpbXVsYXRvci1tYW5hZ2VtZW50JztcbmltcG9ydCB7IGFzeW5jaWZ5IH0gZnJvbSAnYXN5bmNib3gnO1xuXG5jb25zdCBERUZBVUxUX1NJTV9OQU1FID0gJ2lQaG9uZSAxMic7XG5cbi8vIFRPRE86IGFsbG93IHBhc3NpbmcgaW4gYWxsIHRoZSB2YXJpb3VzIGJ1aWxkIHBhcmFtcyBhcyBDTEkgYXJnc1xuYXN5bmMgZnVuY3Rpb24gYnVpbGQgKCkge1xuICBjb25zdCB4Y29kZVZlcnNpb24gPSBhd2FpdCBnZXRBbmRDaGVja1hjb2RlVmVyc2lvbigpO1xuICBjb25zdCBpb3NWZXJzaW9uID0gYXdhaXQgZ2V0QW5kQ2hlY2tJb3NTZGtWZXJzaW9uKCk7XG4gIGNvbnN0IGRldmljZU5hbWUgPSB0cmFuc2xhdGVEZXZpY2VOYW1lKGlvc1ZlcnNpb24sIERFRkFVTFRfU0lNX05BTUUpO1xuICBjb25zdCBkZXZpY2UgPSBhd2FpdCBnZXRFeGlzdGluZ1NpbSh7XG4gICAgcGxhdGZvcm1WZXJzaW9uOiBpb3NWZXJzaW9uLFxuICAgIGRldmljZU5hbWVcbiAgfSk7XG4gIGNvbnN0IHdkYSA9IG5ldyBXZWJEcml2ZXJBZ2VudCh4Y29kZVZlcnNpb24sIHtcbiAgICBpb3NTZGtWZXJzaW9uOiBpb3NWZXJzaW9uLFxuICAgIHBsYXRmb3JtVmVyc2lvbjogaW9zVmVyc2lvbixcbiAgICBzaG93WGNvZGVMb2c6IHRydWUsXG4gICAgZGV2aWNlLFxuICB9KTtcbiAgYXdhaXQgd2RhLnhjb2RlYnVpbGQuc3RhcnQodHJ1ZSk7XG59XG5cbmlmIChyZXF1aXJlLm1haW4gPT09IG1vZHVsZSkge1xuICBhc3luY2lmeShidWlsZCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJ1aWxkO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQSxNQUFNQSxnQkFBZ0IsR0FBRyxXQUFXOztBQUdwQyxlQUFlQyxLQUFLLEdBQUk7RUFDdEIsTUFBTUMsWUFBWSxHQUFHLE1BQU0sSUFBQUMsOEJBQXVCLEdBQUU7RUFDcEQsTUFBTUMsVUFBVSxHQUFHLE1BQU0sSUFBQUMsK0JBQXdCLEdBQUU7RUFDbkQsTUFBTUMsVUFBVSxHQUFHLElBQUFDLDBCQUFtQixFQUFDSCxVQUFVLEVBQUVKLGdCQUFnQixDQUFDO0VBQ3BFLE1BQU1RLE1BQU0sR0FBRyxNQUFNLElBQUFDLG1DQUFjLEVBQUM7SUFDbENDLGVBQWUsRUFBRU4sVUFBVTtJQUMzQkU7RUFDRixDQUFDLENBQUM7RUFDRixNQUFNSyxHQUFHLEdBQUcsSUFBSUMsb0NBQWMsQ0FBQ1YsWUFBWSxFQUFFO0lBQzNDVyxhQUFhLEVBQUVULFVBQVU7SUFDekJNLGVBQWUsRUFBRU4sVUFBVTtJQUMzQlUsWUFBWSxFQUFFLElBQUk7SUFDbEJOO0VBQ0YsQ0FBQyxDQUFDO0VBQ0YsTUFBTUcsR0FBRyxDQUFDSSxVQUFVLENBQUNDLEtBQUssQ0FBQyxJQUFJLENBQUM7QUFDbEM7QUFFQSxJQUFJQyxPQUFPLENBQUNDLElBQUksS0FBS0MsTUFBTSxFQUFFO0VBQzNCLElBQUFDLGtCQUFRLEVBQUNuQixLQUFLLENBQUM7QUFDakI7QUFBQyxlQUVjQSxLQUFLO0FBQUEifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"build-wda.js","names":["DEFAULT_SIM_NAME","build","xcodeVersion","getAndCheckXcodeVersion","iosVersion","getAndCheckIosSdkVersion","deviceName","translateDeviceName","device","getExistingSim","platformVersion","wda","WebDriverAgent","iosSdkVersion","showXcodeLog","xcodebuild","start","require","main","module","asyncify"],"sources":["../../lib/build-wda.js"],"sourcesContent":["import { WebDriverAgent } from 'appium-webdriveragent';\nimport { translateDeviceName, getAndCheckXcodeVersion, getAndCheckIosSdkVersion } from './utils';\nimport { getExistingSim } from './simulator-management';\nimport { asyncify } from 'asyncbox';\n\nconst DEFAULT_SIM_NAME = 'iPhone 12';\n\n// TODO: allow passing in all the various build params as CLI args\nasync function build () {\n const xcodeVersion = await getAndCheckXcodeVersion();\n const iosVersion = await getAndCheckIosSdkVersion();\n const deviceName = translateDeviceName(iosVersion, DEFAULT_SIM_NAME);\n const device = await getExistingSim({\n platformVersion: iosVersion,\n deviceName\n });\n const wda = new WebDriverAgent(xcodeVersion, {\n iosSdkVersion: iosVersion,\n platformVersion: iosVersion,\n showXcodeLog: true,\n device,\n });\n await wda.xcodebuild.start(true);\n}\n\nif (require.main === module) {\n asyncify(build);\n}\n\nexport default build;\n"],"mappings":";;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AAEA,MAAMA,gBAAgB,GAAG,WAAzB;;AAGA,eAAeC,KAAf,GAAwB;EACtB,MAAMC,YAAY,GAAG,MAAM,IAAAC,8BAAA,GAA3B;EACA,MAAMC,UAAU,GAAG,MAAM,IAAAC,+BAAA,GAAzB;EACA,MAAMC,UAAU,GAAG,IAAAC,0BAAA,EAAoBH,UAApB,EAAgCJ,gBAAhC,CAAnB;EACA,MAAMQ,MAAM,GAAG,MAAM,IAAAC,mCAAA,EAAe;IAClCC,eAAe,EAAEN,UADiB;IAElCE;EAFkC,CAAf,CAArB;EAIA,MAAMK,GAAG,GAAG,IAAIC,oCAAJ,CAAmBV,YAAnB,EAAiC;IAC3CW,aAAa,EAAET,UAD4B;IAE3CM,eAAe,EAAEN,UAF0B;IAG3CU,YAAY,EAAE,IAH6B;IAI3CN;EAJ2C,CAAjC,CAAZ;EAMA,MAAMG,GAAG,CAACI,UAAJ,CAAeC,KAAf,CAAqB,IAArB,CAAN;AACD;;AAED,IAAIC,OAAO,CAACC,IAAR,KAAiBC,MAArB,EAA6B;EAC3B,IAAAC,kBAAA,EAASnB,KAAT;AACD;;eAEcA,K"}
1
+ {"version":3,"file":"build-wda.js","names":["DEFAULT_SIM_NAME","build","xcodeVersion","getAndCheckXcodeVersion","iosVersion","getAndCheckIosSdkVersion","deviceName","translateDeviceName","device","getExistingSim","platformVersion","wda","WebDriverAgent","iosSdkVersion","showXcodeLog","xcodebuild","start","require","main","module","asyncify"],"sources":["../../lib/build-wda.js"],"sourcesContent":["import { WebDriverAgent } from 'appium-webdriveragent';\nimport { translateDeviceName, getAndCheckXcodeVersion, getAndCheckIosSdkVersion } from './utils';\nimport { getExistingSim } from './simulator-management';\nimport { asyncify } from 'asyncbox';\n\nconst DEFAULT_SIM_NAME = 'iPhone 12';\n\n// TODO: allow passing in all the various build params as CLI args\nasync function build () {\n const xcodeVersion = await getAndCheckXcodeVersion();\n const iosVersion = await getAndCheckIosSdkVersion();\n const deviceName = translateDeviceName(iosVersion, DEFAULT_SIM_NAME);\n const device = await getExistingSim({\n platformVersion: iosVersion,\n deviceName\n });\n const wda = new WebDriverAgent(xcodeVersion, {\n iosSdkVersion: iosVersion,\n platformVersion: iosVersion,\n showXcodeLog: true,\n device,\n });\n await wda.xcodebuild.start(true);\n}\n\nif (require.main === module) {\n asyncify(build);\n}\n\nexport default build;\n"],"mappings":";;;;;;;AAAA;AACA;AACA;AACA;AAEA,MAAMA,gBAAgB,GAAG,WAAW;;AAGpC,eAAeC,KAAK,GAAI;EACtB,MAAMC,YAAY,GAAG,MAAM,IAAAC,8BAAuB,GAAE;EACpD,MAAMC,UAAU,GAAG,MAAM,IAAAC,+BAAwB,GAAE;EACnD,MAAMC,UAAU,GAAG,IAAAC,0BAAmB,EAACH,UAAU,EAAEJ,gBAAgB,CAAC;EACpE,MAAMQ,MAAM,GAAG,MAAM,IAAAC,mCAAc,EAAC;IAClCC,eAAe,EAAEN,UAAU;IAC3BE;EACF,CAAC,CAAC;EACF,MAAMK,GAAG,GAAG,IAAIC,oCAAc,CAACV,YAAY,EAAE;IAC3CW,aAAa,EAAET,UAAU;IACzBM,eAAe,EAAEN,UAAU;IAC3BU,YAAY,EAAE,IAAI;IAClBN;EACF,CAAC,CAAC;EACF,MAAMG,GAAG,CAACI,UAAU,CAACC,KAAK,CAAC,IAAI,CAAC;AAClC;AAEA,IAAIC,OAAO,CAACC,IAAI,KAAKC,MAAM,EAAE;EAC3B,IAAAC,kBAAQ,EAACnB,KAAK,CAAC;AACjB;AAAC,eAEcA,KAAK;AAAA"}
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
@@ -9,13 +8,9 @@ exports.doesSupportKeychainApi = void 0;
9
8
  exports.hasCertificateLegacy = hasCertificateLegacy;
10
9
  exports.installCertificate = installCertificate;
11
10
  exports.installCertificateLegacy = installCertificateLegacy;
12
-
13
11
  require("source-map-support/register");
14
-
15
12
  var _lodash = _interopRequireDefault(require("lodash"));
16
-
17
13
  var _appiumIosSimulator = require("appium-ios-simulator");
18
-
19
14
  const doesSupportKeychainApi = _lodash.default.memoize(async function doesSupportKeychainApi(device) {
20
15
  try {
21
16
  await device.simctl.exec('help', {
@@ -28,7 +23,6 @@ const doesSupportKeychainApi = _lodash.default.memoize(async function doesSuppor
28
23
  });
29
24
 
30
25
  exports.doesSupportKeychainApi = doesSupportKeychainApi;
31
-
32
26
  async function installCertificate(device, payload) {
33
27
  await device.simctl.addRootCertificate(payload, {
34
28
  raw: true
@@ -42,4 +36,4 @@ async function hasCertificateLegacy(device, payload) {
42
36
  async function installCertificateLegacy(device, payload) {
43
37
  await (0, _appiumIosSimulator.installSSLCert)(payload, device.udid);
44
38
  }
45
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJkb2VzU3VwcG9ydEtleWNoYWluQXBpIiwiXyIsIm1lbW9pemUiLCJkZXZpY2UiLCJzaW1jdGwiLCJleGVjIiwiYXJncyIsImUiLCJpbnN0YWxsQ2VydGlmaWNhdGUiLCJwYXlsb2FkIiwiYWRkUm9vdENlcnRpZmljYXRlIiwicmF3IiwiaGFzQ2VydGlmaWNhdGVMZWdhY3kiLCJoYXNTU0xDZXJ0IiwidWRpZCIsImluc3RhbGxDZXJ0aWZpY2F0ZUxlZ2FjeSIsImluc3RhbGxTU0xDZXJ0Il0sInNvdXJjZXMiOlsiLi4vLi4vbGliL2NlcnQtdXRpbHMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IGluc3RhbGxTU0xDZXJ0LCBoYXNTU0xDZXJ0IH0gZnJvbSAnYXBwaXVtLWlvcy1zaW11bGF0b3InO1xuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIFNpbXVsYXRvciBkZXZpY2Ugc3VwcG9ydHMgc2ltY3RsIGtleWNoYWluIEFQSS5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gZGV2aWNlIFNpbXVsYXRvciBpbnN0YW5jZSBjcmVhdGVkIGJ5IGFwcGl1bS1pb3Mtc2ltdWxhdG9yIG1vZHVsZVxuICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgY3VycmVudCBTaW11bGF0b3IgU0RLIHN1cHBvcnRzIGtleWNoYWluIGNvbW1hbmRzLlxuICovXG5jb25zdCBkb2VzU3VwcG9ydEtleWNoYWluQXBpID0gXy5tZW1vaXplKGFzeW5jIGZ1bmN0aW9uIGRvZXNTdXBwb3J0S2V5Y2hhaW5BcGkgKGRldmljZSkge1xuICB0cnkge1xuICAgIGF3YWl0IGRldmljZS5zaW1jdGwuZXhlYygnaGVscCcsIHtcbiAgICAgIGFyZ3M6IFsna2V5Y2hhaW4nXVxuICAgIH0pO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59KTtcblxuLyoqXG4gKiBBZGRzIGEgY2VydGlmaWNhdGUgdG8gdGhlIHRydXN0ZWQgcm9vdCBzdG9yZS5cbiAqIFNpbXVsYXRvciBtdXN0IGJlIGluIEJPT1RFRCBzdGF0ZSBmb3IgdGhpcyBBUEkgdG8gd29yay5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gZGV2aWNlIFNpbXVsYXRvciBpbnN0YW5jZSBjcmVhdGVkIGJ5IGFwcGl1bS1pb3Mtc2ltdWxhdG9yIG1vZHVsZVxuICogQHBhcmFtIHtzdHJpbmd9IHBheWxvYWQgQ2VydGlmaWNhdGUgcGF5bG9hZFxuICovXG5hc3luYyBmdW5jdGlvbiBpbnN0YWxsQ2VydGlmaWNhdGUgKGRldmljZSwgcGF5bG9hZCkge1xuICBhd2FpdCBkZXZpY2Uuc2ltY3RsLmFkZFJvb3RDZXJ0aWZpY2F0ZShwYXlsb2FkLCB7cmF3OiB0cnVlfSk7XG59XG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gY2VydGlmaWNhdGUgaXMgYWxyZWFkeSBpbnN0YWxsZWQuXG4gKiBUaGUgZnVuY3Rpb24gaXMgdXNpbmcgaGFja3kgY2FsbHMgdG8gbWFrZSBjZXJ0aWZpY2F0ZSBzdHVmZiB3b3JraW5nIGZvciBvbGRlciBTREtzLlxuICogU2ltdWxhdG9yIG11c3QgYmUgaW4gU0hVVERPV04gc3RhdGUgZm9yIHRoaXMgQVBJIHRvIHdvcmsuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGRldmljZSBTaW11bGF0b3IgaW5zdGFuY2UgY3JlYXRlZCBieSBhcHBpdW0taW9zLXNpbXVsYXRvciBtb2R1bGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXlsb2FkIENlcnRpZmljYXRlIHBheWxvYWRcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIGNlcnRpZmljYXRlIGlzIGFscmVhZHkgcHJlc2VudCBpbiB0aGUgcm9vdCBzdG9yZS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gaGFzQ2VydGlmaWNhdGVMZWdhY3kgKGRldmljZSwgcGF5bG9hZCkge1xuICByZXR1cm4gYXdhaXQgaGFzU1NMQ2VydChwYXlsb2FkLCBkZXZpY2UudWRpZCk7XG59XG5cbi8qKlxuICogQWRkcyBhIGNlcnRpZmljYXRlIHRvIHRoZSB0cnVzdGVkIHJvb3Qgc3RvcmUuXG4gKiBUaGUgZnVuY3Rpb24gaXMgdXNpbmcgaGFja3kgY2FsbHMgdG8gbWFrZSBjZXJ0aWZpY2F0ZSBzdHVmZiB3b3JraW5nIGZvciBvbGRlciBTREtzLlxuICogU2ltdWxhdG9yIG11c3QgYmUgaW4gU0hVVERPV04gc3RhdGUgZm9yIHRoaXMgQVBJIHRvIHdvcmsuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGRldmljZSBTaW11bGF0b3IgaW5zdGFuY2UgY3JlYXRlZCBieSBhcHBpdW0taW9zLXNpbXVsYXRvciBtb2R1bGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXlsb2FkIENlcnRpZmljYXRlIHBheWxvYWRcbiAqL1xuYXN5bmMgZnVuY3Rpb24gaW5zdGFsbENlcnRpZmljYXRlTGVnYWN5IChkZXZpY2UsIHBheWxvYWQpIHtcbiAgYXdhaXQgaW5zdGFsbFNTTENlcnQocGF5bG9hZCwgZGV2aWNlLnVkaWQpO1xufVxuXG5cbmV4cG9ydCB7XG4gIGRvZXNTdXBwb3J0S2V5Y2hhaW5BcGksIGluc3RhbGxDZXJ0aWZpY2F0ZSwgaW5zdGFsbENlcnRpZmljYXRlTGVnYWN5LFxuICBoYXNDZXJ0aWZpY2F0ZUxlZ2FjeVxufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFRQSxNQUFNQSxzQkFBc0IsR0FBR0MsZUFBQSxDQUFFQyxPQUFGLENBQVUsZUFBZUYsc0JBQWYsQ0FBdUNHLE1BQXZDLEVBQStDO0VBQ3RGLElBQUk7SUFDRixNQUFNQSxNQUFNLENBQUNDLE1BQVAsQ0FBY0MsSUFBZCxDQUFtQixNQUFuQixFQUEyQjtNQUMvQkMsSUFBSSxFQUFFLENBQUMsVUFBRDtJQUR5QixDQUEzQixDQUFOO0lBR0EsT0FBTyxJQUFQO0VBQ0QsQ0FMRCxDQUtFLE9BQU9DLENBQVAsRUFBVTtJQUNWLE9BQU8sS0FBUDtFQUNEO0FBQ0YsQ0FUOEIsQ0FBL0I7Ozs7QUFrQkEsZUFBZUMsa0JBQWYsQ0FBbUNMLE1BQW5DLEVBQTJDTSxPQUEzQyxFQUFvRDtFQUNsRCxNQUFNTixNQUFNLENBQUNDLE1BQVAsQ0FBY00sa0JBQWQsQ0FBaUNELE9BQWpDLEVBQTBDO0lBQUNFLEdBQUcsRUFBRTtFQUFOLENBQTFDLENBQU47QUFDRDs7QUFXRCxlQUFlQyxvQkFBZixDQUFxQ1QsTUFBckMsRUFBNkNNLE9BQTdDLEVBQXNEO0VBQ3BELE9BQU8sTUFBTSxJQUFBSSw4QkFBQSxFQUFXSixPQUFYLEVBQW9CTixNQUFNLENBQUNXLElBQTNCLENBQWI7QUFDRDs7QUFVRCxlQUFlQyx3QkFBZixDQUF5Q1osTUFBekMsRUFBaURNLE9BQWpELEVBQTBEO0VBQ3hELE1BQU0sSUFBQU8sa0NBQUEsRUFBZVAsT0FBZixFQUF3Qk4sTUFBTSxDQUFDVyxJQUEvQixDQUFOO0FBQ0QifQ==
39
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJkb2VzU3VwcG9ydEtleWNoYWluQXBpIiwiXyIsIm1lbW9pemUiLCJkZXZpY2UiLCJzaW1jdGwiLCJleGVjIiwiYXJncyIsImUiLCJpbnN0YWxsQ2VydGlmaWNhdGUiLCJwYXlsb2FkIiwiYWRkUm9vdENlcnRpZmljYXRlIiwicmF3IiwiaGFzQ2VydGlmaWNhdGVMZWdhY3kiLCJoYXNTU0xDZXJ0IiwidWRpZCIsImluc3RhbGxDZXJ0aWZpY2F0ZUxlZ2FjeSIsImluc3RhbGxTU0xDZXJ0Il0sInNvdXJjZXMiOlsiLi4vLi4vbGliL2NlcnQtdXRpbHMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IGluc3RhbGxTU0xDZXJ0LCBoYXNTU0xDZXJ0IH0gZnJvbSAnYXBwaXVtLWlvcy1zaW11bGF0b3InO1xuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIFNpbXVsYXRvciBkZXZpY2Ugc3VwcG9ydHMgc2ltY3RsIGtleWNoYWluIEFQSS5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gZGV2aWNlIFNpbXVsYXRvciBpbnN0YW5jZSBjcmVhdGVkIGJ5IGFwcGl1bS1pb3Mtc2ltdWxhdG9yIG1vZHVsZVxuICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgY3VycmVudCBTaW11bGF0b3IgU0RLIHN1cHBvcnRzIGtleWNoYWluIGNvbW1hbmRzLlxuICovXG5jb25zdCBkb2VzU3VwcG9ydEtleWNoYWluQXBpID0gXy5tZW1vaXplKGFzeW5jIGZ1bmN0aW9uIGRvZXNTdXBwb3J0S2V5Y2hhaW5BcGkgKGRldmljZSkge1xuICB0cnkge1xuICAgIGF3YWl0IGRldmljZS5zaW1jdGwuZXhlYygnaGVscCcsIHtcbiAgICAgIGFyZ3M6IFsna2V5Y2hhaW4nXVxuICAgIH0pO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59KTtcblxuLyoqXG4gKiBBZGRzIGEgY2VydGlmaWNhdGUgdG8gdGhlIHRydXN0ZWQgcm9vdCBzdG9yZS5cbiAqIFNpbXVsYXRvciBtdXN0IGJlIGluIEJPT1RFRCBzdGF0ZSBmb3IgdGhpcyBBUEkgdG8gd29yay5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gZGV2aWNlIFNpbXVsYXRvciBpbnN0YW5jZSBjcmVhdGVkIGJ5IGFwcGl1bS1pb3Mtc2ltdWxhdG9yIG1vZHVsZVxuICogQHBhcmFtIHtzdHJpbmd9IHBheWxvYWQgQ2VydGlmaWNhdGUgcGF5bG9hZFxuICovXG5hc3luYyBmdW5jdGlvbiBpbnN0YWxsQ2VydGlmaWNhdGUgKGRldmljZSwgcGF5bG9hZCkge1xuICBhd2FpdCBkZXZpY2Uuc2ltY3RsLmFkZFJvb3RDZXJ0aWZpY2F0ZShwYXlsb2FkLCB7cmF3OiB0cnVlfSk7XG59XG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gY2VydGlmaWNhdGUgaXMgYWxyZWFkeSBpbnN0YWxsZWQuXG4gKiBUaGUgZnVuY3Rpb24gaXMgdXNpbmcgaGFja3kgY2FsbHMgdG8gbWFrZSBjZXJ0aWZpY2F0ZSBzdHVmZiB3b3JraW5nIGZvciBvbGRlciBTREtzLlxuICogU2ltdWxhdG9yIG11c3QgYmUgaW4gU0hVVERPV04gc3RhdGUgZm9yIHRoaXMgQVBJIHRvIHdvcmsuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGRldmljZSBTaW11bGF0b3IgaW5zdGFuY2UgY3JlYXRlZCBieSBhcHBpdW0taW9zLXNpbXVsYXRvciBtb2R1bGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXlsb2FkIENlcnRpZmljYXRlIHBheWxvYWRcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIGNlcnRpZmljYXRlIGlzIGFscmVhZHkgcHJlc2VudCBpbiB0aGUgcm9vdCBzdG9yZS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gaGFzQ2VydGlmaWNhdGVMZWdhY3kgKGRldmljZSwgcGF5bG9hZCkge1xuICByZXR1cm4gYXdhaXQgaGFzU1NMQ2VydChwYXlsb2FkLCBkZXZpY2UudWRpZCk7XG59XG5cbi8qKlxuICogQWRkcyBhIGNlcnRpZmljYXRlIHRvIHRoZSB0cnVzdGVkIHJvb3Qgc3RvcmUuXG4gKiBUaGUgZnVuY3Rpb24gaXMgdXNpbmcgaGFja3kgY2FsbHMgdG8gbWFrZSBjZXJ0aWZpY2F0ZSBzdHVmZiB3b3JraW5nIGZvciBvbGRlciBTREtzLlxuICogU2ltdWxhdG9yIG11c3QgYmUgaW4gU0hVVERPV04gc3RhdGUgZm9yIHRoaXMgQVBJIHRvIHdvcmsuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGRldmljZSBTaW11bGF0b3IgaW5zdGFuY2UgY3JlYXRlZCBieSBhcHBpdW0taW9zLXNpbXVsYXRvciBtb2R1bGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXlsb2FkIENlcnRpZmljYXRlIHBheWxvYWRcbiAqL1xuYXN5bmMgZnVuY3Rpb24gaW5zdGFsbENlcnRpZmljYXRlTGVnYWN5IChkZXZpY2UsIHBheWxvYWQpIHtcbiAgYXdhaXQgaW5zdGFsbFNTTENlcnQocGF5bG9hZCwgZGV2aWNlLnVkaWQpO1xufVxuXG5cbmV4cG9ydCB7XG4gIGRvZXNTdXBwb3J0S2V5Y2hhaW5BcGksIGluc3RhbGxDZXJ0aWZpY2F0ZSwgaW5zdGFsbENlcnRpZmljYXRlTGVnYWN5LFxuICBoYXNDZXJ0aWZpY2F0ZUxlZ2FjeVxufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBUUEsTUFBTUEsc0JBQXNCLEdBQUdDLGVBQUMsQ0FBQ0MsT0FBTyxDQUFDLGVBQWVGLHNCQUFzQixDQUFFRyxNQUFNLEVBQUU7RUFDdEYsSUFBSTtJQUNGLE1BQU1BLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDQyxJQUFJLENBQUMsTUFBTSxFQUFFO01BQy9CQyxJQUFJLEVBQUUsQ0FBQyxVQUFVO0lBQ25CLENBQUMsQ0FBQztJQUNGLE9BQU8sSUFBSTtFQUNiLENBQUMsQ0FBQyxPQUFPQyxDQUFDLEVBQUU7SUFDVixPQUFPLEtBQUs7RUFDZDtBQUNGLENBQUMsQ0FBQzs7QUFBQztBQVNILGVBQWVDLGtCQUFrQixDQUFFTCxNQUFNLEVBQUVNLE9BQU8sRUFBRTtFQUNsRCxNQUFNTixNQUFNLENBQUNDLE1BQU0sQ0FBQ00sa0JBQWtCLENBQUNELE9BQU8sRUFBRTtJQUFDRSxHQUFHLEVBQUU7RUFBSSxDQUFDLENBQUM7QUFDOUQ7O0FBV0EsZUFBZUMsb0JBQW9CLENBQUVULE1BQU0sRUFBRU0sT0FBTyxFQUFFO0VBQ3BELE9BQU8sTUFBTSxJQUFBSSw4QkFBVSxFQUFDSixPQUFPLEVBQUVOLE1BQU0sQ0FBQ1csSUFBSSxDQUFDO0FBQy9DOztBQVVBLGVBQWVDLHdCQUF3QixDQUFFWixNQUFNLEVBQUVNLE9BQU8sRUFBRTtFQUN4RCxNQUFNLElBQUFPLGtDQUFjLEVBQUNQLE9BQU8sRUFBRU4sTUFBTSxDQUFDVyxJQUFJLENBQUM7QUFDNUMifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"cert-utils.js","names":["doesSupportKeychainApi","_","memoize","device","simctl","exec","args","e","installCertificate","payload","addRootCertificate","raw","hasCertificateLegacy","hasSSLCert","udid","installCertificateLegacy","installSSLCert"],"sources":["../../lib/cert-utils.js"],"sourcesContent":["import _ from 'lodash';\nimport { installSSLCert, hasSSLCert } from 'appium-ios-simulator';\n\n/**\n * Check whether the given Simulator device supports simctl keychain API.\n *\n * @param {object} device Simulator instance created by appium-ios-simulator module\n * @returns {boolean} `true` if the current Simulator SDK supports keychain commands.\n */\nconst doesSupportKeychainApi = _.memoize(async function doesSupportKeychainApi (device) {\n try {\n await device.simctl.exec('help', {\n args: ['keychain']\n });\n return true;\n } catch (e) {\n return false;\n }\n});\n\n/**\n * Adds a certificate to the trusted root store.\n * Simulator must be in BOOTED state for this API to work.\n *\n * @param {object} device Simulator instance created by appium-ios-simulator module\n * @param {string} payload Certificate payload\n */\nasync function installCertificate (device, payload) {\n await device.simctl.addRootCertificate(payload, {raw: true});\n}\n\n/**\n * Check whether the given certificate is already installed.\n * The function is using hacky calls to make certificate stuff working for older SDKs.\n * Simulator must be in SHUTDOWN state for this API to work.\n *\n * @param {object} device Simulator instance created by appium-ios-simulator module\n * @param {string} payload Certificate payload\n * @returns {boolean} `true` if the certificate is already present in the root store.\n */\nasync function hasCertificateLegacy (device, payload) {\n return await hasSSLCert(payload, device.udid);\n}\n\n/**\n * Adds a certificate to the trusted root store.\n * The function is using hacky calls to make certificate stuff working for older SDKs.\n * Simulator must be in SHUTDOWN state for this API to work.\n *\n * @param {object} device Simulator instance created by appium-ios-simulator module\n * @param {string} payload Certificate payload\n */\nasync function installCertificateLegacy (device, payload) {\n await installSSLCert(payload, device.udid);\n}\n\n\nexport {\n doesSupportKeychainApi, installCertificate, installCertificateLegacy,\n hasCertificateLegacy\n};\n"],"mappings":";;;;;;;;;;;;;;AAAA;;AACA;;AAQA,MAAMA,sBAAsB,GAAGC,eAAA,CAAEC,OAAF,CAAU,eAAeF,sBAAf,CAAuCG,MAAvC,EAA+C;EACtF,IAAI;IACF,MAAMA,MAAM,CAACC,MAAP,CAAcC,IAAd,CAAmB,MAAnB,EAA2B;MAC/BC,IAAI,EAAE,CAAC,UAAD;IADyB,CAA3B,CAAN;IAGA,OAAO,IAAP;EACD,CALD,CAKE,OAAOC,CAAP,EAAU;IACV,OAAO,KAAP;EACD;AACF,CAT8B,CAA/B;;;;AAkBA,eAAeC,kBAAf,CAAmCL,MAAnC,EAA2CM,OAA3C,EAAoD;EAClD,MAAMN,MAAM,CAACC,MAAP,CAAcM,kBAAd,CAAiCD,OAAjC,EAA0C;IAACE,GAAG,EAAE;EAAN,CAA1C,CAAN;AACD;;AAWD,eAAeC,oBAAf,CAAqCT,MAArC,EAA6CM,OAA7C,EAAsD;EACpD,OAAO,MAAM,IAAAI,8BAAA,EAAWJ,OAAX,EAAoBN,MAAM,CAACW,IAA3B,CAAb;AACD;;AAUD,eAAeC,wBAAf,CAAyCZ,MAAzC,EAAiDM,OAAjD,EAA0D;EACxD,MAAM,IAAAO,kCAAA,EAAeP,OAAf,EAAwBN,MAAM,CAACW,IAA/B,CAAN;AACD"}
1
+ {"version":3,"file":"cert-utils.js","names":["doesSupportKeychainApi","_","memoize","device","simctl","exec","args","e","installCertificate","payload","addRootCertificate","raw","hasCertificateLegacy","hasSSLCert","udid","installCertificateLegacy","installSSLCert"],"sources":["../../lib/cert-utils.js"],"sourcesContent":["import _ from 'lodash';\nimport { installSSLCert, hasSSLCert } from 'appium-ios-simulator';\n\n/**\n * Check whether the given Simulator device supports simctl keychain API.\n *\n * @param {object} device Simulator instance created by appium-ios-simulator module\n * @returns {boolean} `true` if the current Simulator SDK supports keychain commands.\n */\nconst doesSupportKeychainApi = _.memoize(async function doesSupportKeychainApi (device) {\n try {\n await device.simctl.exec('help', {\n args: ['keychain']\n });\n return true;\n } catch (e) {\n return false;\n }\n});\n\n/**\n * Adds a certificate to the trusted root store.\n * Simulator must be in BOOTED state for this API to work.\n *\n * @param {object} device Simulator instance created by appium-ios-simulator module\n * @param {string} payload Certificate payload\n */\nasync function installCertificate (device, payload) {\n await device.simctl.addRootCertificate(payload, {raw: true});\n}\n\n/**\n * Check whether the given certificate is already installed.\n * The function is using hacky calls to make certificate stuff working for older SDKs.\n * Simulator must be in SHUTDOWN state for this API to work.\n *\n * @param {object} device Simulator instance created by appium-ios-simulator module\n * @param {string} payload Certificate payload\n * @returns {boolean} `true` if the certificate is already present in the root store.\n */\nasync function hasCertificateLegacy (device, payload) {\n return await hasSSLCert(payload, device.udid);\n}\n\n/**\n * Adds a certificate to the trusted root store.\n * The function is using hacky calls to make certificate stuff working for older SDKs.\n * Simulator must be in SHUTDOWN state for this API to work.\n *\n * @param {object} device Simulator instance created by appium-ios-simulator module\n * @param {string} payload Certificate payload\n */\nasync function installCertificateLegacy (device, payload) {\n await installSSLCert(payload, device.udid);\n}\n\n\nexport {\n doesSupportKeychainApi, installCertificate, installCertificateLegacy,\n hasCertificateLegacy\n};\n"],"mappings":";;;;;;;;;;;AAAA;AACA;AAQA,MAAMA,sBAAsB,GAAGC,eAAC,CAACC,OAAO,CAAC,eAAeF,sBAAsB,CAAEG,MAAM,EAAE;EACtF,IAAI;IACF,MAAMA,MAAM,CAACC,MAAM,CAACC,IAAI,CAAC,MAAM,EAAE;MAC/BC,IAAI,EAAE,CAAC,UAAU;IACnB,CAAC,CAAC;IACF,OAAO,IAAI;EACb,CAAC,CAAC,OAAOC,CAAC,EAAE;IACV,OAAO,KAAK;EACd;AACF,CAAC,CAAC;;AAAC;AASH,eAAeC,kBAAkB,CAAEL,MAAM,EAAEM,OAAO,EAAE;EAClD,MAAMN,MAAM,CAACC,MAAM,CAACM,kBAAkB,CAACD,OAAO,EAAE;IAACE,GAAG,EAAE;EAAI,CAAC,CAAC;AAC9D;;AAWA,eAAeC,oBAAoB,CAAET,MAAM,EAAEM,OAAO,EAAE;EACpD,OAAO,MAAM,IAAAI,8BAAU,EAACJ,OAAO,EAAEN,MAAM,CAACW,IAAI,CAAC;AAC/C;;AAUA,eAAeC,wBAAwB,CAAEZ,MAAM,EAAEM,OAAO,EAAE;EACxD,MAAM,IAAAO,kCAAc,EAACP,OAAO,EAAEN,MAAM,CAACW,IAAI,CAAC;AAC5C"}
@@ -4,18 +4,15 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = exports.commands = void 0;
7
-
8
7
  require("source-map-support/register");
9
-
10
8
  const extensions = {},
11
- commands = {};
12
- exports.commands = commands;
9
+ commands = {};
13
10
 
11
+ exports.commands = commands;
14
12
  commands.mobileGetActiveAppInfo = async function mobileGetActiveAppInfo() {
15
13
  return await this.proxyCommand('/wda/activeAppInfo', 'GET');
16
14
  };
17
-
18
15
  Object.assign(extensions, commands);
19
16
  var _default = extensions;
20
17
  exports.default = _default;
21
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJleHRlbnNpb25zIiwiY29tbWFuZHMiLCJtb2JpbGVHZXRBY3RpdmVBcHBJbmZvIiwicHJveHlDb21tYW5kIiwiT2JqZWN0IiwiYXNzaWduIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2NvbW1hbmRzL2FjdGl2ZUFwcEluZm8uanMiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgZXh0ZW5zaW9ucyA9IHt9LCBjb21tYW5kcyA9IHt9O1xuXG4vKipcbiAqIFJldHVybnMgQWN0aXZlQXBwIGluZm8uXG4gKlxuICogQHJldHVybnMge09iamVjdH0gVGhlIHJlc3BvbnNlIG9mIGAvd2RhL2FjdGl2ZUFwcEluZm8nYFxuICogQHRocm93cyB7RXJyb3J9IGlmIGFuIGVycm9yIHJhaXNlZCBieSBjb21tYW5kXG4gKi9cbmNvbW1hbmRzLm1vYmlsZUdldEFjdGl2ZUFwcEluZm8gPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVHZXRBY3RpdmVBcHBJbmZvICgpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKCcvd2RhL2FjdGl2ZUFwcEluZm8nLCAnR0VUJyk7XG59O1xuXG5PYmplY3QuYXNzaWduKGV4dGVuc2lvbnMsIGNvbW1hbmRzKTtcbmV4cG9ydCB7IGNvbW1hbmRzIH07XG5leHBvcnQgZGVmYXVsdCBleHRlbnNpb25zO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxNQUFNQSxVQUFVLEdBQUcsRUFBbkI7QUFBQSxNQUF1QkMsUUFBUSxHQUFHLEVBQWxDOzs7QUFRQUEsUUFBUSxDQUFDQyxzQkFBVCxHQUFrQyxlQUFlQSxzQkFBZixHQUF5QztFQUN6RSxPQUFPLE1BQU0sS0FBS0MsWUFBTCxDQUFrQixvQkFBbEIsRUFBd0MsS0FBeEMsQ0FBYjtBQUNELENBRkQ7O0FBSUFDLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjTCxVQUFkLEVBQTBCQyxRQUExQjtlQUVlRCxVIn0=
18
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJleHRlbnNpb25zIiwiY29tbWFuZHMiLCJtb2JpbGVHZXRBY3RpdmVBcHBJbmZvIiwicHJveHlDb21tYW5kIiwiT2JqZWN0IiwiYXNzaWduIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2NvbW1hbmRzL2FjdGl2ZUFwcEluZm8uanMiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgZXh0ZW5zaW9ucyA9IHt9LCBjb21tYW5kcyA9IHt9O1xuXG4vKipcbiAqIFJldHVybnMgQWN0aXZlQXBwIGluZm8uXG4gKlxuICogQHJldHVybnMge09iamVjdH0gVGhlIHJlc3BvbnNlIG9mIGAvd2RhL2FjdGl2ZUFwcEluZm8nYFxuICogQHRocm93cyB7RXJyb3J9IGlmIGFuIGVycm9yIHJhaXNlZCBieSBjb21tYW5kXG4gKi9cbmNvbW1hbmRzLm1vYmlsZUdldEFjdGl2ZUFwcEluZm8gPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVHZXRBY3RpdmVBcHBJbmZvICgpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKCcvd2RhL2FjdGl2ZUFwcEluZm8nLCAnR0VUJyk7XG59O1xuXG5PYmplY3QuYXNzaWduKGV4dGVuc2lvbnMsIGNvbW1hbmRzKTtcbmV4cG9ydCB7IGNvbW1hbmRzIH07XG5leHBvcnQgZGVmYXVsdCBleHRlbnNpb25zO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUEsTUFBTUEsVUFBVSxHQUFHLENBQUMsQ0FBQztFQUFFQyxRQUFRLEdBQUcsQ0FBQyxDQUFDOztBQUFDO0FBUXJDQSxRQUFRLENBQUNDLHNCQUFzQixHQUFHLGVBQWVBLHNCQUFzQixHQUFJO0VBQ3pFLE9BQU8sTUFBTSxJQUFJLENBQUNDLFlBQVksQ0FBQyxvQkFBb0IsRUFBRSxLQUFLLENBQUM7QUFDN0QsQ0FBQztBQUVEQyxNQUFNLENBQUNDLE1BQU0sQ0FBQ0wsVUFBVSxFQUFFQyxRQUFRLENBQUM7QUFBQyxlQUVyQkQsVUFBVTtBQUFBIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"activeAppInfo.js","names":["extensions","commands","mobileGetActiveAppInfo","proxyCommand","Object","assign"],"sources":["../../../lib/commands/activeAppInfo.js"],"sourcesContent":["const extensions = {}, commands = {};\n\n/**\n * Returns ActiveApp info.\n *\n * @returns {Object} The response of `/wda/activeAppInfo'`\n * @throws {Error} if an error raised by command\n */\ncommands.mobileGetActiveAppInfo = async function mobileGetActiveAppInfo () {\n return await this.proxyCommand('/wda/activeAppInfo', 'GET');\n};\n\nObject.assign(extensions, commands);\nexport { commands };\nexport default extensions;\n"],"mappings":";;;;;;;;;AAAA,MAAMA,UAAU,GAAG,EAAnB;AAAA,MAAuBC,QAAQ,GAAG,EAAlC;;;AAQAA,QAAQ,CAACC,sBAAT,GAAkC,eAAeA,sBAAf,GAAyC;EACzE,OAAO,MAAM,KAAKC,YAAL,CAAkB,oBAAlB,EAAwC,KAAxC,CAAb;AACD,CAFD;;AAIAC,MAAM,CAACC,MAAP,CAAcL,UAAd,EAA0BC,QAA1B;eAEeD,U"}
1
+ {"version":3,"file":"activeAppInfo.js","names":["extensions","commands","mobileGetActiveAppInfo","proxyCommand","Object","assign"],"sources":["../../../lib/commands/activeAppInfo.js"],"sourcesContent":["const extensions = {}, commands = {};\n\n/**\n * Returns ActiveApp info.\n *\n * @returns {Object} The response of `/wda/activeAppInfo'`\n * @throws {Error} if an error raised by command\n */\ncommands.mobileGetActiveAppInfo = async function mobileGetActiveAppInfo () {\n return await this.proxyCommand('/wda/activeAppInfo', 'GET');\n};\n\nObject.assign(extensions, commands);\nexport { commands };\nexport default extensions;\n"],"mappings":";;;;;;;AAAA,MAAMA,UAAU,GAAG,CAAC,CAAC;EAAEC,QAAQ,GAAG,CAAC,CAAC;;AAAC;AAQrCA,QAAQ,CAACC,sBAAsB,GAAG,eAAeA,sBAAsB,GAAI;EACzE,OAAO,MAAM,IAAI,CAACC,YAAY,CAAC,oBAAoB,EAAE,KAAK,CAAC;AAC7D,CAAC;AAEDC,MAAM,CAACC,MAAM,CAACL,UAAU,EAAEC,QAAQ,CAAC;AAAC,eAErBD,UAAU;AAAA"}