53 lines
1.3 KiB
TypeScript
53 lines
1.3 KiB
TypeScript
import { spawnSync } from "node:child_process";
|
|
import { createInterface } from "node:readline/promises";
|
|
|
|
const devicesResult = spawnSync("adb", ["devices", "-l"], {
|
|
encoding: "utf8",
|
|
});
|
|
|
|
if (devicesResult.status !== 0) {
|
|
process.stderr.write(devicesResult.stderr);
|
|
process.exit(devicesResult.status ?? 1);
|
|
}
|
|
|
|
const devices = devicesResult.stdout
|
|
.split("\n")
|
|
.slice(1)
|
|
.map((line) => line.trim())
|
|
.filter((line) => /\sdevice(?:\s|$)/.test(line));
|
|
|
|
if (devices.length === 0) {
|
|
console.error("No connected ADB devices found.");
|
|
process.exit(1);
|
|
}
|
|
|
|
let selectedDevice = devices[0];
|
|
|
|
if (devices.length > 1) {
|
|
console.log("Select a device:");
|
|
devices.forEach((device, index) => console.log(`${index + 1}) ${device}`));
|
|
|
|
const readline = createInterface({
|
|
input: process.stdin,
|
|
output: process.stdout,
|
|
});
|
|
const answer = await readline.question("Device: ");
|
|
readline.close();
|
|
|
|
const selectedIndex = Number(answer) - 1;
|
|
if (!Number.isInteger(selectedIndex) || !devices[selectedIndex]) {
|
|
console.error("Invalid device selection.");
|
|
process.exit(1);
|
|
}
|
|
|
|
selectedDevice = devices[selectedIndex];
|
|
}
|
|
|
|
const serial = selectedDevice.split(/\s+/, 1)[0];
|
|
const uninstallResult = spawnSync(
|
|
"adb",
|
|
["-s", serial, "uninstall", "net.tensamin.client.dev"],
|
|
{ stdio: "inherit" },
|
|
);
|
|
|
|
process.exit(uninstallResult.status ?? 1);
|