@yume-chan/adb 0.0.17 → 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 (177) hide show
  1. package/CHANGELOG.json +27 -0
  2. package/CHANGELOG.md +16 -1
  3. package/LICENSE +1 -1
  4. package/esm/adb.d.ts +63 -60
  5. package/esm/adb.d.ts.map +1 -1
  6. package/esm/adb.js +257 -229
  7. package/esm/adb.js.map +1 -1
  8. package/esm/auth.d.ts +51 -51
  9. package/esm/auth.d.ts.map +1 -1
  10. package/esm/auth.js +95 -96
  11. package/esm/auth.js.map +1 -1
  12. package/esm/backend.d.ts +8 -8
  13. package/esm/backend.d.ts.map +1 -1
  14. package/esm/backend.js +1 -1
  15. package/esm/commands/base.d.ts +6 -6
  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 -47
  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 +27 -21
  28. package/esm/commands/install.js.map +1 -1
  29. package/esm/commands/power.d.ts +22 -22
  30. package/esm/commands/power.d.ts.map +1 -1
  31. package/esm/commands/power.js +48 -44
  32. package/esm/commands/power.js.map +1 -1
  33. package/esm/commands/reverse.d.ts +41 -28
  34. package/esm/commands/reverse.d.ts.map +1 -1
  35. package/esm/commands/reverse.js +125 -98
  36. package/esm/commands/reverse.js.map +1 -1
  37. package/esm/commands/subprocess/command.d.ts +57 -51
  38. package/esm/commands/subprocess/command.d.ts.map +1 -1
  39. package/esm/commands/subprocess/command.js +86 -82
  40. package/esm/commands/subprocess/command.js.map +1 -1
  41. package/esm/commands/subprocess/index.d.ts +3 -3
  42. package/esm/commands/subprocess/index.js +3 -3
  43. package/esm/commands/subprocess/protocols/index.d.ts +3 -3
  44. package/esm/commands/subprocess/protocols/index.js +3 -3
  45. package/esm/commands/subprocess/protocols/none.d.ts +35 -35
  46. package/esm/commands/subprocess/protocols/none.d.ts.map +1 -1
  47. package/esm/commands/subprocess/protocols/none.js +65 -55
  48. package/esm/commands/subprocess/protocols/none.js.map +1 -1
  49. package/esm/commands/subprocess/protocols/shell.d.ts +39 -38
  50. package/esm/commands/subprocess/protocols/shell.d.ts.map +1 -1
  51. package/esm/commands/subprocess/protocols/shell.js +166 -154
  52. package/esm/commands/subprocess/protocols/shell.js.map +1 -1
  53. package/esm/commands/subprocess/protocols/types.d.ts +49 -49
  54. package/esm/commands/subprocess/protocols/types.d.ts.map +1 -1
  55. package/esm/commands/subprocess/protocols/types.js +1 -1
  56. package/esm/commands/subprocess/utils.d.ts +1 -1
  57. package/esm/commands/subprocess/utils.js +18 -18
  58. package/esm/commands/sync/index.d.ts +8 -7
  59. package/esm/commands/sync/index.d.ts.map +1 -1
  60. package/esm/commands/sync/index.js +8 -7
  61. package/esm/commands/sync/index.js.map +1 -1
  62. package/esm/commands/sync/list.d.ts +42 -40
  63. package/esm/commands/sync/list.d.ts.map +1 -1
  64. package/esm/commands/sync/list.js +67 -35
  65. package/esm/commands/sync/list.js.map +1 -1
  66. package/esm/commands/sync/pull.d.ts +13 -11
  67. package/esm/commands/sync/pull.d.ts.map +1 -1
  68. package/esm/commands/sync/pull.js +35 -36
  69. package/esm/commands/sync/pull.js.map +1 -1
  70. package/esm/commands/sync/push.d.ts +46 -7
  71. package/esm/commands/sync/push.d.ts.map +1 -1
  72. package/esm/commands/sync/push.js +89 -23
  73. package/esm/commands/sync/push.js.map +1 -1
  74. package/esm/commands/sync/request.d.ts +26 -23
  75. package/esm/commands/sync/request.d.ts.map +1 -1
  76. package/esm/commands/sync/request.js +40 -42
  77. package/esm/commands/sync/request.js.map +1 -1
  78. package/esm/commands/sync/response.d.ts +19 -19
  79. package/esm/commands/sync/response.d.ts.map +1 -1
  80. package/esm/commands/sync/response.js +54 -54
  81. package/esm/commands/sync/response.js.map +1 -1
  82. package/esm/commands/sync/socket.d.ts +27 -0
  83. package/esm/commands/sync/socket.d.ts.map +1 -0
  84. package/esm/commands/sync/socket.js +66 -0
  85. package/esm/commands/sync/socket.js.map +1 -0
  86. package/esm/commands/sync/stat.d.ts +72 -72
  87. package/esm/commands/sync/stat.d.ts.map +1 -1
  88. package/esm/commands/sync/stat.js +116 -94
  89. package/esm/commands/sync/stat.js.map +1 -1
  90. package/esm/commands/sync/sync.d.ts +72 -60
  91. package/esm/commands/sync/sync.d.ts.map +1 -1
  92. package/esm/commands/sync/sync.js +127 -148
  93. package/esm/commands/sync/sync.js.map +1 -1
  94. package/esm/commands/tcpip.d.ts +5 -5
  95. package/esm/commands/tcpip.js +18 -18
  96. package/esm/crypto.d.ts +36 -36
  97. package/esm/crypto.d.ts.map +1 -1
  98. package/esm/crypto.js +248 -238
  99. package/esm/crypto.js.map +1 -1
  100. package/esm/features.d.ts +10 -7
  101. package/esm/features.d.ts.map +1 -1
  102. package/esm/features.js +13 -10
  103. package/esm/features.js.map +1 -1
  104. package/esm/index.d.ts +9 -9
  105. package/esm/index.d.ts.map +1 -1
  106. package/esm/index.js +9 -9
  107. package/esm/index.js.map +1 -1
  108. package/esm/packet.d.ts +45 -46
  109. package/esm/packet.d.ts.map +1 -1
  110. package/esm/packet.js +43 -46
  111. package/esm/packet.js.map +1 -1
  112. package/esm/socket/dispatcher.d.ts +59 -59
  113. package/esm/socket/dispatcher.d.ts.map +1 -1
  114. package/esm/socket/dispatcher.js +223 -231
  115. package/esm/socket/dispatcher.js.map +1 -1
  116. package/esm/socket/index.d.ts +2 -2
  117. package/esm/socket/index.js +2 -2
  118. package/esm/socket/socket.d.ts +59 -59
  119. package/esm/socket/socket.d.ts.map +1 -1
  120. package/esm/socket/socket.js +118 -98
  121. package/esm/socket/socket.js.map +1 -1
  122. package/esm/utils/auto-reset-event.d.ts +9 -9
  123. package/esm/utils/auto-reset-event.d.ts.map +1 -1
  124. package/esm/utils/auto-reset-event.js +33 -33
  125. package/esm/utils/auto-reset-event.js.map +1 -1
  126. package/esm/utils/base64.d.ts +27 -27
  127. package/esm/utils/base64.d.ts.map +1 -1
  128. package/esm/utils/base64.js +246 -245
  129. package/esm/utils/base64.js.map +1 -1
  130. package/esm/utils/conditional-variable.d.ts +9 -0
  131. package/esm/utils/conditional-variable.d.ts.map +1 -0
  132. package/esm/utils/conditional-variable.js +34 -0
  133. package/esm/utils/conditional-variable.js.map +1 -0
  134. package/esm/utils/index.d.ts +4 -3
  135. package/esm/utils/index.d.ts.map +1 -1
  136. package/esm/utils/index.js +4 -3
  137. package/esm/utils/index.js.map +1 -1
  138. package/package.json +17 -13
  139. package/src/adb.ts +160 -101
  140. package/src/auth.ts +31 -22
  141. package/src/backend.ts +6 -4
  142. package/src/commands/base.ts +2 -2
  143. package/src/commands/framebuffer.ts +37 -41
  144. package/src/commands/index.ts +7 -8
  145. package/src/commands/power.ts +15 -11
  146. package/src/commands/reverse.ts +74 -30
  147. package/src/commands/subprocess/command.ts +34 -23
  148. package/src/commands/subprocess/index.ts +3 -3
  149. package/src/commands/subprocess/protocols/index.ts +3 -3
  150. package/src/commands/subprocess/protocols/none.ts +26 -11
  151. package/src/commands/subprocess/protocols/shell.ts +110 -56
  152. package/src/commands/subprocess/protocols/types.ts +10 -6
  153. package/src/commands/subprocess/utils.ts +1 -1
  154. package/src/commands/sync/index.ts +8 -7
  155. package/src/commands/sync/list.ts +74 -28
  156. package/src/commands/sync/pull.ts +49 -37
  157. package/src/commands/sync/push.ts +153 -32
  158. package/src/commands/sync/request.ts +37 -34
  159. package/src/commands/sync/response.ts +34 -27
  160. package/src/commands/sync/socket.ts +97 -0
  161. package/src/commands/sync/stat.ts +98 -70
  162. package/src/commands/sync/sync.ts +78 -97
  163. package/src/commands/tcpip.ts +5 -5
  164. package/src/crypto.ts +60 -32
  165. package/src/features.ts +9 -6
  166. package/src/index.ts +9 -10
  167. package/src/packet.ts +41 -46
  168. package/src/socket/dispatcher.ts +130 -108
  169. package/src/socket/index.ts +2 -2
  170. package/src/socket/socket.ts +84 -34
  171. package/src/utils/auto-reset-event.ts +16 -17
  172. package/src/utils/base64.ts +51 -41
  173. package/src/utils/conditional-variable.ts +45 -0
  174. package/src/utils/index.ts +4 -3
  175. package/tsconfig.build.json +1 -1
  176. package/tsconfig.build.tsbuildinfo +1 -1
  177. package/src/commands/install.ts +0 -32
@@ -1,95 +1,117 @@
1
- import Struct, { placeholder } from '@yume-chan/struct';
2
- import { AdbSyncRequestId, adbSyncWriteRequest } from './request.js';
3
- import { adbSyncReadResponse, AdbSyncResponseId } from './response.js';
4
- // https://github.com/python/cpython/blob/4e581d64b8aff3e2eda99b12f080c877bb78dfca/Lib/stat.py#L36
5
- export var LinuxFileType;
6
- (function (LinuxFileType) {
7
- LinuxFileType[LinuxFileType["Directory"] = 4] = "Directory";
8
- LinuxFileType[LinuxFileType["File"] = 8] = "File";
9
- LinuxFileType[LinuxFileType["Link"] = 10] = "Link";
10
- })(LinuxFileType = LinuxFileType || (LinuxFileType = {}));
11
- export const AdbSyncLstatResponse = new Struct({ littleEndian: true })
12
- .int32('mode')
13
- .int32('size')
14
- .int32('mtime')
15
- .extra({
16
- id: AdbSyncResponseId.Lstat,
17
- get type() { return this.mode >> 12; },
18
- get permission() { return this.mode & 4095; },
19
- })
20
- .postDeserialize((object) => {
21
- if (object.mode === 0 &&
22
- object.size === 0 &&
23
- object.mtime === 0) {
24
- throw new Error('lstat failed');
25
- }
26
- });
27
- export var AdbSyncStatErrorCode;
28
- (function (AdbSyncStatErrorCode) {
29
- AdbSyncStatErrorCode[AdbSyncStatErrorCode["SUCCESS"] = 0] = "SUCCESS";
30
- AdbSyncStatErrorCode[AdbSyncStatErrorCode["EACCES"] = 13] = "EACCES";
31
- AdbSyncStatErrorCode[AdbSyncStatErrorCode["EEXIST"] = 17] = "EEXIST";
32
- AdbSyncStatErrorCode[AdbSyncStatErrorCode["EFAULT"] = 14] = "EFAULT";
33
- AdbSyncStatErrorCode[AdbSyncStatErrorCode["EFBIG"] = 27] = "EFBIG";
34
- AdbSyncStatErrorCode[AdbSyncStatErrorCode["EINTR"] = 4] = "EINTR";
35
- AdbSyncStatErrorCode[AdbSyncStatErrorCode["EINVAL"] = 22] = "EINVAL";
36
- AdbSyncStatErrorCode[AdbSyncStatErrorCode["EIO"] = 5] = "EIO";
37
- AdbSyncStatErrorCode[AdbSyncStatErrorCode["EISDIR"] = 21] = "EISDIR";
38
- AdbSyncStatErrorCode[AdbSyncStatErrorCode["ELOOP"] = 40] = "ELOOP";
39
- AdbSyncStatErrorCode[AdbSyncStatErrorCode["EMFILE"] = 24] = "EMFILE";
40
- AdbSyncStatErrorCode[AdbSyncStatErrorCode["ENAMETOOLONG"] = 36] = "ENAMETOOLONG";
41
- AdbSyncStatErrorCode[AdbSyncStatErrorCode["ENFILE"] = 23] = "ENFILE";
42
- AdbSyncStatErrorCode[AdbSyncStatErrorCode["ENOENT"] = 2] = "ENOENT";
43
- AdbSyncStatErrorCode[AdbSyncStatErrorCode["ENOMEM"] = 12] = "ENOMEM";
44
- AdbSyncStatErrorCode[AdbSyncStatErrorCode["ENOSPC"] = 28] = "ENOSPC";
45
- AdbSyncStatErrorCode[AdbSyncStatErrorCode["ENOTDIR"] = 20] = "ENOTDIR";
46
- AdbSyncStatErrorCode[AdbSyncStatErrorCode["EOVERFLOW"] = 75] = "EOVERFLOW";
47
- AdbSyncStatErrorCode[AdbSyncStatErrorCode["EPERM"] = 1] = "EPERM";
48
- AdbSyncStatErrorCode[AdbSyncStatErrorCode["EROFS"] = 30] = "EROFS";
49
- AdbSyncStatErrorCode[AdbSyncStatErrorCode["ETXTBSY"] = 26] = "ETXTBSY";
50
- })(AdbSyncStatErrorCode = AdbSyncStatErrorCode || (AdbSyncStatErrorCode = {}));
51
- export const AdbSyncStatResponse = new Struct({ littleEndian: true })
52
- .uint32('error', placeholder())
53
- .uint64('dev')
54
- .uint64('ino')
55
- .uint32('mode')
56
- .uint32('nlink')
57
- .uint32('uid')
58
- .uint32('gid')
59
- .uint64('size')
60
- .uint64('atime')
61
- .uint64('mtime')
62
- .uint64('ctime')
63
- .extra({
64
- id: AdbSyncResponseId.Stat,
65
- get type() { return this.mode >> 12; },
66
- get permission() { return this.mode & 4095; },
67
- })
68
- .postDeserialize((object) => {
69
- if (object.error) {
70
- throw new Error(AdbSyncStatErrorCode[object.error]);
71
- }
72
- });
73
- export async function adbSyncLstat(stream, writer, path, v2) {
74
- if (v2) {
75
- await adbSyncWriteRequest(writer, AdbSyncRequestId.Lstat2, path);
76
- return await adbSyncReadResponse(stream, AdbSyncResponseId.Lstat2, AdbSyncStatResponse);
77
- }
78
- else {
79
- await adbSyncWriteRequest(writer, AdbSyncRequestId.Lstat, path);
80
- const response = await adbSyncReadResponse(stream, AdbSyncResponseId.Lstat, AdbSyncLstatResponse);
81
- return {
82
- mode: response.mode,
83
- // Convert to `BigInt` to make it compatible with `AdbSyncStatResponse`
84
- size: BigInt(response.size),
85
- mtime: BigInt(response.mtime),
86
- get type() { return response.type; },
87
- get permission() { return response.permission; },
88
- };
89
- }
90
- }
91
- export async function adbSyncStat(stream, writer, path) {
92
- await adbSyncWriteRequest(writer, AdbSyncRequestId.Stat, path);
93
- return await adbSyncReadResponse(stream, AdbSyncResponseId.Stat, AdbSyncStatResponse);
94
- }
1
+ import Struct, { placeholder } from "@yume-chan/struct";
2
+ import { AdbSyncRequestId, adbSyncWriteRequest } from "./request.js";
3
+ import { AdbSyncResponseId, adbSyncReadResponse } from "./response.js";
4
+ // https://github.com/python/cpython/blob/4e581d64b8aff3e2eda99b12f080c877bb78dfca/Lib/stat.py#L36
5
+ export var LinuxFileType;
6
+ (function (LinuxFileType) {
7
+ LinuxFileType[LinuxFileType["Directory"] = 4] = "Directory";
8
+ LinuxFileType[LinuxFileType["File"] = 8] = "File";
9
+ LinuxFileType[LinuxFileType["Link"] = 10] = "Link";
10
+ })(LinuxFileType = LinuxFileType || (LinuxFileType = {}));
11
+ export const AdbSyncLstatResponse = new Struct({ littleEndian: true })
12
+ .int32("mode")
13
+ .int32("size")
14
+ .int32("mtime")
15
+ .extra({
16
+ id: AdbSyncResponseId.Lstat,
17
+ get type() {
18
+ return (this.mode >> 12);
19
+ },
20
+ get permission() {
21
+ return this.mode & 4095;
22
+ },
23
+ })
24
+ .postDeserialize((object) => {
25
+ if (object.mode === 0 && object.size === 0 && object.mtime === 0) {
26
+ throw new Error("lstat error");
27
+ }
28
+ });
29
+ export var AdbSyncStatErrorCode;
30
+ (function (AdbSyncStatErrorCode) {
31
+ AdbSyncStatErrorCode[AdbSyncStatErrorCode["SUCCESS"] = 0] = "SUCCESS";
32
+ AdbSyncStatErrorCode[AdbSyncStatErrorCode["EACCES"] = 13] = "EACCES";
33
+ AdbSyncStatErrorCode[AdbSyncStatErrorCode["EEXIST"] = 17] = "EEXIST";
34
+ AdbSyncStatErrorCode[AdbSyncStatErrorCode["EFAULT"] = 14] = "EFAULT";
35
+ AdbSyncStatErrorCode[AdbSyncStatErrorCode["EFBIG"] = 27] = "EFBIG";
36
+ AdbSyncStatErrorCode[AdbSyncStatErrorCode["EINTR"] = 4] = "EINTR";
37
+ AdbSyncStatErrorCode[AdbSyncStatErrorCode["EINVAL"] = 22] = "EINVAL";
38
+ AdbSyncStatErrorCode[AdbSyncStatErrorCode["EIO"] = 5] = "EIO";
39
+ AdbSyncStatErrorCode[AdbSyncStatErrorCode["EISDIR"] = 21] = "EISDIR";
40
+ AdbSyncStatErrorCode[AdbSyncStatErrorCode["ELOOP"] = 40] = "ELOOP";
41
+ AdbSyncStatErrorCode[AdbSyncStatErrorCode["EMFILE"] = 24] = "EMFILE";
42
+ AdbSyncStatErrorCode[AdbSyncStatErrorCode["ENAMETOOLONG"] = 36] = "ENAMETOOLONG";
43
+ AdbSyncStatErrorCode[AdbSyncStatErrorCode["ENFILE"] = 23] = "ENFILE";
44
+ AdbSyncStatErrorCode[AdbSyncStatErrorCode["ENOENT"] = 2] = "ENOENT";
45
+ AdbSyncStatErrorCode[AdbSyncStatErrorCode["ENOMEM"] = 12] = "ENOMEM";
46
+ AdbSyncStatErrorCode[AdbSyncStatErrorCode["ENOSPC"] = 28] = "ENOSPC";
47
+ AdbSyncStatErrorCode[AdbSyncStatErrorCode["ENOTDIR"] = 20] = "ENOTDIR";
48
+ AdbSyncStatErrorCode[AdbSyncStatErrorCode["EOVERFLOW"] = 75] = "EOVERFLOW";
49
+ AdbSyncStatErrorCode[AdbSyncStatErrorCode["EPERM"] = 1] = "EPERM";
50
+ AdbSyncStatErrorCode[AdbSyncStatErrorCode["EROFS"] = 30] = "EROFS";
51
+ AdbSyncStatErrorCode[AdbSyncStatErrorCode["ETXTBSY"] = 26] = "ETXTBSY";
52
+ })(AdbSyncStatErrorCode = AdbSyncStatErrorCode || (AdbSyncStatErrorCode = {}));
53
+ export const AdbSyncStatResponse = new Struct({ littleEndian: true })
54
+ .uint32("error", placeholder())
55
+ .uint64("dev")
56
+ .uint64("ino")
57
+ .uint32("mode")
58
+ .uint32("nlink")
59
+ .uint32("uid")
60
+ .uint32("gid")
61
+ .uint64("size")
62
+ .uint64("atime")
63
+ .uint64("mtime")
64
+ .uint64("ctime")
65
+ .extra({
66
+ id: AdbSyncResponseId.Stat,
67
+ get type() {
68
+ return (this.mode >> 12);
69
+ },
70
+ get permission() {
71
+ return this.mode & 4095;
72
+ },
73
+ })
74
+ .postDeserialize((object) => {
75
+ if (object.error) {
76
+ throw new Error(AdbSyncStatErrorCode[object.error]);
77
+ }
78
+ });
79
+ export async function adbSyncLstat(socket, path, v2) {
80
+ const locked = await socket.lock();
81
+ try {
82
+ if (v2) {
83
+ await adbSyncWriteRequest(locked, AdbSyncRequestId.LstatV2, path);
84
+ return await adbSyncReadResponse(locked, AdbSyncResponseId.Lstat2, AdbSyncStatResponse);
85
+ }
86
+ else {
87
+ await adbSyncWriteRequest(locked, AdbSyncRequestId.Lstat, path);
88
+ const response = await adbSyncReadResponse(locked, AdbSyncResponseId.Lstat, AdbSyncLstatResponse);
89
+ return {
90
+ mode: response.mode,
91
+ // Convert to `BigInt` to make it compatible with `AdbSyncStatResponse`
92
+ size: BigInt(response.size),
93
+ mtime: BigInt(response.mtime),
94
+ get type() {
95
+ return response.type;
96
+ },
97
+ get permission() {
98
+ return response.permission;
99
+ },
100
+ };
101
+ }
102
+ }
103
+ finally {
104
+ locked.release();
105
+ }
106
+ }
107
+ export async function adbSyncStat(socket, path) {
108
+ const locked = await socket.lock();
109
+ try {
110
+ await adbSyncWriteRequest(locked, AdbSyncRequestId.Stat, path);
111
+ return await adbSyncReadResponse(locked, AdbSyncResponseId.Stat, AdbSyncStatResponse);
112
+ }
113
+ finally {
114
+ locked.release();
115
+ }
116
+ }
95
117
  //# 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":"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"}
@@ -1,61 +1,73 @@
1
- import { AutoDisposable } from '@yume-chan/event';
2
- import { BufferedReadableStream, ReadableStream, WritableStream, WritableStreamDefaultWriter } from '@yume-chan/stream-extra';
3
- import type { Adb } from '../../adb.js';
4
- import type { AdbSocket } from '../../socket/index.js';
5
- import { AutoResetEvent } from '../../utils/index.js';
6
- import { type AdbSyncEntry } from './list.js';
7
- /**
8
- * A simplified `dirname` function that only handles absolute unix paths.
9
- * @param path an absolute unix path
10
- * @returns the directory name of the input path
11
- */
12
- export declare function dirname(path: string): string;
13
- export declare class AdbSync extends AutoDisposable {
14
- protected adb: Adb;
15
- protected stream: BufferedReadableStream;
16
- protected writer: WritableStreamDefaultWriter<Uint8Array>;
17
- protected sendLock: AutoResetEvent;
18
- get supportsStat(): boolean;
19
- get supportsList2(): boolean;
20
- get fixedPushMkdir(): boolean;
21
- get needPushMkdirWorkaround(): boolean;
22
- constructor(adb: Adb, socket: AdbSocket);
23
- lstat(path: string): Promise<import("./stat.js").AdbSyncStat>;
24
- stat(path: string): Promise<{
25
- id: import("./response.js").AdbSyncResponseId.Stat;
26
- readonly type: import("./stat.js").LinuxFileType;
27
- readonly permission: number;
28
- error: import("./stat.js").AdbSyncStatErrorCode;
29
- dev: bigint;
30
- ino: bigint;
31
- mode: number;
32
- nlink: number;
33
- uid: number;
34
- gid: number;
35
- size: bigint;
36
- atime: bigint;
37
- mtime: bigint;
38
- ctime: bigint;
39
- }>;
40
- isDirectory(path: string): Promise<boolean>;
41
- opendir(path: string): AsyncGenerator<AdbSyncEntry, void, void>;
42
- readdir(path: string): Promise<AdbSyncEntry[]>;
43
- /**
44
- * Read the content of a file on device.
45
- *
46
- * @param filename The full path of the file on device to read.
47
- * @returns A `ReadableStream` that reads from the file.
48
- */
49
- read(filename: string): ReadableStream<Uint8Array>;
50
- /**
51
- * Write (or overwrite) a file on device.
52
- *
53
- * @param filename The full path of the file on device to write.
54
- * @param mode The unix permissions of the file.
55
- * @param mtime The modified time of the file.
56
- * @returns A `WritableStream` that writes to the file.
57
- */
58
- write(filename: string, mode?: number, mtime?: number): WritableStream<Uint8Array>;
59
- dispose(): Promise<void>;
60
- }
1
+ import { AutoDisposable } from "@yume-chan/event";
2
+ import type { Consumable, ReadableStream } from "@yume-chan/stream-extra";
3
+ import type { Adb } from "../../adb.js";
4
+ import type { AdbSocket } from "../../socket/index.js";
5
+ import type { AdbSyncEntry } from "./list.js";
6
+ import { AdbSyncSocket } from "./socket.js";
7
+ /**
8
+ * A simplified `dirname` function that only handles absolute unix paths.
9
+ * @param path an absolute unix path
10
+ * @returns the directory name of the input path
11
+ */
12
+ export declare function dirname(path: string): string;
13
+ export interface AdbSyncWriteOptions {
14
+ filename: string;
15
+ file: ReadableStream<Consumable<Uint8Array>>;
16
+ mode?: number;
17
+ mtime?: number;
18
+ dryRun?: boolean;
19
+ }
20
+ export declare class AdbSync extends AutoDisposable {
21
+ protected _adb: Adb;
22
+ protected _socket: AdbSyncSocket;
23
+ private _supportsStat;
24
+ private _supportsListV2;
25
+ private _fixedPushMkdir;
26
+ private _supportsSendReceiveV2;
27
+ private _needPushMkdirWorkaround;
28
+ get supportsStat(): boolean;
29
+ get supportsListV2(): boolean;
30
+ get fixedPushMkdir(): boolean;
31
+ get supportsSendReceiveV2(): boolean;
32
+ get needPushMkdirWorkaround(): boolean;
33
+ constructor(adb: Adb, socket: AdbSocket);
34
+ lstat(path: string): Promise<import("./stat.js").AdbSyncStat>;
35
+ stat(path: string): Promise<{
36
+ id: import("./response.js").AdbSyncResponseId.Stat;
37
+ readonly type: import("./stat.js").LinuxFileType;
38
+ readonly permission: number;
39
+ error: import("./stat.js").AdbSyncStatErrorCode;
40
+ dev: bigint;
41
+ ino: bigint;
42
+ mode: number;
43
+ nlink: number;
44
+ uid: number;
45
+ gid: number;
46
+ size: bigint;
47
+ atime: bigint;
48
+ mtime: bigint;
49
+ ctime: bigint;
50
+ }>;
51
+ isDirectory(path: string): Promise<boolean>;
52
+ opendir(path: string): AsyncGenerator<AdbSyncEntry, void, void>;
53
+ readdir(path: string): Promise<AdbSyncEntry[]>;
54
+ /**
55
+ * Read the content of a file on device.
56
+ *
57
+ * @param filename The full path of the file on device to read.
58
+ * @returns A `ReadableStream` that reads from the file.
59
+ */
60
+ read(filename: string): ReadableStream<Uint8Array>;
61
+ /**
62
+ * Write (or overwrite) a file on device.
63
+ *
64
+ * @param filename The full path of the file on device to write.
65
+ * @param file The content to write.
66
+ * @param mode The unix permissions of the file.
67
+ * @param mtime The modified time of the file.
68
+ * @returns A `WritableStream` that writes to the file.
69
+ */
70
+ write(options: AdbSyncWriteOptions): Promise<void>;
71
+ dispose(): Promise<void>;
72
+ }
61
73
  //# sourceMappingURL=sync.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../../src/commands/sync/sync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,sBAAsB,EAAE,cAAc,EAA0C,cAAc,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAC;AAEtK,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAExC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO,EAAkB,KAAK,YAAY,EAAE,MAAM,WAAW,CAAC;AAK9D;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAS5C;AAED,qBAAa,OAAQ,SAAQ,cAAc;IACvC,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC;IAEnB,SAAS,CAAC,MAAM,EAAE,sBAAsB,CAAC;IAIzC,SAAS,CAAC,MAAM,EAAE,2BAA2B,CAAC,UAAU,CAAC,CAAC;IAC1D,SAAS,CAAC,QAAQ,iBAA4C;IAE9D,IAAW,YAAY,IAAI,OAAO,CAEjC;IAED,IAAW,aAAa,IAAI,OAAO,CAElC;IAED,IAAW,cAAc,IAAI,OAAO,CAEnC;IAED,IAAW,uBAAuB,IAAI,OAAO,CAG5C;gBAEkB,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS;IAQjC,KAAK,CAAC,IAAI,EAAE,MAAM;IAUlB,IAAI,CAAC,IAAI,EAAE,MAAM;;;;;;;;;;;;;;;;IAcjB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAS1C,OAAO,CACjB,IAAI,EAAE,MAAM,GACb,cAAc,CAAC,YAAY,EAAE,IAAI,EAAE,IAAI,CAAC;IAU9B,OAAO,CAAC,IAAI,EAAE,MAAM;IAQjC;;;;;OAKG;IACI,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,CAAC,UAAU,CAAC;IAYzD;;;;;;;OAOG;IACI,KAAK,CACR,QAAQ,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE,MAAM,EACb,KAAK,CAAC,EAAE,MAAM,GACf,cAAc,CAAC,UAAU,CAAC;IA8BP,OAAO;CAIhC"}
1
+ {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../../src/commands/sync/sync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAE1E,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAExC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAGvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAI9C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAS5C;AAED,MAAM,WAAW,mBAAmB;IAChC,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,MAAM,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,qBAAa,OAAQ,SAAQ,cAAc;IACvC,SAAS,CAAC,IAAI,EAAE,GAAG,CAAC;IACpB,SAAS,CAAC,OAAO,EAAE,aAAa,CAAC;IAEjC,OAAO,CAAC,aAAa,CAAU;IAC/B,OAAO,CAAC,eAAe,CAAU;IACjC,OAAO,CAAC,eAAe,CAAU;IACjC,OAAO,CAAC,sBAAsB,CAAU;IACxC,OAAO,CAAC,wBAAwB,CAAU;IAE1C,IAAW,YAAY,IAAI,OAAO,CAEjC;IAED,IAAW,cAAc,IAAI,OAAO,CAEnC;IAED,IAAW,cAAc,IAAI,OAAO,CAEnC;IAED,IAAW,qBAAqB,IAAI,OAAO,CAE1C;IAED,IAAW,uBAAuB,IAAI,OAAO,CAE5C;gBAEkB,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS;IAkBjC,KAAK,CAAC,IAAI,EAAE,MAAM;IAIlB,IAAI,CAAC,IAAI,EAAE,MAAM;;;;;;;;;;;;;;;;IAQjB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IASjD,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CAAC,YAAY,EAAE,IAAI,EAAE,IAAI,CAAC;IAIzD,OAAO,CAAC,IAAI,EAAE,MAAM;IAQjC;;;;;OAKG;IACI,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,CAAC,UAAU,CAAC;IAIzD;;;;;;;;OAQG;IACU,KAAK,CAAC,OAAO,EAAE,mBAAmB;IAmBzB,OAAO;CAIhC"}