diff --git a/commitlint.config.js b/commitlint.config.js index 98ee7dfc..d179c690 100644 --- a/commitlint.config.js +++ b/commitlint.config.js @@ -1,3 +1,3 @@ -module.exports = { +export default { extends: ['@commitlint/config-conventional'], } diff --git a/content.config.ts b/content.config.ts index ebeb888b..9b7ad1ad 100644 --- a/content.config.ts +++ b/content.config.ts @@ -8,7 +8,7 @@ import { isDevelopment } from 'std-env' import shiki from 'comark/plugins/shiki' import palenight from 'shiki/themes/material-theme-palenight.mjs' -import { headingIds } from './modules/shared/comark-heading-ids' +import { headingIds } from './modules/shared/comark-heading-ids.ts' /** Absolute path to the blog source directory, as the sources below resolve it. */ export const blogDir = fileURLToPath(new URL('./content/blog', import.meta.url)) diff --git a/eslint.config.mjs b/eslint.config.mjs index 5e78083b..5526aa52 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -12,10 +12,4 @@ export default withNuxt([ '@typescript-eslint/ban-types': 'off', }, }, - { - files: ['*.config.js'], - rules: { - 'no-undef': 'off', - }, - }, ]) diff --git a/modules/atproto/index.ts b/modules/atproto/index.ts index 6634c998..b50128fa 100644 --- a/modules/atproto/index.ts +++ b/modules/atproto/index.ts @@ -11,7 +11,7 @@ import { api } from '@bsky/sdk' import { com } from '@bsky/sdk/lexicons' import { defineNuxtModule, useNuxt } from 'nuxt/kit' -import { hashKey, withCache } from '../shared/build-cache' +import { hashKey, withCache } from '../shared/build-cache.ts' /** * Resolving `handle -> did -> PDS` costs two sequential round-trips before any diff --git a/modules/bsky-comments.ts b/modules/bsky-comments.ts index b6778e50..f3ec9454 100644 --- a/modules/bsky-comments.ts +++ b/modules/bsky-comments.ts @@ -8,7 +8,7 @@ import { api } from '@bsky/sdk' import { app, com } from '@bsky/sdk/lexicons' import { toValue } from 'vue' -import { createBuildCache, hashKey } from './shared/build-cache' +import { createBuildCache, hashKey } from './shared/build-cache.ts' // when I created my Bluesky account - don't judge me for hard coding it! const BLUESKY_ACCOUNT_CREATED = new Date('2023-04-26T05:22:14.855Z') diff --git a/modules/bundle.ts b/modules/bundle.ts index 1db8a364..b1a5d0b5 100644 --- a/modules/bundle.ts +++ b/modules/bundle.ts @@ -25,9 +25,6 @@ export default defineNuxtModule({ nuxt.hook('prerender:routes', routes => { routes.routes.clear() }) - nuxt.hook('nitro:config', config => { - config.prerender ||= {} - config.prerender.crawlLinks = false - }) + nuxt.options.prerender.crawlLinks = false }, }) diff --git a/modules/invites/index.ts b/modules/invites/index.ts index 5f27b43d..4af278af 100644 --- a/modules/invites/index.ts +++ b/modules/invites/index.ts @@ -8,11 +8,10 @@ * to read once the OAuth round-trip lands. */ import { addServerHandler, createResolver, defineNuxtModule } from 'nuxt/kit' -import { defu } from 'defu' -import { useBuildAirspace } from '../shared/airspace' -import { decryptJSON } from '../../server/utils/admin/encryption' -import { withCache } from '../shared/build-cache' +import { useBuildAirspace } from '../shared/airspace.ts' +import { decryptJSON } from '../../server/utils/admin/encryption.ts' +import { withCache } from '../shared/build-cache.ts' /** In dev the (encrypted) invite records are re-read at most hourly. */ const DEV_MAX_AGE = 1000 * 60 * 60 @@ -22,10 +21,6 @@ export default defineNuxtModule({ name: 'invites', }, async setup (_, nuxt) { - nuxt.options.nitro.typescript = defu(nuxt.options.nitro.typescript, { - include: ['../modules/runtime/server/**/*'], - }) - if (nuxt.options._prepare) { nuxt.options.runtimeConfig.invites = { map: {} } return @@ -69,15 +64,12 @@ export default defineNuxtModule({ if (!gitHubClientId || Object.keys(map).length === 0) return - const redirect = nuxt.options.dev - ? '&redirect_uri=http://localhost:3000/auth/github' - : '&redirect_uri=https://roe.dev/auth/github' - - nuxt.options.nitro.routeRules ||= {} for (const slug in map) { - nuxt.options.nitro.routeRules['/' + slug] = { - redirect: `https://github.com/login/oauth/authorize?client_id=${gitHubClientId}${redirect}/${slug}`, - } + addServerHandler({ + route: '/' + slug, + method: 'get', + handler: resolver.resolve('./runtime/server/invite.get'), + }) } addServerHandler({ diff --git a/modules/invites/runtime/server/auth/github/[slug].ts b/modules/invites/runtime/server/auth/github/[slug].ts index 07afa880..d375bf4d 100644 --- a/modules/invites/runtime/server/auth/github/[slug].ts +++ b/modules/invites/runtime/server/auth/github/[slug].ts @@ -1,23 +1,25 @@ +import { createError, defineEventHandler, getQuery, getRouterParam, sendRedirect, useRuntimeConfig } from 'nuxt/server' import type { RuntimeConfig } from 'nuxt/schema' +import { $fetch } from 'ofetch' export default defineEventHandler(async event => { - const config = useRuntimeConfig(event) + const config = useRuntimeConfig() const slug = getRouterParam(event, 'slug') const repo = slug && config.invites?.map?.[slug as keyof RuntimeConfig['invites']['map']] if (!repo) { - throw createError({ statusCode: 404 }) + throw createError({ status: 404 }) } const { code } = getQuery(event) if (!code) { throw createError({ - statusCode: 422, - statusMessage: 'Missing authorisation code.', + status: 422, + statusText: 'Missing authorisation code.', }) } - const { access_token } = await $fetch<{ access_token: string }>( + const { access_token } = await $fetch<{ access_token?: string }>( 'https://github.com/login/oauth/access_token', { method: 'POST', @@ -34,8 +36,8 @@ export default defineEventHandler(async event => { if (!access_token) { throw createError({ - statusCode: 422, - statusMessage: 'Authorisation code invalid.', + status: 422, + statusText: 'Authorisation code invalid.', }) } @@ -48,8 +50,8 @@ export default defineEventHandler(async event => { if (!username) { throw createError({ - statusCode: 422, - statusMessage: 'Access code invalid.', + status: 422, + statusText: 'Access code invalid.', }) } diff --git a/modules/invites/runtime/server/invite.get.ts b/modules/invites/runtime/server/invite.get.ts new file mode 100644 index 00000000..5fb3dc8b --- /dev/null +++ b/modules/invites/runtime/server/invite.get.ts @@ -0,0 +1,18 @@ +import { createError, defineEventHandler, sendRedirect, useRuntimeConfig } from 'nuxt/server' +import type { RuntimeConfig } from 'nuxt/schema' + +const CALLBACK_URL = import.meta.dev ? 'http://localhost:3000/auth/github' : 'https://roe.dev/auth/github' + +export default defineEventHandler(event => { + const config = useRuntimeConfig() + const slug = event.url.pathname.slice(1) + if (!config.invites?.map?.[slug as keyof RuntimeConfig['invites']['map']]) { + throw createError({ status: 404 }) + } + + return sendRedirect( + event, + `https://github.com/login/oauth/authorize?client_id=${config.public.githubClientId}&redirect_uri=${CALLBACK_URL}/${slug}`, + 307, + ) +}) diff --git a/modules/markdown.ts b/modules/markdown.ts index 14a88c36..a44fbd16 100644 --- a/modules/markdown.ts +++ b/modules/markdown.ts @@ -1,17 +1,17 @@ import { join } from 'node:path' import { gzipSync } from 'node:zlib' -import { addTemplate, addTypeTemplate, defineNuxtModule, updateTemplates, useNuxt } from 'nuxt/kit' +import { addServerTemplate, addTemplate, addTypeTemplate, defineNuxtModule, updateTemplates, useNuxt } from 'nuxt/kit' import { generateSourceTypes } from 'comark-content' import type { ContentListFile, FileParsedContext } from 'comark-content' import type { MarkdownDocument } from 'comark' import type { ViteDevServer } from 'vite' -import { blog as blogContent, blogDir, content, page as pageContent } from '../content.config' -import type { ContentMeta } from '../content.config' -import { serialize } from './shared/serialisers' -import { mdCleanHtml, mdInternalLinks, mdStripContainers } from './shared/md-transforms' -import { tidFromDate } from './shared/tid' +import { blog as blogContent, blogDir, content, page as pageContent } from '../content.config.ts' +import type { ContentMeta } from '../content.config.ts' +import { serialize } from './shared/serialisers.ts' +import { mdCleanHtml, mdInternalLinks, mdStripContainers } from './shared/md-transforms.ts' +import { tidFromDate } from './shared/tid.ts' type ContentDocument = ContentListFile, ContentMeta> @@ -289,16 +289,14 @@ export async function getBody () { const manifestPath = join(nuxt.options.buildDir, 'markdown/manifest.json') - nuxt.options.nitro.virtual ||= {} - // in dev the manifest is read back from disk so that a content change is a - // template write rather than a rebuild of the server bundle - nuxt.options.nitro.virtual['#content-manifest'] = () => nuxt.options.dev - ? devManifestModule(manifestPath) - : inlineManifestModule(documents) - - nuxt.options.nitro.externals ||= {} - nuxt.options.nitro.externals.inline ||= [] - nuxt.options.nitro.externals.inline.push('#content-manifest') + addServerTemplate({ + filename: '#content-manifest', + // in dev the manifest is read back from disk so that a content change is a + // template write rather than a rebuild of the server bundle + getContents: () => nuxt.options.dev + ? devManifestModule(manifestPath) + : inlineManifestModule(documents), + }) if (nuxt.options.dev) { addTemplate({ @@ -399,9 +397,6 @@ declare module '#md-page-meta.json' { export const pageMeta: Record } -declare module '#md-pages.json' { - export const mdPages: Set -} `, }, { nuxt: true, nitro: true }) }, diff --git a/modules/md-routes.ts b/modules/md-routes.ts index 80e2fa73..da744599 100644 --- a/modules/md-routes.ts +++ b/modules/md-routes.ts @@ -1,49 +1,27 @@ -import { addServerHandler, createResolver, defineNuxtModule, useNuxt } from 'nuxt/kit' -import { pageMeta } from './shared/page-meta' +import { addServerHandler, addServerTemplate, createResolver, defineNuxtModule } from 'nuxt/kit' +import { pageMeta } from './shared/page-meta.ts' export default defineNuxtModule({ meta: { name: 'md-routes', }, - setup () { - const nuxt = useNuxt() + setup (_, nuxt) { const resolver = createResolver(import.meta.url) // Expose page meta as a virtual module for server routes - nuxt.options.nitro.virtual ||= {} - nuxt.options.nitro.virtual['#md-page-meta.json'] = () => - `export const pageMeta = ${JSON.stringify(pageMeta)}` - - const mdPages = [ - '/', - '/ai', - '/bio', - '/talks', - '/uses', - '/projects', - '/blog', - ] + addServerTemplate({ + filename: '#md-page-meta.json', + getContents: () => `export const pageMeta = ${JSON.stringify(pageMeta)}`, + }) // Register blog post .md handlers once we know all the slugs nuxt.hook('markdown:blog-entries', entries => { for (const entry of entries) { - const route = `${entry.path}.md` - addServerHandler({ - route, + route: `${entry.path}.md`, handler: resolver.resolve('./md-routes/runtime/server/blog-md.get'), }) - - mdPages.push(entry.path) } - - // Now that all pages are known, expose them for the middleware - nuxt.options.nitro.virtual!['#md-pages.json'] = () => - `export const mdPages = new Set(${JSON.stringify(mdPages)})` }) - - nuxt.options.nitro.externals ||= {} - nuxt.options.nitro.externals.inline ||= [] - nuxt.options.nitro.externals.inline.push('#md-page-meta.json', '#md-pages.json') }, }) diff --git a/modules/md-routes/runtime/server/blog-md.get.ts b/modules/md-routes/runtime/server/blog-md.get.ts index e0bd2b05..1dd91ec1 100644 --- a/modules/md-routes/runtime/server/blog-md.get.ts +++ b/modules/md-routes/runtime/server/blog-md.get.ts @@ -1,3 +1,5 @@ +import { createError, defineEventHandler, getRequestURL } from 'nuxt/server' + export default defineEventHandler(event => { const url = getRequestURL(event) const match = url.pathname.match(/\/blog\/(.+)\.md$/) @@ -7,7 +9,7 @@ export default defineEventHandler(event => { ? blogPosts().find(p => p.meta.stem === slug) : undefined if (!post) { - throw createError({ statusCode: 404, statusMessage: 'Not found' }) + throw createError({ status: 404, statusText: 'Not found' }) } const { title, date, tags, description } = post.data diff --git a/modules/router/index.ts b/modules/router/index.ts index 9963c810..e8f052f1 100644 --- a/modules/router/index.ts +++ b/modules/router/index.ts @@ -22,7 +22,7 @@ import { } from 'nuxt/kit' import { withLeadingSlash } from 'ufo' -import { pageMeta } from '../shared/page-meta' +import { pageMeta } from '../shared/page-meta.ts' export default defineNuxtModule({ meta: { diff --git a/modules/runtime/server/discover-bluesky-post.get.ts b/modules/runtime/server/discover-bluesky-post.get.ts index 1de6d21a..84e28913 100644 --- a/modules/runtime/server/discover-bluesky-post.get.ts +++ b/modules/runtime/server/discover-bluesky-post.get.ts @@ -1,17 +1,20 @@ +import { defineEventHandler, getQuery, useRuntimeConfig } from 'nuxt/server' +import { $fetch } from 'ofetch' + // @ts-expect-error virtual file generated by bsky-comments module import { pendingPosts } from 'bsky-runtime-discovery-server.mjs' import { BLUESKY_API, postLinksToUrl, type BlueskyFeedResponse } from '#shared/utils/bluesky' const posts = pendingPosts as Record -export default defineCachedEventHandler(async event => { +export default defineEventHandler(async event => { const path = getQuery(event).path const post = typeof path === 'string' ? posts[path] : undefined if (!post) { return { uri: null } } - const bskyHandle = useRuntimeConfig(event).social.networks.bluesky.identifier + const bskyHandle = useRuntimeConfig().social.networks.bluesky.identifier const searchCutoff = new Date(new Date(post.date).getTime() - 24 * 60 * 60 * 1000) let cursor: string | undefined @@ -44,8 +47,4 @@ export default defineCachedEventHandler(async event => { } while (cursor) return { uri: null } -}, { - maxAge: 60 * 60, - swr: true, - getKey: event => String(getQuery(event).path || ''), }) diff --git a/modules/runtime/server/slides/[id].pdf.ts b/modules/runtime/server/slides/[id].pdf.ts index 64664eff..b13d9830 100644 --- a/modules/runtime/server/slides/[id].pdf.ts +++ b/modules/runtime/server/slides/[id].pdf.ts @@ -1,7 +1,8 @@ /** * Dev-only handler for `/slides/:id.pdf`. */ -import type { H3Event } from 'h3' +import { createError, defineEventHandler, getRouterParam, useRuntimeConfig } from 'nuxt/server' +import { $fetch } from 'ofetch' import { useAirspace } from '#server/utils/airspace' @@ -16,9 +17,9 @@ interface GitHubRelease { const assetCache = new Map() let knownIds: Set | null = null -async function getKnownSlideIds (event: H3Event): Promise> { +async function getKnownSlideIds (): Promise> { if (knownIds) return knownIds - const records = await useAirspace(event).talks.list() + const records = await useAirspace().talks.list() knownIds = new Set( records .map(r => r.value.slides) @@ -29,20 +30,20 @@ async function getKnownSlideIds (event: H3Event): Promise> { export default defineEventHandler(async event => { const id = getRouterParam(event, 'id') - if (!id) throw createError({ statusCode: 404 }) + if (!id) throw createError({ status: 404 }) - const config = useRuntimeConfig(event) + const config = useRuntimeConfig() if (!config.github.token) { throw createError({ - statusCode: 503, - statusMessage: 'GitHub token not configured (NUXT_GITHUB_TOKEN); cannot serve slides in dev.', + status: 503, + statusText: 'GitHub token not configured (NUXT_GITHUB_TOKEN); cannot serve slides in dev.', }) } - const known = await getKnownSlideIds(event) - if (!known.has(id)) throw createError({ statusCode: 404 }) + const known = await getKnownSlideIds() + if (!known.has(id)) throw createError({ status: 404 }) - setResponseHeader(event, 'content-type', 'application/pdf') + event.res.headers.set('content-type', 'application/pdf') const cached = assetCache.get(id) if (cached) return new Uint8Array(cached) @@ -59,9 +60,9 @@ export default defineEventHandler(async event => { ) const assetId = release.assets.find(a => a.name.endsWith('.pdf'))?.id - if (!assetId) throw createError({ statusCode: 404 }) + if (!assetId) throw createError({ status: 404 }) - const file = await $fetch( + const file = await $fetch( `https://api.github.com/repos/danielroe/slides/releases/assets/${assetId}`, { responseType: 'arrayBuffer', diff --git a/modules/slides.ts b/modules/slides.ts index 0abe8c3d..e514ac34 100644 --- a/modules/slides.ts +++ b/modules/slides.ts @@ -2,7 +2,7 @@ import { addServerHandler, createResolver, defineNuxtModule, useNuxt, useRuntime import { $fetch } from 'ofetch' import { put, head } from '@vercel/blob' -import { useBuildAirspace } from './shared/airspace' +import { useBuildAirspace } from './shared/airspace.ts' export default defineNuxtModule({ meta: { diff --git a/modules/social/index.ts b/modules/social/index.ts index b2eff673..b9200cb3 100644 --- a/modules/social/index.ts +++ b/modules/social/index.ts @@ -1,5 +1,4 @@ -import { addServerHandler, createResolver, defineNuxtModule, useNuxt } from 'nuxt/kit' -import { resolveModulePath } from 'exsolve' +import { addServerHandler, createResolver, defineNuxtModule, extendRouteRules, useNuxt } from 'nuxt/kit' import { defu } from 'defu' const networks = { @@ -47,18 +46,9 @@ export default defineNuxtModule({ nuxt.options.alias['node-fetch'] = 'node-fetch-native' nuxt.options.build.transpile.push( 'masto', - '@mastojs/ponyfills', 'magic-string', ) - const mockProxy = resolveModulePath('mocked-exports/proxy') - nuxt.options.nitro = defu(nuxt.options.nitro, { - alias: { - 'eventemitter3': mockProxy, - 'isomorphic-ws': mockProxy, - }, - }) - nuxt.options.alias = defu(nuxt.options.alias, { '@jridgewell/sourcemap-codec': resolver.resolve('./mocks/sourcemap-codec'), 'qs': 'rollup-plugin-node-polyfills/polyfills/qs', @@ -77,11 +67,7 @@ export default defineNuxtModule({ } if (!nuxt.options.dev) { - nuxt.options.nitro.routeRules ||= {} - nuxt.options.nitro.routeRules['/_social/**'] = { - isr: 60, - swr: 60, - } + extendRouteRules('/_social/**', { isr: 60, swr: 60 }) } }, }) diff --git a/modules/social/runtime/server/_social/bluesky.get.ts b/modules/social/runtime/server/_social/bluesky.get.ts index 9754dc05..6186263d 100644 --- a/modules/social/runtime/server/_social/bluesky.get.ts +++ b/modules/social/runtime/server/_social/bluesky.get.ts @@ -1,11 +1,12 @@ +import { defineEventHandler, useRuntimeConfig } from 'nuxt/server' import { Client, asStringFormat } from '@atproto/lex' import { api } from '@bsky/sdk' import { app } from '@bsky/sdk/lexicons' import MagicString from 'magic-string' -export default defineEventHandler(async event => { +export default defineEventHandler(async () => { const client = new Client(api.app.urlPublic) - const { identifier } = useRuntimeConfig(event).social.networks.bluesky + const { identifier } = useRuntimeConfig().social.networks.bluesky const feed: app.bsky.feed.defs.FeedViewPost[] = [] let cursor: string | undefined diff --git a/modules/social/runtime/server/_social/linkedin.get.ts b/modules/social/runtime/server/_social/linkedin.get.ts index 532a75b7..462dc4d6 100644 --- a/modules/social/runtime/server/_social/linkedin.get.ts +++ b/modules/social/runtime/server/_social/linkedin.get.ts @@ -1,3 +1,5 @@ +import { defineEventHandler } from 'nuxt/server' + export default defineEventHandler(async () => { // TODO: likely not possible return [] diff --git a/modules/social/runtime/server/_social/mastodon.get.ts b/modules/social/runtime/server/_social/mastodon.get.ts index 415b2cc8..c66b5f7e 100644 --- a/modules/social/runtime/server/_social/mastodon.get.ts +++ b/modules/social/runtime/server/_social/mastodon.get.ts @@ -1,10 +1,12 @@ +import { createError, defineEventHandler, useRuntimeConfig } from 'nuxt/server' import { createRestAPIClient } from 'masto' +import { $fetch } from 'ofetch' import { parseURL, withProtocol } from 'ufo' import { linkifyBareUrls } from './linkify' -export default defineEventHandler(async event => { - const acct = useRuntimeConfig(event).social.networks.mastodon.identifier +export default defineEventHandler(async () => { + const acct = useRuntimeConfig().social.networks.mastodon.identifier const server = acct.split('@')[1] if (!server) throw createError('Invalid Mastodon account identifier') diff --git a/modules/standard-site/index.ts b/modules/standard-site/index.ts index e09e6c47..077e7a16 100644 --- a/modules/standard-site/index.ts +++ b/modules/standard-site/index.ts @@ -4,14 +4,13 @@ * resolved once by the shared `modules/atproto` module and read at runtime * from `runtimeConfig.atproto.did`; no resolution happens here. */ -import { addServerHandler, createResolver, defineNuxtModule, useNuxt } from 'nuxt/kit' +import { addServerHandler, createResolver, defineNuxtModule } from 'nuxt/kit' export default defineNuxtModule({ meta: { name: 'standard-site', }, - setup () { - const nuxt = useNuxt() + setup (_, nuxt) { const resolver = createResolver(import.meta.url) addServerHandler({ @@ -19,10 +18,7 @@ export default defineNuxtModule({ handler: resolver.resolve('./runtime/server/routes/well-known.get'), }) - nuxt.options.nitro.prerender ||= {} - nuxt.options.nitro.prerender.routes ||= [] - if (!nuxt.options.nitro.prerender.routes.includes('/.well-known/site.standard.publication')) { - nuxt.options.nitro.prerender.routes.push('/.well-known/site.standard.publication') - } + nuxt.options.prerender.routes ||= [] + nuxt.options.prerender.routes.push('/.well-known/site.standard.publication') }, }) diff --git a/modules/standard-site/runtime/server/routes/well-known.get.ts b/modules/standard-site/runtime/server/routes/well-known.get.ts index d1172b1c..9b94d71f 100644 --- a/modules/standard-site/runtime/server/routes/well-known.get.ts +++ b/modules/standard-site/runtime/server/routes/well-known.get.ts @@ -1,11 +1,13 @@ +import { createError, defineEventHandler, useRuntimeConfig } from 'nuxt/server' + import { publicationRkey } from '../../../../shared/tid' export default defineEventHandler(event => { - const { atproto } = useRuntimeConfig(event) + const { atproto } = useRuntimeConfig() if (!atproto.did) { - throw createError({ statusCode: 404, message: 'DID not configured' }) + throw createError({ status: 404, message: 'DID not configured' }) } - setResponseHeader(event, 'content-type', 'text/plain') + event.res.headers.set('content-type', 'text/plain') return `at://${atproto.did}/site.standard.publication/${publicationRkey}` }) diff --git a/modules/sync/index.ts b/modules/sync/index.ts index 09cba805..1fc8cbb0 100644 --- a/modules/sync/index.ts +++ b/modules/sync/index.ts @@ -1,9 +1,9 @@ import process from 'node:process' import { defineNuxtModule, useNuxt } from 'nuxt/kit' -import { syncAll } from './providers' -import type { SyncItem } from './providers' -import { useBuildAirspace } from '../shared/airspace' +import { syncAll } from './providers/index.ts' +import type { SyncItem } from './providers/index.ts' +import { useBuildAirspace } from '../shared/airspace.ts' const TALK_TYPE_MAP: Record = { podcast: 'video', diff --git a/modules/sync/providers/dev-to.ts b/modules/sync/providers/dev-to.ts index 69768d1d..140f84c3 100644 --- a/modules/sync/providers/dev-to.ts +++ b/modules/sync/providers/dev-to.ts @@ -1,6 +1,6 @@ import { $fetch } from 'ofetch' -import type { SyncItem, SyncOptions, SyncProvider } from './index' +import type { SyncItem, SyncOptions, SyncProvider } from './index.ts' export class DevToProvider implements SyncProvider { name = 'dev-to' diff --git a/modules/sync/providers/gde-advocu.ts b/modules/sync/providers/gde-advocu.ts index d6453b1b..704c926a 100644 --- a/modules/sync/providers/gde-advocu.ts +++ b/modules/sync/providers/gde-advocu.ts @@ -1,7 +1,7 @@ import { $fetch } from 'ofetch' -import { useBuildAirspaceWithSession } from '../../shared/airspace' -import type { SyncItem, SyncOptions, SyncProvider } from './index' +import { useBuildAirspaceWithSession } from '../../shared/airspace.ts' +import type { SyncItem, SyncOptions, SyncProvider } from './index.ts' const PROVIDER = 'gde-advocu' diff --git a/modules/sync/providers/github-stars.ts b/modules/sync/providers/github-stars.ts index 97bdc618..11a48013 100644 --- a/modules/sync/providers/github-stars.ts +++ b/modules/sync/providers/github-stars.ts @@ -1,6 +1,6 @@ import { $fetch } from 'ofetch' -import type { SyncItem, SyncOptions, SyncProvider } from './index' +import type { SyncItem, SyncOptions, SyncProvider } from './index.ts' const CONTRIBUTION_TYPE_MAP: Record = { blog: 'BLOGPOST', diff --git a/modules/sync/providers/index.ts b/modules/sync/providers/index.ts index 68c355be..403eb081 100644 --- a/modules/sync/providers/index.ts +++ b/modules/sync/providers/index.ts @@ -1,7 +1,7 @@ -import { GithubStarsProvider } from './github-stars' -import { DevToProvider } from './dev-to' -import { GdeAdvocuProvider } from './gde-advocu' -import { StandardSiteProvider } from './standard-site' +import { GithubStarsProvider } from './github-stars.ts' +import { DevToProvider } from './dev-to.ts' +import { GdeAdvocuProvider } from './gde-advocu.ts' +import { StandardSiteProvider } from './standard-site.ts' export interface SyncItem { title: string diff --git a/modules/sync/providers/standard-site.ts b/modules/sync/providers/standard-site.ts index e67d9b1c..7f9cd7c9 100644 --- a/modules/sync/providers/standard-site.ts +++ b/modules/sync/providers/standard-site.ts @@ -5,10 +5,10 @@ import type { RecordOf } from 'airspace' import type { l } from '@atproto/lex-schema' import type { site } from '../../../shared/lex/index.ts' -import type { SyncItem, SyncOptions, SyncProvider } from './index' -import { useBuildAirspaceWithSession } from '../../shared/airspace' -import { standardSiteCollections } from '../../../shared/standard-site' -import { publicationRkey, tidFromDate } from '../../shared/tid' +import type { SyncItem, SyncOptions, SyncProvider } from './index.ts' +import { useBuildAirspaceWithSession } from '../../shared/airspace.ts' +import { standardSiteCollections } from '../../../shared/standard-site.ts' +import { publicationRkey, tidFromDate } from '../../shared/tid.ts' type Airspace = Awaited>> type Document = RecordOf['value'] diff --git a/nuxt.config.ts b/nuxt.config.ts index e1405335..60927c5a 100644 --- a/nuxt.config.ts +++ b/nuxt.config.ts @@ -7,7 +7,7 @@ import { defineNuxtConfig } from 'nuxt/config' import { extendViteConfig } from 'nuxt/kit' import { isTest } from 'std-env' import type { HmrOptions } from 'vite' -import { pageMeta } from './modules/shared/page-meta' +import { pageMeta } from './modules/shared/page-meta.ts' /** * Rendered routes served from the SWR cache. Applied outside development only: @@ -31,6 +31,8 @@ const apiSwrRules: Record = { '/api/uses': { swr: 60 * 60 }, '/api/projects': { swr: 60 * 60 }, '/api/current-location': { swr: 60 * 5 }, + '/api/streams': { swr: 60 * 60 }, + '/api/discover-bluesky-post': { swr: 60 * 60 }, } export default defineNuxtConfig({ @@ -151,7 +153,6 @@ export default defineNuxtConfig({ amaPlaylistId: 'PLQnM-cL9ttacD7fyv6yrtQxaICAUs-2KJ', }, voteUrl: '', - sessionPassword: '', // Pushover notifications pushover: { token: '', @@ -207,6 +208,10 @@ export default defineNuxtConfig({ sourcemap: { client: true, server: false }, + future: { + compatibilityVersion: 5, + }, + experimental: { viewTransition: true, }, @@ -238,20 +243,7 @@ export default defineNuxtConfig({ replace: { 'import.meta.test': isTest, }, - typescript: { - tsConfig: { - compilerOptions: { - noUncheckedIndexedAccess: true, - allowImportingTsExtensions: true, - noEmit: true, - }, - }, - }, future: { nativeSWR: true }, - prerender: { - crawlLinks: true, - routes: ['/rss.xml', '/llms.txt', '/llms-full.txt'], - }, hooks: { 'prerender:generate' (route) { if (route.fileName) @@ -277,6 +269,7 @@ export default defineNuxtConfig({ vite: { css: { + // TODO: remove with `@nuxt/fonts` v1 lightningcss: {}, }, build: { @@ -300,11 +293,6 @@ export default defineNuxtConfig({ }, }, }, - vue: { - features: { - optionsAPI: false, - }, - }, optimizeDeps: { include: [ '@formkit/drag-and-drop/vue', @@ -325,21 +313,10 @@ export default defineNuxtConfig({ tsConfig: { compilerOptions: { allowImportingTsExtensions: true, - noEmit: true, }, }, nodeTsConfig: { include: ['../scripts'], - compilerOptions: { - allowImportingTsExtensions: true, - noEmit: true, - }, - }, - sharedTsConfig: { - compilerOptions: { - allowImportingTsExtensions: true, - noEmit: true, - }, }, }, @@ -433,6 +410,11 @@ export default defineNuxtConfig({ apiHost: 'https://v.roe.dev', }, + prerender: { + crawlLinks: true, + routes: ['/rss.xml', '/llms.txt', '/llms-full.txt'], + }, + scripts: { defaultScriptOptions: { bundle: true, diff --git a/package.json b/package.json index 22036cc0..98b03a13 100644 --- a/package.json +++ b/package.json @@ -2,6 +2,7 @@ "name": "roe.dev", "version": "1.0.0", "private": true, + "type": "module", "scripts": { "dev": "nuxt dev", "build": "pnpm rebuild sharp && nuxt build", @@ -59,10 +60,8 @@ "comark": "0.7.0", "comark-content": "0.4.1", "defu": "^6.1.7", - "exsolve": "^1.1.1", "feed": "^6.0.0", "gsap": "^3.15.0", - "h3": "^1.15.11", "image-meta": "^0.3.0", "knitwork": "^1.3.0", "magic-regexp": "0.11.2", @@ -73,13 +72,13 @@ "mocked-exports": "^0.1.1", "modern-screenshot": "^4.7.0", "multiformats": "14.0.5", - "nuxt": "4.6.0", + "nuxt": "4.6.1", "nuxt-og-image": "6.10.3", "nuxt-security": "2.6.0", + "ofetch": "1.5.1", "partykit": "0.0.115", "partysocket": "^1.3.0", "pathe": "^2.0.3", - "pkg-types": "^2.3.1", "postcss-nesting": "^14.0.1", "remark": "^15.0.1", "remark-html": "^16.0.1", @@ -106,7 +105,6 @@ "happy-dom": "20.14.5", "html-to-text": "10.0.1", "nano-staged": "1.0.2", - "ofetch": "1.5.1", "playwright-core": "1.64.0", "rollup": "4.64.2", "simple-git-hooks": "2.14.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4464df58..5f1f5808 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -164,7 +164,6 @@ settings: overrides: comark: 0.7.0 - '@nuxt/cli': npm:@nuxt/cli-nightly@4.0.0-2610081559-2ea01d2 rolldown: 1.2.13 '@atproto/lex-client': 0.3.7 '@atproto/lex-password-session': 0.2.4 @@ -195,7 +194,7 @@ importers: version: 1.1.5(@atproto/lex@0.3.14) '@comark/nuxt': specifier: 0.7.0 - version: 0.7.0(65f6e367f231df7c181b430c116f2333) + version: 0.7.0(4843da09dbcedacbbadd0921329cc65a) '@formkit/drag-and-drop': specifier: 0.6.1 version: 0.6.1 @@ -210,25 +209,25 @@ importers: version: 1.2.42 '@nuxt/eslint': specifier: 1.17.0 - version: 1.17.0(@nuxt/schema@4.6.0)(@typescript-eslint/utils@8.68.0(eslint@10.12.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3))(@vue/compiler-sfc@3.5.43)(confbox@0.3.1)(dotenv@17.4.2)(esbuild@0.28.2)(eslint@10.12.0(jiti@2.7.0)(supports-color@10.2.2))(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(oxc-parser@0.151.0)(rolldown@1.2.13)(rollup@4.64.2)(srvx@1.0.5)(supports-color@10.2.2)(typescript@6.0.3)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29)))(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29)) + version: 1.17.0(@nuxt/schema@4.6.1)(@typescript-eslint/utils@8.68.0(eslint@10.12.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3))(@vue/compiler-sfc@3.5.43)(confbox@0.3.1)(dotenv@17.4.2)(esbuild@0.28.2)(eslint@10.12.0(jiti@2.7.0)(supports-color@10.2.2))(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(oxc-parser@0.151.0)(rolldown@1.2.13)(rollup@4.64.2)(srvx@1.0.5)(supports-color@10.2.2)(typescript@6.0.3)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29)))(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29)) '@nuxt/fonts': specifier: 0.14.0 - version: 0.14.0(@nuxt/schema@4.6.0)(@vercel/blob@2.8.1)(confbox@0.3.1)(db0@0.3.4)(dotenv@17.4.2)(esbuild@0.28.2)(giget@3.3.1)(ioredis@5.11.1(supports-color@10.2.2))(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29)) + version: 0.14.0(@nuxt/schema@4.6.1)(@vercel/blob@2.8.1)(confbox@0.3.1)(db0@0.3.4)(dotenv@17.4.2)(esbuild@0.28.2)(giget@3.3.1)(ioredis@5.11.1(supports-color@10.2.2))(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29)) '@nuxt/image': specifier: 2.1.0 - version: 2.1.0(@nuxt/schema@4.6.0)(@types/node@26.3.0)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29)))(unstorage@1.17.5(@vercel/blob@2.8.1)(db0@0.3.4)(ioredis@5.11.1(supports-color@10.2.2))) + version: 2.1.0(@nuxt/schema@4.6.1)(@types/node@26.3.0)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29)))(unstorage@1.17.5(@vercel/blob@2.8.1)(db0@0.3.4)(ioredis@5.11.1(supports-color@10.2.2))) '@nuxt/scripts': specifier: ^1.3.2 - version: 1.3.12(@nuxt/schema@4.6.0)(@oxc-project/types@0.153.0)(@unhead/vue@3.4.2(@oxc-project/types@0.153.0)(esbuild@0.28.2)(lightningcss@1.33.0)(oxc-parser@0.151.0)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(vue@3.5.43(typescript@6.0.3))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29)))(@vercel/blob@2.8.1)(confbox@0.3.1)(db0@0.3.4)(dotenv@17.4.2)(esbuild@0.28.2)(giget@3.3.1)(ioredis@5.11.1(supports-color@10.2.2))(jiti@2.7.0)(mlly@1.8.2)(rolldown@1.2.13)(rollup@4.64.2)(typescript@6.0.3)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(vue@3.5.43(typescript@6.0.3))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29)) + version: 1.3.12(@nuxt/schema@4.6.1)(@oxc-project/types@0.153.0)(@unhead/vue@3.4.2(@oxc-project/types@0.153.0)(esbuild@0.28.2)(lightningcss@1.33.0)(oxc-parser@0.151.0)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(vue@3.5.43(typescript@6.0.3))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29)))(@vercel/blob@2.8.1)(confbox@0.3.1)(db0@0.3.4)(dotenv@17.4.2)(esbuild@0.28.2)(giget@3.3.1)(ioredis@5.11.1(supports-color@10.2.2))(jiti@2.7.0)(mlly@1.8.2)(rolldown@1.2.13)(rollup@4.64.2)(typescript@6.0.3)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(vue@3.5.43(typescript@6.0.3))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29)) '@nuxtjs/color-mode': specifier: ^4.0.1 - version: 4.0.1(@nuxt/schema@4.6.0)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))) + version: 4.0.1(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))) '@nuxtjs/html-validator': specifier: 2.1.0 version: 2.1.0(magicast@0.5.5)(vitest@5.0.3(@types/node@26.3.0)(happy-dom@20.14.5)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))) '@nuxtjs/plausible': specifier: 4.0.0 - version: 4.0.0(@nuxt/schema@4.6.0)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))) + version: 4.0.0(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))) '@takumi-rs/core': specifier: ^2.5.2 version: 2.14.0(csstype@3.2.3) @@ -237,7 +236,7 @@ importers: version: 3.4.2(@oxc-project/types@0.153.0)(esbuild@0.28.2)(lightningcss@1.33.0)(oxc-parser@0.151.0)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(vue@3.5.43(typescript@6.0.3))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29)) '@unocss/nuxt': specifier: 66.10.5 - version: 66.10.5(@nuxt/schema@4.6.0)(@unocss/postcss@66.10.5(postcss@8.5.29))(cac@7.0.0)(confbox@0.3.1)(dotenv@17.4.2)(esbuild@0.28.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(rollup@4.64.2)(srvx@1.0.5)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29)))(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29)) + version: 66.10.5(@nuxt/schema@4.6.1)(@unocss/postcss@66.10.5(postcss@8.5.29))(cac@7.0.0)(confbox@0.3.1)(dotenv@17.4.2)(esbuild@0.28.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(rollup@4.64.2)(srvx@1.0.5)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29)))(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29)) '@unocss/postcss': specifier: 66.10.5 version: 66.10.5(postcss@8.5.29) @@ -262,18 +261,12 @@ importers: defu: specifier: ^6.1.7 version: 6.1.7 - exsolve: - specifier: ^1.1.1 - version: 1.1.3 feed: specifier: ^6.0.0 version: 6.0.0 gsap: specifier: ^3.15.0 version: 3.15.0 - h3: - specifier: ^1.15.11 - version: 1.15.11 image-meta: specifier: ^0.3.0 version: 0.3.0 @@ -305,14 +298,17 @@ importers: specifier: 14.0.5 version: 14.0.5 nuxt: - specifier: 4.6.0 - version: 4.6.0(@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.153.0)(@types/node@26.3.0)(@vercel/blob@2.8.1)(@vue/compiler-sfc@3.5.43)(acorn@8.18.0)(confbox@0.3.1)(db0@0.3.4)(dotenv@17.4.2)(esbuild@0.28.2)(eslint@10.12.0(jiti@2.7.0)(supports-color@10.2.2))(giget@3.3.1)(ioredis@5.11.1(supports-color@10.2.2))(lightningcss@1.33.0)(meow@14.1.0)(mlly@1.8.2)(optionator@0.9.4)(oxc-parser@0.151.0)(rolldown@1.2.13)(rollup-plugin-visualizer@7.1.1(rolldown@1.2.13)(rollup@4.64.2))(rollup@4.64.2)(srvx@1.0.5)(stylelint@17.16.0(supports-color@10.2.2)(typescript@6.0.3))(supports-color@10.2.2)(terser@5.50.0)(typescript@6.0.3)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(vue-tsc@3.3.12(typescript@6.0.3))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))(yaml@2.9.0) + specifier: 4.6.1 + version: 4.6.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)))(@oxc-project/types@0.153.0)(@types/node@26.3.0)(@vercel/blob@2.8.1)(@vue/compiler-sfc@3.5.43)(acorn@8.18.0)(confbox@0.3.1)(db0@0.3.4)(dotenv@17.4.2)(esbuild@0.28.2)(eslint@10.12.0(jiti@2.7.0)(supports-color@10.2.2))(giget@3.3.1)(ioredis@5.11.1(supports-color@10.2.2))(lightningcss@1.33.0)(meow@14.1.0)(mlly@1.8.2)(optionator@0.9.4)(oxc-parser@0.151.0)(rolldown@1.2.13)(rollup-plugin-visualizer@7.1.1(rolldown@1.2.13)(rollup@4.64.2))(rollup@4.64.2)(srvx@1.0.5)(stylelint@17.16.0(supports-color@10.2.2)(typescript@6.0.3))(supports-color@10.2.2)(terser@5.50.0)(typescript@6.0.3)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(vue-tsc@3.3.12(typescript@6.0.3))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))(yaml@2.9.0) nuxt-og-image: specifier: 6.10.3 - version: 6.10.3(e4c727fcff387775aed0d04f26e35207) + version: 6.10.3(a0d2c756dd08d530f662428b658e3a9f) nuxt-security: specifier: 2.6.0 - version: 2.6.0(@nuxt/schema@4.6.0)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(rollup@4.64.2)(supports-color@10.2.2)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))) + version: 2.6.0(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(rollup@4.64.2)(supports-color@10.2.2)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))) + ofetch: + specifier: 1.5.1 + version: 1.5.1 partykit: specifier: 0.0.115 version: 0.0.115(supports-color@10.2.2) @@ -322,9 +318,6 @@ importers: pathe: specifier: ^2.0.3 version: 2.0.3 - pkg-types: - specifier: ^2.3.1 - version: 2.3.3 postcss-nesting: specifier: ^14.0.1 version: 14.0.3(postcss@8.5.29) @@ -373,7 +366,7 @@ importers: version: 21.2.3 '@nuxt/test-utils': specifier: 4.3.3 - version: 4.3.3(55b3b0c173b5558469b93234c565b8d4) + version: 4.3.3(cc69a788dea7e4cb8a28f3c4d17cf640) '@playwright/test': specifier: 1.64.0 version: 1.64.0 @@ -401,9 +394,6 @@ importers: node: specifier: runtime:v24.21.0 version: runtime:24.21.0 - ofetch: - specifier: 1.5.1 - version: 1.5.1 playwright-core: specifier: 1.64.0 version: 1.64.0 @@ -1797,8 +1787,8 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - '@nuxt/cli-nightly@4.0.0-2610081559-2ea01d2': - resolution: {integrity: sha512-wjMh//OB6suNSXU9BboUpuJ6wdpMF1pBn4A/iHpt/4fDPyIq3i6cwzNNoBafKeyD7a6wgjYfHeziMfqVPj/sHQ==} + '@nuxt/cli@4.0.1': + resolution: {integrity: sha512-vtB77CmkrYUMoIKwk+HUdNQX1vuMPpnu7ExNYB91WuIxzzGrGQLSxGUpXa360xsyUkZ4h9s+qElAQQW9ZQP4WA==} engines: {node: ^22.21.0 || ^24.11.0 || >=26.0.0} hasBin: true peerDependencies: @@ -1920,14 +1910,44 @@ packages: rolldown: optional: true - '@nuxt/nitro-server@4.6.0': - resolution: {integrity: sha512-QuWqouECcxutCrC3Z09w3x12GZtWjqbjoKrhjkMf0eSVm586yGfkSEfGIjRuVhy/wcYMEGnMOKA2bGTbndnreQ==} + '@nuxt/kit@4.6.1': + resolution: {integrity: sha512-ld5+/o4EMqyw6Qy+SdEYkezfprS87+p+xOBhnQgXwyrg1EdtILfLeudQ+hX6UyCnsoF6o0SOw3pjN1P4Tg9O0w==} + engines: {node: ^20.19.0 || >=22.12.0} + peerDependencies: + '@nuxt/schema': ^3.0.0 || ^4.0.0 || ^5.0.0-0 + confbox: '>=0.1.0' + dotenv: '*' + giget: '>=3.1.0' + jiti: ^2.0.0 + mlly: ^1.2.0 + oxc-parser: '>=0.56.0' + rolldown: 1.2.13 + peerDependenciesMeta: + '@nuxt/schema': + optional: true + confbox: + optional: true + dotenv: + optional: true + giget: + optional: true + jiti: + optional: true + mlly: + optional: true + oxc-parser: + optional: true + rolldown: + optional: true + + '@nuxt/nitro-server@4.6.1': + resolution: {integrity: sha512-ecMNTxJ44uany4cjA58EW5AMbqcG0XgqP0d0HJmZ7z3CupPCc+qmd9InvzsX53uU7ZVzAkWmQ8K+0lrzl9Xp3A==} engines: {node: ^22.22.3 || ^24.15.0 || >=26.0.0} peerDependencies: '@babel/plugin-proposal-decorators': ^7.25.0 || ^8.0.0 '@babel/plugin-syntax-typescript': ^7.25.0 || ^8.0.0 '@rollup/plugin-babel': ^6.0.0 || ^7.0.0 - nuxt: ^4.6.0 + nuxt: ^4.6.1 peerDependenciesMeta: '@babel/plugin-proposal-decorators': optional: true @@ -1936,8 +1956,8 @@ packages: '@rollup/plugin-babel': optional: true - '@nuxt/schema@4.6.0': - resolution: {integrity: sha512-lwAA2MDJ5WkNKqIpNnvH3gK1aHfh3DK8evQNbun+nzMKPP7MqpQ6rs/UClqTnhhhTwqkw0b6Sm24VRCVw7f4Tw==} + '@nuxt/schema@4.6.1': + resolution: {integrity: sha512-GecoPGRBk5Okpj51On87wZzBMseOqrp0bm5oa9CFIOEYR3rN9QNVsIwPw7P9OA4GOaK/smIVbo0tsmUScJFQiw==} engines: {node: ^14.18.0 || >=16.10.0} '@nuxt/scripts@1.3.12': @@ -2023,13 +2043,13 @@ packages: vitest: optional: true - '@nuxt/vite-builder@4.6.0': - resolution: {integrity: sha512-XWIi+OBn2Zql8lrFWvAX/sCmd09XMLuorm/uuF2cSm5g9TbDSFDOSgWPA5oY1OC9rx7ahMKNKlWnkceJust+OA==} + '@nuxt/vite-builder@4.6.1': + resolution: {integrity: sha512-i4cGwvYVAOzEgnZ8kZh02gWX+44rg+PI71GIxLqc2F9fdHTfLP0ZG0rsMmGWZbed9DgzpO4hK9uhPC1DwCrW6w==} engines: {node: ^22.22.3 || ^24.15.0 || >=26.0.0} peerDependencies: '@babel/plugin-proposal-decorators': ^7.25.0 || ^8.0.0 '@babel/plugin-syntax-jsx': ^7.25.0 || ^8.0.0 - nuxt: 4.6.0 + nuxt: 4.6.1 rolldown: 1.2.13 rollup-plugin-visualizer: ^6.0.0 || ^7.0.1 vue: ^3.3.4 @@ -2043,11 +2063,11 @@ packages: rollup-plugin-visualizer: optional: true - '@nuxt/vite-server@4.6.0': - resolution: {integrity: sha512-QewPpajptByrJ5yzRVCWNZCLtWMOaP4Jm8JUCO8qzW8Kq06xzF2DLvfS8k5GYoGdASpapFHlc9UVucOY6bBc6w==} + '@nuxt/vite-server@4.6.1': + resolution: {integrity: sha512-4/CE30fFc3loj2k9m37Q9kskLwFCjKa+2AePafb5Q6AMtHE9RYGH+lShbH4xJVk/uFXSiibUU8VB3H+84O9ZoQ==} engines: {node: ^22.22.3 || ^24.15.0 || >=26.0.0} peerDependencies: - nuxt: ^4.6.0 + nuxt: ^4.6.1 vite: ^8.3.2 '@nuxtjs/color-mode@4.0.1': @@ -6038,8 +6058,8 @@ packages: peerDependencies: vue: ^3.5.30 - nuxt@4.6.0: - resolution: {integrity: sha512-e7wephwGjleaIJ6ENm5KT4kYxQ9ejZLhMLqo2hNECcrK7+6rwBCGuhmHZD2bG9zOCXb3mLS8fhhkAwDCCZhmYw==} + nuxt@4.6.1: + resolution: {integrity: sha512-L6Emg0OezAgqVlFrQ64Mjd8NpSu3FfR0GchDmmSjYrjhGyDFgVzY0pw201UCApXJaeK/06jW7ZjxE2pLZkELTw==} engines: {node: ^22.22.3 || ^24.15.0 || >=26.0.0} hasBin: true peerDependencies: @@ -8419,12 +8439,12 @@ snapshots: '@colordx/core@7.3.0': {} - '@comark/nuxt@0.7.0(65f6e367f231df7c181b430c116f2333)': + '@comark/nuxt@0.7.0(4843da09dbcedacbbadd0921329cc65a)': dependencies: '@comark/vue': 0.7.0(shiki@4.5.0)(vue@3.5.43(typescript@6.0.3)) '@nuxt/kit': 4.4.8(magicast@0.5.5) comark: 0.7.0(shiki@4.5.0) - nuxt: 4.6.0(@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.153.0)(@types/node@26.3.0)(@vercel/blob@2.8.1)(@vue/compiler-sfc@3.5.43)(acorn@8.18.0)(confbox@0.3.1)(db0@0.3.4)(dotenv@17.4.2)(esbuild@0.28.2)(eslint@10.12.0(jiti@2.7.0)(supports-color@10.2.2))(giget@3.3.1)(ioredis@5.11.1(supports-color@10.2.2))(lightningcss@1.33.0)(meow@14.1.0)(mlly@1.8.2)(optionator@0.9.4)(oxc-parser@0.151.0)(rolldown@1.2.13)(rollup-plugin-visualizer@7.1.1(rolldown@1.2.13)(rollup@4.64.2))(rollup@4.64.2)(srvx@1.0.5)(stylelint@17.16.0(supports-color@10.2.2)(typescript@6.0.3))(supports-color@10.2.2)(terser@5.50.0)(typescript@6.0.3)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(vue-tsc@3.3.12(typescript@6.0.3))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))(yaml@2.9.0) + nuxt: 4.6.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)))(@oxc-project/types@0.153.0)(@types/node@26.3.0)(@vercel/blob@2.8.1)(@vue/compiler-sfc@3.5.43)(acorn@8.18.0)(confbox@0.3.1)(db0@0.3.4)(dotenv@17.4.2)(esbuild@0.28.2)(eslint@10.12.0(jiti@2.7.0)(supports-color@10.2.2))(giget@3.3.1)(ioredis@5.11.1(supports-color@10.2.2))(lightningcss@1.33.0)(meow@14.1.0)(mlly@1.8.2)(optionator@0.9.4)(oxc-parser@0.151.0)(rolldown@1.2.13)(rollup-plugin-visualizer@7.1.1(rolldown@1.2.13)(rollup@4.64.2))(rollup@4.64.2)(srvx@1.0.5)(stylelint@17.16.0(supports-color@10.2.2)(typescript@6.0.3))(supports-color@10.2.2)(terser@5.50.0)(typescript@6.0.3)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(vue-tsc@3.3.12(typescript@6.0.3))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))(yaml@2.9.0) transitivePeerDependencies: - beautiful-mermaid - katex @@ -8593,10 +8613,10 @@ snapshots: dependencies: postcss-selector-parser: 7.1.5 - '@dxup/nuxt@0.5.10(@nuxt/schema@4.6.0)(confbox@0.3.1)(dotenv@17.4.2)(esbuild@0.28.2)(giget@3.3.1)(jiti@2.7.0)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))': + '@dxup/nuxt@0.5.10(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(esbuild@0.28.2)(giget@3.3.1)(jiti@2.7.0)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))': dependencies: '@dxup/unimport': 0.1.2 - '@nuxt/kit': 4.6.0(@nuxt/schema@4.6.0)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))) + '@nuxt/kit': 4.6.0(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))) '@vue/compiler-dom': 3.5.43 chokidar: 5.0.0 knitwork: 1.3.0 @@ -9230,7 +9250,7 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.20.1 - '@nuxt/cli-nightly@4.0.0-2610081559-2ea01d2(@nuxt/schema@4.6.0)(jiti@2.7.0)(oxc-parser@0.151.0)(rolldown@1.2.13)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))': + '@nuxt/cli@4.0.1(@nuxt/schema@4.6.1)(jiti@2.7.0)(oxc-parser@0.151.0)(rolldown@1.2.13)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))': dependencies: '@clack/prompts': 1.8.1 args-tokenizer: 0.3.0 @@ -9256,7 +9276,7 @@ snapshots: uqr: 0.1.3 verkit: 0.5.0 optionalDependencies: - '@nuxt/schema': 4.6.0 + '@nuxt/schema': 4.6.1 jiti: 2.7.0 oxc-parser: 0.151.0 rolldown: 1.2.13 @@ -9265,9 +9285,9 @@ snapshots: '@nuxt/devalue@2.0.2': {} - '@nuxt/devtools-kit@3.4.2(@nuxt/schema@4.6.0)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.140.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29)))(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))': + '@nuxt/devtools-kit@3.4.2(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.140.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29)))(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))': dependencies: - '@nuxt/kit': 4.6.0(@nuxt/schema@4.6.0)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.140.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))) + '@nuxt/kit': 4.6.0(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.140.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))) execa: 8.0.1 vite: 8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0) transitivePeerDependencies: @@ -9282,9 +9302,9 @@ snapshots: - rolldown - unplugin - '@nuxt/devtools-kit@3.4.2(@nuxt/schema@4.6.0)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29)))(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))': + '@nuxt/devtools-kit@3.4.2(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29)))(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))': dependencies: - '@nuxt/kit': 4.6.0(@nuxt/schema@4.6.0)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))) + '@nuxt/kit': 4.6.0(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))) execa: 8.0.1 vite: 8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0) transitivePeerDependencies: @@ -9299,9 +9319,9 @@ snapshots: - rolldown - unplugin - '@nuxt/devtools-kit@4.0.0-alpha.7(@nuxt/schema@4.6.0)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29)))(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))': + '@nuxt/devtools-kit@4.0.0-alpha.7(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29)))(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))': dependencies: - '@nuxt/kit': 4.6.0(@nuxt/schema@4.6.0)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))) + '@nuxt/kit': 4.6.0(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))) tinyexec: 1.3.1 vite: 8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0) transitivePeerDependencies: @@ -9327,11 +9347,11 @@ snapshots: pkg-types: 2.3.3 semver: 7.8.5 - '@nuxt/devtools@3.4.2(@nuxt/schema@4.6.0)(@vercel/blob@2.8.1)(confbox@0.3.1)(db0@0.3.4)(dotenv@17.4.2)(giget@3.3.1)(ioredis@5.11.1(supports-color@10.2.2))(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(supports-color@10.2.2)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29)))(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(vue@3.5.43(typescript@6.0.3))': + '@nuxt/devtools@3.4.2(@nuxt/schema@4.6.1)(@vercel/blob@2.8.1)(confbox@0.3.1)(db0@0.3.4)(dotenv@17.4.2)(giget@3.3.1)(ioredis@5.11.1(supports-color@10.2.2))(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(supports-color@10.2.2)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29)))(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(vue@3.5.43(typescript@6.0.3))': dependencies: - '@nuxt/devtools-kit': 3.4.2(@nuxt/schema@4.6.0)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29)))(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0)) + '@nuxt/devtools-kit': 3.4.2(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29)))(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0)) '@nuxt/devtools-wizard': 3.4.2 - '@nuxt/kit': 4.6.0(@nuxt/schema@4.6.0)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))) + '@nuxt/kit': 4.6.0(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))) '@vue/devtools-core': 8.2.1(vue@3.5.43(typescript@6.0.3)) '@vue/devtools-kit': 8.2.1 birpc: 4.2.0 @@ -9359,7 +9379,7 @@ snapshots: tinyglobby: 0.2.17 unstorage: 1.17.5(@vercel/blob@2.8.1)(db0@0.3.4)(ioredis@5.11.1(supports-color@10.2.2)) vite: 8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0) - vite-plugin-inspect: 11.4.1(@nuxt/kit@4.6.0(@nuxt/schema@4.6.0)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))))(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0)) + vite-plugin-inspect: 11.4.1(@nuxt/kit@4.6.0(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))))(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0)) vite-plugin-vue-tracer: 1.5.0(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(vue@3.5.43(typescript@6.0.3)) which: 6.0.1 ws: 8.21.3 @@ -9438,13 +9458,13 @@ snapshots: - supports-color - typescript - '@nuxt/eslint@1.17.0(@nuxt/schema@4.6.0)(@typescript-eslint/utils@8.68.0(eslint@10.12.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3))(@vue/compiler-sfc@3.5.43)(confbox@0.3.1)(dotenv@17.4.2)(esbuild@0.28.2)(eslint@10.12.0(jiti@2.7.0)(supports-color@10.2.2))(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(oxc-parser@0.151.0)(rolldown@1.2.13)(rollup@4.64.2)(srvx@1.0.5)(supports-color@10.2.2)(typescript@6.0.3)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29)))(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))': + '@nuxt/eslint@1.17.0(@nuxt/schema@4.6.1)(@typescript-eslint/utils@8.68.0(eslint@10.12.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3))(@vue/compiler-sfc@3.5.43)(confbox@0.3.1)(dotenv@17.4.2)(esbuild@0.28.2)(eslint@10.12.0(jiti@2.7.0)(supports-color@10.2.2))(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(oxc-parser@0.151.0)(rolldown@1.2.13)(rollup@4.64.2)(srvx@1.0.5)(supports-color@10.2.2)(typescript@6.0.3)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29)))(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))': dependencies: '@eslint/config-inspector': 3.3.0(eslint@10.12.0(jiti@2.7.0)(supports-color@10.2.2))(srvx@1.0.5) - '@nuxt/devtools-kit': 3.4.2(@nuxt/schema@4.6.0)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29)))(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0)) + '@nuxt/devtools-kit': 3.4.2(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29)))(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0)) '@nuxt/eslint-config': 1.17.0(@typescript-eslint/utils@8.68.0(eslint@10.12.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3))(@vue/compiler-sfc@3.5.43)(eslint@10.12.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3) '@nuxt/eslint-plugin': 1.17.0(eslint@10.12.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3) - '@nuxt/kit': 4.6.0(@nuxt/schema@4.6.0)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))) + '@nuxt/kit': 4.6.0(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))) chokidar: 5.0.0 eslint: 10.12.0(jiti@2.7.0)(supports-color@10.2.2) eslint-flat-config-utils: 3.2.0 @@ -9483,10 +9503,10 @@ snapshots: - vite - webpack - '@nuxt/fonts@0.14.0(@nuxt/schema@4.6.0)(@vercel/blob@2.8.1)(confbox@0.3.1)(db0@0.3.4)(dotenv@17.4.2)(esbuild@0.28.2)(giget@3.3.1)(ioredis@5.11.1(supports-color@10.2.2))(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))': + '@nuxt/fonts@0.14.0(@nuxt/schema@4.6.1)(@vercel/blob@2.8.1)(confbox@0.3.1)(db0@0.3.4)(dotenv@17.4.2)(esbuild@0.28.2)(giget@3.3.1)(ioredis@5.11.1(supports-color@10.2.2))(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))': dependencies: - '@nuxt/devtools-kit': 3.4.2(@nuxt/schema@4.6.0)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29)))(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0)) - '@nuxt/kit': 4.6.0(@nuxt/schema@4.6.0)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))) + '@nuxt/devtools-kit': 3.4.2(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29)))(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0)) + '@nuxt/kit': 4.6.0(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))) consola: 3.4.2 defu: 6.1.7 fontless: 0.2.1(@vercel/blob@2.8.1)(db0@0.3.4)(ioredis@5.11.1(supports-color@10.2.2))(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0)) @@ -9539,10 +9559,10 @@ snapshots: - vite - webpack - '@nuxt/image@2.1.0(@nuxt/schema@4.6.0)(@types/node@26.3.0)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29)))(unstorage@1.17.5(@vercel/blob@2.8.1)(db0@0.3.4)(ioredis@5.11.1(supports-color@10.2.2)))': + '@nuxt/image@2.1.0(@nuxt/schema@4.6.1)(@types/node@26.3.0)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29)))(unstorage@1.17.5(@vercel/blob@2.8.1)(db0@0.3.4)(ioredis@5.11.1(supports-color@10.2.2)))': dependencies: '@noble/hashes': 2.3.0 - '@nuxt/kit': 4.6.0(@nuxt/schema@4.6.0)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))) + '@nuxt/kit': 4.6.0(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))) defu: 6.1.7 h3: 1.15.11 image-meta: 0.2.2 @@ -9618,7 +9638,7 @@ snapshots: transitivePeerDependencies: - magicast - '@nuxt/kit@4.6.0(@nuxt/schema@4.6.0)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.140.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29)))': + '@nuxt/kit@4.6.0(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.140.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29)))': dependencies: consola: 3.4.2 defu: 6.1.7 @@ -9639,7 +9659,7 @@ snapshots: unctx: 3.0.1(magic-string@1.4.3)(oxc-parser@0.140.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))) verkit: 0.5.0 optionalDependencies: - '@nuxt/schema': 4.6.0 + '@nuxt/schema': 4.6.1 confbox: 0.3.1 dotenv: 17.4.2 giget: 3.3.1 @@ -9651,7 +9671,40 @@ snapshots: - magic-string - unplugin - '@nuxt/kit@4.6.0(@nuxt/schema@4.6.0)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29)))': + '@nuxt/kit@4.6.0(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29)))': + dependencies: + consola: 3.4.2 + defu: 6.1.7 + destr: 2.0.5 + errx: 0.2.2 + exsolve: 1.1.3 + ignore: 7.0.12 + klona: 2.0.6 + microdiff: 1.6.0 + nostics: 1.3.0 + package-manager-detector: 1.9.0 + pathe: 2.0.3 + rc9: 3.1.0 + scule: 1.3.0 + std-env: 4.3.0 + tinyexec: 1.3.1 + tinyglobby: 0.2.17 + unctx: 3.0.1(magic-string@1.4.3)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))) + verkit: 0.5.0 + optionalDependencies: + '@nuxt/schema': 4.6.1 + confbox: 0.3.1 + dotenv: 17.4.2 + giget: 3.3.1 + jiti: 2.7.0 + mlly: 1.8.2 + oxc-parser: 0.151.0 + rolldown: 1.2.13 + transitivePeerDependencies: + - magic-string + - unplugin + + '@nuxt/kit@4.6.1(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29)))': dependencies: consola: 3.4.2 defu: 6.1.7 @@ -9672,7 +9725,7 @@ snapshots: unctx: 3.0.1(magic-string@1.4.3)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))) verkit: 0.5.0 optionalDependencies: - '@nuxt/schema': 4.6.0 + '@nuxt/schema': 4.6.1 confbox: 0.3.1 dotenv: 17.4.2 giget: 3.3.1 @@ -9684,9 +9737,9 @@ snapshots: - magic-string - unplugin - '@nuxt/nitro-server@4.6.0(f987d9b4e3d1d8def1c9b47a045e4fba)': + '@nuxt/nitro-server@4.6.1(cf1b3aa2abcb4adf77e5cd9dd6644b23)': dependencies: - '@nuxt/kit': 4.6.0(@nuxt/schema@4.6.0)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))) + '@nuxt/kit': 4.6.1(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))) '@unhead/vue': 3.4.2(@oxc-project/types@0.153.0)(esbuild@0.28.2)(lightningcss@1.33.0)(oxc-parser@0.151.0)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(vue@3.5.43(typescript@6.0.3))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29)) consola: 3.4.2 defu: 6.1.7 @@ -9703,7 +9756,7 @@ snapshots: my-bad: 0.2.11(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0)) nitropack: 2.13.4(@vercel/blob@2.8.1)(oxc-parser@0.151.0)(rolldown@1.2.13)(srvx@1.0.5)(supports-color@10.2.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29)) nostics: 1.3.0 - nuxt: 4.6.0(@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.153.0)(@types/node@26.3.0)(@vercel/blob@2.8.1)(@vue/compiler-sfc@3.5.43)(acorn@8.18.0)(confbox@0.3.1)(db0@0.3.4)(dotenv@17.4.2)(esbuild@0.28.2)(eslint@10.12.0(jiti@2.7.0)(supports-color@10.2.2))(giget@3.3.1)(ioredis@5.11.1(supports-color@10.2.2))(lightningcss@1.33.0)(meow@14.1.0)(mlly@1.8.2)(optionator@0.9.4)(oxc-parser@0.151.0)(rolldown@1.2.13)(rollup-plugin-visualizer@7.1.1(rolldown@1.2.13)(rollup@4.64.2))(rollup@4.64.2)(srvx@1.0.5)(stylelint@17.16.0(supports-color@10.2.2)(typescript@6.0.3))(supports-color@10.2.2)(terser@5.50.0)(typescript@6.0.3)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(vue-tsc@3.3.12(typescript@6.0.3))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))(yaml@2.9.0) + nuxt: 4.6.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)))(@oxc-project/types@0.153.0)(@types/node@26.3.0)(@vercel/blob@2.8.1)(@vue/compiler-sfc@3.5.43)(acorn@8.18.0)(confbox@0.3.1)(db0@0.3.4)(dotenv@17.4.2)(esbuild@0.28.2)(eslint@10.12.0(jiti@2.7.0)(supports-color@10.2.2))(giget@3.3.1)(ioredis@5.11.1(supports-color@10.2.2))(lightningcss@1.33.0)(meow@14.1.0)(mlly@1.8.2)(optionator@0.9.4)(oxc-parser@0.151.0)(rolldown@1.2.13)(rollup-plugin-visualizer@7.1.1(rolldown@1.2.13)(rollup@4.64.2))(rollup@4.64.2)(srvx@1.0.5)(stylelint@17.16.0(supports-color@10.2.2)(typescript@6.0.3))(supports-color@10.2.2)(terser@5.50.0)(typescript@6.0.3)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(vue-tsc@3.3.12(typescript@6.0.3))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))(yaml@2.9.0) ohash: 2.0.12 pathe: 2.0.3 rou3: 0.9.2 @@ -9776,7 +9829,7 @@ snapshots: - webpack - xml2js - '@nuxt/schema@4.6.0': + '@nuxt/schema@4.6.1': dependencies: '@vue/shared': 3.5.43 defu: 6.1.7 @@ -9785,9 +9838,9 @@ snapshots: pkg-types: 2.3.3 std-env: 4.3.0 - '@nuxt/scripts@1.3.12(@nuxt/schema@4.6.0)(@oxc-project/types@0.153.0)(@unhead/vue@3.4.2(@oxc-project/types@0.153.0)(esbuild@0.28.2)(lightningcss@1.33.0)(oxc-parser@0.151.0)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(vue@3.5.43(typescript@6.0.3))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29)))(@vercel/blob@2.8.1)(confbox@0.3.1)(db0@0.3.4)(dotenv@17.4.2)(esbuild@0.28.2)(giget@3.3.1)(ioredis@5.11.1(supports-color@10.2.2))(jiti@2.7.0)(mlly@1.8.2)(rolldown@1.2.13)(rollup@4.64.2)(typescript@6.0.3)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(vue@3.5.43(typescript@6.0.3))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))': + '@nuxt/scripts@1.3.12(@nuxt/schema@4.6.1)(@oxc-project/types@0.153.0)(@unhead/vue@3.4.2(@oxc-project/types@0.153.0)(esbuild@0.28.2)(lightningcss@1.33.0)(oxc-parser@0.151.0)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(vue@3.5.43(typescript@6.0.3))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29)))(@vercel/blob@2.8.1)(confbox@0.3.1)(db0@0.3.4)(dotenv@17.4.2)(esbuild@0.28.2)(giget@3.3.1)(ioredis@5.11.1(supports-color@10.2.2))(jiti@2.7.0)(mlly@1.8.2)(rolldown@1.2.13)(rollup@4.64.2)(typescript@6.0.3)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(vue@3.5.43(typescript@6.0.3))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))': dependencies: - '@nuxt/devtools-kit': 3.4.2(@nuxt/schema@4.6.0)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.140.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29)))(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0)) + '@nuxt/devtools-kit': 3.4.2(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.140.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29)))(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0)) '@vueuse/core': 14.4.0(vue@3.5.43(typescript@6.0.3)) '@vueuse/shared': 14.4.0(vue@3.5.43(typescript@6.0.3)) consola: 3.4.2 @@ -9850,19 +9903,19 @@ snapshots: - vue - webpack - '@nuxt/telemetry@2.9.1(@nuxt/kit@4.6.0(@nuxt/schema@4.6.0)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))))': + '@nuxt/telemetry@2.9.1(@nuxt/kit@4.6.1(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))))': dependencies: - '@nuxt/kit': 4.6.0(@nuxt/schema@4.6.0)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))) + '@nuxt/kit': 4.6.1(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))) citty: 0.2.2 consola: 3.4.2 rc9: 3.1.0 std-env: 4.3.0 - '@nuxt/test-utils@4.3.3(55b3b0c173b5558469b93234c565b8d4)': + '@nuxt/test-utils@4.3.3(cc69a788dea7e4cb8a28f3c4d17cf640)': dependencies: '@clack/prompts': 1.8.1 - '@nuxt/devtools-kit': 3.4.2(@nuxt/schema@4.6.0)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29)))(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0)) - '@nuxt/kit': 4.6.0(@nuxt/schema@4.6.0)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))) + '@nuxt/devtools-kit': 3.4.2(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29)))(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0)) + '@nuxt/kit': 4.6.0(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))) consola: 3.4.2 defu: 6.1.7 exsolve: 1.1.3 @@ -9886,7 +9939,7 @@ snapshots: '@vue/test-utils': 2.5.1(@vue/compiler-dom@3.5.43)(@vue/server-renderer@3.5.43)(vue@3.5.43(typescript@6.0.3)) h3: 1.15.11 happy-dom: 20.14.5 - nuxt: 4.6.0(@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.153.0)(@types/node@26.3.0)(@vercel/blob@2.8.1)(@vue/compiler-sfc@3.5.43)(acorn@8.18.0)(confbox@0.3.1)(db0@0.3.4)(dotenv@17.4.2)(esbuild@0.28.2)(eslint@10.12.0(jiti@2.7.0)(supports-color@10.2.2))(giget@3.3.1)(ioredis@5.11.1(supports-color@10.2.2))(lightningcss@1.33.0)(meow@14.1.0)(mlly@1.8.2)(optionator@0.9.4)(oxc-parser@0.151.0)(rolldown@1.2.13)(rollup-plugin-visualizer@7.1.1(rolldown@1.2.13)(rollup@4.64.2))(rollup@4.64.2)(srvx@1.0.5)(stylelint@17.16.0(supports-color@10.2.2)(typescript@6.0.3))(supports-color@10.2.2)(terser@5.50.0)(typescript@6.0.3)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(vue-tsc@3.3.12(typescript@6.0.3))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))(yaml@2.9.0) + nuxt: 4.6.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)))(@oxc-project/types@0.153.0)(@types/node@26.3.0)(@vercel/blob@2.8.1)(@vue/compiler-sfc@3.5.43)(acorn@8.18.0)(confbox@0.3.1)(db0@0.3.4)(dotenv@17.4.2)(esbuild@0.28.2)(eslint@10.12.0(jiti@2.7.0)(supports-color@10.2.2))(giget@3.3.1)(ioredis@5.11.1(supports-color@10.2.2))(lightningcss@1.33.0)(meow@14.1.0)(mlly@1.8.2)(optionator@0.9.4)(oxc-parser@0.151.0)(rolldown@1.2.13)(rollup-plugin-visualizer@7.1.1(rolldown@1.2.13)(rollup@4.64.2))(rollup@4.64.2)(srvx@1.0.5)(stylelint@17.16.0(supports-color@10.2.2)(typescript@6.0.3))(supports-color@10.2.2)(terser@5.50.0)(typescript@6.0.3)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(vue-tsc@3.3.12(typescript@6.0.3))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))(yaml@2.9.0) playwright-core: 1.64.0 vitest: 5.0.3(@types/node@26.3.0)(happy-dom@20.14.5)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0)) transitivePeerDependencies: @@ -9909,9 +9962,9 @@ snapshots: - vite - webpack - '@nuxt/vite-builder@4.6.0(1fb6b68867107f8b8718d4cf2b2e1897)': + '@nuxt/vite-builder@4.6.1(02a08455ae8173d1c37cdecf79cc97c6)': dependencies: - '@nuxt/kit': 4.6.0(@nuxt/schema@4.6.0)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))) + '@nuxt/kit': 4.6.1(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))) '@vitejs/plugin-vue': 6.0.9(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(vue@3.5.43(typescript@6.0.3)) '@vitejs/plugin-vue-jsx': 5.1.6(supports-color@10.2.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(vue@3.5.43(typescript@6.0.3)) autoprefixer: 10.6.1(postcss@8.5.29) @@ -9927,7 +9980,7 @@ snapshots: knitwork: 1.3.0 mocked-exports: 0.1.1 my-bad: 0.2.11(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0)) - nuxt: 4.6.0(@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.153.0)(@types/node@26.3.0)(@vercel/blob@2.8.1)(@vue/compiler-sfc@3.5.43)(acorn@8.18.0)(confbox@0.3.1)(db0@0.3.4)(dotenv@17.4.2)(esbuild@0.28.2)(eslint@10.12.0(jiti@2.7.0)(supports-color@10.2.2))(giget@3.3.1)(ioredis@5.11.1(supports-color@10.2.2))(lightningcss@1.33.0)(meow@14.1.0)(mlly@1.8.2)(optionator@0.9.4)(oxc-parser@0.151.0)(rolldown@1.2.13)(rollup-plugin-visualizer@7.1.1(rolldown@1.2.13)(rollup@4.64.2))(rollup@4.64.2)(srvx@1.0.5)(stylelint@17.16.0(supports-color@10.2.2)(typescript@6.0.3))(supports-color@10.2.2)(terser@5.50.0)(typescript@6.0.3)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(vue-tsc@3.3.12(typescript@6.0.3))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))(yaml@2.9.0) + nuxt: 4.6.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)))(@oxc-project/types@0.153.0)(@types/node@26.3.0)(@vercel/blob@2.8.1)(@vue/compiler-sfc@3.5.43)(acorn@8.18.0)(confbox@0.3.1)(db0@0.3.4)(dotenv@17.4.2)(esbuild@0.28.2)(eslint@10.12.0(jiti@2.7.0)(supports-color@10.2.2))(giget@3.3.1)(ioredis@5.11.1(supports-color@10.2.2))(lightningcss@1.33.0)(meow@14.1.0)(mlly@1.8.2)(optionator@0.9.4)(oxc-parser@0.151.0)(rolldown@1.2.13)(rollup-plugin-visualizer@7.1.1(rolldown@1.2.13)(rollup@4.64.2))(rollup@4.64.2)(srvx@1.0.5)(stylelint@17.16.0(supports-color@10.2.2)(typescript@6.0.3))(supports-color@10.2.2)(terser@5.50.0)(typescript@6.0.3)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(vue-tsc@3.3.12(typescript@6.0.3))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))(yaml@2.9.0) pathe: 2.0.3 pkg-types: 2.3.3 postcss: 8.5.29 @@ -9983,15 +10036,15 @@ snapshots: - webpack - yaml - '@nuxt/vite-server@4.6.0(a956d687a2eb3d8272d2649890bd6d4b)': + '@nuxt/vite-server@4.6.1(a05c8249d155d2f1b4f9c959f7fe15dc)': dependencies: - '@nuxt/kit': 4.6.0(@nuxt/schema@4.6.0)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))) + '@nuxt/kit': 4.6.1(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))) clickable-path: 0.1.1 defu: 6.1.7 exsolve: 1.1.3 mocked-exports: 0.1.1 my-bad: 0.2.11(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0)) - nuxt: 4.6.0(@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.153.0)(@types/node@26.3.0)(@vercel/blob@2.8.1)(@vue/compiler-sfc@3.5.43)(acorn@8.18.0)(confbox@0.3.1)(db0@0.3.4)(dotenv@17.4.2)(esbuild@0.28.2)(eslint@10.12.0(jiti@2.7.0)(supports-color@10.2.2))(giget@3.3.1)(ioredis@5.11.1(supports-color@10.2.2))(lightningcss@1.33.0)(meow@14.1.0)(mlly@1.8.2)(optionator@0.9.4)(oxc-parser@0.151.0)(rolldown@1.2.13)(rollup-plugin-visualizer@7.1.1(rolldown@1.2.13)(rollup@4.64.2))(rollup@4.64.2)(srvx@1.0.5)(stylelint@17.16.0(supports-color@10.2.2)(typescript@6.0.3))(supports-color@10.2.2)(terser@5.50.0)(typescript@6.0.3)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(vue-tsc@3.3.12(typescript@6.0.3))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))(yaml@2.9.0) + nuxt: 4.6.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)))(@oxc-project/types@0.153.0)(@types/node@26.3.0)(@vercel/blob@2.8.1)(@vue/compiler-sfc@3.5.43)(acorn@8.18.0)(confbox@0.3.1)(db0@0.3.4)(dotenv@17.4.2)(esbuild@0.28.2)(eslint@10.12.0(jiti@2.7.0)(supports-color@10.2.2))(giget@3.3.1)(ioredis@5.11.1(supports-color@10.2.2))(lightningcss@1.33.0)(meow@14.1.0)(mlly@1.8.2)(optionator@0.9.4)(oxc-parser@0.151.0)(rolldown@1.2.13)(rollup-plugin-visualizer@7.1.1(rolldown@1.2.13)(rollup@4.64.2))(rollup@4.64.2)(srvx@1.0.5)(stylelint@17.16.0(supports-color@10.2.2)(typescript@6.0.3))(supports-color@10.2.2)(terser@5.50.0)(typescript@6.0.3)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(vue-tsc@3.3.12(typescript@6.0.3))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))(yaml@2.9.0) pathe: 2.0.3 rou3: 0.9.2 srvx: 1.0.5 @@ -10010,9 +10063,9 @@ snapshots: - rolldown - unplugin - '@nuxtjs/color-mode@4.0.1(@nuxt/schema@4.6.0)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29)))': + '@nuxtjs/color-mode@4.0.1(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29)))': dependencies: - '@nuxt/kit': 4.6.0(@nuxt/schema@4.6.0)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))) + '@nuxt/kit': 4.6.0(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))) exsolve: 1.1.3 pathe: 2.0.3 pkg-types: 2.3.3 @@ -10045,9 +10098,9 @@ snapshots: - magicast - vitest - '@nuxtjs/plausible@4.0.0(@nuxt/schema@4.6.0)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29)))': + '@nuxtjs/plausible@4.0.0(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29)))': dependencies: - '@nuxt/kit': 4.6.0(@nuxt/schema@4.6.0)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))) + '@nuxt/kit': 4.6.0(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))) '@plausible-analytics/tracker': 0.4.6 defu: 6.1.7 ufo: 1.6.4 @@ -10847,9 +10900,9 @@ snapshots: - ocache - srvx - '@unocss/nuxt@66.10.5(@nuxt/schema@4.6.0)(@unocss/postcss@66.10.5(postcss@8.5.29))(cac@7.0.0)(confbox@0.3.1)(dotenv@17.4.2)(esbuild@0.28.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(rollup@4.64.2)(srvx@1.0.5)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29)))(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))': + '@unocss/nuxt@66.10.5(@nuxt/schema@4.6.1)(@unocss/postcss@66.10.5(postcss@8.5.29))(cac@7.0.0)(confbox@0.3.1)(dotenv@17.4.2)(esbuild@0.28.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(rollup@4.64.2)(srvx@1.0.5)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29)))(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))': dependencies: - '@nuxt/kit': 4.6.0(@nuxt/schema@4.6.0)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))) + '@nuxt/kit': 4.6.0(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))) '@unocss/config': 66.10.5 '@unocss/core': 66.10.5 '@unocss/preset-attributify': 66.10.5 @@ -13976,9 +14029,9 @@ snapshots: dependencies: boolbase: 1.0.0 - nuxt-csurf@1.6.6(@nuxt/schema@4.6.0)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))): + nuxt-csurf@1.6.6(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))): dependencies: - '@nuxt/kit': 4.6.0(@nuxt/schema@4.6.0)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))) + '@nuxt/kit': 4.6.0(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))) defu: 6.1.7 uncsrf: 1.2.0 transitivePeerDependencies: @@ -13993,10 +14046,10 @@ snapshots: - rolldown - unplugin - nuxt-og-image@6.10.3(e4c727fcff387775aed0d04f26e35207): + nuxt-og-image@6.10.3(a0d2c756dd08d530f662428b658e3a9f): dependencies: '@clack/prompts': 1.8.1 - '@nuxt/kit': 4.6.0(@nuxt/schema@4.6.0)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))) + '@nuxt/kit': 4.6.0(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))) '@unhead/vue': 3.4.2(@oxc-project/types@0.153.0)(esbuild@0.28.2)(lightningcss@1.33.0)(oxc-parser@0.151.0)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(vue@3.5.43(typescript@6.0.3))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29)) '@vue/compiler-sfc': 3.5.43 chrome-launcher: 1.2.1(supports-color@10.2.2) @@ -14009,8 +14062,8 @@ snapshots: magic-string: 1.4.3 magicast: 0.5.5 mocked-exports: 0.1.1 - nuxt-site-config: 4.2.3(0760602f909539b17b91aab7df2450e5) - nuxtseo-shared: 5.3.16(c30deeca8e3575880c1b5349a08337a3) + nuxt-site-config: 4.2.3(44cd2d855cb6abf4969f24790eef60a2) + nuxtseo-shared: 5.3.16(74226eafeacdc088d2fbbb4aa74513f5) nypm: 0.6.10 object-identity: 0.2.3 ofetch: 1.5.1 @@ -14058,12 +14111,12 @@ snapshots: - vue - webpack - nuxt-security@2.6.0(@nuxt/schema@4.6.0)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(rollup@4.64.2)(supports-color@10.2.2)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))): + nuxt-security@2.6.0(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(rollup@4.64.2)(supports-color@10.2.2)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))): dependencies: - '@nuxt/kit': 4.6.0(@nuxt/schema@4.6.0)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))) + '@nuxt/kit': 4.6.0(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))) basic-auth: 2.0.1 defu: 6.1.7 - nuxt-csurf: 1.6.6(@nuxt/schema@4.6.0)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))) + nuxt-csurf: 1.6.6(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))) pathe: 2.0.3 unplugin-remove: 1.0.3(rollup@4.64.2)(supports-color@10.2.2) xss: 1.0.15 @@ -14081,9 +14134,9 @@ snapshots: - supports-color - unplugin - nuxt-site-config-kit@4.2.3(@nuxt/schema@4.6.0)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29)))(vue@3.5.43(typescript@6.0.3)): + nuxt-site-config-kit@4.2.3(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29)))(vue@3.5.43(typescript@6.0.3)): dependencies: - '@nuxt/kit': 4.6.0(@nuxt/schema@4.6.0)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))) + '@nuxt/kit': 4.6.0(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))) site-config-stack: 4.2.3(vue@3.5.43(typescript@6.0.3)) std-env: 4.3.0 ufo: 1.6.4 @@ -14100,15 +14153,15 @@ snapshots: - unplugin - vue - nuxt-site-config@4.2.3(0760602f909539b17b91aab7df2450e5): + nuxt-site-config@4.2.3(44cd2d855cb6abf4969f24790eef60a2): dependencies: '@nuxt/devalue': 2.0.2 - '@nuxt/kit': 4.6.0(@nuxt/schema@4.6.0)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))) + '@nuxt/kit': 4.6.0(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))) consola: 3.4.2 defu: 6.1.7 h3: 1.15.11 - nuxt-site-config-kit: 4.2.3(@nuxt/schema@4.6.0)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29)))(vue@3.5.43(typescript@6.0.3)) - nuxtseo-shared: 5.3.16(c30deeca8e3575880c1b5349a08337a3) + nuxt-site-config-kit: 4.2.3(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29)))(vue@3.5.43(typescript@6.0.3)) + nuxtseo-shared: 5.3.16(74226eafeacdc088d2fbbb4aa74513f5) pathe: 2.0.3 pkg-types: 2.3.3 site-config-stack: 4.2.3(vue@3.5.43(typescript@6.0.3)) @@ -14129,19 +14182,19 @@ snapshots: - vite - zod - nuxt@4.6.0(@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.153.0)(@types/node@26.3.0)(@vercel/blob@2.8.1)(@vue/compiler-sfc@3.5.43)(acorn@8.18.0)(confbox@0.3.1)(db0@0.3.4)(dotenv@17.4.2)(esbuild@0.28.2)(eslint@10.12.0(jiti@2.7.0)(supports-color@10.2.2))(giget@3.3.1)(ioredis@5.11.1(supports-color@10.2.2))(lightningcss@1.33.0)(meow@14.1.0)(mlly@1.8.2)(optionator@0.9.4)(oxc-parser@0.151.0)(rolldown@1.2.13)(rollup-plugin-visualizer@7.1.1(rolldown@1.2.13)(rollup@4.64.2))(rollup@4.64.2)(srvx@1.0.5)(stylelint@17.16.0(supports-color@10.2.2)(typescript@6.0.3))(supports-color@10.2.2)(terser@5.50.0)(typescript@6.0.3)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(vue-tsc@3.3.12(typescript@6.0.3))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))(yaml@2.9.0): + nuxt@4.6.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)))(@oxc-project/types@0.153.0)(@types/node@26.3.0)(@vercel/blob@2.8.1)(@vue/compiler-sfc@3.5.43)(acorn@8.18.0)(confbox@0.3.1)(db0@0.3.4)(dotenv@17.4.2)(esbuild@0.28.2)(eslint@10.12.0(jiti@2.7.0)(supports-color@10.2.2))(giget@3.3.1)(ioredis@5.11.1(supports-color@10.2.2))(lightningcss@1.33.0)(meow@14.1.0)(mlly@1.8.2)(optionator@0.9.4)(oxc-parser@0.151.0)(rolldown@1.2.13)(rollup-plugin-visualizer@7.1.1(rolldown@1.2.13)(rollup@4.64.2))(rollup@4.64.2)(srvx@1.0.5)(stylelint@17.16.0(supports-color@10.2.2)(typescript@6.0.3))(supports-color@10.2.2)(terser@5.50.0)(typescript@6.0.3)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(vue-tsc@3.3.12(typescript@6.0.3))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))(yaml@2.9.0): dependencies: - '@dxup/nuxt': 0.5.10(@nuxt/schema@4.6.0)(confbox@0.3.1)(dotenv@17.4.2)(esbuild@0.28.2)(giget@3.3.1)(jiti@2.7.0)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29)) + '@dxup/nuxt': 0.5.10(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(esbuild@0.28.2)(giget@3.3.1)(jiti@2.7.0)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29)) '@jridgewell/trace-mapping': 0.3.31 - '@nuxt/cli': '@nuxt/cli-nightly@4.0.0-2610081559-2ea01d2(@nuxt/schema@4.6.0)(jiti@2.7.0)(oxc-parser@0.151.0)(rolldown@1.2.13)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))' + '@nuxt/cli': 4.0.1(@nuxt/schema@4.6.1)(jiti@2.7.0)(oxc-parser@0.151.0)(rolldown@1.2.13)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0)) '@nuxt/devalue': 2.0.2 - '@nuxt/devtools': 3.4.2(@nuxt/schema@4.6.0)(@vercel/blob@2.8.1)(confbox@0.3.1)(db0@0.3.4)(dotenv@17.4.2)(giget@3.3.1)(ioredis@5.11.1(supports-color@10.2.2))(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(supports-color@10.2.2)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29)))(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(vue@3.5.43(typescript@6.0.3)) - '@nuxt/kit': 4.6.0(@nuxt/schema@4.6.0)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))) - '@nuxt/nitro-server': 4.6.0(f987d9b4e3d1d8def1c9b47a045e4fba) - '@nuxt/schema': 4.6.0 - '@nuxt/telemetry': 2.9.1(@nuxt/kit@4.6.0(@nuxt/schema@4.6.0)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29)))) - '@nuxt/vite-builder': 4.6.0(1fb6b68867107f8b8718d4cf2b2e1897) - '@nuxt/vite-server': 4.6.0(a956d687a2eb3d8272d2649890bd6d4b) + '@nuxt/devtools': 3.4.2(@nuxt/schema@4.6.1)(@vercel/blob@2.8.1)(confbox@0.3.1)(db0@0.3.4)(dotenv@17.4.2)(giget@3.3.1)(ioredis@5.11.1(supports-color@10.2.2))(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(supports-color@10.2.2)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29)))(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(vue@3.5.43(typescript@6.0.3)) + '@nuxt/kit': 4.6.1(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))) + '@nuxt/nitro-server': 4.6.1(cf1b3aa2abcb4adf77e5cd9dd6644b23) + '@nuxt/schema': 4.6.1 + '@nuxt/telemetry': 2.9.1(@nuxt/kit@4.6.1(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29)))) + '@nuxt/vite-builder': 4.6.1(02a08455ae8173d1c37cdecf79cc97c6) + '@nuxt/vite-server': 4.6.1(a05c8249d155d2f1b4f9c959f7fe15dc) '@unhead/vue': 3.4.2(@oxc-project/types@0.153.0)(esbuild@0.28.2)(lightningcss@1.33.0)(oxc-parser@0.151.0)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(vue@3.5.43(typescript@6.0.3))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29)) '@vue/shared': 3.5.43 chokidar: 5.0.0 @@ -14282,16 +14335,16 @@ snapshots: - xml2js - yaml - nuxtseo-shared@5.3.16(c30deeca8e3575880c1b5349a08337a3): + nuxtseo-shared@5.3.16(74226eafeacdc088d2fbbb4aa74513f5): dependencies: '@clack/prompts': 1.8.1 - '@nuxt/devtools-kit': 4.0.0-alpha.7(@nuxt/schema@4.6.0)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29)))(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0)) - '@nuxt/kit': 4.6.0(@nuxt/schema@4.6.0)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))) - '@nuxt/schema': 4.6.0 + '@nuxt/devtools-kit': 4.0.0-alpha.7(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29)))(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0)) + '@nuxt/kit': 4.6.0(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))) + '@nuxt/schema': 4.6.1 birpc: 4.2.0 consola: 3.4.2 defu: 6.1.7 - nuxt: 4.6.0(@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.153.0)(@types/node@26.3.0)(@vercel/blob@2.8.1)(@vue/compiler-sfc@3.5.43)(acorn@8.18.0)(confbox@0.3.1)(db0@0.3.4)(dotenv@17.4.2)(esbuild@0.28.2)(eslint@10.12.0(jiti@2.7.0)(supports-color@10.2.2))(giget@3.3.1)(ioredis@5.11.1(supports-color@10.2.2))(lightningcss@1.33.0)(meow@14.1.0)(mlly@1.8.2)(optionator@0.9.4)(oxc-parser@0.151.0)(rolldown@1.2.13)(rollup-plugin-visualizer@7.1.1(rolldown@1.2.13)(rollup@4.64.2))(rollup@4.64.2)(srvx@1.0.5)(stylelint@17.16.0(supports-color@10.2.2)(typescript@6.0.3))(supports-color@10.2.2)(terser@5.50.0)(typescript@6.0.3)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(vue-tsc@3.3.12(typescript@6.0.3))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))(yaml@2.9.0) + nuxt: 4.6.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)))(@oxc-project/types@0.153.0)(@types/node@26.3.0)(@vercel/blob@2.8.1)(@vue/compiler-sfc@3.5.43)(acorn@8.18.0)(confbox@0.3.1)(db0@0.3.4)(dotenv@17.4.2)(esbuild@0.28.2)(eslint@10.12.0(jiti@2.7.0)(supports-color@10.2.2))(giget@3.3.1)(ioredis@5.11.1(supports-color@10.2.2))(lightningcss@1.33.0)(meow@14.1.0)(mlly@1.8.2)(optionator@0.9.4)(oxc-parser@0.151.0)(rolldown@1.2.13)(rollup-plugin-visualizer@7.1.1(rolldown@1.2.13)(rollup@4.64.2))(rollup@4.64.2)(srvx@1.0.5)(stylelint@17.16.0(supports-color@10.2.2)(typescript@6.0.3))(supports-color@10.2.2)(terser@5.50.0)(typescript@6.0.3)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(vue-tsc@3.3.12(typescript@6.0.3))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))(yaml@2.9.0) nypm: 0.6.10 ofetch: 1.5.1 pathe: 2.0.3 @@ -14302,7 +14355,7 @@ snapshots: ufo: 1.6.4 vue: 3.5.43(typescript@6.0.3) optionalDependencies: - nuxt-site-config: 4.2.3(0760602f909539b17b91aab7df2450e5) + nuxt-site-config: 4.2.3(44cd2d855cb6abf4969f24790eef60a2) zod: 4.6.2 transitivePeerDependencies: - confbox @@ -16041,7 +16094,7 @@ snapshots: typescript: 6.0.3 vue-tsc: 3.3.12(typescript@6.0.3) - vite-plugin-inspect@11.4.1(@nuxt/kit@4.6.0(@nuxt/schema@4.6.0)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))))(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0)): + vite-plugin-inspect@11.4.1(@nuxt/kit@4.6.0(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))))(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0)): dependencies: ansis: 4.3.1 error-stack-parser-es: 1.0.5 @@ -16054,7 +16107,7 @@ snapshots: vite: 8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0) vite-dev-rpc: 2.0.0(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0)) optionalDependencies: - '@nuxt/kit': 4.6.0(@nuxt/schema@4.6.0)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))) + '@nuxt/kit': 4.6.0(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.151.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.64.2)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(webpack@5.109.2(cssnano@9.4.0(postcss@8.5.29))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.29))) vite-plugin-vue-tracer@1.5.0(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0))(vue@3.5.43(typescript@6.0.3)): dependencies: @@ -16083,7 +16136,7 @@ snapshots: vitest-environment-nuxt@2.0.0: dependencies: - '@nuxt/test-utils': 4.3.3(55b3b0c173b5558469b93234c565b8d4) + '@nuxt/test-utils': 4.3.3(cc69a788dea7e4cb8a28f3c4d17cf640) vitest@5.0.3(@types/node@26.3.0)(happy-dom@20.14.5)(vite@8.3.4(@types/node@26.3.0)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.50.0)(yaml@2.9.0)): dependencies: diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 453902fa..35237844 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -5,18 +5,22 @@ savePrefix: '' shellEmulator: true minimumReleaseAgeExclude: - - '@nuxt/cli-nightly' - '@nuxt/cli' - '@comark/nuxt@0.6.1' - '@comark/vue@0.6.1' - comark@0.6.1 - '@bsky/sdk@1.0.0' - airspace@0.1.3 + - '@nuxt/kit@4.6.1' + - '@nuxt/nitro-server@4.6.1' + - '@nuxt/schema@4.6.1' + - '@nuxt/vite-builder@4.6.1' + - '@nuxt/vite-server@4.6.1' + - nuxt@4.6.1 overrides: # comark-content@0.4.0 still pins ^0.6.2 comark: 0.7.0 - '@nuxt/cli': 'npm:@nuxt/cli-nightly@4.0.0-2610081559-2ea01d2' rolldown: 1.2.13 # airspace and @atproto/lex each pull their own copy of these; without the # overrides the server bundle ships both. diff --git a/server/api/admin/ama/[rkey].delete.ts b/server/api/admin/ama/[rkey].delete.ts index 066cff52..187e7356 100644 --- a/server/api/admin/ama/[rkey].delete.ts +++ b/server/api/admin/ama/[rkey].delete.ts @@ -1,3 +1,5 @@ +import { defineEventHandler, getRouterParam } from 'nuxt/server' + import { deleteAdminRecord } from '../../../utils/admin/crud' export default defineEventHandler(event => { diff --git a/server/api/admin/ama/[rkey].get.ts b/server/api/admin/ama/[rkey].get.ts index 8a4a51e6..3f0c1e0e 100644 --- a/server/api/admin/ama/[rkey].get.ts +++ b/server/api/admin/ama/[rkey].get.ts @@ -1,3 +1,5 @@ +import { defineEventHandler, getRouterParam } from 'nuxt/server' + import { getAdminRecord } from '../../../utils/admin/crud' import { viewAma } from '../../../utils/admin/ama-record' diff --git a/server/api/admin/ama/[rkey].patch.ts b/server/api/admin/ama/[rkey].patch.ts index bfa09d30..27428000 100644 --- a/server/api/admin/ama/[rkey].patch.ts +++ b/server/api/admin/ama/[rkey].patch.ts @@ -1,9 +1,11 @@ +import { createError, defineEventHandler, getRouterParam, readBody } from 'nuxt/server' + import { saveAmaDraft } from '../../../utils/admin/ama-record' import type { AmaUpdate } from '../../../utils/admin/ama-record' export default defineEventHandler(async event => { const rkey = getRouterParam(event, 'rkey') - if (!rkey) throw createError({ statusCode: 400, statusMessage: 'Missing rkey.' }) + if (!rkey) throw createError({ status: 400, statusText: 'Missing rkey.' }) const body = await readBody(event) return saveAmaDraft(event, rkey, body) diff --git a/server/api/admin/ama/[rkey]/publish/bluesky.post.ts b/server/api/admin/ama/[rkey]/publish/bluesky.post.ts index 675ff82d..22bc8bfa 100644 --- a/server/api/admin/ama/[rkey]/publish/bluesky.post.ts +++ b/server/api/admin/ama/[rkey]/publish/bluesky.post.ts @@ -1,3 +1,5 @@ +import { createError, defineEventHandler, getRouterParam, readBody } from 'nuxt/server' + import { ensureNotAlreadyPublished, mergePublishedLink, prepareAmaImage } from '../../../../../utils/admin/ama-record' import { blueskyThread, buildEntityLookup } from '../../../../../utils/admin/ama-resolve' import { publishBlueskyThread } from '../../../../../utils/admin/ama-publish' @@ -12,18 +14,18 @@ interface Body extends AmaUpdate { export default defineEventHandler(async event => { const rkey = getRouterParam(event, 'rkey') - if (!rkey) throw createError({ statusCode: 400, statusMessage: 'Missing rkey.' }) + if (!rkey) throw createError({ status: 400, statusText: 'Missing rkey.' }) const body = await readBody(event) if (!body.question || !body.posts?.length) { - throw createError({ statusCode: 422, statusMessage: 'question and at least one post are required.' }) + throw createError({ status: 422, statusText: 'question and at least one post are required.' }) } await ensureNotAlreadyPublished(event, rkey, 'bluesky', Boolean(body.force)) const entities = await buildEntityLookup(event) const image = await prepareAmaImage(event, rkey, body) - const { url } = await publishBlueskyThread(event, blueskyThread(body.posts, entities), image, getImageAltText(body.question, body.backgroundStyle ?? undefined)) + const { url } = await publishBlueskyThread(blueskyThread(body.posts, entities), image, getImageAltText(body.question, body.backgroundStyle ?? undefined)) await mergePublishedLink(event, rkey, 'bluesky', url, body) return { success: true, url } diff --git a/server/api/admin/ama/[rkey]/publish/linkedin.post.ts b/server/api/admin/ama/[rkey]/publish/linkedin.post.ts index 9cfe2c48..b3ec818b 100644 --- a/server/api/admin/ama/[rkey]/publish/linkedin.post.ts +++ b/server/api/admin/ama/[rkey]/publish/linkedin.post.ts @@ -1,3 +1,5 @@ +import { createError, defineEventHandler, getRouterParam, readBody } from 'nuxt/server' + import { ensureNotAlreadyPublished, mergePublishedLink, prepareAmaImage } from '../../../../../utils/admin/ama-record' import { buildEntityLookup, platformText } from '../../../../../utils/admin/ama-resolve' import { publishLinkedIn } from '../../../../../utils/admin/ama-publish' @@ -12,17 +14,16 @@ interface Body extends AmaUpdate { export default defineEventHandler(async event => { const rkey = getRouterParam(event, 'rkey') - if (!rkey) throw createError({ statusCode: 400, statusMessage: 'Missing rkey.' }) + if (!rkey) throw createError({ status: 400, statusText: 'Missing rkey.' }) const body = await readBody(event) if (!body.question || !body.posts?.length) { - throw createError({ statusCode: 422, statusMessage: 'question and at least one post are required.' }) + throw createError({ status: 422, statusText: 'question and at least one post are required.' }) } await ensureNotAlreadyPublished(event, rkey, 'linkedin', Boolean(body.force)) const entities = await buildEntityLookup(event) const { url } = await publishLinkedIn( - event, platformText(body.posts, 'linkedin', entities), await prepareAmaImage(event, rkey, body), getImageAltText(body.question, body.backgroundStyle ?? undefined), diff --git a/server/api/admin/ama/[rkey]/publish/mastodon.post.ts b/server/api/admin/ama/[rkey]/publish/mastodon.post.ts index dc4f3ddf..b4b673a5 100644 --- a/server/api/admin/ama/[rkey]/publish/mastodon.post.ts +++ b/server/api/admin/ama/[rkey]/publish/mastodon.post.ts @@ -1,3 +1,5 @@ +import { createError, defineEventHandler, getRouterParam, readBody } from 'nuxt/server' + import { ensureNotAlreadyPublished, mergePublishedLink, prepareAmaImage } from '../../../../../utils/admin/ama-record' import { buildEntityLookup, platformText } from '../../../../../utils/admin/ama-resolve' import { publishMastodon } from '../../../../../utils/admin/ama-publish' @@ -12,17 +14,16 @@ interface Body extends AmaUpdate { export default defineEventHandler(async event => { const rkey = getRouterParam(event, 'rkey') - if (!rkey) throw createError({ statusCode: 400, statusMessage: 'Missing rkey.' }) + if (!rkey) throw createError({ status: 400, statusText: 'Missing rkey.' }) const body = await readBody(event) if (!body.question || !body.posts?.length) { - throw createError({ statusCode: 422, statusMessage: 'question and at least one post are required.' }) + throw createError({ status: 422, statusText: 'question and at least one post are required.' }) } await ensureNotAlreadyPublished(event, rkey, 'mastodon', Boolean(body.force)) const entities = await buildEntityLookup(event) const { url } = await publishMastodon( - event, platformText(body.posts, 'mastodon', entities), await prepareAmaImage(event, rkey, body), getImageAltText(body.question, body.backgroundStyle ?? undefined), diff --git a/server/api/admin/ama/[rkey]/publish/youtube-shorts.post.ts b/server/api/admin/ama/[rkey]/publish/youtube-shorts.post.ts index 4ce466d0..332bca2e 100644 --- a/server/api/admin/ama/[rkey]/publish/youtube-shorts.post.ts +++ b/server/api/admin/ama/[rkey]/publish/youtube-shorts.post.ts @@ -2,7 +2,7 @@ * Multipart endpoint: `payload` (JSON) + `video` (binary). The video is * uploaded straight to YouTube without persisting on the PDS. */ -import { readMultipartFormData } from 'h3' +import { createError, defineEventHandler, getRouterParam } from 'nuxt/server' import { ensureNotAlreadyPublished, mergePublishedLink } from '../../../../../utils/admin/ama-record' import { publishYouTubeShorts } from '../../../../../utils/admin/ama-youtube' @@ -17,34 +17,32 @@ interface Payload extends AmaUpdate { export default defineEventHandler(async event => { const rkey = getRouterParam(event, 'rkey') - if (!rkey) throw createError({ statusCode: 400, statusMessage: 'Missing rkey.' }) + if (!rkey) throw createError({ status: 400, statusText: 'Missing rkey.' }) - const parts = await readMultipartFormData(event) - const payloadPart = parts?.find(p => p.name === 'payload') - const videoPart = parts?.find(p => p.name === 'video') - if (!payloadPart || !videoPart) { - throw createError({ statusCode: 422, statusMessage: '`payload` (JSON) and `video` (binary) parts are required.' }) + const form = await event.req.formData() + const payloadPart = form.get('payload') + const videoPart = form.get('video') + if (!payloadPart || !(videoPart instanceof Blob)) { + throw createError({ status: 422, statusText: '`payload` (JSON) and `video` (binary) parts are required.' }) } let body: Payload try { - body = JSON.parse(payloadPart.data.toString('utf8')) as Payload + body = JSON.parse(typeof payloadPart === 'string' ? payloadPart : await payloadPart.text()) as Payload } catch (err) { - throw createError({ statusCode: 422, statusMessage: `Invalid payload JSON: ${err instanceof Error ? err.message : err}` }) + throw createError({ status: 422, statusText: `Invalid payload JSON: ${err instanceof Error ? err.message : err}` }) } if (!body.question || !body.answer || !body.posts?.length) { - throw createError({ statusCode: 422, statusMessage: 'question, answer, and at least one post are required.' }) + throw createError({ status: 422, statusText: 'question, answer, and at least one post are required.' }) } await ensureNotAlreadyPublished(event, rkey, 'youtubeShorts', Boolean(body.force)) - // Use the explicit slice form so we ship only the multipart-parsed video - // bytes, not the surrounding bytes of Node's shared Buffer pool. - const { url } = await publishYouTubeShorts(event, { + const { url } = await publishYouTubeShorts({ question: body.question, answer: body.answer, - videoBuffer: new Uint8Array(videoPart.data.buffer, videoPart.data.byteOffset, videoPart.data.byteLength), + videoBuffer: new Uint8Array(await videoPart.arrayBuffer()), videoMimeType: videoPart.type || 'video/webm', }) diff --git a/server/api/admin/ama/index.get.ts b/server/api/admin/ama/index.get.ts index ce5b205e..bb1c815d 100644 --- a/server/api/admin/ama/index.get.ts +++ b/server/api/admin/ama/index.get.ts @@ -1,3 +1,5 @@ +import { defineEventHandler } from 'nuxt/server' + import { listAdminRecords } from '../../../utils/admin/crud' import { viewAma } from '../../../utils/admin/ama-record' diff --git a/server/api/admin/auth/callback.get.ts b/server/api/admin/auth/callback.get.ts index d1932cfa..49133f8f 100644 --- a/server/api/admin/auth/callback.get.ts +++ b/server/api/admin/auth/callback.get.ts @@ -1,3 +1,4 @@ +import { createError, defineEventHandler, sendRedirect, useRuntimeConfig } from 'nuxt/server' import { Client } from '@atproto/lex' import { com } from '@bsky/sdk/lexicons' @@ -8,17 +9,15 @@ import { } from '../../../utils/admin/oauth' export default defineEventHandler(async event => { - const expectedHandle = useRuntimeConfig(event).atproto.handle + const expectedHandle = useRuntimeConfig().atproto.handle const oauth = await getOauth(event) - const params = new URLSearchParams(getQuery(event) as Record) - let session try { - ;({ session } = await oauth.callback(params)) + ;({ session } = await oauth.callback(event.url.searchParams)) } catch (err) { console.error('[admin] OAuth callback failed:', err) - throw createError({ statusCode: 401, statusMessage: 'OAuth callback failed.' }) + throw createError({ status: 401, statusText: 'OAuth callback failed.' }) } const { handle } = await new Client(session).call(com.atproto.repo.describeRepo, { repo: session.did }) @@ -27,8 +26,8 @@ export default defineEventHandler(async event => { await oauth.revoke(session.did).catch(() => {}) await clearAdminSessionCookie(event) throw createError({ - statusCode: 403, - statusMessage: `OAuth session belongs to ${handle}; only ${expectedHandle} can access /admin.`, + status: 403, + statusText: `OAuth session belongs to ${handle}; only ${expectedHandle} can access /admin.`, }) } diff --git a/server/api/admin/auth/logout.post.ts b/server/api/admin/auth/logout.post.ts index fcc60081..4254f227 100644 --- a/server/api/admin/auth/logout.post.ts +++ b/server/api/admin/auth/logout.post.ts @@ -1,3 +1,5 @@ +import { defineEventHandler, sendRedirect } from 'nuxt/server' + import { clearAdminSessionCookie, getAdminSessionCookie, getOauth } from '../../../utils/admin/oauth' export default defineEventHandler(async event => { diff --git a/server/api/admin/blobs.post.ts b/server/api/admin/blobs.post.ts index 5a82c66e..895177fc 100644 --- a/server/api/admin/blobs.post.ts +++ b/server/api/admin/blobs.post.ts @@ -1,3 +1,5 @@ +import { createError, defineEventHandler, getRequestHeader } from 'nuxt/server' + import { requireAdminAirspace } from '../../utils/airspace' /** @@ -7,18 +9,11 @@ import { requireAdminAirspace } from '../../utils/airspace' */ export default defineEventHandler(async event => { const contentType = getRequestHeader(event, 'content-type') || 'application/octet-stream' - const buf = await readRawBody(event, false) - if (!buf || !buf.length) { - throw createError({ statusCode: 400, statusMessage: 'Empty body.' }) + const bytes = new Uint8Array(await event.req.arrayBuffer()) + if (!bytes.length) { + throw createError({ status: 400, statusText: 'Empty body.' }) } - // Slice exactly what we read out of Node's shared Buffer pool, otherwise - // `new Uint8Array(buf)` views the entire pooled ArrayBuffer (including - // bytes from neighbouring allocations) and we'd upload that. - const bytes = buf instanceof Uint8Array - ? new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength) - : new Uint8Array(buf) - const airspace = await requireAdminAirspace(event) const { blob, aspectRatio } = await airspace.blobs.upload(bytes, { mimeType: contentType }) return { blob, ...(aspectRatio ? { aspectRatio } : {}) } diff --git a/server/api/admin/entities/[rkey].delete.ts b/server/api/admin/entities/[rkey].delete.ts index 2cf94f2e..09d024f5 100644 --- a/server/api/admin/entities/[rkey].delete.ts +++ b/server/api/admin/entities/[rkey].delete.ts @@ -1,3 +1,5 @@ +import { defineEventHandler, getRouterParam } from 'nuxt/server' + import { deleteAdminRecord } from '../../../utils/admin/crud' export default defineEventHandler(event => { diff --git a/server/api/admin/entities/[rkey].get.ts b/server/api/admin/entities/[rkey].get.ts index 5ff6a70a..20a2cec2 100644 --- a/server/api/admin/entities/[rkey].get.ts +++ b/server/api/admin/entities/[rkey].get.ts @@ -1,3 +1,5 @@ +import { defineEventHandler, getRouterParam } from 'nuxt/server' + import { getAdminRecord } from '../../../utils/admin/crud' export default defineEventHandler(event => { diff --git a/server/api/admin/entities/[rkey].put.ts b/server/api/admin/entities/[rkey].put.ts index 20197d2b..e11383ae 100644 --- a/server/api/admin/entities/[rkey].put.ts +++ b/server/api/admin/entities/[rkey].put.ts @@ -1,3 +1,5 @@ +import { defineEventHandler, getRouterParam, readBody } from 'nuxt/server' + import { updateAdminRecord } from '../../../utils/admin/crud' export default defineEventHandler(async event => { diff --git a/server/api/admin/entities/index.get.ts b/server/api/admin/entities/index.get.ts index 7e02c8ad..425280c6 100644 --- a/server/api/admin/entities/index.get.ts +++ b/server/api/admin/entities/index.get.ts @@ -1,3 +1,5 @@ +import { defineEventHandler } from 'nuxt/server' + import { listAdminRecords } from '../../../utils/admin/crud' export default defineEventHandler(event => { diff --git a/server/api/admin/entities/index.post.ts b/server/api/admin/entities/index.post.ts index 16d2445f..c579222a 100644 --- a/server/api/admin/entities/index.post.ts +++ b/server/api/admin/entities/index.post.ts @@ -1,3 +1,5 @@ +import { defineEventHandler, readBody } from 'nuxt/server' + import { createAdminRecord } from '../../../utils/admin/crud' export default defineEventHandler(async event => { diff --git a/server/api/admin/github-releases.get.ts b/server/api/admin/github-releases.get.ts index 375a3409..a85e0b7a 100644 --- a/server/api/admin/github-releases.get.ts +++ b/server/api/admin/github-releases.get.ts @@ -1,6 +1,9 @@ /** * List releases from danielroe/slides for the talk-editor slides datalist. */ +import { createError, defineEventHandler, useRuntimeConfig } from 'nuxt/server' +import { $fetch } from 'ofetch' + import { requireAdminSession } from '../../utils/admin/oauth' interface GitHubRelease { @@ -13,11 +16,11 @@ interface GitHubRelease { export default defineEventHandler(async event => { await requireAdminSession(event) - const config = useRuntimeConfig(event) + const config = useRuntimeConfig() if (!config.github.token) { throw createError({ - statusCode: 503, - statusMessage: 'GitHub token not configured (NUXT_GITHUB_TOKEN). Slides dropdown will be empty.', + status: 503, + statusText: 'GitHub token not configured (NUXT_GITHUB_TOKEN). Slides dropdown will be empty.', }) } @@ -44,8 +47,8 @@ export default defineEventHandler(async event => { catch (err) { console.error('[admin] github-releases fetch failed:', err) throw createError({ - statusCode: 502, - statusMessage: `GitHub API error: ${err instanceof Error ? err.message : String(err)}`, + status: 502, + statusText: `GitHub API error: ${err instanceof Error ? err.message : String(err)}`, }) } }) diff --git a/server/api/admin/invites/[rkey].delete.ts b/server/api/admin/invites/[rkey].delete.ts index 1c5d7eab..b4b1f5ca 100644 --- a/server/api/admin/invites/[rkey].delete.ts +++ b/server/api/admin/invites/[rkey].delete.ts @@ -1,3 +1,5 @@ +import { defineEventHandler, getRouterParam } from 'nuxt/server' + import { deleteAdminRecord } from '../../../utils/admin/crud' export default defineEventHandler(event => { diff --git a/server/api/admin/invites/[rkey].get.ts b/server/api/admin/invites/[rkey].get.ts index f6657c9b..49572b0e 100644 --- a/server/api/admin/invites/[rkey].get.ts +++ b/server/api/admin/invites/[rkey].get.ts @@ -1,3 +1,5 @@ +import { defineEventHandler, getRouterParam } from 'nuxt/server' + import { getAdminRecord } from '../../../utils/admin/crud' import { decryptInvite } from '../../../utils/admin/invites' diff --git a/server/api/admin/invites/[rkey].put.ts b/server/api/admin/invites/[rkey].put.ts index def3363f..13a51cb5 100644 --- a/server/api/admin/invites/[rkey].put.ts +++ b/server/api/admin/invites/[rkey].put.ts @@ -1,3 +1,5 @@ +import { createError, defineEventHandler, getRouterParam, readBody } from 'nuxt/server' + import { updateAdminRecord } from '../../../utils/admin/crud' import { encryptJSON } from '../../../utils/admin/encryption' @@ -11,7 +13,7 @@ interface Body { export default defineEventHandler(async event => { const body = await readBody(event) if (!body.slug || !body.repo) { - throw createError({ statusCode: 422, statusMessage: 'slug and repo are required.' }) + throw createError({ status: 422, statusText: 'slug and repo are required.' }) } return updateAdminRecord(event, 'invites', getRouterParam(event, 'rkey'), { encrypted: encryptJSON({ slug: body.slug, repo: body.repo }), diff --git a/server/api/admin/invites/index.get.ts b/server/api/admin/invites/index.get.ts index ddfb9fc7..62093c35 100644 --- a/server/api/admin/invites/index.get.ts +++ b/server/api/admin/invites/index.get.ts @@ -1,3 +1,5 @@ +import { defineEventHandler } from 'nuxt/server' + import { listAdminRecords } from '../../../utils/admin/crud' import { decryptInvite } from '../../../utils/admin/invites' diff --git a/server/api/admin/invites/index.post.ts b/server/api/admin/invites/index.post.ts index 49a1281a..37c8fffe 100644 --- a/server/api/admin/invites/index.post.ts +++ b/server/api/admin/invites/index.post.ts @@ -1,3 +1,5 @@ +import { createError, defineEventHandler, readBody } from 'nuxt/server' + import { createAdminRecord } from '../../../utils/admin/crud' import { encryptJSON } from '../../../utils/admin/encryption' @@ -10,7 +12,7 @@ interface Body { export default defineEventHandler(async event => { const body = await readBody(event) if (!body.slug || !body.repo) { - throw createError({ statusCode: 422, statusMessage: 'slug and repo are required.' }) + throw createError({ status: 422, statusText: 'slug and repo are required.' }) } return createAdminRecord(event, 'invites', { encrypted: encryptJSON({ slug: body.slug, repo: body.repo }), diff --git a/server/api/admin/location.get.ts b/server/api/admin/location.get.ts index 546b0c7a..43414fa6 100644 --- a/server/api/admin/location.get.ts +++ b/server/api/admin/location.get.ts @@ -1,3 +1,5 @@ +import { defineEventHandler } from 'nuxt/server' + import { requireAdminAirspace } from '../../utils/airspace' export default defineEventHandler(async event => { diff --git a/server/api/admin/location.put.ts b/server/api/admin/location.put.ts index 17193969..edca9b6b 100644 --- a/server/api/admin/location.put.ts +++ b/server/api/admin/location.put.ts @@ -1,3 +1,5 @@ +import { defineEventHandler, readBody } from 'nuxt/server' + import { invalidatePublicReads, requireAdminAirspace } from '../../utils/airspace' import { collections } from '#shared/collections' diff --git a/server/api/admin/project-categories/[rkey].delete.ts b/server/api/admin/project-categories/[rkey].delete.ts index 82355a64..e1003721 100644 --- a/server/api/admin/project-categories/[rkey].delete.ts +++ b/server/api/admin/project-categories/[rkey].delete.ts @@ -1,3 +1,5 @@ +import { defineEventHandler, getRouterParam } from 'nuxt/server' + import { deleteAdminRecord } from '../../../utils/admin/crud' export default defineEventHandler(event => { diff --git a/server/api/admin/project-categories/[rkey].get.ts b/server/api/admin/project-categories/[rkey].get.ts index d788dd86..a8b44116 100644 --- a/server/api/admin/project-categories/[rkey].get.ts +++ b/server/api/admin/project-categories/[rkey].get.ts @@ -1,3 +1,5 @@ +import { defineEventHandler, getRouterParam } from 'nuxt/server' + import { getAdminRecord } from '../../../utils/admin/crud' export default defineEventHandler(event => { diff --git a/server/api/admin/project-categories/[rkey].put.ts b/server/api/admin/project-categories/[rkey].put.ts index f329142c..035d8468 100644 --- a/server/api/admin/project-categories/[rkey].put.ts +++ b/server/api/admin/project-categories/[rkey].put.ts @@ -1,3 +1,5 @@ +import { defineEventHandler, getRouterParam, readBody } from 'nuxt/server' + import { updateAdminRecord } from '../../../utils/admin/crud' export default defineEventHandler(async event => { diff --git a/server/api/admin/project-categories/index.get.ts b/server/api/admin/project-categories/index.get.ts index 0d0b8775..c7ffb165 100644 --- a/server/api/admin/project-categories/index.get.ts +++ b/server/api/admin/project-categories/index.get.ts @@ -1,3 +1,5 @@ +import { defineEventHandler } from 'nuxt/server' + import { listAdminRecords } from '../../../utils/admin/crud' export default defineEventHandler(event => { diff --git a/server/api/admin/project-categories/index.post.ts b/server/api/admin/project-categories/index.post.ts index 5cde55b0..b4196784 100644 --- a/server/api/admin/project-categories/index.post.ts +++ b/server/api/admin/project-categories/index.post.ts @@ -1,3 +1,5 @@ +import { defineEventHandler, readBody } from 'nuxt/server' + import { createAdminRecord } from '../../../utils/admin/crud' export default defineEventHandler(async event => { diff --git a/server/api/admin/projects/[rkey].delete.ts b/server/api/admin/projects/[rkey].delete.ts index c4739fd8..5c88226a 100644 --- a/server/api/admin/projects/[rkey].delete.ts +++ b/server/api/admin/projects/[rkey].delete.ts @@ -1,3 +1,5 @@ +import { defineEventHandler, getRouterParam } from 'nuxt/server' + import { deleteAdminRecord } from '../../../utils/admin/crud' export default defineEventHandler(event => { diff --git a/server/api/admin/projects/[rkey].get.ts b/server/api/admin/projects/[rkey].get.ts index 3dc2ee6e..51d128e7 100644 --- a/server/api/admin/projects/[rkey].get.ts +++ b/server/api/admin/projects/[rkey].get.ts @@ -1,3 +1,5 @@ +import { defineEventHandler, getRouterParam } from 'nuxt/server' + import { getAdminRecord } from '../../../utils/admin/crud' export default defineEventHandler(event => { diff --git a/server/api/admin/projects/[rkey].put.ts b/server/api/admin/projects/[rkey].put.ts index 8464ce86..66606652 100644 --- a/server/api/admin/projects/[rkey].put.ts +++ b/server/api/admin/projects/[rkey].put.ts @@ -1,3 +1,5 @@ +import { defineEventHandler, getRouterParam, readBody } from 'nuxt/server' + import { updateAdminRecord } from '../../../utils/admin/crud' export default defineEventHandler(async event => { diff --git a/server/api/admin/projects/index.get.ts b/server/api/admin/projects/index.get.ts index 0a0eb8c4..002bf92b 100644 --- a/server/api/admin/projects/index.get.ts +++ b/server/api/admin/projects/index.get.ts @@ -1,3 +1,5 @@ +import { defineEventHandler } from 'nuxt/server' + import { listAdminRecords } from '../../../utils/admin/crud' export default defineEventHandler(event => { diff --git a/server/api/admin/projects/index.post.ts b/server/api/admin/projects/index.post.ts index 7e7c9141..7cad8b9b 100644 --- a/server/api/admin/projects/index.post.ts +++ b/server/api/admin/projects/index.post.ts @@ -1,3 +1,5 @@ +import { defineEventHandler, readBody } from 'nuxt/server' + import { createAdminRecord } from '../../../utils/admin/crud' export default defineEventHandler(async event => { diff --git a/server/api/admin/stats.get.ts b/server/api/admin/stats.get.ts index 97ce98db..2dff7d32 100644 --- a/server/api/admin/stats.get.ts +++ b/server/api/admin/stats.get.ts @@ -1,3 +1,5 @@ +import { defineEventHandler } from 'nuxt/server' + import { requireAdminAirspace } from '../../utils/airspace' export default defineEventHandler(async event => { diff --git a/server/api/admin/talk-groups/[rkey].delete.ts b/server/api/admin/talk-groups/[rkey].delete.ts index ac53b166..d8cd3370 100644 --- a/server/api/admin/talk-groups/[rkey].delete.ts +++ b/server/api/admin/talk-groups/[rkey].delete.ts @@ -1,3 +1,5 @@ +import { defineEventHandler, getRouterParam } from 'nuxt/server' + import { deleteAdminRecord } from '../../../utils/admin/crud' export default defineEventHandler(event => { diff --git a/server/api/admin/talk-groups/[rkey].get.ts b/server/api/admin/talk-groups/[rkey].get.ts index e144a62c..2fa94536 100644 --- a/server/api/admin/talk-groups/[rkey].get.ts +++ b/server/api/admin/talk-groups/[rkey].get.ts @@ -1,3 +1,5 @@ +import { defineEventHandler, getRouterParam } from 'nuxt/server' + import { getAdminRecord } from '../../../utils/admin/crud' export default defineEventHandler(event => { diff --git a/server/api/admin/talk-groups/[rkey].put.ts b/server/api/admin/talk-groups/[rkey].put.ts index 118f4414..a27f21dd 100644 --- a/server/api/admin/talk-groups/[rkey].put.ts +++ b/server/api/admin/talk-groups/[rkey].put.ts @@ -1,3 +1,5 @@ +import { defineEventHandler, getRouterParam, readBody } from 'nuxt/server' + import { updateAdminRecord } from '../../../utils/admin/crud' export default defineEventHandler(async event => { diff --git a/server/api/admin/talk-groups/index.get.ts b/server/api/admin/talk-groups/index.get.ts index 820f69e3..c4fff60b 100644 --- a/server/api/admin/talk-groups/index.get.ts +++ b/server/api/admin/talk-groups/index.get.ts @@ -1,3 +1,5 @@ +import { defineEventHandler } from 'nuxt/server' + import { listAdminRecords } from '../../../utils/admin/crud' export default defineEventHandler(event => { diff --git a/server/api/admin/talk-groups/index.post.ts b/server/api/admin/talk-groups/index.post.ts index 0191eb72..5874fdc9 100644 --- a/server/api/admin/talk-groups/index.post.ts +++ b/server/api/admin/talk-groups/index.post.ts @@ -1,3 +1,5 @@ +import { defineEventHandler, readBody } from 'nuxt/server' + import { createAdminRecord } from '../../../utils/admin/crud' export default defineEventHandler(async event => { diff --git a/server/api/admin/talks/[rkey].delete.ts b/server/api/admin/talks/[rkey].delete.ts index 78fad3f6..940d5fee 100644 --- a/server/api/admin/talks/[rkey].delete.ts +++ b/server/api/admin/talks/[rkey].delete.ts @@ -1,3 +1,5 @@ +import { defineEventHandler, getRouterParam } from 'nuxt/server' + import { deleteAdminRecord } from '../../../utils/admin/crud' export default defineEventHandler(event => { diff --git a/server/api/admin/talks/[rkey].get.ts b/server/api/admin/talks/[rkey].get.ts index 3253c11d..11811ae4 100644 --- a/server/api/admin/talks/[rkey].get.ts +++ b/server/api/admin/talks/[rkey].get.ts @@ -1,3 +1,5 @@ +import { defineEventHandler, getRouterParam } from 'nuxt/server' + import { getAdminRecord } from '../../../utils/admin/crud' export default defineEventHandler(event => { diff --git a/server/api/admin/talks/[rkey].put.ts b/server/api/admin/talks/[rkey].put.ts index 86f9b429..36d7af0a 100644 --- a/server/api/admin/talks/[rkey].put.ts +++ b/server/api/admin/talks/[rkey].put.ts @@ -1,3 +1,5 @@ +import { defineEventHandler, getRouterParam, readBody } from 'nuxt/server' + import { updateAdminRecord } from '../../../utils/admin/crud' export default defineEventHandler(async event => { diff --git a/server/api/admin/talks/index.get.ts b/server/api/admin/talks/index.get.ts index ae305380..2b25bb2d 100644 --- a/server/api/admin/talks/index.get.ts +++ b/server/api/admin/talks/index.get.ts @@ -1,3 +1,5 @@ +import { defineEventHandler } from 'nuxt/server' + import { listAdminRecords } from '../../../utils/admin/crud' export default defineEventHandler(event => { diff --git a/server/api/admin/talks/index.post.ts b/server/api/admin/talks/index.post.ts index 38dc41ea..e3a22612 100644 --- a/server/api/admin/talks/index.post.ts +++ b/server/api/admin/talks/index.post.ts @@ -1,3 +1,5 @@ +import { defineEventHandler, readBody } from 'nuxt/server' + import { createAdminRecord } from '../../../utils/admin/crud' export default defineEventHandler(async event => { diff --git a/server/api/admin/uses-categories/[rkey].delete.ts b/server/api/admin/uses-categories/[rkey].delete.ts index dc938618..83c05ba1 100644 --- a/server/api/admin/uses-categories/[rkey].delete.ts +++ b/server/api/admin/uses-categories/[rkey].delete.ts @@ -1,3 +1,5 @@ +import { defineEventHandler, getRouterParam } from 'nuxt/server' + import { deleteAdminRecord } from '../../../utils/admin/crud' export default defineEventHandler(event => { diff --git a/server/api/admin/uses-categories/[rkey].get.ts b/server/api/admin/uses-categories/[rkey].get.ts index 8117447d..a0500c0f 100644 --- a/server/api/admin/uses-categories/[rkey].get.ts +++ b/server/api/admin/uses-categories/[rkey].get.ts @@ -1,3 +1,5 @@ +import { defineEventHandler, getRouterParam } from 'nuxt/server' + import { getAdminRecord } from '../../../utils/admin/crud' export default defineEventHandler(event => { diff --git a/server/api/admin/uses-categories/[rkey].put.ts b/server/api/admin/uses-categories/[rkey].put.ts index 7bdad201..64eee0ce 100644 --- a/server/api/admin/uses-categories/[rkey].put.ts +++ b/server/api/admin/uses-categories/[rkey].put.ts @@ -1,3 +1,5 @@ +import { defineEventHandler, getRouterParam, readBody } from 'nuxt/server' + import { updateAdminRecord } from '../../../utils/admin/crud' export default defineEventHandler(async event => { diff --git a/server/api/admin/uses-categories/index.get.ts b/server/api/admin/uses-categories/index.get.ts index 0809da92..1be8d002 100644 --- a/server/api/admin/uses-categories/index.get.ts +++ b/server/api/admin/uses-categories/index.get.ts @@ -1,3 +1,5 @@ +import { defineEventHandler } from 'nuxt/server' + import { listAdminRecords } from '../../../utils/admin/crud' export default defineEventHandler(event => { diff --git a/server/api/admin/uses-categories/index.post.ts b/server/api/admin/uses-categories/index.post.ts index 1625167b..50e2ed4f 100644 --- a/server/api/admin/uses-categories/index.post.ts +++ b/server/api/admin/uses-categories/index.post.ts @@ -1,3 +1,5 @@ +import { defineEventHandler, readBody } from 'nuxt/server' + import { createAdminRecord } from '../../../utils/admin/crud' export default defineEventHandler(async event => { diff --git a/server/api/admin/uses-items/[rkey].delete.ts b/server/api/admin/uses-items/[rkey].delete.ts index 0b818d48..dd5667cc 100644 --- a/server/api/admin/uses-items/[rkey].delete.ts +++ b/server/api/admin/uses-items/[rkey].delete.ts @@ -1,3 +1,5 @@ +import { defineEventHandler, getRouterParam } from 'nuxt/server' + import { deleteAdminRecord } from '../../../utils/admin/crud' export default defineEventHandler(event => { diff --git a/server/api/admin/uses-items/[rkey].get.ts b/server/api/admin/uses-items/[rkey].get.ts index 0aaa83b6..da0e7260 100644 --- a/server/api/admin/uses-items/[rkey].get.ts +++ b/server/api/admin/uses-items/[rkey].get.ts @@ -1,3 +1,5 @@ +import { defineEventHandler, getRouterParam } from 'nuxt/server' + import { getAdminRecord } from '../../../utils/admin/crud' export default defineEventHandler(event => { diff --git a/server/api/admin/uses-items/[rkey].put.ts b/server/api/admin/uses-items/[rkey].put.ts index e9173b30..760ff835 100644 --- a/server/api/admin/uses-items/[rkey].put.ts +++ b/server/api/admin/uses-items/[rkey].put.ts @@ -1,3 +1,5 @@ +import { defineEventHandler, getRouterParam, readBody } from 'nuxt/server' + import { updateAdminRecord } from '../../../utils/admin/crud' export default defineEventHandler(async event => { diff --git a/server/api/admin/uses-items/index.get.ts b/server/api/admin/uses-items/index.get.ts index 5b95c14e..e52f9147 100644 --- a/server/api/admin/uses-items/index.get.ts +++ b/server/api/admin/uses-items/index.get.ts @@ -1,3 +1,5 @@ +import { defineEventHandler } from 'nuxt/server' + import { listAdminRecords } from '../../../utils/admin/crud' export default defineEventHandler(event => { diff --git a/server/api/admin/uses-items/index.post.ts b/server/api/admin/uses-items/index.post.ts index c845d68f..4a222601 100644 --- a/server/api/admin/uses-items/index.post.ts +++ b/server/api/admin/uses-items/index.post.ts @@ -1,3 +1,5 @@ +import { defineEventHandler, readBody } from 'nuxt/server' + import { createAdminRecord } from '../../../utils/admin/crud' export default defineEventHandler(async event => { diff --git a/server/api/current-location.get.ts b/server/api/current-location.get.ts index f1923e03..efd483f8 100644 --- a/server/api/current-location.get.ts +++ b/server/api/current-location.get.ts @@ -1,3 +1,5 @@ +import { defineEventHandler } from 'nuxt/server' + import { getCurrentLocation } from '../utils/cms/location' const regionalFlags: Record = { @@ -6,8 +8,8 @@ const regionalFlags: Record = { const countryNames = new Intl.DisplayNames(['en'], { type: 'region' }) -export default defineEventHandler(async event => { - const location = await getCurrentLocation(event) +export default defineEventHandler(async () => { + const location = await getCurrentLocation() if (!location) return null const countryCode = location.countryCode.toUpperCase() diff --git a/server/api/feedback.post.ts b/server/api/feedback.post.ts index e5544bc9..b839fd1a 100644 --- a/server/api/feedback.post.ts +++ b/server/api/feedback.post.ts @@ -1,8 +1,11 @@ +import { createError, defineEventHandler, readBody, useRuntimeConfig } from 'nuxt/server' +import { $fetch } from 'ofetch' + export default defineEventHandler(async event => { - const config = useRuntimeConfig(event) - const { feedback } = await readBody(event) + const config = useRuntimeConfig() + const { feedback } = await readBody<{ feedback?: string }>(event) if (!feedback) { - throw createError({ statusCode: 400, statusMessage: 'Missing feedback' }) + throw createError({ status: 400, statusText: 'Missing feedback' }) } await $fetch('feedback', { baseURL: config.voteUrl, diff --git a/server/api/projects.get.ts b/server/api/projects.get.ts index f6b5e7e8..741093de 100644 --- a/server/api/projects.get.ts +++ b/server/api/projects.get.ts @@ -1,5 +1,7 @@ +import { defineEventHandler } from 'nuxt/server' + import { getProjects } from '../utils/cms/projects' -export default defineEventHandler(async event => { - return getProjects(event) +export default defineEventHandler(async () => { + return getProjects() }) diff --git a/server/api/question.ts b/server/api/question.ts index 98e3c39c..d9592f1d 100644 --- a/server/api/question.ts +++ b/server/api/question.ts @@ -1,3 +1,4 @@ +import { createError, defineEventHandler, readBody, useRuntimeConfig } from 'nuxt/server' import { createAirspace, passwordSession } from 'airspace' import type { Identity } from 'airspace' @@ -6,15 +7,17 @@ import { encrypt } from '../utils/admin/encryption' import { collections } from '#shared/collections' export default defineEventHandler(async event => { - if (event.method === 'OPTIONS') return null - assertMethod(event, 'POST') + if (event.req.method === 'OPTIONS') return null + if (event.req.method !== 'POST') { + throw createError({ status: 405, statusText: 'HTTP method is not allowed.' }) + } - const { question } = await readBody(event) + const { question } = await readBody<{ question?: unknown }>(event) if (!question || typeof question !== 'string' || !question.trim()) { - throw createError({ statusCode: 422, statusMessage: 'question is required' }) + throw createError({ status: 422, statusText: 'question is required' }) } - const config = useRuntimeConfig(event) + const config = useRuntimeConfig() const persist = process.env.NUXT_PDS_ENCRYPTION_KEY ? persistQuestion(question, config).catch(err => { @@ -22,7 +25,7 @@ export default defineEventHandler(async event => { }) : (console.error('[question] NUXT_PDS_ENCRYPTION_KEY is not configured; question will not be persisted.'), Promise.resolve()) - const notify = sendPushoverNotification(event, { + const notify = sendPushoverNotification({ title: 'Anonymous question', message: question, priority: 0, diff --git a/server/api/sponsors.get.ts b/server/api/sponsors.get.ts index 026cd5ab..d7e05feb 100644 --- a/server/api/sponsors.get.ts +++ b/server/api/sponsors.get.ts @@ -1,10 +1,12 @@ +import { defineEventHandler } from 'nuxt/server' + import { getSponsors } from '../utils/sponsors' export default defineEventHandler( - async event => { + async () => { if (import.meta.test) return [] - const sponsors = await getSponsors(event) + const sponsors = await getSponsors() return sponsors .map(s => s.avatarUrl?.replace(/(\?|%3Fu).*$/, '')) .filter((r): r is string => !!r) diff --git a/server/api/streams.ts b/server/api/streams.ts index d55407d1..7bae9a71 100644 --- a/server/api/streams.ts +++ b/server/api/streams.ts @@ -1,7 +1,10 @@ -export default defineCachedEventHandler(async event => { +import { defineEventHandler, useRuntimeConfig } from 'nuxt/server' +import { $fetch } from 'ofetch' + +export default defineEventHandler(async () => { if (import.meta.test) return [] - const config = useRuntimeConfig(event) + const config = useRuntimeConfig() const token = await $fetch( 'https://id.twitch.tv/oauth2/token', { diff --git a/server/api/talks.get.ts b/server/api/talks.get.ts index 0c43ca4f..51147fc9 100644 --- a/server/api/talks.get.ts +++ b/server/api/talks.get.ts @@ -1,14 +1,16 @@ +import { createError, defineEventHandler } from 'nuxt/server' + import { getPastTalks } from '../utils/cms/talks' -export default defineEventHandler(async event => { +export default defineEventHandler(async () => { try { - return await getPastTalks(event) + return await getPastTalks() } catch (error) { console.error('Failed to fetch talks:', error) throw createError({ - statusCode: 500, - statusMessage: 'Failed to fetch talks', + status: 500, + statusText: 'Failed to fetch talks', }) } }) diff --git a/server/api/upcoming-conferences.get.ts b/server/api/upcoming-conferences.get.ts index 5692ebb5..43f7573c 100644 --- a/server/api/upcoming-conferences.get.ts +++ b/server/api/upcoming-conferences.get.ts @@ -1,31 +1,24 @@ +import { defineEventHandler } from 'nuxt/server' import { imageMeta } from 'image-meta' +import { $fetch } from 'ofetch' -import { getUpcomingTalks } from '../utils/cms/talks' +import { formatConferenceDates, getUpcomingTalks } from '../utils/cms/talks' import type { UpcomingConference } from '../utils/cms/talks' -export default defineEventHandler(async event => { - const upcomingConferences = await getUpcomingTalks(event) - - const formatter = new Intl.DateTimeFormat('en', { - month: 'long', - day: 'numeric', - }) +export default defineEventHandler(async () => { + const upcomingConferences = await getUpcomingTalks() return Promise.all( upcomingConferences.map(async conference => { - let dates = formatter.format(new Date(conference.dates)) - if (conference.endDate) { - dates += ` - ${formatter.format(new Date(conference.endDate))}` - delete conference.endDate - } - conference.dates = dates + conference.dates = formatConferenceDates(conference) + delete conference.endDate if (conference.image?.url && conference.image.width && conference.image.height) { return conference as Omit & { image: NonNullable } } const imageUrl = conference.image?.url ?? await (async () => { - const html = await $fetch(conference.link) + const html = await $fetch(conference.link, { responseType: 'text' }) return html.match( /]*property="og:image"[^>]*content="([^"]+)"|]*content="([^"]+)"[^>]*property="og:image"/, )?.[1] ?? null @@ -43,7 +36,7 @@ export default defineEventHandler(async event => { } } - const res = await $fetch(imageUrl, { responseType: 'arrayBuffer' }) + const res = await $fetch(imageUrl, { responseType: 'arrayBuffer' }) const metadata = imageMeta(new Uint8Array(res)) return { diff --git a/server/api/update-location.post.ts b/server/api/update-location.post.ts index 568c3d6c..647dee49 100644 --- a/server/api/update-location.post.ts +++ b/server/api/update-location.post.ts @@ -1,25 +1,33 @@ +import { createError, defineEventHandler, readBody, useRuntimeConfig } from 'nuxt/server' +import { $fetch } from 'ofetch' + import { setCurrentLocation } from '../utils/cms/location' export default defineEventHandler(async event => { - const { latitude, longitude, meetupAvailable, apiKey } = await readBody(event) + const { latitude, longitude, meetupAvailable, apiKey } = await readBody<{ + latitude?: number + longitude?: number + meetupAvailable?: boolean + apiKey?: string + }>(event) if (!latitude || !longitude || !apiKey) { return createError({ - statusCode: 400, - statusMessage: 'Missing required fields. Need latitude, longitude, and apiKey.', + status: 400, + statusText: 'Missing required fields. Need latitude, longitude, and apiKey.', }) } - const config = useRuntimeConfig(event) + const config = useRuntimeConfig() if (apiKey !== config.locationApiKey) { return createError({ - statusCode: 401, - statusMessage: 'Unauthorized', + status: 401, + statusText: 'Unauthorized', }) } - const response = await $fetch(`https://api.bigdatacloud.net/data/reverse-geocode-client`, { - params: { + const response = await $fetch('https://api.bigdatacloud.net/data/reverse-geocode-client', { + query: { latitude, longitude, localityLanguage: 'en', @@ -28,8 +36,8 @@ export default defineEventHandler(async event => { if (!response || !response.city) { return createError({ - statusCode: 400, - statusMessage: 'Could not geocode the provided coordinates', + status: 400, + statusText: 'Could not geocode the provided coordinates', }) } diff --git a/server/api/user.get.ts b/server/api/user.get.ts index 8bfb6f0c..f69bef81 100644 --- a/server/api/user.get.ts +++ b/server/api/user.get.ts @@ -1,3 +1,5 @@ +import { defineEventHandler } from 'nuxt/server' + export default defineEventHandler(async event => { const { data: payload } = await getUserSession(event) return { diff --git a/server/api/uses.get.ts b/server/api/uses.get.ts index 6e1ea47f..53a6f0d4 100644 --- a/server/api/uses.get.ts +++ b/server/api/uses.get.ts @@ -1,5 +1,7 @@ +import { defineEventHandler } from 'nuxt/server' + import { getUses } from '../utils/cms/uses' -export default defineEventHandler(async event => { - return getUses(event) +export default defineEventHandler(async () => { + return getUses() }) diff --git a/server/middleware/admin.ts b/server/middleware/admin.ts index f574f139..f8a96105 100644 --- a/server/middleware/admin.ts +++ b/server/middleware/admin.ts @@ -1,3 +1,5 @@ +import { createError, defineEventHandler, sendRedirect, useRuntimeConfig } from 'nuxt/server' + import { getAdminSessionCookie } from '../utils/admin/oauth' const PUBLIC_PATHS = new Set([ @@ -6,19 +8,19 @@ const PUBLIC_PATHS = new Set([ ]) export default defineEventHandler(async event => { - const path = event.path?.split('?')[0] ?? '' + const path = event.url.pathname const isAdminPage = path === '/admin' || path.startsWith('/admin/') const isAdminApi = path.startsWith('/api/admin/') if (!isAdminPage && !isAdminApi) return if (PUBLIC_PATHS.has(path)) return - const expectedHandle = useRuntimeConfig(event).atproto.handle + const expectedHandle = useRuntimeConfig().atproto.handle const sess = await getAdminSessionCookie(event) if (sess.data.handle === expectedHandle && sess.data.did) return if (isAdminApi) { - throw createError({ statusCode: 401, statusMessage: 'Not signed in.' }) + throw createError({ status: 401, statusText: 'Not signed in.' }) } return sendRedirect(event, '/login', 303) }) diff --git a/server/plugins/island-frame.ts b/server/plugins/island-frame.ts index f2741ad7..dea47ae7 100644 --- a/server/plugins/island-frame.ts +++ b/server/plugins/island-frame.ts @@ -1,5 +1,7 @@ -export default defineNitroPlugin(nitroApp => { - nitroApp.hooks.hook('render:island', island => { +import { useServerHooks } from 'nuxt/server' + +export default function () { + useServerHooks().hook('render:island', island => { if (island.html.startsWith('')) { island.html = `
${island.html}
` } @@ -7,4 +9,4 @@ export default defineNitroPlugin(nitroApp => { island.html = island.html.replace(/(<\w+)([ >])/, '$1 data-island$2') } }) -}) +} diff --git a/server/routes/ai.md.get.ts b/server/routes/ai.md.get.ts index 270baaf9..a22b7c97 100644 --- a/server/routes/ai.md.get.ts +++ b/server/routes/ai.md.get.ts @@ -1 +1,3 @@ +import { defineEventHandler } from 'nuxt/server' + export default defineEventHandler(event => contentPageResponse(event, '/ai')) diff --git a/server/routes/auth/[...provider].get.ts b/server/routes/auth/[...provider].get.ts index a6737984..8d97d992 100644 --- a/server/routes/auth/[...provider].get.ts +++ b/server/routes/auth/[...provider].get.ts @@ -1,8 +1,11 @@ +import { createError, defineEventHandler, getQuery, sendRedirect, useRuntimeConfig } from 'nuxt/server' +import { $fetch } from 'ofetch' + export default defineEventHandler(async event => { const { code, error, error_description, error_uri } = getQuery(event) if (import.meta.dev) { - console.log(event.path) + console.log(event.url.pathname + event.url.search) } if (error) { @@ -12,13 +15,13 @@ export default defineEventHandler(async event => { if (!code) { throw createError({ - statusCode: 422, - statusMessage: 'Missing authorisation code.', + status: 422, + statusText: 'Missing authorisation code.', }) } - const config = useRuntimeConfig(event) - const { access_token } = await $fetch<{ access_token: string }>( + const config = useRuntimeConfig() + const { access_token } = await $fetch<{ access_token?: string }>( 'https://github.com/login/oauth/access_token', { method: 'POST', @@ -47,7 +50,7 @@ export default defineEventHandler(async event => { console.error('viewer', err) return {} }), - getSponsors(event) + getSponsors() .then(r => r.map(s => s.id)) .catch(err => { console.error('sponsor', err) diff --git a/server/routes/bio.md.get.ts b/server/routes/bio.md.get.ts index ef6a973f..355350a8 100644 --- a/server/routes/bio.md.get.ts +++ b/server/routes/bio.md.get.ts @@ -1 +1,3 @@ +import { defineEventHandler } from 'nuxt/server' + export default defineEventHandler(event => contentPageResponse(event, '/bio')) diff --git a/server/routes/blog.md.get.ts b/server/routes/blog.md.get.ts index 4cf496e7..5699f98e 100644 --- a/server/routes/blog.md.get.ts +++ b/server/routes/blog.md.get.ts @@ -1,3 +1,5 @@ +import { defineEventHandler } from 'nuxt/server' + import { pageMeta } from '#md-page-meta.json' export default defineEventHandler(event => { diff --git a/server/routes/index.md.get.ts b/server/routes/index.md.get.ts index 7de86232..2240e51d 100644 --- a/server/routes/index.md.get.ts +++ b/server/routes/index.md.get.ts @@ -1,3 +1,7 @@ +import { defineEventHandler } from 'nuxt/server' + +import { formatConferenceDates, getPastTalks, getUpcomingTalks } from '../utils/cms/talks' +import type { UpcomingConference } from '../utils/cms/talks' import { pageMeta } from '#md-page-meta.json' import { links } from '#shared/utils/links' @@ -7,8 +11,8 @@ export default defineEventHandler(async event => { } const [talks, upcomingConferences] = await Promise.all([ - $fetch('/api/talks').catch(() => [] as Talk[]), - $fetch('/api/upcoming-conferences').catch(() => [] as Conference[]), + getPastTalks().catch(() => [] as Talk[]), + getUpcomingTalks().catch(() => [] as UpcomingConference[]), ]) // Group talks and take top 4 @@ -46,7 +50,7 @@ export default defineEventHandler(async event => { lines.push('') for (const conf of upcomingConferences) { const link = conf.link ? `[${conf.name}](${conf.link})` : conf.name - lines.push(`- ${link} — ${conf.dates}${conf.location ? ` (${conf.location})` : ''}`) + lines.push(`- ${link} — ${formatConferenceDates(conf)}${conf.location ? ` (${conf.location})` : ''}`) } lines.push('') } diff --git a/server/routes/llms-full.txt.get.ts b/server/routes/llms-full.txt.get.ts index 49252de1..faa0cef2 100644 --- a/server/routes/llms-full.txt.get.ts +++ b/server/routes/llms-full.txt.get.ts @@ -1,3 +1,7 @@ +import { defineEventHandler } from 'nuxt/server' + +import { formatConferenceDates, getPastTalks, getUpcomingTalks } from '../utils/cms/talks' +import type { UpcomingConference } from '../utils/cms/talks' import { links } from '#shared/utils/links' export default defineEventHandler(async () => { @@ -6,8 +10,8 @@ export default defineEventHandler(async () => { } const [talks, upcomingConferences] = await Promise.all([ - $fetch('/api/talks').catch(() => [] as Talk[]), - $fetch('/api/upcoming-conferences').catch(() => [] as Conference[]), + getPastTalks().catch(() => [] as Talk[]), + getUpcomingTalks().catch(() => [] as UpcomingConference[]), ]) const bio = contentPage('/bio') @@ -40,7 +44,7 @@ export default defineEventHandler(async () => { lines.push('') for (const conf of upcomingConferences) { const link = conf.link ? `[${conf.name}](${conf.link})` : conf.name - lines.push(`- ${link} — ${conf.dates}${conf.location ? ` (${conf.location})` : ''}`) + lines.push(`- ${link} — ${formatConferenceDates(conf)}${conf.location ? ` (${conf.location})` : ''}`) } lines.push('') lines.push('---') diff --git a/server/routes/llms.txt.get.ts b/server/routes/llms.txt.get.ts index 4339de9b..db3df9a2 100644 --- a/server/routes/llms.txt.get.ts +++ b/server/routes/llms.txt.get.ts @@ -1,3 +1,7 @@ +import { defineEventHandler } from 'nuxt/server' + +import { formatConferenceDates, getUpcomingTalks } from '../utils/cms/talks' +import type { UpcomingConference } from '../utils/cms/talks' import { pageMeta } from '#md-page-meta.json' import { links } from '#shared/utils/links' @@ -6,7 +10,7 @@ export default defineEventHandler(async () => { return new Response('', { headers: { 'Content-Type': 'text/plain; charset=utf-8' } }) } - const upcomingConferences = await $fetch('/api/upcoming-conferences').catch(() => [] as Conference[]) + const upcomingConferences = await getUpcomingTalks().catch(() => [] as UpcomingConference[]) const recentPosts = blogPosts().slice(0, 5) @@ -38,7 +42,7 @@ export default defineEventHandler(async () => { lines.push('## Upcoming Conferences') lines.push('') for (const conf of upcomingConferences) { - lines.push(`- ${conf.name} — ${conf.dates}${conf.location ? ` (${conf.location})` : ''}`) + lines.push(`- ${conf.name} — ${formatConferenceDates(conf)}${conf.location ? ` (${conf.location})` : ''}`) } lines.push('') } diff --git a/server/routes/login.get.ts b/server/routes/login.get.ts index 5ef35fd3..22654b1d 100644 --- a/server/routes/login.get.ts +++ b/server/routes/login.get.ts @@ -1,9 +1,11 @@ +import { createError, defineEventHandler, sendRedirect, useRuntimeConfig } from 'nuxt/server' + import { getOauth } from '../utils/admin/oauth' export default defineEventHandler(async event => { - const handle = useRuntimeConfig(event).atproto.handle + const handle = useRuntimeConfig().atproto.handle if (!handle) { - throw createError({ statusCode: 500, statusMessage: 'No atproto handle is configured (social.networks.bluesky.identifier).' }) + throw createError({ status: 500, statusText: 'No atproto handle is configured (social.networks.bluesky.identifier).' }) } const url = await (await getOauth(event)).authorize(handle) diff --git a/server/routes/oauth-client-metadata.json.get.ts b/server/routes/oauth-client-metadata.json.get.ts index d8a9259e..bc636549 100644 --- a/server/routes/oauth-client-metadata.json.get.ts +++ b/server/routes/oauth-client-metadata.json.get.ts @@ -4,9 +4,11 @@ * `client_id` in production. Dev uses a loopback `client_id` that encodes * the same data inline and never hits this route. */ +import { defineEventHandler } from 'nuxt/server' + import { getClientMetadata } from '../utils/admin/oauth' export default defineEventHandler(event => { - setHeader(event, 'Content-Type', 'application/json') - return getClientMetadata(event) + event.res.headers.set('Content-Type', 'application/json') + return getClientMetadata() }) diff --git a/server/routes/projects.md.get.ts b/server/routes/projects.md.get.ts index b7b4ca42..befc574a 100644 --- a/server/routes/projects.md.get.ts +++ b/server/routes/projects.md.get.ts @@ -1,3 +1,5 @@ +import { defineEventHandler } from 'nuxt/server' + import { pageMeta } from '#md-page-meta.json' import { getProjects } from '../utils/cms/projects' @@ -7,7 +9,7 @@ export default defineEventHandler(async event => { return mdResponse(event, '') } - const categories = await getProjects(event) + const categories = await getProjects() const lines = [ mdFrontmatter('/projects', pageMeta['/projects']!), diff --git a/server/routes/rss.xml.get.ts b/server/routes/rss.xml.get.ts index 8e669d3d..af31077c 100644 --- a/server/routes/rss.xml.get.ts +++ b/server/routes/rss.xml.get.ts @@ -1,3 +1,4 @@ +import { createError, defineEventHandler } from 'nuxt/server' import { Feed } from 'feed' export default defineEventHandler(async () => { diff --git a/server/routes/stream.get.ts b/server/routes/stream.get.ts index f4e0d31e..916fcd45 100644 --- a/server/routes/stream.get.ts +++ b/server/routes/stream.get.ts @@ -1,15 +1,17 @@ +import { defineEventHandler, getRequestHeader, sendRedirect } from 'nuxt/server' + const BOT_RE = /bot\b|index|spider|facebookexternalhit|crawl|wget|slurp|mediapartners-google|whatsapp|twitter|linkedin|mastodon|bluesky|bsky/i export default defineEventHandler(async event => { - setHeader(event, 'vary', 'user-agent') + event.res.headers.set('vary', 'user-agent') const userAgent = getRequestHeader(event, 'user-agent') const isOpenGraphCrawler = userAgent && BOT_RE.test(userAgent) if (!isOpenGraphCrawler) { - return await sendRedirect(event, 'https://twitch.tv/danielroe') + return sendRedirect(event, 'https://twitch.tv/danielroe') } - setHeader(event, 'content-type', 'text/html') + event.res.headers.set('content-type', 'text/html') return ` diff --git a/server/routes/talks.md.get.ts b/server/routes/talks.md.get.ts index af5164dd..a2c71be8 100644 --- a/server/routes/talks.md.get.ts +++ b/server/routes/talks.md.get.ts @@ -1,3 +1,6 @@ +import { defineEventHandler } from 'nuxt/server' + +import { getPastTalks } from '../utils/cms/talks' import { pageMeta } from '#md-page-meta.json' export default defineEventHandler(async event => { @@ -5,7 +8,7 @@ export default defineEventHandler(async event => { return mdResponse(event, '') } - const talks = await $fetch('/api/talks') + const talks = await getPastTalks() // Group talks the same way the page does const groupedTalks: Record = {} diff --git a/server/routes/uses.md.get.ts b/server/routes/uses.md.get.ts index 15f99f11..3362ea9a 100644 --- a/server/routes/uses.md.get.ts +++ b/server/routes/uses.md.get.ts @@ -1,3 +1,5 @@ +import { defineEventHandler } from 'nuxt/server' + import { pageMeta } from '#md-page-meta.json' import { getUses } from '../utils/cms/uses' @@ -7,7 +9,7 @@ export default defineEventHandler(async event => { return mdResponse(event, '') } - const categories = await getUses(event) + const categories = await getUses() const sorted = [...categories].sort((a, b) => (a.order || 100) - (b.order || 100)) const lines = [ diff --git a/server/routes/v/[slug].ts b/server/routes/v/[slug].ts index bbfbb599..eca05bff 100644 --- a/server/routes/v/[slug].ts +++ b/server/routes/v/[slug].ts @@ -1,13 +1,16 @@ +import { createError, defineEventHandler, getRouterParam, sendRedirect, useRuntimeConfig } from 'nuxt/server' +import { $fetch } from 'ofetch' + export default defineEventHandler(async event => { - const config = useRuntimeConfig(event) + const config = useRuntimeConfig() const slug = getRouterParam(event, 'slug') if (!slug || !/^[\da-z]+$/.test(slug)) { - throw createError({ statusCode: 400, statusMessage: 'Missing slug' }) + throw createError({ status: 400, statusText: 'Missing slug' }) } await $fetch(slug, { baseURL: config.voteUrl, body: { type: 'vote' }, method: 'POST', }) - return await sendRedirect(event, '/voted') + return sendRedirect(event, '/voted') }) diff --git a/server/utils/admin/ama-publish.ts b/server/utils/admin/ama-publish.ts index ff9cc47a..1479c5b6 100644 --- a/server/utils/admin/ama-publish.ts +++ b/server/utils/admin/ama-publish.ts @@ -3,7 +3,8 @@ * already-resolved post text (mentions swapped, footer appended) plus an * optional image and the original question as alt text. */ -import type { H3Event } from 'h3' +import { createError, useRuntimeConfig } from 'nuxt/server' +import { $fetch } from 'ofetch' import { Client, asStringFormat, isBlobRef, jsonToLex } from '@atproto/lex' import type { $Typed, JsonValue } from '@atproto/lex' import { PasswordSession } from '@atproto/lex-password-session' @@ -52,12 +53,11 @@ async function resolveBlueskyPds (handle: string): Promise { } export async function publishBlueskyThread ( - event: H3Event, posts: ResolvedPost[], image: BlueskyImage | undefined, altText: string, ): Promise<{ url: string }> { - const config = useRuntimeConfig(event) + const config = useRuntimeConfig() const { identifier } = config.social.networks.bluesky const password = config.bluesky.accessToken @@ -75,8 +75,8 @@ export async function publishBlueskyThread ( if (i === 0 && image) { if (image.size != null && image.size > BLUESKY_IMAGE_MAX_BYTES) { throw createError({ - statusCode: 413, - statusMessage: `AMA image is ${image.size} bytes; Bluesky embeds must be under ${BLUESKY_IMAGE_MAX_BYTES}. Regenerate the image to compress it.`, + status: 413, + statusText: `AMA image is ${image.size} bytes; Bluesky embeds must be under ${BLUESKY_IMAGE_MAX_BYTES}. Regenerate the image to compress it.`, }) } const blob = jsonToLex(image.blob as JsonValue) @@ -184,12 +184,11 @@ function splitIntoChunks (text: string, maxLength: number): string[] { } export async function publishMastodon ( - event: H3Event, text: string, image: PublishImage | undefined, altText: string, ): Promise<{ url: string }> { - const config = useRuntimeConfig(event) + const config = useRuntimeConfig() const { identifier } = config.social.networks.mastodon const accessToken = config.mastodon.accessToken @@ -272,12 +271,11 @@ async function uploadImageToLinkedIn (imageUrl: string, accessToken: string, per } export async function publishLinkedIn ( - event: H3Event, text: string, image: PublishImage | undefined, altText: string, ): Promise<{ url: string }> { - const config = useRuntimeConfig(event) + const config = useRuntimeConfig() const accessToken = config.linkedin.accessToken if (!accessToken) throw new Error('LinkedIn access token not configured (NUXT_LINKEDIN_ACCESS_TOKEN).') diff --git a/server/utils/admin/ama-record.ts b/server/utils/admin/ama-record.ts index 96d7ba54..cc55a0b2 100644 --- a/server/utils/admin/ama-record.ts +++ b/server/utils/admin/ama-record.ts @@ -1,4 +1,5 @@ -import type { H3Event } from 'h3' +import { createError } from 'nuxt/server' +import type { RequestEvent } from 'nuxt/server' import { ConflictError, cidFromBlob } from 'airspace' import type { AirspaceRecord } from 'airspace' @@ -138,7 +139,7 @@ const MAX_ATTEMPTS = 5 * merging into the current value rather than replacing it. */ async function mutateAmaRecord ( - event: H3Event, + event: RequestEvent, rkey: string, update: AmaUpdate, action: string, @@ -149,7 +150,7 @@ async function mutateAmaRecord ( for (let attempt = 1; attempt <= MAX_ATTEMPTS; attempt++) { const existing = await airspace.ama.get(rkey) if (!existing) { - throw createError({ statusCode: 404, statusMessage: `dev.roe.ama/${rkey} not found.` }) + throw createError({ status: 404, statusText: `dev.roe.ama/${rkey} not found.` }) } const value = buildRecord(existing.value, update, published) @@ -166,8 +167,8 @@ async function mutateAmaRecord ( } throw createError({ - statusCode: 500, - statusMessage: `AMA ${action} exhausted ${MAX_ATTEMPTS} attempts for rkey=${rkey} without writing.`, + status: 500, + statusText: `AMA ${action} exhausted ${MAX_ATTEMPTS} attempts for rkey=${rkey} without writing.`, }) } @@ -199,12 +200,12 @@ export function viewAma (r: AmaRecordEnvelope): AmaView { } } -export async function saveAmaDraft (event: H3Event, rkey: string, update: AmaUpdate): Promise { +export async function saveAmaDraft (event: RequestEvent, rkey: string, update: AmaUpdate): Promise { return viewAma(await mutateAmaRecord(event, rkey, update, 'draft save')) } export async function mergePublishedLink ( - event: H3Event, + event: RequestEvent, rkey: string, platform: AmaPlatform, url: string, @@ -214,7 +215,7 @@ export async function mergePublishedLink ( } export async function ensureNotAlreadyPublished ( - event: H3Event, + event: RequestEvent, rkey: string, platform: AmaPlatform, force: boolean, @@ -225,8 +226,8 @@ export async function ensureNotAlreadyPublished ( const existing = record?.value.publishedLinks?.[platform] if (existing) { throw createError({ - statusCode: 409, - statusMessage: `${platform} already published at ${existing}. Pass force=true to re-publish.`, + status: 409, + statusText: `${platform} already published at ${existing}. Pass force=true to re-publish.`, }) } } @@ -241,7 +242,7 @@ export interface AmaImage { } export async function prepareAmaImage ( - event: H3Event, + event: RequestEvent, rkey: string, body: AmaUpdate, ): Promise { @@ -249,15 +250,15 @@ export async function prepareAmaImage ( if (!cidFromBlob(body.image)) { throw createError({ - statusCode: 422, - statusMessage: `Invalid AMA image blob: ${JSON.stringify(body.image)}`, + status: 422, + statusText: `Invalid AMA image blob: ${JSON.stringify(body.image)}`, }) } const airspace = await requireAdminAirspace(event) const url = await airspace.blobs.url(body.image) if (!url) { - throw createError({ statusCode: 500, statusMessage: 'Could not build a blob URL for the AMA image.' }) + throw createError({ status: 500, statusText: 'Could not build a blob URL for the AMA image.' }) } await saveAmaDraft(event, rkey, body) diff --git a/server/utils/admin/ama-resolve.ts b/server/utils/admin/ama-resolve.ts index ba176366..94ef65bb 100644 --- a/server/utils/admin/ama-resolve.ts +++ b/server/utils/admin/ama-resolve.ts @@ -3,7 +3,7 @@ * entity lookup once and exposes helpers that produce the * platform-specific text + (for Bluesky) facets. */ -import type { H3Event } from 'h3' +import type { RequestEvent } from 'nuxt/server' import { listAdminRecords } from './crud' import { resolveForPlatform, resolveBluesky } from './ama-mentions' @@ -18,7 +18,7 @@ export interface AmaPostInput { mentions?: Array<{ uri: string, cid: string }> } -export async function buildEntityLookup (event: H3Event): Promise { +export async function buildEntityLookup (event: RequestEvent): Promise { const records = await listAdminRecords(event, 'entities') const byRkey = new Map() for (const r of records) byRkey.set(r.rkey, r.value) diff --git a/server/utils/admin/ama-youtube.ts b/server/utils/admin/ama-youtube.ts index b19341a1..776f085f 100644 --- a/server/utils/admin/ama-youtube.ts +++ b/server/utils/admin/ama-youtube.ts @@ -1,4 +1,4 @@ -import type { H3Event } from 'h3' +import { useRuntimeConfig } from 'nuxt/server' import { getValidYouTubeAccessToken } from '../youtube/auth' @@ -146,12 +146,9 @@ export interface PublishYouTubeOptions { videoMimeType: string } -export async function publishYouTubeShorts ( - event: H3Event, - options: PublishYouTubeOptions, -): Promise<{ url: string }> { - const config = useRuntimeConfig(event) - const accessToken = await getValidYouTubeAccessToken(event) +export async function publishYouTubeShorts (options: PublishYouTubeOptions): Promise<{ url: string }> { + const config = useRuntimeConfig() + const accessToken = await getValidYouTubeAccessToken() const meta = generateVideoMetadata(options.question, options.answer) const title = meta.title.length > 100 ? meta.title.slice(0, 97) + '…' : meta.title diff --git a/server/utils/admin/crud.ts b/server/utils/admin/crud.ts index d6e703a8..4d844282 100644 --- a/server/utils/admin/crud.ts +++ b/server/utils/admin/crud.ts @@ -1,4 +1,5 @@ -import type { H3Event } from 'h3' +import { createError } from 'nuxt/server' +import type { RequestEvent } from 'nuxt/server' import { ConflictError, ValidationError } from 'airspace' import { invalidatePublicReads, requireAdminAirspace } from '../airspace' @@ -11,7 +12,7 @@ export type CollectionName = Exclude const nsidOf = (name: CollectionName): string => collections[name].nsid -async function clientFor (event: H3Event, name: K): Promise { +async function clientFor (event: RequestEvent, name: K): Promise { return (await requireAdminAirspace(event))[name] } @@ -32,7 +33,7 @@ const untyped = (client: unknown): AnyClient => client as AnyClient function assertRkey (rkey: string | undefined): asserts rkey is string { if (!rkey || rkey === 'undefined' || rkey === 'null') { - throw createError({ statusCode: 400, statusMessage: 'Missing or invalid rkey.' }) + throw createError({ status: 400, statusText: 'Missing or invalid rkey.' }) } } @@ -42,10 +43,10 @@ function assertRkey (rkey: string | undefined): asserts rkey is string { */ function asHttpError (err: unknown, name: CollectionName): never { if (err instanceof ValidationError) { - throw createError({ statusCode: 422, statusMessage: `Invalid ${nsidOf(name)}: ${err.message}` }) + throw createError({ status: 422, statusText: `Invalid ${nsidOf(name)}: ${err.message}` }) } if (err instanceof ConflictError) { - throw createError({ statusCode: 409, statusMessage: err.message }) + throw createError({ status: 409, statusText: err.message }) } throw err } @@ -63,21 +64,21 @@ async function write (name: CollectionName, run: () => Promise): Promise (event: H3Event, name: K): Promise>> { +export async function listAdminRecords (event: RequestEvent, name: K): Promise>> { return await untyped(await clientFor(event, name)).list() as never } -export async function getAdminRecord (event: H3Event, name: K, rkey: string | undefined): Promise>>> { +export async function getAdminRecord (event: RequestEvent, name: K, rkey: string | undefined): Promise>>> { assertRkey(rkey) const record = await untyped(await clientFor(event, name)).get(rkey) if (!record) { - throw createError({ statusCode: 404, statusMessage: `${nsidOf(name)}/${rkey} not found.` }) + throw createError({ status: 404, statusText: `${nsidOf(name)}/${rkey} not found.` }) } return record as never } export async function createAdminRecord ( - event: H3Event, + event: RequestEvent, name: K, value: Parameters[0], ): Promise>> { @@ -86,7 +87,7 @@ export async function createAdminRecord ( } export async function updateAdminRecord ( - event: H3Event, + event: RequestEvent, name: K, rkey: string | undefined, value: Parameters[1], @@ -96,7 +97,7 @@ export async function updateAdminRecord ( return await write(name, () => client.put(rkey, value)) } -export async function deleteAdminRecord (event: H3Event, name: K, rkey: string | undefined) { +export async function deleteAdminRecord (event: RequestEvent, name: K, rkey: string | undefined) { assertRkey(rkey) const client = untyped(await clientFor(event, name)) await write(name, () => client.delete(rkey)) diff --git a/server/utils/admin/oauth.ts b/server/utils/admin/oauth.ts index ccaf27fc..937e3818 100644 --- a/server/utils/admin/oauth.ts +++ b/server/utils/admin/oauth.ts @@ -7,8 +7,8 @@ * `/oauth-client-metadata.json`. Loopback base URLs use the spec's * `http://localhost?…` convention, so dev needs no public hosting. */ -import type { H3Event } from 'h3' -import { clearSession, getSession, updateSession } from 'h3' +import { clearSession, createError, getSession, updateSession, useRuntimeConfig } from 'nuxt/server' +import type { RequestEvent, SessionConfig } from 'nuxt/server' import { scopesFor } from 'airspace' import { clientMetadata, createOAuth } from 'airspace/oauth' import type { NodeSavedSessionStore, NodeSavedStateStore, OAuthSession } from 'airspace/oauth' @@ -23,12 +23,12 @@ export const OAUTH_SCOPES = scopesFor({ collections }) type NodeSavedSession = NonNullable>> type NodeSavedState = NonNullable>> -interface AdminStateData { +type AdminStateData = { key?: string state?: NodeSavedState } -interface AdminSessionData { +type AdminSessionData = { did?: string handle?: string oauth?: { @@ -37,37 +37,27 @@ interface AdminSessionData { } } -function sessionConfig (event: H3Event) { - return { - password: useRuntimeConfig(event).sessionPassword, - name: 'admin-session', - cookie: { - httpOnly: true, - sameSite: 'lax' as const, - secure: !import.meta.dev, - path: '/', - }, - } +const sessionConfig: SessionConfig = { + name: 'admin-session', + cookie: { secure: !import.meta.dev }, } -export function getAdminSessionCookie (event: H3Event) { - return getSession(event, sessionConfig(event)) +export function getAdminSessionCookie (event: RequestEvent) { + return getSession(event, sessionConfig) } -export async function updateAdminSessionCookie (event: H3Event, patch: Partial): Promise { - await updateSession(event, sessionConfig(event), patch) +export async function updateAdminSessionCookie (event: RequestEvent, patch: Partial): Promise { + await updateSession(event, sessionConfig, patch) } -export function clearAdminSessionCookie (event: H3Event) { - return clearSession(event, sessionConfig(event)) +export function clearAdminSessionCookie (event: RequestEvent) { + return clearSession(event, sessionConfig) } -function stateSessionConfig (event: H3Event) { - return { - ...sessionConfig(event), - name: 'admin-oauth-state', - maxAge: 60 * 10, - } +const stateSessionConfig: SessionConfig = { + ...sessionConfig, + name: 'admin-oauth-state', + maxAge: 60 * 10, } /** @@ -75,23 +65,23 @@ function stateSessionConfig (event: H3Event) { * and the callback are separate requests that are not guaranteed to hit the * same serverless instance, so it cannot live in process memory. */ -function cookieStateStore (event: H3Event): NodeSavedStateStore { +function cookieStateStore (event: RequestEvent): NodeSavedStateStore { return { async get (key: string): Promise { - const sess = await getSession(event, stateSessionConfig(event)) + const sess = await getSession(event, stateSessionConfig) return sess.data.key === key ? sess.data.state : undefined }, async set (key: string, value: NodeSavedState): Promise { - await updateSession(event, stateSessionConfig(event), { key, state: value }) + await updateSession(event, stateSessionConfig, { key, state: value }) }, async del (): Promise { - await clearSession(event, stateSessionConfig(event)) + await clearSession(event, stateSessionConfig) }, } } -function baseUrlFor (event: H3Event): string { - return useRuntimeConfig(event).admin.baseUrl.replace(/\/$/, '') +function baseUrlFor (): string { + return useRuntimeConfig().admin.baseUrl.replace(/\/$/, '') } function nameFor (baseUrl: string): string { @@ -99,18 +89,18 @@ function nameFor (baseUrl: string): string { } /** The document `/oauth-client-metadata.json` serves. */ -export function getClientMetadata (event: H3Event) { - const baseUrl = baseUrlFor(event) +export function getClientMetadata () { + const baseUrl = baseUrlFor() return clientMetadata({ baseUrl, redirectPath: REDIRECT_PATH, name: nameFor(baseUrl), scopes: OAUTH_SCOPES }) } /** * The OAuth session payload (DPoP JWK + access/refresh tokens + AS metadata) - * sealed with iron-session lands around 4-6 KB, close to the 4096-byte - * per-cookie soft limit. If browsers start truncating it, this needs to move - * to KV-backed storage. + * sealed with iron lands around 4-6 KB, close to the 4096-byte per-cookie + * limit. Sealing throws once it outgrows that, at which point this needs to + * move to KV-backed storage. */ -function cookieSessionStore (event: H3Event): NodeSavedSessionStore { +function cookieSessionStore (event: RequestEvent): NodeSavedSessionStore { return { async get (sub: string): Promise { const sess = await getAdminSessionCookie(event) @@ -131,8 +121,8 @@ function cookieSessionStore (event: H3Event): NodeSavedSessionStore { /** * Built per request, because the session store closes over the event. */ -export function getOauth (event: H3Event) { - const baseUrl = baseUrlFor(event) +export function getOauth (event: RequestEvent) { + const baseUrl = baseUrlFor() return createOAuth({ baseUrl, redirectPath: REDIRECT_PATH, @@ -143,11 +133,11 @@ export function getOauth (event: H3Event) { } /** Restore the editor's OAuth session, for `createAirspace({ session })`. */ -export async function requireAdminSession (event: H3Event): Promise { +export async function requireAdminSession (event: RequestEvent): Promise { const sess = await getAdminSessionCookie(event) const did = sess.data.did if (!did) { - throw createError({ statusCode: 401, statusMessage: 'Not signed in.' }) + throw createError({ status: 401, statusText: 'Not signed in.' }) } try { @@ -156,6 +146,6 @@ export async function requireAdminSession (event: H3Event): Promise | null = null /** How long a public listing stays fresh. The site reads far more often than it writes. */ const READ_TTL = 60_000 -function identityFrom (event: H3Event) { - const config = useRuntimeConfig(event) +function identity () { + const config = useRuntimeConfig() const did = config.atproto.did const service = config.public.atproto.service if (!did || !service) { throw createError({ - statusCode: 500, - statusMessage: 'runtimeConfig.atproto.did / public.atproto.service are not set; the build-time atproto module did not resolve them.', + status: 500, + statusText: 'runtimeConfig.atproto.did / public.atproto.service are not set; the build-time atproto module did not resolve them.', }) } return { did, service } as { did: Identity['did'], service: string } } -function createPublicAirspace (event: H3Event) { +function createPublicAirspace () { return createAirspace({ - identity: identityFrom(event), + identity: identity(), collections, plugins: [timestamps()], cache: { ttl: READ_TTL }, @@ -38,18 +39,18 @@ function createPublicAirspace (event: H3Event) { } /** The read-only client behind every public page and API route. */ -export function useAirspace (event: H3Event) { - return publicAirspace ??= createPublicAirspace(event) +export function useAirspace () { + return publicAirspace ??= createPublicAirspace() } /** * A client authenticated as the editor. Built per request, because the OAuth * session store closes over the event. */ -export async function requireAdminAirspace (event: H3Event) { +export async function requireAdminAirspace (event: RequestEvent) { const session = await requireAdminSession(event) return createAirspace({ - identity: identityFrom(event), + identity: identity(), collections, plugins: [timestamps()], session, diff --git a/server/utils/cms/location.ts b/server/utils/cms/location.ts index c66951ae..c6699464 100644 --- a/server/utils/cms/location.ts +++ b/server/utils/cms/location.ts @@ -1,4 +1,4 @@ -import type { H3Event } from 'h3' +import type { RequestEvent } from 'nuxt/server' import { invalidatePublicReads, requireAdminAirspace, useAirspace } from '../airspace' import { collections } from '#shared/collections' @@ -10,8 +10,8 @@ export interface Location { meetupAvailable: boolean } -export async function getCurrentLocation (event: H3Event): Promise { - const record = await useAirspace(event).location.get() +export async function getCurrentLocation (): Promise { + const record = await useAirspace().location.get() if (!record) return null const v = record.value return { @@ -22,7 +22,7 @@ export async function getCurrentLocation (event: H3Event): Promise { +export async function setCurrentLocation (event: RequestEvent, loc: Location): Promise { const airspace = await requireAdminAirspace(event) await airspace.location.put({ address: { diff --git a/server/utils/cms/projects.ts b/server/utils/cms/projects.ts index 515bb1c5..7280d68a 100644 --- a/server/utils/cms/projects.ts +++ b/server/utils/cms/projects.ts @@ -1,5 +1,3 @@ -import type { H3Event } from 'h3' - import { useAirspace } from '../airspace' import { toViewImage } from '#shared/cms/image' import type { Project, ProjectCategory } from '#shared/cms/projects' @@ -21,8 +19,8 @@ const ARCHIVED_STATUSES = new Set([ * `order`. Projects whose parent category isn't in the repo are dropped * (defence against orphans if a category was deleted without cascading). */ -export async function getProjects (event: H3Event): Promise { - const airspace = useAirspace(event) +export async function getProjects (): Promise { + const airspace = useAirspace() const [categories, projects] = await Promise.all([ airspace.projectCategories.list(), airspace.projects.list(), diff --git a/server/utils/cms/talks.ts b/server/utils/cms/talks.ts index 81bfabd3..4bb83c55 100644 --- a/server/utils/cms/talks.ts +++ b/server/utils/cms/talks.ts @@ -1,12 +1,10 @@ -import type { H3Event } from 'h3' - import type { Talk } from '../md' import { useAirspace } from '../airspace' import { toTalk, rkeyFromUri } from '#shared/cms/talk-mapper' -export async function getPastTalks (event: H3Event): Promise { +export async function getPastTalks (): Promise { const now = new Date().toISOString() - const airspace = useAirspace(event) + const airspace = useAirspace() const [talks, groups] = await Promise.all([ airspace.talks.list(), airspace.talkGroups.list(), @@ -35,9 +33,20 @@ export interface UpcomingConference { } | null } -export async function getUpcomingTalks (event: H3Event): Promise { +const conferenceDateFormatter = new Intl.DateTimeFormat('en', { + month: 'long', + day: 'numeric', +}) + +/** The conference's dates for display, such as `June 4 - June 6`. */ +export function formatConferenceDates (conference: Pick): string { + const start = conferenceDateFormatter.format(new Date(conference.dates)) + return conference.endDate ? `${start} - ${conferenceDateFormatter.format(new Date(conference.endDate))}` : start +} + +export async function getUpcomingTalks (): Promise { const now = new Date().toISOString() - const airspace = useAirspace(event) + const airspace = useAirspace() const talks = await airspace.talks.list() const upcoming = talks diff --git a/server/utils/cms/uses.ts b/server/utils/cms/uses.ts index 576443da..dcde8ab4 100644 --- a/server/utils/cms/uses.ts +++ b/server/utils/cms/uses.ts @@ -1,5 +1,3 @@ -import type { H3Event } from 'h3' - import { useAirspace } from '../airspace' import { toViewImage } from '#shared/cms/image' import type { UsesCategory, UsesItem } from '#shared/cms/uses' @@ -11,8 +9,8 @@ export type { UsesCategory, UsesItem } from '#shared/cms/uses' * category isn't in the repo are dropped (defence against orphans if a * category was deleted without cascading). */ -export async function getUses (event: H3Event): Promise { - const airspace = useAirspace(event) +export async function getUses (): Promise { + const airspace = useAirspace() const [categories, items] = await Promise.all([ airspace.usesCategories.list(), airspace.usesItems.list(), diff --git a/server/utils/md.ts b/server/utils/md.ts index 08287721..f3d5b46c 100644 --- a/server/utils/md.ts +++ b/server/utils/md.ts @@ -1,4 +1,5 @@ -import type { H3Event } from 'h3' +import { createError } from 'nuxt/server' +import type { RequestEvent } from 'nuxt/server' import { pageMeta } from '#md-page-meta.json' @@ -30,16 +31,16 @@ export function mdFrontmatter (path: string, meta: { title: string, description? * whatever the handler returns, so a `Response` round-trips through the cache * as `{}` and every request after the first serves that instead of the document. */ -export function mdResponse (event: H3Event, content: string): string { - setResponseHeader(event, 'content-type', 'text/markdown; charset=utf-8') +export function mdResponse (event: RequestEvent, content: string): string { + event.res.headers.set('content-type', 'text/markdown; charset=utf-8') return content } /** Serve a content page (`/ai`, `/bio`) as plain markdown. */ -export function contentPageResponse (event: H3Event, path: string): string { +export function contentPageResponse (event: RequestEvent, path: string): string { const page = contentPage(path) if (!page) { - throw createError({ statusCode: 404, statusMessage: 'Not found' }) + throw createError({ status: 404, statusText: 'Not found' }) } return mdResponse(event, [ @@ -60,10 +61,3 @@ export function formatDate (dateStr: string): string { } export type { Talk } from '#shared/cms/talks' - -export interface Conference { - name: string - dates: string - link?: string - location?: string -} diff --git a/server/utils/pushover.ts b/server/utils/pushover.ts index ed7ac6bb..35d53f13 100644 --- a/server/utils/pushover.ts +++ b/server/utils/pushover.ts @@ -1,4 +1,5 @@ -import type { H3Event } from 'h3' +import { useRuntimeConfig } from 'nuxt/server' +import { $fetch } from 'ofetch' export interface PushoverOptions { title: string @@ -8,8 +9,8 @@ export interface PushoverOptions { urlTitle?: string } -export function sendPushoverNotification (event: H3Event, options: PushoverOptions) { - const config = useRuntimeConfig(event) +export function sendPushoverNotification (options: PushoverOptions) { + const config = useRuntimeConfig() if (!config.pushover.token || !config.pushover.userKey) { console.warn('Pushover credentials not configured') diff --git a/server/utils/session.ts b/server/utils/session.ts index cf406563..2d6a7e1e 100644 --- a/server/utils/session.ts +++ b/server/utils/session.ts @@ -1,39 +1,26 @@ -import type { H3Event } from 'h3' +import { clearSession, getSession, updateSession } from 'nuxt/server' +import type { RequestEvent, SessionConfig } from 'nuxt/server' -interface SessionData { +type SessionData = { authenticated: boolean sponsor?: boolean avatar?: string name?: string } -export function getUserSession (event: H3Event) { - const config = useRuntimeConfig(event) - return getSession(event, { - password: config.sessionPassword, - name: 'token', - cookie: { httpOnly: false }, - }) +const sessionConfig: SessionConfig = { + name: 'token', + cookie: { httpOnly: false }, } -export function setUserSession (event: H3Event, data: any) { - const config = useRuntimeConfig(event) - return updateSession( - event, - { - password: config.sessionPassword, - name: 'token', - cookie: { httpOnly: false }, - }, - data, - ) +export function getUserSession (event: RequestEvent) { + return getSession(event, sessionConfig) } -export function clearUserSession (event: H3Event) { - const config = useRuntimeConfig(event) - return clearSession(event, { - password: config.sessionPassword, - name: 'token', - cookie: { httpOnly: false }, - }) +export function setUserSession (event: RequestEvent, data: Partial) { + return updateSession(event, sessionConfig, data) +} + +export function clearUserSession (event: RequestEvent) { + return clearSession(event, sessionConfig) } diff --git a/server/utils/sponsors.ts b/server/utils/sponsors.ts index 2c3d030e..6ff5cf16 100644 --- a/server/utils/sponsors.ts +++ b/server/utils/sponsors.ts @@ -1,4 +1,5 @@ -import type { H3Event } from 'h3' +import { useRuntimeConfig } from 'nuxt/server' + import { query } from './github' interface Sponsor { @@ -7,42 +8,36 @@ interface Sponsor { name?: string } -interface CacheEntry { - value: Sponsor[] -} +/** Reused across requests in development only. */ +let devSponsors: Sponsor[] | undefined -export async function getSponsors (event: H3Event): Promise { - const token = useRuntimeConfig(event).github.token +export async function getSponsors (): Promise { + const token = useRuntimeConfig().github.token if (!token) return [] - const entry: CacheEntry = ((await useStorage().getItem('sponsors')) as any) || {} - - if (!entry.value || !import.meta.dev) { - entry.value = await query( - token, - sponsorQuery, - ).then(r => r?.user.sponsors.edges.map((e: any) => e.node) || []) - - // my ID - entry.value.push({ id: useRuntimeConfig(event).github.id }) - - // NuxtLabs - entry.value.unshift({ - name: 'Vercel', - id: 'MDEyOk9yZ2FuaXphdGlvbjE0OTg1MDIw', - avatarUrl: 'https://avatars.githubusercontent.com/u/14985020?v=4', - }, - { - name: 'NuxtLabs', - id: 'MDEyOk9yZ2FuaXphdGlvbjYyMDE3NDAw', - avatarUrl: 'https://avatars.githubusercontent.com/u/62017400?v=4', - }) - - useStorage() - .setItem('sponsors', entry) - .catch((error: any) => console.error('[nitro] [cache]', error)) - } - - return entry.value + if (import.meta.dev && devSponsors) return devSponsors + + const sponsors: Sponsor[] = await query( + token, + sponsorQuery, + ).then(r => r?.user.sponsors.edges.map((e: any) => e.node) || []) + + // my ID + sponsors.push({ id: useRuntimeConfig().github.id }) + + // NuxtLabs + sponsors.unshift({ + name: 'Vercel', + id: 'MDEyOk9yZ2FuaXphdGlvbjE0OTg1MDIw', + avatarUrl: 'https://avatars.githubusercontent.com/u/14985020?v=4', + }, + { + name: 'NuxtLabs', + id: 'MDEyOk9yZ2FuaXphdGlvbjYyMDE3NDAw', + avatarUrl: 'https://avatars.githubusercontent.com/u/62017400?v=4', + }) + + if (import.meta.dev) devSponsors = sponsors + return sponsors } const sponsorQuery = /* graqhql */ ` diff --git a/server/utils/youtube/auth.ts b/server/utils/youtube/auth.ts index 461ae392..70c3da12 100644 --- a/server/utils/youtube/auth.ts +++ b/server/utils/youtube/auth.ts @@ -1,4 +1,4 @@ -import type { H3Event } from 'h3' +import { useRuntimeConfig } from 'nuxt/server' interface YouTubeTokenResponse { access_token: string @@ -51,8 +51,8 @@ export async function refreshYouTubeAccessToken (credentials: YouTubeCredentials } } -export async function getValidYouTubeAccessToken (event: H3Event): Promise { - const config = useRuntimeConfig(event) +export async function getValidYouTubeAccessToken (): Promise { + const config = useRuntimeConfig() // Check if we have a refresh token configured const refreshToken = config.youtube.refreshToken diff --git a/stylelint.config.js b/stylelint.config.js index ecc207cc..a85d0ee3 100644 --- a/stylelint.config.js +++ b/stylelint.config.js @@ -1,4 +1,4 @@ -module.exports = { +export default { extends: ['stylelint-config-standard', 'stylelint-config-recommended-vue'], // add your custom config here // https://stylelint.io/user-guide/configuration diff --git a/test/unit/behaviour.spec.ts b/test/unit/behaviour.spec.ts index 541cd327..709c5d47 100644 --- a/test/unit/behaviour.spec.ts +++ b/test/unit/behaviour.spec.ts @@ -8,10 +8,8 @@ await setup({ rootDir: fileURLToPath(new URL('../..', import.meta.url)), nuxtConfig: { sourcemap: false, - nitro: { - prerender: { - crawlLinks: false, - }, + prerender: { + crawlLinks: false, }, hooks: { 'prerender:routes' (routes) { diff --git a/test/unit/bundle.spec.ts b/test/unit/bundle.spec.ts index 7aca66b1..01f8da7f 100644 --- a/test/unit/bundle.spec.ts +++ b/test/unit/bundle.spec.ts @@ -63,7 +63,7 @@ describe('project sizes', () => { expect .soft(roundToKilobytes(stats.client.totalBytes)) - .toMatchInlineSnapshot(`"283k"`) + .toMatchInlineSnapshot(`"281k"`) expect.soft(stats.client.files.map(f => f.replace(/\..*\.js/, '.js')).sort()) .toMatchInlineSnapshot(` [ @@ -77,7 +77,7 @@ describe('project sizes', () => { stats.server = await analyzeSizes(['**/*.mjs', '!node_modules'], serverDir) expect .soft(roundToKilobytes(stats.server.totalBytes, 10)) - .toMatchInlineSnapshot(`"2060k"`) + .toMatchInlineSnapshot(`"2050k"`) const modules = await analyzeSizes('node_modules/**/*', serverDir) const portableModules = await analyzeSizes( @@ -86,7 +86,7 @@ describe('project sizes', () => { ) expect .soft(roundToKilobytes(portableModules.totalBytes, 10)) - .toMatchInlineSnapshot(`"14220k"`) + .toMatchInlineSnapshot(`"14210k"`) const packages = modules.files .filter(m => m.endsWith('package.json') && !NATIVE_BINARY_RE.test(m)) @@ -94,7 +94,6 @@ describe('project sizes', () => { .sort() expect.soft(packages).toMatchInlineSnapshot(` [ - "@atcute/bluesky-richtext-segmenter", "@atproto-labs/did-resolver", "@atproto-labs/fetch", "@atproto-labs/fetch-node", @@ -174,6 +173,7 @@ describe('project sizes', () => { "srvx", "ts-custom-error", "ufo", + "uint8array-extras", "ultrahtml", "undici", "undici_v6",