appium-uiautomator2-driver 2.10.2 → 2.11.1
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/CHANGELOG.md +14 -0
- package/README.md +10 -2
- package/build/lib/commands/alert.js +1 -3
- package/build/lib/commands/alert.js.map +1 -1
- package/build/lib/commands/battery.js +1 -3
- package/build/lib/commands/battery.js.map +1 -1
- package/build/lib/commands/find.js +1 -3
- package/build/lib/commands/find.js.map +1 -1
- package/build/lib/commands/general.js +1 -14
- package/build/lib/commands/general.js.map +1 -1
- package/build/lib/commands/gestures.js +1 -12
- package/build/lib/commands/gestures.js.map +1 -1
- package/build/lib/commands/index.js +2 -3
- package/build/lib/commands/index.js.map +1 -1
- package/build/lib/commands/viewport.js +1 -3
- package/build/lib/commands/viewport.js.map +1 -1
- package/build/lib/css-converter.js +1 -17
- package/build/lib/css-converter.js.map +1 -1
- package/build/lib/driver.js +4 -43
- package/build/lib/driver.js.map +1 -1
- package/build/lib/uiautomator2.js +1 -3
- package/build/lib/uiautomator2.js.map +1 -1
- package/npm-shrinkwrap.json +148 -279
- package/package.json +4 -3
package/CHANGELOG.md
CHANGED
|
@@ -1 +1,15 @@
|
|
|
1
|
+
## [2.11.1](https://github.com/appium/appium-uiautomator2-driver/compare/v2.11.0...v2.11.1) (2022-12-01)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Miscellaneous Chores
|
|
5
|
+
|
|
6
|
+
* update releaserc ([#566](https://github.com/appium/appium-uiautomator2-driver/issues/566)) ([ffb04bd](https://github.com/appium/appium-uiautomator2-driver/commit/ffb04bda088bb9b21e4b179c985245c1c72da577))
|
|
7
|
+
|
|
8
|
+
# [2.11.0](https://github.com/appium/appium-uiautomator2-driver/compare/v2.10.2...v2.11.0) (2022-11-30)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Features
|
|
12
|
+
|
|
13
|
+
* Add support of updated changePermissions args ([#565](https://github.com/appium/appium-uiautomator2-driver/issues/565)) ([df51a96](https://github.com/appium/appium-uiautomator2-driver/commit/df51a9610c4c33f99feaabe29793003063a26f95))
|
|
14
|
+
|
|
1
15
|
## [2.10.2](https://github.com/appium/appium-uiautomator2-driver/compare/v2.10.1...v2.10.2) (2022-11-06)
|
package/README.md
CHANGED
|
@@ -439,9 +439,10 @@ Changes package permissions in runtime.
|
|
|
439
439
|
|
|
440
440
|
Name | Type | Required | Description | Example
|
|
441
441
|
--- | --- | --- | --- | ---
|
|
442
|
-
permissions | string or Array<string> | yes | The full name of the permission to be changed or a list of permissions. Consider checking [the full list](https://developer.android.com/reference/android/Manifest.permission) of standard Android permission names. If `all` magic string is passed (available since driver version 2.8.0) then the chosen action is going to be applied to all permissions requested/granted by the 'appPackage'. | `['android.permission.ACCESS_FINE_LOCATION', 'android.permission.BROADCAST_SMS']` `all`
|
|
442
|
+
permissions | string or Array<string> | yes | The full name of the permission to be changed or a list of permissions. Consider checking [the full list](https://developer.android.com/reference/android/Manifest.permission) of standard Android permission names. If `all` magic string is passed (available since driver version 2.8.0) and `target` equals `pm` (the default value) then the chosen action is going to be applied to all permissions requested/granted by the 'appPackage'. If `target` is set to `appops` (available since v2.11.0) then check [AppOpsManager.java](https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/app/AppOpsManager.java) sources to get the full list of supported appops permission names for the given Android platform. The `all` magic string is unsupported for the `appops` target. | `['android.permission.ACCESS_FINE_LOCATION', 'android.permission.BROADCAST_SMS']` `all` `['READ_SMS', 'ACCESS_NOTIFICATIONS']`
|
|
443
443
|
appPackage | string | no | The application package to set change permissions on. Defaults to the package name under test | com.mycompany.myapp
|
|
444
|
-
action | string | no | Either `grant` (the default action) or `revoke` |
|
|
444
|
+
action | string | no | Either `grant` (the default action) or `revoke` if `target` is set to `pm`, otherwise one of: `allow` (default), `deny`, `ignore`, `default`. | allow
|
|
445
|
+
target | string | no | Either `pm` (default) or `appops` (available since v2.11.0). The `appops` one requires *adb_shell* server security option to be enabled | appops
|
|
445
446
|
|
|
446
447
|
### mobile: getPermissions
|
|
447
448
|
|
|
@@ -1207,6 +1208,13 @@ appium driver run uiautomator2 reset
|
|
|
1207
1208
|
|
|
1208
1209
|
in order to cleanup the cached UIA2 driver binaries from all connected devices on the current machine.
|
|
1209
1210
|
|
|
1211
|
+
### Socket Hangup Error
|
|
1212
|
+
|
|
1213
|
+
This type of error means the driver is unable to connect to the UiAutomator2 REST server, which is running on the device under test. There might be multiple causes to this issue:
|
|
1214
|
+
- The automation session gets unexpectedly deleted if your test code sends the `DELETE /session/<id>` request to the it, also the corresponding session and the server itself are terminated as a result. Sending further commands to the same server would create the error above because it is not listening anymore and must be newly started by the instrumentation first. Such issues usually happen if the session management is not configured properly in the your code, so one starts a new session while an existing one is still running and has not been quit properly, or there is a timeout while waiting for a new command. Fixing session management logic (e.g. make sure each session is being properly created in the test setup section and is terminated in the test teardown) or changing/disabling the commands timeout (check the [newCommandTimeout capability](#other)) might help to address such type of errors.
|
|
1215
|
+
- The server has been unexpectedly killed by Android OS itself. There might be several reasons to that. Usually fetching the [logcat](https://developer.android.com/studio/command-line/logcat) output and finding occurrences of `io.appium.uiautomator2.server` traces with `error` or `exception` label might help to figure out what happens. Sometimes it is necessary to turn off some internal phone optimizations, sometimes the server crashes because of an internal UiAutomator framework bug, sometimes because of a bug in the server code itself. Each case should be investigated separately if the search over the internet shows no matches…
|
|
1216
|
+
- The connectivity between the phone and the host is unstable. Nothing much to add on this one. Maybe the phone has a defect, or the USB cable is damaged, or the installed Android SDK is out of date…
|
|
1217
|
+
|
|
1210
1218
|
### Element(s) Cannot be Found
|
|
1211
1219
|
|
|
1212
1220
|
All element location strategies in UIA2 driver work similarly under the hood except of the xpath one.
|
|
@@ -13,14 +13,12 @@ exports.commands = commands;
|
|
|
13
13
|
commands.getAlertText = async function () {
|
|
14
14
|
return await this.uiautomator2.jwproxy.command('/alert/text', 'GET', {});
|
|
15
15
|
};
|
|
16
|
-
|
|
17
16
|
commands.mobileAcceptAlert = async function (opts = {}) {
|
|
18
17
|
return await this.uiautomator2.jwproxy.command('/alert/accept', 'POST', opts);
|
|
19
18
|
};
|
|
20
19
|
commands.postAcceptAlert = async function () {
|
|
21
20
|
return await this.mobileAcceptAlert();
|
|
22
21
|
};
|
|
23
|
-
|
|
24
22
|
commands.mobileDismissAlert = async function (opts = {}) {
|
|
25
23
|
return await this.uiautomator2.jwproxy.command('/alert/dismiss', 'POST', opts);
|
|
26
24
|
};
|
|
@@ -30,4 +28,4 @@ commands.postDismissAlert = async function () {
|
|
|
30
28
|
Object.assign(extensions, commands, helpers);
|
|
31
29
|
var _default = extensions;
|
|
32
30
|
exports.default = _default;
|
|
33
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb21tYW5kcyIsImhlbHBlcnMiLCJleHRlbnNpb25zIiwiZ2V0QWxlcnRUZXh0IiwidWlhdXRvbWF0b3IyIiwiandwcm94eSIsImNvbW1hbmQiLCJtb2JpbGVBY2NlcHRBbGVydCIsIm9wdHMiLCJwb3N0QWNjZXB0QWxlcnQiLCJtb2JpbGVEaXNtaXNzQWxlcnQiLCJwb3N0RGlzbWlzc0FsZXJ0IiwiT2JqZWN0IiwiYXNzaWduIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2NvbW1hbmRzL2FsZXJ0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImxldCBjb21tYW5kcyA9IHt9LCBoZWxwZXJzID0ge30sIGV4dGVuc2lvbnMgPSB7fTtcblxuY29tbWFuZHMuZ2V0QWxlcnRUZXh0ID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKCcvYWxlcnQvdGV4dCcsICdHRVQnLCB7fSk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEFjY2VwdEFsZXJ0T3B0aW9uc1xuICogQHByb3BlcnR5IHs/
|
|
31
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb21tYW5kcyIsImhlbHBlcnMiLCJleHRlbnNpb25zIiwiZ2V0QWxlcnRUZXh0IiwidWlhdXRvbWF0b3IyIiwiandwcm94eSIsImNvbW1hbmQiLCJtb2JpbGVBY2NlcHRBbGVydCIsIm9wdHMiLCJwb3N0QWNjZXB0QWxlcnQiLCJtb2JpbGVEaXNtaXNzQWxlcnQiLCJwb3N0RGlzbWlzc0FsZXJ0IiwiT2JqZWN0IiwiYXNzaWduIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2NvbW1hbmRzL2FsZXJ0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImxldCBjb21tYW5kcyA9IHt9LCBoZWxwZXJzID0ge30sIGV4dGVuc2lvbnMgPSB7fTtcblxuY29tbWFuZHMuZ2V0QWxlcnRUZXh0ID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKCcvYWxlcnQvdGV4dCcsICdHRVQnLCB7fSk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEFjY2VwdEFsZXJ0T3B0aW9uc1xuICogQHByb3BlcnR5IHs/c3RyaW5nfSBidXR0b25MYWJlbCAtIFRoZSBuYW1lIG9mIHRoZSBidXR0b24gdG8gY2xpY2sgaW4gb3JkZXIgdG9cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2NlcHQgdGhlIGFsZXJ0LiBJZiB0aGUgbmFtZSBpcyBub3QgcHJvdmlkZWRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVuIHRoZSBzY3JpcHQgd2lsbCB0cnkgdG8gZGV0ZWN0IHRoZSBidXR0b25cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvbWF0aWNhbGx5LlxuICovXG5cbi8qKlxuICogQHBhcmFtIHtBY2NlcHRBbGVydE9wdGlvbnN9IG9wdHNcbiAqIEB0aHJvd3Mge0ludmFsaWRFbGVtZW50U3RhdGVFcnJvcn0gSWYgbm8gbWF0Y2hpbmcgYnV0dG9uLCB0aGF0IGNhbiBhY2NlcHQgdGhlIGFsZXJ0LFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW4gYmUgZm91bmRcbiAqIEB0aHJvd3Mge05vQWxlcnRPcGVuRXJyb3J9IElmIG5vIGFsZXJ0IGlzIHByZXNlbnRcbiAqL1xuY29tbWFuZHMubW9iaWxlQWNjZXB0QWxlcnQgPSBhc3luYyBmdW5jdGlvbiAob3B0cyA9IHt9KSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9hbGVydC9hY2NlcHQnLCAnUE9TVCcsIG9wdHMpO1xufTtcblxuY29tbWFuZHMucG9zdEFjY2VwdEFsZXJ0ID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5tb2JpbGVBY2NlcHRBbGVydCgpO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBEaXNtaXNzQWxlcnRPcHRpb25zXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGJ1dHRvbkxhYmVsIC0gVGhlIG5hbWUgb2YgdGhlIGJ1dHRvbiB0byBjbGljayBpbiBvcmRlciB0b1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc21pc3MgdGhlIGFsZXJ0LiBJZiB0aGUgbmFtZSBpcyBub3QgcHJvdmlkZWRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVuIHRoZSBzY3JpcHQgd2lsbCB0cnkgdG8gZGV0ZWN0IHRoZSBidXR0b25cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvbWF0aWNhbGx5LlxuICovXG5cbi8qKlxuICogQHBhcmFtIHtEaXNtaXNzQWxlcnRPcHRpb25zfSBvcHRzXG4gKiBAdGhyb3dzIHtJbnZhbGlkRWxlbWVudFN0YXRlRXJyb3J9IElmIG5vIG1hdGNoaW5nIGJ1dHRvbiwgdGhhdCBjYW4gZGlzbWlzcyB0aGUgYWxlcnQsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbiBiZSBmb3VuZFxuICogQHRocm93cyB7Tm9BbGVydE9wZW5FcnJvcn0gSWYgbm8gYWxlcnQgaXMgcHJlc2VudFxuICovXG5jb21tYW5kcy5tb2JpbGVEaXNtaXNzQWxlcnQgPSBhc3luYyBmdW5jdGlvbiAob3B0cyA9IHt9KSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9hbGVydC9kaXNtaXNzJywgJ1BPU1QnLCBvcHRzKTtcbn07XG5cbmNvbW1hbmRzLnBvc3REaXNtaXNzQWxlcnQgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLm1vYmlsZURpc21pc3NBbGVydCgpO1xufTtcblxuT2JqZWN0LmFzc2lnbihleHRlbnNpb25zLCBjb21tYW5kcywgaGVscGVycyk7XG5leHBvcnQgeyBjb21tYW5kcywgaGVscGVycyB9O1xuZXhwb3J0IGRlZmF1bHQgZXh0ZW5zaW9ucztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBLElBQUlBLFFBQVEsR0FBRyxDQUFDLENBQUM7RUFBRUMsT0FBTyxHQUFHLENBQUMsQ0FBQztFQUFFQyxVQUFVLEdBQUcsQ0FBQyxDQUFDO0FBQUM7QUFBQTtBQUVqREYsUUFBUSxDQUFDRyxZQUFZLEdBQUcsa0JBQWtCO0VBQ3hDLE9BQU8sTUFBTSxJQUFJLENBQUNDLFlBQVksQ0FBQ0MsT0FBTyxDQUFDQyxPQUFPLENBQUMsYUFBYSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMxRSxDQUFDO0FBZ0JETixRQUFRLENBQUNPLGlCQUFpQixHQUFHLGdCQUFnQkMsSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFO0VBQ3RELE9BQU8sTUFBTSxJQUFJLENBQUNKLFlBQVksQ0FBQ0MsT0FBTyxDQUFDQyxPQUFPLENBQUMsZUFBZSxFQUFFLE1BQU0sRUFBRUUsSUFBSSxDQUFDO0FBQy9FLENBQUM7QUFFRFIsUUFBUSxDQUFDUyxlQUFlLEdBQUcsa0JBQWtCO0VBQzNDLE9BQU8sTUFBTSxJQUFJLENBQUNGLGlCQUFpQixFQUFFO0FBQ3ZDLENBQUM7QUFnQkRQLFFBQVEsQ0FBQ1Usa0JBQWtCLEdBQUcsZ0JBQWdCRixJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUU7RUFDdkQsT0FBTyxNQUFNLElBQUksQ0FBQ0osWUFBWSxDQUFDQyxPQUFPLENBQUNDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxNQUFNLEVBQUVFLElBQUksQ0FBQztBQUNoRixDQUFDO0FBRURSLFFBQVEsQ0FBQ1csZ0JBQWdCLEdBQUcsa0JBQWtCO0VBQzVDLE9BQU8sTUFBTSxJQUFJLENBQUNELGtCQUFrQixFQUFFO0FBQ3hDLENBQUM7QUFFREUsTUFBTSxDQUFDQyxNQUFNLENBQUNYLFVBQVUsRUFBRUYsUUFBUSxFQUFFQyxPQUFPLENBQUM7QUFBQyxlQUU5QkMsVUFBVTtBQUFBIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"alert.js","names":["commands","helpers","extensions","getAlertText","uiautomator2","jwproxy","command","mobileAcceptAlert","opts","postAcceptAlert","mobileDismissAlert","postDismissAlert","Object","assign"],"sources":["../../../lib/commands/alert.js"],"sourcesContent":["let commands = {}, helpers = {}, extensions = {};\n\ncommands.getAlertText = async function () {\n return await this.uiautomator2.jwproxy.command('/alert/text', 'GET', {});\n};\n\n/**\n * @typedef {Object} AcceptAlertOptions\n * @property {?string} buttonLabel - The name of the button to click in order to\n * accept the alert. If the name is not provided\n * then the script will try to detect the button\n * automatically.\n */\n\n/**\n * @param {AcceptAlertOptions} opts\n * @throws {InvalidElementStateError} If no matching button, that can accept the alert,\n * can be found\n * @throws {NoAlertOpenError} If no alert is present\n */\ncommands.mobileAcceptAlert = async function (opts = {}) {\n return await this.uiautomator2.jwproxy.command('/alert/accept', 'POST', opts);\n};\n\ncommands.postAcceptAlert = async function () {\n return await this.mobileAcceptAlert();\n};\n\n/**\n * @typedef {Object} DismissAlertOptions\n * @property {?string} buttonLabel - The name of the button to click in order to\n * dismiss the alert. If the name is not provided\n * then the script will try to detect the button\n * automatically.\n */\n\n/**\n * @param {DismissAlertOptions} opts\n * @throws {InvalidElementStateError} If no matching button, that can dismiss the alert,\n * can be found\n * @throws {NoAlertOpenError} If no alert is present\n */\ncommands.mobileDismissAlert = async function (opts = {}) {\n return await this.uiautomator2.jwproxy.command('/alert/dismiss', 'POST', opts);\n};\n\ncommands.postDismissAlert = async function () {\n return await this.mobileDismissAlert();\n};\n\nObject.assign(extensions, commands, helpers);\nexport { commands, helpers };\nexport default extensions;\n"],"mappings":";;;;;;;AAAA,IAAIA,QAAQ,GAAG,CAAC,CAAC;EAAEC,OAAO,GAAG,CAAC,CAAC;EAAEC,UAAU,GAAG,CAAC,CAAC;AAAC;AAAA;AAEjDF,QAAQ,CAACG,YAAY,GAAG,kBAAkB;EACxC,OAAO,MAAM,IAAI,CAACC,YAAY,CAACC,OAAO,CAACC,OAAO,CAAC,aAAa,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;AAC1E,CAAC
|
|
1
|
+
{"version":3,"file":"alert.js","names":["commands","helpers","extensions","getAlertText","uiautomator2","jwproxy","command","mobileAcceptAlert","opts","postAcceptAlert","mobileDismissAlert","postDismissAlert","Object","assign"],"sources":["../../../lib/commands/alert.js"],"sourcesContent":["let commands = {}, helpers = {}, extensions = {};\n\ncommands.getAlertText = async function () {\n return await this.uiautomator2.jwproxy.command('/alert/text', 'GET', {});\n};\n\n/**\n * @typedef {Object} AcceptAlertOptions\n * @property {?string} buttonLabel - The name of the button to click in order to\n * accept the alert. If the name is not provided\n * then the script will try to detect the button\n * automatically.\n */\n\n/**\n * @param {AcceptAlertOptions} opts\n * @throws {InvalidElementStateError} If no matching button, that can accept the alert,\n * can be found\n * @throws {NoAlertOpenError} If no alert is present\n */\ncommands.mobileAcceptAlert = async function (opts = {}) {\n return await this.uiautomator2.jwproxy.command('/alert/accept', 'POST', opts);\n};\n\ncommands.postAcceptAlert = async function () {\n return await this.mobileAcceptAlert();\n};\n\n/**\n * @typedef {Object} DismissAlertOptions\n * @property {?string} buttonLabel - The name of the button to click in order to\n * dismiss the alert. If the name is not provided\n * then the script will try to detect the button\n * automatically.\n */\n\n/**\n * @param {DismissAlertOptions} opts\n * @throws {InvalidElementStateError} If no matching button, that can dismiss the alert,\n * can be found\n * @throws {NoAlertOpenError} If no alert is present\n */\ncommands.mobileDismissAlert = async function (opts = {}) {\n return await this.uiautomator2.jwproxy.command('/alert/dismiss', 'POST', opts);\n};\n\ncommands.postDismissAlert = async function () {\n return await this.mobileDismissAlert();\n};\n\nObject.assign(extensions, commands, helpers);\nexport { commands, helpers };\nexport default extensions;\n"],"mappings":";;;;;;;AAAA,IAAIA,QAAQ,GAAG,CAAC,CAAC;EAAEC,OAAO,GAAG,CAAC,CAAC;EAAEC,UAAU,GAAG,CAAC,CAAC;AAAC;AAAA;AAEjDF,QAAQ,CAACG,YAAY,GAAG,kBAAkB;EACxC,OAAO,MAAM,IAAI,CAACC,YAAY,CAACC,OAAO,CAACC,OAAO,CAAC,aAAa,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;AAC1E,CAAC;AAgBDN,QAAQ,CAACO,iBAAiB,GAAG,gBAAgBC,IAAI,GAAG,CAAC,CAAC,EAAE;EACtD,OAAO,MAAM,IAAI,CAACJ,YAAY,CAACC,OAAO,CAACC,OAAO,CAAC,eAAe,EAAE,MAAM,EAAEE,IAAI,CAAC;AAC/E,CAAC;AAEDR,QAAQ,CAACS,eAAe,GAAG,kBAAkB;EAC3C,OAAO,MAAM,IAAI,CAACF,iBAAiB,EAAE;AACvC,CAAC;AAgBDP,QAAQ,CAACU,kBAAkB,GAAG,gBAAgBF,IAAI,GAAG,CAAC,CAAC,EAAE;EACvD,OAAO,MAAM,IAAI,CAACJ,YAAY,CAACC,OAAO,CAACC,OAAO,CAAC,gBAAgB,EAAE,MAAM,EAAEE,IAAI,CAAC;AAChF,CAAC;AAEDR,QAAQ,CAACW,gBAAgB,GAAG,kBAAkB;EAC5C,OAAO,MAAM,IAAI,CAACD,kBAAkB,EAAE;AACxC,CAAC;AAEDE,MAAM,CAACC,MAAM,CAACX,UAAU,EAAEF,QAAQ,EAAEC,OAAO,CAAC;AAAC,eAE9BC,UAAU;AAAA"}
|
|
@@ -7,9 +7,7 @@ exports.default = exports.commands = void 0;
|
|
|
7
7
|
require("source-map-support/register");
|
|
8
8
|
let extensions = {},
|
|
9
9
|
commands = {};
|
|
10
|
-
|
|
11
10
|
exports.commands = commands;
|
|
12
|
-
|
|
13
11
|
commands.mobileGetBatteryInfo = async function () {
|
|
14
12
|
const result = await this.uiautomator2.jwproxy.command('/appium/device/battery_info', 'GET', {});
|
|
15
13
|
result.state = result.status;
|
|
@@ -19,4 +17,4 @@ commands.mobileGetBatteryInfo = async function () {
|
|
|
19
17
|
Object.assign(extensions, commands);
|
|
20
18
|
var _default = extensions;
|
|
21
19
|
exports.default = _default;
|
|
22
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
20
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJleHRlbnNpb25zIiwiY29tbWFuZHMiLCJtb2JpbGVHZXRCYXR0ZXJ5SW5mbyIsInJlc3VsdCIsInVpYXV0b21hdG9yMiIsImp3cHJveHkiLCJjb21tYW5kIiwic3RhdGUiLCJzdGF0dXMiLCJPYmplY3QiLCJhc3NpZ24iXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvY29tbWFuZHMvYmF0dGVyeS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJsZXQgZXh0ZW5zaW9ucyA9IHt9LCBjb21tYW5kcyA9IHt9O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEJhdHRlcnlJbmZvXG4gKlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGxldmVsIC0gQmF0dGVyeSBsZXZlbCBpbiByYW5nZSBbMC4wLCAxLjBdLCB3aGVyZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgMS4wIG1lYW5zIDEwMCUgY2hhcmdlLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xIGlzIHJldHVybmVkIGlmIHRoZSBhY3R1YWwgdmFsdWUgY2Fubm90IGJlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRyaWV2ZWQgZnJvbSB0aGUgc3lzdGVtLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHN0YXRlIC0gQmF0dGVyeSBzdGF0ZS4gVGhlIGZvbGxvd2luZyB2YWx1ZXMgYXJlIHBvc3NpYmxlOlxuICogICBCQVRURVJZX1NUQVRVU19VTktOT1dOID0gMVxuICogICBCQVRURVJZX1NUQVRVU19DSEFSR0lORyA9IDJcbiAqICAgQkFUVEVSWV9TVEFUVVNfRElTQ0hBUkdJTkcgPSAzXG4gKiAgIEJBVFRFUllfU1RBVFVTX05PVF9DSEFSR0lORyA9IDRcbiAqICAgQkFUVEVSWV9TVEFUVVNfRlVMTCA9IDVcbiAqICAgLTEgaXMgcmV0dXJuZWQgaWYgdGhlIGFjdHVhbCB2YWx1ZSBjYW5ub3QgYmUgcmV0cmlldmVkIGZyb20gdGhlIHN5c3RlbS5cbiAqL1xuXG4vKipcbiAqIFJlYWRzIHRoZSBiYXR0ZXJ5IGluZm9ybWF0aW9uIGZyb20gdGhlIGRldmljZSB1bmRlciB0ZXN0LlxuICpcbiAqIEByZXR1cm5zIHtCYXR0ZXJ5SW5mb30gVGhlIGFjdHVhbCBiYXR0ZXJ5IGluZm9cbiAqL1xuY29tbWFuZHMubW9iaWxlR2V0QmF0dGVyeUluZm8gPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL2FwcGl1bS9kZXZpY2UvYmF0dGVyeV9pbmZvJywgJ0dFVCcsIHt9KTtcbiAgLy8gR2l2ZSBpdCB0aGUgc2FtZSBuYW1lIGFzIGluIGlPU1xuICByZXN1bHQuc3RhdGUgPSByZXN1bHQuc3RhdHVzO1xuICBkZWxldGUgcmVzdWx0LnN0YXR1cztcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbk9iamVjdC5hc3NpZ24oZXh0ZW5zaW9ucywgY29tbWFuZHMpO1xuZXhwb3J0IHsgY29tbWFuZHMgfTtcbmV4cG9ydCBkZWZhdWx0IGV4dGVuc2lvbnM7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQSxJQUFJQSxVQUFVLEdBQUcsQ0FBQyxDQUFDO0VBQUVDLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFBQztBQXVCbkNBLFFBQVEsQ0FBQ0Msb0JBQW9CLEdBQUcsa0JBQWtCO0VBQ2hELE1BQU1DLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQ0MsWUFBWSxDQUFDQyxPQUFPLENBQUNDLE9BQU8sQ0FBQyw2QkFBNkIsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7RUFFaEdILE1BQU0sQ0FBQ0ksS0FBSyxHQUFHSixNQUFNLENBQUNLLE1BQU07RUFDNUIsT0FBT0wsTUFBTSxDQUFDSyxNQUFNO0VBQ3BCLE9BQU9MLE1BQU07QUFDZixDQUFDO0FBRURNLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDVixVQUFVLEVBQUVDLFFBQVEsQ0FBQztBQUFDLGVBRXJCRCxVQUFVO0FBQUEifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"battery.js","names":["extensions","commands","mobileGetBatteryInfo","result","uiautomator2","jwproxy","command","state","status","Object","assign"],"sources":["../../../lib/commands/battery.js"],"sourcesContent":["let extensions = {}, commands = {};\n\n/**\n * @typedef {Object} BatteryInfo\n *\n * @property {number} level - Battery level in range [0.0, 1.0], where\n * 1.0 means 100% charge.\n * -1 is returned if the actual value cannot be\n * retrieved from the system.\n * @property {number} state - Battery state. The following values are possible:\n * BATTERY_STATUS_UNKNOWN = 1\n * BATTERY_STATUS_CHARGING = 2\n * BATTERY_STATUS_DISCHARGING = 3\n * BATTERY_STATUS_NOT_CHARGING = 4\n * BATTERY_STATUS_FULL = 5\n * -1 is returned if the actual value cannot be retrieved from the system.\n */\n\n/**\n * Reads the battery information from the device under test.\n *\n * @returns {BatteryInfo} The actual battery info\n */\ncommands.mobileGetBatteryInfo = async function () {\n const result = await this.uiautomator2.jwproxy.command('/appium/device/battery_info', 'GET', {});\n // Give it the same name as in iOS\n result.state = result.status;\n delete result.status;\n return result;\n};\n\nObject.assign(extensions, commands);\nexport { commands };\nexport default extensions;\n"],"mappings":";;;;;;;AAAA,IAAIA,UAAU,GAAG,CAAC,CAAC;EAAEC,QAAQ,GAAG,CAAC,CAAC
|
|
1
|
+
{"version":3,"file":"battery.js","names":["extensions","commands","mobileGetBatteryInfo","result","uiautomator2","jwproxy","command","state","status","Object","assign"],"sources":["../../../lib/commands/battery.js"],"sourcesContent":["let extensions = {}, commands = {};\n\n/**\n * @typedef {Object} BatteryInfo\n *\n * @property {number} level - Battery level in range [0.0, 1.0], where\n * 1.0 means 100% charge.\n * -1 is returned if the actual value cannot be\n * retrieved from the system.\n * @property {number} state - Battery state. The following values are possible:\n * BATTERY_STATUS_UNKNOWN = 1\n * BATTERY_STATUS_CHARGING = 2\n * BATTERY_STATUS_DISCHARGING = 3\n * BATTERY_STATUS_NOT_CHARGING = 4\n * BATTERY_STATUS_FULL = 5\n * -1 is returned if the actual value cannot be retrieved from the system.\n */\n\n/**\n * Reads the battery information from the device under test.\n *\n * @returns {BatteryInfo} The actual battery info\n */\ncommands.mobileGetBatteryInfo = async function () {\n const result = await this.uiautomator2.jwproxy.command('/appium/device/battery_info', 'GET', {});\n // Give it the same name as in iOS\n result.state = result.status;\n delete result.status;\n return result;\n};\n\nObject.assign(extensions, commands);\nexport { commands };\nexport default extensions;\n"],"mappings":";;;;;;;AAAA,IAAIA,UAAU,GAAG,CAAC,CAAC;EAAEC,QAAQ,GAAG,CAAC,CAAC;AAAC;AAuBnCA,QAAQ,CAACC,oBAAoB,GAAG,kBAAkB;EAChD,MAAMC,MAAM,GAAG,MAAM,IAAI,CAACC,YAAY,CAACC,OAAO,CAACC,OAAO,CAAC,6BAA6B,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;EAEhGH,MAAM,CAACI,KAAK,GAAGJ,MAAM,CAACK,MAAM;EAC5B,OAAOL,MAAM,CAACK,MAAM;EACpB,OAAOL,MAAM;AACf,CAAC;AAEDM,MAAM,CAACC,MAAM,CAACV,UAAU,EAAEC,QAAQ,CAAC;AAAC,eAErBD,UAAU;AAAA"}
|
|
@@ -8,12 +8,10 @@ exports.helpers = exports.default = void 0;
|
|
|
8
8
|
require("source-map-support/register");
|
|
9
9
|
var _cssConverter = _interopRequireDefault(require("../css-converter"));
|
|
10
10
|
const helpers = {};
|
|
11
|
-
|
|
12
11
|
exports.helpers = helpers;
|
|
13
12
|
const MAGIC_FIRST_VIS_CHILD_SEL = /\/\*\[@firstVisible ?= ?('|")true\1\]/;
|
|
14
13
|
const MAGIC_SCROLLABLE_SEL = /\/\/\*\[@scrollable ?= ?('|")true\1\]/;
|
|
15
14
|
const MAGIC_SCROLLABLE_BY = 'new UiSelector().scrollable(true)';
|
|
16
|
-
|
|
17
15
|
helpers.doFindElementOrEls = async function (params) {
|
|
18
16
|
if (params.strategy === 'xpath' && MAGIC_FIRST_VIS_CHILD_SEL.test(params.selector)) {
|
|
19
17
|
let elementId = params.context;
|
|
@@ -31,4 +29,4 @@ helpers.doFindElementOrEls = async function (params) {
|
|
|
31
29
|
};
|
|
32
30
|
var _default = helpers;
|
|
33
31
|
exports.default = _default;
|
|
34
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
32
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJoZWxwZXJzIiwiTUFHSUNfRklSU1RfVklTX0NISUxEX1NFTCIsIk1BR0lDX1NDUk9MTEFCTEVfU0VMIiwiTUFHSUNfU0NST0xMQUJMRV9CWSIsImRvRmluZEVsZW1lbnRPckVscyIsInBhcmFtcyIsInN0cmF0ZWd5IiwidGVzdCIsInNlbGVjdG9yIiwiZWxlbWVudElkIiwiY29udGV4dCIsInVpYXV0b21hdG9yMiIsImp3cHJveHkiLCJjb21tYW5kIiwiQ3NzQ29udmVydGVyIiwib3B0cyIsImFwcFBhY2thZ2UiLCJ0b1VpQXV0b21hdG9yU2VsZWN0b3IiLCJtdWx0aXBsZSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9jb21tYW5kcy9maW5kLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBDc3NDb252ZXJ0ZXIgZnJvbSAnLi4vY3NzLWNvbnZlcnRlcic7XG5cbmNvbnN0IGhlbHBlcnMgPSB7fTtcblxuLy8gd2Ugb3ZlcnJpZGUgdGhlIHhwYXRoIHNlYXJjaCBmb3IgdGhpcyBmaXJzdC12aXNpYmxlLWNoaWxkIHNlbGVjdG9yLCB3aGljaFxuLy8gbG9va3MgbGlrZSAvKltAZmlyc3RWaXNpYmxlPVwidHJ1ZVwiXVxuY29uc3QgTUFHSUNfRklSU1RfVklTX0NISUxEX1NFTCA9IC9cXC9cXCpcXFtAZmlyc3RWaXNpYmxlID89ID8oJ3xcIil0cnVlXFwxXFxdLztcblxuY29uc3QgTUFHSUNfU0NST0xMQUJMRV9TRUwgPSAvXFwvXFwvXFwqXFxbQHNjcm9sbGFibGUgPz0gPygnfFwiKXRydWVcXDFcXF0vO1xuY29uc3QgTUFHSUNfU0NST0xMQUJMRV9CWSA9ICduZXcgVWlTZWxlY3RvcigpLnNjcm9sbGFibGUodHJ1ZSknO1xuXG4vKipcbiAqIE92ZXJyaWRpbmcgaGVscGVycy5kb0ZpbmRFbGVtZW50T3JFbHMgZnVuY3Rpb25hbGl0eSBvZiBhcHBpdW0tYW5kcm9pZC1kcml2ZXIsXG4gKiB0aGlzLmVsZW1lbnQgaW5pdGlhbGl6ZWQgaW4gZmluZC5qcyBvZiBhcHBpdW0tYW5kcm9pZC1kcml2ZS5cbiAqL1xuaGVscGVycy5kb0ZpbmRFbGVtZW50T3JFbHMgPSBhc3luYyBmdW5jdGlvbiAocGFyYW1zKSB7XG4gIGlmIChwYXJhbXMuc3RyYXRlZ3kgPT09ICd4cGF0aCcgJiYgTUFHSUNfRklSU1RfVklTX0NISUxEX1NFTC50ZXN0KHBhcmFtcy5zZWxlY3RvcikpIHtcbiAgICBsZXQgZWxlbWVudElkID0gcGFyYW1zLmNvbnRleHQ7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZChgL2FwcGl1bS9lbGVtZW50LyR7ZWxlbWVudElkfS9maXJzdF92aXNpYmxlYCwgJ0dFVCcsIHt9KTtcbiAgfVxuICBpZiAocGFyYW1zLnN0cmF0ZWd5ID09PSAneHBhdGgnICYmIE1BR0lDX1NDUk9MTEFCTEVfU0VMLnRlc3QocGFyYW1zLnNlbGVjdG9yKSkge1xuICAgIHBhcmFtcy5zdHJhdGVneSA9ICctYW5kcm9pZCB1aWF1dG9tYXRvcic7XG4gICAgcGFyYW1zLnNlbGVjdG9yID0gTUFHSUNfU0NST0xMQUJMRV9CWTtcbiAgfVxuICBpZiAocGFyYW1zLnN0cmF0ZWd5ID09PSAnY3NzIHNlbGVjdG9yJykge1xuICAgIHBhcmFtcy5zdHJhdGVneSA9ICctYW5kcm9pZCB1aWF1dG9tYXRvcic7XG4gICAgcGFyYW1zLnNlbGVjdG9yID0gbmV3IENzc0NvbnZlcnRlcihwYXJhbXMuc2VsZWN0b3IsIHRoaXMub3B0cy5hcHBQYWNrYWdlKVxuICAgICAgLnRvVWlBdXRvbWF0b3JTZWxlY3RvcigpO1xuICB9XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoYC9lbGVtZW50JHtwYXJhbXMubXVsdGlwbGUgPyAncycgOiAnJ31gLCAnUE9TVCcsIHBhcmFtcyk7XG59O1xuXG5leHBvcnQgeyBoZWxwZXJzIH07XG5leHBvcnQgZGVmYXVsdCBoZWxwZXJzO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBO0FBRUEsTUFBTUEsT0FBTyxHQUFHLENBQUMsQ0FBQztBQUFDO0FBSW5CLE1BQU1DLHlCQUF5QixHQUFHLHVDQUF1QztBQUV6RSxNQUFNQyxvQkFBb0IsR0FBRyx1Q0FBdUM7QUFDcEUsTUFBTUMsbUJBQW1CLEdBQUcsbUNBQW1DO0FBTS9ESCxPQUFPLENBQUNJLGtCQUFrQixHQUFHLGdCQUFnQkMsTUFBTSxFQUFFO0VBQ25ELElBQUlBLE1BQU0sQ0FBQ0MsUUFBUSxLQUFLLE9BQU8sSUFBSUwseUJBQXlCLENBQUNNLElBQUksQ0FBQ0YsTUFBTSxDQUFDRyxRQUFRLENBQUMsRUFBRTtJQUNsRixJQUFJQyxTQUFTLEdBQUdKLE1BQU0sQ0FBQ0ssT0FBTztJQUM5QixPQUFPLE1BQU0sSUFBSSxDQUFDQyxZQUFZLENBQUNDLE9BQU8sQ0FBQ0MsT0FBTyxDQUFFLG1CQUFrQkosU0FBVSxnQkFBZSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztFQUN6RztFQUNBLElBQUlKLE1BQU0sQ0FBQ0MsUUFBUSxLQUFLLE9BQU8sSUFBSUosb0JBQW9CLENBQUNLLElBQUksQ0FBQ0YsTUFBTSxDQUFDRyxRQUFRLENBQUMsRUFBRTtJQUM3RUgsTUFBTSxDQUFDQyxRQUFRLEdBQUcsc0JBQXNCO0lBQ3hDRCxNQUFNLENBQUNHLFFBQVEsR0FBR0wsbUJBQW1CO0VBQ3ZDO0VBQ0EsSUFBSUUsTUFBTSxDQUFDQyxRQUFRLEtBQUssY0FBYyxFQUFFO0lBQ3RDRCxNQUFNLENBQUNDLFFBQVEsR0FBRyxzQkFBc0I7SUFDeENELE1BQU0sQ0FBQ0csUUFBUSxHQUFHLElBQUlNLHFCQUFZLENBQUNULE1BQU0sQ0FBQ0csUUFBUSxFQUFFLElBQUksQ0FBQ08sSUFBSSxDQUFDQyxVQUFVLENBQUMsQ0FDdEVDLHFCQUFxQixFQUFFO0VBQzVCO0VBQ0EsT0FBTyxNQUFNLElBQUksQ0FBQ04sWUFBWSxDQUFDQyxPQUFPLENBQUNDLE9BQU8sQ0FBRSxXQUFVUixNQUFNLENBQUNhLFFBQVEsR0FBRyxHQUFHLEdBQUcsRUFBRyxFQUFDLEVBQUUsTUFBTSxFQUFFYixNQUFNLENBQUM7QUFDekcsQ0FBQztBQUFDLGVBR2FMLE9BQU87QUFBQSJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"find.js","names":["helpers","MAGIC_FIRST_VIS_CHILD_SEL","MAGIC_SCROLLABLE_SEL","MAGIC_SCROLLABLE_BY","doFindElementOrEls","params","strategy","test","selector","elementId","context","uiautomator2","jwproxy","command","CssConverter","opts","appPackage","toUiAutomatorSelector","multiple"],"sources":["../../../lib/commands/find.js"],"sourcesContent":["import CssConverter from '../css-converter';\n\nconst helpers = {};\n\n// we override the xpath search for this first-visible-child selector, which\n// looks like /*[@firstVisible=\"true\"]\nconst MAGIC_FIRST_VIS_CHILD_SEL = /\\/\\*\\[@firstVisible ?= ?('|\")true\\1\\]/;\n\nconst MAGIC_SCROLLABLE_SEL = /\\/\\/\\*\\[@scrollable ?= ?('|\")true\\1\\]/;\nconst MAGIC_SCROLLABLE_BY = 'new UiSelector().scrollable(true)';\n\n/**\n * Overriding helpers.doFindElementOrEls functionality of appium-android-driver,\n * this.element initialized in find.js of appium-android-drive.\n */\nhelpers.doFindElementOrEls = async function (params) {\n if (params.strategy === 'xpath' && MAGIC_FIRST_VIS_CHILD_SEL.test(params.selector)) {\n let elementId = params.context;\n return await this.uiautomator2.jwproxy.command(`/appium/element/${elementId}/first_visible`, 'GET', {});\n }\n if (params.strategy === 'xpath' && MAGIC_SCROLLABLE_SEL.test(params.selector)) {\n params.strategy = '-android uiautomator';\n params.selector = MAGIC_SCROLLABLE_BY;\n }\n if (params.strategy === 'css selector') {\n params.strategy = '-android uiautomator';\n params.selector = new CssConverter(params.selector, this.opts.appPackage)\n .toUiAutomatorSelector();\n }\n return await this.uiautomator2.jwproxy.command(`/element${params.multiple ? 's' : ''}`, 'POST', params);\n};\n\nexport { helpers };\nexport default helpers;\n"],"mappings":";;;;;;;;AAAA;AAEA,MAAMA,OAAO,GAAG,CAAC,CAAC
|
|
1
|
+
{"version":3,"file":"find.js","names":["helpers","MAGIC_FIRST_VIS_CHILD_SEL","MAGIC_SCROLLABLE_SEL","MAGIC_SCROLLABLE_BY","doFindElementOrEls","params","strategy","test","selector","elementId","context","uiautomator2","jwproxy","command","CssConverter","opts","appPackage","toUiAutomatorSelector","multiple"],"sources":["../../../lib/commands/find.js"],"sourcesContent":["import CssConverter from '../css-converter';\n\nconst helpers = {};\n\n// we override the xpath search for this first-visible-child selector, which\n// looks like /*[@firstVisible=\"true\"]\nconst MAGIC_FIRST_VIS_CHILD_SEL = /\\/\\*\\[@firstVisible ?= ?('|\")true\\1\\]/;\n\nconst MAGIC_SCROLLABLE_SEL = /\\/\\/\\*\\[@scrollable ?= ?('|\")true\\1\\]/;\nconst MAGIC_SCROLLABLE_BY = 'new UiSelector().scrollable(true)';\n\n/**\n * Overriding helpers.doFindElementOrEls functionality of appium-android-driver,\n * this.element initialized in find.js of appium-android-drive.\n */\nhelpers.doFindElementOrEls = async function (params) {\n if (params.strategy === 'xpath' && MAGIC_FIRST_VIS_CHILD_SEL.test(params.selector)) {\n let elementId = params.context;\n return await this.uiautomator2.jwproxy.command(`/appium/element/${elementId}/first_visible`, 'GET', {});\n }\n if (params.strategy === 'xpath' && MAGIC_SCROLLABLE_SEL.test(params.selector)) {\n params.strategy = '-android uiautomator';\n params.selector = MAGIC_SCROLLABLE_BY;\n }\n if (params.strategy === 'css selector') {\n params.strategy = '-android uiautomator';\n params.selector = new CssConverter(params.selector, this.opts.appPackage)\n .toUiAutomatorSelector();\n }\n return await this.uiautomator2.jwproxy.command(`/element${params.multiple ? 's' : ''}`, 'POST', params);\n};\n\nexport { helpers };\nexport default helpers;\n"],"mappings":";;;;;;;;AAAA;AAEA,MAAMA,OAAO,GAAG,CAAC,CAAC;AAAC;AAInB,MAAMC,yBAAyB,GAAG,uCAAuC;AAEzE,MAAMC,oBAAoB,GAAG,uCAAuC;AACpE,MAAMC,mBAAmB,GAAG,mCAAmC;AAM/DH,OAAO,CAACI,kBAAkB,GAAG,gBAAgBC,MAAM,EAAE;EACnD,IAAIA,MAAM,CAACC,QAAQ,KAAK,OAAO,IAAIL,yBAAyB,CAACM,IAAI,CAACF,MAAM,CAACG,QAAQ,CAAC,EAAE;IAClF,IAAIC,SAAS,GAAGJ,MAAM,CAACK,OAAO;IAC9B,OAAO,MAAM,IAAI,CAACC,YAAY,CAACC,OAAO,CAACC,OAAO,CAAE,mBAAkBJ,SAAU,gBAAe,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;EACzG;EACA,IAAIJ,MAAM,CAACC,QAAQ,KAAK,OAAO,IAAIJ,oBAAoB,CAACK,IAAI,CAACF,MAAM,CAACG,QAAQ,CAAC,EAAE;IAC7EH,MAAM,CAACC,QAAQ,GAAG,sBAAsB;IACxCD,MAAM,CAACG,QAAQ,GAAGL,mBAAmB;EACvC;EACA,IAAIE,MAAM,CAACC,QAAQ,KAAK,cAAc,EAAE;IACtCD,MAAM,CAACC,QAAQ,GAAG,sBAAsB;IACxCD,MAAM,CAACG,QAAQ,GAAG,IAAIM,qBAAY,CAACT,MAAM,CAACG,QAAQ,EAAE,IAAI,CAACO,IAAI,CAACC,UAAU,CAAC,CACtEC,qBAAqB,EAAE;EAC5B;EACA,OAAO,MAAM,IAAI,CAACN,YAAY,CAACC,OAAO,CAACC,OAAO,CAAE,WAAUR,MAAM,CAACa,QAAQ,GAAG,GAAG,GAAG,EAAG,EAAC,EAAE,MAAM,EAAEb,MAAM,CAAC;AACzG,CAAC;AAAC,eAGaL,OAAO;AAAA"}
|
|
@@ -20,16 +20,13 @@ commands.getPageSource = async function () {
|
|
|
20
20
|
commands.getClipboard = async function () {
|
|
21
21
|
return (await this.adb.getApiLevel()) < 29 ? await this.uiautomator2.jwproxy.command('/appium/device/get_clipboard', 'POST', {}) : await this.adb.getClipboard();
|
|
22
22
|
};
|
|
23
|
-
|
|
24
23
|
commands.doSendKeys = async function (params) {
|
|
25
24
|
await this.uiautomator2.jwproxy.command('/keys', 'POST', params);
|
|
26
25
|
};
|
|
27
|
-
|
|
28
26
|
commands.keyevent = async function (keycode, metastate) {
|
|
29
27
|
this.log.debug(`Ignoring metastate ${metastate}`);
|
|
30
28
|
await this.adb.keyevent(keycode);
|
|
31
29
|
};
|
|
32
|
-
|
|
33
30
|
commands.back = async function () {
|
|
34
31
|
await this.adb.keyevent(4);
|
|
35
32
|
};
|
|
@@ -38,7 +35,6 @@ commands.getStrings = async function (language) {
|
|
|
38
35
|
language = await this.adb.getDeviceLanguage();
|
|
39
36
|
this.log.info(`No language specified, returning strings for: ${language}`);
|
|
40
37
|
}
|
|
41
|
-
|
|
42
38
|
const preprocessStringsMap = function (mapping) {
|
|
43
39
|
const result = {};
|
|
44
40
|
for (const [key, value] of _lodash.default.toPairs(mapping)) {
|
|
@@ -81,11 +77,9 @@ commands.getStrings = async function (language) {
|
|
|
81
77
|
commands.getDisplayDensity = async function getDisplayDensity() {
|
|
82
78
|
return await this.uiautomator2.jwproxy.command('/appium/device/display_density', 'GET', {});
|
|
83
79
|
};
|
|
84
|
-
|
|
85
80
|
commands.getWindowSize = async function () {
|
|
86
81
|
return await this.uiautomator2.jwproxy.command('/window/current/size', 'GET', {});
|
|
87
82
|
};
|
|
88
|
-
|
|
89
83
|
commands.getWindowRect = async function () {
|
|
90
84
|
const {
|
|
91
85
|
width,
|
|
@@ -163,14 +157,12 @@ extensions.executeMobile = async function (mobileCommand, opts = {}) {
|
|
|
163
157
|
commands.mobileViewportScreenshot = async function () {
|
|
164
158
|
return await this.getViewportScreenshot();
|
|
165
159
|
};
|
|
166
|
-
|
|
167
160
|
commands.mobileViewPortRect = async function mobileViewPortRect() {
|
|
168
161
|
return await this.getViewPortRect();
|
|
169
162
|
};
|
|
170
163
|
commands.setUrl = async function (url) {
|
|
171
164
|
await this.adb.startUri(url, this.opts.appPackage);
|
|
172
165
|
};
|
|
173
|
-
|
|
174
166
|
commands.mobileDeepLink = async function (opts = {}) {
|
|
175
167
|
const {
|
|
176
168
|
url,
|
|
@@ -198,22 +190,18 @@ commands.getSettings = async function () {
|
|
|
198
190
|
...serverSettings
|
|
199
191
|
};
|
|
200
192
|
};
|
|
201
|
-
|
|
202
193
|
helpers.wrapBootstrapDisconnect = async function (wrapped) {
|
|
203
194
|
await wrapped();
|
|
204
195
|
};
|
|
205
|
-
|
|
206
196
|
helpers.suspendChromedriverProxy = function () {
|
|
207
197
|
this.chromedriver = null;
|
|
208
198
|
this.proxyReqRes = this.uiautomator2.proxyReqRes.bind(this.uiautomator2);
|
|
209
199
|
this.proxyCommand = this.uiautomator2.proxyCommand.bind(this.uiautomator2);
|
|
210
200
|
this.jwpProxyActive = true;
|
|
211
201
|
};
|
|
212
|
-
|
|
213
202
|
commands.mobileGetDeviceInfo = async function () {
|
|
214
203
|
return await this.uiautomator2.jwproxy.command('/appium/device/info', 'GET');
|
|
215
204
|
};
|
|
216
|
-
|
|
217
205
|
commands.mobileType = async function mobileType(opts = {}) {
|
|
218
206
|
const {
|
|
219
207
|
text
|
|
@@ -223,7 +211,6 @@ commands.mobileType = async function mobileType(opts = {}) {
|
|
|
223
211
|
}
|
|
224
212
|
return await this.adb.typeUnicode(text);
|
|
225
213
|
};
|
|
226
|
-
|
|
227
214
|
commands.mobileInstallMultipleApks = async function (opts = {}) {
|
|
228
215
|
if (!_lodash.default.isArray(opts.apks) || _lodash.default.isEmpty(opts.apks)) {
|
|
229
216
|
throw new _driver.errors.InvalidArgumentError('No apks are given to install');
|
|
@@ -234,4 +221,4 @@ commands.mobileInstallMultipleApks = async function (opts = {}) {
|
|
|
234
221
|
Object.assign(extensions, commands, helpers);
|
|
235
222
|
var _default = extensions;
|
|
236
223
|
exports.default = _default;
|
|
237
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJleHRlbnNpb25zIiwiY29tbWFuZHMiLCJoZWxwZXJzIiwiZ2V0UGFnZVNvdXJjZSIsInVpYXV0b21hdG9yMiIsImp3cHJveHkiLCJjb21tYW5kIiwiZ2V0Q2xpcGJvYXJkIiwiYWRiIiwiZ2V0QXBpTGV2ZWwiLCJkb1NlbmRLZXlzIiwicGFyYW1zIiwia2V5ZXZlbnQiLCJrZXljb2RlIiwibWV0YXN0YXRlIiwibG9nIiwiZGVidWciLCJiYWNrIiwiZ2V0U3RyaW5ncyIsImxhbmd1YWdlIiwiZ2V0RGV2aWNlTGFuZ3VhZ2UiLCJpbmZvIiwicHJlcHJvY2Vzc1N0cmluZ3NNYXAiLCJtYXBwaW5nIiwicmVzdWx0Iiwia2V5IiwidmFsdWUiLCJfIiwidG9QYWlycyIsImlzU3RyaW5nIiwiSlNPTiIsInN0cmluZ2lmeSIsImFwa1N0cmluZ3MiLCJvcHRzIiwiYXBwIiwiYXBwUGFja2FnZSIsImVycm9yQW5kVGhyb3ciLCJ0bXBSb290IiwidGVtcERpciIsIm9wZW5EaXIiLCJwdWxsQXBrIiwiZXJyIiwibWVzc2FnZSIsImZzIiwiZXhpc3RzIiwiZXh0cmFjdFN0cmluZ3NGcm9tQXBrIiwicmltcmFmIiwiZ2V0RGlzcGxheURlbnNpdHkiLCJnZXRXaW5kb3dTaXplIiwiZ2V0V2luZG93UmVjdCIsIndpZHRoIiwiaGVpZ2h0IiwieCIsInkiLCJleGVjdXRlTW9iaWxlIiwibW9iaWxlQ29tbWFuZCIsIm1vYmlsZUNvbW1hbmRzTWFwcGluZyIsInNoZWxsIiwiZXhlY0VtdUNvbnNvbGVDb21tYW5kIiwiZHJhZ0dlc3R1cmUiLCJmbGluZ0dlc3R1cmUiLCJkb3VibGVDbGlja0dlc3R1cmUiLCJjbGlja0dlc3R1cmUiLCJsb25nQ2xpY2tHZXN0dXJlIiwicGluY2hDbG9zZUdlc3R1cmUiLCJwaW5jaE9wZW5HZXN0dXJlIiwic3dpcGVHZXN0dXJlIiwic2Nyb2xsR2VzdHVyZSIsInNjcm9sbEJhY2tUbyIsInNjcm9sbCIsInZpZXdwb3J0U2NyZWVuc2hvdCIsInZpZXdwb3J0UmVjdCIsImRlZXBMaW5rIiwic3RhcnRMb2dzQnJvYWRjYXN0Iiwic3RvcExvZ3NCcm9hZGNhc3QiLCJhY2NlcHRBbGVydCIsImRpc21pc3NBbGVydCIsImJhdHRlcnlJbmZvIiwiZGV2aWNlSW5mbyIsImdldERldmljZVRpbWUiLCJjaGFuZ2VQZXJtaXNzaW9ucyIsImdldFBlcm1pc3Npb25zIiwicGVyZm9ybUVkaXRvckFjdGlvbiIsInN0YXJ0U2NyZWVuU3RyZWFtaW5nIiwic3RvcFNjcmVlblN0cmVhbWluZyIsImdldE5vdGlmaWNhdGlvbnMiLCJsaXN0U21zIiwidHlwZSIsInNlbnNvclNldCIsInB1c2hGaWxlIiwicHVsbEZpbGUiLCJwdWxsRm9sZGVyIiwiZGVsZXRlRmlsZSIsImlzQXBwSW5zdGFsbGVkIiwicXVlcnlBcHBTdGF0ZSIsImFjdGl2YXRlQXBwIiwicmVtb3ZlQXBwIiwidGVybWluYXRlQXBwIiwiaW5zdGFsbEFwcCIsImNsZWFyQXBwIiwic3RhcnRBY3Rpdml0eSIsInN0YXJ0U2VydmljZSIsInN0b3BTZXJ2aWNlIiwiYnJvYWRjYXN0IiwiZ2V0Q29udGV4dHMiLCJpbnN0YWxsTXVsdGlwbGVBcGtzIiwidW5sb2NrIiwicmVmcmVzaEdwc0NhY2hlIiwic3RhcnRNZWRpYVByb2plY3Rpb25SZWNvcmRpbmciLCJpc01lZGlhUHJvamVjdGlvblJlY29yZGluZ1J1bm5pbmciLCJzdG9wTWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nIiwiaGFzIiwiZXJyb3JzIiwiVW5rbm93bkNvbW1hbmRFcnJvciIsImtleXMiLCJtb2JpbGVWaWV3cG9ydFNjcmVlbnNob3QiLCJnZXRWaWV3cG9ydFNjcmVlbnNob3QiLCJtb2JpbGVWaWV3UG9ydFJlY3QiLCJnZXRWaWV3UG9ydFJlY3QiLCJzZXRVcmwiLCJ1cmwiLCJzdGFydFVyaSIsIm1vYmlsZURlZXBMaW5rIiwicGFja2FnZSIsInBrZyIsIndhaXRGb3JMYXVuY2giLCJvcGVuTm90aWZpY2F0aW9ucyIsInVwZGF0ZVNldHRpbmdzIiwic2V0dGluZ3MiLCJ1cGRhdGUiLCJnZXRTZXR0aW5ncyIsImRyaXZlclNldHRpbmdzIiwic2VydmVyU2V0dGluZ3MiLCJ3cmFwQm9vdHN0cmFwRGlzY29ubmVjdCIsIndyYXBwZWQiLCJzdXNwZW5kQ2hyb21lZHJpdmVyUHJveHkiLCJjaHJvbWVkcml2ZXIiLCJwcm94eVJlcVJlcyIsImJpbmQiLCJwcm94eUNvbW1hbmQiLCJqd3BQcm94eUFjdGl2ZSIsIm1vYmlsZUdldERldmljZUluZm8iLCJtb2JpbGVUeXBlIiwidGV4dCIsImlzVW5kZWZpbmVkIiwidHlwZVVuaWNvZGUiLCJtb2JpbGVJbnN0YWxsTXVsdGlwbGVBcGtzIiwiaXNBcnJheSIsImFwa3MiLCJpc0VtcHR5IiwiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCJCIiwiYWxsIiwibWFwIiwiY29uZmlndXJlQXBwIiwiQVBLX0VYVEVOU0lPTiIsIm9wdGlvbnMiLCJPYmplY3QiLCJhc3NpZ24iXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvY29tbWFuZHMvZ2VuZXJhbC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IHsgZXJyb3JzIH0gZnJvbSAnYXBwaXVtL2RyaXZlcic7XG5pbXBvcnQgeyBmcywgdGVtcERpciB9IGZyb20gJ2FwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB7IEFQS19FWFRFTlNJT04gfSBmcm9tICcuLi9leHRlbnNpb25zJztcblxubGV0IGV4dGVuc2lvbnMgPSB7fSxcbiAgICBjb21tYW5kcyA9IHt9LFxuICAgIGhlbHBlcnMgPSB7fTtcblxuY29tbWFuZHMuZ2V0UGFnZVNvdXJjZSA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL3NvdXJjZScsICdHRVQnLCB7fSk7XG59O1xuXG5jb21tYW5kcy5nZXRDbGlwYm9hcmQgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAoYXdhaXQgdGhpcy5hZGIuZ2V0QXBpTGV2ZWwoKSA8IDI5KVxuICAgID8gKGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL2FwcGl1bS9kZXZpY2UvZ2V0X2NsaXBib2FyZCcsICdQT1NUJywge30pKVxuICAgIDogKGF3YWl0IHRoaXMuYWRiLmdldENsaXBib2FyZCgpKTtcbn07XG5cbi8vIE5lZWQgdG8gb3ZlcnJpZGUgdGhpcyBmb3IgY29ycmVjdCB1bmljb2RlIHN1cHBvcnRcbmNvbW1hbmRzLmRvU2VuZEtleXMgPSBhc3luYyBmdW5jdGlvbiAocGFyYW1zKSB7XG4gIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL2tleXMnLCAnUE9TVCcsIHBhcmFtcyk7XG59O1xuXG4vLyB1aWF1dG9tYXRvcjIgZG9lc24ndCBzdXBwb3J0IG1ldGFzdGF0ZSBmb3Iga2V5ZXZlbnRzXG5jb21tYW5kcy5rZXlldmVudCA9IGFzeW5jIGZ1bmN0aW9uIChrZXljb2RlLCBtZXRhc3RhdGUpIHtcbiAgdGhpcy5sb2cuZGVidWcoYElnbm9yaW5nIG1ldGFzdGF0ZSAke21ldGFzdGF0ZX1gKTtcbiAgYXdhaXQgdGhpcy5hZGIua2V5ZXZlbnQoa2V5Y29kZSk7XG59O1xuXG4vLyBVc2UgQURCIHNpbmNlIHdlIGRvbid0IGhhdmUgVWlBdXRvbWF0b3JcbmNvbW1hbmRzLmJhY2sgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIGF3YWl0IHRoaXMuYWRiLmtleWV2ZW50KDQpO1xufTtcblxuY29tbWFuZHMuZ2V0U3RyaW5ncyA9IGFzeW5jIGZ1bmN0aW9uIChsYW5ndWFnZSkge1xuICBpZiAoIWxhbmd1YWdlKSB7XG4gICAgbGFuZ3VhZ2UgPSBhd2FpdCB0aGlzLmFkYi5nZXREZXZpY2VMYW5ndWFnZSgpO1xuICAgIHRoaXMubG9nLmluZm8oYE5vIGxhbmd1YWdlIHNwZWNpZmllZCwgcmV0dXJuaW5nIHN0cmluZ3MgZm9yOiAke2xhbmd1YWdlfWApO1xuICB9XG5cbiAgLy8gQ2xpZW50cyByZXF1aXJlIHRoZSByZXN1bHRpbmcgbWFwcGluZyB0byBoYXZlIGJvdGgga2V5c1xuICAvLyBhbmQgdmFsdWVzIG9mIHR5cGUgc3RyaW5nXG4gIGNvbnN0IHByZXByb2Nlc3NTdHJpbmdzTWFwID0gZnVuY3Rpb24gKG1hcHBpbmcpIHtcbiAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBfLnRvUGFpcnMobWFwcGluZykpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gXy5pc1N0cmluZyh2YWx1ZSkgPyB2YWx1ZSA6IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICBpZiAodGhpcy5hcGtTdHJpbmdzW2xhbmd1YWdlXSkge1xuICAgIC8vIFJldHVybiBjYWNoZWQgc3RyaW5nc1xuICAgIHJldHVybiBwcmVwcm9jZXNzU3RyaW5nc01hcCh0aGlzLmFwa1N0cmluZ3NbbGFuZ3VhZ2VdKTtcbiAgfVxuXG4gIGlmICghdGhpcy5vcHRzLmFwcCAmJiAhdGhpcy5vcHRzLmFwcFBhY2thZ2UpIHtcbiAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KFwiT25lIG9mICdhcHAnIG9yICdhcHBQYWNrYWdlJyBjYXBhYmlsaXRpZXMgc2hvdWxkIG11c3QgYmUgc3BlY2lmaWVkXCIpO1xuICB9XG5cbiAgbGV0IGFwcCA9IHRoaXMub3B0cy5hcHA7XG4gIGNvbnN0IHRtcFJvb3QgPSBhd2FpdCB0ZW1wRGlyLm9wZW5EaXIoKTtcbiAgdHJ5IHtcbiAgICBpZiAoIWFwcCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXBwID0gYXdhaXQgdGhpcy5hZGIucHVsbEFwayh0aGlzLm9wdHMuYXBwUGFja2FnZSwgdG1wUm9vdCk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgRmFpbGVkIHRvIHB1bGwgYW4gYXBrIGZyb20gJyR7dGhpcy5vcHRzLmFwcFBhY2thZ2V9Jy4gT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFhd2FpdCBmcy5leGlzdHMoYXBwKSkge1xuICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgVGhlIGFwcCBhdCAnJHthcHB9JyBkb2VzIG5vdCBleGlzdGApO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCB7YXBrU3RyaW5nc30gPSBhd2FpdCB0aGlzLmFkYi5leHRyYWN0U3RyaW5nc0Zyb21BcGsoYXBwLCBsYW5ndWFnZSwgdG1wUm9vdCk7XG4gICAgICB0aGlzLmFwa1N0cmluZ3NbbGFuZ3VhZ2VdID0gYXBrU3RyaW5ncztcbiAgICAgIHJldHVybiBwcmVwcm9jZXNzU3RyaW5nc01hcChhcGtTdHJpbmdzKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coYENhbm5vdCBleHRyYWN0IHN0cmluZ3MgZnJvbSAnJHthcHB9Jy4gT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IGZzLnJpbXJhZih0bXBSb290KTtcbiAgfVxufTtcblxuY29tbWFuZHMuZ2V0RGlzcGxheURlbnNpdHkgPSBhc3luYyBmdW5jdGlvbiBnZXREaXNwbGF5RGVuc2l0eSAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9hcHBpdW0vZGV2aWNlL2Rpc3BsYXlfZGVuc2l0eScsICdHRVQnLCB7fSk7XG59O1xuXG4vLyBtZW1vaXplZCBpbiBjb25zdHJ1Y3RvclxuY29tbWFuZHMuZ2V0V2luZG93U2l6ZSA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL3dpbmRvdy9jdXJyZW50L3NpemUnLCAnR0VUJywge30pO1xufTtcblxuLy8gRm9yIFczQ1xuY29tbWFuZHMuZ2V0V2luZG93UmVjdCA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgY29uc3Qge3dpZHRoLCBoZWlnaHR9ID0gYXdhaXQgdGhpcy5nZXRXaW5kb3dTaXplKCk7XG4gIHJldHVybiB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgIHg6IDAsXG4gICAgeTogMCxcbiAgfTtcbn07XG5cbmV4dGVuc2lvbnMuZXhlY3V0ZU1vYmlsZSA9IGFzeW5jIGZ1bmN0aW9uIChtb2JpbGVDb21tYW5kLCBvcHRzID0ge30pIHtcbiAgY29uc3QgbW9iaWxlQ29tbWFuZHNNYXBwaW5nID0ge1xuICAgIHNoZWxsOiAnbW9iaWxlU2hlbGwnLFxuXG4gICAgZXhlY0VtdUNvbnNvbGVDb21tYW5kOiAnbW9iaWxlRXhlY0VtdUNvbnNvbGVDb21tYW5kJyxcblxuICAgIGRyYWdHZXN0dXJlOiAnbW9iaWxlRHJhZ0dlc3R1cmUnLFxuICAgIGZsaW5nR2VzdHVyZTogJ21vYmlsZUZsaW5nR2VzdHVyZScsXG4gICAgZG91YmxlQ2xpY2tHZXN0dXJlOiAnbW9iaWxlRG91YmxlQ2xpY2tHZXN0dXJlJyxcbiAgICBjbGlja0dlc3R1cmU6ICdtb2JpbGVDbGlja0dlc3R1cmUnLFxuICAgIGxvbmdDbGlja0dlc3R1cmU6ICdtb2JpbGVMb25nQ2xpY2tHZXN0dXJlJyxcbiAgICBwaW5jaENsb3NlR2VzdHVyZTogJ21vYmlsZVBpbmNoQ2xvc2VHZXN0dXJlJyxcbiAgICBwaW5jaE9wZW5HZXN0dXJlOiAnbW9iaWxlUGluY2hPcGVuR2VzdHVyZScsXG4gICAgc3dpcGVHZXN0dXJlOiAnbW9iaWxlU3dpcGVHZXN0dXJlJyxcbiAgICBzY3JvbGxHZXN0dXJlOiAnbW9iaWxlU2Nyb2xsR2VzdHVyZScsXG4gICAgc2Nyb2xsQmFja1RvOiAnbW9iaWxlU2Nyb2xsQmFja1RvJyxcbiAgICBzY3JvbGw6ICdtb2JpbGVTY3JvbGwnLFxuICAgIHZpZXdwb3J0U2NyZWVuc2hvdDogJ21vYmlsZVZpZXdwb3J0U2NyZWVuc2hvdCcsXG4gICAgdmlld3BvcnRSZWN0OiAnbW9iaWxlVmlld1BvcnRSZWN0JyxcblxuICAgIGRlZXBMaW5rOiAnbW9iaWxlRGVlcExpbmsnLFxuXG4gICAgc3RhcnRMb2dzQnJvYWRjYXN0OiAnbW9iaWxlU3RhcnRMb2dzQnJvYWRjYXN0JyxcbiAgICBzdG9wTG9nc0Jyb2FkY2FzdDogJ21vYmlsZVN0b3BMb2dzQnJvYWRjYXN0JyxcblxuICAgIGFjY2VwdEFsZXJ0OiAnbW9iaWxlQWNjZXB0QWxlcnQnLFxuICAgIGRpc21pc3NBbGVydDogJ21vYmlsZURpc21pc3NBbGVydCcsXG5cbiAgICBiYXR0ZXJ5SW5mbzogJ21vYmlsZUdldEJhdHRlcnlJbmZvJyxcblxuICAgIGRldmljZUluZm86ICdtb2JpbGVHZXREZXZpY2VJbmZvJyxcblxuICAgIGdldERldmljZVRpbWU6ICdtb2JpbGVHZXREZXZpY2VUaW1lJyxcblxuICAgIGNoYW5nZVBlcm1pc3Npb25zOiAnbW9iaWxlQ2hhbmdlUGVybWlzc2lvbnMnLFxuICAgIGdldFBlcm1pc3Npb25zOiAnbW9iaWxlR2V0UGVybWlzc2lvbnMnLFxuXG4gICAgcGVyZm9ybUVkaXRvckFjdGlvbjogJ21vYmlsZVBlcmZvcm1FZGl0b3JBY3Rpb24nLFxuXG4gICAgc3RhcnRTY3JlZW5TdHJlYW1pbmc6ICdtb2JpbGVTdGFydFNjcmVlblN0cmVhbWluZycsXG4gICAgc3RvcFNjcmVlblN0cmVhbWluZzogJ21vYmlsZVN0b3BTY3JlZW5TdHJlYW1pbmcnLFxuXG4gICAgZ2V0Tm90aWZpY2F0aW9uczogJ21vYmlsZUdldE5vdGlmaWNhdGlvbnMnLFxuXG4gICAgbGlzdFNtczogJ21vYmlsZUxpc3RTbXMnLFxuXG4gICAgdHlwZTogJ21vYmlsZVR5cGUnLFxuICAgIHNlbnNvclNldDogJ3NlbnNvclNldCcsXG5cbiAgICBwdXNoRmlsZTogJ21vYmlsZVB1c2hGaWxlJyxcbiAgICBwdWxsRmlsZTogJ21vYmlsZVB1bGxGaWxlJyxcbiAgICBwdWxsRm9sZGVyOiAnbW9iaWxlUHVsbEZvbGRlcicsXG4gICAgZGVsZXRlRmlsZTogJ21vYmlsZURlbGV0ZUZpbGUnLFxuXG4gICAgaXNBcHBJbnN0YWxsZWQ6ICdtb2JpbGVJc0FwcEluc3RhbGxlZCcsXG4gICAgcXVlcnlBcHBTdGF0ZTogJ21vYmlsZVF1ZXJ5QXBwU3RhdGUnLFxuICAgIGFjdGl2YXRlQXBwOiAnbW9iaWxlQWN0aXZhdGVBcHAnLFxuICAgIHJlbW92ZUFwcDogJ21vYmlsZVJlbW92ZUFwcCcsXG4gICAgdGVybWluYXRlQXBwOiAnbW9iaWxlVGVybWluYXRlQXBwJyxcbiAgICBpbnN0YWxsQXBwOiAnbW9iaWxlSW5zdGFsbEFwcCcsXG4gICAgY2xlYXJBcHA6ICdtb2JpbGVDbGVhckFwcCcsXG5cbiAgICBzdGFydEFjdGl2aXR5OiAnbW9iaWxlU3RhcnRBY3Rpdml0eScsXG4gICAgc3RhcnRTZXJ2aWNlOiAnbW9iaWxlU3RhcnRTZXJ2aWNlJyxcbiAgICBzdG9wU2VydmljZTogJ21vYmlsZVN0b3BTZXJ2aWNlJyxcbiAgICBicm9hZGNhc3Q6ICdtb2JpbGVCcm9hZGNhc3QnLFxuXG4gICAgZ2V0Q29udGV4dHM6ICdtb2JpbGVHZXRDb250ZXh0cycsXG5cbiAgICBpbnN0YWxsTXVsdGlwbGVBcGtzOiAnbW9iaWxlSW5zdGFsbE11bHRpcGxlQXBrcycsXG5cbiAgICB1bmxvY2s6ICdtb2JpbGVVbmxvY2snLFxuXG4gICAgcmVmcmVzaEdwc0NhY2hlOiAnbW9iaWxlUmVmcmVzaEdwc0NhY2hlJyxcblxuICAgIHN0YXJ0TWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nOiAnbW9iaWxlU3RhcnRNZWRpYVByb2plY3Rpb25SZWNvcmRpbmcnLFxuICAgIGlzTWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nUnVubmluZzogJ21vYmlsZUlzTWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nUnVubmluZycsXG4gICAgc3RvcE1lZGlhUHJvamVjdGlvblJlY29yZGluZzogJ21vYmlsZVN0b3BNZWRpYVByb2plY3Rpb25SZWNvcmRpbmcnLFxuICB9O1xuXG4gIGlmICghXy5oYXMobW9iaWxlQ29tbWFuZHNNYXBwaW5nLCBtb2JpbGVDb21tYW5kKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuVW5rbm93bkNvbW1hbmRFcnJvcihgVW5rbm93biBtb2JpbGUgY29tbWFuZCBcIiR7bW9iaWxlQ29tbWFuZH1cIi4gYCArXG4gICAgICBgT25seSAke18ua2V5cyhtb2JpbGVDb21tYW5kc01hcHBpbmcpfSBjb21tYW5kcyBhcmUgc3VwcG9ydGVkLmApO1xuICB9XG4gIHJldHVybiBhd2FpdCB0aGlzW21vYmlsZUNvbW1hbmRzTWFwcGluZ1ttb2JpbGVDb21tYW5kXV0ob3B0cyk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVWaWV3cG9ydFNjcmVlbnNob3QgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLmdldFZpZXdwb3J0U2NyZWVuc2hvdCgpO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBSZWN0YW5nbGVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBsZWZ0IC0gVGhlIGxlZnQgY29vcmRpbmF0ZSBvZiB0aGUgUmVjdGFuZ2xlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHRvcCAtIFRoZSB0b3AgY29vcmRpbmF0ZSBvZiB0aGUgUmVjdGFuZ2xlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHdpZHRoIC0gVGhlIHdpZHRoIG9mIFJlY3RhbmdsZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBoZWlnaHQgLSBUaGUgaGVpZ2h0IG9mIFJlY3RhbmdsZS5cbiAqL1xuXG4vKipcbiAqIFJldHVybnMgdGhlIHZpZXdwb3J0IGNvb3JkaW5hdGVzLlxuICogQHJldHVybnMge1JlY3RhbmdsZX0gVGhlIHZpZXdwb3J0IGNvb3JkaW5hdGVzLlxuICovXG5jb21tYW5kcy5tb2JpbGVWaWV3UG9ydFJlY3QgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVWaWV3UG9ydFJlY3QgKCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5nZXRWaWV3UG9ydFJlY3QoKTtcbn07XG5cbmNvbW1hbmRzLnNldFVybCA9IGFzeW5jIGZ1bmN0aW9uICh1cmwpIHtcbiAgYXdhaXQgdGhpcy5hZGIuc3RhcnRVcmkodXJsLCB0aGlzLm9wdHMuYXBwUGFja2FnZSk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IERlZXBMaW5rT3B0c1xuICogQHByb3BlcnR5IHshc3RyaW5nfSB1cmwgLSBUaGUgbmFtZSBvZiBVUkwgdG8gc3RhcnQuXG4gKiBAcHJvcGVydHkgeyFzdHJpbmd9IHBhY2thZ2UgLSBUaGUgbmFtZSBvZiB0aGUgcGFja2FnZSB0byBzdGFydCB0aGUgVVJJIHdpdGguXG4gKiBAcHJvcGVydHkgez9ib29sZWFufSB3YWl0Rm9yTGF1bmNoIFt0cnVlXSAtIGlmIGBmYWxzZWAgdGhlbiBhZGIgd29uJ3Qgd2FpdFxuICogZm9yIHRoZSBzdGFydGVkIGFjdGl2aXR5IHRvIHJldHVybiB0aGUgY29udHJvbFxuICovXG5cbi8qKlxuICogU3RhcnQgVVJMIHRoYXQgdGFrZSB1c2VycyBkaXJlY3RseSB0byBzcGVjaWZpYyBjb250ZW50IGluIHRoZSBhcHBcbiAqIEBwYXJhbSB7RGVlcExpbmtPcHRzfSBvcHRzXG4gKi9cbmNvbW1hbmRzLm1vYmlsZURlZXBMaW5rID0gYXN5bmMgZnVuY3Rpb24gKG9wdHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgdXJsLFxuICAgIHBhY2thZ2U6IHBrZyxcbiAgICB3YWl0Rm9yTGF1bmNoLFxuICB9ID0gb3B0cztcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYWRiLnN0YXJ0VXJpKHVybCwgcGtnLCB7IHdhaXRGb3JMYXVuY2ggfSk7XG59O1xuXG5jb21tYW5kcy5vcGVuTm90aWZpY2F0aW9ucyA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL2FwcGl1bS9kZXZpY2Uvb3Blbl9ub3RpZmljYXRpb25zJywgJ1BPU1QnLCB7fSk7XG59O1xuXG5jb21tYW5kcy51cGRhdGVTZXR0aW5ncyA9IGFzeW5jIGZ1bmN0aW9uIChzZXR0aW5ncykge1xuICBhd2FpdCB0aGlzLnNldHRpbmdzLnVwZGF0ZShzZXR0aW5ncyk7XG4gIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL2FwcGl1bS9zZXR0aW5ncycsICdQT1NUJywge3NldHRpbmdzfSk7XG59O1xuXG5jb21tYW5kcy5nZXRTZXR0aW5ncyA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgZHJpdmVyU2V0dGluZ3MgPSB0aGlzLnNldHRpbmdzLmdldFNldHRpbmdzKCk7XG4gIGNvbnN0IHNlcnZlclNldHRpbmdzID0gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKCcvYXBwaXVtL3NldHRpbmdzJywgJ0dFVCcpO1xuICByZXR1cm4gey4uLmRyaXZlclNldHRpbmdzLCAuLi5zZXJ2ZXJTZXR0aW5nc307XG59O1xuXG4vKipcbiAqIE92ZXJyaWRpbmcgYXBwaXVtLWFuZHJvaWQtZHJpdmVyJ3Mgd3JhcEJvb3RzdHJhcERpc2Nvbm5lY3QsXG4gKiB1bmxpa2UgaW4gYXBwaXVtLWFuZHJvaWQtZHJpdmVyIGF2b2lkaW5nIGFkYiByZXN0YXJ0aW5nIGFzIGl0IGludGVyblxuICoga2lsbHMgVWlBdXRvbWF0b3IyIHNlcnZlciBydW5uaW5nIGluIHRoZSBkZXZpY2UuXG4gKiovXG5oZWxwZXJzLndyYXBCb290c3RyYXBEaXNjb25uZWN0ID0gYXN5bmMgZnVuY3Rpb24gKHdyYXBwZWQpIHtcbiAgYXdhaXQgd3JhcHBlZCgpO1xufTtcblxuLy8gU3RvcCBwcm94eWluZyB0byBhbnkgQ2hyb21lZHJpdmVyIGFuZCByZWRpcmVjdCB0byB1aWF1dG9tYXRvcjJcbmhlbHBlcnMuc3VzcGVuZENocm9tZWRyaXZlclByb3h5ID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmNocm9tZWRyaXZlciA9IG51bGw7XG4gIHRoaXMucHJveHlSZXFSZXMgPSB0aGlzLnVpYXV0b21hdG9yMi5wcm94eVJlcVJlcy5iaW5kKHRoaXMudWlhdXRvbWF0b3IyKTtcbiAgdGhpcy5wcm94eUNvbW1hbmQgPSB0aGlzLnVpYXV0b21hdG9yMi5wcm94eUNvbW1hbmQuYmluZCh0aGlzLnVpYXV0b21hdG9yMik7XG4gIHRoaXMuandwUHJveHlBY3RpdmUgPSB0cnVlO1xufTtcblxuLyoqXG4gKiBUaGUgbGlzdCBvZiBhdmFpbGFibGUgaW5mbyBlbnRyaWVzIGNhbiBiZSBmb3VuZCBhdFxuICogaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0tdWlhdXRvbWF0b3IyLXNlcnZlci9ibG9iL21hc3Rlci9hcHAvc3JjL21haW4vamF2YS9pby9hcHBpdW0vdWlhdXRvbWF0b3IyL2hhbmRsZXIvR2V0RGV2aWNlSW5mby5qYXZhXG4gKi9cbmNvbW1hbmRzLm1vYmlsZUdldERldmljZUluZm8gPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9hcHBpdW0vZGV2aWNlL2luZm8nLCAnR0VUJyk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFR5cGluZ09wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7IXN0cmluZ3xudW1iZXJ8Ym9vbGVhbn0gdGV4dCAtIFRoZSB0ZXh0IHRvIHR5cGVcbiAqL1xuXG4vKipcbiAqIFR5cGVzIHRoZSBnaXZlbiBVbmljb2RlIHN0cmluZy5cbiAqIEl0IGlzIGV4cGVjdGVkIHRoYXQgdGhlIGZvY3VzIGlzIGFscmVhZHkgcHV0XG4gKiB0byB0aGUgZGVzdGluYXRpb24gaW5wdXQgZmllbGQgYmVmb3JlIHRoaXMgbWV0aG9kIGlzIGNhbGxlZC5cbiAqXG4gKiBAcGFyYW0ge1R5cGluZ09wdGlvbnN9IG9wdHNcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIGlucHV0IHRleHQgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHNlbnQgdG8gYWRiXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgYHRleHRgIHByb3BlcnR5IGhhcyBub3QgYmVlbiBwcm92aWRlZFxuICovXG5jb21tYW5kcy5tb2JpbGVUeXBlID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlVHlwZSAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICB0ZXh0LFxuICB9ID0gb3B0cztcbiAgaWYgKF8uaXNVbmRlZmluZWQodGV4dCkpIHtcbiAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGBUaGUgJ3RleHQnIGFyZ3VtZW50IGlzIG1hbmRhdG9yeWApO1xuICB9XG4gIHJldHVybiBhd2FpdCB0aGlzLmFkYi50eXBlVW5pY29kZSh0ZXh0KTtcbn07XG5cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBJbnN0YWxsT3B0aW9uc1xuICogQHByb3BlcnR5IHtib29sZWFufSBhbGxvd1Rlc3RQYWNrYWdlcyBbZmFsc2VdIC0gU2V0IHRvIHRydWUgaW4gb3JkZXIgdG8gYWxsb3cgdGVzdFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZXMgaW5zdGFsbGF0aW9uLlxuICogQHByb3BlcnR5IHtib29sZWFufSB1c2VTZGNhcmQgW2ZhbHNlXSAtIFNldCB0byB0cnVlIHRvIGluc3RhbGwgdGhlIGFwcCBvbiBzZGNhcmRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0ZWFkIG9mIHRoZSBkZXZpY2UgbWVtb3J5LlxuICogQHByb3BlcnR5IHtib29sZWFufSBncmFudFBlcm1pc3Npb25zIFtmYWxzZV0gLSBTZXQgdG8gdHJ1ZSBpbiBvcmRlciB0byBncmFudCBhbGwgdGhlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcm1pc3Npb25zIHJlcXVlc3RlZCBpbiB0aGUgYXBwbGljYXRpb24ncyBtYW5pZmVzdFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvbWF0aWNhbGx5IGFmdGVyIHRoZSBpbnN0YWxsYXRpb24gaXMgY29tcGxldGVkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVyIEFuZHJvaWQgNisuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHJlcGxhY2UgW3RydWVdIC0gU2V0IGl0IHRvIGZhbHNlIGlmIHlvdSBkb24ndCB3YW50XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGFwcGxpY2F0aW9uIHRvIGJlIHVwZ3JhZGVkL3JlaW5zdGFsbGVkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgaXQgaXMgYWxyZWFkeSBwcmVzZW50IG9uIHRoZSBkZXZpY2UuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHBhcnRpYWxJbnN0YWxsIFtmYWxzZV0gLSBJbnN0YWxsIGFwa3MgcGFydGlhbGx5LiBJdCBpcyB1c2VkIGZvciAnaW5zdGFsbC1tdWx0aXBsZScuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0dHBzOi8vYW5kcm9pZC5zdGFja2V4Y2hhbmdlLmNvbS9xdWVzdGlvbnMvMTExMDY0L3doYXQtaXMtYS1wYXJ0aWFsLWFwcGxpY2F0aW9uLWluc3RhbGwtdmlhLWFkYlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gSW5zdGFsbE11bHRpcGxlQXBrc09wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7QXJyYXk8c3RyaW5nPn0gYXBrcyAtIFRoZSBsaXN0IG9mIEFQS3MgdG8gaW5zdGFsbC4gRWFjaCBBUEsgc2hvdWxkIGJlIGEgcGF0aCB0byBhIGFwa1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgZG93bmxvYWRhYmxlIFVSTCBhcyBIVFRQL0hUVFBTLlxuICogQHByb3BlcnR5IHtJbnN0YWxsT3B0aW9uc30gb3B0aW9uc1xuICovXG5cbi8qKlxuICogSW5zdGFsbCBtdWx0aXBsZSBBUEtzIHdpdGggYGluc3RhbGwtbXVsdGlwbGVgIG9wdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0luc3RhbGxNdWx0aXBsZUFwa3NPcHRpb25zfSBvcHRzXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgYW4gZXJyb3Igb2NjdXJlZCB3aGlsZSBpbnN0YWxsaW5nIHRoZSBnaXZlbiBBUEtzLlxuICovXG5jb21tYW5kcy5tb2JpbGVJbnN0YWxsTXVsdGlwbGVBcGtzID0gYXN5bmMgZnVuY3Rpb24gKG9wdHMgPSB7fSkge1xuICBpZiAoIV8uaXNBcnJheShvcHRzLmFwa3MpIHx8IF8uaXNFbXB0eShvcHRzLmFwa3MpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQXJndW1lbnRFcnJvcignTm8gYXBrcyBhcmUgZ2l2ZW4gdG8gaW5zdGFsbCcpO1xuICB9XG4gIGNvbnN0IGFwa3MgPSBhd2FpdCBCLmFsbChvcHRzLmFwa3NcbiAgICAubWFwKChhcHApID0+IHRoaXMuaGVscGVycy5jb25maWd1cmVBcHAoYXBwLCBbQVBLX0VYVEVOU0lPTl0pKSk7XG4gIGF3YWl0IHRoaXMuYWRiLmluc3RhbGxNdWx0aXBsZUFwa3MoYXBrcywgb3B0cy5vcHRpb25zKTtcbn07XG5cbk9iamVjdC5hc3NpZ24oZXh0ZW5zaW9ucywgY29tbWFuZHMsIGhlbHBlcnMpO1xuXG5leHBvcnQgZGVmYXVsdCBleHRlbnNpb25zO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQSxJQUFJQSxVQUFVLEdBQUcsQ0FBQyxDQUFDO0VBQ2ZDLFFBQVEsR0FBRyxDQUFDLENBQUM7RUFDYkMsT0FBTyxHQUFHLENBQUMsQ0FBQztBQUVoQkQsUUFBUSxDQUFDRSxhQUFhLEdBQUcsa0JBQWtCO0VBQ3pDLE9BQU8sTUFBTSxJQUFJLENBQUNDLFlBQVksQ0FBQ0MsT0FBTyxDQUFDQyxPQUFPLENBQUMsU0FBUyxFQUFFLEtBQUss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
|
|
224
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJleHRlbnNpb25zIiwiY29tbWFuZHMiLCJoZWxwZXJzIiwiZ2V0UGFnZVNvdXJjZSIsInVpYXV0b21hdG9yMiIsImp3cHJveHkiLCJjb21tYW5kIiwiZ2V0Q2xpcGJvYXJkIiwiYWRiIiwiZ2V0QXBpTGV2ZWwiLCJkb1NlbmRLZXlzIiwicGFyYW1zIiwia2V5ZXZlbnQiLCJrZXljb2RlIiwibWV0YXN0YXRlIiwibG9nIiwiZGVidWciLCJiYWNrIiwiZ2V0U3RyaW5ncyIsImxhbmd1YWdlIiwiZ2V0RGV2aWNlTGFuZ3VhZ2UiLCJpbmZvIiwicHJlcHJvY2Vzc1N0cmluZ3NNYXAiLCJtYXBwaW5nIiwicmVzdWx0Iiwia2V5IiwidmFsdWUiLCJfIiwidG9QYWlycyIsImlzU3RyaW5nIiwiSlNPTiIsInN0cmluZ2lmeSIsImFwa1N0cmluZ3MiLCJvcHRzIiwiYXBwIiwiYXBwUGFja2FnZSIsImVycm9yQW5kVGhyb3ciLCJ0bXBSb290IiwidGVtcERpciIsIm9wZW5EaXIiLCJwdWxsQXBrIiwiZXJyIiwibWVzc2FnZSIsImZzIiwiZXhpc3RzIiwiZXh0cmFjdFN0cmluZ3NGcm9tQXBrIiwicmltcmFmIiwiZ2V0RGlzcGxheURlbnNpdHkiLCJnZXRXaW5kb3dTaXplIiwiZ2V0V2luZG93UmVjdCIsIndpZHRoIiwiaGVpZ2h0IiwieCIsInkiLCJleGVjdXRlTW9iaWxlIiwibW9iaWxlQ29tbWFuZCIsIm1vYmlsZUNvbW1hbmRzTWFwcGluZyIsInNoZWxsIiwiZXhlY0VtdUNvbnNvbGVDb21tYW5kIiwiZHJhZ0dlc3R1cmUiLCJmbGluZ0dlc3R1cmUiLCJkb3VibGVDbGlja0dlc3R1cmUiLCJjbGlja0dlc3R1cmUiLCJsb25nQ2xpY2tHZXN0dXJlIiwicGluY2hDbG9zZUdlc3R1cmUiLCJwaW5jaE9wZW5HZXN0dXJlIiwic3dpcGVHZXN0dXJlIiwic2Nyb2xsR2VzdHVyZSIsInNjcm9sbEJhY2tUbyIsInNjcm9sbCIsInZpZXdwb3J0U2NyZWVuc2hvdCIsInZpZXdwb3J0UmVjdCIsImRlZXBMaW5rIiwic3RhcnRMb2dzQnJvYWRjYXN0Iiwic3RvcExvZ3NCcm9hZGNhc3QiLCJhY2NlcHRBbGVydCIsImRpc21pc3NBbGVydCIsImJhdHRlcnlJbmZvIiwiZGV2aWNlSW5mbyIsImdldERldmljZVRpbWUiLCJjaGFuZ2VQZXJtaXNzaW9ucyIsImdldFBlcm1pc3Npb25zIiwicGVyZm9ybUVkaXRvckFjdGlvbiIsInN0YXJ0U2NyZWVuU3RyZWFtaW5nIiwic3RvcFNjcmVlblN0cmVhbWluZyIsImdldE5vdGlmaWNhdGlvbnMiLCJsaXN0U21zIiwidHlwZSIsInNlbnNvclNldCIsInB1c2hGaWxlIiwicHVsbEZpbGUiLCJwdWxsRm9sZGVyIiwiZGVsZXRlRmlsZSIsImlzQXBwSW5zdGFsbGVkIiwicXVlcnlBcHBTdGF0ZSIsImFjdGl2YXRlQXBwIiwicmVtb3ZlQXBwIiwidGVybWluYXRlQXBwIiwiaW5zdGFsbEFwcCIsImNsZWFyQXBwIiwic3RhcnRBY3Rpdml0eSIsInN0YXJ0U2VydmljZSIsInN0b3BTZXJ2aWNlIiwiYnJvYWRjYXN0IiwiZ2V0Q29udGV4dHMiLCJpbnN0YWxsTXVsdGlwbGVBcGtzIiwidW5sb2NrIiwicmVmcmVzaEdwc0NhY2hlIiwic3RhcnRNZWRpYVByb2plY3Rpb25SZWNvcmRpbmciLCJpc01lZGlhUHJvamVjdGlvblJlY29yZGluZ1J1bm5pbmciLCJzdG9wTWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nIiwiaGFzIiwiZXJyb3JzIiwiVW5rbm93bkNvbW1hbmRFcnJvciIsImtleXMiLCJtb2JpbGVWaWV3cG9ydFNjcmVlbnNob3QiLCJnZXRWaWV3cG9ydFNjcmVlbnNob3QiLCJtb2JpbGVWaWV3UG9ydFJlY3QiLCJnZXRWaWV3UG9ydFJlY3QiLCJzZXRVcmwiLCJ1cmwiLCJzdGFydFVyaSIsIm1vYmlsZURlZXBMaW5rIiwicGFja2FnZSIsInBrZyIsIndhaXRGb3JMYXVuY2giLCJvcGVuTm90aWZpY2F0aW9ucyIsInVwZGF0ZVNldHRpbmdzIiwic2V0dGluZ3MiLCJ1cGRhdGUiLCJnZXRTZXR0aW5ncyIsImRyaXZlclNldHRpbmdzIiwic2VydmVyU2V0dGluZ3MiLCJ3cmFwQm9vdHN0cmFwRGlzY29ubmVjdCIsIndyYXBwZWQiLCJzdXNwZW5kQ2hyb21lZHJpdmVyUHJveHkiLCJjaHJvbWVkcml2ZXIiLCJwcm94eVJlcVJlcyIsImJpbmQiLCJwcm94eUNvbW1hbmQiLCJqd3BQcm94eUFjdGl2ZSIsIm1vYmlsZUdldERldmljZUluZm8iLCJtb2JpbGVUeXBlIiwidGV4dCIsImlzVW5kZWZpbmVkIiwidHlwZVVuaWNvZGUiLCJtb2JpbGVJbnN0YWxsTXVsdGlwbGVBcGtzIiwiaXNBcnJheSIsImFwa3MiLCJpc0VtcHR5IiwiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCJCIiwiYWxsIiwibWFwIiwiY29uZmlndXJlQXBwIiwiQVBLX0VYVEVOU0lPTiIsIm9wdGlvbnMiLCJPYmplY3QiLCJhc3NpZ24iXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvY29tbWFuZHMvZ2VuZXJhbC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IHsgZXJyb3JzIH0gZnJvbSAnYXBwaXVtL2RyaXZlcic7XG5pbXBvcnQgeyBmcywgdGVtcERpciB9IGZyb20gJ2FwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB7IEFQS19FWFRFTlNJT04gfSBmcm9tICcuLi9leHRlbnNpb25zJztcblxubGV0IGV4dGVuc2lvbnMgPSB7fSxcbiAgICBjb21tYW5kcyA9IHt9LFxuICAgIGhlbHBlcnMgPSB7fTtcblxuY29tbWFuZHMuZ2V0UGFnZVNvdXJjZSA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL3NvdXJjZScsICdHRVQnLCB7fSk7XG59O1xuXG5jb21tYW5kcy5nZXRDbGlwYm9hcmQgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAoYXdhaXQgdGhpcy5hZGIuZ2V0QXBpTGV2ZWwoKSA8IDI5KVxuICAgID8gKGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL2FwcGl1bS9kZXZpY2UvZ2V0X2NsaXBib2FyZCcsICdQT1NUJywge30pKVxuICAgIDogKGF3YWl0IHRoaXMuYWRiLmdldENsaXBib2FyZCgpKTtcbn07XG5cbi8vIE5lZWQgdG8gb3ZlcnJpZGUgdGhpcyBmb3IgY29ycmVjdCB1bmljb2RlIHN1cHBvcnRcbmNvbW1hbmRzLmRvU2VuZEtleXMgPSBhc3luYyBmdW5jdGlvbiAocGFyYW1zKSB7XG4gIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL2tleXMnLCAnUE9TVCcsIHBhcmFtcyk7XG59O1xuXG4vLyB1aWF1dG9tYXRvcjIgZG9lc24ndCBzdXBwb3J0IG1ldGFzdGF0ZSBmb3Iga2V5ZXZlbnRzXG5jb21tYW5kcy5rZXlldmVudCA9IGFzeW5jIGZ1bmN0aW9uIChrZXljb2RlLCBtZXRhc3RhdGUpIHtcbiAgdGhpcy5sb2cuZGVidWcoYElnbm9yaW5nIG1ldGFzdGF0ZSAke21ldGFzdGF0ZX1gKTtcbiAgYXdhaXQgdGhpcy5hZGIua2V5ZXZlbnQoa2V5Y29kZSk7XG59O1xuXG4vLyBVc2UgQURCIHNpbmNlIHdlIGRvbid0IGhhdmUgVWlBdXRvbWF0b3JcbmNvbW1hbmRzLmJhY2sgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIGF3YWl0IHRoaXMuYWRiLmtleWV2ZW50KDQpO1xufTtcblxuY29tbWFuZHMuZ2V0U3RyaW5ncyA9IGFzeW5jIGZ1bmN0aW9uIChsYW5ndWFnZSkge1xuICBpZiAoIWxhbmd1YWdlKSB7XG4gICAgbGFuZ3VhZ2UgPSBhd2FpdCB0aGlzLmFkYi5nZXREZXZpY2VMYW5ndWFnZSgpO1xuICAgIHRoaXMubG9nLmluZm8oYE5vIGxhbmd1YWdlIHNwZWNpZmllZCwgcmV0dXJuaW5nIHN0cmluZ3MgZm9yOiAke2xhbmd1YWdlfWApO1xuICB9XG5cbiAgLy8gQ2xpZW50cyByZXF1aXJlIHRoZSByZXN1bHRpbmcgbWFwcGluZyB0byBoYXZlIGJvdGgga2V5c1xuICAvLyBhbmQgdmFsdWVzIG9mIHR5cGUgc3RyaW5nXG4gIGNvbnN0IHByZXByb2Nlc3NTdHJpbmdzTWFwID0gZnVuY3Rpb24gKG1hcHBpbmcpIHtcbiAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBfLnRvUGFpcnMobWFwcGluZykpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gXy5pc1N0cmluZyh2YWx1ZSkgPyB2YWx1ZSA6IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICBpZiAodGhpcy5hcGtTdHJpbmdzW2xhbmd1YWdlXSkge1xuICAgIC8vIFJldHVybiBjYWNoZWQgc3RyaW5nc1xuICAgIHJldHVybiBwcmVwcm9jZXNzU3RyaW5nc01hcCh0aGlzLmFwa1N0cmluZ3NbbGFuZ3VhZ2VdKTtcbiAgfVxuXG4gIGlmICghdGhpcy5vcHRzLmFwcCAmJiAhdGhpcy5vcHRzLmFwcFBhY2thZ2UpIHtcbiAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KFwiT25lIG9mICdhcHAnIG9yICdhcHBQYWNrYWdlJyBjYXBhYmlsaXRpZXMgc2hvdWxkIG11c3QgYmUgc3BlY2lmaWVkXCIpO1xuICB9XG5cbiAgbGV0IGFwcCA9IHRoaXMub3B0cy5hcHA7XG4gIGNvbnN0IHRtcFJvb3QgPSBhd2FpdCB0ZW1wRGlyLm9wZW5EaXIoKTtcbiAgdHJ5IHtcbiAgICBpZiAoIWFwcCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXBwID0gYXdhaXQgdGhpcy5hZGIucHVsbEFwayh0aGlzLm9wdHMuYXBwUGFja2FnZSwgdG1wUm9vdCk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgRmFpbGVkIHRvIHB1bGwgYW4gYXBrIGZyb20gJyR7dGhpcy5vcHRzLmFwcFBhY2thZ2V9Jy4gT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFhd2FpdCBmcy5leGlzdHMoYXBwKSkge1xuICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgVGhlIGFwcCBhdCAnJHthcHB9JyBkb2VzIG5vdCBleGlzdGApO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCB7YXBrU3RyaW5nc30gPSBhd2FpdCB0aGlzLmFkYi5leHRyYWN0U3RyaW5nc0Zyb21BcGsoYXBwLCBsYW5ndWFnZSwgdG1wUm9vdCk7XG4gICAgICB0aGlzLmFwa1N0cmluZ3NbbGFuZ3VhZ2VdID0gYXBrU3RyaW5ncztcbiAgICAgIHJldHVybiBwcmVwcm9jZXNzU3RyaW5nc01hcChhcGtTdHJpbmdzKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coYENhbm5vdCBleHRyYWN0IHN0cmluZ3MgZnJvbSAnJHthcHB9Jy4gT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IGZzLnJpbXJhZih0bXBSb290KTtcbiAgfVxufTtcblxuY29tbWFuZHMuZ2V0RGlzcGxheURlbnNpdHkgPSBhc3luYyBmdW5jdGlvbiBnZXREaXNwbGF5RGVuc2l0eSAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9hcHBpdW0vZGV2aWNlL2Rpc3BsYXlfZGVuc2l0eScsICdHRVQnLCB7fSk7XG59O1xuXG4vLyBtZW1vaXplZCBpbiBjb25zdHJ1Y3RvclxuY29tbWFuZHMuZ2V0V2luZG93U2l6ZSA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL3dpbmRvdy9jdXJyZW50L3NpemUnLCAnR0VUJywge30pO1xufTtcblxuLy8gRm9yIFczQ1xuY29tbWFuZHMuZ2V0V2luZG93UmVjdCA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgY29uc3Qge3dpZHRoLCBoZWlnaHR9ID0gYXdhaXQgdGhpcy5nZXRXaW5kb3dTaXplKCk7XG4gIHJldHVybiB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgIHg6IDAsXG4gICAgeTogMCxcbiAgfTtcbn07XG5cbmV4dGVuc2lvbnMuZXhlY3V0ZU1vYmlsZSA9IGFzeW5jIGZ1bmN0aW9uIChtb2JpbGVDb21tYW5kLCBvcHRzID0ge30pIHtcbiAgY29uc3QgbW9iaWxlQ29tbWFuZHNNYXBwaW5nID0ge1xuICAgIHNoZWxsOiAnbW9iaWxlU2hlbGwnLFxuXG4gICAgZXhlY0VtdUNvbnNvbGVDb21tYW5kOiAnbW9iaWxlRXhlY0VtdUNvbnNvbGVDb21tYW5kJyxcblxuICAgIGRyYWdHZXN0dXJlOiAnbW9iaWxlRHJhZ0dlc3R1cmUnLFxuICAgIGZsaW5nR2VzdHVyZTogJ21vYmlsZUZsaW5nR2VzdHVyZScsXG4gICAgZG91YmxlQ2xpY2tHZXN0dXJlOiAnbW9iaWxlRG91YmxlQ2xpY2tHZXN0dXJlJyxcbiAgICBjbGlja0dlc3R1cmU6ICdtb2JpbGVDbGlja0dlc3R1cmUnLFxuICAgIGxvbmdDbGlja0dlc3R1cmU6ICdtb2JpbGVMb25nQ2xpY2tHZXN0dXJlJyxcbiAgICBwaW5jaENsb3NlR2VzdHVyZTogJ21vYmlsZVBpbmNoQ2xvc2VHZXN0dXJlJyxcbiAgICBwaW5jaE9wZW5HZXN0dXJlOiAnbW9iaWxlUGluY2hPcGVuR2VzdHVyZScsXG4gICAgc3dpcGVHZXN0dXJlOiAnbW9iaWxlU3dpcGVHZXN0dXJlJyxcbiAgICBzY3JvbGxHZXN0dXJlOiAnbW9iaWxlU2Nyb2xsR2VzdHVyZScsXG4gICAgc2Nyb2xsQmFja1RvOiAnbW9iaWxlU2Nyb2xsQmFja1RvJyxcbiAgICBzY3JvbGw6ICdtb2JpbGVTY3JvbGwnLFxuICAgIHZpZXdwb3J0U2NyZWVuc2hvdDogJ21vYmlsZVZpZXdwb3J0U2NyZWVuc2hvdCcsXG4gICAgdmlld3BvcnRSZWN0OiAnbW9iaWxlVmlld1BvcnRSZWN0JyxcblxuICAgIGRlZXBMaW5rOiAnbW9iaWxlRGVlcExpbmsnLFxuXG4gICAgc3RhcnRMb2dzQnJvYWRjYXN0OiAnbW9iaWxlU3RhcnRMb2dzQnJvYWRjYXN0JyxcbiAgICBzdG9wTG9nc0Jyb2FkY2FzdDogJ21vYmlsZVN0b3BMb2dzQnJvYWRjYXN0JyxcblxuICAgIGFjY2VwdEFsZXJ0OiAnbW9iaWxlQWNjZXB0QWxlcnQnLFxuICAgIGRpc21pc3NBbGVydDogJ21vYmlsZURpc21pc3NBbGVydCcsXG5cbiAgICBiYXR0ZXJ5SW5mbzogJ21vYmlsZUdldEJhdHRlcnlJbmZvJyxcblxuICAgIGRldmljZUluZm86ICdtb2JpbGVHZXREZXZpY2VJbmZvJyxcblxuICAgIGdldERldmljZVRpbWU6ICdtb2JpbGVHZXREZXZpY2VUaW1lJyxcblxuICAgIGNoYW5nZVBlcm1pc3Npb25zOiAnbW9iaWxlQ2hhbmdlUGVybWlzc2lvbnMnLFxuICAgIGdldFBlcm1pc3Npb25zOiAnbW9iaWxlR2V0UGVybWlzc2lvbnMnLFxuXG4gICAgcGVyZm9ybUVkaXRvckFjdGlvbjogJ21vYmlsZVBlcmZvcm1FZGl0b3JBY3Rpb24nLFxuXG4gICAgc3RhcnRTY3JlZW5TdHJlYW1pbmc6ICdtb2JpbGVTdGFydFNjcmVlblN0cmVhbWluZycsXG4gICAgc3RvcFNjcmVlblN0cmVhbWluZzogJ21vYmlsZVN0b3BTY3JlZW5TdHJlYW1pbmcnLFxuXG4gICAgZ2V0Tm90aWZpY2F0aW9uczogJ21vYmlsZUdldE5vdGlmaWNhdGlvbnMnLFxuXG4gICAgbGlzdFNtczogJ21vYmlsZUxpc3RTbXMnLFxuXG4gICAgdHlwZTogJ21vYmlsZVR5cGUnLFxuICAgIHNlbnNvclNldDogJ3NlbnNvclNldCcsXG5cbiAgICBwdXNoRmlsZTogJ21vYmlsZVB1c2hGaWxlJyxcbiAgICBwdWxsRmlsZTogJ21vYmlsZVB1bGxGaWxlJyxcbiAgICBwdWxsRm9sZGVyOiAnbW9iaWxlUHVsbEZvbGRlcicsXG4gICAgZGVsZXRlRmlsZTogJ21vYmlsZURlbGV0ZUZpbGUnLFxuXG4gICAgaXNBcHBJbnN0YWxsZWQ6ICdtb2JpbGVJc0FwcEluc3RhbGxlZCcsXG4gICAgcXVlcnlBcHBTdGF0ZTogJ21vYmlsZVF1ZXJ5QXBwU3RhdGUnLFxuICAgIGFjdGl2YXRlQXBwOiAnbW9iaWxlQWN0aXZhdGVBcHAnLFxuICAgIHJlbW92ZUFwcDogJ21vYmlsZVJlbW92ZUFwcCcsXG4gICAgdGVybWluYXRlQXBwOiAnbW9iaWxlVGVybWluYXRlQXBwJyxcbiAgICBpbnN0YWxsQXBwOiAnbW9iaWxlSW5zdGFsbEFwcCcsXG4gICAgY2xlYXJBcHA6ICdtb2JpbGVDbGVhckFwcCcsXG5cbiAgICBzdGFydEFjdGl2aXR5OiAnbW9iaWxlU3RhcnRBY3Rpdml0eScsXG4gICAgc3RhcnRTZXJ2aWNlOiAnbW9iaWxlU3RhcnRTZXJ2aWNlJyxcbiAgICBzdG9wU2VydmljZTogJ21vYmlsZVN0b3BTZXJ2aWNlJyxcbiAgICBicm9hZGNhc3Q6ICdtb2JpbGVCcm9hZGNhc3QnLFxuXG4gICAgZ2V0Q29udGV4dHM6ICdtb2JpbGVHZXRDb250ZXh0cycsXG5cbiAgICBpbnN0YWxsTXVsdGlwbGVBcGtzOiAnbW9iaWxlSW5zdGFsbE11bHRpcGxlQXBrcycsXG5cbiAgICB1bmxvY2s6ICdtb2JpbGVVbmxvY2snLFxuXG4gICAgcmVmcmVzaEdwc0NhY2hlOiAnbW9iaWxlUmVmcmVzaEdwc0NhY2hlJyxcblxuICAgIHN0YXJ0TWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nOiAnbW9iaWxlU3RhcnRNZWRpYVByb2plY3Rpb25SZWNvcmRpbmcnLFxuICAgIGlzTWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nUnVubmluZzogJ21vYmlsZUlzTWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nUnVubmluZycsXG4gICAgc3RvcE1lZGlhUHJvamVjdGlvblJlY29yZGluZzogJ21vYmlsZVN0b3BNZWRpYVByb2plY3Rpb25SZWNvcmRpbmcnLFxuICB9O1xuXG4gIGlmICghXy5oYXMobW9iaWxlQ29tbWFuZHNNYXBwaW5nLCBtb2JpbGVDb21tYW5kKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuVW5rbm93bkNvbW1hbmRFcnJvcihgVW5rbm93biBtb2JpbGUgY29tbWFuZCBcIiR7bW9iaWxlQ29tbWFuZH1cIi4gYCArXG4gICAgICBgT25seSAke18ua2V5cyhtb2JpbGVDb21tYW5kc01hcHBpbmcpfSBjb21tYW5kcyBhcmUgc3VwcG9ydGVkLmApO1xuICB9XG4gIHJldHVybiBhd2FpdCB0aGlzW21vYmlsZUNvbW1hbmRzTWFwcGluZ1ttb2JpbGVDb21tYW5kXV0ob3B0cyk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVWaWV3cG9ydFNjcmVlbnNob3QgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLmdldFZpZXdwb3J0U2NyZWVuc2hvdCgpO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBSZWN0YW5nbGVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBsZWZ0IC0gVGhlIGxlZnQgY29vcmRpbmF0ZSBvZiB0aGUgUmVjdGFuZ2xlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHRvcCAtIFRoZSB0b3AgY29vcmRpbmF0ZSBvZiB0aGUgUmVjdGFuZ2xlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHdpZHRoIC0gVGhlIHdpZHRoIG9mIFJlY3RhbmdsZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBoZWlnaHQgLSBUaGUgaGVpZ2h0IG9mIFJlY3RhbmdsZS5cbiAqL1xuXG4vKipcbiAqIFJldHVybnMgdGhlIHZpZXdwb3J0IGNvb3JkaW5hdGVzLlxuICogQHJldHVybnMge1JlY3RhbmdsZX0gVGhlIHZpZXdwb3J0IGNvb3JkaW5hdGVzLlxuICovXG5jb21tYW5kcy5tb2JpbGVWaWV3UG9ydFJlY3QgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVWaWV3UG9ydFJlY3QgKCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5nZXRWaWV3UG9ydFJlY3QoKTtcbn07XG5cbmNvbW1hbmRzLnNldFVybCA9IGFzeW5jIGZ1bmN0aW9uICh1cmwpIHtcbiAgYXdhaXQgdGhpcy5hZGIuc3RhcnRVcmkodXJsLCB0aGlzLm9wdHMuYXBwUGFja2FnZSk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IERlZXBMaW5rT3B0c1xuICogQHByb3BlcnR5IHshc3RyaW5nfSB1cmwgLSBUaGUgbmFtZSBvZiBVUkwgdG8gc3RhcnQuXG4gKiBAcHJvcGVydHkgeyFzdHJpbmd9IHBhY2thZ2UgLSBUaGUgbmFtZSBvZiB0aGUgcGFja2FnZSB0byBzdGFydCB0aGUgVVJJIHdpdGguXG4gKiBAcHJvcGVydHkgez9ib29sZWFufSB3YWl0Rm9yTGF1bmNoIFt0cnVlXSAtIGlmIGBmYWxzZWAgdGhlbiBhZGIgd29uJ3Qgd2FpdFxuICogZm9yIHRoZSBzdGFydGVkIGFjdGl2aXR5IHRvIHJldHVybiB0aGUgY29udHJvbFxuICovXG5cbi8qKlxuICogU3RhcnQgVVJMIHRoYXQgdGFrZSB1c2VycyBkaXJlY3RseSB0byBzcGVjaWZpYyBjb250ZW50IGluIHRoZSBhcHBcbiAqIEBwYXJhbSB7RGVlcExpbmtPcHRzfSBvcHRzXG4gKi9cbmNvbW1hbmRzLm1vYmlsZURlZXBMaW5rID0gYXN5bmMgZnVuY3Rpb24gKG9wdHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgdXJsLFxuICAgIHBhY2thZ2U6IHBrZyxcbiAgICB3YWl0Rm9yTGF1bmNoLFxuICB9ID0gb3B0cztcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYWRiLnN0YXJ0VXJpKHVybCwgcGtnLCB7IHdhaXRGb3JMYXVuY2ggfSk7XG59O1xuXG5jb21tYW5kcy5vcGVuTm90aWZpY2F0aW9ucyA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL2FwcGl1bS9kZXZpY2Uvb3Blbl9ub3RpZmljYXRpb25zJywgJ1BPU1QnLCB7fSk7XG59O1xuXG5jb21tYW5kcy51cGRhdGVTZXR0aW5ncyA9IGFzeW5jIGZ1bmN0aW9uIChzZXR0aW5ncykge1xuICBhd2FpdCB0aGlzLnNldHRpbmdzLnVwZGF0ZShzZXR0aW5ncyk7XG4gIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL2FwcGl1bS9zZXR0aW5ncycsICdQT1NUJywge3NldHRpbmdzfSk7XG59O1xuXG5jb21tYW5kcy5nZXRTZXR0aW5ncyA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgZHJpdmVyU2V0dGluZ3MgPSB0aGlzLnNldHRpbmdzLmdldFNldHRpbmdzKCk7XG4gIGNvbnN0IHNlcnZlclNldHRpbmdzID0gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKCcvYXBwaXVtL3NldHRpbmdzJywgJ0dFVCcpO1xuICByZXR1cm4gey4uLmRyaXZlclNldHRpbmdzLCAuLi5zZXJ2ZXJTZXR0aW5nc307XG59O1xuXG4vKipcbiAqIE92ZXJyaWRpbmcgYXBwaXVtLWFuZHJvaWQtZHJpdmVyJ3Mgd3JhcEJvb3RzdHJhcERpc2Nvbm5lY3QsXG4gKiB1bmxpa2UgaW4gYXBwaXVtLWFuZHJvaWQtZHJpdmVyIGF2b2lkaW5nIGFkYiByZXN0YXJ0aW5nIGFzIGl0IGludGVyblxuICoga2lsbHMgVWlBdXRvbWF0b3IyIHNlcnZlciBydW5uaW5nIGluIHRoZSBkZXZpY2UuXG4gKiovXG5oZWxwZXJzLndyYXBCb290c3RyYXBEaXNjb25uZWN0ID0gYXN5bmMgZnVuY3Rpb24gKHdyYXBwZWQpIHtcbiAgYXdhaXQgd3JhcHBlZCgpO1xufTtcblxuLy8gU3RvcCBwcm94eWluZyB0byBhbnkgQ2hyb21lZHJpdmVyIGFuZCByZWRpcmVjdCB0byB1aWF1dG9tYXRvcjJcbmhlbHBlcnMuc3VzcGVuZENocm9tZWRyaXZlclByb3h5ID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmNocm9tZWRyaXZlciA9IG51bGw7XG4gIHRoaXMucHJveHlSZXFSZXMgPSB0aGlzLnVpYXV0b21hdG9yMi5wcm94eVJlcVJlcy5iaW5kKHRoaXMudWlhdXRvbWF0b3IyKTtcbiAgdGhpcy5wcm94eUNvbW1hbmQgPSB0aGlzLnVpYXV0b21hdG9yMi5wcm94eUNvbW1hbmQuYmluZCh0aGlzLnVpYXV0b21hdG9yMik7XG4gIHRoaXMuandwUHJveHlBY3RpdmUgPSB0cnVlO1xufTtcblxuLyoqXG4gKiBUaGUgbGlzdCBvZiBhdmFpbGFibGUgaW5mbyBlbnRyaWVzIGNhbiBiZSBmb3VuZCBhdFxuICogaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0tdWlhdXRvbWF0b3IyLXNlcnZlci9ibG9iL21hc3Rlci9hcHAvc3JjL21haW4vamF2YS9pby9hcHBpdW0vdWlhdXRvbWF0b3IyL2hhbmRsZXIvR2V0RGV2aWNlSW5mby5qYXZhXG4gKi9cbmNvbW1hbmRzLm1vYmlsZUdldERldmljZUluZm8gPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9hcHBpdW0vZGV2aWNlL2luZm8nLCAnR0VUJyk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFR5cGluZ09wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7IXN0cmluZ3xudW1iZXJ8Ym9vbGVhbn0gdGV4dCAtIFRoZSB0ZXh0IHRvIHR5cGVcbiAqL1xuXG4vKipcbiAqIFR5cGVzIHRoZSBnaXZlbiBVbmljb2RlIHN0cmluZy5cbiAqIEl0IGlzIGV4cGVjdGVkIHRoYXQgdGhlIGZvY3VzIGlzIGFscmVhZHkgcHV0XG4gKiB0byB0aGUgZGVzdGluYXRpb24gaW5wdXQgZmllbGQgYmVmb3JlIHRoaXMgbWV0aG9kIGlzIGNhbGxlZC5cbiAqXG4gKiBAcGFyYW0ge1R5cGluZ09wdGlvbnN9IG9wdHNcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIGlucHV0IHRleHQgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHNlbnQgdG8gYWRiXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgYHRleHRgIHByb3BlcnR5IGhhcyBub3QgYmVlbiBwcm92aWRlZFxuICovXG5jb21tYW5kcy5tb2JpbGVUeXBlID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlVHlwZSAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICB0ZXh0LFxuICB9ID0gb3B0cztcbiAgaWYgKF8uaXNVbmRlZmluZWQodGV4dCkpIHtcbiAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGBUaGUgJ3RleHQnIGFyZ3VtZW50IGlzIG1hbmRhdG9yeWApO1xuICB9XG4gIHJldHVybiBhd2FpdCB0aGlzLmFkYi50eXBlVW5pY29kZSh0ZXh0KTtcbn07XG5cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBJbnN0YWxsT3B0aW9uc1xuICogQHByb3BlcnR5IHtib29sZWFufSBhbGxvd1Rlc3RQYWNrYWdlcyBbZmFsc2VdIC0gU2V0IHRvIHRydWUgaW4gb3JkZXIgdG8gYWxsb3cgdGVzdFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZXMgaW5zdGFsbGF0aW9uLlxuICogQHByb3BlcnR5IHtib29sZWFufSB1c2VTZGNhcmQgW2ZhbHNlXSAtIFNldCB0byB0cnVlIHRvIGluc3RhbGwgdGhlIGFwcCBvbiBzZGNhcmRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0ZWFkIG9mIHRoZSBkZXZpY2UgbWVtb3J5LlxuICogQHByb3BlcnR5IHtib29sZWFufSBncmFudFBlcm1pc3Npb25zIFtmYWxzZV0gLSBTZXQgdG8gdHJ1ZSBpbiBvcmRlciB0byBncmFudCBhbGwgdGhlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcm1pc3Npb25zIHJlcXVlc3RlZCBpbiB0aGUgYXBwbGljYXRpb24ncyBtYW5pZmVzdFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvbWF0aWNhbGx5IGFmdGVyIHRoZSBpbnN0YWxsYXRpb24gaXMgY29tcGxldGVkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVyIEFuZHJvaWQgNisuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHJlcGxhY2UgW3RydWVdIC0gU2V0IGl0IHRvIGZhbHNlIGlmIHlvdSBkb24ndCB3YW50XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGFwcGxpY2F0aW9uIHRvIGJlIHVwZ3JhZGVkL3JlaW5zdGFsbGVkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgaXQgaXMgYWxyZWFkeSBwcmVzZW50IG9uIHRoZSBkZXZpY2UuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHBhcnRpYWxJbnN0YWxsIFtmYWxzZV0gLSBJbnN0YWxsIGFwa3MgcGFydGlhbGx5LiBJdCBpcyB1c2VkIGZvciAnaW5zdGFsbC1tdWx0aXBsZScuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0dHBzOi8vYW5kcm9pZC5zdGFja2V4Y2hhbmdlLmNvbS9xdWVzdGlvbnMvMTExMDY0L3doYXQtaXMtYS1wYXJ0aWFsLWFwcGxpY2F0aW9uLWluc3RhbGwtdmlhLWFkYlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gSW5zdGFsbE11bHRpcGxlQXBrc09wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7QXJyYXk8c3RyaW5nPn0gYXBrcyAtIFRoZSBsaXN0IG9mIEFQS3MgdG8gaW5zdGFsbC4gRWFjaCBBUEsgc2hvdWxkIGJlIGEgcGF0aCB0byBhIGFwa1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgZG93bmxvYWRhYmxlIFVSTCBhcyBIVFRQL0hUVFBTLlxuICogQHByb3BlcnR5IHtJbnN0YWxsT3B0aW9uc30gb3B0aW9uc1xuICovXG5cbi8qKlxuICogSW5zdGFsbCBtdWx0aXBsZSBBUEtzIHdpdGggYGluc3RhbGwtbXVsdGlwbGVgIG9wdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0luc3RhbGxNdWx0aXBsZUFwa3NPcHRpb25zfSBvcHRzXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgYW4gZXJyb3Igb2NjdXJlZCB3aGlsZSBpbnN0YWxsaW5nIHRoZSBnaXZlbiBBUEtzLlxuICovXG5jb21tYW5kcy5tb2JpbGVJbnN0YWxsTXVsdGlwbGVBcGtzID0gYXN5bmMgZnVuY3Rpb24gKG9wdHMgPSB7fSkge1xuICBpZiAoIV8uaXNBcnJheShvcHRzLmFwa3MpIHx8IF8uaXNFbXB0eShvcHRzLmFwa3MpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQXJndW1lbnRFcnJvcignTm8gYXBrcyBhcmUgZ2l2ZW4gdG8gaW5zdGFsbCcpO1xuICB9XG4gIGNvbnN0IGFwa3MgPSBhd2FpdCBCLmFsbChvcHRzLmFwa3NcbiAgICAubWFwKChhcHApID0+IHRoaXMuaGVscGVycy5jb25maWd1cmVBcHAoYXBwLCBbQVBLX0VYVEVOU0lPTl0pKSk7XG4gIGF3YWl0IHRoaXMuYWRiLmluc3RhbGxNdWx0aXBsZUFwa3MoYXBrcywgb3B0cy5vcHRpb25zKTtcbn07XG5cbk9iamVjdC5hc3NpZ24oZXh0ZW5zaW9ucywgY29tbWFuZHMsIGhlbHBlcnMpO1xuXG5leHBvcnQgZGVmYXVsdCBleHRlbnNpb25zO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQSxJQUFJQSxVQUFVLEdBQUcsQ0FBQyxDQUFDO0VBQ2ZDLFFBQVEsR0FBRyxDQUFDLENBQUM7RUFDYkMsT0FBTyxHQUFHLENBQUMsQ0FBQztBQUVoQkQsUUFBUSxDQUFDRSxhQUFhLEdBQUcsa0JBQWtCO0VBQ3pDLE9BQU8sTUFBTSxJQUFJLENBQUNDLFlBQVksQ0FBQ0MsT0FBTyxDQUFDQyxPQUFPLENBQUMsU0FBUyxFQUFFLEtBQUss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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"general.js","names":["extensions","commands","helpers","getPageSource","uiautomator2","jwproxy","command","getClipboard","adb","getApiLevel","doSendKeys","params","keyevent","keycode","metastate","log","debug","back","getStrings","language","getDeviceLanguage","info","preprocessStringsMap","mapping","result","key","value","_","toPairs","isString","JSON","stringify","apkStrings","opts","app","appPackage","errorAndThrow","tmpRoot","tempDir","openDir","pullApk","err","message","fs","exists","extractStringsFromApk","rimraf","getDisplayDensity","getWindowSize","getWindowRect","width","height","x","y","executeMobile","mobileCommand","mobileCommandsMapping","shell","execEmuConsoleCommand","dragGesture","flingGesture","doubleClickGesture","clickGesture","longClickGesture","pinchCloseGesture","pinchOpenGesture","swipeGesture","scrollGesture","scrollBackTo","scroll","viewportScreenshot","viewportRect","deepLink","startLogsBroadcast","stopLogsBroadcast","acceptAlert","dismissAlert","batteryInfo","deviceInfo","getDeviceTime","changePermissions","getPermissions","performEditorAction","startScreenStreaming","stopScreenStreaming","getNotifications","listSms","type","sensorSet","pushFile","pullFile","pullFolder","deleteFile","isAppInstalled","queryAppState","activateApp","removeApp","terminateApp","installApp","clearApp","startActivity","startService","stopService","broadcast","getContexts","installMultipleApks","unlock","refreshGpsCache","startMediaProjectionRecording","isMediaProjectionRecordingRunning","stopMediaProjectionRecording","has","errors","UnknownCommandError","keys","mobileViewportScreenshot","getViewportScreenshot","mobileViewPortRect","getViewPortRect","setUrl","url","startUri","mobileDeepLink","package","pkg","waitForLaunch","openNotifications","updateSettings","settings","update","getSettings","driverSettings","serverSettings","wrapBootstrapDisconnect","wrapped","suspendChromedriverProxy","chromedriver","proxyReqRes","bind","proxyCommand","jwpProxyActive","mobileGetDeviceInfo","mobileType","text","isUndefined","typeUnicode","mobileInstallMultipleApks","isArray","apks","isEmpty","InvalidArgumentError","B","all","map","configureApp","APK_EXTENSION","options","Object","assign"],"sources":["../../../lib/commands/general.js"],"sourcesContent":["import _ from 'lodash';\nimport B from 'bluebird';\nimport { errors } from 'appium/driver';\nimport { fs, tempDir } from 'appium/support';\nimport { APK_EXTENSION } from '../extensions';\n\nlet extensions = {},\n commands = {},\n helpers = {};\n\ncommands.getPageSource = async function () {\n return await this.uiautomator2.jwproxy.command('/source', 'GET', {});\n};\n\ncommands.getClipboard = async function () {\n return (await this.adb.getApiLevel() < 29)\n ? (await this.uiautomator2.jwproxy.command('/appium/device/get_clipboard', 'POST', {}))\n : (await this.adb.getClipboard());\n};\n\n// Need to override this for correct unicode support\ncommands.doSendKeys = async function (params) {\n await this.uiautomator2.jwproxy.command('/keys', 'POST', params);\n};\n\n// uiautomator2 doesn't support metastate for keyevents\ncommands.keyevent = async function (keycode, metastate) {\n this.log.debug(`Ignoring metastate ${metastate}`);\n await this.adb.keyevent(keycode);\n};\n\n// Use ADB since we don't have UiAutomator\ncommands.back = async function () {\n await this.adb.keyevent(4);\n};\n\ncommands.getStrings = async function (language) {\n if (!language) {\n language = await this.adb.getDeviceLanguage();\n this.log.info(`No language specified, returning strings for: ${language}`);\n }\n\n // Clients require the resulting mapping to have both keys\n // and values of type string\n const preprocessStringsMap = function (mapping) {\n const result = {};\n for (const [key, value] of _.toPairs(mapping)) {\n result[key] = _.isString(value) ? value : JSON.stringify(value);\n }\n return result;\n };\n\n if (this.apkStrings[language]) {\n // Return cached strings\n return preprocessStringsMap(this.apkStrings[language]);\n }\n\n if (!this.opts.app && !this.opts.appPackage) {\n this.log.errorAndThrow(\"One of 'app' or 'appPackage' capabilities should must be specified\");\n }\n\n let app = this.opts.app;\n const tmpRoot = await tempDir.openDir();\n try {\n if (!app) {\n try {\n app = await this.adb.pullApk(this.opts.appPackage, tmpRoot);\n } catch (err) {\n this.log.errorAndThrow(`Failed to pull an apk from '${this.opts.appPackage}'. Original error: ${err.message}`);\n }\n }\n\n if (!await fs.exists(app)) {\n this.log.errorAndThrow(`The app at '${app}' does not exist`);\n }\n\n try {\n const {apkStrings} = await this.adb.extractStringsFromApk(app, language, tmpRoot);\n this.apkStrings[language] = apkStrings;\n return preprocessStringsMap(apkStrings);\n } catch (err) {\n this.log.errorAndThrow(`Cannot extract strings from '${app}'. Original error: ${err.message}`);\n }\n } finally {\n await fs.rimraf(tmpRoot);\n }\n};\n\ncommands.getDisplayDensity = async function getDisplayDensity () {\n return await this.uiautomator2.jwproxy.command('/appium/device/display_density', 'GET', {});\n};\n\n// memoized in constructor\ncommands.getWindowSize = async function () {\n return await this.uiautomator2.jwproxy.command('/window/current/size', 'GET', {});\n};\n\n// For W3C\ncommands.getWindowRect = async function () {\n const {width, height} = await this.getWindowSize();\n return {\n width,\n height,\n x: 0,\n y: 0,\n };\n};\n\nextensions.executeMobile = async function (mobileCommand, opts = {}) {\n const mobileCommandsMapping = {\n shell: 'mobileShell',\n\n execEmuConsoleCommand: 'mobileExecEmuConsoleCommand',\n\n dragGesture: 'mobileDragGesture',\n flingGesture: 'mobileFlingGesture',\n doubleClickGesture: 'mobileDoubleClickGesture',\n clickGesture: 'mobileClickGesture',\n longClickGesture: 'mobileLongClickGesture',\n pinchCloseGesture: 'mobilePinchCloseGesture',\n pinchOpenGesture: 'mobilePinchOpenGesture',\n swipeGesture: 'mobileSwipeGesture',\n scrollGesture: 'mobileScrollGesture',\n scrollBackTo: 'mobileScrollBackTo',\n scroll: 'mobileScroll',\n viewportScreenshot: 'mobileViewportScreenshot',\n viewportRect: 'mobileViewPortRect',\n\n deepLink: 'mobileDeepLink',\n\n startLogsBroadcast: 'mobileStartLogsBroadcast',\n stopLogsBroadcast: 'mobileStopLogsBroadcast',\n\n acceptAlert: 'mobileAcceptAlert',\n dismissAlert: 'mobileDismissAlert',\n\n batteryInfo: 'mobileGetBatteryInfo',\n\n deviceInfo: 'mobileGetDeviceInfo',\n\n getDeviceTime: 'mobileGetDeviceTime',\n\n changePermissions: 'mobileChangePermissions',\n getPermissions: 'mobileGetPermissions',\n\n performEditorAction: 'mobilePerformEditorAction',\n\n startScreenStreaming: 'mobileStartScreenStreaming',\n stopScreenStreaming: 'mobileStopScreenStreaming',\n\n getNotifications: 'mobileGetNotifications',\n\n listSms: 'mobileListSms',\n\n type: 'mobileType',\n sensorSet: 'sensorSet',\n\n pushFile: 'mobilePushFile',\n pullFile: 'mobilePullFile',\n pullFolder: 'mobilePullFolder',\n deleteFile: 'mobileDeleteFile',\n\n isAppInstalled: 'mobileIsAppInstalled',\n queryAppState: 'mobileQueryAppState',\n activateApp: 'mobileActivateApp',\n removeApp: 'mobileRemoveApp',\n terminateApp: 'mobileTerminateApp',\n installApp: 'mobileInstallApp',\n clearApp: 'mobileClearApp',\n\n startActivity: 'mobileStartActivity',\n startService: 'mobileStartService',\n stopService: 'mobileStopService',\n broadcast: 'mobileBroadcast',\n\n getContexts: 'mobileGetContexts',\n\n installMultipleApks: 'mobileInstallMultipleApks',\n\n unlock: 'mobileUnlock',\n\n refreshGpsCache: 'mobileRefreshGpsCache',\n\n startMediaProjectionRecording: 'mobileStartMediaProjectionRecording',\n isMediaProjectionRecordingRunning: 'mobileIsMediaProjectionRecordingRunning',\n stopMediaProjectionRecording: 'mobileStopMediaProjectionRecording',\n };\n\n if (!_.has(mobileCommandsMapping, mobileCommand)) {\n throw new errors.UnknownCommandError(`Unknown mobile command \"${mobileCommand}\". ` +\n `Only ${_.keys(mobileCommandsMapping)} commands are supported.`);\n }\n return await this[mobileCommandsMapping[mobileCommand]](opts);\n};\n\ncommands.mobileViewportScreenshot = async function () {\n return await this.getViewportScreenshot();\n};\n\n/**\n * @typedef {object} Rectangle\n * @property {number} left - The left coordinate of the Rectangle.\n * @property {number} top - The top coordinate of the Rectangle.\n * @property {number} width - The width of Rectangle.\n * @property {number} height - The height of Rectangle.\n */\n\n/**\n * Returns the viewport coordinates.\n * @returns {Rectangle} The viewport coordinates.\n */\ncommands.mobileViewPortRect = async function mobileViewPortRect () {\n return await this.getViewPortRect();\n};\n\ncommands.setUrl = async function (url) {\n await this.adb.startUri(url, this.opts.appPackage);\n};\n\n/**\n * @typedef {object} DeepLinkOpts\n * @property {!string} url - The name of URL to start.\n * @property {!string} package - The name of the package to start the URI with.\n * @property {?boolean} waitForLaunch [true] - if `false` then adb won't wait\n * for the started activity to return the control\n */\n\n/**\n * Start URL that take users directly to specific content in the app\n * @param {DeepLinkOpts} opts\n */\ncommands.mobileDeepLink = async function (opts = {}) {\n const {\n url,\n package: pkg,\n waitForLaunch,\n } = opts;\n return await this.adb.startUri(url, pkg, { waitForLaunch });\n};\n\ncommands.openNotifications = async function () {\n return await this.uiautomator2.jwproxy.command('/appium/device/open_notifications', 'POST', {});\n};\n\ncommands.updateSettings = async function (settings) {\n await this.settings.update(settings);\n await this.uiautomator2.jwproxy.command('/appium/settings', 'POST', {settings});\n};\n\ncommands.getSettings = async function () {\n const driverSettings = this.settings.getSettings();\n const serverSettings = await this.uiautomator2.jwproxy.command('/appium/settings', 'GET');\n return {...driverSettings, ...serverSettings};\n};\n\n/**\n * Overriding appium-android-driver's wrapBootstrapDisconnect,\n * unlike in appium-android-driver avoiding adb restarting as it intern\n * kills UiAutomator2 server running in the device.\n **/\nhelpers.wrapBootstrapDisconnect = async function (wrapped) {\n await wrapped();\n};\n\n// Stop proxying to any Chromedriver and redirect to uiautomator2\nhelpers.suspendChromedriverProxy = function () {\n this.chromedriver = null;\n this.proxyReqRes = this.uiautomator2.proxyReqRes.bind(this.uiautomator2);\n this.proxyCommand = this.uiautomator2.proxyCommand.bind(this.uiautomator2);\n this.jwpProxyActive = true;\n};\n\n/**\n * The list of available info entries can be found at\n * https://github.com/appium/appium-uiautomator2-server/blob/master/app/src/main/java/io/appium/uiautomator2/handler/GetDeviceInfo.java\n */\ncommands.mobileGetDeviceInfo = async function () {\n return await this.uiautomator2.jwproxy.command('/appium/device/info', 'GET');\n};\n\n/**\n * @typedef {Object} TypingOptions\n * @property {!string|number|boolean} text - The text to type\n */\n\n/**\n * Types the given Unicode string.\n * It is expected that the focus is already put\n * to the destination input field before this method is called.\n *\n * @param {TypingOptions} opts\n * @returns {boolean} `true` if the input text has been successfully sent to adb\n * @throws {Error} if `text` property has not been provided\n */\ncommands.mobileType = async function mobileType (opts = {}) {\n const {\n text,\n } = opts;\n if (_.isUndefined(text)) {\n this.log.errorAndThrow(`The 'text' argument is mandatory`);\n }\n return await this.adb.typeUnicode(text);\n};\n\n\n/**\n * @typedef {Object} InstallOptions\n * @property {boolean} allowTestPackages [false] - Set to true in order to allow test\n * packages installation.\n * @property {boolean} useSdcard [false] - Set to true to install the app on sdcard\n * instead of the device memory.\n * @property {boolean} grantPermissions [false] - Set to true in order to grant all the\n * permissions requested in the application's manifest\n * automatically after the installation is completed\n * under Android 6+.\n * @property {boolean} replace [true] - Set it to false if you don't want\n * the application to be upgraded/reinstalled\n * if it is already present on the device.\n * @property {boolean} partialInstall [false] - Install apks partially. It is used for 'install-multiple'.\n * https://android.stackexchange.com/questions/111064/what-is-a-partial-application-install-via-adb\n */\n\n/**\n * @typedef {Object} InstallMultipleApksOptions\n * @property {Array<string>} apks - The list of APKs to install. Each APK should be a path to a apk\n * or downloadable URL as HTTP/HTTPS.\n * @property {InstallOptions} options\n */\n\n/**\n * Install multiple APKs with `install-multiple` option.\n *\n * @param {InstallMultipleApksOptions} opts\n * @throws {Error} if an error occured while installing the given APKs.\n */\ncommands.mobileInstallMultipleApks = async function (opts = {}) {\n if (!_.isArray(opts.apks) || _.isEmpty(opts.apks)) {\n throw new errors.InvalidArgumentError('No apks are given to install');\n }\n const apks = await B.all(opts.apks\n .map((app) => this.helpers.configureApp(app, [APK_EXTENSION])));\n await this.adb.installMultipleApks(apks, opts.options);\n};\n\nObject.assign(extensions, commands, helpers);\n\nexport default extensions;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"general.js","names":["extensions","commands","helpers","getPageSource","uiautomator2","jwproxy","command","getClipboard","adb","getApiLevel","doSendKeys","params","keyevent","keycode","metastate","log","debug","back","getStrings","language","getDeviceLanguage","info","preprocessStringsMap","mapping","result","key","value","_","toPairs","isString","JSON","stringify","apkStrings","opts","app","appPackage","errorAndThrow","tmpRoot","tempDir","openDir","pullApk","err","message","fs","exists","extractStringsFromApk","rimraf","getDisplayDensity","getWindowSize","getWindowRect","width","height","x","y","executeMobile","mobileCommand","mobileCommandsMapping","shell","execEmuConsoleCommand","dragGesture","flingGesture","doubleClickGesture","clickGesture","longClickGesture","pinchCloseGesture","pinchOpenGesture","swipeGesture","scrollGesture","scrollBackTo","scroll","viewportScreenshot","viewportRect","deepLink","startLogsBroadcast","stopLogsBroadcast","acceptAlert","dismissAlert","batteryInfo","deviceInfo","getDeviceTime","changePermissions","getPermissions","performEditorAction","startScreenStreaming","stopScreenStreaming","getNotifications","listSms","type","sensorSet","pushFile","pullFile","pullFolder","deleteFile","isAppInstalled","queryAppState","activateApp","removeApp","terminateApp","installApp","clearApp","startActivity","startService","stopService","broadcast","getContexts","installMultipleApks","unlock","refreshGpsCache","startMediaProjectionRecording","isMediaProjectionRecordingRunning","stopMediaProjectionRecording","has","errors","UnknownCommandError","keys","mobileViewportScreenshot","getViewportScreenshot","mobileViewPortRect","getViewPortRect","setUrl","url","startUri","mobileDeepLink","package","pkg","waitForLaunch","openNotifications","updateSettings","settings","update","getSettings","driverSettings","serverSettings","wrapBootstrapDisconnect","wrapped","suspendChromedriverProxy","chromedriver","proxyReqRes","bind","proxyCommand","jwpProxyActive","mobileGetDeviceInfo","mobileType","text","isUndefined","typeUnicode","mobileInstallMultipleApks","isArray","apks","isEmpty","InvalidArgumentError","B","all","map","configureApp","APK_EXTENSION","options","Object","assign"],"sources":["../../../lib/commands/general.js"],"sourcesContent":["import _ from 'lodash';\nimport B from 'bluebird';\nimport { errors } from 'appium/driver';\nimport { fs, tempDir } from 'appium/support';\nimport { APK_EXTENSION } from '../extensions';\n\nlet extensions = {},\n commands = {},\n helpers = {};\n\ncommands.getPageSource = async function () {\n return await this.uiautomator2.jwproxy.command('/source', 'GET', {});\n};\n\ncommands.getClipboard = async function () {\n return (await this.adb.getApiLevel() < 29)\n ? (await this.uiautomator2.jwproxy.command('/appium/device/get_clipboard', 'POST', {}))\n : (await this.adb.getClipboard());\n};\n\n// Need to override this for correct unicode support\ncommands.doSendKeys = async function (params) {\n await this.uiautomator2.jwproxy.command('/keys', 'POST', params);\n};\n\n// uiautomator2 doesn't support metastate for keyevents\ncommands.keyevent = async function (keycode, metastate) {\n this.log.debug(`Ignoring metastate ${metastate}`);\n await this.adb.keyevent(keycode);\n};\n\n// Use ADB since we don't have UiAutomator\ncommands.back = async function () {\n await this.adb.keyevent(4);\n};\n\ncommands.getStrings = async function (language) {\n if (!language) {\n language = await this.adb.getDeviceLanguage();\n this.log.info(`No language specified, returning strings for: ${language}`);\n }\n\n // Clients require the resulting mapping to have both keys\n // and values of type string\n const preprocessStringsMap = function (mapping) {\n const result = {};\n for (const [key, value] of _.toPairs(mapping)) {\n result[key] = _.isString(value) ? value : JSON.stringify(value);\n }\n return result;\n };\n\n if (this.apkStrings[language]) {\n // Return cached strings\n return preprocessStringsMap(this.apkStrings[language]);\n }\n\n if (!this.opts.app && !this.opts.appPackage) {\n this.log.errorAndThrow(\"One of 'app' or 'appPackage' capabilities should must be specified\");\n }\n\n let app = this.opts.app;\n const tmpRoot = await tempDir.openDir();\n try {\n if (!app) {\n try {\n app = await this.adb.pullApk(this.opts.appPackage, tmpRoot);\n } catch (err) {\n this.log.errorAndThrow(`Failed to pull an apk from '${this.opts.appPackage}'. Original error: ${err.message}`);\n }\n }\n\n if (!await fs.exists(app)) {\n this.log.errorAndThrow(`The app at '${app}' does not exist`);\n }\n\n try {\n const {apkStrings} = await this.adb.extractStringsFromApk(app, language, tmpRoot);\n this.apkStrings[language] = apkStrings;\n return preprocessStringsMap(apkStrings);\n } catch (err) {\n this.log.errorAndThrow(`Cannot extract strings from '${app}'. Original error: ${err.message}`);\n }\n } finally {\n await fs.rimraf(tmpRoot);\n }\n};\n\ncommands.getDisplayDensity = async function getDisplayDensity () {\n return await this.uiautomator2.jwproxy.command('/appium/device/display_density', 'GET', {});\n};\n\n// memoized in constructor\ncommands.getWindowSize = async function () {\n return await this.uiautomator2.jwproxy.command('/window/current/size', 'GET', {});\n};\n\n// For W3C\ncommands.getWindowRect = async function () {\n const {width, height} = await this.getWindowSize();\n return {\n width,\n height,\n x: 0,\n y: 0,\n };\n};\n\nextensions.executeMobile = async function (mobileCommand, opts = {}) {\n const mobileCommandsMapping = {\n shell: 'mobileShell',\n\n execEmuConsoleCommand: 'mobileExecEmuConsoleCommand',\n\n dragGesture: 'mobileDragGesture',\n flingGesture: 'mobileFlingGesture',\n doubleClickGesture: 'mobileDoubleClickGesture',\n clickGesture: 'mobileClickGesture',\n longClickGesture: 'mobileLongClickGesture',\n pinchCloseGesture: 'mobilePinchCloseGesture',\n pinchOpenGesture: 'mobilePinchOpenGesture',\n swipeGesture: 'mobileSwipeGesture',\n scrollGesture: 'mobileScrollGesture',\n scrollBackTo: 'mobileScrollBackTo',\n scroll: 'mobileScroll',\n viewportScreenshot: 'mobileViewportScreenshot',\n viewportRect: 'mobileViewPortRect',\n\n deepLink: 'mobileDeepLink',\n\n startLogsBroadcast: 'mobileStartLogsBroadcast',\n stopLogsBroadcast: 'mobileStopLogsBroadcast',\n\n acceptAlert: 'mobileAcceptAlert',\n dismissAlert: 'mobileDismissAlert',\n\n batteryInfo: 'mobileGetBatteryInfo',\n\n deviceInfo: 'mobileGetDeviceInfo',\n\n getDeviceTime: 'mobileGetDeviceTime',\n\n changePermissions: 'mobileChangePermissions',\n getPermissions: 'mobileGetPermissions',\n\n performEditorAction: 'mobilePerformEditorAction',\n\n startScreenStreaming: 'mobileStartScreenStreaming',\n stopScreenStreaming: 'mobileStopScreenStreaming',\n\n getNotifications: 'mobileGetNotifications',\n\n listSms: 'mobileListSms',\n\n type: 'mobileType',\n sensorSet: 'sensorSet',\n\n pushFile: 'mobilePushFile',\n pullFile: 'mobilePullFile',\n pullFolder: 'mobilePullFolder',\n deleteFile: 'mobileDeleteFile',\n\n isAppInstalled: 'mobileIsAppInstalled',\n queryAppState: 'mobileQueryAppState',\n activateApp: 'mobileActivateApp',\n removeApp: 'mobileRemoveApp',\n terminateApp: 'mobileTerminateApp',\n installApp: 'mobileInstallApp',\n clearApp: 'mobileClearApp',\n\n startActivity: 'mobileStartActivity',\n startService: 'mobileStartService',\n stopService: 'mobileStopService',\n broadcast: 'mobileBroadcast',\n\n getContexts: 'mobileGetContexts',\n\n installMultipleApks: 'mobileInstallMultipleApks',\n\n unlock: 'mobileUnlock',\n\n refreshGpsCache: 'mobileRefreshGpsCache',\n\n startMediaProjectionRecording: 'mobileStartMediaProjectionRecording',\n isMediaProjectionRecordingRunning: 'mobileIsMediaProjectionRecordingRunning',\n stopMediaProjectionRecording: 'mobileStopMediaProjectionRecording',\n };\n\n if (!_.has(mobileCommandsMapping, mobileCommand)) {\n throw new errors.UnknownCommandError(`Unknown mobile command \"${mobileCommand}\". ` +\n `Only ${_.keys(mobileCommandsMapping)} commands are supported.`);\n }\n return await this[mobileCommandsMapping[mobileCommand]](opts);\n};\n\ncommands.mobileViewportScreenshot = async function () {\n return await this.getViewportScreenshot();\n};\n\n/**\n * @typedef {object} Rectangle\n * @property {number} left - The left coordinate of the Rectangle.\n * @property {number} top - The top coordinate of the Rectangle.\n * @property {number} width - The width of Rectangle.\n * @property {number} height - The height of Rectangle.\n */\n\n/**\n * Returns the viewport coordinates.\n * @returns {Rectangle} The viewport coordinates.\n */\ncommands.mobileViewPortRect = async function mobileViewPortRect () {\n return await this.getViewPortRect();\n};\n\ncommands.setUrl = async function (url) {\n await this.adb.startUri(url, this.opts.appPackage);\n};\n\n/**\n * @typedef {object} DeepLinkOpts\n * @property {!string} url - The name of URL to start.\n * @property {!string} package - The name of the package to start the URI with.\n * @property {?boolean} waitForLaunch [true] - if `false` then adb won't wait\n * for the started activity to return the control\n */\n\n/**\n * Start URL that take users directly to specific content in the app\n * @param {DeepLinkOpts} opts\n */\ncommands.mobileDeepLink = async function (opts = {}) {\n const {\n url,\n package: pkg,\n waitForLaunch,\n } = opts;\n return await this.adb.startUri(url, pkg, { waitForLaunch });\n};\n\ncommands.openNotifications = async function () {\n return await this.uiautomator2.jwproxy.command('/appium/device/open_notifications', 'POST', {});\n};\n\ncommands.updateSettings = async function (settings) {\n await this.settings.update(settings);\n await this.uiautomator2.jwproxy.command('/appium/settings', 'POST', {settings});\n};\n\ncommands.getSettings = async function () {\n const driverSettings = this.settings.getSettings();\n const serverSettings = await this.uiautomator2.jwproxy.command('/appium/settings', 'GET');\n return {...driverSettings, ...serverSettings};\n};\n\n/**\n * Overriding appium-android-driver's wrapBootstrapDisconnect,\n * unlike in appium-android-driver avoiding adb restarting as it intern\n * kills UiAutomator2 server running in the device.\n **/\nhelpers.wrapBootstrapDisconnect = async function (wrapped) {\n await wrapped();\n};\n\n// Stop proxying to any Chromedriver and redirect to uiautomator2\nhelpers.suspendChromedriverProxy = function () {\n this.chromedriver = null;\n this.proxyReqRes = this.uiautomator2.proxyReqRes.bind(this.uiautomator2);\n this.proxyCommand = this.uiautomator2.proxyCommand.bind(this.uiautomator2);\n this.jwpProxyActive = true;\n};\n\n/**\n * The list of available info entries can be found at\n * https://github.com/appium/appium-uiautomator2-server/blob/master/app/src/main/java/io/appium/uiautomator2/handler/GetDeviceInfo.java\n */\ncommands.mobileGetDeviceInfo = async function () {\n return await this.uiautomator2.jwproxy.command('/appium/device/info', 'GET');\n};\n\n/**\n * @typedef {Object} TypingOptions\n * @property {!string|number|boolean} text - The text to type\n */\n\n/**\n * Types the given Unicode string.\n * It is expected that the focus is already put\n * to the destination input field before this method is called.\n *\n * @param {TypingOptions} opts\n * @returns {boolean} `true` if the input text has been successfully sent to adb\n * @throws {Error} if `text` property has not been provided\n */\ncommands.mobileType = async function mobileType (opts = {}) {\n const {\n text,\n } = opts;\n if (_.isUndefined(text)) {\n this.log.errorAndThrow(`The 'text' argument is mandatory`);\n }\n return await this.adb.typeUnicode(text);\n};\n\n\n/**\n * @typedef {Object} InstallOptions\n * @property {boolean} allowTestPackages [false] - Set to true in order to allow test\n * packages installation.\n * @property {boolean} useSdcard [false] - Set to true to install the app on sdcard\n * instead of the device memory.\n * @property {boolean} grantPermissions [false] - Set to true in order to grant all the\n * permissions requested in the application's manifest\n * automatically after the installation is completed\n * under Android 6+.\n * @property {boolean} replace [true] - Set it to false if you don't want\n * the application to be upgraded/reinstalled\n * if it is already present on the device.\n * @property {boolean} partialInstall [false] - Install apks partially. It is used for 'install-multiple'.\n * https://android.stackexchange.com/questions/111064/what-is-a-partial-application-install-via-adb\n */\n\n/**\n * @typedef {Object} InstallMultipleApksOptions\n * @property {Array<string>} apks - The list of APKs to install. Each APK should be a path to a apk\n * or downloadable URL as HTTP/HTTPS.\n * @property {InstallOptions} options\n */\n\n/**\n * Install multiple APKs with `install-multiple` option.\n *\n * @param {InstallMultipleApksOptions} opts\n * @throws {Error} if an error occured while installing the given APKs.\n */\ncommands.mobileInstallMultipleApks = async function (opts = {}) {\n if (!_.isArray(opts.apks) || _.isEmpty(opts.apks)) {\n throw new errors.InvalidArgumentError('No apks are given to install');\n }\n const apks = await B.all(opts.apks\n .map((app) => this.helpers.configureApp(app, [APK_EXTENSION])));\n await this.adb.installMultipleApks(apks, opts.options);\n};\n\nObject.assign(extensions, commands, helpers);\n\nexport default extensions;\n"],"mappings":"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"}
|