appium 2.0.0-beta.9 → 2.0.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (208) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +149 -58
  3. package/build/lib/appium.d.ts +229 -0
  4. package/build/lib/appium.d.ts.map +1 -0
  5. package/build/lib/appium.js +677 -449
  6. package/build/lib/appium.js.map +1 -0
  7. package/build/lib/cli/args.d.ts +17 -0
  8. package/build/lib/cli/args.d.ts.map +1 -0
  9. package/build/lib/cli/args.js +263 -300
  10. package/build/lib/cli/args.js.map +1 -0
  11. package/build/lib/cli/driver-command.d.ts +102 -0
  12. package/build/lib/cli/driver-command.d.ts.map +1 -0
  13. package/build/lib/cli/driver-command.js +131 -81
  14. package/build/lib/cli/driver-command.js.map +1 -0
  15. package/build/lib/cli/extension-command.d.ts +402 -0
  16. package/build/lib/cli/extension-command.d.ts.map +1 -0
  17. package/build/lib/cli/extension-command.js +799 -383
  18. package/build/lib/cli/extension-command.js.map +1 -0
  19. package/build/lib/cli/extension.d.ts +23 -0
  20. package/build/lib/cli/extension.d.ts.map +1 -0
  21. package/build/lib/cli/extension.js +70 -68
  22. package/build/lib/cli/extension.js.map +1 -0
  23. package/build/lib/cli/parser.d.ts +84 -0
  24. package/build/lib/cli/parser.d.ts.map +1 -0
  25. package/build/lib/cli/parser.js +252 -148
  26. package/build/lib/cli/parser.js.map +1 -0
  27. package/build/lib/cli/plugin-command.d.ts +99 -0
  28. package/build/lib/cli/plugin-command.d.ts.map +1 -0
  29. package/build/lib/cli/plugin-command.js +125 -81
  30. package/build/lib/cli/plugin-command.js.map +1 -0
  31. package/build/lib/cli/utils.d.ts +29 -0
  32. package/build/lib/cli/utils.d.ts.map +1 -0
  33. package/build/lib/cli/utils.js +72 -51
  34. package/build/lib/cli/utils.js.map +1 -0
  35. package/build/lib/config-file.d.ts +100 -0
  36. package/build/lib/config-file.d.ts.map +1 -0
  37. package/build/lib/config-file.js +207 -0
  38. package/build/lib/config-file.js.map +1 -0
  39. package/build/lib/config.d.ts +49 -0
  40. package/build/lib/config.d.ts.map +1 -0
  41. package/build/lib/config.js +262 -223
  42. package/build/lib/config.js.map +1 -0
  43. package/build/lib/constants.d.ts +56 -0
  44. package/build/lib/constants.d.ts.map +1 -0
  45. package/build/lib/constants.js +73 -0
  46. package/build/lib/constants.js.map +1 -0
  47. package/build/lib/extension/driver-config.d.ts +82 -0
  48. package/build/lib/extension/driver-config.d.ts.map +1 -0
  49. package/build/lib/extension/driver-config.js +210 -0
  50. package/build/lib/extension/driver-config.js.map +1 -0
  51. package/build/lib/extension/extension-config.d.ts +270 -0
  52. package/build/lib/extension/extension-config.d.ts.map +1 -0
  53. package/build/lib/extension/extension-config.js +601 -0
  54. package/build/lib/extension/extension-config.js.map +1 -0
  55. package/build/lib/extension/index.d.ts +48 -0
  56. package/build/lib/extension/index.d.ts.map +1 -0
  57. package/build/lib/extension/index.js +105 -0
  58. package/build/lib/extension/index.js.map +1 -0
  59. package/build/lib/extension/manifest-migrations.d.ts +27 -0
  60. package/build/lib/extension/manifest-migrations.d.ts.map +1 -0
  61. package/build/lib/extension/manifest-migrations.js +134 -0
  62. package/build/lib/extension/manifest-migrations.js.map +1 -0
  63. package/build/lib/extension/manifest.d.ts +145 -0
  64. package/build/lib/extension/manifest.d.ts.map +1 -0
  65. package/build/lib/extension/manifest.js +528 -0
  66. package/build/lib/extension/manifest.js.map +1 -0
  67. package/build/lib/extension/package-changed.d.ts +11 -0
  68. package/build/lib/extension/package-changed.d.ts.map +1 -0
  69. package/build/lib/extension/package-changed.js +62 -0
  70. package/build/lib/extension/package-changed.js.map +1 -0
  71. package/build/lib/extension/plugin-config.d.ts +56 -0
  72. package/build/lib/extension/plugin-config.d.ts.map +1 -0
  73. package/build/lib/extension/plugin-config.js +102 -0
  74. package/build/lib/extension/plugin-config.js.map +1 -0
  75. package/build/lib/grid-register.d.ts +10 -0
  76. package/build/lib/grid-register.d.ts.map +1 -0
  77. package/build/lib/grid-register.js +122 -144
  78. package/build/lib/grid-register.js.map +1 -0
  79. package/build/lib/logger.d.ts +3 -0
  80. package/build/lib/logger.d.ts.map +1 -0
  81. package/build/lib/logger.js +5 -17
  82. package/build/lib/logger.js.map +1 -0
  83. package/build/lib/logsink.d.ts +4 -0
  84. package/build/lib/logsink.d.ts.map +1 -0
  85. package/build/lib/logsink.js +189 -184
  86. package/build/lib/logsink.js.map +1 -0
  87. package/build/lib/main.d.ts +62 -0
  88. package/build/lib/main.d.ts.map +1 -0
  89. package/build/lib/main.js +406 -234
  90. package/build/lib/main.js.map +1 -0
  91. package/build/lib/schema/arg-spec.d.ts +143 -0
  92. package/build/lib/schema/arg-spec.d.ts.map +1 -0
  93. package/build/lib/schema/arg-spec.js +164 -0
  94. package/build/lib/schema/arg-spec.js.map +1 -0
  95. package/build/lib/schema/cli-args.d.ts +19 -0
  96. package/build/lib/schema/cli-args.d.ts.map +1 -0
  97. package/build/lib/schema/cli-args.js +220 -0
  98. package/build/lib/schema/cli-args.js.map +1 -0
  99. package/build/lib/schema/cli-transformers.d.ts +5 -0
  100. package/build/lib/schema/cli-transformers.d.ts.map +1 -0
  101. package/build/lib/schema/cli-transformers.js +124 -0
  102. package/build/lib/schema/cli-transformers.js.map +1 -0
  103. package/build/lib/schema/index.d.ts +3 -0
  104. package/build/lib/schema/index.d.ts.map +1 -0
  105. package/build/lib/schema/index.js +19 -0
  106. package/build/lib/schema/index.js.map +1 -0
  107. package/build/lib/schema/keywords.d.ts +24 -0
  108. package/build/lib/schema/keywords.d.ts.map +1 -0
  109. package/build/lib/schema/keywords.js +128 -0
  110. package/build/lib/schema/keywords.js.map +1 -0
  111. package/build/lib/schema/schema.d.ts +260 -0
  112. package/build/lib/schema/schema.d.ts.map +1 -0
  113. package/build/lib/schema/schema.js +640 -0
  114. package/build/lib/schema/schema.js.map +1 -0
  115. package/build/lib/utils.d.ts +276 -0
  116. package/build/lib/utils.d.ts.map +1 -0
  117. package/build/lib/utils.js +372 -192
  118. package/build/lib/utils.js.map +1 -0
  119. package/build/types/cli.d.ts +134 -0
  120. package/build/types/cli.d.ts.map +1 -0
  121. package/build/types/cli.js +3 -0
  122. package/build/types/cli.js.map +1 -0
  123. package/build/types/index.d.ts +15 -0
  124. package/build/types/index.d.ts.map +1 -0
  125. package/build/types/index.js +19 -0
  126. package/build/types/index.js.map +1 -0
  127. package/build/types/manifest/base.d.ts +135 -0
  128. package/build/types/manifest/base.d.ts.map +1 -0
  129. package/build/types/manifest/base.js +3 -0
  130. package/build/types/manifest/base.js.map +1 -0
  131. package/build/types/manifest/index.d.ts +21 -0
  132. package/build/types/manifest/index.d.ts.map +1 -0
  133. package/build/types/manifest/index.js +42 -0
  134. package/build/types/manifest/index.js.map +1 -0
  135. package/build/types/manifest/v3.d.ts +139 -0
  136. package/build/types/manifest/v3.d.ts.map +1 -0
  137. package/build/types/manifest/v3.js +3 -0
  138. package/build/types/manifest/v3.js.map +1 -0
  139. package/build/types/manifest/v4.d.ts +139 -0
  140. package/build/types/manifest/v4.d.ts.map +1 -0
  141. package/build/types/manifest/v4.js +3 -0
  142. package/build/types/manifest/v4.js.map +1 -0
  143. package/driver.d.ts +1 -0
  144. package/driver.js +14 -0
  145. package/index.js +11 -0
  146. package/lib/appium.js +545 -188
  147. package/lib/cli/args.js +275 -407
  148. package/lib/cli/driver-command.js +132 -24
  149. package/lib/cli/extension-command.js +751 -272
  150. package/lib/cli/extension.js +38 -19
  151. package/lib/cli/parser.js +267 -95
  152. package/lib/cli/plugin-command.js +122 -22
  153. package/lib/cli/utils.js +24 -10
  154. package/lib/config-file.js +220 -0
  155. package/lib/config.js +243 -132
  156. package/lib/constants.js +79 -0
  157. package/lib/extension/driver-config.js +247 -0
  158. package/lib/extension/extension-config.js +709 -0
  159. package/lib/extension/index.js +116 -0
  160. package/lib/extension/manifest-migrations.js +136 -0
  161. package/lib/extension/manifest.js +580 -0
  162. package/lib/extension/package-changed.js +64 -0
  163. package/lib/extension/plugin-config.js +112 -0
  164. package/lib/grid-register.js +49 -35
  165. package/lib/logger.js +1 -2
  166. package/lib/logsink.js +59 -36
  167. package/lib/main.js +392 -104
  168. package/lib/schema/arg-spec.js +229 -0
  169. package/lib/schema/cli-args.js +241 -0
  170. package/lib/schema/cli-transformers.js +119 -0
  171. package/lib/schema/index.js +2 -0
  172. package/lib/schema/keywords.js +136 -0
  173. package/lib/schema/schema.js +725 -0
  174. package/lib/utils.js +310 -89
  175. package/package.json +84 -84
  176. package/plugin.d.ts +1 -0
  177. package/plugin.js +13 -0
  178. package/scripts/autoinstall-extensions.js +243 -0
  179. package/support.d.ts +1 -0
  180. package/support.js +13 -0
  181. package/tsconfig.json +25 -0
  182. package/types/cli.ts +193 -0
  183. package/types/index.ts +20 -0
  184. package/types/manifest/README.md +30 -0
  185. package/types/manifest/base.ts +158 -0
  186. package/types/manifest/index.ts +28 -0
  187. package/types/manifest/v3.ts +161 -0
  188. package/types/manifest/v4.ts +161 -0
  189. package/CHANGELOG.md +0 -3669
  190. package/bin/ios-webkit-debug-proxy-launcher.js +0 -71
  191. package/build/lib/cli/argparse-actions.js +0 -104
  192. package/build/lib/cli/npm.js +0 -207
  193. package/build/lib/cli/parser-helpers.js +0 -93
  194. package/build/lib/driver-config.js +0 -77
  195. package/build/lib/drivers.js +0 -99
  196. package/build/lib/extension-config.js +0 -253
  197. package/build/lib/plugin-config.js +0 -59
  198. package/build/lib/plugins.js +0 -16
  199. package/build/postinstall.js +0 -90
  200. package/lib/cli/argparse-actions.js +0 -77
  201. package/lib/cli/npm.js +0 -183
  202. package/lib/cli/parser-helpers.js +0 -91
  203. package/lib/driver-config.js +0 -46
  204. package/lib/drivers.js +0 -84
  205. package/lib/extension-config.js +0 -209
  206. package/lib/plugin-config.js +0 -34
  207. package/lib/plugins.js +0 -11
  208. package/postinstall.js +0 -71
@@ -1,99 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports.findMatchingDriver = findMatchingDriver;
9
- exports.KNOWN_DRIVERS = void 0;
10
-
11
- require("source-map-support/register");
12
-
13
- var _lodash = _interopRequireDefault(require("lodash"));
14
-
15
- var _logger = _interopRequireDefault(require("./logger"));
16
-
17
- const KNOWN_DRIVERS = {
18
- uiautomator2: 'appium-uiautomator2-driver',
19
- xcuitest: 'appium-xcuitest-driver',
20
- youiengine: 'appium-youiengine-driver',
21
- windows: 'appium-windows-driver',
22
- mac: 'appium-mac-driver',
23
- mac2: 'appium-mac2-driver',
24
- espresso: 'appium-espresso-driver',
25
- tizen: 'appium-tizen-driver',
26
- flutter: 'appium-flutter-driver',
27
- safari: 'appium-safari-driver',
28
- gecko: 'appium-geckodriver'
29
- };
30
- exports.KNOWN_DRIVERS = KNOWN_DRIVERS;
31
-
32
- function getDriverBySupport(drivers, matchAutomationName, matchPlatformName) {
33
- for (const [driverName, driverData] of _lodash.default.toPairs(drivers)) {
34
- const {
35
- automationName,
36
- platformNames
37
- } = driverData;
38
- const aNameMatches = automationName.toLowerCase() === matchAutomationName.toLowerCase();
39
-
40
- const pNameMatches = _lodash.default.includes(platformNames.map(_lodash.default.toLower), matchPlatformName.toLowerCase());
41
-
42
- if (aNameMatches && pNameMatches) {
43
- return {
44
- driverName,
45
- ...driverData
46
- };
47
- }
48
-
49
- if (aNameMatches) {
50
- throw new Error(`Driver '${driverName}' supports automationName ` + `'${automationName}', but Appium could not find ` + `support for platformName '${matchPlatformName}'. Supported ` + `platformNames are: ` + JSON.stringify(platformNames));
51
- }
52
- }
53
-
54
- throw new Error(`Could not find installed driver to support given caps`);
55
- }
56
-
57
- function findMatchingDriver(config, {
58
- automationName,
59
- platformName
60
- }) {
61
- if (!_lodash.default.isString(platformName)) {
62
- throw new Error('You must include a platformName capability');
63
- }
64
-
65
- if (!_lodash.default.isString(automationName)) {
66
- throw new Error('You must include an automationName capability');
67
- }
68
-
69
- _logger.default.info(`Attempting to find matching driver for automationName ` + `'${automationName}' and platformName '${platformName}'`);
70
-
71
- try {
72
- const {
73
- driverName,
74
- mainClass,
75
- version
76
- } = getDriverBySupport(config.installedExtensions, automationName, platformName);
77
-
78
- _logger.default.info(`The '${driverName}' driver was installed and matched caps.`);
79
-
80
- _logger.default.info(`Will require it at ${config.getExtensionRequirePath(driverName)}`);
81
-
82
- const driver = config.require(driverName);
83
-
84
- if (!driver) {
85
- throw new Error(`MainClass ${mainClass} did not result in a driver object`);
86
- }
87
-
88
- return {
89
- driver,
90
- version
91
- };
92
- } catch (err) {
93
- const msg = `Could not find a driver for automationName ` + `'${automationName}' and platformName ${platformName}'. ` + `Have you installed a driver that supports those ` + `capabilities? Run 'appium driver list --installed' to see. ` + `(Lower-level error: ${err.message})`;
94
- throw new Error(msg);
95
- }
96
- }require('source-map-support').install();
97
-
98
-
99
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9kcml2ZXJzLmpzIl0sIm5hbWVzIjpbIktOT1dOX0RSSVZFUlMiLCJ1aWF1dG9tYXRvcjIiLCJ4Y3VpdGVzdCIsInlvdWllbmdpbmUiLCJ3aW5kb3dzIiwibWFjIiwibWFjMiIsImVzcHJlc3NvIiwidGl6ZW4iLCJmbHV0dGVyIiwic2FmYXJpIiwiZ2Vja28iLCJnZXREcml2ZXJCeVN1cHBvcnQiLCJkcml2ZXJzIiwibWF0Y2hBdXRvbWF0aW9uTmFtZSIsIm1hdGNoUGxhdGZvcm1OYW1lIiwiZHJpdmVyTmFtZSIsImRyaXZlckRhdGEiLCJfIiwidG9QYWlycyIsImF1dG9tYXRpb25OYW1lIiwicGxhdGZvcm1OYW1lcyIsImFOYW1lTWF0Y2hlcyIsInRvTG93ZXJDYXNlIiwicE5hbWVNYXRjaGVzIiwiaW5jbHVkZXMiLCJtYXAiLCJ0b0xvd2VyIiwiRXJyb3IiLCJKU09OIiwic3RyaW5naWZ5IiwiZmluZE1hdGNoaW5nRHJpdmVyIiwiY29uZmlnIiwicGxhdGZvcm1OYW1lIiwiaXNTdHJpbmciLCJsb2ciLCJpbmZvIiwibWFpbkNsYXNzIiwidmVyc2lvbiIsImluc3RhbGxlZEV4dGVuc2lvbnMiLCJnZXRFeHRlbnNpb25SZXF1aXJlUGF0aCIsImRyaXZlciIsInJlcXVpcmUiLCJlcnIiLCJtc2ciLCJtZXNzYWdlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFPQSxNQUFNQSxhQUFhLEdBQUc7QUFDcEJDLEVBQUFBLFlBQVksRUFBRSw0QkFETTtBQUVwQkMsRUFBQUEsUUFBUSxFQUFFLHdCQUZVO0FBR3BCQyxFQUFBQSxVQUFVLEVBQUUsMEJBSFE7QUFJcEJDLEVBQUFBLE9BQU8sRUFBRSx1QkFKVztBQUtwQkMsRUFBQUEsR0FBRyxFQUFFLG1CQUxlO0FBTXBCQyxFQUFBQSxJQUFJLEVBQUUsb0JBTmM7QUFPcEJDLEVBQUFBLFFBQVEsRUFBRSx3QkFQVTtBQVFwQkMsRUFBQUEsS0FBSyxFQUFFLHFCQVJhO0FBU3BCQyxFQUFB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dGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IGxvZyBmcm9tICcuL2xvZ2dlcic7XG5cblxuLy8gVGhpcyBpcyBhIG1hcCBvZiBkcml2ZXIgbmFtZXMgdG8gbnBtIHBhY2thZ2VzIHJlcHJlc2VudGluZyB0aG9zZSBkcml2ZXJzLlxuLy8gVGhlIGRyaXZlcnMgaW4gdGhpcyBsaXN0IHdpbGwgYmUgYXZhaWxhYmxlIHRvIHRoZSBDTEkgc28gdXNlcnMgY2FuIGp1c3Rcbi8vIHR5cGUgJ2FwcGl1bSBkcml2ZXIgaW5zdGFsbCAnbmFtZScnLCByYXRoZXIgdGhhbiBoYXZpbmcgdG8gc3BlY2lmeSB0aGUgZnVsbFxuLy8gbnBtIHBhY2thZ2UuIEkuZS4sIHRoZXNlIGFyZSB0aGUgb2ZmaWNpYWxseSByZWNvZ25pemVkIGRyaXZlcnMuXG5jb25zdCBLTk9XTl9EUklWRVJTID0ge1xuICB1aWF1dG9tYXRvcjI6ICdhcHBpdW0tdWlhdXRvbWF0b3IyLWRyaXZlcicsXG4gIHhjdWl0ZXN0OiAnYXBwaXVtLXhjdWl0ZXN0LWRyaXZlcicsXG4gIHlvdWllbmdpbmU6ICdhcHBpdW0teW91aWVuZ2luZS1kcml2ZXInLFxuICB3aW5kb3dzOiAnYXBwaXVtLXdpbmRvd3MtZHJpdmVyJyxcbiAgbWFjOiAnYXBwaXVtLW1hYy1kcml2ZXInLFxuICBtYWMyOiAnYXBwaXVtLW1hYzItZHJpdmVyJyxcbiAgZXNwcmVzc286ICdhcHBpdW0tZXNwcmVzc28tZHJpdmVyJyxcbiAgdGl6ZW46ICdhcHBpdW0tdGl6ZW4tZHJpdmVyJyxcbiAgZmx1dHRlcjogJ2FwcGl1bS1mbHV0dGVyLWRyaXZlcicsXG4gIHNhZmFyaTogJ2FwcGl1bS1zYWZhcmktZHJpdmVyJyxcbiAgZ2Vja286ICdhcHBpdW0tZ2Vja29kcml2ZXInLFxufTtcblxuZnVuY3Rpb24gZ2V0RHJpdmVyQnlTdXBwb3J0IChkcml2ZXJzLCBtYXRjaEF1dG9tYXRpb25OYW1lLCBtYXRjaFBsYXRmb3JtTmFtZSkge1xuICBmb3IgKGNvbnN0IFtkcml2ZXJOYW1lLCBkcml2ZXJEYXRhXSBvZiBfLnRvUGFpcnMoZHJpdmVycykpIHtcbiAgICBjb25zdCB7YXV0b21hdGlvbk5hbWUsIHBsYXRmb3JtTmFtZXN9ID0gZHJpdmVyRGF0YTtcbiAgICBjb25zdCBhTmFtZU1hdGNoZXMgPSBhdXRvbWF0aW9uTmFtZS50b0xvd2VyQ2FzZSgpID09PSBtYXRjaEF1dG9tYXRpb25OYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgcE5hbWVNYXRjaGVzID0gXy5pbmNsdWRlcyhwbGF0Zm9ybU5hbWVzLm1hcChfLnRvTG93ZXIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hQbGF0Zm9ybU5hbWUudG9Mb3dlckNhc2UoKSk7XG5cbiAgICBpZiAoYU5hbWVNYXRjaGVzICYmIHBOYW1lTWF0Y2hlcykge1xuICAgICAgcmV0dXJuIHtkcml2ZXJOYW1lLCAuLi5kcml2ZXJEYXRhfTtcbiAgICB9XG5cbiAgICBpZiAoYU5hbWVNYXRjaGVzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYERyaXZlciAnJHtkcml2ZXJOYW1lfScgc3VwcG9ydHMgYXV0b21hdGlvbk5hbWUgYCArXG4gICAgICAgICAgICAgICAgICAgICAgYCcke2F1dG9tYXRpb25OYW1lfScsIGJ1dCBBcHBpdW0gY291bGQgbm90IGZpbmQgYCArXG4gICAgICAgICAgICAgICAgICAgICAgYHN1cHBvcnQgZm9yIHBsYXRmb3JtTmFtZSAnJHttYXRjaFBsYXRmb3JtTmFtZX0nLiBTdXBwb3J0ZWQgYCArXG4gICAgICAgICAgICAgICAgICAgICAgYHBsYXRmb3JtTmFtZXMgYXJlOiBgICtcbiAgICAgICAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShwbGF0Zm9ybU5hbWVzKSk7XG4gICAgfVxuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZmluZCBpbnN0YWxsZWQgZHJpdmVyIHRvIHN1cHBvcnQgZ2l2ZW4gY2Fwc2ApO1xufVxuXG5mdW5jdGlvbiBmaW5kTWF0Y2hpbmdEcml2ZXIgKGNvbmZpZywge2F1dG9tYXRpb25OYW1lLCBwbGF0Zm9ybU5hbWV9KSB7XG4gIGlmICghXy5pc1N0cmluZyhwbGF0Zm9ybU5hbWUpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdZb3UgbXVzdCBpbmNsdWRlIGEgcGxhdGZvcm1OYW1lIGNhcGFiaWxpdHknKTtcbiAgfVxuXG4gIGlmICghXy5pc1N0cmluZyhhdXRvbWF0aW9uTmFtZSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBtdXN0IGluY2x1ZGUgYW4gYXV0b21hdGlvbk5hbWUgY2FwYWJpbGl0eScpO1xuICB9XG5cbiAgbG9nLmluZm8oYEF0dGVtcHRpbmcgdG8gZmluZCBtYXRjaGluZyBkcml2ZXIgZm9yIGF1dG9tYXRpb25OYW1lIGAgK1xuICAgICAgICAgICBgJyR7YXV0b21hdGlvbk5hbWV9JyBhbmQgcGxhdGZvcm1OYW1lICcke3BsYXRmb3JtTmFtZX0nYCk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCB7XG4gICAgICBkcml2ZXJOYW1lLFxuICAgICAgbWFpbkNsYXNzLFxuICAgICAgdmVyc2lvbixcbiAgICB9ID0gZ2V0RHJpdmVyQnlTdXBwb3J0KGNvbmZpZy5pbnN0YWxsZWRFeHRlbnNpb25zLCBhdXRvbWF0aW9uTmFtZSwgcGxhdGZvcm1OYW1lKTtcbiAgICBsb2cuaW5mbyhgVGhlICcke2RyaXZlck5hbWV9JyBkcml2ZXIgd2FzIGluc3RhbGxlZCBhbmQgbWF0Y2hlZCBjYXBzLmApO1xuICAgIGxvZy5pbmZvKGBXaWxsIHJlcXVpcmUgaXQgYXQgJHtjb25maWcuZ2V0RXh0ZW5zaW9uUmVxdWlyZVBhdGgoZHJpdmVyTmFtZSl9YCk7XG4gICAgY29uc3QgZHJpdmVyID0gY29uZmlnLnJlcXVpcmUoZHJpdmVyTmFtZSk7XG4gICAgaWYgKCFkcml2ZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTWFpbkNsYXNzICR7bWFpbkNsYXNzfSBkaWQgbm90IHJlc3VsdCBpbiBhIGRyaXZlciBvYmplY3RgKTtcbiAgICB9XG4gICAgcmV0dXJuIHtkcml2ZXIsIHZlcnNpb259O1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjb25zdCBtc2cgPSBgQ291bGQgbm90IGZpbmQgYSBkcml2ZXIgZm9yIGF1dG9tYXRpb25OYW1lIGAgK1xuICAgICAgICAgICAgICAgIGAnJHthdXRvbWF0aW9uTmFtZX0nIGFuZCBwbGF0Zm9ybU5hbWUgJHtwbGF0Zm9ybU5hbWV9Jy4gYCArXG4gICAgICAgICAgICAgICAgYEhhdmUgeW91IGluc3RhbGxlZCBhIGRyaXZlciB0aGF0IHN1cHBvcnRzIHRob3NlIGAgK1xuICAgICAgICAgICAgICAgIGBjYXBhYmlsaXRpZXM/IFJ1biAnYXBwaXVtIGRyaXZlciBsaXN0IC0taW5zdGFsbGVkJyB0byBzZWUuIGAgK1xuICAgICAgICAgICAgICAgIGAoTG93ZXItbGV2ZWwgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9KWA7XG4gICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG4gIH1cbn1cblxuZXhwb3J0IHtcbiAgZmluZE1hdGNoaW5nRHJpdmVyLFxuICBLTk9XTl9EUklWRVJTLFxufTtcbiJdLCJmaWxlIjoibGliL2RyaXZlcnMuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==
@@ -1,253 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports.PLUGIN_TYPE = exports.DRIVER_TYPE = exports.DEFAULT_APPIUM_HOME = exports.INSTALL_TYPES = exports.INSTALL_TYPE_GITHUB = exports.INSTALL_TYPE_LOCAL = exports.INSTALL_TYPE_GIT = exports.INSTALL_TYPE_NPM = exports.default = void 0;
9
-
10
- require("source-map-support/register");
11
-
12
- var _lodash = _interopRequireDefault(require("lodash"));
13
-
14
- var _logger = _interopRequireDefault(require("./logger"));
15
-
16
- var _appiumSupport = require("appium-support");
17
-
18
- var _path = _interopRequireDefault(require("path"));
19
-
20
- var _os = _interopRequireDefault(require("os"));
21
-
22
- var _yaml = _interopRequireDefault(require("yaml"));
23
-
24
- const DRIVER_TYPE = 'driver';
25
- exports.DRIVER_TYPE = DRIVER_TYPE;
26
- const PLUGIN_TYPE = 'plugin';
27
- exports.PLUGIN_TYPE = PLUGIN_TYPE;
28
-
29
- const DEFAULT_APPIUM_HOME = _path.default.resolve(_os.default.homedir(), '.appium');
30
-
31
- exports.DEFAULT_APPIUM_HOME = DEFAULT_APPIUM_HOME;
32
- const CONFIG_FILE_NAME = 'extensions.yaml';
33
- const CONFIG_SCHEMA_REV = 2;
34
- const INSTALL_TYPE_NPM = 'npm';
35
- exports.INSTALL_TYPE_NPM = INSTALL_TYPE_NPM;
36
- const INSTALL_TYPE_LOCAL = 'local';
37
- exports.INSTALL_TYPE_LOCAL = INSTALL_TYPE_LOCAL;
38
- const INSTALL_TYPE_GITHUB = 'github';
39
- exports.INSTALL_TYPE_GITHUB = INSTALL_TYPE_GITHUB;
40
- const INSTALL_TYPE_GIT = 'git';
41
- exports.INSTALL_TYPE_GIT = INSTALL_TYPE_GIT;
42
- const INSTALL_TYPES = [INSTALL_TYPE_GIT, INSTALL_TYPE_GITHUB, INSTALL_TYPE_LOCAL, INSTALL_TYPE_NPM];
43
- exports.INSTALL_TYPES = INSTALL_TYPES;
44
-
45
- class ExtensionConfig {
46
- constructor(appiumHome, extensionType, logFn = null) {
47
- if (logFn === null) {
48
- logFn = _logger.default.error.bind(_logger.default);
49
- }
50
-
51
- this.appiumHome = appiumHome;
52
- this.configFile = _path.default.resolve(this.appiumHome, CONFIG_FILE_NAME);
53
- this.installedExtensions = {};
54
- this.extensionType = extensionType;
55
- this.configKey = `${extensionType}s`;
56
- this.yamlData = {
57
- [`${DRIVER_TYPE}s`]: {},
58
- [`${PLUGIN_TYPE}s`]: {}
59
- };
60
- this.log = logFn;
61
- }
62
-
63
- validate(exts) {
64
- const foundProblems = {};
65
-
66
- for (const [extName, extData] of _lodash.default.toPairs(exts)) {
67
- foundProblems[extName] = [...this.getGenericConfigProblems(extData), ...this.getConfigProblems(extData)];
68
- }
69
-
70
- const problemSummaries = [];
71
-
72
- for (const [extName, problems] of _lodash.default.toPairs(foundProblems)) {
73
- if (_lodash.default.isEmpty(problems)) {
74
- continue;
75
- }
76
-
77
- delete exts[extName];
78
- problemSummaries.push(`${this.extensionType} ${extName} had errors and will not ` + `be available. Errors:`);
79
-
80
- for (const problem of problems) {
81
- problemSummaries.push(` - ${problem.err} (Actual value: ` + `${JSON.stringify(problem.val)})`);
82
- }
83
- }
84
-
85
- if (!_lodash.default.isEmpty(problemSummaries)) {
86
- this.log(`Appium encountered one or more errors while validating ` + `the ${this.configKey} extension file (${this.configFile}):`);
87
-
88
- for (const summary of problemSummaries) {
89
- this.log(summary);
90
- }
91
- }
92
-
93
- return exts;
94
- }
95
-
96
- getGenericConfigProblems(ext) {
97
- const {
98
- version,
99
- pkgName,
100
- installSpec,
101
- installType,
102
- installPath,
103
- mainClass
104
- } = ext;
105
- const problems = [];
106
-
107
- if (!_lodash.default.isString(version)) {
108
- problems.push({
109
- err: 'Missing or incorrect version',
110
- val: version
111
- });
112
- }
113
-
114
- if (!_lodash.default.isString(pkgName)) {
115
- problems.push({
116
- err: 'Missing or incorrect NPM package name',
117
- val: pkgName
118
- });
119
- }
120
-
121
- if (!_lodash.default.isString(installSpec)) {
122
- problems.push({
123
- err: 'Missing or incorrect installation spec',
124
- val: installSpec
125
- });
126
- }
127
-
128
- if (!_lodash.default.includes(INSTALL_TYPES, installType)) {
129
- problems.push({
130
- err: 'Missing or incorrect install type',
131
- val: installType
132
- });
133
- }
134
-
135
- if (!_lodash.default.isString(installPath)) {
136
- problems.push({
137
- err: 'Missing or incorrect installation path',
138
- val: installPath
139
- });
140
- }
141
-
142
- if (!_lodash.default.isString(mainClass)) {
143
- problems.push({
144
- err: 'Missing or incorrect driver class name',
145
- val: mainClass
146
- });
147
- }
148
-
149
- return problems;
150
- }
151
-
152
- getConfigProblems() {
153
- return [];
154
- }
155
-
156
- applySchemaMigrations() {
157
- if (this.yamlData.schemaRev < 2 && _lodash.default.isUndefined(this.yamlData[PLUGIN_TYPE])) {
158
- this.yamlData[PLUGIN_TYPE] = {};
159
- }
160
- }
161
-
162
- async read() {
163
- await (0, _appiumSupport.mkdirp)(this.appiumHome);
164
-
165
- try {
166
- this.yamlData = _yaml.default.parse(await _appiumSupport.fs.readFile(this.configFile, 'utf8'));
167
- this.applySchemaMigrations();
168
- this.installedExtensions = this.validate(this.yamlData[this.configKey]);
169
- } catch (err) {
170
- if (await _appiumSupport.fs.exists(this.configFile)) {
171
- throw new Error(`Appium had trouble loading the extension installation ` + `cache file (${this.configFile}). Ensure it exists and is ` + `readable. Specific error: ${err.message}`);
172
- }
173
-
174
- try {
175
- await this.write();
176
- } catch {
177
- throw new Error(`Appium could not read or write from the Appium Home directory ` + `(${this.appiumHome}). Please ensure it is writable.`);
178
- }
179
- }
180
-
181
- return this.installedExtensions;
182
- }
183
-
184
- async write() {
185
- const newYamlData = { ...this.yamlData,
186
- schemaRev: CONFIG_SCHEMA_REV,
187
- [this.configKey]: this.installedExtensions
188
- };
189
- await _appiumSupport.fs.writeFile(this.configFile, _yaml.default.stringify(newYamlData), 'utf8');
190
- }
191
-
192
- async addExtension(extName, extData) {
193
- this.installedExtensions[extName] = extData;
194
- await this.write();
195
- }
196
-
197
- async removeExtension(extName) {
198
- delete this.installedExtensions[extName];
199
- await this.write();
200
- }
201
-
202
- print() {
203
- const extNames = Object.keys(this.installedExtensions);
204
-
205
- if (_lodash.default.isEmpty(extNames)) {
206
- _logger.default.info(`No ${this.configKey} have been installed. Use the "appium ${this.extensionType}" ` + 'command to install the one(s) you want to use.');
207
-
208
- return;
209
- }
210
-
211
- _logger.default.info(`Available ${this.configKey}:`);
212
-
213
- for (const [extName, extData] of _lodash.default.toPairs(this.installedExtensions)) {
214
- _logger.default.info(` - ${this.extensionDesc(extName, extData)}`);
215
- }
216
- }
217
-
218
- extensionDesc() {
219
- throw new Error('This must be implemented in a final class');
220
- }
221
-
222
- getExtensionRequirePath(extName) {
223
- const {
224
- pkgName,
225
- installPath
226
- } = this.installedExtensions[extName];
227
- return _path.default.resolve(this.appiumHome, installPath, 'node_modules', pkgName);
228
- }
229
-
230
- getInstallPath(extName) {
231
- const {
232
- installPath
233
- } = this.installedExtensions[extName];
234
- return _path.default.resolve(this.appiumHome, installPath);
235
- }
236
-
237
- require(extName) {
238
- const {
239
- mainClass
240
- } = this.installedExtensions[extName];
241
- return require(this.getExtensionRequirePath(extName))[mainClass];
242
- }
243
-
244
- isInstalled(extName) {
245
- return _lodash.default.includes(Object.keys(this.installedExtensions), extName);
246
- }
247
-
248
- }
249
-
250
- exports.default = ExtensionConfig;require('source-map-support').install();
251
-
252
-
253
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9leHRlbnNpb24tY29uZmlnLmpzIl0sIm5hbWVzIjpbIkRSSVZFUl9UWVBFIiwiUExVR0lOX1RZUEUiLCJERUZBVUxUX0FQUElVTV9IT01FIiwicGF0aCIsInJlc29sdmUiLCJvcyIsImhvbWVkaXIiLCJDT05GSUdfRklMRV9OQU1FIiwiQ09ORklHX1NDSEVNQV9SRVYiLCJJTlNUQUxMX1RZUEVfTlBNIiwiSU5TVEFMTF9UWVBFX0xPQ0FMIiwiSU5TVEFMTF9UWVBFX0dJVEhVQiIsIklOU1RBTExfVFlQRV9HSVQiLCJJTlNUQUxMX1RZUEVTIiwiRXh0ZW5zaW9uQ29uZmlnIiwiY29uc3RydWN0b3IiLCJhcHBpdW1Ib21lIiwiZXh0ZW5zaW9uVHlwZSIsImxvZ0ZuIiwibG9nIiwiZXJyb3IiLCJiaW5kIiwiY29uZmlnRmlsZSIsImluc3RhbGxlZEV4dGVuc2lvbnMiLCJjb25maWdLZXkiLCJ5YW1sRGF0YSIsInZhbGlkYXRlIiwiZXh0cyIsImZvdW5kUHJvYmxlbXMiLCJleHROYW1lIiwiZXh0RGF0YSIsIl8iLCJ0b1BhaXJzIiwiZ2V0R2VuZXJpY0NvbmZpZ1Byb2JsZW1zIiwiZ2V0Q29uZmlnUHJvYmxlbXMiLCJwcm9ibGVtU3VtbWFyaWVzIiwicHJvYmxlbXMiLCJpc0VtcHR5IiwicHVzaCIsInByb2JsZW0iLCJlcnIiLCJKU09OIiwic3RyaW5naWZ5IiwidmFsIiwic3VtbWFyeSIsImV4dCIsInZlcnNpb24iLCJwa2dOYW1lIiwiaW5zdGFsbFNwZWMiLCJpbnN0YWxsVHlwZSIsImluc3RhbGxQYXRoIiwibWFpbkNsYXNzIiwiaXNTdHJpbmciLCJpbmNsdWRlcyIsImFwcGx5U2NoZW1hTWlncmF0aW9ucyIsInNjaGVtYVJldiIsImlzVW5kZWZpbmVkIiwicmVhZCIsIllBTUwiLCJwYXJzZSIsImZzIiwicmVhZEZpbGUiLCJleGlzdHMiLCJFcnJvciIsIm1lc3NhZ2UiLCJ3cml0ZSIsIm5ld1lhbWxEYXRhIiwid3JpdGVGaWxlIiwiYWRkRXh0ZW5zaW9uIiwicmVtb3ZlRXh0ZW5zaW9uIiwicHJpbnQiLCJleHROYW1lcyIsIk9iamVjdCIsImtleXMiLCJpbmZvIiwiZXh0ZW5zaW9uRGVzYyIsImdldEV4dGVuc2lvblJlcXVpcmVQYXRoIiwiZ2V0SW5zdGFsbFBhdGgiLCJyZXF1aXJlIiwiaXNJbnN0YWxsZWQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsV0FBVyxHQUFHLFFBQXBCOztBQUNBLE1BQU1DLFdBQVcsR0FBRyxRQUFwQjs7O0FBQ0EsTUFBTUMsbUJBQW1CLEdBQUdDLGNBQUtDLE9BQUwsQ0FBYUMsWUFBR0MsT0FBSCxFQUFiLEVBQTJCLFNBQTNCLENBQTVCOzs7QUFFQSxNQUFNQyxnQkFBZ0IsR0FBRyxpQkFBekI7QUFDQSxNQUFNQyxpQkFBaUIsR0FBRyxDQUExQjtBQUVBLE1BQU1DLGdCQUFnQixHQUFHLEtBQXpCOztBQUNBLE1BQU1DLGtCQUFrQixHQUFHLE9BQTNCOztBQUNBLE1BQU1DLG1CQUFtQixHQUFHLFFBQTVCOztBQUNBLE1BQU1DLGdCQUFnQixHQUFHLEtBQXpCOztBQUNBLE1BQU1DLGFBQWEsR0FBRyxDQUNwQkQsZ0JBRG9CLEVBRXBCRCxtQkFGb0IsRUFHcEJELGtCQUhvQixFQUlwQkQsZ0JBSm9CLENBQXRCOzs7QUFRZSxNQUFNSyxlQUFOLENBQXNCO0FBQ25DQyxFQUFBQSxXQUFXLENBQUVDLFVBQUYsRUFBY0MsYUFBZCxFQUE2QkMsS0FBSyxHQUFHLElBQXJDLEVBQTJDO0FBQ3BELFFBQUlBLEtBQUssS0FBSyxJQUFkLEVBQW9CO0FBQ2xCQSxNQUFBQSxLQUFLLEdBQUdDLGdCQUFJQyxLQUFKLENBQVVDLElBQVYsQ0FBZUYsZUFBZixDQUFSO0FBQ0Q7O0FBQ0QsU0FBS0gsVUFBTCxHQUFrQkEsVUFBbEI7QUFDQSxTQUFLTSxVQUFMLEdBQWtCbkIsY0FBS0MsT0FBTCxDQUFhLEtBQUtZLFVBQWxCLEVBQThCVCxnQkFBOUIsQ0FBbEI7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TTtBQUFDcUIsTUFBQUE7QUFBRCxRQUFnQixLQUFLM0IsbUJBQUwsQ0FBeUJNLE9BQXpCLENBQXRCO0FBQ0EsV0FBTzFCLGNBQUtDLE9BQUwsQ0FBYSxLQUFLWSxVQUFsQixFQUE4QmtDLFdBQTlCLENBQVA7QUFDRDs7QUFFRDRCLEVBQUFBLE9BQU8sQ0FBRWpELE9BQUYsRUFBVztBQUNoQixVQUFNO0FBQUNzQixNQUFBQTtBQUFELFFBQWMsS0FBSzVCLG1CQUFMLENBQXlCTSxPQUF6QixDQUFwQjtBQUNBLFdBQU9pRCxPQUFPLENBQUMsS0FBS0YsdUJBQUwsQ0FBNkIvQyxPQUE3QixDQUFELENBQVAsQ0FBK0NzQixTQUEvQyxDQUFQO0FBQ0Q7O0FBRUQ0QixFQUFBQSxXQUFXLENBQUVsRCxPQUFGLEVBQVc7QUFDcEIsV0FBT0UsZ0JBQUVzQixRQUFGLENBQVdtQixNQUFNLENBQUNDLElBQVAsQ0FBWSxLQUFLbEQsbUJBQWpCLENBQVgsRUFBa0RNLE9BQWxELENBQVA7QUFDRDs7QUFoTGtDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBsb2cgZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IHsgZnMsIG1rZGlycCB9IGZyb20gJ2FwcGl1bS1zdXBwb3J0JztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IG9zIGZyb20gJ29zJztcbmltcG9ydCBZQU1MIGZyb20gJ3lhbWwnO1xuXG5jb25zdCBEUklWRVJfVFlQRSA9ICdkcml2ZXInO1xuY29uc3QgUExVR0lOX1RZUEUgPSAncGx1Z2luJztcbmNvbnN0IERFRkFVTFRfQVBQSVVNX0hPTUUgPSBwYXRoLnJlc29sdmUob3MuaG9tZWRpcigpLCAnLmFwcGl1bScpO1xuXG5jb25zdCBDT05GSUdfRklMRV9OQU1FID0gJ2V4dGVuc2lvbnMueWFtbCc7XG5jb25zdCBDT05GSUdfU0NIRU1BX1JFViA9IDI7XG5cbmNvbnN0IElOU1RBTExfVFlQRV9OUE0gPSAnbnBtJztcbmNvbnN0IElOU1RBTExfVFlQRV9MT0NBTCA9ICdsb2NhbCc7XG5jb25zdCBJTlNUQUxMX1RZUEVfR0lUSFVCID0gJ2dpdGh1Yic7XG5jb25zdCBJTlNUQUxMX1RZUEVfR0lUID0gJ2dpdCc7XG5jb25zdCBJTlNUQUxMX1RZUEVTID0gW1xuICBJTlNUQUxMX1RZUEVfR0lULFxuICBJTlNUQUxMX1RZUEVfR0lUSFVCLFxuICBJTlNUQUxMX1RZUEVfTE9DQUwsXG4gIElOU1RBTExfVFlQRV9OUE1cbl07XG5cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXh0ZW5zaW9uQ29uZmlnIHtcbiAgY29uc3RydWN0b3IgKGFwcGl1bUhvbWUsIGV4dGVuc2lvblR5cGUsIGxvZ0ZuID0gbnVsbCkge1xuICAgIGlmIChsb2dGbiA9PT0gbnVsbCkge1xuICAgICAgbG9nRm4gPSBsb2cuZXJyb3IuYmluZChsb2cpO1xuICAgIH1cbiAgICB0aGlzLmFwcGl1bUhvbWUgPSBhcHBpdW1Ib21lO1xuICAgIHRoaXMuY29uZmlnRmlsZSA9IHBhdGgucmVzb2x2ZSh0aGlzLmFwcGl1bUhvbWUsIENPTkZJR19GSUxFX05BTUUpO1xuICAgIHRoaXMuaW5zdGFsbGVkRXh0ZW5zaW9ucyA9IHt9O1xuICAgIHRoaXMuZXh0ZW5zaW9uVHlwZSA9IGV4dGVuc2lvblR5cGU7XG4gICAgdGhpcy5jb25maWdLZXkgPSBgJHtleHRlbnNpb25UeXBlfXNgO1xuICAgIHRoaXMueWFtbERhdGEgPSB7W2Ake0RSSVZFUl9UWVBFfXNgXToge30sIFtgJHtQTFVHSU5fVFlQRX1zYF06IHt9fTtcbiAgICB0aGlzLmxvZyA9IGxvZ0ZuO1xuICB9XG5cbiAgdmFsaWRhdGUgKGV4dHMpIHtcbiAgICBjb25zdCBmb3VuZFByb2JsZW1zID0ge307XG4gICAgZm9yIChjb25zdCBbZXh0TmFtZSwgZXh0RGF0YV0gb2YgXy50b1BhaXJzKGV4dHMpKSB7XG4gICAgICBmb3VuZFByb2JsZW1zW2V4dE5hbWVdID0gW1xuICAgICAgICAuLi50aGlzLmdldEdlbmVyaWNDb25maWdQcm9ibGVtcyhleHREYXRhKSxcbiAgICAgICAgLi4udGhpcy5nZXRDb25maWdQcm9ibGVtcyhleHREYXRhKVxuICAgICAgXTtcbiAgICB9XG5cbiAgICBjb25zdCBwcm9ibGVtU3VtbWFyaWVzID0gW107XG4gICAgZm9yIChjb25zdCBbZXh0TmFtZSwgcHJvYmxlbXNdIG9mIF8udG9QYWlycyhmb3VuZFByb2JsZW1zKSkge1xuICAgICAgaWYgKF8uaXNFbXB0eShwcm9ibGVtcykpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICAvLyByZW1vdmUgdGhpcyBleHRlbnNpb24gZnJvbSB0aGUgbGlzdCBzaW5jZSBpdCdzIG5vdCB2YWxpZFxuICAgICAgZGVsZXRlIGV4dHNbZXh0TmFtZV07XG4gICAgICBwcm9ibGVtU3VtbWFyaWVzLnB1c2goYCR7dGhpcy5leHRlbnNpb25UeXBlfSAke2V4dE5hbWV9IGhhZCBlcnJvcnMgYW5kIHdpbGwgbm90IGAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBiZSBhdmFpbGFibGUuIEVycm9yczpgKTtcbiAgICAgIGZvciAoY29uc3QgcHJvYmxlbSBvZiBwcm9ibGVtcykge1xuICAgICAgICBwcm9ibGVtU3VtbWFyaWVzLnB1c2goYCAgLSAke3Byb2JsZW0uZXJyfSAoQWN0dWFsIHZhbHVlOiBgICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke0pTT04uc3RyaW5naWZ5KHByb2JsZW0udmFsKX0pYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFfLmlzRW1wdHkocHJvYmxlbVN1bW1hcmllcykpIHtcbiAgICAgIHRoaXMubG9nKGBBcHBpdW0gZW5jb3VudGVyZWQgb25lIG9yIG1vcmUgZXJyb3JzIHdoaWxlIHZhbGlkYXRpbmcgYCArXG4gICAgICAgICAgICAgICBgdGhlICR7dGhpcy5jb25maWdLZXl9IGV4dGVuc2lvbiBmaWxlICgke3RoaXMuY29uZmlnRmlsZX0pOmApO1xuICAgICAgZm9yIChjb25zdCBzdW1tYXJ5IG9mIHByb2JsZW1TdW1tYXJpZXMpIHtcbiAgICAgICAgdGhpcy5sb2coc3VtbWFyeSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGV4dHM7XG4gIH1cblxuICBnZXRHZW5lcmljQ29uZmlnUHJvYmxlbXMgKGV4dCkge1xuICAgIGNvbnN0IHt2ZXJzaW9uLCBwa2dOYW1lLCBpbnN0YWxsU3BlYywgaW5zdGFsbFR5cGUsIGluc3RhbGxQYXRoLCBtYWluQ2xhc3N9ID0gZXh0O1xuICAgIGNvbnN0IHByb2JsZW1zID0gW107XG5cbiAgICBpZiAoIV8uaXNTdHJpbmcodmVyc2lvbikpIHtcbiAgICAgIHByb2JsZW1zLnB1c2goe2VycjogJ01pc3Npbmcgb3IgaW5jb3JyZWN0IHZlcnNpb24nLCB2YWw6IHZlcnNpb259KTtcbiAgICB9XG5cbiAgICBpZiAoIV8uaXNTdHJpbmcocGtnTmFtZSkpIHtcbiAgICAgIHByb2JsZW1zLnB1c2goe2VycjogJ01pc3Npbmcgb3IgaW5jb3JyZWN0IE5QTSBwYWNrYWdlIG5hbWUnLCB2YWw6IHBrZ05hbWV9KTtcbiAgICB9XG5cbiAgICBpZiAoIV8uaXNTdHJpbmcoaW5zdGFsbFNwZWMpKSB7XG4gICAgICBwcm9ibGVtcy5wdXNoKHtlcnI6ICdNaXNzaW5nIG9yIGluY29ycmVjdCBpbnN0YWxsYXRpb24gc3BlYycsIHZhbDogaW5zdGFsbFNwZWN9KTtcbiAgICB9XG5cbiAgICBpZiAoIV8uaW5jbHVkZXMoSU5TVEFMTF9UWVBFUywgaW5zdGFsbFR5cGUpKSB7XG4gICAgICBwcm9ibGVtcy5wdXNoKHtlcnI6ICdNaXNzaW5nIG9yIGluY29ycmVjdCBpbnN0YWxsIHR5cGUnLCB2YWw6IGluc3RhbGxUeXBlfSk7XG4gICAgfVxuXG4gICAgaWYgKCFfLmlzU3RyaW5nKGluc3RhbGxQYXRoKSkge1xuICAgICAgcHJvYmxlbXMucHVzaCh7ZXJyOiAnTWlzc2luZyBvciBpbmNvcnJlY3QgaW5zdGFsbGF0aW9uIHBhdGgnLCB2YWw6IGluc3RhbGxQYXRofSk7XG4gICAgfVxuXG4gICAgaWYgKCFfLmlzU3RyaW5nKG1haW5DbGFzcykpIHtcbiAgICAgIHByb2JsZW1zLnB1c2goe2VycjogJ01pc3Npbmcgb3IgaW5jb3JyZWN0IGRyaXZlciBjbGFzcyBuYW1lJywgdmFsOiBtYWluQ2xhc3N9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvYmxlbXM7XG4gIH1cblxuICBnZXRDb25maWdQcm9ibGVtcyAoLypleHQqLykge1xuICAgIC8vIHNob3VkIG92ZXJyaWRlIHRoaXMgbWV0aG9kIGlmIHNwZWNpYWwgdmFsaWRhdGlvbiBpcyBuZWNlc3NhcnkgZm9yIHRoaXMgZXh0ZW5zaW9uIHR5cGVcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBhcHBseVNjaGVtYU1pZ3JhdGlvbnMgKCkge1xuICAgIGlmICh0aGlzLnlhbWxEYXRhLnNjaGVtYVJldiA8IDIgJiYgXy5pc1VuZGVmaW5lZCh0aGlzLnlhbWxEYXRhW1BMVUdJTl9UWVBFXSkpIHtcbiAgICAgIC8vIGF0IHNjaGVtYSByZXZpc2lvbiAyLCB3ZSBzdGFydGVkIGluY2x1ZGluZyBwbHVnaW5zIGFzIHdlbGwgYXMgZHJpdmVycyBpbiB0aGUgZmlsZSxcbiAgICAgIC8vIHNvIG1ha2Ugc3VyZSB3ZSBhdCBsZWFzdCBoYXZlIGFuIGVtcHR5IHNlY3Rpb24gZm9yIGl0XG4gICAgICB0aGlzLnlhbWxEYXRhW1BMVUdJTl9UWVBFXSA9IHt9O1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHJlYWQgKCkge1xuICAgIGF3YWl0IG1rZGlycCh0aGlzLmFwcGl1bUhvbWUpOyAvLyBlbnN1cmUgYXBwaXVtIGhvbWUgZXhpc3RzXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMueWFtbERhdGEgPSBZQU1MLnBhcnNlKGF3YWl0IGZzLnJlYWRGaWxlKHRoaXMuY29uZmlnRmlsZSwgJ3V0ZjgnKSk7XG4gICAgICB0aGlzLmFwcGx5U2NoZW1hTWlncmF0aW9ucygpO1xuXG4gICAgICAvLyBzZXQgdGhlIGxpc3Qgb2YgZHJpdmVycyB0aGUgdXNlciBoYXMgaW5zdGFsbGVkXG4gICAgICB0aGlzLmluc3RhbGxlZEV4dGVuc2lvbnMgPSB0aGlzLnZhbGlkYXRlKHRoaXMueWFtbERhdGFbdGhpcy5jb25maWdLZXldKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmIChhd2FpdCBmcy5leGlzdHModGhpcy5jb25maWdGaWxlKSkge1xuICAgICAgICAvLyBpZiB0aGUgZmlsZSBleGlzdHMgYW5kIHdlIGNvdWxkbid0IHBhcnNlIGl0LCB0aGF0J3MgYSBwcm9ibGVtXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQXBwaXVtIGhhZCB0cm91YmxlIGxvYWRpbmcgdGhlIGV4dGVuc2lvbiBpbnN0YWxsYXRpb24gYCArXG4gICAgICAgICAgICAgICAgICAgICAgICBgY2FjaGUgZmlsZSAoJHt0aGlzLmNvbmZpZ0ZpbGV9KS4gRW5zdXJlIGl0IGV4aXN0cyBhbmQgaXMgYCArXG4gICAgICAgICAgICAgICAgICAgICAgICBgcmVhZGFibGUuIFNwZWNpZmljIGVycm9yOiAke2Vyci5tZXNzYWdlfWApO1xuICAgICAgfVxuXG4gICAgICAvLyBpZiB0aGUgY29uZmlnIGZpbGUgZG9lc24ndCBleGlzdCwgdHJ5IHRvIHdyaXRlIGFuIGVtcHR5IG9uZSwgdG8gbWFrZVxuICAgICAgLy8gc3VyZSB3ZSBhY3R1YWxseSBoYXZlIHdyaXRlIHByaXZpbGVnZXMsIGFuZCBjb21wbGFpbiBpZiB3ZSBkb24ndFxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy53cml0ZSgpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQXBwaXVtIGNvdWxkIG5vdCByZWFkIG9yIHdyaXRlIGZyb20gdGhlIEFwcGl1bSBIb21lIGRpcmVjdG9yeSBgICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGAoJHt0aGlzLmFwcGl1bUhvbWV9KS4gUGxlYXNlIGVuc3VyZSBpdCBpcyB3cml0YWJsZS5gKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaW5zdGFsbGVkRXh0ZW5zaW9ucztcbiAgfVxuXG5cbiAgYXN5bmMgd3JpdGUgKCkge1xuICAgIGNvbnN0IG5ld1lhbWxEYXRhID0ge1xuICAgICAgLi4udGhpcy55YW1sRGF0YSxcbiAgICAgIHNjaGVtYVJldjogQ09ORklHX1NDSEVNQV9SRVYsXG4gICAgICBbdGhpcy5jb25maWdLZXldOiB0aGlzLmluc3RhbGxlZEV4dGVuc2lvbnNcbiAgICB9O1xuICAgIGF3YWl0IGZzLndyaXRlRmlsZSh0aGlzLmNvbmZpZ0ZpbGUsIFlBTUwuc3RyaW5naWZ5KG5ld1lhbWxEYXRhKSwgJ3V0ZjgnKTtcbiAgfVxuXG4gIGFzeW5jIGFkZEV4dGVuc2lvbiAoZXh0TmFtZSwgZXh0RGF0YSkge1xuICAgIHRoaXMuaW5zdGFsbGVkRXh0ZW5zaW9uc1tleHROYW1lXSA9IGV4dERhdGE7XG4gICAgYXdhaXQgdGhpcy53cml0ZSgpO1xuICB9XG5cbiAgYXN5bmMgcmVtb3ZlRXh0ZW5zaW9uIChleHROYW1lKSB7XG4gICAgZGVsZXRlIHRoaXMuaW5zdGFsbGVkRXh0ZW5zaW9uc1tleHROYW1lXTtcbiAgICBhd2FpdCB0aGlzLndyaXRlKCk7XG4gIH1cblxuICBwcmludCAoKSB7XG4gICAgY29uc3QgZXh0TmFtZXMgPSBPYmplY3Qua2V5cyh0aGlzLmluc3RhbGxlZEV4dGVuc2lvbnMpO1xuICAgIGlmIChfLmlzRW1wdHkoZXh0TmFtZXMpKSB7XG4gICAgICBsb2cuaW5mbyhgTm8gJHt0aGlzLmNvbmZpZ0tleX0gaGF2ZSBiZWVuIGluc3RhbGxlZC4gVXNlIHRoZSBcImFwcGl1bSAke3RoaXMuZXh0ZW5zaW9uVHlwZX1cIiBgICtcbiAgICAgICAgICAgICAgICdjb21tYW5kIHRvIGluc3RhbGwgdGhlIG9uZShzKSB5b3Ugd2FudCB0byB1c2UuJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbG9nLmluZm8oYEF2YWlsYWJsZSAke3RoaXMuY29uZmlnS2V5fTpgKTtcbiAgICBmb3IgKGNvbnN0IFtleHROYW1lLCBleHREYXRhXSBvZiBfLnRvUGFpcnModGhpcy5pbnN0YWxsZWRFeHRlbnNpb25zKSkge1xuICAgICAgbG9nLmluZm8oYCAgLSAke3RoaXMuZXh0ZW5zaW9uRGVzYyhleHROYW1lLCBleHREYXRhKX1gKTtcbiAgICB9XG4gIH1cblxuICBleHRlbnNpb25EZXNjICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoaXMgbXVzdCBiZSBpbXBsZW1lbnRlZCBpbiBhIGZpbmFsIGNsYXNzJyk7XG4gIH1cblxuICBnZXRFeHRlbnNpb25SZXF1aXJlUGF0aCAoZXh0TmFtZSkge1xuICAgIGNvbnN0IHtwa2dOYW1lLCBpbnN0YWxsUGF0aH0gPSB0aGlzLmluc3RhbGxlZEV4dGVuc2lvbnNbZXh0TmFtZV07XG4gICAgcmV0dXJuIHBhdGgucmVzb2x2ZSh0aGlzLmFwcGl1bUhvbWUsIGluc3RhbGxQYXRoLCAnbm9kZV9tb2R1bGVzJywgcGtnTmFtZSk7XG4gIH1cblxuICBnZXRJbnN0YWxsUGF0aCAoZXh0TmFtZSkge1xuICAgIGNvbnN0IHtpbnN0YWxsUGF0aH0gPSB0aGlzLmluc3RhbGxlZEV4dGVuc2lvbnNbZXh0TmFtZV07XG4gICAgcmV0dXJuIHBhdGgucmVzb2x2ZSh0aGlzLmFwcGl1bUhvbWUsIGluc3RhbGxQYXRoKTtcbiAgfVxuXG4gIHJlcXVpcmUgKGV4dE5hbWUpIHtcbiAgICBjb25zdCB7bWFpbkNsYXNzfSA9IHRoaXMuaW5zdGFsbGVkRXh0ZW5zaW9uc1tleHROYW1lXTtcbiAgICByZXR1cm4gcmVxdWlyZSh0aGlzLmdldEV4dGVuc2lvblJlcXVpcmVQYXRoKGV4dE5hbWUpKVttYWluQ2xhc3NdO1xuICB9XG5cbiAgaXNJbnN0YWxsZWQgKGV4dE5hbWUpIHtcbiAgICByZXR1cm4gXy5pbmNsdWRlcyhPYmplY3Qua2V5cyh0aGlzLmluc3RhbGxlZEV4dGVuc2lvbnMpLCBleHROYW1lKTtcbiAgfVxufVxuXG5leHBvcnQge1xuICBJTlNUQUxMX1RZUEVfTlBNLCBJTlNUQUxMX1RZUEVfR0lULCBJTlNUQUxMX1RZUEVfTE9DQUwsIElOU1RBTExfVFlQRV9HSVRIVUIsXG4gIElOU1RBTExfVFlQRVMsIERFRkFVTFRfQVBQSVVNX0hPTUUsIERSSVZFUl9UWVBFLCBQTFVHSU5fVFlQRSxcbn07XG4iXSwiZmlsZSI6ImxpYi9leHRlbnNpb24tY29uZmlnLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=
@@ -1,59 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
4
-
5
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
6
-
7
- Object.defineProperty(exports, "__esModule", {
8
- value: true
9
- });
10
- exports.default = void 0;
11
-
12
- require("source-map-support/register");
13
-
14
- var _lodash = _interopRequireDefault(require("lodash"));
15
-
16
- var _extensionConfig = _interopRequireWildcard(require("./extension-config"));
17
-
18
- var _logger = _interopRequireDefault(require("./logger"));
19
-
20
- class PluginConfig extends _extensionConfig.default {
21
- constructor(appiumHome, logFn = null) {
22
- super(appiumHome, _extensionConfig.PLUGIN_TYPE, logFn);
23
- }
24
-
25
- extensionDesc(pluginName, {
26
- version
27
- }) {
28
- return `${pluginName}@${version}`;
29
- }
30
-
31
- print(activePlugins) {
32
- const pluginNames = Object.keys(this.installedExtensions);
33
- const activeNames = activePlugins.map(p => p.name);
34
-
35
- if (_lodash.default.isEmpty(pluginNames)) {
36
- _logger.default.info(`No plugins have been installed. Use the "appium plugin" ` + 'command to install the one(s) you want to use.');
37
-
38
- return;
39
- }
40
-
41
- _logger.default.info(`Available plugins:`);
42
-
43
- for (const [pluginName, pluginData] of _lodash.default.toPairs(this.installedExtensions)) {
44
- const activeTxt = _lodash.default.includes(activeNames, pluginName) ? ' (ACTIVE)' : '';
45
-
46
- _logger.default.info(` - ${this.extensionDesc(pluginName, pluginData)}${activeTxt}`);
47
- }
48
-
49
- if (_lodash.default.isEmpty(activePlugins)) {
50
- _logger.default.info('No plugins activated. Use the --plugins flag with names of plugins to activate');
51
- }
52
- }
53
-
54
- }
55
-
56
- exports.default = PluginConfig;require('source-map-support').install();
57
-
58
-
59
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9wbHVnaW4tY29uZmlnLmpzIl0sIm5hbWVzIjpbIlBsdWdpbkNvbmZpZyIsIkV4dGVuc2lvbkNvbmZpZyIsImNvbnN0cnVjdG9yIiwiYXBwaXVtSG9tZSIsImxvZ0ZuIiwiUExVR0lOX1RZUEUiLCJleHRlbnNpb25EZXNjIiwicGx1Z2luTmFtZSIsInZlcnNpb24iLCJwcmludCIsImFjdGl2ZVBsdWdpbnMiLCJwbHVnaW5OYW1lcyIsIk9iamVjdCIsImtleXMiLCJpbnN0YWxsZWRFeHRlbnNpb25zIiwiYWN0aXZlTmFtZXMiLCJtYXAiLCJwIiwibmFtZSIsIl8iLCJpc0VtcHR5IiwibG9nIiwiaW5mbyIsInBsdWdpbkRhdGEiLCJ0b1BhaXJzIiwiYWN0aXZlVHh0IiwiaW5jbHVkZXMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFFZSxNQUFNQSxZQUFOLFNBQTJCQyx3QkFBM0IsQ0FBMkM7QUFDeERDLEVBQUFBLFdBQVcsQ0FBRUMsVUFBRixFQUFjQyxLQUFLLEdBQUcsSUFBdEIsRUFBNEI7QUFDckMsVUFBTUQsVUFBTixFQUFrQkUsNEJBQWxCLEVBQStCRCxLQUEvQjtBQUNEOztBQUVERSxFQUFBQSxhQUFhLENBQUVDLFVBQUYsRUFBYztBQUFDQyxJQUFBQTtBQUFELEdBQWQsRUFBeUI7QUFDcEMsV0FBUSxHQUFFRCxVQUFXLElBQUdDLE9BQVEsRUFBaEM7QUFDRDs7QUFFREMsRUFBQUEsS0FBSyxDQUFFQyxhQUFGLEVBQWlCO0FBQ3BCLFVBQU1DLFdBQVcsR0FBR0MsTUFBTSxDQUFDQyxJQUFQLENBQVksS0FBS0MsbUJBQWpCLENBQXBCO0FBQ0EsVUFBTUMsV0FBVyxHQUFHTCxhQUFhLENBQUNNLEdBQWQsQ0FBbUJDLENBQUQsSUFBT0EsQ0FBQyxDQUFDQyxJQUEzQixDQUFwQjs7QUFFQSxRQUFJQyxnQkFBRUMsT0FBRixDQUFVVCxXQUFWLENBQUosRUFBNEI7QUFDMUJVLHNCQUFJQyxJQUFKLENBQVUsMERBQUQsR0FDQSxnREFEVDs7QUFFQTtBQUNEOztBQUVERCxvQkFBSUMsSUFBSixDQUFVLG9CQUFWOztBQUNBLFNBQUssTUFBTSxDQUFDZixVQUFELEVBQWFnQixVQUFiLENBQVgsSUFBdUNKLGdCQUFFSyxPQUFGLENBQVUsS0FBS1YsbUJBQWYsQ0FBdkMsRUFBNEU7QUFDMUUsWUFBTVcsU0FBUyxHQUFHTixnQkFBRU8sUUFBRixDQUFXWCxXQUFYLEVBQXdCUixVQUF4QixJQUFzQyxXQUF0QyxHQUFvRCxFQUF0RTs7QUFDQWMsc0JBQUlDLElBQUosQ0FBVSxPQUFNLEtBQUtoQixhQUFMLENBQW1CQyxVQUFuQixFQUErQmdCLFVBQS9CLENBQTJDLEdBQUVFLFNBQVUsRUFBdkU7QUFDRDs7QUFFRCxRQUFJTixnQkFBRUMsT0FBRixDQUFVVixhQUFWLENBQUosRUFBOEI7QUFDNUJXLHNCQUFJQyxJQUFKLENBQVMsZ0ZBQVQ7QUFDRDtBQUNGOztBQTVCdUQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IEV4dGVuc2lvbkNvbmZpZywgeyBQTFVHSU5fVFlQRSB9IGZyb20gJy4vZXh0ZW5zaW9uLWNvbmZpZyc7XG5pbXBvcnQgbG9nIGZyb20gJy4vbG9nZ2VyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGx1Z2luQ29uZmlnIGV4dGVuZHMgRXh0ZW5zaW9uQ29uZmlnIHtcbiAgY29uc3RydWN0b3IgKGFwcGl1bUhvbWUsIGxvZ0ZuID0gbnVsbCkge1xuICAgIHN1cGVyKGFwcGl1bUhvbWUsIFBMVUdJTl9UWVBFLCBsb2dGbik7XG4gIH1cblxuICBleHRlbnNpb25EZXNjIChwbHVnaW5OYW1lLCB7dmVyc2lvbn0pIHtcbiAgICByZXR1cm4gYCR7cGx1Z2luTmFtZX1AJHt2ZXJzaW9ufWA7XG4gIH1cblxuICBwcmludCAoYWN0aXZlUGx1Z2lucykge1xuICAgIGNvbnN0IHBsdWdpbk5hbWVzID0gT2JqZWN0LmtleXModGhpcy5pbnN0YWxsZWRFeHRlbnNpb25zKTtcbiAgICBjb25zdCBhY3RpdmVOYW1lcyA9IGFjdGl2ZVBsdWdpbnMubWFwKChwKSA9PiBwLm5hbWUpO1xuXG4gICAgaWYgKF8uaXNFbXB0eShwbHVnaW5OYW1lcykpIHtcbiAgICAgIGxvZy5pbmZvKGBObyBwbHVnaW5zIGhhdmUgYmVlbiBpbnN0YWxsZWQuIFVzZSB0aGUgXCJhcHBpdW0gcGx1Z2luXCIgYCArXG4gICAgICAgICAgICAgICAnY29tbWFuZCB0byBpbnN0YWxsIHRoZSBvbmUocykgeW91IHdhbnQgdG8gdXNlLicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxvZy5pbmZvKGBBdmFpbGFibGUgcGx1Z2luczpgKTtcbiAgICBmb3IgKGNvbnN0IFtwbHVnaW5OYW1lLCBwbHVnaW5EYXRhXSBvZiBfLnRvUGFpcnModGhpcy5pbnN0YWxsZWRFeHRlbnNpb25zKSkge1xuICAgICAgY29uc3QgYWN0aXZlVHh0ID0gXy5pbmNsdWRlcyhhY3RpdmVOYW1lcywgcGx1Z2luTmFtZSkgPyAnIChBQ1RJVkUpJyA6ICcnO1xuICAgICAgbG9nLmluZm8oYCAgLSAke3RoaXMuZXh0ZW5zaW9uRGVzYyhwbHVnaW5OYW1lLCBwbHVnaW5EYXRhKX0ke2FjdGl2ZVR4dH1gKTtcbiAgICB9XG5cbiAgICBpZiAoXy5pc0VtcHR5KGFjdGl2ZVBsdWdpbnMpKSB7XG4gICAgICBsb2cuaW5mbygnTm8gcGx1Z2lucyBhY3RpdmF0ZWQuIFVzZSB0aGUgLS1wbHVnaW5zIGZsYWcgd2l0aCBuYW1lcyBvZiBwbHVnaW5zIHRvIGFjdGl2YXRlJyk7XG4gICAgfVxuICB9XG59XG4iXSwiZmlsZSI6ImxpYi9wbHVnaW4tY29uZmlnLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=
@@ -1,16 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.KNOWN_PLUGINS = void 0;
7
-
8
- require("source-map-support/register");
9
-
10
- const KNOWN_PLUGINS = {
11
- images: '@appium/images-plugin'
12
- };
13
- exports.KNOWN_PLUGINS = KNOWN_PLUGINS;require('source-map-support').install();
14
-
15
-
16
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9wbHVnaW5zLmpzIl0sIm5hbWVzIjpbIktOT1dOX1BMVUdJTlMiLCJpbWFnZXMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUlBLE1BQU1BLGFBQWEsR0FBRztBQUNwQkMsRUFBQUEsTUFBTSxFQUFFO0FBRFksQ0FBdEIiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUaGlzIGlzIGEgbWFwIG9mIHBsdWdpbiBuYW1lcyB0byBucG0gcGFja2FnZXMgcmVwcmVzZW50aW5nIHRob3NlIHBsdWdpbnMuXG4vLyBUaGUgcGx1Z2lucyBpbiB0aGlzIGxpc3Qgd2lsbCBiZSBhdmFpbGFibGUgdG8gdGhlIENMSSBzbyB1c2VycyBjYW4ganVzdFxuLy8gdHlwZSAnYXBwaXVtIHBsdWdpbiBpbnN0YWxsICduYW1lJycsIHJhdGhlciB0aGFuIGhhdmluZyB0byBzcGVjaWZ5IHRoZSBmdWxsXG4vLyBucG0gcGFja2FnZS4gSS5lLiwgdGhlc2UgYXJlIHRoZSBvZmZpY2lhbGx5IHJlY29nbml6ZWQgcGx1Z2lucy5cbmNvbnN0IEtOT1dOX1BMVUdJTlMgPSB7XG4gIGltYWdlczogJ0BhcHBpdW0vaW1hZ2VzLXBsdWdpbicsXG59O1xuXG5leHBvcnQge1xuICBLTk9XTl9QTFVHSU5TLFxufTtcbiJdLCJmaWxlIjoibGliL3BsdWdpbnMuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==
@@ -1,90 +0,0 @@
1
- #!/usr/bin/env node
2
- "use strict";
3
-
4
- require("source-map-support/register");
5
-
6
- async function main() {
7
- const driverEnv = process.env.npm_config_drivers;
8
- const pluginEnv = process.env.npm_config_plugins;
9
-
10
- if (!driverEnv && !pluginEnv) {
11
- console.log('Not auto-installing any drivers or plugins');
12
- return;
13
- }
14
-
15
- let extension;
16
-
17
- try {
18
- extension = require('./build/lib/cli/extension');
19
- } catch (e) {
20
- throw new Error(`Could not load extension CLI file; has the project been transpiled? ` + `(${e.message})`);
21
- }
22
-
23
- const {
24
- DEFAULT_APPIUM_HOME,
25
- DRIVER_TYPE,
26
- PLUGIN_TYPE
27
- } = require('./build/lib/extension-config');
28
-
29
- const {
30
- runExtensionCommand
31
- } = extension;
32
- const appiumHome = process.env.npm_config_appium_home || DEFAULT_APPIUM_HOME;
33
- const specs = [[DRIVER_TYPE, driverEnv], [PLUGIN_TYPE, pluginEnv]];
34
-
35
- for (const [type, extEnv] of specs) {
36
- if (extEnv) {
37
- for (const ext of extEnv.split(',')) {
38
- try {
39
- await checkAndInstallExtension({
40
- runExtensionCommand,
41
- appiumHome,
42
- type,
43
- ext
44
- });
45
- } catch (e) {
46
- console.log(`There was an error checking and installing ${type} ${ext}: ${e.message}`);
47
- }
48
- }
49
- }
50
- }
51
- }
52
-
53
- async function checkAndInstallExtension({
54
- runExtensionCommand,
55
- appiumHome,
56
- type,
57
- ext
58
- }) {
59
- const extList = await runExtensionCommand({
60
- appiumHome,
61
- [`${type}Command`]: 'list',
62
- showInstalled: true,
63
- suppressOutput: true
64
- }, type);
65
-
66
- if (extList[ext]) {
67
- console.log(`The ${type} ${ext} was already installed, skipping...`);
68
- return;
69
- }
70
-
71
- console.log(`Installing the ${type} ${ext}...`);
72
- await runExtensionCommand({
73
- appiumHome,
74
- [`${type}Command`]: 'install',
75
- [type]: ext,
76
- suppressOutput: true
77
- }, type);
78
- }
79
-
80
- if (require.main === module) {
81
- main().then(() => {
82
- process.exit(0);
83
- }).catch(e => {
84
- console.error(e);
85
- process.exit(1);
86
- });
87
- }require('source-map-support').install();
88
-
89
-
90
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInBvc3RpbnN0YWxsLmpzIl0sIm5hbWVzIjpbIm1haW4iLCJkcml2ZXJFbnYiLCJwcm9jZXNzIiwiZW52IiwibnBtX2NvbmZpZ19kcml2ZXJzIiwicGx1Z2luRW52IiwibnBtX2NvbmZpZ19wbHVnaW5zIiwiY29uc29sZSIsImxvZyIsImV4dGVuc2lvbiIsInJlcXVpcmUiLCJlIiwiRXJyb3IiLCJtZXNzYWdlIiwiREVGQVVMVF9BUFBJVU1fSE9NRSIsIkRSSVZFUl9UWVBFIiwiUExVR0lOX1RZUEUiLCJydW5FeHRlbnNpb25Db21tYW5kIiwiYXBwaXVtSG9tZSIsIm5wbV9jb25maWdfYXBwaXVtX2hvbWUiLCJzcGVjcyIsInR5cGUiLCJleHRFbnYiLCJleHQiLCJzcGxpdCIsImNoZWNrQW5kSW5zdGFsbEV4dGVuc2lvbiIsImV4dExpc3QiLCJzaG93SW5zdGFsbGVkIiwic3VwcHJlc3NPdXRwdXQiLCJtb2R1bGUiLCJ0aGVuIiwiZXhpdCIsImNhdGNoIiwiZXJyb3IiXSwibWFwcGluZ3MiOiJBQUFBOzs7OztBQUdBLGVBQWVBLElBQWYsR0FBdUI7QUFDckIsUUFBTUMsU0FBUyxHQUFHQyxPQUFPLENBQUNDLEdBQVIsQ0FBWUMsa0JBQTlCO0FBQ0EsUUFBTUMsU0FBUyxHQUFHSCxPQUFPLENBQUNDLEdBQVIsQ0FBWUcsa0JBQTlCOztBQUVBLE1BQUksQ0FBQ0wsU0FBRCxJQUFjLENBQUNJLFNBQW5CLEVBQThCO0FBQzVCRSxJQUFBQSxPQUFPLENBQUNDLEdBQVIsQ0FBWSw0Q0FBWjtBQUNBO0FBQ0Q7O0FBRUQsTUFBSUMsU0FBSjs7QUFDQSxNQUFJO0FBQ0ZBLElBQUFBLFNBQVMsR0FBR0MsT0FBTyxDQUFDLDJCQUFELENBQW5CO0FBQ0QsR0FGRCxDQUVFLE9BQU9DLENBQVAsRUFBVTtBQUNWLFVBQU0sSUFBSUMsS0FBSixDQUFXLHNFQUFELEdBQ0MsSUFBR0QsQ0FBQyxDQUFDRSxPQUFRLEdBRHhCLENBQU47QUFFRDs7QUFFRCxRQUFNO0FBQUNDLElBQUFBLG1CQUFEO0FBQXNCQyxJQUFBQSxXQUF0QjtBQUFtQ0MsSUFBQUE7QUFBbkMsTUFBa0ROLE9BQU8sQ0FBQyw4QkFBRCxDQUEvRDs7QUFDQSxRQUFNO0FBQUNPLElBQUFBO0FBQUQsTUFBd0JSLFNBQTlCO0FBQ0EsUUFBTVMsVUFBVSxHQUFHaEIsT0FBTyxDQUFDQyxHQUFSLENBQVlnQixzQkFBWixJQUFzQ0wsbUJBQXpEO0FBQ0EsUUFBTU0sS0FBSyxHQUFHLENBQUMsQ0FBQ0wsV0FBRCxFQUFjZCxTQUFkLENBQUQsRUFBMkIsQ0FBQ2UsV0FBRCxFQUFjWCxTQUFkLENBQTNCLENBQWQ7O0FBRUEsT0FBSyxNQUFNLENBQUNnQixJQUFELEVBQU9DLE1BQVAsQ0FBWCxJQUE2QkYsS0FBN0IsRUFBb0M7QUFDbEMsUUFBSUUsTUFBSixFQUFZO0FBQ1YsV0FBSyxNQUFNQyxHQUFYLElBQWtCRCxNQUFNLENBQUNFLEtBQVAsQ0FBYSxHQUFiLENBQWxCLEVBQXFDO0FBQ25DLFlBQUk7QUFDRixnQkFBTUMsd0JBQXdCLENBQUM7QUFBQ1IsWUFBQUEsbUJBQUQ7QUFBc0JDLFlBQUFBLFVBQXRCO0FBQWtDRyxZQUFBQSxJQUFsQztBQUF3Q0UsWUFBQUE7QUFBeEMsV0FBRCxDQUE5QjtBQUNELFNBRkQsQ0FFRSxPQUFPWixDQUFQLEVBQVU7QUFDVkosVUFBQUEsT0FBTyxDQUFDQyxHQUFSLENBQWEsOENBQTZDYSxJQUFLLElBQUdFLEdBQUksS0FBSVosQ0FBQyxDQUFDRSxPQUFRLEVBQXBGO0FBQ0Q7QUFDRjtBQUNGO0FBQ0Y7QUFDRjs7QUFFRCxlQUFlWSx3QkFBZixDQUF5QztBQUN2Q1IsRUFBQUEsbUJBRHVDO0FBRXZDQyxFQUFBQSxVQUZ1QztBQUd2Q0csRUFBQUEsSUFIdUM7QUFJdkNFLEVBQUFBO0FBSnVDLENBQXpDLEVBS0c7QUFDRCxRQUFNRyxPQUFPLEdBQUcsTUFBTVQsbUJBQW1CLENBQUM7QUFDeENDLElBQUFBLFVBRHdDO0FBRXhDLEtBQUUsR0FBRUcsSUFBSyxTQUFULEdBQW9CLE1BRm9CO0FBR3hDTSxJQUFBQSxhQUFhLEVBQUUsSUFIeUI7QUFJeENDLElBQUFBLGNBQWMsRUFBRTtBQUp3QixHQUFELEVBS3RDUCxJQUxzQyxDQUF6Qzs7QUFNQSxNQUFJSyxPQUFPLENBQUNILEdBQUQsQ0FBWCxFQUFrQjtBQUNoQmhCLElBQUFBLE9BQU8sQ0FBQ0MsR0FBUixDQUFhLE9BQU1hLElBQUssSUFBR0UsR0FBSSxxQ0FBL0I7QUFDQTtBQUNEOztBQUNEaEIsRUFBQUEsT0FBTyxDQUFDQyxHQUFSLENBQWEsa0JBQWlCYSxJQUFLLElBQUdFLEdBQUksS0FBMUM7QUFDQSxRQUFNTixtQkFBbUIsQ0FBQztBQUN4QkMsSUFBQUEsVUFEd0I7QUFFeEIsS0FBRSxHQUFFRyxJQUFLLFNBQVQsR0FBb0IsU0FGSTtBQUd4QixLQUFDQSxJQUFELEdBQVFFLEdBSGdCO0FBSXhCSyxJQUFBQSxjQUFjLEVBQUU7QUFKUSxHQUFELEVBS3RCUCxJQUxzQixDQUF6QjtBQU1EOztBQUVELElBQUlYLE9BQU8sQ0FBQ1YsSUFBUixLQUFpQjZCLE1BQXJCLEVBQTZCO0FBQzNCN0IsRUFBQUEsSUFBSSxHQUFHOEIsSUFBUCxDQUFZLE1BQU07QUFDaEI1QixJQUFBQSxPQUFPLENBQUM2QixJQUFSLENBQWEsQ0FBYjtBQUNELEdBRkQsRUFFR0MsS0FGSCxDQUVVckIsQ0FBRCxJQUFPO0FBQ2RKLElBQUFBLE9BQU8sQ0FBQzBCLEtBQVIsQ0FBY3RCLENBQWQ7QUFDQVQsSUFBQUEsT0FBTyxDQUFDNkIsSUFBUixDQUFhLENBQWI7QUFDRCxHQUxEO0FBTUQiLCJzb3VyY2VzQ29udGVudCI6WyIjIS91c3IvYmluL2VudiBub2RlXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zb2xlLCBwcm9taXNlL3ByZWZlci1hd2FpdC10by10aGVuICovXG5cbmFzeW5jIGZ1bmN0aW9uIG1haW4gKCkge1xuICBjb25zdCBkcml2ZXJFbnYgPSBwcm9jZXNzLmVudi5ucG1fY29uZmlnX2RyaXZlcnM7XG4gIGNvbnN0IHBsdWdpbkVudiA9IHByb2Nlc3MuZW52Lm5wbV9jb25maWdfcGx1Z2lucztcblxuICBpZiAoIWRyaXZlckVudiAmJiAhcGx1Z2luRW52KSB7XG4gICAgY29uc29sZS5sb2coJ05vdCBhdXRvLWluc3RhbGxpbmcgYW55IGRyaXZlcnMgb3IgcGx1Z2lucycpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxldCBleHRlbnNpb247XG4gIHRyeSB7XG4gICAgZXh0ZW5zaW9uID0gcmVxdWlyZSgnLi9idWlsZC9saWIvY2xpL2V4dGVuc2lvbicpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgbG9hZCBleHRlbnNpb24gQ0xJIGZpbGU7IGhhcyB0aGUgcHJvamVjdCBiZWVuIHRyYW5zcGlsZWQ/IGAgK1xuICAgICAgICAgICAgICAgICAgICBgKCR7ZS5tZXNzYWdlfSlgKTtcbiAgfVxuXG4gIGNvbnN0IHtERUZBVUxUX0FQUElVTV9IT01FLCBEUklWRVJfVFlQRSwgUExVR0lOX1RZUEV9ID0gcmVxdWlyZSgnLi9idWlsZC9saWIvZXh0ZW5zaW9uLWNvbmZpZycpO1xuICBjb25zdCB7cnVuRXh0ZW5zaW9uQ29tbWFuZH0gPSBleHRlbnNpb247XG4gIGNvbnN0IGFwcGl1bUhvbWUgPSBwcm9jZXNzLmVudi5ucG1fY29uZmlnX2FwcGl1bV9ob21lIHx8IERFRkFVTFRfQVBQSVVNX0hPTUU7XG4gIGNvbnN0IHNwZWNzID0gW1tEUklWRVJfVFlQRSwgZHJpdmVyRW52XSwgW1BMVUdJTl9UWVBFLCBwbHVnaW5FbnZdXTtcblxuICBmb3IgKGNvbnN0IFt0eXBlLCBleHRFbnZdIG9mIHNwZWNzKSB7XG4gICAgaWYgKGV4dEVudikge1xuICAgICAgZm9yIChjb25zdCBleHQgb2YgZXh0RW52LnNwbGl0KCcsJykpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBjaGVja0FuZEluc3RhbGxFeHRlbnNpb24oe3J1bkV4dGVuc2lvbkNvbW1hbmQsIGFwcGl1bUhvbWUsIHR5cGUsIGV4dH0pO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYFRoZXJlIHdhcyBhbiBlcnJvciBjaGVja2luZyBhbmQgaW5zdGFsbGluZyAke3R5cGV9ICR7ZXh0fTogJHtlLm1lc3NhZ2V9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gY2hlY2tBbmRJbnN0YWxsRXh0ZW5zaW9uICh7XG4gIHJ1bkV4dGVuc2lvbkNvbW1hbmQsXG4gIGFwcGl1bUhvbWUsXG4gIHR5cGUsXG4gIGV4dCxcbn0pIHtcbiAgY29uc3QgZXh0TGlzdCA9IGF3YWl0IHJ1bkV4dGVuc2lvbkNvbW1hbmQoe1xuICAgIGFwcGl1bUhvbWUsXG4gICAgW2Ake3R5cGV9Q29tbWFuZGBdOiAnbGlzdCcsXG4gICAgc2hvd0luc3RhbGxlZDogdHJ1ZSxcbiAgICBzdXBwcmVzc091dHB1dDogdHJ1ZSxcbiAgfSwgdHlwZSk7XG4gIGlmIChleHRMaXN0W2V4dF0pIHtcbiAgICBjb25zb2xlLmxvZyhgVGhlICR7dHlwZX0gJHtleHR9IHdhcyBhbHJlYWR5IGluc3RhbGxlZCwgc2tpcHBpbmcuLi5gKTtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc29sZS5sb2coYEluc3RhbGxpbmcgdGhlICR7dHlwZX0gJHtleHR9Li4uYCk7XG4gIGF3YWl0IHJ1bkV4dGVuc2lvbkNvbW1hbmQoe1xuICAgIGFwcGl1bUhvbWUsXG4gICAgW2Ake3R5cGV9Q29tbWFuZGBdOiAnaW5zdGFsbCcsXG4gICAgW3R5cGVdOiBleHQsXG4gICAgc3VwcHJlc3NPdXRwdXQ6IHRydWUsXG4gIH0sIHR5cGUpO1xufVxuXG5pZiAocmVxdWlyZS5tYWluID09PSBtb2R1bGUpIHtcbiAgbWFpbigpLnRoZW4oKCkgPT4ge1xuICAgIHByb2Nlc3MuZXhpdCgwKTtcbiAgfSkuY2F0Y2goKGUpID0+IHtcbiAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfSk7XG59XG4iXSwiZmlsZSI6InBvc3RpbnN0YWxsLmpzIiwic291cmNlUm9vdCI6Ii4uIn0=
@@ -1,77 +0,0 @@
1
- import { Action } from 'argparse';
2
-
3
-
4
- const DEFAULT_CAPS_ARG = '--default-capabilities';
5
-
6
-
7
- class StoreDeprecatedAction extends Action {
8
- constructor (options = {}) {
9
- const opts = Object.assign({}, options);
10
- let helpPrefix = '[DEPRECATED]';
11
- if (opts.deprecated_for) {
12
- helpPrefix = `[DEPRECATED, use ${opts.deprecated_for} instead]`;
13
- delete opts.deprecated_for;
14
- }
15
- if (opts.help) {
16
- opts.help = `${helpPrefix} - ${opts.help}`;
17
- } else {
18
- opts.help = helpPrefix;
19
- }
20
- super(opts);
21
- }
22
-
23
- call (parser, namespace, values) {
24
- namespace[this.dest] = values;
25
- }
26
- }
27
-
28
-
29
- class StoreDeprecatedTrueAction extends StoreDeprecatedAction {
30
- constructor (options = {}) {
31
- super(Object.assign({}, options, {const: true, nargs: 0}));
32
- }
33
-
34
- call (parser, namespace) {
35
- namespace[this.dest] = this.const;
36
- }
37
- }
38
-
39
-
40
- class StoreDeprecatedDefaultCapabilityAction extends StoreDeprecatedAction {
41
- constructor (options = {}) {
42
- super(Object.assign({}, options, {deprecated_for: DEFAULT_CAPS_ARG}));
43
- }
44
-
45
- _writeDefaultCap (namespace, value) {
46
- namespace[this.dest] = value;
47
- if (value === this.default) {
48
- return;
49
- }
50
-
51
- if (!namespace.defaultCapabilities) {
52
- namespace.defaultCapabilities = {};
53
- }
54
- namespace.defaultCapabilities[this.dest] = value;
55
- }
56
-
57
- call (parser, namespace, values) {
58
- this._writeDefaultCap(namespace, values);
59
- }
60
- }
61
-
62
-
63
- class StoreDeprecatedDefaultCapabilityTrueAction extends StoreDeprecatedDefaultCapabilityAction {
64
- constructor (options = {}) {
65
- super(Object.assign({}, options, {const: true, nargs: 0}));
66
- }
67
-
68
- call (parser, namespace) {
69
- this._writeDefaultCap(namespace, this.const);
70
- }
71
- }
72
-
73
- export {
74
- StoreDeprecatedAction, StoreDeprecatedTrueAction,
75
- StoreDeprecatedDefaultCapabilityAction, StoreDeprecatedDefaultCapabilityTrueAction,
76
- DEFAULT_CAPS_ARG,
77
- };