Skip to content

⬅️ Back to Table of Contents

📄 useWakeLock

📊 Analysis Summary

Metric Count
🔧 Functions 4
📦 Imports 14
⚡ Async/Await Patterns 4
🟢 Vue Composition API 1
📐 Interfaces 2
📑 Type Aliases 3

📚 Table of Contents

🛠️ File Location:

📂 packages/core/useWakeLock/index.ts

📦 Imports

Name Source
ComputedRef vue
ShallowRef vue
ConfigurableDocument ../_configurable
ConfigurableNavigator ../_configurable
Supportable ../types
tryOnScopeDispose @vueuse/shared
whenever @vueuse/shared
computed vue
shallowRef vue
defaultDocument ../_configurable
defaultNavigator ../_configurable
useDocumentVisibility ../useDocumentVisibility
useEventListener ../useEventListener
useSupported ../useSupported

Async/Await Patterns

Type Function Await Expressions Promise Chains
await-expression useWakeLock sentinel.value?.release(), (navigator as NavigatorWithWakeLock).wakeLock.requ... none
async-function forceRequest sentinel.value?.release(), (navigator as NavigatorWithWakeLock).wakeLock.requ... 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): UseWakeLockReturn

Reactive Screen Wake Lock API.

Parameters:

  • options any: No description

See: https://vueuse.org/useWakeLock

Tags: @__NO_SIDE_EFFECTS__

Raw JSDoc
/**
 * Reactive Screen Wake Lock API.
 *
 * @see https://vueuse.org/useWakeLock
 * @param options
 *
 * @__NO_SIDE_EFFECTS__
 */

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
  • tryOnScopeDispose (from @vueuse/shared)
  • release
Code
export function useWakeLock(options: UseWakeLockOptions = {}): UseWakeLockReturn {
  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()
  }

  tryOnScopeDispose(() => {
    release()
  })

  return {
    sentinel,
    isSupported,
    isActive,
    request,
    forceRequest,
    release,
  }
}

Internal helpers

Declared inside another function in this file.

forceRequest(type: WakeLockType): Promise<void>

Parameters:

  • type WakeLockType

Returns: Promise<void>

Calls:

  • sentinel.value?.release
  • (navigator as NavigatorWithWakeLock).wakeLock.request
Code
async function forceRequest(type: WakeLockType) {
    await sentinel.value?.release()
    sentinel.value = isSupported.value
      ? await (navigator as NavigatorWithWakeLock).wakeLock.request(type)
      : null
  }

request(type: WakeLockType): Promise<void>

Parameters:

  • type WakeLockType

Returns: Promise<void>

Calls:

  • forceRequest
Code
async function request(type: WakeLockType) {
    if (documentVisibility.value === 'visible')
      await forceRequest(type)
    else
      requestedType.value = type
  }

release(): Promise<void>

Returns: Promise<void>

Calls:

  • s?.release
Code
async function release() {
    requestedType.value = false
    const s = sentinel.value
    sentinel.value = null
    await 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 not shown
released boolean not shown
release () => Promise<void> not shown

UseWakeLockReturn

Interface Code
export interface UseWakeLockReturn extends Supportable {
  sentinel: ShallowRef<WakeLockSentinel | null>
  isActive: ComputedRef<boolean>
  request: (type: WakeLockType) => Promise<void>
  forceRequest: (type: WakeLockType) => Promise<void>
  release: () => Promise<void>
}

Properties

Name Type Optional Description
sentinel ShallowRef<WakeLockSentinel \| null> not shown
isActive ComputedRef<boolean> not shown
request (type: WakeLockType) => Promise<void> not shown
forceRequest (type: WakeLockType) => Promise<void> not shown
release () => Promise<void> not shown

Type Aliases

WakeLockType

type WakeLockType = 'screen';
type NavigatorWithWakeLock = Navigator & {
  wakeLock: { request: (type: WakeLockType) => Promise<WakeLockSentinel> }
};

UseWakeLockOptions

type UseWakeLockOptions = ConfigurableNavigator & ConfigurableDocument;

Generated by Syntax Scribe