@e2e-dev/mobile 0.8.0-canary-20260928184528 → 0.8.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.
- package/README.md +33 -22
- package/dist/.build.json +1 -1
- package/dist/bindings.d.ts +10 -6
- package/dist/bindings.d.ts.map +1 -1
- package/dist/bindings.js +8 -6
- package/dist/bindings.js.map +1 -1
- package/dist/device.d.ts +5 -5
- package/dist/device.js +1 -1
- package/dist/device.js.map +1 -1
- package/dist/engine.d.ts +1 -1
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +30 -18
- package/dist/engine.js.map +1 -1
- package/dist/index.d.ts +14 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -4
- package/dist/index.js.map +1 -1
- package/dist/links.d.ts +0 -7
- package/dist/links.d.ts.map +1 -1
- package/dist/links.js +0 -11
- package/dist/links.js.map +1 -1
- package/dist/nodes.d.ts +1 -1
- package/dist/nodes.d.ts.map +1 -1
- package/dist/options.d.ts +13 -56
- package/dist/options.d.ts.map +1 -1
- package/dist/options.js +14 -1
- package/dist/options.js.map +1 -1
- package/dist/pool.d.ts +17 -6
- package/dist/pool.d.ts.map +1 -1
- package/dist/pool.js +46 -12
- package/dist/pool.js.map +1 -1
- package/dist/provider.d.ts +51 -10
- package/dist/provider.d.ts.map +1 -1
- package/dist/provider.js +57 -6
- package/dist/provider.js.map +1 -1
- package/dist/surface.d.ts +42 -9
- package/dist/surface.d.ts.map +1 -1
- package/dist/surface.js +144 -26
- package/dist/surface.js.map +1 -1
- package/dist/tools.d.ts +3 -3
- package/dist/tools.js +3 -3
- package/package.json +5 -5
package/dist/options.d.ts
CHANGED
|
@@ -14,47 +14,24 @@ export type AgentDeviceClient = ReturnType<typeof createAgentDeviceClient>;
|
|
|
14
14
|
*/
|
|
15
15
|
export type ClientFactory = (session: string, connection?: DeviceConnection) => AgentDeviceClient;
|
|
16
16
|
export type MobilePlatform = 'ios' | 'android';
|
|
17
|
+
/** Every permission agent-device can grant, deny, or reset on an app: what a target's `app.permissions` and `device.openApp` may name. */
|
|
18
|
+
export declare const DEVICE_PERMISSIONS: readonly ['camera', 'microphone', 'photos', 'contacts', 'notifications', 'calendar', 'location', 'reminders', 'motion', 'siri', 'media-library'];
|
|
17
19
|
/** Permissions agent-device can grant, deny, or reset on an app. */
|
|
18
|
-
export type DevicePermission =
|
|
20
|
+
export type DevicePermission = (typeof DEVICE_PERMISSIONS)[number];
|
|
19
21
|
/** A permission's state: held, refused, or not asked for yet, so the OS asks again. */
|
|
20
22
|
export type PermissionState = 'grant' | 'deny' | 'reset';
|
|
21
23
|
/** Permissions an app holds when it launches, by name. */
|
|
22
24
|
export type LaunchPermissions = Readonly<Partial<Record<DevicePermission, PermissionState>>>;
|
|
23
25
|
/**
|
|
24
|
-
* Options of the device engine
|
|
25
|
-
*
|
|
26
|
+
* Options of the device engine: which devices it drives and how. The app
|
|
27
|
+
* under test is the target's `app` (`bundleId`, `appPath`,
|
|
28
|
+
* `launchArguments`, `permissions`). Every optional value also accepts
|
|
29
|
+
* `undefined`, so values read straight from `process.env` need no
|
|
30
|
+
* conditional spread.
|
|
26
31
|
*/
|
|
27
32
|
export interface MobileOptions {
|
|
28
33
|
/** Platform the target's device runs. */
|
|
29
34
|
readonly platform: MobilePlatform;
|
|
30
|
-
/**
|
|
31
|
-
* App the worker brings up once in `prepare` and `app.open()` launches
|
|
32
|
-
* fresh: a bundle id, a package name, or a display name agent-device
|
|
33
|
-
* resolves (`Settings`). An attempt launches nothing on its own, so a test
|
|
34
|
-
* starts where the last one ended and calls `app.open()` when it wants
|
|
35
|
-
* the app fresh, as a Maestro flow calls `launchApp`. Without it the
|
|
36
|
-
* surface observes whatever is in the foreground, and `app.open()`,
|
|
37
|
-
* `app.restart()`, and `app.clearState()` are not available. A link is
|
|
38
|
-
* `INVALID_CONFIG`: a test opens one with `device.openLink`.
|
|
39
|
-
*/
|
|
40
|
-
readonly app?: string | undefined;
|
|
41
|
-
/**
|
|
42
|
-
* The build the suite runs against: an iOS `.app` bundle or an Android
|
|
43
|
-
* `.apk`, resolved against the project root (the config's directory). The
|
|
44
|
-
* engine installs nothing on its own: `device.installApp()` with no path
|
|
45
|
-
* installs it, once per device, where the suite says so, and a device
|
|
46
|
-
* provider installs it on the device it leases. Without `app`, the
|
|
47
|
-
* installed bundle id or package becomes the app `app.open()` launches.
|
|
48
|
-
*/
|
|
49
|
-
readonly appPath?: string | undefined;
|
|
50
|
-
/**
|
|
51
|
-
* Stable identity keying trace cache and session entries; defaults to `app`,
|
|
52
|
-
* else `appPath`. Declare one when the pinned app differs per run (a build
|
|
53
|
-
* path with a version in it) so entries survive the rename.
|
|
54
|
-
*/
|
|
55
|
-
readonly identity?: string | undefined;
|
|
56
|
-
/** Report label joining the cache identity; a simulator or emulator defaults to `test`. */
|
|
57
|
-
readonly environment?: 'test' | 'staging' | 'production' | undefined;
|
|
58
35
|
/**
|
|
59
36
|
* Simulator or emulator to use, by name, simulator UDID, or emulator
|
|
60
37
|
* serial (`emulator-5554`). A list is a pool: the
|
|
@@ -104,31 +81,11 @@ export interface MobileOptions {
|
|
|
104
81
|
*/
|
|
105
82
|
readonly transition?: number | undefined;
|
|
106
83
|
/**
|
|
107
|
-
*
|
|
108
|
-
*
|
|
109
|
-
*
|
|
110
|
-
*
|
|
111
|
-
* boolean intent extra. The warm-up in `prepare` and a foreground-only
|
|
112
|
-
* `device.openApp` pass none: an app already running keeps its process
|
|
113
|
-
* arguments, and `app.open()` relaunches it with them. Arguments that
|
|
114
|
-
* select a build mode change what the app is: give each mode its own
|
|
115
|
-
* `identity` so their recordings stay apart.
|
|
116
|
-
* `device.openApp(app, { launchArguments })` launches any app with its
|
|
117
|
-
* own.
|
|
118
|
-
*/
|
|
119
|
-
readonly launchArguments?: readonly string[] | undefined;
|
|
120
|
-
/**
|
|
121
|
-
* Permissions the pinned app holds on every fresh launch this engine
|
|
122
|
-
* performs: `app.open()`, `app.restart()`, and `app.clearState()`, which
|
|
123
|
-
* resets them along with the app's data. Each is granted, denied, or reset
|
|
124
|
-
* (the OS asks again) before the app starts, since iOS terminates a running
|
|
125
|
-
* app whose permission changed and Android one whose permission was
|
|
126
|
-
* revoked. `deny` is a recorded refusal on iOS, where the app is told no
|
|
127
|
-
* without a prompt, and a revocation on Android, where the OS asks again
|
|
128
|
-
* when the app requests the permission. A foreground-only `device.openApp`
|
|
129
|
-
* leaves them alone; `device.openApp(app, { permissions })` presets any
|
|
130
|
-
* app's.
|
|
84
|
+
* Whether a video recording draws agent-device's touch indicator where a
|
|
85
|
+
* test tapped. Default `true`. `false` records the plain screen, and skips
|
|
86
|
+
* the pass that draws the indicator once the recording stops: on a hosted
|
|
87
|
+
* daemon that pass can outlast the attempt's `cleanupTimeout`.
|
|
131
88
|
*/
|
|
132
|
-
readonly
|
|
89
|
+
readonly videoTouches?: boolean | undefined;
|
|
133
90
|
}
|
|
134
91
|
//# sourceMappingURL=options.d.ts.map
|
package/dist/options.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEpD,MAAM,MAAM,iBAAiB,GAAG,UAAU,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAE3E;;;;GAIG;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,gBAAgB,KAAK,iBAAiB,CAAC;AAElG,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,SAAS,CAAC;AAE/C,
|
|
1
|
+
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEpD,MAAM,MAAM,iBAAiB,GAAG,UAAU,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAE3E;;;;GAIG;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,gBAAgB,KAAK,iBAAiB,CAAC;AAElG,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,SAAS,CAAC;AAE/C,0IAA0I;AAC1I,eAAO,MAAM,kBAAkB,YAC7B,QAAQ,EACR,YAAY,EACZ,QAAQ,EACR,UAAU,EACV,eAAe,EACf,UAAU,EACV,UAAU,EACV,WAAW,EACX,QAAQ,EACR,MAAM,EACN,eAAe,CACP,CAAC;AAEX,oEAAoE;AACpE,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEnE,uFAAuF;AACvF,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;AAEzD,0DAA0D;AAC1D,MAAM,MAAM,iBAAiB,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,gBAAgB,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC;AAE7F;;;;;;GAMG;AACH,MAAM,WAAW,aAAa;IAC5B,yCAAyC;IACzC,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAClC;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,GAAG,cAAc,GAAG,SAAS,CAAC;IAC1E;;;;;OAKG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAAC;IACvD;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS,CAAC;IAC7C;;;;;;;;;OASG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzC;;;;;OAKG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CAC7C"}
|
package/dist/options.js
CHANGED
|
@@ -3,5 +3,18 @@
|
|
|
3
3
|
* it drives them through. Shared by the surface (one session per worker) and
|
|
4
4
|
* the pool (the target's devices, one per worker slot).
|
|
5
5
|
*/
|
|
6
|
-
|
|
6
|
+
/** Every permission agent-device can grant, deny, or reset on an app: what a target's `app.permissions` and `device.openApp` may name. */
|
|
7
|
+
export const DEVICE_PERMISSIONS = [
|
|
8
|
+
'camera',
|
|
9
|
+
'microphone',
|
|
10
|
+
'photos',
|
|
11
|
+
'contacts',
|
|
12
|
+
'notifications',
|
|
13
|
+
'calendar',
|
|
14
|
+
'location',
|
|
15
|
+
'reminders',
|
|
16
|
+
'motion',
|
|
17
|
+
'siri',
|
|
18
|
+
'media-library',
|
|
19
|
+
];
|
|
7
20
|
//# sourceMappingURL=options.js.map
|
package/dist/options.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"options.js","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|
|
1
|
+
{"version":3,"file":"options.js","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAiBH,0IAA0I;AAC1I,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,QAAQ;IACR,YAAY;IACZ,QAAQ;IACR,UAAU;IACV,eAAe;IACf,UAAU;IACV,UAAU;IACV,WAAW;IACX,QAAQ;IACR,MAAM;IACN,eAAe;CACP,CAAC"}
|
package/dist/pool.d.ts
CHANGED
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
import { type EngineFinishInfo, type EnginePrepareInfo, type EnginePrepareResult } from 'e2e/engine';
|
|
13
13
|
import { type SlotBinding } from './bindings.ts';
|
|
14
14
|
import type { MobileOptions, MobilePlatform, ClientFactory } from './options.ts';
|
|
15
|
+
import { type RecordingDeviceProvider } from './provider.ts';
|
|
15
16
|
/** The fields agent-device commands select a device by: the platform, then one of a name, a simulator UDID, or an Android serial. */
|
|
16
17
|
export interface DeviceSelection {
|
|
17
18
|
readonly platform: MobilePlatform;
|
|
@@ -35,6 +36,13 @@ export declare class DevicePool {
|
|
|
35
36
|
/** The clients `warm` opened sessions with, per target, held for `finish` to close whatever `warm` got to. */
|
|
36
37
|
private readonly warmed;
|
|
37
38
|
constructor(options: MobileOptions, createClient: ClientFactory);
|
|
39
|
+
/**
|
|
40
|
+
* The device provider when its service records the devices it leases,
|
|
41
|
+
* in every process: the pool is built from the options in the runner and
|
|
42
|
+
* in each worker alike. `undefined` for a local pool, or a provider
|
|
43
|
+
* without `record`.
|
|
44
|
+
*/
|
|
45
|
+
get recorder(): RecordingDeviceProvider | undefined;
|
|
38
46
|
/**
|
|
39
47
|
* Workers the engine serves per target, one per device: known up front for
|
|
40
48
|
* a configured pool, and `undefined` for a discovered or leased one until
|
|
@@ -74,10 +82,10 @@ export declare class DevicePool {
|
|
|
74
82
|
*/
|
|
75
83
|
finish(info: EngineFinishInfo): Promise<void>;
|
|
76
84
|
/**
|
|
77
|
-
* Boots every bound device
|
|
78
|
-
*
|
|
79
|
-
* returned binding records for the worker: a permission it
|
|
80
|
-
* needs no open first. A plain foreground open, with none of the engine's
|
|
85
|
+
* Boots every bound device, starts the iOS automation runner on it, and
|
|
86
|
+
* opens the pinned app on it once, so the slot's session is on the app,
|
|
87
|
+
* which the returned binding records for the worker: a permission it
|
|
88
|
+
* presets there needs no open first. A plain foreground open, with none of the engine's
|
|
81
89
|
* launch options: an app still running from an earlier run keeps its
|
|
82
90
|
* process either way, and a test's `app.open()` relaunches it with them.
|
|
83
91
|
* One slot after another, on purpose: workers
|
|
@@ -89,8 +97,11 @@ export declare class DevicePool {
|
|
|
89
97
|
* here too: the first attempt could only meet the same runner and fail
|
|
90
98
|
* its first observation with the app blamed, and the message names the
|
|
91
99
|
* recovery, which a wait of up to the runner's recycle window would only
|
|
92
|
-
* hide. A
|
|
93
|
-
*
|
|
100
|
+
* hide. A runner that did not start leaves the slot unopened: the open
|
|
101
|
+
* would start it again under a shorter budget, and its timeout resets the
|
|
102
|
+
* daemon every earlier slot is on. A build `appPath` installs in `init` is
|
|
103
|
+
* not on the device yet, so that slot boots and starts the runner only,
|
|
104
|
+
* unless a lease says the build is already there.
|
|
94
105
|
*/
|
|
95
106
|
private warm;
|
|
96
107
|
/** Holds a warm-up client for `finish`, before its first command: a boot that fails still opened the session. */
|
package/dist/pool.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pool.d.ts","sourceRoot":"","sources":["../src/pool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAKL,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACzB,MAAM,YAAY,CAAC;AACpB,OAAO,EAA+F,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAE9I,OAAO,KAAK,EAAqB,aAAa,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"pool.d.ts","sourceRoot":"","sources":["../src/pool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAKL,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACzB,MAAM,YAAY,CAAC;AACpB,OAAO,EAA+F,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAE9I,OAAO,KAAK,EAAqB,aAAa,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AACpG,OAAO,EAAmC,KAAK,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAO9F,qIAAqI;AACrI,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAClC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,cAAc,EACxB,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,QAAQ,GAAG,UAAU,CAAC,GAAG,SAAS,GAC5D,eAAe,CAKjB;AA8ED,qBAAa,UAAU;IAQnB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAR/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAe;IACtC,oGAAoG;IACpG,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA6C;IACnE,8GAA8G;IAC9G,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA0C;IAEjE,YACmB,OAAO,EAAE,aAAa,EACtB,YAAY,EAAE,aAAa,EAG7C;IAED;;;;;OAKG;IACH,IAAI,QAAQ,IAAI,uBAAuB,GAAG,SAAS,CAElD;IAED;;;;OAIG;IACH,IAAI,IAAI,IAAI,MAAM,GAAG,SAAS,CAE7B;IAED,8HAA8H;IAC9H,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAEhD;IAED;;;;;;;;OAQG;IACH,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,GAAG,WAAW,GAAG,SAAS,CAYpH;IAED;;;;;;;OAOG;IACG,OAAO,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAKnE;IAED;;;;;;;;;OASG;IACG,MAAM,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAQlD;IAED;;;;;;;;;;;;;;;;;;;;;OAqBG;YACW,IAAI;IAoClB,iHAAiH;IACjH,OAAO,CAAC,MAAM;CAKf"}
|
package/dist/pool.js
CHANGED
|
@@ -108,6 +108,15 @@ export class DevicePool {
|
|
|
108
108
|
this.createClient = createClient;
|
|
109
109
|
this.source = sourceFor(options, createClient, (targetName, slot) => this.session(targetName, slot));
|
|
110
110
|
}
|
|
111
|
+
/**
|
|
112
|
+
* The device provider when its service records the devices it leases,
|
|
113
|
+
* in every process: the pool is built from the options in the runner and
|
|
114
|
+
* in each worker alike. `undefined` for a local pool, or a provider
|
|
115
|
+
* without `record`.
|
|
116
|
+
*/
|
|
117
|
+
get recorder() {
|
|
118
|
+
return this.source instanceof LeasedDevices ? this.source.recorder : undefined;
|
|
119
|
+
}
|
|
111
120
|
/**
|
|
112
121
|
* Workers the engine serves per target, one per device: known up front for
|
|
113
122
|
* a configured pool, and `undefined` for a discovered or leased one until
|
|
@@ -171,10 +180,10 @@ export class DevicePool {
|
|
|
171
180
|
await Promise.all([closing, this.source.finish?.(info)]);
|
|
172
181
|
}
|
|
173
182
|
/**
|
|
174
|
-
* Boots every bound device
|
|
175
|
-
*
|
|
176
|
-
* returned binding records for the worker: a permission it
|
|
177
|
-
* needs no open first. A plain foreground open, with none of the engine's
|
|
183
|
+
* Boots every bound device, starts the iOS automation runner on it, and
|
|
184
|
+
* opens the pinned app on it once, so the slot's session is on the app,
|
|
185
|
+
* which the returned binding records for the worker: a permission it
|
|
186
|
+
* presets there needs no open first. A plain foreground open, with none of the engine's
|
|
178
187
|
* launch options: an app still running from an earlier run keeps its
|
|
179
188
|
* process either way, and a test's `app.open()` relaunches it with them.
|
|
180
189
|
* One slot after another, on purpose: workers
|
|
@@ -186,8 +195,11 @@ export class DevicePool {
|
|
|
186
195
|
* here too: the first attempt could only meet the same runner and fail
|
|
187
196
|
* its first observation with the app blamed, and the message names the
|
|
188
197
|
* recovery, which a wait of up to the runner's recycle window would only
|
|
189
|
-
* hide. A
|
|
190
|
-
*
|
|
198
|
+
* hide. A runner that did not start leaves the slot unopened: the open
|
|
199
|
+
* would start it again under a shorter budget, and its timeout resets the
|
|
200
|
+
* daemon every earlier slot is on. A build `appPath` installs in `init` is
|
|
201
|
+
* not on the device yet, so that slot boots and starts the runner only,
|
|
202
|
+
* unless a lease says the build is already there.
|
|
191
203
|
*/
|
|
192
204
|
async warm(bindings, info) {
|
|
193
205
|
const warmed = [];
|
|
@@ -200,15 +212,16 @@ export class DevicePool {
|
|
|
200
212
|
this.retain(info.targetName, client);
|
|
201
213
|
info.log(`booting ${label} (${slot + 1} of ${bindings.length})`);
|
|
202
214
|
await runCommand('boot', () => client.devices.boot(where), info.signal, at);
|
|
203
|
-
const
|
|
204
|
-
|
|
215
|
+
const runnerUp = this.options.platform !== 'ios' || (await prepareRunner(client, where, info, at));
|
|
216
|
+
const app = pinnedApp(info.app, binding.installedApp);
|
|
217
|
+
if (app === undefined || !runnerUp) {
|
|
205
218
|
warmed.push(binding);
|
|
206
219
|
continue;
|
|
207
220
|
}
|
|
208
221
|
// A build the suite installs itself is not on the device yet, so there
|
|
209
|
-
// is nothing to open: the first attempt installs it
|
|
210
|
-
if (
|
|
211
|
-
info.log(`${label}: ${app} awaits the suite's device.installApp()
|
|
222
|
+
// is nothing to open: the first attempt installs it.
|
|
223
|
+
if (info.app.appPath !== undefined && binding.installedApp === undefined) {
|
|
224
|
+
info.log(`${label}: ${app} awaits the suite's device.installApp()`);
|
|
212
225
|
warmed.push(binding);
|
|
213
226
|
continue;
|
|
214
227
|
}
|
|
@@ -219,7 +232,7 @@ export class DevicePool {
|
|
|
219
232
|
catch (cause) {
|
|
220
233
|
if (info.signal.aborted || isRunnerFailure(cause))
|
|
221
234
|
throw cause;
|
|
222
|
-
info.log(`${label}:
|
|
235
|
+
info.log(`${label}: ${app} did not open (${message(cause)}); the first attempt opens it`);
|
|
223
236
|
warmed.push(binding);
|
|
224
237
|
}
|
|
225
238
|
}
|
|
@@ -232,4 +245,25 @@ export class DevicePool {
|
|
|
232
245
|
this.warmed.set(targetName, clients);
|
|
233
246
|
}
|
|
234
247
|
}
|
|
248
|
+
/**
|
|
249
|
+
* Starts the slot's iOS automation runner under `prepare ios-runner`, whose
|
|
250
|
+
* startup budget covers a cold simulator. Left to the first `open`, the
|
|
251
|
+
* start runs inside that request's 90 s envelope, which a cold runner on a
|
|
252
|
+
* loaded CI Mac outlasts; a timed-out `open` resets the daemon, ending every
|
|
253
|
+
* other slot's session with it. A runner that is busy or wedged ends the run
|
|
254
|
+
* here, like a warm-up open that meets one; any other failure is logged and
|
|
255
|
+
* left to the first attempt. True when the runner is up.
|
|
256
|
+
*/
|
|
257
|
+
async function prepareRunner(client, where, info, at) {
|
|
258
|
+
try {
|
|
259
|
+
await runCommand('prepare ios-runner', () => client.command.prepare({ action: 'ios-runner', ...where }), info.signal, at);
|
|
260
|
+
return true;
|
|
261
|
+
}
|
|
262
|
+
catch (cause) {
|
|
263
|
+
if (info.signal.aborted || isRunnerFailure(cause))
|
|
264
|
+
throw cause;
|
|
265
|
+
info.log(`${at}: automation runner not prepared (${message(cause)}); the first attempt starts it`);
|
|
266
|
+
return false;
|
|
267
|
+
}
|
|
268
|
+
}
|
|
235
269
|
//# sourceMappingURL=pool.js.map
|
package/dist/pool.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pool.js","sourceRoot":"","sources":["../src/pool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EACL,kBAAkB,EAClB,WAAW,EACX,GAAG,EACH,mBAAmB,GAIpB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,WAAW,EAAE,cAAc,EAAE,SAAS,EAAuC,MAAM,eAAe,CAAC;AAC9I,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEnE,OAAO,EAAE,gBAAgB,EAAE,aAAa,
|
|
1
|
+
{"version":3,"file":"pool.js","sourceRoot":"","sources":["../src/pool.ts"],"names":[],"mappings":"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"}
|
package/dist/provider.d.ts
CHANGED
|
@@ -2,11 +2,13 @@
|
|
|
2
2
|
* The seam a hosted device service plugs into: a `DeviceProvider` leases one
|
|
3
3
|
* device per worker slot for the run and hands back the agent-device daemon
|
|
4
4
|
* that drives it. The engine acquires in `prepare`, drives each lease from
|
|
5
|
-
* its worker, and releases in `finish`, on every exit path.
|
|
5
|
+
* its worker, and releases in `finish`, on every exit path. A provider whose
|
|
6
|
+
* service records its devices records an attempt's video in place of
|
|
7
|
+
* agent-device, from the worker that drives the lease. Nothing here
|
|
6
8
|
* knows any vendor: a hosted simulator service, a device farm, or a daemon on
|
|
7
9
|
* a machine down the hall are each one small provider in user code.
|
|
8
10
|
*/
|
|
9
|
-
import { type EngineFinishInfo, type EnginePrepareInfo } from 'e2e/engine';
|
|
11
|
+
import { type EngineFinishInfo, type EnginePrepareInfo, type ProviderRecordContext, type ProviderRecording } from 'e2e/engine';
|
|
10
12
|
import { type DeviceClientConfig, type DeviceDaemon, type DeviceSource, type SlotBinding } from './bindings.ts';
|
|
11
13
|
import type { MobileOptions, MobilePlatform } from './options.ts';
|
|
12
14
|
/** What the engine asks a provider for: one device for one worker slot of a run. */
|
|
@@ -21,11 +23,17 @@ export interface DeviceRequest {
|
|
|
21
23
|
readonly slot: number;
|
|
22
24
|
/** Devices the run acquires for this target, in all. */
|
|
23
25
|
readonly slots: number;
|
|
24
|
-
/**
|
|
26
|
+
/**
|
|
27
|
+
* The agent-device version this engine's client speaks, for a provider
|
|
28
|
+
* that picks the daemon version it starts: a daemon of another version may
|
|
29
|
+
* answer the same commands differently.
|
|
30
|
+
*/
|
|
31
|
+
readonly agentDeviceVersion: string;
|
|
32
|
+
/** The target's `app.bundleId`: the bundle id or package `app.open()` launches, when the config names one. */
|
|
25
33
|
readonly app?: string | undefined;
|
|
26
34
|
/**
|
|
27
|
-
* The build the engine would install
|
|
28
|
-
* the config names one. A provider that installs it itself (uploading it,
|
|
35
|
+
* The build the engine would install (the target's `app.appPath`),
|
|
36
|
+
* resolved to an absolute path, when the config names one. A provider that installs it itself (uploading it,
|
|
29
37
|
* or naming a build it already hosts) reports `installedApp` on the lease
|
|
30
38
|
* and the engine skips its own install.
|
|
31
39
|
*/
|
|
@@ -42,12 +50,12 @@ export interface DeviceRequest {
|
|
|
42
50
|
* JSON data only: a lease travels from the runner process to the worker that
|
|
43
51
|
* drives it through the environment.
|
|
44
52
|
*/
|
|
45
|
-
export interface DeviceLease extends SlotBinding {
|
|
53
|
+
export interface DeviceLease extends Omit<SlotBinding, 'leaseId'> {
|
|
46
54
|
/**
|
|
47
55
|
* The provider's handle on the lease (a session id); named in progress
|
|
48
56
|
* lines and handed back to `release`. A provider may keep further fields on
|
|
49
57
|
* the object it returns: `release` gets that same object, while only the
|
|
50
|
-
* fields declared here travel to the worker.
|
|
58
|
+
* fields declared here travel to the worker, and `record` gets those.
|
|
51
59
|
*/
|
|
52
60
|
readonly id: string;
|
|
53
61
|
/**
|
|
@@ -71,7 +79,7 @@ export interface DeviceLease extends SlotBinding {
|
|
|
71
79
|
/**
|
|
72
80
|
* Bundle id or package of the app the provider installed from the
|
|
73
81
|
* request's `appPath`, and only then: with it the engine installs nothing
|
|
74
|
-
* and, without an `app
|
|
82
|
+
* and, without an `app.bundleId`, `app.open()` launches this app. A lease
|
|
75
83
|
* reporting one for a request without `appPath` fails the run.
|
|
76
84
|
*/
|
|
77
85
|
readonly installedApp?: string | undefined;
|
|
@@ -90,16 +98,47 @@ export interface DeviceReleaseContext {
|
|
|
90
98
|
* A source of hosted devices. `acquire` is called once per worker slot, for
|
|
91
99
|
* every slot at once; `release` once per lease acquired, at the end of the
|
|
92
100
|
* run, also after an `acquire` of another slot failed. Both run in the
|
|
93
|
-
* runner process, so a provider may keep state between them.
|
|
101
|
+
* runner process, so a provider may keep state between them. `record` runs
|
|
102
|
+
* in the worker that drives the lease, which may be another process, so it
|
|
103
|
+
* must not rely on state `acquire` kept.
|
|
94
104
|
*/
|
|
95
105
|
export interface DeviceProvider {
|
|
96
106
|
/** Label in progress lines and error messages. */
|
|
97
107
|
readonly name: string;
|
|
98
108
|
acquire(request: DeviceRequest): Promise<DeviceLease>;
|
|
99
109
|
release(lease: DeviceLease, context: DeviceReleaseContext): Promise<void>;
|
|
110
|
+
/**
|
|
111
|
+
* Records the leased device for an attempt that records video, in place of
|
|
112
|
+
* the engine's agent-device screen recording: the service's own recording
|
|
113
|
+
* of the device, called from the worker when the attempt starts its video.
|
|
114
|
+
* A provider that cannot record its devices leaves it out, and the engine
|
|
115
|
+
* records with agent-device. `lease` is the lease as it traveled to the
|
|
116
|
+
* worker: its `id` and the other fields declared on `DeviceLease`, never
|
|
117
|
+
* what else the provider kept on the object `acquire` returned.
|
|
118
|
+
* `ProviderRecording` comes from `e2e/engine`: its `stop` writes a file
|
|
119
|
+
* into the directory it is given, or names a recording the service keeps
|
|
120
|
+
* by URL.
|
|
121
|
+
*/
|
|
122
|
+
record?(lease: DeviceLease, context: ProviderRecordContext): Promise<ProviderRecording>;
|
|
100
123
|
}
|
|
124
|
+
/** A provider whose service records the devices it leases. */
|
|
125
|
+
export type RecordingDeviceProvider = DeviceProvider & Required<Pick<DeviceProvider, 'record'>>;
|
|
101
126
|
/** Narrows an intended provider, or names what it is missing. */
|
|
102
127
|
export declare function asDeviceProvider(device: object): DeviceProvider;
|
|
128
|
+
/**
|
|
129
|
+
* The lease a worker's binding stands for, as it traveled from the runner:
|
|
130
|
+
* its id and the fields `DeviceLease` declares, never anything else the
|
|
131
|
+
* provider kept on the object `acquire` returned. `undefined` for a binding
|
|
132
|
+
* no provider leased.
|
|
133
|
+
*/
|
|
134
|
+
export declare function travelledLease(binding: SlotBinding | undefined): DeviceLease | undefined;
|
|
135
|
+
/**
|
|
136
|
+
* Starts the provider's recording of a leased device for one attempt. A
|
|
137
|
+
* failure is named after the provider and the lease, and one met once the
|
|
138
|
+
* signal aborted is a cancellation. A recording without a `startedAt` and a
|
|
139
|
+
* `stop()` is refused: the engine trusts nothing it did not write.
|
|
140
|
+
*/
|
|
141
|
+
export declare function recordLease(provider: RecordingDeviceProvider, lease: DeviceLease, context: ProviderRecordContext): Promise<ProviderRecording>;
|
|
103
142
|
/**
|
|
104
143
|
* Devices a provider leases, one per slot, all at once: hosted sessions start
|
|
105
144
|
* in parallel and are billed from the moment they do, so nothing waits on a
|
|
@@ -112,7 +151,9 @@ export declare class LeasedDevices implements DeviceSource {
|
|
|
112
151
|
private readonly options;
|
|
113
152
|
/** Leases granted so far, per target, filled as each `acquire` settles; a lease the engine then rejects is among them. */
|
|
114
153
|
private readonly held;
|
|
115
|
-
|
|
154
|
+
/** The provider when its service records the devices it leases; `undefined` leaves video to agent-device. */
|
|
155
|
+
readonly recorder: RecordingDeviceProvider | undefined;
|
|
156
|
+
constructor(provider: DeviceProvider, options: Pick<MobileOptions, 'platform'>);
|
|
116
157
|
bind(info: EnginePrepareInfo): Promise<readonly SlotBinding[]>;
|
|
117
158
|
finish(info: EngineFinishInfo): Promise<void>;
|
|
118
159
|
}
|
package/dist/provider.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"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"}
|
package/dist/provider.js
CHANGED
|
@@ -2,15 +2,19 @@
|
|
|
2
2
|
* The seam a hosted device service plugs into: a `DeviceProvider` leases one
|
|
3
3
|
* device per worker slot for the run and hands back the agent-device daemon
|
|
4
4
|
* that drives it. The engine acquires in `prepare`, drives each lease from
|
|
5
|
-
* its worker, and releases in `finish`, on every exit path.
|
|
5
|
+
* its worker, and releases in `finish`, on every exit path. A provider whose
|
|
6
|
+
* service records its devices records an attempt's video in place of
|
|
7
|
+
* agent-device, from the worker that drives the lease. Nothing here
|
|
6
8
|
* knows any vendor: a hosted simulator service, a device farm, or a daemon on
|
|
7
9
|
* a machine down the hall are each one small provider in user code.
|
|
8
10
|
*/
|
|
11
|
+
import { createRequire } from 'node:module';
|
|
9
12
|
import path from 'node:path';
|
|
10
|
-
import { ConfigurationError, EngineError, obj } from 'e2e/engine';
|
|
13
|
+
import { ConfigurationError, EngineError, isProviderRecording, obj, } from 'e2e/engine';
|
|
11
14
|
import { isSlotBinding } from './bindings.js';
|
|
12
15
|
import { message } from './errors.js';
|
|
13
16
|
import { isLink } from './links.js';
|
|
17
|
+
import { cancelled } from './support.js';
|
|
14
18
|
/** Narrows an intended provider, or names what it is missing. */
|
|
15
19
|
export function asDeviceProvider(device) {
|
|
16
20
|
const candidate = device;
|
|
@@ -22,15 +26,57 @@ export function asDeviceProvider(device) {
|
|
|
22
26
|
throw new ConfigurationError('INVALID_CONFIG', `mobile: device provider "${candidate.name}" must implement ${member}()`);
|
|
23
27
|
}
|
|
24
28
|
}
|
|
29
|
+
if (candidate.record !== undefined && typeof candidate.record !== 'function') {
|
|
30
|
+
throw new ConfigurationError('INVALID_CONFIG', `mobile: device provider "${candidate.name}" has a record that is not a function`);
|
|
31
|
+
}
|
|
25
32
|
return device;
|
|
26
33
|
}
|
|
34
|
+
/**
|
|
35
|
+
* The lease a worker's binding stands for, as it traveled from the runner:
|
|
36
|
+
* its id and the fields `DeviceLease` declares, never anything else the
|
|
37
|
+
* provider kept on the object `acquire` returned. `undefined` for a binding
|
|
38
|
+
* no provider leased.
|
|
39
|
+
*/
|
|
40
|
+
export function travelledLease(binding) {
|
|
41
|
+
if (binding?.leaseId === undefined)
|
|
42
|
+
return undefined;
|
|
43
|
+
const { leaseId, device, deviceId, daemon, client, installedApp } = binding;
|
|
44
|
+
return obj({ id: leaseId, device, deviceId, daemon, client, installedApp });
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Starts the provider's recording of a leased device for one attempt. A
|
|
48
|
+
* failure is named after the provider and the lease, and one met once the
|
|
49
|
+
* signal aborted is a cancellation. A recording without a `startedAt` and a
|
|
50
|
+
* `stop()` is refused: the engine trusts nothing it did not write.
|
|
51
|
+
*/
|
|
52
|
+
export async function recordLease(provider, lease, context) {
|
|
53
|
+
const failure = (detail, cause) => new EngineError('ENGINE_FAILURE', `device provider "${provider.name}" ${detail} for lease ${lease.id}`, { retryable: false, ...(cause === undefined ? {} : { cause }) });
|
|
54
|
+
if (context.signal.aborted)
|
|
55
|
+
throw cancelled(`recording from device provider "${provider.name}" cancelled`);
|
|
56
|
+
let recording;
|
|
57
|
+
try {
|
|
58
|
+
recording = await provider.record(lease, context);
|
|
59
|
+
}
|
|
60
|
+
catch (cause) {
|
|
61
|
+
if (context.signal.aborted)
|
|
62
|
+
throw cancelled(`recording from device provider "${provider.name}" cancelled`);
|
|
63
|
+
throw failure(`could not start recording: ${message(cause)}`, cause);
|
|
64
|
+
}
|
|
65
|
+
if (!isProviderRecording(recording))
|
|
66
|
+
throw failure('returned a recording without a start time and a stop()');
|
|
67
|
+
return recording;
|
|
68
|
+
}
|
|
69
|
+
/** The agent-device this package pins exactly, read from its manifest: the version every worker's client is. */
|
|
70
|
+
const AGENT_DEVICE_VERSION = createRequire(import.meta.url)('../package.json').dependencies['agent-device'];
|
|
27
71
|
/** An object with a lease id: something the provider granted and `release` is owed, whatever the field check makes of it. */
|
|
28
72
|
function isGrantedLease(value) {
|
|
29
73
|
return typeof value === 'object' && value !== null && typeof value.id === 'string';
|
|
30
74
|
}
|
|
31
75
|
/** A granted lease checked field by field: the engine trusts nothing it did not write. */
|
|
32
76
|
function isDeviceLease(lease) {
|
|
33
|
-
|
|
77
|
+
// `leaseId` is the engine's own field on a binding; a provider may keep a field of that name on its lease.
|
|
78
|
+
const declared = { ...lease, leaseId: undefined };
|
|
79
|
+
return isSlotBinding(declared) && (declared.daemon !== undefined || declared.client !== undefined);
|
|
34
80
|
}
|
|
35
81
|
const REJECTED_LEASE = 'returned a lease without an id and a daemon baseUrl or JSON client configuration (no `session` or daemon keys)';
|
|
36
82
|
/** Runs every task, then reports the first failure: nothing is skipped because a sibling failed. */
|
|
@@ -55,14 +101,18 @@ export class LeasedDevices {
|
|
|
55
101
|
options;
|
|
56
102
|
/** Leases granted so far, per target, filled as each `acquire` settles; a lease the engine then rejects is among them. */
|
|
57
103
|
held = new Map();
|
|
104
|
+
/** The provider when its service records the devices it leases; `undefined` leaves video to agent-device. */
|
|
105
|
+
recorder;
|
|
58
106
|
constructor(provider, options) {
|
|
59
107
|
this.provider = provider;
|
|
60
108
|
this.options = options;
|
|
109
|
+
this.recorder = provider.record === undefined ? undefined : provider;
|
|
61
110
|
}
|
|
62
111
|
async bind(info) {
|
|
63
112
|
const { provider } = this;
|
|
64
|
-
const { platform
|
|
65
|
-
const
|
|
113
|
+
const { platform } = this.options;
|
|
114
|
+
const app = info.app.bundleId;
|
|
115
|
+
const appPath = info.app.appPath === undefined ? undefined : path.resolve(info.projectRoot, info.app.appPath);
|
|
66
116
|
const held = [];
|
|
67
117
|
this.held.set(info.targetName, held);
|
|
68
118
|
info.log(`leasing ${info.slots} ${platform} device(s) from ${provider.name}`);
|
|
@@ -73,6 +123,7 @@ export class LeasedDevices {
|
|
|
73
123
|
targetName: info.targetName,
|
|
74
124
|
slot,
|
|
75
125
|
slots: info.slots,
|
|
126
|
+
agentDeviceVersion: AGENT_DEVICE_VERSION,
|
|
76
127
|
app,
|
|
77
128
|
appPath,
|
|
78
129
|
env: info.env,
|
|
@@ -96,7 +147,7 @@ export class LeasedDevices {
|
|
|
96
147
|
info.log(`${provider.name}: leased ${lease.id}${lease.device === undefined ? '' : ` (${lease.device})`}`);
|
|
97
148
|
return lease;
|
|
98
149
|
}), `device provider "${provider.name}" could not lease a device`);
|
|
99
|
-
return leases.map((lease) => obj({ device: lease.device, deviceId: lease.deviceId, daemon: lease.daemon, client: lease.client, installedApp: lease.installedApp }));
|
|
150
|
+
return leases.map((lease) => obj({ leaseId: lease.id, device: lease.device, deviceId: lease.deviceId, daemon: lease.daemon, client: lease.client, installedApp: lease.installedApp }));
|
|
100
151
|
}
|
|
101
152
|
async finish(info) {
|
|
102
153
|
const { provider } = this;
|
package/dist/provider.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EACL,kBAAkB,EAClB,WAAW,EACX,mBAAmB,EACnB,GAAG,GAKJ,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,aAAa,EAAmF,MAAM,eAAe,CAAC;AAC/H,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAwHzC,iEAAiE;AACjE,MAAM,UAAU,gBAAgB,CAAC,MAAc;IAC7C,MAAM,SAAS,GAAG,MAAwD,CAAC;IAC3E,IAAI,OAAO,SAAS,CAAC,IAAI,KAAK,QAAQ,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACvE,MAAM,IAAI,kBAAkB,CAAC,gBAAgB,EAAE,sDAAsD,CAAC,CAAC;IACzG,CAAC;IACD,KAAK,MAAM,MAAM,IAAI,CAAC,SAAS,EAAE,SAAS,CAAU,EAAE,CAAC;QACrD,IAAI,OAAO,SAAS,CAAC,MAAM,CAAC,KAAK,UAAU,EAAE,CAAC;YAC5C,MAAM,IAAI,kBAAkB,CAAC,gBAAgB,EAAE,4BAA4B,SAAS,CAAC,IAAI,oBAAoB,MAAM,IAAI,CAAC,CAAC;QAC3H,CAAC;IACH,CAAC;IACD,IAAI,SAAS,CAAC,MAAM,KAAK,SAAS,IAAI,OAAO,SAAS,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;QAC7E,MAAM,IAAI,kBAAkB,CAAC,gBAAgB,EAAE,4BAA4B,SAAS,CAAC,IAAI,uCAAuC,CAAC,CAAC;IACpI,CAAC;IACD,OAAO,MAAwB,CAAC;AAClC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,OAAgC;IAC7D,IAAI,OAAO,EAAE,OAAO,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACrD,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC;IAC5E,OAAO,GAAG,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;AAC9E,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,QAAiC,EAAE,KAAkB,EAAE,OAA8B;IACrH,MAAM,OAAO,GAAG,CAAC,MAAc,EAAE,KAAe,EAAE,EAAE,CAClD,IAAI,WAAW,CAAC,gBAAgB,EAAE,oBAAoB,QAAQ,CAAC,IAAI,KAAK,MAAM,cAAc,KAAK,CAAC,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IAC3K,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO;QAAE,MAAM,SAAS,CAAC,mCAAmC,QAAQ,CAAC,IAAI,aAAa,CAAC,CAAC;IAC3G,IAAI,SAAkB,CAAC;IACvB,IAAI,CAAC;QACH,SAAS,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO;YAAE,MAAM,SAAS,CAAC,mCAAmC,QAAQ,CAAC,IAAI,aAAa,CAAC,CAAC;QAC3G,MAAM,OAAO,CAAC,8BAA8B,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IACvE,CAAC;IACD,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC;QAAE,MAAM,OAAO,CAAC,wDAAwD,CAAC,CAAC;IAC7G,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,gHAAgH;AAChH,MAAM,oBAAoB,GAAI,aAAa,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,iBAAiB,CAA8C,CAAC,YAAY,CAAC,cAAc,CAAE,CAAC;AAE3J,6HAA6H;AAC7H,SAAS,cAAc,CAAC,KAAc;IACpC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,OAAQ,KAA0B,CAAC,EAAE,KAAK,QAAQ,CAAC;AAC3G,CAAC;AAED,0FAA0F;AAC1F,SAAS,aAAa,CAAC,KAA8B;IACnD,2GAA2G;IAC3G,MAAM,QAAQ,GAAY,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;IAC3D,OAAO,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,SAAS,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC;AACrG,CAAC;AAED,MAAM,cAAc,GAAG,gHAAgH,CAAC;AAExI,oGAAoG;AACpG,KAAK,UAAU,iBAAiB,CAAI,KAAoC,EAAE,QAAgB;IACxF,qGAAqG;IACrG,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAC5E,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC;IACtE,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,MAAM,IAAI,WAAW,CAAC,gBAAgB,EAAE,GAAG,QAAQ,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAChI,CAAC;IACD,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC5F,CAAC;AAED;;;;;;GAMG;AACH,MAAM,OAAO,aAAa;IAOL,QAAQ;IACR,OAAO;IAP1B,0HAA0H;IACzG,IAAI,GAAG,IAAI,GAAG,EAAyB,CAAC;IACzD,6GAA6G;IACpG,QAAQ,CAAsC;IAEvD,YACmB,QAAwB,EACxB,OAAwC;wBADxC,QAAQ;uBACR,OAAO;QAExB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAE,QAAoC,CAAC;IACpG,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,IAAuB;QAChC,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;QAC1B,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;QAClC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;QAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC9G,MAAM,IAAI,GAAkB,EAAE,CAAC;QAC/B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QACrC,IAAI,CAAC,GAAG,CAAC,WAAW,IAAI,CAAC,KAAK,IAAI,QAAQ,mBAAmB,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;QAC9E,MAAM,MAAM,GAAG,MAAM,iBAAiB,CACpC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,IAAI,EAAE;YACzD,MAAM,KAAK,GAAY,MAAM,QAAQ,CAAC,OAAO,CAAC;gBAC5C,QAAQ;gBACR,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,IAAI;gBACJ,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,kBAAkB,EAAE,oBAAoB;gBACxC,GAAG;gBACH,OAAO;gBACP,GAAG,EAAE,IAAI,CAAC,GAAG;gBACb,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,IAAI,KAAK,IAAI,GAAG,CAAC,OAAO,IAAI,CAAC,KAAK,MAAM,IAAI,EAAE,CAAC;aACpF,CAAC,CAAC;YACH,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC;YAC5D,qEAAqE;YACrE,iEAAiE;YACjE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACjB,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC;YAC3D,IAAI,KAAK,CAAC,YAAY,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC9D,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;YAC/E,CAAC;YACD,2FAA2F;YAC3F,IAAI,KAAK,CAAC,YAAY,KAAK,SAAS,IAAI,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;gBACnE,MAAM,IAAI,KAAK,CAAC,sEAAsE,CAAC,CAAC;YAC1F,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,IAAI,YAAY,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;YAC1G,OAAO,KAAK,CAAC;QACf,CAAC,CAAC,EACF,oBAAoB,QAAQ,CAAC,IAAI,4BAA4B,CAC9D,CAAC;QACF,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAC1B,GAAG,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC,CACzJ,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,IAAsB;QACjC,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;QAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC9C,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAClC,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QACxD,MAAM,OAAO,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC;QACrK,MAAM,iBAAiB,CACrB,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,EAC7D,oBAAoB,QAAQ,CAAC,IAAI,8BAA8B,CAChE,CAAC;QACF,IAAI,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,IAAI,cAAc,MAAM,CAAC,MAAM,YAAY,CAAC,CAAC;IACpE,CAAC;CACF"}
|