appium-espresso-driver 2.23.1 → 2.23.3
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/build/lib/commands/general.js +30 -17
- package/build/lib/commands/general.js.map +1 -1
- package/espresso-server/app/build/outputs/apk/androidTest/debug/app-debug-androidTest.apk +0 -0
- package/lib/commands/general.js +39 -16
- package/npm-shrinkwrap.json +198 -124
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,17 @@
|
|
|
1
|
+
## [2.23.3](https://github.com/appium/appium-espresso-driver/compare/v2.23.2...v2.23.3) (2023-06-19)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* Add the missing wrapper for mobile: pressKey ([#886](https://github.com/appium/appium-espresso-driver/issues/886)) ([72961b5](https://github.com/appium/appium-espresso-driver/commit/72961b549b39fdb407cae2db174f0a034eb37b81))
|
|
7
|
+
|
|
8
|
+
## [2.23.2](https://github.com/appium/appium-espresso-driver/compare/v2.23.1...v2.23.2) (2023-06-07)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Miscellaneous Chores
|
|
12
|
+
|
|
13
|
+
* **deps-dev:** bump conventional-changelog-conventionalcommits ([#884](https://github.com/appium/appium-espresso-driver/issues/884)) ([6a5f62c](https://github.com/appium/appium-espresso-driver/commit/6a5f62c278a40ae8ea2d8571bea24bbe2b46aa64))
|
|
14
|
+
|
|
1
15
|
## [2.23.1](https://github.com/appium/appium-espresso-driver/compare/v2.23.0...v2.23.1) (2023-05-24)
|
|
2
16
|
|
|
3
17
|
|
|
@@ -16,7 +16,7 @@ const commands = {},
|
|
|
16
16
|
extensions = {};
|
|
17
17
|
exports.helpers = helpers;
|
|
18
18
|
exports.commands = commands;
|
|
19
|
-
function
|
|
19
|
+
function requireOptions(options, requiredOptionNames) {
|
|
20
20
|
if (!_lodash.default.isArray(requiredOptionNames)) {
|
|
21
21
|
requiredOptionNames = [requiredOptionNames];
|
|
22
22
|
}
|
|
@@ -42,7 +42,7 @@ commands.getClipboard = async function getClipboard() {
|
|
|
42
42
|
commands.mobilePerformEditorAction = async function mobilePerformEditorAction(opts = {}) {
|
|
43
43
|
const {
|
|
44
44
|
action
|
|
45
|
-
} =
|
|
45
|
+
} = requireOptions(opts, ['action']);
|
|
46
46
|
return await this.espresso.jwproxy.command('/appium/device/perform_editor_action', 'POST', {
|
|
47
47
|
action
|
|
48
48
|
});
|
|
@@ -55,7 +55,7 @@ commands.mobileSwipe = async function mobileSwipe(opts = {}) {
|
|
|
55
55
|
startCoordinates,
|
|
56
56
|
endCoordinates,
|
|
57
57
|
precisionDescriber
|
|
58
|
-
} =
|
|
58
|
+
} = requireOptions(opts, ['element']);
|
|
59
59
|
return await this.espresso.jwproxy.command(`/appium/execute_mobile/${_support.util.unwrapElement(element)}/swipe`, 'POST', {
|
|
60
60
|
direction,
|
|
61
61
|
element,
|
|
@@ -65,6 +65,19 @@ commands.mobileSwipe = async function mobileSwipe(opts = {}) {
|
|
|
65
65
|
precisionDescriber
|
|
66
66
|
});
|
|
67
67
|
};
|
|
68
|
+
commands.mobilePressKey = async function mobilePressKey(opts = {}) {
|
|
69
|
+
const {
|
|
70
|
+
keycode,
|
|
71
|
+
metastate,
|
|
72
|
+
flags,
|
|
73
|
+
isLongPress
|
|
74
|
+
} = requireOptions(opts, ['keycode']);
|
|
75
|
+
await this.espresso.jwproxy.command(`/appium/device/${isLongPress ? 'long_' : ''}press_keycode`, 'POST', {
|
|
76
|
+
keycode,
|
|
77
|
+
metastate,
|
|
78
|
+
flags
|
|
79
|
+
});
|
|
80
|
+
};
|
|
68
81
|
commands.mobileGetDeviceInfo = async function mobileGetDeviceInfo() {
|
|
69
82
|
return await this.espresso.jwproxy.command('/appium/device/info', 'GET');
|
|
70
83
|
};
|
|
@@ -85,7 +98,7 @@ commands.mobileOpenDrawer = async function mobileOpenDrawer(opts = {}) {
|
|
|
85
98
|
const {
|
|
86
99
|
element,
|
|
87
100
|
gravity
|
|
88
|
-
} =
|
|
101
|
+
} = requireOptions(opts, ['element']);
|
|
89
102
|
return await this.espresso.jwproxy.command(`/appium/execute_mobile/${_support.util.unwrapElement(element)}/open_drawer`, 'POST', {
|
|
90
103
|
gravity
|
|
91
104
|
});
|
|
@@ -94,7 +107,7 @@ commands.mobileCloseDrawer = async function mobileCloseDrawer(opts = {}) {
|
|
|
94
107
|
const {
|
|
95
108
|
element,
|
|
96
109
|
gravity
|
|
97
|
-
} =
|
|
110
|
+
} = requireOptions(opts, ['element']);
|
|
98
111
|
return await this.espresso.jwproxy.command(`/appium/execute_mobile/${_support.util.unwrapElement(element)}/close_drawer`, 'POST', {
|
|
99
112
|
gravity
|
|
100
113
|
});
|
|
@@ -105,7 +118,7 @@ commands.mobileSetDate = async function mobileSetDate(opts = {}) {
|
|
|
105
118
|
year,
|
|
106
119
|
monthOfYear,
|
|
107
120
|
dayOfMonth
|
|
108
|
-
} =
|
|
121
|
+
} = requireOptions(opts, ['element', 'year', 'monthOfYear', 'dayOfMonth']);
|
|
109
122
|
return await this.espresso.jwproxy.command(`/appium/execute_mobile/${_support.util.unwrapElement(element)}/set_date`, 'POST', {
|
|
110
123
|
year,
|
|
111
124
|
monthOfYear,
|
|
@@ -117,7 +130,7 @@ commands.mobileSetTime = async function mobileSetTime(opts = {}) {
|
|
|
117
130
|
element,
|
|
118
131
|
hours,
|
|
119
132
|
minutes
|
|
120
|
-
} =
|
|
133
|
+
} = requireOptions(opts, ['element', 'hours', 'minutes']);
|
|
121
134
|
return await this.espresso.jwproxy.command(`/appium/execute_mobile/${_support.util.unwrapElement(element)}/set_time`, 'POST', {
|
|
122
135
|
hours,
|
|
123
136
|
minutes
|
|
@@ -127,7 +140,7 @@ commands.mobileNavigateTo = async function mobileNavigateTo(opts = {}) {
|
|
|
127
140
|
let {
|
|
128
141
|
element,
|
|
129
142
|
menuItemId
|
|
130
|
-
} =
|
|
143
|
+
} = requireOptions(opts, ['menuItemId', 'element']);
|
|
131
144
|
let menuItemIdAsNumber = parseInt(menuItemId, 10);
|
|
132
145
|
if (_lodash.default.isNaN(menuItemIdAsNumber) || menuItemIdAsNumber < 0) {
|
|
133
146
|
throw new _driver.errors.InvalidArgumentError(`'menuItemId' must be a non-negative number. Found ${menuItemId}`);
|
|
@@ -137,7 +150,7 @@ commands.mobileNavigateTo = async function mobileNavigateTo(opts = {}) {
|
|
|
137
150
|
});
|
|
138
151
|
};
|
|
139
152
|
commands.mobileWebAtoms = async function mobileWebAtoms(opts = {}) {
|
|
140
|
-
opts =
|
|
153
|
+
opts = requireOptions(opts, ['methodChain']);
|
|
141
154
|
return await this.espresso.jwproxy.command(`/appium/execute_mobile/web_atoms`, 'POST', opts);
|
|
142
155
|
};
|
|
143
156
|
commands.getDisplayDensity = async function getDisplayDensity() {
|
|
@@ -182,13 +195,13 @@ commands.mobileScrollToPage = async function mobileScrollToPage(opts = {}) {
|
|
|
182
195
|
});
|
|
183
196
|
};
|
|
184
197
|
commands.mobileBackdoor = async function mobileBackdoor(opts = {}) {
|
|
185
|
-
|
|
198
|
+
requireOptions(opts, ['target', 'methods']);
|
|
186
199
|
const {
|
|
187
200
|
target,
|
|
188
201
|
methods
|
|
189
202
|
} = opts;
|
|
190
203
|
if (target === 'element') {
|
|
191
|
-
|
|
204
|
+
requireOptions(opts, ['elementId']);
|
|
192
205
|
}
|
|
193
206
|
const {
|
|
194
207
|
elementId: targetElement
|
|
@@ -205,7 +218,7 @@ commands.mobileUiautomator = async function mobileUiautomator(opts = {}) {
|
|
|
205
218
|
locator,
|
|
206
219
|
action,
|
|
207
220
|
index
|
|
208
|
-
} =
|
|
221
|
+
} = requireOptions(opts, ['strategy', 'locator', 'action']);
|
|
209
222
|
return await this.espresso.jwproxy.command(`/appium/execute_mobile/uiautomator`, 'POST', {
|
|
210
223
|
strategy,
|
|
211
224
|
locator,
|
|
@@ -219,7 +232,7 @@ commands.mobileUiautomatorPageSource = async function mobileUiautomatorPageSourc
|
|
|
219
232
|
commands.mobileFlashElement = async function mobileFlashElement(opts = {}) {
|
|
220
233
|
const {
|
|
221
234
|
element
|
|
222
|
-
} =
|
|
235
|
+
} = requireOptions(opts, ['element']);
|
|
223
236
|
const {
|
|
224
237
|
durationMillis,
|
|
225
238
|
repeatCount
|
|
@@ -237,7 +250,7 @@ commands.mobileClickAction = async function mobileClickAction(opts = {}) {
|
|
|
237
250
|
precisionDescriber,
|
|
238
251
|
inputDevice,
|
|
239
252
|
buttonState
|
|
240
|
-
} =
|
|
253
|
+
} = requireOptions(opts, ['element']);
|
|
241
254
|
return await this.espresso.jwproxy.command(`/appium/execute_mobile/${_support.util.unwrapElement(element)}/click_action`, 'POST', {
|
|
242
255
|
tapper,
|
|
243
256
|
coordinatesProvider,
|
|
@@ -267,7 +280,7 @@ commands.mobileStartActivity = async function mobileStartActivity(opts = {}) {
|
|
|
267
280
|
locale,
|
|
268
281
|
optionalIntentArguments,
|
|
269
282
|
optionalActivityArguments
|
|
270
|
-
} =
|
|
283
|
+
} = requireOptions(opts, ['appActivity']);
|
|
271
284
|
return await this.espresso.jwproxy.command(`/appium/device/start_activity`, 'POST', {
|
|
272
285
|
appPackage,
|
|
273
286
|
appActivity,
|
|
@@ -291,10 +304,10 @@ commands.startActivity = async function startActivity(appPackage, appActivity, a
|
|
|
291
304
|
commands.mobileDismissAutofill = async function mobileDismissAutofill(opts = {}) {
|
|
292
305
|
const {
|
|
293
306
|
element
|
|
294
|
-
} =
|
|
307
|
+
} = requireOptions(opts, ['element']);
|
|
295
308
|
await this.espresso.jwproxy.command(`/session/:sessionId/appium/execute_mobile/${_support.util.unwrapElement(element)}/dismiss_autofill`, 'POST', {});
|
|
296
309
|
};
|
|
297
310
|
Object.assign(extensions, commands, helpers);
|
|
298
311
|
var _default = extensions;
|
|
299
312
|
exports.default = _default;
|
|
300
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfc3VwcG9ydCIsIl92YWxpZGF0ZSIsIl9kcml2ZXIiLCJfdXRpbHMiLCJjb21tYW5kcyIsImhlbHBlcnMiLCJleHRlbnNpb25zIiwiZXhwb3J0cyIsImFzc2VydFJlcXVpcmVkT3B0aW9ucyIsIm9wdGlvbnMiLCJyZXF1aXJlZE9wdGlvbk5hbWVzIiwiXyIsImlzQXJyYXkiLCJwcmVzZW50T3B0aW9uTmFtZXMiLCJrZXlzIiwibWlzc2luZ09wdGlvbk5hbWVzIiwiZGlmZmVyZW5jZSIsImlzRW1wdHkiLCJFcnJvciIsIkpTT04iLCJzdHJpbmdpZnkiLCJsYXVuY2hBcHAiLCJlcnJvcnMiLCJVbnN1cHBvcnRlZE9wZXJhdGlvbkVycm9yIiwiY2xvc2VBcHAiLCJyZXNldCIsImdldENsaXBib2FyZCIsImFkYiIsImdldEFwaUxldmVsIiwiZXNwcmVzc28iLCJqd3Byb3h5IiwiY29tbWFuZCIsIm1vYmlsZVBlcmZvcm1FZGl0b3JBY3Rpb24iLCJvcHRzIiwiYWN0aW9uIiwibW9iaWxlU3dpcGUiLCJkaXJlY3Rpb24iLCJlbGVtZW50Iiwic3dpcGVyIiwic3RhcnRDb29yZGluYXRlcyIsImVuZENvb3JkaW5hdGVzIiwicHJlY2lzaW9uRGVzY3JpYmVyIiwidXRpbCIsInVud3JhcEVsZW1lbnQiLCJtb2JpbGVHZXREZXZpY2VJbmZvIiwibW9iaWxlSXNUb2FzdFZpc2libGUiLCJ0ZXh0IiwiaXNSZWdleHAiLCJoYXNWYWx1ZSIsIkludmFsaWRBcmd1bWVudEVycm9yIiwibW9iaWxlT3BlbkRyYXdlciIsImdyYXZpdHkiLCJtb2JpbGVDbG9zZURyYXdlciIsIm1vYmlsZVNldERhdGUiLCJ5ZWFyIiwibW9udGhPZlllYXIiLCJkYXlPZk1vbnRoIiwibW9iaWxlU2V0VGltZSIsImhvdXJzIiwibWludXRlcyIsIm1vYmlsZU5hdmlnYXRlVG8iLCJtZW51SXRlbUlkIiwibWVudUl0ZW1JZEFzTnVtYmVyIiwicGFyc2VJbnQiLCJpc05hTiIsIm1vYmlsZVdlYkF0b21zIiwiZ2V0RGlzcGxheURlbnNpdHkiLCJtb2JpbGVTY3JvbGxUb1BhZ2UiLCJzY3JvbGxUb1R5cGVzIiwicmVzIiwidmFsaWRhdGUiLCJwcmVzZW5jZSIsInNjcm9sbFRvIiwiaW5jbHVzaW9uIiwid2l0aGluIiwibWVzc2FnZSIsImpvaW4iLCJzY3JvbGxUb1BhZ2UiLCJudW1lcmljYWxpdHkiLCJvbmx5SW50ZWdlciIsImdyZWF0ZXJUaGFuT3JFcXVhbFRvIiwic21vb3RoU2Nyb2xsIiwibG9nIiwid2FybiIsIm1vYmlsZUJhY2tkb29yIiwidGFyZ2V0IiwibWV0aG9kcyIsImVsZW1lbnRJZCIsInRhcmdldEVsZW1lbnQiLCJtb2JpbGVVaWF1dG9tYXRvciIsInN0cmF0ZWd5IiwibG9jYXRvciIsImluZGV4IiwibW9iaWxlVWlhdXRvbWF0b3JQYWdlU291cmNlIiwibW9iaWxlRmxhc2hFbGVtZW50IiwiZHVyYXRpb25NaWxsaXMiLCJyZXBlYXRDb3VudCIsIm1vYmlsZUNsaWNrQWN0aW9uIiwidGFwcGVyIiwiY29vcmRpbmF0ZXNQcm92aWRlciIsImlucHV0RGV2aWNlIiwiYnV0dG9uU3RhdGUiLCJ1cGRhdGVTZXR0aW5ncyIsInNldHRpbmdzIiwiZ2V0U2V0dGluZ3MiLCJzdXNwZW5kQ2hyb21lZHJpdmVyUHJveHkiLCJjaHJvbWVkcml2ZXIiLCJwcm94eVJlcVJlcyIsImJpbmQiLCJwcm94eUNvbW1hbmQiLCJqd3BQcm94eUFjdGl2ZSIsIm1vYmlsZVN0YXJ0QWN0aXZpdHkiLCJhcHBQYWNrYWdlIiwiY2FwcyIsImFwcEFjdGl2aXR5IiwibG9jYWxlIiwib3B0aW9uYWxJbnRlbnRBcmd1bWVudHMiLCJvcHRpb25hbEFjdGl2aXR5QXJndW1lbnRzIiwic3RhcnRBY3Rpdml0eSIsImFwcFdhaXRQYWNrYWdlIiwiYXBwV2FpdEFjdGl2aXR5IiwicXVhbGlmeUFjdGl2aXR5TmFtZSIsImRlYnVnIiwid2FpdEZvckFjdGl2aXR5IiwibW9iaWxlRGlzbWlzc0F1dG9maWxsIiwiT2JqZWN0IiwiYXNzaWduIiwiX2RlZmF1bHQiLCJkZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2NvbW1hbmRzL2dlbmVyYWwuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IHV0aWwgfSBmcm9tICdhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgdmFsaWRhdGUgZnJvbSAndmFsaWRhdGUuanMnO1xuaW1wb3J0IHsgZXJyb3JzIH0gZnJvbSAnYXBwaXVtL2RyaXZlcic7XG5pbXBvcnQgeyBxdWFsaWZ5QWN0aXZpdHlOYW1lIH0gZnJvbSAnLi4vdXRpbHMnO1xuXG5jb25zdCBjb21tYW5kcyA9IHt9LCBoZWxwZXJzID0ge30sIGV4dGVuc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gYXNzZXJ0UmVxdWlyZWRPcHRpb25zIChvcHRpb25zLCByZXF1aXJlZE9wdGlvbk5hbWVzKSB7XG4gIGlmICghXy5pc0FycmF5KHJlcXVpcmVkT3B0aW9uTmFtZXMpKSB7XG4gICAgcmVxdWlyZWRPcHRpb25OYW1lcyA9IFtyZXF1aXJlZE9wdGlvbk5hbWVzXTtcbiAgfVxuICBjb25zdCBwcmVzZW50T3B0aW9uTmFtZXMgPSBfLmtleXMob3B0aW9ucyk7XG4gIGNvbnN0IG1pc3NpbmdPcHRpb25OYW1lcyA9IF8uZGlmZmVyZW5jZShyZXF1aXJlZE9wdGlvbk5hbWVzLCBwcmVzZW50T3B0aW9uTmFtZXMpO1xuICBpZiAoXy5pc0VtcHR5KG1pc3NpbmdPcHRpb25OYW1lcykpIHtcbiAgICByZXR1cm4gb3B0aW9ucztcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgcmVxdWlyZWQ6ICR7SlNPTi5zdHJpbmdpZnkobWlzc2luZ09wdGlvbk5hbWVzKX0uIGAgK1xuICAgIGBZb3UgaGF2ZSBvbmx5IHByb3ZpZGVkOiAke0pTT04uc3RyaW5naWZ5KHByZXNlbnRPcHRpb25OYW1lcyl9YCk7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZXF1aXJlLWF3YWl0XG5jb21tYW5kcy5sYXVuY2hBcHAgPSBhc3luYyBmdW5jdGlvbiBsYXVuY2hBcHAgKCkge1xuICB0aHJvdyBuZXcgZXJyb3JzLlVuc3VwcG9ydGVkT3BlcmF0aW9uRXJyb3IoJ1BsZWFzZSBjcmVhdGUgYSBuZXcgc2Vzc2lvbiBpbiBvcmRlciB0byBsYXVuY2ggdGhlIGFwcGxpY2F0aW9uIHVuZGVyIHRlc3QnKTtcbn07XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZXF1aXJlLWF3YWl0XG5jb21tYW5kcy5jbG9zZUFwcCA9IGFzeW5jIGZ1bmN0aW9uIGNsb3NlQXBwICgpIHtcbiAgdGhyb3cgbmV3IGVycm9ycy5VbnN1cHBvcnRlZE9wZXJhdGlvbkVycm9yKCdQbGVhc2UgcXVpdCB0aGUgc2Vzc2lvbiBpbiBvcmRlciB0byBjbG9zZSB0aGUgYXBwbGljYXRpb24gdW5kZXIgdGVzdCcpO1xufTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlcXVpcmUtYXdhaXRcbmNvbW1hbmRzLnJlc2V0ID0gYXN5bmMgZnVuY3Rpb24gcmVzZXQgKCkge1xuICB0aHJvdyBuZXcgZXJyb3JzLlVuc3VwcG9ydGVkT3BlcmF0aW9uRXJyb3IoXG4gICAgJ1BsZWFzZSBxdWl0IHRoZSBzZXNzaW9uIGFuZCBjcmVhdGUgYSBuZXcgb25lICcgK1xuICAgICdpbiBvcmRlciB0byBjbG9zZSBhbmQgbGF1bmNoIHRoZSBhcHBsaWNhdGlvbiB1bmRlciB0ZXN0Jyk7XG59O1xuXG5jb21tYW5kcy5nZXRDbGlwYm9hcmQgPSBhc3luYyBmdW5jdGlvbiBnZXRDbGlwYm9hcmQgKCkge1xuICByZXR1cm4gKGF3YWl0IHRoaXMuYWRiLmdldEFwaUxldmVsKCkgPCAyOSlcbiAgICA/IChhd2FpdCB0aGlzLmVzcHJlc3NvLmp3cHJveHkuY29tbWFuZCgnL2FwcGl1bS9kZXZpY2UvZ2V0X2NsaXBib2FyZCcsICdQT1NUJywge30pKVxuICAgIDogKGF3YWl0IHRoaXMuYWRiLmdldENsaXBib2FyZCgpKTtcbn07XG5cbmNvbW1hbmRzLm1vYmlsZVBlcmZvcm1FZGl0b3JBY3Rpb24gPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVQZXJmb3JtRWRpdG9yQWN0aW9uIChvcHRzID0ge30pIHtcbiAgY29uc3Qge2FjdGlvbn0gPSBhc3NlcnRSZXF1aXJlZE9wdGlvbnMob3B0cywgWydhY3Rpb24nXSk7XG4gIHJldHVybiBhd2FpdCB0aGlzLmVzcHJlc3NvLmp3cHJveHkuY29tbWFuZCgnL2FwcGl1bS9kZXZpY2UvcGVyZm9ybV9lZGl0b3JfYWN0aW9uJywgJ1BPU1QnLCB7YWN0aW9ufSk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVTd2lwZSA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVN3aXBlIChvcHRzID0ge30pIHtcbiAgY29uc3Qge2RpcmVjdGlvbiwgZWxlbWVudCwgc3dpcGVyLCBzdGFydENvb3JkaW5hdGVzLCBlbmRDb29yZGluYXRlcywgcHJlY2lzaW9uRGVzY3JpYmVyfSA9IGFzc2VydFJlcXVpcmVkT3B0aW9ucyhvcHRzLCBbJ2VsZW1lbnQnXSk7XG4gIHJldHVybiBhd2FpdCB0aGlzLmVzcHJlc3NvLmp3cHJveHkuY29tbWFuZChgL2FwcGl1bS9leGVjdXRlX21vYmlsZS8ke3V0aWwudW53cmFwRWxlbWVudChlbGVtZW50KX0vc3dpcGVgLCAnUE9TVCcsIHtcbiAgICBkaXJlY3Rpb24sIGVsZW1lbnQsIHN3aXBlciwgc3RhcnRDb29yZGluYXRlcywgZW5kQ29vcmRpbmF0ZXMsIHByZWNpc2lvbkRlc2NyaWJlclxuICB9KTtcbn07XG5cbmNvbW1hbmRzLm1vYmlsZUdldERldmljZUluZm8gPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVHZXREZXZpY2VJbmZvICgpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKCcvYXBwaXVtL2RldmljZS9pbmZvJywgJ0dFVCcpO1xufTtcblxuY29tbWFuZHMubW9iaWxlSXNUb2FzdFZpc2libGUgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVJc1RvYXN0VmlzaWJsZSAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHt0ZXh0LCBpc1JlZ2V4cH0gPSBvcHRzO1xuICBpZiAoIXV0aWwuaGFzVmFsdWUodGV4dCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKGAndGV4dCcgYXJndW1lbnQgaXMgbWFuZGF0b3J5YCk7XG4gIH1cbiAgcmV0dXJuIGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKCcvYXBwaXVtL2V4ZWN1dGVfbW9iaWxlL2lzX3RvYXN0X2Rpc3BsYXllZCcsICdQT1NUJywge1xuICAgIHRleHQsXG4gICAgaXNSZWdleHAsXG4gIH0pO1xufTtcblxuY29tbWFuZHMubW9iaWxlT3BlbkRyYXdlciA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZU9wZW5EcmF3ZXIgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7ZWxlbWVudCwgZ3Jhdml0eX0gPSBhc3NlcnRSZXF1aXJlZE9wdGlvbnMob3B0cywgWydlbGVtZW50J10pO1xuXG4gIHJldHVybiBhd2FpdCB0aGlzLmVzcHJlc3NvLmp3cHJveHkuY29tbWFuZChgL2FwcGl1bS9leGVjdXRlX21vYmlsZS8ke3V0aWwudW53cmFwRWxlbWVudChlbGVtZW50KX0vb3Blbl9kcmF3ZXJgLCAnUE9TVCcsIHtcbiAgICBncmF2aXR5XG4gIH0pO1xufTtcblxuY29tbWFuZHMubW9iaWxlQ2xvc2VEcmF3ZXIgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVDbG9zZURyYXdlciAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtlbGVtZW50LCBncmF2aXR5fSA9IGFzc2VydFJlcXVpcmVkT3B0aW9ucyhvcHRzLCBbJ2VsZW1lbnQnXSk7XG5cbiAgcmV0dXJuIGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKGAvYXBwaXVtL2V4ZWN1dGVfbW9iaWxlLyR7dXRpbC51bndyYXBFbGVtZW50KGVsZW1lbnQpfS9jbG9zZV9kcmF3ZXJgLCAnUE9TVCcsIHtcbiAgICBncmF2aXR5XG4gIH0pO1xufTtcblxuY29tbWFuZHMubW9iaWxlU2V0RGF0ZSA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVNldERhdGUgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7ZWxlbWVudCwgeWVhciwgbW9udGhPZlllYXIsIGRheU9mTW9udGh9ID0gYXNzZXJ0UmVxdWlyZWRPcHRpb25zKG9wdHMsIFsnZWxlbWVudCcsICd5ZWFyJywgJ21vbnRoT2ZZZWFyJywgJ2RheU9mTW9udGgnXSk7XG5cbiAgcmV0dXJuIGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKGAvYXBwaXVtL2V4ZWN1dGVfbW9iaWxlLyR7dXRpbC51bndyYXBFbGVtZW50KGVsZW1lbnQpfS9zZXRfZGF0ZWAsICdQT1NUJywge1xuICAgIHllYXIsXG4gICAgbW9udGhPZlllYXIsXG4gICAgZGF5T2ZNb250aCxcbiAgfSk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVTZXRUaW1lID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlU2V0VGltZSAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtlbGVtZW50LCBob3VycywgbWludXRlc30gPSBhc3NlcnRSZXF1aXJlZE9wdGlvbnMob3B0cywgWydlbGVtZW50JywgJ2hvdXJzJywgJ21pbnV0ZXMnXSk7XG5cbiAgcmV0dXJuIGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKGAvYXBwaXVtL2V4ZWN1dGVfbW9iaWxlLyR7dXRpbC51bndyYXBFbGVtZW50KGVsZW1lbnQpfS9zZXRfdGltZWAsICdQT1NUJywge1xuICAgIGhvdXJzLFxuICAgIG1pbnV0ZXMsXG4gIH0pO1xufTtcblxuY29tbWFuZHMubW9iaWxlTmF2aWdhdGVUbyA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZU5hdmlnYXRlVG8gKG9wdHMgPSB7fSkge1xuICBsZXQge2VsZW1lbnQsIG1lbnVJdGVtSWR9ID0gYXNzZXJ0UmVxdWlyZWRPcHRpb25zKG9wdHMsIFsnbWVudUl0ZW1JZCcsICdlbGVtZW50J10pO1xuXG4gIGxldCBtZW51SXRlbUlkQXNOdW1iZXIgPSBwYXJzZUludChtZW51SXRlbUlkLCAxMCk7XG4gIGlmIChfLmlzTmFOKG1lbnVJdGVtSWRBc051bWJlcikgfHwgbWVudUl0ZW1JZEFzTnVtYmVyIDwgMCkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoYCdtZW51SXRlbUlkJyBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlci4gRm91bmQgJHttZW51SXRlbUlkfWApO1xuICB9XG5cbiAgcmV0dXJuIGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKGAvYXBwaXVtL2V4ZWN1dGVfbW9iaWxlLyR7dXRpbC51bndyYXBFbGVtZW50KGVsZW1lbnQpfS9uYXZpZ2F0ZV90b2AsICdQT1NUJywge1xuICAgIG1lbnVJdGVtSWRcbiAgfSk7XG59O1xuXG4vKipcbiAqIFJ1bnMgYSBjaGFpbiBvZiBFc3ByZXNzbyB3ZWIgYXRvbXMgKHNlZSBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS90cmFpbmluZy90ZXN0aW5nL2VzcHJlc3NvL3dlYiBmb3IgcmVmZXJlbmNlKVxuICpcbiAqIFRha2VzIEpTT04gb2YgdGhlIGZvcm1cbiAqXG4gKiB7XG4gKiAgIFwid2Vidmlld0VsXCI6IFwiPEVMRU1FTlRfSUQ+XCIsIC8vIG9wdGlvbmFsIHdlYnZpZXcgZWxlbWVudCB0byBvcGVyYXRlIG9uXG4gKiAgIFwiZm9yY2VKYXZhc2NyaXB0RW5hYmxlZFwiOiB0cnVlfGZhbHNlLCAvLyBpZiB3ZWJ2aWV3IGRpc2FibGVzIGphdmFzY3JpcHQsIHdlYmF0b21zIHdvbid0IHdvcmssIHRoaXMgZm9yY2VzIGl0XG4gKiAgIFwibWV0aG9kQ2hhaW5cIjogW1xuICogICAgIHtcIm5hbWVcIjogXCJtZXRob2ROYW1lXCIsIFwiYXRvbVwiOiB7XCJuYW1lXCI6IFwiYXRvbU5hbWVcIiwgXCJhcmdzXCI6IFtcImFyZzFcIiwgXCJhcmcyXCIsIC4uLl19fSxcbiAqICAgICAuLi5cbiAqICAgXVxuICogfVxuICpcbiAqL1xuY29tbWFuZHMubW9iaWxlV2ViQXRvbXMgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVXZWJBdG9tcyAob3B0cyA9IHt9KSB7XG4gIG9wdHMgPSBhc3NlcnRSZXF1aXJlZE9wdGlvbnMob3B0cywgWydtZXRob2RDaGFpbiddKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKGAvYXBwaXVtL2V4ZWN1dGVfbW9iaWxlL3dlYl9hdG9tc2AsICdQT1NUJywgb3B0cyk7XG59O1xuXG5jb21tYW5kcy5nZXREaXNwbGF5RGVuc2l0eSA9IGFzeW5jIGZ1bmN0aW9uIGdldERpc3BsYXlEZW5zaXR5ICgpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKCcvYXBwaXVtL2RldmljZS9kaXNwbGF5X2RlbnNpdHknLCAnR0VUJywge30pO1xufTtcblxuY29tbWFuZHMubW9iaWxlU2Nyb2xsVG9QYWdlID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlU2Nyb2xsVG9QYWdlIChvcHRzID0ge30pIHtcblxuICAvLyBWYWxpZGF0ZSB0aGUgcGFyYW1ldGVyc1xuICBjb25zdCBzY3JvbGxUb1R5cGVzID0gWydmaXJzdCcsICdsYXN0JywgJ2xlZnQnLCAncmlnaHQnXTtcbiAgY29uc3QgcmVzID0gdmFsaWRhdGUob3B0cywge1xuICAgIGVsZW1lbnQ6IHtwcmVzZW5jZTogdHJ1ZX0sXG4gICAgc2Nyb2xsVG86IHtcbiAgICAgIGluY2x1c2lvbjoge1xuICAgICAgICB3aXRoaW46IHNjcm9sbFRvVHlwZXMsXG4gICAgICAgIG1lc3NhZ2U6IGBcInNjcm9sbFRvXCIgbXVzdCBiZSBvbmUgb2YgXCIke3Njcm9sbFRvVHlwZXMuam9pbignLCAnKX1cIiBmb3VuZCAnJXt2YWx1ZX0nYCxcbiAgICAgIH1cbiAgICB9LFxuICAgIHNjcm9sbFRvUGFnZToge1xuICAgICAgbnVtZXJpY2FsaXR5OiB7XG4gICAgICAgIG9ubHlJbnRlZ2VyOiB0cnVlLFxuICAgICAgICBncmVhdGVyVGhhbk9yRXF1YWxUbzogMCxcbiAgICAgICAgbWVzc2FnZTogYFwic2Nyb2xsVG9QYWdlXCIgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyLiBGb3VuZCAnJXt2YWx1ZX0nYFxuICAgICAgfSxcbiAgICB9LFxuICB9KTtcbiAgaWYgKHV0aWwuaGFzVmFsdWUocmVzKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoYEludmFsaWQgc2Nyb2xsVG8gcGFyYW1ldGVyczogJHtKU09OLnN0cmluZ2lmeShyZXMpfWApO1xuICB9XG5cbiAgY29uc3Qge2VsZW1lbnQsIHNjcm9sbFRvLCBzY3JvbGxUb1BhZ2UsIHNtb290aFNjcm9sbH0gPSBvcHRzO1xuXG4gIGlmICh1dGlsLmhhc1ZhbHVlKHNjcm9sbFRvKSAmJiB1dGlsLmhhc1ZhbHVlKHNjcm9sbFRvUGFnZSkpIHtcbiAgICB0aGlzLmxvZy53YXJuKGAnc2Nyb2xsVG8nIGFuZCAnc2Nyb2xsVG9QYWdlJyB3aGVyZSBib3RoIHByb3ZpZGVkLiBEZWZhdWx0aW5nIHRvICdzY3JvbGxUbydgKTtcbiAgfVxuXG4gIHJldHVybiBhd2FpdCB0aGlzLmVzcHJlc3NvLmp3cHJveHkuY29tbWFuZChgL2FwcGl1bS9leGVjdXRlX21vYmlsZS8ke3V0aWwudW53cmFwRWxlbWVudChlbGVtZW50KX0vc2Nyb2xsX3RvX3BhZ2VgLCAnUE9TVCcsIHtcbiAgICBzY3JvbGxUbyxcbiAgICBzY3JvbGxUb1BhZ2UsXG4gICAgc21vb3RoU2Nyb2xsLFxuICB9KTtcbn07XG5cblxuLyoqXG4gKiAgQVBJIHRvIGludm9rZSBtZXRob2RzIGRlZmluZWQgaW4gQW5kcm9pZCBhcHAuXG4gKlxuICogIEV4YW1wbGUgZGF0YVxuICogIHtcbiAqICAgdGFyZ2V0OiAnYWN0aXZpdHknLFxuICogICBtZXRob2RzOlxuICogICAgICAgICBbXG4gKiAgICAgICAgICAge1xuICogICAgICAgICAgICAgICBuYW1lOiBcInNvbWVNZXRob2RcIixcbiAqICAgICAgICAgICB9LFxuICogICAgICAgICAgIHtcbiAqICAgICAgICAgICAgICAgbmFtZTogXCJhbm90aGVyTWV0aG9kXCIsXG4gKiAgICAgICAgICAgICAgIGFyZ3M6XG4gKiAgICAgICAgICAgICAgICAgICBbXG4gKiAgICAgICAgICAgICAgICAgICAgICAge3ZhbHVlOiBcIkxvbFwiLCB0eXBlOiAnamF2YS5sYW5nLkNoYXJTZXF1ZW5jZSd9LFxuICogICAgICAgICAgICAgICAgICAgICAgIHt2YWx1ZTogMSwgdHlwZTogJ2ludCd9XG4gKiAgICAgICAgICAgICAgICAgICBdXG4gKiAgICAgICAgICAgfVxuICogICAgICAgICBdXG4gKiB9XG4gKlxuICogSW4gYWJvdmUgZXhhbXBsZSwgbWV0aG9kIFwic29tZU1ldGhvZFwiIHdpbGwgYmUgaW52b2tlZCBvbiAnYWN0aXZpdHknLiBPbiB0aGUgcmVzdWx0LCBcImFub3RoZXJNZXRob2RcIiB3aWxsIGJlIGludm9rZWRcbiAqICBcInRhcmdldFwiIGNhbiBiZSBlaXRoZXIgJ2FjdGl2aXR5JywgJ2FwcGxpY2F0aW9uJyBvciAnZWxlbWVudCdcbiAqICBJZiB0YXJnZXQgaXMgc2V0IHRvICdhcHBsaWNhdGlvbicsIG1ldGhvZHMgd2lsbCBiZSBpbnZva2VkIG9uIGFwcGxpY2F0aW9uIGNsYXNzXG4gKiAgSWYgdGFyZ2V0IGlzIHNldCB0byAnYWN0aXZpdHknLCBtZXRob2RzIHdpbGwgYmUgaW52b2tlZCBvbiBjdXJyZW50IGFjdGl2aXR5XG4gKiAgSWYgdGFyZ2V0IGlzIHNldCB0byAnZWxlbWVudCcsICdlbGVtZW50SWQnIG11c3QgYmUgc3BlY2lmaWVkXG4gKlxuICogLSBPbmx5ICdQdWJsaWMnIG1ldGhvZHMgY2FuIGJlIGludm9rZWQuICgnb3BlbicgbW9kaWZpcmUgaXMgbmVjZXNzYXJ5IGluIEtvdGxpbilcbiAqIC0gZm9sbG93aW5nIHByaW1pdGl2ZSB0eXBlcyBhcmUgc3VwcG9ydGVkOiBcImludFwiLCBcImJvb2xlYW5cIiwgXCJieXRlXCIsIFwic2hvcnRcIiwgXCJsb25nXCIsIFwiZmxvYXRcIiwgXCJjaGFyXCJcbiAqIC0gIE5vbi1wcmltaXRpdmUgdHlwZXMgd2l0aCBmdWxseSBxdWFsaWZpZWQgbmFtZSBcImphdmEubGFuZy4qXCIgaXMgYWxzbyBzdXBwb3J0ZWQ6XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVnLiBcImphdmEubGFuZy5DaGFyU2VxdWVuY2VcIiwgXCJqYXZhLmxhbmcuU3RyaW5nXCIsIFwiamF2YS5sYW5nLkludGVnZXJcIiwgXCJqYXZhLmxhbmcuRmxvYXRcIixcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJqYXZhLmxhbmcuRG91YmxlXCIsIFwiamF2YS5sYW5nLkJvb2xlYW5cIiwgXCJqYXZhLmxhbmcuTG9uZ1wiLCBcImphdmEubGFuZy5TaG9ydFwiLFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImphdmEubGFuZy5DaGFyYWN0ZXJcIiBldGMuLi5cbiAqXG4gKlxuICogQHRocm93cyAge0Vycm9yfSBpZiB0YXJnZXQgaXMgbm90ICdhY3Rpdml0eScgb3IgJ2FwcGxpY2F0aW9uJ1xuICogQHRocm93cyAge0Vycm9yfSBpZiBhIG1ldGhvZCBpcyBub3QgZm91bmQgd2l0aCBnaXZlbiBhcmd1bWVudCB0eXBlc1xuICpcbiAqIEByZXR1cm4geyp9IHRoZSByZXN1bHQgb2YgdGhlIGxhc3QgbWV0aG9kIGluIHRoZSBpbnZvY2F0aW9uIGNoYWluLiBJZiBtZXRob2QgcmV0dXJuIHR5cGUgaXMgdm9pZCwgdGhlbiBcIjxWT0lEPlwiIHdpbGwgYmUgcmV0dXJuZWRcbiAqXG4gKi9cbmNvbW1hbmRzLm1vYmlsZUJhY2tkb29yID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlQmFja2Rvb3IgKG9wdHMgPSB7fSkge1xuICBhc3NlcnRSZXF1aXJlZE9wdGlvbnMob3B0cywgWyd0YXJnZXQnLCAnbWV0aG9kcyddKTtcbiAgY29uc3Qge3RhcmdldCwgbWV0aG9kc30gPSBvcHRzO1xuICBpZiAodGFyZ2V0ID09PSAnZWxlbWVudCcpIHtcbiAgICBhc3NlcnRSZXF1aXJlZE9wdGlvbnMob3B0cywgWydlbGVtZW50SWQnXSk7XG4gIH1cbiAgY29uc3Qge2VsZW1lbnRJZDogdGFyZ2V0RWxlbWVudH0gPSBvcHRzO1xuICByZXR1cm4gYXdhaXQgdGhpcy5lc3ByZXNzby5qd3Byb3h5LmNvbW1hbmQoYC9hcHBpdW0vZXhlY3V0ZV9tb2JpbGUvYmFja2Rvb3JgLCAnUE9TVCcsIHt0YXJnZXQsIG1ldGhvZHMsIHRhcmdldEVsZW1lbnR9KTtcbn07XG5cbi8qKlxuICogIEV4ZWN1dGUgVWlBdXRvbWF0b3IyIGNvbW1hbmRzIHRvIGRyaXZlIG91dCBvZiBhcHAgYXJlYXMuXG4gKiAgc3RyYXRlZ3kgY2FuIGJlIG9uZSBvZjogXCJjbGF6elwiLCBcInJlc1wiLCBcInRleHRcIiwgXCJ0ZXh0Q29udGFpbnNcIiwgXCJ0ZXh0RW5kc1dpdGhcIiwgXCJ0ZXh0U3RhcnRzV2l0aFwiLFxuICogICAgICAgICAgICAgICAgICAgICAgICAgIFwiZGVzY1wiLCBcImRlc2NDb250YWluc1wiLCBcImRlc2NFbmRzV2l0aFwiLCBcImRlc2NTdGFydHNXaXRoXCIsIFwicGtnXCJcbiAqXG4gKiAgYWN0aW9uIGNhbiBiZSBvbmUgb2Y6IFwiY2xpY2tcIiwgXCJsb25nQ2xpY2tcIiwgXCJnZXRUZXh0XCIsIFwiZ2V0Q29udGVudERlc2NyaXB0aW9uXCIsIFwiZ2V0Q2xhc3NOYW1lXCIsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgIFwiZ2V0UmVzb3VyY2VOYW1lXCIsIFwiZ2V0VmlzaWJsZUJvdW5kc1wiLCBcImdldFZpc2libGVDZW50ZXJcIiwgXCJnZXRBcHBsaWNhdGlvblBhY2thZ2VcIixcbiAqICAgICAgICAgICAgICAgICAgICAgICAgXCJnZXRDaGlsZENvdW50XCIsIFwiY2xlYXJcIiwgXCJpc0NoZWNrYWJsZVwiLCBcImlzQ2hlY2tlZFwiLCBcImlzQ2xpY2thYmxlXCIsIFwiaXNFbmFibGVkXCIsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgIFwiaXNGb2N1c2FibGVcIiwgXCJpc0ZvY3VzZWRcIiwgXCJpc0xvbmdDbGlja2FibGVcIiwgXCJpc1Njcm9sbGFibGVcIiwgXCJpc1NlbGVjdGVkXCJcbiAqL1xuY29tbWFuZHMubW9iaWxlVWlhdXRvbWF0b3IgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVVaWF1dG9tYXRvciAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtzdHJhdGVneSwgbG9jYXRvciwgYWN0aW9uLCBpbmRleH0gPSBhc3NlcnRSZXF1aXJlZE9wdGlvbnMob3B0cywgWydzdHJhdGVneScsICdsb2NhdG9yJywgJ2FjdGlvbiddKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKGAvYXBwaXVtL2V4ZWN1dGVfbW9iaWxlL3VpYXV0b21hdG9yYCwgJ1BPU1QnLCB7c3RyYXRlZ3ksIGxvY2F0b3IsIGluZGV4LCBhY3Rpb259KTtcbn07XG5cbi8qKlxuICogIEV4ZWN1dGUgVWlBdXRvbWF0b3IyIGNvbW1hbmQgdG8gcmV0dXJuIHRoZSBVSSBkdW1wIHdoZW4gQVVUIGlzIGluIGJhY2tncm91bmQuXG4gKiBAdGhyb3dzICB7RXJyb3J9IGlmIHVpYXV0b21hdG9yIHZpZXcgZHVtcCBpcyB1bnN1Y2Nlc3NmdWxcbiAqIEByZXR1cm5zIHtzdHJpbmd9IHVpYXV0b21hdG9yIERPTSB4bWwgYXMgc3RyaW5nXG4gKi9cbmNvbW1hbmRzLm1vYmlsZVVpYXV0b21hdG9yUGFnZVNvdXJjZSA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVVpYXV0b21hdG9yUGFnZVNvdXJjZSAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLmVzcHJlc3NvLmp3cHJveHkuY29tbWFuZChgL2FwcGl1bS9leGVjdXRlX21vYmlsZS91aWF1dG9tYXRvcl9wYWdlX3NvdXJjZWAsICdHRVQnKTtcbn07XG5cbi8qKlxuICogIEZsYXNoIHRoZSBlbGVtZW50IHdpdGggZ2l2ZW4gaWQuXG4gKiAgZHVyYXRpb25NaWxsaXMgYW5kIHJlcGVhdENvdW50IGFyZSBvcHRpb25hbFxuICpcbiAqL1xuY29tbWFuZHMubW9iaWxlRmxhc2hFbGVtZW50ID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlRmxhc2hFbGVtZW50IChvcHRzID0ge30pIHtcbiAgY29uc3Qge2VsZW1lbnR9ID0gYXNzZXJ0UmVxdWlyZWRPcHRpb25zKG9wdHMsIFsnZWxlbWVudCddKTtcbiAgY29uc3Qge2R1cmF0aW9uTWlsbGlzLCByZXBlYXRDb3VudH0gPSBvcHRzO1xuICByZXR1cm4gYXdhaXQgdGhpcy5lc3ByZXNzby5qd3Byb3h5LmNvbW1hbmQoYC9hcHBpdW0vZXhlY3V0ZV9tb2JpbGUvJHt1dGlsLnVud3JhcEVsZW1lbnQoZWxlbWVudCl9L2ZsYXNoYCwgJ1BPU1QnLCB7XG4gICAgZHVyYXRpb25NaWxsaXMsXG4gICAgcmVwZWF0Q291bnRcbiAgfSk7XG59O1xuXG4vKipcbiAqIFBlcmZvcm0gYSAnR2VuZXJhbENsaWNrQWN0aW9uJyAoaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2FuZHJvaWR4L3Rlc3QvZXNwcmVzc28vYWN0aW9uL0dlbmVyYWxDbGlja0FjdGlvbilcbiAqL1xuY29tbWFuZHMubW9iaWxlQ2xpY2tBY3Rpb24gPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVDbGlja0FjdGlvbiAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtlbGVtZW50LCB0YXBwZXIsIGNvb3JkaW5hdGVzUHJvdmlkZXIsIHByZWNpc2lvbkRlc2NyaWJlcixcbiAgICAgICAgIGlucHV0RGV2aWNlLCBidXR0b25TdGF0ZX0gPSBhc3NlcnRSZXF1aXJlZE9wdGlvbnMob3B0cywgWydlbGVtZW50J10pO1xuICByZXR1cm4gYXdhaXQgdGhpcy5lc3ByZXNzby5qd3Byb3h5LmNvbW1hbmQoYC9hcHBpdW0vZXhlY3V0ZV9tb2JpbGUvJHt1dGlsLnVud3JhcEVsZW1lbnQoZWxlbWVudCl9L2NsaWNrX2FjdGlvbmAsICdQT1NUJywge1xuICAgIHRhcHBlciwgY29vcmRpbmF0ZXNQcm92aWRlciwgcHJlY2lzaW9uRGVzY3JpYmVyLCBpbnB1dERldmljZSwgYnV0dG9uU3RhdGVcbiAgfSk7XG59O1xuXG5jb21tYW5kcy51cGRhdGVTZXR0aW5ncyA9IGFzeW5jIGZ1bmN0aW9uIHVwZGF0ZVNldHRpbmdzIChzZXR0aW5ncykge1xuICByZXR1cm4gYXdhaXQgdGhpcy5lc3ByZXNzby5qd3Byb3h5LmNvbW1hbmQoYC9hcHBpdW0vc2V0dGluZ3NgLCAnUE9TVCcsIHsgc2V0dGluZ3MgfSk7XG59O1xuXG5jb21tYW5kcy5nZXRTZXR0aW5ncyA9IGFzeW5jIGZ1bmN0aW9uIGdldFNldHRpbmdzICgpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKGAvYXBwaXVtL3NldHRpbmdzYCwgJ0dFVCcpO1xufTtcblxuLy8gU3RvcCBwcm94eWluZyB0byBhbnkgQ2hyb21lZHJpdmVyIGFuZCByZWRpcmVjdCB0byBFc3ByZXNzb1xuaGVscGVycy5zdXNwZW5kQ2hyb21lZHJpdmVyUHJveHkgPSBmdW5jdGlvbiBzdXNwZW5kQ2hyb21lZHJpdmVyUHJveHkgKCkge1xuICB0aGlzLmNocm9tZWRyaXZlciA9IG51bGw7XG4gIHRoaXMucHJveHlSZXFSZXMgPSB0aGlzLmVzcHJlc3NvLnByb3h5UmVxUmVzLmJpbmQodGhpcy5lc3ByZXNzbyk7XG4gIHRoaXMucHJveHlDb21tYW5kID0gdGhpcy5lc3ByZXNzby5wcm94eUNvbW1hbmQuYmluZCh0aGlzLmVzcHJlc3NvKTtcbiAgdGhpcy5qd3BQcm94eUFjdGl2ZSA9IHRydWU7XG59O1xuXG4vKipcbiAqICBTdGFydHMgdGhlIGdpdmVuIGFjdGl2aXR5IHdpdGggaW50ZW50IG9wdGlvbnMsIGFjdGl2aXR5IG9wdGlvbnMgYW5kIGxvY2FsZS5cbiAqICBBY3Rpdml0eSBjb3VsZCBvbmx5IGJlIGV4ZWN1dGVkIGluIHNjb3BlIG9mIHRoZSBjdXJyZW50IGFwcCBwYWNrYWdlLlxuICpcbiAqICBhcHBBY3Rpdml0eSBpcyBtYW5kYXRvcnlcbiAqXG4gKiAgbG9jYWxlLCBvcHRpb25hbEludGVudEFyZ3VtZW50cywgb3B0aW9uYWxBY3Rpdml0eUFyZ3VtZW50cyBhcmUgb3B0aW9uYWxcbiAqL1xuY29tbWFuZHMubW9iaWxlU3RhcnRBY3Rpdml0eSA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVN0YXJ0QWN0aXZpdHkgKG9wdHMgPSB7fSkge1xuICBjb25zdCBhcHBQYWNrYWdlID0gdGhpcy5jYXBzLmFwcFBhY2thZ2U7XG4gIGNvbnN0IHtcbiAgICBhcHBBY3Rpdml0eSxcbiAgICBsb2NhbGUsXG4gICAgb3B0aW9uYWxJbnRlbnRBcmd1bWVudHMsXG4gICAgb3B0aW9uYWxBY3Rpdml0eUFyZ3VtZW50c1xuICB9ID0gYXNzZXJ0UmVxdWlyZWRPcHRpb25zKG9wdHMsIFsnYXBwQWN0aXZpdHknXSk7XG4gIHJldHVybiBhd2FpdCB0aGlzLmVzcHJlc3NvLmp3cHJveHkuY29tbWFuZChgL2FwcGl1bS9kZXZpY2Uvc3RhcnRfYWN0aXZpdHlgLCAnUE9TVCcsIHtcbiAgICBhcHBQYWNrYWdlLFxuICAgIGFwcEFjdGl2aXR5LFxuICAgIGxvY2FsZSxcbiAgICBvcHRpb25hbEludGVudEFyZ3VtZW50cyxcbiAgICBvcHRpb25hbEFjdGl2aXR5QXJndW1lbnRzXG4gIH0pO1xufTtcblxuY29tbWFuZHMuc3RhcnRBY3Rpdml0eSA9IGFzeW5jIGZ1bmN0aW9uIHN0YXJ0QWN0aXZpdHkgKGFwcFBhY2thZ2UsIGFwcEFjdGl2aXR5LFxuICBhcHBXYWl0UGFja2FnZSwgYXBwV2FpdEFjdGl2aXR5KSB7XG4gIC8vIGludGVudEFjdGlvbiwgaW50ZW50Q2F0ZWdvcnksIGludGVudEZsYWdzLCBvcHRpb25hbEludGVudEFyZ3VtZW50cywgZG9udFN0b3BBcHBPblJlc2V0XG4gIC8vIHBhcmFtZXRlcnMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgRXNwcmVzc29cbiAgYXBwUGFja2FnZSA9IGFwcFBhY2thZ2UgfHwgdGhpcy5jYXBzLmFwcFBhY2thZ2U7XG4gIGFwcFdhaXRQYWNrYWdlID0gYXBwV2FpdFBhY2thZ2UgfHwgYXBwUGFja2FnZTtcbiAgYXBwQWN0aXZpdHkgPSBxdWFsaWZ5QWN0aXZpdHlOYW1lKGFwcEFjdGl2aXR5LCBhcHBQYWNrYWdlKTtcbiAgYXBwV2FpdEFjdGl2aXR5ID0gcXVhbGlmeUFjdGl2aXR5TmFtZShhcHBXYWl0QWN0aXZpdHkgfHwgYXBwQWN0aXZpdHksIGFwcFdhaXRQYWNrYWdlKTtcbiAgdGhpcy5sb2cuZGVidWcoYFN0YXJ0aW5nIGFjdGl2aXR5ICcke2FwcEFjdGl2aXR5fScgZm9yIHBhY2thZ2UgJyR7YXBwUGFja2FnZX0nYCk7XG4gIGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKGAvYXBwaXVtL2RldmljZS9zdGFydF9hY3Rpdml0eWAsICdQT1NUJywge1xuICAgIGFwcFBhY2thZ2UsXG4gICAgYXBwQWN0aXZpdHksXG4gIH0pO1xuICBhd2FpdCB0aGlzLmFkYi53YWl0Rm9yQWN0aXZpdHkoYXBwV2FpdFBhY2thZ2UsIGFwcFdhaXRBY3Rpdml0eSk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVEaXNtaXNzQXV0b2ZpbGwgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVEaXNtaXNzQXV0b2ZpbGwgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7ZWxlbWVudH0gPSBhc3NlcnRSZXF1aXJlZE9wdGlvbnMob3B0cywgWydlbGVtZW50J10pO1xuICBhd2FpdCB0aGlzLmVzcHJlc3NvLmp3cHJveHkuY29tbWFuZChcbiAgICBgL3Nlc3Npb24vOnNlc3Npb25JZC9hcHBpdW0vZXhlY3V0ZV9tb2JpbGUvJHt1dGlsLnVud3JhcEVsZW1lbnQoZWxlbWVudCl9L2Rpc21pc3NfYXV0b2ZpbGxgLCAnUE9TVCcsIHt9KTtcbn07XG5cbk9iamVjdC5hc3NpZ24oZXh0ZW5zaW9ucywgY29tbWFuZHMsIGhlbHBlcnMpO1xuZXhwb3J0IHsgY29tbWFuZHMsIGhlbHBlcnMgfTtcbmV4cG9ydCBkZWZhdWx0IGV4dGVuc2lvbnM7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUEsSUFBQUEsT0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsUUFBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsU0FBQSxHQUFBSCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUcsT0FBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUksTUFBQSxHQUFBSixPQUFBO0FBRUEsTUFBTUssUUFBUSxHQUFHLENBQUMsQ0FBQztFQUFFQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0VBQUVDLFVBQVUsR0FBRyxDQUFDLENBQUM7QUFBQ0MsT0FBQSxDQUFBRixPQUFBLEdBQUFBLE9BQUE7QUFBQUUsT0FBQSxDQUFBSCxRQUFBLEdBQUFBLFFBQUE7QUFFbkQsU0FBU0kscUJBQXFCQSxDQUFFQyxPQUFPLEVBQUVDLG1CQUFtQixFQUFFO0VBQzVELElBQUksQ0FBQ0MsZUFBQyxDQUFDQyxPQUFPLENBQUNGLG1CQUFtQixDQUFDLEVBQUU7SUFDbkNBLG1CQUFtQixHQUFHLENBQUNBLG1CQUFtQixDQUFDO0VBQzdDO0VBQ0EsTUFBTUcsa0JBQWtCLEdBQUdGLGVBQUMsQ0FBQ0csSUFBSSxDQUFDTCxPQUFPLENBQUM7RUFDMUMsTUFBTU0sa0JBQWtCLEdBQUdKLGVBQUMsQ0FBQ0ssVUFBVSxDQUFDTixtQkFBbUIsRUFBRUcsa0JBQWtCLENBQUM7RUFDaEYsSUFBSUYsZUFBQyxDQUFDTSxPQUFPLENBQUNGLGtCQUFrQixDQUFDLEVBQUU7SUFDakMsT0FBT04sT0FBTztFQUNoQjtFQUNBLE1BQU0sSUFBSVMsS0FBSyxDQUFFLHVDQUFzQ0MsSUFBSSxDQUFDQyxTQUFTLENBQUNMLGtCQUFrQixDQUFFLElBQUcsR0FDMUYsMkJBQTBCSSxJQUFJLENBQUNDLFNBQVMsQ0FBQ1Asa0JBQWtCLENBQUUsRUFBQyxDQUFDO0FBQ3BFO0FB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
|
|
313
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfc3VwcG9ydCIsIl92YWxpZGF0ZSIsIl9kcml2ZXIiLCJfdXRpbHMiLCJjb21tYW5kcyIsImhlbHBlcnMiLCJleHRlbnNpb25zIiwiZXhwb3J0cyIsInJlcXVpcmVPcHRpb25zIiwib3B0aW9ucyIsInJlcXVpcmVkT3B0aW9uTmFtZXMiLCJfIiwiaXNBcnJheSIsInByZXNlbnRPcHRpb25OYW1lcyIsImtleXMiLCJtaXNzaW5nT3B0aW9uTmFtZXMiLCJkaWZmZXJlbmNlIiwiaXNFbXB0eSIsIkVycm9yIiwiSlNPTiIsInN0cmluZ2lmeSIsImxhdW5jaEFwcCIsImVycm9ycyIsIlVuc3VwcG9ydGVkT3BlcmF0aW9uRXJyb3IiLCJjbG9zZUFwcCIsInJlc2V0IiwiZ2V0Q2xpcGJvYXJkIiwiYWRiIiwiZ2V0QXBpTGV2ZWwiLCJlc3ByZXNzbyIsImp3cHJveHkiLCJjb21tYW5kIiwibW9iaWxlUGVyZm9ybUVkaXRvckFjdGlvbiIsIm9wdHMiLCJhY3Rpb24iLCJtb2JpbGVTd2lwZSIsImRpcmVjdGlvbiIsImVsZW1lbnQiLCJzd2lwZXIiLCJzdGFydENvb3JkaW5hdGVzIiwiZW5kQ29vcmRpbmF0ZXMiLCJwcmVjaXNpb25EZXNjcmliZXIiLCJ1dGlsIiwidW53cmFwRWxlbWVudCIsIm1vYmlsZVByZXNzS2V5Iiwia2V5Y29kZSIsIm1ldGFzdGF0ZSIsImZsYWdzIiwiaXNMb25nUHJlc3MiLCJtb2JpbGVHZXREZXZpY2VJbmZvIiwibW9iaWxlSXNUb2FzdFZpc2libGUiLCJ0ZXh0IiwiaXNSZWdleHAiLCJoYXNWYWx1ZSIsIkludmFsaWRBcmd1bWVudEVycm9yIiwibW9iaWxlT3BlbkRyYXdlciIsImdyYXZpdHkiLCJtb2JpbGVDbG9zZURyYXdlciIsIm1vYmlsZVNldERhdGUiLCJ5ZWFyIiwibW9udGhPZlllYXIiLCJkYXlPZk1vbnRoIiwibW9iaWxlU2V0VGltZSIsImhvdXJzIiwibWludXRlcyIsIm1vYmlsZU5hdmlnYXRlVG8iLCJtZW51SXRlbUlkIiwibWVudUl0ZW1JZEFzTnVtYmVyIiwicGFyc2VJbnQiLCJpc05hTiIsIm1vYmlsZVdlYkF0b21zIiwiZ2V0RGlzcGxheURlbnNpdHkiLCJtb2JpbGVTY3JvbGxUb1BhZ2UiLCJzY3JvbGxUb1R5cGVzIiwicmVzIiwidmFsaWRhdGUiLCJwcmVzZW5jZSIsInNjcm9sbFRvIiwiaW5jbHVzaW9uIiwid2l0aGluIiwibWVzc2FnZSIsImpvaW4iLCJzY3JvbGxUb1BhZ2UiLCJudW1lcmljYWxpdHkiLCJvbmx5SW50ZWdlciIsImdyZWF0ZXJUaGFuT3JFcXVhbFRvIiwic21vb3RoU2Nyb2xsIiwibG9nIiwid2FybiIsIm1vYmlsZUJhY2tkb29yIiwidGFyZ2V0IiwibWV0aG9kcyIsImVsZW1lbnRJZCIsInRhcmdldEVsZW1lbnQiLCJtb2JpbGVVaWF1dG9tYXRvciIsInN0cmF0ZWd5IiwibG9jYXRvciIsImluZGV4IiwibW9iaWxlVWlhdXRvbWF0b3JQYWdlU291cmNlIiwibW9iaWxlRmxhc2hFbGVtZW50IiwiZHVyYXRpb25NaWxsaXMiLCJyZXBlYXRDb3VudCIsIm1vYmlsZUNsaWNrQWN0aW9uIiwidGFwcGVyIiwiY29vcmRpbmF0ZXNQcm92aWRlciIsImlucHV0RGV2aWNlIiwiYnV0dG9uU3RhdGUiLCJ1cGRhdGVTZXR0aW5ncyIsInNldHRpbmdzIiwiZ2V0U2V0dGluZ3MiLCJzdXNwZW5kQ2hyb21lZHJpdmVyUHJveHkiLCJjaHJvbWVkcml2ZXIiLCJwcm94eVJlcVJlcyIsImJpbmQiLCJwcm94eUNvbW1hbmQiLCJqd3BQcm94eUFjdGl2ZSIsIm1vYmlsZVN0YXJ0QWN0aXZpdHkiLCJhcHBQYWNrYWdlIiwiY2FwcyIsImFwcEFjdGl2aXR5IiwibG9jYWxlIiwib3B0aW9uYWxJbnRlbnRBcmd1bWVudHMiLCJvcHRpb25hbEFjdGl2aXR5QXJndW1lbnRzIiwic3RhcnRBY3Rpdml0eSIsImFwcFdhaXRQYWNrYWdlIiwiYXBwV2FpdEFjdGl2aXR5IiwicXVhbGlmeUFjdGl2aXR5TmFtZSIsImRlYnVnIiwid2FpdEZvckFjdGl2aXR5IiwibW9iaWxlRGlzbWlzc0F1dG9maWxsIiwiT2JqZWN0IiwiYXNzaWduIiwiX2RlZmF1bHQiLCJkZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2NvbW1hbmRzL2dlbmVyYWwuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IHV0aWwgfSBmcm9tICdhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgdmFsaWRhdGUgZnJvbSAndmFsaWRhdGUuanMnO1xuaW1wb3J0IHsgZXJyb3JzIH0gZnJvbSAnYXBwaXVtL2RyaXZlcic7XG5pbXBvcnQgeyBxdWFsaWZ5QWN0aXZpdHlOYW1lIH0gZnJvbSAnLi4vdXRpbHMnO1xuXG5jb25zdCBjb21tYW5kcyA9IHt9LCBoZWxwZXJzID0ge30sIGV4dGVuc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gcmVxdWlyZU9wdGlvbnMgKG9wdGlvbnMsIHJlcXVpcmVkT3B0aW9uTmFtZXMpIHtcbiAgaWYgKCFfLmlzQXJyYXkocmVxdWlyZWRPcHRpb25OYW1lcykpIHtcbiAgICByZXF1aXJlZE9wdGlvbk5hbWVzID0gW3JlcXVpcmVkT3B0aW9uTmFtZXNdO1xuICB9XG4gIGNvbnN0IHByZXNlbnRPcHRpb25OYW1lcyA9IF8ua2V5cyhvcHRpb25zKTtcbiAgY29uc3QgbWlzc2luZ09wdGlvbk5hbWVzID0gXy5kaWZmZXJlbmNlKHJlcXVpcmVkT3B0aW9uTmFtZXMsIHByZXNlbnRPcHRpb25OYW1lcyk7XG4gIGlmIChfLmlzRW1wdHkobWlzc2luZ09wdGlvbk5hbWVzKSkge1xuICAgIHJldHVybiBvcHRpb25zO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihgVGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSByZXF1aXJlZDogJHtKU09OLnN0cmluZ2lmeShtaXNzaW5nT3B0aW9uTmFtZXMpfS4gYCArXG4gICAgYFlvdSBoYXZlIG9ubHkgcHJvdmlkZWQ6ICR7SlNPTi5zdHJpbmdpZnkocHJlc2VudE9wdGlvbk5hbWVzKX1gKTtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlcXVpcmUtYXdhaXRcbmNvbW1hbmRzLmxhdW5jaEFwcCA9IGFzeW5jIGZ1bmN0aW9uIGxhdW5jaEFwcCAoKSB7XG4gIHRocm93IG5ldyBlcnJvcnMuVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvcignUGxlYXNlIGNyZWF0ZSBhIG5ldyBzZXNzaW9uIGluIG9yZGVyIHRvIGxhdW5jaCB0aGUgYXBwbGljYXRpb24gdW5kZXIgdGVzdCcpO1xufTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlcXVpcmUtYXdhaXRcbmNvbW1hbmRzLmNsb3NlQXBwID0gYXN5bmMgZnVuY3Rpb24gY2xvc2VBcHAgKCkge1xuICB0aHJvdyBuZXcgZXJyb3JzLlVuc3VwcG9ydGVkT3BlcmF0aW9uRXJyb3IoJ1BsZWFzZSBxdWl0IHRoZSBzZXNzaW9uIGluIG9yZGVyIHRvIGNsb3NlIHRoZSBhcHBsaWNhdGlvbiB1bmRlciB0ZXN0Jyk7XG59O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVxdWlyZS1hd2FpdFxuY29tbWFuZHMucmVzZXQgPSBhc3luYyBmdW5jdGlvbiByZXNldCAoKSB7XG4gIHRocm93IG5ldyBlcnJvcnMuVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvcihcbiAgICAnUGxlYXNlIHF1aXQgdGhlIHNlc3Npb24gYW5kIGNyZWF0ZSBhIG5ldyBvbmUgJyArXG4gICAgJ2luIG9yZGVyIHRvIGNsb3NlIGFuZCBsYXVuY2ggdGhlIGFwcGxpY2F0aW9uIHVuZGVyIHRlc3QnKTtcbn07XG5cbmNvbW1hbmRzLmdldENsaXBib2FyZCA9IGFzeW5jIGZ1bmN0aW9uIGdldENsaXBib2FyZCAoKSB7XG4gIHJldHVybiAoYXdhaXQgdGhpcy5hZGIuZ2V0QXBpTGV2ZWwoKSA8IDI5KVxuICAgID8gKGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKCcvYXBwaXVtL2RldmljZS9nZXRfY2xpcGJvYXJkJywgJ1BPU1QnLCB7fSkpXG4gICAgOiAoYXdhaXQgdGhpcy5hZGIuZ2V0Q2xpcGJvYXJkKCkpO1xufTtcblxuY29tbWFuZHMubW9iaWxlUGVyZm9ybUVkaXRvckFjdGlvbiA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVBlcmZvcm1FZGl0b3JBY3Rpb24gKG9wdHMgPSB7fSkge1xuICBjb25zdCB7YWN0aW9ufSA9IHJlcXVpcmVPcHRpb25zKG9wdHMsIFsnYWN0aW9uJ10pO1xuICByZXR1cm4gYXdhaXQgdGhpcy5lc3ByZXNzby5qd3Byb3h5LmNvbW1hbmQoJy9hcHBpdW0vZGV2aWNlL3BlcmZvcm1fZWRpdG9yX2FjdGlvbicsICdQT1NUJywge2FjdGlvbn0pO1xufTtcblxuY29tbWFuZHMubW9iaWxlU3dpcGUgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVTd2lwZSAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtkaXJlY3Rpb24sIGVsZW1lbnQsIHN3aXBlciwgc3RhcnRDb29yZGluYXRlcywgZW5kQ29vcmRpbmF0ZXMsIHByZWNpc2lvbkRlc2NyaWJlcn0gPSByZXF1aXJlT3B0aW9ucyhvcHRzLCBbJ2VsZW1lbnQnXSk7XG4gIHJldHVybiBhd2FpdCB0aGlzLmVzcHJlc3NvLmp3cHJveHkuY29tbWFuZChgL2FwcGl1bS9leGVjdXRlX21vYmlsZS8ke3V0aWwudW53cmFwRWxlbWVudChlbGVtZW50KX0vc3dpcGVgLCAnUE9TVCcsIHtcbiAgICBkaXJlY3Rpb24sIGVsZW1lbnQsIHN3aXBlciwgc3RhcnRDb29yZGluYXRlcywgZW5kQ29vcmRpbmF0ZXMsIHByZWNpc2lvbkRlc2NyaWJlclxuICB9KTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gUHJlc3NLZXlPcHRpb25zXG4gKiBAcHJvcGVydHkge251bWJlcn0ga2V5Y29kZSBBIHZhbGlkIEFuZHJvaWQga2V5IGNvZGUuIFNlZSBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvYW5kcm9pZC92aWV3L0tleUV2ZW50XG4gKiBmb3IgdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIGtleSBjb2Rlc1xuICogQHByb3BlcnR5IHtudW1iZXI/fSBtZXRhc3RhdGUgQW4gaW50ZWdlciBpbiB3aGljaCBlYWNoIGJpdCBzZXQgdG8gMSByZXByZXNlbnRzIGEgcHJlc3NlZCBtZXRhIGtleS4gU2VlXG4gKiBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvYW5kcm9pZC92aWV3L0tleUV2ZW50IGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcHJvcGVydHkge251bWJlcj99IGZsYWdzIEZsYWdzIGZvciB0aGUgcGFydGljdWxhciBrZXkgZXZlbnQuIFNlZVxuICogaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2FuZHJvaWQvdmlldy9LZXlFdmVudCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHByb3BlcnR5IHtib29sZWFufSBpc0xvbmdQcmVzcyBbZmFsc2VdIFdoZXRoZXIgdG8gZW11bGF0ZSBsb25nIGtleSBwcmVzc1xuICovXG5cbi8qKlxuICogRW11bGF0ZXMga2V5IHByZXNzIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7UHJlc3NLZXlPcHRpb25zfSBvcHRzXG4gKi9cbmNvbW1hbmRzLm1vYmlsZVByZXNzS2V5ID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlUHJlc3NLZXkgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7a2V5Y29kZSwgbWV0YXN0YXRlLCBmbGFncywgaXNMb25nUHJlc3N9ID0gcmVxdWlyZU9wdGlvbnMob3B0cywgWydrZXljb2RlJ10pO1xuICBhd2FpdCB0aGlzLmVzcHJlc3NvLmp3cHJveHkuY29tbWFuZChgL2FwcGl1bS9kZXZpY2UvJHtpc0xvbmdQcmVzcyA/ICdsb25nXycgOiAnJ31wcmVzc19rZXljb2RlYCwgJ1BPU1QnLCB7XG4gICAga2V5Y29kZSwgbWV0YXN0YXRlLCBmbGFnc1xuICB9KTtcbn07XG5cbmNvbW1hbmRzLm1vYmlsZUdldERldmljZUluZm8gPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVHZXREZXZpY2VJbmZvICgpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKCcvYXBwaXVtL2RldmljZS9pbmZvJywgJ0dFVCcpO1xufTtcblxuY29tbWFuZHMubW9iaWxlSXNUb2FzdFZpc2libGUgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVJc1RvYXN0VmlzaWJsZSAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHt0ZXh0LCBpc1JlZ2V4cH0gPSBvcHRzO1xuICBpZiAoIXV0aWwuaGFzVmFsdWUodGV4dCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKGAndGV4dCcgYXJndW1lbnQgaXMgbWFuZGF0b3J5YCk7XG4gIH1cbiAgcmV0dXJuIGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKCcvYXBwaXVtL2V4ZWN1dGVfbW9iaWxlL2lzX3RvYXN0X2Rpc3BsYXllZCcsICdQT1NUJywge1xuICAgIHRleHQsXG4gICAgaXNSZWdleHAsXG4gIH0pO1xufTtcblxuY29tbWFuZHMubW9iaWxlT3BlbkRyYXdlciA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZU9wZW5EcmF3ZXIgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7ZWxlbWVudCwgZ3Jhdml0eX0gPSByZXF1aXJlT3B0aW9ucyhvcHRzLCBbJ2VsZW1lbnQnXSk7XG5cbiAgcmV0dXJuIGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKGAvYXBwaXVtL2V4ZWN1dGVfbW9iaWxlLyR7dXRpbC51bndyYXBFbGVtZW50KGVsZW1lbnQpfS9vcGVuX2RyYXdlcmAsICdQT1NUJywge1xuICAgIGdyYXZpdHlcbiAgfSk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVDbG9zZURyYXdlciA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUNsb3NlRHJhd2VyIChvcHRzID0ge30pIHtcbiAgY29uc3Qge2VsZW1lbnQsIGdyYXZpdHl9ID0gcmVxdWlyZU9wdGlvbnMob3B0cywgWydlbGVtZW50J10pO1xuXG4gIHJldHVybiBhd2FpdCB0aGlzLmVzcHJlc3NvLmp3cHJveHkuY29tbWFuZChgL2FwcGl1bS9leGVjdXRlX21vYmlsZS8ke3V0aWwudW53cmFwRWxlbWVudChlbGVtZW50KX0vY2xvc2VfZHJhd2VyYCwgJ1BPU1QnLCB7XG4gICAgZ3Jhdml0eVxuICB9KTtcbn07XG5cbmNvbW1hbmRzLm1vYmlsZVNldERhdGUgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVTZXREYXRlIChvcHRzID0ge30pIHtcbiAgY29uc3Qge2VsZW1lbnQsIHllYXIsIG1vbnRoT2ZZZWFyLCBkYXlPZk1vbnRofSA9IHJlcXVpcmVPcHRpb25zKG9wdHMsIFsnZWxlbWVudCcsICd5ZWFyJywgJ21vbnRoT2ZZZWFyJywgJ2RheU9mTW9udGgnXSk7XG5cbiAgcmV0dXJuIGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKGAvYXBwaXVtL2V4ZWN1dGVfbW9iaWxlLyR7dXRpbC51bndyYXBFbGVtZW50KGVsZW1lbnQpfS9zZXRfZGF0ZWAsICdQT1NUJywge1xuICAgIHllYXIsXG4gICAgbW9udGhPZlllYXIsXG4gICAgZGF5T2ZNb250aCxcbiAgfSk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVTZXRUaW1lID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlU2V0VGltZSAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtlbGVtZW50LCBob3VycywgbWludXRlc30gPSByZXF1aXJlT3B0aW9ucyhvcHRzLCBbJ2VsZW1lbnQnLCAnaG91cnMnLCAnbWludXRlcyddKTtcblxuICByZXR1cm4gYXdhaXQgdGhpcy5lc3ByZXNzby5qd3Byb3h5LmNvbW1hbmQoYC9hcHBpdW0vZXhlY3V0ZV9tb2JpbGUvJHt1dGlsLnVud3JhcEVsZW1lbnQoZWxlbWVudCl9L3NldF90aW1lYCwgJ1BPU1QnLCB7XG4gICAgaG91cnMsXG4gICAgbWludXRlcyxcbiAgfSk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVOYXZpZ2F0ZVRvID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlTmF2aWdhdGVUbyAob3B0cyA9IHt9KSB7XG4gIGxldCB7ZWxlbWVudCwgbWVudUl0ZW1JZH0gPSByZXF1aXJlT3B0aW9ucyhvcHRzLCBbJ21lbnVJdGVtSWQnLCAnZWxlbWVudCddKTtcblxuICBsZXQgbWVudUl0ZW1JZEFzTnVtYmVyID0gcGFyc2VJbnQobWVudUl0ZW1JZCwgMTApO1xuICBpZiAoXy5pc05hTihtZW51SXRlbUlkQXNOdW1iZXIpIHx8IG1lbnVJdGVtSWRBc051bWJlciA8IDApIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKGAnbWVudUl0ZW1JZCcgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIuIEZvdW5kICR7bWVudUl0ZW1JZH1gKTtcbiAgfVxuXG4gIHJldHVybiBhd2FpdCB0aGlzLmVzcHJlc3NvLmp3cHJveHkuY29tbWFuZChgL2FwcGl1bS9leGVjdXRlX21vYmlsZS8ke3V0aWwudW53cmFwRWxlbWVudChlbGVtZW50KX0vbmF2aWdhdGVfdG9gLCAnUE9TVCcsIHtcbiAgICBtZW51SXRlbUlkXG4gIH0pO1xufTtcblxuLyoqXG4gKiBSdW5zIGEgY2hhaW4gb2YgRXNwcmVzc28gd2ViIGF0b21zIChzZWUgaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vdHJhaW5pbmcvdGVzdGluZy9lc3ByZXNzby93ZWIgZm9yIHJlZmVyZW5jZSlcbiAqXG4gKiBUYWtlcyBKU09OIG9mIHRoZSBmb3JtXG4gKlxuICoge1xuICogICBcIndlYnZpZXdFbFwiOiBcIjxFTEVNRU5UX0lEPlwiLCAvLyBvcHRpb25hbCB3ZWJ2aWV3IGVsZW1lbnQgdG8gb3BlcmF0ZSBvblxuICogICBcImZvcmNlSmF2YXNjcmlwdEVuYWJsZWRcIjogdHJ1ZXxmYWxzZSwgLy8gaWYgd2VidmlldyBkaXNhYmxlcyBqYXZhc2NyaXB0LCB3ZWJhdG9tcyB3b24ndCB3b3JrLCB0aGlzIGZvcmNlcyBpdFxuICogICBcIm1ldGhvZENoYWluXCI6IFtcbiAqICAgICB7XCJuYW1lXCI6IFwibWV0aG9kTmFtZVwiLCBcImF0b21cIjoge1wibmFtZVwiOiBcImF0b21OYW1lXCIsIFwiYXJnc1wiOiBbXCJhcmcxXCIsIFwiYXJnMlwiLCAuLi5dfX0sXG4gKiAgICAgLi4uXG4gKiAgIF1cbiAqIH1cbiAqXG4gKi9cbmNvbW1hbmRzLm1vYmlsZVdlYkF0b21zID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlV2ViQXRvbXMgKG9wdHMgPSB7fSkge1xuICBvcHRzID0gcmVxdWlyZU9wdGlvbnMob3B0cywgWydtZXRob2RDaGFpbiddKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKGAvYXBwaXVtL2V4ZWN1dGVfbW9iaWxlL3dlYl9hdG9tc2AsICdQT1NUJywgb3B0cyk7XG59O1xuXG5jb21tYW5kcy5nZXREaXNwbGF5RGVuc2l0eSA9IGFzeW5jIGZ1bmN0aW9uIGdldERpc3BsYXlEZW5zaXR5ICgpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKCcvYXBwaXVtL2RldmljZS9kaXNwbGF5X2RlbnNpdHknLCAnR0VUJywge30pO1xufTtcblxuY29tbWFuZHMubW9iaWxlU2Nyb2xsVG9QYWdlID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlU2Nyb2xsVG9QYWdlIChvcHRzID0ge30pIHtcblxuICAvLyBWYWxpZGF0ZSB0aGUgcGFyYW1ldGVyc1xuICBjb25zdCBzY3JvbGxUb1R5cGVzID0gWydmaXJzdCcsICdsYXN0JywgJ2xlZnQnLCAncmlnaHQnXTtcbiAgY29uc3QgcmVzID0gdmFsaWRhdGUob3B0cywge1xuICAgIGVsZW1lbnQ6IHtwcmVzZW5jZTogdHJ1ZX0sXG4gICAgc2Nyb2xsVG86IHtcbiAgICAgIGluY2x1c2lvbjoge1xuICAgICAgICB3aXRoaW46IHNjcm9sbFRvVHlwZXMsXG4gICAgICAgIG1lc3NhZ2U6IGBcInNjcm9sbFRvXCIgbXVzdCBiZSBvbmUgb2YgXCIke3Njcm9sbFRvVHlwZXMuam9pbignLCAnKX1cIiBmb3VuZCAnJXt2YWx1ZX0nYCxcbiAgICAgIH1cbiAgICB9LFxuICAgIHNjcm9sbFRvUGFnZToge1xuICAgICAgbnVtZXJpY2FsaXR5OiB7XG4gICAgICAgIG9ubHlJbnRlZ2VyOiB0cnVlLFxuICAgICAgICBncmVhdGVyVGhhbk9yRXF1YWxUbzogMCxcbiAgICAgICAgbWVzc2FnZTogYFwic2Nyb2xsVG9QYWdlXCIgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyLiBGb3VuZCAnJXt2YWx1ZX0nYFxuICAgICAgfSxcbiAgICB9LFxuICB9KTtcbiAgaWYgKHV0aWwuaGFzVmFsdWUocmVzKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoYEludmFsaWQgc2Nyb2xsVG8gcGFyYW1ldGVyczogJHtKU09OLnN0cmluZ2lmeShyZXMpfWApO1xuICB9XG5cbiAgY29uc3Qge2VsZW1lbnQsIHNjcm9sbFRvLCBzY3JvbGxUb1BhZ2UsIHNtb290aFNjcm9sbH0gPSBvcHRzO1xuXG4gIGlmICh1dGlsLmhhc1ZhbHVlKHNjcm9sbFRvKSAmJiB1dGlsLmhhc1ZhbHVlKHNjcm9sbFRvUGFnZSkpIHtcbiAgICB0aGlzLmxvZy53YXJuKGAnc2Nyb2xsVG8nIGFuZCAnc2Nyb2xsVG9QYWdlJyB3aGVyZSBib3RoIHByb3ZpZGVkLiBEZWZhdWx0aW5nIHRvICdzY3JvbGxUbydgKTtcbiAgfVxuXG4gIHJldHVybiBhd2FpdCB0aGlzLmVzcHJlc3NvLmp3cHJveHkuY29tbWFuZChgL2FwcGl1bS9leGVjdXRlX21vYmlsZS8ke3V0aWwudW53cmFwRWxlbWVudChlbGVtZW50KX0vc2Nyb2xsX3RvX3BhZ2VgLCAnUE9TVCcsIHtcbiAgICBzY3JvbGxUbyxcbiAgICBzY3JvbGxUb1BhZ2UsXG4gICAgc21vb3RoU2Nyb2xsLFxuICB9KTtcbn07XG5cblxuLyoqXG4gKiAgQVBJIHRvIGludm9rZSBtZXRob2RzIGRlZmluZWQgaW4gQW5kcm9pZCBhcHAuXG4gKlxuICogIEV4YW1wbGUgZGF0YVxuICogIHtcbiAqICAgdGFyZ2V0OiAnYWN0aXZpdHknLFxuICogICBtZXRob2RzOlxuICogICAgICAgICBbXG4gKiAgICAgICAgICAge1xuICogICAgICAgICAgICAgICBuYW1lOiBcInNvbWVNZXRob2RcIixcbiAqICAgICAgICAgICB9LFxuICogICAgICAgICAgIHtcbiAqICAgICAgICAgICAgICAgbmFtZTogXCJhbm90aGVyTWV0aG9kXCIsXG4gKiAgICAgICAgICAgICAgIGFyZ3M6XG4gKiAgICAgICAgICAgICAgICAgICBbXG4gKiAgICAgICAgICAgICAgICAgICAgICAge3ZhbHVlOiBcIkxvbFwiLCB0eXBlOiAnamF2YS5sYW5nLkNoYXJTZXF1ZW5jZSd9LFxuICogICAgICAgICAgICAgICAgICAgICAgIHt2YWx1ZTogMSwgdHlwZTogJ2ludCd9XG4gKiAgICAgICAgICAgICAgICAgICBdXG4gKiAgICAgICAgICAgfVxuICogICAgICAgICBdXG4gKiB9XG4gKlxuICogSW4gYWJvdmUgZXhhbXBsZSwgbWV0aG9kIFwic29tZU1ldGhvZFwiIHdpbGwgYmUgaW52b2tlZCBvbiAnYWN0aXZpdHknLiBPbiB0aGUgcmVzdWx0LCBcImFub3RoZXJNZXRob2RcIiB3aWxsIGJlIGludm9rZWRcbiAqICBcInRhcmdldFwiIGNhbiBiZSBlaXRoZXIgJ2FjdGl2aXR5JywgJ2FwcGxpY2F0aW9uJyBvciAnZWxlbWVudCdcbiAqICBJZiB0YXJnZXQgaXMgc2V0IHRvICdhcHBsaWNhdGlvbicsIG1ldGhvZHMgd2lsbCBiZSBpbnZva2VkIG9uIGFwcGxpY2F0aW9uIGNsYXNzXG4gKiAgSWYgdGFyZ2V0IGlzIHNldCB0byAnYWN0aXZpdHknLCBtZXRob2RzIHdpbGwgYmUgaW52b2tlZCBvbiBjdXJyZW50IGFjdGl2aXR5XG4gKiAgSWYgdGFyZ2V0IGlzIHNldCB0byAnZWxlbWVudCcsICdlbGVtZW50SWQnIG11c3QgYmUgc3BlY2lmaWVkXG4gKlxuICogLSBPbmx5ICdQdWJsaWMnIG1ldGhvZHMgY2FuIGJlIGludm9rZWQuICgnb3BlbicgbW9kaWZpcmUgaXMgbmVjZXNzYXJ5IGluIEtvdGxpbilcbiAqIC0gZm9sbG93aW5nIHByaW1pdGl2ZSB0eXBlcyBhcmUgc3VwcG9ydGVkOiBcImludFwiLCBcImJvb2xlYW5cIiwgXCJieXRlXCIsIFwic2hvcnRcIiwgXCJsb25nXCIsIFwiZmxvYXRcIiwgXCJjaGFyXCJcbiAqIC0gIE5vbi1wcmltaXRpdmUgdHlwZXMgd2l0aCBmdWxseSBxdWFsaWZpZWQgbmFtZSBcImphdmEubGFuZy4qXCIgaXMgYWxzbyBzdXBwb3J0ZWQ6XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVnLiBcImphdmEubGFuZy5DaGFyU2VxdWVuY2VcIiwgXCJqYXZhLmxhbmcuU3RyaW5nXCIsIFwiamF2YS5sYW5nLkludGVnZXJcIiwgXCJqYXZhLmxhbmcuRmxvYXRcIixcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJqYXZhLmxhbmcuRG91YmxlXCIsIFwiamF2YS5sYW5nLkJvb2xlYW5cIiwgXCJqYXZhLmxhbmcuTG9uZ1wiLCBcImphdmEubGFuZy5TaG9ydFwiLFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImphdmEubGFuZy5DaGFyYWN0ZXJcIiBldGMuLi5cbiAqXG4gKlxuICogQHRocm93cyAge0Vycm9yfSBpZiB0YXJnZXQgaXMgbm90ICdhY3Rpdml0eScgb3IgJ2FwcGxpY2F0aW9uJ1xuICogQHRocm93cyAge0Vycm9yfSBpZiBhIG1ldGhvZCBpcyBub3QgZm91bmQgd2l0aCBnaXZlbiBhcmd1bWVudCB0eXBlc1xuICpcbiAqIEByZXR1cm4geyp9IHRoZSByZXN1bHQgb2YgdGhlIGxhc3QgbWV0aG9kIGluIHRoZSBpbnZvY2F0aW9uIGNoYWluLiBJZiBtZXRob2QgcmV0dXJuIHR5cGUgaXMgdm9pZCwgdGhlbiBcIjxWT0lEPlwiIHdpbGwgYmUgcmV0dXJuZWRcbiAqXG4gKi9cbmNvbW1hbmRzLm1vYmlsZUJhY2tkb29yID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlQmFja2Rvb3IgKG9wdHMgPSB7fSkge1xuICByZXF1aXJlT3B0aW9ucyhvcHRzLCBbJ3RhcmdldCcsICdtZXRob2RzJ10pO1xuICBjb25zdCB7dGFyZ2V0LCBtZXRob2RzfSA9IG9wdHM7XG4gIGlmICh0YXJnZXQgPT09ICdlbGVtZW50Jykge1xuICAgIHJlcXVpcmVPcHRpb25zKG9wdHMsIFsnZWxlbWVudElkJ10pO1xuICB9XG4gIGNvbnN0IHtlbGVtZW50SWQ6IHRhcmdldEVsZW1lbnR9ID0gb3B0cztcbiAgcmV0dXJuIGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKGAvYXBwaXVtL2V4ZWN1dGVfbW9iaWxlL2JhY2tkb29yYCwgJ1BPU1QnLCB7dGFyZ2V0LCBtZXRob2RzLCB0YXJnZXRFbGVtZW50fSk7XG59O1xuXG4vKipcbiAqICBFeGVjdXRlIFVpQXV0b21hdG9yMiBjb21tYW5kcyB0byBkcml2ZSBvdXQgb2YgYXBwIGFyZWFzLlxuICogIHN0cmF0ZWd5IGNhbiBiZSBvbmUgb2Y6IFwiY2xhenpcIiwgXCJyZXNcIiwgXCJ0ZXh0XCIsIFwidGV4dENvbnRhaW5zXCIsIFwidGV4dEVuZHNXaXRoXCIsIFwidGV4dFN0YXJ0c1dpdGhcIixcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICBcImRlc2NcIiwgXCJkZXNjQ29udGFpbnNcIiwgXCJkZXNjRW5kc1dpdGhcIiwgXCJkZXNjU3RhcnRzV2l0aFwiLCBcInBrZ1wiXG4gKlxuICogIGFjdGlvbiBjYW4gYmUgb25lIG9mOiBcImNsaWNrXCIsIFwibG9uZ0NsaWNrXCIsIFwiZ2V0VGV4dFwiLCBcImdldENvbnRlbnREZXNjcmlwdGlvblwiLCBcImdldENsYXNzTmFtZVwiLFxuICogICAgICAgICAgICAgICAgICAgICAgICBcImdldFJlc291cmNlTmFtZVwiLCBcImdldFZpc2libGVCb3VuZHNcIiwgXCJnZXRWaXNpYmxlQ2VudGVyXCIsIFwiZ2V0QXBwbGljYXRpb25QYWNrYWdlXCIsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgIFwiZ2V0Q2hpbGRDb3VudFwiLCBcImNsZWFyXCIsIFwiaXNDaGVja2FibGVcIiwgXCJpc0NoZWNrZWRcIiwgXCJpc0NsaWNrYWJsZVwiLCBcImlzRW5hYmxlZFwiLFxuICogICAgICAgICAgICAgICAgICAgICAgICBcImlzRm9jdXNhYmxlXCIsIFwiaXNGb2N1c2VkXCIsIFwiaXNMb25nQ2xpY2thYmxlXCIsIFwiaXNTY3JvbGxhYmxlXCIsIFwiaXNTZWxlY3RlZFwiXG4gKi9cbmNvbW1hbmRzLm1vYmlsZVVpYXV0b21hdG9yID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlVWlhdXRvbWF0b3IgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7c3RyYXRlZ3ksIGxvY2F0b3IsIGFjdGlvbiwgaW5kZXh9ID0gcmVxdWlyZU9wdGlvbnMob3B0cywgWydzdHJhdGVneScsICdsb2NhdG9yJywgJ2FjdGlvbiddKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKGAvYXBwaXVtL2V4ZWN1dGVfbW9iaWxlL3VpYXV0b21hdG9yYCwgJ1BPU1QnLCB7c3RyYXRlZ3ksIGxvY2F0b3IsIGluZGV4LCBhY3Rpb259KTtcbn07XG5cbi8qKlxuICogIEV4ZWN1dGUgVWlBdXRvbWF0b3IyIGNvbW1hbmQgdG8gcmV0dXJuIHRoZSBVSSBkdW1wIHdoZW4gQVVUIGlzIGluIGJhY2tncm91bmQuXG4gKiBAdGhyb3dzICB7RXJyb3J9IGlmIHVpYXV0b21hdG9yIHZpZXcgZHVtcCBpcyB1bnN1Y2Nlc3NmdWxcbiAqIEByZXR1cm5zIHtzdHJpbmd9IHVpYXV0b21hdG9yIERPTSB4bWwgYXMgc3RyaW5nXG4gKi9cbmNvbW1hbmRzLm1vYmlsZVVpYXV0b21hdG9yUGFnZVNvdXJjZSA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVVpYXV0b21hdG9yUGFnZVNvdXJjZSAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLmVzcHJlc3NvLmp3cHJveHkuY29tbWFuZChgL2FwcGl1bS9leGVjdXRlX21vYmlsZS91aWF1dG9tYXRvcl9wYWdlX3NvdXJjZWAsICdHRVQnKTtcbn07XG5cbi8qKlxuICogIEZsYXNoIHRoZSBlbGVtZW50IHdpdGggZ2l2ZW4gaWQuXG4gKiAgZHVyYXRpb25NaWxsaXMgYW5kIHJlcGVhdENvdW50IGFyZSBvcHRpb25hbFxuICpcbiAqL1xuY29tbWFuZHMubW9iaWxlRmxhc2hFbGVtZW50ID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlRmxhc2hFbGVtZW50IChvcHRzID0ge30pIHtcbiAgY29uc3Qge2VsZW1lbnR9ID0gcmVxdWlyZU9wdGlvbnMob3B0cywgWydlbGVtZW50J10pO1xuICBjb25zdCB7ZHVyYXRpb25NaWxsaXMsIHJlcGVhdENvdW50fSA9IG9wdHM7XG4gIHJldHVybiBhd2FpdCB0aGlzLmVzcHJlc3NvLmp3cHJveHkuY29tbWFuZChgL2FwcGl1bS9leGVjdXRlX21vYmlsZS8ke3V0aWwudW53cmFwRWxlbWVudChlbGVtZW50KX0vZmxhc2hgLCAnUE9TVCcsIHtcbiAgICBkdXJhdGlvbk1pbGxpcyxcbiAgICByZXBlYXRDb3VudFxuICB9KTtcbn07XG5cbi8qKlxuICogUGVyZm9ybSBhICdHZW5lcmFsQ2xpY2tBY3Rpb24nIChodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvYW5kcm9pZHgvdGVzdC9lc3ByZXNzby9hY3Rpb24vR2VuZXJhbENsaWNrQWN0aW9uKVxuICovXG5jb21tYW5kcy5tb2JpbGVDbGlja0FjdGlvbiA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUNsaWNrQWN0aW9uIChvcHRzID0ge30pIHtcbiAgY29uc3Qge2VsZW1lbnQsIHRhcHBlciwgY29vcmRpbmF0ZXNQcm92aWRlciwgcHJlY2lzaW9uRGVzY3JpYmVyLFxuICAgICAgICAgaW5wdXREZXZpY2UsIGJ1dHRvblN0YXRlfSA9IHJlcXVpcmVPcHRpb25zKG9wdHMsIFsnZWxlbWVudCddKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKGAvYXBwaXVtL2V4ZWN1dGVfbW9iaWxlLyR7dXRpbC51bndyYXBFbGVtZW50KGVsZW1lbnQpfS9jbGlja19hY3Rpb25gLCAnUE9TVCcsIHtcbiAgICB0YXBwZXIsIGNvb3JkaW5hdGVzUHJvdmlkZXIsIHByZWNpc2lvbkRlc2NyaWJlciwgaW5wdXREZXZpY2UsIGJ1dHRvblN0YXRlXG4gIH0pO1xufTtcblxuY29tbWFuZHMudXBkYXRlU2V0dGluZ3MgPSBhc3luYyBmdW5jdGlvbiB1cGRhdGVTZXR0aW5ncyAoc2V0dGluZ3MpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKGAvYXBwaXVtL3NldHRpbmdzYCwgJ1BPU1QnLCB7IHNldHRpbmdzIH0pO1xufTtcblxuY29tbWFuZHMuZ2V0U2V0dGluZ3MgPSBhc3luYyBmdW5jdGlvbiBnZXRTZXR0aW5ncyAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLmVzcHJlc3NvLmp3cHJveHkuY29tbWFuZChgL2FwcGl1bS9zZXR0aW5nc2AsICdHRVQnKTtcbn07XG5cbi8vIFN0b3AgcHJveHlpbmcgdG8gYW55IENocm9tZWRyaXZlciBhbmQgcmVkaXJlY3QgdG8gRXNwcmVzc29cbmhlbHBlcnMuc3VzcGVuZENocm9tZWRyaXZlclByb3h5ID0gZnVuY3Rpb24gc3VzcGVuZENocm9tZWRyaXZlclByb3h5ICgpIHtcbiAgdGhpcy5jaHJvbWVkcml2ZXIgPSBudWxsO1xuICB0aGlzLnByb3h5UmVxUmVzID0gdGhpcy5lc3ByZXNzby5wcm94eVJlcVJlcy5iaW5kKHRoaXMuZXNwcmVzc28pO1xuICB0aGlzLnByb3h5Q29tbWFuZCA9IHRoaXMuZXNwcmVzc28ucHJveHlDb21tYW5kLmJpbmQodGhpcy5lc3ByZXNzbyk7XG4gIHRoaXMuandwUHJveHlBY3RpdmUgPSB0cnVlO1xufTtcblxuLyoqXG4gKiAgU3RhcnRzIHRoZSBnaXZlbiBhY3Rpdml0eSB3aXRoIGludGVudCBvcHRpb25zLCBhY3Rpdml0eSBvcHRpb25zIGFuZCBsb2NhbGUuXG4gKiAgQWN0aXZpdHkgY291bGQgb25seSBiZSBleGVjdXRlZCBpbiBzY29wZSBvZiB0aGUgY3VycmVudCBhcHAgcGFja2FnZS5cbiAqXG4gKiAgYXBwQWN0aXZpdHkgaXMgbWFuZGF0b3J5XG4gKlxuICogIGxvY2FsZSwgb3B0aW9uYWxJbnRlbnRBcmd1bWVudHMsIG9wdGlvbmFsQWN0aXZpdHlBcmd1bWVudHMgYXJlIG9wdGlvbmFsXG4gKi9cbmNvbW1hbmRzLm1vYmlsZVN0YXJ0QWN0aXZpdHkgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVTdGFydEFjdGl2aXR5IChvcHRzID0ge30pIHtcbiAgY29uc3QgYXBwUGFja2FnZSA9IHRoaXMuY2Fwcy5hcHBQYWNrYWdlO1xuICBjb25zdCB7XG4gICAgYXBwQWN0aXZpdHksXG4gICAgbG9jYWxlLFxuICAgIG9wdGlvbmFsSW50ZW50QXJndW1lbnRzLFxuICAgIG9wdGlvbmFsQWN0aXZpdHlBcmd1bWVudHNcbiAgfSA9IHJlcXVpcmVPcHRpb25zKG9wdHMsIFsnYXBwQWN0aXZpdHknXSk7XG4gIHJldHVybiBhd2FpdCB0aGlzLmVzcHJlc3NvLmp3cHJveHkuY29tbWFuZChgL2FwcGl1bS9kZXZpY2Uvc3RhcnRfYWN0aXZpdHlgLCAnUE9TVCcsIHtcbiAgICBhcHBQYWNrYWdlLFxuICAgIGFwcEFjdGl2aXR5LFxuICAgIGxvY2FsZSxcbiAgICBvcHRpb25hbEludGVudEFyZ3VtZW50cyxcbiAgICBvcHRpb25hbEFjdGl2aXR5QXJndW1lbnRzXG4gIH0pO1xufTtcblxuY29tbWFuZHMuc3RhcnRBY3Rpdml0eSA9IGFzeW5jIGZ1bmN0aW9uIHN0YXJ0QWN0aXZpdHkgKGFwcFBhY2thZ2UsIGFwcEFjdGl2aXR5LFxuICBhcHBXYWl0UGFja2FnZSwgYXBwV2FpdEFjdGl2aXR5KSB7XG4gIC8vIGludGVudEFjdGlvbiwgaW50ZW50Q2F0ZWdvcnksIGludGVudEZsYWdzLCBvcHRpb25hbEludGVudEFyZ3VtZW50cywgZG9udFN0b3BBcHBPblJlc2V0XG4gIC8vIHBhcmFtZXRlcnMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgRXNwcmVzc29cbiAgYXBwUGFja2FnZSA9IGFwcFBhY2thZ2UgfHwgdGhpcy5jYXBzLmFwcFBhY2thZ2U7XG4gIGFwcFdhaXRQYWNrYWdlID0gYXBwV2FpdFBhY2thZ2UgfHwgYXBwUGFja2FnZTtcbiAgYXBwQWN0aXZpdHkgPSBxdWFsaWZ5QWN0aXZpdHlOYW1lKGFwcEFjdGl2aXR5LCBhcHBQYWNrYWdlKTtcbiAgYXBwV2FpdEFjdGl2aXR5ID0gcXVhbGlmeUFjdGl2aXR5TmFtZShhcHBXYWl0QWN0aXZpdHkgfHwgYXBwQWN0aXZpdHksIGFwcFdhaXRQYWNrYWdlKTtcbiAgdGhpcy5sb2cuZGVidWcoYFN0YXJ0aW5nIGFjdGl2aXR5ICcke2FwcEFjdGl2aXR5fScgZm9yIHBhY2thZ2UgJyR7YXBwUGFja2FnZX0nYCk7XG4gIGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKGAvYXBwaXVtL2RldmljZS9zdGFydF9hY3Rpdml0eWAsICdQT1NUJywge1xuICAgIGFwcFBhY2thZ2UsXG4gICAgYXBwQWN0aXZpdHksXG4gIH0pO1xuICBhd2FpdCB0aGlzLmFkYi53YWl0Rm9yQWN0aXZpdHkoYXBwV2FpdFBhY2thZ2UsIGFwcFdhaXRBY3Rpdml0eSk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVEaXNtaXNzQXV0b2ZpbGwgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVEaXNtaXNzQXV0b2ZpbGwgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7ZWxlbWVudH0gPSByZXF1aXJlT3B0aW9ucyhvcHRzLCBbJ2VsZW1lbnQnXSk7XG4gIGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKFxuICAgIGAvc2Vzc2lvbi86c2Vzc2lvbklkL2FwcGl1bS9leGVjdXRlX21vYmlsZS8ke3V0aWwudW53cmFwRWxlbWVudChlbGVtZW50KX0vZGlzbWlzc19hdXRvZmlsbGAsICdQT1NUJywge30pO1xufTtcblxuT2JqZWN0LmFzc2lnbihleHRlbnNpb25zLCBjb21tYW5kcywgaGVscGVycyk7XG5leHBvcnQgeyBjb21tYW5kcywgaGVscGVycyB9O1xuZXhwb3J0IGRlZmF1bHQgZXh0ZW5zaW9ucztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQSxJQUFBQSxPQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxRQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxTQUFBLEdBQUFILHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRyxPQUFBLEdBQUFILE9BQUE7QUFDQSxJQUFBSSxNQUFBLEdBQUFKLE9BQUE7QUFFQSxNQUFNSyxRQUFRLEdBQUcsQ0FBQyxDQUFDO0VBQUVDLE9BQU8sR0FBRyxDQUFDLENBQUM7RUFBRUMsVUFBVSxHQUFHLENBQUMsQ0FBQztBQUFDQyxPQUFBLENBQUFGLE9BQUEsR0FBQUEsT0FBQTtBQUFBRSxPQUFBLENBQUFILFFBQUEsR0FBQUEsUUFBQTtBQUVuRCxTQUFTSSxjQUFjQSxDQUFFQyxPQUFPLEVBQUVDLG1CQUFtQixFQUFFO0VBQ3JELElBQUksQ0FBQ0MsZUFBQyxDQUFDQyxPQUFPLENBQUNGLG1CQUFtQixDQUFDLEVBQUU7SUFDbkNBLG1CQUFtQixHQUFHLENBQUNBLG1CQUFtQixDQUFDO0VBQzdDO0VBQ0EsTUFBTUcsa0JBQWtCLEdBQUdGLGVBQUMsQ0FBQ0csSUFBSSxDQUFDTCxPQUFPLENBQUM7RUFDMUMsTUFBTU0sa0JBQWtCLEdBQUdKLGVBQUMsQ0FBQ0ssVUFBVSxDQUFDTixtQkFBbUIsRUFBRUcsa0JBQWtCLENBQUM7RUFDaEYsSUFBSUYsZUFBQyxDQUFDTSxPQUFPLENBQUNGLGtCQUFrQixDQUFDLEVBQUU7SUFDakMsT0FBT04sT0FBTztFQUNoQjtFQUNBLE1BQU0sSUFBSVMsS0FBSyxDQUFFLHVDQUFzQ0MsSUFBSSxDQUFDQyxTQUFTLENBQUNMLGtCQUFrQixDQUFFLElBQUcs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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"general.js","names":["_lodash","_interopRequireDefault","require","_support","_validate","_driver","_utils","commands","helpers","extensions","exports","assertRequiredOptions","options","requiredOptionNames","_","isArray","presentOptionNames","keys","missingOptionNames","difference","isEmpty","Error","JSON","stringify","launchApp","errors","UnsupportedOperationError","closeApp","reset","getClipboard","adb","getApiLevel","espresso","jwproxy","command","mobilePerformEditorAction","opts","action","mobileSwipe","direction","element","swiper","startCoordinates","endCoordinates","precisionDescriber","util","unwrapElement","mobileGetDeviceInfo","mobileIsToastVisible","text","isRegexp","hasValue","InvalidArgumentError","mobileOpenDrawer","gravity","mobileCloseDrawer","mobileSetDate","year","monthOfYear","dayOfMonth","mobileSetTime","hours","minutes","mobileNavigateTo","menuItemId","menuItemIdAsNumber","parseInt","isNaN","mobileWebAtoms","getDisplayDensity","mobileScrollToPage","scrollToTypes","res","validate","presence","scrollTo","inclusion","within","message","join","scrollToPage","numericality","onlyInteger","greaterThanOrEqualTo","smoothScroll","log","warn","mobileBackdoor","target","methods","elementId","targetElement","mobileUiautomator","strategy","locator","index","mobileUiautomatorPageSource","mobileFlashElement","durationMillis","repeatCount","mobileClickAction","tapper","coordinatesProvider","inputDevice","buttonState","updateSettings","settings","getSettings","suspendChromedriverProxy","chromedriver","proxyReqRes","bind","proxyCommand","jwpProxyActive","mobileStartActivity","appPackage","caps","appActivity","locale","optionalIntentArguments","optionalActivityArguments","startActivity","appWaitPackage","appWaitActivity","qualifyActivityName","debug","waitForActivity","mobileDismissAutofill","Object","assign","_default","default"],"sources":["../../../lib/commands/general.js"],"sourcesContent":["import _ from 'lodash';\nimport { util } from 'appium/support';\nimport validate from 'validate.js';\nimport { errors } from 'appium/driver';\nimport { qualifyActivityName } from '../utils';\n\nconst commands = {}, helpers = {}, extensions = {};\n\nfunction assertRequiredOptions (options, requiredOptionNames) {\n if (!_.isArray(requiredOptionNames)) {\n requiredOptionNames = [requiredOptionNames];\n }\n const presentOptionNames = _.keys(options);\n const missingOptionNames = _.difference(requiredOptionNames, presentOptionNames);\n if (_.isEmpty(missingOptionNames)) {\n return options;\n }\n throw new Error(`The following options are required: ${JSON.stringify(missingOptionNames)}. ` +\n `You have only provided: ${JSON.stringify(presentOptionNames)}`);\n}\n\n// eslint-disable-next-line require-await\ncommands.launchApp = async function launchApp () {\n throw new errors.UnsupportedOperationError('Please create a new session in order to launch the application under test');\n};\n\n// eslint-disable-next-line require-await\ncommands.closeApp = async function closeApp () {\n throw new errors.UnsupportedOperationError('Please quit the session in order to close the application under test');\n};\n\n// eslint-disable-next-line require-await\ncommands.reset = async function reset () {\n throw new errors.UnsupportedOperationError(\n 'Please quit the session and create a new one ' +\n 'in order to close and launch the application under test');\n};\n\ncommands.getClipboard = async function getClipboard () {\n return (await this.adb.getApiLevel() < 29)\n ? (await this.espresso.jwproxy.command('/appium/device/get_clipboard', 'POST', {}))\n : (await this.adb.getClipboard());\n};\n\ncommands.mobilePerformEditorAction = async function mobilePerformEditorAction (opts = {}) {\n const {action} = assertRequiredOptions(opts, ['action']);\n return await this.espresso.jwproxy.command('/appium/device/perform_editor_action', 'POST', {action});\n};\n\ncommands.mobileSwipe = async function mobileSwipe (opts = {}) {\n const {direction, element, swiper, startCoordinates, endCoordinates, precisionDescriber} = assertRequiredOptions(opts, ['element']);\n return await this.espresso.jwproxy.command(`/appium/execute_mobile/${util.unwrapElement(element)}/swipe`, 'POST', {\n direction, element, swiper, startCoordinates, endCoordinates, precisionDescriber\n });\n};\n\ncommands.mobileGetDeviceInfo = async function mobileGetDeviceInfo () {\n return await this.espresso.jwproxy.command('/appium/device/info', 'GET');\n};\n\ncommands.mobileIsToastVisible = async function mobileIsToastVisible (opts = {}) {\n const {text, isRegexp} = opts;\n if (!util.hasValue(text)) {\n throw new errors.InvalidArgumentError(`'text' argument is mandatory`);\n }\n return await this.espresso.jwproxy.command('/appium/execute_mobile/is_toast_displayed', 'POST', {\n text,\n isRegexp,\n });\n};\n\ncommands.mobileOpenDrawer = async function mobileOpenDrawer (opts = {}) {\n const {element, gravity} = assertRequiredOptions(opts, ['element']);\n\n return await this.espresso.jwproxy.command(`/appium/execute_mobile/${util.unwrapElement(element)}/open_drawer`, 'POST', {\n gravity\n });\n};\n\ncommands.mobileCloseDrawer = async function mobileCloseDrawer (opts = {}) {\n const {element, gravity} = assertRequiredOptions(opts, ['element']);\n\n return await this.espresso.jwproxy.command(`/appium/execute_mobile/${util.unwrapElement(element)}/close_drawer`, 'POST', {\n gravity\n });\n};\n\ncommands.mobileSetDate = async function mobileSetDate (opts = {}) {\n const {element, year, monthOfYear, dayOfMonth} = assertRequiredOptions(opts, ['element', 'year', 'monthOfYear', 'dayOfMonth']);\n\n return await this.espresso.jwproxy.command(`/appium/execute_mobile/${util.unwrapElement(element)}/set_date`, 'POST', {\n year,\n monthOfYear,\n dayOfMonth,\n });\n};\n\ncommands.mobileSetTime = async function mobileSetTime (opts = {}) {\n const {element, hours, minutes} = assertRequiredOptions(opts, ['element', 'hours', 'minutes']);\n\n return await this.espresso.jwproxy.command(`/appium/execute_mobile/${util.unwrapElement(element)}/set_time`, 'POST', {\n hours,\n minutes,\n });\n};\n\ncommands.mobileNavigateTo = async function mobileNavigateTo (opts = {}) {\n let {element, menuItemId} = assertRequiredOptions(opts, ['menuItemId', 'element']);\n\n let menuItemIdAsNumber = parseInt(menuItemId, 10);\n if (_.isNaN(menuItemIdAsNumber) || menuItemIdAsNumber < 0) {\n throw new errors.InvalidArgumentError(`'menuItemId' must be a non-negative number. Found ${menuItemId}`);\n }\n\n return await this.espresso.jwproxy.command(`/appium/execute_mobile/${util.unwrapElement(element)}/navigate_to`, 'POST', {\n menuItemId\n });\n};\n\n/**\n * Runs a chain of Espresso web atoms (see https://developer.android.com/training/testing/espresso/web for reference)\n *\n * Takes JSON of the form\n *\n * {\n * \"webviewEl\": \"<ELEMENT_ID>\", // optional webview element to operate on\n * \"forceJavascriptEnabled\": true|false, // if webview disables javascript, webatoms won't work, this forces it\n * \"methodChain\": [\n * {\"name\": \"methodName\", \"atom\": {\"name\": \"atomName\", \"args\": [\"arg1\", \"arg2\", ...]}},\n * ...\n * ]\n * }\n *\n */\ncommands.mobileWebAtoms = async function mobileWebAtoms (opts = {}) {\n opts = assertRequiredOptions(opts, ['methodChain']);\n return await this.espresso.jwproxy.command(`/appium/execute_mobile/web_atoms`, 'POST', opts);\n};\n\ncommands.getDisplayDensity = async function getDisplayDensity () {\n return await this.espresso.jwproxy.command('/appium/device/display_density', 'GET', {});\n};\n\ncommands.mobileScrollToPage = async function mobileScrollToPage (opts = {}) {\n\n // Validate the parameters\n const scrollToTypes = ['first', 'last', 'left', 'right'];\n const res = validate(opts, {\n element: {presence: true},\n scrollTo: {\n inclusion: {\n within: scrollToTypes,\n message: `\"scrollTo\" must be one of \"${scrollToTypes.join(', ')}\" found '%{value}'`,\n }\n },\n scrollToPage: {\n numericality: {\n onlyInteger: true,\n greaterThanOrEqualTo: 0,\n message: `\"scrollToPage\" must be a non-negative integer. Found '%{value}'`\n },\n },\n });\n if (util.hasValue(res)) {\n throw new errors.InvalidArgumentError(`Invalid scrollTo parameters: ${JSON.stringify(res)}`);\n }\n\n const {element, scrollTo, scrollToPage, smoothScroll} = opts;\n\n if (util.hasValue(scrollTo) && util.hasValue(scrollToPage)) {\n this.log.warn(`'scrollTo' and 'scrollToPage' where both provided. Defaulting to 'scrollTo'`);\n }\n\n return await this.espresso.jwproxy.command(`/appium/execute_mobile/${util.unwrapElement(element)}/scroll_to_page`, 'POST', {\n scrollTo,\n scrollToPage,\n smoothScroll,\n });\n};\n\n\n/**\n * API to invoke methods defined in Android app.\n *\n * Example data\n * {\n * target: 'activity',\n * methods:\n * [\n * {\n * name: \"someMethod\",\n * },\n * {\n * name: \"anotherMethod\",\n * args:\n * [\n * {value: \"Lol\", type: 'java.lang.CharSequence'},\n * {value: 1, type: 'int'}\n * ]\n * }\n * ]\n * }\n *\n * In above example, method \"someMethod\" will be invoked on 'activity'. On the result, \"anotherMethod\" will be invoked\n * \"target\" can be either 'activity', 'application' or 'element'\n * If target is set to 'application', methods will be invoked on application class\n * If target is set to 'activity', methods will be invoked on current activity\n * If target is set to 'element', 'elementId' must be specified\n *\n * - Only 'Public' methods can be invoked. ('open' modifire is necessary in Kotlin)\n * - following primitive types are supported: \"int\", \"boolean\", \"byte\", \"short\", \"long\", \"float\", \"char\"\n * - Non-primitive types with fully qualified name \"java.lang.*\" is also supported:\n * Eg. \"java.lang.CharSequence\", \"java.lang.String\", \"java.lang.Integer\", \"java.lang.Float\",\n * \"java.lang.Double\", \"java.lang.Boolean\", \"java.lang.Long\", \"java.lang.Short\",\n * \"java.lang.Character\" etc...\n *\n *\n * @throws {Error} if target is not 'activity' or 'application'\n * @throws {Error} if a method is not found with given argument types\n *\n * @return {*} the result of the last method in the invocation chain. If method return type is void, then \"<VOID>\" will be returned\n *\n */\ncommands.mobileBackdoor = async function mobileBackdoor (opts = {}) {\n assertRequiredOptions(opts, ['target', 'methods']);\n const {target, methods} = opts;\n if (target === 'element') {\n assertRequiredOptions(opts, ['elementId']);\n }\n const {elementId: targetElement} = opts;\n return await this.espresso.jwproxy.command(`/appium/execute_mobile/backdoor`, 'POST', {target, methods, targetElement});\n};\n\n/**\n * Execute UiAutomator2 commands to drive out of app areas.\n * strategy can be one of: \"clazz\", \"res\", \"text\", \"textContains\", \"textEndsWith\", \"textStartsWith\",\n * \"desc\", \"descContains\", \"descEndsWith\", \"descStartsWith\", \"pkg\"\n *\n * action can be one of: \"click\", \"longClick\", \"getText\", \"getContentDescription\", \"getClassName\",\n * \"getResourceName\", \"getVisibleBounds\", \"getVisibleCenter\", \"getApplicationPackage\",\n * \"getChildCount\", \"clear\", \"isCheckable\", \"isChecked\", \"isClickable\", \"isEnabled\",\n * \"isFocusable\", \"isFocused\", \"isLongClickable\", \"isScrollable\", \"isSelected\"\n */\ncommands.mobileUiautomator = async function mobileUiautomator (opts = {}) {\n const {strategy, locator, action, index} = assertRequiredOptions(opts, ['strategy', 'locator', 'action']);\n return await this.espresso.jwproxy.command(`/appium/execute_mobile/uiautomator`, 'POST', {strategy, locator, index, action});\n};\n\n/**\n * Execute UiAutomator2 command to return the UI dump when AUT is in background.\n * @throws {Error} if uiautomator view dump is unsuccessful\n * @returns {string} uiautomator DOM xml as string\n */\ncommands.mobileUiautomatorPageSource = async function mobileUiautomatorPageSource () {\n return await this.espresso.jwproxy.command(`/appium/execute_mobile/uiautomator_page_source`, 'GET');\n};\n\n/**\n * Flash the element with given id.\n * durationMillis and repeatCount are optional\n *\n */\ncommands.mobileFlashElement = async function mobileFlashElement (opts = {}) {\n const {element} = assertRequiredOptions(opts, ['element']);\n const {durationMillis, repeatCount} = opts;\n return await this.espresso.jwproxy.command(`/appium/execute_mobile/${util.unwrapElement(element)}/flash`, 'POST', {\n durationMillis,\n repeatCount\n });\n};\n\n/**\n * Perform a 'GeneralClickAction' (https://developer.android.com/reference/androidx/test/espresso/action/GeneralClickAction)\n */\ncommands.mobileClickAction = async function mobileClickAction (opts = {}) {\n const {element, tapper, coordinatesProvider, precisionDescriber,\n inputDevice, buttonState} = assertRequiredOptions(opts, ['element']);\n return await this.espresso.jwproxy.command(`/appium/execute_mobile/${util.unwrapElement(element)}/click_action`, 'POST', {\n tapper, coordinatesProvider, precisionDescriber, inputDevice, buttonState\n });\n};\n\ncommands.updateSettings = async function updateSettings (settings) {\n return await this.espresso.jwproxy.command(`/appium/settings`, 'POST', { settings });\n};\n\ncommands.getSettings = async function getSettings () {\n return await this.espresso.jwproxy.command(`/appium/settings`, 'GET');\n};\n\n// Stop proxying to any Chromedriver and redirect to Espresso\nhelpers.suspendChromedriverProxy = function suspendChromedriverProxy () {\n this.chromedriver = null;\n this.proxyReqRes = this.espresso.proxyReqRes.bind(this.espresso);\n this.proxyCommand = this.espresso.proxyCommand.bind(this.espresso);\n this.jwpProxyActive = true;\n};\n\n/**\n * Starts the given activity with intent options, activity options and locale.\n * Activity could only be executed in scope of the current app package.\n *\n * appActivity is mandatory\n *\n * locale, optionalIntentArguments, optionalActivityArguments are optional\n */\ncommands.mobileStartActivity = async function mobileStartActivity (opts = {}) {\n const appPackage = this.caps.appPackage;\n const {\n appActivity,\n locale,\n optionalIntentArguments,\n optionalActivityArguments\n } = assertRequiredOptions(opts, ['appActivity']);\n return await this.espresso.jwproxy.command(`/appium/device/start_activity`, 'POST', {\n appPackage,\n appActivity,\n locale,\n optionalIntentArguments,\n optionalActivityArguments\n });\n};\n\ncommands.startActivity = async function startActivity (appPackage, appActivity,\n appWaitPackage, appWaitActivity) {\n // intentAction, intentCategory, intentFlags, optionalIntentArguments, dontStopAppOnReset\n // parameters are not supported by Espresso\n appPackage = appPackage || this.caps.appPackage;\n appWaitPackage = appWaitPackage || appPackage;\n appActivity = qualifyActivityName(appActivity, appPackage);\n appWaitActivity = qualifyActivityName(appWaitActivity || appActivity, appWaitPackage);\n this.log.debug(`Starting activity '${appActivity}' for package '${appPackage}'`);\n await this.espresso.jwproxy.command(`/appium/device/start_activity`, 'POST', {\n appPackage,\n appActivity,\n });\n await this.adb.waitForActivity(appWaitPackage, appWaitActivity);\n};\n\ncommands.mobileDismissAutofill = async function mobileDismissAutofill (opts = {}) {\n const {element} = assertRequiredOptions(opts, ['element']);\n await this.espresso.jwproxy.command(\n `/session/:sessionId/appium/execute_mobile/${util.unwrapElement(element)}/dismiss_autofill`, 'POST', {});\n};\n\nObject.assign(extensions, commands, helpers);\nexport { commands, helpers };\nexport default extensions;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"general.js","names":["_lodash","_interopRequireDefault","require","_support","_validate","_driver","_utils","commands","helpers","extensions","exports","requireOptions","options","requiredOptionNames","_","isArray","presentOptionNames","keys","missingOptionNames","difference","isEmpty","Error","JSON","stringify","launchApp","errors","UnsupportedOperationError","closeApp","reset","getClipboard","adb","getApiLevel","espresso","jwproxy","command","mobilePerformEditorAction","opts","action","mobileSwipe","direction","element","swiper","startCoordinates","endCoordinates","precisionDescriber","util","unwrapElement","mobilePressKey","keycode","metastate","flags","isLongPress","mobileGetDeviceInfo","mobileIsToastVisible","text","isRegexp","hasValue","InvalidArgumentError","mobileOpenDrawer","gravity","mobileCloseDrawer","mobileSetDate","year","monthOfYear","dayOfMonth","mobileSetTime","hours","minutes","mobileNavigateTo","menuItemId","menuItemIdAsNumber","parseInt","isNaN","mobileWebAtoms","getDisplayDensity","mobileScrollToPage","scrollToTypes","res","validate","presence","scrollTo","inclusion","within","message","join","scrollToPage","numericality","onlyInteger","greaterThanOrEqualTo","smoothScroll","log","warn","mobileBackdoor","target","methods","elementId","targetElement","mobileUiautomator","strategy","locator","index","mobileUiautomatorPageSource","mobileFlashElement","durationMillis","repeatCount","mobileClickAction","tapper","coordinatesProvider","inputDevice","buttonState","updateSettings","settings","getSettings","suspendChromedriverProxy","chromedriver","proxyReqRes","bind","proxyCommand","jwpProxyActive","mobileStartActivity","appPackage","caps","appActivity","locale","optionalIntentArguments","optionalActivityArguments","startActivity","appWaitPackage","appWaitActivity","qualifyActivityName","debug","waitForActivity","mobileDismissAutofill","Object","assign","_default","default"],"sources":["../../../lib/commands/general.js"],"sourcesContent":["import _ from 'lodash';\nimport { util } from 'appium/support';\nimport validate from 'validate.js';\nimport { errors } from 'appium/driver';\nimport { qualifyActivityName } from '../utils';\n\nconst commands = {}, helpers = {}, extensions = {};\n\nfunction requireOptions (options, requiredOptionNames) {\n if (!_.isArray(requiredOptionNames)) {\n requiredOptionNames = [requiredOptionNames];\n }\n const presentOptionNames = _.keys(options);\n const missingOptionNames = _.difference(requiredOptionNames, presentOptionNames);\n if (_.isEmpty(missingOptionNames)) {\n return options;\n }\n throw new Error(`The following options are required: ${JSON.stringify(missingOptionNames)}. ` +\n `You have only provided: ${JSON.stringify(presentOptionNames)}`);\n}\n\n// eslint-disable-next-line require-await\ncommands.launchApp = async function launchApp () {\n throw new errors.UnsupportedOperationError('Please create a new session in order to launch the application under test');\n};\n\n// eslint-disable-next-line require-await\ncommands.closeApp = async function closeApp () {\n throw new errors.UnsupportedOperationError('Please quit the session in order to close the application under test');\n};\n\n// eslint-disable-next-line require-await\ncommands.reset = async function reset () {\n throw new errors.UnsupportedOperationError(\n 'Please quit the session and create a new one ' +\n 'in order to close and launch the application under test');\n};\n\ncommands.getClipboard = async function getClipboard () {\n return (await this.adb.getApiLevel() < 29)\n ? (await this.espresso.jwproxy.command('/appium/device/get_clipboard', 'POST', {}))\n : (await this.adb.getClipboard());\n};\n\ncommands.mobilePerformEditorAction = async function mobilePerformEditorAction (opts = {}) {\n const {action} = requireOptions(opts, ['action']);\n return await this.espresso.jwproxy.command('/appium/device/perform_editor_action', 'POST', {action});\n};\n\ncommands.mobileSwipe = async function mobileSwipe (opts = {}) {\n const {direction, element, swiper, startCoordinates, endCoordinates, precisionDescriber} = requireOptions(opts, ['element']);\n return await this.espresso.jwproxy.command(`/appium/execute_mobile/${util.unwrapElement(element)}/swipe`, 'POST', {\n direction, element, swiper, startCoordinates, endCoordinates, precisionDescriber\n });\n};\n\n/**\n * @typedef {Object} PressKeyOptions\n * @property {number} keycode A valid Android key code. See https://developer.android.com/reference/android/view/KeyEvent\n * for the list of available key codes\n * @property {number?} metastate An integer in which each bit set to 1 represents a pressed meta key. See\n * https://developer.android.com/reference/android/view/KeyEvent for more details.\n * @property {number?} flags Flags for the particular key event. See\n * https://developer.android.com/reference/android/view/KeyEvent for more details.\n * @property {boolean} isLongPress [false] Whether to emulate long key press\n */\n\n/**\n * Emulates key press event.\n *\n * @param {PressKeyOptions} opts\n */\ncommands.mobilePressKey = async function mobilePressKey (opts = {}) {\n const {keycode, metastate, flags, isLongPress} = requireOptions(opts, ['keycode']);\n await this.espresso.jwproxy.command(`/appium/device/${isLongPress ? 'long_' : ''}press_keycode`, 'POST', {\n keycode, metastate, flags\n });\n};\n\ncommands.mobileGetDeviceInfo = async function mobileGetDeviceInfo () {\n return await this.espresso.jwproxy.command('/appium/device/info', 'GET');\n};\n\ncommands.mobileIsToastVisible = async function mobileIsToastVisible (opts = {}) {\n const {text, isRegexp} = opts;\n if (!util.hasValue(text)) {\n throw new errors.InvalidArgumentError(`'text' argument is mandatory`);\n }\n return await this.espresso.jwproxy.command('/appium/execute_mobile/is_toast_displayed', 'POST', {\n text,\n isRegexp,\n });\n};\n\ncommands.mobileOpenDrawer = async function mobileOpenDrawer (opts = {}) {\n const {element, gravity} = requireOptions(opts, ['element']);\n\n return await this.espresso.jwproxy.command(`/appium/execute_mobile/${util.unwrapElement(element)}/open_drawer`, 'POST', {\n gravity\n });\n};\n\ncommands.mobileCloseDrawer = async function mobileCloseDrawer (opts = {}) {\n const {element, gravity} = requireOptions(opts, ['element']);\n\n return await this.espresso.jwproxy.command(`/appium/execute_mobile/${util.unwrapElement(element)}/close_drawer`, 'POST', {\n gravity\n });\n};\n\ncommands.mobileSetDate = async function mobileSetDate (opts = {}) {\n const {element, year, monthOfYear, dayOfMonth} = requireOptions(opts, ['element', 'year', 'monthOfYear', 'dayOfMonth']);\n\n return await this.espresso.jwproxy.command(`/appium/execute_mobile/${util.unwrapElement(element)}/set_date`, 'POST', {\n year,\n monthOfYear,\n dayOfMonth,\n });\n};\n\ncommands.mobileSetTime = async function mobileSetTime (opts = {}) {\n const {element, hours, minutes} = requireOptions(opts, ['element', 'hours', 'minutes']);\n\n return await this.espresso.jwproxy.command(`/appium/execute_mobile/${util.unwrapElement(element)}/set_time`, 'POST', {\n hours,\n minutes,\n });\n};\n\ncommands.mobileNavigateTo = async function mobileNavigateTo (opts = {}) {\n let {element, menuItemId} = requireOptions(opts, ['menuItemId', 'element']);\n\n let menuItemIdAsNumber = parseInt(menuItemId, 10);\n if (_.isNaN(menuItemIdAsNumber) || menuItemIdAsNumber < 0) {\n throw new errors.InvalidArgumentError(`'menuItemId' must be a non-negative number. Found ${menuItemId}`);\n }\n\n return await this.espresso.jwproxy.command(`/appium/execute_mobile/${util.unwrapElement(element)}/navigate_to`, 'POST', {\n menuItemId\n });\n};\n\n/**\n * Runs a chain of Espresso web atoms (see https://developer.android.com/training/testing/espresso/web for reference)\n *\n * Takes JSON of the form\n *\n * {\n * \"webviewEl\": \"<ELEMENT_ID>\", // optional webview element to operate on\n * \"forceJavascriptEnabled\": true|false, // if webview disables javascript, webatoms won't work, this forces it\n * \"methodChain\": [\n * {\"name\": \"methodName\", \"atom\": {\"name\": \"atomName\", \"args\": [\"arg1\", \"arg2\", ...]}},\n * ...\n * ]\n * }\n *\n */\ncommands.mobileWebAtoms = async function mobileWebAtoms (opts = {}) {\n opts = requireOptions(opts, ['methodChain']);\n return await this.espresso.jwproxy.command(`/appium/execute_mobile/web_atoms`, 'POST', opts);\n};\n\ncommands.getDisplayDensity = async function getDisplayDensity () {\n return await this.espresso.jwproxy.command('/appium/device/display_density', 'GET', {});\n};\n\ncommands.mobileScrollToPage = async function mobileScrollToPage (opts = {}) {\n\n // Validate the parameters\n const scrollToTypes = ['first', 'last', 'left', 'right'];\n const res = validate(opts, {\n element: {presence: true},\n scrollTo: {\n inclusion: {\n within: scrollToTypes,\n message: `\"scrollTo\" must be one of \"${scrollToTypes.join(', ')}\" found '%{value}'`,\n }\n },\n scrollToPage: {\n numericality: {\n onlyInteger: true,\n greaterThanOrEqualTo: 0,\n message: `\"scrollToPage\" must be a non-negative integer. Found '%{value}'`\n },\n },\n });\n if (util.hasValue(res)) {\n throw new errors.InvalidArgumentError(`Invalid scrollTo parameters: ${JSON.stringify(res)}`);\n }\n\n const {element, scrollTo, scrollToPage, smoothScroll} = opts;\n\n if (util.hasValue(scrollTo) && util.hasValue(scrollToPage)) {\n this.log.warn(`'scrollTo' and 'scrollToPage' where both provided. Defaulting to 'scrollTo'`);\n }\n\n return await this.espresso.jwproxy.command(`/appium/execute_mobile/${util.unwrapElement(element)}/scroll_to_page`, 'POST', {\n scrollTo,\n scrollToPage,\n smoothScroll,\n });\n};\n\n\n/**\n * API to invoke methods defined in Android app.\n *\n * Example data\n * {\n * target: 'activity',\n * methods:\n * [\n * {\n * name: \"someMethod\",\n * },\n * {\n * name: \"anotherMethod\",\n * args:\n * [\n * {value: \"Lol\", type: 'java.lang.CharSequence'},\n * {value: 1, type: 'int'}\n * ]\n * }\n * ]\n * }\n *\n * In above example, method \"someMethod\" will be invoked on 'activity'. On the result, \"anotherMethod\" will be invoked\n * \"target\" can be either 'activity', 'application' or 'element'\n * If target is set to 'application', methods will be invoked on application class\n * If target is set to 'activity', methods will be invoked on current activity\n * If target is set to 'element', 'elementId' must be specified\n *\n * - Only 'Public' methods can be invoked. ('open' modifire is necessary in Kotlin)\n * - following primitive types are supported: \"int\", \"boolean\", \"byte\", \"short\", \"long\", \"float\", \"char\"\n * - Non-primitive types with fully qualified name \"java.lang.*\" is also supported:\n * Eg. \"java.lang.CharSequence\", \"java.lang.String\", \"java.lang.Integer\", \"java.lang.Float\",\n * \"java.lang.Double\", \"java.lang.Boolean\", \"java.lang.Long\", \"java.lang.Short\",\n * \"java.lang.Character\" etc...\n *\n *\n * @throws {Error} if target is not 'activity' or 'application'\n * @throws {Error} if a method is not found with given argument types\n *\n * @return {*} the result of the last method in the invocation chain. If method return type is void, then \"<VOID>\" will be returned\n *\n */\ncommands.mobileBackdoor = async function mobileBackdoor (opts = {}) {\n requireOptions(opts, ['target', 'methods']);\n const {target, methods} = opts;\n if (target === 'element') {\n requireOptions(opts, ['elementId']);\n }\n const {elementId: targetElement} = opts;\n return await this.espresso.jwproxy.command(`/appium/execute_mobile/backdoor`, 'POST', {target, methods, targetElement});\n};\n\n/**\n * Execute UiAutomator2 commands to drive out of app areas.\n * strategy can be one of: \"clazz\", \"res\", \"text\", \"textContains\", \"textEndsWith\", \"textStartsWith\",\n * \"desc\", \"descContains\", \"descEndsWith\", \"descStartsWith\", \"pkg\"\n *\n * action can be one of: \"click\", \"longClick\", \"getText\", \"getContentDescription\", \"getClassName\",\n * \"getResourceName\", \"getVisibleBounds\", \"getVisibleCenter\", \"getApplicationPackage\",\n * \"getChildCount\", \"clear\", \"isCheckable\", \"isChecked\", \"isClickable\", \"isEnabled\",\n * \"isFocusable\", \"isFocused\", \"isLongClickable\", \"isScrollable\", \"isSelected\"\n */\ncommands.mobileUiautomator = async function mobileUiautomator (opts = {}) {\n const {strategy, locator, action, index} = requireOptions(opts, ['strategy', 'locator', 'action']);\n return await this.espresso.jwproxy.command(`/appium/execute_mobile/uiautomator`, 'POST', {strategy, locator, index, action});\n};\n\n/**\n * Execute UiAutomator2 command to return the UI dump when AUT is in background.\n * @throws {Error} if uiautomator view dump is unsuccessful\n * @returns {string} uiautomator DOM xml as string\n */\ncommands.mobileUiautomatorPageSource = async function mobileUiautomatorPageSource () {\n return await this.espresso.jwproxy.command(`/appium/execute_mobile/uiautomator_page_source`, 'GET');\n};\n\n/**\n * Flash the element with given id.\n * durationMillis and repeatCount are optional\n *\n */\ncommands.mobileFlashElement = async function mobileFlashElement (opts = {}) {\n const {element} = requireOptions(opts, ['element']);\n const {durationMillis, repeatCount} = opts;\n return await this.espresso.jwproxy.command(`/appium/execute_mobile/${util.unwrapElement(element)}/flash`, 'POST', {\n durationMillis,\n repeatCount\n });\n};\n\n/**\n * Perform a 'GeneralClickAction' (https://developer.android.com/reference/androidx/test/espresso/action/GeneralClickAction)\n */\ncommands.mobileClickAction = async function mobileClickAction (opts = {}) {\n const {element, tapper, coordinatesProvider, precisionDescriber,\n inputDevice, buttonState} = requireOptions(opts, ['element']);\n return await this.espresso.jwproxy.command(`/appium/execute_mobile/${util.unwrapElement(element)}/click_action`, 'POST', {\n tapper, coordinatesProvider, precisionDescriber, inputDevice, buttonState\n });\n};\n\ncommands.updateSettings = async function updateSettings (settings) {\n return await this.espresso.jwproxy.command(`/appium/settings`, 'POST', { settings });\n};\n\ncommands.getSettings = async function getSettings () {\n return await this.espresso.jwproxy.command(`/appium/settings`, 'GET');\n};\n\n// Stop proxying to any Chromedriver and redirect to Espresso\nhelpers.suspendChromedriverProxy = function suspendChromedriverProxy () {\n this.chromedriver = null;\n this.proxyReqRes = this.espresso.proxyReqRes.bind(this.espresso);\n this.proxyCommand = this.espresso.proxyCommand.bind(this.espresso);\n this.jwpProxyActive = true;\n};\n\n/**\n * Starts the given activity with intent options, activity options and locale.\n * Activity could only be executed in scope of the current app package.\n *\n * appActivity is mandatory\n *\n * locale, optionalIntentArguments, optionalActivityArguments are optional\n */\ncommands.mobileStartActivity = async function mobileStartActivity (opts = {}) {\n const appPackage = this.caps.appPackage;\n const {\n appActivity,\n locale,\n optionalIntentArguments,\n optionalActivityArguments\n } = requireOptions(opts, ['appActivity']);\n return await this.espresso.jwproxy.command(`/appium/device/start_activity`, 'POST', {\n appPackage,\n appActivity,\n locale,\n optionalIntentArguments,\n optionalActivityArguments\n });\n};\n\ncommands.startActivity = async function startActivity (appPackage, appActivity,\n appWaitPackage, appWaitActivity) {\n // intentAction, intentCategory, intentFlags, optionalIntentArguments, dontStopAppOnReset\n // parameters are not supported by Espresso\n appPackage = appPackage || this.caps.appPackage;\n appWaitPackage = appWaitPackage || appPackage;\n appActivity = qualifyActivityName(appActivity, appPackage);\n appWaitActivity = qualifyActivityName(appWaitActivity || appActivity, appWaitPackage);\n this.log.debug(`Starting activity '${appActivity}' for package '${appPackage}'`);\n await this.espresso.jwproxy.command(`/appium/device/start_activity`, 'POST', {\n appPackage,\n appActivity,\n });\n await this.adb.waitForActivity(appWaitPackage, appWaitActivity);\n};\n\ncommands.mobileDismissAutofill = async function mobileDismissAutofill (opts = {}) {\n const {element} = requireOptions(opts, ['element']);\n await this.espresso.jwproxy.command(\n `/session/:sessionId/appium/execute_mobile/${util.unwrapElement(element)}/dismiss_autofill`, 'POST', {});\n};\n\nObject.assign(extensions, commands, helpers);\nexport { commands, helpers };\nexport default extensions;\n"],"mappings":"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"}
|