appium 2.0.0-beta.4 → 2.0.0-beta.42

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 (153) hide show
  1. package/README.md +10 -11
  2. package/build/lib/appium.d.ts +204 -0
  3. package/build/lib/appium.d.ts.map +1 -0
  4. package/build/lib/appium.js +256 -131
  5. package/build/lib/cli/args.d.ts +17 -0
  6. package/build/lib/cli/args.d.ts.map +1 -0
  7. package/build/lib/cli/args.js +96 -282
  8. package/build/lib/cli/driver-command.d.ts +37 -0
  9. package/build/lib/cli/driver-command.d.ts.map +1 -0
  10. package/build/lib/cli/driver-command.js +27 -18
  11. package/build/lib/cli/extension-command.d.ts +376 -0
  12. package/build/lib/cli/extension-command.d.ts.map +1 -0
  13. package/build/lib/cli/extension-command.js +287 -156
  14. package/build/lib/cli/extension.d.ts +22 -0
  15. package/build/lib/cli/extension.d.ts.map +1 -0
  16. package/build/lib/cli/extension.js +31 -17
  17. package/build/lib/cli/parser.d.ts +84 -0
  18. package/build/lib/cli/parser.d.ts.map +1 -0
  19. package/build/lib/cli/parser.js +164 -94
  20. package/build/lib/cli/plugin-command.d.ts +34 -0
  21. package/build/lib/cli/plugin-command.d.ts.map +1 -0
  22. package/build/lib/cli/plugin-command.js +26 -19
  23. package/build/lib/cli/utils.d.ts +29 -0
  24. package/build/lib/cli/utils.d.ts.map +1 -0
  25. package/build/lib/cli/utils.js +27 -3
  26. package/build/lib/config-file.d.ts +100 -0
  27. package/build/lib/config-file.d.ts.map +1 -0
  28. package/build/lib/config-file.js +136 -0
  29. package/build/lib/config.d.ts +49 -0
  30. package/build/lib/config.d.ts.map +1 -0
  31. package/build/lib/config.js +119 -96
  32. package/build/lib/constants.d.ts +48 -0
  33. package/build/lib/constants.d.ts.map +1 -0
  34. package/build/lib/constants.js +60 -0
  35. package/build/lib/extension/driver-config.d.ts +81 -0
  36. package/build/lib/extension/driver-config.d.ts.map +1 -0
  37. package/build/lib/extension/driver-config.js +177 -0
  38. package/build/lib/extension/extension-config.d.ts +242 -0
  39. package/build/lib/extension/extension-config.d.ts.map +1 -0
  40. package/build/lib/extension/extension-config.js +436 -0
  41. package/build/lib/extension/index.d.ts +48 -0
  42. package/build/lib/extension/index.d.ts.map +1 -0
  43. package/build/lib/extension/index.js +75 -0
  44. package/build/lib/extension/manifest.d.ts +174 -0
  45. package/build/lib/extension/manifest.d.ts.map +1 -0
  46. package/build/lib/extension/manifest.js +256 -0
  47. package/build/lib/extension/package-changed.d.ts +11 -0
  48. package/build/lib/extension/package-changed.d.ts.map +1 -0
  49. package/build/lib/extension/package-changed.js +66 -0
  50. package/build/lib/extension/plugin-config.d.ts +57 -0
  51. package/build/lib/extension/plugin-config.d.ts.map +1 -0
  52. package/build/lib/extension/plugin-config.js +78 -0
  53. package/build/lib/grid-register.d.ts +10 -0
  54. package/build/lib/grid-register.d.ts.map +1 -0
  55. package/build/lib/grid-register.js +21 -25
  56. package/build/lib/logger.d.ts +3 -0
  57. package/build/lib/logger.d.ts.map +1 -0
  58. package/build/lib/logger.js +4 -6
  59. package/build/lib/logsink.d.ts +4 -0
  60. package/build/lib/logsink.d.ts.map +1 -0
  61. package/build/lib/logsink.js +14 -17
  62. package/build/lib/main.d.ts +55 -0
  63. package/build/lib/main.d.ts.map +1 -0
  64. package/build/lib/main.js +183 -91
  65. package/build/lib/schema/arg-spec.d.ts +143 -0
  66. package/build/lib/schema/arg-spec.d.ts.map +1 -0
  67. package/build/lib/schema/arg-spec.js +119 -0
  68. package/build/lib/schema/cli-args.d.ts +19 -0
  69. package/build/lib/schema/cli-args.d.ts.map +1 -0
  70. package/build/lib/schema/cli-args.js +178 -0
  71. package/build/lib/schema/cli-transformers.d.ts +5 -0
  72. package/build/lib/schema/cli-transformers.d.ts.map +1 -0
  73. package/build/lib/schema/cli-transformers.js +74 -0
  74. package/build/lib/schema/index.d.ts +3 -0
  75. package/build/lib/schema/index.d.ts.map +1 -0
  76. package/build/lib/schema/index.js +34 -0
  77. package/build/lib/schema/keywords.d.ts +24 -0
  78. package/build/lib/schema/keywords.d.ts.map +1 -0
  79. package/build/lib/schema/keywords.js +70 -0
  80. package/build/lib/schema/schema.d.ts +259 -0
  81. package/build/lib/schema/schema.d.ts.map +1 -0
  82. package/build/lib/schema/schema.js +450 -0
  83. package/build/lib/utils.d.ts +66 -0
  84. package/build/lib/utils.d.ts.map +1 -0
  85. package/build/lib/utils.js +35 -139
  86. package/build/tsconfig.tsbuildinfo +1 -0
  87. package/build/types/appium-manifest.d.ts +59 -0
  88. package/build/types/appium-manifest.d.ts.map +1 -0
  89. package/build/types/cli.d.ts +123 -0
  90. package/build/types/cli.d.ts.map +1 -0
  91. package/build/types/extension-manifest.d.ts +55 -0
  92. package/build/types/extension-manifest.d.ts.map +1 -0
  93. package/build/types/index.d.ts +16 -0
  94. package/build/types/index.d.ts.map +1 -0
  95. package/driver.d.ts +1 -0
  96. package/driver.js +14 -0
  97. package/index.js +11 -0
  98. package/lib/appium.js +520 -186
  99. package/lib/cli/args.js +267 -422
  100. package/lib/cli/driver-command.js +58 -23
  101. package/lib/cli/extension-command.js +613 -260
  102. package/lib/cli/extension.js +47 -17
  103. package/lib/cli/parser.js +263 -83
  104. package/lib/cli/plugin-command.js +48 -20
  105. package/lib/cli/utils.js +24 -10
  106. package/lib/config-file.js +219 -0
  107. package/lib/config.js +243 -110
  108. package/lib/constants.js +69 -0
  109. package/lib/extension/driver-config.js +249 -0
  110. package/lib/extension/extension-config.js +677 -0
  111. package/lib/extension/index.js +116 -0
  112. package/lib/extension/manifest.js +475 -0
  113. package/lib/extension/package-changed.js +64 -0
  114. package/lib/extension/plugin-config.js +113 -0
  115. package/lib/grid-register.js +49 -35
  116. package/lib/logger.js +1 -2
  117. package/lib/logsink.js +38 -33
  118. package/lib/main.js +308 -100
  119. package/lib/schema/arg-spec.js +229 -0
  120. package/lib/schema/cli-args.js +238 -0
  121. package/lib/schema/cli-transformers.js +115 -0
  122. package/lib/schema/index.js +2 -0
  123. package/lib/schema/keywords.js +136 -0
  124. package/lib/schema/schema.js +717 -0
  125. package/lib/utils.js +121 -140
  126. package/package.json +85 -85
  127. package/plugin.d.ts +1 -0
  128. package/plugin.js +13 -0
  129. package/scripts/autoinstall-extensions.js +185 -0
  130. package/support.d.ts +1 -0
  131. package/support.js +13 -0
  132. package/test.d.ts +7 -0
  133. package/test.js +13 -0
  134. package/types/appium-manifest.ts +73 -0
  135. package/types/cli.ts +150 -0
  136. package/types/extension-manifest.ts +64 -0
  137. package/types/index.ts +21 -0
  138. package/CHANGELOG.md +0 -3515
  139. package/bin/ios-webkit-debug-proxy-launcher.js +0 -71
  140. package/build/lib/cli/npm.js +0 -206
  141. package/build/lib/cli/parser-helpers.js +0 -82
  142. package/build/lib/driver-config.js +0 -77
  143. package/build/lib/drivers.js +0 -96
  144. package/build/lib/extension-config.js +0 -253
  145. package/build/lib/plugin-config.js +0 -59
  146. package/build/lib/plugins.js +0 -14
  147. package/lib/cli/npm.js +0 -183
  148. package/lib/cli/parser-helpers.js +0 -79
  149. package/lib/driver-config.js +0 -46
  150. package/lib/drivers.js +0 -81
  151. package/lib/extension-config.js +0 -209
  152. package/lib/plugin-config.js +0 -34
  153. package/lib/plugins.js +0 -10
@@ -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,8 +34,8 @@ class PluginCommand extends _extensionCommand.default {
37
34
  installType,
38
35
  packageName
39
36
  }) {
40
- return await super.install({
41
- ext: plugin,
37
+ return await super._install({
38
+ installSpec: plugin,
42
39
  installType,
43
40
  packageName
44
41
  });
@@ -47,8 +44,8 @@ class PluginCommand extends _extensionCommand.default {
47
44
  async uninstall({
48
45
  plugin
49
46
  }) {
50
- return await super.uninstall({
51
- ext: plugin
47
+ return await super._uninstall({
48
+ installSpec: plugin
52
49
  });
53
50
  }
54
51
 
@@ -56,12 +53,24 @@ class PluginCommand extends _extensionCommand.default {
56
53
  plugin,
57
54
  unsafe
58
55
  }) {
59
- return await super.update({
60
- ext: plugin,
56
+ return await super._update({
57
+ installSpec: plugin,
61
58
  unsafe
62
59
  });
63
60
  }
64
61
 
62
+ async run({
63
+ plugin,
64
+ scriptName,
65
+ extraArgs
66
+ }) {
67
+ return await super._run({
68
+ installSpec: plugin,
69
+ scriptName,
70
+ extraArgs
71
+ });
72
+ }
73
+
65
74
  getPostInstallText({
66
75
  extName,
67
76
  extData
@@ -69,17 +78,15 @@ class PluginCommand extends _extensionCommand.default {
69
78
  return `Plugin ${extName}@${extData.version} successfully installed`.green;
70
79
  }
71
80
 
72
- validateExtensionFields(appiumPkgData) {
73
- const missingFields = REQ_PLUGIN_FIELDS.reduce((acc, field) => appiumPkgData[field] ? acc : [...acc, field], []);
81
+ validateExtensionFields(pluginMetadata, installSpec) {
82
+ const missingFields = REQ_PLUGIN_FIELDS.reduce((acc, field) => pluginMetadata[field] ? acc : [...acc, field], []);
74
83
 
75
84
  if (!_lodash.default.isEmpty(missingFields)) {
76
- throw new Error(`Installed plugin did not expose correct fields for compability ` + `with Appium. Missing fields: ${JSON.stringify(missingFields)}`);
85
+ throw new Error(`Installed plugin "${installSpec}" did not expose correct fields for compability ` + `with Appium. Missing fields: ${JSON.stringify(missingFields)}`);
77
86
  }
78
87
  }
79
88
 
80
89
  }
81
90
 
82
- exports.default = PluginCommand;require('source-map-support').install();
83
-
84
-
85
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jbGkvcGx1Z2luLWNvbW1hbmQuanMiXSwibmFtZXMiOlsiUkVRX1BMVUdJTl9GSUVMRFMiLCJQbHVnaW5Db21tYW5kIiwiRXh0ZW5zaW9uQ29tbWFuZCIsImNvbnN0cnVjdG9yIiwiY29uZmlnIiwianNvbiIsInR5cGUiLCJQTFVHSU5fVFlQRSIsImtub3duRXh0ZW5zaW9ucyIsIktOT1dOX1BMVUdJTlMiLCJpbnN0YWxsIiwicGx1Z2luIiwiaW5zdGFsbFR5cGUiLCJwYWNrYWdlTmFtZSIsImV4dCIsInVuaW5zdGFsbCIsInVwZGF0ZSIsInVuc2FmZSIsImdldFBvc3RJbnN0YWxsVGV4dCIsImV4dE5hbWUiLCJleHREYXRhIiwidmVyc2lvbiIsImdyZWVuIiwidmFsaWRhdGVFeHRlbnNpb25GaWVsZHMiLCJhcHBpdW1Qa2dEYXRhIiwibWlzc2luZ0ZpZWxkcyIsInJlZHVjZSIsImFjYyIsImZpZWxkIiwiXyIsImlzRW1wdHkiLCJFcnJvciIsIkpTT04iLCJzdHJpbmdpZnkiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsaUJBQWlCLEdBQUcsQ0FBQyxZQUFELEVBQWUsV0FBZixDQUExQjs7QUFFZSxNQUFNQyxhQUFOLFNBQTRCQyx5QkFBNUIsQ0FBNkM7QUFFMURDLEVBQUFBLFdBQVcsQ0FBRTtBQUFDQyxJQUFBQSxNQUFEO0FBQVNDLElBQUFBO0FBQVQsR0FBRixFQUFrQjtBQUMzQixVQUFNO0FBQUNELE1BQUFBLE1BQUQ7QUFBU0MsTUFBQUEsSUFBVDtBQUFlQyxNQUFBQSxJQUFJLEVBQUVDO0FBQXJCLEtBQU47QUFDQSxTQUFLQyxlQUFMLEdBQXVCQyxzQkFBdkI7QUFDRDs7QUFFRCxRQUFNQyxPQUFOLENBQWU7QUFBQ0MsSUFBQUEsTUFBRDtBQUFTQyxJQUFBQSxXQUFUO0FBQXNCQyxJQUFBQTtBQUF0QixHQUFmLEVBQW1EO0FBQ2pELFdBQU8sTUFBTSxNQUFNSCxPQUFOLENBQWM7QUFBQ0ksTUFBQUEsR0FBRyxFQUFFSCxNQUFOO0FBQWNDLE1BQUFBLFdBQWQ7QUFBMkJDLE1BQUFBO0FBQTNCLEtBQWQsQ0FBYjtBQUNEOztBQUVELFFBQU1FLFNBQU4sQ0FBaUI7QUFBQ0osSUFBQUE7QUFBRCxHQUFqQixFQUEyQjtBQUN6QixXQUFPLE1BQU0sTUFBTUksU0FBTixDQUFnQjtBQUFDRCxNQUFBQSxHQUFHLEVBQUVIO0FBQU4sS0FBaEIsQ0FBYjtBQUNEOztBQUVELFFBQU1LLE1BQU4sQ0FBYztBQUFDTCxJQUFBQSxNQUFEO0FBQVNNLElBQUFBO0FBQVQsR0FBZCxFQUFnQztBQUM5QixXQUFPLE1BQU0sTUFBTUQsTUFBTixDQUFhO0FBQUNGLE1BQUFBLEdBQUcsRUFBRUgsTUFBTjtBQUFjTSxNQUFBQTtBQUFkLEtBQWIsQ0FBYjtBQUNEOztBQUVEQyxFQUFBQSxrQkFBa0IsQ0FBRTtBQUFDQyxJQUFBQSxPQUFEO0FBQVVDLElBQUFBO0FBQVYsR0FBRixFQUFzQjtBQUN0QyxXQUFRLFVBQVNELE9BQVEsSUFBR0MsT0FBTyxDQUFDQyxPQUFRLHlCQUFyQyxDQUE4REMsS0FBckU7QUFDRDs7QUFFREMsRUFBQUEsdUJBQXVCLENBQUVDLGFBQUYsRUFBaUI7QUFDdEMsVUFBTUMsYUFBYSxHQUFHekIsaUJBQWlCLENBQUMwQixNQUFsQixDQUF5QixDQUFDQyxHQUFELEVBQU1DLEtBQU4sS0FDN0NKLGFBQWEsQ0FBQ0ksS0FBRCxDQUFiLEdBQXVCRCxHQUF2QixHQUE2QixDQUFDLEdBQUdBLEdBQUosRUFBU0MsS0FBVCxDQURULEVBRW5CLEVBRm1CLENBQXRCOztBQUlBLFFBQUksQ0FBQ0MsZ0JBQUVDLE9BQUYsQ0FBVUwsYUFBVixDQUFMLEVBQStCO0FBQzdCLFlBQU0sSUFBSU0sS0FBSixDQUFXLGlFQUFELEdBQ0MsZ0NBQStCQyxJQUFJLENBQUNDLFNBQUwsQ0FBZVIsYUFBZixDQUE4QixFQUR4RSxDQUFOO0FBRUQ7QUFFRjs7QUFqQ3lEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBFeHRlbnNpb25Db21tYW5kIGZyb20gJy4vZXh0ZW5zaW9uLWNvbW1hbmQnO1xuaW1wb3J0IHsgUExVR0lOX1RZUEUgfSBmcm9tICcuLi9leHRlbnNpb24tY29uZmlnJztcbmltcG9ydCB7IEtOT1dOX1BMVUdJTlMgfSBmcm9tICcuLi9wbHVnaW5zJztcblxuY29uc3QgUkVRX1BMVUdJTl9GSUVMRFMgPSBbJ3BsdWdpbk5hbWUnLCAnbWFpbkNsYXNzJ107XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBsdWdpbkNvbW1hbmQgZXh0ZW5kcyBFeHRlbnNpb25Db21tYW5kIHtcblxuICBjb25zdHJ1Y3RvciAoe2NvbmZpZywganNvbn0pIHtcbiAgICBzdXBlcih7Y29uZmlnLCBqc29uLCB0eXBlOiBQTFVHSU5fVFlQRX0pO1xuICAgIHRoaXMua25vd25FeHRlbnNpb25zID0gS05PV05fUExVR0lOUztcbiAgfVxuXG4gIGFzeW5jIGluc3RhbGwgKHtwbHVnaW4sIGluc3RhbGxUeXBlLCBwYWNrYWdlTmFtZX0pIHtcbiAgICByZXR1cm4gYXdhaXQgc3VwZXIuaW5zdGFsbCh7ZXh0OiBwbHVnaW4sIGluc3RhbGxUeXBlLCBwYWNrYWdlTmFtZX0pO1xuICB9XG5cbiAgYXN5bmMgdW5pbnN0YWxsICh7cGx1Z2lufSkge1xuICAgIHJldHVybiBhd2FpdCBzdXBlci51bmluc3RhbGwoe2V4dDogcGx1Z2lufSk7XG4gIH1cblxuICBhc3luYyB1cGRhdGUgKHtwbHVnaW4sIHVuc2FmZX0pIHtcbiAgICByZXR1cm4gYXdhaXQgc3VwZXIudXBkYXRlKHtleHQ6IHBsdWdpbiwgdW5zYWZlfSk7XG4gIH1cblxuICBnZXRQb3N0SW5zdGFsbFRleHQgKHtleHROYW1lLCBleHREYXRhfSkge1xuICAgIHJldHVybiBgUGx1Z2luICR7ZXh0TmFtZX1AJHtleHREYXRhLnZlcnNpb259IHN1Y2Nlc3NmdWxseSBpbnN0YWxsZWRgLmdyZWVuO1xuICB9XG5cbiAgdmFsaWRhdGVFeHRlbnNpb25GaWVsZHMgKGFwcGl1bVBrZ0RhdGEpIHtcbiAgICBjb25zdCBtaXNzaW5nRmllbGRzID0gUkVRX1BMVUdJTl9GSUVMRFMucmVkdWNlKChhY2MsIGZpZWxkKSA9PiAoXG4gICAgICBhcHBpdW1Qa2dEYXRhW2ZpZWxkXSA/IGFjYyA6IFsuLi5hY2MsIGZpZWxkXVxuICAgICksIFtdKTtcblxuICAgIGlmICghXy5pc0VtcHR5KG1pc3NpbmdGaWVsZHMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEluc3RhbGxlZCBwbHVnaW4gZGlkIG5vdCBleHBvc2UgY29ycmVjdCBmaWVsZHMgZm9yIGNvbXBhYmlsaXR5IGAgK1xuICAgICAgICAgICAgICAgICAgICAgIGB3aXRoIEFwcGl1bS4gTWlzc2luZyBmaWVsZHM6ICR7SlNPTi5zdHJpbmdpZnkobWlzc2luZ0ZpZWxkcyl9YCk7XG4gICAgfVxuXG4gIH1cblxufVxuIl0sImZpbGUiOiJsaWIvY2xpL3BsdWdpbi1jb21tYW5kLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
91
+ exports.default = PluginCommand;
92
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSRVFfUExVR0lOX0ZJRUxEUyIsIlBsdWdpbkNvbW1hbmQiLCJFeHRlbnNpb25Db21tYW5kIiwiY29uc3RydWN0b3IiLCJjb25maWciLCJqc29uIiwia25vd25FeHRlbnNpb25zIiwiS05PV05fUExVR0lOUyIsImluc3RhbGwiLCJwbHVnaW4iLCJpbnN0YWxsVHlwZSIsInBhY2thZ2VOYW1lIiwiX2luc3RhbGwiLCJpbnN0YWxsU3BlYyIsInVuaW5zdGFsbCIsIl91bmluc3RhbGwiLCJ1cGRhdGUiLCJ1bnNhZmUiLCJfdXBkYXRlIiwicnVuIiwic2NyaXB0TmFtZSIsImV4dHJhQXJncyIsIl9ydW4iLCJnZXRQb3N0SW5zdGFsbFRleHQiLCJleHROYW1lIiwiZXh0RGF0YSIsInZlcnNpb24iLCJncmVlbiIsInZhbGlkYXRlRXh0ZW5zaW9uRmllbGRzIiwicGx1Z2luTWV0YWRhdGEiLCJtaXNzaW5nRmllbGRzIiwicmVkdWNlIiwiYWNjIiwiZmllbGQiLCJfIiwiaXNFbXB0eSIsIkVycm9yIiwiSlNPTiIsInN0cmluZ2lmeSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9jbGkvcGx1Z2luLWNvbW1hbmQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBFeHRlbnNpb25Db21tYW5kIGZyb20gJy4vZXh0ZW5zaW9uLWNvbW1hbmQnO1xuaW1wb3J0IHtLTk9XTl9QTFVHSU5TfSBmcm9tICcuLi9jb25zdGFudHMnO1xuXG5jb25zdCBSRVFfUExVR0lOX0ZJRUxEUyA9IFsncGx1Z2luTmFtZScsICdtYWluQ2xhc3MnXTtcblxuLyoqXG4gKiBAZXh0ZW5kcyB7RXh0ZW5zaW9uQ29tbWFuZDxQbHVnaW5UeXBlPn1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGx1Z2luQ29tbWFuZCBleHRlbmRzIEV4dGVuc2lvbkNvbW1hbmQge1xuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtpbXBvcnQoJy4vZXh0ZW5zaW9uLWNvbW1hbmQnKS5FeHRlbnNpb25Db21tYW5kT3B0aW9uczxQbHVnaW5UeXBlPn0gb3B0c1xuICAgKi9cbiAgY29uc3RydWN0b3Ioe2NvbmZpZywganNvbn0pIHtcbiAgICBzdXBlcih7Y29uZmlnLCBqc29ufSk7XG4gICAgdGhpcy5rbm93bkV4dGVuc2lvbnMgPSBLTk9XTl9QTFVHSU5TO1xuICB9XG5cbiAgYXN5bmMgaW5zdGFsbCh7cGx1Z2luLCBpbnN0YWxsVHlwZSwgcGFja2FnZU5hbWV9KSB7XG4gICAgcmV0dXJuIGF3YWl0IHN1cGVyLl9pbnN0YWxsKHtcbiAgICAgIGluc3RhbGxTcGVjOiBwbHVnaW4sXG4gICAgICBpbnN0YWxsVHlwZSxcbiAgICAgIHBhY2thZ2VOYW1lLFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgdW5pbnN0YWxsKHtwbHVnaW59KSB7XG4gICAgcmV0dXJuIGF3YWl0IHN1cGVyLl91bmluc3RhbGwoe2luc3RhbGxTcGVjOiBwbHVnaW59KTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZSh7cGx1Z2luLCB1bnNhZmV9KSB7XG4gICAgcmV0dXJuIGF3YWl0IHN1cGVyLl91cGRhdGUoe2luc3RhbGxTcGVjOiBwbHVnaW4sIHVuc2FmZX0pO1xuICB9XG5cbiAgYXN5bmMgcnVuKHtwbHVnaW4sIHNjcmlwdE5hbWUsIGV4dHJhQXJnc30pIHtcbiAgICByZXR1cm4gYXdhaXQgc3VwZXIuX3J1bih7aW5zdGFsbFNwZWM6IHBsdWdpbiwgc2NyaXB0TmFtZSwgZXh0cmFBcmdzfSk7XG4gIH1cblxuICBnZXRQb3N0SW5zdGFsbFRleHQoe2V4dE5hbWUsIGV4dERhdGF9KSB7XG4gICAgcmV0dXJuIGBQbHVnaW4gJHtleHROYW1lfUAke2V4dERhdGEudmVyc2lvbn0gc3VjY2Vzc2Z1bGx5IGluc3RhbGxlZGAuZ3JlZW47XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIGZpZWxkcyBpbiBgYXBwaXVtYCBmaWVsZCBvZiBgZHJpdmVyTWV0YWRhdGFgXG4gICAqXG4gICAqIEZvciBhbnkgYHBhY2thZ2UuanNvbmAgZmllbGRzIHdoaWNoIGEgZHJpdmVyIHJlcXVpcmVzLCB2YWxpZGF0ZSB0aGUgdHlwZSBvZlxuICAgKiB0aG9zZSBmaWVsZHMgb24gdGhlIGBwYWNrYWdlLmpzb25gIGRhdGEsIHRocm93aW5nIGFuIGVycm9yIGlmIGFueXRoaW5nIGlzXG4gICAqIGFtaXNzLlxuICAgKiBAcGFyYW0ge2ltcG9ydCgnYXBwaXVtL3R5cGVzJykuRXh0TWV0YWRhdGE8UGx1Z2luVHlwZT59IHBsdWdpbk1ldGFkYXRhXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBpbnN0YWxsU3BlY1xuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIHZhbGlkYXRlRXh0ZW5zaW9uRmllbGRzKHBsdWdpbk1ldGFkYXRhLCBpbnN0YWxsU3BlYykge1xuICAgIGNvbnN0IG1pc3NpbmdGaWVsZHMgPSBSRVFfUExVR0lOX0ZJRUxEUy5yZWR1Y2UoXG4gICAgICAoYWNjLCBmaWVsZCkgPT4gKHBsdWdpbk1ldGFkYXRhW2ZpZWxkXSA/IGFjYyA6IFsuLi5hY2MsIGZpZWxkXSksXG4gICAgICBbXVxuICAgICk7XG5cbiAgICBpZiAoIV8uaXNFbXB0eShtaXNzaW5nRmllbGRzKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgSW5zdGFsbGVkIHBsdWdpbiBcIiR7aW5zdGFsbFNwZWN9XCIgZGlkIG5vdCBleHBvc2UgY29ycmVjdCBmaWVsZHMgZm9yIGNvbXBhYmlsaXR5IGAgK1xuICAgICAgICAgIGB3aXRoIEFwcGl1bS4gTWlzc2luZyBmaWVsZHM6ICR7SlNPTi5zdHJpbmdpZnkobWlzc2luZ0ZpZWxkcyl9YFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuUGx1Z2luVHlwZX0gUGx1Z2luVHlwZVxuICovXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsaUJBQWlCLEdBQUcsQ0FBQyxZQUFELEVBQWUsV0FBZixDQUExQjs7QUFLZSxNQUFNQyxhQUFOLFNBQTRCQyx5QkFBNUIsQ0FBNkM7RUFLMURDLFdBQVcsQ0FBQztJQUFDQyxNQUFEO0lBQVNDO0VBQVQsQ0FBRCxFQUFpQjtJQUMxQixNQUFNO01BQUNELE1BQUQ7TUFBU0M7SUFBVCxDQUFOO0lBQ0EsS0FBS0MsZUFBTCxHQUF1QkMsd0JBQXZCO0VBQ0Q7O0VBRVksTUFBUEMsT0FBTyxDQUFDO0lBQUNDLE1BQUQ7SUFBU0MsV0FBVDtJQUFzQkM7RUFBdEIsQ0FBRCxFQUFxQztJQUNoRCxPQUFPLE1BQU0sTUFBTUMsUUFBTixDQUFlO01BQzFCQyxXQUFXLEVBQUVKLE1BRGE7TUFFMUJDLFdBRjBCO01BRzFCQztJQUgwQixDQUFmLENBQWI7RUFLRDs7RUFFYyxNQUFURyxTQUFTLENBQUM7SUFBQ0w7RUFBRCxDQUFELEVBQVc7SUFDeEIsT0FBTyxNQUFNLE1BQU1NLFVBQU4sQ0FBaUI7TUFBQ0YsV0FBVyxFQUFFSjtJQUFkLENBQWpCLENBQWI7RUFDRDs7RUFFVyxNQUFOTyxNQUFNLENBQUM7SUFBQ1AsTUFBRDtJQUFTUTtFQUFULENBQUQsRUFBbUI7SUFDN0IsT0FBTyxNQUFNLE1BQU1DLE9BQU4sQ0FBYztNQUFDTCxXQUFXLEVBQUVKLE1BQWQ7TUFBc0JRO0lBQXRCLENBQWQsQ0FBYjtFQUNEOztFQUVRLE1BQUhFLEdBQUcsQ0FBQztJQUFDVixNQUFEO0lBQVNXLFVBQVQ7SUFBcUJDO0VBQXJCLENBQUQsRUFBa0M7SUFDekMsT0FBTyxNQUFNLE1BQU1DLElBQU4sQ0FBVztNQUFDVCxXQUFXLEVBQUVKLE1BQWQ7TUFBc0JXLFVBQXRCO01BQWtDQztJQUFsQyxDQUFYLENBQWI7RUFDRDs7RUFFREUsa0JBQWtCLENBQUM7SUFBQ0MsT0FBRDtJQUFVQztFQUFWLENBQUQsRUFBcUI7SUFDckMsT0FBUSxVQUFTRCxPQUFRLElBQUdDLE9BQU8sQ0FBQ0MsT0FBUSx5QkFBckMsQ0FBOERDLEtBQXJFO0VBQ0Q7O0VBWURDLHVCQUF1QixDQUFDQyxjQUFELEVBQWlCaEIsV0FBakIsRUFBOEI7SUFDbkQsTUFBTWlCLGFBQWEsR0FBRzlCLGlCQUFpQixDQUFDK0IsTUFBbEIsQ0FDcEIsQ0FBQ0MsR0FBRCxFQUFNQyxLQUFOLEtBQWlCSixjQUFjLENBQUNJLEtBQUQsQ0FBZCxHQUF3QkQsR0FBeEIsR0FBOEIsQ0FBQyxHQUFHQSxHQUFKLEVBQVNDLEtBQVQsQ0FEM0IsRUFFcEIsRUFGb0IsQ0FBdEI7O0lBS0EsSUFBSSxDQUFDQyxlQUFBLENBQUVDLE9BQUYsQ0FBVUwsYUFBVixDQUFMLEVBQStCO01BQzdCLE1BQU0sSUFBSU0sS0FBSixDQUNILHFCQUFvQnZCLFdBQVksa0RBQWpDLEdBQ0csZ0NBQStCd0IsSUFBSSxDQUFDQyxTQUFMLENBQWVSLGFBQWYsQ0FBOEIsRUFGNUQsQ0FBTjtJQUlEO0VBQ0Y7O0FBeER5RCJ9
@@ -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"}
@@ -5,10 +5,10 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
+ exports.RingBuffer = exports.JSON_SPACES = void 0;
8
9
  exports.errAndQuit = errAndQuit;
9
10
  exports.log = log;
10
11
  exports.spinWith = spinWith;
11
- exports.JSON_SPACES = void 0;
12
12
 
13
13
  require("source-map-support/register");
14
14
 
@@ -53,7 +53,31 @@ async function spinWith(json, msg, fn) {
53
53
  spinner.fail();
54
54
  throw err;
55
55
  }
56
- }require('source-map-support').install();
56
+ }
57
+
58
+ class RingBuffer {
59
+ constructor(size = 50) {
60
+ this.size = size;
61
+ this.buffer = [];
62
+ }
63
+
64
+ getBuff() {
65
+ return this.buffer;
66
+ }
67
+
68
+ dequeue() {
69
+ this.buffer.shift();
70
+ }
71
+
72
+ enqueue(item) {
73
+ if (this.buffer.length >= this.size) {
74
+ this.dequeue();
75
+ }
57
76
 
77
+ this.buffer.push(item);
78
+ }
79
+
80
+ }
58
81
 
59
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jbGkvdXRpbHMuanMiXSwibmFtZXMiOlsiSlNPTl9TUEFDRVMiLCJlcnJBbmRRdWl0IiwianNvbiIsIm1zZyIsImNvbnNvbGUiLCJsb2ciLCJKU09OIiwic3RyaW5naWZ5IiwiZXJyb3IiLCJyZWQiLCJzdGRlcnIiLCJwcm9jZXNzIiwiZXhpdCIsInNwaW5XaXRoIiwiZm4iLCJzcGlubmVyIiwic3RhcnQiLCJyZXMiLCJzdWNjZWVkIiwiZXJyIiwiZmFpbCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFFQTs7QUFFQSxNQUFNQSxXQUFXLEdBQUcsQ0FBcEI7OztBQU9BLFNBQVNDLFVBQVQsQ0FBcUJDLElBQXJCLEVBQTJCQyxHQUEzQixFQUFnQztBQUM5QixNQUFJRCxJQUFKLEVBQVU7QUFDUkUsSUFBQUEsT0FBTyxDQUFDQyxHQUFSLENBQVlDLElBQUksQ0FBQ0MsU0FBTCxDQUFlO0FBQUNDLE1BQUFBLEtBQUssRUFBRyxHQUFFTCxHQUFJO0FBQWYsS0FBZixFQUFrQyxJQUFsQyxFQUF3Q0gsV0FBeEMsQ0FBWjtBQUNELEdBRkQsTUFFTztBQUNMSSxJQUFBQSxPQUFPLENBQUNJLEtBQVIsQ0FBZSxHQUFFTCxHQUFJLEVBQVAsQ0FBU00sR0FBdkI7O0FBQ0EsUUFBSU4sR0FBRyxDQUFDTyxNQUFSLEVBQWdCO0FBQ2ROLE1BQUFBLE9BQU8sQ0FBQ0ksS0FBUixDQUFlLEdBQUVMLEdBQUcsQ0FBQ08sTUFBTyxFQUFkLENBQWdCRCxHQUE5QjtBQUNEO0FBQ0Y7O0FBQ0RFLEVBQUFBLE9BQU8sQ0FBQ0MsSUFBUixDQUFhLENBQWI7QUFDRDs7QUFPRCxTQUFTUCxHQUFULENBQWNILElBQWQsRUFBb0JDLEdBQXBCLEVBQXlCO0FBQ3ZCLEdBQUNELElBQUQsSUFBU0UsT0FBTyxDQUFDQyxHQUFSLENBQVlGLEdBQVosQ0FBVDtBQUNEOztBQVFELGVBQWVVLFFBQWYsQ0FBeUJYLElBQXpCLEVBQStCQyxHQUEvQixFQUFvQ1csRUFBcEMsRUFBd0M7QUFDdEMsTUFBSVosSUFBSixFQUFVO0FBQ1IsV0FBTyxNQUFNWSxFQUFFLEVBQWY7QUFDRDs7QUFDRCxRQUFNQyxPQUFPLEdBQUcsa0JBQUlaLEdBQUosRUFBU2EsS0FBVCxFQUFoQjtBQUNBLE1BQUlDLEdBQUo7O0FBQ0EsTUFBSTtBQUNGQSxJQUFBQSxHQUFHLEdBQUcsTUFBTUgsRUFBRSxFQUFkO0FBQ0FDLElBQUFBLE9BQU8sQ0FBQ0csT0FBUjtBQUNBLFdBQU9ELEdBQVA7QUFDRCxHQUpELENBSUUsT0FBT0UsR0FBUCxFQUFZO0FBQ1pKLElBQUFBLE9BQU8sQ0FBQ0ssSUFBUjtBQUNBLFVBQU1ELEdBQU47QUFDRDtBQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tY29uc29sZSAqL1xuXG5pbXBvcnQgb3JhIGZyb20gJ29yYSc7XG5cbmNvbnN0IEpTT05fU1BBQ0VTID0gNDtcblxuLyoqKlxuICogTG9nIGFuIGVycm9yIHRvIHRoZSBjb25zb2xlIGFuZCBleGl0IHRoZSBwcm9jZXNzLlxuICogQHBhcmFtIHtib29sZWFufSBqc29uIC0gd2hldGhlciB3ZSBzaG91bGQgbG9nIGpzb24gb3IgdGV4dFxuICogQHBhcmFtIHtzdHJpbmd9IG1zZyAtIGVycm9yIG1lc3NhZ2VcbiAqL1xuZnVuY3Rpb24gZXJyQW5kUXVpdCAoanNvbiwgbXNnKSB7XG4gIGlmIChqc29uKSB7XG4gICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoe2Vycm9yOiBgJHttc2d9YH0sIG51bGwsIEpTT05fU1BBQ0VTKSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc29sZS5lcnJvcihgJHttc2d9YC5yZWQpO1xuICAgIGlmIChtc2cuc3RkZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGAke21zZy5zdGRlcnJ9YC5yZWQpO1xuICAgIH1cbiAgfVxuICBwcm9jZXNzLmV4aXQoMSk7XG59XG5cbi8qKlxuICogQ29uZGl0aW9uYWxseSBsb2cgc29tZXRoaW5nIHRvIHRoZSBjb25zb2xlXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGpzb24gLSB3aGV0aGVyIHdlIGFyZSBpbiBqc29uIG1vZGUgKGFuZCBzaG91bGQgdGhlcmVmb3JlIG5vdCBsb2cpXG4gKiBAcGFyYW0ge3N0cmluZ30gbXNnIC0gc3RyaW5nIHRvIGxvZ1xuICovXG5mdW5jdGlvbiBsb2cgKGpzb24sIG1zZykge1xuICAhanNvbiAmJiBjb25zb2xlLmxvZyhtc2cpO1xufVxuXG4vKipcbiAqIFN0YXJ0IGEgc3Bpbm5lciwgZXhlY3V0ZSBhbiBhc3luYyBmdW5jdGlvbiwgYW5kIHRoZW4gc3RvcCB0aGUgc3Bpbm5lclxuICogQHBhcmFtIHtib29sZWFufSBqc29uIC0gd2hldGhlciB3ZSBhcmUgaW4ganNvbiBtb2RlIChhbmQgc2hvdWxkIHRoZXJlZm9yZSBub3QgbG9nKVxuICogQHBhcmFtIHtzdHJpbmd9IG1zZyAtIHN0cmluZyB0byBsb2dcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGZuIC0gZnVuY3Rpb24gdG8gd3JhcCB3aXRoIHNwaW5uaW5nXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHNwaW5XaXRoIChqc29uLCBtc2csIGZuKSB7XG4gIGlmIChqc29uKSB7XG4gICAgcmV0dXJuIGF3YWl0IGZuKCk7XG4gIH1cbiAgY29uc3Qgc3Bpbm5lciA9IG9yYShtc2cpLnN0YXJ0KCk7XG4gIGxldCByZXM7XG4gIHRyeSB7XG4gICAgcmVzID0gYXdhaXQgZm4oKTtcbiAgICBzcGlubmVyLnN1Y2NlZWQoKTtcbiAgICByZXR1cm4gcmVzO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBzcGlubmVyLmZhaWwoKTtcbiAgICB0aHJvdyBlcnI7XG4gIH1cbn1cblxuZXhwb3J0IHtcbiAgZXJyQW5kUXVpdCxcbiAgbG9nLFxuICBzcGluV2l0aCxcbiAgSlNPTl9TUEFDRVNcbn07XG4iXSwiZmlsZSI6ImxpYi9jbGkvdXRpbHMuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==
82
+ exports.RingBuffer = RingBuffer;
83
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJKU09OX1NQQUNFUyIsImVyckFuZFF1aXQiLCJqc29uIiwibXNnIiwiY29uc29sZSIsImxvZyIsIkpTT04iLCJzdHJpbmdpZnkiLCJlcnJvciIsInJlZCIsInN0ZGVyciIsInByb2Nlc3MiLCJleGl0Iiwic3BpbldpdGgiLCJmbiIsInNwaW5uZXIiLCJvcmEiLCJzdGFydCIsInJlcyIsInN1Y2NlZWQiLCJlcnIiLCJmYWlsIiwiUmluZ0J1ZmZlciIsImNvbnN0cnVjdG9yIiwic2l6ZSIsImJ1ZmZlciIsImdldEJ1ZmYiLCJkZXF1ZXVlIiwic2hpZnQiLCJlbnF1ZXVlIiwiaXRlbSIsImxlbmd0aCIsInB1c2giXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvY2xpL3V0aWxzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cblxuaW1wb3J0IG9yYSBmcm9tICdvcmEnO1xuXG5jb25zdCBKU09OX1NQQUNFUyA9IDQ7XG5cbi8qKipcbiAqIExvZyBhbiBlcnJvciB0byB0aGUgY29uc29sZSBhbmQgZXhpdCB0aGUgcHJvY2Vzcy5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0ganNvbiAtIHdoZXRoZXIgd2Ugc2hvdWxkIGxvZyBqc29uIG9yIHRleHRcbiAqIEBwYXJhbSB7YW55fSBtc2cgLSBlcnJvciBtZXNzYWdlLCBvYmplY3QsIEVycm9yIGluc3RhbmNlLCBldGMuXG4gKi9cbmZ1bmN0aW9uIGVyckFuZFF1aXQoanNvbiwgbXNnKSB7XG4gIGlmIChqc29uKSB7XG4gICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoe2Vycm9yOiBgJHttc2d9YH0sIG51bGwsIEpTT05fU1BBQ0VTKSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc29sZS5lcnJvcihgJHttc2d9YC5yZWQpO1xuICAgIGlmIChtc2cuc3RkZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGAke21zZy5zdGRlcnJ9YC5yZWQpO1xuICAgIH1cbiAgfVxuICBwcm9jZXNzLmV4aXQoMSk7XG59XG5cbi8qKlxuICogQ29uZGl0aW9uYWxseSBsb2cgc29tZXRoaW5nIHRvIHRoZSBjb25zb2xlXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGpzb24gLSB3aGV0aGVyIHdlIGFyZSBpbiBqc29uIG1vZGUgKGFuZCBzaG91bGQgdGhlcmVmb3JlIG5vdCBsb2cpXG4gKiBAcGFyYW0ge3N0cmluZ30gbXNnIC0gc3RyaW5nIHRvIGxvZ1xuICovXG5mdW5jdGlvbiBsb2coanNvbiwgbXNnKSB7XG4gICFqc29uICYmIGNvbnNvbGUubG9nKG1zZyk7XG59XG5cbi8qKlxuICogU3RhcnQgYSBzcGlubmVyLCBleGVjdXRlIGFuIGFzeW5jIGZ1bmN0aW9uLCBhbmQgdGhlbiBzdG9wIHRoZSBzcGlubmVyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGpzb24gLSB3aGV0aGVyIHdlIGFyZSBpbiBqc29uIG1vZGUgKGFuZCBzaG91bGQgdGhlcmVmb3JlIG5vdCBsb2cpXG4gKiBAcGFyYW0ge3N0cmluZ30gbXNnIC0gc3RyaW5nIHRvIGxvZ1xuICogQHBhcmFtIHtmdW5jdGlvbn0gZm4gLSBmdW5jdGlvbiB0byB3cmFwIHdpdGggc3Bpbm5pbmdcbiAqL1xuYXN5bmMgZnVuY3Rpb24gc3BpbldpdGgoanNvbiwgbXNnLCBmbikge1xuICBpZiAoanNvbikge1xuICAgIHJldHVybiBhd2FpdCBmbigpO1xuICB9XG4gIGNvbnN0IHNwaW5uZXIgPSBvcmEobXNnKS5zdGFydCgpO1xuICBsZXQgcmVzO1xuICB0cnkge1xuICAgIHJlcyA9IGF3YWl0IGZuKCk7XG4gICAgc3Bpbm5lci5zdWNjZWVkKCk7XG4gICAgcmV0dXJuIHJlcztcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgc3Bpbm5lci5mYWlsKCk7XG4gICAgdGhyb3cgZXJyO1xuICB9XG59XG5cbmNsYXNzIFJpbmdCdWZmZXIge1xuICBjb25zdHJ1Y3RvcihzaXplID0gNTApIHtcbiAgICB0aGlzLnNpemUgPSBzaXplO1xuICAgIHRoaXMuYnVmZmVyID0gW107XG4gIH1cbiAgZ2V0QnVmZigpIHtcbiAgICByZXR1cm4gdGhpcy5idWZmZXI7XG4gIH1cbiAgZGVxdWV1ZSgpIHtcbiAgICB0aGlzLmJ1ZmZlci5zaGlmdCgpO1xuICB9XG4gIGVucXVldWUoaXRlbSkge1xuICAgIGlmICh0aGlzLmJ1ZmZlci5sZW5ndGggPj0gdGhpcy5zaXplKSB7XG4gICAgICB0aGlzLmRlcXVldWUoKTtcbiAgICB9XG4gICAgdGhpcy5idWZmZXIucHVzaChpdGVtKTtcbiAgfVxufVxuXG5leHBvcnQge2VyckFuZFF1aXQsIGxvZywgc3BpbldpdGgsIEpTT05fU1BBQ0VTLCBSaW5nQnVmZmVyfTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFFQTs7QUFFQSxNQUFNQSxXQUFXLEdBQUcsQ0FBcEI7OztBQU9BLFNBQVNDLFVBQVQsQ0FBb0JDLElBQXBCLEVBQTBCQyxHQUExQixFQUErQjtFQUM3QixJQUFJRCxJQUFKLEVBQVU7SUFDUkUsT0FBTyxDQUFDQyxHQUFSLENBQVlDLElBQUksQ0FBQ0MsU0FBTCxDQUFlO01BQUNDLEtBQUssRUFBRyxHQUFFTCxHQUFJO0lBQWYsQ0FBZixFQUFrQyxJQUFsQyxFQUF3Q0gsV0FBeEMsQ0FBWjtFQUNELENBRkQsTUFFTztJQUNMSSxPQUFPLENBQUNJLEtBQVIsQ0FBZSxHQUFFTCxHQUFJLEVBQVAsQ0FBU00sR0FBdkI7O0lBQ0EsSUFBSU4sR0FBRyxDQUFDTyxNQUFSLEVBQWdCO01BQ2ROLE9BQU8sQ0FBQ0ksS0FBUixDQUFlLEdBQUVMLEdBQUcsQ0FBQ08sTUFBTyxFQUFkLENBQWdCRCxHQUE5QjtJQUNEO0VBQ0Y7O0VBQ0RFLE9BQU8sQ0FBQ0MsSUFBUixDQUFhLENBQWI7QUFDRDs7QUFPRCxTQUFTUCxHQUFULENBQWFILElBQWIsRUFBbUJDLEdBQW5CLEVBQXdCO0VBQ3RCLENBQUNELElBQUQsSUFBU0UsT0FBTyxDQUFDQyxHQUFSLENBQVlGLEdBQVosQ0FBVDtBQUNEOztBQVFELGVBQWVVLFFBQWYsQ0FBd0JYLElBQXhCLEVBQThCQyxHQUE5QixFQUFtQ1csRUFBbkMsRUFBdUM7RUFDckMsSUFBSVosSUFBSixFQUFVO0lBQ1IsT0FBTyxNQUFNWSxFQUFFLEVBQWY7RUFDRDs7RUFDRCxNQUFNQyxPQUFPLEdBQUcsSUFBQUMsWUFBQSxFQUFJYixHQUFKLEVBQVNjLEtBQVQsRUFBaEI7RUFDQSxJQUFJQyxHQUFKOztFQUNBLElBQUk7SUFDRkEsR0FBRyxHQUFHLE1BQU1KLEVBQUUsRUFBZDtJQUNBQyxPQUFPLENBQUNJLE9BQVI7SUFDQSxPQUFPRCxHQUFQO0VBQ0QsQ0FKRCxDQUlFLE9BQU9FLEdBQVAsRUFBWTtJQUNaTCxPQUFPLENBQUNNLElBQVI7SUFDQSxNQUFNRCxHQUFOO0VBQ0Q7QUFDRjs7QUFFRCxNQUFNRSxVQUFOLENBQWlCO0VBQ2ZDLFdBQVcsQ0FBQ0MsSUFBSSxHQUFHLEVBQVIsRUFBWTtJQUNyQixLQUFLQSxJQUFMLEdBQVlBLElBQVo7SUFDQSxLQUFLQyxNQUFMLEdBQWMsRUFBZDtFQUNEOztFQUNEQyxPQUFPLEdBQUc7SUFDUixPQUFPLEtBQUtELE1BQVo7RUFDRDs7RUFDREUsT0FBTyxHQUFHO0lBQ1IsS0FBS0YsTUFBTCxDQUFZRyxLQUFaO0VBQ0Q7O0VBQ0RDLE9BQU8sQ0FBQ0MsSUFBRCxFQUFPO0lBQ1osSUFBSSxLQUFLTCxNQUFMLENBQVlNLE1BQVosSUFBc0IsS0FBS1AsSUFBL0IsRUFBcUM7TUFDbkMsS0FBS0csT0FBTDtJQUNEOztJQUNELEtBQUtGLE1BQUwsQ0FBWU8sSUFBWixDQUFpQkYsSUFBakI7RUFDRDs7QUFoQmMifQ==
@@ -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":"AAkEA;;;;;;;;;;;;;;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,CAwCzC;AAED;;;;GAIG;AACH,wCAHW,YAAY,GACV,sBAAsB,CA+BlC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qCAoBY,WAAW,2BAAoB,WAAW,CAAC,CAAC;;;;2BAK5C,OAAO,eAAe,EAAE,YAAY;;;;qCAKpC,OAAO,eAAe,EAAE,sBAAsB;;;;sBAK9C,MAAM"}
@@ -0,0 +1,136 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.formatErrors = formatErrors;
9
+ exports.normalizeConfig = normalizeConfig;
10
+ exports.readConfigFile = readConfigFile;
11
+
12
+ require("source-map-support/register");
13
+
14
+ var _betterAjvErrors = _interopRequireDefault(require("@sidvind/better-ajv-errors"));
15
+
16
+ var _lilconfig = require("lilconfig");
17
+
18
+ var _lodash = _interopRequireDefault(require("lodash"));
19
+
20
+ var _yaml = _interopRequireDefault(require("yaml"));
21
+
22
+ var _schema = require("./schema/schema");
23
+
24
+ function yamlLoader(filepath, content) {
25
+ return _yaml.default.parse(content);
26
+ }
27
+
28
+ const rawConfig = new Map();
29
+
30
+ function jsonLoader(filepath, content) {
31
+ rawConfig.set(filepath, content);
32
+ return JSON.parse(content);
33
+ }
34
+
35
+ async function loadConfigFile(lc, filepath) {
36
+ try {
37
+ return await lc.load(filepath);
38
+ } catch (err) {
39
+ if (err.code === 'ENOENT') {
40
+ err.message = `Config file not found at user-provided path: ${filepath}`;
41
+ throw err;
42
+ } else if (err instanceof SyntaxError) {
43
+ err.message = `Config file at user-provided path ${filepath} is invalid:\n${err.message}`;
44
+ throw err;
45
+ }
46
+
47
+ throw err;
48
+ }
49
+ }
50
+
51
+ async function searchConfigFile(lc) {
52
+ return await lc.search();
53
+ }
54
+
55
+ function formatErrors(errors = [], config = {}, opts = {}) {
56
+ if (errors && !errors.length) {
57
+ throw new TypeError('Array of errors must be non-empty');
58
+ }
59
+
60
+ return (0, _betterAjvErrors.default)((0, _schema.getSchema)(opts.schemaId), config, errors, {
61
+ json: opts.json,
62
+ format: 'cli'
63
+ });
64
+ }
65
+
66
+ async function readConfigFile(filepath, opts = {}) {
67
+ const lc = (0, _lilconfig.lilconfig)('appium', {
68
+ loaders: {
69
+ '.yaml': yamlLoader,
70
+ '.yml': yamlLoader,
71
+ '.json': jsonLoader,
72
+ noExt: jsonLoader
73
+ },
74
+ packageProp: 'appiumConfig'
75
+ });
76
+ const result = filepath ? await loadConfigFile(lc, filepath) : await searchConfigFile(lc);
77
+
78
+ if (result !== null && result !== void 0 && result.filepath && !(result !== null && result !== void 0 && result.isEmpty)) {
79
+ const {
80
+ pretty = true
81
+ } = opts;
82
+
83
+ try {
84
+ let configResult;
85
+ const errors = (0, _schema.validate)(result.config);
86
+
87
+ if (_lodash.default.isEmpty(errors)) {
88
+ configResult = { ...result,
89
+ errors
90
+ };
91
+ } else {
92
+ const reason = formatErrors(errors, result.config, {
93
+ json: rawConfig.get(result.filepath),
94
+ pretty
95
+ });
96
+ configResult = reason ? { ...result,
97
+ errors,
98
+ reason
99
+ } : { ...result,
100
+ errors
101
+ };
102
+ }
103
+
104
+ configResult.config = normalizeConfig(configResult.config);
105
+ return configResult;
106
+ } finally {
107
+ rawConfig.delete(result.filepath);
108
+ }
109
+ }
110
+
111
+ return result ?? {};
112
+ }
113
+
114
+ function normalizeConfig(config) {
115
+ const schema = (0, _schema.getSchema)();
116
+
117
+ const normalize = (config, section) => {
118
+ const obj = _lodash.default.isUndefined(section) ? config : _lodash.default.get(config, section, config);
119
+
120
+ const mappedObj = _lodash.default.mapKeys(obj, (__, prop) => {
121
+ var _schema$properties$pr;
122
+
123
+ return ((_schema$properties$pr = schema.properties[prop]) === null || _schema$properties$pr === void 0 ? void 0 : _schema$properties$pr.appiumCliDest) ?? _lodash.default.camelCase(prop);
124
+ });
125
+
126
+ return _lodash.default.mapValues(mappedObj, (value, property) => {
127
+ const nextSection = section ? `${section}.${property}` : property;
128
+ return isSchemaTypeObject(value) ? normalize(config, nextSection) : value;
129
+ });
130
+ };
131
+
132
+ const isSchemaTypeObject = schema => Boolean(schema.properties);
133
+
134
+ return normalize(config);
135
+ }
136
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ5YW1sTG9hZGVyIiwiZmlsZXBhdGgiLCJjb250ZW50IiwieWFtbCIsInBhcnNlIiwicmF3Q29uZmlnIiwiTWFwIiwianNvbkxvYWRlciIsInNldCIsIkpTT04iLCJsb2FkQ29uZmlnRmlsZSIsImxjIiwibG9hZCIsImVyciIsImNvZGUiLCJtZXNzYWdlIiwiU3ludGF4RXJyb3IiLCJzZWFyY2hDb25maWdGaWxlIiwic2VhcmNoIiwiZm9ybWF0RXJyb3JzIiwiZXJyb3JzIiwiY29uZmlnIiwib3B0cyIsImxlbmd0aCIsIlR5cGVFcnJvciIsImJldHRlckFqdkVycm9ycyIsImdldFNjaGVtYSIsInNjaGVtYUlkIiwianNvbiIsImZvcm1hdCIsInJlYWRDb25maWdGaWxlIiwibGlsY29uZmlnIiwibG9hZGVycyIsIm5vRXh0IiwicGFja2FnZVByb3AiLCJyZXN1bHQiLCJpc0VtcHR5IiwicHJldHR5IiwiY29uZmlnUmVzdWx0IiwidmFsaWRhdGUiLCJfIiwicmVhc29uIiwiZ2V0Iiwibm9ybWFsaXplQ29uZmlnIiwiZGVsZXRlIiwic2NoZW1hIiwibm9ybWFsaXplIiwic2VjdGlvbiIsIm9iaiIsImlzVW5kZWZpbmVkIiwibWFwcGVkT2JqIiwibWFwS2V5cyIsIl9fIiwicHJvcCIsInByb3BlcnRpZXMiLCJhcHBpdW1DbGlEZXN0IiwiY2FtZWxDYXNlIiwibWFwVmFsdWVzIiwidmFsdWUiLCJwcm9wZXJ0eSIsIm5leHRTZWN0aW9uIiwiaXNTY2hlbWFUeXBlT2JqZWN0IiwiQm9vbGVhbiJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9jb25maWctZmlsZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYmV0dGVyQWp2RXJyb3JzIGZyb20gJ0BzaWR2aW5kL2JldHRlci1hanYtZXJyb3JzJztcbmltcG9ydCB7bGlsY29uZmlnfSBmcm9tICdsaWxjb25maWcnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB5YW1sIGZyb20gJ3lhbWwnO1xuaW1wb3J0IHtnZXRTY2hlbWEsIHZhbGlkYXRlfSBmcm9tICcuL3NjaGVtYS9zY2hlbWEnO1xuXG4vKipcbiAqIGxpbGNvbmZpZyBsb2FkZXIgdG8gaGFuZGxlIGAueWFtbGAgZmlsZXNcbiAqIEB0eXBlIHtpbXBvcnQoJ2xpbGNvbmZpZycpLkxvYWRlclN5bmN9XG4gKi9cbmZ1bmN0aW9uIHlhbWxMb2FkZXIoZmlsZXBhdGgsIGNvbnRlbnQpIHtcbiAgcmV0dXJuIHlhbWwucGFyc2UoY29udGVudCk7XG59XG5cbi8qKlxuICogQSBjYWNoZSBvZiB0aGUgcmF3IGNvbmZpZyBmaWxlIChhIEpTT04gc3RyaW5nKSBhdCBhIGZpbGVwYXRoLlxuICogVGhpcyBpcyB1c2VkIGZvciBiZXR0ZXIgZXJyb3IgcmVwb3J0aW5nLlxuICogTm90ZSB0aGF0IGNvbmZpZyBmaWxlcyBuZWVkbid0IGJlIEpTT04sIGJ1dCBpdCBoZWxwcyBpZiB0aGV5IGFyZS5cbiAqIEB0eXBlIHtNYXA8c3RyaW5nLFJhd0pzb24+fVxuICovXG5jb25zdCByYXdDb25maWcgPSBuZXcgTWFwKCk7XG5cbi8qKlxuICogQ3VzdG9tIEpTT04gbG9hZGVyIHRoYXQgY2FjaGVzIHRoZSByYXcgY29uZmlnIGZpbGUgKGZvciB1c2Ugd2l0aCBgYmV0dGVyLWFqdi1lcnJvcnNgKS5cbiAqIElmIGl0IHdlcmVuJ3QgZm9yIHRoaXMgY2FjaGUsIHRoaXMgd291bGQgYmUgdW5uZWNlc3NhcnkuXG4gKiBAdHlwZSB7aW1wb3J0KCdsaWxjb25maWcnKS5Mb2FkZXJTeW5jfVxuICovXG5mdW5jdGlvbiBqc29uTG9hZGVyKGZpbGVwYXRoLCBjb250ZW50KSB7XG4gIHJhd0NvbmZpZy5zZXQoZmlsZXBhdGgsIGNvbnRlbnQpO1xuICByZXR1cm4gSlNPTi5wYXJzZShjb250ZW50KTtcbn1cblxuLyoqXG4gKiBMb2FkcyBhIGNvbmZpZyBmaWxlIGZyb20gYW4gZXhwbGljaXQgcGF0aFxuICogQHBhcmFtIHtMaWxjb25maWdBc3luY1NlYXJjaGVyfSBsYyAtIGxpbGNvbmZpZyBpbnN0YW5jZVxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVwYXRoIC0gUGF0aCB0byBjb25maWcgZmlsZVxuICogQHJldHVybnMge1Byb21pc2U8aW1wb3J0KCdsaWxjb25maWcnKS5MaWxjb25maWdSZXN1bHQ+fVxuICovXG5hc3luYyBmdW5jdGlvbiBsb2FkQ29uZmlnRmlsZShsYywgZmlsZXBhdGgpIHtcbiAgdHJ5IHtcbiAgICAvLyByZW1vdmluZyBcImF3YWl0XCIgd2lsbCBjYXVzZSBhbnkgcmVqZWN0aW9uIHRvIF9ub3RfIGJlIGNhdWdodCBpbiB0aGlzIGJsb2NrIVxuICAgIHJldHVybiBhd2FpdCBsYy5sb2FkKGZpbGVwYXRoKTtcbiAgfSBjYXRjaCAoLyoqIEB0eXBlIHt1bmtub3dufSAqLyBlcnIpIHtcbiAgICBpZiAoLyoqIEB0eXBlIHtOb2RlSlMuRXJybm9FeGNlcHRpb259ICovIChlcnIpLmNvZGUgPT09ICdFTk9FTlQnKSB7XG4gICAgICAvKiogQHR5cGUge05vZGVKUy5FcnJub0V4Y2VwdGlvbn0gKi8gKFxuICAgICAgICBlcnJcbiAgICAgICkubWVzc2FnZSA9IGBDb25maWcgZmlsZSBub3QgZm91bmQgYXQgdXNlci1wcm92aWRlZCBwYXRoOiAke2ZpbGVwYXRofWA7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfSBlbHNlIGlmIChlcnIgaW5zdGFuY2VvZiBTeW50YXhFcnJvcikge1xuICAgICAgLy8gZ2VuZXJhbGx5IGludmFsaWQgSlNPTlxuICAgICAgZXJyLm1lc3NhZ2UgPSBgQ29uZmlnIGZpbGUgYXQgdXNlci1wcm92aWRlZCBwYXRoICR7ZmlsZXBhdGh9IGlzIGludmFsaWQ6XFxuJHtlcnIubWVzc2FnZX1gO1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgICB0aHJvdyBlcnI7XG4gIH1cbn1cblxuLyoqXG4gKiBTZWFyY2hlcyBmb3IgYSBjb25maWcgZmlsZVxuICogQHBhcmFtIHtMaWxjb25maWdBc3luY1NlYXJjaGVyfSBsYyAtIGxpbGNvbmZpZyBpbnN0YW5jZVxuICogQHJldHVybnMge1Byb21pc2U8aW1wb3J0KCdsaWxjb25maWcnKS5MaWxjb25maWdSZXN1bHQ+fVxuICovXG5hc3luYyBmdW5jdGlvbiBzZWFyY2hDb25maWdGaWxlKGxjKSB7XG4gIHJldHVybiBhd2FpdCBsYy5zZWFyY2goKTtcbn1cblxuLyoqXG4gKiBHaXZlbiBhbiBhcnJheSBvZiBlcnJvcnMgYW5kIHRoZSByZXN1bHQgb2YgbG9hZGluZyBhIGNvbmZpZyBmaWxlLCBnZW5lcmF0ZSBhXG4gKiBoZWxwZnVsIHN0cmluZyBmb3IgdGhlIHVzZXIuXG4gKlxuICogLSBJZiBgb3B0c2AgY29udGFpbnMgYSBganNvbmAgcHJvcGVydHksIHRoaXMgc2hvdWxkIGJlIHRoZSBvcmlnaW5hbCBKU09OXG4gKiAgIF9zdHJpbmdfIG9mIHRoZSBjb25maWcgZmlsZS4gIFRoaXMgaXMgb25seSBhcHBsaWNhYmxlIGlmIHRoZSBjb25maWcgZmlsZVxuICogICB3YXMgaW4gSlNPTiBmb3JtYXQuIElmIHByZXNlbnQsIGl0IHdpbGwgYXNzb2NpYXRlIGxpbmUgbnVtYmVycyB3aXRoIGVycm9ycy5cbiAqIC0gSWYgYGVycm9yc2AgaGFwcGVucyB0byBiZSBlbXB0eSwgdGhpcyB3aWxsIHRocm93LlxuICogQHBhcmFtIHtpbXBvcnQoJ2FqdicpLkVycm9yT2JqZWN0W119IGVycm9ycyAtIE5vbi1lbXB0eSBhcnJheSBvZiBlcnJvcnMuIFJlcXVpcmVkLlxuICogQHBhcmFtIHtSZWFkQ29uZmlnRmlsZVJlc3VsdFsnY29uZmlnJ118YW55fSBbY29uZmlnXSAtXG4gKiBDb25maWd1cmF0aW9uICYgbWV0YWRhdGFcbiAqIEBwYXJhbSB7Rm9ybWF0Q29uZmlnRXJyb3JzT3B0aW9uc30gW29wdHNdXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IElmIGBlcnJvcnNgIGlzIGVtcHR5XG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0RXJyb3JzKGVycm9ycyA9IFtdLCBjb25maWcgPSB7fSwgb3B0cyA9IHt9KSB7XG4gIGlmIChlcnJvcnMgJiYgIWVycm9ycy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSBvZiBlcnJvcnMgbXVzdCBiZSBub24tZW1wdHknKTtcbiAgfVxuICByZXR1cm4gYmV0dGVyQWp2RXJyb3JzKGdldFNjaGVtYShvcHRzLnNjaGVtYUlkKSwgY29uZmlnLCBlcnJvcnMsIHtcbiAgICBqc29uOiBvcHRzLmpzb24sXG4gICAgZm9ybWF0OiAnY2xpJyxcbiAgfSk7XG59XG5cbi8qKlxuICogR2l2ZW4gYW4gb3B0aW9uYWwgcGF0aCwgcmVhZCBhIGNvbmZpZyBmaWxlLiBWYWxpZGF0ZXMgdGhlIGNvbmZpZyBmaWxlLlxuICpcbiAqIENhbGwge0BsaW5rIHZhbGlkYXRlfSBpZiB5b3UgYWxyZWFkeSBoYXZlIGEgY29uZmlnIG9iamVjdC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbZmlsZXBhdGhdIC0gUGF0aCB0byBjb25maWcgZmlsZSwgaWYgd2UgaGF2ZSBvbmVcbiAqIEBwYXJhbSB7UmVhZENvbmZpZ0ZpbGVPcHRpb25zfSBbb3B0c10gLSBPcHRpb25zXG4gKiBAcHVibGljXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxSZWFkQ29uZmlnRmlsZVJlc3VsdD59IENvbnRhaW5zIGNvbmZpZyBhbmQgZmlsZXBhdGgsIGlmIGZvdW5kLCBhbmQgYW55IGVycm9yc1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZENvbmZpZ0ZpbGUoZmlsZXBhdGgsIG9wdHMgPSB7fSkge1xuICBjb25zdCBsYyA9IGxpbGNvbmZpZygnYXBwaXVtJywge1xuICAgIGxvYWRlcnM6IHtcbiAgICAgICcueWFtbCc6IHlhbWxMb2FkZXIsXG4gICAgICAnLnltbCc6IHlhbWxMb2FkZXIsXG4gICAgICAnLmpzb24nOiBqc29uTG9hZGVyLFxuICAgICAgbm9FeHQ6IGpzb25Mb2FkZXIsXG4gICAgfSxcbiAgICBwYWNrYWdlUHJvcDogJ2FwcGl1bUNvbmZpZycsXG4gIH0pO1xuXG4gIGNvbnN0IHJlc3VsdCA9IGZpbGVwYXRoID8gYXdhaXQgbG9hZENvbmZpZ0ZpbGUobGMsIGZpbGVwYXRoKSA6IGF3YWl0IHNlYXJjaENvbmZpZ0ZpbGUobGMpO1xuXG4gIGlmIChyZXN1bHQ/LmZpbGVwYXRoICYmICFyZXN1bHQ/LmlzRW1wdHkpIHtcbiAgICBjb25zdCB7cHJldHR5ID0gdHJ1ZX0gPSBvcHRzO1xuICAgIHRyeSB7XG4gICAgICBsZXQgY29uZmlnUmVzdWx0O1xuICAgICAgY29uc3QgZXJyb3JzID0gdmFsaWRhdGUocmVzdWx0LmNvbmZpZyk7XG4gICAgICBpZiAoXy5pc0VtcHR5KGVycm9ycykpIHtcbiAgICAgICAgY29uZmlnUmVzdWx0ID0gey4uLnJlc3VsdCwgZXJyb3JzfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHJlYXNvbiA9IGZvcm1hdEVycm9ycyhlcnJvcnMsIHJlc3VsdC5jb25maWcsIHtcbiAgICAgICAgICBqc29uOiByYXdDb25maWcuZ2V0KHJlc3VsdC5maWxlcGF0aCksXG4gICAgICAgICAgcHJldHR5LFxuICAgICAgICB9KTtcbiAgICAgICAgY29uZmlnUmVzdWx0ID0gcmVhc29uID8gey4uLnJlc3VsdCwgZXJyb3JzLCByZWFzb259IDogey4uLnJlc3VsdCwgZXJyb3JzfTtcbiAgICAgIH1cblxuICAgICAgLy8gbm9ybWFsaXplICh0byBjYW1lbCBjYXNlKSBhbGwgdG9wLWxldmVsIHByb3BlcnR5IG5hbWVzIG9mIHRoZSBjb25maWcgZmlsZVxuICAgICAgY29uZmlnUmVzdWx0LmNvbmZpZyA9IG5vcm1hbGl6ZUNvbmZpZygvKiogQHR5cGUge0FwcGl1bUNvbmZpZ30gKi8gKGNvbmZpZ1Jlc3VsdC5jb25maWcpKTtcblxuICAgICAgcmV0dXJuIGNvbmZpZ1Jlc3VsdDtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgLy8gY2xlYW4gdXAgdGhlIHJhdyBjb25maWcgZmlsZSBjYWNoZSwgd2hpY2ggaXMgb25seSBrZXB0IHRvIGJldHRlciByZXBvcnQgZXJyb3JzLlxuICAgICAgcmF3Q29uZmlnLmRlbGV0ZShyZXN1bHQuZmlsZXBhdGgpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0ID8/IHt9O1xufVxuXG4vKipcbiAqIENvbnZlcnQgc2NoZW1hIHByb3BlcnR5IG5hbWVzIHRvIGVpdGhlciBhKSB0aGUgdmFsdWUgb2YgdGhlIGBhcHBpdW1DbGlEZXN0YCBwcm9wZXJ0eSwgaWYgYW55OyBvciBiKSBjYW1lbC1jYXNlXG4gKiBAcGFyYW0ge0FwcGl1bUNvbmZpZ30gY29uZmlnIC0gQ29uZmlndXJhdGlvbiBvYmplY3RcbiAqIEByZXR1cm5zIHtOb3JtYWxpemVkQXBwaXVtQ29uZmlnfSBOZXcgb2JqZWN0IHdpdGggY2FtZWwtY2FzZWQga2V5cyAob3IgYGRlc3RgIGtleXMpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplQ29uZmlnKGNvbmZpZykge1xuICBjb25zdCBzY2hlbWEgPSBnZXRTY2hlbWEoKTtcbiAgLyoqXG4gICAqIEBwYXJhbSB7QXBwaXVtQ29uZmlnfSBjb25maWdcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtzZWN0aW9uXSAtIEtleXBhdGggKGxvZGFzaCBgXy5nZXQoKWAgc3R5bGUpIHRvIHNlY3Rpb24gb2YgY29uZmlnLiBJZiBvbWl0dGVkLCBhc3N1bWUgcm9vdCBBcHBpdW0gY29uZmlnIHNjaGVtYVxuICAgKiBAdG9kbyBSZXdyaXRlIGFzIGEgbG9vcFxuICAgKiBAcmV0dXJucyBOb3JtYWxpemVkIHNlY3Rpb24gb2YgY29uZmlnXG4gICAqL1xuICBjb25zdCBub3JtYWxpemUgPSAoY29uZmlnLCBzZWN0aW9uKSA9PiB7XG4gICAgY29uc3Qgb2JqID0gXy5pc1VuZGVmaW5lZChzZWN0aW9uKSA/IGNvbmZpZyA6IF8uZ2V0KGNvbmZpZywgc2VjdGlvbiwgY29uZmlnKTtcblxuICAgIGNvbnN0IG1hcHBlZE9iaiA9IF8ubWFwS2V5cyhcbiAgICAgIG9iaixcbiAgICAgIChfXywgcHJvcCkgPT4gc2NoZW1hLnByb3BlcnRpZXNbcHJvcF0/LmFwcGl1bUNsaURlc3QgPz8gXy5jYW1lbENhc2UocHJvcClcbiAgICApO1xuXG4gICAgcmV0dXJuIF8ubWFwVmFsdWVzKG1hcHBlZE9iaiwgKHZhbHVlLCBwcm9wZXJ0eSkgPT4ge1xuICAgICAgY29uc3QgbmV4dFNlY3Rpb24gPSBzZWN0aW9uID8gYCR7c2VjdGlvbn0uJHtwcm9wZXJ0eX1gIDogcHJvcGVydHk7XG4gICAgICByZXR1cm4gaXNTY2hlbWFUeXBlT2JqZWN0KHZhbHVlKSA/IG5vcm1hbGl6ZShjb25maWcsIG5leHRTZWN0aW9uKSA6IHZhbHVlO1xuICAgIH0pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgc2NoZW1hIHByb3AgcmVmZXJlbmNlcyBhbiBvYmplY3QsIG9yIGlmIGl0J3MgYW4gb2JqZWN0IGl0c2VsZlxuICAgKiBAcGFyYW0ge2ltcG9ydCgnYWp2JykuU2NoZW1hT2JqZWN0fG9iamVjdH0gc2NoZW1hIC0gUmVmZXJlbmNpbmcgc2NoZW1hIG9iamVjdFxuICAgKi9cbiAgY29uc3QgaXNTY2hlbWFUeXBlT2JqZWN0ID0gKHNjaGVtYSkgPT4gQm9vbGVhbihzY2hlbWEucHJvcGVydGllcyk7XG5cbiAgcmV0dXJuIG5vcm1hbGl6ZShjb25maWcpO1xufVxuXG4vKipcbiAqIFJlc3VsdCBvZiBjYWxsaW5nIHtAbGluayByZWFkQ29uZmlnRmlsZX0uXG4gKiBAdHlwZWRlZiBSZWFkQ29uZmlnRmlsZVJlc3VsdFxuICogQHByb3BlcnR5IHtpbXBvcnQoJ2FqdicpLkVycm9yT2JqZWN0W119IFtlcnJvcnNdIC0gVmFsaWRhdGlvbiBlcnJvcnNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZmlsZXBhdGhdIC0gVGhlIHBhdGggdG8gdGhlIGNvbmZpZyBmaWxlLCBpZiBmb3VuZFxuICogQHByb3BlcnR5IHtib29sZWFufSBbaXNFbXB0eV0gLSBJZiBgdHJ1ZWAsIHRoZSBjb25maWcgZmlsZSBleGlzdHMgYnV0IGlzIGVtcHR5XG4gKiBAcHJvcGVydHkge05vcm1hbGl6ZWRBcHBpdW1Db25maWd9IFtjb25maWddIC0gVGhlIHBhcnNlZCBjb25maWd1cmF0aW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ3xpbXBvcnQoJ0BzaWR2aW5kL2JldHRlci1hanYtZXJyb3JzJykuSU91dHB1dEVycm9yW119IFtyZWFzb25dIC0gSHVtYW4tcmVhZGFibGUgZXJyb3IgbWVzc2FnZXMgYW5kIHN1Z2dlc3Rpb25zLiBJZiB0aGUgYHByZXR0eWAgb3B0aW9uIGlzIGB0cnVlYCwgdGhpcyB3aWxsIGJlIGEgbmljZSBzdHJpbmcgdG8gcHJpbnQuXG4gKi9cblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgcmVhZENvbmZpZ0ZpbGV9LlxuICogQHR5cGVkZWYgUmVhZENvbmZpZ0ZpbGVPcHRpb25zXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtwcmV0dHk9dHJ1ZV0gSWYgYGZhbHNlYCwgZG8gbm90IHVzZSBjb2xvciBhbmQgZmFuY3kgZm9ybWF0dGluZyBpbiB0aGUgYHJlYXNvbmAgcHJvcGVydHkgb2YgdGhlIHtAbGluayBSZWFkQ29uZmlnRmlsZVJlc3VsdH0uIFRoZSB2YWx1ZSBvZiBgcmVhc29uYCBpcyB0aGVuIHN1aXRhYmxlIGZvciBtYWNoaW5lLXJlYWRpbmcuXG4gKi9cblxuLyoqXG4gKiBUaGlzIGlzIGFuIGBBc3luY1NlYXJjaGVyYCB3aGljaCBpcyBpbmV4cGxpY2FibHkgX25vdF8gZXhwb3J0ZWQgYnkgdGhlIGBsaWxjb25maWdgIHR5cGUgZGVmaW5pdGlvbi5cbiAqIEB0eXBlZGVmIHtSZXR1cm5UeXBlPGltcG9ydCgnbGlsY29uZmlnJylbXCJsaWxjb25maWdcIl0+fSBMaWxjb25maWdBc3luY1NlYXJjaGVyXG4gKi9cblxuLyoqXG4gKiBUaGUgY29udGVudHMgb2YgYW4gQXBwaXVtIGNvbmZpZyBmaWxlLiBHZW5lcmF0ZWQgZnJvbSBzY2hlbWFcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5BcHBpdW1Db25maWd9IEFwcGl1bUNvbmZpZ1xuICovXG5cbi8qKlxuICogVGhlIGNvbnRlbnRzIG9mIGFuIEFwcGl1bSBjb25maWcgZmlsZSB3aXRoIGNhbWVsY2FzZWQgcHJvcGVydHkgbmFtZXMgKGFuZCB1c2luZyBgYXBwaXVtQ2xpRGVzdGAgdmFsdWUgaWYgcHJlc2VudCkuIEdlbmVyYXRlZCBmcm9tIHtAbGluayBBcHBpdW1Db25maWd9XG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuTm9ybWFsaXplZEFwcGl1bUNvbmZpZ30gTm9ybWFsaXplZEFwcGl1bUNvbmZpZ1xuICovXG5cbi8qKlxuICogVGhlIHN0cmluZyBzaG91bGQgYmUgYSByYXcgSlNPTiBzdHJpbmcuXG4gKiBAdHlwZWRlZiB7c3RyaW5nfSBSYXdKc29uXG4gKi9cblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgZm9ybWF0RXJyb3JzfS5cbiAqIEB0eXBlZGVmIEZvcm1hdENvbmZpZ0Vycm9yc09wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KCcuL2NvbmZpZy1maWxlJykuUmF3SnNvbn0gW2pzb25dIC0gUmF3IEpTT04gY29uZmlnIChhcyBzdHJpbmcpXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtwcmV0dHk9dHJ1ZV0gLSBXaGV0aGVyIHRvIGZvcm1hdCBlcnJvcnMgYXMgYSBDTEktZnJpZW5kbHkgc3RyaW5nXG4gKiBAcHJvcGVydHkge3N0cmluZ30gIFtzY2hlbWFJZF0gLSBTcGVjaWZpYyBJRCBvZiBhIHByb3A7IG90aGVyd2lzZSBlbnRpcmUgc2NoZW1hXG4gKi9cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQU1BLFNBQVNBLFVBQVQsQ0FBb0JDLFFBQXBCLEVBQThCQyxPQUE5QixFQUF1QztFQUNyQyxPQUFPQyxhQUFBLENBQUtDLEtBQUwsQ0FBV0YsT0FBWCxDQUFQO0FBQ0Q7O0FBUUQsTUFBTUcsU0FBUyxHQUFHLElBQUlD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
@@ -0,0 +1,49 @@
1
+ export function checkNpmOk(): Promise<void>;
2
+ export type ParsedArgs = import('appium/types').ParsedArgs;
3
+ export type Args = import('appium/types').Args;
4
+ export type ArgSpec = import("./schema/arg-spec").ArgSpec<any>;
5
+ /**
6
+ * Mutable object containing Appium build information. By default it
7
+ * only contains the Appium version, but is updated with the build timestamp
8
+ * and git commit hash asynchronously as soon as `updateBuildInfo` is called
9
+ * and succeeds.
10
+ * @returns {import('appium/types').BuildInfo}
11
+ */
12
+ export function getBuildInfo(): import('appium/types').BuildInfo;
13
+ export function checkNodeOk(): void;
14
+ export function showBuildInfo(): Promise<void>;
15
+ export function warnNodeDeprecations(): void;
16
+ /**
17
+ * @param {string} tmpDir
18
+ */
19
+ export function validateTmpDir(tmpDir: string): Promise<void>;
20
+ /**
21
+ * Returns k/v pairs of server arguments which are _not_ the defaults.
22
+ * @param {Args} parsedArgs
23
+ * @returns {Args}
24
+ */
25
+ export function getNonDefaultServerArgs(parsedArgs: Args): Args;
26
+ /**
27
+ * @param {boolean} [useGithubApiFallback]
28
+ * @returns {Promise<string?>}
29
+ */
30
+ export function getGitRev(useGithubApiFallback?: boolean | undefined): Promise<string | null>;
31
+ export const APPIUM_VER: any;
32
+ /**
33
+ * @param {boolean} [useGithubApiFallback]
34
+ */
35
+ export function updateBuildInfo(useGithubApiFallback?: boolean | undefined): Promise<void>;
36
+ /**
37
+ * Shows a breakdown of the current config after CLI params, config file loaded & defaults applied.
38
+ *
39
+ * The actual shape of `preConfigParsedArgs` and `defaults` does not matter for the purposes of this function,
40
+ * but it's intended to be called with values of type {@link ParsedArgs} and `DefaultValues<true>`, respectively.
41
+ *
42
+ * @param {Partial<ParsedArgs>} nonDefaultPreConfigParsedArgs - Parsed CLI args (or param to `init()`) before config & defaults applied
43
+ * @param {import('./config-file').ReadConfigFileResult} configResult - Result of attempting to load a config file. _Must_ be normalized
44
+ * @param {Partial<ParsedArgs>} defaults - Configuration defaults from schemas
45
+ * @param {ParsedArgs} parsedArgs - Entire parsed args object
46
+ */
47
+ export function showConfig(nonDefaultPreConfigParsedArgs: Partial<ParsedArgs>, configResult: import('./config-file').ReadConfigFileResult, defaults: Partial<ParsedArgs>, parsedArgs: ParsedArgs): void;
48
+ export const rootDir: string;
49
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../lib/config.js"],"names":[],"mappings":"AAsJA,4CAOC;yBAwLY,OAAO,cAAc,EAAE,UAAU;mBACjC,OAAO,cAAc,EAAE,IAAI;;AApNxC;;;;;;GAMG;AACH,gCAFa,OAAO,cAAc,EAAE,SAAS,CAI5C;AAED,oCAOC;AAwBD,+CAGC;AAhBD,6CAWC;AA4ID;;GAEG;AACH,uCAFW,MAAM,iBAWhB;AAjJD;;;;GAIG;AACH,oDAHW,IAAI,GACF,IAAI,CAmFhB;AAtMD;;;GAGG;AACH,uEAFa,QAAQ,MAAM,QAAE,CA6B5B;AArFD,6BAAsC;AA4BtC;;GAEG;AACH,2FAUC;AAmOD;;;;;;;;;;GAUG;AACH,0DALW,QAAQ,UAAU,CAAC,gBACnB,OAAO,eAAe,EAAE,oBAAoB,YAC5C,QAAQ,UAAU,CAAC,cACnB,UAAU,QAoBpB;AAgBD,6BAAuC"}