appium 2.0.0-beta.3 → 2.0.0-beta.30

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 (139) hide show
  1. package/README.md +10 -11
  2. package/build/lib/appium.d.ts +215 -0
  3. package/build/lib/appium.d.ts.map +1 -0
  4. package/build/lib/appium.js +238 -132
  5. package/build/lib/cli/args.d.ts +20 -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 +36 -0
  9. package/build/lib/cli/driver-command.d.ts.map +1 -0
  10. package/build/lib/cli/driver-command.js +19 -12
  11. package/build/lib/cli/extension-command.d.ts +345 -0
  12. package/build/lib/cli/extension-command.d.ts.map +1 -0
  13. package/build/lib/cli/extension-command.js +171 -96
  14. package/build/lib/cli/extension.d.ts +14 -0
  15. package/build/lib/cli/extension.d.ts.map +1 -0
  16. package/build/lib/cli/extension.js +31 -16
  17. package/build/lib/cli/parser.d.ts +79 -0
  18. package/build/lib/cli/parser.d.ts.map +1 -0
  19. package/build/lib/cli/parser.js +152 -95
  20. package/build/lib/cli/plugin-command.d.ts +39 -0
  21. package/build/lib/cli/plugin-command.d.ts.map +1 -0
  22. package/build/lib/cli/plugin-command.js +18 -13
  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 +40 -0
  30. package/build/lib/config.d.ts.map +1 -0
  31. package/build/lib/config.js +92 -67
  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 +84 -0
  36. package/build/lib/extension/driver-config.d.ts.map +1 -0
  37. package/build/lib/extension/driver-config.js +190 -0
  38. package/build/lib/extension/extension-config.d.ts +170 -0
  39. package/build/lib/extension/extension-config.d.ts.map +1 -0
  40. package/build/lib/extension/extension-config.js +297 -0
  41. package/build/lib/extension/index.d.ts +39 -0
  42. package/build/lib/extension/index.d.ts.map +1 -0
  43. package/build/lib/extension/index.js +77 -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 +246 -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 +68 -0
  50. package/build/lib/extension/plugin-config.d.ts +62 -0
  51. package/build/lib/extension/plugin-config.d.ts.map +1 -0
  52. package/build/lib/extension/plugin-config.js +87 -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 +12 -16
  62. package/build/lib/main.d.ts +51 -0
  63. package/build/lib/main.d.ts.map +1 -0
  64. package/build/lib/main.js +174 -82
  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 +180 -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 +452 -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/index.js +11 -0
  88. package/lib/appium-config.schema.json +278 -0
  89. package/lib/appium.js +398 -155
  90. package/lib/cli/args.js +174 -377
  91. package/lib/cli/driver-command.js +22 -7
  92. package/lib/cli/extension-command.js +372 -177
  93. package/lib/cli/extension.js +32 -10
  94. package/lib/cli/parser.js +252 -83
  95. package/lib/cli/plugin-command.js +19 -6
  96. package/lib/cli/utils.js +22 -2
  97. package/lib/config-file.js +223 -0
  98. package/lib/config.js +169 -69
  99. package/lib/constants.js +78 -0
  100. package/lib/extension/driver-config.js +249 -0
  101. package/lib/extension/extension-config.js +458 -0
  102. package/lib/extension/index.js +102 -0
  103. package/lib/extension/manifest.js +486 -0
  104. package/lib/extension/package-changed.js +63 -0
  105. package/lib/extension/plugin-config.js +113 -0
  106. package/lib/grid-register.js +25 -22
  107. package/lib/logger.js +1 -1
  108. package/lib/logsink.js +14 -7
  109. package/lib/main.js +233 -83
  110. package/lib/schema/arg-spec.js +232 -0
  111. package/lib/schema/cli-args.js +261 -0
  112. package/lib/schema/cli-transformers.js +122 -0
  113. package/lib/schema/index.js +2 -0
  114. package/lib/schema/keywords.js +134 -0
  115. package/lib/schema/schema.js +734 -0
  116. package/lib/utils.js +85 -129
  117. package/package.json +62 -85
  118. package/scripts/postinstall.js +71 -0
  119. package/types/appium-manifest.d.ts +61 -0
  120. package/types/cli.d.ts +134 -0
  121. package/types/extension.d.ts +56 -0
  122. package/types/external-manifest.d.ts +58 -0
  123. package/types/index.d.ts +7 -0
  124. package/CHANGELOG.md +0 -3515
  125. package/bin/ios-webkit-debug-proxy-launcher.js +0 -71
  126. package/build/lib/cli/npm.js +0 -206
  127. package/build/lib/cli/parser-helpers.js +0 -82
  128. package/build/lib/driver-config.js +0 -77
  129. package/build/lib/drivers.js +0 -96
  130. package/build/lib/extension-config.js +0 -251
  131. package/build/lib/plugin-config.js +0 -59
  132. package/build/lib/plugins.js +0 -14
  133. package/lib/cli/npm.js +0 -183
  134. package/lib/cli/parser-helpers.js +0 -79
  135. package/lib/driver-config.js +0 -46
  136. package/lib/drivers.js +0 -81
  137. package/lib/extension-config.js +0 -208
  138. package/lib/plugin-config.js +0 -34
  139. package/lib/plugins.js +0 -10
@@ -0,0 +1,190 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.DriverConfig = void 0;
9
+
10
+ require("source-map-support/register");
11
+
12
+ var _lodash = _interopRequireDefault(require("lodash"));
13
+
14
+ var _constants = require("../constants");
15
+
16
+ var _logger = _interopRequireDefault(require("../logger"));
17
+
18
+ var _extensionConfig = require("./extension-config");
19
+
20
+ class DriverConfig extends _extensionConfig.ExtensionConfig {
21
+ knownAutomationNames;
22
+ static _instances = new WeakMap();
23
+
24
+ constructor(manifest, {
25
+ logFn,
26
+ extData
27
+ } = {}) {
28
+ super(_constants.DRIVER_TYPE, manifest, logFn);
29
+ this.knownAutomationNames = new Set();
30
+
31
+ if (extData) {
32
+ this.validate(extData);
33
+ }
34
+ }
35
+
36
+ static create(manifest, {
37
+ extData,
38
+ logFn
39
+ } = {}) {
40
+ const instance = new DriverConfig(manifest, {
41
+ logFn,
42
+ extData
43
+ });
44
+
45
+ if (DriverConfig.getInstance(manifest)) {
46
+ throw new Error(`Manifest with APPIUM_HOME ${manifest.appiumHome} already has a DriverConfig; use DriverConfig.getInstance() to retrieve it.`);
47
+ }
48
+
49
+ DriverConfig._instances.set(manifest, instance);
50
+
51
+ return instance;
52
+ }
53
+
54
+ static getInstance(manifest) {
55
+ return DriverConfig._instances.get(manifest);
56
+ }
57
+
58
+ validate(exts) {
59
+ this.knownAutomationNames.clear();
60
+ return super.validate(exts);
61
+ }
62
+
63
+ getConfigProblems(extData) {
64
+ const problems = [];
65
+ const {
66
+ platformNames,
67
+ automationName
68
+ } = extData;
69
+
70
+ if (!_lodash.default.isArray(platformNames)) {
71
+ problems.push({
72
+ err: 'Missing or incorrect supported platformNames list.',
73
+ val: platformNames
74
+ });
75
+ } else {
76
+ if (_lodash.default.isEmpty(platformNames)) {
77
+ problems.push({
78
+ err: 'Empty platformNames list.',
79
+ val: platformNames
80
+ });
81
+ } else {
82
+ for (const pName of platformNames) {
83
+ if (!_lodash.default.isString(pName)) {
84
+ problems.push({
85
+ err: 'Incorrectly formatted platformName.',
86
+ val: pName
87
+ });
88
+ }
89
+ }
90
+ }
91
+ }
92
+
93
+ if (!_lodash.default.isString(automationName)) {
94
+ problems.push({
95
+ err: 'Missing or incorrect automationName',
96
+ val: automationName
97
+ });
98
+ }
99
+
100
+ if (this.knownAutomationNames.has(automationName)) {
101
+ problems.push({
102
+ err: 'Multiple drivers claim support for the same automationName',
103
+ val: automationName
104
+ });
105
+ }
106
+
107
+ this.knownAutomationNames.add(automationName);
108
+ return problems;
109
+ }
110
+
111
+ extensionDesc(driverName, {
112
+ version,
113
+ automationName
114
+ }) {
115
+ return `${driverName}@${version} (automationName '${automationName}')`;
116
+ }
117
+
118
+ findMatchingDriver({
119
+ automationName,
120
+ platformName
121
+ }) {
122
+ if (!_lodash.default.isString(platformName)) {
123
+ throw new Error('You must include a platformName capability');
124
+ }
125
+
126
+ if (!_lodash.default.isString(automationName)) {
127
+ throw new Error('You must include an automationName capability');
128
+ }
129
+
130
+ _logger.default.info(`Attempting to find matching driver for automationName ` + `'${automationName}' and platformName '${platformName}'`);
131
+
132
+ try {
133
+ const {
134
+ driverName,
135
+ mainClass,
136
+ version
137
+ } = this._getDriverBySupport(automationName, platformName);
138
+
139
+ _logger.default.info(`The '${driverName}' driver was installed and matched caps.`);
140
+
141
+ _logger.default.info(`Will require it at ${this.getInstallPath(driverName)}`);
142
+
143
+ const driver = this.require(driverName);
144
+
145
+ if (!driver) {
146
+ throw new Error(`Driver '${driverName}' did not export a class with name '${mainClass}'. Contact the author of the driver!`);
147
+ }
148
+
149
+ return {
150
+ driver,
151
+ version,
152
+ driverName
153
+ };
154
+ } catch (err) {
155
+ const msg = `Could not find a driver for automationName ` + `'${automationName}' and platformName ${platformName}'. ` + `Have you installed a driver that supports those ` + `capabilities? Run 'appium driver list --installed' to see. ` + `(Lower-level error: ${err.message})`;
156
+ throw new Error(msg);
157
+ }
158
+ }
159
+
160
+ _getDriverBySupport(matchAutomationName, matchPlatformName) {
161
+ const drivers = this.installedExtensions;
162
+
163
+ for (const [driverName, driverData] of _lodash.default.toPairs(drivers)) {
164
+ const {
165
+ automationName,
166
+ platformNames
167
+ } = driverData;
168
+ const aNameMatches = automationName.toLowerCase() === matchAutomationName.toLowerCase();
169
+
170
+ const pNameMatches = _lodash.default.includes(platformNames.map(_lodash.default.toLower), matchPlatformName.toLowerCase());
171
+
172
+ if (aNameMatches && pNameMatches) {
173
+ return {
174
+ driverName,
175
+ ...driverData
176
+ };
177
+ }
178
+
179
+ if (aNameMatches) {
180
+ throw new Error(`Driver '${driverName}' supports automationName ` + `'${automationName}', but Appium could not find ` + `support for platformName '${matchPlatformName}'. Supported ` + `platformNames are: ` + JSON.stringify(platformNames));
181
+ }
182
+ }
183
+
184
+ throw new Error(`Could not find installed driver to support given caps`);
185
+ }
186
+
187
+ }
188
+
189
+ exports.DriverConfig = DriverConfig;
190
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9leHRlbnNpb24vZHJpdmVyLWNvbmZpZy5qcyJdLCJuYW1lcyI6WyJEcml2ZXJDb25maWciLCJFeHRlbnNpb25Db25maWciLCJrbm93bkF1dG9tYXRpb25OYW1lcyIsIl9pbnN0YW5jZXMiLCJXZWFrTWFwIiwiY29uc3RydWN0b3IiLCJtYW5pZmVzdCIsImxvZ0ZuIiwiZXh0RGF0YSIsIkRSSVZFUl9UWVBFIiwiU2V0IiwidmFsaWRhdGUiLCJjcmVhdGUiLCJpbnN0YW5jZSIsImdldEluc3RhbmNlIiwiRXJyb3IiLCJhcHBpdW1Ib21lIiwic2V0IiwiZ2V0IiwiZXh0cyIsImNsZWFyIiwiZ2V0Q29uZmlnUHJvYmxlbXMiLCJwcm9ibGVtcyIsInBsYXRmb3JtTmFtZXMiLCJhdXRvbWF0aW9uTmFtZSIsIl8iLCJpc0FycmF5IiwicHVzaCIsImVyciIsInZhbCIsImlzRW1wdHkiLCJwTmFtZSIsImlzU3RyaW5nIiwiaGFzIiwiYWRkIiwiZXh0ZW5zaW9uRGVzYyIsImRyaXZlck5hbWUiLCJ2ZXJzaW9uIiwiZmluZE1hdGNoaW5nRHJpdmVyIiwicGxhdGZvcm1OYW1lIiwibG9nIiwiaW5mbyIsIm1haW5DbGFzcyIsIl9nZXREcml2ZXJCeVN1cHBvcnQiLCJnZXRJbnN0YWxsUGF0aCIsImRyaXZlciIsInJlcXVpcmUiLCJtc2ciLCJtZXNzYWdlIiwibWF0Y2hBdXRvbWF0aW9uTmFtZSIsIm1hdGNoUGxhdGZvcm1OYW1lIiwiZHJpdmVycyIsImluc3RhbGxlZEV4dGVuc2lvbnMiLCJkcml2ZXJEYXRhIiwidG9QYWlycyIsImFOYW1lTWF0Y2hlcyIsInRvTG93ZXJDYXNlIiwicE5hbWVNYXRjaGVzIiwiaW5jbHVkZXMiLCJtYXAiLCJ0b0xvd2VyIiwiSlNPTiIsInN0cmluZ2lmeSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFLTyxNQUFNQSxZQUFOLFNBQTJCQyxnQ0FBM0IsQ0FBMkM7QUFNaERD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QUFVcUIsVUFBVyw0QkFBdEIsR0FDQSxJQUFHWixjQUFlLCtCQURsQixHQUVBLDZCQUE0QjBCLGlCQUFrQixlQUY5QyxHQUdBLHFCQUhBLEdBSURXLElBQUksQ0FBQ0MsU0FBTCxDQUFldkMsYUFBZixDQUpULENBQU47QUFLRDtBQUNGOztBQUVELFVBQU0sSUFBSVIsS0FBSixDQUFXLHVEQUFYLENBQU47QUFDRDs7QUFqTThDIiwic291cmNlc0NvbnRlbnQiOlsiXG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgRFJJVkVSX1RZUEUgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IGxvZyBmcm9tICcuLi9sb2dnZXInO1xuaW1wb3J0IHsgRXh0ZW5zaW9uQ29uZmlnIH0gZnJvbSAnLi9leHRlbnNpb24tY29uZmlnJztcblxuLyoqXG4gKiBAZXh0ZW5kcyB7RXh0ZW5zaW9uQ29uZmlnPERyaXZlclR5cGU+fVxuICovXG5leHBvcnQgY2xhc3MgRHJpdmVyQ29uZmlnIGV4dGVuZHMgRXh0ZW5zaW9uQ29uZmlnIHtcblxuICAvKipcbiAgICogQSBzZXQgb2YgdW5pcXVlIGF1dG9tYXRpb24gbmFtZXMgdXNlZCBieSBkcml2ZXJzLlxuICAgKiBAdHlwZSB7U2V0PHN0cmluZz59XG4gICAqL1xuICBrbm93bkF1dG9tYXRpb25OYW1lcztcblxuICAvKipcbiAgICogQSBtYXBwaW5nIG9mIHtAbGluayBNYW5pZmVzdH0gaW5zdGFuY2VzIHRvIHtAbGluayBEcml2ZXJDb25maWd9IGluc3RhbmNlcy5cbiAgICpcbiAgICogYE1hbmlmZXN0YCBhbmQgYEV4dGVuc2lvbkNvbmZpZ2AgaGF2ZSBhIG9uZS10by1tYW55IHJlbGF0aW9uc2hpcDsgZWFjaCBgTWFuaWZlc3RgIHNob3VsZCBiZSBhc3NvY2lhdGVkIHdpdGggYSBgRHJpdmVyQ29uZmlnYCBhbmQgYSBgUGx1Z2luQ29uZmlnYDsgbm8gbW9yZSwgbm8gbGVzcy5cbiAgICpcbiAgICogVGhpcyB2YXJpYWJsZSB0cmFja3MgdGhlIGBNYW5pZmVzdGAtdG8tYERyaXZlckNvbmZpZ2AgcG9ydGlvbi5cbiAgICpcbiAgICogQHR5cGUge1dlYWtNYXA8TWFuaWZlc3QsRHJpdmVyQ29uZmlnPn1cbiAgICogQHByaXZhdGVcbiAgICovXG4gICBzdGF0aWMgX2luc3RhbmNlcyA9IG5ldyBXZWFrTWFwKCk7XG5cbiAgIC8qKlxuICAgKiBDYWxsIHtAbGluayBEcml2ZXJDb25maWcuY3JlYXRlfSBpbnN0ZWFkLlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge2ltcG9ydCgnLi9tYW5pZmVzdCcpLk1hbmlmZXN0fSBtYW5pZmVzdCAtIE1hbmlmZXN0IGluc3RhbmNlXG4gICAqIEBwYXJhbSB7RHJpdmVyQ29uZmlnT3B0aW9uc30gW29wdHNdXG4gICAqL1xuICAgY29uc3RydWN0b3IgKG1hbmlmZXN0LCB7bG9nRm4sIGV4dERhdGF9ID0ge30pIHtcbiAgICAgc3VwZXIoRFJJVkVSX1RZUEUsIG1hbmlmZXN0LCBsb2dGbik7XG5cbiAgICAgdGhpcy5rbm93bkF1dG9tYXRpb25OYW1lcyA9IG5ldyBTZXQoKTtcblxuICAgICBpZiAoZXh0RGF0YSkge1xuICAgICAgIHRoaXMudmFsaWRhdGUoZXh0RGF0YSk7XG4gICAgIH1cbiAgIH1cblxuICAgLyoqXG4gICAgKiBDcmVhdGVzIGEgbmV3IHtAbGluayBEcml2ZXJDb25maWd9IGluc3RhbmNlIGZvciBhIHtAbGluayBNYW5pZmVzdH0gaW5zdGFuY2UuXG4gICAgKlxuICAgICogQHBhcmFtIHtNYW5pZmVzdH0gbWFuaWZlc3RcbiAgICAqIEBwYXJhbSB7RHJpdmVyQ29uZmlnT3B0aW9uc30gW29wdHNdXG4gICAgKiBAdGhyb3dzIElmIGBtYW5pZmVzdGAgYWxyZWFkeSBhc3NvY2lhdGVkIHdpdGggYSBgRHJpdmVyQ29uZmlnYFxuICAgICogQHJldHVybnMge0RyaXZlckNvbmZpZ31cbiAgICAqL1xuICAgc3RhdGljIGNyZWF0ZSAobWFuaWZlc3QsIHtleHREYXRhLCBsb2dGbn0gPSB7fSkge1xuICAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBEcml2ZXJDb25maWcobWFuaWZlc3QsIHtsb2dGbiwgZXh0RGF0YX0pO1xuICAgICBpZiAoRHJpdmVyQ29uZmlnLmdldEluc3RhbmNlKG1hbmlmZXN0KSkge1xuICAgICAgIHRocm93IG5ldyBFcnJvcihgTWFuaWZlc3Qgd2l0aCBBUFBJVU1fSE9NRSAke21hbmlmZXN0LmFwcGl1bUhvbWV9IGFscmVhZHkgaGFzIGEgRHJpdmVyQ29uZmlnOyB1c2UgRHJpdmVyQ29uZmlnLmdldEluc3RhbmNlKCkgdG8gcmV0cmlldmUgaXQuYCk7XG4gICAgIH1cbiAgICAgRHJpdmVyQ29uZmlnLl9pbnN0YW5jZXMuc2V0KG1hbmlmZXN0LCBpbnN0YW5jZSk7XG4gICAgIHJldHVybiBpbnN0YW5jZTtcbiAgIH1cblxuICAgLyoqXG4gICAgKiBSZXR1cm5zIGEgRHJpdmVyQ29uZmlnIGFzc29jaWF0ZWQgd2l0aCBhIE1hbmlmZXN0XG4gICAgKiBAcGFyYW0ge01hbmlmZXN0fSBtYW5pZmVzdFxuICAgICogQHJldHVybnMge0RyaXZlckNvbmZpZ3x1bmRlZmluZWR9XG4gICAgKi9cbiAgIHN0YXRpYyBnZXRJbnN0YW5jZSAobWFuaWZlc3QpIHtcbiAgICAgcmV0dXJuIERyaXZlckNvbmZpZy5faW5zdGFuY2VzLmdldChtYW5pZmVzdCk7XG4gICB9XG5cbiAgIC8qKlxuICAgKiBDaGVja3MgZXh0ZW5zaW9ucyBmb3IgcHJvYmxlbXNcbiAgICogQHBhcmFtIHtFeHRSZWNvcmQ8RHJpdmVyVHlwZT59IGV4dHNcbiAgICovXG4gICB2YWxpZGF0ZSAoZXh0cykge1xuICAgICB0aGlzLmtub3duQXV0b21hdGlvbk5hbWVzLmNsZWFyKCk7XG4gICAgIHJldHVybiBzdXBlci52YWxpZGF0ZShleHRzKTtcbiAgIH1cblxuICAgLyoqXG4gICAqIEBwYXJhbSB7RXh0TWFuaWZlc3Q8RHJpdmVyVHlwZT59IGV4dERhdGFcbiAgICogQHJldHVybnMge2ltcG9ydCgnLi9leHRlbnNpb24tY29uZmlnJykuUHJvYmxlbVtdfVxuICAgKi9cbiAgIGdldENvbmZpZ1Byb2JsZW1zIChleHREYXRhKSB7XG4gICAgIGNvbnN0IHByb2JsZW1zID0gW107XG4gICAgIGNvbnN0IHtwbGF0Zm9ybU5hbWVzLCBhdXRvbWF0aW9uTmFtZX0gPSBleHREYXRhO1xuXG4gICAgIGlmICghXy5pc0FycmF5KHBsYXRmb3JtTmFtZXMpKSB7XG4gICAgICAgcHJvYmxlbXMucHVzaCh7XG4gICAgICAgICBlcnI6ICdNaXNzaW5nIG9yIGluY29ycmVjdCBzdXBwb3J0ZWQgcGxhdGZvcm1OYW1lcyBsaXN0LicsXG4gICAgICAgICB2YWw6IHBsYXRmb3JtTmFtZXNcbiAgICAgICB9KTtcbiAgICAgfSBlbHNlIHtcbiAgICAgICBpZiAoXy5pc0VtcHR5KHBsYXRmb3JtTmFtZXMpKSB7XG4gICAgICAgICBwcm9ibGVtcy5wdXNoKHtcbiAgICAgICAgICAgZXJyOiAnRW1wdHkgcGxhdGZvcm1OYW1lcyBsaXN0LicsXG4gICAgICAgICAgIHZhbDogcGxhdGZvcm1OYW1lc1xuICAgICAgICAgfSk7XG4gICAgICAgfSBlbHNlIHtcbiAgICAgICAgIGZvciAoY29uc3QgcE5hbWUgb2YgcGxhdGZvcm1OYW1lcykge1xuICAgICAgICAgICBpZiAoIV8uaXNTdHJpbmcocE5hbWUpKSB7XG4gICAgICAgICAgICAgcHJvYmxlbXMucHVzaCh7ZXJyOiAnSW5jb3JyZWN0bHkgZm9ybWF0dGVkIHBsYXRmb3JtTmFtZS4nLCB2YWw6IHBOYW1lfSk7XG4gICAgICAgICAgIH1cbiAgICAgICAgIH1cbiAgICAgICB9XG4gICAgIH1cblxuICAgICBpZiAoIV8uaXNTdHJpbmcoYXV0b21hdGlvbk5hbWUpKSB7XG4gICAgICAgcHJvYmxlbXMucHVzaCh7ZXJyOiAnTWlzc2luZyBvciBpbmNvcnJlY3QgYXV0b21hdGlvbk5hbWUnLCB2YWw6IGF1dG9tYXRpb25OYW1lfSk7XG4gICAgIH1cblxuICAgICBpZiAodGhpcy5rbm93bkF1dG9tYXRpb25OYW1lcy5oYXMoYXV0b21hdGlvbk5hbWUpKSB7XG4gICAgICAgcHJvYmxlbXMucHVzaCh7XG4gICAgICAgICBlcnI6ICdNdWx0aXBsZSBkcml2ZXJzIGNsYWltIHN1cHBvcnQgZm9yIHRoZSBzYW1lIGF1dG9tYXRpb25OYW1lJyxcbiAgICAgICAgIHZhbDogYXV0b21hdGlvbk5hbWVcbiAgICAgICB9KTtcbiAgICAgfVxuXG4gICAgIC8vIHNob3VsZCB3ZSByZXRhaW4gdGhlIG5hbWUgYXQgdGhlIGVuZCBvZiB0aGlzIGZ1bmN0aW9uLCBvbmNlIHdlJ3ZlIGNoZWNrZWQgdGhlcmUgYXJlIG5vIHByb2JsZW1zP1xuICAgICB0aGlzLmtub3duQXV0b21hdGlvbk5hbWVzLmFkZChhdXRvbWF0aW9uTmFtZSk7XG5cbiAgICAgcmV0dXJuIHByb2JsZW1zO1xuICAgfVxuXG4gICAvKipcbiAgICogQHBhcmFtIHtFeHROYW1lPERyaXZlclR5cGU+fSBkcml2ZXJOYW1lXG4gICAqIEBwYXJhbSB7RXh0TWFuaWZlc3Q8RHJpdmVyVHlwZT59IGV4dERhdGFcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gICBleHRlbnNpb25EZXNjIChkcml2ZXJOYW1lLCB7dmVyc2lvbiwgYXV0b21hdGlvbk5hbWV9KSB7XG4gICAgIHJldHVybiBgJHtkcml2ZXJOYW1lfUAke3ZlcnNpb259IChhdXRvbWF0aW9uTmFtZSAnJHthdXRvbWF0aW9uTmFtZX0nKWA7XG4gICB9XG5cbiAgIC8qKlxuICAgKiBHaXZlbiBjYXBhYmlsaXRpZXMsIGZpbmQgYSBtYXRjaGluZyBkcml2ZXIgd2l0aGluIHRoZSBjb25maWcuIExvYWQgaXRzIGNsYXNzIGFuZCByZXR1cm4gaXQgYWxvbmcgd2l0aCB2ZXJzaW9uIGFuZCBkcml2ZXIgbmFtZS5cbiAgICogQHBhcmFtIHtDYXBhYmlsaXRpZXN9IGNhcHNcbiAgICogQHJldHVybnMge01hdGNoZWREcml2ZXJ9XG4gICAqL1xuICAgZmluZE1hdGNoaW5nRHJpdmVyICh7YXV0b21hdGlvbk5hbWUsIHBsYXRmb3JtTmFtZX0pIHtcbiAgICAgaWYgKCFfLmlzU3RyaW5nKHBsYXRmb3JtTmFtZSkpIHtcbiAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBtdXN0IGluY2x1ZGUgYSBwbGF0Zm9ybU5hbWUgY2FwYWJpbGl0eScpO1xuICAgICB9XG5cbiAgICAgaWYgKCFfLmlzU3RyaW5nKGF1dG9tYXRpb25OYW1lKSkge1xuICAgICAgIHRocm93IG5ldyBFcnJvcignWW91IG11c3QgaW5jbHVkZSBhbiBhdXRvbWF0aW9uTmFtZSBjYXBhYmlsaXR5Jyk7XG4gICAgIH1cblxuICAgICBsb2cuaW5mbyhgQXR0ZW1wdGluZyB0byBmaW5kIG1hdGNoaW5nIGRyaXZlciBmb3IgYXV0b21hdGlvbk5hbWUgYCArXG4gICAgICAgICAgICAgYCcke2F1dG9tYXRpb25OYW1lfScgYW5kIHBsYXRmb3JtTmFtZSAnJHtwbGF0Zm9ybU5hbWV9J2ApO1xuXG4gICAgIHRyeSB7XG4gICAgICAgY29uc3Qge1xuICAgICAgICAgZHJpdmVyTmFtZSxcbiAgICAgICAgIG1haW5DbGFzcyxcbiAgICAgICAgIHZlcnNpb24sXG4gICAgICAgfSA9IHRoaXMuX2dldERyaXZlckJ5U3VwcG9ydChhdXRvbWF0aW9uTmFtZSwgcGxhdGZvcm1OYW1lKTtcbiAgICAgICBsb2cuaW5mbyhgVGhlICcke2RyaXZlck5hbWV9JyBkcml2ZXIgd2FzIGluc3RhbGxlZCBhbmQgbWF0Y2hlZCBjYXBzLmApO1xuICAgICAgIGxvZy5pbmZvKGBXaWxsIHJlcXVpcmUgaXQgYXQgJHt0aGlzLmdldEluc3RhbGxQYXRoKGRyaXZlck5hbWUpfWApO1xuICAgICAgIGNvbnN0IGRyaXZlciA9IHRoaXMucmVxdWlyZShkcml2ZXJOYW1lKTtcbiAgICAgICBpZiAoIWRyaXZlcikge1xuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBEcml2ZXIgJyR7ZHJpdmVyTmFtZX0nIGRpZCBub3QgZXhwb3J0IGEgY2xhc3Mgd2l0aCBuYW1lICcke21haW5DbGFzc30nLiBDb250YWN0IHRoZSBhdXRob3Igb2YgdGhlIGRyaXZlciFgKTtcbiAgICAgICB9XG4gICAgICAgcmV0dXJuIHtkcml2ZXIsIHZlcnNpb24sIGRyaXZlck5hbWV9O1xuICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICBjb25zdCBtc2cgPSBgQ291bGQgbm90IGZpbmQgYSBkcml2ZXIgZm9yIGF1dG9tYXRpb25OYW1lIGAgK1xuICAgICAgICAgICAgICAgICAgYCcke2F1dG9tYXRpb25OYW1lfScgYW5kIHBsYXRmb3JtTmFtZSAke3BsYXRmb3JtTmFtZX0nLiBgICtcbiAgICAgICAgICAgICAgICAgIGBIYXZlIHlvdSBpbnN0YWxsZWQgYSBkcml2ZXIgdGhhdCBzdXBwb3J0cyB0aG9zZSBgICtcbiAgICAgICAgICAgICAgICAgIGBjYXBhYmlsaXRpZXM/IFJ1biAnYXBwaXVtIGRyaXZlciBsaXN0IC0taW5zdGFsbGVkJyB0byBzZWUuIGAgK1xuICAgICAgICAgICAgICAgICAgYChMb3dlci1sZXZlbCBlcnJvcjogJHtlcnIubWVzc2FnZX0pYDtcbiAgICAgICB0aHJvdyBuZXcgRXJyb3IobXNnKTtcbiAgICAgfVxuICAgfVxuXG4gICAvKipcbiAgICogR2l2ZW4gYW4gYXV0b21hdGlvbiBuYW1lIGFuZCBwbGF0Zm9ybSBuYW1lLCBmaW5kIGEgc3VpdGFibGUgZHJpdmVyIGFuZCByZXR1cm4gaXRzIGV4dGVuc2lvbiBkYXRhLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWF0Y2hBdXRvbWF0aW9uTmFtZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWF0Y2hQbGF0Zm9ybU5hbWVcbiAgICogQHJldHVybnMge0V4dE1ldGFkYXRhPERyaXZlclR5cGU+ICYgaW1wb3J0KCcuLi8uLi90eXBlcy9hcHBpdW0tbWFuaWZlc3QnKS5JbnRlcm5hbE1ldGFkYXRhICYgaW1wb3J0KCcuLi8uLi90eXBlcy9leHRlcm5hbC1tYW5pZmVzdCcpLkNvbW1vbk1ldGFkYXRhfVxuICAgKi9cbiAgIF9nZXREcml2ZXJCeVN1cHBvcnQgKG1hdGNoQXV0b21hdGlvbk5hbWUsIG1hdGNoUGxhdGZvcm1OYW1lKSB7XG4gICAgIGNvbnN0IGRyaXZlcnMgPSB0aGlzLmluc3RhbGxlZEV4dGVuc2lvbnM7XG4gICAgIGZvciAoY29uc3QgW2RyaXZlck5hbWUsIGRyaXZlckRhdGFdIG9mIF8udG9QYWlycyhkcml2ZXJzKSkge1xuICAgICAgIGNvbnN0IHthdXRvbWF0aW9uTmFtZSwgcGxhdGZvcm1OYW1lc30gPSBkcml2ZXJEYXRhO1xuICAgICAgIGNvbnN0IGFOYW1lTWF0Y2hlcyA9IGF1dG9tYXRpb25OYW1lLnRvTG93ZXJDYXNlKCkgPT09IG1hdGNoQXV0b21hdGlvbk5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgICBjb25zdCBwTmFtZU1hdGNoZXMgPSBfLmluY2x1ZGVzKHBsYXRmb3JtTmFtZXMubWFwKF8udG9Mb3dlciksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoUGxhdGZvcm1OYW1lLnRvTG93ZXJDYXNlKCkpO1xuXG4gICAgICAgaWYgKGFOYW1lTWF0Y2hlcyAmJiBwTmFtZU1hdGNoZXMpIHtcbiAgICAgICAgIHJldHVybiB7ZHJpdmVyTmFtZSwgLi4uZHJpdmVyRGF0YX07XG4gICAgICAgfVxuXG4gICAgICAgaWYgKGFOYW1lTWF0Y2hlcykge1xuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBEcml2ZXIgJyR7ZHJpdmVyTmFtZX0nIHN1cHBvcnRzIGF1dG9tYXRpb25OYW1lIGAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgYCcke2F1dG9tYXRpb25OYW1lfScsIGJ1dCBBcHBpdW0gY291bGQgbm90IGZpbmQgYCArXG4gICAgICAgICAgICAgICAgICAgICAgICBgc3VwcG9ydCBmb3IgcGxhdGZvcm1OYW1lICcke21hdGNoUGxhdGZvcm1OYW1lfScuIFN1cHBvcnRlZCBgICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGBwbGF0Zm9ybU5hbWVzIGFyZTogYCArXG4gICAgICAgICAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShwbGF0Zm9ybU5hbWVzKSk7XG4gICAgICAgfVxuICAgICB9XG5cbiAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZmluZCBpbnN0YWxsZWQgZHJpdmVyIHRvIHN1cHBvcnQgZ2l2ZW4gY2Fwc2ApO1xuICAgfVxufVxuXG4vKipcbiAqIEB0eXBlZGVmIERyaXZlckNvbmZpZ09wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KCcuL2V4dGVuc2lvbi1jb25maWcnKS5FeHRlbnNpb25Mb2dGbn0gW2xvZ0ZuXSAtIE9wdGlvbmFsIGxvZ2dpbmcgZnVuY3Rpb25cbiAqIEBwcm9wZXJ0eSB7TWFuaWZlc3REYXRhWydkcml2ZXJzJ119IFtleHREYXRhXSAtIEV4dGVuc2lvbiBkYXRhXG4gKi9cblxuLyoqXG4gKiBAdGVtcGxhdGUgVFxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vLi4vdHlwZXMnKS5FeHRNZXRhZGF0YTxUPn0gRXh0TWV0YWRhdGFcbiAqL1xuXG4vKipcbiAqIEB0ZW1wbGF0ZSBUXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi8uLi90eXBlcycpLkV4dE1hbmlmZXN0PFQ+fSBFeHRNYW5pZmVzdFxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vLi4vdHlwZXMnKS5NYW5pZmVzdERhdGF9IE1hbmlmZXN0RGF0YVxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vLi4vdHlwZXMnKS5Ecml2ZXJUeXBlfSBEcml2ZXJUeXBlXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuL21hbmlmZXN0JykuTWFuaWZlc3R9IE1hbmlmZXN0XG4gKi9cblxuLyoqXG4gKiBAdGVtcGxhdGUgVFxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vLi4vdHlwZXMnKS5FeHRSZWNvcmQ8VD59IEV4dFJlY29yZFxuICovXG5cbi8qKlxuICogQHRlbXBsYXRlIFRcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uLy4uL3R5cGVzJykuRXh0TmFtZTxUPn0gRXh0TmFtZVxuICovXG5cblxuLyoqXG4gKiBSZXR1cm4gdmFsdWUgb2Yge0BsaW5rY29kZSBEcml2ZXJDb25maWcuZmluZE1hdGNoaW5nRHJpdmVyfVxuICogQHR5cGVkZWYgTWF0Y2hlZERyaXZlclxuICogQHByb3BlcnR5IHtpbXBvcnQoJy4uLy4uL3R5cGVzL2V4dGVuc2lvbicpLkRyaXZlckNsYXNzfSBkcml2ZXJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB2ZXJzaW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gZHJpdmVyTmFtZVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLkNhcGFiaWxpdGllc30gQ2FwYWJpbGl0aWVzXG4gKi9cbiJdfQ==
@@ -0,0 +1,170 @@
1
+ /**
2
+ * This class is abstract. It should not be instantiated directly.
3
+ *
4
+ * Subclasses should provide the generic parameter to implement.
5
+ * @template {ExtensionType} ExtType
6
+ */
7
+ export class ExtensionConfig<ExtType extends import("../../types").ExtensionType> {
8
+ /**
9
+ * Intended to be called by corresponding instance methods of subclass.
10
+ * @private
11
+ * @template {ExtensionType} ExtType
12
+ * @param {string} appiumHome
13
+ * @param {ExtType} extType
14
+ * @param {ExtName<ExtType>} extName - Extension name (unique to its type)
15
+ * @param {ExtManifestWithSchema<ExtType>} extData - Extension config
16
+ * @returns {import('ajv').SchemaObject|undefined}
17
+ */
18
+ private static _readExtensionSchema;
19
+ /**
20
+ * Returns `true` if a specific {@link ExtManifest} object has a `schema` prop.
21
+ * The {@link ExtManifest} object becomes a {@link ExtManifestWithSchema} object.
22
+ * @template {ExtensionType} ExtType
23
+ * @param {ExtManifest<ExtType>} extData
24
+ * @returns {extData is ExtManifestWithSchema<ExtType>}
25
+ */
26
+ static extDataHasSchema<ExtType_1 extends import("../../types").ExtensionType>(extData: ExtManifest<ExtType_1>): extData is ExtManifestWithSchema<ExtType_1>;
27
+ /**
28
+ * @protected
29
+ * @param {ExtType} extensionType - Type of extension
30
+ * @param {Manifest} manifest - `Manifest` instance
31
+ * @param {ExtensionLogFn} [logFn]
32
+ */
33
+ protected constructor();
34
+ /** @type {ExtType} */
35
+ extensionType: ExtType;
36
+ /** @type {`${ExtType}s`} */
37
+ configKey: `${ExtType}s`;
38
+ /** @type {ExtRecord<ExtType>} */
39
+ installedExtensions: ExtRecord<ExtType>;
40
+ /** @type {ExtensionLogFn} */
41
+ log: ExtensionLogFn;
42
+ /** @type {Manifest} */
43
+ manifest: Manifest;
44
+ get manifestPath(): string;
45
+ get appiumHome(): string;
46
+ /**
47
+ * Checks extensions for problems
48
+ * @param {ExtRecord<ExtType>} exts - Extension data
49
+ */
50
+ validate(exts: ExtRecord<ExtType>): ExtRecord<ExtType>;
51
+ /**
52
+ * @param {ExtManifest<ExtType>} extData
53
+ * @param {ExtName<ExtType>} extName
54
+ * @returns {Problem[]}
55
+ */
56
+ getSchemaProblems(extData: ExtManifest<ExtType>, extName: ExtName<ExtType>): Problem[];
57
+ /**
58
+ * @param {ExtManifest<ExtType>} extData
59
+ * @param {ExtName<ExtType>} extName
60
+ * @returns {Problem[]}
61
+ */
62
+ getGenericConfigProblems(extData: ExtManifest<ExtType>, extName: ExtName<ExtType>): Problem[];
63
+ /**
64
+ * @abstract
65
+ * @param {ExtManifest<ExtType>} extData
66
+ * @returns {Problem[]}
67
+ */
68
+ getConfigProblems(extData: ExtManifest<ExtType>): Problem[];
69
+ /**
70
+ * @param {string} extName
71
+ * @param {ExtManifest<ExtType>} extData
72
+ * @param {ExtensionConfigMutationOpts} [opts]
73
+ * @returns {Promise<void>}
74
+ */
75
+ addExtension(extName: string, extData: ExtManifest<ExtType>, { write }?: ExtensionConfigMutationOpts | undefined): Promise<void>;
76
+ /**
77
+ * @param {ExtName<ExtType>} extName
78
+ * @param {ExtManifest<ExtType>|import('../cli/extension-command').ExtensionFields<ExtType>} extData
79
+ * @param {ExtensionConfigMutationOpts} [opts]
80
+ * @returns {Promise<void>}
81
+ */
82
+ updateExtension(extName: ExtName<ExtType>, extData: ExtManifest<ExtType> | import('../cli/extension-command').ExtensionFields<ExtType>, { write }?: ExtensionConfigMutationOpts | undefined): Promise<void>;
83
+ /**
84
+ * @param {ExtName<ExtType>} extName
85
+ * @param {ExtensionConfigMutationOpts} [opts]
86
+ * @returns {Promise<void>}
87
+ */
88
+ removeExtension(extName: ExtName<ExtType>, { write }?: ExtensionConfigMutationOpts | undefined): Promise<void>;
89
+ /**
90
+ * @param {ExtName<ExtType>[]} [activeNames]
91
+ * @returns {void}
92
+ */
93
+ print(activeNames?: string[] | undefined): void;
94
+ /**
95
+ * Returns a string describing the extension. Subclasses must implement.
96
+ * @param {ExtName<ExtType>} extName - Extension name
97
+ * @param {ExtManifest<ExtType>} extData - Extension data
98
+ * @returns {string}
99
+ * @abstract
100
+ */
101
+ extensionDesc(extName: ExtName<ExtType>, extData: ExtManifest<ExtType>): string;
102
+ /**
103
+ * @param {string} extName
104
+ * @returns {string}
105
+ */
106
+ getInstallPath(extName: string): string;
107
+ /**
108
+ * Loads extension and returns its main class (constructor)
109
+ * @param {ExtName<ExtType>} extName
110
+ * @returns {ExtClass<ExtType>}
111
+ */
112
+ require(extName: ExtName<ExtType>): ExtClass<ExtType>;
113
+ /**
114
+ * @param {string} extName
115
+ * @returns {boolean}
116
+ */
117
+ isInstalled(extName: string): boolean;
118
+ /**
119
+ * If an extension provides a schema, this will load the schema and attempt to
120
+ * register it with the schema registrar.
121
+ * @param {ExtName<ExtType>} extName - Name of extension
122
+ * @param {ExtManifestWithSchema<ExtType>} extData - Extension data
123
+ * @returns {import('ajv').SchemaObject|undefined}
124
+ */
125
+ readExtensionSchema(extName: ExtName<ExtType>, extData: ExtManifestWithSchema<ExtType>): import('ajv').SchemaObject | undefined;
126
+ }
127
+ /**
128
+ * Config problem
129
+ */
130
+ export type Problem = {
131
+ /**
132
+ * - Error message
133
+ */
134
+ err: string;
135
+ /**
136
+ * - Associated value
137
+ */
138
+ val: any;
139
+ };
140
+ /**
141
+ * An optional logging function provided to an {@link ExtensionConfig } subclass.
142
+ */
143
+ export type ExtensionLogFn = (...args: any[]) => void;
144
+ export type ExtensionType = import('../../types').ExtensionType;
145
+ export type Manifest = import('./manifest').Manifest;
146
+ export type ExtManifest<T> = import('../../types/appium-manifest').ExtManifest<T>;
147
+ export type ExtManifestWithSchema<T> = import('../../types/appium-manifest').ExtManifestWithSchema<T>;
148
+ export type ExtName<T> = import('../../types/appium-manifest').ExtName<T>;
149
+ export type ExtClass<T> = import('../../types/extension').ExtClass<T>;
150
+ export type ExtRecord<T> = import('../../types/appium-manifest').ExtRecord<T>;
151
+ /**
152
+ * Options for various methods in {@link ExtensionConfig }
153
+ */
154
+ export type ExtensionConfigMutationOpts = {
155
+ /**
156
+ * Whether or not to write the manifest to disk after a mutation operation
157
+ */
158
+ write?: boolean | undefined;
159
+ };
160
+ /**
161
+ * A valid install type
162
+ */
163
+ export type InstallType = typeof INSTALL_TYPE_NPM | typeof INSTALL_TYPE_GIT | typeof INSTALL_TYPE_LOCAL | typeof INSTALL_TYPE_GITHUB;
164
+ export const INSTALL_TYPE_NPM: "npm";
165
+ export const INSTALL_TYPE_GIT: "git";
166
+ export const INSTALL_TYPE_LOCAL: "local";
167
+ export const INSTALL_TYPE_GITHUB: "github";
168
+ /** @type {Set<InstallType>} */
169
+ export const INSTALL_TYPES: Set<InstallType>;
170
+ //# sourceMappingURL=extension-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extension-config.d.ts","sourceRoot":"","sources":["../../../lib/extension/extension-config.js"],"names":[],"mappings":"AAwBA;;;;;GAKG;AACH;IAkTE;;;;;;;;;OASG;IACH,oCAoBC;IAED;;;;;;OAMG;IACH,6JAEC;IA3UD;;;;;OAKG;IACH,wBAOC;IA5BD,sBAAsB;IACtB,eADW,OAAO,CACJ;IAEd,4BAA4B;IAC5B,WADW,GAAG,OAAO,GAAG,CACd;IAEV,iCAAiC;IACjC,qBADW,UAAU,OAAO,CAAC,CACT;IAEpB,6BAA6B;IAC7B,KADW,cAAc,CACrB;IAEJ,uBAAuB;IACvB,UADW,QAAQ,CACV;IAiBT,2BAEC;IAED,yBAEC;IAED;;;OAGG;IACH,eAFW,UAAU,OAAO,CAAC,sBAgD5B;IAED;;;;OAIG;IACH,2BAJW,YAAY,OAAO,CAAC,WACpB,QAAQ,OAAO,CAAC,GACd,OAAO,EAAE,CAyCrB;IAED;;;;OAIG;IAEH,kCALW,YAAY,OAAO,CAAC,WACpB,QAAQ,OAAO,CAAC,GACd,OAAO,EAAE,CAyCrB;IAED;;;;OAIG;IAEH,2BAJW,YAAY,OAAO,CAAC,GAClB,OAAO,EAAE,CAMrB;IAED;;;;;OAKG;IACH,sBALW,MAAM,WACN,YAAY,OAAO,CAAC,wDAElB,QAAQ,IAAI,CAAC,CAOzB;IAED;;;;;OAKG;IACH,yBALW,QAAQ,OAAO,CAAC,WAChB,YAAY,OAAO,CAAC,GAAC,OAAO,0BAA0B,EAAE,eAAe,CAAC,OAAO,CAAC,wDAE9E,QAAQ,IAAI,CAAC,CAUzB;IAED;;;;OAIG;IACH,yBAJW,QAAQ,OAAO,CAAC,wDAEd,QAAQ,IAAI,CAAC,CAOzB;IAED;;;OAGG;IAEH,2CAHa,IAAI,CAqBhB;IAED;;;;;;OAMG;IAEH,uBANW,QAAQ,OAAO,CAAC,WAChB,YAAY,OAAO,CAAC,GAClB,MAAM,CAMlB;IAED;;;OAGG;IACH,wBAHW,MAAM,GACJ,MAAM,CAIlB;IAED;;;;OAIG;IACH,iBAHW,QAAQ,OAAO,CAAC,GACd,SAAS,OAAO,CAAC,CAa7B;IAED;;;OAGG;IACH,qBAHW,MAAM,GACJ,OAAO,CAInB;IA6CD;;;;;;OAMG;IACH,6BAJW,QAAQ,OAAO,CAAC,WAChB,sBAAsB,OAAO,CAAC,GAC5B,OAAO,KAAK,EAAE,YAAY,GAAC,SAAS,CAShD;CACF;;;;;;;;SAaa,MAAM;;;;SACN,GAAG;;;;;uCAMH,GAAG,OACJ,IAAI;4BAIJ,OAAO,aAAa,EAAE,aAAa;uBACnC,OAAO,YAAY,EAAE,QAAQ;6BAK7B,OAAO,6BAA6B,EAAE,WAAW,CAAC,CAAC,CAAC;uCAKpD,OAAO,6BAA6B,EAAE,qBAAqB,CAAC,CAAC,CAAC;yBAK9D,OAAO,6BAA6B,EAAE,OAAO,CAAC,CAAC,CAAC;0BAKhD,OAAO,uBAAuB,EAAE,QAAQ,CAAC,CAAC,CAAC;2BAK3C,OAAO,6BAA6B,EAAE,SAAS,CAAC,CAAC,CAAC;;;;;;;;;;;;;0BAWlD,uBAAuB,GAAG,uBAAuB,GAAG,yBAAyB,GAAG,0BAA0B;AA7bvH,qCAA+B;AAG/B,qCAA+B;AAF/B,yCAAmC;AACnC,2CAAqC;AAGrC,+BAA+B;AAC/B,4BADW,IAAI,WAAW,CAAC,CAMxB"}