56 lines
1.5 KiB
JavaScript
56 lines
1.5 KiB
JavaScript
import { hasInjectionContext, inject } from "vue";
|
|
import {
|
|
useHead as headCore,
|
|
useHeadSafe as headSafe,
|
|
headSymbol,
|
|
useSeoMeta as seoMeta,
|
|
useServerHead as serverHead,
|
|
useServerHeadSafe as serverHeadSafe,
|
|
useServerSeoMeta as serverSeoMeta
|
|
} from "@unhead/vue";
|
|
import { tryUseNuxtApp } from "#app/nuxt";
|
|
export function injectHead(nuxtApp) {
|
|
const nuxt = nuxtApp || tryUseNuxtApp();
|
|
return nuxt?.ssrContext?.head || nuxt?.runWithContext(() => {
|
|
if (hasInjectionContext()) {
|
|
return inject(headSymbol);
|
|
}
|
|
});
|
|
}
|
|
export function useHead(input, options = {}) {
|
|
const head = injectHead(options.nuxt);
|
|
if (head) {
|
|
return headCore(input, { head, ...options });
|
|
}
|
|
}
|
|
export function useHeadSafe(input, options = {}) {
|
|
const head = injectHead(options.nuxt);
|
|
if (head) {
|
|
return headSafe(input, { head, ...options });
|
|
}
|
|
}
|
|
export function useSeoMeta(input, options = {}) {
|
|
const head = injectHead(options.nuxt);
|
|
if (head) {
|
|
return seoMeta(input, { head, ...options });
|
|
}
|
|
}
|
|
export function useServerHead(input, options = {}) {
|
|
const head = injectHead(options.nuxt);
|
|
if (head) {
|
|
return serverHead(input, { head, ...options });
|
|
}
|
|
}
|
|
export function useServerHeadSafe(input, options = {}) {
|
|
const head = injectHead(options.nuxt);
|
|
if (head) {
|
|
return serverHeadSafe(input, { head, ...options });
|
|
}
|
|
}
|
|
export function useServerSeoMeta(input, options = {}) {
|
|
const head = injectHead(options.nuxt);
|
|
if (head) {
|
|
return serverSeoMeta(input, { head, ...options });
|
|
}
|
|
}
|