@yume-chan/adb 3.0.0-beta.0 → 3.0.0-beta.2

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 (134) hide show
  1. package/esm/adb.d.ts +7 -2
  2. package/esm/adb.d.ts.map +1 -1
  3. package/esm/adb.js +2 -2
  4. package/esm/adb.js.map +1 -1
  5. package/esm/banner.spec.d.ts +2 -0
  6. package/esm/banner.spec.d.ts.map +1 -0
  7. package/esm/daemon/auth/packet-processor.spec.d.ts +2 -0
  8. package/esm/daemon/auth/packet-processor.spec.d.ts.map +1 -0
  9. package/esm/daemon/auth/public-key.spec.d.ts +2 -0
  10. package/esm/daemon/auth/public-key.spec.d.ts.map +1 -0
  11. package/esm/daemon/crypto.spec.d.ts +2 -0
  12. package/esm/daemon/crypto.spec.d.ts.map +1 -0
  13. package/esm/server/client.d.ts +4 -3
  14. package/esm/server/client.d.ts.map +1 -1
  15. package/esm/server/client.js +13 -12
  16. package/esm/server/client.js.map +1 -1
  17. package/esm/server/client.spec.d.ts +2 -0
  18. package/esm/server/client.spec.d.ts.map +1 -0
  19. package/esm/server/transport.d.ts +1 -1
  20. package/esm/server/transport.d.ts.map +1 -1
  21. package/esm/server/transport.js +2 -2
  22. package/esm/server/transport.js.map +1 -1
  23. package/esm/service/reverse/response.spec.d.ts +2 -0
  24. package/esm/service/reverse/response.spec.d.ts.map +1 -0
  25. package/esm/service/subprocess/none/process.spec.d.ts +2 -0
  26. package/esm/service/subprocess/none/process.spec.d.ts.map +1 -0
  27. package/esm/service/subprocess/none/spawner.d.ts.map +1 -1
  28. package/esm/service/subprocess/none/spawner.js +10 -5
  29. package/esm/service/subprocess/none/spawner.js.map +1 -1
  30. package/esm/service/subprocess/none/spawner.spec.d.ts +2 -0
  31. package/esm/service/subprocess/none/spawner.spec.d.ts.map +1 -0
  32. package/esm/service/subprocess/shell/process.d.ts.map +1 -1
  33. package/esm/service/subprocess/shell/process.js +7 -9
  34. package/esm/service/subprocess/shell/process.js.map +1 -1
  35. package/esm/service/subprocess/shell/process.spec.d.ts +2 -0
  36. package/esm/service/subprocess/shell/process.spec.d.ts.map +1 -0
  37. package/esm/service/subprocess/shell/shared.spec.d.ts +2 -0
  38. package/esm/service/subprocess/shell/shared.spec.d.ts.map +1 -0
  39. package/esm/service/subprocess/shell/spawner.d.ts.map +1 -1
  40. package/esm/service/subprocess/shell/spawner.js +16 -11
  41. package/esm/service/subprocess/shell/spawner.js.map +1 -1
  42. package/esm/service/subprocess/shell/spawner.spec.d.ts +2 -0
  43. package/esm/service/subprocess/shell/spawner.spec.d.ts.map +1 -0
  44. package/esm/service/subprocess/utils.spec.d.ts +2 -0
  45. package/esm/service/subprocess/utils.spec.d.ts.map +1 -0
  46. package/esm/service/sync/compression/adapters.d.ts +16 -0
  47. package/esm/service/sync/compression/adapters.d.ts.map +1 -0
  48. package/esm/service/sync/compression/adapters.js +84 -0
  49. package/esm/service/sync/compression/adapters.js.map +1 -0
  50. package/esm/service/sync/compression/format-ns.d.ts.map +1 -1
  51. package/esm/service/sync/compression/format-ns.js +1 -0
  52. package/esm/service/sync/compression/format-ns.js.map +1 -1
  53. package/esm/service/sync/compression/format.d.ts +1 -0
  54. package/esm/service/sync/compression/format.d.ts.map +1 -1
  55. package/esm/service/sync/compression/format.js +1 -0
  56. package/esm/service/sync/compression/format.js.map +1 -1
  57. package/esm/service/sync/compression/index.d.ts +1 -1
  58. package/esm/service/sync/compression/index.d.ts.map +1 -1
  59. package/esm/service/sync/compression/index.js +1 -1
  60. package/esm/service/sync/compression/index.js.map +1 -1
  61. package/esm/service/sync/compression/mode.d.ts +6 -0
  62. package/esm/service/sync/compression/mode.d.ts.map +1 -0
  63. package/esm/service/sync/compression/mode.js +5 -0
  64. package/esm/service/sync/compression/mode.js.map +1 -0
  65. package/esm/service/sync/compression/native.d.ts +8 -0
  66. package/esm/service/sync/compression/native.d.ts.map +1 -0
  67. package/esm/service/sync/compression/native.js +53 -0
  68. package/esm/service/sync/compression/native.js.map +1 -0
  69. package/esm/service/sync/id/request.d.ts +1 -0
  70. package/esm/service/sync/id/request.d.ts.map +1 -1
  71. package/esm/service/sync/id/request.js +1 -0
  72. package/esm/service/sync/id/request.js.map +1 -1
  73. package/esm/service/sync/request/flag.d.ts +9 -0
  74. package/esm/service/sync/request/flag.d.ts.map +1 -0
  75. package/esm/service/sync/request/flag.js +8 -0
  76. package/esm/service/sync/request/flag.js.map +1 -0
  77. package/esm/service/sync/request/pull.d.ts +25 -2
  78. package/esm/service/sync/request/pull.d.ts.map +1 -1
  79. package/esm/service/sync/request/pull.js +76 -16
  80. package/esm/service/sync/request/pull.js.map +1 -1
  81. package/esm/service/sync/request/push.d.ts +36 -14
  82. package/esm/service/sync/request/push.d.ts.map +1 -1
  83. package/esm/service/sync/request/push.js +176 -60
  84. package/esm/service/sync/request/push.js.map +1 -1
  85. package/esm/service/sync/service.d.ts +32 -16
  86. package/esm/service/sync/service.d.ts.map +1 -1
  87. package/esm/service/sync/service.js +58 -13
  88. package/esm/service/sync/service.js.map +1 -1
  89. package/esm/service/sync/socket-pool.d.ts +1 -0
  90. package/esm/service/sync/socket-pool.d.ts.map +1 -1
  91. package/esm/service/sync/socket-pool.js +45 -9
  92. package/esm/service/sync/socket-pool.js.map +1 -1
  93. package/esm/service/sync/socket-pool.spec.d.ts +2 -0
  94. package/esm/service/sync/socket-pool.spec.d.ts.map +1 -0
  95. package/esm/service/sync/socket.d.ts +4 -0
  96. package/esm/service/sync/socket.d.ts.map +1 -1
  97. package/esm/service/sync/socket.js +16 -0
  98. package/esm/service/sync/socket.js.map +1 -1
  99. package/esm/service/sync/socket.spec.d.ts +2 -0
  100. package/esm/service/sync/socket.spec.d.ts.map +1 -0
  101. package/esm/utils/base64.spec.d.ts +2 -0
  102. package/esm/utils/base64.spec.d.ts.map +1 -0
  103. package/esm/utils/md5.spec.d.ts +2 -0
  104. package/esm/utils/md5.spec.d.ts.map +1 -0
  105. package/esm/utils/ref.d.ts +3 -5
  106. package/esm/utils/ref.d.ts.map +1 -1
  107. package/esm/utils/ref.js +12 -6
  108. package/esm/utils/ref.js.map +1 -1
  109. package/package.json +7 -7
  110. package/src/adb.ts +15 -3
  111. package/src/server/client.ts +18 -11
  112. package/src/server/transport.ts +5 -1
  113. package/src/service/subprocess/none/spawner.ts +9 -5
  114. package/src/service/subprocess/shell/process.ts +7 -10
  115. package/src/service/subprocess/shell/spawner.ts +15 -11
  116. package/src/service/sync/compression/adapters.ts +137 -0
  117. package/src/service/sync/compression/format-ns.ts +2 -0
  118. package/src/service/sync/compression/format.ts +5 -0
  119. package/src/service/sync/compression/index.ts +1 -1
  120. package/src/service/sync/compression/mode.ts +6 -0
  121. package/src/service/sync/compression/native.ts +73 -0
  122. package/src/service/sync/id/request.ts +1 -0
  123. package/src/service/sync/request/flag.ts +9 -0
  124. package/src/service/sync/request/pull.ts +135 -27
  125. package/src/service/sync/request/push.ts +241 -91
  126. package/src/service/sync/service.ts +87 -27
  127. package/src/service/sync/socket-pool.ts +50 -9
  128. package/src/service/sync/socket.ts +23 -1
  129. package/src/utils/ref.ts +17 -7
  130. package/esm/service/sync/compression/compression.d.ts +0 -17
  131. package/esm/service/sync/compression/compression.d.ts.map +0 -1
  132. package/esm/service/sync/compression/compression.js +0 -92
  133. package/esm/service/sync/compression/compression.js.map +0 -1
  134. package/src/service/sync/compression/compression.ts +0 -126
@@ -1 +1 @@
1
- {"version":3,"file":"socket-pool.js","sourceRoot":"","sources":["../../../src/service/sync/socket-pool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"socket-pool.js","sourceRoot":"","sources":["../../../src/service/sync/socket-pool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=socket-pool.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"socket-pool.spec.d.ts","sourceRoot":"","sources":["../../../src/service/sync/socket-pool.spec.ts"],"names":[],"mappings":""}
@@ -1,6 +1,9 @@
1
1
  import type { AsyncExactReadable, StructDeserializer } from "@yume-chan/struct";
2
2
  import type { Adb } from "../../adb.js";
3
+ declare const AdbSyncErrorBrand: unique symbol;
3
4
  declare class AdbSyncError extends Error {
5
+ [AdbSyncErrorBrand]: boolean;
6
+ static [Symbol.hasInstance](value: unknown): boolean;
4
7
  }
5
8
  export { AdbSyncError as Error };
6
9
  export declare class Socket implements AsyncExactReadable {
@@ -15,6 +18,7 @@ export declare class Socket implements AsyncExactReadable {
15
18
  static readonly FailResponse: import("@yume-chan/struct").Struct<{
16
19
  message: import("@yume-chan/struct").Field<string, string, never, string>;
17
20
  }, undefined, never>;
21
+ get id(): number;
18
22
  get position(): number;
19
23
  get closed(): Promise<undefined>;
20
24
  constructor(socket: Adb.Socket, bufferSize: number);
@@ -1 +1 @@
1
- {"version":3,"file":"socket.d.ts","sourceRoot":"","sources":["../../../src/service/sync/socket.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAGhF,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAOxC,cAAM,YAAa,SAAQ,KAAK;CAAG;AACnC,OAAO,EAAE,YAAY,IAAI,KAAK,EAAE,CAAC;AAgBjC,qBAAa,MAAO,YAAW,kBAAkB;;IAC7C,MAAM,CAAC,QAAQ,CAAC,aAAa;;;;;;QAAiB;IAC9C,MAAM,CAAC,QAAQ,CAAC,YAAY;;yBAAgB;IAS5C,IAAI,QAAQ,WAEX;IAED,IAAI,MAAM,IAAI,OAAO,CAAC,SAAS,CAAC,CAE/B;gBAEW,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM;IAOlD;;;;;OAKG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,IAAI;IAKpD;;OAEG;IACH,cAAc;IAyBR,KAAK;IAaX,KAAK,CAAC,IAAI,EAAE,UAAU;IAIhB,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,UAAU;IAkB5D,WAAW,CAAC,MAAM,EAAE,MAAM;IAO1B,YAAY,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,CAAC,CAAC,CAAC;IAgBtD,aAAa,CAAC,CAAC,EAClB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAC5B,cAAc,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC;IA6B1B,KAAK;CAKd"}
1
+ {"version":3,"file":"socket.d.ts","sourceRoot":"","sources":["../../../src/service/sync/socket.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAGhF,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAOxC,QAAA,MAAM,iBAAiB,eAAmC,CAAC;AAE3D,cAAM,YAAa,SAAQ,KAAK;IAC5B,CAAC,iBAAiB,CAAC,UAAQ;WAEX,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,OAAO;CAGtD;AACD,OAAO,EAAE,YAAY,IAAI,KAAK,EAAE,CAAC;AAkBjC,qBAAa,MAAO,YAAW,kBAAkB;;IAC7C,MAAM,CAAC,QAAQ,CAAC,aAAa;;;;;;QAAiB;IAC9C,MAAM,CAAC,QAAQ,CAAC,YAAY;;yBAAgB;IAU5C,IAAI,EAAE,WAEL;IAED,IAAI,QAAQ,WAEX;IAED,IAAI,MAAM,IAAI,OAAO,CAAC,SAAS,CAAC,CAE/B;gBAEW,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM;IAUlD;;;;;OAKG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,IAAI;IASpD;;OAEG;IACH,cAAc;IAyBR,KAAK;IAaX,KAAK,CAAC,IAAI,EAAE,UAAU;IAIhB,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,UAAU;IAkB5D,WAAW,CAAC,MAAM,EAAE,MAAM;IAO1B,YAAY,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,CAAC,CAAC,CAAC;IAgBtD,aAAa,CAAC,CAAC,EAClB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAC5B,cAAc,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC;IA6B1B,KAAK;CAKd"}
@@ -4,7 +4,12 @@ import { decodeUtf8, string, struct, u32 } from "@yume-chan/struct";
4
4
  import { AutoResetEvent, encodeUtf8, unreachable } from "../../utils/index.js";
5
5
  import { ResponseId } from "./id/index.js";
6
6
  const NumberRequest = struct({ id: u32, arg: u32 }, { littleEndian: true });
7
+ const AdbSyncErrorBrand = Symbol.for("AdbSyncError.brand");
7
8
  class AdbSyncError extends Error {
9
+ [AdbSyncErrorBrand] = true;
10
+ static [Symbol.hasInstance](value) {
11
+ return !!value?.[AdbSyncErrorBrand];
12
+ }
8
13
  }
9
14
  export { AdbSyncError as Error };
10
15
  const FailResponse = struct({ message: string(u32) }, {
@@ -16,15 +21,20 @@ const FailResponse = struct({ message: string(u32) }, {
16
21
  function i32ToHex(i) {
17
22
  return "0x" + i.toString(16).padStart(8, "0");
18
23
  }
24
+ let NextId = 0;
19
25
  export class Socket {
20
26
  static NumberRequest = NumberRequest;
21
27
  static FailResponse = FailResponse;
28
+ #id;
22
29
  #socket;
23
30
  #writer;
24
31
  #readable;
25
32
  #writeLock = new AutoResetEvent();
26
33
  #combiner;
27
34
  #idleTimeoutId = null;
35
+ get id() {
36
+ return this.#id;
37
+ }
28
38
  get position() {
29
39
  return this.#readable.position;
30
40
  }
@@ -32,6 +42,8 @@ export class Socket {
32
42
  return this.#socket.closed;
33
43
  }
34
44
  constructor(socket, bufferSize) {
45
+ this.#id = NextId;
46
+ NextId += 1;
35
47
  this.#socket = socket;
36
48
  this.#writer = socket.writable.getWriter();
37
49
  this.#readable = new BufferedReadableStream(socket.readable);
@@ -46,6 +58,10 @@ export class Socket {
46
58
  startIdleTimer(timeout, callback) {
47
59
  this.clearIdleTimer();
48
60
  this.#idleTimeoutId = setTimeout(callback, timeout);
61
+ if (typeof this.#idleTimeoutId === "object") {
62
+ // Node.js: unref the timer so that it won't keep the process alive
63
+ this.#idleTimeoutId.unref?.();
64
+ }
49
65
  }
50
66
  /**
51
67
  * Clear the idle timer.
@@ -1 +1 @@
1
- {"version":3,"file":"socket.js","sourceRoot":"","sources":["../../../src/service/sync/socket.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"socket.js","sourceRoot":"","sources":["../../../src/service/sync/socket.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=socket.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"socket.spec.d.ts","sourceRoot":"","sources":["../../../src/service/sync/socket.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=base64.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base64.spec.d.ts","sourceRoot":"","sources":["../../src/utils/base64.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=md5.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"md5.spec.d.ts","sourceRoot":"","sources":["../../src/utils/md5.spec.ts"],"names":[],"mappings":""}
@@ -1,18 +1,16 @@
1
+ import type { Disposable } from "@yume-chan/event";
1
2
  /**
2
3
  * An object to keep current Node.js process alive even when no code is running.
3
4
  *
4
5
  * Does nothing in Web environments.
5
- *
6
- * Note that it does't have reference counting. Calling `unref` will
7
- * remove the ref no matter how many times `ref` has been previously called, and vice versa.
8
- * This is the same as how Node.js works.
9
6
  */
10
- export declare class Ref {
7
+ export declare class Ref implements Disposable {
11
8
  #private;
12
9
  constructor(options?: {
13
10
  unref?: boolean | undefined;
14
11
  });
15
12
  ref(): void;
16
13
  unref(): void;
14
+ dispose(): void;
17
15
  }
18
16
  //# sourceMappingURL=ref.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ref.d.ts","sourceRoot":"","sources":["../../src/utils/ref.ts"],"names":[],"mappings":"AAOA;;;;;;;;GAQG;AACH,qBAAa,GAAG;;gBAGA,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;KAAE;IAMrD,GAAG;IAKH,KAAK;CAMR"}
1
+ {"version":3,"file":"ref.d.ts","sourceRoot":"","sources":["../../src/utils/ref.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AASnD;;;;GAIG;AACH,qBAAa,GAAI,YAAW,UAAU;;gBAKtB,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;KAAE;IAMrD,GAAG;IAQH,KAAK;IAOL,OAAO,IAAI,IAAI;CAMlB"}
package/esm/utils/ref.js CHANGED
@@ -3,23 +3,29 @@ const { setInterval, clearInterval } = globalThis;
3
3
  * An object to keep current Node.js process alive even when no code is running.
4
4
  *
5
5
  * Does nothing in Web environments.
6
- *
7
- * Note that it does't have reference counting. Calling `unref` will
8
- * remove the ref no matter how many times `ref` has been previously called, and vice versa.
9
- * This is the same as how Node.js works.
10
6
  */
11
7
  export class Ref {
12
8
  #intervalId;
9
+ #count = 0;
13
10
  constructor(options) {
14
11
  if (!options?.unref) {
15
12
  this.ref();
16
13
  }
17
14
  }
18
15
  ref() {
19
- // `setInterval` can keep current Node.js alive, the delay value doesn't matter
20
- this.#intervalId = setInterval(() => { }, 60 * 1000);
16
+ if (this.#count === 0) {
17
+ // `setInterval` can keep current Node.js alive, the delay value doesn't matter
18
+ this.#intervalId = setInterval(() => { }, 60 * 1000);
19
+ }
20
+ this.#count += 1;
21
21
  }
22
22
  unref() {
23
+ this.#count -= 1;
24
+ if (this.#count === 0) {
25
+ this.dispose();
26
+ }
27
+ }
28
+ dispose() {
23
29
  if (this.#intervalId) {
24
30
  clearInterval(this.#intervalId);
25
31
  this.#intervalId = undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"ref.js","sourceRoot":"","sources":["../../src/utils/ref.ts"],"names":[],"mappings":"AAKA,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,GAAG,UAAwC,CAAC;AAEhF;;;;;;;;GAQG;AACH,MAAM,OAAO,GAAG;IACZ,WAAW,CAAqB;IAEhC,YAAY,OAAyC;QACjD,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;YAClB,IAAI,CAAC,GAAG,EAAE,CAAC;QACf,CAAC;IACL,CAAC;IAED,GAAG;QACC,+EAA+E;QAC/E,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE,GAAE,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC;IACxD,CAAC;IAED,KAAK;QACD,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAChC,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;QACjC,CAAC;IACL,CAAC;CACJ"}
1
+ {"version":3,"file":"ref.js","sourceRoot":"","sources":["../../src/utils/ref.ts"],"names":[],"mappings":"AAOA,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,GAAG,UAAwC,CAAC;AAEhF;;;;GAIG;AACH,MAAM,OAAO,GAAG;IACZ,WAAW,CAAqB;IAEhC,MAAM,GAAG,CAAC,CAAC;IAEX,YAAY,OAAyC;QACjD,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;YAClB,IAAI,CAAC,GAAG,EAAE,CAAC;QACf,CAAC;IACL,CAAC;IAED,GAAG;QACC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACpB,+EAA+E;YAC/E,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE,GAAE,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC;QACxD,CAAC;QACD,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC;IACrB,CAAC;IAED,KAAK;QACD,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC;QACjB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACpB,IAAI,CAAC,OAAO,EAAE,CAAC;QACnB,CAAC;IACL,CAAC;IAED,OAAO;QACH,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAChC,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;QACjC,CAAC;IACL,CAAC;CACJ"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yume-chan/adb",
3
- "version": "3.0.0-beta.0",
3
+ "version": "3.0.0-beta.2",
4
4
  "description": "TypeScript implementation of Android Debug Bridge (ADB) protocol.",
5
5
  "keywords": [
6
6
  "adb",
@@ -27,14 +27,14 @@
27
27
  "sideEffects": false,
28
28
  "dependencies": {
29
29
  "@yume-chan/async": "^4.1.3",
30
- "@yume-chan/event": "3.0.0-beta.0",
31
- "@yume-chan/no-data-view": "3.0.0-beta.0",
32
- "@yume-chan/stream-extra": "3.0.0-beta.0",
33
- "@yume-chan/struct": "3.0.0-beta.0"
30
+ "@yume-chan/no-data-view": "3.0.0-beta.2",
31
+ "@yume-chan/event": "3.0.0-beta.2",
32
+ "@yume-chan/stream-extra": "3.0.0-beta.2",
33
+ "@yume-chan/struct": "3.0.0-beta.2"
34
34
  },
35
35
  "devDependencies": {
36
- "@types/node": "^26.0.0",
37
- "prettier": "^3.8.4",
36
+ "@types/node": "^26.1.1",
37
+ "prettier": "^3.9.6",
38
38
  "typescript": "^6.0.3",
39
39
  "@yume-chan/eslint-config": "^1.0.0",
40
40
  "@yume-chan/test-runner": "^1.0.0",
package/src/adb.ts CHANGED
@@ -33,7 +33,10 @@ export interface AdbTransport extends Closeable {
33
33
 
34
34
  readonly clientFeatures: readonly AdbFeature[];
35
35
 
36
- connect(service: string): MaybePromiseLike<Adb.Socket>;
36
+ connect(
37
+ service: string,
38
+ options?: AdbTransport.ConnectOptions,
39
+ ): MaybePromiseLike<Adb.Socket>;
37
40
 
38
41
  addReverseTunnel(
39
42
  handler: Adb.IncomingSocketHandler,
@@ -45,6 +48,12 @@ export interface AdbTransport extends Closeable {
45
48
  clearReverseTunnels(): MaybePromiseLike<void>;
46
49
  }
47
50
 
51
+ export namespace AdbTransport {
52
+ export interface ConnectOptions {
53
+ unref?: boolean | undefined;
54
+ }
55
+ }
56
+
48
57
  export class Adb implements Closeable {
49
58
  readonly #transport: AdbTransport;
50
59
  get transport(): AdbTransport {
@@ -101,8 +110,11 @@ export class Adb implements Closeable {
101
110
  /**
102
111
  * Creates a new ADB Socket to the specified service or socket address.
103
112
  */
104
- async createSocket(service: string): Promise<Adb.Socket> {
105
- return this.#transport.connect(service);
113
+ async createSocket(
114
+ service: string,
115
+ options?: AdbTransport.ConnectOptions,
116
+ ): Promise<Adb.Socket> {
117
+ return await this.#transport.connect(service, options);
106
118
  }
107
119
 
108
120
  async createSocketAndWait(service: string): Promise<string> {
@@ -193,8 +193,10 @@ export class AdbServerClient {
193
193
  /**
194
194
  * `adb version`
195
195
  */
196
- async getVersion(): Promise<number> {
197
- const connection = await this.createConnection("host:version");
196
+ async getVersion(
197
+ options?: AdbServerClient.ServerConnectionOptions,
198
+ ): Promise<number> {
199
+ const connection = await this.createConnection("host:version", options);
198
200
  try {
199
201
  const length = hexToNumber(await connection.readExactly(4));
200
202
  const version = hexToNumber(await connection.readExactly(length));
@@ -204,8 +206,11 @@ export class AdbServerClient {
204
206
  }
205
207
  }
206
208
 
207
- async validateVersion(minimalVersion: number) {
208
- const version = await this.getVersion();
209
+ async validateVersion(
210
+ minimalVersion: number,
211
+ options?: AdbServerClient.ServerConnectionOptions,
212
+ ) {
213
+ const version = await this.getVersion(options);
209
214
  if (version < minimalVersion) {
210
215
  throw new Error(
211
216
  `adb server version (${version}) doesn't match this client (${minimalVersion})`,
@@ -324,34 +329,36 @@ export class AdbServerClient {
324
329
  * Creates a connection that will forward the service to device.
325
330
  * @param device The device selector
326
331
  * @param service The service to forward
332
+ * @param options The server connection options
327
333
  * @returns An `AdbServerClient.Socket` that can be used to communicate with the service
328
334
  */
329
335
  async createDeviceConnection(
330
336
  device: AdbServerClient.DeviceSelector,
331
337
  service: string,
338
+ options?: AdbServerClient.ServerConnectionOptions,
332
339
  ): Promise<AdbServerClient.Socket> {
333
340
  let switchService: string;
334
341
  let transportId: bigint | undefined;
335
342
  if (!device) {
336
- await this.validateVersion(41);
343
+ await this.validateVersion(41, options);
337
344
  switchService = `host:tport:any`;
338
345
  } else if ("transportId" in device) {
339
346
  switchService = `host:transport-id:${device.transportId}`;
340
347
  transportId = device.transportId;
341
348
  } else if ("serial" in device) {
342
- await this.validateVersion(41);
349
+ await this.validateVersion(41, options);
343
350
  switchService = `host:tport:serial:${device.serial}`;
344
351
  } else if ("usb" in device) {
345
- await this.validateVersion(41);
352
+ await this.validateVersion(41, options);
346
353
  switchService = `host:tport:usb`;
347
354
  } else if ("tcp" in device) {
348
- await this.validateVersion(41);
355
+ await this.validateVersion(41, options);
349
356
  switchService = `host:tport:local`;
350
357
  } else {
351
358
  throw new TypeError("Invalid device selector");
352
359
  }
353
360
 
354
- const connection = await this.createConnection(switchService);
361
+ const connection = await this.createConnection(switchService, options);
355
362
 
356
363
  try {
357
364
  await connection.writeString(service);
@@ -430,7 +437,7 @@ export class AdbServerClient {
430
437
  options?: AdbServerClient.ServerConnectionOptions,
431
438
  ): Promise<void> {
432
439
  if (state === "disconnect") {
433
- await this.validateVersion(41);
440
+ await this.validateVersion(41, options);
434
441
  }
435
442
 
436
443
  return this.#waitForUnchecked(device, state, options);
@@ -440,7 +447,7 @@ export class AdbServerClient {
440
447
  transportId: bigint,
441
448
  options?: AdbServerClient.ServerConnectionOptions,
442
449
  ): Promise<void> {
443
- const serverVersion = await this.getVersion();
450
+ const serverVersion = await this.getVersion(options);
444
451
  if (serverVersion >= 41) {
445
452
  return this.#waitForUnchecked(
446
453
  { transportId },
@@ -52,10 +52,14 @@ export class AdbServerTransport implements AdbTransport {
52
52
  this.#disconnected = Promise.race([this.#closed.promise, disconnected]);
53
53
  }
54
54
 
55
- async connect(service: string): Promise<Adb.Socket> {
55
+ async connect(
56
+ service: string,
57
+ options?: AdbTransport.ConnectOptions,
58
+ ): Promise<Adb.Socket> {
56
59
  const socket = await this.#client.createDeviceConnection(
57
60
  { transportId: this.transportId },
58
61
  service,
62
+ options,
59
63
  );
60
64
  this.#sockets.push(socket);
61
65
  return socket;
@@ -55,11 +55,15 @@ export function adbNoneProtocolSpawner(
55
55
 
56
56
  processPromise.wait = (options) => {
57
57
  const waitPromise = processPromise.then(async (process) => {
58
- const [, output] = await Promise.all([
59
- options?.stdin?.pipeTo(process.stdin),
60
- process.output.pipeThrough(new ToArrayStream()),
61
- ]);
62
- return output;
58
+ try {
59
+ const [, output] = await Promise.all([
60
+ options?.stdin?.pipeTo(process.stdin),
61
+ process.output.pipeThrough(new ToArrayStream()),
62
+ ]);
63
+ return output;
64
+ } finally {
65
+ await process.kill();
66
+ }
63
67
  });
64
68
 
65
69
  return createLazyPromise(
@@ -98,16 +98,13 @@ export class AdbShellProtocolProcessImpl implements AdbShellProtocolProcess {
98
98
  },
99
99
  );
100
100
 
101
- if (signal) {
102
- // `signal` won't affect `this.stdout` and `this.stderr`
103
- // So remaining data can still be read
104
- // (call `controller.error` will discard all pending data)
105
-
106
- signal.addEventListener("abort", () => {
107
- exited.reject(signal.reason);
108
- this.#socket.close();
109
- });
110
- }
101
+ // `signal` won't affect `this.stdout` and `this.stderr`
102
+ // So remaining data can still be read
103
+ // (call `controller.error` will discard all pending data)
104
+ signal?.addEventListener("abort", () => {
105
+ exited.reject(signal.reason);
106
+ this.#socket.close();
107
+ });
111
108
 
112
109
  this.#writer = this.#socket.writable.getWriter();
113
110
  this.#stdin = new MaybeConsumable.WritableStream<Uint8Array>({
@@ -67,17 +67,21 @@ export function adbShellProtocolSpawner(
67
67
 
68
68
  processPromise.wait = (options) => {
69
69
  const waitPromise = processPromise.then(async (process) => {
70
- const [, stdout, stderr, exitCode] = await Promise.all([
71
- options?.stdin?.pipeTo(process.stdin),
72
- process.stdout.pipeThrough(new ToArrayStream()),
73
- process.stderr.pipeThrough(new ToArrayStream()),
74
- process.exited,
75
- ]);
76
- return {
77
- stdout,
78
- stderr,
79
- exitCode,
80
- } satisfies AdbShellProtocolSpawner.WaitResult<Uint8Array[]>;
70
+ try {
71
+ const [, stdout, stderr, exitCode] = await Promise.all([
72
+ options?.stdin?.pipeTo(process.stdin),
73
+ process.stdout.pipeThrough(new ToArrayStream()),
74
+ process.stderr.pipeThrough(new ToArrayStream()),
75
+ process.exited,
76
+ ]);
77
+ return {
78
+ stdout,
79
+ stderr,
80
+ exitCode,
81
+ } satisfies AdbShellProtocolSpawner.WaitResult<Uint8Array[]>;
82
+ } finally {
83
+ await process.kill();
84
+ }
81
85
  });
82
86
 
83
87
  return createLazyPromise(
@@ -0,0 +1,137 @@
1
+ import type { TransformStream } from "@yume-chan/stream-extra";
2
+
3
+ import type { Adb } from "../../../adb.js";
4
+ import { AdbFeature } from "../../../features.js";
5
+
6
+ import { Format, FormatNameMap } from "./format.js";
7
+ import { Mode } from "./mode.js";
8
+ import {
9
+ createNativeCompressionStream,
10
+ createNativeDecompressionStream,
11
+ hasNativeSupport,
12
+ } from "./native.js";
13
+
14
+ export { Format, FormatNameMap, Mode };
15
+
16
+ export type Adapter = () => TransformStream<Uint8Array, Uint8Array>;
17
+
18
+ const CompressionRegistry: Partial<
19
+ Record<Exclude<Format, typeof Format.None>, Adapter>
20
+ > = {};
21
+
22
+ const DecompressionRegistry: Partial<
23
+ Record<Exclude<Format, typeof Format.None>, Adapter>
24
+ > = {};
25
+
26
+ export function registerCompressionAdapter(
27
+ format: Exclude<Format, typeof Format.None>,
28
+ adapter: Adapter,
29
+ ) {
30
+ CompressionRegistry[format] = adapter;
31
+ }
32
+
33
+ export function registerDecompressionAdapter(
34
+ format: Exclude<Format, typeof Format.None>,
35
+ adapter: Adapter,
36
+ ) {
37
+ DecompressionRegistry[format] = adapter;
38
+ }
39
+
40
+ function hasAdapterOrNativeSupport(format: Format, mode: Mode) {
41
+ if (format === Format.None) {
42
+ return true;
43
+ }
44
+
45
+ const Registry =
46
+ mode === Mode.Compress ? CompressionRegistry : DecompressionRegistry;
47
+ if (Registry[format]) {
48
+ return true;
49
+ }
50
+
51
+ return hasNativeSupport(format, mode);
52
+ }
53
+
54
+ export function canUseBrotli(adb: Adb, mode: Mode) {
55
+ return (
56
+ adb.canUseFeature(AdbFeature.SendReceive2Brotli) &&
57
+ hasAdapterOrNativeSupport(Format.Brotli, mode)
58
+ );
59
+ }
60
+
61
+ export function canUseLz4(adb: Adb, mode: Mode) {
62
+ return (
63
+ adb.canUseFeature(AdbFeature.SendReceive2Lz4) &&
64
+ hasAdapterOrNativeSupport(Format.Lz4, mode)
65
+ );
66
+ }
67
+
68
+ export function canUseZstd(adb: Adb, mode: Mode) {
69
+ return (
70
+ adb.canUseFeature(AdbFeature.SendReceive2Zstd) &&
71
+ hasAdapterOrNativeSupport(Format.Zstd, mode)
72
+ );
73
+ }
74
+
75
+ export function canUseFormat(adb: Adb, format: Format, mode: Mode) {
76
+ switch (format) {
77
+ case Format.None:
78
+ return true;
79
+ case Format.Brotli:
80
+ return canUseBrotli(adb, mode);
81
+ case Format.Lz4:
82
+ return canUseLz4(adb, mode);
83
+ case Format.Zstd:
84
+ return canUseZstd(adb, mode);
85
+ default:
86
+ return false;
87
+ }
88
+ }
89
+
90
+ export function chooseFormat(adb: Adb, mode: Mode) {
91
+ // The order follows
92
+ // https://android.googlesource.com/platform/packages/modules/adb/+/3da39565cad412a743a58b94b875a43ed3c640d3/client/file_sync_client.cpp#277
93
+
94
+ if (canUseZstd(adb, mode)) {
95
+ return Format.Zstd;
96
+ }
97
+
98
+ if (canUseLz4(adb, mode)) {
99
+ return Format.Lz4;
100
+ }
101
+
102
+ if (canUseBrotli(adb, mode)) {
103
+ return Format.Brotli;
104
+ }
105
+
106
+ return Format.None;
107
+ }
108
+
109
+ export function createCompressionStream(
110
+ format: Exclude<Format, typeof Format.None>,
111
+ ): TransformStream<Uint8Array, Uint8Array> {
112
+ const adapter = CompressionRegistry[format];
113
+ if (adapter) {
114
+ return adapter();
115
+ }
116
+ if (hasNativeSupport(format, Mode.Compress)) {
117
+ return createNativeCompressionStream(format);
118
+ }
119
+ throw new Error(
120
+ `No adapter registered for format ${FormatNameMap[format]}`,
121
+ );
122
+ }
123
+
124
+ export function createDecompressionStream(
125
+ format: Exclude<Format, typeof Format.None>,
126
+ ): TransformStream<Uint8Array, Uint8Array> {
127
+ const adapter = DecompressionRegistry[format];
128
+ if (adapter) {
129
+ return adapter();
130
+ }
131
+ if (hasNativeSupport(format, Mode.Decompress)) {
132
+ return createNativeDecompressionStream(format);
133
+ }
134
+ throw new Error(
135
+ `No adapter registered for format ${FormatNameMap[format]}`,
136
+ );
137
+ }
@@ -1,3 +1,5 @@
1
+ // https://android.googlesource.com/platform/packages/modules/adb/+/888a54dcbf954fdffacc8283a793290abcc589cd/file_sync_protocol.h#102
2
+
1
3
  export const None = 0;
2
4
  export const Brotli = 2;
3
5
  export const Lz4 = 3;
@@ -2,4 +2,9 @@ import * as Format from "./format-ns.js";
2
2
 
3
3
  type Format = (typeof Format)[keyof typeof Format];
4
4
 
5
+ export const FormatNameMap = /* #__PURE__ */ (() =>
6
+ Object.fromEntries(
7
+ Object.entries(Format).map(([key, value]) => [value, key]),
8
+ ))() as Record<Format, string>;
9
+
5
10
  export { Format };
@@ -1 +1 @@
1
- export * as Compression from "./compression.js";
1
+ export * as Compression from "./adapters.js";
@@ -0,0 +1,6 @@
1
+ export const Mode = {
2
+ Compress: 0,
3
+ Decompress: 1,
4
+ } as const;
5
+
6
+ export type Mode = (typeof Mode)[keyof typeof Mode];