From d1e551bcca569d49562fb426c590c417a2b19296 Mon Sep 17 00:00:00 2001 From: streap2 Date: Sun, 26 Apr 2026 08:11:31 +0200 Subject: [PATCH] feat: implement SEO enhancements, automatic slug generation, and font optimizations --- app/afrolife/page.tsx | 4 +- app/api/blog/[id]/route.ts | 4 + app/api/blog/route.ts | 4 + app/globals.css | 4 +- app/layout.tsx | 26 +- app/page.tsx | 7 +- app/robots.ts | 21 + app/sitemap.ts | 79 +++ components/BusinessCard.tsx | 5 +- lib/utils.ts | 13 + next-env.d.ts | 2 +- next.config.mjs | 26 + package-lock.json | 1215 ++++++++++------------------------- package.json | 4 + public/favicon.png | Bin 0 -> 27194 bytes scripts/backfill-slugs.ts | 46 ++ 16 files changed, 564 insertions(+), 896 deletions(-) create mode 100644 app/robots.ts create mode 100644 app/sitemap.ts create mode 100644 lib/utils.ts create mode 100644 public/favicon.png create mode 100644 scripts/backfill-slugs.ts diff --git a/app/afrolife/page.tsx b/app/afrolife/page.tsx index d5f7763..740103e 100644 --- a/app/afrolife/page.tsx +++ b/app/afrolife/page.tsx @@ -13,7 +13,9 @@ interface Props { export default async function AfroLifePage({ searchParams }: Props) { const params = await searchParams; - const filter = params.type as string || 'ALL'; + const rawFilter = params.type as string || 'ALL'; + const allowedFilters = ['ALL', 'EVENT', 'VIDEO', 'ARTICLE']; + const filter = allowedFilters.includes(rawFilter) ? rawFilter : 'ALL'; let items: any[] = []; diff --git a/app/api/blog/[id]/route.ts b/app/api/blog/[id]/route.ts index 473a231..249de41 100644 --- a/app/api/blog/[id]/route.ts +++ b/app/api/blog/[id]/route.ts @@ -27,6 +27,10 @@ export async function PATCH( try { const { id } = await context.params const body = await request.json() + if (body.title && body.slug === undefined) { + const { generateSlug } = await import('@/lib/utils') + body.slug = generateSlug(body.title) + } const post = await prisma.blogPost.update({ where: { id }, data: body }) return NextResponse.json(post) } catch (error) { diff --git a/app/api/blog/route.ts b/app/api/blog/route.ts index 1bf7ce4..f720f32 100644 --- a/app/api/blog/route.ts +++ b/app/api/blog/route.ts @@ -1,5 +1,6 @@ import { NextRequest, NextResponse } from 'next/server' import prisma from '@/lib/prisma' +import { generateSlug } from '@/lib/utils' // GET /api/blog export async function GET() { @@ -18,6 +19,9 @@ export async function GET() { export async function POST(request: NextRequest) { try { const body = await request.json() + if (!body.slug && body.title) { + body.slug = generateSlug(body.title) + } const post = await prisma.blogPost.create({ data: body }) return NextResponse.json(post, { status: 201 }) } catch (error) { diff --git a/app/globals.css b/app/globals.css index 270033c..a9bbbb5 100644 --- a/app/globals.css +++ b/app/globals.css @@ -2,8 +2,8 @@ @plugin "@tailwindcss/typography"; @theme { - --font-sans: 'Inter', sans-serif; - --font-serif: 'Playfair Display', serif; + --font-sans: var(--font-inter), sans-serif; + --font-serif: var(--font-playfair), serif; --color-brand-50: #fff7ed; --color-brand-100: #ffedd5; diff --git a/app/layout.tsx b/app/layout.tsx index a43b15a..fcc2552 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -8,15 +8,32 @@ import CookieBanner from '../components/CookieBanner'; import { Metadata } from 'next'; import { Toaster } from 'react-hot-toast'; import { getSiteSettings } from '../lib/settings'; +import { Inter, Playfair_Display } from 'next/font/google'; import './globals.css'; +const inter = Inter({ + subsets: ['latin'], + variable: '--font-inter', + display: 'swap', +}); + +const playfair = Playfair_Display({ + subsets: ['latin'], + variable: '--font-playfair', + display: 'swap', +}); + export const dynamic = 'force-dynamic'; export async function generateMetadata(): Promise { const settings = await getSiteSettings(); return { + metadataBase: new URL(process.env.NEXT_PUBLIC_SITE_URL || 'http://localhost:3000'), title: `${settings.siteName} - L'Annuaire 2.0`, - description: settings.siteSlogan, + description: settings.siteSlogan || "Découvrez les pépites de l'écosystème africain.", + alternates: { + canonical: '/', + }, }; } @@ -24,12 +41,11 @@ export default async function RootLayout({ children }: { children: React.ReactNo const settings = await getSiteSettings(); return ( - + - - + - + diff --git a/app/page.tsx b/app/page.tsx index f612d6f..828b5e5 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -4,6 +4,7 @@ import React, { useState, useEffect } from 'react'; import Link from 'next/link'; import { useRouter } from 'next/navigation'; import { Search, MapPin, Briefcase, TrendingUp, Loader2, ArrowRight } from 'lucide-react'; +import { generateSlug } from '../lib/utils'; import { Business, BlogPost } from '../types'; import BusinessCard from '../components/BusinessCard'; import { useUser } from '../components/UserProvider'; @@ -68,7 +69,7 @@ const HomePage = () => { {/* Hero Section */}
- African entrepreneurs team + African entrepreneurs team

@@ -179,9 +180,9 @@ const HomePage = () => { }) .slice(0, settings?.homeBlogCount || 3) .map(post => ( - +
- {post.title} + {post.title}

{post.title}

diff --git a/app/robots.ts b/app/robots.ts new file mode 100644 index 0000000..06b1fdd --- /dev/null +++ b/app/robots.ts @@ -0,0 +1,21 @@ +import { MetadataRoute } from 'next'; + +export default function robots(): MetadataRoute.Robots { + const baseUrl = process.env.NEXT_PUBLIC_APP_URL || 'https://afroprenariat.com'; + + return { + rules: { + userAgent: '*', + allow: '/', + disallow: [ + '/login', + '/register', + '/dashboard', + '/subscription', + '/api', + '/suspended', + ], + }, + sitemap: `${baseUrl}/sitemap.xml`, + }; +} diff --git a/app/sitemap.ts b/app/sitemap.ts new file mode 100644 index 0000000..880eda5 --- /dev/null +++ b/app/sitemap.ts @@ -0,0 +1,79 @@ +import { MetadataRoute } from 'next'; +import prisma from '@/lib/prisma'; + +export default async function sitemap(): Promise { + const baseUrl = process.env.NEXT_PUBLIC_APP_URL || 'https://afroprenariat.com'; + + // 1. Static routes + const staticRoutes = [ + { + url: `${baseUrl}`, + lastModified: new Date(), + changeFrequency: 'daily' as const, + priority: 1.0, + }, + { + url: `${baseUrl}/annuaire`, + lastModified: new Date(), + changeFrequency: 'daily' as const, + priority: 0.9, + }, + { + url: `${baseUrl}/blog`, + lastModified: new Date(), + changeFrequency: 'daily' as const, + priority: 0.9, + }, + { + url: `${baseUrl}/afrolife`, + lastModified: new Date(), + changeFrequency: 'weekly' as const, + priority: 0.8, + }, + { + url: `${baseUrl}/cgu`, + lastModified: new Date(), + changeFrequency: 'yearly' as const, + priority: 0.3, + }, + { + url: `${baseUrl}/cgv`, + lastModified: new Date(), + changeFrequency: 'yearly' as const, + priority: 0.3, + }, + ]; + + try { + // 2. Fetch all active businesses + const businesses = await prisma.business.findMany({ + where: { isActive: true, isSuspended: false }, + select: { id: true, slug: true, updatedAt: true }, + }); + + const businessRoutes = businesses.map((business) => ({ + url: `${baseUrl}/annuaire/${business.slug || business.id}`, + lastModified: business.updatedAt, + changeFrequency: 'weekly' as const, + priority: 0.8, + })); + + // 3. Fetch all blog posts + const blogPosts = await prisma.blogPost.findMany({ + select: { id: true, slug: true, updatedAt: true }, + }); + + const blogRoutes = blogPosts.map((post) => ({ + url: `${baseUrl}/blog/${post.slug || post.id}`, + lastModified: post.updatedAt, + changeFrequency: 'monthly' as const, + priority: 0.7, + })); + + return [...staticRoutes, ...businessRoutes, ...blogRoutes]; + } catch (error) { + console.error("Error generating sitemap:", error); + // Fallback to only static routes if DB connection fails + return staticRoutes; + } +} diff --git a/components/BusinessCard.tsx b/components/BusinessCard.tsx index cbddf66..9b80275 100644 --- a/components/BusinessCard.tsx +++ b/components/BusinessCard.tsx @@ -52,6 +52,9 @@ const BusinessCard: React.FC<{ business: Business }> = ({ business }) => { src={`https://picsum.photos/seed/${business.id}/500/300`} alt="Couverture" className="w-full h-full object-cover transition-transform duration-700 group-hover:scale-105" + width={500} + height={300} + loading="lazy" />
@@ -98,7 +101,7 @@ const BusinessCard: React.FC<{ business: Business }> = ({ business }) => { {/* Logo */}
- {business.name} + {business.name}
diff --git a/lib/utils.ts b/lib/utils.ts new file mode 100644 index 0000000..5d55ea0 --- /dev/null +++ b/lib/utils.ts @@ -0,0 +1,13 @@ +export function generateSlug(text: string): string { + return text + .toString() + .toLowerCase() + .trim() + .normalize('NFD') // remove accents + .replace(/[\u0300-\u036f]/g, '') + .replace(/\s+/g, '-') // replace spaces with - + .replace(/[^\w-]+/g, '') // remove all non-word chars + .replace(/--+/g, '-') // replace multiple - with single - + .replace(/^-+/, '') // trim - from start of text + .replace(/-+$/, ''); // trim - from end of text +} diff --git a/next-env.d.ts b/next-env.d.ts index 9edff1c..c4b7818 100644 --- a/next-env.d.ts +++ b/next-env.d.ts @@ -1,6 +1,6 @@ /// /// -import "./.next/types/routes.d.ts"; +import "./.next/dev/types/routes.d.ts"; // NOTE: This file should not be edited // see https://nextjs.org/docs/app/api-reference/config/typescript for more information. diff --git a/next.config.mjs b/next.config.mjs index 97c630e..cde60d5 100644 --- a/next.config.mjs +++ b/next.config.mjs @@ -2,6 +2,32 @@ const nextConfig = { reactStrictMode: true, output: 'standalone', + poweredByHeader: false, + async headers() { + return [ + { + source: '/:path*', + headers: [ + { + key: 'X-Frame-Options', + value: 'SAMEORIGIN', + }, + { + key: 'Content-Security-Policy', + value: "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; img-src 'self' data: blob: https:; font-src 'self' data:; media-src 'self' https:; connect-src 'self' wss: https:; base-uri 'self'; form-action 'self'; frame-ancestors 'self';", + }, + { + key: 'X-Content-Type-Options', + value: 'nosniff', + }, + { + key: 'Referrer-Policy', + value: 'strict-origin-when-cross-origin', + } + ], + }, + ]; + }, }; export default nextConfig; diff --git a/package-lock.json b/package-lock.json index 3c67476..c6ec80b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -80,9 +80,9 @@ } }, "node_modules/@emnapi/runtime": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.8.1.tgz", - "integrity": "sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.10.0.tgz", + "integrity": "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==", "license": "MIT", "optional": true, "dependencies": { @@ -506,9 +506,9 @@ } }, "node_modules/@google/genai": { - "version": "1.42.0", - "resolved": "https://registry.npmjs.org/@google/genai/-/genai-1.42.0.tgz", - "integrity": "sha512-+3nlMTcrQufbQ8IumGkOphxD5Pd5kKyJOzLcnY0/1IuE8upJk5aLmoexZ2BJhBp1zAjRJMEB4a2CJwKI9e2EYw==", + "version": "1.50.1", + "resolved": "https://registry.npmjs.org/@google/genai/-/genai-1.50.1.tgz", + "integrity": "sha512-YbkX7H9+1Pt8wOt7DDREy8XSoiL6fRDzZQRyaVBarFf8MR3zHGqVdvM4cLbDXqPhxqvegZShgfxb8kw9C7YhAQ==", "license": "Apache-2.0", "dependencies": { "google-auth-library": "^10.3.0", @@ -529,9 +529,9 @@ } }, "node_modules/@hono/node-server": { - "version": "1.19.11", - "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.19.11.tgz", - "integrity": "sha512-dr8/3zEaB+p0D2n/IUrlPF1HZm586qgJNXK1a9fhg/PzdtkK7Ksd5l312tJX2yBuALqDYBlG20QEbayqPyxn+g==", + "version": "1.19.14", + "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.19.14.tgz", + "integrity": "sha512-GwtvgtXxnWsucXvbQXkRgqksiH2Qed37H9xHZocE5sA3N8O8O8/8FA3uclQXxXVzc9XBZuEOMK7+r02FmSpHtw==", "license": "MIT", "engines": { "node": ">=18.14.1" @@ -541,9 +541,9 @@ } }, "node_modules/@img/colour": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.0.0.tgz", - "integrity": "sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.1.0.tgz", + "integrity": "sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==", "license": "MIT", "optional": true, "engines": { @@ -1006,23 +1006,6 @@ "url": "https://opencollective.com/libvips" } }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "license": "ISC", - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.13", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", @@ -1075,15 +1058,15 @@ "license": "MIT" }, "node_modules/@next/env": { - "version": "16.1.6", - "resolved": "https://registry.npmjs.org/@next/env/-/env-16.1.6.tgz", - "integrity": "sha512-N1ySLuZjnAtN3kFnwhAwPvZah8RJxKasD7x1f8shFqhncnWZn4JMfg37diLNuoHsLAlrDfM3g4mawVdtAG8XLQ==", + "version": "16.2.4", + "resolved": "https://registry.npmjs.org/@next/env/-/env-16.2.4.tgz", + "integrity": "sha512-dKkkOzOSwFYe5RX6y26fZgkSpVAlIOJKQHIiydQcrWH6y/97+RceSOAdjZ14Qa3zLduVUy0TXcn+EiM6t4rPgw==", "license": "MIT" }, "node_modules/@next/swc-darwin-arm64": { - "version": "16.1.6", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-16.1.6.tgz", - "integrity": "sha512-wTzYulosJr/6nFnqGW7FrG3jfUUlEf8UjGA0/pyypJl42ExdVgC6xJgcXQ+V8QFn6niSG2Pb8+MIG1mZr2vczw==", + "version": "16.2.4", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-16.2.4.tgz", + "integrity": "sha512-OXTFFox5EKN1Ym08vfrz+OXxmCcEjT4SFMbNRsWZE99dMqt2Kcusl5MqPXcW232RYkMLQTy0hqgAMEsfEd/l2A==", "cpu": [ "arm64" ], @@ -1097,9 +1080,9 @@ } }, "node_modules/@next/swc-darwin-x64": { - "version": "16.1.6", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-16.1.6.tgz", - "integrity": "sha512-BLFPYPDO+MNJsiDWbeVzqvYd4NyuRrEYVB5k2N3JfWncuHAy2IVwMAOlVQDFjj+krkWzhY2apvmekMkfQR0CUQ==", + "version": "16.2.4", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-16.2.4.tgz", + "integrity": "sha512-XhpVnUfmYWvD3YrXu55XdcAkQtOnvaI6wtQa8fuF5fGoKoxIUZ0kWPtcOfqJEWngFF/lOS9l3+O9CcownhiQxQ==", "cpu": [ "x64" ], @@ -1113,9 +1096,9 @@ } }, "node_modules/@next/swc-linux-arm64-gnu": { - "version": "16.1.6", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-16.1.6.tgz", - "integrity": "sha512-OJYkCd5pj/QloBvoEcJ2XiMnlJkRv9idWA/j0ugSuA34gMT6f5b7vOiCQHVRpvStoZUknhl6/UxOXL4OwtdaBw==", + "version": "16.2.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-16.2.4.tgz", + "integrity": "sha512-Mx/tjlNA3G8kg14QvuGAJ4xBwPk1tUHq56JxZ8CXnZwz1Etz714soCEzGQQzVMz4bEnGPowzkV6Xrp6wAkEWOQ==", "cpu": [ "arm64" ], @@ -1129,9 +1112,9 @@ } }, "node_modules/@next/swc-linux-arm64-musl": { - "version": "16.1.6", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-16.1.6.tgz", - "integrity": "sha512-S4J2v+8tT3NIO9u2q+S0G5KdvNDjXfAv06OhfOzNDaBn5rw84DGXWndOEB7d5/x852A20sW1M56vhC/tRVbccQ==", + "version": "16.2.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-16.2.4.tgz", + "integrity": "sha512-iVMMp14514u7Nup2umQS03nT/bN9HurK8ufylC3FZNykrwjtx7V1A7+4kvhbDSCeonTVqV3Txnv0Lu+m2oDXNg==", "cpu": [ "arm64" ], @@ -1145,9 +1128,9 @@ } }, "node_modules/@next/swc-linux-x64-gnu": { - "version": "16.1.6", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-16.1.6.tgz", - "integrity": "sha512-2eEBDkFlMMNQnkTyPBhQOAyn2qMxyG2eE7GPH2WIDGEpEILcBPI/jdSv4t6xupSP+ot/jkfrCShLAa7+ZUPcJQ==", + "version": "16.2.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-16.2.4.tgz", + "integrity": "sha512-EZOvm1aQWgnI/N/xcWOlnS3RQBk0VtVav5Zo7n4p0A7UKyTDx047k8opDbXgBpHl4CulRqRfbw3QrX2w5UOXMQ==", "cpu": [ "x64" ], @@ -1161,9 +1144,9 @@ } }, "node_modules/@next/swc-linux-x64-musl": { - "version": "16.1.6", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-16.1.6.tgz", - "integrity": "sha512-oicJwRlyOoZXVlxmIMaTq7f8pN9QNbdes0q2FXfRsPhfCi8n8JmOZJm5oo1pwDaFbnnD421rVU409M3evFbIqg==", + "version": "16.2.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-16.2.4.tgz", + "integrity": "sha512-h9FxsngCm9cTBf71AR4fGznDEDx1hS7+kSEiIRjq5kO1oXWm07DxVGZjCvk0SGx7TSjlUqhI8oOyz7NfwAdPoA==", "cpu": [ "x64" ], @@ -1177,9 +1160,9 @@ } }, "node_modules/@next/swc-win32-arm64-msvc": { - "version": "16.1.6", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-16.1.6.tgz", - "integrity": "sha512-gQmm8izDTPgs+DCWH22kcDmuUp7NyiJgEl18bcr8irXA5N2m2O+JQIr6f3ct42GOs9c0h8QF3L5SzIxcYAAXXw==", + "version": "16.2.4", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-16.2.4.tgz", + "integrity": "sha512-3NdJV5OXMSOeJYijX+bjaLge3mJBlh4ybydbT4GFoB/2hAojWHtMhl3CYlYoMrjPuodp0nzFVi4Tj2+WaMg+Ow==", "cpu": [ "arm64" ], @@ -1193,9 +1176,9 @@ } }, "node_modules/@next/swc-win32-x64-msvc": { - "version": "16.1.6", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-16.1.6.tgz", - "integrity": "sha512-NRfO39AIrzBnixKbjuo2YiYhB6o9d8v/ymU9m/Xk8cyVk+k7XylniXkHwjs4s70wedVffc6bQNbufk5v0xEm0A==", + "version": "16.2.4", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-16.2.4.tgz", + "integrity": "sha512-kMVGgsqhO5YTYODD9IPGGhA6iprWidQckK3LmPeW08PIFENRmgfb4MjXHO+p//d+ts2rpjvK5gXWzXSMrPl9cw==", "cpu": [ "x64" ], @@ -1208,35 +1191,25 @@ "node": ">= 10" } }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "license": "MIT", - "optional": true, - "engines": { - "node": ">=14" - } - }, "node_modules/@prisma/adapter-pg": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/@prisma/adapter-pg/-/adapter-pg-7.7.0.tgz", - "integrity": "sha512-q33Ta8sKbgzEpAy0lx45tAq//yMv0qcb+8nj+TCA3P4wiAY+OBFEFk/NDkZncAfHaNJeGo5WJpJdpbL+ijYx8g==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@prisma/adapter-pg/-/adapter-pg-7.8.0.tgz", + "integrity": "sha512-ygb3UkerK3v8MDpXVgCISdRNDozpxh6+JVJgiIGbSr5KBgz10LLf5ejUskPGoXlsIjxsOu6nuy1JVQr2EKGSlg==", "license": "Apache-2.0", "dependencies": { - "@prisma/driver-adapter-utils": "7.7.0", + "@prisma/driver-adapter-utils": "7.8.0", "@types/pg": "^8.16.0", "pg": "^8.16.3", "postgres-array": "3.0.4" } }, "node_modules/@prisma/client": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/@prisma/client/-/client-7.7.0.tgz", - "integrity": "sha512-5Ar4OsZpJ54s21sy5oDNNW9gQtd4NuxCaiM7+JDTOU07D6VvlpLjYzAVCMB1+JzokN+08dAVomlx+b7bhJd3ww==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@prisma/client/-/client-7.8.0.tgz", + "integrity": "sha512-HFp3Dawv/3sU3JtlPha90IB+48lS7zHiH4LKZPjmcE8YH5P9DOXGPvo8dqOtO7MqLDd1p2hOWMcFlRT1DMblHw==", "license": "Apache-2.0", "dependencies": { - "@prisma/client-runtime-utils": "7.7.0" + "@prisma/client-runtime-utils": "7.8.0" }, "engines": { "node": "^20.19 || ^22.12 || >=24.0" @@ -1255,27 +1228,27 @@ } }, "node_modules/@prisma/client-runtime-utils": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/@prisma/client-runtime-utils/-/client-runtime-utils-7.7.0.tgz", - "integrity": "sha512-BLyd0UpFYOtyJFTHm7jS9vesHW7P83abibodQMiIofqjBKzDHQ1VAsQkdfvXyYDkPlONPfOTz7/rv3x/+CQqvQ==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@prisma/client-runtime-utils/-/client-runtime-utils-7.8.0.tgz", + "integrity": "sha512-5NQZztQ0oY/ADFkmd9gPuweH5A1/CCY8YQPorLLO0Mu6a87mY5gsnDkzmFmIHs9NFaLnZojzgddFVN4RpKYrdw==", "license": "Apache-2.0" }, "node_modules/@prisma/config": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/@prisma/config/-/config-7.7.0.tgz", - "integrity": "sha512-hmPI3tKLO2aP0Y5vugbjcnA9qqlfJndiT6ds4tw28U5hNHLWg+mHJEWAhjsSPgxjtmxhJ/EDIeIlyh+3Us0OPg==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@prisma/config/-/config-7.8.0.tgz", + "integrity": "sha512-HFESzd9rx2ZQxlK+TL7tu1HPvCqrHiL6LCxYykI2c34mvaUuIVVl3lYuicJD/MNnzgPnyeBEMlK4WTomJCV5jw==", "license": "Apache-2.0", "dependencies": { - "c12": "3.1.0", + "c12": "3.3.4", "deepmerge-ts": "7.1.5", "effect": "3.20.0", "empathic": "2.0.0" } }, "node_modules/@prisma/debug": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-7.7.0.tgz", - "integrity": "sha512-12J62XdqCmpiwJHhHdQxZeY3ckVCWIFmcJP8hg5dPTceeiQ0wiojXGFYTluKqFQfu46fRLgb/rLALZMAx3+dTA==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-7.8.0.tgz", + "integrity": "sha512-p+QZReysDUqXC+mk17q9a+Y/qzh4c2KYliDK30buYUyfrGeTGSyfmc0AIrJRhZJrLHhRiJa9Au/J72h3C+szvA==", "license": "Apache-2.0" }, "node_modules/@prisma/dev": { @@ -1304,60 +1277,60 @@ } }, "node_modules/@prisma/driver-adapter-utils": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/@prisma/driver-adapter-utils/-/driver-adapter-utils-7.7.0.tgz", - "integrity": "sha512-gZXREeu6mOk7zXfGFJgh86p7Vhj0sXNKp+4Cg1tWYo7V2dfncP2qxS2BiTmbIIha8xPqItkl0WSw38RuSq1HoQ==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@prisma/driver-adapter-utils/-/driver-adapter-utils-7.8.0.tgz", + "integrity": "sha512-/Q13o0ZT0rjc1Xk0Q9KhZYwuq2EW/vSbWUBKfgEKkaCuB/Sg6bqnjmTZqC5cD4d6y1vfFAEwBRzfzoSMIVJ55A==", "license": "Apache-2.0", "dependencies": { - "@prisma/debug": "7.7.0" + "@prisma/debug": "7.8.0" } }, "node_modules/@prisma/engines": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-7.7.0.tgz", - "integrity": "sha512-7fmcbT7HHXBq/b+3h/dO1JI3fd8l8q7erf7xP7pRprh58hmSSnG8mg9K3yjW3h9WaHWUwngVFpSxxxivaitQ2w==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-7.8.0.tgz", + "integrity": "sha512-jx3rCnNNrt5uzbkKlegtQ2GZHxSlihMCzutgT/BP6UIDF1r9tDI39hV/0T/cHZgzJ3ELbuQPXlVZy+Y1n0pcgw==", "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { - "@prisma/debug": "7.7.0", - "@prisma/engines-version": "7.6.0-1.75cbdc1eb7150937890ad5465d861175c6624711", - "@prisma/fetch-engine": "7.7.0", - "@prisma/get-platform": "7.7.0" + "@prisma/debug": "7.8.0", + "@prisma/engines-version": "7.8.0-6.3c6e192761c0362d496ed980de936e2f3cebcd3a", + "@prisma/fetch-engine": "7.8.0", + "@prisma/get-platform": "7.8.0" } }, "node_modules/@prisma/engines-version": { - "version": "7.6.0-1.75cbdc1eb7150937890ad5465d861175c6624711", - "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-7.6.0-1.75cbdc1eb7150937890ad5465d861175c6624711.tgz", - "integrity": "sha512-r51DLcJ8bDRSrBEJF3J4cinoWyGA7rfP2mG6lD90VqIbGNOkbfcLcXalSVjq5Y6brQS3vcjrq4GbyUb1Cb7vkw==", + "version": "7.8.0-6.3c6e192761c0362d496ed980de936e2f3cebcd3a", + "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-7.8.0-6.3c6e192761c0362d496ed980de936e2f3cebcd3a.tgz", + "integrity": "sha512-fJPQxCkLgA5EayWaW8eArgCvjJ+N+Kz3VyeNKMEeYiQC4alNkxRKFVAGxv/ZUzuJISKqdw+zGeDbS6mn6RCPOA==", "license": "Apache-2.0" }, "node_modules/@prisma/engines/node_modules/@prisma/get-platform": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-7.7.0.tgz", - "integrity": "sha512-MEUNzvKxvYnJ7kgvd6oNRnMmmiGNS9TYLB2weMeIXplnHdL/UWEGnvavYGnN7KLJ2n0iI4dDAyzSkHI3c7AscQ==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-7.8.0.tgz", + "integrity": "sha512-WlxgRGnolL8VH2EmkH1R/DkKNr/mVdS3G2h42IZFFZ3eUrH9OT6t73kIOSlkkrv50wG123Iq8d96ufv5LlZktw==", "license": "Apache-2.0", "dependencies": { - "@prisma/debug": "7.7.0" + "@prisma/debug": "7.8.0" } }, "node_modules/@prisma/fetch-engine": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-7.7.0.tgz", - "integrity": "sha512-TfyzveBQoK4xALzsTpVhB/0KG1N8zOK0ap+RnBMkzGUu3f98fnQ4QtXa2wlKPhsO2X8a3N5ugFQgcKNoHGmDfw==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-7.8.0.tgz", + "integrity": "sha512-gwB0Euiz/DDRyxFRpLXYlK3RfaZUj1c5dAYMuhZYfApg7arknJlcb9bIsOHDppJmbqYaVA+yBIiFMDBfprsNPQ==", "license": "Apache-2.0", "dependencies": { - "@prisma/debug": "7.7.0", - "@prisma/engines-version": "7.6.0-1.75cbdc1eb7150937890ad5465d861175c6624711", - "@prisma/get-platform": "7.7.0" + "@prisma/debug": "7.8.0", + "@prisma/engines-version": "7.8.0-6.3c6e192761c0362d496ed980de936e2f3cebcd3a", + "@prisma/get-platform": "7.8.0" } }, "node_modules/@prisma/fetch-engine/node_modules/@prisma/get-platform": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-7.7.0.tgz", - "integrity": "sha512-MEUNzvKxvYnJ7kgvd6oNRnMmmiGNS9TYLB2weMeIXplnHdL/UWEGnvavYGnN7KLJ2n0iI4dDAyzSkHI3c7AscQ==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-7.8.0.tgz", + "integrity": "sha512-WlxgRGnolL8VH2EmkH1R/DkKNr/mVdS3G2h42IZFFZ3eUrH9OT6t73kIOSlkkrv50wG123Iq8d96ufv5LlZktw==", "license": "Apache-2.0", "dependencies": { - "@prisma/debug": "7.7.0" + "@prisma/debug": "7.8.0" } }, "node_modules/@prisma/get-platform": { @@ -1677,9 +1650,9 @@ } }, "node_modules/@tailwindcss/node": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.2.2.tgz", - "integrity": "sha512-pXS+wJ2gZpVXqFaUEjojq7jzMpTGf8rU6ipJz5ovJV6PUGmlJ+jvIwGrzdHdQ80Sg+wmQxUFuoW1UAAwHNEdFA==", + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.2.4.tgz", + "integrity": "sha512-Ai7+yQPxz3ddrDQzFfBKdHEVBg0w3Zl83jnjuwxnZOsnH9pGn93QHQtpU0p/8rYWxvbFZHneni6p1BSLK4DkGA==", "license": "MIT", "dependencies": { "@jridgewell/remapping": "^2.3.5", @@ -1688,36 +1661,36 @@ "lightningcss": "1.32.0", "magic-string": "^0.30.21", "source-map-js": "^1.2.1", - "tailwindcss": "4.2.2" + "tailwindcss": "4.2.4" } }, "node_modules/@tailwindcss/oxide": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.2.2.tgz", - "integrity": "sha512-qEUA07+E5kehxYp9BVMpq9E8vnJuBHfJEC0vPC5e7iL/hw7HR61aDKoVoKzrG+QKp56vhNZe4qwkRmMC0zDLvg==", + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.2.4.tgz", + "integrity": "sha512-9El/iI069DKDSXwTvB9J4BwdO5JhRrOweGaK25taBAvBXyXqJAX+Jqdvs8r8gKpsI/1m0LeJLyQYTf/WLrBT1Q==", "license": "MIT", "engines": { "node": ">= 20" }, "optionalDependencies": { - "@tailwindcss/oxide-android-arm64": "4.2.2", - "@tailwindcss/oxide-darwin-arm64": "4.2.2", - "@tailwindcss/oxide-darwin-x64": "4.2.2", - "@tailwindcss/oxide-freebsd-x64": "4.2.2", - "@tailwindcss/oxide-linux-arm-gnueabihf": "4.2.2", - "@tailwindcss/oxide-linux-arm64-gnu": "4.2.2", - "@tailwindcss/oxide-linux-arm64-musl": "4.2.2", - "@tailwindcss/oxide-linux-x64-gnu": "4.2.2", - "@tailwindcss/oxide-linux-x64-musl": "4.2.2", - "@tailwindcss/oxide-wasm32-wasi": "4.2.2", - "@tailwindcss/oxide-win32-arm64-msvc": "4.2.2", - "@tailwindcss/oxide-win32-x64-msvc": "4.2.2" + "@tailwindcss/oxide-android-arm64": "4.2.4", + "@tailwindcss/oxide-darwin-arm64": "4.2.4", + "@tailwindcss/oxide-darwin-x64": "4.2.4", + "@tailwindcss/oxide-freebsd-x64": "4.2.4", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.2.4", + "@tailwindcss/oxide-linux-arm64-gnu": "4.2.4", + "@tailwindcss/oxide-linux-arm64-musl": "4.2.4", + "@tailwindcss/oxide-linux-x64-gnu": "4.2.4", + "@tailwindcss/oxide-linux-x64-musl": "4.2.4", + "@tailwindcss/oxide-wasm32-wasi": "4.2.4", + "@tailwindcss/oxide-win32-arm64-msvc": "4.2.4", + "@tailwindcss/oxide-win32-x64-msvc": "4.2.4" } }, "node_modules/@tailwindcss/oxide-android-arm64": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.2.2.tgz", - "integrity": "sha512-dXGR1n+P3B6748jZO/SvHZq7qBOqqzQ+yFrXpoOWWALWndF9MoSKAT3Q0fYgAzYzGhxNYOoysRvYlpixRBBoDg==", + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.2.4.tgz", + "integrity": "sha512-e7MOr1SAn9U8KlZzPi1ZXGZHeC5anY36qjNwmZv9pOJ8E4Q6jmD1vyEHkQFmNOIN7twGPEMXRHmitN4zCMN03g==", "cpu": [ "arm64" ], @@ -1731,9 +1704,9 @@ } }, "node_modules/@tailwindcss/oxide-darwin-arm64": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.2.2.tgz", - "integrity": "sha512-iq9Qjr6knfMpZHj55/37ouZeykwbDqF21gPFtfnhCCKGDcPI/21FKC9XdMO/XyBM7qKORx6UIhGgg6jLl7BZlg==", + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.2.4.tgz", + "integrity": "sha512-tSC/Kbqpz/5/o/C2sG7QvOxAKqyd10bq+ypZNf+9Fi2TvbVbv1zNpcEptcsU7DPROaSbVgUXmrzKhurFvo5eDg==", "cpu": [ "arm64" ], @@ -1747,9 +1720,9 @@ } }, "node_modules/@tailwindcss/oxide-darwin-x64": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.2.2.tgz", - "integrity": "sha512-BlR+2c3nzc8f2G639LpL89YY4bdcIdUmiOOkv2GQv4/4M0vJlpXEa0JXNHhCHU7VWOKWT/CjqHdTP8aUuDJkuw==", + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.2.4.tgz", + "integrity": "sha512-yPyUXn3yO/ufR6+Kzv0t4fCg2qNr90jxXc5QqBpjlPNd0NqyDXcmQb/6weunH/MEDXW5dhyEi+agTDiqa3WsGg==", "cpu": [ "x64" ], @@ -1763,9 +1736,9 @@ } }, "node_modules/@tailwindcss/oxide-freebsd-x64": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.2.2.tgz", - "integrity": "sha512-YUqUgrGMSu2CDO82hzlQ5qSb5xmx3RUrke/QgnoEx7KvmRJHQuZHZmZTLSuuHwFf0DJPybFMXMYf+WJdxHy/nQ==", + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.2.4.tgz", + "integrity": "sha512-BoMIB4vMQtZsXdGLVc2z+P9DbETkiopogfWZKbWwM8b/1Vinbs4YcUwo+kM/KeLkX3Ygrf4/PsRndKaYhS8Eiw==", "cpu": [ "x64" ], @@ -1779,9 +1752,9 @@ } }, "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.2.2.tgz", - "integrity": "sha512-FPdhvsW6g06T9BWT0qTwiVZYE2WIFo2dY5aCSpjG/S/u1tby+wXoslXS0kl3/KXnULlLr1E3NPRRw0g7t2kgaQ==", + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.2.4.tgz", + "integrity": "sha512-7pIHBLTHYRAlS7V22JNuTh33yLH4VElwKtB3bwchK/UaKUPpQ0lPQiOWcbm4V3WP2I6fNIJ23vABIvoy2izdwA==", "cpu": [ "arm" ], @@ -1795,9 +1768,9 @@ } }, "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.2.2.tgz", - "integrity": "sha512-4og1V+ftEPXGttOO7eCmW7VICmzzJWgMx+QXAJRAhjrSjumCwWqMfkDrNu1LXEQzNAwz28NCUpucgQPrR4S2yw==", + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.2.4.tgz", + "integrity": "sha512-+E4wxJ0ZGOzSH325reXTWB48l42i93kQqMvDyz5gqfRzRZ7faNhnmvlV4EPGJU3QJM/3Ab5jhJ5pCRUsKn6OQw==", "cpu": [ "arm64" ], @@ -1811,9 +1784,9 @@ } }, "node_modules/@tailwindcss/oxide-linux-arm64-musl": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.2.2.tgz", - "integrity": "sha512-oCfG/mS+/+XRlwNjnsNLVwnMWYH7tn/kYPsNPh+JSOMlnt93mYNCKHYzylRhI51X+TbR+ufNhhKKzm6QkqX8ag==", + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.2.4.tgz", + "integrity": "sha512-bBADEGAbo4ASnppIziaQJelekCxdMaxisrk+fB7Thit72IBnALp9K6ffA2G4ruj90G9XRS2VQ6q2bCKbfFV82g==", "cpu": [ "arm64" ], @@ -1827,9 +1800,9 @@ } }, "node_modules/@tailwindcss/oxide-linux-x64-gnu": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.2.2.tgz", - "integrity": "sha512-rTAGAkDgqbXHNp/xW0iugLVmX62wOp2PoE39BTCGKjv3Iocf6AFbRP/wZT/kuCxC9QBh9Pu8XPkv/zCZB2mcMg==", + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.2.4.tgz", + "integrity": "sha512-7Mx25E4WTfnht0TVRTyC00j3i0M+EeFe7wguMDTlX4mRxafznw0CA8WJkFjWYH5BlgELd1kSjuU2JiPnNZbJDA==", "cpu": [ "x64" ], @@ -1843,9 +1816,9 @@ } }, "node_modules/@tailwindcss/oxide-linux-x64-musl": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.2.2.tgz", - "integrity": "sha512-XW3t3qwbIwiSyRCggeO2zxe3KWaEbM0/kW9e8+0XpBgyKU4ATYzcVSMKteZJ1iukJ3HgHBjbg9P5YPRCVUxlnQ==", + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.2.4.tgz", + "integrity": "sha512-2wwJRF7nyhOR0hhHoChc04xngV3iS+akccHTGtz965FwF0up4b2lOdo6kI1EbDaEXKgvcrFBYcYQQ/rrnWFVfA==", "cpu": [ "x64" ], @@ -1859,9 +1832,9 @@ } }, "node_modules/@tailwindcss/oxide-wasm32-wasi": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.2.2.tgz", - "integrity": "sha512-eKSztKsmEsn1O5lJ4ZAfyn41NfG7vzCg496YiGtMDV86jz1q/irhms5O0VrY6ZwTUkFy/EKG3RfWgxSI3VbZ8Q==", + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.2.4.tgz", + "integrity": "sha512-FQsqApeor8Fo6gUEklzmaa9994orJZZDBAlQpK2Mq+DslRKFJeD6AjHpBQ0kZFQohVr8o85PPh8eOy86VlSCmw==", "bundleDependencies": [ "@napi-rs/wasm-runtime", "@emnapi/core", @@ -1888,9 +1861,9 @@ } }, "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.2.2.tgz", - "integrity": "sha512-qPmaQM4iKu5mxpsrWZMOZRgZv1tOZpUm+zdhhQP0VhJfyGGO3aUKdbh3gDZc/dPLQwW4eSqWGrrcWNBZWUWaXQ==", + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.2.4.tgz", + "integrity": "sha512-L9BXqxC4ToVgwMFqj3pmZRqyHEztulpUJzCxUtLjobMCzTPsGt1Fa9enKbOpY2iIyVtaHNeNvAK8ERP/64sqGQ==", "cpu": [ "arm64" ], @@ -1904,9 +1877,9 @@ } }, "node_modules/@tailwindcss/oxide-win32-x64-msvc": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.2.2.tgz", - "integrity": "sha512-1T/37VvI7WyH66b+vqHj/cLwnCxt7Qt3WFu5Q8hk65aOvlwAhs7rAp1VkulBJw/N4tMirXjVnylTR72uI0HGcA==", + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.2.4.tgz", + "integrity": "sha512-ESlKG0EpVJQwRjXDDa9rLvhEAh0mhP1sF7sap9dNZT0yyl9SAG6T7gdP09EH0vIv0UNTlo6jPWyujD6559fZvw==", "cpu": [ "x64" ], @@ -1920,16 +1893,16 @@ } }, "node_modules/@tailwindcss/postcss": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/postcss/-/postcss-4.2.2.tgz", - "integrity": "sha512-n4goKQbW8RVXIbNKRB/45LzyUqN451deQK0nzIeauVEqjlI49slUlgKYJM2QyUzap/PcpnS7kzSUmPb1sCRvYQ==", + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/postcss/-/postcss-4.2.4.tgz", + "integrity": "sha512-wgAVj6nUWAolAu8YFvzT2cTBIElWHkjZwFYovF+xsqKsW2ADxM/X2opxj5NsF/qVccAOjRNe8X2IdPzMsWyHTg==", "license": "MIT", "dependencies": { "@alloc/quick-lru": "^5.2.0", - "@tailwindcss/node": "4.2.2", - "@tailwindcss/oxide": "4.2.2", + "@tailwindcss/node": "4.2.4", + "@tailwindcss/oxide": "4.2.4", "postcss": "^8.5.6", - "tailwindcss": "4.2.2" + "tailwindcss": "4.2.4" } }, "node_modules/@tailwindcss/typography": { @@ -2014,18 +1987,18 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "22.19.11", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.11.tgz", - "integrity": "sha512-BH7YwL6rA93ReqeQS1c4bsPpcfOmJasG+Fkr6Y59q83f9M1WcBRHR2vM+P9eOisYRcN3ujQoiZY8uk5W+1WL8w==", + "version": "22.19.17", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.17.tgz", + "integrity": "sha512-wGdMcf+vPYM6jikpS/qhg6WiqSV/OhG+jeeHT/KlVqxYfD40iYJf9/AE1uQxVWFvU7MipKRkRv8NSHiCGgPr8Q==", "license": "MIT", "dependencies": { "undici-types": "~6.21.0" } }, "node_modules/@types/pg": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.16.0.tgz", - "integrity": "sha512-RmhMd/wD+CF8Dfo+cVIy3RR5cl8CyfXQ0tGgW6XBL8L4LM/UTEbNXYRbLwU6w+CgrKBNbrQWt4FUtTfaU5jSYQ==", + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.20.0.tgz", + "integrity": "sha512-bEPFOaMAHTEP1EzpvHTbmwR8UsFyHSKsRisLIHVMXnpNefSbGA1bD6CVy+qKjGSqmZqNqBDV2azOBo8TgkcVow==", "license": "MIT", "dependencies": { "@types/node": "*", @@ -2065,9 +2038,9 @@ } }, "node_modules/ajv": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", - "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz", + "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==", "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", @@ -2081,33 +2054,35 @@ } }, "node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, "license": "MIT", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "node": ">=8" } }, "node_modules/ansi-styles": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", - "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { - "node": ">=12" + "node": ">=8" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/autoprefixer": { - "version": "10.4.27", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.27.tgz", - "integrity": "sha512-NP9APE+tO+LuJGn7/9+cohklunJsXWiaWEfV3si4Gi/XHDwVNgkwr1J3RQYFIvPy76GmJ9/bW8vyoU1LcxwKHA==", + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.5.0.tgz", + "integrity": "sha512-FMhOoZV4+qR6aTUALKX2rEqGG+oyATvwBt9IIzVR5rMa2HRWPkxf+P+PAJLD1I/H5/II+HuZcBJYEFBpq39ong==", "funding": [ { "type": "opencollective", @@ -2124,8 +2099,8 @@ ], "license": "MIT", "dependencies": { - "browserslist": "^4.28.1", - "caniuse-lite": "^1.0.30001774", + "browserslist": "^4.28.2", + "caniuse-lite": "^1.0.30001787", "fraction.js": "^5.3.4", "picocolors": "^1.1.1", "postcss-value-parser": "^4.2.0" @@ -2149,15 +2124,6 @@ "node": ">= 6.0.0" } }, - "node_modules/balanced-match": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", - "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", - "license": "MIT", - "engines": { - "node": "18 || 20 || >=22" - } - }, "node_modules/base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", @@ -2179,9 +2145,9 @@ "license": "MIT" }, "node_modules/baseline-browser-mapping": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.0.tgz", - "integrity": "sha512-lIyg0szRfYbiy67j9KN8IyeD7q7hcmqnJ1ddWmNt19ItGpNN64mnllmxUNFIOdOm6by97jlL6wfpTTJrmnjWAA==", + "version": "2.10.22", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.22.tgz", + "integrity": "sha512-6qruVrb5rse6WylFkU0FhBKKGuecWseqdpQfhkawn6ztyk2QlfwSRjsDxMCLJrkfmfN21qvhl9ABgaMeRkuwww==", "license": "Apache-2.0", "bin": { "baseline-browser-mapping": "dist/cli.cjs" @@ -2214,22 +2180,10 @@ "node": "*" } }, - "node_modules/brace-expansion": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.3.tgz", - "integrity": "sha512-fy6KJm2RawA5RcHkLa1z/ScpBeA762UF9KmZQxwIbDtRJrgLzM10depAiEQ+CXYcoiqW1/m96OAAoke2nE9EeA==", - "license": "MIT", - "dependencies": { - "balanced-match": "^4.0.2" - }, - "engines": { - "node": "18 || 20 || >=22" - } - }, "node_modules/browserslist": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", - "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", + "version": "4.28.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.2.tgz", + "integrity": "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==", "funding": [ { "type": "opencollective", @@ -2246,11 +2200,11 @@ ], "license": "MIT", "dependencies": { - "baseline-browser-mapping": "^2.9.0", - "caniuse-lite": "^1.0.30001759", - "electron-to-chromium": "^1.5.263", - "node-releases": "^2.0.27", - "update-browserslist-db": "^1.2.0" + "baseline-browser-mapping": "^2.10.12", + "caniuse-lite": "^1.0.30001782", + "electron-to-chromium": "^1.5.328", + "node-releases": "^2.0.36", + "update-browserslist-db": "^1.2.3" }, "bin": { "browserslist": "cli.js" @@ -2266,26 +2220,26 @@ "license": "BSD-3-Clause" }, "node_modules/c12": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/c12/-/c12-3.1.0.tgz", - "integrity": "sha512-uWoS8OU1MEIsOv8p/5a82c3H31LsWVR5qiyXVfBNOzfffjUWtPnhAb4BYI2uG2HfGmZmFjCtui5XNWaps+iFuw==", + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/c12/-/c12-3.3.4.tgz", + "integrity": "sha512-cM0ApFQSBXuourJejzwv/AuPRvAxordTyParRVcHjjtXirtkzM0uK2L9TTn9s0cXZbG7E55jCivRQzoxYmRAlA==", "license": "MIT", "dependencies": { - "chokidar": "^4.0.3", - "confbox": "^0.2.2", - "defu": "^6.1.4", - "dotenv": "^16.6.1", - "exsolve": "^1.0.7", - "giget": "^2.0.0", - "jiti": "^2.4.2", + "chokidar": "^5.0.0", + "confbox": "^0.2.4", + "defu": "^6.1.6", + "dotenv": "^17.3.1", + "exsolve": "^1.0.8", + "giget": "^3.2.0", + "jiti": "^2.6.1", "ohash": "^2.0.11", "pathe": "^2.0.3", - "perfect-debounce": "^1.0.0", - "pkg-types": "^2.2.0", - "rc9": "^2.1.2" + "perfect-debounce": "^2.1.0", + "pkg-types": "^2.3.0", + "rc9": "^3.0.1" }, "peerDependencies": { - "magicast": "^0.3.5" + "magicast": "*" }, "peerDependenciesMeta": { "magicast": { @@ -2293,22 +2247,10 @@ } } }, - "node_modules/c12/node_modules/dotenv": { - "version": "16.6.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz", - "integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" - } - }, "node_modules/caniuse-lite": { - "version": "1.0.30001774", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001774.tgz", - "integrity": "sha512-DDdwPGz99nmIEv216hKSgLD+D4ikHQHjBC/seF98N9CPqRX4M5mSxT9eTV6oyisnJcuzxtZy4n17yKKQYmYQOA==", + "version": "1.0.30001790", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001790.tgz", + "integrity": "sha512-bOoxfJPyYo+ds6W0YfptaCWbFnJYjh2Y1Eow5lRv+vI2u8ganPZqNm1JwNh0t2ELQCqIWg4B3dWEusgAmsoyOw==", "funding": [ { "type": "opencollective", @@ -2342,22 +2284,6 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/chalk/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/chalk/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -2384,29 +2310,20 @@ } }, "node_modules/chokidar": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", - "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-5.0.0.tgz", + "integrity": "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==", "license": "MIT", "dependencies": { - "readdirp": "^4.0.1" + "readdirp": "^5.0.0" }, "engines": { - "node": ">= 14.16.0" + "node": ">= 20.19.0" }, "funding": { "url": "https://paulmillr.com/funding/" } }, - "node_modules/citty": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/citty/-/citty-0.1.6.tgz", - "integrity": "sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==", - "license": "MIT", - "dependencies": { - "consola": "^3.2.3" - } - }, "node_modules/client-only": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", @@ -2428,85 +2345,6 @@ "node": ">=12" } }, - "node_modules/cliui/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/cliui/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, - "node_modules/cliui/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, "node_modules/clsx": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", @@ -2520,6 +2358,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -2532,6 +2371,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, "license": "MIT" }, "node_modules/concurrently": { @@ -2565,15 +2405,6 @@ "integrity": "sha512-ysOGlgTFbN2/Y6Cg3Iye8YKulHw+R2fNXHrgSmXISQdMnomY6eNDprVdW9R5xBguEqI954+S6709UyiO7B+6OQ==", "license": "MIT" }, - "node_modules/consola": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz", - "integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==", - "license": "MIT", - "engines": { - "node": "^14.18.0 || >=16.10.0" - } - }, "node_modules/cross-spawn": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", @@ -2769,9 +2600,9 @@ } }, "node_modules/defu": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz", - "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==", + "version": "6.1.7", + "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.7.tgz", + "integrity": "sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==", "license": "MIT" }, "node_modules/denque": { @@ -2799,9 +2630,9 @@ } }, "node_modules/dotenv": { - "version": "17.3.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.3.1.tgz", - "integrity": "sha512-IO8C/dzEb6O3F9/twg6ZLXz164a2fhTnEWb95H23Dm4OuN+92NmEAlTrupP9VW6Jm3sO26tQlqyvyi4CsnY9GA==", + "version": "17.4.2", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.4.2.tgz", + "integrity": "sha512-nI4U3TottKAcAD9LLud4Cb7b2QztQMUEfHbvhTH09bqXTxnSie8WnjPALV/WMCrJZ6UV/qHJ6L03OqO3LcdYZw==", "license": "BSD-2-Clause", "engines": { "node": ">=12" @@ -2810,12 +2641,6 @@ "url": "https://dotenvx.com" } }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "license": "MIT" - }, "node_modules/ecdsa-sig-formatter": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", @@ -2836,15 +2661,16 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.302", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.302.tgz", - "integrity": "sha512-sM6HAN2LyK82IyPBpznDRqlTQAtuSaO+ShzFiWTvoMJLHyZ+Y39r8VMfHzwbU8MVBzQ4Wdn85+wlZl2TLGIlwg==", + "version": "1.5.344", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.344.tgz", + "integrity": "sha512-4MxfbmNDm+KPh066EZy+eUnkcDPcZ35wNmOWzFuh/ijvHsve6kbLTLURy88uCNK5FbpN+yk2nQY6BYh1GEt+wg==", "license": "ISC" }, "node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, "license": "MIT" }, "node_modules/empathic": { @@ -2857,13 +2683,13 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.20.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.20.1.tgz", - "integrity": "sha512-Qohcme7V1inbAfvjItgw0EaxVX5q2rdVEZHRBrEQdRZTssLDGsL8Lwrznl8oQ/6kuTJONLaDcGjkNP247XEhcA==", + "version": "5.21.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.21.0.tgz", + "integrity": "sha512-otxSQPw4lkOZWkHpB3zaEQs6gWYEsmX4xQF68ElXC/TWvGxGMSGOvoNbaLXm6/cS/fSfHtsEdw90y20PCd+sCA==", "license": "MIT", "dependencies": { "graceful-fs": "^4.2.4", - "tapable": "^2.3.0" + "tapable": "^2.3.3" }, "engines": { "node": ">=10.13.0" @@ -2882,9 +2708,9 @@ } }, "node_modules/es-toolkit": { - "version": "1.45.1", - "resolved": "https://registry.npmjs.org/es-toolkit/-/es-toolkit-1.45.1.tgz", - "integrity": "sha512-/jhoOj/Fx+A+IIyDNOvO3TItGmlMKhtX8ISAHKE90c4b/k1tqaqEZ+uUqfpU8DMnW5cgNJv606zS55jGvza0Xw==", + "version": "1.46.0", + "resolved": "https://registry.npmjs.org/es-toolkit/-/es-toolkit-1.46.0.tgz", + "integrity": "sha512-IToJ6ct9OLl5zz6WsC/1vZEwfSZ7Myil+ygl5Tf30Xjn9AEkzNB4kqp2G7VUJKF1DtTx/ra5M5KLlXvzOg51BA==", "license": "MIT", "workspaces": [ "docs", @@ -3082,15 +2908,14 @@ } }, "node_modules/gaxios": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-7.1.3.tgz", - "integrity": "sha512-YGGyuEdVIjqxkxVH1pUTMY/XtmmsApXrCVv5EU25iX6inEPbV+VakJfLealkBtJN69AQmh1eGOdCl9Sm1UP6XQ==", + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-7.1.4.tgz", + "integrity": "sha512-bTIgTsM2bWn3XklZISBTQX7ZSddGW+IO3bMdGaemHZ3tbqExMENHLx6kKZ/KlejgrMtj8q7wBItt51yegqalrA==", "license": "Apache-2.0", "dependencies": { "extend": "^3.0.2", "https-proxy-agent": "^7.0.1", - "node-fetch": "^3.3.2", - "rimraf": "^5.0.1" + "node-fetch": "^3.3.2" }, "engines": { "node": ">=18" @@ -3136,9 +2961,9 @@ "license": "MIT" }, "node_modules/get-tsconfig": { - "version": "4.13.7", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.13.7.tgz", - "integrity": "sha512-7tN6rFgBlMgpBML5j8typ92BKFi2sFQvIdpAqLA2beia5avZDrMs0FLZiM5etShWq5irVyGcGMEA1jcDaK7A/Q==", + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.14.0.tgz", + "integrity": "sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA==", "license": "MIT", "dependencies": { "resolve-pkg-maps": "^1.0.0" @@ -3148,43 +2973,14 @@ } }, "node_modules/giget": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/giget/-/giget-2.0.0.tgz", - "integrity": "sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/giget/-/giget-3.2.0.tgz", + "integrity": "sha512-GvHTWcykIR/fP8cj8dMpuMMkvaeJfPvYnhq0oW+chSeIr+ldX21ifU2Ms6KBoyKZQZmVaUAAhQ2EZ68KJF8a7A==", "license": "MIT", - "dependencies": { - "citty": "^0.1.6", - "consola": "^3.4.0", - "defu": "^6.1.4", - "node-fetch-native": "^1.6.6", - "nypm": "^0.6.0", - "pathe": "^2.0.3" - }, "bin": { "giget": "dist/cli.mjs" } }, - "node_modules/glob": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", - "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", - "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/goober": { "version": "2.1.18", "resolved": "https://registry.npmjs.org/goober/-/goober-2.1.18.tgz", @@ -3195,17 +2991,16 @@ } }, "node_modules/google-auth-library": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-10.5.0.tgz", - "integrity": "sha512-7ABviyMOlX5hIVD60YOfHw4/CxOfBhyduaYB+wbFWCWoni4N7SLcV46hrVRktuBbZjFC9ONyqamZITN7q3n32w==", + "version": "10.6.2", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-10.6.2.tgz", + "integrity": "sha512-e27Z6EThmVNNvtYASwQxose/G57rkRuaRbQyxM2bvYLLX/GqWZ5chWq2EBoUchJbCc57eC9ArzO5wMsEmWftCw==", "license": "Apache-2.0", "dependencies": { "base64-js": "^1.3.0", "ecdsa-sig-formatter": "^1.0.11", - "gaxios": "^7.0.0", - "gcp-metadata": "^8.0.0", - "google-logging-utils": "^1.0.0", - "gtoken": "^8.0.0", + "gaxios": "^7.1.4", + "gcp-metadata": "8.1.2", + "google-logging-utils": "1.1.3", "jws": "^4.0.0" }, "engines": { @@ -3239,19 +3034,6 @@ "integrity": "sha512-5ykVn/EXM1hF0XCaWh05VbYvEiOL2lY1kBxZtaYsyvjp7cmWOU1XsAdfQBwClraEofXDT197lFbXOEVMHpvQOg==", "license": "MIT" }, - "node_modules/gtoken": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-8.0.0.tgz", - "integrity": "sha512-+CqsMbHPiSTdtSO14O51eMNlrp9N79gmeqmXeouJOhfucAedHw9noVe/n5uJk3tbKE6a+6ZCQg3RPhVhHByAIw==", - "license": "MIT", - "dependencies": { - "gaxios": "^7.0.0", - "jws": "^4.0.0" - }, - "engines": { - "node": ">=18" - } - }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -3263,9 +3045,9 @@ } }, "node_modules/hono": { - "version": "4.12.14", - "resolved": "https://registry.npmjs.org/hono/-/hono-4.12.14.tgz", - "integrity": "sha512-am5zfg3yu6sqn5yjKBNqhnTX7Cv+m00ox+7jbaKkrLMRJ4rAdldd1xPd/JzbBWspqaQv6RSTrgFN95EsfhC+7w==", + "version": "4.12.15", + "resolved": "https://registry.npmjs.org/hono/-/hono-4.12.15.tgz", + "integrity": "sha512-qM0jDhFEaCBb4TxoW7f53Qrpv9RBiayUHo0S52JudprkhvpjIrGoU1mnnr29Fvd1U335ZFPZQY1wlkqgfGXyLg==", "license": "MIT", "engines": { "node": ">=16.9.0" @@ -3329,6 +3111,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -3346,21 +3129,6 @@ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "license": "ISC" }, - "node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, "node_modules/jiti": { "version": "2.6.1", "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", @@ -3694,30 +3462,6 @@ "@jridgewell/sourcemap-codec": "^1.5.5" } }, - "node_modules/minimatch": { - "version": "9.0.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.6.tgz", - "integrity": "sha512-kQAVowdR33euIqeA0+VZTDqU+qo1IeVY+hrKYtZMio3Pg0P0vuh/kwRylLUddJhB6pf3q/botcOvRtx4IN1wqQ==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^5.0.2" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/minipass": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", - "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -3775,14 +3519,14 @@ } }, "node_modules/next": { - "version": "16.1.6", - "resolved": "https://registry.npmjs.org/next/-/next-16.1.6.tgz", - "integrity": "sha512-hkyRkcu5x/41KoqnROkfTm2pZVbKxvbZRuNvKXLRXxs3VfyO0WhY50TQS40EuKO9SW3rBj/sF3WbVwDACeMZyw==", + "version": "16.2.4", + "resolved": "https://registry.npmjs.org/next/-/next-16.2.4.tgz", + "integrity": "sha512-kPvz56wF5frc+FxlHI5qnklCzbq53HTwORaWBGdT0vNoKh1Aya9XC8aPauH4NJxqtzbWsS5mAbctm4cr+EkQ2Q==", "license": "MIT", "dependencies": { - "@next/env": "16.1.6", + "@next/env": "16.2.4", "@swc/helpers": "0.5.15", - "baseline-browser-mapping": "^2.8.3", + "baseline-browser-mapping": "^2.9.19", "caniuse-lite": "^1.0.30001579", "postcss": "8.4.31", "styled-jsx": "5.1.6" @@ -3794,15 +3538,15 @@ "node": ">=20.9.0" }, "optionalDependencies": { - "@next/swc-darwin-arm64": "16.1.6", - "@next/swc-darwin-x64": "16.1.6", - "@next/swc-linux-arm64-gnu": "16.1.6", - "@next/swc-linux-arm64-musl": "16.1.6", - "@next/swc-linux-x64-gnu": "16.1.6", - "@next/swc-linux-x64-musl": "16.1.6", - "@next/swc-win32-arm64-msvc": "16.1.6", - "@next/swc-win32-x64-msvc": "16.1.6", - "sharp": "^0.34.4" + "@next/swc-darwin-arm64": "16.2.4", + "@next/swc-darwin-x64": "16.2.4", + "@next/swc-linux-arm64-gnu": "16.2.4", + "@next/swc-linux-arm64-musl": "16.2.4", + "@next/swc-linux-x64-gnu": "16.2.4", + "@next/swc-linux-x64-musl": "16.2.4", + "@next/swc-win32-arm64-msvc": "16.2.4", + "@next/swc-win32-x64-msvc": "16.2.4", + "sharp": "^0.34.5" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", @@ -3827,34 +3571,6 @@ } } }, - "node_modules/next/node_modules/postcss": { - "version": "8.4.31", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", - "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, "node_modules/node-domexception": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", @@ -3893,39 +3609,10 @@ "url": "https://opencollective.com/node-fetch" } }, - "node_modules/node-fetch-native": { - "version": "1.6.7", - "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.7.tgz", - "integrity": "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==", - "license": "MIT" - }, "node_modules/node-releases": { - "version": "2.0.27", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", - "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", - "license": "MIT" - }, - "node_modules/nypm": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/nypm/-/nypm-0.6.5.tgz", - "integrity": "sha512-K6AJy1GMVyfyMXRVB88700BJqNUkByijGJM8kEHpLdcAt+vSQAVfkWWHYzuRXHSY6xA2sNc5RjTj0p9rE2izVQ==", - "license": "MIT", - "dependencies": { - "citty": "^0.2.0", - "pathe": "^2.0.3", - "tinyexec": "^1.0.2" - }, - "bin": { - "nypm": "dist/cli.mjs" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/nypm/node_modules/citty": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/citty/-/citty-0.2.1.tgz", - "integrity": "sha512-kEV95lFBhQgtogAPlQfJJ0WGVSokvLr/UEoFPiKKOXF7pl98HfUVUD0ejsuTCld/9xH9vogSywZ5KqHzXrZpqg==", + "version": "2.0.38", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.38.tgz", + "integrity": "sha512-3qT/88Y3FbH/Kx4szpQQ4HzUbVrHPKTLVpVocKiLfoYvw9XSGOX2FmD2d6DrXbVYyAQTF2HeF6My8jmzx7/CRw==", "license": "MIT" }, "node_modules/ohash": { @@ -3947,12 +3634,6 @@ "node": ">=8" } }, - "node_modules/package-json-from-dist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", - "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", - "license": "BlueOak-1.0.0" - }, "node_modules/path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", @@ -3962,28 +3643,6 @@ "node": ">=8" } }, - "node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "license": "ISC" - }, "node_modules/pathe": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", @@ -3991,20 +3650,20 @@ "license": "MIT" }, "node_modules/perfect-debounce": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz", - "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-2.1.0.tgz", + "integrity": "sha512-LjgdTytVFXeUgtHZr9WYViYSM/g8MkcTPYDlPa3cDqMirHjKiSZPYd6DoL7pK8AJQr+uWkQvCjHNdiMqsrJs+g==", "license": "MIT" }, "node_modules/pg": { - "version": "8.19.0", - "resolved": "https://registry.npmjs.org/pg/-/pg-8.19.0.tgz", - "integrity": "sha512-QIcLGi508BAHkQ3pJNptsFz5WQMlpGbuBGBaIaXsWK8mel2kQ/rThYI+DbgjUvZrIr7MiuEuc9LcChJoEZK1xQ==", + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/pg/-/pg-8.20.0.tgz", + "integrity": "sha512-ldhMxz2r8fl/6QkXnBD3CR9/xg694oT6DZQ2s6c/RI28OjtSOpxnPrUCGOBJ46RCUxcWdx3p6kw/xnDHjKvaRA==", "license": "MIT", "dependencies": { - "pg-connection-string": "^2.11.0", - "pg-pool": "^3.12.0", - "pg-protocol": "^1.12.0", + "pg-connection-string": "^2.12.0", + "pg-pool": "^3.13.0", + "pg-protocol": "^1.13.0", "pg-types": "2.2.0", "pgpass": "1.0.5" }, @@ -4031,9 +3690,9 @@ "optional": true }, "node_modules/pg-connection-string": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.11.0.tgz", - "integrity": "sha512-kecgoJwhOpxYU21rZjULrmrBJ698U2RxXofKVzOn5UDj61BPj/qMb7diYUR1nLScCDbrztQFl1TaQZT0t1EtzQ==", + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.12.0.tgz", + "integrity": "sha512-U7qg+bpswf3Cs5xLzRqbXbQl85ng0mfSV/J0nnA31MCLgvEaAo7CIhmeyrmJpOr7o+zm0rXK+hNnT5l9RHkCkQ==", "license": "MIT" }, "node_modules/pg-int8": { @@ -4046,18 +3705,18 @@ } }, "node_modules/pg-pool": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.12.0.tgz", - "integrity": "sha512-eIJ0DES8BLaziFHW7VgJEBPi5hg3Nyng5iKpYtj3wbcAUV9A1wLgWiY7ajf/f/oO1wfxt83phXPY8Emztg7ITg==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.13.0.tgz", + "integrity": "sha512-gB+R+Xud1gLFuRD/QgOIgGOBE2KCQPaPwkzBBGC9oG69pHTkhQeIuejVIk3/cnDyX39av2AxomQiyPT13WKHQA==", "license": "MIT", "peerDependencies": { "pg": ">=8.0" } }, "node_modules/pg-protocol": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.12.0.tgz", - "integrity": "sha512-uOANXNRACNdElMXJ0tPz6RBM0XQ61nONGAwlt8da5zs/iUOOCLBQOHSXnrC6fMsvtjxbOJrZZl5IScGv+7mpbg==", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.13.0.tgz", + "integrity": "sha512-zzdvXfS6v89r6v7OcFCHfHlyG/wvry1ALxZo4LqgUoy7W9xhBDMaqOuMiF3qEV45VqsN6rdlcehHrfDtlCPc8w==", "license": "MIT" }, "node_modules/pg-types": { @@ -4211,15 +3870,15 @@ } }, "node_modules/prisma": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/prisma/-/prisma-7.7.0.tgz", - "integrity": "sha512-HlgwRBt1uEFB9LStHL4HLYDvoi4BNu1rYA0hPG0zCAEyK9SaZBqp7E5Rjpc3Qh8Lex/ye/svoHZ0OWoFNhWxuQ==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/prisma/-/prisma-7.8.0.tgz", + "integrity": "sha512-yfN4yrw7HV9kEJhoy1+jgah0jafEIQsf7uWouSsM8MvJtlubsk+kM7AIBWZ8+GJl74Yj3c+nbYqBkMOxtsZ3Lw==", "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { - "@prisma/config": "7.7.0", + "@prisma/config": "7.8.0", "@prisma/dev": "0.24.3", - "@prisma/engines": "7.7.0", + "@prisma/engines": "7.8.0", "@prisma/studio-core": "0.27.3", "mysql2": "3.15.3", "postgres": "3.4.7" @@ -4270,9 +3929,9 @@ "license": "ISC" }, "node_modules/protobufjs": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.5.4.tgz", - "integrity": "sha512-CvexbZtbov6jW2eXAvLukXjXUW1TzFaivC46BpWc/3BpcCysb5Vffu+B3XHMm8lVEuy2Mm4XGex8hBSg1yapPg==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.5.5.tgz", + "integrity": "sha512-3wY1AxV+VBNW8Yypfd1yQY9pXnqTAN+KwQxL8iYm3/BjKYMNg4i0owhEe26PWDOMaIrzeeF98Lqd5NGz4omiIg==", "hasInstallScript": true, "license": "BSD-3-Clause", "dependencies": { @@ -4310,34 +3969,34 @@ "license": "MIT" }, "node_modules/rc9": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/rc9/-/rc9-2.1.2.tgz", - "integrity": "sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/rc9/-/rc9-3.0.1.tgz", + "integrity": "sha512-gMDyleLWVE+i6Sgtc0QbbY6pEKqYs97NGi6isHQPqYlLemPoO8dxQ3uGi0f4NiP98c+jMW6cG1Kx9dDwfvqARQ==", "license": "MIT", "dependencies": { - "defu": "^6.1.4", - "destr": "^2.0.3" + "defu": "^6.1.6", + "destr": "^2.0.5" } }, "node_modules/react": { - "version": "19.2.4", - "resolved": "https://registry.npmjs.org/react/-/react-19.2.4.tgz", - "integrity": "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==", + "version": "19.2.5", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.5.tgz", + "integrity": "sha512-llUJLzz1zTUBrskt2pwZgLq59AemifIftw4aB7JxOqf1HY2FDaGDxgwpAPVzHU1kdWabH7FauP4i1oEeer2WCA==", "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/react-dom": { - "version": "19.2.4", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.4.tgz", - "integrity": "sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==", + "version": "19.2.5", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.5.tgz", + "integrity": "sha512-J5bAZz+DXMMwW/wV3xzKke59Af6CHY7G4uYLN1OvBcKEsWOs4pQExj86BBKamxl/Ik5bx9whOrvBlSDfWzgSag==", "license": "MIT", "dependencies": { "scheduler": "^0.27.0" }, "peerDependencies": { - "react": "^19.2.4" + "react": "^19.2.5" } }, "node_modules/react-hot-toast": { @@ -4388,12 +4047,12 @@ } }, "node_modules/readdirp": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", - "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.0.0.tgz", + "integrity": "sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==", "license": "MIT", "engines": { - "node": ">= 14.18.0" + "node": ">= 20.19.0" }, "funding": { "type": "individual", @@ -4497,21 +4156,6 @@ "node": ">= 4" } }, - "node_modules/rimraf": { - "version": "5.0.10", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.10.tgz", - "integrity": "sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==", - "license": "ISC", - "dependencies": { - "glob": "^10.3.7" - }, - "bin": { - "rimraf": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/rxjs": { "version": "7.8.2", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", @@ -4554,6 +4198,19 @@ "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", "license": "MIT" }, + "node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "license": "ISC", + "optional": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/seq-queue": { "version": "0.0.5", "resolved": "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz", @@ -4604,19 +4261,6 @@ "@img/sharp-win32-x64": "0.34.5" } }, - "node_modules/sharp/node_modules/semver": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", - "license": "ISC", - "optional": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -4697,27 +4341,10 @@ "license": "MIT" }, "node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/string-width-cjs": { - "name": "string-width", "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", @@ -4728,53 +4355,11 @@ "node": ">=8" } }, - "node_modules/string-width-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" - }, - "node_modules/string-width-cjs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/strip-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -4783,15 +4368,6 @@ "node": ">=8" } }, - "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/styled-jsx": { "version": "5.1.6", "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.6.tgz", @@ -4832,15 +4408,15 @@ } }, "node_modules/tailwindcss": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.2.2.tgz", - "integrity": "sha512-KWBIxs1Xb6NoLdMVqhbhgwZf2PGBpPEiwOqgI4pFIYbNTfBXiKYyWoTsXgBQ9WFg/OlhnvHaY+AEpW7wSmFo2Q==", + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.2.4.tgz", + "integrity": "sha512-HhKppgO81FQof5m6TEnuBWCZGgfRAWbaeOaGT00KOy/Pf/j6oUihdvBpA7ltCeAvZpFhW3j0PTclkxsd4IXYDA==", "license": "MIT" }, "node_modules/tapable": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.2.tgz", - "integrity": "sha512-1MOpMXuhGzGL5TTCZFItxCc0AARf1EZFQkGqMm7ERKj8+Hgr5oLvJOVFcC+lRmR8hCe2S3jC4T5D7Vg/d7/fhA==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.3.tgz", + "integrity": "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==", "license": "MIT", "engines": { "node": ">=6" @@ -4856,15 +4432,6 @@ "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==", "license": "MIT" }, - "node_modules/tinyexec": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.2.tgz", - "integrity": "sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==", - "license": "MIT", - "engines": { - "node": ">=18" - } - }, "node_modules/tree-kill": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", @@ -5025,27 +4592,10 @@ } }, "node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", @@ -5059,66 +4609,10 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" - }, - "node_modules/wrap-ansi-cjs/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/ws": { - "version": "8.19.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.19.0.tgz", - "integrity": "sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==", + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.20.0.tgz", + "integrity": "sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA==", "license": "MIT", "engines": { "node": ">=10.0.0" @@ -5184,51 +4678,6 @@ "node": ">=12" } }, - "node_modules/yargs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, - "node_modules/yargs/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/zeptomatch": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/zeptomatch/-/zeptomatch-2.1.0.tgz", diff --git a/package.json b/package.json index bb01b64..5d15721 100644 --- a/package.json +++ b/package.json @@ -48,5 +48,9 @@ }, "prisma": { "seed": "tsx prisma/seed.ts" + }, + "overrides": { + "postcss": "^8.5.10", + "@hono/node-server": "^1.19.13" } } diff --git a/public/favicon.png b/public/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..f4d81d803a31e6fd5e4bed4d01afebefb7854398 GIT binary patch literal 27194 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 literal 0 HcmV?d00001 diff --git a/scripts/backfill-slugs.ts b/scripts/backfill-slugs.ts new file mode 100644 index 0000000..603eae3 --- /dev/null +++ b/scripts/backfill-slugs.ts @@ -0,0 +1,46 @@ +import prisma from '../lib/prisma' +import { generateSlug } from '../lib/utils' + +async function main() { + const posts = await prisma.blogPost.findMany({ + where: { + OR: [ + { slug: null }, + { slug: '' } + ] + } + }) + + console.log(`Found ${posts.length} posts without slug.`) + + for (const post of posts) { + const newSlug = generateSlug(post.title) + + // Handle potential duplicates + let slug = newSlug + let count = 1 + let unique = false + + while (!unique) { + const existing = await prisma.blogPost.findUnique({ where: { slug } }) + if (!existing || existing.id === post.id) { + unique = true + } else { + slug = `${newSlug}-${count}` + count++ + } + } + + await prisma.blogPost.update({ + where: { id: post.id }, + data: { slug } + }) + console.log(`Updated post: ${post.title} -> ${slug}`) + } +} + +main() + .catch(console.error) + .finally(async () => { + await prisma.$disconnect() + })