appium-xcuitest-driver 4.12.3 → 4.13.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 (108) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/README.md +4 -0
  3. package/build/lib/app-utils.js +1 -5
  4. package/build/lib/app-utils.js.map +1 -1
  5. package/build/lib/build-wda.js +1 -2
  6. package/build/lib/build-wda.js.map +1 -1
  7. package/build/lib/cert-utils.js +1 -4
  8. package/build/lib/cert-utils.js.map +1 -1
  9. package/build/lib/commands/activeAppInfo.js +1 -2
  10. package/build/lib/commands/activeAppInfo.js.map +1 -1
  11. package/build/lib/commands/app-management.js +1 -4
  12. package/build/lib/commands/app-management.js.map +1 -1
  13. package/build/lib/commands/appearance.js +1 -4
  14. package/build/lib/commands/appearance.js.map +1 -1
  15. package/build/lib/commands/battery.js +1 -3
  16. package/build/lib/commands/battery.js.map +1 -1
  17. package/build/lib/commands/biometric.js +1 -4
  18. package/build/lib/commands/biometric.js.map +1 -1
  19. package/build/lib/commands/certificate.js +1 -6
  20. package/build/lib/commands/certificate.js.map +1 -1
  21. package/build/lib/commands/clipboard.js +1 -3
  22. package/build/lib/commands/clipboard.js.map +1 -1
  23. package/build/lib/commands/condition.js +1 -4
  24. package/build/lib/commands/condition.js.map +1 -1
  25. package/build/lib/commands/context.js +3 -22
  26. package/build/lib/commands/context.js.map +1 -1
  27. package/build/lib/commands/cookies.js +1 -4
  28. package/build/lib/commands/cookies.js.map +1 -1
  29. package/build/lib/commands/deviceInfo.js +1 -2
  30. package/build/lib/commands/deviceInfo.js.map +1 -1
  31. package/build/lib/commands/element.js +1 -5
  32. package/build/lib/commands/element.js.map +1 -1
  33. package/build/lib/commands/execute.js +1 -2
  34. package/build/lib/commands/execute.js.map +1 -1
  35. package/build/lib/commands/file-movement.js +1 -16
  36. package/build/lib/commands/file-movement.js.map +1 -1
  37. package/build/lib/commands/find.js +1 -4
  38. package/build/lib/commands/find.js.map +1 -1
  39. package/build/lib/commands/general.js +1 -9
  40. package/build/lib/commands/general.js.map +1 -1
  41. package/build/lib/commands/gesture.js +2 -9
  42. package/build/lib/commands/gesture.js.map +1 -1
  43. package/build/lib/commands/iohid.js +1 -3
  44. package/build/lib/commands/iohid.js.map +1 -1
  45. package/build/lib/commands/keychains.js +1 -2
  46. package/build/lib/commands/keychains.js.map +1 -1
  47. package/build/lib/commands/localization.js +1 -3
  48. package/build/lib/commands/localization.js.map +1 -1
  49. package/build/lib/commands/location.js +1 -5
  50. package/build/lib/commands/location.js.map +1 -1
  51. package/build/lib/commands/log.js +1 -4
  52. package/build/lib/commands/log.js.map +1 -1
  53. package/build/lib/commands/navigation.js +1 -3
  54. package/build/lib/commands/navigation.js.map +1 -1
  55. package/build/lib/commands/notifications.js +1 -3
  56. package/build/lib/commands/notifications.js.map +1 -1
  57. package/build/lib/commands/pcap.js +1 -3
  58. package/build/lib/commands/pcap.js.map +1 -1
  59. package/build/lib/commands/performance.js +3 -7
  60. package/build/lib/commands/performance.js.map +1 -1
  61. package/build/lib/commands/permissions.js +1 -5
  62. package/build/lib/commands/permissions.js.map +1 -1
  63. package/build/lib/commands/record-audio.js +1 -3
  64. package/build/lib/commands/record-audio.js.map +1 -1
  65. package/build/lib/commands/recordscreen.js +2 -5
  66. package/build/lib/commands/recordscreen.js.map +1 -1
  67. package/build/lib/commands/screenshots.js +1 -5
  68. package/build/lib/commands/screenshots.js.map +1 -1
  69. package/build/lib/commands/source.js +1 -2
  70. package/build/lib/commands/source.js.map +1 -1
  71. package/build/lib/commands/timeouts.js +1 -3
  72. package/build/lib/commands/timeouts.js.map +1 -1
  73. package/build/lib/commands/web.js +4 -20
  74. package/build/lib/commands/web.js.map +1 -1
  75. package/build/lib/commands/xctest.js +1 -12
  76. package/build/lib/commands/xctest.js.map +1 -1
  77. package/build/lib/cookies.js +1 -11
  78. package/build/lib/cookies.js.map +1 -1
  79. package/build/lib/css-converter.js +1 -13
  80. package/build/lib/css-converter.js.map +1 -1
  81. package/build/lib/desired-caps.js +4 -13
  82. package/build/lib/desired-caps.js.map +1 -1
  83. package/build/lib/device-connections-factory.js +1 -2
  84. package/build/lib/device-connections-factory.js.map +1 -1
  85. package/build/lib/device-log/ios-crash-log.js +2 -4
  86. package/build/lib/device-log/ios-crash-log.js.map +1 -1
  87. package/build/lib/device-log/ios-performance-log.js +1 -3
  88. package/build/lib/device-log/ios-performance-log.js.map +1 -1
  89. package/build/lib/device-log/rotating-log.js +1 -2
  90. package/build/lib/device-log/rotating-log.js.map +1 -1
  91. package/build/lib/device-log/safari-console-log.js +1 -4
  92. package/build/lib/device-log/safari-console-log.js.map +1 -1
  93. package/build/lib/device-log/safari-network-log.js +1 -6
  94. package/build/lib/device-log/safari-network-log.js.map +1 -1
  95. package/build/lib/driver.js +2 -46
  96. package/build/lib/driver.js.map +1 -1
  97. package/build/lib/ios-deploy.js +1 -3
  98. package/build/lib/ios-deploy.js.map +1 -1
  99. package/build/lib/ios-fs-helpers.js +1 -7
  100. package/build/lib/ios-fs-helpers.js.map +1 -1
  101. package/build/lib/py-ios-device-client.js +1 -2
  102. package/build/lib/py-ios-device-client.js.map +1 -1
  103. package/build/lib/simulator-management.js +1 -7
  104. package/build/lib/simulator-management.js.map +1 -1
  105. package/build/lib/utils.js +1 -15
  106. package/build/lib/utils.js.map +1 -1
  107. package/npm-shrinkwrap.json +28 -27
  108. package/package.json +5 -3
package/CHANGELOG.md CHANGED
@@ -1,3 +1,12 @@
1
+ # [4.13.0](https://github.com/appium/appium-xcuitest-driver/compare/v4.12.4...v4.13.0) (2022-12-01)
2
+
3
+
4
+ ### Features
5
+
6
+ * Add a script to open WDA in Xcode ([#1457](https://github.com/appium/appium-xcuitest-driver/issues/1457)) ([e2255fe](https://github.com/appium/appium-xcuitest-driver/commit/e2255fe92d1a4e3bb129b840b06a61fc312d1a11))
7
+
8
+ ## [4.12.4](https://github.com/appium/appium-xcuitest-driver/compare/v4.12.3...v4.12.4) (2022-11-29)
9
+
1
10
  ## [4.12.3](https://github.com/appium/appium-xcuitest-driver/compare/v4.12.2...v4.12.3) (2022-11-25)
2
11
 
3
12
  ## [4.12.2](https://github.com/appium/appium-xcuitest-driver/compare/v4.12.1...v4.12.2) (2022-11-06)
package/README.md CHANGED
@@ -109,6 +109,10 @@ where `MyPrivateKey.p12` is the private development key exported from the system
109
109
  The full path to the keychain can then be sent to the Appium system using the `keychainPath` desired capability,
110
110
  and the password sent through the `keychainPassword` capability.
111
111
 
112
+ ### Continuous Integration
113
+
114
+ [Continuous Integration Setup document](docs/ci-setup.md) covers steps to take in order to use the XCUItest driver in a CI environment.
115
+
112
116
  ## Appium 2.x Server Arguments
113
117
 
114
118
  These arguments are set when you launch the Appium server, with this driver installed. They are for system administrators.
@@ -51,7 +51,6 @@ async function fetchSupportedAppPlatforms(app) {
51
51
  return [];
52
52
  }
53
53
  }
54
-
55
54
  async function verifyApplicationPlatform(app, expectedPlatform) {
56
55
  _logger.default.debug('Verifying application platform');
57
56
  const supportedPlatforms = await fetchSupportedAppPlatforms(app);
@@ -145,11 +144,9 @@ async function parseLocalizableStrings(opts) {
145
144
  _logger.default.info(`Got ${_lodash.default.keys(resultStrings).length} string(s) from '${lprojRoot}'`);
146
145
  return resultStrings;
147
146
  }
148
-
149
147
  async function isAppBundle(appPath) {
150
148
  return _lodash.default.endsWith(_lodash.default.toLower(appPath), APP_EXT) && (await _support.fs.stat(appPath)).isDirectory() && (await _support.fs.exists(_path.default.join(appPath, 'Info.plist')));
151
149
  }
152
-
153
150
  async function findApps(archivePath, appExtensions) {
154
151
  const useSystemUnzipEnv = process.env.APPIUM_PREFER_SYSTEM_UNZIP;
155
152
  const useSystemUnzip = _lodash.default.isEmpty(useSystemUnzipEnv) || !['0', 'false'].includes(_lodash.default.toLower(useSystemUnzipEnv));
@@ -164,7 +161,6 @@ async function findApps(archivePath, appExtensions) {
164
161
  })).sort((a, b) => a.split(_path.default.sep).length - b.split(_path.default.sep).length);
165
162
  return [tmpRoot, sortedBundleItems];
166
163
  }
167
-
168
164
  async function isolateAppBundle(appRoot) {
169
165
  const tmpRoot = await _support.tempDir.openDir();
170
166
  const dstRoot = _path.default.join(tmpRoot, _path.default.basename(appRoot));
@@ -173,4 +169,4 @@ async function isolateAppBundle(appRoot) {
173
169
  });
174
170
  return dstRoot;
175
171
  }
176
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTVFJJTkdTRElDVF9SRVNPVVJDRSIsIlNUUklOR1NfUkVTT1VSQ0UiLCJTQUZBUklfQlVORExFX0lEIiwiQVBQX0VYVCIsIklQQV9FWFQiLCJleHRyYWN0UGxpc3RFbnRyeSIsImFwcCIsImVudHJ5TmFtZSIsInBsaXN0UGF0aCIsInBhdGgiLCJyZXNvbHZlIiwicGxpc3QiLCJwYXJzZVBsaXN0RmlsZSIsImVyciIsIkVycm9yIiwiYmFzZW5hbWUiLCJtZXNzYWdlIiwiZXh0cmFjdEJ1bmRsZUlkIiwiYnVuZGxlSWQiLCJsb2ciLCJkZWJ1ZyIsImZldGNoU3VwcG9ydGVkQXBwUGxhdGZvcm1zIiwicmVzdWx0IiwiXyIsImlzQXJyYXkiLCJ3YXJuIiwidmVyaWZ5QXBwbGljYXRpb25QbGF0Zm9ybSIsImV4cGVjdGVkUGxhdGZvcm0iLCJzdXBwb3J0ZWRQbGF0Zm9ybXMiLCJKU09OIiwic3RyaW5naWZ5IiwiaXNTaW11bGF0b3IiLCJpc1R2T1MiLCJwcmVmaXgiLCJzdWZmaXgiLCJkc3RQbGF0Zm9ybSIsImluY2x1ZGVzIiwicmVhZFJlc291cmNlIiwicmVzb3VyY2VQYXRoIiwiZGF0YSIsImtleSIsInZhbHVlIiwidG9QYWlycyIsImlzU3RyaW5nIiwicGFyc2VMb2NhbGl6YWJsZVN0cmluZ3MiLCJvcHRzIiwibGFuZ3VhZ2UiLCJsb2NhbGl6YWJsZVN0cmluZ3NEaXIiLCJzdHJpbmdGaWxlIiwic3RyaWN0TW9kZSIsImluZm8iLCJscHJvalJvb3QiLCJzdWJmb2xkZXIiLCJmcyIsImV4aXN0cyIsInJlc291cmNlUGF0aHMiLCJkc3RQYXRoIiwicHVzaCIsImlzRW1wdHkiLCJyZXNvdXJjZUZpbGVzIiwicmVhZGRpciIsImZpbHRlciIsIm5hbWUiLCJzb21lIiwieCIsImVuZHNXaXRoIiwibWFwIiwibGVuZ3RoIiwicmVzdWx0U3RyaW5ncyIsInRvQWJzb2x1dGVQYXRoIiwicCIsImlzQWJzb2x1dGUiLCJwcm9jZXNzIiwiY3dkIiwidXRpbCIsImlzU3ViUGF0aCIsImtleXMiLCJtZXJnZSIsImUiLCJpc0FwcEJ1bmRsZSIsImFwcFBhdGgiLCJ0b0xvd2VyIiwic3RhdCIsImlzRGlyZWN0b3J5Iiwiam9pbiIsImZpbmRBcHBzIiwiYXJjaGl2ZVBhdGgiLCJhcHBFeHRlbnNpb25zIiwidXNlU3lzdGVtVW56aXBFbnYiLCJlbnYiLCJBUFBJVU1fUFJFRkVSX1NZU1RFTV9VTlpJUCIsInVzZVN5c3RlbVVuemlwIiwidG1wUm9vdCIsInRlbXBEaXIiLCJvcGVuRGlyIiwiemlwIiwiZXh0cmFjdEFsbFRvIiwiZ2xvYlBhdHRlcm4iLCJleHQiLCJyZXBsYWNlIiwic29ydGVkQnVuZGxlSXRlbXMiLCJnbG9iIiwic3RyaWN0Iiwic29ydCIsImEiLCJiIiwic3BsaXQiLCJzZXAiLCJpc29sYXRlQXBwQnVuZGxlIiwiYXBwUm9vdCIsImRzdFJvb3QiLCJtdiIsIm1rZGlycCJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9hcHAtdXRpbHMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgcGxpc3QsIGZzLCB1dGlsLCB0ZW1wRGlyLCB6aXAgfSBmcm9tICdhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgbG9nIGZyb20gJy4vbG9nZ2VyLmpzJztcblxuY29uc3QgU1RSSU5HU0RJQ1RfUkVTT1VSQ0UgPSAnLnN0cmluZ3NkaWN0JztcbmNvbnN0IFNUUklOR1NfUkVTT1VSQ0UgPSAnLnN0cmluZ3MnO1xuY29uc3QgU0FGQVJJX0JVTkRMRV9JRCA9ICdjb20uYXBwbGUubW9iaWxlc2FmYXJpJztcbmNvbnN0IEFQUF9FWFQgPSAnLmFwcCc7XG5jb25zdCBJUEFfRVhUID0gJy5pcGEnO1xuXG5hc3luYyBmdW5jdGlvbiBleHRyYWN0UGxpc3RFbnRyeSAoYXBwLCBlbnRyeU5hbWUpIHtcbiAgY29uc3QgcGxpc3RQYXRoID0gcGF0aC5yZXNvbHZlKGFwcCwgJ0luZm8ucGxpc3QnKTtcbiAgdHJ5IHtcbiAgICByZXR1cm4gKGF3YWl0IHBsaXN0LnBhcnNlUGxpc3RGaWxlKHBsaXN0UGF0aCkpW2VudHJ5TmFtZV07XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGV4dHJhY3QgSW5mby5wbGlzdCBmcm9tICcke3BhdGguYmFzZW5hbWUoYXBwKX0nOiAke2Vyci5tZXNzYWdlfWApO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGV4dHJhY3RCdW5kbGVJZCAoYXBwKSB7XG4gIGNvbnN0IGJ1bmRsZUlkID0gYXdhaXQgZXh0cmFjdFBsaXN0RW50cnkoYXBwLCAnQ0ZCdW5kbGVJZGVudGlmaWVyJyk7XG4gIGxvZy5kZWJ1ZyhgR2V0dGluZyBidW5kbGUgSUQgZnJvbSBhcHAgJyR7YXBwfSc6ICcke2J1bmRsZUlkfSdgKTtcbiAgcmV0dXJuIGJ1bmRsZUlkO1xufVxuXG5hc3luYyBmdW5jdGlvbiBmZXRjaFN1cHBvcnRlZEFwcFBsYXRmb3JtcyAoYXBwKSB7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZXh0cmFjdFBsaXN0RW50cnkoYXBwLCAnQ0ZCdW5kbGVTdXBwb3J0ZWRQbGF0Zm9ybXMnKTtcbiAgICBpZiAoIV8uaXNBcnJheShyZXN1bHQpKSB7XG4gICAgICBsb2cud2FybihgJHtwYXRoLmJhc2VuYW1lKGFwcCl9JzogQ0ZCdW5kbGVTdXBwb3J0ZWRQbGF0Zm9ybXMgaXMgbm90IGEgdmFsaWQgbGlzdGApO1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2cud2FybihcbiAgICAgIGBDYW5ub3QgZXh0cmFjdCB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgcGxhdGZvcm1zIGZyb20gJyR7cGF0aC5iYXNlbmFtZShhcHApfSc6ICR7ZXJyLm1lc3NhZ2V9YFxuICAgICk7XG4gICAgcmV0dXJuIFtdO1xuICB9XG59XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gUGxhdGZvcm1PcHRzXG4gKlxuICogQHByb3BlcnR5IHtib29sZWFufSBpc1NpbXVsYXRvciAtIFdoZXRoZXIgdGhlIGRlc3RpbmF0aW9uIHBsYXRmb3JtIGlzIGEgU2ltdWxhdG9yXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGlzVHZPUyAtIFdoZXRoZXIgdGhlIGRlc3RpbmF0aW9uIHBsYXRmb3JtIGlzIGEgU2ltdWxhdG9yXG4gKi9cblxuLyoqXG4gKiBWZXJpZnkgd2hldGhlciB0aGUgZ2l2ZW4gYXBwbGljYXRpb24gaXMgY29tcGF0aWJsZSB0byB0aGVcbiAqIHBsYXRmb3JtIHdoZXJlIGl0IGlzIGdvaW5nIHRvIGJlIGluc3RhbGxlZCBhbmQgdGVzdGVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcHAgLSBUaGUgYWN0dWFsIHBhdGggdG8gdGhlIGFwcGxpY2F0aW9uIGJ1bmRsZVxuICogQHBhcmFtIHtQbGF0Zm9ybU9wdHN9IGV4cGVjdGVkUGxhdGZvcm1cbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiBidW5kbGUgYXJjaGl0ZWN0dXJlIGRvZXMgbm90IG1hdGNoIHRoZSBleHBlY3RlZCBkZXZpY2UgYXJjaGl0ZWN0dXJlLlxuICovXG5hc3luYyBmdW5jdGlvbiB2ZXJpZnlBcHBsaWNhdGlvblBsYXRmb3JtIChhcHAsIGV4cGVjdGVkUGxhdGZvcm0pIHtcbiAgbG9nLmRlYnVnKCdWZXJpZnlpbmcgYXBwbGljYXRpb24gcGxhdGZvcm0nKTtcblxuICBjb25zdCBzdXBwb3J0ZWRQbGF0Zm9ybXMgPSBhd2FpdCBmZXRjaFN1cHBvcnRlZEFwcFBsYXRmb3JtcyhhcHApO1xuICBsb2cuZGVidWcoYENGQnVuZGxlU3VwcG9ydGVkUGxhdGZvcm1zOiAke0pTT04uc3RyaW5naWZ5KHN1cHBvcnRlZFBsYXRmb3Jtcyl9YCk7XG5cbiAgY29uc3Qge1xuICAgIGlzU2ltdWxhdG9yLFxuICAgIGlzVHZPUyxcbiAgfSA9IGV4cGVjdGVkUGxhdGZvcm07XG4gIGNvbnN0IHByZWZpeCA9IGlzVHZPUyA/ICdBcHBsZVRWJyA6ICdpUGhvbmUnO1xuICBjb25zdCBzdWZmaXggPSBpc1NpbXVsYXRvciA/ICdTaW11bGF0b3InIDogJ09TJztcbiAgY29uc3QgZHN0UGxhdGZvcm0gPSBgJHtwcmVmaXh9JHtzdWZmaXh9YDtcbiAgaWYgKCFzdXBwb3J0ZWRQbGF0Zm9ybXMuaW5jbHVkZXMoZHN0UGxhdGZvcm0pKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAke2lzU2ltdWxhdG9yID8gJ1NpbXVsYXRvcicgOiAnUmVhbCBkZXZpY2UnfSBhcmNoaXRlY3R1cmUgaXMgdW5zdXBwb3J0ZWQgYnkgdGhlICcke2FwcH0nIGFwcGxpY2F0aW9uLiBgICtcbiAgICAgIGBNYWtlIHN1cmUgdGhlIGNvcnJlY3QgZGVwbG95bWVudCB0YXJnZXQgaGFzIGJlZW4gc2VsZWN0ZWQgZm9yIGl0cyBjb21waWxhdGlvbiBpbiBYY29kZS5gKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiByZWFkUmVzb3VyY2UgKHJlc291cmNlUGF0aCkge1xuICBjb25zdCBkYXRhID0gYXdhaXQgcGxpc3QucGFyc2VQbGlzdEZpbGUocmVzb3VyY2VQYXRoKTtcbiAgY29uc3QgcmVzdWx0ID0ge307XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIF8udG9QYWlycyhkYXRhKSkge1xuICAgIHJlc3VsdFtrZXldID0gXy5pc1N0cmluZyh2YWx1ZSkgPyB2YWx1ZSA6IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5hc3luYyBmdW5jdGlvbiBwYXJzZUxvY2FsaXphYmxlU3RyaW5ncyAob3B0cykge1xuICBjb25zdCB7XG4gICAgYXBwLFxuICAgIGxhbmd1YWdlID0gJ2VuJyxcbiAgICBsb2NhbGl6YWJsZVN0cmluZ3NEaXIsXG4gICAgc3RyaW5nRmlsZSxcbiAgICBzdHJpY3RNb2RlLFxuICB9ID0gb3B0cztcblxuICBpZiAoIWFwcCkge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBgU3RyaW5ncyBleHRyYWN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgaWYgJ2FwcCcgY2FwYWJpbGl0eSBpcyBub3Qgc2V0YDtcbiAgICBpZiAoc3RyaWN0TW9kZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgIH1cbiAgICBsb2cuaW5mbyhtZXNzYWdlKTtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICBsZXQgbHByb2pSb290O1xuICBmb3IgKGNvbnN0IHN1YmZvbGRlciBvZiBbYCR7bGFuZ3VhZ2V9Lmxwcm9qYCwgbG9jYWxpemFibGVTdHJpbmdzRGlyLCAnJ10pIHtcbiAgICBscHJvalJvb3QgPSBwYXRoLnJlc29sdmUoYXBwLCBzdWJmb2xkZXIpO1xuICAgIGlmIChhd2FpdCBmcy5leGlzdHMobHByb2pSb290KSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNvbnN0IG1lc3NhZ2UgPSBgTm8gJyR7bHByb2pSb290fScgcmVzb3VyY2VzIGZvbGRlciBoYXMgYmVlbiBmb3VuZGA7XG4gICAgaWYgKHN0cmljdE1vZGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICB9XG4gICAgbG9nLmRlYnVnKG1lc3NhZ2UpO1xuICB9XG4gIGxvZy5pbmZvKGBXaWxsIGV4dHJhY3QgcmVzb3VyY2Ugc3RyaW5ncyBmcm9tICcke2xwcm9qUm9vdH0nYCk7XG5cbiAgY29uc3QgcmVzb3VyY2VQYXRocyA9IFtdO1xuICBpZiAoc3RyaW5nRmlsZSkge1xuICAgIGNvbnN0IGRzdFBhdGggPSBwYXRoLnJlc29sdmUobHByb2pSb290LCBzdHJpbmdGaWxlKTtcbiAgICBpZiAoYXdhaXQgZnMuZXhpc3RzKGRzdFBhdGgpKSB7XG4gICAgICByZXNvdXJjZVBhdGhzLnB1c2goZHN0UGF0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgTm8gJyR7ZHN0UGF0aH0nIHJlc291cmNlIGZpbGUgaGFzIGJlZW4gZm91bmQgZm9yICcke2FwcH0nYDtcbiAgICAgIGlmIChzdHJpY3RNb2RlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICAgIH1cbiAgICAgIGxvZy5pbmZvKG1lc3NhZ2UpO1xuICAgICAgbG9nLmluZm8oYEdldHRpbmcgYWxsIHRoZSBhdmFpbGFibGUgc3RyaW5ncyBmcm9tICcke2xwcm9qUm9vdH0nYCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKF8uaXNFbXB0eShyZXNvdXJjZVBhdGhzKSAmJiBhd2FpdCBmcy5leGlzdHMobHByb2pSb290KSkge1xuICAgIGNvbnN0IHJlc291cmNlRmlsZXMgPSAoYXdhaXQgZnMucmVhZGRpcihscHJvalJvb3QpKVxuICAgICAgLmZpbHRlcigobmFtZSkgPT4gXy5zb21lKFtTVFJJTkdTX1JFU09VUkNFLCBTVFJJTkdTRElDVF9SRVNPVVJDRV0sICh4KSA9PiBuYW1lLmVuZHNXaXRoKHgpKSlcbiAgICAgIC5tYXAoKG5hbWUpID0+IHBhdGgucmVzb2x2ZShscHJvalJvb3QsIG5hbWUpKTtcbiAgICByZXNvdXJjZVBhdGhzLnB1c2goLi4ucmVzb3VyY2VGaWxlcyk7XG4gIH1cbiAgbG9nLmluZm8oYEdvdCAke3Jlc291cmNlUGF0aHMubGVuZ3RofSByZXNvdXJjZSBmaWxlKHMpIGluICcke2xwcm9qUm9vdH0nYCk7XG5cbiAgaWYgKF8uaXNFbXB0eShyZXNvdXJjZVBhdGhzKSkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGNvbnN0IHJlc3VsdFN0cmluZ3MgPSB7fTtcbiAgY29uc3QgdG9BYnNvbHV0ZVBhdGggPSBmdW5jdGlvbiAocCkge1xuICAgIHJldHVybiBwYXRoLmlzQWJzb2x1dGUocCkgPyBwIDogcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksIHApO1xuICB9O1xuICBmb3IgKGNvbnN0IHJlc291cmNlUGF0aCBvZiByZXNvdXJjZVBhdGhzKSB7XG4gICAgaWYgKCF1dGlsLmlzU3ViUGF0aCh0b0Fic29sdXRlUGF0aChyZXNvdXJjZVBhdGgpLCB0b0Fic29sdXRlUGF0aChhcHApKSkge1xuICAgICAgLy8gc2VjdXJpdHkgcHJlY2F1dGlvblxuICAgICAgdGhyb3cgbmV3IEVycm9yKGAnJHtyZXNvdXJjZVBhdGh9JyBpcyBleHBlY3RlZCB0byBiZSBsb2NhdGVkIHVuZGVyICcke2FwcH0nYCk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVhZFJlc291cmNlKHJlc291cmNlUGF0aCk7XG4gICAgICBsb2cuZGVidWcoYFBhcnNlZCAke18ua2V5cyhkYXRhKS5sZW5ndGh9IHN0cmluZyhzKSBmcm9tICcke3Jlc291cmNlUGF0aH0nYCk7XG4gICAgICBfLm1lcmdlKHJlc3VsdFN0cmluZ3MsIGRhdGEpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZy53YXJuKGBDYW5ub3QgcGFyc2UgJyR7cmVzb3VyY2VQYXRofScgcmVzb3VyY2UuIE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICBsb2cuaW5mbyhgR290ICR7Xy5rZXlzKHJlc3VsdFN0cmluZ3MpLmxlbmd0aH0gc3RyaW5nKHMpIGZyb20gJyR7bHByb2pSb290fSdgKTtcbiAgcmV0dXJuIHJlc3VsdFN0cmluZ3M7XG59XG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gcGF0aCBvbiB0aGUgZmlsZSBzeXN0ZW0gcG9pbnRzIHRvIHRoZSAuYXBwIGJ1bmRsZSByb290XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGFwcFBhdGggUG9zc2libGUgLmFwcCBidW5kbGUgcm9vdFxuICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgdGhlIGdpdmVuIHBhdGggcG9pbnRzIHRvIGFuIC5hcHAgYnVuZGxlXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGlzQXBwQnVuZGxlIChhcHBQYXRoKSB7XG4gIHJldHVybiBfLmVuZHNXaXRoKF8udG9Mb3dlcihhcHBQYXRoKSwgQVBQX0VYVClcbiAgICAmJiAoYXdhaXQgZnMuc3RhdChhcHBQYXRoKSkuaXNEaXJlY3RvcnkoKVxuICAgICYmIGF3YWl0IGZzLmV4aXN0cyhwYXRoLmpvaW4oYXBwUGF0aCwgJ0luZm8ucGxpc3QnKSk7XG59XG5cbi8qKlxuICogRXh0cmFjdCB0aGUgZ2l2ZW4gYXJjaGl2ZSBhbmQgbG9va3MgZm9yIGl0ZW1zIHdpdGggZ2l2ZW4gZXh0ZW5zaW9ucyBpbiBpdFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcmNoaXZlUGF0aCBGdWxsIHBhdGggdG8gYSAuemlwIGFyY2hpdmVcbiAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gYXBwRXh0ZW5zaW9ucyBMaXN0IG9mIG1hdGNoaW5nIGl0ZW0gZXh0ZW5zaW9uc1xuICogQHJldHVybnMge1tzdHJpbmcsIEFycmF5PFN0cmluZz5dfSBUdXBsZSwgd2hlcmUgdGhlIGZpcnN0IGVsZW1lbnQgcG9pbnRzIHRvXG4gKiBhIHRlbXBvcmFyeSBmb2xkZXIgcm9vdCB3aGVyZSB0aGUgYXJjaGl2ZSBoYXMgYmVlbiBleHRyYWN0ZWQgYW5kIHRoZSBzZWNvbmQgaXRlbVxuICogY29udGFpbnMgYSBsaXN0IG9mIHJlbGF0aXZlIHBhdGhzIHRvIG1hdGNoZWQgaXRlbXNcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZmluZEFwcHMgKGFyY2hpdmVQYXRoLCBhcHBFeHRlbnNpb25zKSB7XG4gIGNvbnN0IHVzZVN5c3RlbVVuemlwRW52ID0gcHJvY2Vzcy5lbnYuQVBQSVVNX1BSRUZFUl9TWVNURU1fVU5aSVA7XG4gIGNvbnN0IHVzZVN5c3RlbVVuemlwID0gXy5pc0VtcHR5KHVzZVN5c3RlbVVuemlwRW52KVxuICAgIHx8ICFbJzAnLCAnZmFsc2UnXS5pbmNsdWRlcyhfLnRvTG93ZXIodXNlU3lzdGVtVW56aXBFbnYpKTtcbiAgY29uc3QgdG1wUm9vdCA9IGF3YWl0IHRlbXBEaXIub3BlbkRpcigpO1xuICBhd2FpdCB6aXAuZXh0cmFjdEFsbFRvKGFyY2hpdmVQYXRoLCB0bXBSb290LCB7dXNlU3lzdGVtVW56aXB9KTtcbiAgY29uc3QgZ2xvYlBhdHRlcm4gPSBgKiovKi4rKCR7YXBwRXh0ZW5zaW9ucy5tYXAoKGV4dCkgPT4gZXh0LnJlcGxhY2UoL15cXC4vLCAnJykpLmpvaW4oJ3wnKX0pYDtcbiAgY29uc3Qgc29ydGVkQnVuZGxlSXRlbXMgPSAoYXdhaXQgZnMuZ2xvYihnbG9iUGF0dGVybiwge1xuICAgIGN3ZDogdG1wUm9vdCxcbiAgICBzdHJpY3Q6IGZhbHNlLFxuICB9KSkuc29ydCgoYSwgYikgPT4gYS5zcGxpdChwYXRoLnNlcCkubGVuZ3RoIC0gYi5zcGxpdChwYXRoLnNlcCkubGVuZ3RoKTtcbiAgcmV0dXJuIFt0bXBSb290LCBzb3J0ZWRCdW5kbGVJdGVtc107XG59XG5cbi8qKlxuICogTW92ZXMgdGhlIGFwcGxpY2F0aW9uIGJ1bmRsZSB0byBhIG5ld2x5IGNyZWF0ZWQgdGVtcG9yYXJ5IGZvbGRlclxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcHBSb290IEZ1bGwgcGF0aCB0byB0aGUgLmFwcCBidW5kbGVcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBuZXcgcGF0aCB0byB0aGUgYXBwIGJ1bmRsZS5cbiAqIFRoZSBuYW1lIG9mIHRoZSBhcHAgYnVuZGxlIHJlbWFpbnMgdGhvdWdoXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGlzb2xhdGVBcHBCdW5kbGUgKGFwcFJvb3QpIHtcbiAgY29uc3QgdG1wUm9vdCA9IGF3YWl0IHRlbXBEaXIub3BlbkRpcigpO1xuICBjb25zdCBkc3RSb290ID0gcGF0aC5qb2luKHRtcFJvb3QsIHBhdGguYmFzZW5hbWUoYXBwUm9vdCkpO1xuICBhd2FpdCBmcy5tdihhcHBSb290LCBkc3RSb290LCB7bWtkaXJwOiB0cnVlfSk7XG4gIHJldHVybiBkc3RSb290O1xufVxuXG5leHBvcnQge1xuICBleHRyYWN0QnVuZGxlSWQsIHZlcmlmeUFwcGxpY2F0aW9uUGxhdGZvcm0sIHBhcnNlTG9jYWxpemFibGVTdHJpbmdzLFxuICBTQUZBUklfQlVORExFX0lELCBmZXRjaFN1cHBvcnRlZEFwcFBsYXRmb3JtcywgQVBQX0VYVCwgSVBBX0VY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
172
+ //# 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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"}
@@ -10,7 +10,6 @@ var _utils = require("./utils");
10
10
  var _simulatorManagement = require("./simulator-management");
11
11
  var _asyncbox = require("asyncbox");
12
12
  const DEFAULT_SIM_NAME = 'iPhone 12';
13
-
14
13
  async function build() {
15
14
  const xcodeVersion = await (0, _utils.getAndCheckXcodeVersion)();
16
15
  const iosVersion = await (0, _utils.getAndCheckIosSdkVersion)();
@@ -32,4 +31,4 @@ if (require.main === module) {
32
31
  }
33
32
  var _default = build;
34
33
  exports.default = _default;
35
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJERUZBVUxUX1NJTV9OQU1FIiwiYnVpbGQiLCJ4Y29kZVZlcnNpb24iLCJnZXRBbmRDaGVja1hjb2RlVmVyc2lvbiIsImlvc1ZlcnNpb24iLCJnZXRBbmRDaGVja0lvc1Nka1ZlcnNpb24iLCJkZXZpY2VOYW1lIiwidHJhbnNsYXRlRGV2aWNlTmFtZSIsImRldmljZSIsImdldEV4aXN0aW5nU2ltIiwicGxhdGZvcm1WZXJzaW9uIiwid2RhIiwiV2ViRHJpdmVyQWdlbnQiLCJpb3NTZGtWZXJzaW9uIiwic2hvd1hjb2RlTG9nIiwieGNvZGVidWlsZCIsInN0YXJ0IiwicmVxdWlyZSIsIm1haW4iLCJtb2R1bGUiLCJhc3luY2lmeSJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9idWlsZC13ZGEuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgV2ViRHJpdmVyQWdlbnQgfSBmcm9tICdhcHBpdW0td2ViZHJpdmVyYWdlbnQnO1xuaW1wb3J0IHsgdHJhbnNsYXRlRGV2aWNlTmFtZSwgZ2V0QW5kQ2hlY2tYY29kZVZlcnNpb24sIGdldEFuZENoZWNrSW9zU2RrVmVyc2lvbiB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgZ2V0RXhpc3RpbmdTaW0gfSBmcm9tICcuL3NpbXVsYXRvci1tYW5hZ2VtZW50JztcbmltcG9ydCB7IGFzeW5jaWZ5IH0gZnJvbSAnYXN5bmNib3gnO1xuXG5jb25zdCBERUZBVUxUX1NJTV9OQU1FID0gJ2lQaG9uZSAxMic7XG5cbi8vIFRPRE86IGFsbG93IHBhc3NpbmcgaW4gYWxsIHRoZSB2YXJpb3VzIGJ1aWxkIHBhcmFtcyBhcyBDTEkgYXJnc1xuYXN5bmMgZnVuY3Rpb24gYnVpbGQgKCkge1xuICBjb25zdCB4Y29kZVZlcnNpb24gPSBhd2FpdCBnZXRBbmRDaGVja1hjb2RlVmVyc2lvbigpO1xuICBjb25zdCBpb3NWZXJzaW9uID0gYXdhaXQgZ2V0QW5kQ2hlY2tJb3NTZGtWZXJzaW9uKCk7XG4gIGNvbnN0IGRldmljZU5hbWUgPSB0cmFuc2xhdGVEZXZpY2VOYW1lKGlvc1ZlcnNpb24sIERFRkFVTFRfU0lNX05BTUUpO1xuICBjb25zdCBkZXZpY2UgPSBhd2FpdCBnZXRFeGlzdGluZ1NpbSh7XG4gICAgcGxhdGZvcm1WZXJzaW9uOiBpb3NWZXJzaW9uLFxuICAgIGRldmljZU5hbWVcbiAgfSk7XG4gIGNvbnN0IHdkYSA9IG5ldyBXZWJEcml2ZXJBZ2VudCh4Y29kZVZlcnNpb24sIHtcbiAgICBpb3NTZGtWZXJzaW9uOiBpb3NWZXJzaW9uLFxuICAgIHBsYXRmb3JtVmVyc2lvbjogaW9zVmVyc2lvbixcbiAgICBzaG93WGNvZGVMb2c6IHRydWUsXG4gICAgZGV2aWNlLFxuICB9KTtcbiAgYXdhaXQgd2RhLnhjb2RlYnVpbGQuc3RhcnQodHJ1ZSk7XG59XG5cbmlmIChyZXF1aXJlLm1haW4gPT09IG1vZHVsZSkge1xuICBhc3luY2lmeShidWlsZCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJ1aWxkO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQSxNQUFNQSxnQkFBZ0IsR0FBRyxXQUFXOztBQUdwQyxlQUFlQyxLQUFLLEdBQUk7RUFDdEIsTUFBTUMsWUFBWSxHQUFHLE1BQU0sSUFBQUMsOEJBQXVCLEdBQUU7RUFDcEQsTUFBTUMsVUFBVSxHQUFHLE1BQU0sSUFBQUMsK0JBQXdCLEdBQUU7RUFDbkQsTUFBTUMsVUFBVSxHQUFHLElBQUFDLDBCQUFtQixFQUFDSCxVQUFVLEVBQUVKLGdCQUFnQixDQUFDO0VBQ3BFLE1BQU1RLE1BQU0sR0FBRyxNQUFNLElBQUFDLG1DQUFjLEVBQUM7SUFDbENDLGVBQWUsRUFBRU4sVUFBVTtJQUMzQkU7RUFDRixDQUFDLENBQUM7RUFDRixNQUFNSyxHQUFHLEdBQUcsSUFBSUMsb0NBQWMsQ0FBQ1YsWUFBWSxFQUFFO0lBQzNDVyxhQUFhLEVBQUVULFVBQVU7SUFDekJNLGVBQWUsRUFBRU4sVUFBVTtJQUMzQlUsWUFBWSxFQUFFLElBQUk7SUFDbEJOO0VBQ0YsQ0FBQyxDQUFDO0VBQ0YsTUFBTUcsR0FBRyxDQUFDSSxVQUFVLENBQUNDLEtBQUssQ0FBQyxJQUFJLENBQUM7QUFDbEM7QUFFQSxJQUFJQyxPQUFPLENBQUNDLElBQUksS0FBS0MsTUFBTSxFQUFFO0VBQzNCLElBQUFDLGtCQUFRLEVBQUNuQixLQUFLLENBQUM7QUFDakI7QUFBQyxlQUVjQSxLQUFLO0FBQUEifQ==
34
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJERUZBVUxUX1NJTV9OQU1FIiwiYnVpbGQiLCJ4Y29kZVZlcnNpb24iLCJnZXRBbmRDaGVja1hjb2RlVmVyc2lvbiIsImlvc1ZlcnNpb24iLCJnZXRBbmRDaGVja0lvc1Nka1ZlcnNpb24iLCJkZXZpY2VOYW1lIiwidHJhbnNsYXRlRGV2aWNlTmFtZSIsImRldmljZSIsImdldEV4aXN0aW5nU2ltIiwicGxhdGZvcm1WZXJzaW9uIiwid2RhIiwiV2ViRHJpdmVyQWdlbnQiLCJpb3NTZGtWZXJzaW9uIiwic2hvd1hjb2RlTG9nIiwieGNvZGVidWlsZCIsInN0YXJ0IiwicmVxdWlyZSIsIm1haW4iLCJtb2R1bGUiLCJhc3luY2lmeSJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9idWlsZC13ZGEuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgV2ViRHJpdmVyQWdlbnQgfSBmcm9tICdhcHBpdW0td2ViZHJpdmVyYWdlbnQnO1xuaW1wb3J0IHsgdHJhbnNsYXRlRGV2aWNlTmFtZSwgZ2V0QW5kQ2hlY2tYY29kZVZlcnNpb24sIGdldEFuZENoZWNrSW9zU2RrVmVyc2lvbiB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgZ2V0RXhpc3RpbmdTaW0gfSBmcm9tICcuL3NpbXVsYXRvci1tYW5hZ2VtZW50JztcbmltcG9ydCB7IGFzeW5jaWZ5IH0gZnJvbSAnYXN5bmNib3gnO1xuXG5jb25zdCBERUZBVUxUX1NJTV9OQU1FID0gJ2lQaG9uZSAxMic7XG5cbi8vIFRPRE86IGFsbG93IHBhc3NpbmcgaW4gYWxsIHRoZSB2YXJpb3VzIGJ1aWxkIHBhcmFtcyBhcyBDTEkgYXJnc1xuYXN5bmMgZnVuY3Rpb24gYnVpbGQgKCkge1xuICBjb25zdCB4Y29kZVZlcnNpb24gPSBhd2FpdCBnZXRBbmRDaGVja1hjb2RlVmVyc2lvbigpO1xuICBjb25zdCBpb3NWZXJzaW9uID0gYXdhaXQgZ2V0QW5kQ2hlY2tJb3NTZGtWZXJzaW9uKCk7XG4gIGNvbnN0IGRldmljZU5hbWUgPSB0cmFuc2xhdGVEZXZpY2VOYW1lKGlvc1ZlcnNpb24sIERFRkFVTFRfU0lNX05BTUUpO1xuICBjb25zdCBkZXZpY2UgPSBhd2FpdCBnZXRFeGlzdGluZ1NpbSh7XG4gICAgcGxhdGZvcm1WZXJzaW9uOiBpb3NWZXJzaW9uLFxuICAgIGRldmljZU5hbWVcbiAgfSk7XG4gIGNvbnN0IHdkYSA9IG5ldyBXZWJEcml2ZXJBZ2VudCh4Y29kZVZlcnNpb24sIHtcbiAgICBpb3NTZGtWZXJzaW9uOiBpb3NWZXJzaW9uLFxuICAgIHBsYXRmb3JtVmVyc2lvbjogaW9zVmVyc2lvbixcbiAgICBzaG93WGNvZGVMb2c6IHRydWUsXG4gICAgZGV2aWNlLFxuICB9KTtcbiAgYXdhaXQgd2RhLnhjb2RlYnVpbGQuc3RhcnQodHJ1ZSk7XG59XG5cbmlmIChyZXF1aXJlLm1haW4gPT09IG1vZHVsZSkge1xuICBhc3luY2lmeShidWlsZCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJ1aWxkO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQSxNQUFNQSxnQkFBZ0IsR0FBRyxXQUFXO0FBR3BDLGVBQWVDLEtBQUssR0FBSTtFQUN0QixNQUFNQyxZQUFZLEdBQUcsTUFBTSxJQUFBQyw4QkFBdUIsR0FBRTtFQUNwRCxNQUFNQyxVQUFVLEdBQUcsTUFBTSxJQUFBQywrQkFBd0IsR0FBRTtFQUNuRCxNQUFNQyxVQUFVLEdBQUcsSUFBQUMsMEJBQW1CLEVBQUNILFVBQVUsRUFBRUosZ0JBQWdCLENBQUM7RUFDcEUsTUFBTVEsTUFBTSxHQUFHLE1BQU0sSUFBQUMsbUNBQWMsRUFBQztJQUNsQ0MsZUFBZSxFQUFFTixVQUFVO0lBQzNCRTtFQUNGLENBQUMsQ0FBQztFQUNGLE1BQU1LLEdBQUcsR0FBRyxJQUFJQyxvQ0FBYyxDQUFDVixZQUFZLEVBQUU7SUFDM0NXLGFBQWEsRUFBRVQsVUFBVTtJQUN6Qk0sZUFBZSxFQUFFTixVQUFVO0lBQzNCVSxZQUFZLEVBQUUsSUFBSTtJQUNsQk47RUFDRixDQUFDLENBQUM7RUFDRixNQUFNRyxHQUFHLENBQUNJLFVBQVUsQ0FBQ0MsS0FBSyxDQUFDLElBQUksQ0FBQztBQUNsQztBQUVBLElBQUlDLE9BQU8sQ0FBQ0MsSUFBSSxLQUFLQyxNQUFNLEVBQUU7RUFDM0IsSUFBQUMsa0JBQVEsRUFBQ25CLEtBQUssQ0FBQztBQUNqQjtBQUFDLGVBRWNBLEtBQUs7QUFBQSJ9
@@ -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,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
+ {"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"}
@@ -21,19 +21,16 @@ const doesSupportKeychainApi = _lodash.default.memoize(async function doesSuppor
21
21
  return false;
22
22
  }
23
23
  });
24
-
25
24
  exports.doesSupportKeychainApi = doesSupportKeychainApi;
26
25
  async function installCertificate(device, payload) {
27
26
  await device.simctl.addRootCertificate(payload, {
28
27
  raw: true
29
28
  });
30
29
  }
31
-
32
30
  async function hasCertificateLegacy(device, payload) {
33
31
  return await (0, _appiumIosSimulator.hasSSLCert)(payload, device.udid);
34
32
  }
35
-
36
33
  async function installCertificateLegacy(device, payload) {
37
34
  await (0, _appiumIosSimulator.installSSLCert)(payload, device.udid);
38
35
  }
39
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJkb2VzU3VwcG9ydEtleWNoYWluQXBpIiwiXyIsIm1lbW9pemUiLCJkZXZpY2UiLCJzaW1jdGwiLCJleGVjIiwiYXJncyIsImUiLCJpbnN0YWxsQ2VydGlmaWNhdGUiLCJwYXlsb2FkIiwiYWRkUm9vdENlcnRpZmljYXRlIiwicmF3IiwiaGFzQ2VydGlmaWNhdGVMZWdhY3kiLCJoYXNTU0xDZXJ0IiwidWRpZCIsImluc3RhbGxDZXJ0aWZpY2F0ZUxlZ2FjeSIsImluc3RhbGxTU0xDZXJ0Il0sInNvdXJjZXMiOlsiLi4vLi4vbGliL2NlcnQtdXRpbHMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IGluc3RhbGxTU0xDZXJ0LCBoYXNTU0xDZXJ0IH0gZnJvbSAnYXBwaXVtLWlvcy1zaW11bGF0b3InO1xuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIFNpbXVsYXRvciBkZXZpY2Ugc3VwcG9ydHMgc2ltY3RsIGtleWNoYWluIEFQSS5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gZGV2aWNlIFNpbXVsYXRvciBpbnN0YW5jZSBjcmVhdGVkIGJ5IGFwcGl1bS1pb3Mtc2ltdWxhdG9yIG1vZHVsZVxuICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgY3VycmVudCBTaW11bGF0b3IgU0RLIHN1cHBvcnRzIGtleWNoYWluIGNvbW1hbmRzLlxuICovXG5jb25zdCBkb2VzU3VwcG9ydEtleWNoYWluQXBpID0gXy5tZW1vaXplKGFzeW5jIGZ1bmN0aW9uIGRvZXNTdXBwb3J0S2V5Y2hhaW5BcGkgKGRldmljZSkge1xuICB0cnkge1xuICAgIGF3YWl0IGRldmljZS5zaW1jdGwuZXhlYygnaGVscCcsIHtcbiAgICAgIGFyZ3M6IFsna2V5Y2hhaW4nXVxuICAgIH0pO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59KTtcblxuLyoqXG4gKiBBZGRzIGEgY2VydGlmaWNhdGUgdG8gdGhlIHRydXN0ZWQgcm9vdCBzdG9yZS5cbiAqIFNpbXVsYXRvciBtdXN0IGJlIGluIEJPT1RFRCBzdGF0ZSBmb3IgdGhpcyBBUEkgdG8gd29yay5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gZGV2aWNlIFNpbXVsYXRvciBpbnN0YW5jZSBjcmVhdGVkIGJ5IGFwcGl1bS1pb3Mtc2ltdWxhdG9yIG1vZHVsZVxuICogQHBhcmFtIHtzdHJpbmd9IHBheWxvYWQgQ2VydGlmaWNhdGUgcGF5bG9hZFxuICovXG5hc3luYyBmdW5jdGlvbiBpbnN0YWxsQ2VydGlmaWNhdGUgKGRldmljZSwgcGF5bG9hZCkge1xuICBhd2FpdCBkZXZpY2Uuc2ltY3RsLmFkZFJvb3RDZXJ0aWZpY2F0ZShwYXlsb2FkLCB7cmF3OiB0cnVlfSk7XG59XG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gY2VydGlmaWNhdGUgaXMgYWxyZWFkeSBpbnN0YWxsZWQuXG4gKiBUaGUgZnVuY3Rpb24gaXMgdXNpbmcgaGFja3kgY2FsbHMgdG8gbWFrZSBjZXJ0aWZpY2F0ZSBzdHVmZiB3b3JraW5nIGZvciBvbGRlciBTREtzLlxuICogU2ltdWxhdG9yIG11c3QgYmUgaW4gU0hVVERPV04gc3RhdGUgZm9yIHRoaXMgQVBJIHRvIHdvcmsuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGRldmljZSBTaW11bGF0b3IgaW5zdGFuY2UgY3JlYXRlZCBieSBhcHBpdW0taW9zLXNpbXVsYXRvciBtb2R1bGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXlsb2FkIENlcnRpZmljYXRlIHBheWxvYWRcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIGNlcnRpZmljYXRlIGlzIGFscmVhZHkgcHJlc2VudCBpbiB0aGUgcm9vdCBzdG9yZS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gaGFzQ2VydGlmaWNhdGVMZWdhY3kgKGRldmljZSwgcGF5bG9hZCkge1xuICByZXR1cm4gYXdhaXQgaGFzU1NMQ2VydChwYXlsb2FkLCBkZXZpY2UudWRpZCk7XG59XG5cbi8qKlxuICogQWRkcyBhIGNlcnRpZmljYXRlIHRvIHRoZSB0cnVzdGVkIHJvb3Qgc3RvcmUuXG4gKiBUaGUgZnVuY3Rpb24gaXMgdXNpbmcgaGFja3kgY2FsbHMgdG8gbWFrZSBjZXJ0aWZpY2F0ZSBzdHVmZiB3b3JraW5nIGZvciBvbGRlciBTREtzLlxuICogU2ltdWxhdG9yIG11c3QgYmUgaW4gU0hVVERPV04gc3RhdGUgZm9yIHRoaXMgQVBJIHRvIHdvcmsuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGRldmljZSBTaW11bGF0b3IgaW5zdGFuY2UgY3JlYXRlZCBieSBhcHBpdW0taW9zLXNpbXVsYXRvciBtb2R1bGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXlsb2FkIENlcnRpZmljYXRlIHBheWxvYWRcbiAqL1xuYXN5bmMgZnVuY3Rpb24gaW5zdGFsbENlcnRpZmljYXRlTGVnYWN5IChkZXZpY2UsIHBheWxvYWQpIHtcbiAgYXdhaXQgaW5zdGFsbFNTTENlcnQocGF5bG9hZCwgZGV2aWNlLnVkaWQpO1xufVxuXG5cbmV4cG9ydCB7XG4gIGRvZXNTdXBwb3J0S2V5Y2hhaW5BcGksIGluc3RhbGxDZXJ0aWZpY2F0ZSwgaW5zdGFsbENlcnRpZmljYXRlTGVnYWN5LFxuICBoYXNDZXJ0aWZpY2F0ZUxlZ2FjeVxufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBUUEsTUFBTUEsc0JBQXNCLEdBQUdDLGVBQUMsQ0FBQ0MsT0FBTyxDQUFDLGVBQWVGLHNCQUFzQixDQUFFRyxNQUFNLEVBQUU7RUFDdEYsSUFBSTtJQUNGLE1BQU1BLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDQyxJQUFJLENBQUMsTUFBTSxFQUFFO01BQy9CQyxJQUFJLEVBQUUsQ0FBQyxVQUFVO0lBQ25CLENBQUMsQ0FBQztJQUNGLE9BQU8sSUFBSTtFQUNiLENBQUMsQ0FBQyxPQUFPQyxDQUFDLEVBQUU7SUFDVixPQUFPLEtBQUs7RUFDZDtBQUNGLENBQUMsQ0FBQzs7QUFBQztBQVNILGVBQWVDLGtCQUFrQixDQUFFTCxNQUFNLEVBQUVNLE9BQU8sRUFBRTtFQUNsRCxNQUFNTixNQUFNLENBQUNDLE1BQU0sQ0FBQ00sa0JBQWtCLENBQUNELE9BQU8sRUFBRTtJQUFDRSxHQUFHLEVBQUU7RUFBSSxDQUFDLENBQUM7QUFDOUQ7O0FBV0EsZUFBZUMsb0JBQW9CLENBQUVULE1BQU0sRUFBRU0sT0FBTyxFQUFFO0VBQ3BELE9BQU8sTUFBTSxJQUFBSSw4QkFBVSxFQUFDSixPQUFPLEVBQUVOLE1BQU0sQ0FBQ1csSUFBSSxDQUFDO0FBQy9DOztBQVVBLGVBQWVDLHdCQUF3QixDQUFFWixNQUFNLEVBQUVNLE9BQU8sRUFBRTtFQUN4RCxNQUFNLElBQUFPLGtDQUFjLEVBQUNQLE9BQU8sRUFBRU4sTUFBTSxDQUFDVyxJQUFJLENBQUM7QUFDNUMifQ==
36
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJkb2VzU3VwcG9ydEtleWNoYWluQXBpIiwiXyIsIm1lbW9pemUiLCJkZXZpY2UiLCJzaW1jdGwiLCJleGVjIiwiYXJncyIsImUiLCJpbnN0YWxsQ2VydGlmaWNhdGUiLCJwYXlsb2FkIiwiYWRkUm9vdENlcnRpZmljYXRlIiwicmF3IiwiaGFzQ2VydGlmaWNhdGVMZWdhY3kiLCJoYXNTU0xDZXJ0IiwidWRpZCIsImluc3RhbGxDZXJ0aWZpY2F0ZUxlZ2FjeSIsImluc3RhbGxTU0xDZXJ0Il0sInNvdXJjZXMiOlsiLi4vLi4vbGliL2NlcnQtdXRpbHMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IGluc3RhbGxTU0xDZXJ0LCBoYXNTU0xDZXJ0IH0gZnJvbSAnYXBwaXVtLWlvcy1zaW11bGF0b3InO1xuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIFNpbXVsYXRvciBkZXZpY2Ugc3VwcG9ydHMgc2ltY3RsIGtleWNoYWluIEFQSS5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gZGV2aWNlIFNpbXVsYXRvciBpbnN0YW5jZSBjcmVhdGVkIGJ5IGFwcGl1bS1pb3Mtc2ltdWxhdG9yIG1vZHVsZVxuICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgY3VycmVudCBTaW11bGF0b3IgU0RLIHN1cHBvcnRzIGtleWNoYWluIGNvbW1hbmRzLlxuICovXG5jb25zdCBkb2VzU3VwcG9ydEtleWNoYWluQXBpID0gXy5tZW1vaXplKGFzeW5jIGZ1bmN0aW9uIGRvZXNTdXBwb3J0S2V5Y2hhaW5BcGkgKGRldmljZSkge1xuICB0cnkge1xuICAgIGF3YWl0IGRldmljZS5zaW1jdGwuZXhlYygnaGVscCcsIHtcbiAgICAgIGFyZ3M6IFsna2V5Y2hhaW4nXVxuICAgIH0pO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59KTtcblxuLyoqXG4gKiBBZGRzIGEgY2VydGlmaWNhdGUgdG8gdGhlIHRydXN0ZWQgcm9vdCBzdG9yZS5cbiAqIFNpbXVsYXRvciBtdXN0IGJlIGluIEJPT1RFRCBzdGF0ZSBmb3IgdGhpcyBBUEkgdG8gd29yay5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gZGV2aWNlIFNpbXVsYXRvciBpbnN0YW5jZSBjcmVhdGVkIGJ5IGFwcGl1bS1pb3Mtc2ltdWxhdG9yIG1vZHVsZVxuICogQHBhcmFtIHtzdHJpbmd9IHBheWxvYWQgQ2VydGlmaWNhdGUgcGF5bG9hZFxuICovXG5hc3luYyBmdW5jdGlvbiBpbnN0YWxsQ2VydGlmaWNhdGUgKGRldmljZSwgcGF5bG9hZCkge1xuICBhd2FpdCBkZXZpY2Uuc2ltY3RsLmFkZFJvb3RDZXJ0aWZpY2F0ZShwYXlsb2FkLCB7cmF3OiB0cnVlfSk7XG59XG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gY2VydGlmaWNhdGUgaXMgYWxyZWFkeSBpbnN0YWxsZWQuXG4gKiBUaGUgZnVuY3Rpb24gaXMgdXNpbmcgaGFja3kgY2FsbHMgdG8gbWFrZSBjZXJ0aWZpY2F0ZSBzdHVmZiB3b3JraW5nIGZvciBvbGRlciBTREtzLlxuICogU2ltdWxhdG9yIG11c3QgYmUgaW4gU0hVVERPV04gc3RhdGUgZm9yIHRoaXMgQVBJIHRvIHdvcmsuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGRldmljZSBTaW11bGF0b3IgaW5zdGFuY2UgY3JlYXRlZCBieSBhcHBpdW0taW9zLXNpbXVsYXRvciBtb2R1bGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXlsb2FkIENlcnRpZmljYXRlIHBheWxvYWRcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIGNlcnRpZmljYXRlIGlzIGFscmVhZHkgcHJlc2VudCBpbiB0aGUgcm9vdCBzdG9yZS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gaGFzQ2VydGlmaWNhdGVMZWdhY3kgKGRldmljZSwgcGF5bG9hZCkge1xuICByZXR1cm4gYXdhaXQgaGFzU1NMQ2VydChwYXlsb2FkLCBkZXZpY2UudWRpZCk7XG59XG5cbi8qKlxuICogQWRkcyBhIGNlcnRpZmljYXRlIHRvIHRoZSB0cnVzdGVkIHJvb3Qgc3RvcmUuXG4gKiBUaGUgZnVuY3Rpb24gaXMgdXNpbmcgaGFja3kgY2FsbHMgdG8gbWFrZSBjZXJ0aWZpY2F0ZSBzdHVmZiB3b3JraW5nIGZvciBvbGRlciBTREtzLlxuICogU2ltdWxhdG9yIG11c3QgYmUgaW4gU0hVVERPV04gc3RhdGUgZm9yIHRoaXMgQVBJIHRvIHdvcmsuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGRldmljZSBTaW11bGF0b3IgaW5zdGFuY2UgY3JlYXRlZCBieSBhcHBpdW0taW9zLXNpbXVsYXRvciBtb2R1bGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXlsb2FkIENlcnRpZmljYXRlIHBheWxvYWRcbiAqL1xuYXN5bmMgZnVuY3Rpb24gaW5zdGFsbENlcnRpZmljYXRlTGVnYWN5IChkZXZpY2UsIHBheWxvYWQpIHtcbiAgYXdhaXQgaW5zdGFsbFNTTENlcnQocGF5bG9hZCwgZGV2aWNlLnVkaWQpO1xufVxuXG5cbmV4cG9ydCB7XG4gIGRvZXNTdXBwb3J0S2V5Y2hhaW5BcGksIGluc3RhbGxDZXJ0aWZpY2F0ZSwgaW5zdGFsbENlcnRpZmljYXRlTGVnYWN5LFxuICBoYXNDZXJ0aWZpY2F0ZUxlZ2FjeVxufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBUUEsTUFBTUEsc0JBQXNCLEdBQUdDLGVBQUMsQ0FBQ0MsT0FBTyxDQUFDLGVBQWVGLHNCQUFzQixDQUFFRyxNQUFNLEVBQUU7RUFDdEYsSUFBSTtJQUNGLE1BQU1BLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDQyxJQUFJLENBQUMsTUFBTSxFQUFFO01BQy9CQyxJQUFJLEVBQUUsQ0FBQyxVQUFVO0lBQ25CLENBQUMsQ0FBQztJQUNGLE9BQU8sSUFBSTtFQUNiLENBQUMsQ0FBQyxPQUFPQyxDQUFDLEVBQUU7SUFDVixPQUFPLEtBQUs7RUFDZDtBQUNGLENBQUMsQ0FBQztBQUFDO0FBU0gsZUFBZUMsa0JBQWtCLENBQUVMLE1BQU0sRUFBRU0sT0FBTyxFQUFFO0VBQ2xELE1BQU1OLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDTSxrQkFBa0IsQ0FBQ0QsT0FBTyxFQUFFO0lBQUNFLEdBQUcsRUFBRTtFQUFJLENBQUMsQ0FBQztBQUM5RDtBQVdBLGVBQWVDLG9CQUFvQixDQUFFVCxNQUFNLEVBQUVNLE9BQU8sRUFBRTtFQUNwRCxPQUFPLE1BQU0sSUFBQUksOEJBQVUsRUFBQ0osT0FBTyxFQUFFTixNQUFNLENBQUNXLElBQUksQ0FBQztBQUMvQztBQVVBLGVBQWVDLHdCQUF3QixDQUFFWixNQUFNLEVBQUVNLE9BQU8sRUFBRTtFQUN4RCxNQUFNLElBQUFPLGtDQUFjLEVBQUNQLE9BQU8sRUFBRU4sTUFBTSxDQUFDVyxJQUFJLENBQUM7QUFDNUMifQ==
@@ -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,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"}
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"}
@@ -7,7 +7,6 @@ exports.default = exports.commands = void 0;
7
7
  require("source-map-support/register");
8
8
  const extensions = {},
9
9
  commands = {};
10
-
11
10
  exports.commands = commands;
12
11
  commands.mobileGetActiveAppInfo = async function mobileGetActiveAppInfo() {
13
12
  return await this.proxyCommand('/wda/activeAppInfo', 'GET');
@@ -15,4 +14,4 @@ commands.mobileGetActiveAppInfo = async function mobileGetActiveAppInfo() {
15
14
  Object.assign(extensions, commands);
16
15
  var _default = extensions;
17
16
  exports.default = _default;
18
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJleHRlbnNpb25zIiwiY29tbWFuZHMiLCJtb2JpbGVHZXRBY3RpdmVBcHBJbmZvIiwicHJveHlDb21tYW5kIiwiT2JqZWN0IiwiYXNzaWduIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2NvbW1hbmRzL2FjdGl2ZUFwcEluZm8uanMiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgZXh0ZW5zaW9ucyA9IHt9LCBjb21tYW5kcyA9IHt9O1xuXG4vKipcbiAqIFJldHVybnMgQWN0aXZlQXBwIGluZm8uXG4gKlxuICogQHJldHVybnMge09iamVjdH0gVGhlIHJlc3BvbnNlIG9mIGAvd2RhL2FjdGl2ZUFwcEluZm8nYFxuICogQHRocm93cyB7RXJyb3J9IGlmIGFuIGVycm9yIHJhaXNlZCBieSBjb21tYW5kXG4gKi9cbmNvbW1hbmRzLm1vYmlsZUdldEFjdGl2ZUFwcEluZm8gPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVHZXRBY3RpdmVBcHBJbmZvICgpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKCcvd2RhL2FjdGl2ZUFwcEluZm8nLCAnR0VUJyk7XG59O1xuXG5PYmplY3QuYXNzaWduKGV4dGVuc2lvbnMsIGNvbW1hbmRzKTtcbmV4cG9ydCB7IGNvbW1hbmRzIH07XG5leHBvcnQgZGVmYXVsdCBleHRlbnNpb25zO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUEsTUFBTUEsVUFBVSxHQUFHLENBQUMsQ0FBQztFQUFFQyxRQUFRLEdBQUcsQ0FBQyxDQUFDOztBQUFDO0FBUXJDQSxRQUFRLENBQUNDLHNCQUFzQixHQUFHLGVBQWVBLHNCQUFzQixHQUFJO0VBQ3pFLE9BQU8sTUFBTSxJQUFJLENBQUNDLFlBQVksQ0FBQyxvQkFBb0IsRUFBRSxLQUFLLENBQUM7QUFDN0QsQ0FBQztBQUVEQyxNQUFNLENBQUNDLE1BQU0sQ0FBQ0wsVUFBVSxFQUFFQyxRQUFRLENBQUM7QUFBQyxlQUVyQkQsVUFBVTtBQUFBIn0=
17
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJleHRlbnNpb25zIiwiY29tbWFuZHMiLCJtb2JpbGVHZXRBY3RpdmVBcHBJbmZvIiwicHJveHlDb21tYW5kIiwiT2JqZWN0IiwiYXNzaWduIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2NvbW1hbmRzL2FjdGl2ZUFwcEluZm8uanMiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgZXh0ZW5zaW9ucyA9IHt9LCBjb21tYW5kcyA9IHt9O1xuXG4vKipcbiAqIFJldHVybnMgQWN0aXZlQXBwIGluZm8uXG4gKlxuICogQHJldHVybnMge09iamVjdH0gVGhlIHJlc3BvbnNlIG9mIGAvd2RhL2FjdGl2ZUFwcEluZm8nYFxuICogQHRocm93cyB7RXJyb3J9IGlmIGFuIGVycm9yIHJhaXNlZCBieSBjb21tYW5kXG4gKi9cbmNvbW1hbmRzLm1vYmlsZUdldEFjdGl2ZUFwcEluZm8gPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVHZXRBY3RpdmVBcHBJbmZvICgpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKCcvd2RhL2FjdGl2ZUFwcEluZm8nLCAnR0VUJyk7XG59O1xuXG5PYmplY3QuYXNzaWduKGV4dGVuc2lvbnMsIGNvbW1hbmRzKTtcbmV4cG9ydCB7IGNvbW1hbmRzIH07XG5leHBvcnQgZGVmYXVsdCBleHRlbnNpb25zO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUEsTUFBTUEsVUFBVSxHQUFHLENBQUMsQ0FBQztFQUFFQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBQUM7QUFRckNBLFFBQVEsQ0FBQ0Msc0JBQXNCLEdBQUcsZUFBZUEsc0JBQXNCLEdBQUk7RUFDekUsT0FBTyxNQUFNLElBQUksQ0FBQ0MsWUFBWSxDQUFDLG9CQUFvQixFQUFFLEtBQUssQ0FBQztBQUM3RCxDQUFDO0FBRURDLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDTCxVQUFVLEVBQUVDLFFBQVEsQ0FBQztBQUFDLGVBRXJCRCxVQUFVO0FBQUEifQ==
@@ -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,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"}
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"}
@@ -71,7 +71,6 @@ commands.mobileTerminateApp = async function mobileTerminateApp(opts = {}) {
71
71
  commands.mobileActivateApp = async function mobileActivateApp(opts = {}) {
72
72
  return await this.proxyCommand('/wda/apps/activate', 'POST', requireOptions(opts, ['bundleId']));
73
73
  };
74
-
75
74
  commands.mobileKillApp = async function mobileKillApp(opts = {}) {
76
75
  if (!this.isRealDevice()) {
77
76
  throw new _driver.errors.UnsupportedOperationError('A real device is required');
@@ -81,7 +80,6 @@ commands.mobileKillApp = async function mobileKillApp(opts = {}) {
81
80
  } = requireOptions(opts, ['bundleId']);
82
81
  return await this.opts.device.terminateApp(bundleId);
83
82
  };
84
-
85
83
  commands.mobileQueryAppState = async function mobileQueryAppState(opts = {}) {
86
84
  return await this.proxyCommand('/wda/apps/state', 'POST', requireOptions(opts, ['bundleId']));
87
85
  };
@@ -111,7 +109,6 @@ commands.queryAppState = async function queryAppState(bundleId) {
111
109
  bundleId
112
110
  });
113
111
  };
114
-
115
112
  commands.mobileListApps = async function mobileListApps(opts = {}) {
116
113
  if (!this.isRealDevice()) {
117
114
  throw new _driver.errors.NotImplementedError(`This extension is only supported on real devices`);
@@ -130,4 +127,4 @@ commands.mobileListApps = async function mobileListApps(opts = {}) {
130
127
  };
131
128
  var _default = commands;
132
129
  exports.default = _default;
133
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb21tYW5kcyIsInJlcXVpcmVPcHRpb25zIiwib3B0cyIsInJlcUtleXMiLCJrZXkiLCJfIiwiaXNTdHJpbmciLCJpc0VtcHR5IiwiZXJyb3JzIiwiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCJtb2JpbGVJbnN0YWxsQXBwIiwiYXBwIiwidGltZW91dE1zIiwic3RyYXRlZ3kiLCJzcmNBcHBQYXRoIiwiaGVscGVycyIsImNvbmZpZ3VyZUFwcCIsImxvZyIsImluZm8iLCJpc1JlYWxEZXZpY2UiLCJkZXZpY2UiLCJ1ZGlkIiwiZnMiLCJleGlzdHMiLCJlcnJvckFuZFRocm93IiwiaW5zdGFsbEFwcCIsImFwcFB1c2hUaW1lb3V0IiwiYXBwSW5zdGFsbFN0cmF0ZWd5IiwibW9iaWxlSXNBcHBJbnN0YWxsZWQiLCJidW5kbGVJZCIsImluc3RhbGxlZCIsImlzQXBwSW5zdGFsbGVkIiwibW9iaWxlUmVtb3ZlQXBwIiwicmVtb3ZlQXBwIiwiZXJyIiwid2FybiIsIm1lc3NhZ2UiLCJtb2JpbGVMYXVuY2hBcHAiLCJsYXVuY2hPcHRpb25zIiwiYXJndW1lbnRzIiwiaXNBcnJheSIsImVudmlyb25tZW50IiwicHJveHlDb21tYW5kIiwibW9iaWxlVGVybWluYXRlQXBwIiwibW9iaWxlQWN0aXZhdGVBcHAiLCJtb2JpbGVLaWxsQXBwIiwiVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvciIsInRlcm1pbmF0ZUFwcCIsIm1vYmlsZVF1ZXJ5QXBwU3RhdGUiLCJhcHBQYXRoIiwiaXNQbGFpbk9iamVjdCIsImFjdGl2YXRlQXBwIiwiT2JqZWN0IiwiYXNzaWduIiwicXVlcnlBcHBTdGF0ZSIsIm1vYmlsZUxpc3RBcHBzIiwiTm90SW1wbGVtZW50ZWRFcnJvciIsImFwcGxpY2F0aW9uVHlwZSIsInNlcnZpY2UiLCJzZXJ2aWNlcyIsInN0YXJ0SW5zdGFsbGF0aW9uUHJveHlTZXJ2aWNlIiwibGlzdEFwcGxpY2F0aW9ucyIsImNsb3NlIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2NvbW1hbmRzL2FwcC1tYW5hZ2VtZW50LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBmcyB9IGZyb20gJ2FwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB7IGVycm9ycyB9IGZyb20gJ2FwcGl1bS9kcml2ZXInO1xuaW1wb3J0IHsgc2VydmljZXMgfSBmcm9tICdhcHBpdW0taW9zLWRldmljZSc7XG5cbmNvbnN0IGNvbW1hbmRzID0ge307XG5cbmZ1bmN0aW9uIHJlcXVpcmVPcHRpb25zIChvcHRzID0ge30sIHJlcUtleXMgPSBbXSkge1xuICBmb3IgKGNvbnN0IGtleSBvZiByZXFLZXlzKSB7XG4gICAgaWYgKCFfLmlzU3RyaW5nKG9wdHNba2V5XSkgfHwgXy5pc0VtcHR5KG9wdHNba2V5XSkpIHtcbiAgICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoXG4gICAgICAgIGAnJHtrZXl9JyBpcyBleHBlY3RlZCB0byBiZSBhIHZhbGlkIHN0cmluZy4gJyR7b3B0c1trZXldfScgaXMgZ2l2ZW4gaW5zdGVhZGBcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHJldHVybiBvcHRzO1xufVxuXG5jb21tYW5kcy5tb2JpbGVJbnN0YWxsQXBwID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlSW5zdGFsbEFwcCAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHsgYXBwLCB0aW1lb3V0TXMsIHN0cmF0ZWd5IH0gPSByZXF1aXJlT3B0aW9ucyhvcHRzLCBbJ2FwcCddKTtcbiAgY29uc3Qgc3JjQXBwUGF0aCA9IGF3YWl0IHRoaXMuaGVscGVycy5jb25maWd1cmVBcHAoYXBwLCAnLmFwcCcpO1xuICB0aGlzLmxvZy5pbmZvKGBJbnN0YWxsaW5nICcke3NyY0FwcFBhdGh9JyB0byB0aGUgJHt0aGlzLmlzUmVhbERldmljZSgpID8gJ3JlYWwgZGV2aWNlJyA6ICdTaW11bGF0b3InfSBgICtcbiAgICBgd2l0aCBVRElEICcke3RoaXMub3B0cy5kZXZpY2UudWRpZH0nYCk7XG4gIGlmICghYXdhaXQgZnMuZXhpc3RzKHNyY0FwcFBhdGgpKSB7XG4gICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgVGhlIGFwcGxpY2F0aW9uIGF0ICcke3NyY0FwcFBhdGh9JyBkb2VzIG5vdCBleGlzdCBvciBpcyBub3QgYWNjZXNzaWJsZWApO1xuICB9XG4gIGF3YWl0IHRoaXMub3B0cy5kZXZpY2UuaW5zdGFsbEFwcChcbiAgICBzcmNBcHBQYXRoLCB0aW1lb3V0TXMgPz8gdGhpcy5vcHRzLmFwcFB1c2hUaW1lb3V0LCBzdHJhdGVneSA/PyB0aGlzLm9wdHMuYXBwSW5zdGFsbFN0cmF0ZWd5XG4gICk7XG4gIHRoaXMubG9nLmluZm8oYEluc3RhbGxhdGlvbiBvZiAnJHtzcmNBcHBQYXRofScgc3VjY2VlZGVkYCk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVJc0FwcEluc3RhbGxlZCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUlzQXBwSW5zdGFsbGVkIChvcHRzID0ge30pIHtcbiAgY29uc3Qge2J1bmRsZUlkfSA9IHJlcXVpcmVPcHRpb25zKG9wdHMsIFsnYnVuZGxlSWQnXSk7XG4gIGNvbnN0IGluc3RhbGxlZCA9IGF3YWl0IHRoaXMub3B0cy5kZXZpY2UuaXNBcHBJbnN0YWxsZWQoYnVuZGxlSWQpO1xuICB0aGlzLmxvZy5pbmZvKGBBcHAgJyR7YnVuZGxlSWR9JyBpcyR7aW5zdGFsbGVkID8gJycgOiAnIG5vdCd9IGluc3RhbGxlZGApO1xuICByZXR1cm4gaW5zdGFsbGVkO1xufTtcblxuY29tbWFuZHMubW9iaWxlUmVtb3ZlQXBwID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlUmVtb3ZlQXBwIChvcHRzID0ge30pIHtcbiAgY29uc3Qge2J1bmRsZUlkfSA9IHJlcXVpcmVPcHRpb25zKG9wdHMsIFsnYnVuZGxlSWQnXSk7XG4gIHRoaXMubG9nLmluZm8oYFVuaW5zdGFsbGluZyB0aGUgYXBwbGljYXRpb24gd2l0aCBidW5kbGUgaWRlbnRpZmllciAnJHtidW5kbGVJZH0nIGAgK1xuICAgIGBmcm9tIHRoZSAke3RoaXMuaXNSZWFsRGV2aWNlKCkgPyAncmVhbCBkZXZpY2UnIDogJ1NpbXVsYXRvcid9IHdpdGggVURJRCAnJHt0aGlzLm9wdHMuZGV2aWNlLnVkaWR9J2ApO1xuICB0cnkge1xuICAgIGF3YWl0IHRoaXMub3B0cy5kZXZpY2UucmVtb3ZlQXBwKGJ1bmRsZUlkKTtcbiAgICB0aGlzLmxvZy5pbmZvKGBSZW1vdmFsIG9mICcke2J1bmRsZUlkfScgc3VjY2VlZGVkYCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRoaXMubG9nLndhcm4oYENhbm5vdCByZW1vdmUgJyR7YnVuZGxlSWR9Jy4gT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuXG5jb21tYW5kcy5tb2JpbGVMYXVuY2hBcHAgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVMYXVuY2hBcHAgKG9wdHMgPSB7fSkge1xuICBjb25zdCBsYXVuY2hPcHRpb25zID0gcmVxdWlyZU9wdGlvbnMob3B0cywgWydidW5kbGVJZCddKTtcbiAgaWYgKG9wdHMuYXJndW1lbnRzKSB7XG4gICAgbGF1bmNoT3B0aW9ucy5hcmd1bWVudHMgPSBfLmlzQXJyYXkob3B0cy5hcmd1bWVudHMpID8gb3B0cy5hcmd1bWVudHMgOiBbb3B0cy5hcmd1bWVudHNdO1xuICB9XG4gIGlmIChvcHRzLmVudmlyb25tZW50KSB7XG4gICAgbGF1bmNoT3B0aW9ucy5lbnZpcm9ubWVudCA9IG9wdHMuZW52aXJvbm1lbnQ7XG4gIH1cbiAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKCcvd2RhL2FwcHMvbGF1bmNoJywgJ1BPU1QnLCBsYXVuY2hPcHRpb25zKTtcbn07XG5cbmNvbW1hbmRzLm1vYmlsZVRlcm1pbmF0ZUFwcCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVRlcm1pbmF0ZUFwcCAob3B0cyA9IHt9KSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnL3dkYS9hcHBzL3Rlcm1pbmF0ZScsICdQT1NUJywgcmVxdWlyZU9wdGlvbnMob3B0cywgWydidW5kbGVJZCddKSk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVBY3RpdmF0ZUFwcCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUFjdGl2YXRlQXBwIChvcHRzID0ge30pIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKCcvd2RhL2FwcHMvYWN0aXZhdGUnLCAnUE9TVCcsIHJlcXVpcmVPcHRpb25zKG9wdHMsIFsnYnVuZGxlSWQnXSkpO1xufTtcblxuLyoqXG4gKiBLaWxsIHRoZSBnaXZlbiBidW5kbGUgaWQgcHJvY2VzcyB2aWEgaW5zdHJ1bWVudHMgc2VydmljZS5cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9ZdWVDaGVuLUMvcHktaW9zLWRldmljZS9ibG9iLzUxZjQ2ODNjNWMzYzM4NWEwMTU4NThhZGEwN2E1ZjFjNjJkM2NmNTcvaW9zX2RldmljZS9jbGkvYmFzZS5weSNMMjIwXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBPcHRpb25zIHNldCwgd2hpY2ggbXVzdCBjb250YWluIGBidW5kbGVJZGAgcHJvcGVydHlcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIHRydWUgaWYgdGhlIGJ1bmRsZSBpZCBwcm9jZXNzIHdhcyBraWxsZWQuIE90aGVyd2lzZSBmYWxzZS5cbiAqL1xuY29tbWFuZHMubW9iaWxlS2lsbEFwcCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUtpbGxBcHAgKG9wdHMgPSB7fSkge1xuICBpZiAoIXRoaXMuaXNSZWFsRGV2aWNlKCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLlVuc3VwcG9ydGVkT3BlcmF0aW9uRXJyb3IoJ0EgcmVhbCBkZXZpY2UgaXMgcmVxdWlyZWQnKTtcbiAgfVxuXG4gIGNvbnN0IHtidW5kbGVJZH0gPSByZXF1aXJlT3B0aW9ucyhvcHRzLCBbJ2J1bmRsZUlkJ10pO1xuICByZXR1cm4gYXdhaXQgdGhpcy5vcHRzLmRldmljZS50ZXJtaW5hdGVBcHAoYnVuZGxlSWQpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBjdXJyZW50IGFwcGxpY2F0aW9uIHN0YXRlXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBPcHRpb25zIHNldCwgd2hpY2ggbXVzdCBjb250YWluIGBidW5kbGVJZGAgcHJvcGVydHlcbiAqIEByZXR1cm5zIHtudW1iZXJ9IFRoZSBhY3R1YWwgYXBwbGljYXRpb24gc3RhdGUgY29kZS4gU2VlXG4gKiBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi94Y3Rlc3QveGN1aWFwcGxpY2F0aW9uc3RhdGU/bGFuZ3VhZ2U9b2JqY1xuICogdG8gZ2V0IHRoZSBsaXN0IG9mIHBvc3NpYmxlIHZhbHVlcy5cbiAqL1xuY29tbWFuZHMubW9iaWxlUXVlcnlBcHBTdGF0ZSA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVF1ZXJ5QXBwU3RhdGUgKG9wdHMgPSB7fSkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoJy93ZGEvYXBwcy9zdGF0ZScsICdQT1NUJywgcmVxdWlyZU9wdGlvbnMob3B0cywgWydidW5kbGVJZCddKSk7XG59O1xuXG5jb21tYW5kcy5pbnN0YWxsQXBwID0gYXN5bmMgZnVuY3Rpb24gaW5zdGFsbEFwcCAoYXBwUGF0aCwgb3B0cyA9IHt9KSB7XG4gIGF3YWl0IHRoaXMubW9iaWxlSW5zdGFsbEFwcCh7XG4gICAgLi4uKF8uaXNQbGFpbk9iamVjdChvcHRzKSA/IG9wdHMgOiB7fSksXG4gICAgYXBwOiBhcHBQYXRoLFxuICB9KTtcbn07XG5cbmNvbW1hbmRzLmFjdGl2YXRlQXBwID0gYXN5bmMgZnVuY3Rpb24gYWN0aXZhdGVBcHAgKGJ1bmRsZUlkLCBvcHRzID0ge30pIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMubW9iaWxlTGF1bmNoQXBwKE9iamVjdC5hc3NpZ24oe30sIG9wdHMsIHtidW5kbGVJZH0pKTtcbn07XG5cbmNvbW1hbmRzLmlzQXBwSW5zdGFsbGVkID0gYXN5bmMgZnVuY3Rpb24gaXNBcHBJbnN0YWxsZWQgKGJ1bmRsZUlkKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLm1vYmlsZUlzQXBwSW5zdGFsbGVkKHtidW5kbGVJZH0pO1xufTtcblxuY29tbWFuZHMudGVybWluYXRlQXBwID0gYXN5bmMgZnVuY3Rpb24gdGVybWluYXRlQXBwIChidW5kbGVJZCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5tb2JpbGVUZXJtaW5hdGVBcHAoe2J1bmRsZUlkfSk7XG59O1xuXG5jb21tYW5kcy5xdWVyeUFwcFN0YXRlID0gYXN5bmMgZnVuY3Rpb24gcXVlcnlBcHBTdGF0ZSAoYnVuZGxlSWQpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMubW9iaWxlUXVlcnlBcHBTdGF0ZSh7YnVuZGxlSWR9KTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gTGlzdEFwcHNPcHRpb25zXG4gKiBAcHJvcGVydHkgeydTeXN0ZW0nfCdVc2VyJ30gYXBwbGljYXRpb25UeXBlIFtVc2VyXSBUaGUgdHlwZSBvZiBhcHBsaWNhdGlvbnMgdG8gbGlzdFxuICovXG5cbi8qKlxuICogTGlzdCBhcHBsaWNhdGlvbnMgaW5zdGFsbGVkIG9uIHRoZSByZWFsIGRldmljZSB1bmRlciB0ZXN0XG4gKlxuICogQHBhcmFtIHtMaXN0QXBwc09wdGlvbnN9IG9wdHNcbiAqIEByZXR1cm5zIHtBcnJheTxPYmplY3Q+fSBBIGxpc3Qgb2YgYXBwcywgd2hlcmUgZWFjaCBpdGVtIGlzIGEgbWFwIHdoZXJlIGtleXMgYXJlXG4gKiBidW5kbGUgaWRlbnRpZmllcnMgYW5kIHZhbHVlcyBhcmUgbWFwcyBvZiBwbGF0Zm9ybS1zcGVjaWZpYyBhcHAgcHJvcGVydGllcy5cbiAqL1xuY29tbWFuZHMubW9iaWxlTGlzdEFwcHMgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVMaXN0QXBwcyAob3B0cyA9IHt9KSB7XG4gIGlmICghdGhpcy5pc1JlYWxEZXZpY2UoKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm90SW1wbGVtZW50ZWRFcnJvcihgVGhpcyBleHRlbnNpb24gaXMgb25seSBzdXBwb3J0ZWQgb24gcmVhbCBkZXZpY2VzYCk7XG4gIH1cblxuICBjb25zdCB7XG4gICAgYXBwbGljYXRpb25UeXBlID0gJ1VzZXInLFxuICB9ID0gb3B0cztcbiAgY29uc3Qgc2VydmljZSA9IGF3YWl0IHNlcnZpY2VzLnN0YXJ0SW5zdGFsbGF0aW9uUHJveHlTZXJ2aWNlKHRoaXMub3B0cy5kZXZpY2UudWRpZCk7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IHNlcnZpY2UubGlzdEFwcGxpY2F0aW9ucyh7YXBwbGljYXRpb25UeXBlfSk7XG4gIH0gZmluYWxseSB7XG4gICAgc2VydmljZS5jbG9zZSgpO1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjb21tYW5kcztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBLE1BQU1BLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFFbkIsU0FBU0MsY0FBYyxDQUFFQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUVDLE9BQU8sR0FBRyxFQUFFLEVBQUU7RUFDaEQsS0FBSyxNQUFNQyxHQUFHLElBQUlELE9BQU8sRUFBRTtJQUN6QixJQUFJLENBQUNFLGVBQUMsQ0FBQ0MsUUFBUSxDQUFDSixJQUFJLENBQUNFLEdBQUcsQ0FBQyxDQUFDLElBQUlDLGVBQUMsQ0FBQ0UsT0FBTyxDQUFDTCxJQUFJLENBQUNFLEdBQUcsQ0FBQyxDQUFDLEVBQUU7TUFDbEQsTUFBTSxJQUFJSSxjQUFNLENBQUNDLG9CQUFvQixDQUNsQyxJQUFHTCxHQUFJLHdDQUF1Q0YsSUFBSSxDQUFDRSxHQUFHLENBQUUsb0JBQW1CLENBQzdFO0lBQ0g7RUFDRjtFQUNBLE9BQU9GLElBQUk7QUFDYjtBQUVBRixRQUFRLENBQUNVLGdCQUFnQixHQUFHLGVBQWVBLGdCQUFnQixDQUFFUixJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUU7RUFDdEUsTUFBTTtJ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
130
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb21tYW5kcyIsInJlcXVpcmVPcHRpb25zIiwib3B0cyIsInJlcUtleXMiLCJrZXkiLCJfIiwiaXNTdHJpbmciLCJpc0VtcHR5IiwiZXJyb3JzIiwiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCJtb2JpbGVJbnN0YWxsQXBwIiwiYXBwIiwidGltZW91dE1zIiwic3RyYXRlZ3kiLCJzcmNBcHBQYXRoIiwiaGVscGVycyIsImNvbmZpZ3VyZUFwcCIsImxvZyIsImluZm8iLCJpc1JlYWxEZXZpY2UiLCJkZXZpY2UiLCJ1ZGlkIiwiZnMiLCJleGlzdHMiLCJlcnJvckFuZFRocm93IiwiaW5zdGFsbEFwcCIsImFwcFB1c2hUaW1lb3V0IiwiYXBwSW5zdGFsbFN0cmF0ZWd5IiwibW9iaWxlSXNBcHBJbnN0YWxsZWQiLCJidW5kbGVJZCIsImluc3RhbGxlZCIsImlzQXBwSW5zdGFsbGVkIiwibW9iaWxlUmVtb3ZlQXBwIiwicmVtb3ZlQXBwIiwiZXJyIiwid2FybiIsIm1lc3NhZ2UiLCJtb2JpbGVMYXVuY2hBcHAiLCJsYXVuY2hPcHRpb25zIiwiYXJndW1lbnRzIiwiaXNBcnJheSIsImVudmlyb25tZW50IiwicHJveHlDb21tYW5kIiwibW9iaWxlVGVybWluYXRlQXBwIiwibW9iaWxlQWN0aXZhdGVBcHAiLCJtb2JpbGVLaWxsQXBwIiwiVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvciIsInRlcm1pbmF0ZUFwcCIsIm1vYmlsZVF1ZXJ5QXBwU3RhdGUiLCJhcHBQYXRoIiwiaXNQbGFpbk9iamVjdCIsImFjdGl2YXRlQXBwIiwiT2JqZWN0IiwiYXNzaWduIiwicXVlcnlBcHBTdGF0ZSIsIm1vYmlsZUxpc3RBcHBzIiwiTm90SW1wbGVtZW50ZWRFcnJvciIsImFwcGxpY2F0aW9uVHlwZSIsInNlcnZpY2UiLCJzZXJ2aWNlcyIsInN0YXJ0SW5zdGFsbGF0aW9uUHJveHlTZXJ2aWNlIiwibGlzdEFwcGxpY2F0aW9ucyIsImNsb3NlIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2NvbW1hbmRzL2FwcC1tYW5hZ2VtZW50LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBmcyB9IGZyb20gJ2FwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB7IGVycm9ycyB9IGZyb20gJ2FwcGl1bS9kcml2ZXInO1xuaW1wb3J0IHsgc2VydmljZXMgfSBmcm9tICdhcHBpdW0taW9zLWRldmljZSc7XG5cbmNvbnN0IGNvbW1hbmRzID0ge307XG5cbmZ1bmN0aW9uIHJlcXVpcmVPcHRpb25zIChvcHRzID0ge30sIHJlcUtleXMgPSBbXSkge1xuICBmb3IgKGNvbnN0IGtleSBvZiByZXFLZXlzKSB7XG4gICAgaWYgKCFfLmlzU3RyaW5nKG9wdHNba2V5XSkgfHwgXy5pc0VtcHR5KG9wdHNba2V5XSkpIHtcbiAgICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoXG4gICAgICAgIGAnJHtrZXl9JyBpcyBleHBlY3RlZCB0byBiZSBhIHZhbGlkIHN0cmluZy4gJyR7b3B0c1trZXldfScgaXMgZ2l2ZW4gaW5zdGVhZGBcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHJldHVybiBvcHRzO1xufVxuXG5jb21tYW5kcy5tb2JpbGVJbnN0YWxsQXBwID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlSW5zdGFsbEFwcCAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHsgYXBwLCB0aW1lb3V0TXMsIHN0cmF0ZWd5IH0gPSByZXF1aXJlT3B0aW9ucyhvcHRzLCBbJ2FwcCddKTtcbiAgY29uc3Qgc3JjQXBwUGF0aCA9IGF3YWl0IHRoaXMuaGVscGVycy5jb25maWd1cmVBcHAoYXBwLCAnLmFwcCcpO1xuICB0aGlzLmxvZy5pbmZvKGBJbnN0YWxsaW5nICcke3NyY0FwcFBhdGh9JyB0byB0aGUgJHt0aGlzLmlzUmVhbERldmljZSgpID8gJ3JlYWwgZGV2aWNlJyA6ICdTaW11bGF0b3InfSBgICtcbiAgICBgd2l0aCBVRElEICcke3RoaXMub3B0cy5kZXZpY2UudWRpZH0nYCk7XG4gIGlmICghYXdhaXQgZnMuZXhpc3RzKHNyY0FwcFBhdGgpKSB7XG4gICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgVGhlIGFwcGxpY2F0aW9uIGF0ICcke3NyY0FwcFBhdGh9JyBkb2VzIG5vdCBleGlzdCBvciBpcyBub3QgYWNjZXNzaWJsZWApO1xuICB9XG4gIGF3YWl0IHRoaXMub3B0cy5kZXZpY2UuaW5zdGFsbEFwcChcbiAgICBzcmNBcHBQYXRoLCB0aW1lb3V0TXMgPz8gdGhpcy5vcHRzLmFwcFB1c2hUaW1lb3V0LCBzdHJhdGVneSA/PyB0aGlzLm9wdHMuYXBwSW5zdGFsbFN0cmF0ZWd5XG4gICk7XG4gIHRoaXMubG9nLmluZm8oYEluc3RhbGxhdGlvbiBvZiAnJHtzcmNBcHBQYXRofScgc3VjY2VlZGVkYCk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVJc0FwcEluc3RhbGxlZCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUlzQXBwSW5zdGFsbGVkIChvcHRzID0ge30pIHtcbiAgY29uc3Qge2J1bmRsZUlkfSA9IHJlcXVpcmVPcHRpb25zKG9wdHMsIFsnYnVuZGxlSWQnXSk7XG4gIGNvbnN0IGluc3RhbGxlZCA9IGF3YWl0IHRoaXMub3B0cy5kZXZpY2UuaXNBcHBJbnN0YWxsZWQoYnVuZGxlSWQpO1xuICB0aGlzLmxvZy5pbmZvKGBBcHAgJyR7YnVuZGxlSWR9JyBpcyR7aW5zdGFsbGVkID8gJycgOiAnIG5vdCd9IGluc3RhbGxlZGApO1xuICByZXR1cm4gaW5zdGFsbGVkO1xufTtcblxuY29tbWFuZHMubW9iaWxlUmVtb3ZlQXBwID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlUmVtb3ZlQXBwIChvcHRzID0ge30pIHtcbiAgY29uc3Qge2J1bmRsZUlkfSA9IHJlcXVpcmVPcHRpb25zKG9wdHMsIFsnYnVuZGxlSWQnXSk7XG4gIHRoaXMubG9nLmluZm8oYFVuaW5zdGFsbGluZyB0aGUgYXBwbGljYXRpb24gd2l0aCBidW5kbGUgaWRlbnRpZmllciAnJHtidW5kbGVJZH0nIGAgK1xuICAgIGBmcm9tIHRoZSAke3RoaXMuaXNSZWFsRGV2aWNlKCkgPyAncmVhbCBkZXZpY2UnIDogJ1NpbXVsYXRvcid9IHdpdGggVURJRCAnJHt0aGlzLm9wdHMuZGV2aWNlLnVkaWR9J2ApO1xuICB0cnkge1xuICAgIGF3YWl0IHRoaXMub3B0cy5kZXZpY2UucmVtb3ZlQXBwKGJ1bmRsZUlkKTtcbiAgICB0aGlzLmxvZy5pbmZvKGBSZW1vdmFsIG9mICcke2J1bmRsZUlkfScgc3VjY2VlZGVkYCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRoaXMubG9nLndhcm4oYENhbm5vdCByZW1vdmUgJyR7YnVuZGxlSWR9Jy4gT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuXG5jb21tYW5kcy5tb2JpbGVMYXVuY2hBcHAgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVMYXVuY2hBcHAgKG9wdHMgPSB7fSkge1xuICBjb25zdCBsYXVuY2hPcHRpb25zID0gcmVxdWlyZU9wdGlvbnMob3B0cywgWydidW5kbGVJZCddKTtcbiAgaWYgKG9wdHMuYXJndW1lbnRzKSB7XG4gICAgbGF1bmNoT3B0aW9ucy5hcmd1bWVudHMgPSBfLmlzQXJyYXkob3B0cy5hcmd1bWVudHMpID8gb3B0cy5hcmd1bWVudHMgOiBbb3B0cy5hcmd1bWVudHNdO1xuICB9XG4gIGlmIChvcHRzLmVudmlyb25tZW50KSB7XG4gICAgbGF1bmNoT3B0aW9ucy5lbnZpcm9ubWVudCA9IG9wdHMuZW52aXJvbm1lbnQ7XG4gIH1cbiAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKCcvd2RhL2FwcHMvbGF1bmNoJywgJ1BPU1QnLCBsYXVuY2hPcHRpb25zKTtcbn07XG5cbmNvbW1hbmRzLm1vYmlsZVRlcm1pbmF0ZUFwcCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVRlcm1pbmF0ZUFwcCAob3B0cyA9IHt9KSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnL3dkYS9hcHBzL3Rlcm1pbmF0ZScsICdQT1NUJywgcmVxdWlyZU9wdGlvbnMob3B0cywgWydidW5kbGVJZCddKSk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVBY3RpdmF0ZUFwcCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUFjdGl2YXRlQXBwIChvcHRzID0ge30pIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKCcvd2RhL2FwcHMvYWN0aXZhdGUnLCAnUE9TVCcsIHJlcXVpcmVPcHRpb25zKG9wdHMsIFsnYnVuZGxlSWQnXSkpO1xufTtcblxuLyoqXG4gKiBLaWxsIHRoZSBnaXZlbiBidW5kbGUgaWQgcHJvY2VzcyB2aWEgaW5zdHJ1bWVudHMgc2VydmljZS5cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9ZdWVDaGVuLUMvcHktaW9zLWRldmljZS9ibG9iLzUxZjQ2ODNjNWMzYzM4NWEwMTU4NThhZGEwN2E1ZjFjNjJkM2NmNTcvaW9zX2RldmljZS9jbGkvYmFzZS5weSNMMjIwXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBPcHRpb25zIHNldCwgd2hpY2ggbXVzdCBjb250YWluIGBidW5kbGVJZGAgcHJvcGVydHlcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIHRydWUgaWYgdGhlIGJ1bmRsZSBpZCBwcm9jZXNzIHdhcyBraWxsZWQuIE90aGVyd2lzZSBmYWxzZS5cbiAqL1xuY29tbWFuZHMubW9iaWxlS2lsbEFwcCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUtpbGxBcHAgKG9wdHMgPSB7fSkge1xuICBpZiAoIXRoaXMuaXNSZWFsRGV2aWNlKCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLlVuc3VwcG9ydGVkT3BlcmF0aW9uRXJyb3IoJ0EgcmVhbCBkZXZpY2UgaXMgcmVxdWlyZWQnKTtcbiAgfVxuXG4gIGNvbnN0IHtidW5kbGVJZH0gPSByZXF1aXJlT3B0aW9ucyhvcHRzLCBbJ2J1bmRsZUlkJ10pO1xuICByZXR1cm4gYXdhaXQgdGhpcy5vcHRzLmRldmljZS50ZXJtaW5hdGVBcHAoYnVuZGxlSWQpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBjdXJyZW50IGFwcGxpY2F0aW9uIHN0YXRlXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBPcHRpb25zIHNldCwgd2hpY2ggbXVzdCBjb250YWluIGBidW5kbGVJZGAgcHJvcGVydHlcbiAqIEByZXR1cm5zIHtudW1iZXJ9IFRoZSBhY3R1YWwgYXBwbGljYXRpb24gc3RhdGUgY29kZS4gU2VlXG4gKiBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi94Y3Rlc3QveGN1aWFwcGxpY2F0aW9uc3RhdGU/bGFuZ3VhZ2U9b2JqY1xuICogdG8gZ2V0IHRoZSBsaXN0IG9mIHBvc3NpYmxlIHZhbHVlcy5cbiAqL1xuY29tbWFuZHMubW9iaWxlUXVlcnlBcHBTdGF0ZSA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVF1ZXJ5QXBwU3RhdGUgKG9wdHMgPSB7fSkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoJy93ZGEvYXBwcy9zdGF0ZScsICdQT1NUJywgcmVxdWlyZU9wdGlvbnMob3B0cywgWydidW5kbGVJZCddKSk7XG59O1xuXG5jb21tYW5kcy5pbnN0YWxsQXBwID0gYXN5bmMgZnVuY3Rpb24gaW5zdGFsbEFwcCAoYXBwUGF0aCwgb3B0cyA9IHt9KSB7XG4gIGF3YWl0IHRoaXMubW9iaWxlSW5zdGFsbEFwcCh7XG4gICAgLi4uKF8uaXNQbGFpbk9iamVjdChvcHRzKSA/IG9wdHMgOiB7fSksXG4gICAgYXBwOiBhcHBQYXRoLFxuICB9KTtcbn07XG5cbmNvbW1hbmRzLmFjdGl2YXRlQXBwID0gYXN5bmMgZnVuY3Rpb24gYWN0aXZhdGVBcHAgKGJ1bmRsZUlkLCBvcHRzID0ge30pIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMubW9iaWxlTGF1bmNoQXBwKE9iamVjdC5hc3NpZ24oe30sIG9wdHMsIHtidW5kbGVJZH0pKTtcbn07XG5cbmNvbW1hbmRzLmlzQXBwSW5zdGFsbGVkID0gYXN5bmMgZnVuY3Rpb24gaXNBcHBJbnN0YWxsZWQgKGJ1bmRsZUlkKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLm1vYmlsZUlzQXBwSW5zdGFsbGVkKHtidW5kbGVJZH0pO1xufTtcblxuY29tbWFuZHMudGVybWluYXRlQXBwID0gYXN5bmMgZnVuY3Rpb24gdGVybWluYXRlQXBwIChidW5kbGVJZCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5tb2JpbGVUZXJtaW5hdGVBcHAoe2J1bmRsZUlkfSk7XG59O1xuXG5jb21tYW5kcy5xdWVyeUFwcFN0YXRlID0gYXN5bmMgZnVuY3Rpb24gcXVlcnlBcHBTdGF0ZSAoYnVuZGxlSWQpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMubW9iaWxlUXVlcnlBcHBTdGF0ZSh7YnVuZGxlSWR9KTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gTGlzdEFwcHNPcHRpb25zXG4gKiBAcHJvcGVydHkgeydTeXN0ZW0nfCdVc2VyJ30gYXBwbGljYXRpb25UeXBlIFtVc2VyXSBUaGUgdHlwZSBvZiBhcHBsaWNhdGlvbnMgdG8gbGlzdFxuICovXG5cbi8qKlxuICogTGlzdCBhcHBsaWNhdGlvbnMgaW5zdGFsbGVkIG9uIHRoZSByZWFsIGRldmljZSB1bmRlciB0ZXN0XG4gKlxuICogQHBhcmFtIHtMaXN0QXBwc09wdGlvbnN9IG9wdHNcbiAqIEByZXR1cm5zIHtBcnJheTxPYmplY3Q+fSBBIGxpc3Qgb2YgYXBwcywgd2hlcmUgZWFjaCBpdGVtIGlzIGEgbWFwIHdoZXJlIGtleXMgYXJlXG4gKiBidW5kbGUgaWRlbnRpZmllcnMgYW5kIHZhbHVlcyBhcmUgbWFwcyBvZiBwbGF0Zm9ybS1zcGVjaWZpYyBhcHAgcHJvcGVydGllcy5cbiAqL1xuY29tbWFuZHMubW9iaWxlTGlzdEFwcHMgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVMaXN0QXBwcyAob3B0cyA9IHt9KSB7XG4gIGlmICghdGhpcy5pc1JlYWxEZXZpY2UoKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm90SW1wbGVtZW50ZWRFcnJvcihgVGhpcyBleHRlbnNpb24gaXMgb25seSBzdXBwb3J0ZWQgb24gcmVhbCBkZXZpY2VzYCk7XG4gIH1cblxuICBjb25zdCB7XG4gICAgYXBwbGljYXRpb25UeXBlID0gJ1VzZXInLFxuICB9ID0gb3B0cztcbiAgY29uc3Qgc2VydmljZSA9IGF3YWl0IHNlcnZpY2VzLnN0YXJ0SW5zdGFsbGF0aW9uUHJveHlTZXJ2aWNlKHRoaXMub3B0cy5kZXZpY2UudWRpZCk7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IHNlcnZpY2UubGlzdEFwcGxpY2F0aW9ucyh7YXBwbGljYXRpb25UeXBlfSk7XG4gIH0gZmluYWxseSB7XG4gICAgc2VydmljZS5jbG9zZSgpO1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjb21tYW5kcztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBLE1BQU1BLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFFbkIsU0FBU0MsY0FBYyxDQUFFQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUVDLE9BQU8sR0FBRyxFQUFFLEVBQUU7RUFDaEQsS0FBSyxNQUFNQyxHQUFHLElBQUlELE9BQU8sRUFBRTtJQUN6QixJQUFJLENBQUNFLGVBQUMsQ0FBQ0MsUUFBUSxDQUFDSixJQUFJLENBQUNFLEdBQUcsQ0FBQyxDQUFDLElBQUlDLGVBQUMsQ0FBQ0UsT0FBTyxDQUFDTCxJQUFJLENBQUNFLEdBQUcsQ0FBQyxDQUFDLEVBQUU7TUFDbEQsTUFBTSxJQUFJSSxjQUFNLENBQUNDLG9CQUFvQixDQUNsQyxJQUFHTCxHQUFJLHdDQUF1Q0YsSUFBSSxDQUFDRSxHQUFHLENBQUUsb0JBQW1CLENBQzdFO0lBQ0g7RUFDRjtFQUNBLE9BQU9GLElBQUk7QUFDYjtBQUVBRixRQUFRLENBQUNVLGdCQUFnQixHQUFHLGVBQWVBLGdCQUFnQixDQUFFUixJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUU7RUFDdEUsTUFBTTtJQUFFUyxHQUFHO0lBQUVDLFNBQVM7SUFBRUM7RUFBUyxDQUFDLEdBQUdaLGNBQWMsQ0FBQ0MsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7RUFDbEUsTUFBTVksVUFBVSxHQUFHLE1BQU0sSUFBSSxDQUFDQyxPQUFPLENBQUNDLFlBQVksQ0FBQ0wsR0FBRyxFQUFFLE1BQU0sQ0FBQztFQUMvRCxJQUFJLENBQUNNLEdBQUcsQ0FBQ0MsSUFBSSxDQUFFLGVBQWNKLFVBQVcsWUFBVyxJQUFJLENBQUNLLFlBQVksRUFBRSxHQUFHLGFBQWEsR0FBRyxXQUFZLEdBQUUsR0FDcEcsY0FBYSxJQUFJLENBQUNqQixJQUFJLENBQUNrQixNQUFNLENBQUNDLElBQUssR0FBRSxDQUFDO0VBQ3pDLElBQUksRUFBQyxNQUFNQyxXQUFFLENBQUNDLE1BQU0sQ0FBQ1QsVUFBVSxDQUFDLEdBQUU7SUFDaEMsSUFBSSxDQUFDRyxHQUFHLENBQUNPLGFBQWEsQ0FBRSx1QkFBc0JWLFVBQVcsdUNBQXNDLENBQUM7RUFDbEc7RUFDQSxNQUFNLElBQUksQ0FBQ1osSUFBSSxDQUFDa0IsTUFBTSxDQUFDSyxVQUFVLENBQy9CWCxVQUFVLEVBQUVGLFNBQVMsSUFBSSxJQUFJLENBQUNWLElBQUksQ0FBQ3dCLGNBQWMsRUFBRWIsUUFBUSxJQUFJLElBQUksQ0FBQ1gsSUFBSSxDQUFDeUIsa0JBQWtCLENBQzVGO0VBQ0QsSUFBSSxDQUFDVixHQUFHLENBQUNDLElBQUksQ0FBRSxvQkFBbUJKLFVBQVcsYUFBWSxDQUFDO0FBQzVELENBQUM7QUFFRGQsUUFBUSxDQUFDNEIsb0JBQW9CLEdBQUcsZUFBZUEsb0JBQW9CLENBQUUxQixJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUU7RUFDOUUsTUFBTTtJQUFDMkI7RUFBUSxDQUFDLEdBQUc1QixjQUFjLENBQUNDLElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0VBQ3JELE1BQU00QixTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUM1QixJQUFJLENBQUNrQixNQUFNLENBQUNXLGNBQWMsQ0FBQ0YsUUFBUSxDQUFDO0VBQ2pFLElBQUksQ0FBQ1osR0FBRyxDQUFDQyxJQUFJLENBQUUsUUFBT1csUUFBUyxPQUFNQyxTQUFTLEdBQUcsRUFBRSxHQUFHLE1BQU8sWUFBVyxDQUFDO0VBQ3pFLE9BQU9BLFNBQVM7QUFDbEIsQ0FBQztBQUVEOUIsUUFBUSxDQUFDZ0MsZUFBZSxHQUFHLGVBQWVBLGVBQWUsQ0FBRTlCLElBQUksR0FBRyxDQUFDLENBQUMsRUFBRTtFQUNwRSxNQUFNO0lBQUMyQjtFQUFRLENBQUMsR0FBRzVCLGNBQWMsQ0FBQ0MsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUM7RUFDckQsSUFBSSxDQUFDZSxHQUFHLENBQUNDLElBQUksQ0FBRSx3REFBdURXLFFBQVMsSUFBRyxHQUMvRSxZQUFXLElBQUksQ0FBQ1YsWUFBWSxFQUFFLEdBQUcsYUFBYSxHQUFHLFdBQVksZUFBYyxJQUFJLENBQUNqQixJQUFJLENBQUNrQixNQUFNLENBQUNDLElBQUssR0FBRSxDQUFDO0VBQ3ZHLElBQUk7SUFDRixNQUFNLElBQUksQ0FBQ25CLElBQUksQ0FBQ2tCLE1BQU0sQ0FBQ2EsU0FBUyxDQUFDSixRQUFRLENBQUM7SUFDMUMsSUFBSSxDQUFDWixHQUFHLENBQUNDLElBQUksQ0FBRSxlQUFjVyxRQUFTLGFBQVksQ0FBQztJQUNuRCxPQUFPLElBQUk7RUFDYixDQUFDLENBQUMsT0FBT0ssR0FBRyxFQUFFO0lBQ1osSUFBSSxDQUFDakIsR0FBRyxDQUFDa0IsSUFBSSxDQUFFLGtCQUFpQk4sUUFBUyxzQkFBcUJLLEdBQUcsQ0FBQ0UsT0FBUSxFQUFDLENBQUM7SUFDNUUsT0FBTyxLQUFLO0VBQ2Q7QUFDRixDQUFDO0FBRURwQyxRQUFRLENBQUNxQyxlQUFlLEdBQUcsZUFBZUEsZUFBZSxDQUFFbkMsSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFO0VBQ3BFLE1BQU1vQyxhQUFhLEdBQUdyQyxjQUFjLENBQUNDLElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0VBQ3hELElBQUlBLElBQUksQ0FBQ3FDLFNBQVMsRUFBRTtJQUNsQkQsYUFBYSxDQUFDQyxTQUFTLEdBQUdsQyxlQUFDLENBQUNtQyxPQUFPLENBQUN0QyxJQUFJLENBQUNxQyxTQUFTLENBQUMsR0FBR3JDLElBQUksQ0FBQ3FDLFNBQVMsR0FBRyxDQUFDckMsSUFBSSxDQUFDcUMsU0FBUyxDQUFDO0VBQ3pGO0VBQ0EsSUFBSXJDLElBQUksQ0FBQ3VDLFdBQVcsRUFBRTtJQUNwQkgsYUFBYSxDQUFDRyxXQUFXLEdBQUd2QyxJQUFJLENBQUN1QyxXQUFXO0VBQzlDO0VBQ0EsT0FBTyxNQUFNLElBQUksQ0FBQ0MsWUFBWSxDQUFDLGtCQUFrQixFQUFFLE1BQU0sRUFBRUosYUFBYSxDQUFDO0FBQzNFLENBQUM7QUFFRHRDLFFBQVEsQ0FBQzJDLGtCQUFrQixHQUFHLGVBQWVBLGtCQUFrQixDQUFFekMsSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFO0VBQzFFLE9BQU8sTUFBTSxJQUFJLENBQUN3QyxZQUFZLENBQUMscUJBQXFCLEVBQUUsTUFBTSxFQUFFekMsY0FBYyxDQUFDQyxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0FBQ25HLENBQUM7QUFFREYsUUFBUSxDQUFDNEMsaUJBQWlCLEdBQUcsZUFBZUEsaUJBQWlCLENBQUUxQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUU7RUFDeEUsT0FBTyxNQUFNLElBQUksQ0FBQ3dDLFlBQVksQ0FBQyxvQkFBb0IsRUFBRSxNQUFNLEVBQUV6QyxjQUFjLENBQUNDLElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7QUFDbEcsQ0FBQztBQVNERixRQUFRLENBQUM2QyxhQUFhLEdBQUcsZUFBZUEsYUFBYSxDQUFFM0MsSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFO0VBQ2hFLElBQUksQ0FBQyxJQUFJLENBQUNpQixZQUFZLEVBQUUsRUFBRTtJQUN4QixNQUFNLElBQUlYLGNBQU0sQ0FBQ3NDLHlCQUF5QixDQUFDLDJCQUEyQixDQUFDO0VBQ3pFO0VBRUEsTUFBTTtJQUFDakI7RUFBUSxDQUFDLEdBQUc1QixjQUFjLENBQUNDLElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0VBQ3JELE9BQU8sTUFBTSxJQUFJLENBQUNBLElBQUksQ0FBQ2tCLE1BQU0sQ0FBQzJCLFlBQVksQ0FBQ2xCLFFBQVEsQ0FBQztBQUN0RCxDQUFDO0FBVUQ3QixRQUFRLENBQUNnRCxtQkFBbUIsR0FBRyxlQUFlQSxtQkFBbUIsQ0FBRTlDLElBQUksR0FBRyxDQUFDLENBQUMsRUFBRTtFQUM1RSxPQUFPLE1BQU0sSUFBSSxDQUFDd0MsWUFBWSxDQUFDLGlCQUFpQixFQUFFLE1BQU0sRUFBRXpDLGNBQWMsQ0FBQ0MsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztBQUMvRixDQUFDO0FBRURGLFFBQVEsQ0FBQ3lCLFVBQVUsR0FBRyxlQUFlQSxVQUFVLENBQUV3QixPQUFPLEVBQUUvQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUU7RUFDbkUsTUFBTSxJQUFJLENBQUNRLGdCQUFnQixDQUFDO0lBQzFCLElBQUlMLGVBQUMsQ0FBQzZDLGFBQWEsQ0FBQ2hELElBQUksQ0FBQyxHQUFHQSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDdENTLEdBQUcsRUFBRXNDO0VBQ1AsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQUVEakQsUUFBUSxDQUFDbUQsV0FBVyxHQUFHLGVBQWVBLFdBQVcsQ0FBRXRCLFFBQVEsRUFBRTNCLElBQUksR0FBRyxDQUFDLENBQUMsRUFBRTtFQUN0RSxPQUFPLE1BQU0sSUFBSSxDQUFDbUMsZUFBZSxDQUFDZSxNQUFNLENBQUNDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRW5ELElBQUksRUFBRTtJQUFDMkI7RUFBUSxDQUFDLENBQUMsQ0FBQztBQUN4RSxDQUFDO0FBRUQ3QixRQUFRLENBQUMrQixjQUFjLEdBQUcsZUFBZUEsY0FBYyxDQUFFRixRQUFRLEVBQUU7RUFDakUsT0FBTyxNQUFNLElBQUksQ0FBQ0Qsb0JBQW9CLENBQUM7SUFBQ0M7RUFBUSxDQUFDLENBQUM7QUFDcEQsQ0FBQztBQUVEN0IsUUFBUSxDQUFDK0MsWUFBWSxHQUFHLGVBQWVBLFlBQVksQ0FBRWxCLFFBQVEsRUFBRTtFQUM3RCxPQUFPLE1BQU0sSUFBSSxDQUFDYyxrQkFBa0IsQ0FBQztJQUFDZDtFQUFRLENBQUMsQ0FBQztBQUNsRCxDQUFDO0FBRUQ3QixRQUFRLENBQUNzRCxhQUFhLEdBQUcsZUFBZUEsYUFBYSxDQUFFekIsUUFBUSxFQUFFO0VBQy9ELE9BQU8sTUFBTSxJQUFJLENBQUNtQixtQkFBbUIsQ0FBQztJQUFDbkI7RUFBUSxDQUFDLENBQUM7QUFDbkQsQ0FBQztBQWNEN0IsUUFBUSxDQUFDdUQsY0FBYyxHQUFHLGVBQWVBLGNBQWMsQ0FBRXJELElBQUksR0FBRyxDQUFDLENBQUMsRUFBRTtFQUNsRSxJQUFJLENBQUMsSUFBSSxDQUFDaUIsWUFBWSxFQUFFLEVBQUU7SUFDeEIsTUFBTSxJQUFJWCxjQUFNLENBQUNnRCxtQkFBbUIsQ0FBRSxrREFBaUQsQ0FBQztFQUMxRjtFQUVBLE1BQU07SUFDSkMsZUFBZSxHQUFHO0VBQ3BCLENBQUMsR0FBR3ZELElBQUk7RUFDUixNQUFNd0QsT0FBTyxHQUFHLE1BQU1DLHlCQUFRLENBQUNDLDZCQUE2QixDQUFDLElBQUksQ0FBQzFELElBQUksQ0FBQ2tCLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDO0VBQ25GLElBQUk7SUFDRixPQUFPLE1BQU1xQyxPQUFPLENBQUNHLGdCQUFnQixDQUFDO01BQUNKO0lBQWUsQ0FBQyxDQUFDO0VBQzFELENBQUMsU0FBUztJQUNSQyxPQUFPLENBQUNJLEtBQUssRUFBRTtFQUNqQjtBQUNGLENBQUM7QUFBQyxlQUVhOUQsUUFBUTtBQUFBIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"app-management.js","names":["commands","requireOptions","opts","reqKeys","key","_","isString","isEmpty","errors","InvalidArgumentError","mobileInstallApp","app","timeoutMs","strategy","srcAppPath","helpers","configureApp","log","info","isRealDevice","device","udid","fs","exists","errorAndThrow","installApp","appPushTimeout","appInstallStrategy","mobileIsAppInstalled","bundleId","installed","isAppInstalled","mobileRemoveApp","removeApp","err","warn","message","mobileLaunchApp","launchOptions","arguments","isArray","environment","proxyCommand","mobileTerminateApp","mobileActivateApp","mobileKillApp","UnsupportedOperationError","terminateApp","mobileQueryAppState","appPath","isPlainObject","activateApp","Object","assign","queryAppState","mobileListApps","NotImplementedError","applicationType","service","services","startInstallationProxyService","listApplications","close"],"sources":["../../../lib/commands/app-management.js"],"sourcesContent":["import _ from 'lodash';\nimport { fs } from 'appium/support';\nimport { errors } from 'appium/driver';\nimport { services } from 'appium-ios-device';\n\nconst commands = {};\n\nfunction requireOptions (opts = {}, reqKeys = []) {\n for (const key of reqKeys) {\n if (!_.isString(opts[key]) || _.isEmpty(opts[key])) {\n throw new errors.InvalidArgumentError(\n `'${key}' is expected to be a valid string. '${opts[key]}' is given instead`\n );\n }\n }\n return opts;\n}\n\ncommands.mobileInstallApp = async function mobileInstallApp (opts = {}) {\n const { app, timeoutMs, strategy } = requireOptions(opts, ['app']);\n const srcAppPath = await this.helpers.configureApp(app, '.app');\n this.log.info(`Installing '${srcAppPath}' to the ${this.isRealDevice() ? 'real device' : 'Simulator'} ` +\n `with UDID '${this.opts.device.udid}'`);\n if (!await fs.exists(srcAppPath)) {\n this.log.errorAndThrow(`The application at '${srcAppPath}' does not exist or is not accessible`);\n }\n await this.opts.device.installApp(\n srcAppPath, timeoutMs ?? this.opts.appPushTimeout, strategy ?? this.opts.appInstallStrategy\n );\n this.log.info(`Installation of '${srcAppPath}' succeeded`);\n};\n\ncommands.mobileIsAppInstalled = async function mobileIsAppInstalled (opts = {}) {\n const {bundleId} = requireOptions(opts, ['bundleId']);\n const installed = await this.opts.device.isAppInstalled(bundleId);\n this.log.info(`App '${bundleId}' is${installed ? '' : ' not'} installed`);\n return installed;\n};\n\ncommands.mobileRemoveApp = async function mobileRemoveApp (opts = {}) {\n const {bundleId} = requireOptions(opts, ['bundleId']);\n this.log.info(`Uninstalling the application with bundle identifier '${bundleId}' ` +\n `from the ${this.isRealDevice() ? 'real device' : 'Simulator'} with UDID '${this.opts.device.udid}'`);\n try {\n await this.opts.device.removeApp(bundleId);\n this.log.info(`Removal of '${bundleId}' succeeded`);\n return true;\n } catch (err) {\n this.log.warn(`Cannot remove '${bundleId}'. Original error: ${err.message}`);\n return false;\n }\n};\n\ncommands.mobileLaunchApp = async function mobileLaunchApp (opts = {}) {\n const launchOptions = requireOptions(opts, ['bundleId']);\n if (opts.arguments) {\n launchOptions.arguments = _.isArray(opts.arguments) ? opts.arguments : [opts.arguments];\n }\n if (opts.environment) {\n launchOptions.environment = opts.environment;\n }\n return await this.proxyCommand('/wda/apps/launch', 'POST', launchOptions);\n};\n\ncommands.mobileTerminateApp = async function mobileTerminateApp (opts = {}) {\n return await this.proxyCommand('/wda/apps/terminate', 'POST', requireOptions(opts, ['bundleId']));\n};\n\ncommands.mobileActivateApp = async function mobileActivateApp (opts = {}) {\n return await this.proxyCommand('/wda/apps/activate', 'POST', requireOptions(opts, ['bundleId']));\n};\n\n/**\n * Kill the given bundle id process via instruments service.\n * https://github.com/YueChen-C/py-ios-device/blob/51f4683c5c3c385a015858ada07a5f1c62d3cf57/ios_device/cli/base.py#L220\n *\n * @param {Object} opts - Options set, which must contain `bundleId` property\n * @returns {boolean} Returns true if the bundle id process was killed. Otherwise false.\n */\ncommands.mobileKillApp = async function mobileKillApp (opts = {}) {\n if (!this.isRealDevice()) {\n throw new errors.UnsupportedOperationError('A real device is required');\n }\n\n const {bundleId} = requireOptions(opts, ['bundleId']);\n return await this.opts.device.terminateApp(bundleId);\n};\n\n/**\n * Returns the current application state\n *\n * @param {Object} opts - Options set, which must contain `bundleId` property\n * @returns {number} The actual application state code. See\n * https://developer.apple.com/documentation/xctest/xcuiapplicationstate?language=objc\n * to get the list of possible values.\n */\ncommands.mobileQueryAppState = async function mobileQueryAppState (opts = {}) {\n return await this.proxyCommand('/wda/apps/state', 'POST', requireOptions(opts, ['bundleId']));\n};\n\ncommands.installApp = async function installApp (appPath, opts = {}) {\n await this.mobileInstallApp({\n ...(_.isPlainObject(opts) ? opts : {}),\n app: appPath,\n });\n};\n\ncommands.activateApp = async function activateApp (bundleId, opts = {}) {\n return await this.mobileLaunchApp(Object.assign({}, opts, {bundleId}));\n};\n\ncommands.isAppInstalled = async function isAppInstalled (bundleId) {\n return await this.mobileIsAppInstalled({bundleId});\n};\n\ncommands.terminateApp = async function terminateApp (bundleId) {\n return await this.mobileTerminateApp({bundleId});\n};\n\ncommands.queryAppState = async function queryAppState (bundleId) {\n return await this.mobileQueryAppState({bundleId});\n};\n\n/**\n * @typedef {Object} ListAppsOptions\n * @property {'System'|'User'} applicationType [User] The type of applications to list\n */\n\n/**\n * List applications installed on the real device under test\n *\n * @param {ListAppsOptions} opts\n * @returns {Array<Object>} A list of apps, where each item is a map where keys are\n * bundle identifiers and values are maps of platform-specific app properties.\n */\ncommands.mobileListApps = async function mobileListApps (opts = {}) {\n if (!this.isRealDevice()) {\n throw new errors.NotImplementedError(`This extension is only supported on real devices`);\n }\n\n const {\n applicationType = 'User',\n } = opts;\n const service = await services.startInstallationProxyService(this.opts.device.udid);\n try {\n return await service.listApplications({applicationType});\n } finally {\n service.close();\n }\n};\n\nexport default commands;\n"],"mappings":"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"}
1
+ {"version":3,"file":"app-management.js","names":["commands","requireOptions","opts","reqKeys","key","_","isString","isEmpty","errors","InvalidArgumentError","mobileInstallApp","app","timeoutMs","strategy","srcAppPath","helpers","configureApp","log","info","isRealDevice","device","udid","fs","exists","errorAndThrow","installApp","appPushTimeout","appInstallStrategy","mobileIsAppInstalled","bundleId","installed","isAppInstalled","mobileRemoveApp","removeApp","err","warn","message","mobileLaunchApp","launchOptions","arguments","isArray","environment","proxyCommand","mobileTerminateApp","mobileActivateApp","mobileKillApp","UnsupportedOperationError","terminateApp","mobileQueryAppState","appPath","isPlainObject","activateApp","Object","assign","queryAppState","mobileListApps","NotImplementedError","applicationType","service","services","startInstallationProxyService","listApplications","close"],"sources":["../../../lib/commands/app-management.js"],"sourcesContent":["import _ from 'lodash';\nimport { fs } from 'appium/support';\nimport { errors } from 'appium/driver';\nimport { services } from 'appium-ios-device';\n\nconst commands = {};\n\nfunction requireOptions (opts = {}, reqKeys = []) {\n for (const key of reqKeys) {\n if (!_.isString(opts[key]) || _.isEmpty(opts[key])) {\n throw new errors.InvalidArgumentError(\n `'${key}' is expected to be a valid string. '${opts[key]}' is given instead`\n );\n }\n }\n return opts;\n}\n\ncommands.mobileInstallApp = async function mobileInstallApp (opts = {}) {\n const { app, timeoutMs, strategy } = requireOptions(opts, ['app']);\n const srcAppPath = await this.helpers.configureApp(app, '.app');\n this.log.info(`Installing '${srcAppPath}' to the ${this.isRealDevice() ? 'real device' : 'Simulator'} ` +\n `with UDID '${this.opts.device.udid}'`);\n if (!await fs.exists(srcAppPath)) {\n this.log.errorAndThrow(`The application at '${srcAppPath}' does not exist or is not accessible`);\n }\n await this.opts.device.installApp(\n srcAppPath, timeoutMs ?? this.opts.appPushTimeout, strategy ?? this.opts.appInstallStrategy\n );\n this.log.info(`Installation of '${srcAppPath}' succeeded`);\n};\n\ncommands.mobileIsAppInstalled = async function mobileIsAppInstalled (opts = {}) {\n const {bundleId} = requireOptions(opts, ['bundleId']);\n const installed = await this.opts.device.isAppInstalled(bundleId);\n this.log.info(`App '${bundleId}' is${installed ? '' : ' not'} installed`);\n return installed;\n};\n\ncommands.mobileRemoveApp = async function mobileRemoveApp (opts = {}) {\n const {bundleId} = requireOptions(opts, ['bundleId']);\n this.log.info(`Uninstalling the application with bundle identifier '${bundleId}' ` +\n `from the ${this.isRealDevice() ? 'real device' : 'Simulator'} with UDID '${this.opts.device.udid}'`);\n try {\n await this.opts.device.removeApp(bundleId);\n this.log.info(`Removal of '${bundleId}' succeeded`);\n return true;\n } catch (err) {\n this.log.warn(`Cannot remove '${bundleId}'. Original error: ${err.message}`);\n return false;\n }\n};\n\ncommands.mobileLaunchApp = async function mobileLaunchApp (opts = {}) {\n const launchOptions = requireOptions(opts, ['bundleId']);\n if (opts.arguments) {\n launchOptions.arguments = _.isArray(opts.arguments) ? opts.arguments : [opts.arguments];\n }\n if (opts.environment) {\n launchOptions.environment = opts.environment;\n }\n return await this.proxyCommand('/wda/apps/launch', 'POST', launchOptions);\n};\n\ncommands.mobileTerminateApp = async function mobileTerminateApp (opts = {}) {\n return await this.proxyCommand('/wda/apps/terminate', 'POST', requireOptions(opts, ['bundleId']));\n};\n\ncommands.mobileActivateApp = async function mobileActivateApp (opts = {}) {\n return await this.proxyCommand('/wda/apps/activate', 'POST', requireOptions(opts, ['bundleId']));\n};\n\n/**\n * Kill the given bundle id process via instruments service.\n * https://github.com/YueChen-C/py-ios-device/blob/51f4683c5c3c385a015858ada07a5f1c62d3cf57/ios_device/cli/base.py#L220\n *\n * @param {Object} opts - Options set, which must contain `bundleId` property\n * @returns {boolean} Returns true if the bundle id process was killed. Otherwise false.\n */\ncommands.mobileKillApp = async function mobileKillApp (opts = {}) {\n if (!this.isRealDevice()) {\n throw new errors.UnsupportedOperationError('A real device is required');\n }\n\n const {bundleId} = requireOptions(opts, ['bundleId']);\n return await this.opts.device.terminateApp(bundleId);\n};\n\n/**\n * Returns the current application state\n *\n * @param {Object} opts - Options set, which must contain `bundleId` property\n * @returns {number} The actual application state code. See\n * https://developer.apple.com/documentation/xctest/xcuiapplicationstate?language=objc\n * to get the list of possible values.\n */\ncommands.mobileQueryAppState = async function mobileQueryAppState (opts = {}) {\n return await this.proxyCommand('/wda/apps/state', 'POST', requireOptions(opts, ['bundleId']));\n};\n\ncommands.installApp = async function installApp (appPath, opts = {}) {\n await this.mobileInstallApp({\n ...(_.isPlainObject(opts) ? opts : {}),\n app: appPath,\n });\n};\n\ncommands.activateApp = async function activateApp (bundleId, opts = {}) {\n return await this.mobileLaunchApp(Object.assign({}, opts, {bundleId}));\n};\n\ncommands.isAppInstalled = async function isAppInstalled (bundleId) {\n return await this.mobileIsAppInstalled({bundleId});\n};\n\ncommands.terminateApp = async function terminateApp (bundleId) {\n return await this.mobileTerminateApp({bundleId});\n};\n\ncommands.queryAppState = async function queryAppState (bundleId) {\n return await this.mobileQueryAppState({bundleId});\n};\n\n/**\n * @typedef {Object} ListAppsOptions\n * @property {'System'|'User'} applicationType [User] The type of applications to list\n */\n\n/**\n * List applications installed on the real device under test\n *\n * @param {ListAppsOptions} opts\n * @returns {Array<Object>} A list of apps, where each item is a map where keys are\n * bundle identifiers and values are maps of platform-specific app properties.\n */\ncommands.mobileListApps = async function mobileListApps (opts = {}) {\n if (!this.isRealDevice()) {\n throw new errors.NotImplementedError(`This extension is only supported on real devices`);\n }\n\n const {\n applicationType = 'User',\n } = opts;\n const service = await services.startInstallationProxyService(this.opts.device.udid);\n try {\n return await service.listApplications({applicationType});\n } finally {\n service.close();\n }\n};\n\nexport default commands;\n"],"mappings":"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"}
@@ -9,9 +9,7 @@ require("source-map-support/register");
9
9
  var _lodash = _interopRequireDefault(require("lodash"));
10
10
  var _support = require("appium/support");
11
11
  const commands = {};
12
-
13
12
  exports.commands = commands;
14
-
15
13
  commands.mobileSetAppearance = async function mobileSetAppearance(opts = {}) {
16
14
  const {
17
15
  style
@@ -40,7 +38,6 @@ commands.mobileSetAppearance = async function mobileSetAppearance(opts = {}) {
40
38
  text: `Turn ${_lodash.default.toLower(style) === 'dark' ? 'on' : 'off'} dark mode`
41
39
  });
42
40
  };
43
-
44
41
  commands.mobileGetAppearance = async function mobileGetAppearance() {
45
42
  if (_support.util.compareVersions(this.opts.platformVersion, '<', '12.0')) {
46
43
  return 'unsupported';
@@ -60,4 +57,4 @@ commands.mobileGetAppearance = async function mobileGetAppearance() {
60
57
  };
61
58
  var _default = commands;
62
59
  exports.default = _default;
63
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb21tYW5kcyIsIm1vYmlsZVNldEFwcGVhcmFuY2UiLCJvcHRzIiwic3R5bGUiLCJpbmNsdWRlcyIsIl8iLCJ0b0xvd2VyIiwiRXJyb3IiLCJ1dGlsIiwiY29tcGFyZVZlcnNpb25zIiwicGxhdGZvcm1WZXJzaW9uIiwiaXNTaW11bGF0b3IiLCJkZXZpY2UiLCJzZXRBcHBlYXJhbmNlIiwiZSIsImxvZyIsImRlYnVnIiwic3RhY2siLCJwcm94eUNvbW1hbmQiLCJuYW1lIiwibW9iaWxlU2lyaUNvbW1hbmQiLCJ0ZXh0IiwibW9iaWxlR2V0QXBwZWFyYW5jZSIsImdldEFwcGVhcmFuY2UiLCJpZ24iLCJ1c2VySW50ZXJmYWNlU3R5bGUiXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvY29tbWFuZHMvYXBwZWFyYW5jZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgdXRpbCB9IGZyb20gJ2FwcGl1bS9zdXBwb3J0JztcblxuXG5jb25zdCBjb21tYW5kcyA9IHt9O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFNldEFwcGVhcmFuY2VPcHRpb25zXG4gKlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHN0eWxlIC0gQ3VycmVudGx5IHR3byBzdHlsZXMgYXJlIHN1cHBvcnRlZDpcbiAqIC0gZGFya1xuICogLSBsaWdodFxuICovXG5cbi8qKlxuICogU2V0IHRoZSBkZXZpY2UncyBVSSBhcHBlYXJhbmNlIHN0eWxlXG4gKlxuICogQHNpbmNlIGlPUyAxMi4wXG4gKiBAcGFyYW0ge1NldEFwcGVhcmFuY2VPcHRpb25zfSBvcHRzXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgdGhlIGN1cnJlbnQgcGxhdGZvcm0gZG9lcyBub3Qgc3VwcG9ydCBVSVxuICogYXBwZWFyYW5jZSBjaGFuZ2VzXG4gKi9cbmNvbW1hbmRzLm1vYmlsZVNldEFwcGVhcmFuY2UgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVTZXRBcHBlYXJhbmNlIChvcHRzID0ge30pIHtcbiAgY29uc3Qge1xuICAgIHN0eWxlLFxuICB9ID0gb3B0cztcbiAgaWYgKCFbJ2xpZ2h0JywgJ2RhcmsnXS5pbmNsdWRlcyhfLnRvTG93ZXIoc3R5bGUpKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVGhlICdzdHlsZScgdmFsdWUgaXMgZXhwZWN0ZWQgdG8gZXF1YWwgZWl0aGVyICdsaWdodCcgb3IgJ2RhcmsnYCk7XG4gIH1cbiAgaWYgKHV0aWwuY29tcGFyZVZlcnNpb25zKHRoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb24sICc8JywgJzEyLjAnKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ2hhbmdpbmcgYXBwZWFyYW5jZSBpcyBvbmx5IHN1cHBvcnRlZCBzaW5jZSBpT1MgMTInKTtcbiAgfVxuXG4gIGlmICh0aGlzLmlzU2ltdWxhdG9yKCkpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHZvaWQgKGF3YWl0IHRoaXMub3B0cy5kZXZpY2Uuc2V0QXBwZWFyYW5jZShzdHlsZSkpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGUuc3RhY2spO1xuICAgIH1cbiAgfVxuICB0cnkge1xuICAgIHJldHVybiB2b2lkIChhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnL3dkYS9kZXZpY2UvYXBwZWFyYW5jZScsICdQT1NUJywge25hbWU6IHN0eWxlfSkpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhpcy5sb2cuZGVidWcoZS5zdGFjayk7XG4gIH1cbiAgLy8gRmFsbCBiYWNrIHRvIHRoZSB1Z2x5IFNpcmkgd29ya2Fyb3VuZCBpZiB0aGUgY3VycmVudCBTREsgaXMgdG9vIG9sZFxuICBhd2FpdCB0aGlzLm1vYmlsZVNpcmlDb21tYW5kKHtcbiAgICB0ZXh0OiBgVHVybiAke18udG9Mb3dlcihzdHlsZSkgPT09ICdkYXJrJyA/ICdvbicgOiAnb2ZmJ30gZGFyayBtb2RlYCxcbiAgfSk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEFwcGVhcmFuY2VcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBzdHlsZSAtIFRoZSBkZXZpY2UncyBVSSBhcHBlYXJhbmNlIHZhbHVlLlxuICogVGhpcyBjb3VsZCBiZSBvbmUgb2Y6XG4gKiAtIGBsaWdodGBcbiAqIC0gYGRhcmtgXG4gKiAtIGB1bmtub3duYFxuICogLSBgdW5zdXBwb3J0ZWRgXG4gKi9cblxuLyoqXG4gKiBHZXQgdGhlIGRldmljZSdzIFVJIGFwcGVhcmFuY2Ugc3R5bGUuXG4gKlxuICogQHNpbmNlIFhjb2RlIFNESyAxMVxuICogQHJldHVybnMge0FwcGVhcmFuY2V9XG4gKi9cbmNvbW1hbmRzLm1vYmlsZUdldEFwcGVhcmFuY2UgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVHZXRBcHBlYXJhbmNlICgpIHtcbiAgaWYgKHV0aWwuY29tcGFyZVZlcnNpb25zKHRoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb24sICc8JywgJzEyLjAnKSkge1xuICAgIHJldHVybiAndW5zdXBwb3J0ZWQnO1xuICB9XG5cbiAgbGV0IHN0eWxlO1xuICBpZiAodGhpcy5pc1NpbXVsYXRvcigpKSB7XG4gICAgdHJ5IHtcbiAgICAgIHN0eWxlID0gYXdhaXQgdGhpcy5vcHRzLmRldmljZS5nZXRBcHBlYXJhbmNlKCk7XG4gICAgfSBjYXRjaCAoaWduKSB7fVxuICB9XG4gIGlmICghc3R5bGUpIHtcbiAgICBzdHlsZSA9IChhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnL3dkYS9kZXZpY2UvaW5mbycsICdHRVQnKSkudXNlckludGVyZmFjZVN0eWxlIHx8ICd1bmtub3duJztcbiAgfVxuICByZXR1cm4ge1xuICAgIHN0eWxlLFxuICB9O1xufTtcblxuXG5leHBvcnQgeyBjb21tYW5kcyB9O1xuZXhwb3J0IGRlZmF1bHQgY29tbWFuZHM7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7QUFDQTtBQUdBLE1BQU1BLFFBQVEsR0FBRyxDQUFDLENBQUM7O0FBQUM7O0FBa0JwQkEsUUFBUSxDQUFDQyxtQkFBbUIsR0FBRyxlQUFlQSxtQkFBbUIsQ0FBRUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFO0VBQzVFLE1BQU07SUFDSkM7RUFDRixDQUFDLEdBQUdELElBQUk7RUFDUixJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUNFLFFBQVEsQ0FBQ0MsZUFBQyxDQUFDQyxPQUFPLENBQUNILEtBQUssQ0FBQyxDQUFDLEVBQUU7SUFDakQsTUFBTSxJQUFJSSxLQUFLLENBQUUsaUVBQWdFLENBQUM7RUFDcEY7RUFDQSxJQUFJQyxhQUFJLENBQUNDLGVBQWUsQ0FBQyxJQUFJLENBQUNQLElBQUksQ0FBQ1EsZUFBZSxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsRUFBRTtJQUNoRSxNQUFNLElBQUlILEtBQUssQ0FBQyxvREFBb0QsQ0FBQztFQUN2RTtFQUVBLElBQUksSUFBSSxDQUFDSSxXQUFXLEVBQUUsRUFBRTtJQUN0QixJQUFJO01BQ0YsT0FBTyxNQUFNLE1BQU0sSUFBSSxDQUFDVCxJQUFJLENBQUNVLE1BQU0sQ0FBQ0MsYUFBYSxDQUFDVixLQUFLLENBQUMsQ0FBQztJQUMzRCxDQUFDLENBQUMsT0FBT1csQ0FBQyxFQUFFO01BQ1YsSUFBSSxDQUFDQyxHQUFHLENBQUNDLEtBQUssQ0FBQ0YsQ0FBQyxDQUFDRyxLQUFLLENBQUM7SUFDekI7RUFDRjtFQUNBLElBQUk7SUFDRixPQUFPLE1BQU0sTUFBTSxJQUFJLENBQUNDLFlBQVksQ0FBQyx3QkFBd0IsRUFBRSxNQUFNLEVBQUU7TUFBQ0MsSUFBSSxFQUFFaEI7SUFBSyxDQUFDLENBQUMsQ0FBQztFQUN4RixDQUFDLENBQUMsT0FBT1csQ0FBQyxFQUFFO0lBQ1YsSUFBSSxDQUFDQyxHQUFHLENBQUNDLEtBQUssQ0FBQ0YsQ0FBQyxDQUFDRyxLQUFLLENBQUM7RUFDekI7RUFFQSxNQUFNLElBQUksQ0FBQ0csaUJBQWlCLENBQUM7SUFDM0JDLElBQUksRUFBRyxRQUFPaEIsZUFBQyxDQUFDQyxPQUFPLENBQUNILEtBQUssQ0FBQyxLQUFLLE1BQU0sR0FBRyxJQUFJLEdBQUcsS0FBTTtFQUMzRCxDQUFDLENBQUM7QUFDSixDQUFDOztBQWtCREgsUUFBUSxDQUFDc0IsbUJBQW1CLEdBQUcsZUFBZUEsbUJBQW1CLEdBQUk7RUFDbkUsSUFBSWQsYUFBSSxDQUFDQyxlQUFlLENBQUMsSUFBSSxDQUFDUCxJQUFJLENBQUNRLGVBQWUsRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLEVBQUU7SUFDaEUsT0FBTyxhQUFhO0VBQ3RCO0VBRUEsSUFBSVAsS0FBSztFQUNULElBQUksSUFBSSxDQUFDUSxXQUFXLEVBQUUsRUFBRTtJQUN0QixJQUFJO01BQ0ZSLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQ0QsSUFBSSxDQUFDVSxNQUFNLENBQUNXLGFBQWEsRUFBRTtJQUNoRCxDQUFDLENBQUMsT0FBT0MsR0FBRyxFQUFFLENBQUM7RUFDakI7RUFDQSxJQUFJLENBQUNyQixLQUFLLEVBQUU7SUFDVkEsS0FBSyxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUNlLFlBQVksQ0FBQyxrQkFBa0IsRUFBRSxLQUFLLENBQUMsRUFBRU8sa0JBQWtCLElBQUksU0FBUztFQUM5RjtFQUNBLE9BQU87SUFDTHRCO0VBQ0YsQ0FBQztBQUNILENBQUM7QUFBQyxlQUlhSCxRQUFRO0FBQUEifQ==
60
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb21tYW5kcyIsIm1vYmlsZVNldEFwcGVhcmFuY2UiLCJvcHRzIiwic3R5bGUiLCJpbmNsdWRlcyIsIl8iLCJ0b0xvd2VyIiwiRXJyb3IiLCJ1dGlsIiwiY29tcGFyZVZlcnNpb25zIiwicGxhdGZvcm1WZXJzaW9uIiwiaXNTaW11bGF0b3IiLCJkZXZpY2UiLCJzZXRBcHBlYXJhbmNlIiwiZSIsImxvZyIsImRlYnVnIiwic3RhY2siLCJwcm94eUNvbW1hbmQiLCJuYW1lIiwibW9iaWxlU2lyaUNvbW1hbmQiLCJ0ZXh0IiwibW9iaWxlR2V0QXBwZWFyYW5jZSIsImdldEFwcGVhcmFuY2UiLCJpZ24iLCJ1c2VySW50ZXJmYWNlU3R5bGUiXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvY29tbWFuZHMvYXBwZWFyYW5jZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgdXRpbCB9IGZyb20gJ2FwcGl1bS9zdXBwb3J0JztcblxuXG5jb25zdCBjb21tYW5kcyA9IHt9O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFNldEFwcGVhcmFuY2VPcHRpb25zXG4gKlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHN0eWxlIC0gQ3VycmVudGx5IHR3byBzdHlsZXMgYXJlIHN1cHBvcnRlZDpcbiAqIC0gZGFya1xuICogLSBsaWdodFxuICovXG5cbi8qKlxuICogU2V0IHRoZSBkZXZpY2UncyBVSSBhcHBlYXJhbmNlIHN0eWxlXG4gKlxuICogQHNpbmNlIGlPUyAxMi4wXG4gKiBAcGFyYW0ge1NldEFwcGVhcmFuY2VPcHRpb25zfSBvcHRzXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgdGhlIGN1cnJlbnQgcGxhdGZvcm0gZG9lcyBub3Qgc3VwcG9ydCBVSVxuICogYXBwZWFyYW5jZSBjaGFuZ2VzXG4gKi9cbmNvbW1hbmRzLm1vYmlsZVNldEFwcGVhcmFuY2UgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVTZXRBcHBlYXJhbmNlIChvcHRzID0ge30pIHtcbiAgY29uc3Qge1xuICAgIHN0eWxlLFxuICB9ID0gb3B0cztcbiAgaWYgKCFbJ2xpZ2h0JywgJ2RhcmsnXS5pbmNsdWRlcyhfLnRvTG93ZXIoc3R5bGUpKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVGhlICdzdHlsZScgdmFsdWUgaXMgZXhwZWN0ZWQgdG8gZXF1YWwgZWl0aGVyICdsaWdodCcgb3IgJ2RhcmsnYCk7XG4gIH1cbiAgaWYgKHV0aWwuY29tcGFyZVZlcnNpb25zKHRoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb24sICc8JywgJzEyLjAnKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ2hhbmdpbmcgYXBwZWFyYW5jZSBpcyBvbmx5IHN1cHBvcnRlZCBzaW5jZSBpT1MgMTInKTtcbiAgfVxuXG4gIGlmICh0aGlzLmlzU2ltdWxhdG9yKCkpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHZvaWQgKGF3YWl0IHRoaXMub3B0cy5kZXZpY2Uuc2V0QXBwZWFyYW5jZShzdHlsZSkpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGUuc3RhY2spO1xuICAgIH1cbiAgfVxuICB0cnkge1xuICAgIHJldHVybiB2b2lkIChhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnL3dkYS9kZXZpY2UvYXBwZWFyYW5jZScsICdQT1NUJywge25hbWU6IHN0eWxlfSkpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhpcy5sb2cuZGVidWcoZS5zdGFjayk7XG4gIH1cbiAgLy8gRmFsbCBiYWNrIHRvIHRoZSB1Z2x5IFNpcmkgd29ya2Fyb3VuZCBpZiB0aGUgY3VycmVudCBTREsgaXMgdG9vIG9sZFxuICBhd2FpdCB0aGlzLm1vYmlsZVNpcmlDb21tYW5kKHtcbiAgICB0ZXh0OiBgVHVybiAke18udG9Mb3dlcihzdHlsZSkgPT09ICdkYXJrJyA/ICdvbicgOiAnb2ZmJ30gZGFyayBtb2RlYCxcbiAgfSk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEFwcGVhcmFuY2VcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBzdHlsZSAtIFRoZSBkZXZpY2UncyBVSSBhcHBlYXJhbmNlIHZhbHVlLlxuICogVGhpcyBjb3VsZCBiZSBvbmUgb2Y6XG4gKiAtIGBsaWdodGBcbiAqIC0gYGRhcmtgXG4gKiAtIGB1bmtub3duYFxuICogLSBgdW5zdXBwb3J0ZWRgXG4gKi9cblxuLyoqXG4gKiBHZXQgdGhlIGRldmljZSdzIFVJIGFwcGVhcmFuY2Ugc3R5bGUuXG4gKlxuICogQHNpbmNlIFhjb2RlIFNESyAxMVxuICogQHJldHVybnMge0FwcGVhcmFuY2V9XG4gKi9cbmNvbW1hbmRzLm1vYmlsZUdldEFwcGVhcmFuY2UgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVHZXRBcHBlYXJhbmNlICgpIHtcbiAgaWYgKHV0aWwuY29tcGFyZVZlcnNpb25zKHRoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb24sICc8JywgJzEyLjAnKSkge1xuICAgIHJldHVybiAndW5zdXBwb3J0ZWQnO1xuICB9XG5cbiAgbGV0IHN0eWxlO1xuICBpZiAodGhpcy5pc1NpbXVsYXRvcigpKSB7XG4gICAgdHJ5IHtcbiAgICAgIHN0eWxlID0gYXdhaXQgdGhpcy5vcHRzLmRldmljZS5nZXRBcHBlYXJhbmNlKCk7XG4gICAgfSBjYXRjaCAoaWduKSB7fVxuICB9XG4gIGlmICghc3R5bGUpIHtcbiAgICBzdHlsZSA9IChhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnL3dkYS9kZXZpY2UvaW5mbycsICdHRVQnKSkudXNlckludGVyZmFjZVN0eWxlIHx8ICd1bmtub3duJztcbiAgfVxuICByZXR1cm4ge1xuICAgIHN0eWxlLFxuICB9O1xufTtcblxuXG5leHBvcnQgeyBjb21tYW5kcyB9O1xuZXhwb3J0IGRlZmF1bHQgY29tbWFuZHM7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7QUFDQTtBQUdBLE1BQU1BLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFBQztBQWtCcEJBLFFBQVEsQ0FBQ0MsbUJBQW1CLEdBQUcsZUFBZUEsbUJBQW1CLENBQUVDLElBQUksR0FBRyxDQUFDLENBQUMsRUFBRTtFQUM1RSxNQUFNO0lBQ0pDO0VBQ0YsQ0FBQyxHQUFHRCxJQUFJO0VBQ1IsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDRSxRQUFRLENBQUNDLGVBQUMsQ0FBQ0MsT0FBTyxDQUFDSCxLQUFLLENBQUMsQ0FBQyxFQUFFO0lBQ2pELE1BQU0sSUFBSUksS0FBSyxDQUFFLGlFQUFnRSxDQUFDO0VBQ3BGO0VBQ0EsSUFBSUMsYUFBSSxDQUFDQyxlQUFlLENBQUMsSUFBSSxDQUFDUCxJQUFJLENBQUNRLGVBQWUsRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLEVBQUU7SUFDaEUsTUFBTSxJQUFJSCxLQUFLLENBQUMsb0RBQW9ELENBQUM7RUFDdkU7RUFFQSxJQUFJLElBQUksQ0FBQ0ksV0FBVyxFQUFFLEVBQUU7SUFDdEIsSUFBSTtNQUNGLE9BQU8sTUFBTSxNQUFNLElBQUksQ0FBQ1QsSUFBSSxDQUFDVSxNQUFNLENBQUNDLGFBQWEsQ0FBQ1YsS0FBSyxDQUFDLENBQUM7SUFDM0QsQ0FBQyxDQUFDLE9BQU9XLENBQUMsRUFBRTtNQUNWLElBQUksQ0FBQ0MsR0FBRyxDQUFDQyxLQUFLLENBQUNGLENBQUMsQ0FBQ0csS0FBSyxDQUFDO0lBQ3pCO0VBQ0Y7RUFDQSxJQUFJO0lBQ0YsT0FBTyxNQUFNLE1BQU0sSUFBSSxDQUFDQyxZQUFZLENBQUMsd0JBQXdCLEVBQUUsTUFBTSxFQUFFO01BQUNDLElBQUksRUFBRWhCO0lBQUssQ0FBQyxDQUFDLENBQUM7RUFDeEYsQ0FBQyxDQUFDLE9BQU9XLENBQUMsRUFBRTtJQUNWLElBQUksQ0FBQ0MsR0FBRyxDQUFDQyxLQUFLLENBQUNGLENBQUMsQ0FBQ0csS0FBSyxDQUFDO0VBQ3pCO0VBRUEsTUFBTSxJQUFJLENBQUNHLGlCQUFpQixDQUFDO0lBQzNCQyxJQUFJLEVBQUcsUUFBT2hCLGVBQUMsQ0FBQ0MsT0FBTyxDQUFDSCxLQUFLLENBQUMsS0FBSyxNQUFNLEdBQUcsSUFBSSxHQUFHLEtBQU07RUFDM0QsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQWtCREgsUUFBUSxDQUFDc0IsbUJBQW1CLEdBQUcsZUFBZUEsbUJBQW1CLEdBQUk7RUFDbkUsSUFBSWQsYUFBSSxDQUFDQyxlQUFlLENBQUMsSUFBSSxDQUFDUCxJQUFJLENBQUNRLGVBQWUsRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLEVBQUU7SUFDaEUsT0FBTyxhQUFhO0VBQ3RCO0VBRUEsSUFBSVAsS0FBSztFQUNULElBQUksSUFBSSxDQUFDUSxXQUFXLEVBQUUsRUFBRTtJQUN0QixJQUFJO01BQ0ZSLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQ0QsSUFBSSxDQUFDVSxNQUFNLENBQUNXLGFBQWEsRUFBRTtJQUNoRCxDQUFDLENBQUMsT0FBT0MsR0FBRyxFQUFFLENBQUM7RUFDakI7RUFDQSxJQUFJLENBQUNyQixLQUFLLEVBQUU7SUFDVkEsS0FBSyxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUNlLFlBQVksQ0FBQyxrQkFBa0IsRUFBRSxLQUFLLENBQUMsRUFBRU8sa0JBQWtCLElBQUksU0FBUztFQUM5RjtFQUNBLE9BQU87SUFDTHRCO0VBQ0YsQ0FBQztBQUNILENBQUM7QUFBQyxlQUlhSCxRQUFRO0FBQUEifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"appearance.js","names":["commands","mobileSetAppearance","opts","style","includes","_","toLower","Error","util","compareVersions","platformVersion","isSimulator","device","setAppearance","e","log","debug","stack","proxyCommand","name","mobileSiriCommand","text","mobileGetAppearance","getAppearance","ign","userInterfaceStyle"],"sources":["../../../lib/commands/appearance.js"],"sourcesContent":["import _ from 'lodash';\nimport { util } from 'appium/support';\n\n\nconst commands = {};\n\n/**\n * @typedef {Object} SetAppearanceOptions\n *\n * @property {string} style - Currently two styles are supported:\n * - dark\n * - light\n */\n\n/**\n * Set the device's UI appearance style\n *\n * @since iOS 12.0\n * @param {SetAppearanceOptions} opts\n * @throws {Error} if the current platform does not support UI\n * appearance changes\n */\ncommands.mobileSetAppearance = async function mobileSetAppearance (opts = {}) {\n const {\n style,\n } = opts;\n if (!['light', 'dark'].includes(_.toLower(style))) {\n throw new Error(`The 'style' value is expected to equal either 'light' or 'dark'`);\n }\n if (util.compareVersions(this.opts.platformVersion, '<', '12.0')) {\n throw new Error('Changing appearance is only supported since iOS 12');\n }\n\n if (this.isSimulator()) {\n try {\n return void (await this.opts.device.setAppearance(style));\n } catch (e) {\n this.log.debug(e.stack);\n }\n }\n try {\n return void (await this.proxyCommand('/wda/device/appearance', 'POST', {name: style}));\n } catch (e) {\n this.log.debug(e.stack);\n }\n // Fall back to the ugly Siri workaround if the current SDK is too old\n await this.mobileSiriCommand({\n text: `Turn ${_.toLower(style) === 'dark' ? 'on' : 'off'} dark mode`,\n });\n};\n\n/**\n * @typedef {Object} Appearance\n * @property {string} style - The device's UI appearance value.\n * This could be one of:\n * - `light`\n * - `dark`\n * - `unknown`\n * - `unsupported`\n */\n\n/**\n * Get the device's UI appearance style.\n *\n * @since Xcode SDK 11\n * @returns {Appearance}\n */\ncommands.mobileGetAppearance = async function mobileGetAppearance () {\n if (util.compareVersions(this.opts.platformVersion, '<', '12.0')) {\n return 'unsupported';\n }\n\n let style;\n if (this.isSimulator()) {\n try {\n style = await this.opts.device.getAppearance();\n } catch (ign) {}\n }\n if (!style) {\n style = (await this.proxyCommand('/wda/device/info', 'GET')).userInterfaceStyle || 'unknown';\n }\n return {\n style,\n };\n};\n\n\nexport { commands };\nexport default commands;\n"],"mappings":";;;;;;;;AAAA;AACA;AAGA,MAAMA,QAAQ,GAAG,CAAC,CAAC;;AAAC;;AAkBpBA,QAAQ,CAACC,mBAAmB,GAAG,eAAeA,mBAAmB,CAAEC,IAAI,GAAG,CAAC,CAAC,EAAE;EAC5E,MAAM;IACJC;EACF,CAAC,GAAGD,IAAI;EACR,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,CAACE,QAAQ,CAACC,eAAC,CAACC,OAAO,CAACH,KAAK,CAAC,CAAC,EAAE;IACjD,MAAM,IAAII,KAAK,CAAE,iEAAgE,CAAC;EACpF;EACA,IAAIC,aAAI,CAACC,eAAe,CAAC,IAAI,CAACP,IAAI,CAACQ,eAAe,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE;IAChE,MAAM,IAAIH,KAAK,CAAC,oDAAoD,CAAC;EACvE;EAEA,IAAI,IAAI,CAACI,WAAW,EAAE,EAAE;IACtB,IAAI;MACF,OAAO,MAAM,MAAM,IAAI,CAACT,IAAI,CAACU,MAAM,CAACC,aAAa,CAACV,KAAK,CAAC,CAAC;IAC3D,CAAC,CAAC,OAAOW,CAAC,EAAE;MACV,IAAI,CAACC,GAAG,CAACC,KAAK,CAACF,CAAC,CAACG,KAAK,CAAC;IACzB;EACF;EACA,IAAI;IACF,OAAO,MAAM,MAAM,IAAI,CAACC,YAAY,CAAC,wBAAwB,EAAE,MAAM,EAAE;MAACC,IAAI,EAAEhB;IAAK,CAAC,CAAC,CAAC;EACxF,CAAC,CAAC,OAAOW,CAAC,EAAE;IACV,IAAI,CAACC,GAAG,CAACC,KAAK,CAACF,CAAC,CAACG,KAAK,CAAC;EACzB;EAEA,MAAM,IAAI,CAACG,iBAAiB,CAAC;IAC3BC,IAAI,EAAG,QAAOhB,eAAC,CAACC,OAAO,CAACH,KAAK,CAAC,KAAK,MAAM,GAAG,IAAI,GAAG,KAAM;EAC3D,CAAC,CAAC;AACJ,CAAC;;AAkBDH,QAAQ,CAACsB,mBAAmB,GAAG,eAAeA,mBAAmB,GAAI;EACnE,IAAId,aAAI,CAACC,eAAe,CAAC,IAAI,CAACP,IAAI,CAACQ,eAAe,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE;IAChE,OAAO,aAAa;EACtB;EAEA,IAAIP,KAAK;EACT,IAAI,IAAI,CAACQ,WAAW,EAAE,EAAE;IACtB,IAAI;MACFR,KAAK,GAAG,MAAM,IAAI,CAACD,IAAI,CAACU,MAAM,CAACW,aAAa,EAAE;IAChD,CAAC,CAAC,OAAOC,GAAG,EAAE,CAAC;EACjB;EACA,IAAI,CAACrB,KAAK,EAAE;IACVA,KAAK,GAAG,CAAC,MAAM,IAAI,CAACe,YAAY,CAAC,kBAAkB,EAAE,KAAK,CAAC,EAAEO,kBAAkB,IAAI,SAAS;EAC9F;EACA,OAAO;IACLtB;EACF,CAAC;AACH,CAAC;AAAC,eAIaH,QAAQ;AAAA"}
1
+ {"version":3,"file":"appearance.js","names":["commands","mobileSetAppearance","opts","style","includes","_","toLower","Error","util","compareVersions","platformVersion","isSimulator","device","setAppearance","e","log","debug","stack","proxyCommand","name","mobileSiriCommand","text","mobileGetAppearance","getAppearance","ign","userInterfaceStyle"],"sources":["../../../lib/commands/appearance.js"],"sourcesContent":["import _ from 'lodash';\nimport { util } from 'appium/support';\n\n\nconst commands = {};\n\n/**\n * @typedef {Object} SetAppearanceOptions\n *\n * @property {string} style - Currently two styles are supported:\n * - dark\n * - light\n */\n\n/**\n * Set the device's UI appearance style\n *\n * @since iOS 12.0\n * @param {SetAppearanceOptions} opts\n * @throws {Error} if the current platform does not support UI\n * appearance changes\n */\ncommands.mobileSetAppearance = async function mobileSetAppearance (opts = {}) {\n const {\n style,\n } = opts;\n if (!['light', 'dark'].includes(_.toLower(style))) {\n throw new Error(`The 'style' value is expected to equal either 'light' or 'dark'`);\n }\n if (util.compareVersions(this.opts.platformVersion, '<', '12.0')) {\n throw new Error('Changing appearance is only supported since iOS 12');\n }\n\n if (this.isSimulator()) {\n try {\n return void (await this.opts.device.setAppearance(style));\n } catch (e) {\n this.log.debug(e.stack);\n }\n }\n try {\n return void (await this.proxyCommand('/wda/device/appearance', 'POST', {name: style}));\n } catch (e) {\n this.log.debug(e.stack);\n }\n // Fall back to the ugly Siri workaround if the current SDK is too old\n await this.mobileSiriCommand({\n text: `Turn ${_.toLower(style) === 'dark' ? 'on' : 'off'} dark mode`,\n });\n};\n\n/**\n * @typedef {Object} Appearance\n * @property {string} style - The device's UI appearance value.\n * This could be one of:\n * - `light`\n * - `dark`\n * - `unknown`\n * - `unsupported`\n */\n\n/**\n * Get the device's UI appearance style.\n *\n * @since Xcode SDK 11\n * @returns {Appearance}\n */\ncommands.mobileGetAppearance = async function mobileGetAppearance () {\n if (util.compareVersions(this.opts.platformVersion, '<', '12.0')) {\n return 'unsupported';\n }\n\n let style;\n if (this.isSimulator()) {\n try {\n style = await this.opts.device.getAppearance();\n } catch (ign) {}\n }\n if (!style) {\n style = (await this.proxyCommand('/wda/device/info', 'GET')).userInterfaceStyle || 'unknown';\n }\n return {\n style,\n };\n};\n\n\nexport { commands };\nexport default commands;\n"],"mappings":";;;;;;;;AAAA;AACA;AAGA,MAAMA,QAAQ,GAAG,CAAC,CAAC;AAAC;AAkBpBA,QAAQ,CAACC,mBAAmB,GAAG,eAAeA,mBAAmB,CAAEC,IAAI,GAAG,CAAC,CAAC,EAAE;EAC5E,MAAM;IACJC;EACF,CAAC,GAAGD,IAAI;EACR,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,CAACE,QAAQ,CAACC,eAAC,CAACC,OAAO,CAACH,KAAK,CAAC,CAAC,EAAE;IACjD,MAAM,IAAII,KAAK,CAAE,iEAAgE,CAAC;EACpF;EACA,IAAIC,aAAI,CAACC,eAAe,CAAC,IAAI,CAACP,IAAI,CAACQ,eAAe,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE;IAChE,MAAM,IAAIH,KAAK,CAAC,oDAAoD,CAAC;EACvE;EAEA,IAAI,IAAI,CAACI,WAAW,EAAE,EAAE;IACtB,IAAI;MACF,OAAO,MAAM,MAAM,IAAI,CAACT,IAAI,CAACU,MAAM,CAACC,aAAa,CAACV,KAAK,CAAC,CAAC;IAC3D,CAAC,CAAC,OAAOW,CAAC,EAAE;MACV,IAAI,CAACC,GAAG,CAACC,KAAK,CAACF,CAAC,CAACG,KAAK,CAAC;IACzB;EACF;EACA,IAAI;IACF,OAAO,MAAM,MAAM,IAAI,CAACC,YAAY,CAAC,wBAAwB,EAAE,MAAM,EAAE;MAACC,IAAI,EAAEhB;IAAK,CAAC,CAAC,CAAC;EACxF,CAAC,CAAC,OAAOW,CAAC,EAAE;IACV,IAAI,CAACC,GAAG,CAACC,KAAK,CAACF,CAAC,CAACG,KAAK,CAAC;EACzB;EAEA,MAAM,IAAI,CAACG,iBAAiB,CAAC;IAC3BC,IAAI,EAAG,QAAOhB,eAAC,CAACC,OAAO,CAACH,KAAK,CAAC,KAAK,MAAM,GAAG,IAAI,GAAG,KAAM;EAC3D,CAAC,CAAC;AACJ,CAAC;AAkBDH,QAAQ,CAACsB,mBAAmB,GAAG,eAAeA,mBAAmB,GAAI;EACnE,IAAId,aAAI,CAACC,eAAe,CAAC,IAAI,CAACP,IAAI,CAACQ,eAAe,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE;IAChE,OAAO,aAAa;EACtB;EAEA,IAAIP,KAAK;EACT,IAAI,IAAI,CAACQ,WAAW,EAAE,EAAE;IACtB,IAAI;MACFR,KAAK,GAAG,MAAM,IAAI,CAACD,IAAI,CAACU,MAAM,CAACW,aAAa,EAAE;IAChD,CAAC,CAAC,OAAOC,GAAG,EAAE,CAAC;EACjB;EACA,IAAI,CAACrB,KAAK,EAAE;IACVA,KAAK,GAAG,CAAC,MAAM,IAAI,CAACe,YAAY,CAAC,kBAAkB,EAAE,KAAK,CAAC,EAAEO,kBAAkB,IAAI,SAAS;EAC9F;EACA,OAAO;IACLtB;EACF,CAAC;AACH,CAAC;AAAC,eAIaH,QAAQ;AAAA"}