@yume-chan/adb 0.0.9 → 0.0.12

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 (407) hide show
  1. package/CHANGELOG.json +55 -0
  2. package/CHANGELOG.md +35 -0
  3. package/LICENSE +21 -21
  4. package/README.md +240 -257
  5. package/esm/adb.d.ts +48 -0
  6. package/esm/adb.d.ts.map +1 -0
  7. package/esm/adb.js +141 -145
  8. package/esm/adb.js.map +1 -1
  9. package/{dts → esm}/auth.d.ts +17 -7
  10. package/esm/auth.d.ts.map +1 -0
  11. package/esm/auth.js +69 -109
  12. package/esm/auth.js.map +1 -1
  13. package/esm/backend.d.ts +9 -0
  14. package/esm/backend.d.ts.map +1 -0
  15. package/{dts → esm}/commands/base.d.ts +1 -1
  16. package/esm/commands/base.d.ts.map +1 -0
  17. package/esm/commands/base.js +1 -0
  18. package/esm/commands/base.js.map +1 -1
  19. package/{dts → esm}/commands/framebuffer.d.ts +3 -3
  20. package/esm/commands/framebuffer.d.ts.map +1 -0
  21. package/esm/commands/framebuffer.js +15 -18
  22. package/esm/commands/framebuffer.js.map +1 -1
  23. package/esm/commands/index.d.ts +9 -0
  24. package/esm/commands/index.d.ts.map +1 -0
  25. package/esm/commands/index.js +8 -8
  26. package/esm/commands/index.js.map +1 -1
  27. package/esm/commands/install.d.ts +4 -0
  28. package/esm/commands/install.d.ts.map +1 -0
  29. package/esm/commands/install.js +21 -13
  30. package/esm/commands/install.js.map +1 -1
  31. package/esm/commands/power.d.ts +23 -0
  32. package/esm/commands/power.d.ts.map +1 -0
  33. package/esm/commands/power.js +45 -0
  34. package/esm/commands/power.js.map +1 -0
  35. package/{dts → esm}/commands/reverse.d.ts +3 -3
  36. package/esm/commands/reverse.d.ts.map +1 -0
  37. package/esm/commands/reverse.js +50 -60
  38. package/esm/commands/reverse.js.map +1 -1
  39. package/esm/commands/subprocess/index.d.ts +57 -0
  40. package/esm/commands/subprocess/index.d.ts.map +1 -0
  41. package/esm/commands/subprocess/index.js +83 -0
  42. package/esm/commands/subprocess/index.js.map +1 -0
  43. package/esm/commands/subprocess/legacy.d.ts +28 -0
  44. package/esm/commands/subprocess/legacy.d.ts.map +1 -0
  45. package/esm/commands/subprocess/legacy.js +44 -0
  46. package/esm/commands/subprocess/legacy.js.map +1 -0
  47. package/esm/commands/subprocess/protocol.d.ts +38 -0
  48. package/esm/commands/subprocess/protocol.d.ts.map +1 -0
  49. package/esm/commands/subprocess/protocol.js +155 -0
  50. package/esm/commands/subprocess/protocol.js.map +1 -0
  51. package/esm/commands/subprocess/types.d.ts +47 -0
  52. package/esm/commands/subprocess/types.d.ts.map +1 -0
  53. package/esm/commands/{shell → subprocess}/types.js +0 -0
  54. package/{cjs/commands/shell → esm/commands/subprocess}/types.js.map +1 -1
  55. package/{dts/commands/shell → esm/commands/subprocess}/utils.d.ts +0 -0
  56. package/esm/commands/subprocess/utils.d.ts.map +1 -0
  57. package/esm/commands/{shell → subprocess}/utils.js +0 -0
  58. package/esm/commands/subprocess/utils.js.map +1 -0
  59. package/esm/commands/sync/index.d.ts +8 -0
  60. package/esm/commands/sync/index.d.ts.map +1 -0
  61. package/esm/commands/sync/index.js +7 -7
  62. package/esm/commands/sync/index.js.map +1 -1
  63. package/{dts → esm}/commands/sync/list.d.ts +4 -4
  64. package/esm/commands/sync/list.d.ts.map +1 -0
  65. package/esm/commands/sync/list.js +16 -19
  66. package/esm/commands/sync/list.js.map +1 -1
  67. package/esm/commands/sync/pull.d.ts +11 -0
  68. package/esm/commands/sync/pull.d.ts.map +1 -0
  69. package/esm/commands/sync/pull.js +17 -11
  70. package/esm/commands/sync/pull.js.map +1 -1
  71. package/esm/commands/sync/push.d.ts +8 -0
  72. package/esm/commands/sync/push.d.ts.map +1 -0
  73. package/esm/commands/sync/push.js +19 -37
  74. package/esm/commands/sync/push.js.map +1 -1
  75. package/{dts → esm}/commands/sync/request.d.ts +3 -3
  76. package/esm/commands/sync/request.d.ts.map +1 -0
  77. package/esm/commands/sync/request.js +24 -26
  78. package/esm/commands/sync/request.js.map +1 -1
  79. package/{dts → esm}/commands/sync/response.d.ts +3 -3
  80. package/esm/commands/sync/response.d.ts.map +1 -0
  81. package/esm/commands/sync/response.js +16 -19
  82. package/esm/commands/sync/response.js.map +1 -1
  83. package/{dts → esm}/commands/sync/stat.d.ts +4 -4
  84. package/esm/commands/sync/stat.d.ts.map +1 -0
  85. package/esm/commands/sync/stat.js +22 -27
  86. package/esm/commands/sync/stat.js.map +1 -1
  87. package/esm/commands/sync/sync.d.ts +83 -0
  88. package/esm/commands/sync/sync.d.ts.map +1 -0
  89. package/esm/commands/sync/sync.js +92 -89
  90. package/esm/commands/sync/sync.js.map +1 -1
  91. package/{dts → esm}/commands/tcpip.d.ts +1 -1
  92. package/{dts → esm}/commands/tcpip.d.ts.map +1 -1
  93. package/esm/commands/tcpip.js +14 -19
  94. package/esm/commands/tcpip.js.map +1 -1
  95. package/esm/crypto.d.ts +24 -0
  96. package/esm/crypto.d.ts.map +1 -0
  97. package/esm/crypto.js +33 -31
  98. package/esm/crypto.js.map +1 -1
  99. package/{dts → esm}/features.d.ts +0 -0
  100. package/{dts → esm}/features.d.ts.map +0 -0
  101. package/esm/features.js +1 -1
  102. package/esm/features.js.map +1 -1
  103. package/esm/index.d.ts +11 -0
  104. package/esm/index.d.ts.map +1 -0
  105. package/esm/index.js +10 -10
  106. package/esm/index.js.map +1 -1
  107. package/esm/packet.d.ts +28 -0
  108. package/esm/packet.d.ts.map +1 -0
  109. package/esm/packet.js +26 -53
  110. package/esm/packet.js.map +1 -1
  111. package/esm/socket/controller.d.ts +37 -0
  112. package/esm/socket/controller.d.ts.map +1 -0
  113. package/esm/socket/controller.js +52 -66
  114. package/esm/socket/controller.js.map +1 -1
  115. package/{dts → esm}/socket/dispatcher.d.ts +10 -23
  116. package/esm/socket/dispatcher.d.ts.map +1 -0
  117. package/esm/socket/dispatcher.js +148 -164
  118. package/esm/socket/dispatcher.js.map +1 -1
  119. package/esm/socket/index.d.ts +3 -0
  120. package/esm/socket/index.d.ts.map +1 -0
  121. package/esm/socket/index.js +2 -6
  122. package/esm/socket/index.js.map +1 -1
  123. package/esm/socket/socket.d.ts +34 -0
  124. package/esm/socket/socket.d.ts.map +1 -0
  125. package/esm/socket/socket.js +69 -14
  126. package/esm/socket/socket.js.map +1 -1
  127. package/esm/stream/buffered.d.ts +35 -0
  128. package/esm/stream/buffered.d.ts.map +1 -0
  129. package/esm/stream/buffered.js +123 -0
  130. package/esm/stream/buffered.js.map +1 -0
  131. package/esm/stream/detect.bak.d.ts +240 -0
  132. package/esm/stream/detect.bak.d.ts.map +1 -0
  133. package/esm/stream/detect.bak.js +60 -0
  134. package/esm/stream/detect.bak.js.map +1 -0
  135. package/esm/stream/detect.d.ts +18 -0
  136. package/esm/stream/detect.d.ts.map +1 -0
  137. package/esm/stream/detect.js +6 -0
  138. package/esm/stream/detect.js.map +1 -0
  139. package/esm/stream/detect.native.d.ts +240 -0
  140. package/esm/stream/detect.native.d.ts.map +1 -0
  141. package/esm/stream/detect.native.js +60 -0
  142. package/esm/stream/detect.native.js.map +1 -0
  143. package/esm/stream/detect.polyfill.d.ts +18 -0
  144. package/esm/stream/detect.polyfill.d.ts.map +1 -0
  145. package/esm/stream/detect.polyfill.js +6 -0
  146. package/esm/stream/detect.polyfill.js.map +1 -0
  147. package/esm/stream/index.d.ts +4 -0
  148. package/esm/stream/index.d.ts.map +1 -0
  149. package/esm/stream/index.js +3 -2
  150. package/esm/stream/index.js.map +1 -1
  151. package/esm/stream/transform.d.ts +98 -0
  152. package/esm/stream/transform.d.ts.map +1 -0
  153. package/esm/stream/transform.js +352 -0
  154. package/esm/stream/transform.js.map +1 -0
  155. package/{dts → esm}/utils/auto-reset-event.d.ts +1 -1
  156. package/esm/utils/auto-reset-event.d.ts.map +1 -0
  157. package/esm/utils/auto-reset-event.js +2 -1
  158. package/esm/utils/auto-reset-event.js.map +1 -1
  159. package/esm/utils/base64.d.ts +5 -0
  160. package/esm/utils/base64.d.ts.map +1 -0
  161. package/esm/utils/base64.js +116 -80
  162. package/esm/utils/base64.js.map +1 -1
  163. package/esm/utils/encoding.d.ts +3 -0
  164. package/esm/utils/encoding.d.ts.map +1 -0
  165. package/esm/utils/encoding.js +11 -0
  166. package/esm/utils/encoding.js.map +1 -0
  167. package/esm/utils/index.d.ts +4 -0
  168. package/esm/utils/index.d.ts.map +1 -0
  169. package/esm/utils/index.js +3 -4
  170. package/esm/utils/index.js.map +1 -1
  171. package/package.json +49 -50
  172. package/src/adb.ts +247 -242
  173. package/src/auth.ts +170 -156
  174. package/src/backend.ts +11 -24
  175. package/src/commands/base.ts +11 -11
  176. package/src/commands/framebuffer.ts +73 -73
  177. package/src/commands/index.ts +8 -8
  178. package/src/commands/install.ts +32 -21
  179. package/src/commands/power.ts +54 -0
  180. package/src/commands/reverse.ts +136 -133
  181. package/src/commands/subprocess/index.ts +124 -0
  182. package/src/commands/subprocess/legacy.ts +58 -0
  183. package/src/commands/subprocess/protocol.ts +185 -0
  184. package/src/commands/subprocess/types.ts +55 -0
  185. package/src/commands/{shell → subprocess}/utils.ts +20 -20
  186. package/src/commands/sync/index.ts +7 -7
  187. package/src/commands/sync/list.ts +40 -39
  188. package/src/commands/sync/pull.ts +43 -34
  189. package/src/commands/sync/push.ts +41 -46
  190. package/src/commands/sync/request.ts +49 -48
  191. package/src/commands/sync/response.ts +58 -57
  192. package/src/commands/sync/stat.ts +123 -121
  193. package/src/commands/sync/sync.ts +145 -113
  194. package/src/commands/tcpip.ts +21 -21
  195. package/src/crypto.ts +280 -280
  196. package/src/features.ts +5 -5
  197. package/src/index.ts +11 -10
  198. package/src/packet.ts +69 -89
  199. package/src/socket/dispatcher.ts +256 -269
  200. package/src/socket/index.ts +2 -6
  201. package/src/socket/socket.ts +129 -28
  202. package/src/stream/buffered.ts +147 -0
  203. package/src/stream/detect.native.ts +362 -0
  204. package/src/stream/detect.polyfill.ts +25 -0
  205. package/src/stream/detect.ts +25 -0
  206. package/src/stream/index.ts +3 -2
  207. package/src/stream/transform.ts +427 -0
  208. package/src/utils/auto-reset-event.ts +41 -41
  209. package/src/utils/base64.ts +306 -274
  210. package/src/utils/encoding.ts +13 -0
  211. package/src/utils/index.ts +3 -4
  212. package/tsconfig.build.json +3 -0
  213. package/tsconfig.build.tsbuildinfo +1 -0
  214. package/tsconfig.test.json +10 -0
  215. package/cjs/adb.js +0 -205
  216. package/cjs/adb.js.map +0 -1
  217. package/cjs/auth.js +0 -141
  218. package/cjs/auth.js.map +0 -1
  219. package/cjs/backend.js +0 -3
  220. package/cjs/backend.js.map +0 -1
  221. package/cjs/commands/base.js +0 -12
  222. package/cjs/commands/base.js.map +0 -1
  223. package/cjs/commands/demo-mode.js +0 -174
  224. package/cjs/commands/demo-mode.js.map +0 -1
  225. package/cjs/commands/framebuffer.js +0 -66
  226. package/cjs/commands/framebuffer.js.map +0 -1
  227. package/cjs/commands/index.js +0 -12
  228. package/cjs/commands/index.js.map +0 -1
  229. package/cjs/commands/install.js +0 -20
  230. package/cjs/commands/install.js.map +0 -1
  231. package/cjs/commands/reverse.js +0 -105
  232. package/cjs/commands/reverse.js.map +0 -1
  233. package/cjs/commands/shell/index.js +0 -56
  234. package/cjs/commands/shell/index.js.map +0 -1
  235. package/cjs/commands/shell/legacy.js +0 -37
  236. package/cjs/commands/shell/legacy.js.map +0 -1
  237. package/cjs/commands/shell/protocol.js +0 -83
  238. package/cjs/commands/shell/protocol.js.map +0 -1
  239. package/cjs/commands/shell/types.js +0 -3
  240. package/cjs/commands/shell/utils.js +0 -23
  241. package/cjs/commands/shell/utils.js.map +0 -1
  242. package/cjs/commands/sync/index.js +0 -11
  243. package/cjs/commands/sync/index.js.map +0 -1
  244. package/cjs/commands/sync/list.js +0 -36
  245. package/cjs/commands/sync/list.js.map +0 -1
  246. package/cjs/commands/sync/pull.js +0 -34
  247. package/cjs/commands/sync/pull.js.map +0 -1
  248. package/cjs/commands/sync/push.js +0 -49
  249. package/cjs/commands/sync/push.js.map +0 -1
  250. package/cjs/commands/sync/request.js +0 -48
  251. package/cjs/commands/sync/request.js.map +0 -1
  252. package/cjs/commands/sync/response.js +0 -53
  253. package/cjs/commands/sync/response.js.map +0 -1
  254. package/cjs/commands/sync/stat.js +0 -109
  255. package/cjs/commands/sync/stat.js.map +0 -1
  256. package/cjs/commands/sync/sync.js +0 -118
  257. package/cjs/commands/sync/sync.js.map +0 -1
  258. package/cjs/commands/tcpip.js +0 -28
  259. package/cjs/commands/tcpip.js.map +0 -1
  260. package/cjs/crypto.js +0 -231
  261. package/cjs/crypto.js.map +0 -1
  262. package/cjs/features.js +0 -10
  263. package/cjs/features.js.map +0 -1
  264. package/cjs/index.js +0 -14
  265. package/cjs/index.js.map +0 -1
  266. package/cjs/packet.js +0 -77
  267. package/cjs/packet.js.map +0 -1
  268. package/cjs/socket/close-event-emitter.js +0 -32
  269. package/cjs/socket/close-event-emitter.js.map +0 -1
  270. package/cjs/socket/controller.js +0 -84
  271. package/cjs/socket/controller.js.map +0 -1
  272. package/cjs/socket/data-event-emitter.js +0 -29
  273. package/cjs/socket/data-event-emitter.js.map +0 -1
  274. package/cjs/socket/dispatcher.js +0 -219
  275. package/cjs/socket/dispatcher.js.map +0 -1
  276. package/cjs/socket/index.js +0 -10
  277. package/cjs/socket/index.js.map +0 -1
  278. package/cjs/socket/logger.js +0 -3
  279. package/cjs/socket/logger.js.map +0 -1
  280. package/cjs/socket/socket.js +0 -24
  281. package/cjs/socket/socket.js.map +0 -1
  282. package/cjs/stream/buffered-stream.js +0 -78
  283. package/cjs/stream/buffered-stream.js.map +0 -1
  284. package/cjs/stream/index.js +0 -6
  285. package/cjs/stream/index.js.map +0 -1
  286. package/cjs/stream/stream.js +0 -45
  287. package/cjs/stream/stream.js.map +0 -1
  288. package/cjs/utils/auto-reset-event.js +0 -37
  289. package/cjs/utils/auto-reset-event.js.map +0 -1
  290. package/cjs/utils/base64.js +0 -210
  291. package/cjs/utils/base64.js.map +0 -1
  292. package/cjs/utils/chunk.js +0 -75
  293. package/cjs/utils/chunk.js.map +0 -1
  294. package/cjs/utils/event-queue.js +0 -108
  295. package/cjs/utils/event-queue.js.map +0 -1
  296. package/cjs/utils/index.js +0 -8
  297. package/cjs/utils/index.js.map +0 -1
  298. package/dts/adb.d.ts +0 -46
  299. package/dts/adb.d.ts.map +0 -1
  300. package/dts/auth.d.ts.map +0 -1
  301. package/dts/backend.d.ts +0 -15
  302. package/dts/backend.d.ts.map +0 -1
  303. package/dts/commands/base.d.ts.map +0 -1
  304. package/dts/commands/demo-mode.d.ts +0 -41
  305. package/dts/commands/demo-mode.d.ts.map +0 -1
  306. package/dts/commands/framebuffer.d.ts.map +0 -1
  307. package/dts/commands/index.d.ts +0 -9
  308. package/dts/commands/index.d.ts.map +0 -1
  309. package/dts/commands/install.d.ts +0 -3
  310. package/dts/commands/install.d.ts.map +0 -1
  311. package/dts/commands/reverse.d.ts.map +0 -1
  312. package/dts/commands/shell/index.d.ts +0 -20
  313. package/dts/commands/shell/index.d.ts.map +0 -1
  314. package/dts/commands/shell/legacy.d.ts +0 -27
  315. package/dts/commands/shell/legacy.d.ts.map +0 -1
  316. package/dts/commands/shell/protocol.d.ts +0 -37
  317. package/dts/commands/shell/protocol.d.ts.map +0 -1
  318. package/dts/commands/shell/types.d.ts +0 -15
  319. package/dts/commands/shell/types.d.ts.map +0 -1
  320. package/dts/commands/shell/utils.d.ts.map +0 -1
  321. package/dts/commands/sync/index.d.ts +0 -8
  322. package/dts/commands/sync/index.d.ts.map +0 -1
  323. package/dts/commands/sync/list.d.ts.map +0 -1
  324. package/dts/commands/sync/pull.d.ts +0 -11
  325. package/dts/commands/sync/pull.d.ts.map +0 -1
  326. package/dts/commands/sync/push.d.ts +0 -8
  327. package/dts/commands/sync/push.d.ts.map +0 -1
  328. package/dts/commands/sync/request.d.ts.map +0 -1
  329. package/dts/commands/sync/response.d.ts.map +0 -1
  330. package/dts/commands/sync/stat.d.ts.map +0 -1
  331. package/dts/commands/sync/sync.d.ts +0 -68
  332. package/dts/commands/sync/sync.d.ts.map +0 -1
  333. package/dts/crypto.d.ts +0 -17
  334. package/dts/crypto.d.ts.map +0 -1
  335. package/dts/index.d.ts +0 -11
  336. package/dts/index.d.ts.map +0 -1
  337. package/dts/packet.d.ts +0 -27
  338. package/dts/packet.d.ts.map +0 -1
  339. package/dts/socket/close-event-emitter.d.ts +0 -8
  340. package/dts/socket/close-event-emitter.d.ts.map +0 -1
  341. package/dts/socket/controller.d.ts +0 -43
  342. package/dts/socket/controller.d.ts.map +0 -1
  343. package/dts/socket/data-event-emitter.d.ts +0 -10
  344. package/dts/socket/data-event-emitter.d.ts.map +0 -1
  345. package/dts/socket/dispatcher.d.ts.map +0 -1
  346. package/dts/socket/index.d.ts +0 -7
  347. package/dts/socket/index.d.ts.map +0 -1
  348. package/dts/socket/logger.d.ts +0 -9
  349. package/dts/socket/logger.d.ts.map +0 -1
  350. package/dts/socket/socket.d.ts +0 -22
  351. package/dts/socket/socket.d.ts.map +0 -1
  352. package/dts/stream/buffered-stream.d.ts +0 -30
  353. package/dts/stream/buffered-stream.d.ts.map +0 -1
  354. package/dts/stream/index.d.ts +0 -3
  355. package/dts/stream/index.d.ts.map +0 -1
  356. package/dts/stream/stream.d.ts +0 -15
  357. package/dts/stream/stream.d.ts.map +0 -1
  358. package/dts/utils/auto-reset-event.d.ts.map +0 -1
  359. package/dts/utils/base64.d.ts +0 -7
  360. package/dts/utils/base64.d.ts.map +0 -1
  361. package/dts/utils/chunk.d.ts +0 -3
  362. package/dts/utils/chunk.d.ts.map +0 -1
  363. package/dts/utils/event-queue.d.ts +0 -35
  364. package/dts/utils/event-queue.d.ts.map +0 -1
  365. package/dts/utils/index.d.ts +0 -5
  366. package/dts/utils/index.d.ts.map +0 -1
  367. package/esm/commands/demo-mode.js +0 -170
  368. package/esm/commands/demo-mode.js.map +0 -1
  369. package/esm/commands/shell/index.js +0 -52
  370. package/esm/commands/shell/index.js.map +0 -1
  371. package/esm/commands/shell/legacy.js +0 -33
  372. package/esm/commands/shell/legacy.js.map +0 -1
  373. package/esm/commands/shell/protocol.js +0 -79
  374. package/esm/commands/shell/protocol.js.map +0 -1
  375. package/esm/commands/shell/types.js.map +0 -1
  376. package/esm/commands/shell/utils.js.map +0 -1
  377. package/esm/socket/close-event-emitter.js +0 -28
  378. package/esm/socket/close-event-emitter.js.map +0 -1
  379. package/esm/socket/data-event-emitter.js +0 -25
  380. package/esm/socket/data-event-emitter.js.map +0 -1
  381. package/esm/socket/logger.js +0 -2
  382. package/esm/socket/logger.js.map +0 -1
  383. package/esm/stream/buffered-stream.js +0 -73
  384. package/esm/stream/buffered-stream.js.map +0 -1
  385. package/esm/stream/stream.js +0 -41
  386. package/esm/stream/stream.js.map +0 -1
  387. package/esm/utils/chunk.js +0 -70
  388. package/esm/utils/chunk.js.map +0 -1
  389. package/esm/utils/event-queue.js +0 -104
  390. package/esm/utils/event-queue.js.map +0 -1
  391. package/src/commands/demo-mode.ts +0 -160
  392. package/src/commands/shell/index.ts +0 -68
  393. package/src/commands/shell/legacy.ts +0 -42
  394. package/src/commands/shell/protocol.ts +0 -94
  395. package/src/commands/shell/types.ts +0 -21
  396. package/src/socket/close-event-emitter.ts +0 -28
  397. package/src/socket/controller.ts +0 -105
  398. package/src/socket/data-event-emitter.ts +0 -27
  399. package/src/socket/logger.ts +0 -12
  400. package/src/stream/buffered-stream.ts +0 -100
  401. package/src/stream/stream.ts +0 -50
  402. package/src/utils/chunk.ts +0 -70
  403. package/src/utils/event-queue.ts +0 -145
  404. package/tsconfig.cjs.json +0 -11
  405. package/tsconfig.esm.json +0 -28
  406. package/tsconfig.esm.tsbuildinfo +0 -1305
  407. package/tsconfig.json +0 -18
@@ -0,0 +1,55 @@
1
+ import type { ValueOrPromise } from "@yume-chan/struct";
2
+ import type { Adb } from "../../adb.js";
3
+ import type { AdbSocket } from "../../socket/index.js";
4
+ import type { ReadableStream, WritableStream } from "../../stream/index.js";
5
+
6
+ export interface AdbSubprocessProtocol {
7
+ /**
8
+ * A WritableStream that writes to the `stdin` pipe.
9
+ */
10
+ readonly stdin: WritableStream<Uint8Array>;
11
+
12
+ /**
13
+ * The `stdout` pipe of the process.
14
+ */
15
+ readonly stdout: ReadableStream<Uint8Array>;
16
+
17
+ /**
18
+ * The `stderr` pipe of the process.
19
+ *
20
+ * Note: Some `AdbShell` doesn't separate `stdout` and `stderr`,
21
+ * All output will be sent to `stdout`.
22
+ */
23
+ readonly stderr: ReadableStream<Uint8Array>;
24
+
25
+ /**
26
+ * A `Promise` that resolves to the exit code of the process.
27
+ *
28
+ * Note: Some `AdbShell` doesn't support exit code,
29
+ * They will always resolve with `0`.
30
+ */
31
+ readonly exit: Promise<number>;
32
+
33
+ /**
34
+ * Resizes the current shell.
35
+ *
36
+ * Some `AdbShell`s may not support resizing and will always ignore calls to this method.
37
+ */
38
+ resize(rows: number, cols: number): ValueOrPromise<void>;
39
+
40
+ /**
41
+ * Kills the current process.
42
+ */
43
+ kill(): ValueOrPromise<void>;
44
+ }
45
+
46
+ export interface AdbSubprocessProtocolConstructor {
47
+ /** Returns `true` if the `adb` instance supports this shell */
48
+ isSupported(adb: Adb): ValueOrPromise<boolean>;
49
+
50
+ /** Creates a new `AdbShell` using the specified `Adb` and `command` */
51
+ spawn(adb: Adb, command: string): ValueOrPromise<AdbSubprocessProtocol>;
52
+
53
+ /** Creates a new `AdbShell` by attaching to an exist `AdbSocket` */
54
+ new(socket: AdbSocket): AdbSubprocessProtocol;
55
+ }
@@ -1,20 +1,20 @@
1
- export function escapeArg(s: string) {
2
- let result = '';
3
- result += `'`;
4
-
5
- let base = 0;
6
- while (true) {
7
- const found = s.indexOf(`'`, base);
8
- if (found === -1) {
9
- result += s.substring(base);
10
- break;
11
- }
12
- result += s.substring(base, found);
13
- // a'b becomes a'\'b
14
- result += String.raw`'\''`;
15
- base = found + 1;
16
- }
17
-
18
- result += `'`;
19
- return result;
20
- }
1
+ export function escapeArg(s: string) {
2
+ let result = '';
3
+ result += `'`;
4
+
5
+ let base = 0;
6
+ while (true) {
7
+ const found = s.indexOf(`'`, base);
8
+ if (found === -1) {
9
+ result += s.substring(base);
10
+ break;
11
+ }
12
+ result += s.substring(base, found);
13
+ // a'b becomes a'\'b
14
+ result += String.raw`'\''`;
15
+ base = found + 1;
16
+ }
17
+
18
+ result += `'`;
19
+ return result;
20
+ }
@@ -1,7 +1,7 @@
1
- export * from './list';
2
- export * from './pull';
3
- export * from './request';
4
- export * from './response';
5
- export * from './push';
6
- export * from './stat';
7
- export * from './sync';
1
+ export * from './list.js';
2
+ export * from './pull.js';
3
+ export * from './request.js';
4
+ export * from './response.js';
5
+ export * from './push.js';
6
+ export * from './stat.js';
7
+ export * from './sync.js';
@@ -1,39 +1,40 @@
1
- import Struct from '@yume-chan/struct';
2
- import { AdbBufferedStream } from '../../stream';
3
- import { AdbSyncRequestId, adbSyncWriteRequest } from './request';
4
- import { AdbSyncDoneResponse, adbSyncReadResponse, AdbSyncResponseId } from './response';
5
- import { AdbSyncLstatResponse } from './stat';
6
-
7
- export const AdbSyncEntryResponse =
8
- new Struct({ littleEndian: true })
9
- .fields(AdbSyncLstatResponse)
10
- .uint32('nameLength')
11
- .string('name', { lengthField: 'nameLength' })
12
- .extra({ id: AdbSyncResponseId.Entry as const });
13
-
14
- export type AdbSyncEntryResponse = typeof AdbSyncEntryResponse['TDeserializeResult'];
15
-
16
- const ResponseTypes = {
17
- [AdbSyncResponseId.Entry]: AdbSyncEntryResponse,
18
- [AdbSyncResponseId.Done]: new AdbSyncDoneResponse(AdbSyncEntryResponse.size),
19
- };
20
-
21
- export async function* adbSyncOpenDir(
22
- stream: AdbBufferedStream,
23
- path: string
24
- ): AsyncGenerator<AdbSyncEntryResponse, void, void> {
25
- await adbSyncWriteRequest(stream, AdbSyncRequestId.List, path);
26
-
27
- while (true) {
28
- const response = await adbSyncReadResponse(stream, ResponseTypes);
29
- switch (response.id) {
30
- case AdbSyncResponseId.Entry:
31
- yield response;
32
- break;
33
- case AdbSyncResponseId.Done:
34
- return;
35
- default:
36
- throw new Error('Unexpected response id');
37
- }
38
- }
39
- }
1
+ import Struct from '@yume-chan/struct';
2
+ import type { AdbBufferedStream, WritableStreamDefaultWriter } from '../../stream/index.js';
3
+ import { AdbSyncRequestId, adbSyncWriteRequest } from './request.js';
4
+ import { AdbSyncDoneResponse, adbSyncReadResponse, AdbSyncResponseId } from './response.js';
5
+ import { AdbSyncLstatResponse } from './stat.js';
6
+
7
+ export const AdbSyncEntryResponse =
8
+ new Struct({ littleEndian: true })
9
+ .fields(AdbSyncLstatResponse)
10
+ .uint32('nameLength')
11
+ .string('name', { lengthField: 'nameLength' })
12
+ .extra({ id: AdbSyncResponseId.Entry as const });
13
+
14
+ export type AdbSyncEntryResponse = typeof AdbSyncEntryResponse['TDeserializeResult'];
15
+
16
+ const ResponseTypes = {
17
+ [AdbSyncResponseId.Entry]: AdbSyncEntryResponse,
18
+ [AdbSyncResponseId.Done]: new AdbSyncDoneResponse(AdbSyncEntryResponse.size),
19
+ };
20
+
21
+ export async function* adbSyncOpenDir(
22
+ stream: AdbBufferedStream,
23
+ writer: WritableStreamDefaultWriter<Uint8Array>,
24
+ path: string,
25
+ ): AsyncGenerator<AdbSyncEntryResponse, void, void> {
26
+ await adbSyncWriteRequest(writer, AdbSyncRequestId.List, path);
27
+
28
+ while (true) {
29
+ const response = await adbSyncReadResponse(stream, ResponseTypes);
30
+ switch (response.id) {
31
+ case AdbSyncResponseId.Entry:
32
+ yield response;
33
+ break;
34
+ case AdbSyncResponseId.Done:
35
+ return;
36
+ default:
37
+ throw new Error('Unexpected response id');
38
+ }
39
+ }
40
+ }
@@ -1,34 +1,43 @@
1
- import Struct from '@yume-chan/struct';
2
- import { AdbBufferedStream } from '../../stream';
3
- import { AdbSyncRequestId, adbSyncWriteRequest } from './request';
4
- import { AdbSyncDoneResponse, adbSyncReadResponse, AdbSyncResponseId } from './response';
5
-
6
- export const AdbSyncDataResponse =
7
- new Struct({ littleEndian: true })
8
- .uint32('dataLength')
9
- .arrayBuffer('data', { lengthField: 'dataLength' })
10
- .extra({ id: AdbSyncResponseId.Data as const });
11
-
12
- const ResponseTypes = {
13
- [AdbSyncResponseId.Data]: AdbSyncDataResponse,
14
- [AdbSyncResponseId.Done]: new AdbSyncDoneResponse(AdbSyncDataResponse.size),
15
- };
16
-
17
- export async function* adbSyncPull(
18
- stream: AdbBufferedStream,
19
- path: string,
20
- ): AsyncGenerator<ArrayBuffer, void, void> {
21
- await adbSyncWriteRequest(stream, AdbSyncRequestId.Receive, path);
22
- while (true) {
23
- const response = await adbSyncReadResponse(stream, ResponseTypes);
24
- switch (response.id) {
25
- case AdbSyncResponseId.Data:
26
- yield response.data!;
27
- break;
28
- case AdbSyncResponseId.Done:
29
- return;
30
- default:
31
- throw new Error('Unexpected response id');
32
- }
33
- }
34
- }
1
+ import Struct from '@yume-chan/struct';
2
+ import { AdbBufferedStream, ReadableStream, WritableStreamDefaultWriter } from '../../stream/index.js';
3
+ import { AdbSyncRequestId, adbSyncWriteRequest } from './request.js';
4
+ import { AdbSyncDoneResponse, adbSyncReadResponse, AdbSyncResponseId } from './response.js';
5
+
6
+ export const AdbSyncDataResponse =
7
+ new Struct({ littleEndian: true })
8
+ .uint32('dataLength')
9
+ .uint8Array('data', { lengthField: 'dataLength' })
10
+ .extra({ id: AdbSyncResponseId.Data as const });
11
+
12
+ const ResponseTypes = {
13
+ [AdbSyncResponseId.Data]: AdbSyncDataResponse,
14
+ [AdbSyncResponseId.Done]: new AdbSyncDoneResponse(AdbSyncDataResponse.size),
15
+ };
16
+
17
+ export function adbSyncPull(
18
+ stream: AdbBufferedStream,
19
+ writer: WritableStreamDefaultWriter<Uint8Array>,
20
+ path: string,
21
+ ): ReadableStream<Uint8Array> {
22
+ return new ReadableStream<Uint8Array>({
23
+ async start() {
24
+ await adbSyncWriteRequest(writer, AdbSyncRequestId.Receive, path);
25
+ },
26
+ async pull(controller) {
27
+ const response = await adbSyncReadResponse(stream, ResponseTypes);
28
+ switch (response.id) {
29
+ case AdbSyncResponseId.Data:
30
+ controller.enqueue(response.data!);
31
+ break;
32
+ case AdbSyncResponseId.Done:
33
+ controller.close();
34
+ break;
35
+ default:
36
+ throw new Error('Unexpected response id');
37
+ }
38
+ }
39
+ }, {
40
+ highWaterMark: 16 * 1024,
41
+ size(chunk) { return chunk.byteLength; }
42
+ });
43
+ }
@@ -1,46 +1,41 @@
1
- import Struct from '@yume-chan/struct';
2
- import { AdbBufferedStream } from '../../stream';
3
- import { chunkArrayLike, chunkAsyncIterable } from '../../utils';
4
- import { AdbSyncRequestId, adbSyncWriteRequest } from './request';
5
- import { adbSyncReadResponse, AdbSyncResponseId } from './response';
6
- import { LinuxFileType } from './stat';
7
-
8
- export const AdbSyncOkResponse =
9
- new Struct({ littleEndian: true })
10
- .uint32('unused');
11
-
12
- const ResponseTypes = {
13
- [AdbSyncResponseId.Ok]: AdbSyncOkResponse,
14
- };
15
-
16
- export const AdbSyncMaxPacketSize = 64 * 1024;
17
-
18
- export async function adbSyncPush(
19
- stream: AdbBufferedStream,
20
- filename: string,
21
- content: ArrayLike<number> | ArrayBufferLike | AsyncIterable<ArrayBuffer>,
22
- mode: number = (LinuxFileType.File << 12) | 0o666,
23
- mtime: number = (Date.now() / 1000) | 0,
24
- packetSize: number = AdbSyncMaxPacketSize,
25
- onProgress?: (uploaded: number) => void,
26
- ): Promise<void> {
27
- const pathAndMode = `${filename},${mode.toString()}`;
28
- await adbSyncWriteRequest(stream, AdbSyncRequestId.Send, pathAndMode);
29
-
30
- let chunkReader: Iterable<ArrayBuffer> | AsyncIterable<ArrayBuffer>;
31
- if ('length' in content || 'byteLength' in content) {
32
- chunkReader = chunkArrayLike(content, packetSize);
33
- } else {
34
- chunkReader = chunkAsyncIterable(content, packetSize);
35
- }
36
-
37
- let uploaded = 0;
38
- for await (const buffer of chunkReader) {
39
- await adbSyncWriteRequest(stream, AdbSyncRequestId.Data, buffer);
40
- uploaded += buffer.byteLength;
41
- onProgress?.(uploaded);
42
- }
43
-
44
- await adbSyncWriteRequest(stream, AdbSyncRequestId.Done, mtime);
45
- await adbSyncReadResponse(stream, ResponseTypes);
46
- }
1
+ import Struct from '@yume-chan/struct';
2
+ import { AdbBufferedStream, ChunkStream, pipeFrom, WritableStream, WritableStreamDefaultWriter } from '../../stream/index.js';
3
+ import { AdbSyncRequestId, adbSyncWriteRequest } from './request.js';
4
+ import { adbSyncReadResponse, AdbSyncResponseId } from './response.js';
5
+ import { LinuxFileType } from './stat.js';
6
+
7
+ export const AdbSyncOkResponse =
8
+ new Struct({ littleEndian: true })
9
+ .uint32('unused');
10
+
11
+ const ResponseTypes = {
12
+ [AdbSyncResponseId.Ok]: AdbSyncOkResponse,
13
+ };
14
+
15
+ export const ADB_SYNC_MAX_PACKET_SIZE = 64 * 1024;
16
+
17
+ export function adbSyncPush(
18
+ stream: AdbBufferedStream,
19
+ writer: WritableStreamDefaultWriter<Uint8Array>,
20
+ filename: string,
21
+ mode: number = (LinuxFileType.File << 12) | 0o666,
22
+ mtime: number = (Date.now() / 1000) | 0,
23
+ packetSize: number = ADB_SYNC_MAX_PACKET_SIZE,
24
+ ): WritableStream<Uint8Array> {
25
+ return pipeFrom(
26
+ new WritableStream<Uint8Array>({
27
+ async start() {
28
+ const pathAndMode = `${filename},${mode.toString()}`;
29
+ await adbSyncWriteRequest(writer, AdbSyncRequestId.Send, pathAndMode);
30
+ },
31
+ async write(chunk) {
32
+ await adbSyncWriteRequest(writer, AdbSyncRequestId.Data, chunk);
33
+ },
34
+ async close() {
35
+ await adbSyncWriteRequest(writer, AdbSyncRequestId.Done, mtime);
36
+ await adbSyncReadResponse(stream, ResponseTypes);
37
+ },
38
+ }),
39
+ new ChunkStream(packetSize)
40
+ );
41
+ }
@@ -1,48 +1,49 @@
1
- import Struct from '@yume-chan/struct';
2
- import { AdbBufferedStream } from '../../stream';
3
-
4
- export enum AdbSyncRequestId {
5
- List = 'LIST',
6
- Send = 'SEND',
7
- Lstat = 'STAT',
8
- Stat = 'STA2',
9
- Lstat2 = 'LST2',
10
- Data = 'DATA',
11
- Done = 'DONE',
12
- Receive = 'RECV',
13
- }
14
-
15
- export const AdbSyncNumberRequest =
16
- new Struct({ littleEndian: true })
17
- .string('id', { length: 4 })
18
- .uint32('arg');
19
-
20
- export const AdbSyncDataRequest =
21
- new Struct({ littleEndian: true })
22
- .fields(AdbSyncNumberRequest)
23
- .arrayBuffer('data', { lengthField: 'arg' });
24
-
25
- export async function adbSyncWriteRequest(
26
- stream: AdbBufferedStream,
27
- id: AdbSyncRequestId | string,
28
- value: number | string | ArrayBuffer
29
- ): Promise<void> {
30
- let buffer: ArrayBuffer;
31
- if (typeof value === 'number') {
32
- buffer = AdbSyncNumberRequest.serialize({
33
- id,
34
- arg: value,
35
- }, stream);
36
- } else if (typeof value === 'string') {
37
- buffer = AdbSyncDataRequest.serialize({
38
- id,
39
- data: stream.encodeUtf8(value),
40
- }, stream);
41
- } else {
42
- buffer = AdbSyncDataRequest.serialize({
43
- id,
44
- data: value,
45
- }, stream);
46
- }
47
- await stream.write(buffer);
48
- }
1
+ import Struct from '@yume-chan/struct';
2
+ import type { WritableStreamDefaultWriter } from "../../stream/index.js";
3
+ import { encodeUtf8 } from "../../utils/index.js";
4
+
5
+ export enum AdbSyncRequestId {
6
+ List = 'LIST',
7
+ Send = 'SEND',
8
+ Lstat = 'STAT',
9
+ Stat = 'STA2',
10
+ Lstat2 = 'LST2',
11
+ Data = 'DATA',
12
+ Done = 'DONE',
13
+ Receive = 'RECV',
14
+ }
15
+
16
+ export const AdbSyncNumberRequest =
17
+ new Struct({ littleEndian: true })
18
+ .string('id', { length: 4 })
19
+ .uint32('arg');
20
+
21
+ export const AdbSyncDataRequest =
22
+ new Struct({ littleEndian: true })
23
+ .fields(AdbSyncNumberRequest)
24
+ .uint8Array('data', { lengthField: 'arg' });
25
+
26
+ export async function adbSyncWriteRequest(
27
+ writer: WritableStreamDefaultWriter<Uint8Array>,
28
+ id: AdbSyncRequestId | string,
29
+ value: number | string | Uint8Array
30
+ ): Promise<void> {
31
+ let buffer: Uint8Array;
32
+ if (typeof value === 'number') {
33
+ buffer = AdbSyncNumberRequest.serialize({
34
+ id,
35
+ arg: value,
36
+ });
37
+ } else if (typeof value === 'string') {
38
+ buffer = AdbSyncDataRequest.serialize({
39
+ id,
40
+ data: encodeUtf8(value),
41
+ });
42
+ } else {
43
+ buffer = AdbSyncDataRequest.serialize({
44
+ id,
45
+ data: value,
46
+ });
47
+ }
48
+ await writer.write(buffer);
49
+ }
@@ -1,57 +1,58 @@
1
- import Struct, { StructDeserializationContext, StructLike, StructValueType } from '@yume-chan/struct';
2
- import { AdbBufferedStream } from '../../stream';
3
-
4
- export enum AdbSyncResponseId {
5
- Entry = 'DENT',
6
- Lstat = 'STAT',
7
- Stat = 'STA2',
8
- Lstat2 = 'LST2',
9
- Done = 'DONE',
10
- Data = 'DATA',
11
- Ok = 'OKAY',
12
- Fail = 'FAIL',
13
- }
14
-
15
- // DONE responses' size are always same as the request's normal response.
16
- // For example DONE responses for LIST requests are 16 bytes (same as DENT responses),
17
- // but DONE responses for STAT requests are 12 bytes (same as STAT responses)
18
- // So we need to know responses' size in advance.
19
- export class AdbSyncDoneResponse implements StructLike<AdbSyncDoneResponse> {
20
- private length: number;
21
-
22
- public readonly id = AdbSyncResponseId.Done;
23
-
24
- public constructor(length: number) {
25
- this.length = length;
26
- }
27
-
28
- public async deserialize(context: StructDeserializationContext): Promise<this> {
29
- await context.read(this.length);
30
- return this;
31
- }
32
- }
33
-
34
- export const AdbSyncFailResponse =
35
- new Struct({ littleEndian: true })
36
- .uint32('messageLength')
37
- .string('message', { lengthField: 'messageLength' })
38
- .postDeserialize(object => {
39
- throw new Error(object.message);
40
- });
41
-
42
- export async function adbSyncReadResponse<T extends Record<string, StructLike<any>>>(
43
- stream: AdbBufferedStream,
44
- types: T,
45
- ): Promise<StructValueType<T[keyof T]>> {
46
- const id = stream.backend.decodeUtf8(await stream.read(4));
47
-
48
- if (id === AdbSyncResponseId.Fail) {
49
- await AdbSyncFailResponse.deserialize(stream);
50
- }
51
-
52
- if (types[id]) {
53
- return types[id].deserialize(stream);
54
- }
55
-
56
- throw new Error('Unexpected response id');
57
- }
1
+ import Struct, { type StructAsyncDeserializeStream, type StructLike, type StructValueType } from '@yume-chan/struct';
2
+ import type { AdbBufferedStream } from '../../stream/index.js';
3
+ import { decodeUtf8 } from "../../utils/index.js";
4
+
5
+ export enum AdbSyncResponseId {
6
+ Entry = 'DENT',
7
+ Lstat = 'STAT',
8
+ Stat = 'STA2',
9
+ Lstat2 = 'LST2',
10
+ Done = 'DONE',
11
+ Data = 'DATA',
12
+ Ok = 'OKAY',
13
+ Fail = 'FAIL',
14
+ }
15
+
16
+ // DONE responses' size are always same as the request's normal response.
17
+ // For example DONE responses for LIST requests are 16 bytes (same as DENT responses),
18
+ // but DONE responses for STAT requests are 12 bytes (same as STAT responses)
19
+ // So we need to know responses' size in advance.
20
+ export class AdbSyncDoneResponse implements StructLike<AdbSyncDoneResponse> {
21
+ private length: number;
22
+
23
+ public readonly id = AdbSyncResponseId.Done;
24
+
25
+ public constructor(length: number) {
26
+ this.length = length;
27
+ }
28
+
29
+ public async deserialize(stream: StructAsyncDeserializeStream): Promise<this> {
30
+ await stream.read(this.length);
31
+ return this;
32
+ }
33
+ }
34
+
35
+ export const AdbSyncFailResponse =
36
+ new Struct({ littleEndian: true })
37
+ .uint32('messageLength')
38
+ .string('message', { lengthField: 'messageLength' })
39
+ .postDeserialize(object => {
40
+ throw new Error(object.message);
41
+ });
42
+
43
+ export async function adbSyncReadResponse<T extends Record<string, StructLike<any>>>(
44
+ stream: AdbBufferedStream,
45
+ types: T,
46
+ ): Promise<StructValueType<T[keyof T]>> {
47
+ const id = decodeUtf8(await stream.read(4));
48
+
49
+ if (id === AdbSyncResponseId.Fail) {
50
+ await AdbSyncFailResponse.deserialize(stream);
51
+ }
52
+
53
+ if (types[id]) {
54
+ return types[id]!.deserialize(stream);
55
+ }
56
+
57
+ throw new Error('Unexpected response id');
58
+ }