appium 2.0.0-beta.46 → 2.0.0-beta.48
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 +145 -44
- package/build/lib/appium.d.ts +3 -103
- package/build/lib/appium.d.ts.map +1 -1
- package/build/lib/appium.js +679 -549
- package/build/lib/appium.js.map +1 -1
- package/build/lib/cli/args.js +247 -127
- package/build/lib/cli/args.js.map +1 -1
- package/build/lib/cli/driver-command.d.ts +24 -5
- package/build/lib/cli/driver-command.d.ts.map +1 -1
- package/build/lib/cli/driver-command.js +78 -88
- package/build/lib/cli/driver-command.js.map +1 -1
- package/build/lib/cli/extension-command.d.ts +33 -24
- package/build/lib/cli/extension-command.d.ts.map +1 -1
- package/build/lib/cli/extension-command.js +729 -512
- package/build/lib/cli/extension-command.js.map +1 -1
- package/build/lib/cli/extension.d.ts +7 -6
- package/build/lib/cli/extension.d.ts.map +1 -1
- package/build/lib/cli/extension.js +68 -65
- package/build/lib/cli/extension.js.map +1 -1
- package/build/lib/cli/parser.d.ts +3 -3
- package/build/lib/cli/parser.d.ts.map +1 -1
- package/build/lib/cli/parser.js +234 -192
- package/build/lib/cli/parser.js.map +1 -1
- package/build/lib/cli/plugin-command.js +58 -87
- package/build/lib/cli/plugin-command.js.map +1 -1
- package/build/lib/cli/utils.js +66 -69
- package/build/lib/cli/utils.js.map +1 -1
- package/build/lib/config-file.d.ts.map +1 -1
- package/build/lib/config-file.js +189 -120
- package/build/lib/config-file.js.map +1 -1
- package/build/lib/config.d.ts.map +1 -1
- package/build/lib/config.js +254 -213
- package/build/lib/config.js.map +1 -1
- package/build/lib/constants.d.ts +6 -5
- package/build/lib/constants.d.ts.map +1 -1
- package/build/lib/constants.js +65 -59
- package/build/lib/constants.js.map +1 -1
- package/build/lib/extension/driver-config.js +199 -164
- package/build/lib/extension/driver-config.js.map +1 -1
- package/build/lib/extension/extension-config.d.ts +33 -26
- package/build/lib/extension/extension-config.d.ts.map +1 -1
- package/build/lib/extension/extension-config.js +541 -396
- package/build/lib/extension/extension-config.js.map +1 -1
- package/build/lib/extension/index.js +98 -68
- package/build/lib/extension/index.js.map +1 -1
- package/build/lib/extension/manifest-migrations.d.ts +27 -0
- package/build/lib/extension/manifest-migrations.d.ts.map +1 -0
- package/build/lib/extension/manifest-migrations.js +118 -0
- package/build/lib/extension/manifest-migrations.js.map +1 -0
- package/build/lib/extension/manifest.d.ts +35 -63
- package/build/lib/extension/manifest.d.ts.map +1 -1
- package/build/lib/extension/manifest.js +500 -240
- package/build/lib/extension/manifest.js.map +1 -1
- package/build/lib/extension/package-changed.js +57 -61
- package/build/lib/extension/package-changed.js.map +1 -1
- package/build/lib/extension/plugin-config.d.ts +2 -3
- package/build/lib/extension/plugin-config.d.ts.map +1 -1
- package/build/lib/extension/plugin-config.js +94 -70
- package/build/lib/extension/plugin-config.js.map +1 -1
- package/build/lib/grid-register.js +119 -137
- package/build/lib/grid-register.js.map +1 -1
- package/build/lib/logger.d.ts +1 -1
- package/build/lib/logger.d.ts.map +1 -1
- package/build/lib/logger.js +5 -15
- package/build/lib/logger.js.map +1 -1
- package/build/lib/logsink.d.ts.map +1 -1
- package/build/lib/logsink.js +189 -183
- package/build/lib/logsink.js.map +1 -1
- package/build/lib/main.d.ts +19 -12
- package/build/lib/main.d.ts.map +1 -1
- package/build/lib/main.js +330 -304
- package/build/lib/main.js.map +1 -1
- package/build/lib/schema/arg-spec.js +153 -108
- package/build/lib/schema/arg-spec.js.map +1 -1
- package/build/lib/schema/cli-args.js +203 -164
- package/build/lib/schema/cli-args.js.map +1 -1
- package/build/lib/schema/cli-transformers.js +117 -72
- package/build/lib/schema/cli-transformers.js.map +1 -1
- package/build/lib/schema/index.js +17 -32
- package/build/lib/schema/index.js.map +1 -1
- package/build/lib/schema/keywords.js +125 -67
- package/build/lib/schema/keywords.js.map +1 -1
- package/build/lib/schema/schema.d.ts.map +1 -1
- package/build/lib/schema/schema.js +582 -417
- package/build/lib/schema/schema.js.map +1 -1
- package/build/lib/utils.d.ts +41 -255
- package/build/lib/utils.d.ts.map +1 -1
- package/build/lib/utils.js +342 -193
- package/build/lib/utils.js.map +1 -1
- package/build/tsconfig.tsbuildinfo +1 -1
- package/build/types/cli.d.ts +45 -34
- package/build/types/cli.d.ts.map +1 -1
- package/build/types/cli.js +3 -0
- package/build/types/cli.js.map +1 -0
- package/build/types/index.d.ts +1 -2
- package/build/types/index.d.ts.map +1 -1
- package/build/types/index.js +19 -0
- package/build/types/index.js.map +1 -0
- package/build/types/manifest/base.d.ts +135 -0
- package/build/types/manifest/base.d.ts.map +1 -0
- package/build/types/manifest/base.js +3 -0
- package/build/types/manifest/base.js.map +1 -0
- package/build/types/manifest/index.d.ts +19 -0
- package/build/types/manifest/index.d.ts.map +1 -0
- package/build/types/manifest/index.js +40 -0
- package/build/types/manifest/index.js.map +1 -0
- package/build/types/manifest/v3.d.ts +139 -0
- package/build/types/manifest/v3.d.ts.map +1 -0
- package/build/types/manifest/v3.js +3 -0
- package/build/types/manifest/v3.js.map +1 -0
- package/lib/appium.js +1 -1
- package/lib/cli/args.js +1 -1
- package/lib/cli/driver-command.js +17 -0
- package/lib/cli/extension-command.js +119 -65
- package/lib/cli/extension.js +9 -8
- package/lib/cli/parser.js +2 -2
- package/lib/config-file.js +2 -3
- package/lib/config.js +3 -2
- package/lib/constants.js +7 -5
- package/lib/extension/extension-config.js +52 -47
- package/lib/extension/manifest-migrations.js +120 -0
- package/lib/extension/manifest.js +184 -103
- package/lib/extension/plugin-config.js +1 -2
- package/lib/logsink.js +26 -5
- package/lib/main.js +58 -50
- package/lib/schema/schema.js +6 -1
- package/lib/utils.js +62 -0
- package/package.json +24 -25
- package/scripts/autoinstall-extensions.js +78 -26
- package/types/cli.ts +81 -42
- package/types/index.ts +1 -2
- package/types/manifest/README.md +30 -0
- package/types/manifest/base.ts +158 -0
- package/types/manifest/index.ts +27 -0
- package/types/manifest/v3.ts +161 -0
- package/build/types/appium-manifest.d.ts +0 -59
- package/build/types/appium-manifest.d.ts.map +0 -1
- package/build/types/extension-manifest.d.ts +0 -55
- package/build/types/extension-manifest.d.ts.map +0 -1
- package/types/appium-manifest.ts +0 -73
- package/types/extension-manifest.ts +0 -64
package/build/lib/utils.js
CHANGED
|
@@ -1,224 +1,373 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
});
|
|
6
|
-
exports.adjustNodePath =
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
require("source-map-support/register");
|
|
15
|
-
|
|
16
|
-
var _lodash = _interopRequireDefault(require("lodash"));
|
|
17
|
-
|
|
18
|
-
var _logger = _interopRequireDefault(require("./logger"));
|
|
19
|
-
|
|
20
|
-
var _baseDriver = require("@appium/base-driver");
|
|
21
|
-
|
|
22
|
-
var _util = require("util");
|
|
23
|
-
|
|
24
|
-
var _support = require("@appium/support");
|
|
25
|
-
|
|
26
|
-
var _path = _interopRequireDefault(require("path"));
|
|
27
|
-
|
|
28
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
29
|
-
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.adjustNodePath = exports.removeAppiumPrefixes = exports.pullSettings = exports.getPackageVersion = exports.insertAppiumPrefixes = exports.parseCapsForInnerDriver = exports.inspect = exports.isPluginCommandArgs = exports.isDriverCommandArgs = exports.isExtensionCommandArgs = exports.isServerCommandArgs = void 0;
|
|
7
|
+
const lodash_1 = __importDefault(require("lodash"));
|
|
8
|
+
const logger_1 = __importDefault(require("./logger"));
|
|
9
|
+
const base_driver_1 = require("@appium/base-driver");
|
|
10
|
+
const util_1 = require("util");
|
|
11
|
+
const support_1 = require("@appium/support");
|
|
12
|
+
const path_1 = __importDefault(require("path"));
|
|
13
|
+
const constants_1 = require("./constants");
|
|
30
14
|
const W3C_APPIUM_PREFIX = 'appium';
|
|
31
|
-
const STANDARD_CAPS_LOWERCASE = new Set([...
|
|
15
|
+
const STANDARD_CAPS_LOWERCASE = new Set([...base_driver_1.STANDARD_CAPS].map((cap) => cap.toLowerCase()));
|
|
16
|
+
/**
|
|
17
|
+
*
|
|
18
|
+
* If `stdout` is a TTY, this is `true`.
|
|
19
|
+
*
|
|
20
|
+
* Used for tighter control over log output.
|
|
21
|
+
* @type {boolean}
|
|
22
|
+
*/
|
|
32
23
|
const isStdoutTTY = process.stdout.isTTY;
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
24
|
+
/**
|
|
25
|
+
* Dumps to value to the console using `info` logger.
|
|
26
|
+
*
|
|
27
|
+
* @todo May want to force color to be `false` if {@link isStdoutTTY} is `false`.
|
|
28
|
+
*/
|
|
29
|
+
const inspect = lodash_1.default.flow(lodash_1.default.partialRight(
|
|
30
|
+
/** @type {(object: any, options: import('util').InspectOptions) => string} */ (util_1.inspect), { colors: true, depth: null, compact: !isStdoutTTY }), (...args) => {
|
|
31
|
+
logger_1.default.info(...args);
|
|
40
32
|
});
|
|
41
|
-
|
|
42
33
|
exports.inspect = inspect;
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
34
|
+
/**
|
|
35
|
+
* Takes the caps that were provided in the request and translates them
|
|
36
|
+
* into caps that can be used by the inner drivers.
|
|
37
|
+
*
|
|
38
|
+
* @template {Constraints} C
|
|
39
|
+
* @template [J=any]
|
|
40
|
+
* @param {J} jsonwpCapabilities
|
|
41
|
+
* @param {W3CCapabilities<C>} w3cCapabilities
|
|
42
|
+
* @param {C} constraints
|
|
43
|
+
* @param {NSCapabilities<C>} [defaultCapabilities]
|
|
44
|
+
* @returns {ParsedDriverCaps<C,J>|InvalidCaps<C,J>}
|
|
45
|
+
*/
|
|
46
|
+
function parseCapsForInnerDriver(jsonwpCapabilities, w3cCapabilities, constraints = /** @type {C} */ ({}), defaultCapabilities = {}) {
|
|
47
|
+
// Check if the caller sent JSONWP caps, W3C caps, or both
|
|
48
|
+
const hasW3CCaps = lodash_1.default.isPlainObject(w3cCapabilities) &&
|
|
49
|
+
(lodash_1.default.has(w3cCapabilities, 'alwaysMatch') || lodash_1.default.has(w3cCapabilities, 'firstMatch'));
|
|
50
|
+
const hasJSONWPCaps = lodash_1.default.isPlainObject(jsonwpCapabilities);
|
|
51
|
+
let desiredCaps = /** @type {ParsedDriverCaps<C>['desiredCaps']} */ ({});
|
|
52
|
+
/** @type {ParsedDriverCaps<C>['processedW3CCapabilities']} */
|
|
53
|
+
let processedW3CCapabilities;
|
|
54
|
+
/** @type {ParsedDriverCaps<C>['processedJsonwpCapabilities']} */
|
|
55
|
+
let processedJsonwpCapabilities;
|
|
56
|
+
if (!hasW3CCaps) {
|
|
57
|
+
return /** @type {InvalidCaps<C>} */ ({
|
|
58
|
+
protocol: base_driver_1.PROTOCOLS.W3C,
|
|
59
|
+
error: new Error('W3C capabilities should be provided'),
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
const { W3C } = base_driver_1.PROTOCOLS;
|
|
63
|
+
const protocol = W3C;
|
|
64
|
+
// Make sure we don't mutate the original arguments
|
|
65
|
+
jsonwpCapabilities = lodash_1.default.cloneDeep(jsonwpCapabilities);
|
|
66
|
+
w3cCapabilities = lodash_1.default.cloneDeep(w3cCapabilities);
|
|
67
|
+
defaultCapabilities = lodash_1.default.cloneDeep(defaultCapabilities);
|
|
68
|
+
if (!lodash_1.default.isEmpty(defaultCapabilities)) {
|
|
69
|
+
if (hasW3CCaps) {
|
|
70
|
+
for (const [defaultCapKey, defaultCapValue] of lodash_1.default.toPairs(defaultCapabilities)) {
|
|
71
|
+
let isCapAlreadySet = false;
|
|
72
|
+
// Check if the key is already present in firstMatch entries
|
|
73
|
+
for (const firstMatchEntry of w3cCapabilities.firstMatch ?? []) {
|
|
74
|
+
if (lodash_1.default.isPlainObject(firstMatchEntry) &&
|
|
75
|
+
lodash_1.default.has(removeAppiumPrefixes(firstMatchEntry), removeAppiumPrefix(defaultCapKey))) {
|
|
76
|
+
isCapAlreadySet = true;
|
|
77
|
+
break;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
// Check if the key is already present in alwaysMatch entries
|
|
81
|
+
isCapAlreadySet =
|
|
82
|
+
isCapAlreadySet ||
|
|
83
|
+
(lodash_1.default.isPlainObject(w3cCapabilities.alwaysMatch) &&
|
|
84
|
+
lodash_1.default.has(removeAppiumPrefixes(w3cCapabilities.alwaysMatch), removeAppiumPrefix(defaultCapKey)));
|
|
85
|
+
if (isCapAlreadySet) {
|
|
86
|
+
// Skip if the key is already present in the provided caps
|
|
87
|
+
continue;
|
|
88
|
+
}
|
|
89
|
+
// Only add the default capability if it is not overridden
|
|
90
|
+
if (lodash_1.default.isEmpty(w3cCapabilities.firstMatch)) {
|
|
91
|
+
w3cCapabilities.firstMatch = /** @type {W3CCapabilities<C>['firstMatch']} */ ([
|
|
92
|
+
{ [defaultCapKey]: defaultCapValue },
|
|
93
|
+
]);
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
w3cCapabilities.firstMatch[0][defaultCapKey] = defaultCapValue;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
84
99
|
}
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
} else {
|
|
91
|
-
w3cCapabilities.firstMatch[0][defaultCapKey] = defaultCapValue;
|
|
100
|
+
if (hasJSONWPCaps) {
|
|
101
|
+
jsonwpCapabilities = {
|
|
102
|
+
...removeAppiumPrefixes(defaultCapabilities),
|
|
103
|
+
...jsonwpCapabilities,
|
|
104
|
+
};
|
|
92
105
|
}
|
|
93
|
-
}
|
|
94
106
|
}
|
|
95
|
-
|
|
107
|
+
// Get MJSONWP caps
|
|
96
108
|
if (hasJSONWPCaps) {
|
|
97
|
-
|
|
98
|
-
...jsonwpCapabilities
|
|
99
|
-
};
|
|
109
|
+
processedJsonwpCapabilities = { ...jsonwpCapabilities };
|
|
100
110
|
}
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
111
|
+
// Get W3C caps
|
|
112
|
+
if (hasW3CCaps) {
|
|
113
|
+
// Call the process capabilities algorithm to find matching caps on the W3C
|
|
114
|
+
// (see: https://github.com/jlipps/simple-wd-spec#processing-capabilities)
|
|
115
|
+
try {
|
|
116
|
+
desiredCaps = (0, base_driver_1.processCapabilities)(w3cCapabilities, constraints, true);
|
|
117
|
+
}
|
|
118
|
+
catch (error) {
|
|
119
|
+
logger_1.default.info(`Could not parse W3C capabilities: ${error.message}`);
|
|
120
|
+
return /** @type {InvalidCaps<C,J>} */ ({
|
|
121
|
+
desiredCaps,
|
|
122
|
+
processedJsonwpCapabilities,
|
|
123
|
+
processedW3CCapabilities,
|
|
124
|
+
protocol,
|
|
125
|
+
error,
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
// Create a new w3c capabilities payload that contains only the matching caps in `alwaysMatch`
|
|
129
|
+
processedW3CCapabilities = {
|
|
130
|
+
alwaysMatch: { ...insertAppiumPrefixes(desiredCaps) },
|
|
131
|
+
firstMatch: [{}],
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
return /** @type {ParsedDriverCaps<C,J>} */ ({
|
|
115
135
|
desiredCaps,
|
|
116
136
|
processedJsonwpCapabilities,
|
|
117
137
|
processedW3CCapabilities,
|
|
118
138
|
protocol,
|
|
119
|
-
|
|
120
|
-
};
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
processedW3CCapabilities = {
|
|
124
|
-
alwaysMatch: { ...insertAppiumPrefixes(desiredCaps)
|
|
125
|
-
},
|
|
126
|
-
firstMatch: [{}]
|
|
127
|
-
};
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
return {
|
|
131
|
-
desiredCaps,
|
|
132
|
-
processedJsonwpCapabilities,
|
|
133
|
-
processedW3CCapabilities,
|
|
134
|
-
protocol
|
|
135
|
-
};
|
|
139
|
+
});
|
|
136
140
|
}
|
|
137
|
-
|
|
141
|
+
exports.parseCapsForInnerDriver = parseCapsForInnerDriver;
|
|
142
|
+
/**
|
|
143
|
+
* Takes a capabilities objects and prefixes capabilities with `appium:`
|
|
144
|
+
* @template {Constraints} [C={}]
|
|
145
|
+
* @param {Capabilities<C>} caps - Desired capabilities object
|
|
146
|
+
* @returns {NSCapabilities<C>}
|
|
147
|
+
*/
|
|
138
148
|
function insertAppiumPrefixes(caps) {
|
|
139
|
-
|
|
149
|
+
return /** @type {NSCapabilities<C>} */ (lodash_1.default.mapKeys(caps, (_, key) => STANDARD_CAPS_LOWERCASE.has(key.toLowerCase()) || key.includes(':')
|
|
150
|
+
? key
|
|
151
|
+
: `${W3C_APPIUM_PREFIX}:${key}`));
|
|
140
152
|
}
|
|
141
|
-
|
|
153
|
+
exports.insertAppiumPrefixes = insertAppiumPrefixes;
|
|
154
|
+
/**
|
|
155
|
+
* @template {Constraints} [C={}]
|
|
156
|
+
* @param {NSCapabilities<C>} caps
|
|
157
|
+
* @returns {Capabilities<C>}
|
|
158
|
+
*/
|
|
142
159
|
function removeAppiumPrefixes(caps) {
|
|
143
|
-
|
|
160
|
+
return /** @type {Capabilities<C>} */ (lodash_1.default.mapKeys(caps, (_, key) => removeAppiumPrefix(key)));
|
|
144
161
|
}
|
|
145
|
-
|
|
162
|
+
exports.removeAppiumPrefixes = removeAppiumPrefixes;
|
|
163
|
+
/**
|
|
164
|
+
* @param {string} key
|
|
165
|
+
* @returns {string}
|
|
166
|
+
*/
|
|
146
167
|
function removeAppiumPrefix(key) {
|
|
147
|
-
|
|
148
|
-
|
|
168
|
+
const prefix = `${W3C_APPIUM_PREFIX}:`;
|
|
169
|
+
return lodash_1.default.startsWith(key, prefix) ? key.substring(prefix.length) : key;
|
|
149
170
|
}
|
|
150
|
-
|
|
171
|
+
/**
|
|
172
|
+
*
|
|
173
|
+
* @param {string} pkgName
|
|
174
|
+
* @returns {string|undefined}
|
|
175
|
+
*/
|
|
151
176
|
function getPackageVersion(pkgName) {
|
|
152
|
-
|
|
153
|
-
|
|
177
|
+
const pkgInfo = require(`${pkgName}/package.json`) || {};
|
|
178
|
+
return pkgInfo.version;
|
|
154
179
|
}
|
|
155
|
-
|
|
180
|
+
exports.getPackageVersion = getPackageVersion;
|
|
181
|
+
/**
|
|
182
|
+
* Adjusts NODE_PATH environment variable,
|
|
183
|
+
* so drivers and plugins could load their peer dependencies.
|
|
184
|
+
* Read https://nodejs.org/api/modules.html#loading-from-the-global-folders
|
|
185
|
+
* for more details.
|
|
186
|
+
* @returns {void}
|
|
187
|
+
*/
|
|
156
188
|
function adjustNodePath() {
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
189
|
+
const selfRoot = support_1.node.getModuleRootSync('appium', __filename);
|
|
190
|
+
if (!selfRoot || path_1.default.dirname(selfRoot).length >= selfRoot.length) {
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
const nodeModulesRoot = path_1.default.dirname(selfRoot);
|
|
194
|
+
const refreshRequirePaths = () => {
|
|
195
|
+
try {
|
|
196
|
+
// ! This hack allows us to avoid modification of import
|
|
197
|
+
// ! statements in client modules. It uses a private API though,
|
|
198
|
+
// ! so it could break (maybe, eventually).
|
|
199
|
+
// See https://gist.github.com/branneman/8048520#7-the-hack
|
|
200
|
+
// @ts-ignore
|
|
201
|
+
require('module').Module._initPaths();
|
|
202
|
+
return true;
|
|
203
|
+
}
|
|
204
|
+
catch (e) {
|
|
205
|
+
return false;
|
|
206
|
+
}
|
|
207
|
+
};
|
|
208
|
+
if (!process.env.NODE_PATH) {
|
|
209
|
+
process.env.NODE_PATH = nodeModulesRoot;
|
|
210
|
+
if (refreshRequirePaths()) {
|
|
211
|
+
process.env.APPIUM_OMIT_PEER_DEPS = '1';
|
|
212
|
+
}
|
|
213
|
+
else {
|
|
214
|
+
delete process.env.NODE_PATH;
|
|
215
|
+
}
|
|
216
|
+
return;
|
|
217
|
+
}
|
|
218
|
+
const nodePathParts = process.env.NODE_PATH.split(path_1.default.delimiter);
|
|
219
|
+
if (nodePathParts.includes(nodeModulesRoot)) {
|
|
220
|
+
process.env.APPIUM_OMIT_PEER_DEPS = '1';
|
|
221
|
+
return;
|
|
172
222
|
}
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
if (!process.env.NODE_PATH) {
|
|
176
|
-
process.env.NODE_PATH = nodeModulesRoot;
|
|
177
|
-
|
|
223
|
+
nodePathParts.push(nodeModulesRoot);
|
|
224
|
+
process.env.NODE_PATH = nodePathParts.join(path_1.default.delimiter);
|
|
178
225
|
if (refreshRequirePaths()) {
|
|
179
|
-
|
|
180
|
-
}
|
|
181
|
-
|
|
226
|
+
process.env.APPIUM_OMIT_PEER_DEPS = '1';
|
|
227
|
+
}
|
|
228
|
+
else {
|
|
229
|
+
process.env.NODE_PATH = lodash_1.default.without(nodePathParts, nodeModulesRoot).join(path_1.default.delimiter);
|
|
182
230
|
}
|
|
183
|
-
|
|
184
|
-
return;
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
const nodePathParts = process.env.NODE_PATH.split(_path.default.delimiter);
|
|
188
|
-
|
|
189
|
-
if (nodePathParts.includes(nodeModulesRoot)) {
|
|
190
|
-
process.env.APPIUM_OMIT_PEER_DEPS = '1';
|
|
191
|
-
return;
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
nodePathParts.push(nodeModulesRoot);
|
|
195
|
-
process.env.NODE_PATH = nodePathParts.join(_path.default.delimiter);
|
|
196
|
-
|
|
197
|
-
if (refreshRequirePaths()) {
|
|
198
|
-
process.env.APPIUM_OMIT_PEER_DEPS = '1';
|
|
199
|
-
} else {
|
|
200
|
-
process.env.NODE_PATH = _lodash.default.without(nodePathParts, nodeModulesRoot).join(_path.default.delimiter);
|
|
201
|
-
}
|
|
202
231
|
}
|
|
203
|
-
|
|
232
|
+
exports.adjustNodePath = adjustNodePath;
|
|
233
|
+
/**
|
|
234
|
+
* Pulls the initial values of Appium settings from the given capabilities argument.
|
|
235
|
+
* Each setting item must satisfy the following format:
|
|
236
|
+
* `setting[setting_name]: setting_value`
|
|
237
|
+
* The capabilities argument itself gets mutated, so it does not contain parsed
|
|
238
|
+
* settings anymore to avoid further parsing issues.
|
|
239
|
+
* Check
|
|
240
|
+
* https://github.com/appium/appium/blob/master/docs/en/advanced-concepts/settings.md
|
|
241
|
+
* for more details on the available settings.
|
|
242
|
+
*
|
|
243
|
+
* @param {?Object} caps - Capabilities dictionary. It is mutated if
|
|
244
|
+
* one or more settings have been pulled from it
|
|
245
|
+
* @return {Object} - An empty dictionary if the given caps contains no
|
|
246
|
+
* setting items or a dictionary containing parsed Appium setting names along with
|
|
247
|
+
* their values.
|
|
248
|
+
*/
|
|
204
249
|
function pullSettings(caps) {
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
const result = {};
|
|
210
|
-
|
|
211
|
-
for (const [key, value] of _lodash.default.toPairs(caps)) {
|
|
212
|
-
const match = /\bsettings\[(\S+)\]$/.exec(key);
|
|
213
|
-
|
|
214
|
-
if (!match) {
|
|
215
|
-
continue;
|
|
250
|
+
if (!lodash_1.default.isPlainObject(caps) || lodash_1.default.isEmpty(caps)) {
|
|
251
|
+
return {};
|
|
216
252
|
}
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
253
|
+
const result = {};
|
|
254
|
+
for (const [key, value] of lodash_1.default.toPairs(caps)) {
|
|
255
|
+
const match = /\bsettings\[(\S+)\]$/.exec(key);
|
|
256
|
+
if (!match) {
|
|
257
|
+
continue;
|
|
258
|
+
}
|
|
259
|
+
result[match[1]] = value;
|
|
260
|
+
delete caps[key];
|
|
261
|
+
}
|
|
262
|
+
return result;
|
|
263
|
+
}
|
|
264
|
+
exports.pullSettings = pullSettings;
|
|
265
|
+
/**
|
|
266
|
+
* @template {CliCommand} [Cmd=ServerCommand]
|
|
267
|
+
* @template {CliExtensionSubcommand|void} [SubCmd=void]
|
|
268
|
+
* @param {Args<Cmd, SubCmd>} args
|
|
269
|
+
* @returns {args is Args<ServerCommand>}
|
|
270
|
+
*/
|
|
271
|
+
function isServerCommandArgs(args) {
|
|
272
|
+
return args.subcommand === constants_1.SERVER_SUBCOMMAND;
|
|
273
|
+
}
|
|
274
|
+
exports.isServerCommandArgs = isServerCommandArgs;
|
|
275
|
+
/**
|
|
276
|
+
* @template {CliCommand} [Cmd=ServerCommand]
|
|
277
|
+
* @template {CliExtensionSubcommand|void} [SubCmd=void]
|
|
278
|
+
* @param {Args<Cmd, SubCmd>} args
|
|
279
|
+
* @returns {args is Args<CliExtensionCommand, SubCmd>}
|
|
280
|
+
*/
|
|
281
|
+
function isExtensionCommandArgs(args) {
|
|
282
|
+
return args.subcommand === constants_1.DRIVER_TYPE || args.subcommand === constants_1.PLUGIN_TYPE;
|
|
283
|
+
}
|
|
284
|
+
exports.isExtensionCommandArgs = isExtensionCommandArgs;
|
|
285
|
+
/**
|
|
286
|
+
* @template {CliCommand} Cmd
|
|
287
|
+
* @template {CliExtensionSubcommand} SubCmd
|
|
288
|
+
* @param {Args<Cmd, SubCmd>} args
|
|
289
|
+
* @returns {args is Args<DriverCommand, SubCmd>}
|
|
290
|
+
*/
|
|
291
|
+
function isDriverCommandArgs(args) {
|
|
292
|
+
return args.subcommand === constants_1.DRIVER_TYPE;
|
|
293
|
+
}
|
|
294
|
+
exports.isDriverCommandArgs = isDriverCommandArgs;
|
|
295
|
+
/**
|
|
296
|
+
* @template {CliCommand} Cmd
|
|
297
|
+
* @template {CliExtensionSubcommand} SubCmd
|
|
298
|
+
* @param {Args<Cmd, SubCmd>} args
|
|
299
|
+
* @returns {args is Args<PluginCommand, SubCmd>}
|
|
300
|
+
*/
|
|
301
|
+
function isPluginCommandArgs(args) {
|
|
302
|
+
return args.subcommand === constants_1.PLUGIN_TYPE;
|
|
223
303
|
}
|
|
224
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJXM0NfQVBQSVVNX1BSRUZJWCIsIlNUQU5EQVJEX0NBUFNfTE9XRVJDQVNFIiwiU2V0IiwiU1RBTkRBUkRfQ0FQUyIsIm1hcCIsImNhcCIsInRvTG93ZXJDYXNlIiwiaXNTdGRvdXRUVFkiLCJwcm9jZXNzIiwic3Rkb3V0IiwiaXNUVFkiLCJpbnNwZWN0IiwiXyIsImZsb3ciLCJwYXJ0aWFsUmlnaHQiLCJkdW1wIiwiY29sb3JzIiwiZGVwdGgiLCJjb21wYWN0IiwiYXJncyIsImxvZ2dlciIsImluZm8iLCJwYXJzZUNhcHNGb3JJbm5lckRyaXZlciIsImpzb253cENhcGFiaWxpdGllcyIsInczY0NhcGFiaWxpdGllcyIsImNvbnN0cmFpbnRzIiwiZGVmYXVsdENhcGFiaWxpdGllcyIsImhhc1czQ0NhcHMiLCJpc1BsYWluT2JqZWN0IiwiaGFzIiwiaGFzSlNPTldQQ2FwcyIsImRlc2lyZWRDYXBzIiwicHJvY2Vzc2VkVzNDQ2FwYWJpbGl0aWVzIiwicHJvY2Vzc2VkSnNvbndwQ2FwYWJpbGl0aWVzIiwicHJvdG9jb2wiLCJQUk9UT0NPTFMiLCJXM0MiLCJlcnJvciIsIkVycm9yIiwiY2xvbmVEZWVwIiwiaXNFbXB0eSIsImRlZmF1bHRDYXBLZXkiLCJkZWZhdWx0Q2FwVmFsdWUiLCJ0b1BhaXJzIiwiaXNDYXBBbHJlYWR5U2V0IiwiZmlyc3RNYXRjaEVudHJ5IiwiZmlyc3RNYXRjaCIsInJlbW92ZUFwcGl1bVByZWZpeGVzIiwicmVtb3ZlQXBwaXVtUHJlZml4IiwiYWx3YXlzTWF0Y2giLCJwcm9jZXNzQ2FwYWJpbGl0aWVzIiwibWVzc2FnZSIsImluc2VydEFwcGl1bVByZWZpeGVzIiwiY2FwcyIsIm1hcEtleXMiLCJrZXkiLCJpbmNsdWRlcyIsInByZWZpeCIsInN0YXJ0c1dpdGgiLCJzdWJzdHJpbmciLCJsZW5ndGgiLCJnZXRQYWNrYWdlVmVyc2lvbiIsInBrZ05hbWUiLCJwa2dJbmZvIiwicmVxdWlyZSIsInZlcnNpb24iLCJhZGp1c3ROb2RlUGF0aCIsInNlbGZSb290Iiwibm9kZSIsImdldE1vZHVsZVJvb3RTeW5jIiwiX19maWxlbmFtZSIsInBhdGgiLCJkaXJuYW1lIiwibm9kZU1vZHVsZXNSb290IiwicmVmcmVzaFJlcXVpcmVQYXRocyIsIk1vZHVsZSIsIl9pbml0UGF0aHMiLCJlIiwiZW52IiwiTk9ERV9QQVRIIiwiQVBQSVVNX09NSVRfUEVFUl9ERVBTIiwibm9kZVBhdGhQYXJ0cyIsInNwbGl0IiwiZGVsaW1pdGVyIiwicHVzaCIsImpvaW4iLCJ3aXRob3V0IiwicHVsbFNldHRpbmdzIiwicmVzdWx0IiwidmFsdWUiLCJtYXRjaCIsImV4ZWMiXSwic291cmNlcyI6WyIuLi8uLi9saWIvdXRpbHMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBsb2dnZXIgZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IHtwcm9jZXNzQ2FwYWJpbGl0aWVzLCBQUk9UT0NPTFMsIFNUQU5EQVJEX0NBUFN9IGZyb20gJ0BhcHBpdW0vYmFzZS1kcml2ZXInO1xuaW1wb3J0IHtpbnNwZWN0IGFzIGR1bXB9IGZyb20gJ3V0aWwnO1xuaW1wb3J0IHtub2RlfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5cbmNvbnN0IFczQ19BUFBJVU1fUFJFRklYID0gJ2FwcGl1bSc7XG5jb25zdCBTVEFOREFSRF9DQVBTX0xPV0VSQ0FTRSA9IG5ldyBTZXQoWy4uLlNUQU5EQVJEX0NBUFNdLm1hcCgoY2FwKSA9PiBjYXAudG9Mb3dlckNhc2UoKSkpO1xuXG4vKipcbiAqXG4gKiBJZiBgc3Rkb3V0YCBpcyBhIFRUWSwgdGhpcyBpcyBgdHJ1ZWAuXG4gKlxuICogVXNlZCBmb3IgdGlnaHRlciBjb250cm9sIG92ZXIgbG9nIG91dHB1dC5cbiAqIEB0eXBlIHtib29sZWFufVxuICovXG5jb25zdCBpc1N0ZG91dFRUWSA9IHByb2Nlc3Muc3Rkb3V0LmlzVFRZO1xuXG4vKipcbiAqIER1bXBzIHRvIHZhbHVlIHRvIHRoZSBjb25zb2xlIHVzaW5nIGBpbmZvYCBsb2dnZXIuXG4gKlxuICogQHRvZG8gTWF5IHdhbnQgdG8gZm9yY2UgY29sb3IgdG8gYmUgYGZhbHNlYCBpZiB7QGxpbmsgaXNTdGRvdXRUVFl9IGlzIGBmYWxzZWAuXG4gKi9cbmNvbnN0IGluc3BlY3QgPSBfLmZsb3coXG4gIF8ucGFydGlhbFJpZ2h0KFxuICAgIC8qKiBAdHlwZSB7KG9iamVjdDogYW55LCBvcHRpb25zOiBpbXBvcnQoJ3V0aWwnKS5JbnNwZWN0T3B0aW9ucykgPT4gc3RyaW5nfSAqLyAoZHVtcCksXG4gICAge2NvbG9yczogdHJ1ZSwgZGVwdGg6IG51bGwsIGNvbXBhY3Q6ICFpc1N0ZG91dFRUWX1cbiAgKSxcbiAgKC4uLmFyZ3MpID0+IHtcbiAgICBsb2dnZXIuaW5mbyguLi5hcmdzKTtcbiAgfVxuKTtcblxuLyoqXG4gKiBUYWtlcyB0aGUgY2FwcyB0aGF0IHdlcmUgcHJvdmlkZWQgaW4gdGhlIHJlcXVlc3QgYW5kIHRyYW5zbGF0ZXMgdGhlbVxuICogaW50byBjYXBzIHRoYXQgY2FuIGJlIHVzZWQgYnkgdGhlIGlubmVyIGRyaXZlcnMuXG4gKlxuICogQHRlbXBsYXRlIHtDb25zdHJhaW50c30gQ1xuICogQHRlbXBsYXRlIFtKPWFueV1cbiAqIEBwYXJhbSB7Sn0ganNvbndwQ2FwYWJpbGl0aWVzXG4gKiBAcGFyYW0ge1czQ0NhcGFiaWxpdGllczxDPn0gdzNjQ2FwYWJpbGl0aWVzXG4gKiBAcGFyYW0ge0N9IGNvbnN0cmFpbnRzXG4gKiBAcGFyYW0ge05TQ2FwYWJpbGl0aWVzPEM+fSBbZGVmYXVsdENhcGFiaWxpdGllc11cbiAqIEByZXR1cm5zIHtQYXJzZWREcml2ZXJDYXBzPEMsSj58SW52YWxpZENhcHM8QyxKPn1cbiAqL1xuZnVuY3Rpb24gcGFyc2VDYXBzRm9ySW5uZXJEcml2ZXIoXG4gIGpzb253cENhcGFiaWxpdGllcyxcbiAgdzNjQ2FwYWJpbGl0aWVzLFxuICBjb25zdHJhaW50cyA9IC8qKiBAdHlwZSB7Q30gKi8gKHt9KSxcbiAgZGVmYXVsdENhcGFiaWxpdGllcyA9IHt9XG4pIHtcbiAgLy8gQ2hlY2sgaWYgdGhlIGNhbGxlciBzZW50IEpTT05XUCBjYXBzLCBXM0MgY2Fwcywgb3IgYm90aFxuICBjb25zdCBoYXNXM0NDYXBzID1cbiAgICBfLmlzUGxhaW5PYmplY3QodzNjQ2FwYWJpbGl0aWVzKSAmJlxuICAgIChfLmhhcyh3M2NDYXBhYmlsaXRpZXMsICdhbHdheXNNYXRjaCcpIHx8IF8uaGFzKHczY0NhcGFiaWxpdGllcywgJ2ZpcnN0TWF0Y2gnKSk7XG4gIGNvbnN0IGhhc0pTT05XUENhcHMgPSBfLmlzUGxhaW5PYmplY3QoanNvbndwQ2FwYWJpbGl0aWVzKTtcbiAgbGV0IGRlc2lyZWRDYXBzID0gLyoqIEB0eXBlIHtQYXJzZWREcml2ZXJDYXBzPEM+WydkZXNpcmVkQ2FwcyddfSAqLyAoe30pO1xuICAvKiogQHR5cGUge1BhcnNlZERyaXZlckNhcHM8Qz5bJ3Byb2Nlc3NlZFczQ0NhcGFiaWxpdGllcyddfSAqL1xuICBsZXQgcHJvY2Vzc2VkVzNDQ2FwYWJpbGl0aWVzO1xuICAvKiogQHR5cGUge1BhcnNlZERyaXZlckNhcHM8Qz5bJ3Byb2Nlc3NlZEpzb253cENhcGFiaWxpdGllcyddfSAqL1xuICBsZXQgcHJvY2Vzc2VkSnNvbndwQ2FwYWJpbGl0aWVzO1xuXG4gIGlmICghaGFzVzNDQ2Fwcykge1xuICAgIHJldHVybiAvKiogQHR5cGUge0ludmFsaWRDYXBzPEM+fSAqLyAoe1xuICAgICAgcHJvdG9jb2w6IFBST1RPQ09MUy5XM0MsXG4gICAgICBlcnJvcjogbmV3IEVycm9yKCdXM0MgY2FwYWJpbGl0aWVzIHNob3VsZCBiZSBwcm92aWRlZCcpLFxuICAgIH0pO1xuICB9XG5cbiAgY29uc3Qge1czQ30gPSBQUk9UT0NPTFM7XG4gIGNvbnN0IHByb3RvY29sID0gVzNDO1xuXG4gIC8vIE1ha2Ugc3VyZSB3ZSBkb24ndCBtdXRhdGUgdGhlIG9yaWdpbmFsIGFyZ3VtZW50c1xuICBqc29ud3BDYXBhYmlsaXRpZXMgPSBfLmNsb25lRGVlcChqc29ud3BDYXBhYmlsaXRpZXMpO1xuICB3M2NDYXBhYmlsaXRpZXMgPSBfLmNsb25lRGVlcCh3M2NDYXBhYmlsaXRpZXMpO1xuICBkZWZhdWx0Q2FwYWJpbGl0aWVzID0gXy5jbG9uZURlZXAoZGVmYXVsdENhcGFiaWxpdGllcyk7XG5cbiAgaWYgKCFfLmlzRW1wdHkoZGVmYXVsdENhcGFiaWxpdGllcykpIHtcbiAgICBpZiAoaGFzVzNDQ2Fwcykge1xuICAgICAgZm9yIChjb25zdCBbZGVmYXVsdENhcEtleSwgZGVmYXVsdENhcFZhbHVlXSBvZiBfLnRvUGFpcnMoZGVmYXVsdENhcGFiaWxpdGllcykpIHtcbiAgICAgICAgbGV0IGlzQ2FwQWxyZWFkeVNldCA9IGZhbHNlO1xuICAgICAgICAvLyBDaGVjayBpZiB0aGUga2V5IGlzIGFscmVhZHkgcHJlc2VudCBpbiBmaXJzdE1hdGNoIGVudHJpZXNcbiAgICAgICAgZm9yIChjb25zdCBmaXJzdE1hdGNoRW50cnkgb2YgdzNjQ2FwYWJpbGl0aWVzLmZpcnN0TWF0Y2ggPz8gW10pIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBfLmlzUGxhaW5PYmplY3QoZmlyc3RNYXRjaEVudHJ5KSAmJlxuICAgICAgICAgICAgXy5oYXMocmVtb3ZlQXBwaXVtUHJlZml4ZXMoZmlyc3RNYXRjaEVudHJ5KSwgcmVtb3ZlQXBwaXVtUHJlZml4KGRlZmF1bHRDYXBLZXkpKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgaXNDYXBBbHJlYWR5U2V0ID0gdHJ1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBDaGVjayBpZiB0aGUga2V5IGlzIGFscmVhZHkgcHJlc2VudCBpbiBhbHdheXNNYXRjaCBlbnRyaWVzXG4gICAgICAgIGlzQ2FwQWxyZWFkeVNldCA9XG4gICAgICAgICAgaXNDYXBBbHJlYWR5U2V0IHx8XG4gICAgICAgICAgKF8uaXNQbGFpbk9iamVjdCh3M2NDYXBhYmlsaXRpZXMuYWx3YXlzTWF0Y2gpICYmXG4gICAgICAgICAgICBfLmhhcyhcbiAgICAgICAgICAgICAgcmVtb3ZlQXBwaXVtUHJlZml4ZXModzNjQ2FwYWJpbGl0aWVzLmFsd2F5c01hdGNoKSxcbiAgICAgICAgICAgICAgcmVtb3ZlQXBwaXVtUHJlZml4KGRlZmF1bHRDYXBLZXkpXG4gICAgICAgICAgICApKTtcbiAgICAgICAgaWYgKGlzQ2FwQWxyZWFkeVNldCkge1xuICAgICAgICAgIC8vIFNraXAgaWYgdGhlIGtleSBpcyBhbHJlYWR5IHByZXNlbnQgaW4gdGhlIHByb3ZpZGVkIGNhcHNcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE9ubHkgYWRkIHRoZSBkZWZhdWx0IGNhcGFiaWxpdHkgaWYgaXQgaXMgbm90IG92ZXJyaWRkZW5cbiAgICAgICAgaWYgKF8uaXNFbXB0eSh3M2NDYXBhYmlsaXRpZXMuZmlyc3RNYXRjaCkpIHtcbiAgICAgICAgICB3M2NDYXBhYmlsaXRpZXMuZmlyc3RNYXRjaCA9IC8qKiBAdHlwZSB7VzNDQ2FwYWJpbGl0aWVzPEM+WydmaXJzdE1hdGNoJ119ICovIChbXG4gICAgICAgICAgICB7W2RlZmF1bHRDYXBLZXldOiBkZWZhdWx0Q2FwVmFsdWV9LFxuICAgICAgICAgIF0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHczY0NhcGFiaWxpdGllcy5maXJzdE1hdGNoWzBdW2RlZmF1bHRDYXBLZXldID0gZGVmYXVsdENhcFZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChoYXNKU09OV1BDYXBzKSB7XG4gICAgICBqc29ud3BDYXBhYmlsaXRpZXMgPSB7XG4gICAgICAgIC4uLnJlbW92ZUFwcGl1bVByZWZpeGVzKGRlZmF1bHRDYXBhYmlsaXRpZXMpLFxuICAgICAgICAuLi5qc29ud3BDYXBhYmlsaXRpZXMsXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8vIEdldCBNSlNPTldQIGNhcHNcbiAgaWYgKGhhc0pTT05XUENhcHMpIHtcbiAgICBwcm9jZXNzZWRKc29ud3BDYXBhYmlsaXRpZXMgPSB7Li4uanNvbndwQ2FwYWJpbGl0aWVzfTtcbiAgfVxuXG4gIC8vIEdldCBXM0MgY2Fwc1xuICBpZiAoaGFzVzNDQ2Fwcykge1xuICAgIC8vIENhbGwgdGhlIHByb2Nlc3MgY2FwYWJpbGl0aWVzIGFsZ29yaXRobSB0byBmaW5kIG1hdGNoaW5nIGNhcHMgb24gdGhlIFczQ1xuICAgIC8vIChzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9qbGlwcHMvc2ltcGxlLXdkLXNwZWMjcHJvY2Vzc2luZy1jYXBhYmlsaXRpZXMpXG4gICAgdHJ5IHtcbiAgICAgIGRlc2lyZWRDYXBzID0gcHJvY2Vzc0NhcGFiaWxpdGllcyh3M2NDYXBhYmlsaXRpZXMsIGNvbnN0cmFpbnRzLCB0cnVlKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmluZm8oYENvdWxkIG5vdCBwYXJzZSBXM0MgY2FwYWJpbGl0aWVzOiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICByZXR1cm4gLyoqIEB0eXBlIHtJbnZhbGlkQ2FwczxDLEo+fSAqLyAoe1xuICAgICAgICBkZXNpcmVkQ2FwcyxcbiAgICAgICAgcHJvY2Vzc2VkSnNvbndwQ2FwYWJpbGl0aWVzLFxuICAgICAgICBwcm9jZXNzZWRXM0NDYXBhYmlsaXRpZXMsXG4gICAgICAgIHByb3RvY29sLFxuICAgICAgICBlcnJvcixcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSBhIG5ldyB3M2MgY2FwYWJpbGl0aWVzIHBheWxvYWQgdGhhdCBjb250YWlucyBvbmx5IHRoZSBtYXRjaGluZyBjYXBzIGluIGBhbHdheXNNYXRjaGBcbiAgICBwcm9jZXNzZWRXM0NDYXBhYmlsaXRpZXMgPSB7XG4gICAgICBhbHdheXNNYXRjaDogey4uLmluc2VydEFwcGl1bVByZWZpeGVzKGRlc2lyZWRDYXBzKX0sXG4gICAgICBmaXJzdE1hdGNoOiBbe31dLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4gLyoqIEB0eXBlIHtQYXJzZWREcml2ZXJDYXBzPEMsSj59ICovICh7XG4gICAgZGVzaXJlZENhcHMsXG4gICAgcHJvY2Vzc2VkSnNvbndwQ2FwYWJpbGl0aWVzLFxuICAgIHByb2Nlc3NlZFczQ0NhcGFiaWxpdGllcyxcbiAgICBwcm90b2NvbCxcbiAgfSk7XG59XG5cbi8qKlxuICogVGFrZXMgYSBjYXBhYmlsaXRpZXMgb2JqZWN0cyBhbmQgcHJlZml4ZXMgY2FwYWJpbGl0aWVzIHdpdGggYGFwcGl1bTpgXG4gKiBAdGVtcGxhdGUge0NvbnN0cmFpbnRzfSBbQz17fV1cbiAqIEBwYXJhbSB7Q2FwYWJpbGl0aWVzPEM+fSBjYXBzIC0gRGVzaXJlZCBjYXBhYmlsaXRpZXMgb2JqZWN0XG4gKiBAcmV0dXJucyB7TlNDYXBhYmlsaXRpZXM8Qz59XG4gKi9cbmZ1bmN0aW9uIGluc2VydEFwcGl1bVByZWZpeGVzKGNhcHMpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7TlNDYXBhYmlsaXRpZXM8Qz59ICovIChcbiAgICBfLm1hcEtleXMoY2FwcywgKF8sIGtleSkgPT5cbiAgICAgIFNUQU5EQVJEX0NBUFNfTE9XRVJDQVNFLmhhcyhrZXkudG9Mb3dlckNhc2UoKSkgfHwga2V5LmluY2x1ZGVzKCc6JylcbiAgICAgICAgPyBrZXlcbiAgICAgICAgOiBgJHtXM0NfQVBQSVVNX1BSRUZJWH06JHtrZXl9YFxuICAgIClcbiAgKTtcbn1cblxuLyoqXG4gKiBAdGVtcGxhdGUge0NvbnN0cmFpbnRzfSBbQz17fV1cbiAqIEBwYXJhbSB7TlNDYXBhYmlsaXRpZXM8Qz59IGNhcHNcbiAqIEByZXR1cm5zIHtDYXBhYmlsaXRpZXM8Qz59XG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUFwcGl1bVByZWZpeGVzKGNhcHMpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7Q2FwYWJpbGl0aWVzPEM+fSAqLyAoXy5tYXBLZXlzKGNhcHMsIChfLCBrZXkpID0+IHJlbW92ZUFwcGl1bVByZWZpeChrZXkpKSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gcmVtb3ZlQXBwaXVtUHJlZml4KGtleSkge1xuICBjb25zdCBwcmVmaXggPSBgJHtXM0NfQVBQSVVNX1BSRUZJWH06YDtcbiAgcmV0dXJuIF8uc3RhcnRzV2l0aChrZXksIHByZWZpeCkgPyBrZXkuc3Vic3RyaW5nKHByZWZpeC5sZW5ndGgpIDoga2V5O1xufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcGtnTmFtZVxuICogQHJldHVybnMge3N0cmluZ3x1bmRlZmluZWR9XG4gKi9cbmZ1bmN0aW9uIGdldFBhY2thZ2VWZXJzaW9uKHBrZ05hbWUpIHtcbiAgY29uc3QgcGtnSW5mbyA9IHJlcXVpcmUoYCR7cGtnTmFtZX0vcGFja2FnZS5qc29uYCkgfHwge307XG4gIHJldHVybiBwa2dJbmZvLnZlcnNpb247XG59XG5cbi8qKlxuICogQWRqdXN0cyBOT0RFX1BBVEggZW52aXJvbm1lbnQgdmFyaWFibGUsXG4gKiBzbyBkcml2ZXJzIGFuZCBwbHVnaW5zIGNvdWxkIGxvYWQgdGhlaXIgcGVlciBkZXBlbmRlbmNpZXMuXG4gKiBSZWFkIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvbW9kdWxlcy5odG1sI2xvYWRpbmctZnJvbS10aGUtZ2xvYmFsLWZvbGRlcnNcbiAqIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gYWRqdXN0Tm9kZVBhdGgoKSB7XG4gIGNvbnN0IHNlbGZSb290ID0gbm9kZS5nZXRNb2R1bGVSb290U3luYygnYXBwaXVtJywgX19maWxlbmFtZSk7XG4gIGlmICghc2VsZlJvb3QgfHwgcGF0aC5kaXJuYW1lKHNlbGZSb290KS5sZW5ndGggPj0gc2VsZlJvb3QubGVuZ3RoKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IG5vZGVNb2R1bGVzUm9vdCA9IHBhdGguZGlybmFtZShzZWxmUm9vdCk7XG5cbiAgY29uc3QgcmVmcmVzaFJlcXVpcmVQYXRocyA9ICgpID0+IHtcbiAgICB0cnkge1xuICAgICAgLy8gISBUaGlzIGhhY2sgYWxsb3dzIHVzIHRvIGF2b2lkIG1vZGlmaWNhdGlvbiBvZiBpbXBvcnRcbiAgICAgIC8vICEgc3RhdGVtZW50cyBpbiBjbGllbnQgbW9kdWxlcy4gSXQgdXNlcyBhIHByaXZhdGUgQVBJIHRob3VnaCxcbiAgICAgIC8vICEgc28gaXQgY291bGQgYnJlYWsgKG1heWJlLCBldmVudHVhbGx5KS5cbiAgICAgIC8vIFNlZSBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9icmFubmVtYW4vODA0ODUyMCM3LXRoZS1oYWNrXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICByZXF1aXJlKCdtb2R1bGUnKS5Nb2R1bGUuX2luaXRQYXRocygpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfTtcblxuICBpZiAoIXByb2Nlc3MuZW52Lk5PREVfUEFUSCkge1xuICAgIHByb2Nlc3MuZW52Lk5PREVfUEFUSCA9IG5vZGVNb2R1bGVzUm9vdDtcbiAgICBpZiAocmVmcmVzaFJlcXVpcmVQYXRocygpKSB7XG4gICAgICBwcm9jZXNzLmVudi5BUFBJVU1fT01JVF9QRUVSX0RFUFMgPSAnMSc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZSBwcm9jZXNzLmVudi5OT0RFX1BBVEg7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IG5vZGVQYXRoUGFydHMgPSBwcm9jZXNzLmVudi5OT0RFX1BBVEguc3BsaXQocGF0aC5kZWxpbWl0ZXIpO1xuICBpZiAobm9kZVBhdGhQYXJ0cy5pbmNsdWRlcyhub2RlTW9kdWxlc1Jvb3QpKSB7XG4gICAgcHJvY2Vzcy5lbnYuQVBQSVVNX09NSVRfUEVFUl9ERVBTID0gJzEnO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIG5vZGVQYXRoUGFydHMucHVzaChub2RlTW9kdWxlc1Jvb3QpO1xuICBwcm9jZXNzLmVudi5OT0RFX1BBVEggPSBub2RlUGF0aFBhcnRzLmpvaW4ocGF0aC5kZWxpbWl0ZXIpO1xuICBpZiAocmVmcmVzaFJlcXVpcmVQYXRocygpKSB7XG4gICAgcHJvY2Vzcy5lbnYuQVBQSVVNX09NSVRfUEVFUl9ERVBTID0gJzEnO1xuICB9IGVsc2Uge1xuICAgIHByb2Nlc3MuZW52Lk5PREVfUEFUSCA9IF8ud2l0aG91dChub2RlUGF0aFBhcnRzLCBub2RlTW9kdWxlc1Jvb3QpLmpvaW4ocGF0aC5kZWxpbWl0ZXIpO1xuICB9XG59XG5cbi8qKlxuICogUHVsbHMgdGhlIGluaXRpYWwgdmFsdWVzIG9mIEFwcGl1bSBzZXR0aW5ncyBmcm9tIHRoZSBnaXZlbiBjYXBhYmlsaXRpZXMgYXJndW1lbnQuXG4gKiBFYWNoIHNldHRpbmcgaXRlbSBtdXN0IHNhdGlzZnkgdGhlIGZvbGxvd2luZyBmb3JtYXQ6XG4gKiBgc2V0dGluZ1tzZXR0aW5nX25hbWVdOiBzZXR0aW5nX3ZhbHVlYFxuICogVGhlIGNhcGFiaWxpdGllcyBhcmd1bWVudCBpdHNlbGYgZ2V0cyBtdXRhdGVkLCBzbyBpdCBkb2VzIG5vdCBjb250YWluIHBhcnNlZFxuICogc2V0dGluZ3MgYW55bW9yZSB0byBhdm9pZCBmdXJ0aGVyIHBhcnNpbmcgaXNzdWVzLlxuICogQ2hlY2tcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vYXBwaXVtL2Jsb2IvbWFzdGVyL2RvY3MvZW4vYWR2YW5jZWQtY29uY2VwdHMvc2V0dGluZ3MubWRcbiAqIGZvciBtb3JlIGRldGFpbHMgb24gdGhlIGF2YWlsYWJsZSBzZXR0aW5ncy5cbiAqXG4gKiBAcGFyYW0gez9PYmplY3R9IGNhcHMgLSBDYXBhYmlsaXRpZXMgZGljdGlvbmFyeS4gSXQgaXMgbXV0YXRlZCBpZlxuICogb25lIG9yIG1vcmUgc2V0dGluZ3MgaGF2ZSBiZWVuIHB1bGxlZCBmcm9tIGl0XG4gKiBAcmV0dXJuIHtPYmplY3R9IC0gQW4gZW1wdHkgZGljdGlvbmFyeSBpZiB0aGUgZ2l2ZW4gY2FwcyBjb250YWlucyBub1xuICogc2V0dGluZyBpdGVtcyBvciBhIGRpY3Rpb25hcnkgY29udGFpbmluZyBwYXJzZWQgQXBwaXVtIHNldHRpbmcgbmFtZXMgYWxvbmcgd2l0aFxuICogdGhlaXIgdmFsdWVzLlxuICovXG5mdW5jdGlvbiBwdWxsU2V0dGluZ3MoY2Fwcykge1xuICBpZiAoIV8uaXNQbGFpbk9iamVjdChjYXBzKSB8fCBfLmlzRW1wdHkoY2FwcykpIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICBjb25zdCByZXN1bHQgPSB7fTtcbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgXy50b1BhaXJzKGNhcHMpKSB7XG4gICAgY29uc3QgbWF0Y2ggPSAvXFxic2V0dGluZ3NcXFsoXFxTKylcXF0kLy5leGVjKGtleSk7XG4gICAgaWYgKCFtYXRjaCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgcmVzdWx0W21hdGNoWzFdXSA9IHZhbHVlO1xuICAgIGRlbGV0ZSBjYXBzW2tleV07XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IHtcbiAgaW5zcGVjdCxcbiAgcGFyc2VDYXBzRm9ySW5uZXJEcml2ZXIsXG4gIGluc2VydEFwcGl1bVByZWZpeGVzLFxuICBnZXRQYWNrYWdlVmVyc2lvbixcbiAgcHVsbFNldHRpbmdzLFxuICByZW1vdmVBcHBpdW1QcmVmaXhlcyxcbiAgYWRqdXN0Tm9kZVBhdGgsXG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5TdHJpbmdSZWNvcmR9IFN0cmluZ1JlY29yZFxuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLkJhc2VEcml2ZXJDYXBDb25zdHJhaW50c30gQmFzZURyaXZlckNhcENvbnN0cmFpbnRzXG4gKi9cblxuLyoqXG4gKiBAdGVtcGxhdGUge0NvbnN0cmFpbnRzfSBbQz1CYXNlRHJpdmVyQ2FwQ29uc3RyYWludHNdXG4gKiBAdGVtcGxhdGUgW0o9YW55XVxuICogQHR5cGVkZWYgUGFyc2VkRHJpdmVyQ2Fwc1xuICogQHByb3BlcnR5IHtDYXBhYmlsaXRpZXM8Qz59IGRlc2lyZWRDYXBzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcHJvdG9jb2xcbiAqIEBwcm9wZXJ0eSB7Sn0gW3Byb2Nlc3NlZEpzb253cENhcGFiaWxpdGllc11cbiAqIEBwcm9wZXJ0eSB7VzNDQ2FwYWJpbGl0aWVzPEM+fSBbcHJvY2Vzc2VkVzNDQ2FwYWJpbGl0aWVzXVxuICovXG5cbi8qKlxuICogQHRvZG8gcHJvdG9jb2wgaXMgbW9yZSBzcGVjaWZpY1xuICogQHRlbXBsYXRlIHtDb25zdHJhaW50c30gW0M9QmFzZURyaXZlckNhcENvbnN0cmFpbnRzXVxuICogQHRlbXBsYXRlIFtKPWFueV1cbiAqIEB0eXBlZGVmIEludmFsaWRDYXBzXG4gKiBAcHJvcGVydHkge0Vycm9yfSBlcnJvclxuICogQHByb3BlcnR5IHtzdHJpbmd9IHByb3RvY29sXG4gKiBAcHJvcGVydHkge0NhcGFiaWxpdGllczxDPn0gW2Rlc2lyZWRDYXBzXVxuICogQHByb3BlcnR5IHtKfSBbcHJvY2Vzc2VkSnNvbndwQ2FwYWJpbGl0aWVzXVxuICogQHByb3BlcnR5IHtXM0NDYXBhYmlsaXRpZXM8Qz59IFtwcm9jZXNzZWRXM0NDYXBhYmlsaXRpZXNdXG4gKi9cblxuLyoqXG4gKiBAdGVtcGxhdGUge0NvbnN0cmFpbnRzfSBbQz1CYXNlRHJpdmVyQ2FwQ29uc3RyYWludHNdXG4gKiBAdGVtcGxhdGUge1N0cmluZ1JlY29yZHx2b2lkfSBbRXh0cmE9dm9pZF1cbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5DYXBhYmlsaXRpZXM8QywgRXh0cmE+fSBDYXBhYmlsaXRpZXNcbiAqL1xuXG4vKipcbiAqIEB0ZW1wbGF0ZSB7Q29uc3RyYWludHN9IFtDPUJhc2VEcml2ZXJDYXBDb25zdHJhaW50c11cbiAqIEB0ZW1wbGF0ZSB7U3RyaW5nUmVjb3JkfHZvaWR9IFtFeHRyYT12b2lkXVxuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLlczQ0NhcGFiaWxpdGllczxDLCBFeHRyYT59IFczQ0NhcGFiaWxpdGllc1xuICovXG5cbi8qKlxuICogQHRlbXBsYXRlIHtDb25zdHJhaW50c30gW0M9QmFzZURyaXZlckNhcENvbnN0cmFpbnRzXVxuICogQHRlbXBsYXRlIHtTdHJpbmdSZWNvcmR8dm9pZH0gW0V4dHJhPXZvaWRdXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuTlNDYXBhYmlsaXRpZXM8QywgRXh0cmE+fSBOU0NhcGFiaWxpdGllc1xuICovXG5cbi8qKlxuICogQHRlbXBsYXRlIHtDb25zdHJhaW50c30gQ1xuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLkNvbnN0cmFpbnRzVG9DYXBzPEM+fSBDb25zdHJhaW50c1RvQ2Fwc1xuICovXG5cbi8qKlxuICogQHRlbXBsYXRlIFRcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ3R5cGUtZmVzdCcpLlN0cmluZ0tleU9mPFQ+fSBTdHJpbmdLZXlPZlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLkNvbnN0cmFpbnRzfSBDb25zdHJhaW50c1xuICovXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7O0FBRUEsTUFBTUEsaUJBQWlCLEdBQUcsUUFBMUI7QUFDQSxNQUFNQyx1QkFBdUIsR0FBRyxJQUFJQyxHQUFKLENBQVEsQ0FBQyxHQUFHQyx5QkFBSixFQUFtQkMsR0FBbkIsQ0FBd0JDLEdBQUQsSUFBU0EsR0FBRyxDQUFDQyxXQUFKLEVBQWhDLENBQVIsQ0FBaEM7QUFTQSxNQUFNQyxXQUFXLEdBQUdDLE9BQU8sQ0FBQ0MsTUFBUixDQUFlQyxLQUFuQzs7QUFPQSxNQUFNQyxPQUFPLEdBQUdDLGVBQUEsQ0FBRUMsSUFBRixD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
|
|
304
|
+
exports.isPluginCommandArgs = isPluginCommandArgs;
|
|
305
|
+
/**
|
|
306
|
+
* @typedef {import('@appium/types').StringRecord} StringRecord
|
|
307
|
+
* @typedef {import('@appium/types').BaseDriverCapConstraints} BaseDriverCapConstraints
|
|
308
|
+
*/
|
|
309
|
+
/**
|
|
310
|
+
* @template {Constraints} [C=BaseDriverCapConstraints]
|
|
311
|
+
* @template [J=any]
|
|
312
|
+
* @typedef ParsedDriverCaps
|
|
313
|
+
* @property {Capabilities<C>} desiredCaps
|
|
314
|
+
* @property {string} protocol
|
|
315
|
+
* @property {J} [processedJsonwpCapabilities]
|
|
316
|
+
* @property {W3CCapabilities<C>} [processedW3CCapabilities]
|
|
317
|
+
*/
|
|
318
|
+
/**
|
|
319
|
+
* @todo protocol is more specific
|
|
320
|
+
* @template {Constraints} [C=BaseDriverCapConstraints]
|
|
321
|
+
* @template [J=any]
|
|
322
|
+
* @typedef InvalidCaps
|
|
323
|
+
* @property {Error} error
|
|
324
|
+
* @property {string} protocol
|
|
325
|
+
* @property {Capabilities<C>} [desiredCaps]
|
|
326
|
+
* @property {J} [processedJsonwpCapabilities]
|
|
327
|
+
* @property {W3CCapabilities<C>} [processedW3CCapabilities]
|
|
328
|
+
*/
|
|
329
|
+
/**
|
|
330
|
+
* @template {Constraints} [C=BaseDriverCapConstraints]
|
|
331
|
+
* @template {StringRecord|void} [Extra=void]
|
|
332
|
+
* @typedef {import('@appium/types').Capabilities<C, Extra>} Capabilities
|
|
333
|
+
*/
|
|
334
|
+
/**
|
|
335
|
+
* @template {Constraints} [C=BaseDriverCapConstraints]
|
|
336
|
+
* @template {StringRecord|void} [Extra=void]
|
|
337
|
+
* @typedef {import('@appium/types').W3CCapabilities<C, Extra>} W3CCapabilities
|
|
338
|
+
*/
|
|
339
|
+
/**
|
|
340
|
+
* @template {Constraints} [C=BaseDriverCapConstraints]
|
|
341
|
+
* @template {StringRecord|void} [Extra=void]
|
|
342
|
+
* @typedef {import('@appium/types').NSCapabilities<C, Extra>} NSCapabilities
|
|
343
|
+
*/
|
|
344
|
+
/**
|
|
345
|
+
* @template {Constraints} C
|
|
346
|
+
* @typedef {import('@appium/types').ConstraintsToCaps<C>} ConstraintsToCaps
|
|
347
|
+
*/
|
|
348
|
+
/**
|
|
349
|
+
* @template T
|
|
350
|
+
* @typedef {import('type-fest').StringKeyOf<T>} StringKeyOf
|
|
351
|
+
*/
|
|
352
|
+
/**
|
|
353
|
+
* @typedef {import('@appium/types').Constraints} Constraints
|
|
354
|
+
*/
|
|
355
|
+
/**
|
|
356
|
+
* @typedef {import('appium/types').CliCommand} CliCommand
|
|
357
|
+
* @typedef {import('appium/types').CliExtensionSubcommand} CliExtensionSubcommand
|
|
358
|
+
* @typedef {import('appium/types').CliExtensionCommand} CliExtensionCommand
|
|
359
|
+
* @typedef {import('appium/types').ServerCommand} ServerCommand
|
|
360
|
+
* @typedef {import('appium/types').DriverCommand} DriverCommand
|
|
361
|
+
* @typedef {import('appium/types').PluginCommand} PluginCommand
|
|
362
|
+
*/
|
|
363
|
+
/**
|
|
364
|
+
* @template {CliCommand} [Cmd=ServerCommand]
|
|
365
|
+
* @template {CliExtensionSubcommand|void} [SubCmd=void]
|
|
366
|
+
* @typedef {import('appium/types').Args<Cmd, SubCmd>} Args
|
|
367
|
+
*/
|
|
368
|
+
/**
|
|
369
|
+
* @template {CliCommand} [Cmd=ServerCommand]
|
|
370
|
+
* @template {CliExtensionSubcommand|void} [SubCmd=void]
|
|
371
|
+
* @typedef {import('appium/types').ParsedArgs<Cmd, SubCmd>} ParsedArgs
|
|
372
|
+
*/
|
|
373
|
+
//# sourceMappingURL=utils.js.map
|