mobilewright 0.0.52 → 0.0.53

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 (69) hide show
  1. package/dist/cli.js +1 -2
  2. package/dist/cli.js.map +1 -1
  3. package/dist/config.d.ts +11 -24
  4. package/dist/config.d.ts.map +1 -1
  5. package/dist/config.js +89 -24
  6. package/dist/config.js.map +1 -1
  7. package/dist/config.test.js +174 -142
  8. package/dist/config.test.js.map +1 -1
  9. package/dist/device-pool/adapters/http-client.test.js +4 -4
  10. package/dist/device-pool/adapters/http-client.test.js.map +1 -1
  11. package/dist/device-pool/adapters/http-server.test.js +7 -7
  12. package/dist/device-pool/adapters/http-server.test.js.map +1 -1
  13. package/dist/device-pool/application/device-pool.d.ts +4 -3
  14. package/dist/device-pool/application/device-pool.d.ts.map +1 -1
  15. package/dist/device-pool/application/device-pool.js +30 -8
  16. package/dist/device-pool/application/device-pool.js.map +1 -1
  17. package/dist/device-pool/application/device-pool.test.js +71 -35
  18. package/dist/device-pool/application/device-pool.test.js.map +1 -1
  19. package/dist/device-pool/application/ports.d.ts +3 -33
  20. package/dist/device-pool/application/ports.d.ts.map +1 -1
  21. package/dist/device-pool/application/ports.js +1 -12
  22. package/dist/device-pool/application/ports.js.map +1 -1
  23. package/dist/device-pool/setup.d.ts.map +1 -1
  24. package/dist/device-pool/setup.js +5 -7
  25. package/dist/device-pool/setup.js.map +1 -1
  26. package/dist/driver-registry.d.ts +10 -0
  27. package/dist/driver-registry.d.ts.map +1 -0
  28. package/dist/driver-registry.js +14 -0
  29. package/dist/driver-registry.js.map +1 -0
  30. package/dist/index.d.ts +2 -1
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/index.js.map +1 -1
  33. package/dist/launchers.d.ts +5 -5
  34. package/dist/launchers.d.ts.map +1 -1
  35. package/dist/launchers.js +8 -32
  36. package/dist/launchers.js.map +1 -1
  37. package/dist/observer-reporter.d.ts +21 -0
  38. package/dist/observer-reporter.d.ts.map +1 -0
  39. package/dist/observer-reporter.js +106 -0
  40. package/dist/observer-reporter.js.map +1 -0
  41. package/dist/observer-reporter.test.d.ts +2 -0
  42. package/dist/observer-reporter.test.d.ts.map +1 -0
  43. package/dist/observer-reporter.test.js +182 -0
  44. package/dist/observer-reporter.test.js.map +1 -0
  45. package/package.json +6 -6
  46. package/dist/device-pool/adapters/mobilecli-allocator.d.ts +0 -19
  47. package/dist/device-pool/adapters/mobilecli-allocator.d.ts.map +0 -1
  48. package/dist/device-pool/adapters/mobilecli-allocator.js +0 -26
  49. package/dist/device-pool/adapters/mobilecli-allocator.js.map +0 -1
  50. package/dist/device-pool/adapters/mobilecli-allocator.test.d.ts +0 -2
  51. package/dist/device-pool/adapters/mobilecli-allocator.test.d.ts.map +0 -1
  52. package/dist/device-pool/adapters/mobilecli-allocator.test.js +0 -61
  53. package/dist/device-pool/adapters/mobilecli-allocator.test.js.map +0 -1
  54. package/dist/device-pool/adapters/mobilenext-allocator.d.ts +0 -24
  55. package/dist/device-pool/adapters/mobilenext-allocator.d.ts.map +0 -1
  56. package/dist/device-pool/adapters/mobilenext-allocator.js +0 -90
  57. package/dist/device-pool/adapters/mobilenext-allocator.js.map +0 -1
  58. package/dist/device-pool/adapters/mobilenext-allocator.test.d.ts +0 -2
  59. package/dist/device-pool/adapters/mobilenext-allocator.test.d.ts.map +0 -1
  60. package/dist/device-pool/adapters/mobilenext-allocator.test.js +0 -42
  61. package/dist/device-pool/adapters/mobilenext-allocator.test.js.map +0 -1
  62. package/dist/device-pool/allocator-factory.d.ts +0 -10
  63. package/dist/device-pool/allocator-factory.d.ts.map +0 -1
  64. package/dist/device-pool/allocator-factory.js +0 -23
  65. package/dist/device-pool/allocator-factory.js.map +0 -1
  66. package/dist/server.d.ts +0 -16
  67. package/dist/server.d.ts.map +0 -1
  68. package/dist/server.js +0 -101
  69. package/dist/server.js.map +0 -1
@@ -1,16 +1,17 @@
1
1
  import type { Platform, DeviceInfo, DeviceType, DeviceSettings, MobilewrightDriver } from '@mobilewright/protocol';
2
2
  import { Device } from '@mobilewright/core';
3
- import type { DriverConfig } from './config.js';
4
3
  export interface LaunchOptions {
5
4
  bundleId?: string;
6
5
  installApps?: string | string[];
7
6
  autoAppLaunch?: boolean;
8
7
  deviceId?: string;
9
8
  deviceName?: RegExp;
9
+ /** mobilecli server URL. Ignored when `driver` is set — construct the driver with its own url instead. */
10
10
  url?: string;
11
11
  timeout?: number;
12
+ /** Auto-start the mobilecli server if not running. Ignored when `driver` is set. Default: true. */
12
13
  autoStart?: boolean;
13
- driver?: DriverConfig;
14
+ driver?: MobilewrightDriver;
14
15
  actionTimeout?: number;
15
16
  expectTimeout?: number;
16
17
  appLaunchTimeout?: number;
@@ -25,7 +26,7 @@ export interface ConnectDeviceParams {
25
26
  platform: Platform;
26
27
  deviceId: string;
27
28
  deviceType?: DeviceType;
28
- driverConfig?: DriverConfig;
29
+ driver?: MobilewrightDriver;
29
30
  url?: string;
30
31
  timeout?: number;
31
32
  actionTimeout?: number;
@@ -38,10 +39,9 @@ export interface FindDeviceParams {
38
39
  platform: Platform;
39
40
  deviceId?: string;
40
41
  deviceName?: RegExp;
41
- driverConfig?: DriverConfig;
42
+ driver?: MobilewrightDriver;
42
43
  url?: string;
43
44
  }
44
- export declare function createDriver(driverConfig?: DriverConfig, url?: string): MobilewrightDriver;
45
45
  export declare function connectDevice(params: ConnectDeviceParams): Promise<Device>;
46
46
  export declare function installAndLaunchApps(device: Device, opts: LaunchOptions): Promise<void>;
47
47
  export declare function findDevice(params: FindDeviceParams): Promise<DeviceInfo>;
@@ -1 +1 @@
1
- {"version":3,"file":"launchers.d.ts","sourceRoot":"","sources":["../src/launchers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACnH,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAK5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAChC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,IAAI,GAAG,KAAK,CAAC;CAC3B;AAED,UAAU,gBAAgB;IACxB,MAAM,CAAC,IAAI,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9C,OAAO,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,QAAQ,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,QAAQ,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,YAAY,CAAC,YAAY,CAAC,EAAE,YAAY,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,kBAAkB,CAQ1F;AAED,wBAAsB,aAAa,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,CA0BhF;AAED,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ7F;AAED,wBAAsB,UAAU,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,UAAU,CAAC,CAe9E;AAmDD,4BAA4B;AAC5B,eAAO,MAAM,GAAG,kBAAwB,CAAC;AAEzC,gCAAgC;AAChC,eAAO,MAAM,OAAO,kBAA4B,CAAC"}
1
+ {"version":3,"file":"launchers.d.ts","sourceRoot":"","sources":["../src/launchers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACnH,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAI5C,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAChC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0GAA0G;IAC1G,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mGAAmG;IACnG,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,IAAI,GAAG,KAAK,CAAC;CAC3B;AAED,UAAU,gBAAgB;IACxB,MAAM,CAAC,IAAI,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9C,OAAO,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,QAAQ,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,QAAQ,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,wBAAsB,aAAa,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,CAuBhF;AAED,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ7F;AAED,wBAAsB,UAAU,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,UAAU,CAAC,CAc9E;AAwCD,4BAA4B;AAC5B,eAAO,MAAM,GAAG,kBAAwB,CAAC;AAEzC,gCAAgC;AAChC,eAAO,MAAM,OAAO,kBAA4B,CAAC"}
package/dist/launchers.js CHANGED
@@ -1,22 +1,8 @@
1
1
  import { Device } from '@mobilewright/core';
2
2
  import { MobilecliDriver, DEFAULT_URL } from '@mobilewright/driver-mobilecli';
3
- import { MobileNextDriver } from '@mobilewright/driver-mobilenext';
4
- import { ensureMobilecliReachable } from './server.js';
5
3
  import { toArray } from './config.js';
6
- export function createDriver(driverConfig, url) {
7
- if (driverConfig?.type === 'mobilenext' || driverConfig?.type === 'mobile-use') {
8
- return new MobileNextDriver({
9
- region: driverConfig.region,
10
- apiKey: driverConfig.apiKey,
11
- });
12
- }
13
- return new MobilecliDriver({ url });
14
- }
15
4
  export async function connectDevice(params) {
16
- // URL is baked into the driver at construction time; don't override it here.
17
- // Passing mobilecli's default URL into MobileNextDriver.connect() would send
18
- // requests to the wrong server.
19
- const driver = createDriver(params.driverConfig, params.url);
5
+ const driver = params.driver ?? new MobilecliDriver({ url: params.url });
20
6
  const device = new Device(driver, {
21
7
  locatorDefaults: {
22
8
  ...(params.actionTimeout !== undefined && { timeout: params.actionTimeout }),
@@ -47,8 +33,7 @@ export async function installAndLaunchApps(device, opts) {
47
33
  }
48
34
  }
49
35
  export async function findDevice(params) {
50
- const url = params.url ?? DEFAULT_URL;
51
- const driver = createDriver(params.driverConfig, url);
36
+ const driver = params.driver ?? new MobilecliDriver({ url: params.url ?? DEFAULT_URL });
52
37
  const devices = await driver.listDevices({ platform: params.platform });
53
38
  const match = devices
54
39
  .filter((d) => d.state === 'online')
@@ -63,25 +48,20 @@ export async function findDevice(params) {
63
48
  function createLauncher(platform) {
64
49
  return {
65
50
  async launch(opts = {}) {
66
- const driverConfig = opts.driver;
67
- const url = opts.url ?? DEFAULT_URL;
68
- let serverProcess;
69
- if (!driverConfig || driverConfig.type === 'mobilecli') {
70
- const ensured = await ensureMobilecliReachable(url, { autoStart: opts.autoStart ?? true });
71
- serverProcess = ensured.serverProcess ?? undefined;
72
- }
51
+ // One driver instance shared across find + connect: mobilecli's own
52
+ // connect() handles server auto-start/reachability internally, and
53
+ // owns killing any server it started when the device disconnects.
54
+ const driver = opts.driver ?? new MobilecliDriver({ url: opts.url, autoStart: opts.autoStart });
73
55
  const found = await findDevice({
74
56
  platform,
75
57
  deviceId: opts.deviceId,
76
58
  deviceName: opts.deviceName,
77
- driverConfig,
78
- url,
59
+ driver,
79
60
  });
80
61
  const device = await connectDevice({
81
62
  platform,
82
63
  deviceId: found.id,
83
- driverConfig,
84
- url,
64
+ driver,
85
65
  timeout: opts.timeout,
86
66
  actionTimeout: opts.actionTimeout,
87
67
  expectTimeout: opts.expectTimeout,
@@ -89,10 +69,6 @@ function createLauncher(platform) {
89
69
  installTimeout: opts.installTimeout,
90
70
  deviceSettings: { animations: opts.animations },
91
71
  });
92
- if (serverProcess) {
93
- const proc = serverProcess;
94
- device.onClose(() => Promise.resolve(proc.kill()).then(() => undefined));
95
- }
96
72
  await installAndLaunchApps(device, opts);
97
73
  return device;
98
74
  },
@@ -1 +1 @@
1
- {"version":3,"file":"launchers.js","sourceRoot":"","sources":["../src/launchers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAC9E,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AA+CtC,MAAM,UAAU,YAAY,CAAC,YAA2B,EAAE,GAAY;IACpE,IAAI,YAAY,EAAE,IAAI,KAAK,YAAY,IAAI,YAAY,EAAE,IAAI,KAAK,YAAY,EAAE,CAAC;QAC/E,OAAO,IAAI,gBAAgB,CAAC;YAC1B,MAAM,EAAE,YAAY,CAAC,MAAM;YAC3B,MAAM,EAAE,YAAY,CAAC,MAAM;SAC5B,CAAC,CAAC;IACL,CAAC;IACD,OAAO,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,MAA2B;IAC7D,6EAA6E;IAC7E,6EAA6E;IAC7E,gCAAgC;IAChC,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;IAC7D,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,EAAE;QAChC,eAAe,EAAE;YACf,GAAG,CAAC,MAAM,CAAC,aAAa,KAAK,SAAS,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,aAAa,EAAE,CAAC;YAC5E,GAAG,CAAC,MAAM,CAAC,aAAa,KAAK,SAAS,IAAI,EAAE,aAAa,EAAE,MAAM,CAAC,aAAa,EAAE,CAAC;SACnF;QACD,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;QACzC,cAAc,EAAE,MAAM,CAAC,cAAc;KACtC,CAAC,CAAC;IACH,MAAM,MAAM,CAAC,OAAO,CAAC;QACnB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,OAAO,EAAE,MAAM,CAAC,OAAO;KACxB,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,MAAM,CAAC,cAAc,CAAC;IACvC,IAAI,QAAQ,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC,EAAE,CAAC;QAC7E,MAAM,MAAM,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IAC7C,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,MAAc,EAAE,IAAmB;IAC5E,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAChD,KAAK,MAAM,OAAO,IAAI,aAAa,EAAE,CAAC;QACpC,MAAM,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC;IACD,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,aAAa,KAAK,KAAK,EAAE,CAAC;QAClD,MAAM,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,MAAwB;IACvD,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,IAAI,WAAW,CAAC;IACtC,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;IACtD,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;IAExE,MAAM,KAAK,GAAG,OAAO;SAClB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,QAAQ,CAAC;SACnC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,QAAQ,CAAC;SAC3D,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;SACnE,EAAE,CAAC,CAAC,CAAC,CAAC;IAET,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,aAAa,MAAM,CAAC,QAAQ,eAAe,CAAC,CAAC;IAC/D,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,cAAc,CAAC,QAAkB;IACxC,OAAO;QACL,KAAK,CAAC,MAAM,CAAC,OAAsB,EAAE;YACnC,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC;YACjC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,WAAW,CAAC;YAEpC,IAAI,aAA+C,CAAC;YACpD,IAAI,CAAC,YAAY,IAAI,YAAY,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;gBACvD,MAAM,OAAO,GAAG,MAAM,wBAAwB,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,IAAI,EAAE,CAAC,CAAC;gBAC3F,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,SAAS,CAAC;YACrD,CAAC;YAED,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC;gBAC7B,QAAQ;gBACR,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,YAAY;gBACZ,GAAG;aACJ,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC;gBACjC,QAAQ;gBACR,QAAQ,EAAE,KAAK,CAAC,EAAE;gBAClB,YAAY;gBACZ,GAAG;gBACH,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,aAAa,EAAE,IAAI,CAAC,aAAa;gBACjC,aAAa,EAAE,IAAI,CAAC,aAAa;gBACjC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;gBACvC,cAAc,EAAE,IAAI,CAAC,cAAc;gBACnC,cAAc,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE;aAChD,CAAC,CAAC;YAEH,IAAI,aAAa,EAAE,CAAC;gBAClB,MAAM,IAAI,GAAG,aAAa,CAAC;gBAC3B,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;YAC3E,CAAC;YAED,MAAM,oBAAoB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YACzC,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,KAAK,CAAC,OAAO;YACX,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;YACrC,OAAO,MAAM,CAAC,WAAW,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC1C,CAAC;KACF,CAAC;AACJ,CAAC;AAED,4BAA4B;AAC5B,MAAM,CAAC,MAAM,GAAG,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;AAEzC,gCAAgC;AAChC,MAAM,CAAC,MAAM,OAAO,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC"}
1
+ {"version":3,"file":"launchers.js","sourceRoot":"","sources":["../src/launchers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import type { Reporter, TestCase, TestResult, FullResult, FullConfig, Suite } from '@playwright/test/reporter';
2
+ export interface ObserverReporterOptions {
3
+ /** Path to the JSON report this run writes, if any — read lazily to build `RunResultInfo.jsonReport()`. */
4
+ jsonResultsPath?: string;
5
+ /** Remove the jsonResultsPath directory after the run — set only for the private tmp dir defineConfig created. */
6
+ cleanupJsonResults?: boolean;
7
+ }
8
+ /**
9
+ * Shim Playwright reporter that forwards test-lifecycle events to the active
10
+ * driver's `TestObserver`, if any. No-ops entirely when no driver is
11
+ * registered or the driver has no observer — safe to always inject.
12
+ */
13
+ export default class ObserverReporter implements Reporter {
14
+ private readonly options;
15
+ constructor(options?: ObserverReporterOptions);
16
+ onBegin(_config: FullConfig, suite: Suite): void;
17
+ onTestEnd(test: TestCase, result: TestResult): void;
18
+ onEnd(result: FullResult): Promise<void>;
19
+ printsToStdio(): boolean;
20
+ }
21
+ //# sourceMappingURL=observer-reporter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observer-reporter.d.ts","sourceRoot":"","sources":["../src/observer-reporter.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,QAAQ,EACR,QAAQ,EAER,UAAU,EAEV,UAAU,EACV,UAAU,EACV,KAAK,EACN,MAAM,2BAA2B,CAAC;AAInC,MAAM,WAAW,uBAAuB;IACtC,2GAA2G;IAC3G,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,kHAAkH;IAClH,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AA0CD;;;;GAIG;AACH,MAAM,CAAC,OAAO,OAAO,gBAAiB,YAAW,QAAQ;IACvD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA0B;gBAEtC,OAAO,GAAE,uBAA4B;IAIjD,OAAO,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;IAahD,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI;IAY7C,KAAK,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IA6B9C,aAAa,IAAI,OAAO;CAGzB"}
@@ -0,0 +1,106 @@
1
+ import { readFile } from 'node:fs/promises';
2
+ import { rmSync } from 'node:fs';
3
+ import { dirname } from 'node:path';
4
+ import { getActiveDriver } from './driver-registry.js';
5
+ // `message` is set for thrown Errors, `value` for thrown non-Errors.
6
+ function errorText(error) {
7
+ return error.message ?? error.value ?? String(error);
8
+ }
9
+ function toStepInfo(step) {
10
+ return {
11
+ title: step.title,
12
+ category: step.category,
13
+ duration: step.duration,
14
+ ...(step.error !== undefined && { error: errorText(step.error) }),
15
+ ...(step.location !== undefined && { location: step.location }),
16
+ steps: step.steps.map(toStepInfo),
17
+ };
18
+ }
19
+ function toTestInfo(test) {
20
+ return {
21
+ id: test.id,
22
+ title: test.title,
23
+ titlePath: test.titlePath(),
24
+ ...(test.location !== undefined && { location: test.location }),
25
+ };
26
+ }
27
+ function toResultInfo(result) {
28
+ return {
29
+ status: result.status,
30
+ retry: result.retry,
31
+ duration: result.duration,
32
+ errors: result.errors.map(errorText),
33
+ steps: result.steps.map(toStepInfo),
34
+ };
35
+ }
36
+ // An observer failure must never crash or fail the test run — warn and move on.
37
+ function warnObserverFailure(hook, err) {
38
+ console.warn(`\n [mobilewright] Test observer ${hook} failed: ${err}`);
39
+ }
40
+ /**
41
+ * Shim Playwright reporter that forwards test-lifecycle events to the active
42
+ * driver's `TestObserver`, if any. No-ops entirely when no driver is
43
+ * registered or the driver has no observer — safe to always inject.
44
+ */
45
+ export default class ObserverReporter {
46
+ constructor(options = {}) {
47
+ this.options = options;
48
+ }
49
+ onBegin(_config, suite) {
50
+ const observer = getActiveDriver()?.observer;
51
+ if (!observer?.onRunStart) {
52
+ return;
53
+ }
54
+ try {
55
+ const started = observer.onRunStart({ totalTests: suite.allTests().length });
56
+ void Promise.resolve(started).catch((err) => warnObserverFailure('onRunStart', err));
57
+ }
58
+ catch (err) {
59
+ warnObserverFailure('onRunStart', err);
60
+ }
61
+ }
62
+ onTestEnd(test, result) {
63
+ const observer = getActiveDriver()?.observer;
64
+ if (!observer?.onTestEnd) {
65
+ return;
66
+ }
67
+ try {
68
+ observer.onTestEnd(toTestInfo(test), toResultInfo(result));
69
+ }
70
+ catch (err) {
71
+ warnObserverFailure('onTestEnd', err);
72
+ }
73
+ }
74
+ async onEnd(result) {
75
+ const jsonResultsPath = this.options.jsonResultsPath;
76
+ try {
77
+ const observer = getActiveDriver()?.observer;
78
+ if (!observer?.onRunEnd) {
79
+ return;
80
+ }
81
+ const runResult = {
82
+ status: result.status,
83
+ startTime: result.startTime,
84
+ duration: result.duration,
85
+ ...(jsonResultsPath !== undefined && {
86
+ jsonReport: async () => JSON.parse(await readFile(jsonResultsPath, 'utf8')),
87
+ }),
88
+ };
89
+ try {
90
+ await observer.onRunEnd(runResult);
91
+ }
92
+ catch (err) {
93
+ warnObserverFailure('onRunEnd', err);
94
+ }
95
+ }
96
+ finally {
97
+ if (this.options.cleanupJsonResults && jsonResultsPath !== undefined) {
98
+ rmSync(dirname(jsonResultsPath), { recursive: true, force: true });
99
+ }
100
+ }
101
+ }
102
+ printsToStdio() {
103
+ return false;
104
+ }
105
+ }
106
+ //# sourceMappingURL=observer-reporter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observer-reporter.js","sourceRoot":"","sources":["../src/observer-reporter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=observer-reporter.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observer-reporter.test.d.ts","sourceRoot":"","sources":["../src/observer-reporter.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,182 @@
1
+ import { test, expect } from '@playwright/test';
2
+ import { writeFileSync, mkdtempSync, rmSync, existsSync } from 'node:fs';
3
+ import { join } from 'node:path';
4
+ import { tmpdir } from 'node:os';
5
+ import ObserverReporter from './observer-reporter.js';
6
+ import { setActiveDriver } from './driver-registry.js';
7
+ function makeRecordingObserver() {
8
+ const observer = {
9
+ runStarts: [],
10
+ testEnds: [],
11
+ runEnds: [],
12
+ onRunStart(run) {
13
+ observer.runStarts.push(run);
14
+ },
15
+ onTestEnd(testInfo, resultInfo) {
16
+ observer.testEnds.push({ test: testInfo, result: resultInfo });
17
+ },
18
+ onRunEnd(resultInfo) {
19
+ observer.runEnds.push(resultInfo);
20
+ return Promise.resolve();
21
+ },
22
+ };
23
+ return observer;
24
+ }
25
+ function fakeSuite(testCount) {
26
+ return { allTests: () => new Array(testCount).fill({}) };
27
+ }
28
+ function fakeTestCase(overrides = {}) {
29
+ const titlePath = overrides.titlePath ?? ['example.spec.ts', 'suite', 'a test'];
30
+ return {
31
+ id: overrides.id ?? 'test-1',
32
+ title: overrides.title ?? 'a test',
33
+ titlePath: () => titlePath,
34
+ location: { file: 'example.spec.ts', line: 5, column: 3 },
35
+ };
36
+ }
37
+ function fakeStep(overrides = {}) {
38
+ return {
39
+ title: overrides.title ?? 'a step',
40
+ category: overrides.category ?? 'test.step',
41
+ duration: overrides.duration ?? 12,
42
+ steps: overrides.steps ?? [],
43
+ ...(overrides.error && { error: overrides.error }),
44
+ };
45
+ }
46
+ function fakeTestResult(overrides = {}) {
47
+ return {
48
+ status: overrides.status ?? 'passed',
49
+ retry: overrides.retry ?? 0,
50
+ duration: overrides.duration ?? 100,
51
+ errors: overrides.errors ?? [],
52
+ steps: overrides.steps ?? [],
53
+ };
54
+ }
55
+ test.afterEach(() => {
56
+ setActiveDriver(undefined);
57
+ });
58
+ test('onBegin forwards the scheduled test count to observer.onRunStart', () => {
59
+ const observer = makeRecordingObserver();
60
+ setActiveDriver({ observer });
61
+ const reporter = new ObserverReporter();
62
+ reporter.onBegin({}, fakeSuite(3));
63
+ expect(observer.runStarts).toEqual([{ totalTests: 3 }]);
64
+ });
65
+ test('onTestEnd maps the test case and result into the slim protocol shapes', () => {
66
+ const observer = makeRecordingObserver();
67
+ setActiveDriver({ observer });
68
+ const reporter = new ObserverReporter();
69
+ const innerStep = fakeStep({ title: 'inner', duration: 3 });
70
+ const outerStep = fakeStep({ title: 'outer', duration: 10, steps: [innerStep], error: { message: 'boom' } });
71
+ const testCase = fakeTestCase({ id: 'spec-1', title: 'does a thing', titlePath: ['file.spec.ts', 'does a thing'] });
72
+ const result = fakeTestResult({ status: 'failed', retry: 1, duration: 50, errors: [{ message: 'oops' }], steps: [outerStep] });
73
+ reporter.onTestEnd(testCase, result);
74
+ expect(observer.testEnds).toHaveLength(1);
75
+ const recorded = observer.testEnds[0];
76
+ expect(recorded.test.id).toBe('spec-1');
77
+ expect(recorded.test.title).toBe('does a thing');
78
+ expect(recorded.test.titlePath).toEqual(['file.spec.ts', 'does a thing']);
79
+ expect(recorded.result.status).toBe('failed');
80
+ expect(recorded.result.retry).toBe(1);
81
+ expect(recorded.result.errors).toEqual(['oops']);
82
+ expect(recorded.result.steps).toHaveLength(1);
83
+ expect(recorded.result.steps[0].title).toBe('outer');
84
+ expect(recorded.result.steps[0].error).toBe('boom');
85
+ expect(recorded.result.steps[0].steps).toHaveLength(1);
86
+ expect(recorded.result.steps[0].steps[0].title).toBe('inner');
87
+ });
88
+ test('onEnd awaits observer.onRunEnd and its jsonReport() reads the results file', async () => {
89
+ const dir = mkdtempSync(join(tmpdir(), 'mw-observer-reporter-test-'));
90
+ const filePath = join(dir, 'results.json');
91
+ writeFileSync(filePath, JSON.stringify({ hello: 'world' }));
92
+ const observer = makeRecordingObserver();
93
+ setActiveDriver({ observer });
94
+ const reporter = new ObserverReporter({ jsonResultsPath: filePath });
95
+ await reporter.onEnd({ status: 'passed', startTime: new Date(), duration: 500 });
96
+ expect(observer.runEnds).toHaveLength(1);
97
+ const report = await observer.runEnds[0].jsonReport?.();
98
+ expect(report).toEqual({ hello: 'world' });
99
+ rmSync(dir, { recursive: true });
100
+ });
101
+ test('onEnd removes the results directory when cleanupJsonResults is set, even without an onRunEnd hook', async () => {
102
+ const dir = mkdtempSync(join(tmpdir(), 'mw-observer-reporter-test-'));
103
+ const filePath = join(dir, 'results.json');
104
+ writeFileSync(filePath, JSON.stringify({}));
105
+ setActiveDriver({ observer: {} });
106
+ const reporter = new ObserverReporter({ jsonResultsPath: filePath, cleanupJsonResults: true });
107
+ await reporter.onEnd({ status: 'passed', startTime: new Date(), duration: 0 });
108
+ expect(existsSync(dir)).toBe(false);
109
+ });
110
+ test('onEnd leaves the results file in place when cleanupJsonResults is not set', async () => {
111
+ const dir = mkdtempSync(join(tmpdir(), 'mw-observer-reporter-test-'));
112
+ const filePath = join(dir, 'results.json');
113
+ writeFileSync(filePath, JSON.stringify({}));
114
+ const observer = makeRecordingObserver();
115
+ setActiveDriver({ observer });
116
+ const reporter = new ObserverReporter({ jsonResultsPath: filePath });
117
+ await reporter.onEnd({ status: 'passed', startTime: new Date(), duration: 0 });
118
+ expect(existsSync(filePath)).toBe(true);
119
+ rmSync(dir, { recursive: true });
120
+ });
121
+ test('onTestEnd maps non-Error thrown values using the error value fallback', () => {
122
+ const observer = makeRecordingObserver();
123
+ setActiveDriver({ observer });
124
+ const step = fakeStep({ title: 'step', error: { value: 'thrown-string' } });
125
+ const result = fakeTestResult({ errors: [{ value: 'thrown-string' }], steps: [step] });
126
+ const reporter = new ObserverReporter();
127
+ reporter.onTestEnd(fakeTestCase(), result);
128
+ expect(observer.testEnds[0].result.errors).toEqual(['thrown-string']);
129
+ expect(observer.testEnds[0].result.steps[0].error).toBe('thrown-string');
130
+ });
131
+ test('onEnd does not attach jsonReport when no jsonResultsPath was configured', async () => {
132
+ const observer = makeRecordingObserver();
133
+ setActiveDriver({ observer });
134
+ const reporter = new ObserverReporter();
135
+ await reporter.onEnd({ status: 'passed', startTime: new Date(), duration: 0 });
136
+ expect(observer.runEnds[0].jsonReport).toBeUndefined();
137
+ });
138
+ test('onEnd does not throw when the observer rejects', async () => {
139
+ const failingObserver = {
140
+ onRunEnd: () => Promise.reject(new Error('boom')),
141
+ };
142
+ setActiveDriver({ observer: failingObserver });
143
+ const reporter = new ObserverReporter();
144
+ await expect(reporter.onEnd({ status: 'passed', startTime: new Date(), duration: 0 })).resolves.not.toThrow();
145
+ });
146
+ test('onBegin and onTestEnd do not throw when the observer throws', () => {
147
+ const failingObserver = {
148
+ onRunStart: () => { throw new Error('boom'); },
149
+ onTestEnd: () => { throw new Error('boom'); },
150
+ };
151
+ setActiveDriver({ observer: failingObserver });
152
+ const reporter = new ObserverReporter();
153
+ expect(() => reporter.onBegin({}, fakeSuite(1))).not.toThrow();
154
+ expect(() => reporter.onTestEnd(fakeTestCase(), fakeTestResult())).not.toThrow();
155
+ });
156
+ test('onBegin does not leave an unhandled rejection when observer.onRunStart rejects', async () => {
157
+ const failingObserver = {
158
+ onRunStart: () => Promise.reject(new Error('boom')),
159
+ };
160
+ setActiveDriver({ observer: failingObserver });
161
+ const reporter = new ObserverReporter();
162
+ reporter.onBegin({}, fakeSuite(1));
163
+ // Give the rejection a microtask to surface — the test fails on unhandledRejection if unhandled.
164
+ await new Promise((resolve) => setImmediate(resolve));
165
+ });
166
+ test('reporter methods no-op when no driver is registered', () => {
167
+ setActiveDriver(undefined);
168
+ const reporter = new ObserverReporter();
169
+ expect(() => reporter.onBegin({}, fakeSuite(1))).not.toThrow();
170
+ expect(() => reporter.onTestEnd(fakeTestCase(), fakeTestResult())).not.toThrow();
171
+ });
172
+ test('reporter methods no-op when the registered driver has no observer', () => {
173
+ setActiveDriver({});
174
+ const reporter = new ObserverReporter();
175
+ expect(() => reporter.onBegin({}, fakeSuite(1))).not.toThrow();
176
+ expect(() => reporter.onTestEnd(fakeTestCase(), fakeTestResult())).not.toThrow();
177
+ });
178
+ test('printsToStdio returns false', () => {
179
+ const reporter = new ObserverReporter();
180
+ expect(reporter.printsToStdio()).toBe(false);
181
+ });
182
+ //# sourceMappingURL=observer-reporter.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observer-reporter.test.js","sourceRoot":"","sources":["../src/observer-reporter.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mobilewright",
3
- "version": "0.0.52",
3
+ "version": "0.0.53",
4
4
  "description": "Mobile device automation framework inspired by Playwright",
5
5
  "homepage": "https://mobilewright.dev",
6
6
  "license": "Apache-2.0",
@@ -34,11 +34,11 @@
34
34
  "templates"
35
35
  ],
36
36
  "dependencies": {
37
- "@mobilewright/core": "^0.0.52",
38
- "@mobilewright/driver-mobilecli": "^0.0.52",
39
- "@mobilewright/driver-mobilenext": "^0.0.52",
40
- "@mobilewright/inspector": "^0.0.52",
41
- "@mobilewright/protocol": "^0.0.52",
37
+ "@mobilewright/core": "^0.0.53",
38
+ "@mobilewright/driver-mobilecli": "^0.0.53",
39
+ "@mobilewright/driver-mobilenext": "^0.0.53",
40
+ "@mobilewright/inspector": "^0.0.53",
41
+ "@mobilewright/protocol": "^0.0.53",
42
42
  "commander": "^14.0.3",
43
43
  "open": "^10.2.0",
44
44
  "debug": "^4.4.3",
@@ -1,19 +0,0 @@
1
- import type { DeviceInfo, Platform } from '@mobilewright/protocol';
2
- import type { AllocationCriteria, AllocateResult, DeviceAllocator } from '../application/ports.js';
3
- interface ListDevicesOpts {
4
- platform?: Platform;
5
- }
6
- interface ListDevicesDriver {
7
- listDevices(opts?: ListDevicesOpts): Promise<DeviceInfo[]>;
8
- }
9
- export interface MobilecliAllocatorOptions {
10
- driver: ListDevicesDriver;
11
- }
12
- export declare class MobilecliAllocator implements DeviceAllocator {
13
- private readonly driver;
14
- constructor(options: MobilecliAllocatorOptions);
15
- allocate(criteria: AllocationCriteria, takenDeviceIds: ReadonlySet<string>): Promise<AllocateResult>;
16
- release(_deviceId: string): Promise<void>;
17
- }
18
- export {};
19
- //# sourceMappingURL=mobilecli-allocator.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mobilecli-allocator.d.ts","sourceRoot":"","sources":["../../../src/device-pool/adapters/mobilecli-allocator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAEnE,OAAO,KAAK,EAAE,kBAAkB,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAEnG,UAAU,eAAe;IACvB,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB;AAED,UAAU,iBAAiB;IACzB,WAAW,CAAC,IAAI,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;CAC5D;AAED,MAAM,WAAW,yBAAyB;IACxC,MAAM,EAAE,iBAAiB,CAAC;CAC3B;AAED,qBAAa,kBAAmB,YAAW,eAAe;IACxD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoB;gBAE/B,OAAO,EAAE,yBAAyB;IAIxC,QAAQ,CACZ,QAAQ,EAAE,kBAAkB,EAC5B,cAAc,EAAE,WAAW,CAAC,MAAM,CAAC,GAClC,OAAO,CAAC,cAAc,CAAC;IAwBpB,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAGhD"}
@@ -1,26 +0,0 @@
1
- import { NoDeviceAvailableError } from '../application/ports.js';
2
- export class MobilecliAllocator {
3
- constructor(options) {
4
- this.driver = options.driver;
5
- }
6
- async allocate(criteria, takenDeviceIds) {
7
- const devices = await this.driver.listDevices(criteria.platform ? { platform: criteria.platform } : undefined);
8
- const namePattern = criteria.deviceNamePattern
9
- ? new RegExp(criteria.deviceNamePattern)
10
- : undefined;
11
- const match = devices
12
- .filter((d) => d.state === 'online')
13
- .filter((d) => !takenDeviceIds.has(d.id))
14
- .filter((d) => !criteria.deviceId || d.id === criteria.deviceId)
15
- .filter((d) => !namePattern || namePattern.test(d.name))
16
- .at(0);
17
- if (!match) {
18
- throw new NoDeviceAvailableError(`no online device available matching criteria ${JSON.stringify(criteria)}`);
19
- }
20
- return { deviceId: match.id, platform: match.platform, driver: 'mobilecli', model: match.model, osVersion: match.osVersion, type: match.type };
21
- }
22
- async release(_deviceId) {
23
- // mobilecli devices are local; nothing to release.
24
- }
25
- }
26
- //# sourceMappingURL=mobilecli-allocator.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mobilecli-allocator.js","sourceRoot":"","sources":["../../../src/device-pool/adapters/mobilecli-allocator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAejE,MAAM,OAAO,kBAAkB;IAG7B,YAAY,OAAkC;QAC5C,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,QAAQ,CACZ,QAA4B,EAC5B,cAAmC;QAEnC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAC3C,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,SAAS,CAChE,CAAC;QAEF,MAAM,WAAW,GAAG,QAAQ,CAAC,iBAAiB;YAC5C,CAAC,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAC;YACxC,CAAC,CAAC,SAAS,CAAC;QAEd,MAAM,KAAK,GAAG,OAAO;aAClB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,QAAQ,CAAC;aACnC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;aACxC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,IAAI,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,QAAQ,CAAC;aAC/D,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,WAAW,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;aACvD,EAAE,CAAC,CAAC,CAAC,CAAC;QAET,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,sBAAsB,CAC9B,gDAAgD,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAC3E,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;IACjJ,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,SAAiB;QAC7B,mDAAmD;IACrD,CAAC;CACF"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=mobilecli-allocator.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mobilecli-allocator.test.d.ts","sourceRoot":"","sources":["../../../src/device-pool/adapters/mobilecli-allocator.test.ts"],"names":[],"mappings":""}