@yume-chan/adb 0.0.18 → 0.0.19

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 (164) hide show
  1. package/CHANGELOG.json +21 -0
  2. package/CHANGELOG.md +11 -1
  3. package/esm/adb.d.ts +63 -60
  4. package/esm/adb.d.ts.map +1 -1
  5. package/esm/adb.js +257 -249
  6. package/esm/adb.js.map +1 -1
  7. package/esm/auth.d.ts +51 -51
  8. package/esm/auth.d.ts.map +1 -1
  9. package/esm/auth.js +95 -96
  10. package/esm/auth.js.map +1 -1
  11. package/esm/backend.d.ts +8 -8
  12. package/esm/backend.d.ts.map +1 -1
  13. package/esm/backend.js +1 -1
  14. package/esm/commands/base.d.ts +6 -6
  15. package/esm/commands/base.d.ts.map +1 -1
  16. package/esm/commands/base.js +8 -8
  17. package/esm/commands/framebuffer.d.ts +53 -53
  18. package/esm/commands/framebuffer.d.ts.map +1 -1
  19. package/esm/commands/framebuffer.js +46 -46
  20. package/esm/commands/framebuffer.js.map +1 -1
  21. package/esm/commands/index.d.ts +7 -8
  22. package/esm/commands/index.d.ts.map +1 -1
  23. package/esm/commands/index.js +7 -8
  24. package/esm/commands/index.js.map +1 -1
  25. package/esm/commands/install.d.ts +9 -3
  26. package/esm/commands/install.d.ts.map +1 -1
  27. package/esm/commands/install.js +26 -26
  28. package/esm/commands/install.js.map +1 -1
  29. package/esm/commands/power.d.ts +22 -22
  30. package/esm/commands/power.js +48 -48
  31. package/esm/commands/reverse.d.ts +41 -28
  32. package/esm/commands/reverse.d.ts.map +1 -1
  33. package/esm/commands/reverse.js +125 -100
  34. package/esm/commands/reverse.js.map +1 -1
  35. package/esm/commands/subprocess/command.d.ts +57 -51
  36. package/esm/commands/subprocess/command.d.ts.map +1 -1
  37. package/esm/commands/subprocess/command.js +86 -80
  38. package/esm/commands/subprocess/command.js.map +1 -1
  39. package/esm/commands/subprocess/index.d.ts +3 -3
  40. package/esm/commands/subprocess/index.js +3 -3
  41. package/esm/commands/subprocess/protocols/index.d.ts +3 -3
  42. package/esm/commands/subprocess/protocols/index.js +3 -3
  43. package/esm/commands/subprocess/protocols/none.d.ts +35 -35
  44. package/esm/commands/subprocess/protocols/none.d.ts.map +1 -1
  45. package/esm/commands/subprocess/protocols/none.js +65 -55
  46. package/esm/commands/subprocess/protocols/none.js.map +1 -1
  47. package/esm/commands/subprocess/protocols/shell.d.ts +39 -38
  48. package/esm/commands/subprocess/protocols/shell.d.ts.map +1 -1
  49. package/esm/commands/subprocess/protocols/shell.js +166 -162
  50. package/esm/commands/subprocess/protocols/shell.js.map +1 -1
  51. package/esm/commands/subprocess/protocols/types.d.ts +49 -49
  52. package/esm/commands/subprocess/protocols/types.d.ts.map +1 -1
  53. package/esm/commands/subprocess/protocols/types.js +1 -1
  54. package/esm/commands/subprocess/utils.d.ts +1 -1
  55. package/esm/commands/subprocess/utils.js +18 -18
  56. package/esm/commands/sync/index.d.ts +8 -7
  57. package/esm/commands/sync/index.d.ts.map +1 -1
  58. package/esm/commands/sync/index.js +8 -7
  59. package/esm/commands/sync/index.js.map +1 -1
  60. package/esm/commands/sync/list.d.ts +42 -40
  61. package/esm/commands/sync/list.d.ts.map +1 -1
  62. package/esm/commands/sync/list.js +67 -47
  63. package/esm/commands/sync/list.js.map +1 -1
  64. package/esm/commands/sync/pull.d.ts +13 -11
  65. package/esm/commands/sync/pull.d.ts.map +1 -1
  66. package/esm/commands/sync/pull.js +35 -37
  67. package/esm/commands/sync/pull.js.map +1 -1
  68. package/esm/commands/sync/push.d.ts +46 -7
  69. package/esm/commands/sync/push.d.ts.map +1 -1
  70. package/esm/commands/sync/push.js +89 -22
  71. package/esm/commands/sync/push.js.map +1 -1
  72. package/esm/commands/sync/request.d.ts +26 -23
  73. package/esm/commands/sync/request.d.ts.map +1 -1
  74. package/esm/commands/sync/request.js +40 -42
  75. package/esm/commands/sync/request.js.map +1 -1
  76. package/esm/commands/sync/response.d.ts +19 -19
  77. package/esm/commands/sync/response.d.ts.map +1 -1
  78. package/esm/commands/sync/response.js +54 -54
  79. package/esm/commands/sync/response.js.map +1 -1
  80. package/esm/commands/sync/socket.d.ts +27 -0
  81. package/esm/commands/sync/socket.d.ts.map +1 -0
  82. package/esm/commands/sync/socket.js +66 -0
  83. package/esm/commands/sync/socket.js.map +1 -0
  84. package/esm/commands/sync/stat.d.ts +72 -72
  85. package/esm/commands/sync/stat.d.ts.map +1 -1
  86. package/esm/commands/sync/stat.js +116 -104
  87. package/esm/commands/sync/stat.js.map +1 -1
  88. package/esm/commands/sync/sync.d.ts +72 -60
  89. package/esm/commands/sync/sync.d.ts.map +1 -1
  90. package/esm/commands/sync/sync.js +127 -149
  91. package/esm/commands/sync/sync.js.map +1 -1
  92. package/esm/commands/tcpip.d.ts +5 -5
  93. package/esm/commands/tcpip.js +18 -18
  94. package/esm/crypto.d.ts +36 -36
  95. package/esm/crypto.js +248 -248
  96. package/esm/features.d.ts +10 -7
  97. package/esm/features.d.ts.map +1 -1
  98. package/esm/features.js +13 -10
  99. package/esm/features.js.map +1 -1
  100. package/esm/index.d.ts +9 -9
  101. package/esm/index.js +9 -9
  102. package/esm/packet.d.ts +45 -46
  103. package/esm/packet.d.ts.map +1 -1
  104. package/esm/packet.js +43 -48
  105. package/esm/packet.js.map +1 -1
  106. package/esm/socket/dispatcher.d.ts +59 -59
  107. package/esm/socket/dispatcher.d.ts.map +1 -1
  108. package/esm/socket/dispatcher.js +223 -234
  109. package/esm/socket/dispatcher.js.map +1 -1
  110. package/esm/socket/index.d.ts +2 -2
  111. package/esm/socket/index.js +2 -2
  112. package/esm/socket/socket.d.ts +59 -59
  113. package/esm/socket/socket.d.ts.map +1 -1
  114. package/esm/socket/socket.js +118 -118
  115. package/esm/socket/socket.js.map +1 -1
  116. package/esm/utils/auto-reset-event.d.ts +9 -9
  117. package/esm/utils/auto-reset-event.d.ts.map +1 -1
  118. package/esm/utils/auto-reset-event.js +33 -33
  119. package/esm/utils/auto-reset-event.js.map +1 -1
  120. package/esm/utils/base64.d.ts +27 -27
  121. package/esm/utils/base64.js +246 -246
  122. package/esm/utils/conditional-variable.d.ts +9 -0
  123. package/esm/utils/conditional-variable.d.ts.map +1 -0
  124. package/esm/utils/conditional-variable.js +34 -0
  125. package/esm/utils/conditional-variable.js.map +1 -0
  126. package/esm/utils/index.d.ts +4 -3
  127. package/esm/utils/index.d.ts.map +1 -1
  128. package/esm/utils/index.js +4 -3
  129. package/esm/utils/index.js.map +1 -1
  130. package/package.json +11 -10
  131. package/src/adb.ts +47 -37
  132. package/src/auth.ts +7 -6
  133. package/src/backend.ts +4 -4
  134. package/src/commands/base.ts +1 -1
  135. package/src/commands/framebuffer.ts +4 -4
  136. package/src/commands/index.ts +7 -8
  137. package/src/commands/reverse.ts +35 -10
  138. package/src/commands/subprocess/command.ts +12 -4
  139. package/src/commands/subprocess/index.ts +3 -3
  140. package/src/commands/subprocess/protocols/index.ts +3 -3
  141. package/src/commands/subprocess/protocols/none.ts +25 -11
  142. package/src/commands/subprocess/protocols/shell.ts +50 -28
  143. package/src/commands/subprocess/protocols/types.ts +8 -7
  144. package/src/commands/subprocess/utils.ts +1 -1
  145. package/src/commands/sync/index.ts +8 -7
  146. package/src/commands/sync/list.ts +42 -23
  147. package/src/commands/sync/pull.ts +40 -45
  148. package/src/commands/sync/push.ts +146 -39
  149. package/src/commands/sync/request.ts +20 -15
  150. package/src/commands/sync/response.ts +7 -6
  151. package/src/commands/sync/socket.ts +97 -0
  152. package/src/commands/sync/stat.ts +47 -42
  153. package/src/commands/sync/sync.ts +68 -108
  154. package/src/commands/tcpip.ts +5 -5
  155. package/src/features.ts +9 -6
  156. package/src/packet.ts +19 -34
  157. package/src/socket/dispatcher.ts +32 -47
  158. package/src/socket/index.ts +2 -2
  159. package/src/socket/socket.ts +26 -17
  160. package/src/utils/auto-reset-event.ts +14 -15
  161. package/src/utils/conditional-variable.ts +45 -0
  162. package/src/utils/index.ts +4 -3
  163. package/tsconfig.build.tsbuildinfo +1 -1
  164. package/src/commands/install.ts +0 -40
@@ -1,8 +1,9 @@
1
- export * from './list.js';
2
- export * from './pull.js';
3
- export * from './push.js';
4
- export * from './request.js';
5
- export * from './response.js';
6
- export * from './stat.js';
7
- export * from './sync.js';
1
+ export * from "./list.js";
2
+ export * from "./pull.js";
3
+ export * from "./push.js";
4
+ export * from "./request.js";
5
+ export * from "./response.js";
6
+ export * from "./socket.js";
7
+ export * from "./stat.js";
8
+ export * from "./sync.js";
8
9
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/sync/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/sync/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC"}
@@ -1,41 +1,43 @@
1
- import { type BufferedReadableStream, type WritableStreamDefaultWriter } from "@yume-chan/stream-extra";
2
- import Struct from "@yume-chan/struct";
3
- import { AdbSyncResponseId } from "./response.js";
4
- import { type AdbSyncStat } from "./stat.js";
5
- export interface AdbSyncEntry extends AdbSyncStat {
6
- name: string;
7
- }
8
- export declare const AdbSyncEntryResponse: Struct<{
9
- mode: number;
10
- size: number;
11
- mtime: number;
12
- nameLength: number;
13
- name: string;
14
- }, "nameLength", {
15
- readonly type: import("./stat.js").LinuxFileType;
16
- readonly permission: number;
17
- id: AdbSyncResponseId.Entry;
18
- }, undefined>;
19
- export type AdbSyncEntryResponse = typeof AdbSyncEntryResponse["TDeserializeResult"];
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 type AdbSyncEntry2Response = typeof AdbSyncEntry2Response["TDeserializeResult"];
40
- export declare function adbSyncOpenDir(stream: BufferedReadableStream, writer: WritableStreamDefaultWriter<Uint8Array>, path: string, v2: boolean): AsyncGenerator<AdbSyncEntry, void, void>;
1
+ import Struct from "@yume-chan/struct";
2
+ import { AdbSyncResponseId } from "./response.js";
3
+ import type { AdbSyncSocket } from "./socket.js";
4
+ import type { AdbSyncStat } from "./stat.js";
5
+ export interface AdbSyncEntry extends AdbSyncStat {
6
+ name: string;
7
+ }
8
+ export declare const AdbSyncEntryResponse: Struct<{
9
+ mode: number;
10
+ size: number;
11
+ mtime: number;
12
+ nameLength: number;
13
+ name: string;
14
+ }, "nameLength", {
15
+ readonly type: import("./stat.js").LinuxFileType;
16
+ readonly permission: number;
17
+ id: AdbSyncResponseId.Entry;
18
+ }, undefined>;
19
+ export type AdbSyncEntryResponse = (typeof AdbSyncEntryResponse)["TDeserializeResult"];
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 type AdbSyncEntry2Response = (typeof AdbSyncEntry2Response)["TDeserializeResult"];
40
+ export declare function adbSyncOpenDirV2(socket: AdbSyncSocket, path: string): AsyncGenerator<AdbSyncEntry2Response, void, void>;
41
+ export declare function adbSyncOpenDirV1(socket: AdbSyncSocket, path: string): AsyncGenerator<AdbSyncEntryResponse, void, void>;
42
+ export declare function adbSyncOpenDir(socket: AdbSyncSocket, path: string, v2: boolean): AsyncGenerator<AdbSyncEntry, void, void>;
41
43
  //# 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,EACH,KAAK,sBAAsB,EAC3B,KAAK,2BAA2B,EACnC,MAAM,yBAAyB,CAAC;AACjC,OAAO,MAAM,MAAM,mBAAmB,CAAC;AAGvC,OAAO,EAAE,iBAAiB,EAAwB,MAAM,eAAe,CAAC;AACxE,OAAO,EAGH,KAAK,WAAW,EACnB,MAAM,WAAW,CAAC;AAEnB,MAAM,WAAW,YAAa,SAAQ,WAAW;IAC7C,IAAI,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,oBAAoB;;;;;;;;;;aAImB,CAAC;AAErD,MAAM,MAAM,oBAAoB,GAC5B,OAAO,oBAAoB,CAAC,oBAAoB,CAAC,CAAC;AAEtD,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;aAImB,CAAC;AAEtD,MAAM,MAAM,qBAAqB,GAC7B,OAAO,qBAAqB,CAAC,oBAAoB,CAAC,CAAC;AAEvD,wBAAuB,cAAc,CACjC,MAAM,EAAE,sBAAsB,EAC9B,MAAM,EAAE,2BAA2B,CAAC,UAAU,CAAC,EAC/C,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,OAAO,GACZ,cAAc,CAAC,YAAY,EAAE,IAAI,EAAE,IAAI,CAAC,CAuC1C"}
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/sync/list.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,mBAAmB,CAAC;AAGvC,OAAO,EAAE,iBAAiB,EAAwB,MAAM,eAAe,CAAC;AACxE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAG7C,MAAM,WAAW,YAAa,SAAQ,WAAW;IAC7C,IAAI,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,oBAAoB;;;;;;;;;;aAImB,CAAC;AAErD,MAAM,MAAM,oBAAoB,GAC5B,CAAC,OAAO,oBAAoB,CAAC,CAAC,oBAAoB,CAAC,CAAC;AAExD,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;aAImB,CAAC;AAEtD,MAAM,MAAM,qBAAqB,GAC7B,CAAC,OAAO,qBAAqB,CAAC,CAAC,oBAAoB,CAAC,CAAC;AAEzD,wBAAuB,gBAAgB,CACnC,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,MAAM,GACb,cAAc,CAAC,qBAAqB,EAAE,IAAI,EAAE,IAAI,CAAC,CAoBnD;AAED,wBAAuB,gBAAgB,CACnC,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,MAAM,GACb,cAAc,CAAC,oBAAoB,EAAE,IAAI,EAAE,IAAI,CAAC,CAclD;AAED,wBAAuB,cAAc,CACjC,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,OAAO,GACZ,cAAc,CAAC,YAAY,EAAE,IAAI,EAAE,IAAI,CAAC,CAqB1C"}
@@ -1,48 +1,68 @@
1
- import Struct from "@yume-chan/struct";
2
- import { AdbSyncRequestId, adbSyncWriteRequest } from "./request.js";
3
- import { AdbSyncResponseId, adbSyncReadResponses } from "./response.js";
4
- import { AdbSyncLstatResponse, AdbSyncStatResponse, } from "./stat.js";
5
- export const AdbSyncEntryResponse = new Struct({ littleEndian: true })
6
- .fields(AdbSyncLstatResponse)
7
- .uint32("nameLength")
8
- .string("name", { lengthField: "nameLength" })
9
- .extra({ id: AdbSyncResponseId.Entry });
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
- export async function* adbSyncOpenDir(stream, writer, path, v2) {
16
- if (v2) {
17
- await adbSyncWriteRequest(writer, AdbSyncRequestId.List2, path);
18
- for await (const item of adbSyncReadResponses(stream, AdbSyncResponseId.Entry2, AdbSyncEntry2Response)) {
19
- // `LST2` can return error codes for failed `lstat` calls.
20
- // `LIST` just ignores them.
21
- // But they only contain `name` so still pretty useless.
22
- if (item.error !== 0) {
23
- continue;
24
- }
25
- yield item;
26
- }
27
- }
28
- else {
29
- await adbSyncWriteRequest(writer, AdbSyncRequestId.List, path);
30
- for await (const item of adbSyncReadResponses(stream, AdbSyncResponseId.Entry, AdbSyncEntryResponse)) {
31
- // Convert to same format as `AdbSyncEntry2Response` for easier consumption.
32
- // However it will add some overhead.
33
- yield {
34
- mode: item.mode,
35
- size: BigInt(item.size),
36
- mtime: BigInt(item.mtime),
37
- get type() {
38
- return item.type;
39
- },
40
- get permission() {
41
- return item.permission;
42
- },
43
- name: item.name,
44
- };
45
- }
46
- }
47
- }
1
+ import Struct from "@yume-chan/struct";
2
+ import { AdbSyncRequestId, adbSyncWriteRequest } from "./request.js";
3
+ import { AdbSyncResponseId, adbSyncReadResponses } from "./response.js";
4
+ import { AdbSyncLstatResponse, AdbSyncStatResponse } from "./stat.js";
5
+ export const AdbSyncEntryResponse = new Struct({ littleEndian: true })
6
+ .fields(AdbSyncLstatResponse)
7
+ .uint32("nameLength")
8
+ .string("name", { lengthField: "nameLength" })
9
+ .extra({ id: AdbSyncResponseId.Entry });
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
+ export async function* adbSyncOpenDirV2(socket, path) {
16
+ const locked = await socket.lock();
17
+ try {
18
+ await adbSyncWriteRequest(locked, AdbSyncRequestId.ListV2, path);
19
+ for await (const item of adbSyncReadResponses(locked, AdbSyncResponseId.Entry2, AdbSyncEntry2Response)) {
20
+ // `LST2` can return error codes for failed `lstat` calls.
21
+ // `LIST` just ignores them.
22
+ // But they only contain `name` so still pretty useless.
23
+ if (item.error !== 0) {
24
+ continue;
25
+ }
26
+ yield item;
27
+ }
28
+ }
29
+ finally {
30
+ locked.release();
31
+ }
32
+ }
33
+ export async function* adbSyncOpenDirV1(socket, path) {
34
+ const locked = await socket.lock();
35
+ try {
36
+ await adbSyncWriteRequest(locked, AdbSyncRequestId.List, path);
37
+ for await (const item of adbSyncReadResponses(locked, AdbSyncResponseId.Entry, AdbSyncEntryResponse)) {
38
+ yield item;
39
+ }
40
+ }
41
+ finally {
42
+ locked.release();
43
+ }
44
+ }
45
+ export async function* adbSyncOpenDir(socket, path, v2) {
46
+ if (v2) {
47
+ yield* adbSyncOpenDirV2(socket, path);
48
+ }
49
+ else {
50
+ for await (const item of adbSyncOpenDirV1(socket, path)) {
51
+ // Convert to same format as `AdbSyncEntry2Response` for easier consumption.
52
+ // However it will add some overhead.
53
+ yield {
54
+ mode: item.mode,
55
+ size: BigInt(item.size),
56
+ mtime: BigInt(item.mtime),
57
+ get type() {
58
+ return item.type;
59
+ },
60
+ get permission() {
61
+ return item.permission;
62
+ },
63
+ name: item.name,
64
+ };
65
+ }
66
+ }
67
+ }
48
68
  //# sourceMappingURL=list.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/sync/list.ts"],"names":[],"mappings":"AAIA,OAAO,MAAM,MAAM,mBAAmB,CAAC;AAEvC,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACxE,OAAO,EACH,oBAAoB,EACpB,mBAAmB,GAEtB,MAAM,WAAW,CAAC;AAMnB,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,MAAM,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;KACjE,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;AAKrD,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,MAAM,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;KAClE,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;AAKtD,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,cAAc,CACjC,MAA8B,EAC9B,MAA+C,EAC/C,IAAY,EACZ,EAAW;IAEX,IAAI,EAAE,EAAE;QACJ,MAAM,mBAAmB,CAAC,MAAM,EAAE,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAChE,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,oBAAoB,CACzC,MAAM,EACN,iBAAiB,CAAC,MAAM,EACxB,qBAAqB,CACxB,EAAE;YACC,0DAA0D;YAC1D,4BAA4B;YAC5B,wDAAwD;YACxD,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC,EAAE;gBAClB,SAAS;aACZ;YACD,MAAM,IAAI,CAAC;SACd;KACJ;SAAM;QACH,MAAM,mBAAmB,CAAC,MAAM,EAAE,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC/D,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,oBAAoB,CACzC,MAAM,EACN,iBAAiB,CAAC,KAAK,EACvB,oBAAoB,CACvB,EAAE;YACC,4EAA4E;YAC5E,qCAAqC;YACrC,MAAM;gBACF,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;gBACvB,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;gBACzB,IAAI,IAAI;oBACJ,OAAO,IAAI,CAAC,IAAI,CAAC;gBACrB,CAAC;gBACD,IAAI,UAAU;oBACV,OAAO,IAAI,CAAC,UAAU,CAAC;gBAC3B,CAAC;gBACD,IAAI,EAAE,IAAI,CAAC,IAAI;aAClB,CAAC;SACL;KACJ;AACL,CAAC"}
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/sync/list.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,14 @@
1
- import { ReadableStream, type BufferedReadableStream, type WritableStreamDefaultWriter } from "@yume-chan/stream-extra";
2
- import Struct from "@yume-chan/struct";
3
- import { AdbSyncResponseId } from "./response.js";
4
- export declare const AdbSyncDataResponse: Struct<{
5
- dataLength: number;
6
- data: Uint8Array;
7
- }, "dataLength", {
8
- id: AdbSyncResponseId.Data;
9
- }, undefined>;
10
- export type AdbSyncDataResponse = typeof AdbSyncDataResponse["TDeserializeResult"];
11
- export declare function adbSyncPull(stream: BufferedReadableStream, writer: WritableStreamDefaultWriter<Uint8Array>, path: string): ReadableStream<Uint8Array>;
1
+ import type { ReadableStream } from "@yume-chan/stream-extra";
2
+ import Struct from "@yume-chan/struct";
3
+ import { AdbSyncResponseId } from "./response.js";
4
+ import type { AdbSyncSocket } from "./socket.js";
5
+ export declare const AdbSyncDataResponse: Struct<{
6
+ dataLength: number;
7
+ data: Uint8Array;
8
+ }, "dataLength", {
9
+ id: AdbSyncResponseId.Data;
10
+ }, undefined>;
11
+ export type AdbSyncDataResponse = (typeof AdbSyncDataResponse)["TDeserializeResult"];
12
+ export declare function adbSyncPullGenerator(socket: AdbSyncSocket, path: string): AsyncGenerator<Uint8Array, void, void>;
13
+ export declare function adbSyncPull(socket: AdbSyncSocket, path: string): ReadableStream<Uint8Array>;
12
14
  //# sourceMappingURL=pull.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pull.d.ts","sourceRoot":"","sources":["../../../src/commands/sync/pull.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,cAAc,EACd,KAAK,sBAAsB,EAC3B,KAAK,2BAA2B,EACnC,MAAM,yBAAyB,CAAC;AACjC,OAAO,MAAM,MAAM,mBAAmB,CAAC;AAGvC,OAAO,EAAE,iBAAiB,EAAwB,MAAM,eAAe,CAAC;AAExE,eAAO,MAAM,mBAAmB;;;;;aAGmB,CAAC;AAEpD,MAAM,MAAM,mBAAmB,GAC3B,OAAO,mBAAmB,CAAC,oBAAoB,CAAC,CAAC;AAErD,wBAAgB,WAAW,CACvB,MAAM,EAAE,sBAAsB,EAC9B,MAAM,EAAE,2BAA2B,CAAC,UAAU,CAAC,EAC/C,IAAI,EAAE,MAAM,GACb,cAAc,CAAC,UAAU,CAAC,CAuC5B"}
1
+ {"version":3,"file":"pull.d.ts","sourceRoot":"","sources":["../../../src/commands/sync/pull.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAE9D,OAAO,MAAM,MAAM,mBAAmB,CAAC;AAGvC,OAAO,EAAE,iBAAiB,EAAwB,MAAM,eAAe,CAAC;AACxE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,eAAO,MAAM,mBAAmB;;;;;aAGmB,CAAC;AAEpD,MAAM,MAAM,mBAAmB,GAC3B,CAAC,OAAO,mBAAmB,CAAC,CAAC,oBAAoB,CAAC,CAAC;AAEvD,wBAAuB,oBAAoB,CACvC,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,MAAM,GACb,cAAc,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,CAAC,CA0BxC;AAED,wBAAgB,WAAW,CACvB,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,MAAM,GACb,cAAc,CAAC,UAAU,CAAC,CAM5B"}
@@ -1,38 +1,36 @@
1
- import { ReadableStream, } from "@yume-chan/stream-extra";
2
- import Struct from "@yume-chan/struct";
3
- import { AdbSyncRequestId, adbSyncWriteRequest } from "./request.js";
4
- import { AdbSyncResponseId, adbSyncReadResponses } from "./response.js";
5
- export const AdbSyncDataResponse = new Struct({ littleEndian: true })
6
- .uint32("dataLength")
7
- .uint8Array("data", { lengthField: "dataLength" })
8
- .extra({ id: AdbSyncResponseId.Data });
9
- export function adbSyncPull(stream, writer, path) {
10
- let generator;
11
- return new ReadableStream({
12
- async start() {
13
- // TODO: If `ReadableStream.from(AsyncGenerator)` is added to spec, use it instead.
14
- await adbSyncWriteRequest(writer, AdbSyncRequestId.Receive, path);
15
- generator = adbSyncReadResponses(stream, AdbSyncResponseId.Data, AdbSyncDataResponse);
16
- },
17
- async pull(controller) {
18
- const { done, value } = await generator.next();
19
- if (done) {
20
- controller.close();
21
- return;
22
- }
23
- controller.enqueue(value.data);
24
- },
25
- cancel() {
26
- generator.return().catch((e) => {
27
- void e;
28
- });
29
- throw new Error(`Sync commands can't be canceled.`);
30
- },
31
- }, {
32
- highWaterMark: 16 * 1024,
33
- size(chunk) {
34
- return chunk.byteLength;
35
- },
36
- });
37
- }
1
+ import { PushReadableStream } from "@yume-chan/stream-extra";
2
+ import Struct from "@yume-chan/struct";
3
+ import { AdbSyncRequestId, adbSyncWriteRequest } from "./request.js";
4
+ import { AdbSyncResponseId, adbSyncReadResponses } from "./response.js";
5
+ export const AdbSyncDataResponse = new Struct({ littleEndian: true })
6
+ .uint32("dataLength")
7
+ .uint8Array("data", { lengthField: "dataLength" })
8
+ .extra({ id: AdbSyncResponseId.Data });
9
+ export async function* adbSyncPullGenerator(socket, path) {
10
+ const locked = await socket.lock();
11
+ let done = false;
12
+ try {
13
+ await adbSyncWriteRequest(locked, AdbSyncRequestId.Receive, path);
14
+ for await (const packet of adbSyncReadResponses(locked, AdbSyncResponseId.Data, AdbSyncDataResponse)) {
15
+ yield packet.data;
16
+ }
17
+ done = true;
18
+ }
19
+ finally {
20
+ if (!done) {
21
+ // sync pull can't be cancelled, so we have to read all data
22
+ for await (const packet of adbSyncReadResponses(locked, AdbSyncResponseId.Data, AdbSyncDataResponse)) {
23
+ void packet;
24
+ }
25
+ }
26
+ locked.release();
27
+ }
28
+ }
29
+ export function adbSyncPull(socket, path) {
30
+ return new PushReadableStream(async (controller) => {
31
+ for await (const data of adbSyncPullGenerator(socket, path)) {
32
+ await controller.enqueue(data);
33
+ }
34
+ });
35
+ }
38
36
  //# sourceMappingURL=pull.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pull.js","sourceRoot":"","sources":["../../../src/commands/sync/pull.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,cAAc,GAGjB,MAAM,yBAAyB,CAAC;AACjC,OAAO,MAAM,MAAM,mBAAmB,CAAC;AAEvC,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAExE,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,MAAM,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;KAChE,MAAM,CAAC,YAAY,CAAC;KACpB,UAAU,CAAC,MAAM,EAAE,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC;KACjD,KAAK,CAAC,EAAE,EAAE,EAAE,iBAAiB,CAAC,IAAa,EAAE,CAAC,CAAC;AAKpD,MAAM,UAAU,WAAW,CACvB,MAA8B,EAC9B,MAA+C,EAC/C,IAAY;IAEZ,IAAI,SAA2D,CAAC;IAChE,OAAO,IAAI,cAAc,CACrB;QACI,KAAK,CAAC,KAAK;YACP,mFAAmF;YACnF,MAAM,mBAAmB,CACrB,MAAM,EACN,gBAAgB,CAAC,OAAO,EACxB,IAAI,CACP,CAAC;YACF,SAAS,GAAG,oBAAoB,CAC5B,MAAM,EACN,iBAAiB,CAAC,IAAI,EACtB,mBAAmB,CACtB,CAAC;QACN,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,UAAU;YACjB,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,SAAS,CAAC,IAAI,EAAE,CAAC;YAC/C,IAAI,IAAI,EAAE;gBACN,UAAU,CAAC,KAAK,EAAE,CAAC;gBACnB,OAAO;aACV;YACD,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACnC,CAAC;QACD,MAAM;YACF,SAAS,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;gBAC3B,KAAK,CAAC,CAAC;YACX,CAAC,CAAC,CAAC;YACH,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;QACxD,CAAC;KACJ,EACD;QACI,aAAa,EAAE,EAAE,GAAG,IAAI;QACxB,IAAI,CAAC,KAAK;YACN,OAAO,KAAK,CAAC,UAAU,CAAC;QAC5B,CAAC;KACJ,CACJ,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"pull.js","sourceRoot":"","sources":["../../../src/commands/sync/pull.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,MAAM,MAAM,mBAAmB,CAAC;AAEvC,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAGxE,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,MAAM,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;KAChE,MAAM,CAAC,YAAY,CAAC;KACpB,UAAU,CAAC,MAAM,EAAE,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC;KACjD,KAAK,CAAC,EAAE,EAAE,EAAE,iBAAiB,CAAC,IAAa,EAAE,CAAC,CAAC;AAKpD,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,oBAAoB,CACvC,MAAqB,EACrB,IAAY;IAEZ,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;IACnC,IAAI,IAAI,GAAG,KAAK,CAAC;IACjB,IAAI;QACA,MAAM,mBAAmB,CAAC,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAClE,IAAI,KAAK,EAAE,MAAM,MAAM,IAAI,oBAAoB,CAC3C,MAAM,EACN,iBAAiB,CAAC,IAAI,EACtB,mBAAmB,CACtB,EAAE;YACC,MAAM,MAAM,CAAC,IAAI,CAAC;SACrB;QACD,IAAI,GAAG,IAAI,CAAC;KACf;YAAS;QACN,IAAI,CAAC,IAAI,EAAE;YACP,4DAA4D;YAC5D,IAAI,KAAK,EAAE,MAAM,MAAM,IAAI,oBAAoB,CAC3C,MAAM,EACN,iBAAiB,CAAC,IAAI,EACtB,mBAAmB,CACtB,EAAE;gBACC,KAAK,MAAM,CAAC;aACf;SACJ;QACD,MAAM,CAAC,OAAO,EAAE,CAAC;KACpB;AACL,CAAC;AAED,MAAM,UAAU,WAAW,CACvB,MAAqB,EACrB,IAAY;IAEZ,OAAO,IAAI,kBAAkB,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE;QAC/C,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,oBAAoB,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE;YACzD,MAAM,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;SAClC;IACL,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -1,8 +1,47 @@
1
- import { WritableStream, type BufferedReadableStream, type WritableStreamDefaultWriter } from "@yume-chan/stream-extra";
2
- import Struct from "@yume-chan/struct";
3
- export declare const AdbSyncOkResponse: Struct<{
4
- unused: number;
5
- }, never, Record<never, never>, undefined>;
6
- export declare const ADB_SYNC_MAX_PACKET_SIZE: number;
7
- export declare function adbSyncPush(stream: BufferedReadableStream, writer: WritableStreamDefaultWriter<Uint8Array>, filename: string, mode?: number, mtime?: number, packetSize?: number): WritableStream<Uint8Array>;
1
+ import type { Consumable, ReadableStream } from "@yume-chan/stream-extra";
2
+ import Struct from "@yume-chan/struct";
3
+ import { AdbSyncRequestId } from "./request.js";
4
+ import type { AdbSyncSocket } from "./socket.js";
5
+ export declare const ADB_SYNC_MAX_PACKET_SIZE: number;
6
+ export interface AdbSyncPushV1Options {
7
+ socket: AdbSyncSocket;
8
+ filename: string;
9
+ file: ReadableStream<Consumable<Uint8Array>>;
10
+ mode?: number;
11
+ mtime?: number;
12
+ packetSize?: number;
13
+ }
14
+ export declare const AdbSyncOkResponse: Struct<{
15
+ unused: number;
16
+ }, never, Record<never, never>, undefined>;
17
+ export declare function adbSyncPushV1({ socket, filename, file, mode, mtime, packetSize, }: AdbSyncPushV1Options): Promise<void>;
18
+ export declare enum AdbSyncSendV2Flags {
19
+ None = 0,
20
+ Brotli = 1,
21
+ /**
22
+ * 2
23
+ */
24
+ Lz4 = 2,
25
+ /**
26
+ * 4
27
+ */
28
+ Zstd = 4,
29
+ /**
30
+ * 0x80000000
31
+ */
32
+ DryRun = 2147483648
33
+ }
34
+ export interface AdbSyncPushV2Options extends AdbSyncPushV1Options {
35
+ dryRun?: boolean;
36
+ }
37
+ export declare const AdbSyncSendV2Request: Struct<{
38
+ id: AdbSyncRequestId;
39
+ mode: number;
40
+ flags: AdbSyncSendV2Flags;
41
+ }, never, Record<never, never>, undefined>;
42
+ export declare function adbSyncPushV2({ socket, filename, file, mode, mtime, packetSize, dryRun, }: AdbSyncPushV2Options): Promise<void>;
43
+ export interface AdbSyncPushOptions extends AdbSyncPushV2Options {
44
+ v2: boolean;
45
+ }
46
+ export declare function adbSyncPush(options: AdbSyncPushOptions): Promise<void>;
8
47
  //# sourceMappingURL=push.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"push.d.ts","sourceRoot":"","sources":["../../../src/commands/sync/push.ts"],"names":[],"mappings":"AAAA,OAAO,EAEH,cAAc,EAEd,KAAK,sBAAsB,EAC3B,KAAK,2BAA2B,EACnC,MAAM,yBAAyB,CAAC;AACjC,OAAO,MAAM,MAAM,mBAAmB,CAAC;AAMvC,eAAO,MAAM,iBAAiB;;0CAE7B,CAAC;AAEF,eAAO,MAAM,wBAAwB,QAAY,CAAC;AAElD,wBAAgB,WAAW,CACvB,MAAM,EAAE,sBAAsB,EAC9B,MAAM,EAAE,2BAA2B,CAAC,UAAU,CAAC,EAC/C,QAAQ,EAAE,MAAM,EAChB,IAAI,GAAE,MAA2C,EACjD,KAAK,GAAE,MAAgC,EACvC,UAAU,GAAE,MAAiC,GAC9C,cAAc,CAAC,UAAU,CAAC,CAyB5B"}
1
+ {"version":3,"file":"push.d.ts","sourceRoot":"","sources":["../../../src/commands/sync/push.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAM1E,OAAO,MAAuB,MAAM,mBAAmB,CAAC;AAExD,OAAO,EAAE,gBAAgB,EAAuB,MAAM,cAAc,CAAC;AAErE,OAAO,KAAK,EAAE,aAAa,EAAuB,MAAM,aAAa,CAAC;AAOtE,eAAO,MAAM,wBAAwB,QAAY,CAAC;AAElD,MAAM,WAAW,oBAAoB;IACjC,MAAM,EAAE,aAAa,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,cAAc,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC;IAC7C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,eAAO,MAAM,iBAAiB;;0CAE7B,CAAC;AAuCF,wBAAsB,aAAa,CAAC,EAChC,MAAM,EACN,QAAQ,EACR,IAAI,EACJ,IAAyC,EACzC,KAA+B,EAC/B,UAAqC,GACxC,EAAE,oBAAoB,iBAStB;AAED,oBAAY,kBAAkB;IAC1B,IAAI,IAAI;IACR,MAAM,IAAI;IACV;;OAEG;IACH,GAAG,IAAS;IACZ;;OAEG;IACH,IAAI,IAAS;IACb;;OAEG;IACH,MAAM,aAAkB;CAC3B;AAED,MAAM,WAAW,oBAAqB,SAAQ,oBAAoB;IAC9D,MAAM,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,eAAO,MAAM,oBAAoB;;;;0CAGsB,CAAC;AAExD,wBAAsB,aAAa,CAAC,EAChC,MAAM,EACN,QAAQ,EACR,IAAI,EACJ,IAAyC,EACzC,KAA+B,EAC/B,UAAqC,EACrC,MAAc,GACjB,EAAE,oBAAoB,iBAqBtB;AAED,MAAM,WAAW,kBAAmB,SAAQ,oBAAoB;IAC5D,EAAE,EAAE,OAAO,CAAC;CACf;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,kBAAkB,iBAUtD"}
@@ -1,23 +1,90 @@
1
- import { ChunkStream, WritableStream, pipeFrom, } from "@yume-chan/stream-extra";
2
- import Struct from "@yume-chan/struct";
3
- import { AdbSyncRequestId, adbSyncWriteRequest } from "./request.js";
4
- import { AdbSyncResponseId, adbSyncReadResponse } from "./response.js";
5
- import { LinuxFileType } from "./stat.js";
6
- export const AdbSyncOkResponse = new Struct({ littleEndian: true }).uint32("unused");
7
- export const ADB_SYNC_MAX_PACKET_SIZE = 64 * 1024;
8
- export function adbSyncPush(stream, writer, filename, mode = (LinuxFileType.File << 12) | 0o666, mtime = (Date.now() / 1000) | 0, packetSize = ADB_SYNC_MAX_PACKET_SIZE) {
9
- return pipeFrom(new WritableStream({
10
- async start() {
11
- const pathAndMode = `${filename},${mode.toString()}`;
12
- await adbSyncWriteRequest(writer, AdbSyncRequestId.Send, pathAndMode);
13
- },
14
- async write(chunk) {
15
- await adbSyncWriteRequest(writer, AdbSyncRequestId.Data, chunk);
16
- },
17
- async close() {
18
- await adbSyncWriteRequest(writer, AdbSyncRequestId.Done, mtime);
19
- await adbSyncReadResponse(stream, AdbSyncResponseId.Ok, AdbSyncOkResponse);
20
- },
21
- }), new ChunkStream(packetSize));
22
- }
1
+ import { AbortController, ConsumableWritableStream, DistributionStream, } from "@yume-chan/stream-extra";
2
+ import Struct, { placeholder } from "@yume-chan/struct";
3
+ import { AdbSyncRequestId, adbSyncWriteRequest } from "./request.js";
4
+ import { AdbSyncResponseId, adbSyncReadResponse } from "./response.js";
5
+ import { LinuxFileType } from "./stat.js";
6
+ const NOOP = () => {
7
+ // no-op
8
+ };
9
+ export const ADB_SYNC_MAX_PACKET_SIZE = 64 * 1024;
10
+ export const AdbSyncOkResponse = new Struct({ littleEndian: true }).uint32("unused");
11
+ async function pipeFile(locked, file, packetSize, mtime) {
12
+ // Read and write in parallel,
13
+ // allow error response to abort the write.
14
+ const abortController = new AbortController();
15
+ file.pipeThrough(new DistributionStream(packetSize, true))
16
+ .pipeTo(new ConsumableWritableStream({
17
+ write: async (chunk) => {
18
+ await adbSyncWriteRequest(locked, AdbSyncRequestId.Data, chunk);
19
+ },
20
+ }), { signal: abortController.signal })
21
+ .then(async () => {
22
+ await adbSyncWriteRequest(locked, AdbSyncRequestId.Done, mtime);
23
+ await locked.flush();
24
+ }, NOOP);
25
+ await adbSyncReadResponse(locked, AdbSyncResponseId.Ok, AdbSyncOkResponse).catch((e) => {
26
+ abortController.abort();
27
+ throw e;
28
+ });
29
+ }
30
+ export async function adbSyncPushV1({ socket, filename, file, mode = (LinuxFileType.File << 12) | 0o666, mtime = (Date.now() / 1000) | 0, packetSize = ADB_SYNC_MAX_PACKET_SIZE, }) {
31
+ const locked = await socket.lock();
32
+ try {
33
+ const pathAndMode = `${filename},${mode.toString()}`;
34
+ await adbSyncWriteRequest(locked, AdbSyncRequestId.Send, pathAndMode);
35
+ await pipeFile(locked, file, packetSize, mtime);
36
+ }
37
+ finally {
38
+ locked.release();
39
+ }
40
+ }
41
+ export var AdbSyncSendV2Flags;
42
+ (function (AdbSyncSendV2Flags) {
43
+ AdbSyncSendV2Flags[AdbSyncSendV2Flags["None"] = 0] = "None";
44
+ AdbSyncSendV2Flags[AdbSyncSendV2Flags["Brotli"] = 1] = "Brotli";
45
+ /**
46
+ * 2
47
+ */
48
+ AdbSyncSendV2Flags[AdbSyncSendV2Flags["Lz4"] = 2] = "Lz4";
49
+ /**
50
+ * 4
51
+ */
52
+ AdbSyncSendV2Flags[AdbSyncSendV2Flags["Zstd"] = 4] = "Zstd";
53
+ /**
54
+ * 0x80000000
55
+ */
56
+ AdbSyncSendV2Flags[AdbSyncSendV2Flags["DryRun"] = 2147483648] = "DryRun";
57
+ })(AdbSyncSendV2Flags = AdbSyncSendV2Flags || (AdbSyncSendV2Flags = {}));
58
+ export const AdbSyncSendV2Request = new Struct({ littleEndian: true })
59
+ .uint32("id", placeholder())
60
+ .uint32("mode")
61
+ .uint32("flags", placeholder());
62
+ export async function adbSyncPushV2({ socket, filename, file, mode = (LinuxFileType.File << 12) | 0o666, mtime = (Date.now() / 1000) | 0, packetSize = ADB_SYNC_MAX_PACKET_SIZE, dryRun = false, }) {
63
+ const locked = await socket.lock();
64
+ try {
65
+ await adbSyncWriteRequest(locked, AdbSyncRequestId.SendV2, filename);
66
+ let flags = AdbSyncSendV2Flags.None;
67
+ if (dryRun) {
68
+ flags |= AdbSyncSendV2Flags.DryRun;
69
+ }
70
+ await locked.write(AdbSyncSendV2Request.serialize({
71
+ id: AdbSyncRequestId.SendV2,
72
+ mode,
73
+ flags,
74
+ }));
75
+ await pipeFile(locked, file, packetSize, mtime);
76
+ }
77
+ finally {
78
+ locked.release();
79
+ }
80
+ }
81
+ export function adbSyncPush(options) {
82
+ if (options.v2) {
83
+ return adbSyncPushV2(options);
84
+ }
85
+ if (options.dryRun) {
86
+ throw new Error("dryRun is not supported in v1");
87
+ }
88
+ return adbSyncPushV1(options);
89
+ }
23
90
  //# sourceMappingURL=push.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"push.js","sourceRoot":"","sources":["../../../src/commands/sync/push.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,WAAW,EACX,cAAc,EACd,QAAQ,GAGX,MAAM,yBAAyB,CAAC;AACjC,OAAO,MAAM,MAAM,mBAAmB,CAAC;AAEvC,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE1C,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,MAAM,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CACtE,QAAQ,CACX,CAAC;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAG,EAAE,GAAG,IAAI,CAAC;AAElD,MAAM,UAAU,WAAW,CACvB,MAA8B,EAC9B,MAA+C,EAC/C,QAAgB,EAChB,OAAe,CAAC,aAAa,CAAC,IAAI,IAAI,EAAE,CAAC,GAAG,KAAK,EACjD,QAAgB,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,EACvC,aAAqB,wBAAwB;IAE7C,OAAO,QAAQ,CACX,IAAI,cAAc,CAAa;QAC3B,KAAK,CAAC,KAAK;YACP,MAAM,WAAW,GAAG,GAAG,QAAQ,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC;YACrD,MAAM,mBAAmB,CACrB,MAAM,EACN,gBAAgB,CAAC,IAAI,EACrB,WAAW,CACd,CAAC;QACN,CAAC;QACD,KAAK,CAAC,KAAK,CAAC,KAAK;YACb,MAAM,mBAAmB,CAAC,MAAM,EAAE,gBAAgB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACpE,CAAC;QACD,KAAK,CAAC,KAAK;YACP,MAAM,mBAAmB,CAAC,MAAM,EAAE,gBAAgB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAChE,MAAM,mBAAmB,CACrB,MAAM,EACN,iBAAiB,CAAC,EAAE,EACpB,iBAAiB,CACpB,CAAC;QACN,CAAC;KACJ,CAAC,EACF,IAAI,WAAW,CAAC,UAAU,CAAC,CAC9B,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"push.js","sourceRoot":"","sources":["../../../src/commands/sync/push.ts"],"names":[],"mappings":"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"}
@@ -1,24 +1,27 @@
1
- import { type WritableStreamDefaultWriter } from "@yume-chan/stream-extra";
2
- import Struct from "@yume-chan/struct";
3
- export declare enum AdbSyncRequestId {
4
- List = "LIST",
5
- List2 = "LIS2",
6
- Send = "SEND",
7
- Lstat = "STAT",
8
- Stat = "STA2",
9
- Lstat2 = "LST2",
10
- Data = "DATA",
11
- Done = "DONE",
12
- Receive = "RECV"
13
- }
14
- export declare const AdbSyncNumberRequest: Struct<{
15
- id: string;
16
- arg: number;
17
- }, never, Record<never, never>, undefined>;
18
- export declare const AdbSyncDataRequest: Struct<{
19
- id: string;
20
- arg: number;
21
- data: Uint8Array;
22
- }, "arg", Record<never, never>, undefined>;
23
- export declare function adbSyncWriteRequest(writer: WritableStreamDefaultWriter<Uint8Array>, id: AdbSyncRequestId | string, value: number | string | Uint8Array): Promise<void>;
1
+ import Struct from "@yume-chan/struct";
2
+ export declare enum AdbSyncRequestId {
3
+ List = "LIST",
4
+ ListV2 = "LIS2",
5
+ Send = "SEND",
6
+ SendV2 = "SND2",
7
+ Lstat = "STAT",
8
+ Stat = "STA2",
9
+ LstatV2 = "LST2",
10
+ Data = "DATA",
11
+ Done = "DONE",
12
+ Receive = "RECV"
13
+ }
14
+ export declare const AdbSyncNumberRequest: Struct<{
15
+ id: string;
16
+ arg: number;
17
+ }, never, Record<never, never>, undefined>;
18
+ export declare const AdbSyncDataRequest: Struct<{
19
+ id: string;
20
+ arg: number;
21
+ data: Uint8Array;
22
+ }, "arg", Record<never, never>, undefined>;
23
+ export interface AdbSyncWritable {
24
+ write(buffer: Uint8Array): Promise<void>;
25
+ }
26
+ export declare function adbSyncWriteRequest(writable: AdbSyncWritable, id: AdbSyncRequestId | string, value: number | string | Uint8Array): Promise<void>;
24
27
  //# sourceMappingURL=request.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../../src/commands/sync/request.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,2BAA2B,EAAE,MAAM,yBAAyB,CAAC;AAC3E,OAAO,MAAM,MAAM,mBAAmB,CAAC;AAIvC,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;;;0CAEf,CAAC;AAEnB,eAAO,MAAM,kBAAkB;;;;0CAEgB,CAAC;AAEhD,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;AAIvC,oBAAY,gBAAgB;IACxB,IAAI,SAAS;IACb,MAAM,SAAS;IACf,IAAI,SAAS;IACb,MAAM,SAAS;IACf,KAAK,SAAS;IACd,IAAI,SAAS;IACb,OAAO,SAAS;IAChB,IAAI,SAAS;IACb,IAAI,SAAS;IACb,OAAO,SAAS;CACnB;AAED,eAAO,MAAM,oBAAoB;;;0CAEf,CAAC;AAEnB,eAAO,MAAM,kBAAkB;;;;0CAEgB,CAAC;AAEhD,MAAM,WAAW,eAAe;IAC5B,KAAK,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5C;AAED,wBAAsB,mBAAmB,CACrC,QAAQ,EAAE,eAAe,EACzB,EAAE,EAAE,gBAAgB,GAAG,MAAM,EAC7B,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,UAAU,GACpC,OAAO,CAAC,IAAI,CAAC,CAoBf"}