chore: progress

This commit is contained in:
harlan 2025-01-21 15:06:34 +11:00
parent 7e1d883030
commit 703b0e29ef
9 changed files with 201 additions and 130 deletions

View File

@ -40,9 +40,9 @@
"@nuxt/vite-builder": "workspace:*", "@nuxt/vite-builder": "workspace:*",
"@nuxt/webpack-builder": "workspace:*", "@nuxt/webpack-builder": "workspace:*",
"@types/node": "22.10.5", "@types/node": "22.10.5",
"@unhead/schema": "2.0.0-alpha.2", "@unhead/schema": "2.0.0-alpha.3",
"@unhead/vue": "2.0.0-alpha.2", "@unhead/vue": "2.0.0-alpha.3",
"@unhead/shared": "2.0.0-alpha.2", "@unhead/shared": "2.0.0-alpha.3",
"@vue/compiler-core": "3.5.13", "@vue/compiler-core": "3.5.13",
"@vue/compiler-dom": "3.5.13", "@vue/compiler-dom": "3.5.13",
"@vue/shared": "3.5.13", "@vue/shared": "3.5.13",

View File

@ -71,7 +71,7 @@
"@nuxt/schema": "workspace:*", "@nuxt/schema": "workspace:*",
"@nuxt/telemetry": "^2.6.4", "@nuxt/telemetry": "^2.6.4",
"@nuxt/vite-builder": "workspace:*", "@nuxt/vite-builder": "workspace:*",
"@unhead/vue": "^2.0.0-alpha.2", "@unhead/vue": "^2.0.0-alpha.3",
"@vue/shared": "^3.5.13", "@vue/shared": "^3.5.13",
"acorn": "8.14.0", "acorn": "8.14.0",
"c12": "^2.0.1", "c12": "^2.0.1",

View File

@ -1,17 +1,3 @@
import type { UseHeadInput } from '@unhead/vue'
import type { HeadAugmentations } from 'nuxt/schema'
/** @deprecated Use `UseHeadInput` from `@unhead/vue` instead. This may be removed in a future minor version. */
export type MetaObject = UseHeadInput<HeadAugmentations>
export {
/** @deprecated Import `useHead` from `#imports` instead. This may be removed in a future minor version. */
useHead,
/** @deprecated Import `useSeoMeta` from `#imports` instead. This may be removed in a future minor version. */
useSeoMeta,
/** @deprecated Import `useServerSeoMeta` from `#imports` instead. This may be removed in a future minor version. */
useServerSeoMeta,
} from '@unhead/vue'
export { defineNuxtComponent } from './component' export { defineNuxtComponent } from './component'
export { useAsyncData, useLazyAsyncData, useNuxtData, refreshNuxtData, clearNuxtData } from './asyncData' export { useAsyncData, useLazyAsyncData, useNuxtData, refreshNuxtData, clearNuxtData } from './asyncData'
export type { AsyncDataOptions, AsyncData, AsyncDataRequestStatus } from './asyncData' export type { AsyncDataOptions, AsyncData, AsyncDataRequestStatus } from './asyncData'

View File

@ -1,6 +1,7 @@
import { resolve } from 'pathe' import { resolve } from 'pathe'
import { addComponent, addImportsSources, addPlugin, addTemplate, defineNuxtModule, tryResolveModule } from '@nuxt/kit' import { addComponent, addImportsSources, addPlugin, addTemplate, defineNuxtModule, tryResolveModule } from '@nuxt/kit'
import type { NuxtOptions } from '@nuxt/schema' import type { NuxtOptions } from '@nuxt/schema'
import { unheadVueComposablesImports } from '@unhead/vue'
import { distDir } from '../dirs' import { distDir } from '../dirs'
const components = ['NoScript', 'Link', 'Base', 'Title', 'Meta', 'Style', 'Head', 'Html', 'Body'] const components = ['NoScript', 'Link', 'Base', 'Title', 'Meta', 'Style', 'Head', 'Html', 'Body']
@ -38,31 +39,35 @@ export default defineNuxtModule<NuxtOptions['unhead']>({
] ]
} }
const exportPath = resolve(runtimeDir, 'exports', isNuxtV4 ? 'v4' : 'v3')
nuxt.options.alias['#unhead/exports'] = exportPath
addImportsSources({ addImportsSources({
from: resolve(runtimeDir, 'composables', isNuxtV4 ? 'v4' : 'v3'), from: exportPath,
// hard-coded for now we so don't support auto-imports on the deprecated composables imports: unheadVueComposablesImports['@unhead/vue'],
imports: [
'injectHead',
'useHead',
'useSeoMeta',
'useHeadSafe',
'useServerHead',
'useServerSeoMeta',
'useServerHeadSafe',
],
}) })
const unheadVue = await tryResolveModule('unhead/plugins', nuxt.options.modulesDir) || 'unhead/plugins' // for Nuxt v3 users we will alias `@unhead/vue` to our custom export path so that
// import { useHead } from '@unhead/vue'
// will work in a context without the Vue app such as Nuxt plugins and such
// for Nuxt v4 user should import from #imports
if (!isNuxtV4) {
for (const subpath of ['legacy', 'types']) {
const subpathModule = `@unhead/vue/${subpath}`
nuxt.options.alias[subpathModule] = await tryResolveModule(subpathModule, nuxt.options.modulesDir) || subpathModule
}
nuxt.options.alias['@unhead/vue'] = exportPath
}
addTemplate({ addTemplate({
filename: 'unhead-options.mjs', filename: 'unhead-options.mjs',
getContents () { async getContents () {
if (isNuxtV4) { if (isNuxtV4) {
return `export default {}` return `export default {}`
} }
const unheadPlugins = await tryResolveModule('unhead/plugins', nuxt.options.modulesDir) || 'unhead/plugins'
// v1 unhead legacy options // v1 unhead legacy options
const disableCapoSorting = !nuxt.options.experimental.headNext const disableCapoSorting = !nuxt.options.experimental.headNext
return `import { DeprecationsPlugin, PromisesPlugin } from ${JSON.stringify(unheadVue)}; return `import { DeprecationsPlugin, PromisesPlugin } from ${JSON.stringify(unheadPlugins)};
export default { export default {
disableCapoSorting: ${disableCapoSorting} disableCapoSorting: ${disableCapoSorting}
plugins: [DeprecationsPlugin, PromisesPlugin], plugins: [DeprecationsPlugin, PromisesPlugin],

View File

@ -1,36 +0,0 @@
import type { ActiveHeadEntry, MergeHead } from '@unhead/schema'
import type { UseHeadInput, UseHeadOptions, UseHeadSafeInput, UseSeoMetaInput } from '@unhead/vue'
import { useHead as head, useHeadSafe as headSafe, useSeoMeta as seoMeta, useServerHead as serverHead, useServerHeadSafe as serverHeadSafe, useServerSeoMeta as serverSeoMeta } from '@unhead/vue'
import { tryUseNuxtApp } from '#app'
interface NuxtUseHeadOptions extends UseHeadOptions {
nuxt?: any
}
export function injectHead (nuxtApp?: any) {
return (nuxtApp || tryUseNuxtApp())?.runWithContext(() => injectHead())
}
export function useHead<T extends MergeHead> (input: UseHeadInput<T>, options: NuxtUseHeadOptions = {}): ActiveHeadEntry<UseHeadInput<T>> | void {
return (options.nuxt || tryUseNuxtApp()).runWithContext(() => head<T>(input, options))
}
export function useHeadSafe<T extends MergeHead> (input: UseHeadSafeInput, options: NuxtUseHeadOptions = {}): ActiveHeadEntry<UseHeadInput<T>> | void {
return (options.nuxt || tryUseNuxtApp()).runWithContext(() => headSafe(input, options))
}
export function useSeoMeta (input: UseSeoMetaInput, options: NuxtUseHeadOptions = {}): ActiveHeadEntry<UseSeoMetaInput> | void {
return (options.nuxt || tryUseNuxtApp()).runWithContext(() => seoMeta(input, options))
}
export function useServerHead<T extends MergeHead> (input: UseHeadInput<T>, options: NuxtUseHeadOptions = {}): ActiveHeadEntry<UseHeadInput<T>> | void {
return (options.nuxt || tryUseNuxtApp()).runWithContext(() => serverHead<T>(input, options))
}
export function useServerHeadSafe (input: UseHeadSafeInput, options: NuxtUseHeadOptions = {}): ActiveHeadEntry<UseSeoMetaInput> | void {
return (options.nuxt || tryUseNuxtApp()).runWithContext(() => serverHeadSafe(input, options))
}
export function useServerSeoMeta<T extends MergeHead> (input: UseSeoMetaInput, options: NuxtUseHeadOptions = {}): ActiveHeadEntry<UseHeadInput<T>> | void {
return (options.nuxt || tryUseNuxtApp()).runWithContext(() => serverSeoMeta(input, options))
}

View File

@ -1,36 +0,0 @@
import type { ActiveHeadEntry, MergeHead } from '@unhead/schema'
import type { UseHeadInput, UseHeadOptions, UseHeadSafeInput, UseSeoMetaInput } from '@unhead/vue'
import { useHead as head, useHeadSafe as headSafe, useSeoMeta as seoMeta, useServerHead as serverHead, useServerHeadSafe as serverHeadSafe, useServerSeoMeta as serverSeoMeta } from '@unhead/vue'
import { useNuxtApp } from '#app'
interface NuxtUseHeadOptions extends UseHeadOptions {
nuxt?: any
}
export function injectHead (nuxtApp?: any) {
return (nuxtApp || useNuxtApp()).runWithContext(() => injectHead())
}
export function useHead<T extends MergeHead> (input: UseHeadInput<T>, options: NuxtUseHeadOptions = {}): ActiveHeadEntry<UseHeadInput<T>> {
return (options.nuxt || useNuxtApp()).runWithContext(() => head<T>(input, options))
}
export function useHeadSafe<T extends MergeHead> (input: UseHeadSafeInput, options: NuxtUseHeadOptions = {}): ActiveHeadEntry<UseHeadInput<T>> {
return (options.nuxt || useNuxtApp()).runWithContext(() => headSafe(input, options))
}
export function useSeoMeta (input: UseSeoMetaInput, options: NuxtUseHeadOptions = {}): ActiveHeadEntry<UseSeoMetaInput> {
return (options.nuxt || useNuxtApp()).runWithContext(() => seoMeta(input, options))
}
export function useServerHead<T extends MergeHead> (input: UseHeadInput<T>, options: NuxtUseHeadOptions = {}): ActiveHeadEntry<UseHeadInput<T>> {
return (options.nuxt || useNuxtApp()).runWithContext(() => serverHead<T>(input, options))
}
export function useServerHeadSafe (input: UseHeadSafeInput, options: NuxtUseHeadOptions = {}): ActiveHeadEntry<UseSeoMetaInput> {
return (options.nuxt || useNuxtApp()).runWithContext(() => serverHeadSafe(input, options))
}
export function useServerSeoMeta<T extends MergeHead> (input: UseSeoMetaInput, options: NuxtUseHeadOptions = {}): ActiveHeadEntry<UseHeadInput<T>> {
return (options.nuxt || useNuxtApp()).runWithContext(() => serverSeoMeta(input, options))
}

View File

@ -0,0 +1,94 @@
import type { ActiveHeadEntry, MergeHead } from '@unhead/schema'
import type { UseHeadInput, UseHeadOptions, UseHeadSafeInput, UseSeoMetaInput,
VueHeadClient } from '@unhead/vue'
import {
useHead as head,
useHeadSafe as headSafe,
useSeoMeta as seoMeta,
useServerHead as serverHead,
useServerHeadSafe as serverHeadSafe,
useServerSeoMeta as serverSeoMeta,
} from '@unhead/vue'
import type { UseScriptInput, UseScriptOptions, UseScriptReturn } from '@unhead/vue/legacy'
import {
injectHead as inject,
useScript as script,
} from '@unhead/vue/legacy'
import { tryUseNuxtApp } from '#app'
import type { NuxtApp } from '#app'
export * from '@unhead/vue/legacy'
interface NuxtUseHeadOptions extends UseHeadOptions {
nuxt?: NuxtApp
}
/**
* Injects the head client from the Nuxt context or Vue inject.
*
* In Nuxt v3 this function will not throw an error if the context is missing.
*/
export function injectHead (nuxtApp?: NuxtApp): VueHeadClient<MergeHead> | undefined {
const nuxt = nuxtApp || tryUseNuxtApp()
if (nuxt?.ssrContext?.head) {
return nuxt?.ssrContext?.head
}
if (nuxt) {
return nuxt.runWithContext(inject) as VueHeadClient<MergeHead>
}
// try use Vue inject
return inject()
}
export function useHead<T extends MergeHead> (input: UseHeadInput<T>, options: NuxtUseHeadOptions = {}): ActiveHeadEntry<UseHeadInput<T>> | void {
const unhead = injectHead(options.nuxt)
if (unhead) {
return head(input, { head: unhead, ...options }) as ActiveHeadEntry<UseHeadInput<T>>
}
}
export function useHeadSafe<T extends MergeHead> (input: UseHeadSafeInput, options: NuxtUseHeadOptions = {}): ActiveHeadEntry<UseHeadInput<T>> | void {
const unhead = injectHead(options.nuxt)
if (unhead) {
return headSafe(input, { head: unhead, ...options }) as ActiveHeadEntry<UseHeadInput>
}
}
export function useSeoMeta (input: UseSeoMetaInput, options: NuxtUseHeadOptions = {}): ActiveHeadEntry<UseSeoMetaInput> | void {
const unhead = injectHead(options.nuxt)
if (unhead) {
return seoMeta(input, { head: unhead, ...options }) as ActiveHeadEntry<UseHeadInput>
}
}
export function useServerHead<T extends MergeHead> (input: UseHeadInput<T>, options: NuxtUseHeadOptions = {}): ActiveHeadEntry<UseHeadInput<T>> | void {
const unhead = injectHead(options.nuxt)
if (unhead) {
return serverHead(input, { head: unhead, ...options }) as ActiveHeadEntry<UseHeadInput<T>>
}
}
export function useServerHeadSafe (input: UseHeadSafeInput, options: NuxtUseHeadOptions = {}): ActiveHeadEntry<UseSeoMetaInput> | void {
const unhead = injectHead(options.nuxt)
if (unhead) {
return serverHeadSafe(input, { head: unhead, ...options }) as ActiveHeadEntry<UseHeadInput>
}
}
export function useServerSeoMeta<T extends MergeHead> (input: UseSeoMetaInput, options: NuxtUseHeadOptions = {}): ActiveHeadEntry<UseHeadInput<T>> | void {
const unhead = injectHead(options.nuxt)
if (unhead) {
return serverSeoMeta(input, { head: unhead, ...options }) as ActiveHeadEntry<UseHeadInput>
}
}
/**
* Aliased for users doing `import { useScript } from '@unhead/vue'`
* @deprecated This will be removed in Nuxt v4. Use `useScript` exported from `@unhead/scripts/vue`
*/
export function useScript<T extends Record<symbol | string, any> = Record<symbol | string, any>> (input: UseScriptInput, options?: UseScriptOptions<T> & { nuxt?: NuxtApp }): UseScriptReturn<T> | void {
const unhead = injectHead(options?.nuxt)
// TODO not sure
// @ts-expect-error untyped
return script(input, { head: unhead, ...options })
}

View File

@ -0,0 +1,58 @@
import type { ActiveHeadEntry, MergeHead } from '@unhead/schema'
import type { UseHeadInput, UseHeadOptions, UseHeadSafeInput, UseSeoMetaInput, VueHeadClient } from '@unhead/vue'
import { useHead as head, useHeadSafe as headSafe, injectHead as inject, useSeoMeta as seoMeta, useServerHead as serverHead, useServerHeadSafe as serverHeadSafe, useServerSeoMeta as serverSeoMeta } from '@unhead/vue'
import type { NuxtApp } from 'nuxt/app'
import { useNuxtApp } from 'nuxt/app'
export * from '@unhead/vue'
interface NuxtUseHeadOptions extends UseHeadOptions {
nuxt?: NuxtApp
}
/**
* Injects the head client from the Nuxt context or Vue inject.
*
* In Nuxt v3 this function will not throw an error if the context is missing.
*/
export function injectHead (nuxtApp?: NuxtApp): VueHeadClient<MergeHead> {
const nuxt = nuxtApp || useNuxtApp()
if (nuxt?.ssrContext?.head) {
return nuxt?.ssrContext?.head
}
if (nuxt) {
return nuxt.runWithContext(inject) as VueHeadClient<MergeHead>
}
// try use Vue inject
return inject()
}
export function useHead<T extends MergeHead> (input: UseHeadInput<T>, options: NuxtUseHeadOptions = {}): ActiveHeadEntry<UseHeadInput<T>> | void {
const unhead = injectHead(options.nuxt)
return head(input, { head: unhead, ...options }) as ActiveHeadEntry<UseHeadInput<T>>
}
export function useHeadSafe<T extends MergeHead> (input: UseHeadSafeInput, options: NuxtUseHeadOptions = {}): ActiveHeadEntry<UseHeadInput<T>> | void {
const unhead = injectHead(options.nuxt)
return headSafe(input, { head: unhead, ...options }) as ActiveHeadEntry<UseHeadInput>
}
export function useSeoMeta (input: UseSeoMetaInput, options: NuxtUseHeadOptions = {}): ActiveHeadEntry<UseSeoMetaInput> | void {
const unhead = injectHead(options.nuxt)
return seoMeta(input, { head: unhead, ...options }) as ActiveHeadEntry<UseHeadInput>
}
export function useServerHead<T extends MergeHead> (input: UseHeadInput<T>, options: NuxtUseHeadOptions = {}): ActiveHeadEntry<UseHeadInput<T>> | void {
const unhead = injectHead(options.nuxt)
return serverHead(input, { head: unhead, ...options }) as ActiveHeadEntry<UseHeadInput<T>>
}
export function useServerHeadSafe (input: UseHeadSafeInput, options: NuxtUseHeadOptions = {}): ActiveHeadEntry<UseSeoMetaInput> | void {
const unhead = injectHead(options.nuxt)
return serverHeadSafe(input, { head: unhead, ...options }) as ActiveHeadEntry<UseHeadInput>
}
export function useServerSeoMeta<T extends MergeHead> (input: UseSeoMetaInput, options: NuxtUseHeadOptions = {}): ActiveHeadEntry<UseHeadInput<T>> | void {
const unhead = injectHead(options.nuxt)
return serverSeoMeta(input, { head: unhead, ...options }) as ActiveHeadEntry<UseHeadInput>
}

View File

@ -11,9 +11,9 @@ overrides:
'@nuxt/vite-builder': workspace:* '@nuxt/vite-builder': workspace:*
'@nuxt/webpack-builder': workspace:* '@nuxt/webpack-builder': workspace:*
'@types/node': 22.10.5 '@types/node': 22.10.5
'@unhead/schema': 2.0.0-alpha.2 '@unhead/schema': 2.0.0-alpha.3
'@unhead/vue': 2.0.0-alpha.2 '@unhead/vue': 2.0.0-alpha.3
'@unhead/shared': 2.0.0-alpha.2 '@unhead/shared': 2.0.0-alpha.3
'@vue/compiler-core': 3.5.13 '@vue/compiler-core': 3.5.13
'@vue/compiler-dom': 3.5.13 '@vue/compiler-dom': 3.5.13
'@vue/shared': 3.5.13 '@vue/shared': 3.5.13
@ -70,11 +70,11 @@ importers:
specifier: 7.5.8 specifier: 7.5.8
version: 7.5.8 version: 7.5.8
'@unhead/schema': '@unhead/schema':
specifier: 2.0.0-alpha.2 specifier: 2.0.0-alpha.3
version: 2.0.0-alpha.2 version: 2.0.0-alpha.3
'@unhead/vue': '@unhead/vue':
specifier: 2.0.0-alpha.2 specifier: 2.0.0-alpha.3
version: 2.0.0-alpha.2(vue@3.5.13(typescript@5.7.3)) version: 2.0.0-alpha.3(vue@3.5.13(typescript@5.7.3))
'@vitest/coverage-v8': '@vitest/coverage-v8':
specifier: 2.1.8 specifier: 2.1.8
version: 2.1.8(vitest@2.1.8(@types/node@22.10.5)(happy-dom@16.5.3)(jiti@2.4.2)(sass@1.78.0)(terser@5.32.0)(tsx@4.19.2)(yaml@2.6.1)) version: 2.1.8(vitest@2.1.8(@types/node@22.10.5)(happy-dom@16.5.3)(jiti@2.4.2)(sass@1.78.0)(terser@5.32.0)(tsx@4.19.2)(yaml@2.6.1))
@ -305,8 +305,8 @@ importers:
specifier: 22.10.5 specifier: 22.10.5
version: 22.10.5 version: 22.10.5
'@unhead/vue': '@unhead/vue':
specifier: 2.0.0-alpha.2 specifier: 2.0.0-alpha.3
version: 2.0.0-alpha.2(vue@3.5.13(typescript@5.7.3)) version: 2.0.0-alpha.3(vue@3.5.13(typescript@5.7.3))
'@vue/shared': '@vue/shared':
specifier: 3.5.13 specifier: 3.5.13
version: 3.5.13 version: 3.5.13
@ -650,8 +650,8 @@ importers:
specifier: 2.0.10 specifier: 2.0.10
version: 2.0.10 version: 2.0.10
'@unhead/schema': '@unhead/schema':
specifier: 2.0.0-alpha.2 specifier: 2.0.0-alpha.3
version: 2.0.0-alpha.2 version: 2.0.0-alpha.3
'@vitejs/plugin-vue': '@vitejs/plugin-vue':
specifier: 5.2.1 specifier: 5.2.1
version: 5.2.1(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.2)(sass@1.78.0)(terser@5.32.0)(tsx@4.19.2)(yaml@2.6.1))(vue@3.5.13(typescript@5.7.3)) version: 5.2.1(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.2)(sass@1.78.0)(terser@5.32.0)(tsx@4.19.2)(yaml@2.6.1))(vue@3.5.13(typescript@5.7.3))
@ -2792,14 +2792,14 @@ packages:
'@ungap/structured-clone@1.2.0': '@ungap/structured-clone@1.2.0':
resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==}
'@unhead/schema@2.0.0-alpha.2': '@unhead/schema@2.0.0-alpha.3':
resolution: {integrity: sha512-Zuo0kqx2jnmxXDefsGEblTwSSXVenYDkMJ5H17lFTyxTIPnscISpvBSEFlPyCit7oTZXQ69wo4URhKiIXOZRyg==} resolution: {integrity: sha512-Q9xkdjtBNH0gBp0IzX2FIjRFencMlhQwZgm6L9HtPDtM1UEsOsHZq4f/EsaUyJj82py3aJrbVe6rQfTs1gPTjw==}
'@unhead/shared@2.0.0-alpha.2': '@unhead/shared@2.0.0-alpha.3':
resolution: {integrity: sha512-7hJpzfmnb9md6R3q5oxpX7bPdmTRbXsyaqHJzwaSrm9Q4+1J8wm0o36lwncQ0ssZfYxXynzrLkgY7sqCTSoGjA==} resolution: {integrity: sha512-fiqKptv3VrjVASoMGMsLyKAFiVPyArPPr6VXDkhAPVlu1twvs58AhuWF6GJaJr2XJCnamPBj88rUVFO0x4E/9g==}
'@unhead/vue@2.0.0-alpha.2': '@unhead/vue@2.0.0-alpha.3':
resolution: {integrity: sha512-ieMix+zVKp+8grIkokWHgeakS+GSK1NtDs40iC072XVYbtw+5qCKA0Vmkelp31NTH/XRbVHtIqlvbzNCWKT24w==} resolution: {integrity: sha512-EpjNAykZ9XffZEPXxWp7iMAKrIordKjDfliaY8Wlz2fbsqbHnucTfTEvmJE+niFpA3pvjxJOd/atAME6MuYzbw==}
peerDependencies: peerDependencies:
vue: 3.5.13 vue: 3.5.13
@ -8982,7 +8982,7 @@ snapshots:
'@types/google.maps': 3.58.1 '@types/google.maps': 3.58.1
'@types/vimeo__player': 2.18.3 '@types/vimeo__player': 2.18.3
'@types/youtube': 0.1.0 '@types/youtube': 0.1.0
'@unhead/vue': 2.0.0-alpha.2(vue@3.5.13(typescript@5.7.3)) '@unhead/vue': 2.0.0-alpha.3(vue@3.5.13(typescript@5.7.3))
'@vueuse/core': 11.1.0(vue@3.5.13(typescript@5.7.3)) '@vueuse/core': 11.1.0(vue@3.5.13(typescript@5.7.3))
consola: 3.4.0 consola: 3.4.0
defu: 6.1.4 defu: 6.1.4
@ -9915,20 +9915,20 @@ snapshots:
'@ungap/structured-clone@1.2.0': {} '@ungap/structured-clone@1.2.0': {}
'@unhead/schema@2.0.0-alpha.2': '@unhead/schema@2.0.0-alpha.3':
dependencies: dependencies:
hookable: 5.5.3 hookable: 5.5.3
zhead: 2.2.4 zhead: 2.2.4
'@unhead/shared@2.0.0-alpha.2': '@unhead/shared@2.0.0-alpha.3':
dependencies: dependencies:
'@unhead/schema': 2.0.0-alpha.2 '@unhead/schema': 2.0.0-alpha.3
packrup: 0.1.2 packrup: 0.1.2
'@unhead/vue@2.0.0-alpha.2(vue@3.5.13(typescript@5.7.3))': '@unhead/vue@2.0.0-alpha.3(vue@3.5.13(typescript@5.7.3))':
dependencies: dependencies:
'@unhead/schema': 2.0.0-alpha.2 '@unhead/schema': 2.0.0-alpha.3
'@unhead/shared': 2.0.0-alpha.2 '@unhead/shared': 2.0.0-alpha.3
hookable: 5.5.3 hookable: 5.5.3
unhead: 2.0.0-alpha.2 unhead: 2.0.0-alpha.2
vue: 3.5.13(typescript@5.7.3) vue: 3.5.13(typescript@5.7.3)
@ -15420,8 +15420,8 @@ snapshots:
unhead@2.0.0-alpha.2: unhead@2.0.0-alpha.2:
dependencies: dependencies:
'@unhead/schema': 2.0.0-alpha.2 '@unhead/schema': 2.0.0-alpha.3
'@unhead/shared': 2.0.0-alpha.2 '@unhead/shared': 2.0.0-alpha.3
hookable: 5.5.3 hookable: 5.5.3
unicode-emoji-modifier-base@1.0.0: {} unicode-emoji-modifier-base@1.0.0: {}