import { getContext } from 'unctx' import type { Nuxt } from '@nuxt/schema' import { asyncNameStorage } from './utils' /** Direct access to the Nuxt context - see https://github.com/unjs/unctx. */ export const nuxtCtx = () => getContext(asyncNameStorage.getStore()!) // TODO: Use use/tryUse from unctx. https://github.com/unjs/unctx/issues/6 /** * Get access to Nuxt instance. * * Throws an error if Nuxt instance is unavailable. * @example * ```js * const nuxt = useNuxt() * ``` */ export function useNuxt (): Nuxt { const instance = nuxtCtx().tryUse() if (!instance) { throw new Error('Nuxt instance is unavailable!') } return instance } /** * Get access to Nuxt instance. * * Returns null if Nuxt instance is unavailable. * @example * ```js * const nuxt = tryUseNuxt() * if (nuxt) { * // Do something * } * ``` */ export function tryUseNuxt (): Nuxt | null { return nuxtCtx().tryUse() }