@yume-chan/scrcpy 3.0.0-beta.0 → 3.0.0-beta.1

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 (438) hide show
  1. package/esm/1_15/impl/codec-options.d.ts +12 -11
  2. package/esm/1_15/impl/codec-options.d.ts.map +1 -1
  3. package/esm/1_15/impl/codec-options.js +50 -11
  4. package/esm/1_15/impl/codec-options.js.map +1 -1
  5. package/esm/1_15/impl/compute-option-values.d.ts +7 -0
  6. package/esm/1_15/impl/compute-option-values.d.ts.map +1 -0
  7. package/esm/1_15/impl/compute-option-values.js +12 -0
  8. package/esm/1_15/impl/compute-option-values.js.map +1 -0
  9. package/esm/1_15/impl/index.d.ts +2 -0
  10. package/esm/1_15/impl/index.d.ts.map +1 -1
  11. package/esm/1_15/impl/index.js +2 -0
  12. package/esm/1_15/impl/index.js.map +1 -1
  13. package/esm/1_15/impl/init.d.ts +11 -11
  14. package/esm/1_15/impl/init.d.ts.map +1 -1
  15. package/esm/1_15/impl/media-stream-transformer.d.ts +2 -2
  16. package/esm/1_15/impl/media-stream-transformer.js +1 -1
  17. package/esm/1_15/impl/media-stream-transformer.js.map +1 -1
  18. package/esm/1_15/impl/parse-video-stream-metadata.js +4 -4
  19. package/esm/1_15/impl/parse-video-stream-metadata.js.map +1 -1
  20. package/esm/1_15/impl/set-display-power.d.ts +13 -0
  21. package/esm/1_15/impl/set-display-power.d.ts.map +1 -0
  22. package/esm/1_15/impl/set-display-power.js +16 -0
  23. package/esm/1_15/impl/set-display-power.js.map +1 -0
  24. package/esm/1_15/options.d.ts +12 -9
  25. package/esm/1_15/options.d.ts.map +1 -1
  26. package/esm/1_15/options.js +20 -2
  27. package/esm/1_15/options.js.map +1 -1
  28. package/esm/1_17/options.d.ts +11 -9
  29. package/esm/1_17/options.d.ts.map +1 -1
  30. package/esm/1_17/options.js +20 -2
  31. package/esm/1_17/options.js.map +1 -1
  32. package/esm/1_18/impl/init.d.ts +3 -3
  33. package/esm/1_18/impl/init.d.ts.map +1 -1
  34. package/esm/1_18/options.d.ts +11 -9
  35. package/esm/1_18/options.d.ts.map +1 -1
  36. package/esm/1_18/options.js +20 -2
  37. package/esm/1_18/options.js.map +1 -1
  38. package/esm/1_21/impl/compute-option-values.d.ts +23 -0
  39. package/esm/1_21/impl/compute-option-values.d.ts.map +1 -0
  40. package/esm/1_21/impl/compute-option-values.js +12 -0
  41. package/esm/1_21/impl/compute-option-values.js.map +1 -0
  42. package/esm/1_21/impl/index.d.ts +3 -1
  43. package/esm/1_21/impl/index.d.ts.map +1 -1
  44. package/esm/1_21/impl/index.js +2 -1
  45. package/esm/1_21/impl/index.js.map +1 -1
  46. package/esm/1_21/impl/init.d.ts +1 -1
  47. package/esm/1_21/impl/init.d.ts.map +1 -1
  48. package/esm/1_21/impl/serialize.d.ts +1 -1
  49. package/esm/1_21/impl/serialize.d.ts.map +1 -1
  50. package/esm/1_21/impl/serialize.js.map +1 -1
  51. package/esm/1_21/options.d.ts +11 -9
  52. package/esm/1_21/options.d.ts.map +1 -1
  53. package/esm/1_21/options.js +20 -2
  54. package/esm/1_21/options.js.map +1 -1
  55. package/esm/1_22/impl/init.d.ts +3 -3
  56. package/esm/1_22/impl/init.d.ts.map +1 -1
  57. package/esm/1_22/impl/parse-video-stream-metadata.d.ts +2 -2
  58. package/esm/1_22/impl/parse-video-stream-metadata.d.ts.map +1 -1
  59. package/esm/1_22/impl/parse-video-stream-metadata.js +3 -3
  60. package/esm/1_22/impl/parse-video-stream-metadata.js.map +1 -1
  61. package/esm/1_22/options.d.ts +11 -9
  62. package/esm/1_22/options.d.ts.map +1 -1
  63. package/esm/1_22/options.js +21 -3
  64. package/esm/1_22/options.js.map +1 -1
  65. package/esm/1_23/impl/init.d.ts +1 -1
  66. package/esm/1_23/impl/init.d.ts.map +1 -1
  67. package/esm/1_23/impl/media-stream-transformer.d.ts +2 -2
  68. package/esm/1_23/impl/media-stream-transformer.js +1 -1
  69. package/esm/1_23/impl/media-stream-transformer.js.map +1 -1
  70. package/esm/1_23/options.d.ts +11 -9
  71. package/esm/1_23/options.d.ts.map +1 -1
  72. package/esm/1_23/options.js +21 -3
  73. package/esm/1_23/options.js.map +1 -1
  74. package/esm/1_24/impl/init.d.ts +1 -1
  75. package/esm/1_24/impl/init.d.ts.map +1 -1
  76. package/esm/1_24/options.d.ts +11 -9
  77. package/esm/1_24/options.d.ts.map +1 -1
  78. package/esm/1_24/options.js +21 -3
  79. package/esm/1_24/options.js.map +1 -1
  80. package/esm/1_25/options.d.ts +11 -9
  81. package/esm/1_25/options.d.ts.map +1 -1
  82. package/esm/1_25/options.js +21 -3
  83. package/esm/1_25/options.js.map +1 -1
  84. package/esm/2_0/impl/defaults.d.ts +8 -11
  85. package/esm/2_0/impl/defaults.d.ts.map +1 -1
  86. package/esm/2_0/impl/defaults.js +4 -10
  87. package/esm/2_0/impl/defaults.js.map +1 -1
  88. package/esm/2_0/impl/index.d.ts +1 -1
  89. package/esm/2_0/impl/index.d.ts.map +1 -1
  90. package/esm/2_0/impl/index.js +1 -1
  91. package/esm/2_0/impl/index.js.map +1 -1
  92. package/esm/2_0/impl/init.d.ts +8 -8
  93. package/esm/2_0/impl/init.d.ts.map +1 -1
  94. package/esm/2_0/impl/parse-audio-stream-metadata.d.ts +4 -1
  95. package/esm/2_0/impl/parse-audio-stream-metadata.d.ts.map +1 -1
  96. package/esm/2_0/impl/parse-audio-stream-metadata.js +28 -39
  97. package/esm/2_0/impl/parse-audio-stream-metadata.js.map +1 -1
  98. package/esm/2_0/impl/parse-video-stream-metadata.d.ts +5 -2
  99. package/esm/2_0/impl/parse-video-stream-metadata.d.ts.map +1 -1
  100. package/esm/2_0/impl/parse-video-stream-metadata.js +14 -12
  101. package/esm/2_0/impl/parse-video-stream-metadata.js.map +1 -1
  102. package/esm/2_0/options.d.ts +19 -20
  103. package/esm/2_0/options.d.ts.map +1 -1
  104. package/esm/2_0/options.js +22 -4
  105. package/esm/2_0/options.js.map +1 -1
  106. package/esm/2_1/impl/defaults.d.ts +8 -11
  107. package/esm/2_1/impl/defaults.d.ts.map +1 -1
  108. package/esm/2_1/impl/defaults.js.map +1 -1
  109. package/esm/2_1/impl/init.d.ts +3 -3
  110. package/esm/2_1/impl/init.d.ts.map +1 -1
  111. package/esm/2_1/options.d.ts +21 -22
  112. package/esm/2_1/options.d.ts.map +1 -1
  113. package/esm/2_1/options.js +22 -4
  114. package/esm/2_1/options.js.map +1 -1
  115. package/esm/2_2/impl/compute-option-values.d.ts +22 -0
  116. package/esm/2_2/impl/compute-option-values.d.ts.map +1 -0
  117. package/esm/2_2/impl/compute-option-values.js +11 -0
  118. package/esm/2_2/impl/compute-option-values.js.map +1 -0
  119. package/esm/2_2/impl/defaults.d.ts +8 -11
  120. package/esm/2_2/impl/defaults.d.ts.map +1 -1
  121. package/esm/2_2/impl/defaults.js.map +1 -1
  122. package/esm/2_2/impl/index.d.ts +2 -0
  123. package/esm/2_2/impl/index.d.ts.map +1 -1
  124. package/esm/2_2/impl/index.js +1 -0
  125. package/esm/2_2/impl/index.js.map +1 -1
  126. package/esm/2_2/impl/init.d.ts +5 -5
  127. package/esm/2_2/impl/init.d.ts.map +1 -1
  128. package/esm/2_2/options.d.ts +21 -22
  129. package/esm/2_2/options.d.ts.map +1 -1
  130. package/esm/2_2/options.js +22 -7
  131. package/esm/2_2/options.js.map +1 -1
  132. package/esm/2_3/impl/index.d.ts +1 -0
  133. package/esm/2_3/impl/index.d.ts.map +1 -1
  134. package/esm/2_3/impl/index.js +1 -0
  135. package/esm/2_3/impl/index.js.map +1 -1
  136. package/esm/2_3/impl/init.d.ts +2 -2
  137. package/esm/2_3/impl/init.d.ts.map +1 -1
  138. package/esm/2_3/impl/parse-audio-stream-metadata.d.ts +5 -0
  139. package/esm/2_3/impl/parse-audio-stream-metadata.d.ts.map +1 -0
  140. package/esm/2_3/impl/parse-audio-stream-metadata.js +31 -0
  141. package/esm/2_3/impl/parse-audio-stream-metadata.js.map +1 -0
  142. package/esm/2_3/options.d.ts +21 -22
  143. package/esm/2_3/options.d.ts.map +1 -1
  144. package/esm/2_3/options.js +22 -7
  145. package/esm/2_3/options.js.map +1 -1
  146. package/esm/2_4/options.d.ts +22 -23
  147. package/esm/2_4/options.d.ts.map +1 -1
  148. package/esm/2_4/options.js +25 -7
  149. package/esm/2_4/options.js.map +1 -1
  150. package/esm/2_6/impl/compute-option-values.d.ts +29 -0
  151. package/esm/2_6/impl/compute-option-values.d.ts.map +1 -0
  152. package/esm/2_6/impl/compute-option-values.js +12 -0
  153. package/esm/2_6/impl/compute-option-values.js.map +1 -0
  154. package/esm/2_6/impl/defaults.d.ts +8 -11
  155. package/esm/2_6/impl/defaults.d.ts.map +1 -1
  156. package/esm/2_6/impl/defaults.js.map +1 -1
  157. package/esm/2_6/impl/index.d.ts +2 -0
  158. package/esm/2_6/impl/index.d.ts.map +1 -1
  159. package/esm/2_6/impl/index.js +1 -0
  160. package/esm/2_6/impl/index.js.map +1 -1
  161. package/esm/2_6/impl/init.d.ts +3 -3
  162. package/esm/2_6/impl/init.d.ts.map +1 -1
  163. package/esm/2_6/options.d.ts +22 -23
  164. package/esm/2_6/options.d.ts.map +1 -1
  165. package/esm/2_6/options.js +25 -10
  166. package/esm/2_6/options.js.map +1 -1
  167. package/esm/2_7/impl/index.d.ts.map +1 -1
  168. package/esm/2_7/impl/index.js.map +1 -1
  169. package/esm/2_7/options.d.ts +22 -23
  170. package/esm/2_7/options.d.ts.map +1 -1
  171. package/esm/2_7/options.js +25 -10
  172. package/esm/2_7/options.js.map +1 -1
  173. package/esm/3_0/impl/defaults.d.ts +29 -33
  174. package/esm/3_0/impl/defaults.d.ts.map +1 -1
  175. package/esm/3_0/impl/defaults.js +4 -8
  176. package/esm/3_0/impl/defaults.js.map +1 -1
  177. package/esm/3_0/impl/index.d.ts +1 -0
  178. package/esm/3_0/impl/index.d.ts.map +1 -1
  179. package/esm/3_0/impl/index.js +1 -0
  180. package/esm/3_0/impl/index.js.map +1 -1
  181. package/esm/3_0/impl/init.d.ts +4 -4
  182. package/esm/3_0/impl/init.d.ts.map +1 -1
  183. package/esm/3_0/impl/set-display-power.d.ts +12 -0
  184. package/esm/3_0/impl/set-display-power.d.ts.map +1 -0
  185. package/esm/3_0/impl/set-display-power.js +10 -0
  186. package/esm/3_0/impl/set-display-power.js.map +1 -0
  187. package/esm/3_0/options.d.ts +43 -45
  188. package/esm/3_0/options.d.ts.map +1 -1
  189. package/esm/3_0/options.js +25 -10
  190. package/esm/3_0/options.js.map +1 -1
  191. package/esm/3_1/impl/defaults.d.ts +29 -33
  192. package/esm/3_1/impl/defaults.d.ts.map +1 -1
  193. package/esm/3_1/impl/defaults.js.map +1 -1
  194. package/esm/3_1/impl/index.d.ts.map +1 -1
  195. package/esm/3_1/impl/index.js.map +1 -1
  196. package/esm/3_1/impl/init.d.ts +2 -2
  197. package/esm/3_1/impl/init.d.ts.map +1 -1
  198. package/esm/3_1/options.d.ts +43 -45
  199. package/esm/3_1/options.d.ts.map +1 -1
  200. package/esm/3_1/options.js +25 -10
  201. package/esm/3_1/options.js.map +1 -1
  202. package/esm/3_2/impl/defaults.d.ts +29 -33
  203. package/esm/3_2/impl/defaults.d.ts.map +1 -1
  204. package/esm/3_2/impl/defaults.js.map +1 -1
  205. package/esm/3_2/impl/index.d.ts.map +1 -1
  206. package/esm/3_2/impl/index.js.map +1 -1
  207. package/esm/3_2/impl/init.d.ts +2 -2
  208. package/esm/3_2/impl/init.d.ts.map +1 -1
  209. package/esm/3_2/options.d.ts +43 -45
  210. package/esm/3_2/options.d.ts.map +1 -1
  211. package/esm/3_2/options.js +25 -10
  212. package/esm/3_2/options.js.map +1 -1
  213. package/esm/3_3_1/options.d.ts +43 -45
  214. package/esm/3_3_1/options.d.ts.map +1 -1
  215. package/esm/3_3_1/options.js +25 -10
  216. package/esm/3_3_1/options.js.map +1 -1
  217. package/esm/4_0/impl/compute-option-values.d.ts +15 -0
  218. package/esm/4_0/impl/compute-option-values.d.ts.map +1 -0
  219. package/esm/4_0/impl/compute-option-values.js +9 -0
  220. package/esm/4_0/impl/compute-option-values.js.map +1 -0
  221. package/esm/4_0/impl/control-message-types.d.ts +25 -0
  222. package/esm/4_0/impl/control-message-types.d.ts.map +1 -0
  223. package/esm/4_0/impl/control-message-types.js +26 -0
  224. package/esm/4_0/impl/control-message-types.js.map +1 -0
  225. package/esm/4_0/impl/defaults.d.ts +58 -0
  226. package/esm/4_0/impl/defaults.d.ts.map +1 -0
  227. package/esm/4_0/impl/defaults.js +12 -0
  228. package/esm/4_0/impl/defaults.js.map +1 -0
  229. package/esm/4_0/impl/index.d.ts +9 -0
  230. package/esm/4_0/impl/index.d.ts.map +1 -0
  231. package/esm/4_0/impl/index.js +7 -0
  232. package/esm/4_0/impl/index.js.map +1 -0
  233. package/esm/4_0/impl/init.d.ts +10 -0
  234. package/esm/4_0/impl/init.d.ts.map +1 -0
  235. package/esm/4_0/impl/init.js +2 -0
  236. package/esm/4_0/impl/init.js.map +1 -0
  237. package/esm/4_0/impl/media-stream-transformer.d.ts +5 -0
  238. package/esm/4_0/impl/media-stream-transformer.d.ts.map +1 -0
  239. package/esm/4_0/impl/media-stream-transformer.js +39 -0
  240. package/esm/4_0/impl/media-stream-transformer.js.map +1 -0
  241. package/esm/4_0/impl/parse-video-stream-metadata.d.ts +6 -0
  242. package/esm/4_0/impl/parse-video-stream-metadata.d.ts.map +1 -0
  243. package/esm/4_0/impl/parse-video-stream-metadata.js +21 -0
  244. package/esm/4_0/impl/parse-video-stream-metadata.js.map +1 -0
  245. package/esm/4_0/impl/prev.d.ts +2 -0
  246. package/esm/4_0/impl/prev.d.ts.map +1 -0
  247. package/esm/4_0/impl/prev.js +2 -0
  248. package/esm/4_0/impl/prev.js.map +1 -0
  249. package/esm/4_0/index.d.ts +100 -0
  250. package/esm/4_0/index.d.ts.map +1 -0
  251. package/esm/4_0/index.js +93 -0
  252. package/esm/4_0/index.js.map +1 -0
  253. package/esm/4_1/impl/control-message-types.d.ts +26 -0
  254. package/esm/4_1/impl/control-message-types.d.ts.map +1 -0
  255. package/esm/4_1/impl/control-message-types.js +27 -0
  256. package/esm/4_1/impl/control-message-types.js.map +1 -0
  257. package/esm/4_1/impl/defaults.d.ts +59 -0
  258. package/esm/4_1/impl/defaults.d.ts.map +1 -0
  259. package/esm/4_1/impl/defaults.js +6 -0
  260. package/esm/4_1/impl/defaults.js.map +1 -0
  261. package/esm/4_1/impl/index.d.ts +6 -0
  262. package/esm/4_1/impl/index.d.ts.map +1 -0
  263. package/esm/4_1/impl/index.js +5 -0
  264. package/esm/4_1/impl/index.js.map +1 -0
  265. package/esm/4_1/impl/init.d.ts +6 -0
  266. package/esm/4_1/impl/init.d.ts.map +1 -0
  267. package/esm/4_1/impl/init.js +2 -0
  268. package/esm/4_1/impl/init.js.map +1 -0
  269. package/esm/4_1/impl/parse-video-stream-metadata.d.ts +4 -0
  270. package/esm/4_1/impl/parse-video-stream-metadata.d.ts.map +1 -0
  271. package/esm/4_1/impl/parse-video-stream-metadata.js +19 -0
  272. package/esm/4_1/impl/parse-video-stream-metadata.js.map +1 -0
  273. package/esm/4_1/impl/prev.d.ts +2 -0
  274. package/esm/4_1/impl/prev.d.ts.map +1 -0
  275. package/esm/4_1/impl/prev.js +2 -0
  276. package/esm/4_1/impl/prev.js.map +1 -0
  277. package/esm/4_1/index.d.ts +101 -0
  278. package/esm/4_1/index.d.ts.map +1 -0
  279. package/esm/4_1/index.js +93 -0
  280. package/esm/4_1/index.js.map +1 -0
  281. package/esm/base/control-message-type-value.d.ts +5 -0
  282. package/esm/base/control-message-type-value.d.ts.map +1 -1
  283. package/esm/base/control-message-type-value.js +5 -0
  284. package/esm/base/control-message-type-value.js.map +1 -1
  285. package/esm/base/media.d.ts +8 -1
  286. package/esm/base/media.d.ts.map +1 -1
  287. package/esm/base/options.d.ts +6 -4
  288. package/esm/base/options.d.ts.map +1 -1
  289. package/esm/base/video.d.ts +1 -7
  290. package/esm/base/video.d.ts.map +1 -1
  291. package/esm/base/video.js +1 -13
  292. package/esm/base/video.js.map +1 -1
  293. package/esm/control/boolean.d.ts +10 -0
  294. package/esm/control/boolean.d.ts.map +1 -0
  295. package/esm/control/boolean.js +3 -0
  296. package/esm/control/boolean.js.map +1 -0
  297. package/esm/control/index.d.ts +2 -1
  298. package/esm/control/index.d.ts.map +1 -1
  299. package/esm/control/index.js +2 -1
  300. package/esm/control/index.js.map +1 -1
  301. package/esm/control/resize-display.d.ts +12 -0
  302. package/esm/control/resize-display.d.ts.map +1 -0
  303. package/esm/control/resize-display.js +8 -0
  304. package/esm/control/resize-display.js.map +1 -0
  305. package/esm/control/serializer.d.ts +8 -2
  306. package/esm/control/serializer.d.ts.map +1 -1
  307. package/esm/control/serializer.js +30 -4
  308. package/esm/control/serializer.js.map +1 -1
  309. package/esm/control/writer.d.ts +8 -2
  310. package/esm/control/writer.d.ts.map +1 -1
  311. package/esm/control/writer.js +17 -2
  312. package/esm/control/writer.js.map +1 -1
  313. package/esm/index.d.ts +2 -0
  314. package/esm/index.d.ts.map +1 -1
  315. package/esm/index.js +2 -0
  316. package/esm/index.js.map +1 -1
  317. package/esm/latest.d.ts +2 -2
  318. package/esm/latest.d.ts.map +1 -1
  319. package/esm/latest.js +2 -2
  320. package/esm/latest.js.map +1 -1
  321. package/esm/utils/omit.d.ts +1 -1
  322. package/esm/utils/omit.d.ts.map +1 -1
  323. package/esm/video/codec-id.d.ts +6 -0
  324. package/esm/video/codec-id.d.ts.map +1 -0
  325. package/esm/video/codec-id.js +6 -0
  326. package/esm/video/codec-id.js.map +1 -0
  327. package/esm/video/index.d.ts +4 -0
  328. package/esm/video/index.d.ts.map +1 -1
  329. package/esm/video/index.js +12 -0
  330. package/esm/video/index.js.map +1 -1
  331. package/esm/video/size.d.ts +8 -9
  332. package/esm/video/size.d.ts.map +1 -1
  333. package/esm/video/size.js +2 -2
  334. package/esm/video/size.js.map +1 -1
  335. package/package.json +7 -7
  336. package/src/1_15/impl/codec-options.ts +68 -17
  337. package/src/1_15/impl/compute-option-values.ts +26 -0
  338. package/src/1_15/impl/index.ts +2 -0
  339. package/src/1_15/impl/init.ts +11 -11
  340. package/src/1_15/impl/media-stream-transformer.ts +3 -3
  341. package/src/1_15/impl/parse-video-stream-metadata.ts +4 -4
  342. package/src/1_15/impl/set-display-power.ts +29 -0
  343. package/src/1_15/options.ts +45 -9
  344. package/src/1_17/options.ts +46 -10
  345. package/src/1_18/impl/init.ts +3 -3
  346. package/src/1_18/options.ts +46 -10
  347. package/src/1_21/impl/compute-option-values.ts +43 -0
  348. package/src/1_21/impl/index.ts +10 -1
  349. package/src/1_21/impl/init.ts +1 -1
  350. package/src/1_21/impl/serialize.ts +3 -3
  351. package/src/1_21/options.ts +46 -10
  352. package/src/1_22/impl/init.ts +3 -3
  353. package/src/1_22/impl/parse-video-stream-metadata.ts +4 -4
  354. package/src/1_22/options.ts +47 -11
  355. package/src/1_23/impl/init.ts +1 -1
  356. package/src/1_23/impl/media-stream-transformer.ts +3 -3
  357. package/src/1_23/options.ts +47 -11
  358. package/src/1_24/impl/init.ts +1 -1
  359. package/src/1_24/options.ts +47 -11
  360. package/src/1_25/options.ts +47 -11
  361. package/src/2_0/impl/defaults.ts +19 -23
  362. package/src/2_0/impl/index.ts +5 -1
  363. package/src/2_0/impl/init.ts +8 -8
  364. package/src/2_0/impl/parse-audio-stream-metadata.ts +34 -44
  365. package/src/2_0/impl/parse-video-stream-metadata.ts +24 -21
  366. package/src/2_0/options.ts +63 -12
  367. package/src/2_1/impl/defaults.ts +1 -1
  368. package/src/2_1/impl/init.ts +3 -3
  369. package/src/2_1/options.ts +66 -15
  370. package/src/2_2/generate-type-tests.js +106 -0
  371. package/src/2_2/impl/compute-option-values.ts +44 -0
  372. package/src/2_2/impl/defaults.ts +1 -1
  373. package/src/2_2/impl/index.ts +2 -0
  374. package/src/2_2/impl/init.ts +5 -5
  375. package/src/2_2/options.ts +66 -19
  376. package/src/2_3/impl/index.ts +4 -0
  377. package/src/2_3/impl/init.ts +2 -5
  378. package/src/2_3/impl/parse-audio-stream-metadata.ts +36 -0
  379. package/src/2_3/options.ts +66 -19
  380. package/src/2_4/options.ts +75 -23
  381. package/src/2_6/generate-type-tests.js +119 -0
  382. package/src/2_6/impl/compute-option-values.ts +48 -0
  383. package/src/2_6/impl/defaults.ts +1 -1
  384. package/src/2_6/impl/index.ts +9 -0
  385. package/src/2_6/impl/init.ts +3 -6
  386. package/src/2_6/options.ts +75 -27
  387. package/src/2_7/impl/index.ts +1 -0
  388. package/src/2_7/options.ts +75 -27
  389. package/src/3_0/impl/defaults.ts +12 -14
  390. package/src/3_0/impl/index.ts +5 -0
  391. package/src/3_0/impl/init.ts +4 -7
  392. package/src/3_0/impl/set-display-power.ts +23 -0
  393. package/src/3_0/options.ts +75 -27
  394. package/src/3_1/impl/defaults.ts +1 -1
  395. package/src/3_1/impl/index.ts +1 -0
  396. package/src/3_1/impl/init.ts +2 -2
  397. package/src/3_1/options.ts +75 -27
  398. package/src/3_2/impl/defaults.ts +1 -1
  399. package/src/3_2/impl/index.ts +1 -0
  400. package/src/3_2/impl/init.ts +2 -5
  401. package/src/3_2/options.ts +75 -27
  402. package/src/3_3_1/options.ts +75 -27
  403. package/src/4_0/impl/compute-option-values.ts +31 -0
  404. package/src/4_0/impl/control-message-types.ts +27 -0
  405. package/src/4_0/impl/defaults.ts +20 -0
  406. package/src/4_0/impl/index.ts +9 -0
  407. package/src/4_0/impl/init.ts +14 -0
  408. package/src/4_0/impl/media-stream-transformer.ts +58 -0
  409. package/src/4_0/impl/parse-video-stream-metadata.ts +34 -0
  410. package/src/4_0/impl/prev.ts +1 -0
  411. package/src/4_0/index.ts +226 -0
  412. package/src/4_1/impl/control-message-types.ts +28 -0
  413. package/src/4_1/impl/defaults.ts +8 -0
  414. package/src/4_1/impl/index.ts +6 -0
  415. package/src/4_1/impl/init.ts +7 -0
  416. package/src/4_1/impl/parse-video-stream-metadata.ts +23 -0
  417. package/src/4_1/impl/prev.ts +1 -0
  418. package/src/4_1/index.ts +226 -0
  419. package/src/base/control-message-type-value.ts +5 -0
  420. package/src/base/media.ts +12 -3
  421. package/src/base/options.ts +15 -5
  422. package/src/base/video.ts +2 -19
  423. package/src/control/boolean.ts +9 -0
  424. package/src/control/index.ts +2 -1
  425. package/src/control/resize-display.ts +16 -0
  426. package/src/control/serializer.ts +38 -8
  427. package/src/control/writer.ts +24 -6
  428. package/src/index.ts +2 -0
  429. package/src/latest.ts +4 -3
  430. package/src/utils/omit.ts +1 -1
  431. package/src/video/codec-id.ts +6 -0
  432. package/src/video/index.ts +19 -0
  433. package/src/video/size.ts +10 -4
  434. package/esm/control/set-screen-power-mode.d.ts +0 -11
  435. package/esm/control/set-screen-power-mode.d.ts.map +0 -1
  436. package/esm/control/set-screen-power-mode.js +0 -7
  437. package/esm/control/set-screen-power-mode.js.map +0 -1
  438. package/src/control/set-screen-power-mode.ts +0 -17
@@ -34,21 +34,21 @@ export class Crop implements ScrcpyOptionValue {
34
34
  }
35
35
 
36
36
  export interface Init {
37
- logLevel?: LogLevel;
37
+ logLevel?: LogLevel | undefined;
38
38
 
39
39
  /**
40
40
  * The maximum value of both width and height.
41
41
  */
42
- maxSize?: number;
42
+ maxSize?: number | undefined;
43
43
 
44
- bitRate?: number;
44
+ bitRate?: number | undefined;
45
45
 
46
46
  /**
47
47
  * 0 for unlimited.
48
48
  *
49
49
  * @default 0
50
50
  */
51
- maxFps?: number;
51
+ maxFps?: number | undefined;
52
52
 
53
53
  /**
54
54
  * The orientation of the video stream.
@@ -56,7 +56,7 @@ export interface Init {
56
56
  * It will not keep the device screen in specific orientation,
57
57
  * only the captured video will in this orientation.
58
58
  */
59
- lockVideoOrientation?: VideoOrientation;
59
+ lockVideoOrientation?: VideoOrientation | undefined;
60
60
 
61
61
  /**
62
62
  * Use ADB forward tunnel instead of reverse tunnel.
@@ -66,7 +66,7 @@ export interface Init {
66
66
  *
67
67
  * When using `AdbScrcpyClient`, it can detect this situation and enable this option automatically.
68
68
  */
69
- tunnelForward?: boolean;
69
+ tunnelForward?: boolean | undefined;
70
70
 
71
71
  crop?: Crop | string | undefined;
72
72
 
@@ -81,18 +81,18 @@ export interface Init {
81
81
  *
82
82
  * @default true
83
83
  */
84
- sendFrameMeta?: boolean;
84
+ sendFrameMeta?: boolean | undefined;
85
85
 
86
86
  /**
87
87
  * @default true
88
88
  */
89
- control?: boolean;
89
+ control?: boolean | undefined;
90
90
 
91
- displayId?: number;
91
+ displayId?: number | undefined;
92
92
 
93
- showTouches?: boolean;
93
+ showTouches?: boolean | undefined;
94
94
 
95
- stayAwake?: boolean;
95
+ stayAwake?: boolean | undefined;
96
96
 
97
97
  codecOptions?: CodecOptions | string | undefined;
98
98
  }
@@ -4,7 +4,7 @@ import {
4
4
  } from "@yume-chan/stream-extra";
5
5
  import { buffer, struct, u32, u64 } from "@yume-chan/struct";
6
6
 
7
- import type { ScrcpyMediaStreamPacket } from "../../base/index.js";
7
+ import type { ScrcpyVideoStreamPacket } from "../../base/index.js";
8
8
 
9
9
  import type { Init } from "./init.js";
10
10
 
@@ -17,8 +17,8 @@ export const PtsConfig = 1n << 63n;
17
17
 
18
18
  export function createMediaStreamTransformer(
19
19
  options: Pick<Init, "sendFrameMeta">,
20
- ): TransformStream<Uint8Array, ScrcpyMediaStreamPacket> {
21
- // Optimized path for video frames only
20
+ ): TransformStream<Uint8Array, ScrcpyVideoStreamPacket> {
21
+ // Quick path for raw stream without frame meta
22
22
  if (!options.sendFrameMeta) {
23
23
  return new TransformStream({
24
24
  transform(chunk, controller) {
@@ -11,7 +11,7 @@ import type {
11
11
  ScrcpyVideoStream,
12
12
  ScrcpyVideoStreamMetadata,
13
13
  } from "../../base/index.js";
14
- import { ScrcpyVideoCodecId } from "../../base/index.js";
14
+ import { ScrcpyVideoCodecId } from "../../video/index.js";
15
15
 
16
16
  /**
17
17
  * Parse a fixed-length, null-terminated string.
@@ -44,10 +44,10 @@ export async function parseVideoStreamMetadata(
44
44
  ): Promise<ScrcpyVideoStream> {
45
45
  const buffered = new BufferedReadableStream(stream);
46
46
  const metadata: ScrcpyVideoStreamMetadata = {
47
+ deviceName: await readString(buffered, 64),
48
+ width: await readU16(buffered),
49
+ height: await readU16(buffered),
47
50
  codec: ScrcpyVideoCodecId.H264,
48
51
  };
49
- metadata.deviceName = await readString(buffered, 64);
50
- metadata.width = await readU16(buffered);
51
- metadata.height = await readU16(buffered);
52
52
  return { stream: buffered.release(), metadata };
53
53
  }
@@ -0,0 +1,29 @@
1
+ import type { StructInit } from "@yume-chan/struct";
2
+ import { struct, u8 } from "@yume-chan/struct";
3
+
4
+ import { AndroidScreenPowerMode } from "../../android/index.js";
5
+ import type { ScrcpySetDisplayPowerControlMessage } from "../../latest.js";
6
+
7
+ export const SetDisplayPowerControlMessage = struct(
8
+ {
9
+ // value of `type` can change between versions
10
+ type: u8,
11
+ mode: u8<AndroidScreenPowerMode>(),
12
+ },
13
+ { littleEndian: false },
14
+ );
15
+
16
+ export type SetDisplayPowerControlMessage = StructInit<
17
+ typeof SetDisplayPowerControlMessage
18
+ >;
19
+
20
+ export function serializeSetDisplayPowerControlMessage(
21
+ message: ScrcpySetDisplayPowerControlMessage,
22
+ ) {
23
+ return SetDisplayPowerControlMessage.serialize({
24
+ type: message.type,
25
+ mode: message.on
26
+ ? AndroidScreenPowerMode.Normal
27
+ : AndroidScreenPowerMode.Off,
28
+ });
29
+ }
@@ -3,21 +3,24 @@ import type { ReadableStream, TransformStream } from "@yume-chan/stream-extra";
3
3
 
4
4
  import type {
5
5
  ScrcpyDisplay,
6
- ScrcpyMediaStreamPacket,
7
6
  ScrcpyOptions,
8
7
  ScrcpyScrollController,
9
8
  ScrcpyVideoStream,
9
+ ScrcpyVideoStreamPacket,
10
10
  } from "../base/index.js";
11
11
  import { ScrcpyDeviceMessageParsers } from "../base/index.js";
12
+ import type { MapBoolean } from "../base/options.js";
12
13
  import type {
13
14
  ScrcpyBackOrScreenOnControlMessage,
14
15
  ScrcpyInjectTouchControlMessage,
15
16
  ScrcpySetClipboardControlMessage,
17
+ ScrcpySetDisplayPowerControlMessage,
16
18
  } from "../latest.js";
17
19
 
18
- import type { Init } from "./impl/index.js";
20
+ import type { ComputeOptionTypes, Init } from "./impl/index.js";
19
21
  import {
20
22
  ClipboardStream,
23
+ computeOptionValues,
21
24
  ControlMessageTypes,
22
25
  createMediaStreamTransformer,
23
26
  createScrollController,
@@ -29,21 +32,28 @@ import {
29
32
  serializeInjectTouchControlMessage,
30
33
  SerializeOrder,
31
34
  serializeSetClipboardControlMessage,
35
+ serializeSetDisplayPowerControlMessage,
32
36
  setListDisplays,
33
37
  } from "./impl/index.js";
34
38
 
35
- export class ScrcpyOptions1_15 implements ScrcpyOptions<Init> {
39
+ export class ScrcpyOptions1_15<
40
+ TInit extends Init = Init,
41
+ > implements ScrcpyOptions<ScrcpyOptions1_15.Value<TInit>> {
36
42
  static readonly Defaults = Defaults;
37
43
 
38
- readonly value: Required<Init>;
44
+ readonly value: ScrcpyOptions1_15.Value<TInit>;
39
45
 
40
46
  get controlMessageTypes(): typeof ControlMessageTypes {
41
47
  return ControlMessageTypes;
42
48
  }
43
49
 
44
50
  #clipboard: ClipboardStream | undefined;
45
- get clipboard(): ReadableStream<string> | undefined {
46
- return this.#clipboard;
51
+ get clipboard(): MapBoolean<
52
+ this["value"]["control"],
53
+ ReadableStream<string>,
54
+ undefined
55
+ > {
56
+ return this.#clipboard as never;
47
57
  }
48
58
 
49
59
  #deviceMessageParsers = new ScrcpyDeviceMessageParsers();
@@ -51,8 +61,8 @@ export class ScrcpyOptions1_15 implements ScrcpyOptions<Init> {
51
61
  return this.#deviceMessageParsers;
52
62
  }
53
63
 
54
- constructor(init: Init) {
55
- this.value = { ...Defaults, ...init };
64
+ constructor(init: TInit) {
65
+ this.value = computeOptionValues(init, Defaults);
56
66
 
57
67
  if (this.value.control) {
58
68
  this.#clipboard = this.#deviceMessageParsers.add(
@@ -81,7 +91,7 @@ export class ScrcpyOptions1_15 implements ScrcpyOptions<Init> {
81
91
 
82
92
  createMediaStreamTransformer(): TransformStream<
83
93
  Uint8Array,
84
- ScrcpyMediaStreamPacket
94
+ ScrcpyVideoStreamPacket
85
95
  > {
86
96
  return createMediaStreamTransformer(this.value);
87
97
  }
@@ -89,22 +99,43 @@ export class ScrcpyOptions1_15 implements ScrcpyOptions<Init> {
89
99
  serializeInjectTouchControlMessage(
90
100
  message: ScrcpyInjectTouchControlMessage,
91
101
  ): Uint8Array {
102
+ if (!this.value.control) {
103
+ throw new Error("control is disabled");
104
+ }
92
105
  return serializeInjectTouchControlMessage(message);
93
106
  }
94
107
 
95
108
  serializeBackOrScreenOnControlMessage(
96
109
  message: ScrcpyBackOrScreenOnControlMessage,
97
110
  ): Uint8Array | undefined {
111
+ if (!this.value.control) {
112
+ throw new Error("control is disabled");
113
+ }
98
114
  return serializeBackOrScreenOnControlMessage(message);
99
115
  }
100
116
 
101
117
  serializeSetClipboardControlMessage(
102
118
  message: ScrcpySetClipboardControlMessage,
103
119
  ): Uint8Array {
120
+ if (!this.value.control) {
121
+ throw new Error("control is disabled");
122
+ }
104
123
  return serializeSetClipboardControlMessage(message);
105
124
  }
106
125
 
126
+ serializeSetDisplayPowerControlMessage(
127
+ message: ScrcpySetDisplayPowerControlMessage,
128
+ ): Uint8Array {
129
+ if (!this.value.control) {
130
+ throw new Error("control is disabled");
131
+ }
132
+ return serializeSetDisplayPowerControlMessage(message);
133
+ }
134
+
107
135
  createScrollController(): ScrcpyScrollController {
136
+ if (!this.value.control) {
137
+ throw new Error("control is disabled");
138
+ }
108
139
  return createScrollController();
109
140
  }
110
141
  }
@@ -113,4 +144,9 @@ type Init_ = Init;
113
144
 
114
145
  export namespace ScrcpyOptions1_15 {
115
146
  export type Init = Init_;
147
+
148
+ export type Value<TInit extends Init> = ComputeOptionTypes<
149
+ TInit,
150
+ typeof Defaults
151
+ >;
116
152
  }
@@ -2,24 +2,27 @@ import type { MaybePromiseLike } from "@yume-chan/async";
2
2
  import type { ReadableStream, TransformStream } from "@yume-chan/stream-extra";
3
3
 
4
4
  import type {
5
+ MapBoolean,
5
6
  ScrcpyDisplay,
6
7
  ScrcpyEncoder,
7
- ScrcpyMediaStreamPacket,
8
8
  ScrcpyOptions,
9
9
  ScrcpyOptionsListEncoders,
10
10
  ScrcpyScrollController,
11
11
  ScrcpyVideoStream,
12
+ ScrcpyVideoStreamPacket,
12
13
  } from "../base/index.js";
13
14
  import { ScrcpyDeviceMessageParsers } from "../base/index.js";
14
15
  import type {
15
16
  ScrcpyBackOrScreenOnControlMessage,
16
17
  ScrcpyInjectTouchControlMessage,
17
18
  ScrcpySetClipboardControlMessage,
19
+ ScrcpySetDisplayPowerControlMessage,
18
20
  } from "../latest.js";
19
21
 
20
- import type { Init } from "./impl/index.js";
22
+ import type { ComputeOptionTypes, Init } from "./impl/index.js";
21
23
  import {
22
24
  ClipboardStream,
25
+ computeOptionValues,
23
26
  ControlMessageTypes,
24
27
  createMediaStreamTransformer,
25
28
  createScrollController,
@@ -33,24 +36,31 @@ import {
33
36
  serializeInjectTouchControlMessage,
34
37
  SerializeOrder,
35
38
  serializeSetClipboardControlMessage,
39
+ serializeSetDisplayPowerControlMessage,
36
40
  setListDisplays,
37
41
  setListEncoders,
38
42
  } from "./impl/index.js";
39
43
 
40
- export class ScrcpyOptions1_17
41
- implements ScrcpyOptions<Init>, ScrcpyOptionsListEncoders
44
+ export class ScrcpyOptions1_17<TInit extends Init = Init>
45
+ implements
46
+ ScrcpyOptions<ScrcpyOptions1_17.Value<TInit>>,
47
+ ScrcpyOptionsListEncoders
42
48
  {
43
49
  static readonly Defaults = Defaults;
44
50
 
45
- readonly value: Required<Init>;
51
+ readonly value: ScrcpyOptions1_17.Value<TInit>;
46
52
 
47
53
  get controlMessageTypes(): typeof ControlMessageTypes {
48
54
  return ControlMessageTypes;
49
55
  }
50
56
 
51
57
  #clipboard: ClipboardStream | undefined;
52
- get clipboard(): ReadableStream<string> | undefined {
53
- return this.#clipboard;
58
+ get clipboard(): MapBoolean<
59
+ this["value"]["control"],
60
+ ReadableStream<string>,
61
+ undefined
62
+ > {
63
+ return this.#clipboard as never;
54
64
  }
55
65
 
56
66
  #deviceMessageParsers = new ScrcpyDeviceMessageParsers();
@@ -58,8 +68,8 @@ export class ScrcpyOptions1_17
58
68
  return this.#deviceMessageParsers;
59
69
  }
60
70
 
61
- constructor(init: Init) {
62
- this.value = { ...Defaults, ...init };
71
+ constructor(init: TInit) {
72
+ this.value = computeOptionValues(init, Defaults);
63
73
 
64
74
  if (this.value.control) {
65
75
  this.#clipboard = this.#deviceMessageParsers.add(
@@ -96,7 +106,7 @@ export class ScrcpyOptions1_17
96
106
 
97
107
  createMediaStreamTransformer(): TransformStream<
98
108
  Uint8Array,
99
- ScrcpyMediaStreamPacket
109
+ ScrcpyVideoStreamPacket
100
110
  > {
101
111
  return createMediaStreamTransformer(this.value);
102
112
  }
@@ -104,22 +114,43 @@ export class ScrcpyOptions1_17
104
114
  serializeInjectTouchControlMessage(
105
115
  message: ScrcpyInjectTouchControlMessage,
106
116
  ): Uint8Array {
117
+ if (!this.value.control) {
118
+ throw new Error("control is disabled");
119
+ }
107
120
  return serializeInjectTouchControlMessage(message);
108
121
  }
109
122
 
110
123
  serializeBackOrScreenOnControlMessage(
111
124
  message: ScrcpyBackOrScreenOnControlMessage,
112
125
  ): Uint8Array | undefined {
126
+ if (!this.value.control) {
127
+ throw new Error("control is disabled");
128
+ }
113
129
  return serializeBackOrScreenOnControlMessage(message);
114
130
  }
115
131
 
116
132
  serializeSetClipboardControlMessage(
117
133
  message: ScrcpySetClipboardControlMessage,
118
134
  ): Uint8Array {
135
+ if (!this.value.control) {
136
+ throw new Error("control is disabled");
137
+ }
119
138
  return serializeSetClipboardControlMessage(message);
120
139
  }
121
140
 
141
+ serializeSetDisplayPowerControlMessage(
142
+ message: ScrcpySetDisplayPowerControlMessage,
143
+ ): Uint8Array {
144
+ if (!this.value.control) {
145
+ throw new Error("control is disabled");
146
+ }
147
+ return serializeSetDisplayPowerControlMessage(message);
148
+ }
149
+
122
150
  createScrollController(): ScrcpyScrollController {
151
+ if (!this.value.control) {
152
+ throw new Error("control is disabled");
153
+ }
123
154
  return createScrollController();
124
155
  }
125
156
  }
@@ -128,4 +159,9 @@ type Init_ = Init;
128
159
 
129
160
  export namespace ScrcpyOptions1_17 {
130
161
  export type Init = Init_;
162
+
163
+ export type Value<TInit extends Init> = ComputeOptionTypes<
164
+ TInit,
165
+ typeof Defaults
166
+ >;
131
167
  }
@@ -18,9 +18,9 @@ export interface Init extends Omit<
18
18
  PrevImpl.Init,
19
19
  "logLevel" | "lockVideoOrientation"
20
20
  > {
21
- logLevel?: LogLevel;
21
+ logLevel?: LogLevel | undefined;
22
22
 
23
- lockVideoOrientation?: VideoOrientation;
23
+ lockVideoOrientation?: VideoOrientation | undefined;
24
24
 
25
- powerOffOnClose?: boolean;
25
+ powerOffOnClose?: boolean | undefined;
26
26
  }
@@ -2,24 +2,27 @@ import type { MaybePromiseLike } from "@yume-chan/async";
2
2
  import type { ReadableStream, TransformStream } from "@yume-chan/stream-extra";
3
3
 
4
4
  import type {
5
+ MapBoolean,
5
6
  ScrcpyDisplay,
6
7
  ScrcpyEncoder,
7
- ScrcpyMediaStreamPacket,
8
8
  ScrcpyOptions,
9
9
  ScrcpyOptionsListEncoders,
10
10
  ScrcpyScrollController,
11
11
  ScrcpyVideoStream,
12
+ ScrcpyVideoStreamPacket,
12
13
  } from "../base/index.js";
13
14
  import { ScrcpyDeviceMessageParsers } from "../base/index.js";
14
15
  import type {
15
16
  ScrcpyBackOrScreenOnControlMessage,
16
17
  ScrcpyInjectTouchControlMessage,
17
18
  ScrcpySetClipboardControlMessage,
19
+ ScrcpySetDisplayPowerControlMessage,
18
20
  } from "../latest.js";
19
21
 
20
- import type { Init } from "./impl/index.js";
22
+ import type { ComputeOptionTypes, Init } from "./impl/index.js";
21
23
  import {
22
24
  ClipboardStream,
25
+ computeOptionValues,
23
26
  ControlMessageTypes,
24
27
  createMediaStreamTransformer,
25
28
  createScrollController,
@@ -33,24 +36,31 @@ import {
33
36
  serializeInjectTouchControlMessage,
34
37
  SerializeOrder,
35
38
  serializeSetClipboardControlMessage,
39
+ serializeSetDisplayPowerControlMessage,
36
40
  setListDisplays,
37
41
  setListEncoders,
38
42
  } from "./impl/index.js";
39
43
 
40
- export class ScrcpyOptions1_18
41
- implements ScrcpyOptions<Init>, ScrcpyOptionsListEncoders
44
+ export class ScrcpyOptions1_18<TInit extends Init = Init>
45
+ implements
46
+ ScrcpyOptions<ScrcpyOptions1_18.Value<TInit>>,
47
+ ScrcpyOptionsListEncoders
42
48
  {
43
49
  static readonly Defaults = Defaults;
44
50
 
45
- readonly value: Required<Init>;
51
+ readonly value: ScrcpyOptions1_18.Value<TInit>;
46
52
 
47
53
  get controlMessageTypes(): typeof ControlMessageTypes {
48
54
  return ControlMessageTypes;
49
55
  }
50
56
 
51
57
  #clipboard: ClipboardStream | undefined;
52
- get clipboard(): ReadableStream<string> | undefined {
53
- return this.#clipboard;
58
+ get clipboard(): MapBoolean<
59
+ this["value"]["control"],
60
+ ReadableStream<string>,
61
+ undefined
62
+ > {
63
+ return this.#clipboard as never;
54
64
  }
55
65
 
56
66
  #deviceMessageParsers = new ScrcpyDeviceMessageParsers();
@@ -58,8 +68,8 @@ export class ScrcpyOptions1_18
58
68
  return this.#deviceMessageParsers;
59
69
  }
60
70
 
61
- constructor(init: Init) {
62
- this.value = { ...Defaults, ...init };
71
+ constructor(init: TInit) {
72
+ this.value = computeOptionValues(init, Defaults);
63
73
 
64
74
  if (this.value.control) {
65
75
  this.#clipboard = this.#deviceMessageParsers.add(
@@ -96,7 +106,7 @@ export class ScrcpyOptions1_18
96
106
 
97
107
  createMediaStreamTransformer(): TransformStream<
98
108
  Uint8Array,
99
- ScrcpyMediaStreamPacket
109
+ ScrcpyVideoStreamPacket
100
110
  > {
101
111
  return createMediaStreamTransformer(this.value);
102
112
  }
@@ -104,22 +114,43 @@ export class ScrcpyOptions1_18
104
114
  serializeInjectTouchControlMessage(
105
115
  message: ScrcpyInjectTouchControlMessage,
106
116
  ): Uint8Array {
117
+ if (!this.value.control) {
118
+ throw new Error("control is disabled");
119
+ }
107
120
  return serializeInjectTouchControlMessage(message);
108
121
  }
109
122
 
110
123
  serializeBackOrScreenOnControlMessage(
111
124
  message: ScrcpyBackOrScreenOnControlMessage,
112
125
  ): Uint8Array | undefined {
126
+ if (!this.value.control) {
127
+ throw new Error("control is disabled");
128
+ }
113
129
  return serializeBackOrScreenOnControlMessage(message);
114
130
  }
115
131
 
116
132
  serializeSetClipboardControlMessage(
117
133
  message: ScrcpySetClipboardControlMessage,
118
134
  ): Uint8Array {
135
+ if (!this.value.control) {
136
+ throw new Error("control is disabled");
137
+ }
119
138
  return serializeSetClipboardControlMessage(message);
120
139
  }
121
140
 
141
+ serializeSetDisplayPowerControlMessage(
142
+ message: ScrcpySetDisplayPowerControlMessage,
143
+ ): Uint8Array {
144
+ if (!this.value.control) {
145
+ throw new Error("control is disabled");
146
+ }
147
+ return serializeSetDisplayPowerControlMessage(message);
148
+ }
149
+
122
150
  createScrollController(): ScrcpyScrollController {
151
+ if (!this.value.control) {
152
+ throw new Error("control is disabled");
153
+ }
123
154
  return createScrollController();
124
155
  }
125
156
  }
@@ -128,4 +159,9 @@ type Init_ = Init;
128
159
 
129
160
  export namespace ScrcpyOptions1_18 {
130
161
  export type Init = Init_;
162
+
163
+ export type Value<TInit extends Init> = ComputeOptionTypes<
164
+ TInit,
165
+ typeof Defaults
166
+ >;
131
167
  }
@@ -0,0 +1,43 @@
1
+ import { PrevImpl } from "./prev.js";
2
+
3
+ // Distributive Conditional Types
4
+ // (https://www.typescriptlang.org/docs/handbook/2/conditional-types.html#distributive-conditional-types)
5
+ type ComputeClipboardAutosync<TControl, TClipboardAutosync> =
6
+ TControl extends false ? false : TClipboardAutosync;
7
+
8
+ export type OverrideClipboardAutosync<T> = Omit<T, "clipboardAutosync"> & {
9
+ clipboardAutosync: ComputeClipboardAutosync<
10
+ T extends { control: infer TControl } ? TControl : never,
11
+ T extends { clipboardAutosync: infer TClipboardAutosync }
12
+ ? TClipboardAutosync
13
+ : never
14
+ >;
15
+ };
16
+
17
+ export type ComputeOptionTypes<
18
+ T extends object,
19
+ TDefaults extends object,
20
+ > = OverrideClipboardAutosync<PrevImpl.ComputeOptionTypes<T, TDefaults>>;
21
+
22
+ export function overrideClipboardAutosync<
23
+ T extends { control: boolean; clipboardAutosync: boolean },
24
+ >(value: T) {
25
+ if (!value.control) {
26
+ value.clipboardAutosync = false;
27
+ }
28
+ }
29
+
30
+ export function computeOptionValues<
31
+ T extends {
32
+ control?: boolean | undefined;
33
+ clipboardAutosync?: boolean | undefined;
34
+ },
35
+ TDefaults extends {
36
+ control: boolean;
37
+ clipboardAutosync: boolean;
38
+ },
39
+ >(options: T, defaults: TDefaults): ComputeOptionTypes<T, TDefaults> {
40
+ const value = PrevImpl.computeOptionValues(options, defaults);
41
+ overrideClipboardAutosync(value as never);
42
+ return value as never;
43
+ }
@@ -1,4 +1,13 @@
1
1
  export * from "../../1_18/impl/index.js";
2
+
3
+ export {
4
+ computeOptionValues,
5
+ overrideClipboardAutosync,
6
+ } from "./compute-option-values.js";
7
+ export type {
8
+ ComputeOptionTypes,
9
+ OverrideClipboardAutosync,
10
+ } from "./compute-option-values.js";
2
11
  export { Defaults } from "./defaults.js";
3
12
  export type { Init } from "./init.js";
4
13
  export { EncoderRegex } from "./parse-encoder.js";
@@ -6,6 +15,6 @@ export { serialize } from "./serialize.js";
6
15
  export {
7
16
  AckClipboardDeviceMessage,
8
17
  AckClipboardHandler,
9
- SetClipboardControlMessage,
10
18
  serializeSetClipboardControlMessage,
19
+ SetClipboardControlMessage,
11
20
  } from "./set-clipboard.js";
@@ -1,5 +1,5 @@
1
1
  import type { PrevImpl } from "./prev.js";
2
2
 
3
3
  export interface Init extends PrevImpl.Init {
4
- clipboardAutosync?: boolean;
4
+ clipboardAutosync?: boolean | undefined;
5
5
  }
@@ -5,9 +5,9 @@ function toSnakeCase(input: string): string {
5
5
  }
6
6
 
7
7
  // 1.21 changed the format of arguments
8
- export function serialize<T extends object>(
8
+ export function serialize<T extends object, TDefaults extends object>(
9
9
  options: T,
10
- defaults: Required<T>,
10
+ defaults: TDefaults,
11
11
  ): string[] {
12
12
  const result: string[] = [];
13
13
  for (const [key, value] of Object.entries(options)) {
@@ -18,7 +18,7 @@ export function serialize<T extends object>(
18
18
  }
19
19
 
20
20
  const defaultValue = toScrcpyOptionValue(
21
- defaults[key as keyof T],
21
+ defaults[key as keyof TDefaults],
22
22
  undefined,
23
23
  );
24
24
  if (serializedValue === defaultValue) {