appium 2.0.0-beta.25 → 2.0.0-beta.26

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 (124) hide show
  1. package/build/lib/appium-config.schema.json +278 -0
  2. package/build/lib/appium.js +45 -66
  3. package/build/lib/cli/args.js +19 -39
  4. package/build/lib/cli/driver-command.js +5 -9
  5. package/build/lib/cli/extension-command.js +73 -64
  6. package/build/lib/cli/extension.js +10 -23
  7. package/build/lib/cli/parser.js +9 -19
  8. package/build/lib/cli/plugin-command.js +5 -9
  9. package/build/lib/cli/utils.js +2 -4
  10. package/build/lib/config-file.js +2 -4
  11. package/build/lib/config.js +7 -6
  12. package/build/lib/constants.js +60 -0
  13. package/build/lib/extension/driver-config.js +190 -0
  14. package/build/lib/extension/extension-config.js +297 -0
  15. package/build/lib/extension/index.js +77 -0
  16. package/build/lib/extension/manifest.js +246 -0
  17. package/build/lib/extension/package-changed.js +68 -0
  18. package/build/lib/extension/plugin-config.js +87 -0
  19. package/build/lib/grid-register.js +2 -4
  20. package/build/lib/logger.js +2 -4
  21. package/build/lib/logsink.js +2 -4
  22. package/build/lib/main.js +40 -68
  23. package/build/lib/schema/appium-config-schema.js +2 -4
  24. package/build/lib/schema/arg-spec.js +11 -14
  25. package/build/lib/schema/cli-args.js +2 -4
  26. package/build/lib/schema/cli-transformers.js +2 -4
  27. package/build/lib/schema/index.js +2 -4
  28. package/build/lib/schema/keywords.js +2 -4
  29. package/build/lib/schema/schema.js +55 -37
  30. package/build/lib/utils.js +1 -32
  31. package/lib/appium.js +50 -68
  32. package/lib/cli/args.js +19 -23
  33. package/lib/cli/driver-command.js +10 -2
  34. package/lib/cli/extension-command.js +216 -135
  35. package/lib/cli/extension.js +7 -15
  36. package/lib/cli/parser.js +6 -14
  37. package/lib/cli/plugin-command.js +1 -2
  38. package/lib/config-file.js +3 -3
  39. package/lib/config.js +5 -4
  40. package/lib/constants.js +79 -0
  41. package/lib/extension/driver-config.js +230 -0
  42. package/lib/extension/extension-config.js +459 -0
  43. package/lib/extension/index.js +103 -0
  44. package/lib/extension/manifest.js +590 -0
  45. package/lib/extension/package-changed.js +64 -0
  46. package/lib/extension/plugin-config.js +111 -0
  47. package/lib/grid-register.js +4 -4
  48. package/lib/main.js +51 -88
  49. package/lib/schema/arg-spec.js +2 -2
  50. package/lib/schema/cli-args.js +1 -0
  51. package/lib/schema/keywords.js +1 -1
  52. package/lib/schema/schema.js +60 -28
  53. package/lib/utils.js +2 -32
  54. package/package.json +29 -21
  55. package/{postinstall.js → scripts/postinstall.js} +1 -1
  56. package/types/types.d.ts +70 -31
  57. package/bin/ios-webkit-debug-proxy-launcher.js +0 -71
  58. package/build/check-npm-pack-files.js +0 -23
  59. package/build/commands-yml/parse.js +0 -319
  60. package/build/commands-yml/validator.js +0 -130
  61. package/build/index.js +0 -19
  62. package/build/lib/cli/npm.js +0 -220
  63. package/build/lib/driver-config.js +0 -100
  64. package/build/lib/drivers.js +0 -100
  65. package/build/lib/ext-config-io.js +0 -165
  66. package/build/lib/extension-config.js +0 -320
  67. package/build/lib/plugin-config.js +0 -69
  68. package/build/lib/plugins.js +0 -18
  69. package/build/postinstall.js +0 -90
  70. package/build/test/cli/cli-e2e-specs.js +0 -221
  71. package/build/test/cli/cli-helpers.js +0 -86
  72. package/build/test/cli/cli-specs.js +0 -71
  73. package/build/test/cli/fixtures/test-driver/package.json +0 -27
  74. package/build/test/cli/schema-args-specs.js +0 -48
  75. package/build/test/cli/schema-e2e-specs.js +0 -47
  76. package/build/test/config-e2e-specs.js +0 -112
  77. package/build/test/config-file-e2e-specs.js +0 -191
  78. package/build/test/config-file-specs.js +0 -281
  79. package/build/test/config-specs.js +0 -258
  80. package/build/test/driver-e2e-specs.js +0 -435
  81. package/build/test/driver-specs.js +0 -386
  82. package/build/test/ext-config-io-specs.js +0 -181
  83. package/build/test/extension-config-specs.js +0 -365
  84. package/build/test/fixtures/allow-feat.txt +0 -5
  85. package/build/test/fixtures/caps.json +0 -3
  86. package/build/test/fixtures/config/allow-insecure.txt +0 -3
  87. package/build/test/fixtures/config/appium.config.bad-nodeconfig.json +0 -5
  88. package/build/test/fixtures/config/appium.config.bad.json +0 -32
  89. package/build/test/fixtures/config/appium.config.ext-good.json +0 -9
  90. package/build/test/fixtures/config/appium.config.ext-unknown-props.json +0 -10
  91. package/build/test/fixtures/config/appium.config.good.js +0 -40
  92. package/build/test/fixtures/config/appium.config.good.json +0 -33
  93. package/build/test/fixtures/config/appium.config.good.yaml +0 -30
  94. package/build/test/fixtures/config/appium.config.invalid.json +0 -31
  95. package/build/test/fixtures/config/appium.config.security-array.json +0 -5
  96. package/build/test/fixtures/config/appium.config.security-delimited.json +0 -5
  97. package/build/test/fixtures/config/appium.config.security-path.json +0 -5
  98. package/build/test/fixtures/config/driver-fake.config.json +0 -8
  99. package/build/test/fixtures/config/nodeconfig.json +0 -3
  100. package/build/test/fixtures/config/plugin-fake.config.json +0 -0
  101. package/build/test/fixtures/default-args.js +0 -35
  102. package/build/test/fixtures/deny-feat.txt +0 -5
  103. package/build/test/fixtures/driver.schema.js +0 -20
  104. package/build/test/fixtures/extensions.yaml +0 -27
  105. package/build/test/fixtures/flattened-schema.js +0 -532
  106. package/build/test/fixtures/plugin.schema.js +0 -20
  107. package/build/test/fixtures/schema-with-extensions.js +0 -28
  108. package/build/test/grid-register-specs.js +0 -74
  109. package/build/test/helpers.js +0 -75
  110. package/build/test/logger-specs.js +0 -76
  111. package/build/test/npm-specs.js +0 -20
  112. package/build/test/parser-specs.js +0 -319
  113. package/build/test/plugin-e2e-specs.js +0 -316
  114. package/build/test/schema/arg-spec-specs.js +0 -70
  115. package/build/test/schema/cli-args-specs.js +0 -408
  116. package/build/test/schema/schema-specs.js +0 -407
  117. package/build/test/utils-specs.js +0 -288
  118. package/lib/cli/npm.js +0 -251
  119. package/lib/driver-config.js +0 -101
  120. package/lib/drivers.js +0 -84
  121. package/lib/ext-config-io.js +0 -287
  122. package/lib/extension-config.js +0 -366
  123. package/lib/plugin-config.js +0 -63
  124. package/lib/plugins.js +0 -13
@@ -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,221 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- require("source-map-support/register");
6
-
7
- var _path = _interopRequireDefault(require("path"));
8
-
9
- var _support = require("@appium/support");
10
-
11
- var _drivers = require("../../lib/drivers");
12
-
13
- var _helpers = require("../helpers");
14
-
15
- var _cliHelpers = require("./cli-helpers");
16
-
17
- describe('CLI', function () {
18
- let appiumHome;
19
- let run;
20
- before(async function () {
21
- appiumHome = await _support.tempDir.openDir();
22
- const runner = (0, _cliHelpers.runAppium)(appiumHome);
23
-
24
- run = async (extCommand, args = [], raw = false, ext = 'driver') => await runner([ext, extCommand, ...args], {
25
- raw
26
- });
27
- });
28
- after(async function () {
29
- await _support.fs.rimraf(appiumHome);
30
- });
31
-
32
- async function clear() {
33
- await _support.fs.rimraf(appiumHome);
34
- await (0, _support.mkdirp)(appiumHome);
35
- }
36
-
37
- describe('Driver CLI', function () {
38
- const localFakeDriverPath = _path.default.join(_helpers.PROJECT_ROOT, 'packages', 'fake-driver');
39
-
40
- describe('list', function () {
41
- it('should list available drivers', async function () {
42
- const stdout = await run('list');
43
-
44
- for (const d of Object.keys(_drivers.KNOWN_DRIVERS)) {
45
- stdout.should.match(new RegExp(`${d}.+[not installed]`));
46
- }
47
- });
48
- it('should list available drivers in json format', async function () {
49
- const driverData = JSON.parse(await run('list', ['--json']));
50
-
51
- for (const d of Object.keys(_drivers.KNOWN_DRIVERS)) {
52
- driverData[d].should.eql({
53
- installed: false,
54
- pkgName: _drivers.KNOWN_DRIVERS[d]
55
- });
56
- }
57
- });
58
- it('should allow filtering by installed drivers', async function () {
59
- const out = await run('list', ['--installed', '--json']);
60
- JSON.parse(out).should.eql({});
61
- });
62
- it('should show updates for installed drivers with --updates', async function () {
63
- const penultimateFakeDriverVersionAsOfRightNow = '3.0.4';
64
- await clear();
65
- await run('install', [`@appium/fake-driver@${penultimateFakeDriverVersionAsOfRightNow}`, '--source', 'npm', '--json']);
66
- const {
67
- fake
68
- } = JSON.parse(await run('list', ['--updates', '--json']));
69
- _support.util.compareVersions(fake.updateVersion, '>', penultimateFakeDriverVersionAsOfRightNow).should.be.true;
70
- const stdout = await run('list', ['--updates']);
71
- stdout.should.match(new RegExp(`fake.+[${fake.updateVersion} available]`));
72
- });
73
- });
74
- describe('install', function () {
75
- it('should install a driver from the list of known drivers', async function () {
76
- await clear();
77
- const ret = JSON.parse(await run('install', ['uiautomator2', '--json']));
78
- ret.uiautomator2.pkgName.should.eql('appium-uiautomator2-driver');
79
- ret.uiautomator2.installType.should.eql('npm');
80
- ret.uiautomator2.installSpec.should.eql('uiautomator2');
81
- const list = JSON.parse(await run('list', ['--installed', '--json']));
82
- delete list.uiautomator2.installed;
83
- list.should.eql(ret);
84
- });
85
- it('should install a driver from npm', async function () {
86
- await clear();
87
- const ret = JSON.parse(await run('install', ['@appium/fake-driver', '--source', 'npm', '--json']));
88
- ret.fake.pkgName.should.eql('@appium/fake-driver');
89
- ret.fake.installType.should.eql('npm');
90
- ret.fake.installSpec.should.eql('@appium/fake-driver');
91
- const list = JSON.parse(await run('list', ['--installed', '--json']));
92
- delete list.fake.installed;
93
- list.should.eql(ret);
94
- });
95
- it('should install a driver from npm with a specific version/tag', async function () {
96
- const currentFakeDriverVersionAsOfRightNow = '3.0.5';
97
- await clear();
98
- const installSpec = `@appium/fake-driver@${currentFakeDriverVersionAsOfRightNow}`;
99
- const ret = JSON.parse(await run('install', [installSpec, '--source', 'npm', '--json']));
100
- ret.fake.pkgName.should.eql('@appium/fake-driver');
101
- ret.fake.installType.should.eql('npm');
102
- ret.fake.installSpec.should.eql(installSpec);
103
- const list = JSON.parse(await run('list', ['--installed', '--json']));
104
- delete list.fake.installed;
105
- list.should.eql(ret);
106
- });
107
- it('should install a driver from github', async function () {
108
- await clear();
109
- const ret = JSON.parse(await run('install', ['appium/appium-fake-driver', '--source', 'github', '--package', 'appium-fake-driver', '--json']));
110
- ret.fake.pkgName.should.eql('appium-fake-driver');
111
- ret.fake.installType.should.eql('github');
112
- ret.fake.installSpec.should.eql('appium/appium-fake-driver');
113
- const list = JSON.parse(await run('list', ['--installed', '--json']));
114
- delete list.fake.installed;
115
- list.should.eql(ret);
116
- });
117
- it('should install a driver from a local git repo', async function () {
118
- await clear();
119
- const ret = JSON.parse(await run('install', [localFakeDriverPath, '--source', 'git', '--package', '@appium/fake-driver', '--json']));
120
- ret.fake.pkgName.should.eql('@appium/fake-driver');
121
- ret.fake.installType.should.eql('git');
122
- ret.fake.installSpec.should.eql(localFakeDriverPath);
123
- const list = JSON.parse(await run('list', ['--installed', '--json']));
124
- delete list.fake.installed;
125
- list.should.eql(ret);
126
- });
127
- it('should install a driver from a remote git repo', async function () {
128
- await clear();
129
- const ret = JSON.parse(await run('install', ['git+https://github.com/appium/appium-fake-driver.git', '--source', 'git', '--package', 'appium-fake-driver', '--json']));
130
- ret.fake.pkgName.should.eql('appium-fake-driver');
131
- ret.fake.installType.should.eql('git');
132
- ret.fake.installSpec.should.eql('git+https://github.com/appium/appium-fake-driver');
133
- const list = JSON.parse(await run('list', ['--installed', '--json']));
134
- delete list.fake.installed;
135
- list.should.eql(ret);
136
- });
137
- it('should install a driver from a local npm module', async function () {
138
- await clear();
139
- const ret = JSON.parse(await run('install', [localFakeDriverPath, '--source', 'local', '--json']));
140
- ret.fake.pkgName.should.eql('@appium/fake-driver');
141
- ret.fake.installType.should.eql('local');
142
- ret.fake.installSpec.should.eql(localFakeDriverPath);
143
- const list = JSON.parse(await run('list', ['--installed', '--json']));
144
- delete list.fake.installed;
145
- list.should.eql(ret);
146
- });
147
- });
148
- describe('uninstall', function () {
149
- it('should uninstall a driver based on its driver name', async function () {
150
- await clear();
151
- const ret = JSON.parse(await run('install', ['@appium/fake-driver', '--source', 'npm', '--json']));
152
-
153
- const installPath = _path.default.resolve(appiumHome, ret.fake.installPath);
154
-
155
- await _support.fs.exists(installPath).should.eventually.be.true;
156
- let list = JSON.parse(await run('list', ['--installed', '--json']));
157
- list.fake.installed.should.be.true;
158
- const uninstall = JSON.parse(await run('uninstall', ['fake', '--json']));
159
- uninstall.should.not.have.key('fake');
160
- await _support.fs.exists(installPath).should.eventually.be.false;
161
- });
162
- });
163
- describe('run', function () {
164
- before(async function () {
165
- await clear();
166
- await run('install', [localFakeDriverPath, '--source', 'local', '--json']);
167
- });
168
- it('should run a valid driver, valid script, and result in success', async function () {
169
- const driverName = 'fake';
170
- const scriptName = 'fake-success';
171
- const out = JSON.parse(await run('run', [driverName, scriptName, '--json']));
172
- out.should.not.include.key('error');
173
- });
174
- it('should run a valid driver, valid error prone script, and return error in json', async function () {
175
- const driverName = 'fake';
176
- const out = JSON.parse(await run('run', [driverName, 'fake-error', '--json']));
177
- out.should.include.key('error');
178
- });
179
- it('should take a valid driver, invalid script, and throw an error', async function () {
180
- const driverName = 'fake';
181
- await chai.expect(run('run', [driverName, 'foo', '--json'])).to.eventually.be.rejectedWith(Error);
182
- });
183
- it('should take an invalid driver, invalid script, and throw an error', async function () {
184
- const driverName = 'foo';
185
- await chai.expect(run('run', [driverName, 'bar', '--json'])).to.eventually.be.rejectedWith(Error);
186
- });
187
- });
188
- });
189
- describe('Plugin CLI', function () {
190
- const fakePluginDir = _path.default.dirname(require.resolve('@appium/fake-plugin/package.json'));
191
-
192
- const ext = 'plugin';
193
- describe('run', function () {
194
- before(async function () {
195
- await clear();
196
- await run('install', [fakePluginDir, '--source', 'local', '--json'], false, ext);
197
- });
198
- it('should run a valid plugin, valid script, and result in success', async function () {
199
- const pluginName = 'fake';
200
- const scriptName = 'fake-success';
201
- const out = JSON.parse(await run('run', [pluginName, scriptName, '--json'], false, ext));
202
- out.should.not.include.key('error');
203
- });
204
- it('should run a valid plugin, valid error prone script, and return error in json', async function () {
205
- const pluginName = 'fake';
206
- const out = JSON.parse(await run('run', [pluginName, 'fake-error', '--json'], false, ext));
207
- out.should.include.key('error');
208
- });
209
- it('should take a valid plugin, invalid script, and throw an error', async function () {
210
- const pluginName = 'fake';
211
- await chai.expect(run('run', [pluginName, 'foo', '--json'], false, ext)).to.eventually.be.rejectedWith(Error);
212
- });
213
- it('should take an invalid plugin, invalid script, and throw an error', async function () {
214
- await chai.expect(run('run', ['foo', 'bar', '--json'], false, ext)).to.eventually.be.rejectedWith(Error);
215
- });
216
- });
217
- });
218
- });require('source-map-support').install();
219
-
220
-
221
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvY2xpL2NsaS1lMmUtc3BlY3MuanMiXSwibmFtZXMiOlsiZGVzY3JpYmUiLCJhcHBpdW1Ib21lIiwicnVuIiwiYmVmb3JlIiwidGVtcERpciIsIm9wZW5EaXIiLCJydW5uZXIiLCJleHRDb21tYW5kIiwiYXJncyIsInJhdyIsImV4dCIsImFmdGVyIiwiZnMiLCJyaW1yYWYiLCJjbGVhciIsImxvY2FsRmFrZURyaXZlclBhdGgiLCJwYXRoIiwiam9pbiIsIlBST0pFQ1RfUk9PVCIsIml0Iiwic3Rkb3V0IiwiZCIsIk9iamVjdCIsImtleXMiLCJLTk9XTl9EUklWRVJTIiwic2hvdWxkIiwibWF0Y2giLCJSZWdFeHAiLCJkcml2ZXJEYXRhIiwiSlNPTiIsInBhcnNlIiwiZXFsIiwiaW5zdGFsbGVkIiwicGtnTmFtZSIsIm91dCIsInBlbnVsdGltYXRlRmFrZURyaXZlclZlcnNpb25Bc09mUmlnaHROb3ciLCJmYWtlIiwidXRpbCIsImNvbXBhcmVWZXJzaW9ucyIsInVwZGF0ZVZlcnNpb24iLCJiZSIsInRydWUiLCJyZXQiLCJ1aWF1dG9tYXRvcjIiLCJpbnN0YWxsVHlwZSIsImluc3RhbGxTcGVjIiwibGlzdCIsImN1cnJlbnRGYWtlRHJpdmVyVmVyc2lvbkFzT2ZSaWdodE5vdyIsImluc3RhbGxQYXRoIiwicmVzb2x2ZSIsImV4aXN0cyIsImV2ZW50dWFsbHkiLCJ1bmluc3RhbGwiLCJub3QiLCJoYXZlIiwia2V5IiwiZmFsc2UiLCJkcml2ZXJOYW1lIiwic2NyaXB0TmFtZSIsImluY2x1ZGUiLCJjaGFpIiwiZXhwZWN0IiwidG8iLCJyZWplY3RlZFdpdGgiLCJFcnJvciIsImZha2VQbHVnaW5EaXIiLCJkaXJuYW1lIiwicmVxdWlyZSIsInBsdWdpbk5hbWUiXSwibWFwcGluZ3MiOiI7Ozs7OztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBQSxRQUFRLENBQUMsS0FBRCxFQUFRLFlBQVk7QUFJMUIsTUFBSUMsVUFBSjtBQUtBLE1BQUlD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QUFDQSxjQUFNbEMsR0FBRyxHQUFHTCxJQUFJLENBQUNDLEtBQUwsQ0FBVyxNQUFNNUIsR0FBRyxDQUFDLEtBQUQsRUFBUSxDQUFDa0UsVUFBRCxFQUFhLFlBQWIsRUFBMkIsUUFBM0IsQ0FBUixFQUE4QyxLQUE5QyxFQUFxRDFELEdBQXJELENBQXBCLENBQVo7QUFDQXdCLFFBQUFBLEdBQUcsQ0FBQ1QsTUFBSixDQUFXa0MsT0FBWCxDQUFtQkosR0FBbkIsQ0FBdUIsT0FBdkI7QUFDRCxPQUpDLENBQUY7QUFLQXBDLE1BQUFBLEVBQUUsQ0FBQyxnRUFBRCxFQUFtRSxrQkFBa0I7QUFDckYsY0FBTWlELFVBQVUsR0FBRyxNQUFuQjtBQUNBLGNBQU1SLElBQUksQ0FBQ0MsTUFBTCxDQUFZM0QsR0FBRyxDQUFDLEtBQUQsRUFBUSxDQUFDa0UsVUFBRCxFQUFhLEtBQWIsRUFBb0IsUUFBcEIsQ0FBUixFQUF1QyxLQUF2QyxFQUE4QzFELEdBQTlDLENBQWYsRUFBbUVvRCxFQUFuRSxDQUFzRVgsVUFBdEUsQ0FBaUZYLEVBQWpGLENBQW9GdUIsWUFBcEYsQ0FBaUdDLEtBQWpHLENBQU47QUFDRCxPQUhDLENBQUY7QUFJQTdDLE1BQUFBLEVBQUUsQ0FBQyxtRUFBRCxFQUFzRSxrQkFBa0I7QUFDeEYsY0FBTXlDLElBQUksQ0FBQ0MsTUFBTCxDQUFZM0QsR0FBRyxDQUFDLEtBQUQsRUFBUSxDQUFDLEtBQUQsRUFBUSxLQUFSLEVBQWUsUUFBZixDQUFSLEVBQWtDLEtBQWxDLEVBQXlDUSxHQUF6QyxDQUFmLEVBQThEb0QsRUFBOUQsQ0FBaUVYLFVBQWpFLENBQTRFWCxFQUE1RSxDQUErRXVCLFlBQS9FLENBQTRGQyxLQUE1RixDQUFOO0FBQ0QsT0FGQyxDQUFGO0FBR0QsS0F2Qk8sQ0FBUjtBQXdCRCxHQTNCTyxDQUFSO0FBNEJELENBN01PLENBQVIiLCJzb3VyY2VzQ29udGVudCI6WyJcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgdGVtcERpciwgZnMsIG1rZGlycCwgdXRpbCB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgeyBLTk9XTl9EUklWRVJTIH0gZnJvbSAnLi4vLi4vbGliL2RyaXZlcnMnO1xuaW1wb3J0IHsgUFJPSkVDVF9ST09UIH0gZnJvbSAnLi4vaGVscGVycyc7XG5pbXBvcnQgeyBydW5BcHBpdW0gfSBmcm9tICcuL2NsaS1oZWxwZXJzJztcblxuZGVzY3JpYmUoJ0NMSScsIGZ1bmN0aW9uICgpIHtcbiAgLyoqXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBsZXQgYXBwaXVtSG9tZTtcblxuICAvKipcbiAgICogQHR5cGUgeyhleHRDb21tYW5kOiBzdHJpbmcsIGFyZ3M/OiBzdHJpbmdbXSwgcmF3PzogYm9vbGVhbiwgZXh0PzogRXh0ZW5zaW9uVHlwZSkgPT4gUHJvbWlzZTxzdHJpbmd8aW1wb3J0KCcuL2NsaS1oZWxwZXJzJykuVGVlblByb2Nlc3NFeGVjUmVzdWx0Pn1cbiAgICovXG4gIGxldCBydW47XG5cbiAgYmVmb3JlKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBhcHBpdW1Ib21lID0gYXdhaXQgdGVtcERpci5vcGVuRGlyKCk7XG4gICAgY29uc3QgcnVubmVyID0gcnVuQXBwaXVtKGFwcGl1bUhvbWUpO1xuICAgIHJ1biA9IGFzeW5jIChleHRDb21tYW5kLCBhcmdzID0gW10sIHJhdyA9IGZhbHNlLCBleHQgPSAnZHJpdmVyJykgPT4gYXdhaXQgcnVubmVyKFtleHQsIGV4dENvbW1hbmQsIC4uLmFyZ3NdLCB7cmF3fSk7XG4gIH0pO1xuXG4gIGFmdGVyKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBhd2FpdCBmcy5yaW1yYWYoYXBwaXVtSG9tZSk7XG4gIH0pO1xuXG4gIGFzeW5jIGZ1bmN0aW9uIGNsZWFyICgpIHtcbiAgICBhd2FpdCBmcy5yaW1yYWYoYXBwaXVtSG9tZSk7XG4gICAgYXdhaXQgbWtkaXJwKGFwcGl1bUhvbWUpO1xuICB9XG5cbiAgZGVzY3JpYmUoJ0RyaXZlciBDTEknLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgbG9jYWxGYWtlRHJpdmVyUGF0aCA9IHBhdGguam9pbihQUk9KRUNUX1JPT1QsICdwYWNrYWdlcycsICdmYWtlLWRyaXZlcicpO1xuICAgIGRlc2NyaWJlKCdsaXN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgaXQoJ3Nob3VsZCBsaXN0IGF2YWlsYWJsZSBkcml2ZXJzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBzdGRvdXQgPSBhd2FpdCBydW4oJ2xpc3QnKTtcbiAgICAgICAgZm9yIChjb25zdCBkIG9mIE9iamVjdC5rZXlzKEtOT1dOX0RSSVZFUlMpKSB7XG4gICAgICAgICAgc3Rkb3V0LnNob3VsZC5tYXRjaChuZXcgUmVnRXhwKGAke2R9Litbbm90IGluc3RhbGxlZF1gKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgaXQoJ3Nob3VsZCBsaXN0IGF2YWlsYWJsZSBkcml2ZXJzIGluIGpzb24gZm9ybWF0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBkcml2ZXJEYXRhID0gSlNPTi5wYXJzZShhd2FpdCBydW4oJ2xpc3QnLCBbJy0tanNvbiddKSk7XG4gICAgICAgIGZvciAoY29uc3QgZCBvZiBPYmplY3Qua2V5cyhLTk9XTl9EUklWRVJTKSkge1xuICAgICAgICAgIGRyaXZlckRhdGFbZF0uc2hvdWxkLmVxbCh7aW5zdGFsbGVkOiBmYWxzZSwgcGtnTmFtZTogS05PV05fRFJJVkVSU1tkXX0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGl0KCdzaG91bGQgYWxsb3cgZmlsdGVyaW5nIGJ5IGluc3RhbGxlZCBkcml2ZXJzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBvdXQgPSBhd2FpdCBydW4oJ2xpc3QnLCBbJy0taW5zdGFsbGVkJywgJy0tanNvbiddKTtcbiAgICAgICAgSlNPTi5wYXJzZShvdXQpLnNob3VsZC5lcWwoe30pO1xuICAgICAgfSk7XG4gICAgICBpdCgnc2hvdWxkIHNob3cgdXBkYXRlcyBmb3IgaW5zdGFsbGVkIGRyaXZlcnMgd2l0aCAtLXVwZGF0ZXMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHBlbnVsdGltYXRlRmFrZURyaXZlclZlcnNpb25Bc09mUmlnaHROb3cgPSAnMy4wLjQnO1xuICAgICAgICBhd2FpdCBjbGVhcigpO1xuICAgICAgICBhd2FpdCBydW4oJ2luc3RhbGwnLCBbYEBhcHBpdW0vZmFrZS1kcml2ZXJAJHtwZW51bHRpbWF0ZUZha2VEcml2ZXJWZXJzaW9uQXNPZlJpZ2h0Tm93fWAsICctLXNvdXJjZScsICducG0nLCAnLS1qc29uJ10pO1xuICAgICAgICBjb25zdCB7ZmFrZX0gPSBKU09OLnBhcnNlKGF3YWl0IHJ1bignbGlzdCcsIFsnLS11cGRhdGVzJywgJy0tanNvbiddKSk7XG4gICAgICAgIHV0aWwuY29tcGFyZVZlcnNpb25zKGZha2UudXBkYXRlVmVyc2lvbiwgJz4nLCBwZW51bHRpbWF0ZUZha2VEcml2ZXJWZXJzaW9uQXNPZlJpZ2h0Tm93KS5zaG91bGQuYmUudHJ1ZTtcbiAgICAgICAgY29uc3Qgc3Rkb3V0ID0gYXdhaXQgcnVuKCdsaXN0JywgWyctLXVwZGF0ZXMnXSk7XG4gICAgICAgIHN0ZG91dC5zaG91bGQubWF0Y2gobmV3IFJlZ0V4cChgZmFrZS4rWyR7ZmFrZS51cGRhdGVWZXJzaW9ufSBhdmFpbGFibGVdYCkpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnaW5zdGFsbCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGl0KCdzaG91bGQgaW5zdGFsbCBhIGRyaXZlciBmcm9tIHRoZSBsaXN0IG9mIGtub3duIGRyaXZlcnMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGF3YWl0IGNsZWFyKCk7XG4gICAgICAgIGNvbnN0IHJldCA9IEpTT04ucGFyc2UoYXdhaXQgcnVuKCdpbnN0YWxsJywgWyd1aWF1dG9tYXRvcjInLCAnLS1qc29uJ10pKTtcbiAgICAgICAgcmV0LnVpYXV0b21hdG9yMi5wa2dOYW1lLnNob3VsZC5lcWwoJ2FwcGl1bS11aWF1dG9tYXRvcjItZHJpdmVyJyk7XG4gICAgICAgIHJldC51aWF1dG9tYXRvcjIuaW5zdGFsbFR5cGUuc2hvdWxkLmVxbCgnbnBtJyk7XG4gICAgICAgIHJldC51aWF1dG9tYXRvcjIuaW5zdGFsbFNwZWMuc2hvdWxkLmVxbCgndWlhdXRvbWF0b3IyJyk7XG4gICAgICAgIGNvbnN0IGxpc3QgPSBKU09OLnBhcnNlKGF3YWl0IHJ1bignbGlzdCcsIFsnLS1pbnN0YWxsZWQnLCAnLS1qc29uJ10pKTtcbiAgICAgICAgZGVsZXRlIGxpc3QudWlhdXRvbWF0b3IyLmluc3RhbGxlZDtcbiAgICAgICAgbGlzdC5zaG91bGQuZXFsKHJldCk7XG4gICAgICB9KTtcbiAgICAgIGl0KCdzaG91bGQgaW5zdGFsbCBhIGRyaXZlciBmcm9tIG5wbScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYXdhaXQgY2xlYXIoKTtcbiAgICAgICAgY29uc3QgcmV0ID0gSlNPTi5wYXJzZShhd2FpdCBydW4oJ2luc3RhbGwnLCBbJ0BhcHBpdW0vZmFrZS1kcml2ZXInLCAnLS1zb3VyY2UnLCAnbnBtJywgJy0tanNvbiddKSk7XG4gICAgICAgIHJldC5mYWtlLnBrZ05hbWUuc2hvdWxkLmVxbCgnQGFwcGl1bS9mYWtlLWRyaXZlcicpO1xuICAgICAgICByZXQuZmFrZS5pbnN0YWxsVHlwZS5zaG91bGQuZXFsKCducG0nKTtcbiAgICAgICAgcmV0LmZha2UuaW5zdGFsbFNwZWMuc2hvdWxkLmVxbCgnQGFwcGl1bS9mYWtlLWRyaXZlcicpO1xuICAgICAgICBjb25zdCBsaXN0ID0gSlNPTi5wYXJzZShhd2FpdCBydW4oJ2xpc3QnLCBbJy0taW5zdGFsbGVkJywgJy0tanNvbiddKSk7XG4gICAgICAgIGRlbGV0ZSBsaXN0LmZha2UuaW5zdGFsbGVkO1xuICAgICAgICBsaXN0LnNob3VsZC5lcWwocmV0KTtcbiAgICAgIH0pO1xuICAgICAgaXQoJ3Nob3VsZCBpbnN0YWxsIGEgZHJpdmVyIGZyb20gbnBtIHdpdGggYSBzcGVjaWZpYyB2ZXJzaW9uL3RhZycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgY3VycmVudEZha2VEcml2ZXJWZXJzaW9uQXNPZlJpZ2h0Tm93ID0gJzMuMC41JztcbiAgICAgICAgYXdhaXQgY2xlYXIoKTtcbiAgICAgICAgY29uc3QgaW5zdGFsbFNwZWMgPSBgQGFwcGl1bS9mYWtlLWRyaXZlckAke2N1cnJlbnRGYWtlRHJpdmVyVmVyc2lvbkFzT2ZSaWdodE5vd31gO1xuICAgICAgICBjb25zdCByZXQgPSBKU09OLnBhcnNlKGF3YWl0IHJ1bignaW5zdGFsbCcsIFtpbnN0YWxsU3BlYywgJy0tc291cmNlJywgJ25wbScsICctLWpzb24nXSkpO1xuICAgICAgICByZXQuZmFrZS5wa2dOYW1lLnNob3VsZC5lcWwoJ0BhcHBpdW0vZmFrZS1kcml2ZXInKTtcbiAgICAgICAgcmV0LmZha2UuaW5zdGFsbFR5cGUuc2hvdWxkLmVxbCgnbnBtJyk7XG4gICAgICAgIHJldC5mYWtlLmluc3RhbGxTcGVjLnNob3VsZC5lcWwoaW5zdGFsbFNwZWMpO1xuICAgICAgICBjb25zdCBsaXN0ID0gSlNPTi5wYXJzZShhd2FpdCBydW4oJ2xpc3QnLCBbJy0taW5zdGFsbGVkJywgJy0tanNvbiddKSk7XG4gICAgICAgIGRlbGV0ZSBsaXN0LmZha2UuaW5zdGFsbGVkO1xuICAgICAgICBsaXN0LnNob3VsZC5lcWwocmV0KTtcbiAgICAgIH0pO1xuICAgICAgaXQoJ3Nob3VsZCBpbnN0YWxsIGEgZHJpdmVyIGZyb20gZ2l0aHViJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBhd2FpdCBjbGVhcigpO1xuICAgICAgICBjb25zdCByZXQgPSBKU09OLnBhcnNlKGF3YWl0IHJ1bignaW5zdGFsbCcsIFsnYXBwaXVtL2FwcGl1bS1mYWtlLWRyaXZlcicsICctLXNvdXJjZScsXG4gICAgICAgICAgJ2dpdGh1YicsICctLXBhY2thZ2UnLCAnYXBwaXVtLWZha2UtZHJpdmVyJywgJy0tanNvbiddKSk7XG4gICAgICAgIHJldC5mYWtlLnBrZ05hbWUuc2hvdWxkLmVxbCgnYXBwaXVtLWZha2UtZHJpdmVyJyk7XG4gICAgICAgIHJldC5mYWtlLmluc3RhbGxUeXBlLnNob3VsZC5lcWwoJ2dpdGh1YicpO1xuICAgICAgICByZXQuZmFrZS5pbnN0YWxsU3BlYy5zaG91bGQuZXFsKCdhcHBpdW0vYXBwaXVtLWZha2UtZHJpdmVyJyk7XG4gICAgICAgIGNvbnN0IGxpc3QgPSBKU09OLnBhcnNlKGF3YWl0IHJ1bignbGlzdCcsIFsnLS1pbnN0YWxsZWQnLCAnLS1qc29uJ10pKTtcbiAgICAgICAgZGVsZXRlIGxpc3QuZmFrZS5pbnN0YWxsZWQ7XG4gICAgICAgIGxpc3Quc2hvdWxkLmVxbChyZXQpO1xuICAgICAgfSk7XG4gICAgICBpdCgnc2hvdWxkIGluc3RhbGwgYSBkcml2ZXIgZnJvbSBhIGxvY2FsIGdpdCByZXBvJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBhd2FpdCBjbGVhcigpO1xuICAgICAgICBjb25zdCByZXQgPSBKU09OLnBhcnNlKGF3YWl0IHJ1bignaW5zdGFsbCcsIFtsb2NhbEZha2VEcml2ZXJQYXRoLFxuICAgICAgICAgICctLXNvdXJjZScsICdnaXQnLCAnLS1wYWNrYWdlJywgJ0BhcHBpdW0vZmFrZS1kcml2ZXInLCAnLS1qc29uJ10pKTtcbiAgICAgICAgcmV0LmZha2UucGtnTmFtZS5zaG91bGQuZXFsKCdAYXBwaXVtL2Zha2UtZHJpdmVyJyk7XG4gICAgICAgIHJldC5mYWtlLmluc3RhbGxUeXBlLnNob3VsZC5lcWwoJ2dpdCcpO1xuICAgICAgICByZXQuZmFrZS5pbnN0YWxsU3BlYy5zaG91bGQuZXFsKGxvY2FsRmFrZURyaXZlclBhdGgpO1xuICAgICAgICBjb25zdCBsaXN0ID0gSlNPTi5wYXJzZShhd2FpdCBydW4oJ2xpc3QnLCBbJy0taW5zdGFsbGVkJywgJy0tanNvbiddKSk7XG4gICAgICAgIGRlbGV0ZSBsaXN0LmZha2UuaW5zdGFsbGVkO1xuICAgICAgICBsaXN0LnNob3VsZC5lcWwocmV0KTtcbiAgICAgIH0pO1xuICAgICAgaXQoJ3Nob3VsZCBpbnN0YWxsIGEgZHJpdmVyIGZyb20gYSByZW1vdGUgZ2l0IHJlcG8nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGF3YWl0IGNsZWFyKCk7XG4gICAgICAgIGNvbnN0IHJldCA9IEpTT04ucGFyc2UoYXdhaXQgcnVuKCdpbnN0YWxsJywgWydnaXQraHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0tZmFrZS1kcml2ZXIuZ2l0JyxcbiAgICAgICAgICAnLS1zb3VyY2UnLCAnZ2l0JywgJy0tcGFja2FnZScsICdhcHBpdW0tZmFrZS1kcml2ZXInLCAnLS1qc29uJ10pKTtcbiAgICAgICAgcmV0LmZha2UucGtnTmFtZS5zaG91bGQuZXFsKCdhcHBpdW0tZmFrZS1kcml2ZXInKTtcbiAgICAgICAgcmV0LmZha2UuaW5zdGFsbFR5cGUuc2hvdWxkLmVxbCgnZ2l0Jyk7XG4gICAgICAgIHJldC5mYWtlLmluc3RhbGxTcGVjLnNob3VsZC5lcWwoJ2dpdCtodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtL2FwcGl1bS1mYWtlLWRyaXZlcicpO1xuICAgICAgICBjb25zdCBsaXN0ID0gSlNPTi5wYXJzZShhd2FpdCBydW4oJ2xpc3QnLCBbJy0taW5zdGFsbGVkJywgJy0tanNvbiddKSk7XG4gICAgICAgIGRlbGV0ZSBsaXN0LmZha2UuaW5zdGFsbGVkO1xuICAgICAgICBsaXN0LnNob3VsZC5lcWwocmV0KTtcbiAgICAgIH0pO1xuICAgICAgaXQoJ3Nob3VsZCBpbnN0YWxsIGEgZHJpdmVyIGZyb20gYSBsb2NhbCBucG0gbW9kdWxlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBhd2FpdCBjbGVhcigpO1xuICAgICAgICAvLyB0YWtlIGFkdmFudGFnZSBvZiB0aGUgZmFjdCB0aGF0IHdlIGtub3cgd2UgaGF2ZSBmYWtlIGRyaXZlciBpbnN0YWxsZWQgYXMgYSBkZXBlbmRlbmN5IGluXG4gICAgICAgIC8vIHRoaXMgbW9kdWxlLCBzbyB3ZSBrbm93IGl0cyBsb2NhbCBwYXRoIG9uIGRpc2tcbiAgICAgICAgY29uc3QgcmV0ID0gSlNPTi5wYXJzZShhd2FpdCBydW4oJ2luc3RhbGwnLCBbbG9jYWxGYWtlRHJpdmVyUGF0aCwgJy0tc291cmNlJywgJ2xvY2FsJywgJy0tanNvbiddKSk7XG4gICAgICAgIHJldC5mYWtlLnBrZ05hbWUuc2hvdWxkLmVxbCgnQGFwcGl1bS9mYWtlLWRyaXZlcicpO1xuICAgICAgICByZXQuZmFrZS5pbnN0YWxsVHlwZS5zaG91bGQuZXFsKCdsb2NhbCcpO1xuICAgICAgICByZXQuZmFrZS5pbnN0YWxsU3BlYy5zaG91bGQuZXFsKGxvY2FsRmFrZURyaXZlclBhdGgpO1xuICAgICAgICBjb25zdCBsaXN0ID0gSlNPTi5wYXJzZShhd2FpdCBydW4oJ2xpc3QnLCBbJy0taW5zdGFsbGVkJywgJy0tanNvbiddKSk7XG4gICAgICAgIGRlbGV0ZSBsaXN0LmZha2UuaW5zdGFsbGVkO1xuICAgICAgICBsaXN0LnNob3VsZC5lcWwocmV0KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3VuaW5zdGFsbCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGl0KCdzaG91bGQgdW5pbnN0YWxsIGEgZHJpdmVyIGJhc2VkIG9uIGl0cyBkcml2ZXIgbmFtZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYXdhaXQgY2xlYXIoKTtcbiAgICAgICAgY29uc3QgcmV0ID0gSlNPTi5wYXJzZShhd2FpdCBydW4oJ2luc3RhbGwnLCBbJ0BhcHBpdW0vZmFrZS1kcml2ZXInLCAnLS1zb3VyY2UnLCAnbnBtJywgJy0tanNvbiddKSk7XG4gICAgICAgIGNvbnN0IGluc3RhbGxQYXRoID0gcGF0aC5yZXNvbHZlKGFwcGl1bUhvbWUsIHJldC5mYWtlLmluc3RhbGxQYXRoKTtcbiAgICAgICAgYXdhaXQgZnMuZXhpc3RzKGluc3RhbGxQYXRoKS5zaG91bGQuZXZlbnR1YWxseS5iZS50cnVlO1xuICAgICAgICBsZXQgbGlzdCA9IEpTT04ucGFyc2UoYXdhaXQgcnVuKCdsaXN0JywgWyctLWluc3RhbGxlZCcsICctLWpzb24nXSkpO1xuICAgICAgICBsaXN0LmZha2UuaW5zdGFsbGVkLnNob3VsZC5iZS50cnVlO1xuICAgICAgICBjb25zdCB1bmluc3RhbGwgPSBKU09OLnBhcnNlKGF3YWl0IHJ1bigndW5pbnN0YWxsJywgWydmYWtlJywgJy0tanNvbiddKSk7XG4gICAgICAgIHVuaW5zdGFsbC5zaG91bGQubm90LmhhdmUua2V5KCdmYWtlJyk7XG4gICAgICAgIGF3YWl0IGZzLmV4aXN0cyhpbnN0YWxsUGF0aCkuc2hvdWxkLmV2ZW50dWFsbHkuYmUuZmFsc2U7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdydW4nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBiZWZvcmUoYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBhd2FpdCBjbGVhcigpO1xuICAgICAgICBhd2FpdCBydW4oJ2luc3RhbGwnLCBbbG9jYWxGYWtlRHJpdmVyUGF0aCwgJy0tc291cmNlJywgJ2xvY2FsJywgJy0tanNvbiddKTtcbiAgICAgIH0pO1xuICAgICAgaXQoJ3Nob3VsZCBydW4gYSB2YWxpZCBkcml2ZXIsIHZhbGlkIHNjcmlwdCwgYW5kIHJlc3VsdCBpbiBzdWNjZXNzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBkcml2ZXJOYW1lID0gJ2Zha2UnO1xuICAgICAgICBjb25zdCBzY3JpcHROYW1lID0gJ2Zha2Utc3VjY2Vzcyc7XG4gICAgICAgIGNvbnN0IG91dCA9IEpTT04ucGFyc2UoYXdhaXQgcnVuKCdydW4nLCBbZHJpdmVyTmFtZSwgc2NyaXB0TmFtZSwgJy0tanNvbiddKSk7XG4gICAgICAgIG91dC5zaG91bGQubm90LmluY2x1ZGUua2V5KCdlcnJvcicpO1xuICAgICAgfSk7XG4gICAgICBpdCgnc2hvdWxkIHJ1biBhIHZhbGlkIGRyaXZlciwgdmFsaWQgZXJyb3IgcHJvbmUgc2NyaXB0LCBhbmQgcmV0dXJuIGVycm9yIGluIGpzb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IGRyaXZlck5hbWUgPSAnZmFrZSc7XG4gICAgICAgIGNvbnN0IG91dCA9IEpTT04ucGFyc2UoYXdhaXQgcnVuKCdydW4nLCBbZHJpdmVyTmFtZSwgJ2Zha2UtZXJyb3InLCAnLS1qc29uJ10pKTtcbiAgICAgICAgb3V0LnNob3VsZC5pbmNsdWRlLmtleSgnZXJyb3InKTtcbiAgICAgIH0pO1xuICAgICAgaXQoJ3Nob3VsZCB0YWtlIGEgdmFsaWQgZHJpdmVyLCBpbnZhbGlkIHNjcmlwdCwgYW5kIHRocm93IGFuIGVycm9yJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBkcml2ZXJOYW1lID0gJ2Zha2UnO1xuICAgICAgICBhd2FpdCBjaGFpLmV4cGVjdChydW4oJ3J1bicsIFtkcml2ZXJOYW1lLCAnZm9vJywgJy0tanNvbiddKSkudG8uZXZlbnR1YWxseS5iZS5yZWplY3RlZFdpdGgoRXJyb3IpO1xuICAgICAgfSk7XG4gICAgICBpdCgnc2hvdWxkIHRha2UgYW4gaW52YWxpZCBkcml2ZXIsIGludmFsaWQgc2NyaXB0LCBhbmQgdGhyb3cgYW4gZXJyb3InLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IGRyaXZlck5hbWUgPSAnZm9vJztcbiAgICAgICAgYXdhaXQgY2hhaS5leHBlY3QocnVuKCdydW4nLCBbZHJpdmVyTmFtZSwgJ2JhcicsICctLWpzb24nXSkpLnRvLmV2ZW50dWFsbHkuYmUucmVqZWN0ZWRXaXRoKEVycm9yKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnUGx1Z2luIENMSScsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBmYWtlUGx1Z2luRGlyID0gcGF0aC5kaXJuYW1lKHJlcXVpcmUucmVzb2x2ZSgnQGFwcGl1bS9mYWtlLXBsdWdpbi9wYWNrYWdlLmpzb24nKSk7XG4gICAgY29uc3QgZXh0ID0gJ3BsdWdpbic7XG4gICAgZGVzY3JpYmUoJ3J1bicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGJlZm9yZShhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGF3YWl0IGNsZWFyKCk7XG4gICAgICAgIGF3YWl0IHJ1bignaW5zdGFsbCcsIFtmYWtlUGx1Z2luRGlyLCAnLS1zb3VyY2UnLCAnbG9jYWwnLCAnLS1qc29uJ10sIGZhbHNlLCBleHQpO1xuICAgICAgfSk7XG4gICAgICBpdCgnc2hvdWxkIHJ1biBhIHZhbGlkIHBsdWdpbiwgdmFsaWQgc2NyaXB0LCBhbmQgcmVzdWx0IGluIHN1Y2Nlc3MnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHBsdWdpbk5hbWUgPSAnZmFrZSc7XG4gICAgICAgIGNvbnN0IHNjcmlwdE5hbWUgPSAnZmFrZS1zdWNjZXNzJztcbiAgICAgICAgY29uc3Qgb3V0ID0gSlNPTi5wYXJzZShhd2FpdCBydW4oJ3J1bicsIFtwbHVnaW5OYW1lLCBzY3JpcHROYW1lLCAnLS1qc29uJ10sIGZhbHNlLCBleHQpKTtcbiAgICAgICAgb3V0LnNob3VsZC5ub3QuaW5jbHVkZS5rZXkoJ2Vycm9yJyk7XG4gICAgICB9KTtcbiAgICAgIGl0KCdzaG91bGQgcnVuIGEgdmFsaWQgcGx1Z2luLCB2YWxpZCBlcnJvciBwcm9uZSBzY3JpcHQsIGFuZCByZXR1cm4gZXJyb3IgaW4ganNvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgcGx1Z2luTmFtZSA9ICdmYWtlJztcbiAgICAgICAgY29uc3Qgb3V0ID0gSlNPTi5wYXJzZShhd2FpdCBydW4oJ3J1bicsIFtwbHVnaW5OYW1lLCAnZmFrZS1lcnJvcicsICctLWpzb24nXSwgZmFsc2UsIGV4dCkpO1xuICAgICAgICBvdXQuc2hvdWxkLmluY2x1ZGUua2V5KCdlcnJvcicpO1xuICAgICAgfSk7XG4gICAgICBpdCgnc2hvdWxkIHRha2UgYSB2YWxpZCBwbHVnaW4sIGludmFsaWQgc2NyaXB0LCBhbmQgdGhyb3cgYW4gZXJyb3InLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHBsdWdpbk5hbWUgPSAnZmFrZSc7XG4gICAgICAgIGF3YWl0IGNoYWkuZXhwZWN0KHJ1bigncnVuJywgW3BsdWdpbk5hbWUsICdmb28nLCAnLS1qc29uJ10sIGZhbHNlLCBleHQpKS50by5ldmVudHVhbGx5LmJlLnJlamVjdGVkV2l0aChFcnJvcik7XG4gICAgICB9KTtcbiAgICAgIGl0KCdzaG91bGQgdGFrZSBhbiBpbnZhbGlkIHBsdWdpbiwgaW52YWxpZCBzY3JpcHQsIGFuZCB0aHJvdyBhbiBlcnJvcicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYXdhaXQgY2hhaS5leHBlY3QocnVuKCdydW4nLCBbJ2ZvbycsICdiYXInLCAnLS1qc29uJ10sIGZhbHNlLCBleHQpKS50by5ldmVudHVhbGx5LmJlLnJlamVjdGVkV2l0aChFcnJvcik7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59KTtcblxuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uLy4uL2xpYi9leHQtY29uZmlnLWlvJykuRXh0ZW5zaW9uVHlwZX0gRXh0ZW5zaW9uVHlwZVxuICovXG4iXSwiZmlsZSI6InRlc3QvY2xpL2NsaS1lMmUtc3BlY3MuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==
@@ -1,86 +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.runAppiumRaw = exports.runAppiumJson = exports.runAppium = exports.installLocalExtension = exports.EXECUTABLE = void 0;
9
-
10
- require("source-map-support/register");
11
-
12
- var _lodash = _interopRequireDefault(require("lodash"));
13
-
14
- var _teen_process = require("teen_process");
15
-
16
- var _helpers = require("../helpers");
17
-
18
- var _path = _interopRequireDefault(require("path"));
19
-
20
- const EXECUTABLE = _path.default.join(_helpers.PROJECT_ROOT, 'packages', 'appium', 'build', 'lib', 'main.js');
21
-
22
- exports.EXECUTABLE = EXECUTABLE;
23
-
24
- async function run(appiumHome, args) {
25
- const env = {
26
- APPIUM_HOME: appiumHome,
27
- PATH: process.env.PATH
28
- };
29
-
30
- try {
31
- return await (0, _teen_process.exec)(process.execPath, [EXECUTABLE, ...args], {
32
- cwd: _helpers.PROJECT_ROOT,
33
- env
34
- });
35
- } catch (err) {
36
- const {
37
- stdout,
38
- stderr
39
- } = err;
40
- const runErr = Object.assign(err, {
41
- originalMessage: err.message,
42
- message: `${stdout.trim()}\n\n${stderr.trim()}`,
43
- command: `${process.execPath} ${EXECUTABLE} ${args.join(' ')}`,
44
- env,
45
- cwd: _helpers.PROJECT_ROOT
46
- });
47
- throw runErr;
48
- }
49
- }
50
-
51
- const runAppium = _lodash.default.curry(async (appiumHome, args) => {
52
- const {
53
- stdout
54
- } = await run(appiumHome, args);
55
- return stdout;
56
- });
57
-
58
- exports.runAppium = runAppium;
59
-
60
- const runAppiumRaw = _lodash.default.curry(async (appiumHome, args) => await run(appiumHome, args));
61
-
62
- exports.runAppiumRaw = runAppiumRaw;
63
-
64
- const runAppiumJson = _lodash.default.curry(async (appiumHome, args) => {
65
- if (!args.includes('--json')) {
66
- args.push('--json');
67
- }
68
-
69
- const result = await runAppium(appiumHome, args);
70
-
71
- try {
72
- return JSON.parse(result);
73
- } catch (err) {
74
- err.message = `Error parsing JSON. Contents of STDOUT: ${result}`;
75
- throw err;
76
- }
77
- });
78
-
79
- exports.runAppiumJson = runAppiumJson;
80
-
81
- const installLocalExtension = _lodash.default.curry(async (appiumHome, type, pathToExtension) => await runAppiumJson(appiumHome, [type, 'install', '--source', 'local', pathToExtension]));
82
-
83
- exports.installLocalExtension = installLocalExtension;require('source-map-support').install();
84
-
85
-
86
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvY2xpL2NsaS1oZWxwZXJzLmpzIl0sIm5hbWVzIjpbIkVYRUNVVEFCTEUiLCJwYXRoIiwiam9pbiIsIlBST0pFQ1RfUk9PVCIsInJ1biIsImFwcGl1bUhvbWUiLCJhcmdzIiwiZW52IiwiQVBQSVVNX0hPTUUiLCJQQVRIIiwicHJvY2VzcyIsImV4ZWNQYXRoIiwiY3dkIiwiZXJyIiwic3Rkb3V0Iiwic3RkZXJyIiwicnVuRXJyIiwiT2JqZWN0IiwiYXNzaWduIiwib3JpZ2luYWxNZXNzYWdlIiwibWVzc2FnZSIsInRyaW0iLCJjb21tYW5kIiwicnVuQXBwaXVtIiwiXyIsImN1cnJ5IiwicnVuQXBwaXVtUmF3IiwicnVuQXBwaXVtSnNvbiIsImluY2x1ZGVzIiwicHVzaCIsInJlc3VsdCIsIkpTT04iLCJwYXJzZSIsImluc3RhbGxMb2NhbEV4dGVuc2lvbiIsInR5cGUiLCJwYXRoVG9FeHRlbnNpb24iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBS08sTUFBTUEsVUFBVSxHQUFHQyxjQUFLQyxJQUFMLENBQ3hCQyxxQkFEd0IsRUFFeEIsVUFGd0IsRUFHeEIsUUFId0IsRUFJeEIsT0FKd0IsRUFLeEIsS0FMd0IsRUFNeEIsU0FOd0IsQ0FBbkI7Ozs7QUFpQlAsZUFBZUMsR0FBZixDQUFvQkMsVUFBcEIsRUFBZ0NDLElBQWhDLEVBQXNDO0FBQ3BDLFFBQU1DLEdBQUcsR0FBRztBQUNWQyxJQUFBQSxXQUFXLEVBQUVILFVBREg7QUFFVkksSUFBQUEsSUFBSSxFQUFFQyxPQUFPLENBQUNILEdBQVIsQ0FBWUU7QUFGUixHQUFaOztBQUlBLE1BQUk7QUFJRixXQUFPLE1BQU0sd0JBQUtDLE9BQU8sQ0FBQ0MsUUFBYixFQUF1QixDQUFDWCxVQUFELEVBQWEsR0FBR00sSUFBaEIsQ0FBdkIsRUFBOEM7QUFDekRNLE1BQUFBLEdBQUcsRUFBRVQscUJBRG9EO0FBRXpESSxNQUFBQTtBQUZ5RCxLQUE5QyxDQUFiO0FBSUQsR0FSRCxDQVFFLE9BQU9NLEdBQVAsRUFBWTtBQUNaLFVBQU07QUFBQ0MsTUFBQUEsTUFBRDtBQUFTQyxNQUFBQTtBQUFULFFBQXVERixHQUE3RDtBQUlBLFVBQU1HLE1BQU0sR0FBR0MsTUFBTSxDQUFDQyxNQUFQLENBQ2JMLEdBRGEsRUFFYjtBQUNFTSxNQUFBQSxlQUFlLEVBQUVOLEdBQUcsQ0FBQ08sT0FEdkI7QUFFRUEsTUFBQUEsT0FBTyxFQUFHLEdBQUVOLE1BQU0sQ0FBQ08sSUFBUCxFQUFjLE9BQU1OLE1BQU0sQ0FBQ00sSUFBUCxFQUFjLEVBRmhEO0FBR0VDLE1BQUFBLE9BQU8sRUFBRyxHQUFFWixPQUFPLENBQUNDLFFBQVMsSUFBR1gsVUFBVyxJQUFHTSxJQUFJLENBQUNKLElBQUwsQ0FBVSxHQUFWLENBQWUsRUFIL0Q7QUFJRUssTUFBQUEsR0FKRjtBQUtFSyxNQUFBQSxHQUFHLEVBQUVUO0FBTFAsS0FGYSxDQUFmO0FBU0EsVUFBTWEsTUFBTjtBQUNEO0FBQ0Y7O0FBT00sTUFBTU8sU0FBUyxHQUFHQyxnQkFBRUMsS0FBRixDQU12QixPQUFPcEIsVUFBUCxFQUFtQkMsSUFBbkIsS0FBNEI7QUFDMUIsUUFBTTtBQUFDUSxJQUFBQTtBQUFELE1BQVcsTUFBTVYsR0FBRyxDQUFDQyxVQUFELEVBQWFDLElBQWIsQ0FBMUI7QUFDQSxTQUFPUSxNQUFQO0FBQ0QsQ0FUc0IsQ0FBbEI7Ozs7QUFnQkEsTUFBTVksWUFBWSxHQUFHRixnQkFBRUMsS0FBRixDQU0xQixPQUFPcEIsVUFBUCxFQUFtQkMsSUFBbkIsS0FBNEIsTUFBTUYsR0FBRyxDQUFDQyxVQUFELEVBQWFDLElBQWIsQ0FOWCxDQUFyQjs7OztBQWFBLE1BQU1xQixhQUFhLEdBQUdILGdCQUFFQyxLQUFGLENBTTNCLE9BQU9wQixVQUFQLEVBQW1CQyxJQUFuQixLQUE0QjtBQUMxQixNQUFJLENBQUNBLElBQUksQ0FBQ3NCLFFBQUwsQ0FBYyxRQUFkLENBQUwsRUFBOEI7QUFDNUJ0QixJQUFBQSxJQUFJLENBQUN1QixJQUFMLENBQVUsUUFBVjtBQUNEOztBQUNELFFBQU1DLE1BQU0sR0FBRyxNQUFNUCxTQUFTLENBQUNsQixVQUFELEVBQWFDLElBQWIsQ0FBOUI7O0FBQ0EsTUFBSTtBQUNGLFdBQU95QixJQUFJLENBQUNDLEtBQUwsQ0FBV0YsTUFBWCxDQUFQO0FBQ0QsR0FGRCxDQUVFLE9BQU9qQixHQUFQLEVBQVk7QUFDWkEsSUFBQUEsR0FBRyxDQUFDTyxPQUFKLEdBQWUsMkNBQTBDVSxNQUFPLEVBQWhFO0FBQ0EsVUFBTWpCLEdBQU47QUFDRDtBQUNGLENBakIwQixDQUF0Qjs7OztBQXVCQSxNQUFNb0IscUJBQXFCLEdBQUdULGdCQUFFQyxLQUFGLENBT25DLE9BQU9wQixVQUFQLEVBQW1CNkIsSUFBbkIsRUFBeUJDLGVBQXpCLEtBQ0UsTUFBTVIsYUFBYSxDQUFDdEIsVUFBRCxFQUFhLENBQzlCNkIsSUFEOEIsRUFFOUIsU0FGOEIsRUFHOUIsVUFIOEIsRUFJOUIsT0FKOEIsRUFLOUJDLGVBTDhCLENBQWIsQ0FSYyxDQUE5QiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHtleGVjfSBmcm9tICd0ZWVuX3Byb2Nlc3MnO1xuaW1wb3J0IHtQUk9KRUNUX1JPT1R9IGZyb20gJy4uL2hlbHBlcnMnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5cbi8qKlxuICogUGF0aCB0byB0aGUgYGFwcGl1bWAgZXhlY3V0YWJsZS4gU29ydCBvZi5cbiAqL1xuZXhwb3J0IGNvbnN0IEVYRUNVVEFCTEUgPSBwYXRoLmpvaW4oXG4gIFBST0pFQ1RfUk9PVCxcbiAgJ3BhY2thZ2VzJyxcbiAgJ2FwcGl1bScsXG4gICdidWlsZCcsXG4gICdsaWInLFxuICAnbWFpbi5qcycsXG4pO1xuXG4vKipcbiAqIFJ1bnMgdGhlIGBhcHBpdW1gIGV4ZWN1dGFibGUgd2l0aCB0aGUgZ2l2ZW4gYXJncy5cbiAqXG4gKiBJZiB0aGUgcHJvY2VzcyBleGl0cyB3aXRoIGEgbm9uemVybyBjb2RlLCB0aGUgZXJyb3Igd2lsbCBiZSBhXG4gKiBAcGFyYW0ge3N0cmluZ30gYXBwaXVtSG9tZSAtIFBhdGggdG8gYEFQUElVTV9IT01FYFxuICogQHBhcmFtIHtzdHJpbmdbXX0gYXJncyAtIEFyZ3MsIGluY2x1ZGluZyBjb21tYW5kc1xuICogQHJldHVybnMge1Byb21pc2U8VGVlblByb2Nlc3NFeGVjUmVzdWx0Pn1cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcnVuIChhcHBpdW1Ib21lLCBhcmdzKSB7XG4gIGNvbnN0IGVudiA9IHtcbiAgICBBUFBJVU1fSE9NRTogYXBwaXVtSG9tZSxcbiAgICBQQVRIOiBwcm9jZXNzLmVudi5QQVRILFxuICB9O1xuICB0cnkge1xuICAgIC8qKlxuICAgICAqIEB0eXBlIHtUZWVuUHJvY2Vzc0V4ZWNSZXN1bHR9XG4gICAgICovXG4gICAgcmV0dXJuIGF3YWl0IGV4ZWMocHJvY2Vzcy5leGVjUGF0aCwgW0VYRUNVVEFCTEUsIC4uLmFyZ3NdLCB7XG4gICAgICBjd2Q6IFBST0pFQ1RfUk9PVCxcbiAgICAgIGVudixcbiAgICB9KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29uc3Qge3N0ZG91dCwgc3RkZXJyfSA9IC8qKiBAdHlwZSB7VGVlblByb2Nlc3NFeGVjRXJyb3J9ICovKGVycik7XG4gICAgLyoqXG4gICAgICogQHR5cGUge0FwcGl1bVJ1bkVycm9yfVxuICAgICAqL1xuICAgIGNvbnN0IHJ1bkVyciA9IE9iamVjdC5hc3NpZ24oXG4gICAgICBlcnIsXG4gICAgICB7XG4gICAgICAgIG9yaWdpbmFsTWVzc2FnZTogZXJyLm1lc3NhZ2UsXG4gICAgICAgIG1lc3NhZ2U6IGAke3N0ZG91dC50cmltKCl9XFxuXFxuJHtzdGRlcnIudHJpbSgpfWAsXG4gICAgICAgIGNvbW1hbmQ6IGAke3Byb2Nlc3MuZXhlY1BhdGh9ICR7RVhFQ1VUQUJMRX0gJHthcmdzLmpvaW4oJyAnKX1gLFxuICAgICAgICBlbnYsXG4gICAgICAgIGN3ZDogUFJPSkVDVF9ST09ULFxuICAgICAgfSk7XG4gICAgdGhyb3cgcnVuRXJyO1xuICB9XG59XG5cbi8qKlxuICogUnVucyB0aGUgYGFwcGl1bWAgZXhlY3V0YWJsZSB3aXRoIHRoZSBnaXZlbiBhcmdzIGFuZCByZXR1cm5zIGNvbnRlbnRzIG9mIGBTVERPVVRgLlxuICpcbiAqIERvIG5vdCB1c2UgdGhpcyB3aGVuIHRlc3RpbmcgZXJyb3Igb3V0cHV0LCBhcyBpdCB3aWxsIGxpa2VseSBiZSBpbiBgU1RERVJSYC4gVXNlIHtAbGluayBydW5BcHBpdW1SYXd9IGluc3RlYWQuXG4gKi9cbmV4cG9ydCBjb25zdCBydW5BcHBpdW0gPSBfLmN1cnJ5KFxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFwcGl1bUhvbWUgLSBQYXRoIHRvIGBBUFBJVU1fSE9NRWBcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gYXJncyAtIEFyZ3MsIGluY2x1ZGluZyBjb21tYW5kc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmc+fSBDb250ZW50cyBvZiBgYFNURE9VVGBgXG4gICAqL1xuICBhc3luYyAoYXBwaXVtSG9tZSwgYXJncykgPT4ge1xuICAgIGNvbnN0IHtzdGRvdXR9ID0gYXdhaXQgcnVuKGFwcGl1bUhvbWUsIGFyZ3MpO1xuICAgIHJldHVybiBzdGRvdXQ7XG4gIH0sXG4pO1xuXG4vKipcbiAqIFJ1bnMgdGhlIGBhcHBpdW1gIGV4ZWN1dGFibGUgd2l0aCB0aGUgZ2l2ZW4gYXJncyBhbmQgcmV0dXJucyB0aGUgZW50aXJlXG4gKiB7QGxpbmsgVGVlblByb2Nlc3NFeGVjUmVzdWx0fSBvYmplY3QuXG4gKi9cbmV4cG9ydCBjb25zdCBydW5BcHBpdW1SYXcgPSBfLmN1cnJ5KFxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFwcGl1bUhvbWUgLSBQYXRoIHRvIGBBUFBJVU1fSE9NRWBcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gYXJncyAtIEFyZ3MsIGluY2x1ZGluZyBjb21tYW5kc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxUZWVuUHJvY2Vzc0V4ZWNSZXN1bHQ+fSBSYXcgcmVzdWx0IG9mIGBleGVjYFxuICAgKi9cbiAgYXN5bmMgKGFwcGl1bUhvbWUsIGFyZ3MpID0+IGF3YWl0IHJ1bihhcHBpdW1Ib21lLCBhcmdzKSxcbik7XG5cbi8qKlxuICogUnVucyB0aGUgYGFwcGl1bWAgZXhlY3V0YWJsZSB3aXRoIHRoZSBnaXZlbiBhcmdzIGluIEpTT04gbW9kZS5cbiAqIFdpbGwgcmVqZWN0IHdpdGggdGhlIGNvbnRlbnRzIG9mIGBTVERPVVRgICh3aGljaCB3ZXJlIHRvIGJlIHBhc3JlZCkgaWYgcGFyc2luZyBpbnRvIEpTT04gZmFpbHMuXG4gKi9cbmV4cG9ydCBjb25zdCBydW5BcHBpdW1Kc29uID0gXy5jdXJyeShcbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcHBpdW1Ib21lIC0gUGF0aCB0byBgQVBQSVVNX0hPTUVgXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IGFyZ3MgLSBBcmdzLCBpbmNsdWRpbmcgY29tbWFuZHNcbiAgICogQHJldHVybnMge1Byb21pc2U8VGVlblByb2Nlc3NFeGVjUmVzdWx0Pn0gUmF3IHJlc3VsdCBvZiBgZXhlY2BcbiAgICovXG4gIGFzeW5jIChhcHBpdW1Ib21lLCBhcmdzKSA9PiB7XG4gICAgaWYgKCFhcmdzLmluY2x1ZGVzKCctLWpzb24nKSkge1xuICAgICAgYXJncy5wdXNoKCctLWpzb24nKTtcbiAgICB9XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcnVuQXBwaXVtKGFwcGl1bUhvbWUsIGFyZ3MpO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gSlNPTi5wYXJzZShyZXN1bHQpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZXJyLm1lc3NhZ2UgPSBgRXJyb3IgcGFyc2luZyBKU09OLiBDb250ZW50cyBvZiBTVERPVVQ6ICR7cmVzdWx0fWA7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICB9LFxuKTtcblxuLyoqXG4gKiBHaXZlbiBhIHBhdGggdG8gYSBsb2NhbCBleHRlbnNpb24sIGluc3RhbGwgaXQgaW50byBgQVBQSVVNX0hPTUVgIHZpYSBDTEkuXG4gKi9cbmV4cG9ydCBjb25zdCBpbnN0YWxsTG9jYWxFeHRlbnNpb24gPSBfLmN1cnJ5KFxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFwcGl1bUhvbWVcbiAgICogQHBhcmFtIHtpbXBvcnQoJy4uLy4uL2xpYi9leHQtY29uZmlnLWlvJykuRXh0ZW5zaW9uVHlwZX0gdHlwZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aFRvRXh0ZW5zaW9uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPG9iamVjdD59XG4gICAqL1xuICBhc3luYyAoYXBwaXVtSG9tZSwgdHlwZSwgcGF0aFRvRXh0ZW5zaW9uKSA9PlxuICAgIGF3YWl0IHJ1bkFwcGl1bUpzb24oYXBwaXVtSG9tZSwgW1xuICAgICAgdHlwZSxcbiAgICAgICdpbnN0YWxsJyxcbiAgICAgICctLXNvdXJjZScsXG4gICAgICAnbG9jYWwnLFxuICAgICAgcGF0aFRvRXh0ZW5zaW9uLFxuICAgIF0pLFxuKTtcblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgcnVuQXBwaXVtfS5cbiAqIEBwcml2YXRlXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBSdW5BcHBpdW1PcHRpb25zXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtyYXddIC0gV2hldGhlciB0byByZXR1cm4gdGhlIHJhdyBvdXRwdXQgZnJvbSBgdGVlbl9wcm9jZXNzYFxuICovXG5cblxuLyoqXG4gKiBFcnJvciB0aHJvd24gYnkgYWxsIG9mIHRoZSBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlIHdoaWNoIGV4ZWN1dGUgYGFwcGl1bWAuXG4gKiBAdHlwZWRlZiB7RXJyb3IgJiBBcHBpdW1SdW5FcnJvclByb3BzICYgaW1wb3J0KCcuLi8uLi9saWIvY2xpL25wbScpLlRlZW5Qcm9jZXNzRXhlY0Vycm9yUHJvcHN9IEFwcGl1bVJ1bkVycm9yXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi8uLi9saWIvY2xpL25wbScpLlRlZW5Qcm9jZXNzRXhlY1Jlc3VsdH0gVGVlblByb2Nlc3NFeGVjUmVzdWx0XG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi8uLi9saWIvY2xpL25wbScpLlRlZW5Qcm9jZXNzRXhlY0Vycm9yfSBUZWVuUHJvY2Vzc0V4ZWNFcnJvclxuICovXG5cbi8qKlxuICogV3JhcHMgdGhlIGVycm9yIHJldHVybmVkIGJ5IHtAbGluayBleGVjfS5cbiAqIEB0eXBlZGVmIHtPYmplY3R9IEFwcGl1bVJ1bkVycm9yUHJvcHNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBvcmlnaW5hbE1lc3NhZ2UgLSBPcmlnaW5hbCBlcnJvciBtZXNzYWdlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gY29tbWFuZCAtIENvbW1hbmQgdGhhdCB3YXMgcnVuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gZW52IC0gRW52aXJvbm1lbnQgdmFyaWFibGVzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gY3dkIC0gQ3VycmVudCB3b3JraW5nIGRpcmVjdG9yeVxuICovXG4iXSwiZmlsZSI6InRlc3QvY2xpL2NsaS1oZWxwZXJzLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
@@ -1,71 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- require("source-map-support/register");
6
-
7
- var _extensionConfig = require("../../lib/extension-config");
8
-
9
- var _driverConfig = _interopRequireDefault(require("../../lib/driver-config"));
10
-
11
- var _driverCommand = _interopRequireDefault(require("../../lib/cli/driver-command"));
12
-
13
- var _sinon = _interopRequireDefault(require("sinon"));
14
-
15
- describe('DriverCommand', function () {
16
- const config = new _driverConfig.default(_extensionConfig.DEFAULT_APPIUM_HOME);
17
- const driver = 'fake';
18
- const pkgName = '@appium/fake-driver';
19
- config.installedExtensions = {
20
- [driver]: {
21
- version: '1.0.0',
22
- pkgName
23
- }
24
- };
25
- const dc = new _driverCommand.default({
26
- config,
27
- json: true
28
- });
29
- describe('#checkForExtensionUpdate', function () {
30
- let npmMock;
31
- beforeEach(function () {
32
- npmMock = _sinon.default.mock(dc.npm);
33
- });
34
-
35
- function setupDriverUpdate(curVersion, latestVersion, latestSafeVersion) {
36
- npmMock.expects('getLatestVersion').once().withExactArgs(pkgName).returns(latestVersion);
37
- npmMock.expects('getLatestSafeUpgradeVersion').once().withExactArgs(pkgName, curVersion).returns(latestSafeVersion);
38
- }
39
-
40
- it('should not return an unsafe update if it is same as safe update', async function () {
41
- setupDriverUpdate('1.0.0', '1.1.0', '1.1.0');
42
- await dc.checkForExtensionUpdate('fake').should.eventually.eql({
43
- current: '1.0.0',
44
- safeUpdate: '1.1.0',
45
- unsafeUpdate: null
46
- });
47
- npmMock.verify();
48
- });
49
- it('should not return a safe update if there is not one', async function () {
50
- setupDriverUpdate('1.0.0', '2.0.0', null);
51
- await dc.checkForExtensionUpdate('fake').should.eventually.eql({
52
- current: '1.0.0',
53
- safeUpdate: null,
54
- unsafeUpdate: '2.0.0'
55
- });
56
- npmMock.verify();
57
- });
58
- it('should return both safe and unsafe update', async function () {
59
- setupDriverUpdate('1.0.0', '2.0.0', '1.5.3');
60
- await dc.checkForExtensionUpdate('fake').should.eventually.eql({
61
- current: '1.0.0',
62
- safeUpdate: '1.5.3',
63
- unsafeUpdate: '2.0.0'
64
- });
65
- npmMock.verify();
66
- });
67
- });
68
- });require('source-map-support').install();
69
-
70
-
71
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvY2xpL2NsaS1zcGVjcy5qcyJdLCJuYW1lcyI6WyJkZXNjcmliZSIsImNvbmZpZyIsIkRyaXZlckNvbmZpZyIsIkRFRkFVTFRfQVBQSVVNX0hPTUUiLCJkcml2ZXIiLCJwa2dOYW1lIiwiaW5zdGFsbGVkRXh0ZW5zaW9ucyIsInZlcnNpb24iLCJkYyIsIkRyaXZlckNvbW1hbmQiLCJqc29uIiwibnBtTW9jayIsImJlZm9yZUVhY2giLCJzaW5vbiIsIm1vY2siLCJucG0iLCJzZXR1cERyaXZlclVwZGF0ZSIsImN1clZlcnNpb24iLCJsYXRlc3RWZXJzaW9uIiwibGF0ZXN0U2FmZVZlcnNpb24iLCJleHBlY3RzIiwib25jZSIsIndpdGhFeGFjdEFyZ3MiLCJyZXR1cm5zIiwiaXQiLCJjaGVja0ZvckV4dGVuc2lvblVwZGF0ZSIsInNob3VsZCIsImV2ZW50dWFsbHkiLCJlcWwiLCJjdXJyZW50Iiwic2FmZVVwZGF0ZSIsInVuc2FmZVVwZGF0ZSIsInZlcmlmeSJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBR0FBLFFBQVEsQ0FBQyxlQUFELEVBQWtCLFlBQVk7QUFDcEMsUUFBTUMsTUFBTSxHQUFHLElBQUlDLHFCQUFKLENBQWlCQyxvQ0FBakIsQ0FBZjtBQUNBLFFBQU1DLE1BQU0sR0FBRyxNQUFmO0FBQ0EsUUFBTUMsT0FBTyxHQUFHLHFCQUFoQjtBQUNBSixFQUFBQSxNQUFNLENBQUNLLG1CQUFQLEdBQTZCO0FBQUMsS0FBQ0YsTUFBRCxHQUFVO0FBQUNHLE1BQUFBLE9BQU8sRUFBRSxPQUFWO0FBQW1CRixNQUFBQTtBQUFuQjtBQUFYLEdBQTdCO0FBQ0EsUUFBTUcsRUFBRSxHQUFHLElBQUlDLHNCQUFKLENBQWtCO0FBQUNSLElBQUFBLE1BQUQ7QUFBU1MsSUFBQUEsSUFBSSxFQUFFO0FBQWYsR0FBbEIsQ0FBWDtBQUVBVixFQUFBQSxRQUFRLENBQUMsMEJBQUQsRUFBNkIsWUFBWTtBQUMvQyxRQUFJVyxPQUFKO0FBRUFDLElBQUFBLFVBQVUsQ0FBQyxZQUFZO0FBQ3JCRCxNQUFBQSxPQUFPLEdBQUdFLGVBQU1DLElBQU4sQ0FBV04sRUFBRSxDQUFDTyxHQUFkLENBQVY7QUFDRCxLQUZTLENBQVY7O0FBSUEsYUFBU0MsaUJBQVQsQ0FBNEJDLFVBQTVCLEVBQXdDQyxhQUF4QyxFQUF1REMsaUJBQXZELEVBQTBFO0FBQ3hFUixNQUFBQSxPQUFPLENBQUNTLE9BQVIsQ0FBZ0Isa0JBQWhCLEVBQ0dDLElBREgsR0FFR0MsYUFGSCxDQUVpQmpCLE9BRmpCLEVBR0drQixPQUhILENBR1dMLGFBSFg7QUFJQVAsTUFBQUEsT0FBTyxDQUFDUyxPQUFSLENBQWdCLDZCQUFoQixFQUNHQyxJQURILEdBRUdDLGFBRkgsQ0FFaUJqQixPQUZqQixFQUUwQlksVUFGMUIsRUFHR00sT0FISCxDQUdXSixpQkFIWDtBQUlEOztBQUVESyxJQUFBQSxFQUFFLENBQUMsaUVBQUQsRUFBb0Usa0JBQWtCO0FBQ3RGUixNQUFBQSxpQkFBaUIsQ0FBQyxPQUFELEVBQVUsT0FBVixFQUFtQixPQUFuQixDQUFqQjtBQUNBLFlBQU1SLEVBQUUsQ0FBQ2lCLHVCQUFILENBQTJCLE1BQTNCLEVBQW1DQyxNQUFuQyxDQUEwQ0MsVUFBMUMsQ0FBcURDLEdBQXJELENBQXlEO0FBQzdEQyxRQUFBQSxPQUFPLEVBQUUsT0FEb0Q7QUFFN0RDLFFBQUFBLFVBQVUsRUFBRSxPQUZpRDtBQUc3REMsUUFBQUEsWUFBWSxFQUFFO0FBSCtDLE9BQXpELENBQU47QUFLQXBCLE1BQUFBLE9BQU8sQ0FBQ3FCLE1BQVI7QUFDRCxLQVJDLENBQUY7QUFVQVIsSUFBQUEsRUFBRSxDQUFDLHFEQUFELEVBQXdELGtCQUFrQjtBQUMxRVIsTUFBQUEsaUJBQWlCLENBQUMsT0FBRCxFQUFVLE9BQVYsRUFBbUIsSUFBbkIsQ0FBakI7QUFDQSxZQUFNUixFQUFFLENBQUNpQix1QkFBSCxDQUEyQixNQUEzQixFQUFtQ0MsTUFBbkMsQ0FBMENDLFVBQTFDLENBQXFEQyxHQUFyRCxDQUF5RDtBQUM3REMsUUFBQUEsT0FBTyxFQUFFLE9BRG9EO0FBRTdEQyxRQUFBQSxVQUFVLEVBQUUsSUFGaUQ7QUFHN0RDLFFBQUFBLFlBQVksRUFBRTtBQUgrQyxPQUF6RCxDQUFOO0FBS0FwQixNQUFBQSxPQUFPLENBQUNxQixNQUFSO0FBQ0QsS0FSQyxDQUFGO0FBVUFSLElBQUFBLEVBQUUsQ0FBQywyQ0FBRCxFQUE4QyxrQkFBa0I7QUFDaEVSLE1BQUFBLGlCQUFpQixDQUFDLE9BQUQsRUFBVSxPQUFWLEVBQW1CLE9BQW5CLENBQWpCO0FBQ0EsWUFBTVIsRUFBRSxDQUFDaUIsdUJBQUgsQ0FBMkIsTUFBM0IsRUFBbUNDLE1BQW5DLENBQTBDQyxVQUExQyxDQUFxREMsR0FBckQsQ0FBeUQ7QUFDN0RDLFFBQUFBLE9BQU8sRUFBRSxPQURvRDtBQUU3REMsUUFBQUEsVUFBVSxFQUFFLE9BRmlEO0FBRzdEQyxRQUFBQSxZQUFZLEVBQUU7QUFIK0MsT0FBekQsQ0FBTjtBQUtBcEIsTUFBQUEsT0FBTyxDQUFDcUIsTUFBUjtBQUNELEtBUkMsQ0FBRjtBQVNELEdBL0NPLENBQVI7QUFnREQsQ0F2RE8sQ0FBUiIsInNvdXJjZXNDb250ZW50IjpbIi8vIHRyYW5zcGlsZTptb2NoYVxuXG5pbXBvcnQgeyBERUZBVUxUX0FQUElVTV9IT01FIH0gZnJvbSAnLi4vLi4vbGliL2V4dGVuc2lvbi1jb25maWcnO1xuaW1wb3J0IERyaXZlckNvbmZpZyBmcm9tICcuLi8uLi9saWIvZHJpdmVyLWNvbmZpZyc7XG5pbXBvcnQgRHJpdmVyQ29tbWFuZCBmcm9tICcuLi8uLi9saWIvY2xpL2RyaXZlci1jb21tYW5kJztcbmltcG9ydCBzaW5vbiBmcm9tICdzaW5vbic7XG5cblxuZGVzY3JpYmUoJ0RyaXZlckNvbW1hbmQnLCBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IGNvbmZpZyA9IG5ldyBEcml2ZXJDb25maWcoREVGQVVMVF9BUFBJVU1fSE9NRSk7XG4gIGNvbnN0IGRyaXZlciA9ICdmYWtlJztcbiAgY29uc3QgcGtnTmFtZSA9ICdAYXBwaXVtL2Zha2UtZHJpdmVyJztcbiAgY29uZmlnLmluc3RhbGxlZEV4dGVuc2lvbnMgPSB7W2RyaXZlcl06IHt2ZXJzaW9uOiAnMS4wLjAnLCBwa2dOYW1lfX07XG4gIGNvbnN0IGRjID0gbmV3IERyaXZlckNvbW1hbmQoe2NvbmZpZywganNvbjogdHJ1ZX0pO1xuXG4gIGRlc2NyaWJlKCcjY2hlY2tGb3JFeHRlbnNpb25VcGRhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgbGV0IG5wbU1vY2s7XG5cbiAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIG5wbU1vY2sgPSBzaW5vbi5tb2NrKGRjLm5wbSk7XG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiBzZXR1cERyaXZlclVwZGF0ZSAoY3VyVmVyc2lvbiwgbGF0ZXN0VmVyc2lvbiwgbGF0ZXN0U2FmZVZlcnNpb24pIHtcbiAgICAgIG5wbU1vY2suZXhwZWN0cygnZ2V0TGF0ZXN0VmVyc2lvbicpXG4gICAgICAgIC5vbmNlKClcbiAgICAgICAgLndpdGhFeGFjdEFyZ3MocGtnTmFtZSlcbiAgICAgICAgLnJldHVybnMobGF0ZXN0VmVyc2lvbik7XG4gICAgICBucG1Nb2NrLmV4cGVjdHMoJ2dldExhdGVzdFNhZmVVcGdyYWRlVmVyc2lvbicpXG4gICAgICAgIC5vbmNlKClcbiAgICAgICAgLndpdGhFeGFjdEFyZ3MocGtnTmFtZSwgY3VyVmVyc2lvbilcbiAgICAgICAgLnJldHVybnMobGF0ZXN0U2FmZVZlcnNpb24pO1xuICAgIH1cblxuICAgIGl0KCdzaG91bGQgbm90IHJldHVybiBhbiB1bnNhZmUgdXBkYXRlIGlmIGl0IGlzIHNhbWUgYXMgc2FmZSB1cGRhdGUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBzZXR1cERyaXZlclVwZGF0ZSgnMS4wLjAnLCAnMS4xLjAnLCAnMS4xLjAnKTtcbiAgICAgIGF3YWl0IGRjLmNoZWNrRm9yRXh0ZW5zaW9uVXBkYXRlKCdmYWtlJykuc2hvdWxkLmV2ZW50dWFsbHkuZXFsKHtcbiAgICAgICAgY3VycmVudDogJzEuMC4wJyxcbiAgICAgICAgc2FmZVVwZGF0ZTogJzEuMS4wJyxcbiAgICAgICAgdW5zYWZlVXBkYXRlOiBudWxsLFxuICAgICAgfSk7XG4gICAgICBucG1Nb2NrLnZlcmlmeSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBub3QgcmV0dXJuIGEgc2FmZSB1cGRhdGUgaWYgdGhlcmUgaXMgbm90IG9uZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIHNldHVwRHJpdmVyVXBkYXRlKCcxLjAuMCcsICcyLjAuMCcsIG51bGwpO1xuICAgICAgYXdhaXQgZGMuY2hlY2tGb3JFeHRlbnNpb25VcGRhdGUoJ2Zha2UnKS5zaG91bGQuZXZlbnR1YWxseS5lcWwoe1xuICAgICAgICBjdXJyZW50OiAnMS4wLjAnLFxuICAgICAgICBzYWZlVXBkYXRlOiBudWxsLFxuICAgICAgICB1bnNhZmVVcGRhdGU6ICcyLjAuMCcsXG4gICAgICB9KTtcbiAgICAgIG5wbU1vY2sudmVyaWZ5KCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBib3RoIHNhZmUgYW5kIHVuc2FmZSB1cGRhdGUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBzZXR1cERyaXZlclVwZGF0ZSgnMS4wLjAnLCAnMi4wLjAnLCAnMS41LjMnKTtcbiAgICAgIGF3YWl0IGRjLmNoZWNrRm9yRXh0ZW5zaW9uVXBkYXRlKCdmYWtlJykuc2hvdWxkLmV2ZW50dWFsbHkuZXFsKHtcbiAgICAgICAgY3VycmVudDogJzEuMC4wJyxcbiAgICAgICAgc2FmZVVwZGF0ZTogJzEuNS4zJyxcbiAgICAgICAgdW5zYWZlVXBkYXRlOiAnMi4wLjAnLFxuICAgICAgfSk7XG4gICAgICBucG1Nb2NrLnZlcmlmeSgpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl0sImZpbGUiOiJ0ZXN0L2NsaS9jbGktc3BlY3MuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==
@@ -1,27 +0,0 @@
1
- {
2
- "name": "test-driver",
3
- "version": "1.0",
4
- "private": true,
5
- "appium": {
6
- "driverName": "test",
7
- "automationName": "Test",
8
- "platformNames": [
9
- "Test"
10
- ],
11
- "mainClass": "TestDriver",
12
- "schema": {
13
- "type": "object",
14
- "properties": {
15
- "mcmonkey-mcbean": {
16
- "type": "string",
17
- "appiumCliIgnored": true
18
- },
19
- "oliver-boliver": {
20
- "type": "number",
21
- "appiumDeprecated": true,
22
- "description": "funkytelechy"
23
- }
24
- }
25
- }
26
- }
27
- }