appium-uiautomator2-driver 2.29.11 → 2.31.0

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.
Files changed (135) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/build/index.d.ts +4 -0
  3. package/build/index.d.ts.map +1 -0
  4. package/build/index.js +8 -15
  5. package/build/index.js.map +1 -0
  6. package/build/lib/commands/actions.d.ts +2 -0
  7. package/build/lib/commands/actions.d.ts.map +1 -0
  8. package/build/lib/commands/actions.js +67 -62
  9. package/build/lib/commands/actions.js.map +1 -1
  10. package/build/lib/commands/alert.d.ts +2 -0
  11. package/build/lib/commands/alert.d.ts.map +1 -0
  12. package/build/lib/commands/alert.js +28 -26
  13. package/build/lib/commands/alert.js.map +1 -1
  14. package/build/lib/commands/app-strings.d.ts +3 -0
  15. package/build/lib/commands/app-strings.d.ts.map +1 -0
  16. package/build/lib/commands/app-strings.js +86 -57
  17. package/build/lib/commands/app-strings.js.map +1 -1
  18. package/build/lib/commands/battery.d.ts +2 -0
  19. package/build/lib/commands/battery.d.ts.map +1 -0
  20. package/build/lib/commands/battery.js +26 -16
  21. package/build/lib/commands/battery.js.map +1 -1
  22. package/build/lib/commands/element.d.ts +2 -0
  23. package/build/lib/commands/element.d.ts.map +1 -0
  24. package/build/lib/commands/element.js +140 -159
  25. package/build/lib/commands/element.js.map +1 -1
  26. package/build/lib/commands/find.d.ts +2 -0
  27. package/build/lib/commands/find.d.ts.map +1 -0
  28. package/build/lib/commands/find.js +39 -25
  29. package/build/lib/commands/find.js.map +1 -1
  30. package/build/lib/commands/general.d.ts +4 -0
  31. package/build/lib/commands/general.d.ts.map +1 -0
  32. package/build/lib/commands/general.js +209 -215
  33. package/build/lib/commands/general.js.map +1 -1
  34. package/build/lib/commands/gestures.d.ts +2 -0
  35. package/build/lib/commands/gestures.d.ts.map +1 -0
  36. package/build/lib/commands/gestures.js +206 -193
  37. package/build/lib/commands/gestures.js.map +1 -1
  38. package/build/lib/commands/index.d.ts +2 -0
  39. package/build/lib/commands/index.d.ts.map +1 -0
  40. package/build/lib/commands/index.js +13 -22
  41. package/build/lib/commands/index.js.map +1 -1
  42. package/build/lib/commands/mixins.d.ts +87 -0
  43. package/build/lib/commands/mixins.d.ts.map +1 -0
  44. package/build/lib/commands/mixins.js +26 -0
  45. package/build/lib/commands/mixins.js.map +1 -0
  46. package/build/lib/commands/screenshot.d.ts +2 -0
  47. package/build/lib/commands/screenshot.d.ts.map +1 -0
  48. package/build/lib/commands/screenshot.js +77 -62
  49. package/build/lib/commands/screenshot.js.map +1 -1
  50. package/build/lib/commands/touch.d.ts +2 -0
  51. package/build/lib/commands/touch.d.ts.map +1 -0
  52. package/build/lib/commands/touch.js +48 -38
  53. package/build/lib/commands/touch.js.map +1 -1
  54. package/build/lib/commands/types.d.ts +452 -0
  55. package/build/lib/commands/types.d.ts.map +1 -0
  56. package/build/lib/commands/types.js +3 -0
  57. package/build/lib/commands/types.js.map +1 -0
  58. package/build/lib/commands/viewport.d.ts +2 -0
  59. package/build/lib/commands/viewport.d.ts.map +1 -0
  60. package/build/lib/commands/viewport.js +37 -35
  61. package/build/lib/commands/viewport.js.map +1 -1
  62. package/build/lib/constraints.d.ts +325 -0
  63. package/build/lib/constraints.d.ts.map +1 -0
  64. package/build/lib/constraints.js +51 -0
  65. package/build/lib/constraints.js.map +1 -0
  66. package/build/lib/css-converter.d.ts +45 -0
  67. package/build/lib/css-converter.d.ts.map +1 -0
  68. package/build/lib/css-converter.js +272 -175
  69. package/build/lib/css-converter.js.map +1 -1
  70. package/build/lib/driver.d.ts +904 -0
  71. package/build/lib/driver.d.ts.map +1 -0
  72. package/build/lib/driver.js +726 -485
  73. package/build/lib/driver.js.map +1 -1
  74. package/build/lib/execute-method-map.d.ts +477 -0
  75. package/build/lib/execute-method-map.d.ts.map +1 -0
  76. package/build/lib/execute-method-map.js +542 -0
  77. package/build/lib/execute-method-map.js.map +1 -0
  78. package/build/lib/extensions.d.ts +3 -0
  79. package/build/lib/extensions.d.ts.map +1 -0
  80. package/build/lib/extensions.js +7 -9
  81. package/build/lib/extensions.js.map +1 -1
  82. package/build/lib/helpers.d.ts +7 -0
  83. package/build/lib/helpers.d.ts.map +1 -0
  84. package/build/lib/helpers.js +36 -29
  85. package/build/lib/helpers.js.map +1 -1
  86. package/build/lib/logger.d.ts +3 -0
  87. package/build/lib/logger.d.ts.map +1 -0
  88. package/build/lib/logger.js +5 -10
  89. package/build/lib/logger.js.map +1 -1
  90. package/build/lib/method-map.d.ts +389 -0
  91. package/build/lib/method-map.d.ts.map +1 -0
  92. package/build/lib/method-map.js +11 -17
  93. package/build/lib/method-map.js.map +1 -1
  94. package/build/lib/types.d.ts +44 -0
  95. package/build/lib/types.d.ts.map +1 -0
  96. package/build/lib/types.js +3 -0
  97. package/build/lib/types.js.map +1 -0
  98. package/build/lib/uiautomator2.d.ts +45 -0
  99. package/build/lib/uiautomator2.d.ts.map +1 -0
  100. package/build/lib/uiautomator2.js +340 -299
  101. package/build/lib/uiautomator2.js.map +1 -1
  102. package/build/lib/utils.d.ts +10 -0
  103. package/build/lib/utils.d.ts.map +1 -0
  104. package/build/lib/utils.js +23 -16
  105. package/build/lib/utils.js.map +1 -1
  106. package/build/tsconfig.tsbuildinfo +1 -0
  107. package/index.js +5 -3
  108. package/lib/commands/actions.js +115 -101
  109. package/lib/commands/alert.js +36 -44
  110. package/lib/commands/app-strings.js +79 -58
  111. package/lib/commands/battery.js +27 -28
  112. package/lib/commands/element.js +231 -134
  113. package/lib/commands/find.js +40 -21
  114. package/lib/commands/general.js +262 -336
  115. package/lib/commands/gestures.js +252 -366
  116. package/lib/commands/index.js +11 -31
  117. package/lib/commands/mixins.ts +169 -0
  118. package/lib/commands/screenshot.js +80 -76
  119. package/lib/commands/touch.js +64 -31
  120. package/lib/commands/types.ts +473 -0
  121. package/lib/commands/viewport.js +43 -31
  122. package/lib/constraints.ts +53 -0
  123. package/lib/css-converter.js +9 -1
  124. package/lib/{driver.js → driver.ts} +374 -239
  125. package/lib/execute-method-map.ts +573 -0
  126. package/lib/method-map.ts +11 -0
  127. package/lib/types.ts +57 -0
  128. package/lib/uiautomator2.js +21 -2
  129. package/lib/utils.js +2 -2
  130. package/npm-shrinkwrap.json +395 -528
  131. package/package.json +96 -70
  132. package/build/lib/desired-caps.js +0 -71
  133. package/build/lib/desired-caps.js.map +0 -1
  134. package/lib/desired-caps.js +0 -70
  135. package/lib/method-map.js +0 -11
@@ -0,0 +1,87 @@
1
+ /**
2
+ * @module
3
+ * @privateRemarks These mixins are kind of a mishmash of stuff from `appium-android-driver`,
4
+ * @privateRemarks unique things, and stuff from `ExternalDriver`. Ideally, we should be pulling the method
5
+ * @privateRemarks definitions right out of `ExternalDriver` whenever possible. Also note that the mixins
6
+ * @privateRemarks contain _more stuff than just commands or execute methods_.
7
+ */
8
+ import type { Element, ExternalDriver, StringRecord } from '@appium/types';
9
+ import type { ActionsMixin, AlertMixin, ElementMixin, ExecuteMixin, FindMixin, GeneralMixin, NetworkMixin, TouchMixin } from 'appium-android-driver';
10
+ import type { EmptyObject } from 'type-fest';
11
+ import { AndroidUiautomator2Driver } from '../driver';
12
+ import type * as types from './types';
13
+ type UIA2Mixin<T = EmptyObject> = ThisType<import('../driver').AndroidUiautomator2Driver> & T;
14
+ export type UIA2ActionsMixin = UIA2Mixin<Pick<ActionsMixin, 'pressKeyCode' | 'longPressKeyCode' | 'doSwipe' | 'doDrag' | 'getOrientation' | 'setOrientation'>> & {
15
+ mobilePressKey(opts: types.PressKeyOptions): Promise<void>;
16
+ mobileScheduleAction(opts?: StringRecord): Promise<unknown>;
17
+ mobileGetActionHistory(opts?: types.ActionArgs): Promise<types.ActionResult>;
18
+ mobileUnscheduleAction(opts?: types.ActionArgs): Promise<unknown>;
19
+ };
20
+ export type UIA2AlertMixin = UIA2Mixin<Pick<AlertMixin, 'getAlertText' | 'postAcceptAlert' | 'postDismissAlert'>> & {
21
+ mobileAcceptAlert(opts?: types.AcceptAlertOptions): Promise<void>;
22
+ mobileDismissAlert(opts?: types.DismissAlertOptions): Promise<void>;
23
+ };
24
+ export type UIA2AppStringsMixin = UIA2Mixin<Pick<GeneralMixin, 'getStrings'>> & {
25
+ mobileGetAppStrings(opts?: types.GetAppStringsOptions): Promise<StringRecord>;
26
+ };
27
+ export type UIA2BatteryMixin = UIA2Mixin & {
28
+ mobileGetBatteryInfo(): Promise<types.BatteryInfo>;
29
+ };
30
+ export type UIA2ElementMixin = UIA2Mixin<Pick<ElementMixin, 'getAttribute' | 'elementDisplayed' | 'elementEnabled' | 'elementSelected' | 'getName' | 'getLocation' | 'getSize' | 'touchLongClick' | 'touchDown' | 'touchUp' | 'touchMove' | 'doSetElementValue' | 'setValueImmediate' | 'getText' | 'click' | 'tap' | 'clear' | 'getElementRect'>> & {
31
+ active(): Promise<Element>;
32
+ mobileReplaceElementValue(opts: types.ReplaceValueOptions): Promise<void>;
33
+ getElementScreenshot(elementId: string): Promise<string>;
34
+ };
35
+ export type UIA2FindMixin = UIA2Mixin<Pick<FindMixin, 'doFindElementOrEls'>>;
36
+ export type UIA2GeneralMixin = UIA2Mixin<Pick<GeneralMixin & NetworkMixin & ActionsMixin & ExecuteMixin, 'getPageSource' | 'doSendKeys' | 'back' | 'getDisplayDensity' | 'getWindowSize' | 'getWindowRect' | 'setUrl' | 'keyevent' | 'execute' | 'executeMobile'>> & {
37
+ getClipboard(): Promise<string>;
38
+ mobileViewportScreenshot(): Promise<string>;
39
+ mobileViewPortRect(): Promise<types.RelativeRect>;
40
+ mobileDeepLink(opts: types.DeepLinkOpts): Promise<void>;
41
+ openNotifications(): Promise<void>;
42
+ suspendChromedriverProxy(): void;
43
+ mobileGetDeviceInfo(): Promise<StringRecord>;
44
+ mobileType(opts: types.TypingOptions): Promise<boolean>;
45
+ mobileInstallMultipleApks(opts: types.InstallMultipleApksOptions): Promise<void>;
46
+ mobileBackgroundApp(opts?: types.BackgroundAppOptions): Promise<void>;
47
+ };
48
+ export type UIA2ViewportMixin = UIA2Mixin & {
49
+ getStatusBarHeight(): Promise<number>;
50
+ getDevicePixelRatio(): Promise<string>;
51
+ getViewportScreenshot(): Promise<string>;
52
+ getViewPortRect(): Promise<types.RelativeRect>;
53
+ };
54
+ export type UIA2GesturesMixin = UIA2Mixin & {
55
+ mobileClickGesture(opts?: types.ClickOptions): Promise<void>;
56
+ mobileDoubleClickGesture(opts?: types.ClickOptions): Promise<void>;
57
+ mobileDragGesture(opts: types.DragOptions): Promise<void>;
58
+ mobileFlingGesture(opts: types.FlingOptions): Promise<boolean>;
59
+ mobilePinchCloseGesture(opts: types.PinchOptions): Promise<void>;
60
+ mobilePinchOpenGesture(opts: types.PinchOptions): Promise<void>;
61
+ mobileSwipeGesture(opts: types.SwipeOptions): Promise<void>;
62
+ mobileScrollGesture(opts: types.ScrollGestureOptions): Promise<boolean>;
63
+ mobileScrollBackTo(opts: types.ScrollElementToElementOpts): Promise<void>;
64
+ mobileScroll(opts: types.ScrollOptions): Promise<void>;
65
+ mobileLongClickGesture(opts: types.LongClickOptions): Promise<void>;
66
+ };
67
+ export type UIA2ScreenshotMixin = UIA2Mixin<Pick<ActionsMixin, 'getScreenshot'>> & {
68
+ mobileScreenshots(opts: types.ScreenshotsOpts): Promise<StringRecord<types.Screenshot>>;
69
+ };
70
+ export type UIA2TouchMixin = UIA2Mixin<Required<Pick<ExternalDriver & TouchMixin, 'performActions' | 'releaseActions' | 'doPerformMultiAction'>>>;
71
+ declare module '../driver' {
72
+ interface AndroidUiautomator2Driver extends UIA2ActionsMixin, UIA2AlertMixin, UIA2AppStringsMixin, UIA2BatteryMixin, UIA2ElementMixin, UIA2FindMixin, UIA2GeneralMixin, UIA2GesturesMixin, UIA2ScreenshotMixin, UIA2TouchMixin, UIA2ViewportMixin {
73
+ }
74
+ }
75
+ /**
76
+ * This function assigns a mixin `T` to the `AndroidUiautomator2Driver` class' prototype.
77
+ *
78
+ * While each mixin has its own interface which is (in isolation) unrelated to
79
+ * `AndroidUiautomator2Driver`, the constraint on this generic type `T` is that it must be a
80
+ * partial of `AndroidUiautomator2Driver`'s interface. This enforces that it does not
81
+ * conflict with the existing interface of `AndroidUiautomator2Driver`. In that way, you
82
+ * can think of it as a type guard.
83
+ * @param mixin Mixin implementation
84
+ */
85
+ export declare function mixin<T extends Partial<AndroidUiautomator2Driver>>(mixin: T): void;
86
+ export {};
87
+ //# sourceMappingURL=mixins.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mixins.d.ts","sourceRoot":"","sources":["../../../lib/commands/mixins.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ /**
3
+ * @module
4
+ * @privateRemarks These mixins are kind of a mishmash of stuff from `appium-android-driver`,
5
+ * @privateRemarks unique things, and stuff from `ExternalDriver`. Ideally, we should be pulling the method
6
+ * @privateRemarks definitions right out of `ExternalDriver` whenever possible. Also note that the mixins
7
+ * @privateRemarks contain _more stuff than just commands or execute methods_.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.mixin = void 0;
11
+ const driver_1 = require("../driver");
12
+ /**
13
+ * This function assigns a mixin `T` to the `AndroidUiautomator2Driver` class' prototype.
14
+ *
15
+ * While each mixin has its own interface which is (in isolation) unrelated to
16
+ * `AndroidUiautomator2Driver`, the constraint on this generic type `T` is that it must be a
17
+ * partial of `AndroidUiautomator2Driver`'s interface. This enforces that it does not
18
+ * conflict with the existing interface of `AndroidUiautomator2Driver`. In that way, you
19
+ * can think of it as a type guard.
20
+ * @param mixin Mixin implementation
21
+ */
22
+ function mixin(mixin) {
23
+ Object.assign(driver_1.AndroidUiautomator2Driver.prototype, mixin);
24
+ }
25
+ exports.mixin = mixin;
26
+ //# sourceMappingURL=mixins.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mixins.js","sourceRoot":"","sources":["../../../lib/commands/mixins.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAcH,sCAAoD;AAwIpD;;;;;;;;;GASG;AACH,SAAgB,KAAK,CAA+C,KAAQ;IAC1E,MAAM,CAAC,MAAM,CAAC,kCAAyB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;AAC5D,CAAC;AAFD,sBAEC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=screenshot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"screenshot.d.ts","sourceRoot":"","sources":["../../../lib/commands/screenshot.js"],"names":[],"mappings":""}
@@ -1,65 +1,80 @@
1
1
  "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- Object.defineProperty(exports, "__esModule", {
5
- value: true
6
- });
7
- exports.default = void 0;
8
- require("source-map-support/register");
9
- var _lodash = _interopRequireDefault(require("lodash"));
10
- var _bluebird = _interopRequireDefault(require("bluebird"));
11
- const commands = {};
12
- const DISPLAY_PATTERN = /^Display\s+(\d+)\s+\(.+display\s+(\d+)\).+displayName="([^"]*)/gm;
13
- commands.getScreenshot = async function () {
14
- if (this.mjpegStream) {
15
- const data = await this.mjpegStream.lastChunkPNGBase64();
16
- if (data) {
17
- return data;
18
- }
19
- this.log.warn('Tried to get screenshot from active MJPEG stream, but there ' + 'was no data yet. Falling back to regular screenshot methods.');
20
- }
21
- return await this.uiautomator2.jwproxy.command('/screenshot', 'GET');
2
+ // @ts-check
3
+ var __importDefault = (this && this.__importDefault) || function (mod) {
4
+ return (mod && mod.__esModule) ? mod : { "default": mod };
22
5
  };
23
- commands.mobileScreenshots = async function mobileScreenshots(opts = {}) {
24
- const displaysInfo = await this.adb.shell(['dumpsys', 'SurfaceFlinger', '--display-id']);
25
- const infos = {};
26
- let match;
27
- while (match = DISPLAY_PATTERN.exec(displaysInfo)) {
28
- infos[match[1]] = {
29
- id: match[1],
30
- isDefault: match[2] === '0',
31
- name: match[3]
32
- };
33
- }
34
- if (_lodash.default.isEmpty(infos)) {
35
- this.log.debug(displaysInfo);
36
- throw new Error('Cannot determine the information about connected Android displays');
37
- }
38
- this.log.info(`Parsed Android display infos: ${JSON.stringify(infos)}`);
39
- const toB64Screenshot = async dispId => (await this.adb.takeScreenshot(dispId)).toString('base64');
40
- const {
41
- displayId
42
- } = opts;
43
- const displayIdStr = isNaN(displayId) ? null : `${displayId}`;
44
- if (displayIdStr) {
45
- if (!infos[displayIdStr]) {
46
- throw new Error(`The provided display identifier '${displayId}' is not known. ` + `Only the following displays have been detected: ${JSON.stringify(infos)}`);
47
- }
48
- return {
49
- [displayIdStr]: {
50
- ...infos[displayIdStr],
51
- payload: await toB64Screenshot(displayIdStr)
52
- }
53
- };
54
- }
55
- const allInfos = _lodash.default.values(infos);
56
- const screenshots = await _bluebird.default.all(allInfos.map(({
57
- id
58
- }) => toB64Screenshot(id)));
59
- for (const [info, payload] of _lodash.default.zip(allInfos, screenshots)) {
60
- info.payload = payload;
61
- }
62
- return infos;
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ const mixins_1 = require("./mixins");
8
+ const lodash_1 = __importDefault(require("lodash"));
9
+ const bluebird_1 = __importDefault(require("bluebird"));
10
+ // Display 4619827259835644672 (HWC display 0): port=0 pnpId=GGL displayName="EMU_display_0"
11
+ const DISPLAY_PATTERN = /^Display\s+(\d+)\s+\(.+display\s+(\d+)\).+displayName="([^"]*)/gm;
12
+ /**
13
+ * @type {import('./mixins').UIA2ScreenshotMixin}
14
+ * @satisfies {import('@appium/types').ExternalDriver}
15
+ */
16
+ const ScreenshotMixin = {
17
+ async getScreenshot() {
18
+ if (this.mjpegStream) {
19
+ const data = await this.mjpegStream.lastChunkPNGBase64();
20
+ if (data) {
21
+ return data;
22
+ }
23
+ this.log.warn('Tried to get screenshot from active MJPEG stream, but there ' +
24
+ 'was no data yet. Falling back to regular screenshot methods.');
25
+ }
26
+ return String(await /** @type {import('../uiautomator2').UiAutomator2Server} */ (this.uiautomator2).jwproxy.command('/screenshot', 'GET'));
27
+ },
28
+ /**
29
+ * Retrieves screenshots of each display available to Android.
30
+ * This functionality is only supported since Android 10.
31
+ */
32
+ async mobileScreenshots(opts = {}) {
33
+ const displaysInfo = await /** @type {import('appium-adb').ADB} */ (this.adb).shell([
34
+ 'dumpsys',
35
+ 'SurfaceFlinger',
36
+ '--display-id',
37
+ ]);
38
+ /** @type {import('@appium/types').StringRecord<import('./types').Screenshot>} */
39
+ const infos = {};
40
+ let match;
41
+ while ((match = DISPLAY_PATTERN.exec(displaysInfo))) {
42
+ infos[match[1]] = /** @type {any} */ ({
43
+ id: match[1],
44
+ isDefault: match[2] === '0',
45
+ name: match[3],
46
+ });
47
+ }
48
+ if (lodash_1.default.isEmpty(infos)) {
49
+ this.log.debug(displaysInfo);
50
+ throw new Error('Cannot determine the information about connected Android displays');
51
+ }
52
+ this.log.info(`Parsed Android display infos: ${JSON.stringify(infos)}`);
53
+ /**
54
+ * @param {string} dispId
55
+ */
56
+ const toB64Screenshot = async (dispId) => (await /** @type {import('appium-adb').ADB} */ (this.adb).takeScreenshot(dispId)).toString('base64');
57
+ const { displayId } = opts;
58
+ const displayIdStr = lodash_1.default.isNaN(displayId) ? null : `${displayId}`;
59
+ if (displayIdStr) {
60
+ if (!infos[displayIdStr]) {
61
+ throw new Error(`The provided display identifier '${displayId}' is not known. ` +
62
+ `Only the following displays have been detected: ${JSON.stringify(infos)}`);
63
+ }
64
+ return {
65
+ [displayIdStr]: {
66
+ ...infos[displayIdStr],
67
+ payload: await toB64Screenshot(displayIdStr),
68
+ },
69
+ };
70
+ }
71
+ const allInfos = lodash_1.default.values(infos);
72
+ const screenshots = await bluebird_1.default.all(allInfos.map(({ id }) => toB64Screenshot(id)));
73
+ for (const [info, payload] of /** @type {[import('./types').Screenshot, string][]} */ (lodash_1.default.zip(allInfos, screenshots))) {
74
+ info.payload = payload;
75
+ }
76
+ return infos;
77
+ },
63
78
  };
64
- var _default = exports.default = commands;
65
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfYmx1ZWJpcmQiLCJjb21tYW5kcyIsIkRJU1BMQVlfUEFUVEVSTiIsImdldFNjcmVlbnNob3QiLCJtanBlZ1N0cmVhbSIsImRhdGEiLCJsYXN0Q2h1bmtQTkdCYXNlNjQiLCJsb2ciLCJ3YXJuIiwidWlhdXRvbWF0b3IyIiwiandwcm94eSIsImNvbW1hbmQiLCJtb2JpbGVTY3JlZW5zaG90cyIsIm9wdHMiLCJkaXNwbGF5c0luZm8iLCJhZGIiLCJzaGVsbCIsImluZm9zIiwibWF0Y2giLCJleGVjIiwiaWQiLCJpc0RlZmF1bHQiLCJuYW1lIiwiXyIsImlzRW1wdHkiLCJkZWJ1ZyIsIkVycm9yIiwiaW5mbyIsIkpTT04iLCJzdHJpbmdpZnkiLCJ0b0I2NFNjcmVlbnNob3QiLCJkaXNwSWQiLCJ0YWtlU2NyZWVuc2hvdCIsInRvU3RyaW5nIiwiZGlzcGxheUlkIiwiZGlzcGxheUlkU3RyIiwiaXNOYU4iLCJwYXlsb2FkIiwiYWxsSW5mb3MiLCJ2YWx1ZXMiLCJzY3JlZW5zaG90cyIsIkIiLCJhbGwiLCJtYXAiLCJ6aXAiLCJfZGVmYXVsdCIsImV4cG9ydHMiLCJkZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2NvbW1hbmRzL3NjcmVlbnNob3QuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcblxuY29uc3QgY29tbWFuZHMgPSB7fTtcblxuLy8gRGlzcGxheSA0NjE5ODI3MjU5ODM1NjQ0NjcyIChIV0MgZGlzcGxheSAwKTogcG9ydD0wIHBucElkPUdHTCBkaXNwbGF5TmFtZT1cIkVNVV9kaXNwbGF5XzBcIlxuY29uc3QgRElTUExBWV9QQVRURVJOID0gL15EaXNwbGF5XFxzKyhcXGQrKVxccytcXCguK2Rpc3BsYXlcXHMrKFxcZCspXFwpLitkaXNwbGF5TmFtZT1cIihbXlwiXSopL2dtO1xuXG5jb21tYW5kcy5nZXRTY3JlZW5zaG90ID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5tanBlZ1N0cmVhbSkge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLm1qcGVnU3RyZWFtLmxhc3RDaHVua1BOR0Jhc2U2NCgpO1xuICAgIGlmIChkYXRhKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gICAgdGhpcy5sb2cud2FybignVHJpZWQgdG8gZ2V0IHNjcmVlbnNob3QgZnJvbSBhY3RpdmUgTUpQRUcgc3RyZWFtLCBidXQgdGhlcmUgJyArXG4gICAgICAnd2FzIG5vIGRhdGEgeWV0LiBGYWxsaW5nIGJhY2sgdG8gcmVndWxhciBzY3JlZW5zaG90IG1ldGhvZHMuJyk7XG4gIH1cbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL3NjcmVlbnNob3QnLCAnR0VUJyk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFNjcmVlbnNob3RzSW5mb1xuICpcbiAqIEEgZGljdGlvbmFyeSB3aGVyZSBlYWNoIGtleSBjb250YWlucyBhIHVuaXF1ZSBkaXNwbGF5IGlkZW50aWZpZXJcbiAqIGFuZCB2YWx1ZXMgYXJlIGRpY3Rpb25hcmllcyB3aXRoIGZvbGxvd2luZyBpdGVtczpcbiAqIC0gaWQ6IERpc3BsYXkgaWRlbnRpZmllclxuICogLSBuYW1lOiBEaXNwbGF5IG5hbWUsIGNvdWxkIGJlIGVtcHR5XG4gKiAtIGlzRGVmYXVsdDogV2hldGhlciB0aGlzIGRpc3BsYXkgaXMgdGhlIGRlZmF1bHQgb25lXG4gKiAtIHBheWxvYWQ6IFRoZSBhY3R1YWwgUE5HIHNjcmVlbnNob3QgZGF0YSBlbmNvZGVkIHRvIGJhc2U2NCBzdHJpbmdcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFNjcmVlbnNob3RzT3B0c1xuICogQHByb3BlcnR5IHtudW1iZXJ8c3RyaW5nP30gZGlzcGxheUlkIEFuZHJvaWQgZGlzcGxheSBpZGVudGlmaWVyIHRvIHRha2UgYSBzY3JlZW5zaG90IGZvci5cbiAqIElmIG5vdCBwcm92aWRlZCB0aGVuIHNjcmVlbnNob3RzIG9mIGFsbCBkaXNwbGF5cyBhcmUgZ29pbmcgdG8gYmUgcmV0dXJuZWQuXG4gKiBJZiBubyBtYXRjaGVzIHdlcmUgZm91bmQgdGhlbiBhbiBlcnJvciBpcyB0aHJvd24uXG4gKi9cblxuLyoqXG4gKiBSZXRyaWV2ZXMgc2NyZWVuc2hvdHMgb2YgZWFjaCBkaXNwbGF5IGF2YWlsYWJsZSB0byBBbmRyb2lkLlxuICogVGhpcyBmdW5jdGlvbmFsaXR5IGlzIG9ubHkgc3VwcG9ydGVkIHNpbmNlIEFuZHJvaWQgMTAuXG4gKlxuICogQHBhcmFtIHtTY3JlZW5zaG90c09wdHN9IG9wdHNcbiAqIEByZXR1cm5zIHtQcm9taXNlPFNjcmVlbnNob3RzSW5mbz59XG4gKi9cbmNvbW1hbmRzLm1vYmlsZVNjcmVlbnNob3RzID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlU2NyZWVuc2hvdHMgKG9wdHMgPSB7fSkge1xuICBjb25zdCBkaXNwbGF5c0luZm8gPSBhd2FpdCB0aGlzLmFkYi5zaGVsbChbJ2R1bXBzeXMnLCAnU3VyZmFjZUZsaW5nZXInLCAnLS1kaXNwbGF5LWlkJ10pO1xuICBjb25zdCBpbmZvcyA9IHt9O1xuICBsZXQgbWF0Y2g7XG4gIHdoaWxlICgobWF0Y2ggPSBESVNQTEFZX1BBVFRFUk4uZXhlYyhkaXNwbGF5c0luZm8pKSkge1xuICAgIGluZm9zW21hdGNoWzFdXSA9IHtcbiAgICAgIGlkOiBtYXRjaFsxXSxcbiAgICAgIGlzRGVmYXVsdDogbWF0Y2hbMl0gPT09ICcwJyxcbiAgICAgIG5hbWU6IG1hdGNoWzNdLFxuICAgIH07XG4gIH1cbiAgaWYgKF8uaXNFbXB0eShpbmZvcykpIHtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhkaXNwbGF5c0luZm8pO1xuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGRldGVybWluZSB0aGUgaW5mb3JtYXRpb24gYWJvdXQgY29ubmVjdGVkIEFuZHJvaWQgZGlzcGxheXMnKTtcbiAgfVxuICB0aGlzLmxvZy5pbmZvKGBQYXJzZWQgQW5kcm9pZCBkaXNwbGF5IGluZm9zOiAke0pTT04uc3RyaW5naWZ5KGluZm9zKX1gKTtcblxuICBjb25zdCB0b0I2NFNjcmVlbnNob3QgPSBhc3luYyAoZGlzcElkKSA9PiAoYXdhaXQgdGhpcy5hZGIudGFrZVNjcmVlbnNob3QoZGlzcElkKSlcbiAgICAudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuXG4gIGNvbnN0IHtkaXNwbGF5SWR9ID0gb3B0cztcbiAgY29uc3QgZGlzcGxheUlkU3RyID0gaXNOYU4oZGlzcGxheUlkKSA/IG51bGwgOiBgJHtkaXNwbGF5SWR9YDtcbiAgaWYgKGRpc3BsYXlJZFN0cikge1xuICAgIGlmICghaW5mb3NbZGlzcGxheUlkU3RyXSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgVGhlIHByb3ZpZGVkIGRpc3BsYXkgaWRlbnRpZmllciAnJHtkaXNwbGF5SWR9JyBpcyBub3Qga25vd24uIGAgK1xuICAgICAgICBgT25seSB0aGUgZm9sbG93aW5nIGRpc3BsYXlzIGhhdmUgYmVlbiBkZXRlY3RlZDogJHtKU09OLnN0cmluZ2lmeShpbmZvcyl9YFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIFtkaXNwbGF5SWRTdHJdOiB7XG4gICAgICAgIC4uLmluZm9zW2Rpc3BsYXlJZFN0cl0sXG4gICAgICAgIHBheWxvYWQ6IGF3YWl0IHRvQjY0U2NyZWVuc2hvdChkaXNwbGF5SWRTdHIpLFxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBjb25zdCBhbGxJbmZvcyA9IF8udmFsdWVzKGluZm9zKTtcbiAgY29uc3Qgc2NyZWVuc2hvdHMgPSBhd2FpdCBCLmFsbChhbGxJbmZvcy5tYXAoKHtpZH0pID0+IHRvQjY0U2NyZWVuc2hvdChpZCkpKTtcbiAgZm9yIChjb25zdCBbaW5mbywgcGF5bG9hZF0gb2YgXy56aXAoYWxsSW5mb3MsIHNjcmVlbnNob3RzKSkge1xuICAgIGluZm8ucGF5bG9hZCA9IHBheWxvYWQ7XG4gIH1cbiAgcmV0dXJuIGluZm9zO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY29tbWFuZHM7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUEsSUFBQUEsT0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsU0FBQSxHQUFBRixzQkFBQSxDQUFBQyxPQUFBO0FBRUEsTUFBTUUsUUFBUSxHQUFHLENBQUMsQ0FBQztBQUduQixNQUFNQyxlQUFlLEdBQUcsa0VBQWtFO0FBRTFGRCxRQUFRLENBQUNFLGFBQWEsR0FBRyxrQkFBa0I7RUFDekMsSUFBSSxJQUFJLENBQUNDLFdBQVcsRUFBRTtJQUNwQixNQUFNQyxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUNELFdBQVcsQ0FBQ0Usa0JBQWtCLENBQUMsQ0FBQztJQUN4RCxJQUFJRCxJQUFJLEVBQUU7TUFDUixPQUFPQSxJQUFJO0lBQ2I7SUFDQSxJQUFJLENBQUNFLEdBQUcsQ0FBQ0MsSUFBSSxDQUFDLDhEQUE4RCxHQUMxRSw4REFBOEQsQ0FBQztFQUNuRTtFQUNBLE9BQU8sTUFBTSxJQUFJLENBQUNDLFlBQVksQ0FBQ0MsT0FBTyxDQUFDQyxPQUFPLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQztBQUN0RSxDQUFDO0FBMkJEVixRQUFRLENBQUNXLGlCQUFpQixHQUFHLGVBQWVBLGlCQUFpQkEsQ0FBRUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFO0VBQ3hFLE1BQU1DLFlBQVksR0FBRyxNQUFNLElBQUksQ0FBQ0MsR0FBRyxDQUFDQyxLQUFLLENBQUMsQ0FBQyxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxDQUFDLENBQUM7RUFDeEYsTUFBTUMsS0FBSyxHQUFHLENBQUMsQ0FBQztFQUNoQixJQUFJQyxLQUFLO0VBQ1QsT0FBUUEsS0FBSyxHQUFHaEIsZUFBZSxDQUFDaUIsSUFBSSxDQUFDTCxZQUFZLENBQUMsRUFBRztJQUNuREcsS0FBSyxDQUFDQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRztNQUNoQkUsRUFBRSxFQUFFRixLQUFLLENBQUMsQ0FBQyxDQUFDO01BQ1pHLFNBQVMsRUFBRUgsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUc7TUFDM0JJLElBQUksRUFBRUosS0FBSyxDQUFDLENBQUM7SUFDZixDQUFDO0VBQ0g7RUFDQSxJQUFJSyxlQUFDLENBQUNDLE9BQU8sQ0FBQ1AsS0FBSyxDQUFDLEVBQUU7SUFDcEIsSUFBSSxDQUFDVixHQUFHLENBQUNrQixLQUFLLENBQUNYLFlBQVksQ0FBQztJQUM1QixNQUFNLElBQUlZLEtBQUssQ0FBQyxtRUFBbUUsQ0FBQztFQUN0RjtFQUNBLElBQUksQ0FBQ25CLEdBQUcsQ0FBQ29CLElBQUksQ0FBRSxpQ0FBZ0NDLElBQUksQ0FBQ0MsU0FBUyxDQUFDWixLQUFLLENBQUUsRUFBQyxDQUFDO0VBRXZFLE1BQU1hLGVBQWUsR0FBRyxNQUFPQyxNQUFNLElBQUssQ0FBQyxNQUFNLElBQUksQ0FBQ2hCLEdBQUcsQ0FBQ2lCLGNBQWMsQ0FBQ0QsTUFBTSxDQUFDLEVBQzdFRSxRQUFRLENBQUMsUUFBUSxDQUFDO0VBRXJCLE1BQU07SUFBQ0M7RUFBUyxDQUFDLEdBQUdyQixJQUFJO0VBQ3hCLE1BQU1zQixZQUFZLEdBQUdDLEtBQUssQ0FBQ0YsU0FBUyxDQUFDLEdBQUcsSUFBSSxHQUFJLEdBQUVBLFNBQVUsRUFBQztFQUM3RCxJQUFJQyxZQUFZLEVBQUU7SUFDaEIsSUFBSSxDQUFDbEIsS0FBSyxDQUFDa0IsWUFBWSxDQUFDLEVBQUU7TUFDeEIsTUFBTSxJQUFJVCxLQUFLLENBQ1osb0NBQW1DUSxTQUFVLGtCQUFpQixHQUM5RCxtREFBa0ROLElBQUksQ0FBQ0MsU0FBUyxDQUFDWixLQUFLLENBQUUsRUFDM0UsQ0FBQztJQUNIO0lBQ0EsT0FBTztNQUNMLENBQUNrQixZQUFZLEdBQUc7UUFDZCxHQUFHbEIsS0FBSyxDQUFDa0IsWUFBWSxDQUFDO1FBQ3RCRSxPQUFPLEVBQUUsTUFBTVAsZUFBZSxDQUFDSyxZQUFZO01BQzdDO0lBQ0YsQ0FBQztFQUNIO0VBRUEsTUFBTUcsUUFBUSxHQUFHZixlQUFDLENBQUNnQixNQUFNLENBQUN0QixLQUFLLENBQUM7RUFDaEMsTUFBTXVCLFdBQVcsR0FBRyxNQUFNQyxpQkFBQyxDQUFDQyxHQUFHLENBQUNKLFFBQVEsQ0FBQ0ssR0FBRyxDQUFDLENBQUM7SUFBQ3ZCO0VBQUUsQ0FBQyxLQUFLVSxlQUFlLENBQUNWLEVBQUUsQ0FBQyxDQUFDLENBQUM7RUFDNUUsS0FBSyxNQUFNLENBQUNPLElBQUksRUFBRVUsT0FBTyxDQUFDLElBQUlkLGVBQUMsQ0FBQ3FCLEdBQUcsQ0FBQ04sUUFBUSxFQUFFRSxXQUFXLENBQUMsRUFBRTtJQUMxRGIsSUFBSSxDQUFDVSxPQUFPLEdBQUdBLE9BQU87RUFDeEI7RUFDQSxPQUFPcEIsS0FBSztBQUNkLENBQUM7QUFBQyxJQUFBNEIsUUFBQSxHQUFBQyxPQUFBLENBQUFDLE9BQUEsR0FFYTlDLFFBQVEifQ==
79
+ (0, mixins_1.mixin)(ScreenshotMixin);
80
+ //# sourceMappingURL=screenshot.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"screenshot.js","names":["_lodash","_interopRequireDefault","require","_bluebird","commands","DISPLAY_PATTERN","getScreenshot","mjpegStream","data","lastChunkPNGBase64","log","warn","uiautomator2","jwproxy","command","mobileScreenshots","opts","displaysInfo","adb","shell","infos","match","exec","id","isDefault","name","_","isEmpty","debug","Error","info","JSON","stringify","toB64Screenshot","dispId","takeScreenshot","toString","displayId","displayIdStr","isNaN","payload","allInfos","values","screenshots","B","all","map","zip","_default","exports","default"],"sources":["../../../lib/commands/screenshot.js"],"sourcesContent":["import _ from 'lodash';\nimport B from 'bluebird';\n\nconst commands = {};\n\n// Display 4619827259835644672 (HWC display 0): port=0 pnpId=GGL displayName=\"EMU_display_0\"\nconst DISPLAY_PATTERN = /^Display\\s+(\\d+)\\s+\\(.+display\\s+(\\d+)\\).+displayName=\"([^\"]*)/gm;\n\ncommands.getScreenshot = async function () {\n if (this.mjpegStream) {\n const data = await this.mjpegStream.lastChunkPNGBase64();\n if (data) {\n return data;\n }\n this.log.warn('Tried to get screenshot from active MJPEG stream, but there ' +\n 'was no data yet. Falling back to regular screenshot methods.');\n }\n return await this.uiautomator2.jwproxy.command('/screenshot', 'GET');\n};\n\n/**\n * @typedef {Object} ScreenshotsInfo\n *\n * A dictionary where each key contains a unique display identifier\n * and values are dictionaries with following items:\n * - id: Display identifier\n * - name: Display name, could be empty\n * - isDefault: Whether this display is the default one\n * - payload: The actual PNG screenshot data encoded to base64 string\n */\n\n/**\n * @typedef {Object} ScreenshotsOpts\n * @property {number|string?} displayId Android display identifier to take a screenshot for.\n * If not provided then screenshots of all displays are going to be returned.\n * If no matches were found then an error is thrown.\n */\n\n/**\n * Retrieves screenshots of each display available to Android.\n * This functionality is only supported since Android 10.\n *\n * @param {ScreenshotsOpts} opts\n * @returns {Promise<ScreenshotsInfo>}\n */\ncommands.mobileScreenshots = async function mobileScreenshots (opts = {}) {\n const displaysInfo = await this.adb.shell(['dumpsys', 'SurfaceFlinger', '--display-id']);\n const infos = {};\n let match;\n while ((match = DISPLAY_PATTERN.exec(displaysInfo))) {\n infos[match[1]] = {\n id: match[1],\n isDefault: match[2] === '0',\n name: match[3],\n };\n }\n if (_.isEmpty(infos)) {\n this.log.debug(displaysInfo);\n throw new Error('Cannot determine the information about connected Android displays');\n }\n this.log.info(`Parsed Android display infos: ${JSON.stringify(infos)}`);\n\n const toB64Screenshot = async (dispId) => (await this.adb.takeScreenshot(dispId))\n .toString('base64');\n\n const {displayId} = opts;\n const displayIdStr = isNaN(displayId) ? null : `${displayId}`;\n if (displayIdStr) {\n if (!infos[displayIdStr]) {\n throw new Error(\n `The provided display identifier '${displayId}' is not known. ` +\n `Only the following displays have been detected: ${JSON.stringify(infos)}`\n );\n }\n return {\n [displayIdStr]: {\n ...infos[displayIdStr],\n payload: await toB64Screenshot(displayIdStr),\n }\n };\n }\n\n const allInfos = _.values(infos);\n const screenshots = await B.all(allInfos.map(({id}) => toB64Screenshot(id)));\n for (const [info, payload] of _.zip(allInfos, screenshots)) {\n info.payload = payload;\n }\n return infos;\n};\n\nexport default commands;\n"],"mappings":";;;;;;;;AAAA,IAAAA,OAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,SAAA,GAAAF,sBAAA,CAAAC,OAAA;AAEA,MAAME,QAAQ,GAAG,CAAC,CAAC;AAGnB,MAAMC,eAAe,GAAG,kEAAkE;AAE1FD,QAAQ,CAACE,aAAa,GAAG,kBAAkB;EACzC,IAAI,IAAI,CAACC,WAAW,EAAE;IACpB,MAAMC,IAAI,GAAG,MAAM,IAAI,CAACD,WAAW,CAACE,kBAAkB,CAAC,CAAC;IACxD,IAAID,IAAI,EAAE;MACR,OAAOA,IAAI;IACb;IACA,IAAI,CAACE,GAAG,CAACC,IAAI,CAAC,8DAA8D,GAC1E,8DAA8D,CAAC;EACnE;EACA,OAAO,MAAM,IAAI,CAACC,YAAY,CAACC,OAAO,CAACC,OAAO,CAAC,aAAa,EAAE,KAAK,CAAC;AACtE,CAAC;AA2BDV,QAAQ,CAACW,iBAAiB,GAAG,eAAeA,iBAAiBA,CAAEC,IAAI,GAAG,CAAC,CAAC,EAAE;EACxE,MAAMC,YAAY,GAAG,MAAM,IAAI,CAACC,GAAG,CAACC,KAAK,CAAC,CAAC,SAAS,EAAE,gBAAgB,EAAE,cAAc,CAAC,CAAC;EACxF,MAAMC,KAAK,GAAG,CAAC,CAAC;EAChB,IAAIC,KAAK;EACT,OAAQA,KAAK,GAAGhB,eAAe,CAACiB,IAAI,CAACL,YAAY,CAAC,EAAG;IACnDG,KAAK,CAACC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG;MAChBE,EAAE,EAAEF,KAAK,CAAC,CAAC,CAAC;MACZG,SAAS,EAAEH,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG;MAC3BI,IAAI,EAAEJ,KAAK,CAAC,CAAC;IACf,CAAC;EACH;EACA,IAAIK,eAAC,CAACC,OAAO,CAACP,KAAK,CAAC,EAAE;IACpB,IAAI,CAACV,GAAG,CAACkB,KAAK,CAACX,YAAY,CAAC;IAC5B,MAAM,IAAIY,KAAK,CAAC,mEAAmE,CAAC;EACtF;EACA,IAAI,CAACnB,GAAG,CAACoB,IAAI,CAAE,iCAAgCC,IAAI,CAACC,SAAS,CAACZ,KAAK,CAAE,EAAC,CAAC;EAEvE,MAAMa,eAAe,GAAG,MAAOC,MAAM,IAAK,CAAC,MAAM,IAAI,CAAChB,GAAG,CAACiB,cAAc,CAACD,MAAM,CAAC,EAC7EE,QAAQ,CAAC,QAAQ,CAAC;EAErB,MAAM;IAACC;EAAS,CAAC,GAAGrB,IAAI;EACxB,MAAMsB,YAAY,GAAGC,KAAK,CAACF,SAAS,CAAC,GAAG,IAAI,GAAI,GAAEA,SAAU,EAAC;EAC7D,IAAIC,YAAY,EAAE;IAChB,IAAI,CAAClB,KAAK,CAACkB,YAAY,CAAC,EAAE;MACxB,MAAM,IAAIT,KAAK,CACZ,oCAAmCQ,SAAU,kBAAiB,GAC9D,mDAAkDN,IAAI,CAACC,SAAS,CAACZ,KAAK,CAAE,EAC3E,CAAC;IACH;IACA,OAAO;MACL,CAACkB,YAAY,GAAG;QACd,GAAGlB,KAAK,CAACkB,YAAY,CAAC;QACtBE,OAAO,EAAE,MAAMP,eAAe,CAACK,YAAY;MAC7C;IACF,CAAC;EACH;EAEA,MAAMG,QAAQ,GAAGf,eAAC,CAACgB,MAAM,CAACtB,KAAK,CAAC;EAChC,MAAMuB,WAAW,GAAG,MAAMC,iBAAC,CAACC,GAAG,CAACJ,QAAQ,CAACK,GAAG,CAAC,CAAC;IAACvB;EAAE,CAAC,KAAKU,eAAe,CAACV,EAAE,CAAC,CAAC,CAAC;EAC5E,KAAK,MAAM,CAACO,IAAI,EAAEU,OAAO,CAAC,IAAId,eAAC,CAACqB,GAAG,CAACN,QAAQ,EAAEE,WAAW,CAAC,EAAE;IAC1Db,IAAI,CAACU,OAAO,GAAGA,OAAO;EACxB;EACA,OAAOpB,KAAK;AACd,CAAC;AAAC,IAAA4B,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAEa9C,QAAQ"}
1
+ {"version":3,"file":"screenshot.js","sourceRoot":"","sources":["../../../lib/commands/screenshot.js"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export type UiAutomator2Server = import('../uiautomator2').UiAutomator2Server;
2
+ //# sourceMappingURL=touch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"touch.d.ts","sourceRoot":"","sources":["../../../lib/commands/touch.js"],"names":[],"mappings":"iCAqEa,OAAO,iBAAiB,EAAE,kBAAkB"}
@@ -1,40 +1,50 @@
1
1
  "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
- require("source-map-support/register");
8
- const commands = {};
9
- commands.doPerformMultiAction = async function (elementId, states) {
10
- let opts;
11
- if (elementId) {
12
- opts = {
13
- elementId,
14
- actions: states
15
- };
16
- return await this.uiautomator2.jwproxy.command('/touch/multi/perform', 'POST', opts);
17
- } else {
18
- opts = {
19
- actions: states
20
- };
21
- return await this.uiautomator2.jwproxy.command('/touch/multi/perform', 'POST', opts);
22
- }
2
+ // @ts-check
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ const mixins_1 = require("./mixins");
5
+ /**
6
+ * @type {import('./mixins').UIA2TouchMixin}
7
+ * @satisfies {import('@appium/types').ExternalDriver}
8
+ */
9
+ const TouchMixin = {
10
+ async doPerformMultiAction(elementId, states) {
11
+ let opts;
12
+ if (elementId) {
13
+ opts = {
14
+ elementId,
15
+ actions: states,
16
+ };
17
+ await /** @type {UiAutomator2Server} */ (this.uiautomator2).jwproxy.command('/touch/multi/perform', 'POST', opts);
18
+ }
19
+ else {
20
+ opts = {
21
+ actions: states,
22
+ };
23
+ await /** @type {UiAutomator2Server} */ (this.uiautomator2).jwproxy.command('/touch/multi/perform', 'POST', opts);
24
+ }
25
+ },
26
+ async performActions(actions) {
27
+ this.log.debug(`Received the following W3C actions: ${JSON.stringify(actions, null, ' ')}`);
28
+ // This is mandatory, since Selenium API uses MOUSE as the default pointer type
29
+ const preprocessedActions = actions.map((action) => Object.assign({}, action, action.type === 'pointer'
30
+ ? {
31
+ parameters: {
32
+ pointerType: 'touch',
33
+ },
34
+ }
35
+ : {}));
36
+ this.log.debug(`Preprocessed actions: ${JSON.stringify(preprocessedActions, null, ' ')}`);
37
+ await /** @type {UiAutomator2Server} */ (this.uiautomator2).jwproxy.command('/actions', 'POST', {
38
+ actions: preprocessedActions,
39
+ });
40
+ },
41
+ // eslint-disable-next-line require-await
42
+ async releaseActions() {
43
+ this.log.info('On this platform, releaseActions is a no-op');
44
+ },
23
45
  };
24
- commands.performActions = async function (actions) {
25
- this.log.debug(`Received the following W3C actions: ${JSON.stringify(actions, null, ' ')}`);
26
- const preprocessedActions = actions.map(action => Object.assign({}, action, action.type === 'pointer' ? {
27
- parameters: {
28
- pointerType: 'touch'
29
- }
30
- } : {}));
31
- this.log.debug(`Preprocessed actions: ${JSON.stringify(preprocessedActions, null, ' ')}`);
32
- return await this.uiautomator2.jwproxy.command('/actions', 'POST', {
33
- actions: preprocessedActions
34
- });
35
- };
36
- commands.releaseActions = async function releaseActions() {
37
- this.log.info('On this platform, releaseActions is a no-op');
38
- };
39
- var _default = exports.default = commands;
40
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb21tYW5kcyIsImRvUGVyZm9ybU11bHRpQWN0aW9uIiwiZWxlbWVudElkIiwic3RhdGVzIiwib3B0cyIsImFjdGlvbnMiLCJ1aWF1dG9tYXRvcjIiLCJqd3Byb3h5IiwiY29tbWFuZCIsInBlcmZvcm1BY3Rpb25zIiwibG9nIiwiZGVidWciLCJKU09OIiwic3RyaW5naWZ5IiwicHJlcHJvY2Vzc2VkQWN0aW9ucyIsIm1hcCIsImFjdGlvbiIsIk9iamVjdCIsImFzc2lnbiIsInR5cGUiLCJwYXJhbWV0ZXJzIiwicG9pbnRlclR5cGUiLCJyZWxlYXNlQWN0aW9ucyIsImluZm8iLCJfZGVmYXVsdCIsImV4cG9ydHMiLCJkZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2NvbW1hbmRzL3RvdWNoLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IGNvbW1hbmRzID0ge307XG5cbmNvbW1hbmRzLmRvUGVyZm9ybU11bHRpQWN0aW9uID0gYXN5bmMgZnVuY3Rpb24gKGVsZW1lbnRJZCwgc3RhdGVzKSB7XG4gIGxldCBvcHRzO1xuICBpZiAoZWxlbWVudElkKSB7XG4gICAgb3B0cyA9IHtcbiAgICAgIGVsZW1lbnRJZCxcbiAgICAgIGFjdGlvbnM6IHN0YXRlc1xuICAgIH07XG5cbiAgICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKCcvdG91Y2gvbXVsdGkvcGVyZm9ybScsICdQT1NUJywgb3B0cyk7XG4gIH0gZWxzZSB7XG4gICAgb3B0cyA9IHtcbiAgICAgIGFjdGlvbnM6IHN0YXRlc1xuICAgIH07XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL3RvdWNoL211bHRpL3BlcmZvcm0nLCAnUE9TVCcsIG9wdHMpO1xuICB9XG59O1xuXG5jb21tYW5kcy5wZXJmb3JtQWN0aW9ucyA9IGFzeW5jIGZ1bmN0aW9uIChhY3Rpb25zKSB7XG4gIHRoaXMubG9nLmRlYnVnKGBSZWNlaXZlZCB0aGUgZm9sbG93aW5nIFczQyBhY3Rpb25zOiAke0pTT04uc3RyaW5naWZ5KGFjdGlvbnMsIG51bGwsICcgICcpfWApO1xuICAvLyBUaGlzIGlzIG1hbmRhdG9yeSwgc2luY2UgU2VsZW5pdW0gQVBJIHVzZXMgTU9VU0UgYXMgdGhlIGRlZmF1bHQgcG9pbnRlciB0eXBlXG4gIGNvbnN0IHByZXByb2Nlc3NlZEFjdGlvbnMgPSBhY3Rpb25zXG4gICAgLm1hcCgoYWN0aW9uKSA9PiBPYmplY3QuYXNzaWduKHt9LCBhY3Rpb24sIGFjdGlvbi50eXBlID09PSAncG9pbnRlcicgPyB7XG4gICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgIHBvaW50ZXJUeXBlOiAndG91Y2gnXG4gICAgICB9XG4gICAgfSA6IHt9KSk7XG4gIHRoaXMubG9nLmRlYnVnKGBQcmVwcm9jZXNzZWQgYWN0aW9uczogJHtKU09OLnN0cmluZ2lmeShwcmVwcm9jZXNzZWRBY3Rpb25zLCBudWxsLCAnICAnKX1gKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL2FjdGlvbnMnLCAnUE9TVCcsIHthY3Rpb25zOiBwcmVwcm9jZXNzZWRBY3Rpb25zfSk7XG59O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVxdWlyZS1hd2FpdFxuY29tbWFuZHMucmVsZWFzZUFjdGlvbnMgPSBhc3luYyBmdW5jdGlvbiByZWxlYXNlQWN0aW9ucyAoKSB7XG4gIHRoaXMubG9nLmluZm8oJ09uIHRoaXMgcGxhdGZvcm0sIHJlbGVhc2VBY3Rpb25zIGlzIGEgbm8tb3AnKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNvbW1hbmRzO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUEsTUFBTUEsUUFBUSxHQUFHLENBQUMsQ0FBQztBQUVuQkEsUUFBUSxDQUFDQyxvQkFBb0IsR0FBRyxnQkFBZ0JDLFNBQVMsRUFBRUMsTUFBTSxFQUFFO0VBQ2pFLElBQUlDLElBQUk7RUFDUixJQUFJRixTQUFTLEVBQUU7SUFDYkUsSUFBSSxHQUFHO01BQ0xGLFNBQVM7TUFDVEcsT0FBTyxFQUFFRjtJQUNYLENBQUM7SUFFRCxPQUFPLE1BQU0sSUFBSSxDQUFDRyxZQUFZLENBQUNDLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDLHNCQUFzQixFQUFFLE1BQU0sRUFBRUosSUFBSSxDQUFDO0VBQ3RGLENBQUMsTUFBTTtJQUNMQSxJQUFJLEdBQUc7TUFDTEMsT0FBTyxFQUFFRjtJQUNYLENBQUM7SUFDRCxPQUFPLE1BQU0sSUFBSSxDQUFDRyxZQUFZLENBQUNDLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDLHNCQUFzQixFQUFFLE1BQU0sRUFBRUosSUFBSSxDQUFDO0VBQ3RGO0FBQ0YsQ0FBQztBQUVESixRQUFRLENBQUNTLGNBQWMsR0FBRyxnQkFBZ0JKLE9BQU8sRUFBRTtFQUNqRCxJQUFJLENBQUNLLEdBQUcsQ0FBQ0MsS0FBSyxDQUFFLHVDQUFzQ0MsSUFBSSxDQUFDQyxTQUFTLENBQUNSLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFFLEVBQUMsQ0FBQztFQUU1RixNQUFNUyxtQkFBbUIsR0FBR1QsT0FBTyxDQUNoQ1UsR0FBRyxDQUFFQyxNQUFNLElBQUtDLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFRixNQUFNLEVBQUVBLE1BQU0sQ0FBQ0csSUFBSSxLQUFLLFNBQVMsR0FBRztJQUNyRUMsVUFBVSxFQUFFO01BQ1ZDLFdBQVcsRUFBRTtJQUNmO0VBQ0YsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDVixJQUFJLENBQUNYLEdBQUcsQ0FBQ0MsS0FBSyxDQUFFLHlCQUF3QkMsSUFBSSxDQUFDQyxTQUFTLENBQUNDLG1CQUFtQixFQUFFLElBQUksRUFBRSxJQUFJLENBQUUsRUFBQyxDQUFDO0VBQzFGLE9BQU8sTUFBTSxJQUFJLENBQUNSLFlBQVksQ0FBQ0MsT0FBTyxDQUFDQyxPQUFPLENBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRTtJQUFDSCxPQUFPLEVBQUVTO0VBQW1CLENBQUMsQ0FBQztBQUNwRyxDQUFDO0FBR0RkLFFBQVEsQ0FBQ3NCLGNBQWMsR0FBRyxlQUFlQSxjQUFjQSxDQUFBLEVBQUk7RUFDekQsSUFBSSxDQUFDWixHQUFHLENBQUNhLElBQUksQ0FBQyw2Q0FBNkMsQ0FBQztBQUM5RCxDQUFDO0FBQUMsSUFBQUMsUUFBQSxHQUFBQyxPQUFBLENBQUFDLE9BQUEsR0FFYTFCLFFBQVEifQ==
46
+ (0, mixins_1.mixin)(TouchMixin);
47
+ /**
48
+ * @typedef {import('../uiautomator2').UiAutomator2Server} UiAutomator2Server
49
+ */
50
+ //# sourceMappingURL=touch.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"touch.js","names":["commands","doPerformMultiAction","elementId","states","opts","actions","uiautomator2","jwproxy","command","performActions","log","debug","JSON","stringify","preprocessedActions","map","action","Object","assign","type","parameters","pointerType","releaseActions","info","_default","exports","default"],"sources":["../../../lib/commands/touch.js"],"sourcesContent":["const commands = {};\n\ncommands.doPerformMultiAction = async function (elementId, states) {\n let opts;\n if (elementId) {\n opts = {\n elementId,\n actions: states\n };\n\n return await this.uiautomator2.jwproxy.command('/touch/multi/perform', 'POST', opts);\n } else {\n opts = {\n actions: states\n };\n return await this.uiautomator2.jwproxy.command('/touch/multi/perform', 'POST', opts);\n }\n};\n\ncommands.performActions = async function (actions) {\n this.log.debug(`Received the following W3C actions: ${JSON.stringify(actions, null, ' ')}`);\n // This is mandatory, since Selenium API uses MOUSE as the default pointer type\n const preprocessedActions = actions\n .map((action) => Object.assign({}, action, action.type === 'pointer' ? {\n parameters: {\n pointerType: 'touch'\n }\n } : {}));\n this.log.debug(`Preprocessed actions: ${JSON.stringify(preprocessedActions, null, ' ')}`);\n return await this.uiautomator2.jwproxy.command('/actions', 'POST', {actions: preprocessedActions});\n};\n\n// eslint-disable-next-line require-await\ncommands.releaseActions = async function releaseActions () {\n this.log.info('On this platform, releaseActions is a no-op');\n};\n\nexport default commands;\n"],"mappings":";;;;;;;AAAA,MAAMA,QAAQ,GAAG,CAAC,CAAC;AAEnBA,QAAQ,CAACC,oBAAoB,GAAG,gBAAgBC,SAAS,EAAEC,MAAM,EAAE;EACjE,IAAIC,IAAI;EACR,IAAIF,SAAS,EAAE;IACbE,IAAI,GAAG;MACLF,SAAS;MACTG,OAAO,EAAEF;IACX,CAAC;IAED,OAAO,MAAM,IAAI,CAACG,YAAY,CAACC,OAAO,CAACC,OAAO,CAAC,sBAAsB,EAAE,MAAM,EAAEJ,IAAI,CAAC;EACtF,CAAC,MAAM;IACLA,IAAI,GAAG;MACLC,OAAO,EAAEF;IACX,CAAC;IACD,OAAO,MAAM,IAAI,CAACG,YAAY,CAACC,OAAO,CAACC,OAAO,CAAC,sBAAsB,EAAE,MAAM,EAAEJ,IAAI,CAAC;EACtF;AACF,CAAC;AAEDJ,QAAQ,CAACS,cAAc,GAAG,gBAAgBJ,OAAO,EAAE;EACjD,IAAI,CAACK,GAAG,CAACC,KAAK,CAAE,uCAAsCC,IAAI,CAACC,SAAS,CAACR,OAAO,EAAE,IAAI,EAAE,IAAI,CAAE,EAAC,CAAC;EAE5F,MAAMS,mBAAmB,GAAGT,OAAO,CAChCU,GAAG,CAAEC,MAAM,IAAKC,MAAM,CAACC,MAAM,CAAC,CAAC,CAAC,EAAEF,MAAM,EAAEA,MAAM,CAACG,IAAI,KAAK,SAAS,GAAG;IACrEC,UAAU,EAAE;MACVC,WAAW,EAAE;IACf;EACF,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;EACV,IAAI,CAACX,GAAG,CAACC,KAAK,CAAE,yBAAwBC,IAAI,CAACC,SAAS,CAACC,mBAAmB,EAAE,IAAI,EAAE,IAAI,CAAE,EAAC,CAAC;EAC1F,OAAO,MAAM,IAAI,CAACR,YAAY,CAACC,OAAO,CAACC,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE;IAACH,OAAO,EAAES;EAAmB,CAAC,CAAC;AACpG,CAAC;AAGDd,QAAQ,CAACsB,cAAc,GAAG,eAAeA,cAAcA,CAAA,EAAI;EACzD,IAAI,CAACZ,GAAG,CAACa,IAAI,CAAC,6CAA6C,CAAC;AAC9D,CAAC;AAAC,IAAAC,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAEa1B,QAAQ"}
1
+ {"version":3,"file":"touch.js","sourceRoot":"","sources":["../../../lib/commands/touch.js"],"names":[],"mappings":";AAAA,YAAY;;AAEZ,qCAA+B;AAE/B;;;GAGG;AACH,MAAM,UAAU,GAAG;IACjB,KAAK,CAAC,oBAAoB,CAAC,SAAS,EAAE,MAAM;QAC1C,IAAI,IAAI,CAAC;QACT,IAAI,SAAS,EAAE;YACb,IAAI,GAAG;gBACL,SAAS;gBACT,OAAO,EAAE,MAAM;aAChB,CAAC;YAEF,MAAM,iCAAiC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,OAAO,CACzE,sBAAsB,EACtB,MAAM,EACN,IAAI,CACL,CAAC;SACH;aAAM;YACL,IAAI,GAAG;gBACL,OAAO,EAAE,MAAM;aAChB,CAAC;YACF,MAAM,iCAAiC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,OAAO,CACzE,sBAAsB,EACtB,MAAM,EACN,IAAI,CACL,CAAC;SACH;IACH,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,OAAO;QAC1B,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,uCAAuC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;QAC7F,+EAA+E;QAC/E,MAAM,mBAAmB,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CACjD,MAAM,CAAC,MAAM,CACX,EAAE,EACF,MAAM,EACN,MAAM,CAAC,IAAI,KAAK,SAAS;YACvB,CAAC,CAAC;gBACE,UAAU,EAAE;oBACV,WAAW,EAAE,OAAO;iBACrB;aACF;YACH,CAAC,CAAC,EAAE,CACP,CACF,CAAC;QACF,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,yBAAyB,IAAI,CAAC,SAAS,CAAC,mBAAmB,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;QAC3F,MAAM,iCAAiC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,OAAO,CACzE,UAAU,EACV,MAAM,EACN;YACE,OAAO,EAAE,mBAAmB;SAC7B,CACF,CAAC;IACJ,CAAC;IAED,yCAAyC;IACzC,KAAK,CAAC,cAAc;QAClB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;IAC/D,CAAC;CACF,CAAC;AAEF,IAAA,cAAK,EAAC,UAAU,CAAC,CAAC;AAElB;;GAEG"}