appium-xcuitest-driver 10.13.2 → 10.13.4
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 +12 -0
- package/build/lib/commands/app-management.d.ts +99 -76
- package/build/lib/commands/app-management.d.ts.map +1 -1
- package/build/lib/commands/app-management.js +83 -73
- package/build/lib/commands/app-management.js.map +1 -1
- package/build/lib/commands/general.d.ts +84 -80
- package/build/lib/commands/general.d.ts.map +1 -1
- package/build/lib/commands/general.js +66 -53
- package/build/lib/commands/general.js.map +1 -1
- package/build/lib/commands/log.d.ts +42 -44
- package/build/lib/commands/log.d.ts.map +1 -1
- package/build/lib/commands/log.js +32 -53
- package/build/lib/commands/log.js.map +1 -1
- package/build/lib/commands/navigation.d.ts +1 -1
- package/build/lib/commands/navigation.d.ts.map +1 -1
- package/build/lib/commands/performance.d.ts +36 -55
- package/build/lib/commands/performance.d.ts.map +1 -1
- package/build/lib/commands/performance.js +93 -86
- package/build/lib/commands/performance.js.map +1 -1
- package/build/lib/commands/recordscreen.d.ts +31 -63
- package/build/lib/commands/recordscreen.d.ts.map +1 -1
- package/build/lib/commands/recordscreen.js +29 -28
- package/build/lib/commands/recordscreen.js.map +1 -1
- package/build/lib/commands/xctest.d.ts +37 -37
- package/build/lib/commands/xctest.d.ts.map +1 -1
- package/build/lib/commands/xctest.js +38 -50
- package/build/lib/commands/xctest.js.map +1 -1
- package/build/lib/execute-method-map.d.ts.map +1 -1
- package/build/lib/execute-method-map.js +0 -2
- package/build/lib/execute-method-map.js.map +1 -1
- package/lib/commands/app-management.ts +414 -0
- package/lib/commands/{general.js → general.ts} +101 -76
- package/lib/commands/{log.js → log.ts} +68 -68
- package/lib/commands/{performance.js → performance.ts} +133 -114
- package/lib/commands/{recordscreen.js → recordscreen.ts} +78 -50
- package/lib/commands/{xctest.js → xctest.ts} +78 -71
- package/lib/execute-method-map.ts +0 -2
- package/npm-shrinkwrap.json +8 -8
- package/package.json +1 -1
- package/lib/commands/app-management.js +0 -346
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,15 @@
|
|
|
1
|
+
## [10.13.4](https://github.com/appium/appium-xcuitest-driver/compare/v10.13.3...v10.13.4) (2025-12-30)
|
|
2
|
+
|
|
3
|
+
### Miscellaneous Chores
|
|
4
|
+
|
|
5
|
+
* Migrate various command modules to typescript (part 4) ([#2689](https://github.com/appium/appium-xcuitest-driver/issues/2689)) ([e7da99b](https://github.com/appium/appium-xcuitest-driver/commit/e7da99b79461927b785ec518475ee604c163fdc9))
|
|
6
|
+
|
|
7
|
+
## [10.13.3](https://github.com/appium/appium-xcuitest-driver/compare/v10.13.2...v10.13.3) (2025-12-28)
|
|
8
|
+
|
|
9
|
+
### Miscellaneous Chores
|
|
10
|
+
|
|
11
|
+
* Migrate various command modules to typescript ([#2688](https://github.com/appium/appium-xcuitest-driver/issues/2688)) ([43489ba](https://github.com/appium/appium-xcuitest-driver/commit/43489ba00eef50c1e026ba878c31859de63849e9))
|
|
12
|
+
|
|
1
13
|
## [10.13.2](https://github.com/appium/appium-xcuitest-driver/compare/v10.13.1...v10.13.2) (2025-12-23)
|
|
2
14
|
|
|
3
15
|
### Miscellaneous Chores
|
|
@@ -1,65 +1,58 @@
|
|
|
1
|
+
import type { XCUITestDriver } from '../driver';
|
|
2
|
+
import type { AppState } from './enum';
|
|
1
3
|
/**
|
|
2
4
|
* Installs the given application to the device under test.
|
|
3
5
|
*
|
|
4
6
|
* Please ensure the app is built for a correct architecture and is signed with a proper developer signature (for real devices) prior to calling this.
|
|
5
|
-
* @param
|
|
6
|
-
* @param
|
|
7
|
+
* @param app - See docs for `appium:app` capability
|
|
8
|
+
* @param timeoutMs - The maximum time to wait until app install is finished (in ms) on real devices.
|
|
7
9
|
* If not provided, then the value of `appium:appPushTimeout` capability is used. If the capability is not provided then the default is 240000ms (4 minutes).
|
|
8
|
-
* @param
|
|
10
|
+
* @param checkVersion - If the application installation follows currently installed application's version status if provided.
|
|
9
11
|
* No checking occurs if no this option.
|
|
10
12
|
* @privateRemarks Link to capability docs
|
|
11
|
-
* @returns {Promise<void>}
|
|
12
|
-
* @this {XCUITestDriver}
|
|
13
13
|
*/
|
|
14
|
-
export function mobileInstallApp(this:
|
|
14
|
+
export declare function mobileInstallApp(this: XCUITestDriver, app: string, timeoutMs?: number, checkVersion?: boolean): Promise<void>;
|
|
15
15
|
/**
|
|
16
16
|
* Checks whether the given application is installed on the device under test.
|
|
17
17
|
* Offload app is handled as not installed.
|
|
18
18
|
*
|
|
19
|
-
* @param
|
|
20
|
-
* @returns
|
|
21
|
-
* @this {XCUITestDriver}
|
|
19
|
+
* @param bundleId - The bundle identifier of the application to be checked
|
|
20
|
+
* @returns `true` if the application is installed; `false` otherwise
|
|
22
21
|
*/
|
|
23
|
-
export function mobileIsAppInstalled(this:
|
|
22
|
+
export declare function mobileIsAppInstalled(this: XCUITestDriver, bundleId: string): Promise<boolean>;
|
|
24
23
|
/**
|
|
25
24
|
* Removes/uninstalls the given application from the device under test.
|
|
26
25
|
* Offload app data could also be removed.
|
|
27
26
|
*
|
|
28
|
-
* @param
|
|
29
|
-
* @returns
|
|
30
|
-
* @this {XCUITestDriver}
|
|
27
|
+
* @param bundleId - The bundle identifier of the application to be removed
|
|
28
|
+
* @returns `true` if the application has been removed successfully; `false` otherwise
|
|
31
29
|
*/
|
|
32
|
-
export function mobileRemoveApp(this:
|
|
30
|
+
export declare function mobileRemoveApp(this: XCUITestDriver, bundleId: string): Promise<boolean>;
|
|
33
31
|
/**
|
|
34
32
|
* Executes the given app on the device under test.
|
|
35
33
|
*
|
|
36
34
|
* If the app is already running it will be activated. If the app is not installed or cannot be launched then an exception is thrown.
|
|
37
|
-
* @param
|
|
38
|
-
* @param
|
|
39
|
-
* @param
|
|
40
|
-
* @returns {Promise<void>}
|
|
41
|
-
* @this {XCUITestDriver}
|
|
35
|
+
* @param bundleId - The bundle identifier of the application to be launched
|
|
36
|
+
* @param args - One or more command line arguments for the app. If the app is already running then this argument is ignored.
|
|
37
|
+
* @param environment - Environment variables mapping for the app. If the app is already running then this argument is ignored.
|
|
42
38
|
*/
|
|
43
|
-
export function mobileLaunchApp(this:
|
|
39
|
+
export declare function mobileLaunchApp(this: XCUITestDriver, bundleId: string, args?: string | string[], environment?: Record<string, any>): Promise<void>;
|
|
44
40
|
/**
|
|
45
41
|
* Terminates the given app on the device under test.
|
|
46
42
|
*
|
|
47
43
|
* This command performs termination via [XCTest's `terminate`](https://developer.apple.com/documentation/xctest/xcuiapplication/1500637-terminate) API. If the app is not installed an exception is thrown. If the app is not running then nothing is done.
|
|
48
|
-
* @param
|
|
49
|
-
* @returns
|
|
50
|
-
* @this {XCUITestDriver}
|
|
44
|
+
* @param bundleId - The bundle identifier of the application to be terminated
|
|
45
|
+
* @returns `true` if the app has been terminated successfully; `false` otherwise
|
|
51
46
|
*/
|
|
52
|
-
export function mobileTerminateApp(this:
|
|
47
|
+
export declare function mobileTerminateApp(this: XCUITestDriver, bundleId: string): Promise<boolean>;
|
|
53
48
|
/**
|
|
54
49
|
* Activate the given app on the device under test.
|
|
55
50
|
*
|
|
56
51
|
* This pushes the app to the foreground if it is running in the background. An exception is thrown if the app is not install or isn't running. Nothing is done if the app is already in the foreground.
|
|
57
52
|
*
|
|
58
|
-
* @param
|
|
59
|
-
* @returns {Promise<void>}
|
|
60
|
-
* @this {XCUITestDriver}
|
|
53
|
+
* @param bundleId - The bundle identifier of the application to be activated
|
|
61
54
|
*/
|
|
62
|
-
export function mobileActivateApp(this:
|
|
55
|
+
export declare function mobileActivateApp(this: XCUITestDriver, bundleId: string): Promise<void>;
|
|
63
56
|
/**
|
|
64
57
|
* Kill the given app on the real device under test by instruments service.
|
|
65
58
|
*
|
|
@@ -68,86 +61,116 @@ export function mobileActivateApp(this: import("../driver").XCUITestDriver, bund
|
|
|
68
61
|
* @remarks `appium-xcuitest-driver` v4.4 does not require `py-ios-device` to be installed.
|
|
69
62
|
* @privateRemarks See implementation at https://github.com/YueChen-C/py-ios-device/blob/51f4683c5c3c385a015858ada07a5f1c62d3cf57/ios_device/cli/base.py#L220
|
|
70
63
|
* @see https://github.com/YueChen-C/py-ios-device
|
|
71
|
-
* @param
|
|
72
|
-
* @returns
|
|
64
|
+
* @param bundleId - The bundle identifier of the application to be killed
|
|
65
|
+
* @returns `true` if the app has been killed successfully; `false` otherwise
|
|
73
66
|
* @group Real Device Only
|
|
74
|
-
* @this {XCUITestDriver}
|
|
75
67
|
*/
|
|
76
|
-
export function mobileKillApp(this:
|
|
68
|
+
export declare function mobileKillApp(this: XCUITestDriver, bundleId: string): Promise<boolean>;
|
|
77
69
|
/**
|
|
78
70
|
* Queries the state of an installed application from the device under test.
|
|
79
71
|
*
|
|
80
72
|
* If the app with the given `bundleId` is not installed, an exception will be thrown.
|
|
81
73
|
*
|
|
82
|
-
* @param
|
|
83
|
-
* @returns
|
|
74
|
+
* @param bundleId - The bundle identifier of the application to be queried
|
|
75
|
+
* @returns The actual application state code
|
|
84
76
|
* @see https://developer.apple.com/documentation/xctest/xcuiapplicationstate?language=objc
|
|
85
|
-
* @this {XCUITestDriver}
|
|
86
77
|
*/
|
|
87
|
-
export function mobileQueryAppState(this:
|
|
78
|
+
export declare function mobileQueryAppState(this: XCUITestDriver, bundleId: string): Promise<AppState>;
|
|
88
79
|
/**
|
|
89
|
-
*
|
|
90
|
-
*
|
|
91
|
-
* @
|
|
80
|
+
* Installs the given application to the device under test.
|
|
81
|
+
*
|
|
82
|
+
* This is a wrapper around {@linkcode mobileInstallApp mobile: installApp}.
|
|
83
|
+
*
|
|
84
|
+
* @param appPath - Path to the application bundle or .ipa/.app file
|
|
85
|
+
* @param opts - Installation options
|
|
86
|
+
* @param opts.timeoutMs - Maximum time to wait for installation to complete (in milliseconds)
|
|
87
|
+
* @param opts.strategy - If `true`, checks the version before installing and skips if already installed
|
|
92
88
|
*/
|
|
93
|
-
export function installApp(
|
|
89
|
+
export declare function installApp(this: XCUITestDriver, appPath: string, opts?: {
|
|
90
|
+
timeoutMs?: number;
|
|
91
|
+
strategy?: boolean;
|
|
92
|
+
}): Promise<void>;
|
|
94
93
|
/**
|
|
95
|
-
*
|
|
96
|
-
*
|
|
97
|
-
* @
|
|
94
|
+
* Activates the given app on the device under test.
|
|
95
|
+
*
|
|
96
|
+
* This is a wrapper around {@linkcode mobileLaunchApp mobile: launchApp}. If the app is already
|
|
97
|
+
* running, it will be activated (brought to foreground). If the app is not installed or cannot
|
|
98
|
+
* be launched, an exception is thrown.
|
|
99
|
+
*
|
|
100
|
+
* @param bundleId - The bundle identifier of the application to be activated
|
|
101
|
+
* @param opts - Launch options
|
|
102
|
+
* @param opts.environment - Environment variables mapping for the app
|
|
103
|
+
* @param opts.arguments - Command line arguments for the app
|
|
98
104
|
*/
|
|
99
|
-
export function activateApp(bundleId: string, opts?:
|
|
105
|
+
export declare function activateApp(this: XCUITestDriver, bundleId: string, opts?: {
|
|
106
|
+
environment?: Record<string, any>;
|
|
107
|
+
arguments?: string[];
|
|
108
|
+
}): Promise<void>;
|
|
100
109
|
/**
|
|
101
|
-
*
|
|
102
|
-
*
|
|
110
|
+
* Checks whether the given application is installed on the device under test.
|
|
111
|
+
*
|
|
112
|
+
* This is a wrapper around {@linkcode mobileIsAppInstalled mobile: isAppInstalled}.
|
|
113
|
+
* Offload apps are treated as not installed.
|
|
114
|
+
*
|
|
115
|
+
* @param bundleId - The bundle identifier of the application to be checked
|
|
116
|
+
* @returns `true` if the application is installed; `false` otherwise
|
|
103
117
|
*/
|
|
104
|
-
export function isAppInstalled(this:
|
|
118
|
+
export declare function isAppInstalled(this: XCUITestDriver, bundleId: string): Promise<boolean>;
|
|
105
119
|
/**
|
|
106
|
-
*
|
|
107
|
-
*
|
|
108
|
-
* @
|
|
120
|
+
* Terminates the given app on the device under test.
|
|
121
|
+
*
|
|
122
|
+
* This is a wrapper around {@linkcode mobileTerminateApp mobile: terminateApp}.
|
|
123
|
+
* The command performs termination via XCTest's `terminate` API. If the app is not installed,
|
|
124
|
+
* an exception is thrown. If the app is not running, nothing is done.
|
|
125
|
+
*
|
|
126
|
+
* @param bundleId - The bundle identifier of the application to be terminated
|
|
127
|
+
* @returns `true` if the app has been terminated successfully; `false` otherwise
|
|
109
128
|
*/
|
|
110
|
-
export function terminateApp(this:
|
|
129
|
+
export declare function terminateApp(this: XCUITestDriver, bundleId: string): Promise<boolean>;
|
|
111
130
|
/**
|
|
112
|
-
*
|
|
113
|
-
*
|
|
131
|
+
* Queries the state of an installed application from the device under test.
|
|
132
|
+
*
|
|
133
|
+
* This is a wrapper around {@linkcode mobileQueryAppState mobile: queryAppState}.
|
|
134
|
+
* If the app with the given `bundleId` is not installed, an exception will be thrown.
|
|
135
|
+
*
|
|
136
|
+
* @param bundleId - The bundle identifier of the application to be queried
|
|
137
|
+
* @returns The actual application state code
|
|
138
|
+
* @see https://developer.apple.com/documentation/xctest/xcuiapplicationstate?language=objc
|
|
114
139
|
*/
|
|
115
|
-
export function queryAppState(this:
|
|
140
|
+
export declare function queryAppState(this: XCUITestDriver, bundleId: string): Promise<AppState>;
|
|
116
141
|
/**
|
|
117
142
|
* List applications installed on the real device under test
|
|
118
143
|
*
|
|
119
144
|
* Read [Pushing/Pulling files](https://appium.io/docs/en/writing-running-appium/ios/ios-xctest-file-movement/) for more details.
|
|
120
|
-
* @param
|
|
121
|
-
* @returns
|
|
145
|
+
* @param applicationType - The type of applications to list.
|
|
146
|
+
* @returns A list of apps where each item is a mapping of bundle identifiers to maps of platform-specific app properties.
|
|
122
147
|
* @remarks Having `UIFileSharingEnabled` set to `true` in the return app properties map means this app supports file upload/download in its `documents` container.
|
|
123
148
|
* @group Real Device Only
|
|
124
149
|
*/
|
|
125
|
-
export function mobileListApps(applicationType?:
|
|
150
|
+
export declare function mobileListApps(this: XCUITestDriver, applicationType?: 'User' | 'System'): Promise<Record<string, any>[]>;
|
|
126
151
|
/**
|
|
127
152
|
* Deletes application data files, so it could start from the clean state next time
|
|
128
153
|
* it is launched.
|
|
129
154
|
* This API only works on a Simulator.
|
|
130
155
|
*
|
|
131
|
-
* @param
|
|
132
|
-
* @
|
|
133
|
-
* @returns {Promise<boolean>} true if any files from the app's data container have been deleted
|
|
156
|
+
* @param bundleId Application bundle identifier
|
|
157
|
+
* @returns true if any files from the app's data container have been deleted
|
|
134
158
|
*/
|
|
135
|
-
export function mobileClearApp(this:
|
|
159
|
+
export declare function mobileClearApp(this: XCUITestDriver, bundleId: string): Promise<boolean>;
|
|
136
160
|
/**
|
|
137
|
-
*
|
|
138
|
-
* the app after the timeout or keep it minimized based on the parameter value.
|
|
161
|
+
* Closes the app (simulates device home button press).
|
|
139
162
|
*
|
|
140
|
-
*
|
|
141
|
-
*
|
|
142
|
-
*
|
|
143
|
-
*
|
|
144
|
-
*
|
|
145
|
-
*
|
|
146
|
-
*
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
163
|
+
* It is possible to restore the app after a timeout or keep it minimized based on the parameter value.
|
|
164
|
+
*
|
|
165
|
+
* @param seconds - Timeout configuration. Accepts:
|
|
166
|
+
* - A positive number (seconds): app will be restored after the specified number of seconds
|
|
167
|
+
* - A negative number or zero: app will not be restored (kept minimized)
|
|
168
|
+
* - `undefined` or `null`: app will not be restored (kept minimized)
|
|
169
|
+
* - An object with `timeout` property:
|
|
170
|
+
* - `{timeout: 5000}`: app will be restored after 5 seconds (timeout in milliseconds)
|
|
171
|
+
* - `{timeout: null}` or `{timeout: -2}`: app will not be restored
|
|
172
|
+
*/
|
|
173
|
+
export declare function background(this: XCUITestDriver, seconds?: number | {
|
|
174
|
+
timeout?: number | null;
|
|
175
|
+
}): Promise<void>;
|
|
153
176
|
//# sourceMappingURL=app-management.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-management.d.ts","sourceRoot":"","sources":["../../../lib/commands/app-management.
|
|
1
|
+
{"version":3,"file":"app-management.d.ts","sourceRoot":"","sources":["../../../lib/commands/app-management.ts"],"names":[],"mappings":"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"}
|
|
@@ -30,14 +30,12 @@ const app_utils_1 = require("../app-utils");
|
|
|
30
30
|
* Installs the given application to the device under test.
|
|
31
31
|
*
|
|
32
32
|
* Please ensure the app is built for a correct architecture and is signed with a proper developer signature (for real devices) prior to calling this.
|
|
33
|
-
* @param
|
|
34
|
-
* @param
|
|
33
|
+
* @param app - See docs for `appium:app` capability
|
|
34
|
+
* @param timeoutMs - The maximum time to wait until app install is finished (in ms) on real devices.
|
|
35
35
|
* If not provided, then the value of `appium:appPushTimeout` capability is used. If the capability is not provided then the default is 240000ms (4 minutes).
|
|
36
|
-
* @param
|
|
36
|
+
* @param checkVersion - If the application installation follows currently installed application's version status if provided.
|
|
37
37
|
* No checking occurs if no this option.
|
|
38
38
|
* @privateRemarks Link to capability docs
|
|
39
|
-
* @returns {Promise<void>}
|
|
40
|
-
* @this {XCUITestDriver}
|
|
41
39
|
*/
|
|
42
40
|
async function mobileInstallApp(app, timeoutMs, checkVersion) {
|
|
43
41
|
const srcAppPath = await this.helpers.configureApp(app, {
|
|
@@ -65,7 +63,7 @@ async function mobileInstallApp(app, timeoutMs, checkVersion) {
|
|
|
65
63
|
}
|
|
66
64
|
}
|
|
67
65
|
await this.device.installApp(srcAppPath, bundleId, {
|
|
68
|
-
timeoutMs: timeoutMs ?? this.opts.appPushTimeout
|
|
66
|
+
timeoutMs: timeoutMs ?? this.opts.appPushTimeout,
|
|
69
67
|
});
|
|
70
68
|
this.log.info(`Installation of '${srcAppPath}' succeeded`);
|
|
71
69
|
}
|
|
@@ -73,9 +71,8 @@ async function mobileInstallApp(app, timeoutMs, checkVersion) {
|
|
|
73
71
|
* Checks whether the given application is installed on the device under test.
|
|
74
72
|
* Offload app is handled as not installed.
|
|
75
73
|
*
|
|
76
|
-
* @param
|
|
77
|
-
* @returns
|
|
78
|
-
* @this {XCUITestDriver}
|
|
74
|
+
* @param bundleId - The bundle identifier of the application to be checked
|
|
75
|
+
* @returns `true` if the application is installed; `false` otherwise
|
|
79
76
|
*/
|
|
80
77
|
async function mobileIsAppInstalled(bundleId) {
|
|
81
78
|
const installed = await this.device.isAppInstalled(bundleId);
|
|
@@ -86,9 +83,8 @@ async function mobileIsAppInstalled(bundleId) {
|
|
|
86
83
|
* Removes/uninstalls the given application from the device under test.
|
|
87
84
|
* Offload app data could also be removed.
|
|
88
85
|
*
|
|
89
|
-
* @param
|
|
90
|
-
* @returns
|
|
91
|
-
* @this {XCUITestDriver}
|
|
86
|
+
* @param bundleId - The bundle identifier of the application to be removed
|
|
87
|
+
* @returns `true` if the application has been removed successfully; `false` otherwise
|
|
92
88
|
*/
|
|
93
89
|
async function mobileRemoveApp(bundleId) {
|
|
94
90
|
this.log.info(`Uninstalling the application with bundle identifier '${bundleId}' ` +
|
|
@@ -107,14 +103,11 @@ async function mobileRemoveApp(bundleId) {
|
|
|
107
103
|
* Executes the given app on the device under test.
|
|
108
104
|
*
|
|
109
105
|
* If the app is already running it will be activated. If the app is not installed or cannot be launched then an exception is thrown.
|
|
110
|
-
* @param
|
|
111
|
-
* @param
|
|
112
|
-
* @param
|
|
113
|
-
* @returns {Promise<void>}
|
|
114
|
-
* @this {XCUITestDriver}
|
|
106
|
+
* @param bundleId - The bundle identifier of the application to be launched
|
|
107
|
+
* @param args - One or more command line arguments for the app. If the app is already running then this argument is ignored.
|
|
108
|
+
* @param environment - Environment variables mapping for the app. If the app is already running then this argument is ignored.
|
|
115
109
|
*/
|
|
116
110
|
async function mobileLaunchApp(bundleId, args, environment) {
|
|
117
|
-
/** @type { {arguments?: any[], environment?: any, bundleId: string} } */
|
|
118
111
|
const launchOptions = { bundleId };
|
|
119
112
|
if (args) {
|
|
120
113
|
launchOptions.arguments = Array.isArray(args) ? args : [args];
|
|
@@ -128,21 +121,18 @@ async function mobileLaunchApp(bundleId, args, environment) {
|
|
|
128
121
|
* Terminates the given app on the device under test.
|
|
129
122
|
*
|
|
130
123
|
* This command performs termination via [XCTest's `terminate`](https://developer.apple.com/documentation/xctest/xcuiapplication/1500637-terminate) API. If the app is not installed an exception is thrown. If the app is not running then nothing is done.
|
|
131
|
-
* @param
|
|
132
|
-
* @returns
|
|
133
|
-
* @this {XCUITestDriver}
|
|
124
|
+
* @param bundleId - The bundle identifier of the application to be terminated
|
|
125
|
+
* @returns `true` if the app has been terminated successfully; `false` otherwise
|
|
134
126
|
*/
|
|
135
127
|
async function mobileTerminateApp(bundleId) {
|
|
136
|
-
return
|
|
128
|
+
return (await this.proxyCommand('/wda/apps/terminate', 'POST', { bundleId }));
|
|
137
129
|
}
|
|
138
130
|
/**
|
|
139
131
|
* Activate the given app on the device under test.
|
|
140
132
|
*
|
|
141
133
|
* This pushes the app to the foreground if it is running in the background. An exception is thrown if the app is not install or isn't running. Nothing is done if the app is already in the foreground.
|
|
142
134
|
*
|
|
143
|
-
* @param
|
|
144
|
-
* @returns {Promise<void>}
|
|
145
|
-
* @this {XCUITestDriver}
|
|
135
|
+
* @param bundleId - The bundle identifier of the application to be activated
|
|
146
136
|
*/
|
|
147
137
|
async function mobileActivateApp(bundleId) {
|
|
148
138
|
await this.proxyCommand('/wda/apps/activate', 'POST', { bundleId });
|
|
@@ -155,67 +145,91 @@ async function mobileActivateApp(bundleId) {
|
|
|
155
145
|
* @remarks `appium-xcuitest-driver` v4.4 does not require `py-ios-device` to be installed.
|
|
156
146
|
* @privateRemarks See implementation at https://github.com/YueChen-C/py-ios-device/blob/51f4683c5c3c385a015858ada07a5f1c62d3cf57/ios_device/cli/base.py#L220
|
|
157
147
|
* @see https://github.com/YueChen-C/py-ios-device
|
|
158
|
-
* @param
|
|
159
|
-
* @returns
|
|
148
|
+
* @param bundleId - The bundle identifier of the application to be killed
|
|
149
|
+
* @returns `true` if the app has been killed successfully; `false` otherwise
|
|
160
150
|
* @group Real Device Only
|
|
161
|
-
* @this {XCUITestDriver}
|
|
162
151
|
*/
|
|
163
152
|
async function mobileKillApp(bundleId) {
|
|
164
153
|
if (!this.isRealDevice()) {
|
|
165
154
|
throw new driver_1.errors.UnsupportedOperationError('A real device is required');
|
|
166
155
|
}
|
|
167
|
-
return await
|
|
156
|
+
return await this.device.terminateApp(bundleId, String(this.opts.platformVersion));
|
|
168
157
|
}
|
|
169
158
|
/**
|
|
170
159
|
* Queries the state of an installed application from the device under test.
|
|
171
160
|
*
|
|
172
161
|
* If the app with the given `bundleId` is not installed, an exception will be thrown.
|
|
173
162
|
*
|
|
174
|
-
* @param
|
|
175
|
-
* @returns
|
|
163
|
+
* @param bundleId - The bundle identifier of the application to be queried
|
|
164
|
+
* @returns The actual application state code
|
|
176
165
|
* @see https://developer.apple.com/documentation/xctest/xcuiapplicationstate?language=objc
|
|
177
|
-
* @this {XCUITestDriver}
|
|
178
166
|
*/
|
|
179
167
|
async function mobileQueryAppState(bundleId) {
|
|
180
|
-
return
|
|
168
|
+
return (await this.proxyCommand('/wda/apps/state', 'POST', { bundleId }));
|
|
181
169
|
}
|
|
182
170
|
/**
|
|
183
|
-
*
|
|
184
|
-
*
|
|
185
|
-
* @
|
|
171
|
+
* Installs the given application to the device under test.
|
|
172
|
+
*
|
|
173
|
+
* This is a wrapper around {@linkcode mobileInstallApp mobile: installApp}.
|
|
174
|
+
*
|
|
175
|
+
* @param appPath - Path to the application bundle or .ipa/.app file
|
|
176
|
+
* @param opts - Installation options
|
|
177
|
+
* @param opts.timeoutMs - Maximum time to wait for installation to complete (in milliseconds)
|
|
178
|
+
* @param opts.strategy - If `true`, checks the version before installing and skips if already installed
|
|
186
179
|
*/
|
|
187
|
-
async function installApp(appPath,
|
|
188
|
-
|
|
189
|
-
await this.mobileInstallApp(appPath, timeoutMs, strategy);
|
|
180
|
+
async function installApp(appPath, opts = {}) {
|
|
181
|
+
await this.mobileInstallApp(appPath, opts.timeoutMs, opts.strategy);
|
|
190
182
|
}
|
|
191
183
|
/**
|
|
192
|
-
*
|
|
193
|
-
*
|
|
194
|
-
* @
|
|
184
|
+
* Activates the given app on the device under test.
|
|
185
|
+
*
|
|
186
|
+
* This is a wrapper around {@linkcode mobileLaunchApp mobile: launchApp}. If the app is already
|
|
187
|
+
* running, it will be activated (brought to foreground). If the app is not installed or cannot
|
|
188
|
+
* be launched, an exception is thrown.
|
|
189
|
+
*
|
|
190
|
+
* @param bundleId - The bundle identifier of the application to be activated
|
|
191
|
+
* @param opts - Launch options
|
|
192
|
+
* @param opts.environment - Environment variables mapping for the app
|
|
193
|
+
* @param opts.arguments - Command line arguments for the app
|
|
195
194
|
*/
|
|
196
195
|
async function activateApp(bundleId, opts = {}) {
|
|
197
196
|
const { environment, arguments: args } = opts;
|
|
198
|
-
// @ts-ignore Probably a TS bug
|
|
199
197
|
return await this.mobileLaunchApp(bundleId, args, environment);
|
|
200
198
|
}
|
|
201
199
|
/**
|
|
202
|
-
*
|
|
203
|
-
*
|
|
200
|
+
* Checks whether the given application is installed on the device under test.
|
|
201
|
+
*
|
|
202
|
+
* This is a wrapper around {@linkcode mobileIsAppInstalled mobile: isAppInstalled}.
|
|
203
|
+
* Offload apps are treated as not installed.
|
|
204
|
+
*
|
|
205
|
+
* @param bundleId - The bundle identifier of the application to be checked
|
|
206
|
+
* @returns `true` if the application is installed; `false` otherwise
|
|
204
207
|
*/
|
|
205
208
|
async function isAppInstalled(bundleId) {
|
|
206
209
|
return await this.mobileIsAppInstalled(bundleId);
|
|
207
210
|
}
|
|
208
211
|
/**
|
|
209
|
-
*
|
|
210
|
-
*
|
|
211
|
-
* @
|
|
212
|
+
* Terminates the given app on the device under test.
|
|
213
|
+
*
|
|
214
|
+
* This is a wrapper around {@linkcode mobileTerminateApp mobile: terminateApp}.
|
|
215
|
+
* The command performs termination via XCTest's `terminate` API. If the app is not installed,
|
|
216
|
+
* an exception is thrown. If the app is not running, nothing is done.
|
|
217
|
+
*
|
|
218
|
+
* @param bundleId - The bundle identifier of the application to be terminated
|
|
219
|
+
* @returns `true` if the app has been terminated successfully; `false` otherwise
|
|
212
220
|
*/
|
|
213
221
|
async function terminateApp(bundleId) {
|
|
214
222
|
return await this.mobileTerminateApp(bundleId);
|
|
215
223
|
}
|
|
216
224
|
/**
|
|
217
|
-
*
|
|
218
|
-
*
|
|
225
|
+
* Queries the state of an installed application from the device under test.
|
|
226
|
+
*
|
|
227
|
+
* This is a wrapper around {@linkcode mobileQueryAppState mobile: queryAppState}.
|
|
228
|
+
* If the app with the given `bundleId` is not installed, an exception will be thrown.
|
|
229
|
+
*
|
|
230
|
+
* @param bundleId - The bundle identifier of the application to be queried
|
|
231
|
+
* @returns The actual application state code
|
|
232
|
+
* @see https://developer.apple.com/documentation/xctest/xcuiapplicationstate?language=objc
|
|
219
233
|
*/
|
|
220
234
|
async function queryAppState(bundleId) {
|
|
221
235
|
return await this.mobileQueryAppState(bundleId);
|
|
@@ -224,8 +238,8 @@ async function queryAppState(bundleId) {
|
|
|
224
238
|
* List applications installed on the real device under test
|
|
225
239
|
*
|
|
226
240
|
* Read [Pushing/Pulling files](https://appium.io/docs/en/writing-running-appium/ios/ios-xctest-file-movement/) for more details.
|
|
227
|
-
* @param
|
|
228
|
-
* @returns
|
|
241
|
+
* @param applicationType - The type of applications to list.
|
|
242
|
+
* @returns A list of apps where each item is a mapping of bundle identifiers to maps of platform-specific app properties.
|
|
229
243
|
* @remarks Having `UIFileSharingEnabled` set to `true` in the return app properties map means this app supports file upload/download in its `documents` container.
|
|
230
244
|
* @group Real Device Only
|
|
231
245
|
*/
|
|
@@ -246,9 +260,8 @@ async function mobileListApps(applicationType = 'User') {
|
|
|
246
260
|
* it is launched.
|
|
247
261
|
* This API only works on a Simulator.
|
|
248
262
|
*
|
|
249
|
-
* @param
|
|
250
|
-
* @
|
|
251
|
-
* @returns {Promise<boolean>} true if any files from the app's data container have been deleted
|
|
263
|
+
* @param bundleId Application bundle identifier
|
|
264
|
+
* @returns true if any files from the app's data container have been deleted
|
|
252
265
|
*/
|
|
253
266
|
async function mobileClearApp(bundleId) {
|
|
254
267
|
if (this.isRealDevice()) {
|
|
@@ -256,10 +269,10 @@ async function mobileClearApp(bundleId) {
|
|
|
256
269
|
`The only known way to clear app data on real devices ` +
|
|
257
270
|
`would be to uninstall the app then perform a fresh install of it.`);
|
|
258
271
|
}
|
|
259
|
-
const simctl =
|
|
272
|
+
const simctl = this.device.simctl;
|
|
260
273
|
const dataRoot = await simctl.getAppContainer(bundleId, 'data');
|
|
261
274
|
this.log.debug(`Got the data container root of ${bundleId} at '${dataRoot}'`);
|
|
262
|
-
if (!await support_1.fs.exists(dataRoot)) {
|
|
275
|
+
if (!(await support_1.fs.exists(dataRoot))) {
|
|
263
276
|
return false;
|
|
264
277
|
}
|
|
265
278
|
await this.mobileTerminateApp(bundleId);
|
|
@@ -272,16 +285,17 @@ async function mobileClearApp(bundleId) {
|
|
|
272
285
|
return true;
|
|
273
286
|
}
|
|
274
287
|
/**
|
|
275
|
-
*
|
|
276
|
-
*
|
|
288
|
+
* Closes the app (simulates device home button press).
|
|
289
|
+
*
|
|
290
|
+
* It is possible to restore the app after a timeout or keep it minimized based on the parameter value.
|
|
277
291
|
*
|
|
278
|
-
* @param
|
|
279
|
-
*
|
|
280
|
-
*
|
|
281
|
-
*
|
|
282
|
-
*
|
|
283
|
-
*
|
|
284
|
-
*
|
|
292
|
+
* @param seconds - Timeout configuration. Accepts:
|
|
293
|
+
* - A positive number (seconds): app will be restored after the specified number of seconds
|
|
294
|
+
* - A negative number or zero: app will not be restored (kept minimized)
|
|
295
|
+
* - `undefined` or `null`: app will not be restored (kept minimized)
|
|
296
|
+
* - An object with `timeout` property:
|
|
297
|
+
* - `{timeout: 5000}`: app will be restored after 5 seconds (timeout in milliseconds)
|
|
298
|
+
* - `{timeout: null}` or `{timeout: -2}`: app will not be restored
|
|
285
299
|
*/
|
|
286
300
|
async function background(seconds) {
|
|
287
301
|
const homescreen = '/wda/homescreen';
|
|
@@ -292,8 +306,8 @@ async function background(seconds) {
|
|
|
292
306
|
if (!support_1.util.hasValue(timeoutSeconds)) {
|
|
293
307
|
endpoint = homescreen;
|
|
294
308
|
}
|
|
295
|
-
else if (!isNaN(timeoutSeconds)) {
|
|
296
|
-
const duration = parseFloat(timeoutSeconds);
|
|
309
|
+
else if (!isNaN(Number(timeoutSeconds))) {
|
|
310
|
+
const duration = parseFloat(String(timeoutSeconds));
|
|
297
311
|
if (duration >= 0) {
|
|
298
312
|
params = { duration };
|
|
299
313
|
endpoint = deactivateApp;
|
|
@@ -308,7 +322,7 @@ async function background(seconds) {
|
|
|
308
322
|
selectEndpoint(isNaN(Number(timeout)) ? timeout : parseFloat(String(timeout)) / 1000.0);
|
|
309
323
|
}
|
|
310
324
|
else {
|
|
311
|
-
selectEndpoint(seconds);
|
|
325
|
+
selectEndpoint(lodash_1.default.isNumber(seconds) ? seconds : undefined);
|
|
312
326
|
}
|
|
313
327
|
if (!endpoint) {
|
|
314
328
|
throw new driver_1.errors.InvalidArgumentError(`Argument value is expected to be a valid number. ` +
|
|
@@ -316,8 +330,4 @@ async function background(seconds) {
|
|
|
316
330
|
}
|
|
317
331
|
return await this.proxyCommand(endpoint, 'POST', params, endpoint !== homescreen);
|
|
318
332
|
}
|
|
319
|
-
/**
|
|
320
|
-
* @typedef {import('../driver').XCUITestDriver} XCUITestDriver
|
|
321
|
-
* @typedef {import('./enum').AppState} AppState
|
|
322
|
-
*/
|
|
323
333
|
//# sourceMappingURL=app-management.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-management.js","sourceRoot":"","sources":["../../../lib/commands/app-management.
|
|
1
|
+
{"version":3,"file":"app-management.js","sourceRoot":"","sources":["../../../lib/commands/app-management.ts"],"names":[],"mappings":";;;;;AA2BA,4CA6CC;AASD,oDAOC;AASD,0CAgBC;AAUD,0CAkBC;AASD,gDAKC;AASD,8CAKC;AAcD,sCASC;AAWD,kDAKC;AAYD,gCAMC;AAcD,kCAOC;AAWD,wCAKC;AAYD,oCAKC;AAYD,sCAKC;AAWD,wCAcC;AAUD,wCA8BC;AAeD,gCAmCC;AA5ZD,oDAAuB;AACvB,4CAAwC;AACxC,0CAAqC;AACrC,yDAA2C;AAC3C,0DAA6B;AAC7B,wDAAyB;AACzB,4CAIsB;AAMtB;;;;;;;;;;GAUG;AACI,KAAK,UAAU,gBAAgB,CAEpC,GAAW,EACX,SAAkB,EAClB,YAAsB;IAEtB,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,EAAE;QACtD,aAAa,EAAE,8BAAkB,CAAC,IAAI,CAAC,IAAI,CAAC;QAC5C,UAAU,EAAE,yBAAa,CAAC,IAAI,CAAC,IAAI,CAAC;QACpC,mBAAmB,EAAE,gCAAoB;KAC1C,CAAC,CAAC;IACH,IAAI,CAAC,GAAG,CAAC,IAAI,CACX,eAAe,UAAU,YAAY,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW,GAAG;QACvF,cAAc,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,CACpC,CAAC;IACF,IAAI,CAAC,CAAC,MAAM,YAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAC/B,uBAAuB,UAAU,uCAAuC,CACzE,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;IACtE,IAAI,YAAY,EAAE,CAAC;QACjB,MAAM,EAAC,OAAO,EAAC,GAAG,MAAM,IAAI,CAAC,yBAAyB,CAAC;YACrD,iBAAiB,EAAE,KAAK;YACxB,SAAS,EAAE,KAAK;YAChB,OAAO,EAAE,KAAK;YACd,QAAQ;YACR,GAAG,EAAE,UAAU;SAChB,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,iCAAiC,QAAQ,GAAG,CAAC,CAAC;YAC5D,OAAO;QACT,CAAC;IACH,CAAC;IAED,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAC1B,UAAU,EACV,QAAQ,EACR;QACE,SAAS,EAAE,SAAS,IAAI,IAAI,CAAC,IAAI,CAAC,cAAc;KACjD,CACF,CAAC;IACF,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,UAAU,aAAa,CAAC,CAAC;AAC7D,CAAC;AAED;;;;;;GAMG;AACI,KAAK,UAAU,oBAAoB,CAExC,QAAgB;IAEhB,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;IAC7D,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,QAAQ,OAAO,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,YAAY,CAAC,CAAC;IAC1E,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;GAMG;AACI,KAAK,UAAU,eAAe,CAEnC,QAAgB;IAEhB,IAAI,CAAC,GAAG,CAAC,IAAI,CACX,wDAAwD,QAAQ,IAAI;QAClE,YAAY,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW,eAAe,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,CAClG,CAAC;IACF,IAAI,CAAC;QACH,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACtC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,QAAQ,aAAa,CAAC,CAAC;QACpD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,kBAAkB,QAAQ,sBAAsB,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QAC7E,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACI,KAAK,UAAU,eAAe,CAEnC,QAAgB,EAChB,IAAwB,EACxB,WAAiC;IAEjC,MAAM,aAAa,GAIf,EAAC,QAAQ,EAAC,CAAC;IACf,IAAI,IAAI,EAAE,CAAC;QACT,aAAa,CAAC,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAChE,CAAC;IACD,IAAI,WAAW,EAAE,CAAC;QAChB,aAAa,CAAC,WAAW,GAAG,WAAW,CAAC;IAC1C,CAAC;IACD,MAAM,IAAI,CAAC,YAAY,CAAC,kBAAkB,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;AACrE,CAAC;AAED;;;;;;GAMG;AACI,KAAK,UAAU,kBAAkB,CAEtC,QAAgB;IAEhB,OAAO,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,qBAAqB,EAAE,MAAM,EAAE,EAAC,QAAQ,EAAC,CAAC,CAAY,CAAC;AACzF,CAAC;AAED;;;;;;GAMG;AACI,KAAK,UAAU,iBAAiB,CAErC,QAAgB;IAEhB,MAAM,IAAI,CAAC,YAAY,CAAC,oBAAoB,EAAE,MAAM,EAAE,EAAC,QAAQ,EAAC,CAAC,CAAC;AACpE,CAAC;AAED;;;;;;;;;;;GAWG;AACI,KAAK,UAAU,aAAa,CAEjC,QAAgB;IAEhB,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC;QACzB,MAAM,IAAI,eAAM,CAAC,yBAAyB,CAAC,2BAA2B,CAAC,CAAC;IAC1E,CAAC;IAED,OAAO,MAAO,IAAI,CAAC,MAAqB,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;AACrG,CAAC;AAED;;;;;;;;GAQG;AACI,KAAK,UAAU,mBAAmB,CAEvC,QAAgB;IAEhB,OAAO,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,iBAAiB,EAAE,MAAM,EAAE,EAAC,QAAQ,EAAC,CAAC,CAAa,CAAC;AACtF,CAAC;AAED;;;;;;;;;GASG;AACI,KAAK,UAAU,UAAU,CAE9B,OAAe,EACf,OAAiD,EAAE;IAEnD,MAAM,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;AACtE,CAAC;AAED;;;;;;;;;;;GAWG;AACI,KAAK,UAAU,WAAW,CAE/B,QAAgB,EAChB,OAAkE,EAAE;IAEpE,MAAM,EAAC,WAAW,EAAE,SAAS,EAAE,IAAI,EAAC,GAAG,IAAI,CAAC;IAC5C,OAAO,MAAM,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;AACjE,CAAC;AAED;;;;;;;;GAQG;AACI,KAAK,UAAU,cAAc,CAElC,QAAgB;IAEhB,OAAO,MAAM,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;AACnD,CAAC;AAED;;;;;;;;;GASG;AACI,KAAK,UAAU,YAAY,CAEhC,QAAgB;IAEhB,OAAO,MAAM,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;AACjD,CAAC;AAED;;;;;;;;;GASG;AACI,KAAK,UAAU,aAAa,CAEjC,QAAgB;IAEhB,OAAO,MAAM,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;AAClD,CAAC;AAED;;;;;;;;GAQG;AACI,KAAK,UAAU,cAAc,CAElC,kBAAqC,MAAM;IAE3C,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC;QACzB,MAAM,IAAI,eAAM,CAAC,mBAAmB,CAAC,kDAAkD,CAAC,CAAC;IAC3F,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,4BAAQ,CAAC,6BAA6B,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC/E,IAAI,CAAC;QACH,OAAO,MAAM,OAAO,CAAC,gBAAgB,CAAC,EAAC,eAAe,EAAC,CAAC,CAAC;IAC3D,CAAC;YAAS,CAAC;QACT,OAAO,CAAC,KAAK,EAAE,CAAC;IAClB,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACI,KAAK,UAAU,cAAc,CAElC,QAAgB;IAEhB,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC;QACxB,MAAM,IAAI,eAAM,CAAC,mBAAmB,CAClC,kDAAkD;YAChD,uDAAuD;YACvD,mEAAmE,CACtE,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAI,IAAI,CAAC,MAAoB,CAAC,MAAM,CAAC;IACjD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAChE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,kCAAkC,QAAQ,QAAQ,QAAQ,GAAG,CAAC,CAAC;IAC9E,IAAI,CAAC,CAAC,MAAM,YAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;QACjC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IACxC,MAAM,KAAK,GAAG,MAAM,YAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACzC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QAClB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,kBAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,YAAE,CAAC,MAAM,CAAC,mBAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACvE,IAAI,CAAC,GAAG,CAAC,IAAI,CACX,cAAc,cAAI,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,QAAQ,mBAAmB,CAC7F,CAAC;IACF,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;;;;GAYG;AACI,KAAK,UAAU,UAAU,CAE9B,OAA4C;IAE5C,MAAM,UAAU,GAAG,iBAAiB,CAAC;IACrC,MAAM,aAAa,GAAG,oBAAoB,CAAC;IAE3C,IAAI,QAA4B,CAAC;IACjC,IAAI,MAAM,GAAwB,EAAE,CAAC;IACrC,MAAM,cAAc,GAAG,CAAC,cAA8B,EAAE,EAAE;QACxD,IAAI,CAAC,cAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;YACnC,QAAQ,GAAG,UAAU,CAAC;QACxB,CAAC;aAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC;YAC1C,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC;YACpD,IAAI,QAAQ,IAAI,CAAC,EAAE,CAAC;gBAClB,MAAM,GAAG,EAAC,QAAQ,EAAC,CAAC;gBACpB,QAAQ,GAAG,aAAa,CAAC;YAC3B,CAAC;iBAAM,CAAC;gBACN,QAAQ,GAAG,UAAU,CAAC;YACxB,CAAC;QACH,CAAC;IACH,CAAC,CAAC;IACF,IAAI,OAAO,IAAI,CAAC,gBAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,gBAAC,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,CAAC;QACjE,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAChC,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;IAC1F,CAAC;SAAM,CAAC;QACN,cAAc,CAAC,gBAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAC5D,CAAC;IACD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,eAAM,CAAC,oBAAoB,CACnC,mDAAmD;YACjD,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,4BAA4B,CACzD,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,KAAK,UAAU,CAAC,CAAC;AACpF,CAAC"}
|