diff --git a/.gitignore b/.gitignore index 586f87f..afa9c3d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,6 @@ +# generated +public/images/projects + # temporary __old diff --git a/app/stores/projects.ts b/app/stores/projects.ts index 1172c37..7a006bf 100644 --- a/app/stores/projects.ts +++ b/app/stores/projects.ts @@ -84,11 +84,11 @@ export const useProjectsStore = defineStore("projects", { for (const project of projects.value) { const parts = project.id.replace(".md", "").split("/"); - const id = parts[parts.length - 1]!; + const id = parts[parts.length - 2]!; this.projects.push({ description: project.description, - thumbnail: `/images/projects/thumbnails/${id}.webp`, - preview: `/images/projects/previews/${id}.webp`, + thumbnail: `/images/projects/${id}/thumbnail.webp`, + preview: `/images/projects/${id}/preview.webp`, url: project.url, body: simplifyMarkdownAST(project.body), }); diff --git a/content.config.ts b/content.config.ts index 43a3716..a09ffe2 100644 --- a/content.config.ts +++ b/content.config.ts @@ -5,7 +5,7 @@ export default defineContentConfig({ collections: { projects: defineCollection({ type: "page", - source: "projects/*.md", + source: "projects/**/index.md", schema: z.object({ description: z.string(), url: z.url().nullable(), diff --git a/content/projects/biobleud.md b/content/projects/biobleud/index.md similarity index 100% rename from content/projects/biobleud.md rename to content/projects/biobleud/index.md diff --git a/public/images/projects/previews/biobleud.webp b/content/projects/biobleud/preview.webp similarity index 100% rename from public/images/projects/previews/biobleud.webp rename to content/projects/biobleud/preview.webp diff --git a/public/images/projects/thumbnails/biobleud.webp b/content/projects/biobleud/thumbnail.webp similarity index 100% rename from public/images/projects/thumbnails/biobleud.webp rename to content/projects/biobleud/thumbnail.webp diff --git a/content/projects/lbf-bot.md b/content/projects/lbf-bot/index.md similarity index 97% rename from content/projects/lbf-bot.md rename to content/projects/lbf-bot/index.md index 35f1b0f..2a9be87 100644 --- a/content/projects/lbf-bot.md +++ b/content/projects/lbf-bot/index.md @@ -3,3 +3,5 @@ description: LBF Bot - Custom Discord bot for\na gaming group url: https://github.com/pihkaal/lbf-bot order: 50 --- + +a diff --git a/public/images/projects/previews/lbf-bot.webp b/content/projects/lbf-bot/preview.webp similarity index 100% rename from public/images/projects/previews/lbf-bot.webp rename to content/projects/lbf-bot/preview.webp diff --git a/public/images/projects/thumbnails/lbf-bot.webp b/content/projects/lbf-bot/thumbnail.webp similarity index 100% rename from public/images/projects/thumbnails/lbf-bot.webp rename to content/projects/lbf-bot/thumbnail.webp diff --git a/content/projects/lilou-cat.md b/content/projects/lilou-cat/index.md similarity index 100% rename from content/projects/lilou-cat.md rename to content/projects/lilou-cat/index.md diff --git a/public/images/projects/previews/lilou-cat.webp b/content/projects/lilou-cat/preview.webp similarity index 100% rename from public/images/projects/previews/lilou-cat.webp rename to content/projects/lilou-cat/preview.webp diff --git a/public/images/projects/thumbnails/lilou-cat.webp b/content/projects/lilou-cat/thumbnail.webp similarity index 100% rename from public/images/projects/thumbnails/lilou-cat.webp rename to content/projects/lilou-cat/thumbnail.webp diff --git a/content/projects/pihkaal-me.md b/content/projects/pihkaal-me/index.md similarity index 100% rename from content/projects/pihkaal-me.md rename to content/projects/pihkaal-me/index.md diff --git a/public/images/projects/previews/pihkaal-me.webp b/content/projects/pihkaal-me/preview.webp similarity index 100% rename from public/images/projects/previews/pihkaal-me.webp rename to content/projects/pihkaal-me/preview.webp diff --git a/public/images/projects/thumbnails/pihkaal-me.webp b/content/projects/pihkaal-me/thumbnail.webp similarity index 100% rename from public/images/projects/thumbnails/pihkaal-me.webp rename to content/projects/pihkaal-me/thumbnail.webp diff --git a/content/projects/raylib-speedruns.md b/content/projects/raylib-speedruns/index.md similarity index 100% rename from content/projects/raylib-speedruns.md rename to content/projects/raylib-speedruns/index.md diff --git a/public/images/projects/previews/raylib-speedruns.webp b/content/projects/raylib-speedruns/preview.webp similarity index 100% rename from public/images/projects/previews/raylib-speedruns.webp rename to content/projects/raylib-speedruns/preview.webp diff --git a/public/images/projects/thumbnails/raylib-speedruns.webp b/content/projects/raylib-speedruns/thumbnail.webp similarity index 100% rename from public/images/projects/thumbnails/raylib-speedruns.webp rename to content/projects/raylib-speedruns/thumbnail.webp diff --git a/content/projects/s3pweb.md b/content/projects/s3pweb/index.md similarity index 100% rename from content/projects/s3pweb.md rename to content/projects/s3pweb/index.md diff --git a/public/images/projects/previews/s3pweb.webp b/content/projects/s3pweb/preview.webp similarity index 100% rename from public/images/projects/previews/s3pweb.webp rename to content/projects/s3pweb/preview.webp diff --git a/public/images/projects/thumbnails/s3pweb.webp b/content/projects/s3pweb/thumbnail.webp similarity index 100% rename from public/images/projects/thumbnails/s3pweb.webp rename to content/projects/s3pweb/thumbnail.webp diff --git a/content/projects/simple-qr.md b/content/projects/simple-qr/index.md similarity index 100% rename from content/projects/simple-qr.md rename to content/projects/simple-qr/index.md diff --git a/public/images/projects/previews/simple-qr.webp b/content/projects/simple-qr/preview.webp similarity index 100% rename from public/images/projects/previews/simple-qr.webp rename to content/projects/simple-qr/preview.webp diff --git a/public/images/projects/thumbnails/simple-qr.webp b/content/projects/simple-qr/thumbnail.webp similarity index 100% rename from public/images/projects/thumbnails/simple-qr.webp rename to content/projects/simple-qr/thumbnail.webp diff --git a/content/projects/tlock.md b/content/projects/tlock/index.md similarity index 100% rename from content/projects/tlock.md rename to content/projects/tlock/index.md diff --git a/public/images/projects/previews/tlock.webp b/content/projects/tlock/preview.webp similarity index 100% rename from public/images/projects/previews/tlock.webp rename to content/projects/tlock/preview.webp diff --git a/public/images/projects/thumbnails/tlock.webp b/content/projects/tlock/thumbnail.webp similarity index 100% rename from public/images/projects/thumbnails/tlock.webp rename to content/projects/tlock/thumbnail.webp diff --git a/modules/content-assets.ts b/modules/content-assets.ts new file mode 100644 index 0000000..2f4bab3 --- /dev/null +++ b/modules/content-assets.ts @@ -0,0 +1,89 @@ +import { defineNuxtModule, useLogger } from "@nuxt/kit"; +import { copyFile, mkdir, readdir, readFile } from "fs/promises"; +import { join } from "path"; +import { createHash } from "crypto"; +import { existsSync, watch } from "fs"; + +export default defineNuxtModule({ + meta: { + name: "content-assets", + configKey: "contentAssets", + }, + defaults: {}, + async setup(_, nuxt) { + const logger = useLogger("content-assets"); + const contentDir = join(nuxt.options.rootDir, "content"); + const publicDir = join(nuxt.options.rootDir, "public/images/projects"); + + const getFileChecksum = async (filePath: string): Promise => { + const content = await readFile(filePath); + return createHash("sha256").update(content).digest("hex"); + }; + + const copyWebpFiles = async () => { + try { + const projectsDir = join(contentDir, "projects"); + + if (!existsSync(projectsDir)) { + logger.info("No projects directory found"); + return; + } + + const entries = await readdir(projectsDir, { withFileTypes: true }); + + for (const entry of entries) { + if (!entry.isDirectory()) continue; + + const projectName = entry.name; + const sourceDir = join(projectsDir, projectName); + const destDir = join(publicDir, projectName); + + if (!existsSync(destDir)) { + await mkdir(destDir, { recursive: true }); + } + + const files = await readdir(sourceDir); + for (const file of files) { + if (!file.endsWith(".webp")) continue; + + const sourcePath = join(sourceDir, file); + const destPath = join(destDir, file); + + // only copy if destination doesn't exist, or if not the same as source + let shouldCopy = true; + if (existsSync(destPath)) { + const sourceChecksum = await getFileChecksum(sourcePath); + const destChecksum = await getFileChecksum(destPath); + + if (sourceChecksum === destChecksum) { + shouldCopy = false; + } + } + + if (shouldCopy) { + await copyFile(sourcePath, destPath); + logger.success(`Copied: ${projectName}/${file}`); + } + } + } + } catch (error) { + logger.error("Error copying files:", error); + } + }; + + nuxt.hook("build:before", async () => { + await copyWebpFiles(); + }); + + if (nuxt.options.dev) { + nuxt.hook("ready", () => { + watch(contentDir, { recursive: true }, async (_, filename) => { + if (filename?.endsWith(".webp")) { + logger.info(`Detected change: ${filename}`); + await copyWebpFiles(); + } + }); + }); + } + }, +}); diff --git a/nuxt.config.ts b/nuxt.config.ts index b6dd8a2..c60dfa3 100644 --- a/nuxt.config.ts +++ b/nuxt.config.ts @@ -2,7 +2,12 @@ export default defineNuxtConfig({ compatibilityDate: "2025-07-15", devtools: { enabled: true }, - modules: ["@nuxt/eslint", "@nuxt/content", "@pinia/nuxt"], + modules: [ + "@nuxt/eslint", + "@nuxt/content", + "@pinia/nuxt", + "./modules/content-assets", + ], css: ["~/assets/app.css"], ssr: false, }); diff --git a/package.json b/package.json index b59fef9..e1a7a7e 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,8 @@ }, "devDependencies": { "@nuxt/eslint": "^1.10.0", + "@nuxt/kit": "^4.2.1", + "@types/node": "^24.10.1", "eslint": "^9.39.1", "prettier": "^3.6.2", "typescript": "^5.9.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5ead441..d71355c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -24,7 +24,7 @@ importers: version: 3.13.0 nuxt: specifier: ^4.2.1 - version: 4.2.1(@parcel/watcher@2.5.1)(@vue/compiler-sfc@3.5.24)(better-sqlite3@12.4.1)(db0@0.3.4(better-sqlite3@12.4.1))(eslint@9.39.1(jiti@2.6.1))(ioredis@5.8.2)(magicast@0.5.1)(ms@2.1.3)(optionator@0.9.4)(rollup@4.53.3)(terser@5.44.1)(typescript@5.9.3)(vite@7.2.2(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1))(yaml@2.8.1) + version: 4.2.1(@parcel/watcher@2.5.1)(@types/node@24.10.1)(@vue/compiler-sfc@3.5.24)(better-sqlite3@12.4.1)(db0@0.3.4(better-sqlite3@12.4.1))(eslint@9.39.1(jiti@2.6.1))(ioredis@5.8.2)(magicast@0.5.1)(ms@2.1.3)(optionator@0.9.4)(rollup@4.53.3)(terser@5.44.1)(typescript@5.9.3)(vite@7.2.2(@types/node@24.10.1)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1))(yaml@2.8.1) pinia: specifier: ^3.0.4 version: 3.0.4(typescript@5.9.3)(vue@3.5.24(typescript@5.9.3)) @@ -37,7 +37,13 @@ importers: devDependencies: "@nuxt/eslint": specifier: ^1.10.0 - version: 1.10.0(@typescript-eslint/utils@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(@vue/compiler-sfc@3.5.24)(eslint@9.39.1(jiti@2.6.1))(magicast@0.5.1)(typescript@5.9.3)(vite@7.2.2(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1)) + version: 1.10.0(@typescript-eslint/utils@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(@vue/compiler-sfc@3.5.24)(eslint@9.39.1(jiti@2.6.1))(magicast@0.5.1)(typescript@5.9.3)(vite@7.2.2(@types/node@24.10.1)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1)) + "@nuxt/kit": + specifier: ^4.2.1 + version: 4.2.1(magicast@0.5.1) + "@types/node": + specifier: ^24.10.1 + version: 24.10.1 eslint: specifier: ^9.39.1 version: 9.39.1(jiti@2.6.1) @@ -2227,6 +2233,12 @@ packages: integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==, } + "@types/node@24.10.1": + resolution: + { + integrity: sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==, + } + "@types/parse-path@7.1.0": resolution: { @@ -7362,6 +7374,12 @@ packages: integrity: sha512-AbaYw0Nm4mK4qjhns67C+kgxR2YWiwlDBPzxrN8h8C6VtAdCgditAY5Dezu3IJy4XVqAnbrXt9oQJvsn3fyozg==, } + undici-types@7.16.0: + resolution: + { + integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==, + } + unenv@2.0.0-rc.24: resolution: { @@ -8682,11 +8700,11 @@ snapshots: "@nuxt/devalue@2.0.2": {} - "@nuxt/devtools-kit@3.1.0(magicast@0.5.1)(vite@7.2.2(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1))": + "@nuxt/devtools-kit@3.1.0(magicast@0.5.1)(vite@7.2.2(@types/node@24.10.1)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1))": dependencies: "@nuxt/kit": 4.2.1(magicast@0.5.1) execa: 8.0.1 - vite: 7.2.2(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1) + vite: 7.2.2(@types/node@24.10.1)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1) transitivePeerDependencies: - magicast @@ -8701,12 +8719,12 @@ snapshots: prompts: 2.4.2 semver: 7.7.3 - "@nuxt/devtools@3.1.0(vite@7.2.2(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1))(vue@3.5.24(typescript@5.9.3))": + "@nuxt/devtools@3.1.0(vite@7.2.2(@types/node@24.10.1)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1))(vue@3.5.24(typescript@5.9.3))": dependencies: - "@nuxt/devtools-kit": 3.1.0(magicast@0.5.1)(vite@7.2.2(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1)) + "@nuxt/devtools-kit": 3.1.0(magicast@0.5.1)(vite@7.2.2(@types/node@24.10.1)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1)) "@nuxt/devtools-wizard": 3.1.0 "@nuxt/kit": 4.2.1(magicast@0.5.1) - "@vue/devtools-core": 8.0.5(vite@7.2.2(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1))(vue@3.5.24(typescript@5.9.3)) + "@vue/devtools-core": 8.0.5(vite@7.2.2(@types/node@24.10.1)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1))(vue@3.5.24(typescript@5.9.3)) "@vue/devtools-kit": 8.0.5 birpc: 2.8.0 consola: 3.4.2 @@ -8731,9 +8749,9 @@ snapshots: sirv: 3.0.2 structured-clone-es: 1.0.0 tinyglobby: 0.2.15 - vite: 7.2.2(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1) - vite-plugin-inspect: 11.3.3(@nuxt/kit@4.2.1(magicast@0.5.1))(vite@7.2.2(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1)) - vite-plugin-vue-tracer: 1.1.3(vite@7.2.2(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1))(vue@3.5.24(typescript@5.9.3)) + vite: 7.2.2(@types/node@24.10.1)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1) + vite-plugin-inspect: 11.3.3(@nuxt/kit@4.2.1(magicast@0.5.1))(vite@7.2.2(@types/node@24.10.1)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1)) + vite-plugin-vue-tracer: 1.1.3(vite@7.2.2(@types/node@24.10.1)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1))(vue@3.5.24(typescript@5.9.3)) which: 5.0.0 ws: 8.18.3 transitivePeerDependencies: @@ -8782,10 +8800,10 @@ snapshots: - supports-color - typescript - "@nuxt/eslint@1.10.0(@typescript-eslint/utils@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(@vue/compiler-sfc@3.5.24)(eslint@9.39.1(jiti@2.6.1))(magicast@0.5.1)(typescript@5.9.3)(vite@7.2.2(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1))": + "@nuxt/eslint@1.10.0(@typescript-eslint/utils@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(@vue/compiler-sfc@3.5.24)(eslint@9.39.1(jiti@2.6.1))(magicast@0.5.1)(typescript@5.9.3)(vite@7.2.2(@types/node@24.10.1)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1))": dependencies: "@eslint/config-inspector": 1.4.1(eslint@9.39.1(jiti@2.6.1)) - "@nuxt/devtools-kit": 3.1.0(magicast@0.5.1)(vite@7.2.2(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1)) + "@nuxt/devtools-kit": 3.1.0(magicast@0.5.1)(vite@7.2.2(@types/node@24.10.1)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1)) "@nuxt/eslint-config": 1.10.0(@typescript-eslint/utils@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(@vue/compiler-sfc@3.5.24)(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) "@nuxt/eslint-plugin": 1.10.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) "@nuxt/kit": 4.2.1(magicast@0.5.1) @@ -8861,7 +8879,7 @@ snapshots: transitivePeerDependencies: - magicast - "@nuxt/nitro-server@4.2.1(better-sqlite3@12.4.1)(db0@0.3.4(better-sqlite3@12.4.1))(ioredis@5.8.2)(magicast@0.5.1)(nuxt@4.2.1(@parcel/watcher@2.5.1)(@vue/compiler-sfc@3.5.24)(better-sqlite3@12.4.1)(db0@0.3.4(better-sqlite3@12.4.1))(eslint@9.39.1(jiti@2.6.1))(ioredis@5.8.2)(magicast@0.5.1)(ms@2.1.3)(optionator@0.9.4)(rollup@4.53.3)(terser@5.44.1)(typescript@5.9.3)(vite@7.2.2(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1))(yaml@2.8.1))(typescript@5.9.3)": + "@nuxt/nitro-server@4.2.1(better-sqlite3@12.4.1)(db0@0.3.4(better-sqlite3@12.4.1))(ioredis@5.8.2)(magicast@0.5.1)(nuxt@4.2.1(@parcel/watcher@2.5.1)(@types/node@24.10.1)(@vue/compiler-sfc@3.5.24)(better-sqlite3@12.4.1)(db0@0.3.4(better-sqlite3@12.4.1))(eslint@9.39.1(jiti@2.6.1))(ioredis@5.8.2)(magicast@0.5.1)(ms@2.1.3)(optionator@0.9.4)(rollup@4.53.3)(terser@5.44.1)(typescript@5.9.3)(vite@7.2.2(@types/node@24.10.1)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1))(yaml@2.8.1))(typescript@5.9.3)": dependencies: "@nuxt/devalue": 2.0.2 "@nuxt/kit": 4.2.1(magicast@0.5.1) @@ -8879,7 +8897,7 @@ snapshots: klona: 2.0.6 mocked-exports: 0.1.1 nitropack: 2.12.9(better-sqlite3@12.4.1) - nuxt: 4.2.1(@parcel/watcher@2.5.1)(@vue/compiler-sfc@3.5.24)(better-sqlite3@12.4.1)(db0@0.3.4(better-sqlite3@12.4.1))(eslint@9.39.1(jiti@2.6.1))(ioredis@5.8.2)(magicast@0.5.1)(ms@2.1.3)(optionator@0.9.4)(rollup@4.53.3)(terser@5.44.1)(typescript@5.9.3)(vite@7.2.2(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1))(yaml@2.8.1) + nuxt: 4.2.1(@parcel/watcher@2.5.1)(@types/node@24.10.1)(@vue/compiler-sfc@3.5.24)(better-sqlite3@12.4.1)(db0@0.3.4(better-sqlite3@12.4.1))(eslint@9.39.1(jiti@2.6.1))(ioredis@5.8.2)(magicast@0.5.1)(ms@2.1.3)(optionator@0.9.4)(rollup@4.53.3)(terser@5.44.1)(typescript@5.9.3)(vite@7.2.2(@types/node@24.10.1)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1))(yaml@2.8.1) pathe: 2.0.3 pkg-types: 2.3.0 radix3: 1.1.2 @@ -8950,12 +8968,12 @@ snapshots: transitivePeerDependencies: - magicast - "@nuxt/vite-builder@4.2.1(eslint@9.39.1(jiti@2.6.1))(magicast@0.5.1)(ms@2.1.3)(nuxt@4.2.1(@parcel/watcher@2.5.1)(@vue/compiler-sfc@3.5.24)(better-sqlite3@12.4.1)(db0@0.3.4(better-sqlite3@12.4.1))(eslint@9.39.1(jiti@2.6.1))(ioredis@5.8.2)(magicast@0.5.1)(ms@2.1.3)(optionator@0.9.4)(rollup@4.53.3)(terser@5.44.1)(typescript@5.9.3)(vite@7.2.2(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1))(yaml@2.8.1))(optionator@0.9.4)(rollup@4.53.3)(terser@5.44.1)(typescript@5.9.3)(vue@3.5.24(typescript@5.9.3))(yaml@2.8.1)": + "@nuxt/vite-builder@4.2.1(@types/node@24.10.1)(eslint@9.39.1(jiti@2.6.1))(magicast@0.5.1)(ms@2.1.3)(nuxt@4.2.1(@parcel/watcher@2.5.1)(@types/node@24.10.1)(@vue/compiler-sfc@3.5.24)(better-sqlite3@12.4.1)(db0@0.3.4(better-sqlite3@12.4.1))(eslint@9.39.1(jiti@2.6.1))(ioredis@5.8.2)(magicast@0.5.1)(ms@2.1.3)(optionator@0.9.4)(rollup@4.53.3)(terser@5.44.1)(typescript@5.9.3)(vite@7.2.2(@types/node@24.10.1)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1))(yaml@2.8.1))(optionator@0.9.4)(rollup@4.53.3)(terser@5.44.1)(typescript@5.9.3)(vue@3.5.24(typescript@5.9.3))(yaml@2.8.1)": dependencies: "@nuxt/kit": 4.2.1(magicast@0.5.1) "@rollup/plugin-replace": 6.0.3(rollup@4.53.3) - "@vitejs/plugin-vue": 6.0.2(vite@7.2.2(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1))(vue@3.5.24(typescript@5.9.3)) - "@vitejs/plugin-vue-jsx": 5.1.2(vite@7.2.2(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1))(vue@3.5.24(typescript@5.9.3)) + "@vitejs/plugin-vue": 6.0.2(vite@7.2.2(@types/node@24.10.1)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1))(vue@3.5.24(typescript@5.9.3)) + "@vitejs/plugin-vue-jsx": 5.1.2(vite@7.2.2(@types/node@24.10.1)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1))(vue@3.5.24(typescript@5.9.3)) autoprefixer: 10.4.22(postcss@8.5.6) consola: 3.4.2 cssnano: 7.1.2(postcss@8.5.6) @@ -8970,7 +8988,7 @@ snapshots: magic-string: 0.30.21 mlly: 1.8.0 mocked-exports: 0.1.1 - nuxt: 4.2.1(@parcel/watcher@2.5.1)(@vue/compiler-sfc@3.5.24)(better-sqlite3@12.4.1)(db0@0.3.4(better-sqlite3@12.4.1))(eslint@9.39.1(jiti@2.6.1))(ioredis@5.8.2)(magicast@0.5.1)(ms@2.1.3)(optionator@0.9.4)(rollup@4.53.3)(terser@5.44.1)(typescript@5.9.3)(vite@7.2.2(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1))(yaml@2.8.1) + nuxt: 4.2.1(@parcel/watcher@2.5.1)(@types/node@24.10.1)(@vue/compiler-sfc@3.5.24)(better-sqlite3@12.4.1)(db0@0.3.4(better-sqlite3@12.4.1))(eslint@9.39.1(jiti@2.6.1))(ioredis@5.8.2)(magicast@0.5.1)(ms@2.1.3)(optionator@0.9.4)(rollup@4.53.3)(terser@5.44.1)(typescript@5.9.3)(vite@7.2.2(@types/node@24.10.1)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1))(yaml@2.8.1) pathe: 2.0.3 pkg-types: 2.3.0 postcss: 8.5.6 @@ -8979,9 +8997,9 @@ snapshots: std-env: 3.10.0 ufo: 1.6.1 unenv: 2.0.0-rc.24 - vite: 7.2.2(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1) - vite-node: 5.2.0(jiti@2.6.1)(ms@2.1.3)(terser@5.44.1)(yaml@2.8.1) - vite-plugin-checker: 0.11.0(eslint@9.39.1(jiti@2.6.1))(optionator@0.9.4)(typescript@5.9.3)(vite@7.2.2(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1)) + vite: 7.2.2(@types/node@24.10.1)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1) + vite-node: 5.2.0(@types/node@24.10.1)(jiti@2.6.1)(ms@2.1.3)(terser@5.44.1)(yaml@2.8.1) + vite-plugin-checker: 0.11.0(eslint@9.39.1(jiti@2.6.1))(optionator@0.9.4)(typescript@5.9.3)(vite@7.2.2(@types/node@24.10.1)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1)) vue: 3.5.24(typescript@5.9.3) vue-bundle-renderer: 2.2.0 transitivePeerDependencies: @@ -9513,6 +9531,10 @@ snapshots: "@types/ms@2.1.0": {} + "@types/node@24.10.1": + dependencies: + undici-types: 7.16.0 + "@types/parse-path@7.1.0": dependencies: parse-path: 7.1.0 @@ -9702,22 +9724,22 @@ snapshots: - rollup - supports-color - "@vitejs/plugin-vue-jsx@5.1.2(vite@7.2.2(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1))(vue@3.5.24(typescript@5.9.3))": + "@vitejs/plugin-vue-jsx@5.1.2(vite@7.2.2(@types/node@24.10.1)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1))(vue@3.5.24(typescript@5.9.3))": dependencies: "@babel/core": 7.28.5 "@babel/plugin-syntax-typescript": 7.27.1(@babel/core@7.28.5) "@babel/plugin-transform-typescript": 7.28.5(@babel/core@7.28.5) "@rolldown/pluginutils": 1.0.0-beta.51 "@vue/babel-plugin-jsx": 2.0.1(@babel/core@7.28.5) - vite: 7.2.2(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1) + vite: 7.2.2(@types/node@24.10.1)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1) vue: 3.5.24(typescript@5.9.3) transitivePeerDependencies: - supports-color - "@vitejs/plugin-vue@6.0.2(vite@7.2.2(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1))(vue@3.5.24(typescript@5.9.3))": + "@vitejs/plugin-vue@6.0.2(vite@7.2.2(@types/node@24.10.1)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1))(vue@3.5.24(typescript@5.9.3))": dependencies: "@rolldown/pluginutils": 1.0.0-beta.50 - vite: 7.2.2(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1) + vite: 7.2.2(@types/node@24.10.1)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1) vue: 3.5.24(typescript@5.9.3) "@volar/language-core@2.4.23": @@ -9807,14 +9829,14 @@ snapshots: dependencies: "@vue/devtools-kit": 7.7.9 - "@vue/devtools-core@8.0.5(vite@7.2.2(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1))(vue@3.5.24(typescript@5.9.3))": + "@vue/devtools-core@8.0.5(vite@7.2.2(@types/node@24.10.1)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1))(vue@3.5.24(typescript@5.9.3))": dependencies: "@vue/devtools-kit": 8.0.5 "@vue/devtools-shared": 8.0.5 mitt: 3.0.1 nanoid: 5.1.6 pathe: 2.0.3 - vite-hot-client: 2.1.0(vite@7.2.2(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1)) + vite-hot-client: 2.1.0(vite@7.2.2(@types/node@24.10.1)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1)) vue: 3.5.24(typescript@5.9.3) transitivePeerDependencies: - vite @@ -11907,16 +11929,16 @@ snapshots: transitivePeerDependencies: - magicast - nuxt@4.2.1(@parcel/watcher@2.5.1)(@vue/compiler-sfc@3.5.24)(better-sqlite3@12.4.1)(db0@0.3.4(better-sqlite3@12.4.1))(eslint@9.39.1(jiti@2.6.1))(ioredis@5.8.2)(magicast@0.5.1)(ms@2.1.3)(optionator@0.9.4)(rollup@4.53.3)(terser@5.44.1)(typescript@5.9.3)(vite@7.2.2(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1))(yaml@2.8.1): + nuxt@4.2.1(@parcel/watcher@2.5.1)(@types/node@24.10.1)(@vue/compiler-sfc@3.5.24)(better-sqlite3@12.4.1)(db0@0.3.4(better-sqlite3@12.4.1))(eslint@9.39.1(jiti@2.6.1))(ioredis@5.8.2)(magicast@0.5.1)(ms@2.1.3)(optionator@0.9.4)(rollup@4.53.3)(terser@5.44.1)(typescript@5.9.3)(vite@7.2.2(@types/node@24.10.1)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1))(yaml@2.8.1): dependencies: "@dxup/nuxt": 0.2.2(magicast@0.5.1) "@nuxt/cli": 3.30.0(magicast@0.5.1) - "@nuxt/devtools": 3.1.0(vite@7.2.2(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1))(vue@3.5.24(typescript@5.9.3)) + "@nuxt/devtools": 3.1.0(vite@7.2.2(@types/node@24.10.1)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1))(vue@3.5.24(typescript@5.9.3)) "@nuxt/kit": 4.2.1(magicast@0.5.1) - "@nuxt/nitro-server": 4.2.1(better-sqlite3@12.4.1)(db0@0.3.4(better-sqlite3@12.4.1))(ioredis@5.8.2)(magicast@0.5.1)(nuxt@4.2.1(@parcel/watcher@2.5.1)(@vue/compiler-sfc@3.5.24)(better-sqlite3@12.4.1)(db0@0.3.4(better-sqlite3@12.4.1))(eslint@9.39.1(jiti@2.6.1))(ioredis@5.8.2)(magicast@0.5.1)(ms@2.1.3)(optionator@0.9.4)(rollup@4.53.3)(terser@5.44.1)(typescript@5.9.3)(vite@7.2.2(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1))(yaml@2.8.1))(typescript@5.9.3) + "@nuxt/nitro-server": 4.2.1(better-sqlite3@12.4.1)(db0@0.3.4(better-sqlite3@12.4.1))(ioredis@5.8.2)(magicast@0.5.1)(nuxt@4.2.1(@parcel/watcher@2.5.1)(@types/node@24.10.1)(@vue/compiler-sfc@3.5.24)(better-sqlite3@12.4.1)(db0@0.3.4(better-sqlite3@12.4.1))(eslint@9.39.1(jiti@2.6.1))(ioredis@5.8.2)(magicast@0.5.1)(ms@2.1.3)(optionator@0.9.4)(rollup@4.53.3)(terser@5.44.1)(typescript@5.9.3)(vite@7.2.2(@types/node@24.10.1)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1))(yaml@2.8.1))(typescript@5.9.3) "@nuxt/schema": 4.2.1 "@nuxt/telemetry": 2.6.6(magicast@0.5.1) - "@nuxt/vite-builder": 4.2.1(eslint@9.39.1(jiti@2.6.1))(magicast@0.5.1)(ms@2.1.3)(nuxt@4.2.1(@parcel/watcher@2.5.1)(@vue/compiler-sfc@3.5.24)(better-sqlite3@12.4.1)(db0@0.3.4(better-sqlite3@12.4.1))(eslint@9.39.1(jiti@2.6.1))(ioredis@5.8.2)(magicast@0.5.1)(ms@2.1.3)(optionator@0.9.4)(rollup@4.53.3)(terser@5.44.1)(typescript@5.9.3)(vite@7.2.2(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1))(yaml@2.8.1))(optionator@0.9.4)(rollup@4.53.3)(terser@5.44.1)(typescript@5.9.3)(vue@3.5.24(typescript@5.9.3))(yaml@2.8.1) + "@nuxt/vite-builder": 4.2.1(@types/node@24.10.1)(eslint@9.39.1(jiti@2.6.1))(magicast@0.5.1)(ms@2.1.3)(nuxt@4.2.1(@parcel/watcher@2.5.1)(@types/node@24.10.1)(@vue/compiler-sfc@3.5.24)(better-sqlite3@12.4.1)(db0@0.3.4(better-sqlite3@12.4.1))(eslint@9.39.1(jiti@2.6.1))(ioredis@5.8.2)(magicast@0.5.1)(ms@2.1.3)(optionator@0.9.4)(rollup@4.53.3)(terser@5.44.1)(typescript@5.9.3)(vite@7.2.2(@types/node@24.10.1)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1))(yaml@2.8.1))(optionator@0.9.4)(rollup@4.53.3)(terser@5.44.1)(typescript@5.9.3)(vue@3.5.24(typescript@5.9.3))(yaml@2.8.1) "@unhead/vue": 2.0.19(vue@3.5.24(typescript@5.9.3)) "@vue/shared": 3.5.24 c12: 3.3.2(magicast@0.5.1) @@ -11968,6 +11990,7 @@ snapshots: vue-router: 4.6.3(vue@3.5.24(typescript@5.9.3)) optionalDependencies: "@parcel/watcher": 2.5.1 + "@types/node": 24.10.1 transitivePeerDependencies: - "@azure/app-configuration" - "@azure/cosmos" @@ -13101,6 +13124,8 @@ snapshots: magic-string: 0.30.21 unplugin: 2.3.10 + undici-types@7.16.0: {} + unenv@2.0.0-rc.24: dependencies: pathe: 2.0.3 @@ -13314,23 +13339,23 @@ snapshots: "@types/unist": 3.0.3 vfile-message: 4.0.3 - vite-dev-rpc@1.1.0(vite@7.2.2(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1)): + vite-dev-rpc@1.1.0(vite@7.2.2(@types/node@24.10.1)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1)): dependencies: birpc: 2.8.0 - vite: 7.2.2(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1) - vite-hot-client: 2.1.0(vite@7.2.2(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1)) + vite: 7.2.2(@types/node@24.10.1)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1) + vite-hot-client: 2.1.0(vite@7.2.2(@types/node@24.10.1)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1)) - vite-hot-client@2.1.0(vite@7.2.2(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1)): + vite-hot-client@2.1.0(vite@7.2.2(@types/node@24.10.1)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1)): dependencies: - vite: 7.2.2(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1) + vite: 7.2.2(@types/node@24.10.1)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1) - vite-node@5.2.0(jiti@2.6.1)(ms@2.1.3)(terser@5.44.1)(yaml@2.8.1): + vite-node@5.2.0(@types/node@24.10.1)(jiti@2.6.1)(ms@2.1.3)(terser@5.44.1)(yaml@2.8.1): dependencies: cac: 6.7.14 es-module-lexer: 1.7.0 obug: 2.0.0(ms@2.1.3) pathe: 2.0.3 - vite: 7.2.2(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1) + vite: 7.2.2(@types/node@24.10.1)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1) transitivePeerDependencies: - "@types/node" - jiti @@ -13345,7 +13370,7 @@ snapshots: - tsx - yaml - vite-plugin-checker@0.11.0(eslint@9.39.1(jiti@2.6.1))(optionator@0.9.4)(typescript@5.9.3)(vite@7.2.2(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1)): + vite-plugin-checker@0.11.0(eslint@9.39.1(jiti@2.6.1))(optionator@0.9.4)(typescript@5.9.3)(vite@7.2.2(@types/node@24.10.1)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1)): dependencies: "@babel/code-frame": 7.27.1 chokidar: 4.0.3 @@ -13354,14 +13379,14 @@ snapshots: picomatch: 4.0.3 tiny-invariant: 1.3.3 tinyglobby: 0.2.15 - vite: 7.2.2(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1) + vite: 7.2.2(@types/node@24.10.1)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1) vscode-uri: 3.1.0 optionalDependencies: eslint: 9.39.1(jiti@2.6.1) optionator: 0.9.4 typescript: 5.9.3 - vite-plugin-inspect@11.3.3(@nuxt/kit@4.2.1(magicast@0.5.1))(vite@7.2.2(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1)): + vite-plugin-inspect@11.3.3(@nuxt/kit@4.2.1(magicast@0.5.1))(vite@7.2.2(@types/node@24.10.1)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1)): dependencies: ansis: 4.2.0 debug: 4.4.3 @@ -13371,24 +13396,24 @@ snapshots: perfect-debounce: 2.0.0 sirv: 3.0.2 unplugin-utils: 0.3.1 - vite: 7.2.2(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1) - vite-dev-rpc: 1.1.0(vite@7.2.2(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1)) + vite: 7.2.2(@types/node@24.10.1)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1) + vite-dev-rpc: 1.1.0(vite@7.2.2(@types/node@24.10.1)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1)) optionalDependencies: "@nuxt/kit": 4.2.1(magicast@0.5.1) transitivePeerDependencies: - supports-color - vite-plugin-vue-tracer@1.1.3(vite@7.2.2(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1))(vue@3.5.24(typescript@5.9.3)): + vite-plugin-vue-tracer@1.1.3(vite@7.2.2(@types/node@24.10.1)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1))(vue@3.5.24(typescript@5.9.3)): dependencies: estree-walker: 3.0.3 exsolve: 1.0.8 magic-string: 0.30.21 pathe: 2.0.3 source-map-js: 1.2.1 - vite: 7.2.2(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1) + vite: 7.2.2(@types/node@24.10.1)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1) vue: 3.5.24(typescript@5.9.3) - vite@7.2.2(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1): + vite@7.2.2(@types/node@24.10.1)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1): dependencies: esbuild: 0.25.12 fdir: 6.5.0(picomatch@4.0.3) @@ -13397,6 +13422,7 @@ snapshots: rollup: 4.53.3 tinyglobby: 0.2.15 optionalDependencies: + "@types/node": 24.10.1 fsevents: 2.3.3 jiti: 2.6.1 terser: 5.44.1