@yume-chan/adb 0.0.12 → 0.0.13

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.
Files changed (130) hide show
  1. package/CHANGELOG.json +18 -0
  2. package/CHANGELOG.md +10 -1
  3. package/README.md +24 -17
  4. package/esm/adb.d.ts +6 -6
  5. package/esm/adb.d.ts.map +1 -1
  6. package/esm/adb.js +77 -59
  7. package/esm/adb.js.map +1 -1
  8. package/esm/auth.d.ts +6 -6
  9. package/esm/auth.d.ts.map +1 -1
  10. package/esm/auth.js +8 -6
  11. package/esm/auth.js.map +1 -1
  12. package/esm/backend.d.ts +2 -2
  13. package/esm/commands/install.d.ts.map +1 -1
  14. package/esm/commands/install.js +5 -7
  15. package/esm/commands/install.js.map +1 -1
  16. package/esm/commands/reverse.d.ts +2 -2
  17. package/esm/commands/subprocess/index.d.ts +19 -20
  18. package/esm/commands/subprocess/index.d.ts.map +1 -1
  19. package/esm/commands/subprocess/index.js +36 -31
  20. package/esm/commands/subprocess/index.js.map +1 -1
  21. package/esm/commands/subprocess/legacy.d.ts +14 -7
  22. package/esm/commands/subprocess/legacy.d.ts.map +1 -1
  23. package/esm/commands/subprocess/legacy.js +14 -5
  24. package/esm/commands/subprocess/legacy.js.map +1 -1
  25. package/esm/commands/subprocess/protocol.d.ts +3 -2
  26. package/esm/commands/subprocess/protocol.d.ts.map +1 -1
  27. package/esm/commands/subprocess/protocol.js +6 -4
  28. package/esm/commands/subprocess/protocol.js.map +1 -1
  29. package/esm/commands/subprocess/protocols/index.d.ts +4 -0
  30. package/esm/commands/subprocess/protocols/index.d.ts.map +1 -0
  31. package/esm/commands/subprocess/protocols/index.js +4 -0
  32. package/esm/commands/subprocess/protocols/index.js.map +1 -0
  33. package/esm/commands/subprocess/protocols/none.d.ts +35 -0
  34. package/esm/commands/subprocess/protocols/none.d.ts.map +1 -0
  35. package/esm/commands/subprocess/protocols/none.js +53 -0
  36. package/esm/commands/subprocess/protocols/none.js.map +1 -0
  37. package/esm/commands/subprocess/protocols/shell.d.ts +39 -0
  38. package/esm/commands/subprocess/protocols/shell.d.ts.map +1 -0
  39. package/esm/commands/subprocess/protocols/shell.js +155 -0
  40. package/esm/commands/subprocess/protocols/shell.js.map +1 -0
  41. package/esm/commands/subprocess/protocols/types.d.ts +50 -0
  42. package/esm/commands/subprocess/protocols/types.d.ts.map +1 -0
  43. package/esm/commands/subprocess/protocols/types.js +2 -0
  44. package/esm/commands/subprocess/protocols/types.js.map +1 -0
  45. package/esm/commands/subprocess/types.d.ts +9 -6
  46. package/esm/commands/subprocess/types.d.ts.map +1 -1
  47. package/esm/commands/sync/list.d.ts +25 -1
  48. package/esm/commands/sync/list.d.ts.map +1 -1
  49. package/esm/commands/sync/list.js +40 -5
  50. package/esm/commands/sync/list.js.map +1 -1
  51. package/esm/commands/sync/request.d.ts +1 -0
  52. package/esm/commands/sync/request.d.ts.map +1 -1
  53. package/esm/commands/sync/request.js +1 -0
  54. package/esm/commands/sync/request.js.map +1 -1
  55. package/esm/commands/sync/response.d.ts +2 -1
  56. package/esm/commands/sync/response.d.ts.map +1 -1
  57. package/esm/commands/sync/response.js +2 -1
  58. package/esm/commands/sync/response.js.map +1 -1
  59. package/esm/commands/sync/stat.d.ts +13 -1
  60. package/esm/commands/sync/stat.d.ts.map +1 -1
  61. package/esm/commands/sync/stat.js +20 -7
  62. package/esm/commands/sync/stat.js.map +1 -1
  63. package/esm/commands/sync/sync.d.ts +13 -35
  64. package/esm/commands/sync/sync.d.ts.map +1 -1
  65. package/esm/commands/sync/sync.js +39 -9
  66. package/esm/commands/sync/sync.js.map +1 -1
  67. package/esm/crypto.d.ts +23 -10
  68. package/esm/crypto.d.ts.map +1 -1
  69. package/esm/crypto.js +64 -46
  70. package/esm/crypto.js.map +1 -1
  71. package/esm/features.d.ts +4 -2
  72. package/esm/features.d.ts.map +1 -1
  73. package/esm/features.js +6 -2
  74. package/esm/features.js.map +1 -1
  75. package/esm/packet.d.ts +21 -2
  76. package/esm/packet.d.ts.map +1 -1
  77. package/esm/packet.js +2 -2
  78. package/esm/packet.js.map +1 -1
  79. package/esm/socket/dispatcher.d.ts +15 -11
  80. package/esm/socket/dispatcher.d.ts.map +1 -1
  81. package/esm/socket/dispatcher.js +16 -19
  82. package/esm/socket/dispatcher.js.map +1 -1
  83. package/esm/socket/socket.d.ts +19 -7
  84. package/esm/socket/socket.d.ts.map +1 -1
  85. package/esm/socket/socket.js +20 -11
  86. package/esm/socket/socket.js.map +1 -1
  87. package/esm/stream/detect.d.ts +1 -17
  88. package/esm/stream/detect.d.ts.map +1 -1
  89. package/esm/stream/detect.js +4 -5
  90. package/esm/stream/detect.js.map +1 -1
  91. package/esm/stream/detect.polyfill.d.ts.map +1 -1
  92. package/esm/stream/detect.polyfill.js +4 -1
  93. package/esm/stream/detect.polyfill.js.map +1 -1
  94. package/esm/stream/transform.d.ts +23 -23
  95. package/esm/stream/transform.d.ts.map +1 -1
  96. package/esm/stream/transform.js +74 -24
  97. package/esm/stream/transform.js.map +1 -1
  98. package/esm/utils/encoding.d.ts.map +1 -1
  99. package/esm/utils/encoding.js.map +1 -1
  100. package/esm/utils/index.d.ts +1 -1
  101. package/esm/utils/index.d.ts.map +1 -1
  102. package/esm/utils/index.js +1 -1
  103. package/esm/utils/index.js.map +1 -1
  104. package/package.json +6 -6
  105. package/src/adb.ts +93 -70
  106. package/src/auth.ts +21 -18
  107. package/src/backend.ts +2 -2
  108. package/src/commands/install.ts +7 -9
  109. package/src/commands/reverse.ts +2 -2
  110. package/src/commands/subprocess/index.ts +57 -42
  111. package/src/commands/subprocess/protocols/index.ts +3 -0
  112. package/src/commands/subprocess/{legacy.ts → protocols/none.ts} +18 -8
  113. package/src/commands/subprocess/{protocol.ts → protocols/shell.ts} +22 -17
  114. package/src/commands/subprocess/{types.ts → protocols/types.ts} +13 -9
  115. package/src/commands/sync/list.ts +51 -5
  116. package/src/commands/sync/request.ts +1 -0
  117. package/src/commands/sync/response.ts +8 -2
  118. package/src/commands/sync/stat.ts +36 -9
  119. package/src/commands/sync/sync.ts +55 -19
  120. package/src/crypto.ts +72 -56
  121. package/src/features.ts +6 -2
  122. package/src/packet.ts +17 -6
  123. package/src/socket/dispatcher.ts +43 -29
  124. package/src/socket/socket.ts +29 -22
  125. package/src/stream/detect.polyfill.ts +4 -1
  126. package/src/stream/detect.ts +4 -24
  127. package/src/stream/transform.ts +96 -40
  128. package/src/utils/index.ts +1 -1
  129. package/tsconfig.build.tsbuildinfo +1 -1
  130. package/src/utils/encoding.ts +0 -13
@@ -0,0 +1,155 @@
1
+ import { PromiseResolver } from "@yume-chan/async";
2
+ import Struct, { placeholder } from "@yume-chan/struct";
3
+ import { AdbFeatures } from "../../../features.js";
4
+ import { pipeFrom, PushReadableStream, StructDeserializeStream, StructSerializeStream, TransformStream, WritableStream } from "../../../stream/index.js";
5
+ import { encodeUtf8 } from "../../../utils/index.js";
6
+ export var AdbShellProtocolId;
7
+ (function (AdbShellProtocolId) {
8
+ AdbShellProtocolId[AdbShellProtocolId["Stdin"] = 0] = "Stdin";
9
+ AdbShellProtocolId[AdbShellProtocolId["Stdout"] = 1] = "Stdout";
10
+ AdbShellProtocolId[AdbShellProtocolId["Stderr"] = 2] = "Stderr";
11
+ AdbShellProtocolId[AdbShellProtocolId["Exit"] = 3] = "Exit";
12
+ AdbShellProtocolId[AdbShellProtocolId["CloseStdin"] = 4] = "CloseStdin";
13
+ AdbShellProtocolId[AdbShellProtocolId["WindowSizeChange"] = 5] = "WindowSizeChange";
14
+ })(AdbShellProtocolId = AdbShellProtocolId || (AdbShellProtocolId = {}));
15
+ // This packet format is used in both direction.
16
+ const AdbShellProtocolPacket = new Struct({ littleEndian: true })
17
+ .uint8('id', placeholder())
18
+ .uint32('length')
19
+ .uint8Array('data', { lengthField: 'length' });
20
+ class StdinSerializeStream extends TransformStream {
21
+ constructor() {
22
+ super({
23
+ transform(chunk, controller) {
24
+ controller.enqueue({
25
+ id: AdbShellProtocolId.Stdin,
26
+ data: chunk,
27
+ });
28
+ },
29
+ flush() {
30
+ // TODO: AdbShellSubprocessProtocol: support closing stdin
31
+ }
32
+ });
33
+ }
34
+ }
35
+ class StdoutDeserializeStream extends TransformStream {
36
+ constructor(type) {
37
+ super({
38
+ transform(chunk, controller) {
39
+ if (chunk.id === type) {
40
+ controller.enqueue(chunk.data);
41
+ }
42
+ },
43
+ });
44
+ }
45
+ }
46
+ class MultiplexStream {
47
+ _readable;
48
+ _readableController;
49
+ get readable() { return this._readable; }
50
+ _activeCount = 0;
51
+ constructor() {
52
+ this._readable = new PushReadableStream(controller => {
53
+ this._readableController = controller;
54
+ });
55
+ }
56
+ createWriteable() {
57
+ return new WritableStream({
58
+ start: () => {
59
+ this._activeCount += 1;
60
+ },
61
+ write: async (chunk) => {
62
+ await this._readableController.enqueue(chunk);
63
+ },
64
+ abort: async (e) => {
65
+ this._activeCount -= 1;
66
+ if (this._activeCount === 0) {
67
+ this._readableController.close();
68
+ }
69
+ },
70
+ close: async () => {
71
+ this._activeCount -= 1;
72
+ if (this._activeCount === 0) {
73
+ this._readableController.close();
74
+ }
75
+ },
76
+ });
77
+ }
78
+ }
79
+ /**
80
+ * Shell v2 a.k.a Shell Protocol
81
+ *
82
+ * Features:
83
+ * * `stderr`: Yes
84
+ * * `exit` exit code: Yes
85
+ * * `resize`: Yes
86
+ */
87
+ export class AdbSubprocessShellProtocol {
88
+ static isSupported(adb) {
89
+ return adb.features.includes(AdbFeatures.ShellV2);
90
+ }
91
+ static async pty(adb, command) {
92
+ // TODO: AdbShellSubprocessProtocol: Support setting `XTERM` environment variable
93
+ return new AdbSubprocessShellProtocol(await adb.createSocket(`shell,v2,pty:${command}`));
94
+ }
95
+ static async raw(adb, command) {
96
+ return new AdbSubprocessShellProtocol(await adb.createSocket(`shell,v2,raw:${command}`));
97
+ }
98
+ _socket;
99
+ _socketWriter;
100
+ _stdin;
101
+ get stdin() { return this._stdin; }
102
+ _stdout;
103
+ get stdout() { return this._stdout; }
104
+ _stderr;
105
+ get stderr() { return this._stderr; }
106
+ _exit = new PromiseResolver();
107
+ get exit() { return this._exit.promise; }
108
+ constructor(socket) {
109
+ this._socket = socket;
110
+ // Check this image to help you understand the stream graph
111
+ // cspell: disable-next-line
112
+ // https://www.plantuml.com/plantuml/png/bL91QiCm4Bpx5SAdv90lb1JISmiw5XzaQKf5PIkiLZIqzEyLSg8ks13gYtOykpFhiOw93N6UGjVDqK7rZsxKqNw0U_NTgVAy4empOy2mm4_olC0VEVEE47GUpnGjKdgXoD76q4GIEpyFhOwP_m28hW0NNzxNUig1_JdW0bA7muFIJDco1daJ_1SAX9bgvoPJPyIkSekhNYctvIGXrCH6tIsPL5fs-s6J5yc9BpWXhKtNdF2LgVYPGM_6GlMwfhWUsIt4lbScANrwlgVVUifPSVi__t44qStnwPvZwobdSmHHlL57p2vFuHS0
113
+ // TODO: AdbShellSubprocessProtocol: Optimize stream graph
114
+ const [stdout, stderr] = socket.readable
115
+ .pipeThrough(new StructDeserializeStream(AdbShellProtocolPacket))
116
+ .pipeThrough(new TransformStream({
117
+ transform: (chunk, controller) => {
118
+ if (chunk.id === AdbShellProtocolId.Exit) {
119
+ this._exit.resolve(new Uint8Array(chunk.data)[0]);
120
+ // We can let `StdoutDeserializeStream` to process `AdbShellProtocolId.Exit`,
121
+ // but since we need this `TransformStream` to capture the exit code anyway,
122
+ // terminating child streams here is killing two birds with one stone.
123
+ controller.terminate();
124
+ return;
125
+ }
126
+ controller.enqueue(chunk);
127
+ }
128
+ }))
129
+ .tee();
130
+ this._stdout = stdout
131
+ .pipeThrough(new StdoutDeserializeStream(AdbShellProtocolId.Stdout));
132
+ this._stderr = stderr
133
+ .pipeThrough(new StdoutDeserializeStream(AdbShellProtocolId.Stderr));
134
+ const multiplexer = new MultiplexStream();
135
+ multiplexer.readable
136
+ .pipeThrough(new StructSerializeStream(AdbShellProtocolPacket))
137
+ .pipeTo(socket.writable);
138
+ this._stdin = pipeFrom(multiplexer.createWriteable(), new StdinSerializeStream());
139
+ this._socketWriter = multiplexer.createWriteable().getWriter();
140
+ }
141
+ async resize(rows, cols) {
142
+ await this._socketWriter.write({
143
+ id: AdbShellProtocolId.WindowSizeChange,
144
+ data: encodeUtf8(
145
+ // The "correct" format is `${rows}x${cols},${x_pixels}x${y_pixels}`
146
+ // However, according to https://linux.die.net/man/4/tty_ioctl
147
+ // `x_pixels` and `y_pixels` are not used, so always passing `0` is fine.
148
+ `${rows}x${cols},0x0\0`),
149
+ });
150
+ }
151
+ kill() {
152
+ return this._socket.close();
153
+ }
154
+ }
155
+ //# sourceMappingURL=shell.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shell.js","sourceRoot":"","sources":["../../../../src/commands/subprocess/protocols/shell.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ import type { ValueOrPromise } from "@yume-chan/struct";
2
+ import type { Adb } from "../../../adb.js";
3
+ import type { AdbSocket } from "../../../socket/index.js";
4
+ import type { ReadableStream, WritableStream } from "../../../stream/index.js";
5
+ export interface AdbSubprocessProtocol {
6
+ /**
7
+ * A WritableStream that writes to the `stdin` pipe.
8
+ */
9
+ readonly stdin: WritableStream<Uint8Array>;
10
+ /**
11
+ * The `stdout` pipe of the process.
12
+ */
13
+ readonly stdout: ReadableStream<Uint8Array>;
14
+ /**
15
+ * The `stderr` pipe of the process.
16
+ *
17
+ * Note: Some `AdbSubprocessProtocol` doesn't separate `stdout` and `stderr`,
18
+ * All output will be sent to `stdout`.
19
+ */
20
+ readonly stderr: ReadableStream<Uint8Array>;
21
+ /**
22
+ * A `Promise` that resolves to the exit code of the process.
23
+ *
24
+ * Note: Some `AdbSubprocessProtocol` doesn't support exit code,
25
+ * They will always resolve it with `0`.
26
+ */
27
+ readonly exit: Promise<number>;
28
+ /**
29
+ * Resizes the current shell.
30
+ *
31
+ * Some `AdbSubprocessProtocol`s may not support resizing
32
+ * and will ignore calls to this method.
33
+ */
34
+ resize(rows: number, cols: number): ValueOrPromise<void>;
35
+ /**
36
+ * Kills the current process.
37
+ */
38
+ kill(): ValueOrPromise<void>;
39
+ }
40
+ export interface AdbSubprocessProtocolConstructor {
41
+ /** Returns `true` if the `adb` instance supports this shell */
42
+ isSupported(adb: Adb): ValueOrPromise<boolean>;
43
+ /** Spawns an executable in PTY (interactive) mode. */
44
+ pty(adb: Adb, command: string): ValueOrPromise<AdbSubprocessProtocol>;
45
+ /** Spawns an executable and pipe the output. */
46
+ raw(adb: Adb, command: string): ValueOrPromise<AdbSubprocessProtocol>;
47
+ /** Creates a new `AdbShell` by attaching to an exist `AdbSocket` */
48
+ new (socket: AdbSocket): AdbSubprocessProtocol;
49
+ }
50
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/commands/subprocess/protocols/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE/E,MAAM,WAAW,qBAAqB;IAClC;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC;IAE3C;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC;IAE5C;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC;IAE5C;;;;;OAKG;IACH,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAE/B;;;;;OAKG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IAEzD;;OAEG;IACH,IAAI,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,gCAAgC;IAC7C,+DAA+D;IAC/D,WAAW,CAAC,GAAG,EAAE,GAAG,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IAE/C,sDAAsD;IACtD,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,GAAG,cAAc,CAAC,qBAAqB,CAAC,CAAC;IAEtE,gDAAgD;IAChD,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,GAAG,cAAc,CAAC,qBAAqB,CAAC,CAAC;IAEtE,oEAAoE;IACpE,KAAI,MAAM,EAAE,SAAS,GAAG,qBAAqB,CAAC;CACjD"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/commands/subprocess/protocols/types.ts"],"names":[],"mappings":""}
@@ -14,21 +14,22 @@ export interface AdbSubprocessProtocol {
14
14
  /**
15
15
  * The `stderr` pipe of the process.
16
16
  *
17
- * Note: Some `AdbShell` doesn't separate `stdout` and `stderr`,
17
+ * Note: Some `AdbSubprocessProtocol` doesn't separate `stdout` and `stderr`,
18
18
  * All output will be sent to `stdout`.
19
19
  */
20
20
  readonly stderr: ReadableStream<Uint8Array>;
21
21
  /**
22
22
  * A `Promise` that resolves to the exit code of the process.
23
23
  *
24
- * Note: Some `AdbShell` doesn't support exit code,
25
- * They will always resolve with `0`.
24
+ * Note: Some `AdbSubprocessProtocol` doesn't support exit code,
25
+ * They will always resolve it with `0`.
26
26
  */
27
27
  readonly exit: Promise<number>;
28
28
  /**
29
29
  * Resizes the current shell.
30
30
  *
31
- * Some `AdbShell`s may not support resizing and will always ignore calls to this method.
31
+ * Some `AdbSubprocessProtocol`s may not support resizing
32
+ * and will ignore calls to this method.
32
33
  */
33
34
  resize(rows: number, cols: number): ValueOrPromise<void>;
34
35
  /**
@@ -39,8 +40,10 @@ export interface AdbSubprocessProtocol {
39
40
  export interface AdbSubprocessProtocolConstructor {
40
41
  /** Returns `true` if the `adb` instance supports this shell */
41
42
  isSupported(adb: Adb): ValueOrPromise<boolean>;
42
- /** Creates a new `AdbShell` using the specified `Adb` and `command` */
43
- spawn(adb: Adb, command: string): ValueOrPromise<AdbSubprocessProtocol>;
43
+ /** Spawns an executable in PTY (interactive) mode. */
44
+ pty(adb: Adb, command: string): ValueOrPromise<AdbSubprocessProtocol>;
45
+ /** Spawns an executable and pipe the output. */
46
+ raw(adb: Adb, command: string): ValueOrPromise<AdbSubprocessProtocol>;
44
47
  /** Creates a new `AdbShell` by attaching to an exist `AdbSocket` */
45
48
  new (socket: AdbSocket): AdbSubprocessProtocol;
46
49
  }
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/commands/subprocess/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5E,MAAM,WAAW,qBAAqB;IAClC;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC;IAE3C;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC;IAE5C;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC;IAE5C;;;;;OAKG;IACH,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAE/B;;;;OAIG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IAEzD;;OAEG;IACH,IAAI,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,gCAAgC;IAC7C,+DAA+D;IAC/D,WAAW,CAAC,GAAG,EAAE,GAAG,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IAE/C,uEAAuE;IACvE,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,GAAG,cAAc,CAAC,qBAAqB,CAAC,CAAC;IAExE,oEAAoE;IACpE,KAAI,MAAM,EAAE,SAAS,GAAG,qBAAqB,CAAC;CACjD"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/commands/subprocess/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5E,MAAM,WAAW,qBAAqB;IAClC;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC;IAE3C;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC;IAE5C;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC;IAE5C;;;;;OAKG;IACH,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAE/B;;;;;OAKG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IAEzD;;OAEG;IACH,IAAI,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,gCAAgC;IAC7C,+DAA+D;IAC/D,WAAW,CAAC,GAAG,EAAE,GAAG,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IAE/C,sDAAsD;IACtD,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,GAAG,cAAc,CAAC,qBAAqB,CAAC,CAAC;IAEtE,gDAAgD;IAChD,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,GAAG,cAAc,CAAC,qBAAqB,CAAC,CAAC;IAEtE,oEAAoE;IACpE,KAAI,MAAM,EAAE,SAAS,GAAG,qBAAqB,CAAC;CACjD"}
@@ -1,6 +1,10 @@
1
1
  import Struct from '@yume-chan/struct';
2
2
  import type { AdbBufferedStream, WritableStreamDefaultWriter } from '../../stream/index.js';
3
3
  import { AdbSyncResponseId } from './response.js';
4
+ import { type AdbSyncStat } from './stat.js';
5
+ export interface AdbSyncEntry extends AdbSyncStat {
6
+ name: string;
7
+ }
4
8
  export declare const AdbSyncEntryResponse: Struct<{
5
9
  mode: number;
6
10
  size: number;
@@ -13,5 +17,25 @@ export declare const AdbSyncEntryResponse: Struct<{
13
17
  id: AdbSyncResponseId.Entry;
14
18
  }, undefined>;
15
19
  export declare type AdbSyncEntryResponse = typeof AdbSyncEntryResponse['TDeserializeResult'];
16
- export declare function adbSyncOpenDir(stream: AdbBufferedStream, writer: WritableStreamDefaultWriter<Uint8Array>, path: string): AsyncGenerator<AdbSyncEntryResponse, void, void>;
20
+ export declare const AdbSyncEntry2Response: Struct<{
21
+ error: import("./stat.js").AdbSyncStatErrorCode;
22
+ dev: bigint;
23
+ ino: bigint;
24
+ mode: number;
25
+ nlink: number;
26
+ uid: number;
27
+ gid: number;
28
+ size: bigint;
29
+ atime: bigint;
30
+ mtime: bigint;
31
+ ctime: bigint;
32
+ nameLength: number;
33
+ name: string;
34
+ }, "nameLength", {
35
+ readonly type: import("./stat.js").LinuxFileType;
36
+ readonly permission: number;
37
+ id: AdbSyncResponseId.Entry2;
38
+ }, undefined>;
39
+ export declare type AdbSyncEntry2Response = typeof AdbSyncEntry2Response['TDeserializeResult'];
40
+ export declare function adbSyncOpenDir(stream: AdbBufferedStream, writer: WritableStreamDefaultWriter<Uint8Array>, path: string, v2: boolean): AsyncGenerator<AdbSyncEntry, void, void>;
17
41
  //# sourceMappingURL=list.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/sync/list.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,mBAAmB,CAAC;AACvC,OAAO,KAAK,EAAE,iBAAiB,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AAE5F,OAAO,EAA4C,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAG5F,eAAO,MAAM,oBAAoB;;;;;;;;;;aAKuB,CAAC;AAEzD,oBAAY,oBAAoB,GAAG,OAAO,oBAAoB,CAAC,oBAAoB,CAAC,CAAC;AAOrF,wBAAuB,cAAc,CACjC,MAAM,EAAE,iBAAiB,EACzB,MAAM,EAAE,2BAA2B,CAAC,UAAU,CAAC,EAC/C,IAAI,EAAE,MAAM,GACb,cAAc,CAAC,oBAAoB,EAAE,IAAI,EAAE,IAAI,CAAC,CAelD"}
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/sync/list.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,mBAAmB,CAAC;AACvC,OAAO,KAAK,EAAE,iBAAiB,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AAE5F,OAAO,EAA4C,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAC5F,OAAO,EAA6C,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;AAExF,MAAM,WAAW,YAAa,SAAQ,WAAW;IAC7C,IAAI,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,oBAAoB;;;;;;;;;;aAKuB,CAAC;AAEzD,oBAAY,oBAAoB,GAAG,OAAO,oBAAoB,CAAC,oBAAoB,CAAC,CAAC;AAErF,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;aAKuB,CAAC;AAE1D,oBAAY,qBAAqB,GAAG,OAAO,qBAAqB,CAAC,oBAAoB,CAAC,CAAC;AAYvF,wBAAuB,cAAc,CACjC,MAAM,EAAE,iBAAiB,EACzB,MAAM,EAAE,2BAA2B,CAAC,UAAU,CAAC,EAC/C,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,OAAO,GACZ,cAAc,CAAC,YAAY,EAAE,IAAI,EAAE,IAAI,CAAC,CA0C1C"}
@@ -1,22 +1,57 @@
1
1
  import Struct from '@yume-chan/struct';
2
2
  import { AdbSyncRequestId, adbSyncWriteRequest } from './request.js';
3
3
  import { AdbSyncDoneResponse, adbSyncReadResponse, AdbSyncResponseId } from './response.js';
4
- import { AdbSyncLstatResponse } from './stat.js';
4
+ import { AdbSyncLstatResponse, AdbSyncStatResponse } from './stat.js';
5
5
  export const AdbSyncEntryResponse = new Struct({ littleEndian: true })
6
6
  .fields(AdbSyncLstatResponse)
7
7
  .uint32('nameLength')
8
8
  .string('name', { lengthField: 'nameLength' })
9
9
  .extra({ id: AdbSyncResponseId.Entry });
10
- const ResponseTypes = {
10
+ export const AdbSyncEntry2Response = new Struct({ littleEndian: true })
11
+ .fields(AdbSyncStatResponse)
12
+ .uint32('nameLength')
13
+ .string('name', { lengthField: 'nameLength' })
14
+ .extra({ id: AdbSyncResponseId.Entry2 });
15
+ const LIST_V1_RESPONSE_TYPES = {
11
16
  [AdbSyncResponseId.Entry]: AdbSyncEntryResponse,
12
17
  [AdbSyncResponseId.Done]: new AdbSyncDoneResponse(AdbSyncEntryResponse.size),
13
18
  };
14
- export async function* adbSyncOpenDir(stream, writer, path) {
15
- await adbSyncWriteRequest(writer, AdbSyncRequestId.List, path);
19
+ const LIST_V2_RESPONSE_TYPES = {
20
+ [AdbSyncResponseId.Entry2]: AdbSyncEntry2Response,
21
+ [AdbSyncResponseId.Done]: new AdbSyncDoneResponse(AdbSyncEntry2Response.size),
22
+ };
23
+ export async function* adbSyncOpenDir(stream, writer, path, v2) {
24
+ let requestId;
25
+ let responseType;
26
+ if (v2) {
27
+ requestId = AdbSyncRequestId.List2;
28
+ responseType = LIST_V2_RESPONSE_TYPES;
29
+ }
30
+ else {
31
+ requestId = AdbSyncRequestId.List;
32
+ responseType = LIST_V1_RESPONSE_TYPES;
33
+ }
34
+ await adbSyncWriteRequest(writer, requestId, path);
16
35
  while (true) {
17
- const response = await adbSyncReadResponse(stream, ResponseTypes);
36
+ const response = await adbSyncReadResponse(stream, responseType);
18
37
  switch (response.id) {
19
38
  case AdbSyncResponseId.Entry:
39
+ yield {
40
+ mode: response.mode,
41
+ size: BigInt(response.size),
42
+ mtime: BigInt(response.mtime),
43
+ get type() { return response.type; },
44
+ get permission() { return response.permission; },
45
+ name: response.name,
46
+ };
47
+ break;
48
+ case AdbSyncResponseId.Entry2:
49
+ // `LST2` can return error codes for failed `lstat` calls.
50
+ // `LIST` just ignores them.
51
+ // But they only contain `name` so still pretty useless.
52
+ if (response.error !== 0) {
53
+ continue;
54
+ }
20
55
  yield response;
21
56
  break;
22
57
  case AdbSyncResponseId.Done:
@@ -1 +1 @@
1
- {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/sync/list.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,mBAAmB,CAAC;AAEvC,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAC5F,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAEjD,MAAM,CAAC,MAAM,oBAAoB,GAC7B,IAAI,MAAM,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;KAC7B,MAAM,CAAC,oBAAoB,CAAC;KAC5B,MAAM,CAAC,YAAY,CAAC;KACpB,MAAM,CAAC,MAAM,EAAE,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC;KAC7C,KAAK,CAAC,EAAE,EAAE,EAAE,iBAAiB,CAAC,KAAc,EAAE,CAAC,CAAC;AAIzD,MAAM,aAAa,GAAG;IAClB,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE,oBAAoB;IAC/C,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,IAAI,mBAAmB,CAAC,oBAAoB,CAAC,IAAI,CAAC;CAC/E,CAAC;AAEF,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,cAAc,CACjC,MAAyB,EACzB,MAA+C,EAC/C,IAAY;IAEZ,MAAM,mBAAmB,CAAC,MAAM,EAAE,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAE/D,OAAO,IAAI,EAAE;QACT,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;QAClE,QAAQ,QAAQ,CAAC,EAAE,EAAE;YACjB,KAAK,iBAAiB,CAAC,KAAK;gBACxB,MAAM,QAAQ,CAAC;gBACf,MAAM;YACV,KAAK,iBAAiB,CAAC,IAAI;gBACvB,OAAO;YACX;gBACI,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;SACjD;KACJ;AACL,CAAC"}
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/sync/list.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,mBAAmB,CAAC;AAEvC,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAC5F,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAoB,MAAM,WAAW,CAAC;AAMxF,MAAM,CAAC,MAAM,oBAAoB,GAC7B,IAAI,MAAM,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;KAC7B,MAAM,CAAC,oBAAoB,CAAC;KAC5B,MAAM,CAAC,YAAY,CAAC;KACpB,MAAM,CAAC,MAAM,EAAE,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC;KAC7C,KAAK,CAAC,EAAE,EAAE,EAAE,iBAAiB,CAAC,KAAc,EAAE,CAAC,CAAC;AAIzD,MAAM,CAAC,MAAM,qBAAqB,GAC9B,IAAI,MAAM,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;KAC7B,MAAM,CAAC,mBAAmB,CAAC;KAC3B,MAAM,CAAC,YAAY,CAAC;KACpB,MAAM,CAAC,MAAM,EAAE,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC;KAC7C,KAAK,CAAC,EAAE,EAAE,EAAE,iBAAiB,CAAC,MAAe,EAAE,CAAC,CAAC;AAI1D,MAAM,sBAAsB,GAAG;IAC3B,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE,oBAAoB;IAC/C,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,IAAI,mBAAmB,CAAC,oBAAoB,CAAC,IAAI,CAAC;CAC/E,CAAC;AAEF,MAAM,sBAAsB,GAAG;IAC3B,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,qBAAqB;IACjD,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,IAAI,mBAAmB,CAAC,qBAAqB,CAAC,IAAI,CAAC;CAChF,CAAC;AAEF,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,cAAc,CACjC,MAAyB,EACzB,MAA+C,EAC/C,IAAY,EACZ,EAAW;IAEX,IAAI,SAAyD,CAAC;IAC9D,IAAI,YAA2E,CAAC;IAEhF,IAAI,EAAE,EAAE;QACJ,SAAS,GAAG,gBAAgB,CAAC,KAAK,CAAC;QACnC,YAAY,GAAG,sBAAsB,CAAC;KACzC;SAAM;QACH,SAAS,GAAG,gBAAgB,CAAC,IAAI,CAAC;QAClC,YAAY,GAAG,sBAAsB,CAAC;KACzC;IAED,MAAM,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;IAEnD,OAAO,IAAI,EAAE;QACT,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;QACjE,QAAQ,QAAQ,CAAC,EAAE,EAAE;YACjB,KAAK,iBAAiB,CAAC,KAAK;gBACxB,MAAM;oBACF,IAAI,EAAE,QAAQ,CAAC,IAAI;oBACnB,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;oBAC3B,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;oBAC7B,IAAI,IAAI,KAAK,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;oBACpC,IAAI,UAAU,KAAK,OAAO,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;oBAChD,IAAI,EAAE,QAAQ,CAAC,IAAI;iBACtB,CAAC;gBACF,MAAM;YACV,KAAK,iBAAiB,CAAC,MAAM;gBACzB,0DAA0D;gBAC1D,4BAA4B;gBAC5B,wDAAwD;gBACxD,IAAI,QAAQ,CAAC,KAAK,KAAK,CAAC,EAAE;oBACtB,SAAS;iBACZ;gBACD,MAAM,QAAQ,CAAC;gBACf,MAAM;YACV,KAAK,iBAAiB,CAAC,IAAI;gBACvB,OAAO;YACX;gBACI,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;SACjD;KACJ;AACL,CAAC"}
@@ -2,6 +2,7 @@ import Struct from '@yume-chan/struct';
2
2
  import type { WritableStreamDefaultWriter } from "../../stream/index.js";
3
3
  export declare enum AdbSyncRequestId {
4
4
  List = "LIST",
5
+ List2 = "LIS2",
5
6
  Send = "SEND",
6
7
  Lstat = "STAT",
7
8
  Stat = "STA2",
@@ -1 +1 @@
1
- {"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../../src/commands/sync/request.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,mBAAmB,CAAC;AACvC,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AAGzE,oBAAY,gBAAgB;IACxB,IAAI,SAAS;IACb,IAAI,SAAS;IACb,KAAK,SAAS;IACd,IAAI,SAAS;IACb,MAAM,SAAS;IACf,IAAI,SAAS;IACb,IAAI,SAAS;IACb,OAAO,SAAS;CACnB;AAED,eAAO,MAAM,oBAAoB;;;wBAGX,CAAC;AAEvB,eAAO,MAAM,kBAAkB;;;;wBAGoB,CAAC;AAEpD,wBAAsB,mBAAmB,CACrC,MAAM,EAAE,2BAA2B,CAAC,UAAU,CAAC,EAC/C,EAAE,EAAE,gBAAgB,GAAG,MAAM,EAC7B,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,UAAU,GACpC,OAAO,CAAC,IAAI,CAAC,CAmBf"}
1
+ {"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../../src/commands/sync/request.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,mBAAmB,CAAC;AACvC,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AAGzE,oBAAY,gBAAgB;IACxB,IAAI,SAAS;IACb,KAAK,SAAS;IACd,IAAI,SAAS;IACb,KAAK,SAAS;IACd,IAAI,SAAS;IACb,MAAM,SAAS;IACf,IAAI,SAAS;IACb,IAAI,SAAS;IACb,OAAO,SAAS;CACnB;AAED,eAAO,MAAM,oBAAoB;;;wBAGX,CAAC;AAEvB,eAAO,MAAM,kBAAkB;;;;wBAGoB,CAAC;AAEpD,wBAAsB,mBAAmB,CACrC,MAAM,EAAE,2BAA2B,CAAC,UAAU,CAAC,EAC/C,EAAE,EAAE,gBAAgB,GAAG,MAAM,EAC7B,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,UAAU,GACpC,OAAO,CAAC,IAAI,CAAC,CAmBf"}
@@ -3,6 +3,7 @@ import { encodeUtf8 } from "../../utils/index.js";
3
3
  export var AdbSyncRequestId;
4
4
  (function (AdbSyncRequestId) {
5
5
  AdbSyncRequestId["List"] = "LIST";
6
+ AdbSyncRequestId["List2"] = "LIS2";
6
7
  AdbSyncRequestId["Send"] = "SEND";
7
8
  AdbSyncRequestId["Lstat"] = "STAT";
8
9
  AdbSyncRequestId["Stat"] = "STA2";
@@ -1 +1 @@
1
- {"version":3,"file":"request.js","sourceRoot":"","sources":["../../../src/commands/sync/request.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,mBAAmB,CAAC;AAEvC,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD,MAAM,CAAN,IAAY,gBASX;AATD,WAAY,gBAAgB;IACxB,iCAAa,CAAA;IACb,iCAAa,CAAA;IACb,kCAAc,CAAA;IACd,iCAAa,CAAA;IACb,mCAAe,CAAA;IACf,iCAAa,CAAA;IACb,iCAAa,CAAA;IACb,oCAAgB,CAAA;AACpB,CAAC,EATW,gBAAgB,GAAhB,gBAAgB,KAAhB,gBAAgB,QAS3B;AAED,MAAM,CAAC,MAAM,oBAAoB,GAC7B,IAAI,MAAM,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;KAC7B,MAAM,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;KAC3B,MAAM,CAAC,KAAK,CAAC,CAAC;AAEvB,MAAM,CAAC,MAAM,kBAAkB,GAC3B,IAAI,MAAM,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;KAC7B,MAAM,CAAC,oBAAoB,CAAC;KAC5B,UAAU,CAAC,MAAM,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;AAEpD,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACrC,MAA+C,EAC/C,EAA6B,EAC7B,KAAmC;IAEnC,IAAI,MAAkB,CAAC;IACvB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAC3B,MAAM,GAAG,oBAAoB,CAAC,SAAS,CAAC;YACpC,EAAE;YACF,GAAG,EAAE,KAAK;SACb,CAAC,CAAC;KACN;SAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAClC,MAAM,GAAG,kBAAkB,CAAC,SAAS,CAAC;YAClC,EAAE;YACF,IAAI,EAAE,UAAU,CAAC,KAAK,CAAC;SAC1B,CAAC,CAAC;KACN;SAAM;QACH,MAAM,GAAG,kBAAkB,CAAC,SAAS,CAAC;YAClC,EAAE;YACF,IAAI,EAAE,KAAK;SACd,CAAC,CAAC;KACN;IACD,MAAM,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAC/B,CAAC"}
1
+ {"version":3,"file":"request.js","sourceRoot":"","sources":["../../../src/commands/sync/request.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,mBAAmB,CAAC;AAEvC,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD,MAAM,CAAN,IAAY,gBAUX;AAVD,WAAY,gBAAgB;IACxB,iCAAa,CAAA;IACb,kCAAc,CAAA;IACd,iCAAa,CAAA;IACb,kCAAc,CAAA;IACd,iCAAa,CAAA;IACb,mCAAe,CAAA;IACf,iCAAa,CAAA;IACb,iCAAa,CAAA;IACb,oCAAgB,CAAA;AACpB,CAAC,EAVW,gBAAgB,GAAhB,gBAAgB,KAAhB,gBAAgB,QAU3B;AAED,MAAM,CAAC,MAAM,oBAAoB,GAC7B,IAAI,MAAM,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;KAC7B,MAAM,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;KAC3B,MAAM,CAAC,KAAK,CAAC,CAAC;AAEvB,MAAM,CAAC,MAAM,kBAAkB,GAC3B,IAAI,MAAM,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;KAC7B,MAAM,CAAC,oBAAoB,CAAC;KAC5B,UAAU,CAAC,MAAM,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;AAEpD,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACrC,MAA+C,EAC/C,EAA6B,EAC7B,KAAmC;IAEnC,IAAI,MAAkB,CAAC;IACvB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAC3B,MAAM,GAAG,oBAAoB,CAAC,SAAS,CAAC;YACpC,EAAE;YACF,GAAG,EAAE,KAAK;SACb,CAAC,CAAC;KACN;SAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAClC,MAAM,GAAG,kBAAkB,CAAC,SAAS,CAAC;YAClC,EAAE;YACF,IAAI,EAAE,UAAU,CAAC,KAAK,CAAC;SAC1B,CAAC,CAAC;KACN;SAAM;QACH,MAAM,GAAG,kBAAkB,CAAC,SAAS,CAAC;YAClC,EAAE;YACF,IAAI,EAAE,KAAK;SACd,CAAC,CAAC;KACN;IACD,MAAM,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAC/B,CAAC"}
@@ -2,6 +2,7 @@ import Struct, { type StructAsyncDeserializeStream, type StructLike, type Struct
2
2
  import type { AdbBufferedStream } from '../../stream/index.js';
3
3
  export declare enum AdbSyncResponseId {
4
4
  Entry = "DENT",
5
+ Entry2 = "DNT2",
5
6
  Lstat = "STAT",
6
7
  Stat = "STA2",
7
8
  Lstat2 = "LST2",
@@ -20,5 +21,5 @@ export declare const AdbSyncFailResponse: Struct<{
20
21
  messageLength: number;
21
22
  message: string;
22
23
  }, "messageLength", {}, never>;
23
- export declare function adbSyncReadResponse<T extends Record<string, StructLike<any>>>(stream: AdbBufferedStream, types: T): Promise<StructValueType<T[keyof T]>>;
24
+ export declare function adbSyncReadResponse<T extends Record<string, StructLike<any>>>(stream: AdbBufferedStream, types: T): Promise<StructValueType<T extends unknown ? T[keyof T] : never>>;
24
25
  //# sourceMappingURL=response.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"response.d.ts","sourceRoot":"","sources":["../../../src/commands/sync/response.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,EAAE,EAAE,KAAK,4BAA4B,EAAE,KAAK,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACrH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAG/D,oBAAY,iBAAiB;IACzB,KAAK,SAAS;IACd,KAAK,SAAS;IACd,IAAI,SAAS;IACb,MAAM,SAAS;IACf,IAAI,SAAS;IACb,IAAI,SAAS;IACb,EAAE,SAAS;IACX,IAAI,SAAS;CAChB;AAMD,qBAAa,mBAAoB,YAAW,UAAU,CAAC,mBAAmB,CAAC;IACvE,OAAO,CAAC,MAAM,CAAS;IAEvB,SAAgB,EAAE,0BAA0B;gBAEzB,MAAM,EAAE,MAAM;IAIpB,WAAW,CAAC,MAAM,EAAE,4BAA4B,GAAG,OAAO,CAAC,IAAI,CAAC;CAIhF;AAED,eAAO,MAAM,mBAAmB;;;8BAMtB,CAAC;AAEX,wBAAsB,mBAAmB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,EAC/E,MAAM,EAAE,iBAAiB,EACzB,KAAK,EAAE,CAAC,GACT,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAYtC"}
1
+ {"version":3,"file":"response.d.ts","sourceRoot":"","sources":["../../../src/commands/sync/response.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,EAAE,EAAE,KAAK,4BAA4B,EAAE,KAAK,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACrH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAG/D,oBAAY,iBAAiB;IACzB,KAAK,SAAS;IACd,MAAM,SAAS;IACf,KAAK,SAAS;IACd,IAAI,SAAS;IACb,MAAM,SAAS;IACf,IAAI,SAAS;IACb,IAAI,SAAS;IACb,EAAE,SAAS;IACX,IAAI,SAAS;CAChB;AAMD,qBAAa,mBAAoB,YAAW,UAAU,CAAC,mBAAmB,CAAC;IACvE,OAAO,CAAC,MAAM,CAAS;IAEvB,SAAgB,EAAE,0BAA0B;gBAEzB,MAAM,EAAE,MAAM;IAIpB,WAAW,CAAC,MAAM,EAAE,4BAA4B,GAAG,OAAO,CAAC,IAAI,CAAC;CAIhF;AAED,eAAO,MAAM,mBAAmB;;;8BAMtB,CAAC;AAEX,wBAAsB,mBAAmB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,EAC/E,MAAM,EAAE,iBAAiB,EACzB,KAAK,EAAE,CAAC,GAMT,OAAO,CAAC,eAAe,CAAC,CAAC,SAAS,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAYlE"}
@@ -3,6 +3,7 @@ import { decodeUtf8 } from "../../utils/index.js";
3
3
  export var AdbSyncResponseId;
4
4
  (function (AdbSyncResponseId) {
5
5
  AdbSyncResponseId["Entry"] = "DENT";
6
+ AdbSyncResponseId["Entry2"] = "DNT2";
6
7
  AdbSyncResponseId["Lstat"] = "STAT";
7
8
  AdbSyncResponseId["Stat"] = "STA2";
8
9
  AdbSyncResponseId["Lstat2"] = "LST2";
@@ -40,6 +41,6 @@ export async function adbSyncReadResponse(stream, types) {
40
41
  if (types[id]) {
41
42
  return types[id].deserialize(stream);
42
43
  }
43
- throw new Error('Unexpected response id');
44
+ throw new Error(`Expected '${Object.keys(types).join(', ')}', but got '${id}'`);
44
45
  }
45
46
  //# sourceMappingURL=response.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"response.js","sourceRoot":"","sources":["../../../src/commands/sync/response.ts"],"names":[],"mappings":"AAAA,OAAO,MAAoF,MAAM,mBAAmB,CAAC;AAErH,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD,MAAM,CAAN,IAAY,iBASX;AATD,WAAY,iBAAiB;IACzB,mCAAc,CAAA;IACd,mCAAc,CAAA;IACd,kCAAa,CAAA;IACb,oCAAe,CAAA;IACf,kCAAa,CAAA;IACb,kCAAa,CAAA;IACb,gCAAW,CAAA;IACX,kCAAa,CAAA;AACjB,CAAC,EATW,iBAAiB,GAAjB,iBAAiB,KAAjB,iBAAiB,QAS5B;AAED,yEAAyE;AACzE,sFAAsF;AACtF,6EAA6E;AAC7E,iDAAiD;AACjD,MAAM,OAAO,mBAAmB;IACpB,MAAM,CAAS;IAEP,EAAE,GAAG,iBAAiB,CAAC,IAAI,CAAC;IAE5C,YAAmB,MAAc;QAC7B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACzB,CAAC;IAEM,KAAK,CAAC,WAAW,CAAC,MAAoC;QACzD,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC/B,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ;AAED,MAAM,CAAC,MAAM,mBAAmB,GAC5B,IAAI,MAAM,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;KAC7B,MAAM,CAAC,eAAe,CAAC;KACvB,MAAM,CAAC,SAAS,EAAE,EAAE,WAAW,EAAE,eAAe,EAAE,CAAC;KACnD,eAAe,CAAC,MAAM,CAAC,EAAE;IACtB,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AACpC,CAAC,CAAC,CAAC;AAEX,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACrC,MAAyB,EACzB,KAAQ;IAER,MAAM,EAAE,GAAG,UAAU,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAE5C,IAAI,EAAE,KAAK,iBAAiB,CAAC,IAAI,EAAE;QAC/B,MAAM,mBAAmB,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;KACjD;IAED,IAAI,KAAK,CAAC,EAAE,CAAC,EAAE;QACX,OAAO,KAAK,CAAC,EAAE,CAAE,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;KACzC;IAED,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;AAC9C,CAAC"}
1
+ {"version":3,"file":"response.js","sourceRoot":"","sources":["../../../src/commands/sync/response.ts"],"names":[],"mappings":"AAAA,OAAO,MAAoF,MAAM,mBAAmB,CAAC;AAErH,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD,MAAM,CAAN,IAAY,iBAUX;AAVD,WAAY,iBAAiB;IACzB,mCAAc,CAAA;IACd,oCAAe,CAAA;IACf,mCAAc,CAAA;IACd,kCAAa,CAAA;IACb,oCAAe,CAAA;IACf,kCAAa,CAAA;IACb,kCAAa,CAAA;IACb,gCAAW,CAAA;IACX,kCAAa,CAAA;AACjB,CAAC,EAVW,iBAAiB,GAAjB,iBAAiB,KAAjB,iBAAiB,QAU5B;AAED,yEAAyE;AACzE,sFAAsF;AACtF,6EAA6E;AAC7E,iDAAiD;AACjD,MAAM,OAAO,mBAAmB;IACpB,MAAM,CAAS;IAEP,EAAE,GAAG,iBAAiB,CAAC,IAAI,CAAC;IAE5C,YAAmB,MAAc;QAC7B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACzB,CAAC;IAEM,KAAK,CAAC,WAAW,CAAC,MAAoC;QACzD,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC/B,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ;AAED,MAAM,CAAC,MAAM,mBAAmB,GAC5B,IAAI,MAAM,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;KAC7B,MAAM,CAAC,eAAe,CAAC;KACvB,MAAM,CAAC,SAAS,EAAE,EAAE,WAAW,EAAE,eAAe,EAAE,CAAC;KACnD,eAAe,CAAC,MAAM,CAAC,EAAE;IACtB,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AACpC,CAAC,CAAC,CAAC;AAEX,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACrC,MAAyB,EACzB,KAAQ;IAOR,MAAM,EAAE,GAAG,UAAU,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAE5C,IAAI,EAAE,KAAK,iBAAiB,CAAC,IAAI,EAAE;QAC/B,MAAM,mBAAmB,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;KACjD;IAED,IAAI,KAAK,CAAC,EAAE,CAAC,EAAE;QACX,OAAO,KAAK,CAAC,EAAE,CAAE,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;KACzC;IAED,MAAM,IAAI,KAAK,CAAC,aAAa,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;AACpF,CAAC"}
@@ -6,6 +6,17 @@ export declare enum LinuxFileType {
6
6
  File = 8,
7
7
  Link = 10
8
8
  }
9
+ export interface AdbSyncStat {
10
+ mode: number;
11
+ size: bigint;
12
+ mtime: bigint;
13
+ get type(): LinuxFileType;
14
+ get permission(): number;
15
+ uid?: number;
16
+ gid?: number;
17
+ atime?: bigint;
18
+ ctime?: bigint;
19
+ }
9
20
  export declare const AdbSyncLstatResponse: Struct<{
10
21
  mode: number;
11
22
  size: number;
@@ -17,6 +28,7 @@ export declare const AdbSyncLstatResponse: Struct<{
17
28
  }, undefined>;
18
29
  export declare type AdbSyncLstatResponse = typeof AdbSyncLstatResponse['TDeserializeResult'];
19
30
  export declare enum AdbSyncStatErrorCode {
31
+ SUCCESS = 0,
20
32
  EACCES = 13,
21
33
  EEXIST = 17,
22
34
  EFAULT = 14,
@@ -56,6 +68,6 @@ export declare const AdbSyncStatResponse: Struct<{
56
68
  readonly permission: number;
57
69
  }, undefined>;
58
70
  export declare type AdbSyncStatResponse = typeof AdbSyncStatResponse['TDeserializeResult'];
59
- export declare function adbSyncLstat(stream: AdbBufferedStream, writer: WritableStreamDefaultWriter<Uint8Array>, path: string, v2: boolean): Promise<AdbSyncLstatResponse | AdbSyncStatResponse>;
71
+ export declare function adbSyncLstat(stream: AdbBufferedStream, writer: WritableStreamDefaultWriter<Uint8Array>, path: string, v2: boolean): Promise<AdbSyncStat>;
60
72
  export declare function adbSyncStat(stream: AdbBufferedStream, writer: WritableStreamDefaultWriter<Uint8Array>, path: string): Promise<AdbSyncStatResponse>;
61
73
  //# sourceMappingURL=stat.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"stat.d.ts","sourceRoot":"","sources":["../../../src/commands/sync/stat.ts"],"names":[],"mappings":"AAAA,OAAO,MAAuB,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,EAAE,iBAAiB,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AAE5F,OAAO,EAAuB,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAGvE,oBAAY,aAAa;IACrB,SAAS,IAAO;IAChB,IAAI,IAAO;IACX,IAAI,KAAO;CACd;AAED,eAAO,MAAM,oBAAoB;;;;;;;;aAiBvB,CAAC;AAEX,oBAAY,oBAAoB,GAAG,OAAO,oBAAoB,CAAC,oBAAoB,CAAC,CAAC;AAErF,oBAAY,oBAAoB;IAC5B,MAAM,KAAK;IACX,MAAM,KAAK;IACX,MAAM,KAAK;IACX,KAAK,KAAK;IACV,KAAK,IAAI;IACT,MAAM,KAAK;IACX,GAAG,IAAI;IACP,MAAM,KAAK;IACX,KAAK,KAAK;IACV,MAAM,KAAK;IACX,YAAY,KAAK;IACjB,MAAM,KAAK;IACX,MAAM,IAAI;IACV,MAAM,KAAK;IACX,MAAM,KAAK;IACX,OAAO,KAAK;IACZ,SAAS,KAAK;IACd,KAAK,IAAI;IACT,KAAK,KAAK;IACV,OAAO,KAAK;CACf;AAED,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;aAsBtB,CAAC;AAEX,oBAAY,mBAAmB,GAAG,OAAO,mBAAmB,CAAC,oBAAoB,CAAC,CAAC;AAcnF,wBAAsB,YAAY,CAC9B,MAAM,EAAE,iBAAiB,EACzB,MAAM,EAAE,2BAA2B,CAAC,UAAU,CAAC,EAC/C,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,OAAO,GACZ,OAAO,CAAC,oBAAoB,GAAG,mBAAmB,CAAC,CAcrD;AAED,wBAAsB,WAAW,CAC7B,MAAM,EAAE,iBAAiB,EACzB,MAAM,EAAE,2BAA2B,CAAC,UAAU,CAAC,EAC/C,IAAI,EAAE,MAAM,GACb,OAAO,CAAC,mBAAmB,CAAC,CAG9B"}
1
+ {"version":3,"file":"stat.d.ts","sourceRoot":"","sources":["../../../src/commands/sync/stat.ts"],"names":[],"mappings":"AAAA,OAAO,MAAuB,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,EAAE,iBAAiB,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AAE5F,OAAO,EAAuB,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAGvE,oBAAY,aAAa;IACrB,SAAS,IAAO;IAChB,IAAI,IAAO;IACX,IAAI,KAAO;CACd;AAED,MAAM,WAAW,WAAW;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,IAAI,IAAI,aAAa,CAAC;IAC1B,IAAI,UAAU,IAAI,MAAM,CAAC;IAEzB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,oBAAoB;;;;;;;;aAiBvB,CAAC;AAEX,oBAAY,oBAAoB,GAAG,OAAO,oBAAoB,CAAC,oBAAoB,CAAC,CAAC;AAErF,oBAAY,oBAAoB;IAC5B,OAAO,IAAI;IACX,MAAM,KAAK;IACX,MAAM,KAAK;IACX,MAAM,KAAK;IACX,KAAK,KAAK;IACV,KAAK,IAAI;IACT,MAAM,KAAK;IACX,GAAG,IAAI;IACP,MAAM,KAAK;IACX,KAAK,KAAK;IACV,MAAM,KAAK;IACX,YAAY,KAAK;IACjB,MAAM,KAAK;IACX,MAAM,IAAI;IACV,MAAM,KAAK;IACX,MAAM,KAAK;IACX,OAAO,KAAK;IACZ,SAAS,KAAK;IACd,KAAK,IAAI;IACT,KAAK,KAAK;IACV,OAAO,KAAK;CACf;AAED,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;aAsBtB,CAAC;AAEX,oBAAY,mBAAmB,GAAG,OAAO,mBAAmB,CAAC,oBAAoB,CAAC,CAAC;AAcnF,wBAAsB,YAAY,CAC9B,MAAM,EAAE,iBAAiB,EACzB,MAAM,EAAE,2BAA2B,CAAC,UAAU,CAAC,EAC/C,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,OAAO,GACZ,OAAO,CAAC,WAAW,CAAC,CA2BtB;AAED,wBAAsB,WAAW,CAC7B,MAAM,EAAE,iBAAiB,EACzB,MAAM,EAAE,2BAA2B,CAAC,UAAU,CAAC,EAC/C,IAAI,EAAE,MAAM,GACb,OAAO,CAAC,mBAAmB,CAAC,CAG9B"}
@@ -26,6 +26,7 @@ export const AdbSyncLstatResponse = new Struct({ littleEndian: true })
26
26
  });
27
27
  export var AdbSyncStatErrorCode;
28
28
  (function (AdbSyncStatErrorCode) {
29
+ AdbSyncStatErrorCode[AdbSyncStatErrorCode["SUCCESS"] = 0] = "SUCCESS";
29
30
  AdbSyncStatErrorCode[AdbSyncStatErrorCode["EACCES"] = 13] = "EACCES";
30
31
  AdbSyncStatErrorCode[AdbSyncStatErrorCode["EEXIST"] = 17] = "EEXIST";
31
32
  AdbSyncStatErrorCode[AdbSyncStatErrorCode["EFAULT"] = 14] = "EFAULT";
@@ -69,13 +70,13 @@ export const AdbSyncStatResponse = new Struct({ littleEndian: true })
69
70
  throw new Error(AdbSyncStatErrorCode[object.error]);
70
71
  }
71
72
  });
72
- const StatResponseType = {
73
+ const STAT_RESPONSE_TYPES = {
73
74
  [AdbSyncResponseId.Stat]: AdbSyncStatResponse,
74
75
  };
75
- const LstatResponseType = {
76
+ const LSTAT_RESPONSE_TYPES = {
76
77
  [AdbSyncResponseId.Lstat]: AdbSyncLstatResponse,
77
78
  };
78
- const Lstat2ResponseType = {
79
+ const LSTAT_V2_RESPONSE_TYPES = {
79
80
  [AdbSyncResponseId.Lstat2]: AdbSyncStatResponse,
80
81
  };
81
82
  export async function adbSyncLstat(stream, writer, path, v2) {
@@ -83,17 +84,29 @@ export async function adbSyncLstat(stream, writer, path, v2) {
83
84
  let responseType;
84
85
  if (v2) {
85
86
  requestId = AdbSyncRequestId.Lstat2;
86
- responseType = Lstat2ResponseType;
87
+ responseType = LSTAT_V2_RESPONSE_TYPES;
87
88
  }
88
89
  else {
89
90
  requestId = AdbSyncRequestId.Lstat;
90
- responseType = LstatResponseType;
91
+ responseType = LSTAT_RESPONSE_TYPES;
91
92
  }
92
93
  await adbSyncWriteRequest(writer, requestId, path);
93
- return adbSyncReadResponse(stream, responseType);
94
+ const response = await adbSyncReadResponse(stream, responseType);
95
+ switch (response.id) {
96
+ case AdbSyncResponseId.Lstat:
97
+ return {
98
+ mode: response.mode,
99
+ size: BigInt(response.size),
100
+ mtime: BigInt(response.mtime),
101
+ get type() { return response.type; },
102
+ get permission() { return response.permission; },
103
+ };
104
+ default:
105
+ return response;
106
+ }
94
107
  }
95
108
  export async function adbSyncStat(stream, writer, path) {
96
109
  await adbSyncWriteRequest(writer, AdbSyncRequestId.Stat, path);
97
- return await adbSyncReadResponse(stream, StatResponseType);
110
+ return await adbSyncReadResponse(stream, STAT_RESPONSE_TYPES);
98
111
  }
99
112
  //# sourceMappingURL=stat.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"stat.js","sourceRoot":"","sources":["../../../src/commands/sync/stat.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stat.js","sourceRoot":"","sources":["../../../src/commands/sync/stat.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,EAAE,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAExD,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAEvE,kGAAkG;AAClG,MAAM,CAAN,IAAY,aAIX;AAJD,WAAY,aAAa;IACrB,2DAAgB,CAAA;IAChB,iDAAW,CAAA;IACX,kDAAW,CAAA;AACf,CAAC,EAJW,aAAa,GAAb,aAAa,KAAb,aAAa,QAIxB;AAeD,MAAM,CAAC,MAAM,oBAAoB,GAC7B,IAAI,MAAM,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;KAC7B,KAAK,CAAC,MAAM,CAAC;KACb,KAAK,CAAC,MAAM,CAAC;KACb,KAAK,CAAC,OAAO,CAAC;KACd,KAAK,CAAC;IACH,EAAE,EAAE,iBAAiB,CAAC,KAAc;IACpC,IAAI,IAAI,KAAK,OAAO,IAAI,CAAC,IAAI,IAAI,EAAmB,CAAC,CAAC,CAAC;IACvD,IAAI,UAAU,KAAK,OAAO,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC,CAAC,CAAC;CAC/D,CAAC;KACD,eAAe,CAAC,CAAC,MAAM,EAAE,EAAE;IACxB,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC;QACjB,MAAM,CAAC,IAAI,KAAK,CAAC;QACjB,MAAM,CAAC,KAAK,KAAK,CAAC,EACpB;QACE,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC;KACnC;AACL,CAAC,CAAC,CAAC;AAIX,MAAM,CAAN,IAAY,oBAsBX;AAtBD,WAAY,oBAAoB;IAC5B,qEAAW,CAAA;IACX,oEAAW,CAAA;IACX,oEAAW,CAAA;IACX,oEAAW,CAAA;IACX,kEAAU,CAAA;IACV,iEAAS,CAAA;IACT,oEAAW,CAAA;IACX,6DAAO,CAAA;IACP,oEAAW,CAAA;IACX,kEAAU,CAAA;IACV,oEAAW,CAAA;IACX,gFAAiB,CAAA;IACjB,oEAAW,CAAA;IACX,mEAAU,CAAA;IACV,oEAAW,CAAA;IACX,oEAAW,CAAA;IACX,sEAAY,CAAA;IACZ,0EAAc,CAAA;IACd,iEAAS,CAAA;IACT,kEAAU,CAAA;IACV,sEAAY,CAAA;AAChB,CAAC,EAtBW,oBAAoB,GAApB,oBAAoB,KAApB,oBAAoB,QAsB/B;AAED,MAAM,CAAC,MAAM,mBAAmB,GAC5B,IAAI,MAAM,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;KAC7B,MAAM,CAAC,OAAO,EAAE,WAAW,EAAwB,CAAC;KACpD,MAAM,CAAC,KAAK,CAAC;KACb,MAAM,CAAC,KAAK,CAAC;KACb,MAAM,CAAC,MAAM,CAAC;KACd,MAAM,CAAC,OAAO,CAAC;KACf,MAAM,CAAC,KAAK,CAAC;KACb,MAAM,CAAC,KAAK,CAAC;KACb,MAAM,CAAC,MAAM,CAAC;KACd,MAAM,CAAC,OAAO,CAAC;KACf,MAAM,CAAC,OAAO,CAAC;KACf,MAAM,CAAC,OAAO,CAAC;KACf,KAAK,CAAC;IACH,EAAE,EAAE,iBAAiB,CAAC,IAAa;IACnC,IAAI,IAAI,KAAK,OAAO,IAAI,CAAC,IAAI,IAAI,EAAmB,CAAC,CAAC,CAAC;IACvD,IAAI,UAAU,KAAK,OAAO,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC,CAAC,CAAC;CAC/D,CAAC;KACD,eAAe,CAAC,CAAC,MAAM,EAAE,EAAE;IACxB,IAAI,MAAM,CAAC,KAAK,EAAE;QACd,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;KACvD;AACL,CAAC,CAAC,CAAC;AAIX,MAAM,mBAAmB,GAAG;IACxB,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,mBAAmB;CAChD,CAAC;AAEF,MAAM,oBAAoB,GAAG;IACzB,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE,oBAAoB;CAClD,CAAC;AAEF,MAAM,uBAAuB,GAAG;IAC5B,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,mBAAmB;CAClD,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,YAAY,CAC9B,MAAyB,EACzB,MAA+C,EAC/C,IAAY,EACZ,EAAW;IAEX,IAAI,SAA2D,CAAC;IAChE,IAAI,YAA0E,CAAC;IAE/E,IAAI,EAAE,EAAE;QACJ,SAAS,GAAG,gBAAgB,CAAC,MAAM,CAAC;QACpC,YAAY,GAAG,uBAAuB,CAAC;KAC1C;SAAM;QACH,SAAS,GAAG,gBAAgB,CAAC,KAAK,CAAC;QACnC,YAAY,GAAG,oBAAoB,CAAC;KACvC;IAED,MAAM,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;IACnD,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAEjE,QAAQ,QAAQ,CAAC,EAAE,EAAE;QACjB,KAAK,iBAAiB,CAAC,KAAK;YACxB,OAAO;gBACH,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAC3B,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAC7B,IAAI,IAAI,KAAK,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;gBACpC,IAAI,UAAU,KAAK,OAAO,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;aACnD,CAAC;QACN;YACI,OAAO,QAAQ,CAAC;KACvB;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAC7B,MAAyB,EACzB,MAA+C,EAC/C,IAAY;IAEZ,MAAM,mBAAmB,CAAC,MAAM,EAAE,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC/D,OAAO,MAAM,mBAAmB,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;AAClE,CAAC"}