⬅️ Back to Table of Contents
📄 index.ts
📊 Analysis Summary
Metric |
Count |
🔧 Functions |
4 |
📦 Imports |
10 |
📊 Variables & Constants |
1 |
⚡ Async/Await Patterns |
4 |
🟢 Vue Composition API |
1 |
📐 Interfaces |
1 |
📑 Type Aliases |
4 |
📚 Table of Contents
🛠️ File Location:
📂 packages/core/useWakeLock/index.ts
📦 Imports
Name |
Source |
ConfigurableDocument |
../_configurable |
ConfigurableNavigator |
../_configurable |
whenever |
@vueuse/shared |
computed |
vue |
shallowRef |
vue |
defaultDocument |
../_configurable |
defaultNavigator |
../_configurable |
useDocumentVisibility |
../useDocumentVisibility |
useEventListener |
../useEventListener |
useSupported |
../useSupported |
Variables & Constants
Name |
Type |
Kind |
Value |
Exported |
s |
any |
let/var |
sentinel.value |
✗ |
Async/Await Patterns
Type |
Function |
Await Expressions |
Promise Chains |
await-expression |
useWakeLock |
sentinel.value?.release(), (navigator as NavigatorWithWakeLock).wakeLock.request(type), forceRequest(type), s?.release() |
none |
async-function |
forceRequest |
sentinel.value?.release(), (navigator as NavigatorWithWakeLock).wakeLock.request(type) |
none |
async-function |
request |
forceRequest(type) |
none |
async-function |
release |
s?.release() |
none |
Vue Composition API
Name |
Type |
Reactive Variables |
Composables |
computed |
computed |
none |
none |
Functions
useWakeLock(options: UseWakeLockOptions): { sentinel: any; isSupported: any; isActive: any; request: (type: "screen") => Promise<void>; forceRequest: (type: "screen") => Promise<void>; release: () => Promise<void>; }
Code
export function useWakeLock(options: UseWakeLockOptions = {}) {
const {
navigator = defaultNavigator,
document = defaultDocument,
} = options
const requestedType = shallowRef<WakeLockType | false>(false)
const sentinel = shallowRef<WakeLockSentinel | null>(null)
const documentVisibility = useDocumentVisibility({ document })
const isSupported = useSupported(() => navigator && 'wakeLock' in navigator)
const isActive = computed(() => !!sentinel.value && documentVisibility.value === 'visible')
if (isSupported.value) {
useEventListener(sentinel, 'release', () => {
requestedType.value = sentinel.value?.type ?? false
}, { passive: true })
whenever(
() => documentVisibility.value === 'visible' && document?.visibilityState === 'visible' && requestedType.value,
(type) => {
requestedType.value = false
forceRequest(type)
},
)
}
async function forceRequest(type: WakeLockType) {
await sentinel.value?.release()
sentinel.value = isSupported.value
? await (navigator as NavigatorWithWakeLock).wakeLock.request(type)
: null
}
async function request(type: WakeLockType) {
if (documentVisibility.value === 'visible')
await forceRequest(type)
else
requestedType.value = type
}
async function release() {
requestedType.value = false
const s = sentinel.value
sentinel.value = null
await s?.release()
}
return {
sentinel,
isSupported,
isActive,
request,
forceRequest,
release,
}
}
-
JSDoc:
/**
* Reactive Screen Wake Lock API.
*
* @see https://vueuse.org/useWakeLock
* @param options
*/
-
Parameters:
options: UseWakeLockOptions
- Return Type:
{ sentinel: any; isSupported: any; isActive: any; request: (type: "screen") => Promise<void>; forceRequest: (type: "screen") => Promise<void>; release: () => Promise<void>; }
- Calls:
shallowRef (from vue)
useDocumentVisibility (from ../useDocumentVisibility)
useSupported (from ../useSupported)
computed (from vue)
useEventListener (from ../useEventListener)
whenever (from @vueuse/shared)
forceRequest
sentinel.value?.release
(navigator as NavigatorWithWakeLock).wakeLock.request
s?.release
forceRequest(type: WakeLockType): Promise<void>
Code
async function forceRequest(type: WakeLockType) {
await sentinel.value?.release()
sentinel.value = isSupported.value
? await (navigator as NavigatorWithWakeLock).wakeLock.request(type)
: null
}
- Parameters:
type: WakeLockType
- Return Type:
Promise<void>
- Calls:
sentinel.value?.release
(navigator as NavigatorWithWakeLock).wakeLock.request
request(type: WakeLockType): Promise<void>
Code
async function request(type: WakeLockType) {
if (documentVisibility.value === 'visible')
await forceRequest(type)
else
requestedType.value = type
}
- Parameters:
type: WakeLockType
- Return Type:
Promise<void>
- Calls:
forceRequest
release(): Promise<void>
Code
async function release() {
requestedType.value = false
const s = sentinel.value
sentinel.value = null
await s?.release()
}
- Return Type:
Promise<void>
- Calls:
s?.release
Interfaces
WakeLockSentinel
Interface Code
export interface WakeLockSentinel extends EventTarget {
type: WakeLockType
released: boolean
release: () => Promise<void>
}
Properties
Name |
Type |
Optional |
Description |
type |
WakeLockType |
✗ |
|
released |
boolean |
✗ |
|
release |
() => Promise<void> |
✗ |
|
Type Aliases
WakeLockType
type WakeLockType = 'screen';
NavigatorWithWakeLock
type NavigatorWithWakeLock = Navigator & {
wakeLock: { request: (type: WakeLockType) => Promise<WakeLockSentinel> }
};
UseWakeLockOptions
type UseWakeLockOptions = ConfigurableNavigator & ConfigurableDocument;
UseWakeLockReturn
type UseWakeLockReturn = ReturnType<typeof useWakeLock>;