@yume-chan/scrcpy 0.0.19 → 0.0.21

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 (278) hide show
  1. package/CHANGELOG.json +30 -0
  2. package/CHANGELOG.md +17 -1
  3. package/README.md +76 -266
  4. package/esm/codec/av1.js +2 -2
  5. package/esm/codec/av1.js.map +1 -1
  6. package/esm/codec/h264.d.ts +1 -21
  7. package/esm/codec/h264.d.ts.map +1 -1
  8. package/esm/codec/h264.js +15 -236
  9. package/esm/codec/h264.js.map +1 -1
  10. package/esm/codec/h265.d.ts +454 -0
  11. package/esm/codec/h265.d.ts.map +1 -1
  12. package/esm/codec/h265.js +1062 -2
  13. package/esm/codec/h265.js.map +1 -1
  14. package/esm/codec/index.d.ts +1 -0
  15. package/esm/codec/index.d.ts.map +1 -1
  16. package/esm/codec/index.js +1 -0
  17. package/esm/codec/index.js.map +1 -1
  18. package/esm/codec/nalu.d.ts +37 -0
  19. package/esm/codec/nalu.d.ts.map +1 -0
  20. package/esm/codec/nalu.js +323 -0
  21. package/esm/codec/nalu.js.map +1 -0
  22. package/esm/control/back-or-screen-on.d.ts +1 -1
  23. package/esm/control/back-or-screen-on.d.ts.map +1 -1
  24. package/esm/control/hover-helper.d.ts +1 -1
  25. package/esm/control/hover-helper.d.ts.map +1 -1
  26. package/esm/control/hover-helper.js +8 -9
  27. package/esm/control/hover-helper.js.map +1 -1
  28. package/esm/control/index.d.ts +2 -0
  29. package/esm/control/index.d.ts.map +1 -1
  30. package/esm/control/index.js +2 -0
  31. package/esm/control/index.js.map +1 -1
  32. package/esm/control/inject-keycode.d.ts +1 -2
  33. package/esm/control/inject-keycode.d.ts.map +1 -1
  34. package/esm/control/inject-keycode.js +4 -5
  35. package/esm/control/inject-keycode.js.map +1 -1
  36. package/esm/control/inject-text.d.ts +1 -2
  37. package/esm/control/inject-text.d.ts.map +1 -1
  38. package/esm/control/inject-text.js +1 -2
  39. package/esm/control/inject-text.js.map +1 -1
  40. package/esm/control/inject-touch.d.ts +15 -20
  41. package/esm/control/inject-touch.d.ts.map +1 -1
  42. package/esm/control/inject-touch.js +16 -43
  43. package/esm/control/inject-touch.js.map +1 -1
  44. package/esm/control/rotate-device.d.ts +2 -4
  45. package/esm/control/rotate-device.d.ts.map +1 -1
  46. package/esm/control/rotate-device.js +2 -3
  47. package/esm/control/rotate-device.js.map +1 -1
  48. package/esm/control/serializer.d.ts +11 -23
  49. package/esm/control/serializer.d.ts.map +1 -1
  50. package/esm/control/serializer.js +23 -52
  51. package/esm/control/serializer.js.map +1 -1
  52. package/esm/control/set-screen-power-mode.d.ts +1 -2
  53. package/esm/control/set-screen-power-mode.d.ts.map +1 -1
  54. package/esm/control/set-screen-power-mode.js +2 -3
  55. package/esm/control/set-screen-power-mode.js.map +1 -1
  56. package/esm/control/type.d.ts +14 -0
  57. package/esm/control/type.d.ts.map +1 -1
  58. package/esm/control/type.js +23 -1
  59. package/esm/control/type.js.map +1 -1
  60. package/esm/control/writer.d.ts +26 -0
  61. package/esm/control/writer.d.ts.map +1 -0
  62. package/esm/control/writer.js +53 -0
  63. package/esm/control/writer.js.map +1 -0
  64. package/esm/device-message/stream.d.ts.map +1 -1
  65. package/esm/device-message/stream.js +23 -8
  66. package/esm/device-message/stream.js.map +1 -1
  67. package/esm/device-message/type.js +1 -1
  68. package/esm/device-message/type.js.map +1 -1
  69. package/esm/index.d.ts +1 -2
  70. package/esm/index.d.ts.map +1 -1
  71. package/esm/index.js +1 -2
  72. package/esm/index.js.map +1 -1
  73. package/esm/options/1_16/codec-options.d.ts +2 -3
  74. package/esm/options/1_16/codec-options.d.ts.map +1 -1
  75. package/esm/options/1_16/codec-options.js.map +1 -1
  76. package/esm/options/1_16/index.d.ts +3 -1
  77. package/esm/options/1_16/index.d.ts.map +1 -1
  78. package/esm/options/1_16/index.js +3 -1
  79. package/esm/options/1_16/index.js.map +1 -1
  80. package/esm/options/1_16/init.js +2 -2
  81. package/esm/options/1_16/init.js.map +1 -1
  82. package/esm/options/1_16/options.d.ts +42 -96
  83. package/esm/options/1_16/options.d.ts.map +1 -1
  84. package/esm/options/1_16/options.js +104 -142
  85. package/esm/options/1_16/options.js.map +1 -1
  86. package/esm/options/1_16/scroll.d.ts +2 -4
  87. package/esm/options/1_16/scroll.d.ts.map +1 -1
  88. package/esm/options/1_16/scroll.js +13 -14
  89. package/esm/options/1_16/scroll.js.map +1 -1
  90. package/esm/options/1_17.d.ts +1 -0
  91. package/esm/options/1_17.d.ts.map +1 -1
  92. package/esm/options/1_17.js +8 -3
  93. package/esm/options/1_17.js.map +1 -1
  94. package/esm/options/1_18.d.ts +49 -11
  95. package/esm/options/1_18.d.ts.map +1 -1
  96. package/esm/options/1_18.js +64 -32
  97. package/esm/options/1_18.js.map +1 -1
  98. package/esm/options/1_21.d.ts +26 -7
  99. package/esm/options/1_21.d.ts.map +1 -1
  100. package/esm/options/1_21.js +34 -20
  101. package/esm/options/1_21.js.map +1 -1
  102. package/esm/options/1_22/index.d.ts +1 -0
  103. package/esm/options/1_22/index.d.ts.map +1 -1
  104. package/esm/options/1_22/index.js +1 -0
  105. package/esm/options/1_22/index.js.map +1 -1
  106. package/esm/options/1_22/options.d.ts +32 -26
  107. package/esm/options/1_22/options.d.ts.map +1 -1
  108. package/esm/options/1_22/options.js +26 -16
  109. package/esm/options/1_22/options.js.map +1 -1
  110. package/esm/options/1_22/scroll.d.ts +1 -1
  111. package/esm/options/1_22/scroll.d.ts.map +1 -1
  112. package/esm/options/1_22/scroll.js +1 -1
  113. package/esm/options/1_22/scroll.js.map +1 -1
  114. package/esm/options/1_23.d.ts +32 -8
  115. package/esm/options/1_23.d.ts.map +1 -1
  116. package/esm/options/1_23.js +23 -14
  117. package/esm/options/1_23.js.map +1 -1
  118. package/esm/options/1_24.d.ts +29 -4
  119. package/esm/options/1_24.d.ts.map +1 -1
  120. package/esm/options/1_24.js +16 -7
  121. package/esm/options/1_24.js.map +1 -1
  122. package/esm/options/1_25/options.d.ts +6 -2
  123. package/esm/options/1_25/options.d.ts.map +1 -1
  124. package/esm/options/1_25/options.js +16 -2
  125. package/esm/options/1_25/options.js.map +1 -1
  126. package/esm/options/1_25/scroll.d.ts.map +1 -1
  127. package/esm/options/1_25/scroll.js +2 -1
  128. package/esm/options/1_25/scroll.js.map +1 -1
  129. package/esm/options/2_0.d.ts +12 -8
  130. package/esm/options/2_0.d.ts.map +1 -1
  131. package/esm/options/2_0.js +82 -15
  132. package/esm/options/2_0.js.map +1 -1
  133. package/esm/options/2_1.d.ts +48 -0
  134. package/esm/options/2_1.d.ts.map +1 -0
  135. package/esm/options/2_1.js +23 -0
  136. package/esm/options/2_1.js.map +1 -0
  137. package/esm/options/codec.d.ts +4 -4
  138. package/esm/options/codec.d.ts.map +1 -1
  139. package/esm/options/codec.js +5 -6
  140. package/esm/options/codec.js.map +1 -1
  141. package/esm/options/index.d.ts +5 -0
  142. package/esm/options/index.d.ts.map +1 -1
  143. package/esm/options/index.js +5 -0
  144. package/esm/options/index.js.map +1 -1
  145. package/esm/options/latest.d.ts +4 -5
  146. package/esm/options/latest.d.ts.map +1 -1
  147. package/esm/options/latest.js +2 -3
  148. package/esm/options/latest.js.map +1 -1
  149. package/esm/options/types.d.ts +74 -33
  150. package/esm/options/types.d.ts.map +1 -1
  151. package/esm/options/types.js +62 -0
  152. package/esm/options/types.js.map +1 -1
  153. package/package.json +9 -19
  154. package/src/codec/av1.ts +33 -0
  155. package/src/codec/h264.ts +317 -0
  156. package/src/codec/h265.ts +1375 -0
  157. package/src/codec/index.ts +4 -0
  158. package/src/codec/nalu.ts +391 -0
  159. package/src/control/back-or-screen-on.ts +1 -1
  160. package/{esm/control/simple.js → src/control/basic.ts} +3 -3
  161. package/src/control/hover-helper.ts +10 -11
  162. package/src/control/index.ts +2 -0
  163. package/src/control/inject-keycode.ts +1 -3
  164. package/src/control/inject-text.ts +1 -3
  165. package/src/control/inject-touch.ts +16 -55
  166. package/src/control/rotate-device.ts +2 -7
  167. package/src/control/serializer.ts +50 -113
  168. package/src/control/set-screen-power-mode.ts +1 -3
  169. package/src/control/type.ts +32 -0
  170. package/src/control/writer.ts +85 -0
  171. package/src/device-message/stream.ts +32 -12
  172. package/src/index.ts +1 -2
  173. package/src/options/1_16/codec-options.ts +6 -7
  174. package/src/options/1_16/float-to-uint16.ts +33 -0
  175. package/src/options/1_16/index.ts +3 -1
  176. package/src/options/1_16/init.ts +80 -0
  177. package/src/options/1_16/message.ts +55 -0
  178. package/src/options/1_16/options.ts +147 -260
  179. package/src/options/1_16/scroll.ts +17 -18
  180. package/src/options/1_17.ts +66 -0
  181. package/src/options/1_18.ts +103 -39
  182. package/src/options/1_21.ts +49 -27
  183. package/src/options/1_22/index.ts +1 -0
  184. package/src/options/1_22/init.ts +19 -0
  185. package/src/options/1_22/options.ts +38 -45
  186. package/src/options/1_22/scroll.ts +3 -3
  187. package/src/options/1_23.ts +34 -22
  188. package/src/options/1_24.ts +23 -11
  189. package/src/options/1_25/options.ts +22 -4
  190. package/src/options/1_25/scroll.ts +4 -3
  191. package/src/options/2_0.ts +342 -0
  192. package/src/options/2_1.ts +35 -0
  193. package/src/options/codec.ts +98 -0
  194. package/src/options/index.ts +5 -0
  195. package/src/options/latest.ts +12 -0
  196. package/src/options/types.ts +164 -43
  197. package/tsconfig.build.json +9 -1
  198. package/tsconfig.build.tsbuildinfo +1 -1
  199. package/bin/scrcpy-server +0 -0
  200. package/bin/version.d.ts +0 -1
  201. package/bin/version.js +0 -1
  202. package/esm/adb/client.d.ts +0 -41
  203. package/esm/adb/client.d.ts.map +0 -1
  204. package/esm/adb/client.js +0 -224
  205. package/esm/adb/client.js.map +0 -1
  206. package/esm/adb/connection.d.ts +0 -49
  207. package/esm/adb/connection.d.ts.map +0 -1
  208. package/esm/adb/connection.js +0 -122
  209. package/esm/adb/connection.js.map +0 -1
  210. package/esm/adb/index.d.ts +0 -4
  211. package/esm/adb/index.d.ts.map +0 -1
  212. package/esm/adb/index.js +0 -4
  213. package/esm/adb/index.js.map +0 -1
  214. package/esm/adb/options/1_16.d.ts +0 -8
  215. package/esm/adb/options/1_16.d.ts.map +0 -1
  216. package/esm/adb/options/1_16.js +0 -20
  217. package/esm/adb/options/1_16.js.map +0 -1
  218. package/esm/adb/options/1_22.d.ts +0 -8
  219. package/esm/adb/options/1_22.d.ts.map +0 -1
  220. package/esm/adb/options/1_22.js +0 -17
  221. package/esm/adb/options/1_22.js.map +0 -1
  222. package/esm/adb/options/1_26.d.ts +0 -9
  223. package/esm/adb/options/1_26.d.ts.map +0 -1
  224. package/esm/adb/options/1_26.js +0 -11
  225. package/esm/adb/options/1_26.js.map +0 -1
  226. package/esm/adb/options/2_0.d.ts +0 -8
  227. package/esm/adb/options/2_0.d.ts.map +0 -1
  228. package/esm/adb/options/2_0.js +0 -13
  229. package/esm/adb/options/2_0.js.map +0 -1
  230. package/esm/adb/options/index.d.ts +0 -4
  231. package/esm/adb/options/index.d.ts.map +0 -1
  232. package/esm/adb/options/index.js +0 -4
  233. package/esm/adb/options/index.js.map +0 -1
  234. package/esm/adb/options/types.d.ts +0 -24
  235. package/esm/adb/options/types.d.ts.map +0 -1
  236. package/esm/adb/options/types.js +0 -37
  237. package/esm/adb/options/types.js.map +0 -1
  238. package/esm/codec.d.ts +0 -34
  239. package/esm/codec.d.ts.map +0 -1
  240. package/esm/codec.js +0 -37
  241. package/esm/codec.js.map +0 -1
  242. package/esm/control/simple.d.ts +0 -5
  243. package/esm/control/simple.d.ts.map +0 -1
  244. package/esm/control/simple.js.map +0 -1
  245. package/esm/decoder.d.ts +0 -2
  246. package/esm/decoder.d.ts.map +0 -1
  247. package/esm/decoder.js +0 -2
  248. package/esm/decoder.js.map +0 -1
  249. package/esm/options/1.17.d.ts +0 -3
  250. package/esm/options/1.17.d.ts.map +0 -1
  251. package/esm/options/1.17.js +0 -2
  252. package/esm/options/1.17.js.map +0 -1
  253. package/esm/options/1_16/h264-configuration.d.ts +0 -49
  254. package/esm/options/1_16/h264-configuration.d.ts.map +0 -1
  255. package/esm/options/1_16/h264-configuration.js +0 -414
  256. package/esm/options/1_16/h264-configuration.js.map +0 -1
  257. package/esm/options/1_16/sps.d.ts +0 -22
  258. package/esm/options/1_16/sps.d.ts.map +0 -1
  259. package/esm/options/1_16/sps.js +0 -263
  260. package/esm/options/1_16/sps.js.map +0 -1
  261. package/esm/options/1_26.d.ts +0 -57
  262. package/esm/options/1_26.d.ts.map +0 -1
  263. package/esm/options/1_26.js +0 -67
  264. package/esm/options/1_26.js.map +0 -1
  265. package/esm/options/2.d.ts +0 -57
  266. package/esm/options/2.d.ts.map +0 -1
  267. package/esm/options/2.js +0 -67
  268. package/esm/options/2.js.map +0 -1
  269. package/scripts/fetch-server.cjs +0 -38
  270. package/src/adb/client.ts +0 -329
  271. package/src/adb/connection.ts +0 -209
  272. package/src/adb/index.ts +0 -3
  273. package/src/adb/options/1_16.ts +0 -32
  274. package/src/adb/options/1_22.ts +0 -26
  275. package/src/adb/options/index.ts +0 -3
  276. package/src/adb/options/types.ts +0 -75
  277. package/src/codec.ts +0 -35
  278. package/src/options/1_16/h264-configuration.ts +0 -485
package/esm/adb/client.js DELETED
@@ -1,224 +0,0 @@
1
- import { AdbReverseNotSupportedError, AdbSubprocessNoneProtocol, } from "@yume-chan/adb";
2
- import { AbortController, DecodeUtf8Stream, InspectStream, PushReadableStream, SplitStringStream, WritableStream, } from "@yume-chan/stream-extra";
3
- import { ScrcpyControlMessageSerializer } from "../control/index.js";
4
- import { ScrcpyDeviceMessageDeserializeStream } from "../device-message/index.js";
5
- import { DEFAULT_SERVER_PATH } from "../options/index.js";
6
- function arrayToStream(array) {
7
- return new PushReadableStream(async (controller) => {
8
- for (const item of array) {
9
- await controller.enqueue(item);
10
- }
11
- });
12
- }
13
- function concatStreams(...streams) {
14
- return new PushReadableStream(async (controller) => {
15
- for (const stream of streams) {
16
- await stream.pipeTo(new WritableStream({
17
- async write(chunk) {
18
- await controller.enqueue(chunk);
19
- },
20
- }));
21
- }
22
- });
23
- }
24
- export class ScrcpyExitedError extends Error {
25
- output;
26
- constructor(output) {
27
- super("scrcpy server exited prematurely");
28
- this.output = output;
29
- }
30
- }
31
- export class AdbScrcpyClient {
32
- static async pushServer(adb, file, filename = DEFAULT_SERVER_PATH) {
33
- const sync = await adb.sync();
34
- try {
35
- await sync.write({
36
- filename,
37
- file,
38
- });
39
- }
40
- finally {
41
- await sync.dispose();
42
- }
43
- }
44
- static async start(adb, path, version, options) {
45
- let connection;
46
- let process;
47
- try {
48
- try {
49
- connection = options.createConnection(adb);
50
- await connection.initialize();
51
- }
52
- catch (e) {
53
- if (e instanceof AdbReverseNotSupportedError) {
54
- // When reverse tunnel is not supported, try forward tunnel.
55
- options.value.tunnelForward = true;
56
- connection = options.createConnection(adb);
57
- await connection.initialize();
58
- }
59
- else {
60
- connection = undefined;
61
- throw e;
62
- }
63
- }
64
- process = await adb.subprocess.spawn([
65
- // cspell: disable-next-line
66
- `CLASSPATH=${path}`,
67
- "app_process",
68
- /* unused */ "/",
69
- "com.genymobile.scrcpy.Server",
70
- version,
71
- ...options.formatServerArguments(),
72
- ], {
73
- // Scrcpy server doesn't use stderr,
74
- // so disable Shell Protocol to simplify processing
75
- protocols: [AdbSubprocessNoneProtocol],
76
- });
77
- const stdout = process.stdout
78
- .pipeThrough(new DecodeUtf8Stream())
79
- .pipeThrough(new SplitStringStream("\n"));
80
- // Read stdout, otherwise `process.exit` won't resolve.
81
- const output = [];
82
- const abortController = new AbortController();
83
- const pipe = stdout
84
- .pipeTo(new WritableStream({
85
- write(chunk) {
86
- output.push(chunk);
87
- },
88
- }), {
89
- signal: abortController.signal,
90
- preventCancel: true,
91
- })
92
- .catch((e) => {
93
- void e;
94
- });
95
- const result = await Promise.race([
96
- process.exit,
97
- connection.getStreams(),
98
- ]);
99
- if (typeof result === "number") {
100
- throw new ScrcpyExitedError(output);
101
- }
102
- abortController.abort();
103
- await pipe;
104
- const [videoStream, controlStream] = result;
105
- return new AdbScrcpyClient(options, process, concatStreams(arrayToStream(output), stdout), videoStream, controlStream);
106
- }
107
- catch (e) {
108
- await process?.kill();
109
- throw e;
110
- }
111
- finally {
112
- connection?.dispose();
113
- }
114
- }
115
- /**
116
- * This method will modify the given `options`,
117
- * so don't reuse it elsewhere.
118
- */
119
- static async getEncoders(adb, path, version, options) {
120
- Object.assign(options.value, {
121
- // Provide an invalid encoder name
122
- // So the server will return all available encoders
123
- encoderName: "_",
124
- // Disable control for faster connection in 1.22+
125
- control: false,
126
- sendDeviceMeta: false,
127
- sendDummyByte: false,
128
- });
129
- // Scrcpy server will open connections, before initializing encoder
130
- // Thus although an invalid encoder name is given, the start process will success
131
- const client = await AdbScrcpyClient.start(adb, path, version, options);
132
- const encoderNameRegex = options.getOutputEncoderNameRegex();
133
- const encoders = [];
134
- await client.stdout.pipeTo(new WritableStream({
135
- write(line) {
136
- const match = line.match(encoderNameRegex);
137
- if (match) {
138
- encoders.push(match[1]);
139
- }
140
- },
141
- }));
142
- return encoders;
143
- }
144
- /**
145
- * This method will modify the given `options`,
146
- * so don't reuse it elsewhere.
147
- */
148
- static async getDisplays(adb, path, version, options) {
149
- Object.assign(options.value, {
150
- // Similar to `getEncoders`, pass an invalid option and parse the output
151
- displayId: -1,
152
- // Disable control for faster connection in 1.22+
153
- control: false,
154
- sendDeviceMeta: false,
155
- sendDummyByte: false,
156
- });
157
- try {
158
- // Server will exit before opening connections when an invalid display id was given.
159
- await AdbScrcpyClient.start(adb, path, version, options);
160
- }
161
- catch (e) {
162
- if (e instanceof ScrcpyExitedError) {
163
- const displayIdRegex = /\s+scrcpy --display (\d+)/;
164
- const displays = [];
165
- for (const line of e.output) {
166
- const match = line.match(displayIdRegex);
167
- if (match) {
168
- displays.push(Number.parseInt(match[1], 10));
169
- }
170
- }
171
- return displays;
172
- }
173
- }
174
- throw new Error("failed to get displays");
175
- }
176
- process;
177
- _stdout;
178
- get stdout() {
179
- return this._stdout;
180
- }
181
- get exit() {
182
- return this.process.exit;
183
- }
184
- _screenWidth;
185
- get screenWidth() {
186
- return this._screenWidth;
187
- }
188
- _screenHeight;
189
- get screenHeight() {
190
- return this._screenHeight;
191
- }
192
- _videoStream;
193
- get videoStream() {
194
- return this._videoStream;
195
- }
196
- _controlMessageSerializer;
197
- get controlMessageSerializer() {
198
- return this._controlMessageSerializer;
199
- }
200
- _deviceMessageStream;
201
- get deviceMessageStream() {
202
- return this._deviceMessageStream;
203
- }
204
- constructor(options, process, stdout, videoStream, controlStream) {
205
- this.process = process;
206
- this._stdout = stdout;
207
- this._videoStream = videoStream
208
- .pipeThrough(options.createVideoStreamTransformer())
209
- .pipeThrough(new InspectStream((packet) => {
210
- if (packet.type === "configuration") {
211
- this._screenWidth = packet.data.croppedWidth;
212
- this._screenHeight = packet.data.croppedHeight;
213
- }
214
- }));
215
- if (controlStream) {
216
- this._controlMessageSerializer = new ScrcpyControlMessageSerializer(controlStream.writable, options);
217
- this._deviceMessageStream = controlStream.readable.pipeThrough(new ScrcpyDeviceMessageDeserializeStream());
218
- }
219
- }
220
- async close() {
221
- await this.process.kill();
222
- }
223
- }
224
- //# sourceMappingURL=client.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/adb/client.ts"],"names":[],"mappings":"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"}
@@ -1,49 +0,0 @@
1
- import type { Adb } from "@yume-chan/adb";
2
- import type { Disposable } from "@yume-chan/event";
3
- import type { Consumable, ReadableStream, ReadableWritablePair } from "@yume-chan/stream-extra";
4
- import type { ValueOrPromise } from "@yume-chan/struct";
5
- export interface AdbScrcpyConnectionOptions {
6
- control: boolean;
7
- /**
8
- * Write a byte on start to detect connection issues
9
- */
10
- sendDummyByte: boolean;
11
- /**
12
- * Send device name and size
13
- */
14
- sendDeviceMeta: boolean;
15
- }
16
- export declare abstract class AdbScrcpyConnection implements Disposable {
17
- protected adb: Adb;
18
- protected options: AdbScrcpyConnectionOptions;
19
- constructor(adb: Adb, options: AdbScrcpyConnectionOptions);
20
- initialize(): ValueOrPromise<void>;
21
- abstract getStreams(): ValueOrPromise<[
22
- videoSteam: ReadableStream<Uint8Array>,
23
- controlStream: ReadableWritablePair<Uint8Array, Consumable<Uint8Array>> | undefined
24
- ]>;
25
- dispose(): void;
26
- }
27
- export declare class AdbScrcpyForwardConnection extends AdbScrcpyConnection {
28
- private _disposed;
29
- private connect;
30
- private connectAndRetry;
31
- private connectVideoStream;
32
- getStreams(): Promise<[
33
- videoSteam: ReadableStream<Uint8Array>,
34
- controlStream: ReadableWritablePair<Uint8Array, Consumable<Uint8Array>> | undefined
35
- ]>;
36
- dispose(): void;
37
- }
38
- export declare class AdbScrcpyReverseConnection extends AdbScrcpyConnection {
39
- private streams;
40
- private address;
41
- initialize(): Promise<void>;
42
- private accept;
43
- getStreams(): Promise<[
44
- videoSteam: ReadableStream<Uint8Array>,
45
- controlStream: ReadableWritablePair<Uint8Array, Consumable<Uint8Array>> | undefined
46
- ]>;
47
- dispose(): void;
48
- }
49
- //# sourceMappingURL=connection.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../src/adb/connection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAG1C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EACR,UAAU,EACV,cAAc,EAEd,oBAAoB,EACvB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD,MAAM,WAAW,0BAA0B;IACvC,OAAO,EAAE,OAAO,CAAC;IAEjB;;OAEG;IACH,aAAa,EAAE,OAAO,CAAC;IAEvB;;OAEG;IACH,cAAc,EAAE,OAAO,CAAC;CAC3B;AAED,8BAAsB,mBAAoB,YAAW,UAAU;IAC3D,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC;IAEnB,SAAS,CAAC,OAAO,EAAE,0BAA0B,CAAC;gBAE3B,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,0BAA0B;IAKzD,UAAU,IAAI,cAAc,CAAC,IAAI,CAAC;aAIzB,UAAU,IAAI,cAAc,CACxC;QACI,UAAU,EAAE,cAAc,CAAC,UAAU,CAAC;QACtC,aAAa,EACP,oBAAoB,CAAC,UAAU,EAAE,UAAU,CAAC,UAAU,CAAC,CAAC,GACxD,SAAS;KAClB,CACJ;IAEM,OAAO,IAAI,IAAI;CAGzB;AAED,qBAAa,0BAA2B,SAAQ,mBAAmB;IAC/D,OAAO,CAAC,SAAS,CAAS;IAE1B,OAAO,CAAC,OAAO;YAMD,eAAe;YAaf,kBAAkB;IAcV,UAAU,IAAI,OAAO,CACvC;QACI,UAAU,EAAE,cAAc,CAAC,UAAU,CAAC;QACtC,aAAa,EACP,oBAAoB,CAAC,UAAU,EAAE,UAAU,CAAC,UAAU,CAAC,CAAC,GACxD,SAAS;KAClB,CACJ;IAwBe,OAAO,IAAI,IAAI;CAIlC;AAED,qBAAa,0BAA2B,SAAQ,mBAAmB;IAC/D,OAAO,CAAC,OAAO,CAEb;IAEF,OAAO,CAAC,OAAO,CAAU;IAEH,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;YA4BnC,MAAM;IAMP,UAAU,IAAI,OAAO,CAC9B;QACI,UAAU,EAAE,cAAc,CAAC,UAAU,CAAC;QACtC,aAAa,EACP,oBAAoB,CAAC,UAAU,EAAE,UAAU,CAAC,UAAU,CAAC,CAAC,GACxD,SAAS;KAClB,CACJ;IAwBe,OAAO;CAQ1B"}
@@ -1,122 +0,0 @@
1
- import { AdbReverseNotSupportedError } from "@yume-chan/adb";
2
- import { delay } from "@yume-chan/async";
3
- import { TransformStream } from "@yume-chan/stream-extra";
4
- export class AdbScrcpyConnection {
5
- adb;
6
- options;
7
- constructor(adb, options) {
8
- this.adb = adb;
9
- this.options = options;
10
- }
11
- initialize() {
12
- // do nothing
13
- }
14
- dispose() {
15
- // do nothing
16
- }
17
- }
18
- export class AdbScrcpyForwardConnection extends AdbScrcpyConnection {
19
- _disposed = false;
20
- connect() {
21
- return this.adb.createSocket("localabstract:scrcpy");
22
- }
23
- async connectAndRetry() {
24
- for (let i = 0; !this._disposed && i < 100; i += 1) {
25
- try {
26
- return await this.connect();
27
- }
28
- catch (e) {
29
- await delay(100);
30
- }
31
- }
32
- throw new Error(`Can't connect to server after 100 retries`);
33
- }
34
- async connectVideoStream() {
35
- const { readable: videoStream } = await this.connectAndRetry();
36
- if (this.options.sendDummyByte) {
37
- const reader = videoStream.getReader();
38
- const { done, value } = await reader.read();
39
- // server will write a `0` to signal connection success
40
- if (done || value.byteLength !== 1 || value[0] !== 0) {
41
- throw new Error("Unexpected response from server");
42
- }
43
- reader.releaseLock();
44
- }
45
- return videoStream;
46
- }
47
- async getStreams() {
48
- const videoStream = await this.connectVideoStream();
49
- let controlStream;
50
- if (this.options.control) {
51
- controlStream = await this.connectAndRetry();
52
- }
53
- // Server only writes device meta after control socket is connected (if enabled)
54
- if (this.options.sendDeviceMeta) {
55
- const reader = videoStream.getReader();
56
- const { done, value } = await reader.read();
57
- // 64 bytes device name + 2 bytes video width + 2 bytes video height
58
- if (done || value.byteLength !== 64 + 2 + 2) {
59
- throw new Error("Unexpected response from server");
60
- }
61
- reader.releaseLock();
62
- }
63
- return [videoStream, controlStream];
64
- }
65
- dispose() {
66
- super.dispose();
67
- this._disposed = true;
68
- }
69
- }
70
- export class AdbScrcpyReverseConnection extends AdbScrcpyConnection {
71
- streams;
72
- address;
73
- async initialize() {
74
- try {
75
- // try to unbind first
76
- await this.adb.reverse.remove("localabstract:scrcpy");
77
- }
78
- catch (e) {
79
- if (e instanceof AdbReverseNotSupportedError) {
80
- throw e;
81
- }
82
- // Ignore other errors when unbinding
83
- }
84
- const queue = new TransformStream();
85
- this.streams = queue.readable.getReader();
86
- const writer = queue.writable.getWriter();
87
- this.address = await this.adb.reverse.add("localabstract:scrcpy", "tcp:27183", (socket) => {
88
- void writer.write(socket);
89
- return true;
90
- });
91
- }
92
- async accept() {
93
- return (await this.streams.read()).value;
94
- }
95
- async getStreams() {
96
- const { readable: videoStream } = await this.accept();
97
- let controlStream;
98
- if (this.options.control) {
99
- controlStream = await this.accept();
100
- }
101
- // Server only writes device meta after control socket is connected (if enabled)
102
- if (this.options.sendDeviceMeta) {
103
- const reader = videoStream.getReader();
104
- const { done, value } = await reader.read();
105
- // 64 bytes device name + 2 bytes video width + 2 bytes video height
106
- if (done || value.byteLength !== 64 + 2 + 2) {
107
- throw new Error("Unexpected response from server");
108
- }
109
- reader.releaseLock();
110
- }
111
- return [videoStream, controlStream];
112
- }
113
- dispose() {
114
- // Don't await this!
115
- // `reverse.remove`'s response will never arrive
116
- // before we read all pending data from `videoStream`
117
- this.adb.reverse.remove(this.address).catch((e) => {
118
- void e;
119
- });
120
- }
121
- }
122
- //# sourceMappingURL=connection.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"connection.js","sourceRoot":"","sources":["../../src/adb/connection.ts"],"names":[],"mappings":"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"}
@@ -1,4 +0,0 @@
1
- export * from "./options/index.js";
2
- export * from "./client.js";
3
- export * from "./connection.js";
4
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/adb/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC"}
package/esm/adb/index.js DELETED
@@ -1,4 +0,0 @@
1
- export * from "./options/index.js";
2
- export * from "./client.js";
3
- export * from "./connection.js";
4
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/adb/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC"}
@@ -1,8 +0,0 @@
1
- import type { Adb } from "@yume-chan/adb";
2
- import type { ScrcpyOptionsInit1_16 } from "../../options/index.js";
3
- import type { AdbScrcpyConnection } from "../connection.js";
4
- import { AdbScrcpyOptionsBase } from "./types.js";
5
- export declare class AdbScrcpyOptions1_16<T extends ScrcpyOptionsInit1_16 = ScrcpyOptionsInit1_16> extends AdbScrcpyOptionsBase<T> {
6
- createConnection(adb: Adb): AdbScrcpyConnection;
7
- }
8
- //# sourceMappingURL=1_16.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"1_16.d.ts","sourceRoot":"","sources":["../../../src/adb/options/1_16.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAE1C,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,KAAK,EACR,mBAAmB,EAEtB,MAAM,kBAAkB,CAAC;AAM1B,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAElD,qBAAa,oBAAoB,CAC7B,CAAC,SAAS,qBAAqB,GAAG,qBAAqB,CACzD,SAAQ,oBAAoB,CAAC,CAAC,CAAC;IACb,gBAAgB,CAAC,GAAG,EAAE,GAAG,GAAG,mBAAmB;CAclE"}
@@ -1,20 +0,0 @@
1
- import { AdbScrcpyForwardConnection, AdbScrcpyReverseConnection, } from "../connection.js";
2
- import { AdbScrcpyOptionsBase } from "./types.js";
3
- export class AdbScrcpyOptions1_16 extends AdbScrcpyOptionsBase {
4
- createConnection(adb) {
5
- const options = {
6
- // Old versions always have control stream no matter what the option is
7
- // Pass `control: false` to `Connection` will disable the control stream
8
- control: true,
9
- sendDummyByte: true,
10
- sendDeviceMeta: true,
11
- };
12
- if (this.value.tunnelForward) {
13
- return new AdbScrcpyForwardConnection(adb, options);
14
- }
15
- else {
16
- return new AdbScrcpyReverseConnection(adb, options);
17
- }
18
- }
19
- }
20
- //# sourceMappingURL=1_16.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"1_16.js","sourceRoot":"","sources":["../../../src/adb/options/1_16.ts"],"names":[],"mappings":"AAOA,OAAO,EACH,0BAA0B,EAC1B,0BAA0B,GAC7B,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAElD,MAAM,OAAO,oBAEX,SAAQ,oBAAuB;IACb,gBAAgB,CAAC,GAAQ;QACrC,MAAM,OAAO,GAA+B;YACxC,uEAAuE;YACvE,wEAAwE;YACxE,OAAO,EAAE,IAAI;YACb,aAAa,EAAE,IAAI;YACnB,cAAc,EAAE,IAAI;SACvB,CAAC;QACF,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE;YAC1B,OAAO,IAAI,0BAA0B,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;SACvD;aAAM;YACH,OAAO,IAAI,0BAA0B,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;SACvD;IACL,CAAC;CACJ"}
@@ -1,8 +0,0 @@
1
- import type { Adb } from "@yume-chan/adb";
2
- import type { ScrcpyOptionsInit1_22 } from "../../options/index.js";
3
- import type { AdbScrcpyConnection } from "../connection.js";
4
- import { AdbScrcpyOptions1_16 } from "./1_16.js";
5
- export declare class AdbScrcpyOptions1_22<T extends ScrcpyOptionsInit1_22 = ScrcpyOptionsInit1_22> extends AdbScrcpyOptions1_16<T> {
6
- createConnection(adb: Adb): AdbScrcpyConnection;
7
- }
8
- //# sourceMappingURL=1_22.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"1_22.d.ts","sourceRoot":"","sources":["../../../src/adb/options/1_22.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAE1C,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAM5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAEjD,qBAAa,oBAAoB,CAC7B,CAAC,SAAS,qBAAqB,GAAG,qBAAqB,CACzD,SAAQ,oBAAoB,CAAC,CAAC,CAAC;IACb,gBAAgB,CAAC,GAAG,EAAE,GAAG,GAAG,mBAAmB;CAWlE"}
@@ -1,17 +0,0 @@
1
- import { AdbScrcpyForwardConnection, AdbScrcpyReverseConnection, } from "../connection.js";
2
- import { AdbScrcpyOptions1_16 } from "./1_16.js";
3
- export class AdbScrcpyOptions1_22 extends AdbScrcpyOptions1_16 {
4
- createConnection(adb) {
5
- const options = {
6
- ...this.getDefaultValue(),
7
- ...this.value,
8
- };
9
- if (this.value.tunnelForward) {
10
- return new AdbScrcpyForwardConnection(adb, options);
11
- }
12
- else {
13
- return new AdbScrcpyReverseConnection(adb, options);
14
- }
15
- }
16
- }
17
- //# sourceMappingURL=1_22.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"1_22.js","sourceRoot":"","sources":["../../../src/adb/options/1_22.ts"],"names":[],"mappings":"AAIA,OAAO,EACH,0BAA0B,EAC1B,0BAA0B,GAC7B,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAEjD,MAAM,OAAO,oBAEX,SAAQ,oBAAuB;IACb,gBAAgB,CAAC,GAAQ;QACrC,MAAM,OAAO,GAAG;YACZ,GAAG,IAAI,CAAC,eAAe,EAAE;YACzB,GAAG,IAAI,CAAC,KAAK;SAChB,CAAC;QACF,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE;YAC1B,OAAO,IAAI,0BAA0B,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;SACvD;aAAM;YACH,OAAO,IAAI,0BAA0B,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;SACvD;IACL,CAAC;CACJ"}
@@ -1,9 +0,0 @@
1
- import type { AdbScrcpyConnectionOptions } from "../../../src/adb/connection.js";
2
- import { AdbScrcpyOptions1_22 } from "../../../src/adb/options/1_22.js";
3
- import type { ScrcpyOptionsInit1_26 } from "../../../src/options/index.js";
4
- export declare class AdbScrcpyOptions1_26<
5
- T extends ScrcpyOptionsInit1_26 = ScrcpyOptionsInit1_26
6
- > extends AdbScrcpyOptions1_22<T> {
7
- protected getConnectionOptions(): AdbScrcpyConnectionOptions;
8
- }
9
- //# sourceMappingURL=1_26.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"1_26.d.ts","sourceRoot":"","sources":["../../../src/adb/options/1_26.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AAEnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAEjD,qBAAa,oBAAoB,CAC7B,CAAC,SAAS,qBAAqB,GAAG,qBAAqB,CACzD,SAAQ,oBAAoB,CAAC,CAAC,CAAC;cACV,oBAAoB,IAAI,0BAA0B;CAMxE"}
@@ -1,11 +0,0 @@
1
- // cspell:ignore scid
2
- import { AdbScrcpyOptions1_22 } from "./1_22.js";
3
- export class AdbScrcpyOptions1_26 extends AdbScrcpyOptions1_22 {
4
- getConnectionOptions() {
5
- const defaults = this.getDefaultValues();
6
- return Object.assign(super.getConnectionOptions(), {
7
- scid: this.value.scid?.value ?? defaults.scid.value,
8
- });
9
- }
10
- }
11
- //# sourceMappingURL=1_26.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"1_26.js","sourceRoot":"","sources":["../../../src/adb/options/1_26.ts"],"names":[],"mappings":"AAAA,qBAAqB;AAKrB,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAEjD,MAAM,OAAO,oBAEX,SAAQ,oBAAuB;IACV,oBAAoB;QACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACzC,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,EAAE,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK;SACR,CAAC,CAAC;IACrD,CAAC;CACJ"}
@@ -1,8 +0,0 @@
1
- import type { Adb } from "@yume-chan/adb";
2
- import type { ScrcpyOptionsInit2_0 } from "../../options/index.js";
3
- import type { AdbScrcpyConnection } from "../connection.js";
4
- import { AdbScrcpyOptionsBase } from "./types.js";
5
- export declare class AdbScrcpyOptions2_0 extends AdbScrcpyOptionsBase<ScrcpyOptionsInit2_0> {
6
- createConnection(adb: Adb): AdbScrcpyConnection;
7
- }
8
- //# sourceMappingURL=2_0.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"2_0.d.ts","sourceRoot":"","sources":["../../../src/adb/options/2_0.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAE1C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAG5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAElD,qBAAa,mBAAoB,SAAQ,oBAAoB,CAAC,oBAAoB,CAAC;IAC/D,gBAAgB,CAAC,GAAG,EAAE,GAAG,GAAG,mBAAmB;CAYlE"}
@@ -1,13 +0,0 @@
1
- import { AdbScrcpyOptions1_16 } from "./1_16.js";
2
- import { AdbScrcpyOptionsBase } from "./types.js";
3
- export class AdbScrcpyOptions2_0 extends AdbScrcpyOptionsBase {
4
- createConnection(adb) {
5
- return AdbScrcpyOptions1_16.createConnection(adb, {
6
- scid: this.value.scid.value,
7
- control: this.value.control,
8
- sendDummyByte: this.value.sendDummyByte,
9
- audio: this.value.audio,
10
- }, this.tunnelForwardOverride || this.value.tunnelForward);
11
- }
12
- }
13
- //# sourceMappingURL=2_0.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"2_0.js","sourceRoot":"","sources":["../../../src/adb/options/2_0.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAElD,MAAM,OAAO,mBAAoB,SAAQ,oBAA0C;IAC/D,gBAAgB,CAAC,GAAQ;QACrC,OAAO,oBAAoB,CAAC,gBAAgB,CACxC,GAAG,EACH;YACI,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK;YAC3B,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO;YAC3B,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa;YACvC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK;SAC1B,EACD,IAAI,CAAC,qBAAqB,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,CACzD,CAAC;IACN,CAAC;CACJ"}
@@ -1,4 +0,0 @@
1
- export * from "./1_16.js";
2
- export * from "./1_22.js";
3
- export * from "./types.js";
4
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adb/options/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC"}
@@ -1,4 +0,0 @@
1
- export * from "./1_16.js";
2
- export * from "./1_22.js";
3
- export * from "./types.js";
4
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adb/options/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC"}
@@ -1,24 +0,0 @@
1
- import type { Adb } from "@yume-chan/adb";
2
- import type { TransformStream } from "@yume-chan/stream-extra";
3
- import type { ScrcpyBackOrScreenOnControlMessage, ScrcpyControlMessageType, ScrcpySetClipboardControlMessage } from "../../control/index.js";
4
- import type { ScrcpyOptions, ScrcpyVideoStreamPacket } from "../../options/index.js";
5
- import type { AdbScrcpyConnection } from "../connection.js";
6
- export interface AdbScrcpyOptions<T extends object> extends ScrcpyOptions<T> {
7
- createConnection(adb: Adb): AdbScrcpyConnection;
8
- }
9
- export declare abstract class AdbScrcpyOptionsBase<T extends object> implements ScrcpyOptions<T> {
10
- private raw;
11
- get value(): Partial<T>;
12
- set value(value: Partial<T>);
13
- constructor(raw: ScrcpyOptions<T>);
14
- getDefaultValue(): T;
15
- formatServerArguments(): string[];
16
- getOutputEncoderNameRegex(): RegExp;
17
- createVideoStreamTransformer(): TransformStream<Uint8Array, ScrcpyVideoStreamPacket>;
18
- getControlMessageTypes(): ScrcpyControlMessageType[];
19
- serializeBackOrScreenOnControlMessage(message: ScrcpyBackOrScreenOnControlMessage): Uint8Array | undefined;
20
- serializeSetClipboardControlMessage(message: ScrcpySetClipboardControlMessage): Uint8Array;
21
- getScrollController(): import("../../options/index.js").ScrcpyScrollController;
22
- abstract createConnection(adb: Adb): AdbScrcpyConnection;
23
- }
24
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/adb/options/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE/D,OAAO,KAAK,EACR,kCAAkC,EAClC,wBAAwB,EACxB,gCAAgC,EACnC,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EACR,aAAa,EACb,uBAAuB,EAC1B,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAE5D,MAAM,WAAW,gBAAgB,CAAC,CAAC,SAAS,MAAM,CAAE,SAAQ,aAAa,CAAC,CAAC,CAAC;IACxE,gBAAgB,CAAC,GAAG,EAAE,GAAG,GAAG,mBAAmB,CAAC;CACnD;AAED,8BAAsB,oBAAoB,CAAC,CAAC,SAAS,MAAM,CACvD,YAAW,aAAa,CAAC,CAAC,CAAC;IAE3B,OAAO,CAAC,GAAG,CAAmB;IAE9B,IAAW,KAAK,IAAI,OAAO,CAAC,CAAC,CAAC,CAE7B;IACD,IAAW,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,EAEjC;gBAEkB,GAAG,EAAE,aAAa,CAAC,CAAC,CAAC;IAIjC,eAAe,IAAI,CAAC;IAIpB,qBAAqB,IAAI,MAAM,EAAE;IAIjC,yBAAyB,IAAI,MAAM;IAInC,4BAA4B,IAAI,eAAe,CAClD,UAAU,EACV,uBAAuB,CAC1B;IAIM,sBAAsB,IAAI,wBAAwB,EAAE;IAIpD,qCAAqC,CACxC,OAAO,EAAE,kCAAkC,GAC5C,UAAU,GAAG,SAAS;IAIlB,mCAAmC,CACtC,OAAO,EAAE,gCAAgC,GAC1C,UAAU;IAIN,mBAAmB;aAIV,gBAAgB,CAAC,GAAG,EAAE,GAAG,GAAG,mBAAmB;CAClE"}