From cb44b6384ce589c1f91a00ab029cf29983610097 Mon Sep 17 00:00:00 2001 From: Simon Chan <1330321+yume-chan@users.noreply.github.com> Date: Tue, 24 Dec 2024 01:39:35 +0800 Subject: [PATCH] feat(scrcpy): move `version` info to option classes --- .changeset/warm-badgers-burn.md | 6 +++++ libraries/adb-scrcpy/src/client.ts | 3 +-- libraries/adb-scrcpy/src/options/1_16.ts | 27 +++++-------------- libraries/adb-scrcpy/src/options/1_22.ts | 16 +++-------- libraries/adb-scrcpy/src/options/2_0.ts | 19 +++---------- libraries/adb-scrcpy/src/options/2_1.ts | 11 +++----- libraries/scrcpy/src/1_15/options.ts | 5 +++- libraries/scrcpy/src/1_15_1.ts | 13 ++++++--- libraries/scrcpy/src/1_16.ts | 13 ++++++--- libraries/scrcpy/src/1_17/options.ts | 5 +++- libraries/scrcpy/src/1_18/options.ts | 5 +++- libraries/scrcpy/src/1_19.ts | 13 ++++++--- libraries/scrcpy/src/1_20.ts | 13 ++++++--- libraries/scrcpy/src/1_21/options.ts | 5 +++- .../scrcpy/src/1_22/impl/scroll-controller.ts | 2 +- libraries/scrcpy/src/1_22/options.ts | 5 +++- libraries/scrcpy/src/1_23/options.ts | 5 +++- libraries/scrcpy/src/1_24/options.ts | 5 +++- libraries/scrcpy/src/1_25/options.ts | 5 +++- libraries/scrcpy/src/2_0/options.ts | 5 +++- libraries/scrcpy/src/2_1/options.ts | 5 +++- libraries/scrcpy/src/2_2/options.ts | 5 +++- libraries/scrcpy/src/2_3/options.ts | 5 +++- libraries/scrcpy/src/2_3_1.ts | 13 ++++++--- libraries/scrcpy/src/2_4/options.ts | 5 +++- libraries/scrcpy/src/2_5.ts | 13 ++++++--- libraries/scrcpy/src/2_6/options.ts | 7 +++-- libraries/scrcpy/src/2_6_1.ts | 13 ++++++--- libraries/scrcpy/src/2_7/options.ts | 5 +++- libraries/scrcpy/src/3_0/options.ts | 5 +++- libraries/scrcpy/src/3_0_1.ts | 13 ++++++--- libraries/scrcpy/src/3_0_2.ts | 13 ++++++--- libraries/scrcpy/src/base/option-value.ts | 4 +-- libraries/scrcpy/src/base/options.ts | 2 ++ libraries/scrcpy/src/latest.ts | 12 +++++++-- libraries/scrcpy/src/utils/wrapper.ts | 4 +++ 36 files changed, 189 insertions(+), 116 deletions(-) create mode 100644 .changeset/warm-badgers-burn.md diff --git a/.changeset/warm-badgers-burn.md b/.changeset/warm-badgers-burn.md new file mode 100644 index 00000000..4688d183 --- /dev/null +++ b/.changeset/warm-badgers-burn.md @@ -0,0 +1,6 @@ +--- +"@yume-chan/adb-scrcpy": minor +"@yume-chan/scrcpy": minor +--- + +Move `version` info to option classes and provide default values diff --git a/libraries/adb-scrcpy/src/client.ts b/libraries/adb-scrcpy/src/client.ts index 4f5a700a..bc56fdb9 100644 --- a/libraries/adb-scrcpy/src/client.ts +++ b/libraries/adb-scrcpy/src/client.ts @@ -120,7 +120,6 @@ export class AdbScrcpyClient { static async start( adb: Adb, path: string, - version: string, options: AdbScrcpyOptions< Pick >, @@ -151,7 +150,7 @@ export class AdbScrcpyClient { "app_process", /* unused */ "/", "com.genymobile.scrcpy.Server", - version, + options.version, ...options.serialize(), ], { diff --git a/libraries/adb-scrcpy/src/options/1_16.ts b/libraries/adb-scrcpy/src/options/1_16.ts index 24ab7f55..ec58ccdd 100644 --- a/libraries/adb-scrcpy/src/options/1_16.ts +++ b/libraries/adb-scrcpy/src/options/1_16.ts @@ -38,12 +38,11 @@ export class AdbScrcpyOptions1_16 extends AdbScrcpyOptions< static async getEncoders( adb: Adb, path: string, - version: string, options: AdbScrcpyOptions< Pick >, ): Promise { - const client = await AdbScrcpyClient.start(adb, path, version, options); + const client = await AdbScrcpyClient.start(adb, path, options); const encoders: ScrcpyEncoder[] = []; @@ -65,7 +64,6 @@ export class AdbScrcpyOptions1_16 extends AdbScrcpyOptions< static async getDisplays( adb: Adb, path: string, - version: string, options: AdbScrcpyOptions< Pick >, @@ -73,12 +71,7 @@ export class AdbScrcpyOptions1_16 extends AdbScrcpyOptions< try { // Server will exit before opening connections when an invalid display id was given // so `start` will throw an `AdbScrcpyExitedError` - const client = await AdbScrcpyClient.start( - adb, - path, - version, - options, - ); + const client = await AdbScrcpyClient.start(adb, path, options); // If the server didn't exit, manually stop it and throw an error await client.close(); @@ -103,20 +96,12 @@ export class AdbScrcpyOptions1_16 extends AdbScrcpyOptions< } } - override getEncoders( - adb: Adb, - path: string, - version: string, - ): Promise { - return AdbScrcpyOptions1_16.getEncoders(adb, path, version, this); + override getEncoders(adb: Adb, path: string): Promise { + return AdbScrcpyOptions1_16.getEncoders(adb, path, this); } - override getDisplays( - adb: Adb, - path: string, - version: string, - ): Promise { - return AdbScrcpyOptions1_16.getDisplays(adb, path, version, this); + override getDisplays(adb: Adb, path: string): Promise { + return AdbScrcpyOptions1_16.getDisplays(adb, path, this); } override createConnection(adb: Adb): AdbScrcpyConnection { diff --git a/libraries/adb-scrcpy/src/options/1_22.ts b/libraries/adb-scrcpy/src/options/1_22.ts index a1d35853..513c4e8c 100644 --- a/libraries/adb-scrcpy/src/options/1_22.ts +++ b/libraries/adb-scrcpy/src/options/1_22.ts @@ -18,20 +18,12 @@ export class AdbScrcpyOptions1_22 extends AdbScrcpyOptions< "tunnelForward" | "control" | "sendDummyByte" > > { - override getEncoders( - adb: Adb, - path: string, - version: string, - ): Promise { - return AdbScrcpyOptions1_16.getEncoders(adb, path, version, this); + override getEncoders(adb: Adb, path: string): Promise { + return AdbScrcpyOptions1_16.getEncoders(adb, path, this); } - override getDisplays( - adb: Adb, - path: string, - version: string, - ): Promise { - return AdbScrcpyOptions1_16.getDisplays(adb, path, version, this); + override getDisplays(adb: Adb, path: string): Promise { + return AdbScrcpyOptions1_16.getDisplays(adb, path, this); } override createConnection(adb: Adb): AdbScrcpyConnection { diff --git a/libraries/adb-scrcpy/src/options/2_0.ts b/libraries/adb-scrcpy/src/options/2_0.ts index c08bc9df..61b6fc45 100644 --- a/libraries/adb-scrcpy/src/options/2_0.ts +++ b/libraries/adb-scrcpy/src/options/2_0.ts @@ -24,7 +24,6 @@ export class AdbScrcpyOptions2_0 extends AdbScrcpyOptions< static async getEncoders( adb: Adb, path: string, - version: string, options: AdbScrcpyOptions< Pick >, @@ -32,12 +31,7 @@ export class AdbScrcpyOptions2_0 extends AdbScrcpyOptions< try { // Similar to `AdbScrcpyOptions1_16.getDisplays`, // server start procedure won't complete and `start `will throw - const client = await AdbScrcpyClient.start( - adb, - path, - version, - options, - ); + const client = await AdbScrcpyClient.start(adb, path, options); // If the server didn't exit, manually stop it and throw an error await client.close(); @@ -61,17 +55,12 @@ export class AdbScrcpyOptions2_0 extends AdbScrcpyOptions< override async getEncoders( adb: Adb, path: string, - version: string, ): Promise { - return AdbScrcpyOptions2_0.getEncoders(adb, path, version, this); + return AdbScrcpyOptions2_0.getEncoders(adb, path, this); } - override getDisplays( - adb: Adb, - path: string, - version: string, - ): Promise { - return AdbScrcpyOptions1_16.getDisplays(adb, path, version, this); + override getDisplays(adb: Adb, path: string): Promise { + return AdbScrcpyOptions1_16.getDisplays(adb, path, this); } override createConnection(adb: Adb): AdbScrcpyConnection { diff --git a/libraries/adb-scrcpy/src/options/2_1.ts b/libraries/adb-scrcpy/src/options/2_1.ts index 827857b1..a08bb90b 100644 --- a/libraries/adb-scrcpy/src/options/2_1.ts +++ b/libraries/adb-scrcpy/src/options/2_1.ts @@ -28,17 +28,12 @@ export class AdbScrcpyOptions2_1 extends AdbScrcpyOptions< override async getEncoders( adb: Adb, path: string, - version: string, ): Promise { - return AdbScrcpyOptions2_0.getEncoders(adb, path, version, this); + return AdbScrcpyOptions2_0.getEncoders(adb, path, this); } - override getDisplays( - adb: Adb, - path: string, - version: string, - ): Promise { - return AdbScrcpyOptions1_16.getDisplays(adb, path, version, this); + override getDisplays(adb: Adb, path: string): Promise { + return AdbScrcpyOptions1_16.getDisplays(adb, path, this); } override createConnection(adb: Adb): AdbScrcpyConnection { diff --git a/libraries/scrcpy/src/1_15/options.ts b/libraries/scrcpy/src/1_15/options.ts index 6d39f48b..85b59b33 100644 --- a/libraries/scrcpy/src/1_15/options.ts +++ b/libraries/scrcpy/src/1_15/options.ts @@ -36,6 +36,8 @@ import { export class ScrcpyOptions1_15 implements ScrcpyOptions { static readonly Defaults = Defaults; + readonly version: string; + readonly value: Required; get controlMessageTypes(): readonly ScrcpyControlMessageType[] { @@ -47,8 +49,9 @@ export class ScrcpyOptions1_15 implements ScrcpyOptions { return this.#clipboard; } - constructor(init: Init) { + constructor(init: Init, version = "1.15") { this.value = { ...Defaults, ...init }; + this.version = version; if (this.value.control) { this.#clipboard = new ClipboardStream(); diff --git a/libraries/scrcpy/src/1_15_1.ts b/libraries/scrcpy/src/1_15_1.ts index 67c26aaa..1146a21b 100644 --- a/libraries/scrcpy/src/1_15_1.ts +++ b/libraries/scrcpy/src/1_15_1.ts @@ -1,4 +1,9 @@ -export { - ScrcpyOptions1_15 as ScrcpyOptions1_15_1, - ScrcpyOptions1_15Impl as ScrcpyOptions1_15_1Impl, -} from "./1_15/index.js"; +import { ScrcpyOptions1_15 } from "./1_15/index.js"; + +export class ScrcpyOptions1_15_1 extends ScrcpyOptions1_15 { + constructor(init: ScrcpyOptions1_15.Init, version = "1.15.1") { + super(init, version); + } +} + +export { ScrcpyOptions1_15Impl as ScrcpyOptions1_15_1Impl } from "./1_15/index.js"; diff --git a/libraries/scrcpy/src/1_16.ts b/libraries/scrcpy/src/1_16.ts index b13e5872..4d8e4475 100644 --- a/libraries/scrcpy/src/1_16.ts +++ b/libraries/scrcpy/src/1_16.ts @@ -1,4 +1,9 @@ -export { - ScrcpyOptions1_15 as ScrcpyOptions1_16, - ScrcpyOptions1_15Impl as ScrcpyOptions1_16Impl, -} from "./1_15/index.js"; +import { ScrcpyOptions1_15 } from "./1_15/index.js"; + +export class ScrcpyOptions1_16 extends ScrcpyOptions1_15 { + constructor(init: ScrcpyOptions1_15.Init, version = "1.16") { + super(init, version); + } +} + +export { ScrcpyOptions1_15Impl as ScrcpyOptions1_16Impl } from "./1_15/index.js"; diff --git a/libraries/scrcpy/src/1_17/options.ts b/libraries/scrcpy/src/1_17/options.ts index 05de4162..c90eb5e9 100644 --- a/libraries/scrcpy/src/1_17/options.ts +++ b/libraries/scrcpy/src/1_17/options.ts @@ -40,6 +40,8 @@ import { export class ScrcpyOptions1_17 implements ScrcpyOptions { static readonly Defaults = Defaults; + readonly version: string; + readonly value: Required; get controlMessageTypes(): readonly ScrcpyControlMessageType[] { @@ -51,8 +53,9 @@ export class ScrcpyOptions1_17 implements ScrcpyOptions { return this.#clipboard; } - constructor(init: Init) { + constructor(init: Init, version = "1.17") { this.value = { ...Defaults, ...init }; + this.version = version; if (this.value.control) { this.#clipboard = new ClipboardStream(); diff --git a/libraries/scrcpy/src/1_18/options.ts b/libraries/scrcpy/src/1_18/options.ts index 1e199add..fd25ffb4 100644 --- a/libraries/scrcpy/src/1_18/options.ts +++ b/libraries/scrcpy/src/1_18/options.ts @@ -40,6 +40,8 @@ import { export class ScrcpyOptions1_18 implements ScrcpyOptions { static readonly Defaults = Defaults; + readonly version: string; + readonly value: Required; get controlMessageTypes(): readonly ScrcpyControlMessageType[] { @@ -51,8 +53,9 @@ export class ScrcpyOptions1_18 implements ScrcpyOptions { return this.#clipboard; } - constructor(init: Init) { + constructor(init: Init, version = "1.18") { this.value = { ...Defaults, ...init }; + this.version = version; if (this.value.control) { this.#clipboard = new ClipboardStream(); diff --git a/libraries/scrcpy/src/1_19.ts b/libraries/scrcpy/src/1_19.ts index 11edc43e..1fa5573a 100644 --- a/libraries/scrcpy/src/1_19.ts +++ b/libraries/scrcpy/src/1_19.ts @@ -1,4 +1,9 @@ -export { - ScrcpyOptions1_18 as ScrcpyOptions1_19, - ScrcpyOptions1_18Impl as ScrcpyOptions1_19Impl, -} from "./1_18/index.js"; +import { ScrcpyOptions1_18 } from "./1_18/index.js"; + +export class ScrcpyOptions1_19 extends ScrcpyOptions1_18 { + constructor(init: ScrcpyOptions1_18.Init, version = "1.19") { + super(init, version); + } +} + +export { ScrcpyOptions1_18Impl as ScrcpyOptions1_19Impl } from "./1_18/index.js"; diff --git a/libraries/scrcpy/src/1_20.ts b/libraries/scrcpy/src/1_20.ts index 46985d8d..b2c8d739 100644 --- a/libraries/scrcpy/src/1_20.ts +++ b/libraries/scrcpy/src/1_20.ts @@ -1,4 +1,9 @@ -export { - ScrcpyOptions1_18 as ScrcpyOptions1_20, - ScrcpyOptions1_18Impl as ScrcpyOptions1_20Impl, -} from "./1_18/index.js"; +import { ScrcpyOptions1_18 } from "./1_18/index.js"; + +export class ScrcpyOptions1_20 extends ScrcpyOptions1_18 { + constructor(init: ScrcpyOptions1_18.Init, version = "1.20") { + super(init, version); + } +} + +export { ScrcpyOptions1_18Impl as ScrcpyOptions1_20Impl } from "./1_18/index.js"; diff --git a/libraries/scrcpy/src/1_21/options.ts b/libraries/scrcpy/src/1_21/options.ts index f56b7d5e..1157270a 100644 --- a/libraries/scrcpy/src/1_21/options.ts +++ b/libraries/scrcpy/src/1_21/options.ts @@ -39,6 +39,8 @@ import { export class ScrcpyOptions1_21 implements ScrcpyOptions { static readonly Defaults = Defaults; + readonly version: string; + readonly value: Required; get controlMessageTypes(): readonly ScrcpyControlMessageType[] { @@ -52,8 +54,9 @@ export class ScrcpyOptions1_21 implements ScrcpyOptions { #ackClipboardHandler: AckClipboardHandler | undefined; - constructor(init: Init) { + constructor(init: Init, version = "1.21") { this.value = { ...Defaults, ...init }; + this.version = version; if (this.value.control && this.value.clipboardAutosync) { this.#clipboard = new ClipboardStream(); diff --git a/libraries/scrcpy/src/1_22/impl/scroll-controller.ts b/libraries/scrcpy/src/1_22/impl/scroll-controller.ts index c3834cbc..67515d43 100644 --- a/libraries/scrcpy/src/1_22/impl/scroll-controller.ts +++ b/libraries/scrcpy/src/1_22/impl/scroll-controller.ts @@ -1,9 +1,9 @@ import type { StructInit } from "@yume-chan/struct"; import { s32, struct } from "@yume-chan/struct"; +import type { ScrcpyScrollController } from "../../base/index.js"; import type { ScrcpyInjectScrollControlMessage } from "../../latest.js"; -import type { ScrcpyScrollController } from "../../base/index.js"; import { PrevImpl } from "./prev.js"; export const InjectScrollControlMessage = /* #__PURE__ */ (() => diff --git a/libraries/scrcpy/src/1_22/options.ts b/libraries/scrcpy/src/1_22/options.ts index fb505a62..08a4c79a 100644 --- a/libraries/scrcpy/src/1_22/options.ts +++ b/libraries/scrcpy/src/1_22/options.ts @@ -39,6 +39,8 @@ import { export class ScrcpyOptions1_22 implements ScrcpyOptions { static readonly Defaults = Defaults; + readonly version: string; + readonly value: Required; get controlMessageTypes(): readonly ScrcpyControlMessageType[] { @@ -52,8 +54,9 @@ export class ScrcpyOptions1_22 implements ScrcpyOptions { #ackClipboardHandler: AckClipboardHandler | undefined; - constructor(init: Init) { + constructor(init: Init, version = "1.22") { this.value = { ...Defaults, ...init }; + this.version = version; if (this.value.control && this.value.clipboardAutosync) { this.#clipboard = new ClipboardStream(); diff --git a/libraries/scrcpy/src/1_23/options.ts b/libraries/scrcpy/src/1_23/options.ts index 47452f39..b000d6e7 100644 --- a/libraries/scrcpy/src/1_23/options.ts +++ b/libraries/scrcpy/src/1_23/options.ts @@ -39,6 +39,8 @@ import { export class ScrcpyOptions1_23 implements ScrcpyOptions { static readonly Defaults = Defaults; + readonly version: string; + readonly value: Required; get controlMessageTypes(): readonly ScrcpyControlMessageType[] { @@ -52,8 +54,9 @@ export class ScrcpyOptions1_23 implements ScrcpyOptions { #ackClipboardHandler: AckClipboardHandler | undefined; - constructor(init: Init) { + constructor(init: Init, version = "1.23") { this.value = { ...Defaults, ...init }; + this.version = version; if (this.value.control && this.value.clipboardAutosync) { this.#clipboard = new ClipboardStream(); diff --git a/libraries/scrcpy/src/1_24/options.ts b/libraries/scrcpy/src/1_24/options.ts index 84eab20e..0b034634 100644 --- a/libraries/scrcpy/src/1_24/options.ts +++ b/libraries/scrcpy/src/1_24/options.ts @@ -39,6 +39,8 @@ import { export class ScrcpyOptions1_24 implements ScrcpyOptions { static readonly Defaults = Defaults; + readonly version: string; + readonly value: Required; get controlMessageTypes(): readonly ScrcpyControlMessageType[] { @@ -52,8 +54,9 @@ export class ScrcpyOptions1_24 implements ScrcpyOptions { #ackClipboardHandler: AckClipboardHandler | undefined; - constructor(init: Init) { + constructor(init: Init, version = "1.24") { this.value = { ...Defaults, ...init }; + this.version = version; if (this.value.control && this.value.clipboardAutosync) { this.#clipboard = new ClipboardStream(); diff --git a/libraries/scrcpy/src/1_25/options.ts b/libraries/scrcpy/src/1_25/options.ts index 7b50f63b..b3adc26f 100644 --- a/libraries/scrcpy/src/1_25/options.ts +++ b/libraries/scrcpy/src/1_25/options.ts @@ -39,6 +39,8 @@ import { export class ScrcpyOptions1_25 implements ScrcpyOptions { static readonly Defaults = Defaults; + readonly version: string; + readonly value: Required; get controlMessageTypes(): readonly ScrcpyControlMessageType[] { @@ -52,8 +54,9 @@ export class ScrcpyOptions1_25 implements ScrcpyOptions { #ackClipboardHandler: AckClipboardHandler | undefined; - constructor(init: Init) { + constructor(init: Init, version = "1.25") { this.value = { ...Defaults, ...init }; + this.version = version; if (this.value.control && this.value.clipboardAutosync) { this.#clipboard = new ClipboardStream(); diff --git a/libraries/scrcpy/src/2_0/options.ts b/libraries/scrcpy/src/2_0/options.ts index 2b5016e0..691a9603 100644 --- a/libraries/scrcpy/src/2_0/options.ts +++ b/libraries/scrcpy/src/2_0/options.ts @@ -40,6 +40,8 @@ import { export class ScrcpyOptions2_0 implements ScrcpyOptions { static readonly Defaults = Defaults; + readonly version: string; + readonly value: Required; get controlMessageTypes(): readonly ScrcpyControlMessageType[] { @@ -53,8 +55,9 @@ export class ScrcpyOptions2_0 implements ScrcpyOptions { #ackClipboardHandler: AckClipboardHandler | undefined; - constructor(init: Init) { + constructor(init: Init, version = "2.0") { this.value = { ...Defaults, ...init }; + this.version = version; if (this.value.control && this.value.clipboardAutosync) { this.#clipboard = new ClipboardStream(); diff --git a/libraries/scrcpy/src/2_1/options.ts b/libraries/scrcpy/src/2_1/options.ts index 7ff0863b..d711e42a 100644 --- a/libraries/scrcpy/src/2_1/options.ts +++ b/libraries/scrcpy/src/2_1/options.ts @@ -40,6 +40,8 @@ import { export class ScrcpyOptions2_1 implements ScrcpyOptions { static readonly Defaults = Defaults; + readonly version: string; + readonly value: Required; get controlMessageTypes(): readonly ScrcpyControlMessageType[] { @@ -53,8 +55,9 @@ export class ScrcpyOptions2_1 implements ScrcpyOptions { #ackClipboardHandler: AckClipboardHandler | undefined; - constructor(init: Init) { + constructor(init: Init, version = "2.1") { this.value = { ...Defaults, ...init }; + this.version = version; if (this.value.control && this.value.clipboardAutosync) { this.#clipboard = new ClipboardStream(); diff --git a/libraries/scrcpy/src/2_2/options.ts b/libraries/scrcpy/src/2_2/options.ts index 3825b9de..578ac9fb 100644 --- a/libraries/scrcpy/src/2_2/options.ts +++ b/libraries/scrcpy/src/2_2/options.ts @@ -40,6 +40,8 @@ import { export class ScrcpyOptions2_2 implements ScrcpyOptions { static readonly Defaults = Defaults; + readonly version: string; + readonly value: Required; get controlMessageTypes(): readonly ScrcpyControlMessageType[] { @@ -53,8 +55,9 @@ export class ScrcpyOptions2_2 implements ScrcpyOptions { #ackClipboardHandler: AckClipboardHandler | undefined; - constructor(init: Init) { + constructor(init: Init, version = "v2.2") { this.value = { ...Defaults, ...init }; + this.version = version; if (this.value.videoSource === "camera") { this.value.control = false; diff --git a/libraries/scrcpy/src/2_3/options.ts b/libraries/scrcpy/src/2_3/options.ts index d353acb1..cafd2110 100644 --- a/libraries/scrcpy/src/2_3/options.ts +++ b/libraries/scrcpy/src/2_3/options.ts @@ -40,6 +40,8 @@ import { export class ScrcpyOptions2_3 implements ScrcpyOptions { static readonly Defaults = Defaults; + readonly version: string; + readonly value: Required; get controlMessageTypes(): readonly ScrcpyControlMessageType[] { @@ -53,8 +55,9 @@ export class ScrcpyOptions2_3 implements ScrcpyOptions { #ackClipboardHandler: AckClipboardHandler | undefined; - constructor(init: Init) { + constructor(init: Init, version = "2.3") { this.value = { ...Defaults, ...init }; + this.version = version; if (this.value.videoSource === "camera") { this.value.control = false; diff --git a/libraries/scrcpy/src/2_3_1.ts b/libraries/scrcpy/src/2_3_1.ts index 6bcf2c1e..05673943 100644 --- a/libraries/scrcpy/src/2_3_1.ts +++ b/libraries/scrcpy/src/2_3_1.ts @@ -1,4 +1,9 @@ -export { - ScrcpyOptions2_3 as ScrcpyOptions2_3_1, - ScrcpyOptions2_3Impl as ScrcpyOptions2_3_1Impl, -} from "./2_3/index.js"; +import { ScrcpyOptions2_3 } from "./2_3/index.js"; + +export class ScrcpyOptions2_3_1 extends ScrcpyOptions2_3 { + constructor(init: ScrcpyOptions2_3.Init, version = "2.3.1") { + super(init, version); + } +} + +export { ScrcpyOptions2_3Impl as ScrcpyOptions2_3_1Impl } from "./2_3/index.js"; diff --git a/libraries/scrcpy/src/2_4/options.ts b/libraries/scrcpy/src/2_4/options.ts index 7618318c..c9ce8f10 100644 --- a/libraries/scrcpy/src/2_4/options.ts +++ b/libraries/scrcpy/src/2_4/options.ts @@ -44,6 +44,8 @@ import { export class ScrcpyOptions2_4 implements ScrcpyOptions { static readonly Defaults = Defaults; + readonly version: string; + readonly value: Required; get controlMessageTypes(): readonly ScrcpyControlMessageType[] { @@ -64,8 +66,9 @@ export class ScrcpyOptions2_4 implements ScrcpyOptions { return this.#uHidOutput; } - constructor(init: Init) { + constructor(init: Init, version = "2.4") { this.value = { ...Defaults, ...init }; + this.version = version; if (this.value.videoSource === "camera") { this.value.control = false; diff --git a/libraries/scrcpy/src/2_5.ts b/libraries/scrcpy/src/2_5.ts index cc21c5c7..ef113306 100644 --- a/libraries/scrcpy/src/2_5.ts +++ b/libraries/scrcpy/src/2_5.ts @@ -1,4 +1,9 @@ -export { - ScrcpyOptions2_4 as ScrcpyOptions2_5, - ScrcpyOptions2_4Impl as ScrcpyOptions2_5Impl, -} from "./2_4/index.js"; +import { ScrcpyOptions2_4 } from "./2_4/index.js"; + +export class ScrcpyOptions2_5 extends ScrcpyOptions2_4 { + constructor(init: ScrcpyOptions2_4.Init, version = "2.5") { + super(init, version); + } +} + +export { ScrcpyOptions2_4Impl as ScrcpyOptions2_5Impl } from "./2_4/index.js"; diff --git a/libraries/scrcpy/src/2_6/options.ts b/libraries/scrcpy/src/2_6/options.ts index 8c895b12..9b544572 100644 --- a/libraries/scrcpy/src/2_6/options.ts +++ b/libraries/scrcpy/src/2_6/options.ts @@ -20,6 +20,7 @@ import type { ScrcpyUHidOutputDeviceMessage, } from "../latest.js"; +import type { Init } from "./impl/index.js"; import { AckClipboardHandler, ClipboardStream, @@ -39,11 +40,12 @@ import { setListEncoders, UHidOutputStream, } from "./impl/index.js"; -import type { Init } from "./impl/index.js"; export class ScrcpyOptions2_6 implements ScrcpyOptions { static readonly Defaults = Defaults; + readonly version: string; + readonly value: Required; get controlMessageTypes(): readonly ScrcpyControlMessageType[] { @@ -64,8 +66,9 @@ export class ScrcpyOptions2_6 implements ScrcpyOptions { return this.#uHidOutput; } - constructor(init: Init) { + constructor(init: Init, version = "2.6") { this.value = { ...Defaults, ...init }; + this.version = version; if (this.value.videoSource === "camera") { this.value.control = false; diff --git a/libraries/scrcpy/src/2_6_1.ts b/libraries/scrcpy/src/2_6_1.ts index b4193a39..5565dba7 100644 --- a/libraries/scrcpy/src/2_6_1.ts +++ b/libraries/scrcpy/src/2_6_1.ts @@ -1,4 +1,9 @@ -export { - ScrcpyOptions2_6 as ScrcpyOptions2_6_1, - ScrcpyOptions2_6Impl as ScrcpyOptions2_6_1Impl, -} from "./2_6/index.js"; +import { ScrcpyOptions2_6 } from "./2_6/index.js"; + +export class ScrcpyOptions2_6_1 extends ScrcpyOptions2_6 { + constructor(init: ScrcpyOptions2_6.Init, version = "2.6.1") { + super(init, version); + } +} + +export { ScrcpyOptions2_6Impl as ScrcpyOptions2_6_1Impl } from "./2_6/index.js"; diff --git a/libraries/scrcpy/src/2_7/options.ts b/libraries/scrcpy/src/2_7/options.ts index e46f5690..e4d9def0 100644 --- a/libraries/scrcpy/src/2_7/options.ts +++ b/libraries/scrcpy/src/2_7/options.ts @@ -44,6 +44,8 @@ import { export class ScrcpyOptions2_7 implements ScrcpyOptions { static readonly Defaults = Defaults; + readonly version: string; + readonly value: Required; get controlMessageTypes(): readonly ScrcpyControlMessageType[] { @@ -64,8 +66,9 @@ export class ScrcpyOptions2_7 implements ScrcpyOptions { return this.#uHidOutput; } - constructor(init: Init) { + constructor(init: Init, version = "2.7") { this.value = { ...Defaults, ...init }; + this.version = version; if (this.value.videoSource === "camera") { this.value.control = false; diff --git a/libraries/scrcpy/src/3_0/options.ts b/libraries/scrcpy/src/3_0/options.ts index 45022852..b0a08dfb 100644 --- a/libraries/scrcpy/src/3_0/options.ts +++ b/libraries/scrcpy/src/3_0/options.ts @@ -44,6 +44,8 @@ import { export class ScrcpyOptions3_0 implements ScrcpyOptions { static readonly Defaults = Defaults; + readonly version: string; + readonly value: Required; get controlMessageTypes(): readonly ScrcpyControlMessageType[] { @@ -64,8 +66,9 @@ export class ScrcpyOptions3_0 implements ScrcpyOptions { return this.#uHidOutput; } - constructor(init: Init) { + constructor(init: Init, version = "3.0") { this.value = { ...Defaults, ...init }; + this.version = version; if (this.value.videoSource === "camera") { this.value.control = false; diff --git a/libraries/scrcpy/src/3_0_1.ts b/libraries/scrcpy/src/3_0_1.ts index 80253f52..74b7f3fe 100644 --- a/libraries/scrcpy/src/3_0_1.ts +++ b/libraries/scrcpy/src/3_0_1.ts @@ -1,4 +1,9 @@ -export { - ScrcpyOptions3_0 as ScrcpyOptions3_0_1, - ScrcpyOptions3_0Impl as ScrcpyOptions3_0_1Impl, -} from "./3_0/index.js"; +import { ScrcpyOptions3_0 } from "./3_0/index.js"; + +export class ScrcpyOptions3_0_1 extends ScrcpyOptions3_0 { + constructor(init: ScrcpyOptions3_0.Init, version = "3.0.1") { + super(init, version); + } +} + +export { ScrcpyOptions3_0Impl as ScrcpyOptions3_0_1Impl } from "./3_0/index.js"; diff --git a/libraries/scrcpy/src/3_0_2.ts b/libraries/scrcpy/src/3_0_2.ts index 5e4c51c3..0d1d787a 100644 --- a/libraries/scrcpy/src/3_0_2.ts +++ b/libraries/scrcpy/src/3_0_2.ts @@ -1,4 +1,9 @@ -export { - ScrcpyOptions3_0 as ScrcpyOptions3_0_2, - ScrcpyOptions3_0Impl as ScrcpyOptions3_0_2Impl, -} from "./3_0/index.js"; +import { ScrcpyOptions3_0 } from "./3_0/index.js"; + +export class ScrcpyOptions3_0_2 extends ScrcpyOptions3_0 { + constructor(init: ScrcpyOptions3_0.Init, version = "3.0.2") { + super(init, version); + } +} + +export { ScrcpyOptions3_0Impl as ScrcpyOptions3_0_2Impl } from "./3_0/index.js"; diff --git a/libraries/scrcpy/src/base/option-value.ts b/libraries/scrcpy/src/base/option-value.ts index 892cf780..10d52d9d 100644 --- a/libraries/scrcpy/src/base/option-value.ts +++ b/libraries/scrcpy/src/base/option-value.ts @@ -28,8 +28,8 @@ export function toScrcpyOptionValue(value: unknown, empty: T): string | T { typeof value !== "number" && typeof value !== "boolean" ) { - throw new TypeError(`Invalid option value: ${String(value)}`); + throw new TypeError(`Invalid option value: ${JSON.stringify(value)}`); } - return String(value); + return value.toString(); } diff --git a/libraries/scrcpy/src/base/options.ts b/libraries/scrcpy/src/base/options.ts index 8fa00b44..ef586078 100644 --- a/libraries/scrcpy/src/base/options.ts +++ b/libraries/scrcpy/src/base/options.ts @@ -19,6 +19,8 @@ import type { ScrcpyScrollController } from "./scroll-controller.js"; import type { ScrcpyVideoStream } from "./video.js"; export interface ScrcpyOptions { + get version(): string; + get controlMessageTypes(): readonly ScrcpyControlMessageType[]; value: Required; diff --git a/libraries/scrcpy/src/latest.ts b/libraries/scrcpy/src/latest.ts index da9cdf9e..0114e0a7 100644 --- a/libraries/scrcpy/src/latest.ts +++ b/libraries/scrcpy/src/latest.ts @@ -1,3 +1,13 @@ +import { ScrcpyOptions3_0 } from "./3_0/options.js"; + +export class ScrcpyOptionsLatest extends ScrcpyOptions3_0 { + constructor(init: ScrcpyOptions3_0.Init, version: string) { + super(init, version); + } +} + +export { ScrcpyOptions3_0Impl as ScrcpyOptionsLatestImpl } from "./3_0/index.js"; + export { BackOrScreenOnControlMessage as ScrcpyBackOrScreenOnControlMessage, CaptureOrientation as ScrcpyCaptureOrientation, @@ -14,5 +24,3 @@ export { UHidCreateControlMessage as ScrcpyUHidCreateControlMessage, UHidOutputDeviceMessage as ScrcpyUHidOutputDeviceMessage, } from "./3_0/impl/index.js"; - -export { ScrcpyOptions3_0 as ScrcpyOptionsLatest } from "./3_0/index.js"; diff --git a/libraries/scrcpy/src/utils/wrapper.ts b/libraries/scrcpy/src/utils/wrapper.ts index 99b43c2c..041b14ce 100644 --- a/libraries/scrcpy/src/utils/wrapper.ts +++ b/libraries/scrcpy/src/utils/wrapper.ts @@ -20,6 +20,10 @@ export class ScrcpyOptionsWrapper { #base: ScrcpyOptions; + get version() { + return this.#base.version; + } + get controlMessageTypes() { return this.#base.controlMessageTypes; }