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/constants.d.ts
CHANGED
|
@@ -18,19 +18,16 @@ export const KNOWN_PLUGINS: Readonly<{
|
|
|
18
18
|
readonly images: "@appium/images-plugin";
|
|
19
19
|
readonly 'execute-driver': "@appium/execute-driver-plugin";
|
|
20
20
|
readonly 'relaxed-caps': "@appium/relaxed-caps-plugin";
|
|
21
|
+
readonly 'universal-xml': "@appium/universal-xml-plugin";
|
|
21
22
|
}>;
|
|
22
23
|
export const KNOWN_DRIVERS: Readonly<{
|
|
23
24
|
readonly uiautomator2: "appium-uiautomator2-driver";
|
|
24
25
|
readonly xcuitest: "appium-xcuitest-driver";
|
|
25
|
-
readonly youiengine: "appium-youiengine-driver";
|
|
26
|
-
readonly windows: "appium-windows-driver";
|
|
27
|
-
readonly mac: "appium-mac-driver";
|
|
28
26
|
readonly mac2: "appium-mac2-driver";
|
|
29
27
|
readonly espresso: "appium-espresso-driver";
|
|
30
|
-
readonly tizen: "appium-tizen-driver";
|
|
31
|
-
readonly flutter: "appium-flutter-driver";
|
|
32
28
|
readonly safari: "appium-safari-driver";
|
|
33
29
|
readonly gecko: "appium-geckodriver";
|
|
30
|
+
readonly chromium: "appium-chromium-driver";
|
|
34
31
|
}>;
|
|
35
32
|
/**
|
|
36
33
|
* Relative path to directory containing any Appium internal files
|
|
@@ -45,4 +42,8 @@ export const EXT_SUBCOMMAND_INSTALL: "install";
|
|
|
45
42
|
export const EXT_SUBCOMMAND_UNINSTALL: "uninstall";
|
|
46
43
|
export const EXT_SUBCOMMAND_UPDATE: "update";
|
|
47
44
|
export const EXT_SUBCOMMAND_RUN: "run";
|
|
45
|
+
/**
|
|
46
|
+
* Current revision of the manifest (`extensions.yaml`) schema
|
|
47
|
+
*/
|
|
48
|
+
export const CURRENT_SCHEMA_REV: 3;
|
|
48
49
|
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../lib/constants.js"],"names":[],"mappings":"AAEA;;GAEG;AACH,mCAAoC;AAEpC;;GAEG;AACH,mCAAoC;AAEpC;;GAEG;AACH,yCAA0C;AAE1C;;GAEG;AACH,oCAAqC;AAMrC
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../lib/constants.js"],"names":[],"mappings":"AAEA;;GAEG;AACH,mCAAoC;AAEpC;;GAEG;AACH,mCAAoC;AAEpC;;GAEG;AACH,yCAA0C;AAE1C;;GAEG;AACH,oCAAqC;AAMrC;;;;;GAOE;AAMF;;;;;;;;GAUE;AAEF;;GAEG;AACH,6CAAqF;AAErF;;GAEG;AACH,gDAA6F;AAE7F,yCAA0C;AAC1C,+CAAgD;AAChD,mDAAoD;AACpD,6CAA8C;AAC9C,uCAAwC;AAExC;;GAEG;AACH,mCAAoC"}
|
package/build/lib/constants.js
CHANGED
|
@@ -1,60 +1,66 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
});
|
|
6
|
-
exports.
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
exports.
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
exports.SERVER_SUBCOMMAND =
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
exports.
|
|
58
|
-
|
|
59
|
-
exports.
|
|
60
|
-
|
|
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.CURRENT_SCHEMA_REV = exports.EXT_SUBCOMMAND_RUN = exports.EXT_SUBCOMMAND_UPDATE = exports.EXT_SUBCOMMAND_UNINSTALL = exports.EXT_SUBCOMMAND_INSTALL = exports.EXT_SUBCOMMAND_LIST = exports.PKG_HASHFILE_RELATIVE_PATH = exports.CACHE_DIR_RELATIVE_PATH = exports.KNOWN_DRIVERS = exports.KNOWN_PLUGINS = exports.USE_ALL_PLUGINS = exports.SERVER_SUBCOMMAND = exports.PLUGIN_TYPE = exports.DRIVER_TYPE = void 0;
|
|
7
|
+
const path_1 = __importDefault(require("path"));
|
|
8
|
+
/**
|
|
9
|
+
* The name of the extension type for drivers
|
|
10
|
+
*/
|
|
11
|
+
exports.DRIVER_TYPE = 'driver';
|
|
12
|
+
/**
|
|
13
|
+
* The name of the extension type for plugins
|
|
14
|
+
*/
|
|
15
|
+
exports.PLUGIN_TYPE = 'plugin';
|
|
16
|
+
/**
|
|
17
|
+
* The `server` command of the `appium` CLI
|
|
18
|
+
*/
|
|
19
|
+
exports.SERVER_SUBCOMMAND = 'server';
|
|
20
|
+
/**
|
|
21
|
+
* The value of `--use-plugins` if _all_ plugins should be loaded
|
|
22
|
+
*/
|
|
23
|
+
exports.USE_ALL_PLUGINS = 'all';
|
|
24
|
+
// This is a map of plugin names to npm packages representing those plugins.
|
|
25
|
+
// The plugins in this list will be available to the CLI so users can just
|
|
26
|
+
// type 'appium plugin install 'name'', rather than having to specify the full
|
|
27
|
+
// npm package. I.e., these are the officially recognized plugins.
|
|
28
|
+
exports.KNOWN_PLUGINS = Object.freeze(
|
|
29
|
+
/** @type {const} */ ({
|
|
30
|
+
images: '@appium/images-plugin',
|
|
31
|
+
'execute-driver': '@appium/execute-driver-plugin',
|
|
32
|
+
'relaxed-caps': '@appium/relaxed-caps-plugin',
|
|
33
|
+
'universal-xml': '@appium/universal-xml-plugin',
|
|
34
|
+
}));
|
|
35
|
+
// This is a map of driver names to npm packages representing those drivers.
|
|
36
|
+
// The drivers in this list will be available to the CLI so users can just
|
|
37
|
+
// type 'appium driver install 'name'', rather than having to specify the full
|
|
38
|
+
// npm package. I.e., these are the officially recognized drivers.
|
|
39
|
+
exports.KNOWN_DRIVERS = Object.freeze(
|
|
40
|
+
/** @type {const} */ ({
|
|
41
|
+
uiautomator2: 'appium-uiautomator2-driver',
|
|
42
|
+
xcuitest: 'appium-xcuitest-driver',
|
|
43
|
+
mac2: 'appium-mac2-driver',
|
|
44
|
+
espresso: 'appium-espresso-driver',
|
|
45
|
+
safari: 'appium-safari-driver',
|
|
46
|
+
gecko: 'appium-geckodriver',
|
|
47
|
+
chromium: 'appium-chromium-driver',
|
|
48
|
+
}));
|
|
49
|
+
/**
|
|
50
|
+
* Relative path to directory containing any Appium internal files
|
|
51
|
+
*/
|
|
52
|
+
exports.CACHE_DIR_RELATIVE_PATH = path_1.default.join('node_modules', '.cache', 'appium');
|
|
53
|
+
/**
|
|
54
|
+
* Relative path to hashfile (from `APPIUM_HOME`) of consuming project's `package.json` (if it exists)
|
|
55
|
+
*/
|
|
56
|
+
exports.PKG_HASHFILE_RELATIVE_PATH = path_1.default.join(exports.CACHE_DIR_RELATIVE_PATH, 'package.hash');
|
|
57
|
+
exports.EXT_SUBCOMMAND_LIST = 'list';
|
|
58
|
+
exports.EXT_SUBCOMMAND_INSTALL = 'install';
|
|
59
|
+
exports.EXT_SUBCOMMAND_UNINSTALL = 'uninstall';
|
|
60
|
+
exports.EXT_SUBCOMMAND_UPDATE = 'update';
|
|
61
|
+
exports.EXT_SUBCOMMAND_RUN = 'run';
|
|
62
|
+
/**
|
|
63
|
+
* Current revision of the manifest (`extensions.yaml`) schema
|
|
64
|
+
*/
|
|
65
|
+
exports.CURRENT_SCHEMA_REV = 3;
|
|
66
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../lib/constants.js"],"names":[],"mappings":";;;;;;AAAA,gDAAwB;AAExB;;GAEG;AACU,QAAA,WAAW,GAAG,QAAQ,CAAC;AAEpC;;GAEG;AACU,QAAA,WAAW,GAAG,QAAQ,CAAC;AAEpC;;GAEG;AACU,QAAA,iBAAiB,GAAG,QAAQ,CAAC;AAE1C;;GAEG;AACU,QAAA,eAAe,GAAG,KAAK,CAAC;AAErC,4EAA4E;AAC5E,0EAA0E;AAC1E,8EAA8E;AAC9E,kEAAkE;AACrD,QAAA,aAAa,GAAG,MAAM,CAAC,MAAM;AACxC,oBAAoB,CAAC,CAAC;IACpB,MAAM,EAAE,uBAAuB;IAC/B,gBAAgB,EAAE,+BAA+B;IACjD,cAAc,EAAE,6BAA6B;IAC7C,eAAe,EAAE,8BAA8B;CAChD,CAAC,CACH,CAAC;AAEF,4EAA4E;AAC5E,0EAA0E;AAC1E,8EAA8E;AAC9E,kEAAkE;AACrD,QAAA,aAAa,GAAG,MAAM,CAAC,MAAM;AACxC,oBAAoB,CAAC,CAAC;IACpB,YAAY,EAAE,4BAA4B;IAC1C,QAAQ,EAAE,wBAAwB;IAClC,IAAI,EAAE,oBAAoB;IAC1B,QAAQ,EAAE,wBAAwB;IAClC,MAAM,EAAE,sBAAsB;IAC9B,KAAK,EAAE,oBAAoB;IAC3B,QAAQ,EAAE,wBAAwB;CACnC,CAAC,CACH,CAAC;AAEF;;GAEG;AACU,QAAA,uBAAuB,GAAG,cAAI,CAAC,IAAI,CAAC,cAAc,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAErF;;GAEG;AACU,QAAA,0BAA0B,GAAG,cAAI,CAAC,IAAI,CAAC,+BAAuB,EAAE,cAAc,CAAC,CAAC;AAEhF,QAAA,mBAAmB,GAAG,MAAM,CAAC;AAC7B,QAAA,sBAAsB,GAAG,SAAS,CAAC;AACnC,QAAA,wBAAwB,GAAG,WAAW,CAAC;AACvC,QAAA,qBAAqB,GAAG,QAAQ,CAAC;AACjC,QAAA,kBAAkB,GAAG,KAAK,CAAC;AAExC;;GAEG;AACU,QAAA,kBAAkB,GAAG,CAAC,CAAC"}
|
|
@@ -1,177 +1,212 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
});
|
|
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
6
|
exports.DriverConfig = void 0;
|
|
7
|
-
|
|
8
|
-
require("
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
constructor(manifest) {
|
|
25
|
-
super(_constants.DRIVER_TYPE, manifest);
|
|
26
|
-
this.knownAutomationNames = new Set();
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
static create(manifest) {
|
|
30
|
-
const instance = new DriverConfig(manifest);
|
|
31
|
-
|
|
32
|
-
if (DriverConfig.getInstance(manifest)) {
|
|
33
|
-
throw new Error(`Manifest with APPIUM_HOME ${manifest.appiumHome} already has a DriverConfig; use DriverConfig.getInstance() to retrieve it.`);
|
|
7
|
+
const lodash_1 = __importDefault(require("lodash"));
|
|
8
|
+
const constants_1 = require("../constants");
|
|
9
|
+
const logger_1 = __importDefault(require("../logger"));
|
|
10
|
+
const extension_config_1 = require("./extension-config");
|
|
11
|
+
/**
|
|
12
|
+
* @extends {ExtensionConfig<DriverType>}
|
|
13
|
+
*/
|
|
14
|
+
class DriverConfig extends extension_config_1.ExtensionConfig {
|
|
15
|
+
/**
|
|
16
|
+
* Call {@link DriverConfig.create} instead.
|
|
17
|
+
* @private
|
|
18
|
+
* @param {import('./manifest').Manifest} manifest - Manifest instance
|
|
19
|
+
*/
|
|
20
|
+
constructor(manifest) {
|
|
21
|
+
super(constants_1.DRIVER_TYPE, manifest);
|
|
22
|
+
this.knownAutomationNames = new Set();
|
|
34
23
|
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
this.knownAutomationNames.clear();
|
|
47
|
-
return await super._validate(this.manifest.getExtensionData(_constants.DRIVER_TYPE));
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
getConfigProblems(extData) {
|
|
51
|
-
const problems = [];
|
|
52
|
-
const {
|
|
53
|
-
platformNames,
|
|
54
|
-
automationName
|
|
55
|
-
} = extData;
|
|
56
|
-
|
|
57
|
-
if (!_lodash.default.isArray(platformNames)) {
|
|
58
|
-
problems.push({
|
|
59
|
-
err: 'Missing or incorrect supported platformNames list.',
|
|
60
|
-
val: platformNames
|
|
61
|
-
});
|
|
62
|
-
} else {
|
|
63
|
-
if (_lodash.default.isEmpty(platformNames)) {
|
|
64
|
-
problems.push({
|
|
65
|
-
err: 'Empty platformNames list.',
|
|
66
|
-
val: platformNames
|
|
67
|
-
});
|
|
68
|
-
} else {
|
|
69
|
-
for (const pName of platformNames) {
|
|
70
|
-
if (!_lodash.default.isString(pName)) {
|
|
71
|
-
problems.push({
|
|
72
|
-
err: 'Incorrectly formatted platformName.',
|
|
73
|
-
val: pName
|
|
74
|
-
});
|
|
75
|
-
}
|
|
24
|
+
/**
|
|
25
|
+
* Creates a new {@link DriverConfig} instance for a {@link Manifest} instance.
|
|
26
|
+
*
|
|
27
|
+
* @param {Manifest} manifest
|
|
28
|
+
* @throws If `manifest` already associated with a `DriverConfig`
|
|
29
|
+
* @returns {DriverConfig}
|
|
30
|
+
*/
|
|
31
|
+
static create(manifest) {
|
|
32
|
+
const instance = new DriverConfig(manifest);
|
|
33
|
+
if (DriverConfig.getInstance(manifest)) {
|
|
34
|
+
throw new Error(`Manifest with APPIUM_HOME ${manifest.appiumHome} already has a DriverConfig; use DriverConfig.getInstance() to retrieve it.`);
|
|
76
35
|
}
|
|
77
|
-
|
|
36
|
+
DriverConfig._instances.set(manifest, instance);
|
|
37
|
+
return instance;
|
|
78
38
|
}
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
39
|
+
/**
|
|
40
|
+
* Returns a DriverConfig associated with a Manifest
|
|
41
|
+
* @param {Manifest} manifest
|
|
42
|
+
* @returns {DriverConfig|undefined}
|
|
43
|
+
*/
|
|
44
|
+
static getInstance(manifest) {
|
|
45
|
+
return DriverConfig._instances.get(manifest);
|
|
85
46
|
}
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
47
|
+
/**
|
|
48
|
+
* Checks extensions for problems
|
|
49
|
+
*/
|
|
50
|
+
async validate() {
|
|
51
|
+
this.knownAutomationNames.clear();
|
|
52
|
+
return await super._validate(this.manifest.getExtensionData(constants_1.DRIVER_TYPE));
|
|
92
53
|
}
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
54
|
+
/**
|
|
55
|
+
* @param {ExtManifest<DriverType>} extData
|
|
56
|
+
* @returns {import('./extension-config').ExtManifestProblem[]}
|
|
57
|
+
*/
|
|
58
|
+
getConfigProblems(extData) {
|
|
59
|
+
const problems = [];
|
|
60
|
+
const { platformNames, automationName } = extData;
|
|
61
|
+
if (!lodash_1.default.isArray(platformNames)) {
|
|
62
|
+
problems.push({
|
|
63
|
+
err: 'Missing or incorrect supported platformNames list.',
|
|
64
|
+
val: platformNames,
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
if (lodash_1.default.isEmpty(platformNames)) {
|
|
69
|
+
problems.push({
|
|
70
|
+
err: 'Empty platformNames list.',
|
|
71
|
+
val: platformNames,
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
for (const pName of platformNames) {
|
|
76
|
+
if (!lodash_1.default.isString(pName)) {
|
|
77
|
+
problems.push({
|
|
78
|
+
err: 'Incorrectly formatted platformName.',
|
|
79
|
+
val: pName,
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
if (!lodash_1.default.isString(automationName)) {
|
|
86
|
+
problems.push({
|
|
87
|
+
err: 'Missing or incorrect automationName',
|
|
88
|
+
val: automationName,
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
if (this.knownAutomationNames.has(automationName)) {
|
|
92
|
+
problems.push({
|
|
93
|
+
err: 'Multiple drivers claim support for the same automationName',
|
|
94
|
+
val: automationName,
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
// should we retain the name at the end of this function, once we've checked there are no problems?
|
|
98
|
+
this.knownAutomationNames.add(automationName);
|
|
99
|
+
return problems;
|
|
111
100
|
}
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
101
|
+
/**
|
|
102
|
+
* @param {ExtName<DriverType>} driverName
|
|
103
|
+
* @param {ExtManifest<DriverType>} extData
|
|
104
|
+
* @returns {string}
|
|
105
|
+
*/
|
|
106
|
+
extensionDesc(driverName, { version, automationName }) {
|
|
107
|
+
return `${driverName}@${version} (automationName '${automationName}')`;
|
|
115
108
|
}
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
109
|
+
/**
|
|
110
|
+
* Given capabilities, find a matching driver within the config. Load its class and return it along with version and driver name.
|
|
111
|
+
* @template {import('@appium/types').StringRecord} C
|
|
112
|
+
* @param {C} caps
|
|
113
|
+
* @returns {MatchedDriver}
|
|
114
|
+
*/
|
|
115
|
+
findMatchingDriver({ automationName, platformName }) {
|
|
116
|
+
if (!lodash_1.default.isString(platformName)) {
|
|
117
|
+
throw new Error('You must include a platformName capability');
|
|
118
|
+
}
|
|
119
|
+
if (!lodash_1.default.isString(automationName)) {
|
|
120
|
+
throw new Error('You must include an automationName capability');
|
|
121
|
+
}
|
|
122
|
+
logger_1.default.info(`Attempting to find matching driver for automationName ` +
|
|
123
|
+
`'${automationName}' and platformName '${platformName}'`);
|
|
124
|
+
try {
|
|
125
|
+
const { driverName, mainClass, version } = this._getDriverBySupport(automationName, platformName);
|
|
126
|
+
logger_1.default.info(`The '${driverName}' driver was installed and matched caps.`);
|
|
127
|
+
logger_1.default.info(`Will require it at ${this.getInstallPath(driverName)}`);
|
|
128
|
+
const driver = this.require(driverName);
|
|
129
|
+
if (!driver) {
|
|
130
|
+
throw new Error(`Driver '${driverName}' did not export a class with name '${mainClass}'. Contact the author of the driver!`);
|
|
131
|
+
}
|
|
132
|
+
return { driver, version, driverName };
|
|
133
|
+
}
|
|
134
|
+
catch (err) {
|
|
135
|
+
const msg = `Could not find a driver for automationName ` +
|
|
136
|
+
`'${automationName}' and platformName ${platformName}'. ` +
|
|
137
|
+
`Have you installed a driver that supports those ` +
|
|
138
|
+
`capabilities? Run 'appium driver list --installed' to see. ` +
|
|
139
|
+
`(Lower-level error: ${err.message})`;
|
|
140
|
+
throw new Error(msg);
|
|
141
|
+
}
|
|
144
142
|
}
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
143
|
+
/**
|
|
144
|
+
* Given an automation name and platform name, find a suitable driver and return its extension data.
|
|
145
|
+
* @param {string} matchAutomationName
|
|
146
|
+
* @param {string} matchPlatformName
|
|
147
|
+
* @returns {ExtMetadata<DriverType> & import('appium/types').InternalMetadata & import('appium/types').CommonExtMetadata}
|
|
148
|
+
*/
|
|
149
|
+
_getDriverBySupport(matchAutomationName, matchPlatformName) {
|
|
150
|
+
const drivers = this.installedExtensions;
|
|
151
|
+
for (const [driverName, driverData] of lodash_1.default.toPairs(drivers)) {
|
|
152
|
+
const { automationName, platformNames } = driverData;
|
|
153
|
+
const aNameMatches = automationName.toLowerCase() === matchAutomationName.toLowerCase();
|
|
154
|
+
const pNameMatches = lodash_1.default.includes(platformNames.map(lodash_1.default.toLower), matchPlatformName.toLowerCase());
|
|
155
|
+
if (aNameMatches && pNameMatches) {
|
|
156
|
+
return { driverName, ...driverData };
|
|
157
|
+
}
|
|
158
|
+
if (aNameMatches) {
|
|
159
|
+
throw new Error(`Driver '${driverName}' supports automationName ` +
|
|
160
|
+
`'${automationName}', but Appium could not find ` +
|
|
161
|
+
`support for platformName '${matchPlatformName}'. Supported ` +
|
|
162
|
+
`platformNames are: ` +
|
|
163
|
+
JSON.stringify(platformNames));
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
throw new Error(`Could not find installed driver to support given caps`);
|
|
169
167
|
}
|
|
170
|
-
|
|
171
|
-
throw new Error(`Could not find installed driver to support given caps`);
|
|
172
|
-
}
|
|
173
|
-
|
|
174
168
|
}
|
|
175
|
-
|
|
176
169
|
exports.DriverConfig = DriverConfig;
|
|
177
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEcml2ZXJDb25maWciLCJFeHRlbnNpb25Db25maWciLCJrbm93bkF1dG9tYXRpb25OYW1lcyIsIl9pbnN0YW5jZXMiLCJXZWFrTWFwIiwiY29uc3RydWN0b3IiLCJtYW5pZmVzdCIsIkRSSVZFUl9UWVBFIiwiU2V0IiwiY3JlYXRlIiwiaW5zdGFuY2UiLCJnZXRJbnN0YW5jZSIsIkVycm9yIiwiYXBwaXVtSG9tZSIsInNldCIsImdldCIsInZhbGlkYXRlIiwiY2xlYXIiLCJfdmFsaWRhdGUiLCJnZXRFeHRlbnNpb25EYXRhIiwiZ2V0Q29uZmlnUHJvYmxlbXMiLCJleHREYXRhIiwicHJvYmxlbXMiLCJwbGF0Zm9ybU5hbWVzIiwiYXV0b21hdGlvbk5hbWUiLCJfIiwiaXNBcnJheSIsInB1c2giLCJlcnIiLCJ2YWwiLCJpc0VtcHR5IiwicE5hbWUiLCJpc1N0cmluZyIsImhhcyIsImFkZCIsImV4dGVuc2lvbkRlc2MiLCJkcml2ZXJOYW1lIiwidmVyc2lvbiIsImZpbmRNYXRjaGluZ0RyaXZlciIsInBsYXRmb3JtTmFtZSIsImxvZyIsImluZm8iLCJtYWluQ2xhc3MiLCJfZ2V0RHJpdmVyQnlTdXBwb3J0IiwiZ2V0SW5zdGFsbFBhdGgiLCJkcml2ZXIiLCJyZXF1aXJlIiwibXNnIiwibWVzc2FnZSIsIm1hdGNoQXV0b21hdGlvbk5hbWUiLCJtYXRjaFBsYXRmb3JtTmFtZSIsImRyaXZlcnMiLCJpbnN0YWxsZWRFeHRlbnNpb25zIiwiZHJpdmVyRGF0YSIsInRvUGFpcnMiLCJhTmFtZU1hdGNoZXMiLCJ0b0xvd2VyQ2FzZSIsInBOYW1lTWF0Y2hlcyIsImluY2x1ZGVzIiwibWFwIiwidG9Mb3dlciIsIkpTT04iLCJzdHJpbmdpZnkiXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvZXh0ZW5zaW9uL2RyaXZlci1jb25maWcuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7RFJJVkVSX1RZUEV9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgbG9nIGZyb20gJy4uL2xvZ2dlcic7XG5pbXBvcnQge0V4dGVuc2lvbkNvbmZpZ30gZnJvbSAnLi9leHRlbnNpb24tY29uZmlnJztcblxuLyoqXG4gKiBAZXh0ZW5kcyB7RXh0ZW5zaW9uQ29uZmlnPERyaXZlclR5cGU+fVxuICovXG5leHBvcnQgY2xhc3MgRHJpdmVyQ29uZmlnIGV4dGVuZHMgRXh0ZW5zaW9uQ29uZmlnIHtcbiAgLyoqXG4gICAqIEEgc2V0IG9mIHVuaXF1ZSBhdXRvbWF0aW9uIG5hbWVzIHVzZWQgYnkgZHJpdmVycy5cbiAgICogQHR5cGUge1NldDxzdHJpbmc+fVxuICAgKi9cbiAga25vd25BdXRvbWF0aW9uTmFtZXM7XG5cbiAgLyoqXG4gICAqIEEgbWFwcGluZyBvZiB7QGxpbmsgTWFuaWZlc3R9IGluc3RhbmNlcyB0byB7QGxpbmsgRHJpdmVyQ29uZmlnfSBpbnN0YW5jZXMuXG4gICAqXG4gICAqIGBNYW5pZmVzdGAgYW5kIGBFeHRlbnNpb25Db25maWdgIGhhdmUgYSBvbmUtdG8tbWFueSByZWxhdGlvbnNoaXA7IGVhY2ggYE1hbmlmZXN0YCBzaG91bGQgYmUgYXNzb2NpYXRlZCB3aXRoIGEgYERyaXZlckNvbmZpZ2AgYW5kIGEgYFBsdWdpbkNvbmZpZ2A7IG5vIG1vcmUsIG5vIGxlc3MuXG4gICAqXG4gICAqIFRoaXMgdmFyaWFibGUgdHJhY2tzIHRoZSBgTWFuaWZlc3RgLXRvLWBEcml2ZXJDb25maWdgIHBvcnRpb24uXG4gICAqXG4gICAqIEB0eXBlIHtXZWFrTWFwPE1hbmlmZXN0LERyaXZlckNvbmZpZz59XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBzdGF0aWMgX2luc3RhbmNlcyA9IG5ldyBXZWFrTWFwKCk7XG5cbiAgLyoqXG4gICAqIENhbGwge0BsaW5rIERyaXZlckNvbmZpZy5jcmVhdGV9IGluc3RlYWQuXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7aW1wb3J0KCcuL21hbmlmZXN0JykuTWFuaWZlc3R9IG1hbmlmZXN0IC0gTWFuaWZlc3QgaW5zdGFuY2VcbiAgICovXG4gIGNvbnN0cnVjdG9yKG1hbmlmZXN0KSB7XG4gICAgc3VwZXIoRFJJVkVSX1RZUEUsIG1hbmlmZXN0KTtcblxuICAgIHRoaXMua25vd25BdXRvbWF0aW9uTmFtZXMgPSBuZXcgU2V0KCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyB7QGxpbmsgRHJpdmVyQ29uZmlnfSBpbnN0YW5jZSBmb3IgYSB7QGxpbmsgTWFuaWZlc3R9IGluc3RhbmNlLlxuICAgKlxuICAgKiBAcGFyYW0ge01hbmlmZXN0fSBtYW5pZmVzdFxuICAgKiBAdGhyb3dzIElmIGBtYW5pZmVzdGAgYWxyZWFkeSBhc3NvY2lhdGVkIHdpdGggYSBgRHJpdmVyQ29uZmlnYFxuICAgKiBAcmV0dXJucyB7RHJpdmVyQ29uZmlnfVxuICAgKi9cbiAgc3RhdGljIGNyZWF0ZShtYW5pZmVzdCkge1xuICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IERyaXZlckNvbmZpZyhtYW5pZmVzdCk7XG4gICAgaWYgKERyaXZlckNvbmZpZy5nZXRJbnN0YW5jZShtYW5pZmVzdCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYE1hbmlmZXN0IHdpdGggQVBQSVVNX0hPTUUgJHttYW5pZmVzdC5hcHBpdW1Ib21lfSBhbHJlYWR5IGhhcyBhIERyaXZlckNvbmZpZzsgdXNlIERyaXZlckNvbmZpZy5nZXRJbnN0YW5jZSgpIHRvIHJldHJpZXZlIGl0LmBcbiAgICAgICk7XG4gICAgfVxuICAgIERyaXZlckNvbmZpZy5faW5zdGFuY2VzLnNldChtYW5pZmVzdCwgaW5zdGFuY2UpO1xuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgRHJpdmVyQ29uZmlnIGFzc29jaWF0ZWQgd2l0aCBhIE1hbmlmZXN0XG4gICAqIEBwYXJhbSB7TWFuaWZlc3R9IG1hbmlmZXN0XG4gICAqIEByZXR1cm5zIHtEcml2ZXJDb25maWd8dW5kZWZpbmVkfVxuICAgKi9cbiAgc3RhdGljIGdldEluc3RhbmNlKG1hbmlmZXN0KSB7XG4gICAgcmV0dXJuIERyaXZlckNvbmZpZy5faW5zdGFuY2VzLmdldChtYW5pZmVzdCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGV4dGVuc2lvbnMgZm9yIHByb2JsZW1zXG4gICAqL1xuICBhc3luYyB2YWxpZGF0ZSgpIHtcbiAgICB0aGlzLmtub3duQXV0b21hdGlvbk5hbWVzLmNsZWFyKCk7XG4gICAgcmV0dXJuIGF3YWl0IHN1cGVyLl92YWxpZGF0ZSh0aGlzLm1hbmlmZXN0LmdldEV4dGVuc2lvbkRhdGEoRFJJVkVSX1RZUEUpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0V4dE1hbmlmZXN0PERyaXZlclR5cGU+fSBleHREYXRhXG4gICAqIEByZXR1cm5zIHtpbXBvcnQoJy4vZXh0ZW5zaW9uLWNvbmZpZycpLkV4dE1hbmlmZXN0UHJvYmxlbVtdfVxuICAgKi9cbiAgZ2V0Q29uZmlnUHJvYmxlbXMoZXh0RGF0YSkge1xuICAgIGNvbnN0IHByb2JsZW1zID0gW107XG4gICAgY29uc3Qge3BsYXRmb3JtTmFtZXMsIGF1dG9tYXRpb25OYW1lfSA9IGV4dERhdGE7XG5cbiAgICBpZiAoIV8uaXNBcnJheShwbGF0Zm9ybU5hbWVzKSkge1xuICAgICAgcHJvYmxlbXMucHVzaCh7XG4gICAgICAgIGVycjogJ01pc3Npbmcgb3IgaW5jb3JyZWN0IHN1cHBvcnRlZCBwbGF0Zm9ybU5hbWVzIGxpc3QuJyxcbiAgICAgICAgdmFsOiBwbGF0Zm9ybU5hbWVzLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChfLmlzRW1wdHkocGxhdGZvcm1OYW1lcykpIHtcbiAgICAgICAgcHJvYmxlbXMucHVzaCh7XG4gICAgICAgICAgZXJyOiAnRW1wdHkgcGxhdGZvcm1OYW1lcyBsaXN0LicsXG4gICAgICAgICAgdmFsOiBwbGF0Zm9ybU5hbWVzLFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAoY29uc3QgcE5hbWUgb2YgcGxhdGZvcm1OYW1lcykge1xuICAgICAgICAgIGlmICghXy5pc1N0cmluZyhwTmFtZSkpIHtcbiAgICAgICAgICAgIHByb2JsZW1zLnB1c2goe1xuICAgICAgICAgICAgICBlcnI6ICdJbmNvcnJlY3RseSBmb3JtYXR0ZWQgcGxhdGZvcm1OYW1lLicsXG4gICAgICAgICAgICAgIHZhbDogcE5hbWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIV8uaXNTdHJpbmcoYXV0b21hdGlvbk5hbWUpKSB7XG4gICAgICBwcm9ibGVtcy5wdXNoKHtcbiAgICAgICAgZXJyOiAnTWlzc2luZyBvciBpbmNvcnJlY3QgYXV0b21hdGlvbk5hbWUnLFxuICAgICAgICB2YWw6IGF1dG9tYXRpb25OYW1lLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMua25vd25BdXRvbWF0aW9uTmFtZXMuaGFzKGF1dG9tYXRpb25OYW1lKSkge1xuICAgICAgcHJvYmxlbXMucHVzaCh7XG4gICAgICAgIGVycjogJ011bHRpcGxlIGRyaXZlcnMgY2xhaW0gc3VwcG9ydCBmb3IgdGhlIHNhbWUgYXV0b21hdGlvbk5hbWUnLFxuICAgICAgICB2YWw6IGF1dG9tYXRpb25OYW1lLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gc2hvdWxkIHdlIHJldGFpbiB0aGUgbmFtZSBhdCB0aGUgZW5kIG9mIHRoaXMgZnVuY3Rpb24sIG9uY2Ugd2UndmUgY2hlY2tlZCB0aGVyZSBhcmUgbm8gcHJvYmxlbXM/XG4gICAgdGhpcy5rbm93bkF1dG9tYXRpb25OYW1lcy5hZGQoYXV0b21hdGlvbk5hbWUpO1xuXG4gICAgcmV0dXJuIHByb2JsZW1zO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7RXh0TmFtZTxEcml2ZXJUeXBlPn0gZHJpdmVyTmFtZVxuICAgKiBAcGFyYW0ge0V4dE1hbmlmZXN0PERyaXZlclR5cGU+fSBleHREYXRhXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICBleHRlbnNpb25EZXNjKGRyaXZlck5hbWUsIHt2ZXJzaW9uLCBhdXRvbWF0aW9uTmFtZX0pIHtcbiAgICByZXR1cm4gYCR7ZHJpdmVyTmFtZX1AJHt2ZXJzaW9ufSAoYXV0b21hdGlvbk5hbWUgJyR7YXV0b21hdGlvbk5hbWV9JylgO1xuICB9XG5cbiAgLyoqXG4gICAqIEdpdmVuIGNhcGFiaWxpdGllcywgZmluZCBhIG1hdGNoaW5nIGRyaXZlciB3aXRoaW4gdGhlIGNvbmZpZy4gTG9hZCBpdHMgY2xhc3MgYW5kIHJldHVybiBpdCBhbG9uZyB3aXRoIHZlcnNpb24gYW5kIGRyaXZlciBuYW1lLlxuICAgKiBAdGVtcGxhdGUge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLlN0cmluZ1JlY29yZH0gQ1xuICAgKiBAcGFyYW0ge0N9IGNhcHNcbiAgICogQHJldHVybnMge01hdGNoZWREcml2ZXJ9XG4gICAqL1xuICBmaW5kTWF0Y2hpbmdEcml2ZXIoe2F1dG9tYXRpb25OYW1lLCBwbGF0Zm9ybU5hbWV9KSB7XG4gICAgaWYgKCFfLmlzU3RyaW5nKHBsYXRmb3JtTmFtZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignWW91IG11c3QgaW5jbHVkZSBhIHBsYXRmb3JtTmFtZSBjYXBhYmlsaXR5Jyk7XG4gICAgfVxuXG4gICAgaWYgKCFfLmlzU3RyaW5nKGF1dG9tYXRpb25OYW1lKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdZb3UgbXVzdCBpbmNsdWRlIGFuIGF1dG9tYXRpb25OYW1lIGNhcGFiaWxpdHknKTtcbiAgICB9XG5cbiAgICBsb2cuaW5mbyhcbiAgICAgIGBBdHRlbXB0aW5nIHRvIGZpbmQgbWF0Y2hpbmcgZHJpdmVyIGZvciBhdXRvbWF0aW9uTmFtZSBgICtcbiAgICAgICAgYCcke2F1dG9tYXRpb25OYW1lfScgYW5kIHBsYXRmb3JtTmFtZSAnJHtwbGF0Zm9ybU5hbWV9J2BcbiAgICApO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHtkcml2ZXJOYW1lLCBtYWluQ2xhc3MsIHZlcnNpb259ID0gdGhpcy5fZ2V0RHJpdmVyQnlTdXBwb3J0KFxuICAgICAgICBhdXRvbWF0aW9uTmFtZSxcbiAgICAgICAgcGxhdGZvcm1OYW1lXG4gICAgICApO1xuICAgICAgbG9nLmluZm8oYFRoZSAnJHtkcml2ZXJOYW1lfScgZHJpdmVyIHdhcyBpbnN0YWxsZWQgYW5kIG1hdGNoZWQgY2Fwcy5gKTtcbiAgICAgIGxvZy5pbmZvKGBXaWxsIHJlcXVpcmUgaXQgYXQgJHt0aGlzLmdldEluc3RhbGxQYXRoKGRyaXZlck5hbWUpfWApO1xuICAgICAgY29uc3QgZHJpdmVyID0gdGhpcy5yZXF1aXJlKGRyaXZlck5hbWUpO1xuICAgICAgaWYgKCFkcml2ZXIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBEcml2ZXIgJyR7ZHJpdmVyTmFtZX0nIGRpZCBub3QgZXhwb3J0IGEgY2xhc3Mgd2l0aCBuYW1lICcke21haW5DbGFzc30nLiBDb250YWN0IHRoZSBhdXRob3Igb2YgdGhlIGRyaXZlciFgXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4ge2RyaXZlciwgdmVyc2lvbiwgZHJpdmVyTmFtZX07XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zdCBtc2cgPVxuICAgICAgICBgQ291bGQgbm90IGZpbmQgYSBkcml2ZXIgZm9yIGF1dG9tYXRpb25OYW1lIGAgK1xuICAgICAgICBgJyR7YXV0b21hdGlvbk5hbWV9JyBhbmQgcGxhdGZvcm1OYW1lICR7cGxhdGZvcm1OYW1lfScuIGAgK1xuICAgICAgICBgSGF2ZSB5b3UgaW5zdGFsbGVkIGEgZHJpdmVyIHRoYXQgc3VwcG9ydHMgdGhvc2UgYCArXG4gICAgICAgIGBjYXBhYmlsaXRpZXM/IFJ1biAnYXBwaXVtIGRyaXZlciBsaXN0IC0taW5zdGFsbGVkJyB0byBzZWUuIGAgK1xuICAgICAgICBgKExvd2VyLWxldmVsIGVycm9yOiAke2Vyci5tZXNzYWdlfSlgO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdpdmVuIGFuIGF1dG9tYXRpb24gbmFtZSBhbmQgcGxhdGZvcm0gbmFtZSwgZmluZCBhIHN1aXRhYmxlIGRyaXZlciBhbmQgcmV0dXJuIGl0cyBleHRlbnNpb24gZGF0YS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG1hdGNoQXV0b21hdGlvbk5hbWVcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1hdGNoUGxhdGZvcm1OYW1lXG4gICAqIEByZXR1cm5zIHtFeHRNZXRhZGF0YTxEcml2ZXJUeXBlPiAmIGltcG9ydCgnYXBwaXVtL3R5cGVzJykuSW50ZXJuYWxNZXRhZGF0YSAmIGltcG9ydCgnYXBwaXVtL3R5cGVzJykuQ29tbW9uRXh0TWV0YWRhdGF9XG4gICAqL1xuICBfZ2V0RHJpdmVyQnlTdXBwb3J0KG1hdGNoQXV0b21hdGlvbk5hbWUsIG1hdGNoUGxhdGZvcm1OYW1lKSB7XG4gICAgY29uc3QgZHJpdmVycyA9IHRoaXMuaW5zdGFsbGVkRXh0ZW5zaW9ucztcbiAgICBmb3IgKGNvbnN0IFtkcml2ZXJOYW1lLCBkcml2ZXJEYXRhXSBvZiBfLnRvUGFpcnMoZHJpdmVycykpIHtcbiAgICAgIGNvbnN0IHthdXRvbWF0aW9uTmFtZSwgcGxhdGZvcm1OYW1lc30gPSBkcml2ZXJEYXRhO1xuICAgICAgY29uc3QgYU5hbWVNYXRjaGVzID0gYXV0b21hdGlvbk5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbWF0Y2hBdXRvbWF0aW9uTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgY29uc3QgcE5hbWVNYXRjaGVzID0gXy5pbmNsdWRlcyhcbiAgICAgICAgcGxhdGZvcm1OYW1lcy5tYXAoXy50b0xvd2VyKSxcbiAgICAgICAgbWF0Y2hQbGF0Zm9ybU5hbWUudG9Mb3dlckNhc2UoKVxuICAgICAgKTtcblxuICAgICAgaWYgKGFOYW1lTWF0Y2hlcyAmJiBwTmFtZU1hdGNoZXMpIHtcbiAgICAgICAgcmV0dXJuIHtkcml2ZXJOYW1lLCAuLi5kcml2ZXJEYXRhfTtcbiAgICAgIH1cblxuICAgICAgaWYgKGFOYW1lTWF0Y2hlcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYERyaXZlciAnJHtkcml2ZXJOYW1lfScgc3VwcG9ydHMgYXV0b21hdGlvbk5hbWUgYCArXG4gICAgICAgICAgICBgJyR7YXV0b21hdGlvbk5hbWV9JywgYnV0IEFwcGl1bSBjb3VsZCBub3QgZmluZCBgICtcbiAgICAgICAgICAgIGBzdXBwb3J0IGZvciBwbGF0Zm9ybU5hbWUgJyR7bWF0Y2hQbGF0Zm9ybU5hbWV9Jy4gU3VwcG9ydGVkIGAgK1xuICAgICAgICAgICAgYHBsYXRmb3JtTmFtZXMgYXJlOiBgICtcbiAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHBsYXRmb3JtTmFtZXMpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZmluZCBpbnN0YWxsZWQgZHJpdmVyIHRvIHN1cHBvcnQgZ2l2ZW4gY2Fwc2ApO1xuICB9XG59XG5cbi8qKlxuICogQHRlbXBsYXRlIFRcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2FwcGl1bS90eXBlcycpLkV4dE1ldGFkYXRhPFQ+fSBFeHRNZXRhZGF0YVxuICovXG5cbi8qKlxuICogQHRlbXBsYXRlIFRcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2FwcGl1bS90eXBlcycpLkV4dE1hbmlmZXN0PFQ+fSBFeHRNYW5pZmVzdFxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnYXBwaXVtL3R5cGVzJykuTWFuaWZlc3REYXRhfSBNYW5pZmVzdERhdGFcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5Ecml2ZXJUeXBlfSBEcml2ZXJUeXBlXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuL21hbmlmZXN0JykuTWFuaWZlc3R9IE1hbmlmZXN0XG4gKi9cblxuLyoqXG4gKiBAdGVtcGxhdGUgVFxuICogQHR5cGVkZWYge2ltcG9ydCgnYXBwaXVtL3R5cGVzJykuRXh0UmVjb3JkPFQ+fSBFeHRSZWNvcmRcbiAqL1xuXG4vKipcbiAqIEB0ZW1wbGF0ZSBUXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdhcHBpdW0vdHlwZXMnKS5FeHROYW1lPFQ+fSBFeHROYW1lXG4gKi9cblxuLyoqXG4gKiBSZXR1cm4gdmFsdWUgb2Yge0BsaW5rY29kZSBEcml2ZXJDb25maWcuZmluZE1hdGNoaW5nRHJpdmVyfVxuICogQHR5cGVkZWYgTWF0Y2hlZERyaXZlclxuICogQHByb3BlcnR5IHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5Ecml2ZXJDbGFzc30gZHJpdmVyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdmVyc2lvblxuICogQHByb3BlcnR5IHtzdHJpbmd9IGRyaXZlck5hbWVcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5DYXBhYmlsaXRpZXN9IENhcGFiaWxpdGllc1xuICovXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOzs7O0FBS08sTUFBTUEsWUFBTixTQUEyQkMsZ0NBQTNCLENBQTJDO0VBS2hEQyxvQkFBb0I7RUFZSCxPQUFWQyxVQUFVLEdBQUcsSUFBSUMsT0FBSixFQUFIOztFQU9qQkMsV0FBVyxDQUFDQyxRQUFELEVBQVc7SUFDcEIsTUFBTUMsc0JBQU4sRUFBbUJELFFBQW5CO0lBRUEsS0FBS0osb0JBQUwsR0FBNEIsSUFBSU0sR0FBSixFQUE1QjtFQUNEOztFQVNZLE9BQU5DLE1BQU0sQ0FBQ0gsUUFBRCxFQUFXO0lBQ3RCLE1BQU1JLFFBQVEsR0FBRyxJQUFJVixZQUFKLENBQWlCTSxRQUFqQixDQUFqQjs7SUFDQSxJQUFJTixZQUFZLENBQUNXLFdBQWIsQ0FBeUJMLFFBQXpCLENBQUosRUFBd0M7TUFDdEMsTUFBTSxJQUFJTSxLQUFKLENBQ0gsNkJBQTRCTixRQUFRLENBQUNPLFVBQVcsNkVBRDdD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
|
|
170
|
+
/**
|
|
171
|
+
* A mapping of {@link Manifest} instances to {@link DriverConfig} instances.
|
|
172
|
+
*
|
|
173
|
+
* `Manifest` and `ExtensionConfig` have a one-to-many relationship; each `Manifest` should be associated with a `DriverConfig` and a `PluginConfig`; no more, no less.
|
|
174
|
+
*
|
|
175
|
+
* This variable tracks the `Manifest`-to-`DriverConfig` portion.
|
|
176
|
+
*
|
|
177
|
+
* @type {WeakMap<Manifest,DriverConfig>}
|
|
178
|
+
* @private
|
|
179
|
+
*/
|
|
180
|
+
DriverConfig._instances = new WeakMap();
|
|
181
|
+
/**
|
|
182
|
+
* @template T
|
|
183
|
+
* @typedef {import('appium/types').ExtMetadata<T>} ExtMetadata
|
|
184
|
+
*/
|
|
185
|
+
/**
|
|
186
|
+
* @template T
|
|
187
|
+
* @typedef {import('appium/types').ExtManifest<T>} ExtManifest
|
|
188
|
+
*/
|
|
189
|
+
/**
|
|
190
|
+
* @typedef {import('appium/types').ManifestData} ManifestData
|
|
191
|
+
* @typedef {import('@appium/types').DriverType} DriverType
|
|
192
|
+
* @typedef {import('./manifest').Manifest} Manifest
|
|
193
|
+
*/
|
|
194
|
+
/**
|
|
195
|
+
* @template T
|
|
196
|
+
* @typedef {import('appium/types').ExtRecord<T>} ExtRecord
|
|
197
|
+
*/
|
|
198
|
+
/**
|
|
199
|
+
* @template T
|
|
200
|
+
* @typedef {import('appium/types').ExtName<T>} ExtName
|
|
201
|
+
*/
|
|
202
|
+
/**
|
|
203
|
+
* Return value of {@linkcode DriverConfig.findMatchingDriver}
|
|
204
|
+
* @typedef MatchedDriver
|
|
205
|
+
* @property {import('@appium/types').DriverClass} driver
|
|
206
|
+
* @property {string} version
|
|
207
|
+
* @property {string} driverName
|
|
208
|
+
*/
|
|
209
|
+
/**
|
|
210
|
+
* @typedef {import('@appium/types').Capabilities} Capabilities
|
|
211
|
+
*/
|
|
212
|
+
//# sourceMappingURL=driver-config.js.map
|