2021-11-21 16:14:46 +00:00
|
|
|
import { getContext } from 'unctx'
|
|
|
|
import type { Nuxt } from '@nuxt/schema'
|
2025-01-08 15:22:31 +00:00
|
|
|
import { asyncNameStorage } from './utils'
|
2021-11-21 16:14:46 +00:00
|
|
|
|
|
|
|
/** Direct access to the Nuxt context - see https://github.com/unjs/unctx. */
|
2025-01-08 15:22:31 +00:00
|
|
|
export const nuxtCtx = () => getContext<Nuxt>(asyncNameStorage.getStore()!)
|
2021-11-21 16:14:46 +00:00
|
|
|
|
2022-04-04 09:41:48 +00:00
|
|
|
// TODO: Use use/tryUse from unctx. https://github.com/unjs/unctx/issues/6
|
|
|
|
|
2021-11-21 16:14:46 +00:00
|
|
|
/**
|
2022-04-04 09:41:48 +00:00
|
|
|
* Get access to Nuxt instance.
|
|
|
|
*
|
|
|
|
* Throws an error if Nuxt instance is unavailable.
|
2021-11-21 16:14:46 +00:00
|
|
|
* @example
|
|
|
|
* ```js
|
|
|
|
* const nuxt = useNuxt()
|
|
|
|
* ```
|
|
|
|
*/
|
2022-04-04 09:41:48 +00:00
|
|
|
export function useNuxt (): Nuxt {
|
2025-01-08 15:22:31 +00:00
|
|
|
const instance = nuxtCtx().tryUse()
|
2022-04-04 09:41:48 +00:00
|
|
|
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 {
|
2025-01-08 15:22:31 +00:00
|
|
|
return nuxtCtx().tryUse()
|
2022-04-04 09:41:48 +00:00
|
|
|
}
|