fix: resolve TypeScript compilation errors for build
- Added pinia dependency (was missing from package.json) - Relocated useMeta.ts from incorrect nested path to correct location - Renamed route-meta.d.ts to route-meta.ts for module augmentation + exports - Fixed RouteMeta imports to use vue-router (augmented interface) - Added isMetaFunction type guard for callable type narrowing - Simplified OG/twitter tags to static strings (crawlers don't send locale headers) - Exported MetaConfig from useI18nMeta.ts - Added robots property to I18nMetaConfig - Fixed union type property access in drupal-meta.ts with Array.isArray guard - Fixed definePage import source (unplugin-vue-router/runtime) - Removed Twitter-specific meta tags (fall back to OG)
This commit is contained in:
parent
90c7e0cddb
commit
661cfc8f2e
10 changed files with 212 additions and 132 deletions
|
|
@ -17,6 +17,7 @@
|
|||
"arktype": "^2.1.29",
|
||||
"axios": "^1.11.0",
|
||||
"bulma": "^1.0.4",
|
||||
"pinia": "^3.0.4",
|
||||
"tailwindcss": "^4.1.6",
|
||||
"vue-i18n": "^11.1.3",
|
||||
"vue-router": "^5.0.4"
|
||||
|
|
|
|||
|
|
@ -2,7 +2,10 @@ import { computed, type ComputedRef, type Ref, unref, watch } from 'vue'
|
|||
import { useRoute } from 'vue-router'
|
||||
import { useMeta, type MetaConfig, type LocaleAwareMeta } from './useMeta'
|
||||
import { useLocale, type LocaleId } from '../i18n'
|
||||
import type { RouteMeta, RouteMetaValue } from '../types/route-meta.d'
|
||||
import type { RouteMeta, RouteMetaValue } from '../types/route-meta'
|
||||
|
||||
// Re-export MetaConfig for consumers
|
||||
export type { MetaConfig }
|
||||
|
||||
/**
|
||||
* Composable for i18n-aware meta tag management
|
||||
|
|
@ -49,7 +52,10 @@ export function useI18nMeta(
|
|||
routeValue: typeof route
|
||||
): T | undefined => {
|
||||
if (value === undefined) return undefined
|
||||
return typeof value === 'function' ? value(routeValue) : value
|
||||
if (typeof value === 'function') {
|
||||
return (value as (route: typeof routeValue) => T)(routeValue)
|
||||
}
|
||||
return value
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -158,11 +164,9 @@ function resolveI18nCustomTags(
|
|||
|
||||
return customTags.map(tag => ({
|
||||
...tag,
|
||||
content: typeof tag.content === 'string' && typeof tag.content === 'object'
|
||||
? resolveI18nContent(tag.content as any, currentLocale) || ''
|
||||
: typeof tag.content === 'function'
|
||||
? tag.content
|
||||
: tag.content
|
||||
content: typeof tag.content === 'function'
|
||||
? tag.content({} as any) // Route not available in this context, use placeholder
|
||||
: tag.content
|
||||
}))
|
||||
}
|
||||
|
||||
|
|
@ -190,6 +194,8 @@ export interface I18nMetaConfig {
|
|||
hreflang?: {
|
||||
[locale: string]: string
|
||||
}
|
||||
/** Robots meta tag value (e.g., 'index, follow', 'noindex') */
|
||||
robots?: string
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -235,7 +235,10 @@ export function useMeta(
|
|||
routeValue: RouteLocationNormalizedLoaded
|
||||
): T | undefined => {
|
||||
if (value === undefined) return undefined
|
||||
return typeof value === 'function' ? value(routeValue) : value
|
||||
if (typeof value === 'function') {
|
||||
return (value as (route: RouteLocationNormalizedLoaded) => T)(routeValue)
|
||||
}
|
||||
return value
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
import { watch, onMounted, onUnmounted, type Ref, computed, unref } from 'vue'
|
||||
import { useRoute } from 'vue-router'
|
||||
import { useMeta } from './useMeta'
|
||||
import type { RouteMeta, RouteMetaValue, isMetaFunction } from '../types/route-meta.d'
|
||||
import type { RouteMeta, RouteMetaValue, isMetaFunction } from '../types/route-meta'
|
||||
|
||||
/**
|
||||
* Composable for automatic meta tag management based on route configuration
|
||||
|
|
@ -37,15 +37,18 @@ import type { RouteMeta, RouteMetaValue, isMetaFunction } from '../types/route-m
|
|||
export function useRouteMeta() {
|
||||
const route = useRoute()
|
||||
|
||||
/**
|
||||
* Resolves a meta value that can be static or a function
|
||||
/**
|
||||
* Resolves a meta value that can be static, reactive, or a function
|
||||
*/
|
||||
const resolveMetaValue = <T>(
|
||||
value: RouteMetaValue<T> | undefined,
|
||||
routeValue: typeof route
|
||||
): T | undefined => {
|
||||
if (value === undefined) return undefined
|
||||
return typeof value === 'function' ? value(routeValue) : value
|
||||
if (typeof value === 'function') {
|
||||
return (value as (route: typeof routeValue) => T)(routeValue)
|
||||
}
|
||||
return value
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -3,9 +3,14 @@
|
|||
*
|
||||
* This file demonstrates how to configure meta tags for various page types
|
||||
* in the Viossa application.
|
||||
*
|
||||
* NOTE: OG and Twitter tags use static strings because social media crawlers
|
||||
* don't send language preferences. For multi-language SEO, use hreflang tags.
|
||||
* Twitter is intentionally omitted - it falls back to Open Graph tags.
|
||||
*/
|
||||
|
||||
import type { MetaConfig, I18nMetaConfig } from '../composables/useI18nMeta'
|
||||
import type { I18nMetaConfig } from '../composables/useI18nMeta'
|
||||
import type { MetaConfig } from '../composables/useMeta'
|
||||
import { createRouteMeta } from '../composables/useMeta'
|
||||
|
||||
/**
|
||||
|
|
@ -28,29 +33,11 @@ export const homePageMeta: I18nMetaConfig = {
|
|||
author: 'Viossa Team',
|
||||
og: {
|
||||
type: 'website',
|
||||
title: {
|
||||
'en-US': 'Viossa - Learn a Language Through Immersion',
|
||||
'es-LA': 'Viossa - Aprende un Idioma a Través de la Inmersión',
|
||||
},
|
||||
description: {
|
||||
'en-US': 'Learn languages naturally through immersion and interaction with native speakers.',
|
||||
'es-LA': 'Aprende idiomas naturalmente a través de la inmersión e interacción con hablantes nativos.',
|
||||
},
|
||||
title: 'Viossa - Learn a Language Through Immersion',
|
||||
description: 'Learn languages naturally through immersion and interaction with native speakers.',
|
||||
image: '/images/og-viossa-home.jpg',
|
||||
siteName: 'Viossa',
|
||||
},
|
||||
twitter: {
|
||||
card: 'summary_large_image',
|
||||
site: '@viossa',
|
||||
creator: '@viossa',
|
||||
title: {
|
||||
'en-US': 'Viossa - Learn a Language Through Immersion',
|
||||
},
|
||||
description: {
|
||||
'en-US': 'Learn languages naturally through immersion',
|
||||
},
|
||||
image: '/images/twitter-viossa-home.jpg',
|
||||
},
|
||||
hreflang: {
|
||||
'en': '/',
|
||||
'es': '/?locale=es-LA',
|
||||
|
|
@ -75,23 +62,10 @@ export const resourcesPageMeta: I18nMetaConfig = {
|
|||
keywords: ['resources', 'tutorials', 'guides', 'language learning materials', 'viossa resources'],
|
||||
og: {
|
||||
type: 'website',
|
||||
title: {
|
||||
'en-US': 'Learning Resources - Viossa',
|
||||
},
|
||||
description: {
|
||||
'en-US': 'Browse our collection of learning resources and tutorials.',
|
||||
},
|
||||
title: 'Learning Resources - Viossa',
|
||||
description: 'Browse our collection of learning resources and tutorials.',
|
||||
image: '/images/og-resources.jpg',
|
||||
},
|
||||
twitter: {
|
||||
card: 'summary',
|
||||
title: {
|
||||
'en-US': 'Learning Resources - Viossa',
|
||||
},
|
||||
description: {
|
||||
'en-US': 'Browse tutorials and guides for language learning',
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -119,24 +93,11 @@ export const resourceDetailMeta = (route: any): I18nMetaConfig => {
|
|||
canonical: `https://viossa.net/resources/${resourceId}`,
|
||||
og: {
|
||||
type: 'article',
|
||||
title: {
|
||||
'en-US': resourceTitle,
|
||||
},
|
||||
description: {
|
||||
'en-US': resourceDescription,
|
||||
},
|
||||
title: resourceTitle,
|
||||
description: resourceDescription,
|
||||
image: '/images/og-resource-default.jpg',
|
||||
url: `https://viossa.net/resources/${resourceId}`,
|
||||
},
|
||||
twitter: {
|
||||
card: 'summary_large_image',
|
||||
title: {
|
||||
'en-US': resourceTitle,
|
||||
},
|
||||
description: {
|
||||
'en-US': resourceDescription,
|
||||
},
|
||||
},
|
||||
// Custom meta tags for resource pages
|
||||
custom: [
|
||||
{
|
||||
|
|
@ -168,20 +129,10 @@ export const kotobaPageMeta: I18nMetaConfig = {
|
|||
keywords: ['kotoba', 'vocabulary', 'grammar', 'spaced repetition', 'interactive learning', 'language practice'],
|
||||
og: {
|
||||
type: 'website',
|
||||
title: {
|
||||
'en-US': 'Kotoba - Interactive Language Learning',
|
||||
},
|
||||
description: {
|
||||
'en-US': 'Practice vocabulary with spaced repetition',
|
||||
},
|
||||
title: 'Kotoba - Interactive Language Learning',
|
||||
description: 'Practice vocabulary with spaced repetition',
|
||||
image: '/images/og-kotoba.jpg',
|
||||
},
|
||||
twitter: {
|
||||
card: 'summary',
|
||||
title: {
|
||||
'en-US': 'Kotoba - Interactive Language Learning',
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -202,12 +153,8 @@ export const discordRulesPageMeta: I18nMetaConfig = {
|
|||
robots: 'index, follow', // This page should be indexed
|
||||
og: {
|
||||
type: 'website',
|
||||
title: {
|
||||
'en-US': 'Discord Community Rules',
|
||||
},
|
||||
description: {
|
||||
'en-US': 'Community guidelines for Viossa Discord server',
|
||||
},
|
||||
title: 'Discord Community Rules',
|
||||
description: 'Community guidelines for Viossa Discord server',
|
||||
image: '/images/og-discord-rules.jpg',
|
||||
},
|
||||
}
|
||||
|
|
@ -241,12 +188,6 @@ export function generateArticleMeta(article: {
|
|||
image: article.image || '/images/og-article-default.jpg',
|
||||
url: `https://viossa.net/articles/${article.id}`,
|
||||
},
|
||||
twitter: {
|
||||
card: 'summary_large_image',
|
||||
title: article.title,
|
||||
description: article.summary,
|
||||
image: article.image || '/images/twitter-article-default.jpg',
|
||||
},
|
||||
custom: [
|
||||
{
|
||||
property: 'article:published_time',
|
||||
|
|
@ -325,9 +266,6 @@ export const exampleRouteWithMeta = {
|
|||
og: {
|
||||
type: 'article',
|
||||
image: '/default-og-image.jpg'
|
||||
},
|
||||
twitter: {
|
||||
card: 'summary_large_image'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
<script setup lang="ts">
|
||||
import { definePage } from 'vue-router/auto-routes'
|
||||
import { definePage } from 'unplugin-vue-router/runtime'
|
||||
import { useAuth } from '../../composables/useAuth'
|
||||
import { usePreviewMode } from '../../composables/usePreviewMode'
|
||||
import PreviewModeToggle from '@/components/molecules/PreviewModeToggle.vue'
|
||||
|
|
|
|||
39
apps/vdn-static/src/typed-router.d.ts
vendored
39
apps/vdn-static/src/typed-router.d.ts
vendored
|
|
@ -30,6 +30,13 @@ declare module 'vue-router/auto-routes' {
|
|||
Record<never, never>,
|
||||
| never
|
||||
>,
|
||||
'/admin/': RouteRecordInfo<
|
||||
'/admin/',
|
||||
'/admin',
|
||||
Record<never, never>,
|
||||
Record<never, never>,
|
||||
| never
|
||||
>,
|
||||
'/discord/rules': RouteRecordInfo<
|
||||
'/discord/rules',
|
||||
'/discord/rules',
|
||||
|
|
@ -44,6 +51,20 @@ declare module 'vue-router/auto-routes' {
|
|||
Record<never, never>,
|
||||
| never
|
||||
>,
|
||||
'/login': RouteRecordInfo<
|
||||
'/login',
|
||||
'/login',
|
||||
Record<never, never>,
|
||||
Record<never, never>,
|
||||
| never
|
||||
>,
|
||||
'/preview': RouteRecordInfo<
|
||||
'/preview',
|
||||
'/preview',
|
||||
Record<never, never>,
|
||||
Record<never, never>,
|
||||
| never
|
||||
>,
|
||||
'/resources': RouteRecordInfo<
|
||||
'/resources',
|
||||
'/resources',
|
||||
|
|
@ -70,6 +91,12 @@ declare module 'vue-router/auto-routes' {
|
|||
views:
|
||||
| never
|
||||
}
|
||||
'pages/admin/index.vue': {
|
||||
routes:
|
||||
| '/admin/'
|
||||
views:
|
||||
| never
|
||||
}
|
||||
'pages/discord/rules.vue': {
|
||||
routes:
|
||||
| '/discord/rules'
|
||||
|
|
@ -82,6 +109,18 @@ declare module 'vue-router/auto-routes' {
|
|||
views:
|
||||
| never
|
||||
}
|
||||
'pages/login.vue': {
|
||||
routes:
|
||||
| '/login'
|
||||
views:
|
||||
| never
|
||||
}
|
||||
'pages/preview.vue': {
|
||||
routes:
|
||||
| '/preview'
|
||||
views:
|
||||
| never
|
||||
}
|
||||
'pages/resources.vue': {
|
||||
routes:
|
||||
| '/resources'
|
||||
|
|
|
|||
|
|
@ -1,6 +1,9 @@
|
|||
import type { RouteLocationNormalizedLoaded } from 'vue-router'
|
||||
import type { RouteLocationNormalizedLoaded, RouteMeta } from 'vue-router'
|
||||
import type { MetaConfig } from '../composables/useMeta'
|
||||
|
||||
// Re-export RouteMeta for consumers who want to import it from here
|
||||
export type { RouteMeta }
|
||||
|
||||
/**
|
||||
* Extended route meta interface for SEO and meta tag configuration
|
||||
*
|
||||
|
|
@ -7,7 +7,7 @@
|
|||
|
||||
import { computed } from 'vue'
|
||||
import { useRoute } from 'vue-router'
|
||||
import { useMeta, type MetaConfig } from '../composables/useMeta'
|
||||
import { useMeta, type MetaConfig, type CustomMetaTag } from '../composables/useMeta'
|
||||
import type {
|
||||
ArticleNode,
|
||||
PageNode,
|
||||
|
|
@ -29,6 +29,34 @@ export function generateDrupalNodeMeta(
|
|||
const { attributes } = node
|
||||
const path = attributes.path?.alias || `node/${node.id}`
|
||||
|
||||
// Build custom tags array - we know this is always an array at construction
|
||||
const customTags: CustomMetaTag[] = [
|
||||
{
|
||||
property: 'article:published_time',
|
||||
content: attributes.created,
|
||||
},
|
||||
{
|
||||
property: 'article:modified_time',
|
||||
content: attributes.changed,
|
||||
},
|
||||
]
|
||||
|
||||
// Add sticky/promote as robots meta
|
||||
if (attributes.sticky || attributes.promote) {
|
||||
customTags.push({
|
||||
name: 'robots',
|
||||
content: 'index, follow',
|
||||
})
|
||||
}
|
||||
|
||||
// Add status-based robots meta
|
||||
if (!attributes.status) {
|
||||
customTags.push({
|
||||
name: 'robots',
|
||||
content: 'noindex, nofollow',
|
||||
})
|
||||
}
|
||||
|
||||
const meta: MetaConfig = {
|
||||
title: attributes.title,
|
||||
description: attributes.body?.summary || generateExcerpt(attributes.body?.processed || ''),
|
||||
|
|
@ -41,38 +69,7 @@ export function generateDrupalNodeMeta(
|
|||
url: `${baseUrl}${path}`,
|
||||
image: '/images/og-default.jpg', // Could be extracted from relationships
|
||||
},
|
||||
twitter: {
|
||||
card: 'summary_large_image',
|
||||
title: attributes.title,
|
||||
description: attributes.body?.summary || generateExcerpt(attributes.body?.processed || ''),
|
||||
image: '/images/twitter-default.jpg',
|
||||
},
|
||||
custom: [
|
||||
{
|
||||
property: 'article:published_time',
|
||||
content: attributes.created,
|
||||
},
|
||||
{
|
||||
property: 'article:modified_time',
|
||||
content: attributes.changed,
|
||||
},
|
||||
],
|
||||
}
|
||||
|
||||
// Add sticky/promote as robots meta
|
||||
if (attributes.sticky || attributes.promote) {
|
||||
meta.custom?.push({
|
||||
name: 'robots',
|
||||
content: 'index, follow',
|
||||
})
|
||||
}
|
||||
|
||||
// Add status-based robots meta
|
||||
if (!attributes.status) {
|
||||
meta.custom?.push({
|
||||
name: 'robots',
|
||||
content: 'noindex, nofollow',
|
||||
})
|
||||
custom: customTags,
|
||||
}
|
||||
|
||||
return meta
|
||||
|
|
@ -98,7 +95,7 @@ export function generateArticleContentMeta(
|
|||
type: 'article',
|
||||
},
|
||||
custom: [
|
||||
...(baseMeta.custom || []),
|
||||
...(Array.isArray(baseMeta.custom) ? baseMeta.custom : []),
|
||||
// Article-specific meta tags
|
||||
{
|
||||
property: 'article:section',
|
||||
|
|
@ -151,7 +148,7 @@ export function generateLearningResourceMeta(
|
|||
type: 'article',
|
||||
},
|
||||
custom: [
|
||||
...(baseMeta.custom || []),
|
||||
...(Array.isArray(baseMeta.custom) ? baseMeta.custom : []),
|
||||
// Learning resource-specific meta tags
|
||||
{
|
||||
name: 'resource-type',
|
||||
|
|
|
|||
100
pnpm-lock.yaml
generated
100
pnpm-lock.yaml
generated
|
|
@ -96,6 +96,9 @@ importers:
|
|||
bulma:
|
||||
specifier: ^1.0.4
|
||||
version: 1.0.4
|
||||
pinia:
|
||||
specifier: ^3.0.4
|
||||
version: 3.0.4(typescript@5.8.3)(vue@3.5.32(typescript@5.8.3))
|
||||
tailwindcss:
|
||||
specifier: ^4.1.6
|
||||
version: 4.1.10
|
||||
|
|
@ -104,7 +107,7 @@ importers:
|
|||
version: 11.1.5(vue@3.5.32(typescript@5.8.3))
|
||||
vue-router:
|
||||
specifier: ^5.0.4
|
||||
version: 5.0.4(@vue/compiler-sfc@3.5.32)(vue@3.5.32(typescript@5.8.3))
|
||||
version: 5.0.4(@vue/compiler-sfc@3.5.32)(pinia@3.0.4(typescript@5.8.3)(vue@3.5.32(typescript@5.8.3)))(vue@3.5.32(typescript@5.8.3))
|
||||
devDependencies:
|
||||
'@eslint/js':
|
||||
specifier: ^9.39.2
|
||||
|
|
@ -141,7 +144,7 @@ importers:
|
|||
version: 8.55.0(eslint@9.39.2(jiti@2.4.2))(typescript@5.8.3)
|
||||
unplugin-vue-router:
|
||||
specifier: ^0.19.2
|
||||
version: 0.19.2(@vue/compiler-sfc@3.5.32)(vue-router@5.0.4(@vue/compiler-sfc@3.5.32)(vue@3.5.32(typescript@5.8.3)))(vue@3.5.32(typescript@5.8.3))
|
||||
version: 0.19.2(@vue/compiler-sfc@3.5.32)(vue-router@5.0.4(@vue/compiler-sfc@3.5.32)(pinia@3.0.4(typescript@5.8.3)(vue@3.5.32(typescript@5.8.3)))(vue@3.5.32(typescript@5.8.3)))(vue@3.5.32(typescript@5.8.3))
|
||||
vite:
|
||||
specifier: ^6.3.5
|
||||
version: 6.3.5(@types/node@22.15.31)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(tsx@4.20.2)(yaml@2.8.3)
|
||||
|
|
@ -940,12 +943,21 @@ packages:
|
|||
'@vue/devtools-api@6.6.4':
|
||||
resolution: {integrity: sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==}
|
||||
|
||||
'@vue/devtools-api@7.7.9':
|
||||
resolution: {integrity: sha512-kIE8wvwlcZ6TJTbNeU2HQNtaxLx3a84aotTITUuL/4bzfPxzajGBOoqjMhwZJ8L9qFYDU/lAYMEEm11dnZOD6g==}
|
||||
|
||||
'@vue/devtools-api@8.1.1':
|
||||
resolution: {integrity: sha512-bsDMJ07b3GN1puVwJb/fyFnj/U2imyswK5UQVLZwVl7O05jDrt6BHxeG5XffmOOdasOj/bOmIjxJvGPxU7pcqw==}
|
||||
|
||||
'@vue/devtools-kit@7.7.9':
|
||||
resolution: {integrity: sha512-PyQ6odHSgiDVd4hnTP+aDk2X4gl2HmLDfiyEnn3/oV+ckFDuswRs4IbBT7vacMuGdwY/XemxBoh302ctbsptuA==}
|
||||
|
||||
'@vue/devtools-kit@8.1.1':
|
||||
resolution: {integrity: sha512-gVBaBv++i+adg4JpH71k9ppl4soyR7Y2McEqO5YNgv0BI1kMZ7BDX5gnwkZ5COYgiCyhejZG+yGNrBAjj6Coqg==}
|
||||
|
||||
'@vue/devtools-shared@7.7.9':
|
||||
resolution: {integrity: sha512-iWAb0v2WYf0QWmxCGy0seZNDPdO3Sp5+u78ORnyeonS6MT4PC7VPrryX2BpMJrwlDeaZ6BD4vP4XKjK0SZqaeA==}
|
||||
|
||||
'@vue/devtools-shared@8.1.1':
|
||||
resolution: {integrity: sha512-+h4ttmJYl/txpxHKaoZcaKpC+pvckgLzIDiSQlaQ7kKthKh8KuwoLW2D8hPJEnqKzXOvu15UHEoGyngAXCz0EQ==}
|
||||
|
||||
|
|
@ -1260,6 +1272,10 @@ packages:
|
|||
resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==}
|
||||
engines: {node: '>= 0.6'}
|
||||
|
||||
copy-anything@4.0.5:
|
||||
resolution: {integrity: sha512-7Vv6asjS4gMOuILabD3l739tsaxFQmC+a7pLZm02zyvs8p977bL3zEgq3yDk5rn9B0PbYgIv++jmHcuUab4RhA==}
|
||||
engines: {node: '>=18'}
|
||||
|
||||
cross-spawn@7.0.6:
|
||||
resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
|
||||
engines: {node: '>= 8'}
|
||||
|
|
@ -1837,6 +1853,10 @@ packages:
|
|||
resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==}
|
||||
engines: {node: '>= 0.4'}
|
||||
|
||||
is-what@5.5.0:
|
||||
resolution: {integrity: sha512-oG7cgbmg5kLYae2N5IVd3jm2s+vldjxJzK1pcu9LfpGuQ93MQSzo0okvRna+7y5ifrD+20FE8FvjusyGaz14fw==}
|
||||
engines: {node: '>=18'}
|
||||
|
||||
is-wsl@2.2.0:
|
||||
resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==}
|
||||
engines: {node: '>=8'}
|
||||
|
|
@ -2087,6 +2107,9 @@ packages:
|
|||
resolution: {integrity: sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==}
|
||||
engines: {node: '>= 18'}
|
||||
|
||||
mitt@3.0.1:
|
||||
resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==}
|
||||
|
||||
mkdirp-classic@0.5.3:
|
||||
resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==}
|
||||
|
||||
|
|
@ -2243,6 +2266,9 @@ packages:
|
|||
pathe@2.0.3:
|
||||
resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==}
|
||||
|
||||
perfect-debounce@1.0.0:
|
||||
resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==}
|
||||
|
||||
perfect-debounce@2.1.0:
|
||||
resolution: {integrity: sha512-LjgdTytVFXeUgtHZr9WYViYSM/g8MkcTPYDlPa3cDqMirHjKiSZPYd6DoL7pK8AJQr+uWkQvCjHNdiMqsrJs+g==}
|
||||
|
||||
|
|
@ -2261,6 +2287,15 @@ packages:
|
|||
resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==}
|
||||
engines: {node: '>=12'}
|
||||
|
||||
pinia@3.0.4:
|
||||
resolution: {integrity: sha512-l7pqLUFTI/+ESXn6k3nu30ZIzW5E2WZF/LaHJEpoq6ElcLD+wduZoB2kBN19du6K/4FDpPMazY2wJr+IndBtQw==}
|
||||
peerDependencies:
|
||||
typescript: '>=4.5.0'
|
||||
vue: ^3.5.11
|
||||
peerDependenciesMeta:
|
||||
typescript:
|
||||
optional: true
|
||||
|
||||
pkg-types@1.3.1:
|
||||
resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==}
|
||||
|
||||
|
|
@ -2373,6 +2408,9 @@ packages:
|
|||
resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==}
|
||||
engines: {node: '>= 4'}
|
||||
|
||||
rfdc@1.4.1:
|
||||
resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==}
|
||||
|
||||
rimraf@3.0.2:
|
||||
resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
|
||||
deprecated: Rimraf versions prior to v4 are no longer supported
|
||||
|
|
@ -2495,6 +2533,10 @@ packages:
|
|||
resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
|
||||
speakingurl@14.0.1:
|
||||
resolution: {integrity: sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
|
||||
sql-highlight@6.1.0:
|
||||
resolution: {integrity: sha512-ed7OK4e9ywpE7pgRMkMQmZDPKSVdm0oX5IEtZiKnFucSF0zu6c80GZBe38UqHuVhTWJ9xsKgSMjCG2bml86KvA==}
|
||||
engines: {node: '>=14'}
|
||||
|
|
@ -2541,6 +2583,10 @@ packages:
|
|||
resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
|
||||
engines: {node: '>=8'}
|
||||
|
||||
superjson@2.2.6:
|
||||
resolution: {integrity: sha512-H+ue8Zo4vJmV2nRjpx86P35lzwDT3nItnIsocgumgr0hHMQ+ZGq5vrERg9kJBo5AWGmxZDhzDo+WVIJqkB0cGA==}
|
||||
engines: {node: '>=16'}
|
||||
|
||||
supports-color@7.2.0:
|
||||
resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
|
||||
engines: {node: '>=8'}
|
||||
|
|
@ -3635,10 +3681,24 @@ snapshots:
|
|||
|
||||
'@vue/devtools-api@6.6.4': {}
|
||||
|
||||
'@vue/devtools-api@7.7.9':
|
||||
dependencies:
|
||||
'@vue/devtools-kit': 7.7.9
|
||||
|
||||
'@vue/devtools-api@8.1.1':
|
||||
dependencies:
|
||||
'@vue/devtools-kit': 8.1.1
|
||||
|
||||
'@vue/devtools-kit@7.7.9':
|
||||
dependencies:
|
||||
'@vue/devtools-shared': 7.7.9
|
||||
birpc: 2.9.0
|
||||
hookable: 5.5.3
|
||||
mitt: 3.0.1
|
||||
perfect-debounce: 1.0.0
|
||||
speakingurl: 14.0.1
|
||||
superjson: 2.2.6
|
||||
|
||||
'@vue/devtools-kit@8.1.1':
|
||||
dependencies:
|
||||
'@vue/devtools-shared': 8.1.1
|
||||
|
|
@ -3646,6 +3706,10 @@ snapshots:
|
|||
hookable: 5.5.3
|
||||
perfect-debounce: 2.1.0
|
||||
|
||||
'@vue/devtools-shared@7.7.9':
|
||||
dependencies:
|
||||
rfdc: 1.4.1
|
||||
|
||||
'@vue/devtools-shared@8.1.1': {}
|
||||
|
||||
'@vue/language-core@3.2.6':
|
||||
|
|
@ -3989,6 +4053,10 @@ snapshots:
|
|||
|
||||
cookie@0.7.2: {}
|
||||
|
||||
copy-anything@4.0.5:
|
||||
dependencies:
|
||||
is-what: 5.5.0
|
||||
|
||||
cross-spawn@7.0.6:
|
||||
dependencies:
|
||||
path-key: 3.1.1
|
||||
|
|
@ -4622,6 +4690,8 @@ snapshots:
|
|||
dependencies:
|
||||
which-typed-array: 1.1.19
|
||||
|
||||
is-what@5.5.0: {}
|
||||
|
||||
is-wsl@2.2.0:
|
||||
dependencies:
|
||||
is-docker: 2.2.1
|
||||
|
|
@ -4867,6 +4937,8 @@ snapshots:
|
|||
dependencies:
|
||||
minipass: 7.1.2
|
||||
|
||||
mitt@3.0.1: {}
|
||||
|
||||
mkdirp-classic@0.5.3: {}
|
||||
|
||||
mkdirp@1.0.4: {}
|
||||
|
|
@ -5017,6 +5089,8 @@ snapshots:
|
|||
|
||||
pathe@2.0.3: {}
|
||||
|
||||
perfect-debounce@1.0.0: {}
|
||||
|
||||
perfect-debounce@2.1.0: {}
|
||||
|
||||
picocolors@1.1.1: {}
|
||||
|
|
@ -5028,6 +5102,13 @@ snapshots:
|
|||
|
||||
picomatch@4.0.3: {}
|
||||
|
||||
pinia@3.0.4(typescript@5.8.3)(vue@3.5.32(typescript@5.8.3)):
|
||||
dependencies:
|
||||
'@vue/devtools-api': 7.7.9
|
||||
vue: 3.5.32(typescript@5.8.3)
|
||||
optionalDependencies:
|
||||
typescript: 5.8.3
|
||||
|
||||
pkg-types@1.3.1:
|
||||
dependencies:
|
||||
confbox: 0.1.8
|
||||
|
|
@ -5144,6 +5225,8 @@ snapshots:
|
|||
retry@0.12.0:
|
||||
optional: true
|
||||
|
||||
rfdc@1.4.1: {}
|
||||
|
||||
rimraf@3.0.2:
|
||||
dependencies:
|
||||
glob: 7.2.3
|
||||
|
|
@ -5322,6 +5405,8 @@ snapshots:
|
|||
|
||||
source-map-js@1.2.1: {}
|
||||
|
||||
speakingurl@14.0.1: {}
|
||||
|
||||
sql-highlight@6.1.0: {}
|
||||
|
||||
sqlite3@5.1.7:
|
||||
|
|
@ -5373,6 +5458,10 @@ snapshots:
|
|||
|
||||
strip-json-comments@3.1.1: {}
|
||||
|
||||
superjson@2.2.6:
|
||||
dependencies:
|
||||
copy-anything: 4.0.5
|
||||
|
||||
supports-color@7.2.0:
|
||||
dependencies:
|
||||
has-flag: 4.0.0
|
||||
|
|
@ -5557,7 +5646,7 @@ snapshots:
|
|||
pathe: 2.0.3
|
||||
picomatch: 4.0.3
|
||||
|
||||
unplugin-vue-router@0.19.2(@vue/compiler-sfc@3.5.32)(vue-router@5.0.4(@vue/compiler-sfc@3.5.32)(vue@3.5.32(typescript@5.8.3)))(vue@3.5.32(typescript@5.8.3)):
|
||||
unplugin-vue-router@0.19.2(@vue/compiler-sfc@3.5.32)(vue-router@5.0.4(@vue/compiler-sfc@3.5.32)(pinia@3.0.4(typescript@5.8.3)(vue@3.5.32(typescript@5.8.3)))(vue@3.5.32(typescript@5.8.3)))(vue@3.5.32(typescript@5.8.3)):
|
||||
dependencies:
|
||||
'@babel/generator': 7.29.1
|
||||
'@vue-macros/common': 3.1.2(vue@3.5.32(typescript@5.8.3))
|
||||
|
|
@ -5578,7 +5667,7 @@ snapshots:
|
|||
unplugin-utils: 0.3.1
|
||||
yaml: 2.8.3
|
||||
optionalDependencies:
|
||||
vue-router: 5.0.4(@vue/compiler-sfc@3.5.32)(vue@3.5.32(typescript@5.8.3))
|
||||
vue-router: 5.0.4(@vue/compiler-sfc@3.5.32)(pinia@3.0.4(typescript@5.8.3)(vue@3.5.32(typescript@5.8.3)))(vue@3.5.32(typescript@5.8.3))
|
||||
transitivePeerDependencies:
|
||||
- vue
|
||||
|
||||
|
|
@ -5647,7 +5736,7 @@ snapshots:
|
|||
'@vue/devtools-api': 6.6.4
|
||||
vue: 3.5.32(typescript@5.8.3)
|
||||
|
||||
vue-router@5.0.4(@vue/compiler-sfc@3.5.32)(vue@3.5.32(typescript@5.8.3)):
|
||||
vue-router@5.0.4(@vue/compiler-sfc@3.5.32)(pinia@3.0.4(typescript@5.8.3)(vue@3.5.32(typescript@5.8.3)))(vue@3.5.32(typescript@5.8.3)):
|
||||
dependencies:
|
||||
'@babel/generator': 7.29.1
|
||||
'@vue-macros/common': 3.1.2(vue@3.5.32(typescript@5.8.3))
|
||||
|
|
@ -5669,6 +5758,7 @@ snapshots:
|
|||
yaml: 2.8.3
|
||||
optionalDependencies:
|
||||
'@vue/compiler-sfc': 3.5.32
|
||||
pinia: 3.0.4(typescript@5.8.3)(vue@3.5.32(typescript@5.8.3))
|
||||
|
||||
vue-tsc@3.2.6(typescript@5.8.3):
|
||||
dependencies:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue