@yume-chan/adb 1.0.0 → 2.0.0
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.
- package/CHANGELOG.md +26 -0
- package/LICENSE +1 -1
- package/esm/adb.d.ts +7 -6
- package/esm/adb.d.ts.map +1 -1
- package/esm/adb.js +22 -22
- package/esm/adb.js.map +1 -1
- package/esm/banner.js.map +1 -1
- package/esm/commands/base.d.ts +3 -2
- package/esm/commands/base.d.ts.map +1 -1
- package/esm/commands/base.js +6 -3
- package/esm/commands/base.js.map +1 -1
- package/esm/commands/framebuffer.d.ts +6 -6
- package/esm/commands/power.d.ts +2 -2
- package/esm/commands/power.d.ts.map +1 -1
- package/esm/commands/power.js +4 -4
- package/esm/commands/power.js.map +1 -1
- package/esm/commands/reverse.d.ts +3 -4
- package/esm/commands/reverse.d.ts.map +1 -1
- package/esm/commands/reverse.js +5 -10
- package/esm/commands/reverse.js.map +1 -1
- package/esm/commands/subprocess/index.d.ts +3 -2
- package/esm/commands/subprocess/index.d.ts.map +1 -1
- package/esm/commands/subprocess/index.js +3 -2
- package/esm/commands/subprocess/index.js.map +1 -1
- package/esm/commands/subprocess/none/index.d.ts +5 -0
- package/esm/commands/subprocess/none/index.d.ts.map +1 -0
- package/esm/commands/subprocess/none/index.js +5 -0
- package/esm/commands/subprocess/none/index.js.map +1 -0
- package/esm/commands/subprocess/none/process.d.ts +13 -0
- package/esm/commands/subprocess/none/process.d.ts.map +1 -0
- package/esm/commands/subprocess/none/process.js +36 -0
- package/esm/commands/subprocess/none/process.js.map +1 -0
- package/esm/commands/subprocess/none/pty.d.ts +15 -0
- package/esm/commands/subprocess/none/pty.d.ts.map +1 -0
- package/esm/commands/subprocess/none/pty.js +29 -0
- package/esm/commands/subprocess/none/pty.js.map +1 -0
- package/esm/commands/subprocess/none/service.d.ts +10 -0
- package/esm/commands/subprocess/none/service.d.ts.map +1 -0
- package/esm/commands/subprocess/none/service.js +32 -0
- package/esm/commands/subprocess/none/service.js.map +1 -0
- package/esm/commands/subprocess/none/spawner.d.ts +19 -0
- package/esm/commands/subprocess/none/spawner.d.ts.map +1 -0
- package/esm/commands/subprocess/none/spawner.js +26 -0
- package/esm/commands/subprocess/none/spawner.js.map +1 -0
- package/esm/commands/subprocess/pty.d.ts +10 -0
- package/esm/commands/subprocess/pty.d.ts.map +1 -0
- package/esm/commands/subprocess/pty.js +2 -0
- package/esm/commands/subprocess/pty.js.map +1 -0
- package/esm/commands/subprocess/service.d.ts +11 -0
- package/esm/commands/subprocess/service.d.ts.map +1 -0
- package/esm/commands/subprocess/service.js +25 -0
- package/esm/commands/subprocess/service.js.map +1 -0
- package/esm/commands/subprocess/shell/index.d.ts +6 -0
- package/esm/commands/subprocess/shell/index.d.ts.map +1 -0
- package/esm/commands/subprocess/shell/index.js +6 -0
- package/esm/commands/subprocess/shell/index.js.map +1 -0
- package/esm/commands/subprocess/shell/process.d.ts +15 -0
- package/esm/commands/subprocess/shell/process.d.ts.map +1 -0
- package/esm/commands/subprocess/{protocols/shell.js → shell/process.js} +27 -54
- package/esm/commands/subprocess/shell/process.js.map +1 -0
- package/esm/commands/subprocess/shell/pty.d.ts +15 -0
- package/esm/commands/subprocess/shell/pty.d.ts.map +1 -0
- package/esm/commands/subprocess/shell/pty.js +76 -0
- package/esm/commands/subprocess/shell/pty.js.map +1 -0
- package/esm/commands/subprocess/shell/service.d.ts +14 -0
- package/esm/commands/subprocess/shell/service.d.ts.map +1 -0
- package/esm/commands/subprocess/shell/service.js +41 -0
- package/esm/commands/subprocess/shell/service.js.map +1 -0
- package/esm/commands/subprocess/shell/shared.d.ts +19 -0
- package/esm/commands/subprocess/shell/shared.d.ts.map +1 -0
- package/esm/commands/subprocess/shell/shared.js +15 -0
- package/esm/commands/subprocess/shell/shared.js.map +1 -0
- package/esm/commands/subprocess/shell/spawner.d.ts +24 -0
- package/esm/commands/subprocess/shell/spawner.d.ts.map +1 -0
- package/esm/commands/subprocess/shell/spawner.js +38 -0
- package/esm/commands/subprocess/shell/spawner.js.map +1 -0
- package/esm/commands/subprocess/utils.d.ts +1 -0
- package/esm/commands/subprocess/utils.d.ts.map +1 -1
- package/esm/commands/subprocess/utils.js +37 -0
- package/esm/commands/subprocess/utils.js.map +1 -1
- package/esm/commands/sync/list.d.ts +12 -8
- package/esm/commands/sync/list.d.ts.map +1 -1
- package/esm/commands/sync/list.js +5 -7
- package/esm/commands/sync/list.js.map +1 -1
- package/esm/commands/sync/pull.d.ts +4 -4
- package/esm/commands/sync/pull.d.ts.map +1 -1
- package/esm/commands/sync/pull.js +2 -7
- package/esm/commands/sync/pull.js.map +1 -1
- package/esm/commands/sync/push.d.ts +4 -4
- package/esm/commands/sync/request.d.ts +1 -1
- package/esm/commands/sync/response.d.ts +5 -5
- package/esm/commands/sync/response.d.ts.map +1 -1
- package/esm/commands/sync/response.js +2 -1
- package/esm/commands/sync/response.js.map +1 -1
- package/esm/commands/sync/stat.d.ts +4 -4
- package/esm/commands/sync/sync.d.ts +2 -2
- package/esm/commands/sync/sync.js +1 -1
- package/esm/commands/sync/sync.js.map +1 -1
- package/esm/commands/tcpip.d.ts +2 -2
- package/esm/commands/tcpip.js +2 -2
- package/esm/daemon/dispatcher.d.ts.map +1 -1
- package/esm/daemon/dispatcher.js.map +1 -1
- package/esm/daemon/packet.d.ts +6 -4
- package/esm/daemon/packet.d.ts.map +1 -1
- package/esm/daemon/packet.js +3 -5
- package/esm/daemon/packet.js.map +1 -1
- package/esm/daemon/socket.d.ts +2 -2
- package/esm/daemon/socket.d.ts.map +1 -1
- package/esm/daemon/socket.js +1 -1
- package/esm/daemon/socket.js.map +1 -1
- package/esm/device-observer.d.ts +4 -4
- package/esm/device-observer.d.ts.map +1 -1
- package/esm/server/client.d.ts +15 -57
- package/esm/server/client.d.ts.map +1 -1
- package/esm/server/client.js +66 -263
- package/esm/server/client.js.map +1 -1
- package/esm/server/commands/index.d.ts +3 -0
- package/esm/server/commands/index.d.ts.map +1 -0
- package/esm/server/commands/index.js +3 -0
- package/esm/server/commands/index.js.map +1 -0
- package/esm/server/commands/m-dns.d.ts +12 -0
- package/esm/server/commands/m-dns.d.ts.map +1 -0
- package/esm/server/commands/m-dns.js +38 -0
- package/esm/server/commands/m-dns.js.map +1 -0
- package/esm/server/commands/wireless.d.ts +27 -0
- package/esm/server/commands/wireless.d.ts.map +1 -0
- package/esm/server/commands/wireless.js +82 -0
- package/esm/server/commands/wireless.js.map +1 -0
- package/esm/server/index.d.ts +2 -0
- package/esm/server/index.d.ts.map +1 -1
- package/esm/server/index.js +2 -0
- package/esm/server/index.js.map +1 -1
- package/esm/server/observer.d.ts +9 -0
- package/esm/server/observer.d.ts.map +1 -0
- package/esm/server/observer.js +128 -0
- package/esm/server/observer.js.map +1 -0
- package/esm/server/stream.d.ts +19 -0
- package/esm/server/stream.d.ts.map +1 -0
- package/esm/server/stream.js +77 -0
- package/esm/server/stream.js.map +1 -0
- package/esm/server/transport.d.ts +3 -4
- package/esm/server/transport.d.ts.map +1 -1
- package/esm/server/transport.js +18 -16
- package/esm/server/transport.js.map +1 -1
- package/esm/utils/index.d.ts +1 -0
- package/esm/utils/index.d.ts.map +1 -1
- package/esm/utils/index.js +1 -0
- package/esm/utils/index.js.map +1 -1
- package/esm/utils/ref.d.ts +18 -0
- package/esm/utils/ref.d.ts.map +1 -0
- package/esm/utils/ref.js +29 -0
- package/esm/utils/ref.js.map +1 -0
- package/package.json +10 -10
- package/src/adb.ts +29 -28
- package/src/banner.ts +4 -4
- package/src/commands/base.ts +6 -3
- package/src/commands/power.ts +6 -6
- package/src/commands/reverse.ts +9 -12
- package/src/commands/subprocess/index.ts +3 -2
- package/src/commands/subprocess/none/index.ts +4 -0
- package/src/commands/subprocess/none/process.ts +56 -0
- package/src/commands/subprocess/none/pty.ts +45 -0
- package/src/commands/subprocess/none/service.ts +42 -0
- package/src/commands/subprocess/none/spawner.ts +68 -0
- package/src/commands/subprocess/pty.ts +15 -0
- package/src/commands/subprocess/service.ts +32 -0
- package/src/commands/subprocess/shell/index.ts +5 -0
- package/src/commands/subprocess/shell/process.ts +127 -0
- package/src/commands/subprocess/shell/pty.ts +112 -0
- package/src/commands/subprocess/shell/service.ts +58 -0
- package/src/commands/subprocess/shell/shared.ts +25 -0
- package/src/commands/subprocess/shell/spawner.ts +90 -0
- package/src/commands/subprocess/utils.ts +41 -0
- package/src/commands/sync/list.ts +7 -17
- package/src/commands/sync/pull.ts +2 -8
- package/src/commands/sync/response.ts +6 -4
- package/src/commands/sync/sync.ts +1 -1
- package/src/commands/tcpip.ts +2 -2
- package/src/daemon/dispatcher.ts +7 -4
- package/src/daemon/packet.ts +4 -8
- package/src/daemon/socket.ts +6 -6
- package/src/device-observer.ts +4 -4
- package/src/server/client.ts +100 -305
- package/src/server/commands/index.ts +2 -0
- package/src/server/commands/m-dns.ts +43 -0
- package/src/server/commands/wireless.ts +94 -0
- package/src/server/index.ts +2 -0
- package/src/server/observer.ts +172 -0
- package/src/server/stream.ts +100 -0
- package/src/server/transport.ts +38 -34
- package/src/utils/index.ts +1 -0
- package/src/utils/ref.ts +37 -0
- package/tsconfig.build.tsbuildinfo +1 -1
- package/esm/commands/subprocess/command.d.ts +0 -58
- package/esm/commands/subprocess/command.d.ts.map +0 -1
- package/esm/commands/subprocess/command.js +0 -89
- package/esm/commands/subprocess/command.js.map +0 -1
- package/esm/commands/subprocess/protocols/index.d.ts +0 -4
- package/esm/commands/subprocess/protocols/index.d.ts.map +0 -1
- package/esm/commands/subprocess/protocols/index.js +0 -4
- package/esm/commands/subprocess/protocols/index.js.map +0 -1
- package/esm/commands/subprocess/protocols/none.d.ts +0 -32
- package/esm/commands/subprocess/protocols/none.d.ts.map +0 -1
- package/esm/commands/subprocess/protocols/none.js +0 -61
- package/esm/commands/subprocess/protocols/none.js.map +0 -1
- package/esm/commands/subprocess/protocols/shell.d.ts +0 -42
- package/esm/commands/subprocess/protocols/shell.d.ts.map +0 -1
- package/esm/commands/subprocess/protocols/shell.js.map +0 -1
- package/esm/commands/subprocess/protocols/types.d.ts +0 -49
- package/esm/commands/subprocess/protocols/types.d.ts.map +0 -1
- package/esm/commands/subprocess/protocols/types.js +0 -2
- package/esm/commands/subprocess/protocols/types.js.map +0 -1
- package/src/commands/subprocess/command.ts +0 -141
- package/src/commands/subprocess/protocols/index.ts +0 -3
- package/src/commands/subprocess/protocols/none.ts +0 -81
- package/src/commands/subprocess/protocols/shell.ts +0 -171
- package/src/commands/subprocess/protocols/types.ts +0 -63
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../../src/commands/subprocess/none/service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AAG3C,OAAO,EAAE,yBAAyB,EAAE,MAAM,UAAU,CAAC;AACrD,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAEtD,qBAAa,gCAAiC,SAAQ,sBAAsB;;IAExE,IAAI,GAAG,IAAI,GAAG,CAEb;gBAEW,GAAG,EAAE,GAAG;IAkBd,GAAG,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,OAAO,CAAC,yBAAyB,CAAC;CAW7E"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { AdbNoneProtocolProcessImpl } from "./process.js";
|
|
2
|
+
import { AdbNoneProtocolPtyProcess } from "./pty.js";
|
|
3
|
+
import { AdbNoneProtocolSpawner } from "./spawner.js";
|
|
4
|
+
export class AdbNoneProtocolSubprocessService extends AdbNoneProtocolSpawner {
|
|
5
|
+
#adb;
|
|
6
|
+
get adb() {
|
|
7
|
+
return this.#adb;
|
|
8
|
+
}
|
|
9
|
+
constructor(adb) {
|
|
10
|
+
super(async (command, signal) => {
|
|
11
|
+
// `shell,raw:${command}` also triggers raw mode,
|
|
12
|
+
// But is not supported on Android version <7.
|
|
13
|
+
const socket = await this.#adb.createSocket(`exec:${command.join(" ")}`);
|
|
14
|
+
if (signal?.aborted) {
|
|
15
|
+
await socket.close();
|
|
16
|
+
throw signal.reason;
|
|
17
|
+
}
|
|
18
|
+
return new AdbNoneProtocolProcessImpl(socket, signal);
|
|
19
|
+
});
|
|
20
|
+
this.#adb = adb;
|
|
21
|
+
}
|
|
22
|
+
async pty(command) {
|
|
23
|
+
if (command === undefined) {
|
|
24
|
+
command = "";
|
|
25
|
+
}
|
|
26
|
+
else if (Array.isArray(command)) {
|
|
27
|
+
command = command.join(" ");
|
|
28
|
+
}
|
|
29
|
+
return new AdbNoneProtocolPtyProcess(await this.#adb.createSocket(`shell:${command}`));
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../../../src/commands/subprocess/none/service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,EAAE,yBAAyB,EAAE,MAAM,UAAU,CAAC;AACrD,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAEtD,MAAM,OAAO,gCAAiC,SAAQ,sBAAsB;IAC/D,IAAI,CAAM;IACnB,IAAI,GAAG;QACH,OAAO,IAAI,CAAC,IAAI,CAAC;IACrB,CAAC;IAED,YAAY,GAAQ;QAChB,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;YAC5B,iDAAiD;YACjD,8CAA8C;YAC9C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,CACvC,QAAQ,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAC9B,CAAC;YAEF,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;gBAClB,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;gBACrB,MAAM,MAAM,CAAC,MAAM,CAAC;YACxB,CAAC;YAED,OAAO,IAAI,0BAA0B,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;IACpB,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,OAA2B;QACjC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YACxB,OAAO,GAAG,EAAE,CAAC;QACjB,CAAC;aAAM,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YAChC,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChC,CAAC;QAED,OAAO,IAAI,yBAAyB,CAChC,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,OAAO,EAAE,CAAC,CACnD,CAAC;IACN,CAAC;CACJ"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { MaybePromiseLike } from "@yume-chan/async";
|
|
2
|
+
import type { AbortSignal, MaybeConsumable, ReadableStream, WritableStream } from "@yume-chan/stream-extra";
|
|
3
|
+
export interface AdbNoneProtocolProcess {
|
|
4
|
+
get stdin(): WritableStream<MaybeConsumable<Uint8Array>>;
|
|
5
|
+
/**
|
|
6
|
+
* Mix of stdout and stderr
|
|
7
|
+
*/
|
|
8
|
+
get output(): ReadableStream<Uint8Array>;
|
|
9
|
+
get exited(): Promise<void>;
|
|
10
|
+
kill(): MaybePromiseLike<void>;
|
|
11
|
+
}
|
|
12
|
+
export declare class AdbNoneProtocolSpawner {
|
|
13
|
+
#private;
|
|
14
|
+
constructor(spawn: (command: string[], signal: AbortSignal | undefined) => Promise<AdbNoneProtocolProcess>);
|
|
15
|
+
spawn(command: string | string[], signal?: AbortSignal): Promise<AdbNoneProtocolProcess>;
|
|
16
|
+
spawnWait(command: string | string[]): Promise<Uint8Array>;
|
|
17
|
+
spawnWaitText(command: string | string[]): Promise<string>;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=spawner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spawner.d.ts","sourceRoot":"","sources":["../../../../src/commands/subprocess/none/spawner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,KAAK,EACR,WAAW,EACX,eAAe,EACf,cAAc,EACd,cAAc,EACjB,MAAM,yBAAyB,CAAC;AASjC,MAAM,WAAW,sBAAsB;IACnC,IAAI,KAAK,IAAI,cAAc,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC;IAEzD;;OAEG;IACH,IAAI,MAAM,IAAI,cAAc,CAAC,UAAU,CAAC,CAAC;IAEzC,IAAI,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5B,IAAI,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC;CAClC;AAED,qBAAa,sBAAsB;;gBAO3B,KAAK,EAAE,CACH,OAAO,EAAE,MAAM,EAAE,EACjB,MAAM,EAAE,WAAW,GAAG,SAAS,KAC9B,OAAO,CAAC,sBAAsB,CAAC;IAKxC,KAAK,CACD,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,EAC1B,MAAM,CAAC,EAAE,WAAW,GACrB,OAAO,CAAC,sBAAsB,CAAC;IAU5B,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC;IAK1D,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;CAMnE"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { ConcatBufferStream, ConcatStringStream, TextDecoderStream, } from "@yume-chan/stream-extra";
|
|
2
|
+
import { splitCommand } from "../utils.js";
|
|
3
|
+
export class AdbNoneProtocolSpawner {
|
|
4
|
+
#spawn;
|
|
5
|
+
constructor(spawn) {
|
|
6
|
+
this.#spawn = spawn;
|
|
7
|
+
}
|
|
8
|
+
spawn(command, signal) {
|
|
9
|
+
signal?.throwIfAborted();
|
|
10
|
+
if (typeof command === "string") {
|
|
11
|
+
command = splitCommand(command);
|
|
12
|
+
}
|
|
13
|
+
return this.#spawn(command, signal);
|
|
14
|
+
}
|
|
15
|
+
async spawnWait(command) {
|
|
16
|
+
const process = await this.spawn(command);
|
|
17
|
+
return await process.output.pipeThrough(new ConcatBufferStream());
|
|
18
|
+
}
|
|
19
|
+
async spawnWaitText(command) {
|
|
20
|
+
const process = await this.spawn(command);
|
|
21
|
+
return await process.output
|
|
22
|
+
.pipeThrough(new TextDecoderStream())
|
|
23
|
+
.pipeThrough(new ConcatStringStream());
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=spawner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spawner.js","sourceRoot":"","sources":["../../../../src/commands/subprocess/none/spawner.ts"],"names":[],"mappings":"AAOA,OAAO,EACH,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,GACpB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAe3C,MAAM,OAAO,sBAAsB;IACtB,MAAM,CAGsB;IAErC,YACI,KAGoC;QAEpC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACxB,CAAC;IAED,KAAK,CACD,OAA0B,EAC1B,MAAoB;QAEpB,MAAM,EAAE,cAAc,EAAE,CAAC;QAEzB,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;QACpC,CAAC;QAED,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,OAA0B;QACtC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC1C,OAAO,MAAM,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,kBAAkB,EAAE,CAAC,CAAC;IACtE,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,OAA0B;QAC1C,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC1C,OAAO,MAAM,OAAO,CAAC,MAAM;aACtB,WAAW,CAAC,IAAI,iBAAiB,EAAE,CAAC;aACpC,WAAW,CAAC,IAAI,kBAAkB,EAAE,CAAC,CAAC;IAC/C,CAAC;CACJ"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { MaybePromiseLike } from "@yume-chan/async";
|
|
2
|
+
import type { MaybeConsumable, ReadableStream, WritableStream } from "@yume-chan/stream-extra";
|
|
3
|
+
export interface AdbPtyProcess<TExitCode> {
|
|
4
|
+
get input(): WritableStream<MaybeConsumable<Uint8Array>>;
|
|
5
|
+
get output(): ReadableStream<Uint8Array>;
|
|
6
|
+
get exited(): Promise<TExitCode>;
|
|
7
|
+
sigint(): Promise<void>;
|
|
8
|
+
kill(): MaybePromiseLike<void>;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=pty.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pty.d.ts","sourceRoot":"","sources":["../../../src/commands/subprocess/pty.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,KAAK,EACR,eAAe,EACf,cAAc,EACd,cAAc,EACjB,MAAM,yBAAyB,CAAC;AAEjC,MAAM,WAAW,aAAa,CAAC,SAAS;IACpC,IAAI,KAAK,IAAI,cAAc,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC;IACzD,IAAI,MAAM,IAAI,cAAc,CAAC,UAAU,CAAC,CAAC;IACzC,IAAI,MAAM,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC;IAEjC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACxB,IAAI,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC;CAClC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pty.js","sourceRoot":"","sources":["../../../src/commands/subprocess/pty.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Adb } from "../../adb.js";
|
|
2
|
+
import { AdbNoneProtocolSubprocessService } from "./none/index.js";
|
|
3
|
+
import { AdbShellProtocolSubprocessService } from "./shell/index.js";
|
|
4
|
+
export declare class AdbSubprocessService {
|
|
5
|
+
#private;
|
|
6
|
+
get adb(): Adb;
|
|
7
|
+
get noneProtocol(): AdbNoneProtocolSubprocessService;
|
|
8
|
+
get shellProtocol(): AdbShellProtocolSubprocessService | undefined;
|
|
9
|
+
constructor(adb: Adb);
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../src/commands/subprocess/service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAGxC,OAAO,EAAE,gCAAgC,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,iCAAiC,EAAE,MAAM,kBAAkB,CAAC;AAErE,qBAAa,oBAAoB;;IAE7B,IAAI,GAAG,QAEN;IAGD,IAAI,YAAY,IAAI,gCAAgC,CAEnD;IAGD,IAAI,aAAa,IAAI,iCAAiC,GAAG,SAAS,CAEjE;gBAEW,GAAG,EAAE,GAAG;CASvB"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { AdbFeature } from "../../features.js";
|
|
2
|
+
import { AdbNoneProtocolSubprocessService } from "./none/index.js";
|
|
3
|
+
import { AdbShellProtocolSubprocessService } from "./shell/index.js";
|
|
4
|
+
export class AdbSubprocessService {
|
|
5
|
+
#adb;
|
|
6
|
+
get adb() {
|
|
7
|
+
return this.#adb;
|
|
8
|
+
}
|
|
9
|
+
#noneProtocol;
|
|
10
|
+
get noneProtocol() {
|
|
11
|
+
return this.#noneProtocol;
|
|
12
|
+
}
|
|
13
|
+
#shellProtocol;
|
|
14
|
+
get shellProtocol() {
|
|
15
|
+
return this.#shellProtocol;
|
|
16
|
+
}
|
|
17
|
+
constructor(adb) {
|
|
18
|
+
this.#adb = adb;
|
|
19
|
+
this.#noneProtocol = new AdbNoneProtocolSubprocessService(adb);
|
|
20
|
+
if (adb.canUseFeature(AdbFeature.ShellV2)) {
|
|
21
|
+
this.#shellProtocol = new AdbShellProtocolSubprocessService(adb);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../../src/commands/subprocess/service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,OAAO,EAAE,gCAAgC,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,iCAAiC,EAAE,MAAM,kBAAkB,CAAC;AAErE,MAAM,OAAO,oBAAoB;IACpB,IAAI,CAAM;IACnB,IAAI,GAAG;QACH,OAAO,IAAI,CAAC,IAAI,CAAC;IACrB,CAAC;IAEQ,aAAa,CAAmC;IACzD,IAAI,YAAY;QACZ,OAAO,IAAI,CAAC,aAAa,CAAC;IAC9B,CAAC;IAEQ,cAAc,CAAqC;IAC5D,IAAI,aAAa;QACb,OAAO,IAAI,CAAC,cAAc,CAAC;IAC/B,CAAC;IAED,YAAY,GAAQ;QAChB,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;QAEhB,IAAI,CAAC,aAAa,GAAG,IAAI,gCAAgC,CAAC,GAAG,CAAC,CAAC;QAE/D,IAAI,GAAG,CAAC,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACxC,IAAI,CAAC,cAAc,GAAG,IAAI,iCAAiC,CAAC,GAAG,CAAC,CAAC;QACrE,CAAC;IACL,CAAC;CACJ"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/commands/subprocess/shell/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/commands/subprocess/shell/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { MaybePromiseLike } from "@yume-chan/async";
|
|
2
|
+
import type { AbortSignal, ReadableStream } from "@yume-chan/stream-extra";
|
|
3
|
+
import { MaybeConsumable, WritableStream } from "@yume-chan/stream-extra";
|
|
4
|
+
import type { AdbSocket } from "../../../adb.js";
|
|
5
|
+
import type { AdbShellProtocolProcess } from "./spawner.js";
|
|
6
|
+
export declare class AdbShellProtocolProcessImpl implements AdbShellProtocolProcess {
|
|
7
|
+
#private;
|
|
8
|
+
get stdin(): WritableStream<MaybeConsumable<Uint8Array<ArrayBufferLike>>>;
|
|
9
|
+
get stdout(): ReadableStream<Uint8Array<ArrayBufferLike>>;
|
|
10
|
+
get stderr(): ReadableStream<Uint8Array<ArrayBufferLike>>;
|
|
11
|
+
get exited(): Promise<number>;
|
|
12
|
+
constructor(socket: AdbSocket, signal?: AbortSignal);
|
|
13
|
+
kill(): MaybePromiseLike<void>;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=process.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process.d.ts","sourceRoot":"","sources":["../../../../src/commands/subprocess/shell/process.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEzD,OAAO,KAAK,EACR,WAAW,EAEX,cAAc,EAEjB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACH,eAAe,EAGf,cAAc,EACjB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAGjD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAE5D,qBAAa,2BAA4B,YAAW,uBAAuB;;IAKvE,IAAI,KAAK,iEAER;IAGD,IAAI,MAAM,gDAET;IAGD,IAAI,MAAM,gDAET;IAGD,IAAI,MAAM,oBAET;gBAEW,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,WAAW;IA+EnD,IAAI,IAAI,gBAAgB,CAAC,IAAI,CAAC;CAGjC"}
|
|
@@ -1,40 +1,7 @@
|
|
|
1
1
|
import { PromiseResolver } from "@yume-chan/async";
|
|
2
2
|
import { MaybeConsumable, PushReadableStream, StructDeserializeStream, WritableStream, } from "@yume-chan/stream-extra";
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
import { encodeUtf8 } from "../../../utils/index.js";
|
|
6
|
-
export const AdbShellProtocolId = {
|
|
7
|
-
Stdin: 0,
|
|
8
|
-
Stdout: 1,
|
|
9
|
-
Stderr: 2,
|
|
10
|
-
Exit: 3,
|
|
11
|
-
CloseStdin: 4,
|
|
12
|
-
WindowSizeChange: 5,
|
|
13
|
-
};
|
|
14
|
-
// This packet format is used in both directions.
|
|
15
|
-
export const AdbShellProtocolPacket = struct({
|
|
16
|
-
id: u8(),
|
|
17
|
-
data: buffer(u32),
|
|
18
|
-
}, { littleEndian: true });
|
|
19
|
-
/**
|
|
20
|
-
* Shell v2 a.k.a Shell Protocol
|
|
21
|
-
*
|
|
22
|
-
* Features:
|
|
23
|
-
* * `stderr`: Yes
|
|
24
|
-
* * `exit` exit code: Yes
|
|
25
|
-
* * `resize`: Yes
|
|
26
|
-
*/
|
|
27
|
-
export class AdbSubprocessShellProtocol {
|
|
28
|
-
static isSupported(adb) {
|
|
29
|
-
return adb.canUseFeature(AdbFeature.ShellV2);
|
|
30
|
-
}
|
|
31
|
-
static async pty(adb, command) {
|
|
32
|
-
// TODO: AdbShellSubprocessProtocol: Support setting `XTERM` environment variable
|
|
33
|
-
return new AdbSubprocessShellProtocol(await adb.createSocket(`shell,v2,pty:${command}`));
|
|
34
|
-
}
|
|
35
|
-
static async raw(adb, command) {
|
|
36
|
-
return new AdbSubprocessShellProtocol(await adb.createSocket(`shell,v2,raw:${command}`));
|
|
37
|
-
}
|
|
3
|
+
import { AdbShellProtocolId, AdbShellProtocolPacket } from "./shared.js";
|
|
4
|
+
export class AdbShellProtocolProcessImpl {
|
|
38
5
|
#socket;
|
|
39
6
|
#writer;
|
|
40
7
|
#stdin;
|
|
@@ -49,11 +16,11 @@ export class AdbSubprocessShellProtocol {
|
|
|
49
16
|
get stderr() {
|
|
50
17
|
return this.#stderr;
|
|
51
18
|
}
|
|
52
|
-
#
|
|
53
|
-
get
|
|
54
|
-
return this.#
|
|
19
|
+
#exited;
|
|
20
|
+
get exited() {
|
|
21
|
+
return this.#exited;
|
|
55
22
|
}
|
|
56
|
-
constructor(socket) {
|
|
23
|
+
constructor(socket, signal) {
|
|
57
24
|
this.#socket = socket;
|
|
58
25
|
let stdoutController;
|
|
59
26
|
let stderrController;
|
|
@@ -63,13 +30,15 @@ export class AdbSubprocessShellProtocol {
|
|
|
63
30
|
this.#stderr = new PushReadableStream((controller) => {
|
|
64
31
|
stderrController = controller;
|
|
65
32
|
});
|
|
33
|
+
const exited = new PromiseResolver();
|
|
34
|
+
this.#exited = exited.promise;
|
|
66
35
|
socket.readable
|
|
67
36
|
.pipeThrough(new StructDeserializeStream(AdbShellProtocolPacket))
|
|
68
37
|
.pipeTo(new WritableStream({
|
|
69
38
|
write: async (chunk) => {
|
|
70
39
|
switch (chunk.id) {
|
|
71
40
|
case AdbShellProtocolId.Exit:
|
|
72
|
-
|
|
41
|
+
exited.resolve(chunk.data[0]);
|
|
73
42
|
break;
|
|
74
43
|
case AdbShellProtocolId.Stdout:
|
|
75
44
|
await stdoutController.enqueue(chunk.data);
|
|
@@ -77,20 +46,33 @@ export class AdbSubprocessShellProtocol {
|
|
|
77
46
|
case AdbShellProtocolId.Stderr:
|
|
78
47
|
await stderrController.enqueue(chunk.data);
|
|
79
48
|
break;
|
|
49
|
+
default:
|
|
50
|
+
// Ignore unknown messages like Google ADB does
|
|
51
|
+
// https://cs.android.com/android/platform/superproject/main/+/main:packages/modules/adb/daemon/shell_service.cpp;l=684;drc=61197364367c9e404c7da6900658f1b16c42d0da
|
|
52
|
+
break;
|
|
80
53
|
}
|
|
81
54
|
},
|
|
82
55
|
}))
|
|
83
56
|
.then(() => {
|
|
84
57
|
stdoutController.close();
|
|
85
58
|
stderrController.close();
|
|
86
|
-
// If
|
|
87
|
-
|
|
59
|
+
// If `exited` has already settled, this will be a no-op
|
|
60
|
+
exited.reject(new Error("Socket ended without exit message"));
|
|
88
61
|
}, (e) => {
|
|
89
62
|
stdoutController.error(e);
|
|
90
63
|
stderrController.error(e);
|
|
91
|
-
// If
|
|
92
|
-
|
|
64
|
+
// If `exited` has already settled, this will be a no-op
|
|
65
|
+
exited.reject(e);
|
|
93
66
|
});
|
|
67
|
+
if (signal) {
|
|
68
|
+
// `signal` won't affect `this.stdout` and `this.stderr`
|
|
69
|
+
// So remaining data can still be read
|
|
70
|
+
// (call `controller.error` will discard all pending data)
|
|
71
|
+
signal.addEventListener("abort", () => {
|
|
72
|
+
exited.reject(signal.reason);
|
|
73
|
+
this.#socket.close();
|
|
74
|
+
});
|
|
75
|
+
}
|
|
94
76
|
this.#writer = this.#socket.writable.getWriter();
|
|
95
77
|
this.#stdin = new MaybeConsumable.WritableStream({
|
|
96
78
|
write: async (chunk) => {
|
|
@@ -101,17 +83,8 @@ export class AdbSubprocessShellProtocol {
|
|
|
101
83
|
},
|
|
102
84
|
});
|
|
103
85
|
}
|
|
104
|
-
async resize(rows, cols) {
|
|
105
|
-
await this.#writer.write(AdbShellProtocolPacket.serialize({
|
|
106
|
-
id: AdbShellProtocolId.WindowSizeChange,
|
|
107
|
-
// The "correct" format is `${rows}x${cols},${x_pixels}x${y_pixels}`
|
|
108
|
-
// However, according to https://linux.die.net/man/4/tty_ioctl
|
|
109
|
-
// `x_pixels` and `y_pixels` are unused, so always sending `0` should be fine.
|
|
110
|
-
data: encodeUtf8(`${rows}x${cols},0x0\0`),
|
|
111
|
-
}));
|
|
112
|
-
}
|
|
113
86
|
kill() {
|
|
114
87
|
return this.#socket.close();
|
|
115
88
|
}
|
|
116
89
|
}
|
|
117
|
-
//# sourceMappingURL=
|
|
90
|
+
//# sourceMappingURL=process.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process.js","sourceRoot":"","sources":["../../../../src/commands/subprocess/shell/process.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAOnD,OAAO,EACH,eAAe,EACf,kBAAkB,EAClB,uBAAuB,EACvB,cAAc,GACjB,MAAM,yBAAyB,CAAC;AAIjC,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAGzE,MAAM,OAAO,2BAA2B;IAC3B,OAAO,CAAY;IACnB,OAAO,CAA2D;IAElE,MAAM,CAA8C;IAC7D,IAAI,KAAK;QACL,OAAO,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;IAEQ,OAAO,CAA6B;IAC7C,IAAI,MAAM;QACN,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IAEQ,OAAO,CAA6B;IAC7C,IAAI,MAAM;QACN,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IAEQ,OAAO,CAAkB;IAClC,IAAI,MAAM;QACN,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IAED,YAAY,MAAiB,EAAE,MAAoB;QAC/C,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QAEtB,IAAI,gBAA2D,CAAC;QAChE,IAAI,gBAA2D,CAAC;QAChE,IAAI,CAAC,OAAO,GAAG,IAAI,kBAAkB,CAAa,CAAC,UAAU,EAAE,EAAE;YAC7D,gBAAgB,GAAG,UAAU,CAAC;QAClC,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,OAAO,GAAG,IAAI,kBAAkB,CAAa,CAAC,UAAU,EAAE,EAAE;YAC7D,gBAAgB,GAAG,UAAU,CAAC;QAClC,CAAC,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,IAAI,eAAe,EAAU,CAAC;QAC7C,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAE9B,MAAM,CAAC,QAAQ;aACV,WAAW,CAAC,IAAI,uBAAuB,CAAC,sBAAsB,CAAC,CAAC;aAChE,MAAM,CACH,IAAI,cAAc,CAAyB;YACvC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;gBACnB,QAAQ,KAAK,CAAC,EAAE,EAAE,CAAC;oBACf,KAAK,kBAAkB,CAAC,IAAI;wBACxB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAE,CAAC,CAAC;wBAC/B,MAAM;oBACV,KAAK,kBAAkB,CAAC,MAAM;wBAC1B,MAAM,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;wBAC3C,MAAM;oBACV,KAAK,kBAAkB,CAAC,MAAM;wBAC1B,MAAM,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;wBAC3C,MAAM;oBACV;wBACI,+CAA+C;wBAC/C,oKAAoK;wBACpK,MAAM;gBACd,CAAC;YACL,CAAC;SACJ,CAAC,CACL;aACA,IAAI,CACD,GAAG,EAAE;YACD,gBAAgB,CAAC,KAAK,EAAE,CAAC;YACzB,gBAAgB,CAAC,KAAK,EAAE,CAAC;YACzB,wDAAwD;YACxD,MAAM,CAAC,MAAM,CACT,IAAI,KAAK,CAAC,mCAAmC,CAAC,CACjD,CAAC;QACN,CAAC,EACD,CAAC,CAAC,EAAE,EAAE;YACF,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC1B,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC1B,wDAAwD;YACxD,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACrB,CAAC,CACJ,CAAC;QAEN,IAAI,MAAM,EAAE,CAAC;YACT,wDAAwD;YACxD,sCAAsC;YACtC,0DAA0D;YAE1D,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;gBAClC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBAC7B,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACzB,CAAC,CAAC,CAAC;QACP,CAAC;QAED,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;QACjD,IAAI,CAAC,MAAM,GAAG,IAAI,eAAe,CAAC,cAAc,CAAa;YACzD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;gBACnB,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CACpB,sBAAsB,CAAC,SAAS,CAAC;oBAC7B,EAAE,EAAE,kBAAkB,CAAC,KAAK;oBAC5B,IAAI,EAAE,KAAK;iBACd,CAAC,CACL,CAAC;YACN,CAAC;SACJ,CAAC,CAAC;IACP,CAAC;IAED,IAAI;QACA,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IAChC,CAAC;CACJ"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { ReadableStream } from "@yume-chan/stream-extra";
|
|
2
|
+
import { MaybeConsumable, WritableStream } from "@yume-chan/stream-extra";
|
|
3
|
+
import type { AdbSocket } from "../../../adb.js";
|
|
4
|
+
import type { AdbPtyProcess } from "../pty.js";
|
|
5
|
+
export declare class AdbShellProtocolPtyProcess implements AdbPtyProcess<number> {
|
|
6
|
+
#private;
|
|
7
|
+
get input(): WritableStream<MaybeConsumable<Uint8Array<ArrayBufferLike>>>;
|
|
8
|
+
get output(): ReadableStream<Uint8Array<ArrayBufferLike>>;
|
|
9
|
+
get exited(): Promise<number>;
|
|
10
|
+
constructor(socket: AdbSocket);
|
|
11
|
+
resize(rows: number, cols: number): Promise<void>;
|
|
12
|
+
sigint(): Promise<void>;
|
|
13
|
+
kill(): import("@yume-chan/async").MaybePromiseLike<void>;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=pty.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pty.d.ts","sourceRoot":"","sources":["../../../../src/commands/subprocess/shell/pty.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAER,cAAc,EAEjB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACH,eAAe,EAGf,cAAc,EACjB,MAAM,yBAAyB,CAAC;AAGjC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAI/C,qBAAa,0BAA2B,YAAW,aAAa,CAAC,MAAM,CAAC;;IAKpE,IAAI,KAAK,iEAER;IAGD,IAAI,MAAM,gDAET;IAGD,IAAI,MAAM,oBAET;gBAEW,MAAM,EAAE,SAAS;IAsDvB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;IAYvC,MAAM;IAIN,IAAI;CAGP"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { PromiseResolver } from "@yume-chan/async";
|
|
2
|
+
import { MaybeConsumable, PushReadableStream, StructDeserializeStream, WritableStream, } from "@yume-chan/stream-extra";
|
|
3
|
+
import { encodeUtf8 } from "@yume-chan/struct";
|
|
4
|
+
import { AdbShellProtocolId, AdbShellProtocolPacket } from "./shared.js";
|
|
5
|
+
export class AdbShellProtocolPtyProcess {
|
|
6
|
+
#socket;
|
|
7
|
+
#writer;
|
|
8
|
+
#input;
|
|
9
|
+
get input() {
|
|
10
|
+
return this.#input;
|
|
11
|
+
}
|
|
12
|
+
#stdout;
|
|
13
|
+
get output() {
|
|
14
|
+
return this.#stdout;
|
|
15
|
+
}
|
|
16
|
+
#exited = new PromiseResolver();
|
|
17
|
+
get exited() {
|
|
18
|
+
return this.#exited.promise;
|
|
19
|
+
}
|
|
20
|
+
constructor(socket) {
|
|
21
|
+
this.#socket = socket;
|
|
22
|
+
let stdoutController;
|
|
23
|
+
this.#stdout = new PushReadableStream((controller) => {
|
|
24
|
+
stdoutController = controller;
|
|
25
|
+
});
|
|
26
|
+
socket.readable
|
|
27
|
+
.pipeThrough(new StructDeserializeStream(AdbShellProtocolPacket))
|
|
28
|
+
.pipeTo(new WritableStream({
|
|
29
|
+
write: async (chunk) => {
|
|
30
|
+
switch (chunk.id) {
|
|
31
|
+
case AdbShellProtocolId.Exit:
|
|
32
|
+
this.#exited.resolve(chunk.data[0]);
|
|
33
|
+
break;
|
|
34
|
+
case AdbShellProtocolId.Stdout:
|
|
35
|
+
await stdoutController.enqueue(chunk.data);
|
|
36
|
+
break;
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
}))
|
|
40
|
+
.then(() => {
|
|
41
|
+
stdoutController.close();
|
|
42
|
+
// If `#exit` has already resolved, this will be a no-op
|
|
43
|
+
this.#exited.reject(new Error("Socket ended without exit message"));
|
|
44
|
+
}, (e) => {
|
|
45
|
+
stdoutController.error(e);
|
|
46
|
+
// If `#exit` has already resolved, this will be a no-op
|
|
47
|
+
this.#exited.reject(e);
|
|
48
|
+
});
|
|
49
|
+
this.#writer = this.#socket.writable.getWriter();
|
|
50
|
+
this.#input = new MaybeConsumable.WritableStream({
|
|
51
|
+
write: (chunk) => this.#writeStdin(chunk),
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
#writeStdin(chunk) {
|
|
55
|
+
return this.#writer.write(AdbShellProtocolPacket.serialize({
|
|
56
|
+
id: AdbShellProtocolId.Stdin,
|
|
57
|
+
data: chunk,
|
|
58
|
+
}));
|
|
59
|
+
}
|
|
60
|
+
async resize(rows, cols) {
|
|
61
|
+
await this.#writer.write(AdbShellProtocolPacket.serialize({
|
|
62
|
+
id: AdbShellProtocolId.WindowSizeChange,
|
|
63
|
+
// The "correct" format is `${rows}x${cols},${x_pixels}x${y_pixels}`
|
|
64
|
+
// However, according to https://linux.die.net/man/4/tty_ioctl
|
|
65
|
+
// `x_pixels` and `y_pixels` are unused, so always sending `0` should be fine.
|
|
66
|
+
data: encodeUtf8(`${rows}x${cols},0x0\0`),
|
|
67
|
+
}));
|
|
68
|
+
}
|
|
69
|
+
sigint() {
|
|
70
|
+
return this.#writeStdin(new Uint8Array([0x03]));
|
|
71
|
+
}
|
|
72
|
+
kill() {
|
|
73
|
+
return this.#socket.close();
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=pty.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pty.js","sourceRoot":"","sources":["../../../../src/commands/subprocess/shell/pty.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { Adb } from "../../../adb.js";
|
|
2
|
+
import { AdbShellProtocolPtyProcess } from "./pty.js";
|
|
3
|
+
import { AdbShellProtocolSpawner } from "./spawner.js";
|
|
4
|
+
export declare class AdbShellProtocolSubprocessService extends AdbShellProtocolSpawner {
|
|
5
|
+
#private;
|
|
6
|
+
get adb(): Adb;
|
|
7
|
+
get isSupported(): boolean;
|
|
8
|
+
constructor(adb: Adb);
|
|
9
|
+
pty(options?: {
|
|
10
|
+
command?: string | string[] | undefined;
|
|
11
|
+
terminalType?: string;
|
|
12
|
+
}): Promise<AdbShellProtocolPtyProcess>;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../../src/commands/subprocess/shell/service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AAI3C,OAAO,EAAE,0BAA0B,EAAE,MAAM,UAAU,CAAC;AACtD,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAEvD,qBAAa,iCAAkC,SAAQ,uBAAuB;;IAE1E,IAAI,GAAG,QAEN;IAED,IAAI,WAAW,YAEd;gBAEW,GAAG,EAAE,GAAG;IAgBd,GAAG,CAAC,OAAO,CAAC,EAAE;QAChB,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC;QACxC,YAAY,CAAC,EAAE,MAAM,CAAC;KACzB,GAAG,OAAO,CAAC,0BAA0B,CAAC;CAqB1C"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { AdbFeature } from "../../../features.js";
|
|
2
|
+
import { AdbShellProtocolProcessImpl } from "./process.js";
|
|
3
|
+
import { AdbShellProtocolPtyProcess } from "./pty.js";
|
|
4
|
+
import { AdbShellProtocolSpawner } from "./spawner.js";
|
|
5
|
+
export class AdbShellProtocolSubprocessService extends AdbShellProtocolSpawner {
|
|
6
|
+
#adb;
|
|
7
|
+
get adb() {
|
|
8
|
+
return this.#adb;
|
|
9
|
+
}
|
|
10
|
+
get isSupported() {
|
|
11
|
+
return this.#adb.canUseFeature(AdbFeature.ShellV2);
|
|
12
|
+
}
|
|
13
|
+
constructor(adb) {
|
|
14
|
+
super(async (command, signal) => {
|
|
15
|
+
const socket = await this.#adb.createSocket(`shell,v2,raw:${command.join(" ")}`);
|
|
16
|
+
if (signal?.aborted) {
|
|
17
|
+
await socket.close();
|
|
18
|
+
throw signal.reason;
|
|
19
|
+
}
|
|
20
|
+
return new AdbShellProtocolProcessImpl(socket, signal);
|
|
21
|
+
});
|
|
22
|
+
this.#adb = adb;
|
|
23
|
+
}
|
|
24
|
+
async pty(options) {
|
|
25
|
+
let service = "shell,v2,pty";
|
|
26
|
+
if (options?.terminalType) {
|
|
27
|
+
service += `,TERM=` + options.terminalType;
|
|
28
|
+
}
|
|
29
|
+
service += ":";
|
|
30
|
+
if (options) {
|
|
31
|
+
if (typeof options.command === "string") {
|
|
32
|
+
service += options.command;
|
|
33
|
+
}
|
|
34
|
+
else if (Array.isArray(options.command)) {
|
|
35
|
+
service += options.command.join(" ");
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return new AdbShellProtocolPtyProcess(await this.#adb.createSocket(service));
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../../../src/commands/subprocess/shell/service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD,OAAO,EAAE,2BAA2B,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,0BAA0B,EAAE,MAAM,UAAU,CAAC;AACtD,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAEvD,MAAM,OAAO,iCAAkC,SAAQ,uBAAuB;IACjE,IAAI,CAAM;IACnB,IAAI,GAAG;QACH,OAAO,IAAI,CAAC,IAAI,CAAC;IACrB,CAAC;IAED,IAAI,WAAW;QACX,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IACvD,CAAC;IAED,YAAY,GAAQ;QAChB,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;YAC5B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,CACvC,gBAAgB,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CACtC,CAAC;YAEF,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;gBAClB,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;gBACrB,MAAM,MAAM,CAAC,MAAM,CAAC;YACxB,CAAC;YAED,OAAO,IAAI,2BAA2B,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC3D,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;IACpB,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,OAGT;QACG,IAAI,OAAO,GAAG,cAAc,CAAC;QAE7B,IAAI,OAAO,EAAE,YAAY,EAAE,CAAC;YACxB,OAAO,IAAI,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC;QAC/C,CAAC;QAED,OAAO,IAAI,GAAG,CAAC;QAEf,IAAI,OAAO,EAAE,CAAC;YACV,IAAI,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;gBACtC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;YAC/B,CAAC;iBAAM,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;gBACxC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACzC,CAAC;QACL,CAAC;QAED,OAAO,IAAI,0BAA0B,CACjC,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CACxC,CAAC;IACN,CAAC;CACJ"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { StructValue } from "@yume-chan/struct";
|
|
2
|
+
export declare const AdbShellProtocolId: {
|
|
3
|
+
readonly Stdin: 0;
|
|
4
|
+
readonly Stdout: 1;
|
|
5
|
+
readonly Stderr: 2;
|
|
6
|
+
readonly Exit: 3;
|
|
7
|
+
readonly CloseStdin: 4;
|
|
8
|
+
readonly WindowSizeChange: 5;
|
|
9
|
+
};
|
|
10
|
+
export type AdbShellProtocolId = (typeof AdbShellProtocolId)[keyof typeof AdbShellProtocolId];
|
|
11
|
+
export declare const AdbShellProtocolPacket: import("@yume-chan/struct").Struct<{
|
|
12
|
+
id: import("@yume-chan/struct").Field<AdbShellProtocolId, never, never, number>;
|
|
13
|
+
data: import("@yume-chan/struct").Field<Uint8Array<ArrayBufferLike>, string, never, Uint8Array<ArrayBufferLike>>;
|
|
14
|
+
}, undefined, import("@yume-chan/struct").FieldsValue<{
|
|
15
|
+
id: import("@yume-chan/struct").Field<AdbShellProtocolId, never, never, number>;
|
|
16
|
+
data: import("@yume-chan/struct").Field<Uint8Array<ArrayBufferLike>, string, never, Uint8Array<ArrayBufferLike>>;
|
|
17
|
+
}>>;
|
|
18
|
+
export type AdbShellProtocolPacket = StructValue<typeof AdbShellProtocolPacket>;
|
|
19
|
+
//# sourceMappingURL=shared.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../../src/commands/subprocess/shell/shared.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGrD,eAAO,MAAM,kBAAkB;;;;;;;CAOrB,CAAC;AAEX,MAAM,MAAM,kBAAkB,GAC1B,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,OAAO,kBAAkB,CAAC,CAAC;AAGjE,eAAO,MAAM,sBAAsB;;;;;;GAMlC,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG,WAAW,CAAC,OAAO,sBAAsB,CAAC,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { buffer, struct, u32, u8 } from "@yume-chan/struct";
|
|
2
|
+
export const AdbShellProtocolId = {
|
|
3
|
+
Stdin: 0,
|
|
4
|
+
Stdout: 1,
|
|
5
|
+
Stderr: 2,
|
|
6
|
+
Exit: 3,
|
|
7
|
+
CloseStdin: 4,
|
|
8
|
+
WindowSizeChange: 5,
|
|
9
|
+
};
|
|
10
|
+
// This packet format is used in both directions.
|
|
11
|
+
export const AdbShellProtocolPacket = struct({
|
|
12
|
+
id: u8(),
|
|
13
|
+
data: buffer(u32),
|
|
14
|
+
}, { littleEndian: true });
|
|
15
|
+
//# sourceMappingURL=shared.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../../src/commands/subprocess/shell/shared.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,mBAAmB,CAAC;AAE5D,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAC9B,KAAK,EAAE,CAAC;IACR,MAAM,EAAE,CAAC;IACT,MAAM,EAAE,CAAC;IACT,IAAI,EAAE,CAAC;IACP,UAAU,EAAE,CAAC;IACb,gBAAgB,EAAE,CAAC;CACb,CAAC;AAKX,iDAAiD;AACjD,MAAM,CAAC,MAAM,sBAAsB,GAAG,MAAM,CACxC;IACI,EAAE,EAAE,EAAE,EAAsB;IAC5B,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC;CACpB,EACD,EAAE,YAAY,EAAE,IAAI,EAAE,CACzB,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { MaybePromiseLike } from "@yume-chan/async";
|
|
2
|
+
import type { AbortSignal, MaybeConsumable, ReadableStream, WritableStream } from "@yume-chan/stream-extra";
|
|
3
|
+
export interface AdbShellProtocolProcess {
|
|
4
|
+
get stdin(): WritableStream<MaybeConsumable<Uint8Array>>;
|
|
5
|
+
get stdout(): ReadableStream<Uint8Array>;
|
|
6
|
+
get stderr(): ReadableStream<Uint8Array>;
|
|
7
|
+
get exited(): Promise<number>;
|
|
8
|
+
kill(): MaybePromiseLike<void>;
|
|
9
|
+
}
|
|
10
|
+
export declare class AdbShellProtocolSpawner {
|
|
11
|
+
#private;
|
|
12
|
+
constructor(spawn: (command: string[], signal: AbortSignal | undefined) => Promise<AdbShellProtocolProcess>);
|
|
13
|
+
spawn(command: string | string[], signal?: AbortSignal): Promise<AdbShellProtocolProcess>;
|
|
14
|
+
spawnWait(command: string | string[]): Promise<AdbShellProtocolSpawner.WaitResult<Uint8Array>>;
|
|
15
|
+
spawnWaitText(command: string | string[]): Promise<AdbShellProtocolSpawner.WaitResult<string>>;
|
|
16
|
+
}
|
|
17
|
+
export declare namespace AdbShellProtocolSpawner {
|
|
18
|
+
interface WaitResult<T> {
|
|
19
|
+
stdout: T;
|
|
20
|
+
stderr: T;
|
|
21
|
+
exitCode: number;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=spawner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spawner.d.ts","sourceRoot":"","sources":["../../../../src/commands/subprocess/shell/spawner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,KAAK,EACR,WAAW,EACX,eAAe,EACf,cAAc,EACd,cAAc,EACjB,MAAM,yBAAyB,CAAC;AASjC,MAAM,WAAW,uBAAuB;IACpC,IAAI,KAAK,IAAI,cAAc,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC;IAEzD,IAAI,MAAM,IAAI,cAAc,CAAC,UAAU,CAAC,CAAC;IACzC,IAAI,MAAM,IAAI,cAAc,CAAC,UAAU,CAAC,CAAC;IAEzC,IAAI,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAE9B,IAAI,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC;CAClC;AAED,qBAAa,uBAAuB;;gBAO5B,KAAK,EAAE,CACH,OAAO,EAAE,MAAM,EAAE,EACjB,MAAM,EAAE,WAAW,GAAG,SAAS,KAC9B,OAAO,CAAC,uBAAuB,CAAC;IAKzC,KAAK,CACD,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,EAC1B,MAAM,CAAC,EAAE,WAAW,GACrB,OAAO,CAAC,uBAAuB,CAAC;IAU7B,SAAS,CACX,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,GAC3B,OAAO,CAAC,uBAAuB,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IAUpD,aAAa,CACf,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,GAC3B,OAAO,CAAC,uBAAuB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;CAazD;AAED,yBAAiB,uBAAuB,CAAC;IACrC,UAAiB,UAAU,CAAC,CAAC;QACzB,MAAM,EAAE,CAAC,CAAC;QACV,MAAM,EAAE,CAAC,CAAC;QACV,QAAQ,EAAE,MAAM,CAAC;KACpB;CACJ"}
|