appium 2.0.0-beta.25 → 2.0.0-beta.28

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 (191) hide show
  1. package/build/lib/appium.d.ts +215 -0
  2. package/build/lib/appium.d.ts.map +1 -0
  3. package/build/lib/appium.js +94 -101
  4. package/build/lib/cli/args.d.ts +20 -0
  5. package/build/lib/cli/args.d.ts.map +1 -0
  6. package/build/lib/cli/args.js +19 -39
  7. package/build/lib/cli/driver-command.d.ts +36 -0
  8. package/build/lib/cli/driver-command.d.ts.map +1 -0
  9. package/build/lib/cli/driver-command.js +10 -13
  10. package/build/lib/cli/extension-command.d.ts +345 -0
  11. package/build/lib/cli/extension-command.d.ts.map +1 -0
  12. package/build/lib/cli/extension-command.js +117 -94
  13. package/build/lib/cli/extension.d.ts +14 -0
  14. package/build/lib/cli/extension.d.ts.map +1 -0
  15. package/build/lib/cli/extension.js +14 -22
  16. package/build/lib/cli/parser.d.ts +79 -0
  17. package/build/lib/cli/parser.d.ts.map +1 -0
  18. package/build/lib/cli/parser.js +9 -19
  19. package/build/lib/cli/plugin-command.d.ts +39 -0
  20. package/build/lib/cli/plugin-command.d.ts.map +1 -0
  21. package/build/lib/cli/plugin-command.js +9 -14
  22. package/build/lib/cli/utils.d.ts +29 -0
  23. package/build/lib/cli/utils.d.ts.map +1 -0
  24. package/build/lib/cli/utils.js +2 -4
  25. package/build/lib/config-file.d.ts +100 -0
  26. package/build/lib/config-file.d.ts.map +1 -0
  27. package/build/lib/config-file.js +2 -4
  28. package/build/lib/config.d.ts +40 -0
  29. package/build/lib/config.d.ts.map +1 -0
  30. package/build/lib/config.js +8 -7
  31. package/build/lib/constants.d.ts +48 -0
  32. package/build/lib/constants.d.ts.map +1 -0
  33. package/build/lib/constants.js +60 -0
  34. package/build/lib/extension/driver-config.d.ts +84 -0
  35. package/build/lib/extension/driver-config.d.ts.map +1 -0
  36. package/build/lib/extension/driver-config.js +190 -0
  37. package/build/lib/extension/extension-config.d.ts +170 -0
  38. package/build/lib/extension/extension-config.d.ts.map +1 -0
  39. package/build/lib/extension/extension-config.js +297 -0
  40. package/build/lib/extension/index.d.ts +39 -0
  41. package/build/lib/extension/index.d.ts.map +1 -0
  42. package/build/lib/extension/index.js +77 -0
  43. package/build/lib/extension/manifest.d.ts +174 -0
  44. package/build/lib/extension/manifest.d.ts.map +1 -0
  45. package/build/lib/extension/manifest.js +246 -0
  46. package/build/lib/extension/package-changed.d.ts +11 -0
  47. package/build/lib/extension/package-changed.d.ts.map +1 -0
  48. package/build/lib/extension/package-changed.js +68 -0
  49. package/build/lib/extension/plugin-config.d.ts +62 -0
  50. package/build/lib/extension/plugin-config.d.ts.map +1 -0
  51. package/build/lib/extension/plugin-config.js +87 -0
  52. package/build/lib/grid-register.d.ts +10 -0
  53. package/build/lib/grid-register.d.ts.map +1 -0
  54. package/build/lib/grid-register.js +2 -4
  55. package/build/lib/logger.d.ts +3 -0
  56. package/build/lib/logger.d.ts.map +1 -0
  57. package/build/lib/logger.js +2 -4
  58. package/build/lib/logsink.d.ts +4 -0
  59. package/build/lib/logsink.d.ts.map +1 -0
  60. package/build/lib/logsink.js +2 -4
  61. package/build/lib/main.d.ts +51 -0
  62. package/build/lib/main.d.ts.map +1 -0
  63. package/build/lib/main.js +40 -68
  64. package/build/lib/schema/arg-spec.d.ts +143 -0
  65. package/build/lib/schema/arg-spec.d.ts.map +1 -0
  66. package/build/lib/schema/arg-spec.js +11 -14
  67. package/build/lib/schema/cli-args.d.ts +19 -0
  68. package/build/lib/schema/cli-args.d.ts.map +1 -0
  69. package/build/lib/schema/cli-args.js +2 -4
  70. package/build/lib/schema/cli-transformers.d.ts +5 -0
  71. package/build/lib/schema/cli-transformers.d.ts.map +1 -0
  72. package/build/lib/schema/cli-transformers.js +2 -4
  73. package/build/lib/schema/index.d.ts +3 -0
  74. package/build/lib/schema/index.d.ts.map +1 -0
  75. package/build/lib/schema/index.js +2 -4
  76. package/build/lib/schema/keywords.d.ts +24 -0
  77. package/build/lib/schema/keywords.d.ts.map +1 -0
  78. package/build/lib/schema/keywords.js +2 -4
  79. package/build/lib/schema/schema.d.ts +259 -0
  80. package/build/lib/schema/schema.d.ts.map +1 -0
  81. package/build/lib/schema/schema.js +57 -39
  82. package/build/lib/utils.d.ts +66 -0
  83. package/build/lib/utils.d.ts.map +1 -0
  84. package/build/lib/utils.js +6 -35
  85. package/build/tsconfig.tsbuildinfo +1 -0
  86. package/lib/appium.js +188 -117
  87. package/lib/cli/args.js +19 -24
  88. package/lib/cli/driver-command.js +19 -8
  89. package/lib/cli/extension-command.js +314 -184
  90. package/lib/cli/extension.js +18 -16
  91. package/lib/cli/parser.js +7 -16
  92. package/lib/cli/plugin-command.js +16 -7
  93. package/lib/cli/utils.js +1 -1
  94. package/lib/config-file.js +6 -7
  95. package/lib/config.js +17 -12
  96. package/lib/constants.js +78 -0
  97. package/lib/extension/driver-config.js +249 -0
  98. package/lib/extension/extension-config.js +458 -0
  99. package/lib/extension/index.js +102 -0
  100. package/lib/extension/manifest.js +486 -0
  101. package/lib/extension/package-changed.js +63 -0
  102. package/lib/extension/plugin-config.js +113 -0
  103. package/lib/grid-register.js +4 -4
  104. package/lib/logsink.js +4 -0
  105. package/lib/main.js +54 -92
  106. package/lib/schema/arg-spec.js +11 -7
  107. package/lib/schema/cli-args.js +1 -1
  108. package/lib/schema/cli-transformers.js +0 -1
  109. package/lib/schema/keywords.js +1 -2
  110. package/lib/schema/schema.js +62 -31
  111. package/lib/utils.js +48 -45
  112. package/package.json +30 -24
  113. package/{postinstall.js → scripts/postinstall.js} +1 -1
  114. package/types/appium-manifest.d.ts +61 -0
  115. package/types/cli.d.ts +134 -0
  116. package/types/extension.d.ts +56 -0
  117. package/types/external-manifest.d.ts +58 -0
  118. package/types/index.d.ts +7 -0
  119. package/bin/ios-webkit-debug-proxy-launcher.js +0 -71
  120. package/build/check-npm-pack-files.js +0 -23
  121. package/build/commands-yml/parse.js +0 -319
  122. package/build/commands-yml/validator.js +0 -130
  123. package/build/index.js +0 -19
  124. package/build/lib/appium-config.schema.json +0 -0
  125. package/build/lib/cli/npm.js +0 -220
  126. package/build/lib/driver-config.js +0 -100
  127. package/build/lib/drivers.js +0 -100
  128. package/build/lib/ext-config-io.js +0 -165
  129. package/build/lib/extension-config.js +0 -320
  130. package/build/lib/plugin-config.js +0 -69
  131. package/build/lib/plugins.js +0 -18
  132. package/build/lib/schema/appium-config-schema.js +0 -253
  133. package/build/postinstall.js +0 -90
  134. package/build/test/cli/cli-e2e-specs.js +0 -221
  135. package/build/test/cli/cli-helpers.js +0 -86
  136. package/build/test/cli/cli-specs.js +0 -71
  137. package/build/test/cli/fixtures/test-driver/package.json +0 -27
  138. package/build/test/cli/schema-args-specs.js +0 -48
  139. package/build/test/cli/schema-e2e-specs.js +0 -47
  140. package/build/test/config-e2e-specs.js +0 -112
  141. package/build/test/config-file-e2e-specs.js +0 -191
  142. package/build/test/config-file-specs.js +0 -281
  143. package/build/test/config-specs.js +0 -258
  144. package/build/test/driver-e2e-specs.js +0 -435
  145. package/build/test/driver-specs.js +0 -386
  146. package/build/test/ext-config-io-specs.js +0 -181
  147. package/build/test/extension-config-specs.js +0 -365
  148. package/build/test/fixtures/allow-feat.txt +0 -5
  149. package/build/test/fixtures/caps.json +0 -3
  150. package/build/test/fixtures/config/allow-insecure.txt +0 -3
  151. package/build/test/fixtures/config/appium.config.bad-nodeconfig.json +0 -5
  152. package/build/test/fixtures/config/appium.config.bad.json +0 -32
  153. package/build/test/fixtures/config/appium.config.ext-good.json +0 -9
  154. package/build/test/fixtures/config/appium.config.ext-unknown-props.json +0 -10
  155. package/build/test/fixtures/config/appium.config.good.js +0 -40
  156. package/build/test/fixtures/config/appium.config.good.json +0 -33
  157. package/build/test/fixtures/config/appium.config.good.yaml +0 -30
  158. package/build/test/fixtures/config/appium.config.invalid.json +0 -31
  159. package/build/test/fixtures/config/appium.config.security-array.json +0 -5
  160. package/build/test/fixtures/config/appium.config.security-delimited.json +0 -5
  161. package/build/test/fixtures/config/appium.config.security-path.json +0 -5
  162. package/build/test/fixtures/config/driver-fake.config.json +0 -8
  163. package/build/test/fixtures/config/nodeconfig.json +0 -3
  164. package/build/test/fixtures/config/plugin-fake.config.json +0 -0
  165. package/build/test/fixtures/default-args.js +0 -35
  166. package/build/test/fixtures/deny-feat.txt +0 -5
  167. package/build/test/fixtures/driver.schema.js +0 -20
  168. package/build/test/fixtures/extensions.yaml +0 -27
  169. package/build/test/fixtures/flattened-schema.js +0 -532
  170. package/build/test/fixtures/plugin.schema.js +0 -20
  171. package/build/test/fixtures/schema-with-extensions.js +0 -28
  172. package/build/test/grid-register-specs.js +0 -74
  173. package/build/test/helpers.js +0 -75
  174. package/build/test/logger-specs.js +0 -76
  175. package/build/test/npm-specs.js +0 -20
  176. package/build/test/parser-specs.js +0 -319
  177. package/build/test/plugin-e2e-specs.js +0 -316
  178. package/build/test/schema/arg-spec-specs.js +0 -70
  179. package/build/test/schema/cli-args-specs.js +0 -408
  180. package/build/test/schema/schema-specs.js +0 -407
  181. package/build/test/utils-specs.js +0 -288
  182. package/lib/cli/npm.js +0 -251
  183. package/lib/driver-config.js +0 -101
  184. package/lib/drivers.js +0 -84
  185. package/lib/ext-config-io.js +0 -287
  186. package/lib/extension-config.js +0 -366
  187. package/lib/plugin-config.js +0 -63
  188. package/lib/plugins.js +0 -13
  189. package/lib/schema/appium-config-schema.js +0 -287
  190. package/types/appium-config.d.ts +0 -197
  191. package/types/types.d.ts +0 -206
@@ -13,18 +13,20 @@ var _driverCommand = _interopRequireDefault(require("./driver-command"));
13
13
 
14
14
  var _pluginCommand = _interopRequireDefault(require("./plugin-command"));
15
15
 
16
- var _driverConfig = _interopRequireDefault(require("../driver-config"));
17
-
18
- var _pluginConfig = _interopRequireDefault(require("../plugin-config"));
19
-
20
- var _extensionConfig = require("../extension-config");
16
+ var _constants = require("../constants");
21
17
 
22
18
  var _utils = require("./utils");
23
19
 
24
- var _args = require("./args");
20
+ const commandClasses = Object.freeze({
21
+ [_constants.DRIVER_TYPE]: _driverCommand.default,
22
+ [_constants.PLUGIN_TYPE]: _pluginCommand.default
23
+ });
25
24
 
26
- async function runExtensionCommand(args, type, configObject) {
25
+ async function runExtensionCommand(args, configObject) {
27
26
  let jsonResult = null;
27
+ const {
28
+ extensionType: type
29
+ } = configObject;
28
30
  const extCmd = args[`${type}Command`];
29
31
 
30
32
  if (!extCmd) {
@@ -42,23 +44,15 @@ async function runExtensionCommand(args, type, configObject) {
42
44
 
43
45
  const logFn = msg => (0, _utils.log)(json, msg);
44
46
 
45
- let config;
46
-
47
- if (configObject) {
48
- config = configObject;
49
- config.log = logFn;
50
- } else {
51
- config = (type === _extensionConfig.DRIVER_TYPE ? _driverConfig.default : _pluginConfig.default).getInstance(_args.APPIUM_HOME, logFn);
52
- }
53
-
54
- const CommandClass = type === _extensionConfig.DRIVER_TYPE ? _driverCommand.default : _pluginCommand.default;
47
+ let config = configObject;
48
+ config.log = logFn;
49
+ const CommandClass = commandClasses[type];
55
50
  const cmd = new CommandClass({
56
51
  config,
57
52
  json
58
53
  });
59
54
 
60
55
  try {
61
- await config.read();
62
56
  jsonResult = await cmd.execute(args);
63
57
  } catch (err) {
64
58
  if (suppressOutput) {
@@ -73,7 +67,5 @@ async function runExtensionCommand(args, type, configObject) {
73
67
  }
74
68
 
75
69
  return jsonResult;
76
- }require('source-map-support').install();
77
-
78
-
79
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jbGkvZXh0ZW5zaW9uLmpzIl0sIm5hbWVzIjpbInJ1bkV4dGVuc2lvbkNvbW1hbmQiLCJhcmdzIiwidHlwZSIsImNvbmZpZ09iamVjdCIsImpzb25SZXN1bHQiLCJleHRDbWQiLCJUeXBlRXJyb3IiLCJqc29uIiwic3VwcHJlc3NPdXRwdXQiLCJsb2dGbiIsIm1zZyIsImNvbmZpZyIsImxvZyIsIkRSSVZFUl9UWVBFIiwiRHJpdmVyQ29uZmlnIiwiUGx1Z2luQ29uZmlnIiwiZ2V0SW5zdGFuY2UiLCJBUFBJVU1fSE9NRSIsIkNvbW1hbmRDbGFzcyIsIkRyaXZlckNvbW1hbmQiLCJQbHVnaW5Db21tYW5kIiwiY21kIiwicmVhZCIsImV4ZWN1dGUiLCJlcnIiLCJjb25zb2xlIiwiSlNPTiIsInN0cmluZ2lmeSIsIkpTT05fU1BBQ0VTIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUVBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQVdBLGVBQWVBLG1CQUFmLENBQW9DQyxJQUFwQyxFQUEwQ0MsSUFBMUMsRUFBZ0RDLFlBQWhELEVBQThEO0FBRzVELE1BQUlDLFVBQVUsR0FBRyxJQUFqQjtBQUNBLFFBQU1DLE1BQU0sR0FBR0osSUFBSSxDQUFFLEdBQUVDLElBQUssU0FBVCxDQUFuQjs7QUFDQSxNQUFJLENBQUNHLE1BQUwsRUFBYTtBQUNYLFVBQU0sSUFBSUMsU0FBSixDQUFlLGVBQWNKLElBQUssOENBQWxDLENBQU47QUFDRDs7QUFDRCxNQUFJO0FBQUNLLElBQUFBLElBQUQ7QUFBT0MsSUFBQUE7QUFBUCxNQUF5QlAsSUFBN0I7O0FBQ0EsTUFBSU8sY0FBSixFQUFvQjtBQUNsQkQsSUFBQUEsSUFBSSxHQUFHLElBQVA7QUFDRDs7QUFDRCxRQUFNRSxLQUFLLEdBQUlDLEdBQUQsSUFBUyxnQkFBSUgsSUFBSixFQUFVRyxHQUFWLENBQXZCOztBQUNBLE1BQUlDLE1BQUo7O0FBQ0EsTUFBSVIsWUFBSixFQUFrQjtBQUNoQlEsSUFBQUEsTUFBTSxHQUFHUixZQUFUO0FBQ0FRLElBQUFBLE1BQU0sQ0FBQ0MsR0FBUCxHQUFhSCxLQUFiO0FBQ0QsR0FIRCxNQUdPO0FBQ0xFLElBQUFBLE1BQU0sR0FBRyxDQUFDVCxJQUFJLEtBQUtXLDRCQUFULEdBQXVCQyxxQkFBdkIsR0FBc0NDLHFCQUF2QyxFQUFxREMsV0FBckQsQ0FBaUVDLGlCQUFqRSxFQUE4RVIsS0FBOUUsQ0FBVDtBQUNEOztBQUNELFFBQU1TLFlBQVksR0FBR2hCLElBQUksS0FBS1csNEJBQVQsR0FBdUJNLHNCQUF2QixHQUF1Q0Msc0JBQTVEO0FBQ0EsUUFBTUMsR0FBRyxHQUFHLElBQUlILFlBQUosQ0FBaUI7QUFBQ1AsSUFBQUEsTUFBRDtBQUFTSixJQUFBQTtBQUFULEdBQWpCLENBQVo7O0FBQ0EsTUFBSTtBQUNGLFVBQU1JLE1BQU0sQ0FBQ1csSUFBUCxFQUFOO0FBQ0FsQixJQUFBQSxVQUFVLEdBQUcsTUFBTWlCLEdBQUcsQ0FBQ0UsT0FBSixDQUFZdEIsSUFBWixDQUFuQjtBQUNELEdBSEQsQ0FHRSxPQUFPdUIsR0FBUCxFQUFZO0FBR1osUUFBSWhCLGNBQUosRUFBb0I7QUFDbEIsWUFBTWdCLEdBQU47QUFDRDs7QUFDRCwyQkFBV2pCLElBQVgsRUFBaUJpQixHQUFqQjtBQUNEOztBQUVELE1BQUlqQixJQUFJLElBQUksQ0FBQ0MsY0FBYixFQUE2QjtBQUMzQmlCLElBQUFBLE9BQU8sQ0FBQ2IsR0FBUixDQUFZYyxJQUFJLENBQUNDLFNBQUwsQ0FBZXZCLFVBQWYsRUFBMkIsSUFBM0IsRUFBaUN3QixrQkFBakMsQ0FBWjtBQUNEOztBQUVELFNBQU94QixVQUFQO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zb2xlICovXG5cbmltcG9ydCBEcml2ZXJDb21tYW5kIGZyb20gJy4vZHJpdmVyLWNvbW1hbmQnO1xuaW1wb3J0IFBsdWdpbkNvbW1hbmQgZnJvbSAnLi9wbHVnaW4tY29tbWFuZCc7XG5pbXBvcnQgRHJpdmVyQ29uZmlnIGZyb20gJy4uL2RyaXZlci1jb25maWcnO1xuaW1wb3J0IFBsdWdpbkNvbmZpZyBmcm9tICcuLi9wbHVnaW4tY29uZmlnJztcbmltcG9ydCB7IERSSVZFUl9UWVBFIH0gZnJvbSAnLi4vZXh0ZW5zaW9uLWNvbmZpZyc7XG5pbXBvcnQgeyBlcnJBbmRRdWl0LCBsb2csIEpTT05fU1BBQ0VTIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBBUFBJVU1fSE9NRSB9IGZyb20gJy4vYXJncyc7XG5cbi8qKlxuICogUnVuIGEgc3ViY29tbWFuZCBvZiB0aGUgJ2FwcGl1bSBkcml2ZXInIHR5cGUuIEVhY2ggc3ViY29tbWFuZCBoYXMgaXRzIG93biBzZXQgb2YgYXJndW1lbnRzIHdoaWNoXG4gKiBjYW4gYmUgcmVwcmVzZW50ZWQgYXMgYSBKUyBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGFyZ3MgLSBKUyBvYmplY3Qgd2hlcmUgdGhlIGtleSBpcyB0aGUgcGFyYW1ldGVyIG5hbWUgKGFzIGRlZmluZWQgaW5cbiAqIGRyaXZlci1wYXJzZXIuanMpXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi4vZXh0LWNvbmZpZy1pbycpLkV4dGVuc2lvblR5cGV9IHR5cGUgLSBFeHRlbnNpb24gdHlwZVxuICogQG9hcmFtIHtFeHRlbnNpb25Db25maWd9IFtjb25maWdPYmplY3RdIC0gRXh0ZW5zaW9uIGNvbmZpZyBvYmplY3QsIGlmIHdlIGhhdmUgb25lXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJ1bkV4dGVuc2lvbkNvbW1hbmQgKGFyZ3MsIHR5cGUsIGNvbmZpZ09iamVjdCkge1xuICAvLyBUT0RPIGRyaXZlciBjb25maWcgZmlsZSBzaG91bGQgYmUgbG9ja2VkIHdoaWxlIGFueSBvZiB0aGVzZSBjb21tYW5kcyBhcmVcbiAgLy8gcnVubmluZyB0byBwcmV2ZW50IHdlaXJkIHNpdHVhdGlvbnNcbiAgbGV0IGpzb25SZXN1bHQgPSBudWxsO1xuICBjb25zdCBleHRDbWQgPSBhcmdzW2Ake3R5cGV9Q29tbWFuZGBdO1xuICBpZiAoIWV4dENtZCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYENhbm5vdCBjYWxsICR7dHlwZX0gY29tbWFuZCB3aXRob3V0IGEgc3ViY29tbWFuZCBsaWtlICdpbnN0YWxsJ2ApO1xuICB9XG4gIGxldCB7anNvbiwgc3VwcHJlc3NPdXRwdXR9ID0gYXJncztcbiAgaWYgKHN1cHByZXNzT3V0cHV0KSB7XG4gICAganNvbiA9IHRydWU7XG4gIH1cbiAgY29uc3QgbG9nRm4gPSAobXNnKSA9PiBsb2coanNvbiwgbXNnKTtcbiAgbGV0IGNvbmZpZztcbiAgaWYgKGNvbmZpZ09iamVjdCkge1xuICAgIGNvbmZpZyA9IGNvbmZpZ09iamVjdDtcbiAgICBjb25maWcubG9nID0gbG9nRm47XG4gIH0gZWxzZSB7XG4gICAgY29uZmlnID0gKHR5cGUgPT09IERSSVZFUl9UWVBFID8gRHJpdmVyQ29uZmlnIDogUGx1Z2luQ29uZmlnKS5nZXRJbnN0YW5jZShBUFBJVU1fSE9NRSwgbG9nRm4pO1xuICB9XG4gIGNvbnN0IENvbW1hbmRDbGFzcyA9IHR5cGUgPT09IERSSVZFUl9UWVBFID8gRHJpdmVyQ29tbWFuZCA6IFBsdWdpbkNvbW1hbmQ7XG4gIGNvbnN0IGNtZCA9IG5ldyBDb21tYW5kQ2xhc3Moe2NvbmZpZywganNvbn0pO1xuICB0cnkge1xuICAgIGF3YWl0IGNvbmZpZy5yZWFkKCk7XG4gICAganNvblJlc3VsdCA9IGF3YWl0IGNtZC5leGVjdXRlKGFyZ3MpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyBpbiB0aGUgc3VwcHJlc3Mgb3V0cHV0IGNhc2UsIHdlIGFyZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gaW50ZXJuYWxseSBhbmQgc2hvdWxkXG4gICAgLy8ganVzdCB0aHJvdyBpbnN0ZWFkIG9mIHByaW50aW5nIGFuIGVycm9yIGFuZCBlbmRpbmcgdGhlIHByb2Nlc3NcbiAgICBpZiAoc3VwcHJlc3NPdXRwdXQpIHtcbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gICAgZXJyQW5kUXVpdChqc29uLCBlcnIpO1xuICB9XG5cbiAgaWYgKGpzb24gJiYgIXN1cHByZXNzT3V0cHV0KSB7XG4gICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoanNvblJlc3VsdCwgbnVsbCwgSlNPTl9TUEFDRVMpKTtcbiAgfVxuXG4gIHJldHVybiBqc29uUmVzdWx0O1xufVxuXG5leHBvcnQge1xuICBydW5FeHRlbnNpb25Db21tYW5kLFxufTtcbiJdLCJmaWxlIjoibGliL2NsaS9leHRlbnNpb24uanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==
70
+ }
71
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9jbGkvZXh0ZW5zaW9uLmpzIl0sIm5hbWVzIjpbImNvbW1hbmRDbGFzc2VzIiwiT2JqZWN0IiwiZnJlZXplIiwiRFJJVkVSX1RZUEUiLCJEcml2ZXJDb21tYW5kIiwiUExVR0lOX1RZUEUiLCJQbHVnaW5Db21tYW5kIiwicnVuRXh0ZW5zaW9uQ29tbWFuZCIsImFyZ3MiLCJjb25maWdPYmplY3QiLCJqc29uUmVzdWx0IiwiZXh0ZW5zaW9uVHlwZSIsInR5cGUiLCJleHRDbWQiLCJUeXBlRXJyb3IiLCJqc29uIiwic3VwcHJlc3NPdXRwdXQiLCJsb2dGbiIsIm1zZyIsImNvbmZpZyIsImxvZyIsIkNvbW1hbmRDbGFzcyIsImNtZCIsImV4ZWN1dGUiLCJlcnIiLCJjb25zb2xlIiwiSlNPTiIsInN0cmluZ2lmeSIsIkpTT05fU1BBQ0VTIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUVBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLE1BQU1BLGNBQWMsR0FBR0MsTUFBTSxDQUFDQyxNQUFQLENBQW1DO0FBQ3hELEdBQUNDLHNCQUFELEdBQWVDLHNCQUR5QztBQUV4RCxHQUFDQyxzQkFBRCxHQUFlQztBQUZ5QyxDQUFuQyxDQUF2Qjs7QUFjQSxlQUFlQyxtQkFBZixDQUFvQ0MsSUFBcEMsRUFBMENDLFlBQTFDLEVBQXdEO0FBR3RELE1BQUlDLFVBQVUsR0FBRyxJQUFqQjtBQUNBLFFBQU07QUFBQ0MsSUFBQUEsYUFBYSxFQUFFQztBQUFoQixNQUF3QkgsWUFBOUI7QUFDQSxRQUFNSSxNQUFNLEdBQUdMLElBQUksQ0FBRSxHQUFFSSxJQUFLLFNBQVQsQ0FBbkI7O0FBQ0EsTUFBSSxDQUFDQyxNQUFMLEVBQWE7QUFDWCxVQUFNLElBQUlDLFNBQUosQ0FBZSxlQUFjRixJQUFLLDhDQUFsQyxDQUFOO0FBQ0Q7O0FBQ0QsTUFBSTtBQUFDRyxJQUFBQSxJQUFEO0FBQU9DLElBQUFBO0FBQVAsTUFBeUJSLElBQTdCOztBQUNBLE1BQUlRLGNBQUosRUFBb0I7QUFDbEJELElBQUFBLElBQUksR0FBRyxJQUFQO0FBQ0Q7O0FBQ0QsUUFBTUUsS0FBSyxHQUFJQyxHQUFELElBQVMsZ0JBQUlILElBQUosRUFBVUcsR0FBVixDQUF2Qjs7QUFDQSxNQUFJQyxNQUFNLEdBQUdWLFlBQWI7QUFDQVUsRUFBQUEsTUFBTSxDQUFDQyxHQUFQLEdBQWFILEtBQWI7QUFDQSxRQUFNSSxZQUFZLEdBQXNDckIsY0FBYyxDQUFDWSxJQUFELENBQXRFO0FBQ0EsUUFBTVUsR0FBRyxHQUFHLElBQUlELFlBQUosQ0FBaUI7QUFBQ0YsSUFBQUEsTUFBRDtBQUFTSixJQUFBQTtBQUFULEdBQWpCLENBQVo7O0FBQ0EsTUFBSTtBQUNGTCxJQUFBQSxVQUFVLEdBQUcsTUFBTVksR0FBRyxDQUFDQyxPQUFKLENBQVlmLElBQVosQ0FBbkI7QUFDRCxHQUZELENBRUUsT0FBT2dCLEdBQVAsRUFBWTtBQUdaLFFBQUlSLGNBQUosRUFBb0I7QUFDbEIsWUFBTVEsR0FBTjtBQUNEOztBQUNELDJCQUFXVCxJQUFYLEVBQWlCUyxHQUFqQjtBQUNEOztBQUVELE1BQUlULElBQUksSUFBSSxDQUFDQyxjQUFiLEVBQTZCO0FBQzNCUyxJQUFBQSxPQUFPLENBQUNMLEdBQVIsQ0FBWU0sSUFBSSxDQUFDQyxTQUFMLENBQWVqQixVQUFmLEVBQTJCLElBQTNCLEVBQWlDa0Isa0JBQWpDLENBQVo7QUFDRDs7QUFFRCxTQUFPbEIsVUFBUDtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tY29uc29sZSAqL1xuXG5pbXBvcnQgRHJpdmVyQ29tbWFuZCBmcm9tICcuL2RyaXZlci1jb21tYW5kJztcbmltcG9ydCBQbHVnaW5Db21tYW5kIGZyb20gJy4vcGx1Z2luLWNvbW1hbmQnO1xuaW1wb3J0IHsgRFJJVkVSX1RZUEUsIFBMVUdJTl9UWVBFIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IGVyckFuZFF1aXQsIGxvZywgSlNPTl9TUEFDRVMgfSBmcm9tICcuL3V0aWxzJztcblxuY29uc3QgY29tbWFuZENsYXNzZXMgPSBPYmplY3QuZnJlZXplKC8qKiBAdHlwZSB7Y29uc3R9ICovKHtcbiAgW0RSSVZFUl9UWVBFXTogRHJpdmVyQ29tbWFuZCxcbiAgW1BMVUdJTl9UWVBFXTogUGx1Z2luQ29tbWFuZFxufSkpO1xuXG4vKipcbiAqIFJ1biBhIHN1YmNvbW1hbmQgb2YgdGhlICdhcHBpdW0gZHJpdmVyJyB0eXBlLiBFYWNoIHN1YmNvbW1hbmQgaGFzIGl0cyBvd24gc2V0IG9mIGFyZ3VtZW50cyB3aGljaFxuICogY2FuIGJlIHJlcHJlc2VudGVkIGFzIGEgSlMgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBhcmdzIC0gSlMgb2JqZWN0IHdoZXJlIHRoZSBrZXkgaXMgdGhlIHBhcmFtZXRlciBuYW1lIChhcyBkZWZpbmVkIGluXG4gKiBkcml2ZXItcGFyc2VyLmpzKVxuICogQHRlbXBsYXRlIHtpbXBvcnQoJy4uL2V4dGVuc2lvbi9tYW5pZmVzdCcpLkV4dGVuc2lvblR5cGV9IEV4dFR5cGVcbiAqIEBwYXJhbSB7aW1wb3J0KCcuLi9leHRlbnNpb24vZXh0ZW5zaW9uLWNvbmZpZycpLkV4dGVuc2lvbkNvbmZpZzxFeHRUeXBlPn0gY29uZmlnT2JqZWN0IC0gRXh0ZW5zaW9uIGNvbmZpZyBvYmplY3RcbiAqL1xuYXN5bmMgZnVuY3Rpb24gcnVuRXh0ZW5zaW9uQ29tbWFuZCAoYXJncywgY29uZmlnT2JqZWN0KSB7XG4gIC8vIFRPRE8gZHJpdmVyIGNvbmZpZyBmaWxlIHNob3VsZCBiZSBsb2NrZWQgd2hpbGUgYW55IG9mIHRoZXNlIGNvbW1hbmRzIGFyZVxuICAvLyBydW5uaW5nIHRvIHByZXZlbnQgd2VpcmQgc2l0dWF0aW9uc1xuICBsZXQganNvblJlc3VsdCA9IG51bGw7XG4gIGNvbnN0IHtleHRlbnNpb25UeXBlOiB0eXBlfSA9IGNvbmZpZ09iamVjdDtcbiAgY29uc3QgZXh0Q21kID0gYXJnc1tgJHt0eXBlfUNvbW1hbmRgXTtcbiAgaWYgKCFleHRDbWQpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBDYW5ub3QgY2FsbCAke3R5cGV9IGNvbW1hbmQgd2l0aG91dCBhIHN1YmNvbW1hbmQgbGlrZSAnaW5zdGFsbCdgKTtcbiAgfVxuICBsZXQge2pzb24sIHN1cHByZXNzT3V0cHV0fSA9IGFyZ3M7XG4gIGlmIChzdXBwcmVzc091dHB1dCkge1xuICAgIGpzb24gPSB0cnVlO1xuICB9XG4gIGNvbnN0IGxvZ0ZuID0gKG1zZykgPT4gbG9nKGpzb24sIG1zZyk7XG4gIGxldCBjb25maWcgPSBjb25maWdPYmplY3Q7XG4gIGNvbmZpZy5sb2cgPSBsb2dGbjtcbiAgY29uc3QgQ29tbWFuZENsYXNzID0gLyoqIEB0eXBlIHtFeHRDb21tYW5kPEV4dFR5cGU+fSAqLyhjb21tYW5kQ2xhc3Nlc1t0eXBlXSk7XG4gIGNvbnN0IGNtZCA9IG5ldyBDb21tYW5kQ2xhc3Moe2NvbmZpZywganNvbn0pO1xuICB0cnkge1xuICAgIGpzb25SZXN1bHQgPSBhd2FpdCBjbWQuZXhlY3V0ZShhcmdzKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gaW4gdGhlIHN1cHByZXNzIG91dHB1dCBjYXNlLCB3ZSBhcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIGludGVybmFsbHkgYW5kIHNob3VsZFxuICAgIC8vIGp1c3QgdGhyb3cgaW5zdGVhZCBvZiBwcmludGluZyBhbiBlcnJvciBhbmQgZW5kaW5nIHRoZSBwcm9jZXNzXG4gICAgaWYgKHN1cHByZXNzT3V0cHV0KSB7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICAgIGVyckFuZFF1aXQoanNvbiwgZXJyKTtcbiAgfVxuXG4gIGlmIChqc29uICYmICFzdXBwcmVzc091dHB1dCkge1xuICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KGpzb25SZXN1bHQsIG51bGwsIEpTT05fU1BBQ0VTKSk7XG4gIH1cblxuICByZXR1cm4ganNvblJlc3VsdDtcbn1cblxuZXhwb3J0IHtcbiAgcnVuRXh0ZW5zaW9uQ29tbWFuZCxcbn07XG5cbi8qKlxuICogQHRlbXBsYXRlIHtpbXBvcnQoJy4uLy4uL3R5cGVzJykuRXh0ZW5zaW9uVHlwZX0gRXh0VHlwZVxuICogQHR5cGVkZWYge0V4dFR5cGUgZXh0ZW5kcyBpbXBvcnQoJy4uLy4uL3R5cGVzJykuRHJpdmVyVHlwZSA/IGltcG9ydCgnQGFwcGl1bS90eXBlcycpLkNsYXNzPERyaXZlckNvbW1hbmQ+IDogRXh0VHlwZSBleHRlbmRzIGltcG9ydCgnLi4vLi4vdHlwZXMnKS5QbHVnaW5UeXBlID8gaW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuQ2xhc3M8UGx1Z2luQ29tbWFuZD4gOiBuZXZlcn0gRXh0Q29tbWFuZFxuICovXG4iXX0=
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Creates a {@link ArgParser} instance; finalizes the config schema.
3
+ *
4
+ * @constructs ArgParser
5
+ * @param {boolean} [debug] - If `true`, throw instead of exit upon parsing error
6
+ * @returns {ArgParser}
7
+ */
8
+ export function getParser(debug?: boolean | undefined): ArgParser;
9
+ /**
10
+ * A wrapper around `argparse`
11
+ *
12
+ * - Handles instantiation, configuration, and monkeypatching of an
13
+ * `ArgumentParser` instance for Appium server and its extensions
14
+ * - Handles error conditions, messages, and exit behavior
15
+ */
16
+ export class ArgParser {
17
+ /**
18
+ * Given an object full of arguments as returned by `argparser.parse_args`,
19
+ * expand the ones for extensions into a nested object structure and rename
20
+ * keys to match the intended destination.
21
+ *
22
+ * E.g., `{'driver-foo-bar': baz}` becomes `{driver: {foo: {bar: 'baz'}}}`
23
+ * @param {object} args
24
+ * @returns {object}
25
+ */
26
+ static _transformParsedArgs(args: object): object;
27
+ /**
28
+ * Patches the `exit()` method of the parser to throw an error, so we can handle it manually.
29
+ * @param {ArgumentParser} parser
30
+ */
31
+ static _patchExit(parser: ArgumentParser): void;
32
+ /**
33
+ *
34
+ * @param {import('argparse').SubParser} subParser
35
+ * @returns {import('./args').ArgumentDefinitions}
36
+ */
37
+ static _addServerToParser(subParser: import('argparse').SubParser): import('./args').ArgumentDefinitions;
38
+ /**
39
+ * Adds extension sub-sub-commands to `driver`/`plugin` subcommands
40
+ * @param {import('argparse').SubParser} subParsers
41
+ */
42
+ static _addExtensionCommandsToParser(subParsers: import('argparse').SubParser): void;
43
+ /**
44
+ * @param {boolean} [debug] - If true, throw instead of exit on error.
45
+ */
46
+ constructor(debug?: boolean | undefined);
47
+ /**
48
+ * Program name (typically `appium`)
49
+ * @type {string}
50
+ */
51
+ prog: string;
52
+ /**
53
+ * If `true`, throw an error on parse failure instead of printing help
54
+ * @type {boolean}
55
+ */
56
+ debug: boolean;
57
+ /**
58
+ * Wrapped `ArgumentParser` instance
59
+ * @type {ArgumentParser}
60
+ */
61
+ parser: ArgumentParser;
62
+ rawArgs: import("./args").ArgumentDefinitions;
63
+ /**
64
+ * @type {ArgParser['parseArgs']}
65
+ */
66
+ parse_args: ArgParser['parseArgs'];
67
+ /**
68
+ * Parse arguments from the command line.
69
+ *
70
+ * If no subcommand is passed in, this method will inject the `server` subcommand.
71
+ *
72
+ * `ArgParser.prototype.parse_args` is an alias of this method.
73
+ * @param {string[]} [args] - Array of arguments, ostensibly from `process.argv`. Gathers args from `process.argv` if not provided.
74
+ * @returns {import('../../types/cli').ParsedArgs} - The parsed arguments
75
+ */
76
+ parseArgs(args?: string[] | undefined): import('../../types/cli').ParsedArgs;
77
+ }
78
+ import { ArgumentParser } from "argparse";
79
+ //# sourceMappingURL=parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../../lib/cli/parser.js"],"names":[],"mappings":"AA6PA;;;;;;GAMG;AACH,wDAFa,SAAS,CAMrB;AAzOD;;;;;;GAMG;AACH;IA2FE;;;;;;;;OAQG;IACH,kCAHW,MAAM,GACJ,MAAM,CAiBlB;IAED;;;OAGG;IACH,0BAFW,cAAc,QASxB;IAED;;;;OAIG;IACH,qCAHW,OAAO,UAAU,EAAE,SAAS,GAC1B,OAAO,QAAQ,EAAE,mBAAmB,CAkBhD;IAED;;;OAGG;IACH,iDAFW,OAAO,UAAU,EAAE,SAAS,QAyDtC;IAnND;;OAEG;IACH,yCAmDC;IAxCC;;;OAGG;IACH,MAFU,MAAM,CAEA;IAEhB;;;OAGG;IACH,OAFU,OAAO,CAEC;IAElB;;;OAGG;IACH,QAFU,cAAc,CAEJ;IAcpB,8CAAyB;IAMzB;;OAEG;IACH,YAFU,SAAS,CAAC,WAAW,CAAC,CAEA;IAGlC;;;;;;;;OAQG;IACH,wCAFa,OAAO,iBAAiB,EAAE,UAAU,CAyBhD;CA4HF"}
@@ -5,7 +5,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.default = exports.SERVER_SUBCOMMAND = exports.ArgParser = void 0;
8
+ exports.ArgParser = void 0;
9
9
  exports.getParser = getParser;
10
10
 
11
11
  require("source-map-support/register");
@@ -14,25 +14,21 @@ var _support = require("@appium/support");
14
14
 
15
15
  var _argparse = require("argparse");
16
16
 
17
- var _bluebird = _interopRequireDefault(require("bluebird"));
18
-
19
17
  var _lodash = _interopRequireDefault(require("lodash"));
20
18
 
21
19
  var _path = _interopRequireDefault(require("path"));
22
20
 
23
- var _extensionConfig = require("../extension-config");
21
+ var _constants = require("../constants");
24
22
 
25
23
  var _schema = require("../schema");
26
24
 
27
- var _utils = require("../utils");
25
+ var _config = require("../config");
28
26
 
29
27
  var _args = require("./args");
30
28
 
31
- const SERVER_SUBCOMMAND = 'server';
32
- exports.SERVER_SUBCOMMAND = SERVER_SUBCOMMAND;
33
- const NON_SERVER_ARGS = Object.freeze(new Set([_extensionConfig.DRIVER_TYPE, _extensionConfig.PLUGIN_TYPE, SERVER_SUBCOMMAND, '-h', '--help', '-v', '--version']));
29
+ const NON_SERVER_ARGS = Object.freeze(new Set([_constants.DRIVER_TYPE, _constants.PLUGIN_TYPE, _constants.SERVER_SUBCOMMAND, '-h', '--help', '-v', '--version']));
34
30
 
35
- const version = _support.fs.readPackageJsonFrom(_utils.rootDir).version;
31
+ const version = _support.fs.readPackageJsonFrom(_config.rootDir).version;
36
32
 
37
33
  class ArgParser {
38
34
  constructor(debug = false) {
@@ -67,7 +63,7 @@ class ArgParser {
67
63
 
68
64
  parseArgs(args = process.argv.slice(2)) {
69
65
  if (!NON_SERVER_ARGS.has(args[0])) {
70
- args.unshift(SERVER_SUBCOMMAND);
66
+ args.unshift(_constants.SERVER_SUBCOMMAND);
71
67
  }
72
68
 
73
69
  try {
@@ -131,7 +127,7 @@ class ArgParser {
131
127
  }
132
128
 
133
129
  static _addExtensionCommandsToParser(subParsers) {
134
- for (const type of [_extensionConfig.DRIVER_TYPE, _extensionConfig.PLUGIN_TYPE]) {
130
+ for (const type of [_constants.DRIVER_TYPE, _constants.PLUGIN_TYPE]) {
135
131
  const extParser = subParsers.add_parser(type, {
136
132
  add_help: true,
137
133
  help: `Access the ${type} management CLI commands`
@@ -188,14 +184,8 @@ class ArgParser {
188
184
 
189
185
  exports.ArgParser = ArgParser;
190
186
 
191
- async function getParser(debug = false) {
192
- await _bluebird.default.all([_args.driverConfig.read(), _args.pluginConfig.read()]);
187
+ function getParser(debug) {
193
188
  (0, _schema.finalizeSchema)();
194
189
  return new ArgParser(debug);
195
190
  }
196
-
197
- var _default = getParser;
198
- exports.default = _default;require('source-map-support').install();
199
-
200
-
201
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jbGkvcGFyc2VyLmpzIl0sIm5hbWVzIjpbIlNFUlZFUl9TVUJDT01NQU5EIiwiTk9OX1NFUlZFUl9BUkdTIiwiT2JqZWN0IiwiZnJlZXplIiwiU2V0IiwiRFJJVkVSX1RZUEUiLCJQTFVHSU5fVFlQRSIsInZlcnNpb24iLCJmcyIsInJlYWRQYWNrYWdlSnNvbkZyb20iLCJyb290RGlyIiwiQXJnUGFyc2VyIiwiY29uc3RydWN0b3IiLCJkZWJ1ZyIsInByb2ciLCJwcm9jZXNzIiwiYXJndiIsInBhdGgiLCJiYXNlbmFtZSIsInBhcnNlciIsIkFyZ3VtZW50UGFyc2VyIiwiYWRkX2hlbHAiLCJkZXNjcmlwdGlvbiIsIl9wYXRjaEV4aXQiLCJhZGRfYXJndW1lbnQiLCJhY3Rpb24iLCJzdWJQYXJzZXJzIiwiYWRkX3N1YnBhcnNlcnMiLCJkZXN0Iiwic2VydmVyQXJncyIsIl9hZGRTZXJ2ZXJUb1BhcnNlciIsInJhd0FyZ3MiLCJfYWRkRXh0ZW5zaW9uQ29tbWFuZHNUb1BhcnNlciIsInBhcnNlX2FyZ3MiLCJwYXJzZUFyZ3MiLCJhcmdzIiwic2xpY2UiLCJoYXMiLCJ1bnNoaWZ0IiwicGFyc2VkIiwiX3RyYW5zZm9ybVBhcnNlZEFyZ3MiLCJlcnIiLCJjb25zb2xlIiwiZXJyb3IiLCJtZXNzYWdlIiwiZXhpdCIsIl8iLCJyZWR1Y2UiLCJ1bnBhY2tlZCIsInZhbHVlIiwia2V5IiwiaXNVbmRlZmluZWQiLCJzZXQiLCJjb2RlIiwibXNnIiwiRXJyb3IiLCJzdWJQYXJzZXIiLCJzZXJ2ZXJQYXJzZXIiLCJhZGRfcGFyc2VyIiwiaGVscCIsImZsYWdzT3JOYW1lcyIsIm9wdHMiLCJ0eXBlIiwiZXh0UGFyc2VyIiwiZXh0U3ViUGFyc2VycyIsImV4dGVuc2lvbkFyZ3MiLCJwYXJzZXJTcGVjcyIsImNvbW1hbmQiLCJsaXN0IiwiaW5zdGFsbCIsInVuaW5zdGFsbCIsInVwZGF0ZSIsInJ1biIsImdldFBhcnNlciIsIkIiLCJhbGwiLCJkcml2ZXJDb25maWci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LFMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IHsgZnMgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IHsgQXJndW1lbnRQYXJzZXIgfSBmcm9tICdhcmdwYXJzZSc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBEUklWRVJfVFlQRSwgUExVR0lOX1RZUEUgfSBmcm9tICcuLi9leHRlbnNpb24tY29uZmlnJztcbmltcG9ydCB7IGZpbmFsaXplU2NoZW1hLCBnZXRBcmdTcGVjLCBoYXNBcmdTcGVjIH0gZnJvbSAnLi4vc2NoZW1hJztcbmltcG9ydCB7IHJvb3REaXIgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQge1xuICBkcml2ZXJDb25maWcsXG4gIGdldEV4dGVuc2lvbkFyZ3MsXG4gIGdldFNlcnZlckFyZ3MsXG4gIHBsdWdpbkNvbmZpZ1xufSBmcm9tICcuL2FyZ3MnO1xuXG5leHBvcnQgY29uc3QgU0VSVkVSX1NVQkNPTU1BTkQgPSAnc2VydmVyJztcblxuLyoqXG4gKiBJZiB0aGUgcGFyc2VkIGFyZ3MgZG8gbm90IGNvbnRhaW4gYW55IG9mIHRoZXNlIHZhbHVlcywgdGhlbiB3ZVxuICogd2lsbCBhdXRvbWF0aWFsbHkgaW5qZWN0IHRoZSBgc2VydmVyYCBzdWJjb21tYW5kLlxuICovXG5jb25zdCBOT05fU0VSVkVSX0FSR1MgPSBPYmplY3QuZnJlZXplKFxuICBuZXcgU2V0KFtcbiAgICBEUklWRVJfVFlQRSxcbiAgICBQTFVHSU5fVFlQRSxcbiAgICBTRVJWRVJfU1VCQ09NTUFORCxcbiAgICAnLWgnLFxuICAgICctLWhlbHAnLFxuICAgICctdicsXG4gICAgJy0tdmVyc2lvbidcbiAgXSlcbik7XG5cbmNvbnN0IHZlcnNpb24gPSBmcy5yZWFkUGFja2FnZUpzb25Gcm9tKHJvb3REaXIpLnZlcnNpb247XG5cbi8qKlxuICogQSB3cmFwcGVyIGFyb3VuZCBgYXJncGFyc2VgXG4gKlxuICogLSBIYW5kbGVzIGluc3RhbnRpYXRpb24sIGNvbmZpZ3VyYXRpb24sIGFuZCBtb25rZXlwYXRjaGluZyBvZiBhblxuICogICAgYEFyZ3VtZW50UGFyc2VyYCBpbnN0YW5jZSBmb3IgQXBwaXVtIHNlcnZlciBhbmQgaXRzIGV4dGVuc2lvbnNcbiAqIC0gSGFuZGxlcyBlcnJvciBjb25kaXRpb25zLCBtZXNzYWdlcywgYW5kIGV4aXQgYmVoYXZpb3JcbiAqL1xuY2xhc3MgQXJnUGFyc2VyIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2RlYnVnXSAtIElmIHRydWUsIHRocm93IGluc3RlYWQgb2YgZXhpdCBvbiBlcnJvci5cbiAgICovXG4gIGNvbnN0cnVjdG9yIChkZWJ1ZyA9IGZhbHNlKSB7XG4gICAgY29uc3QgcHJvZyA9IHByb2Nlc3MuYXJndlsxXSA/IHBhdGguYmFzZW5hbWUocHJvY2Vzcy5hcmd2WzFdKSA6ICdhcHBpdW0nO1xuICAgIGNvbnN0IHBhcnNlciA9IG5ldyBBcmd1bWVudFBhcnNlcih7XG4gICAgICBhZGRfaGVscDogdHJ1ZSxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAnQSB3ZWJkcml2ZXItY29tcGF0aWJsZSBzZXJ2ZXIgdGhhdCBmYWNpbGl0YXRlcyBhdXRvbWF0aW9uIG9mIHdlYiwgbW9iaWxlLCBhbmQgb3RoZXIgdHlwZXMgb2YgYXBwcyBhY3Jvc3MgdmFyaW91cyBwbGF0Zm9ybXMuJyxcbiAgICAgIHByb2csXG4gICAgfSk7XG5cbiAgICBBcmdQYXJzZXIuX3BhdGNoRXhpdChwYXJzZXIpO1xuXG4gICAgLyoqXG4gICAgICogUHJvZ3JhbSBuYW1lICh0eXBpY2FsbHkgYGFwcGl1bWApXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLnByb2cgPSBwcm9nO1xuXG4gICAgLyoqXG4gICAgICogSWYgYHRydWVgLCB0aHJvdyBhbiBlcnJvciBvbiBwYXJzZSBmYWlsdXJlIGluc3RlYWQgb2YgcHJpbnRpbmcgaGVscFxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuZGVidWcgPSBkZWJ1ZztcblxuICAgIC8qKlxuICAgICAqIFdyYXBwZWQgYEFyZ3VtZW50UGFyc2VyYCBpbnN0YW5jZVxuICAgICAqIEB0eXBlIHtBcmd1bWVudFBhcnNlcn1cbiAgICAgKi9cbiAgICB0aGlzLnBhcnNlciA9IHBhcnNlcjtcblxuICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy12JywgJy0tdmVyc2lvbicsIHtcbiAgICAgIGFjdGlvbjogJ3ZlcnNpb24nLFxuICAgICAgdmVyc2lvbixcbiAgICB9KTtcblxuICAgIGNvbnN0IHN1YlBhcnNlcnMgPSBwYXJzZXIuYWRkX3N1YnBhcnNlcnMoe2Rlc3Q6ICdzdWJjb21tYW5kJ30pO1xuXG4gICAgLy8gYWRkIHRoZSAnc2VydmVyJyBzdWJjb21tYW5kLCBhbmQgc3RvcmUgdGhlIHJhdyBhcmd1bWVudHMgb24gdGhlIHBhcnNlclxuICAgIC8vIG9iamVjdCBhcyBhIHdheSBmb3Igb3RoZXIgcGFydHMgb2YgdGhlIGNvZGUgdG8gd29yayB3aXRoIHRoZSBhcmd1bWVudHNcbiAgICAvLyBjb25jZXB0dWFsbHkgcmF0aGVyIHRoYW4ganVzdCB0aHJvdWdoIGFyZ3BhcnNlXG4gICAgY29uc3Qgc2VydmVyQXJncyA9IEFyZ1BhcnNlci5fYWRkU2VydmVyVG9QYXJzZXIoc3ViUGFyc2Vycyk7XG5cbiAgICB0aGlzLnJhd0FyZ3MgPSBzZXJ2ZXJBcmdzO1xuXG4gICAgLy8gYWRkIHRoZSAnZHJpdmVyJyBhbmQgJ3BsdWdpbicgc3ViY29tbWFuZHNcbiAgICBBcmdQYXJzZXIuX2FkZEV4dGVuc2lvbkNvbW1hbmRzVG9QYXJzZXIoc3ViUGFyc2Vycyk7XG5cbiAgICAvLyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSAvIGRyb3AtaW4gd3JhcHBlclxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtBcmdQYXJzZXJbJ3BhcnNlQXJncyddfVxuICAgICAqL1xuICAgIHRoaXMucGFyc2VfYXJncyA9IHRoaXMucGFyc2VBcmdzO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlIGFyZ3VtZW50cyBmcm9tIHRoZSBjb21tYW5kIGxpbmUuXG4gICAqXG4gICAqIElmIG5vIHN1YmNvbW1hbmQgaXMgcGFzc2VkIGluLCB0aGlzIG1ldGhvZCB3aWxsIGluamVjdCB0aGUgYHNlcnZlcmAgc3ViY29tbWFuZC5cbiAgICpcbiAgICogYEFyZ1BhcnNlci5wcm90b3R5cGUucGFyc2VfYXJnc2AgaXMgYW4gYWxpYXMgb2YgdGhpcyBtZXRob2QuXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IFthcmdzXSAtIEFycmF5IG9mIGFyZ3VtZW50cywgb3N0ZW5zaWJseSBmcm9tIGBwcm9jZXNzLmFyZ3ZgLiBHYXRoZXJzIGFyZ3MgZnJvbSBgcHJvY2Vzcy5hcmd2YCBpZiBub3QgcHJvdmlkZWQuXG4gICAqIEByZXR1cm5zIHtpbXBvcnQoJy4uLy4uL3R5cGVzL3R5cGVzJykuUGFyc2VkQXJnc30gLSBUaGUgcGFyc2VkIGFyZ3VtZW50c1xuICAgKi9cbiAgcGFyc2VBcmdzIChhcmdzID0gcHJvY2Vzcy5hcmd2LnNsaWNlKDIpKSB7XG4gICAgaWYgKCFOT05fU0VSVkVSX0FSR1MuaGFzKGFyZ3NbMF0pKSB7XG4gICAgICBhcmdzLnVuc2hpZnQoU0VSVkVSX1NVQkNPTU1BTkQpO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXJzZWQgPSB0aGlzLnBhcnNlci5wYXJzZV9hcmdzKGFyZ3MpO1xuICAgICAgcmV0dXJuIEFyZ1BhcnNlci5fdHJhbnNmb3JtUGFyc2VkQXJncyhwYXJzZWQpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuICAgICAgLy8gdGhpcyBpc24ndCB0ZXN0ZWQgdmlhIHVuaXQgdGVzdHMgKHdlIHVzZSBgZGVidWc6IHRydWVgKSBzbyBtYXkgZXNjYXBlIGNvdmVyYWdlLlxuXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLmVycm9yKCk7IC8vIG5lZWQgYW4gZXh0cmEgc3BhY2Ugc2luY2UgYXJncGFyc2UgcHJpbnRzIHVzYWdlLlxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLmVycm9yKGVyci5tZXNzYWdlKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHaXZlbiBhbiBvYmplY3QgZnVsbCBvZiBhcmd1bWVudHMgYXMgcmV0dXJuZWQgYnkgYGFyZ3BhcnNlci5wYXJzZV9hcmdzYCxcbiAgICogZXhwYW5kIHRoZSBvbmVzIGZvciBleHRlbnNpb25zIGludG8gYSBuZXN0ZWQgb2JqZWN0IHN0cnVjdHVyZSBhbmQgcmVuYW1lXG4gICAqIGtleXMgdG8gbWF0Y2ggdGhlIGludGVuZGVkIGRlc3RpbmF0aW9uLlxuICAgKlxuICAgKiBFLmcuLCBgeydkcml2ZXItZm9vLWJhcic6IGJhen1gIGJlY29tZXMgYHtkcml2ZXI6IHtmb286IHtiYXI6ICdiYXonfX19YFxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJnc1xuICAgKiBAcmV0dXJucyB7b2JqZWN0fVxuICAgKi9cbiAgc3RhdGljIF90cmFuc2Zvcm1QYXJzZWRBcmdzIChhcmdzKSB7XG4gICAgcmV0dXJuIF8ucmVkdWNlKFxuICAgICAgYXJncyxcbiAgICAgICh1bnBhY2tlZCwgdmFsdWUsIGtleSkgPT4ge1xuICAgICAgICBpZiAoIV8uaXNVbmRlZmluZWQodmFsdWUpICYmIGhhc0FyZ1NwZWMoa2V5KSkge1xuICAgICAgICAgIGNvbnN0IHtkZXN0fSA9IC8qKiBAdHlwZSB7aW1wb3J0KCcuLi9zY2hlbWEvYXJnLXNwZWMnKS5BcmdTcGVjfSAqLyhnZXRBcmdTcGVjKGtleSkpO1xuICAgICAgICAgIF8uc2V0KHVucGFja2VkLCBkZXN0LCB2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gdGhpcyBjb3VsZCBiZSBhbnl0aGluZyB0aGF0IF9pc24ndF8gYSBzZXJ2ZXIgYXJnXG4gICAgICAgICAgdW5wYWNrZWRba2V5XSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bnBhY2tlZDtcbiAgICAgIH0sXG4gICAgICB7fSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhdGNoZXMgdGhlIGBleGl0KClgIG1ldGhvZCBvZiB0aGUgcGFyc2VyIHRvIHRocm93IGFuIGVycm9yLCBzbyB3ZSBjYW4gaGFuZGxlIGl0IG1hbnVhbGx5LlxuICAgKiBAcGFyYW0ge0FyZ3VtZW50UGFyc2VyfSBwYXJzZXJcbiAgICovXG4gIHN0YXRpYyBfcGF0Y2hFeGl0IChwYXJzZXIpIHtcbiAgICBwYXJzZXIuZXhpdCA9IChjb2RlLCBtc2cpID0+IHtcbiAgICAgIGlmIChjb2RlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtc2cpO1xuICAgICAgfVxuICAgICAgcHJvY2Vzcy5leGl0KCk7XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge2ltcG9ydCgnYXJncGFyc2UnKS5TdWJQYXJzZXJ9IHN1YlBhcnNlclxuICAgKiBAcmV0dXJucyB7aW1wb3J0KCcuL2FyZ3MnKS5Bcmd1bWVudERlZmluaXRpb25zfVxuICAgKi9cbiAgc3RhdGljIF9hZGRTZXJ2ZXJUb1BhcnNlciAoc3ViUGFyc2VyKSB7XG4gICAgY29uc3Qgc2VydmVyUGFyc2VyID0gc3ViUGFyc2VyLmFkZF9wYXJzZXIoJ3NlcnZlcicsIHtcbiAgICAgIGFkZF9oZWxwOiB0cnVlLFxuICAgICAgaGVscDogJ1J1biBhbiBBcHBpdW0gc2VydmVyJyxcbiAgICB9KTtcblxuICAgIEFyZ1BhcnNlci5fcGF0Y2hFeGl0KHNlcnZlclBhcnNlcik7XG5cbiAgICBjb25zdCBzZXJ2ZXJBcmdzID0gZ2V0U2VydmVyQXJncygpO1xuICAgIGZvciAoY29uc3QgW2ZsYWdzT3JOYW1lcywgb3B0c10gb2Ygc2VydmVyQXJncykge1xuICAgICAgLy8gVFMgZG9lc24ndCBsaWtlIHRoZSBzcHJlYWQgb3BlcmF0b3IgaGVyZS5cbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIHNlcnZlclBhcnNlci5hZGRfYXJndW1lbnQoLi4uZmxhZ3NPck5hbWVzLCB7Li4ub3B0c30pO1xuICAgIH1cblxuICAgIHJldHVybiBzZXJ2ZXJBcmdzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgZXh0ZW5zaW9uIHN1Yi1zdWItY29tbWFuZHMgdG8gYGRyaXZlcmAvYHBsdWdpbmAgc3ViY29tbWFuZHNcbiAgICogQHBhcmFtIHtpbXBvcnQoJ2FyZ3BhcnNlJykuU3ViUGFyc2VyfSBzdWJQYXJzZXJzXG4gICAqL1xuICBzdGF0aWMgX2FkZEV4dGVuc2lvbkNvbW1hbmRzVG9QYXJzZXIgKHN1YlBhcnNlcnMpIHtcbiAgICBmb3IgKGNvbnN0IHR5cGUgb2YgW0RSSVZFUl9UWVBFLCBQTFVHSU5fVFlQRV0pIHtcbiAgICAgIGNvbnN0IGV4dFBhcnNlciA9IHN1YlBhcnNlcnMuYWRkX3BhcnNlcih0eXBlLCB7XG4gICAgICAgIGFkZF9oZWxwOiB0cnVlLFxuICAgICAgICBoZWxwOiBgQWNjZXNzIHRoZSAke3R5cGV9IG1hbmFnZW1lbnQgQ0xJIGNvbW1hbmRzYCxcbiAgICAgIH0pO1xuXG4gICAgICBBcmdQYXJzZXIuX3BhdGNoRXhpdChleHRQYXJzZXIpO1xuXG4gICAgICBjb25zdCBleHRTdWJQYXJzZXJzID0gZXh0UGFyc2VyLmFkZF9zdWJwYXJzZXJzKHtcbiAgICAgICAgZGVzdDogYCR7dHlwZX1Db21tYW5kYCxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZXh0ZW5zaW9uQXJncyA9IGdldEV4dGVuc2lvbkFyZ3MoKTtcbiAgICAgIGNvbnN0IHBhcnNlclNwZWNzID0gW1xuICAgICAgICB7XG4gICAgICAgICAgY29tbWFuZDogJ2xpc3QnLFxuICAgICAgICAgIGFyZ3M6IGV4dGVuc2lvbkFyZ3NbdHlwZV0ubGlzdCxcbiAgICAgICAgICBoZWxwOiBgTGlzdCBhdmFpbGFibGUgYW5kIGluc3RhbGxlZCAke3R5cGV9c2AsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBjb21tYW5kOiAnaW5zdGFsbCcsXG4gICAgICAgICAgYXJnczogZXh0ZW5zaW9uQXJnc1t0eXBlXS5pbnN0YWxsLFxuICAgICAgICAgIGhlbHA6IGBJbnN0YWxsIGEgJHt0eXBlfWAsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBjb21tYW5kOiAndW5pbnN0YWxsJyxcbiAgICAgICAgICBhcmdzOiBleHRlbnNpb25BcmdzW3R5cGVdLnVuaW5zdGFsbCxcbiAgICAgICAgICBoZWxwOiBgVW5pbnN0YWxsIGEgJHt0eXBlfWAsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBjb21tYW5kOiAndXBkYXRlJyxcbiAgICAgICAgICBhcmdzOiBleHRlbnNpb25BcmdzW3R5cGVdLnVwZGF0ZSxcbiAgICAgICAgICBoZWxwOiBgVXBkYXRlIGluc3RhbGxlZCAke3R5cGV9cyB0byB0aGUgbGF0ZXN0IHZlcnNpb25gLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgY29tbWFuZDogJ3J1bicsXG4gICAgICAgICAgYXJnczogZXh0ZW5zaW9uQXJnc1t0eXBlXS5ydW4sXG4gICAgICAgICAgaGVscDpcbiAgICAgICAgICAgIGBSdW4gYSBzY3JpcHQgKGRlZmluZWQgaW5zaWRlIHRoZSAke3R5cGV9J3MgcGFja2FnZS5qc29uIHVuZGVyIHRoZSBgICtcbiAgICAgICAgICAgIGDigJxzY3JpcHRz4oCdIGZpZWxkIGluc2lkZSB0aGUg4oCcYXBwaXVt4oCdIGZpZWxkKSBmcm9tIGFuIGluc3RhbGxlZCAke3R5cGV9YCxcbiAgICAgICAgfSxcbiAgICAgIF07XG5cbiAgICAgIGZvciAoY29uc3Qge2NvbW1hbmQsIGFyZ3MsIGhlbHB9IG9mIHBhcnNlclNwZWNzKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlciA9IGV4dFN1YlBhcnNlcnMuYWRkX3BhcnNlcihjb21tYW5kLCB7aGVscH0pO1xuXG4gICAgICAgIEFyZ1BhcnNlci5fcGF0Y2hFeGl0KHBhcnNlcik7XG5cbiAgICAgICAgZm9yIChjb25zdCBbZmxhZ3NPck5hbWVzLCBvcHRzXSBvZiBhcmdzKSB7XG4gICAgICAgICAgLy8gYWRkX2FyZ3VtZW50IG11dGF0ZXMgcGFyYW1zIHNvIG1ha2Ugc3VyZSB0byBzZW5kIGluIGNvcGllcyBpbnN0ZWFkXG4gICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoLi4uZmxhZ3NPck5hbWVzLCB7Li4ub3B0c30pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHtAbGluayBBcmdQYXJzZXJ9IGluc3RhbmNlLiAgTmVjZXNzYXJpbHkgcmVhZHMgZXh0ZW5zaW9uIGNvbmZpZ3VyYXRpb25cbiAqIGJlZm9yZWhhbmQsIGFuZCBmaW5hbGl6ZXMgdGhlIGNvbmZpZyBzY2hlbWEuXG4gKlxuICogQGNvbnN0cnVjdHMgQXJnUGFyc2VyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtkZWJ1Z10gLSBJZiBgdHJ1ZWAsIHRocm93IGluc3RlYWQgb2YgZXhpdCB1cG9uIHBhcnNpbmcgZXJyb3JcbiAqIEByZXR1cm5zIHtQcm9taXNlPEFyZ1BhcnNlcj59XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldFBhcnNlciAoZGVidWcgPSBmYWxzZSkge1xuICBhd2FpdCBCLmFsbChbZHJpdmVyQ29uZmlnLnJlYWQoKSwgcGx1Z2luQ29uZmlnLnJlYWQoKV0pO1xuICBmaW5hbGl6ZVNjaGVtYSgpO1xuXG4gIHJldHVybiBuZXcgQXJnUGFyc2VyKGRlYnVnKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZ2V0UGFyc2VyO1xuZXhwb3J0IHsgZ2V0UGFyc2VyLCBBcmdQYXJzZXIgfTtcbiJdLCJmaWxlIjoibGliL2NsaS9wYXJzZXIuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==
191
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9jbGkvcGFyc2VyLmpzIl0sIm5hbWVzIjpbIk5PTl9TRVJWRVJfQVJHUyIsIk9iamVjdCIsImZyZWV6ZSIsIlNldCIsIkRSSVZFUl9UWVBFIiwiUExVR0lOX1RZUEUiLCJTRVJWRVJfU1VCQ09NTUFORCIsInZlcnNpb24iLCJmcyIsInJlYWRQYWNrYWdlSnNvbkZyb20iLCJyb290RGlyIiwiQXJnUGFyc2VyIiwiY29uc3RydWN0b3IiLCJkZWJ1ZyIsInByb2ciLCJwcm9jZXNzIiwiYXJndiIsInBhdGgiLCJiYXNlbmFtZSIsInBhcnNlciIsIkFyZ3VtZW50UGFyc2VyIiwiYWRkX2hlbHAiLCJkZXNjcmlwdGlvbiIsIl9wYXRjaEV4aXQiLCJhZGRfYXJndW1lbnQiLCJhY3Rpb24iLCJzdWJQYXJzZXJzIiwiYWRkX3N1YnBhcnNlcnMiLCJkZXN0Iiwic2VydmVyQXJncyIsIl9hZGRTZXJ2ZXJUb1BhcnNlciIsInJhd0FyZ3MiLCJfYWRkRXh0ZW5zaW9uQ29tbWFuZHNUb1BhcnNlciIsInBhcnNlX2FyZ3MiLCJwYXJzZUFyZ3MiLCJhcmdzIiwic2xpY2UiLCJoYXMiLCJ1bnNoaWZ0IiwicGFyc2VkIiwiX3RyYW5zZm9ybVBhcnNlZEFyZ3MiLCJlcnIiLCJjb25zb2xlIiwiZXJyb3IiLCJtZXNzYWdlIiwiZXhpdCIsIl8iLCJyZWR1Y2UiLCJ1bnBhY2tlZCIsInZhbHVlIiwia2V5IiwiaXNVbmRlZmluZWQiLCJzZXQiLCJjb2RlIiwibXNnIiwiRXJyb3IiLCJzdWJQYXJzZXIiLCJzZXJ2ZXJQYXJzZXIiLCJhZGRfcGFyc2VyIiwiaGVscCIsImZsYWdzT3JOYW1lcyIsIm9wdHMiLCJ0eXBlIiwiZXh0UGFyc2VyIiwiZXh0U3ViUGFyc2VycyIsImV4dGVuc2lvbkFyZ3MiLCJwYXJzZXJTcGVjcyIsImNvbW1hbmQiLCJsaXN0IiwiaW5zdGFsbCIsInVuaW5zdGFsbCIsInVwZGF0ZSIsInJ1biIsImdldFBhcnNlciJdLCJtYXBwaW5ncyI6Ijs7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QUFiLENBQW9CUyxNQUY1QjtBQUdFWixRQUFBQSxJQUFJLEVBQUcsb0JBQW1CRyxJQUFLO0FBSGpDLE9BaEJrQixFQXFCbEI7QUFDRUssUUFBQUEsT0FBTyxFQUFFLEtBRFg7QUFFRWhDLFFBQUFBLElBQUksRUFBRThCLGFBQWEsQ0FBQ0gsSUFBRCxDQUFiLENBQW9CVSxHQUY1QjtBQUdFYixRQUFBQSxJQUFJLEVBQ0Qsb0NBQW1DRyxJQUFLLDRCQUF6QyxHQUNDLGdFQUErREEsSUFBSztBQUx6RSxPQXJCa0IsQ0FBcEI7O0FBOEJBLFdBQUssTUFBTTtBQUFDSyxRQUFBQSxPQUFEO0FBQVVoQyxRQUFBQSxJQUFWO0FBQWdCd0IsUUFBQUE7QUFBaEIsT0FBWCxJQUFvQ08sV0FBcEMsRUFBaUQ7QUFDL0MsY0FBTS9DLE1BQU0sR0FBRzZDLGFBQWEsQ0FBQ04sVUFBZCxDQUF5QlMsT0FBekIsRUFBa0M7QUFBQ1IsVUFBQUE7QUFBRCxTQUFsQyxDQUFmOztBQUVBaEQsUUFBQUEsU0FBUyxDQUFDWSxVQUFWLENBQXFCSixNQUFyQjs7QUFFQSxhQUFLLE1BQU0sQ0FBQ3lDLFlBQUQsRUFBZUMsSUFBZixDQUFYLElBQW1DMUIsSUFBbkMsRUFBeUM7QUFHdkNoQixVQUFBQSxNQUFNLENBQUNLLFlBQVAsQ0FBb0IsR0FBR29DLFlBQXZCLEVBQXFDLEVBQUMsR0FBR0M7QUFBSixXQUFyQztBQUNEO0FBQ0Y7QUFDRjtBQUNGOztBQXBOYTs7OztBQThOaEIsU0FBU1ksU0FBVCxDQUFvQjVELEtBQXBCLEVBQTJCO0FBQ3pCO0FBRUEsU0FBTyxJQUFJRixTQUFKLENBQWNFLEtBQWQsQ0FBUDtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiXG5pbXBvcnQgeyBmcyB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgeyBBcmd1bWVudFBhcnNlciB9IGZyb20gJ2FyZ3BhcnNlJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IERSSVZFUl9UWVBFLCBQTFVHSU5fVFlQRSwgU0VSVkVSX1NVQkNPTU1BTkQgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgZmluYWxpemVTY2hlbWEsIGdldEFyZ1NwZWMsIGhhc0FyZ1NwZWMgfSBmcm9tICcuLi9zY2hlbWEnO1xuaW1wb3J0IHsgcm9vdERpciB9IGZyb20gJy4uL2NvbmZpZyc7XG5pbXBvcnQge1xuICBnZXRFeHRlbnNpb25BcmdzLFxuICBnZXRTZXJ2ZXJBcmdzXG59IGZyb20gJy4vYXJncyc7XG5cbi8qKlxuICogSWYgdGhlIHBhcnNlZCBhcmdzIGRvIG5vdCBjb250YWluIGFueSBvZiB0aGVzZSB2YWx1ZXMsIHRoZW4gd2VcbiAqIHdpbGwgYXV0b21hdGlhbGx5IGluamVjdCB0aGUgYHNlcnZlcmAgc3ViY29tbWFuZC5cbiAqL1xuY29uc3QgTk9OX1NFUlZFUl9BUkdTID0gT2JqZWN0LmZyZWV6ZShcbiAgbmV3IFNldChbXG4gICAgRFJJVkVSX1RZUEUsXG4gICAgUExVR0lOX1RZUEUsXG4gICAgU0VSVkVSX1NVQkNPTU1BTkQsXG4gICAgJy1oJyxcbiAgICAnLS1oZWxwJyxcbiAgICAnLXYnLFxuICAgICctLXZlcnNpb24nXG4gIF0pXG4pO1xuXG5jb25zdCB2ZXJzaW9uID0gZnMucmVhZFBhY2thZ2VKc29uRnJvbShyb290RGlyKS52ZXJzaW9uO1xuXG4vKipcbiAqIEEgd3JhcHBlciBhcm91bmQgYGFyZ3BhcnNlYFxuICpcbiAqIC0gSGFuZGxlcyBpbnN0YW50aWF0aW9uLCBjb25maWd1cmF0aW9uLCBhbmQgbW9ua2V5cGF0Y2hpbmcgb2YgYW5cbiAqICAgIGBBcmd1bWVudFBhcnNlcmAgaW5zdGFuY2UgZm9yIEFwcGl1bSBzZXJ2ZXIgYW5kIGl0cyBleHRlbnNpb25zXG4gKiAtIEhhbmRsZXMgZXJyb3IgY29uZGl0aW9ucywgbWVzc2FnZXMsIGFuZCBleGl0IGJlaGF2aW9yXG4gKi9cbmNsYXNzIEFyZ1BhcnNlciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtkZWJ1Z10gLSBJZiB0cnVlLCB0aHJvdyBpbnN0ZWFkIG9mIGV4aXQgb24gZXJyb3IuXG4gICAqL1xuICBjb25zdHJ1Y3RvciAoZGVidWcgPSBmYWxzZSkge1xuICAgIGNvbnN0IHByb2cgPSBwcm9jZXNzLmFyZ3ZbMV0gPyBwYXRoLmJhc2VuYW1lKHByb2Nlc3MuYXJndlsxXSkgOiAnYXBwaXVtJztcbiAgICBjb25zdCBwYXJzZXIgPSBuZXcgQXJndW1lbnRQYXJzZXIoe1xuICAgICAgYWRkX2hlbHA6IHRydWUsXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgJ0Egd2ViZHJpdmVyLWNvbXBhdGlibGUgc2VydmVyIHRoYXQgZmFjaWxpdGF0ZXMgYXV0b21hdGlvbiBvZiB3ZWIsIG1vYmlsZSwgYW5kIG90aGVyIHR5cGVzIG9mIGFwcHMgYWNyb3NzIHZhcmlvdXMgcGxhdGZvcm1zLicsXG4gICAgICBwcm9nLFxuICAgIH0pO1xuXG4gICAgQXJnUGFyc2VyLl9wYXRjaEV4aXQocGFyc2VyKTtcblxuICAgIC8qKlxuICAgICAqIFByb2dyYW0gbmFtZSAodHlwaWNhbGx5IGBhcHBpdW1gKVxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy5wcm9nID0gcHJvZztcblxuICAgIC8qKlxuICAgICAqIElmIGB0cnVlYCwgdGhyb3cgYW4gZXJyb3Igb24gcGFyc2UgZmFpbHVyZSBpbnN0ZWFkIG9mIHByaW50aW5nIGhlbHBcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmRlYnVnID0gZGVidWc7XG5cbiAgICAvKipcbiAgICAgKiBXcmFwcGVkIGBBcmd1bWVudFBhcnNlcmAgaW5zdGFuY2VcbiAgICAgKiBAdHlwZSB7QXJndW1lbnRQYXJzZXJ9XG4gICAgICovXG4gICAgdGhpcy5wYXJzZXIgPSBwYXJzZXI7XG5cbiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctdicsICctLXZlcnNpb24nLCB7XG4gICAgICBhY3Rpb246ICd2ZXJzaW9uJyxcbiAgICAgIHZlcnNpb24sXG4gICAgfSk7XG5cbiAgICBjb25zdCBzdWJQYXJzZXJzID0gcGFyc2VyLmFkZF9zdWJwYXJzZXJzKHtkZXN0OiAnc3ViY29tbWFuZCd9KTtcblxuICAgIC8vIGFkZCB0aGUgJ3NlcnZlcicgc3ViY29tbWFuZCwgYW5kIHN0b3JlIHRoZSByYXcgYXJndW1lbnRzIG9uIHRoZSBwYXJzZXJcbiAgICAvLyBvYmplY3QgYXMgYSB3YXkgZm9yIG90aGVyIHBhcnRzIG9mIHRoZSBjb2RlIHRvIHdvcmsgd2l0aCB0aGUgYXJndW1lbnRzXG4gICAgLy8gY29uY2VwdHVhbGx5IHJhdGhlciB0aGFuIGp1c3QgdGhyb3VnaCBhcmdwYXJzZVxuICAgIGNvbnN0IHNlcnZlckFyZ3MgPSBBcmdQYXJzZXIuX2FkZFNlcnZlclRvUGFyc2VyKHN1YlBhcnNlcnMpO1xuXG4gICAgdGhpcy5yYXdBcmdzID0gc2VydmVyQXJncztcblxuICAgIC8vIGFkZCB0aGUgJ2RyaXZlcicgYW5kICdwbHVnaW4nIHN1YmNvbW1hbmRzXG4gICAgQXJnUGFyc2VyLl9hZGRFeHRlbnNpb25Db21tYW5kc1RvUGFyc2VyKHN1YlBhcnNlcnMpO1xuXG4gICAgLy8gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgLyBkcm9wLWluIHdyYXBwZXJcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7QXJnUGFyc2VyWydwYXJzZUFyZ3MnXX1cbiAgICAgKi9cbiAgICB0aGlzLnBhcnNlX2FyZ3MgPSB0aGlzLnBhcnNlQXJncztcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZSBhcmd1bWVudHMgZnJvbSB0aGUgY29tbWFuZCBsaW5lLlxuICAgKlxuICAgKiBJZiBubyBzdWJjb21tYW5kIGlzIHBhc3NlZCBpbiwgdGhpcyBtZXRob2Qgd2lsbCBpbmplY3QgdGhlIGBzZXJ2ZXJgIHN1YmNvbW1hbmQuXG4gICAqXG4gICAqIGBBcmdQYXJzZXIucHJvdG90eXBlLnBhcnNlX2FyZ3NgIGlzIGFuIGFsaWFzIG9mIHRoaXMgbWV0aG9kLlxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbYXJnc10gLSBBcnJheSBvZiBhcmd1bWVudHMsIG9zdGVuc2libHkgZnJvbSBgcHJvY2Vzcy5hcmd2YC4gR2F0aGVycyBhcmdzIGZyb20gYHByb2Nlc3MuYXJndmAgaWYgbm90IHByb3ZpZGVkLlxuICAgKiBAcmV0dXJucyB7aW1wb3J0KCcuLi8uLi90eXBlcy9jbGknKS5QYXJzZWRBcmdzfSAtIFRoZSBwYXJzZWQgYXJndW1lbnRzXG4gICAqL1xuICBwYXJzZUFyZ3MgKGFyZ3MgPSBwcm9jZXNzLmFyZ3Yuc2xpY2UoMikpIHtcbiAgICBpZiAoIU5PTl9TRVJWRVJfQVJHUy5oYXMoYXJnc1swXSkpIHtcbiAgICAgIGFyZ3MudW5zaGlmdChTRVJWRVJfU1VCQ09NTUFORCk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IHRoaXMucGFyc2VyLnBhcnNlX2FyZ3MoYXJncyk7XG4gICAgICByZXR1cm4gQXJnUGFyc2VyLl90cmFuc2Zvcm1QYXJzZWRBcmdzKHBhcnNlZCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAodGhpcy5kZWJ1Zykge1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgICAvLyB0aGlzIGlzbid0IHRlc3RlZCB2aWEgdW5pdCB0ZXN0cyAod2UgdXNlIGBkZWJ1ZzogdHJ1ZWApIHNvIG1heSBlc2NhcGUgY292ZXJhZ2UuXG5cbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoKTsgLy8gbmVlZCBhbiBleHRyYSBzcGFjZSBzaW5jZSBhcmdwYXJzZSBwcmludHMgdXNhZ2UuXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyLm1lc3NhZ2UpO1xuICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdpdmVuIGFuIG9iamVjdCBmdWxsIG9mIGFyZ3VtZW50cyBhcyByZXR1cm5lZCBieSBgYXJncGFyc2VyLnBhcnNlX2FyZ3NgLFxuICAgKiBleHBhbmQgdGhlIG9uZXMgZm9yIGV4dGVuc2lvbnMgaW50byBhIG5lc3RlZCBvYmplY3Qgc3RydWN0dXJlIGFuZCByZW5hbWVcbiAgICoga2V5cyB0byBtYXRjaCB0aGUgaW50ZW5kZWQgZGVzdGluYXRpb24uXG4gICAqXG4gICAqIEUuZy4sIGB7J2RyaXZlci1mb28tYmFyJzogYmF6fWAgYmVjb21lcyBge2RyaXZlcjoge2Zvbzoge2JhcjogJ2Jheid9fX1gXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzXG4gICAqIEByZXR1cm5zIHtvYmplY3R9XG4gICAqL1xuICBzdGF0aWMgX3RyYW5zZm9ybVBhcnNlZEFyZ3MgKGFyZ3MpIHtcbiAgICByZXR1cm4gXy5yZWR1Y2UoXG4gICAgICBhcmdzLFxuICAgICAgKHVucGFja2VkLCB2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgIGlmICghXy5pc1VuZGVmaW5lZCh2YWx1ZSkgJiYgaGFzQXJnU3BlYyhrZXkpKSB7XG4gICAgICAgICAgY29uc3Qge2Rlc3R9ID0gLyoqIEB0eXBlIHtpbXBvcnQoJy4uL3NjaGVtYS9hcmctc3BlYycpLkFyZ1NwZWN9ICovKGdldEFyZ1NwZWMoa2V5KSk7XG4gICAgICAgICAgXy5zZXQodW5wYWNrZWQsIGRlc3QsIHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyB0aGlzIGNvdWxkIGJlIGFueXRoaW5nIHRoYXQgX2lzbid0XyBhIHNlcnZlciBhcmdcbiAgICAgICAgICB1bnBhY2tlZFtrZXldID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVucGFja2VkO1xuICAgICAgfSxcbiAgICAgIHt9LFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUGF0Y2hlcyB0aGUgYGV4aXQoKWAgbWV0aG9kIG9mIHRoZSBwYXJzZXIgdG8gdGhyb3cgYW4gZXJyb3IsIHNvIHdlIGNhbiBoYW5kbGUgaXQgbWFudWFsbHkuXG4gICAqIEBwYXJhbSB7QXJndW1lbnRQYXJzZXJ9IHBhcnNlclxuICAgKi9cbiAgc3RhdGljIF9wYXRjaEV4aXQgKHBhcnNlcikge1xuICAgIHBhcnNlci5leGl0ID0gKGNvZGUsIG1zZykgPT4ge1xuICAgICAgaWYgKGNvZGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG4gICAgICB9XG4gICAgICBwcm9jZXNzLmV4aXQoKTtcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7aW1wb3J0KCdhcmdwYXJzZScpLlN1YlBhcnNlcn0gc3ViUGFyc2VyXG4gICAqIEByZXR1cm5zIHtpbXBvcnQoJy4vYXJncycpLkFyZ3VtZW50RGVmaW5pdGlvbnN9XG4gICAqL1xuICBzdGF0aWMgX2FkZFNlcnZlclRvUGFyc2VyIChzdWJQYXJzZXIpIHtcbiAgICBjb25zdCBzZXJ2ZXJQYXJzZXIgPSBzdWJQYXJzZXIuYWRkX3BhcnNlcignc2VydmVyJywge1xuICAgICAgYWRkX2hlbHA6IHRydWUsXG4gICAgICBoZWxwOiAnUnVuIGFuIEFwcGl1bSBzZXJ2ZXInLFxuICAgIH0pO1xuXG4gICAgQXJnUGFyc2VyLl9wYXRjaEV4aXQoc2VydmVyUGFyc2VyKTtcblxuICAgIGNvbnN0IHNlcnZlckFyZ3MgPSBnZXRTZXJ2ZXJBcmdzKCk7XG4gICAgZm9yIChjb25zdCBbZmxhZ3NPck5hbWVzLCBvcHRzXSBvZiBzZXJ2ZXJBcmdzKSB7XG4gICAgICAvLyBUUyBkb2Vzbid0IGxpa2UgdGhlIHNwcmVhZCBvcGVyYXRvciBoZXJlLlxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgc2VydmVyUGFyc2VyLmFkZF9hcmd1bWVudCguLi5mbGFnc09yTmFtZXMsIHsuLi5vcHRzfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNlcnZlckFyZ3M7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBleHRlbnNpb24gc3ViLXN1Yi1jb21tYW5kcyB0byBgZHJpdmVyYC9gcGx1Z2luYCBzdWJjb21tYW5kc1xuICAgKiBAcGFyYW0ge2ltcG9ydCgnYXJncGFyc2UnKS5TdWJQYXJzZXJ9IHN1YlBhcnNlcnNcbiAgICovXG4gIHN0YXRpYyBfYWRkRXh0ZW5zaW9uQ29tbWFuZHNUb1BhcnNlciAoc3ViUGFyc2Vycykge1xuICAgIGZvciAoY29uc3QgdHlwZSBvZiBbRFJJVkVSX1RZUEUsIFBMVUdJTl9UWVBFXSkge1xuICAgICAgY29uc3QgZXh0UGFyc2VyID0gc3ViUGFyc2Vycy5hZGRfcGFyc2VyKHR5cGUsIHtcbiAgICAgICAgYWRkX2hlbHA6IHRydWUsXG4gICAgICAgIGhlbHA6IGBBY2Nlc3MgdGhlICR7dHlwZX0gbWFuYWdlbWVudCBDTEkgY29tbWFuZHNgLFxuICAgICAgfSk7XG5cbiAgICAgIEFyZ1BhcnNlci5fcGF0Y2hFeGl0KGV4dFBhcnNlcik7XG5cbiAgICAgIGNvbnN0IGV4dFN1YlBhcnNlcnMgPSBleHRQYXJzZXIuYWRkX3N1YnBhcnNlcnMoe1xuICAgICAgICBkZXN0OiBgJHt0eXBlfUNvbW1hbmRgLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBleHRlbnNpb25BcmdzID0gZ2V0RXh0ZW5zaW9uQXJncygpO1xuICAgICAgY29uc3QgcGFyc2VyU3BlY3MgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBjb21tYW5kOiAnbGlzdCcsXG4gICAgICAgICAgYXJnczogZXh0ZW5zaW9uQXJnc1t0eXBlXS5saXN0LFxuICAgICAgICAgIGhlbHA6IGBMaXN0IGF2YWlsYWJsZSBhbmQgaW5zdGFsbGVkICR7dHlwZX1zYCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGNvbW1hbmQ6ICdpbnN0YWxsJyxcbiAgICAgICAgICBhcmdzOiBleHRlbnNpb25BcmdzW3R5cGVdLmluc3RhbGwsXG4gICAgICAgICAgaGVscDogYEluc3RhbGwgYSAke3R5cGV9YCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGNvbW1hbmQ6ICd1bmluc3RhbGwnLFxuICAgICAgICAgIGFyZ3M6IGV4dGVuc2lvbkFyZ3NbdHlwZV0udW5pbnN0YWxsLFxuICAgICAgICAgIGhlbHA6IGBVbmluc3RhbGwgYSAke3R5cGV9YCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGNvbW1hbmQ6ICd1cGRhdGUnLFxuICAgICAgICAgIGFyZ3M6IGV4dGVuc2lvbkFyZ3NbdHlwZV0udXBkYXRlLFxuICAgICAgICAgIGhlbHA6IGBVcGRhdGUgaW5zdGFsbGVkICR7dHlwZX1zIHRvIHRoZSBsYXRlc3QgdmVyc2lvbmAsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBjb21tYW5kOiAncnVuJyxcbiAgICAgICAgICBhcmdzOiBleHRlbnNpb25BcmdzW3R5cGVdLnJ1bixcbiAgICAgICAgICBoZWxwOlxuICAgICAgICAgICAgYFJ1biBhIHNjcmlwdCAoZGVmaW5lZCBpbnNpZGUgdGhlICR7dHlwZX0ncyBwYWNrYWdlLmpzb24gdW5kZXIgdGhlIGAgK1xuICAgICAgICAgICAgYOKAnHNjcmlwdHPigJ0gZmllbGQgaW5zaWRlIHRoZSDigJxhcHBpdW3igJ0gZmllbGQpIGZyb20gYW4gaW5zdGFsbGVkICR7dHlwZX1gLFxuICAgICAgICB9LFxuICAgICAgXTtcblxuICAgICAgZm9yIChjb25zdCB7Y29tbWFuZCwgYXJncywgaGVscH0gb2YgcGFyc2VyU3BlY3MpIHtcbiAgICAgICAgY29uc3QgcGFyc2VyID0gZXh0U3ViUGFyc2Vycy5hZGRfcGFyc2VyKGNvbW1hbmQsIHtoZWxwfSk7XG5cbiAgICAgICAgQXJnUGFyc2VyLl9wYXRjaEV4aXQocGFyc2VyKTtcblxuICAgICAgICBmb3IgKGNvbnN0IFtmbGFnc09yTmFtZXMsIG9wdHNdIG9mIGFyZ3MpIHtcbiAgICAgICAgICAvLyBhZGRfYXJndW1lbnQgbXV0YXRlcyBwYXJhbXMgc28gbWFrZSBzdXJlIHRvIHNlbmQgaW4gY29waWVzIGluc3RlYWRcbiAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCguLi5mbGFnc09yTmFtZXMsIHsuLi5vcHRzfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEge0BsaW5rIEFyZ1BhcnNlcn0gaW5zdGFuY2U7IGZpbmFsaXplcyB0aGUgY29uZmlnIHNjaGVtYS5cbiAqXG4gKiBAY29uc3RydWN0cyBBcmdQYXJzZXJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2RlYnVnXSAtIElmIGB0cnVlYCwgdGhyb3cgaW5zdGVhZCBvZiBleGl0IHVwb24gcGFyc2luZyBlcnJvclxuICogQHJldHVybnMge0FyZ1BhcnNlcn1cbiAqL1xuZnVuY3Rpb24gZ2V0UGFyc2VyIChkZWJ1Zykge1xuICBmaW5hbGl6ZVNjaGVtYSgpO1xuXG4gIHJldHVybiBuZXcgQXJnUGFyc2VyKGRlYnVnKTtcbn1cblxuZXhwb3J0IHsgZ2V0UGFyc2VyLCBBcmdQYXJzZXIgfTtcbiJdfQ==
@@ -0,0 +1,39 @@
1
+ export default class PluginCommand extends ExtensionCommand<any> {
2
+ /**
3
+ *
4
+ * @param {PluginCommandOptions} opts
5
+ */
6
+ constructor({ config, json }: PluginCommandOptions);
7
+ knownExtensions: Readonly<{
8
+ readonly images: "@appium/images-plugin";
9
+ readonly 'execute-driver': "@appium/execute-driver-plugin";
10
+ readonly 'relaxed-caps': "@appium/relaxed-caps-plugin";
11
+ }>;
12
+ install({ plugin, installType, packageName }: {
13
+ plugin: any;
14
+ installType: any;
15
+ packageName: any;
16
+ }): Promise<import("./extension-command").ExtRecord<any>>;
17
+ uninstall({ plugin }: {
18
+ plugin: any;
19
+ }): Promise<import("./extension-command").ExtRecord<any>>;
20
+ update({ plugin, unsafe }: {
21
+ plugin: any;
22
+ unsafe: any;
23
+ }): Promise<import("./extension-command").ExtensionUpdateResult>;
24
+ run({ plugin, scriptName }: {
25
+ plugin: any;
26
+ scriptName: any;
27
+ }): Promise<import("./extension-command").RunOutput>;
28
+ getPostInstallText({ extName, extData }: {
29
+ extName: any;
30
+ extData: any;
31
+ }): string;
32
+ validateExtensionFields(appiumPkgData: any): void;
33
+ }
34
+ export type PluginCommandOptions = {
35
+ config: import('../extension/extension-config').ExtensionConfig<import('../extension/manifest').PluginType>;
36
+ json: boolean;
37
+ };
38
+ import ExtensionCommand from "./extension-command";
39
+ //# sourceMappingURL=plugin-command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-command.d.ts","sourceRoot":"","sources":["../../../lib/cli/plugin-command.js"],"names":[],"mappings":"AAMA;IAEE;;;OAGG;IACH,8BAFW,oBAAoB,EAK9B;IADC;;;;OAAoC;IAGtC;;;;8DAEC;IAED;;8DAEC;IAED;;;qEAEC;IAED;;;yDAEC;IAED;;;eAEC;IAED,kDAUC;CAEF;;YAIa,OAAO,+BAA+B,EAAE,eAAe,CAAC,OAAO,uBAAuB,EAAE,UAAU,CAAC;UACnG,OAAO"}
@@ -13,9 +13,7 @@ var _lodash = _interopRequireDefault(require("lodash"));
13
13
 
14
14
  var _extensionCommand = _interopRequireDefault(require("./extension-command"));
15
15
 
16
- var _extensionConfig = require("../extension-config");
17
-
18
- var _plugins = require("../plugins");
16
+ var _constants = require("../constants");
19
17
 
20
18
  const REQ_PLUGIN_FIELDS = ['pluginName', 'mainClass'];
21
19
 
@@ -26,10 +24,9 @@ class PluginCommand extends _extensionCommand.default {
26
24
  }) {
27
25
  super({
28
26
  config,
29
- json,
30
- type: _extensionConfig.PLUGIN_TYPE
27
+ json
31
28
  });
32
- this.knownExtensions = _plugins.KNOWN_PLUGINS;
29
+ this.knownExtensions = _constants.KNOWN_PLUGINS;
33
30
  }
34
31
 
35
32
  async install({
@@ -37,7 +34,7 @@ class PluginCommand extends _extensionCommand.default {
37
34
  installType,
38
35
  packageName
39
36
  }) {
40
- return await super.install({
37
+ return await super._install({
41
38
  ext: plugin,
42
39
  installType,
43
40
  packageName
@@ -47,7 +44,7 @@ class PluginCommand extends _extensionCommand.default {
47
44
  async uninstall({
48
45
  plugin
49
46
  }) {
50
- return await super.uninstall({
47
+ return await super._uninstall({
51
48
  ext: plugin
52
49
  });
53
50
  }
@@ -56,7 +53,7 @@ class PluginCommand extends _extensionCommand.default {
56
53
  plugin,
57
54
  unsafe
58
55
  }) {
59
- return await super.update({
56
+ return await super._update({
60
57
  ext: plugin,
61
58
  unsafe
62
59
  });
@@ -66,7 +63,7 @@ class PluginCommand extends _extensionCommand.default {
66
63
  plugin,
67
64
  scriptName
68
65
  }) {
69
- return await super.run({
66
+ return await super._run({
70
67
  ext: plugin,
71
68
  scriptName
72
69
  });
@@ -89,7 +86,5 @@ class PluginCommand extends _extensionCommand.default {
89
86
 
90
87
  }
91
88
 
92
- exports.default = PluginCommand;require('source-map-support').install();
93
-
94
-
95
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jbGkvcGx1Z2luLWNvbW1hbmQuanMiXSwibmFtZXMiOlsiUkVRX1BMVUdJTl9GSUVMRFMiLCJQbHVnaW5Db21tYW5kIiwiRXh0ZW5zaW9uQ29tbWFuZCIsImNvbnN0cnVjdG9yIiwiY29uZmlnIiwianNvbiIsInR5cGUiLCJQTFVHSU5fVFlQRSIsImtub3duRXh0ZW5zaW9ucyIsIktOT1dOX1BMVUdJTlMiLCJpbnN0YWxsIiwicGx1Z2luIiwiaW5zdGFsbFR5cGUiLCJwYWNrYWdlTmFtZSIsImV4dCIsInVuaW5zdGFsbCIsInVwZGF0ZSIsInVuc2FmZSIsInJ1biIsInNjcmlwdE5hbWUiLCJnZXRQb3N0SW5zdGFsbFRleHQiLCJleHROYW1lIiwiZXh0RGF0YSIsInZlcnNpb24iLCJncmVlbiIsInZhbGlkYXRlRXh0ZW5zaW9uRmllbGRzIiwiYXBwaXVtUGtnRGF0YSIsIm1pc3NpbmdGaWVsZHMiLCJyZWR1Y2UiLCJhY2MiLCJmaWVsZCIsIl8iLCJpc0VtcHR5IiwiRXJyb3IiLCJKU09OIiwic3RyaW5naWZ5Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLE1BQU1BLGlCQUFpQixHQUFHLENBQUMsWUFBRCxFQUFlLFdBQWYsQ0FBMUI7O0FBRWUsTUFBTUMsYUFBTixTQUE0QkMseUJBQTVCLENBQTZDO0FBRTFEQyxFQUFBQSxXQUFXLENBQUU7QUFBQ0MsSUFBQUEsTUFBRDtBQUFTQyxJQUFBQTtBQUFULEdBQUYsRUFBa0I7QUFDM0IsVUFBTTtBQUFDRCxNQUFBQSxNQUFEO0FBQVNDLE1BQUFBLElBQVQ7QUFBZUMsTUFBQUEsSUFBSSxFQUFFQztBQUFyQixLQUFOO0FBQ0EsU0FBS0MsZUFBTCxHQUF1QkMsc0JBQXZCO0FBQ0Q7O0FBRVksUUFBUEMsT0FBTyxDQUFFO0FBQUNDLElBQUFBLE1BQUQ7QUFBU0MsSUFBQUEsV0FBVDtBQUFzQkMsSUFBQUE7QUFBdEIsR0FBRixFQUFzQztBQUNqRCxXQUFPLE1BQU0sTUFBTUgsT0FBTixDQUFjO0FBQUNJLE1BQUFBLEdBQUcsRUFBRUgsTUFBTjtBQUFjQyxNQUFBQSxXQUFkO0FBQTJCQyxNQUFBQTtBQUEzQixLQUFkLENBQWI7QUFDRDs7QUFFYyxRQUFURSxTQUFTLENBQUU7QUFBQ0osSUFBQUE7QUFBRCxHQUFGLEVBQVk7QUFDekIsV0FBTyxNQUFNLE1BQU1JLFNBQU4sQ0FBZ0I7QUFBQ0QsTUFBQUEsR0FBRyxFQUFFSDtBQUFOLEtBQWhCLENBQWI7QUFDRDs7QUFFVyxRQUFOSyxNQUFNLENBQUU7QUFBQ0wsSUFBQUEsTUFBRDtBQUFTTSxJQUFBQTtBQUFULEdBQUYsRUFBb0I7QUFDOUIsV0FBTyxNQUFNLE1BQU1ELE1BQU4sQ0FBYTtBQUFDRixNQUFBQSxHQUFHLEVBQUVILE1BQU47QUFBY00sTUFBQUE7QUFBZCxLQUFiLENBQWI7QUFDRDs7QUFFUSxRQUFIQyxHQUFHLENBQUU7QUFBQ1AsSUFBQUEsTUFBRDtBQUFTUSxJQUFBQTtBQUFULEdBQUYsRUFBd0I7QUFDL0IsV0FBTyxNQUFNLE1BQU1ELEdBQU4sQ0FBVTtBQUFDSixNQUFBQSxHQUFHLEVBQUVILE1BQU47QUFBY1EsTUFBQUE7QUFBZCxLQUFWLENBQWI7QUFDRDs7QUFFREMsRUFBQUEsa0JBQWtCLENBQUU7QUFBQ0MsSUFBQUEsT0FBRDtBQUFVQyxJQUFBQTtBQUFWLEdBQUYsRUFBc0I7QUFDdEMsV0FBUSxVQUFTRCxPQUFRLElBQUdDLE9BQU8sQ0FBQ0MsT0FBUSx5QkFBckMsQ0FBOERDLEtBQXJFO0FBQ0Q7O0FBRURDLEVBQUFBLHVCQUF1QixDQUFFQyxhQUFGLEVBQWlCO0FBQ3RDLFVBQU1DLGFBQWEsR0FBRzNCLGlCQUFpQixDQUFDNEIsTUFBbEIsQ0FBeUIsQ0FBQ0MsR0FBRCxFQUFNQyxLQUFOLEtBQzdDSixhQUFhLENBQUNJLEtBQUQsQ0FBYixHQUF1QkQsR0FBdkIsR0FBNkIsQ0FBQyxHQUFHQSxHQUFKLEVBQVNDLEtBQVQsQ0FEVCxFQUVuQixFQUZtQixDQUF0Qjs7QUFJQSxRQUFJLENBQUNDLGdCQUFFQyxPQUFGLENBQVVMLGFBQVYsQ0FBTCxFQUErQjtBQUM3QixZQUFNLElBQUlNLEtBQUosQ0FBVyxpRUFBRCxHQUNDLGdDQUErQkMsSUFBSSxDQUFDQyxTQUFMLENBQWVSLGFBQWYsQ0FBOEIsRUFEeEUsQ0FBTjtBQUVEO0FBRUY7O0FBckN5RCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgRXh0ZW5zaW9uQ29tbWFuZCBmcm9tICcuL2V4dGVuc2lvbi1jb21tYW5kJztcbmltcG9ydCB7IFBMVUdJTl9UWVBFIH0gZnJvbSAnLi4vZXh0ZW5zaW9uLWNvbmZpZyc7XG5pbXBvcnQgeyBLTk9XTl9QTFVHSU5TIH0gZnJvbSAnLi4vcGx1Z2lucyc7XG5cbmNvbnN0IFJFUV9QTFVHSU5fRklFTERTID0gWydwbHVnaW5OYW1lJywgJ21haW5DbGFzcyddO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQbHVnaW5Db21tYW5kIGV4dGVuZHMgRXh0ZW5zaW9uQ29tbWFuZCB7XG5cbiAgY29uc3RydWN0b3IgKHtjb25maWcsIGpzb259KSB7XG4gICAgc3VwZXIoe2NvbmZpZywganNvbiwgdHlwZTogUExVR0lOX1RZUEV9KTtcbiAgICB0aGlzLmtub3duRXh0ZW5zaW9ucyA9IEtOT1dOX1BMVUdJTlM7XG4gIH1cblxuICBhc3luYyBpbnN0YWxsICh7cGx1Z2luLCBpbnN0YWxsVHlwZSwgcGFja2FnZU5hbWV9KSB7XG4gICAgcmV0dXJuIGF3YWl0IHN1cGVyLmluc3RhbGwoe2V4dDogcGx1Z2luLCBpbnN0YWxsVHlwZSwgcGFja2FnZU5hbWV9KTtcbiAgfVxuXG4gIGFzeW5jIHVuaW5zdGFsbCAoe3BsdWdpbn0pIHtcbiAgICByZXR1cm4gYXdhaXQgc3VwZXIudW5pbnN0YWxsKHtleHQ6IHBsdWdpbn0pO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlICh7cGx1Z2luLCB1bnNhZmV9KSB7XG4gICAgcmV0dXJuIGF3YWl0IHN1cGVyLnVwZGF0ZSh7ZXh0OiBwbHVnaW4sIHVuc2FmZX0pO1xuICB9XG5cbiAgYXN5bmMgcnVuICh7cGx1Z2luLCBzY3JpcHROYW1lfSkge1xuICAgIHJldHVybiBhd2FpdCBzdXBlci5ydW4oe2V4dDogcGx1Z2luLCBzY3JpcHROYW1lfSk7XG4gIH1cblxuICBnZXRQb3N0SW5zdGFsbFRleHQgKHtleHROYW1lLCBleHREYXRhfSkge1xuICAgIHJldHVybiBgUGx1Z2luICR7ZXh0TmFtZX1AJHtleHREYXRhLnZlcnNpb259IHN1Y2Nlc3NmdWxseSBpbnN0YWxsZWRgLmdyZWVuO1xuICB9XG5cbiAgdmFsaWRhdGVFeHRlbnNpb25GaWVsZHMgKGFwcGl1bVBrZ0RhdGEpIHtcbiAgICBjb25zdCBtaXNzaW5nRmllbGRzID0gUkVRX1BMVUdJTl9GSUVMRFMucmVkdWNlKChhY2MsIGZpZWxkKSA9PiAoXG4gICAgICBhcHBpdW1Qa2dEYXRhW2ZpZWxkXSA/IGFjYyA6IFsuLi5hY2MsIGZpZWxkXVxuICAgICksIFtdKTtcblxuICAgIGlmICghXy5pc0VtcHR5KG1pc3NpbmdGaWVsZHMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEluc3RhbGxlZCBwbHVnaW4gZGlkIG5vdCBleHBvc2UgY29ycmVjdCBmaWVsZHMgZm9yIGNvbXBhYmlsaXR5IGAgK1xuICAgICAgICAgICAgICAgICAgICAgIGB3aXRoIEFwcGl1bS4gTWlzc2luZyBmaWVsZHM6ICR7SlNPTi5zdHJpbmdpZnkobWlzc2luZ0ZpZWxkcyl9YCk7XG4gICAgfVxuXG4gIH1cblxufVxuIl0sImZpbGUiOiJsaWIvY2xpL3BsdWdpbi1jb21tYW5kLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
89
+ exports.default = PluginCommand;
90
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9jbGkvcGx1Z2luLWNvbW1hbmQuanMiXSwibmFtZXMiOlsiUkVRX1BMVUdJTl9GSUVMRFMiLCJQbHVnaW5Db21tYW5kIiwiRXh0ZW5zaW9uQ29tbWFuZCIsImNvbnN0cnVjdG9yIiwiY29uZmlnIiwianNvbiIsImtub3duRXh0ZW5zaW9ucyIsIktOT1dOX1BMVUdJTlMiLCJpbnN0YWxsIiwicGx1Z2luIiwiaW5zdGFsbFR5cGUiLCJwYWNrYWdlTmFtZSIsIl9pbnN0YWxsIiwiZXh0IiwidW5pbnN0YWxsIiwiX3VuaW5zdGFsbCIsInVwZGF0ZSIsInVuc2FmZSIsIl91cGRhdGUiLCJydW4iLCJzY3JpcHROYW1lIiwiX3J1biIsImdldFBvc3RJbnN0YWxsVGV4dCIsImV4dE5hbWUiLCJleHREYXRhIiwidmVyc2lvbiIsImdyZWVuIiwidmFsaWRhdGVFeHRlbnNpb25GaWVsZHMiLCJhcHBpdW1Qa2dEYXRhIiwibWlzc2luZ0ZpZWxkcyIsInJlZHVjZSIsImFjYyIsImZpZWxkIiwiXyIsImlzRW1wdHkiLCJFcnJvciIsIkpTT04iLCJzdHJpbmdpZnkiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsaUJBQWlCLEdBQUcsQ0FBQyxZQUFELEVBQWUsV0FBZixDQUExQjs7QUFFZSxNQUFNQyxhQUFOLFNBQTRCQyx5QkFBNUIsQ0FBNkM7QUFNMURDLEVBQUFBLFdBQVcsQ0FBRTtBQUFDQyxJQUFBQSxNQUFEO0FBQVNDLElBQUFBO0FBQVQsR0FBRixFQUFrQjtBQUMzQixVQUFNO0FBQUNELE1BQUFBLE1BQUQ7QUFBU0MsTUFBQUE7QUFBVCxLQUFOO0FBQ0EsU0FBS0MsZUFBTCxHQUF1QkMsd0JBQXZCO0FBQ0Q7O0FBRVksUUFBUEMsT0FBTyxDQUFFO0FBQUNDLElBQUFBLE1BQUQ7QUFBU0MsSUFBQUEsV0FBVDtBQUFzQkMsSUFBQUE7QUFBdEIsR0FBRixFQUFzQztBQUNqRCxXQUFPLE1BQU0sTUFBTUMsUUFBTixDQUFlO0FBQUNDLE1BQUFBLEdBQUcsRUFBRUosTUFBTjtBQUFjQyxNQUFBQSxXQUFkO0FBQTJCQyxNQUFBQTtBQUEzQixLQUFmLENBQWI7QUFDRDs7QUFFYyxRQUFURyxTQUFTLENBQUU7QUFBQ0wsSUFBQUE7QUFBRCxHQUFGLEVBQVk7QUFDekIsV0FBTyxNQUFNLE1BQU1NLFVBQU4sQ0FBaUI7QUFBQ0YsTUFBQUEsR0FBRyxFQUFFSjtBQUFOLEtBQWpCLENBQWI7QUFDRDs7QUFFVyxRQUFOTyxNQUFNLENBQUU7QUFBQ1AsSUFBQUEsTUFBRDtBQUFTUSxJQUFBQTtBQUFULEdBQUYsRUFBb0I7QUFDOUIsV0FBTyxNQUFNLE1BQU1DLE9BQU4sQ0FBYztBQUFDTCxNQUFBQSxHQUFHLEVBQUVKLE1BQU47QUFBY1EsTUFBQUE7QUFBZCxLQUFkLENBQWI7QUFDRDs7QUFFUSxRQUFIRSxHQUFHLENBQUU7QUFBQ1YsSUFBQUEsTUFBRDtBQUFTVyxJQUFBQTtBQUFULEdBQUYsRUFBd0I7QUFDL0IsV0FBTyxNQUFNLE1BQU1DLElBQU4sQ0FBVztBQUFDUixNQUFBQSxHQUFHLEVBQUVKLE1BQU47QUFBY1csTUFBQUE7QUFBZCxLQUFYLENBQWI7QUFDRDs7QUFFREUsRUFBQUEsa0JBQWtCLENBQUU7QUFBQ0MsSUFBQUEsT0FBRDtBQUFVQyxJQUFBQTtBQUFWLEdBQUYsRUFBc0I7QUFDdEMsV0FBUSxVQUFTRCxPQUFRLElBQUdDLE9BQU8sQ0FBQ0MsT0FBUSx5QkFBckMsQ0FBOERDLEtBQXJFO0FBQ0Q7O0FBRURDLEVBQUFBLHVCQUF1QixDQUFFQyxhQUFGLEVBQWlCO0FBQ3RDLFVBQU1DLGFBQWEsR0FBRzdCLGlCQUFpQixDQUFDOEIsTUFBbEIsQ0FBeUIsQ0FBQ0MsR0FBRCxFQUFNQyxLQUFOLEtBQzdDSixhQUFhLENBQUNJLEtBQUQsQ0FBYixHQUF1QkQsR0FBdkIsR0FBNkIsQ0FBQyxHQUFHQSxHQUFKLEVBQVNDLEtBQVQsQ0FEVCxFQUVuQixFQUZtQixDQUF0Qjs7QUFJQSxRQUFJLENBQUNDLGdCQUFFQyxPQUFGLENBQVVMLGFBQVYsQ0FBTCxFQUErQjtBQUM3QixZQUFNLElBQUlNLEtBQUosQ0FBVyxpRUFBRCxHQUNDLGdDQUErQkMsSUFBSSxDQUFDQyxTQUFMLENBQWVSLGFBQWYsQ0FBOEIsRUFEeEUsQ0FBTjtBQUVEO0FBRUY7O0FBekN5RCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgRXh0ZW5zaW9uQ29tbWFuZCBmcm9tICcuL2V4dGVuc2lvbi1jb21tYW5kJztcbmltcG9ydCB7IEtOT1dOX1BMVUdJTlMgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuXG5jb25zdCBSRVFfUExVR0lOX0ZJRUxEUyA9IFsncGx1Z2luTmFtZScsICdtYWluQ2xhc3MnXTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGx1Z2luQ29tbWFuZCBleHRlbmRzIEV4dGVuc2lvbkNvbW1hbmQge1xuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge1BsdWdpbkNvbW1hbmRPcHRpb25zfSBvcHRzXG4gICAqL1xuICBjb25zdHJ1Y3RvciAoe2NvbmZpZywganNvbn0pIHtcbiAgICBzdXBlcih7Y29uZmlnLCBqc29ufSk7XG4gICAgdGhpcy5rbm93bkV4dGVuc2lvbnMgPSBLTk9XTl9QTFVHSU5TO1xuICB9XG5cbiAgYXN5bmMgaW5zdGFsbCAoe3BsdWdpbiwgaW5zdGFsbFR5cGUsIHBhY2thZ2VOYW1lfSkge1xuICAgIHJldHVybiBhd2FpdCBzdXBlci5faW5zdGFsbCh7ZXh0OiBwbHVnaW4sIGluc3RhbGxUeXBlLCBwYWNrYWdlTmFtZX0pO1xuICB9XG5cbiAgYXN5bmMgdW5pbnN0YWxsICh7cGx1Z2lufSkge1xuICAgIHJldHVybiBhd2FpdCBzdXBlci5fdW5pbnN0YWxsKHtleHQ6IHBsdWdpbn0pO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlICh7cGx1Z2luLCB1bnNhZmV9KSB7XG4gICAgcmV0dXJuIGF3YWl0IHN1cGVyLl91cGRhdGUoe2V4dDogcGx1Z2luLCB1bnNhZmV9KTtcbiAgfVxuXG4gIGFzeW5jIHJ1biAoe3BsdWdpbiwgc2NyaXB0TmFtZX0pIHtcbiAgICByZXR1cm4gYXdhaXQgc3VwZXIuX3J1bih7ZXh0OiBwbHVnaW4sIHNjcmlwdE5hbWV9KTtcbiAgfVxuXG4gIGdldFBvc3RJbnN0YWxsVGV4dCAoe2V4dE5hbWUsIGV4dERhdGF9KSB7XG4gICAgcmV0dXJuIGBQbHVnaW4gJHtleHROYW1lfUAke2V4dERhdGEudmVyc2lvbn0gc3VjY2Vzc2Z1bGx5IGluc3RhbGxlZGAuZ3JlZW47XG4gIH1cblxuICB2YWxpZGF0ZUV4dGVuc2lvbkZpZWxkcyAoYXBwaXVtUGtnRGF0YSkge1xuICAgIGNvbnN0IG1pc3NpbmdGaWVsZHMgPSBSRVFfUExVR0lOX0ZJRUxEUy5yZWR1Y2UoKGFjYywgZmllbGQpID0+IChcbiAgICAgIGFwcGl1bVBrZ0RhdGFbZmllbGRdID8gYWNjIDogWy4uLmFjYywgZmllbGRdXG4gICAgKSwgW10pO1xuXG4gICAgaWYgKCFfLmlzRW1wdHkobWlzc2luZ0ZpZWxkcykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW5zdGFsbGVkIHBsdWdpbiBkaWQgbm90IGV4cG9zZSBjb3JyZWN0IGZpZWxkcyBmb3IgY29tcGFiaWxpdHkgYCArXG4gICAgICAgICAgICAgICAgICAgICAgYHdpdGggQXBwaXVtLiBNaXNzaW5nIGZpZWxkczogJHtKU09OLnN0cmluZ2lmeShtaXNzaW5nRmllbGRzKX1gKTtcbiAgICB9XG5cbiAgfVxuXG59XG5cbi8qKlxuICogQHR5cGVkZWYgUGx1Z2luQ29tbWFuZE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KCcuLi9leHRlbnNpb24vZXh0ZW5zaW9uLWNvbmZpZycpLkV4dGVuc2lvbkNvbmZpZzxpbXBvcnQoJy4uL2V4dGVuc2lvbi9tYW5pZmVzdCcpLlBsdWdpblR5cGU+fSBjb25maWdcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0ganNvblxuICovXG4iXX0=
@@ -0,0 +1,29 @@
1
+ /***
2
+ * Log an error to the console and exit the process.
3
+ * @param {boolean} json - whether we should log json or text
4
+ * @param {any} msg - error message, object, Error instance, etc.
5
+ */
6
+ export function errAndQuit(json: boolean, msg: any): void;
7
+ /**
8
+ * Conditionally log something to the console
9
+ * @param {boolean} json - whether we are in json mode (and should therefore not log)
10
+ * @param {string} msg - string to log
11
+ */
12
+ export function log(json: boolean, msg: string): void;
13
+ /**
14
+ * Start a spinner, execute an async function, and then stop the spinner
15
+ * @param {boolean} json - whether we are in json mode (and should therefore not log)
16
+ * @param {string} msg - string to log
17
+ * @param {function} fn - function to wrap with spinning
18
+ */
19
+ export function spinWith(json: boolean, msg: string, fn: Function): Promise<any>;
20
+ export const JSON_SPACES: 4;
21
+ export class RingBuffer {
22
+ constructor(size?: number);
23
+ size: number;
24
+ buffer: any[];
25
+ getBuff(): any[];
26
+ dequeue(): void;
27
+ enqueue(item: any): void;
28
+ }
29
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../lib/cli/utils.js"],"names":[],"mappings":"AAMA;;;;GAIG;AACH,iCAHW,OAAO,OACP,GAAG,QAYb;AAED;;;;GAIG;AACH,0BAHW,OAAO,OACP,MAAM,QAIhB;AAED;;;;;GAKG;AACH,+BAJW,OAAO,OACP,MAAM,8BAiBhB;AAhDD,4BAAsB;AAkDtB;IACE,2BAGC;IAFC,aAAgB;IAChB,cAAgB;IAElB,iBAEC;IACD,gBAEC;IACD,yBAKC;CACF"}
@@ -79,7 +79,5 @@ class RingBuffer {
79
79
 
80
80
  }
81
81
 
82
- exports.RingBuffer = RingBuffer;require('source-map-support').install();
83
-
84
-
85
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jbGkvdXRpbHMuanMiXSwibmFtZXMiOlsiSlNPTl9TUEFDRVMiLCJlcnJBbmRRdWl0IiwianNvbiIsIm1zZyIsImNvbnNvbGUiLCJsb2ciLCJKU09OIiwic3RyaW5naWZ5IiwiZXJyb3IiLCJyZWQiLCJzdGRlcnIiLCJwcm9jZXNzIiwiZXhpdCIsInNwaW5XaXRoIiwiZm4iLCJzcGlubmVyIiwic3RhcnQiLCJyZXMiLCJzdWNjZWVkIiwiZXJyIiwiZmFpbCIsIlJpbmdCdWZmZXIiLCJjb25zdHJ1Y3RvciIsInNpemUiLCJidWZmZXIiLCJnZXRCdWZmIiwiZGVxdWV1ZSIsInNoaWZ0IiwiZW5xdWV1ZSIsIml0ZW0iLCJsZW5ndGgiLCJwdXNoIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQUVBOztBQUVBLE1BQU1BLFdBQVcsR0FBRyxDQUFwQjs7O0FBT0EsU0FBU0MsVUFBVCxDQUFxQkMsSUFBckIsRUFBMkJDLEdBQTNCLEVBQWdDO0FBQzlCLE1BQUlELElBQUosRUFBVTtBQUNSRSxJQUFBQSxPQUFPLENBQUNDLEdBQVIsQ0FBWUMsSUFBSSxDQUFDQyxTQUFMLENBQWU7QUFBQ0MsTUFBQUEsS0FBSyxFQUFHLEdBQUVMLEdBQUk7QUFBZixLQUFmLEVBQWtDLElBQWxDLEVBQXdDSCxXQUF4QyxDQUFaO0FBQ0QsR0FGRCxNQUVPO0FBQ0xJLElBQUFBLE9BQU8sQ0FBQ0ksS0FBUixDQUFlLEdBQUVMLEdBQUksRUFBUCxDQUFTTSxHQUF2Qjs7QUFDQSxRQUFJTixHQUFHLENBQUNPLE1BQVIsRUFBZ0I7QUFDZE4sTUFBQUEsT0FBTyxDQUFDSSxLQUFSLENBQWUsR0FBRUwsR0FBRyxDQUFDTyxNQUFPLEVBQWQsQ0FBZ0JELEdBQTlCO0FBQ0Q7QUFDRjs7QUFDREUsRUFBQUEsT0FBTyxDQUFDQyxJQUFSLENBQWEsQ0FBYjtBQUNEOztBQU9ELFNBQVNQLEdBQVQsQ0FBY0gsSUFBZCxFQUFvQkMsR0FBcEIsRUFBeUI7QUFDdkIsR0FBQ0QsSUFBRCxJQUFTRSxPQUFPLENBQUNDLEdBQVIsQ0FBWUYsR0FBWixDQUFUO0FBQ0Q7O0FBUUQsZUFBZVUsUUFBZixDQUF5QlgsSUFBekIsRUFBK0JDLEdBQS9CLEVBQW9DVyxFQUFwQyxFQUF3QztBQUN0QyxNQUFJWixJQUFKLEVBQVU7QUFDUixXQUFPLE1BQU1ZLEVBQUUsRUFBZjtBQUNEOztBQUNELFFBQU1DLE9BQU8sR0FBRyxrQkFBSVosR0FBSixFQUFTYSxLQUFULEVBQWhCO0FBQ0EsTUFBSUMsR0FBSjs7QUFDQSxNQUFJO0FBQ0ZBLElBQUFBLEdBQUcsR0FBRyxNQUFNSCxFQUFFLEVBQWQ7QUFDQUMsSUFBQUEsT0FBTyxDQUFDRyxPQUFSO0FBQ0EsV0FBT0QsR0FBUDtBQUNELEdBSkQsQ0FJRSxPQUFPRSxHQUFQLEVBQVk7QUFDWkosSUFBQUEsT0FBTyxDQUFDSyxJQUFSO0FBQ0EsVUFBTUQsR0FBTjtBQUNEO0FBQ0Y7O0FBRUQsTUFBTUUsVUFBTixDQUFpQjtBQUNmQyxFQUFBQSxXQUFXLENBQUVDLElBQUksR0FBRyxFQUFULEVBQWE7QUFDdEIsU0FBS0EsSUFBTCxHQUFZQSxJQUFaO0FBQ0EsU0FBS0MsTUFBTCxHQUFjLEVBQWQ7QUFDRDs7QUFDREMsRUFBQUEsT0FBTyxHQUFJO0FBQ1QsV0FBTyxLQUFLRCxNQUFaO0FBQ0Q7O0FBQ0RFLEVBQUFBLE9BQU8sR0FBSTtBQUNULFNBQUtGLE1BQUwsQ0FBWUcsS0FBWjtBQUNEOztBQUNEQyxFQUFBQSxPQUFPLENBQUVDLElBQUYsRUFBUTtBQUNiLFFBQUksS0FBS0wsTUFBTCxDQUFZTSxNQUFaLElBQXNCLEtBQUtQLElBQS9CLEVBQXFDO0FBQ25DLFdBQUtHLE9BQUw7QUFDRDs7QUFDRCxTQUFLRixNQUFMLENBQVlPLElBQVosQ0FBaUJGLElBQWpCO0FBQ0Q7O0FBaEJjIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tY29uc29sZSAqL1xuXG5pbXBvcnQgb3JhIGZyb20gJ29yYSc7XG5cbmNvbnN0IEpTT05fU1BBQ0VTID0gNDtcblxuLyoqKlxuICogTG9nIGFuIGVycm9yIHRvIHRoZSBjb25zb2xlIGFuZCBleGl0IHRoZSBwcm9jZXNzLlxuICogQHBhcmFtIHtib29sZWFufSBqc29uIC0gd2hldGhlciB3ZSBzaG91bGQgbG9nIGpzb24gb3IgdGV4dFxuICogQHBhcmFtIHtzdHJpbmd9IG1zZyAtIGVycm9yIG1lc3NhZ2VcbiAqL1xuZnVuY3Rpb24gZXJyQW5kUXVpdCAoanNvbiwgbXNnKSB7XG4gIGlmIChqc29uKSB7XG4gICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoe2Vycm9yOiBgJHttc2d9YH0sIG51bGwsIEpTT05fU1BBQ0VTKSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc29sZS5lcnJvcihgJHttc2d9YC5yZWQpO1xuICAgIGlmIChtc2cuc3RkZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGAke21zZy5zdGRlcnJ9YC5yZWQpO1xuICAgIH1cbiAgfVxuICBwcm9jZXNzLmV4aXQoMSk7XG59XG5cbi8qKlxuICogQ29uZGl0aW9uYWxseSBsb2cgc29tZXRoaW5nIHRvIHRoZSBjb25zb2xlXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGpzb24gLSB3aGV0aGVyIHdlIGFyZSBpbiBqc29uIG1vZGUgKGFuZCBzaG91bGQgdGhlcmVmb3JlIG5vdCBsb2cpXG4gKiBAcGFyYW0ge3N0cmluZ30gbXNnIC0gc3RyaW5nIHRvIGxvZ1xuICovXG5mdW5jdGlvbiBsb2cgKGpzb24sIG1zZykge1xuICAhanNvbiAmJiBjb25zb2xlLmxvZyhtc2cpO1xufVxuXG4vKipcbiAqIFN0YXJ0IGEgc3Bpbm5lciwgZXhlY3V0ZSBhbiBhc3luYyBmdW5jdGlvbiwgYW5kIHRoZW4gc3RvcCB0aGUgc3Bpbm5lclxuICogQHBhcmFtIHtib29sZWFufSBqc29uIC0gd2hldGhlciB3ZSBhcmUgaW4ganNvbiBtb2RlIChhbmQgc2hvdWxkIHRoZXJlZm9yZSBub3QgbG9nKVxuICogQHBhcmFtIHtzdHJpbmd9IG1zZyAtIHN0cmluZyB0byBsb2dcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGZuIC0gZnVuY3Rpb24gdG8gd3JhcCB3aXRoIHNwaW5uaW5nXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHNwaW5XaXRoIChqc29uLCBtc2csIGZuKSB7XG4gIGlmIChqc29uKSB7XG4gICAgcmV0dXJuIGF3YWl0IGZuKCk7XG4gIH1cbiAgY29uc3Qgc3Bpbm5lciA9IG9yYShtc2cpLnN0YXJ0KCk7XG4gIGxldCByZXM7XG4gIHRyeSB7XG4gICAgcmVzID0gYXdhaXQgZm4oKTtcbiAgICBzcGlubmVyLnN1Y2NlZWQoKTtcbiAgICByZXR1cm4gcmVzO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBzcGlubmVyLmZhaWwoKTtcbiAgICB0aHJvdyBlcnI7XG4gIH1cbn1cblxuY2xhc3MgUmluZ0J1ZmZlciB7XG4gIGNvbnN0cnVjdG9yIChzaXplID0gNTApIHtcbiAgICB0aGlzLnNpemUgPSBzaXplO1xuICAgIHRoaXMuYnVmZmVyID0gW107XG4gIH1cbiAgZ2V0QnVmZiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuYnVmZmVyO1xuICB9XG4gIGRlcXVldWUgKCkge1xuICAgIHRoaXMuYnVmZmVyLnNoaWZ0KCk7XG4gIH1cbiAgZW5xdWV1ZSAoaXRlbSkge1xuICAgIGlmICh0aGlzLmJ1ZmZlci5sZW5ndGggPj0gdGhpcy5zaXplKSB7XG4gICAgICB0aGlzLmRlcXVldWUoKTtcbiAgICB9XG4gICAgdGhpcy5idWZmZXIucHVzaChpdGVtKTtcbiAgfVxufVxuXG5leHBvcnQge1xuICBlcnJBbmRRdWl0LFxuICBsb2csXG4gIHNwaW5XaXRoLFxuICBKU09OX1NQQUNFUyxcbiAgUmluZ0J1ZmZlclxufTtcbiJdLCJmaWxlIjoibGliL2NsaS91dGlscy5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9
82
+ exports.RingBuffer = RingBuffer;
83
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9jbGkvdXRpbHMuanMiXSwibmFtZXMiOlsiSlNPTl9TUEFDRVMiLCJlcnJBbmRRdWl0IiwianNvbiIsIm1zZyIsImNvbnNvbGUiLCJsb2ciLCJKU09OIiwic3RyaW5naWZ5IiwiZXJyb3IiLCJyZWQiLCJzdGRlcnIiLCJwcm9jZXNzIiwiZXhpdCIsInNwaW5XaXRoIiwiZm4iLCJzcGlubmVyIiwic3RhcnQiLCJyZXMiLCJzdWNjZWVkIiwiZXJyIiwiZmFpbCIsIlJpbmdCdWZmZXIiLCJjb25zdHJ1Y3RvciIsInNpemUiLCJidWZmZXIiLCJnZXRCdWZmIiwiZGVxdWV1ZSIsInNoaWZ0IiwiZW5xdWV1ZSIsIml0ZW0iLCJsZW5ndGgiLCJwdXNoIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQUVBOztBQUVBLE1BQU1BLFdBQVcsR0FBRyxDQUFwQjs7O0FBT0EsU0FBU0MsVUFBVCxDQUFxQkMsSUFBckIsRUFBMkJDLEdBQTNCLEVBQWdDO0FBQzlCLE1BQUlELElBQUosRUFBVTtBQUNSRSxJQUFBQSxPQUFPLENBQUNDLEdBQVIsQ0FBWUMsSUFBSSxDQUFDQyxTQUFMLENBQWU7QUFBQ0MsTUFBQUEsS0FBSyxFQUFHLEdBQUVMLEdBQUk7QUFBZixLQUFmLEVBQWtDLElBQWxDLEVBQXdDSCxXQUF4QyxDQUFaO0FBQ0QsR0FGRCxNQUVPO0FBQ0xJLElBQUFBLE9BQU8sQ0FBQ0ksS0FBUixDQUFlLEdBQUVMLEdBQUksRUFBUCxDQUFTTSxHQUF2Qjs7QUFDQSxRQUFJTixHQUFHLENBQUNPLE1BQVIsRUFBZ0I7QUFDZE4sTUFBQUEsT0FBTyxDQUFDSSxLQUFSLENBQWUsR0FBRUwsR0FBRyxDQUFDTyxNQUFPLEVBQWQsQ0FBZ0JELEdBQTlCO0FBQ0Q7QUFDRjs7QUFDREUsRUFBQUEsT0FBTyxDQUFDQyxJQUFSLENBQWEsQ0FBYjtBQUNEOztBQU9ELFNBQVNQLEdBQVQsQ0FBY0gsSUFBZCxFQUFvQkMsR0FBcEIsRUFBeUI7QUFDdkIsR0FBQ0QsSUFBRCxJQUFTRSxPQUFPLENBQUNDLEdBQVIsQ0FBWUYsR0FBWixDQUFUO0FBQ0Q7O0FBUUQsZUFBZVUsUUFBZixDQUF5QlgsSUFBekIsRUFBK0JDLEdBQS9CLEVBQW9DVyxFQUFwQyxFQUF3QztBQUN0QyxNQUFJWixJQUFKLEVBQVU7QUFDUixXQUFPLE1BQU1ZLEVBQUUsRUFBZjtBQUNEOztBQUNELFFBQU1DLE9BQU8sR0FBRyxrQkFBSVosR0FBSixFQUFTYSxLQUFULEVBQWhCO0FBQ0EsTUFBSUMsR0FBSjs7QUFDQSxNQUFJO0FBQ0ZBLElBQUFBLEdBQUcsR0FBRyxNQUFNSCxFQUFFLEVBQWQ7QUFDQUMsSUFBQUEsT0FBTyxDQUFDRyxPQUFSO0FBQ0EsV0FBT0QsR0FBUDtBQUNELEdBSkQsQ0FJRSxPQUFPRSxHQUFQLEVBQVk7QUFDWkosSUFBQUEsT0FBTyxDQUFDSyxJQUFSO0FBQ0EsVUFBTUQsR0FBTjtBQUNEO0FBQ0Y7O0FBRUQsTUFBTUUsVUFBTixDQUFpQjtBQUNmQyxFQUFBQSxXQUFXLENBQUVDLElBQUksR0FBRyxFQUFULEVBQWE7QUFDdEIsU0FBS0EsSUFBTCxHQUFZQSxJQUFaO0FBQ0EsU0FBS0MsTUFBTCxHQUFjLEVBQWQ7QUFDRDs7QUFDREMsRUFBQUEsT0FBTyxHQUFJO0FBQ1QsV0FBTyxLQUFLRCxNQUFaO0FBQ0Q7O0FBQ0RFLEVBQUFBLE9BQU8sR0FBSTtBQUNULFNBQUtGLE1BQUwsQ0FBWUcsS0FBWjtBQUNEOztBQUNEQyxFQUFBQSxPQUFPLENBQUVDLElBQUYsRUFBUTtBQUNiLFFBQUksS0FBS0wsTUFBTCxDQUFZTSxNQUFaLElBQXNCLEtBQUtQLElBQS9CLEVBQXFDO0FBQ25DLFdBQUtHLE9BQUw7QUFDRDs7QUFDRCxTQUFLRixNQUFMLENBQVlPLElBQVosQ0FBaUJGLElBQWpCO0FBQ0Q7O0FBaEJjIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tY29uc29sZSAqL1xuXG5pbXBvcnQgb3JhIGZyb20gJ29yYSc7XG5cbmNvbnN0IEpTT05fU1BBQ0VTID0gNDtcblxuLyoqKlxuICogTG9nIGFuIGVycm9yIHRvIHRoZSBjb25zb2xlIGFuZCBleGl0IHRoZSBwcm9jZXNzLlxuICogQHBhcmFtIHtib29sZWFufSBqc29uIC0gd2hldGhlciB3ZSBzaG91bGQgbG9nIGpzb24gb3IgdGV4dFxuICogQHBhcmFtIHthbnl9IG1zZyAtIGVycm9yIG1lc3NhZ2UsIG9iamVjdCwgRXJyb3IgaW5zdGFuY2UsIGV0Yy5cbiAqL1xuZnVuY3Rpb24gZXJyQW5kUXVpdCAoanNvbiwgbXNnKSB7XG4gIGlmIChqc29uKSB7XG4gICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoe2Vycm9yOiBgJHttc2d9YH0sIG51bGwsIEpTT05fU1BBQ0VTKSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc29sZS5lcnJvcihgJHttc2d9YC5yZWQpO1xuICAgIGlmIChtc2cuc3RkZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGAke21zZy5zdGRlcnJ9YC5yZWQpO1xuICAgIH1cbiAgfVxuICBwcm9jZXNzLmV4aXQoMSk7XG59XG5cbi8qKlxuICogQ29uZGl0aW9uYWxseSBsb2cgc29tZXRoaW5nIHRvIHRoZSBjb25zb2xlXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGpzb24gLSB3aGV0aGVyIHdlIGFyZSBpbiBqc29uIG1vZGUgKGFuZCBzaG91bGQgdGhlcmVmb3JlIG5vdCBsb2cpXG4gKiBAcGFyYW0ge3N0cmluZ30gbXNnIC0gc3RyaW5nIHRvIGxvZ1xuICovXG5mdW5jdGlvbiBsb2cgKGpzb24sIG1zZykge1xuICAhanNvbiAmJiBjb25zb2xlLmxvZyhtc2cpO1xufVxuXG4vKipcbiAqIFN0YXJ0IGEgc3Bpbm5lciwgZXhlY3V0ZSBhbiBhc3luYyBmdW5jdGlvbiwgYW5kIHRoZW4gc3RvcCB0aGUgc3Bpbm5lclxuICogQHBhcmFtIHtib29sZWFufSBqc29uIC0gd2hldGhlciB3ZSBhcmUgaW4ganNvbiBtb2RlIChhbmQgc2hvdWxkIHRoZXJlZm9yZSBub3QgbG9nKVxuICogQHBhcmFtIHtzdHJpbmd9IG1zZyAtIHN0cmluZyB0byBsb2dcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGZuIC0gZnVuY3Rpb24gdG8gd3JhcCB3aXRoIHNwaW5uaW5nXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHNwaW5XaXRoIChqc29uLCBtc2csIGZuKSB7XG4gIGlmIChqc29uKSB7XG4gICAgcmV0dXJuIGF3YWl0IGZuKCk7XG4gIH1cbiAgY29uc3Qgc3Bpbm5lciA9IG9yYShtc2cpLnN0YXJ0KCk7XG4gIGxldCByZXM7XG4gIHRyeSB7XG4gICAgcmVzID0gYXdhaXQgZm4oKTtcbiAgICBzcGlubmVyLnN1Y2NlZWQoKTtcbiAgICByZXR1cm4gcmVzO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBzcGlubmVyLmZhaWwoKTtcbiAgICB0aHJvdyBlcnI7XG4gIH1cbn1cblxuY2xhc3MgUmluZ0J1ZmZlciB7XG4gIGNvbnN0cnVjdG9yIChzaXplID0gNTApIHtcbiAgICB0aGlzLnNpemUgPSBzaXplO1xuICAgIHRoaXMuYnVmZmVyID0gW107XG4gIH1cbiAgZ2V0QnVmZiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuYnVmZmVyO1xuICB9XG4gIGRlcXVldWUgKCkge1xuICAgIHRoaXMuYnVmZmVyLnNoaWZ0KCk7XG4gIH1cbiAgZW5xdWV1ZSAoaXRlbSkge1xuICAgIGlmICh0aGlzLmJ1ZmZlci5sZW5ndGggPj0gdGhpcy5zaXplKSB7XG4gICAgICB0aGlzLmRlcXVldWUoKTtcbiAgICB9XG4gICAgdGhpcy5idWZmZXIucHVzaChpdGVtKTtcbiAgfVxufVxuXG5leHBvcnQge1xuICBlcnJBbmRRdWl0LFxuICBsb2csXG4gIHNwaW5XaXRoLFxuICBKU09OX1NQQUNFUyxcbiAgUmluZ0J1ZmZlclxufTtcbiJdfQ==
@@ -0,0 +1,100 @@
1
+ /**
2
+ * Given an array of errors and the result of loading a config file, generate a
3
+ * helpful string for the user.
4
+ *
5
+ * - If `opts` contains a `json` property, this should be the original JSON
6
+ * _string_ of the config file. This is only applicable if the config file
7
+ * was in JSON format. If present, it will associate line numbers with errors.
8
+ * - If `errors` happens to be empty, this will throw.
9
+ * @param {import('ajv').ErrorObject[]} errors - Non-empty array of errors. Required.
10
+ * @param {ReadConfigFileResult['config']|any} [config] -
11
+ * Configuration & metadata
12
+ * @param {FormatConfigErrorsOptions} [opts]
13
+ * @throws {TypeError} If `errors` is empty
14
+ * @returns {string}
15
+ */
16
+ export function formatErrors(errors?: import('ajv').ErrorObject[], config?: ReadConfigFileResult['config'] | any, opts?: FormatConfigErrorsOptions | undefined): string;
17
+ /**
18
+ * Given an optional path, read a config file. Validates the config file.
19
+ *
20
+ * Call {@link validate} if you already have a config object.
21
+ * @param {string} [filepath] - Path to config file, if we have one
22
+ * @param {ReadConfigFileOptions} [opts] - Options
23
+ * @public
24
+ * @returns {Promise<ReadConfigFileResult>} Contains config and filepath, if found, and any errors
25
+ */
26
+ export function readConfigFile(filepath?: string | undefined, opts?: ReadConfigFileOptions | undefined): Promise<ReadConfigFileResult>;
27
+ /**
28
+ * Convert schema property names to either a) the value of the `appiumCliDest` property, if any; or b) camel-case
29
+ * @param {AppiumConfig} config - Configuration object
30
+ * @returns {NormalizedAppiumConfig} New object with camel-cased keys (or `dest` keys).
31
+ */
32
+ export function normalizeConfig(config: AppiumConfig): NormalizedAppiumConfig;
33
+ /**
34
+ * Result of calling {@link readConfigFile }.
35
+ */
36
+ export type ReadConfigFileResult = {
37
+ /**
38
+ * - Validation errors
39
+ */
40
+ errors?: import("ajv").ErrorObject<string, Record<string, any>, any>[] | undefined;
41
+ /**
42
+ * - The path to the config file, if found
43
+ */
44
+ filepath?: string | undefined;
45
+ /**
46
+ * - If `true`, the config file exists but is empty
47
+ */
48
+ isEmpty?: boolean | undefined;
49
+ /**
50
+ * - The parsed configuration
51
+ */
52
+ config?: import("@appium/types").NormalizedAppiumConfig | undefined;
53
+ /**
54
+ * - Human-readable error messages and suggestions. If the `pretty` option is `true`, this will be a nice string to print.
55
+ */
56
+ reason?: string | import("@sidvind/better-ajv-errors").IOutputError[] | undefined;
57
+ };
58
+ /**
59
+ * Options for {@link readConfigFile }.
60
+ */
61
+ export type ReadConfigFileOptions = {
62
+ /**
63
+ * If `false`, do not use color and fancy formatting in the `reason` property of the {@link ReadConfigFileResult }. The value of `reason` is then suitable for machine-reading.
64
+ */
65
+ pretty?: boolean | undefined;
66
+ };
67
+ /**
68
+ * This is an `AsyncSearcher` which is inexplicably _not_ exported by the `lilconfig` type definition.
69
+ */
70
+ export type LilconfigAsyncSearcher = ReturnType<typeof import("lilconfig")["lilconfig"]>;
71
+ /**
72
+ * The contents of an Appium config file. Generated from schema
73
+ */
74
+ export type AppiumConfig = import('@appium/types').AppiumConfig;
75
+ /**
76
+ * The contents of an Appium config file with camelcased property names (and using `appiumCliDest` value if present). Generated from {@link AppiumConfig }
77
+ */
78
+ export type NormalizedAppiumConfig = import('@appium/types').NormalizedAppiumConfig;
79
+ /**
80
+ * The string should be a raw JSON string.
81
+ */
82
+ export type RawJson = string;
83
+ /**
84
+ * Options for {@link formatErrors }.
85
+ */
86
+ export type FormatConfigErrorsOptions = {
87
+ /**
88
+ * - Raw JSON config (as string)
89
+ */
90
+ json?: string | undefined;
91
+ /**
92
+ * - Whether to format errors as a CLI-friendly string
93
+ */
94
+ pretty?: boolean | undefined;
95
+ /**
96
+ * - Specific ID of a prop; otherwise entire schema
97
+ */
98
+ schemaId?: string | undefined;
99
+ };
100
+ //# sourceMappingURL=config-file.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-file.d.ts","sourceRoot":"","sources":["../../lib/config-file.js"],"names":[],"mappings":"AAiEA;;;;;;;;;;;;;;GAcG;AACH,sCAPW,OAAO,KAAK,EAAE,WAAW,EAAE,WAC3B,oBAAoB,CAAC,QAAQ,CAAC,GAAC,GAAG,iDAIhC,MAAM,CAUlB;AAED;;;;;;;;GAQG;AACH,yGAFa,QAAQ,oBAAoB,CAAC,CA8CzC;AAED;;;;GAIG;AACH,wCAHW,YAAY,GACV,sBAAsB,CA8BlC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qCAoBY,WAAW,2BAAoB,WAAW,CAAC,CAAC;;;;2BAK5C,OAAO,eAAe,EAAE,YAAY;;;;qCAKpC,OAAO,eAAe,EAAE,sBAAsB;;;;sBAK9C,MAAM"}