@yume-chan/adb-scrcpy
Version:
Use `@yume-chan/adb` to bootstrap `@yume-chan/scrcpy`.
39 lines (33 loc) • 1.31 kB
text/typescript
import type { Adb } from "@yume-chan/adb";
import type { ScrcpyDisplay, ScrcpyOptions1_15 } from "@yume-chan/scrcpy";
import { AdbScrcpyClient, AdbScrcpyExitedError } from "../../client.js";
import type { AdbScrcpyOptions } from "../../types.js";
export async function getDisplays(
adb: Adb,
path: string,
options: AdbScrcpyOptions<Pick<ScrcpyOptions1_15.Init, "tunnelForward">>,
): Promise<ScrcpyDisplay[]> {
try {
// Server will exit before opening connections when an invalid display id was given
// so `start` will throw an `AdbScrcpyExitedError`
const client = await AdbScrcpyClient.start(adb, path, options);
// If the server didn't exit, manually stop it and throw an error
await client.close();
throw new Error("Unexpected server output");
} catch (e) {
if (e instanceof AdbScrcpyExitedError) {
if (e.output[0]?.startsWith("[server] ERROR:")) {
throw e;
}
const displays: ScrcpyDisplay[] = [];
for (const line of e.output) {
const display = options.parseDisplay(line);
if (display) {
displays.push(display);
}
}
return displays;
}
throw e;
}
}