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.
- package/README.md +10 -11
- package/build/lib/appium.d.ts +215 -0
- package/build/lib/appium.d.ts.map +1 -0
- package/build/lib/appium.js +238 -132
- package/build/lib/cli/args.d.ts +20 -0
- package/build/lib/cli/args.d.ts.map +1 -0
- package/build/lib/cli/args.js +96 -282
- package/build/lib/cli/driver-command.d.ts +36 -0
- package/build/lib/cli/driver-command.d.ts.map +1 -0
- package/build/lib/cli/driver-command.js +19 -12
- package/build/lib/cli/extension-command.d.ts +345 -0
- package/build/lib/cli/extension-command.d.ts.map +1 -0
- package/build/lib/cli/extension-command.js +171 -96
- package/build/lib/cli/extension.d.ts +14 -0
- package/build/lib/cli/extension.d.ts.map +1 -0
- package/build/lib/cli/extension.js +31 -16
- package/build/lib/cli/parser.d.ts +79 -0
- package/build/lib/cli/parser.d.ts.map +1 -0
- package/build/lib/cli/parser.js +152 -95
- package/build/lib/cli/plugin-command.d.ts +39 -0
- package/build/lib/cli/plugin-command.d.ts.map +1 -0
- package/build/lib/cli/plugin-command.js +18 -13
- package/build/lib/cli/utils.d.ts +29 -0
- package/build/lib/cli/utils.d.ts.map +1 -0
- package/build/lib/cli/utils.js +27 -3
- package/build/lib/config-file.d.ts +100 -0
- package/build/lib/config-file.d.ts.map +1 -0
- package/build/lib/config-file.js +136 -0
- package/build/lib/config.d.ts +40 -0
- package/build/lib/config.d.ts.map +1 -0
- package/build/lib/config.js +92 -67
- package/build/lib/constants.d.ts +48 -0
- package/build/lib/constants.d.ts.map +1 -0
- package/build/lib/constants.js +60 -0
- package/build/lib/extension/driver-config.d.ts +84 -0
- package/build/lib/extension/driver-config.d.ts.map +1 -0
- package/build/lib/extension/driver-config.js +190 -0
- package/build/lib/extension/extension-config.d.ts +170 -0
- package/build/lib/extension/extension-config.d.ts.map +1 -0
- package/build/lib/extension/extension-config.js +297 -0
- package/build/lib/extension/index.d.ts +39 -0
- package/build/lib/extension/index.d.ts.map +1 -0
- package/build/lib/extension/index.js +77 -0
- package/build/lib/extension/manifest.d.ts +174 -0
- package/build/lib/extension/manifest.d.ts.map +1 -0
- package/build/lib/extension/manifest.js +246 -0
- package/build/lib/extension/package-changed.d.ts +11 -0
- package/build/lib/extension/package-changed.d.ts.map +1 -0
- package/build/lib/extension/package-changed.js +68 -0
- package/build/lib/extension/plugin-config.d.ts +62 -0
- package/build/lib/extension/plugin-config.d.ts.map +1 -0
- package/build/lib/extension/plugin-config.js +87 -0
- package/build/lib/grid-register.d.ts +10 -0
- package/build/lib/grid-register.d.ts.map +1 -0
- package/build/lib/grid-register.js +21 -25
- package/build/lib/logger.d.ts +3 -0
- package/build/lib/logger.d.ts.map +1 -0
- package/build/lib/logger.js +4 -6
- package/build/lib/logsink.d.ts +4 -0
- package/build/lib/logsink.d.ts.map +1 -0
- package/build/lib/logsink.js +12 -16
- package/build/lib/main.d.ts +51 -0
- package/build/lib/main.d.ts.map +1 -0
- package/build/lib/main.js +174 -82
- package/build/lib/schema/arg-spec.d.ts +143 -0
- package/build/lib/schema/arg-spec.d.ts.map +1 -0
- package/build/lib/schema/arg-spec.js +119 -0
- package/build/lib/schema/cli-args.d.ts +19 -0
- package/build/lib/schema/cli-args.d.ts.map +1 -0
- package/build/lib/schema/cli-args.js +180 -0
- package/build/lib/schema/cli-transformers.d.ts +5 -0
- package/build/lib/schema/cli-transformers.d.ts.map +1 -0
- package/build/lib/schema/cli-transformers.js +74 -0
- package/build/lib/schema/index.d.ts +3 -0
- package/build/lib/schema/index.d.ts.map +1 -0
- package/build/lib/schema/index.js +34 -0
- package/build/lib/schema/keywords.d.ts +24 -0
- package/build/lib/schema/keywords.d.ts.map +1 -0
- package/build/lib/schema/keywords.js +70 -0
- package/build/lib/schema/schema.d.ts +259 -0
- package/build/lib/schema/schema.d.ts.map +1 -0
- package/build/lib/schema/schema.js +452 -0
- package/build/lib/utils.d.ts +66 -0
- package/build/lib/utils.d.ts.map +1 -0
- package/build/lib/utils.js +35 -139
- package/build/tsconfig.tsbuildinfo +1 -0
- package/index.js +11 -0
- package/lib/appium-config.schema.json +278 -0
- package/lib/appium.js +398 -155
- package/lib/cli/args.js +174 -377
- package/lib/cli/driver-command.js +22 -7
- package/lib/cli/extension-command.js +372 -177
- package/lib/cli/extension.js +32 -10
- package/lib/cli/parser.js +252 -83
- package/lib/cli/plugin-command.js +19 -6
- package/lib/cli/utils.js +22 -2
- package/lib/config-file.js +223 -0
- package/lib/config.js +169 -69
- package/lib/constants.js +78 -0
- package/lib/extension/driver-config.js +249 -0
- package/lib/extension/extension-config.js +458 -0
- package/lib/extension/index.js +102 -0
- package/lib/extension/manifest.js +486 -0
- package/lib/extension/package-changed.js +63 -0
- package/lib/extension/plugin-config.js +113 -0
- package/lib/grid-register.js +25 -22
- package/lib/logger.js +1 -1
- package/lib/logsink.js +14 -7
- package/lib/main.js +233 -83
- package/lib/schema/arg-spec.js +232 -0
- package/lib/schema/cli-args.js +261 -0
- package/lib/schema/cli-transformers.js +122 -0
- package/lib/schema/index.js +2 -0
- package/lib/schema/keywords.js +134 -0
- package/lib/schema/schema.js +734 -0
- package/lib/utils.js +85 -129
- package/package.json +62 -85
- package/scripts/postinstall.js +71 -0
- package/types/appium-manifest.d.ts +61 -0
- package/types/cli.d.ts +134 -0
- package/types/extension.d.ts +56 -0
- package/types/external-manifest.d.ts +58 -0
- package/types/index.d.ts +7 -0
- package/CHANGELOG.md +0 -3515
- package/bin/ios-webkit-debug-proxy-launcher.js +0 -71
- package/build/lib/cli/npm.js +0 -206
- package/build/lib/cli/parser-helpers.js +0 -82
- package/build/lib/driver-config.js +0 -77
- package/build/lib/drivers.js +0 -96
- package/build/lib/extension-config.js +0 -251
- package/build/lib/plugin-config.js +0 -59
- package/build/lib/plugins.js +0 -14
- package/lib/cli/npm.js +0 -183
- package/lib/cli/parser-helpers.js +0 -79
- package/lib/driver-config.js +0 -46
- package/lib/drivers.js +0 -81
- package/lib/extension-config.js +0 -208
- package/lib/plugin-config.js +0 -34
- 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"}
|