fix(adb): throw correct error from sync.pull

This commit is contained in:
Simon Chan 2023-08-30 19:24:59 +08:00
parent 22f0329136
commit 9718f83926
No known key found for this signature in database
GPG key ID: A8B69F750B9BCEDD
3 changed files with 31 additions and 5 deletions

View file

@ -30,6 +30,9 @@ export async function* adbSyncPullGenerator(
yield packet.data; yield packet.data;
} }
done = true; done = true;
} catch (e) {
done = true;
throw e;
} finally { } finally {
if (!done) { if (!done) {
// sync pull can't be cancelled, so we have to read all data // sync pull can't be cancelled, so we have to read all data

View file

@ -27,14 +27,22 @@ const CODEC_OPTION_TYPES: Partial<
}; };
export class CodecOptions implements ScrcpyOptionValue { export class CodecOptions implements ScrcpyOptionValue {
value: Partial<CodecOptionsInit>; options: Partial<CodecOptionsInit>;
constructor(value: Partial<CodecOptionsInit> = {}) { constructor(options: Partial<CodecOptionsInit> = {}) {
this.value = value; for (const [key, value] of Object.entries(options)) {
if (typeof value !== "number") {
throw new Error(
`Invalid option value for ${key}: ${String(value)}`,
);
}
}
this.options = options;
} }
toOptionValue(): string | undefined { toOptionValue(): string | undefined {
const entries = Object.entries(this.value).filter( const entries = Object.entries(this.options).filter(
([, value]) => value !== undefined, ([, value]) => value !== undefined,
); );
@ -44,8 +52,15 @@ export class CodecOptions implements ScrcpyOptionValue {
return entries return entries
.map(([key, value]) => { .map(([key, value]) => {
let result = toDashCase(key);
const type = CODEC_OPTION_TYPES[key as keyof CodecOptionsInit]; const type = CODEC_OPTION_TYPES[key as keyof CodecOptionsInit];
return `${toDashCase(key)}${type ? `:${type}` : ""}=${value}`; if (type) {
result += `:${type}`;
}
result += `=${value}`;
return result;
}) })
.join(","); .join(",");
} }

View file

@ -42,6 +42,14 @@ export function toScrcpyOptionValue<T>(value: unknown, empty: T): string | T {
return empty; return empty;
} }
if (
typeof value !== "string" &&
typeof value !== "number" &&
typeof value !== "boolean"
) {
throw new Error(`Invalid option value: ${String(value)}`);
}
return String(value); return String(value);
} }