From 8069af12ff381b22ed7abb488eca10b532eb457e Mon Sep 17 00:00:00 2001 From: Baptiste Leproux Date: Thu, 13 Aug 2026 17:23:26 +0200 Subject: [PATCH 01/20] feat(search): client side fts --- app/app.vue | 29 +- app/composables/useDocsContent.ts | 3 - app/composables/useLocalSearch.ts | 140 ++++ app/error.vue | 11 +- app/utils/search-sections.ts | 23 - modules/config.ts | 11 +- nuxt.config.ts | 2 + package.json | 1 + pnpm-lock.yaml | 643 +++++++++--------- server/api/content/[...path].get.ts | 6 +- .../api/content/blob/[sha]/[...path].get.ts | 16 + server/api/content/head.get.ts | 13 + .../content/tree/[branch]/[...path].get.ts | 2 + server/api/revalidate.post.ts | 6 +- server/utils/content.ts | 22 +- 15 files changed, 536 insertions(+), 392 deletions(-) create mode 100644 app/composables/useLocalSearch.ts delete mode 100644 app/utils/search-sections.ts create mode 100644 server/api/content/head.get.ts diff --git a/app/app.vue b/app/app.vue index 62ef764..1253904 100644 --- a/app/app.vue +++ b/app/app.vue @@ -1,6 +1,5 @@ + + diff --git a/app/composables/useLocalSearch.ts b/app/composables/useLocalSearch.ts deleted file mode 100644 index 22ec947..0000000 --- a/app/composables/useLocalSearch.ts +++ /dev/null @@ -1,140 +0,0 @@ -import type { CacheArtifact, RelationalDatabase, SearchOptions, SearchResult } from 'comark-content' -import type { ActiveContent } from './useDocsContent' -import { prefixLink } from '../utils/routing' - -type LocalSearchStatus = 'idle' | 'loading' | 'ready' | 'error' - -/** The subset of the hydrated instance the palette needs (plugin methods, so typed by hand). */ -interface LocalSearchInstance { - init: () => Promise - search: (sources: string[], query: string, opts?: SearchOptions) => Promise -} - -const COMMIT_SHA = /^[0-9a-f]{40}$/i - -type LocalSearchScope = 'prod' | 'preview' - -/** - * At most two databases ever exist, one per scope: - * - prod: pinned to the head commit the page was rendered at (built once, kept for the session) - * - preview: one at a time, keyed by `previewBase` — visiting another `/tree` or `/blob` ref - * rebuilds the instance but reuses the preview database (its FTS rows are cleared per source) - */ -let prodInstance: Promise | undefined -let previewInstance: Promise | undefined -let previewBase: string | undefined -let previewDatabase: RelationalDatabase | undefined -const status = ref('idle') - -function resolveApiBase(active: ActiveContent, headSha: string): string { - if (active.mode === 'tree') return `/api/content/tree/${encodeURIComponent(active.ref!)}` - if (active.mode === 'blob') return `/api/content/blob/${active.ref}` - return COMMIT_SHA.test(headSha) ? `/api/content/blob/${headSha}` : '/api/content' -} - -async function createInstance(apiBase: string, scope: LocalSearchScope): Promise { - // Dynamic imports so sqlite-wasm and the FTS plugin only ever load in the browser, on demand. - const [{ comarkContent }, sqliteWasm, sqliteFullTextSearch] = await Promise.all([ - import('comark-content'), - import('comark-content/database/sqlite-wasm').then((m) => m.default), - import('comark-content/plugins/sqlite-full-text-search').then((m) => m.default), - ]) - - const database = scope === 'preview' ? (previewDatabase ??= sqliteWasm()) : sqliteWasm() - const content = comarkContent({ - cache: { - loadManifest: () => $fetch(`${apiBase}/manifest.json`), - loadSnapshot: (source: string) => $fetch(`${apiBase}/snapshot/${source}.json`), - }, - plugins: [sqliteFullTextSearch({ database })], - }) as unknown as LocalSearchInstance - - // Warm up the instance - await content.init() - await content.search(['content'], '') - - return content -} - -async function buildInstance( - active: ActiveContent, - headSha: string, - scope: LocalSearchScope -): Promise { - status.value = 'loading' - try { - const content = await createInstance(resolveApiBase(active, headSha), scope) - status.value = 'ready' - return content - } catch (error) { - // Don't memoize a failed hydration — the next palette open should retry. - if (scope === 'prod') { - prodInstance = undefined - } else if (previewBase === active.base) { - previewInstance = undefined - previewBase = undefined - } - status.value = 'error' - throw error - } -} - -function getInstance(active: ActiveContent, headSha: string): Promise { - if (active.mode === 'prod') { - prodInstance ??= buildInstance(active, headSha, 'prod') - return prodInstance - } - - if (!previewInstance || previewBase !== active.base) { - previewBase = active.base - previewInstance = buildInstance(active, headSha, 'preview') - } - return previewInstance -} - -/** - * Client-side full-text search: a browser-standalone comark-content instance (sqlite-wasm FTS5) - * hydrated from the per-commit snapshot artifacts. BM25-ranked section results, zero server work - * per keystroke. `status` follows `UContentSearch`'s `search-status` contract; a failed hydration - * surfaces as `'error'` and the next palette open retries. - */ -export function useLocalSearch() { - const active = useDocsContent() - - // The head commit the page was rendered at, resolved during SSR (in-process call) and shipped - // in the payload — the client never refetches it. The pin can advance past the deploy SHA via - // the push webhook, so it must come from the server's `getHeadRef()`, not build-time env. - const { data: headSha } = useAsyncData( - 'content-head-sha', - () => $fetch<{ sha: string }>('/api/content/head').then(({ sha }) => sha), - { default: () => '' } - ) - - /** Kick off wasm + snapshot loading before the first keystroke needs it. */ - function warmup(): void { - getInstance(active.value, headSha.value).catch(() => {}) // surfaced through `status` - } - - if (import.meta.client) { - onNuxtReady(warmup) - } - - async function search(query: string, opts?: SearchOptions): Promise { - const instance = await getInstance(active.value, headSha.value) - const results = await instance.search(['content'], query, { - limit: 25, - snippet: { columns: ['content'] }, - ...opts, - }) - - // Preview modes: keep result links inside `/tree/` / `/blob/`, like `searchFiles`. - const base = active.value.base - if (!base) return results - return results.map((result) => { - const [path, hash] = result.id.split('#') - return { ...result, id: prefixLink(path!, base) + (hash ? `#${hash}` : '') } - }) - } - - return { search, status: readonly(status), warmup } -} diff --git a/app/composables/useSearch.ts b/app/composables/useSearch.ts new file mode 100644 index 0000000..cf0095e --- /dev/null +++ b/app/composables/useSearch.ts @@ -0,0 +1,92 @@ +import type { SearchOptions, SearchResult } from 'comark-content' +import type { SearchWorkerPayload, SearchWorkerResponse } from '../types/search-worker' + +type SearchStatus = 'idle' | 'loading' | 'ready' | 'error' + +const status = ref('idle') + +let worker: Worker | undefined +let nextId = 0 +const pending = new Map void, reject: (error: Error) => void }>() + +function getWorker(): Worker { + if (worker) return worker + + worker = new Worker(new URL('../workers/search.worker.ts', import.meta.url), { type: 'module' }) + + worker.onmessage = (event: MessageEvent) => { + const message = event.data + if (message.type === 'status') { + status.value = message.value + return + } + const settle = pending.get(message.id) + if (!settle) return + pending.delete(message.id) + if (message.type === 'result') settle.resolve(message.results) + else settle.reject(new Error(message.message)) + } + + worker.onerror = () => { + status.value = 'error' + for (const { reject } of pending.values()) reject(new Error('[search] the search worker failed to load')) + pending.clear() + } + + return worker +} + +function request(message: SearchWorkerPayload): Promise { + const id = ++nextId + return new Promise((resolve, reject) => { + pending.set(id, { resolve, reject }) + try { + getWorker().postMessage({ ...message, id }) + } catch (error) { + pending.delete(id) + reject(error instanceof Error ? error : new Error(String(error))) + } + }) +} + +/** + * Client-side full-text search over production content (sqlite-wasm FTS5) hydrated from the + * per-commit snapshot artifacts. + */ +export function useSearch() { + const { data: headSha } = useAsyncData( + 'content-head-sha', + () => $fetch<{ sha: string | null }>('/api/content/head').then(({ sha }) => sha), + { default: () => null } + ) + + /** + * Load the database ahead of the first keystroke. No-op once loading or ready; retries after a + * failure — the worker holds that guard, since this side's `status` lags a message behind. + */ + async function warmup(): Promise { + try { + if (!headSha.value && !import.meta.dev) { + throw new Error('[search] /api/content/head returned no commit pin') + } + + // Immutable per-commit artifacts, CDN-cached forever. Only unpinned in dev, per the guard above. + const apiBase = headSha.value ? `/api/content/blob/${headSha.value}` : '/api/content' + + await request({ type: 'warmup', apiBase, origin: location.origin }) + } catch (error) { + status.value = 'error' + console.error('[search] could not load the search database', error) + } + } + + if (import.meta.client) { + onNuxtReady(warmup) + } + + async function search(query: string, opts?: SearchOptions): Promise { + return request({ type: 'search', query, opts }) + } + + return { search, status: readonly(status), warmup } +} diff --git a/app/error.vue b/app/error.vue index f114b82..b9e4ea8 100644 --- a/app/error.vue +++ b/app/error.vue @@ -18,12 +18,6 @@ useSeoMeta({ const { data: navigation } = await useAsyncData('navigation', () => prodContent.navigation()) -const { search: localSearch, status: localSearchStatus, warmup } = useLocalSearch() -const searchOpen = useContentSearch().open -watch(searchOpen, (isOpen) => { - if (isOpen) warmup() -}) - provide('navigation', navigation) @@ -35,13 +29,6 @@ provide('navigation', navigation) - - - + diff --git a/app/types/search-worker.ts b/app/types/search-worker.ts new file mode 100644 index 0000000..812bc85 --- /dev/null +++ b/app/types/search-worker.ts @@ -0,0 +1,31 @@ +import type { SearchOptions, SearchResult } from 'comark-content' + +/** + * Protocol between `useSearch` and `app/workers/search.worker.ts`. + * + * Every request carries an `id` and gets exactly one `result`/`error` reply — `warmup` answers + * with an empty array — so the caller can drain its pending map uniformly. + */ +export type SearchWorkerPayload = + | { + type: 'warmup' + apiBase: string + origin: string + } + | { + type: 'search', + query: string, + opts?: SearchOptions + } + +/** + * Intersected rather than spread into each member: `Omit` would collapse to the + * union's common keys, dropping every payload field. + */ +export type SearchWorkerRequest = SearchWorkerPayload & { id: number } + +/** `status` arrives unsolicited: the worker owns the hydration lifecycle, the caller mirrors it. */ +export type SearchWorkerResponse = + | { type: 'status', value: 'loading' | 'ready' | 'error' } + | { type: 'result', id: number, results: SearchResult[] } + | { type: 'error', id: number, message: string } diff --git a/app/workers/search.worker.ts b/app/workers/search.worker.ts new file mode 100644 index 0000000..ace1f0c --- /dev/null +++ b/app/workers/search.worker.ts @@ -0,0 +1,89 @@ +/** + * Search worker: owns the browser-standalone `comark-content` instance (sqlite-wasm FTS5) + * hydrated from the per-commit snapshot artifacts. + * + * It lives off the main thread because sqlite-wasm's `oo1` binding is synchronous and the FTS + * plugin indexes one row per section — on the main thread the whole hydration collapses into a + * single long task (the `await`s between inserts only yield to the microtask queue, which drains + * before the browser can paint or handle input). + * + * Not a Nuxt-scanned directory, so nothing here is auto-imported. + */ +import { comarkContent } from 'comark-content' +import sqliteWasm from 'comark-content/database/sqlite-wasm' +import sqliteFullTextSearch from 'comark-content/plugins/sqlite-full-text-search' +import { ofetch } from 'ofetch' +import type { CacheArtifact, ComarkContent } from 'comark-content' +import type { SqliteFullTextSearchMethods } from 'comark-content/plugins/sqlite-full-text-search' +import type { SearchWorkerRequest, SearchWorkerResponse } from '../types/search-worker' + +type SearchInstance = ComarkContent & SqliteFullTextSearchMethods +type SearchStatus = 'idle' | 'loading' | 'ready' | 'error' + +let instance: SearchInstance | undefined +let status: SearchStatus = 'idle' + +function post(message: SearchWorkerResponse): void { + self.postMessage(message) +} + +/** Every transition is mirrored to the main thread; the worker owns the hydration lifecycle. */ +function setStatus(value: Exclude): void { + status = value + post({ type: 'status', value }) +} + +/** + * Loads the database. No-op once loading or ready; retries after a failure. + * + * The guard lives here rather than in `useSearch` because the main thread's copy of `status` lags + * a message behind, so two warmups fired in the same tick would both get through it. + */ +async function loadDatabase(apiBase: string, origin: string): Promise { + if (status === 'loading' || status === 'ready') return + + setStatus('loading') + try { + const fetchArtifact = (path: string) => ofetch(new URL(path, origin).href) + + const content = comarkContent({ + cache: { + loadManifest: () => fetchArtifact(`${apiBase}/manifest.json`), + loadSnapshot: (source: string) => fetchArtifact(`${apiBase}/snapshot/${source}.json`), + }, + plugins: [sqliteFullTextSearch({ database: sqliteWasm() })], + }) + + await content.init() + await content.search(['content'], '') // pulls the snapshot in and builds the FTS index + + instance = content + setStatus('ready') + } catch (error) { + setStatus('error') + throw error + } +} + +self.onmessage = async (event: MessageEvent) => { + const request = event.data + try { + if (request.type === 'warmup') { + await loadDatabase(request.apiBase, request.origin) + post({ type: 'result', id: request.id, results: [] }) + return + } + + const results = instance + ? await instance.search(['content'], request.query, { + limit: 25, + snippet: { columns: ['content'] }, + ...request.opts, + }) + : [] + post({ type: 'result', id: request.id, results }) + } catch (error) { + // Serialized rather than cloned: plugin errors can carry non-transferable properties. + post({ type: 'error', id: request.id, message: error instanceof Error ? error.message : String(error) }) + } +} diff --git a/modules/config.ts b/modules/config.ts index d6079c2..ca2873b 100644 --- a/modules/config.ts +++ b/modules/config.ts @@ -166,7 +166,7 @@ export default defineNuxtModule({ '/llms.txt': { isr }, '/llms-full.txt': { isr }, '/rss.xml': { isr }, - // Per-commit artifacts hydrating the client-side search database (see `useLocalSearch`) + // Per-commit artifacts hydrating the client-side search database (see `useSearch`) '/api/content/blob/*/manifest.json': { isr: true }, // Immutable since SHA-pinned '/api/content/blob/*/snapshot/*': { isr: true }, // Immutable since SHA-pinned '/api/content/tree/*/manifest.json': { isr }, diff --git a/nuxt.config.ts b/nuxt.config.ts index f724a19..5fc7da1 100644 --- a/nuxt.config.ts +++ b/nuxt.config.ts @@ -33,6 +33,7 @@ export default defineNuxtConfig({ resolve: { alias: { 'beautiful-mermaid': resolveModulePath('beautiful-mermaid', { from: import.meta.url }) }, }, + worker: { format: 'es' }, optimizeDeps: { include: [ 'beautiful-mermaid', diff --git a/server/api/content/[...path].get.ts b/server/api/content/[...path].get.ts index 6dfb0f3..cf2ca9c 100644 --- a/server/api/content/[...path].get.ts +++ b/server/api/content/[...path].get.ts @@ -1,6 +1,6 @@ /** * Single data endpoint: `content.handler()` dispatches `get`, `navigation`, `list`, `manifest` - * and `snapshot`. Cached per-URL — see `routeRules`. + * and `snapshot`. Must be cached per-URL by layer consumer. */ export default defineEventHandler(async (event) => { const content = await getProdContent() diff --git a/server/api/content/head.get.ts b/server/api/content/head.get.ts index 5324dfa..11c3e14 100644 --- a/server/api/content/head.get.ts +++ b/server/api/content/head.get.ts @@ -1,13 +1,8 @@ /** - * The commit SHA production content is currently pinned to. The client-side search database - * (see `useLocalSearch`) uses it to hydrate from the immutable `/api/content/blob//*` - * artifacts instead of the live endpoints, so snapshot downloads are CDN-cached forever. - * - * `getProdContent()` refreshes the head against the branch tip (60s shared ref cache) before - * `getHeadRef()` is read. In dev this returns the branch name, which callers must treat as - * "no immutable pin available". + * The commit SHA production content is pinned to, or `null` in dev */ export default defineEventHandler(async () => { await getProdContent() - return { sha: getHeadRef() } + + return { sha: import.meta.dev ? null : getHeadRef() } }) From d26bc6ff24a615ed331311844e46315ad58dd3de Mon Sep 17 00:00:00 2001 From: Baptiste Leproux Date: Wed, 19 Aug 2026 16:08:12 +0200 Subject: [PATCH 05/20] use comark-cms latest --- package.json | 2 +- pnpm-lock.yaml | 10 +++++----- server/api/content/[...path].get.ts | 2 -- server/api/content/blob/[sha]/[...path].get.ts | 3 --- server/api/content/tree/[branch]/[...path].get.ts | 2 -- server/api/revalidate.post.ts | 10 +++------- server/utils/content.ts | 12 +++++------- 7 files changed, 14 insertions(+), 27 deletions(-) diff --git a/package.json b/package.json index 3d52923..8476aa3 100644 --- a/package.json +++ b/package.json @@ -58,7 +58,7 @@ "ai": "^7.0.22", "beautiful-mermaid": "^1.1.3", "comark": "https://pkg.pr.new/comark@af8d3e8", - "comark-content": "https://pkg.pr.new/comark-content@6b8aae4", + "comark-content": "https://pkg.pr.new/comark-content@67c137f", "defu": "^6.1.7", "exsolve": "^1.1.0", "js-yaml": "^5.2.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5b81d1f..88180c8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -84,8 +84,8 @@ importers: specifier: https://pkg.pr.new/comark@af8d3e8 version: https://pkg.pr.new/comark@af8d3e8(beautiful-mermaid@1.1.3)(rangi@2.2.0)(shiki@4.3.1) comark-content: - specifier: https://pkg.pr.new/comark-content@6b8aae4 - version: https://pkg.pr.new/comark-content@6b8aae4(@vercel/functions@3.7.6(ws@8.21.1))(beautiful-mermaid@1.1.3)(db0@0.3.4)(ioredis@5.11.1)(rangi@2.2.0)(shiki@4.3.1) + specifier: https://pkg.pr.new/comark-content@67c137f + version: https://pkg.pr.new/comark-content@67c137f(@vercel/functions@3.7.6(ws@8.21.1))(beautiful-mermaid@1.1.3)(db0@0.3.4)(ioredis@5.11.1)(rangi@2.2.0)(shiki@4.3.1) defu: specifier: ^6.1.7 version: 6.1.7 @@ -3577,8 +3577,8 @@ packages: colortranslator@5.0.0: resolution: {integrity: sha512-Z3UPUKasUVDFCDYAjP2fmlVRf1jFHJv1izAmPjiOa0OCIw1W7iC8PZ2GsoDa8uZv+mKyWopxxStT9q05+27h7w==} - comark-content@https://pkg.pr.new/comark-content@6b8aae4: - resolution: {tarball: https://pkg.pr.new/comark-content@6b8aae4} + comark-content@https://pkg.pr.new/comark-content@67c137f: + resolution: {integrity: sha512-X6IbRRKi2IU8COgDCpoHtLZ8wiFprgQpIrm3UWyp9K3F/omo03w/lko+uGSE9SMoakFtfJS74pswUJDLcy05tw==, tarball: https://pkg.pr.new/comark-content@67c137f} version: 0.3.0 hasBin: true @@ -10557,7 +10557,7 @@ snapshots: colortranslator@5.0.0: {} - comark-content@https://pkg.pr.new/comark-content@6b8aae4(@vercel/functions@3.7.6(ws@8.21.1))(beautiful-mermaid@1.1.3)(db0@0.3.4)(ioredis@5.11.1)(rangi@2.2.0)(shiki@4.3.1): + comark-content@https://pkg.pr.new/comark-content@67c137f(@vercel/functions@3.7.6(ws@8.21.1))(beautiful-mermaid@1.1.3)(db0@0.3.4)(ioredis@5.11.1)(rangi@2.2.0)(shiki@4.3.1): dependencies: citty: 0.2.2 comark: 0.6.2(beautiful-mermaid@1.1.3)(rangi@2.2.0)(shiki@4.3.1) diff --git a/server/api/content/[...path].get.ts b/server/api/content/[...path].get.ts index cf2ca9c..c4f39d7 100644 --- a/server/api/content/[...path].get.ts +++ b/server/api/content/[...path].get.ts @@ -5,7 +5,5 @@ export default defineEventHandler(async (event) => { const content = await getProdContent() - await ensureSnapshotContent(content, getRouterParam(event, 'path') ?? '') - return content.handler(toWebRequest(event)) }) diff --git a/server/api/content/blob/[sha]/[...path].get.ts b/server/api/content/blob/[sha]/[...path].get.ts index a6ad6e8..b8ce7a1 100644 --- a/server/api/content/blob/[sha]/[...path].get.ts +++ b/server/api/content/blob/[sha]/[...path].get.ts @@ -21,7 +21,6 @@ export default defineEventHandler(async (event) => { if (sha === getHeadRef()) { const prod = await getProdContent() if (sha === getHeadRef()) { - await ensureSnapshotContent(prod, path) const request = toWebRequest(event) const url = new URL(request.url) url.pathname = url.pathname.replace(`/blob/${rawSha}`, '') @@ -31,7 +30,5 @@ export default defineEventHandler(async (event) => { const content = await getPreviewContent(sha, `/api/content/blob/${sha}`) - await ensureSnapshotContent(content, path) - return await content.handler(toWebRequest(event)) }) diff --git a/server/api/content/tree/[branch]/[...path].get.ts b/server/api/content/tree/[branch]/[...path].get.ts index e454ce5..9f0ef4e 100644 --- a/server/api/content/tree/[branch]/[...path].get.ts +++ b/server/api/content/tree/[branch]/[...path].get.ts @@ -16,7 +16,5 @@ export default defineEventHandler(async (event) => { const sha = await resolveSha(branch, { cacheMisses: true }) const content = await getPreviewContent(sha, `/api/content/tree/${encodeURIComponent(branch)}`) - await ensureSnapshotContent(content, path) - return await content.handler(toWebRequest(event)) }) diff --git a/server/api/revalidate.post.ts b/server/api/revalidate.post.ts index 188d984..bc2b26c 100644 --- a/server/api/revalidate.post.ts +++ b/server/api/revalidate.post.ts @@ -188,13 +188,9 @@ export default defineEventHandler(async (event) => { throw err }) - // Warm the per-SHA body cache so cold instances skip re-parsing from GitHub. - // `metaOnly` became `partial` in comark-content 0.2.0 with no alias and consumers straddle both, - // so send both keys — each version ignores the other's. Not inlined: as a literal, - // excess-property checking rejects whichever key the installed types don't declare. - const full = { partial: false, metaOnly: false } - await headContent.init(full).catch((err) => { - console.error(`${tag} cache warm failed`, err?.message ?? err) + // Warms the per-SHA body cache and persists the snapshot artifact + await warmSnapshot(headContent).catch((err) => { + console.error(`${tag} snapshot warm failed`, err?.message ?? err) }) await useStorage('cache:nuxt:payload').clear() diff --git a/server/utils/content.ts b/server/utils/content.ts index 9dd0cab..c573361 100644 --- a/server/utils/content.ts +++ b/server/utils/content.ts @@ -68,14 +68,12 @@ export async function createSourceContent( } /** - * Snapshot artifacts must dump the full corpus, but the default init is partial (frontmatter only) - * and `cache.snapshot()` only sees bodies already in the cache. Upgrade the instance before serving - * a snapshot — memoized, so bodies parse once per instance (the FTS serve handler has the same guard). + * Fully parse and persist the snapshot artifact into this instance's per-SHA cache. */ -export async function ensureSnapshotContent(content: ComarkContent, path: string): Promise { - if (path.startsWith('snapshot')) { - await content.init({ partial: false }) - } +export async function warmSnapshot(content: ComarkContent): Promise { + await content.init({ partial: false }) + const artifact = await content.cache.snapshot('content', { fresh: false }) + console.log(`[content] snapshot artifact ${artifact ? `${artifact.size} bytes` : 'not produced'}`) } /** Production branch, resolved per request: content pushes skip redeploys (`vercel.json` `ignoreCommand`). */ From 06e5eec209571563b4556c12fdbe37ab9a603813 Mon Sep 17 00:00:00 2001 From: Baptiste Leproux Date: Wed, 19 Aug 2026 17:59:59 +0200 Subject: [PATCH 06/20] app search nav groups --- app/components/AppSearch.vue | 52 ++++++++++++++++++++++++++++++++---- 1 file changed, 47 insertions(+), 5 deletions(-) diff --git a/app/components/AppSearch.vue b/app/components/AppSearch.vue index 0ffe5cc..1114812 100644 --- a/app/components/AppSearch.vue +++ b/app/components/AppSearch.vue @@ -1,17 +1,58 @@ @@ -21,6 +62,7 @@ watch(open, (isOpen) => { :search="search" :search-status="status" :navigation="navigation" + :groups="groups" :transition="false" :loading="status === 'loading'" /> From a783a636e27f66c8a3ff71d1e77270482760664a Mon Sep 17 00:00:00 2001 From: Baptiste Leproux Date: Wed, 19 Aug 2026 18:25:58 +0200 Subject: [PATCH 07/20] debug system --- app/composables/useSearch.ts | 19 +++++++++- app/types/search-worker.ts | 2 + app/workers/search-logger.ts | 72 ++++++++++++++++++++++++++++++++++++ app/workers/search.worker.ts | 45 +++++++++++++++++++--- 4 files changed, 131 insertions(+), 7 deletions(-) create mode 100644 app/workers/search-logger.ts diff --git a/app/composables/useSearch.ts b/app/composables/useSearch.ts index cf0095e..aaac194 100644 --- a/app/composables/useSearch.ts +++ b/app/composables/useSearch.ts @@ -9,6 +9,14 @@ let worker: Worker | undefined let nextId = 0 const pending = new Map void, reject: (error: Error) => void }>() +/** + * Hydration logging switch: `?debug=search` + */ +function searchDebug(): boolean { + if (!import.meta.client) return false + return new URLSearchParams(location.search).get('debug') === 'search' +} + function getWorker(): Worker { if (worker) return worker @@ -18,13 +26,17 @@ function getWorker(): Worker { const message = event.data if (message.type === 'status') { status.value = message.value + if (searchDebug()) console.info(`[search] status -> ${message.value}`) return } const settle = pending.get(message.id) if (!settle) return pending.delete(message.id) if (message.type === 'result') settle.resolve(message.results) - else settle.reject(new Error(message.message)) + else { + if (searchDebug()) console.error(`[search] request ${message.id} failed:`, message.message) + settle.reject(new Error(message.message)) + } } worker.onerror = () => { @@ -73,7 +85,10 @@ export function useSearch() { // Immutable per-commit artifacts, CDN-cached forever. Only unpinned in dev, per the guard above. const apiBase = headSha.value ? `/api/content/blob/${headSha.value}` : '/api/content' - await request({ type: 'warmup', apiBase, origin: location.origin }) + const debug = searchDebug() + if (debug) console.info(`[search] warmup from ${apiBase} (head ${headSha.value ?? 'unpinned'})`) + + await request({ type: 'warmup', apiBase, origin: location.origin, debug }) } catch (error) { status.value = 'error' console.error('[search] could not load the search database', error) diff --git a/app/types/search-worker.ts b/app/types/search-worker.ts index 812bc85..fd1038b 100644 --- a/app/types/search-worker.ts +++ b/app/types/search-worker.ts @@ -11,6 +11,8 @@ export type SearchWorkerPayload = type: 'warmup' apiBase: string origin: string + /** Turns on the worker's hydration logging. Resolved on the main thread, which owns `?debug=search`. */ + debug?: boolean } | { type: 'search', diff --git a/app/workers/search-logger.ts b/app/workers/search-logger.ts new file mode 100644 index 0000000..66790d6 --- /dev/null +++ b/app/workers/search-logger.ts @@ -0,0 +1,72 @@ +/** + * Logging for the search worker: the `?debug=search` switch, the phase-timing helpers, and the + * {@link Logger} handed to `comarkContent()` so the package's own diagnostics come out under this + * prefix. Separate from `search.worker.ts` to keep the hydration path free of instrumentation. + * + * Worker-side only. The main thread has its own `[search]` lines in `useSearch`, which is also where + * the switch is resolved — a worker cannot see the page URL, so the flag arrives with `warmup`. + */ +import type { ContentFile, Logger, RelationalDatabase } from 'comark-content' + +const PREFIX = '[search:worker]' + +let debug = false + +/** Called on every `warmup`; once on, it stays on for the life of the worker. */ +export function setDebug(value: boolean): void { + debug = debug || value +} + +export function isDebug(): boolean { + return debug +} + +export function log(...args: unknown[]): void { + if (debug) console.info(PREFIX, ...args) +} + +/** Milliseconds since `from`, for log lines. */ +export function since(from: number): string { + return `${(performance.now() - from).toFixed(1)}ms` +} + +/** + * Warn and error are deliberately ungated: the FTS plugin reports a missing snapshot through this + * channel, and that failure is otherwise indistinguishable from "the query matched nothing". + */ +export const logger: Logger = { + debug: (tag, ...args) => log(`${tag}:`, ...args), + info: (tag, ...args) => log(`${tag}:`, ...args), + warn: (tag, ...args) => console.warn(`${PREFIX} ${tag}:`, ...args), + error: (tag, ...args) => console.error(`${PREFIX} ${tag}:`, ...args), +} + +/** + * What a decoded artifact holds: a snapshot decodes to the source's items, the manifest to an object + * keyed by path. `with nodes` is the number that matters — the FTS plugin indexes + * `kind === 'document' && nodes?.length`, so a bodies-less (partial) snapshot builds an empty index. + */ +export function describeArtifact(decoded: unknown): string { + if (Array.isArray(decoded)) { + const items = decoded as ContentFile[] + const documents = items.filter((item) => item.meta.kind === 'document') + const withNodes = documents.filter((item) => item.nodes?.length) + return `${items.length} item(s), ${documents.length} document(s), ${withNodes.length} with nodes` + } + const items = (decoded as { items?: Record } | null)?.items + return `${items ? Object.keys(items).length : 0} manifest item(s)` +} + +/** + * Rows in the FTS plugin's index — the one number that separates "nothing was indexed" from "the + * query found nothing", since `search()` catches SQL errors and returns `[]` either way. Reads the + * plugin's private table, so it is a diagnostic, not something to build on. + */ +export async function indexedRows(database: RelationalDatabase, source: string): Promise { + try { + const rows = await database.all<{ n: number }>('SELECT count(*) as n FROM __fts_search WHERE source = ?', [source]) + return rows?.[0]?.n ?? 'unknown' + } catch (error) { + return `unknown (${error instanceof Error ? error.message : String(error)})` + } +} diff --git a/app/workers/search.worker.ts b/app/workers/search.worker.ts index ace1f0c..093144b 100644 --- a/app/workers/search.worker.ts +++ b/app/workers/search.worker.ts @@ -9,10 +9,11 @@ * * Not a Nuxt-scanned directory, so nothing here is auto-imported. */ -import { comarkContent } from 'comark-content' +import { comarkContent, readArtifact } from 'comark-content' import sqliteWasm from 'comark-content/database/sqlite-wasm' import sqliteFullTextSearch from 'comark-content/plugins/sqlite-full-text-search' import { ofetch } from 'ofetch' +import { describeArtifact, indexedRows, isDebug, log, logger, setDebug, since } from './search-logger' import type { CacheArtifact, ComarkContent } from 'comark-content' import type { SqliteFullTextSearchMethods } from 'comark-content/plugins/sqlite-full-text-search' import type { SearchWorkerRequest, SearchWorkerResponse } from '../types/search-worker' @@ -40,27 +41,58 @@ function setStatus(value: Exclude): void { * a message behind, so two warmups fired in the same tick would both get through it. */ async function loadDatabase(apiBase: string, origin: string): Promise { - if (status === 'loading' || status === 'ready') return + if (status === 'loading' || status === 'ready') { + log(`warmup ignored — already ${status}`) + return + } setStatus('loading') + const started = performance.now() try { - const fetchArtifact = (path: string) => ofetch(new URL(path, origin).href) + const fetchArtifact = async (path: string): Promise => { + const url = new URL(path, origin).href + const fetchStarted = performance.now() + try { + const artifact = await ofetch(url) + if (isDebug()) { + let contents: string + try { + contents = describeArtifact(await readArtifact(artifact)) + } catch (error) { + contents = `undecodable: ${error instanceof Error ? error.message : String(error)}` + } + log(`fetched ${path} in ${since(fetchStarted)} — ${artifact?.size ?? 0} bytes, ${contents}`) + } + return artifact + } catch (error) { + log(`failed ${path} after ${since(fetchStarted)}`, error) + throw error + } + } + // Held rather than inlined into the plugin so the row count below can query the index directly. + const database = sqliteWasm() const content = comarkContent({ cache: { loadManifest: () => fetchArtifact(`${apiBase}/manifest.json`), loadSnapshot: (source: string) => fetchArtifact(`${apiBase}/snapshot/${source}.json`), }, - plugins: [sqliteFullTextSearch({ database: sqliteWasm() })], + plugins: [sqliteFullTextSearch({ database })], + logger, }) await content.init() + + const indexStarted = performance.now() await content.search(['content'], '') // pulls the snapshot in and builds the FTS index + log(`index built in ${since(indexStarted)} — ${await indexedRows(database, 'content')} row(s)`) instance = content setStatus('ready') + log(`ready in ${since(started)}`) } catch (error) { setStatus('error') + log(`hydration failed after ${since(started)}`, error) throw error } } @@ -69,11 +101,13 @@ self.onmessage = async (event: MessageEvent) => { const request = event.data try { if (request.type === 'warmup') { + setDebug(request.debug === true) await loadDatabase(request.apiBase, request.origin) post({ type: 'result', id: request.id, results: [] }) return } + const queryStarted = performance.now() const results = instance ? await instance.search(['content'], request.query, { limit: 25, @@ -81,9 +115,10 @@ self.onmessage = async (event: MessageEvent) => { ...request.opts, }) : [] + if (!instance) log(`dropped query "${request.query}" — no instance yet (status ${status})`) + else log(`query "${request.query}" -> ${results.length} result(s) in ${since(queryStarted)}`) post({ type: 'result', id: request.id, results }) } catch (error) { - // Serialized rather than cloned: plugin errors can carry non-transferable properties. post({ type: 'error', id: request.id, message: error instanceof Error ? error.message : String(error) }) } } From d1b2cbc4f9435609d7b50b5eec8c4594f6af15e5 Mon Sep 17 00:00:00 2001 From: Baptiste Leproux Date: Wed, 19 Aug 2026 18:42:05 +0200 Subject: [PATCH 08/20] pnpm lock file --- pnpm-lock.yaml | 8 ++++---- server/api/revalidate.post.ts | 4 +--- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 88180c8..a6bc5a0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -380,13 +380,13 @@ packages: resolution: {integrity: sha512-3PxTH8itZzltK0U9jTwVVnjLXvnDYuq3m+QXsHkENxWiPRh4WaoLcs1SQjqgZ55kS+QyirpH5BVwzP2gMVG6EQ==} '@comark/nuxt@https://pkg.pr.new/@comark/nuxt@af8d3e8': - resolution: {tarball: https://pkg.pr.new/@comark/nuxt@af8d3e8} + resolution: {integrity: sha512-DB1uYeorYZOJGqEIqxkGzOtnW2Zq2t4Ov9dOmi/H9qAymwPXiON1esTAne72jaJ+pBnMKaFat5JDObbNe0PDUA==, tarball: https://pkg.pr.new/@comark/nuxt@af8d3e8} version: 0.6.2 peerDependencies: nuxt: ^4.0.0 '@comark/vue@https://pkg.pr.new/comarkdown/comark/@comark/vue@af8d3e8': - resolution: {tarball: https://pkg.pr.new/comarkdown/comark/@comark/vue@af8d3e8} + resolution: {integrity: sha512-Rsbr+USFlvSJOgDGOG61yQtS5V3Ms7maGofb9RnaxLHdVlBqewGlkhdS14xRz9ONOjCg717PumDMdz4IpundWA==, tarball: https://pkg.pr.new/comarkdown/comark/@comark/vue@af8d3e8} version: 0.6.2 peerDependencies: beautiful-mermaid: ^1.1.3 @@ -3600,7 +3600,7 @@ packages: optional: true comark@https://pkg.pr.new/comark@af8d3e8: - resolution: {tarball: https://pkg.pr.new/comark@af8d3e8} + resolution: {integrity: sha512-w4UJSGwzUf+W8qp2eGxf7dCwJgQPVJvTM8GLpibYHRelLImjwVEMA10pkGNQOumdi8QgTIDWWcba+JO1CFrTcg==, tarball: https://pkg.pr.new/comark@af8d3e8} version: 0.6.2 peerDependencies: beautiful-mermaid: ^1.1.3 @@ -3618,7 +3618,7 @@ packages: optional: true comark@https://pkg.pr.new/comarkdown/comark/comark@af8d3e8: - resolution: {tarball: https://pkg.pr.new/comarkdown/comark/comark@af8d3e8} + resolution: {integrity: sha512-w4UJSGwzUf+W8qp2eGxf7dCwJgQPVJvTM8GLpibYHRelLImjwVEMA10pkGNQOumdi8QgTIDWWcba+JO1CFrTcg==, tarball: https://pkg.pr.new/comarkdown/comark/comark@af8d3e8} version: 0.6.2 peerDependencies: beautiful-mermaid: ^1.1.3 diff --git a/server/api/revalidate.post.ts b/server/api/revalidate.post.ts index 8977ff4..214730e 100644 --- a/server/api/revalidate.post.ts +++ b/server/api/revalidate.post.ts @@ -150,9 +150,7 @@ export default defineEventHandler(async (event) => { // URL the browser loads (`…/_payload.json?`). const buildId = useRuntimeConfig(event).app.buildId - // Any content change invalidates the llms indexes and the feed. The search artifacts need no - // purge: the client hydrates from SHA-pinned `/api/content/blob//*` URLs, so a new head - // simply reads from new URLs and the old entries become unreachable. + // Any content change invalidates the llms indexes and the feed. const paths = new Set(['/llms.txt', '/llms-full.txt', '/rss.xml']) for (const f of changedFiles) { const pageUrl = pageUrlForPath(f) From 060607b5007b01d64d1383ff57e2fa71ba1c67d2 Mon Sep 17 00:00:00 2001 From: Baptiste Leproux Date: Wed, 19 Aug 2026 18:43:52 +0200 Subject: [PATCH 09/20] up --- app/components/AppSearch.vue | 3 --- 1 file changed, 3 deletions(-) diff --git a/app/components/AppSearch.vue b/app/components/AppSearch.vue index 1114812..f12a890 100644 --- a/app/components/AppSearch.vue +++ b/app/components/AppSearch.vue @@ -5,11 +5,8 @@ const props = defineProps<{ navigation: NavigationItem[] }>() -// Setup runs on the server too (the `ClientOnly` is inside, around the palette), so `useSearch`'s -// head-sha `useAsyncData` still resolves during SSR and ships in the payload. const { search, status } = useSearch() - const appConfig = useAppConfig() interface PageItem { From 4017871dde20675f5d7cb428ef73be714620b131 Mon Sep 17 00:00:00 2001 From: Baptiste Leproux Date: Thu, 20 Aug 2026 14:47:32 +0200 Subject: [PATCH 10/20] up --- server/utils/content.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/utils/content.ts b/server/utils/content.ts index b58d62c..07f95fd 100644 --- a/server/utils/content.ts +++ b/server/utils/content.ts @@ -73,7 +73,7 @@ export async function createSourceContent( */ export async function warmSnapshot(content: ComarkContent): Promise { await content.init({ partial: false }) - const artifact = await content.cache.snapshot('content', { fresh: false }) + const artifact = await content.cache.snapshot('content') console.log(`[content] snapshot artifact ${artifact ? `${artifact.size} bytes` : 'not produced'}`) } From 6b95a046545ab4d4cd25453f6afa114662f0806f Mon Sep 17 00:00:00 2001 From: Baptiste Leproux Date: Thu, 20 Aug 2026 16:28:06 +0200 Subject: [PATCH 11/20] use resolveContentSha --- server/api/content/head.get.ts | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/server/api/content/head.get.ts b/server/api/content/head.get.ts index 11c3e14..485f81c 100644 --- a/server/api/content/head.get.ts +++ b/server/api/content/head.get.ts @@ -1,8 +1,9 @@ /** - * The commit SHA production content is pinned to, or `null` in dev + * The commit SHA production content is pinned to, or `null` in dev. */ -export default defineEventHandler(async () => { - await getProdContent() +export default defineEventHandler(async (event) => { + if (import.meta.dev) return { sha: null } - return { sha: import.meta.dev ? null : getHeadRef() } + const { contentDir } = useRuntimeConfig(event).docs + return { sha: await resolveContentSha(targetBranch(), contentDir) } }) From fccb570168029336294cfd06e18073b70bab7a5c Mon Sep 17 00:00:00 2001 From: Baptiste Leproux Date: Thu, 27 Aug 2026 10:51:06 +0200 Subject: [PATCH 12/20] up tests --- test/content-contract.test.ts | 74 ++++++++++++++++++++++++++--------- 1 file changed, 56 insertions(+), 18 deletions(-) diff --git a/test/content-contract.test.ts b/test/content-contract.test.ts index 48b3ca6..46869bc 100644 --- a/test/content-contract.test.ts +++ b/test/content-contract.test.ts @@ -7,10 +7,12 @@ */ import { fileURLToPath } from 'node:url' import { describe, expect, it } from 'vitest' -import { comarkContent, defineContentPlugin } from 'comark-content' +import { comarkContent, readArtifact } from 'comark-content' import fsSource from 'comark-content/sources/fs' import githubSource from 'comark-content/sources/github' -import { createContentClient, defineContentClientPlugin } from 'comark-content/client' +import { createContentClient } from 'comark-content/client' +import sqliteWasm from 'comark-content/database/sqlite-wasm' +import sqliteFullTextSearch from 'comark-content/plugins/sqlite-full-text-search' import memoryDriver from 'unstorage/drivers/memory' const fixture = fileURLToPath(new URL('./fixtures/content-contract', import.meta.url)) @@ -33,7 +35,16 @@ function createFixtureContent() { describe('comark-content contract', () => { it('exposes every entrypoint the layer imports', () => { - for (const entry of [comarkContent, defineContentPlugin, fsSource, githubSource, createContentClient, defineContentClientPlugin]) { + for (const entry of [ + comarkContent, + readArtifact, + fsSource, + githubSource, + createContentClient, + // Browser-only at runtime, but the subpaths resolve under node — enough to catch a rename. + sqliteWasm, + sqliteFullTextSearch, + ]) { expect(typeof entry).toBe('function') } }) @@ -66,24 +77,51 @@ describe('comark-content contract', () => { expect(cached!.nodes.length).toBeGreaterThan(0) }) - it('dispatches plugin serve handlers through content.handler', async () => { - // Mirrors the `search-sections` plugin in server/utils/content.ts. - const ping = defineContentPlugin(() => ({ - name: 'ping', - setup(ctx) { - ctx.addServeHandler('ping', async () => Response.json({ ok: true })) - }, - })) + it('produces a snapshot artifact on the revalidate warm-up', async () => { + const content = createFixtureContent() + await content.init(full) + + // `warmSnapshot` logs `artifact.size`, so a shape change there degrades to "not produced". + const artifact = await content.cache.snapshot('content') + expect(artifact).not.toBeNull() + expect(artifact!.size).toBeGreaterThan(0) + expect(Object.keys(await readArtifact(artifact!)).length).toBeGreaterThan(0) + }) + + it('serves the manifest and snapshot artifacts through content.handler', async () => { + const content = createFixtureContent() + await content.init(full) + + // The exact paths the search worker fetches and `modules/config.ts` declares ISR rules for. + for (const path of ['manifest.json', 'snapshot/content.json']) { + const response = await content.handler(new Request(`http://localhost/api/content/${path}`)) + expect(response.status, path).toBe(200) + expect(Object.keys(await response.json()), path).toContain('checksum') + } + }) - const content = comarkContent({ - sources: { content: fsSource(fixture) }, - cache: { driver: memoryDriver() }, - plugins: [ping()], + it('hydrates a sourceless instance from those artifacts', async () => { + const server = createFixtureContent() + await server.init(full) + + const fetchArtifact = async (path: string) => + await (await server.handler(new Request(`http://localhost/api/content/${path}`))).json() + + // What `app/workers/search.worker.ts` does: no sources, no driver — the whole client-side + // search feature is this round-trip, so a break here is a silently empty search index. + const client = comarkContent({ + cache: { + loadManifest: () => fetchArtifact('manifest.json'), + loadSnapshot: (source: string) => fetchArtifact(`snapshot/${source}.json`), + }, }) + await client.init() - const response = await content.handler(new Request('http://localhost/api/content/ping')) + expect(Object.keys(client.manifest.items)).toEqual(['/']) - expect(response.status).toBe(200) - expect(await response.json()).toEqual({ ok: true }) + // Bodies have to arrive parsed: the client has no source to read a document from. + const doc = await client.get('/') + expect(doc?.data?.title).toBe('Contract fixture') + expect(doc?.nodes?.length).toBeGreaterThan(0) }) }) From ba0354ac104ecbb904482fa6bcf28f546fd062bc Mon Sep 17 00:00:00 2001 From: Baptiste Leproux Date: Thu, 27 Aug 2026 11:50:43 +0200 Subject: [PATCH 13/20] fix lock --- pnpm-lock.yaml | 1126 ++++++++++++++++++++++++++++-------------------- 1 file changed, 654 insertions(+), 472 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e148859..ac7f27f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -19,7 +19,7 @@ importers: version: 4.0.79(vue@3.5.40(typescript@6.0.3))(zod@4.4.3) '@comark/nuxt': specifier: https://pkg.pr.new/@comark/nuxt@af8d3e8 - version: https://pkg.pr.new/@comark/nuxt@af8d3e8(25cb956dbc2075172f8dcb9a63a44cd8) + version: https://pkg.pr.new/@comark/nuxt@af8d3e8(f98d0a277b4d9d8db8d0f3c2b2f2dfd0) '@iconify-json/lucide': specifier: ^1.2.125 version: 1.2.126 @@ -34,19 +34,19 @@ importers: version: 5.0.1(vue@3.5.40(typescript@6.0.3)) '@nuxt/kit': specifier: ^4.5.2 - version: 4.5.2(magic-string@1.2.2)(magicast@0.5.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) + version: 4.5.2(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) '@nuxt/ui': specifier: ^4.11.0 - version: 4.11.0(6838e9221379a9b0d70637eede91d09f) + version: 4.11.0(a1e579ddea048f2c501b496bf046bd3b) '@nuxtjs/mcp-toolkit': specifier: ^0.18.1 - version: 0.18.1(@vue/compiler-sfc@3.5.41)(h3@1.15.11)(magic-string@1.2.2)(magicast@0.5.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(rollup@4.62.2)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3))(zod@4.4.3) + version: 0.18.1(@vue/compiler-sfc@3.5.41)(h3@1.15.11)(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(rollup@4.62.2)(supports-color@10.2.2)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3))(zod@4.4.3) '@nuxtjs/robots': specifier: ^6.2.0 - version: 6.2.0(cc4380165d9551c2746d0263df7c88c9) + version: 6.2.0(d17f61d17c502256d5a1cd440e407773) '@nuxtjs/sitemap': specifier: ^8.5.0 - version: 8.5.0(cc4380165d9551c2746d0263df7c88c9) + version: 8.5.0(d17f61d17c502256d5a1cd440e407773) '@octokit/webhooks-methods': specifier: ^6.0.0 version: 6.0.0 @@ -61,7 +61,7 @@ importers: version: 3.53.0-build1 '@vercel/analytics': specifier: ^2.0.1 - version: 2.0.1(nuxt@4.5.2(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7))(@oxc-project/types@0.146.0)(@types/node@26.1.1)(@vercel/functions@3.9.5(ws@8.21.1))(@vitejs/devtools-kit@0.4.8(@modelcontextprotocol/sdk@1.30.0(zod@4.4.3))(cac@7.0.0)(srvx@0.11.22)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(@vue/compiler-sfc@3.5.41)(cac@7.0.0)(db0@0.3.4)(esbuild@0.28.1)(eslint@10.9.1(jiti@2.7.0))(ioredis@5.11.1)(lightningcss@1.33.0)(magicast@0.5.4)(optionator@0.9.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(rollup-plugin-visualizer@7.0.1(rolldown@1.2.5)(rollup@4.62.2))(rollup@4.62.2)(srvx@0.11.22)(terser@5.49.0)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue-tsc@3.3.11(typescript@6.0.3))(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) + version: 2.0.1(987d2a12eebc4553111f11af1953ade6) '@vercel/functions': specifier: ^3.9.5 version: 3.9.5(ws@8.21.1) @@ -70,10 +70,10 @@ importers: version: 1.5.1(@opentelemetry/api@1.9.1) '@vercel/otel': specifier: ^2.1.3 - version: 2.1.3(@opentelemetry/api-logs@0.221.0)(@opentelemetry/api@1.9.1)(@opentelemetry/instrumentation@0.221.0(@opentelemetry/api@1.9.1))(@opentelemetry/resources@2.10.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-logs@0.221.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-metrics@2.10.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.10.0(@opentelemetry/api@1.9.1)) + version: 2.1.3(@opentelemetry/api-logs@0.221.0)(@opentelemetry/api@1.9.1)(@opentelemetry/instrumentation@0.221.0(@opentelemetry/api@1.9.1)(supports-color@10.2.2))(@opentelemetry/resources@2.10.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-logs@0.221.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-metrics@2.10.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.10.0(@opentelemetry/api@1.9.1)) '@vercel/speed-insights': specifier: ^2.0.0 - version: 2.0.0(nuxt@4.5.2(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7))(@oxc-project/types@0.146.0)(@types/node@26.1.1)(@vercel/functions@3.9.5(ws@8.21.1))(@vitejs/devtools-kit@0.4.8(@modelcontextprotocol/sdk@1.30.0(zod@4.4.3))(cac@7.0.0)(srvx@0.11.22)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(@vue/compiler-sfc@3.5.41)(cac@7.0.0)(db0@0.3.4)(esbuild@0.28.1)(eslint@10.9.1(jiti@2.7.0))(ioredis@5.11.1)(lightningcss@1.33.0)(magicast@0.5.4)(optionator@0.9.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(rollup-plugin-visualizer@7.0.1(rolldown@1.2.5)(rollup@4.62.2))(rollup@4.62.2)(srvx@0.11.22)(terser@5.49.0)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue-tsc@3.3.11(typescript@6.0.3))(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) + version: 2.0.0(987d2a12eebc4553111f11af1953ade6) '@vueuse/core': specifier: ^14.4.0 version: 14.4.0(vue@3.5.40(typescript@6.0.3)) @@ -88,7 +88,7 @@ importers: version: https://pkg.pr.new/comark@af8d3e8(beautiful-mermaid@1.1.3)(rangi@2.2.0)(shiki@4.3.1) comark-content: specifier: https://pkg.pr.new/comark-content@67c137f - version: https://pkg.pr.new/comark-content@67c137f(@vercel/functions@3.9.5(ws@8.21.1))(beautiful-mermaid@1.1.3)(db0@0.3.4)(ioredis@5.11.1)(rangi@2.2.0)(shiki@4.3.1) + version: https://pkg.pr.new/comark-content@67c137f(@vercel/functions@3.9.5(ws@8.21.1))(beautiful-mermaid@1.1.3)(db0@0.3.4)(ioredis@5.11.1(supports-color@10.2.2))(rangi@2.2.0)(shiki@4.3.1) defu: specifier: ^6.1.7 version: 6.1.7 @@ -103,13 +103,13 @@ importers: version: 2.4.0(@vueuse/core@14.4.0(vue@3.5.40(typescript@6.0.3)))(vue@3.5.40(typescript@6.0.3)) nuxt-llms: specifier: ^0.2.0 - version: 0.2.0(magic-string@1.2.2)(magicast@0.5.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) + version: 0.2.0(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) nuxt-og-image: specifier: ^6.7.8 - version: 6.7.8(0004b4d4a41c6c6880ce43c9acb891e8) + version: 6.7.8(a4630852397788cad97a18d81b61a25b) nuxt-seo-utils: specifier: ^8.4.2 - version: 8.4.2(a9f028144601adfa5175af4335b08671) + version: 8.4.2(aa63c252ee2d276530b76c2cc8a10f03) pathe: specifier: ^2.0.3 version: 2.0.3 @@ -127,17 +127,17 @@ importers: version: 1.6.4 unstorage: specifier: ^1.17.5 - version: 1.17.5(@vercel/functions@3.9.5(ws@8.21.1))(db0@0.3.4)(ioredis@5.11.1) + version: 1.17.5(@vercel/functions@3.9.5(ws@8.21.1))(db0@0.3.4)(ioredis@5.11.1(supports-color@10.2.2)) zod: specifier: ^4.4.3 version: 4.4.3 devDependencies: '@nuxt/devtools-kit': specifier: 4.0.0-alpha.9 - version: 4.0.0-alpha.9(magic-string@1.2.2)(magicast@0.5.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) + version: 4.0.0-alpha.9(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) '@nuxt/eslint-config': specifier: ^1.17.0 - version: 1.17.0(@typescript-eslint/utils@8.68.0(eslint@10.9.1(jiti@2.7.0))(typescript@6.0.3))(@vue/compiler-sfc@3.5.41)(eslint@10.9.1(jiti@2.7.0))(typescript@6.0.3) + version: 1.17.0(@typescript-eslint/utils@8.68.0(eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3))(@vue/compiler-sfc@3.5.41)(eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3) '@opentelemetry/exporter-trace-otlp-proto': specifier: ^0.221.0 version: 0.221.0(@opentelemetry/api@1.9.1) @@ -152,10 +152,10 @@ importers: version: 2.10.0(@opentelemetry/api@1.9.1) eslint: specifier: ^10.9.0 - version: 10.9.1(jiti@2.7.0) + version: 10.9.1(jiti@2.7.0)(supports-color@10.2.2) nuxt: specifier: ^4.5.2 - version: 4.5.2(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7))(@oxc-project/types@0.146.0)(@types/node@26.1.1)(@vercel/functions@3.9.5(ws@8.21.1))(@vitejs/devtools-kit@0.4.8(@modelcontextprotocol/sdk@1.30.0(zod@4.4.3))(cac@7.0.0)(srvx@0.11.22)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(@vue/compiler-sfc@3.5.41)(cac@7.0.0)(db0@0.3.4)(esbuild@0.28.1)(eslint@10.9.1(jiti@2.7.0))(ioredis@5.11.1)(lightningcss@1.33.0)(magicast@0.5.4)(optionator@0.9.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(rollup-plugin-visualizer@7.0.1(rolldown@1.2.5)(rollup@4.62.2))(rollup@4.62.2)(srvx@0.11.22)(terser@5.49.0)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue-tsc@3.3.11(typescript@6.0.3))(yaml@2.9.0) + version: 4.5.2(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@oxc-project/types@0.146.0)(@types/node@26.1.1)(@vercel/functions@3.9.5(ws@8.21.1))(@vitejs/devtools-kit@0.4.8(@modelcontextprotocol/sdk@1.30.0(supports-color@10.2.2)(zod@4.4.3))(cac@7.0.0)(srvx@0.11.22)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(@vue/compiler-sfc@3.5.41)(cac@7.0.0)(db0@0.3.4)(esbuild@0.28.1)(eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2))(ioredis@5.11.1(supports-color@10.2.2))(lightningcss@1.33.0)(magicast@0.5.3)(optionator@0.9.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(rollup-plugin-visualizer@7.0.1(rolldown@1.2.5)(rollup@4.62.2))(rollup@4.62.2)(srvx@0.11.22)(supports-color@10.2.2)(terser@5.49.0)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue-tsc@3.3.11(typescript@6.0.3))(yaml@2.9.0) typescript: specifier: ^6.0.3 version: 6.0.3 @@ -173,11 +173,11 @@ importers: version: link:.. nuxt: specifier: ^4.5.0 - version: 4.5.1(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7))(@modelcontextprotocol/sdk@1.30.0(zod@4.4.3))(@types/node@26.1.1)(@vercel/functions@3.9.5(ws@8.21.1))(@vue/compiler-sfc@3.5.41)(cac@7.0.0)(db0@0.3.4)(esbuild@0.28.1)(eslint@10.9.1(jiti@2.7.0))(ioredis@5.11.1)(lightningcss@1.33.0)(magicast@0.5.3)(optionator@0.9.4)(oxc-parser@0.140.0)(rollup-plugin-visualizer@7.0.1(rolldown@1.2.0)(rollup@4.62.2))(rollup@4.62.2)(srvx@0.11.22)(terser@5.49.0)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue-tsc@3.3.11(typescript@6.0.3))(yaml@2.9.0) + version: 4.5.1(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@modelcontextprotocol/sdk@1.30.0(supports-color@10.2.2)(zod@4.4.3))(@types/node@26.1.1)(@vercel/functions@3.9.5(ws@8.21.1))(@vue/compiler-sfc@3.5.41)(cac@7.0.0)(db0@0.3.4)(esbuild@0.28.1)(eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2))(ioredis@5.11.1(supports-color@10.2.2))(lightningcss@1.33.0)(magicast@0.5.4)(optionator@0.9.4)(oxc-parser@0.140.0)(rollup-plugin-visualizer@7.0.1(rolldown@1.2.0)(rollup@4.62.2))(rollup@4.62.2)(srvx@0.11.22)(supports-color@10.2.2)(terser@5.49.0)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue-tsc@3.3.11(typescript@6.0.3))(yaml@2.9.0) devDependencies: nuxtseo-layer-devtools: specifier: ^5.3.6 - version: 5.3.6(2fff166b9526daf99f277f7bd1b6ab1f) + version: 5.3.6(83476237c7b4e99d78d0fd20708e3185) packages: @@ -395,13 +395,13 @@ packages: resolution: {integrity: sha512-3PxTH8itZzltK0U9jTwVVnjLXvnDYuq3m+QXsHkENxWiPRh4WaoLcs1SQjqgZ55kS+QyirpH5BVwzP2gMVG6EQ==} '@comark/nuxt@https://pkg.pr.new/@comark/nuxt@af8d3e8': - resolution: {tarball: https://pkg.pr.new/@comark/nuxt@af8d3e8} + resolution: {integrity: sha512-DB1uYeorYZOJGqEIqxkGzOtnW2Zq2t4Ov9dOmi/H9qAymwPXiON1esTAne72jaJ+pBnMKaFat5JDObbNe0PDUA==, tarball: https://pkg.pr.new/@comark/nuxt@af8d3e8} version: 0.6.2 peerDependencies: nuxt: ^4.0.0 '@comark/vue@https://pkg.pr.new/comarkdown/comark/@comark/vue@af8d3e8': - resolution: {tarball: https://pkg.pr.new/comarkdown/comark/@comark/vue@af8d3e8} + resolution: {integrity: sha512-Rsbr+USFlvSJOgDGOG61yQtS5V3Ms7maGofb9RnaxLHdVlBqewGlkhdS14xRz9ONOjCg717PumDMdz4IpundWA==, tarball: https://pkg.pr.new/comarkdown/comark/@comark/vue@af8d3e8} version: 0.6.2 peerDependencies: beautiful-mermaid: ^1.1.3 @@ -1867,6 +1867,9 @@ packages: '@poppinss/exception@1.2.3': resolution: {integrity: sha512-dCED+QRChTVatE9ibtoaxc+WkdzOSjYTKi/+uacHWIsfodVfpsueo3+DKpgU5Px8qXjgmXkSvhXvSCz3fnP9lw==} + '@quansync/fs@1.0.0': + resolution: {integrity: sha512-4TJ3DFtlf1L5LDMaM6CanJ/0lckGNtJcMjQ1NAV6zDmA0tEHKZtxNKin8EgPaVX1YzljbxckyT2tJrpQKAtngQ==} + '@resvg/resvg-js-android-arm-eabi@2.6.2': resolution: {integrity: sha512-FrJibrAk6v29eabIPgcTUMPXiEz8ssrAk7TXxsiZzww9UTQ1Z5KAbFJs+Z0Ez+VZTYgnE5IQJqBcoSiMebtPHA==} engines: {node: '>= 10'} @@ -3058,6 +3061,12 @@ packages: webpack: optional: true + '@unocss/config@66.7.5': + resolution: {integrity: sha512-dkPl9glhEahJ+Xoja5ZseKKnH+vZaeaKQzg8b0otcKcPPNrHQgu1nu3QgfeOjnXOGrjZIotHwUeVtt4ZA2Skgg==} + + '@unocss/core@66.7.5': + resolution: {integrity: sha512-UdJb8MiMywcau8QrWEVgUAz0kvoFHyR+sACwYCgmBh/BpKJGyR/zw/Ys3wvysbm0f+i/20VGBex/QQxYVlzdyQ==} + '@unrs/resolver-binding-android-arm-eabi@1.12.2': resolution: {integrity: sha512-g5T90pqg1bo/7mytQx6F4iBNC0Wsh9cu+z9veDbFjc7HjpesJFWD7QMS0NGStXM075+7dJPPVvBbpZlnrdpi/w==} cpu: [arm] @@ -3353,6 +3362,11 @@ packages: '@volar/typescript@2.4.28': resolution: {integrity: sha512-Ja6yvWrbis2QtN4ClAKreeUZPVYMARDYZl9LMEv1iQ1QdepB6wn0jTRxA9MftYmYa4DQ4k/DaSZpFPUfxl8giw==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true '@vue-macros/common@3.1.4': resolution: {integrity: sha512-/5Fv+6DgIcM9ajY05ZmKBv+LMX1M9A0X+IUwDRVdt67ciw8OV9bvG2r34p3RiEadlsQybjhKPRKNXDC8Bp23cw==} @@ -3903,6 +3917,9 @@ packages: color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + colorette@2.0.20: + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + colortranslator@5.0.0: resolution: {integrity: sha512-Z3UPUKasUVDFCDYAjP2fmlVRf1jFHJv1izAmPjiOa0OCIw1W7iC8PZ2GsoDa8uZv+mKyWopxxStT9q05+27h7w==} @@ -3929,7 +3946,7 @@ packages: optional: true comark@https://pkg.pr.new/comark@af8d3e8: - resolution: {tarball: https://pkg.pr.new/comark@af8d3e8} + resolution: {integrity: sha512-w4UJSGwzUf+W8qp2eGxf7dCwJgQPVJvTM8GLpibYHRelLImjwVEMA10pkGNQOumdi8QgTIDWWcba+JO1CFrTcg==, tarball: https://pkg.pr.new/comark@af8d3e8} version: 0.6.2 peerDependencies: beautiful-mermaid: ^1.1.3 @@ -3947,7 +3964,7 @@ packages: optional: true comark@https://pkg.pr.new/comarkdown/comark/comark@af8d3e8: - resolution: {tarball: https://pkg.pr.new/comarkdown/comark/comark@af8d3e8} + resolution: {integrity: sha512-w4UJSGwzUf+W8qp2eGxf7dCwJgQPVJvTM8GLpibYHRelLImjwVEMA10pkGNQOumdi8QgTIDWWcba+JO1CFrTcg==, tarball: https://pkg.pr.new/comarkdown/comark/comark@af8d3e8} version: 0.6.2 peerDependencies: beautiful-mermaid: ^1.1.3 @@ -6263,6 +6280,9 @@ packages: quansync@0.2.11: resolution: {integrity: sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==} + quansync@1.0.0: + resolution: {integrity: sha512-5xZacEEufv3HSTPQuchrvV6soaiACMFnq1H8wkVioctoH3TRha9Sz66lOxRwPK/qZj7HPiSveih9yAyh98gvqA==} + queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} @@ -6855,6 +6875,12 @@ packages: ultrahtml@1.7.0: resolution: {integrity: sha512-2xRd0VHoAQE4M+vF/DvFFB7pUV0ZxTW1TLi7lHQWnF/Sb5TPeEUV/l+hxcNnGO00ZXGnR0voCMmYRKQf+rvJ2g==} + unconfig-core@7.5.0: + resolution: {integrity: sha512-Su3FauozOGP44ZmKdHy2oE6LPjk51M/TRRjHv2HNCWiDvfvCoxC2lno6jevMA91MYAdCdwP05QnWdWpSbncX/w==} + + unconfig@7.5.0: + resolution: {integrity: sha512-oi8Qy2JV4D3UQ0PsopR28CzdQ3S/5A1zwsUwp/rosSbfhJ5z7b90bIyTwi/F7hCLD4SGcZVjDzd4XoUQcEanvA==} + uncrypto@0.1.3: resolution: {integrity: sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==} @@ -7644,20 +7670,20 @@ snapshots: '@babel/compat-data@7.29.7': {} - '@babel/core@7.29.7': + '@babel/core@7.29.7(supports-color@10.2.2)': dependencies: '@babel/code-frame': 7.29.7 '@babel/generator': 7.29.7 '@babel/helper-compilation-targets': 7.29.7 - '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7) + '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) '@babel/helpers': 7.29.7 '@babel/parser': 7.29.7 '@babel/template': 7.29.7 - '@babel/traverse': 7.29.7 + '@babel/traverse': 7.29.7(supports-color@10.2.2) '@babel/types': 7.29.7 '@jridgewell/remapping': 2.3.5 convert-source-map: 2.0.0 - debug: 4.4.3 + debug: 4.4.3(supports-color@10.2.2) gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -7693,41 +7719,41 @@ snapshots: lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-create-class-features-plugin@7.29.7(@babel/core@7.29.7)': + '@babel/helper-create-class-features-plugin@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: - '@babel/core': 7.29.7 + '@babel/core': 7.29.7(supports-color@10.2.2) '@babel/helper-annotate-as-pure': 7.29.7 - '@babel/helper-member-expression-to-functions': 7.29.7 + '@babel/helper-member-expression-to-functions': 7.29.7(supports-color@10.2.2) '@babel/helper-optimise-call-expression': 7.29.7 - '@babel/helper-replace-supers': 7.29.7(@babel/core@7.29.7) - '@babel/helper-skip-transparent-expression-wrappers': 7.29.7 - '@babel/traverse': 7.29.7 + '@babel/helper-replace-supers': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) + '@babel/helper-skip-transparent-expression-wrappers': 7.29.7(supports-color@10.2.2) + '@babel/traverse': 7.29.7(supports-color@10.2.2) semver: 6.3.1 transitivePeerDependencies: - supports-color '@babel/helper-globals@7.29.7': {} - '@babel/helper-member-expression-to-functions@7.29.7': + '@babel/helper-member-expression-to-functions@7.29.7(supports-color@10.2.2)': dependencies: - '@babel/traverse': 7.29.7 + '@babel/traverse': 7.29.7(supports-color@10.2.2) '@babel/types': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/helper-module-imports@7.29.7': + '@babel/helper-module-imports@7.29.7(supports-color@10.2.2)': dependencies: - '@babel/traverse': 7.29.7 + '@babel/traverse': 7.29.7(supports-color@10.2.2) '@babel/types': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.29.7(@babel/core@7.29.7)': + '@babel/helper-module-transforms@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: - '@babel/core': 7.29.7 - '@babel/helper-module-imports': 7.29.7 + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-module-imports': 7.29.7(supports-color@10.2.2) '@babel/helper-validator-identifier': 7.29.7 - '@babel/traverse': 7.29.7 + '@babel/traverse': 7.29.7(supports-color@10.2.2) transitivePeerDependencies: - supports-color @@ -7737,18 +7763,18 @@ snapshots: '@babel/helper-plugin-utils@7.29.7': {} - '@babel/helper-replace-supers@7.29.7(@babel/core@7.29.7)': + '@babel/helper-replace-supers@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: - '@babel/core': 7.29.7 - '@babel/helper-member-expression-to-functions': 7.29.7 + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-member-expression-to-functions': 7.29.7(supports-color@10.2.2) '@babel/helper-optimise-call-expression': 7.29.7 - '@babel/traverse': 7.29.7 + '@babel/traverse': 7.29.7(supports-color@10.2.2) transitivePeerDependencies: - supports-color - '@babel/helper-skip-transparent-expression-wrappers@7.29.7': + '@babel/helper-skip-transparent-expression-wrappers@7.29.7(supports-color@10.2.2)': dependencies: - '@babel/traverse': 7.29.7 + '@babel/traverse': 7.29.7(supports-color@10.2.2) '@babel/types': 7.29.7 transitivePeerDependencies: - supports-color @@ -7780,24 +7806,24 @@ snapshots: dependencies: '@babel/types': 8.0.4 - '@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7)': + '@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))': dependencies: - '@babel/core': 7.29.7 + '@babel/core': 7.29.7(supports-color@10.2.2) '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7)': + '@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))': dependencies: - '@babel/core': 7.29.7 + '@babel/core': 7.29.7(supports-color@10.2.2) '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-typescript@7.29.7(@babel/core@7.29.7)': + '@babel/plugin-transform-typescript@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: - '@babel/core': 7.29.7 + '@babel/core': 7.29.7(supports-color@10.2.2) '@babel/helper-annotate-as-pure': 7.29.7 - '@babel/helper-create-class-features-plugin': 7.29.7(@babel/core@7.29.7) + '@babel/helper-create-class-features-plugin': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) '@babel/helper-plugin-utils': 7.29.7 - '@babel/helper-skip-transparent-expression-wrappers': 7.29.7 - '@babel/plugin-syntax-typescript': 7.29.7(@babel/core@7.29.7) + '@babel/helper-skip-transparent-expression-wrappers': 7.29.7(supports-color@10.2.2) + '@babel/plugin-syntax-typescript': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) transitivePeerDependencies: - supports-color @@ -7807,7 +7833,7 @@ snapshots: '@babel/parser': 7.29.7 '@babel/types': 7.29.7 - '@babel/traverse@7.29.7': + '@babel/traverse@7.29.7(supports-color@10.2.2)': dependencies: '@babel/code-frame': 7.29.7 '@babel/generator': 7.29.7 @@ -7815,7 +7841,7 @@ snapshots: '@babel/parser': 7.29.7 '@babel/template': 7.29.7 '@babel/types': 7.29.7 - debug: 4.4.3 + debug: 4.4.3(supports-color@10.2.2) transitivePeerDependencies: - supports-color @@ -7859,12 +7885,12 @@ snapshots: '@colordx/core@5.5.0': {} - '@comark/nuxt@https://pkg.pr.new/@comark/nuxt@af8d3e8(25cb956dbc2075172f8dcb9a63a44cd8)': + '@comark/nuxt@https://pkg.pr.new/@comark/nuxt@af8d3e8(f98d0a277b4d9d8db8d0f3c2b2f2dfd0)': dependencies: '@comark/vue': https://pkg.pr.new/comarkdown/comark/@comark/vue@af8d3e8(beautiful-mermaid@1.1.3)(rangi@2.2.0)(shiki@4.3.1)(vue@3.5.40(typescript@6.0.3)) - '@nuxt/kit': 4.5.1(magic-string@1.2.2)(magicast@0.5.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) + '@nuxt/kit': 4.5.2(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) comark: https://pkg.pr.new/comarkdown/comark/comark@af8d3e8(beautiful-mermaid@1.1.3)(rangi@2.2.0)(shiki@4.3.1) - nuxt: 4.5.2(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7))(@oxc-project/types@0.146.0)(@types/node@26.1.1)(@vercel/functions@3.9.5(ws@8.21.1))(@vitejs/devtools-kit@0.4.8(@modelcontextprotocol/sdk@1.30.0(zod@4.4.3))(cac@7.0.0)(srvx@0.11.22)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(@vue/compiler-sfc@3.5.41)(cac@7.0.0)(db0@0.3.4)(esbuild@0.28.1)(eslint@10.9.1(jiti@2.7.0))(ioredis@5.11.1)(lightningcss@1.33.0)(magicast@0.5.4)(optionator@0.9.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(rollup-plugin-visualizer@7.0.1(rolldown@1.2.5)(rollup@4.62.2))(rollup@4.62.2)(srvx@0.11.22)(terser@5.49.0)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue-tsc@3.3.11(typescript@6.0.3))(yaml@2.9.0) + nuxt: 4.5.2(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@oxc-project/types@0.146.0)(@types/node@26.1.1)(@vercel/functions@3.9.5(ws@8.21.1))(@vitejs/devtools-kit@0.4.8(@modelcontextprotocol/sdk@1.30.0(supports-color@10.2.2)(zod@4.4.3))(cac@7.0.0)(srvx@0.11.22)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(@vue/compiler-sfc@3.5.41)(cac@7.0.0)(db0@0.3.4)(esbuild@0.28.1)(eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2))(ioredis@5.11.1(supports-color@10.2.2))(lightningcss@1.33.0)(magicast@0.5.3)(optionator@0.9.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(rollup-plugin-visualizer@7.0.1(rolldown@1.2.5)(rollup@4.62.2))(rollup@4.62.2)(srvx@0.11.22)(supports-color@10.2.2)(terser@5.49.0)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue-tsc@3.3.11(typescript@6.0.3))(yaml@2.9.0) transitivePeerDependencies: - beautiful-mermaid - katex @@ -7887,30 +7913,30 @@ snapshots: transitivePeerDependencies: - rangi - '@devframes/hub@0.7.14(devframe@0.7.14(@modelcontextprotocol/sdk@1.30.0(zod@4.4.3))(cac@7.0.0)(srvx@0.11.22)(typescript@6.0.3))': + '@devframes/hub@0.7.14(devframe@0.7.14(@modelcontextprotocol/sdk@1.30.0(supports-color@10.2.2)(zod@4.4.3))(cac@7.0.0)(srvx@0.11.22)(typescript@6.0.3))': dependencies: birpc: 4.0.0 destr: 2.0.5 - devframe: 0.7.14(@modelcontextprotocol/sdk@1.30.0(zod@4.4.3))(cac@7.0.0)(srvx@0.11.22)(typescript@6.0.3) + devframe: 0.7.14(@modelcontextprotocol/sdk@1.30.0(supports-color@10.2.2)(zod@4.4.3))(cac@7.0.0)(srvx@0.11.22)(typescript@6.0.3) nostics: 1.2.0 pathe: 2.0.3 perfect-debounce: 2.1.0 tinyexec: 1.2.4 zigpty: 0.2.1 - '@devframes/json-render@0.7.14(@devframes/hub@0.7.14(devframe@0.7.14(@modelcontextprotocol/sdk@1.30.0(zod@4.4.3))(cac@7.0.0)(srvx@0.11.22)(typescript@6.0.3)))(devframe@0.7.14(@modelcontextprotocol/sdk@1.30.0(zod@4.4.3))(cac@7.0.0)(srvx@0.11.22)(typescript@6.0.3))': + '@devframes/json-render@0.7.14(@devframes/hub@0.7.14(devframe@0.7.14(@modelcontextprotocol/sdk@1.30.0(supports-color@10.2.2)(zod@4.4.3))(cac@7.0.0)(srvx@0.11.22)(typescript@6.0.3)))(devframe@0.7.14(@modelcontextprotocol/sdk@1.30.0(supports-color@10.2.2)(zod@4.4.3))(cac@7.0.0)(srvx@0.11.22)(typescript@6.0.3))': dependencies: '@json-render/core': 0.19.0(zod@4.4.3) - devframe: 0.7.14(@modelcontextprotocol/sdk@1.30.0(zod@4.4.3))(cac@7.0.0)(srvx@0.11.22)(typescript@6.0.3) + devframe: 0.7.14(@modelcontextprotocol/sdk@1.30.0(supports-color@10.2.2)(zod@4.4.3))(cac@7.0.0)(srvx@0.11.22)(typescript@6.0.3) nostics: 1.2.0 zod: 4.4.3 optionalDependencies: - '@devframes/hub': 0.7.14(devframe@0.7.14(@modelcontextprotocol/sdk@1.30.0(zod@4.4.3))(cac@7.0.0)(srvx@0.11.22)(typescript@6.0.3)) + '@devframes/hub': 0.7.14(devframe@0.7.14(@modelcontextprotocol/sdk@1.30.0(supports-color@10.2.2)(zod@4.4.3))(cac@7.0.0)(srvx@0.11.22)(typescript@6.0.3)) - '@dxup/nuxt@0.5.10(esbuild@0.28.1)(magicast@0.5.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))': + '@dxup/nuxt@0.5.10(esbuild@0.28.1)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))': dependencies: '@dxup/unimport': 0.1.2 - '@nuxt/kit': 4.5.2(magic-string@1.2.2)(magicast@0.5.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) + '@nuxt/kit': 4.5.2(magic-string@1.2.2)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) '@vue/compiler-dom': 3.5.41 chokidar: 5.0.0 knitwork: 1.3.0 @@ -7931,10 +7957,10 @@ snapshots: - vite - webpack - '@dxup/nuxt@0.5.4(esbuild@0.28.1)(magicast@0.5.3)(oxc-parser@0.140.0)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))': + '@dxup/nuxt@0.5.4(esbuild@0.28.1)(magicast@0.5.4)(oxc-parser@0.140.0)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))': dependencies: '@dxup/unimport': 0.1.2 - '@nuxt/kit': 4.5.1(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) + '@nuxt/kit': 4.5.1(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) '@vue/compiler-dom': 3.5.40 chokidar: 5.0.0 knitwork: 1.3.0 @@ -8171,23 +8197,23 @@ snapshots: '@esbuild/win32-x64@0.28.1': optional: true - '@eslint-community/eslint-utils@4.10.1(eslint@10.9.1(jiti@2.7.0))': + '@eslint-community/eslint-utils@4.10.1(eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2))': dependencies: - eslint: 10.9.1(jiti@2.7.0) + eslint: 10.9.1(jiti@2.7.0)(supports-color@10.2.2) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.2': {} - '@eslint/compat@2.1.0(eslint@10.9.1(jiti@2.7.0))': + '@eslint/compat@2.1.0(eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2))': dependencies: '@eslint/core': 1.2.1 optionalDependencies: - eslint: 10.9.1(jiti@2.7.0) + eslint: 10.9.1(jiti@2.7.0)(supports-color@10.2.2) - '@eslint/config-array@0.23.5': + '@eslint/config-array@0.23.5(supports-color@10.2.2)': dependencies: '@eslint/object-schema': 3.0.5 - debug: 4.4.3 + debug: 4.4.3(supports-color@10.2.2) minimatch: 10.2.5 transitivePeerDependencies: - supports-color @@ -8209,9 +8235,9 @@ snapshots: mdn-data: 2.29.0 source-map-js: 1.2.1 - '@eslint/js@10.0.1(eslint@10.9.1(jiti@2.7.0))': + '@eslint/js@10.0.1(eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2))': optionalDependencies: - eslint: 10.9.1(jiti@2.7.0) + eslint: 10.9.1(jiti@2.7.0)(supports-color@10.2.2) '@eslint/object-schema@3.0.5': {} @@ -8457,19 +8483,19 @@ snapshots: dependencies: zod: 4.4.3 - '@kwsites/file-exists@1.1.1': + '@kwsites/file-exists@1.1.1(supports-color@10.2.2)': dependencies: - debug: 4.4.3 + debug: 4.4.3(supports-color@10.2.2) transitivePeerDependencies: - supports-color '@kwsites/promise-deferred@1.1.1': {} - '@mapbox/node-pre-gyp@2.0.3': + '@mapbox/node-pre-gyp@2.0.3(supports-color@10.2.2)': dependencies: consola: 3.4.2 detect-libc: 2.1.2 - https-proxy-agent: 7.0.6 + https-proxy-agent: 7.0.6(supports-color@10.2.2) node-fetch: 2.7.0 nopt: 8.1.0 semver: 7.8.5 @@ -8478,7 +8504,7 @@ snapshots: - encoding - supports-color - '@modelcontextprotocol/sdk@1.30.0(zod@4.4.3)': + '@modelcontextprotocol/sdk@1.30.0(supports-color@10.2.2)(zod@4.4.3)': dependencies: '@hono/node-server': 1.19.15(hono@4.12.32) ajv: 8.20.0 @@ -8488,8 +8514,8 @@ snapshots: cross-spawn: 7.0.6 eventsource: 3.0.7 eventsource-parser: 3.1.0 - express: 5.2.1 - express-rate-limit: 8.6.0(express@5.2.1) + express: 5.2.1(supports-color@10.2.2) + express-rate-limit: 8.6.0(express@5.2.1(supports-color@10.2.2))(supports-color@10.2.2) hono: 4.12.32 jose: 6.2.4 json-schema-typed: 8.0.2 @@ -8535,15 +8561,15 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.20.1 - '@nuxt/cli@3.37.0(@nuxt/schema@4.5.1)(cac@7.0.0)(magicast@0.5.3)': + '@nuxt/cli@3.37.0(@nuxt/schema@4.5.1)(cac@7.0.0)(magicast@0.5.4)(supports-color@10.2.2)': dependencies: '@bomb.sh/tab': 0.0.19(cac@7.0.0)(citty@0.2.2) '@clack/prompts': 1.7.0 - c12: 3.3.4(magicast@0.5.3) + c12: 3.3.4(magicast@0.5.4) citty: 0.2.2 confbox: 0.2.4 consola: 3.4.2 - debug: 4.4.3 + debug: 4.4.3(supports-color@10.2.2) defu: 6.1.7 exsolve: 1.1.0 fuse.js: 7.5.0 @@ -8574,15 +8600,15 @@ snapshots: - magicast - supports-color - '@nuxt/cli@3.37.0(@nuxt/schema@4.5.2)(cac@7.0.0)(magicast@0.5.4)': + '@nuxt/cli@3.37.0(@nuxt/schema@4.5.2)(cac@7.0.0)(magicast@0.5.3)(supports-color@10.2.2)': dependencies: '@bomb.sh/tab': 0.0.19(cac@7.0.0)(citty@0.2.2) '@clack/prompts': 1.7.0 - c12: 3.3.4(magicast@0.5.4) + c12: 3.3.4(magicast@0.5.3) citty: 0.2.2 confbox: 0.2.4 consola: 3.4.2 - debug: 4.4.3 + debug: 4.4.3(supports-color@10.2.2) defu: 6.1.7 exsolve: 1.1.0 fuse.js: 7.5.0 @@ -8615,9 +8641,9 @@ snapshots: '@nuxt/devalue@2.0.2': {} - '@nuxt/devtools-kit@3.3.1(magic-string@0.30.21)(magicast@0.5.3)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))': + '@nuxt/devtools-kit@3.3.1(magic-string@0.30.21)(magicast@0.5.4)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))': dependencies: - '@nuxt/kit': 4.5.1(magic-string@0.30.21)(magicast@0.5.3)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) + '@nuxt/kit': 4.5.1(magic-string@0.30.21)(magicast@0.5.4)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) execa: 8.0.1 vite: 8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0) transitivePeerDependencies: @@ -8639,9 +8665,9 @@ snapshots: - rolldown - unplugin - '@nuxt/devtools-kit@3.3.1(magic-string@1.2.2)(magicast@0.5.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))': + '@nuxt/devtools-kit@3.3.1(magic-string@1.2.2)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))': dependencies: - '@nuxt/kit': 4.5.1(magic-string@1.2.2)(magicast@0.5.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) + '@nuxt/kit': 4.5.1(magic-string@1.2.2)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) execa: 8.0.1 vite: 8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0) transitivePeerDependencies: @@ -8663,9 +8689,9 @@ snapshots: - rolldown - unplugin - '@nuxt/devtools-kit@3.4.2(magic-string@1.2.2)(magicast@0.5.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))': + '@nuxt/devtools-kit@3.4.2(magic-string@1.2.2)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))': dependencies: - '@nuxt/kit': 4.5.1(magic-string@1.2.2)(magicast@0.5.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) + '@nuxt/kit': 4.5.1(magic-string@1.2.2)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) execa: 8.0.1 vite: 8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0) transitivePeerDependencies: @@ -8675,9 +8701,9 @@ snapshots: - rolldown - unplugin - '@nuxt/devtools-kit@4.0.0-alpha.7(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))': + '@nuxt/devtools-kit@4.0.0-alpha.7(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))': dependencies: - '@nuxt/kit': 4.5.1(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) + '@nuxt/kit': 4.5.1(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) tinyexec: 1.2.4 vite: 8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0) transitivePeerDependencies: @@ -8687,9 +8713,9 @@ snapshots: - rolldown - unplugin - '@nuxt/devtools-kit@4.0.0-alpha.7(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))': + '@nuxt/devtools-kit@4.0.0-alpha.7(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))': dependencies: - '@nuxt/kit': 4.5.1(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) + '@nuxt/kit': 4.5.1(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) tinyexec: 1.2.4 vite: 8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0) transitivePeerDependencies: @@ -8699,9 +8725,9 @@ snapshots: - rolldown - unplugin - '@nuxt/devtools-kit@4.0.0-alpha.7(magic-string@1.2.2)(magicast@0.5.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))': + '@nuxt/devtools-kit@4.0.0-alpha.7(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))': dependencies: - '@nuxt/kit': 4.5.1(magic-string@1.2.2)(magicast@0.5.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) + '@nuxt/kit': 4.5.1(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) tinyexec: 1.2.4 vite: 8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0) transitivePeerDependencies: @@ -8711,9 +8737,9 @@ snapshots: - rolldown - unplugin - '@nuxt/devtools-kit@4.0.0-alpha.9(magic-string@1.2.2)(magicast@0.5.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))': + '@nuxt/devtools-kit@4.0.0-alpha.9(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))': dependencies: - '@nuxt/kit': 4.5.1(magic-string@1.2.2)(magicast@0.5.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) + '@nuxt/kit': 4.5.2(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) nostics: 1.2.0 tinyexec: 1.2.4 vite: 8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0) @@ -8746,7 +8772,7 @@ snapshots: pkg-types: 2.3.1 semver: 7.8.5 - '@nuxt/devtools@3.3.1(@vercel/functions@3.9.5(ws@8.21.1))(db0@0.3.4)(ioredis@5.11.1)(magic-string@1.1.0)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3))': + '@nuxt/devtools@3.3.1(@vercel/functions@3.9.5(ws@8.21.1))(db0@0.3.4)(ioredis@5.11.1(supports-color@10.2.2))(magic-string@1.1.0)(oxc-parser@0.140.0)(rolldown@1.2.0)(supports-color@10.2.2)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3))': dependencies: '@nuxt/devtools-kit': 3.3.1(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) '@nuxt/devtools-wizard': 3.3.1 @@ -8772,13 +8798,13 @@ snapshots: perfect-debounce: 2.1.0 pkg-types: 2.3.1 semver: 7.8.5 - simple-git: 3.36.0 + simple-git: 3.36.0(supports-color@10.2.2) sirv: 3.0.2 structured-clone-es: 2.0.0 tinyglobby: 0.2.17 - unstorage: 1.17.5(@vercel/functions@3.9.5(ws@8.21.1))(db0@0.3.4)(ioredis@5.11.1) + unstorage: 1.17.5(@vercel/functions@3.9.5(ws@8.21.1))(db0@0.3.4)(ioredis@5.11.1(supports-color@10.2.2)) vite: 8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0) - vite-plugin-inspect: 11.4.1(@nuxt/kit@4.5.1(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) + vite-plugin-inspect: 11.4.1(@nuxt/kit@4.5.1(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) vite-plugin-vue-tracer: 1.4.0(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) which: 6.0.1 ws: 8.21.1 @@ -8811,7 +8837,7 @@ snapshots: - utf-8-validate - vue - '@nuxt/devtools@3.4.2(@vercel/functions@3.9.5(ws@8.21.1))(db0@0.3.4)(ioredis@5.11.1)(magic-string@1.1.0)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3))': + '@nuxt/devtools@3.4.2(@vercel/functions@3.9.5(ws@8.21.1))(db0@0.3.4)(ioredis@5.11.1(supports-color@10.2.2))(magic-string@1.1.0)(oxc-parser@0.143.0)(rolldown@1.2.5)(supports-color@10.2.2)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3))': dependencies: '@nuxt/devtools-kit': 3.4.2(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) '@nuxt/devtools-wizard': 3.4.2 @@ -8837,11 +8863,11 @@ snapshots: perfect-debounce: 2.1.0 pkg-types: 2.3.1 semver: 7.8.5 - simple-git: 3.36.0 + simple-git: 3.36.0(supports-color@10.2.2) sirv: 3.0.2 structured-clone-es: 2.0.1 tinyglobby: 0.2.17 - unstorage: 1.17.5(@vercel/functions@3.9.5(ws@8.21.1))(db0@0.3.4)(ioredis@5.11.1) + unstorage: 1.17.5(@vercel/functions@3.9.5(ws@8.21.1))(db0@0.3.4)(ioredis@5.11.1(supports-color@10.2.2)) vite: 8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0) vite-plugin-inspect: 11.4.1(@nuxt/kit@4.5.1(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) vite-plugin-vue-tracer: 1.4.0(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) @@ -8876,30 +8902,30 @@ snapshots: - utf-8-validate - vue - '@nuxt/eslint-config@1.17.0(@typescript-eslint/utils@8.68.0(eslint@10.9.1(jiti@2.7.0))(typescript@6.0.3))(@vue/compiler-sfc@3.5.41)(eslint@10.9.1(jiti@2.7.0))(typescript@6.0.3)': + '@nuxt/eslint-config@1.17.0(@typescript-eslint/utils@8.68.0(eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3))(@vue/compiler-sfc@3.5.41)(eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)': dependencies: '@antfu/install-pkg': 2.0.1 '@clack/prompts': 1.7.0 - '@eslint/js': 10.0.1(eslint@10.9.1(jiti@2.7.0)) - '@nuxt/eslint-plugin': 1.17.0(eslint@10.9.1(jiti@2.7.0))(typescript@6.0.3) - '@stylistic/eslint-plugin': 5.10.0(eslint@10.9.1(jiti@2.7.0)) - '@typescript-eslint/eslint-plugin': 8.68.0(@typescript-eslint/parser@8.68.0(eslint@10.9.1(jiti@2.7.0))(typescript@6.0.3))(eslint@10.9.1(jiti@2.7.0))(typescript@6.0.3) - '@typescript-eslint/parser': 8.68.0(eslint@10.9.1(jiti@2.7.0))(typescript@6.0.3) - eslint: 10.9.1(jiti@2.7.0) - eslint-config-flat-gitignore: 2.3.0(eslint@10.9.1(jiti@2.7.0)) + '@eslint/js': 10.0.1(eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2)) + '@nuxt/eslint-plugin': 1.17.0(eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3) + '@stylistic/eslint-plugin': 5.10.0(eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2)) + '@typescript-eslint/eslint-plugin': 8.68.0(@typescript-eslint/parser@8.68.0(eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3))(eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3) + '@typescript-eslint/parser': 8.68.0(eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3) + eslint: 10.9.1(jiti@2.7.0)(supports-color@10.2.2) + eslint-config-flat-gitignore: 2.3.0(eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2)) eslint-flat-config-utils: 3.2.0 - eslint-merge-processors: 2.0.0(eslint@10.9.1(jiti@2.7.0)) - eslint-plugin-import-lite: 0.6.0(eslint@10.9.1(jiti@2.7.0)) - eslint-plugin-import-x: 4.17.1(@typescript-eslint/utils@8.68.0(eslint@10.9.1(jiti@2.7.0))(typescript@6.0.3))(eslint@10.9.1(jiti@2.7.0)) - eslint-plugin-jsdoc: 63.3.3(eslint@10.9.1(jiti@2.7.0)) - eslint-plugin-regexp: 3.1.1(eslint@10.9.1(jiti@2.7.0)) - eslint-plugin-unicorn: 73.0.0(eslint@10.9.1(jiti@2.7.0)) - eslint-plugin-vue: 10.10.0(@stylistic/eslint-plugin@5.10.0(eslint@10.9.1(jiti@2.7.0)))(@typescript-eslint/parser@8.68.0(eslint@10.9.1(jiti@2.7.0))(typescript@6.0.3))(eslint@10.9.1(jiti@2.7.0))(vue-eslint-parser@10.4.1(eslint@10.9.1(jiti@2.7.0))) - eslint-processor-vue-blocks: 2.0.0(@vue/compiler-sfc@3.5.41)(eslint@10.9.1(jiti@2.7.0)) + eslint-merge-processors: 2.0.0(eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2)) + eslint-plugin-import-lite: 0.6.0(eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2)) + eslint-plugin-import-x: 4.17.1(@typescript-eslint/utils@8.68.0(eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3))(eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2) + eslint-plugin-jsdoc: 63.3.3(eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2) + eslint-plugin-regexp: 3.1.1(eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2)) + eslint-plugin-unicorn: 73.0.0(eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2)) + eslint-plugin-vue: 10.10.0(@stylistic/eslint-plugin@5.10.0(eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2)))(@typescript-eslint/parser@8.68.0(eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3))(eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2))(vue-eslint-parser@10.4.1(eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)) + eslint-processor-vue-blocks: 2.0.0(@vue/compiler-sfc@3.5.41)(eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2)) globals: 17.11.0 local-pkg: 1.2.1 pathe: 2.0.3 - vue-eslint-parser: 10.4.1(eslint@10.9.1(jiti@2.7.0)) + vue-eslint-parser: 10.4.1(eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2) transitivePeerDependencies: - '@typescript-eslint/utils' - '@vue/compiler-sfc' @@ -8907,22 +8933,22 @@ snapshots: - supports-color - typescript - '@nuxt/eslint-plugin@1.17.0(eslint@10.9.1(jiti@2.7.0))(typescript@6.0.3)': + '@nuxt/eslint-plugin@1.17.0(eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)': dependencies: '@typescript-eslint/types': 8.68.0 - '@typescript-eslint/utils': 8.68.0(eslint@10.9.1(jiti@2.7.0))(typescript@6.0.3) - eslint: 10.9.1(jiti@2.7.0) + '@typescript-eslint/utils': 8.68.0(eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3) + eslint: 10.9.1(jiti@2.7.0)(supports-color@10.2.2) transitivePeerDependencies: - supports-color - typescript - '@nuxt/fonts@0.14.0(@vercel/functions@3.9.5(ws@8.21.1))(db0@0.3.4)(esbuild@0.28.1)(ioredis@5.11.1)(magic-string@0.30.21)(magicast@0.5.3)(oxc-parser@0.140.0)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))': + '@nuxt/fonts@0.14.0(@vercel/functions@3.9.5(ws@8.21.1))(db0@0.3.4)(esbuild@0.28.1)(ioredis@5.11.1(supports-color@10.2.2))(magic-string@0.30.21)(magicast@0.5.4)(oxc-parser@0.140.0)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))': dependencies: - '@nuxt/devtools-kit': 3.3.1(magic-string@0.30.21)(magicast@0.5.3)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) - '@nuxt/kit': 4.5.1(magic-string@0.30.21)(magicast@0.5.3)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) + '@nuxt/devtools-kit': 3.3.1(magic-string@0.30.21)(magicast@0.5.4)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) + '@nuxt/kit': 4.5.1(magic-string@0.30.21)(magicast@0.5.4)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) consola: 3.4.2 defu: 6.1.7 - fontless: 0.2.1(@vercel/functions@3.9.5(ws@8.21.1))(db0@0.3.4)(ioredis@5.11.1)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) + fontless: 0.2.1(@vercel/functions@3.9.5(ws@8.21.1))(db0@0.3.4)(ioredis@5.11.1(supports-color@10.2.2))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) h3: 1.15.11 magic-regexp: 0.10.0 ofetch: 1.5.1 @@ -8932,7 +8958,7 @@ snapshots: ufo: 1.6.4 unifont: 0.7.4 unplugin: 3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) - unstorage: 1.17.5(@vercel/functions@3.9.5(ws@8.21.1))(db0@0.3.4)(ioredis@5.11.1) + unstorage: 1.17.5(@vercel/functions@3.9.5(ws@8.21.1))(db0@0.3.4)(ioredis@5.11.1(supports-color@10.2.2)) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -8966,13 +8992,13 @@ snapshots: - vite - webpack - '@nuxt/fonts@0.14.0(@vercel/functions@3.9.5(ws@8.21.1))(db0@0.3.4)(esbuild@0.28.1)(ioredis@5.11.1)(magic-string@1.2.2)(magicast@0.5.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))': + '@nuxt/fonts@0.14.0(@vercel/functions@3.9.5(ws@8.21.1))(db0@0.3.4)(esbuild@0.28.1)(ioredis@5.11.1(supports-color@10.2.2))(magic-string@1.2.2)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))': dependencies: - '@nuxt/devtools-kit': 3.3.1(magic-string@1.2.2)(magicast@0.5.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) - '@nuxt/kit': 4.5.1(magic-string@1.2.2)(magicast@0.5.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) + '@nuxt/devtools-kit': 3.3.1(magic-string@1.2.2)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) + '@nuxt/kit': 4.5.1(magic-string@1.2.2)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) consola: 3.4.2 defu: 6.1.7 - fontless: 0.2.1(@vercel/functions@3.9.5(ws@8.21.1))(db0@0.3.4)(ioredis@5.11.1)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) + fontless: 0.2.1(@vercel/functions@3.9.5(ws@8.21.1))(db0@0.3.4)(ioredis@5.11.1(supports-color@10.2.2))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) h3: 1.15.11 magic-regexp: 0.10.0 ofetch: 1.5.1 @@ -8982,7 +9008,7 @@ snapshots: ufo: 1.6.4 unifont: 0.7.4 unplugin: 3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) - unstorage: 1.17.5(@vercel/functions@3.9.5(ws@8.21.1))(db0@0.3.4)(ioredis@5.11.1) + unstorage: 1.17.5(@vercel/functions@3.9.5(ws@8.21.1))(db0@0.3.4)(ioredis@5.11.1(supports-color@10.2.2)) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -9016,14 +9042,14 @@ snapshots: - vite - webpack - '@nuxt/icon@2.3.1(magic-string@0.30.21)(magicast@0.5.3)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3))': + '@nuxt/icon@2.3.1(magic-string@0.30.21)(magicast@0.5.4)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3))': dependencies: '@iconify/collections': 1.0.714 '@iconify/types': 2.0.0 '@iconify/utils': 3.1.4 '@iconify/vue': 5.0.1(vue@3.5.40(typescript@6.0.3)) - '@nuxt/devtools-kit': 3.3.1(magic-string@0.30.21)(magicast@0.5.3)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) - '@nuxt/kit': 4.5.1(magic-string@0.30.21)(magicast@0.5.3)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) + '@nuxt/devtools-kit': 3.3.1(magic-string@0.30.21)(magicast@0.5.4)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) + '@nuxt/kit': 4.5.1(magic-string@0.30.21)(magicast@0.5.4)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) consola: 3.4.2 local-pkg: 1.2.1 mlly: 1.8.2 @@ -9041,14 +9067,14 @@ snapshots: - vite - vue - '@nuxt/icon@2.5.1(magic-string@1.2.2)(magicast@0.5.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3))': + '@nuxt/icon@2.5.1(magic-string@1.2.2)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3))': dependencies: '@iconify/collections': 1.0.728 '@iconify/types': 2.0.0 '@iconify/utils': 3.1.4 '@iconify/vue': 5.0.1(vue@3.5.40(typescript@6.0.3)) - '@nuxt/devtools-kit': 3.4.2(magic-string@1.2.2)(magicast@0.5.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) - '@nuxt/kit': 4.5.2(magic-string@1.2.2)(magicast@0.5.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) + '@nuxt/devtools-kit': 3.4.2(magic-string@1.2.2)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) + '@nuxt/kit': 4.5.2(magic-string@1.2.2)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) consola: 3.4.2 local-pkg: 1.2.1 mlly: 1.8.2 @@ -9066,9 +9092,9 @@ snapshots: - vite - vue - '@nuxt/kit@4.5.1(magic-string@0.30.21)(magicast@0.5.3)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))': + '@nuxt/kit@4.5.1(magic-string@0.30.21)(magicast@0.5.4)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))': dependencies: - c12: 3.3.4(magicast@0.5.3) + c12: 3.3.4(magicast@0.5.4) consola: 3.4.2 defu: 6.1.7 destr: 2.0.5 @@ -9126,6 +9152,66 @@ snapshots: - rolldown - unplugin + '@nuxt/kit@4.5.1(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))': + dependencies: + c12: 3.3.4(magicast@0.5.3) + consola: 3.4.2 + defu: 6.1.7 + destr: 2.0.5 + errx: 0.1.0 + exsolve: 1.1.0 + ignore: 7.0.6 + jiti: 2.7.0 + klona: 2.0.6 + mlly: 1.8.2 + nostics: 1.2.0 + ohash: 2.0.11 + pathe: 2.0.3 + pkg-types: 2.3.1 + rc9: 3.0.1 + scule: 1.3.0 + tinyglobby: 0.2.17 + ufo: 1.6.4 + unctx: 3.0.0(magic-string@1.1.0)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) + untyped: 2.0.0 + verkit: 0.2.0 + transitivePeerDependencies: + - magic-string + - magicast + - oxc-parser + - rolldown + - unplugin + + '@nuxt/kit@4.5.1(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))': + dependencies: + c12: 3.3.4(magicast@0.5.4) + consola: 3.4.2 + defu: 6.1.7 + destr: 2.0.5 + errx: 0.1.0 + exsolve: 1.1.0 + ignore: 7.0.6 + jiti: 2.7.0 + klona: 2.0.6 + mlly: 1.8.2 + nostics: 1.2.0 + ohash: 2.0.11 + pathe: 2.0.3 + pkg-types: 2.3.1 + rc9: 3.0.1 + scule: 1.3.0 + tinyglobby: 0.2.17 + ufo: 1.6.4 + unctx: 3.0.0(magic-string@1.1.0)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) + untyped: 2.0.0 + verkit: 0.2.0 + transitivePeerDependencies: + - magic-string + - magicast + - oxc-parser + - rolldown + - unplugin + '@nuxt/kit@4.5.1(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))': dependencies: c12: 3.3.4(magicast@0.5.4) @@ -9156,9 +9242,9 @@ snapshots: - rolldown - unplugin - '@nuxt/kit@4.5.1(magic-string@1.2.2)(magicast@0.5.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))': + '@nuxt/kit@4.5.1(magic-string@1.2.2)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))': dependencies: - c12: 3.3.4(magicast@0.5.4) + c12: 3.3.4(magicast@0.5.3) consola: 3.4.2 defu: 6.1.7 destr: 2.0.5 @@ -9186,7 +9272,7 @@ snapshots: - rolldown - unplugin - '@nuxt/kit@4.5.2(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))': + '@nuxt/kit@4.5.2(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))': dependencies: c12: 3.3.4(magicast@0.5.3) consola: 3.4.2 @@ -9206,6 +9292,36 @@ snapshots: scule: 1.3.0 tinyglobby: 0.2.17 ufo: 1.6.4 + unctx: 3.0.0(magic-string@1.1.0)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) + untyped: 2.0.0 + verkit: 0.3.2 + transitivePeerDependencies: + - magic-string + - magicast + - oxc-parser + - rolldown + - unplugin + + '@nuxt/kit@4.5.2(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))': + dependencies: + c12: 3.3.4(magicast@0.5.4) + consola: 3.4.2 + defu: 6.1.7 + destr: 2.0.5 + errx: 0.1.2 + exsolve: 1.1.1 + ignore: 7.0.6 + jiti: 2.7.0 + klona: 2.0.6 + mlly: 1.8.2 + nostics: 1.2.0 + ohash: 2.0.11 + pathe: 2.0.3 + pkg-types: 2.3.1 + rc9: 3.0.1 + scule: 1.3.0 + tinyglobby: 0.2.17 + ufo: 1.6.4 unctx: 3.0.0(magic-string@1.1.0)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) untyped: 2.0.0 verkit: 0.3.2 @@ -9247,9 +9363,9 @@ snapshots: - rolldown - unplugin - '@nuxt/kit@4.5.2(magic-string@1.2.2)(magicast@0.5.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))': + '@nuxt/kit@4.5.2(magic-string@1.2.2)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))': dependencies: - c12: 3.3.4(magicast@0.5.4) + c12: 3.3.4(magicast@0.5.3) consola: 3.4.2 defu: 6.1.7 destr: 2.0.5 @@ -9277,11 +9393,11 @@ snapshots: - rolldown - unplugin - '@nuxt/nitro-server@4.5.1(2128dc7b56455c6886f373bfd191c50e)': + '@nuxt/nitro-server@4.5.1(eda3270367fe227c6817c29b3de9bbdd)': dependencies: '@nuxt/devalue': 2.0.2 - '@nuxt/kit': 4.5.1(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) - '@unhead/vue': 3.2.3(@modelcontextprotocol/sdk@1.30.0(zod@4.4.3))(cac@7.0.0)(esbuild@0.28.1)(lightningcss@1.33.0)(rolldown@1.2.0)(rollup@4.62.2)(srvx@0.11.22)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) + '@nuxt/kit': 4.5.1(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) + '@unhead/vue': 3.2.3(@modelcontextprotocol/sdk@1.30.0(supports-color@10.2.2)(zod@4.4.3))(cac@7.0.0)(esbuild@0.28.1)(lightningcss@1.33.0)(rolldown@1.2.0)(rollup@4.62.2)(srvx@0.11.22)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) '@vue/shared': 3.5.40 consola: 3.4.2 defu: 6.1.7 @@ -9294,9 +9410,9 @@ snapshots: impound: 1.1.6(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) klona: 2.0.6 mocked-exports: 0.1.1 - nitropack: 2.13.4(@vercel/functions@3.9.5(ws@8.21.1))(oxc-parser@0.140.0)(rolldown@1.2.0)(srvx@0.11.22)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) + nitropack: 2.13.4(@vercel/functions@3.9.5(ws@8.21.1))(oxc-parser@0.140.0)(rolldown@1.2.0)(srvx@0.11.22)(supports-color@10.2.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) nostics: 1.2.0 - nuxt: 4.5.1(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7))(@modelcontextprotocol/sdk@1.30.0(zod@4.4.3))(@types/node@26.1.1)(@vercel/functions@3.9.5(ws@8.21.1))(@vue/compiler-sfc@3.5.41)(cac@7.0.0)(db0@0.3.4)(esbuild@0.28.1)(eslint@10.9.1(jiti@2.7.0))(ioredis@5.11.1)(lightningcss@1.33.0)(magicast@0.5.3)(optionator@0.9.4)(oxc-parser@0.140.0)(rollup-plugin-visualizer@7.0.1(rolldown@1.2.0)(rollup@4.62.2))(rollup@4.62.2)(srvx@0.11.22)(terser@5.49.0)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue-tsc@3.3.11(typescript@6.0.3))(yaml@2.9.0) + nuxt: 4.5.1(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@modelcontextprotocol/sdk@1.30.0(supports-color@10.2.2)(zod@4.4.3))(@types/node@26.1.1)(@vercel/functions@3.9.5(ws@8.21.1))(@vue/compiler-sfc@3.5.41)(cac@7.0.0)(db0@0.3.4)(esbuild@0.28.1)(eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2))(ioredis@5.11.1(supports-color@10.2.2))(lightningcss@1.33.0)(magicast@0.5.4)(optionator@0.9.4)(oxc-parser@0.140.0)(rollup-plugin-visualizer@7.0.1(rolldown@1.2.0)(rollup@4.62.2))(rollup@4.62.2)(srvx@0.11.22)(supports-color@10.2.2)(terser@5.49.0)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue-tsc@3.3.11(typescript@6.0.3))(yaml@2.9.0) nypm: 0.6.8 ohash: 2.0.11 pathe: 2.0.3 @@ -9304,12 +9420,12 @@ snapshots: std-env: 4.2.0 ufo: 1.6.4 unctx: 3.0.0(magic-string@1.1.0)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) - unstorage: 1.17.5(@vercel/functions@3.9.5(ws@8.21.1))(db0@0.3.4)(ioredis@5.11.1) + unstorage: 1.17.5(@vercel/functions@3.9.5(ws@8.21.1))(db0@0.3.4)(ioredis@5.11.1(supports-color@10.2.2)) vue: 3.5.40(typescript@6.0.3) vue-bundle-renderer: 2.3.1 vue-devtools-stub: 0.1.0 optionalDependencies: - '@babel/plugin-syntax-typescript': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-syntax-typescript': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -9363,11 +9479,11 @@ snapshots: - webpack - xml2js - '@nuxt/nitro-server@4.5.2(3fb5ee5639206607c6b93310c0c3912f)': + '@nuxt/nitro-server@4.5.2(5e4e9a7671b0109f857942bdd727e44b)': dependencies: '@nuxt/devalue': 2.0.2 - '@nuxt/kit': 4.5.2(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) - '@unhead/vue': 3.4.0(@oxc-project/types@0.146.0)(@vitejs/devtools-kit@0.4.8(@modelcontextprotocol/sdk@1.30.0(zod@4.4.3))(cac@7.0.0)(srvx@0.11.22)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(esbuild@0.28.1)(lightningcss@1.33.0)(oxc-parser@0.143.0)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) + '@nuxt/kit': 4.5.2(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) + '@unhead/vue': 3.4.0(@oxc-project/types@0.146.0)(@vitejs/devtools-kit@0.4.8(@modelcontextprotocol/sdk@1.30.0(supports-color@10.2.2)(zod@4.4.3))(cac@7.0.0)(srvx@0.11.22)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(esbuild@0.28.1)(lightningcss@1.33.0)(oxc-parser@0.143.0)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) '@vue/shared': 3.5.40 consola: 3.4.2 defu: 6.1.7 @@ -9380,9 +9496,9 @@ snapshots: impound: 1.1.6(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) klona: 2.0.6 mocked-exports: 0.1.1 - nitropack: 2.13.4(@vercel/functions@3.9.5(ws@8.21.1))(oxc-parser@0.143.0)(rolldown@1.2.5)(srvx@0.11.22)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) + nitropack: 2.13.4(@vercel/functions@3.9.5(ws@8.21.1))(oxc-parser@0.143.0)(rolldown@1.2.5)(srvx@0.11.22)(supports-color@10.2.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) nostics: 1.2.0 - nuxt: 4.5.2(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7))(@oxc-project/types@0.146.0)(@types/node@26.1.1)(@vercel/functions@3.9.5(ws@8.21.1))(@vitejs/devtools-kit@0.4.8(@modelcontextprotocol/sdk@1.30.0(zod@4.4.3))(cac@7.0.0)(srvx@0.11.22)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(@vue/compiler-sfc@3.5.41)(cac@7.0.0)(db0@0.3.4)(esbuild@0.28.1)(eslint@10.9.1(jiti@2.7.0))(ioredis@5.11.1)(lightningcss@1.33.0)(magicast@0.5.4)(optionator@0.9.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(rollup-plugin-visualizer@7.0.1(rolldown@1.2.5)(rollup@4.62.2))(rollup@4.62.2)(srvx@0.11.22)(terser@5.49.0)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue-tsc@3.3.11(typescript@6.0.3))(yaml@2.9.0) + nuxt: 4.5.2(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@oxc-project/types@0.146.0)(@types/node@26.1.1)(@vercel/functions@3.9.5(ws@8.21.1))(@vitejs/devtools-kit@0.4.8(@modelcontextprotocol/sdk@1.30.0(supports-color@10.2.2)(zod@4.4.3))(cac@7.0.0)(srvx@0.11.22)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(@vue/compiler-sfc@3.5.41)(cac@7.0.0)(db0@0.3.4)(esbuild@0.28.1)(eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2))(ioredis@5.11.1(supports-color@10.2.2))(lightningcss@1.33.0)(magicast@0.5.3)(optionator@0.9.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(rollup-plugin-visualizer@7.0.1(rolldown@1.2.5)(rollup@4.62.2))(rollup@4.62.2)(srvx@0.11.22)(supports-color@10.2.2)(terser@5.49.0)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue-tsc@3.3.11(typescript@6.0.3))(yaml@2.9.0) nypm: 0.6.9 ohash: 2.0.11 pathe: 2.0.3 @@ -9390,12 +9506,12 @@ snapshots: std-env: 4.2.0 ufo: 1.6.4 unctx: 3.0.0(magic-string@1.1.0)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) - unstorage: 1.17.5(@vercel/functions@3.9.5(ws@8.21.1))(db0@0.3.4)(ioredis@5.11.1) + unstorage: 1.17.5(@vercel/functions@3.9.5(ws@8.21.1))(db0@0.3.4)(ioredis@5.11.1(supports-color@10.2.2)) vue: 3.5.40(typescript@6.0.3) vue-bundle-renderer: 2.3.1 vue-devtools-stub: 0.1.0 optionalDependencies: - '@babel/plugin-syntax-typescript': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-syntax-typescript': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -9467,33 +9583,33 @@ snapshots: pkg-types: 2.3.1 std-env: 4.2.0 - '@nuxt/telemetry@2.8.0(@nuxt/kit@4.5.1(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))))': + '@nuxt/telemetry@2.8.0(@nuxt/kit@4.5.1(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))))': dependencies: - '@nuxt/kit': 4.5.1(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) + '@nuxt/kit': 4.5.1(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) citty: 0.2.2 consola: 3.4.2 ofetch: 2.0.0-alpha.3 rc9: 3.0.1 std-env: 4.2.0 - '@nuxt/telemetry@2.8.0(@nuxt/kit@4.5.2(magic-string@1.2.2)(magicast@0.5.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))))': + '@nuxt/telemetry@2.8.0(@nuxt/kit@4.5.2(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))))': dependencies: - '@nuxt/kit': 4.5.2(magic-string@1.2.2)(magicast@0.5.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) + '@nuxt/kit': 4.5.2(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) citty: 0.2.2 consola: 3.4.2 ofetch: 2.0.0-alpha.3 rc9: 3.0.1 std-env: 4.2.0 - '@nuxt/ui@4.10.0(aeee8704e7498fa9ef5b497bc4c3ea6b)': + '@nuxt/ui@4.10.0(65f4dfe45e4c297e8606ed5a5a742baf)': dependencies: '@floating-ui/dom': 1.8.0 '@iconify/vue': 5.0.1(vue@3.5.40(typescript@6.0.3)) - '@nuxt/fonts': 0.14.0(@vercel/functions@3.9.5(ws@8.21.1))(db0@0.3.4)(esbuild@0.28.1)(ioredis@5.11.1)(magic-string@0.30.21)(magicast@0.5.3)(oxc-parser@0.140.0)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) - '@nuxt/icon': 2.3.1(magic-string@0.30.21)(magicast@0.5.3)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) - '@nuxt/kit': 4.5.1(magic-string@0.30.21)(magicast@0.5.3)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) + '@nuxt/fonts': 0.14.0(@vercel/functions@3.9.5(ws@8.21.1))(db0@0.3.4)(esbuild@0.28.1)(ioredis@5.11.1(supports-color@10.2.2))(magic-string@0.30.21)(magicast@0.5.4)(oxc-parser@0.140.0)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) + '@nuxt/icon': 2.3.1(magic-string@0.30.21)(magicast@0.5.4)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) + '@nuxt/kit': 4.5.1(magic-string@0.30.21)(magicast@0.5.4)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) '@nuxt/schema': 4.5.1 - '@nuxtjs/color-mode': 4.0.1(magic-string@0.30.21)(magicast@0.5.3)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) + '@nuxtjs/color-mode': 4.0.1(magic-string@0.30.21)(magicast@0.5.4)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) '@standard-schema/spec': 1.1.0 '@tailwindcss/postcss': 4.3.3 '@tailwindcss/vite': 4.3.3(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) @@ -9547,8 +9663,8 @@ snapshots: typescript: 6.0.3 ufo: 1.6.4 unplugin: 3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) - unplugin-auto-import: 21.0.0(@nuxt/kit@4.5.1(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))))(@vueuse/core@14.4.0(vue@3.5.40(typescript@6.0.3))) - unplugin-vue-components: 32.1.0(@nuxt/kit@4.5.1(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))))(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) + unplugin-auto-import: 21.0.0(@nuxt/kit@4.5.1(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))))(@vueuse/core@14.4.0(vue@3.5.40(typescript@6.0.3))) + unplugin-vue-components: 32.1.0(@nuxt/kit@4.5.1(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))))(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) vaul-vue: 0.4.1(reka-ui@2.10.1(vue@3.5.40(typescript@6.0.3)))(vue@3.5.40(typescript@6.0.3)) vue-component-type-helpers: 3.3.8 optionalDependencies: @@ -9606,15 +9722,15 @@ snapshots: - vue - webpack - '@nuxt/ui@4.11.0(6838e9221379a9b0d70637eede91d09f)': + '@nuxt/ui@4.11.0(a1e579ddea048f2c501b496bf046bd3b)': dependencies: '@floating-ui/dom': 1.8.0 '@iconify/vue': 5.0.1(vue@3.5.40(typescript@6.0.3)) - '@nuxt/fonts': 0.14.0(@vercel/functions@3.9.5(ws@8.21.1))(db0@0.3.4)(esbuild@0.28.1)(ioredis@5.11.1)(magic-string@1.2.2)(magicast@0.5.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) - '@nuxt/icon': 2.5.1(magic-string@1.2.2)(magicast@0.5.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) - '@nuxt/kit': 4.5.2(magic-string@1.2.2)(magicast@0.5.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) + '@nuxt/fonts': 0.14.0(@vercel/functions@3.9.5(ws@8.21.1))(db0@0.3.4)(esbuild@0.28.1)(ioredis@5.11.1(supports-color@10.2.2))(magic-string@1.2.2)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) + '@nuxt/icon': 2.5.1(magic-string@1.2.2)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) + '@nuxt/kit': 4.5.2(magic-string@1.2.2)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) '@nuxt/schema': 4.5.2 - '@nuxtjs/color-mode': 4.0.1(magic-string@1.2.2)(magicast@0.5.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) + '@nuxtjs/color-mode': 4.0.1(magic-string@1.2.2)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) '@standard-schema/spec': 1.1.0 '@tailwindcss/postcss': 4.3.3 '@tailwindcss/vite': 4.3.3(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) @@ -9637,7 +9753,7 @@ snapshots: '@tiptap/starter-kit': 3.29.0 '@tiptap/suggestion': 3.29.0(@floating-ui/dom@1.8.0)(@tiptap/core@3.29.0(@tiptap/pm@3.29.0))(@tiptap/pm@3.29.0) '@tiptap/vue-3': 3.29.0(@floating-ui/dom@1.8.0)(@tiptap/core@3.29.0(@tiptap/pm@3.29.0))(@tiptap/pm@3.29.0)(vue@3.5.40(typescript@6.0.3)) - '@unhead/vue': 3.4.0(@oxc-project/types@0.146.0)(@vitejs/devtools-kit@0.4.8(@modelcontextprotocol/sdk@1.30.0(zod@4.4.3))(cac@7.0.0)(srvx@0.11.22)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(esbuild@0.28.1)(lightningcss@1.33.0)(oxc-parser@0.143.0)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) + '@unhead/vue': 3.4.0(@oxc-project/types@0.146.0)(@vitejs/devtools-kit@0.4.8(@modelcontextprotocol/sdk@1.30.0(supports-color@10.2.2)(zod@4.4.3))(cac@7.0.0)(srvx@0.11.22)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(esbuild@0.28.1)(lightningcss@1.33.0)(oxc-parser@0.143.0)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) '@vueuse/core': 14.4.0(vue@3.5.40(typescript@6.0.3)) '@vueuse/integrations': 14.4.0(change-case@5.4.4)(fuse.js@7.5.0)(vue@3.5.40(typescript@6.0.3)) '@vueuse/shared': 14.4.0(vue@3.5.40(typescript@6.0.3)) @@ -9668,8 +9784,8 @@ snapshots: typescript: 6.0.3 ufo: 1.6.4 unplugin: 3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) - unplugin-auto-import: 21.1.0(@nuxt/kit@4.5.2(magic-string@1.2.2)(magicast@0.5.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))))(@vueuse/core@14.4.0(vue@3.5.40(typescript@6.0.3)))(esbuild@0.28.1)(oxc-parser@0.143.0)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) - unplugin-vue-components: 32.1.0(@nuxt/kit@4.5.2(magic-string@1.2.2)(magicast@0.5.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))))(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) + unplugin-auto-import: 21.1.0(@nuxt/kit@4.5.2(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))))(@vueuse/core@14.4.0(vue@3.5.40(typescript@6.0.3)))(esbuild@0.28.1)(oxc-parser@0.143.0)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) + unplugin-vue-components: 32.1.0(@nuxt/kit@4.5.2(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))))(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) vaul-vue: 0.4.1(reka-ui@2.10.3(vue@3.5.40(typescript@6.0.3)))(vue@3.5.40(typescript@6.0.3)) vue-component-type-helpers: 3.3.11 optionalDependencies: @@ -9729,11 +9845,11 @@ snapshots: - vue - webpack - '@nuxt/vite-builder@4.5.1(c099f555d6328e253a8360c438825eb3)': + '@nuxt/vite-builder@4.5.1(3d63aa8ee0ff970f396955d9e7c4cf12)': dependencies: - '@nuxt/kit': 4.5.1(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) + '@nuxt/kit': 4.5.1(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) '@vitejs/plugin-vue': 6.0.8(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) - '@vitejs/plugin-vue-jsx': 5.1.6(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) + '@vitejs/plugin-vue-jsx': 5.1.6(supports-color@10.2.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) autoprefixer: 10.5.4(postcss@8.5.23) consola: 3.4.2 cssnano: 8.0.2(postcss@8.5.23) @@ -9747,7 +9863,7 @@ snapshots: knitwork: 1.3.0 mlly: 1.8.2 mocked-exports: 0.1.1 - nuxt: 4.5.1(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7))(@modelcontextprotocol/sdk@1.30.0(zod@4.4.3))(@types/node@26.1.1)(@vercel/functions@3.9.5(ws@8.21.1))(@vue/compiler-sfc@3.5.41)(cac@7.0.0)(db0@0.3.4)(esbuild@0.28.1)(eslint@10.9.1(jiti@2.7.0))(ioredis@5.11.1)(lightningcss@1.33.0)(magicast@0.5.3)(optionator@0.9.4)(oxc-parser@0.140.0)(rollup-plugin-visualizer@7.0.1(rolldown@1.2.0)(rollup@4.62.2))(rollup@4.62.2)(srvx@0.11.22)(terser@5.49.0)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue-tsc@3.3.11(typescript@6.0.3))(yaml@2.9.0) + nuxt: 4.5.1(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@modelcontextprotocol/sdk@1.30.0(supports-color@10.2.2)(zod@4.4.3))(@types/node@26.1.1)(@vercel/functions@3.9.5(ws@8.21.1))(@vue/compiler-sfc@3.5.41)(cac@7.0.0)(db0@0.3.4)(esbuild@0.28.1)(eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2))(ioredis@5.11.1(supports-color@10.2.2))(lightningcss@1.33.0)(magicast@0.5.4)(optionator@0.9.4)(oxc-parser@0.140.0)(rollup-plugin-visualizer@7.0.1(rolldown@1.2.0)(rollup@4.62.2))(rollup@4.62.2)(srvx@0.11.22)(supports-color@10.2.2)(terser@5.49.0)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue-tsc@3.3.11(typescript@6.0.3))(yaml@2.9.0) nypm: 0.6.8 pathe: 2.0.3 pkg-types: 2.3.1 @@ -9757,19 +9873,23 @@ snapshots: std-env: 4.2.0 ufo: 1.6.4 unenv: 2.0.0-rc.24 + unplugin: 3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) vite: 8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0) vite-node: 6.0.0(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0) - vite-plugin-checker: 0.14.5(eslint@10.9.1(jiti@2.7.0))(optionator@0.9.4)(typescript@6.0.3)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue-tsc@3.3.11(typescript@6.0.3)) + vite-plugin-checker: 0.14.5(eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2))(optionator@0.9.4)(typescript@6.0.3)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue-tsc@3.3.11(typescript@6.0.3)) vue: 3.5.40(typescript@6.0.3) vue-bundle-renderer: 2.3.1 optionalDependencies: - '@babel/plugin-syntax-jsx': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-syntax-jsx': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) rolldown: 1.2.0 rollup-plugin-visualizer: 7.0.1(rolldown@1.2.0)(rollup@4.62.2) transitivePeerDependencies: - '@biomejs/biome' + - '@farmfe/core' + - '@rspack/core' - '@types/node' - '@vitejs/devtools' + - bun-types-no-globals - esbuild - eslint - less @@ -9779,6 +9899,7 @@ snapshots: - optionator - oxc-parser - oxlint + - rollup - sass - sass-embedded - stylelint @@ -9788,15 +9909,16 @@ snapshots: - terser - tsx - typescript - - unplugin + - unloader - vue-tsc + - webpack - yaml - '@nuxt/vite-builder@4.5.2(45266c5b6542b8cb0b24dc7392d1d850)': + '@nuxt/vite-builder@4.5.2(7024089c69f44c596692c8e47d1c1987)': dependencies: - '@nuxt/kit': 4.5.2(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) + '@nuxt/kit': 4.5.2(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) '@vitejs/plugin-vue': 6.0.8(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) - '@vitejs/plugin-vue-jsx': 5.1.6(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) + '@vitejs/plugin-vue-jsx': 5.1.6(supports-color@10.2.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) autoprefixer: 10.5.4(postcss@8.5.26) consola: 3.4.2 cssnano: 8.0.2(postcss@8.5.26) @@ -9810,7 +9932,7 @@ snapshots: knitwork: 1.3.0 mlly: 1.8.2 mocked-exports: 0.1.1 - nuxt: 4.5.2(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7))(@oxc-project/types@0.146.0)(@types/node@26.1.1)(@vercel/functions@3.9.5(ws@8.21.1))(@vitejs/devtools-kit@0.4.8(@modelcontextprotocol/sdk@1.30.0(zod@4.4.3))(cac@7.0.0)(srvx@0.11.22)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(@vue/compiler-sfc@3.5.41)(cac@7.0.0)(db0@0.3.4)(esbuild@0.28.1)(eslint@10.9.1(jiti@2.7.0))(ioredis@5.11.1)(lightningcss@1.33.0)(magicast@0.5.4)(optionator@0.9.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(rollup-plugin-visualizer@7.0.1(rolldown@1.2.5)(rollup@4.62.2))(rollup@4.62.2)(srvx@0.11.22)(terser@5.49.0)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue-tsc@3.3.11(typescript@6.0.3))(yaml@2.9.0) + nuxt: 4.5.2(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@oxc-project/types@0.146.0)(@types/node@26.1.1)(@vercel/functions@3.9.5(ws@8.21.1))(@vitejs/devtools-kit@0.4.8(@modelcontextprotocol/sdk@1.30.0(supports-color@10.2.2)(zod@4.4.3))(cac@7.0.0)(srvx@0.11.22)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(@vue/compiler-sfc@3.5.41)(cac@7.0.0)(db0@0.3.4)(esbuild@0.28.1)(eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2))(ioredis@5.11.1(supports-color@10.2.2))(lightningcss@1.33.0)(magicast@0.5.3)(optionator@0.9.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(rollup-plugin-visualizer@7.0.1(rolldown@1.2.5)(rollup@4.62.2))(rollup@4.62.2)(srvx@0.11.22)(supports-color@10.2.2)(terser@5.49.0)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue-tsc@3.3.11(typescript@6.0.3))(yaml@2.9.0) nypm: 0.6.9 pathe: 2.0.3 pkg-types: 2.3.1 @@ -9820,19 +9942,23 @@ snapshots: std-env: 4.2.0 ufo: 1.6.4 unenv: 2.0.0-rc.24 + unplugin: 3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) vite: 8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0) vite-node: 6.0.0(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0) - vite-plugin-checker: 0.14.5(eslint@10.9.1(jiti@2.7.0))(optionator@0.9.4)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue-tsc@3.3.11(typescript@6.0.3)) + vite-plugin-checker: 0.14.5(eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2))(optionator@0.9.4)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue-tsc@3.3.11(typescript@6.0.3)) vue: 3.5.40(typescript@6.0.3) vue-bundle-renderer: 2.3.1 optionalDependencies: - '@babel/plugin-syntax-jsx': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-syntax-jsx': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) rolldown: 1.2.5 rollup-plugin-visualizer: 7.0.1(rolldown@1.2.5)(rollup@4.62.2) transitivePeerDependencies: - '@biomejs/biome' + - '@farmfe/core' + - '@rspack/core' - '@types/node' - '@vitejs/devtools' + - bun-types-no-globals - esbuild - eslint - less @@ -9842,6 +9968,7 @@ snapshots: - optionator - oxc-parser - oxlint + - rollup - sass - sass-embedded - stylelint @@ -9851,13 +9978,14 @@ snapshots: - terser - tsx - typescript - - unplugin + - unloader - vue-tsc + - webpack - yaml - '@nuxtjs/color-mode@4.0.1(magic-string@0.30.21)(magicast@0.5.3)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))': + '@nuxtjs/color-mode@4.0.1(magic-string@0.30.21)(magicast@0.5.4)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))': dependencies: - '@nuxt/kit': 4.5.1(magic-string@0.30.21)(magicast@0.5.3)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) + '@nuxt/kit': 4.5.1(magic-string@0.30.21)(magicast@0.5.4)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) exsolve: 1.1.0 pathe: 2.0.3 pkg-types: 2.3.1 @@ -9869,9 +9997,9 @@ snapshots: - rolldown - unplugin - '@nuxtjs/color-mode@4.0.1(magic-string@1.2.2)(magicast@0.5.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))': + '@nuxtjs/color-mode@4.0.1(magic-string@1.2.2)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))': dependencies: - '@nuxt/kit': 4.5.1(magic-string@1.2.2)(magicast@0.5.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) + '@nuxt/kit': 4.5.1(magic-string@1.2.2)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) exsolve: 1.1.0 pathe: 2.0.3 pkg-types: 2.3.1 @@ -9883,10 +10011,10 @@ snapshots: - rolldown - unplugin - '@nuxtjs/mcp-toolkit@0.18.1(@vue/compiler-sfc@3.5.41)(h3@1.15.11)(magic-string@1.2.2)(magicast@0.5.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(rollup@4.62.2)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3))(zod@4.4.3)': + '@nuxtjs/mcp-toolkit@0.18.1(@vue/compiler-sfc@3.5.41)(h3@1.15.11)(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(rollup@4.62.2)(supports-color@10.2.2)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3))(zod@4.4.3)': dependencies: - '@modelcontextprotocol/sdk': 1.30.0(zod@4.4.3) - '@nuxt/kit': 4.5.1(magic-string@1.2.2)(magicast@0.5.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) + '@modelcontextprotocol/sdk': 1.30.0(supports-color@10.2.2)(zod@4.4.3) + '@nuxt/kit': 4.5.1(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) '@vitejs/plugin-vue': 6.0.8(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) h3: 1.15.11 tinyglobby: 0.2.17 @@ -9906,15 +10034,15 @@ snapshots: - supports-color - unplugin - '@nuxtjs/robots@6.2.0(cc4380165d9551c2746d0263df7c88c9)': + '@nuxtjs/robots@6.2.0(d17f61d17c502256d5a1cd440e407773)': dependencies: '@fingerprintjs/botd': 2.0.0 - '@nuxt/kit': 4.5.2(magic-string@1.2.2)(magicast@0.5.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) + '@nuxt/kit': 4.5.2(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) consola: 3.4.2 defu: 6.1.7 h3: 1.15.11 - nuxt-site-config: 4.2.3(cc4380165d9551c2746d0263df7c88c9) - nuxtseo-shared: 5.3.14(ea43fc987d0f3aa7681c7d1c1bc24460) + nuxt-site-config: 4.2.3(d17f61d17c502256d5a1cd440e407773) + nuxtseo-shared: 5.3.14(59e9b23a8dedd3896e6822df1ac065af) pathe: 2.0.3 pkg-types: 2.3.1 ufo: 1.6.4 @@ -9931,13 +10059,13 @@ snapshots: - vite - vue - '@nuxtjs/sitemap@8.5.0(cc4380165d9551c2746d0263df7c88c9)': + '@nuxtjs/sitemap@8.5.0(d17f61d17c502256d5a1cd440e407773)': dependencies: - '@nuxt/kit': 4.5.2(magic-string@1.2.2)(magicast@0.5.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) + '@nuxt/kit': 4.5.2(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) consola: 3.4.2 defu: 6.1.7 - nuxt-site-config: 4.2.3(cc4380165d9551c2746d0263df7c88c9) - nuxtseo-shared: 5.3.14(ea43fc987d0f3aa7681c7d1c1bc24460) + nuxt-site-config: 4.2.3(d17f61d17c502256d5a1cd440e407773) + nuxtseo-shared: 5.3.14(59e9b23a8dedd3896e6822df1ac065af) ofetch: 1.5.1 pathe: 2.0.3 pkg-types: 2.3.1 @@ -9982,12 +10110,12 @@ snapshots: '@opentelemetry/otlp-transformer': 0.221.0(@opentelemetry/api@1.9.1) '@opentelemetry/sdk-trace': 2.10.0(@opentelemetry/api@1.9.1) - '@opentelemetry/instrumentation@0.221.0(@opentelemetry/api@1.9.1)': + '@opentelemetry/instrumentation@0.221.0(@opentelemetry/api@1.9.1)(supports-color@10.2.2)': dependencies: '@opentelemetry/api': 1.9.1 '@opentelemetry/api-logs': 0.221.0 import-in-the-middle: 3.3.3 - require-in-the-middle: 8.0.1 + require-in-the-middle: 8.0.1(supports-color@10.2.2) transitivePeerDependencies: - supports-color @@ -10202,6 +10330,11 @@ snapshots: '@poppinss/exception@1.2.3': {} + '@quansync/fs@1.0.0': + dependencies: + quansync: 1.0.0 + optional: true + '@resvg/resvg-js-android-arm-eabi@2.6.2': optional: true @@ -10599,11 +10732,11 @@ snapshots: '@standard-schema/spec@1.1.0': {} - '@stylistic/eslint-plugin@5.10.0(eslint@10.9.1(jiti@2.7.0))': + '@stylistic/eslint-plugin@5.10.0(eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2))': dependencies: - '@eslint-community/eslint-utils': 4.10.1(eslint@10.9.1(jiti@2.7.0)) + '@eslint-community/eslint-utils': 4.10.1(eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2)) '@typescript-eslint/types': 8.65.0 - eslint: 10.9.1(jiti@2.7.0) + eslint: 10.9.1(jiti@2.7.0)(supports-color@10.2.2) eslint-visitor-keys: 4.2.1 espree: 10.4.0 estraverse: 5.3.0 @@ -10981,15 +11114,15 @@ snapshots: '@types/web-bluetooth@0.0.21': {} - '@typescript-eslint/eslint-plugin@8.68.0(@typescript-eslint/parser@8.68.0(eslint@10.9.1(jiti@2.7.0))(typescript@6.0.3))(eslint@10.9.1(jiti@2.7.0))(typescript@6.0.3)': + '@typescript-eslint/eslint-plugin@8.68.0(@typescript-eslint/parser@8.68.0(eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3))(eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.68.0(eslint@10.9.1(jiti@2.7.0))(typescript@6.0.3) + '@typescript-eslint/parser': 8.68.0(eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3) '@typescript-eslint/scope-manager': 8.68.0 - '@typescript-eslint/type-utils': 8.68.0(eslint@10.9.1(jiti@2.7.0))(typescript@6.0.3) - '@typescript-eslint/utils': 8.68.0(eslint@10.9.1(jiti@2.7.0))(typescript@6.0.3) + '@typescript-eslint/type-utils': 8.68.0(eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3) + '@typescript-eslint/utils': 8.68.0(eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3) '@typescript-eslint/visitor-keys': 8.68.0 - eslint: 10.9.1(jiti@2.7.0) + eslint: 10.9.1(jiti@2.7.0)(supports-color@10.2.2) ignore: 7.0.6 natural-compare: 1.4.0 ts-api-utils: 2.5.0(typescript@6.0.3) @@ -10997,23 +11130,23 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.68.0(eslint@10.9.1(jiti@2.7.0))(typescript@6.0.3)': + '@typescript-eslint/parser@8.68.0(eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)': dependencies: '@typescript-eslint/scope-manager': 8.68.0 '@typescript-eslint/types': 8.68.0 - '@typescript-eslint/typescript-estree': 8.68.0(typescript@6.0.3) + '@typescript-eslint/typescript-estree': 8.68.0(supports-color@10.2.2)(typescript@6.0.3) '@typescript-eslint/visitor-keys': 8.68.0 - debug: 4.4.3 - eslint: 10.9.1(jiti@2.7.0) + debug: 4.4.3(supports-color@10.2.2) + eslint: 10.9.1(jiti@2.7.0)(supports-color@10.2.2) typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.68.0(typescript@6.0.3)': + '@typescript-eslint/project-service@8.68.0(supports-color@10.2.2)(typescript@6.0.3)': dependencies: '@typescript-eslint/tsconfig-utils': 8.68.0(typescript@6.0.3) '@typescript-eslint/types': 8.68.0 - debug: 4.4.3 + debug: 4.4.3(supports-color@10.2.2) typescript: 6.0.3 transitivePeerDependencies: - supports-color @@ -11027,13 +11160,13 @@ snapshots: dependencies: typescript: 6.0.3 - '@typescript-eslint/type-utils@8.68.0(eslint@10.9.1(jiti@2.7.0))(typescript@6.0.3)': + '@typescript-eslint/type-utils@8.68.0(eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)': dependencies: '@typescript-eslint/types': 8.68.0 - '@typescript-eslint/typescript-estree': 8.68.0(typescript@6.0.3) - '@typescript-eslint/utils': 8.68.0(eslint@10.9.1(jiti@2.7.0))(typescript@6.0.3) - debug: 4.4.3 - eslint: 10.9.1(jiti@2.7.0) + '@typescript-eslint/typescript-estree': 8.68.0(supports-color@10.2.2)(typescript@6.0.3) + '@typescript-eslint/utils': 8.68.0(eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3) + debug: 4.4.3(supports-color@10.2.2) + eslint: 10.9.1(jiti@2.7.0)(supports-color@10.2.2) ts-api-utils: 2.5.0(typescript@6.0.3) typescript: 6.0.3 transitivePeerDependencies: @@ -11043,13 +11176,13 @@ snapshots: '@typescript-eslint/types@8.68.0': {} - '@typescript-eslint/typescript-estree@8.68.0(typescript@6.0.3)': + '@typescript-eslint/typescript-estree@8.68.0(supports-color@10.2.2)(typescript@6.0.3)': dependencies: - '@typescript-eslint/project-service': 8.68.0(typescript@6.0.3) + '@typescript-eslint/project-service': 8.68.0(supports-color@10.2.2)(typescript@6.0.3) '@typescript-eslint/tsconfig-utils': 8.68.0(typescript@6.0.3) '@typescript-eslint/types': 8.68.0 '@typescript-eslint/visitor-keys': 8.68.0 - debug: 4.4.3 + debug: 4.4.3(supports-color@10.2.2) minimatch: 10.2.5 semver: 7.8.5 tinyglobby: 0.2.17 @@ -11058,13 +11191,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.68.0(eslint@10.9.1(jiti@2.7.0))(typescript@6.0.3)': + '@typescript-eslint/utils@8.68.0(eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)': dependencies: - '@eslint-community/eslint-utils': 4.10.1(eslint@10.9.1(jiti@2.7.0)) + '@eslint-community/eslint-utils': 4.10.1(eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2)) '@typescript-eslint/scope-manager': 8.68.0 '@typescript-eslint/types': 8.68.0 - '@typescript-eslint/typescript-estree': 8.68.0(typescript@6.0.3) - eslint: 10.9.1(jiti@2.7.0) + '@typescript-eslint/typescript-estree': 8.68.0(supports-color@10.2.2)(typescript@6.0.3) + eslint: 10.9.1(jiti@2.7.0)(supports-color@10.2.2) typescript: 6.0.3 transitivePeerDependencies: - supports-color @@ -11076,9 +11209,9 @@ snapshots: '@ungap/structured-clone@1.3.3': {} - '@unhead/bundler@3.2.3(@modelcontextprotocol/sdk@1.30.0(zod@4.4.3))(cac@7.0.0)(esbuild@0.28.1)(lightningcss@1.33.0)(rolldown@1.2.0)(rollup@4.62.2)(srvx@0.11.22)(typescript@6.0.3)(unhead@3.2.3(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))': + '@unhead/bundler@3.2.3(@modelcontextprotocol/sdk@1.30.0(supports-color@10.2.2)(zod@4.4.3))(cac@7.0.0)(esbuild@0.28.1)(lightningcss@1.33.0)(rolldown@1.2.0)(rollup@4.62.2)(srvx@0.11.22)(typescript@6.0.3)(unhead@3.2.3(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))': dependencies: - '@vitejs/devtools-kit': 0.4.8(@modelcontextprotocol/sdk@1.30.0(zod@4.4.3))(cac@7.0.0)(srvx@0.11.22)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) + '@vitejs/devtools-kit': 0.4.8(@modelcontextprotocol/sdk@1.30.0(supports-color@10.2.2)(zod@4.4.3))(cac@7.0.0)(srvx@0.11.22)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) magic-string: 1.1.0 oxc-parser: 0.140.0 oxc-walker: 1.0.0(esbuild@0.28.1)(oxc-parser@0.140.0)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) @@ -11101,14 +11234,14 @@ snapshots: - typescript - unloader - '@unhead/bundler@3.4.0(@oxc-project/types@0.146.0)(@vitejs/devtools-kit@0.4.8(@modelcontextprotocol/sdk@1.30.0(zod@4.4.3))(cac@7.0.0)(srvx@0.11.22)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(esbuild@0.28.1)(lightningcss@1.33.0)(oxc-parser@0.143.0)(rolldown@1.2.5)(rollup@4.62.2)(unhead@3.4.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))': + '@unhead/bundler@3.4.0(@oxc-project/types@0.146.0)(@vitejs/devtools-kit@0.4.8(@modelcontextprotocol/sdk@1.30.0(supports-color@10.2.2)(zod@4.4.3))(cac@7.0.0)(srvx@0.11.22)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(esbuild@0.28.1)(lightningcss@1.33.0)(oxc-parser@0.143.0)(rolldown@1.2.5)(rollup@4.62.2)(unhead@3.4.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))': dependencies: magic-string: 1.1.0 oxc-walker: 1.1.1(@oxc-project/types@0.146.0)(oxc-parser@0.143.0)(rolldown@1.2.5) unhead: 3.4.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) unplugin: 3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) optionalDependencies: - '@vitejs/devtools-kit': 0.4.8(@modelcontextprotocol/sdk@1.30.0(zod@4.4.3))(cac@7.0.0)(srvx@0.11.22)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) + '@vitejs/devtools-kit': 0.4.8(@modelcontextprotocol/sdk@1.30.0(supports-color@10.2.2)(zod@4.4.3))(cac@7.0.0)(srvx@0.11.22)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) esbuild: 0.28.1 lightningcss: 1.33.0 oxc-parser: 0.143.0 @@ -11128,9 +11261,9 @@ snapshots: unhead: 2.1.16 vue: 3.5.40(typescript@6.0.3) - '@unhead/vue@3.2.3(@modelcontextprotocol/sdk@1.30.0(zod@4.4.3))(cac@7.0.0)(esbuild@0.28.1)(lightningcss@1.33.0)(rolldown@1.2.0)(rollup@4.62.2)(srvx@0.11.22)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3))': + '@unhead/vue@3.2.3(@modelcontextprotocol/sdk@1.30.0(supports-color@10.2.2)(zod@4.4.3))(cac@7.0.0)(esbuild@0.28.1)(lightningcss@1.33.0)(rolldown@1.2.0)(rollup@4.62.2)(srvx@0.11.22)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3))': dependencies: - '@unhead/bundler': 3.2.3(@modelcontextprotocol/sdk@1.30.0(zod@4.4.3))(cac@7.0.0)(esbuild@0.28.1)(lightningcss@1.33.0)(rolldown@1.2.0)(rollup@4.62.2)(srvx@0.11.22)(typescript@6.0.3)(unhead@3.2.3(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) + '@unhead/bundler': 3.2.3(@modelcontextprotocol/sdk@1.30.0(supports-color@10.2.2)(zod@4.4.3))(cac@7.0.0)(esbuild@0.28.1)(lightningcss@1.33.0)(rolldown@1.2.0)(rollup@4.62.2)(srvx@0.11.22)(typescript@6.0.3)(unhead@3.2.3(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) hookable: 6.1.1 unhead: 3.2.3(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) unplugin: 3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) @@ -11152,9 +11285,9 @@ snapshots: - typescript - unloader - '@unhead/vue@3.4.0(@oxc-project/types@0.146.0)(@vitejs/devtools-kit@0.4.8(@modelcontextprotocol/sdk@1.30.0(zod@4.4.3))(cac@7.0.0)(srvx@0.11.22)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(esbuild@0.28.1)(lightningcss@1.33.0)(oxc-parser@0.143.0)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3))': + '@unhead/vue@3.4.0(@oxc-project/types@0.146.0)(@vitejs/devtools-kit@0.4.8(@modelcontextprotocol/sdk@1.30.0(supports-color@10.2.2)(zod@4.4.3))(cac@7.0.0)(srvx@0.11.22)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(esbuild@0.28.1)(lightningcss@1.33.0)(oxc-parser@0.143.0)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3))': dependencies: - '@unhead/bundler': 3.4.0(@oxc-project/types@0.146.0)(@vitejs/devtools-kit@0.4.8(@modelcontextprotocol/sdk@1.30.0(zod@4.4.3))(cac@7.0.0)(srvx@0.11.22)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(esbuild@0.28.1)(lightningcss@1.33.0)(oxc-parser@0.143.0)(rolldown@1.2.5)(rollup@4.62.2)(unhead@3.4.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) + '@unhead/bundler': 3.4.0(@oxc-project/types@0.146.0)(@vitejs/devtools-kit@0.4.8(@modelcontextprotocol/sdk@1.30.0(supports-color@10.2.2)(zod@4.4.3))(cac@7.0.0)(srvx@0.11.22)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(esbuild@0.28.1)(lightningcss@1.33.0)(oxc-parser@0.143.0)(rolldown@1.2.5)(rollup@4.62.2)(unhead@3.4.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) hookable: 6.1.1 unhead: 3.4.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) unplugin: 3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) @@ -11175,6 +11308,17 @@ snapshots: - rollup - unloader + '@unocss/config@66.7.5': + dependencies: + '@unocss/core': 66.7.5 + colorette: 2.0.20 + consola: 3.4.2 + unconfig: 7.5.0 + optional: true + + '@unocss/core@66.7.5': + optional: true + '@unrs/resolver-binding-android-arm-eabi@1.12.2': optional: true @@ -11249,9 +11393,9 @@ snapshots: dependencies: valibot: 1.4.2(typescript@6.0.3) - '@vercel/analytics@2.0.1(nuxt@4.5.2(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7))(@oxc-project/types@0.146.0)(@types/node@26.1.1)(@vercel/functions@3.9.5(ws@8.21.1))(@vitejs/devtools-kit@0.4.8(@modelcontextprotocol/sdk@1.30.0(zod@4.4.3))(cac@7.0.0)(srvx@0.11.22)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(@vue/compiler-sfc@3.5.41)(cac@7.0.0)(db0@0.3.4)(esbuild@0.28.1)(eslint@10.9.1(jiti@2.7.0))(ioredis@5.11.1)(lightningcss@1.33.0)(magicast@0.5.4)(optionator@0.9.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(rollup-plugin-visualizer@7.0.1(rolldown@1.2.5)(rollup@4.62.2))(rollup@4.62.2)(srvx@0.11.22)(terser@5.49.0)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue-tsc@3.3.11(typescript@6.0.3))(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3))': + '@vercel/analytics@2.0.1(987d2a12eebc4553111f11af1953ade6)': optionalDependencies: - nuxt: 4.5.2(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7))(@oxc-project/types@0.146.0)(@types/node@26.1.1)(@vercel/functions@3.9.5(ws@8.21.1))(@vitejs/devtools-kit@0.4.8(@modelcontextprotocol/sdk@1.30.0(zod@4.4.3))(cac@7.0.0)(srvx@0.11.22)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(@vue/compiler-sfc@3.5.41)(cac@7.0.0)(db0@0.3.4)(esbuild@0.28.1)(eslint@10.9.1(jiti@2.7.0))(ioredis@5.11.1)(lightningcss@1.33.0)(magicast@0.5.4)(optionator@0.9.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(rollup-plugin-visualizer@7.0.1(rolldown@1.2.5)(rollup@4.62.2))(rollup@4.62.2)(srvx@0.11.22)(terser@5.49.0)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue-tsc@3.3.11(typescript@6.0.3))(yaml@2.9.0) + nuxt: 4.5.2(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@oxc-project/types@0.146.0)(@types/node@26.1.1)(@vercel/functions@3.9.5(ws@8.21.1))(@vitejs/devtools-kit@0.4.8(@modelcontextprotocol/sdk@1.30.0(supports-color@10.2.2)(zod@4.4.3))(cac@7.0.0)(srvx@0.11.22)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(@vue/compiler-sfc@3.5.41)(cac@7.0.0)(db0@0.3.4)(esbuild@0.28.1)(eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2))(ioredis@5.11.1(supports-color@10.2.2))(lightningcss@1.33.0)(magicast@0.5.3)(optionator@0.9.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(rollup-plugin-visualizer@7.0.1(rolldown@1.2.5)(rollup@4.62.2))(rollup@4.62.2)(srvx@0.11.22)(supports-color@10.2.2)(terser@5.49.0)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue-tsc@3.3.11(typescript@6.0.3))(yaml@2.9.0) vue: 3.5.40(typescript@6.0.3) '@vercel/cli-config@0.2.4': @@ -11277,9 +11421,9 @@ snapshots: optionalDependencies: '@opentelemetry/api': 1.9.1 - '@vercel/nft@1.10.2(rollup@4.62.2)': + '@vercel/nft@1.10.2(rollup@4.62.2)(supports-color@10.2.2)': dependencies: - '@mapbox/node-pre-gyp': 2.0.3 + '@mapbox/node-pre-gyp': 2.0.3(supports-color@10.2.2) '@rollup/pluginutils': 5.4.0(rollup@4.62.2) acorn: 8.17.0 acorn-import-attributes: 1.9.5(acorn@8.17.0) @@ -11304,26 +11448,26 @@ snapshots: '@vercel/cli-exec': 1.0.1 jose: 5.10.0 - '@vercel/otel@2.1.3(@opentelemetry/api-logs@0.221.0)(@opentelemetry/api@1.9.1)(@opentelemetry/instrumentation@0.221.0(@opentelemetry/api@1.9.1))(@opentelemetry/resources@2.10.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-logs@0.221.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-metrics@2.10.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.10.0(@opentelemetry/api@1.9.1))': + '@vercel/otel@2.1.3(@opentelemetry/api-logs@0.221.0)(@opentelemetry/api@1.9.1)(@opentelemetry/instrumentation@0.221.0(@opentelemetry/api@1.9.1)(supports-color@10.2.2))(@opentelemetry/resources@2.10.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-logs@0.221.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-metrics@2.10.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.10.0(@opentelemetry/api@1.9.1))': dependencies: '@opentelemetry/api': 1.9.1 '@opentelemetry/api-logs': 0.221.0 - '@opentelemetry/instrumentation': 0.221.0(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation': 0.221.0(@opentelemetry/api@1.9.1)(supports-color@10.2.2) '@opentelemetry/resources': 2.10.0(@opentelemetry/api@1.9.1) '@opentelemetry/sdk-logs': 0.221.0(@opentelemetry/api@1.9.1) '@opentelemetry/sdk-metrics': 2.10.0(@opentelemetry/api@1.9.1) '@opentelemetry/sdk-trace-base': 2.10.0(@opentelemetry/api@1.9.1) - '@vercel/speed-insights@2.0.0(nuxt@4.5.2(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7))(@oxc-project/types@0.146.0)(@types/node@26.1.1)(@vercel/functions@3.9.5(ws@8.21.1))(@vitejs/devtools-kit@0.4.8(@modelcontextprotocol/sdk@1.30.0(zod@4.4.3))(cac@7.0.0)(srvx@0.11.22)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(@vue/compiler-sfc@3.5.41)(cac@7.0.0)(db0@0.3.4)(esbuild@0.28.1)(eslint@10.9.1(jiti@2.7.0))(ioredis@5.11.1)(lightningcss@1.33.0)(magicast@0.5.4)(optionator@0.9.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(rollup-plugin-visualizer@7.0.1(rolldown@1.2.5)(rollup@4.62.2))(rollup@4.62.2)(srvx@0.11.22)(terser@5.49.0)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue-tsc@3.3.11(typescript@6.0.3))(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3))': + '@vercel/speed-insights@2.0.0(987d2a12eebc4553111f11af1953ade6)': optionalDependencies: - nuxt: 4.5.2(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7))(@oxc-project/types@0.146.0)(@types/node@26.1.1)(@vercel/functions@3.9.5(ws@8.21.1))(@vitejs/devtools-kit@0.4.8(@modelcontextprotocol/sdk@1.30.0(zod@4.4.3))(cac@7.0.0)(srvx@0.11.22)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(@vue/compiler-sfc@3.5.41)(cac@7.0.0)(db0@0.3.4)(esbuild@0.28.1)(eslint@10.9.1(jiti@2.7.0))(ioredis@5.11.1)(lightningcss@1.33.0)(magicast@0.5.4)(optionator@0.9.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(rollup-plugin-visualizer@7.0.1(rolldown@1.2.5)(rollup@4.62.2))(rollup@4.62.2)(srvx@0.11.22)(terser@5.49.0)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue-tsc@3.3.11(typescript@6.0.3))(yaml@2.9.0) + nuxt: 4.5.2(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@oxc-project/types@0.146.0)(@types/node@26.1.1)(@vercel/functions@3.9.5(ws@8.21.1))(@vitejs/devtools-kit@0.4.8(@modelcontextprotocol/sdk@1.30.0(supports-color@10.2.2)(zod@4.4.3))(cac@7.0.0)(srvx@0.11.22)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(@vue/compiler-sfc@3.5.41)(cac@7.0.0)(db0@0.3.4)(esbuild@0.28.1)(eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2))(ioredis@5.11.1(supports-color@10.2.2))(lightningcss@1.33.0)(magicast@0.5.3)(optionator@0.9.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(rollup-plugin-visualizer@7.0.1(rolldown@1.2.5)(rollup@4.62.2))(rollup@4.62.2)(srvx@0.11.22)(supports-color@10.2.2)(terser@5.49.0)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue-tsc@3.3.11(typescript@6.0.3))(yaml@2.9.0) vue: 3.5.40(typescript@6.0.3) - '@vitejs/devtools-kit@0.4.8(@modelcontextprotocol/sdk@1.30.0(zod@4.4.3))(cac@7.0.0)(srvx@0.11.22)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))': + '@vitejs/devtools-kit@0.4.8(@modelcontextprotocol/sdk@1.30.0(supports-color@10.2.2)(zod@4.4.3))(cac@7.0.0)(srvx@0.11.22)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))': dependencies: - '@devframes/hub': 0.7.14(devframe@0.7.14(@modelcontextprotocol/sdk@1.30.0(zod@4.4.3))(cac@7.0.0)(srvx@0.11.22)(typescript@6.0.3)) - '@devframes/json-render': 0.7.14(@devframes/hub@0.7.14(devframe@0.7.14(@modelcontextprotocol/sdk@1.30.0(zod@4.4.3))(cac@7.0.0)(srvx@0.11.22)(typescript@6.0.3)))(devframe@0.7.14(@modelcontextprotocol/sdk@1.30.0(zod@4.4.3))(cac@7.0.0)(srvx@0.11.22)(typescript@6.0.3)) - devframe: 0.7.14(@modelcontextprotocol/sdk@1.30.0(zod@4.4.3))(cac@7.0.0)(srvx@0.11.22)(typescript@6.0.3) + '@devframes/hub': 0.7.14(devframe@0.7.14(@modelcontextprotocol/sdk@1.30.0(supports-color@10.2.2)(zod@4.4.3))(cac@7.0.0)(srvx@0.11.22)(typescript@6.0.3)) + '@devframes/json-render': 0.7.14(@devframes/hub@0.7.14(devframe@0.7.14(@modelcontextprotocol/sdk@1.30.0(supports-color@10.2.2)(zod@4.4.3))(cac@7.0.0)(srvx@0.11.22)(typescript@6.0.3)))(devframe@0.7.14(@modelcontextprotocol/sdk@1.30.0(supports-color@10.2.2)(zod@4.4.3))(cac@7.0.0)(srvx@0.11.22)(typescript@6.0.3)) + devframe: 0.7.14(@modelcontextprotocol/sdk@1.30.0(supports-color@10.2.2)(zod@4.4.3))(cac@7.0.0)(srvx@0.11.22)(typescript@6.0.3) local-pkg: 1.2.1 mlly: 1.8.2 nostics: 1.2.0 @@ -11335,25 +11479,25 @@ snapshots: - srvx - typescript - '@vitejs/plugin-vue-jsx@5.1.6(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3))': + '@vitejs/plugin-vue-jsx@5.1.6(supports-color@10.2.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3))': dependencies: - '@babel/core': 7.29.7 - '@babel/plugin-syntax-typescript': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-typescript': 7.29.7(@babel/core@7.29.7) + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/plugin-syntax-typescript': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/plugin-transform-typescript': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) '@rolldown/pluginutils': 1.0.1 - '@vue/babel-plugin-jsx': 2.0.1(@babel/core@7.29.7) + '@vue/babel-plugin-jsx': 2.0.1(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) vite: 8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0) vue: 3.5.40(typescript@6.0.3) transitivePeerDependencies: - supports-color - '@vitejs/plugin-vue-jsx@5.1.6(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3))': + '@vitejs/plugin-vue-jsx@5.1.6(supports-color@10.2.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3))': dependencies: - '@babel/core': 7.29.7 - '@babel/plugin-syntax-typescript': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-typescript': 7.29.7(@babel/core@7.29.7) + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/plugin-syntax-typescript': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + '@babel/plugin-transform-typescript': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) '@rolldown/pluginutils': 1.0.1 - '@vue/babel-plugin-jsx': 2.0.1(@babel/core@7.29.7) + '@vue/babel-plugin-jsx': 2.0.1(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) vite: 8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0) vue: 3.5.40(typescript@6.0.3) transitivePeerDependencies: @@ -11418,11 +11562,13 @@ snapshots: '@volar/source-map@2.4.28': {} - '@volar/typescript@2.4.28': + '@volar/typescript@2.4.28(typescript@6.0.3)': dependencies: '@volar/language-core': 2.4.28 path-browserify: 1.0.1 vscode-uri: 3.1.0 + optionalDependencies: + typescript: 6.0.3 '@vue-macros/common@3.1.4(vue@3.5.40(typescript@6.0.3))': dependencies: @@ -11436,27 +11582,27 @@ snapshots: '@vue/babel-helper-vue-transform-on@2.0.1': {} - '@vue/babel-plugin-jsx@2.0.1(@babel/core@7.29.7)': + '@vue/babel-plugin-jsx@2.0.1(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: - '@babel/helper-module-imports': 7.29.7 + '@babel/helper-module-imports': 7.29.7(supports-color@10.2.2) '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-syntax-jsx': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-syntax-jsx': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) '@babel/template': 7.29.7 - '@babel/traverse': 7.29.7 + '@babel/traverse': 7.29.7(supports-color@10.2.2) '@babel/types': 7.29.7 '@vue/babel-helper-vue-transform-on': 2.0.1 - '@vue/babel-plugin-resolve-type': 2.0.1(@babel/core@7.29.7) + '@vue/babel-plugin-resolve-type': 2.0.1(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) '@vue/shared': 3.5.40 optionalDependencies: - '@babel/core': 7.29.7 + '@babel/core': 7.29.7(supports-color@10.2.2) transitivePeerDependencies: - supports-color - '@vue/babel-plugin-resolve-type@2.0.1(@babel/core@7.29.7)': + '@vue/babel-plugin-resolve-type@2.0.1(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: '@babel/code-frame': 7.29.7 - '@babel/core': 7.29.7 - '@babel/helper-module-imports': 7.29.7 + '@babel/core': 7.29.7(supports-color@10.2.2) + '@babel/helper-module-imports': 7.29.7(supports-color@10.2.2) '@babel/helper-plugin-utils': 7.29.7 '@babel/parser': 7.29.7 '@vue/compiler-sfc': 3.5.40 @@ -11626,13 +11772,13 @@ snapshots: '@vueuse/metadata@14.4.0': {} - '@vueuse/nuxt@14.4.0(magic-string@1.1.0)(magicast@0.5.3)(nuxt@4.5.1(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7))(@modelcontextprotocol/sdk@1.30.0(zod@4.4.3))(@types/node@26.1.1)(@vercel/functions@3.9.5(ws@8.21.1))(@vue/compiler-sfc@3.5.41)(cac@7.0.0)(db0@0.3.4)(esbuild@0.28.1)(eslint@10.9.1(jiti@2.7.0))(ioredis@5.11.1)(lightningcss@1.33.0)(magicast@0.5.3)(optionator@0.9.4)(oxc-parser@0.140.0)(rollup-plugin-visualizer@7.0.1(rolldown@1.2.0)(rollup@4.62.2))(rollup@4.62.2)(srvx@0.11.22)(terser@5.49.0)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue-tsc@3.3.11(typescript@6.0.3))(yaml@2.9.0))(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vue@3.5.40(typescript@6.0.3))': + '@vueuse/nuxt@14.4.0(15a2d0923048777bbdbc3a1647f555a9)': dependencies: - '@nuxt/kit': 4.5.1(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) + '@nuxt/kit': 4.5.1(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) '@vueuse/core': 14.4.0(vue@3.5.40(typescript@6.0.3)) '@vueuse/metadata': 14.4.0 local-pkg: 1.2.1 - nuxt: 4.5.1(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7))(@modelcontextprotocol/sdk@1.30.0(zod@4.4.3))(@types/node@26.1.1)(@vercel/functions@3.9.5(ws@8.21.1))(@vue/compiler-sfc@3.5.41)(cac@7.0.0)(db0@0.3.4)(esbuild@0.28.1)(eslint@10.9.1(jiti@2.7.0))(ioredis@5.11.1)(lightningcss@1.33.0)(magicast@0.5.3)(optionator@0.9.4)(oxc-parser@0.140.0)(rollup-plugin-visualizer@7.0.1(rolldown@1.2.0)(rollup@4.62.2))(rollup@4.62.2)(srvx@0.11.22)(terser@5.49.0)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue-tsc@3.3.11(typescript@6.0.3))(yaml@2.9.0) + nuxt: 4.5.1(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@modelcontextprotocol/sdk@1.30.0(supports-color@10.2.2)(zod@4.4.3))(@types/node@26.1.1)(@vercel/functions@3.9.5(ws@8.21.1))(@vue/compiler-sfc@3.5.41)(cac@7.0.0)(db0@0.3.4)(esbuild@0.28.1)(eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2))(ioredis@5.11.1(supports-color@10.2.2))(lightningcss@1.33.0)(magicast@0.5.4)(optionator@0.9.4)(oxc-parser@0.140.0)(rollup-plugin-visualizer@7.0.1(rolldown@1.2.0)(rollup@4.62.2))(rollup@4.62.2)(srvx@0.11.22)(supports-color@10.2.2)(terser@5.49.0)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue-tsc@3.3.11(typescript@6.0.3))(yaml@2.9.0) vue: 3.5.40(typescript@6.0.3) transitivePeerDependencies: - magic-string @@ -11850,11 +11996,11 @@ snapshots: birpc@4.0.0: {} - body-parser@2.3.0: + body-parser@2.3.0(supports-color@10.2.2): dependencies: bytes: 3.1.2 content-type: 2.0.0 - debug: 4.4.3 + debug: 4.4.3(supports-color@10.2.2) http-errors: 2.0.1 iconv-lite: 0.7.3 on-finished: 2.4.1 @@ -11974,12 +12120,12 @@ snapshots: chownr@3.0.0: {} - chrome-launcher@1.2.1: + chrome-launcher@1.2.1(supports-color@10.2.2): dependencies: '@types/node': 26.1.1 escape-string-regexp: 4.0.0 is-wsl: 2.2.0 - lighthouse-logger: 2.0.2 + lighthouse-logger: 2.0.2(supports-color@10.2.2) transitivePeerDependencies: - supports-color @@ -12007,9 +12153,12 @@ snapshots: color-name@1.1.4: {} + colorette@2.0.20: + optional: true + colortranslator@5.0.0: {} - comark-content@https://pkg.pr.new/comark-content@67c137f(@vercel/functions@3.9.5(ws@8.21.1))(beautiful-mermaid@1.1.3)(db0@0.3.4)(ioredis@5.11.1)(rangi@2.2.0)(shiki@4.3.1): + comark-content@https://pkg.pr.new/comark-content@67c137f(@vercel/functions@3.9.5(ws@8.21.1))(beautiful-mermaid@1.1.3)(db0@0.3.4)(ioredis@5.11.1(supports-color@10.2.2))(rangi@2.2.0)(shiki@4.3.1): dependencies: citty: 0.2.2 comark: 0.6.2(beautiful-mermaid@1.1.3)(rangi@2.2.0)(shiki@4.3.1) @@ -12020,7 +12169,7 @@ snapshots: picomatch: 4.0.5 slugify: 1.6.9 ufo: 1.6.4 - unstorage: 1.17.5(@vercel/functions@3.9.5(ws@8.21.1))(db0@0.3.4)(ioredis@5.11.1) + unstorage: 1.17.5(@vercel/functions@3.9.5(ws@8.21.1))(db0@0.3.4)(ioredis@5.11.1(supports-color@10.2.2)) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -12050,7 +12199,7 @@ snapshots: dependencies: entities: 8.0.0 htmlparser2: 12.0.0 - js-yaml: 5.2.2 + js-yaml: 5.4.0 markdown-exit: 1.1.0-beta.2 optionalDependencies: beautiful-mermaid: 1.1.3 @@ -12061,7 +12210,7 @@ snapshots: dependencies: entities: 8.0.0 htmlparser2: 12.0.0 - js-yaml: 5.2.2 + js-yaml: 5.4.0 markdown-exit: 1.1.0-beta.2 optionalDependencies: beautiful-mermaid: 1.1.3 @@ -12289,9 +12438,11 @@ snapshots: db0@0.3.4: {} - debug@4.4.3: + debug@4.4.3(supports-color@10.2.2): dependencies: ms: 2.1.3 + optionalDependencies: + supports-color: 10.2.2 deep-is@0.1.4: {} @@ -12324,7 +12475,7 @@ snapshots: devalue@5.9.1: {} - devframe@0.7.14(@modelcontextprotocol/sdk@1.30.0(zod@4.4.3))(cac@7.0.0)(srvx@0.11.22)(typescript@6.0.3): + devframe@0.7.14(@modelcontextprotocol/sdk@1.30.0(supports-color@10.2.2)(zod@4.4.3))(cac@7.0.0)(srvx@0.11.22)(typescript@6.0.3): dependencies: '@valibot/to-json-schema': 1.7.1(valibot@1.4.2(typescript@6.0.3)) birpc: 4.0.0 @@ -12337,7 +12488,7 @@ snapshots: ufo: 1.6.4 valibot: 1.4.2(typescript@6.0.3) optionalDependencies: - '@modelcontextprotocol/sdk': 1.30.0(zod@4.4.3) + '@modelcontextprotocol/sdk': 1.30.0(supports-color@10.2.2)(zod@4.4.3) cac: 7.0.0 transitivePeerDependencies: - srvx @@ -12549,10 +12700,10 @@ snapshots: escape-string-regexp@5.0.0: {} - eslint-config-flat-gitignore@2.3.0(eslint@10.9.1(jiti@2.7.0)): + eslint-config-flat-gitignore@2.3.0(eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2)): dependencies: - '@eslint/compat': 2.1.0(eslint@10.9.1(jiti@2.7.0)) - eslint: 10.9.1(jiti@2.7.0) + '@eslint/compat': 2.1.0(eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2)) + eslint: 10.9.1(jiti@2.7.0)(supports-color@10.2.2) eslint-flat-config-utils@3.2.0: dependencies: @@ -12566,20 +12717,20 @@ snapshots: optionalDependencies: unrs-resolver: 1.12.2 - eslint-merge-processors@2.0.0(eslint@10.9.1(jiti@2.7.0)): + eslint-merge-processors@2.0.0(eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2)): dependencies: - eslint: 10.9.1(jiti@2.7.0) + eslint: 10.9.1(jiti@2.7.0)(supports-color@10.2.2) - eslint-plugin-import-lite@0.6.0(eslint@10.9.1(jiti@2.7.0)): + eslint-plugin-import-lite@0.6.0(eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2)): dependencies: - eslint: 10.9.1(jiti@2.7.0) + eslint: 10.9.1(jiti@2.7.0)(supports-color@10.2.2) - eslint-plugin-import-x@4.17.1(@typescript-eslint/utils@8.68.0(eslint@10.9.1(jiti@2.7.0))(typescript@6.0.3))(eslint@10.9.1(jiti@2.7.0)): + eslint-plugin-import-x@4.17.1(@typescript-eslint/utils@8.68.0(eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3))(eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2): dependencies: '@typescript-eslint/types': 8.65.0 comment-parser: 1.4.7 - debug: 4.4.3 - eslint: 10.9.1(jiti@2.7.0) + debug: 4.4.3(supports-color@10.2.2) + eslint: 10.9.1(jiti@2.7.0)(supports-color@10.2.2) eslint-import-context: 0.1.9(unrs-resolver@1.12.2) is-glob: 4.0.3 minimatch: 10.2.5 @@ -12587,19 +12738,19 @@ snapshots: stable-hash-x: 0.2.0 unrs-resolver: 1.12.2 optionalDependencies: - '@typescript-eslint/utils': 8.68.0(eslint@10.9.1(jiti@2.7.0))(typescript@6.0.3) + '@typescript-eslint/utils': 8.68.0(eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3) transitivePeerDependencies: - supports-color - eslint-plugin-jsdoc@63.3.3(eslint@10.9.1(jiti@2.7.0)): + eslint-plugin-jsdoc@63.3.3(eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2): dependencies: '@es-joy/jsdoccomment': 0.91.0 '@es-joy/resolve.exports': 1.2.0 are-docs-informative: 0.0.2 comment-parser: 1.4.7 - debug: 4.4.3 + debug: 4.4.3(supports-color@10.2.2) escape-string-regexp: 4.0.0 - eslint: 10.9.1(jiti@2.7.0) + eslint: 10.9.1(jiti@2.7.0)(supports-color@10.2.2) espree: 11.2.0 esquery: 1.7.0 html-entities: 2.6.0 @@ -12611,20 +12762,20 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-regexp@3.1.1(eslint@10.9.1(jiti@2.7.0)): + eslint-plugin-regexp@3.1.1(eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2)): dependencies: - '@eslint-community/eslint-utils': 4.10.1(eslint@10.9.1(jiti@2.7.0)) + '@eslint-community/eslint-utils': 4.10.1(eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2)) '@eslint-community/regexpp': 4.12.2 comment-parser: 1.4.7 - eslint: 10.9.1(jiti@2.7.0) + eslint: 10.9.1(jiti@2.7.0)(supports-color@10.2.2) jsdoc-type-pratt-parser: 7.3.0 refa: 0.12.1 regexp-ast-analysis: 0.7.1 scslre: 0.3.0 - eslint-plugin-unicorn@73.0.0(eslint@10.9.1(jiti@2.7.0)): + eslint-plugin-unicorn@73.0.0(eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2)): dependencies: - '@eslint-community/eslint-utils': 4.10.1(eslint@10.9.1(jiti@2.7.0)) + '@eslint-community/eslint-utils': 4.10.1(eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2)) '@eslint/css-tree': 4.0.5 browserslist: 4.28.7 change-case: 5.4.4 @@ -12632,7 +12783,7 @@ snapshots: core-js-compat: 3.49.0 detect-indent: 7.0.2 entities: 4.5.0 - eslint: 10.9.1(jiti@2.7.0) + eslint: 10.9.1(jiti@2.7.0)(supports-color@10.2.2) find-up-simple: 1.0.1 globals: 17.7.0 indent-string: 5.0.0 @@ -12646,24 +12797,24 @@ snapshots: strip-indent: 4.1.1 yaml: 2.9.0 - eslint-plugin-vue@10.10.0(@stylistic/eslint-plugin@5.10.0(eslint@10.9.1(jiti@2.7.0)))(@typescript-eslint/parser@8.68.0(eslint@10.9.1(jiti@2.7.0))(typescript@6.0.3))(eslint@10.9.1(jiti@2.7.0))(vue-eslint-parser@10.4.1(eslint@10.9.1(jiti@2.7.0))): + eslint-plugin-vue@10.10.0(@stylistic/eslint-plugin@5.10.0(eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2)))(@typescript-eslint/parser@8.68.0(eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3))(eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2))(vue-eslint-parser@10.4.1(eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)): dependencies: - '@eslint-community/eslint-utils': 4.10.1(eslint@10.9.1(jiti@2.7.0)) - eslint: 10.9.1(jiti@2.7.0) + '@eslint-community/eslint-utils': 4.10.1(eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2)) + eslint: 10.9.1(jiti@2.7.0)(supports-color@10.2.2) natural-compare: 1.4.0 nth-check: 2.1.1 postcss-selector-parser: 7.1.4 semver: 7.8.5 - vue-eslint-parser: 10.4.1(eslint@10.9.1(jiti@2.7.0)) + vue-eslint-parser: 10.4.1(eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2) xml-name-validator: 5.0.0 optionalDependencies: - '@stylistic/eslint-plugin': 5.10.0(eslint@10.9.1(jiti@2.7.0)) - '@typescript-eslint/parser': 8.68.0(eslint@10.9.1(jiti@2.7.0))(typescript@6.0.3) + '@stylistic/eslint-plugin': 5.10.0(eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2)) + '@typescript-eslint/parser': 8.68.0(eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3) - eslint-processor-vue-blocks@2.0.0(@vue/compiler-sfc@3.5.41)(eslint@10.9.1(jiti@2.7.0)): + eslint-processor-vue-blocks@2.0.0(@vue/compiler-sfc@3.5.41)(eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2)): dependencies: '@vue/compiler-sfc': 3.5.41 - eslint: 10.9.1(jiti@2.7.0) + eslint: 10.9.1(jiti@2.7.0)(supports-color@10.2.2) eslint-scope@9.1.2: dependencies: @@ -12678,11 +12829,11 @@ snapshots: eslint-visitor-keys@5.0.1: {} - eslint@10.9.1(jiti@2.7.0): + eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2): dependencies: - '@eslint-community/eslint-utils': 4.10.1(eslint@10.9.1(jiti@2.7.0)) + '@eslint-community/eslint-utils': 4.10.1(eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2)) '@eslint-community/regexpp': 4.12.2 - '@eslint/config-array': 0.23.5 + '@eslint/config-array': 0.23.5(supports-color@10.2.2) '@eslint/config-helpers': 0.7.0 '@eslint/core': 1.2.1 '@eslint/plugin-kit': 0.7.2 @@ -12692,7 +12843,7 @@ snapshots: '@types/estree': 1.0.9 ajv: 6.15.0 cross-spawn: 7.0.6 - debug: 4.4.3 + debug: 4.4.3(supports-color@10.2.2) escape-string-regexp: 4.0.0 eslint-scope: 9.1.2 eslint-visitor-keys: 5.0.1 @@ -12789,28 +12940,28 @@ snapshots: expect-type@1.4.0: {} - express-rate-limit@8.6.0(express@5.2.1): + express-rate-limit@8.6.0(express@5.2.1(supports-color@10.2.2))(supports-color@10.2.2): dependencies: - debug: 4.4.3 - express: 5.2.1 + debug: 4.4.3(supports-color@10.2.2) + express: 5.2.1(supports-color@10.2.2) ip-address: 10.3.1 transitivePeerDependencies: - supports-color - express@5.2.1: + express@5.2.1(supports-color@10.2.2): dependencies: accepts: 2.0.0 - body-parser: 2.3.0 + body-parser: 2.3.0(supports-color@10.2.2) content-disposition: 1.1.0 content-type: 1.0.5 cookie: 0.7.2 cookie-signature: 1.2.2 - debug: 4.4.3 + debug: 4.4.3(supports-color@10.2.2) depd: 2.0.0 encodeurl: 2.0.0 escape-html: 1.0.3 etag: 1.8.1 - finalhandler: 2.1.1 + finalhandler: 2.1.1(supports-color@10.2.2) fresh: 2.0.0 http-errors: 2.0.1 merge-descriptors: 2.0.0 @@ -12821,9 +12972,9 @@ snapshots: proxy-addr: 2.0.7 qs: 6.15.3 range-parser: 1.3.0 - router: 2.2.0 - send: 1.2.1 - serve-static: 2.2.1 + router: 2.2.0(supports-color@10.2.2) + send: 1.2.1(supports-color@10.2.2) + serve-static: 2.2.1(supports-color@10.2.2) statuses: 2.0.2 type-is: 2.1.0 vary: 1.1.2 @@ -12902,9 +13053,9 @@ snapshots: dependencies: to-regex-range: 5.0.1 - finalhandler@2.1.1: + finalhandler@2.1.1(supports-color@10.2.2): dependencies: - debug: 4.4.3 + debug: 4.4.3(supports-color@10.2.2) encodeurl: 2.0.0 escape-html: 1.0.3 on-finished: 2.4.1 @@ -12945,7 +13096,7 @@ snapshots: dependencies: tiny-inflate: 1.0.3 - fontless@0.2.1(@vercel/functions@3.9.5(ws@8.21.1))(db0@0.3.4)(ioredis@5.11.1)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)): + fontless@0.2.1(@vercel/functions@3.9.5(ws@8.21.1))(db0@0.3.4)(ioredis@5.11.1(supports-color@10.2.2))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)): dependencies: consola: 3.4.2 css-tree: 3.2.1 @@ -12959,7 +13110,7 @@ snapshots: pathe: 2.0.3 ufo: 1.6.4 unifont: 0.7.4 - unstorage: 1.17.5(@vercel/functions@3.9.5(ws@8.21.1))(db0@0.3.4)(ioredis@5.11.1) + unstorage: 1.17.5(@vercel/functions@3.9.5(ws@8.21.1))(db0@0.3.4)(ioredis@5.11.1(supports-color@10.2.2)) optionalDependencies: vite: 8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0) transitivePeerDependencies: @@ -13172,10 +13323,10 @@ snapshots: http-shutdown@1.2.2: {} - https-proxy-agent@7.0.6: + https-proxy-agent@7.0.6(supports-color@10.2.2): dependencies: agent-base: 7.1.4 - debug: 4.4.3 + debug: 4.4.3(supports-color@10.2.2) transitivePeerDependencies: - supports-color @@ -13253,11 +13404,11 @@ snapshots: ini@4.1.1: {} - ioredis@5.11.1: + ioredis@5.11.1(supports-color@10.2.2): dependencies: '@ioredis/commands': 1.10.0 cluster-key-slot: 1.1.1 - debug: 4.4.3 + debug: 4.4.3(supports-color@10.2.2) denque: 2.1.0 redis-errors: 1.2.0 redis-parser: 3.0.0 @@ -13415,9 +13566,9 @@ snapshots: dependencies: isomorphic.js: 0.2.5 - lighthouse-logger@2.0.2: + lighthouse-logger@2.0.2(supports-color@10.2.2): dependencies: - debug: 4.4.3 + debug: 4.4.3(supports-color@10.2.2) marky: 1.3.0 transitivePeerDependencies: - supports-color @@ -13799,7 +13950,7 @@ snapshots: negotiator@1.0.0: {} - nitropack@2.13.4(@vercel/functions@3.9.5(ws@8.21.1))(oxc-parser@0.140.0)(rolldown@1.2.0)(srvx@0.11.22)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)): + nitropack@2.13.4(@vercel/functions@3.9.5(ws@8.21.1))(oxc-parser@0.140.0)(rolldown@1.2.0)(srvx@0.11.22)(supports-color@10.2.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)): dependencies: '@cloudflare/kv-asset-handler': 0.4.2 '@rollup/plugin-alias': 6.0.0(rollup@4.62.2) @@ -13809,7 +13960,7 @@ snapshots: '@rollup/plugin-node-resolve': 16.0.3(rollup@4.62.2) '@rollup/plugin-replace': 6.0.3(rollup@4.62.2) '@rollup/plugin-terser': 1.0.0(rollup@4.62.2) - '@vercel/nft': 1.10.2(rollup@4.62.2) + '@vercel/nft': 1.10.2(rollup@4.62.2)(supports-color@10.2.2) archiver: 7.0.1 c12: 3.3.4(magicast@0.5.3) chokidar: 5.0.0 @@ -13833,7 +13984,7 @@ snapshots: h3: 1.15.11 hookable: 5.5.3 httpxy: 0.5.5 - ioredis: 5.11.1 + ioredis: 5.11.1(supports-color@10.2.2) jiti: 2.7.0 klona: 2.0.6 knitwork: 1.3.0 @@ -13856,7 +14007,7 @@ snapshots: scule: 1.3.0 semver: 7.8.5 serve-placeholder: 2.0.2 - serve-static: 2.2.1 + serve-static: 2.2.1(supports-color@10.2.2) source-map: 0.7.6 std-env: 4.2.0 ufo: 1.6.4 @@ -13866,7 +14017,7 @@ snapshots: unenv: 2.0.0-rc.24 unimport: 6.3.1(esbuild@0.28.1)(oxc-parser@0.140.0)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) unplugin-utils: 0.3.2 - unstorage: 1.17.5(@vercel/functions@3.9.5(ws@8.21.1))(db0@0.3.4)(ioredis@5.11.1) + unstorage: 1.17.5(@vercel/functions@3.9.5(ws@8.21.1))(db0@0.3.4)(ioredis@5.11.1(supports-color@10.2.2)) untyped: 2.0.0 unwasm: 0.5.3 youch: 4.1.1 @@ -13911,7 +14062,7 @@ snapshots: - vite - webpack - nitropack@2.13.4(@vercel/functions@3.9.5(ws@8.21.1))(oxc-parser@0.143.0)(rolldown@1.2.5)(srvx@0.11.22)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)): + nitropack@2.13.4(@vercel/functions@3.9.5(ws@8.21.1))(oxc-parser@0.143.0)(rolldown@1.2.5)(srvx@0.11.22)(supports-color@10.2.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)): dependencies: '@cloudflare/kv-asset-handler': 0.4.2 '@rollup/plugin-alias': 6.0.0(rollup@4.62.2) @@ -13921,7 +14072,7 @@ snapshots: '@rollup/plugin-node-resolve': 16.0.3(rollup@4.62.2) '@rollup/plugin-replace': 6.0.3(rollup@4.62.2) '@rollup/plugin-terser': 1.0.0(rollup@4.62.2) - '@vercel/nft': 1.10.2(rollup@4.62.2) + '@vercel/nft': 1.10.2(rollup@4.62.2)(supports-color@10.2.2) archiver: 7.0.1 c12: 3.3.4(magicast@0.5.3) chokidar: 5.0.0 @@ -13945,7 +14096,7 @@ snapshots: h3: 1.15.11 hookable: 5.5.3 httpxy: 0.5.5 - ioredis: 5.11.1 + ioredis: 5.11.1(supports-color@10.2.2) jiti: 2.7.0 klona: 2.0.6 knitwork: 1.3.0 @@ -13968,7 +14119,7 @@ snapshots: scule: 1.3.0 semver: 7.8.5 serve-placeholder: 2.0.2 - serve-static: 2.2.1 + serve-static: 2.2.1(supports-color@10.2.2) source-map: 0.7.6 std-env: 4.2.0 ufo: 1.6.4 @@ -13978,7 +14129,7 @@ snapshots: unenv: 2.0.0-rc.24 unimport: 6.3.1(esbuild@0.28.1)(oxc-parser@0.143.0)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) unplugin-utils: 0.3.2 - unstorage: 1.17.5(@vercel/functions@3.9.5(ws@8.21.1))(db0@0.3.4)(ioredis@5.11.1) + unstorage: 1.17.5(@vercel/functions@3.9.5(ws@8.21.1))(db0@0.3.4)(ioredis@5.11.1(supports-color@10.2.2)) untyped: 2.0.0 unwasm: 0.5.3 youch: 4.1.1 @@ -14062,9 +14213,9 @@ snapshots: dependencies: boolbase: 1.0.0 - nuxt-llms@0.2.0(magic-string@1.2.2)(magicast@0.5.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))): + nuxt-llms@0.2.0(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))): dependencies: - '@nuxt/kit': 4.5.1(magic-string@1.2.2)(magicast@0.5.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) + '@nuxt/kit': 4.5.2(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) transitivePeerDependencies: - magic-string - magicast @@ -14072,13 +14223,13 @@ snapshots: - rolldown - unplugin - nuxt-og-image@6.7.8(0004b4d4a41c6c6880ce43c9acb891e8): + nuxt-og-image@6.7.8(a4630852397788cad97a18d81b61a25b): dependencies: '@clack/prompts': 1.7.0 '@nuxt/kit': 4.5.2(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) - '@unhead/vue': 3.4.0(@oxc-project/types@0.146.0)(@vitejs/devtools-kit@0.4.8(@modelcontextprotocol/sdk@1.30.0(zod@4.4.3))(cac@7.0.0)(srvx@0.11.22)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(esbuild@0.28.1)(lightningcss@1.33.0)(oxc-parser@0.143.0)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) + '@unhead/vue': 3.4.0(@oxc-project/types@0.146.0)(@vitejs/devtools-kit@0.4.8(@modelcontextprotocol/sdk@1.30.0(supports-color@10.2.2)(zod@4.4.3))(cac@7.0.0)(srvx@0.11.22)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(esbuild@0.28.1)(lightningcss@1.33.0)(oxc-parser@0.143.0)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) '@vue/compiler-sfc': 3.5.41 - chrome-launcher: 1.2.1 + chrome-launcher: 1.2.1(supports-color@10.2.2) consola: 3.4.2 defu: 6.1.7 devalue: 5.9.1 @@ -14088,8 +14239,8 @@ snapshots: magic-string: 1.1.0 magicast: 0.5.4 mocked-exports: 0.1.1 - nuxt-site-config: 4.2.3(3e06d7d171104d0b87abb373ee408c16) - nuxtseo-shared: 5.3.14(dc6431e23c47dc0d40862cfc758f7361) + nuxt-site-config: 4.2.3(6884d372c0baaa4544f2ba2197cdb752) + nuxtseo-shared: 5.3.14(c01c7f54aaf8e81d9467ff94c89fe627) nypm: 0.6.9 object-identity: 0.2.3 ofetch: 1.5.1 @@ -14105,11 +14256,13 @@ snapshots: ufo: 1.6.4 ultrahtml: 1.7.0 unplugin: 3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) - unstorage: 1.17.5(@vercel/functions@3.9.5(ws@8.21.1))(db0@0.3.4)(ioredis@5.11.1) + unstorage: 1.17.5(@vercel/functions@3.9.5(ws@8.21.1))(db0@0.3.4)(ioredis@5.11.1(supports-color@10.2.2)) optionalDependencies: '@resvg/resvg-js': 2.6.2 - fontless: 0.2.1(@vercel/functions@3.9.5(ws@8.21.1))(db0@0.3.4)(ioredis@5.11.1)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) - nitropack: 2.13.4(@vercel/functions@3.9.5(ws@8.21.1))(oxc-parser@0.143.0)(rolldown@1.2.5)(srvx@0.11.22)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) + '@unocss/config': 66.7.5 + '@unocss/core': 66.7.5 + fontless: 0.2.1(@vercel/functions@3.9.5(ws@8.21.1))(db0@0.3.4)(ioredis@5.11.1(supports-color@10.2.2))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) + nitropack: 2.13.4(@vercel/functions@3.9.5(ws@8.21.1))(oxc-parser@0.143.0)(rolldown@1.2.5)(srvx@0.11.22)(supports-color@10.2.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) satori: 0.29.1 tailwindcss: 4.3.3 unifont: 0.7.4 @@ -14130,24 +14283,24 @@ snapshots: - vue - webpack - nuxt-seo-utils@8.4.2(a9f028144601adfa5175af4335b08671): + nuxt-seo-utils@8.4.2(aa63c252ee2d276530b76c2cc8a10f03): dependencies: - '@nuxt/kit': 4.5.2(magic-string@1.2.2)(magicast@0.5.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) + '@nuxt/kit': 4.5.2(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) citty: 0.2.2 consola: 3.4.2 defu: 6.1.7 escape-string-regexp: 5.0.0 exsolve: 1.1.1 - nuxt: 4.5.2(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7))(@oxc-project/types@0.146.0)(@types/node@26.1.1)(@vercel/functions@3.9.5(ws@8.21.1))(@vitejs/devtools-kit@0.4.8(@modelcontextprotocol/sdk@1.30.0(zod@4.4.3))(cac@7.0.0)(srvx@0.11.22)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(@vue/compiler-sfc@3.5.41)(cac@7.0.0)(db0@0.3.4)(esbuild@0.28.1)(eslint@10.9.1(jiti@2.7.0))(ioredis@5.11.1)(lightningcss@1.33.0)(magicast@0.5.4)(optionator@0.9.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(rollup-plugin-visualizer@7.0.1(rolldown@1.2.5)(rollup@4.62.2))(rollup@4.62.2)(srvx@0.11.22)(terser@5.49.0)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue-tsc@3.3.11(typescript@6.0.3))(yaml@2.9.0) - nuxt-site-config: 4.2.3(cc4380165d9551c2746d0263df7c88c9) - nuxtseo-shared: 5.3.14(ea43fc987d0f3aa7681c7d1c1bc24460) + nuxt: 4.5.2(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@oxc-project/types@0.146.0)(@types/node@26.1.1)(@vercel/functions@3.9.5(ws@8.21.1))(@vitejs/devtools-kit@0.4.8(@modelcontextprotocol/sdk@1.30.0(supports-color@10.2.2)(zod@4.4.3))(cac@7.0.0)(srvx@0.11.22)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(@vue/compiler-sfc@3.5.41)(cac@7.0.0)(db0@0.3.4)(esbuild@0.28.1)(eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2))(ioredis@5.11.1(supports-color@10.2.2))(lightningcss@1.33.0)(magicast@0.5.3)(optionator@0.9.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(rollup-plugin-visualizer@7.0.1(rolldown@1.2.5)(rollup@4.62.2))(rollup@4.62.2)(srvx@0.11.22)(supports-color@10.2.2)(terser@5.49.0)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue-tsc@3.3.11(typescript@6.0.3))(yaml@2.9.0) + nuxt-site-config: 4.2.3(d17f61d17c502256d5a1cd440e407773) + nuxtseo-shared: 5.3.14(59e9b23a8dedd3896e6822df1ac065af) pathe: 2.0.3 pkg-types: 2.3.1 scule: 1.3.0 tinyglobby: 0.2.17 ufo: 1.6.4 optionalDependencies: - '@unhead/vue': 3.4.0(@oxc-project/types@0.146.0)(@vitejs/devtools-kit@0.4.8(@modelcontextprotocol/sdk@1.30.0(zod@4.4.3))(cac@7.0.0)(srvx@0.11.22)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(esbuild@0.28.1)(lightningcss@1.33.0)(oxc-parser@0.143.0)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) + '@unhead/vue': 3.4.0(@oxc-project/types@0.146.0)(@vitejs/devtools-kit@0.4.8(@modelcontextprotocol/sdk@1.30.0(supports-color@10.2.2)(zod@4.4.3))(cac@7.0.0)(srvx@0.11.22)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(esbuild@0.28.1)(lightningcss@1.33.0)(oxc-parser@0.143.0)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) esbuild: 0.28.1 lightningcss: 1.33.0 rolldown: 1.2.5 @@ -14164,9 +14317,9 @@ snapshots: - vue - zod - nuxt-site-config-kit@4.2.3(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vue@3.5.40(typescript@6.0.3)): + nuxt-site-config-kit@4.2.3(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vue@3.5.40(typescript@6.0.3)): dependencies: - '@nuxt/kit': 4.5.2(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) + '@nuxt/kit': 4.5.2(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) site-config-stack: 4.2.3(vue@3.5.40(typescript@6.0.3)) std-env: 4.2.0 ufo: 1.6.4 @@ -14177,11 +14330,10 @@ snapshots: - rolldown - unplugin - vue - optional: true - nuxt-site-config-kit@4.2.3(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vue@3.5.40(typescript@6.0.3)): + nuxt-site-config-kit@4.2.3(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vue@3.5.40(typescript@6.0.3)): dependencies: - '@nuxt/kit': 4.5.2(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) + '@nuxt/kit': 4.5.2(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) site-config-stack: 4.2.3(vue@3.5.40(typescript@6.0.3)) std-env: 4.2.0 ufo: 1.6.4 @@ -14192,10 +14344,11 @@ snapshots: - rolldown - unplugin - vue + optional: true - nuxt-site-config-kit@4.2.3(magic-string@1.2.2)(magicast@0.5.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vue@3.5.40(typescript@6.0.3)): + nuxt-site-config-kit@4.2.3(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vue@3.5.40(typescript@6.0.3)): dependencies: - '@nuxt/kit': 4.5.2(magic-string@1.2.2)(magicast@0.5.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) + '@nuxt/kit': 4.5.2(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) site-config-stack: 4.2.3(vue@3.5.40(typescript@6.0.3)) std-env: 4.2.0 ufo: 1.6.4 @@ -14207,7 +14360,7 @@ snapshots: - unplugin - vue - nuxt-site-config@4.2.3(3e06d7d171104d0b87abb373ee408c16): + nuxt-site-config@4.2.3(6884d372c0baaa4544f2ba2197cdb752): dependencies: '@nuxt/devalue': 2.0.2 '@nuxt/kit': 4.5.2(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) @@ -14215,7 +14368,7 @@ snapshots: defu: 6.1.7 h3: 1.15.11 nuxt-site-config-kit: 4.2.3(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vue@3.5.40(typescript@6.0.3)) - nuxtseo-shared: 5.3.14(dc6431e23c47dc0d40862cfc758f7361) + nuxtseo-shared: 5.3.14(c01c7f54aaf8e81d9467ff94c89fe627) pathe: 2.0.3 pkg-types: 2.3.1 site-config-stack: 4.2.3(vue@3.5.40(typescript@6.0.3)) @@ -14232,15 +14385,15 @@ snapshots: - vite - zod - nuxt-site-config@4.2.3(5fcb8ea30641fa76f84de3240ff52d36): + nuxt-site-config@4.2.3(d17f61d17c502256d5a1cd440e407773): dependencies: '@nuxt/devalue': 2.0.2 - '@nuxt/kit': 4.5.2(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) + '@nuxt/kit': 4.5.2(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) consola: 3.4.2 defu: 6.1.7 h3: 1.15.11 - nuxt-site-config-kit: 4.2.3(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vue@3.5.40(typescript@6.0.3)) - nuxtseo-shared: 5.3.14(7f44a153f1c037edf7571d5aacdde598) + nuxt-site-config-kit: 4.2.3(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vue@3.5.40(typescript@6.0.3)) + nuxtseo-shared: 5.3.14(59e9b23a8dedd3896e6822df1ac065af) pathe: 2.0.3 pkg-types: 2.3.1 site-config-stack: 4.2.3(vue@3.5.40(typescript@6.0.3)) @@ -14256,17 +14409,16 @@ snapshots: - unplugin - vite - zod - optional: true - nuxt-site-config@4.2.3(cc4380165d9551c2746d0263df7c88c9): + nuxt-site-config@4.2.3(d764e7b783700abf296f82e9ecb97a11): dependencies: '@nuxt/devalue': 2.0.2 - '@nuxt/kit': 4.5.2(magic-string@1.2.2)(magicast@0.5.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) + '@nuxt/kit': 4.5.2(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) consola: 3.4.2 defu: 6.1.7 h3: 1.15.11 - nuxt-site-config-kit: 4.2.3(magic-string@1.2.2)(magicast@0.5.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vue@3.5.40(typescript@6.0.3)) - nuxtseo-shared: 5.3.14(ea43fc987d0f3aa7681c7d1c1bc24460) + nuxt-site-config-kit: 4.2.3(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vue@3.5.40(typescript@6.0.3)) + nuxtseo-shared: 5.3.14(2b42420ac46623f78aeabf7b6cd40f61) pathe: 2.0.3 pkg-types: 2.3.1 site-config-stack: 4.2.3(vue@3.5.40(typescript@6.0.3)) @@ -14282,18 +14434,19 @@ snapshots: - unplugin - vite - zod + optional: true - nuxt@4.5.1(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7))(@modelcontextprotocol/sdk@1.30.0(zod@4.4.3))(@types/node@26.1.1)(@vercel/functions@3.9.5(ws@8.21.1))(@vue/compiler-sfc@3.5.41)(cac@7.0.0)(db0@0.3.4)(esbuild@0.28.1)(eslint@10.9.1(jiti@2.7.0))(ioredis@5.11.1)(lightningcss@1.33.0)(magicast@0.5.3)(optionator@0.9.4)(oxc-parser@0.140.0)(rollup-plugin-visualizer@7.0.1(rolldown@1.2.0)(rollup@4.62.2))(rollup@4.62.2)(srvx@0.11.22)(terser@5.49.0)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue-tsc@3.3.11(typescript@6.0.3))(yaml@2.9.0): + nuxt@4.5.1(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@modelcontextprotocol/sdk@1.30.0(supports-color@10.2.2)(zod@4.4.3))(@types/node@26.1.1)(@vercel/functions@3.9.5(ws@8.21.1))(@vue/compiler-sfc@3.5.41)(cac@7.0.0)(db0@0.3.4)(esbuild@0.28.1)(eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2))(ioredis@5.11.1(supports-color@10.2.2))(lightningcss@1.33.0)(magicast@0.5.4)(optionator@0.9.4)(oxc-parser@0.140.0)(rollup-plugin-visualizer@7.0.1(rolldown@1.2.0)(rollup@4.62.2))(rollup@4.62.2)(srvx@0.11.22)(supports-color@10.2.2)(terser@5.49.0)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue-tsc@3.3.11(typescript@6.0.3))(yaml@2.9.0): dependencies: - '@dxup/nuxt': 0.5.4(esbuild@0.28.1)(magicast@0.5.3)(oxc-parser@0.140.0)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) - '@nuxt/cli': 3.37.0(@nuxt/schema@4.5.1)(cac@7.0.0)(magicast@0.5.3) - '@nuxt/devtools': 3.3.1(@vercel/functions@3.9.5(ws@8.21.1))(db0@0.3.4)(ioredis@5.11.1)(magic-string@1.1.0)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) - '@nuxt/kit': 4.5.1(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) - '@nuxt/nitro-server': 4.5.1(2128dc7b56455c6886f373bfd191c50e) + '@dxup/nuxt': 0.5.4(esbuild@0.28.1)(magicast@0.5.4)(oxc-parser@0.140.0)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) + '@nuxt/cli': 3.37.0(@nuxt/schema@4.5.1)(cac@7.0.0)(magicast@0.5.4)(supports-color@10.2.2) + '@nuxt/devtools': 3.3.1(@vercel/functions@3.9.5(ws@8.21.1))(db0@0.3.4)(ioredis@5.11.1(supports-color@10.2.2))(magic-string@1.1.0)(oxc-parser@0.140.0)(rolldown@1.2.0)(supports-color@10.2.2)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) + '@nuxt/kit': 4.5.1(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) + '@nuxt/nitro-server': 4.5.1(eda3270367fe227c6817c29b3de9bbdd) '@nuxt/schema': 4.5.1 - '@nuxt/telemetry': 2.8.0(@nuxt/kit@4.5.1(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))) - '@nuxt/vite-builder': 4.5.1(c099f555d6328e253a8360c438825eb3) - '@unhead/vue': 3.2.3(@modelcontextprotocol/sdk@1.30.0(zod@4.4.3))(cac@7.0.0)(esbuild@0.28.1)(lightningcss@1.33.0)(rolldown@1.2.0)(rollup@4.62.2)(srvx@0.11.22)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) + '@nuxt/telemetry': 2.8.0(@nuxt/kit@4.5.1(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))) + '@nuxt/vite-builder': 4.5.1(3d63aa8ee0ff970f396955d9e7c4cf12) + '@unhead/vue': 3.2.3(@modelcontextprotocol/sdk@1.30.0(supports-color@10.2.2)(zod@4.4.3))(cac@7.0.0)(esbuild@0.28.1)(lightningcss@1.33.0)(rolldown@1.2.0)(rollup@4.62.2)(srvx@0.11.22)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) '@vue/shared': 3.5.40 chokidar: 5.0.0 compatx: 0.2.0 @@ -14422,17 +14575,17 @@ snapshots: - xml2js - yaml - nuxt@4.5.2(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7))(@oxc-project/types@0.146.0)(@types/node@26.1.1)(@vercel/functions@3.9.5(ws@8.21.1))(@vitejs/devtools-kit@0.4.8(@modelcontextprotocol/sdk@1.30.0(zod@4.4.3))(cac@7.0.0)(srvx@0.11.22)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(@vue/compiler-sfc@3.5.41)(cac@7.0.0)(db0@0.3.4)(esbuild@0.28.1)(eslint@10.9.1(jiti@2.7.0))(ioredis@5.11.1)(lightningcss@1.33.0)(magicast@0.5.4)(optionator@0.9.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(rollup-plugin-visualizer@7.0.1(rolldown@1.2.5)(rollup@4.62.2))(rollup@4.62.2)(srvx@0.11.22)(terser@5.49.0)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue-tsc@3.3.11(typescript@6.0.3))(yaml@2.9.0): + nuxt@4.5.2(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@oxc-project/types@0.146.0)(@types/node@26.1.1)(@vercel/functions@3.9.5(ws@8.21.1))(@vitejs/devtools-kit@0.4.8(@modelcontextprotocol/sdk@1.30.0(supports-color@10.2.2)(zod@4.4.3))(cac@7.0.0)(srvx@0.11.22)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(@vue/compiler-sfc@3.5.41)(cac@7.0.0)(db0@0.3.4)(esbuild@0.28.1)(eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2))(ioredis@5.11.1(supports-color@10.2.2))(lightningcss@1.33.0)(magicast@0.5.3)(optionator@0.9.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(rollup-plugin-visualizer@7.0.1(rolldown@1.2.5)(rollup@4.62.2))(rollup@4.62.2)(srvx@0.11.22)(supports-color@10.2.2)(terser@5.49.0)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue-tsc@3.3.11(typescript@6.0.3))(yaml@2.9.0): dependencies: - '@dxup/nuxt': 0.5.10(esbuild@0.28.1)(magicast@0.5.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) - '@nuxt/cli': 3.37.0(@nuxt/schema@4.5.2)(cac@7.0.0)(magicast@0.5.4) - '@nuxt/devtools': 3.4.2(@vercel/functions@3.9.5(ws@8.21.1))(db0@0.3.4)(ioredis@5.11.1)(magic-string@1.1.0)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) - '@nuxt/kit': 4.5.2(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) - '@nuxt/nitro-server': 4.5.2(3fb5ee5639206607c6b93310c0c3912f) + '@dxup/nuxt': 0.5.10(esbuild@0.28.1)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) + '@nuxt/cli': 3.37.0(@nuxt/schema@4.5.2)(cac@7.0.0)(magicast@0.5.3)(supports-color@10.2.2) + '@nuxt/devtools': 3.4.2(@vercel/functions@3.9.5(ws@8.21.1))(db0@0.3.4)(ioredis@5.11.1(supports-color@10.2.2))(magic-string@1.1.0)(oxc-parser@0.143.0)(rolldown@1.2.5)(supports-color@10.2.2)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) + '@nuxt/kit': 4.5.2(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) + '@nuxt/nitro-server': 4.5.2(5e4e9a7671b0109f857942bdd727e44b) '@nuxt/schema': 4.5.2 - '@nuxt/telemetry': 2.8.0(@nuxt/kit@4.5.2(magic-string@1.2.2)(magicast@0.5.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))) - '@nuxt/vite-builder': 4.5.2(45266c5b6542b8cb0b24dc7392d1d850) - '@unhead/vue': 3.4.0(@oxc-project/types@0.146.0)(@vitejs/devtools-kit@0.4.8(@modelcontextprotocol/sdk@1.30.0(zod@4.4.3))(cac@7.0.0)(srvx@0.11.22)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(esbuild@0.28.1)(lightningcss@1.33.0)(oxc-parser@0.143.0)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) + '@nuxt/telemetry': 2.8.0(@nuxt/kit@4.5.2(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))) + '@nuxt/vite-builder': 4.5.2(7024089c69f44c596692c8e47d1c1987) + '@unhead/vue': 3.4.0(@oxc-project/types@0.146.0)(@vitejs/devtools-kit@0.4.8(@modelcontextprotocol/sdk@1.30.0(supports-color@10.2.2)(zod@4.4.3))(cac@7.0.0)(srvx@0.11.22)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(esbuild@0.28.1)(lightningcss@1.33.0)(oxc-parser@0.143.0)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) '@vue/shared': 3.5.40 chokidar: 5.0.0 compatx: 0.2.0 @@ -14563,17 +14716,17 @@ snapshots: - xml2js - yaml - nuxtseo-layer-devtools@5.3.6(2fff166b9526daf99f277f7bd1b6ab1f): + nuxtseo-layer-devtools@5.3.6(83476237c7b4e99d78d0fd20708e3185): dependencies: '@iconify-json/carbon': 1.2.25 - '@nuxt/devtools-kit': 4.0.0-alpha.7(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) - '@nuxt/kit': 4.5.1(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) - '@nuxt/ui': 4.10.0(aeee8704e7498fa9ef5b497bc4c3ea6b) + '@nuxt/devtools-kit': 4.0.0-alpha.7(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) + '@nuxt/kit': 4.5.1(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) + '@nuxt/ui': 4.10.0(65f4dfe45e4c297e8606ed5a5a742baf) '@shikijs/langs': 4.3.1 '@shikijs/themes': 4.3.1 '@vueuse/core': 14.4.0(vue@3.5.40(typescript@6.0.3)) - '@vueuse/nuxt': 14.4.0(magic-string@1.1.0)(magicast@0.5.3)(nuxt@4.5.1(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7))(@modelcontextprotocol/sdk@1.30.0(zod@4.4.3))(@types/node@26.1.1)(@vercel/functions@3.9.5(ws@8.21.1))(@vue/compiler-sfc@3.5.41)(cac@7.0.0)(db0@0.3.4)(esbuild@0.28.1)(eslint@10.9.1(jiti@2.7.0))(ioredis@5.11.1)(lightningcss@1.33.0)(magicast@0.5.3)(optionator@0.9.4)(oxc-parser@0.140.0)(rollup-plugin-visualizer@7.0.1(rolldown@1.2.0)(rollup@4.62.2))(rollup@4.62.2)(srvx@0.11.22)(terser@5.49.0)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue-tsc@3.3.11(typescript@6.0.3))(yaml@2.9.0))(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vue@3.5.40(typescript@6.0.3)) - nuxtseo-shared: 5.3.6(7f44a153f1c037edf7571d5aacdde598) + '@vueuse/nuxt': 14.4.0(15a2d0923048777bbdbc3a1647f555a9) + nuxtseo-shared: 5.3.6(3b0b062e58264fbd28defd8e7e1c85e4) ofetch: 1.5.1 shiki: 4.3.1 tailwindcss: 4.3.3 @@ -14660,16 +14813,16 @@ snapshots: - yup - zod - nuxtseo-shared@5.3.14(7f44a153f1c037edf7571d5aacdde598): + nuxtseo-shared@5.3.14(2b42420ac46623f78aeabf7b6cd40f61): dependencies: '@clack/prompts': 1.7.0 - '@nuxt/devtools-kit': 4.0.0-alpha.7(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) - '@nuxt/kit': 4.5.2(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) + '@nuxt/devtools-kit': 4.0.0-alpha.7(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) + '@nuxt/kit': 4.5.2(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) '@nuxt/schema': 4.5.2 birpc: 4.0.0 consola: 3.4.2 defu: 6.1.7 - nuxt: 4.5.1(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7))(@modelcontextprotocol/sdk@1.30.0(zod@4.4.3))(@types/node@26.1.1)(@vercel/functions@3.9.5(ws@8.21.1))(@vue/compiler-sfc@3.5.41)(cac@7.0.0)(db0@0.3.4)(esbuild@0.28.1)(eslint@10.9.1(jiti@2.7.0))(ioredis@5.11.1)(lightningcss@1.33.0)(magicast@0.5.3)(optionator@0.9.4)(oxc-parser@0.140.0)(rollup-plugin-visualizer@7.0.1(rolldown@1.2.0)(rollup@4.62.2))(rollup@4.62.2)(srvx@0.11.22)(terser@5.49.0)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue-tsc@3.3.11(typescript@6.0.3))(yaml@2.9.0) + nuxt: 4.5.1(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@modelcontextprotocol/sdk@1.30.0(supports-color@10.2.2)(zod@4.4.3))(@types/node@26.1.1)(@vercel/functions@3.9.5(ws@8.21.1))(@vue/compiler-sfc@3.5.41)(cac@7.0.0)(db0@0.3.4)(esbuild@0.28.1)(eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2))(ioredis@5.11.1(supports-color@10.2.2))(lightningcss@1.33.0)(magicast@0.5.4)(optionator@0.9.4)(oxc-parser@0.140.0)(rollup-plugin-visualizer@7.0.1(rolldown@1.2.0)(rollup@4.62.2))(rollup@4.62.2)(srvx@0.11.22)(supports-color@10.2.2)(terser@5.49.0)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue-tsc@3.3.11(typescript@6.0.3))(yaml@2.9.0) nypm: 0.6.9 ofetch: 1.5.1 pathe: 2.0.3 @@ -14680,7 +14833,7 @@ snapshots: ufo: 1.6.4 vue: 3.5.40(typescript@6.0.3) optionalDependencies: - nuxt-site-config: 4.2.3(5fcb8ea30641fa76f84de3240ff52d36) + nuxt-site-config: 4.2.3(d764e7b783700abf296f82e9ecb97a11) zod: 4.4.3 transitivePeerDependencies: - magic-string @@ -14691,16 +14844,16 @@ snapshots: - vite optional: true - nuxtseo-shared@5.3.14(dc6431e23c47dc0d40862cfc758f7361): + nuxtseo-shared@5.3.14(59e9b23a8dedd3896e6822df1ac065af): dependencies: '@clack/prompts': 1.7.0 - '@nuxt/devtools-kit': 4.0.0-alpha.7(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) - '@nuxt/kit': 4.5.2(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) + '@nuxt/devtools-kit': 4.0.0-alpha.7(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) + '@nuxt/kit': 4.5.2(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) '@nuxt/schema': 4.5.2 birpc: 4.0.0 consola: 3.4.2 defu: 6.1.7 - nuxt: 4.5.2(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7))(@oxc-project/types@0.146.0)(@types/node@26.1.1)(@vercel/functions@3.9.5(ws@8.21.1))(@vitejs/devtools-kit@0.4.8(@modelcontextprotocol/sdk@1.30.0(zod@4.4.3))(cac@7.0.0)(srvx@0.11.22)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(@vue/compiler-sfc@3.5.41)(cac@7.0.0)(db0@0.3.4)(esbuild@0.28.1)(eslint@10.9.1(jiti@2.7.0))(ioredis@5.11.1)(lightningcss@1.33.0)(magicast@0.5.4)(optionator@0.9.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(rollup-plugin-visualizer@7.0.1(rolldown@1.2.5)(rollup@4.62.2))(rollup@4.62.2)(srvx@0.11.22)(terser@5.49.0)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue-tsc@3.3.11(typescript@6.0.3))(yaml@2.9.0) + nuxt: 4.5.2(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@oxc-project/types@0.146.0)(@types/node@26.1.1)(@vercel/functions@3.9.5(ws@8.21.1))(@vitejs/devtools-kit@0.4.8(@modelcontextprotocol/sdk@1.30.0(supports-color@10.2.2)(zod@4.4.3))(cac@7.0.0)(srvx@0.11.22)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(@vue/compiler-sfc@3.5.41)(cac@7.0.0)(db0@0.3.4)(esbuild@0.28.1)(eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2))(ioredis@5.11.1(supports-color@10.2.2))(lightningcss@1.33.0)(magicast@0.5.3)(optionator@0.9.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(rollup-plugin-visualizer@7.0.1(rolldown@1.2.5)(rollup@4.62.2))(rollup@4.62.2)(srvx@0.11.22)(supports-color@10.2.2)(terser@5.49.0)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue-tsc@3.3.11(typescript@6.0.3))(yaml@2.9.0) nypm: 0.6.9 ofetch: 1.5.1 pathe: 2.0.3 @@ -14711,7 +14864,7 @@ snapshots: ufo: 1.6.4 vue: 3.5.40(typescript@6.0.3) optionalDependencies: - nuxt-site-config: 4.2.3(cc4380165d9551c2746d0263df7c88c9) + nuxt-site-config: 4.2.3(d17f61d17c502256d5a1cd440e407773) zod: 4.4.3 transitivePeerDependencies: - magic-string @@ -14721,16 +14874,16 @@ snapshots: - unplugin - vite - nuxtseo-shared@5.3.14(ea43fc987d0f3aa7681c7d1c1bc24460): + nuxtseo-shared@5.3.14(c01c7f54aaf8e81d9467ff94c89fe627): dependencies: '@clack/prompts': 1.7.0 - '@nuxt/devtools-kit': 4.0.0-alpha.7(magic-string@1.2.2)(magicast@0.5.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) - '@nuxt/kit': 4.5.2(magic-string@1.2.2)(magicast@0.5.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) + '@nuxt/devtools-kit': 4.0.0-alpha.7(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) + '@nuxt/kit': 4.5.2(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) '@nuxt/schema': 4.5.2 birpc: 4.0.0 consola: 3.4.2 defu: 6.1.7 - nuxt: 4.5.2(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7))(@oxc-project/types@0.146.0)(@types/node@26.1.1)(@vercel/functions@3.9.5(ws@8.21.1))(@vitejs/devtools-kit@0.4.8(@modelcontextprotocol/sdk@1.30.0(zod@4.4.3))(cac@7.0.0)(srvx@0.11.22)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(@vue/compiler-sfc@3.5.41)(cac@7.0.0)(db0@0.3.4)(esbuild@0.28.1)(eslint@10.9.1(jiti@2.7.0))(ioredis@5.11.1)(lightningcss@1.33.0)(magicast@0.5.4)(optionator@0.9.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(rollup-plugin-visualizer@7.0.1(rolldown@1.2.5)(rollup@4.62.2))(rollup@4.62.2)(srvx@0.11.22)(terser@5.49.0)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue-tsc@3.3.11(typescript@6.0.3))(yaml@2.9.0) + nuxt: 4.5.2(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@oxc-project/types@0.146.0)(@types/node@26.1.1)(@vercel/functions@3.9.5(ws@8.21.1))(@vitejs/devtools-kit@0.4.8(@modelcontextprotocol/sdk@1.30.0(supports-color@10.2.2)(zod@4.4.3))(cac@7.0.0)(srvx@0.11.22)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(@vue/compiler-sfc@3.5.41)(cac@7.0.0)(db0@0.3.4)(esbuild@0.28.1)(eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2))(ioredis@5.11.1(supports-color@10.2.2))(lightningcss@1.33.0)(magicast@0.5.3)(optionator@0.9.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(rollup-plugin-visualizer@7.0.1(rolldown@1.2.5)(rollup@4.62.2))(rollup@4.62.2)(srvx@0.11.22)(supports-color@10.2.2)(terser@5.49.0)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue-tsc@3.3.11(typescript@6.0.3))(yaml@2.9.0) nypm: 0.6.9 ofetch: 1.5.1 pathe: 2.0.3 @@ -14741,7 +14894,7 @@ snapshots: ufo: 1.6.4 vue: 3.5.40(typescript@6.0.3) optionalDependencies: - nuxt-site-config: 4.2.3(cc4380165d9551c2746d0263df7c88c9) + nuxt-site-config: 4.2.3(d17f61d17c502256d5a1cd440e407773) zod: 4.4.3 transitivePeerDependencies: - magic-string @@ -14751,16 +14904,16 @@ snapshots: - unplugin - vite - nuxtseo-shared@5.3.6(7f44a153f1c037edf7571d5aacdde598): + nuxtseo-shared@5.3.6(3b0b062e58264fbd28defd8e7e1c85e4): dependencies: '@clack/prompts': 1.7.0 - '@nuxt/devtools-kit': 4.0.0-alpha.7(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) - '@nuxt/kit': 4.5.1(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) - '@nuxt/schema': 4.5.2 + '@nuxt/devtools-kit': 4.0.0-alpha.7(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) + '@nuxt/kit': 4.5.1(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) + '@nuxt/schema': 4.5.1 birpc: 4.0.0 consola: 3.4.2 defu: 6.1.7 - nuxt: 4.5.1(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7))(@modelcontextprotocol/sdk@1.30.0(zod@4.4.3))(@types/node@26.1.1)(@vercel/functions@3.9.5(ws@8.21.1))(@vue/compiler-sfc@3.5.41)(cac@7.0.0)(db0@0.3.4)(esbuild@0.28.1)(eslint@10.9.1(jiti@2.7.0))(ioredis@5.11.1)(lightningcss@1.33.0)(magicast@0.5.3)(optionator@0.9.4)(oxc-parser@0.140.0)(rollup-plugin-visualizer@7.0.1(rolldown@1.2.0)(rollup@4.62.2))(rollup@4.62.2)(srvx@0.11.22)(terser@5.49.0)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue-tsc@3.3.11(typescript@6.0.3))(yaml@2.9.0) + nuxt: 4.5.1(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@modelcontextprotocol/sdk@1.30.0(supports-color@10.2.2)(zod@4.4.3))(@types/node@26.1.1)(@vercel/functions@3.9.5(ws@8.21.1))(@vue/compiler-sfc@3.5.41)(cac@7.0.0)(db0@0.3.4)(esbuild@0.28.1)(eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2))(ioredis@5.11.1(supports-color@10.2.2))(lightningcss@1.33.0)(magicast@0.5.4)(optionator@0.9.4)(oxc-parser@0.140.0)(rollup-plugin-visualizer@7.0.1(rolldown@1.2.0)(rollup@4.62.2))(rollup@4.62.2)(srvx@0.11.22)(supports-color@10.2.2)(terser@5.49.0)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue-tsc@3.3.11(typescript@6.0.3))(yaml@2.9.0) nypm: 0.6.8 ofetch: 1.5.1 pathe: 2.0.3 @@ -14771,7 +14924,7 @@ snapshots: ufo: 1.6.4 vue: 3.5.40(typescript@6.0.3) optionalDependencies: - nuxt-site-config: 4.2.3(5fcb8ea30641fa76f84de3240ff52d36) + nuxt-site-config: 4.2.3(d764e7b783700abf296f82e9ecb97a11) zod: 4.4.3 transitivePeerDependencies: - magic-string @@ -15446,6 +15599,9 @@ snapshots: quansync@0.2.11: {} + quansync@1.0.0: + optional: true + queue-microtask@1.2.3: {} quote-js-string@0.1.0: {} @@ -15557,9 +15713,9 @@ snapshots: require-from-string@2.0.2: {} - require-in-the-middle@8.0.1: + require-in-the-middle@8.0.1(supports-color@10.2.2): dependencies: - debug: 4.4.3 + debug: 4.4.3(supports-color@10.2.2) module-details-from-path: 1.0.4 transitivePeerDependencies: - supports-color @@ -15711,9 +15867,9 @@ snapshots: rou3@0.9.1: {} - router@2.2.0: + router@2.2.0(supports-color@10.2.2): dependencies: - debug: 4.4.3 + debug: 4.4.3(supports-color@10.2.2) depd: 2.0.0 is-promise: 4.0.0 parseurl: 1.3.3 @@ -15761,9 +15917,9 @@ snapshots: semver@7.8.5: {} - send@1.2.1: + send@1.2.1(supports-color@10.2.2): dependencies: - debug: 4.4.3 + debug: 4.4.3(supports-color@10.2.2) encodeurl: 2.0.0 escape-html: 1.0.3 etag: 1.8.1 @@ -15787,12 +15943,12 @@ snapshots: dependencies: defu: 6.1.7 - serve-static@2.2.1: + serve-static@2.2.1(supports-color@10.2.2): dependencies: encodeurl: 2.0.0 escape-html: 1.0.3 parseurl: 1.3.3 - send: 1.2.1 + send: 1.2.1(supports-color@10.2.2) transitivePeerDependencies: - supports-color @@ -15885,13 +16041,13 @@ snapshots: signal-exit@4.1.0: {} - simple-git@3.36.0: + simple-git@3.36.0(supports-color@10.2.2): dependencies: - '@kwsites/file-exists': 1.1.1 + '@kwsites/file-exists': 1.1.1(supports-color@10.2.2) '@kwsites/promise-deferred': 1.1.1 '@simple-git/args-pathspec': 1.0.3 '@simple-git/argv-parser': 1.1.1 - debug: 4.4.3 + debug: 4.4.3(supports-color@10.2.2) transitivePeerDependencies: - supports-color @@ -16185,6 +16341,21 @@ snapshots: ultrahtml@1.7.0: {} + unconfig-core@7.5.0: + dependencies: + '@quansync/fs': 1.0.0 + quansync: 1.0.0 + optional: true + + unconfig@7.5.0: + dependencies: + '@quansync/fs': 1.0.0 + defu: 6.1.7 + jiti: 2.7.0 + quansync: 1.0.0 + unconfig-core: 7.5.0 + optional: true + uncrypto@0.1.3: {} unctx@2.5.0: @@ -16414,7 +16585,7 @@ snapshots: unpipe@1.0.0: {} - unplugin-auto-import@21.0.0(@nuxt/kit@4.5.1(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))))(@vueuse/core@14.4.0(vue@3.5.40(typescript@6.0.3))): + unplugin-auto-import@21.0.0(@nuxt/kit@4.5.1(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))))(@vueuse/core@14.4.0(vue@3.5.40(typescript@6.0.3))): dependencies: local-pkg: 1.2.1 magic-string: 0.30.21 @@ -16423,10 +16594,10 @@ snapshots: unplugin: 2.3.11 unplugin-utils: 0.3.2 optionalDependencies: - '@nuxt/kit': 4.5.1(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) + '@nuxt/kit': 4.5.1(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) '@vueuse/core': 14.4.0(vue@3.5.40(typescript@6.0.3)) - unplugin-auto-import@21.1.0(@nuxt/kit@4.5.2(magic-string@1.2.2)(magicast@0.5.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))))(@vueuse/core@14.4.0(vue@3.5.40(typescript@6.0.3)))(esbuild@0.28.1)(oxc-parser@0.143.0)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)): + unplugin-auto-import@21.1.0(@nuxt/kit@4.5.2(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))))(@vueuse/core@14.4.0(vue@3.5.40(typescript@6.0.3)))(esbuild@0.28.1)(oxc-parser@0.143.0)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)): dependencies: local-pkg: 1.2.1 magic-string: 1.1.0 @@ -16435,7 +16606,7 @@ snapshots: unplugin: 3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) unplugin-utils: 0.3.2 optionalDependencies: - '@nuxt/kit': 4.5.2(magic-string@1.2.2)(magicast@0.5.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) + '@nuxt/kit': 4.5.2(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) '@vueuse/core': 14.4.0(vue@3.5.40(typescript@6.0.3)) transitivePeerDependencies: - '@farmfe/core' @@ -16454,7 +16625,7 @@ snapshots: pathe: 2.0.3 picomatch: 4.0.5 - unplugin-vue-components@32.1.0(@nuxt/kit@4.5.1(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))))(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)): + unplugin-vue-components@32.1.0(@nuxt/kit@4.5.1(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))))(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)): dependencies: chokidar: 5.0.0 local-pkg: 1.2.1 @@ -16467,7 +16638,7 @@ snapshots: unplugin-utils: 0.3.2 vue: 3.5.40(typescript@6.0.3) optionalDependencies: - '@nuxt/kit': 4.5.1(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) + '@nuxt/kit': 4.5.1(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) transitivePeerDependencies: - '@farmfe/core' - '@rspack/core' @@ -16479,7 +16650,7 @@ snapshots: - vite - webpack - unplugin-vue-components@32.1.0(@nuxt/kit@4.5.2(magic-string@1.2.2)(magicast@0.5.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))))(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)): + unplugin-vue-components@32.1.0(@nuxt/kit@4.5.2(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))))(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)): dependencies: chokidar: 5.0.0 local-pkg: 1.2.1 @@ -16492,7 +16663,7 @@ snapshots: unplugin-utils: 0.3.2 vue: 3.5.40(typescript@6.0.3) optionalDependencies: - '@nuxt/kit': 4.5.2(magic-string@1.2.2)(magicast@0.5.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) + '@nuxt/kit': 4.5.2(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) transitivePeerDependencies: - '@farmfe/core' - '@rspack/core' @@ -16511,6 +16682,17 @@ snapshots: picomatch: 4.0.5 webpack-virtual-modules: 0.6.2 + unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)): + dependencies: + '@jridgewell/remapping': 2.3.5 + picomatch: 4.0.5 + webpack-virtual-modules: 0.6.2 + optionalDependencies: + esbuild: 0.28.1 + rolldown: 1.2.0 + rollup: 4.62.2 + vite: 8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0) + unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)): dependencies: '@jridgewell/remapping': 2.3.5 @@ -16565,7 +16747,7 @@ snapshots: '@unrs/resolver-binding-win32-ia32-msvc': 1.12.2 '@unrs/resolver-binding-win32-x64-msvc': 1.12.2 - unstorage@1.17.5(@vercel/functions@3.9.5(ws@8.21.1))(db0@0.3.4)(ioredis@5.11.1): + unstorage@1.17.5(@vercel/functions@3.9.5(ws@8.21.1))(db0@0.3.4)(ioredis@5.11.1(supports-color@10.2.2)): dependencies: anymatch: 3.1.3 chokidar: 5.0.0 @@ -16578,7 +16760,7 @@ snapshots: optionalDependencies: '@vercel/functions': 3.9.5(ws@8.21.1) db0: 0.3.4 - ioredis: 5.11.1 + ioredis: 5.11.1(supports-color@10.2.2) untun@0.2.2: {} @@ -16680,7 +16862,7 @@ snapshots: - tsx - yaml - vite-plugin-checker@0.14.5(eslint@10.9.1(jiti@2.7.0))(optionator@0.9.4)(typescript@6.0.3)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue-tsc@3.3.11(typescript@6.0.3)): + vite-plugin-checker@0.14.5(eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2))(optionator@0.9.4)(typescript@6.0.3)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue-tsc@3.3.11(typescript@6.0.3)): dependencies: '@babel/code-frame': 7.29.7 chokidar: 5.0.0 @@ -16691,12 +16873,12 @@ snapshots: tiny-invariant: 1.3.3 vite: 8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0) optionalDependencies: - eslint: 10.9.1(jiti@2.7.0) + eslint: 10.9.1(jiti@2.7.0)(supports-color@10.2.2) optionator: 0.9.4 typescript: 6.0.3 vue-tsc: 3.3.11(typescript@6.0.3) - vite-plugin-checker@0.14.5(eslint@10.9.1(jiti@2.7.0))(optionator@0.9.4)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue-tsc@3.3.11(typescript@6.0.3)): + vite-plugin-checker@0.14.5(eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2))(optionator@0.9.4)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue-tsc@3.3.11(typescript@6.0.3)): dependencies: '@babel/code-frame': 7.29.7 chokidar: 5.0.0 @@ -16707,12 +16889,12 @@ snapshots: tiny-invariant: 1.3.3 vite: 8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0) optionalDependencies: - eslint: 10.9.1(jiti@2.7.0) + eslint: 10.9.1(jiti@2.7.0)(supports-color@10.2.2) optionator: 0.9.4 typescript: 6.0.3 vue-tsc: 3.3.11(typescript@6.0.3) - vite-plugin-inspect@11.4.1(@nuxt/kit@4.5.1(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)): + vite-plugin-inspect@11.4.1(@nuxt/kit@4.5.1(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)): dependencies: ansis: 4.3.1 error-stack-parser-es: 1.0.5 @@ -16725,7 +16907,7 @@ snapshots: vite: 8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0) vite-dev-rpc: 2.0.0(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) optionalDependencies: - '@nuxt/kit': 4.5.1(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) + '@nuxt/kit': 4.5.1(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) vite-plugin-inspect@11.4.1(@nuxt/kit@4.5.1(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)): dependencies: @@ -16833,10 +17015,10 @@ snapshots: vue-devtools-stub@0.1.0: {} - vue-eslint-parser@10.4.1(eslint@10.9.1(jiti@2.7.0)): + vue-eslint-parser@10.4.1(eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2): dependencies: - debug: 4.4.3 - eslint: 10.9.1(jiti@2.7.0) + debug: 4.4.3(supports-color@10.2.2) + eslint: 10.9.1(jiti@2.7.0)(supports-color@10.2.2) eslint-scope: 9.1.2 eslint-visitor-keys: 5.0.1 espree: 11.2.0 @@ -16915,7 +17097,7 @@ snapshots: vue-tsc@3.3.11(typescript@6.0.3): dependencies: - '@volar/typescript': 2.4.28 + '@volar/typescript': 2.4.28(typescript@6.0.3) '@vue/language-core': 3.3.11 typescript: 6.0.3 From d7f91e92c27b46fa4856c22365899018b0cd995c Mon Sep 17 00:00:00 2001 From: Baptiste Leproux Date: Fri, 28 Aug 2026 15:30:14 +0200 Subject: [PATCH 14/20] use nuxt-workers --- app/composables/useSearch.ts | 60 +----- app/types/search-worker.ts | 33 --- app/workers/{ => internal}/search-logger.ts | 7 +- app/workers/search.ts | 101 +++++++++ app/workers/search.worker.ts | 124 ----------- nuxt.config.ts | 1 + package.json | 1 + pnpm-lock.yaml | 219 ++++++++++++-------- test/content-contract.test.ts | 3 +- 9 files changed, 246 insertions(+), 303 deletions(-) delete mode 100644 app/types/search-worker.ts rename app/workers/{ => internal}/search-logger.ts (84%) create mode 100644 app/workers/search.ts delete mode 100644 app/workers/search.worker.ts diff --git a/app/composables/useSearch.ts b/app/composables/useSearch.ts index aaac194..0fa1530 100644 --- a/app/composables/useSearch.ts +++ b/app/composables/useSearch.ts @@ -1,14 +1,9 @@ import type { SearchOptions, SearchResult } from 'comark-content' -import type { SearchWorkerPayload, SearchWorkerResponse } from '../types/search-worker' type SearchStatus = 'idle' | 'loading' | 'ready' | 'error' const status = ref('idle') -let worker: Worker | undefined -let nextId = 0 -const pending = new Map void, reject: (error: Error) => void }>() - /** * Hydration logging switch: `?debug=search` */ @@ -17,50 +12,6 @@ function searchDebug(): boolean { return new URLSearchParams(location.search).get('debug') === 'search' } -function getWorker(): Worker { - if (worker) return worker - - worker = new Worker(new URL('../workers/search.worker.ts', import.meta.url), { type: 'module' }) - - worker.onmessage = (event: MessageEvent) => { - const message = event.data - if (message.type === 'status') { - status.value = message.value - if (searchDebug()) console.info(`[search] status -> ${message.value}`) - return - } - const settle = pending.get(message.id) - if (!settle) return - pending.delete(message.id) - if (message.type === 'result') settle.resolve(message.results) - else { - if (searchDebug()) console.error(`[search] request ${message.id} failed:`, message.message) - settle.reject(new Error(message.message)) - } - } - - worker.onerror = () => { - status.value = 'error' - for (const { reject } of pending.values()) reject(new Error('[search] the search worker failed to load')) - pending.clear() - } - - return worker -} - -function request(message: SearchWorkerPayload): Promise { - const id = ++nextId - return new Promise((resolve, reject) => { - pending.set(id, { resolve, reject }) - try { - getWorker().postMessage({ ...message, id }) - } catch (error) { - pending.delete(id) - reject(error instanceof Error ? error : new Error(String(error))) - } - }) -} - /** * Client-side full-text search over production content (sqlite-wasm FTS5) hydrated from the * per-commit snapshot artifacts. @@ -73,10 +24,12 @@ export function useSearch() { ) /** - * Load the database ahead of the first keystroke. No-op once loading or ready; retries after a - * failure — the worker holds that guard, since this side's `status` lags a message behind. + * Load the database. + * No-op once loading or ready; retries after a failure. */ async function warmup(): Promise { + if (status.value === 'loading' || status.value === 'ready') return + status.value = 'loading' try { if (!headSha.value && !import.meta.dev) { throw new Error('[search] /api/content/head returned no commit pin') @@ -88,7 +41,8 @@ export function useSearch() { const debug = searchDebug() if (debug) console.info(`[search] warmup from ${apiBase} (head ${headSha.value ?? 'unpinned'})`) - await request({ type: 'warmup', apiBase, origin: location.origin, debug }) + await warmupSearch(apiBase, location.origin, debug) + status.value = 'ready' } catch (error) { status.value = 'error' console.error('[search] could not load the search database', error) @@ -100,7 +54,7 @@ export function useSearch() { } async function search(query: string, opts?: SearchOptions): Promise { - return request({ type: 'search', query, opts }) + return searchContent(query, opts) } return { search, status: readonly(status), warmup } diff --git a/app/types/search-worker.ts b/app/types/search-worker.ts deleted file mode 100644 index fd1038b..0000000 --- a/app/types/search-worker.ts +++ /dev/null @@ -1,33 +0,0 @@ -import type { SearchOptions, SearchResult } from 'comark-content' - -/** - * Protocol between `useSearch` and `app/workers/search.worker.ts`. - * - * Every request carries an `id` and gets exactly one `result`/`error` reply — `warmup` answers - * with an empty array — so the caller can drain its pending map uniformly. - */ -export type SearchWorkerPayload = - | { - type: 'warmup' - apiBase: string - origin: string - /** Turns on the worker's hydration logging. Resolved on the main thread, which owns `?debug=search`. */ - debug?: boolean - } - | { - type: 'search', - query: string, - opts?: SearchOptions - } - -/** - * Intersected rather than spread into each member: `Omit` would collapse to the - * union's common keys, dropping every payload field. - */ -export type SearchWorkerRequest = SearchWorkerPayload & { id: number } - -/** `status` arrives unsolicited: the worker owns the hydration lifecycle, the caller mirrors it. */ -export type SearchWorkerResponse = - | { type: 'status', value: 'loading' | 'ready' | 'error' } - | { type: 'result', id: number, results: SearchResult[] } - | { type: 'error', id: number, message: string } diff --git a/app/workers/search-logger.ts b/app/workers/internal/search-logger.ts similarity index 84% rename from app/workers/search-logger.ts rename to app/workers/internal/search-logger.ts index 66790d6..8917943 100644 --- a/app/workers/search-logger.ts +++ b/app/workers/internal/search-logger.ts @@ -1,10 +1,7 @@ /** - * Logging for the search worker: the `?debug=search` switch, the phase-timing helpers, and the - * {@link Logger} handed to `comarkContent()` so the package's own diagnostics come out under this - * prefix. Separate from `search.worker.ts` to keep the hydration path free of instrumentation. + * Logging for the search worker. * - * Worker-side only. The main thread has its own `[search]` lines in `useSearch`, which is also where - * the switch is resolved — a worker cannot see the page URL, so the flag arrives with `warmup`. + * Triggered by `?debug=search` param. */ import type { ContentFile, Logger, RelationalDatabase } from 'comark-content' diff --git a/app/workers/search.ts b/app/workers/search.ts new file mode 100644 index 0000000..52adaae --- /dev/null +++ b/app/workers/search.ts @@ -0,0 +1,101 @@ +/** + * Search worker: owns the browser-standalone `comark-content` instance (sqlite-wasm FTS5). + * + * Hydrated from the per-commit snapshot artifacts. + */ +import { comarkContent, readArtifact } from 'comark-content' +import sqliteWasm from 'comark-content/database/sqlite-wasm' +import sqliteFullTextSearch from 'comark-content/plugins/sqlite-full-text-search' +import { ofetch } from 'ofetch' +import { describeArtifact, indexedRows, isDebug, log, logger, setDebug, since } from './internal/search-logger' +import type { CacheArtifact, ComarkContent, SearchOptions, SearchResult } from 'comark-content' +import type { SqliteFullTextSearchMethods } from 'comark-content/plugins/sqlite-full-text-search' + +type SearchInstance = ComarkContent & SqliteFullTextSearchMethods + +let instance: SearchInstance | undefined + +/** + * The in-flight hydration. + * + * Ensures only one hydration runs at a time. + */ +let hydration: Promise | undefined + +/** Loads the database. No-op once ready; retries after a failure. */ +export function warmupSearch(apiBase: string, origin: string, debug: boolean): Promise { + setDebug(debug) + if (instance) { + log('warmup ignored — already ready') + return Promise.resolve() + } + hydration ||= loadDatabase(apiBase, origin).catch((error) => { + hydration = undefined // clears the guard so the next warmup can retry + throw error + }) + return hydration +} + +async function loadDatabase(apiBase: string, origin: string): Promise { + const started = performance.now() + try { + const fetchArtifact = async (path: string): Promise => { + const url = new URL(path, origin).href + const fetchStarted = performance.now() + try { + const artifact = await ofetch(url) + if (isDebug()) { + let contents: string + try { + contents = describeArtifact(await readArtifact(artifact)) + } catch (error) { + contents = `undecodable: ${error instanceof Error ? error.message : String(error)}` + } + log(`fetched ${path} in ${since(fetchStarted)} — ${artifact?.size ?? 0} bytes, ${contents}`) + } + return artifact + } catch (error) { + log(`failed ${path} after ${since(fetchStarted)}`, error) + throw error + } + } + + const database = sqliteWasm() + const content = comarkContent({ + cache: { + loadManifest: () => fetchArtifact(`${apiBase}/manifest.json`), + loadSnapshot: (source: string) => fetchArtifact(`${apiBase}/snapshot/${source}.json`), + }, + plugins: [sqliteFullTextSearch({ database })], + logger, + }) + + await content.init() + + const indexStarted = performance.now() + await content.search(['content'], '') // pulls the snapshot in and builds the FTS index + log(`index built in ${since(indexStarted)} — ${await indexedRows(database, 'content')} row(s)`) + + instance = content + log(`ready in ${since(started)}`) + } catch (error) { + log(`hydration failed after ${since(started)}`, error) + throw error + } +} + +/** Empty until hydration lands. */ +export async function searchContent(query: string, opts?: SearchOptions): Promise { + if (!instance) { + log(`dropped query "${query}" — no instance yet`) + return [] + } + const queryStarted = performance.now() + const results = await instance.search(['content'], query, { + limit: 25, + snippet: { columns: ['content'] }, + ...opts, + }) + log(`query "${query}" -> ${results.length} result(s) in ${since(queryStarted)}`) + return results +} diff --git a/app/workers/search.worker.ts b/app/workers/search.worker.ts deleted file mode 100644 index 093144b..0000000 --- a/app/workers/search.worker.ts +++ /dev/null @@ -1,124 +0,0 @@ -/** - * Search worker: owns the browser-standalone `comark-content` instance (sqlite-wasm FTS5) - * hydrated from the per-commit snapshot artifacts. - * - * It lives off the main thread because sqlite-wasm's `oo1` binding is synchronous and the FTS - * plugin indexes one row per section — on the main thread the whole hydration collapses into a - * single long task (the `await`s between inserts only yield to the microtask queue, which drains - * before the browser can paint or handle input). - * - * Not a Nuxt-scanned directory, so nothing here is auto-imported. - */ -import { comarkContent, readArtifact } from 'comark-content' -import sqliteWasm from 'comark-content/database/sqlite-wasm' -import sqliteFullTextSearch from 'comark-content/plugins/sqlite-full-text-search' -import { ofetch } from 'ofetch' -import { describeArtifact, indexedRows, isDebug, log, logger, setDebug, since } from './search-logger' -import type { CacheArtifact, ComarkContent } from 'comark-content' -import type { SqliteFullTextSearchMethods } from 'comark-content/plugins/sqlite-full-text-search' -import type { SearchWorkerRequest, SearchWorkerResponse } from '../types/search-worker' - -type SearchInstance = ComarkContent & SqliteFullTextSearchMethods -type SearchStatus = 'idle' | 'loading' | 'ready' | 'error' - -let instance: SearchInstance | undefined -let status: SearchStatus = 'idle' - -function post(message: SearchWorkerResponse): void { - self.postMessage(message) -} - -/** Every transition is mirrored to the main thread; the worker owns the hydration lifecycle. */ -function setStatus(value: Exclude): void { - status = value - post({ type: 'status', value }) -} - -/** - * Loads the database. No-op once loading or ready; retries after a failure. - * - * The guard lives here rather than in `useSearch` because the main thread's copy of `status` lags - * a message behind, so two warmups fired in the same tick would both get through it. - */ -async function loadDatabase(apiBase: string, origin: string): Promise { - if (status === 'loading' || status === 'ready') { - log(`warmup ignored — already ${status}`) - return - } - - setStatus('loading') - const started = performance.now() - try { - const fetchArtifact = async (path: string): Promise => { - const url = new URL(path, origin).href - const fetchStarted = performance.now() - try { - const artifact = await ofetch(url) - if (isDebug()) { - let contents: string - try { - contents = describeArtifact(await readArtifact(artifact)) - } catch (error) { - contents = `undecodable: ${error instanceof Error ? error.message : String(error)}` - } - log(`fetched ${path} in ${since(fetchStarted)} — ${artifact?.size ?? 0} bytes, ${contents}`) - } - return artifact - } catch (error) { - log(`failed ${path} after ${since(fetchStarted)}`, error) - throw error - } - } - - // Held rather than inlined into the plugin so the row count below can query the index directly. - const database = sqliteWasm() - const content = comarkContent({ - cache: { - loadManifest: () => fetchArtifact(`${apiBase}/manifest.json`), - loadSnapshot: (source: string) => fetchArtifact(`${apiBase}/snapshot/${source}.json`), - }, - plugins: [sqliteFullTextSearch({ database })], - logger, - }) - - await content.init() - - const indexStarted = performance.now() - await content.search(['content'], '') // pulls the snapshot in and builds the FTS index - log(`index built in ${since(indexStarted)} — ${await indexedRows(database, 'content')} row(s)`) - - instance = content - setStatus('ready') - log(`ready in ${since(started)}`) - } catch (error) { - setStatus('error') - log(`hydration failed after ${since(started)}`, error) - throw error - } -} - -self.onmessage = async (event: MessageEvent) => { - const request = event.data - try { - if (request.type === 'warmup') { - setDebug(request.debug === true) - await loadDatabase(request.apiBase, request.origin) - post({ type: 'result', id: request.id, results: [] }) - return - } - - const queryStarted = performance.now() - const results = instance - ? await instance.search(['content'], request.query, { - limit: 25, - snippet: { columns: ['content'] }, - ...request.opts, - }) - : [] - if (!instance) log(`dropped query "${request.query}" — no instance yet (status ${status})`) - else log(`query "${request.query}" -> ${results.length} result(s) in ${since(queryStarted)}`) - post({ type: 'result', id: request.id, results }) - } catch (error) { - post({ type: 'error', id: request.id, message: error instanceof Error ? error.message : String(error) }) - } -} diff --git a/nuxt.config.ts b/nuxt.config.ts index f819865..e73e9a1 100644 --- a/nuxt.config.ts +++ b/nuxt.config.ts @@ -14,6 +14,7 @@ export default defineNuxtConfig({ 'nuxt-og-image', '@nuxtjs/mcp-toolkit', 'nuxt-llms', + 'nuxt-workers', ], ignore: ['content/**'], ui: { content: true, prose: true }, diff --git a/package.json b/package.json index 256a5c1..cdff0af 100644 --- a/package.json +++ b/package.json @@ -67,6 +67,7 @@ "nuxt-llms": "^0.2.0", "nuxt-og-image": "^6.7.8", "nuxt-seo-utils": "^8.4.2", + "nuxt-workers": "^0.1.0", "pathe": "^2.0.3", "rangi": "^2.2.0", "satori": "^0.29.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b4a412d..2e05c36 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -19,7 +19,7 @@ importers: version: 4.0.79(vue@3.5.40(typescript@6.0.3))(zod@4.4.3) '@comark/nuxt': specifier: ^0.6.2 - version: 0.6.2(68aea379f1fb3d1950fd0939054f6932) + version: 0.6.2(3db09d0259767f67a47e6c452799cca0) '@iconify-json/lucide': specifier: ^1.2.125 version: 1.2.126 @@ -34,19 +34,19 @@ importers: version: 5.0.1(vue@3.5.40(typescript@6.0.3)) '@nuxt/kit': specifier: ^4.5.2 - version: 4.5.2(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) + version: 4.5.2(magic-string@1.2.2)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) '@nuxt/ui': specifier: ^4.11.0 version: 4.11.0(5e02240d1a29ce1916d0d971a672a8e1) '@nuxtjs/mcp-toolkit': specifier: ^0.18.1 - version: 0.18.1(@vue/compiler-sfc@3.5.41)(h3@1.15.11)(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(rollup@4.62.2)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3))(zod@4.4.3) + version: 0.18.1(@vue/compiler-sfc@3.5.41)(h3@1.15.11)(magic-string@1.2.2)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(rollup@4.62.2)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3))(zod@4.4.3) '@nuxtjs/robots': specifier: ^6.2.0 - version: 6.2.0(b71b8b4dee15fa847b46d80b1a8e7a1e) + version: 6.2.0(72621b0bb771dd52906c0fcafadae3f6) '@nuxtjs/sitemap': specifier: ^8.5.0 - version: 8.5.0(b71b8b4dee15fa847b46d80b1a8e7a1e) + version: 8.5.0(72621b0bb771dd52906c0fcafadae3f6) '@octokit/webhooks-methods': specifier: ^6.0.0 version: 6.0.0 @@ -103,13 +103,16 @@ importers: version: 2.4.0(@vueuse/core@14.4.0(vue@3.5.40(typescript@6.0.3)))(vue@3.5.40(typescript@6.0.3)) nuxt-llms: specifier: ^0.2.0 - version: 0.2.0(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) + version: 0.2.0(magic-string@1.2.2)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) nuxt-og-image: specifier: ^6.7.8 version: 6.7.8(96aa2bcfeccee775d1321a7a614270ba) nuxt-seo-utils: specifier: ^8.4.2 - version: 8.4.2(073b5b02f7c6fdda0183400de98d604c) + version: 8.4.2(6977ad2ab86795c4b5c34d74cdc00357) + nuxt-workers: + specifier: ^0.1.0 + version: 0.1.0(magicast@0.5.3) pathe: specifier: ^2.0.3 version: 2.0.3 @@ -134,7 +137,7 @@ importers: devDependencies: '@nuxt/devtools-kit': specifier: 4.0.0-alpha.9 - version: 4.0.0-alpha.9(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) + version: 4.0.0-alpha.9(magic-string@1.2.2)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) '@nuxt/eslint-config': specifier: ^1.17.0 version: 1.17.0(@typescript-eslint/utils@8.68.0(eslint@10.9.1(jiti@2.7.0))(typescript@6.0.3))(@vue/compiler-sfc@3.5.41)(eslint@10.9.1(jiti@2.7.0))(typescript@6.0.3) @@ -1239,6 +1242,10 @@ packages: '@nuxt/icon@2.5.1': resolution: {integrity: sha512-zBP72Po7BS+tXzoeDRA/Y9TTY77OIcNCyzfgXsOmep7zZShTEoe4p1WZBXce/9oJDK3YXmbYC3ILQ7XvqM4/XA==} + '@nuxt/kit@3.21.11': + resolution: {integrity: sha512-0Xi3tgwN77w43Q8GCPIrvWmF1J7Peehkts44E0uKNIml9lB8WoUn8YxyUjxBv47XtVR86NWoWALAT+/IEMHJEA==} + engines: {node: '>=18.12.0'} + '@nuxt/kit@4.5.1': resolution: {integrity: sha512-xDXQspE2blxaZwxwGknL/BqaIbkLizl85Ov+pbSlPPd/rw2KjJGx88RHU5SwoQNwCiSC5hWZBnVAznIsq1xNHQ==} engines: {node: '>=18.12.0'} @@ -5688,6 +5695,9 @@ packages: peerDependencies: vue: ^3.5.30 + nuxt-workers@0.1.0: + resolution: {integrity: sha512-npsxy72FRQZkxHV1Y+KCkuSvb2Y/7Tcp7xGXPHXXVQ5/oIZ5+69VAudfdhpuwPN1JZJn9ULr01vKRLamENsTew==} + nuxt@4.5.1: resolution: {integrity: sha512-bDfkB3VKenF7diLS+r6hBGjW/5hyH35q2xHZ355jEYuD1/dVC/3DW8yW8P+8p+Qk8MX+J0TmD66+jxnCandEpA==} engines: {node: ^22.19.0 || ^24.11.0 || >=26.0.0} @@ -7817,10 +7827,10 @@ snapshots: '@colordx/core@5.5.0': {} - '@comark/nuxt@0.6.2(68aea379f1fb3d1950fd0939054f6932)': + '@comark/nuxt@0.6.2(3db09d0259767f67a47e6c452799cca0)': dependencies: '@comark/vue': 0.6.2(beautiful-mermaid@1.1.3)(rangi@2.2.0)(shiki@4.3.1)(vue@3.5.40(typescript@6.0.3)) - '@nuxt/kit': 4.5.2(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) + '@nuxt/kit': 4.5.2(magic-string@1.2.2)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) comark: 0.6.2(beautiful-mermaid@1.1.3)(rangi@2.2.0)(shiki@4.3.1) nuxt: 4.5.2(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7))(@oxc-project/types@0.146.0)(@types/node@26.1.1)(@vercel/functions@3.9.5(ws@8.21.1))(@vitejs/devtools-kit@0.4.8(@modelcontextprotocol/sdk@1.30.0(zod@4.4.3))(cac@7.0.0)(srvx@0.11.22)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(@vue/compiler-sfc@3.5.41)(cac@7.0.0)(db0@0.3.4)(esbuild@0.28.1)(eslint@10.9.1(jiti@2.7.0))(ioredis@5.11.1)(lightningcss@1.33.0)(magicast@0.5.3)(optionator@0.9.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(rollup-plugin-visualizer@7.0.1(rolldown@1.2.5)(rollup@4.62.2))(rollup@4.62.2)(srvx@0.11.22)(terser@5.49.0)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue-tsc@3.3.11(typescript@6.0.3))(yaml@2.9.0) transitivePeerDependencies: @@ -8633,9 +8643,9 @@ snapshots: - rolldown - unplugin - '@nuxt/devtools-kit@4.0.0-alpha.7(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))': + '@nuxt/devtools-kit@4.0.0-alpha.7(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))': dependencies: - '@nuxt/kit': 4.5.2(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) + '@nuxt/kit': 4.5.2(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) tinyexec: 1.2.4 vite: 8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0) transitivePeerDependencies: @@ -8645,9 +8655,9 @@ snapshots: - rolldown - unplugin - '@nuxt/devtools-kit@4.0.0-alpha.7(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))': + '@nuxt/devtools-kit@4.0.0-alpha.7(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))': dependencies: - '@nuxt/kit': 4.5.2(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) + '@nuxt/kit': 4.5.2(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) tinyexec: 1.2.4 vite: 8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0) transitivePeerDependencies: @@ -8657,9 +8667,9 @@ snapshots: - rolldown - unplugin - '@nuxt/devtools-kit@4.0.0-alpha.7(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))': + '@nuxt/devtools-kit@4.0.0-alpha.7(magic-string@1.2.2)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))': dependencies: - '@nuxt/kit': 4.5.2(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) + '@nuxt/kit': 4.5.2(magic-string@1.2.2)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) tinyexec: 1.2.4 vite: 8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0) transitivePeerDependencies: @@ -8669,9 +8679,9 @@ snapshots: - rolldown - unplugin - '@nuxt/devtools-kit@4.0.0-alpha.9(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))': + '@nuxt/devtools-kit@4.0.0-alpha.9(magic-string@1.2.2)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))': dependencies: - '@nuxt/kit': 4.5.2(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) + '@nuxt/kit': 4.5.2(magic-string@1.2.2)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) nostics: 1.2.0 tinyexec: 1.2.4 vite: 8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0) @@ -8801,7 +8811,7 @@ snapshots: tinyglobby: 0.2.17 unstorage: 1.17.5(@vercel/functions@3.9.5(ws@8.21.1))(db0@0.3.4)(ioredis@5.11.1) vite: 8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0) - vite-plugin-inspect: 11.4.1(@nuxt/kit@4.5.2(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) + vite-plugin-inspect: 11.4.1(@nuxt/kit@4.5.2(magic-string@1.2.2)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) vite-plugin-vue-tracer: 1.4.0(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) which: 6.0.1 ws: 8.21.1 @@ -9024,12 +9034,38 @@ snapshots: - vite - vue - '@nuxt/kit@4.5.1(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))': + '@nuxt/kit@3.21.11(magicast@0.5.3)': dependencies: c12: 3.3.4(magicast@0.5.3) consola: 3.4.2 defu: 6.1.7 destr: 2.0.5 + errx: 0.1.2 + exsolve: 1.1.1 + ignore: 7.0.6 + jiti: 2.7.0 + klona: 2.0.6 + knitwork: 1.3.0 + mlly: 1.8.2 + ohash: 2.0.12 + pathe: 2.0.3 + pkg-types: 2.3.1 + rc9: 3.0.1 + scule: 1.3.0 + semver: 7.8.5 + tinyglobby: 0.2.17 + ufo: 1.6.4 + unctx: 2.5.0 + untyped: 2.0.0 + transitivePeerDependencies: + - magicast + + '@nuxt/kit@4.5.1(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))': + dependencies: + c12: 3.3.4(magicast@0.5.4) + consola: 3.4.2 + defu: 6.1.7 + destr: 2.0.5 errx: 0.1.0 exsolve: 1.1.0 ignore: 7.0.6 @@ -9044,7 +9080,7 @@ snapshots: scule: 1.3.0 tinyglobby: 0.2.17 ufo: 1.6.4 - unctx: 3.0.0(magic-string@1.1.0)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) + unctx: 3.0.0(magic-string@1.1.0)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) untyped: 2.0.0 verkit: 0.2.0 transitivePeerDependencies: @@ -9054,9 +9090,9 @@ snapshots: - rolldown - unplugin - '@nuxt/kit@4.5.1(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))': + '@nuxt/kit@4.5.1(magic-string@1.2.2)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))': dependencies: - c12: 3.3.4(magicast@0.5.4) + c12: 3.3.4(magicast@0.5.3) consola: 3.4.2 defu: 6.1.7 destr: 2.0.5 @@ -9074,7 +9110,7 @@ snapshots: scule: 1.3.0 tinyglobby: 0.2.17 ufo: 1.6.4 - unctx: 3.0.0(magic-string@1.1.0)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) + unctx: 3.0.0(magic-string@1.2.2)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) untyped: 2.0.0 verkit: 0.2.0 transitivePeerDependencies: @@ -9463,9 +9499,9 @@ snapshots: rc9: 3.0.1 std-env: 4.2.0 - '@nuxt/telemetry@2.8.0(@nuxt/kit@4.5.2(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))))': + '@nuxt/telemetry@2.8.0(@nuxt/kit@4.5.2(magic-string@1.2.2)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))))': dependencies: - '@nuxt/kit': 4.5.2(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) + '@nuxt/kit': 4.5.2(magic-string@1.2.2)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) citty: 0.2.2 consola: 3.4.2 ofetch: 2.0.0-alpha.3 @@ -9655,8 +9691,8 @@ snapshots: typescript: 6.0.3 ufo: 1.6.4 unplugin: 3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) - unplugin-auto-import: 21.1.0(@nuxt/kit@4.5.2(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))))(@vueuse/core@14.4.0(vue@3.5.40(typescript@6.0.3)))(esbuild@0.28.1)(oxc-parser@0.143.0)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) - unplugin-vue-components: 32.1.0(@nuxt/kit@4.5.2(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))))(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) + unplugin-auto-import: 21.1.0(@nuxt/kit@4.5.2(magic-string@1.2.2)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))))(@vueuse/core@14.4.0(vue@3.5.40(typescript@6.0.3)))(esbuild@0.28.1)(oxc-parser@0.143.0)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) + unplugin-vue-components: 32.1.0(@nuxt/kit@4.5.2(magic-string@1.2.2)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))))(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) vaul-vue: 0.4.1(reka-ui@2.10.3(vue@3.5.40(typescript@6.0.3)))(vue@3.5.40(typescript@6.0.3)) vue-component-type-helpers: 3.3.11 optionalDependencies: @@ -9870,10 +9906,10 @@ snapshots: - rolldown - unplugin - '@nuxtjs/mcp-toolkit@0.18.1(@vue/compiler-sfc@3.5.41)(h3@1.15.11)(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(rollup@4.62.2)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3))(zod@4.4.3)': + '@nuxtjs/mcp-toolkit@0.18.1(@vue/compiler-sfc@3.5.41)(h3@1.15.11)(magic-string@1.2.2)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(rollup@4.62.2)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3))(zod@4.4.3)': dependencies: '@modelcontextprotocol/sdk': 1.30.0(zod@4.4.3) - '@nuxt/kit': 4.5.1(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) + '@nuxt/kit': 4.5.1(magic-string@1.2.2)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) '@vitejs/plugin-vue': 6.0.8(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) h3: 1.15.11 tinyglobby: 0.2.17 @@ -9893,15 +9929,15 @@ snapshots: - supports-color - unplugin - '@nuxtjs/robots@6.2.0(b71b8b4dee15fa847b46d80b1a8e7a1e)': + '@nuxtjs/robots@6.2.0(72621b0bb771dd52906c0fcafadae3f6)': dependencies: '@fingerprintjs/botd': 2.0.0 - '@nuxt/kit': 4.5.2(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) + '@nuxt/kit': 4.5.2(magic-string@1.2.2)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) consola: 3.4.2 defu: 6.1.7 h3: 1.15.11 - nuxt-site-config: 4.2.3(b71b8b4dee15fa847b46d80b1a8e7a1e) - nuxtseo-shared: 5.3.14(f6c800eca89efe14b09f06a842ae4118) + nuxt-site-config: 4.2.3(72621b0bb771dd52906c0fcafadae3f6) + nuxtseo-shared: 5.3.14(ebb01ec50884f3cb98f9104ba4a06d32) pathe: 2.0.3 pkg-types: 2.3.1 ufo: 1.6.4 @@ -9918,13 +9954,13 @@ snapshots: - vite - vue - '@nuxtjs/sitemap@8.5.0(b71b8b4dee15fa847b46d80b1a8e7a1e)': + '@nuxtjs/sitemap@8.5.0(72621b0bb771dd52906c0fcafadae3f6)': dependencies: - '@nuxt/kit': 4.5.2(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) + '@nuxt/kit': 4.5.2(magic-string@1.2.2)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) consola: 3.4.2 defu: 6.1.7 - nuxt-site-config: 4.2.3(b71b8b4dee15fa847b46d80b1a8e7a1e) - nuxtseo-shared: 5.3.14(f6c800eca89efe14b09f06a842ae4118) + nuxt-site-config: 4.2.3(72621b0bb771dd52906c0fcafadae3f6) + nuxtseo-shared: 5.3.14(ebb01ec50884f3cb98f9104ba4a06d32) ofetch: 1.5.1 pathe: 2.0.3 pkg-types: 2.3.1 @@ -11066,7 +11102,7 @@ snapshots: '@unhead/bundler@3.2.3(@modelcontextprotocol/sdk@1.30.0(zod@4.4.3))(cac@7.0.0)(esbuild@0.28.1)(lightningcss@1.33.0)(rolldown@1.2.0)(rollup@4.62.2)(srvx@0.11.22)(typescript@6.0.3)(unhead@3.2.3(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))': dependencies: '@vitejs/devtools-kit': 0.4.8(@modelcontextprotocol/sdk@1.30.0(zod@4.4.3))(cac@7.0.0)(srvx@0.11.22)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) - magic-string: 1.1.0 + magic-string: 1.2.2 oxc-parser: 0.140.0 oxc-walker: 1.0.0(esbuild@0.28.1)(oxc-parser@0.140.0)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) ufo: 1.6.4 @@ -11090,7 +11126,7 @@ snapshots: '@unhead/bundler@3.4.0(@oxc-project/types@0.146.0)(@vitejs/devtools-kit@0.4.8(@modelcontextprotocol/sdk@1.30.0(zod@4.4.3))(cac@7.0.0)(srvx@0.11.22)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(esbuild@0.28.1)(lightningcss@1.33.0)(oxc-parser@0.143.0)(rolldown@1.2.5)(rollup@4.62.2)(unhead@3.4.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))': dependencies: - magic-string: 1.1.0 + magic-string: 1.2.2 oxc-walker: 1.1.1(@oxc-project/types@0.146.0)(oxc-parser@0.143.0)(rolldown@1.2.5) unhead: 3.4.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) unplugin: 3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) @@ -11268,8 +11304,8 @@ snapshots: dependencies: '@mapbox/node-pre-gyp': 2.0.3 '@rollup/pluginutils': 5.4.0(rollup@4.62.2) - acorn: 8.17.0 - acorn-import-attributes: 1.9.5(acorn@8.17.0) + acorn: 8.18.0 + acorn-import-attributes: 1.9.5(acorn@8.18.0) async-sema: 3.1.1 bindings: 1.5.0 estree-walker: 2.0.2 @@ -11656,9 +11692,9 @@ snapshots: mime-types: 3.0.2 negotiator: 1.0.0 - acorn-import-attributes@1.9.5(acorn@8.17.0): + acorn-import-attributes@1.9.5(acorn@8.18.0): dependencies: - acorn: 8.17.0 + acorn: 8.18.0 acorn-jsx@5.3.2(acorn@8.17.0): dependencies: @@ -14023,9 +14059,9 @@ snapshots: dependencies: boolbase: 1.0.0 - nuxt-llms@0.2.0(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))): + nuxt-llms@0.2.0(magic-string@1.2.2)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))): dependencies: - '@nuxt/kit': 4.5.2(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) + '@nuxt/kit': 4.5.2(magic-string@1.2.2)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) transitivePeerDependencies: - magic-string - magicast @@ -14050,7 +14086,7 @@ snapshots: magicast: 0.5.4 mocked-exports: 0.1.1 nuxt-site-config: 4.2.3(23436d384523cd8ce8eb20e8fc2d1b13) - nuxtseo-shared: 5.3.14(5a2df5fec7456edb4cdca5bc7765bed8) + nuxtseo-shared: 5.3.14(6d6818549cbbb0a95ad12348371ab532) nypm: 0.6.9 object-identity: 0.2.3 ofetch: 1.5.1 @@ -14091,17 +14127,17 @@ snapshots: - vue - webpack - nuxt-seo-utils@8.4.2(073b5b02f7c6fdda0183400de98d604c): + nuxt-seo-utils@8.4.2(6977ad2ab86795c4b5c34d74cdc00357): dependencies: - '@nuxt/kit': 4.5.2(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) + '@nuxt/kit': 4.5.2(magic-string@1.2.2)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) citty: 0.2.2 consola: 3.4.2 defu: 6.1.7 escape-string-regexp: 5.0.0 exsolve: 1.1.1 nuxt: 4.5.2(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7))(@oxc-project/types@0.146.0)(@types/node@26.1.1)(@vercel/functions@3.9.5(ws@8.21.1))(@vitejs/devtools-kit@0.4.8(@modelcontextprotocol/sdk@1.30.0(zod@4.4.3))(cac@7.0.0)(srvx@0.11.22)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(@vue/compiler-sfc@3.5.41)(cac@7.0.0)(db0@0.3.4)(esbuild@0.28.1)(eslint@10.9.1(jiti@2.7.0))(ioredis@5.11.1)(lightningcss@1.33.0)(magicast@0.5.3)(optionator@0.9.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(rollup-plugin-visualizer@7.0.1(rolldown@1.2.5)(rollup@4.62.2))(rollup@4.62.2)(srvx@0.11.22)(terser@5.49.0)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue-tsc@3.3.11(typescript@6.0.3))(yaml@2.9.0) - nuxt-site-config: 4.2.3(b71b8b4dee15fa847b46d80b1a8e7a1e) - nuxtseo-shared: 5.3.14(f6c800eca89efe14b09f06a842ae4118) + nuxt-site-config: 4.2.3(72621b0bb771dd52906c0fcafadae3f6) + nuxtseo-shared: 5.3.14(ebb01ec50884f3cb98f9104ba4a06d32) pathe: 2.0.3 pkg-types: 2.3.1 scule: 1.3.0 @@ -14125,9 +14161,9 @@ snapshots: - vue - zod - nuxt-site-config-kit@4.2.3(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vue@3.5.40(typescript@6.0.3)): + nuxt-site-config-kit@4.2.3(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vue@3.5.40(typescript@6.0.3)): dependencies: - '@nuxt/kit': 4.5.2(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) + '@nuxt/kit': 4.5.2(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) site-config-stack: 4.2.3(vue@3.5.40(typescript@6.0.3)) std-env: 4.2.0 ufo: 1.6.4 @@ -14138,10 +14174,11 @@ snapshots: - rolldown - unplugin - vue + optional: true - nuxt-site-config-kit@4.2.3(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vue@3.5.40(typescript@6.0.3)): + nuxt-site-config-kit@4.2.3(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vue@3.5.40(typescript@6.0.3)): dependencies: - '@nuxt/kit': 4.5.2(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) + '@nuxt/kit': 4.5.2(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) site-config-stack: 4.2.3(vue@3.5.40(typescript@6.0.3)) std-env: 4.2.0 ufo: 1.6.4 @@ -14152,11 +14189,10 @@ snapshots: - rolldown - unplugin - vue - optional: true - nuxt-site-config-kit@4.2.3(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vue@3.5.40(typescript@6.0.3)): + nuxt-site-config-kit@4.2.3(magic-string@1.2.2)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vue@3.5.40(typescript@6.0.3)): dependencies: - '@nuxt/kit': 4.5.2(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) + '@nuxt/kit': 4.5.2(magic-string@1.2.2)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) site-config-stack: 4.2.3(vue@3.5.40(typescript@6.0.3)) std-env: 4.2.0 ufo: 1.6.4 @@ -14176,7 +14212,7 @@ snapshots: defu: 6.1.7 h3: 1.15.11 nuxt-site-config-kit: 4.2.3(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vue@3.5.40(typescript@6.0.3)) - nuxtseo-shared: 5.3.14(5a2df5fec7456edb4cdca5bc7765bed8) + nuxtseo-shared: 5.3.14(6d6818549cbbb0a95ad12348371ab532) pathe: 2.0.3 pkg-types: 2.3.1 site-config-stack: 4.2.3(vue@3.5.40(typescript@6.0.3)) @@ -14193,15 +14229,15 @@ snapshots: - vite - zod - nuxt-site-config@4.2.3(9a6123aee74501a03265b4edac84ed11): + nuxt-site-config@4.2.3(72621b0bb771dd52906c0fcafadae3f6): dependencies: '@nuxt/devalue': 2.0.2 - '@nuxt/kit': 4.5.2(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) + '@nuxt/kit': 4.5.2(magic-string@1.2.2)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) consola: 3.4.2 defu: 6.1.7 h3: 1.15.11 - nuxt-site-config-kit: 4.2.3(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vue@3.5.40(typescript@6.0.3)) - nuxtseo-shared: 5.3.14(938eb7d6082c7faa7467a1c3e90363d2) + nuxt-site-config-kit: 4.2.3(magic-string@1.2.2)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vue@3.5.40(typescript@6.0.3)) + nuxtseo-shared: 5.3.14(ebb01ec50884f3cb98f9104ba4a06d32) pathe: 2.0.3 pkg-types: 2.3.1 site-config-stack: 4.2.3(vue@3.5.40(typescript@6.0.3)) @@ -14217,17 +14253,16 @@ snapshots: - unplugin - vite - zod - optional: true - nuxt-site-config@4.2.3(b71b8b4dee15fa847b46d80b1a8e7a1e): + nuxt-site-config@4.2.3(9a6123aee74501a03265b4edac84ed11): dependencies: '@nuxt/devalue': 2.0.2 - '@nuxt/kit': 4.5.2(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) + '@nuxt/kit': 4.5.2(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) consola: 3.4.2 defu: 6.1.7 h3: 1.15.11 - nuxt-site-config-kit: 4.2.3(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vue@3.5.40(typescript@6.0.3)) - nuxtseo-shared: 5.3.14(f6c800eca89efe14b09f06a842ae4118) + nuxt-site-config-kit: 4.2.3(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vue@3.5.40(typescript@6.0.3)) + nuxtseo-shared: 5.3.14(938eb7d6082c7faa7467a1c3e90363d2) pathe: 2.0.3 pkg-types: 2.3.1 site-config-stack: 4.2.3(vue@3.5.40(typescript@6.0.3)) @@ -14243,6 +14278,18 @@ snapshots: - unplugin - vite - zod + optional: true + + nuxt-workers@0.1.0(magicast@0.5.3): + dependencies: + '@nuxt/kit': 3.21.11(magicast@0.5.3) + magic-string: 0.30.21 + mlly: 1.8.2 + pathe: 2.0.3 + ufo: 1.6.4 + unplugin: 2.3.11 + transitivePeerDependencies: + - magicast nuxt@4.5.1(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7))(@modelcontextprotocol/sdk@1.30.0(zod@4.4.3))(@types/node@26.1.1)(@vercel/functions@3.9.5(ws@8.21.1))(@vue/compiler-sfc@3.5.41)(cac@7.0.0)(db0@0.3.4)(esbuild@0.28.1)(eslint@10.9.1(jiti@2.7.0))(ioredis@5.11.1)(lightningcss@1.33.0)(magicast@0.5.4)(optionator@0.9.4)(oxc-parser@0.140.0)(rollup-plugin-visualizer@7.0.1(rolldown@1.2.0)(rollup@4.62.2))(rollup@4.62.2)(srvx@0.11.22)(terser@5.49.0)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue-tsc@3.3.11(typescript@6.0.3))(yaml@2.9.0): dependencies: @@ -14391,7 +14438,7 @@ snapshots: '@nuxt/kit': 4.5.2(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) '@nuxt/nitro-server': 4.5.2(2286d120939ac565d13be6f9aa3cd81b) '@nuxt/schema': 4.5.2 - '@nuxt/telemetry': 2.8.0(@nuxt/kit@4.5.2(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))) + '@nuxt/telemetry': 2.8.0(@nuxt/kit@4.5.2(magic-string@1.2.2)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))) '@nuxt/vite-builder': 4.5.2(be529fad350f4212210228b14afccdb9) '@unhead/vue': 3.4.0(@oxc-project/types@0.146.0)(@vitejs/devtools-kit@0.4.8(@modelcontextprotocol/sdk@1.30.0(zod@4.4.3))(cac@7.0.0)(srvx@0.11.22)(typescript@6.0.3)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(esbuild@0.28.1)(lightningcss@1.33.0)(oxc-parser@0.143.0)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) '@vue/shared': 3.5.40 @@ -14621,7 +14668,7 @@ snapshots: - yup - zod - nuxtseo-shared@5.3.14(5a2df5fec7456edb4cdca5bc7765bed8): + nuxtseo-shared@5.3.14(6d6818549cbbb0a95ad12348371ab532): dependencies: '@clack/prompts': 1.7.0 '@nuxt/devtools-kit': 4.0.0-alpha.7(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) @@ -14641,7 +14688,7 @@ snapshots: ufo: 1.6.4 vue: 3.5.40(typescript@6.0.3) optionalDependencies: - nuxt-site-config: 4.2.3(b71b8b4dee15fa847b46d80b1a8e7a1e) + nuxt-site-config: 4.2.3(72621b0bb771dd52906c0fcafadae3f6) zod: 4.4.3 transitivePeerDependencies: - magic-string @@ -14682,11 +14729,11 @@ snapshots: - vite optional: true - nuxtseo-shared@5.3.14(f6c800eca89efe14b09f06a842ae4118): + nuxtseo-shared@5.3.14(ebb01ec50884f3cb98f9104ba4a06d32): dependencies: '@clack/prompts': 1.7.0 - '@nuxt/devtools-kit': 4.0.0-alpha.7(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) - '@nuxt/kit': 4.5.2(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) + '@nuxt/devtools-kit': 4.0.0-alpha.7(magic-string@1.2.2)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) + '@nuxt/kit': 4.5.2(magic-string@1.2.2)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) '@nuxt/schema': 4.5.2 birpc: 4.0.0 consola: 3.4.2 @@ -14702,7 +14749,7 @@ snapshots: ufo: 1.6.4 vue: 3.5.40(typescript@6.0.3) optionalDependencies: - nuxt-site-config: 4.2.3(b71b8b4dee15fa847b46d80b1a8e7a1e) + nuxt-site-config: 4.2.3(72621b0bb771dd52906c0fcafadae3f6) zod: 4.4.3 transitivePeerDependencies: - magic-string @@ -16064,7 +16111,7 @@ snapshots: terser@5.49.0: dependencies: '@jridgewell/source-map': 0.3.11 - acorn: 8.17.0 + acorn: 8.18.0 commander: 2.20.3 source-map-support: 0.5.21 @@ -16150,7 +16197,7 @@ snapshots: unctx@2.5.0: dependencies: - acorn: 8.17.0 + acorn: 8.18.0 estree-walker: 3.0.3 magic-string: 0.30.21 unplugin: 2.3.11 @@ -16248,7 +16295,7 @@ snapshots: unimport@5.7.0: dependencies: - acorn: 8.17.0 + acorn: 8.18.0 escape-string-regexp: 5.0.0 estree-walker: 3.0.3 local-pkg: 1.2.1 @@ -16387,7 +16434,7 @@ snapshots: '@nuxt/kit': 4.5.2(magic-string@0.30.21)(magicast@0.5.4)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) '@vueuse/core': 14.4.0(vue@3.5.40(typescript@6.0.3)) - unplugin-auto-import@21.1.0(@nuxt/kit@4.5.2(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))))(@vueuse/core@14.4.0(vue@3.5.40(typescript@6.0.3)))(esbuild@0.28.1)(oxc-parser@0.143.0)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)): + unplugin-auto-import@21.1.0(@nuxt/kit@4.5.2(magic-string@1.2.2)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))))(@vueuse/core@14.4.0(vue@3.5.40(typescript@6.0.3)))(esbuild@0.28.1)(oxc-parser@0.143.0)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)): dependencies: local-pkg: 1.2.1 magic-string: 1.1.0 @@ -16396,7 +16443,7 @@ snapshots: unplugin: 3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) unplugin-utils: 0.3.2 optionalDependencies: - '@nuxt/kit': 4.5.2(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) + '@nuxt/kit': 4.5.2(magic-string@1.2.2)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) '@vueuse/core': 14.4.0(vue@3.5.40(typescript@6.0.3)) transitivePeerDependencies: - '@farmfe/core' @@ -16440,7 +16487,7 @@ snapshots: - vite - webpack - unplugin-vue-components@32.1.0(@nuxt/kit@4.5.2(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))))(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)): + unplugin-vue-components@32.1.0(@nuxt/kit@4.5.2(magic-string@1.2.2)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))))(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)): dependencies: chokidar: 5.0.0 local-pkg: 1.2.1 @@ -16453,7 +16500,7 @@ snapshots: unplugin-utils: 0.3.2 vue: 3.5.40(typescript@6.0.3) optionalDependencies: - '@nuxt/kit': 4.5.2(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) + '@nuxt/kit': 4.5.2(magic-string@1.2.2)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) transitivePeerDependencies: - '@farmfe/core' - '@rspack/core' @@ -16468,7 +16515,7 @@ snapshots: unplugin@2.3.11: dependencies: '@jridgewell/remapping': 2.3.5 - acorn: 8.17.0 + acorn: 8.18.0 picomatch: 4.0.5 webpack-virtual-modules: 0.6.2 @@ -16553,7 +16600,7 @@ snapshots: unwasm@0.5.3: dependencies: - exsolve: 1.1.0 + exsolve: 1.1.1 knitwork: 1.3.0 magic-string: 0.30.21 mlly: 1.8.2 @@ -16688,7 +16735,7 @@ snapshots: optionalDependencies: '@nuxt/kit': 4.5.2(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.140.0)(rolldown@1.2.0)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.0)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) - vite-plugin-inspect@11.4.1(@nuxt/kit@4.5.2(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)): + vite-plugin-inspect@11.4.1(@nuxt/kit@4.5.2(magic-string@1.2.2)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))))(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)): dependencies: ansis: 4.3.1 error-stack-parser-es: 1.0.5 @@ -16701,7 +16748,7 @@ snapshots: vite: 8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0) vite-dev-rpc: 2.0.0(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) optionalDependencies: - '@nuxt/kit': 4.5.2(magic-string@1.1.0)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) + '@nuxt/kit': 4.5.2(magic-string@1.2.2)(magicast@0.5.3)(oxc-parser@0.143.0)(rolldown@1.2.5)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.5)(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) vite-plugin-singlefile@2.3.3(rollup@4.62.2)(vite@8.2.2(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)): dependencies: diff --git a/test/content-contract.test.ts b/test/content-contract.test.ts index 46869bc..d8b2091 100644 --- a/test/content-contract.test.ts +++ b/test/content-contract.test.ts @@ -107,8 +107,7 @@ describe('comark-content contract', () => { const fetchArtifact = async (path: string) => await (await server.handler(new Request(`http://localhost/api/content/${path}`))).json() - // What `app/workers/search.worker.ts` does: no sources, no driver — the whole client-side - // search feature is this round-trip, so a break here is a silently empty search index. + // The search feature is this round-trip, so a break here is a silently empty search index. const client = comarkContent({ cache: { loadManifest: () => fetchArtifact('manifest.json'), From 8658fc434736ae56d0eb5c5d76a77d98e7b010ea Mon Sep 17 00:00:00 2001 From: Baptiste Leproux Date: Fri, 28 Aug 2026 15:47:20 +0200 Subject: [PATCH 15/20] fix lockfile --- pnpm-lock.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2e05c36..68e2805 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -3912,7 +3912,7 @@ packages: resolution: {integrity: sha512-Z3UPUKasUVDFCDYAjP2fmlVRf1jFHJv1izAmPjiOa0OCIw1W7iC8PZ2GsoDa8uZv+mKyWopxxStT9q05+27h7w==} comark-content@https://pkg.pr.new/comark-content@67c137f: - resolution: {tarball: https://pkg.pr.new/comark-content@67c137f} + resolution: {integrity: sha512-X6IbRRKi2IU8COgDCpoHtLZ8wiFprgQpIrm3UWyp9K3F/omo03w/lko+uGSE9SMoakFtfJS74pswUJDLcy05tw==, tarball: https://pkg.pr.new/comark-content@67c137f} version: 0.3.0 hasBin: true From a593fbdbe34ae7cb5e3bd94ca15d0ef52335898f Mon Sep 17 00:00:00 2001 From: Baptiste Leproux Date: Thu, 3 Sep 2026 11:45:47 +0200 Subject: [PATCH 16/20] improvements --- modules/config.ts | 6 + server/api/revalidate.post.ts | 323 +++++++++++++++++++--------------- server/utils/cache.ts | 2 +- server/utils/content.ts | 36 ++-- server/utils/github.ts | 1 + server/utils/paths.ts | 51 ------ server/utils/timing.ts | 29 +++ server/utils/webhook.ts | 117 ++++++++++++ test/content-contract.test.ts | 2 +- test/paths.test.ts | 86 +-------- test/webhook.test.ts | 120 +++++++++++++ 11 files changed, 478 insertions(+), 295 deletions(-) create mode 100644 server/utils/timing.ts create mode 100644 server/utils/webhook.ts create mode 100644 test/webhook.test.ts diff --git a/modules/config.ts b/modules/config.ts index 7f1eb34..5902207 100644 --- a/modules/config.ts +++ b/modules/config.ts @@ -22,6 +22,11 @@ export interface ComarkDocsOptions { * push webhook all resolve to a path that doesn't exist. Also settable as `NUXT_DOCS_CONTENT_DIR`. */ contentDir?: string + /** + * Frontmatter fields kept in the manifest (visible to `list()` and `navigation()`) and the push webhook's nav-changed diff. + * @default ['title', 'description', 'navigation', 'icon', 'layout'] + */ + listingFields?: string[] codeExplorer?: { /** GitHub repos (`owner/name`) `/api/code-explorer` may read. Defaults to the content repo only. */ allowRepos?: string[] @@ -119,6 +124,7 @@ export default defineNuxtModule({ contentDir, contentPath, repoRoot, + listingFields: options.listingFields || ['title', 'description', 'navigation', 'icon', 'layout'], codeExplorer: { allowRepos: options.codeExplorer?.allowRepos || [], }, diff --git a/server/api/revalidate.post.ts b/server/api/revalidate.post.ts index 214730e..63fd6f2 100644 --- a/server/api/revalidate.post.ts +++ b/server/api/revalidate.post.ts @@ -1,30 +1,24 @@ -import type { ContentListFile } from 'comark-content' import { verify } from '@octokit/webhooks-methods' import { waitUntil } from '@vercel/functions' /** Each re-render hits this same deployment, so the ceiling is about not stampeding ourselves. */ const REVALIDATE_CONCURRENCY = 8 -/** `Promise.allSettled` over `items`, at most `size` in flight. */ -async function settleInBatches( - items: T[], - size: number, - fn: (item: T) => Promise -): Promise[]> { - const results: PromiseSettledResult[] = [] - for (let i = 0; i < items.length; i += size) { - // Not `.map(fn)` — `map` passes the index, which lands in the callee's optional parameter. - results.push(...(await Promise.allSettled(items.slice(i, i + size).map((item) => fn(item))))) - } - return results -} +/** Why a route was purged — one value per `addPath` call site below. */ +type PurgeReason = 'page' | 'payload' | 'raw' | 'nav' | 'artifact' | 'global' + +/** Display/response order. */ +const REASON_ORDER: PurgeReason[] = ['page', 'payload', 'raw', 'nav', 'artifact', 'global'] + +/** `nav` is the only unbounded reason (the whole site can be thousands of pages) — cap what the log prints. */ +const MAX_LOGGED_PATHS_PER_REASON = 5 export default defineEventHandler(async (event) => { const { docs } = useRuntimeConfig(event) const secret = docs.webhookSecret || process.env.WEBHOOK_SECRET const bypassToken = docs.bypassToken || process.env.VERCEL_BYPASS_TOKEN if (!secret || !bypassToken) { - throw createError({ statusCode: 500, statusMessage: 'Webhook not configured' }) + throw createError({ statusCode: 501, statusMessage: 'Revalidation webhook is not configured' }) } const signature = getHeader(event, 'x-hub-signature-256') @@ -41,177 +35,218 @@ export default defineEventHandler(async (event) => { throw createError({ statusCode: 401, statusMessage: 'Invalid signature' }) } + const requestId = getHeader(event, 'x-vercel-id') ?? getHeader(event, 'x-request-id') ?? 'local' + const deliveryId = getHeader(event, 'x-github-delivery') + const tag = `[revalidate:${requestId}${deliveryId ? `:${deliveryId}` : ''}]` + const timings = createTimings() + + const githubEvent = getHeader(event, 'x-github-event') + if (githubEvent !== 'push') { + console.log(`${tag} skipped: ${githubEvent ?? 'unknown'} event`) + return { ok: true, skipped: 'not-a-push-event', event: githubEvent } + } + const payload = JSON.parse(raw) as GitHubPushPayload const branch = targetBranch() const contentDir = docs.contentDir const expectedRef = `refs/heads/${branch}` - if (payload.ref !== expectedRef) { - console.log(`[content] revalidate push skipped (ref=${payload.ref} !== expected=${expectedRef})`) - return { - ok: true, - skipped: 'non-target-branch', - expected: expectedRef, - received: payload.ref, - } + const repo = githubRepo() + if (payload.repository?.full_name && payload.repository.full_name !== repo) { + console.log(`${tag} skipped: repo=${payload.repository.full_name} !== expected=${repo}`) + return { ok: true, skipped: 'wrong-repo', expected: repo, received: payload.repository.full_name } } - // Classify changed content files. A file added in one commit and modified in - // another counts as added; `.navigation.*` config files always touch navigation. - const added = new Set() - const removed = new Set() - const modified = new Set() - let navConfigTouched = false - for (const commit of payload.commits ?? []) { - for (const f of commit.added ?? []) { - if (isContentMd(f)) added.add(f) - else if (isNavConfig(f)) navConfigTouched = true - } - for (const f of commit.modified ?? []) { - if (isContentMd(f)) modified.add(f) - else if (isNavConfig(f)) navConfigTouched = true - } - for (const f of commit.removed ?? []) { - if (isContentMd(f)) removed.add(f) - else if (isNavConfig(f)) navConfigTouched = true - } + if (payload.ref !== expectedRef) { + console.log(`${tag} skipped: ref=${payload.ref} !== expected=${expectedRef}`) + return { ok: true, skipped: 'non-target-branch', expected: expectedRef, received: payload.ref } } - for (const f of added) modified.delete(f) - const changedFiles = [...added, ...modified, ...removed] - if (changedFiles.length === 0 && !navConfigTouched) { + const changes = changesForPush(contentDir, payload.commits ?? []) + if (!changes.upserted.length && !changes.removed.length && !changes.navTouched) { return { ok: true, skipped: 'no-content-changes' } } - const protocol = getRequestProtocol(event) - const host = getRequestHost(event, { xForwardedHost: true }) - const baseURL = `${protocol}://${host}` - - // `x-vercel-protection-bypass` bypasses the SSO wall when the handler calls itself - const readHeaders: Record = {} - if (process.env.VERCEL_AUTOMATION_BYPASS_SECRET) { - readHeaders['x-vercel-protection-bypass'] = process.env.VERCEL_AUTOMATION_BYPASS_SECRET - } - - // `x-prerender-revalidate` purges the ISR cache - const headers: Record = { - ...readHeaders, - 'x-prerender-revalidate': bypassToken, - } - - const headSha = payload.head_commit?.id - if (!headSha) { - throw createError({ statusCode: 400, statusMessage: 'Missing head commit SHA' }) - } - - // Bypass the short ref cache and write the canonical path-filtered revision before the purge fan-out, - // so a freshly-purged page cannot re-render against a stale or payload-order-dependent content SHA. - const contentSha = await resolveContentSha(branch, contentDir, { refresh: true }) - - console.log(`[content] revalidate push headSha=${headSha} contentSha=${contentSha}`) + const buildId = useRuntimeConfig(event).app.buildId + const pathsToPurge = new Set() + const byReason = new Map>() - const requestId = getHeader(event, 'x-vercel-id') ?? getHeader(event, 'x-request-id') ?? 'local' - const tag = `[revalidate:${requestId}]` - - // Planning before we respond costs two `init()` passes against GitHub's ~10s delivery timeout, - // in exchange for diagnostics in the webhook body. Safe because everything here is idempotent, - // so a retried delivery only repeats work. If it gets slow, move this into `waitUntil`. - const beforeSha = payload.before - let oldItems: Record = {} - if (beforeSha && !/^0+$/.test(beforeSha)) { - try { - const oldContent = await createSourceContent(beforeSha) - await oldContent.init() - oldItems = oldContent.manifest.items - } catch (err) { - const message = err instanceof Error ? err.message : err - console.warn(`${tag} no before-manifest (${beforeSha}) — treating as full revalidate:`, message) - } + /** Add a path to the purge set, and track it by reason for the breakdown log. */ + const addPath = (reason: PurgeReason, path: string): void => { + if (pathsToPurge.has(path)) return + pathsToPurge.add(path) + const paths = byReason.get(reason) ?? new Set() + paths.add(path) + byReason.set(reason, paths) } - // The head snapshot has the same content directory as `contentSha`; populate the namespace that - // production instances will read even when later commits in this push only changed code. - const headContent = await createSourceContent(headSha, { cache: { driver: cacheDriver(contentSha) } }) - await headContent.init() - const newItems = headContent.manifest.items + // Diffed against the live prod instance, already warm + const { headSha, freshContent, newItems, pagePaths, navChanged } = await timings.time('rebuild', async () => { + const outdated = await getProdContent() + await outdated.init() + const oldItems = { ...outdated.manifest.items } - const oldPaths = new Set(Object.keys(oldItems)) - const newPaths = Object.keys(newItems) - const addedPaths = newPaths.filter((p) => !oldPaths.has(p)) - const removedPaths = [...oldPaths].filter((p) => !(p in newItems)) + // Refresh the content SHA + const headSha = await resolveContentSha(branch, contentDir, { refresh: true }) + const freshContent = await createSourceContent(headSha, { cache: { driver: cacheDriver(headSha) } }) + await freshContent.init() + const newItems = freshContent.manifest.items - const metaChangedPaths: string[] = [] - for (const p of newPaths) { - if (oldPaths.has(p) && hashManifestItem(oldItems[p]) !== hashManifestItem(newItems[p])) metaChangedPaths.push(p) - } - const navChanged = navConfigTouched || addedPaths.length > 0 || removedPaths.length > 0 || metaChangedPaths.length > 0 - - // Payload routes are keyed by the build-id query on some deployments, so purge the exact - // URL the browser loads (`…/_payload.json?`). - const buildId = useRuntimeConfig(event).app.buildId + return { headSha, freshContent, newItems, ...diffContent(changes, oldItems, newItems) } + }) - // Any content change invalidates the llms indexes and the feed. - const paths = new Set(['/llms.txt', '/llms-full.txt', '/rss.xml']) - for (const f of changedFiles) { - const pageUrl = pageUrlForPath(f) - if (pageUrl) { - paths.add(payloadUrlForRoute(pageUrl, buildId)) - paths.add(pageUrl) - } - const rawUrl = rawUrlForPath(f) - if (rawUrl) paths.add(rawUrl) + for (const path of pagePaths) { + addPath('page', path) + addPath('payload', payloadUrlForPage(path, buildId)) + addPath('raw', rawUrlForPage(path)) } // Navigation renders on every page, so a change to it re-renders all of them. if (navChanged) { for (const item of Object.values(newItems)) { - if (item.meta.kind === 'document') { - paths.add(item.path) - paths.add(payloadUrlForRoute(item.path, buildId)) - } + if (item.meta.kind !== 'document') continue + addPath('nav', item.path) + addPath('nav', payloadUrlForPage(item.path, buildId)) + addPath('nav', rawUrlForPage(item.path)) } } + // Per-commit search artifacts (ISR, immutable). + const artifactBase = `/api/content/blob/${headSha}` + const manifestPath = `${artifactBase}/manifest.json` + const snapshotPath = `${artifactBase}/snapshot/content.json` + addPath('artifact', manifestPath) + addPath('artifact', snapshotPath) + const artifactPaths = new Set([manifestPath, snapshotPath]) + + // Any content change invalidates the global indexes: each is rebuilt from the whole tree. + for (const path of ['/llms.txt', '/llms-full.txt', '/rss.xml', '/sitemap.xml']) { + addPath('global', path) + } + console.log( `${tag} navChanged=${navChanged} ` + - `(added=${addedPaths.length}, removed=${removedPaths.length}, meta=${metaChangedPaths.length}, navConfig=${navConfigTouched}) | ` + - `files: +${added.size} ~${modified.size} -${removed.size} | ${paths.size} route(s)` + `(upserted=${changes.upserted.length}, removed=${changes.removed.length}, navConfig=${changes.navTouched}) | ` + + `${pathsToPurge.size} route(s) | ${timings.format()}` ) - if (metaChangedPaths.length) console.log(`${tag} meta changed: ${metaChangedPaths.join(', ')}`) - if (addedPaths.length) console.log(`${tag} added: ${addedPaths.join(', ')}`) - if (removedPaths.length) console.log(`${tag} removed: ${removedPaths.join(', ')}`) + + logBreakdown(tag, byReason) + + // Dev has no ISR cache to purge + if (import.meta.dev) { + return { ok: true, requestId, deliveryId, navChanged, routes: routesBreakdown(byReason), dev: true } + } + + const protocol = getRequestProtocol(event) + const host = getRequestHost(event, { xForwardedHost: true }) + const baseURL = `${protocol}://${host}` + + // `x-prerender-revalidate` purges the ISR cache entry for the URL being fetched. + const headers: Record = { 'x-prerender-revalidate': bypassToken } + // Lets the deployment call itself while Vercel Authentication is on (preview deploys). + if (process.env.VERCEL_AUTOMATION_BYPASS_SECRET) { + headers['x-vercel-protection-bypass'] = process.env.VERCEL_AUTOMATION_BYPASS_SECRET + } // Vercel's native waitUntil, not Nitro's `event.waitUntil` — that one can orphan async work here. waitUntil( (async () => { - const revalidate = (path: string, extra: Record = {}) => - $fetch(path, { baseURL, method: 'GET', headers: { ...headers, ...extra } }).catch((err) => { - console.error(`${tag} ✗ ${path}`, err?.statusCode ?? err?.message ?? err) - throw err - }) + const absent: string[] = [] - // Warms the per-SHA body cache and persists the snapshot artifact - await warmSnapshot(headContent).catch((err) => { - console.error(`${tag} snapshot warm failed`, err?.message ?? err) - }) + // Warms the per-SHA body cache and persists the snapshot artifact the fetches below read. + await timings.time('warm', () => + warmArtifacts(freshContent).catch((error) => { + console.error(`${tag} artifact warm failed`, error?.message ?? error) + }) + ) - await useStorage('cache:nuxt:payload').clear() + const revalidate = (path: string) => + $fetch(path, { baseURL, method: 'GET', headers }).catch((error) => { + console.error(`${tag} ✗ ${path}`, error?.statusCode ?? error?.message ?? error) + throw error + }) - // Bounded: a nav change queues two URLs per page, and every one re-enters this function. - const results = await settleInBatches([...paths], REVALIDATE_CONCURRENCY, revalidate) - const ok = results.filter((r) => r.status === 'fulfilled').length - console.log(`${tag} complete: ${ok}/${results.length} succeeded`) + const artifactResults = await timings.time('artifact', () => + settleInBatches([...artifactPaths], REVALIDATE_CONCURRENCY, revalidate) + ) + + const pagePathsToPurge = [...pathsToPurge].filter((path) => !artifactPaths.has(path)) + const pageResults = await timings.time('purge', () => + settleInBatches(pagePathsToPurge, REVALIDATE_CONCURRENCY, (path) => + $fetch(path, { baseURL, method: 'GET', headers }).catch((error) => { + // Content with no page of its own (e.g. a partial) has nothing cached to purge. + if (error?.statusCode === 404) { + absent.push(path) + return + } + console.error(`${tag} ✗ ${path}`, error?.statusCode ?? error?.message ?? error) + throw error + }) + ) + ) + + const results = [...artifactResults, ...pageResults] + const failed = results.filter((r) => r.status === 'rejected').length + console.log( + `${tag} complete: ${results.length - failed - absent.length} purged, ${absent.length} absent, ` + + `${failed} failed | ${timings.format()} | total=${timings.since()}ms` + ) + logAbsent(tag, absent) })() ) return { ok: true, requestId, + deliveryId, navChanged, - manifest: { - added: addedPaths, - removed: removedPaths, - metaChanged: metaChangedPaths, - }, + manifest: { upserted: changes.upserted, removed: changes.removed }, + routes: routesBreakdown(byReason), } }) + +/** One log line per purged path, grouped by reason. */ +function logBreakdown(tag: string, byReason: Map>): void { + for (const reason of REASON_ORDER) { + const paths = byReason.get(reason) + if (!paths?.size) continue + + const sorted = [...paths].sort() + for (const path of sorted.slice(0, MAX_LOGGED_PATHS_PER_REASON)) { + console.log(`${tag} ${reason}\t${path}`) + } + if (sorted.length > MAX_LOGGED_PATHS_PER_REASON) { + console.log(`${tag} ${reason}\t... (${sorted.length} total)`) + } + } +} + +/** One log line per absent path — expected to be empty. */ +function logAbsent(tag: string, absent: string[]): void { + for (const path of [...absent].sort()) { + console.log(`${tag} absent\t${path}`) + } +} + +/** Route counts by reason. */ +function routesBreakdown(byReason: Map>): { total: number } & Partial> { + const counts: Partial> = {} + for (const [reason, paths] of byReason) counts[reason] = paths.size + + const total = Object.values(counts).reduce((sum, count) => sum + (count ?? 0), 0) + return { total, ...counts } +} + +/** `Promise.allSettled` over `items`, at most `size` in flight. */ +async function settleInBatches( + items: T[], + size: number, + fn: (item: T) => Promise +): Promise[]> { + const results: PromiseSettledResult[] = [] + for (let i = 0; i < items.length; i += size) { + // Not `.map(fn)` — `map` passes the index, which lands in the callee's optional parameter. + results.push(...(await Promise.allSettled(items.slice(i, i + size).map((item) => fn(item))))) + } + return results +} diff --git a/server/utils/cache.ts b/server/utils/cache.ts index 2dae593..9c686e1 100644 --- a/server/utils/cache.ts +++ b/server/utils/cache.ts @@ -17,7 +17,7 @@ function cacheAvailable(): boolean { * Bump when content parser/plugin configuration, relevant parser dependencies, or cached derived * data changes. Keeping this explicit lets unrelated deployments reuse immutable content artifacts. */ -export const CONTENT_PARSER_VERSION = 'v2' +export const CONTENT_PARSER_VERSION = 'v3' /** Per-parser-version, per-content-SHA driver backing comark's manifest and parsed bodies. */ export function cacheDriver(sha: string): Driver { diff --git a/server/utils/content.ts b/server/utils/content.ts index af9991b..9f4d01c 100644 --- a/server/utils/content.ts +++ b/server/utils/content.ts @@ -6,11 +6,14 @@ import security from 'comark/plugins/security' import emoji from 'comark/plugins/emoji' import toc from 'comark/plugins/toc' import mermaid from 'comark/plugins/mermaid' +import markdown from 'comark-content/plugins/markdown' import yaml from 'comark-content/plugins/yaml' import tracingOtel from 'comark-content/plugins/tracing/otel' import { contentTracer } from './tracer.ts' import { geistTheme } from '../../utils/geist-theme.ts' +const DEFAULT_LISTING_FIELDS = ['title', 'description', 'navigation', 'icon', 'layout'] + // Rebuilt only when the head advances (see `getProdContent`). Holds the *promise*, not the instance: the // assignment lands after the await, so two requests on a cold instance would each build a CMS. let content: Promise | undefined @@ -28,26 +31,28 @@ const comarkPlugins = [ ] /** - * Create a new content instance reading content at `ref` (a commit SHA or branch). `remote` forces the - * GitHub source, `cache` overrides comark's (in-memory by default), `watch` is dev file watching. + * Create a new content instance reading content at `ref` (a commit SHA or branch). + * - `remote` forces the GitHub source + * - `cache` overrides comark's (in-memory by default) + * - `basePath` is the base path for the content instance + * - `watch` is dev file watching */ export async function createSourceContent( ref: string, opts: { remote?: boolean; cache?: CacheOptions; basePath?: string; watch?: boolean } = {} ) { - // A no-op unless the consumer shadows it from their own `server/utils/`. Re-typed as the layer's own - // options: a consumer's hook is declared against the wide `ContentOptions`, and letting that widen the - // argument would erase the source and plugin types `comarkContent` infers from the literal. const tracer = contentTracer() + const listingFields = useRuntimeConfig().docs.listingFields ?? DEFAULT_LISTING_FIELDS const instance = comarkContent({ - markdown: { - plugins: comarkPlugins, - }, sources: { content: contentSource(ref, { remote: opts.remote }), }, plugins: [ - yaml(), // enable .navigation.yml to be detected + markdown({ + comark: { plugins: comarkPlugins }, + listingFields, + }), + yaml({ listingFields }), tracer && tracingOtel({ tracer }), ], cache: opts.cache, @@ -69,12 +74,17 @@ export async function createSourceContent( } /** - * Fully parse and persist the snapshot artifact into this instance's per-SHA cache. + * Fully parse and persist every source's snapshot artifact into this instance's per-SHA cache, so + * the next reader (a fresh instance sharing the same cache namespace) pays a cache read instead of + * re-parsing from GitHub. `snapshot()` defaults to `fresh: true` — it re-parses and persists. */ -export async function warmSnapshot(content: ComarkContent): Promise { +export async function warmArtifacts(content: ComarkContent): Promise { await content.init({ partial: false }) - const artifact = await content.cache.snapshot('content') - console.log(`[content] snapshot artifact ${artifact ? `${artifact.size} bytes` : 'not produced'}`) + for (const source of content.manifest.sources) { + const artifact = await content.cache.snapshot(source) + if (artifact) console.log(`[content] snapshot artifact "${source}" ${artifact.size} bytes`) + else console.warn(`[content] no snapshot artifact produced for source "${source}"`) + } } diff --git a/server/utils/github.ts b/server/utils/github.ts index eb995a5..a600803 100644 --- a/server/utils/github.ts +++ b/server/utils/github.ts @@ -13,6 +13,7 @@ export interface GitHubPushPayload { before?: string commits?: GitHubCommit[] head_commit?: GitHubCommit & { id?: string } + repository?: { full_name?: string } } /** Constant-time string comparison. */ diff --git a/server/utils/paths.ts b/server/utils/paths.ts index ae8f710..832fab1 100644 --- a/server/utils/paths.ts +++ b/server/utils/paths.ts @@ -2,54 +2,3 @@ export function contentPrefix(): string { return `${useRuntimeConfig().docs.contentDir.replace(/\/$/, '')}/` } - -/** Whether a GitHub repo path is a content markdown file. */ -export function isContentMd(path: string): boolean { - return path.startsWith(contentPrefix()) && path.toLowerCase().endsWith('.md') -} - -/** Whether a GitHub repo path is a navigation config file (`.navigation.yml` / `.json`). */ -export function isNavConfig(path: string): boolean { - return path.startsWith(contentPrefix()) && /\.navigation\.(?:ya?ml|json)$/i.test(path) -} - -/** - * Parse a content repo path into route segments (`1.getting-started/2.intro.md` → - * `['getting-started', 'intro']`). `isIndex` covers both `index.md` and `index/index.md`. - */ -export function slugFromPath(path: string): { isIndex: boolean; segments: string[] } | null { - const prefix = contentPrefix() - if (!path.startsWith(prefix) || !path.toLowerCase().endsWith('.md')) return null - - const relative = path.slice(prefix.length, -3) - const segments = relative.split('/').map((s) => s.replace(/^\d+\./, '')) - const last = segments[segments.length - 1] - const isIndex = last === 'index' - if (isIndex) segments.pop() - return { isIndex, segments } -} - -/** Frontend page route (e.g. `1.getting-started/2.intro.md` → `/getting-started/intro`, root → `/`). */ -export function pageUrlForPath(path: string): string | null { - const result = slugFromPath(path) - if (!result) return null - const { isIndex, segments } = result - if (isIndex && segments.length === 0) return '/' - return `/${segments.join('/')}` -} - -/** Raw markdown route — the only per-file route that stays cached, as `/api/pages` is served live. */ -export function rawUrlForPath(path: string): string | null { - const result = slugFromPath(path) - if (!result) return null - - const { isIndex, segments } = result - if (isIndex && segments.length === 0) return '/raw/index.md' - return `/raw/${segments.join('/')}.md` -} - -/** Nuxt payload route for a frontend page route */ -export function payloadUrlForRoute(route: string, buildId?: string): string { - const path = `${route === '/' ? '' : route}/_payload.json` - return buildId ? `${path}?${buildId}` : path -} diff --git a/server/utils/timing.ts b/server/utils/timing.ts new file mode 100644 index 0000000..17a4cce --- /dev/null +++ b/server/utils/timing.ts @@ -0,0 +1,29 @@ +/** Named phase timings for one revalidate webhook run. */ +export interface Timings { + /** Time a sync or async `fn` under `label`; records its duration and returns its result. */ + time(label: string, fn: () => T | Promise): Promise + /** `label=123ms label2=45ms`, in recorded order — for one log line. */ + format(): string + /** ms since this recorder was created — spans the sync response and the background `waitUntil` phase. */ + since(): number +} + +export function createTimings(): Timings { + const start = performance.now() + const entries: { label: string; ms: number }[] = [] + + async function time(label: string, fn: () => T | Promise): Promise { + const phaseStart = performance.now() + try { + return await fn() + } finally { + entries.push({ label, ms: Math.round(performance.now() - phaseStart) }) + } + } + + function format(): string { + return entries.map(({ label, ms }) => `${label}=${ms}ms`).join(' ') + } + + return { time, format, since: () => Math.round(performance.now() - start) } +} diff --git a/server/utils/webhook.ts b/server/utils/webhook.ts new file mode 100644 index 0000000..b68bf66 --- /dev/null +++ b/server/utils/webhook.ts @@ -0,0 +1,117 @@ +import type { ContentListFile } from 'comark-content' +import type { GitHubCommit } from './github' +import { hashManifestItem } from './json' + +/** How a push changed the content source, already filtered to `contentDir`. */ +export interface ContentChanges { + /** Manifest keys (`content/`) of files added or modified. */ + upserted: string[] + /** Manifest keys of files removed — only the previous manifest can resolve their paths. */ + removed: string[] + /** A `.navigation.*` file changed, so the tree changed regardless of which pages did. */ + navTouched: boolean +} + +/** Files the content source can actually serve — matches the parsers installed in `content.ts`. */ +const CONTENT_EXTENSIONS = ['.md', '.yml', '.yaml', '.json'] + +/** The manifest's hardcoded source name (see `contentSource()` in `content.ts`). */ +const SOURCE_NAME = 'content' + +/** + * A push's changed content files, named by their manifest key (`content/`) — the + * reverse of `meta.key`, so a diff against `manifest.items` doesn't need to re-derive file → URL + * mappings that comark already owns. + */ +export function changesForPush(contentDir: string, commits: GitHubCommit[]): ContentChanges { + const upserted = new Set() + const removed = new Set() + let navTouched = false + + const consider = (file: string, into: Set) => { + const key = manifestKeyFor(file, contentDir) + if (!key) return + + if (isNavConfigFile(file)) navTouched = true + else into.add(key) + } + + for (const commit of commits) { + for (const file of commit.added ?? []) consider(file, upserted) + for (const file of commit.modified ?? []) consider(file, upserted) + for (const file of commit.removed ?? []) consider(file, removed) + } + + // A path removed and re-added in the same push is an upsert, not a removal. + for (const key of upserted) removed.delete(key) + + return { upserted: [...upserted], removed: [...removed], navTouched } +} + +/** Repo-relative path → its key in the manifest, or `null` when it can't be a content file. */ +function manifestKeyFor(file: string, contentDir: string): string | null { + const dir = contentDir.replace(/^\/+|\/+$/g, '') + const prefix = dir ? `${dir}/` : '' + + if (prefix && !file.startsWith(prefix)) return null + if (!CONTENT_EXTENSIONS.some((ext) => file.toLowerCase().endsWith(ext))) return null + + return `${SOURCE_NAME}/${file.slice(prefix.length)}` +} + +/** Directory configuration (`.navigation.yml`), which contributes to the tree rather than a page. */ +function isNavConfigFile(file: string): boolean { + return /\.navigation\.(?:ya?ml|json)$/i.test(file) +} + +/** + * The payload URL a client-side navigation fetches for `path` + */ +export function payloadUrlForPage(path: string, buildId?: string): string { + const base = path === '/' ? '/_payload.json' : `${path.replace(/\/$/, '')}/_payload.json` + return buildId ? `${base}?_b=${buildId}` : base +} + +/** `content/` (a manifest key) → page path, the reverse of what the path-keyed manifest gives. */ +export function indexByFileKey(items: Record): Map { + const index = new Map() + for (const item of Object.values(items)) index.set(item.meta.key, item.path) + return index +} + +/** + * Which pages a push changed, and whether the tree itself moved. + */ +export function diffContent( + changes: ContentChanges, + before: Record, + after: Record +): { pagePaths: string[]; navChanged: boolean } { + const pagePaths = new Set() + + const afterByKey = indexByFileKey(after) + const beforeByKey = indexByFileKey(before) + + for (const key of changes.upserted) { + const path = afterByKey.get(key) + if (path) pagePaths.add(path) + } + for (const key of changes.removed) { + const path = beforeByKey.get(key) + if (path) pagePaths.add(path) + } + + const beforeKeys = Object.keys(before) + const afterKeys = Object.keys(after) + const navChanged = + beforeKeys.length !== afterKeys.length || + afterKeys.some((key) => !before[key]) || + // Listing fields (title, description, icon, `navigation`…) are what the tree renders from. + afterKeys.some((key) => before[key] && !sameListing(before[key]!, after[key]!)) + + return { pagePaths: [...pagePaths], navChanged } +} + +function sameListing(a: ContentListFile, b: ContentListFile): boolean { + return a.path === b.path && hashManifestItem(a) === hashManifestItem(b) +} diff --git a/test/content-contract.test.ts b/test/content-contract.test.ts index d8b2091..e4e59fb 100644 --- a/test/content-contract.test.ts +++ b/test/content-contract.test.ts @@ -81,7 +81,7 @@ describe('comark-content contract', () => { const content = createFixtureContent() await content.init(full) - // `warmSnapshot` logs `artifact.size`, so a shape change there degrades to "not produced". + // `warmArtifacts` logs `artifact.size`, so a shape change there degrades to "not produced". const artifact = await content.cache.snapshot('content') expect(artifact).not.toBeNull() expect(artifact!.size).toBeGreaterThan(0) diff --git a/test/paths.test.ts b/test/paths.test.ts index e8c96bb..36f36e9 100644 --- a/test/paths.test.ts +++ b/test/paths.test.ts @@ -1,14 +1,6 @@ import { afterEach, describe, expect, it } from 'vitest' import { resetRuntimeConfig, setRuntimeConfig } from './setup' -import { - contentPrefix, - isContentMd, - isNavConfig, - pageUrlForPath, - payloadUrlForRoute, - rawUrlForPath, - slugFromPath, -} from '../server/utils/paths' +import { contentPrefix } from '../server/utils/paths' afterEach(resetRuntimeConfig) @@ -19,79 +11,3 @@ describe('contentPrefix', () => { expect(contentPrefix()).toBe('docs/content/') }) }) - -describe('isContentMd', () => { - it('matches markdown under the content dir only', () => { - expect(isContentMd('content/index.md')).toBe(true) - expect(isContentMd('content/1.guide/2.intro.MD')).toBe(true) - expect(isContentMd('content/.navigation.yml')).toBe(false) - expect(isContentMd('README.md')).toBe(false) - expect(isContentMd('other/content/x.md')).toBe(false) - }) - - it('follows a nested content dir', () => { - setRuntimeConfig({ contentDir: 'docs/content' }) - expect(isContentMd('docs/content/x.md')).toBe(true) - expect(isContentMd('content/x.md')).toBe(false) - }) -}) - -describe('isNavConfig', () => { - it('matches the yml/yaml/json navigation files', () => { - expect(isNavConfig('content/1.guide/.navigation.yml')).toBe(true) - expect(isNavConfig('content/.navigation.yaml')).toBe(true) - expect(isNavConfig('content/.navigation.json')).toBe(true) - expect(isNavConfig('content/navigation.yml')).toBe(false) - expect(isNavConfig('content/x.md')).toBe(false) - }) -}) - -describe('slugFromPath', () => { - it('strips numeric ordering prefixes at every level', () => { - expect(slugFromPath('content/1.getting-started/2.intro.md')).toEqual({ - isIndex: false, - segments: ['getting-started', 'intro'], - }) - }) - - it('treats index files as their parent', () => { - expect(slugFromPath('content/index.md')).toEqual({ isIndex: true, segments: [] }) - expect(slugFromPath('content/1.guide/index.md')).toEqual({ isIndex: true, segments: ['guide'] }) - }) - - it('returns null for anything outside the content dir', () => { - expect(slugFromPath('README.md')).toBeNull() - expect(slugFromPath('content/.navigation.yml')).toBeNull() - }) -}) - -describe('pageUrlForPath', () => { - it('maps content files to page routes', () => { - expect(pageUrlForPath('content/index.md')).toBe('/') - expect(pageUrlForPath('content/1.guide/index.md')).toBe('/guide') - expect(pageUrlForPath('content/1.guide/2.intro.md')).toBe('/guide/intro') - expect(pageUrlForPath('content/x.yml')).toBeNull() - }) -}) - -describe('rawUrlForPath', () => { - it('maps content files to their raw markdown mirror', () => { - expect(rawUrlForPath('content/index.md')).toBe('/raw/index.md') - expect(rawUrlForPath('content/1.guide/2.intro.md')).toBe('/raw/guide/intro.md') - expect(rawUrlForPath('content/1.guide/index.md')).toBe('/raw/guide.md') - expect(rawUrlForPath('README.md')).toBeNull() - }) -}) - -describe('payloadUrlForRoute', () => { - it('builds the payload URL the browser actually requests', () => { - expect(payloadUrlForRoute('/')).toBe('/_payload.json') - expect(payloadUrlForRoute('/guide/intro')).toBe('/guide/intro/_payload.json') - }) - - it('appends the build id when there is one', () => { - // The webhook has to purge the exact keyed URL, not the bare path. - expect(payloadUrlForRoute('/guide', 'abc123')).toBe('/guide/_payload.json?abc123') - expect(payloadUrlForRoute('/', 'abc123')).toBe('/_payload.json?abc123') - }) -}) diff --git a/test/webhook.test.ts b/test/webhook.test.ts new file mode 100644 index 0000000..16abc6f --- /dev/null +++ b/test/webhook.test.ts @@ -0,0 +1,120 @@ +import { describe, expect, it } from 'vitest' +import type { ContentListFile } from 'comark-content' +import type { GitHubCommit } from '../server/utils/github' +import { changesForPush, diffContent, indexByFileKey, payloadUrlForPage } from '../server/utils/webhook' +import { rawUrlForPage } from '../server/utils/markdown' + +const commit = (partial: GitHubCommit): GitHubCommit => partial + +describe('changesForPush', () => { + it('classifies added/modified/removed content files, keyed by their manifest key', () => { + const commits = [ + commit({ + added: ['content/1.guide/2.intro.md'], + modified: ['content/index.md'], + removed: ['content/old.md'], + }), + ] + expect(changesForPush('content', commits)).toEqual({ + upserted: ['content/1.guide/2.intro.md', 'content/index.md'], + removed: ['content/old.md'], + navTouched: false, + }) + }) + + it('ignores files outside the content dir', () => { + expect(changesForPush('content', [commit({ modified: ['README.md', 'other/content/x.md'] })])).toEqual({ + upserted: [], + removed: [], + navTouched: false, + }) + }) + + it('follows a nested content dir', () => { + expect(changesForPush('docs/content', [commit({ modified: ['docs/content/x.md'] })])).toEqual({ + upserted: ['content/x.md'], + removed: [], + navTouched: false, + }) + }) + + it('covers every parser extension, not just markdown', () => { + const commits = [commit({ added: ['content/data.yml', 'content/data.yaml', 'content/data.json'] })] + expect(changesForPush('content', commits).upserted).toEqual([ + 'content/data.yml', + 'content/data.yaml', + 'content/data.json', + ]) + }) + + it('flags a navigation config file instead of collecting it', () => { + const commits = [commit({ modified: ['content/1.guide/.navigation.yml'] })] + expect(changesForPush('content', commits)).toEqual({ upserted: [], removed: [], navTouched: true }) + }) + + it('treats a path removed and re-added in the same push as an upsert', () => { + const commits = [commit({ added: ['content/index.md'], removed: ['content/index.md'] })] + expect(changesForPush('content', commits)).toEqual({ + upserted: ['content/index.md'], + removed: [], + navTouched: false, + }) + }) +}) + +describe('payloadUrlForPage', () => { + it('matches the `_b` query param Nuxt requests (`nuxt/dist/app/composables/payload.js`)', () => { + expect(payloadUrlForPage('/')).toBe('/_payload.json') + expect(payloadUrlForPage('/guide/intro')).toBe('/guide/intro/_payload.json') + expect(payloadUrlForPage('/guide', 'abc123')).toBe('/guide/_payload.json?_b=abc123') + expect(payloadUrlForPage('/', 'abc123')).toBe('/_payload.json?_b=abc123') + }) +}) + +describe('rawUrlForPage', () => { + it('is the exact inverse of pagePathFromRawSlug', () => { + expect(rawUrlForPage('/')).toBe('/raw/index.md') + expect(rawUrlForPage('/guide/intro')).toBe('/raw/guide/intro.md') + }) +}) + +describe('indexByFileKey', () => { + it('maps a manifest key back to its page path', () => { + const items: Record = { + '/guide/intro': { path: '/guide/intro', data: {}, meta: { key: 'content/1.guide/2.intro.md' } } as never, + } + expect(indexByFileKey(items).get('content/1.guide/2.intro.md')).toBe('/guide/intro') + }) +}) + +describe('diffContent', () => { + const file = (path: string, key: string, data: Record = {}): ContentListFile => + ({ path, data, meta: { key } }) as never + + it('resolves upserted/removed manifest keys to page paths', () => { + const before = { '/old': file('/old', 'content/old.md') } + const after = { '/guide/intro': file('/guide/intro', 'content/1.guide/2.intro.md') } + const changes = { upserted: ['content/1.guide/2.intro.md'], removed: ['content/old.md'], navTouched: false } + expect(diffContent(changes, before, after).pagePaths.sort()).toEqual(['/guide/intro', '/old']) + }) + + it('flags navChanged when a page is added or removed', () => { + const before = { '/a': file('/a', 'content/a.md') } + const after = { '/a': file('/a', 'content/a.md'), '/b': file('/b', 'content/b.md') } + expect(diffContent({ upserted: [], removed: [], navTouched: false }, before, after).navChanged).toBe(true) + }) + + it('flags navChanged when listing data changes, even with the same page set', () => { + const before = { '/a': file('/a', 'content/a.md', { title: 'A' }) } + const after = { '/a': file('/a', 'content/a.md', { title: 'B' }) } + expect(diffContent({ upserted: [], removed: [], navTouched: false }, before, after).navChanged).toBe(true) + }) + + it('does not flag navChanged when nothing listing-relevant moved', () => { + const before = { '/a': file('/a', 'content/a.md', { title: 'A' }) } + const after = { '/a': file('/a', 'content/a.md', { title: 'A' }) } + expect(diffContent({ upserted: ['content/a.md'], removed: [], navTouched: false }, before, after).navChanged).toBe( + false + ) + }) +}) From b5bc5ca8abc37af9cf3320c9c8fa0bae7768d54f Mon Sep 17 00:00:00 2001 From: Baptiste Leproux Date: Fri, 4 Sep 2026 12:42:22 +0200 Subject: [PATCH 17/20] try warm with function invocation --- package.json | 2 +- pnpm-lock.yaml | 10 ++--- pnpm-workspace.yaml | 2 +- server/api/revalidate.post.ts | 78 ++++++++++++++++++----------------- server/utils/content.ts | 20 --------- test/content-contract.test.ts | 4 -- 6 files changed, 47 insertions(+), 69 deletions(-) diff --git a/package.json b/package.json index 4fd9cde..3757f6c 100644 --- a/package.json +++ b/package.json @@ -59,7 +59,7 @@ "ai": "^7.0.77", "beautiful-mermaid": "^1.1.3", "comark": "^0.6.2", - "comark-content": "https://pkg.pr.new/comark-content@baefd4d", + "comark-content": "https://pkg.pr.new/comark-content@63ffc3f", "defu": "^6.1.7", "exsolve": "^1.1.1", "js-yaml": "^5.3.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bd9aab8..01f1fd0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -87,8 +87,8 @@ importers: specifier: ^0.6.2 version: 0.6.2(beautiful-mermaid@1.1.3)(rangi@2.2.0)(shiki@4.4.3) comark-content: - specifier: https://pkg.pr.new/comark-content@baefd4d - version: https://pkg.pr.new/comark-content@baefd4d(@vercel/functions@3.9.5(ws@8.21.3))(beautiful-mermaid@1.1.3)(db0@0.3.4)(ioredis@5.11.1(supports-color@10.2.2))(rangi@2.2.0)(shiki@4.4.3) + specifier: https://pkg.pr.new/comark-content@63ffc3f + version: https://pkg.pr.new/comark-content@63ffc3f(@vercel/functions@3.9.5(ws@8.21.3))(beautiful-mermaid@1.1.3)(db0@0.3.4)(ioredis@5.11.1(supports-color@10.2.2))(rangi@2.2.0)(shiki@4.4.3) defu: specifier: ^6.1.7 version: 6.1.7 @@ -3289,8 +3289,8 @@ packages: colortranslator@5.0.0: resolution: {integrity: sha512-Z3UPUKasUVDFCDYAjP2fmlVRf1jFHJv1izAmPjiOa0OCIw1W7iC8PZ2GsoDa8uZv+mKyWopxxStT9q05+27h7w==} - comark-content@https://pkg.pr.new/comark-content@baefd4d: - resolution: {integrity: sha512-7E/3OIIKPBI5XJ3s/aEtptAP49Of9W/EQVjzsbGnAZgCxvtlpqeSq1l+8GUbMDYqNy20rLWXlk7JdXTd8rsj/g==, tarball: https://pkg.pr.new/comark-content@baefd4d} + comark-content@https://pkg.pr.new/comark-content@63ffc3f: + resolution: {integrity: sha512-F0jDyRaJqfASydFGik1UpAlfqa9SmrDV+Sj2QfjoO6vJHtH8xZiAf0XSmOFfPcGI5QMRKnrqqyZy1ei5RJ6IWQ==, tarball: https://pkg.pr.new/comark-content@63ffc3f} version: 0.3.0 hasBin: true @@ -9951,7 +9951,7 @@ snapshots: colortranslator@5.0.0: {} - comark-content@https://pkg.pr.new/comark-content@baefd4d(@vercel/functions@3.9.5(ws@8.21.3))(beautiful-mermaid@1.1.3)(db0@0.3.4)(ioredis@5.11.1(supports-color@10.2.2))(rangi@2.2.0)(shiki@4.4.3): + comark-content@https://pkg.pr.new/comark-content@63ffc3f(@vercel/functions@3.9.5(ws@8.21.3))(beautiful-mermaid@1.1.3)(db0@0.3.4)(ioredis@5.11.1(supports-color@10.2.2))(rangi@2.2.0)(shiki@4.4.3): dependencies: citty: 0.2.2 comark: 0.6.2(beautiful-mermaid@1.1.3)(rangi@2.2.0)(shiki@4.4.3) diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 669fb7c..8a4e480 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -17,7 +17,7 @@ minimumReleaseAgeExclude: - '@comark/nuxt@0.6.0 || 0.6.1 || 0.6.2' - '@comark/vue@0.6.0 || 0.6.1 || 0.6.2' - comark@0.6.0 || 0.6.1 || 0.6.2 - - comark-content@0.3.0 + - comark-content@0.4.0 overrides: # Keep the workspace on a single h3 major (v1), matching comark-content. diff --git a/server/api/revalidate.post.ts b/server/api/revalidate.post.ts index 9ec8c13..4d3ff88 100644 --- a/server/api/revalidate.post.ts +++ b/server/api/revalidate.post.ts @@ -6,10 +6,10 @@ import { waitUntil } from '@vercel/functions' const REVALIDATE_CONCURRENCY = 8 /** Why a route was purged — one value per `addPath` call site below. */ -type PurgeReason = 'page' | 'payload' | 'raw' | 'nav' | 'artifact' | 'global' +type PurgeReason = 'page' | 'payload' | 'raw' | 'nav' | 'global' /** Display/response order. */ -const REASON_ORDER: PurgeReason[] = ['page', 'payload', 'raw', 'nav', 'artifact', 'global'] +const REASON_ORDER: PurgeReason[] = ['page', 'payload', 'raw', 'nav', 'global'] /** `nav` is the only unbounded reason (the whole site can be thousands of pages) — cap what the log prints. */ const MAX_LOGGED_PATHS_PER_REASON = 5 @@ -82,7 +82,7 @@ export default defineEventHandler(async (event) => { } // Diffed against the live prod instance, already warm - const { headSha, freshContent, newItems, pagePaths, navChanged } = await timings.time('rebuild', async () => { + const { headSha, newItems, pagePaths, navChanged } = await timings.time('rebuild', async () => { const outdated = await getProdContent() await outdated.init() const oldItems = { ...(await outdated.manifest()).items } @@ -90,10 +90,11 @@ export default defineEventHandler(async (event) => { // Refresh the content SHA const headSha = await resolveContentSha(branch, contentDir, { refresh: true }) const freshContent = await createSourceContent(headSha, { cache: { driver: cacheDriver(headSha) } }) + // Partial init: the diff needs the index (cache will be reused by the warm below) await freshContent.init() const newItems = (await freshContent.manifest()).items - return { headSha, freshContent, newItems, ...diffContent(changes, oldItems, newItems) } + return { headSha, newItems, ...diffContent(changes, oldItems, newItems) } }) for (const path of pagePaths) { @@ -114,11 +115,7 @@ export default defineEventHandler(async (event) => { // Per-commit search artifacts (ISR, immutable). const artifactBase = `/api/content/blob/${headSha}` - const manifestPath = `${artifactBase}/manifest.json` - const snapshotPath = `${artifactBase}/snapshot/${DEFAULT_CONTENT_NAME}.json` - addPath('artifact', manifestPath) - addPath('artifact', snapshotPath) - const artifactPaths = new Set([manifestPath, snapshotPath]) + const pathsToWarm = [`${artifactBase}/manifest.json`, `${artifactBase}/snapshot/${DEFAULT_CONTENT_NAME}.json`] // Any content change invalidates the global indexes: each is rebuilt from the whole tree. for (const path of ['/llms.txt', '/llms-full.txt', '/rss.xml', '/sitemap.xml']) { @@ -128,53 +125,57 @@ export default defineEventHandler(async (event) => { console.log( `${tag} navChanged=${navChanged} ` + `(upserted=${changes.upserted.length}, removed=${changes.removed.length}, navConfig=${changes.navTouched}) | ` + - `${pathsToPurge.size} route(s) | ${timings.format()}` + `${pathsToPurge.size} to purge, ${pathsToWarm.length} to warm | ${timings.format()}` ) logBreakdown(tag, byReason) + for (const path of pathsToWarm) console.log(`${tag} warm\t${path}`) // Dev has no ISR cache to purge if (import.meta.dev) { - return { ok: true, requestId, deliveryId, navChanged, routes: routesBreakdown(byReason), dev: true } + return { + ok: true, + requestId, + deliveryId, + navChanged, + routes: routesBreakdown(byReason), + warm: pathsToWarm.length, + dev: true, + } } const protocol = getRequestProtocol(event) const host = getRequestHost(event, { xForwardedHost: true }) const baseURL = `${protocol}://${host}` - // `x-prerender-revalidate` purges the ISR cache entry for the URL being fetched. - const headers: Record = { 'x-prerender-revalidate': bypassToken } // Lets the deployment call itself while Vercel Authentication is on (preview deploys). - if (process.env.VERCEL_AUTOMATION_BYPASS_SECRET) { - headers['x-vercel-protection-bypass'] = process.env.VERCEL_AUTOMATION_BYPASS_SECRET - } + const selfCall: Record = process.env.VERCEL_AUTOMATION_BYPASS_SECRET + ? { 'x-vercel-protection-bypass': process.env.VERCEL_AUTOMATION_BYPASS_SECRET } + : {} + + // `x-prerender-revalidate` regenerates the ISR entry for the URL being fetched. + const purgeHeaders = { ...selfCall, 'x-prerender-revalidate': bypassToken } // Vercel's native waitUntil, not Nitro's `event.waitUntil` — that one can orphan async work here. waitUntil( (async () => { const absent: string[] = [] - // Warms the per-SHA body cache and persists the snapshot artifact the fetches below read. - await timings.time('warm', () => - warmArtifacts(freshContent).catch((error) => { - console.error(`${tag} artifact warm failed`, error?.message ?? error) - }) - ) - - const revalidate = (path: string) => - $fetch(path, { baseURL, method: 'GET', headers }).catch((error) => { - console.error(`${tag} ✗ ${path}`, error?.statusCode ?? error?.message ?? error) - throw error - }) - - const artifactResults = await timings.time('artifact', () => - settleInBatches([...artifactPaths], REVALIDATE_CONCURRENCY, revalidate) + // The warm runs first: + // - ISR cache manifest and snapshot for the new SHA + // - Cache parsed items for the pages to purge and re-render + const warmResults = await timings.time('warm', () => + settleInBatches(pathsToWarm, REVALIDATE_CONCURRENCY, (path) => + $fetch(path, { baseURL, method: 'GET', headers: selfCall }).catch((error) => { + console.error(`${tag} ✗ ${path}`, error?.statusCode ?? error?.message ?? error) + throw error + }) + ) ) - const pagePathsToPurge = [...pathsToPurge].filter((path) => !artifactPaths.has(path)) - const pageResults = await timings.time('purge', () => - settleInBatches(pagePathsToPurge, REVALIDATE_CONCURRENCY, (path) => - $fetch(path, { baseURL, method: 'GET', headers }).catch((error) => { + const purgeResults = await timings.time('purge', () => + settleInBatches([...pathsToPurge], REVALIDATE_CONCURRENCY, (path) => + $fetch(path, { baseURL, method: 'GET', headers: purgeHeaders }).catch((error) => { // Content with no page of its own (e.g. a partial) has nothing cached to purge. if (error?.statusCode === 404) { absent.push(path) @@ -186,10 +187,11 @@ export default defineEventHandler(async (event) => { ) ) - const results = [...artifactResults, ...pageResults] - const failed = results.filter((r) => r.status === 'rejected').length + const warmed = warmResults.filter((r) => r.status === 'fulfilled').length + const failed = [...warmResults, ...purgeResults].filter((r) => r.status === 'rejected').length + const purged = purgeResults.filter((r) => r.status === 'fulfilled').length - absent.length console.log( - `${tag} complete: ${results.length - failed - absent.length} purged, ${absent.length} absent, ` + + `${tag} complete: ${warmed} warmed, ${purged} purged, ${absent.length} absent, ` + `${failed} failed | ${timings.format()} | total=${timings.since()}ms` ) logAbsent(tag, absent) diff --git a/server/utils/content.ts b/server/utils/content.ts index 8e8747e..04b7003 100644 --- a/server/utils/content.ts +++ b/server/utils/content.ts @@ -86,26 +86,6 @@ export async function createSourceContent( return instance } -/** - * Fully parse the content into this instance's per-SHA cache, then persist the served manifest and - * snapshot artifacts so the next reader (a fresh instance sharing the same cache namespace, or the - * search worker's fetch) pays a single cache read instead of a rebuild. - * - * comark-content 0.4 keeps artifact building internal (`ArtifactStore`, reachable only through - * `content.handler()`) — there's no public equivalent of 0.3's `cache.snapshot(source)`. Self-requesting - * the instance's own handler hits the same build-then-persist path the browser's first fetch would, - * just warmed ahead of time. - */ -export async function warmArtifacts(content: DocsContent): Promise { - await content.init({ partial: false }) - const basePath = content.options.basePath ?? '/api/content' - for (const section of ['manifest', `snapshot/${content.name}`]) { - const response = await content.handler(new Request(`http://local${basePath}/${section}`)) - if (response.ok) console.log(`[content] warmed "${section}" artifact`) - else console.warn(`[content] failed to warm "${section}" artifact: ${response.status}`) - } -} - // The content commit this instance is pinned to. Pinning GitHub reads to an immutable SHA rather // than the branch name bypasses the stale `raw.githubusercontent.com/` CDN. let headRef: string | undefined diff --git a/test/content-contract.test.ts b/test/content-contract.test.ts index b45272c..edd805c 100644 --- a/test/content-contract.test.ts +++ b/test/content-contract.test.ts @@ -84,10 +84,6 @@ describe('comark-content contract', () => { }) it('serves the manifest and snapshot artifacts through content.handler', async () => { - // 0.4 has no public equivalent of 0.3's `cache.snapshot(source)` — `warmArtifacts()` - // (server/utils/content.ts) warms this same route by self-requesting the handler. That's the - // mechanism this test pins: a shape change here is a shape change to what the browser search - // worker fetches. const content = createFixtureContent() await content.init(full) From 8e659421a6060faa9cbbae4bac19bf197cea8898 Mon Sep 17 00:00:00 2001 From: Baptiste Leproux Date: Fri, 4 Sep 2026 18:02:51 +0200 Subject: [PATCH 18/20] feat: built time snapshot --- app/app.config.ts | 2 +- app/components/AssistantChat.vue | 2 +- app/components/landing/LandingHeroDemo.vue | 2 +- app/utils/navigation.ts | 2 +- modules/{config.ts => config/index.ts} | 13 +- .../config/test/config.test.ts | 55 +++++++- .../content-dir.ts => modules/config/utils.ts | 29 +++- .../index.ts} | 2 +- .../test}/markdown-rewrite.test.ts | 2 +- .../markdown-rewrite/utils.ts | 0 modules/snapshot/index.ts | 73 +++++++++++ modules/snapshot/test/snapshot.test.ts | 124 ++++++++++++++++++ modules/snapshot/utils.ts | 79 +++++++++++ server/api/code-explorer/[...path].get.ts | 2 +- server/routes/raw/[...slug].md.get.ts | 2 +- server/utils/content.ts | 52 ++------ server/utils/github.ts | 22 ++-- server/utils/local.ts | 2 +- server/utils/paths.ts | 2 +- test/content-contract.test.ts | 66 +++++++++- test/{geist-theme.test.ts => geist.test.ts} | 2 +- test/git.test.ts | 106 +++++++++------ test/github.test.ts | 29 ++-- test/setup.ts | 2 +- utils/content.ts | 60 +++++++++ utils/{geist-theme.ts => geist.ts} | 0 utils/git.ts | 46 +++++-- utils/github.ts | 36 +++++ utils/meta.ts | 28 ---- utils/{first-leaf.ts => navigation.ts} | 0 30 files changed, 671 insertions(+), 171 deletions(-) rename modules/{config.ts => config/index.ts} (93%) rename test/content-dir.test.ts => modules/config/test/config.test.ts (60%) rename utils/content-dir.ts => modules/config/utils.ts (61%) rename modules/{markdown-rewrite.ts => markdown-rewrite/index.ts} (95%) rename {test => modules/markdown-rewrite/test}/markdown-rewrite.test.ts (99%) rename utils/markdown-rewrite.ts => modules/markdown-rewrite/utils.ts (100%) create mode 100644 modules/snapshot/index.ts create mode 100644 modules/snapshot/test/snapshot.test.ts create mode 100644 modules/snapshot/utils.ts rename test/{geist-theme.test.ts => geist.test.ts} (99%) create mode 100644 utils/content.ts rename utils/{geist-theme.ts => geist.ts} (100%) create mode 100644 utils/github.ts delete mode 100644 utils/meta.ts rename utils/{first-leaf.ts => navigation.ts} (100%) diff --git a/app/app.config.ts b/app/app.config.ts index d9c0554..b90a00f 100644 --- a/app/app.config.ts +++ b/app/app.config.ts @@ -185,7 +185,7 @@ export default defineAppConfig({ // info: 'i-tabler-info-square-rounded-filled', }, }, - // `seo.siteName`, `header.title` and `github.*` are deliberately NOT defaulted here: modules/config.ts seeds + // `seo.siteName`, `header.title` and `github.*` are deliberately NOT defaulted here: modules/config/ seeds // them into `nuxt.options.appConfig`, and app.config values — even empty strings — would win over those. header: { to: '/', diff --git a/app/components/AssistantChat.vue b/app/components/AssistantChat.vue index 4adcc67..591c212 100644 --- a/app/components/AssistantChat.vue +++ b/app/components/AssistantChat.vue @@ -3,7 +3,7 @@ import { DefaultChatTransport, isReasoningUIPart, isTextUIPart, isToolUIPart, ge import { useChat } from '@ai-sdk/vue' import { isPartStreaming, isToolStreaming } from '@nuxt/ui/utils/ai' import rangi from 'comark/plugins/rangi' -import { geistTheme } from '../../utils/geist-theme' +import { geistTheme } from '../../utils/geist' const MAX_INPUT = 1000 diff --git a/app/components/landing/LandingHeroDemo.vue b/app/components/landing/LandingHeroDemo.vue index da3aaef..96cddfa 100644 --- a/app/components/landing/LandingHeroDemo.vue +++ b/app/components/landing/LandingHeroDemo.vue @@ -1,6 +1,6 @@