@yume-chan/adb
Version:
TypeScript implementation of Android Debug Bridge (ADB) protocol.
43 lines (35 loc) • 1.28 kB
text/typescript
import type { Adb } from "../../../adb.js";
import { AdbNoneProtocolProcessImpl } from "./process.js";
import { AdbNoneProtocolPtyProcess } from "./pty.js";
import { AdbNoneProtocolSpawner } from "./spawner.js";
export class AdbNoneProtocolSubprocessService extends AdbNoneProtocolSpawner {
readonly #adb: Adb;
get adb(): Adb {
return this.#adb;
}
constructor(adb: Adb) {
super(async (command, signal) => {
// `shell,raw:${command}` also triggers raw mode,
// But is not supported on Android version <7.
const socket = await this.#adb.createSocket(
`exec:${command.join(" ")}`,
);
if (signal?.aborted) {
await socket.close();
throw signal.reason;
}
return new AdbNoneProtocolProcessImpl(socket, signal);
});
this.#adb = adb;
}
async pty(command?: string | string[]): Promise<AdbNoneProtocolPtyProcess> {
if (command === undefined) {
command = "";
} else if (Array.isArray(command)) {
command = command.join(" ");
}
return new AdbNoneProtocolPtyProcess(
await this.#adb.createSocket(`shell:${command}`),
);
}
}