Skip to content

Commit 694a851

Browse files
authored
refactor: reduce duplicated client wire mappings (#227)
* fix: reduce duplicated client wire mappings * refactor: clarify android serial serializer default
1 parent ecf1378 commit 694a851

4 files changed

Lines changed: 290 additions & 158 deletions

File tree

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
import test from 'node:test';
2+
import assert from 'node:assert/strict';
3+
import { serializeOpenResult, serializeSessionListEntry } from '../client-shared.ts';
4+
5+
test('serializeSessionListEntry preserves legacy android session payload shape', () => {
6+
const data = serializeSessionListEntry({
7+
name: 'qa',
8+
createdAt: 123,
9+
device: {
10+
platform: 'android',
11+
target: 'mobile',
12+
id: 'emulator-5554',
13+
name: 'Pixel 9',
14+
identifiers: {
15+
session: 'qa',
16+
deviceId: 'emulator-5554',
17+
deviceName: 'Pixel 9',
18+
serial: 'emulator-5554',
19+
},
20+
android: {
21+
serial: 'emulator-5554',
22+
},
23+
},
24+
identifiers: {
25+
session: 'qa',
26+
deviceId: 'emulator-5554',
27+
deviceName: 'Pixel 9',
28+
serial: 'emulator-5554',
29+
},
30+
});
31+
32+
assert.deepEqual(data, {
33+
name: 'qa',
34+
platform: 'android',
35+
target: 'mobile',
36+
device: 'Pixel 9',
37+
id: 'emulator-5554',
38+
createdAt: 123,
39+
});
40+
});
41+
42+
test('serializeOpenResult includes android serial for open payloads', () => {
43+
const data = serializeOpenResult({
44+
session: 'qa',
45+
device: {
46+
platform: 'android',
47+
target: 'mobile',
48+
id: 'emulator-5554',
49+
name: 'Pixel 9',
50+
identifiers: {
51+
session: 'qa',
52+
deviceId: 'emulator-5554',
53+
deviceName: 'Pixel 9',
54+
serial: 'emulator-5554',
55+
},
56+
android: {
57+
serial: 'emulator-5554',
58+
},
59+
},
60+
identifiers: {
61+
session: 'qa',
62+
deviceId: 'emulator-5554',
63+
deviceName: 'Pixel 9',
64+
serial: 'emulator-5554',
65+
},
66+
});
67+
68+
assert.deepEqual(data, {
69+
session: 'qa',
70+
platform: 'android',
71+
target: 'mobile',
72+
device: 'Pixel 9',
73+
id: 'emulator-5554',
74+
serial: 'emulator-5554',
75+
});
76+
});

src/cli-client-commands.ts

Lines changed: 10 additions & 108 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,21 @@
11
import type { CliFlags } from './utils/command-schema.ts';
22
import { formatSnapshotText, printJson } from './utils/output.ts';
33
import { AppError } from './utils/errors.ts';
4+
import {
5+
serializeCloseResult,
6+
serializeDeployResult,
7+
serializeDevice,
8+
serializeEnsureSimulatorResult,
9+
serializeOpenResult,
10+
serializeRuntimeResult,
11+
serializeSessionListEntry,
12+
serializeSnapshotResult,
13+
} from './client-shared.ts';
414
import type {
515
AgentDeviceClient,
616
AgentDeviceDevice,
7-
AgentDeviceSession,
8-
AppCloseResult,
917
AppDeployResult,
10-
AppOpenResult,
11-
CaptureSnapshotResult,
12-
EnsureSimulatorResult,
1318
RuntimeResult,
14-
SessionCloseResult,
1519
} from './client.ts';
1620

1721
export async function tryRunClientBackedCommand(params: {
@@ -209,111 +213,9 @@ function buildSelectionOptions(flags: CliFlags): {
209213
};
210214
}
211215

212-
function serializeSessionListEntry(session: AgentDeviceSession): Record<string, unknown> {
213-
return {
214-
name: session.name,
215-
platform: session.device.platform,
216-
target: session.device.target,
217-
device: session.device.name,
218-
id: session.device.id,
219-
createdAt: session.createdAt,
220-
...(session.device.platform === 'ios' && {
221-
device_udid: session.device.ios?.udid ?? session.device.id,
222-
ios_simulator_device_set: session.device.ios?.simulatorSetPath ?? null,
223-
}),
224-
};
225-
}
226-
227-
function serializeDevice(device: AgentDeviceDevice): Record<string, unknown> {
228-
return {
229-
platform: device.platform,
230-
id: device.id,
231-
name: device.name,
232-
kind: device.kind,
233-
target: device.target,
234-
...(typeof device.booted === 'boolean' ? { booted: device.booted } : {}),
235-
};
236-
}
237-
238216
function formatDeviceLine(device: AgentDeviceDevice): string {
239217
const kind = device.kind ? ` ${device.kind}` : '';
240218
const target = device.target ? ` target=${device.target}` : '';
241219
const booted = typeof device.booted === 'boolean' ? ` booted=${device.booted}` : '';
242220
return `${device.name} (${device.platform}${kind}${target})${booted}`;
243221
}
244-
245-
function serializeEnsureSimulatorResult(result: EnsureSimulatorResult): Record<string, unknown> {
246-
return {
247-
udid: result.udid,
248-
device: result.device,
249-
runtime: result.runtime,
250-
ios_simulator_device_set: result.iosSimulatorDeviceSet ?? null,
251-
created: result.created,
252-
booted: result.booted,
253-
};
254-
}
255-
256-
function serializeRuntimeResult(result: RuntimeResult): Record<string, unknown> {
257-
return {
258-
session: result.session,
259-
configured: result.configured,
260-
...(result.cleared ? { cleared: true } : {}),
261-
...(result.runtime ? { runtime: result.runtime } : {}),
262-
};
263-
}
264-
265-
function serializeDeployResult(result: AppDeployResult): Record<string, unknown> {
266-
return {
267-
app: result.app,
268-
appPath: result.appPath,
269-
platform: result.platform,
270-
...(result.appId ? { appId: result.appId } : {}),
271-
...(result.bundleId ? { bundleId: result.bundleId } : {}),
272-
...(result.package ? { package: result.package } : {}),
273-
};
274-
}
275-
276-
function serializeOpenResult(result: AppOpenResult): Record<string, unknown> {
277-
return {
278-
session: result.session,
279-
...(result.appName ? { appName: result.appName } : {}),
280-
...(result.appBundleId ? { appBundleId: result.appBundleId } : {}),
281-
...(result.startup ? { startup: result.startup } : {}),
282-
...(result.runtime ? { runtime: result.runtime } : {}),
283-
...(result.device
284-
? {
285-
platform: result.device.platform,
286-
target: result.device.target,
287-
device: result.device.name,
288-
id: result.device.id,
289-
}
290-
: {}),
291-
...(result.device?.platform === 'ios'
292-
? {
293-
device_udid: result.device.ios?.udid ?? result.device.id,
294-
ios_simulator_device_set: result.device.ios?.simulatorSetPath ?? null,
295-
}
296-
: {}),
297-
...(result.device?.platform === 'android'
298-
? {
299-
serial: result.device.android?.serial ?? result.device.id,
300-
}
301-
: {}),
302-
};
303-
}
304-
305-
function serializeCloseResult(result: SessionCloseResult | AppCloseResult): Record<string, unknown> {
306-
return {
307-
session: result.session,
308-
...(result.shutdown ? { shutdown: result.shutdown } : {}),
309-
};
310-
}
311-
312-
function serializeSnapshotResult(result: CaptureSnapshotResult): Record<string, unknown> {
313-
return {
314-
nodes: result.nodes,
315-
truncated: result.truncated,
316-
...(result.appName ? { appName: result.appName } : {}),
317-
...(result.appBundleId ? { appBundleId: result.appBundleId } : {}),
318-
};
319-
}

0 commit comments

Comments
 (0)