From bde5e2c7fc23ed1eb73bc40aa872a8ead3d25bc4 Mon Sep 17 00:00:00 2001 From: Simon Chan <1330321+yume-chan@users.noreply.github.com> Date: Mon, 25 Sep 2023 21:52:15 +0800 Subject: [PATCH] feat(webusb): support `exclusionFilters` option --- libraries/adb-daemon-webusb/src/manager.ts | 26 +++++++++++++++++----- 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/libraries/adb-daemon-webusb/src/manager.ts b/libraries/adb-daemon-webusb/src/manager.ts index 73f5e66e..b5168133 100644 --- a/libraries/adb-daemon-webusb/src/manager.ts +++ b/libraries/adb-daemon-webusb/src/manager.ts @@ -2,6 +2,14 @@ import { ADB_DEFAULT_DEVICE_FILTER, AdbDaemonWebUsbDevice } from "./device.js"; import type { AdbDeviceFilter } from "./utils.js"; import { findUsbAlternateInterface, isErrorName } from "./utils.js"; +// eslint-disable-next-line @typescript-eslint/no-namespace +export namespace AdbDaemonWebUsbDeviceManager { + export interface RequestDeviceOptions { + filters?: AdbDeviceFilter[] | undefined; + exclusionFilters?: USBDeviceFilter[] | undefined; + } +} + export class AdbDaemonWebUsbDeviceManager { /** * Gets the instance of {@link AdbDaemonWebUsbDeviceManager} using browser WebUSB implementation. @@ -38,17 +46,23 @@ export class AdbDaemonWebUsbDeviceManager { * or `undefined` if the user cancelled the device picker. */ async requestDevice( - filters: AdbDeviceFilter[] = [ADB_DEFAULT_DEVICE_FILTER], + options: AdbDaemonWebUsbDeviceManager.RequestDeviceOptions = {}, ): Promise { - if (filters.length === 0) { + if (!options.filters) { + options.filters = [ADB_DEFAULT_DEVICE_FILTER]; + } else if (options.filters.length === 0) { throw new TypeError("filters must not be empty"); } try { - const device = await this.#usbManager.requestDevice({ - filters, - }); - return new AdbDaemonWebUsbDevice(device, filters, this.#usbManager); + const device = await this.#usbManager.requestDevice( + options as USBDeviceRequestOptions, + ); + return new AdbDaemonWebUsbDevice( + device, + options.filters, + this.#usbManager, + ); } catch (e) { // No device selected if (isErrorName(e, "NotFoundError")) {