📄 index.ts¶
📊 Analysis Summary¶
| Metric | Count |
|---|---|
| 🔧 Functions | 4 |
| 📦 Imports | 11 |
| ⚡ Async/Await Patterns | 3 |
| 🟢 Vue Composition API | 1 |
| 📐 Interfaces | 3 |
📚 Table of Contents¶
🛠️ File Location:¶
📂 packages/core/useBluetooth/index.ts
📦 Imports¶
| Name | Source |
|---|---|
ComputedRef |
vue |
ShallowRef |
vue |
ConfigurableNavigator |
../_configurable |
tryOnMounted |
@vueuse/shared |
tryOnScopeDispose |
@vueuse/shared |
readonly |
vue |
shallowRef |
vue |
watch |
vue |
defaultNavigator |
../_configurable |
useEventListener |
../useEventListener |
useSupported |
../useSupported |
Async/Await Patterns¶
| Type | Function | Await Expressions | Promise Chains |
|---|---|---|---|
| await-expression | useBluetooth |
navigator?.bluetooth.requestDevice({ | |
| acceptAllDevices, | |||
| filters, | |||
| optionalServices, | |||
| }), device.value.gatt.connect() | none | ||
| async-function | requestDevice |
navigator?.bluetooth.requestDevice({ | |
| acceptAllDevices, | |||
| filters, | |||
| optionalServices, | |||
| }) | none | ||
| async-function | connectToBluetoothGATTServer |
device.value.gatt.connect() | none |
Vue Composition API¶
| Name | Type | Reactive Variables | Composables |
|---|---|---|---|
watch |
watch | none | none |
Functions¶
useBluetooth(options: UseBluetoothOptions): UseBluetoothReturn¶
Code
export function useBluetooth(options?: UseBluetoothOptions): UseBluetoothReturn {
let {
acceptAllDevices = false,
} = options || {}
const {
filters = undefined,
optionalServices = undefined,
navigator = defaultNavigator,
} = options || {}
const isSupported = useSupported(() => navigator && 'bluetooth' in navigator)
const device = shallowRef<undefined | BluetoothDevice>()
const error = shallowRef<unknown | null>(null)
watch(device, () => {
connectToBluetoothGATTServer()
})
async function requestDevice(): Promise<void> {
// This is the function can only be called if Bluetooth API is supported:
if (!isSupported.value)
return
// Reset any errors we currently have:
error.value = null
// If filters specified, we need to ensure we don't accept all devices:
if (filters && filters.length > 0)
acceptAllDevices = false
try {
device.value = await navigator?.bluetooth.requestDevice({
acceptAllDevices,
filters,
optionalServices,
})
}
catch (err) {
error.value = err
}
}
const server = shallowRef<undefined | BluetoothRemoteGATTServer>()
const isConnected = shallowRef(false)
function reset() {
isConnected.value = false
device.value = undefined
server.value = undefined
}
async function connectToBluetoothGATTServer() {
// Reset any errors we currently have:
error.value = null
if (device.value && device.value.gatt) {
// Add reset fn to gattserverdisconnected event:
useEventListener(device, 'gattserverdisconnected', reset, { passive: true })
try {
// Connect to the device:
server.value = await device.value.gatt.connect()
isConnected.value = server.value.connected
}
catch (err) {
error.value = err
}
}
}
tryOnMounted(() => {
if (device.value)
device.value.gatt?.connect()
})
tryOnScopeDispose(() => {
if (device.value)
device.value.gatt?.disconnect()
})
return {
isSupported,
isConnected: readonly(isConnected),
// Device:
device,
requestDevice,
// Server:
server,
// Errors:
error,
}
}
- Parameters:
options: UseBluetoothOptions- Return Type:
UseBluetoothReturn - Calls:
useSupported (from ../useSupported)shallowRef (from vue)watch (from vue)connectToBluetoothGATTServernavigator?.bluetooth.requestDeviceuseEventListener (from ../useEventListener)device.value.gatt.connecttryOnMounted (from @vueuse/shared)device.value.gatt?.connecttryOnScopeDispose (from @vueuse/shared)device.value.gatt?.disconnectreadonly (from vue)- Internal Comments:
// This is the function can only be called if Bluetooth API is supported: // Reset any errors we currently have: (x8) // If filters specified, we need to ensure we don't accept all devices: // Add reset fn to gattserverdisconnected event: (x3) // Connect to the device: (x4) // Device: (x2) // Server: (x2) // Errors: (x2)
requestDevice(): Promise<void>¶
Code
async function requestDevice(): Promise<void> {
// This is the function can only be called if Bluetooth API is supported:
if (!isSupported.value)
return
// Reset any errors we currently have:
error.value = null
// If filters specified, we need to ensure we don't accept all devices:
if (filters && filters.length > 0)
acceptAllDevices = false
try {
device.value = await navigator?.bluetooth.requestDevice({
acceptAllDevices,
filters,
optionalServices,
})
}
catch (err) {
error.value = err
}
}
- Return Type:
Promise<void> - Calls:
navigator?.bluetooth.requestDevice- Internal Comments:
reset(): void¶
Code
- Return Type:
void
connectToBluetoothGATTServer(): Promise<void>¶
Code
async function connectToBluetoothGATTServer() {
// Reset any errors we currently have:
error.value = null
if (device.value && device.value.gatt) {
// Add reset fn to gattserverdisconnected event:
useEventListener(device, 'gattserverdisconnected', reset, { passive: true })
try {
// Connect to the device:
server.value = await device.value.gatt.connect()
isConnected.value = server.value.connected
}
catch (err) {
error.value = err
}
}
}
- Return Type:
Promise<void> - Calls:
useEventListener (from ../useEventListener)device.value.gatt.connect- Internal Comments:
Interfaces¶
UseBluetoothRequestDeviceOptions¶
Interface Code
export interface UseBluetoothRequestDeviceOptions {
/**
*
* An array of BluetoothScanFilters. This filter consists of an array
* of BluetoothServiceUUIDs, a name parameter, and a namePrefix parameter.
*
*/
filters?: BluetoothLEScanFilter[] | undefined
/**
*
* An array of BluetoothServiceUUIDs.
*
* @see https://developer.mozilla.org/en-US/docs/Web/API/BluetoothRemoteGATTService/uuid
*
*/
optionalServices?: BluetoothServiceUUID[] | undefined
}
Properties¶
| Name | Type | Optional | Description |
|---|---|---|---|
filters |
BluetoothLEScanFilter[] | undefined |
✓ | |
optionalServices |
BluetoothServiceUUID[] | undefined |
✓ |
UseBluetoothOptions¶
Interface Code
export interface UseBluetoothOptions extends UseBluetoothRequestDeviceOptions, ConfigurableNavigator {
/**
*
* A boolean value indicating that the requesting script can accept all Bluetooth
* devices. The default is false.
*
* !! This may result in a bunch of unrelated devices being shown
* in the chooser and energy being wasted as there are no filters.
*
*
* Use it with caution.
*
* @default false
*
*/
acceptAllDevices?: boolean
}
Properties¶
| Name | Type | Optional | Description |
|---|---|---|---|
acceptAllDevices |
boolean |
✓ |
UseBluetoothReturn¶
Interface Code
Properties¶
| Name | Type | Optional | Description |
|---|---|---|---|
isSupported |
ComputedRef<boolean> |
✗ | |
isConnected |
Readonly<ShallowRef<boolean>> |
✗ | |
device |
ShallowRef<BluetoothDevice | undefined> |
✗ | |
requestDevice |
() => Promise<void> |
✗ | |
server |
ShallowRef<BluetoothRemoteGATTServer | undefined> |
✗ | |
error |
ShallowRef<unknown | null> |
✗ |