docs: improve multi-source handling (#682)

This commit is contained in:
Benjamin Canac
2023-09-15 14:37:53 +02:00
committed by GitHub
parent 81463cd21d
commit 8ec23c042d
10 changed files with 128 additions and 201 deletions

View File

@@ -10,7 +10,7 @@
<Footer /> <Footer />
<ClientOnly> <ClientOnly>
<LazyUDocsSearch ref="searchRef" :files="files" :navigation="navigation" /> <LazyUDocsSearch ref="searchRef" :files="files" :navigation="navigation" :groups="groups" />
</ClientOnly> </ClientOnly>
<UNotifications> <UNotifications>
@@ -28,29 +28,32 @@
<script setup lang="ts"> <script setup lang="ts">
import { withoutTrailingSlash } from 'ufo' import { withoutTrailingSlash } from 'ufo'
import { debounce } from 'perfect-debounce' import { debounce } from 'perfect-debounce'
import type { ParsedContent } from '@nuxt/content/dist/runtime/types'
const searchRef = ref() const searchRef = ref()
const route = useRoute() const route = useRoute()
const colorMode = useColorMode() const colorMode = useColorMode()
const { prefix, removePrefixFromNavigation, removePrefixFromFiles } = useContentSource() const { branch, branches } = useContentSource()
const { data: nav } = await useAsyncData('navigation', () => fetchContentNavigation()) const { data: nav } = await useAsyncData('navigation', () => fetchContentNavigation())
const { data: files } = useLazyFetch<ParsedContent[]>('/api/search.json', { default: () => [], server: false })
const { data: search } = useLazyFetch('/api/search.json', { default: () => [], server: false })
// Computed // Computed
const navigation = computed(() => { const navigation = computed(() => {
const navigation = nav.value.find(link => link._path === prefix.value)?.children || [] const main = nav.value.filter(item => item._path !== '/dev')
const dev = nav.value.find(item => item._path === '/dev')?.children
return prefix.value === '/main' ? removePrefixFromNavigation(navigation) : navigation return branch.value?.name === 'dev' ? dev : main
}) })
const files = computed(() => { const groups = computed(() => {
const files = search.value.filter(file => file._path.startsWith(prefix.value)) if (route.path === '/') {
return []
}
return prefix.value === '/main' ? removePrefixFromFiles(files) : files return [{ key: 'branch', label: 'Branch', commands: branches.value }]
}) })
const color = computed(() => colorMode.value === 'dark' ? '#18181b' : 'white') const color = computed(() => colorMode.value === 'dark' ? '#18181b' : 'white')

View File

@@ -10,7 +10,7 @@
color="gray" color="gray"
:ui="{ icon: { trailing: { padding: { sm: 'pe-1.5' } } } }" :ui="{ icon: { trailing: { padding: { sm: 'pe-1.5' } } } }"
:ui-menu="{ option: { container: 'gap-1.5' } }" :ui-menu="{ option: { container: 'gap-1.5' } }"
@update:model-value="selectBranch" @update:model-value="select"
> >
<template #label> <template #label>
<UIcon v-if="branch.icon" :name="branch.icon" class="w-4 h-4 flex-shrink-0 text-gray-600 dark:text-gray-300" /> <UIcon v-if="branch.icon" :name="branch.icon" class="w-4 h-4 flex-shrink-0 text-gray-600 dark:text-gray-300" />
@@ -32,19 +32,5 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
const route = useRoute() const { branches, branch, select } = useContentSource()
const router = useRouter()
const { branches, branch } = useContentSource()
function selectBranch (branch) {
if (branch.name === 'dev') {
if (route.path.startsWith('/dev')) {
return
}
router.push(`/dev${route.path}`)
} else {
router.push(route.path.replace('/dev', ''))
}
}
</script> </script>

View File

@@ -19,7 +19,7 @@
<UDocsSearchButton icon-only /> <UDocsSearchButton icon-only />
</UTooltip> </UTooltip>
<UColorModeButton v-if="!$colorMode.forced" /> <UColorModeButton />
<USocialButton to="https://github.com/nuxt/ui" target="_blank" icon="i-simple-icons-github" aria-label="GitHub" class="hidden lg:inline-flex" /> <USocialButton to="https://github.com/nuxt/ui" target="_blank" icon="i-simple-icons-github" aria-label="GitHub" class="hidden lg:inline-flex" />
</template> </template>

View File

@@ -1,57 +1,43 @@
import type { NavItem, ParsedContent } from '@nuxt/content/dist/runtime/types'
export const useContentSource = () => { export const useContentSource = () => {
const route = useRoute() const route = useRoute()
const router = useRouter()
const config = useRuntimeConfig().public const config = useRuntimeConfig().public
const branches = [{ const branches = computed(() => [{
id: 'dev',
name: 'dev', name: 'dev',
icon: 'i-heroicons-cube', icon: 'i-heroicons-cube',
suffix: 'dev', suffix: 'dev',
label: 'Edge' label: 'Edge',
disabled: route.path.startsWith('/dev'),
click: () => select({ name: 'dev' })
}, { }, {
id: 'main',
name: 'main', name: 'main',
icon: 'i-heroicons-cube', icon: 'i-heroicons-cube',
suffix: 'latest', suffix: 'latest',
label: `v${config.version}` label: `v${config.version}`,
}] disabled: !route.path.startsWith('/dev'),
click: () => select({ name: 'main' })
}])
const branch = computed(() => branches.find(b => b.name === (route.path.startsWith('/dev') ? 'dev' : 'main'))) const branch = computed(() => branches.value.find(b => b.name === (route.path.startsWith('/dev') ? 'dev' : 'main')))
const prefix = computed(() => `/${branch.value.name}`) function select (branch) {
if (branch.name === 'dev') {
function removePrefixFromNavigation (navigation: NavItem[]): NavItem[] { if (route.path.startsWith('/dev')) {
return navigation.map((link) => {
const { _path, children, ...rest } = link
return {
...rest,
_path: route.path.startsWith(prefix.value) ? _path : _path.replace(new RegExp(`^${prefix.value}`, 'g'), ''),
children: children?.length ? removePrefixFromNavigation(children) : undefined
}
})
}
function removePrefixFromFiles (files: ParsedContent[]) {
return files.map((file) => {
if (!file) {
return return
} }
const { _path, ...rest } = file router.push(`/dev${route.path}`)
} else {
return { router.push(route.path.replace('/dev', ''))
...rest, }
_path: route.path.startsWith(prefix.value) ? _path : _path.replace(new RegExp(`^${prefix.value}`, 'g'), '')
}
})
} }
return { return {
branches, branches,
branch, branch,
prefix, select
removePrefixFromNavigation,
removePrefixFromFiles
} }
} }

View File

@@ -11,7 +11,7 @@
</UContainer> </UContainer>
<ClientOnly> <ClientOnly>
<UDocsSearch :files="files" :navigation="navigation" /> <LazyUDocsSearch :files="files" :navigation="navigation" />
</ClientOnly> </ClientOnly>
<UNotifications /> <UNotifications />
@@ -20,8 +20,7 @@
<script setup lang="ts"> <script setup lang="ts">
import type { NuxtError } from '#app' import type { NuxtError } from '#app'
import type { ParsedContent } from '@nuxt/content/dist/runtime/types'
const { prefix, removePrefixFromNavigation, removePrefixFromFiles } = useContentSource()
useSeoMeta({ useSeoMeta({
title: 'Page not found', title: 'Page not found',
@@ -32,22 +31,18 @@ defineProps<{
error: NuxtError error: NuxtError
}>() }>()
const { data: navigation } = await useLazyAsyncData('navigation', () => fetchContentNavigation(), { const { branch } = useContentSource()
default: () => [],
transform: (navigation) => {
navigation = navigation.find(link => link._path === prefix.value)?.children || []
return prefix.value === '/main' ? removePrefixFromNavigation(navigation) : navigation const { data: nav } = await useAsyncData('navigation', () => fetchContentNavigation())
} const { data: files } = useLazyFetch<ParsedContent[]>('/api/search.json', { default: () => [], server: false })
})
const { data: files } = await useLazyAsyncData('files', () => queryContent().where({ _type: 'markdown', navigation: { $ne: false } }).find(), { // Computed
default: () => [],
transform: (files) => {
files = files.filter(file => file._path.startsWith(prefix.value))
return prefix.value === '/main' ? removePrefixFromFiles(files) : files const navigation = computed(() => {
} const main = nav.value.filter(item => item._path !== '/dev')
const dev = nav.value.find(item => item._path === '/dev')?.children
return branch.value?.name === 'dev' ? dev : main
}) })
// Provide // Provide

View File

@@ -32,14 +32,13 @@ export default defineNuxtConfig({
}, },
content: { content: {
sources: { sources: {
// overwrite default source AKA `content` directory dev: {
content: {
prefix: '/dev', prefix: '/dev',
driver: 'fs', driver: 'fs',
base: resolve('./content') base: resolve('./content')
}, },
main: { // overwrite default source AKA `content` directory
prefix: '/main', content: {
driver: 'github', driver: 'github',
repo: 'nuxt/ui', repo: 'nuxt/ui',
branch: 'main', branch: 'main',

View File

@@ -7,10 +7,10 @@
"devDependencies": { "devDependencies": {
"@iconify-json/heroicons": "latest", "@iconify-json/heroicons": "latest",
"@iconify-json/simple-icons": "latest", "@iconify-json/simple-icons": "latest",
"@nuxt/content": "^2.8.2", "@nuxt/content": "npm:@nuxt/content-edge@2.8.2-28246249.76260da",
"@nuxt/devtools": "^0.8.3", "@nuxt/devtools": "^0.8.3",
"@nuxt/eslint-config": "^0.2.0", "@nuxt/eslint-config": "^0.2.0",
"@nuxthq/elements": "npm:@nuxthq/elements-edge@0.0.1-28245159.d523b38", "@nuxthq/elements": "npm:@nuxthq/elements-edge@0.0.1-28246224.5395dca",
"@nuxthq/studio": "^0.14.1", "@nuxthq/studio": "^0.14.1",
"@nuxtjs/fontaine": "^0.4.1", "@nuxtjs/fontaine": "^0.4.1",
"@nuxtjs/google-fonts": "^3.0.2", "@nuxtjs/google-fonts": "^3.0.2",
@@ -24,6 +24,7 @@
"typescript": "^5.2.2", "typescript": "^5.2.2",
"ufo": "^1.3.0", "ufo": "^1.3.0",
"v-calendar": "^3.0.3", "v-calendar": "^3.0.3",
"valibot": "^0.15.0",
"yup": "^1.2.0", "yup": "^1.2.0",
"zod": "^3.22.2" "zod": "^3.22.2"
} }

View File

@@ -7,7 +7,7 @@
<UDivider v-if="surround?.length" /> <UDivider v-if="surround?.length" />
<UDocsSurround :surround="removePrefixFromFiles(surround)" /> <UDocsSurround :surround="(surround as ParsedContent[])" />
</UPageBody> </UPageBody>
<template v-if="page.body?.toc?.links?.length" #right> <template v-if="page.body?.toc?.links?.length" #right>
@@ -25,25 +25,35 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { withoutTrailingSlash } from 'ufo'
import type { ParsedContent } from '@nuxt/content/dist/runtime/types'
const route = useRoute() const route = useRoute()
const { prefix, removePrefixFromFiles } = useContentSource() const { branch } = useContentSource()
const { findPageHeadline } = useElementsHelpers() const { findPageHeadline } = useElementsHelpers()
definePageMeta({ definePageMeta({
layout: 'docs' layout: 'docs'
}) })
const path = computed(() => route.path.startsWith(prefix.value) ? route.path : `${prefix.value}${route.path}`) const { data: page } = await useAsyncData(route.path, () => queryContent(route.path).findOne())
const { data: page } = await useAsyncData(path.value, () => queryContent(path.value).findOne())
if (!page.value) { if (!page.value) {
throw createError({ statusCode: 404, statusMessage: 'Page not found' }) throw createError({ statusCode: 404, statusMessage: 'Page not found' })
} }
const { data: surround } = await useAsyncData(`${path.value}-surround`, () => { const { data: surround } = await useAsyncData(`${route.path}-surround`, () => {
return queryContent(prefix.value) return queryContent()
.where({ _extension: 'md', navigation: { $ne: false } }) .where({
.findSurround((path.value.endsWith('/') ? path.value.slice(0, -1) : path.value)) _extension: 'md',
_path: {
[branch.value?.name === 'dev' ? '$eq' : '$ne']: new RegExp('^/dev')
},
navigation: {
$ne: false
}
})
.only(['title', 'description', '_path'])
.findSurround(withoutTrailingSlash(route.path))
}) })
useSeoMeta({ useSeoMeta({

View File

@@ -2,12 +2,12 @@ import type { Config } from 'tailwindcss'
import defaultTheme from 'tailwindcss/defaultTheme' import defaultTheme from 'tailwindcss/defaultTheme'
export default <Partial<Config>>{ export default <Partial<Config>>{
content: { // content: {
files: [ // files: [
'./docs/content/**/*.md', // './docs/content/**/*.md',
'./docs/content/**/*.yml' // './docs/content/**/*.yml'
] // ]
}, // },
theme: { theme: {
extend: { extend: {
fontFamily: { fontFamily: {

155
pnpm-lock.yaml generated
View File

@@ -79,7 +79,7 @@ importers:
version: 0.2.0(eslint@8.49.0) version: 0.2.0(eslint@8.49.0)
'@nuxt/module-builder': '@nuxt/module-builder':
specifier: ^0.5.1 specifier: ^0.5.1
version: 0.5.1(@nuxt/kit@3.7.3)(nuxi@3.7.3)(typescript@5.2.2) version: 0.5.1(@nuxt/kit@3.7.3)(nuxi@3.8.4)(typescript@5.2.2)
'@release-it/conventional-changelog': '@release-it/conventional-changelog':
specifier: ^7.0.1 specifier: ^7.0.1
version: 7.0.1(release-it@16.1.5) version: 7.0.1(release-it@16.1.5)
@@ -127,8 +127,8 @@ importers:
specifier: latest specifier: latest
version: 1.1.70 version: 1.1.70
'@nuxt/content': '@nuxt/content':
specifier: ^2.8.2 specifier: npm:@nuxt/content-edge@2.8.2-28246249.76260da
version: 2.8.2(rollup@3.28.1)(vue@3.3.4) version: /@nuxt/content-edge@2.8.2-28246249.76260da(rollup@3.28.1)(vue@3.3.4)
'@nuxt/devtools': '@nuxt/devtools':
specifier: ^0.8.3 specifier: ^0.8.3
version: 0.8.3(nuxt@3.7.3)(rollup@3.28.1)(vite@4.4.9) version: 0.8.3(nuxt@3.7.3)(rollup@3.28.1)(vite@4.4.9)
@@ -136,8 +136,8 @@ importers:
specifier: ^0.2.0 specifier: ^0.2.0
version: 0.2.0(eslint@8.49.0) version: 0.2.0(eslint@8.49.0)
'@nuxthq/elements': '@nuxthq/elements':
specifier: npm:@nuxthq/elements-edge@0.0.1-28245159.d523b38 specifier: npm:@nuxthq/elements-edge@0.0.1-28246224.5395dca
version: /@nuxthq/elements-edge@0.0.1-28245159.d523b38(rollup@3.28.1)(vue@3.3.4)(webpack@5.88.2) version: /@nuxthq/elements-edge@0.0.1-28246224.5395dca(rollup@3.28.1)(vue@3.3.4)(webpack@5.88.2)
'@nuxthq/studio': '@nuxthq/studio':
specifier: ^0.14.1 specifier: ^0.14.1
version: 0.14.1(rollup@3.28.1) version: 0.14.1(rollup@3.28.1)
@@ -177,6 +177,9 @@ importers:
v-calendar: v-calendar:
specifier: ^3.0.3 specifier: ^3.0.3
version: 3.0.3(@popperjs/core@2.11.8)(vue@3.3.4) version: 3.0.3(@popperjs/core@2.11.8)(vue@3.3.4)
valibot:
specifier: ^0.15.0
version: 0.15.0
yup: yup:
specifier: ^1.2.0 specifier: ^1.2.0
version: 1.2.0 version: 1.2.0
@@ -1289,21 +1292,23 @@ packages:
- supports-color - supports-color
dev: true dev: true
/@nuxt/content@2.8.2(rollup@3.28.1)(vue@3.3.4): /@nuxt/content-edge@2.8.2-28246249.76260da(rollup@3.28.1)(vue@3.3.4):
resolution: {integrity: sha512-fi5/axuYNGccJ/dXyaf5C/WqgEd5wSijpGHZ9O+pH7754S2NeKyx8fUFGfXsLN9VyJP+Mx8EUihfWKJm09SCRA==} resolution: {integrity: sha512-gO4tECJf/oYh/DPB94S2gPbUOJ0cM1RxKO2AUbAcJD5HMOh43iP9MrHdgwXvsAGtjIJLDiOX8KVXUAqFikegPA==}
dependencies: dependencies:
'@nuxt/kit': 3.7.1(rollup@3.28.1) '@nuxt/kit': 3.7.3(rollup@3.28.1)
'@nuxtjs/mdc': 0.1.6(rollup@3.28.1) '@nuxtjs/mdc': 0.1.6(rollup@3.28.1)
'@vueuse/head': 1.3.1(vue@3.3.4) '@vueuse/head': 2.0.0(vue@3.3.4)
consola: 3.2.3 consola: 3.2.3
defu: 6.1.2 defu: 6.1.2
destr: 2.0.1 destr: 2.0.1
json5: 2.2.3 json5: 2.2.3
knitwork: 1.0.0 knitwork: 1.0.0
listhen: 1.4.4 listhen: 1.5.3
mdast-util-to-string: 4.0.0
mdurl: 1.0.1 mdurl: 1.0.1
micromark: 4.0.0 micromark: 4.0.0
micromark-util-sanitize-uri: 2.0.0 micromark-util-sanitize-uri: 2.0.0
micromark-util-types: 2.0.0
ohash: 1.1.3 ohash: 1.1.3
pathe: 1.1.1 pathe: 1.1.1
scule: 1.0.0 scule: 1.0.0
@@ -1311,8 +1316,9 @@ packages:
slugify: 1.6.6 slugify: 1.6.6
socket.io-client: 4.7.2 socket.io-client: 4.7.2
ufo: 1.3.0 ufo: 1.3.0
unist-util-stringify-position: 4.0.0
unstorage: 1.9.0 unstorage: 1.9.0
ws: 8.13.0 ws: 8.14.1
transitivePeerDependencies: transitivePeerDependencies:
- '@azure/app-configuration' - '@azure/app-configuration'
- '@azure/cosmos' - '@azure/cosmos'
@@ -1520,7 +1526,7 @@ packages:
- rollup - rollup
- supports-color - supports-color
/@nuxt/module-builder@0.5.1(@nuxt/kit@3.7.3)(nuxi@3.7.3)(typescript@5.2.2): /@nuxt/module-builder@0.5.1(@nuxt/kit@3.7.3)(nuxi@3.8.4)(typescript@5.2.2):
resolution: {integrity: sha512-O39UrOFbNgL27urwDqeMgXeYiNIUvp73nsmtt7jm9JDcMVIWykuUzyBPYtHif7gq5ElzIjjmDw9zdRGgyMzo+w==} resolution: {integrity: sha512-O39UrOFbNgL27urwDqeMgXeYiNIUvp73nsmtt7jm9JDcMVIWykuUzyBPYtHif7gq5ElzIjjmDw9zdRGgyMzo+w==}
hasBin: true hasBin: true
peerDependencies: peerDependencies:
@@ -1531,7 +1537,7 @@ packages:
consola: 3.2.3 consola: 3.2.3
mlly: 1.4.2 mlly: 1.4.2
mri: 1.2.0 mri: 1.2.0
nuxi: 3.7.3 nuxi: 3.8.4
pathe: 1.1.1 pathe: 1.1.1
unbuild: 2.0.0(typescript@5.2.2) unbuild: 2.0.0(typescript@5.2.2)
transitivePeerDependencies: transitivePeerDependencies:
@@ -1747,8 +1753,8 @@ packages:
- vue-tsc - vue-tsc
dev: true dev: true
/@nuxthq/elements-edge@0.0.1-28245159.d523b38(rollup@3.28.1)(vue@3.3.4)(webpack@5.88.2): /@nuxthq/elements-edge@0.0.1-28246224.5395dca(rollup@3.28.1)(vue@3.3.4)(webpack@5.88.2):
resolution: {integrity: sha512-/A7GmZClyhbGeckwB4aPYtkoLDLHS4+jkyF/zM53jFHqLGziNrAvnog10zFgr3XSIdXfTuUE6qA/3bLjV/WhEw==} resolution: {integrity: sha512-GOuFqa5QDAnTyXW2SJff0XT/cjTZNdepkMkdodZTduCKZy4/ZzNzXRQd6vOr/Knj3arMOc9VRKBe/ZeA89gE+Q==}
dependencies: dependencies:
'@nuxt/ui': 2.8.1(rollup@3.28.1)(vue@3.3.4)(webpack@5.88.2) '@nuxt/ui': 2.8.1(rollup@3.28.1)(vue@3.3.4)(webpack@5.88.2)
'@vueuse/core': 10.4.1(vue@3.3.4) '@vueuse/core': 10.4.1(vue@3.3.4)
@@ -2985,13 +2991,6 @@ packages:
resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==}
dev: true dev: true
/@unhead/dom@1.5.3:
resolution: {integrity: sha512-0a9aO34lzy40jT3DycpyaQCMbksveKajkhEACxcs2VdG04tndRK0s3UzdvJFV8nnTfRZAI+y3yEIjTLWswgFWQ==}
dependencies:
'@unhead/schema': 1.5.3
'@unhead/shared': 1.5.3
dev: true
/@unhead/dom@1.7.3: /@unhead/dom@1.7.3:
resolution: {integrity: sha512-igJ2ZxU5x4CQQQ3iM+CPOPHdjpam/Q89xIvDSE0crK11TU00WOl0bWl1yQp/EI0pyza1G3ZQ1JyDmi7OcCM9eQ==} resolution: {integrity: sha512-igJ2ZxU5x4CQQQ3iM+CPOPHdjpam/Q89xIvDSE0crK11TU00WOl0bWl1yQp/EI0pyza1G3ZQ1JyDmi7OcCM9eQ==}
dependencies: dependencies:
@@ -2999,13 +2998,6 @@ packages:
'@unhead/shared': 1.7.3 '@unhead/shared': 1.7.3
dev: true dev: true
/@unhead/schema@1.5.3:
resolution: {integrity: sha512-UpvxfEn+2CJAO6Ytr/Mnps67/zm4ezWjP5JrisjTx8NqWQtIsuvkdp81GpTGVYGHuaPe9c/SqtlsL9aL9oUv8Q==}
dependencies:
hookable: 5.5.3
zhead: 2.0.10
dev: true
/@unhead/schema@1.7.3: /@unhead/schema@1.7.3:
resolution: {integrity: sha512-w2Yvt1++bAnSmsYc7bwLTMalSbff6HFnNmlpFIjNUTSkquOg+oavm62TrgxAwq753dedDOzCXr5cUvzCswc2Yg==} resolution: {integrity: sha512-w2Yvt1++bAnSmsYc7bwLTMalSbff6HFnNmlpFIjNUTSkquOg+oavm62TrgxAwq753dedDOzCXr5cUvzCswc2Yg==}
dependencies: dependencies:
@@ -3013,25 +3005,12 @@ packages:
zhead: 2.1.1 zhead: 2.1.1
dev: true dev: true
/@unhead/shared@1.5.3:
resolution: {integrity: sha512-JMRHlOmKTOlC949u3LTZIObwB9vRPLwLqbI5SRp9Cb1hheizTaHHsj7R7UfYpXzrbfNrx6wvnOosb5RF6Urikw==}
dependencies:
'@unhead/schema': 1.5.3
dev: true
/@unhead/shared@1.7.3: /@unhead/shared@1.7.3:
resolution: {integrity: sha512-eqAn3n+T6WMecDUzdqGyedpZwT0u04pZwHEvD0bxmVen1FU6VHiL49azyv1W7MCiCHNFNAcR1py2Eolsr6+E7g==} resolution: {integrity: sha512-eqAn3n+T6WMecDUzdqGyedpZwT0u04pZwHEvD0bxmVen1FU6VHiL49azyv1W7MCiCHNFNAcR1py2Eolsr6+E7g==}
dependencies: dependencies:
'@unhead/schema': 1.7.3 '@unhead/schema': 1.7.3
dev: true dev: true
/@unhead/ssr@1.5.3:
resolution: {integrity: sha512-zgSQzh33Q/1wtTM15hEYwkWVxJA8ENt++bM6acjQvx8vdaDTgNlD6ZokRBmKDvZ0dj9rNZDmQD34IFsJhuaW+A==}
dependencies:
'@unhead/schema': 1.5.3
'@unhead/shared': 1.5.3
dev: true
/@unhead/ssr@1.7.3: /@unhead/ssr@1.7.3:
resolution: {integrity: sha512-icN3OmrbuXd0NbqarGRa3ixeqdpQzhldTzcN3LPHpmfgN+CFVS7kI9oo5znoIjW7nZaxAUH95knyAi1+Mt6ThQ==} resolution: {integrity: sha512-icN3OmrbuXd0NbqarGRa3ixeqdpQzhldTzcN3LPHpmfgN+CFVS7kI9oo5znoIjW7nZaxAUH95knyAi1+Mt6ThQ==}
dependencies: dependencies:
@@ -3039,18 +3018,6 @@ packages:
'@unhead/shared': 1.7.3 '@unhead/shared': 1.7.3
dev: true dev: true
/@unhead/vue@1.5.3(vue@3.3.4):
resolution: {integrity: sha512-9xo7/ArTE+sunIK5RomfQWOPJYw3Vbvs/aJ1/vzaSQandqrgzSX8THiaZ+ZveefdJUqBXlq8tuTIf9ggzrW5Ww==}
peerDependencies:
vue: '>=2.7 || >=3'
dependencies:
'@unhead/schema': 1.5.3
'@unhead/shared': 1.5.3
hookable: 5.5.3
unhead: 1.5.3
vue: 3.3.4
dev: true
/@unhead/vue@1.7.3(vue@3.3.4): /@unhead/vue@1.7.3(vue@3.3.4):
resolution: {integrity: sha512-QSy2Qsc4IurrRrvpnnNzBWL/g4ecz3eblSVJ41QwqBnaUIRdPaSY8EdobA/NR0rtWzHicV6Fy3nEYXSXSRDELQ==} resolution: {integrity: sha512-QSy2Qsc4IurrRrvpnnNzBWL/g4ecz3eblSVJ41QwqBnaUIRdPaSY8EdobA/NR0rtWzHicV6Fy3nEYXSXSRDELQ==}
peerDependencies: peerDependencies:
@@ -3307,15 +3274,15 @@ packages:
- '@vue/composition-api' - '@vue/composition-api'
- vue - vue
/@vueuse/head@1.3.1(vue@3.3.4): /@vueuse/head@2.0.0(vue@3.3.4):
resolution: {integrity: sha512-XCcHGfDzkGlHS7KIPJVYN//L7jpfASLsN7MUE19ndHVQLnPIDxqFLDl7IROsY81PKzawVAUe4OYVWcGixseWxA==} resolution: {integrity: sha512-ykdOxTGs95xjD4WXE4na/umxZea2Itl0GWBILas+O4oqS7eXIods38INvk3XkJKjqMdWPcpCyLX/DioLQxU1KA==}
peerDependencies: peerDependencies:
vue: '>=2.7 || >=3' vue: '>=2.7 || >=3'
dependencies: dependencies:
'@unhead/dom': 1.5.3 '@unhead/dom': 1.7.3
'@unhead/schema': 1.5.3 '@unhead/schema': 1.7.3
'@unhead/ssr': 1.5.3 '@unhead/ssr': 1.7.3
'@unhead/vue': 1.5.3(vue@3.3.4) '@unhead/vue': 1.7.3(vue@3.3.4)
vue: 3.3.4 vue: 3.3.4
dev: true dev: true
@@ -7323,28 +7290,6 @@ packages:
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
dev: true dev: true
/listhen@1.4.4:
resolution: {integrity: sha512-xoZWbfziou7xPWj9nlFXeroFTJZVIyJ6wKrLea2jxvWgMkcz/vLMoZACYHLRmcLGi5hZkcDF48tmkmv1Y6Y42Q==}
hasBin: true
dependencies:
'@parcel/watcher': 2.3.0
'@parcel/watcher-wasm': 2.3.0
citty: 0.1.3
clipboardy: 3.0.0
consola: 3.2.3
defu: 6.1.2
get-port-please: 3.0.2
h3: 1.8.1
http-shutdown: 1.2.2
jiti: 1.20.0
mlly: 1.4.2
node-forge: 1.3.1
pathe: 1.1.1
ufo: 1.3.0
untun: 0.1.2
uqr: 0.1.2
dev: true
/listhen@1.5.1: /listhen@1.5.1:
resolution: {integrity: sha512-w4gfu76ibnSZBqPCqYORE4ewufHevXe6s39iQhPrOxSl/HzujP9pM9i/oHqzGm2L776djMm5wSE/5kR75RNcbA==} resolution: {integrity: sha512-w4gfu76ibnSZBqPCqYORE4ewufHevXe6s39iQhPrOxSl/HzujP9pM9i/oHqzGm2L776djMm5wSE/5kR75RNcbA==}
hasBin: true hasBin: true
@@ -7367,6 +7312,29 @@ packages:
uqr: 0.1.2 uqr: 0.1.2
dev: true dev: true
/listhen@1.5.3:
resolution: {integrity: sha512-5SitrZRCH4XXHvKSAqwaLURfQ6ZS/BCv+kpPkage5PhSnQPlz5HIVROCEIcMw8YvIF8NhDUAj/HAI/OovJGEpQ==}
hasBin: true
dependencies:
'@parcel/watcher': 2.3.0
'@parcel/watcher-wasm': 2.3.0
citty: 0.1.4
clipboardy: 3.0.0
consola: 3.2.3
defu: 6.1.2
get-port-please: 3.1.1
h3: 1.8.1
http-shutdown: 1.2.2
jiti: 1.20.0
mlly: 1.4.2
node-forge: 1.3.1
pathe: 1.1.1
std-env: 3.4.3
ufo: 1.3.0
untun: 0.1.2
uqr: 0.1.2
dev: true
/loader-runner@4.3.0: /loader-runner@4.3.0:
resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==}
engines: {node: '>=6.11.5'} engines: {node: '>=6.11.5'}
@@ -8849,14 +8817,6 @@ packages:
boolbase: 1.0.0 boolbase: 1.0.0
dev: true dev: true
/nuxi@3.7.3:
resolution: {integrity: sha512-Cg+ygRmhonE6PwAtDeKvKU/0VRqEyzmSSoJYfr0MzwIxQYrBSnLvw0z3UgJl/8MgFKjiZ5Y4wBUEiRsUw8O6uw==}
engines: {node: ^14.18.0 || >=16.10.0}
hasBin: true
optionalDependencies:
fsevents: 2.3.3
dev: true
/nuxi@3.8.4: /nuxi@3.8.4:
resolution: {integrity: sha512-YQAH2msfL1PeaDuk880jQAJdtF1hpuYaTQ7j8Ombl+SyyamcB9VTx0gbkNyZj7wmJQYxfiV6a42nlGQ7cJDO+g==} resolution: {integrity: sha512-YQAH2msfL1PeaDuk880jQAJdtF1hpuYaTQ7j8Ombl+SyyamcB9VTx0gbkNyZj7wmJQYxfiV6a42nlGQ7cJDO+g==}
engines: {node: ^14.18.0 || >=16.10.0} engines: {node: ^14.18.0 || >=16.10.0}
@@ -11668,15 +11628,6 @@ packages:
node-fetch-native: 1.4.0 node-fetch-native: 1.4.0
pathe: 1.1.1 pathe: 1.1.1
/unhead@1.5.3:
resolution: {integrity: sha512-4hkVcX74zs+bv5s6ubIGd/iLgAN4D58u+z2wYbczPwUVFUxKyElTqT+9VjNX3T1SikKbOSl1pFyNKqBc+342lw==}
dependencies:
'@unhead/dom': 1.5.3
'@unhead/schema': 1.5.3
'@unhead/shared': 1.5.3
hookable: 5.5.3
dev: true
/unhead@1.7.3: /unhead@1.7.3:
resolution: {integrity: sha512-6LbBOVgsr+JCmeWH9okxlBtMtFHGIECX93ySWBnposnOqzSUtnUsEgB0nVB8Qa7uozfHlmJfSBJMUeTztzPfSQ==} resolution: {integrity: sha512-6LbBOVgsr+JCmeWH9okxlBtMtFHGIECX93ySWBnposnOqzSUtnUsEgB0nVB8Qa7uozfHlmJfSBJMUeTztzPfSQ==}
dependencies: dependencies:
@@ -11970,7 +11921,7 @@ packages:
destr: 2.0.1 destr: 2.0.1
h3: 1.8.1 h3: 1.8.1
ioredis: 5.3.2 ioredis: 5.3.2
listhen: 1.4.4 listhen: 1.5.1
lru-cache: 10.0.1 lru-cache: 10.0.1
mri: 1.2.0 mri: 1.2.0
node-fetch-native: 1.4.0 node-fetch-native: 1.4.0
@@ -12779,10 +12730,6 @@ packages:
type-fest: 2.19.0 type-fest: 2.19.0
dev: true dev: true
/zhead@2.0.10:
resolution: {integrity: sha512-irug8fXNKjqazkA27cFQs7C6/ZD3qNiEzLC56kDyzQART/Z9GMGfg8h2i6fb9c8ZWnIx/QgOgFJxK3A/CYHG0g==}
dev: true
/zhead@2.1.1: /zhead@2.1.1:
resolution: {integrity: sha512-FRmjAFioi07R+bmL+fqbkXF/pCbC9PwcKQ8RDluC5xTaVbNBgYRQ4eKuS1C8c7Sil//UIxet/AGp7D6royoHhA==} resolution: {integrity: sha512-FRmjAFioi07R+bmL+fqbkXF/pCbC9PwcKQ8RDluC5xTaVbNBgYRQ4eKuS1C8c7Sil//UIxet/AGp7D6royoHhA==}
dev: true dev: true