@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
@@ -0,0 +1,84 @@
1
+ import { AdbFeature } from "../../../features.js";
2
+ import { Format, FormatNameMap } from "./format.js";
3
+ import { Mode } from "./mode.js";
4
+ import { createNativeCompressionStream, createNativeDecompressionStream, hasNativeSupport, } from "./native.js";
5
+ export { Format, FormatNameMap, Mode };
6
+ const CompressionRegistry = {};
7
+ const DecompressionRegistry = {};
8
+ export function registerCompressionAdapter(format, adapter) {
9
+ CompressionRegistry[format] = adapter;
10
+ }
11
+ export function registerDecompressionAdapter(format, adapter) {
12
+ DecompressionRegistry[format] = adapter;
13
+ }
14
+ function hasAdapterOrNativeSupport(format, mode) {
15
+ if (format === Format.None) {
16
+ return true;
17
+ }
18
+ const Registry = mode === Mode.Compress ? CompressionRegistry : DecompressionRegistry;
19
+ if (Registry[format]) {
20
+ return true;
21
+ }
22
+ return hasNativeSupport(format, mode);
23
+ }
24
+ export function canUseBrotli(adb, mode) {
25
+ return (adb.canUseFeature(AdbFeature.SendReceive2Brotli) &&
26
+ hasAdapterOrNativeSupport(Format.Brotli, mode));
27
+ }
28
+ export function canUseLz4(adb, mode) {
29
+ return (adb.canUseFeature(AdbFeature.SendReceive2Lz4) &&
30
+ hasAdapterOrNativeSupport(Format.Lz4, mode));
31
+ }
32
+ export function canUseZstd(adb, mode) {
33
+ return (adb.canUseFeature(AdbFeature.SendReceive2Zstd) &&
34
+ hasAdapterOrNativeSupport(Format.Zstd, mode));
35
+ }
36
+ export function canUseFormat(adb, format, mode) {
37
+ switch (format) {
38
+ case Format.None:
39
+ return true;
40
+ case Format.Brotli:
41
+ return canUseBrotli(adb, mode);
42
+ case Format.Lz4:
43
+ return canUseLz4(adb, mode);
44
+ case Format.Zstd:
45
+ return canUseZstd(adb, mode);
46
+ default:
47
+ return false;
48
+ }
49
+ }
50
+ export function chooseFormat(adb, mode) {
51
+ // The order follows
52
+ // https://android.googlesource.com/platform/packages/modules/adb/+/3da39565cad412a743a58b94b875a43ed3c640d3/client/file_sync_client.cpp#277
53
+ if (canUseZstd(adb, mode)) {
54
+ return Format.Zstd;
55
+ }
56
+ if (canUseLz4(adb, mode)) {
57
+ return Format.Lz4;
58
+ }
59
+ if (canUseBrotli(adb, mode)) {
60
+ return Format.Brotli;
61
+ }
62
+ return Format.None;
63
+ }
64
+ export function createCompressionStream(format) {
65
+ const adapter = CompressionRegistry[format];
66
+ if (adapter) {
67
+ return adapter();
68
+ }
69
+ if (hasNativeSupport(format, Mode.Compress)) {
70
+ return createNativeCompressionStream(format);
71
+ }
72
+ throw new Error(`No adapter registered for format ${FormatNameMap[format]}`);
73
+ }
74
+ export function createDecompressionStream(format) {
75
+ const adapter = DecompressionRegistry[format];
76
+ if (adapter) {
77
+ return adapter();
78
+ }
79
+ if (hasNativeSupport(format, Mode.Decompress)) {
80
+ return createNativeDecompressionStream(format);
81
+ }
82
+ throw new Error(`No adapter registered for format ${FormatNameMap[format]}`);
83
+ }
84
+ //# sourceMappingURL=adapters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapters.js","sourceRoot":"","sources":["../../../../src/service/sync/compression/adapters.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"format-ns.d.ts","sourceRoot":"","sources":["../../../../src/service/sync/compression/format-ns.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,IAAI,IAAI,CAAC;AACtB,eAAO,MAAM,MAAM,IAAI,CAAC;AACxB,eAAO,MAAM,GAAG,IAAI,CAAC;AACrB,eAAO,MAAM,IAAI,IAAI,CAAC"}
1
+ {"version":3,"file":"format-ns.d.ts","sourceRoot":"","sources":["../../../../src/service/sync/compression/format-ns.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,IAAI,IAAI,CAAC;AACtB,eAAO,MAAM,MAAM,IAAI,CAAC;AACxB,eAAO,MAAM,GAAG,IAAI,CAAC;AACrB,eAAO,MAAM,IAAI,IAAI,CAAC"}
@@ -1,3 +1,4 @@
1
+ // https://android.googlesource.com/platform/packages/modules/adb/+/888a54dcbf954fdffacc8283a793290abcc589cd/file_sync_protocol.h#102
1
2
  export const None = 0;
2
3
  export const Brotli = 2;
3
4
  export const Lz4 = 3;
@@ -1 +1 @@
1
- {"version":3,"file":"format-ns.js","sourceRoot":"","sources":["../../../../src/service/sync/compression/format-ns.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC;AACtB,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,CAAC;AACxB,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC;AACrB,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC"}
1
+ {"version":3,"file":"format-ns.js","sourceRoot":"","sources":["../../../../src/service/sync/compression/format-ns.ts"],"names":[],"mappings":"AAAA,qIAAqI;AAErI,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC;AACtB,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,CAAC;AACxB,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC;AACrB,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import * as Format from "./format-ns.js";
2
2
  type Format = (typeof Format)[keyof typeof Format];
3
+ export declare const FormatNameMap: Record<Format, string>;
3
4
  export { Format };
4
5
  //# sourceMappingURL=format.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../../../src/service/sync/compression/format.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,gBAAgB,CAAC;AAEzC,KAAK,MAAM,GAAG,CAAC,OAAO,MAAM,CAAC,CAAC,MAAM,OAAO,MAAM,CAAC,CAAC;AAEnD,OAAO,EAAE,MAAM,EAAE,CAAC"}
1
+ {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../../../src/service/sync/compression/format.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,gBAAgB,CAAC;AAEzC,KAAK,MAAM,GAAG,CAAC,OAAO,MAAM,CAAC,CAAC,MAAM,OAAO,MAAM,CAAC,CAAC;AAEnD,eAAO,MAAM,aAAa,EAGd,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAEnC,OAAO,EAAE,MAAM,EAAE,CAAC"}
@@ -1,3 +1,4 @@
1
1
  import * as Format from "./format-ns.js";
2
+ export const FormatNameMap = /* #__PURE__ */ (() => Object.fromEntries(Object.entries(Format).map(([key, value]) => [value, key])))();
2
3
  export { Format };
3
4
  //# sourceMappingURL=format.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"format.js","sourceRoot":"","sources":["../../../../src/service/sync/compression/format.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,gBAAgB,CAAC;AAIzC,OAAO,EAAE,MAAM,EAAE,CAAC"}
1
+ {"version":3,"file":"format.js","sourceRoot":"","sources":["../../../../src/service/sync/compression/format.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,gBAAgB,CAAC;AAIzC,MAAM,CAAC,MAAM,aAAa,GAAG,eAAe,CAAC,CAAC,GAAG,EAAE,CAC/C,MAAM,CAAC,WAAW,CACd,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAC7D,CAAC,EAA4B,CAAC;AAEnC,OAAO,EAAE,MAAM,EAAE,CAAC"}
@@ -1,2 +1,2 @@
1
- export * as Compression from "./compression.js";
1
+ export * as Compression from "./adapters.js";
2
2
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/service/sync/compression/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/service/sync/compression/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,WAAW,MAAM,eAAe,CAAC"}
@@ -1,2 +1,2 @@
1
- export * as Compression from "./compression.js";
1
+ export * as Compression from "./adapters.js";
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/service/sync/compression/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/service/sync/compression/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,WAAW,MAAM,eAAe,CAAC"}
@@ -0,0 +1,6 @@
1
+ export declare const Mode: {
2
+ readonly Compress: 0;
3
+ readonly Decompress: 1;
4
+ };
5
+ export type Mode = (typeof Mode)[keyof typeof Mode];
6
+ //# sourceMappingURL=mode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mode.d.ts","sourceRoot":"","sources":["../../../../src/service/sync/compression/mode.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,IAAI;;;CAGP,CAAC;AAEX,MAAM,MAAM,IAAI,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC,MAAM,OAAO,IAAI,CAAC,CAAC"}
@@ -0,0 +1,5 @@
1
+ export const Mode = {
2
+ Compress: 0,
3
+ Decompress: 1,
4
+ };
5
+ //# sourceMappingURL=mode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mode.js","sourceRoot":"","sources":["../../../../src/service/sync/compression/mode.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,IAAI,GAAG;IAChB,QAAQ,EAAE,CAAC;IACX,UAAU,EAAE,CAAC;CACP,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { CompressionStream, DecompressionStream } from "@yume-chan/stream-extra";
2
+ import { Format } from "./format.js";
3
+ import { Mode } from "./mode.js";
4
+ export declare const FormatMap: Record<Format, string>;
5
+ export declare function hasNativeSupport(format: Format, mode: Mode): boolean;
6
+ export declare function createNativeCompressionStream(format: Format): CompressionStream;
7
+ export declare function createNativeDecompressionStream(format: Format): DecompressionStream;
8
+ //# sourceMappingURL=native.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"native.d.ts","sourceRoot":"","sources":["../../../../src/service/sync/compression/native.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,iBAAiB,EACjB,mBAAmB,EAEtB,MAAM,yBAAyB,CAAC;AAIjC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAQ5C,CAAC;AAKF,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,WA4B1D;AAED,wBAAgB,6BAA6B,CACzC,MAAM,EAAE,MAAM,GACf,iBAAiB,CAMnB;AAED,wBAAgB,+BAA+B,CAC3C,MAAM,EAAE,MAAM,GACf,mBAAmB,CAMrB"}
@@ -0,0 +1,53 @@
1
+ import { CompressionStream, DecompressionStream, TransformStream, } from "@yume-chan/stream-extra";
2
+ import { NOOP } from "../../../utils/no-op.js";
3
+ import { Format } from "./format.js";
4
+ import { Mode } from "./mode.js";
5
+ export const FormatMap = {
6
+ [Format.None]: "",
7
+ // https://github.com/whatwg/compression/issues/54
8
+ [Format.Zstd]: "zstd",
9
+ // placeholder
10
+ [Format.Lz4]: "lz4",
11
+ // https://github.com/whatwg/compression/pull/80
12
+ [Format.Brotli]: "brotli",
13
+ };
14
+ const CompressionFormatCache = new Map();
15
+ const DecompressionFormatCache = new Map();
16
+ export function hasNativeSupport(format, mode) {
17
+ if (format === Format.None) {
18
+ return true;
19
+ }
20
+ const Cache = mode === Mode.Compress
21
+ ? CompressionFormatCache
22
+ : DecompressionFormatCache;
23
+ if (Cache.has(format)) {
24
+ return Cache.get(format);
25
+ }
26
+ const Stream = mode === Mode.Compress ? CompressionStream : DecompressionStream;
27
+ if (!Stream) {
28
+ return false;
29
+ }
30
+ try {
31
+ const stream = new Stream(FormatMap[format]);
32
+ void stream.writable.abort().catch(NOOP);
33
+ Cache.set(format, true);
34
+ return true;
35
+ }
36
+ catch {
37
+ Cache.set(format, false);
38
+ return false;
39
+ }
40
+ }
41
+ export function createNativeCompressionStream(format) {
42
+ if (format === Format.None) {
43
+ return new TransformStream();
44
+ }
45
+ return new CompressionStream(FormatMap[format]);
46
+ }
47
+ export function createNativeDecompressionStream(format) {
48
+ if (format === Format.None) {
49
+ return new TransformStream();
50
+ }
51
+ return new DecompressionStream(FormatMap[format]);
52
+ }
53
+ //# sourceMappingURL=native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"native.js","sourceRoot":"","sources":["../../../../src/service/sync/compression/native.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,iBAAiB,EACjB,mBAAmB,EACnB,eAAe,GAClB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAE/C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,CAAC,MAAM,SAAS,GAA2B;IAC7C,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE;IACjB,kDAAkD;IAClD,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM;IACrB,cAAc;IACd,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,KAAK;IACnB,gDAAgD;IAChD,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ;CAC5B,CAAC;AAEF,MAAM,sBAAsB,GAAG,IAAI,GAAG,EAAmB,CAAC;AAC1D,MAAM,wBAAwB,GAAG,IAAI,GAAG,EAAmB,CAAC;AAE5D,MAAM,UAAU,gBAAgB,CAAC,MAAc,EAAE,IAAU;IACvD,IAAI,MAAM,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,MAAM,KAAK,GACP,IAAI,KAAK,IAAI,CAAC,QAAQ;QAClB,CAAC,CAAC,sBAAsB;QACxB,CAAC,CAAC,wBAAwB,CAAC;IACnC,IAAI,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QACpB,OAAO,KAAK,CAAC,GAAG,CAAC,MAAM,CAAE,CAAC;IAC9B,CAAC;IAED,MAAM,MAAM,GACR,IAAI,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,mBAAmB,CAAC;IACrE,IAAI,CAAC,MAAM,EAAE,CAAC;QACV,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,IAAI,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;QAC7C,KAAK,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACzC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACxB,OAAO,IAAI,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACL,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACzB,OAAO,KAAK,CAAC;IACjB,CAAC;AACL,CAAC;AAED,MAAM,UAAU,6BAA6B,CACzC,MAAc;IAEd,IAAI,MAAM,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC;QACzB,OAAO,IAAI,eAAe,EAAE,CAAC;IACjC,CAAC;IAED,OAAO,IAAI,iBAAiB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,+BAA+B,CAC3C,MAAc;IAEd,IAAI,MAAM,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC;QACzB,OAAO,IAAI,eAAe,EAAE,CAAC;IACjC,CAAC;IAED,OAAO,IAAI,mBAAmB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AACtD,CAAC"}
@@ -4,4 +4,5 @@ export declare const ListV2: number;
4
4
  export declare const Send: number;
5
5
  export declare const SendV2: number;
6
6
  export declare const Receive: number;
7
+ export declare const ReceiveV2: number;
7
8
  //# sourceMappingURL=request.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../../../src/service/sync/id/request.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAI/D,eAAO,MAAM,IAAI,QAAmB,CAAC;AACrC,eAAO,MAAM,MAAM,QAAmB,CAAC;AAEvC,eAAO,MAAM,IAAI,QAAmB,CAAC;AACrC,eAAO,MAAM,MAAM,QAAmB,CAAC;AACvC,eAAO,MAAM,OAAO,QAAmB,CAAC"}
1
+ {"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../../../src/service/sync/id/request.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAI/D,eAAO,MAAM,IAAI,QAAmB,CAAC;AACrC,eAAO,MAAM,MAAM,QAAmB,CAAC;AAEvC,eAAO,MAAM,IAAI,QAAmB,CAAC;AACrC,eAAO,MAAM,MAAM,QAAmB,CAAC;AACvC,eAAO,MAAM,OAAO,QAAmB,CAAC;AACxC,eAAO,MAAM,SAAS,QAAmB,CAAC"}
@@ -6,4 +6,5 @@ export const ListV2 = encodeId("LIS2");
6
6
  export const Send = encodeId("SEND");
7
7
  export const SendV2 = encodeId("SND2");
8
8
  export const Receive = encodeId("RECV");
9
+ export const ReceiveV2 = encodeId("RCV2");
9
10
  //# sourceMappingURL=request.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"request.js","sourceRoot":"","sources":["../../../../src/service/sync/id/request.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAE/D,+JAA+J;AAE/J,MAAM,CAAC,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;AACrC,MAAM,CAAC,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;AAEvC,MAAM,CAAC,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;AACrC,MAAM,CAAC,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;AACvC,MAAM,CAAC,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC"}
1
+ {"version":3,"file":"request.js","sourceRoot":"","sources":["../../../../src/service/sync/id/request.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAE/D,+JAA+J;AAE/J,MAAM,CAAC,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;AACrC,MAAM,CAAC,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;AAEvC,MAAM,CAAC,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;AACrC,MAAM,CAAC,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;AACvC,MAAM,CAAC,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;AACxC,MAAM,CAAC,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC"}
@@ -0,0 +1,9 @@
1
+ export declare const SyncFlag: {
2
+ readonly None: 0;
3
+ readonly Brotli: 1;
4
+ readonly Lz4: 2;
5
+ readonly Zstd: 4;
6
+ readonly DryRun: 2147483648;
7
+ };
8
+ export type SyncFlag = (typeof SyncFlag)[keyof typeof SyncFlag];
9
+ //# sourceMappingURL=flag.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flag.d.ts","sourceRoot":"","sources":["../../../../src/service/sync/request/flag.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,QAAQ;;;;;;CAMX,CAAC;AAEX,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,QAAQ,CAAC,CAAC,MAAM,OAAO,QAAQ,CAAC,CAAC"}
@@ -0,0 +1,8 @@
1
+ export const SyncFlag = {
2
+ None: 0,
3
+ Brotli: 1,
4
+ Lz4: 2,
5
+ Zstd: 4,
6
+ DryRun: 0x80000000,
7
+ };
8
+ //# sourceMappingURL=flag.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flag.js","sourceRoot":"","sources":["../../../../src/service/sync/request/flag.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,QAAQ,GAAG;IACpB,IAAI,EAAE,CAAC;IACP,MAAM,EAAE,CAAC;IACT,GAAG,EAAE,CAAC;IACN,IAAI,EAAE,CAAC;IACP,MAAM,EAAE,UAAU;CACZ,CAAC"}
@@ -1,5 +1,6 @@
1
1
  import { ReadableStream } from "@yume-chan/stream-extra";
2
2
  import type { StructValue } from "@yume-chan/struct";
3
+ import { Compression } from "../index-ns.js";
3
4
  import type { SocketPool } from "../socket-pool.js";
4
5
  export declare const DataResponse: import("@yume-chan/struct").Struct<{
5
6
  data: import("@yume-chan/struct").Field<Uint8Array<ArrayBufferLike>, string, never, Uint8Array<ArrayBufferLike>>;
@@ -7,6 +8,28 @@ export declare const DataResponse: import("@yume-chan/struct").Struct<{
7
8
  data: import("@yume-chan/struct").Field<Uint8Array<ArrayBufferLike>, string, never, Uint8Array<ArrayBufferLike>>;
8
9
  }>>;
9
10
  export type DataResponse = StructValue<typeof DataResponse>;
10
- export declare function generator(pool: SocketPool, path: string): AsyncGenerator<Uint8Array, void, void>;
11
- export declare function stream(pool: SocketPool, path: string): ReadableStream<Uint8Array>;
11
+ export interface ReceiveSession {
12
+ /**
13
+ * The readable stream to read the file content from.
14
+ */
15
+ readable: ReadableStream<Uint8Array>;
16
+ /**
17
+ * Gets the number of bytes read from {@link readable}.
18
+ */
19
+ bytesRead: number;
20
+ /**
21
+ * When using Pull v2, gets the compression format used (might be `None`).
22
+ *
23
+ * When using Pull v1, this will always be `undefined`.
24
+ */
25
+ compression?: Compression.Format | undefined;
26
+ /**
27
+ * When using Pull v2, gets the size of the compressed data received from the device.
28
+ * Might be same as {@link bytesRead} if no compression was applied.
29
+ */
30
+ bytesCompressed: number;
31
+ }
32
+ export declare function receiveV1(pool: SocketPool, path: string): ReceiveSession;
33
+ export declare function receiveV2(pool: SocketPool, path: string, compression?: Compression.Format): ReceiveSession;
34
+ export declare function receive(version: 1 | 2, pool: SocketPool, path: string, compression?: Compression.Format): ReceiveSession;
12
35
  //# sourceMappingURL=pull.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pull.d.ts","sourceRoot":"","sources":["../../../../src/service/sync/request/pull.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAIrD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAGpD,eAAO,MAAM,YAAY;;;;GAGxB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,WAAW,CAAC,OAAO,YAAY,CAAC,CAAC;AAE5D,wBAAuB,SAAS,CAC5B,IAAI,EAAE,UAAU,EAChB,IAAI,EAAE,MAAM,GACb,cAAc,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,CAAC,CAuBxC;AAED,wBAAgB,MAAM,CAClB,IAAI,EAAE,UAAU,EAChB,IAAI,EAAE,MAAM,GACb,cAAc,CAAC,UAAU,CAAC,CAE5B"}
1
+ {"version":3,"file":"pull.d.ts","sourceRoot":"","sources":["../../../../src/service/sync/request/pull.ts"],"names":[],"mappings":"AACA,OAAO,EAAiB,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAIrD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAKpD,eAAO,MAAM,YAAY;;;;GAGxB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,WAAW,CAAC,OAAO,YAAY,CAAC,CAAC;AAE5D,MAAM,WAAW,cAAc;IAC3B;;OAEG;IACH,QAAQ,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC;IACrC;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,WAAW,CAAC,EAAE,WAAW,CAAC,MAAM,GAAG,SAAS,CAAC;IAC7C;;;OAGG;IACH,eAAe,EAAE,MAAM,CAAC;CAC3B;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,cAAc,CAwBxE;AAED,wBAAgB,SAAS,CACrB,IAAI,EAAE,UAAU,EAChB,IAAI,EAAE,MAAM,EACZ,WAAW,CAAC,EAAE,WAAW,CAAC,MAAM,GACjC,cAAc,CAoEhB;AAED,wBAAgB,OAAO,CACnB,OAAO,EAAE,CAAC,GAAG,CAAC,EACd,IAAI,EAAE,UAAU,EAChB,IAAI,EAAE,MAAM,EACZ,WAAW,CAAC,EAAE,WAAW,CAAC,MAAM,kBAWnC"}
@@ -1,28 +1,88 @@
1
- import { ReadableStream } from "@yume-chan/stream-extra";
1
+ import { InspectStream, ReadableStream } from "@yume-chan/stream-extra";
2
2
  import { buffer, struct, u32 } from "@yume-chan/struct";
3
3
  import { RequestId, ResponseId } from "../id/index.js";
4
+ import { Compression } from "../index-ns.js";
4
5
  import { Error as AdbSyncError } from "../socket.js";
6
+ import { SyncFlag } from "./flag.js";
5
7
  export const DataResponse = struct({ data: buffer(u32) }, { littleEndian: true });
6
- export async function* generator(pool, path) {
7
- const socket = await pool.acquire();
8
- let completed = false;
9
- let error;
10
- try {
11
- await socket.writeRequest(RequestId.Receive, path);
8
+ export function receiveV1(pool, path) {
9
+ let bytesReceived = 0;
10
+ return {
11
+ readable: ReadableStream.from(pool.withSocketGenerator(async function* (socket) {
12
+ await socket.writeRequest(RequestId.Receive, path);
13
+ for await (const packet of socket.readResponses(ResponseId.Data, DataResponse)) {
14
+ bytesReceived += packet.data.length;
15
+ yield packet.data;
16
+ }
17
+ })),
18
+ get bytesRead() {
19
+ return bytesReceived;
20
+ },
21
+ compression: undefined,
22
+ get bytesCompressed() {
23
+ return bytesReceived;
24
+ },
25
+ };
26
+ }
27
+ export function receiveV2(pool, path, compression) {
28
+ let flags = SyncFlag.None;
29
+ let decompressStream;
30
+ switch (compression) {
31
+ case Compression.Format.Brotli:
32
+ flags |= SyncFlag.Brotli;
33
+ decompressStream = Compression.createDecompressionStream(Compression.Format.Brotli);
34
+ break;
35
+ case Compression.Format.Lz4:
36
+ flags |= SyncFlag.Lz4;
37
+ decompressStream = Compression.createDecompressionStream(Compression.Format.Lz4);
38
+ break;
39
+ case Compression.Format.Zstd:
40
+ flags |= SyncFlag.Zstd;
41
+ decompressStream = Compression.createDecompressionStream(Compression.Format.Zstd);
42
+ break;
43
+ }
44
+ let bytesReceived = 0;
45
+ const raw = ReadableStream.from(pool.withSocketGenerator(async function* (socket) {
46
+ await socket.writeRequest(RequestId.ReceiveV2, path);
47
+ await socket.writeRequest(RequestId.ReceiveV2, flags);
12
48
  for await (const packet of socket.readResponses(ResponseId.Data, DataResponse)) {
49
+ bytesReceived += packet.data.length;
13
50
  yield packet.data;
14
51
  }
15
- completed = true;
52
+ }));
53
+ if (decompressStream) {
54
+ let bytesRead = 0;
55
+ return {
56
+ readable: raw.pipeThrough(decompressStream).pipeThrough(new InspectStream((chunk) => {
57
+ bytesRead += chunk.length;
58
+ })),
59
+ get bytesRead() {
60
+ return bytesRead;
61
+ },
62
+ compression,
63
+ get bytesCompressed() {
64
+ return bytesReceived;
65
+ },
66
+ };
16
67
  }
17
- catch (e) {
18
- error = e;
19
- throw e;
68
+ return {
69
+ readable: raw,
70
+ get bytesRead() {
71
+ return bytesReceived;
72
+ },
73
+ compression: Compression.Format.None,
74
+ get bytesCompressed() {
75
+ return bytesReceived;
76
+ },
77
+ };
78
+ }
79
+ export function receive(version, pool, path, compression) {
80
+ if (version === 2) {
81
+ return receiveV2(pool, path, compression);
20
82
  }
21
- finally {
22
- await pool.release(socket, !(completed || error instanceof AdbSyncError));
83
+ if (compression !== undefined && compression !== Compression.Format.None) {
84
+ throw new AdbSyncError("compression is not supported in v1");
23
85
  }
24
- }
25
- export function stream(pool, path) {
26
- return ReadableStream.from(generator(pool, path));
86
+ return receiveV1(pool, path);
27
87
  }
28
88
  //# sourceMappingURL=pull.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pull.js","sourceRoot":"","sources":["../../../../src/service/sync/request/pull.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAEzD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAExD,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEvD,OAAO,EAAE,KAAK,IAAI,YAAY,EAAE,MAAM,cAAc,CAAC;AAErD,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAC9B,EAAE,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,EACrB,EAAE,YAAY,EAAE,IAAI,EAAE,CACzB,CAAC;AAIF,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,SAAS,CAC5B,IAAgB,EAChB,IAAY;IAEZ,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;IACpC,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,IAAI,KAAc,CAAC;IAEnB,IAAI,CAAC;QACD,MAAM,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACnD,IAAI,KAAK,EAAE,MAAM,MAAM,IAAI,MAAM,CAAC,aAAa,CAC3C,UAAU,CAAC,IAAI,EACf,YAAY,CACf,EAAE,CAAC;YACA,MAAM,MAAM,CAAC,IAAI,CAAC;QACtB,CAAC;QACD,SAAS,GAAG,IAAI,CAAC;IACrB,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACT,KAAK,GAAG,CAAC,CAAC;QACV,MAAM,CAAC,CAAC;IACZ,CAAC;YAAS,CAAC;QACP,MAAM,IAAI,CAAC,OAAO,CACd,MAAM,EACN,CAAC,CAAC,SAAS,IAAI,KAAK,YAAY,YAAY,CAAC,CAChD,CAAC;IACN,CAAC;AACL,CAAC;AAED,MAAM,UAAU,MAAM,CAClB,IAAgB,EAChB,IAAY;IAEZ,OAAO,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AACtD,CAAC"}
1
+ {"version":3,"file":"pull.js","sourceRoot":"","sources":["../../../../src/service/sync/request/pull.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { ReadableStream } from "@yume-chan/stream-extra";
1
+ import type { WritableStream } from "@yume-chan/stream-extra";
2
2
  import { MaybeConsumable } from "@yume-chan/stream-extra";
3
3
  import { LinuxFileType } from "../android.js";
4
4
  import { Compression } from "../compression/index.js";
@@ -9,24 +9,36 @@ export declare const OkResponse: import("@yume-chan/struct").Struct<{
9
9
  }, undefined, import("@yume-chan/struct").FieldsValue<{
10
10
  unused: import("@yume-chan/struct").NumberField<number>;
11
11
  }>>;
12
+ export interface SendSession {
13
+ /**
14
+ * The writable stream to write the file content into.
15
+ */
16
+ writable: WritableStream<MaybeConsumable<Uint8Array>>;
17
+ /**
18
+ * Gets the number of bytes written into {@link writable}.
19
+ */
20
+ bytesWritten: number;
21
+ /**
22
+ * When using Send v2, gets the compression format used (might be `None`).
23
+ *
24
+ * When using Send v1, this will always be `undefined`.
25
+ */
26
+ compression?: Compression.Format | undefined;
27
+ /**
28
+ * When using Send v2, gets the size of the compressed data sent to the device.
29
+ * Might be same as {@link bytesWritten} if no compression was applied.
30
+ */
31
+ bytesCompressed: number;
32
+ }
12
33
  export interface SendV1Options {
13
34
  pool: SocketPool;
14
- filename: string;
15
- file: ReadableStream<MaybeConsumable<Uint8Array>>;
35
+ path: string;
16
36
  type?: LinuxFileType | undefined;
17
37
  permission?: number | undefined;
18
38
  mtime?: number | undefined;
19
39
  packetSize?: number | undefined;
20
40
  }
21
- export declare function sendV1({ pool, filename, file, type, permission, mtime, packetSize, }: SendV1Options): Promise<void>;
22
- export declare const SendV2Flags: {
23
- readonly None: 0;
24
- readonly Brotli: 1;
25
- readonly Lz4: 2;
26
- readonly Zstd: 4;
27
- readonly DryRun: 2147483648;
28
- };
29
- export type SendV2Flags = (typeof SendV2Flags)[keyof typeof SendV2Flags];
41
+ export declare function sendV1({ pool, path, type, permission, mtime, packetSize, }: SendV1Options): Promise<SendSession>;
30
42
  export declare const SendV2Request: import("@yume-chan/struct").Struct<{
31
43
  id: import("@yume-chan/struct").NumberField<number>;
32
44
  mode: import("@yume-chan/struct").NumberField<number>;
@@ -37,6 +49,16 @@ export declare const SendV2Request: import("@yume-chan/struct").Struct<{
37
49
  flags: import("@yume-chan/struct").NumberField<number>;
38
50
  }>>;
39
51
  export interface SendV2Options extends SendV1Options {
52
+ /**
53
+ * The format to compress the file stream for sending.
54
+ *
55
+ * If the device or current runtime doesn't support the specified format,
56
+ * an Error will be thrown.
57
+ *
58
+ * If `undefined` is specified, no compression will be used.
59
+ * (this behavior is different from `AdbSync.Service.prototype.write`,
60
+ * which will automatically choose the best format)
61
+ */
40
62
  compression?: Compression.Format | undefined;
41
63
  /**
42
64
  * Don't write the file to disk. Requires the `sendrecv_v2` feature.
@@ -46,9 +68,9 @@ export interface SendV2Options extends SendV1Options {
46
68
  */
47
69
  dryRun?: boolean | undefined;
48
70
  }
49
- export declare function sendV2({ pool, filename, file, type, permission, mtime, packetSize, compression, dryRun, }: SendV2Options): Promise<void>;
71
+ export declare function sendV2({ pool, path, type, permission, mtime, packetSize, compression, dryRun, }: SendV2Options): Promise<SendSession>;
50
72
  export interface SendOptions extends SendV2Options {
51
73
  version: 1 | 2;
52
74
  }
53
- export declare function send(options: SendOptions): Promise<void>;
75
+ export declare function send(options: SendOptions): Promise<SendSession>;
54
76
  //# sourceMappingURL=push.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"push.d.ts","sourceRoot":"","sources":["../../../../src/service/sync/request/push.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAGH,eAAe,EAClB,MAAM,yBAAyB,CAAC;AAIjC,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAEtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAIpD,eAAO,MAAM,aAAa,QAAY,CAAC;AAEvC,eAAO,MAAM,UAAU;;;;GAAkD,CAAC;AA2C1E,MAAM,WAAW,aAAa;IAC1B,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,cAAc,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC;IAClD,IAAI,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;IACjC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACnC;AAED,wBAAgB,MAAM,CAAC,EACnB,IAAI,EACJ,QAAQ,EACR,IAAI,EACJ,IAAyB,EACzB,UAAkB,EAClB,KAA+B,EAC/B,UAA0B,GAC7B,EAAE,aAAa,iBAaf;AAED,eAAO,MAAM,WAAW;;;;;;CAMd,CAAC;AAEX,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,OAAO,WAAW,CAAC,CAAC;AAEzE,eAAO,MAAM,aAAa;;;;;;;;GAGzB,CAAC;AAEF,MAAM,WAAW,aAAc,SAAQ,aAAa;IAChD,WAAW,CAAC,EAAE,WAAW,CAAC,MAAM,GAAG,SAAS,CAAC;IAE7C;;;;;OAKG;IACH,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CAChC;AAED,wBAAgB,MAAM,CAAC,EACnB,IAAI,EACJ,QAAQ,EACR,IAAI,EACJ,IAAyB,EACzB,UAAkB,EAClB,KAA+B,EAC/B,UAA0B,EAC1B,WAAqC,EACrC,MAAc,GACjB,EAAE,aAAa,iBA6Bf;AAED,MAAM,WAAW,WAAY,SAAQ,aAAa;IAC9C,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC;CAClB;AAED,wBAAgB,IAAI,CAAC,OAAO,EAAE,WAAW,iBAiBxC"}
1
+ {"version":3,"file":"push.d.ts","sourceRoot":"","sources":["../../../../src/service/sync/request/push.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAER,cAAc,EAEjB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAsB,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAI9E,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAEtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAMpD,eAAO,MAAM,aAAa,QAAY,CAAC;AAEvC,eAAO,MAAM,UAAU;;;;GAAkD,CAAC;AAE1E,MAAM,WAAW,WAAW;IACxB;;OAEG;IACH,QAAQ,EAAE,cAAc,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC;IACtD;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,WAAW,CAAC,EAAE,WAAW,CAAC,MAAM,GAAG,SAAS,CAAC;IAC7C;;;OAGG;IACH,eAAe,EAAE,MAAM,CAAC;CAC3B;AA4FD,MAAM,WAAW,aAAa;IAC1B,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;IACjC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACnC;AAED,wBAAsB,MAAM,CAAC,EACzB,IAAI,EACJ,IAAI,EACJ,IAAyB,EACzB,UAAkB,EAClB,KAA+B,EAC/B,UAA0B,GAC7B,EAAE,aAAa,GAAG,OAAO,CAAC,WAAW,CAAC,CAyBtC;AAED,eAAO,MAAM,aAAa;;;;;;;;GAGzB,CAAC;AAEF,MAAM,WAAW,aAAc,SAAQ,aAAa;IAChD;;;;;;;;;OASG;IACH,WAAW,CAAC,EAAE,WAAW,CAAC,MAAM,GAAG,SAAS,CAAC;IAE7C;;;;;OAKG;IACH,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CAChC;AAED,wBAAsB,MAAM,CAAC,EACzB,IAAI,EACJ,IAAI,EACJ,IAAyB,EACzB,UAAkB,EAClB,KAA+B,EAC/B,UAA0B,EAC1B,WAAqC,EACrC,MAAc,GACjB,EAAE,aAAa,GAAG,OAAO,CAAC,WAAW,CAAC,CAgGtC;AAED,MAAM,WAAW,WAAY,SAAQ,aAAa;IAC9C,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC;CAClB;AAED,wBAAgB,IAAI,CAAC,OAAO,EAAE,WAAW,wBAiBxC"}