@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
@@ -2,56 +2,70 @@ 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
  ScrcpyAudioStreamMetadata,
6
7
  ScrcpyDisplay,
7
8
  ScrcpyEncoder,
8
- ScrcpyMediaStreamPacket,
9
9
  ScrcpyOptions,
10
10
  ScrcpyOptionsListEncoders,
11
11
  ScrcpyScrollController,
12
12
  ScrcpyVideoStream,
13
+ ScrcpyVideoStreamPacket,
13
14
  } from "../base/index.js";
14
15
  import { ScrcpyDeviceMessageParsers } from "../base/index.js";
15
16
  import type {
16
17
  ScrcpyBackOrScreenOnControlMessage,
17
18
  ScrcpyInjectTouchControlMessage,
18
19
  ScrcpySetClipboardControlMessage,
20
+ ScrcpySetDisplayPowerControlMessage,
19
21
  } from "../latest.js";
20
22
 
21
- import type { Init } from "./impl/index.js";
23
+ import type { ComputeOptionTypes, Init } from "./impl/index.js";
22
24
  import {
23
25
  AckClipboardHandler,
24
26
  ClipboardStream,
27
+ computeOptionValues,
25
28
  ControlMessageTypes,
26
29
  createMediaStreamTransformer,
27
30
  createScrollController,
28
31
  Defaults,
32
+ parseAudioCodecOption,
33
+ parseAudioMetadataCodec,
29
34
  parseAudioStreamMetadata,
30
35
  parseDisplay,
31
36
  parseEncoder,
37
+ parseVideoCodecOption,
32
38
  parseVideoStreamMetadata,
39
+ parseVideoStreamMetadataAsync,
33
40
  serialize,
34
41
  serializeBackOrScreenOnControlMessage,
35
42
  serializeInjectTouchControlMessage,
36
43
  serializeSetClipboardControlMessage,
44
+ serializeSetDisplayPowerControlMessage,
37
45
  setListDisplays,
38
46
  setListEncoders,
39
47
  } from "./impl/index.js";
40
48
 
41
- export class ScrcpyOptions2_3<TVideo extends boolean>
42
- implements ScrcpyOptions<Init<TVideo>>, ScrcpyOptionsListEncoders
49
+ export class ScrcpyOptions2_3<TInit extends Init = Init>
50
+ implements
51
+ ScrcpyOptions<ScrcpyOptions2_3.Value<TInit>>,
52
+ ScrcpyOptionsListEncoders
43
53
  {
44
54
  static readonly Defaults = Defaults;
45
55
 
46
- readonly value: Required<Init<TVideo>>;
56
+ readonly value: ScrcpyOptions2_3.Value<TInit>;
47
57
 
48
58
  get controlMessageTypes(): typeof ControlMessageTypes {
49
59
  return ControlMessageTypes;
50
60
  }
51
61
 
52
62
  #clipboard: ClipboardStream | undefined;
53
- get clipboard(): ReadableStream<string> | undefined {
54
- return this.#clipboard;
63
+ get clipboard(): MapBoolean<
64
+ this["value"]["clipboardAutosync"],
65
+ ReadableStream<string>,
66
+ undefined
67
+ > {
68
+ return this.#clipboard as never;
55
69
  }
56
70
 
57
71
  #ackClipboardHandler: AckClipboardHandler | undefined;
@@ -61,12 +75,8 @@ export class ScrcpyOptions2_3<TVideo extends boolean>
61
75
  return this.#deviceMessageParsers;
62
76
  }
63
77
 
64
- constructor(init: Init<TVideo>) {
65
- this.value = { ...Defaults, ...init } as never;
66
-
67
- if (this.value.videoSource === "camera") {
68
- this.value.control = false;
69
- }
78
+ constructor(init: TInit) {
79
+ this.value = computeOptionValues(init, Defaults);
70
80
 
71
81
  if (this.value.control) {
72
82
  if (this.value.clipboardAutosync) {
@@ -82,7 +92,7 @@ export class ScrcpyOptions2_3<TVideo extends boolean>
82
92
  }
83
93
 
84
94
  serialize(): string[] {
85
- return serialize<Init<boolean>>(this.value, Defaults);
95
+ return serialize(this.value, Defaults);
86
96
  }
87
97
 
88
98
  setListDisplays(): void {
@@ -104,18 +114,29 @@ export class ScrcpyOptions2_3<TVideo extends boolean>
104
114
  parseVideoStreamMetadata(
105
115
  stream: ReadableStream<Uint8Array>,
106
116
  ): MaybePromiseLike<ScrcpyVideoStream> {
107
- return parseVideoStreamMetadata(this.value, stream);
117
+ return parseVideoStreamMetadata(
118
+ stream,
119
+ this.value.sendDeviceMeta,
120
+ this.value.sendCodecMeta,
121
+ parseVideoCodecOption(this.value.videoCodec),
122
+ parseVideoStreamMetadataAsync,
123
+ );
108
124
  }
109
125
 
110
126
  parseAudioStreamMetadata(
111
127
  stream: ReadableStream<Uint8Array>,
112
128
  ): MaybePromiseLike<ScrcpyAudioStreamMetadata> {
113
- return parseAudioStreamMetadata(stream, this.value);
129
+ return parseAudioStreamMetadata(
130
+ stream,
131
+ this.value.sendCodecMeta,
132
+ parseAudioMetadataCodec,
133
+ parseAudioCodecOption(this.value.audioCodec),
134
+ );
114
135
  }
115
136
 
116
137
  createMediaStreamTransformer(): TransformStream<
117
138
  Uint8Array,
118
- ScrcpyMediaStreamPacket
139
+ ScrcpyVideoStreamPacket
119
140
  > {
120
141
  return createMediaStreamTransformer(this.value);
121
142
  }
@@ -123,31 +144,57 @@ export class ScrcpyOptions2_3<TVideo extends boolean>
123
144
  serializeInjectTouchControlMessage(
124
145
  message: ScrcpyInjectTouchControlMessage,
125
146
  ): Uint8Array {
147
+ if (!this.value.control) {
148
+ throw new Error("control is disabled");
149
+ }
126
150
  return serializeInjectTouchControlMessage(message);
127
151
  }
128
152
 
129
153
  serializeBackOrScreenOnControlMessage(
130
154
  message: ScrcpyBackOrScreenOnControlMessage,
131
155
  ): Uint8Array | undefined {
156
+ if (!this.value.control) {
157
+ throw new Error("control is disabled");
158
+ }
132
159
  return serializeBackOrScreenOnControlMessage(message);
133
160
  }
134
161
 
135
162
  serializeSetClipboardControlMessage(
136
163
  message: ScrcpySetClipboardControlMessage,
137
164
  ): Uint8Array | [Uint8Array, Promise<void>] {
165
+ if (!this.value.control) {
166
+ throw new Error("control is disabled");
167
+ }
138
168
  return serializeSetClipboardControlMessage(
139
169
  message,
140
170
  this.#ackClipboardHandler,
141
171
  );
142
172
  }
143
173
 
174
+ serializeSetDisplayPowerControlMessage(
175
+ message: ScrcpySetDisplayPowerControlMessage,
176
+ ): Uint8Array {
177
+ if (!this.value.control) {
178
+ throw new Error("control is disabled");
179
+ }
180
+ return serializeSetDisplayPowerControlMessage(message);
181
+ }
182
+
144
183
  createScrollController(): ScrcpyScrollController {
184
+ if (!this.value.control) {
185
+ throw new Error("control is disabled");
186
+ }
145
187
  return createScrollController();
146
188
  }
147
189
  }
148
190
 
149
- type Init_<TVideo extends boolean> = Init<TVideo>;
191
+ type Init_ = Init;
150
192
 
151
193
  export namespace ScrcpyOptions2_3 {
152
- export type Init<TVideo extends boolean = boolean> = Init_<TVideo>;
194
+ export type Init = Init_;
195
+
196
+ export type Value<TInit extends Init> = ComputeOptionTypes<
197
+ TInit,
198
+ typeof Defaults
199
+ >;
153
200
  }
@@ -2,69 +2,85 @@ 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
  ScrcpyAudioStreamMetadata,
6
7
  ScrcpyDisplay,
7
8
  ScrcpyEncoder,
8
- ScrcpyMediaStreamPacket,
9
9
  ScrcpyOptions,
10
10
  ScrcpyOptionsListEncoders,
11
11
  ScrcpyScrollController,
12
12
  ScrcpyVideoStream,
13
+ ScrcpyVideoStreamPacket,
13
14
  } from "../base/index.js";
14
15
  import { ScrcpyDeviceMessageParsers } from "../base/index.js";
15
16
  import type {
16
17
  ScrcpyBackOrScreenOnControlMessage,
17
18
  ScrcpyInjectTouchControlMessage,
18
19
  ScrcpySetClipboardControlMessage,
20
+ ScrcpySetDisplayPowerControlMessage,
19
21
  ScrcpyUHidCreateControlMessage,
20
22
  ScrcpyUHidOutputDeviceMessage,
21
23
  } from "../latest.js";
22
24
 
23
- import type { Init } from "./impl/index.js";
25
+ import type { ComputeOptionTypes, Init } from "./impl/index.js";
24
26
  import {
25
27
  AckClipboardHandler,
26
28
  ClipboardStream,
29
+ computeOptionValues,
27
30
  ControlMessageTypes,
28
31
  createMediaStreamTransformer,
29
32
  createScrollController,
30
33
  Defaults,
34
+ parseAudioCodecOption,
35
+ parseAudioMetadataCodec,
31
36
  parseAudioStreamMetadata,
32
37
  parseDisplay,
33
38
  parseEncoder,
39
+ parseVideoCodecOption,
34
40
  parseVideoStreamMetadata,
41
+ parseVideoStreamMetadataAsync,
35
42
  serialize,
36
43
  serializeBackOrScreenOnControlMessage,
37
44
  serializeInjectTouchControlMessage,
38
45
  serializeSetClipboardControlMessage,
46
+ serializeSetDisplayPowerControlMessage,
39
47
  serializeUHidCreateControlMessage,
40
48
  setListDisplays,
41
49
  setListEncoders,
42
50
  UHidOutputStream,
43
51
  } from "./impl/index.js";
44
52
 
45
- export class ScrcpyOptions2_4<TVideo extends boolean>
46
- implements ScrcpyOptions<Init<TVideo>>, ScrcpyOptionsListEncoders
53
+ export class ScrcpyOptions2_4<TInit extends Init = Init>
54
+ implements
55
+ ScrcpyOptions<ScrcpyOptions2_4.Value<TInit>>,
56
+ ScrcpyOptionsListEncoders
47
57
  {
48
58
  static readonly Defaults = Defaults;
49
59
 
50
- readonly value: Required<Init<TVideo>>;
60
+ readonly value: ScrcpyOptions2_4.Value<TInit>;
51
61
 
52
62
  get controlMessageTypes(): typeof ControlMessageTypes {
53
63
  return ControlMessageTypes;
54
64
  }
55
65
 
56
66
  #clipboard: ClipboardStream | undefined;
57
- get clipboard(): ReadableStream<string> | undefined {
58
- return this.#clipboard;
67
+ get clipboard(): MapBoolean<
68
+ this["value"]["clipboardAutosync"],
69
+ ReadableStream<string>,
70
+ undefined
71
+ > {
72
+ return this.#clipboard as never;
59
73
  }
60
74
 
61
75
  #ackClipboardHandler: AckClipboardHandler | undefined;
62
76
 
63
77
  #uHidOutput: UHidOutputStream | undefined;
64
- get uHidOutput():
65
- | ReadableStream<ScrcpyUHidOutputDeviceMessage>
66
- | undefined {
67
- return this.#uHidOutput;
78
+ get uHidOutput(): MapBoolean<
79
+ this["value"]["control"],
80
+ ReadableStream<ScrcpyUHidOutputDeviceMessage>,
81
+ undefined
82
+ > {
83
+ return this.#uHidOutput as never;
68
84
  }
69
85
 
70
86
  #deviceMessageParsers = new ScrcpyDeviceMessageParsers();
@@ -72,12 +88,8 @@ export class ScrcpyOptions2_4<TVideo extends boolean>
72
88
  return this.#deviceMessageParsers;
73
89
  }
74
90
 
75
- constructor(init: Init<TVideo>) {
76
- this.value = { ...Defaults, ...init } as never;
77
-
78
- if (this.value.videoSource === "camera") {
79
- this.value.control = false;
80
- }
91
+ constructor(init: TInit) {
92
+ this.value = computeOptionValues(init, Defaults);
81
93
 
82
94
  if (this.value.control) {
83
95
  if (this.value.clipboardAutosync) {
@@ -97,7 +109,7 @@ export class ScrcpyOptions2_4<TVideo extends boolean>
97
109
  }
98
110
 
99
111
  serialize(): string[] {
100
- return serialize<Init<boolean>>(this.value, Defaults);
112
+ return serialize(this.value, Defaults);
101
113
  }
102
114
 
103
115
  setListDisplays(): void {
@@ -119,18 +131,29 @@ export class ScrcpyOptions2_4<TVideo extends boolean>
119
131
  parseVideoStreamMetadata(
120
132
  stream: ReadableStream<Uint8Array>,
121
133
  ): MaybePromiseLike<ScrcpyVideoStream> {
122
- return parseVideoStreamMetadata(this.value, stream);
134
+ return parseVideoStreamMetadata(
135
+ stream,
136
+ this.value.sendDeviceMeta,
137
+ this.value.sendCodecMeta,
138
+ parseVideoCodecOption(this.value.videoCodec),
139
+ parseVideoStreamMetadataAsync,
140
+ );
123
141
  }
124
142
 
125
143
  parseAudioStreamMetadata(
126
144
  stream: ReadableStream<Uint8Array>,
127
145
  ): MaybePromiseLike<ScrcpyAudioStreamMetadata> {
128
- return parseAudioStreamMetadata(stream, this.value);
146
+ return parseAudioStreamMetadata(
147
+ stream,
148
+ this.value.sendCodecMeta,
149
+ parseAudioMetadataCodec,
150
+ parseAudioCodecOption(this.value.audioCodec),
151
+ );
129
152
  }
130
153
 
131
154
  createMediaStreamTransformer(): TransformStream<
132
155
  Uint8Array,
133
- ScrcpyMediaStreamPacket
156
+ ScrcpyVideoStreamPacket
134
157
  > {
135
158
  return createMediaStreamTransformer(this.value);
136
159
  }
@@ -138,37 +161,66 @@ export class ScrcpyOptions2_4<TVideo extends boolean>
138
161
  serializeInjectTouchControlMessage(
139
162
  message: ScrcpyInjectTouchControlMessage,
140
163
  ): Uint8Array {
164
+ if (!this.value.control) {
165
+ throw new Error("control is disabled");
166
+ }
141
167
  return serializeInjectTouchControlMessage(message);
142
168
  }
143
169
 
144
170
  serializeBackOrScreenOnControlMessage(
145
171
  message: ScrcpyBackOrScreenOnControlMessage,
146
172
  ): Uint8Array | undefined {
173
+ if (!this.value.control) {
174
+ throw new Error("control is disabled");
175
+ }
147
176
  return serializeBackOrScreenOnControlMessage(message);
148
177
  }
149
178
 
150
179
  serializeSetClipboardControlMessage(
151
180
  message: ScrcpySetClipboardControlMessage,
152
181
  ): Uint8Array | [Uint8Array, Promise<void>] {
182
+ if (!this.value.control) {
183
+ throw new Error("control is disabled");
184
+ }
153
185
  return serializeSetClipboardControlMessage(
154
186
  message,
155
187
  this.#ackClipboardHandler,
156
188
  );
157
189
  }
158
190
 
191
+ serializeSetDisplayPowerControlMessage(
192
+ message: ScrcpySetDisplayPowerControlMessage,
193
+ ): Uint8Array {
194
+ if (!this.value.control) {
195
+ throw new Error("control is disabled");
196
+ }
197
+ return serializeSetDisplayPowerControlMessage(message);
198
+ }
199
+
159
200
  createScrollController(): ScrcpyScrollController {
201
+ if (!this.value.control) {
202
+ throw new Error("control is disabled");
203
+ }
160
204
  return createScrollController();
161
205
  }
162
206
 
163
207
  serializeUHidCreateControlMessage(
164
208
  message: ScrcpyUHidCreateControlMessage,
165
209
  ): Uint8Array {
210
+ if (!this.value.control) {
211
+ throw new Error("control is disabled");
212
+ }
166
213
  return serializeUHidCreateControlMessage(message);
167
214
  }
168
215
  }
169
216
 
170
- type Init_<TVideo extends boolean> = Init<TVideo>;
217
+ type Init_ = Init;
171
218
 
172
219
  export namespace ScrcpyOptions2_4 {
173
- export type Init<TVideo extends boolean = boolean> = Init_<TVideo>;
220
+ export type Init = Init_;
221
+
222
+ export type Value<TInit extends Init> = ComputeOptionTypes<
223
+ TInit,
224
+ typeof Defaults
225
+ >;
174
226
  }
@@ -0,0 +1,119 @@
1
+ /// <reference types="node" />
2
+
3
+ import { writeFileSync } from "node:fs";
4
+ import { format } from "prettier";
5
+
6
+ let content = `
7
+ // Generated by generate-type-tests.js. Do not edit manually.
8
+
9
+ import type {ScrcpyOptions2_6} from "./options.js";
10
+
11
+ type Equal<X, Y> =
12
+ (<T>() => T extends X ? 1 : 2) extends <T>() => T extends Y ? 1 : 2
13
+ ? true
14
+ : false;
15
+
16
+ function expectTrue<T extends true>(value?: T) { void value; }
17
+
18
+ `;
19
+
20
+ const audioDupValues = ["true", "false", "undefined"];
21
+ const audioSourceValues = [`"output"`, `"playback"`, `"mic"`, "undefined"];
22
+
23
+ /**
24
+ * @param {string[]} values
25
+ */
26
+ function* powerSetExceptEmpty(values) {
27
+ /**
28
+ * @param {number} start
29
+ * @param {string[]} combo
30
+ * @returns {Generator<string[], void, unknown>}
31
+ */
32
+ function* backtrack(start, combo) {
33
+ if (combo.length > 0) {
34
+ yield [...combo];
35
+ }
36
+
37
+ for (let i = start; i < values.length; i++) {
38
+ combo.push(values[i]);
39
+ yield* backtrack(i + 1, combo);
40
+ combo.pop();
41
+ }
42
+ }
43
+
44
+ yield* backtrack(0, []);
45
+ }
46
+
47
+ /**
48
+ *
49
+ * @param {string[]} audioDup
50
+ * @param {string[]} audioSource
51
+ * @param {string} expectedType
52
+ * @returns {string}
53
+ */
54
+ function generateCase(audioDup, audioSource, expectedType) {
55
+ return `
56
+ expectTrue<Equal<ScrcpyOptions2_6<{audioDup:${audioDup.join("|")}, audioSource:${audioSource.join("|")}}>["value"]["audioSource"], ${expectedType}>>();
57
+ `.trim();
58
+ }
59
+
60
+ for (const audioDup of powerSetExceptEmpty(audioDupValues)) {
61
+ content += `\n// #region audioDup: ${audioDup.join(" | ")}\n`;
62
+
63
+ for (const audioSource of powerSetExceptEmpty(audioSourceValues)) {
64
+ const willOverrideAudioSource =
65
+ audioDup.length === 1 && audioDup[0] === "true";
66
+ if (willOverrideAudioSource) {
67
+ content += generateCase(audioDup, audioSource, `"playback"`);
68
+ continue;
69
+ }
70
+
71
+ const mayOverrideAudioSource = audioDup.includes(`true`);
72
+ if (mayOverrideAudioSource) {
73
+ const expected = new Set([`"playback"`]);
74
+ for (const source of audioSource) {
75
+ switch (source) {
76
+ case "undefined":
77
+ // add default value
78
+ expected.add(`"output"`);
79
+ break;
80
+ default:
81
+ expected.add(source);
82
+ break;
83
+ }
84
+ }
85
+
86
+ content += generateCase(
87
+ audioDup,
88
+ audioSource,
89
+ Array.from(expected).join("|"),
90
+ );
91
+ continue;
92
+ }
93
+
94
+ const expected = new Set();
95
+ for (const source of audioSource) {
96
+ switch (source) {
97
+ case "undefined":
98
+ // add default value
99
+ expected.add(`"output"`);
100
+ break;
101
+ default:
102
+ expected.add(source);
103
+ break;
104
+ }
105
+ }
106
+
107
+ content += generateCase(
108
+ audioDup,
109
+ audioSource,
110
+ Array.from(expected).join("|"),
111
+ );
112
+ }
113
+
114
+ content += `\n// #endregion\n`;
115
+ }
116
+
117
+ content = await format(content, { parser: "typescript", tabWidth: 4 });
118
+
119
+ writeFileSync(new URL("./type-tests.spec.ts", import.meta.url), content);
@@ -0,0 +1,48 @@
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 ComputeAudioSource<TAudioDup, TAudioSource> = TAudioDup extends true
6
+ ? "playback"
7
+ : TAudioSource;
8
+
9
+ export type OverrideAudioSource<T> = Omit<T, "audioSource"> & {
10
+ audioSource: ComputeAudioSource<
11
+ T extends { audioDup: infer TAudioDup } ? TAudioDup : never,
12
+ T extends { audioSource: infer TAudioSource } ? TAudioSource : never
13
+ >;
14
+ };
15
+
16
+ export type ComputeOptionTypes<
17
+ T extends object,
18
+ TDefaults extends object,
19
+ > = OverrideAudioSource<PrevImpl.ComputeOptionTypes<T, TDefaults>>;
20
+
21
+ export function overrideAudioSource<
22
+ T extends { audioDup: boolean; audioSource: string },
23
+ >(value: T) {
24
+ if (value.audioDup) {
25
+ value.audioSource = "playback";
26
+ }
27
+ }
28
+
29
+ export function computeOptionValues<
30
+ T extends {
31
+ videoSource?: string | undefined;
32
+ control?: boolean | undefined;
33
+ clipboardAutosync?: boolean | undefined;
34
+ audioDup?: boolean | undefined;
35
+ audioSource?: string | undefined;
36
+ },
37
+ TDefaults extends {
38
+ videoSource: string;
39
+ control: boolean;
40
+ clipboardAutosync: boolean;
41
+ audioDup: boolean;
42
+ audioSource: string;
43
+ },
44
+ >(options: T, defaults: TDefaults): ComputeOptionTypes<T, TDefaults> {
45
+ const value = PrevImpl.computeOptionValues(options, defaults);
46
+ overrideAudioSource(value as never);
47
+ return value as never;
48
+ }
@@ -4,4 +4,4 @@ import { PrevImpl } from "./prev.js";
4
4
  export const Defaults = {
5
5
  ...PrevImpl.Defaults,
6
6
  audioDup: false,
7
- } as const satisfies Required<Init<true>>;
7
+ } as const satisfies Required<Init>;
@@ -1,3 +1,12 @@
1
1
  export * from "../../2_4/impl/index.js";
2
+
3
+ export {
4
+ computeOptionValues,
5
+ overrideAudioSource,
6
+ } from "./compute-option-values.js";
7
+ export type {
8
+ ComputeOptionTypes,
9
+ OverrideAudioSource,
10
+ } from "./compute-option-values.js";
2
11
  export { Defaults } from "./defaults.js";
3
12
  export type { Init } from "./init.js";
@@ -1,9 +1,6 @@
1
1
  import type { PrevImpl } from "./prev.js";
2
2
 
3
- export interface Init<TVideo extends boolean> extends Omit<
4
- PrevImpl.Init<TVideo>,
5
- "audioSource"
6
- > {
7
- audioSource?: PrevImpl.Init<TVideo>["audioSource"] | "playback";
8
- audioDup?: boolean;
3
+ export interface Init extends Omit<PrevImpl.Init, "audioSource"> {
4
+ audioSource?: PrevImpl.Init["audioSource"] | "playback";
5
+ audioDup?: boolean | undefined;
9
6
  }