diff --git a/src/actions/lwp3-bootloader.ts b/src/actions/lwp3-bootloader.ts index ffe0b890..15e43a3c 100644 --- a/src/actions/lwp3-bootloader.ts +++ b/src/actions/lwp3-bootloader.ts @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// Copyright (c) 2020 The Pybricks Authors +// Copyright (c) 2020-2021 The Pybricks Authors import { Action } from 'redux'; import { @@ -64,26 +64,63 @@ export function didConnect(): BootloaderConnectionDidConnectAction { * Possible reasons a device could fail to connect. */ export enum BootloaderConnectionFailureReason { - /** The reason is not known */ - Unknown = 'unknown', - /** The connection was canceled */ - Canceled = 'canceled', /** Web Bluetooth is not available */ NoWebBluetooth = 'no-web-bluetooth', /** Connected but failed to find the bootloader GATT service */ GattServiceNotFound = 'gatt-service-not-found', + /** The connection was canceled */ + Canceled = 'canceled', + /** The reason is not known */ + Unknown = 'unknown', } -export type BootloaderConnectionDidFailToConnectAction = Action & { - reason: BootloaderConnectionFailureReason; - err?: Error; +type Reason = { + reason: T; }; +export type BootloaderConnectionFailToConnectNoWebBluetoothReason = Reason; + +export type BootloaderConnectionFailToConnectGattServiceNotFoundReason = Reason; + +export type BootloaderConnectionFailToConnectCanceledReason = Reason; + +export type BootloaderConnectionFailToConnectUnknownReason = Reason & { + err: Error; +}; + +export type BootloaderConnectionDidFailToConnectReason = + | BootloaderConnectionFailToConnectNoWebBluetoothReason + | BootloaderConnectionFailToConnectGattServiceNotFoundReason + | BootloaderConnectionFailToConnectCanceledReason + | BootloaderConnectionFailToConnectUnknownReason; + +export type BootloaderConnectionDidFailToConnectAction = Action & + BootloaderConnectionDidFailToConnectReason; + +export function didFailToConnect( + reason: Exclude< + BootloaderConnectionFailureReason, + BootloaderConnectionFailureReason.Unknown + >, +): BootloaderConnectionDidFailToConnectAction; + +export function didFailToConnect( + reason: BootloaderConnectionFailureReason.Unknown, + err: Error, +): BootloaderConnectionDidFailToConnectAction; + export function didFailToConnect( reason: BootloaderConnectionFailureReason, err?: Error, ): BootloaderConnectionDidFailToConnectAction { - return { type: BootloaderConnectionActionType.DidFailToConnect, reason, err }; + if (reason === BootloaderConnectionFailureReason.Unknown) { + return { + type: BootloaderConnectionActionType.DidFailToConnect, + reason, + err, + }; + } + return { type: BootloaderConnectionActionType.DidFailToConnect, reason }; } export type BootloaderConnectionDidErrorAction = Action & { diff --git a/src/sagas/error-log.test.ts b/src/sagas/error-log.test.ts index b0bd8f25..5bc961ea 100644 --- a/src/sagas/error-log.test.ts +++ b/src/sagas/error-log.test.ts @@ -49,12 +49,8 @@ test('bleDataDidFailToWrite', async () => { test('bootloaderDidFailToConnect', async () => { const saga = new AsyncSaga(errorLog); - console.debug = jest.fn(); - saga.put(didFailToConnect(BootloaderConnectionFailureReason.Canceled)); - expect(console.debug).toHaveBeenCalledTimes(1); - console.error = jest.fn(); - saga.put(didFailToConnect(BootloaderConnectionFailureReason.Unknown)); + saga.put(didFailToConnect(BootloaderConnectionFailureReason.Unknown, {})); expect(console.error).toHaveBeenCalledTimes(1); await saga.end(); diff --git a/src/sagas/error-log.ts b/src/sagas/error-log.ts index d7e96dbe..5353c020 100644 --- a/src/sagas/error-log.ts +++ b/src/sagas/error-log.ts @@ -31,8 +31,6 @@ function bootloaderDidFailToConnect( ): void { if (action.reason === BootloaderConnectionFailureReason.Unknown) { console.error(action.err); - } else { - console.debug(action.err); } }