appium 2.0.0-beta.46 → 2.0.0-beta.47

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 (138) hide show
  1. package/README.md +145 -44
  2. package/build/lib/appium.d.ts +3 -103
  3. package/build/lib/appium.d.ts.map +1 -1
  4. package/build/lib/appium.js +679 -549
  5. package/build/lib/appium.js.map +1 -1
  6. package/build/lib/cli/args.js +247 -127
  7. package/build/lib/cli/args.js.map +1 -1
  8. package/build/lib/cli/driver-command.js +63 -88
  9. package/build/lib/cli/driver-command.js.map +1 -1
  10. package/build/lib/cli/extension-command.d.ts +32 -23
  11. package/build/lib/cli/extension-command.d.ts.map +1 -1
  12. package/build/lib/cli/extension-command.js +730 -512
  13. package/build/lib/cli/extension-command.js.map +1 -1
  14. package/build/lib/cli/extension.d.ts +7 -6
  15. package/build/lib/cli/extension.d.ts.map +1 -1
  16. package/build/lib/cli/extension.js +68 -65
  17. package/build/lib/cli/extension.js.map +1 -1
  18. package/build/lib/cli/parser.d.ts +3 -3
  19. package/build/lib/cli/parser.d.ts.map +1 -1
  20. package/build/lib/cli/parser.js +234 -192
  21. package/build/lib/cli/parser.js.map +1 -1
  22. package/build/lib/cli/plugin-command.js +58 -87
  23. package/build/lib/cli/plugin-command.js.map +1 -1
  24. package/build/lib/cli/utils.js +66 -69
  25. package/build/lib/cli/utils.js.map +1 -1
  26. package/build/lib/config-file.d.ts.map +1 -1
  27. package/build/lib/config-file.js +189 -120
  28. package/build/lib/config-file.js.map +1 -1
  29. package/build/lib/config.d.ts.map +1 -1
  30. package/build/lib/config.js +254 -213
  31. package/build/lib/config.js.map +1 -1
  32. package/build/lib/constants.d.ts +5 -5
  33. package/build/lib/constants.d.ts.map +1 -1
  34. package/build/lib/constants.js +64 -59
  35. package/build/lib/constants.js.map +1 -1
  36. package/build/lib/extension/driver-config.js +199 -164
  37. package/build/lib/extension/driver-config.js.map +1 -1
  38. package/build/lib/extension/extension-config.d.ts +18 -16
  39. package/build/lib/extension/extension-config.d.ts.map +1 -1
  40. package/build/lib/extension/extension-config.js +523 -396
  41. package/build/lib/extension/extension-config.js.map +1 -1
  42. package/build/lib/extension/index.js +98 -68
  43. package/build/lib/extension/index.js.map +1 -1
  44. package/build/lib/extension/manifest-migrations.d.ts +27 -0
  45. package/build/lib/extension/manifest-migrations.d.ts.map +1 -0
  46. package/build/lib/extension/manifest-migrations.js +99 -0
  47. package/build/lib/extension/manifest-migrations.js.map +1 -0
  48. package/build/lib/extension/manifest.d.ts +7 -56
  49. package/build/lib/extension/manifest.d.ts.map +1 -1
  50. package/build/lib/extension/manifest.js +432 -240
  51. package/build/lib/extension/manifest.js.map +1 -1
  52. package/build/lib/extension/package-changed.js +57 -61
  53. package/build/lib/extension/package-changed.js.map +1 -1
  54. package/build/lib/extension/plugin-config.d.ts +2 -3
  55. package/build/lib/extension/plugin-config.d.ts.map +1 -1
  56. package/build/lib/extension/plugin-config.js +94 -70
  57. package/build/lib/extension/plugin-config.js.map +1 -1
  58. package/build/lib/grid-register.js +119 -137
  59. package/build/lib/grid-register.js.map +1 -1
  60. package/build/lib/logger.d.ts +1 -1
  61. package/build/lib/logger.d.ts.map +1 -1
  62. package/build/lib/logger.js +5 -15
  63. package/build/lib/logger.js.map +1 -1
  64. package/build/lib/logsink.d.ts.map +1 -1
  65. package/build/lib/logsink.js +189 -183
  66. package/build/lib/logsink.js.map +1 -1
  67. package/build/lib/main.d.ts +19 -12
  68. package/build/lib/main.d.ts.map +1 -1
  69. package/build/lib/main.js +330 -304
  70. package/build/lib/main.js.map +1 -1
  71. package/build/lib/schema/arg-spec.js +153 -108
  72. package/build/lib/schema/arg-spec.js.map +1 -1
  73. package/build/lib/schema/cli-args.js +203 -164
  74. package/build/lib/schema/cli-args.js.map +1 -1
  75. package/build/lib/schema/cli-transformers.js +117 -72
  76. package/build/lib/schema/cli-transformers.js.map +1 -1
  77. package/build/lib/schema/index.js +17 -32
  78. package/build/lib/schema/index.js.map +1 -1
  79. package/build/lib/schema/keywords.js +125 -67
  80. package/build/lib/schema/keywords.js.map +1 -1
  81. package/build/lib/schema/schema.d.ts.map +1 -1
  82. package/build/lib/schema/schema.js +582 -417
  83. package/build/lib/schema/schema.js.map +1 -1
  84. package/build/lib/utils.d.ts +41 -255
  85. package/build/lib/utils.d.ts.map +1 -1
  86. package/build/lib/utils.js +342 -193
  87. package/build/lib/utils.js.map +1 -1
  88. package/build/tsconfig.tsbuildinfo +1 -1
  89. package/build/types/cli.d.ts +45 -34
  90. package/build/types/cli.d.ts.map +1 -1
  91. package/build/types/cli.js +3 -0
  92. package/build/types/cli.js.map +1 -0
  93. package/build/types/index.d.ts +1 -2
  94. package/build/types/index.d.ts.map +1 -1
  95. package/build/types/index.js +19 -0
  96. package/build/types/index.js.map +1 -0
  97. package/build/types/manifest/base.d.ts +135 -0
  98. package/build/types/manifest/base.d.ts.map +1 -0
  99. package/build/types/manifest/base.js +3 -0
  100. package/build/types/manifest/base.js.map +1 -0
  101. package/build/types/manifest/index.d.ts +19 -0
  102. package/build/types/manifest/index.d.ts.map +1 -0
  103. package/build/types/manifest/index.js +40 -0
  104. package/build/types/manifest/index.js.map +1 -0
  105. package/build/types/manifest/v3.d.ts +139 -0
  106. package/build/types/manifest/v3.d.ts.map +1 -0
  107. package/build/types/manifest/v3.js +3 -0
  108. package/build/types/manifest/v3.js.map +1 -0
  109. package/lib/appium.js +1 -1
  110. package/lib/cli/args.js +1 -1
  111. package/lib/cli/extension-command.js +116 -61
  112. package/lib/cli/extension.js +9 -8
  113. package/lib/cli/parser.js +2 -2
  114. package/lib/config-file.js +2 -3
  115. package/lib/config.js +3 -2
  116. package/lib/constants.js +6 -5
  117. package/lib/extension/extension-config.js +24 -25
  118. package/lib/extension/manifest-migrations.js +99 -0
  119. package/lib/extension/manifest.js +79 -72
  120. package/lib/extension/plugin-config.js +1 -2
  121. package/lib/logsink.js +26 -5
  122. package/lib/main.js +58 -50
  123. package/lib/schema/schema.js +6 -1
  124. package/lib/utils.js +62 -0
  125. package/package.json +23 -24
  126. package/scripts/autoinstall-extensions.js +78 -26
  127. package/types/cli.ts +81 -42
  128. package/types/index.ts +1 -2
  129. package/types/manifest/README.md +30 -0
  130. package/types/manifest/base.ts +158 -0
  131. package/types/manifest/index.ts +27 -0
  132. package/types/manifest/v3.ts +161 -0
  133. package/build/types/appium-manifest.d.ts +0 -59
  134. package/build/types/appium-manifest.d.ts.map +0 -1
  135. package/build/types/extension-manifest.d.ts +0 -55
  136. package/build/types/extension-manifest.d.ts.map +0 -1
  137. package/types/appium-manifest.ts +0 -73
  138. package/types/extension-manifest.ts +0 -64
@@ -18,17 +18,13 @@ export const KNOWN_PLUGINS: Readonly<{
18
18
  readonly images: "@appium/images-plugin";
19
19
  readonly 'execute-driver': "@appium/execute-driver-plugin";
20
20
  readonly 'relaxed-caps': "@appium/relaxed-caps-plugin";
21
+ readonly 'universal-xml': "@appium/universal-xml-plugin";
21
22
  }>;
22
23
  export const KNOWN_DRIVERS: Readonly<{
23
24
  readonly uiautomator2: "appium-uiautomator2-driver";
24
25
  readonly xcuitest: "appium-xcuitest-driver";
25
- readonly youiengine: "appium-youiengine-driver";
26
- readonly windows: "appium-windows-driver";
27
- readonly mac: "appium-mac-driver";
28
26
  readonly mac2: "appium-mac2-driver";
29
27
  readonly espresso: "appium-espresso-driver";
30
- readonly tizen: "appium-tizen-driver";
31
- readonly flutter: "appium-flutter-driver";
32
28
  readonly safari: "appium-safari-driver";
33
29
  readonly gecko: "appium-geckodriver";
34
30
  }>;
@@ -45,4 +41,8 @@ export const EXT_SUBCOMMAND_INSTALL: "install";
45
41
  export const EXT_SUBCOMMAND_UNINSTALL: "uninstall";
46
42
  export const EXT_SUBCOMMAND_UPDATE: "update";
47
43
  export const EXT_SUBCOMMAND_RUN: "run";
44
+ /**
45
+ * Current revision of the manifest (`extensions.yaml`) schema
46
+ */
47
+ export const CURRENT_SCHEMA_REV: 3;
48
48
  //# sourceMappingURL=constants.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../lib/constants.js"],"names":[],"mappings":"AAEA;;GAEG;AACH,mCAAoC;AAEpC;;GAEG;AACH,mCAAoC;AAEpC;;GAEG;AACH,yCAA0C;AAE1C;;GAEG;AACH,oCAAqC;AAMrC;;;;GAME;AAMF;;;;;;;;;;;;GAcE;AAEF;;GAEG;AACH,6CAAqF;AAErF;;GAEG;AACH,gDAA6F;AAE7F,yCAA0C;AAC1C,+CAAgD;AAChD,mDAAoD;AACpD,6CAA8C;AAC9C,uCAAwC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../lib/constants.js"],"names":[],"mappings":"AAEA;;GAEG;AACH,mCAAoC;AAEpC;;GAEG;AACH,mCAAoC;AAEpC;;GAEG;AACH,yCAA0C;AAE1C;;GAEG;AACH,oCAAqC;AAMrC;;;;;GAOE;AAMF;;;;;;;GASE;AAEF;;GAEG;AACH,6CAAqF;AAErF;;GAEG;AACH,gDAA6F;AAE7F,yCAA0C;AAC1C,+CAAgD;AAChD,mDAAoD;AACpD,6CAA8C;AAC9C,uCAAwC;AAExC;;GAEG;AACH,mCAAoC"}
@@ -1,60 +1,65 @@
1
1
  "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.USE_ALL_PLUGINS = exports.SERVER_SUBCOMMAND = exports.PLUGIN_TYPE = exports.PKG_HASHFILE_RELATIVE_PATH = exports.KNOWN_PLUGINS = exports.KNOWN_DRIVERS = exports.EXT_SUBCOMMAND_UPDATE = exports.EXT_SUBCOMMAND_UNINSTALL = exports.EXT_SUBCOMMAND_RUN = exports.EXT_SUBCOMMAND_LIST = exports.EXT_SUBCOMMAND_INSTALL = exports.DRIVER_TYPE = exports.CACHE_DIR_RELATIVE_PATH = void 0;
7
-
8
- require("source-map-support/register");
9
-
10
- var _path = _interopRequireDefault(require("path"));
11
-
12
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
-
14
- const DRIVER_TYPE = 'driver';
15
- exports.DRIVER_TYPE = DRIVER_TYPE;
16
- const PLUGIN_TYPE = 'plugin';
17
- exports.PLUGIN_TYPE = PLUGIN_TYPE;
18
- const SERVER_SUBCOMMAND = 'server';
19
- exports.SERVER_SUBCOMMAND = SERVER_SUBCOMMAND;
20
- const USE_ALL_PLUGINS = 'all';
21
- exports.USE_ALL_PLUGINS = USE_ALL_PLUGINS;
22
- const KNOWN_PLUGINS = Object.freeze({
23
- images: '@appium/images-plugin',
24
- 'execute-driver': '@appium/execute-driver-plugin',
25
- 'relaxed-caps': '@appium/relaxed-caps-plugin'
26
- });
27
- exports.KNOWN_PLUGINS = KNOWN_PLUGINS;
28
- const KNOWN_DRIVERS = Object.freeze({
29
- uiautomator2: 'appium-uiautomator2-driver',
30
- xcuitest: 'appium-xcuitest-driver',
31
- youiengine: 'appium-youiengine-driver',
32
- windows: 'appium-windows-driver',
33
- mac: 'appium-mac-driver',
34
- mac2: 'appium-mac2-driver',
35
- espresso: 'appium-espresso-driver',
36
- tizen: 'appium-tizen-driver',
37
- flutter: 'appium-flutter-driver',
38
- safari: 'appium-safari-driver',
39
- gecko: 'appium-geckodriver'
40
- });
41
- exports.KNOWN_DRIVERS = KNOWN_DRIVERS;
42
-
43
- const CACHE_DIR_RELATIVE_PATH = _path.default.join('node_modules', '.cache', 'appium');
44
-
45
- exports.CACHE_DIR_RELATIVE_PATH = CACHE_DIR_RELATIVE_PATH;
46
-
47
- const PKG_HASHFILE_RELATIVE_PATH = _path.default.join(CACHE_DIR_RELATIVE_PATH, 'package.hash');
48
-
49
- exports.PKG_HASHFILE_RELATIVE_PATH = PKG_HASHFILE_RELATIVE_PATH;
50
- const EXT_SUBCOMMAND_LIST = 'list';
51
- exports.EXT_SUBCOMMAND_LIST = EXT_SUBCOMMAND_LIST;
52
- const EXT_SUBCOMMAND_INSTALL = 'install';
53
- exports.EXT_SUBCOMMAND_INSTALL = EXT_SUBCOMMAND_INSTALL;
54
- const EXT_SUBCOMMAND_UNINSTALL = 'uninstall';
55
- exports.EXT_SUBCOMMAND_UNINSTALL = EXT_SUBCOMMAND_UNINSTALL;
56
- const EXT_SUBCOMMAND_UPDATE = 'update';
57
- exports.EXT_SUBCOMMAND_UPDATE = EXT_SUBCOMMAND_UPDATE;
58
- const EXT_SUBCOMMAND_RUN = 'run';
59
- exports.EXT_SUBCOMMAND_RUN = EXT_SUBCOMMAND_RUN;
60
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEUklWRVJfVFlQRSIsIlBMVUdJTl9UWVBFIiwiU0VSVkVSX1NVQkNPTU1BTkQiLCJVU0VfQUxMX1BMVUdJTlMiLCJLTk9XTl9QTFVHSU5TIiwiT2JqZWN0IiwiZnJlZXplIiwiaW1hZ2VzIiwiS05PV05fRFJJVkVSUyIsInVpYXV0b21hdG9yMiIsInhjdWl0ZXN0IiwieW91aWVuZ2luZSIsIndpbmRvd3MiLCJtYWMiLCJtYWMyIiwiZXNwcmVzc28iLCJ0aXplbiIsImZsdXR0ZXIiLCJzYWZhcmkiLCJnZWNrbyIsIkNBQ0hFX0RJUl9SRUxBVElWRV9QQVRIIiwicGF0aCIsImpvaW4iLCJQS0dfSEFTSEZJTEVfUkVMQVRJVkVfUEFUSCIsIkVYVF9TVUJDT01NQU5EX0xJU1QiLCJFWFRfU1VCQ09NTUFORF9JTlNUQUxMIiwiRVhUX1NVQkNPTU1BTkRfVU5JTlNUQUxMIiwiRVhUX1NVQkNPTU1BTkRfVVBEQVRFIiwiRVhUX1NVQkNPTU1BTkRfUlVOIl0sInNvdXJjZXMiOlsiLi4vLi4vbGliL2NvbnN0YW50cy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcblxuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgZXh0ZW5zaW9uIHR5cGUgZm9yIGRyaXZlcnNcbiAqL1xuZXhwb3J0IGNvbnN0IERSSVZFUl9UWVBFID0gJ2RyaXZlcic7XG5cbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIGV4dGVuc2lvbiB0eXBlIGZvciBwbHVnaW5zXG4gKi9cbmV4cG9ydCBjb25zdCBQTFVHSU5fVFlQRSA9ICdwbHVnaW4nO1xuXG4vKipcbiAqIFRoZSBgc2VydmVyYCBjb21tYW5kIG9mIHRoZSBgYXBwaXVtYCBDTElcbiAqL1xuZXhwb3J0IGNvbnN0IFNFUlZFUl9TVUJDT01NQU5EID0gJ3NlcnZlcic7XG5cbi8qKlxuICogVGhlIHZhbHVlIG9mIGAtLXVzZS1wbHVnaW5zYCBpZiBfYWxsXyBwbHVnaW5zIHNob3VsZCBiZSBsb2FkZWRcbiAqL1xuZXhwb3J0IGNvbnN0IFVTRV9BTExfUExVR0lOUyA9ICdhbGwnO1xuXG4vLyBUaGlzIGlzIGEgbWFwIG9mIHBsdWdpbiBuYW1lcyB0byBucG0gcGFja2FnZXMgcmVwcmVzZW50aW5nIHRob3NlIHBsdWdpbnMuXG4vLyBUaGUgcGx1Z2lucyBpbiB0aGlzIGxpc3Qgd2lsbCBiZSBhdmFpbGFibGUgdG8gdGhlIENMSSBzbyB1c2VycyBjYW4ganVzdFxuLy8gdHlwZSAnYXBwaXVtIHBsdWdpbiBpbnN0YWxsICduYW1lJycsIHJhdGhlciB0aGFuIGhhdmluZyB0byBzcGVjaWZ5IHRoZSBmdWxsXG4vLyBucG0gcGFja2FnZS4gSS5lLiwgdGhlc2UgYXJlIHRoZSBvZmZpY2lhbGx5IHJlY29nbml6ZWQgcGx1Z2lucy5cbmV4cG9ydCBjb25zdCBLTk9XTl9QTFVHSU5TID0gT2JqZWN0LmZyZWV6ZShcbiAgLyoqIEB0eXBlIHtjb25zdH0gKi8gKHtcbiAgICBpbWFnZXM6ICdAYXBwaXVtL2ltYWdlcy1wbHVnaW4nLFxuICAgICdleGVjdXRlLWRyaXZlcic6ICdAYXBwaXVtL2V4ZWN1dGUtZHJpdmVyLXBsdWdpbicsXG4gICAgJ3JlbGF4ZWQtY2Fwcyc6ICdAYXBwaXVtL3JlbGF4ZWQtY2Fwcy1wbHVnaW4nLFxuICB9KVxuKTtcblxuLy8gVGhpcyBpcyBhIG1hcCBvZiBkcml2ZXIgbmFtZXMgdG8gbnBtIHBhY2thZ2VzIHJlcHJlc2VudGluZyB0aG9zZSBkcml2ZXJzLlxuLy8gVGhlIGRyaXZlcnMgaW4gdGhpcyBsaXN0IHdpbGwgYmUgYXZhaWxhYmxlIHRvIHRoZSBDTEkgc28gdXNlcnMgY2FuIGp1c3Rcbi8vIHR5cGUgJ2FwcGl1bSBkcml2ZXIgaW5zdGFsbCAnbmFtZScnLCByYXRoZXIgdGhhbiBoYXZpbmcgdG8gc3BlY2lmeSB0aGUgZnVsbFxuLy8gbnBtIHBhY2thZ2UuIEkuZS4sIHRoZXNlIGFyZSB0aGUgb2ZmaWNpYWxseSByZWNvZ25pemVkIGRyaXZlcnMuXG5leHBvcnQgY29uc3QgS05PV05fRFJJVkVSUyA9IE9iamVjdC5mcmVlemUoXG4gIC8qKiBAdHlwZSB7Y29uc3R9ICovICh7XG4gICAgdWlhdXRvbWF0b3IyOiAnYXBwaXVtLXVpYXV0b21hdG9yMi1kcml2ZXInLFxuICAgIHhjdWl0ZXN0OiAnYXBwaXVtLXhjdWl0ZXN0LWRyaXZlcicsXG4gICAgeW91aWVuZ2luZTogJ2FwcGl1bS15b3VpZW5naW5lLWRyaXZlcicsXG4gICAgd2luZG93czogJ2FwcGl1bS13aW5kb3dzLWRyaXZlcicsXG4gICAgbWFjOiAnYXBwaXVtLW1hYy1kcml2ZXInLFxuICAgIG1hYzI6ICdhcHBpdW0tbWFjMi1kcml2ZXInLFxuICAgIGVzcHJlc3NvOiAnYXBwaXVtLWVzcHJlc3NvLWRyaXZlcicsXG4gICAgdGl6ZW46ICdhcHBpdW0tdGl6ZW4tZHJpdmVyJyxcbiAgICBmbHV0dGVyOiAnYXBwaXVtLWZsdXR0ZXItZHJpdmVyJyxcbiAgICBzYWZhcmk6ICdhcHBpdW0tc2FmYXJpLWRyaXZlcicsXG4gICAgZ2Vja286ICdhcHBpdW0tZ2Vja29kcml2ZXInLFxuICB9KVxuKTtcblxuLyoqXG4gKiBSZWxhdGl2ZSBwYXRoIHRvIGRpcmVjdG9yeSBjb250YWluaW5nIGFueSBBcHBpdW0gaW50ZXJuYWwgZmlsZXNcbiAqL1xuZXhwb3J0IGNvbnN0IENBQ0hFX0RJUl9SRUxBVElWRV9QQVRIID0gcGF0aC5qb2luKCdub2RlX21vZHVsZXMnLCAnLmNhY2hlJywgJ2FwcGl1bScpO1xuXG4vKipcbiAqIFJlbGF0aXZlIHBhdGggdG8gaGFzaGZpbGUgKGZyb20gYEFQUElVTV9IT01FYCkgb2YgY29uc3VtaW5nIHByb2plY3QncyBgcGFja2FnZS5qc29uYCAoaWYgaXQgZXhpc3RzKVxuICovXG5leHBvcnQgY29uc3QgUEtHX0hBU0hGSUxFX1JFTEFUSVZFX1BBVEggPSBwYXRoLmpvaW4oQ0FDSEVfRElSX1JFTEFUSVZFX1BBVEgsICdwYWNrYWdlLmhhc2gnKTtcblxuZXhwb3J0IGNvbnN0IEVYVF9TVUJDT01NQU5EX0xJU1QgPSAnbGlzdCc7XG5leHBvcnQgY29uc3QgRVhUX1NVQkNPTU1BTkRfSU5TVEFMTCA9ICdpbnN0YWxsJztcbmV4cG9ydCBjb25zdCBFWFRfU1VCQ09NTUFORF9VTklOU1RBTEwgPSAndW5pbnN0YWxsJztcbmV4cG9ydCBjb25zdCBFWFRfU1VCQ09NTUFORF9VUERBVEUgPSAndXBkYXRlJztcbmV4cG9ydCBjb25zdCBFWFRfU1VCQ09NTUFORF9SVU4gPSAncnVuJztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7Ozs7QUFLTyxNQUFNQSxXQUFXLEdBQUcsUUFBcEI7O0FBS0EsTUFBTUMsV0FBVyxHQUFHLFFBQXBCOztBQUtBLE1BQU1DLGlCQUFpQixHQUFHLFFBQTFCOztBQUtBLE1BQU1DLGVBQWUsR0FBRyxLQUF4Qjs7QUFNQSxNQUFNQyxhQUFhLEdBQUdDLE1BQU0sQ0FBQ0MsTUFBUCxDQUNMO0VBQ3BCQyxNQUFNLEVBQUUsdUJBRFk7RUFFcEIsa0JBQWtCLCtCQUZFO0VBR3BCLGdCQUFnQjtBQUhJLENBREssQ0FBdEI7O0FBWUEsTUFBTUMsYUFBYSxHQUFHSCxNQUFNLENBQUNDLE1BQVAsQ0FDTDtFQUNwQkcsWUFBWSxFQUFFLDRCQURNO0VBRXBCQyxRQUFRLEVBQUUsd0JBRlU7RUFHcEJDLFVBQVUsRUFBRSwwQkFIUTtFQUlwQkMsT0FBTyxFQUFFLHVCQUpXO0VBS3BCQyxHQUFHLEVBQUUsbUJBTGU7RUFNcEJDLElBQUksRUFBRSxvQkFOYztFQU9wQkMsUUFBUSxFQUFFLHdCQVBVO0VBUXBCQyxLQUFLLEVBQUUscUJBUmE7RUFTcEJDLE9BQU8sRUFBRSx1QkFUVztFQVVwQkMsTUFBTSxFQUFFLHNCQVZZO0VBV3BCQyxLQUFLLEVBQUU7QUFYYSxDQURLLENBQXRCOzs7QUFtQkEsTUFBTUMsdUJBQXVCLEdBQUdDLGFBQUEsQ0FBS0MsSUFBTCxDQUFVLGNBQVYsRUFBMEIsUUFBMUIsRUFBb0MsUUFBcEMsQ0FBaEM7Ozs7QUFLQSxNQUFNQywwQkFBMEIsR0FBR0YsYUFBQSxDQUFLQyxJQUFMLENBQVVGLHVCQUFWLEVBQW1DLGNBQW5DLENBQW5DOzs7QUFFQSxNQUFNSSxtQkFBbUIsR0FBRyxNQUE1Qjs7QUFDQSxNQUFNQyxzQkFBc0IsR0FBRyxTQUEvQjs7QUFDQSxNQUFNQyx3QkFBd0IsR0FBRyxXQUFqQzs7QUFDQSxNQUFNQyxxQkFBcUIsR0FBRyxRQUE5Qjs7QUFDQSxNQUFNQyxrQkFBa0IsR0FBRyxLQUEzQiJ9
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.CURRENT_SCHEMA_REV = exports.EXT_SUBCOMMAND_RUN = exports.EXT_SUBCOMMAND_UPDATE = exports.EXT_SUBCOMMAND_UNINSTALL = exports.EXT_SUBCOMMAND_INSTALL = exports.EXT_SUBCOMMAND_LIST = exports.PKG_HASHFILE_RELATIVE_PATH = exports.CACHE_DIR_RELATIVE_PATH = exports.KNOWN_DRIVERS = exports.KNOWN_PLUGINS = exports.USE_ALL_PLUGINS = exports.SERVER_SUBCOMMAND = exports.PLUGIN_TYPE = exports.DRIVER_TYPE = void 0;
7
+ const path_1 = __importDefault(require("path"));
8
+ /**
9
+ * The name of the extension type for drivers
10
+ */
11
+ exports.DRIVER_TYPE = 'driver';
12
+ /**
13
+ * The name of the extension type for plugins
14
+ */
15
+ exports.PLUGIN_TYPE = 'plugin';
16
+ /**
17
+ * The `server` command of the `appium` CLI
18
+ */
19
+ exports.SERVER_SUBCOMMAND = 'server';
20
+ /**
21
+ * The value of `--use-plugins` if _all_ plugins should be loaded
22
+ */
23
+ exports.USE_ALL_PLUGINS = 'all';
24
+ // This is a map of plugin names to npm packages representing those plugins.
25
+ // The plugins in this list will be available to the CLI so users can just
26
+ // type 'appium plugin install 'name'', rather than having to specify the full
27
+ // npm package. I.e., these are the officially recognized plugins.
28
+ exports.KNOWN_PLUGINS = Object.freeze(
29
+ /** @type {const} */ ({
30
+ images: '@appium/images-plugin',
31
+ 'execute-driver': '@appium/execute-driver-plugin',
32
+ 'relaxed-caps': '@appium/relaxed-caps-plugin',
33
+ 'universal-xml': '@appium/universal-xml-plugin',
34
+ }));
35
+ // This is a map of driver names to npm packages representing those drivers.
36
+ // The drivers in this list will be available to the CLI so users can just
37
+ // type 'appium driver install 'name'', rather than having to specify the full
38
+ // npm package. I.e., these are the officially recognized drivers.
39
+ exports.KNOWN_DRIVERS = Object.freeze(
40
+ /** @type {const} */ ({
41
+ uiautomator2: 'appium-uiautomator2-driver',
42
+ xcuitest: 'appium-xcuitest-driver',
43
+ mac2: 'appium-mac2-driver',
44
+ espresso: 'appium-espresso-driver',
45
+ safari: 'appium-safari-driver',
46
+ gecko: 'appium-geckodriver',
47
+ }));
48
+ /**
49
+ * Relative path to directory containing any Appium internal files
50
+ */
51
+ exports.CACHE_DIR_RELATIVE_PATH = path_1.default.join('node_modules', '.cache', 'appium');
52
+ /**
53
+ * Relative path to hashfile (from `APPIUM_HOME`) of consuming project's `package.json` (if it exists)
54
+ */
55
+ exports.PKG_HASHFILE_RELATIVE_PATH = path_1.default.join(exports.CACHE_DIR_RELATIVE_PATH, 'package.hash');
56
+ exports.EXT_SUBCOMMAND_LIST = 'list';
57
+ exports.EXT_SUBCOMMAND_INSTALL = 'install';
58
+ exports.EXT_SUBCOMMAND_UNINSTALL = 'uninstall';
59
+ exports.EXT_SUBCOMMAND_UPDATE = 'update';
60
+ exports.EXT_SUBCOMMAND_RUN = 'run';
61
+ /**
62
+ * Current revision of the manifest (`extensions.yaml`) schema
63
+ */
64
+ exports.CURRENT_SCHEMA_REV = 3;
65
+ //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","names":["DRIVER_TYPE","PLUGIN_TYPE","SERVER_SUBCOMMAND","USE_ALL_PLUGINS","KNOWN_PLUGINS","Object","freeze","images","KNOWN_DRIVERS","uiautomator2","xcuitest","youiengine","windows","mac","mac2","espresso","tizen","flutter","safari","gecko","CACHE_DIR_RELATIVE_PATH","path","join","PKG_HASHFILE_RELATIVE_PATH","EXT_SUBCOMMAND_LIST","EXT_SUBCOMMAND_INSTALL","EXT_SUBCOMMAND_UNINSTALL","EXT_SUBCOMMAND_UPDATE","EXT_SUBCOMMAND_RUN"],"sources":["../../lib/constants.js"],"sourcesContent":["import path from 'path';\n\n/**\n * The name of the extension type for drivers\n */\nexport const DRIVER_TYPE = 'driver';\n\n/**\n * The name of the extension type for plugins\n */\nexport const PLUGIN_TYPE = 'plugin';\n\n/**\n * The `server` command of the `appium` CLI\n */\nexport const SERVER_SUBCOMMAND = 'server';\n\n/**\n * The value of `--use-plugins` if _all_ plugins should be loaded\n */\nexport const USE_ALL_PLUGINS = 'all';\n\n// This is a map of plugin names to npm packages representing those plugins.\n// The plugins in this list will be available to the CLI so users can just\n// type 'appium plugin install 'name'', rather than having to specify the full\n// npm package. I.e., these are the officially recognized plugins.\nexport const KNOWN_PLUGINS = Object.freeze(\n /** @type {const} */ ({\n images: '@appium/images-plugin',\n 'execute-driver': '@appium/execute-driver-plugin',\n 'relaxed-caps': '@appium/relaxed-caps-plugin',\n })\n);\n\n// This is a map of driver names to npm packages representing those drivers.\n// The drivers in this list will be available to the CLI so users can just\n// type 'appium driver install 'name'', rather than having to specify the full\n// npm package. I.e., these are the officially recognized drivers.\nexport const KNOWN_DRIVERS = Object.freeze(\n /** @type {const} */ ({\n uiautomator2: 'appium-uiautomator2-driver',\n xcuitest: 'appium-xcuitest-driver',\n youiengine: 'appium-youiengine-driver',\n windows: 'appium-windows-driver',\n mac: 'appium-mac-driver',\n mac2: 'appium-mac2-driver',\n espresso: 'appium-espresso-driver',\n tizen: 'appium-tizen-driver',\n flutter: 'appium-flutter-driver',\n safari: 'appium-safari-driver',\n gecko: 'appium-geckodriver',\n })\n);\n\n/**\n * Relative path to directory containing any Appium internal files\n */\nexport const CACHE_DIR_RELATIVE_PATH = path.join('node_modules', '.cache', 'appium');\n\n/**\n * Relative path to hashfile (from `APPIUM_HOME`) of consuming project's `package.json` (if it exists)\n */\nexport const PKG_HASHFILE_RELATIVE_PATH = path.join(CACHE_DIR_RELATIVE_PATH, 'package.hash');\n\nexport const EXT_SUBCOMMAND_LIST = 'list';\nexport const EXT_SUBCOMMAND_INSTALL = 'install';\nexport const EXT_SUBCOMMAND_UNINSTALL = 'uninstall';\nexport const EXT_SUBCOMMAND_UPDATE = 'update';\nexport const EXT_SUBCOMMAND_RUN = 'run';\n"],"mappings":";;;;;;;;;AAAA;;;;AAKO,MAAMA,WAAW,GAAG,QAApB;;AAKA,MAAMC,WAAW,GAAG,QAApB;;AAKA,MAAMC,iBAAiB,GAAG,QAA1B;;AAKA,MAAMC,eAAe,GAAG,KAAxB;;AAMA,MAAMC,aAAa,GAAGC,MAAM,CAACC,MAAP,CACL;EACpBC,MAAM,EAAE,uBADY;EAEpB,kBAAkB,+BAFE;EAGpB,gBAAgB;AAHI,CADK,CAAtB;;AAYA,MAAMC,aAAa,GAAGH,MAAM,CAACC,MAAP,CACL;EACpBG,YAAY,EAAE,4BADM;EAEpBC,QAAQ,EAAE,wBAFU;EAGpBC,UAAU,EAAE,0BAHQ;EAIpBC,OAAO,EAAE,uBAJW;EAKpBC,GAAG,EAAE,mBALe;EAMpBC,IAAI,EAAE,oBANc;EAOpBC,QAAQ,EAAE,wBAPU;EAQpBC,KAAK,EAAE,qBARa;EASpBC,OAAO,EAAE,uBATW;EAUpBC,MAAM,EAAE,sBAVY;EAWpBC,KAAK,EAAE;AAXa,CADK,CAAtB;;;AAmBA,MAAMC,uBAAuB,GAAGC,aAAA,CAAKC,IAAL,CAAU,cAAV,EAA0B,QAA1B,EAAoC,QAApC,CAAhC;;;;AAKA,MAAMC,0BAA0B,GAAGF,aAAA,CAAKC,IAAL,CAAUF,uBAAV,EAAmC,cAAnC,CAAnC;;;AAEA,MAAMI,mBAAmB,GAAG,MAA5B;;AACA,MAAMC,sBAAsB,GAAG,SAA/B;;AACA,MAAMC,wBAAwB,GAAG,WAAjC;;AACA,MAAMC,qBAAqB,GAAG,QAA9B;;AACA,MAAMC,kBAAkB,GAAG,KAA3B"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../lib/constants.js"],"names":[],"mappings":";;;;;;AAAA,gDAAwB;AAExB;;GAEG;AACU,QAAA,WAAW,GAAG,QAAQ,CAAC;AAEpC;;GAEG;AACU,QAAA,WAAW,GAAG,QAAQ,CAAC;AAEpC;;GAEG;AACU,QAAA,iBAAiB,GAAG,QAAQ,CAAC;AAE1C;;GAEG;AACU,QAAA,eAAe,GAAG,KAAK,CAAC;AAErC,4EAA4E;AAC5E,0EAA0E;AAC1E,8EAA8E;AAC9E,kEAAkE;AACrD,QAAA,aAAa,GAAG,MAAM,CAAC,MAAM;AACxC,oBAAoB,CAAC,CAAC;IACpB,MAAM,EAAE,uBAAuB;IAC/B,gBAAgB,EAAE,+BAA+B;IACjD,cAAc,EAAE,6BAA6B;IAC7C,eAAe,EAAE,8BAA8B;CAChD,CAAC,CACH,CAAC;AAEF,4EAA4E;AAC5E,0EAA0E;AAC1E,8EAA8E;AAC9E,kEAAkE;AACrD,QAAA,aAAa,GAAG,MAAM,CAAC,MAAM;AACxC,oBAAoB,CAAC,CAAC;IACpB,YAAY,EAAE,4BAA4B;IAC1C,QAAQ,EAAE,wBAAwB;IAClC,IAAI,EAAE,oBAAoB;IAC1B,QAAQ,EAAE,wBAAwB;IAClC,MAAM,EAAE,sBAAsB;IAC9B,KAAK,EAAE,oBAAoB;CAC5B,CAAC,CACH,CAAC;AAEF;;GAEG;AACU,QAAA,uBAAuB,GAAG,cAAI,CAAC,IAAI,CAAC,cAAc,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAErF;;GAEG;AACU,QAAA,0BAA0B,GAAG,cAAI,CAAC,IAAI,CAAC,+BAAuB,EAAE,cAAc,CAAC,CAAC;AAEhF,QAAA,mBAAmB,GAAG,MAAM,CAAC;AAC7B,QAAA,sBAAsB,GAAG,SAAS,CAAC;AACnC,QAAA,wBAAwB,GAAG,WAAW,CAAC;AACvC,QAAA,qBAAqB,GAAG,QAAQ,CAAC;AACjC,QAAA,kBAAkB,GAAG,KAAK,CAAC;AAExC;;GAEG;AACU,QAAA,kBAAkB,GAAG,CAAC,CAAC"}
@@ -1,177 +1,212 @@
1
1
  "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.DriverConfig = void 0;
7
-
8
- require("source-map-support/register");
9
-
10
- var _lodash = _interopRequireDefault(require("lodash"));
11
-
12
- var _constants = require("../constants");
13
-
14
- var _logger = _interopRequireDefault(require("../logger"));
15
-
16
- var _extensionConfig = require("./extension-config");
17
-
18
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
19
-
20
- class DriverConfig extends _extensionConfig.ExtensionConfig {
21
- knownAutomationNames;
22
- static _instances = new WeakMap();
23
-
24
- constructor(manifest) {
25
- super(_constants.DRIVER_TYPE, manifest);
26
- this.knownAutomationNames = new Set();
27
- }
28
-
29
- static create(manifest) {
30
- const instance = new DriverConfig(manifest);
31
-
32
- if (DriverConfig.getInstance(manifest)) {
33
- throw new Error(`Manifest with APPIUM_HOME ${manifest.appiumHome} already has a DriverConfig; use DriverConfig.getInstance() to retrieve it.`);
7
+ const lodash_1 = __importDefault(require("lodash"));
8
+ const constants_1 = require("../constants");
9
+ const logger_1 = __importDefault(require("../logger"));
10
+ const extension_config_1 = require("./extension-config");
11
+ /**
12
+ * @extends {ExtensionConfig<DriverType>}
13
+ */
14
+ class DriverConfig extends extension_config_1.ExtensionConfig {
15
+ /**
16
+ * Call {@link DriverConfig.create} instead.
17
+ * @private
18
+ * @param {import('./manifest').Manifest} manifest - Manifest instance
19
+ */
20
+ constructor(manifest) {
21
+ super(constants_1.DRIVER_TYPE, manifest);
22
+ this.knownAutomationNames = new Set();
34
23
  }
35
-
36
- DriverConfig._instances.set(manifest, instance);
37
-
38
- return instance;
39
- }
40
-
41
- static getInstance(manifest) {
42
- return DriverConfig._instances.get(manifest);
43
- }
44
-
45
- async validate() {
46
- this.knownAutomationNames.clear();
47
- return await super._validate(this.manifest.getExtensionData(_constants.DRIVER_TYPE));
48
- }
49
-
50
- getConfigProblems(extData) {
51
- const problems = [];
52
- const {
53
- platformNames,
54
- automationName
55
- } = extData;
56
-
57
- if (!_lodash.default.isArray(platformNames)) {
58
- problems.push({
59
- err: 'Missing or incorrect supported platformNames list.',
60
- val: platformNames
61
- });
62
- } else {
63
- if (_lodash.default.isEmpty(platformNames)) {
64
- problems.push({
65
- err: 'Empty platformNames list.',
66
- val: platformNames
67
- });
68
- } else {
69
- for (const pName of platformNames) {
70
- if (!_lodash.default.isString(pName)) {
71
- problems.push({
72
- err: 'Incorrectly formatted platformName.',
73
- val: pName
74
- });
75
- }
24
+ /**
25
+ * Creates a new {@link DriverConfig} instance for a {@link Manifest} instance.
26
+ *
27
+ * @param {Manifest} manifest
28
+ * @throws If `manifest` already associated with a `DriverConfig`
29
+ * @returns {DriverConfig}
30
+ */
31
+ static create(manifest) {
32
+ const instance = new DriverConfig(manifest);
33
+ if (DriverConfig.getInstance(manifest)) {
34
+ throw new Error(`Manifest with APPIUM_HOME ${manifest.appiumHome} already has a DriverConfig; use DriverConfig.getInstance() to retrieve it.`);
76
35
  }
77
- }
36
+ DriverConfig._instances.set(manifest, instance);
37
+ return instance;
78
38
  }
79
-
80
- if (!_lodash.default.isString(automationName)) {
81
- problems.push({
82
- err: 'Missing or incorrect automationName',
83
- val: automationName
84
- });
39
+ /**
40
+ * Returns a DriverConfig associated with a Manifest
41
+ * @param {Manifest} manifest
42
+ * @returns {DriverConfig|undefined}
43
+ */
44
+ static getInstance(manifest) {
45
+ return DriverConfig._instances.get(manifest);
85
46
  }
86
-
87
- if (this.knownAutomationNames.has(automationName)) {
88
- problems.push({
89
- err: 'Multiple drivers claim support for the same automationName',
90
- val: automationName
91
- });
47
+ /**
48
+ * Checks extensions for problems
49
+ */
50
+ async validate() {
51
+ this.knownAutomationNames.clear();
52
+ return await super._validate(this.manifest.getExtensionData(constants_1.DRIVER_TYPE));
92
53
  }
93
-
94
- this.knownAutomationNames.add(automationName);
95
- return problems;
96
- }
97
-
98
- extensionDesc(driverName, {
99
- version,
100
- automationName
101
- }) {
102
- return `${driverName}@${version} (automationName '${automationName}')`;
103
- }
104
-
105
- findMatchingDriver({
106
- automationName,
107
- platformName
108
- }) {
109
- if (!_lodash.default.isString(platformName)) {
110
- throw new Error('You must include a platformName capability');
54
+ /**
55
+ * @param {ExtManifest<DriverType>} extData
56
+ * @returns {import('./extension-config').ExtManifestProblem[]}
57
+ */
58
+ getConfigProblems(extData) {
59
+ const problems = [];
60
+ const { platformNames, automationName } = extData;
61
+ if (!lodash_1.default.isArray(platformNames)) {
62
+ problems.push({
63
+ err: 'Missing or incorrect supported platformNames list.',
64
+ val: platformNames,
65
+ });
66
+ }
67
+ else {
68
+ if (lodash_1.default.isEmpty(platformNames)) {
69
+ problems.push({
70
+ err: 'Empty platformNames list.',
71
+ val: platformNames,
72
+ });
73
+ }
74
+ else {
75
+ for (const pName of platformNames) {
76
+ if (!lodash_1.default.isString(pName)) {
77
+ problems.push({
78
+ err: 'Incorrectly formatted platformName.',
79
+ val: pName,
80
+ });
81
+ }
82
+ }
83
+ }
84
+ }
85
+ if (!lodash_1.default.isString(automationName)) {
86
+ problems.push({
87
+ err: 'Missing or incorrect automationName',
88
+ val: automationName,
89
+ });
90
+ }
91
+ if (this.knownAutomationNames.has(automationName)) {
92
+ problems.push({
93
+ err: 'Multiple drivers claim support for the same automationName',
94
+ val: automationName,
95
+ });
96
+ }
97
+ // should we retain the name at the end of this function, once we've checked there are no problems?
98
+ this.knownAutomationNames.add(automationName);
99
+ return problems;
111
100
  }
112
-
113
- if (!_lodash.default.isString(automationName)) {
114
- throw new Error('You must include an automationName capability');
101
+ /**
102
+ * @param {ExtName<DriverType>} driverName
103
+ * @param {ExtManifest<DriverType>} extData
104
+ * @returns {string}
105
+ */
106
+ extensionDesc(driverName, { version, automationName }) {
107
+ return `${driverName}@${version} (automationName '${automationName}')`;
115
108
  }
116
-
117
- _logger.default.info(`Attempting to find matching driver for automationName ` + `'${automationName}' and platformName '${platformName}'`);
118
-
119
- try {
120
- const {
121
- driverName,
122
- mainClass,
123
- version
124
- } = this._getDriverBySupport(automationName, platformName);
125
-
126
- _logger.default.info(`The '${driverName}' driver was installed and matched caps.`);
127
-
128
- _logger.default.info(`Will require it at ${this.getInstallPath(driverName)}`);
129
-
130
- const driver = this.require(driverName);
131
-
132
- if (!driver) {
133
- throw new Error(`Driver '${driverName}' did not export a class with name '${mainClass}'. Contact the author of the driver!`);
134
- }
135
-
136
- return {
137
- driver,
138
- version,
139
- driverName
140
- };
141
- } catch (err) {
142
- 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})`;
143
- throw new Error(msg);
109
+ /**
110
+ * Given capabilities, find a matching driver within the config. Load its class and return it along with version and driver name.
111
+ * @template {import('@appium/types').StringRecord} C
112
+ * @param {C} caps
113
+ * @returns {MatchedDriver}
114
+ */
115
+ findMatchingDriver({ automationName, platformName }) {
116
+ if (!lodash_1.default.isString(platformName)) {
117
+ throw new Error('You must include a platformName capability');
118
+ }
119
+ if (!lodash_1.default.isString(automationName)) {
120
+ throw new Error('You must include an automationName capability');
121
+ }
122
+ logger_1.default.info(`Attempting to find matching driver for automationName ` +
123
+ `'${automationName}' and platformName '${platformName}'`);
124
+ try {
125
+ const { driverName, mainClass, version } = this._getDriverBySupport(automationName, platformName);
126
+ logger_1.default.info(`The '${driverName}' driver was installed and matched caps.`);
127
+ logger_1.default.info(`Will require it at ${this.getInstallPath(driverName)}`);
128
+ const driver = this.require(driverName);
129
+ if (!driver) {
130
+ throw new Error(`Driver '${driverName}' did not export a class with name '${mainClass}'. Contact the author of the driver!`);
131
+ }
132
+ return { driver, version, driverName };
133
+ }
134
+ catch (err) {
135
+ const msg = `Could not find a driver for automationName ` +
136
+ `'${automationName}' and platformName ${platformName}'. ` +
137
+ `Have you installed a driver that supports those ` +
138
+ `capabilities? Run 'appium driver list --installed' to see. ` +
139
+ `(Lower-level error: ${err.message})`;
140
+ throw new Error(msg);
141
+ }
144
142
  }
145
- }
146
-
147
- _getDriverBySupport(matchAutomationName, matchPlatformName) {
148
- const drivers = this.installedExtensions;
149
-
150
- for (const [driverName, driverData] of _lodash.default.toPairs(drivers)) {
151
- const {
152
- automationName,
153
- platformNames
154
- } = driverData;
155
- const aNameMatches = automationName.toLowerCase() === matchAutomationName.toLowerCase();
156
-
157
- const pNameMatches = _lodash.default.includes(platformNames.map(_lodash.default.toLower), matchPlatformName.toLowerCase());
158
-
159
- if (aNameMatches && pNameMatches) {
160
- return {
161
- driverName,
162
- ...driverData
163
- };
164
- }
165
-
166
- if (aNameMatches) {
167
- throw new Error(`Driver '${driverName}' supports automationName ` + `'${automationName}', but Appium could not find ` + `support for platformName '${matchPlatformName}'. Supported ` + `platformNames are: ` + JSON.stringify(platformNames));
168
- }
143
+ /**
144
+ * Given an automation name and platform name, find a suitable driver and return its extension data.
145
+ * @param {string} matchAutomationName
146
+ * @param {string} matchPlatformName
147
+ * @returns {ExtMetadata<DriverType> & import('appium/types').InternalMetadata & import('appium/types').CommonExtMetadata}
148
+ */
149
+ _getDriverBySupport(matchAutomationName, matchPlatformName) {
150
+ const drivers = this.installedExtensions;
151
+ for (const [driverName, driverData] of lodash_1.default.toPairs(drivers)) {
152
+ const { automationName, platformNames } = driverData;
153
+ const aNameMatches = automationName.toLowerCase() === matchAutomationName.toLowerCase();
154
+ const pNameMatches = lodash_1.default.includes(platformNames.map(lodash_1.default.toLower), matchPlatformName.toLowerCase());
155
+ if (aNameMatches && pNameMatches) {
156
+ return { driverName, ...driverData };
157
+ }
158
+ if (aNameMatches) {
159
+ throw new Error(`Driver '${driverName}' supports automationName ` +
160
+ `'${automationName}', but Appium could not find ` +
161
+ `support for platformName '${matchPlatformName}'. Supported ` +
162
+ `platformNames are: ` +
163
+ JSON.stringify(platformNames));
164
+ }
165
+ }
166
+ throw new Error(`Could not find installed driver to support given caps`);
169
167
  }
170
-
171
- throw new Error(`Could not find installed driver to support given caps`);
172
- }
173
-
174
168
  }
175
-
176
169
  exports.DriverConfig = DriverConfig;
177
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEcml2ZXJDb25maWciLCJFeHRlbnNpb25Db25maWciLCJrbm93bkF1dG9tYXRpb25OYW1lcyIsIl9pbnN0YW5jZXMiLCJXZWFrTWFwIiwiY29uc3RydWN0b3IiLCJtYW5pZmVzdCIsIkRSSVZFUl9UWVBFIiwiU2V0IiwiY3JlYXRlIiwiaW5zdGFuY2UiLCJnZXRJbnN0YW5jZSIsIkVycm9yIiwiYXBwaXVtSG9tZSIsInNldCIsImdldCIsInZhbGlkYXRlIiwiY2xlYXIiLCJfdmFsaWRhdGUiLCJnZXRFeHRlbnNpb25EYXRhIiwiZ2V0Q29uZmlnUHJvYmxlbXMiLCJleHREYXRhIiwicHJvYmxlbXMiLCJwbGF0Zm9ybU5hbWVzIiwiYXV0b21hdGlvbk5hbWUiLCJfIiwiaXNBcnJheSIsInB1c2giLCJlcnIiLCJ2YWwiLCJpc0VtcHR5IiwicE5hbWUiLCJpc1N0cmluZyIsImhhcyIsImFkZCIsImV4dGVuc2lvbkRlc2MiLCJkcml2ZXJOYW1lIiwidmVyc2lvbiIsImZpbmRNYXRjaGluZ0RyaXZlciIsInBsYXRmb3JtTmFtZSIsImxvZyIsImluZm8iLCJtYWluQ2xhc3MiLCJfZ2V0RHJpdmVyQnlTdXBwb3J0IiwiZ2V0SW5zdGFsbFBhdGgiLCJkcml2ZXIiLCJyZXF1aXJlIiwibXNnIiwibWVzc2FnZSIsIm1hdGNoQXV0b21hdGlvbk5hbWUiLCJtYXRjaFBsYXRmb3JtTmFtZSIsImRyaXZlcnMiLCJpbnN0YWxsZWRFeHRlbnNpb25zIiwiZHJpdmVyRGF0YSIsInRvUGFpcnMiLCJhTmFtZU1hdGNoZXMiLCJ0b0xvd2VyQ2FzZSIsInBOYW1lTWF0Y2hlcyIsImluY2x1ZGVzIiwibWFwIiwidG9Mb3dlciIsIkpTT04iLCJzdHJpbmdpZnkiXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvZXh0ZW5zaW9uL2RyaXZlci1jb25maWcuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7RFJJVkVSX1RZUEV9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgbG9nIGZyb20gJy4uL2xvZ2dlcic7XG5pbXBvcnQge0V4dGVuc2lvbkNvbmZpZ30gZnJvbSAnLi9leHRlbnNpb24tY29uZmlnJztcblxuLyoqXG4gKiBAZXh0ZW5kcyB7RXh0ZW5zaW9uQ29uZmlnPERyaXZlclR5cGU+fVxuICovXG5leHBvcnQgY2xhc3MgRHJpdmVyQ29uZmlnIGV4dGVuZHMgRXh0ZW5zaW9uQ29uZmlnIHtcbiAgLyoqXG4gICAqIEEgc2V0IG9mIHVuaXF1ZSBhdXRvbWF0aW9uIG5hbWVzIHVzZWQgYnkgZHJpdmVycy5cbiAgICogQHR5cGUge1NldDxzdHJpbmc+fVxuICAgKi9cbiAga25vd25BdXRvbWF0aW9uTmFtZXM7XG5cbiAgLyoqXG4gICAqIEEgbWFwcGluZyBvZiB7QGxpbmsgTWFuaWZlc3R9IGluc3RhbmNlcyB0byB7QGxpbmsgRHJpdmVyQ29uZmlnfSBpbnN0YW5jZXMuXG4gICAqXG4gICAqIGBNYW5pZmVzdGAgYW5kIGBFeHRlbnNpb25Db25maWdgIGhhdmUgYSBvbmUtdG8tbWFueSByZWxhdGlvbnNoaXA7IGVhY2ggYE1hbmlmZXN0YCBzaG91bGQgYmUgYXNzb2NpYXRlZCB3aXRoIGEgYERyaXZlckNvbmZpZ2AgYW5kIGEgYFBsdWdpbkNvbmZpZ2A7IG5vIG1vcmUsIG5vIGxlc3MuXG4gICAqXG4gICAqIFRoaXMgdmFyaWFibGUgdHJhY2tzIHRoZSBgTWFuaWZlc3RgLXRvLWBEcml2ZXJDb25maWdgIHBvcnRpb24uXG4gICAqXG4gICAqIEB0eXBlIHtXZWFrTWFwPE1hbmlmZXN0LERyaXZlckNvbmZpZz59XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBzdGF0aWMgX2luc3RhbmNlcyA9IG5ldyBXZWFrTWFwKCk7XG5cbiAgLyoqXG4gICAqIENhbGwge0BsaW5rIERyaXZlckNvbmZpZy5jcmVhdGV9IGluc3RlYWQuXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7aW1wb3J0KCcuL21hbmlmZXN0JykuTWFuaWZlc3R9IG1hbmlmZXN0IC0gTWFuaWZlc3QgaW5zdGFuY2VcbiAgICovXG4gIGNvbnN0cnVjdG9yKG1hbmlmZXN0KSB7XG4gICAgc3VwZXIoRFJJVkVSX1RZUEUsIG1hbmlmZXN0KTtcblxuICAgIHRoaXMua25vd25BdXRvbWF0aW9uTmFtZXMgPSBuZXcgU2V0KCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyB7QGxpbmsgRHJpdmVyQ29uZmlnfSBpbnN0YW5jZSBmb3IgYSB7QGxpbmsgTWFuaWZlc3R9IGluc3RhbmNlLlxuICAgKlxuICAgKiBAcGFyYW0ge01hbmlmZXN0fSBtYW5pZmVzdFxuICAgKiBAdGhyb3dzIElmIGBtYW5pZmVzdGAgYWxyZWFkeSBhc3NvY2lhdGVkIHdpdGggYSBgRHJpdmVyQ29uZmlnYFxuICAgKiBAcmV0dXJucyB7RHJpdmVyQ29uZmlnfVxuICAgKi9cbiAgc3RhdGljIGNyZWF0ZShtYW5pZmVzdCkge1xuICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IERyaXZlckNvbmZpZyhtYW5pZmVzdCk7XG4gICAgaWYgKERyaXZlckNvbmZpZy5nZXRJbnN0YW5jZShtYW5pZmVzdCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYE1hbmlmZXN0IHdpdGggQVBQSVVNX0hPTUUgJHttYW5pZmVzdC5hcHBpdW1Ib21lfSBhbHJlYWR5IGhhcyBhIERyaXZlckNvbmZpZzsgdXNlIERyaXZlckNvbmZpZy5nZXRJbnN0YW5jZSgpIHRvIHJldHJpZXZlIGl0LmBcbiAgICAgICk7XG4gICAgfVxuICAgIERyaXZlckNvbmZpZy5faW5zdGFuY2VzLnNldChtYW5pZmVzdCwgaW5zdGFuY2UpO1xuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgRHJpdmVyQ29uZmlnIGFzc29jaWF0ZWQgd2l0aCBhIE1hbmlmZXN0XG4gICAqIEBwYXJhbSB7TWFuaWZlc3R9IG1hbmlmZXN0XG4gICAqIEByZXR1cm5zIHtEcml2ZXJDb25maWd8dW5kZWZpbmVkfVxuICAgKi9cbiAgc3RhdGljIGdldEluc3RhbmNlKG1hbmlmZXN0KSB7XG4gICAgcmV0dXJuIERyaXZlckNvbmZpZy5faW5zdGFuY2VzLmdldChtYW5pZmVzdCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGV4dGVuc2lvbnMgZm9yIHByb2JsZW1zXG4gICAqL1xuICBhc3luYyB2YWxpZGF0ZSgpIHtcbiAgICB0aGlzLmtub3duQXV0b21hdGlvbk5hbWVzLmNsZWFyKCk7XG4gICAgcmV0dXJuIGF3YWl0IHN1cGVyLl92YWxpZGF0ZSh0aGlzLm1hbmlmZXN0LmdldEV4dGVuc2lvbkRhdGEoRFJJVkVSX1RZUEUpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0V4dE1hbmlmZXN0PERyaXZlclR5cGU+fSBleHREYXRhXG4gICAqIEByZXR1cm5zIHtpbXBvcnQoJy4vZXh0ZW5zaW9uLWNvbmZpZycpLkV4dE1hbmlmZXN0UHJvYmxlbVtdfVxuICAgKi9cbiAgZ2V0Q29uZmlnUHJvYmxlbXMoZXh0RGF0YSkge1xuICAgIGNvbnN0IHByb2JsZW1zID0gW107XG4gICAgY29uc3Qge3BsYXRmb3JtTmFtZXMsIGF1dG9tYXRpb25OYW1lfSA9IGV4dERhdGE7XG5cbiAgICBpZiAoIV8uaXNBcnJheShwbGF0Zm9ybU5hbWVzKSkge1xuICAgICAgcHJvYmxlbXMucHVzaCh7XG4gICAgICAgIGVycjogJ01pc3Npbmcgb3IgaW5jb3JyZWN0IHN1cHBvcnRlZCBwbGF0Zm9ybU5hbWVzIGxpc3QuJyxcbiAgICAgICAgdmFsOiBwbGF0Zm9ybU5hbWVzLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChfLmlzRW1wdHkocGxhdGZvcm1OYW1lcykpIHtcbiAgICAgICAgcHJvYmxlbXMucHVzaCh7XG4gICAgICAgICAgZXJyOiAnRW1wdHkgcGxhdGZvcm1OYW1lcyBsaXN0LicsXG4gICAgICAgICAgdmFsOiBwbGF0Zm9ybU5hbWVzLFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAoY29uc3QgcE5hbWUgb2YgcGxhdGZvcm1OYW1lcykge1xuICAgICAgICAgIGlmICghXy5pc1N0cmluZyhwTmFtZSkpIHtcbiAgICAgICAgICAgIHByb2JsZW1zLnB1c2goe1xuICAgICAgICAgICAgICBlcnI6ICdJbmNvcnJlY3RseSBmb3JtYXR0ZWQgcGxhdGZvcm1OYW1lLicsXG4gICAgICAgICAgICAgIHZhbDogcE5hbWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIV8uaXNTdHJpbmcoYXV0b21hdGlvbk5hbWUpKSB7XG4gICAgICBwcm9ibGVtcy5wdXNoKHtcbiAgICAgICAgZXJyOiAnTWlzc2luZyBvciBpbmNvcnJlY3QgYXV0b21hdGlvbk5hbWUnLFxuICAgICAgICB2YWw6IGF1dG9tYXRpb25OYW1lLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMua25vd25BdXRvbWF0aW9uTmFtZXMuaGFzKGF1dG9tYXRpb25OYW1lKSkge1xuICAgICAgcHJvYmxlbXMucHVzaCh7XG4gICAgICAgIGVycjogJ011bHRpcGxlIGRyaXZlcnMgY2xhaW0gc3VwcG9ydCBmb3IgdGhlIHNhbWUgYXV0b21hdGlvbk5hbWUnLFxuICAgICAgICB2YWw6IGF1dG9tYXRpb25OYW1lLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gc2hvdWxkIHdlIHJldGFpbiB0aGUgbmFtZSBhdCB0aGUgZW5kIG9mIHRoaXMgZnVuY3Rpb24sIG9uY2Ugd2UndmUgY2hlY2tlZCB0aGVyZSBhcmUgbm8gcHJvYmxlbXM/XG4gICAgdGhpcy5rbm93bkF1dG9tYXRpb25OYW1lcy5hZGQoYXV0b21hdGlvbk5hbWUpO1xuXG4gICAgcmV0dXJuIHByb2JsZW1zO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7RXh0TmFtZTxEcml2ZXJUeXBlPn0gZHJpdmVyTmFtZVxuICAgKiBAcGFyYW0ge0V4dE1hbmlmZXN0PERyaXZlclR5cGU+fSBleHREYXRhXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICBleHRlbnNpb25EZXNjKGRyaXZlck5hbWUsIHt2ZXJzaW9uLCBhdXRvbWF0aW9uTmFtZX0pIHtcbiAgICByZXR1cm4gYCR7ZHJpdmVyTmFtZX1AJHt2ZXJzaW9ufSAoYXV0b21hdGlvbk5hbWUgJyR7YXV0b21hdGlvbk5hbWV9JylgO1xuICB9XG5cbiAgLyoqXG4gICAqIEdpdmVuIGNhcGFiaWxpdGllcywgZmluZCBhIG1hdGNoaW5nIGRyaXZlciB3aXRoaW4gdGhlIGNvbmZpZy4gTG9hZCBpdHMgY2xhc3MgYW5kIHJldHVybiBpdCBhbG9uZyB3aXRoIHZlcnNpb24gYW5kIGRyaXZlciBuYW1lLlxuICAgKiBAdGVtcGxhdGUge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLlN0cmluZ1JlY29yZH0gQ1xuICAgKiBAcGFyYW0ge0N9IGNhcHNcbiAgICogQHJldHVybnMge01hdGNoZWREcml2ZXJ9XG4gICAqL1xuICBmaW5kTWF0Y2hpbmdEcml2ZXIoe2F1dG9tYXRpb25OYW1lLCBwbGF0Zm9ybU5hbWV9KSB7XG4gICAgaWYgKCFfLmlzU3RyaW5nKHBsYXRmb3JtTmFtZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignWW91IG11c3QgaW5jbHVkZSBhIHBsYXRmb3JtTmFtZSBjYXBhYmlsaXR5Jyk7XG4gICAgfVxuXG4gICAgaWYgKCFfLmlzU3RyaW5nKGF1dG9tYXRpb25OYW1lKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdZb3UgbXVzdCBpbmNsdWRlIGFuIGF1dG9tYXRpb25OYW1lIGNhcGFiaWxpdHknKTtcbiAgICB9XG5cbiAgICBsb2cuaW5mbyhcbiAgICAgIGBBdHRlbXB0aW5nIHRvIGZpbmQgbWF0Y2hpbmcgZHJpdmVyIGZvciBhdXRvbWF0aW9uTmFtZSBgICtcbiAgICAgICAgYCcke2F1dG9tYXRpb25OYW1lfScgYW5kIHBsYXRmb3JtTmFtZSAnJHtwbGF0Zm9ybU5hbWV9J2BcbiAgICApO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHtkcml2ZXJOYW1lLCBtYWluQ2xhc3MsIHZlcnNpb259ID0gdGhpcy5fZ2V0RHJpdmVyQnlTdXBwb3J0KFxuICAgICAgICBhdXRvbWF0aW9uTmFtZSxcbiAgICAgICAgcGxhdGZvcm1OYW1lXG4gICAgICApO1xuICAgICAgbG9nLmluZm8oYFRoZSAnJHtkcml2ZXJOYW1lfScgZHJpdmVyIHdhcyBpbnN0YWxsZWQgYW5kIG1hdGNoZWQgY2Fwcy5gKTtcbiAgICAgIGxvZy5pbmZvKGBXaWxsIHJlcXVpcmUgaXQgYXQgJHt0aGlzLmdldEluc3RhbGxQYXRoKGRyaXZlck5hbWUpfWApO1xuICAgICAgY29uc3QgZHJpdmVyID0gdGhpcy5yZXF1aXJlKGRyaXZlck5hbWUpO1xuICAgICAgaWYgKCFkcml2ZXIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBEcml2ZXIgJyR7ZHJpdmVyTmFtZX0nIGRpZCBub3QgZXhwb3J0IGEgY2xhc3Mgd2l0aCBuYW1lICcke21haW5DbGFzc30nLiBDb250YWN0IHRoZSBhdXRob3Igb2YgdGhlIGRyaXZlciFgXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4ge2RyaXZlciwgdmVyc2lvbiwgZHJpdmVyTmFtZX07XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zdCBtc2cgPVxuICAgICAgICBgQ291bGQgbm90IGZpbmQgYSBkcml2ZXIgZm9yIGF1dG9tYXRpb25OYW1lIGAgK1xuICAgICAgICBgJyR7YXV0b21hdGlvbk5hbWV9JyBhbmQgcGxhdGZvcm1OYW1lICR7cGxhdGZvcm1OYW1lfScuIGAgK1xuICAgICAgICBgSGF2ZSB5b3UgaW5zdGFsbGVkIGEgZHJpdmVyIHRoYXQgc3VwcG9ydHMgdGhvc2UgYCArXG4gICAgICAgIGBjYXBhYmlsaXRpZXM/IFJ1biAnYXBwaXVtIGRyaXZlciBsaXN0IC0taW5zdGFsbGVkJyB0byBzZWUuIGAgK1xuICAgICAgICBgKExvd2VyLWxldmVsIGVycm9yOiAke2Vyci5tZXNzYWdlfSlgO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdpdmVuIGFuIGF1dG9tYXRpb24gbmFtZSBhbmQgcGxhdGZvcm0gbmFtZSwgZmluZCBhIHN1aXRhYmxlIGRyaXZlciBhbmQgcmV0dXJuIGl0cyBleHRlbnNpb24gZGF0YS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG1hdGNoQXV0b21hdGlvbk5hbWVcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1hdGNoUGxhdGZvcm1OYW1lXG4gICAqIEByZXR1cm5zIHtFeHRNZXRhZGF0YTxEcml2ZXJUeXBlPiAmIGltcG9ydCgnYXBwaXVtL3R5cGVzJykuSW50ZXJuYWxNZXRhZGF0YSAmIGltcG9ydCgnYXBwaXVtL3R5cGVzJykuQ29tbW9uRXh0TWV0YWRhdGF9XG4gICAqL1xuICBfZ2V0RHJpdmVyQnlTdXBwb3J0KG1hdGNoQXV0b21hdGlvbk5hbWUsIG1hdGNoUGxhdGZvcm1OYW1lKSB7XG4gICAgY29uc3QgZHJpdmVycyA9IHRoaXMuaW5zdGFsbGVkRXh0ZW5zaW9ucztcbiAgICBmb3IgKGNvbnN0IFtkcml2ZXJOYW1lLCBkcml2ZXJEYXRhXSBvZiBfLnRvUGFpcnMoZHJpdmVycykpIHtcbiAgICAgIGNvbnN0IHthdXRvbWF0aW9uTmFtZSwgcGxhdGZvcm1OYW1lc30gPSBkcml2ZXJEYXRhO1xuICAgICAgY29uc3QgYU5hbWVNYXRjaGVzID0gYXV0b21hdGlvbk5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbWF0Y2hBdXRvbWF0aW9uTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgY29uc3QgcE5hbWVNYXRjaGVzID0gXy5pbmNsdWRlcyhcbiAgICAgICAgcGxhdGZvcm1OYW1lcy5tYXAoXy50b0xvd2VyKSxcbiAgICAgICAgbWF0Y2hQbGF0Zm9ybU5hbWUudG9Mb3dlckNhc2UoKVxuICAgICAgKTtcblxuICAgICAgaWYgKGFOYW1lTWF0Y2hlcyAmJiBwTmFtZU1hdGNoZXMpIHtcbiAgICAgICAgcmV0dXJuIHtkcml2ZXJOYW1lLCAuLi5kcml2ZXJEYXRhfTtcbiAgICAgIH1cblxuICAgICAgaWYgKGFOYW1lTWF0Y2hlcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYERyaXZlciAnJHtkcml2ZXJOYW1lfScgc3VwcG9ydHMgYXV0b21hdGlvbk5hbWUgYCArXG4gICAgICAgICAgICBgJyR7YXV0b21hdGlvbk5hbWV9JywgYnV0IEFwcGl1bSBjb3VsZCBub3QgZmluZCBgICtcbiAgICAgICAgICAgIGBzdXBwb3J0IGZvciBwbGF0Zm9ybU5hbWUgJyR7bWF0Y2hQbGF0Zm9ybU5hbWV9Jy4gU3VwcG9ydGVkIGAgK1xuICAgICAgICAgICAgYHBsYXRmb3JtTmFtZXMgYXJlOiBgICtcbiAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHBsYXRmb3JtTmFtZXMpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZmluZCBpbnN0YWxsZWQgZHJpdmVyIHRvIHN1cHBvcnQgZ2l2ZW4gY2Fwc2ApO1xuICB9XG59XG5cbi8qKlxuICogQHRlbXBsYXRlIFRcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2FwcGl1bS90eXBlcycpLkV4dE1ldGFkYXRhPFQ+fSBFeHRNZXRhZGF0YVxuICovXG5cbi8qKlxuICogQHRlbXBsYXRlIFRcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2FwcGl1bS90eXBlcycpLkV4dE1hbmlmZXN0PFQ+fSBFeHRNYW5pZmVzdFxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnYXBwaXVtL3R5cGVzJykuTWFuaWZlc3REYXRhfSBNYW5pZmVzdERhdGFcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5Ecml2ZXJUeXBlfSBEcml2ZXJUeXBlXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuL21hbmlmZXN0JykuTWFuaWZlc3R9IE1hbmlmZXN0XG4gKi9cblxuLyoqXG4gKiBAdGVtcGxhdGUgVFxuICogQHR5cGVkZWYge2ltcG9ydCgnYXBwaXVtL3R5cGVzJykuRXh0UmVjb3JkPFQ+fSBFeHRSZWNvcmRcbiAqL1xuXG4vKipcbiAqIEB0ZW1wbGF0ZSBUXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdhcHBpdW0vdHlwZXMnKS5FeHROYW1lPFQ+fSBFeHROYW1lXG4gKi9cblxuLyoqXG4gKiBSZXR1cm4gdmFsdWUgb2Yge0BsaW5rY29kZSBEcml2ZXJDb25maWcuZmluZE1hdGNoaW5nRHJpdmVyfVxuICogQHR5cGVkZWYgTWF0Y2hlZERyaXZlclxuICogQHByb3BlcnR5IHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5Ecml2ZXJDbGFzc30gZHJpdmVyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdmVyc2lvblxuICogQHByb3BlcnR5IHtzdHJpbmd9IGRyaXZlck5hbWVcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5DYXBhYmlsaXRpZXN9IENhcGFiaWxpdGllc1xuICovXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOzs7O0FBS08sTUFBTUEsWUFBTixTQUEyQkMsZ0NBQTNCLENBQTJDO0VBS2hEQyxvQkFBb0I7RUFZSCxPQUFWQyxVQUFVLEdBQUcsSUFBSUMsT0FBSixFQUFIOztFQU9qQkMsV0FBVyxDQUFDQyxRQUFELEVBQVc7SUFDcEIsTUFBTUMsc0JBQU4sRUFBbUJELFFBQW5CO0lBRUEsS0FBS0osb0JBQUwsR0FBNEIsSUFBSU0sR0FBSixFQUE1QjtFQUNEOztFQVNZLE9BQU5DLE1BQU0sQ0FBQ0gsUUFBRCxFQUFXO0lBQ3RCLE1BQU1JLFFBQVEsR0FBRyxJQUFJVixZQUFKLENBQWlCTSxRQUFqQixDQUFqQjs7SUFDQSxJQUFJTixZQUFZLENBQUNXLFdBQWIsQ0FBeUJMLFFBQXpCLENBQUosRUFBd0M7TUFDdEMsTUFBTSxJQUFJTSxLQUFKLENBQ0gsNkJBQTRCTixRQUFRLENBQUNPLFVBQVcsNkVBRDdD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
170
+ /**
171
+ * A mapping of {@link Manifest} instances to {@link DriverConfig} instances.
172
+ *
173
+ * `Manifest` and `ExtensionConfig` have a one-to-many relationship; each `Manifest` should be associated with a `DriverConfig` and a `PluginConfig`; no more, no less.
174
+ *
175
+ * This variable tracks the `Manifest`-to-`DriverConfig` portion.
176
+ *
177
+ * @type {WeakMap<Manifest,DriverConfig>}
178
+ * @private
179
+ */
180
+ DriverConfig._instances = new WeakMap();
181
+ /**
182
+ * @template T
183
+ * @typedef {import('appium/types').ExtMetadata<T>} ExtMetadata
184
+ */
185
+ /**
186
+ * @template T
187
+ * @typedef {import('appium/types').ExtManifest<T>} ExtManifest
188
+ */
189
+ /**
190
+ * @typedef {import('appium/types').ManifestData} ManifestData
191
+ * @typedef {import('@appium/types').DriverType} DriverType
192
+ * @typedef {import('./manifest').Manifest} Manifest
193
+ */
194
+ /**
195
+ * @template T
196
+ * @typedef {import('appium/types').ExtRecord<T>} ExtRecord
197
+ */
198
+ /**
199
+ * @template T
200
+ * @typedef {import('appium/types').ExtName<T>} ExtName
201
+ */
202
+ /**
203
+ * Return value of {@linkcode DriverConfig.findMatchingDriver}
204
+ * @typedef MatchedDriver
205
+ * @property {import('@appium/types').DriverClass} driver
206
+ * @property {string} version
207
+ * @property {string} driverName
208
+ */
209
+ /**
210
+ * @typedef {import('@appium/types').Capabilities} Capabilities
211
+ */
212
+ //# sourceMappingURL=driver-config.js.map