Skip to content

Commit c2ab488

Browse files
Replace exporting impl classes by adding factory functions
1 parent 1d47926 commit c2ab488

File tree

5 files changed

+38
-16
lines changed

5 files changed

+38
-16
lines changed

lib/bluetooth.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,10 +138,17 @@ export interface MicrobitWebBluetoothConnection extends DeviceConnection {
138138
writeUART(data: Uint8Array): Promise<void>;
139139
}
140140

141+
/**
142+
* A Bluetooth connection factory.
143+
*/
144+
export const createWebBluetoothConnection = (
145+
options?: MicrobitWebBluetoothConnectionOptions,
146+
) => new MicrobitWebBluetoothConnectionImpl(options);
147+
141148
/**
142149
* A Bluetooth connection to a micro:bit device.
143150
*/
144-
export class MicrobitWebBluetoothConnectionImpl
151+
class MicrobitWebBluetoothConnectionImpl
145152
extends TypedEventTarget<DeviceConnectionEventMap & ServiceConnectionEventMap>
146153
implements MicrobitWebBluetoothConnection
147154
{

lib/index.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { AccelerometerData, AccelerometerDataEvent } from "./accelerometer.js";
22
import {
3+
createWebBluetoothConnection,
34
MicrobitWebBluetoothConnection,
4-
MicrobitWebBluetoothConnectionImpl,
55
MicrobitWebBluetoothConnectionOptions,
66
} from "./bluetooth.js";
77
import { BoardId } from "./board-id.js";
@@ -33,13 +33,13 @@ import { MagnetometerData, MagnetometerDataEvent } from "./magnetometer.js";
3333
import { ServiceConnectionEventMap } from "./service-events.js";
3434
import { UARTDataEvent } from "./uart.js";
3535
import {
36+
createRadioBridgeConnection,
3637
MicrobitRadioBridgeConnection,
37-
MicrobitRadioBridgeConnectionImpl,
3838
MicrobitRadioBridgeConnectionOptions,
3939
} from "./usb-radio-bridge.js";
4040
import {
41+
createWebUSBConnection,
4142
MicrobitWebUSBConnection,
42-
MicrobitWebUSBConnectionImpl,
4343
MicrobitWebUSBConnectionOptions,
4444
} from "./usb.js";
4545

@@ -50,14 +50,14 @@ export {
5050
BoardId,
5151
ConnectionStatus,
5252
ConnectionStatusEvent,
53+
createRadioBridgeConnection,
5354
createUniversalHexFlashDataSource,
55+
createWebBluetoothConnection,
56+
createWebUSBConnection,
5457
DeviceConnectionEventMap,
5558
DeviceError,
5659
FlashDataError,
5760
FlashEvent,
58-
MicrobitRadioBridgeConnectionImpl,
59-
MicrobitWebBluetoothConnectionImpl,
60-
MicrobitWebUSBConnectionImpl,
6161
SerialDataEvent,
6262
SerialErrorEvent,
6363
SerialResetEvent,

lib/usb-radio-bridge.ts

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ import {
2222
TypedServiceEventDispatcher,
2323
} from "./service-events.js";
2424
import * as protocol from "./usb-serial-protocol.js";
25-
import { MicrobitWebUSBConnectionImpl } from "./usb.js";
25+
import { MicrobitWebUSBConnection } from "./usb.js";
2626

2727
const connectTimeoutDuration: number = 10000;
2828

@@ -50,12 +50,20 @@ export interface MicrobitRadioBridgeConnection extends DeviceConnection {
5050
setRemoteDeviceId(deviceId: number): void;
5151
}
5252

53+
/**
54+
* A radio bridge connection factory.
55+
*/
56+
export const createRadioBridgeConnection = (
57+
delegate: MicrobitWebUSBConnection,
58+
options?: MicrobitRadioBridgeConnectionOptions,
59+
) => new MicrobitRadioBridgeConnectionImpl(delegate, options);
60+
5361
/**
5462
* Wraps around a USB connection to implement a subset of services over a serial protocol.
5563
*
5664
* When it connects/disconnects it affects the delegate connection.
5765
*/
58-
export class MicrobitRadioBridgeConnectionImpl
66+
class MicrobitRadioBridgeConnectionImpl
5967
extends TypedEventTarget<DeviceConnectionEventMap & ServiceConnectionEventMap>
6068
implements MicrobitRadioBridgeConnection
6169
{
@@ -87,7 +95,7 @@ export class MicrobitRadioBridgeConnectionImpl
8795
};
8896

8997
constructor(
90-
private delegate: MicrobitWebUSBConnectionImpl,
98+
private delegate: MicrobitWebUSBConnection,
9199
options?: MicrobitRadioBridgeConnectionOptions,
92100
) {
93101
super();
@@ -302,7 +310,7 @@ class RadioBridgeSerialSession {
302310
constructor(
303311
private logging: Logging,
304312
private remoteDeviceId: number,
305-
private delegate: MicrobitWebUSBConnectionImpl,
313+
private delegate: MicrobitWebUSBConnection,
306314
private dispatchTypedEvent: TypedServiceEventDispatcher,
307315
private callbacks: ConnectCallbacks,
308316
) {}

lib/usb.test.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
* with a tweak to Buffer.
1111
*/
1212
import { ConnectionStatus, ConnectionStatusEvent } from "./device.js";
13-
import { MicrobitWebUSBConnectionImpl } from "./usb.js";
13+
import { createWebUSBConnection } from "./usb.js";
1414
import { beforeAll, expect, vi, describe, it } from "vitest";
1515

1616
vi.mock("./webusb-device-wrapper", () => ({
@@ -27,7 +27,7 @@ const describeDeviceOnly = process.env.TEST_MODE_DEVICE
2727
describe("MicrobitWebUSBConnection (WebUSB unsupported)", () => {
2828
it("notices if WebUSB isn't supported", () => {
2929
(global as any).navigator = {};
30-
const microbit = new MicrobitWebUSBConnectionImpl();
30+
const microbit = createWebUSBConnection();
3131
expect(microbit.status).toBe(ConnectionStatus.NOT_SUPPORTED);
3232
});
3333
});
@@ -49,13 +49,13 @@ describeDeviceOnly("MicrobitWebUSBConnection (WebUSB supported)", () => {
4949
});
5050

5151
it("shows no device as initial status", () => {
52-
const microbit = new MicrobitWebUSBConnectionImpl();
52+
const microbit = createWebUSBConnection();
5353
expect(microbit.status).toBe(ConnectionStatus.NO_AUTHORIZED_DEVICE);
5454
});
5555

5656
it("connects and disconnects updating status and events", async () => {
5757
const events: ConnectionStatus[] = [];
58-
const connection = new MicrobitWebUSBConnectionImpl();
58+
const connection = createWebUSBConnection();
5959
connection.addEventListener("status", (event: ConnectionStatusEvent) => {
6060
events.push(event.status);
6161
});

lib/usb.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,10 +75,17 @@ export interface MicrobitWebUSBConnection extends DeviceConnection {
7575
softwareReset(): Promise<void>;
7676
}
7777

78+
/**
79+
* A WebUSB connection factory.
80+
*/
81+
export const createWebUSBConnection = (
82+
options?: MicrobitWebUSBConnectionOptions,
83+
) => new MicrobitWebUSBConnectionImpl(options);
84+
7885
/**
7986
* A WebUSB connection to a micro:bit device.
8087
*/
81-
export class MicrobitWebUSBConnectionImpl
88+
class MicrobitWebUSBConnectionImpl
8289
extends TypedEventTarget<DeviceConnectionEventMap>
8390
implements MicrobitWebUSBConnection
8491
{

0 commit comments

Comments
 (0)