From 56670be4fcf78d0d37dbad0ebac75fc3b9af3806 Mon Sep 17 00:00:00 2001 From: Vidhi Sethi Date: Thu, 18 Dec 2025 14:39:54 +0530 Subject: [PATCH 01/47] branch commit lesgo --- README.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/README.md b/README.md index 9c77e17..baf799e 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,13 @@ pnpm install pnpm start ``` +Or + +``bash +pnpm install +pnpm dev +`` + # Building For Production To build this application for production: From c786ae853d5fa2b544606a1bd305374bab4398e3 Mon Sep 17 00:00:00 2001 From: Savy Date: Thu, 18 Dec 2025 18:54:31 +0530 Subject: [PATCH 02/47] fix env module and import alias --- src/lib/constants/api.ts | 2 +- src/lib/env/client.ts | 9 +++++++++ src/{env.ts => lib/env/server.ts} | 4 +--- src/lib/index.ts | 1 - tsconfig.json | 4 ++-- 5 files changed, 13 insertions(+), 7 deletions(-) create mode 100644 src/lib/env/client.ts rename src/{env.ts => lib/env/server.ts} (72%) delete mode 100644 src/lib/index.ts diff --git a/src/lib/constants/api.ts b/src/lib/constants/api.ts index d8ceee3..336286e 100644 --- a/src/lib/constants/api.ts +++ b/src/lib/constants/api.ts @@ -1,4 +1,4 @@ -import { env } from "$env"; +import { env } from "$env/server"; const BASE_URL = env.BACKEND_BASE_URL; diff --git a/src/lib/env/client.ts b/src/lib/env/client.ts new file mode 100644 index 0000000..76c11ca --- /dev/null +++ b/src/lib/env/client.ts @@ -0,0 +1,9 @@ +import { createEnv } from "@t3-oss/env-core"; +// import { z } from "zod"; + +export const env = createEnv({ + clientPrefix: "VITE_", + client: {}, + runtimeEnv: import.meta.env, + emptyStringAsUndefined: true, +}); diff --git a/src/env.ts b/src/lib/env/server.ts similarity index 72% rename from src/env.ts rename to src/lib/env/server.ts index a7606d5..efa8afb 100644 --- a/src/env.ts +++ b/src/lib/env/server.ts @@ -5,8 +5,6 @@ export const env = createEnv({ server: { BACKEND_BASE_URL: z.url(), }, - clientPrefix: "VITE_", - client: {}, - runtimeEnv: import.meta.env, + runtimeEnv: process.env, emptyStringAsUndefined: true, }); diff --git a/src/lib/index.ts b/src/lib/index.ts deleted file mode 100644 index ed0f11b..0000000 --- a/src/lib/index.ts +++ /dev/null @@ -1 +0,0 @@ -// internal use stuff diff --git a/tsconfig.json b/tsconfig.json index dc974dd..dc18fa2 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -24,9 +24,9 @@ "paths": { "$components/*": ["./src/components/*"], "$data/*": ["./src/data/*"], - "$env": ["./src/env.ts"], + "$env/*": ["./src/lib/env/*"], "$hooks/*": ["./src/hooks/*"], - "$lib/": ["./src/lib/*"] + "$lib/*": ["./src/lib/*"] } } } From 1a7e9ad5d4570809ce07d09c05084ec2912a35c7 Mon Sep 17 00:00:00 2001 From: Savy Date: Thu, 18 Dec 2025 18:57:02 +0530 Subject: [PATCH 03/47] migrate /v1/user/login route/ --- package.json | 1 + pnpm-lock.yaml | 12 ++++++ src/lib/api/helpers.ts | 15 +++++++ src/lib/api/index.ts | 1 + src/lib/api/schemas.ts | 19 ++++++++ src/lib/api/user.ts | 98 ++++++++++++++++++++++++++++++++++++++++++ src/routes/api.$.ts | 15 ++++++- 7 files changed, 160 insertions(+), 1 deletion(-) create mode 100644 src/lib/api/helpers.ts create mode 100644 src/lib/api/index.ts create mode 100644 src/lib/api/schemas.ts create mode 100644 src/lib/api/user.ts diff --git a/package.json b/package.json index c519fda..9e4d618 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,7 @@ }, "dependencies": { "@elysiajs/eden": "^1.4.5", + "@elysiajs/openapi": "^1.4.11", "@netlify/vite-plugin-tanstack-start": "^1.0.2", "@t3-oss/env-core": "^0.13.8", "@tanstack/react-devtools": "^0.7.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 743217b..5dccfe2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -11,6 +11,9 @@ importers: '@elysiajs/eden': specifier: ^1.4.5 version: 1.4.5(elysia@1.4.19(@sinclair/typebox@0.34.41)(exact-mirror@0.2.5(@sinclair/typebox@0.34.41))(file-type@21.1.1)(openapi-types@12.1.3)(typescript@5.9.3)) + '@elysiajs/openapi': + specifier: ^1.4.11 + version: 1.4.11(elysia@1.4.19(@sinclair/typebox@0.34.41)(exact-mirror@0.2.5(@sinclair/typebox@0.34.41))(file-type@21.1.1)(openapi-types@12.1.3)(typescript@5.9.3)) '@netlify/vite-plugin-tanstack-start': specifier: ^1.0.2 version: 1.1.12(@netlify/api@14.0.10)(@tanstack/react-start@1.136.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1)))(rollup@4.53.2)(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1)) @@ -379,6 +382,11 @@ packages: peerDependencies: elysia: '>= 1.4.0' + '@elysiajs/openapi@1.4.11': + resolution: {integrity: sha512-d75bMxYJpN6qSDi/z9L1S7SLk1S/8Px+cTb3W2lrYzU8uQ5E0kXdy1oOMJEfTyVsz3OA19NP9KNxE7ztSbLBLg==} + peerDependencies: + elysia: '>= 1.4.0' + '@emnapi/runtime@1.7.1': resolution: {integrity: sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==} @@ -4409,6 +4417,10 @@ snapshots: dependencies: elysia: 1.4.19(@sinclair/typebox@0.34.41)(exact-mirror@0.2.5(@sinclair/typebox@0.34.41))(file-type@21.1.1)(openapi-types@12.1.3)(typescript@5.9.3) + '@elysiajs/openapi@1.4.11(elysia@1.4.19(@sinclair/typebox@0.34.41)(exact-mirror@0.2.5(@sinclair/typebox@0.34.41))(file-type@21.1.1)(openapi-types@12.1.3)(typescript@5.9.3))': + dependencies: + elysia: 1.4.19(@sinclair/typebox@0.34.41)(exact-mirror@0.2.5(@sinclair/typebox@0.34.41))(file-type@21.1.1)(openapi-types@12.1.3)(typescript@5.9.3) + '@emnapi/runtime@1.7.1': dependencies: tslib: 2.8.1 diff --git a/src/lib/api/helpers.ts b/src/lib/api/helpers.ts new file mode 100644 index 0000000..2683d73 --- /dev/null +++ b/src/lib/api/helpers.ts @@ -0,0 +1,15 @@ +interface ErrorResponse { + code: string; + message: string; +} + +export function isErrorResponse(res: unknown): res is ErrorResponse { + return ( + res !== null && + typeof res === "object" && + "code" in res && + typeof res.code === "string" && + "message" in res && + typeof res.message === "string" + ); +} diff --git a/src/lib/api/index.ts b/src/lib/api/index.ts new file mode 100644 index 0000000..ee404db --- /dev/null +++ b/src/lib/api/index.ts @@ -0,0 +1 @@ +export { api as user } from "./user"; diff --git a/src/lib/api/schemas.ts b/src/lib/api/schemas.ts new file mode 100644 index 0000000..06d8a38 --- /dev/null +++ b/src/lib/api/schemas.ts @@ -0,0 +1,19 @@ +import z from "zod"; + +export const UserSchema = z.object({ + id: z.number(), + name: z.string(), + email: z.string(), + batch: z.number(), + profile: z.string().nullable(), + sid: z.number(), + verified: z.boolean(), + designation: z.literal([ + "Member", + "ImplementationBody", + "ExecutiveBody", + "Core", + "Admin", + ]), + experience: z.number(), +}); diff --git a/src/lib/api/user.ts b/src/lib/api/user.ts new file mode 100644 index 0000000..e69b94c --- /dev/null +++ b/src/lib/api/user.ts @@ -0,0 +1,98 @@ +import Elysia from "elysia"; +import z from "zod"; + +import { API_URL } from "$lib/constants/api"; +import { isErrorResponse } from "./helpers"; +import { UserSchema } from "./schemas"; + +const ResponseSchema = z.object({ + jwtToken: z.string(), + user: UserSchema, +}); + +const APIResponseSchema = z.object({ + jwtToken: z.string(), + user: z.object({ + id: z.number(), + name: z.string(), + email: z.string(), + batch: z.number(), + dp: z.string().nullable(), + sid: z.number(), + verified: z.boolean(), + designation: z.enum([ + "Member", + "ImplementationBody", + "ExecutiveBody", + "Core", + "Admin", + ]), + xp: z.number(), + }), +}); + +export const api = new Elysia({ prefix: "/user" }) + .model({ + error: z.object({ + error: z.string(), + message: z.string(), + }), + }) + .post( + "/login", + async ({ body, status }) => { + const res = await fetch(API_URL.V1.USER.LOGIN, { + method: "POST", + body: JSON.stringify(body), + headers: { + "Content-Type": "application/json", + }, + }); + + const response = await res.json(); + console.log(response); + + if (isErrorResponse(response)) { + switch (response.code) { + case "Not Found": + return status(404, { + error: response.code, + message: response.message, + }); + case "Unauthorized": + return status(401, { + error: response.code, + message: response.message, + }); + default: + return status(500, { + error: "Internal Server Error", + message: "An unexpected error occurred while handling request", + }); + } + } + + const validatedRes = APIResponseSchema.parse(response); + + return { + jwtToken: validatedRes.jwtToken, + user: { + ...validatedRes.user, + profile: validatedRes.user.dp, + experience: validatedRes.user.xp, + }, + }; + }, + { + body: z.object({ + email: z.email("you need to enter a email to login"), + password: z.string("you need to enter a password to login"), + }), + response: { + 200: ResponseSchema, + 401: "error", + 404: "error", + 500: "error", + }, + }, + ); diff --git a/src/routes/api.$.ts b/src/routes/api.$.ts index d148608..047e942 100644 --- a/src/routes/api.$.ts +++ b/src/routes/api.$.ts @@ -1,11 +1,24 @@ import { treaty } from "@elysiajs/eden"; +import { openapi } from "@elysiajs/openapi"; import { createFileRoute } from "@tanstack/react-router"; import { createIsomorphicFn } from "@tanstack/react-start"; import { Elysia } from "elysia"; +import * as z from "zod"; + +import { user } from "$lib/api"; const app = new Elysia({ prefix: "/api", -}).get("/", "Hello PEC ACM!"); +}) + .use( + openapi({ + mapJsonSchema: { + zod: z.toJSONSchema, + }, + }), + ) + .use(user) + .get("/", "Hello PEC ACM!"); const handle = ({ request }: { request: Request }) => app.fetch(request); From 7d9e5dfba34fbd4ea43a336356ab1b4c2873ad8f Mon Sep 17 00:00:00 2001 From: Savy Date: Thu, 18 Dec 2025 19:42:56 +0530 Subject: [PATCH 04/47] better api docs --- src/lib/api/user.ts | 18 +++++++++++++++++- src/routes/api.$.ts | 20 ++++++++++++++++++++ 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/src/lib/api/user.ts b/src/lib/api/user.ts index e69b94c..fb8e6a6 100644 --- a/src/lib/api/user.ts +++ b/src/lib/api/user.ts @@ -36,6 +36,7 @@ export const api = new Elysia({ prefix: "/user" }) error: z.object({ error: z.string(), message: z.string(), + timestamp: z.iso.datetime(), }), }) .post( @@ -50,7 +51,6 @@ export const api = new Elysia({ prefix: "/user" }) }); const response = await res.json(); - console.log(response); if (isErrorResponse(response)) { switch (response.code) { @@ -58,16 +58,19 @@ export const api = new Elysia({ prefix: "/user" }) return status(404, { error: response.code, message: response.message, + timestamp: new Date().toISOString(), }); case "Unauthorized": return status(401, { error: response.code, message: response.message, + timestamp: new Date().toISOString(), }); default: return status(500, { error: "Internal Server Error", message: "An unexpected error occurred while handling request", + timestamp: new Date().toISOString(), }); } } @@ -94,5 +97,18 @@ export const api = new Elysia({ prefix: "/user" }) 404: "error", 500: "error", }, + detail: { + summary: "User login with email and password", + description: `Authenticates a user with their email and password credentials. + +On successful authentication, returns a JWT token for subsequent authenticated requests along with the user's profile information including their designation, batch, experience points, and verification status. + +**Response Codes:** +- **200**: Authentication successful - returns JWT token and user profile +- **401**: Invalid credentials - email or password is incorrect +- **404**: User not found - no account exists with the provided email +- **500**: Server error - an unexpected error occurred during authentication`, + tags: ["Authentication", "User"], + }, }, ); diff --git a/src/routes/api.$.ts b/src/routes/api.$.ts index 047e942..4ee875e 100644 --- a/src/routes/api.$.ts +++ b/src/routes/api.$.ts @@ -12,6 +12,26 @@ const app = new Elysia({ }) .use( openapi({ + documentation: { + info: { + title: "PEC ACM Community Management & Events Platform API", + description: `A REST API for managing community members, events, and user engagement for ACM at Punjab Engineering College. +## Authentication +Most endpoints require JWT authentication. Obtain a token via the \`POST /v1/user/login\` endpoint and include it in the \`Authorization\` header as a Bearer token. + +## Response Format +All responses follow a consistent JSON structure with appropriate HTTP status codes and error messages.`, + version: "1.0.0", + license: { + name: "MIT", + url: "https://github.com/PEC-CSS/acm-website-backend/blob/main/LICENSE", + }, + contact: { + name: "PEC ACM Webmaster", + email: "bruh@example.com", + }, + }, + }, mapJsonSchema: { zod: z.toJSONSchema, }, From bde641a369d5e509087f21855757b116ba2f6fa7 Mon Sep 17 00:00:00 2001 From: Savy Date: Thu, 18 Dec 2025 19:58:45 +0530 Subject: [PATCH 05/47] migrate api health routes --- src/lib/api/health.ts | 38 ++++++++++++++++++++++++++++++++++++++ src/lib/api/index.ts | 1 + src/routes/api.$.ts | 3 ++- 3 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 src/lib/api/health.ts diff --git a/src/lib/api/health.ts b/src/lib/api/health.ts new file mode 100644 index 0000000..64621a9 --- /dev/null +++ b/src/lib/api/health.ts @@ -0,0 +1,38 @@ +import Elysia from "elysia"; +import * as z from "zod"; + +import { API_URL } from "$lib/constants/api"; + +export const api = new Elysia() + .get( + "/hello", + async () => { + const res = await fetch(API_URL.HEALTH.HELLO); + return await res.text(); + }, + { + response: z.string(), + detail: { + summary: "Say Hello to the API", + description: + "Returns a simple greeting message to verify the API is reachable and responding.", + tags: ["Misc.", "Health"], + }, + }, + ) + .get( + "/health", + async () => { + const res = await fetch(API_URL.HEALTH.CHECK); + return await res.text(); + }, + { + response: z.string(), + detail: { + summary: "Perform health check of the API", + description: + "Performs a health check on the API and returns the current operational status. Not much different from `GET /api/hello`. ", + tags: ["Misc.", "Health"], + }, + }, + ); diff --git a/src/lib/api/index.ts b/src/lib/api/index.ts index ee404db..fd70b4e 100644 --- a/src/lib/api/index.ts +++ b/src/lib/api/index.ts @@ -1 +1,2 @@ +export { api as health } from "./health"; export { api as user } from "./user"; diff --git a/src/routes/api.$.ts b/src/routes/api.$.ts index 4ee875e..7660d80 100644 --- a/src/routes/api.$.ts +++ b/src/routes/api.$.ts @@ -5,7 +5,7 @@ import { createIsomorphicFn } from "@tanstack/react-start"; import { Elysia } from "elysia"; import * as z from "zod"; -import { user } from "$lib/api"; +import { health, user } from "$lib/api"; const app = new Elysia({ prefix: "/api", @@ -37,6 +37,7 @@ All responses follow a consistent JSON structure with appropriate HTTP status co }, }), ) + .use(health) .use(user) .get("/", "Hello PEC ACM!"); From 80c167db21df74ed9cd7d392e895f25137c0e7bc Mon Sep 17 00:00:00 2001 From: Savy Date: Thu, 18 Dec 2025 20:14:08 +0530 Subject: [PATCH 06/47] update schema defn for user login handler --- src/lib/api/schemas.ts | 37 +++++++++++++++++++++++++------------ src/lib/api/user.ts | 20 ++------------------ 2 files changed, 27 insertions(+), 30 deletions(-) diff --git a/src/lib/api/schemas.ts b/src/lib/api/schemas.ts index 06d8a38..81f5e2b 100644 --- a/src/lib/api/schemas.ts +++ b/src/lib/api/schemas.ts @@ -1,19 +1,32 @@ import z from "zod"; -export const UserSchema = z.object({ +export const DESIGNATIONS = [ + "Member", + "ImplementationBody", + "ExecutiveBody", + "Core", + "Admin", +] as const; + +export const DesignationEnum = z.enum(DESIGNATIONS); + +export const BaseUserSchema = z.object({ id: z.number(), name: z.string(), - email: z.string(), - batch: z.number(), - profile: z.string().nullable(), - sid: z.number(), + email: z.email(), + batch: z.number().int().positive(), + sid: z.number().int().positive(), verified: z.boolean(), - designation: z.literal([ - "Member", - "ImplementationBody", - "ExecutiveBody", - "Core", - "Admin", - ]), + designation: DesignationEnum, +}); + +export const UserSchema = BaseUserSchema.extend({ + profile: z.string().nullable(), experience: z.number(), }); + +export const APIUserSchema = BaseUserSchema.extend({ + dp: z.string().nullable(), + password: z.string(), + xp: z.number(), +}); diff --git a/src/lib/api/user.ts b/src/lib/api/user.ts index fb8e6a6..3ce3b89 100644 --- a/src/lib/api/user.ts +++ b/src/lib/api/user.ts @@ -3,7 +3,7 @@ import z from "zod"; import { API_URL } from "$lib/constants/api"; import { isErrorResponse } from "./helpers"; -import { UserSchema } from "./schemas"; +import { APIUserSchema, UserSchema } from "./schemas"; const ResponseSchema = z.object({ jwtToken: z.string(), @@ -12,23 +12,7 @@ const ResponseSchema = z.object({ const APIResponseSchema = z.object({ jwtToken: z.string(), - user: z.object({ - id: z.number(), - name: z.string(), - email: z.string(), - batch: z.number(), - dp: z.string().nullable(), - sid: z.number(), - verified: z.boolean(), - designation: z.enum([ - "Member", - "ImplementationBody", - "ExecutiveBody", - "Core", - "Admin", - ]), - xp: z.number(), - }), + user: APIUserSchema, }); export const api = new Elysia({ prefix: "/user" }) From 2e032cc3603ebf685ae4be3a3c1a01a098b5e8ce Mon Sep 17 00:00:00 2001 From: Savy Date: Fri, 19 Dec 2025 18:36:12 +0530 Subject: [PATCH 07/47] update documentation tags --- src/lib/api/health.ts | 4 ++-- src/lib/api/user.ts | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/lib/api/health.ts b/src/lib/api/health.ts index 64621a9..c9f07c3 100644 --- a/src/lib/api/health.ts +++ b/src/lib/api/health.ts @@ -16,7 +16,7 @@ export const api = new Elysia() summary: "Say Hello to the API", description: "Returns a simple greeting message to verify the API is reachable and responding.", - tags: ["Misc.", "Health"], + tags: ["Misc."], }, }, ) @@ -32,7 +32,7 @@ export const api = new Elysia() summary: "Perform health check of the API", description: "Performs a health check on the API and returns the current operational status. Not much different from `GET /api/hello`. ", - tags: ["Misc.", "Health"], + tags: ["Misc."], }, }, ); diff --git a/src/lib/api/user.ts b/src/lib/api/user.ts index 3ce3b89..2f37696 100644 --- a/src/lib/api/user.ts +++ b/src/lib/api/user.ts @@ -92,7 +92,7 @@ On successful authentication, returns a JWT token for subsequent authenticated r - **401**: Invalid credentials - email or password is incorrect - **404**: User not found - no account exists with the provided email - **500**: Server error - an unexpected error occurred during authentication`, - tags: ["Authentication", "User"], + tags: ["Authentication"], }, }, ); From 317ed22e61c211982a7bd0c8ecc3e785513eb429 Mon Sep 17 00:00:00 2001 From: Savy Date: Sun, 21 Dec 2025 15:53:19 +0530 Subject: [PATCH 08/47] install email deps --- package.json | 6 +- pnpm-lock.yaml | 1082 +++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 1086 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 9e4d618..e8ff6e2 100644 --- a/package.json +++ b/package.json @@ -11,12 +11,14 @@ "format:check": "biome format", "lint": "biome lint", "check": "biome check", - "prepare": "husky" + "prepare": "husky", + "email:dev": "email dev --dir=./src/emails" }, "dependencies": { "@elysiajs/eden": "^1.4.5", "@elysiajs/openapi": "^1.4.11", "@netlify/vite-plugin-tanstack-start": "^1.0.2", + "@react-email/components": "1.0.2", "@t3-oss/env-core": "^0.13.8", "@tanstack/react-devtools": "^0.7.0", "@tanstack/react-form": "^1.0.0", @@ -35,6 +37,7 @@ }, "devDependencies": { "@biomejs/biome": "2.2.4", + "@react-email/preview-server": "5.1.0", "@tanstack/devtools-vite": "^0.3.11", "@testing-library/dom": "^10.4.0", "@testing-library/react": "^16.2.0", @@ -45,6 +48,7 @@ "babel-plugin-react-compiler": "^1.0.0", "husky": "^9.1.7", "jsdom": "^27.0.0", + "react-email": "5.1.0", "sass": "^1.94.0", "typescript": "^5.7.2", "vite": "^7.1.7", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5dccfe2..3e3aac7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -17,6 +17,9 @@ importers: '@netlify/vite-plugin-tanstack-start': specifier: ^1.0.2 version: 1.1.12(@netlify/api@14.0.10)(@tanstack/react-start@1.136.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1)))(rollup@4.53.2)(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1)) + '@react-email/components': + specifier: 1.0.2 + version: 1.0.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@t3-oss/env-core': specifier: ^0.13.8 version: 0.13.8(typescript@5.9.3)(zod@4.1.12) @@ -66,6 +69,9 @@ importers: '@biomejs/biome': specifier: 2.2.4 version: 2.2.4 + '@react-email/preview-server': + specifier: 5.1.0 + version: 5.1.0(@babel/core@7.28.5)(@opentelemetry/api@1.9.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.94.0) '@tanstack/devtools-vite': specifier: ^0.3.11 version: 0.3.11(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1)) @@ -96,6 +102,9 @@ importers: jsdom: specifier: ^27.0.0 version: 27.2.0 + react-email: + specifier: 5.1.0 + version: 5.1.0 sass: specifier: ^1.94.0 version: 1.94.0 @@ -859,6 +868,14 @@ packages: '@import-maps/resolve@2.0.0': resolution: {integrity: sha512-RwzRTpmrrS6Q1ZhQExwuxJGK1Wqhv4stt+OF2JzS+uawewpwNyU7EJL1WpBex7aDiiGLs4FsXGkfUBdYuX7xiQ==} + '@isaacs/balanced-match@4.0.1': + resolution: {integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==} + engines: {node: 20 || >=22} + + '@isaacs/brace-expansion@5.0.0': + resolution: {integrity: sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==} + engines: {node: 20 || >=22} + '@isaacs/cliui@8.0.2': resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} @@ -1017,6 +1034,57 @@ packages: engines: {node: '>=18.14.0'} hasBin: true + '@next/env@16.0.10': + resolution: {integrity: sha512-8tuaQkyDVgeONQ1MeT9Mkk8pQmZapMKFh5B+OrFUlG3rVmYTXcXlBetBgTurKXGaIZvkoqRT9JL5K3phXcgang==} + + '@next/swc-darwin-arm64@16.0.10': + resolution: {integrity: sha512-4XgdKtdVsaflErz+B5XeG0T5PeXKDdruDf3CRpnhN+8UebNa5N2H58+3GDgpn/9GBurrQ1uWW768FfscwYkJRg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + '@next/swc-darwin-x64@16.0.10': + resolution: {integrity: sha512-spbEObMvRKkQ3CkYVOME+ocPDFo5UqHb8EMTS78/0mQ+O1nqE8toHJVioZo4TvebATxgA8XMTHHrScPrn68OGw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + '@next/swc-linux-arm64-gnu@16.0.10': + resolution: {integrity: sha512-uQtWE3X0iGB8apTIskOMi2w/MKONrPOUCi5yLO+v3O8Mb5c7K4Q5KD1jvTpTF5gJKa3VH/ijKjKUq9O9UhwOYw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@next/swc-linux-arm64-musl@16.0.10': + resolution: {integrity: sha512-llA+hiDTrYvyWI21Z0L1GiXwjQaanPVQQwru5peOgtooeJ8qx3tlqRV2P7uH2pKQaUfHxI/WVarvI5oYgGxaTw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@next/swc-linux-x64-gnu@16.0.10': + resolution: {integrity: sha512-AK2q5H0+a9nsXbeZ3FZdMtbtu9jxW4R/NgzZ6+lrTm3d6Zb7jYrWcgjcpM1k8uuqlSy4xIyPR2YiuUr+wXsavA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@next/swc-linux-x64-musl@16.0.10': + resolution: {integrity: sha512-1TDG9PDKivNw5550S111gsO4RGennLVl9cipPhtkXIFVwo31YZ73nEbLjNC8qG3SgTz/QZyYyaFYMeY4BKZR/g==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@next/swc-win32-arm64-msvc@16.0.10': + resolution: {integrity: sha512-aEZIS4Hh32xdJQbHz121pyuVZniSNoqDVx1yIr2hy+ZwJGipeqnMZBJHyMxv2tiuAXGx6/xpTcQJ6btIiBjgmg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + + '@next/swc-win32-x64-msvc@16.0.10': + resolution: {integrity: sha512-E+njfCoFLb01RAFEnGZn6ERoOqhK1Gl3Lfz1Kjnj0Ulfu7oJbuMyvBKNj/bw8XZnenHDASlygTjZICQW+rYW1Q==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -1249,6 +1317,166 @@ packages: '@protobufjs/utf8@1.1.0': resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} + '@react-email/body@0.2.0': + resolution: {integrity: sha512-9GCWmVmKUAoRfloboCd+RKm6X17xn7eGL7HnpAZUnjBXBilWCxsKnLMTC/ixSHDKS/A/057M1Tx6ZUXd89sVBw==} + peerDependencies: + react: ^18.0 || ^19.0 || ^19.0.0-rc + + '@react-email/button@0.2.0': + resolution: {integrity: sha512-8i+v6cMxr2emz4ihCrRiYJPp2/sdYsNNsBzXStlcA+/B9Umpm5Jj3WJKYpgTPM+aeyiqlG/MMI1AucnBm4f1oQ==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: ^18.0 || ^19.0 || ^19.0.0-rc + + '@react-email/code-block@0.2.0': + resolution: {integrity: sha512-eIrPW9PIFgDopQU0e/OPpwCW2QWQDtNZDSsiN4sJO8KdMnWWnXJicnRfzrit5rHwFo+Y98i+w/Y5ScnBAFr1dQ==} + engines: {node: '>=22.0.0'} + peerDependencies: + react: ^18.0 || ^19.0 || ^19.0.0-rc + + '@react-email/code-inline@0.0.5': + resolution: {integrity: sha512-MmAsOzdJpzsnY2cZoPHFPk6uDO/Ncpb4Kh1hAt9UZc1xOW3fIzpe1Pi9y9p6wwUmpaeeDalJxAxH6/fnTquinA==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: ^18.0 || ^19.0 || ^19.0.0-rc + + '@react-email/column@0.0.13': + resolution: {integrity: sha512-Lqq17l7ShzJG/d3b1w/+lVO+gp2FM05ZUo/nW0rjxB8xBICXOVv6PqjDnn3FXKssvhO5qAV20lHM6S+spRhEwQ==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: ^18.0 || ^19.0 || ^19.0.0-rc + + '@react-email/components@1.0.2': + resolution: {integrity: sha512-VKQR/motrySQMvy+ZUwPjdeD9iI9mCt8cfXuJAX8cK16rtzkEe12yq6/pXyW7c6qEMj7d+PNsoAcO+3AbJSfPg==} + engines: {node: '>=20.0.0'} + peerDependencies: + react: ^18.0 || ^19.0 || ^19.0.0-rc + + '@react-email/container@0.0.15': + resolution: {integrity: sha512-Qo2IQo0ru2kZq47REmHW3iXjAQaKu4tpeq/M8m1zHIVwKduL2vYOBQWbC2oDnMtWPmkBjej6XxgtZByxM6cCFg==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: ^18.0 || ^19.0 || ^19.0.0-rc + + '@react-email/font@0.0.9': + resolution: {integrity: sha512-4zjq23oT9APXkerqeslPH3OZWuh5X4crHK6nx82mVHV2SrLba8+8dPEnWbaACWTNjOCbcLIzaC9unk7Wq2MIXw==} + peerDependencies: + react: ^18.0 || ^19.0 || ^19.0.0-rc + + '@react-email/head@0.0.12': + resolution: {integrity: sha512-X2Ii6dDFMF+D4niNwMAHbTkeCjlYYnMsd7edXOsi0JByxt9wNyZ9EnhFiBoQdqkE+SMDcu8TlNNttMrf5sJeMA==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: ^18.0 || ^19.0 || ^19.0.0-rc + + '@react-email/heading@0.0.15': + resolution: {integrity: sha512-xF2GqsvBrp/HbRHWEfOgSfRFX+Q8I5KBEIG5+Lv3Vb2R/NYr0s8A5JhHHGf2pWBMJdbP4B2WHgj/VUrhy8dkIg==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: ^18.0 || ^19.0 || ^19.0.0-rc + + '@react-email/hr@0.0.11': + resolution: {integrity: sha512-S1gZHVhwOsd1Iad5IFhpfICwNPMGPJidG/Uysy1AwmspyoAP5a4Iw3OWEpINFdgh9MHladbxcLKO2AJO+cA9Lw==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: ^18.0 || ^19.0 || ^19.0.0-rc + + '@react-email/html@0.0.11': + resolution: {integrity: sha512-qJhbOQy5VW5qzU74AimjAR9FRFQfrMa7dn4gkEXKMB/S9xZN8e1yC1uA9C15jkXI/PzmJ0muDIWmFwatm5/+VA==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: ^18.0 || ^19.0 || ^19.0.0-rc + + '@react-email/img@0.0.11': + resolution: {integrity: sha512-aGc8Y6U5C3igoMaqAJKsCpkbm1XjguQ09Acd+YcTKwjnC2+0w3yGUJkjWB2vTx4tN8dCqQCXO8FmdJpMfOA9EQ==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: ^18.0 || ^19.0 || ^19.0.0-rc + + '@react-email/link@0.0.12': + resolution: {integrity: sha512-vF+xxQk2fGS1CN7UPQDbzvcBGfffr+GjTPNiWM38fhBfsLv6A/YUfaqxWlmL7zLzVmo0K2cvvV9wxlSyNba1aQ==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: ^18.0 || ^19.0 || ^19.0.0-rc + + '@react-email/markdown@0.0.17': + resolution: {integrity: sha512-6op3AfsBC9BJKkhG+eoMFRFWlr0/f3FYbtQrK+VhGzJocEAY0WINIFN+W8xzXr//3IL0K/aKtnH3FtpIuescQQ==} + engines: {node: '>=22.0.0'} + peerDependencies: + react: ^18.0 || ^19.0 || ^19.0.0-rc + + '@react-email/preview-server@5.1.0': + resolution: {integrity: sha512-mNqeCjXkU9NdVCtgQnj4l7w426G8xyFH4hejgrWa7wVaIUyVUwh9h9TqlPw9j4aisoBwnOYghbV987ejXd0i4w==} + + '@react-email/preview@0.0.13': + resolution: {integrity: sha512-F7j9FJ0JN/A4d7yr+aw28p4uX7VLWs7hTHtLo7WRyw4G+Lit6Zucq4UWKRxJC8lpsUdzVmG7aBJnKOT+urqs/w==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: ^18.0 || ^19.0 || ^19.0.0-rc + + '@react-email/render@2.0.0': + resolution: {integrity: sha512-rdjNj6iVzv8kRKDPFas+47nnoe6B40+nwukuXwY4FCwM7XBg6tmYr+chQryCuavUj2J65MMf6fztk1bxOUiSVA==} + engines: {node: '>=22.0.0'} + peerDependencies: + react: ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^18.0 || ^19.0 || ^19.0.0-rc + + '@react-email/row@0.0.12': + resolution: {integrity: sha512-HkCdnEjvK3o+n0y0tZKXYhIXUNPDx+2vq1dJTmqappVHXS5tXS6W5JOPZr5j+eoZ8gY3PShI2LWj5rWF7ZEtIQ==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: ^18.0 || ^19.0 || ^19.0.0-rc + + '@react-email/section@0.0.16': + resolution: {integrity: sha512-FjqF9xQ8FoeUZYKSdt8sMIKvoT9XF8BrzhT3xiFKdEMwYNbsDflcjfErJe3jb7Wj/es/lKTbV5QR1dnLzGpL3w==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: ^18.0 || ^19.0 || ^19.0.0-rc + + '@react-email/tailwind@2.0.2': + resolution: {integrity: sha512-ooi1H77+w+MN3a3Yps66GYTMoo9PvLtzJ1bTEI+Ta58MUUEQOcdxxXPwbnox+xj2kSwv0g/B63qquNTabKI8Bw==} + engines: {node: '>=20.0.0'} + peerDependencies: + '@react-email/body': 0.2.0 + '@react-email/button': 0.2.0 + '@react-email/code-block': 0.2.0 + '@react-email/code-inline': 0.0.5 + '@react-email/container': 0.0.15 + '@react-email/heading': 0.0.15 + '@react-email/hr': 0.0.11 + '@react-email/img': 0.0.11 + '@react-email/link': 0.0.12 + '@react-email/preview': 0.0.13 + '@react-email/text': 0.1.5 + react: ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@react-email/body': + optional: true + '@react-email/button': + optional: true + '@react-email/code-block': + optional: true + '@react-email/code-inline': + optional: true + '@react-email/container': + optional: true + '@react-email/heading': + optional: true + '@react-email/hr': + optional: true + '@react-email/img': + optional: true + '@react-email/link': + optional: true + '@react-email/preview': + optional: true + + '@react-email/text@0.1.5': + resolution: {integrity: sha512-o5PNHFSE085VMXayxH+SJ1LSOtGsTv+RpNKnTiJDrJUwoBu77G3PlKOsZZQHCNyD28WsQpl9v2WcJLbQudqwPg==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: ^18.0 || ^19.0 || ^19.0.0-rc + '@rolldown/pluginutils@1.0.0-beta.40': resolution: {integrity: sha512-s3GeJKSQOwBlzdUrj4ISjJj5SfSh+aqn0wjOar4Bx95iV1ETI7F6S/5hLcfAxZ9kXDcyrAkxPlqmd1ZITttf+w==} @@ -1374,12 +1602,18 @@ packages: cpu: [x64] os: [win32] + '@selderee/plugin-htmlparser2@0.11.0': + resolution: {integrity: sha512-P33hHGdldxGabLFjPPpaTxVolMrzrcegejx+0GxjrIb9Zv48D8yAIA/QTDR2dFl7Uz7urX8aX6+5bCZslr+gWQ==} + '@sinclair/typebox@0.34.41': resolution: {integrity: sha512-6gS8pZzSXdyRHTIqoqSVknxolr1kzfy4/CeDnrzsVz8TTIWUbOBr6gnzOmTYJ3eXQNh4IYHIGi5aIL7sOZ2G/g==} '@so-ric/colorspace@1.1.6': resolution: {integrity: sha512-/KiKkpHNOBgkFJwu9sh48LkHSMYGyuTcSFK/qMBdnOAlrRJzRSXAOFB5qwzaVQuDl8wAvHVMkaASQDReTahxuw==} + '@socket.io/component-emitter@3.1.2': + resolution: {integrity: sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==} + '@solid-primitives/event-listener@2.4.3': resolution: {integrity: sha512-h4VqkYFv6Gf+L7SQj+Y6puigL/5DIi7x5q07VZET7AWcS+9/G3WfIE9WheniHWJs51OEkRB43w6lDys5YeFceg==} peerDependencies: @@ -1410,6 +1644,9 @@ packages: peerDependencies: solid-js: ^1.6.12 + '@swc/helpers@0.5.15': + resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} + '@t3-oss/env-core@0.13.8': resolution: {integrity: sha512-L1inmpzLQyYu4+Q1DyrXsGJYCXbtXjC4cICw1uAKv0ppYPQv656lhZPU91Qd1VS6SO/bou1/q5ufVzBGbNsUpw==} peerDependencies: @@ -1703,6 +1940,9 @@ packages: '@types/chai@5.2.3': resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} + '@types/cors@2.8.19': + resolution: {integrity: sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg==} + '@types/deep-eql@4.0.2': resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} @@ -1841,6 +2081,10 @@ packages: resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} engines: {node: '>=6.5'} + accepts@1.3.8: + resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} + engines: {node: '>= 0.6'} + acorn-import-attributes@1.9.5: resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==} peerDependencies: @@ -1860,6 +2104,14 @@ packages: peerDependencies: ajv: ^8.0.1 + ajv-formats@3.0.1: + resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + ajv@8.17.1: resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} @@ -1923,6 +2175,9 @@ packages: async@3.2.6: resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} + atomically@2.1.0: + resolution: {integrity: sha512-+gDffFXRW6sl/HCwbta7zK4uNqbPjv4YJEAdz7Vu+FLQHe77eZ4bvbJGi4hE0QPeJlMYMA3piXEr1UL3dAwx7Q==} + b4a@1.7.3: resolution: {integrity: sha512-5Q2mfq2WfGuFp3uS//0s6baOJLMoVduPYVeNmDYxu5OUA1/cBfvr2RIS7vi62LdNj/urk1hfmj867I3qt6uZ7Q==} peerDependencies: @@ -1951,6 +2206,10 @@ packages: base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + base64id@2.0.0: + resolution: {integrity: sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==} + engines: {node: ^4.5.0 || >= 5.9} + baseline-browser-mapping@2.8.29: resolution: {integrity: sha512-sXdt2elaVnhpDNRDz+1BDx1JQoJRuNk7oVlAlbGiFkLikHCAQiccexF/9e91zVi6RCgqspl04aP+6Cnl9zRLrA==} hasBin: true @@ -2053,6 +2312,17 @@ packages: cjs-module-lexer@1.4.3: resolution: {integrity: sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==} + cli-cursor@5.0.0: + resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} + engines: {node: '>=18'} + + cli-spinners@2.9.2: + resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} + engines: {node: '>=6'} + + client-only@0.0.1: + resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} + clipboardy@4.0.0: resolution: {integrity: sha512-5mOlNS0mhX0707P2I0aZ2V/cmHUEO/fL7VFLqszkhUsxt7RwnmrInf/eEQKlf5GzvYeHIjT+Ov1HRfNmymlG0w==} engines: {node: '>=18'} @@ -2100,6 +2370,10 @@ packages: resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} engines: {node: '>=18'} + commander@13.1.0: + resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==} + engines: {node: '>=18'} + commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} @@ -2110,9 +2384,16 @@ packages: resolution: {integrity: sha512-6FqVXeETqWPoGcfzrXb37E50NP0LXT8kAMu5ooZayhWWdgEY4lBEEcbQNXtkuKQsGduxiIcI4gOTsxTmuq/bSg==} engines: {node: '>= 14'} + conf@15.0.2: + resolution: {integrity: sha512-JBSrutapCafTrddF9dH3lc7+T2tBycGF4uPkI4Js+g4vLLEhG6RZcFi3aJd5zntdf5tQxAejJt8dihkoQ/eSJw==} + engines: {node: '>=20'} + confbox@0.1.8: resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} + confbox@0.2.2: + resolution: {integrity: sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==} + consola@3.4.2: resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==} engines: {node: ^14.18.0 || >=16.10.0} @@ -2126,6 +2407,10 @@ packages: cookie-es@2.0.0: resolution: {integrity: sha512-RAj4E421UYRgqokKUmotqAwuplYw15qtdXfY+hGzgCJ/MBjCVZcSoHK/kH9kocfjRjcDME7IiDWR/1WX1TM2Pg==} + cookie@0.7.2: + resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} + engines: {node: '>= 0.6'} + cookie@1.0.2: resolution: {integrity: sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==} engines: {node: '>=18'} @@ -2141,6 +2426,10 @@ packages: core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + cors@2.8.5: + resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} + engines: {node: '>= 0.10'} + crc-32@1.2.2: resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} engines: {node: '>=0.8'} @@ -2198,6 +2487,23 @@ packages: resolution: {integrity: sha512-BnBS08aLUM+DKamupXs3w2tJJoqU+AkaE/+6vQxi/G/DPmIZFJJp9Dkb1kM03AZx8ADehDUZgsNxju3mPXZYIA==} engines: {node: '>=20'} + debounce-fn@6.0.0: + resolution: {integrity: sha512-rBMW+F2TXryBwB54Q0d8drNEI+TfoS9JpNTAoVpukbWEhjXQq4rySFYLaqXMFXwdv61Zb2OHtj5bviSoimqxRQ==} + engines: {node: '>=18'} + + debounce@2.2.0: + resolution: {integrity: sha512-Xks6RUDLZFdz8LIdR6q0MTH44k7FikOmnh5xkSjMig6ch45afc8sjTjRQf3P6ax8dMgcQrYO/AR2RGWURrruqw==} + engines: {node: '>=18'} + + debug@4.3.7: + resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + debug@4.4.3: resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} engines: {node: '>=6.0'} @@ -2314,6 +2620,10 @@ packages: domutils@3.2.2: resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} + dot-prop@10.1.0: + resolution: {integrity: sha512-MVUtAugQMOff5RnBy2d9N31iG0lNwg1qAoAOn7pOK5wf94WIaE3My2p3uwTQuvS2AcqchkcR3bHByjaM0mmi7Q==} + engines: {node: '>=20'} + dot-prop@9.0.0: resolution: {integrity: sha512-1gxPBJpI/pcjQhKgIU91II6Wkay+dLcN3M6rf2uwP8hRur3HtQXjVrdAK3sjC0piaEuxzMwjXChcETiJl47lAQ==} engines: {node: '>=18'} @@ -2346,6 +2656,9 @@ packages: typescript: optional: true + emoji-regex@10.6.0: + resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==} + emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -2365,6 +2678,14 @@ packages: end-of-stream@1.4.5: resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==} + engine.io-parser@5.2.3: + resolution: {integrity: sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==} + engines: {node: '>=10.0.0'} + + engine.io@6.6.4: + resolution: {integrity: sha512-ZCkIjSYNDyGn0R6ewHDtXgns/Zre/NT6Agvq1/WobF7JXgFff4SeDroKiCO3fNJreU9YG429Sc81o4w5ok/W5g==} + engines: {node: '>=10.2.0'} + entities@4.5.0: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} @@ -2567,6 +2888,10 @@ packages: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} + get-east-asian-width@1.4.0: + resolution: {integrity: sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==} + engines: {node: '>=18'} + get-port-please@3.2.0: resolution: {integrity: sha512-I9QVvBw5U/hw3RmWpYKRumUeaDgxTPd401x364rLmWBJcOQ753eov1eTgzDqRG9bqFIfDc7gfzcQEWrUri3o1A==} @@ -2593,6 +2918,11 @@ packages: resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} hasBin: true + glob@11.1.0: + resolution: {integrity: sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw==} + engines: {node: 20 || >=22} + hasBin: true + globrex@0.1.2: resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} @@ -2637,9 +2967,16 @@ packages: resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==} engines: {node: '>=18'} + html-to-text@9.0.5: + resolution: {integrity: sha512-qY60FjREgVZL03vJU6IfMV4GDjGBIoOyvuFdpBDIX9yTlDw0TjxVBQp+P8NvpdIXNJvfWBTNul7fsAQJq2FNpg==} + engines: {node: '>=14'} + htmlparser2@10.0.0: resolution: {integrity: sha512-TwAZM+zE5Tq3lrEHvOlvwgj1XLWQCtaaibSN11Q+gGBAS7Y1uZSWwXXRe4iF6OXnaq1riyQAPFOBtYc77Mxq0g==} + htmlparser2@8.0.2: + resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==} + http-proxy-agent@7.0.2: resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} engines: {node: '>= 14'} @@ -2734,6 +3071,10 @@ packages: engines: {node: '>=14.16'} hasBin: true + is-interactive@2.0.0: + resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==} + engines: {node: '>=12'} + is-network-error@1.3.0: resolution: {integrity: sha512-6oIwpsgRfnDiyEDLMay/GqCl3HoAtH5+RUKW29gYkL0QA+ipzpDLA16yQs7/RHCSu+BwgbJaOUqa4A99qNVQVw==} engines: {node: '>=16'} @@ -2769,6 +3110,10 @@ packages: resolution: {integrity: sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==} engines: {node: '>=18'} + is-unicode-supported@1.3.0: + resolution: {integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==} + engines: {node: '>=12'} + is-unicode-supported@2.1.0: resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==} engines: {node: '>=18'} @@ -2801,6 +3146,14 @@ packages: jackspeak@3.4.3: resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + jackspeak@4.1.1: + resolution: {integrity: sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==} + engines: {node: 20 || >=22} + + jiti@2.4.2: + resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} + hasBin: true + jiti@2.6.1: resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} hasBin: true @@ -2838,6 +3191,9 @@ packages: json-schema-traverse@1.0.0: resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + json-schema-typed@8.0.2: + resolution: {integrity: sha512-fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA==} + json5@2.2.3: resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} @@ -2865,6 +3221,10 @@ packages: resolution: {integrity: sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA==} engines: {node: '>=18'} + kleur@3.0.3: + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} + engines: {node: '>=6'} + kuler@2.0.0: resolution: {integrity: sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==} @@ -2880,6 +3240,9 @@ packages: resolution: {integrity: sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==} engines: {node: '>= 0.6.3'} + leac@0.6.0: + resolution: {integrity: sha512-y+SqErxb8h7nE/fiEX07jsbuhrpO9lL8eca7/Y1nuWV2moNlXhyd59iDGcRf6moVyDMbmTNzL40SUyrFU/yDpg==} + leven@3.1.0: resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} engines: {node: '>=6'} @@ -2986,6 +3349,14 @@ packages: lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + log-symbols@6.0.0: + resolution: {integrity: sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==} + engines: {node: '>=18'} + + log-symbols@7.0.1: + resolution: {integrity: sha512-ja1E3yCr9i/0hmBVaM0bfwDjnGy8I/s6PP4DFp+yP+a+mrHO4Rm7DtmnqROTUkHIkqffC84YY7AeqX6oFk0WFg==} + engines: {node: '>=18'} + logform@2.7.0: resolution: {integrity: sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ==} engines: {node: '>= 12.0.0'} @@ -3021,6 +3392,11 @@ packages: resolution: {integrity: sha512-K6K2NgKnTXimT3779/4KxSvobxOtMmx1LBZ3NwRxT/MDIR3Br/fQ4Q+WCX5QxjyUR8zg5+RV9Tbf2c5pAWTD2A==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + marked@15.0.12: + resolution: {integrity: sha512-8dD6FusOQSrpv9Z1rdNMdlSgQOIP880DHqnohobOmYLElGEqAL/JvxvuxZO16r4HtjTlfPRDC1hbvxC9dPN2nA==} + engines: {node: '>= 18'} + hasBin: true + mdn-data@2.0.28: resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==} @@ -3045,10 +3421,18 @@ packages: resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + mime-db@1.54.0: resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==} engines: {node: '>= 0.6'} + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + mime-types@3.0.1: resolution: {integrity: sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==} engines: {node: '>= 0.6'} @@ -3057,6 +3441,14 @@ packages: resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} engines: {node: '>=12'} + mimic-function@5.0.1: + resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} + engines: {node: '>=18'} + + minimatch@10.1.1: + resolution: {integrity: sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==} + engines: {node: 20 || >=22} + minimatch@5.1.6: resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} engines: {node: '>=10'} @@ -3095,9 +3487,34 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true + negotiator@0.6.3: + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} + engines: {node: '>= 0.6'} + netlify-redirector@0.5.0: resolution: {integrity: sha512-4zdzIP+6muqPCuE8avnrgDJ6KW/2+UpHTRcTbMXCIRxiRmyrX+IZ4WSJGZdHPWF3WmQpXpy603XxecZ9iygN7w==} + next@16.0.10: + resolution: {integrity: sha512-RtWh5PUgI+vxlV3HdR+IfWA1UUHu0+Ram/JBO4vWB54cVPentCD0e+lxyAYEsDTqGGMg7qpjhKh6dc6aW7W/sA==} + engines: {node: '>=20.9.0'} + hasBin: true + peerDependencies: + '@opentelemetry/api': ^1.1.0 + '@playwright/test': ^1.51.1 + babel-plugin-react-compiler: '*' + react: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 + react-dom: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 + sass: ^1.3.0 + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + '@playwright/test': + optional: true + babel-plugin-react-compiler: + optional: true + sass: + optional: true + node-addon-api@7.1.1: resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} @@ -3168,6 +3585,15 @@ packages: nth-check@2.1.1: resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + nypm@0.6.0: + resolution: {integrity: sha512-mn8wBFV9G9+UFHIrq+pZ2r2zL4aPau/by3kJb3cM7+5tQHMt6HGQB8FDIeKFYp8o0D2pnH6nVsO88N4AmUxIWg==} + engines: {node: ^14.16.0 || >=16.10.0} + hasBin: true + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + ofetch@1.5.1: resolution: {integrity: sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA==} @@ -3184,9 +3610,17 @@ packages: resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} engines: {node: '>=12'} + onetime@7.0.0: + resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} + engines: {node: '>=18'} + openapi-types@12.1.3: resolution: {integrity: sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==} + ora@8.2.0: + resolution: {integrity: sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw==} + engines: {node: '>=18'} + p-event@6.0.1: resolution: {integrity: sha512-Q6Bekk5wpzW5qIyUP4gdMEujObYstZl6DMMOSenwBvV0BlE5LkDwkjs5yHbZmdCEq2o4RJx4tE1vwxFVf2FG1w==} engines: {node: '>=16.17'} @@ -3242,6 +3676,9 @@ packages: parse5@8.0.0: resolution: {integrity: sha512-9m4m5GSgXjL4AjumKzq1Fgfp3Z8rsvjRNbnkVwfu2ImRqE5D0LnY2QfDen18FSY9C573YU5XxSapdHZTZ2WolA==} + parseley@0.12.1: + resolution: {integrity: sha512-e6qHKe3a9HWr0oMRVDTRhKce+bRO8VGQR3NyVwcjwrbhMmFCX9KszEV35+rn4AdilFAq9VPxP/Fe1wC9Qjd2lw==} + path-exists@5.0.0: resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -3261,6 +3698,10 @@ packages: resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} engines: {node: '>=16 || 14 >=14.18'} + path-scurry@2.0.1: + resolution: {integrity: sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==} + engines: {node: 20 || >=22} + path-type@6.0.0: resolution: {integrity: sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==} engines: {node: '>=18'} @@ -3275,6 +3716,9 @@ packages: resolution: {integrity: sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==} engines: {node: '>= 14.16'} + peberminta@0.9.0: + resolution: {integrity: sha512-XIxfHpEuSJbITd1H3EeQwpcZbTLHc+VVr8ANI9t5sit565tsI4/xK3KWTUFE2e6QiangUkh3B0jihzmGnNrRsQ==} + pend@1.2.0: resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} @@ -3295,12 +3739,19 @@ packages: pkg-types@1.3.1: resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} + pkg-types@2.3.0: + resolution: {integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==} + postcss-values-parser@6.0.2: resolution: {integrity: sha512-YLJpK0N1brcNJrs9WatuJFtHaV9q5aAOj+S4DI5S7jgHlRfm0PIbDCAFRYMQD5SHq7Fy6xsDhyutgS0QOAs0qw==} engines: {node: '>=10'} peerDependencies: postcss: ^8.2.9 + postcss@8.4.31: + resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} + engines: {node: ^10 || ^12 || >=14} + postcss@8.5.6: resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} engines: {node: ^10 || ^12 || >=14} @@ -3319,6 +3770,10 @@ packages: resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + prismjs@1.30.0: + resolution: {integrity: sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==} + engines: {node: '>=6'} + process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} @@ -3326,6 +3781,10 @@ packages: resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} engines: {node: '>= 0.6.0'} + prompts@2.4.2: + resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} + engines: {node: '>= 6'} + protobufjs@7.5.4: resolution: {integrity: sha512-CvexbZtbov6jW2eXAvLukXjXUW1TzFaivC46BpWc/3BpcCysb5Vffu+B3XHMm8lVEuy2Mm4XGex8hBSg1yapPg==} engines: {node: '>=12.0.0'} @@ -3351,6 +3810,11 @@ packages: peerDependencies: react: ^19.2.0 + react-email@5.1.0: + resolution: {integrity: sha512-uVvtKcea0kd+QRwH5/Cw/znnijIge+Jog0IFagi0JiZgQ/GrDQ/qD98AwGVV1vM3hGbSugOvmcMayamFc4Zz1g==} + engines: {node: '>=20.0.0'} + hasBin: true + react-is@17.0.2: resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} @@ -3430,6 +3894,10 @@ packages: resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} hasBin: true + restore-cursor@5.1.0: + resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} + engines: {node: '>=18'} + retry@0.13.1: resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} engines: {node: '>= 4'} @@ -3477,6 +3945,9 @@ packages: scheduler@0.27.0: resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} + selderee@0.11.0: + resolution: {integrity: sha512-5TF+l7p4+OsnP8BCCvSyZiSPc4x4//p5uPwK8TCnVPJYRmU2aYKMpOXvw8zM5a5JvuuCGN1jmsMwuU2W02ukfA==} + semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true @@ -3529,9 +4000,23 @@ packages: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} + sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + slashes@3.0.12: resolution: {integrity: sha512-Q9VME8WyGkc7pJf6QEkj3wE+2CnvZMI+XJhwdTPR8Z/kWQRXi7boAWLDibRPyHRTUTPx5FaU7MsyrjI3yLB4HA==} + socket.io-adapter@2.5.5: + resolution: {integrity: sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==} + + socket.io-parser@4.2.4: + resolution: {integrity: sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==} + engines: {node: '>=10.0.0'} + + socket.io@4.8.1: + resolution: {integrity: sha512-oZ7iUCxph8WYRHHcjBEc9unw3adt5CmSNlppj/5Q4k2RIrhl8Z5yY2Xr4j9zj0+wzVZ0bxmYoGSzKJnRl6A4yg==} + engines: {node: '>=10.2.0'} + solid-js@1.9.10: resolution: {integrity: sha512-Coz956cos/EPDlhs6+jsdTxKuJDPT7B5SVIWgABwROyxjY7Xbr8wkzD68Et+NxnV7DLJ3nJdAC2r9InuV/4Jew==} @@ -3579,6 +4064,10 @@ packages: std-env@3.10.0: resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} + stdin-discarder@0.2.2: + resolution: {integrity: sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==} + engines: {node: '>=18'} + streamx@2.23.0: resolution: {integrity: sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg==} @@ -3590,6 +4079,10 @@ packages: resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} engines: {node: '>=12'} + string-width@7.2.0: + resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} + engines: {node: '>=18'} + string_decoder@1.1.1: resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} @@ -3604,6 +4097,10 @@ packages: resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==} engines: {node: '>=12'} + strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + strip-final-newline@3.0.0: resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} engines: {node: '>=12'} @@ -3615,6 +4112,25 @@ packages: resolution: {integrity: sha512-KIy5nylvC5le1OdaaoCJ07L+8iQzJHGH6pWDuzS+d07Cu7n1MZ2x26P8ZKIWfbK02+XIL8Mp4RkWeqdUCrDMfg==} engines: {node: '>=18'} + stubborn-fs@2.0.0: + resolution: {integrity: sha512-Y0AvSwDw8y+nlSNFXMm2g6L51rBGdAQT20J3YSOqxC53Lo3bjWRtr2BKcfYoAf352WYpsZSTURrA0tqhfgudPA==} + + stubborn-utils@1.0.2: + resolution: {integrity: sha512-zOh9jPYI+xrNOyisSelgym4tolKTJCQd5GBhK0+0xJvcYDcwlOoxF/rnFKQ2KRZknXSG9jWAp66fwP6AxN9STg==} + + styled-jsx@5.1.6: + resolution: {integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==} + engines: {node: '>= 12.0.0'} + peerDependencies: + '@babel/core': '*' + babel-plugin-macros: '*' + react: '>= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0' + peerDependenciesMeta: + '@babel/core': + optional: true + babel-plugin-macros: + optional: true + supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} @@ -3635,6 +4151,13 @@ packages: resolution: {integrity: sha512-ulAk51I9UVUyJgxlv9M6lFot2WP3e7t8Kz9+IS6D4rVba1tR9kON+Ey69f+1R4Q8cd45Lod6a4IcJIxnzGc/zA==} engines: {node: '>=18'} + tagged-tag@1.0.0: + resolution: {integrity: sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==} + engines: {node: '>=20'} + + tailwindcss@4.1.18: + resolution: {integrity: sha512-4+Z+0yiYyEtUVCScyfHCxOYP06L5Ne+JiHhY2IjR2KWMIWhJOYZKLSGZaP5HkZ8+bY0cxfzwDE5uOmzFXyIwxw==} + tar-stream@3.1.7: resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==} @@ -3735,6 +4258,10 @@ packages: typescript: optional: true + tsconfig-paths@4.2.0: + resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==} + engines: {node: '>=6'} + tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} @@ -3747,6 +4274,10 @@ packages: resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} engines: {node: '>=16'} + type-fest@5.3.1: + resolution: {integrity: sha512-VCn+LMHbd4t6sF3wfU/+HKT63C9OoyrSIf4b+vtWHpt2U7/4InZG467YDNMFMR70DdHjAdpPWmw2lzRdg0Xqqg==} + engines: {node: '>=20'} + typescript@5.9.3: resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} engines: {node: '>=14.17'} @@ -3885,6 +4416,10 @@ packages: resolution: {integrity: sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + vite-node@3.2.4: resolution: {integrity: sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} @@ -4013,6 +4548,9 @@ packages: whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + when-exit@2.1.5: + resolution: {integrity: sha512-VGkKJ564kzt6Ms1dbgPP/yuIoQCrsFAnRbptpC5wOEsDaNsbCB2bnfnaA8i/vRs5tjUSEOtIuvl9/MyVsvQZCg==} + which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} @@ -4046,6 +4584,18 @@ packages: resolution: {integrity: sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + ws@8.17.1: + resolution: {integrity: sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + ws@8.18.3: resolution: {integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==} engines: {node: '>=10.0.0'} @@ -4105,6 +4655,10 @@ packages: resolution: {integrity: sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==} engines: {node: '>=12.20'} + yoctocolors@2.1.2: + resolution: {integrity: sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==} + engines: {node: '>=18'} + zip-stream@6.0.1: resolution: {integrity: sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA==} engines: {node: '>= 14'} @@ -4693,6 +5247,12 @@ snapshots: '@import-maps/resolve@2.0.0': {} + '@isaacs/balanced-match@4.0.1': {} + + '@isaacs/brace-expansion@5.0.0': + dependencies: + '@isaacs/balanced-match': 4.0.1 + '@isaacs/cliui@8.0.2': dependencies: string-width: 5.1.2 @@ -5103,7 +5663,33 @@ snapshots: - rollup - supports-color - '@nodelib/fs.scandir@2.1.5': + '@next/env@16.0.10': {} + + '@next/swc-darwin-arm64@16.0.10': + optional: true + + '@next/swc-darwin-x64@16.0.10': + optional: true + + '@next/swc-linux-arm64-gnu@16.0.10': + optional: true + + '@next/swc-linux-arm64-musl@16.0.10': + optional: true + + '@next/swc-linux-x64-gnu@16.0.10': + optional: true + + '@next/swc-linux-x64-musl@16.0.10': + optional: true + + '@next/swc-win32-arm64-msvc@16.0.10': + optional: true + + '@next/swc-win32-x64-msvc@16.0.10': + optional: true + + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 run-parallel: 1.2.0 @@ -5310,6 +5896,143 @@ snapshots: '@protobufjs/utf8@1.1.0': {} + '@react-email/body@0.2.0(react@19.2.0)': + dependencies: + react: 19.2.0 + + '@react-email/button@0.2.0(react@19.2.0)': + dependencies: + react: 19.2.0 + + '@react-email/code-block@0.2.0(react@19.2.0)': + dependencies: + prismjs: 1.30.0 + react: 19.2.0 + + '@react-email/code-inline@0.0.5(react@19.2.0)': + dependencies: + react: 19.2.0 + + '@react-email/column@0.0.13(react@19.2.0)': + dependencies: + react: 19.2.0 + + '@react-email/components@1.0.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + dependencies: + '@react-email/body': 0.2.0(react@19.2.0) + '@react-email/button': 0.2.0(react@19.2.0) + '@react-email/code-block': 0.2.0(react@19.2.0) + '@react-email/code-inline': 0.0.5(react@19.2.0) + '@react-email/column': 0.0.13(react@19.2.0) + '@react-email/container': 0.0.15(react@19.2.0) + '@react-email/font': 0.0.9(react@19.2.0) + '@react-email/head': 0.0.12(react@19.2.0) + '@react-email/heading': 0.0.15(react@19.2.0) + '@react-email/hr': 0.0.11(react@19.2.0) + '@react-email/html': 0.0.11(react@19.2.0) + '@react-email/img': 0.0.11(react@19.2.0) + '@react-email/link': 0.0.12(react@19.2.0) + '@react-email/markdown': 0.0.17(react@19.2.0) + '@react-email/preview': 0.0.13(react@19.2.0) + '@react-email/render': 2.0.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@react-email/row': 0.0.12(react@19.2.0) + '@react-email/section': 0.0.16(react@19.2.0) + '@react-email/tailwind': 2.0.2(@react-email/body@0.2.0(react@19.2.0))(@react-email/button@0.2.0(react@19.2.0))(@react-email/code-block@0.2.0(react@19.2.0))(@react-email/code-inline@0.0.5(react@19.2.0))(@react-email/container@0.0.15(react@19.2.0))(@react-email/heading@0.0.15(react@19.2.0))(@react-email/hr@0.0.11(react@19.2.0))(@react-email/img@0.0.11(react@19.2.0))(@react-email/link@0.0.12(react@19.2.0))(@react-email/preview@0.0.13(react@19.2.0))(@react-email/text@0.1.5(react@19.2.0))(react@19.2.0) + '@react-email/text': 0.1.5(react@19.2.0) + react: 19.2.0 + transitivePeerDependencies: + - react-dom + + '@react-email/container@0.0.15(react@19.2.0)': + dependencies: + react: 19.2.0 + + '@react-email/font@0.0.9(react@19.2.0)': + dependencies: + react: 19.2.0 + + '@react-email/head@0.0.12(react@19.2.0)': + dependencies: + react: 19.2.0 + + '@react-email/heading@0.0.15(react@19.2.0)': + dependencies: + react: 19.2.0 + + '@react-email/hr@0.0.11(react@19.2.0)': + dependencies: + react: 19.2.0 + + '@react-email/html@0.0.11(react@19.2.0)': + dependencies: + react: 19.2.0 + + '@react-email/img@0.0.11(react@19.2.0)': + dependencies: + react: 19.2.0 + + '@react-email/link@0.0.12(react@19.2.0)': + dependencies: + react: 19.2.0 + + '@react-email/markdown@0.0.17(react@19.2.0)': + dependencies: + marked: 15.0.12 + react: 19.2.0 + + '@react-email/preview-server@5.1.0(@babel/core@7.28.5)(@opentelemetry/api@1.9.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.94.0)': + dependencies: + next: 16.0.10(@babel/core@7.28.5)(@opentelemetry/api@1.9.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.94.0) + transitivePeerDependencies: + - '@babel/core' + - '@opentelemetry/api' + - '@playwright/test' + - babel-plugin-macros + - babel-plugin-react-compiler + - react + - react-dom + - sass + + '@react-email/preview@0.0.13(react@19.2.0)': + dependencies: + react: 19.2.0 + + '@react-email/render@2.0.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + dependencies: + html-to-text: 9.0.5 + prettier: 3.6.2 + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + + '@react-email/row@0.0.12(react@19.2.0)': + dependencies: + react: 19.2.0 + + '@react-email/section@0.0.16(react@19.2.0)': + dependencies: + react: 19.2.0 + + '@react-email/tailwind@2.0.2(@react-email/body@0.2.0(react@19.2.0))(@react-email/button@0.2.0(react@19.2.0))(@react-email/code-block@0.2.0(react@19.2.0))(@react-email/code-inline@0.0.5(react@19.2.0))(@react-email/container@0.0.15(react@19.2.0))(@react-email/heading@0.0.15(react@19.2.0))(@react-email/hr@0.0.11(react@19.2.0))(@react-email/img@0.0.11(react@19.2.0))(@react-email/link@0.0.12(react@19.2.0))(@react-email/preview@0.0.13(react@19.2.0))(@react-email/text@0.1.5(react@19.2.0))(react@19.2.0)': + dependencies: + '@react-email/text': 0.1.5(react@19.2.0) + react: 19.2.0 + tailwindcss: 4.1.18 + optionalDependencies: + '@react-email/body': 0.2.0(react@19.2.0) + '@react-email/button': 0.2.0(react@19.2.0) + '@react-email/code-block': 0.2.0(react@19.2.0) + '@react-email/code-inline': 0.0.5(react@19.2.0) + '@react-email/container': 0.0.15(react@19.2.0) + '@react-email/heading': 0.0.15(react@19.2.0) + '@react-email/hr': 0.0.11(react@19.2.0) + '@react-email/img': 0.0.11(react@19.2.0) + '@react-email/link': 0.0.12(react@19.2.0) + '@react-email/preview': 0.0.13(react@19.2.0) + + '@react-email/text@0.1.5(react@19.2.0)': + dependencies: + react: 19.2.0 + '@rolldown/pluginutils@1.0.0-beta.40': {} '@rolldown/pluginutils@1.0.0-beta.47': {} @@ -5388,6 +6111,11 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.53.2': optional: true + '@selderee/plugin-htmlparser2@0.11.0': + dependencies: + domhandler: 5.0.3 + selderee: 0.11.0 + '@sinclair/typebox@0.34.41': {} '@so-ric/colorspace@1.1.6': @@ -5395,6 +6123,8 @@ snapshots: color: 5.0.3 text-hex: 1.0.0 + '@socket.io/component-emitter@3.1.2': {} + '@solid-primitives/event-listener@2.4.3(solid-js@1.9.10)': dependencies: '@solid-primitives/utils': 6.3.2(solid-js@1.9.10) @@ -5429,6 +6159,10 @@ snapshots: dependencies: solid-js: 1.9.10 + '@swc/helpers@0.5.15': + dependencies: + tslib: 2.8.1 + '@t3-oss/env-core@0.13.8(typescript@5.9.3)(zod@4.1.12)': optionalDependencies: typescript: 5.9.3 @@ -5882,6 +6616,10 @@ snapshots: '@types/deep-eql': 4.0.2 assertion-error: 2.0.1 + '@types/cors@2.8.19': + dependencies: + '@types/node': 22.19.1 + '@types/deep-eql@4.0.2': {} '@types/estree@1.0.8': {} @@ -6085,6 +6823,11 @@ snapshots: dependencies: event-target-shim: 5.0.1 + accepts@1.3.8: + dependencies: + mime-types: 2.1.35 + negotiator: 0.6.3 + acorn-import-attributes@1.9.5(acorn@8.15.0): dependencies: acorn: 8.15.0 @@ -6097,6 +6840,10 @@ snapshots: dependencies: ajv: 8.17.1 + ajv-formats@3.0.1(ajv@8.17.1): + optionalDependencies: + ajv: 8.17.1 + ajv@8.17.1: dependencies: fast-deep-equal: 3.1.3 @@ -6166,6 +6913,11 @@ snapshots: async@3.2.6: {} + atomically@2.1.0: + dependencies: + stubborn-fs: 2.0.0 + when-exit: 2.1.5 + b4a@1.7.3: {} babel-dead-code-elimination@1.0.10: @@ -6187,6 +6939,8 @@ snapshots: base64-js@1.5.1: {} + base64id@2.0.0: {} + baseline-browser-mapping@2.8.29: {} better-ajv-errors@1.2.0(ajv@8.17.1): @@ -6309,6 +7063,14 @@ snapshots: cjs-module-lexer@1.4.3: {} + cli-cursor@5.0.0: + dependencies: + restore-cursor: 5.1.0 + + cli-spinners@2.9.2: {} + + client-only@0.0.1: {} + clipboardy@4.0.0: dependencies: execa: 8.0.1 @@ -6350,6 +7112,8 @@ snapshots: commander@12.1.0: {} + commander@13.1.0: {} + commander@2.20.3: {} common-path-prefix@3.0.0: {} @@ -6362,8 +7126,22 @@ snapshots: normalize-path: 3.0.0 readable-stream: 4.7.0 + conf@15.0.2: + dependencies: + ajv: 8.17.1 + ajv-formats: 3.0.1(ajv@8.17.1) + atomically: 2.1.0 + debounce-fn: 6.0.0 + dot-prop: 10.1.0 + env-paths: 3.0.0 + json-schema-typed: 8.0.2 + semver: 7.7.3 + uint8array-extras: 1.5.0 + confbox@0.1.8: {} + confbox@0.2.2: {} + consola@3.4.2: {} convert-source-map@2.0.0: {} @@ -6372,6 +7150,8 @@ snapshots: cookie-es@2.0.0: {} + cookie@0.7.2: {} + cookie@1.0.2: {} cookie@1.1.1: {} @@ -6383,6 +7163,11 @@ snapshots: core-util-is@1.0.3: {} + cors@2.8.5: + dependencies: + object-assign: 4.1.1 + vary: 1.1.2 + crc-32@1.2.2: {} crc32-stream@6.0.0: @@ -6445,6 +7230,16 @@ snapshots: whatwg-mimetype: 4.0.0 whatwg-url: 15.1.0 + debounce-fn@6.0.0: + dependencies: + mimic-function: 5.0.1 + + debounce@2.2.0: {} + + debug@4.3.7: + dependencies: + ms: 2.1.3 + debug@4.4.3: dependencies: ms: 2.1.3 @@ -6551,6 +7346,10 @@ snapshots: domelementtype: 2.3.0 domhandler: 5.0.3 + dot-prop@10.1.0: + dependencies: + type-fest: 5.3.1 + dot-prop@9.0.0: dependencies: type-fest: 4.41.0 @@ -6577,6 +7376,8 @@ snapshots: optionalDependencies: typescript: 5.9.3 + emoji-regex@10.6.0: {} + emoji-regex@8.0.0: {} emoji-regex@9.2.2: {} @@ -6594,6 +7395,24 @@ snapshots: dependencies: once: 1.4.0 + engine.io-parser@5.2.3: {} + + engine.io@6.6.4: + dependencies: + '@types/cors': 2.8.19 + '@types/node': 22.19.1 + accepts: 1.3.8 + base64id: 2.0.0 + cookie: 0.7.2 + cors: 2.8.5 + debug: 4.3.7 + engine.io-parser: 5.2.3 + ws: 8.17.1 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + entities@4.5.0: {} entities@6.0.1: {} @@ -6821,6 +7640,8 @@ snapshots: get-caller-file@2.0.5: {} + get-east-asian-width@1.4.0: {} + get-port-please@3.2.0: {} get-port@7.1.0: {} @@ -6848,6 +7669,15 @@ snapshots: package-json-from-dist: 1.0.1 path-scurry: 1.11.1 + glob@11.1.0: + dependencies: + foreground-child: 3.3.1 + jackspeak: 4.1.1 + minimatch: 10.1.1 + minipass: 7.1.2 + package-json-from-dist: 1.0.1 + path-scurry: 2.0.1 + globrex@0.1.2: {} gonzales-pe@4.3.0: @@ -6893,6 +7723,14 @@ snapshots: dependencies: whatwg-encoding: 3.1.1 + html-to-text@9.0.5: + dependencies: + '@selderee/plugin-htmlparser2': 0.11.0 + deepmerge: 4.3.1 + dom-serializer: 2.0.0 + htmlparser2: 8.0.2 + selderee: 0.11.0 + htmlparser2@10.0.0: dependencies: domelementtype: 2.3.0 @@ -6900,6 +7738,13 @@ snapshots: domutils: 3.2.2 entities: 6.0.1 + htmlparser2@8.0.2: + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + domutils: 3.2.2 + entities: 4.5.0 + http-proxy-agent@7.0.2: dependencies: agent-base: 7.1.4 @@ -7010,6 +7855,8 @@ snapshots: dependencies: is-docker: 3.0.0 + is-interactive@2.0.0: {} + is-network-error@1.3.0: {} is-number@7.0.0: {} @@ -7028,6 +7875,8 @@ snapshots: is-stream@4.0.1: {} + is-unicode-supported@1.3.0: {} + is-unicode-supported@2.1.0: {} is-url-superb@4.0.0: {} @@ -7054,6 +7903,12 @@ snapshots: optionalDependencies: '@pkgjs/parseargs': 0.11.0 + jackspeak@4.1.1: + dependencies: + '@isaacs/cliui': 8.0.2 + + jiti@2.4.2: {} + jiti@2.6.1: {} jpeg-js@0.4.4: {} @@ -7102,6 +7957,8 @@ snapshots: json-schema-traverse@1.0.0: {} + json-schema-typed@8.0.2: {} + json5@2.2.3: {} jsonpointer@5.0.1: {} @@ -7134,6 +7991,8 @@ snapshots: jwt-decode@4.0.0: {} + kleur@3.0.3: {} + kuler@2.0.0: {} lambda-local@2.2.0: @@ -7151,6 +8010,8 @@ snapshots: dependencies: readable-stream: 2.3.8 + leac@0.6.0: {} + leven@3.1.0: {} lightningcss-android-arm64@1.30.2: @@ -7244,6 +8105,16 @@ snapshots: lodash@4.17.21: {} + log-symbols@6.0.0: + dependencies: + chalk: 5.6.2 + is-unicode-supported: 1.3.0 + + log-symbols@7.0.1: + dependencies: + is-unicode-supported: 2.1.0 + yoctocolors: 2.1.2 + logform@2.7.0: dependencies: '@colors/colors': 1.6.0 @@ -7275,6 +8146,8 @@ snapshots: map-obj@5.0.2: {} + marked@15.0.12: {} + mdn-data@2.0.28: {} mdn-data@2.12.2: {} @@ -7294,14 +8167,26 @@ snapshots: braces: 3.0.3 picomatch: 2.3.1 + mime-db@1.52.0: {} + mime-db@1.54.0: {} + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + mime-types@3.0.1: dependencies: mime-db: 1.54.0 mimic-fn@4.0.0: {} + mimic-function@5.0.1: {} + + minimatch@10.1.1: + dependencies: + '@isaacs/brace-expansion': 5.0.0 + minimatch@5.1.6: dependencies: brace-expansion: 2.0.2 @@ -7336,8 +8221,36 @@ snapshots: nanoid@3.3.11: {} + negotiator@0.6.3: {} + netlify-redirector@0.5.0: {} + next@16.0.10(@babel/core@7.28.5)(@opentelemetry/api@1.9.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.94.0): + dependencies: + '@next/env': 16.0.10 + '@swc/helpers': 0.5.15 + caniuse-lite: 1.0.30001755 + postcss: 8.4.31 + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + styled-jsx: 5.1.6(@babel/core@7.28.5)(react@19.2.0) + optionalDependencies: + '@next/swc-darwin-arm64': 16.0.10 + '@next/swc-darwin-x64': 16.0.10 + '@next/swc-linux-arm64-gnu': 16.0.10 + '@next/swc-linux-arm64-musl': 16.0.10 + '@next/swc-linux-x64-gnu': 16.0.10 + '@next/swc-linux-x64-musl': 16.0.10 + '@next/swc-win32-arm64-msvc': 16.0.10 + '@next/swc-win32-x64-msvc': 16.0.10 + '@opentelemetry/api': 1.9.0 + babel-plugin-react-compiler: 1.0.0 + sass: 1.94.0 + sharp: 0.34.5 + transitivePeerDependencies: + - '@babel/core' + - babel-plugin-macros + node-addon-api@7.1.1: {} node-domexception@1.0.0: {} @@ -7392,6 +8305,16 @@ snapshots: dependencies: boolbase: 1.0.0 + nypm@0.6.0: + dependencies: + citty: 0.1.6 + consola: 3.4.2 + pathe: 2.0.3 + pkg-types: 2.3.0 + tinyexec: 0.3.2 + + object-assign@4.1.1: {} + ofetch@1.5.1: dependencies: destr: 2.0.5 @@ -7412,8 +8335,24 @@ snapshots: dependencies: mimic-fn: 4.0.0 + onetime@7.0.0: + dependencies: + mimic-function: 5.0.1 + openapi-types@12.1.3: {} + ora@8.2.0: + dependencies: + chalk: 5.6.2 + cli-cursor: 5.0.0 + cli-spinners: 2.9.2 + is-interactive: 2.0.0 + is-unicode-supported: 2.1.0 + log-symbols: 6.0.0 + stdin-discarder: 0.2.2 + string-width: 7.2.0 + strip-ansi: 7.1.2 + p-event@6.0.1: dependencies: p-timeout: 6.1.4 @@ -7472,6 +8411,11 @@ snapshots: dependencies: entities: 6.0.1 + parseley@0.12.1: + dependencies: + leac: 0.6.0 + peberminta: 0.9.0 + path-exists@5.0.0: {} path-key@3.1.1: {} @@ -7485,6 +8429,11 @@ snapshots: lru-cache: 10.4.3 minipass: 7.1.2 + path-scurry@2.0.1: + dependencies: + lru-cache: 11.2.2 + minipass: 7.1.2 + path-type@6.0.0: {} pathe@1.1.2: {} @@ -7493,6 +8442,8 @@ snapshots: pathval@2.0.1: {} + peberminta@0.9.0: {} + pend@1.2.0: {} picocolors@1.1.1: {} @@ -7509,6 +8460,12 @@ snapshots: mlly: 1.8.0 pathe: 2.0.3 + pkg-types@2.3.0: + dependencies: + confbox: 0.2.2 + exsolve: 1.0.8 + pathe: 2.0.3 + postcss-values-parser@6.0.2(postcss@8.5.6): dependencies: color-name: 1.1.4 @@ -7516,6 +8473,12 @@ snapshots: postcss: 8.5.6 quote-unquote: 1.0.0 + postcss@8.4.31: + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + postcss@8.5.6: dependencies: nanoid: 3.3.11 @@ -7550,10 +8513,17 @@ snapshots: ansi-styles: 5.2.0 react-is: 17.0.2 + prismjs@1.30.0: {} + process-nextick-args@2.0.1: {} process@0.11.10: {} + prompts@2.4.2: + dependencies: + kleur: 3.0.3 + sisteransi: 1.0.5 + protobufjs@7.5.4: dependencies: '@protobufjs/aspromise': 1.1.2 @@ -7587,6 +8557,30 @@ snapshots: react: 19.2.0 scheduler: 0.27.0 + react-email@5.1.0: + dependencies: + '@babel/parser': 7.28.5 + '@babel/traverse': 7.28.5 + chokidar: 4.0.3 + commander: 13.1.0 + conf: 15.0.2 + debounce: 2.2.0 + esbuild: 0.25.12 + glob: 11.1.0 + jiti: 2.4.2 + log-symbols: 7.0.1 + mime-types: 3.0.1 + normalize-path: 3.0.0 + nypm: 0.6.0 + ora: 8.2.0 + prompts: 2.4.2 + socket.io: 4.8.1 + tsconfig-paths: 4.2.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + react-is@17.0.2: {} react-refresh@0.18.0: {} @@ -7681,6 +8675,11 @@ snapshots: path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 + restore-cursor@5.1.0: + dependencies: + onetime: 7.0.0 + signal-exit: 4.1.0 + retry@0.13.1: {} reusify@1.1.0: {} @@ -7743,6 +8742,10 @@ snapshots: scheduler@0.27.0: {} + selderee@0.11.0: + dependencies: + parseley: 0.12.1 + semver@6.3.1: {} semver@7.7.3: {} @@ -7802,8 +8805,40 @@ snapshots: signal-exit@4.1.0: {} + sisteransi@1.0.5: {} + slashes@3.0.12: {} + socket.io-adapter@2.5.5: + dependencies: + debug: 4.3.7 + ws: 8.17.1 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + socket.io-parser@4.2.4: + dependencies: + '@socket.io/component-emitter': 3.1.2 + debug: 4.3.7 + transitivePeerDependencies: + - supports-color + + socket.io@4.8.1: + dependencies: + accepts: 1.3.8 + base64id: 2.0.0 + cors: 2.8.5 + debug: 4.3.7 + engine.io: 6.6.4 + socket.io-adapter: 2.5.5 + socket.io-parser: 4.2.4 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + solid-js@1.9.10: dependencies: csstype: 3.2.3 @@ -7845,6 +8880,8 @@ snapshots: std-env@3.10.0: {} + stdin-discarder@0.2.2: {} + streamx@2.23.0: dependencies: events-universal: 1.0.1 @@ -7866,6 +8903,12 @@ snapshots: emoji-regex: 9.2.2 strip-ansi: 7.1.2 + string-width@7.2.0: + dependencies: + emoji-regex: 10.6.0 + get-east-asian-width: 1.4.0 + strip-ansi: 7.1.2 + string_decoder@1.1.1: dependencies: safe-buffer: 5.1.2 @@ -7882,6 +8925,8 @@ snapshots: dependencies: ansi-regex: 6.2.2 + strip-bom@3.0.0: {} + strip-final-newline@3.0.0: {} strip-literal@3.1.0: @@ -7892,6 +8937,19 @@ snapshots: dependencies: '@tokenizer/token': 0.3.0 + stubborn-fs@2.0.0: + dependencies: + stubborn-utils: 1.0.2 + + stubborn-utils@1.0.2: {} + + styled-jsx@5.1.6(@babel/core@7.28.5)(react@19.2.0): + dependencies: + client-only: 0.0.1 + react: 19.2.0 + optionalDependencies: + '@babel/core': 7.28.5 + supports-color@7.2.0: dependencies: has-flag: 4.0.0 @@ -7912,6 +8970,10 @@ snapshots: system-architecture@0.1.0: {} + tagged-tag@1.0.0: {} + + tailwindcss@4.1.18: {} + tar-stream@3.1.7: dependencies: b4a: 1.7.3 @@ -8002,6 +9064,12 @@ snapshots: optionalDependencies: typescript: 5.9.3 + tsconfig-paths@4.2.0: + dependencies: + json5: 2.2.3 + minimist: 1.2.8 + strip-bom: 3.0.0 + tslib@2.8.1: {} tsx@4.20.6: @@ -8013,6 +9081,10 @@ snapshots: type-fest@4.41.0: {} + type-fest@5.3.1: + dependencies: + tagged-tag: 1.0.0 + typescript@5.9.3: {} ufo@1.6.1: {} @@ -8086,6 +9158,8 @@ snapshots: validate-npm-package-name@5.0.1: {} + vary@1.1.2: {} + vite-node@3.2.4(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1): dependencies: cac: 6.7.14 @@ -8213,6 +9287,8 @@ snapshots: tr46: 0.0.3 webidl-conversions: 3.0.1 + when-exit@2.1.5: {} + which@2.0.2: dependencies: isexe: 2.0.0 @@ -8261,6 +9337,8 @@ snapshots: imurmurhash: 0.1.4 signal-exit: 4.1.0 + ws@8.17.1: {} + ws@8.18.3: {} xml-name-validator@5.0.0: {} @@ -8306,6 +9384,8 @@ snapshots: yocto-queue@1.2.2: {} + yoctocolors@2.1.2: {} + zip-stream@6.0.1: dependencies: archiver-utils: 5.0.2 From 72cbb66cbb29a053b2983654103beddb7f814415 Mon Sep 17 00:00:00 2001 From: Savy Date: Sun, 21 Dec 2025 16:56:18 +0530 Subject: [PATCH 09/47] add favicons and related assets --- public/android-chrome-192x192.png | Bin 0 -> 12423 bytes public/android-chrome-512x512.png | Bin 0 -> 32546 bytes public/apple-touch-icon.png | Bin 0 -> 11413 bytes public/assets/pec-acm-logo.png | Bin 0 -> 62899 bytes public/favicon-16x16.png | Bin 0 -> 502 bytes public/favicon-32x32.png | Bin 0 -> 1138 bytes public/favicon.ico | Bin 3870 -> 15406 bytes public/logo192.png | Bin 5347 -> 0 bytes public/logo512.png | Bin 9664 -> 0 bytes public/manifest.json | 25 ------------------------- public/robots.txt | 3 --- public/site.webmanifest | 1 + public/tanstack-circle-logo.png | Bin 265387 -> 0 bytes public/tanstack-word-logo-white.svg | 1 - src/logo.svg | 12 ------------ src/routes/__root.tsx | 4 ++++ 16 files changed, 5 insertions(+), 41 deletions(-) create mode 100644 public/android-chrome-192x192.png create mode 100644 public/android-chrome-512x512.png create mode 100644 public/apple-touch-icon.png create mode 100644 public/assets/pec-acm-logo.png create mode 100644 public/favicon-16x16.png create mode 100644 public/favicon-32x32.png delete mode 100644 public/logo192.png delete mode 100644 public/logo512.png delete mode 100644 public/manifest.json delete mode 100644 public/robots.txt create mode 100644 public/site.webmanifest delete mode 100644 public/tanstack-circle-logo.png delete mode 100644 public/tanstack-word-logo-white.svg delete mode 100644 src/logo.svg diff --git a/public/android-chrome-192x192.png b/public/android-chrome-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..695487b5c2202bf35c750bf4b5fd42fe89760b97 GIT binary patch literal 12423 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≦8s^B0Gy33shA=(4EgH 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� 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 QZU!LmboFyt=akR{0HEkChyVZp literal 0 HcmV?d00001 diff --git a/public/favicon-16x16.png b/public/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..60423b94b0f2b982df3a93547f334492ef22f0e2 GIT binary patch literal 502 zcmVnZ{^@k``3sY~7$BPgtRcqy>H&AJ!0ih#o*_067FAOx z<}rg_0CXwXYXG~~zv8Xx%R0OE+t^rW>cIIF4g^qOr1`q{KJ5r5B~0|Mq& z!9g5xDV7G20TBV6uJP{Q5Nt0vXla6#s)ea1j<~{=v4L(?Q)|B)@A45raW?uBX(H9a z)aw^Zk~9!fH8s6*^<)D5q)OGo2F0Qe8wjNdk8rU(xmsvp;dkae5$Oh^L?&gH<+PWH shw%dd0RR6T3M%CQ000I_L_t&o0Aum9x3L=WFaQ7m07*qoM6N<$g1jf&WB>pF literal 0 HcmV?d00001 diff --git a/public/favicon-32x32.png b/public/favicon-32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..c0dcd8c7fb1073d8a12df436f57c9c88d6d033a6 GIT binary patch literal 1138 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 We}j7Id}z@B&t&=K|Mvf$1^xj5ST_6s literal 3870 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 baj7?x%VD!5Cxk2YbYLNVeiXvvpMCWYo=by@ diff --git a/public/logo192.png b/public/logo192.png deleted file mode 100644 index fc44b0a3796c0e0a64c3d858ca038bd4570465d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5347 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 b{|{}U^kRn2wo}j7|0ATu<;8xA7zX}7|B6mN diff --git a/public/manifest.json b/public/manifest.json deleted file mode 100644 index 078ef50..0000000 --- a/public/manifest.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "short_name": "TanStack App", - "name": "Create TanStack App Sample", - "icons": [ - { - "src": "favicon.ico", - "sizes": "64x64 32x32 24x24 16x16", - "type": "image/x-icon" - }, - { - "src": "logo192.png", - "type": "image/png", - "sizes": "192x192" - }, - { - "src": "logo512.png", - "type": "image/png", - "sizes": "512x512" - } - ], - "start_url": ".", - "display": "standalone", - "theme_color": "#000000", - "background_color": "#ffffff" -} diff --git a/public/robots.txt b/public/robots.txt deleted file mode 100644 index e9e57dc..0000000 --- a/public/robots.txt +++ /dev/null @@ -1,3 +0,0 @@ -# https://www.robotstxt.org/robotstxt.html -User-agent: * -Disallow: diff --git a/public/site.webmanifest b/public/site.webmanifest new file mode 100644 index 0000000..f31e56e --- /dev/null +++ b/public/site.webmanifest @@ -0,0 +1 @@ +{"name":"PEC ACM","short_name":"PEC ACM","icons":[{"src":"/android-chrome-192x192.png","sizes":"192x192","type":"image/png"},{"src":"/android-chrome-512x512.png","sizes":"512x512","type":"image/png"}],"theme_color":"#ffffff","background_color":"#ffffff","display":"standalone"} diff --git a/public/tanstack-circle-logo.png b/public/tanstack-circle-logo.png deleted file mode 100644 index 9db3e67bade15d9ced50bdfc2393359c5f6f5712..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 265387 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ϟKoY=Snqfy1)i`l$#Yvv>#w{lM68ok2%j-k9O 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%0A(FZ&@S*K}LKE%X8U=5NC^*)q#N-fWN^U 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

PA1kxM>X}C)4Cw|l0ri~kthJMgZmD5j;BYmD! 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

{Pegpj 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

oR9O3D4_(l&vOI_L+1e*rKJ`%!KeXK-?Z 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 diff --git a/public/tanstack-word-logo-white.svg b/public/tanstack-word-logo-white.svg deleted file mode 100644 index b6ec508..0000000 --- a/public/tanstack-word-logo-white.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/logo.svg b/src/logo.svg deleted file mode 100644 index fe53fe8..0000000 --- a/src/logo.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - logo - - \ No newline at end of file diff --git a/src/routes/__root.tsx b/src/routes/__root.tsx index 20f4514..f71474e 100644 --- a/src/routes/__root.tsx +++ b/src/routes/__root.tsx @@ -30,6 +30,10 @@ export const Route = createRootRouteWithContext()({ }, ], links: [ + { + rel: "icon", + href: "/favicon.ico", + }, { rel: "stylesheet", href: appCss, From 1f8319bff5c460d3a716595cdcd033cf16ee1f3a Mon Sep 17 00:00:00 2001 From: Savy Date: Sun, 21 Dec 2025 16:56:42 +0530 Subject: [PATCH 10/47] create verify email template --- src/emails/verify.tsx | 118 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 118 insertions(+) create mode 100644 src/emails/verify.tsx diff --git a/src/emails/verify.tsx b/src/emails/verify.tsx new file mode 100644 index 0000000..99934d9 --- /dev/null +++ b/src/emails/verify.tsx @@ -0,0 +1,118 @@ +import { + Body, + Button, + Head, + Heading, + Hr, + Html, + Img, + Link, + Text, +} from "@react-email/components"; + +interface VerifyEmailProps { + token: string; +} + +const BASE_URL = + process.env.NODE_ENV === "production" + ? "https://pecacm.com" + : "http://localhost:3000"; + +function VerifyEmail({ token }: VerifyEmailProps) { + const VERIFY_URL = `${BASE_URL}/api/verify-email/${token}`; + + return ( + + + + + + logo for PEC ACM{" "} + + PEC ACM + + + + + Hello! + + + You are receiving this email because you registered for PEC ACM. + Please click the button below to verify your email address and + complete your registration. + + + + If you did not create an account with PEC ACM, no further action is + required. + + + Regards, +
+ PEC ACM +
+ +


+ + + If you're having trouble clicking the "Verify Email Address" button, + copy and paste the URL below into your web browser:  + + {VERIFY_URL} + + + + + ); +} + +VerifyEmail.PreviewProps = { + token: "qwertyuiopasdfghjklzxcvbnm1234567890", +} as VerifyEmailProps; + +export default VerifyEmail; From 1a89e69d7ef3b0174d21484160fbad99671961ad Mon Sep 17 00:00:00 2001 From: Savy Date: Sun, 21 Dec 2025 17:01:30 +0530 Subject: [PATCH 11/47] change email dev server port --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index e8ff6e2..1f8c23c 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "lint": "biome lint", "check": "biome check", "prepare": "husky", - "email:dev": "email dev --dir=./src/emails" + "email:dev": "email dev --dir=./src/emails --port=2999" }, "dependencies": { "@elysiajs/eden": "^1.4.5", From 4e4544f4d6e63708435bab658a3ad2819faceec1 Mon Sep 17 00:00:00 2001 From: Savy Date: Tue, 23 Dec 2025 17:25:57 +0530 Subject: [PATCH 12/47] rename `user` handler to `auth` --- src/lib/api/{user.ts => auth.ts} | 25 ++++++++++++++++++++----- src/lib/api/index.ts | 2 +- src/routes/api.$.ts | 4 ++-- 3 files changed, 23 insertions(+), 8 deletions(-) rename src/lib/api/{user.ts => auth.ts} (85%) diff --git a/src/lib/api/user.ts b/src/lib/api/auth.ts similarity index 85% rename from src/lib/api/user.ts rename to src/lib/api/auth.ts index 2f37696..94f86f2 100644 --- a/src/lib/api/user.ts +++ b/src/lib/api/auth.ts @@ -5,17 +5,17 @@ import { API_URL } from "$lib/constants/api"; import { isErrorResponse } from "./helpers"; import { APIUserSchema, UserSchema } from "./schemas"; -const ResponseSchema = z.object({ +const LoginResponseSchema = z.object({ jwtToken: z.string(), user: UserSchema, }); -const APIResponseSchema = z.object({ +const APILoginResponseSchema = z.object({ jwtToken: z.string(), user: APIUserSchema, }); -export const api = new Elysia({ prefix: "/user" }) +export const api = new Elysia({ prefix: "/auth" }) .model({ error: z.object({ error: z.string(), @@ -59,7 +59,7 @@ export const api = new Elysia({ prefix: "/user" }) } } - const validatedRes = APIResponseSchema.parse(response); + const validatedRes = APILoginResponseSchema.parse(response); return { jwtToken: validatedRes.jwtToken, @@ -76,7 +76,7 @@ export const api = new Elysia({ prefix: "/user" }) password: z.string("you need to enter a password to login"), }), response: { - 200: ResponseSchema, + 200: LoginResponseSchema, 401: "error", 404: "error", 500: "error", @@ -95,4 +95,19 @@ On successful authentication, returns a JWT token for subsequent authenticated r tags: ["Authentication"], }, }, + ) + .post( + "/verify-email/:token", + async ({ params }) => { + const token = params.token; + + return { token }; + }, + { + response: { + 200: z.object({ + token: z.string(), + }), + }, + }, ); diff --git a/src/lib/api/index.ts b/src/lib/api/index.ts index fd70b4e..0c6e9d5 100644 --- a/src/lib/api/index.ts +++ b/src/lib/api/index.ts @@ -1,2 +1,2 @@ +export { api as auth } from "./auth"; export { api as health } from "./health"; -export { api as user } from "./user"; diff --git a/src/routes/api.$.ts b/src/routes/api.$.ts index 7660d80..f96b507 100644 --- a/src/routes/api.$.ts +++ b/src/routes/api.$.ts @@ -5,7 +5,7 @@ import { createIsomorphicFn } from "@tanstack/react-start"; import { Elysia } from "elysia"; import * as z from "zod"; -import { health, user } from "$lib/api"; +import { auth, health } from "$lib/api"; const app = new Elysia({ prefix: "/api", @@ -38,7 +38,7 @@ All responses follow a consistent JSON structure with appropriate HTTP status co }), ) .use(health) - .use(user) + .use(auth) .get("/", "Hello PEC ACM!"); const handle = ({ request }: { request: Request }) => app.fetch(request); From 85466fa95e6d3340794e982bc234a299653c4716 Mon Sep 17 00:00:00 2001 From: Savy Date: Sun, 4 Jan 2026 20:31:49 +0530 Subject: [PATCH 13/47] add user registration and verification handlers (#4) * add branch names constants * add nodemailer * update verify email templ, update api docs path * add smtp env vars * add email import alias * add user registration hanlder * complete user verification handler * add todo comments --- package.json | 2 + pnpm-lock.yaml | 1013 ++++++++++++++++++++++++++++++++++ src/emails/verify.tsx | 10 +- src/lib/api/auth.ts | 155 +++++- src/lib/constants/details.ts | 16 + src/lib/env/server.ts | 7 + src/routes/api.$.ts | 1 + tsconfig.json | 1 + 8 files changed, 1197 insertions(+), 8 deletions(-) create mode 100644 src/lib/constants/details.ts diff --git a/package.json b/package.json index 1f8c23c..f049512 100644 --- a/package.json +++ b/package.json @@ -30,6 +30,7 @@ "@tanstack/react-start": "^1.132.0", "@tanstack/router-plugin": "^1.132.0", "elysia": "^1.4.19", + "nodemailer": "^7.0.12", "react": "^19.2.0", "react-dom": "^19.2.0", "vite-tsconfig-paths": "^5.1.4", @@ -42,6 +43,7 @@ "@testing-library/dom": "^10.4.0", "@testing-library/react": "^16.2.0", "@types/node": "^22.10.2", + "@types/nodemailer": "^7.0.4", "@types/react": "^19.2.0", "@types/react-dom": "^19.2.0", "@vitejs/plugin-react": "^5.0.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3e3aac7..21a58e4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -53,6 +53,9 @@ importers: elysia: specifier: ^1.4.19 version: 1.4.19(@sinclair/typebox@0.34.41)(exact-mirror@0.2.5(@sinclair/typebox@0.34.41))(file-type@21.1.1)(openapi-types@12.1.3)(typescript@5.9.3) + nodemailer: + specifier: ^7.0.12 + version: 7.0.12 react: specifier: ^19.2.0 version: 19.2.0 @@ -84,6 +87,9 @@ importers: '@types/node': specifier: ^22.10.2 version: 22.19.1 + '@types/nodemailer': + specifier: ^7.0.4 + version: 7.0.4 '@types/react': specifier: ^19.2.0 version: 19.2.5 @@ -138,6 +144,135 @@ packages: '@asamuzakjp/nwsapi@2.3.9': resolution: {integrity: sha512-n8GuYSrI9bF7FFZ/SjhwevlHc8xaVlb/7HmHelnc/PZXBD2ZR49NnN9sMMuDdEGPeeRQ5d0hqlSlEpgCX3Wl0Q==} + '@aws-crypto/sha256-browser@5.2.0': + resolution: {integrity: sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==} + + '@aws-crypto/sha256-js@5.2.0': + resolution: {integrity: sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==} + engines: {node: '>=16.0.0'} + + '@aws-crypto/supports-web-crypto@5.2.0': + resolution: {integrity: sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==} + + '@aws-crypto/util@5.2.0': + resolution: {integrity: sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==} + + '@aws-sdk/client-sesv2@3.962.0': + resolution: {integrity: sha512-1kQdfoQJmE+FgMnIrhzayP4leKhuAPxpAjmYVRgRhlS8nsOawwnNn+7k6/R0nYFAtCUrUUHOvNxwNUuYDHJ9Pg==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/client-sso@3.958.0': + resolution: {integrity: sha512-6qNCIeaMzKzfqasy2nNRuYnMuaMebCcCPP4J2CVGkA8QYMbIVKPlkn9bpB20Vxe6H/r3jtCCLQaOJjVTx/6dXg==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/core@3.957.0': + resolution: {integrity: sha512-DrZgDnF1lQZv75a52nFWs6MExihJF2GZB6ETZRqr6jMwhrk2kbJPUtvgbifwcL7AYmVqHQDJBrR/MqkwwFCpiw==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-provider-env@3.957.0': + resolution: {integrity: sha512-475mkhGaWCr+Z52fOOVb/q2VHuNvqEDixlYIkeaO6xJ6t9qR0wpLt4hOQaR6zR1wfZV0SlE7d8RErdYq/PByog==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-provider-http@3.957.0': + resolution: {integrity: sha512-8dS55QHRxXgJlHkEYaCGZIhieCs9NU1HU1BcqQ4RfUdSsfRdxxktqUKgCnBnOOn0oD3PPA8cQOCAVgIyRb3Rfw==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-provider-ini@3.962.0': + resolution: {integrity: sha512-h0kVnXLW2d3nxbcrR/Pfg3W/+YoCguasWz7/3nYzVqmdKarGrpJzaFdoZtLgvDSZ8VgWUC4lWOTcsDMV0UNqUQ==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-provider-login@3.962.0': + resolution: {integrity: sha512-kHYH6Av2UifG3mPkpPUNRh/PuX6adaAcpmsclJdHdxlixMCRdh8GNeEihq480DC0GmfqdpoSf1w2CLmLLPIS6w==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-provider-node@3.962.0': + resolution: {integrity: sha512-CS78NsWRxLa+nWqeWBEYMZTLacMFIXs1C5WJuM9kD05LLiWL32ksljoPsvNN24Bc7rCSQIIMx/U3KGvkDVZMVg==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-provider-process@3.957.0': + resolution: {integrity: sha512-/KIz9kadwbeLy6SKvT79W81Y+hb/8LMDyeloA2zhouE28hmne+hLn0wNCQXAAupFFlYOAtZR2NTBs7HBAReJlg==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-provider-sso@3.958.0': + resolution: {integrity: sha512-CBYHJ5ufp8HC4q+o7IJejCUctJXWaksgpmoFpXerbjAso7/Fg7LLUu9inXVOxlHKLlvYekDXjIUBXDJS2WYdgg==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-provider-web-identity@3.958.0': + resolution: {integrity: sha512-dgnvwjMq5Y66WozzUzxNkCFap+umHUtqMMKlr8z/vl9NYMLem/WUbWNpFFOVFWquXikc+ewtpBMR4KEDXfZ+KA==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/middleware-host-header@3.957.0': + resolution: {integrity: sha512-BBgKawVyfQZglEkNTuBBdC3azlyqNXsvvN4jPkWAiNYcY0x1BasaJFl+7u/HisfULstryweJq/dAvIZIxzlZaA==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/middleware-logger@3.957.0': + resolution: {integrity: sha512-w1qfKrSKHf9b5a8O76yQ1t69u6NWuBjr5kBX+jRWFx/5mu6RLpqERXRpVJxfosbep7k3B+DSB5tZMZ82GKcJtQ==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/middleware-recursion-detection@3.957.0': + resolution: {integrity: sha512-D2H/WoxhAZNYX+IjkKTdOhOkWQaK0jjJrDBj56hKjU5c9ltQiaX/1PqJ4dfjHntEshJfu0w+E6XJ+/6A6ILBBA==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/middleware-sdk-s3@3.957.0': + resolution: {integrity: sha512-5B2qY2nR2LYpxoQP0xUum5A1UNvH2JQpLHDH1nWFNF/XetV7ipFHksMxPNhtJJ6ARaWhQIDXfOUj0jcnkJxXUg==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/middleware-user-agent@3.957.0': + resolution: {integrity: sha512-50vcHu96XakQnIvlKJ1UoltrFODjsq2KvtTgHiPFteUS884lQnK5VC/8xd1Msz/1ONpLMzdCVproCQqhDTtMPQ==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/nested-clients@3.958.0': + resolution: {integrity: sha512-/KuCcS8b5TpQXkYOrPLYytrgxBhv81+5pChkOlhegbeHttjM69pyUpQVJqyfDM/A7wPLnDrzCAnk4zaAOkY0Nw==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/region-config-resolver@3.957.0': + resolution: {integrity: sha512-V8iY3blh8l2iaOqXWW88HbkY5jDoWjH56jonprG/cpyqqCnprvpMUZWPWYJoI8rHRf2bqzZeql1slxG6EnKI7A==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/signature-v4-multi-region@3.957.0': + resolution: {integrity: sha512-t6UfP1xMUigMMzHcb7vaZcjv7dA2DQkk9C/OAP1dKyrE0vb4lFGDaTApi17GN6Km9zFxJthEMUbBc7DL0hq1Bg==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/token-providers@3.958.0': + resolution: {integrity: sha512-UCj7lQXODduD1myNJQkV+LYcGYJ9iiMggR8ow8Hva1g3A/Na5imNXzz6O67k7DAee0TYpy+gkNw+SizC6min8Q==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/types@3.957.0': + resolution: {integrity: sha512-wzWC2Nrt859ABk6UCAVY/WYEbAd7FjkdrQL6m24+tfmWYDNRByTJ9uOgU/kw9zqLCAwb//CPvrJdhqjTznWXAg==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/util-arn-parser@3.957.0': + resolution: {integrity: sha512-Aj6m+AyrhWyg8YQ4LDPg2/gIfGHCEcoQdBt5DeSFogN5k9mmJPOJ+IAmNSWmWRjpOxEy6eY813RNDI6qS97M0g==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/util-endpoints@3.957.0': + resolution: {integrity: sha512-xwF9K24mZSxcxKS3UKQFeX/dPYkEps9wF1b+MGON7EvnbcucrJGyQyK1v1xFPn1aqXkBTFi+SZaMRx5E5YCVFw==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/util-locate-window@3.957.0': + resolution: {integrity: sha512-nhmgKHnNV9K+i9daumaIz8JTLsIIML9PE/HUks5liyrjUzenjW/aHoc7WJ9/Td/gPZtayxFnXQSJRb/fDlBuJw==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/util-user-agent-browser@3.957.0': + resolution: {integrity: sha512-exueuwxef0lUJRnGaVkNSC674eAiWU07ORhxBnevFFZEKisln+09Qrtw823iyv5I1N8T+wKfh95xvtWQrNKNQw==} + + '@aws-sdk/util-user-agent-node@3.957.0': + resolution: {integrity: sha512-ycbYCwqXk4gJGp0Oxkzf2KBeeGBdTxz559D41NJP8FlzSej1Gh7Rk40Zo6AyTfsNWkrl/kVi1t937OIzC5t+9Q==} + engines: {node: '>=18.0.0'} + peerDependencies: + aws-crt: '>=1.0.0' + peerDependenciesMeta: + aws-crt: + optional: true + + '@aws-sdk/xml-builder@3.957.0': + resolution: {integrity: sha512-Ai5iiQqS8kJ5PjzMhWcLKN0G2yasAkvpnPlq2EnqlIMdB48HsizElt62qcktdxp4neRMyGkFq4NzgmDbXnhRiA==} + engines: {node: '>=18.0.0'} + + '@aws/lambda-invoke-store@0.2.2': + resolution: {integrity: sha512-C0NBLsIqzDIae8HFw9YIrIBsbc0xTiOtt7fAukGPnqQ/+zZNaq+4jhuccltK0QuWHBnNm/a6kLIRA6GFiM10eg==} + engines: {node: '>=18.0.0'} + '@babel/code-frame@7.26.2': resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} engines: {node: '>=6.9.0'} @@ -1608,6 +1743,178 @@ packages: '@sinclair/typebox@0.34.41': resolution: {integrity: sha512-6gS8pZzSXdyRHTIqoqSVknxolr1kzfy4/CeDnrzsVz8TTIWUbOBr6gnzOmTYJ3eXQNh4IYHIGi5aIL7sOZ2G/g==} + '@smithy/abort-controller@4.2.7': + resolution: {integrity: sha512-rzMY6CaKx2qxrbYbqjXWS0plqEy7LOdKHS0bg4ixJ6aoGDPNUcLWk/FRNuCILh7GKLG9TFUXYYeQQldMBBwuyw==} + engines: {node: '>=18.0.0'} + + '@smithy/config-resolver@4.4.5': + resolution: {integrity: sha512-HAGoUAFYsUkoSckuKbCPayECeMim8pOu+yLy1zOxt1sifzEbrsRpYa+mKcMdiHKMeiqOibyPG0sFJnmaV/OGEg==} + engines: {node: '>=18.0.0'} + + '@smithy/core@3.20.0': + resolution: {integrity: sha512-WsSHCPq/neD5G/MkK4csLI5Y5Pkd9c1NMfpYEKeghSGaD4Ja1qLIohRQf2D5c1Uy5aXp76DeKHkzWZ9KAlHroQ==} + engines: {node: '>=18.0.0'} + + '@smithy/credential-provider-imds@4.2.7': + resolution: {integrity: sha512-CmduWdCiILCRNbQWFR0OcZlUPVtyE49Sr8yYL0rZQ4D/wKxiNzBNS/YHemvnbkIWj623fplgkexUd/c9CAKdoA==} + engines: {node: '>=18.0.0'} + + '@smithy/fetch-http-handler@5.3.8': + resolution: {integrity: sha512-h/Fi+o7mti4n8wx1SR6UHWLaakwHRx29sizvp8OOm7iqwKGFneT06GCSFhml6Bha5BT6ot5pj3CYZnCHhGC2Rg==} + engines: {node: '>=18.0.0'} + + '@smithy/hash-node@4.2.7': + resolution: {integrity: sha512-PU/JWLTBCV1c8FtB8tEFnY4eV1tSfBc7bDBADHfn1K+uRbPgSJ9jnJp0hyjiFN2PMdPzxsf1Fdu0eo9fJ760Xw==} + engines: {node: '>=18.0.0'} + + '@smithy/invalid-dependency@4.2.7': + resolution: {integrity: sha512-ncvgCr9a15nPlkhIUx3CU4d7E7WEuVJOV7fS7nnK2hLtPK9tYRBkMHQbhXU1VvvKeBm/O0x26OEoBq+ngFpOEQ==} + engines: {node: '>=18.0.0'} + + '@smithy/is-array-buffer@2.2.0': + resolution: {integrity: sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==} + engines: {node: '>=14.0.0'} + + '@smithy/is-array-buffer@4.2.0': + resolution: {integrity: sha512-DZZZBvC7sjcYh4MazJSGiWMI2L7E0oCiRHREDzIxi/M2LY79/21iXt6aPLHge82wi5LsuRF5A06Ds3+0mlh6CQ==} + engines: {node: '>=18.0.0'} + + '@smithy/middleware-content-length@4.2.7': + resolution: {integrity: sha512-GszfBfCcvt7kIbJ41LuNa5f0wvQCHhnGx/aDaZJCCT05Ld6x6U2s0xsc/0mBFONBZjQJp2U/0uSJ178OXOwbhg==} + engines: {node: '>=18.0.0'} + + '@smithy/middleware-endpoint@4.4.1': + resolution: {integrity: sha512-gpLspUAoe6f1M6H0u4cVuFzxZBrsGZmjx2O9SigurTx4PbntYa4AJ+o0G0oGm1L2oSX6oBhcGHwrfJHup2JnJg==} + engines: {node: '>=18.0.0'} + + '@smithy/middleware-retry@4.4.17': + resolution: {integrity: sha512-MqbXK6Y9uq17h+4r0ogu/sBT6V/rdV+5NvYL7ZV444BKfQygYe8wAhDrVXagVebN6w2RE0Fm245l69mOsPGZzg==} + engines: {node: '>=18.0.0'} + + '@smithy/middleware-serde@4.2.8': + resolution: {integrity: sha512-8rDGYen5m5+NV9eHv9ry0sqm2gI6W7mc1VSFMtn6Igo25S507/HaOX9LTHAS2/J32VXD0xSzrY0H5FJtOMS4/w==} + engines: {node: '>=18.0.0'} + + '@smithy/middleware-stack@4.2.7': + resolution: {integrity: sha512-bsOT0rJ+HHlZd9crHoS37mt8qRRN/h9jRve1SXUhVbkRzu0QaNYZp1i1jha4n098tsvROjcwfLlfvcFuJSXEsw==} + engines: {node: '>=18.0.0'} + + '@smithy/node-config-provider@4.3.7': + resolution: {integrity: sha512-7r58wq8sdOcrwWe+klL9y3bc4GW1gnlfnFOuL7CXa7UzfhzhxKuzNdtqgzmTV+53lEp9NXh5hY/S4UgjLOzPfw==} + engines: {node: '>=18.0.0'} + + '@smithy/node-http-handler@4.4.7': + resolution: {integrity: sha512-NELpdmBOO6EpZtWgQiHjoShs1kmweaiNuETUpuup+cmm/xJYjT4eUjfhrXRP4jCOaAsS3c3yPsP3B+K+/fyPCQ==} + engines: {node: '>=18.0.0'} + + '@smithy/property-provider@4.2.7': + resolution: {integrity: sha512-jmNYKe9MGGPoSl/D7JDDs1C8b3dC8f/w78LbaVfoTtWy4xAd5dfjaFG9c9PWPihY4ggMQNQSMtzU77CNgAJwmA==} + engines: {node: '>=18.0.0'} + + '@smithy/protocol-http@5.3.7': + resolution: {integrity: sha512-1r07pb994I20dD/c2seaZhoCuNYm0rWrvBxhCQ70brNh11M5Ml2ew6qJVo0lclB3jMIXirD4s2XRXRe7QEi0xA==} + engines: {node: '>=18.0.0'} + + '@smithy/querystring-builder@4.2.7': + resolution: {integrity: sha512-eKONSywHZxK4tBxe2lXEysh8wbBdvDWiA+RIuaxZSgCMmA0zMgoDpGLJhnyj+c0leOQprVnXOmcB4m+W9Rw7sg==} + engines: {node: '>=18.0.0'} + + '@smithy/querystring-parser@4.2.7': + resolution: {integrity: sha512-3X5ZvzUHmlSTHAXFlswrS6EGt8fMSIxX/c3Rm1Pni3+wYWB6cjGocmRIoqcQF9nU5OgGmL0u7l9m44tSUpfj9w==} + engines: {node: '>=18.0.0'} + + '@smithy/service-error-classification@4.2.7': + resolution: {integrity: sha512-YB7oCbukqEb2Dlh3340/8g8vNGbs/QsNNRms+gv3N2AtZz9/1vSBx6/6tpwQpZMEJFs7Uq8h4mmOn48ZZ72MkA==} + engines: {node: '>=18.0.0'} + + '@smithy/shared-ini-file-loader@4.4.2': + resolution: {integrity: sha512-M7iUUff/KwfNunmrgtqBfvZSzh3bmFgv/j/t1Y1dQ+8dNo34br1cqVEqy6v0mYEgi0DkGO7Xig0AnuOaEGVlcg==} + engines: {node: '>=18.0.0'} + + '@smithy/signature-v4@5.3.7': + resolution: {integrity: sha512-9oNUlqBlFZFOSdxgImA6X5GFuzE7V2H7VG/7E70cdLhidFbdtvxxt81EHgykGK5vq5D3FafH//X+Oy31j3CKOg==} + engines: {node: '>=18.0.0'} + + '@smithy/smithy-client@4.10.2': + resolution: {integrity: sha512-D5z79xQWpgrGpAHb054Fn2CCTQZpog7JELbVQ6XAvXs5MNKWf28U9gzSBlJkOyMl9LA1TZEjRtwvGXfP0Sl90g==} + engines: {node: '>=18.0.0'} + + '@smithy/types@4.11.0': + resolution: {integrity: sha512-mlrmL0DRDVe3mNrjTcVcZEgkFmufITfUAPBEA+AHYiIeYyJebso/He1qLbP3PssRe22KUzLRpQSdBPbXdgZ2VA==} + engines: {node: '>=18.0.0'} + + '@smithy/url-parser@4.2.7': + resolution: {integrity: sha512-/RLtVsRV4uY3qPWhBDsjwahAtt3x2IsMGnP5W1b2VZIe+qgCqkLxI1UOHDZp1Q1QSOrdOR32MF3Ph2JfWT1VHg==} + engines: {node: '>=18.0.0'} + + '@smithy/util-base64@4.3.0': + resolution: {integrity: sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ==} + engines: {node: '>=18.0.0'} + + '@smithy/util-body-length-browser@4.2.0': + resolution: {integrity: sha512-Fkoh/I76szMKJnBXWPdFkQJl2r9SjPt3cMzLdOB6eJ4Pnpas8hVoWPYemX/peO0yrrvldgCUVJqOAjUrOLjbxg==} + engines: {node: '>=18.0.0'} + + '@smithy/util-body-length-node@4.2.1': + resolution: {integrity: sha512-h53dz/pISVrVrfxV1iqXlx5pRg3V2YWFcSQyPyXZRrZoZj4R4DeWRDo1a7dd3CPTcFi3kE+98tuNyD2axyZReA==} + engines: {node: '>=18.0.0'} + + '@smithy/util-buffer-from@2.2.0': + resolution: {integrity: sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==} + engines: {node: '>=14.0.0'} + + '@smithy/util-buffer-from@4.2.0': + resolution: {integrity: sha512-kAY9hTKulTNevM2nlRtxAG2FQ3B2OR6QIrPY3zE5LqJy1oxzmgBGsHLWTcNhWXKchgA0WHW+mZkQrng/pgcCew==} + engines: {node: '>=18.0.0'} + + '@smithy/util-config-provider@4.2.0': + resolution: {integrity: sha512-YEjpl6XJ36FTKmD+kRJJWYvrHeUvm5ykaUS5xK+6oXffQPHeEM4/nXlZPe+Wu0lsgRUcNZiliYNh/y7q9c2y6Q==} + engines: {node: '>=18.0.0'} + + '@smithy/util-defaults-mode-browser@4.3.16': + resolution: {integrity: sha512-/eiSP3mzY3TsvUOYMeL4EqUX6fgUOj2eUOU4rMMgVbq67TiRLyxT7Xsjxq0bW3OwuzK009qOwF0L2OgJqperAQ==} + engines: {node: '>=18.0.0'} + + '@smithy/util-defaults-mode-node@4.2.19': + resolution: {integrity: sha512-3a4+4mhf6VycEJyHIQLypRbiwG6aJvbQAeRAVXydMmfweEPnLLabRbdyo/Pjw8Rew9vjsh5WCdhmDaHkQnhhhA==} + engines: {node: '>=18.0.0'} + + '@smithy/util-endpoints@3.2.7': + resolution: {integrity: sha512-s4ILhyAvVqhMDYREeTS68R43B1V5aenV5q/V1QpRQJkCXib5BPRo4s7uNdzGtIKxaPHCfU/8YkvPAEvTpxgspg==} + engines: {node: '>=18.0.0'} + + '@smithy/util-hex-encoding@4.2.0': + resolution: {integrity: sha512-CCQBwJIvXMLKxVbO88IukazJD9a4kQ9ZN7/UMGBjBcJYvatpWk+9g870El4cB8/EJxfe+k+y0GmR9CAzkF+Nbw==} + engines: {node: '>=18.0.0'} + + '@smithy/util-middleware@4.2.7': + resolution: {integrity: sha512-i1IkpbOae6NvIKsEeLLM9/2q4X+M90KV3oCFgWQI4q0Qz+yUZvsr+gZPdAEAtFhWQhAHpTsJO8DRJPuwVyln+w==} + engines: {node: '>=18.0.0'} + + '@smithy/util-retry@4.2.7': + resolution: {integrity: sha512-SvDdsQyF5CIASa4EYVT02LukPHVzAgUA4kMAuZ97QJc2BpAqZfA4PINB8/KOoCXEw9tsuv/jQjMeaHFvxdLNGg==} + engines: {node: '>=18.0.0'} + + '@smithy/util-stream@4.5.8': + resolution: {integrity: sha512-ZnnBhTapjM0YPGUSmOs0Mcg/Gg87k503qG4zU2v/+Js2Gu+daKOJMeqcQns8ajepY8tgzzfYxl6kQyZKml6O2w==} + engines: {node: '>=18.0.0'} + + '@smithy/util-uri-escape@4.2.0': + resolution: {integrity: sha512-igZpCKV9+E/Mzrpq6YacdTQ0qTiLm85gD6N/IrmyDvQFA4UnU3d5g3m8tMT/6zG/vVkWSU+VxeUyGonL62DuxA==} + engines: {node: '>=18.0.0'} + + '@smithy/util-utf8@2.3.0': + resolution: {integrity: sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==} + engines: {node: '>=14.0.0'} + + '@smithy/util-utf8@4.2.0': + resolution: {integrity: sha512-zBPfuzoI8xyBtR2P6WQj63Rz8i3AmfAaJLuNG8dWsfvPe8lO4aCPYLn879mEgHndZH1zQ2oXmG8O1GGzzaoZiw==} + engines: {node: '>=18.0.0'} + + '@smithy/uuid@1.1.0': + resolution: {integrity: sha512-4aUIteuyxtBUhVdiQqcDhKFitwfd9hqoSDYY2KRXiWtgoWJ9Bmise+KfEPDiVHWeJepvF8xJO9/9+WDIciMFFw==} + engines: {node: '>=18.0.0'} + '@so-ric/colorspace@1.1.6': resolution: {integrity: sha512-/KiKkpHNOBgkFJwu9sh48LkHSMYGyuTcSFK/qMBdnOAlrRJzRSXAOFB5qwzaVQuDl8wAvHVMkaASQDReTahxuw==} @@ -1952,6 +2259,9 @@ packages: '@types/node@22.19.1': resolution: {integrity: sha512-LCCV0HdSZZZb34qifBsyWlUmok6W7ouER+oQIGBScS8EsZsQbrtFTUrDX4hOl+CS6p7cnNC4td+qrSVGSCTUfQ==} + '@types/nodemailer@7.0.4': + resolution: {integrity: sha512-ee8fxWqOchH+Hv6MDDNNy028kwvVnLplrStm4Zf/3uHWw5zzo8FoYYeffpJtGs2wWysEumMH0ZIdMGMY1eMAow==} + '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -2233,6 +2543,9 @@ packages: boolbase@1.0.0: resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + bowser@2.13.1: + resolution: {integrity: sha512-OHawaAbjwx6rqICCKgSG0SAnT05bzd7ppyKLVUITZpANBaaMFBAsaNkto3LoQ31tyFP5kNujE8Cdx85G9VzOkw==} + brace-expansion@2.0.2: resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} @@ -2805,6 +3118,10 @@ packages: fast-uri@3.1.0: resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} + fast-xml-parser@5.2.5: + resolution: {integrity: sha512-pfX9uG9Ki0yekDHx2SiuRIyFdyAr1kMIMitPvb0YBo8SUfKvia7w7FIyd/l6av85pFYRhZscS75MwMnbvY+hcQ==} + hasBin: true + fastq@1.19.1: resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} @@ -3561,6 +3878,10 @@ packages: resolution: {integrity: sha512-LN4fydt9TqhZhThkZIVQnF9cwjU3qmUH9h78Mx/K7d3VvfRqqwthLwJEUOEL0QPZ0XQmNN7be5Ggit5+4dq3Bw==} engines: {node: '>=0.12.0'} + nodemailer@7.0.12: + resolution: {integrity: sha512-H+rnK5bX2Pi/6ms3sN4/jRQvYSMltV6vqup/0SFOrxYYY/qoNvhXPlYq3e+Pm9RFJRwrMGbMIwi81M4dxpomhA==} + engines: {node: '>=6.0.0'} + nopt@8.1.0: resolution: {integrity: sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==} engines: {node: ^18.17.0 || >=20.5.0} @@ -4108,6 +4429,9 @@ packages: strip-literal@3.1.0: resolution: {integrity: sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==} + strnum@2.1.2: + resolution: {integrity: sha512-l63NF9y/cLROq/yqKXSLtcMeeyOfnSQlfMSlzFt/K73oIaD8DGaQWd7Z34X9GPiKqP5rbSh84Hl4bOlLcjiSrQ==} + strtok3@10.3.4: resolution: {integrity: sha512-KIy5nylvC5le1OdaaoCJ07L+8iQzJHGH6pWDuzS+d07Cu7n1MZ2x26P8ZKIWfbK02+XIL8Mp4RkWeqdUCrDMfg==} engines: {node: '>=18'} @@ -4691,6 +5015,404 @@ snapshots: '@asamuzakjp/nwsapi@2.3.9': {} + '@aws-crypto/sha256-browser@5.2.0': + dependencies: + '@aws-crypto/sha256-js': 5.2.0 + '@aws-crypto/supports-web-crypto': 5.2.0 + '@aws-crypto/util': 5.2.0 + '@aws-sdk/types': 3.957.0 + '@aws-sdk/util-locate-window': 3.957.0 + '@smithy/util-utf8': 2.3.0 + tslib: 2.8.1 + + '@aws-crypto/sha256-js@5.2.0': + dependencies: + '@aws-crypto/util': 5.2.0 + '@aws-sdk/types': 3.957.0 + tslib: 2.8.1 + + '@aws-crypto/supports-web-crypto@5.2.0': + dependencies: + tslib: 2.8.1 + + '@aws-crypto/util@5.2.0': + dependencies: + '@aws-sdk/types': 3.957.0 + '@smithy/util-utf8': 2.3.0 + tslib: 2.8.1 + + '@aws-sdk/client-sesv2@3.962.0': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/core': 3.957.0 + '@aws-sdk/credential-provider-node': 3.962.0 + '@aws-sdk/middleware-host-header': 3.957.0 + '@aws-sdk/middleware-logger': 3.957.0 + '@aws-sdk/middleware-recursion-detection': 3.957.0 + '@aws-sdk/middleware-user-agent': 3.957.0 + '@aws-sdk/region-config-resolver': 3.957.0 + '@aws-sdk/signature-v4-multi-region': 3.957.0 + '@aws-sdk/types': 3.957.0 + '@aws-sdk/util-endpoints': 3.957.0 + '@aws-sdk/util-user-agent-browser': 3.957.0 + '@aws-sdk/util-user-agent-node': 3.957.0 + '@smithy/config-resolver': 4.4.5 + '@smithy/core': 3.20.0 + '@smithy/fetch-http-handler': 5.3.8 + '@smithy/hash-node': 4.2.7 + '@smithy/invalid-dependency': 4.2.7 + '@smithy/middleware-content-length': 4.2.7 + '@smithy/middleware-endpoint': 4.4.1 + '@smithy/middleware-retry': 4.4.17 + '@smithy/middleware-serde': 4.2.8 + '@smithy/middleware-stack': 4.2.7 + '@smithy/node-config-provider': 4.3.7 + '@smithy/node-http-handler': 4.4.7 + '@smithy/protocol-http': 5.3.7 + '@smithy/smithy-client': 4.10.2 + '@smithy/types': 4.11.0 + '@smithy/url-parser': 4.2.7 + '@smithy/util-base64': 4.3.0 + '@smithy/util-body-length-browser': 4.2.0 + '@smithy/util-body-length-node': 4.2.1 + '@smithy/util-defaults-mode-browser': 4.3.16 + '@smithy/util-defaults-mode-node': 4.2.19 + '@smithy/util-endpoints': 3.2.7 + '@smithy/util-middleware': 4.2.7 + '@smithy/util-retry': 4.2.7 + '@smithy/util-utf8': 4.2.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/client-sso@3.958.0': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/core': 3.957.0 + '@aws-sdk/middleware-host-header': 3.957.0 + '@aws-sdk/middleware-logger': 3.957.0 + '@aws-sdk/middleware-recursion-detection': 3.957.0 + '@aws-sdk/middleware-user-agent': 3.957.0 + '@aws-sdk/region-config-resolver': 3.957.0 + '@aws-sdk/types': 3.957.0 + '@aws-sdk/util-endpoints': 3.957.0 + '@aws-sdk/util-user-agent-browser': 3.957.0 + '@aws-sdk/util-user-agent-node': 3.957.0 + '@smithy/config-resolver': 4.4.5 + '@smithy/core': 3.20.0 + '@smithy/fetch-http-handler': 5.3.8 + '@smithy/hash-node': 4.2.7 + '@smithy/invalid-dependency': 4.2.7 + '@smithy/middleware-content-length': 4.2.7 + '@smithy/middleware-endpoint': 4.4.1 + '@smithy/middleware-retry': 4.4.17 + '@smithy/middleware-serde': 4.2.8 + '@smithy/middleware-stack': 4.2.7 + '@smithy/node-config-provider': 4.3.7 + '@smithy/node-http-handler': 4.4.7 + '@smithy/protocol-http': 5.3.7 + '@smithy/smithy-client': 4.10.2 + '@smithy/types': 4.11.0 + '@smithy/url-parser': 4.2.7 + '@smithy/util-base64': 4.3.0 + '@smithy/util-body-length-browser': 4.2.0 + '@smithy/util-body-length-node': 4.2.1 + '@smithy/util-defaults-mode-browser': 4.3.16 + '@smithy/util-defaults-mode-node': 4.2.19 + '@smithy/util-endpoints': 3.2.7 + '@smithy/util-middleware': 4.2.7 + '@smithy/util-retry': 4.2.7 + '@smithy/util-utf8': 4.2.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/core@3.957.0': + dependencies: + '@aws-sdk/types': 3.957.0 + '@aws-sdk/xml-builder': 3.957.0 + '@smithy/core': 3.20.0 + '@smithy/node-config-provider': 4.3.7 + '@smithy/property-provider': 4.2.7 + '@smithy/protocol-http': 5.3.7 + '@smithy/signature-v4': 5.3.7 + '@smithy/smithy-client': 4.10.2 + '@smithy/types': 4.11.0 + '@smithy/util-base64': 4.3.0 + '@smithy/util-middleware': 4.2.7 + '@smithy/util-utf8': 4.2.0 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-env@3.957.0': + dependencies: + '@aws-sdk/core': 3.957.0 + '@aws-sdk/types': 3.957.0 + '@smithy/property-provider': 4.2.7 + '@smithy/types': 4.11.0 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-http@3.957.0': + dependencies: + '@aws-sdk/core': 3.957.0 + '@aws-sdk/types': 3.957.0 + '@smithy/fetch-http-handler': 5.3.8 + '@smithy/node-http-handler': 4.4.7 + '@smithy/property-provider': 4.2.7 + '@smithy/protocol-http': 5.3.7 + '@smithy/smithy-client': 4.10.2 + '@smithy/types': 4.11.0 + '@smithy/util-stream': 4.5.8 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-ini@3.962.0': + dependencies: + '@aws-sdk/core': 3.957.0 + '@aws-sdk/credential-provider-env': 3.957.0 + '@aws-sdk/credential-provider-http': 3.957.0 + '@aws-sdk/credential-provider-login': 3.962.0 + '@aws-sdk/credential-provider-process': 3.957.0 + '@aws-sdk/credential-provider-sso': 3.958.0 + '@aws-sdk/credential-provider-web-identity': 3.958.0 + '@aws-sdk/nested-clients': 3.958.0 + '@aws-sdk/types': 3.957.0 + '@smithy/credential-provider-imds': 4.2.7 + '@smithy/property-provider': 4.2.7 + '@smithy/shared-ini-file-loader': 4.4.2 + '@smithy/types': 4.11.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/credential-provider-login@3.962.0': + dependencies: + '@aws-sdk/core': 3.957.0 + '@aws-sdk/nested-clients': 3.958.0 + '@aws-sdk/types': 3.957.0 + '@smithy/property-provider': 4.2.7 + '@smithy/protocol-http': 5.3.7 + '@smithy/shared-ini-file-loader': 4.4.2 + '@smithy/types': 4.11.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/credential-provider-node@3.962.0': + dependencies: + '@aws-sdk/credential-provider-env': 3.957.0 + '@aws-sdk/credential-provider-http': 3.957.0 + '@aws-sdk/credential-provider-ini': 3.962.0 + '@aws-sdk/credential-provider-process': 3.957.0 + '@aws-sdk/credential-provider-sso': 3.958.0 + '@aws-sdk/credential-provider-web-identity': 3.958.0 + '@aws-sdk/types': 3.957.0 + '@smithy/credential-provider-imds': 4.2.7 + '@smithy/property-provider': 4.2.7 + '@smithy/shared-ini-file-loader': 4.4.2 + '@smithy/types': 4.11.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/credential-provider-process@3.957.0': + dependencies: + '@aws-sdk/core': 3.957.0 + '@aws-sdk/types': 3.957.0 + '@smithy/property-provider': 4.2.7 + '@smithy/shared-ini-file-loader': 4.4.2 + '@smithy/types': 4.11.0 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-sso@3.958.0': + dependencies: + '@aws-sdk/client-sso': 3.958.0 + '@aws-sdk/core': 3.957.0 + '@aws-sdk/token-providers': 3.958.0 + '@aws-sdk/types': 3.957.0 + '@smithy/property-provider': 4.2.7 + '@smithy/shared-ini-file-loader': 4.4.2 + '@smithy/types': 4.11.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/credential-provider-web-identity@3.958.0': + dependencies: + '@aws-sdk/core': 3.957.0 + '@aws-sdk/nested-clients': 3.958.0 + '@aws-sdk/types': 3.957.0 + '@smithy/property-provider': 4.2.7 + '@smithy/shared-ini-file-loader': 4.4.2 + '@smithy/types': 4.11.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/middleware-host-header@3.957.0': + dependencies: + '@aws-sdk/types': 3.957.0 + '@smithy/protocol-http': 5.3.7 + '@smithy/types': 4.11.0 + tslib: 2.8.1 + + '@aws-sdk/middleware-logger@3.957.0': + dependencies: + '@aws-sdk/types': 3.957.0 + '@smithy/types': 4.11.0 + tslib: 2.8.1 + + '@aws-sdk/middleware-recursion-detection@3.957.0': + dependencies: + '@aws-sdk/types': 3.957.0 + '@aws/lambda-invoke-store': 0.2.2 + '@smithy/protocol-http': 5.3.7 + '@smithy/types': 4.11.0 + tslib: 2.8.1 + + '@aws-sdk/middleware-sdk-s3@3.957.0': + dependencies: + '@aws-sdk/core': 3.957.0 + '@aws-sdk/types': 3.957.0 + '@aws-sdk/util-arn-parser': 3.957.0 + '@smithy/core': 3.20.0 + '@smithy/node-config-provider': 4.3.7 + '@smithy/protocol-http': 5.3.7 + '@smithy/signature-v4': 5.3.7 + '@smithy/smithy-client': 4.10.2 + '@smithy/types': 4.11.0 + '@smithy/util-config-provider': 4.2.0 + '@smithy/util-middleware': 4.2.7 + '@smithy/util-stream': 4.5.8 + '@smithy/util-utf8': 4.2.0 + tslib: 2.8.1 + + '@aws-sdk/middleware-user-agent@3.957.0': + dependencies: + '@aws-sdk/core': 3.957.0 + '@aws-sdk/types': 3.957.0 + '@aws-sdk/util-endpoints': 3.957.0 + '@smithy/core': 3.20.0 + '@smithy/protocol-http': 5.3.7 + '@smithy/types': 4.11.0 + tslib: 2.8.1 + + '@aws-sdk/nested-clients@3.958.0': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/core': 3.957.0 + '@aws-sdk/middleware-host-header': 3.957.0 + '@aws-sdk/middleware-logger': 3.957.0 + '@aws-sdk/middleware-recursion-detection': 3.957.0 + '@aws-sdk/middleware-user-agent': 3.957.0 + '@aws-sdk/region-config-resolver': 3.957.0 + '@aws-sdk/types': 3.957.0 + '@aws-sdk/util-endpoints': 3.957.0 + '@aws-sdk/util-user-agent-browser': 3.957.0 + '@aws-sdk/util-user-agent-node': 3.957.0 + '@smithy/config-resolver': 4.4.5 + '@smithy/core': 3.20.0 + '@smithy/fetch-http-handler': 5.3.8 + '@smithy/hash-node': 4.2.7 + '@smithy/invalid-dependency': 4.2.7 + '@smithy/middleware-content-length': 4.2.7 + '@smithy/middleware-endpoint': 4.4.1 + '@smithy/middleware-retry': 4.4.17 + '@smithy/middleware-serde': 4.2.8 + '@smithy/middleware-stack': 4.2.7 + '@smithy/node-config-provider': 4.3.7 + '@smithy/node-http-handler': 4.4.7 + '@smithy/protocol-http': 5.3.7 + '@smithy/smithy-client': 4.10.2 + '@smithy/types': 4.11.0 + '@smithy/url-parser': 4.2.7 + '@smithy/util-base64': 4.3.0 + '@smithy/util-body-length-browser': 4.2.0 + '@smithy/util-body-length-node': 4.2.1 + '@smithy/util-defaults-mode-browser': 4.3.16 + '@smithy/util-defaults-mode-node': 4.2.19 + '@smithy/util-endpoints': 3.2.7 + '@smithy/util-middleware': 4.2.7 + '@smithy/util-retry': 4.2.7 + '@smithy/util-utf8': 4.2.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/region-config-resolver@3.957.0': + dependencies: + '@aws-sdk/types': 3.957.0 + '@smithy/config-resolver': 4.4.5 + '@smithy/node-config-provider': 4.3.7 + '@smithy/types': 4.11.0 + tslib: 2.8.1 + + '@aws-sdk/signature-v4-multi-region@3.957.0': + dependencies: + '@aws-sdk/middleware-sdk-s3': 3.957.0 + '@aws-sdk/types': 3.957.0 + '@smithy/protocol-http': 5.3.7 + '@smithy/signature-v4': 5.3.7 + '@smithy/types': 4.11.0 + tslib: 2.8.1 + + '@aws-sdk/token-providers@3.958.0': + dependencies: + '@aws-sdk/core': 3.957.0 + '@aws-sdk/nested-clients': 3.958.0 + '@aws-sdk/types': 3.957.0 + '@smithy/property-provider': 4.2.7 + '@smithy/shared-ini-file-loader': 4.4.2 + '@smithy/types': 4.11.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/types@3.957.0': + dependencies: + '@smithy/types': 4.11.0 + tslib: 2.8.1 + + '@aws-sdk/util-arn-parser@3.957.0': + dependencies: + tslib: 2.8.1 + + '@aws-sdk/util-endpoints@3.957.0': + dependencies: + '@aws-sdk/types': 3.957.0 + '@smithy/types': 4.11.0 + '@smithy/url-parser': 4.2.7 + '@smithy/util-endpoints': 3.2.7 + tslib: 2.8.1 + + '@aws-sdk/util-locate-window@3.957.0': + dependencies: + tslib: 2.8.1 + + '@aws-sdk/util-user-agent-browser@3.957.0': + dependencies: + '@aws-sdk/types': 3.957.0 + '@smithy/types': 4.11.0 + bowser: 2.13.1 + tslib: 2.8.1 + + '@aws-sdk/util-user-agent-node@3.957.0': + dependencies: + '@aws-sdk/middleware-user-agent': 3.957.0 + '@aws-sdk/types': 3.957.0 + '@smithy/node-config-provider': 4.3.7 + '@smithy/types': 4.11.0 + tslib: 2.8.1 + + '@aws-sdk/xml-builder@3.957.0': + dependencies: + '@smithy/types': 4.11.0 + fast-xml-parser: 5.2.5 + tslib: 2.8.1 + + '@aws/lambda-invoke-store@0.2.2': {} + '@babel/code-frame@7.26.2': dependencies: '@babel/helper-validator-identifier': 7.28.5 @@ -6118,6 +6840,280 @@ snapshots: '@sinclair/typebox@0.34.41': {} + '@smithy/abort-controller@4.2.7': + dependencies: + '@smithy/types': 4.11.0 + tslib: 2.8.1 + + '@smithy/config-resolver@4.4.5': + dependencies: + '@smithy/node-config-provider': 4.3.7 + '@smithy/types': 4.11.0 + '@smithy/util-config-provider': 4.2.0 + '@smithy/util-endpoints': 3.2.7 + '@smithy/util-middleware': 4.2.7 + tslib: 2.8.1 + + '@smithy/core@3.20.0': + dependencies: + '@smithy/middleware-serde': 4.2.8 + '@smithy/protocol-http': 5.3.7 + '@smithy/types': 4.11.0 + '@smithy/util-base64': 4.3.0 + '@smithy/util-body-length-browser': 4.2.0 + '@smithy/util-middleware': 4.2.7 + '@smithy/util-stream': 4.5.8 + '@smithy/util-utf8': 4.2.0 + '@smithy/uuid': 1.1.0 + tslib: 2.8.1 + + '@smithy/credential-provider-imds@4.2.7': + dependencies: + '@smithy/node-config-provider': 4.3.7 + '@smithy/property-provider': 4.2.7 + '@smithy/types': 4.11.0 + '@smithy/url-parser': 4.2.7 + tslib: 2.8.1 + + '@smithy/fetch-http-handler@5.3.8': + dependencies: + '@smithy/protocol-http': 5.3.7 + '@smithy/querystring-builder': 4.2.7 + '@smithy/types': 4.11.0 + '@smithy/util-base64': 4.3.0 + tslib: 2.8.1 + + '@smithy/hash-node@4.2.7': + dependencies: + '@smithy/types': 4.11.0 + '@smithy/util-buffer-from': 4.2.0 + '@smithy/util-utf8': 4.2.0 + tslib: 2.8.1 + + '@smithy/invalid-dependency@4.2.7': + dependencies: + '@smithy/types': 4.11.0 + tslib: 2.8.1 + + '@smithy/is-array-buffer@2.2.0': + dependencies: + tslib: 2.8.1 + + '@smithy/is-array-buffer@4.2.0': + dependencies: + tslib: 2.8.1 + + '@smithy/middleware-content-length@4.2.7': + dependencies: + '@smithy/protocol-http': 5.3.7 + '@smithy/types': 4.11.0 + tslib: 2.8.1 + + '@smithy/middleware-endpoint@4.4.1': + dependencies: + '@smithy/core': 3.20.0 + '@smithy/middleware-serde': 4.2.8 + '@smithy/node-config-provider': 4.3.7 + '@smithy/shared-ini-file-loader': 4.4.2 + '@smithy/types': 4.11.0 + '@smithy/url-parser': 4.2.7 + '@smithy/util-middleware': 4.2.7 + tslib: 2.8.1 + + '@smithy/middleware-retry@4.4.17': + dependencies: + '@smithy/node-config-provider': 4.3.7 + '@smithy/protocol-http': 5.3.7 + '@smithy/service-error-classification': 4.2.7 + '@smithy/smithy-client': 4.10.2 + '@smithy/types': 4.11.0 + '@smithy/util-middleware': 4.2.7 + '@smithy/util-retry': 4.2.7 + '@smithy/uuid': 1.1.0 + tslib: 2.8.1 + + '@smithy/middleware-serde@4.2.8': + dependencies: + '@smithy/protocol-http': 5.3.7 + '@smithy/types': 4.11.0 + tslib: 2.8.1 + + '@smithy/middleware-stack@4.2.7': + dependencies: + '@smithy/types': 4.11.0 + tslib: 2.8.1 + + '@smithy/node-config-provider@4.3.7': + dependencies: + '@smithy/property-provider': 4.2.7 + '@smithy/shared-ini-file-loader': 4.4.2 + '@smithy/types': 4.11.0 + tslib: 2.8.1 + + '@smithy/node-http-handler@4.4.7': + dependencies: + '@smithy/abort-controller': 4.2.7 + '@smithy/protocol-http': 5.3.7 + '@smithy/querystring-builder': 4.2.7 + '@smithy/types': 4.11.0 + tslib: 2.8.1 + + '@smithy/property-provider@4.2.7': + dependencies: + '@smithy/types': 4.11.0 + tslib: 2.8.1 + + '@smithy/protocol-http@5.3.7': + dependencies: + '@smithy/types': 4.11.0 + tslib: 2.8.1 + + '@smithy/querystring-builder@4.2.7': + dependencies: + '@smithy/types': 4.11.0 + '@smithy/util-uri-escape': 4.2.0 + tslib: 2.8.1 + + '@smithy/querystring-parser@4.2.7': + dependencies: + '@smithy/types': 4.11.0 + tslib: 2.8.1 + + '@smithy/service-error-classification@4.2.7': + dependencies: + '@smithy/types': 4.11.0 + + '@smithy/shared-ini-file-loader@4.4.2': + dependencies: + '@smithy/types': 4.11.0 + tslib: 2.8.1 + + '@smithy/signature-v4@5.3.7': + dependencies: + '@smithy/is-array-buffer': 4.2.0 + '@smithy/protocol-http': 5.3.7 + '@smithy/types': 4.11.0 + '@smithy/util-hex-encoding': 4.2.0 + '@smithy/util-middleware': 4.2.7 + '@smithy/util-uri-escape': 4.2.0 + '@smithy/util-utf8': 4.2.0 + tslib: 2.8.1 + + '@smithy/smithy-client@4.10.2': + dependencies: + '@smithy/core': 3.20.0 + '@smithy/middleware-endpoint': 4.4.1 + '@smithy/middleware-stack': 4.2.7 + '@smithy/protocol-http': 5.3.7 + '@smithy/types': 4.11.0 + '@smithy/util-stream': 4.5.8 + tslib: 2.8.1 + + '@smithy/types@4.11.0': + dependencies: + tslib: 2.8.1 + + '@smithy/url-parser@4.2.7': + dependencies: + '@smithy/querystring-parser': 4.2.7 + '@smithy/types': 4.11.0 + tslib: 2.8.1 + + '@smithy/util-base64@4.3.0': + dependencies: + '@smithy/util-buffer-from': 4.2.0 + '@smithy/util-utf8': 4.2.0 + tslib: 2.8.1 + + '@smithy/util-body-length-browser@4.2.0': + dependencies: + tslib: 2.8.1 + + '@smithy/util-body-length-node@4.2.1': + dependencies: + tslib: 2.8.1 + + '@smithy/util-buffer-from@2.2.0': + dependencies: + '@smithy/is-array-buffer': 2.2.0 + tslib: 2.8.1 + + '@smithy/util-buffer-from@4.2.0': + dependencies: + '@smithy/is-array-buffer': 4.2.0 + tslib: 2.8.1 + + '@smithy/util-config-provider@4.2.0': + dependencies: + tslib: 2.8.1 + + '@smithy/util-defaults-mode-browser@4.3.16': + dependencies: + '@smithy/property-provider': 4.2.7 + '@smithy/smithy-client': 4.10.2 + '@smithy/types': 4.11.0 + tslib: 2.8.1 + + '@smithy/util-defaults-mode-node@4.2.19': + dependencies: + '@smithy/config-resolver': 4.4.5 + '@smithy/credential-provider-imds': 4.2.7 + '@smithy/node-config-provider': 4.3.7 + '@smithy/property-provider': 4.2.7 + '@smithy/smithy-client': 4.10.2 + '@smithy/types': 4.11.0 + tslib: 2.8.1 + + '@smithy/util-endpoints@3.2.7': + dependencies: + '@smithy/node-config-provider': 4.3.7 + '@smithy/types': 4.11.0 + tslib: 2.8.1 + + '@smithy/util-hex-encoding@4.2.0': + dependencies: + tslib: 2.8.1 + + '@smithy/util-middleware@4.2.7': + dependencies: + '@smithy/types': 4.11.0 + tslib: 2.8.1 + + '@smithy/util-retry@4.2.7': + dependencies: + '@smithy/service-error-classification': 4.2.7 + '@smithy/types': 4.11.0 + tslib: 2.8.1 + + '@smithy/util-stream@4.5.8': + dependencies: + '@smithy/fetch-http-handler': 5.3.8 + '@smithy/node-http-handler': 4.4.7 + '@smithy/types': 4.11.0 + '@smithy/util-base64': 4.3.0 + '@smithy/util-buffer-from': 4.2.0 + '@smithy/util-hex-encoding': 4.2.0 + '@smithy/util-utf8': 4.2.0 + tslib: 2.8.1 + + '@smithy/util-uri-escape@4.2.0': + dependencies: + tslib: 2.8.1 + + '@smithy/util-utf8@2.3.0': + dependencies: + '@smithy/util-buffer-from': 2.2.0 + tslib: 2.8.1 + + '@smithy/util-utf8@4.2.0': + dependencies: + '@smithy/util-buffer-from': 4.2.0 + tslib: 2.8.1 + + '@smithy/uuid@1.1.0': + dependencies: + tslib: 2.8.1 + '@so-ric/colorspace@1.1.6': dependencies: color: 5.0.3 @@ -6628,6 +7624,13 @@ snapshots: dependencies: undici-types: 6.21.0 + '@types/nodemailer@7.0.4': + dependencies: + '@aws-sdk/client-sesv2': 3.962.0 + '@types/node': 22.19.1 + transitivePeerDependencies: + - aws-crt + '@types/normalize-package-data@2.4.4': {} '@types/react-dom@19.2.3(@types/react@19.2.5)': @@ -6964,6 +7967,8 @@ snapshots: boolbase@1.0.0: {} + bowser@2.13.1: {} + brace-expansion@2.0.2: dependencies: balanced-match: 1.0.2 @@ -7565,6 +8570,10 @@ snapshots: fast-uri@3.1.0: {} + fast-xml-parser@5.2.5: + dependencies: + strnum: 2.1.2 + fastq@1.19.1: dependencies: reusify: 1.1.0 @@ -8281,6 +9290,8 @@ snapshots: node-stream-zip@1.15.0: {} + nodemailer@7.0.12: {} + nopt@8.1.0: dependencies: abbrev: 3.0.1 @@ -8933,6 +9944,8 @@ snapshots: dependencies: js-tokens: 9.0.1 + strnum@2.1.2: {} + strtok3@10.3.4: dependencies: '@tokenizer/token': 0.3.0 diff --git a/src/emails/verify.tsx b/src/emails/verify.tsx index 99934d9..6ba77bb 100644 --- a/src/emails/verify.tsx +++ b/src/emails/verify.tsx @@ -11,6 +11,7 @@ import { } from "@react-email/components"; interface VerifyEmailProps { + name: string; token: string; } @@ -19,8 +20,8 @@ const BASE_URL = ? "https://pecacm.com" : "http://localhost:3000"; -function VerifyEmail({ token }: VerifyEmailProps) { - const VERIFY_URL = `${BASE_URL}/api/verify-email/${token}`; +function VerifyEmail({ name, token }: VerifyEmailProps) { + const VERIFY_URL = `${BASE_URL}/api/auth/verify-email/${token}`; return ( @@ -62,7 +63,7 @@ function VerifyEmail({ token }: VerifyEmailProps) { as="h2" style={{ fontWeight: "500" }} > - Hello! + Hello {name}! You are receiving this email because you registered for PEC ACM. @@ -112,7 +113,8 @@ function VerifyEmail({ token }: VerifyEmailProps) { } VerifyEmail.PreviewProps = { - token: "qwertyuiopasdfghjklzxcvbnm1234567890", + name: "Eikichi Onizuka", + token: "b29eb4f0-9301-4390-bfec-9ab2fc4e91a6", } as VerifyEmailProps; export default VerifyEmail; diff --git a/src/lib/api/auth.ts b/src/lib/api/auth.ts index 94f86f2..23806ae 100644 --- a/src/lib/api/auth.ts +++ b/src/lib/api/auth.ts @@ -1,7 +1,13 @@ +import { render, toPlainText } from "@react-email/components"; import Elysia from "elysia"; +import nodemailer from "nodemailer"; import z from "zod"; +import VerifyEmail from "$emails/verify"; +import { env } from "$env/server"; import { API_URL } from "$lib/constants/api"; +import { BRANCH_NAMES } from "$lib/constants/details"; + import { isErrorResponse } from "./helpers"; import { APIUserSchema, UserSchema } from "./schemas"; @@ -96,18 +102,159 @@ On successful authentication, returns a JWT token for subsequent authenticated r }, }, ) - .post( + .get( "/verify-email/:token", - async ({ params }) => { + async ({ params, status }) => { const token = params.token; - return { token }; + const url = `${API_URL.V1.USER.VERIFY}?${new URLSearchParams({ token })}`; + + const res = await fetch(url, { method: "GET" }); + + if (!res.ok) { + const response = await res.json(); + + if (isErrorResponse(response)) { + console.log(response); + switch (response.code) { + case "Not Found": + return status(404, { + error: "Not Found", + message: + "The provided verification token was not found or has expired", + timestamp: new Date().toISOString(), + }); + case "Bad Request": + return status(400, { + error: "Bad Request", + message: + "The Email verification token is not of the expected type.", + timestamp: new Date().toISOString(), + }); + default: + return status(500, { + error: "Internal Server Error", + message: "An unexpected error occurred while handling request", + timestamp: new Date().toISOString(), + }); + } + } + } + + // TODO: It's more ideal to redirect the user to confirmation page, instead of showing a bland json response. + return { message: "Your Email was sucessfully verified." }; + }, + { + response: { + 200: z.object({ + message: z.literal("Your Email was sucessfully verified."), + }), + 400: "error", + 404: "error", + 500: "error", + }, + }, + ) + .post( + "/register", + async ({ body, status }) => { + const res = await fetch(API_URL.V1.USER.REGISTER, { + method: "POST", + body: JSON.stringify({ + name: body.name, + sid: body.sid, + branch: body.branch, + email: body.email, + password: body.password, + }), + headers: { + "Content-Type": "application/json", + }, + }); + + const response = await res.json(); + + if (isErrorResponse(response)) { + switch (response.code) { + case "Bad Request": + return status(400, { + error: "Bad Request", + message: response.message, + timestamp: new Date().toISOString(), + }); + default: + return status(500, { + error: "Internal Server Error", + message: "An unexpected error occurred while handling request", + timestamp: new Date().toISOString(), + }); + } + } + + const emailToken = response.emailToken; + + const transporter = nodemailer.createTransport({ + host: env.SMTP_HOST, + port: env.SMTP_PORT, + auth: { + user: env.SMTP_EMAIL, + pass: env.SMTP_PASS, + }, + }); + + const html = await render( + VerifyEmail({ name: body.name, token: emailToken }), + ); + const text = toPlainText(html); + + await transporter.sendMail({ + from: `PEC ACM <${env.SMTP_EMAIL}>`, + to: body.email, + subject: "New Account Verification", + text, + html, + }); + + return { + message: + "Account created! Please check your email to verify your account", + }; }, { + body: z + .object({ + name: z + .string() + .trim() + .min(1, "Name is required") + .max(100, "Name too long"), + email: z.email().endsWith("@pec.edu.in", { + error: "We only accept '@pec.edu.in' emails.", + }), + branch: z.enum(BRANCH_NAMES), + sid: z.int().min(10000000).max(99999999), + password: z + .string() + .regex( + /((?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[\W]).)/gm, + "The password needs atleast 1 lowercase character, 1 uppercase character, 1 number and 1 special character", + ) + .min(8) + .max(20, "You sure you can remember that?"), + confirmPassword: z.string().min(1, "Please confirm your password"), + }) + .refine(data => data.password === data.confirmPassword, { + error: "Password and confirm password are not same.", + path: ["confirmPassword"], + }), response: { 200: z.object({ - token: z.string(), + message: z.literal( + "Account created! Please check your email to verify your account", + ), }), + 400: "error", + 500: "error", }, }, ); diff --git a/src/lib/constants/details.ts b/src/lib/constants/details.ts new file mode 100644 index 0000000..9c34fc6 --- /dev/null +++ b/src/lib/constants/details.ts @@ -0,0 +1,16 @@ +// TODO: Rethink filename. + +export const BRANCH_NAMES = [ + "CSE", + "ECE", + "EE", + "CSEDS", + "AI", + "VLSI", + "MECH", + "CIVIL", + "AERO", + "AI", + "DESIGN", + "PROD/META", +] as const; diff --git a/src/lib/env/server.ts b/src/lib/env/server.ts index efa8afb..1625f8f 100644 --- a/src/lib/env/server.ts +++ b/src/lib/env/server.ts @@ -4,6 +4,13 @@ import { z } from "zod"; export const env = createEnv({ server: { BACKEND_BASE_URL: z.url(), + SMTP_HOST: z.string(), + SMTP_PORT: z + .string() + .transform(s => Number.parseInt(s, 10)) + .pipe(z.number()), + SMTP_EMAIL: z.email(), + SMTP_PASS: z.string(), }, runtimeEnv: process.env, emptyStringAsUndefined: true, diff --git a/src/routes/api.$.ts b/src/routes/api.$.ts index f96b507..cc6db80 100644 --- a/src/routes/api.$.ts +++ b/src/routes/api.$.ts @@ -12,6 +12,7 @@ const app = new Elysia({ }) .use( openapi({ + path: "/docs", documentation: { info: { title: "PEC ACM Community Management & Events Platform API", diff --git a/tsconfig.json b/tsconfig.json index dc18fa2..8e98554 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -25,6 +25,7 @@ "$components/*": ["./src/components/*"], "$data/*": ["./src/data/*"], "$env/*": ["./src/lib/env/*"], + "$emails/*": ["./src/emails/*"], "$hooks/*": ["./src/hooks/*"], "$lib/*": ["./src/lib/*"] } From 83a225f54fde8ad2099bc5876a10896e29dddb1b Mon Sep 17 00:00:00 2001 From: KD Date: Tue, 6 Jan 2026 16:28:44 +0530 Subject: [PATCH 14/47] Updated Docs for user registration and verification handlers --- src/lib/api/auth.ts | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/lib/api/auth.ts b/src/lib/api/auth.ts index 23806ae..fa5fde6 100644 --- a/src/lib/api/auth.ts +++ b/src/lib/api/auth.ts @@ -153,6 +153,19 @@ On successful authentication, returns a JWT token for subsequent authenticated r 404: "error", 500: "error", }, + detail: { + summary: "Verify user email", + description: `Verifies a user's email address using a one-time verification token. + +The token is sent to the user's registered email address during account registration. + +**Response Codes:** +- **200**: Email successfully verified +- **400**: Invalid or malformed token +- **404**: Token not found or expired +- **500**: Server error`, + tags: ["Registration"], + }, }, ) .post( @@ -256,5 +269,18 @@ On successful authentication, returns a JWT token for subsequent authenticated r 400: "error", 500: "error", }, + detail: { + summary: "Register a new user", + description: `Creates a new user account and sends an email verification link. + +Only '@pec.edu.in' email addresses are accepted. +The user must verify their email before logging in. + +**Response Codes:** +- **200**: Account created and verification email sent +- **400**: Validation error or duplicate account +- **500**: Server error`, + tags: ["Registration"], + }, }, ); From 0ccffbd265ae425bf9d54d5a64cb7f93c2d46ee9 Mon Sep 17 00:00:00 2001 From: Keshav Dham Date: Tue, 6 Jan 2026 17:01:08 +0530 Subject: [PATCH 15/47] Change tags from 'Registration' to 'Authentication' --- src/lib/api/auth.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lib/api/auth.ts b/src/lib/api/auth.ts index fa5fde6..2bd4628 100644 --- a/src/lib/api/auth.ts +++ b/src/lib/api/auth.ts @@ -164,7 +164,7 @@ The token is sent to the user's registered email address during account registra - **400**: Invalid or malformed token - **404**: Token not found or expired - **500**: Server error`, - tags: ["Registration"], + tags: ["Authentication"], }, }, ) @@ -280,7 +280,7 @@ The user must verify their email before logging in. - **200**: Account created and verification email sent - **400**: Validation error or duplicate account - **500**: Server error`, - tags: ["Registration"], + tags: ["Authentication"], }, }, ); From 18b06da743925aba1a26ca10f27fddc55893edcf Mon Sep 17 00:00:00 2001 From: Savy Date: Wed, 28 Jan 2026 18:50:13 +0530 Subject: [PATCH 16/47] add `requireAuth` macro (#6) --- src/lib/api/macros.ts | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 src/lib/api/macros.ts diff --git a/src/lib/api/macros.ts b/src/lib/api/macros.ts new file mode 100644 index 0000000..2c0f7de --- /dev/null +++ b/src/lib/api/macros.ts @@ -0,0 +1,20 @@ +import { Elysia } from "elysia"; + +export const requireAuth = new Elysia().macro({ + requireAuth: { + resolve({ headers, status }) { + if (!headers.authorization) { + return status(403, { + message: "you need to be signed in to perform this operation.", + error: "Unauthorized", + }); + } + + const token = headers.authorization.split(" ")[1]; + + return { + token, + }; + }, + }, +}); From 25939c2b8bab31a74665ee36b895aa75781ecdd7 Mon Sep 17 00:00:00 2001 From: Vidhi Sethi Date: Wed, 28 Jan 2026 21:16:08 +0530 Subject: [PATCH 17/47] implemented assign role api --- src/lib/api/assign.ts | 83 +++++++++++++++++++++++++++++++++++++++++++ src/lib/api/index.ts | 1 + src/routes/api.$.ts | 3 +- 3 files changed, 86 insertions(+), 1 deletion(-) create mode 100644 src/lib/api/assign.ts diff --git a/src/lib/api/assign.ts b/src/lib/api/assign.ts new file mode 100644 index 0000000..5d24a49 --- /dev/null +++ b/src/lib/api/assign.ts @@ -0,0 +1,83 @@ +import Elysia from "elysia"; +import z from "zod"; + +import { API_URL } from "$lib/constants/api"; +import { isErrorResponse } from "./helpers"; +import { requireAuth } from "./macros"; + +export const api = new Elysia({ prefix: "/assign" }) + .use(requireAuth) + .model({ + error: z.object({ + error: z.string(), + message: z.string(), + timestamp: z.iso.datetime(), + }), + }) + .post( + "/role", + async ({ body, status, token }) => { + const res = await fetch(API_URL.V1.USER.ASSIGN_ROLE, { + method: "POST", + body: JSON.stringify(body), + headers: { + Authorization: `bearer ${token}`, + "Content-Type": "application/json", + }, + }); + + if (!res.ok) { + const response = await res.json(); + + if (isErrorResponse(response)) { + switch (response.code) { + case "Not Found": + return status(404, { + error: response.code, + message: response.message, + timestamp: new Date().toISOString(), + }); + + case "Unauthorized": + return status(401, { + error: response.code, + message: response.message, + timestamp: new Date().toISOString(), + }); + + default: + return status(500, { + error: "Internal Server Error", + message: + "An unexpected error occurred while handling request", + timestamp: new Date().toISOString(), + }); + } + } + } + + const response = await res.text(); + return response; + }, + { + requireAuth: true, + + body: z.object({ + email: z.email("Please provide a valid email"), + newRole: z.string().min(1, "Role is required"), + }), + + response: { + 200: z.string(), + 400: "error", + 401: "error", + 404: "error", + 500: "error", + }, + + detail: { + summary: "Assign role to a user", + description: "Updates the role of a user based on their email address.", + }, + } + ); diff --git a/src/lib/api/index.ts b/src/lib/api/index.ts index 0c6e9d5..8471a0b 100644 --- a/src/lib/api/index.ts +++ b/src/lib/api/index.ts @@ -1,2 +1,3 @@ +export { api as assign } from "./assign"; export { api as auth } from "./auth"; export { api as health } from "./health"; diff --git a/src/routes/api.$.ts b/src/routes/api.$.ts index cc6db80..4ab7373 100644 --- a/src/routes/api.$.ts +++ b/src/routes/api.$.ts @@ -5,7 +5,7 @@ import { createIsomorphicFn } from "@tanstack/react-start"; import { Elysia } from "elysia"; import * as z from "zod"; -import { auth, health } from "$lib/api"; +import { assign, auth, health } from "$lib/api"; const app = new Elysia({ prefix: "/api", @@ -40,6 +40,7 @@ All responses follow a consistent JSON structure with appropriate HTTP status co ) .use(health) .use(auth) + .use(assign) .get("/", "Hello PEC ACM!"); const handle = ({ request }: { request: Request }) => app.fetch(request); From 267bf4650801c145b1201393f2b53a949125f366 Mon Sep 17 00:00:00 2001 From: Vidhi Sethi Date: Mon, 2 Feb 2026 00:13:05 +0530 Subject: [PATCH 18/47] `getEvent` and `createEvent` implemented --- src/lib/api/events.ts | 152 +++++++++++++++++++++++++++++++++++++++++ src/lib/api/index.ts | 1 + src/lib/api/schemas.ts | 23 +++++++ src/routes/api.$.ts | 3 +- 4 files changed, 178 insertions(+), 1 deletion(-) create mode 100644 src/lib/api/events.ts diff --git a/src/lib/api/events.ts b/src/lib/api/events.ts new file mode 100644 index 0000000..5c09acf --- /dev/null +++ b/src/lib/api/events.ts @@ -0,0 +1,152 @@ +import Elysia from "elysia"; +import z from "zod"; + +import { API_URL } from "$lib/constants/api"; + +import { isErrorResponse } from "./helpers"; +import { BaseEventSchema, BRANCHES } from "./schemas"; +import { requireAuth } from "./macros"; + +export const api = new Elysia({ prefix: "/events" }) + .use(requireAuth) + .model({ + error: z.object({ + error: z.string(), + message: z.string(), + timestamp: z.iso.datetime(), + }), + }) + .get( + "/getEvent/:eventId", + async ({ params, status }) => { + const eventId = params.eventId; + + const url = `${API_URL.V1.EVENTS.BY_ID.GET(eventId)}`; + + const res = await fetch(url, { method: "GET" }); + + if (!res.ok) { + const response = await res.json(); + + if (isErrorResponse(response)) { + switch (response.code) { + case "Not Found": + return status(404, { + error: response.code, + message: response.message, + timestamp: new Date().toISOString(), + }); + + case "Unauthorized": + return status(401, { + error: response.code, + message: response.message, + timestamp: new Date().toISOString(), + }); + + default: + return status(500, { + error: "Internal Server Error", + message: "An unexpected error occurred while handling request", + timestamp: new Date().toISOString(), + }); + } + } + } + + const response = await res.json(); + + const validatedRes = BaseEventSchema.parse(response); + return validatedRes; + }, + { + params: z.object({ + eventId: z.coerce.number(), + }), + response: { + 200: BaseEventSchema, + 401: "error", + 404: "error", + 500: "error", + }, + detail: { + summary: "Get event detail", + description: "Gets the details of an event using it's eventId", + }, + } + ) + .post( + "/createEvent", + async ({ body, status, token }) => { + const res = await fetch(API_URL.V1.EVENTS.CREATE, { + method: "POST", + body: JSON.stringify({ + id: body.id, + title: body.title, + branch: body.branch, + startDate: body.startDate, + endDate: body.endDate, + description: body.description, + relatedLink: body.relatedLink, + venue: body.venue, + ended: body.ended + }), + headers: { + Authorization: `bearer ${token}`, + "Content-Type": "application/json", + }, + }); + + const response = await res.json(); + + if (isErrorResponse(response)) { + switch (response.code) { + case "Not Found": + return status(404, { + error: response.code, + message: response.message, + timestamp: new Date().toISOString(), + }); + + case "Unauthorized": + return status(401, { + error: response.code, + message: response.message, + timestamp: new Date().toISOString(), + }); + + default: + return status(500, { + error: "Internal Server Error", + message: + "An unexpected error occurred while handling request", + timestamp: new Date().toISOString(), + }); + } + } + + const validatedRes = BaseEventSchema.parse(response); + return validatedRes; + }, + { + requireAuth: true, + body: z + .object({ + id: z.number(), + title: z.string(), + branch: z.enum(BRANCHES), + startDate: z.string(), + endDate: z.string(), + description: z.string(), + relatedLink: z.string(), + venue: z.string(), + ended: z.boolean(), + }), + response: { + 200: BaseEventSchema, + 401: "error", + 404: "error", + 500: "error", + }, + }, + ); diff --git a/src/lib/api/index.ts b/src/lib/api/index.ts index 8471a0b..d0efcc8 100644 --- a/src/lib/api/index.ts +++ b/src/lib/api/index.ts @@ -1,3 +1,4 @@ export { api as assign } from "./assign"; export { api as auth } from "./auth"; +export { api as events } from "./events"; export { api as health } from "./health"; diff --git a/src/lib/api/schemas.ts b/src/lib/api/schemas.ts index 81f5e2b..2998ba8 100644 --- a/src/lib/api/schemas.ts +++ b/src/lib/api/schemas.ts @@ -1,5 +1,16 @@ import z from "zod"; +export const BRANCHES = [ + "DEVELOPMENT", + "AI", + "CP", + "CYBER", + "SOCIALS", + "WIT", +] as const; + +export const BranchEnum = z.enum(BRANCHES); + export const DESIGNATIONS = [ "Member", "ImplementationBody", @@ -30,3 +41,15 @@ export const APIUserSchema = BaseUserSchema.extend({ password: z.string(), xp: z.number(), }); + +export const BaseEventSchema = z.object({ + id: z.number(), + title: z.string(), + branch: BranchEnum, + startDate: z.string(), + endDate: z.string(), + description: z.string(), + relatedLink: z.string(), + venue: z.string(), + ended: z.boolean(), +}); diff --git a/src/routes/api.$.ts b/src/routes/api.$.ts index 4ab7373..d4b9349 100644 --- a/src/routes/api.$.ts +++ b/src/routes/api.$.ts @@ -5,7 +5,7 @@ import { createIsomorphicFn } from "@tanstack/react-start"; import { Elysia } from "elysia"; import * as z from "zod"; -import { assign, auth, health } from "$lib/api"; +import { assign, auth, events, health } from "$lib/api"; const app = new Elysia({ prefix: "/api", @@ -41,6 +41,7 @@ All responses follow a consistent JSON structure with appropriate HTTP status co .use(health) .use(auth) .use(assign) + .use(events) .get("/", "Hello PEC ACM!"); const handle = ({ request }: { request: Request }) => app.fetch(request); From 8e118ff54e146c2efc114714236ee1f8ab51415b Mon Sep 17 00:00:00 2001 From: Vidhi Sethi Date: Tue, 3 Feb 2026 11:01:49 +0530 Subject: [PATCH 19/47] renamed `assign.ts` to `user.ts` + fixed urls --- src/lib/api/auth.ts | 4 ++-- src/lib/api/events.ts | 23 ++++++++++------------- src/lib/api/index.ts | 2 +- src/lib/api/{assign.ts => user.ts} | 7 +++---- src/routes/api.$.ts | 4 ++-- 5 files changed, 18 insertions(+), 22 deletions(-) rename src/lib/api/{assign.ts => user.ts} (92%) diff --git a/src/lib/api/auth.ts b/src/lib/api/auth.ts index 2bd4628..9adec17 100644 --- a/src/lib/api/auth.ts +++ b/src/lib/api/auth.ts @@ -30,7 +30,7 @@ export const api = new Elysia({ prefix: "/auth" }) }), }) .post( - "/login", + "/sign-in", async ({ body, status }) => { const res = await fetch(API_URL.V1.USER.LOGIN, { method: "POST", @@ -169,7 +169,7 @@ The token is sent to the user's registered email address during account registra }, ) .post( - "/register", + "/sign-up", async ({ body, status }) => { const res = await fetch(API_URL.V1.USER.REGISTER, { method: "POST", diff --git a/src/lib/api/events.ts b/src/lib/api/events.ts index 5c09acf..ef75fd0 100644 --- a/src/lib/api/events.ts +++ b/src/lib/api/events.ts @@ -4,8 +4,8 @@ import z from "zod"; import { API_URL } from "$lib/constants/api"; import { isErrorResponse } from "./helpers"; -import { BaseEventSchema, BRANCHES } from "./schemas"; import { requireAuth } from "./macros"; +import { BaseEventSchema, BRANCHES } from "./schemas"; export const api = new Elysia({ prefix: "/events" }) .use(requireAuth) @@ -17,14 +17,13 @@ export const api = new Elysia({ prefix: "/events" }) }), }) .get( - "/getEvent/:eventId", + "/get-event/:eventId", async ({ params, status }) => { const eventId = params.eventId; const url = `${API_URL.V1.EVENTS.BY_ID.GET(eventId)}`; const res = await fetch(url, { method: "GET" }); - if (!res.ok) { const response = await res.json(); @@ -50,14 +49,14 @@ export const api = new Elysia({ prefix: "/events" }) message: "An unexpected error occurred while handling request", timestamp: new Date().toISOString(), }); - } } } + } - const response = await res.json(); + const response = await res.json(); - const validatedRes = BaseEventSchema.parse(response); - return validatedRes; + const validatedRes = BaseEventSchema.parse(response); + return validatedRes; }, { params: z.object({ @@ -76,7 +75,7 @@ export const api = new Elysia({ prefix: "/events" }) } ) .post( - "/createEvent", + "/create-event", async ({ body, status, token }) => { const res = await fetch(API_URL.V1.EVENTS.CREATE, { method: "POST", @@ -118,20 +117,18 @@ export const api = new Elysia({ prefix: "/events" }) default: return status(500, { error: "Internal Server Error", - message: - "An unexpected error occurred while handling request", + message: "An unexpected error occurred while handling request", timestamp: new Date().toISOString(), }); - } } + } const validatedRes = BaseEventSchema.parse(response); return validatedRes; }, { requireAuth: true, - body: z - .object({ + body: z.object({ id: z.number(), title: z.string(), branch: z.enum(BRANCHES), diff --git a/src/lib/api/index.ts b/src/lib/api/index.ts index d0efcc8..ccfe0ed 100644 --- a/src/lib/api/index.ts +++ b/src/lib/api/index.ts @@ -1,4 +1,4 @@ -export { api as assign } from "./assign"; export { api as auth } from "./auth"; export { api as events } from "./events"; export { api as health } from "./health"; +export { api as user } from "./user"; diff --git a/src/lib/api/assign.ts b/src/lib/api/user.ts similarity index 92% rename from src/lib/api/assign.ts rename to src/lib/api/user.ts index 5d24a49..dd2b564 100644 --- a/src/lib/api/assign.ts +++ b/src/lib/api/user.ts @@ -5,7 +5,7 @@ import { API_URL } from "$lib/constants/api"; import { isErrorResponse } from "./helpers"; import { requireAuth } from "./macros"; -export const api = new Elysia({ prefix: "/assign" }) +export const api = new Elysia({ prefix: "/user" }) .use(requireAuth) .model({ error: z.object({ @@ -48,8 +48,7 @@ export const api = new Elysia({ prefix: "/assign" }) default: return status(500, { error: "Internal Server Error", - message: - "An unexpected error occurred while handling request", + message: "An unexpected error occurred while handling request", timestamp: new Date().toISOString(), }); } @@ -79,5 +78,5 @@ export const api = new Elysia({ prefix: "/assign" }) summary: "Assign role to a user", description: "Updates the role of a user based on their email address.", }, - } + }, ); diff --git a/src/routes/api.$.ts b/src/routes/api.$.ts index d4b9349..0f21f59 100644 --- a/src/routes/api.$.ts +++ b/src/routes/api.$.ts @@ -5,7 +5,7 @@ import { createIsomorphicFn } from "@tanstack/react-start"; import { Elysia } from "elysia"; import * as z from "zod"; -import { assign, auth, events, health } from "$lib/api"; +import { auth, events, health, user } from "$lib/api"; const app = new Elysia({ prefix: "/api", @@ -40,7 +40,7 @@ All responses follow a consistent JSON structure with appropriate HTTP status co ) .use(health) .use(auth) - .use(assign) + .use(user) .use(events) .get("/", "Hello PEC ACM!"); From c4fcd669f55b14617f06ce2afacad93264f81577 Mon Sep 17 00:00:00 2001 From: Vidhi Sethi Date: Tue, 3 Feb 2026 11:03:50 +0530 Subject: [PATCH 20/47] slight fix --- src/lib/api/events.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/lib/api/events.ts b/src/lib/api/events.ts index ef75fd0..3f57938 100644 --- a/src/lib/api/events.ts +++ b/src/lib/api/events.ts @@ -72,10 +72,10 @@ export const api = new Elysia({ prefix: "/events" }) summary: "Get event detail", description: "Gets the details of an event using it's eventId", }, - } + }, ) .post( - "/create-event", + "/create-event", async ({ body, status, token }) => { const res = await fetch(API_URL.V1.EVENTS.CREATE, { method: "POST", @@ -88,7 +88,7 @@ export const api = new Elysia({ prefix: "/events" }) description: body.description, relatedLink: body.relatedLink, venue: body.venue, - ended: body.ended + ended: body.ended, }), headers: { Authorization: `bearer ${token}`, From ce19393437effb2ae9458af86ea36106a6b0d193 Mon Sep 17 00:00:00 2001 From: Vidhi Sethi Date: Tue, 3 Feb 2026 11:57:19 +0530 Subject: [PATCH 21/47] more small fixes! --- src/lib/api/events.ts | 10 +++++----- src/lib/api/user.ts | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/lib/api/events.ts b/src/lib/api/events.ts index 3f57938..bf27fb0 100644 --- a/src/lib/api/events.ts +++ b/src/lib/api/events.ts @@ -17,9 +17,9 @@ export const api = new Elysia({ prefix: "/events" }) }), }) .get( - "/get-event/:eventId", + "/:id", async ({ params, status }) => { - const eventId = params.eventId; + const eventId = params.id; const url = `${API_URL.V1.EVENTS.BY_ID.GET(eventId)}`; @@ -60,7 +60,7 @@ export const api = new Elysia({ prefix: "/events" }) }, { params: z.object({ - eventId: z.coerce.number(), + id: z.coerce.number(), }), response: { 200: BaseEventSchema, @@ -75,7 +75,7 @@ export const api = new Elysia({ prefix: "/events" }) }, ) .post( - "/create-event", + "/", async ({ body, status, token }) => { const res = await fetch(API_URL.V1.EVENTS.CREATE, { method: "POST", @@ -91,7 +91,7 @@ export const api = new Elysia({ prefix: "/events" }) ended: body.ended, }), headers: { - Authorization: `bearer ${token}`, + Authorization: `Bearer ${token}`, "Content-Type": "application/json", }, }); diff --git a/src/lib/api/user.ts b/src/lib/api/user.ts index dd2b564..c096b8a 100644 --- a/src/lib/api/user.ts +++ b/src/lib/api/user.ts @@ -21,7 +21,7 @@ export const api = new Elysia({ prefix: "/user" }) method: "POST", body: JSON.stringify(body), headers: { - Authorization: `bearer ${token}`, + Authorization: `Bearer ${token}`, "Content-Type": "application/json", }, }); From c8930e198d260f5d2d605737886ce052bc2f765f Mon Sep 17 00:00:00 2001 From: Savy Date: Thu, 5 Feb 2026 21:20:17 +0530 Subject: [PATCH 22/47] no more boilerplate (#8) * refactor constants and api schemas * delete health handler * move macros to api utils * move and update error type guard * create helper functions to reduce handler boiler plate * refactor handlers to use new helper functions * add jsdocs to helpers functions. they really need them.... * fix imports and minor docs --- src/lib/api/events.ts | 149 --------------------------- src/lib/api/{ => handlers}/auth.ts | 137 +++++++++---------------- src/lib/api/handlers/events.ts | 110 ++++++++++++++++++++ src/lib/api/{ => handlers}/user.ts | 49 +++------ src/lib/api/health.ts | 38 ------- src/lib/api/helpers.ts | 15 --- src/lib/api/index.ts | 7 +- src/lib/api/types/index.ts | 27 +++++ src/lib/api/{ => types}/schemas.ts | 20 +--- src/lib/api/utils/helpers.ts | 157 +++++++++++++++++++++++++++++ src/lib/api/{ => utils}/macros.ts | 0 src/lib/constants/details.ts | 16 --- src/lib/constants/org.ts | 33 ++++++ src/routes/api.$.ts | 3 +- 14 files changed, 395 insertions(+), 366 deletions(-) delete mode 100644 src/lib/api/events.ts rename src/lib/api/{ => handlers}/auth.ts (67%) create mode 100644 src/lib/api/handlers/events.ts rename src/lib/api/{ => handlers}/user.ts (51%) delete mode 100644 src/lib/api/health.ts delete mode 100644 src/lib/api/helpers.ts create mode 100644 src/lib/api/types/index.ts rename src/lib/api/{ => types}/schemas.ts (75%) create mode 100644 src/lib/api/utils/helpers.ts rename src/lib/api/{ => utils}/macros.ts (100%) delete mode 100644 src/lib/constants/details.ts create mode 100644 src/lib/constants/org.ts diff --git a/src/lib/api/events.ts b/src/lib/api/events.ts deleted file mode 100644 index bf27fb0..0000000 --- a/src/lib/api/events.ts +++ /dev/null @@ -1,149 +0,0 @@ -import Elysia from "elysia"; -import z from "zod"; - -import { API_URL } from "$lib/constants/api"; - -import { isErrorResponse } from "./helpers"; -import { requireAuth } from "./macros"; -import { BaseEventSchema, BRANCHES } from "./schemas"; - -export const api = new Elysia({ prefix: "/events" }) - .use(requireAuth) - .model({ - error: z.object({ - error: z.string(), - message: z.string(), - timestamp: z.iso.datetime(), - }), - }) - .get( - "/:id", - async ({ params, status }) => { - const eventId = params.id; - - const url = `${API_URL.V1.EVENTS.BY_ID.GET(eventId)}`; - - const res = await fetch(url, { method: "GET" }); - if (!res.ok) { - const response = await res.json(); - - if (isErrorResponse(response)) { - switch (response.code) { - case "Not Found": - return status(404, { - error: response.code, - message: response.message, - timestamp: new Date().toISOString(), - }); - - case "Unauthorized": - return status(401, { - error: response.code, - message: response.message, - timestamp: new Date().toISOString(), - }); - - default: - return status(500, { - error: "Internal Server Error", - message: "An unexpected error occurred while handling request", - timestamp: new Date().toISOString(), - }); - } - } - } - - const response = await res.json(); - - const validatedRes = BaseEventSchema.parse(response); - return validatedRes; - }, - { - params: z.object({ - id: z.coerce.number(), - }), - response: { - 200: BaseEventSchema, - 401: "error", - 404: "error", - 500: "error", - }, - detail: { - summary: "Get event detail", - description: "Gets the details of an event using it's eventId", - }, - }, - ) - .post( - "/", - async ({ body, status, token }) => { - const res = await fetch(API_URL.V1.EVENTS.CREATE, { - method: "POST", - body: JSON.stringify({ - id: body.id, - title: body.title, - branch: body.branch, - startDate: body.startDate, - endDate: body.endDate, - description: body.description, - relatedLink: body.relatedLink, - venue: body.venue, - ended: body.ended, - }), - headers: { - Authorization: `Bearer ${token}`, - "Content-Type": "application/json", - }, - }); - - const response = await res.json(); - - if (isErrorResponse(response)) { - switch (response.code) { - case "Not Found": - return status(404, { - error: response.code, - message: response.message, - timestamp: new Date().toISOString(), - }); - - case "Unauthorized": - return status(401, { - error: response.code, - message: response.message, - timestamp: new Date().toISOString(), - }); - - default: - return status(500, { - error: "Internal Server Error", - message: "An unexpected error occurred while handling request", - timestamp: new Date().toISOString(), - }); - } - } - - const validatedRes = BaseEventSchema.parse(response); - return validatedRes; - }, - { - requireAuth: true, - body: z.object({ - id: z.number(), - title: z.string(), - branch: z.enum(BRANCHES), - startDate: z.string(), - endDate: z.string(), - description: z.string(), - relatedLink: z.string(), - venue: z.string(), - ended: z.boolean(), - }), - response: { - 200: BaseEventSchema, - 401: "error", - 404: "error", - 500: "error", - }, - }, - ); diff --git a/src/lib/api/auth.ts b/src/lib/api/handlers/auth.ts similarity index 67% rename from src/lib/api/auth.ts rename to src/lib/api/handlers/auth.ts index 9adec17..ee13120 100644 --- a/src/lib/api/auth.ts +++ b/src/lib/api/handlers/auth.ts @@ -6,13 +6,17 @@ import z from "zod"; import VerifyEmail from "$emails/verify"; import { env } from "$env/server"; import { API_URL } from "$lib/constants/api"; -import { BRANCH_NAMES } from "$lib/constants/details"; - -import { isErrorResponse } from "./helpers"; -import { APIUserSchema, UserSchema } from "./schemas"; +import { BRANCH_NAMES } from "$lib/constants/org"; +import { isErrorResponse } from "../types"; +import { APIUserSchema, UserSchema } from "../types/schemas"; +import { + createErrorResponse, + createResponseSchema, + toSuccessResponse, +} from "../utils/helpers"; const LoginResponseSchema = z.object({ - jwtToken: z.string(), + token: z.string(), user: UserSchema, }); @@ -24,6 +28,7 @@ const APILoginResponseSchema = z.object({ export const api = new Elysia({ prefix: "/auth" }) .model({ error: z.object({ + success: z.literal(false), error: z.string(), message: z.string(), timestamp: z.iso.datetime(), @@ -31,7 +36,7 @@ export const api = new Elysia({ prefix: "/auth" }) }) .post( "/sign-in", - async ({ body, status }) => { + async ({ body, set }) => { const res = await fetch(API_URL.V1.USER.LOGIN, { method: "POST", body: JSON.stringify(body), @@ -43,50 +48,32 @@ export const api = new Elysia({ prefix: "/auth" }) const response = await res.json(); if (isErrorResponse(response)) { - switch (response.code) { - case "Not Found": - return status(404, { - error: response.code, - message: response.message, - timestamp: new Date().toISOString(), - }); - case "Unauthorized": - return status(401, { - error: response.code, - message: response.message, - timestamp: new Date().toISOString(), - }); - default: - return status(500, { - error: "Internal Server Error", - message: "An unexpected error occurred while handling request", - timestamp: new Date().toISOString(), - }); - } + return createErrorResponse(response, { + allowedCodes: [401, 404, 500], + }); } const validatedRes = APILoginResponseSchema.parse(response); - return { - jwtToken: validatedRes.jwtToken, + set.headers.authorization = `Bearer ${validatedRes.jwtToken}`; + + return toSuccessResponse({ + token: validatedRes.jwtToken, user: { ...validatedRes.user, profile: validatedRes.user.dp, experience: validatedRes.user.xp, }, - }; + }); }, { body: z.object({ email: z.email("you need to enter a email to login"), password: z.string("you need to enter a password to login"), }), - response: { - 200: LoginResponseSchema, - 401: "error", - 404: "error", - 500: "error", - }, + response: createResponseSchema(LoginResponseSchema, { + errorCodes: [401, 404, 500], + }), detail: { summary: "User login with email and password", description: `Authenticates a user with their email and password credentials. @@ -104,7 +91,7 @@ On successful authentication, returns a JWT token for subsequent authenticated r ) .get( "/verify-email/:token", - async ({ params, status }) => { + async ({ params }) => { const token = params.token; const url = `${API_URL.V1.USER.VERIFY}?${new URLSearchParams({ token })}`; @@ -115,44 +102,30 @@ On successful authentication, returns a JWT token for subsequent authenticated r const response = await res.json(); if (isErrorResponse(response)) { - console.log(response); - switch (response.code) { - case "Not Found": - return status(404, { - error: "Not Found", - message: - "The provided verification token was not found or has expired", - timestamp: new Date().toISOString(), - }); - case "Bad Request": - return status(400, { - error: "Bad Request", - message: - "The Email verification token is not of the expected type.", - timestamp: new Date().toISOString(), - }); - default: - return status(500, { - error: "Internal Server Error", - message: "An unexpected error occurred while handling request", - timestamp: new Date().toISOString(), - }); - } + return createErrorResponse(response, { + customMessages: { + 400: "The Email verification token is not of the expected type.", + 404: "The provided verification token was not found or has expired", + }, + allowedCodes: [400, 404], + }); } } // TODO: It's more ideal to redirect the user to confirmation page, instead of showing a bland json response. - return { message: "Your Email was sucessfully verified." }; + return toSuccessResponse({ + message: "Your Email was sucessfully verified.", + }); }, { - response: { - 200: z.object({ + response: createResponseSchema( + z.object({ message: z.literal("Your Email was sucessfully verified."), }), - 400: "error", - 404: "error", - 500: "error", - }, + { + errorCodes: [400, 404, 500], + }, + ), detail: { summary: "Verify user email", description: `Verifies a user's email address using a one-time verification token. @@ -170,7 +143,7 @@ The token is sent to the user's registered email address during account registra ) .post( "/sign-up", - async ({ body, status }) => { + async ({ body }) => { const res = await fetch(API_URL.V1.USER.REGISTER, { method: "POST", body: JSON.stringify({ @@ -188,20 +161,9 @@ The token is sent to the user's registered email address during account registra const response = await res.json(); if (isErrorResponse(response)) { - switch (response.code) { - case "Bad Request": - return status(400, { - error: "Bad Request", - message: response.message, - timestamp: new Date().toISOString(), - }); - default: - return status(500, { - error: "Internal Server Error", - message: "An unexpected error occurred while handling request", - timestamp: new Date().toISOString(), - }); - } + return createErrorResponse(response, { + allowedCodes: [400, 500], + }); } const emailToken = response.emailToken; @@ -228,10 +190,10 @@ The token is sent to the user's registered email address during account registra html, }); - return { + return toSuccessResponse({ message: "Account created! Please check your email to verify your account", - }; + }); }, { body: z @@ -260,15 +222,14 @@ The token is sent to the user's registered email address during account registra error: "Password and confirm password are not same.", path: ["confirmPassword"], }), - response: { - 200: z.object({ + response: createResponseSchema( + z.object({ message: z.literal( "Account created! Please check your email to verify your account", ), }), - 400: "error", - 500: "error", - }, + { errorCodes: [400, 500] }, + ), detail: { summary: "Register a new user", description: `Creates a new user account and sends an email verification link. diff --git a/src/lib/api/handlers/events.ts b/src/lib/api/handlers/events.ts new file mode 100644 index 0000000..2ffb66e --- /dev/null +++ b/src/lib/api/handlers/events.ts @@ -0,0 +1,110 @@ +import Elysia from "elysia"; +import z from "zod"; + +import { API_URL } from "$lib/constants/api"; +import { ACM_BRANCHES } from "$lib/constants/org"; +import { isErrorResponse } from "../types"; +import { BaseEventSchema } from "../types/schemas"; +import { + createErrorResponse, + createResponseSchema, + toSuccessResponse, +} from "../utils/helpers"; +import { requireAuth } from "../utils/macros"; + +export const api = new Elysia({ prefix: "/events" }) + .use(requireAuth) + .model({ + error: z.object({ + error: z.string(), + message: z.string(), + timestamp: z.iso.datetime(), + }), + }) + .get( + "/:id", + async ({ params }) => { + const eventId = params.id; + + const url = `${API_URL.V1.EVENTS.BY_ID.GET(eventId)}`; + + const res = await fetch(url, { method: "GET" }); + if (!res.ok) { + const response = await res.json(); + + if (isErrorResponse(response)) { + return createErrorResponse(response, { + allowedCodes: [401, 404, 500], + }); + } + } + + const response = await res.json(); + + const validatedRes = BaseEventSchema.parse(response); + return toSuccessResponse(validatedRes); + }, + { + params: z.object({ + id: z.coerce.number(), + }), + response: createResponseSchema(BaseEventSchema, { + errorCodes: [401, 404, 500], + }), + detail: { + summary: "Get event detail", + description: "Gets the details of an event using it's eventId", + }, + }, + ) + .post( + "/", + async ({ body, token }) => { + const res = await fetch(API_URL.V1.EVENTS.CREATE, { + method: "POST", + body: JSON.stringify({ + id: body.id, + title: body.title, + branch: body.branch, + startDate: body.startDate, + endDate: body.endDate, + description: body.description, + relatedLink: body.relatedLink, + venue: body.venue, + ended: body.ended, + }), + headers: { + Authorization: `Bearer ${token}`, + "Content-Type": "application/json", + }, + }); + + const response = await res.json(); + + if (isErrorResponse(response)) { + return createErrorResponse(response, { + allowedCodes: [401, 404, 500], + }); + } + + const validatedRes = BaseEventSchema.parse(response); + return toSuccessResponse(validatedRes); + }, + { + requireAuth: true, + body: z.object({ + id: z.number(), + title: z.string(), + branch: z.enum(ACM_BRANCHES), + startDate: z.string(), + endDate: z.string(), + description: z.string(), + relatedLink: z.string(), + venue: z.string(), + ended: z.boolean(), + }), + response: createResponseSchema(BaseEventSchema, { + errorCodes: [401, 404, 500], + }), + }, + ); diff --git a/src/lib/api/user.ts b/src/lib/api/handlers/user.ts similarity index 51% rename from src/lib/api/user.ts rename to src/lib/api/handlers/user.ts index c096b8a..0d60c84 100644 --- a/src/lib/api/user.ts +++ b/src/lib/api/handlers/user.ts @@ -2,8 +2,13 @@ import Elysia from "elysia"; import z from "zod"; import { API_URL } from "$lib/constants/api"; -import { isErrorResponse } from "./helpers"; -import { requireAuth } from "./macros"; +import { isErrorResponse } from "../types"; +import { + createErrorResponse, + createResponseSchema, + toSuccessResponse, +} from "../utils/helpers"; +import { requireAuth } from "../utils/macros"; export const api = new Elysia({ prefix: "/user" }) .use(requireAuth) @@ -16,7 +21,7 @@ export const api = new Elysia({ prefix: "/user" }) }) .post( "/role", - async ({ body, status, token }) => { + async ({ body, token }) => { const res = await fetch(API_URL.V1.USER.ASSIGN_ROLE, { method: "POST", body: JSON.stringify(body), @@ -30,50 +35,22 @@ export const api = new Elysia({ prefix: "/user" }) const response = await res.json(); if (isErrorResponse(response)) { - switch (response.code) { - case "Not Found": - return status(404, { - error: response.code, - message: response.message, - timestamp: new Date().toISOString(), - }); - - case "Unauthorized": - return status(401, { - error: response.code, - message: response.message, - timestamp: new Date().toISOString(), - }); - - default: - return status(500, { - error: "Internal Server Error", - message: "An unexpected error occurred while handling request", - timestamp: new Date().toISOString(), - }); - } + return createErrorResponse(response, { + allowedCodes: [500], + }); } } const response = await res.text(); - return response; + return toSuccessResponse(response); }, { requireAuth: true, - body: z.object({ email: z.email("Please provide a valid email"), newRole: z.string().min(1, "Role is required"), }), - - response: { - 200: z.string(), - 400: "error", - 401: "error", - 404: "error", - 500: "error", - }, - + response: createResponseSchema(z.string()), detail: { summary: "Assign role to a user", description: "Updates the role of a user based on their email address.", diff --git a/src/lib/api/health.ts b/src/lib/api/health.ts deleted file mode 100644 index c9f07c3..0000000 --- a/src/lib/api/health.ts +++ /dev/null @@ -1,38 +0,0 @@ -import Elysia from "elysia"; -import * as z from "zod"; - -import { API_URL } from "$lib/constants/api"; - -export const api = new Elysia() - .get( - "/hello", - async () => { - const res = await fetch(API_URL.HEALTH.HELLO); - return await res.text(); - }, - { - response: z.string(), - detail: { - summary: "Say Hello to the API", - description: - "Returns a simple greeting message to verify the API is reachable and responding.", - tags: ["Misc."], - }, - }, - ) - .get( - "/health", - async () => { - const res = await fetch(API_URL.HEALTH.CHECK); - return await res.text(); - }, - { - response: z.string(), - detail: { - summary: "Perform health check of the API", - description: - "Performs a health check on the API and returns the current operational status. Not much different from `GET /api/hello`. ", - tags: ["Misc."], - }, - }, - ); diff --git a/src/lib/api/helpers.ts b/src/lib/api/helpers.ts deleted file mode 100644 index 2683d73..0000000 --- a/src/lib/api/helpers.ts +++ /dev/null @@ -1,15 +0,0 @@ -interface ErrorResponse { - code: string; - message: string; -} - -export function isErrorResponse(res: unknown): res is ErrorResponse { - return ( - res !== null && - typeof res === "object" && - "code" in res && - typeof res.code === "string" && - "message" in res && - typeof res.message === "string" - ); -} diff --git a/src/lib/api/index.ts b/src/lib/api/index.ts index ccfe0ed..e37728a 100644 --- a/src/lib/api/index.ts +++ b/src/lib/api/index.ts @@ -1,4 +1,3 @@ -export { api as auth } from "./auth"; -export { api as events } from "./events"; -export { api as health } from "./health"; -export { api as user } from "./user"; +export { api as auth } from "./handlers/auth"; +export { api as events } from "./handlers/events"; +export { api as user } from "./handlers/user"; diff --git a/src/lib/api/types/index.ts b/src/lib/api/types/index.ts new file mode 100644 index 0000000..b2cef58 --- /dev/null +++ b/src/lib/api/types/index.ts @@ -0,0 +1,27 @@ +export interface APIErrorResponse { + code: string; + message: string; +} + +export interface ErrorResponse { + success: false; + error: string; + message: string; + timestamp: string; +} + +export function isErrorResponse(res: unknown): res is APIErrorResponse { + return ( + res !== null && + typeof res === "object" && + "code" in res && + typeof res.code === "string" && + res.code.trim() !== "" && + "message" in res && + typeof res.message === "string" && + res.message.trim() !== "" + ); +} + +export const ERROR_STATUS_CODES = [400, 401, 403, 404, 409, 500] as const; +export type ErrorStatusCode = (typeof ERROR_STATUS_CODES)[number]; diff --git a/src/lib/api/schemas.ts b/src/lib/api/types/schemas.ts similarity index 75% rename from src/lib/api/schemas.ts rename to src/lib/api/types/schemas.ts index 2998ba8..1f06151 100644 --- a/src/lib/api/schemas.ts +++ b/src/lib/api/types/schemas.ts @@ -1,23 +1,7 @@ import z from "zod"; +import { ACM_BRANCHES, DESIGNATIONS } from "$lib/constants/org"; -export const BRANCHES = [ - "DEVELOPMENT", - "AI", - "CP", - "CYBER", - "SOCIALS", - "WIT", -] as const; - -export const BranchEnum = z.enum(BRANCHES); - -export const DESIGNATIONS = [ - "Member", - "ImplementationBody", - "ExecutiveBody", - "Core", - "Admin", -] as const; +export const BranchEnum = z.enum(ACM_BRANCHES); export const DesignationEnum = z.enum(DESIGNATIONS); diff --git a/src/lib/api/utils/helpers.ts b/src/lib/api/utils/helpers.ts new file mode 100644 index 0000000..31c3d15 --- /dev/null +++ b/src/lib/api/utils/helpers.ts @@ -0,0 +1,157 @@ +import { StatusMap, status } from "elysia"; +import z from "zod"; +import type { APIErrorResponse, ErrorStatusCode } from "../types"; + +/** + * Creates a standardized error response object from an API error payload. + * + * - Maps the backend `res.code` to an HTTP status code using Elysia's `StatusMap`. + * - Validates the mapped status code against a required whitelist (`allowedCodes`). + * - If the mapped code is not in the whitelist, it defaults to the last item in + * `allowedCodes` (or 500 if the list is empty). + * - Allows custom error messages per status code via `customMessages`. + * + * @template AllowedCodes - A tuple of allowed HTTP status codes derived from `StatusMap`. + * + * @param res - The API error response object containing the original error `code`. + * @param options - The configuration object: + * - `allowedCodes`: (Required) An array of permitted HTTP status codes. + * - `customMessages`: (Optional) A map of status codes to specific error message strings. + * + * @returns An Elysia status response containing: + * - `success`: Always `false`. + * - `error`: The original error code string from the API. + * - `message`: A custom message if provided, otherwise a generic fallback. + * - `timestamp`: The ISO 8601 string of the error occurrence. + */ +export function createErrorResponse< + const AllowedCodes extends (typeof StatusMap)[keyof typeof StatusMap], +>( + res: APIErrorResponse, + options: { + customMessages?: Partial< + Record<(typeof StatusMap)[keyof typeof StatusMap], string> + >; + allowedCodes: AllowedCodes[]; + }, +) { + const statusCode = + StatusMap[res.code as keyof typeof StatusMap] ?? + StatusMap["Internal Server Error"]; + + const allowedCodes = options?.allowedCodes ?? [ + StatusMap["Internal Server Error"], + ]; + + let finalStatusCode = + allowedCodes[allowedCodes.length - 1] ?? StatusMap["Internal Server Error"]; + + for (const code of allowedCodes) { + if (code === statusCode) { + finalStatusCode = code; + break; + } + } + + const customMessage = options?.customMessages?.[statusCode]; + + const message = + customMessage ?? + "An unexpected error occurred while processing the request"; + return status(finalStatusCode, { + success: false, + error: res.code, + message, + timestamp: new Date().toISOString(), + }); +} + +/** + * Creates an Elysia‑compatible response schema that distinguishes between + * a successful response and one or more error status codes. + * + * - The success case uses `toSuccessSchema(successDataSchema)` under the given `successCode`. + * - The error cases map each code in `errorCodes` to a generic `"error"` shape, + * which should be backed by an error model defined on the Elysia instance + * with at least `{ success: false, error: string, message: string, timestamp: string }`. + * + * @template T - The Zod schema for the success response’s `data` field. + * @template SuccessCode - The HTTP status code for success (200 or 201); defaults to 200. + * @template ErrorCodes - A readonly tuple of allowed error status codes; defaults to `[500]`. + * + * @param successDataSchema - Zod schema describing the shape of the successful response’s `data`. + * @param options - Optional configuration: + * - `successCode`: HTTP status code for success (200 or 201); defaults to 200. + * - `errorCodes`: Array of allowed error status codes; defaults to [500]. + * + * @returns A schema object where: + * - `successCode` maps to `toSuccessSchema(successDataSchema)`. + * - each code in `errorCodes` maps to `"error"`. + * + * @note This function assumes that the Elysia instance has an error model defined + * with fields: `success` (boolean, always false), `error` (string code), + * `message` (string), and `timestamp` (ISO datetime string). + */ +export function createResponseSchema< + T extends z.ZodType, + const SuccessCode extends 200 | 201 = 200, + const ErrorCodes extends readonly ErrorStatusCode[] = readonly [500], +>( + successDataSchema: T, + options?: { + successCode?: 200 | 201; + errorCodes?: ErrorCodes; + }, +) { + const successCode = (options?.successCode ?? 200) as SuccessCode; + const errorCodes = (options?.errorCodes ?? [500]) as ErrorCodes; + + type SuccessData = z.infer; + + type ResponseSchema = { + [K in SuccessCode | ErrorCodes[number]]: K extends SuccessCode + ? ReturnType> + : "error"; + }; + + const baseSchema = { + [successCode]: toSuccessSchema(successDataSchema), + }; + + const errorSchema = errorCodes.reduce( + (acc, code) => { + acc[code as ErrorCodes[number]] = "error"; + return acc; + }, + {} as { [K in ErrorCodes[number]]: "error" }, + ); + + return { ...baseSchema, ...errorSchema } as ResponseSchema; +} + +/** + * Wraps a Zod schema into a standardized success‑response shape. + * + * - Ensures the response has `success: true` and a `data` field matching the input schema. + * + * @template T - The type described by the input schema. + * @param schema - Zod schema for the `data` field. + * @returns A Zod object schema: `{ success: true, data: T }`. + */ +export const toSuccessSchema = (schema: z.ZodType) => + z.object({ + success: z.literal(true), + data: schema, + }); + +/** + * Creates a success‑response object (to be returned from a Elysia handler) matching `toSuccessSchema`. + * + * @template T - The type of the data being returned. + * @param data - The payload to put under the `data` key. + * @returns An object `{ success: true, data }` with `success` as a const `true`. + */ +export const toSuccessResponse = (data: T) => ({ + success: true as const, + data, +}); diff --git a/src/lib/api/macros.ts b/src/lib/api/utils/macros.ts similarity index 100% rename from src/lib/api/macros.ts rename to src/lib/api/utils/macros.ts diff --git a/src/lib/constants/details.ts b/src/lib/constants/details.ts deleted file mode 100644 index 9c34fc6..0000000 --- a/src/lib/constants/details.ts +++ /dev/null @@ -1,16 +0,0 @@ -// TODO: Rethink filename. - -export const BRANCH_NAMES = [ - "CSE", - "ECE", - "EE", - "CSEDS", - "AI", - "VLSI", - "MECH", - "CIVIL", - "AERO", - "AI", - "DESIGN", - "PROD/META", -] as const; diff --git a/src/lib/constants/org.ts b/src/lib/constants/org.ts new file mode 100644 index 0000000..6df2e93 --- /dev/null +++ b/src/lib/constants/org.ts @@ -0,0 +1,33 @@ +// TODO: Rethink filename. + +export const BRANCH_NAMES = [ + "CSE", + "ECE", + "EE", + "CSEDS", + "AI", + "VLSI", + "MECH", + "CIVIL", + "AERO", + "AI", + "DESIGN", + "PROD/META", +] as const; + +export const ACM_BRANCHES = [ + "DEVELOPMENT", + "AI", + "CP", + "CYBER", + "SOCIALS", + "WIT", +] as const; + +export const DESIGNATIONS = [ + "Member", + "ImplementationBody", + "ExecutiveBody", + "Core", + "Admin", +] as const; diff --git a/src/routes/api.$.ts b/src/routes/api.$.ts index 0f21f59..225cf77 100644 --- a/src/routes/api.$.ts +++ b/src/routes/api.$.ts @@ -5,7 +5,7 @@ import { createIsomorphicFn } from "@tanstack/react-start"; import { Elysia } from "elysia"; import * as z from "zod"; -import { auth, events, health, user } from "$lib/api"; +import { auth, events, user } from "$lib/api"; const app = new Elysia({ prefix: "/api", @@ -38,7 +38,6 @@ All responses follow a consistent JSON structure with appropriate HTTP status co }, }), ) - .use(health) .use(auth) .use(user) .use(events) From 1e2413cb044bbfd16ab2551621029e4ba361946a Mon Sep 17 00:00:00 2001 From: Savy Date: Thu, 5 Feb 2026 21:35:16 +0530 Subject: [PATCH 23/47] fix styling for email --- src/emails/verify.tsx | 149 ++++++++++++++++++++++-------------------- 1 file changed, 79 insertions(+), 70 deletions(-) diff --git a/src/emails/verify.tsx b/src/emails/verify.tsx index 6ba77bb..e8f4118 100644 --- a/src/emails/verify.tsx +++ b/src/emails/verify.tsx @@ -1,6 +1,7 @@ import { Body, Button, + Container, Head, Heading, Hr, @@ -32,81 +33,89 @@ function VerifyEmail({ name, token }: VerifyEmailProps) { fontFamily: "sans-serif", }} > - - - logo for PEC ACM{" "} - - PEC ACM - - - - - Hello {name}! - - - You are receiving this email because you registered for PEC ACM. - Please click the button below to verify your email address and - complete your registration. - - - - If you did not create an account with PEC ACM, no further action is - required. - - - Regards, -
- PEC ACM -
- -
- - - If you're having trouble clicking the "Verify Email Address" button, - copy and paste the URL below into your web browser:  - + + logo for PEC ACM{" "} + + PEC ACM + + + + + Hello {name}! + + + You are receiving this email because you registered for PEC ACM. + Please click the button below to verify your email address and + complete your registration. + + + + If you did not create an account with PEC ACM, no further action is + required. + + - {VERIFY_URL} - - + Regards, +
+ PEC ACM +
+ +
+ + + If you're having trouble clicking the "Verify Email Address" button, + copy and paste the URL below into your web browser:  + + {VERIFY_URL} + + + ); From a3616bdb7dca5940b526483e984c5b8e592f1a6f Mon Sep 17 00:00:00 2001 From: Vidhi Sethi Date: Mon, 16 Feb 2026 15:39:08 +0530 Subject: [PATCH 24/47] `event` route implementation completed, testing to be done --- src/lib/api/handlers/events.ts | 412 ++++++++++++++++++++++++++++++++- src/lib/api/types/schemas.ts | 50 +++- 2 files changed, 443 insertions(+), 19 deletions(-) diff --git a/src/lib/api/handlers/events.ts b/src/lib/api/handlers/events.ts index 2ffb66e..473dc4c 100644 --- a/src/lib/api/handlers/events.ts +++ b/src/lib/api/handlers/events.ts @@ -4,7 +4,13 @@ import z from "zod"; import { API_URL } from "$lib/constants/api"; import { ACM_BRANCHES } from "$lib/constants/org"; import { isErrorResponse } from "../types"; -import { BaseEventSchema } from "../types/schemas"; +import { + BaseEventSchema, + EventEndedEmailSchema, + EventEndedSIDSchema, + EventsArraySchema, + EventUserSchema, +} from "../types/schemas"; import { createErrorResponse, createResponseSchema, @@ -57,6 +63,218 @@ export const api = new Elysia({ prefix: "/events" }) }, }, ) + .get( + "/", + async ({ query }) => { + const { eventsFrom, eventsTill, offset, pageSize } = query; + + const url = `${API_URL.V1.EVENTS.GET_ALL}?${new URLSearchParams({ + ...(eventsFrom && { eventsFrom }), + ...(eventsTill && { eventsTill }), + ...(offset !== undefined && { offset: offset.toString() }), + ...(pageSize !== undefined && { pageSize: pageSize.toString() }), + })}`; + + const res = await fetch(url, { method: "GET" }); + + if (!res.ok) { + const response = await res.json(); + console.log(response); + if (isErrorResponse(response)) { + return createErrorResponse(response, { + allowedCodes: [401, 404, 500], + }); + } + } + const response = await res.json(); + const validatedRes = EventsArraySchema.parse(response); + + return toSuccessResponse(validatedRes); + }, + { + query: z.object({ + eventsFrom: z.string().optional(), + eventsTill: z.string().optional(), + offset: z.number().optional(), + pageSize: z.number().optional(), + }), + + response: createResponseSchema(EventsArraySchema, { + errorCodes: [401, 404, 500], + }), + }, + ) + .get( + "/user/:id", // to be tested + async ({ params, query }) => { + const { id } = params; + const { role, offset, pageSize } = query; + + const url = `${API_URL.V1.EVENTS.USER(id)}?${new URLSearchParams({ + ...(role !== undefined && { role }), + ...(offset !== undefined && { offset: offset.toString() }), + ...(pageSize !== undefined && { pageSize: pageSize.toString() }), + })}`; + + const res = await fetch(url, { method: "GET" }); + + const response = await res.json(); + + console.log(response); + + if (isErrorResponse(response)) { + return createErrorResponse(response, { + allowedCodes: [401, 404, 500], + }); + } + + const validatedRes = EventUserSchema.parse(response); + return toSuccessResponse(validatedRes); + }, + { + params: z.object({ + id: z.coerce.number(), + }), + query: z.object({ + role: z.string().optional(), + offset: z.number().optional(), + pageSize: z.number().optional(), + }), + response: createResponseSchema(EventUserSchema, { + errorCodes: [401, 404, 500], + }), + }, + ) + .get( + "/next", + async ({ query }) => { + const { date } = query; + console.log(date); + const url = `${API_URL.V1.EVENTS.NEXT}?${new URLSearchParams({ date })}`; + + const res = await fetch(url, { method: "GET" }); + + if (!res.ok) { + const response = await res.json(); + console.log(response); + if (isErrorResponse(response)) { + return createErrorResponse(response, { + allowedCodes: [401, 404, 500], + }); + } + } + + const response = await res.json(); + const validatedRes = BaseEventSchema.parse(response); + + return toSuccessResponse(validatedRes); + }, + { + query: z.object({ + date: z.string(), + }), + response: createResponseSchema(BaseEventSchema, { + errorCodes: [401, 404, 500], + }), + }, + ) + .get( + "/search", // to be tested => what is the pattern here? + async ({ query }) => { + const searchQuery = query.query; + const url = `${API_URL.V1.EVENTS.SEARCH.PATTERN}?${new URLSearchParams({ searchQuery })}`; + console.log(url); + const res = await fetch(url, { method: "GET" }); + + const response = await res.json(); + if (isErrorResponse(response)) { + return createErrorResponse(response, { + allowedCodes: [401, 404, 500], + }); + } + + const validatedRes = BaseEventSchema.parse(response); + return toSuccessResponse(validatedRes); + }, + { + query: z.object({ + query: z.string(), + }), + response: createResponseSchema(BaseEventSchema, { + errorCodes: [401, 404, 500], + }), + }, + ) + .get( + "/ongoing", + async ({ query }) => { + const { offset, pageSize } = query; + + const url = `${API_URL.V1.EVENTS.ONGOING}?${new URLSearchParams({ + ...(offset !== undefined && { offset: offset.toString() }), + ...(pageSize !== undefined && { pageSize: pageSize.toString() }), + })}`; + + const res = await fetch(url, { method: "GET" }); + const response = await res.json(); + + if (isErrorResponse(response)) { + return createErrorResponse(response, { + allowedCodes: [401, 404, 500], + }); + } + + const validatedRes = EventsArraySchema.parse(response); + return toSuccessResponse(validatedRes); + }, + { + query: z.object({ + offset: z.number().optional(), + pageSize: z.number().optional(), + }), + response: createResponseSchema(EventsArraySchema, { + errorCodes: [401, 404, 500], + }), + }, + ) + .get( + "/branches/:branch", // branch here refers to one of ACM's 6 subgroups + async ({ params, query }) => { + const { branch } = params; + const { offset, pageSize } = query; + + const url = `${API_URL.V1.EVENTS.BY_BRANCH(branch)}?${new URLSearchParams( + { + ...(offset !== undefined && { offset: offset.toString() }), + ...(pageSize !== undefined && { pageSize: pageSize.toString() }), + }, + )}`; + + const res = await fetch(url, { method: "GET" }); + const response = await res.json(); + + if (isErrorResponse(response)) { + return createErrorResponse(response, { + allowedCodes: [401, 404, 500], + }); + } + + const validatedRes = EventsArraySchema.parse(response); + return toSuccessResponse(validatedRes); + }, + { + params: z.object({ + branch: z.enum(ACM_BRANCHES), + }), + query: z.object({ + offset: z.number().optional(), + pageSize: z.number().optional(), + }), + response: createResponseSchema(EventsArraySchema, { + errorCodes: [401, 404, 500], + }), + }, + ) .post( "/", async ({ body, token }) => { @@ -92,16 +310,188 @@ export const api = new Elysia({ prefix: "/events" }) }, { requireAuth: true, - body: z.object({ - id: z.number(), - title: z.string(), - branch: z.enum(ACM_BRANCHES), - startDate: z.string(), - endDate: z.string(), - description: z.string(), - relatedLink: z.string(), - venue: z.string(), - ended: z.boolean(), + body: BaseEventSchema, + response: createResponseSchema(BaseEventSchema, { + errorCodes: [401, 404, 500], + }), + }, + ) + .post( + "/end/email/:eventId", + async ({ body, params, token }) => { + const eventId = params.eventId; + const url = API_URL.V1.EVENTS.END.BY_EMAIL(eventId); + + const res = await fetch(url, { + method: "POST", + body: JSON.stringify({ + contributors: body.contributors, + publicity: body.publicity, + participants: body.participants, + contributorsXp: body.contributorXp, + publicityXp: body.publicityXp, + participantXp: body.participantXp, + }), + headers: { + Authorization: `Bearer ${token}`, + "Content-Type": "application/json", + }, + }); + + if (!res.ok) { + const response = res.json(); + + if (isErrorResponse(response)) { + return createErrorResponse(response, { + allowedCodes: [401, 404, 500], + }); + } + } + + return toSuccessResponse({ + message: `The event with ID ${eventId} has been marked as ENDED!`, + }); + }, + { + requireAuth: true, + body: EventEndedEmailSchema, + + params: z.object({ + eventId: z.coerce.number(), + }), + response: createResponseSchema(z.object({ message: z.string() }), { + errorCodes: [401, 404, 500], + }), + }, + ) + .post( + "/end/sid/:eventId", + async ({ body, params, token }) => { + const eventId = params.eventId; + const url = API_URL.V1.EVENTS.END.BY_SID(eventId); + + const res = await fetch(url, { + method: "POST", + body: JSON.stringify({ + contributors: body.contributors, + publicity: body.publicity, + participants: body.participants, + contributorsXp: body.contributorXp, + publicityXp: body.publicityXp, + participantXp: body.participantXp, + }), + headers: { + Authorization: `Bearer ${token}`, + "Content-Type": "application/json", + }, + }); + + if (!res.ok) { + const response = res.json(); + if (isErrorResponse(response)) { + return createErrorResponse(response, { + allowedCodes: [401, 404, 500], + }); + } + } + + return toSuccessResponse({ + message: `The event with ID ${eventId} has been marked as ENDED!`, + }); + }, + { + requireAuth: true, + body: EventEndedSIDSchema, + params: z.object({ + eventId: z.coerce.number(), + }), + response: createResponseSchema(z.object({ message: z.string() }), { + errorCodes: [401, 404, 500], + }), + }, + ) + .delete( + "/:id", + async ({ params, token }) => { + const eventId = params.id; + + const url = `${API_URL.V1.EVENTS.BY_ID.DELETE(eventId)}`; + + const res = await fetch(url, { + method: "DELETE", + headers: { + Authorization: `Bearer ${token}`, + }, + }); + if (!res.ok) { + const response = await res.json(); + + if (isErrorResponse(response)) { + return createErrorResponse(response, { + allowedCodes: [401, 404, 500], + }); + } + } + + return toSuccessResponse({ + message: "Deleted the corresponding event successfully", + }); + }, + { + requireAuth: true, + params: z.object({ + id: z.coerce.number(), + }), + response: createResponseSchema(z.object({ message: z.string() }), { + errorCodes: [401, 404, 500], + }), + }, + ) + .put( + "/update/:eventId", + async ({ body, params, token }) => { + const eventId = params.eventId; + + // console.log("putting and updating!"); + // console.log(eventId); + + const url = `${API_URL.V1.EVENTS.BY_ID.UPDATE(eventId)}`; + console.log(url); + + const res = await fetch(url, { + method: "PUT", + body: JSON.stringify({ + id: body.id, + title: body.title, + branch: body.branch, + startDate: body.startDate, + endDate: body.endDate, + description: body.description, + relatedLink: body.relatedLink, + venue: body.venue, + ended: body.ended, + }), + headers: { + Authorization: `Bearer ${token}`, + "Content-Type": "application/json", + }, + }); + + const response = await res.json(); + if (isErrorResponse(response)) { + return createErrorResponse(response, { + allowedCodes: [401, 404, 500], + }); + } + + const validatedRes = BaseEventSchema.parse(response); + return toSuccessResponse(validatedRes); + }, + { + requireAuth: true, + body: BaseEventSchema, + params: z.object({ + eventId: z.coerce.number(), }), response: createResponseSchema(BaseEventSchema, { errorCodes: [401, 404, 500], diff --git a/src/lib/api/types/schemas.ts b/src/lib/api/types/schemas.ts index 1f06151..7eafbf7 100644 --- a/src/lib/api/types/schemas.ts +++ b/src/lib/api/types/schemas.ts @@ -26,14 +26,48 @@ export const APIUserSchema = BaseUserSchema.extend({ xp: z.number(), }); +// everything can be made optional to support => export const BaseEventSchema = z.object({ + id: z.number().optional(), + title: z.string().optional(), + branch: BranchEnum.optional(), + startDate: z.string().optional(), + endDate: z.string().optional(), + description: z.string().optional(), + relatedLink: z.string().optional(), + venue: z.string().optional(), + ended: z.boolean().optional(), +}); + +export const EventsArraySchema = z.array(BaseEventSchema).optional(); + +export const EventEndedEmailSchema = z.object({ + contributors: z.array(z.string()), + publicity: z.array(z.string()), + participants: z.array(z.string()), + contributorXp: z.number(), + publicityXp: z.number(), + participantXp: z.number(), +}); + +export const EventEndedSIDSchema = z.object({ + contributors: z.array(z.string()), + publicity: z.array(z.string()), + participants: z.array(z.number()), + contributorXp: z.number(), + publicityXp: z.number(), + participantXp: z.number(), +}); + +const BaseEventUserSchema = z.object({ id: z.number(), - title: z.string(), - branch: BranchEnum, - startDate: z.string(), - endDate: z.string(), - description: z.string(), - relatedLink: z.string(), - venue: z.string(), - ended: z.boolean(), + email: z.string(), + name: z.string(), + dp: z.string(), +}); + +export const EventUserSchema = z.object({ + contributors: z.array(BaseEventUserSchema).optional(), + publicity: z.array(BaseEventUserSchema).optional(), + participants: z.array(BaseEventUserSchema).optional(), }); From d2c9b464983205e0325213602996cefd3cf271b9 Mon Sep 17 00:00:00 2001 From: Savy Date: Sat, 21 Feb 2026 19:51:33 +0530 Subject: [PATCH 25/47] auth stuff :P (#10) * proxy server canvas set up + some apis (#7) * branch commit lesgo * fix env module and import alias * migrate /v1/user/login route/ * better api docs * migrate api health routes * update schema defn for user login handler * update documentation tags * install email deps * add favicons and related assets * create verify email template * change email dev server port * rename `user` handler to `auth` * add user registration and verification handlers (#4) * add branch names constants * add nodemailer * update verify email templ, update api docs path * add smtp env vars * add email import alias * add user registration hanlder * complete user verification handler * add todo comments * Updated Docs for user registration and verification handlers * Change tags from 'Registration' to 'Authentication' * add `requireAuth` macro (#6) * implemented assign role api * `getEvent` and `createEvent` implemented * renamed `assign.ts` to `user.ts` + fixed urls * slight fix * more small fixes! * no more boilerplate (#8) * refactor constants and api schemas * delete health handler * move macros to api utils * move and update error type guard * create helper functions to reduce handler boiler plate * refactor handlers to use new helper functions * add jsdocs to helpers functions. they really need them.... * fix imports and minor docs * fix styling for email --------- Co-authored-by: Savy Co-authored-by: KD * setup tailwind, remove sass * add markup for `sign-in` route * update biome config * update check:write script, add deps * update env lib * rename schemas, format imports * add projects scripts * update require-auth macro to include role based filtering * update sign-in api route, add sign-out and me api handlers * setup logger * move types around * add session related functions * setup signin route, and auth checks * dont need session secret * resolve un-resolved merge conflicts --------- Co-authored-by: Vidhi <151131126+vidhipec27@users.noreply.github.com> Co-authored-by: KD --- .env.example | 1 + README.md | 11 - biome.json | 38 +- package.json | 17 +- pnpm-lock.yaml | 1370 +++++++++++++++++++++--- pnpm-workspace.yaml | 5 + src/lib/api/handlers/auth.ts | 82 +- src/lib/api/handlers/events.ts | 1 + src/lib/api/handlers/user.ts | 1 + src/lib/api/types/index.ts | 5 + src/lib/api/types/schemas.ts | 16 +- src/lib/api/utils/helpers.ts | 3 +- src/lib/api/utils/macros.ts | 69 +- src/lib/constants/api.ts | 2 +- src/lib/env/server.ts | 4 +- src/lib/server/fns.ts | 52 + src/lib/server/session.ts | 27 + src/lib/types.ts | 19 + src/lib/utils.ts | 14 + src/routeTree.gen.ts | 72 +- src/router.tsx | 2 +- src/routes/(auth)/sign-in.tsx | 149 +++ src/routes/__root.tsx | 18 +- src/routes/_authed.tsx | 15 + src/routes/_authed/dashboard/index.tsx | 30 + src/routes/api.$.ts | 31 + src/routes/index.tsx | 9 +- src/styles.css | 12 - src/styles/app.css | 14 + tsconfig.json | 3 +- vite.config.ts | 10 +- 31 files changed, 1893 insertions(+), 209 deletions(-) create mode 100644 pnpm-workspace.yaml create mode 100644 src/lib/server/fns.ts create mode 100644 src/lib/server/session.ts create mode 100644 src/lib/types.ts create mode 100644 src/lib/utils.ts create mode 100644 src/routes/(auth)/sign-in.tsx create mode 100644 src/routes/_authed.tsx create mode 100644 src/routes/_authed/dashboard/index.tsx delete mode 100644 src/styles.css create mode 100644 src/styles/app.css diff --git a/.env.example b/.env.example index 28c12cd..5d261ca 100644 --- a/.env.example +++ b/.env.example @@ -3,6 +3,7 @@ SMTP_HOST="host_url_for_smtp" SMTP_PORT="port_number_for smtp" SMTP_EMAIL="email_for_smtp" SMTP_PASS="password_for_smtp" + POSTGRES_DB="acm" POSTGRES_USER="acmsecy" POSTGRES_PASSWORD="acmheads" diff --git a/README.md b/README.md index d3270f6..9a8ee63 100644 --- a/README.md +++ b/README.md @@ -8,19 +8,8 @@ The official website for PEC ACM. # Install dependencies pnpm install -<<<<<<< vidhi/backendstuff -Or - -``bash -pnpm install -pnpm dev -`` - -# Building For Production -======= # Start development server pnpm dev ->>>>>>> main # Build for production pnpm build diff --git a/biome.json b/biome.json index 2442e34..f373bb3 100644 --- a/biome.json +++ b/biome.json @@ -22,11 +22,45 @@ "indentWidth": 2, "attributePosition": "multiline" }, - "assist": { "actions": { "source": { "organizeImports": "on" } } }, + "assist": { + "actions": { + "source": { + "organizeImports": { + "level": "on", + "options": { + "groups": [ + { "type": true, "source": ["**"] }, + ":BLANK_LINE:", + [":URL:", ":PACKAGE_WITH_PROTOCOL:"], + ":BLANK_LINE:", + ":NODE:", + ":BUN:", + ":PACKAGE:", + ":BLANK_LINE:", + "$assets/**", + ":BLANK_LINE:", + "$components/**", + ":BLANK_LINE:", + "$data/**", + ":BLANK_LINE:", + "$hooks/**", + ":BLANK_LINE:", + "$lib/**", + ":BLANK_LINE:", + "$styles/**" + ] + } + } + } + } + }, "linter": { "enabled": true, "rules": { - "recommended": true + "recommended": true, + "correctness": { + "noUnusedImports": "error" + } } }, "javascript": { diff --git a/package.json b/package.json index 7fd5f09..74b80dc 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,10 @@ "private": true, "type": "module", "scripts": { - "dev": "vite dev --port 3000", + "container:up": "docker compose up -d", + "container:down": "docker compose down -v", + "dev:app": "vite dev", + "dev": "concurrently -n 'api,app' -c blue,green,magenta 'pnpm container:up' 'pnpm dev:app'", "build": "vite build", "serve": "vite preview", "test": "vitest run", @@ -11,18 +14,22 @@ "format:write": "biome format --write", "lint": "biome lint", "check": "biome check", - "check:write": "biome check", + "check:write": "biome check --write", "prepare": "husky", "email:dev": "email dev --dir=./src/emails --port=2999" }, "dependencies": { + "@bogeychan/elysia-logger": "^0.1.10", "@elysiajs/eden": "^1.4.5", "@elysiajs/openapi": "^1.4.11", + "@fontsource/space-grotesk": "^5.2.10", "@netlify/vite-plugin-tanstack-start": "^1.0.2", "@react-email/components": "1.0.2", "@t3-oss/env-core": "^0.13.8", + "@tailwindcss/vite": "^4.1.18", "@tanstack/react-devtools": "^0.7.0", "@tanstack/react-form": "^1.0.0", + "@tanstack/react-form-start": "^1.28.0", "@tanstack/react-query": "^5.66.5", "@tanstack/react-query-devtools": "^5.84.2", "@tanstack/react-router": "^1.132.0", @@ -30,10 +37,15 @@ "@tanstack/react-router-ssr-query": "^1.131.7", "@tanstack/react-start": "^1.132.0", "@tanstack/router-plugin": "^1.132.0", + "concurrently": "^9.2.1", + "dotenv": "^17.2.4", "elysia": "^1.4.19", "nodemailer": "^7.0.12", + "pino": "^10.3.1", + "pino-pretty": "^13.1.3", "react": "^19.2.0", "react-dom": "^19.2.0", + "tailwindcss": "^4.1.18", "vite-tsconfig-paths": "^5.1.4", "zod": "^4.1.11" }, @@ -55,7 +67,6 @@ "sass": "^1.94.0", "typescript": "^5.7.2", "vite": "^7.1.7", - "vite-plugin-sass": "^0.1.0", "vitest": "^3.0.5", "web-vitals": "^5.1.0" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 21a58e4..533580a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,27 +8,39 @@ importers: .: dependencies: + '@bogeychan/elysia-logger': + specifier: ^0.1.10 + version: 0.1.10(elysia@1.4.19(@sinclair/typebox@0.34.41)(exact-mirror@0.2.5(@sinclair/typebox@0.34.41))(file-type@21.1.1)(openapi-types@12.1.3)(typescript@5.9.3))(pino@10.3.1) '@elysiajs/eden': specifier: ^1.4.5 version: 1.4.5(elysia@1.4.19(@sinclair/typebox@0.34.41)(exact-mirror@0.2.5(@sinclair/typebox@0.34.41))(file-type@21.1.1)(openapi-types@12.1.3)(typescript@5.9.3)) '@elysiajs/openapi': specifier: ^1.4.11 version: 1.4.11(elysia@1.4.19(@sinclair/typebox@0.34.41)(exact-mirror@0.2.5(@sinclair/typebox@0.34.41))(file-type@21.1.1)(openapi-types@12.1.3)(typescript@5.9.3)) + '@fontsource/space-grotesk': + specifier: ^5.2.10 + version: 5.2.10 '@netlify/vite-plugin-tanstack-start': specifier: ^1.0.2 - version: 1.1.12(@netlify/api@14.0.10)(@tanstack/react-start@1.136.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1)))(rollup@4.53.2)(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1)) + version: 1.1.12(@netlify/api@14.0.10)(@tanstack/react-start@1.136.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1)))(rollup@4.53.2)(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1)) '@react-email/components': specifier: 1.0.2 version: 1.0.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@t3-oss/env-core': specifier: ^0.13.8 version: 0.13.8(typescript@5.9.3)(zod@4.1.12) + '@tailwindcss/vite': + specifier: ^4.1.18 + version: 4.1.18(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1)) '@tanstack/react-devtools': specifier: ^0.7.0 version: 0.7.11(@types/react-dom@19.2.3(@types/react@19.2.5))(@types/react@19.2.5)(csstype@3.2.3)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(solid-js@1.9.10) '@tanstack/react-form': specifier: ^1.0.0 - version: 1.25.0(@tanstack/react-start@1.136.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1)))(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 1.25.0(@tanstack/react-start@1.136.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1)))(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@tanstack/react-form-start': + specifier: ^1.28.0 + version: 1.28.0(@tanstack/react-start@1.136.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1)))(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@tanstack/react-query': specifier: ^5.66.5 version: 5.90.10(react@19.2.0) @@ -40,31 +52,46 @@ importers: version: 1.136.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@tanstack/react-router-devtools': specifier: ^1.132.0 - version: 1.136.8(@tanstack/react-router@1.136.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@tanstack/router-core@1.136.8)(@types/node@22.19.1)(csstype@3.2.3)(jiti@2.6.1)(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.94.0)(solid-js@1.9.10)(tsx@4.20.6)(yaml@2.8.1) + version: 1.136.8(@tanstack/react-router@1.136.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@tanstack/router-core@1.136.8)(@types/node@22.19.1)(csstype@3.2.3)(jiti@2.6.1)(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass-embedded@1.97.3)(sass@1.94.0)(solid-js@1.9.10)(tsx@4.20.6)(yaml@2.8.1) '@tanstack/react-router-ssr-query': specifier: ^1.131.7 version: 1.136.8(@tanstack/query-core@5.90.10)(@tanstack/react-query@5.90.10(react@19.2.0))(@tanstack/react-router@1.136.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@tanstack/router-core@1.136.8)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@tanstack/react-start': specifier: ^1.132.0 - version: 1.136.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1)) + version: 1.136.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1)) '@tanstack/router-plugin': specifier: ^1.132.0 - version: 1.136.8(@tanstack/react-router@1.136.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1)) + version: 1.136.8(@tanstack/react-router@1.136.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1)) + concurrently: + specifier: ^9.2.1 + version: 9.2.1 + dotenv: + specifier: ^17.2.4 + version: 17.2.4 elysia: specifier: ^1.4.19 version: 1.4.19(@sinclair/typebox@0.34.41)(exact-mirror@0.2.5(@sinclair/typebox@0.34.41))(file-type@21.1.1)(openapi-types@12.1.3)(typescript@5.9.3) nodemailer: specifier: ^7.0.12 version: 7.0.12 + pino: + specifier: ^10.3.1 + version: 10.3.1 + pino-pretty: + specifier: ^13.1.3 + version: 13.1.3 react: specifier: ^19.2.0 version: 19.2.0 react-dom: specifier: ^19.2.0 version: 19.2.0(react@19.2.0) + tailwindcss: + specifier: ^4.1.18 + version: 4.1.18 vite-tsconfig-paths: specifier: ^5.1.4 - version: 5.1.4(typescript@5.9.3)(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1)) + version: 5.1.4(typescript@5.9.3)(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1)) zod: specifier: ^4.1.11 version: 4.1.12 @@ -77,7 +104,7 @@ importers: version: 5.1.0(@babel/core@7.28.5)(@opentelemetry/api@1.9.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.94.0) '@tanstack/devtools-vite': specifier: ^0.3.11 - version: 0.3.11(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1)) + version: 0.3.11(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1)) '@testing-library/dom': specifier: ^10.4.0 version: 10.4.1 @@ -98,7 +125,7 @@ importers: version: 19.2.3(@types/react@19.2.5) '@vitejs/plugin-react': specifier: ^5.0.4 - version: 5.1.1(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1)) + version: 5.1.1(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1)) babel-plugin-react-compiler: specifier: ^1.0.0 version: 1.0.0 @@ -119,13 +146,10 @@ importers: version: 5.9.3 vite: specifier: ^7.1.7 - version: 7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1) - vite-plugin-sass: - specifier: ^0.1.0 - version: 0.1.0 + version: 7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1) vitest: specifier: ^3.0.5 - version: 3.2.4(@types/node@22.19.1)(jiti@2.6.1)(jsdom@27.2.0)(lightningcss@1.30.2)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1) + version: 3.2.4(@types/node@22.19.1)(jiti@2.6.1)(jsdom@27.2.0)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1) web-vitals: specifier: ^5.1.0 version: 5.1.0 @@ -475,9 +499,18 @@ packages: cpu: [x64] os: [win32] + '@bogeychan/elysia-logger@0.1.10': + resolution: {integrity: sha512-wFp3KUCNIkCV4zcbo70gifHH99ch7e4LNrP5Xa5e2MRO2MDyPgM92SWQmrzkng6PsSZk13+UKJskGNQ+ZuDZkQ==} + peerDependencies: + elysia: '>= 1.2.10' + pino: '>= 9.6.0' + '@borewit/text-codec@0.1.1': resolution: {integrity: sha512-5L/uBxmjaCIX5h8Z+uu+kA9BQLkc/Wl06UGR5ajNRxu+/XjonB5i8JpgFMrPj3LXTCPA0pv8yxUvbUi+QthGGA==} + '@bufbuild/protobuf@2.11.0': + resolution: {integrity: sha512-sBXGT13cpmPR5BMgHE6UEEfEaShh5Ror6rfN3yEK5si7QVrtZg8LEPQb0VVhiLRUslD2yLnXtnRzG035J/mZXQ==} + '@colors/colors@1.6.0': resolution: {integrity: sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==} engines: {node: '>=0.1.90'} @@ -856,6 +889,9 @@ packages: '@fastify/busboy@3.2.0': resolution: {integrity: sha512-m9FVDXU3GT2ITSe0UaMA5rU3QkfC/UXtCU8y0gSN/GugTqtVldOBWIB5V6V3sbmenVZUIpU6f+mPEO2+m5iTaA==} + '@fontsource/space-grotesk@5.2.10': + resolution: {integrity: sha512-XNXEbT74OIITPqw2H6HXwPDp85fy43uxfBwFR5PU+9sLnjuLj12KlhVM9nZVN6q6dlKjkuN8JisW/OBxwxgUew==} + '@humanwhocodes/momoa@2.0.4': resolution: {integrity: sha512-RE815I4arJFtt+FVeU1Tgp9/Xvecacji8w/V6XtXsWWH/wz/eNkNbhb+ny/+PlVZjV0rxQpRSQKNKE3lcktHEA==} engines: {node: '>=10.10.0'} @@ -1418,6 +1454,9 @@ packages: resolution: {integrity: sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==} engines: {node: '>= 10.0.0'} + '@pinojs/redact@0.4.0': + resolution: {integrity: sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg==} + '@pkgjs/parseargs@0.11.0': resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} @@ -1971,6 +2010,96 @@ packages: zod: optional: true + '@tailwindcss/node@4.1.18': + resolution: {integrity: sha512-DoR7U1P7iYhw16qJ49fgXUlry1t4CpXeErJHnQ44JgTSKMaZUdf17cfn5mHchfJ4KRBZRFA/Coo+MUF5+gOaCQ==} + + '@tailwindcss/oxide-android-arm64@4.1.18': + resolution: {integrity: sha512-dJHz7+Ugr9U/diKJA0W6N/6/cjI+ZTAoxPf9Iz9BFRF2GzEX8IvXxFIi/dZBloVJX/MZGvRuFA9rqwdiIEZQ0Q==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [android] + + '@tailwindcss/oxide-darwin-arm64@4.1.18': + resolution: {integrity: sha512-Gc2q4Qhs660bhjyBSKgq6BYvwDz4G+BuyJ5H1xfhmDR3D8HnHCmT/BSkvSL0vQLy/nkMLY20PQ2OoYMO15Jd0A==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + '@tailwindcss/oxide-darwin-x64@4.1.18': + resolution: {integrity: sha512-FL5oxr2xQsFrc3X9o1fjHKBYBMD1QZNyc1Xzw/h5Qu4XnEBi3dZn96HcHm41c/euGV+GRiXFfh2hUCyKi/e+yw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + '@tailwindcss/oxide-freebsd-x64@4.1.18': + resolution: {integrity: sha512-Fj+RHgu5bDodmV1dM9yAxlfJwkkWvLiRjbhuO2LEtwtlYlBgiAT4x/j5wQr1tC3SANAgD+0YcmWVrj8R9trVMA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [freebsd] + + '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.18': + resolution: {integrity: sha512-Fp+Wzk/Ws4dZn+LV2Nqx3IilnhH51YZoRaYHQsVq3RQvEl+71VGKFpkfHrLM/Li+kt5c0DJe/bHXK1eHgDmdiA==} + engines: {node: '>= 10'} + cpu: [arm] + os: [linux] + + '@tailwindcss/oxide-linux-arm64-gnu@4.1.18': + resolution: {integrity: sha512-S0n3jboLysNbh55Vrt7pk9wgpyTTPD0fdQeh7wQfMqLPM/Hrxi+dVsLsPrycQjGKEQk85Kgbx+6+QnYNiHalnw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@tailwindcss/oxide-linux-arm64-musl@4.1.18': + resolution: {integrity: sha512-1px92582HkPQlaaCkdRcio71p8bc8i/ap5807tPRDK/uw953cauQBT8c5tVGkOwrHMfc2Yh6UuxaH4vtTjGvHg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@tailwindcss/oxide-linux-x64-gnu@4.1.18': + resolution: {integrity: sha512-v3gyT0ivkfBLoZGF9LyHmts0Isc8jHZyVcbzio6Wpzifg/+5ZJpDiRiUhDLkcr7f/r38SWNe7ucxmGW3j3Kb/g==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@tailwindcss/oxide-linux-x64-musl@4.1.18': + resolution: {integrity: sha512-bhJ2y2OQNlcRwwgOAGMY0xTFStt4/wyU6pvI6LSuZpRgKQwxTec0/3Scu91O8ir7qCR3AuepQKLU/kX99FouqQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@tailwindcss/oxide-wasm32-wasi@4.1.18': + resolution: {integrity: sha512-LffYTvPjODiP6PT16oNeUQJzNVyJl1cjIebq/rWWBF+3eDst5JGEFSc5cWxyRCJ0Mxl+KyIkqRxk1XPEs9x8TA==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + bundledDependencies: + - '@napi-rs/wasm-runtime' + - '@emnapi/core' + - '@emnapi/runtime' + - '@tybys/wasm-util' + - '@emnapi/wasi-threads' + - tslib + + '@tailwindcss/oxide-win32-arm64-msvc@4.1.18': + resolution: {integrity: sha512-HjSA7mr9HmC8fu6bdsZvZ+dhjyGCLdotjVOgLA2vEqxEBZaQo9YTX4kwgEvPCpRh8o4uWc4J/wEoFzhEmjvPbA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + + '@tailwindcss/oxide-win32-x64-msvc@4.1.18': + resolution: {integrity: sha512-bJWbyYpUlqamC8dpR7pfjA0I7vdF6t5VpUGMWRkXVE3AXgIZjYUYAK7II1GNaxR8J1SSrSrppRar8G++JekE3Q==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + + '@tailwindcss/oxide@4.1.18': + resolution: {integrity: sha512-EgCR5tTS5bUSKQgzeMClT6iCY3ToqE1y+ZB0AKldj809QXk1Y+3jB0upOYZrn9aGIzPtUsP7sX4QQ4XtjBB95A==} + engines: {node: '>= 10'} + + '@tailwindcss/vite@4.1.18': + resolution: {integrity: sha512-jVA+/UpKL1vRLg6Hkao5jldawNmRo7mQYrZtNHMIVpLfLhDml5nMRUo/8MwoX2vNXvnaXNNMedrMfMugAVX1nA==} + peerDependencies: + vite: ^5.2.0 || ^6 || ^7 + '@tanstack/devtools-client@0.0.3': resolution: {integrity: sha512-kl0r6N5iIL3t9gGDRAv55VRM3UIyMKVH83esRGq7xBjYsRLe/BeCIN2HqrlJkObUXQMKhy7i8ejuGOn+bDqDBw==} engines: {node: '>=18'} @@ -1987,6 +2116,10 @@ packages: resolution: {integrity: sha512-RL1f5ZlfZMpghrCIdzl6mLOFLTuhqmPNblZgBaeKfdtk5rfbjykurv+VfYydOFXj0vxVIoA2d/zT7xfD7Ph8fw==} engines: {node: '>=18'} + '@tanstack/devtools-event-client@0.4.0': + resolution: {integrity: sha512-RPfGuk2bDZgcu9bAJodvO2lnZeHuz4/71HjZ0bGb/SPg8+lyTA+RLSKQvo7fSmPSi8/vcH3aKQ8EM9ywf1olaw==} + engines: {node: '>=18'} + '@tanstack/devtools-ui@0.4.4': resolution: {integrity: sha512-5xHXFyX3nom0UaNfiOM92o6ziaHjGo3mcSGe2HD5Xs8dWRZNpdZ0Smd0B9ddEhy0oB+gXyMzZgUJb9DmrZV0Mg==} engines: {node: '>=18'} @@ -2014,10 +2147,17 @@ packages: '@tanstack/form-core@1.25.0': resolution: {integrity: sha512-OEWW2uTOFMyRmHrVEiPOn+J27ekQ/vXwRAJt9kD8U8vCt8CmpClj989OOGGSBSVJtDNxGUcWyKF8gYznnqIyaw==} + '@tanstack/form-core@1.28.0': + resolution: {integrity: sha512-MX3YveB6SKHAJ2yUwp+Ca/PCguub8bVEnLcLUbFLwdkSRMkP0lMGdaZl+F0JuEgZw56c6iFoRyfILhS7OQpydA==} + '@tanstack/history@1.133.28': resolution: {integrity: sha512-B7+x7eP2FFvi3fgd3rNH9o/Eixt+pp0zCIdGhnQbAJjFrlwIKGjGnwyJjhWJ5fMQlGks/E2LdDTqEV4W9Plx7g==} engines: {node: '>=12'} + '@tanstack/pacer-lite@0.1.1': + resolution: {integrity: sha512-y/xtNPNt/YeyoVxE/JCx+T7yjEzpezmbb+toK8DDD1P4m7Kzs5YR956+7OKexG3f8aXgC3rLZl7b1V+yNUSy5w==} + engines: {node: '>=18'} + '@tanstack/pacer@0.15.4': resolution: {integrity: sha512-vGY+CWsFZeac3dELgB6UZ4c7OacwsLb8hvL2gLS6hTgy8Fl0Bm/aLokHaeDIP+q9F9HUZTnp360z9uv78eg8pg==} engines: {node: '>=18'} @@ -2037,6 +2177,15 @@ packages: react: '>=16.8' react-dom: '>=16.8' + '@tanstack/react-form-start@1.28.0': + resolution: {integrity: sha512-9DUHFeklJxI4MCt5YMEr1tdfWIvcEMOn0ZDTEb6TL9VnQk6HmZ3AUqO3OdBPOT+MtH2u6VZudqwtPd3SjYQDqQ==} + peerDependencies: + '@tanstack/react-start': ^1.134.9 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@tanstack/react-start': + optional: true + '@tanstack/react-form@1.25.0': resolution: {integrity: sha512-SjKpBkjegNVW9WU+qlO8+/+kSbSEwo2zwHnrQz/yOnnJRhtdgubUt50LfeUtdzkMsbbptQ5MSZrXH03kidQjyw==} peerDependencies: @@ -2046,6 +2195,15 @@ packages: '@tanstack/react-start': optional: true + '@tanstack/react-form@1.28.0': + resolution: {integrity: sha512-ibLcf5QkTogV0Ly944CuqGxWTpHyreNA4Cy8Wtky7zE9wtE3HVapQt4/hUuXo51zihfTkv5URiXpoTSKF5Xosg==} + peerDependencies: + '@tanstack/react-start': '*' + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@tanstack/react-start': + optional: true + '@tanstack/react-query-devtools@5.90.2': resolution: {integrity: sha512-vAXJzZuBXtCQtrY3F/yUNJCV4obT/A/n81kb3+YqLbro5Z2+phdAbceO+deU3ywPw8B42oyJlp4FhO0SoivDFQ==} peerDependencies: @@ -2485,6 +2643,10 @@ packages: async@3.2.6: resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} + atomic-sleep@1.0.0: + resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} + engines: {node: '>=8.0.0'} + atomically@2.1.0: resolution: {integrity: sha512-+gDffFXRW6sl/HCwbta7zK4uNqbPjv4YJEAdz7Vu+FLQHe77eZ4bvbJGi4hE0QPeJlMYMA3piXEr1UL3dAwx7Q==} @@ -2671,6 +2833,12 @@ packages: resolution: {integrity: sha512-ezmVcLR3xAVp8kYOm4GS45ZLLgIE6SPAFoduLr6hTDajwb3KZ2F46gulK3XpcwRFb5KKGCSezCBAY4Dw4HsyXA==} engines: {node: '>=18'} + colorette@2.0.20: + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + + colorjs.io@0.5.2: + resolution: {integrity: sha512-twmVoizEW7ylZSN32OgKdXRmo1qg+wT5/6C3xu5b9QsWzSFAhHLn2xd8ro0diCsKfCj1RdaTP/nrcW+vAoQPIw==} + commander@10.0.1: resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} engines: {node: '>=14'} @@ -2697,6 +2865,11 @@ packages: resolution: {integrity: sha512-6FqVXeETqWPoGcfzrXb37E50NP0LXT8kAMu5ooZayhWWdgEY4lBEEcbQNXtkuKQsGduxiIcI4gOTsxTmuq/bSg==} engines: {node: '>= 14'} + concurrently@9.2.1: + resolution: {integrity: sha512-fsfrO0MxV64Znoy8/l1vVIjjHa29SZyyqPgQBwhiDcaW8wJc2W3XWVOGx4M3oJBnv/zdUZIIp1gDeS98GzP8Ng==} + engines: {node: '>=18'} + hasBin: true + conf@15.0.2: resolution: {integrity: sha512-JBSrutapCafTrddF9dH3lc7+T2tBycGF4uPkI4Js+g4vLLEhG6RZcFi3aJd5zntdf5tQxAejJt8dihkoQ/eSJw==} engines: {node: '>=20'} @@ -2800,6 +2973,9 @@ packages: resolution: {integrity: sha512-BnBS08aLUM+DKamupXs3w2tJJoqU+AkaE/+6vQxi/G/DPmIZFJJp9Dkb1kM03AZx8ADehDUZgsNxju3mPXZYIA==} engines: {node: '>=20'} + dateformat@4.6.3: + resolution: {integrity: sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==} + debounce-fn@6.0.0: resolution: {integrity: sha512-rBMW+F2TXryBwB54Q0d8drNEI+TfoS9JpNTAoVpukbWEhjXQq4rySFYLaqXMFXwdv61Zb2OHtj5bviSoimqxRQ==} engines: {node: '>=18'} @@ -2832,6 +3008,9 @@ packages: decimal.js@10.6.0: resolution: {integrity: sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==} + decode-formdata@0.9.0: + resolution: {integrity: sha512-q5uwOjR3Um5YD+ZWPOF/1sGHVW9A5rCrRwITQChRXlmPkxDFBqCm4jNTIVdGHNH9OnR+V9MoZVgRhsFb+ARbUw==} + dedent@1.7.0: resolution: {integrity: sha512-HGFtf8yhuhGhqO07SV79tRp+br4MnbdjeVxotpn1QBl30pcLLCQjX5b2295ll0fv8RKDKsmWYrl05usHM9CewQ==} peerDependencies: @@ -2913,6 +3092,9 @@ packages: dettle@1.0.5: resolution: {integrity: sha512-ZVyjhAJ7sCe1PNXEGveObOH9AC8QvMga3HJIghHawtG7mE4K5pW9nz/vDGAr/U7a3LWgdOzEE7ac9MURnyfaTA==} + devalue@5.6.2: + resolution: {integrity: sha512-nPRkjWzzDQlsejL1WVifk5rvcFi/y1onBRxjaFMjZeR9mFpqu2gmAZ9xUB9/IEanEP/vBtGeGganC/GO1fmufg==} + diff@8.0.2: resolution: {integrity: sha512-sSuxWU5j5SR9QQji/o2qMvqRNYRDOcBTgsJ/DeCf4iSN4gW+gNMXM7wFIP+fdXZxoNiAnHUTGjCr+TSWXdRDKg==} engines: {node: '>=0.3.1'} @@ -2945,6 +3127,10 @@ packages: resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==} engines: {node: '>=12'} + dotenv@17.2.4: + resolution: {integrity: sha512-mudtfb4zRB4bVvdj0xRo+e6duH1csJRM8IukBqfTRvHotn9+LBXB8ynAidP9zHqoRC/fsllXgk4kCKlR21fIhw==} + engines: {node: '>=12'} + eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} @@ -2999,6 +3185,10 @@ packages: resolution: {integrity: sha512-ZCkIjSYNDyGn0R6ewHDtXgns/Zre/NT6Agvq1/WobF7JXgFff4SeDroKiCO3fNJreU9YG429Sc81o4w5ok/W5g==} engines: {node: '>=10.2.0'} + enhanced-resolve@5.19.0: + resolution: {integrity: sha512-phv3E1Xl4tQOShqSte26C7Fl84EwUdZsyOuSSk9qtAGyyQs2s3jJzComh+Abf4g187lUUAvH+H26omrqia2aGg==} + engines: {node: '>=10.13.0'} + entities@4.5.0: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} @@ -3099,6 +3289,9 @@ packages: engines: {node: '>= 10.17.0'} hasBin: true + fast-copy@4.0.2: + resolution: {integrity: sha512-ybA6PDXIXOXivLJK/z9e+Otk7ve13I4ckBvGO5I2RRmBU1gMHLVDJYEuJYhGwez7YNlYji2M2DvVU+a9mSFDlw==} + fast-decode-uri-component@1.0.1: resolution: {integrity: sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==} @@ -3276,6 +3469,9 @@ packages: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} + help-me@5.0.0: + resolution: {integrity: sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==} + hosted-git-info@7.0.2: resolution: {integrity: sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==} engines: {node: ^16.14.0 || >=18.0.0} @@ -3475,6 +3671,10 @@ packages: resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} hasBin: true + joycon@3.1.1: + resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} + engines: {node: '>=10'} + jpeg-js@0.4.4: resolution: {integrity: sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg==} @@ -3921,6 +4121,10 @@ packages: omit.js@2.0.2: resolution: {integrity: sha512-hJmu9D+bNB40YpL9jYebQl4lsTW6yEHRTroJzNLqQJYHm7c+NQnJGfZmIWh8S3q3KoaxV1aLhV6B3+0N0/kyJg==} + on-exit-leak-free@2.1.2: + resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==} + engines: {node: '>=14.0.0'} + once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} @@ -4057,6 +4261,20 @@ packages: picoquery@2.5.0: resolution: {integrity: sha512-j1kgOFxtaCyoFCkpoYG2Oj3OdGakadO7HZ7o5CqyRazlmBekKhbDoUnNnXASE07xSY4nDImWZkrZv7toSxMi/g==} + pino-abstract-transport@3.0.0: + resolution: {integrity: sha512-wlfUczU+n7Hy/Ha5j9a/gZNy7We5+cXp8YL+X+PG8S0KXxw7n/JXA3c46Y0zQznIJ83URJiwy7Lh56WLokNuxg==} + + pino-pretty@13.1.3: + resolution: {integrity: sha512-ttXRkkOz6WWC95KeY9+xxWL6AtImwbyMHrL1mSwqwW9u+vLp/WIElvHvCSDg0xO/Dzrggz1zv3rN5ovTRVowKg==} + hasBin: true + + pino-std-serializers@7.1.0: + resolution: {integrity: sha512-BndPH67/JxGExRgiX1dX0w1FvZck5Wa4aal9198SrRhZjH3GxKQUKIBnYJTdj2HDN3UQAS06HlfcSbQj2OHmaw==} + + pino@10.3.1: + resolution: {integrity: sha512-r34yH/GlQpKZbU1BvFFqOjhISRo1MNx1tWYsYvmj6KIRHSPMT2+yHOEb1SG6NMvRoHRF0a07kCOox/9yakl1vg==} + hasBin: true + pkg-types@1.3.1: resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} @@ -4098,6 +4316,9 @@ packages: process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + process-warning@5.0.0: + resolution: {integrity: sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA==} + process@0.11.10: resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} engines: {node: '>= 0.6.0'} @@ -4120,6 +4341,9 @@ packages: queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + quick-format-unescaped@4.0.4: + resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} + quote-unquote@1.0.0: resolution: {integrity: sha512-twwRO/ilhlG/FIgYeKGFqyHhoEhqgnKVkcmqMKi2r524gz3ZbDTcyFt38E9xjJI2vT+KbRNHVbnJ/e0I25Azwg==} @@ -4177,6 +4401,10 @@ packages: resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} engines: {node: '>= 14.18.0'} + real-require@0.2.0: + resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==} + engines: {node: '>= 12.13.0'} + recast@0.23.11: resolution: {integrity: sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA==} engines: {node: '>= 4'} @@ -4238,6 +4466,9 @@ packages: run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + rxjs@7.8.2: + resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} + safe-buffer@5.1.2: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} @@ -4251,11 +4482,125 @@ packages: safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + sass-embedded-all-unknown@1.97.3: + resolution: {integrity: sha512-t6N46NlPuXiY3rlmG6/+1nwebOBOaLFOOVqNQOC2cJhghOD4hh2kHNQQTorCsbY9S1Kir2la1/XLBwOJfui0xg==} + cpu: ['!arm', '!arm64', '!riscv64', '!x64'] + + sass-embedded-android-arm64@1.97.3: + resolution: {integrity: sha512-aiZ6iqiHsUsaDx0EFbbmmA0QgxicSxVVN3lnJJ0f1RStY0DthUkquGT5RJ4TPdaZ6ebeJWkboV4bra+CP766eA==} + engines: {node: '>=14.0.0'} + cpu: [arm64] + os: [android] + + sass-embedded-android-arm@1.97.3: + resolution: {integrity: sha512-cRTtf/KV/q0nzGZoUzVkeIVVFv3L/tS1w4WnlHapphsjTXF/duTxI8JOU1c/9GhRPiMdfeXH7vYNcMmtjwX7jg==} + engines: {node: '>=14.0.0'} + cpu: [arm] + os: [android] + + sass-embedded-android-riscv64@1.97.3: + resolution: {integrity: sha512-zVEDgl9JJodofGHobaM/q6pNETG69uuBIGQHRo789jloESxxZe82lI3AWJQuPmYCOG5ElfRthqgv89h3gTeLYA==} + engines: {node: '>=14.0.0'} + cpu: [riscv64] + os: [android] + + sass-embedded-android-x64@1.97.3: + resolution: {integrity: sha512-3ke0le7ZKepyXn/dKKspYkpBC0zUk/BMciyP5ajQUDy4qJwobd8zXdAq6kOkdiMB+d9UFJOmEkvgFJHl3lqwcw==} + engines: {node: '>=14.0.0'} + cpu: [x64] + os: [android] + + sass-embedded-darwin-arm64@1.97.3: + resolution: {integrity: sha512-fuqMTqO4gbOmA/kC5b9y9xxNYw6zDEyfOtMgabS7Mz93wimSk2M1quQaTJnL98Mkcsl2j+7shNHxIS/qpcIDDA==} + engines: {node: '>=14.0.0'} + cpu: [arm64] + os: [darwin] + + sass-embedded-darwin-x64@1.97.3: + resolution: {integrity: sha512-b/2RBs/2bZpP8lMkyZ0Px0vkVkT8uBd0YXpOwK7iOwYkAT8SsO4+WdVwErsqC65vI5e1e5p1bb20tuwsoQBMVA==} + engines: {node: '>=14.0.0'} + cpu: [x64] + os: [darwin] + + sass-embedded-linux-arm64@1.97.3: + resolution: {integrity: sha512-IP1+2otCT3DuV46ooxPaOKV1oL5rLjteRzf8ldZtfIEcwhSgSsHgA71CbjYgLEwMY9h4jeal8Jfv3QnedPvSjg==} + engines: {node: '>=14.0.0'} + cpu: [arm64] + os: [linux] + + sass-embedded-linux-arm@1.97.3: + resolution: {integrity: sha512-2lPQ7HQQg4CKsH18FTsj2hbw5GJa6sBQgDsls+cV7buXlHjqF8iTKhAQViT6nrpLK/e8nFCoaRgSqEC8xMnXuA==} + engines: {node: '>=14.0.0'} + cpu: [arm] + os: [linux] + + sass-embedded-linux-musl-arm64@1.97.3: + resolution: {integrity: sha512-Lij0SdZCsr+mNRSyDZ7XtJpXEITrYsaGbOTz5e6uFLJ9bmzUbV7M8BXz2/cA7bhfpRPT7/lwRKPdV4+aR9Ozcw==} + engines: {node: '>=14.0.0'} + cpu: [arm64] + os: [linux] + + sass-embedded-linux-musl-arm@1.97.3: + resolution: {integrity: sha512-cBTMU68X2opBpoYsSZnI321gnoaiMBEtc+60CKCclN6PCL3W3uXm8g4TLoil1hDD6mqU9YYNlVG6sJ+ZNef6Lg==} + engines: {node: '>=14.0.0'} + cpu: [arm] + os: [linux] + + sass-embedded-linux-musl-riscv64@1.97.3: + resolution: {integrity: sha512-sBeLFIzMGshR4WmHAD4oIM7WJVkSoCIEwutzptFtGlSlwfNiijULp+J5hA2KteGvI6Gji35apR5aWj66wEn/iA==} + engines: {node: '>=14.0.0'} + cpu: [riscv64] + os: [linux] + + sass-embedded-linux-musl-x64@1.97.3: + resolution: {integrity: sha512-/oWJ+OVrDg7ADDQxRLC/4g1+Nsz1g4mkYS2t6XmyMJKFTFK50FVI2t5sOdFH+zmMp+nXHKM036W94y9m4jjEcw==} + engines: {node: '>=14.0.0'} + cpu: [x64] + os: [linux] + + sass-embedded-linux-riscv64@1.97.3: + resolution: {integrity: sha512-l3IfySApLVYdNx0Kjm7Zehte1CDPZVcldma3dZt+TfzvlAEerM6YDgsk5XEj3L8eHBCgHgF4A0MJspHEo2WNfA==} + engines: {node: '>=14.0.0'} + cpu: [riscv64] + os: [linux] + + sass-embedded-linux-x64@1.97.3: + resolution: {integrity: sha512-Kwqwc/jSSlcpRjULAOVbndqEy2GBzo6OBmmuBVINWUaJLJ8Kczz3vIsDUWLfWz/kTEw9FHBSiL0WCtYLVAXSLg==} + engines: {node: '>=14.0.0'} + cpu: [x64] + os: [linux] + + sass-embedded-unknown-all@1.97.3: + resolution: {integrity: sha512-/GHajyYJmvb0IABUQHbVHf1nuHPtIDo/ClMZ81IDr59wT5CNcMe7/dMNujXwWugtQVGI5UGmqXWZQCeoGnct8Q==} + os: ['!android', '!darwin', '!linux', '!win32'] + + sass-embedded-win32-arm64@1.97.3: + resolution: {integrity: sha512-RDGtRS1GVvQfMGAmVXNxYiUOvPzn9oO1zYB/XUM9fudDRnieYTcUytpNTQZLs6Y1KfJxgt5Y+giRceC92fT8Uw==} + engines: {node: '>=14.0.0'} + cpu: [arm64] + os: [win32] + + sass-embedded-win32-x64@1.97.3: + resolution: {integrity: sha512-SFRa2lED9UEwV6vIGeBXeBOLKF+rowF3WmNfb/BzhxmdAsKofCXrJ8ePW7OcDVrvNEbTOGwhsReIsF5sH8fVaw==} + engines: {node: '>=14.0.0'} + cpu: [x64] + os: [win32] + + sass-embedded@1.97.3: + resolution: {integrity: sha512-eKzFy13Nk+IRHhlAwP3sfuv+PzOrvzUkwJK2hdoCKYcWGSdmwFpeGpWmyewdw8EgBnsKaSBtgf/0b2K635ecSA==} + engines: {node: '>=16.0.0'} + hasBin: true + sass@1.94.0: resolution: {integrity: sha512-Dqh7SiYcaFtdv5Wvku6QgS5IGPm281L+ZtVD1U2FJa7Q0EFRlq8Z3sjYtz6gYObsYThUOz9ArwFqPZx+1azILQ==} engines: {node: '>=14.0.0'} hasBin: true + sass@1.97.3: + resolution: {integrity: sha512-fDz1zJpd5GycprAbu4Q2PV/RprsRtKC/0z82z0JLgdytmcq0+ujJbJ/09bPGDxCLkKY3Np5cRAOcWiVkLXJURg==} + engines: {node: '>=14.0.0'} + hasBin: true + sax@1.4.3: resolution: {integrity: sha512-yqYn1JhPczigF94DMS+shiDMjDowYO6y9+wB/4WgO0Y19jWYk0lQ4tuG5KI7kj4FTp1wxPj5IFfcrz/s1c3jjQ==} @@ -4266,6 +4611,9 @@ packages: scheduler@0.27.0: resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} + secure-json-parse@4.1.0: + resolution: {integrity: sha512-l4KnYfEyqYJxDwlNVyRfO2E4NTHfMKAWdUuA8J0yve2Dz/E/PdBepY03RvyJpssIpRFwJoCD55wA+mEDs6ByWA==} + selderee@0.11.0: resolution: {integrity: sha512-5TF+l7p4+OsnP8BCCvSyZiSPc4x4//p5uPwK8TCnVPJYRmU2aYKMpOXvw8zM5a5JvuuCGN1jmsMwuU2W02ukfA==} @@ -4341,6 +4689,9 @@ packages: solid-js@1.9.10: resolution: {integrity: sha512-Coz956cos/EPDlhs6+jsdTxKuJDPT7B5SVIWgABwROyxjY7Xbr8wkzD68Et+NxnV7DLJ3nJdAC2r9InuV/4Jew==} + sonic-boom@4.2.1: + resolution: {integrity: sha512-w6AxtubXa2wTXAUsZMMWERrsIRAdrK0Sc+FUytWvYAhBJLyuI4llrMIC1DtlNSdI99EI86KZum2MMq3EAZlF9Q==} + source-map-js@1.2.1: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} @@ -4368,6 +4719,10 @@ packages: spdx-license-ids@3.0.22: resolution: {integrity: sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==} + split2@4.2.0: + resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} + engines: {node: '>= 10.x'} + sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} @@ -4426,6 +4781,10 @@ packages: resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} engines: {node: '>=12'} + strip-json-comments@5.0.3: + resolution: {integrity: sha512-1tB5mhVo7U+ETBKNf92xT4hrQa3pm0MZ0PQvuDnWgAAGHDsfp4lPSpiS6psrSiet87wyGPh9ft6wmhOMQ0hDiw==} + engines: {node: '>=14.16'} + strip-literal@3.1.0: resolution: {integrity: sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==} @@ -4459,6 +4818,10 @@ packages: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} + supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} @@ -4471,6 +4834,14 @@ packages: symbol-tree@3.2.4: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} + sync-child-process@1.0.2: + resolution: {integrity: sha512-8lD+t2KrrScJ/7KXCSyfhT3/hRq78rC0wBFqNJXv3mZyn6hW2ypM05JmlSvtqRbeq6jqA94oHbxAr2vYsJ8vDA==} + engines: {node: '>=16.0.0'} + + sync-message-port@1.2.0: + resolution: {integrity: sha512-gAQ9qrUN/UCypHtGFbbe7Rc/f9bzO88IwrG8TDo/aMKAApKyD6E3W4Cm0EfhfBb6Z6SKt59tTCTfD+n1xmAvMg==} + engines: {node: '>=16.0.0'} + system-architecture@0.1.0: resolution: {integrity: sha512-ulAk51I9UVUyJgxlv9M6lFot2WP3e7t8Kz9+IS6D4rVba1tR9kON+Ey69f+1R4Q8cd45Lod6a4IcJIxnzGc/zA==} engines: {node: '>=18'} @@ -4482,6 +4853,10 @@ packages: tailwindcss@4.1.18: resolution: {integrity: sha512-4+Z+0yiYyEtUVCScyfHCxOYP06L5Ne+JiHhY2IjR2KWMIWhJOYZKLSGZaP5HkZ8+bY0cxfzwDE5uOmzFXyIwxw==} + tapable@2.3.0: + resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==} + engines: {node: '>=6'} + tar-stream@3.1.7: resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==} @@ -4495,6 +4870,10 @@ packages: text-hex@1.0.0: resolution: {integrity: sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==} + thread-stream@4.0.0: + resolution: {integrity: sha512-4iMVL6HAINXWf1ZKZjIPcz5wYaOdPhtO8ATvZ+Xqp3BTdaqtAwQkNmKORqcIo5YkQqGXq5cwfswDwMqqQNrpJA==} + engines: {node: '>=20'} + tiny-invariant@1.3.3: resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} @@ -4562,6 +4941,10 @@ packages: resolution: {integrity: sha512-bLVMLPtstlZ4iMQHpFHTR7GAGj2jxi8Dg0s2h2MafAE4uSWF98FC/3MomU51iQAMf8/qDUbKWf5GxuvvVcXEhw==} engines: {node: '>=20'} + tree-kill@1.2.2: + resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} + hasBin: true + triple-beam@1.4.1: resolution: {integrity: sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==} engines: {node: '>= 14.0.0'} @@ -4740,6 +5123,9 @@ packages: resolution: {integrity: sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + varint@6.0.0: + resolution: {integrity: sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==} + vary@1.1.2: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} @@ -4749,9 +5135,6 @@ packages: engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true - vite-plugin-sass@0.1.0: - resolution: {integrity: sha512-gLwvs3ozfDAOZCqs+PepkTd4078m8tfq50IlmTW/OphlWsW95uP7lQ5A3NezfUfTZDTCOA4nFlYnOWRpsKYOqw==} - vite-tsconfig-paths@5.1.4: resolution: {integrity: sha512-cYj0LRuLV2c2sMqhqhGpaO3LretdtMn/BVX4cPLanIZuwwrkVl+lK84E/miEXkCHWXuq65rhNN4rXsBcOB3S4w==} peerDependencies: @@ -5652,8 +6035,16 @@ snapshots: '@biomejs/cli-win32-x64@2.2.4': optional: true + '@bogeychan/elysia-logger@0.1.10(elysia@1.4.19(@sinclair/typebox@0.34.41)(exact-mirror@0.2.5(@sinclair/typebox@0.34.41))(file-type@21.1.1)(openapi-types@12.1.3)(typescript@5.9.3))(pino@10.3.1)': + dependencies: + elysia: 1.4.19(@sinclair/typebox@0.34.41)(exact-mirror@0.2.5(@sinclair/typebox@0.34.41))(file-type@21.1.1)(openapi-types@12.1.3)(typescript@5.9.3) + pino: 10.3.1 + '@borewit/text-codec@0.1.1': {} + '@bufbuild/protobuf@2.11.0': + optional: true + '@colors/colors@1.6.0': {} '@csstools/color-helpers@5.1.0': {} @@ -5867,6 +6258,8 @@ snapshots: '@fastify/busboy@3.2.0': {} + '@fontsource/space-grotesk@5.2.10': {} + '@humanwhocodes/momoa@2.0.4': {} '@iarna/toml@2.2.5': {} @@ -6278,12 +6671,12 @@ snapshots: '@netlify/types@2.2.0': {} - '@netlify/vite-plugin-tanstack-start@1.1.12(@netlify/api@14.0.10)(@tanstack/react-start@1.136.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1)))(rollup@4.53.2)(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1))': + '@netlify/vite-plugin-tanstack-start@1.1.12(@netlify/api@14.0.10)(@tanstack/react-start@1.136.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1)))(rollup@4.53.2)(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1))': dependencies: - '@netlify/vite-plugin': 2.7.12(@netlify/api@14.0.10)(rollup@4.53.2)(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1)) - vite: 7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1) + '@netlify/vite-plugin': 2.7.12(@netlify/api@14.0.10)(rollup@4.53.2)(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1)) + vite: 7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1) optionalDependencies: - '@tanstack/react-start': 1.136.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1)) + '@tanstack/react-start': 1.136.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1)) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -6311,12 +6704,12 @@ snapshots: - supports-color - uploadthing - '@netlify/vite-plugin@2.7.12(@netlify/api@14.0.10)(rollup@4.53.2)(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1))': + '@netlify/vite-plugin@2.7.12(@netlify/api@14.0.10)(rollup@4.53.2)(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1))': dependencies: '@netlify/dev': 4.8.0(@netlify/api@14.0.10)(rollup@4.53.2) '@netlify/dev-utils': 4.3.1 dedent: 1.7.0 - vite: 7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -6592,6 +6985,8 @@ snapshots: '@parcel/watcher-win32-ia32': 2.5.1 '@parcel/watcher-win32-x64': 2.5.1 + '@pinojs/redact@0.4.0': {} + '@pkgjs/parseargs@0.11.0': optional: true @@ -6755,83 +7150,492 @@ snapshots: dependencies: react: 19.2.0 - '@rolldown/pluginutils@1.0.0-beta.40': {} - - '@rolldown/pluginutils@1.0.0-beta.47': {} - - '@rollup/pluginutils@5.3.0(rollup@4.53.2)': + '@react-email/body@0.2.0(react@19.2.0)': dependencies: - '@types/estree': 1.0.8 - estree-walker: 2.0.2 - picomatch: 4.0.3 - optionalDependencies: - rollup: 4.53.2 - - '@rollup/rollup-android-arm-eabi@4.53.2': - optional: true - - '@rollup/rollup-android-arm64@4.53.2': - optional: true - - '@rollup/rollup-darwin-arm64@4.53.2': - optional: true - - '@rollup/rollup-darwin-x64@4.53.2': - optional: true - - '@rollup/rollup-freebsd-arm64@4.53.2': - optional: true - - '@rollup/rollup-freebsd-x64@4.53.2': - optional: true + react: 19.2.0 - '@rollup/rollup-linux-arm-gnueabihf@4.53.2': - optional: true + '@react-email/button@0.2.0(react@19.2.0)': + dependencies: + react: 19.2.0 - '@rollup/rollup-linux-arm-musleabihf@4.53.2': - optional: true + '@react-email/code-block@0.2.0(react@19.2.0)': + dependencies: + prismjs: 1.30.0 + react: 19.2.0 - '@rollup/rollup-linux-arm64-gnu@4.53.2': - optional: true + '@react-email/code-inline@0.0.5(react@19.2.0)': + dependencies: + react: 19.2.0 - '@rollup/rollup-linux-arm64-musl@4.53.2': - optional: true + '@react-email/column@0.0.13(react@19.2.0)': + dependencies: + react: 19.2.0 - '@rollup/rollup-linux-loong64-gnu@4.53.2': - optional: true + '@react-email/components@1.0.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + dependencies: + '@react-email/body': 0.2.0(react@19.2.0) + '@react-email/button': 0.2.0(react@19.2.0) + '@react-email/code-block': 0.2.0(react@19.2.0) + '@react-email/code-inline': 0.0.5(react@19.2.0) + '@react-email/column': 0.0.13(react@19.2.0) + '@react-email/container': 0.0.15(react@19.2.0) + '@react-email/font': 0.0.9(react@19.2.0) + '@react-email/head': 0.0.12(react@19.2.0) + '@react-email/heading': 0.0.15(react@19.2.0) + '@react-email/hr': 0.0.11(react@19.2.0) + '@react-email/html': 0.0.11(react@19.2.0) + '@react-email/img': 0.0.11(react@19.2.0) + '@react-email/link': 0.0.12(react@19.2.0) + '@react-email/markdown': 0.0.17(react@19.2.0) + '@react-email/preview': 0.0.13(react@19.2.0) + '@react-email/render': 2.0.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@react-email/row': 0.0.12(react@19.2.0) + '@react-email/section': 0.0.16(react@19.2.0) + '@react-email/tailwind': 2.0.2(@react-email/body@0.2.0(react@19.2.0))(@react-email/button@0.2.0(react@19.2.0))(@react-email/code-block@0.2.0(react@19.2.0))(@react-email/code-inline@0.0.5(react@19.2.0))(@react-email/container@0.0.15(react@19.2.0))(@react-email/heading@0.0.15(react@19.2.0))(@react-email/hr@0.0.11(react@19.2.0))(@react-email/img@0.0.11(react@19.2.0))(@react-email/link@0.0.12(react@19.2.0))(@react-email/preview@0.0.13(react@19.2.0))(@react-email/text@0.1.5(react@19.2.0))(react@19.2.0) + '@react-email/text': 0.1.5(react@19.2.0) + react: 19.2.0 + transitivePeerDependencies: + - react-dom + + '@react-email/container@0.0.15(react@19.2.0)': + dependencies: + react: 19.2.0 + + '@react-email/font@0.0.9(react@19.2.0)': + dependencies: + react: 19.2.0 + + '@react-email/head@0.0.12(react@19.2.0)': + dependencies: + react: 19.2.0 + + '@react-email/heading@0.0.15(react@19.2.0)': + dependencies: + react: 19.2.0 + + '@react-email/hr@0.0.11(react@19.2.0)': + dependencies: + react: 19.2.0 + + '@react-email/html@0.0.11(react@19.2.0)': + dependencies: + react: 19.2.0 + + '@react-email/img@0.0.11(react@19.2.0)': + dependencies: + react: 19.2.0 + + '@react-email/link@0.0.12(react@19.2.0)': + dependencies: + react: 19.2.0 + + '@react-email/markdown@0.0.17(react@19.2.0)': + dependencies: + marked: 15.0.12 + react: 19.2.0 + + '@react-email/preview-server@5.1.0(@babel/core@7.28.5)(@opentelemetry/api@1.9.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.94.0)': + dependencies: + next: 16.0.10(@babel/core@7.28.5)(@opentelemetry/api@1.9.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.94.0) + transitivePeerDependencies: + - '@babel/core' + - '@opentelemetry/api' + - '@playwright/test' + - babel-plugin-macros + - babel-plugin-react-compiler + - react + - react-dom + - sass + + '@react-email/preview@0.0.13(react@19.2.0)': + dependencies: + react: 19.2.0 + + '@react-email/render@2.0.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + dependencies: + html-to-text: 9.0.5 + prettier: 3.6.2 + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + + '@react-email/row@0.0.12(react@19.2.0)': + dependencies: + react: 19.2.0 + + '@react-email/section@0.0.16(react@19.2.0)': + dependencies: + react: 19.2.0 + + '@react-email/tailwind@2.0.2(@react-email/body@0.2.0(react@19.2.0))(@react-email/button@0.2.0(react@19.2.0))(@react-email/code-block@0.2.0(react@19.2.0))(@react-email/code-inline@0.0.5(react@19.2.0))(@react-email/container@0.0.15(react@19.2.0))(@react-email/heading@0.0.15(react@19.2.0))(@react-email/hr@0.0.11(react@19.2.0))(@react-email/img@0.0.11(react@19.2.0))(@react-email/link@0.0.12(react@19.2.0))(@react-email/preview@0.0.13(react@19.2.0))(@react-email/text@0.1.5(react@19.2.0))(react@19.2.0)': + dependencies: + '@react-email/text': 0.1.5(react@19.2.0) + react: 19.2.0 + tailwindcss: 4.1.18 + optionalDependencies: + '@react-email/body': 0.2.0(react@19.2.0) + '@react-email/button': 0.2.0(react@19.2.0) + '@react-email/code-block': 0.2.0(react@19.2.0) + '@react-email/code-inline': 0.0.5(react@19.2.0) + '@react-email/container': 0.0.15(react@19.2.0) + '@react-email/heading': 0.0.15(react@19.2.0) + '@react-email/hr': 0.0.11(react@19.2.0) + '@react-email/img': 0.0.11(react@19.2.0) + '@react-email/link': 0.0.12(react@19.2.0) + '@react-email/preview': 0.0.13(react@19.2.0) + + '@react-email/text@0.1.5(react@19.2.0)': + dependencies: + react: 19.2.0 + + '@rolldown/pluginutils@1.0.0-beta.40': {} + + '@rolldown/pluginutils@1.0.0-beta.47': {} + + '@rollup/pluginutils@5.3.0(rollup@4.53.2)': + dependencies: + '@types/estree': 1.0.8 + estree-walker: 2.0.2 + picomatch: 4.0.3 + optionalDependencies: + rollup: 4.53.2 + + '@rollup/rollup-android-arm-eabi@4.53.2': + optional: true + + '@rollup/rollup-android-arm64@4.53.2': + optional: true + + '@rollup/rollup-darwin-arm64@4.53.2': + optional: true + + '@rollup/rollup-darwin-x64@4.53.2': + optional: true + + '@rollup/rollup-freebsd-arm64@4.53.2': + optional: true + + '@rollup/rollup-freebsd-x64@4.53.2': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.53.2': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.53.2': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.53.2': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.53.2': + optional: true + + '@rollup/rollup-linux-loong64-gnu@4.53.2': + optional: true + + '@rollup/rollup-linux-ppc64-gnu@4.53.2': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.53.2': + optional: true + + '@rollup/rollup-linux-riscv64-musl@4.53.2': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.53.2': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.53.2': + optional: true + + '@rollup/rollup-linux-x64-musl@4.53.2': + optional: true + + '@rollup/rollup-openharmony-arm64@4.53.2': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.53.2': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.53.2': + optional: true + + '@rollup/rollup-win32-x64-gnu@4.53.2': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.53.2': + optional: true + + '@selderee/plugin-htmlparser2@0.11.0': + dependencies: + domhandler: 5.0.3 + selderee: 0.11.0 + + '@sinclair/typebox@0.34.41': {} + + '@smithy/abort-controller@4.2.7': + dependencies: + '@smithy/types': 4.11.0 + tslib: 2.8.1 + + '@smithy/config-resolver@4.4.5': + dependencies: + '@smithy/node-config-provider': 4.3.7 + '@smithy/types': 4.11.0 + '@smithy/util-config-provider': 4.2.0 + '@smithy/util-endpoints': 3.2.7 + '@smithy/util-middleware': 4.2.7 + tslib: 2.8.1 + + '@smithy/core@3.20.0': + dependencies: + '@smithy/middleware-serde': 4.2.8 + '@smithy/protocol-http': 5.3.7 + '@smithy/types': 4.11.0 + '@smithy/util-base64': 4.3.0 + '@smithy/util-body-length-browser': 4.2.0 + '@smithy/util-middleware': 4.2.7 + '@smithy/util-stream': 4.5.8 + '@smithy/util-utf8': 4.2.0 + '@smithy/uuid': 1.1.0 + tslib: 2.8.1 + + '@smithy/credential-provider-imds@4.2.7': + dependencies: + '@smithy/node-config-provider': 4.3.7 + '@smithy/property-provider': 4.2.7 + '@smithy/types': 4.11.0 + '@smithy/url-parser': 4.2.7 + tslib: 2.8.1 + + '@smithy/fetch-http-handler@5.3.8': + dependencies: + '@smithy/protocol-http': 5.3.7 + '@smithy/querystring-builder': 4.2.7 + '@smithy/types': 4.11.0 + '@smithy/util-base64': 4.3.0 + tslib: 2.8.1 + + '@smithy/hash-node@4.2.7': + dependencies: + '@smithy/types': 4.11.0 + '@smithy/util-buffer-from': 4.2.0 + '@smithy/util-utf8': 4.2.0 + tslib: 2.8.1 + + '@smithy/invalid-dependency@4.2.7': + dependencies: + '@smithy/types': 4.11.0 + tslib: 2.8.1 + + '@smithy/is-array-buffer@2.2.0': + dependencies: + tslib: 2.8.1 + + '@smithy/is-array-buffer@4.2.0': + dependencies: + tslib: 2.8.1 + + '@smithy/middleware-content-length@4.2.7': + dependencies: + '@smithy/protocol-http': 5.3.7 + '@smithy/types': 4.11.0 + tslib: 2.8.1 + + '@smithy/middleware-endpoint@4.4.1': + dependencies: + '@smithy/core': 3.20.0 + '@smithy/middleware-serde': 4.2.8 + '@smithy/node-config-provider': 4.3.7 + '@smithy/shared-ini-file-loader': 4.4.2 + '@smithy/types': 4.11.0 + '@smithy/url-parser': 4.2.7 + '@smithy/util-middleware': 4.2.7 + tslib: 2.8.1 + + '@smithy/middleware-retry@4.4.17': + dependencies: + '@smithy/node-config-provider': 4.3.7 + '@smithy/protocol-http': 5.3.7 + '@smithy/service-error-classification': 4.2.7 + '@smithy/smithy-client': 4.10.2 + '@smithy/types': 4.11.0 + '@smithy/util-middleware': 4.2.7 + '@smithy/util-retry': 4.2.7 + '@smithy/uuid': 1.1.0 + tslib: 2.8.1 + + '@smithy/middleware-serde@4.2.8': + dependencies: + '@smithy/protocol-http': 5.3.7 + '@smithy/types': 4.11.0 + tslib: 2.8.1 + + '@smithy/middleware-stack@4.2.7': + dependencies: + '@smithy/types': 4.11.0 + tslib: 2.8.1 + + '@smithy/node-config-provider@4.3.7': + dependencies: + '@smithy/property-provider': 4.2.7 + '@smithy/shared-ini-file-loader': 4.4.2 + '@smithy/types': 4.11.0 + tslib: 2.8.1 + + '@smithy/node-http-handler@4.4.7': + dependencies: + '@smithy/abort-controller': 4.2.7 + '@smithy/protocol-http': 5.3.7 + '@smithy/querystring-builder': 4.2.7 + '@smithy/types': 4.11.0 + tslib: 2.8.1 + + '@smithy/property-provider@4.2.7': + dependencies: + '@smithy/types': 4.11.0 + tslib: 2.8.1 + + '@smithy/protocol-http@5.3.7': + dependencies: + '@smithy/types': 4.11.0 + tslib: 2.8.1 + + '@smithy/querystring-builder@4.2.7': + dependencies: + '@smithy/types': 4.11.0 + '@smithy/util-uri-escape': 4.2.0 + tslib: 2.8.1 + + '@smithy/querystring-parser@4.2.7': + dependencies: + '@smithy/types': 4.11.0 + tslib: 2.8.1 + + '@smithy/service-error-classification@4.2.7': + dependencies: + '@smithy/types': 4.11.0 + + '@smithy/shared-ini-file-loader@4.4.2': + dependencies: + '@smithy/types': 4.11.0 + tslib: 2.8.1 + + '@smithy/signature-v4@5.3.7': + dependencies: + '@smithy/is-array-buffer': 4.2.0 + '@smithy/protocol-http': 5.3.7 + '@smithy/types': 4.11.0 + '@smithy/util-hex-encoding': 4.2.0 + '@smithy/util-middleware': 4.2.7 + '@smithy/util-uri-escape': 4.2.0 + '@smithy/util-utf8': 4.2.0 + tslib: 2.8.1 + + '@smithy/smithy-client@4.10.2': + dependencies: + '@smithy/core': 3.20.0 + '@smithy/middleware-endpoint': 4.4.1 + '@smithy/middleware-stack': 4.2.7 + '@smithy/protocol-http': 5.3.7 + '@smithy/types': 4.11.0 + '@smithy/util-stream': 4.5.8 + tslib: 2.8.1 + + '@smithy/types@4.11.0': + dependencies: + tslib: 2.8.1 + + '@smithy/url-parser@4.2.7': + dependencies: + '@smithy/querystring-parser': 4.2.7 + '@smithy/types': 4.11.0 + tslib: 2.8.1 + + '@smithy/util-base64@4.3.0': + dependencies: + '@smithy/util-buffer-from': 4.2.0 + '@smithy/util-utf8': 4.2.0 + tslib: 2.8.1 + + '@smithy/util-body-length-browser@4.2.0': + dependencies: + tslib: 2.8.1 - '@rollup/rollup-linux-ppc64-gnu@4.53.2': - optional: true + '@smithy/util-body-length-node@4.2.1': + dependencies: + tslib: 2.8.1 - '@rollup/rollup-linux-riscv64-gnu@4.53.2': - optional: true + '@smithy/util-buffer-from@2.2.0': + dependencies: + '@smithy/is-array-buffer': 2.2.0 + tslib: 2.8.1 - '@rollup/rollup-linux-riscv64-musl@4.53.2': - optional: true + '@smithy/util-buffer-from@4.2.0': + dependencies: + '@smithy/is-array-buffer': 4.2.0 + tslib: 2.8.1 - '@rollup/rollup-linux-s390x-gnu@4.53.2': - optional: true + '@smithy/util-config-provider@4.2.0': + dependencies: + tslib: 2.8.1 - '@rollup/rollup-linux-x64-gnu@4.53.2': - optional: true + '@smithy/util-defaults-mode-browser@4.3.16': + dependencies: + '@smithy/property-provider': 4.2.7 + '@smithy/smithy-client': 4.10.2 + '@smithy/types': 4.11.0 + tslib: 2.8.1 - '@rollup/rollup-linux-x64-musl@4.53.2': - optional: true + '@smithy/util-defaults-mode-node@4.2.19': + dependencies: + '@smithy/config-resolver': 4.4.5 + '@smithy/credential-provider-imds': 4.2.7 + '@smithy/node-config-provider': 4.3.7 + '@smithy/property-provider': 4.2.7 + '@smithy/smithy-client': 4.10.2 + '@smithy/types': 4.11.0 + tslib: 2.8.1 - '@rollup/rollup-openharmony-arm64@4.53.2': - optional: true + '@smithy/util-endpoints@3.2.7': + dependencies: + '@smithy/node-config-provider': 4.3.7 + '@smithy/types': 4.11.0 + tslib: 2.8.1 - '@rollup/rollup-win32-arm64-msvc@4.53.2': - optional: true + '@smithy/util-hex-encoding@4.2.0': + dependencies: + tslib: 2.8.1 - '@rollup/rollup-win32-ia32-msvc@4.53.2': - optional: true + '@smithy/util-middleware@4.2.7': + dependencies: + '@smithy/types': 4.11.0 + tslib: 2.8.1 - '@rollup/rollup-win32-x64-gnu@4.53.2': - optional: true + '@smithy/util-retry@4.2.7': + dependencies: + '@smithy/service-error-classification': 4.2.7 + '@smithy/types': 4.11.0 + tslib: 2.8.1 - '@rollup/rollup-win32-x64-msvc@4.53.2': - optional: true + '@smithy/util-stream@4.5.8': + dependencies: + '@smithy/fetch-http-handler': 5.3.8 + '@smithy/node-http-handler': 4.4.7 + '@smithy/types': 4.11.0 + '@smithy/util-base64': 4.3.0 + '@smithy/util-buffer-from': 4.2.0 + '@smithy/util-hex-encoding': 4.2.0 + '@smithy/util-utf8': 4.2.0 + tslib: 2.8.1 + + '@smithy/util-uri-escape@4.2.0': + dependencies: + tslib: 2.8.1 + + '@smithy/util-utf8@2.3.0': + dependencies: + '@smithy/util-buffer-from': 2.2.0 + tslib: 2.8.1 '@selderee/plugin-htmlparser2@0.11.0': dependencies: @@ -7164,6 +7968,74 @@ snapshots: typescript: 5.9.3 zod: 4.1.12 + '@tailwindcss/node@4.1.18': + dependencies: + '@jridgewell/remapping': 2.3.5 + enhanced-resolve: 5.19.0 + jiti: 2.6.1 + lightningcss: 1.30.2 + magic-string: 0.30.21 + source-map-js: 1.2.1 + tailwindcss: 4.1.18 + + '@tailwindcss/oxide-android-arm64@4.1.18': + optional: true + + '@tailwindcss/oxide-darwin-arm64@4.1.18': + optional: true + + '@tailwindcss/oxide-darwin-x64@4.1.18': + optional: true + + '@tailwindcss/oxide-freebsd-x64@4.1.18': + optional: true + + '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.18': + optional: true + + '@tailwindcss/oxide-linux-arm64-gnu@4.1.18': + optional: true + + '@tailwindcss/oxide-linux-arm64-musl@4.1.18': + optional: true + + '@tailwindcss/oxide-linux-x64-gnu@4.1.18': + optional: true + + '@tailwindcss/oxide-linux-x64-musl@4.1.18': + optional: true + + '@tailwindcss/oxide-wasm32-wasi@4.1.18': + optional: true + + '@tailwindcss/oxide-win32-arm64-msvc@4.1.18': + optional: true + + '@tailwindcss/oxide-win32-x64-msvc@4.1.18': + optional: true + + '@tailwindcss/oxide@4.1.18': + optionalDependencies: + '@tailwindcss/oxide-android-arm64': 4.1.18 + '@tailwindcss/oxide-darwin-arm64': 4.1.18 + '@tailwindcss/oxide-darwin-x64': 4.1.18 + '@tailwindcss/oxide-freebsd-x64': 4.1.18 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.18 + '@tailwindcss/oxide-linux-arm64-gnu': 4.1.18 + '@tailwindcss/oxide-linux-arm64-musl': 4.1.18 + '@tailwindcss/oxide-linux-x64-gnu': 4.1.18 + '@tailwindcss/oxide-linux-x64-musl': 4.1.18 + '@tailwindcss/oxide-wasm32-wasi': 4.1.18 + '@tailwindcss/oxide-win32-arm64-msvc': 4.1.18 + '@tailwindcss/oxide-win32-x64-msvc': 4.1.18 + + '@tailwindcss/vite@4.1.18(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1))': + dependencies: + '@tailwindcss/node': 4.1.18 + '@tailwindcss/oxide': 4.1.18 + tailwindcss: 4.1.18 + vite: 7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1) + '@tanstack/devtools-client@0.0.3': dependencies: '@tanstack/devtools-event-client': 0.3.5 @@ -7181,6 +8053,8 @@ snapshots: '@tanstack/devtools-event-client@0.3.5': {} + '@tanstack/devtools-event-client@0.4.0': {} + '@tanstack/devtools-ui@0.4.4(csstype@3.2.3)(solid-js@1.9.10)': dependencies: clsx: 2.1.1 @@ -7189,7 +8063,7 @@ snapshots: transitivePeerDependencies: - csstype - '@tanstack/devtools-vite@0.3.11(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1))': + '@tanstack/devtools-vite@0.3.11(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1))': dependencies: '@babel/core': 7.28.5 '@babel/generator': 7.28.5 @@ -7201,7 +8075,7 @@ snapshots: chalk: 5.6.2 launch-editor: 2.12.0 picomatch: 4.0.3 - vite: 7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1) transitivePeerDependencies: - bufferutil - supports-color @@ -7223,7 +8097,7 @@ snapshots: - csstype - utf-8-validate - '@tanstack/directive-functions-plugin@1.134.5(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1))': + '@tanstack/directive-functions-plugin@1.134.5(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1))': dependencies: '@babel/code-frame': 7.27.1 '@babel/core': 7.28.5 @@ -7233,7 +8107,7 @@ snapshots: babel-dead-code-elimination: 1.0.10 pathe: 2.0.3 tiny-invariant: 1.3.3 - vite: 7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1) transitivePeerDependencies: - supports-color @@ -7243,8 +8117,16 @@ snapshots: '@tanstack/pacer': 0.15.4 '@tanstack/store': 0.7.7 + '@tanstack/form-core@1.28.0': + dependencies: + '@tanstack/devtools-event-client': 0.4.0 + '@tanstack/pacer-lite': 0.1.1 + '@tanstack/store': 0.7.7 + '@tanstack/history@1.133.28': {} + '@tanstack/pacer-lite@0.1.1': {} + '@tanstack/pacer@0.15.4': dependencies: '@tanstack/devtools-event-client': 0.3.5 @@ -7267,13 +8149,34 @@ snapshots: - solid-js - utf-8-validate - '@tanstack/react-form@1.25.0(@tanstack/react-start@1.136.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1)))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@tanstack/react-form-start@1.28.0(@tanstack/react-start@1.136.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1)))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + dependencies: + '@tanstack/react-form': 1.28.0(@tanstack/react-start@1.136.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1)))(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + decode-formdata: 0.9.0 + devalue: 5.6.2 + react: 19.2.0 + optionalDependencies: + '@tanstack/react-start': 1.136.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1)) + transitivePeerDependencies: + - react-dom + + '@tanstack/react-form@1.25.0(@tanstack/react-start@1.136.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1)))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: '@tanstack/form-core': 1.25.0 '@tanstack/react-store': 0.7.7(react-dom@19.2.0(react@19.2.0))(react@19.2.0) react: 19.2.0 optionalDependencies: - '@tanstack/react-start': 1.136.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1)) + '@tanstack/react-start': 1.136.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1)) + transitivePeerDependencies: + - react-dom + + '@tanstack/react-form@1.28.0(@tanstack/react-start@1.136.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1)))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + dependencies: + '@tanstack/form-core': 1.28.0 + '@tanstack/react-store': 0.8.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + react: 19.2.0 + optionalDependencies: + '@tanstack/react-start': 1.136.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1)) transitivePeerDependencies: - react-dom @@ -7288,13 +8191,13 @@ snapshots: '@tanstack/query-core': 5.90.10 react: 19.2.0 - '@tanstack/react-router-devtools@1.136.8(@tanstack/react-router@1.136.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@tanstack/router-core@1.136.8)(@types/node@22.19.1)(csstype@3.2.3)(jiti@2.6.1)(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.94.0)(solid-js@1.9.10)(tsx@4.20.6)(yaml@2.8.1)': + '@tanstack/react-router-devtools@1.136.8(@tanstack/react-router@1.136.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@tanstack/router-core@1.136.8)(@types/node@22.19.1)(csstype@3.2.3)(jiti@2.6.1)(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass-embedded@1.97.3)(sass@1.94.0)(solid-js@1.9.10)(tsx@4.20.6)(yaml@2.8.1)': dependencies: '@tanstack/react-router': 1.136.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@tanstack/router-devtools-core': 1.136.8(@tanstack/router-core@1.136.8)(@types/node@22.19.1)(csstype@3.2.3)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.0)(solid-js@1.9.10)(tsx@4.20.6)(yaml@2.8.1) + '@tanstack/router-devtools-core': 1.136.8(@tanstack/router-core@1.136.8)(@types/node@22.19.1)(csstype@3.2.3)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(solid-js@1.9.10)(tsx@4.20.6)(yaml@2.8.1) react: 19.2.0 react-dom: 19.2.0(react@19.2.0) - vite: 7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1) optionalDependencies: '@tanstack/router-core': 1.136.8 transitivePeerDependencies: @@ -7356,19 +8259,19 @@ snapshots: transitivePeerDependencies: - crossws - '@tanstack/react-start@1.136.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1))': + '@tanstack/react-start@1.136.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1))': dependencies: '@tanstack/react-router': 1.136.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@tanstack/react-start-client': 1.136.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@tanstack/react-start-server': 1.136.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@tanstack/router-utils': 1.133.19 '@tanstack/start-client-core': 1.136.8 - '@tanstack/start-plugin-core': 1.136.8(@tanstack/react-router@1.136.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1)) + '@tanstack/start-plugin-core': 1.136.8(@tanstack/react-router@1.136.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1)) '@tanstack/start-server-core': 1.136.8 pathe: 2.0.3 react: 19.2.0 react-dom: 19.2.0(react@19.2.0) - vite: 7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1) transitivePeerDependencies: - '@rsbuild/core' - crossws @@ -7400,14 +8303,14 @@ snapshots: tiny-invariant: 1.3.3 tiny-warning: 1.0.3 - '@tanstack/router-devtools-core@1.136.8(@tanstack/router-core@1.136.8)(@types/node@22.19.1)(csstype@3.2.3)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.0)(solid-js@1.9.10)(tsx@4.20.6)(yaml@2.8.1)': + '@tanstack/router-devtools-core@1.136.8(@tanstack/router-core@1.136.8)(@types/node@22.19.1)(csstype@3.2.3)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(solid-js@1.9.10)(tsx@4.20.6)(yaml@2.8.1)': dependencies: '@tanstack/router-core': 1.136.8 clsx: 2.1.1 goober: 2.1.18(csstype@3.2.3) solid-js: 1.9.10 tiny-invariant: 1.3.3 - vite: 7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1) optionalDependencies: csstype: 3.2.3 transitivePeerDependencies: @@ -7436,7 +8339,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@tanstack/router-plugin@1.136.8(@tanstack/react-router@1.136.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1))': + '@tanstack/router-plugin@1.136.8(@tanstack/react-router@1.136.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1))': dependencies: '@babel/core': 7.28.5 '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.5) @@ -7454,7 +8357,7 @@ snapshots: zod: 3.25.76 optionalDependencies: '@tanstack/react-router': 1.136.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - vite: 7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1) transitivePeerDependencies: - supports-color @@ -7476,7 +8379,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@tanstack/server-functions-plugin@1.134.5(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1))': + '@tanstack/server-functions-plugin@1.134.5(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1))': dependencies: '@babel/code-frame': 7.27.1 '@babel/core': 7.28.5 @@ -7485,7 +8388,7 @@ snapshots: '@babel/template': 7.27.2 '@babel/traverse': 7.28.5 '@babel/types': 7.28.5 - '@tanstack/directive-functions-plugin': 1.134.5(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1)) + '@tanstack/directive-functions-plugin': 1.134.5(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1)) babel-dead-code-elimination: 1.0.10 tiny-invariant: 1.3.3 transitivePeerDependencies: @@ -7500,7 +8403,7 @@ snapshots: tiny-invariant: 1.3.3 tiny-warning: 1.0.3 - '@tanstack/start-plugin-core@1.136.8(@tanstack/react-router@1.136.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1))': + '@tanstack/start-plugin-core@1.136.8(@tanstack/react-router@1.136.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1))': dependencies: '@babel/code-frame': 7.26.2 '@babel/core': 7.28.5 @@ -7508,9 +8411,9 @@ snapshots: '@rolldown/pluginutils': 1.0.0-beta.40 '@tanstack/router-core': 1.136.8 '@tanstack/router-generator': 1.136.8 - '@tanstack/router-plugin': 1.136.8(@tanstack/react-router@1.136.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1)) + '@tanstack/router-plugin': 1.136.8(@tanstack/react-router@1.136.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1)) '@tanstack/router-utils': 1.133.19 - '@tanstack/server-functions-plugin': 1.134.5(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1)) + '@tanstack/server-functions-plugin': 1.134.5(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1)) '@tanstack/start-client-core': 1.136.8 '@tanstack/start-server-core': 1.136.8 babel-dead-code-elimination: 1.0.10 @@ -7520,8 +8423,8 @@ snapshots: srvx: 0.8.16 tinyglobby: 0.2.15 ufo: 1.6.1 - vite: 7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1) - vitefu: 1.1.1(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1)) + vite: 7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1) + vitefu: 1.1.1(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1)) xmlbuilder2: 3.1.1 zod: 3.25.76 transitivePeerDependencies: @@ -7705,7 +8608,7 @@ snapshots: - rollup - supports-color - '@vitejs/plugin-react@5.1.1(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1))': + '@vitejs/plugin-react@5.1.1(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1))': dependencies: '@babel/core': 7.28.5 '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.5) @@ -7713,7 +8616,7 @@ snapshots: '@rolldown/pluginutils': 1.0.0-beta.47 '@types/babel__core': 7.20.5 react-refresh: 0.18.0 - vite: 7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1) transitivePeerDependencies: - supports-color @@ -7725,13 +8628,13 @@ snapshots: chai: 5.3.3 tinyrainbow: 2.0.0 - '@vitest/mocker@3.2.4(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1))': + '@vitest/mocker@3.2.4(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1))': dependencies: '@vitest/spy': 3.2.4 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1) '@vitest/pretty-format@3.2.4': dependencies: @@ -7916,6 +8819,8 @@ snapshots: async@3.2.6: {} + atomic-sleep@1.0.0: {} + atomically@2.1.0: dependencies: stubborn-fs: 2.0.0 @@ -8111,6 +9016,11 @@ snapshots: color-convert: 3.1.3 color-string: 2.1.4 + colorette@2.0.20: {} + + colorjs.io@0.5.2: + optional: true + commander@10.0.1: {} commander@11.1.0: {} @@ -8131,6 +9041,15 @@ snapshots: normalize-path: 3.0.0 readable-stream: 4.7.0 + concurrently@9.2.1: + dependencies: + chalk: 4.1.2 + rxjs: 7.8.2 + shell-quote: 1.8.3 + supports-color: 8.1.1 + tree-kill: 1.2.2 + yargs: 17.7.2 + conf@15.0.2: dependencies: ajv: 8.17.1 @@ -8235,6 +9154,18 @@ snapshots: whatwg-mimetype: 4.0.0 whatwg-url: 15.1.0 + dateformat@4.6.3: {} + + debounce-fn@6.0.0: + dependencies: + mimic-function: 5.0.1 + + debounce@2.2.0: {} + + debug@4.3.7: + dependencies: + ms: 2.1.3 + debounce-fn@6.0.0: dependencies: mimic-function: 5.0.1 @@ -8255,6 +9186,8 @@ snapshots: decimal.js@10.6.0: {} + decode-formdata@0.9.0: {} + dedent@1.7.0: {} deep-eql@5.0.2: {} @@ -8329,6 +9262,8 @@ snapshots: dettle@1.0.5: {} + devalue@5.6.2: {} + diff@8.0.2: {} dom-accessibility-api@0.5.16: {} @@ -8361,6 +9296,8 @@ snapshots: dotenv@16.6.1: {} + dotenv@17.2.4: {} + eastasianwidth@0.2.0: {} ecdsa-sig-formatter@1.0.11: @@ -8418,6 +9355,11 @@ snapshots: - supports-color - utf-8-validate + enhanced-resolve@5.19.0: + dependencies: + graceful-fs: 4.2.11 + tapable: 2.3.0 + entities@4.5.0: {} entities@6.0.1: {} @@ -8552,6 +9494,8 @@ snapshots: transitivePeerDependencies: - supports-color + fast-copy@4.0.2: {} + fast-decode-uri-component@1.0.1: {} fast-deep-equal@3.1.3: {} @@ -8724,6 +9668,8 @@ snapshots: dependencies: function-bind: 1.1.2 + help-me@5.0.0: {} + hosted-git-info@7.0.2: dependencies: lru-cache: 10.4.3 @@ -8920,6 +9866,8 @@ snapshots: jiti@2.6.1: {} + joycon@3.1.1: {} + jpeg-js@0.4.4: {} js-image-generator@1.0.4: @@ -9071,7 +10019,6 @@ snapshots: lightningcss-linux-x64-musl: 1.30.2 lightningcss-win32-arm64-msvc: 1.30.2 lightningcss-win32-x64-msvc: 1.30.2 - optional: true listhen@1.9.0: dependencies: @@ -9334,6 +10281,8 @@ snapshots: omit.js@2.0.2: {} + on-exit-leak-free@2.1.2: {} + once@1.4.0: dependencies: wrappy: 1.0.2 @@ -9465,6 +10414,42 @@ snapshots: picoquery@2.5.0: {} + pino-abstract-transport@3.0.0: + dependencies: + split2: 4.2.0 + + pino-pretty@13.1.3: + dependencies: + colorette: 2.0.20 + dateformat: 4.6.3 + fast-copy: 4.0.2 + fast-safe-stringify: 2.1.1 + help-me: 5.0.0 + joycon: 3.1.1 + minimist: 1.2.8 + on-exit-leak-free: 2.1.2 + pino-abstract-transport: 3.0.0 + pump: 3.0.3 + secure-json-parse: 4.1.0 + sonic-boom: 4.2.1 + strip-json-comments: 5.0.3 + + pino-std-serializers@7.1.0: {} + + pino@10.3.1: + dependencies: + '@pinojs/redact': 0.4.0 + atomic-sleep: 1.0.0 + on-exit-leak-free: 2.1.2 + pino-abstract-transport: 3.0.0 + pino-std-serializers: 7.1.0 + process-warning: 5.0.0 + quick-format-unescaped: 4.0.4 + real-require: 0.2.0 + safe-stable-stringify: 2.5.0 + sonic-boom: 4.2.1 + thread-stream: 4.0.0 + pkg-types@1.3.1: dependencies: confbox: 0.1.8 @@ -9528,6 +10513,8 @@ snapshots: process-nextick-args@2.0.1: {} + process-warning@5.0.0: {} + process@0.11.10: {} prompts@2.4.2: @@ -9559,6 +10546,8 @@ snapshots: queue-microtask@1.2.3: {} + quick-format-unescaped@4.0.4: {} + quote-unquote@1.0.0: {} radix3@1.1.2: {} @@ -9646,6 +10635,8 @@ snapshots: readdirp@4.1.2: {} + real-require@0.2.0: {} + recast@0.23.11: dependencies: ast-types: 0.16.1 @@ -9729,6 +10720,10 @@ snapshots: dependencies: queue-microtask: 1.2.3 + rxjs@7.8.2: + dependencies: + tslib: 2.8.1 + safe-buffer@5.1.2: {} safe-buffer@5.2.1: {} @@ -9737,6 +10732,94 @@ snapshots: safer-buffer@2.1.2: {} + sass-embedded-all-unknown@1.97.3: + dependencies: + sass: 1.97.3 + optional: true + + sass-embedded-android-arm64@1.97.3: + optional: true + + sass-embedded-android-arm@1.97.3: + optional: true + + sass-embedded-android-riscv64@1.97.3: + optional: true + + sass-embedded-android-x64@1.97.3: + optional: true + + sass-embedded-darwin-arm64@1.97.3: + optional: true + + sass-embedded-darwin-x64@1.97.3: + optional: true + + sass-embedded-linux-arm64@1.97.3: + optional: true + + sass-embedded-linux-arm@1.97.3: + optional: true + + sass-embedded-linux-musl-arm64@1.97.3: + optional: true + + sass-embedded-linux-musl-arm@1.97.3: + optional: true + + sass-embedded-linux-musl-riscv64@1.97.3: + optional: true + + sass-embedded-linux-musl-x64@1.97.3: + optional: true + + sass-embedded-linux-riscv64@1.97.3: + optional: true + + sass-embedded-linux-x64@1.97.3: + optional: true + + sass-embedded-unknown-all@1.97.3: + dependencies: + sass: 1.97.3 + optional: true + + sass-embedded-win32-arm64@1.97.3: + optional: true + + sass-embedded-win32-x64@1.97.3: + optional: true + + sass-embedded@1.97.3: + dependencies: + '@bufbuild/protobuf': 2.11.0 + colorjs.io: 0.5.2 + immutable: 5.1.4 + rxjs: 7.8.2 + supports-color: 8.1.1 + sync-child-process: 1.0.2 + varint: 6.0.0 + optionalDependencies: + sass-embedded-all-unknown: 1.97.3 + sass-embedded-android-arm: 1.97.3 + sass-embedded-android-arm64: 1.97.3 + sass-embedded-android-riscv64: 1.97.3 + sass-embedded-android-x64: 1.97.3 + sass-embedded-darwin-arm64: 1.97.3 + sass-embedded-darwin-x64: 1.97.3 + sass-embedded-linux-arm: 1.97.3 + sass-embedded-linux-arm64: 1.97.3 + sass-embedded-linux-musl-arm: 1.97.3 + sass-embedded-linux-musl-arm64: 1.97.3 + sass-embedded-linux-musl-riscv64: 1.97.3 + sass-embedded-linux-musl-x64: 1.97.3 + sass-embedded-linux-riscv64: 1.97.3 + sass-embedded-linux-x64: 1.97.3 + sass-embedded-unknown-all: 1.97.3 + sass-embedded-win32-arm64: 1.97.3 + sass-embedded-win32-x64: 1.97.3 + optional: true + sass@1.94.0: dependencies: chokidar: 4.0.3 @@ -9745,6 +10828,15 @@ snapshots: optionalDependencies: '@parcel/watcher': 2.5.1 + sass@1.97.3: + dependencies: + chokidar: 4.0.3 + immutable: 5.1.4 + source-map-js: 1.2.1 + optionalDependencies: + '@parcel/watcher': 2.5.1 + optional: true + sax@1.4.3: {} saxes@6.0.0: @@ -9753,6 +10845,8 @@ snapshots: scheduler@0.27.0: {} + secure-json-parse@4.1.0: {} + selderee@0.11.0: dependencies: parseley: 0.12.1 @@ -9856,6 +10950,10 @@ snapshots: seroval: 1.3.2 seroval-plugins: 1.3.3(seroval@1.3.2) + sonic-boom@4.2.1: + dependencies: + atomic-sleep: 1.0.0 + source-map-js@1.2.1: {} source-map-support@0.5.21: @@ -9881,6 +10979,8 @@ snapshots: spdx-license-ids@3.0.22: {} + split2@4.2.0: {} + sprintf-js@1.0.3: {} srvx@0.8.16: {} @@ -9940,6 +11040,8 @@ snapshots: strip-final-newline@3.0.0: {} + strip-json-comments@5.0.3: {} + strip-literal@3.1.0: dependencies: js-tokens: 9.0.1 @@ -9967,6 +11069,10 @@ snapshots: dependencies: has-flag: 4.0.0 + supports-color@8.1.1: + dependencies: + has-flag: 4.0.0 + supports-preserve-symlinks-flag@1.0.0: {} svgo@4.0.0: @@ -9981,12 +11087,22 @@ snapshots: symbol-tree@3.2.4: {} + sync-child-process@1.0.2: + dependencies: + sync-message-port: 1.2.0 + optional: true + + sync-message-port@1.2.0: + optional: true + system-architecture@0.1.0: {} tagged-tag@1.0.0: {} tailwindcss@4.1.18: {} + tapable@2.3.0: {} + tar-stream@3.1.7: dependencies: b4a: 1.7.3 @@ -10012,6 +11128,10 @@ snapshots: text-hex@1.0.0: {} + thread-stream@4.0.0: + dependencies: + real-require: 0.2.0 + tiny-invariant@1.3.3: {} tiny-warning@1.0.3: {} @@ -10067,6 +11187,8 @@ snapshots: dependencies: punycode: 2.3.1 + tree-kill@1.2.2: {} + triple-beam@1.4.1: {} ts-api-utils@2.1.0(typescript@5.9.3): @@ -10171,15 +11293,18 @@ snapshots: validate-npm-package-name@5.0.1: {} + varint@6.0.0: + optional: true + vary@1.1.2: {} - vite-node@3.2.4(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1): + vite-node@3.2.4(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1): dependencies: cac: 6.7.14 debug: 4.4.3 es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1) transitivePeerDependencies: - '@types/node' - jiti @@ -10194,20 +11319,18 @@ snapshots: - tsx - yaml - vite-plugin-sass@0.1.0: {} - - vite-tsconfig-paths@5.1.4(typescript@5.9.3)(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1)): + vite-tsconfig-paths@5.1.4(typescript@5.9.3)(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1)): dependencies: debug: 4.4.3 globrex: 0.1.2 tsconfck: 3.1.6(typescript@5.9.3) optionalDependencies: - vite: 7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1) transitivePeerDependencies: - supports-color - typescript - vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1): + vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1): dependencies: esbuild: 0.25.12 fdir: 6.5.0(picomatch@4.0.3) @@ -10221,18 +11344,19 @@ snapshots: jiti: 2.6.1 lightningcss: 1.30.2 sass: 1.94.0 + sass-embedded: 1.97.3 tsx: 4.20.6 yaml: 2.8.1 - vitefu@1.1.1(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1)): + vitefu@1.1.1(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1)): optionalDependencies: - vite: 7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1) - vitest@3.2.4(@types/node@22.19.1)(jiti@2.6.1)(jsdom@27.2.0)(lightningcss@1.30.2)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1): + vitest@3.2.4(@types/node@22.19.1)(jiti@2.6.1)(jsdom@27.2.0)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1): dependencies: '@types/chai': 5.2.3 '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1)) + '@vitest/mocker': 3.2.4(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1)) '@vitest/pretty-format': 3.2.4 '@vitest/runner': 3.2.4 '@vitest/snapshot': 3.2.4 @@ -10250,8 +11374,8 @@ snapshots: tinyglobby: 0.2.15 tinypool: 1.1.1 tinyrainbow: 2.0.0 - vite: 7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1) - vite-node: 3.2.4(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1) + vite-node: 3.2.4(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1) why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 22.19.1 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml new file mode 100644 index 0000000..922a57f --- /dev/null +++ b/pnpm-workspace.yaml @@ -0,0 +1,5 @@ +onlyBuiltDependencies: + - '@parcel/watcher' + - esbuild + - protobufjs + - sharp diff --git a/src/lib/api/handlers/auth.ts b/src/lib/api/handlers/auth.ts index ee13120..6394eee 100644 --- a/src/lib/api/handlers/auth.ts +++ b/src/lib/api/handlers/auth.ts @@ -3,29 +3,27 @@ import Elysia from "elysia"; import nodemailer from "nodemailer"; import z from "zod"; -import VerifyEmail from "$emails/verify"; -import { env } from "$env/server"; import { API_URL } from "$lib/constants/api"; import { BRANCH_NAMES } from "$lib/constants/org"; +import { decodeJWTPayload } from "$lib/utils"; + +import VerifyEmail from "$emails/verify"; +import env from "$env/server"; import { isErrorResponse } from "../types"; -import { APIUserSchema, UserSchema } from "../types/schemas"; +import { + APILoginResponseSchema, + AuthenticatedUserSchema, + UserSchema, +} from "../types/schemas"; import { createErrorResponse, createResponseSchema, toSuccessResponse, } from "../utils/helpers"; - -const LoginResponseSchema = z.object({ - token: z.string(), - user: UserSchema, -}); - -const APILoginResponseSchema = z.object({ - jwtToken: z.string(), - user: APIUserSchema, -}); +import { requireAuth } from "../utils/macros"; export const api = new Elysia({ prefix: "/auth" }) + .use(requireAuth) .model({ error: z.object({ success: z.literal(false), @@ -36,7 +34,7 @@ export const api = new Elysia({ prefix: "/auth" }) }) .post( "/sign-in", - async ({ body, set }) => { + async ({ body, status, cookie: { session, user: userCookie } }) => { const res = await fetch(API_URL.V1.USER.LOGIN, { method: "POST", body: JSON.stringify(body), @@ -53,17 +51,43 @@ export const api = new Elysia({ prefix: "/auth" }) }); } - const validatedRes = APILoginResponseSchema.parse(response); + const validated = APILoginResponseSchema.parse(response); + const claims = decodeJWTPayload(validated.jwtToken); + if (!claims) + return status(500, { + success: false, + error: "InternalServerError", + message: "Upstream returned invalid JWT", + timestamp: new Date().toISOString(), + }); - set.headers.authorization = `Bearer ${validatedRes.jwtToken}`; + const cookieBase = { + httpOnly: true, + sameSite: "lax", + secure: process.env.NODE_ENV === "production", + path: "/", + expires: new Date(claims.exp * 1000), + } as const; + + session.set({ value: validated.jwtToken, ...cookieBase }); + + const userData = { + id: validated.user.id, + name: validated.user.name, + email: validated.user.email, + batch: validated.user.batch, + sid: validated.user.sid, + designation: validated.user.designation, + profile: validated.user.dp ?? null, + experience: validated.user.xp, + verified: validated.user.verified, + }; + + userCookie.set({ value: userData, ...cookieBase }); return toSuccessResponse({ - token: validatedRes.jwtToken, - user: { - ...validatedRes.user, - profile: validatedRes.user.dp, - experience: validatedRes.user.xp, - }, + token: validated.jwtToken, + user: userData, }); }, { @@ -71,7 +95,7 @@ export const api = new Elysia({ prefix: "/auth" }) email: z.email("you need to enter a email to login"), password: z.string("you need to enter a password to login"), }), - response: createResponseSchema(LoginResponseSchema, { + response: createResponseSchema(AuthenticatedUserSchema, { errorCodes: [401, 404, 500], }), detail: { @@ -89,6 +113,11 @@ On successful authentication, returns a JWT token for subsequent authenticated r }, }, ) + .post("/sign-out", ({ cookie: { session, user } }) => { + session.remove(); + user.remove(); + return toSuccessResponse({ message: "Signed out successfully." }); + }) .get( "/verify-email/:token", async ({ params }) => { @@ -112,7 +141,6 @@ On successful authentication, returns a JWT token for subsequent authenticated r } } - // TODO: It's more ideal to redirect the user to confirmation page, instead of showing a bland json response. return toSuccessResponse({ message: "Your Email was sucessfully verified.", }); @@ -244,4 +272,8 @@ The user must verify their email before logging in. tags: ["Authentication"], }, }, - ); + ) + .get("/me", async ({ user }) => toSuccessResponse(user), { + requireAuth: true, + response: createResponseSchema(UserSchema, { errorCodes: [401, 500] }), + }); diff --git a/src/lib/api/handlers/events.ts b/src/lib/api/handlers/events.ts index 473dc4c..fb58cee 100644 --- a/src/lib/api/handlers/events.ts +++ b/src/lib/api/handlers/events.ts @@ -3,6 +3,7 @@ import z from "zod"; import { API_URL } from "$lib/constants/api"; import { ACM_BRANCHES } from "$lib/constants/org"; + import { isErrorResponse } from "../types"; import { BaseEventSchema, diff --git a/src/lib/api/handlers/user.ts b/src/lib/api/handlers/user.ts index 0d60c84..5521372 100644 --- a/src/lib/api/handlers/user.ts +++ b/src/lib/api/handlers/user.ts @@ -2,6 +2,7 @@ import Elysia from "elysia"; import z from "zod"; import { API_URL } from "$lib/constants/api"; + import { isErrorResponse } from "../types"; import { createErrorResponse, diff --git a/src/lib/api/types/index.ts b/src/lib/api/types/index.ts index b2cef58..6ef6951 100644 --- a/src/lib/api/types/index.ts +++ b/src/lib/api/types/index.ts @@ -1,3 +1,6 @@ +import type * as z from "zod"; +import type { UserSchema } from "./schemas"; + export interface APIErrorResponse { code: string; message: string; @@ -10,6 +13,8 @@ export interface ErrorResponse { timestamp: string; } +export type SessionUser = z.infer; + export function isErrorResponse(res: unknown): res is APIErrorResponse { return ( res !== null && diff --git a/src/lib/api/types/schemas.ts b/src/lib/api/types/schemas.ts index 7eafbf7..6c6830c 100644 --- a/src/lib/api/types/schemas.ts +++ b/src/lib/api/types/schemas.ts @@ -1,9 +1,9 @@ import z from "zod"; -import { ACM_BRANCHES, DESIGNATIONS } from "$lib/constants/org"; -export const BranchEnum = z.enum(ACM_BRANCHES); +import { ACM_BRANCHES } from "$lib/constants/org"; +import { DesignationEnum } from "$lib/types"; -export const DesignationEnum = z.enum(DESIGNATIONS); +export const BranchEnum = z.enum(ACM_BRANCHES); export const BaseUserSchema = z.object({ id: z.number(), @@ -26,6 +26,16 @@ export const APIUserSchema = BaseUserSchema.extend({ xp: z.number(), }); +export const AuthenticatedUserSchema = z.object({ + token: z.string(), + user: UserSchema, +}); + +export const APILoginResponseSchema = z.object({ + jwtToken: z.string(), + user: APIUserSchema, +}); + // everything can be made optional to support => export const BaseEventSchema = z.object({ id: z.number().optional(), diff --git a/src/lib/api/utils/helpers.ts b/src/lib/api/utils/helpers.ts index 31c3d15..85e0045 100644 --- a/src/lib/api/utils/helpers.ts +++ b/src/lib/api/utils/helpers.ts @@ -1,6 +1,7 @@ +import type { APIErrorResponse, ErrorStatusCode } from "../types"; + import { StatusMap, status } from "elysia"; import z from "zod"; -import type { APIErrorResponse, ErrorStatusCode } from "../types"; /** * Creates a standardized error response object from an API error payload. diff --git a/src/lib/api/utils/macros.ts b/src/lib/api/utils/macros.ts index 2c0f7de..f93e4b7 100644 --- a/src/lib/api/utils/macros.ts +++ b/src/lib/api/utils/macros.ts @@ -1,20 +1,65 @@ -import { Elysia } from "elysia"; - -export const requireAuth = new Elysia().macro({ - requireAuth: { - resolve({ headers, status }) { - if (!headers.authorization) { - return status(403, { - message: "you need to be signed in to perform this operation.", - error: "Unauthorized", - }); +import type { Designation } from "$lib/types"; +import type { SessionUser } from "../types"; + +import { Elysia, status } from "elysia"; + +import { hasRole } from "$lib/types"; +import { decodeJWTPayload } from "$lib/utils"; + +const unauthorized = (message: string) => + status(401, { + success: false as const, + error: "Unauthorized", + message, + timestamp: new Date().toISOString(), + }); + +const forbidden = (message: string) => + status(403, { + success: false as const, + error: "Forbidden", + message, + timestamp: new Date().toISOString(), + }); + +export const requireAuth = new Elysia({ name: "require-auth" }).macro({ + requireAuth: (enabled: true | Designation) => ({ + resolve({ headers, cookie: { session, user: userCookie } }) { + const token = + (session.value as string | undefined) ?? + headers.authorization?.split(" ")[1]; + + if (!token) return unauthorized("You need to be signed in."); + + const claims = decodeJWTPayload(token); + + if (!claims) return unauthorized("Malformed token."); + + if (Date.now() >= claims.exp * 1000) { + session.remove(); + userCookie.remove(); + return unauthorized("Your session has expired. Please sign in again."); + } + + const userData = userCookie.value as SessionUser | undefined; + + if (!userData) { + session.remove(); + return unauthorized("Session data missing. Please sign in again."); } - const token = headers.authorization.split(" ")[1]; + if (enabled !== true) { + if (!hasRole(userData.designation, enabled)) { + return forbidden( + `This action requires the '${enabled}' role or above. Your current role is '${userData.designation}'.`, + ); + } + } return { token, + user: userData, }; }, - }, + }), }); diff --git a/src/lib/constants/api.ts b/src/lib/constants/api.ts index 336286e..cfe5ffc 100644 --- a/src/lib/constants/api.ts +++ b/src/lib/constants/api.ts @@ -1,4 +1,4 @@ -import { env } from "$env/server"; +import env from "$env/server"; const BASE_URL = env.BACKEND_BASE_URL; diff --git a/src/lib/env/server.ts b/src/lib/env/server.ts index 1625f8f..b366abf 100644 --- a/src/lib/env/server.ts +++ b/src/lib/env/server.ts @@ -1,7 +1,7 @@ import { createEnv } from "@t3-oss/env-core"; import { z } from "zod"; -export const env = createEnv({ +const env = createEnv({ server: { BACKEND_BASE_URL: z.url(), SMTP_HOST: z.string(), @@ -15,3 +15,5 @@ export const env = createEnv({ runtimeEnv: process.env, emptyStringAsUndefined: true, }); + +export default env; diff --git a/src/lib/server/fns.ts b/src/lib/server/fns.ts new file mode 100644 index 0000000..2eea80e --- /dev/null +++ b/src/lib/server/fns.ts @@ -0,0 +1,52 @@ +import type { SessionUser } from "$lib/api/types"; + +import { createServerFn } from "@tanstack/react-start"; +import { deleteCookie, setCookie } from "@tanstack/react-start/server"; +import { getTreaty } from "src/routes/api.$"; + +import { readSession } from "./session"; + +export const fetchUserFn = createServerFn({ method: "GET" }).handler( + async (): Promise => { + const session = readSession(); + if (!session.authenticated) return null; + return session.user; + }, +); + +export const signinFn = createServerFn({ method: "POST" }) + .inputValidator((data: { email: string; password: string }) => data) + .handler(async ({ data }) => { + const api = getTreaty(); + + const { data: res, error } = await api.auth["sign-in"].post({ + email: data.email, + password: data.password, + }); + + if (error) return { error: error.value.message }; + + const cookieBase = { + httpOnly: true, + sameSite: "lax" as const, + path: "/", + secure: process.env.NODE_ENV === "production", + }; + + setCookie("session", res.data.token, cookieBase); + setCookie("user", JSON.stringify(res.data.user), cookieBase); + + return { success: true }; + }); + +export const signoutFn = createServerFn({ method: "POST" }).handler( + async () => { + const api = getTreaty(); + + await api.auth["sign-out"].post(); + deleteCookie("session"); + deleteCookie("user"); + + return { success: true }; + }, +); diff --git a/src/lib/server/session.ts b/src/lib/server/session.ts new file mode 100644 index 0000000..48e10ac --- /dev/null +++ b/src/lib/server/session.ts @@ -0,0 +1,27 @@ +import type { SessionUser } from "$lib/api/types"; + +import { getCookie } from "@tanstack/react-start/server"; + +import { decodeJWTPayload } from "$lib/utils"; + +type Session = + | { authenticated: true; user: SessionUser; token: string } + | { authenticated: false }; + +export function readSession(): Session { + const token = getCookie("session"); + const userRaw = getCookie("user"); + + if (!token || !userRaw) return { authenticated: false }; + + const claims = decodeJWTPayload(token); + if (!claims || Date.now() >= claims.exp * 1000) + return { authenticated: false }; + + try { + const user = JSON.parse(userRaw) as SessionUser; + return { authenticated: true, user, token }; + } catch { + return { authenticated: false }; + } +} diff --git a/src/lib/types.ts b/src/lib/types.ts new file mode 100644 index 0000000..8d2b36e --- /dev/null +++ b/src/lib/types.ts @@ -0,0 +1,19 @@ +import z from "zod"; + +import { DESIGNATIONS } from "./constants/org"; + +export type Designation = (typeof DESIGNATIONS)[number]; + +export const DesignationEnum = z.enum(DESIGNATIONS); + +const DESIGNATION_RANK: Record = { + Member: 0, + ImplementationBody: 1, + ExecutiveBody: 2, + Core: 3, + Admin: 4, +}; + +export function hasRole(actual: Designation, required: Designation): boolean { + return DESIGNATION_RANK[actual] >= DESIGNATION_RANK[required]; +} diff --git a/src/lib/utils.ts b/src/lib/utils.ts new file mode 100644 index 0000000..15af225 --- /dev/null +++ b/src/lib/utils.ts @@ -0,0 +1,14 @@ +type JWTPayload = { + sub: string; + exp: number; + iat: number; +}; + +export function decodeJWTPayload(token: string): JWTPayload | null { + try { + const [, payload] = token.split("."); + return JSON.parse(atob(payload.replace(/-/g, "+").replace(/_/g, "/"))); + } catch { + return null; + } +} diff --git a/src/routeTree.gen.ts b/src/routeTree.gen.ts index 7869899..bfc476c 100644 --- a/src/routeTree.gen.ts +++ b/src/routeTree.gen.ts @@ -9,9 +9,16 @@ // Additionally, you should also exclude this file from your linter and/or formatter to prevent it from being checked or modified. import { Route as rootRouteImport } from './routes/__root' +import { Route as AuthedRouteImport } from './routes/_authed' import { Route as IndexRouteImport } from './routes/index' import { Route as ApiSplatRouteImport } from './routes/api.$' +import { Route as authSignInRouteImport } from './routes/(auth)/sign-in' +import { Route as AuthedDashboardIndexRouteImport } from './routes/_authed/dashboard/index' +const AuthedRoute = AuthedRouteImport.update({ + id: '/_authed', + getParentRoute: () => rootRouteImport, +} as any) const IndexRoute = IndexRouteImport.update({ id: '/', path: '/', @@ -22,35 +29,67 @@ const ApiSplatRoute = ApiSplatRouteImport.update({ path: '/api/$', getParentRoute: () => rootRouteImport, } as any) +const authSignInRoute = authSignInRouteImport.update({ + id: '/(auth)/sign-in', + path: '/sign-in', + getParentRoute: () => rootRouteImport, +} as any) +const AuthedDashboardIndexRoute = AuthedDashboardIndexRouteImport.update({ + id: '/dashboard/', + path: '/dashboard/', + getParentRoute: () => AuthedRoute, +} as any) export interface FileRoutesByFullPath { '/': typeof IndexRoute + '/sign-in': typeof authSignInRoute '/api/$': typeof ApiSplatRoute + '/dashboard': typeof AuthedDashboardIndexRoute } export interface FileRoutesByTo { '/': typeof IndexRoute + '/sign-in': typeof authSignInRoute '/api/$': typeof ApiSplatRoute + '/dashboard': typeof AuthedDashboardIndexRoute } export interface FileRoutesById { __root__: typeof rootRouteImport '/': typeof IndexRoute + '/_authed': typeof AuthedRouteWithChildren + '/(auth)/sign-in': typeof authSignInRoute '/api/$': typeof ApiSplatRoute + '/_authed/dashboard/': typeof AuthedDashboardIndexRoute } export interface FileRouteTypes { fileRoutesByFullPath: FileRoutesByFullPath - fullPaths: '/' | '/api/$' + fullPaths: '/' | '/sign-in' | '/api/$' | '/dashboard' fileRoutesByTo: FileRoutesByTo - to: '/' | '/api/$' - id: '__root__' | '/' | '/api/$' + to: '/' | '/sign-in' | '/api/$' | '/dashboard' + id: + | '__root__' + | '/' + | '/_authed' + | '/(auth)/sign-in' + | '/api/$' + | '/_authed/dashboard/' fileRoutesById: FileRoutesById } export interface RootRouteChildren { IndexRoute: typeof IndexRoute + AuthedRoute: typeof AuthedRouteWithChildren + authSignInRoute: typeof authSignInRoute ApiSplatRoute: typeof ApiSplatRoute } declare module '@tanstack/react-router' { interface FileRoutesByPath { + '/_authed': { + id: '/_authed' + path: '' + fullPath: '' + preLoaderRoute: typeof AuthedRouteImport + parentRoute: typeof rootRouteImport + } '/': { id: '/' path: '/' @@ -65,11 +104,38 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof ApiSplatRouteImport parentRoute: typeof rootRouteImport } + '/(auth)/sign-in': { + id: '/(auth)/sign-in' + path: '/sign-in' + fullPath: '/sign-in' + preLoaderRoute: typeof authSignInRouteImport + parentRoute: typeof rootRouteImport + } + '/_authed/dashboard/': { + id: '/_authed/dashboard/' + path: '/dashboard' + fullPath: '/dashboard' + preLoaderRoute: typeof AuthedDashboardIndexRouteImport + parentRoute: typeof AuthedRoute + } } } +interface AuthedRouteChildren { + AuthedDashboardIndexRoute: typeof AuthedDashboardIndexRoute +} + +const AuthedRouteChildren: AuthedRouteChildren = { + AuthedDashboardIndexRoute: AuthedDashboardIndexRoute, +} + +const AuthedRouteWithChildren = + AuthedRoute._addFileChildren(AuthedRouteChildren) + const rootRouteChildren: RootRouteChildren = { IndexRoute: IndexRoute, + AuthedRoute: AuthedRouteWithChildren, + authSignInRoute: authSignInRoute, ApiSplatRoute: ApiSplatRoute, } export const routeTree = rootRouteImport diff --git a/src/router.tsx b/src/router.tsx index 186c65a..168f0c7 100644 --- a/src/router.tsx +++ b/src/router.tsx @@ -1,7 +1,7 @@ import { createRouter } from "@tanstack/react-router"; import { setupRouterSsrQueryIntegration } from "@tanstack/react-router-ssr-query"; -import * as TanstackQuery from "./integrations/tanstack-query/root-provider"; +import * as TanstackQuery from "./integrations/tanstack-query/root-provider"; // Import the generated route tree import { routeTree } from "./routeTree.gen"; diff --git a/src/routes/(auth)/sign-in.tsx b/src/routes/(auth)/sign-in.tsx new file mode 100644 index 0000000..3dcadd4 --- /dev/null +++ b/src/routes/(auth)/sign-in.tsx @@ -0,0 +1,149 @@ +import { useForm } from "@tanstack/react-form"; +import { + createFileRoute, + Link, + redirect, + useRouter, +} from "@tanstack/react-router"; +import { useState } from "react"; + +import { signinFn } from "$lib/server/fns"; + +export const Route = createFileRoute("/(auth)/sign-in")({ + head: () => ({ + meta: [{ title: "Sign In | PEC ACM" }], + }), + validateSearch: search => ({ + redirect: (search.redirect as string) || "/dashboard", + }), + beforeLoad: ({ context, search }) => { + if (context.user) { + throw redirect({ to: search.redirect }); + } + }, + component: RouteComponent, +}); + +function RouteComponent() { + const router = useRouter(); + const { redirect: redirectTo } = Route.useSearch(); + + const [serverError, setServerError] = useState(null); + + const form = useForm({ + defaultValues: { + email: "", + password: "", + }, + onSubmit: async ({ value }) => { + setServerError(null); + const result = await signinFn({ data: value }); + + if (result.error) { + setServerError(result.error); + return; + } + + await router.invalidate(); + await router.navigate({ to: redirectTo }); + }, + }); + + return ( +
+ + +
+
{ + e.preventDefault(); + form.handleSubmit(); + }} + > + + {field => ( +
+ + field.handleChange(e.target.value)} + placeholder="Email address" + autoComplete="email" + /> +
+ )} +
+ + + {field => ( +
+ + field.handleChange(e.target.value)} + placeholder="Password" + autoComplete="current-password" + /> +
+ )} +
+ + {serverError && ( +

{serverError}

+ )} + +
+ ({ + isSubmitting: state.isSubmitting, + canSubmit: state.canSubmit, + })} + > + {({ isSubmitting, canSubmit }) => ( + + )} + + + + Back + +
+
+
+
+ ); +} diff --git a/src/routes/__root.tsx b/src/routes/__root.tsx index f71474e..f8fd58f 100644 --- a/src/routes/__root.tsx +++ b/src/routes/__root.tsx @@ -1,15 +1,17 @@ -import { TanStackDevtools } from "@tanstack/react-devtools"; import type { QueryClient } from "@tanstack/react-query"; + +import { TanStackDevtools } from "@tanstack/react-devtools"; import { createRootRouteWithContext, HeadContent, Scripts, } from "@tanstack/react-router"; - import { TanStackRouterDevtoolsPanel } from "@tanstack/react-router-devtools"; -import TanStackQueryDevtools from "../integrations/tanstack-query/devtools"; -import appCss from "../styles.css?url"; +import { fetchUserFn } from "$lib/server/fns"; + +import appCss from "$styles/app.css?url"; +import TanStackQueryDevtools from "../integrations/tanstack-query/devtools"; interface MyRouterContext { queryClient: QueryClient; @@ -40,8 +42,12 @@ export const Route = createRootRouteWithContext()({ }, ], }), - + beforeLoad: async () => { + const user = await fetchUserFn(); + return { user }; + }, shellComponent: RootDocument, + notFoundComponent: () =>
Not Found
, }); function RootDocument({ children }: { children: React.ReactNode }) { @@ -50,7 +56,7 @@ function RootDocument({ children }: { children: React.ReactNode }) { - + {children} { + if (!context.user) { + throw redirect({ + to: "/sign-in", + search: { redirect: location.href }, + }); + } + + return { user: context.user }; + }, + component: () => , +}); diff --git a/src/routes/_authed/dashboard/index.tsx b/src/routes/_authed/dashboard/index.tsx new file mode 100644 index 0000000..1a973c6 --- /dev/null +++ b/src/routes/_authed/dashboard/index.tsx @@ -0,0 +1,30 @@ +import { createFileRoute, useRouter } from "@tanstack/react-router"; + +import { signoutFn } from "$lib/server/fns"; + +export const Route = createFileRoute("/_authed/dashboard/")({ + component: RouteComponent, +}); + +function RouteComponent() { + const { user } = Route.useRouteContext(); + const router = useRouter(); + + async function handleSignOut() { + await signoutFn(); + await router.invalidate(); + await router.navigate({ to: "/" }); + } + + return ( +
+

Welcome, {user.name}

+ +
+ ); +} diff --git a/src/routes/api.$.ts b/src/routes/api.$.ts index 225cf77..fef2b18 100644 --- a/src/routes/api.$.ts +++ b/src/routes/api.$.ts @@ -1,3 +1,4 @@ +import { createPinoLogger } from "@bogeychan/elysia-logger"; import { treaty } from "@elysiajs/eden"; import { openapi } from "@elysiajs/openapi"; import { createFileRoute } from "@tanstack/react-router"; @@ -7,9 +8,39 @@ import * as z from "zod"; import { auth, events, user } from "$lib/api"; +const log = createPinoLogger({ + level: "debug", + transport: { + target: "pino-pretty", + options: { + colorize: true, + translateTime: "mm/dd/yyyy HH:MM:ss", + ignore: "pid,hostname,req,request,responseTime", + messageFormat: "{req.method} {req.url} - {responseTime}ms", + }, + }, +}); + const app = new Elysia({ prefix: "/api", }) + .use( + log.into({ + autoLogging: { + ignore() { + return false; + }, + }, + customProps(ctx) { + return { + req: { + method: ctx.request.method, + url: new URL(ctx.request.url).pathname, + }, + }; + }, + }), + ) .use( openapi({ path: "/docs", diff --git a/src/routes/index.tsx b/src/routes/index.tsx index 3cc1b13..e8ec39c 100644 --- a/src/routes/index.tsx +++ b/src/routes/index.tsx @@ -1,7 +1,12 @@ -import { createFileRoute } from "@tanstack/react-router"; +import { createFileRoute, Link } from "@tanstack/react-router"; export const Route = createFileRoute("/")({ component: App }); function App() { - return

PEC ACM

; + return ( + <> +

PEC ACM

+ Sign In + + ); } diff --git a/src/styles.css b/src/styles.css deleted file mode 100644 index 3e1f253..0000000 --- a/src/styles.css +++ /dev/null @@ -1,12 +0,0 @@ -body { - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", - "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", - sans-serif; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -code { - font-family: source-code-pro, Menlo, Monaco, Consolas, "Courier New", - monospace; -} diff --git a/src/styles/app.css b/src/styles/app.css new file mode 100644 index 0000000..88f9e24 --- /dev/null +++ b/src/styles/app.css @@ -0,0 +1,14 @@ +@import "tailwindcss"; + +body { + font-family: + -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", + "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +code { + font-family: + source-code-pro, Menlo, Monaco, Consolas, "Courier New", monospace; +} diff --git a/tsconfig.json b/tsconfig.json index 8e98554..ce3bc7f 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -27,7 +27,8 @@ "$env/*": ["./src/lib/env/*"], "$emails/*": ["./src/emails/*"], "$hooks/*": ["./src/hooks/*"], - "$lib/*": ["./src/lib/*"] + "$lib/*": ["./src/lib/*"], + "$styles/*": ["./src/styles/*"] } } } diff --git a/vite.config.ts b/vite.config.ts index 486c40f..9b90187 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -1,11 +1,14 @@ +import "dotenv/config"; + import { defineConfig } from 'vite' import { devtools } from '@tanstack/devtools-vite' import { tanstackStart } from '@tanstack/react-start/plugin/vite' +import tailwind from "@tailwindcss/vite"; import viteReact from '@vitejs/plugin-react' import viteTsConfigPaths from 'vite-tsconfig-paths' -import sass from "vite-plugin-sass"; import netlify from '@netlify/vite-plugin-tanstack-start' + const config = defineConfig({ plugins: [ devtools(), @@ -14,7 +17,7 @@ const config = defineConfig({ viteTsConfigPaths({ projects: ['./tsconfig.json'], }), - sass(), + tailwind(), tanstackStart(), viteReact({ babel: { @@ -22,6 +25,9 @@ const config = defineConfig({ }, }), ], + server: { + port: 3000, + } }) export default config From 166dde877a3428ef1b7934331b4a1e9bedfcb6a8 Mon Sep 17 00:00:00 2001 From: Savy Date: Sun, 22 Feb 2026 16:45:18 +0530 Subject: [PATCH 26/47] fix biome schema mismatch --- biome.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/biome.json b/biome.json index f373bb3..40015ec 100644 --- a/biome.json +++ b/biome.json @@ -1,5 +1,5 @@ { - "$schema": "https://biomejs.dev/schemas/2.2.4/schema.json", + "$schema": "https://biomejs.dev/schemas/2.3.14/schema.json", "vcs": { "enabled": false, "clientKind": "git", From b78bda926ef60b38d4f1f69c702c0e7685d3ab48 Mon Sep 17 00:00:00 2001 From: Savy Date: Sun, 22 Feb 2026 16:45:42 +0530 Subject: [PATCH 27/47] refactor base cookie object into constants --- src/lib/api/handlers/auth.ts | 12 ++---------- src/lib/constants/api.ts | 9 +++++++++ src/lib/server/fns.ts | 16 ++++++++-------- 3 files changed, 19 insertions(+), 18 deletions(-) diff --git a/src/lib/api/handlers/auth.ts b/src/lib/api/handlers/auth.ts index 6394eee..c56bf64 100644 --- a/src/lib/api/handlers/auth.ts +++ b/src/lib/api/handlers/auth.ts @@ -3,7 +3,7 @@ import Elysia from "elysia"; import nodemailer from "nodemailer"; import z from "zod"; -import { API_URL } from "$lib/constants/api"; +import { API_URL, cookieBase } from "$lib/constants/api"; import { BRANCH_NAMES } from "$lib/constants/org"; import { decodeJWTPayload } from "$lib/utils"; @@ -61,15 +61,7 @@ export const api = new Elysia({ prefix: "/auth" }) timestamp: new Date().toISOString(), }); - const cookieBase = { - httpOnly: true, - sameSite: "lax", - secure: process.env.NODE_ENV === "production", - path: "/", - expires: new Date(claims.exp * 1000), - } as const; - - session.set({ value: validated.jwtToken, ...cookieBase }); + session.set({ value: validated.jwtToken, ...cookieBase(claims.exp) }); const userData = { id: validated.user.id, diff --git a/src/lib/constants/api.ts b/src/lib/constants/api.ts index cfe5ffc..a2c4fcb 100644 --- a/src/lib/constants/api.ts +++ b/src/lib/constants/api.ts @@ -61,3 +61,12 @@ export const API_URL = { HELLO: `${BASE_URL}/hello`, }, } as const; + +export const cookieBase = (exp: number) => + ({ + httpOnly: true, + sameSite: "lax", + path: "/", + expires: new Date(exp * 1000), + secure: process.env.NODE_ENV === "production", + }) as const; diff --git a/src/lib/server/fns.ts b/src/lib/server/fns.ts index 2eea80e..0a165b8 100644 --- a/src/lib/server/fns.ts +++ b/src/lib/server/fns.ts @@ -4,6 +4,9 @@ import { createServerFn } from "@tanstack/react-start"; import { deleteCookie, setCookie } from "@tanstack/react-start/server"; import { getTreaty } from "src/routes/api.$"; +import { cookieBase } from "$lib/constants/api"; +import { decodeJWTPayload } from "$lib/utils"; + import { readSession } from "./session"; export const fetchUserFn = createServerFn({ method: "GET" }).handler( @@ -26,15 +29,12 @@ export const signinFn = createServerFn({ method: "POST" }) if (error) return { error: error.value.message }; - const cookieBase = { - httpOnly: true, - sameSite: "lax" as const, - path: "/", - secure: process.env.NODE_ENV === "production", - }; + const claims = decodeJWTPayload(res.data.token); + + if (!claims) return { error: "Invalid token received from server" }; - setCookie("session", res.data.token, cookieBase); - setCookie("user", JSON.stringify(res.data.user), cookieBase); + setCookie("session", res.data.token, cookieBase(claims.exp)); + setCookie("user", JSON.stringify(res.data.user), cookieBase(claims.exp)); return { success: true }; }); From f80bc22de4803a8ae86ff11f8a42569950bde93e Mon Sep 17 00:00:00 2001 From: Savy Date: Mon, 23 Feb 2026 23:43:53 +0530 Subject: [PATCH 28/47] sort deps --- biome.json | 2 +- package.json | 12 +- pnpm-lock.yaml | 7082 +++++++++++++++++++++--------------------------- 3 files changed, 3170 insertions(+), 3926 deletions(-) diff --git a/biome.json b/biome.json index 40015ec..41fc3bf 100644 --- a/biome.json +++ b/biome.json @@ -1,5 +1,5 @@ { - "$schema": "https://biomejs.dev/schemas/2.3.14/schema.json", + "$schema": "https://biomejs.dev/schemas/2.4.4/schema.json", "vcs": { "enabled": false, "clientKind": "git", diff --git a/package.json b/package.json index 74b80dc..d051708 100644 --- a/package.json +++ b/package.json @@ -24,20 +24,17 @@ "@elysiajs/openapi": "^1.4.11", "@fontsource/space-grotesk": "^5.2.10", "@netlify/vite-plugin-tanstack-start": "^1.0.2", - "@react-email/components": "1.0.2", + "@react-email/components": "^1.0.2", "@t3-oss/env-core": "^0.13.8", "@tailwindcss/vite": "^4.1.18", "@tanstack/react-devtools": "^0.7.0", "@tanstack/react-form": "^1.0.0", "@tanstack/react-form-start": "^1.28.0", "@tanstack/react-query": "^5.66.5", - "@tanstack/react-query-devtools": "^5.84.2", "@tanstack/react-router": "^1.132.0", - "@tanstack/react-router-devtools": "^1.132.0", "@tanstack/react-router-ssr-query": "^1.131.7", "@tanstack/react-start": "^1.132.0", "@tanstack/router-plugin": "^1.132.0", - "concurrently": "^9.2.1", "dotenv": "^17.2.4", "elysia": "^1.4.19", "nodemailer": "^7.0.12", @@ -50,7 +47,10 @@ "zod": "^4.1.11" }, "devDependencies": { - "@biomejs/biome": "2.2.4", + "@tanstack/react-router-devtools": "^1.132.0", + "@tanstack/react-query-devtools": "^5.84.2", + "concurrently": "^9.2.1", + "@biomejs/biome": "2.4.4", "@react-email/preview-server": "5.1.0", "@tanstack/devtools-vite": "^0.3.11", "@testing-library/dom": "^10.4.0", @@ -63,7 +63,7 @@ "babel-plugin-react-compiler": "^1.0.0", "husky": "^9.1.7", "jsdom": "^27.0.0", - "react-email": "5.1.0", + "react-email": "^5.1.0", "sass": "^1.94.0", "typescript": "^5.7.2", "vite": "^7.1.7", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 533580a..be0ff16 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,70 +10,61 @@ importers: dependencies: '@bogeychan/elysia-logger': specifier: ^0.1.10 - version: 0.1.10(elysia@1.4.19(@sinclair/typebox@0.34.41)(exact-mirror@0.2.5(@sinclair/typebox@0.34.41))(file-type@21.1.1)(openapi-types@12.1.3)(typescript@5.9.3))(pino@10.3.1) + version: 0.1.10(elysia@1.4.25(@sinclair/typebox@0.34.48)(exact-mirror@0.2.7(@sinclair/typebox@0.34.48))(file-type@21.3.0)(openapi-types@12.1.3)(typescript@5.9.3))(pino@10.3.1) '@elysiajs/eden': specifier: ^1.4.5 - version: 1.4.5(elysia@1.4.19(@sinclair/typebox@0.34.41)(exact-mirror@0.2.5(@sinclair/typebox@0.34.41))(file-type@21.1.1)(openapi-types@12.1.3)(typescript@5.9.3)) + version: 1.4.8(elysia@1.4.25(@sinclair/typebox@0.34.48)(exact-mirror@0.2.7(@sinclair/typebox@0.34.48))(file-type@21.3.0)(openapi-types@12.1.3)(typescript@5.9.3)) '@elysiajs/openapi': specifier: ^1.4.11 - version: 1.4.11(elysia@1.4.19(@sinclair/typebox@0.34.41)(exact-mirror@0.2.5(@sinclair/typebox@0.34.41))(file-type@21.1.1)(openapi-types@12.1.3)(typescript@5.9.3)) + version: 1.4.14(elysia@1.4.25(@sinclair/typebox@0.34.48)(exact-mirror@0.2.7(@sinclair/typebox@0.34.48))(file-type@21.3.0)(openapi-types@12.1.3)(typescript@5.9.3)) '@fontsource/space-grotesk': specifier: ^5.2.10 version: 5.2.10 '@netlify/vite-plugin-tanstack-start': specifier: ^1.0.2 - version: 1.1.12(@netlify/api@14.0.10)(@tanstack/react-start@1.136.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1)))(rollup@4.53.2)(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1)) + version: 1.2.12(@tanstack/react-start@1.162.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(tsx@4.21.0)(yaml@2.8.2)))(rollup@4.59.0)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(tsx@4.21.0)(yaml@2.8.2)) '@react-email/components': - specifier: 1.0.2 - version: 1.0.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + specifier: ^1.0.2 + version: 1.0.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@t3-oss/env-core': specifier: ^0.13.8 - version: 0.13.8(typescript@5.9.3)(zod@4.1.12) + version: 0.13.10(typescript@5.9.3)(zod@4.3.6) '@tailwindcss/vite': specifier: ^4.1.18 - version: 4.1.18(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1)) + version: 4.2.0(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(tsx@4.21.0)(yaml@2.8.2)) '@tanstack/react-devtools': specifier: ^0.7.0 - version: 0.7.11(@types/react-dom@19.2.3(@types/react@19.2.5))(@types/react@19.2.5)(csstype@3.2.3)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(solid-js@1.9.10) + version: 0.7.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(csstype@3.2.3)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(solid-js@1.9.11) '@tanstack/react-form': specifier: ^1.0.0 - version: 1.25.0(@tanstack/react-start@1.136.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1)))(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 1.28.3(@tanstack/react-start@1.162.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(tsx@4.21.0)(yaml@2.8.2)))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@tanstack/react-form-start': specifier: ^1.28.0 - version: 1.28.0(@tanstack/react-start@1.136.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1)))(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 1.28.3(@tanstack/react-start@1.162.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(tsx@4.21.0)(yaml@2.8.2)))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@tanstack/react-query': specifier: ^5.66.5 - version: 5.90.10(react@19.2.0) - '@tanstack/react-query-devtools': - specifier: ^5.84.2 - version: 5.90.2(@tanstack/react-query@5.90.10(react@19.2.0))(react@19.2.0) + version: 5.90.21(react@19.2.4) '@tanstack/react-router': specifier: ^1.132.0 - version: 1.136.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@tanstack/react-router-devtools': - specifier: ^1.132.0 - version: 1.136.8(@tanstack/react-router@1.136.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@tanstack/router-core@1.136.8)(@types/node@22.19.1)(csstype@3.2.3)(jiti@2.6.1)(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass-embedded@1.97.3)(sass@1.94.0)(solid-js@1.9.10)(tsx@4.20.6)(yaml@2.8.1) + version: 1.162.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@tanstack/react-router-ssr-query': specifier: ^1.131.7 - version: 1.136.8(@tanstack/query-core@5.90.10)(@tanstack/react-query@5.90.10(react@19.2.0))(@tanstack/react-router@1.136.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@tanstack/router-core@1.136.8)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 1.162.4(@tanstack/query-core@5.90.20)(@tanstack/react-query@5.90.21(react@19.2.4))(@tanstack/react-router@1.162.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@tanstack/router-core@1.162.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@tanstack/react-start': specifier: ^1.132.0 - version: 1.136.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1)) + version: 1.162.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(tsx@4.21.0)(yaml@2.8.2)) '@tanstack/router-plugin': specifier: ^1.132.0 - version: 1.136.8(@tanstack/react-router@1.136.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1)) - concurrently: - specifier: ^9.2.1 - version: 9.2.1 + version: 1.162.4(@tanstack/react-router@1.162.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(tsx@4.21.0)(yaml@2.8.2)) dotenv: specifier: ^17.2.4 - version: 17.2.4 + version: 17.3.1 elysia: specifier: ^1.4.19 - version: 1.4.19(@sinclair/typebox@0.34.41)(exact-mirror@0.2.5(@sinclair/typebox@0.34.41))(file-type@21.1.1)(openapi-types@12.1.3)(typescript@5.9.3) + version: 1.4.25(@sinclair/typebox@0.34.48)(exact-mirror@0.2.7(@sinclair/typebox@0.34.48))(file-type@21.3.0)(openapi-types@12.1.3)(typescript@5.9.3) nodemailer: specifier: ^7.0.12 - version: 7.0.12 + version: 7.0.13 pino: specifier: ^10.3.1 version: 10.3.1 @@ -82,289 +73,141 @@ importers: version: 13.1.3 react: specifier: ^19.2.0 - version: 19.2.0 + version: 19.2.4 react-dom: specifier: ^19.2.0 - version: 19.2.0(react@19.2.0) + version: 19.2.4(react@19.2.4) tailwindcss: specifier: ^4.1.18 - version: 4.1.18 + version: 4.2.0 vite-tsconfig-paths: specifier: ^5.1.4 - version: 5.1.4(typescript@5.9.3)(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1)) + version: 5.1.4(typescript@5.9.3)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(tsx@4.21.0)(yaml@2.8.2)) zod: specifier: ^4.1.11 - version: 4.1.12 + version: 4.3.6 devDependencies: '@biomejs/biome': - specifier: 2.2.4 - version: 2.2.4 + specifier: ^2.3.14 + version: 2.4.4 '@react-email/preview-server': specifier: 5.1.0 - version: 5.1.0(@babel/core@7.28.5)(@opentelemetry/api@1.9.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.94.0) + version: 5.1.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.3) '@tanstack/devtools-vite': specifier: ^0.3.11 - version: 0.3.11(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1)) + version: 0.3.12(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(tsx@4.21.0)(yaml@2.8.2)) + '@tanstack/react-query-devtools': + specifier: ^5.84.2 + version: 5.91.3(@tanstack/react-query@5.90.21(react@19.2.4))(react@19.2.4) + '@tanstack/react-router-devtools': + specifier: ^1.132.0 + version: 1.162.4(@tanstack/react-router@1.162.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@tanstack/router-core@1.162.2)(csstype@3.2.3)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@testing-library/dom': specifier: ^10.4.0 version: 10.4.1 '@testing-library/react': specifier: ^16.2.0 - version: 16.3.0(@testing-library/dom@10.4.1)(@types/react-dom@19.2.3(@types/react@19.2.5))(@types/react@19.2.5)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@types/node': specifier: ^22.10.2 - version: 22.19.1 + version: 22.19.11 '@types/nodemailer': specifier: ^7.0.4 - version: 7.0.4 + version: 7.0.11 '@types/react': specifier: ^19.2.0 - version: 19.2.5 + version: 19.2.14 '@types/react-dom': specifier: ^19.2.0 - version: 19.2.3(@types/react@19.2.5) + version: 19.2.3(@types/react@19.2.14) '@vitejs/plugin-react': specifier: ^5.0.4 - version: 5.1.1(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1)) + version: 5.1.4(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(tsx@4.21.0)(yaml@2.8.2)) babel-plugin-react-compiler: specifier: ^1.0.0 version: 1.0.0 + concurrently: + specifier: ^9.2.1 + version: 9.2.1 husky: specifier: ^9.1.7 version: 9.1.7 jsdom: specifier: ^27.0.0 - version: 27.2.0 + version: 27.4.0 react-email: - specifier: 5.1.0 + specifier: ^5.1.0 version: 5.1.0 sass: specifier: ^1.94.0 - version: 1.94.0 + version: 1.97.3 typescript: specifier: ^5.7.2 version: 5.9.3 vite: specifier: ^7.1.7 - version: 7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1) + version: 7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(tsx@4.21.0)(yaml@2.8.2) vitest: specifier: ^3.0.5 - version: 3.2.4(@types/node@22.19.1)(jiti@2.6.1)(jsdom@27.2.0)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1) + version: 3.2.4(@types/node@22.19.11)(jiti@2.6.1)(jsdom@27.4.0)(lightningcss@1.31.1)(sass@1.97.3)(tsx@4.21.0)(yaml@2.8.2) web-vitals: specifier: ^5.1.0 version: 5.1.0 packages: - '@acemir/cssom@0.9.23': - resolution: {integrity: sha512-2kJ1HxBKzPLbmhZpxBiTZggjtgCwKg1ma5RHShxvd6zgqhDEdEkzpiwe7jLkI2p2BrZvFCXIihdoMkl1H39VnA==} + '@acemir/cssom@0.9.31': + resolution: {integrity: sha512-ZnR3GSaH+/vJ0YlHau21FjfLYjMpYVIzTD8M8vIEQvIGxeOXyXdzCI140rrCY862p/C/BbzWsjc1dgnM9mkoTA==} - '@asamuzakjp/css-color@4.0.5': - resolution: {integrity: sha512-lMrXidNhPGsDjytDy11Vwlb6OIGrT3CmLg3VWNFyWkLWtijKl7xjvForlh8vuj0SHGjgl4qZEQzUmYTeQA2JFQ==} + '@asamuzakjp/css-color@4.1.2': + resolution: {integrity: sha512-NfBUvBaYgKIuq6E/RBLY1m0IohzNHAYyaJGuTK79Z23uNwmz2jl1mPsC5ZxCCxylinKhT1Amn5oNTlx1wN8cQg==} - '@asamuzakjp/dom-selector@6.7.4': - resolution: {integrity: sha512-buQDjkm+wDPXd6c13534URWZqbz0RP5PAhXZ+LIoa5LgwInT9HVJvGIJivg75vi8I13CxDGdTnz+aY5YUJlIAA==} + '@asamuzakjp/dom-selector@6.8.1': + resolution: {integrity: sha512-MvRz1nCqW0fsy8Qz4dnLIvhOlMzqDVBabZx6lH+YywFDdjXhMY37SmpV1XFX3JzG5GWHn63j6HX6QPr3lZXHvQ==} '@asamuzakjp/nwsapi@2.3.9': resolution: {integrity: sha512-n8GuYSrI9bF7FFZ/SjhwevlHc8xaVlb/7HmHelnc/PZXBD2ZR49NnN9sMMuDdEGPeeRQ5d0hqlSlEpgCX3Wl0Q==} - '@aws-crypto/sha256-browser@5.2.0': - resolution: {integrity: sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==} - - '@aws-crypto/sha256-js@5.2.0': - resolution: {integrity: sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==} - engines: {node: '>=16.0.0'} - - '@aws-crypto/supports-web-crypto@5.2.0': - resolution: {integrity: sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==} - - '@aws-crypto/util@5.2.0': - resolution: {integrity: sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==} - - '@aws-sdk/client-sesv2@3.962.0': - resolution: {integrity: sha512-1kQdfoQJmE+FgMnIrhzayP4leKhuAPxpAjmYVRgRhlS8nsOawwnNn+7k6/R0nYFAtCUrUUHOvNxwNUuYDHJ9Pg==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/client-sso@3.958.0': - resolution: {integrity: sha512-6qNCIeaMzKzfqasy2nNRuYnMuaMebCcCPP4J2CVGkA8QYMbIVKPlkn9bpB20Vxe6H/r3jtCCLQaOJjVTx/6dXg==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/core@3.957.0': - resolution: {integrity: sha512-DrZgDnF1lQZv75a52nFWs6MExihJF2GZB6ETZRqr6jMwhrk2kbJPUtvgbifwcL7AYmVqHQDJBrR/MqkwwFCpiw==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/credential-provider-env@3.957.0': - resolution: {integrity: sha512-475mkhGaWCr+Z52fOOVb/q2VHuNvqEDixlYIkeaO6xJ6t9qR0wpLt4hOQaR6zR1wfZV0SlE7d8RErdYq/PByog==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/credential-provider-http@3.957.0': - resolution: {integrity: sha512-8dS55QHRxXgJlHkEYaCGZIhieCs9NU1HU1BcqQ4RfUdSsfRdxxktqUKgCnBnOOn0oD3PPA8cQOCAVgIyRb3Rfw==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/credential-provider-ini@3.962.0': - resolution: {integrity: sha512-h0kVnXLW2d3nxbcrR/Pfg3W/+YoCguasWz7/3nYzVqmdKarGrpJzaFdoZtLgvDSZ8VgWUC4lWOTcsDMV0UNqUQ==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/credential-provider-login@3.962.0': - resolution: {integrity: sha512-kHYH6Av2UifG3mPkpPUNRh/PuX6adaAcpmsclJdHdxlixMCRdh8GNeEihq480DC0GmfqdpoSf1w2CLmLLPIS6w==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/credential-provider-node@3.962.0': - resolution: {integrity: sha512-CS78NsWRxLa+nWqeWBEYMZTLacMFIXs1C5WJuM9kD05LLiWL32ksljoPsvNN24Bc7rCSQIIMx/U3KGvkDVZMVg==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/credential-provider-process@3.957.0': - resolution: {integrity: sha512-/KIz9kadwbeLy6SKvT79W81Y+hb/8LMDyeloA2zhouE28hmne+hLn0wNCQXAAupFFlYOAtZR2NTBs7HBAReJlg==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/credential-provider-sso@3.958.0': - resolution: {integrity: sha512-CBYHJ5ufp8HC4q+o7IJejCUctJXWaksgpmoFpXerbjAso7/Fg7LLUu9inXVOxlHKLlvYekDXjIUBXDJS2WYdgg==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/credential-provider-web-identity@3.958.0': - resolution: {integrity: sha512-dgnvwjMq5Y66WozzUzxNkCFap+umHUtqMMKlr8z/vl9NYMLem/WUbWNpFFOVFWquXikc+ewtpBMR4KEDXfZ+KA==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/middleware-host-header@3.957.0': - resolution: {integrity: sha512-BBgKawVyfQZglEkNTuBBdC3azlyqNXsvvN4jPkWAiNYcY0x1BasaJFl+7u/HisfULstryweJq/dAvIZIxzlZaA==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/middleware-logger@3.957.0': - resolution: {integrity: sha512-w1qfKrSKHf9b5a8O76yQ1t69u6NWuBjr5kBX+jRWFx/5mu6RLpqERXRpVJxfosbep7k3B+DSB5tZMZ82GKcJtQ==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/middleware-recursion-detection@3.957.0': - resolution: {integrity: sha512-D2H/WoxhAZNYX+IjkKTdOhOkWQaK0jjJrDBj56hKjU5c9ltQiaX/1PqJ4dfjHntEshJfu0w+E6XJ+/6A6ILBBA==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/middleware-sdk-s3@3.957.0': - resolution: {integrity: sha512-5B2qY2nR2LYpxoQP0xUum5A1UNvH2JQpLHDH1nWFNF/XetV7ipFHksMxPNhtJJ6ARaWhQIDXfOUj0jcnkJxXUg==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/middleware-user-agent@3.957.0': - resolution: {integrity: sha512-50vcHu96XakQnIvlKJ1UoltrFODjsq2KvtTgHiPFteUS884lQnK5VC/8xd1Msz/1ONpLMzdCVproCQqhDTtMPQ==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/nested-clients@3.958.0': - resolution: {integrity: sha512-/KuCcS8b5TpQXkYOrPLYytrgxBhv81+5pChkOlhegbeHttjM69pyUpQVJqyfDM/A7wPLnDrzCAnk4zaAOkY0Nw==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/region-config-resolver@3.957.0': - resolution: {integrity: sha512-V8iY3blh8l2iaOqXWW88HbkY5jDoWjH56jonprG/cpyqqCnprvpMUZWPWYJoI8rHRf2bqzZeql1slxG6EnKI7A==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/signature-v4-multi-region@3.957.0': - resolution: {integrity: sha512-t6UfP1xMUigMMzHcb7vaZcjv7dA2DQkk9C/OAP1dKyrE0vb4lFGDaTApi17GN6Km9zFxJthEMUbBc7DL0hq1Bg==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/token-providers@3.958.0': - resolution: {integrity: sha512-UCj7lQXODduD1myNJQkV+LYcGYJ9iiMggR8ow8Hva1g3A/Na5imNXzz6O67k7DAee0TYpy+gkNw+SizC6min8Q==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/types@3.957.0': - resolution: {integrity: sha512-wzWC2Nrt859ABk6UCAVY/WYEbAd7FjkdrQL6m24+tfmWYDNRByTJ9uOgU/kw9zqLCAwb//CPvrJdhqjTznWXAg==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/util-arn-parser@3.957.0': - resolution: {integrity: sha512-Aj6m+AyrhWyg8YQ4LDPg2/gIfGHCEcoQdBt5DeSFogN5k9mmJPOJ+IAmNSWmWRjpOxEy6eY813RNDI6qS97M0g==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/util-endpoints@3.957.0': - resolution: {integrity: sha512-xwF9K24mZSxcxKS3UKQFeX/dPYkEps9wF1b+MGON7EvnbcucrJGyQyK1v1xFPn1aqXkBTFi+SZaMRx5E5YCVFw==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/util-locate-window@3.957.0': - resolution: {integrity: sha512-nhmgKHnNV9K+i9daumaIz8JTLsIIML9PE/HUks5liyrjUzenjW/aHoc7WJ9/Td/gPZtayxFnXQSJRb/fDlBuJw==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/util-user-agent-browser@3.957.0': - resolution: {integrity: sha512-exueuwxef0lUJRnGaVkNSC674eAiWU07ORhxBnevFFZEKisln+09Qrtw823iyv5I1N8T+wKfh95xvtWQrNKNQw==} - - '@aws-sdk/util-user-agent-node@3.957.0': - resolution: {integrity: sha512-ycbYCwqXk4gJGp0Oxkzf2KBeeGBdTxz559D41NJP8FlzSej1Gh7Rk40Zo6AyTfsNWkrl/kVi1t937OIzC5t+9Q==} - engines: {node: '>=18.0.0'} - peerDependencies: - aws-crt: '>=1.0.0' - peerDependenciesMeta: - aws-crt: - optional: true - - '@aws-sdk/xml-builder@3.957.0': - resolution: {integrity: sha512-Ai5iiQqS8kJ5PjzMhWcLKN0G2yasAkvpnPlq2EnqlIMdB48HsizElt62qcktdxp4neRMyGkFq4NzgmDbXnhRiA==} - engines: {node: '>=18.0.0'} - - '@aws/lambda-invoke-store@0.2.2': - resolution: {integrity: sha512-C0NBLsIqzDIae8HFw9YIrIBsbc0xTiOtt7fAukGPnqQ/+zZNaq+4jhuccltK0QuWHBnNm/a6kLIRA6GFiM10eg==} - engines: {node: '>=18.0.0'} - - '@babel/code-frame@7.26.2': - resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} - engines: {node: '>=6.9.0'} - '@babel/code-frame@7.27.1': resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} engines: {node: '>=6.9.0'} - '@babel/compat-data@7.28.5': - resolution: {integrity: sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==} - engines: {node: '>=6.9.0'} - - '@babel/core@7.28.5': - resolution: {integrity: sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==} + '@babel/code-frame@7.29.0': + resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==} engines: {node: '>=6.9.0'} - '@babel/generator@7.28.5': - resolution: {integrity: sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==} + '@babel/compat-data@7.29.0': + resolution: {integrity: sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==} engines: {node: '>=6.9.0'} - '@babel/helper-annotate-as-pure@7.27.3': - resolution: {integrity: sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==} + '@babel/core@7.29.0': + resolution: {integrity: sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==} engines: {node: '>=6.9.0'} - '@babel/helper-compilation-targets@7.27.2': - resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==} + '@babel/generator@7.29.1': + resolution: {integrity: sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==} engines: {node: '>=6.9.0'} - '@babel/helper-create-class-features-plugin@7.28.5': - resolution: {integrity: sha512-q3WC4JfdODypvxArsJQROfupPBq9+lMwjKq7C33GhbFYJsufD0yd/ziwD+hJucLeWsnFPWZjsU2DNFqBPE7jwQ==} + '@babel/helper-compilation-targets@7.28.6': + resolution: {integrity: sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==} engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 '@babel/helper-globals@7.28.0': resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} engines: {node: '>=6.9.0'} - '@babel/helper-member-expression-to-functions@7.28.5': - resolution: {integrity: sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==} - engines: {node: '>=6.9.0'} - - '@babel/helper-module-imports@7.27.1': - resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==} - engines: {node: '>=6.9.0'} - - '@babel/helper-module-transforms@7.28.3': - resolution: {integrity: sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/helper-optimise-call-expression@7.27.1': - resolution: {integrity: sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-plugin-utils@7.27.1': - resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==} + '@babel/helper-module-imports@7.28.6': + resolution: {integrity: sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==} engines: {node: '>=6.9.0'} - '@babel/helper-replace-supers@7.27.1': - resolution: {integrity: sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==} + '@babel/helper-module-transforms@7.28.6': + resolution: {integrity: sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-skip-transparent-expression-wrappers@7.27.1': - resolution: {integrity: sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==} + '@babel/helper-plugin-utils@7.28.6': + resolution: {integrity: sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==} engines: {node: '>=6.9.0'} '@babel/helper-string-parser@7.27.1': @@ -379,29 +222,23 @@ packages: resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} engines: {node: '>=6.9.0'} - '@babel/helpers@7.28.4': - resolution: {integrity: sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==} + '@babel/helpers@7.28.6': + resolution: {integrity: sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==} engines: {node: '>=6.9.0'} - '@babel/parser@7.28.5': - resolution: {integrity: sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==} + '@babel/parser@7.29.0': + resolution: {integrity: sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==} engines: {node: '>=6.0.0'} hasBin: true - '@babel/plugin-syntax-jsx@7.27.1': - resolution: {integrity: sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==} + '@babel/plugin-syntax-jsx@7.28.6': + resolution: {integrity: sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-typescript@7.27.1': - resolution: {integrity: sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-modules-commonjs@7.27.1': - resolution: {integrity: sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==} + '@babel/plugin-syntax-typescript@7.28.6': + resolution: {integrity: sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -418,83 +255,71 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-typescript@7.28.5': - resolution: {integrity: sha512-x2Qa+v/CuEoX7Dr31iAfr0IhInrVOWZU/2vJMJ00FOR/2nM0BcBEclpaf9sWCDc+v5e9dMrhSH8/atq/kX7+bA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/preset-typescript@7.28.5': - resolution: {integrity: sha512-+bQy5WOI2V6LJZpPVxY+yp66XdZ2yifu0Mc1aP5CQKgjn4QM5IN2i5fAZ4xKop47pr8rpVhiAeu+nDQa12C8+g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/runtime@7.28.4': - resolution: {integrity: sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==} + '@babel/runtime@7.28.6': + resolution: {integrity: sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==} engines: {node: '>=6.9.0'} - '@babel/template@7.27.2': - resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} + '@babel/template@7.28.6': + resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.28.5': - resolution: {integrity: sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==} + '@babel/traverse@7.29.0': + resolution: {integrity: sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==} engines: {node: '>=6.9.0'} - '@babel/types@7.28.5': - resolution: {integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==} + '@babel/types@7.29.0': + resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} engines: {node: '>=6.9.0'} - '@biomejs/biome@2.2.4': - resolution: {integrity: sha512-TBHU5bUy/Ok6m8c0y3pZiuO/BZoY/OcGxoLlrfQof5s8ISVwbVBdFINPQZyFfKwil8XibYWb7JMwnT8wT4WVPg==} + '@biomejs/biome@2.4.4': + resolution: {integrity: sha512-tigwWS5KfJf0cABVd52NVaXyAVv4qpUXOWJ1rxFL8xF1RVoeS2q/LK+FHgYoKMclJCuRoCWAPy1IXaN9/mS61Q==} engines: {node: '>=14.21.3'} hasBin: true - '@biomejs/cli-darwin-arm64@2.2.4': - resolution: {integrity: sha512-RJe2uiyaloN4hne4d2+qVj3d3gFJFbmrr5PYtkkjei1O9c+BjGXgpUPVbi8Pl8syumhzJjFsSIYkcLt2VlVLMA==} + '@biomejs/cli-darwin-arm64@2.4.4': + resolution: {integrity: sha512-jZ+Xc6qvD6tTH5jM6eKX44dcbyNqJHssfl2nnwT6vma6B1sj7ZLTGIk6N5QwVBs5xGN52r3trk5fgd3sQ9We9A==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [darwin] - '@biomejs/cli-darwin-x64@2.2.4': - resolution: {integrity: sha512-cFsdB4ePanVWfTnPVaUX+yr8qV8ifxjBKMkZwN7gKb20qXPxd/PmwqUH8mY5wnM9+U0QwM76CxFyBRJhC9tQwg==} + '@biomejs/cli-darwin-x64@2.4.4': + resolution: {integrity: sha512-Dh1a/+W+SUCXhEdL7TiX3ArPTFCQKJTI1mGncZNWfO+6suk+gYA4lNyJcBB+pwvF49uw0pEbUS49BgYOY4hzUg==} engines: {node: '>=14.21.3'} cpu: [x64] os: [darwin] - '@biomejs/cli-linux-arm64-musl@2.2.4': - resolution: {integrity: sha512-7TNPkMQEWfjvJDaZRSkDCPT/2r5ESFPKx+TEev+I2BXDGIjfCZk2+b88FOhnJNHtksbOZv8ZWnxrA5gyTYhSsQ==} + '@biomejs/cli-linux-arm64-musl@2.4.4': + resolution: {integrity: sha512-+sPAXq3bxmFwhVFJnSwkSF5Rw2ZAJMH3MF6C9IveAEOdSpgajPhoQhbbAK12SehN9j2QrHpk4J/cHsa/HqWaYQ==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [linux] - '@biomejs/cli-linux-arm64@2.2.4': - resolution: {integrity: sha512-M/Iz48p4NAzMXOuH+tsn5BvG/Jb07KOMTdSVwJpicmhN309BeEyRyQX+n1XDF0JVSlu28+hiTQ2L4rZPvu7nMw==} + '@biomejs/cli-linux-arm64@2.4.4': + resolution: {integrity: sha512-V/NFfbWhsUU6w+m5WYbBenlEAz8eYnSqRMDMAW3K+3v0tYVkNyZn8VU0XPxk/lOqNXLSCCrV7FmV/u3SjCBShg==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [linux] - '@biomejs/cli-linux-x64-musl@2.2.4': - resolution: {integrity: sha512-m41nFDS0ksXK2gwXL6W6yZTYPMH0LughqbsxInSKetoH6morVj43szqKx79Iudkp8WRT5SxSh7qVb8KCUiewGg==} + '@biomejs/cli-linux-x64-musl@2.4.4': + resolution: {integrity: sha512-gGvFTGpOIQDb5CQ2VC0n9Z2UEqlP46c4aNgHmAMytYieTGEcfqhfCFnhs6xjt0S3igE6q5GLuIXtdQt3Izok+g==} engines: {node: '>=14.21.3'} cpu: [x64] os: [linux] - '@biomejs/cli-linux-x64@2.2.4': - resolution: {integrity: sha512-orr3nnf2Dpb2ssl6aihQtvcKtLySLta4E2UcXdp7+RTa7mfJjBgIsbS0B9GC8gVu0hjOu021aU8b3/I1tn+pVQ==} + '@biomejs/cli-linux-x64@2.4.4': + resolution: {integrity: sha512-R4+ZCDtG9kHArasyBO+UBD6jr/FcFCTH8QkNTOCu0pRJzCWyWC4EtZa2AmUZB5h3e0jD7bRV2KvrENcf8rndBg==} engines: {node: '>=14.21.3'} cpu: [x64] os: [linux] - '@biomejs/cli-win32-arm64@2.2.4': - resolution: {integrity: sha512-NXnfTeKHDFUWfxAefa57DiGmu9VyKi0cDqFpdI+1hJWQjGJhJutHPX0b5m+eXvTKOaf+brU+P0JrQAZMb5yYaQ==} + '@biomejs/cli-win32-arm64@2.4.4': + resolution: {integrity: sha512-trzCqM7x+Gn832zZHgr28JoYagQNX4CZkUZhMUac2YxvvyDRLJDrb5m9IA7CaZLlX6lTQmADVfLEKP1et1Ma4Q==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [win32] - '@biomejs/cli-win32-x64@2.2.4': - resolution: {integrity: sha512-3Y4V4zVRarVh/B/eSHczR4LYoSVyv3Dfuvm3cWs5w/HScccS0+Wt/lHOcDTRYeHjQmMYVC3rIRWqyN2EI52+zg==} + '@biomejs/cli-win32-x64@2.4.4': + resolution: {integrity: sha512-gnOHKVPFAAPrpoPt2t+Q6FZ7RPry/FDV3GcpU53P3PtLNnQjBmKyN2Vh/JtqXet+H4pme8CC76rScwdjDcT1/A==} engines: {node: '>=14.21.3'} cpu: [x64] os: [win32] @@ -505,47 +330,43 @@ packages: elysia: '>= 1.2.10' pino: '>= 9.6.0' - '@borewit/text-codec@0.1.1': - resolution: {integrity: sha512-5L/uBxmjaCIX5h8Z+uu+kA9BQLkc/Wl06UGR5ajNRxu+/XjonB5i8JpgFMrPj3LXTCPA0pv8yxUvbUi+QthGGA==} - - '@bufbuild/protobuf@2.11.0': - resolution: {integrity: sha512-sBXGT13cpmPR5BMgHE6UEEfEaShh5Ror6rfN3yEK5si7QVrtZg8LEPQb0VVhiLRUslD2yLnXtnRzG035J/mZXQ==} + '@borewit/text-codec@0.2.1': + resolution: {integrity: sha512-k7vvKPbf7J2fZ5klGRD9AeKfUvojuZIQ3BT5u7Jfv+puwXkUBUT5PVyMDfJZpy30CBDXGMgw7fguK/lpOMBvgw==} '@colors/colors@1.6.0': resolution: {integrity: sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==} engines: {node: '>=0.1.90'} - '@csstools/color-helpers@5.1.0': - resolution: {integrity: sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA==} - engines: {node: '>=18'} + '@csstools/color-helpers@6.0.2': + resolution: {integrity: sha512-LMGQLS9EuADloEFkcTBR3BwV/CGHV7zyDxVRtVDTwdI2Ca4it0CCVTT9wCkxSgokjE5Ho41hEPgb8OEUwoXr6Q==} + engines: {node: '>=20.19.0'} - '@csstools/css-calc@2.1.4': - resolution: {integrity: sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==} - engines: {node: '>=18'} + '@csstools/css-calc@3.1.1': + resolution: {integrity: sha512-HJ26Z/vmsZQqs/o3a6bgKslXGFAungXGbinULZO3eMsOyNJHeBBZfup5FiZInOghgoM4Hwnmw+OgbJCNg1wwUQ==} + engines: {node: '>=20.19.0'} peerDependencies: - '@csstools/css-parser-algorithms': ^3.0.5 - '@csstools/css-tokenizer': ^3.0.4 + '@csstools/css-parser-algorithms': ^4.0.0 + '@csstools/css-tokenizer': ^4.0.0 - '@csstools/css-color-parser@3.1.0': - resolution: {integrity: sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA==} - engines: {node: '>=18'} + '@csstools/css-color-parser@4.0.2': + resolution: {integrity: sha512-0GEfbBLmTFf0dJlpsNU7zwxRIH0/BGEMuXLTCvFYxuL1tNhqzTbtnFICyJLTNK4a+RechKP75e7w42ClXSnJQw==} + engines: {node: '>=20.19.0'} peerDependencies: - '@csstools/css-parser-algorithms': ^3.0.5 - '@csstools/css-tokenizer': ^3.0.4 + '@csstools/css-parser-algorithms': ^4.0.0 + '@csstools/css-tokenizer': ^4.0.0 - '@csstools/css-parser-algorithms@3.0.5': - resolution: {integrity: sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==} - engines: {node: '>=18'} + '@csstools/css-parser-algorithms@4.0.0': + resolution: {integrity: sha512-+B87qS7fIG3L5h3qwJ/IFbjoVoOe/bpOdh9hAjXbvx0o8ImEmUsGXN0inFOnk2ChCFgqkkGFQ+TpM5rbhkKe4w==} + engines: {node: '>=20.19.0'} peerDependencies: - '@csstools/css-tokenizer': ^3.0.4 + '@csstools/css-tokenizer': ^4.0.0 - '@csstools/css-syntax-patches-for-csstree@1.0.16': - resolution: {integrity: sha512-2SpS4/UaWQaGpBINyG5ZuCHnUDeVByOhvbkARwfmnfxDvTaj80yOI1cD8Tw93ICV5Fx4fnyDKWQZI1CDtcWyUg==} - engines: {node: '>=18'} + '@csstools/css-syntax-patches-for-csstree@1.0.28': + resolution: {integrity: sha512-1NRf1CUBjnr3K7hu8BLxjQrKCxEe8FP/xmPTenAxCRZWVLbmGotkFvG9mfNpjA6k7Bw1bw4BilZq9cu19RA5pg==} - '@csstools/css-tokenizer@3.0.4': - resolution: {integrity: sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==} - engines: {node: '>=18'} + '@csstools/css-tokenizer@4.0.0': + resolution: {integrity: sha512-QxULHAm7cNu72w97JUNCBFODFaXpbDg+dP8b/oWFAZ2MTRppA3U00Y2L1HqaS4J6yBqxwa/Y3nMBaxVKbB/NsA==} + engines: {node: '>=20.19.0'} '@dabh/diagnostics@2.0.8': resolution: {integrity: sha512-R4MSXTVnuMzGD7bzHdW2ZhhdPC/igELENcq5IjEverBvq5hn1SXCWcsi6eSsdWP0/Ur+SItRRjAktmdoX/8R/Q==} @@ -554,40 +375,40 @@ packages: resolution: {integrity: sha512-Y6+WUMsTFWE5jb20IFP4YGa5IrGY/+a/FbOSjDF/wz9gepU2hwCYSXRHP/vPwBvwcY3SVMASt4yXxbXNXigmZQ==} engines: {node: '>=18'} - '@elysiajs/eden@1.4.5': - resolution: {integrity: sha512-hIOeH+S5NU/84A7+t8yB1JjxqjmzRkBF9fnLn6y+AH8EcF39KumOAnciMhIOkhhThVZvXZ3d+GsizRc+Fxoi8g==} + '@elysiajs/eden@1.4.8': + resolution: {integrity: sha512-a7oct2kFa49tH+GawZtSUCZR2rQgucNYgGLz8alXUqb4IrU3PASA0T4zXJw4MhdV1Xb6vyiR7p7kkqJcVjgbkA==} peerDependencies: - elysia: '>= 1.4.0' + elysia: '>=1.4.19' - '@elysiajs/openapi@1.4.11': - resolution: {integrity: sha512-d75bMxYJpN6qSDi/z9L1S7SLk1S/8Px+cTb3W2lrYzU8uQ5E0kXdy1oOMJEfTyVsz3OA19NP9KNxE7ztSbLBLg==} + '@elysiajs/openapi@1.4.14': + resolution: {integrity: sha512-kWmJWdvP8/LwHwAJXSpz6xFfYUoyUyEPRimEYABuDU1rOnS27Da1u9T2jyU7frOopxKWV/wDfDxMP8z2xdCPJw==} peerDependencies: elysia: '>= 1.4.0' - '@emnapi/runtime@1.7.1': - resolution: {integrity: sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==} + '@emnapi/runtime@1.8.1': + resolution: {integrity: sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==} '@envelop/instrumentation@1.0.0': resolution: {integrity: sha512-cxgkB66RQB95H3X27jlnxCRNTmPuSTgmBAq6/4n2Dtv4hsk4yz8FadA1ggmd0uZzvKqWD6CR+WFgTjhDqg7eyw==} engines: {node: '>=18.0.0'} - '@esbuild/aix-ppc64@0.25.11': - resolution: {integrity: sha512-Xt1dOL13m8u0WE8iplx9Ibbm+hFAO0GsU2P34UNoDGvZYkY8ifSiy6Zuc1lYxfG7svWE2fzqCUmFp5HCn51gJg==} + '@esbuild/aix-ppc64@0.25.12': + resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] - '@esbuild/aix-ppc64@0.25.12': - resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==} + '@esbuild/aix-ppc64@0.27.2': + resolution: {integrity: sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.25.11': - resolution: {integrity: sha512-9slpyFBc4FPPz48+f6jyiXOx/Y4v34TUeDDXJpZqAWQn/08lKGeD8aDp9TMn9jDz2CiEuHwfhRmGBvpnd/PWIQ==} + '@esbuild/aix-ppc64@0.27.3': + resolution: {integrity: sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==} engines: {node: '>=18'} - cpu: [arm64] - os: [android] + cpu: [ppc64] + os: [aix] '@esbuild/android-arm64@0.25.12': resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==} @@ -595,10 +416,16 @@ packages: cpu: [arm64] os: [android] - '@esbuild/android-arm@0.25.11': - resolution: {integrity: sha512-uoa7dU+Dt3HYsethkJ1k6Z9YdcHjTrSb5NUy66ZfZaSV8hEYGD5ZHbEMXnqLFlbBflLsl89Zke7CAdDJ4JI+Gg==} + '@esbuild/android-arm64@0.27.2': + resolution: {integrity: sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==} engines: {node: '>=18'} - cpu: [arm] + cpu: [arm64] + os: [android] + + '@esbuild/android-arm64@0.27.3': + resolution: {integrity: sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==} + engines: {node: '>=18'} + cpu: [arm64] os: [android] '@esbuild/android-arm@0.25.12': @@ -607,10 +434,16 @@ packages: cpu: [arm] os: [android] - '@esbuild/android-x64@0.25.11': - resolution: {integrity: sha512-Sgiab4xBjPU1QoPEIqS3Xx+R2lezu0LKIEcYe6pftr56PqPygbB7+szVnzoShbx64MUupqoE0KyRlN7gezbl8g==} + '@esbuild/android-arm@0.27.2': + resolution: {integrity: sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==} engines: {node: '>=18'} - cpu: [x64] + cpu: [arm] + os: [android] + + '@esbuild/android-arm@0.27.3': + resolution: {integrity: sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==} + engines: {node: '>=18'} + cpu: [arm] os: [android] '@esbuild/android-x64@0.25.12': @@ -619,11 +452,17 @@ packages: cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.25.11': - resolution: {integrity: sha512-VekY0PBCukppoQrycFxUqkCojnTQhdec0vevUL/EDOCnXd9LKWqD/bHwMPzigIJXPhC59Vd1WFIL57SKs2mg4w==} + '@esbuild/android-x64@0.27.2': + resolution: {integrity: sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==} engines: {node: '>=18'} - cpu: [arm64] - os: [darwin] + cpu: [x64] + os: [android] + + '@esbuild/android-x64@0.27.3': + resolution: {integrity: sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] '@esbuild/darwin-arm64@0.25.12': resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==} @@ -631,10 +470,16 @@ packages: cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.25.11': - resolution: {integrity: sha512-+hfp3yfBalNEpTGp9loYgbknjR695HkqtY3d3/JjSRUyPg/xd6q+mQqIb5qdywnDxRZykIHs3axEqU6l1+oWEQ==} + '@esbuild/darwin-arm64@0.27.2': + resolution: {integrity: sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==} engines: {node: '>=18'} - cpu: [x64] + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-arm64@0.27.3': + resolution: {integrity: sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==} + engines: {node: '>=18'} + cpu: [arm64] os: [darwin] '@esbuild/darwin-x64@0.25.12': @@ -643,11 +488,17 @@ packages: cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.25.11': - resolution: {integrity: sha512-CmKjrnayyTJF2eVuO//uSjl/K3KsMIeYeyN7FyDBjsR3lnSJHaXlVoAK8DZa7lXWChbuOk7NjAc7ygAwrnPBhA==} + '@esbuild/darwin-x64@0.27.2': + resolution: {integrity: sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==} engines: {node: '>=18'} - cpu: [arm64] - os: [freebsd] + cpu: [x64] + os: [darwin] + + '@esbuild/darwin-x64@0.27.3': + resolution: {integrity: sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] '@esbuild/freebsd-arm64@0.25.12': resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==} @@ -655,10 +506,16 @@ packages: cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.25.11': - resolution: {integrity: sha512-Dyq+5oscTJvMaYPvW3x3FLpi2+gSZTCE/1ffdwuM6G1ARang/mb3jvjxs0mw6n3Lsw84ocfo9CrNMqc5lTfGOw==} + '@esbuild/freebsd-arm64@0.27.2': + resolution: {integrity: sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==} engines: {node: '>=18'} - cpu: [x64] + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-arm64@0.27.3': + resolution: {integrity: sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==} + engines: {node: '>=18'} + cpu: [arm64] os: [freebsd] '@esbuild/freebsd-x64@0.25.12': @@ -667,11 +524,17 @@ packages: cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.25.11': - resolution: {integrity: sha512-Qr8AzcplUhGvdyUF08A1kHU3Vr2O88xxP0Tm8GcdVOUm25XYcMPp2YqSVHbLuXzYQMf9Bh/iKx7YPqECs6ffLA==} + '@esbuild/freebsd-x64@0.27.2': + resolution: {integrity: sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==} engines: {node: '>=18'} - cpu: [arm64] - os: [linux] + cpu: [x64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.27.3': + resolution: {integrity: sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] '@esbuild/linux-arm64@0.25.12': resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==} @@ -679,10 +542,16 @@ packages: cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.25.11': - resolution: {integrity: sha512-TBMv6B4kCfrGJ8cUPo7vd6NECZH/8hPpBHHlYI3qzoYFvWu2AdTvZNuU/7hsbKWqu/COU7NIK12dHAAqBLLXgw==} + '@esbuild/linux-arm64@0.27.2': + resolution: {integrity: sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==} engines: {node: '>=18'} - cpu: [arm] + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm64@0.27.3': + resolution: {integrity: sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==} + engines: {node: '>=18'} + cpu: [arm64] os: [linux] '@esbuild/linux-arm@0.25.12': @@ -691,10 +560,16 @@ packages: cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.25.11': - resolution: {integrity: sha512-TmnJg8BMGPehs5JKrCLqyWTVAvielc615jbkOirATQvWWB1NMXY77oLMzsUjRLa0+ngecEmDGqt5jiDC6bfvOw==} + '@esbuild/linux-arm@0.27.2': + resolution: {integrity: sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==} engines: {node: '>=18'} - cpu: [ia32] + cpu: [arm] + os: [linux] + + '@esbuild/linux-arm@0.27.3': + resolution: {integrity: sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==} + engines: {node: '>=18'} + cpu: [arm] os: [linux] '@esbuild/linux-ia32@0.25.12': @@ -703,10 +578,16 @@ packages: cpu: [ia32] os: [linux] - '@esbuild/linux-loong64@0.25.11': - resolution: {integrity: sha512-DIGXL2+gvDaXlaq8xruNXUJdT5tF+SBbJQKbWy/0J7OhU8gOHOzKmGIlfTTl6nHaCOoipxQbuJi7O++ldrxgMw==} + '@esbuild/linux-ia32@0.27.2': + resolution: {integrity: sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==} engines: {node: '>=18'} - cpu: [loong64] + cpu: [ia32] + os: [linux] + + '@esbuild/linux-ia32@0.27.3': + resolution: {integrity: sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==} + engines: {node: '>=18'} + cpu: [ia32] os: [linux] '@esbuild/linux-loong64@0.25.12': @@ -715,10 +596,16 @@ packages: cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.25.11': - resolution: {integrity: sha512-Osx1nALUJu4pU43o9OyjSCXokFkFbyzjXb6VhGIJZQ5JZi8ylCQ9/LFagolPsHtgw6himDSyb5ETSfmp4rpiKQ==} + '@esbuild/linux-loong64@0.27.2': + resolution: {integrity: sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==} engines: {node: '>=18'} - cpu: [mips64el] + cpu: [loong64] + os: [linux] + + '@esbuild/linux-loong64@0.27.3': + resolution: {integrity: sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==} + engines: {node: '>=18'} + cpu: [loong64] os: [linux] '@esbuild/linux-mips64el@0.25.12': @@ -727,10 +614,16 @@ packages: cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.25.11': - resolution: {integrity: sha512-nbLFgsQQEsBa8XSgSTSlrnBSrpoWh7ioFDUmwo158gIm5NNP+17IYmNWzaIzWmgCxq56vfr34xGkOcZ7jX6CPw==} + '@esbuild/linux-mips64el@0.27.2': + resolution: {integrity: sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==} engines: {node: '>=18'} - cpu: [ppc64] + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-mips64el@0.27.3': + resolution: {integrity: sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==} + engines: {node: '>=18'} + cpu: [mips64el] os: [linux] '@esbuild/linux-ppc64@0.25.12': @@ -739,10 +632,16 @@ packages: cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.25.11': - resolution: {integrity: sha512-HfyAmqZi9uBAbgKYP1yGuI7tSREXwIb438q0nqvlpxAOs3XnZ8RsisRfmVsgV486NdjD7Mw2UrFSw51lzUk1ww==} + '@esbuild/linux-ppc64@0.27.2': + resolution: {integrity: sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==} engines: {node: '>=18'} - cpu: [riscv64] + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-ppc64@0.27.3': + resolution: {integrity: sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==} + engines: {node: '>=18'} + cpu: [ppc64] os: [linux] '@esbuild/linux-riscv64@0.25.12': @@ -751,10 +650,16 @@ packages: cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.25.11': - resolution: {integrity: sha512-HjLqVgSSYnVXRisyfmzsH6mXqyvj0SA7pG5g+9W7ESgwA70AXYNpfKBqh1KbTxmQVaYxpzA/SvlB9oclGPbApw==} + '@esbuild/linux-riscv64@0.27.2': + resolution: {integrity: sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==} engines: {node: '>=18'} - cpu: [s390x] + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-riscv64@0.27.3': + resolution: {integrity: sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==} + engines: {node: '>=18'} + cpu: [riscv64] os: [linux] '@esbuild/linux-s390x@0.25.12': @@ -763,10 +668,16 @@ packages: cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.25.11': - resolution: {integrity: sha512-HSFAT4+WYjIhrHxKBwGmOOSpphjYkcswF449j6EjsjbinTZbp8PJtjsVK1XFJStdzXdy/jaddAep2FGY+wyFAQ==} + '@esbuild/linux-s390x@0.27.2': + resolution: {integrity: sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==} engines: {node: '>=18'} - cpu: [x64] + cpu: [s390x] + os: [linux] + + '@esbuild/linux-s390x@0.27.3': + resolution: {integrity: sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==} + engines: {node: '>=18'} + cpu: [s390x] os: [linux] '@esbuild/linux-x64@0.25.12': @@ -775,11 +686,17 @@ packages: cpu: [x64] os: [linux] - '@esbuild/netbsd-arm64@0.25.11': - resolution: {integrity: sha512-hr9Oxj1Fa4r04dNpWr3P8QKVVsjQhqrMSUzZzf+LZcYjZNqhA3IAfPQdEh1FLVUJSiu6sgAwp3OmwBfbFgG2Xg==} + '@esbuild/linux-x64@0.27.2': + resolution: {integrity: sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==} engines: {node: '>=18'} - cpu: [arm64] - os: [netbsd] + cpu: [x64] + os: [linux] + + '@esbuild/linux-x64@0.27.3': + resolution: {integrity: sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] '@esbuild/netbsd-arm64@0.25.12': resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==} @@ -787,10 +704,16 @@ packages: cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-x64@0.25.11': - resolution: {integrity: sha512-u7tKA+qbzBydyj0vgpu+5h5AeudxOAGncb8N6C9Kh1N4n7wU1Xw1JDApsRjpShRpXRQlJLb9wY28ELpwdPcZ7A==} + '@esbuild/netbsd-arm64@0.27.2': + resolution: {integrity: sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==} engines: {node: '>=18'} - cpu: [x64] + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-arm64@0.27.3': + resolution: {integrity: sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==} + engines: {node: '>=18'} + cpu: [arm64] os: [netbsd] '@esbuild/netbsd-x64@0.25.12': @@ -799,11 +722,17 @@ packages: cpu: [x64] os: [netbsd] - '@esbuild/openbsd-arm64@0.25.11': - resolution: {integrity: sha512-Qq6YHhayieor3DxFOoYM1q0q1uMFYb7cSpLD2qzDSvK1NAvqFi8Xgivv0cFC6J+hWVw2teCYltyy9/m/14ryHg==} + '@esbuild/netbsd-x64@0.27.2': + resolution: {integrity: sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==} engines: {node: '>=18'} - cpu: [arm64] - os: [openbsd] + cpu: [x64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.27.3': + resolution: {integrity: sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] '@esbuild/openbsd-arm64@0.25.12': resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==} @@ -811,10 +740,16 @@ packages: cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-x64@0.25.11': - resolution: {integrity: sha512-CN+7c++kkbrckTOz5hrehxWN7uIhFFlmS/hqziSFVWpAzpWrQoAG4chH+nN3Be+Kzv/uuo7zhX716x3Sn2Jduw==} + '@esbuild/openbsd-arm64@0.27.2': + resolution: {integrity: sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==} engines: {node: '>=18'} - cpu: [x64] + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-arm64@0.27.3': + resolution: {integrity: sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==} + engines: {node: '>=18'} + cpu: [arm64] os: [openbsd] '@esbuild/openbsd-x64@0.25.12': @@ -823,11 +758,17 @@ packages: cpu: [x64] os: [openbsd] - '@esbuild/openharmony-arm64@0.25.11': - resolution: {integrity: sha512-rOREuNIQgaiR+9QuNkbkxubbp8MSO9rONmwP5nKncnWJ9v5jQ4JxFnLu4zDSRPf3x4u+2VN4pM4RdyIzDty/wQ==} + '@esbuild/openbsd-x64@0.27.2': + resolution: {integrity: sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==} engines: {node: '>=18'} - cpu: [arm64] - os: [openharmony] + cpu: [x64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.27.3': + resolution: {integrity: sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] '@esbuild/openharmony-arm64@0.25.12': resolution: {integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==} @@ -835,11 +776,17 @@ packages: cpu: [arm64] os: [openharmony] - '@esbuild/sunos-x64@0.25.11': - resolution: {integrity: sha512-nq2xdYaWxyg9DcIyXkZhcYulC6pQ2FuCgem3LI92IwMgIZ69KHeY8T4Y88pcwoLIjbed8n36CyKoYRDygNSGhA==} + '@esbuild/openharmony-arm64@0.27.2': + resolution: {integrity: sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==} engines: {node: '>=18'} - cpu: [x64] - os: [sunos] + cpu: [arm64] + os: [openharmony] + + '@esbuild/openharmony-arm64@0.27.3': + resolution: {integrity: sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] '@esbuild/sunos-x64@0.25.12': resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==} @@ -847,11 +794,17 @@ packages: cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.25.11': - resolution: {integrity: sha512-3XxECOWJq1qMZ3MN8srCJ/QfoLpL+VaxD/WfNRm1O3B4+AZ/BnLVgFbUV3eiRYDMXetciH16dwPbbHqwe1uU0Q==} + '@esbuild/sunos-x64@0.27.2': + resolution: {integrity: sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==} engines: {node: '>=18'} - cpu: [arm64] - os: [win32] + cpu: [x64] + os: [sunos] + + '@esbuild/sunos-x64@0.27.3': + resolution: {integrity: sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] '@esbuild/win32-arm64@0.25.12': resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==} @@ -859,10 +812,16 @@ packages: cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.25.11': - resolution: {integrity: sha512-3ukss6gb9XZ8TlRyJlgLn17ecsK4NSQTmdIXRASVsiS2sQ6zPPZklNJT5GR5tE/MUarymmy8kCEf5xPCNCqVOA==} + '@esbuild/win32-arm64@0.27.2': + resolution: {integrity: sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==} engines: {node: '>=18'} - cpu: [ia32] + cpu: [arm64] + os: [win32] + + '@esbuild/win32-arm64@0.27.3': + resolution: {integrity: sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==} + engines: {node: '>=18'} + cpu: [arm64] os: [win32] '@esbuild/win32-ia32@0.25.12': @@ -871,10 +830,16 @@ packages: cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.25.11': - resolution: {integrity: sha512-D7Hpz6A2L4hzsRpPaCYkQnGOotdUpDzSGRIv9I+1ITdHROSFUWW95ZPZWQmGka1Fg7W3zFJowyn9WGwMJ0+KPA==} + '@esbuild/win32-ia32@0.27.2': + resolution: {integrity: sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==} engines: {node: '>=18'} - cpu: [x64] + cpu: [ia32] + os: [win32] + + '@esbuild/win32-ia32@0.27.3': + resolution: {integrity: sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==} + engines: {node: '>=18'} + cpu: [ia32] os: [win32] '@esbuild/win32-x64@0.25.12': @@ -883,6 +848,27 @@ packages: cpu: [x64] os: [win32] + '@esbuild/win32-x64@0.27.2': + resolution: {integrity: sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@esbuild/win32-x64@0.27.3': + resolution: {integrity: sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@exodus/bytes@1.14.1': + resolution: {integrity: sha512-OhkBFWI6GcRMUroChZiopRiSp2iAMvEBK47NhJooDqz1RERO4QuZIZnjP63TXX8GAiLABkYmX+fuQsdJ1dd2QQ==} + engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} + peerDependencies: + '@noble/hashes': ^1.8.0 || ^2.0.0 + peerDependenciesMeta: + '@noble/hashes': + optional: true + '@fastify/accept-negotiator@2.0.1': resolution: {integrity: sha512-/c/TW2bO/v9JeEgoD/g1G5GxGeCF1Hafdf79WPmUlgYiBXummY0oX3VVq4yFkKKVBKDNlaDUYoab7g38RpPqCQ==} @@ -1039,18 +1025,14 @@ packages: '@import-maps/resolve@2.0.0': resolution: {integrity: sha512-RwzRTpmrrS6Q1ZhQExwuxJGK1Wqhv4stt+OF2JzS+uawewpwNyU7EJL1WpBex7aDiiGLs4FsXGkfUBdYuX7xiQ==} - '@isaacs/balanced-match@4.0.1': - resolution: {integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==} - engines: {node: 20 || >=22} - - '@isaacs/brace-expansion@5.0.0': - resolution: {integrity: sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==} - engines: {node: 20 || >=22} - '@isaacs/cliui@8.0.2': resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} + '@isaacs/cliui@9.0.0': + resolution: {integrity: sha512-AokJm4tuBHillT+FpMtxQ60n8ObyXBatq7jD2/JA9dxbDDokKQm8KMht5ibGzLVU9IJDIKK4TPKgMHEYMn3lMg==} + engines: {node: '>=18'} + '@isaacs/fs-minipass@4.0.1': resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==} engines: {node: '>=18.0.0'} @@ -1071,119 +1053,122 @@ packages: '@jridgewell/trace-mapping@0.3.31': resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} - '@mapbox/node-pre-gyp@2.0.0': - resolution: {integrity: sha512-llMXd39jtP0HpQLVI37Bf1m2ADlEb35GYSh1SDSLsBhR+5iCxiNGlT31yqbNtVHygHAtMy6dWFERpU2JgufhPg==} + '@mapbox/node-pre-gyp@2.0.3': + resolution: {integrity: sha512-uwPAhccfFJlsfCxMYTwOdVfOz3xqyj8xYL3zJj8f0pb30tLohnnFPhLuqp4/qoEz8sNxe4SESZedcBojRefIzg==} engines: {node: '>=18'} hasBin: true - '@netlify/ai@0.3.3': - resolution: {integrity: sha512-P2EWy+fmybtJ4xptqR1qq+fL0JK4kj7MxqziSIB9BfqG7kIGDPTHHgbrzpEbgNvUpPt/l74mF5rQ5UW26VRp3A==} + '@netlify/ai@0.3.8': + resolution: {integrity: sha512-qz8XDb/82UzsUMKn+sB84V3ZGqeNQOvGwNo840nHIV9saJwLPTd+FOqSUoKUIxZphNA7kQ0uGeadSUkJzDz7og==} engines: {node: '>=20.6.1'} - peerDependencies: - '@netlify/api': '>=14.0.10' - '@netlify/api@14.0.10': - resolution: {integrity: sha512-2zPdZzayOGMff/atHyNE8y060R/PuWfvsFzywe9cW2hLzfJtYy1+hFFrfZS6a1KL5RkqsAFd8OBEO0s+ospDWA==} + '@netlify/api@14.0.14': + resolution: {integrity: sha512-/YwcFbI0RsKXof+e+f48pVqmELzkGWOrhqZuL5xCUNdHYhvUd9El0jQDv7fBjdhxHSrflnZfXFUW56xaI69k4A==} engines: {node: '>=18.14.0'} '@netlify/binary-info@1.0.0': resolution: {integrity: sha512-4wMPu9iN3/HL97QblBsBay3E1etIciR84izI3U+4iALY+JHCrI+a2jO0qbAZ/nxKoegypYEaiiqWXylm+/zfrw==} - '@netlify/blobs@10.3.3': - resolution: {integrity: sha512-yhw0AxB/Felk0KlWtCAqxWcV4xchPumxdlpmdJWlxkVQPoOR7dTPwXsQ6Y4W46oA83QaDD6Rgroi3OKbvg5OBQ==} + '@netlify/blobs@10.7.0': + resolution: {integrity: sha512-wuiaKRbRLG/L049yR+7/p7xSKa4jx6JRBnweRYwP6mMYn9D+x/wccPgsxEMtKqthmow6frs7ZSrNYTt9U3yUdQ==} engines: {node: ^14.16.0 || >=16.0.0} - '@netlify/cache@3.3.2': - resolution: {integrity: sha512-huN+315qooeJahkFimqgSt/evYrrS4szwJE66m5TKoAlI0QnrYp7Ct2WlWbMnFf8MdCjgkMvBL02xqRKqQyVBg==} + '@netlify/cache@3.3.5': + resolution: {integrity: sha512-u4wx2se/wRvLsU/sQlT5ruofEwMjo5kg6ybEdQLuIswH6+6+9BCFF8VX4ByBP3MZJl3/pxExmcPiFqo0TBP3tg==} engines: {node: '>=20.6.1'} - '@netlify/config@23.2.0': - resolution: {integrity: sha512-zlI792/efPUY1XKtBML2OJBgKMyfNQIeGEYibH8SqeDxPjNuCy0qELE0U9Sc6+Ss34XryPBUPdV60tYhSoe6lw==} + '@netlify/config@24.4.0': + resolution: {integrity: sha512-Dg5JQQjGb2biCvxu6Ryv+KUrgVP2iTrxSVb2pYLiUgKXqx12FeUX4/gFhERNYh1ncK1mJdN1SB3+gP5WxUAFEA==} engines: {node: '>=18.14.0'} hasBin: true - '@netlify/dev-utils@4.3.1': - resolution: {integrity: sha512-ErQgiGOxGlHLuu29+pOPhBNJ+ak9thbhZ9/9zI/hbr732S8CNVDGAU2N0DC59Mrl9/HjLetFoXxsCBDeQzaeqg==} + '@netlify/dev-utils@4.3.3': + resolution: {integrity: sha512-qziF8R9kf7mRNgSpmUH96O0aV1ZiwK4c9ZecFQbDSQuYhgy9GY1WTjiQF0oQnohjTjWNtXhrU39LAeXWNLaBJg==} engines: {node: ^18.14.0 || >=20} - '@netlify/dev@4.8.0': - resolution: {integrity: sha512-tIBc4TxMUQ+t4wEmeoTAa4SyEBC4X21XuwJTeET2lszZHQgZjdwJPMyW88Taj40SaARSh2wMI3xeACYoYIqWUw==} + '@netlify/dev@4.11.2': + resolution: {integrity: sha512-quIKbuG7xD3yiWExuZA1Xl/b3Wc+/V3QjrNT4XX5m+dA/D54J61dABf1IGwQYNZHKiF5rVL7D3AwHNAojVQzuw==} engines: {node: '>=20.6.1'} + peerDependencies: + '@netlify/db-dev': 0.2.0 + peerDependenciesMeta: + '@netlify/db-dev': + optional: true - '@netlify/edge-bundler@14.8.7': - resolution: {integrity: sha512-5KVe/DNqk28IYIfy29TJNUGzj2QMUkLPX2QJKSeGhI9EyGPY9/jhteaRPPcPTSpgWybZoJdGbhHTUr2F+fDIdQ==} + '@netlify/edge-bundler@14.9.10': + resolution: {integrity: sha512-Ja5FQuerrDzgiEKwpCF2zHCNDz3pTfMOTE6qyicZc9EmLkKcT9d8M/Pjvv9v7XbqZidN1474EBv2IE8Yuf8d5Q==} engines: {node: '>=18.14.0'} '@netlify/edge-functions-bootstrap@2.16.0': resolution: {integrity: sha512-v8QQihSbBHj3JxtJsHoepXALpNumD9M7egHoc8z62FYl5it34dWczkaJoFFopEyhiBVKi4K/n0ZYpdzwfujd6g==} - '@netlify/edge-functions-dev@1.0.4': - resolution: {integrity: sha512-X45vVpOZQGQCCDf9/Y6+4U/iqwc6MBrmRhZtO5rjErbJe+qy1MVQSn7pKxYSshBqhOSfx2ff4XTyuK0rn0qfPA==} + '@netlify/edge-functions-dev@1.0.11': + resolution: {integrity: sha512-ASybM6fkopOKHorwI1TwsbBlF+eZQCMmlddWtSpyWDunKc4P7i/FEkzdTinNQvcLX7RIGOwjrxanTMEOen/Zvg==} engines: {node: '>=20.6.1'} - '@netlify/edge-functions@3.0.2': - resolution: {integrity: sha512-1vW3R+Rc2JxL6qITndlT87N94GPjJ6gH2ntXW3IDdLzSABoU9XCHw4lRzDw+bhgSLTm0oyOwQA2+hhFvstznNQ==} + '@netlify/edge-functions@3.0.3': + resolution: {integrity: sha512-grElRK+rTBdYrPsULPKrhcHhrW+fwpDRLPbGByqa6Xrz0fhzcFJ2D9ijxEQ/onFcSVPYHT1u1mI48GhS5bZ/Ag==} engines: {node: '>=18.0.0'} - '@netlify/functions-dev@1.1.0': - resolution: {integrity: sha512-dJcYL+g2Ao80q9YJW+HsQI4uG10xDI0ad2meaoE+JRTHep38kW6Nf4cwMzH7SkoSqt4Rovpys3JaW1Dvbbu9Cg==} + '@netlify/functions-dev@1.1.12': + resolution: {integrity: sha512-rWFCthzhKiuM62yPd2upDY9+y/Ww5ahEKA8+E8WS8dgQKg+5/G/Yka6zfPNpkkFM3/oNi0R7LffWn2DMxrTMPQ==} engines: {node: '>=20.6.1'} - '@netlify/functions@5.1.0': - resolution: {integrity: sha512-LZtiQtf/QzPHIeNDZuIBxx04kmU7lCipWqZ26ejX7mYSB3yj2wvpZfF49kD8B8FoKTydSvgFmBpIcCO5FvpEXA==} + '@netlify/functions@5.1.2': + resolution: {integrity: sha512-tpPiLSkQatuexH8AdAZ8RlALvT7ixOE9VhvpkzQGNvihcms8hzmvUDuSxQa7UneTj/sHsdirnXmnJ+nmf+Nx/w==} engines: {node: '>=18.0.0'} '@netlify/headers-parser@9.0.2': resolution: {integrity: sha512-86YEGPxVemhksY1LeSr8NSOyH11RHvYHq+FuBJnTlPZoRDX+TD+0TAxF6lwzAgVTd1VPkyFEHlNgUGqw7aNzRQ==} engines: {node: '>=18.14.0'} - '@netlify/headers@2.1.1': - resolution: {integrity: sha512-FVt59N2g/zCHFQKz4TencQxCse/cvBZ5dTho9Mq45FtGoHXvGpyf48JIlO5+niUTYSgZgELicaVoj7KjG8T4nw==} + '@netlify/headers@2.1.3': + resolution: {integrity: sha512-jVjhHokAQLGI5SJA2nj8OWeNQ7ASV4m0n4aiR4PHrhM8ot385V2BbUGkSpC28M92uqP0l1cbAQaSoSOU4re8iQ==} engines: {node: '>=20.6.1'} - '@netlify/images@1.3.1': - resolution: {integrity: sha512-mS5kpRf+Cwmit7SWNww4h52W7ezz2ep7o/lc0Bgs2tRGMVC2lH1iyprxlda0mLNvPpFec/CeFQhkQJ2clDHZIA==} + '@netlify/images@1.3.3': + resolution: {integrity: sha512-1X3fUmacCLMlPIqyeV5tdo6Wbf9aBSWobgr4DyRvg9zDV9jbKqgdN3BNbcUXmVaqfN+0iiv0k9p02mcRV3OyOw==} engines: {node: '>=20.6.1'} - '@netlify/open-api@2.43.1': - resolution: {integrity: sha512-MPhzLfVVTzQCs9iIjxxgIoXv6/tE2FVHTFT2gi4leChj5o4DQ9an/6gc1q7QPRXeIuPIb+P6AaYi3TGHf8vsBA==} + '@netlify/open-api@2.49.1': + resolution: {integrity: sha512-4jFX59dqSBJIlFK/qXrEmWsMDHBErS9cFSFweWmPFKRNCuIVlkeibQrRQcVtqKfek3al1UuXscVVIZEYM05LMA==} engines: {node: '>=14.8.0'} - '@netlify/otel@4.3.2': - resolution: {integrity: sha512-979piAUQd2UINkfy951JFUFWvscXl+t+a57uYX6ViDBlNOhV/UTZGF5THAv1es3qtng8SHFDmOiftO8D/rFEPA==} + '@netlify/otel@5.1.1': + resolution: {integrity: sha512-WCSlOsd0a0Vn+iPC5PYru7rq/5/QpBGnvam6C7cq9DEiTFqfwExNoxk6SWI0T6nI56gkBryaGsENLTEnUue1lg==} engines: {node: ^18.14.0 || >=20.6.1} '@netlify/redirect-parser@15.0.3': resolution: {integrity: sha512-/HB3fcRRNgf6O/pbLn4EYNDHrU2kiadMMnazg8/OjvQK2S9i4y61vQcrICvDxYKUKQdgeEaABUuaCNAJFnfD9w==} engines: {node: '>=18.14.0'} - '@netlify/redirects@3.1.2': - resolution: {integrity: sha512-S1ap1CC7HMyaA9imRYRpuY3iZAaAgPEaQ15U9YI6W6273BSUf1jXhaOMv0kAOFX+qtx/yd0LU4Gncko/zpQCSA==} + '@netlify/redirects@3.1.5': + resolution: {integrity: sha512-yU4YBqRYoqPobg/u96QI07IuevAc8+tVLAcnty6/vBJAlo5d7E72r+U6dez48EPGIJHY5hEQK4jT0m9SmKg8mg==} engines: {node: '>=20.6.1'} - '@netlify/runtime-utils@2.2.1': - resolution: {integrity: sha512-dyJeuggzQM8+Dsi0T8Z9UjfLJ6vCmNC36W6WE2aqzfTdTw4wPkh2xlEu4LoD75+TGuYK7jIhEoU2QcCXOzfyAQ==} + '@netlify/runtime-utils@2.3.0': + resolution: {integrity: sha512-cW8weDvsKV7zfia2m5EcBy6KILGoPD+eYZ3qWNGnIo05DGF28goPES0xKSDkNYgAF/2rRSIhie2qcBhbGVgSRg==} engines: {node: ^18.14.0 || >=20} - '@netlify/runtime@4.1.7': - resolution: {integrity: sha512-VIYQnq275HvYzGKbSCgXWxgfGcB1y0vxWl8qrNHPk0wbXkSIq0PkqID4n7EAwAzxa06K6B4/yFWb1qV9z5RxwA==} + '@netlify/runtime@4.1.15': + resolution: {integrity: sha512-drX5NYNnqAMKnYsStRT8Q1ruNqd68QdMGdakdMtMb/aTaAtPCIug66BPP98YSWvgv9r7O5eO4NX/Ma7UkMVwvQ==} engines: {node: '>=20.6.1'} - '@netlify/serverless-functions-api@2.7.1': - resolution: {integrity: sha512-NQcLB8BHbIsgSBPk9A/OBR5mGpc6dOAg1iRsYHWK0IoKsvwQ9a7bZc2+E40nE41Mnk24UjfK09vDLxP85O/zwA==} + '@netlify/serverless-functions-api@2.9.0': + resolution: {integrity: sha512-D1y8y0orn/n0cdLp16pP6oJ4f+4Gc52pf+FMXNKhlJ97bLRKNce3NgSr3mbgxHUtuNd27f8Mgc4D3scJlnC4uQ==} engines: {node: '>=18.0.0'} - '@netlify/static@3.1.1': - resolution: {integrity: sha512-zvdsxNOIkL8RyJs6Aqqd0Z2nyzrTmNX9cu8MGIJRuKX6VbF54iS0e5DbAVXMSLae+BDIhPp22XWI64GyJa0EJw==} + '@netlify/static@3.1.3': + resolution: {integrity: sha512-88VG2jwWY1eOT/IiMbkrak7qyo+t7om0v731i63JiCDfXjCEp+yFPNr9L4v8S6wcCmgnkGQ6Sr5roF1sEtp6+Q==} engines: {node: '>=20.6.1'} - '@netlify/types@2.2.0': - resolution: {integrity: sha512-XOWlZ2wPpdRKkAOcQbjIf/Qz7L4RjcSVINVNQ9p3F6U8V6KSEOsB3fPrc6Ly8EOeJioHUepRPuzHzJE/7V5EsA==} + '@netlify/types@2.3.0': + resolution: {integrity: sha512-5gxMWh/S7wr0uHKSTbMv4bjWmWSpwpeLYvErWeVNAPll5/QNFo9aWimMAUuh8ReLY3/fg92XAroVVu7+z27Snw==} engines: {node: ^18.14.0 || >=20} - '@netlify/vite-plugin-tanstack-start@1.1.12': - resolution: {integrity: sha512-wDQvRifcIWwCU04JRiBusqbU0X+uKcDjBErOJSNlhefSChRBUHR01wLjPYcOnzNbk9+yVNBSwwNHy7F/RS2P5Q==} - engines: {node: ^22.12.0} + '@netlify/vite-plugin-tanstack-start@1.2.12': + resolution: {integrity: sha512-LpXS0ObA+EaIW+KUeRpBHr1pLuaZseUM8pt8lOkmpdYU7nBJR2VhtXcFq1t5TEylN1n9CXP7AiIViud8mCBSJA==} + engines: {node: ^22.12.0 || >=24.0.0} peerDependencies: '@tanstack/react-start': '>=1.132.0' '@tanstack/solid-start': '>=1.132.0' @@ -1194,14 +1179,14 @@ packages: '@tanstack/solid-start': optional: true - '@netlify/vite-plugin@2.7.12': - resolution: {integrity: sha512-BDCC5YugfXUq9nBuk5Cu3xG06AzNYw1e/rGZU7yCeXicLRxyvVFTl+8WIuUfnj2Y/QhIMi3YXuPxNgzc2w/RoQ==} + '@netlify/vite-plugin@2.10.2': + resolution: {integrity: sha512-7enOUs5ijQx/MefNYa6yG41mm1uE/iiaTmBF6oJHIwmavyTP/rvPmo07OuV/PrODdXNEsdzIRWDZ70tGpN3q+w==} engines: {node: ^20.6.1 || >=22} peerDependencies: vite: ^5 || ^6 || ^7 - '@netlify/zip-it-and-ship-it@14.1.13': - resolution: {integrity: sha512-nemTNQ2HjF5ubGKOMZ0XO9eHayoNJ8F2YahPqHXRQ3VXfwQnXkC8vW1Tvq1OspUsAiFrOyYOYLyw2J4JmpuTtA==} + '@netlify/zip-it-and-ship-it@14.4.0': + resolution: {integrity: sha512-Mi0Kg71CAMH9YsErbCqBWFfKyTim67wT7nmmPLYxFM672Mzu4KNArXmDMWAqmR6Fes2t0uXnnHBVNUfDM1ajqw==} engines: {node: '>=18.14.0'} hasBin: true @@ -1268,30 +1253,26 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - '@oozcitak/dom@1.15.10': - resolution: {integrity: sha512-0JT29/LaxVgRcGKvHmSrUTEvZ8BXvZhGl2LASRUgHqDTC1M5g1pLmVv56IYNyt3bG2CUjDkc67wnyZC14pbQrQ==} - engines: {node: '>=8.0'} + '@oozcitak/dom@2.0.2': + resolution: {integrity: sha512-GjpKhkSYC3Mj4+lfwEyI1dqnsKTgwGy48ytZEhm4A/xnH/8z9M3ZVXKr/YGQi3uCLs1AEBS+x5T2JPiueEDW8w==} + engines: {node: '>=20.0'} - '@oozcitak/infra@1.0.8': - resolution: {integrity: sha512-JRAUc9VR6IGHOL7OGF+yrvs0LO8SlqGnPAMqyzOuFZPSZSXI7Xf2O9+awQPSMXgIWGtgUf/dA6Hs6X6ySEaWTg==} - engines: {node: '>=6.0'} + '@oozcitak/infra@2.0.2': + resolution: {integrity: sha512-2g+E7hoE2dgCz/APPOEK5s3rMhJvNxSMBrP+U+j1OWsIbtSpWxxlUjq1lU8RIsFJNYv7NMlnVsCuHcUzJW+8vA==} + engines: {node: '>=20.0'} - '@oozcitak/url@1.0.4': - resolution: {integrity: sha512-kDcD8y+y3FCSOvnBI6HJgl00viO/nGbQoCINmQ0h98OhnGITrWR3bOGfwYCthgcrV8AnTJz8MzslTQbC3SOAmw==} - engines: {node: '>=8.0'} + '@oozcitak/url@3.0.0': + resolution: {integrity: sha512-ZKfET8Ak1wsLAiLWNfFkZc/BraDccuTJKR6svTYc7sVjbR+Iu0vtXdiDMY4o6jaFl5TW2TlS7jbLl4VovtAJWQ==} + engines: {node: '>=20.0'} - '@oozcitak/util@8.3.8': - resolution: {integrity: sha512-T8TbSnGsxo6TDBJx/Sgv/BlVJL3tshxZP7Aq5R1mSnM5OcHY2dQaxLMu2+E8u3gN0MLOzdjurqN4ZRVuzQycOQ==} - engines: {node: '>=8.0'} + '@oozcitak/util@10.0.0': + resolution: {integrity: sha512-hAX0pT/73190NLqBPPWSdBVGtbY6VOhWYK3qqHqtXQ1gK7kS2yz4+ivsN07hpJ6I3aeMtKP6J6npsEKOAzuTLA==} + engines: {node: '>=20.0'} '@opentelemetry/api-logs@0.203.0': resolution: {integrity: sha512-9B9RU0H7Ya1Dx/Rkyc4stuBZSGVQF27WigitInx2QQoj6KUpEFYPKoWjdFTunJYxmXmh17HeBvbMa1EhGyPmqQ==} engines: {node: '>=8.0.0'} - '@opentelemetry/api-logs@0.57.2': - resolution: {integrity: sha512-uIX52NnTM0iBh84MShlpouI7UKqkZ7MrUszTmaypHBu4r7NofznSnQRfJ+uUeDtQDj6w8eFGg5KBLDAwAPz1+A==} - engines: {node: '>=14'} - '@opentelemetry/api@1.9.0': resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==} engines: {node: '>=8.0.0'} @@ -1314,12 +1295,6 @@ packages: peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/otlp-transformer@0.57.2': - resolution: {integrity: sha512-48IIRj49gbQVK52jYsw70+Jv+JbahT8BqT2Th7C4H7RCM9d0gZ5sgNPoMpWldmfjvIsSgiGJtjfk9MeZvjhoig==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - '@opentelemetry/propagator-b3@1.30.1': resolution: {integrity: sha512-oATwWWDIJzybAZ4pO76ATN5N6FFbOA1otibAVlS8v90B4S1wClnhRUk7K+2CHAwN1JKYuj4jh/lpCEG5BAqFuQ==} engines: {node: '>=14'} @@ -1338,18 +1313,6 @@ packages: peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' - '@opentelemetry/sdk-logs@0.57.2': - resolution: {integrity: sha512-TXFHJ5c+BKggWbdEQ/inpgIzEmS2BGQowLE9UhsMd7YYlUfBQJ4uax0VF/B5NYigdM/75OoJGhAV3upEhK+3gg==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': '>=1.4.0 <1.10.0' - - '@opentelemetry/sdk-metrics@1.30.1': - resolution: {integrity: sha512-q9zcZ0Okl8jRgmy7eNW3Ku1XSgg3sDLa5evHZpCwjspw7E8Is4K/haRPDJrBcX3YSn/Y7gUvFnByNYEKQNbNog==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': '>=1.3.0 <1.10.0' - '@opentelemetry/sdk-trace-base@1.30.1': resolution: {integrity: sha512-jVPgBbH1gCy2Lb7X0AVQ8XAfgg0pJ4nvl8/IiQA6nxOsPvS+0zMJaFSs2ltXe0J6C8dqjcnpyqINDJmU30+uOg==} engines: {node: '>=14'} @@ -1366,92 +1329,92 @@ packages: resolution: {integrity: sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==} engines: {node: '>=14'} - '@parcel/watcher-android-arm64@2.5.1': - resolution: {integrity: sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==} + '@parcel/watcher-android-arm64@2.5.6': + resolution: {integrity: sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [android] - '@parcel/watcher-darwin-arm64@2.5.1': - resolution: {integrity: sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==} + '@parcel/watcher-darwin-arm64@2.5.6': + resolution: {integrity: sha512-Z2ZdrnwyXvvvdtRHLmM4knydIdU9adO3D4n/0cVipF3rRiwP+3/sfzpAwA/qKFL6i1ModaabkU7IbpeMBgiVEA==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [darwin] - '@parcel/watcher-darwin-x64@2.5.1': - resolution: {integrity: sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==} + '@parcel/watcher-darwin-x64@2.5.6': + resolution: {integrity: sha512-HgvOf3W9dhithcwOWX9uDZyn1lW9R+7tPZ4sug+NGrGIo4Rk1hAXLEbcH1TQSqxts0NYXXlOWqVpvS1SFS4fRg==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [darwin] - '@parcel/watcher-freebsd-x64@2.5.1': - resolution: {integrity: sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==} + '@parcel/watcher-freebsd-x64@2.5.6': + resolution: {integrity: sha512-vJVi8yd/qzJxEKHkeemh7w3YAn6RJCtYlE4HPMoVnCpIXEzSrxErBW5SJBgKLbXU3WdIpkjBTeUNtyBVn8TRng==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [freebsd] - '@parcel/watcher-linux-arm-glibc@2.5.1': - resolution: {integrity: sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==} + '@parcel/watcher-linux-arm-glibc@2.5.6': + resolution: {integrity: sha512-9JiYfB6h6BgV50CCfasfLf/uvOcJskMSwcdH1PHH9rvS1IrNy8zad6IUVPVUfmXr+u+Km9IxcfMLzgdOudz9EQ==} engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] - '@parcel/watcher-linux-arm-musl@2.5.1': - resolution: {integrity: sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==} + '@parcel/watcher-linux-arm-musl@2.5.6': + resolution: {integrity: sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg==} engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] - '@parcel/watcher-linux-arm64-glibc@2.5.1': - resolution: {integrity: sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==} + '@parcel/watcher-linux-arm64-glibc@2.5.6': + resolution: {integrity: sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] - '@parcel/watcher-linux-arm64-musl@2.5.1': - resolution: {integrity: sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==} + '@parcel/watcher-linux-arm64-musl@2.5.6': + resolution: {integrity: sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] - '@parcel/watcher-linux-x64-glibc@2.5.1': - resolution: {integrity: sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==} + '@parcel/watcher-linux-x64-glibc@2.5.6': + resolution: {integrity: sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] - '@parcel/watcher-linux-x64-musl@2.5.1': - resolution: {integrity: sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==} + '@parcel/watcher-linux-x64-musl@2.5.6': + resolution: {integrity: sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] - '@parcel/watcher-wasm@2.5.1': - resolution: {integrity: sha512-RJxlQQLkaMMIuWRozy+z2vEqbaQlCuaCgVZIUCzQLYggY22LZbP5Y1+ia+FD724Ids9e+XIyOLXLrLgQSHIthw==} + '@parcel/watcher-wasm@2.5.6': + resolution: {integrity: sha512-byAiBZ1t3tXQvc8dMD/eoyE7lTXYorhn+6uVW5AC+JGI1KtJC/LvDche5cfUE+qiefH+Ybq0bUCJU0aB1cSHUA==} engines: {node: '>= 10.0.0'} bundledDependencies: - napi-wasm - '@parcel/watcher-win32-arm64@2.5.1': - resolution: {integrity: sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==} + '@parcel/watcher-win32-arm64@2.5.6': + resolution: {integrity: sha512-3ukyebjc6eGlw9yRt678DxVF7rjXatWiHvTXqphZLvo7aC5NdEgFufVwjFfY51ijYEWpXbqF5jtrK275z52D4Q==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [win32] - '@parcel/watcher-win32-ia32@2.5.1': - resolution: {integrity: sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==} + '@parcel/watcher-win32-ia32@2.5.6': + resolution: {integrity: sha512-k35yLp1ZMwwee3Ez/pxBi5cf4AoBKYXj00CZ80jUz5h8prpiaQsiRPKQMxoLstNuqe2vR4RNPEAEcjEFzhEz/g==} engines: {node: '>= 10.0.0'} cpu: [ia32] os: [win32] - '@parcel/watcher-win32-x64@2.5.1': - resolution: {integrity: sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==} + '@parcel/watcher-win32-x64@2.5.6': + resolution: {integrity: sha512-hbQlYcCq5dlAX9Qx+kFb0FHue6vbjlf0FrNzSKdYK2APUf7tGfGxQCk2ihEREmbR6ZMc0MVAD5RIX/41gpUzTw==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [win32] - '@parcel/watcher@2.5.1': - resolution: {integrity: sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==} + '@parcel/watcher@2.5.6': + resolution: {integrity: sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==} engines: {node: '>= 10.0.0'} '@pinojs/redact@0.4.0': @@ -1461,36 +1424,6 @@ packages: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} - '@protobufjs/aspromise@1.1.2': - resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==} - - '@protobufjs/base64@1.1.2': - resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==} - - '@protobufjs/codegen@2.0.4': - resolution: {integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==} - - '@protobufjs/eventemitter@1.1.0': - resolution: {integrity: sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==} - - '@protobufjs/fetch@1.1.0': - resolution: {integrity: sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==} - - '@protobufjs/float@1.0.2': - resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==} - - '@protobufjs/inquire@1.1.0': - resolution: {integrity: sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==} - - '@protobufjs/path@1.1.2': - resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==} - - '@protobufjs/pool@1.1.0': - resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==} - - '@protobufjs/utf8@1.1.0': - resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} - '@react-email/body@0.2.0': resolution: {integrity: sha512-9GCWmVmKUAoRfloboCd+RKm6X17xn7eGL7HnpAZUnjBXBilWCxsKnLMTC/ixSHDKS/A/057M1Tx6ZUXd89sVBw==} peerDependencies: @@ -1654,8 +1587,8 @@ packages: '@rolldown/pluginutils@1.0.0-beta.40': resolution: {integrity: sha512-s3GeJKSQOwBlzdUrj4ISjJj5SfSh+aqn0wjOar4Bx95iV1ETI7F6S/5hLcfAxZ9kXDcyrAkxPlqmd1ZITttf+w==} - '@rolldown/pluginutils@1.0.0-beta.47': - resolution: {integrity: sha512-8QagwMH3kNCuzD8EWL8R2YPW5e4OrHNSAHRFDdmFqEwEaD/KcNKjVoumo+gP2vW5eKB2UPbM6vTYiGZX0ixLnw==} + '@rolldown/pluginutils@1.0.0-rc.3': + resolution: {integrity: sha512-eybk3TjzzzV97Dlj5c+XrBFW57eTNhzod66y9HrBlzJ6NsCrWCp/2kaPS3K9wJmurBC0Tdw4yPjXKZqlznim3Q==} '@rollup/pluginutils@5.3.0': resolution: {integrity: sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==} @@ -1666,293 +1599,136 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.53.2': - resolution: {integrity: sha512-yDPzwsgiFO26RJA4nZo8I+xqzh7sJTZIWQOxn+/XOdPE31lAvLIYCKqjV+lNH/vxE2L2iH3plKxDCRK6i+CwhA==} + '@rollup/rollup-android-arm-eabi@4.59.0': + resolution: {integrity: sha512-upnNBkA6ZH2VKGcBj9Fyl9IGNPULcjXRlg0LLeaioQWueH30p6IXtJEbKAgvyv+mJaMxSm1l6xwDXYjpEMiLMg==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.53.2': - resolution: {integrity: sha512-k8FontTxIE7b0/OGKeSN5B6j25EuppBcWM33Z19JoVT7UTXFSo3D9CdU39wGTeb29NO3XxpMNauh09B+Ibw+9g==} + '@rollup/rollup-android-arm64@4.59.0': + resolution: {integrity: sha512-hZ+Zxj3SySm4A/DylsDKZAeVg0mvi++0PYVceVyX7hemkw7OreKdCvW2oQ3T1FMZvCaQXqOTHb8qmBShoqk69Q==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.53.2': - resolution: {integrity: sha512-A6s4gJpomNBtJ2yioj8bflM2oogDwzUiMl2yNJ2v9E7++sHrSrsQ29fOfn5DM/iCzpWcebNYEdXpaK4tr2RhfQ==} + '@rollup/rollup-darwin-arm64@4.59.0': + resolution: {integrity: sha512-W2Psnbh1J8ZJw0xKAd8zdNgF9HRLkdWwwdWqubSVk0pUuQkoHnv7rx4GiF9rT4t5DIZGAsConRE3AxCdJ4m8rg==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.53.2': - resolution: {integrity: sha512-e6XqVmXlHrBlG56obu9gDRPW3O3hLxpwHpLsBJvuI8qqnsrtSZ9ERoWUXtPOkY8c78WghyPHZdmPhHLWNdAGEw==} + '@rollup/rollup-darwin-x64@4.59.0': + resolution: {integrity: sha512-ZW2KkwlS4lwTv7ZVsYDiARfFCnSGhzYPdiOU4IM2fDbL+QGlyAbjgSFuqNRbSthybLbIJ915UtZBtmuLrQAT/w==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.53.2': - resolution: {integrity: sha512-v0E9lJW8VsrwPux5Qe5CwmH/CF/2mQs6xU1MF3nmUxmZUCHazCjLgYvToOk+YuuUqLQBio1qkkREhxhc656ViA==} + '@rollup/rollup-freebsd-arm64@4.59.0': + resolution: {integrity: sha512-EsKaJ5ytAu9jI3lonzn3BgG8iRBjV4LxZexygcQbpiU0wU0ATxhNVEpXKfUa0pS05gTcSDMKpn3Sx+QB9RlTTA==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.53.2': - resolution: {integrity: sha512-ClAmAPx3ZCHtp6ysl4XEhWU69GUB1D+s7G9YjHGhIGCSrsg00nEGRRZHmINYxkdoJehde8VIsDC5t9C0gb6yqA==} + '@rollup/rollup-freebsd-x64@4.59.0': + resolution: {integrity: sha512-d3DuZi2KzTMjImrxoHIAODUZYoUUMsuUiY4SRRcJy6NJoZ6iIqWnJu9IScV9jXysyGMVuW+KNzZvBLOcpdl3Vg==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.53.2': - resolution: {integrity: sha512-EPlb95nUsz6Dd9Qy13fI5kUPXNSljaG9FiJ4YUGU1O/Q77i5DYFW5KR8g1OzTcdZUqQQ1KdDqsTohdFVwCwjqg==} + '@rollup/rollup-linux-arm-gnueabihf@4.59.0': + resolution: {integrity: sha512-t4ONHboXi/3E0rT6OZl1pKbl2Vgxf9vJfWgmUoCEVQVxhW6Cw/c8I6hbbu7DAvgp82RKiH7TpLwxnJeKv2pbsw==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.53.2': - resolution: {integrity: sha512-BOmnVW+khAUX+YZvNfa0tGTEMVVEerOxN0pDk2E6N6DsEIa2Ctj48FOMfNDdrwinocKaC7YXUZ1pHlKpnkja/Q==} + '@rollup/rollup-linux-arm-musleabihf@4.59.0': + resolution: {integrity: sha512-CikFT7aYPA2ufMD086cVORBYGHffBo4K8MQ4uPS/ZnY54GKj36i196u8U+aDVT2LX4eSMbyHtyOh7D7Zvk2VvA==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.53.2': - resolution: {integrity: sha512-Xt2byDZ+6OVNuREgBXr4+CZDJtrVso5woFtpKdGPhpTPHcNG7D8YXeQzpNbFRxzTVqJf7kvPMCub/pcGUWgBjA==} + '@rollup/rollup-linux-arm64-gnu@4.59.0': + resolution: {integrity: sha512-jYgUGk5aLd1nUb1CtQ8E+t5JhLc9x5WdBKew9ZgAXg7DBk0ZHErLHdXM24rfX+bKrFe+Xp5YuJo54I5HFjGDAA==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.53.2': - resolution: {integrity: sha512-+LdZSldy/I9N8+klim/Y1HsKbJ3BbInHav5qE9Iy77dtHC/pibw1SR/fXlWyAk0ThnpRKoODwnAuSjqxFRDHUQ==} + '@rollup/rollup-linux-arm64-musl@4.59.0': + resolution: {integrity: sha512-peZRVEdnFWZ5Bh2KeumKG9ty7aCXzzEsHShOZEFiCQlDEepP1dpUl/SrUNXNg13UmZl+gzVDPsiCwnV1uI0RUA==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-loong64-gnu@4.53.2': - resolution: {integrity: sha512-8ms8sjmyc1jWJS6WdNSA23rEfdjWB30LH8Wqj0Cqvv7qSHnvw6kgMMXRdop6hkmGPlyYBdRPkjJnj3KCUHV/uQ==} + '@rollup/rollup-linux-loong64-gnu@4.59.0': + resolution: {integrity: sha512-gbUSW/97f7+r4gHy3Jlup8zDG190AuodsWnNiXErp9mT90iCy9NKKU0Xwx5k8VlRAIV2uU9CsMnEFg/xXaOfXg==} + cpu: [loong64] + os: [linux] + + '@rollup/rollup-linux-loong64-musl@4.59.0': + resolution: {integrity: sha512-yTRONe79E+o0FWFijasoTjtzG9EBedFXJMl888NBEDCDV9I2wGbFFfJQQe63OijbFCUZqxpHz1GzpbtSFikJ4Q==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-ppc64-gnu@4.53.2': - resolution: {integrity: sha512-3HRQLUQbpBDMmzoxPJYd3W6vrVHOo2cVW8RUo87Xz0JPJcBLBr5kZ1pGcQAhdZgX9VV7NbGNipah1omKKe23/g==} + '@rollup/rollup-linux-ppc64-gnu@4.59.0': + resolution: {integrity: sha512-sw1o3tfyk12k3OEpRddF68a1unZ5VCN7zoTNtSn2KndUE+ea3m3ROOKRCZxEpmT9nsGnogpFP9x6mnLTCaoLkA==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.53.2': - resolution: {integrity: sha512-fMjKi+ojnmIvhk34gZP94vjogXNNUKMEYs+EDaB/5TG/wUkoeua7p7VCHnE6T2Tx+iaghAqQX8teQzcvrYpaQA==} + '@rollup/rollup-linux-ppc64-musl@4.59.0': + resolution: {integrity: sha512-+2kLtQ4xT3AiIxkzFVFXfsmlZiG5FXYW7ZyIIvGA7Bdeuh9Z0aN4hVyXS/G1E9bTP/vqszNIN/pUKCk/BTHsKA==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-riscv64-gnu@4.59.0': + resolution: {integrity: sha512-NDYMpsXYJJaj+I7UdwIuHHNxXZ/b/N2hR15NyH3m2qAtb/hHPA4g4SuuvrdxetTdndfj9b1WOmy73kcPRoERUg==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-riscv64-musl@4.53.2': - resolution: {integrity: sha512-XuGFGU+VwUUV5kLvoAdi0Wz5Xbh2SrjIxCtZj6Wq8MDp4bflb/+ThZsVxokM7n0pcbkEr2h5/pzqzDYI7cCgLQ==} + '@rollup/rollup-linux-riscv64-musl@4.59.0': + resolution: {integrity: sha512-nLckB8WOqHIf1bhymk+oHxvM9D3tyPndZH8i8+35p/1YiVoVswPid2yLzgX7ZJP0KQvnkhM4H6QZ5m0LzbyIAg==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.53.2': - resolution: {integrity: sha512-w6yjZF0P+NGzWR3AXWX9zc0DNEGdtvykB03uhonSHMRa+oWA6novflo2WaJr6JZakG2ucsyb+rvhrKac6NIy+w==} + '@rollup/rollup-linux-s390x-gnu@4.59.0': + resolution: {integrity: sha512-oF87Ie3uAIvORFBpwnCvUzdeYUqi2wY6jRFWJAy1qus/udHFYIkplYRW+wo+GRUP4sKzYdmE1Y3+rY5Gc4ZO+w==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.53.2': - resolution: {integrity: sha512-yo8d6tdfdeBArzC7T/PnHd7OypfI9cbuZzPnzLJIyKYFhAQ8SvlkKtKBMbXDxe1h03Rcr7u++nFS7tqXz87Gtw==} + '@rollup/rollup-linux-x64-gnu@4.59.0': + resolution: {integrity: sha512-3AHmtQq/ppNuUspKAlvA8HtLybkDflkMuLK4DPo77DfthRb71V84/c4MlWJXixZz4uruIH4uaa07IqoAkG64fg==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.53.2': - resolution: {integrity: sha512-ah59c1YkCxKExPP8O9PwOvs+XRLKwh/mV+3YdKqQ5AMQ0r4M4ZDuOrpWkUaqO7fzAHdINzV9tEVu8vNw48z0lA==} + '@rollup/rollup-linux-x64-musl@4.59.0': + resolution: {integrity: sha512-2UdiwS/9cTAx7qIUZB/fWtToJwvt0Vbo0zmnYt7ED35KPg13Q0ym1g442THLC7VyI6JfYTP4PiSOWyoMdV2/xg==} cpu: [x64] os: [linux] - '@rollup/rollup-openharmony-arm64@4.53.2': - resolution: {integrity: sha512-4VEd19Wmhr+Zy7hbUsFZ6YXEiP48hE//KPLCSVNY5RMGX2/7HZ+QkN55a3atM1C/BZCGIgqN+xrVgtdak2S9+A==} + '@rollup/rollup-openbsd-x64@4.59.0': + resolution: {integrity: sha512-M3bLRAVk6GOwFlPTIxVBSYKUaqfLrn8l0psKinkCFxl4lQvOSz8ZrKDz2gxcBwHFpci0B6rttydI4IpS4IS/jQ==} + cpu: [x64] + os: [openbsd] + + '@rollup/rollup-openharmony-arm64@4.59.0': + resolution: {integrity: sha512-tt9KBJqaqp5i5HUZzoafHZX8b5Q2Fe7UjYERADll83O4fGqJ49O1FsL6LpdzVFQcpwvnyd0i+K/VSwu/o/nWlA==} cpu: [arm64] os: [openharmony] - '@rollup/rollup-win32-arm64-msvc@4.53.2': - resolution: {integrity: sha512-IlbHFYc/pQCgew/d5fslcy1KEaYVCJ44G8pajugd8VoOEI8ODhtb/j8XMhLpwHCMB3yk2J07ctup10gpw2nyMA==} + '@rollup/rollup-win32-arm64-msvc@4.59.0': + resolution: {integrity: sha512-V5B6mG7OrGTwnxaNUzZTDTjDS7F75PO1ae6MJYdiMu60sq0CqN5CVeVsbhPxalupvTX8gXVSU9gq+Rx1/hvu6A==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.53.2': - resolution: {integrity: sha512-lNlPEGgdUfSzdCWU176ku/dQRnA7W+Gp8d+cWv73jYrb8uT7HTVVxq62DUYxjbaByuf1Yk0RIIAbDzp+CnOTFg==} + '@rollup/rollup-win32-ia32-msvc@4.59.0': + resolution: {integrity: sha512-UKFMHPuM9R0iBegwzKF4y0C4J9u8C6MEJgFuXTBerMk7EJ92GFVFYBfOZaSGLu6COf7FxpQNqhNS4c4icUPqxA==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-gnu@4.53.2': - resolution: {integrity: sha512-S6YojNVrHybQis2lYov1sd+uj7K0Q05NxHcGktuMMdIQ2VixGwAfbJ23NnlvvVV1bdpR2m5MsNBViHJKcA4ADw==} + '@rollup/rollup-win32-x64-gnu@4.59.0': + resolution: {integrity: sha512-laBkYlSS1n2L8fSo1thDNGrCTQMmxjYY5G0WFWjFFYZkKPjsMBsgJfGf4TLxXrF6RyhI60L8TMOjBMvXiTcxeA==} cpu: [x64] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.53.2': - resolution: {integrity: sha512-k+/Rkcyx//P6fetPoLMb8pBeqJBNGx81uuf7iljX9++yNBVRDQgD04L+SVXmXmh5ZP4/WOp4mWF0kmi06PW2tA==} + '@rollup/rollup-win32-x64-msvc@4.59.0': + resolution: {integrity: sha512-2HRCml6OztYXyJXAvdDXPKcawukWY2GpR5/nxKp4iBgiO3wcoEGkAaqctIbZcNB6KlUQBIqt8VYkNSj2397EfA==} cpu: [x64] os: [win32] '@selderee/plugin-htmlparser2@0.11.0': resolution: {integrity: sha512-P33hHGdldxGabLFjPPpaTxVolMrzrcegejx+0GxjrIb9Zv48D8yAIA/QTDR2dFl7Uz7urX8aX6+5bCZslr+gWQ==} - '@sinclair/typebox@0.34.41': - resolution: {integrity: sha512-6gS8pZzSXdyRHTIqoqSVknxolr1kzfy4/CeDnrzsVz8TTIWUbOBr6gnzOmTYJ3eXQNh4IYHIGi5aIL7sOZ2G/g==} - - '@smithy/abort-controller@4.2.7': - resolution: {integrity: sha512-rzMY6CaKx2qxrbYbqjXWS0plqEy7LOdKHS0bg4ixJ6aoGDPNUcLWk/FRNuCILh7GKLG9TFUXYYeQQldMBBwuyw==} - engines: {node: '>=18.0.0'} - - '@smithy/config-resolver@4.4.5': - resolution: {integrity: sha512-HAGoUAFYsUkoSckuKbCPayECeMim8pOu+yLy1zOxt1sifzEbrsRpYa+mKcMdiHKMeiqOibyPG0sFJnmaV/OGEg==} - engines: {node: '>=18.0.0'} - - '@smithy/core@3.20.0': - resolution: {integrity: sha512-WsSHCPq/neD5G/MkK4csLI5Y5Pkd9c1NMfpYEKeghSGaD4Ja1qLIohRQf2D5c1Uy5aXp76DeKHkzWZ9KAlHroQ==} - engines: {node: '>=18.0.0'} - - '@smithy/credential-provider-imds@4.2.7': - resolution: {integrity: sha512-CmduWdCiILCRNbQWFR0OcZlUPVtyE49Sr8yYL0rZQ4D/wKxiNzBNS/YHemvnbkIWj623fplgkexUd/c9CAKdoA==} - engines: {node: '>=18.0.0'} - - '@smithy/fetch-http-handler@5.3.8': - resolution: {integrity: sha512-h/Fi+o7mti4n8wx1SR6UHWLaakwHRx29sizvp8OOm7iqwKGFneT06GCSFhml6Bha5BT6ot5pj3CYZnCHhGC2Rg==} - engines: {node: '>=18.0.0'} - - '@smithy/hash-node@4.2.7': - resolution: {integrity: sha512-PU/JWLTBCV1c8FtB8tEFnY4eV1tSfBc7bDBADHfn1K+uRbPgSJ9jnJp0hyjiFN2PMdPzxsf1Fdu0eo9fJ760Xw==} - engines: {node: '>=18.0.0'} - - '@smithy/invalid-dependency@4.2.7': - resolution: {integrity: sha512-ncvgCr9a15nPlkhIUx3CU4d7E7WEuVJOV7fS7nnK2hLtPK9tYRBkMHQbhXU1VvvKeBm/O0x26OEoBq+ngFpOEQ==} - engines: {node: '>=18.0.0'} - - '@smithy/is-array-buffer@2.2.0': - resolution: {integrity: sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==} - engines: {node: '>=14.0.0'} - - '@smithy/is-array-buffer@4.2.0': - resolution: {integrity: sha512-DZZZBvC7sjcYh4MazJSGiWMI2L7E0oCiRHREDzIxi/M2LY79/21iXt6aPLHge82wi5LsuRF5A06Ds3+0mlh6CQ==} - engines: {node: '>=18.0.0'} - - '@smithy/middleware-content-length@4.2.7': - resolution: {integrity: sha512-GszfBfCcvt7kIbJ41LuNa5f0wvQCHhnGx/aDaZJCCT05Ld6x6U2s0xsc/0mBFONBZjQJp2U/0uSJ178OXOwbhg==} - engines: {node: '>=18.0.0'} - - '@smithy/middleware-endpoint@4.4.1': - resolution: {integrity: sha512-gpLspUAoe6f1M6H0u4cVuFzxZBrsGZmjx2O9SigurTx4PbntYa4AJ+o0G0oGm1L2oSX6oBhcGHwrfJHup2JnJg==} - engines: {node: '>=18.0.0'} - - '@smithy/middleware-retry@4.4.17': - resolution: {integrity: sha512-MqbXK6Y9uq17h+4r0ogu/sBT6V/rdV+5NvYL7ZV444BKfQygYe8wAhDrVXagVebN6w2RE0Fm245l69mOsPGZzg==} - engines: {node: '>=18.0.0'} - - '@smithy/middleware-serde@4.2.8': - resolution: {integrity: sha512-8rDGYen5m5+NV9eHv9ry0sqm2gI6W7mc1VSFMtn6Igo25S507/HaOX9LTHAS2/J32VXD0xSzrY0H5FJtOMS4/w==} - engines: {node: '>=18.0.0'} - - '@smithy/middleware-stack@4.2.7': - resolution: {integrity: sha512-bsOT0rJ+HHlZd9crHoS37mt8qRRN/h9jRve1SXUhVbkRzu0QaNYZp1i1jha4n098tsvROjcwfLlfvcFuJSXEsw==} - engines: {node: '>=18.0.0'} - - '@smithy/node-config-provider@4.3.7': - resolution: {integrity: sha512-7r58wq8sdOcrwWe+klL9y3bc4GW1gnlfnFOuL7CXa7UzfhzhxKuzNdtqgzmTV+53lEp9NXh5hY/S4UgjLOzPfw==} - engines: {node: '>=18.0.0'} - - '@smithy/node-http-handler@4.4.7': - resolution: {integrity: sha512-NELpdmBOO6EpZtWgQiHjoShs1kmweaiNuETUpuup+cmm/xJYjT4eUjfhrXRP4jCOaAsS3c3yPsP3B+K+/fyPCQ==} - engines: {node: '>=18.0.0'} - - '@smithy/property-provider@4.2.7': - resolution: {integrity: sha512-jmNYKe9MGGPoSl/D7JDDs1C8b3dC8f/w78LbaVfoTtWy4xAd5dfjaFG9c9PWPihY4ggMQNQSMtzU77CNgAJwmA==} - engines: {node: '>=18.0.0'} - - '@smithy/protocol-http@5.3.7': - resolution: {integrity: sha512-1r07pb994I20dD/c2seaZhoCuNYm0rWrvBxhCQ70brNh11M5Ml2ew6qJVo0lclB3jMIXirD4s2XRXRe7QEi0xA==} - engines: {node: '>=18.0.0'} - - '@smithy/querystring-builder@4.2.7': - resolution: {integrity: sha512-eKONSywHZxK4tBxe2lXEysh8wbBdvDWiA+RIuaxZSgCMmA0zMgoDpGLJhnyj+c0leOQprVnXOmcB4m+W9Rw7sg==} - engines: {node: '>=18.0.0'} - - '@smithy/querystring-parser@4.2.7': - resolution: {integrity: sha512-3X5ZvzUHmlSTHAXFlswrS6EGt8fMSIxX/c3Rm1Pni3+wYWB6cjGocmRIoqcQF9nU5OgGmL0u7l9m44tSUpfj9w==} - engines: {node: '>=18.0.0'} - - '@smithy/service-error-classification@4.2.7': - resolution: {integrity: sha512-YB7oCbukqEb2Dlh3340/8g8vNGbs/QsNNRms+gv3N2AtZz9/1vSBx6/6tpwQpZMEJFs7Uq8h4mmOn48ZZ72MkA==} - engines: {node: '>=18.0.0'} - - '@smithy/shared-ini-file-loader@4.4.2': - resolution: {integrity: sha512-M7iUUff/KwfNunmrgtqBfvZSzh3bmFgv/j/t1Y1dQ+8dNo34br1cqVEqy6v0mYEgi0DkGO7Xig0AnuOaEGVlcg==} - engines: {node: '>=18.0.0'} - - '@smithy/signature-v4@5.3.7': - resolution: {integrity: sha512-9oNUlqBlFZFOSdxgImA6X5GFuzE7V2H7VG/7E70cdLhidFbdtvxxt81EHgykGK5vq5D3FafH//X+Oy31j3CKOg==} - engines: {node: '>=18.0.0'} - - '@smithy/smithy-client@4.10.2': - resolution: {integrity: sha512-D5z79xQWpgrGpAHb054Fn2CCTQZpog7JELbVQ6XAvXs5MNKWf28U9gzSBlJkOyMl9LA1TZEjRtwvGXfP0Sl90g==} - engines: {node: '>=18.0.0'} - - '@smithy/types@4.11.0': - resolution: {integrity: sha512-mlrmL0DRDVe3mNrjTcVcZEgkFmufITfUAPBEA+AHYiIeYyJebso/He1qLbP3PssRe22KUzLRpQSdBPbXdgZ2VA==} - engines: {node: '>=18.0.0'} - - '@smithy/url-parser@4.2.7': - resolution: {integrity: sha512-/RLtVsRV4uY3qPWhBDsjwahAtt3x2IsMGnP5W1b2VZIe+qgCqkLxI1UOHDZp1Q1QSOrdOR32MF3Ph2JfWT1VHg==} - engines: {node: '>=18.0.0'} - - '@smithy/util-base64@4.3.0': - resolution: {integrity: sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ==} - engines: {node: '>=18.0.0'} - - '@smithy/util-body-length-browser@4.2.0': - resolution: {integrity: sha512-Fkoh/I76szMKJnBXWPdFkQJl2r9SjPt3cMzLdOB6eJ4Pnpas8hVoWPYemX/peO0yrrvldgCUVJqOAjUrOLjbxg==} - engines: {node: '>=18.0.0'} - - '@smithy/util-body-length-node@4.2.1': - resolution: {integrity: sha512-h53dz/pISVrVrfxV1iqXlx5pRg3V2YWFcSQyPyXZRrZoZj4R4DeWRDo1a7dd3CPTcFi3kE+98tuNyD2axyZReA==} - engines: {node: '>=18.0.0'} - - '@smithy/util-buffer-from@2.2.0': - resolution: {integrity: sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==} - engines: {node: '>=14.0.0'} - - '@smithy/util-buffer-from@4.2.0': - resolution: {integrity: sha512-kAY9hTKulTNevM2nlRtxAG2FQ3B2OR6QIrPY3zE5LqJy1oxzmgBGsHLWTcNhWXKchgA0WHW+mZkQrng/pgcCew==} - engines: {node: '>=18.0.0'} - - '@smithy/util-config-provider@4.2.0': - resolution: {integrity: sha512-YEjpl6XJ36FTKmD+kRJJWYvrHeUvm5ykaUS5xK+6oXffQPHeEM4/nXlZPe+Wu0lsgRUcNZiliYNh/y7q9c2y6Q==} - engines: {node: '>=18.0.0'} - - '@smithy/util-defaults-mode-browser@4.3.16': - resolution: {integrity: sha512-/eiSP3mzY3TsvUOYMeL4EqUX6fgUOj2eUOU4rMMgVbq67TiRLyxT7Xsjxq0bW3OwuzK009qOwF0L2OgJqperAQ==} - engines: {node: '>=18.0.0'} - - '@smithy/util-defaults-mode-node@4.2.19': - resolution: {integrity: sha512-3a4+4mhf6VycEJyHIQLypRbiwG6aJvbQAeRAVXydMmfweEPnLLabRbdyo/Pjw8Rew9vjsh5WCdhmDaHkQnhhhA==} - engines: {node: '>=18.0.0'} - - '@smithy/util-endpoints@3.2.7': - resolution: {integrity: sha512-s4ILhyAvVqhMDYREeTS68R43B1V5aenV5q/V1QpRQJkCXib5BPRo4s7uNdzGtIKxaPHCfU/8YkvPAEvTpxgspg==} - engines: {node: '>=18.0.0'} - - '@smithy/util-hex-encoding@4.2.0': - resolution: {integrity: sha512-CCQBwJIvXMLKxVbO88IukazJD9a4kQ9ZN7/UMGBjBcJYvatpWk+9g870El4cB8/EJxfe+k+y0GmR9CAzkF+Nbw==} - engines: {node: '>=18.0.0'} - - '@smithy/util-middleware@4.2.7': - resolution: {integrity: sha512-i1IkpbOae6NvIKsEeLLM9/2q4X+M90KV3oCFgWQI4q0Qz+yUZvsr+gZPdAEAtFhWQhAHpTsJO8DRJPuwVyln+w==} - engines: {node: '>=18.0.0'} - - '@smithy/util-retry@4.2.7': - resolution: {integrity: sha512-SvDdsQyF5CIASa4EYVT02LukPHVzAgUA4kMAuZ97QJc2BpAqZfA4PINB8/KOoCXEw9tsuv/jQjMeaHFvxdLNGg==} - engines: {node: '>=18.0.0'} - - '@smithy/util-stream@4.5.8': - resolution: {integrity: sha512-ZnnBhTapjM0YPGUSmOs0Mcg/Gg87k503qG4zU2v/+Js2Gu+daKOJMeqcQns8ajepY8tgzzfYxl6kQyZKml6O2w==} - engines: {node: '>=18.0.0'} - - '@smithy/util-uri-escape@4.2.0': - resolution: {integrity: sha512-igZpCKV9+E/Mzrpq6YacdTQ0qTiLm85gD6N/IrmyDvQFA4UnU3d5g3m8tMT/6zG/vVkWSU+VxeUyGonL62DuxA==} - engines: {node: '>=18.0.0'} - - '@smithy/util-utf8@2.3.0': - resolution: {integrity: sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==} - engines: {node: '>=14.0.0'} - - '@smithy/util-utf8@4.2.0': - resolution: {integrity: sha512-zBPfuzoI8xyBtR2P6WQj63Rz8i3AmfAaJLuNG8dWsfvPe8lO4aCPYLn879mEgHndZH1zQ2oXmG8O1GGzzaoZiw==} - engines: {node: '>=18.0.0'} - - '@smithy/uuid@1.1.0': - resolution: {integrity: sha512-4aUIteuyxtBUhVdiQqcDhKFitwfd9hqoSDYY2KRXiWtgoWJ9Bmise+KfEPDiVHWeJepvF8xJO9/9+WDIciMFFw==} - engines: {node: '>=18.0.0'} + '@sinclair/typebox@0.34.48': + resolution: {integrity: sha512-kKJTNuK3AQOrgjjotVxMrCn1sUJwM76wMszfq1kdU4uYVJjvEWuFQ6HgvLt4Xz3fSmZlTOxJ/Ie13KnIcWQXFA==} '@so-ric/colorspace@1.1.6': resolution: {integrity: sha512-/KiKkpHNOBgkFJwu9sh48LkHSMYGyuTcSFK/qMBdnOAlrRJzRSXAOFB5qwzaVQuDl8wAvHVMkaASQDReTahxuw==} @@ -1960,18 +1736,18 @@ packages: '@socket.io/component-emitter@3.1.2': resolution: {integrity: sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==} - '@solid-primitives/event-listener@2.4.3': - resolution: {integrity: sha512-h4VqkYFv6Gf+L7SQj+Y6puigL/5DIi7x5q07VZET7AWcS+9/G3WfIE9WheniHWJs51OEkRB43w6lDys5YeFceg==} + '@solid-primitives/event-listener@2.4.4': + resolution: {integrity: sha512-6MMhPO1PcPhrGUPlkNXXtOzpEVLbmCkfzjRMLdjtlO/VE05sFyzjP0VwZUTnB2hT95+IEh4h6xCMxGxTUrcTcg==} peerDependencies: solid-js: ^1.6.12 - '@solid-primitives/keyboard@1.3.3': - resolution: {integrity: sha512-9dQHTTgLBqyAI7aavtO+HnpTVJgWQA1ghBSrmLtMu1SMxLPDuLfuNr+Tk5udb4AL4Ojg7h9JrKOGEEDqsJXWJA==} + '@solid-primitives/keyboard@1.3.4': + resolution: {integrity: sha512-RTvGehgsJAGjD1jCeGptD2PgJ7de+rWKB3Fa27vB68/QbMa184WcD3FF9FgNAMQr4SmDBbNTdo70JVXXSFdahA==} peerDependencies: solid-js: ^1.6.12 - '@solid-primitives/resize-observer@2.1.3': - resolution: {integrity: sha512-zBLje5E06TgOg93S7rGPldmhDnouNGhvfZVKOp+oG2XU8snA+GoCSSCz1M+jpNAg5Ek2EakU5UVQqL152WmdXQ==} + '@solid-primitives/resize-observer@2.1.4': + resolution: {integrity: sha512-dxKYLU1cjfnEuJP42Ar0pTOmx4E57/lNabKAhKQc4kjqL/OC/h/9MSRMv0/d2/TcAKAkBxHMKKf+uRSUxDTt+g==} peerDependencies: solid-js: ^1.6.12 @@ -1990,16 +1766,21 @@ packages: peerDependencies: solid-js: ^1.6.12 + '@sveltejs/acorn-typescript@1.0.9': + resolution: {integrity: sha512-lVJX6qEgs/4DOcRTpo56tmKzVPtoWAaVbL4hfO7t7NVwl9AAXzQR6cihesW1BmNMPl+bK6dreu2sOKBP2Q9CIA==} + peerDependencies: + acorn: ^8.9.0 + '@swc/helpers@0.5.15': resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} - '@t3-oss/env-core@0.13.8': - resolution: {integrity: sha512-L1inmpzLQyYu4+Q1DyrXsGJYCXbtXjC4cICw1uAKv0ppYPQv656lhZPU91Qd1VS6SO/bou1/q5ufVzBGbNsUpw==} + '@t3-oss/env-core@0.13.10': + resolution: {integrity: sha512-NNFfdlJ+HmPHkLi2HKy7nwuat9SIYOxei9K10lO2YlcSObDILY7mHZNSHsieIM3A0/5OOzw/P/b+yLvPdaG52g==} peerDependencies: arktype: ^2.1.0 typescript: '>=5.0.0' valibot: ^1.0.0-beta.7 || ^1.0.0 - zod: ^3.24.0 || ^4.0.0-beta.0 + zod: ^3.24.0 || ^4.0.0 peerDependenciesMeta: arktype: optional: true @@ -2010,65 +1791,65 @@ packages: zod: optional: true - '@tailwindcss/node@4.1.18': - resolution: {integrity: sha512-DoR7U1P7iYhw16qJ49fgXUlry1t4CpXeErJHnQ44JgTSKMaZUdf17cfn5mHchfJ4KRBZRFA/Coo+MUF5+gOaCQ==} + '@tailwindcss/node@4.2.0': + resolution: {integrity: sha512-Yv+fn/o2OmL5fh/Ir62VXItdShnUxfpkMA4Y7jdeC8O81WPB8Kf6TT6GSHvnqgSwDzlB5iT7kDpeXxLsUS0T6Q==} - '@tailwindcss/oxide-android-arm64@4.1.18': - resolution: {integrity: sha512-dJHz7+Ugr9U/diKJA0W6N/6/cjI+ZTAoxPf9Iz9BFRF2GzEX8IvXxFIi/dZBloVJX/MZGvRuFA9rqwdiIEZQ0Q==} - engines: {node: '>= 10'} + '@tailwindcss/oxide-android-arm64@4.2.0': + resolution: {integrity: sha512-F0QkHAVaW/JNBWl4CEKWdZ9PMb0khw5DCELAOnu+RtjAfx5Zgw+gqCHFvqg3AirU1IAd181fwOtJQ5I8Yx5wtw==} + engines: {node: '>= 20'} cpu: [arm64] os: [android] - '@tailwindcss/oxide-darwin-arm64@4.1.18': - resolution: {integrity: sha512-Gc2q4Qhs660bhjyBSKgq6BYvwDz4G+BuyJ5H1xfhmDR3D8HnHCmT/BSkvSL0vQLy/nkMLY20PQ2OoYMO15Jd0A==} - engines: {node: '>= 10'} + '@tailwindcss/oxide-darwin-arm64@4.2.0': + resolution: {integrity: sha512-I0QylkXsBsJMZ4nkUNSR04p6+UptjcwhcVo3Zu828ikiEqHjVmQL9RuQ6uT/cVIiKpvtVA25msu/eRV97JeNSA==} + engines: {node: '>= 20'} cpu: [arm64] os: [darwin] - '@tailwindcss/oxide-darwin-x64@4.1.18': - resolution: {integrity: sha512-FL5oxr2xQsFrc3X9o1fjHKBYBMD1QZNyc1Xzw/h5Qu4XnEBi3dZn96HcHm41c/euGV+GRiXFfh2hUCyKi/e+yw==} - engines: {node: '>= 10'} + '@tailwindcss/oxide-darwin-x64@4.2.0': + resolution: {integrity: sha512-6TmQIn4p09PBrmnkvbYQ0wbZhLtbaksCDx7Y7R3FYYx0yxNA7xg5KP7dowmQ3d2JVdabIHvs3Hx4K3d5uCf8xg==} + engines: {node: '>= 20'} cpu: [x64] os: [darwin] - '@tailwindcss/oxide-freebsd-x64@4.1.18': - resolution: {integrity: sha512-Fj+RHgu5bDodmV1dM9yAxlfJwkkWvLiRjbhuO2LEtwtlYlBgiAT4x/j5wQr1tC3SANAgD+0YcmWVrj8R9trVMA==} - engines: {node: '>= 10'} + '@tailwindcss/oxide-freebsd-x64@4.2.0': + resolution: {integrity: sha512-qBudxDvAa2QwGlq9y7VIzhTvp2mLJ6nD/G8/tI70DCDoneaUeLWBJaPcbfzqRIWraj+o969aDQKvKW9dvkUizw==} + engines: {node: '>= 20'} cpu: [x64] os: [freebsd] - '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.18': - resolution: {integrity: sha512-Fp+Wzk/Ws4dZn+LV2Nqx3IilnhH51YZoRaYHQsVq3RQvEl+71VGKFpkfHrLM/Li+kt5c0DJe/bHXK1eHgDmdiA==} - engines: {node: '>= 10'} + '@tailwindcss/oxide-linux-arm-gnueabihf@4.2.0': + resolution: {integrity: sha512-7XKkitpy5NIjFZNUQPeUyNJNJn1CJeV7rmMR+exHfTuOsg8rxIO9eNV5TSEnqRcaOK77zQpsyUkBWmPy8FgdSg==} + engines: {node: '>= 20'} cpu: [arm] os: [linux] - '@tailwindcss/oxide-linux-arm64-gnu@4.1.18': - resolution: {integrity: sha512-S0n3jboLysNbh55Vrt7pk9wgpyTTPD0fdQeh7wQfMqLPM/Hrxi+dVsLsPrycQjGKEQk85Kgbx+6+QnYNiHalnw==} - engines: {node: '>= 10'} + '@tailwindcss/oxide-linux-arm64-gnu@4.2.0': + resolution: {integrity: sha512-Mff5a5Q3WoQR01pGU1gr29hHM1N93xYrKkGXfPw/aRtK4bOc331Ho4Tgfsm5WDGvpevqMpdlkCojT3qlCQbCpA==} + engines: {node: '>= 20'} cpu: [arm64] os: [linux] - '@tailwindcss/oxide-linux-arm64-musl@4.1.18': - resolution: {integrity: sha512-1px92582HkPQlaaCkdRcio71p8bc8i/ap5807tPRDK/uw953cauQBT8c5tVGkOwrHMfc2Yh6UuxaH4vtTjGvHg==} - engines: {node: '>= 10'} + '@tailwindcss/oxide-linux-arm64-musl@4.2.0': + resolution: {integrity: sha512-XKcSStleEVnbH6W/9DHzZv1YhjE4eSS6zOu2eRtYAIh7aV4o3vIBs+t/B15xlqoxt6ef/0uiqJVB6hkHjWD/0A==} + engines: {node: '>= 20'} cpu: [arm64] os: [linux] - '@tailwindcss/oxide-linux-x64-gnu@4.1.18': - resolution: {integrity: sha512-v3gyT0ivkfBLoZGF9LyHmts0Isc8jHZyVcbzio6Wpzifg/+5ZJpDiRiUhDLkcr7f/r38SWNe7ucxmGW3j3Kb/g==} - engines: {node: '>= 10'} + '@tailwindcss/oxide-linux-x64-gnu@4.2.0': + resolution: {integrity: sha512-/hlXCBqn9K6fi7eAM0RsobHwJYa5V/xzWspVTzxnX+Ft9v6n+30Pz8+RxCn7sQL/vRHHLS30iQPrHQunu6/vJA==} + engines: {node: '>= 20'} cpu: [x64] os: [linux] - '@tailwindcss/oxide-linux-x64-musl@4.1.18': - resolution: {integrity: sha512-bhJ2y2OQNlcRwwgOAGMY0xTFStt4/wyU6pvI6LSuZpRgKQwxTec0/3Scu91O8ir7qCR3AuepQKLU/kX99FouqQ==} - engines: {node: '>= 10'} + '@tailwindcss/oxide-linux-x64-musl@4.2.0': + resolution: {integrity: sha512-lKUaygq4G7sWkhQbfdRRBkaq4LY39IriqBQ+Gk6l5nKq6Ay2M2ZZb1tlIyRNgZKS8cbErTwuYSor0IIULC0SHw==} + engines: {node: '>= 20'} cpu: [x64] os: [linux] - '@tailwindcss/oxide-wasm32-wasi@4.1.18': - resolution: {integrity: sha512-LffYTvPjODiP6PT16oNeUQJzNVyJl1cjIebq/rWWBF+3eDst5JGEFSc5cWxyRCJ0Mxl+KyIkqRxk1XPEs9x8TA==} + '@tailwindcss/oxide-wasm32-wasi@4.2.0': + resolution: {integrity: sha512-xuDjhAsFdUuFP5W9Ze4k/o4AskUtI8bcAGU4puTYprr89QaYFmhYOPfP+d1pH+k9ets6RoE23BXZM1X1jJqoyw==} engines: {node: '>=14.0.0'} cpu: [wasm32] bundledDependencies: @@ -2079,24 +1860,24 @@ packages: - '@emnapi/wasi-threads' - tslib - '@tailwindcss/oxide-win32-arm64-msvc@4.1.18': - resolution: {integrity: sha512-HjSA7mr9HmC8fu6bdsZvZ+dhjyGCLdotjVOgLA2vEqxEBZaQo9YTX4kwgEvPCpRh8o4uWc4J/wEoFzhEmjvPbA==} - engines: {node: '>= 10'} + '@tailwindcss/oxide-win32-arm64-msvc@4.2.0': + resolution: {integrity: sha512-2UU/15y1sWDEDNJXxEIrfWKC2Yb4YgIW5Xz2fKFqGzFWfoMHWFlfa1EJlGO2Xzjkq/tvSarh9ZTjvbxqWvLLXA==} + engines: {node: '>= 20'} cpu: [arm64] os: [win32] - '@tailwindcss/oxide-win32-x64-msvc@4.1.18': - resolution: {integrity: sha512-bJWbyYpUlqamC8dpR7pfjA0I7vdF6t5VpUGMWRkXVE3AXgIZjYUYAK7II1GNaxR8J1SSrSrppRar8G++JekE3Q==} - engines: {node: '>= 10'} + '@tailwindcss/oxide-win32-x64-msvc@4.2.0': + resolution: {integrity: sha512-CrFadmFoc+z76EV6LPG1jx6XceDsaCG3lFhyLNo/bV9ByPrE+FnBPckXQVP4XRkN76h3Fjt/a+5Er/oA/nCBvQ==} + engines: {node: '>= 20'} cpu: [x64] os: [win32] - '@tailwindcss/oxide@4.1.18': - resolution: {integrity: sha512-EgCR5tTS5bUSKQgzeMClT6iCY3ToqE1y+ZB0AKldj809QXk1Y+3jB0upOYZrn9aGIzPtUsP7sX4QQ4XtjBB95A==} - engines: {node: '>= 10'} + '@tailwindcss/oxide@4.2.0': + resolution: {integrity: sha512-AZqQzADaj742oqn2xjl5JbIOzZB/DGCYF/7bpvhA8KvjUj9HJkag6bBuwZvH1ps6dfgxNHyuJVlzSr2VpMgdTQ==} + engines: {node: '>= 20'} - '@tailwindcss/vite@4.1.18': - resolution: {integrity: sha512-jVA+/UpKL1vRLg6Hkao5jldawNmRo7mQYrZtNHMIVpLfLhDml5nMRUo/8MwoX2vNXvnaXNNMedrMfMugAVX1nA==} + '@tailwindcss/vite@4.2.0': + resolution: {integrity: sha512-da9mFCaHpoOgtQiWtDGIikTrSpUFBtIZCG3jy/u2BGV+l/X1/pbxzmIUxNt6JWm19N3WtGi4KlJdSH/Si83WOA==} peerDependencies: vite: ^5.2.0 || ^6 || ^7 @@ -2104,8 +1885,8 @@ packages: resolution: {integrity: sha512-kl0r6N5iIL3t9gGDRAv55VRM3UIyMKVH83esRGq7xBjYsRLe/BeCIN2HqrlJkObUXQMKhy7i8ejuGOn+bDqDBw==} engines: {node: '>=18'} - '@tanstack/devtools-client@0.0.4': - resolution: {integrity: sha512-LefnH9KE9uRDEWifc3QDcooskA8ikfs41bybDTgpYQpyTUspZnaEdUdya9Hry0KYxZ8nos0S3nNbsP79KHqr6Q==} + '@tanstack/devtools-client@0.0.5': + resolution: {integrity: sha512-hsNDE3iu4frt9cC2ppn1mNRnLKo2uc1/1hXAyY9z4UYb+o40M2clFAhiFoo4HngjfGJDV3x18KVVIq7W4Un+zA==} engines: {node: '>=18'} '@tanstack/devtools-event-bus@0.3.3': @@ -2126,8 +1907,8 @@ packages: peerDependencies: solid-js: '>=1.9.7' - '@tanstack/devtools-vite@0.3.11': - resolution: {integrity: sha512-t5jaWJNgkXOQTxuNrwkz71cN86zPZnLJY2Rz0IaMDgjb0ib1EKHeRgdqHMR/2YL96yhCHHDCHroBQXsw5Da4dg==} + '@tanstack/devtools-vite@0.3.12': + resolution: {integrity: sha512-fGJgu4xUhKmGk+a+/aHD8l5HKVk6+ObA+6D3YC3xCXbai/YmaGhztqcZf1tKUqjZyYyQLHsjqmKzvJgVpQP1jw==} engines: {node: '>=18'} peerDependencies: vite: ^6.0.0 || ^7.0.0 @@ -2138,35 +1919,22 @@ packages: peerDependencies: solid-js: '>=1.9.7' - '@tanstack/directive-functions-plugin@1.134.5': - resolution: {integrity: sha512-J3oawV8uBRBbPoLgMdyHt+LxzTNuWRKNJJuCLWsm/yq6v0IQSvIVCgfD2+liIiSnDPxGZ8ExduPXy8IzS70eXw==} - engines: {node: '>=12'} - peerDependencies: - vite: '>=6.0.0 || >=7.0.0' - - '@tanstack/form-core@1.25.0': - resolution: {integrity: sha512-OEWW2uTOFMyRmHrVEiPOn+J27ekQ/vXwRAJt9kD8U8vCt8CmpClj989OOGGSBSVJtDNxGUcWyKF8gYznnqIyaw==} - - '@tanstack/form-core@1.28.0': - resolution: {integrity: sha512-MX3YveB6SKHAJ2yUwp+Ca/PCguub8bVEnLcLUbFLwdkSRMkP0lMGdaZl+F0JuEgZw56c6iFoRyfILhS7OQpydA==} + '@tanstack/form-core@1.28.3': + resolution: {integrity: sha512-DBhnu1d5VfACAYOAZJO8tsEUHjWczZMJY8v/YrtAJNWpwvL/3ogDuz8e6yUB2m/iVTNq6K8yrnVN2nrX0/BX/w==} - '@tanstack/history@1.133.28': - resolution: {integrity: sha512-B7+x7eP2FFvi3fgd3rNH9o/Eixt+pp0zCIdGhnQbAJjFrlwIKGjGnwyJjhWJ5fMQlGks/E2LdDTqEV4W9Plx7g==} - engines: {node: '>=12'} + '@tanstack/history@1.161.4': + resolution: {integrity: sha512-Kp/WSt411ZWYvgXy6uiv5RmhHrz9cAml05AQPrtdAp7eUqvIDbMGPnML25OKbzR3RJ1q4wgENxDTvlGPa9+Mww==} + engines: {node: '>=20.19'} '@tanstack/pacer-lite@0.1.1': resolution: {integrity: sha512-y/xtNPNt/YeyoVxE/JCx+T7yjEzpezmbb+toK8DDD1P4m7Kzs5YR956+7OKexG3f8aXgC3rLZl7b1V+yNUSy5w==} engines: {node: '>=18'} - '@tanstack/pacer@0.15.4': - resolution: {integrity: sha512-vGY+CWsFZeac3dELgB6UZ4c7OacwsLb8hvL2gLS6hTgy8Fl0Bm/aLokHaeDIP+q9F9HUZTnp360z9uv78eg8pg==} - engines: {node: '>=18'} - - '@tanstack/query-core@5.90.10': - resolution: {integrity: sha512-EhZVFu9rl7GfRNuJLJ3Y7wtbTnENsvzp+YpcAV7kCYiXni1v8qZh++lpw4ch4rrwC0u/EZRnBHIehzCGzwXDSQ==} + '@tanstack/query-core@5.90.20': + resolution: {integrity: sha512-OMD2HLpNouXEfZJWcKeVKUgQ5n+n3A2JFmBaScpNDUqSrQSjiveC7dKMe53uJUg1nDG16ttFPz2xfilz6i2uVg==} - '@tanstack/query-devtools@5.90.1': - resolution: {integrity: sha512-GtINOPjPUH0OegJExZ70UahT9ykmAhmtNVcmtdnOZbxLwT7R5OmRztR5Ahe3/Cu7LArEmR6/588tAycuaWb1xQ==} + '@tanstack/query-devtools@5.93.0': + resolution: {integrity: sha512-+kpsx1NQnOFTZsw6HAFCW3HkKg0+2cepGtAWXjiiSOJJ1CtQpt72EE2nyZb+AjAbLRPoeRmPJ8MtQd8r8gsPdg==} '@tanstack/react-devtools@0.7.11': resolution: {integrity: sha512-a2Lmz8x+JoDrsU6f7uKRcyyY+k8mA/n5mb9h7XJ3Fz/y3+sPV9t7vAW1s5lyNkQyyDt6V1Oim99faLthoJSxMw==} @@ -2177,8 +1945,8 @@ packages: react: '>=16.8' react-dom: '>=16.8' - '@tanstack/react-form-start@1.28.0': - resolution: {integrity: sha512-9DUHFeklJxI4MCt5YMEr1tdfWIvcEMOn0ZDTEb6TL9VnQk6HmZ3AUqO3OdBPOT+MtH2u6VZudqwtPd3SjYQDqQ==} + '@tanstack/react-form-start@1.28.3': + resolution: {integrity: sha512-fQ2R2JMW66Up4UDpqGHUTGZn3xVofvGU9sDuMOOThfM0Z10krhdzOCV3I0W//mpNZhIvufCIQRbTx6SxZOkfoQ==} peerDependencies: '@tanstack/react-start': ^1.134.9 react: ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -2186,17 +1954,8 @@ packages: '@tanstack/react-start': optional: true - '@tanstack/react-form@1.25.0': - resolution: {integrity: sha512-SjKpBkjegNVW9WU+qlO8+/+kSbSEwo2zwHnrQz/yOnnJRhtdgubUt50LfeUtdzkMsbbptQ5MSZrXH03kidQjyw==} - peerDependencies: - '@tanstack/react-start': '*' - react: ^17.0.0 || ^18.0.0 || ^19.0.0 - peerDependenciesMeta: - '@tanstack/react-start': - optional: true - - '@tanstack/react-form@1.28.0': - resolution: {integrity: sha512-ibLcf5QkTogV0Ly944CuqGxWTpHyreNA4Cy8Wtky7zE9wtE3HVapQt4/hUuXo51zihfTkv5URiXpoTSKF5Xosg==} + '@tanstack/react-form@1.28.3': + resolution: {integrity: sha512-84yd0swZRcyC3Q46dYBH6bHf1tlIY1flchbdG3VwArg/wLVW5RdBenIrJhleHjk2OxXuF+9HoKQbHglJyWIXQA==} peerDependencies: '@tanstack/react-start': '*' react: ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -2204,32 +1963,32 @@ packages: '@tanstack/react-start': optional: true - '@tanstack/react-query-devtools@5.90.2': - resolution: {integrity: sha512-vAXJzZuBXtCQtrY3F/yUNJCV4obT/A/n81kb3+YqLbro5Z2+phdAbceO+deU3ywPw8B42oyJlp4FhO0SoivDFQ==} + '@tanstack/react-query-devtools@5.91.3': + resolution: {integrity: sha512-nlahjMtd/J1h7IzOOfqeyDh5LNfG0eULwlltPEonYy0QL+nqrBB+nyzJfULV+moL7sZyxc2sHdNJki+vLA9BSA==} peerDependencies: - '@tanstack/react-query': ^5.90.2 + '@tanstack/react-query': ^5.90.20 react: ^18 || ^19 - '@tanstack/react-query@5.90.10': - resolution: {integrity: sha512-BKLss9Y8PQ9IUjPYQiv3/Zmlx92uxffUOX8ZZNoQlCIZBJPT5M+GOMQj7xislvVQ6l1BstBjcX0XB/aHfFYVNw==} + '@tanstack/react-query@5.90.21': + resolution: {integrity: sha512-0Lu6y5t+tvlTJMTO7oh5NSpJfpg/5D41LlThfepTixPYkJ0sE2Jj0m0f6yYqujBwIXlId87e234+MxG3D3g7kg==} peerDependencies: react: ^18 || ^19 - '@tanstack/react-router-devtools@1.136.8': - resolution: {integrity: sha512-doM/BexWfKnS8z16Ll+91/Js3msd71q70Dw5rtkX0cPUccxyRskQyHPOMH4YlMr+Pwnc7XABtkc/nZxrOP9/fQ==} - engines: {node: '>=12'} + '@tanstack/react-router-devtools@1.162.4': + resolution: {integrity: sha512-clIlN0yDjuhHbMoVZC94EZHqoUnH9yx054nAAoCVHHN7gLD/29xHTIRgPuXWmGb0cpQanddkllBto5WefI1UMg==} + engines: {node: '>=20.19'} peerDependencies: - '@tanstack/react-router': ^1.136.8 - '@tanstack/router-core': ^1.136.8 + '@tanstack/react-router': ^1.162.4 + '@tanstack/router-core': ^1.162.2 react: '>=18.0.0 || >=19.0.0' react-dom: '>=18.0.0 || >=19.0.0' peerDependenciesMeta: '@tanstack/router-core': optional: true - '@tanstack/react-router-ssr-query@1.136.8': - resolution: {integrity: sha512-HIZhIC9H5dPDsZmeab+1AhKTOUD8EFzDt01TwaM6YSlSELjSqjX/V0GclAZ2nYY3iYLax9sK4ZxY1+hR1fTMvQ==} - engines: {node: '>=12'} + '@tanstack/react-router-ssr-query@1.162.4': + resolution: {integrity: sha512-ujlIsXq+Mai4CZPZL+O2K0MVapGIo+Vt7c9rN/L/Wlu5UbPIlxnpLZHO17cambD5CrF7h5/oOLN3Q1Y8dpac7w==} + engines: {node: '>=20.19'} peerDependencies: '@tanstack/query-core': '>=5.90.0' '@tanstack/react-query': '>=5.90.0' @@ -2237,72 +1996,71 @@ packages: react: '>=18.0.0 || >=19.0.0' react-dom: '>=18.0.0 || >=19.0.0' - '@tanstack/react-router@1.136.8': - resolution: {integrity: sha512-m9aJvQaAHSehPld5fBQX4K/e91S+JHGweJyBLH/+/fmHQnusgB+roeEwyn74Nag74sT4ErA5GwGYKE8ZLH5h3g==} - engines: {node: '>=12'} + '@tanstack/react-router@1.162.4': + resolution: {integrity: sha512-FMUMoTVZk+gFn1upTSxr7LenD3LK5Gi+pjSLf5IB2aT1uutHiFYEYWV0JunPry4Ac4OPOxMf9G0YM3Yyd8iSFw==} + engines: {node: '>=20.19'} peerDependencies: react: '>=18.0.0 || >=19.0.0' react-dom: '>=18.0.0 || >=19.0.0' - '@tanstack/react-start-client@1.136.8': - resolution: {integrity: sha512-odMCiXxVqS4O3MwT47vYTSaR5vxZMPIaxvIiJDZ0jUXDn8dZ7bpC678MrrqO6RqypYmn3aY3VKJZn5r9Cc/Lmg==} + '@tanstack/react-start-client@1.162.4': + resolution: {integrity: sha512-55LI6d3YiSPLRA3kKjEdQSajOKwr3zXUd990fWXDMgYBOMnkCqYlNVgRO/Fyy4IWz7JPer2T4n8PixcFO03eoQ==} engines: {node: '>=22.12.0'} peerDependencies: react: '>=18.0.0 || >=19.0.0' react-dom: '>=18.0.0 || >=19.0.0' - '@tanstack/react-start-server@1.136.8': - resolution: {integrity: sha512-E7HjWTR3EYjZPxuvpY3XkE1u7f9Ogo+4O7j+Wg5uw9yHcr7kvX9YntQ4o266Bi/B42LGPI7vT+/n1bAhRyMbJg==} + '@tanstack/react-start-server@1.162.4': + resolution: {integrity: sha512-LxdkwZUiqqeHafl+zerCr3OappzgRl/73aYrUPGcW4eZvyUvH03pXyvg7aHkLq1KtGomXHyJU2zNZ8bnTS6stg==} engines: {node: '>=22.12.0'} peerDependencies: react: '>=18.0.0 || >=19.0.0' react-dom: '>=18.0.0 || >=19.0.0' - '@tanstack/react-start@1.136.8': - resolution: {integrity: sha512-pzcIoTwGB8zUXlt/UvOCtWgOwrsvqRLDFC7KZwEifneCQbnKwauCLqcOdKM9XrxDHt5+evzB0RpF96LZx3PlEQ==} + '@tanstack/react-start@1.162.4': + resolution: {integrity: sha512-6MKomGKndIIchTqQYB7euTKv3UfNxp2L+FXrLREq2d8oK2EEQ/HeraFC5NqsrTHdf/PLxbWtpzoljLqD6a3BMA==} engines: {node: '>=22.12.0'} peerDependencies: react: '>=18.0.0 || >=19.0.0' react-dom: '>=18.0.0 || >=19.0.0' vite: '>=7.0.0' - '@tanstack/react-store@0.7.7': - resolution: {integrity: sha512-qqT0ufegFRDGSof9D/VqaZgjNgp4tRPHZIJq2+QIHkMUtHjaJ0lYrrXjeIUJvjnTbgPfSD1XgOMEt0lmANn6Zg==} + '@tanstack/react-store@0.8.1': + resolution: {integrity: sha512-XItJt+rG8c5Wn/2L/bnxys85rBpm0BfMbhb4zmPVLXAKY9POrp1xd6IbU4PKoOI+jSEGc3vntPRfLGSgXfE2Ig==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - '@tanstack/react-store@0.8.0': - resolution: {integrity: sha512-1vG9beLIuB7q69skxK9r5xiLN3ztzIPfSQSs0GfeqWGO2tGIyInZx0x1COhpx97RKaONSoAb8C3dxacWksm1ow==} + '@tanstack/react-store@0.9.1': + resolution: {integrity: sha512-YzJLnRvy5lIEFTLWBAZmcOjK3+2AepnBv/sr6NZmiqJvq7zTQggyK99Gw8fqYdMdHPQWXjz0epFKJXC+9V2xDA==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - '@tanstack/router-core@1.136.8': - resolution: {integrity: sha512-qPBWbInoi9CNtcjjKaaWVjoZoE5EiM5q6KVT0qVIQq2yAI4jyR1cWqyGMZp9tWNpFrlrUoG6kDvX9GRlstORJw==} - engines: {node: '>=12'} + '@tanstack/router-core@1.162.2': + resolution: {integrity: sha512-su/X6YP7LIhiy3FWkvCb5JL2LVmfupMXavvfyuPQayWb+E1NJQhYU8dbEcSGB0sNIMZeAmz0iIBSV2MVvuzQ8g==} + engines: {node: '>=20.19'} - '@tanstack/router-devtools-core@1.136.8': - resolution: {integrity: sha512-3HM5OrxcMotm/G75+EtDYqWetKeedHHBZbUvrmL7o7QV6cGc5BcYJy6HV6+d8oLOFRdrjp3MZipf00XoFdnZBQ==} - engines: {node: '>=12'} + '@tanstack/router-devtools-core@1.162.2': + resolution: {integrity: sha512-o8LvMZlMNj28D10m+Wm9NMxObZuelCT42HablUcAaNvk/4TD7kECq55ul5xxnBQnv65gBM4og+o+yfLyV/6GxA==} + engines: {node: '>=20.19'} peerDependencies: - '@tanstack/router-core': ^1.136.8 + '@tanstack/router-core': ^1.162.2 csstype: ^3.0.10 - solid-js: '>=1.9.5' peerDependenciesMeta: csstype: optional: true - '@tanstack/router-generator@1.136.8': - resolution: {integrity: sha512-Zd5Zj7db6JPR7tDo0po9ktH9u6nIRqVWMeawzllMcoDNqtsmvxecJBcbiRlm/855ZiQgtQRJ4dAwAgOc3r1VOw==} - engines: {node: '>=12'} + '@tanstack/router-generator@1.162.2': + resolution: {integrity: sha512-XjT7OYbQNR+lqbWYNVG/7NUAbOLHAYaaRZVJXo6P+gpTE+1oJXHCZEnFzCvNh3K2DTtfVU2V+ohYHP+Cq/quQQ==} + engines: {node: '>=20.19'} - '@tanstack/router-plugin@1.136.8': - resolution: {integrity: sha512-7YmbYMUYgnH/G6tE6BzP+zTwymTwC0ESS0TzMrME6hybvZpSvaaQaaVkPoxqy0+onHWG5h1szB+NZo6JWBnX2A==} - engines: {node: '>=12'} + '@tanstack/router-plugin@1.162.4': + resolution: {integrity: sha512-ZidWQxiEGFmLMoOkxO8oEv0KG0y62RQ70Xp13WSswqYwrLRVTE6dByO7u6dFLrSzfo1q3VvpLxG6qdWzF3Gu6Q==} + engines: {node: '>=20.19'} peerDependencies: '@rsbuild/core': '>=1.0.2' - '@tanstack/react-router': ^1.136.8 + '@tanstack/react-router': ^1.162.4 vite: '>=5.0.0 || >=6.0.0 || >=7.0.0' vite-plugin-solid: ^2.11.10 webpack: '>=5.92.0' @@ -2318,55 +2076,55 @@ packages: webpack: optional: true - '@tanstack/router-ssr-query-core@1.136.8': - resolution: {integrity: sha512-Gy6Cp7+NWAMLiWkAh3ihoJpDODT9FuCbAo6ClQs0ZdFIX3XQe/26sgZyWdR1hnJjVFsrfIXdnX3beD5FPfe6ig==} - engines: {node: '>=12'} + '@tanstack/router-ssr-query-core@1.162.2': + resolution: {integrity: sha512-QeexfW+Fv7TqnNwGeQSTWIE6SCjq6GNerffVtL6OpGP1Yf2NfNCM5jOyf4EvrQBHtD0VVmUgUE34X1nVs/OEWA==} + engines: {node: '>=20.19'} peerDependencies: '@tanstack/query-core': '>=5.90.0' '@tanstack/router-core': '>=1.127.0' - '@tanstack/router-utils@1.133.19': - resolution: {integrity: sha512-WEp5D2gPxvlLDRXwD/fV7RXjYtqaqJNXKB/L6OyZEbT+9BG/Ib2d7oG9GSUZNNMGPGYAlhBUOi3xutySsk6rxA==} - engines: {node: '>=12'} + '@tanstack/router-utils@1.161.4': + resolution: {integrity: sha512-r8TpjyIZoqrXXaf2DDyjd44gjGBoyE+/oEaaH68yLI9ySPO1gUWmQENZ1MZnmBnpUGN24NOZxdjDLc8npK0SAw==} + engines: {node: '>=20.19'} - '@tanstack/server-functions-plugin@1.134.5': - resolution: {integrity: sha512-2sWxq70T+dOEUlE3sHlXjEPhaFZfdPYlWTSkHchWXrFGw2YOAa+hzD6L9wHMjGDQezYd03ue8tQlHG+9Jzbzgw==} - engines: {node: '>=12'} + '@tanstack/start-client-core@1.162.2': + resolution: {integrity: sha512-GJazwoNe4X+HLTyoDzmO5Ogve2/SofkRsWOqXSEPG2BU+3eFVUKH/Nd52819Bm9OEgBGM/WRiDGX9RbzYq3LzQ==} + engines: {node: '>=22.12.0'} - '@tanstack/start-client-core@1.136.8': - resolution: {integrity: sha512-sRWNMcwpSJt9YfH5yYwAy1qsJceZXZ5HbcTOLefjVVyzxw/iUYSvQi3kJNUeWP86tZvQwHeaAjrrKkyWdLluvg==} + '@tanstack/start-fn-stubs@1.161.4': + resolution: {integrity: sha512-b8s6iSQ+ny0P4lGK0n3DKaL6EI7SECG0/89svDeYieVw2+MaFOJVcQo3rU3BUvmuOcIkgkE5IhdzkmzPXH6yfA==} engines: {node: '>=22.12.0'} - '@tanstack/start-plugin-core@1.136.8': - resolution: {integrity: sha512-rA99JrVDHt6DFB7mtDYuUfg7PYk5/emgoQOqx+q9G5cyyBxdOhrFVsG2IfoM/C6jpVEuokE31z9704tsCk4blA==} + '@tanstack/start-plugin-core@1.162.4': + resolution: {integrity: sha512-NdBClBYOK2zpQdDiRUeKOtjqM9amwP++dI5WZAtXfugUJBxJQ4N4kXtA+KzFlwdgvT+yofz2bt/Um82xSFyCkA==} engines: {node: '>=22.12.0'} peerDependencies: vite: '>=7.0.0' - '@tanstack/start-server-core@1.136.8': - resolution: {integrity: sha512-kNj81Q/TRsWHl95mYgYmUy+Uw59Kl3xMSXqGyXOU0A2EKm4yCQ8lrWT/0eawraGLxVqALLf/8xAfzSS9a8CwGQ==} + '@tanstack/start-server-core@1.162.2': + resolution: {integrity: sha512-ExcWU/SbzJ7QCmRAm9joWhyPWYcnszNaW7YwThWDailT4jfIUWcTeqzwX4QRITku/rLupZl1QODbtUuZoj7p+A==} engines: {node: '>=22.12.0'} - '@tanstack/start-storage-context@1.136.8': - resolution: {integrity: sha512-B+cYnczJ//0sfFTtwPqVcimaISEx3I2oCbP8unkZJT2bqWi8DrlozW7+lnm9DoUmX0dp8GKdS6ADWp3iM84x/w==} + '@tanstack/start-storage-context@1.162.2': + resolution: {integrity: sha512-vheKx93lRkp/ywYVBvZzfgbqHmMys5CaiprnQDdCyKIJVarvxpRIgbqQ2bvMYiidzi4sUNSjIZOwHrizuMPFCg==} engines: {node: '>=22.12.0'} - '@tanstack/store@0.7.7': - resolution: {integrity: sha512-xa6pTan1bcaqYDS9BDpSiS63qa6EoDkPN9RsRaxHuDdVDNntzq3xNwR5YKTU/V3SkSyC9T4YVOPh2zRQN0nhIQ==} + '@tanstack/store@0.8.1': + resolution: {integrity: sha512-PtOisLjUZPz5VyPRSCGjNOlwTvabdTBQ2K80DpVL1chGVr35WRxfeavAPdNq6pm/t7F8GhoR2qtmkkqtCEtHYw==} - '@tanstack/store@0.8.0': - resolution: {integrity: sha512-Om+BO0YfMZe//X2z0uLF2j+75nQga6TpTJgLJQBiq85aOyZNIhkCgleNcud2KQg4k4v9Y9l+Uhru3qWMPGTOzQ==} + '@tanstack/store@0.9.1': + resolution: {integrity: sha512-+qcNkOy0N1qSGsP7omVCW0SDrXtaDcycPqBDE726yryiA5eTDFpjBReaYjghVJwNf1pcPMyzIwTGlYjCSQR0Fg==} - '@tanstack/virtual-file-routes@1.133.19': - resolution: {integrity: sha512-IKwZENsK7owmW1Lm5FhuHegY/SyQ8KqtL/7mTSnzoKJgfzhrrf9qwKB1rmkKkt+svUuy/Zw3uVEpZtUzQruWtA==} - engines: {node: '>=12'} + '@tanstack/virtual-file-routes@1.161.4': + resolution: {integrity: sha512-42WoRePf8v690qG8yGRe/YOh+oHni9vUaUUfoqlS91U2scd3a5rkLtVsc6b7z60w3RogH0I00vdrC5AaeiZ18w==} + engines: {node: '>=20.19'} '@testing-library/dom@10.4.1': resolution: {integrity: sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==} engines: {node: '>=18'} - '@testing-library/react@16.3.0': - resolution: {integrity: sha512-kFSyxiEDwv1WLl2fgsq6pPBbw5aWKrsY2/noi1Id0TK0UParSF62oFQFGHXIyaG4pp2tEub/Zlel+fjjZILDsw==} + '@testing-library/react@16.3.2': + resolution: {integrity: sha512-XU5/SytQM+ykqMnAnvB2umaJNIOsLF3PVv//1Ew4CTcpz0/BRyy/af40qqrt7SjKpDdT1saBMc42CUok5gaw+g==} engines: {node: '>=18'} peerDependencies: '@testing-library/dom': ^10.0.0 @@ -2414,11 +2172,11 @@ packages: '@types/estree@1.0.8': resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} - '@types/node@22.19.1': - resolution: {integrity: sha512-LCCV0HdSZZZb34qifBsyWlUmok6W7ouER+oQIGBScS8EsZsQbrtFTUrDX4hOl+CS6p7cnNC4td+qrSVGSCTUfQ==} + '@types/node@22.19.11': + resolution: {integrity: sha512-BH7YwL6rA93ReqeQS1c4bsPpcfOmJasG+Fkr6Y59q83f9M1WcBRHR2vM+P9eOisYRcN3ujQoiZY8uk5W+1WL8w==} - '@types/nodemailer@7.0.4': - resolution: {integrity: sha512-ee8fxWqOchH+Hv6MDDNNy028kwvVnLplrStm4Zf/3uHWw5zzo8FoYYeffpJtGs2wWysEumMH0ZIdMGMY1eMAow==} + '@types/nodemailer@7.0.11': + resolution: {integrity: sha512-E+U4RzR2dKrx+u3N4DlsmLaDC6mMZOM/TPROxA0UAPiTgI0y4CEFBmZE+coGWTjakDriRsXG368lNk1u9Q0a2g==} '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -2428,8 +2186,8 @@ packages: peerDependencies: '@types/react': ^19.2.0 - '@types/react@19.2.5': - resolution: {integrity: sha512-keKxkZMqnDicuvFoJbzrhbtdLSPhj/rZThDlKWCDbgXmUg0rEUFtRssDXKYmtXluZlIqiC5VqkCgRwzuyLHKHw==} + '@types/react@19.2.14': + resolution: {integrity: sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==} '@types/retry@0.12.2': resolution: {integrity: sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==} @@ -2440,30 +2198,30 @@ packages: '@types/yauzl@2.10.3': resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} - '@typescript-eslint/project-service@8.46.4': - resolution: {integrity: sha512-nPiRSKuvtTN+no/2N1kt2tUh/HoFzeEgOm9fQ6XQk4/ApGqjx0zFIIaLJ6wooR1HIoozvj2j6vTi/1fgAz7UYQ==} + '@typescript-eslint/project-service@8.56.0': + resolution: {integrity: sha512-M3rnyL1vIQOMeWxTWIW096/TtVP+8W3p/XnaFflhmcFp+U4zlxUxWj4XwNs6HbDeTtN4yun0GNTTDBw/SvufKg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/tsconfig-utils@8.46.4': - resolution: {integrity: sha512-+/XqaZPIAk6Cjg7NWgSGe27X4zMGqrFqZ8atJsX3CWxH/jACqWnrWI68h7nHQld0y+k9eTTjb9r+KU4twLoo9A==} + '@typescript-eslint/tsconfig-utils@8.56.0': + resolution: {integrity: sha512-bSJoIIt4o3lKXD3xmDh9chZcjCz5Lk8xS7Rxn+6l5/pKrDpkCwtQNQQwZ2qRPk7TkUYhrq3WPIHXOXlbXP0itg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/types@8.46.4': - resolution: {integrity: sha512-USjyxm3gQEePdUwJBFjjGNG18xY9A2grDVGuk7/9AkjIF1L+ZrVnwR5VAU5JXtUnBL/Nwt3H31KlRDaksnM7/w==} + '@typescript-eslint/types@8.56.0': + resolution: {integrity: sha512-DBsLPs3GsWhX5HylbP9HNG15U0bnwut55Lx12bHB9MpXxQ+R5GC8MwQe+N1UFXxAeQDvEsEDY6ZYwX03K7Z6HQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.46.4': - resolution: {integrity: sha512-7oV2qEOr1d4NWNmpXLR35LvCfOkTNymY9oyW+lUHkmCno7aOmIf/hMaydnJBUTBMRCOGZh8YjkFOc8dadEoNGA==} + '@typescript-eslint/typescript-estree@8.56.0': + resolution: {integrity: sha512-ex1nTUMWrseMltXUHmR2GAQ4d+WjkZCT4f+4bVsps8QEdh0vlBsaCokKTPlnqBFqqGaxilDNJG7b8dolW2m43Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/visitor-keys@8.46.4': - resolution: {integrity: sha512-/++5CYLQqsO9HFGLI7APrxBJYo+5OCMpViuhV8q5/Qa3o5mMrF//eQHks+PXcsAVaLdn817fMuS7zqoXNNZGaw==} + '@typescript-eslint/visitor-keys@8.56.0': + resolution: {integrity: sha512-q+SL+b+05Ud6LbEE35qe4A99P+htKTKVbyiNEe45eCbJFyh/HVK9QXwlrbz+Q4L8SOW4roxSVwXYj4DMBT7Ieg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@vercel/nft@0.29.4': @@ -2471,8 +2229,8 @@ packages: engines: {node: '>=18'} hasBin: true - '@vitejs/plugin-react@5.1.1': - resolution: {integrity: sha512-WQfkSw0QbQ5aJ2CHYw23ZGkqnRwqKHD/KYsMeTkZzPT4Jcf0DcBxBtwMJxnu6E7oxw5+JC6ZAiePgh28uJ1HBA==} + '@vitejs/plugin-react@5.1.4': + resolution: {integrity: sha512-VIcFLdRi/VYRU8OL/puL7QXMYafHmqOnwTZY50U1JPlCNj30PxCMx65c494b1K9be9hX83KVt0+gTEwTWLqToA==} engines: {node: ^20.19.0 || >=22.12.0} peerDependencies: vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 @@ -2506,20 +2264,20 @@ packages: '@vitest/utils@3.2.4': resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==} - '@vue/compiler-core@3.5.24': - resolution: {integrity: sha512-eDl5H57AOpNakGNAkFDH+y7kTqrQpJkZFXhWZQGyx/5Wh7B1uQYvcWkvZi11BDhscPgj8N7XV3oRwiPnx1Vrig==} + '@vue/compiler-core@3.5.28': + resolution: {integrity: sha512-kviccYxTgoE8n6OCw96BNdYlBg2GOWfBuOW4Vqwrt7mSKWKwFVvI8egdTltqRgITGPsTFYtKYfxIG8ptX2PJHQ==} - '@vue/compiler-dom@3.5.24': - resolution: {integrity: sha512-1QHGAvs53gXkWdd3ZMGYuvQFXHW4ksKWPG8HP8/2BscrbZ0brw183q2oNWjMrSWImYLHxHrx1ItBQr50I/q2zw==} + '@vue/compiler-dom@3.5.28': + resolution: {integrity: sha512-/1ZepxAb159jKR1btkefDP+J2xuWL5V3WtleRmxaT+K2Aqiek/Ab/+Ebrw2pPj0sdHO8ViAyyJWfhXXOP/+LQA==} - '@vue/compiler-sfc@3.5.24': - resolution: {integrity: sha512-8EG5YPRgmTB+YxYBM3VXy8zHD9SWHUJLIGPhDovo3Z8VOgvP+O7UP5vl0J4BBPWYD9vxtBabzW1EuEZ+Cqs14g==} + '@vue/compiler-sfc@3.5.28': + resolution: {integrity: sha512-6TnKMiNkd6u6VeVDhZn/07KhEZuBSn43Wd2No5zaP5s3xm8IqFTHBj84HJah4UepSUJTro5SoqqlOY22FKY96g==} - '@vue/compiler-ssr@3.5.24': - resolution: {integrity: sha512-trOvMWNBMQ/odMRHW7Ae1CdfYx+7MuiQu62Jtu36gMLXcaoqKvAyh+P73sYG9ll+6jLB6QPovqoKGGZROzkFFg==} + '@vue/compiler-ssr@3.5.28': + resolution: {integrity: sha512-JCq//9w1qmC6UGLWJX7RXzrGpKkroubey/ZFqTpvEIDJEKGgntuDMqkuWiZvzTzTA5h2qZvFBFHY7fAAa9475g==} - '@vue/shared@3.5.24': - resolution: {integrity: sha512-9cwHL2EsJBdi8NY22pngYYWzkTDhld6fAD6jlaeloNGciNSJL6bLpbxVgXl96X00Jtc6YWQv96YA/0sxex/k1A==} + '@vue/shared@3.5.28': + resolution: {integrity: sha512-cfWa1fCGBxrvaHRhvV3Is0MgmrbSCxYTXCSCau2I0a1Xw1N1pHAvkWCiXPRAqjvToILvguNyEwjevUqAuBQWvQ==} '@whatwg-node/disposablestack@0.0.6': resolution: {integrity: sha512-LOtTn+JgJvX8WfBVJtF08TGrdjuFzGJc4mkP8EdDI8ADbvO7kiexYep1o8dwnt0okb0jYclCDXF13xU7Ge4zSw==} @@ -2529,16 +2287,16 @@ packages: resolution: {integrity: sha512-b4PhJ+zYj4357zwk4TTuF2nEe0vVtOrwdsrNo5hL+u1ojXNhh1FgJ6pg1jzDlwlT4oBdzfSwaBwMCtFCsIWg8Q==} engines: {node: '>=18.0.0'} - '@whatwg-node/node-fetch@0.8.4': - resolution: {integrity: sha512-AlKLc57loGoyYlrzDbejB9EeR+pfdJdGzbYnkEuZaGekFboBwzfVYVMsy88PMriqPI1ORpiGYGgSSWpx7a2sDA==} + '@whatwg-node/node-fetch@0.8.5': + resolution: {integrity: sha512-4xzCl/zphPqlp9tASLVeUhB5+WJHbuWGYpfoC2q1qh5dw0AqZBW7L27V5roxYWijPxj4sspRAAoOH3d2ztaHUQ==} engines: {node: '>=18.0.0'} '@whatwg-node/promise-helpers@1.3.2': resolution: {integrity: sha512-Nst5JdK47VIl9UcGwtv2Rcgyn5lWtZ0/mhRQ4G8NN2isxpq2TO30iqHzmwoJycjWuyUfg3GFXqP/gFHXeV57IA==} engines: {node: '>=16.0.0'} - '@whatwg-node/server@0.10.17': - resolution: {integrity: sha512-QxI+HQfJeI/UscFNCTcSri6nrHP25mtyAMbhEri7W2ctdb3EsorPuJz7IovSgNjvKVs73dg9Fmayewx1O2xOxA==} + '@whatwg-node/server@0.10.18': + resolution: {integrity: sha512-kMwLlxUbduttIgaPdSkmEarFpP+mSY8FEm+QWMBRJwxOHWkri+cxd8KZHO9EMrB9vgUuz+5WEaCawaL5wGVoXg==} engines: {node: '>=18.0.0'} abbrev@3.0.1: @@ -2558,8 +2316,12 @@ packages: peerDependencies: acorn: ^8 - acorn@8.15.0: - resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} + acorn-walk@8.3.5: + resolution: {integrity: sha512-HEHNfbars9v4pgpW6SO1KSPkfoS0xVOM/9UzkJltjlsHZmJasxg8aXkuZa7SMf8vKGIBhpUsPluQSqhJFCqebw==} + engines: {node: '>=0.4.0'} + + acorn@8.16.0: + resolution: {integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==} engines: {node: '>=0.4.0'} hasBin: true @@ -2580,8 +2342,8 @@ packages: ajv: optional: true - ajv@8.17.1: - resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + ajv@8.18.0: + resolution: {integrity: sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==} ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} @@ -2619,12 +2381,24 @@ packages: resolution: {integrity: sha512-ZcbTaIqJOfCc03QwD468Unz/5Ir8ATtvAHsK+FdXbDIbGfihqh9mrvdcYunQzqn4HrvWWaFyaxJhGZagaJJpPQ==} engines: {node: '>= 14'} - argparse@1.0.10: - resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} aria-query@5.3.0: resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} + array-buffer-byte-length@1.0.2: + resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} + engines: {node: '>= 0.4'} + + array.prototype.flatmap@1.3.3: + resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==} + engines: {node: '>= 0.4'} + + arraybuffer.prototype.slice@1.0.4: + resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} + engines: {node: '>= 0.4'} + assertion-error@2.0.1: resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} engines: {node: '>=12'} @@ -2637,6 +2411,10 @@ packages: resolution: {integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==} engines: {node: '>=4'} + async-function@1.0.0: + resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} + engines: {node: '>= 0.4'} + async-sema@3.1.1: resolution: {integrity: sha512-tLRNUXati5MFePdAk8dw7Qt7DpxPB60ofAgn8WRhW6a2rcimZnYBP9oxHiv0OHy+Wz7kPMG+t4LGdt31+4EmGg==} @@ -2647,19 +2425,23 @@ packages: resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} engines: {node: '>=8.0.0'} - atomically@2.1.0: - resolution: {integrity: sha512-+gDffFXRW6sl/HCwbta7zK4uNqbPjv4YJEAdz7Vu+FLQHe77eZ4bvbJGi4hE0QPeJlMYMA3piXEr1UL3dAwx7Q==} + atomically@2.1.1: + resolution: {integrity: sha512-P4w9o2dqARji6P7MHprklbfiArZAWvo07yW7qs3pdljb3BWr12FIB7W+p0zJiuiVsUpRO0iZn1kFFcpPegg0tQ==} + + available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} - b4a@1.7.3: - resolution: {integrity: sha512-5Q2mfq2WfGuFp3uS//0s6baOJLMoVduPYVeNmDYxu5OUA1/cBfvr2RIS7vi62LdNj/urk1hfmj867I3qt6uZ7Q==} + b4a@1.8.0: + resolution: {integrity: sha512-qRuSmNSkGQaHwNbM7J78Wwy+ghLEYF1zNrSeMxj4Kgw6y33O3mXcQ6Ie9fRvfU/YnxWkOchPXbaLb73TkIsfdg==} peerDependencies: react-native-b4a: '*' peerDependenciesMeta: react-native-b4a: optional: true - babel-dead-code-elimination@1.0.10: - resolution: {integrity: sha512-DV5bdJZTzZ0zn0DC24v3jD7Mnidh6xhKa4GfKCbq3sfW8kaWhDdZjP3i81geA8T33tdYqWKw4D3fVv0CwEgKVA==} + babel-dead-code-elimination@1.0.12: + resolution: {integrity: sha512-GERT7L2TiYcYDtYk1IpD+ASAYXjKbLTDPhBtYj7X1NuRMDTMtAx9kyBenub1Ev41lo91OHCKdmP+egTDmfQ7Ig==} babel-plugin-react-compiler@1.0.0: resolution: {integrity: sha512-Ixm8tFfoKKIPYdCCKYTsqv+Fd4IJ0DQqMyEimo+pxUOMUR9cVPlwTrFt9Avu+3cb6Zp3mAzl+t1MrG2fxxKsxw==} @@ -2667,6 +2449,10 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + balanced-match@4.0.4: + resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} + engines: {node: 18 || 20 || >=22} + bare-events@2.8.2: resolution: {integrity: sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ==} peerDependencies: @@ -2682,8 +2468,9 @@ packages: resolution: {integrity: sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==} engines: {node: ^4.5.0 || >= 5.9} - baseline-browser-mapping@2.8.29: - resolution: {integrity: sha512-sXdt2elaVnhpDNRDz+1BDx1JQoJRuNk7oVlAlbGiFkLikHCAQiccexF/9e91zVi6RCgqspl04aP+6Cnl9zRLrA==} + baseline-browser-mapping@2.10.0: + resolution: {integrity: sha512-lIyg0szRfYbiy67j9KN8IyeD7q7hcmqnJ1ddWmNt19ItGpNN64mnllmxUNFIOdOm6by97jlL6wfpTTJrmnjWAA==} + engines: {node: '>=6.0.0'} hasBin: true better-ajv-errors@1.2.0: @@ -2705,18 +2492,19 @@ packages: boolbase@1.0.0: resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} - bowser@2.13.1: - resolution: {integrity: sha512-OHawaAbjwx6rqICCKgSG0SAnT05bzd7ppyKLVUITZpANBaaMFBAsaNkto3LoQ31tyFP5kNujE8Cdx85G9VzOkw==} - brace-expansion@2.0.2: resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} + brace-expansion@5.0.3: + resolution: {integrity: sha512-fy6KJm2RawA5RcHkLa1z/ScpBeA762UF9KmZQxwIbDtRJrgLzM10depAiEQ+CXYcoiqW1/m96OAAoke2nE9EeA==} + engines: {node: 18 || 20 || >=22} + braces@3.0.3: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} - browserslist@4.28.0: - resolution: {integrity: sha512-tbydkR/CxfMwelN0vwdP/pLkDwyAASZ+VfWm4EOwlB6SWhx1sYnWLqo8N5j0rAzPfzfRaxt0mM/4wPU/Su84RQ==} + browserslist@4.28.1: + resolution: {integrity: sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true @@ -2740,11 +2528,23 @@ packages: resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} engines: {node: '>=8'} + call-bind-apply-helpers@1.0.2: + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} + engines: {node: '>= 0.4'} + + call-bind@1.0.8: + resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} + engines: {node: '>= 0.4'} + + call-bound@1.0.4: + resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} + engines: {node: '>= 0.4'} + callsite@1.0.0: resolution: {integrity: sha512-0vdNRFXn5q+dtOqjfFtmtlI9N2eVZ7LMyEV2iKC5mEEFvSg/69Ml6b/WU2qF8W1nLRa0wiSrDT3Y5jOHZCwKPQ==} - caniuse-lite@1.0.30001755: - resolution: {integrity: sha512-44V+Jm6ctPj7R52Na4TLi3Zri4dWUljJd+RDm+j8LtNCc/ihLCT+X1TzoOAkRETEWqjuLnh9581Tl80FvK7jVA==} + caniuse-lite@1.0.30001774: + resolution: {integrity: sha512-DDdwPGz99nmIEv216hKSgLD+D4ikHQHjBC/seF98N9CPqRX4M5mSxT9eTV6oyisnJcuzxtZy4n17yKKQYmYQOA==} chai@5.3.3: resolution: {integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==} @@ -2758,15 +2558,15 @@ packages: resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - check-error@2.1.1: - resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} + check-error@2.1.3: + resolution: {integrity: sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==} engines: {node: '>= 16'} cheerio-select@2.1.0: resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==} - cheerio@1.1.2: - resolution: {integrity: sha512-IkxPpb5rS/d1IiLbHMgfPuS0FgiWTtFIm/Nj+2woXDLTZ7fOT2eqzgYbdMlLweqlHbsZjxEChoVK+7iph7jyQg==} + cheerio@1.2.0: + resolution: {integrity: sha512-WDrybc/gKFpTYQutKIK6UvfcuxijIZfMfXaYm8NMsPQxSYvf+13fXUJ4rztGGbJcBQ/GF55gvrZ0Bc0bj/mqvg==} engines: {node: '>=20.18.1'} chokidar@3.6.0: @@ -2777,6 +2577,10 @@ packages: resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} engines: {node: '>= 14.16.0'} + chokidar@5.0.0: + resolution: {integrity: sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==} + engines: {node: '>= 20.19.0'} + chownr@3.0.0: resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==} engines: {node: '>=18'} @@ -2836,9 +2640,6 @@ packages: colorette@2.0.20: resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} - colorjs.io@0.5.2: - resolution: {integrity: sha512-twmVoizEW7ylZSN32OgKdXRmo1qg+wT5/6C3xu5b9QsWzSFAhHLn2xd8ro0diCsKfCj1RdaTP/nrcW+vAoQPIw==} - commander@10.0.1: resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} engines: {node: '>=14'} @@ -2870,15 +2671,15 @@ packages: engines: {node: '>=18'} hasBin: true - conf@15.0.2: - resolution: {integrity: sha512-JBSrutapCafTrddF9dH3lc7+T2tBycGF4uPkI4Js+g4vLLEhG6RZcFi3aJd5zntdf5tQxAejJt8dihkoQ/eSJw==} + conf@15.1.0: + resolution: {integrity: sha512-Uy5YN9KEu0WWDaZAVJ5FAmZoaJt9rdK6kH+utItPyGsCqCgaTKkrmZx3zoE0/3q6S3bcp3Ihkk+ZqPxWxFK5og==} engines: {node: '>=20'} confbox@0.1.8: resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} - confbox@0.2.2: - resolution: {integrity: sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==} + confbox@0.2.4: + resolution: {integrity: sha512-ysOGlgTFbN2/Y6Cg3Iye8YKulHw+R2fNXHrgSmXISQdMnomY6eNDprVdW9R5xBguEqI954+S6709UyiO7B+6OQ==} consola@3.4.2: resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==} @@ -2897,10 +2698,6 @@ packages: resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} engines: {node: '>= 0.6'} - cookie@1.0.2: - resolution: {integrity: sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==} - engines: {node: '>=18'} - cookie@1.1.1: resolution: {integrity: sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==} engines: {node: '>=18'} @@ -2912,8 +2709,8 @@ packages: core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} - cors@2.8.5: - resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} + cors@2.8.6: + resolution: {integrity: sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==} engines: {node: '>= 0.10'} crc-32@1.2.2: @@ -2958,8 +2755,8 @@ packages: resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==} engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} - cssstyle@5.3.3: - resolution: {integrity: sha512-OytmFH+13/QXONJcC75QNdMtKpceNk3u8ThBjyyYjkEcy/ekBwR1mMAuNvi3gdBPW3N5TlCzQ0WZw8H0lN/bDw==} + cssstyle@5.3.7: + resolution: {integrity: sha512-7D2EPVltRrsTkhpQmksIu+LxeWAIEk6wRDMJ1qljlv+CKHJM+cJLlfhWIzNA44eAsHXSNe3+vO6DW1yCYx8SuQ==} engines: {node: '>=20'} csstype@3.2.3: @@ -2969,10 +2766,22 @@ packages: resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} engines: {node: '>= 12'} - data-urls@6.0.0: - resolution: {integrity: sha512-BnBS08aLUM+DKamupXs3w2tJJoqU+AkaE/+6vQxi/G/DPmIZFJJp9Dkb1kM03AZx8ADehDUZgsNxju3mPXZYIA==} + data-urls@6.0.1: + resolution: {integrity: sha512-euIQENZg6x8mj3fO6o9+fOW8MimUI4PpD/fZBhJfeioZVy9TUpM4UY7KjQNVZFlqwJ0UdzRDzkycB997HEq1BQ==} engines: {node: '>=20'} + data-view-buffer@1.0.2: + resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} + engines: {node: '>= 0.4'} + + data-view-byte-length@1.0.2: + resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} + engines: {node: '>= 0.4'} + + data-view-byte-offset@1.0.1: + resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} + engines: {node: '>= 0.4'} + dateformat@4.6.3: resolution: {integrity: sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==} @@ -2984,15 +2793,6 @@ packages: resolution: {integrity: sha512-Xks6RUDLZFdz8LIdR6q0MTH44k7FikOmnh5xkSjMig6ch45afc8sjTjRQf3P6ax8dMgcQrYO/AR2RGWURrruqw==} engines: {node: '>=18'} - debug@4.3.7: - resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - debug@4.4.3: resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} engines: {node: '>=6.0'} @@ -3011,8 +2811,8 @@ packages: decode-formdata@0.9.0: resolution: {integrity: sha512-q5uwOjR3Um5YD+ZWPOF/1sGHVW9A5rCrRwITQChRXlmPkxDFBqCm4jNTIVdGHNH9OnR+V9MoZVgRhsFb+ARbUw==} - dedent@1.7.0: - resolution: {integrity: sha512-HGFtf8yhuhGhqO07SV79tRp+br4MnbdjeVxotpn1QBl30pcLLCQjX5b2295ll0fv8RKDKsmWYrl05usHM9CewQ==} + dedent@1.7.1: + resolution: {integrity: sha512-9JmrhGZpOlEgOLdQgSm0zxFaYoQon408V1v49aqTWuXENVlnCuY9JBZcXZiCsZQWDjTm5Qf/nIvAy77mXDAjEg==} peerDependencies: babel-plugin-macros: ^3.1.0 peerDependenciesMeta: @@ -3027,6 +2827,14 @@ packages: resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} engines: {node: '>=0.10.0'} + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + + define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + defu@6.1.4: resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} @@ -3037,11 +2845,6 @@ packages: destr@2.0.5: resolution: {integrity: sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==} - detect-libc@1.0.3: - resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==} - engines: {node: '>=0.10'} - hasBin: true - detect-libc@2.1.2: resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} engines: {node: '>=8'} @@ -3092,11 +2895,11 @@ packages: dettle@1.0.5: resolution: {integrity: sha512-ZVyjhAJ7sCe1PNXEGveObOH9AC8QvMga3HJIghHawtG7mE4K5pW9nz/vDGAr/U7a3LWgdOzEE7ac9MURnyfaTA==} - devalue@5.6.2: - resolution: {integrity: sha512-nPRkjWzzDQlsejL1WVifk5rvcFi/y1onBRxjaFMjZeR9mFpqu2gmAZ9xUB9/IEanEP/vBtGeGganC/GO1fmufg==} + devalue@5.6.3: + resolution: {integrity: sha512-nc7XjUU/2Lb+SvEFVGcWLiKkzfw8+qHI7zn8WYXKkLMgfGSHbgCEaR6bJpev8Cm6Rmrb19Gfd/tZvGqx9is3wg==} - diff@8.0.2: - resolution: {integrity: sha512-sSuxWU5j5SR9QQji/o2qMvqRNYRDOcBTgsJ/DeCf4iSN4gW+gNMXM7wFIP+fdXZxoNiAnHUTGjCr+TSWXdRDKg==} + diff@8.0.3: + resolution: {integrity: sha512-qejHi7bcSD4hQAZE0tNAawRK1ZtafHDmMTMkrrIGgSLl7hTnQHmKCeB45xAcbfTqK2zowkM3j3bHt/4b/ARbYQ==} engines: {node: '>=0.3.1'} dom-accessibility-api@0.5.16: @@ -3127,21 +2930,25 @@ packages: resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==} engines: {node: '>=12'} - dotenv@17.2.4: - resolution: {integrity: sha512-mudtfb4zRB4bVvdj0xRo+e6duH1csJRM8IukBqfTRvHotn9+LBXB8ynAidP9zHqoRC/fsllXgk4kCKlR21fIhw==} + dotenv@17.3.1: + resolution: {integrity: sha512-IO8C/dzEb6O3F9/twg6ZLXz164a2fhTnEWb95H23Dm4OuN+92NmEAlTrupP9VW6Jm3sO26tQlqyvyi4CsnY9GA==} engines: {node: '>=12'} + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} ecdsa-sig-formatter@1.0.11: resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} - electron-to-chromium@1.5.254: - resolution: {integrity: sha512-DcUsWpVhv9svsKRxnSCZ86SjD+sp32SGidNB37KpqXJncp1mfUgKbHvBomE89WJDbfVKw1mdv5+ikrvd43r+Bg==} + electron-to-chromium@1.5.302: + resolution: {integrity: sha512-sM6HAN2LyK82IyPBpznDRqlTQAtuSaO+ShzFiWTvoMJLHyZ+Y39r8VMfHzwbU8MVBzQ4Wdn85+wlZl2TLGIlwg==} - elysia@1.4.19: - resolution: {integrity: sha512-DZb9y8FnWyX5IuqY44SvqAV0DjJ15NeCWHrLdgXrKgTPDPsl3VNwWHqrEr9bmnOCpg1vh6QUvAX/tcxNj88jLA==} + elysia@1.4.25: + resolution: {integrity: sha512-liKjavH99Gpzrv9cDil6uYWmPuqESfPFV1FIaFSd3iNqo3y7e29sN43VxFIK8tWWnyi6eDAmi2SZk8hNAMQMyg==} peerDependencies: '@sinclair/typebox': '>= 0.34.0 < 1' '@types/bun': '>= 1.2.0' @@ -3181,8 +2988,8 @@ packages: resolution: {integrity: sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==} engines: {node: '>=10.0.0'} - engine.io@6.6.4: - resolution: {integrity: sha512-ZCkIjSYNDyGn0R6ewHDtXgns/Zre/NT6Agvq1/WobF7JXgFff4SeDroKiCO3fNJreU9YG429Sc81o4w5ok/W5g==} + engine.io@6.6.5: + resolution: {integrity: sha512-2RZdgEbXmp5+dVbRm0P7HQUImZpICccJy7rN7Tv+SFa55pH+lxnuw6/K1ZxxBfHoYpSkHLAO92oa8O4SwFXA2A==} engines: {node: '>=10.2.0'} enhanced-resolve@5.19.0: @@ -3197,23 +3004,60 @@ packages: resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} engines: {node: '>=0.12'} + entities@7.0.1: + resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==} + engines: {node: '>=0.12'} + env-paths@3.0.0: resolution: {integrity: sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + es-abstract@1.24.1: + resolution: {integrity: sha512-zHXBLhP+QehSSbsS9Pt23Gg964240DPd6QCf8WpkqEXxQ7fhdZzYsocOr5u7apWonsS5EjZDmTF+/slGMyasvw==} + engines: {node: '>= 0.4'} + + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + es-module-lexer@1.7.0: resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} - esbuild@0.25.11: - resolution: {integrity: sha512-KohQwyzrKTQmhXDW1PjCv3Tyspn9n5GcY2RTDqeORIdIJY8yKIF7sTSopFmn/wpMPW4rdPXI0UE5LJLuq3bx0Q==} - engines: {node: '>=18'} - hasBin: true + es-object-atoms@1.1.1: + resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.1.0: + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} + engines: {node: '>= 0.4'} + + es-shim-unscopables@1.1.0: + resolution: {integrity: sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==} + engines: {node: '>= 0.4'} + + es-to-primitive@1.3.0: + resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} + engines: {node: '>= 0.4'} esbuild@0.25.12: resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==} engines: {node: '>=18'} hasBin: true + esbuild@0.27.2: + resolution: {integrity: sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==} + engines: {node: '>=18'} + hasBin: true + + esbuild@0.27.3: + resolution: {integrity: sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==} + engines: {node: '>=18'} + hasBin: true + escalade@3.2.0: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} @@ -3227,9 +3071,9 @@ packages: engines: {node: '>=6.0'} hasBin: true - eslint-visitor-keys@4.2.1: - resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + eslint-visitor-keys@5.0.1: + resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} @@ -3265,8 +3109,8 @@ packages: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} - exact-mirror@0.2.5: - resolution: {integrity: sha512-u8Wu2lO8nio5lKSJubOydsdNtQmH8ENba5m0nbQYmTvsjksXKYIS1nSShdDlO8Uem+kbo+N6eD5I03cpZ+QsRQ==} + exact-mirror@0.2.7: + resolution: {integrity: sha512-+MeEmDcLA4o/vjK2zujgk+1VTxPR4hdp23qLqkWfStbECtAq9gmsvQa3LW6z/0GXZyHJobrCnmy1cdeE7BjsYg==} peerDependencies: '@sinclair/typebox': ^0.34.15 peerDependenciesMeta: @@ -3277,8 +3121,8 @@ packages: resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} engines: {node: '>=16.17'} - expect-type@1.2.2: - resolution: {integrity: sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA==} + expect-type@1.3.0: + resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==} engines: {node: '>=12.0.0'} exsolve@1.0.8: @@ -3311,12 +3155,8 @@ packages: fast-uri@3.1.0: resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} - fast-xml-parser@5.2.5: - resolution: {integrity: sha512-pfX9uG9Ki0yekDHx2SiuRIyFdyAr1kMIMitPvb0YBo8SUfKvia7w7FIyd/l6av85pFYRhZscS75MwMnbvY+hcQ==} - hasBin: true - - fastq@1.19.1: - resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} + fastq@1.20.1: + resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} fd-slicer@1.1.0: resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} @@ -3337,15 +3177,12 @@ packages: resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} engines: {node: ^12.20 || >= 14.13} - fetchdts@0.1.7: - resolution: {integrity: sha512-YoZjBdafyLIop9lSxXVI33oLD5kN31q4Td+CasofLLYeLXRFeOsuOw0Uo+XNRi9PZlbfdlN2GmRtm4tCEQ9/KA==} - figures@6.1.0: resolution: {integrity: sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==} engines: {node: '>=18'} - file-type@21.1.1: - resolution: {integrity: sha512-ifJXo8zUqbQ/bLbl9sFoqHNTNWbnPY1COImFfM6CCy7z+E+jC1eY9YfOKkx0fckIg+VljAy2/87T61fp0+eEkg==} + file-type@21.3.0: + resolution: {integrity: sha512-8kPJMIGz1Yt/aPEwOsrR97ZyZaD1Iqm8PClb1nYFclUCkBi0Ma5IsYNQzvSFS9ib51lWyIw5mIT9rWzI/xjpzA==} engines: {node: '>=20'} file-uri-to-path@1.0.0: @@ -3370,6 +3207,10 @@ packages: fn.name@1.1.0: resolution: {integrity: sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==} + for-each@0.3.5: + resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} + engines: {node: '>= 0.4'} + foreground-child@3.3.1: resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} engines: {node: '>=14'} @@ -3386,6 +3227,17 @@ packages: function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + function.prototype.name@1.1.8: + resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==} + engines: {node: '>= 0.4'} + + functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + + generator-function@2.0.1: + resolution: {integrity: sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==} + engines: {node: '>= 0.4'} + gensync@1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} @@ -3398,10 +3250,14 @@ packages: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} - get-east-asian-width@1.4.0: - resolution: {integrity: sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==} + get-east-asian-width@1.5.0: + resolution: {integrity: sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA==} engines: {node: '>=18'} + get-intrinsic@1.3.0: + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} + engines: {node: '>= 0.4'} + get-port-please@3.2.0: resolution: {integrity: sha512-I9QVvBw5U/hw3RmWpYKRumUeaDgxTPd401x364rLmWBJcOQ753eov1eTgzDqRG9bqFIfDc7gfzcQEWrUri3o1A==} @@ -3409,6 +3265,10 @@ packages: resolution: {integrity: sha512-QB9NKEeDg3xxVwCCwJQ9+xycaz6pBB6iQ76wiWMl1927n0Kir6alPiP+yuiICLLU4jpMe08dXfpebuQppFA2zw==} engines: {node: '>=16'} + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + get-stream@5.2.0: resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} engines: {node: '>=8'} @@ -3417,22 +3277,32 @@ packages: resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} engines: {node: '>=16'} - get-tsconfig@4.13.0: - resolution: {integrity: sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==} + get-symbol-description@1.1.0: + resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} + engines: {node: '>= 0.4'} + + get-tsconfig@4.13.6: + resolution: {integrity: sha512-shZT/QMiSHc/YBLxxOkMtgSid5HFoauqCE3/exfsEcwg1WkeqjG+V40yBbBrsD+jW2HDXcs28xOfcbm2jI8Ddw==} glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} - glob@10.4.5: - resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + glob@10.5.0: + resolution: {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 hasBin: true glob@11.1.0: resolution: {integrity: sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw==} engines: {node: 20 || >=22} + 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 hasBin: true + globalthis@1.0.4: + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} + engines: {node: '>= 0.4'} + globrex@0.1.2: resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} @@ -3446,25 +3316,49 @@ packages: peerDependencies: csstype: ^3.0.10 + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - h3@1.15.4: - resolution: {integrity: sha512-z5cFQWDffyOe4vQ9xIqNfCZdV4p//vy6fBnr8Q1AWnVZ0teurKMG66rLj++TKwKPUP3u7iMUvrvKaEUiQw2QWQ==} + h3@1.15.5: + resolution: {integrity: sha512-xEyq3rSl+dhGX2Lm0+eFQIAzlDN6Fs0EcC4f7BNUmzaRX/PTzeuM+Tr2lHB8FoXggsQIeXLj8EDVgs5ywxyxmg==} - h3@2.0.0-beta.4: - resolution: {integrity: sha512-/JdwHUGuHjbBXAVxQN7T7QeI9cVlhsqMKVNFHebZVs9RoEYH85Ogh9O1DEy/1ZiJkmMwa1gNg6bBcGhc1Itjdg==} + h3@2.0.1-rc.14: + resolution: {integrity: sha512-163qbGmTr/9rqQRNuqMqtgXnOUAkE4KTdauiC9y0E5iG1I65kte9NyfWvZw5RTDMt6eY+DtyoNzrQ9wA2BfvGQ==} engines: {node: '>=20.11.1'} + hasBin: true peerDependencies: crossws: ^0.4.1 peerDependenciesMeta: crossws: optional: true + has-bigints@1.1.0: + resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} + engines: {node: '>= 0.4'} + has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + + has-proto@1.2.0: + resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} + engines: {node: '>= 0.4'} + + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + hasown@2.0.2: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} @@ -3476,16 +3370,16 @@ packages: resolution: {integrity: sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==} engines: {node: ^16.14.0 || >=18.0.0} - html-encoding-sniffer@4.0.0: - resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==} - engines: {node: '>=18'} + html-encoding-sniffer@6.0.0: + resolution: {integrity: sha512-CV9TW3Y3f8/wT0BRFc1/KAVQ3TUHiXmaAb6VW9vtiMFf7SLoMd1PdAc4W3KFOFETBJUb90KatHqlsZMWV+R9Gg==} + engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} html-to-text@9.0.5: resolution: {integrity: sha512-qY60FjREgVZL03vJU6IfMV4GDjGBIoOyvuFdpBDIX9yTlDw0TjxVBQp+P8NvpdIXNJvfWBTNul7fsAQJq2FNpg==} engines: {node: '>=14'} - htmlparser2@10.0.0: - resolution: {integrity: sha512-TwAZM+zE5Tq3lrEHvOlvwgj1XLWQCtaaibSN11Q+gGBAS7Y1uZSWwXXRe4iF6OXnaq1riyQAPFOBtYc77Mxq0g==} + htmlparser2@10.1.0: + resolution: {integrity: sha512-VTZkM9GWRAtEpveh7MSF6SjjrpNVNNVJfFup7xTY3UpFtm67foy9HDVXneLtFVt4pMz5kZtgNcvCniNFb1hlEQ==} htmlparser2@8.0.2: resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==} @@ -3547,6 +3441,10 @@ packages: inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + internal-slot@1.1.0: + resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} + engines: {node: '>= 0.4'} + ipx@3.1.1: resolution: {integrity: sha512-7Xnt54Dco7uYkfdAw0r2vCly3z0rSaVhEXMzPvl3FndsTVm5p26j+PO+gyinkYmcsEUvX2Rh7OGK7KzYWRu6BA==} hasBin: true @@ -3554,14 +3452,42 @@ packages: iron-webcrypto@1.2.1: resolution: {integrity: sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==} + is-array-buffer@3.0.5: + resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} + engines: {node: '>= 0.4'} + + is-async-function@2.1.1: + resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} + engines: {node: '>= 0.4'} + + is-bigint@1.1.0: + resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} + engines: {node: '>= 0.4'} + is-binary-path@2.1.0: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} + is-boolean-object@1.2.2: + resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} + engines: {node: '>= 0.4'} + + is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + is-core-module@2.16.1: resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} engines: {node: '>= 0.4'} + is-data-view@1.0.2: + resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} + engines: {node: '>= 0.4'} + + is-date-object@1.1.0: + resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} + engines: {node: '>= 0.4'} + is-docker@3.0.0: resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -3571,10 +3497,18 @@ packages: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} + is-finalizationregistry@1.1.1: + resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} + engines: {node: '>= 0.4'} + is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} + is-generator-function@1.1.2: + resolution: {integrity: sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==} + engines: {node: '>= 0.4'} + is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} @@ -3588,10 +3522,22 @@ packages: resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==} engines: {node: '>=12'} + is-map@2.0.3: + resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} + engines: {node: '>= 0.4'} + + is-negative-zero@2.0.3: + resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} + engines: {node: '>= 0.4'} + is-network-error@1.3.0: resolution: {integrity: sha512-6oIwpsgRfnDiyEDLMay/GqCl3HoAtH5+RUKW29gYkL0QA+ipzpDLA16yQs7/RHCSu+BwgbJaOUqa4A99qNVQVw==} engines: {node: '>=16'} + is-number-object@1.1.1: + resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} + engines: {node: '>= 0.4'} + is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} @@ -3611,6 +3557,18 @@ packages: is-potential-custom-element-name@1.0.1: resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} + is-regex@1.2.1: + resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} + engines: {node: '>= 0.4'} + + is-set@2.0.3: + resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} + engines: {node: '>= 0.4'} + + is-shared-array-buffer@1.0.4: + resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} + engines: {node: '>= 0.4'} + is-stream@2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} @@ -3623,6 +3581,18 @@ packages: resolution: {integrity: sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==} engines: {node: '>=18'} + is-string@1.1.1: + resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} + engines: {node: '>= 0.4'} + + is-symbol@1.1.1: + resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} + engines: {node: '>= 0.4'} + + is-typed-array@1.1.15: + resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} + engines: {node: '>= 0.4'} + is-unicode-supported@1.3.0: resolution: {integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==} engines: {node: '>=12'} @@ -3638,8 +3608,20 @@ packages: is-url@1.2.4: resolution: {integrity: sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==} - is-wsl@3.1.0: - resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==} + is-weakmap@2.0.2: + resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} + engines: {node: '>= 0.4'} + + is-weakref@1.1.1: + resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==} + engines: {node: '>= 0.4'} + + is-weakset@2.0.4: + resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} + engines: {node: '>= 0.4'} + + is-wsl@3.1.1: + resolution: {integrity: sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==} engines: {node: '>=16'} is64bit@2.0.0: @@ -3649,8 +3631,11 @@ packages: isarray@1.0.0: resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} - isbot@5.1.32: - resolution: {integrity: sha512-VNfjM73zz2IBZmdShMfAUg10prm6t7HFUQmNAEOAVS4YH92ZrZcvkMcGX6cIgBJAzWDzPent/EeAtYEHNPNPBQ==} + isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + + isbot@5.1.35: + resolution: {integrity: sha512-waFfC72ZNfwLLuJ2iLaoVaqcNo+CAaLR7xCpAn0Y5WfGzkNHv7ZN39Vbi1y+kb+Zs46XHOX3tZNExroFUPX+Kg==} engines: {node: '>=18'} isexe@2.0.0: @@ -3659,8 +3644,8 @@ packages: jackspeak@3.4.3: resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} - jackspeak@4.1.1: - resolution: {integrity: sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==} + jackspeak@4.2.3: + resolution: {integrity: sha512-ykkVRwrYvFm1nb2AJfKKYPr0emF6IiXDYUaFx4Zn9ZuIH7MrzEZ3sD5RlqGXNRpHtvUHJyOnCEFxOlNDtGo7wg==} engines: {node: 20 || >=22} jiti@2.4.2: @@ -3687,12 +3672,12 @@ packages: js-tokens@9.0.1: resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} - js-yaml@3.14.1: - resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + js-yaml@4.1.1: + resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} hasBin: true - jsdom@27.2.0: - resolution: {integrity: sha512-454TI39PeRDW1LgpyLPyURtB4Zx1tklSr6+OFOipsxGUH1WMTvk6C65JQdrj455+DP2uJ1+veBEHTGFKWVLFoA==} + jsdom@27.4.0: + resolution: {integrity: sha512-mjzqwWRD9Y1J1KUi7W97Gja1bwOOM5Ug0EZ6UDK3xS7j7mndrkwozHtSblfomlzyB4NepioNt+B2sOSzczVgtQ==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} peerDependencies: canvas: ^3.0.0 @@ -3720,19 +3705,19 @@ packages: resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} engines: {node: '>=0.10.0'} - jsonwebtoken@9.0.2: - resolution: {integrity: sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==} + jsonwebtoken@9.0.3: + resolution: {integrity: sha512-MT/xP0CrubFRNLNKvxJ2BYfy53Zkm++5bX9dtuPbqAeQpTVe0MQTFhao8+Cp//EmJp244xt6Drw/GVEGCUj40g==} engines: {node: '>=12', npm: '>=6'} junk@4.0.1: resolution: {integrity: sha512-Qush0uP+G8ZScpGMZvHUiRfI0YBWuB3gVBYlI0v0vvOJt5FLicco+IkP0a50LqTTQhmts/m6tP5SWE+USyIvcQ==} engines: {node: '>=12.20'} - jwa@1.4.2: - resolution: {integrity: sha512-eeH5JO+21J78qMvTIDdBXidBd6nG2kZjg5Ohz/1fpa28Z4CcsWUzJ1ZZyFq/3z3N17aZy+ZuBoHljASbL1WfOw==} + jwa@2.0.1: + resolution: {integrity: sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==} - jws@3.2.2: - resolution: {integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==} + jws@4.0.1: + resolution: {integrity: sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==} jwt-decode@4.0.0: resolution: {integrity: sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA==} @@ -3750,8 +3735,8 @@ packages: engines: {node: '>=8'} hasBin: true - launch-editor@2.12.0: - resolution: {integrity: sha512-giOHXoOtifjdHqUamwKq6c49GzBdLjvxrd2D+Q4V6uOHopJv7p9VJxikDsQ/CBXZbEITgUqSVHXLTG3VhPP1Dg==} + launch-editor@2.13.0: + resolution: {integrity: sha512-u+9asUHMJ99lA15VRMXw5XKfySFR9dGXwgsgS14YTbUq3GITP58mIM32At90P5fZ+MUId5Yw+IwI/yKub7jnCQ==} lazystream@1.0.1: resolution: {integrity: sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==} @@ -3764,74 +3749,74 @@ packages: resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} engines: {node: '>=6'} - lightningcss-android-arm64@1.30.2: - resolution: {integrity: sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A==} + lightningcss-android-arm64@1.31.1: + resolution: {integrity: sha512-HXJF3x8w9nQ4jbXRiNppBCqeZPIAfUo8zE/kOEGbW5NZvGc/K7nMxbhIr+YlFlHW5mpbg/YFPdbnCh1wAXCKFg==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [android] - lightningcss-darwin-arm64@1.30.2: - resolution: {integrity: sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA==} + lightningcss-darwin-arm64@1.31.1: + resolution: {integrity: sha512-02uTEqf3vIfNMq3h/z2cJfcOXnQ0GRwQrkmPafhueLb2h7mqEidiCzkE4gBMEH65abHRiQvhdcQ+aP0D0g67sg==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [darwin] - lightningcss-darwin-x64@1.30.2: - resolution: {integrity: sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ==} + lightningcss-darwin-x64@1.31.1: + resolution: {integrity: sha512-1ObhyoCY+tGxtsz1lSx5NXCj3nirk0Y0kB/g8B8DT+sSx4G9djitg9ejFnjb3gJNWo7qXH4DIy2SUHvpoFwfTA==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [darwin] - lightningcss-freebsd-x64@1.30.2: - resolution: {integrity: sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA==} + lightningcss-freebsd-x64@1.31.1: + resolution: {integrity: sha512-1RINmQKAItO6ISxYgPwszQE1BrsVU5aB45ho6O42mu96UiZBxEXsuQ7cJW4zs4CEodPUioj/QrXW1r9pLUM74A==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [freebsd] - lightningcss-linux-arm-gnueabihf@1.30.2: - resolution: {integrity: sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA==} + lightningcss-linux-arm-gnueabihf@1.31.1: + resolution: {integrity: sha512-OOCm2//MZJ87CdDK62rZIu+aw9gBv4azMJuA8/KB74wmfS3lnC4yoPHm0uXZ/dvNNHmnZnB8XLAZzObeG0nS1g==} engines: {node: '>= 12.0.0'} cpu: [arm] os: [linux] - lightningcss-linux-arm64-gnu@1.30.2: - resolution: {integrity: sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A==} + lightningcss-linux-arm64-gnu@1.31.1: + resolution: {integrity: sha512-WKyLWztD71rTnou4xAD5kQT+982wvca7E6QoLpoawZ1gP9JM0GJj4Tp5jMUh9B3AitHbRZ2/H3W5xQmdEOUlLg==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] - lightningcss-linux-arm64-musl@1.30.2: - resolution: {integrity: sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==} + lightningcss-linux-arm64-musl@1.31.1: + resolution: {integrity: sha512-mVZ7Pg2zIbe3XlNbZJdjs86YViQFoJSpc41CbVmKBPiGmC4YrfeOyz65ms2qpAobVd7WQsbW4PdsSJEMymyIMg==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] - lightningcss-linux-x64-gnu@1.30.2: - resolution: {integrity: sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==} + lightningcss-linux-x64-gnu@1.31.1: + resolution: {integrity: sha512-xGlFWRMl+0KvUhgySdIaReQdB4FNudfUTARn7q0hh/V67PVGCs3ADFjw+6++kG1RNd0zdGRlEKa+T13/tQjPMA==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] - lightningcss-linux-x64-musl@1.30.2: - resolution: {integrity: sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==} + lightningcss-linux-x64-musl@1.31.1: + resolution: {integrity: sha512-eowF8PrKHw9LpoZii5tdZwnBcYDxRw2rRCyvAXLi34iyeYfqCQNA9rmUM0ce62NlPhCvof1+9ivRaTY6pSKDaA==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] - lightningcss-win32-arm64-msvc@1.30.2: - resolution: {integrity: sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==} + lightningcss-win32-arm64-msvc@1.31.1: + resolution: {integrity: sha512-aJReEbSEQzx1uBlQizAOBSjcmr9dCdL3XuC/6HLXAxmtErsj2ICo5yYggg1qOODQMtnjNQv2UHb9NpOuFtYe4w==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [win32] - lightningcss-win32-x64-msvc@1.30.2: - resolution: {integrity: sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw==} + lightningcss-win32-x64-msvc@1.31.1: + resolution: {integrity: sha512-I9aiFrbd7oYHwlnQDqr1Roz+fTz61oDDJX7n9tYF9FJymH1cIN1DtKw3iYt6b8WZgEjoNwVSncwF4wx/ZedMhw==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [win32] - lightningcss@1.30.2: - resolution: {integrity: sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==} + lightningcss@1.31.1: + resolution: {integrity: sha512-l51N2r93WmGUye3WuFoN5k10zyvrVs0qfKBhyC5ogUQ6Ew6JUSswh78mbSO+IU3nTWsyOArqPCcShdQSadghBQ==} engines: {node: '>= 12.0.0'} listhen@1.9.0: @@ -3863,8 +3848,8 @@ packages: lodash.once@4.1.1: resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} - lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + lodash@4.17.23: + resolution: {integrity: sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==} log-symbols@6.0.0: resolution: {integrity: sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==} @@ -3878,17 +3863,14 @@ packages: resolution: {integrity: sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ==} engines: {node: '>= 12.0.0'} - long@5.3.2: - resolution: {integrity: sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==} - loupe@3.2.1: resolution: {integrity: sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==} lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} - lru-cache@11.2.2: - resolution: {integrity: sha512-F9ODfyqML2coTIsQpSkRHnLSZMtkU8Q+mSfcaIyKwy58u+8k5nvAYeiNhsyMARvzNcXJ9QfWVrcPsC9e9rAxtg==} + lru-cache@11.2.6: + resolution: {integrity: sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ==} engines: {node: 20 || >=22} lru-cache@5.1.1: @@ -3914,6 +3896,10 @@ packages: engines: {node: '>= 18'} hasBin: true + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + mdn-data@2.0.28: resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==} @@ -3950,9 +3936,9 @@ packages: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} - mime-types@3.0.1: - resolution: {integrity: sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==} - engines: {node: '>= 0.6'} + mime-types@3.0.2: + resolution: {integrity: sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==} + engines: {node: '>=18'} mimic-fn@4.0.0: resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} @@ -3962,23 +3948,23 @@ packages: resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} engines: {node: '>=18'} - minimatch@10.1.1: - resolution: {integrity: sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==} - engines: {node: 20 || >=22} + minimatch@10.2.2: + resolution: {integrity: sha512-+G4CpNBxa5MprY+04MbgOw1v7So6n5JY166pFi9KfYwT78fxScCeSNQSNzp6dpPSW2rONOps6Ocam1wFhCgoVw==} + engines: {node: 18 || 20 || >=22} - minimatch@5.1.6: - resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + minimatch@5.1.7: + resolution: {integrity: sha512-FjiwU9HaHW6YB3H4a1sFudnv93lvydNjz2lmyUXR6IwKhGI+bgL3SOZrBGn6kvvX2pJvhEkGSGjyTHN47O4rqA==} engines: {node: '>=10'} - minimatch@9.0.5: - resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + minimatch@9.0.6: + resolution: {integrity: sha512-kQAVowdR33euIqeA0+VZTDqU+qo1IeVY+hrKYtZMio3Pg0P0vuh/kwRylLUddJhB6pf3q/botcOvRtx4IN1wqQ==} engines: {node: '>=16 || 14 >=14.17'} minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - minipass@7.1.2: - resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + minipass@7.1.3: + resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==} engines: {node: '>=16 || 14 >=14.17'} minizlib@3.1.0: @@ -4040,6 +4026,10 @@ packages: engines: {node: '>=10.5.0'} deprecated: Use your platform's native DOMException instead + node-exports-info@1.6.0: + resolution: {integrity: sha512-pyFS63ptit/P5WqUkt+UUfe+4oevH+bFeIiPPdfb0pFeYEu/1ELnJu5l+5EcTKYL5M7zaAa7S8ddywgXypqKCw==} + engines: {node: '>= 0.4'} + node-fetch-native@1.6.7: resolution: {integrity: sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==} @@ -4056,16 +4046,16 @@ packages: resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - node-forge@1.3.1: - resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} + node-forge@1.3.3: + resolution: {integrity: sha512-rLvcdSyRCyouf6jcOIPe/BgwG/d7hKjzMKOas33/pHEr6gbq18IK9zV7DiPvzsz0oBJPme6qr6H6kGZuI9/DZg==} engines: {node: '>= 6.13.0'} node-gyp-build@4.8.4: resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==} hasBin: true - node-mock-http@1.0.3: - resolution: {integrity: sha512-jN8dK25fsfnMrVsEhluUTPkBFY+6ybu7jSB1n+ri/vOGjJxU8J9CZhpSGkHXSkFjtUhbmoncG/YG9ta5Ludqog==} + node-mock-http@1.0.4: + resolution: {integrity: sha512-8DY+kFsDkNXy1sJglUfuODx1/opAGJGyrTuFqEoN90oRc2Vk0ZbD4K2qmKXBBEhZQzdKHIVfEJpDU8Ak2NJEvQ==} node-releases@2.0.27: resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==} @@ -4078,8 +4068,8 @@ packages: resolution: {integrity: sha512-LN4fydt9TqhZhThkZIVQnF9cwjU3qmUH9h78Mx/K7d3VvfRqqwthLwJEUOEL0QPZ0XQmNN7be5Ggit5+4dq3Bw==} engines: {node: '>=0.12.0'} - nodemailer@7.0.12: - resolution: {integrity: sha512-H+rnK5bX2Pi/6ms3sN4/jRQvYSMltV6vqup/0SFOrxYYY/qoNvhXPlYq3e+Pm9RFJRwrMGbMIwi81M4dxpomhA==} + nodemailer@7.0.13: + resolution: {integrity: sha512-PNDFSJdP+KFgdsG3ZzMXCgquO7I6McjY2vlqILjtJd0hy8wEvtugS9xKRF2NWlPNGxvLCXlTNIae4serI7dinw==} engines: {node: '>=6.0.0'} nopt@8.1.0: @@ -4115,6 +4105,22 @@ packages: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} + object-inspect@1.13.4: + resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} + engines: {node: '>= 0.4'} + + object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + + object.assign@4.1.7: + resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} + engines: {node: '>= 0.4'} + + object.entries@1.1.9: + resolution: {integrity: sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==} + engines: {node: '>= 0.4'} + ofetch@1.5.1: resolution: {integrity: sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA==} @@ -4146,6 +4152,10 @@ packages: resolution: {integrity: sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw==} engines: {node: '>=18'} + own-keys@1.0.1: + resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} + engines: {node: '>= 0.4'} + p-event@6.0.1: resolution: {integrity: sha512-Q6Bekk5wpzW5qIyUP4gdMEujObYstZl6DMMOSenwBvV0BlE5LkDwkjs5yHbZmdCEq2o4RJx4tE1vwxFVf2FG1w==} engines: {node: '>=16.17'} @@ -4223,9 +4233,9 @@ packages: resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} engines: {node: '>=16 || 14 >=14.18'} - path-scurry@2.0.1: - resolution: {integrity: sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==} - engines: {node: 20 || >=22} + path-scurry@2.0.2: + resolution: {integrity: sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==} + engines: {node: 18 || 20 || >=22} path-type@6.0.0: resolution: {integrity: sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==} @@ -4281,6 +4291,10 @@ packages: pkg-types@2.3.0: resolution: {integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==} + possible-typed-array-names@1.1.0: + resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} + engines: {node: '>= 0.4'} + postcss-values-parser@6.0.2: resolution: {integrity: sha512-YLJpK0N1brcNJrs9WatuJFtHaV9q5aAOj+S4DI5S7jgHlRfm0PIbDCAFRYMQD5SHq7Fy6xsDhyutgS0QOAs0qw==} engines: {node: '>=10'} @@ -4300,8 +4314,8 @@ packages: engines: {node: '>=18'} hasBin: true - prettier@3.6.2: - resolution: {integrity: sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==} + prettier@3.8.1: + resolution: {integrity: sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==} engines: {node: '>=14'} hasBin: true @@ -4327,10 +4341,6 @@ packages: resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} engines: {node: '>= 6'} - protobufjs@7.5.4: - resolution: {integrity: sha512-CvexbZtbov6jW2eXAvLukXjXUW1TzFaivC46BpWc/3BpcCysb5Vffu+B3XHMm8lVEuy2Mm4XGex8hBSg1yapPg==} - engines: {node: '>=12.0.0'} - pump@3.0.3: resolution: {integrity: sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==} @@ -4350,10 +4360,10 @@ packages: radix3@1.1.2: resolution: {integrity: sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==} - react-dom@19.2.0: - resolution: {integrity: sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ==} + react-dom@19.2.4: + resolution: {integrity: sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==} peerDependencies: - react: ^19.2.0 + react: ^19.2.4 react-email@5.1.0: resolution: {integrity: sha512-uVvtKcea0kd+QRwH5/Cw/znnijIge+Jog0IFagi0JiZgQ/GrDQ/qD98AwGVV1vM3hGbSugOvmcMayamFc4Zz1g==} @@ -4367,8 +4377,8 @@ packages: resolution: {integrity: sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==} engines: {node: '>=0.10.0'} - react@19.2.0: - resolution: {integrity: sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==} + react@19.2.4: + resolution: {integrity: sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==} engines: {node: '>=0.10.0'} read-package-up@11.0.0: @@ -4401,6 +4411,10 @@ packages: resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} engines: {node: '>= 14.18.0'} + readdirp@5.0.0: + resolution: {integrity: sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==} + engines: {node: '>= 20.19.0'} + real-require@0.2.0: resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==} engines: {node: '>= 12.13.0'} @@ -4409,6 +4423,14 @@ packages: resolution: {integrity: sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA==} engines: {node: '>= 4'} + reflect.getprototypeof@1.0.10: + resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} + engines: {node: '>= 0.4'} + + regexp.prototype.flags@1.5.4: + resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} + engines: {node: '>= 0.4'} + remove-trailing-separator@1.1.0: resolution: {integrity: sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==} @@ -4439,8 +4461,9 @@ packages: engines: {node: '>= 0.4'} hasBin: true - resolve@2.0.0-next.5: - resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} + resolve@2.0.0-next.6: + resolution: {integrity: sha512-3JmVl5hMGtJ3kMmB3zi3DL25KfkCEyy3Tw7Gmw7z5w8M9WlwoPFnIvwChzu1+cF3iaK3sp18hhPz8ANeimdJfA==} + engines: {node: '>= 0.4'} hasBin: true restore-cursor@5.1.0: @@ -4455,13 +4478,13 @@ packages: resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - rollup@4.53.2: - resolution: {integrity: sha512-MHngMYwGJVi6Fmnk6ISmnk7JAHRNF0UkuucA0CUW3N3a4KnONPEZz+vUanQP/ZC/iY1Qkf3bwPWzyY84wEks1g==} + rollup@4.59.0: + resolution: {integrity: sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true - rou3@0.7.10: - resolution: {integrity: sha512-aoFj6f7MJZ5muJ+Of79nrhs9N3oLGqi2VEMe94Zbkjb6Wupha46EuoYgpWSOZlXww3bbd8ojgXTAA2mzimX5Ww==} + rou3@0.7.12: + resolution: {integrity: sha512-iFE4hLDuloSWcD7mjdCDhx2bKcIsYbtOTpfH5MHHLSKMOUyjqQXTeZVa289uuwEGEKFoE/BAPbhaU4B774nceg==} run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} @@ -4469,12 +4492,24 @@ packages: rxjs@7.8.2: resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} + safe-array-concat@1.1.3: + resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} + engines: {node: '>=0.4'} + safe-buffer@5.1.2: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + safe-push-apply@1.0.0: + resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} + engines: {node: '>= 0.4'} + + safe-regex-test@1.1.0: + resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} + engines: {node: '>= 0.4'} + safe-stable-stringify@2.5.0: resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==} engines: {node: '>=10'} @@ -4482,127 +4517,14 @@ packages: safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - sass-embedded-all-unknown@1.97.3: - resolution: {integrity: sha512-t6N46NlPuXiY3rlmG6/+1nwebOBOaLFOOVqNQOC2cJhghOD4hh2kHNQQTorCsbY9S1Kir2la1/XLBwOJfui0xg==} - cpu: ['!arm', '!arm64', '!riscv64', '!x64'] - - sass-embedded-android-arm64@1.97.3: - resolution: {integrity: sha512-aiZ6iqiHsUsaDx0EFbbmmA0QgxicSxVVN3lnJJ0f1RStY0DthUkquGT5RJ4TPdaZ6ebeJWkboV4bra+CP766eA==} - engines: {node: '>=14.0.0'} - cpu: [arm64] - os: [android] - - sass-embedded-android-arm@1.97.3: - resolution: {integrity: sha512-cRTtf/KV/q0nzGZoUzVkeIVVFv3L/tS1w4WnlHapphsjTXF/duTxI8JOU1c/9GhRPiMdfeXH7vYNcMmtjwX7jg==} - engines: {node: '>=14.0.0'} - cpu: [arm] - os: [android] - - sass-embedded-android-riscv64@1.97.3: - resolution: {integrity: sha512-zVEDgl9JJodofGHobaM/q6pNETG69uuBIGQHRo789jloESxxZe82lI3AWJQuPmYCOG5ElfRthqgv89h3gTeLYA==} - engines: {node: '>=14.0.0'} - cpu: [riscv64] - os: [android] - - sass-embedded-android-x64@1.97.3: - resolution: {integrity: sha512-3ke0le7ZKepyXn/dKKspYkpBC0zUk/BMciyP5ajQUDy4qJwobd8zXdAq6kOkdiMB+d9UFJOmEkvgFJHl3lqwcw==} - engines: {node: '>=14.0.0'} - cpu: [x64] - os: [android] - - sass-embedded-darwin-arm64@1.97.3: - resolution: {integrity: sha512-fuqMTqO4gbOmA/kC5b9y9xxNYw6zDEyfOtMgabS7Mz93wimSk2M1quQaTJnL98Mkcsl2j+7shNHxIS/qpcIDDA==} - engines: {node: '>=14.0.0'} - cpu: [arm64] - os: [darwin] - - sass-embedded-darwin-x64@1.97.3: - resolution: {integrity: sha512-b/2RBs/2bZpP8lMkyZ0Px0vkVkT8uBd0YXpOwK7iOwYkAT8SsO4+WdVwErsqC65vI5e1e5p1bb20tuwsoQBMVA==} - engines: {node: '>=14.0.0'} - cpu: [x64] - os: [darwin] - - sass-embedded-linux-arm64@1.97.3: - resolution: {integrity: sha512-IP1+2otCT3DuV46ooxPaOKV1oL5rLjteRzf8ldZtfIEcwhSgSsHgA71CbjYgLEwMY9h4jeal8Jfv3QnedPvSjg==} - engines: {node: '>=14.0.0'} - cpu: [arm64] - os: [linux] - - sass-embedded-linux-arm@1.97.3: - resolution: {integrity: sha512-2lPQ7HQQg4CKsH18FTsj2hbw5GJa6sBQgDsls+cV7buXlHjqF8iTKhAQViT6nrpLK/e8nFCoaRgSqEC8xMnXuA==} - engines: {node: '>=14.0.0'} - cpu: [arm] - os: [linux] - - sass-embedded-linux-musl-arm64@1.97.3: - resolution: {integrity: sha512-Lij0SdZCsr+mNRSyDZ7XtJpXEITrYsaGbOTz5e6uFLJ9bmzUbV7M8BXz2/cA7bhfpRPT7/lwRKPdV4+aR9Ozcw==} - engines: {node: '>=14.0.0'} - cpu: [arm64] - os: [linux] - - sass-embedded-linux-musl-arm@1.97.3: - resolution: {integrity: sha512-cBTMU68X2opBpoYsSZnI321gnoaiMBEtc+60CKCclN6PCL3W3uXm8g4TLoil1hDD6mqU9YYNlVG6sJ+ZNef6Lg==} - engines: {node: '>=14.0.0'} - cpu: [arm] - os: [linux] - - sass-embedded-linux-musl-riscv64@1.97.3: - resolution: {integrity: sha512-sBeLFIzMGshR4WmHAD4oIM7WJVkSoCIEwutzptFtGlSlwfNiijULp+J5hA2KteGvI6Gji35apR5aWj66wEn/iA==} - engines: {node: '>=14.0.0'} - cpu: [riscv64] - os: [linux] - - sass-embedded-linux-musl-x64@1.97.3: - resolution: {integrity: sha512-/oWJ+OVrDg7ADDQxRLC/4g1+Nsz1g4mkYS2t6XmyMJKFTFK50FVI2t5sOdFH+zmMp+nXHKM036W94y9m4jjEcw==} - engines: {node: '>=14.0.0'} - cpu: [x64] - os: [linux] - - sass-embedded-linux-riscv64@1.97.3: - resolution: {integrity: sha512-l3IfySApLVYdNx0Kjm7Zehte1CDPZVcldma3dZt+TfzvlAEerM6YDgsk5XEj3L8eHBCgHgF4A0MJspHEo2WNfA==} - engines: {node: '>=14.0.0'} - cpu: [riscv64] - os: [linux] - - sass-embedded-linux-x64@1.97.3: - resolution: {integrity: sha512-Kwqwc/jSSlcpRjULAOVbndqEy2GBzo6OBmmuBVINWUaJLJ8Kczz3vIsDUWLfWz/kTEw9FHBSiL0WCtYLVAXSLg==} - engines: {node: '>=14.0.0'} - cpu: [x64] - os: [linux] - - sass-embedded-unknown-all@1.97.3: - resolution: {integrity: sha512-/GHajyYJmvb0IABUQHbVHf1nuHPtIDo/ClMZ81IDr59wT5CNcMe7/dMNujXwWugtQVGI5UGmqXWZQCeoGnct8Q==} - os: ['!android', '!darwin', '!linux', '!win32'] - - sass-embedded-win32-arm64@1.97.3: - resolution: {integrity: sha512-RDGtRS1GVvQfMGAmVXNxYiUOvPzn9oO1zYB/XUM9fudDRnieYTcUytpNTQZLs6Y1KfJxgt5Y+giRceC92fT8Uw==} - engines: {node: '>=14.0.0'} - cpu: [arm64] - os: [win32] - - sass-embedded-win32-x64@1.97.3: - resolution: {integrity: sha512-SFRa2lED9UEwV6vIGeBXeBOLKF+rowF3WmNfb/BzhxmdAsKofCXrJ8ePW7OcDVrvNEbTOGwhsReIsF5sH8fVaw==} - engines: {node: '>=14.0.0'} - cpu: [x64] - os: [win32] - - sass-embedded@1.97.3: - resolution: {integrity: sha512-eKzFy13Nk+IRHhlAwP3sfuv+PzOrvzUkwJK2hdoCKYcWGSdmwFpeGpWmyewdw8EgBnsKaSBtgf/0b2K635ecSA==} - engines: {node: '>=16.0.0'} - hasBin: true - - sass@1.94.0: - resolution: {integrity: sha512-Dqh7SiYcaFtdv5Wvku6QgS5IGPm281L+ZtVD1U2FJa7Q0EFRlq8Z3sjYtz6gYObsYThUOz9ArwFqPZx+1azILQ==} - engines: {node: '>=14.0.0'} - hasBin: true - sass@1.97.3: resolution: {integrity: sha512-fDz1zJpd5GycprAbu4Q2PV/RprsRtKC/0z82z0JLgdytmcq0+ujJbJ/09bPGDxCLkKY3Np5cRAOcWiVkLXJURg==} engines: {node: '>=14.0.0'} hasBin: true - sax@1.4.3: - resolution: {integrity: sha512-yqYn1JhPczigF94DMS+shiDMjDowYO6y9+wB/4WgO0Y19jWYk0lQ4tuG5KI7kj4FTp1wxPj5IFfcrz/s1c3jjQ==} + sax@1.4.4: + resolution: {integrity: sha512-1n3r/tGXO6b6VXMdFT54SHzT9ytu9yr7TaELowdYpMqY/Ao7EnlQGmAQ1+RatX7Tkkdm6hONI2owqNx2aZj5Sw==} + engines: {node: '>=11.0.0'} saxes@6.0.0: resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} @@ -4621,30 +4543,32 @@ packages: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true - semver@7.7.3: - resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==} + semver@7.7.4: + resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==} engines: {node: '>=10'} hasBin: true - seroval-plugins@1.3.3: - resolution: {integrity: sha512-16OL3NnUBw8JG1jBLUoZJsLnQq0n5Ua6aHalhJK4fMQkz1lqR7Osz1sA30trBtd9VUDc2NgkuRCn8+/pBwqZ+w==} + seroval-plugins@1.5.0: + resolution: {integrity: sha512-EAHqADIQondwRZIdeW2I636zgsODzoBDwb3PT/+7TLDWyw1Dy/Xv7iGUIEXXav7usHDE9HVhOU61irI3EnyyHA==} engines: {node: '>=10'} peerDependencies: seroval: ^1.0 - seroval-plugins@1.4.0: - resolution: {integrity: sha512-zir1aWzoiax6pbBVjoYVd0O1QQXgIL3eVGBMsBsNmM8Ukq90yGaWlfx0AB9dTS8GPqrOrbXn79vmItCUP9U3BQ==} + seroval@1.5.0: + resolution: {integrity: sha512-OE4cvmJ1uSPrKorFIH9/w/Qwuvi/IMcGbv5RKgcJ/zjA/IohDLU6SVaxFN9FwajbP7nsX0dQqMDes1whk3y+yw==} engines: {node: '>=10'} - peerDependencies: - seroval: ^1.0 - seroval@1.3.2: - resolution: {integrity: sha512-RbcPH1n5cfwKrru7v7+zrZvjLurgHhGyso3HTyGtRivGWgYjbOmGuivCQaORNELjNONoK35nj28EoWul9sb1zQ==} - engines: {node: '>=10'} + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} - seroval@1.4.0: - resolution: {integrity: sha512-BdrNXdzlofomLTiRnwJTSEAaGKyHHZkbMXIywOh7zlzp4uZnXErEwl9XZ+N1hJSNpeTtNxWvVwN0wUzAIQ4Hpg==} - engines: {node: '>=10'} + set-function-name@2.0.2: + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} + engines: {node: '>= 0.4'} + + set-proto@1.0.0: + resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} + engines: {node: '>= 0.4'} sharp@0.34.5: resolution: {integrity: sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==} @@ -4662,6 +4586,22 @@ packages: resolution: {integrity: sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==} engines: {node: '>= 0.4'} + side-channel-list@1.0.0: + resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} + engines: {node: '>= 0.4'} + + side-channel-map@1.0.1: + resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} + engines: {node: '>= 0.4'} + + side-channel-weakmap@1.0.2: + resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} + engines: {node: '>= 0.4'} + + side-channel@1.1.0: + resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} + engines: {node: '>= 0.4'} + siginfo@2.0.0: resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} @@ -4675,19 +4615,19 @@ packages: slashes@3.0.12: resolution: {integrity: sha512-Q9VME8WyGkc7pJf6QEkj3wE+2CnvZMI+XJhwdTPR8Z/kWQRXi7boAWLDibRPyHRTUTPx5FaU7MsyrjI3yLB4HA==} - socket.io-adapter@2.5.5: - resolution: {integrity: sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==} + socket.io-adapter@2.5.6: + resolution: {integrity: sha512-DkkO/dz7MGln0dHn5bmN3pPy+JmywNICWrJqVWiVOyvXjWQFIv9c2h24JrQLLFJ2aQVQf/Cvl1vblnd4r2apLQ==} - socket.io-parser@4.2.4: - resolution: {integrity: sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==} + socket.io-parser@4.2.5: + resolution: {integrity: sha512-bPMmpy/5WWKHea5Y/jYAP6k74A+hvmRCQaJuJB6I/ML5JZq/KfNieUVo/3Mh7SAqn7TyFdIo6wqYHInG1MU1bQ==} engines: {node: '>=10.0.0'} - socket.io@4.8.1: - resolution: {integrity: sha512-oZ7iUCxph8WYRHHcjBEc9unw3adt5CmSNlppj/5Q4k2RIrhl8Z5yY2Xr4j9zj0+wzVZ0bxmYoGSzKJnRl6A4yg==} + socket.io@4.8.3: + resolution: {integrity: sha512-2Dd78bqzzjE6KPkD5fHZmDAKRNe3J15q+YHDrIsy9WEkqttc7GY+kT9OBLSMaPbQaEd0x1BjcmtMtXkfpc+T5A==} engines: {node: '>=10.2.0'} - solid-js@1.9.10: - resolution: {integrity: sha512-Coz956cos/EPDlhs6+jsdTxKuJDPT7B5SVIWgABwROyxjY7Xbr8wkzD68Et+NxnV7DLJ3nJdAC2r9InuV/4Jew==} + solid-js@1.9.11: + resolution: {integrity: sha512-WEJtcc5mkh/BnHA6Yrg4whlF8g6QwpmXXRg4P2ztPmcKeHHlH4+djYecBLhSpecZY2RRECXYUwIc/C2r3yzQ4Q==} sonic-boom@4.2.1: resolution: {integrity: sha512-w6AxtubXa2wTXAUsZMMWERrsIRAdrK0Sc+FUytWvYAhBJLyuI4llrMIC1DtlNSdI99EI86KZum2MMq3EAZlF9Q==} @@ -4716,18 +4656,15 @@ packages: spdx-expression-parse@3.0.1: resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} - spdx-license-ids@3.0.22: - resolution: {integrity: sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==} + spdx-license-ids@3.0.23: + resolution: {integrity: sha512-CWLcCCH7VLu13TgOH+r8p1O/Znwhqv/dbb6lqWy67G+pT1kHmeD/+V36AVb/vq8QMIQwVShJ6Ssl5FPh0fuSdw==} split2@4.2.0: resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} engines: {node: '>= 10.x'} - sprintf-js@1.0.3: - resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} - - srvx@0.8.16: - resolution: {integrity: sha512-hmcGW4CgroeSmzgF1Ihwgl+Ths0JqAJ7HwjP2X7e3JzY7u4IydLMcdnlqGQiQGUswz+PO9oh/KtCpOISIvs9QQ==} + srvx@0.11.7: + resolution: {integrity: sha512-p9qj9wkv/MqG1VoJpOsqXv1QcaVcYRk7ifsC6i3TEwDXFyugdhJN4J3KzQPZq2IJJ2ZCt7ASOB++85pEK38jRw==} engines: {node: '>=20.16.0'} hasBin: true @@ -4744,6 +4681,10 @@ packages: resolution: {integrity: sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==} engines: {node: '>=18'} + stop-iteration-iterator@1.1.0: + resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} + engines: {node: '>= 0.4'} + streamx@2.23.0: resolution: {integrity: sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg==} @@ -4759,6 +4700,18 @@ packages: resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} engines: {node: '>=18'} + string.prototype.trim@1.2.10: + resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==} + engines: {node: '>= 0.4'} + + string.prototype.trimend@1.0.9: + resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==} + engines: {node: '>= 0.4'} + + string.prototype.trimstart@1.0.8: + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} + string_decoder@1.1.1: resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} @@ -4788,9 +4741,6 @@ packages: strip-literal@3.1.0: resolution: {integrity: sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==} - strnum@2.1.2: - resolution: {integrity: sha512-l63NF9y/cLROq/yqKXSLtcMeeyOfnSQlfMSlzFt/K73oIaD8DGaQWd7Z34X9GPiKqP5rbSh84Hl4bOlLcjiSrQ==} - strtok3@10.3.4: resolution: {integrity: sha512-KIy5nylvC5le1OdaaoCJ07L+8iQzJHGH6pWDuzS+d07Cu7n1MZ2x26P8ZKIWfbK02+XIL8Mp4RkWeqdUCrDMfg==} engines: {node: '>=18'} @@ -4834,14 +4784,6 @@ packages: symbol-tree@3.2.4: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} - sync-child-process@1.0.2: - resolution: {integrity: sha512-8lD+t2KrrScJ/7KXCSyfhT3/hRq78rC0wBFqNJXv3mZyn6hW2ypM05JmlSvtqRbeq6jqA94oHbxAr2vYsJ8vDA==} - engines: {node: '>=16.0.0'} - - sync-message-port@1.2.0: - resolution: {integrity: sha512-gAQ9qrUN/UCypHtGFbbe7Rc/f9bzO88IwrG8TDo/aMKAApKyD6E3W4Cm0EfhfBb6Z6SKt59tTCTfD+n1xmAvMg==} - engines: {node: '>=16.0.0'} - system-architecture@0.1.0: resolution: {integrity: sha512-ulAk51I9UVUyJgxlv9M6lFot2WP3e7t8Kz9+IS6D4rVba1tR9kON+Ey69f+1R4Q8cd45Lod6a4IcJIxnzGc/zA==} engines: {node: '>=18'} @@ -4850,8 +4792,8 @@ packages: resolution: {integrity: sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==} engines: {node: '>=20'} - tailwindcss@4.1.18: - resolution: {integrity: sha512-4+Z+0yiYyEtUVCScyfHCxOYP06L5Ne+JiHhY2IjR2KWMIWhJOYZKLSGZaP5HkZ8+bY0cxfzwDE5uOmzFXyIwxw==} + tailwindcss@4.2.0: + resolution: {integrity: sha512-yYzTZ4++b7fNYxFfpnberEEKu43w44aqDMNM9MHMmcKuCH7lL8jJ4yJ7LGHv7rSwiqM0nkiobF9I6cLlpS2P7Q==} tapable@2.3.0: resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==} @@ -4860,12 +4802,12 @@ packages: tar-stream@3.1.7: resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==} - tar@7.5.2: - resolution: {integrity: sha512-7NyxrTE4Anh8km8iEy7o0QYPs+0JKBTj5ZaqHg6B39erLg0qYXN3BijtShwbsNSvQ+LN75+KV+C4QR/f6Gwnpg==} + tar@7.5.9: + resolution: {integrity: sha512-BTLcK0xsDh2+PUe9F6c2TlRp4zOOBMTkoQHQIWSIzI0R7KG46uEwq4OPk2W7bZcprBMsuaeFsqwYr7pjh6CuHg==} engines: {node: '>=18'} - text-decoder@1.2.3: - resolution: {integrity: sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==} + text-decoder@1.2.7: + resolution: {integrity: sha512-vlLytXkeP4xvEq2otHeJfSQIRyWxo/oZGEbXrtEEF9Hnmrdly59sUbzZ/QgyWuLYHctCHxFF4tRQZNQ9k60ExQ==} text-hex@1.0.0: resolution: {integrity: sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==} @@ -4902,11 +4844,11 @@ packages: resolution: {integrity: sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==} engines: {node: '>=14.0.0'} - tldts-core@7.0.18: - resolution: {integrity: sha512-jqJC13oP4FFAahv4JT/0WTDrCF9Okv7lpKtOZUGPLiAnNbACcSg8Y8T+Z9xthOmRBqi/Sob4yi0TE0miRCvF7Q==} + tldts-core@7.0.23: + resolution: {integrity: sha512-0g9vrtDQLrNIiCj22HSe9d4mLVG3g5ph5DZ8zCKBr4OtrspmNB6ss7hVyzArAeE88ceZocIEGkyW1Ime7fxPtQ==} - tldts@7.0.18: - resolution: {integrity: sha512-lCcgTAgMxQ1JKOWrVGo6E69Ukbnx4Gc1wiYLRf6J5NN4HRYJtCby1rPF8rkQ4a6qqoFBK5dvjJ1zJ0F7VfDSvw==} + tldts@7.0.23: + resolution: {integrity: sha512-ASdhgQIBSay0R/eXggAkQ53G4nTJqTXqC2kbaBbdDwM7SkjyZyO0OaaN1/FH7U/yCeqOHDwFO5j8+Os/IS1dXw==} hasBin: true tmp-promise@3.0.3: @@ -4920,8 +4862,8 @@ packages: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} - token-types@6.1.1: - resolution: {integrity: sha512-kh9LVIWH5CnL63Ipf0jhlBIy0UsrMj/NJDfpsy1SqOXlLKEVyXXYrnFxFT1yOOYVGBSApeVnjPw/sBz5BfEjAQ==} + token-types@6.1.2: + resolution: {integrity: sha512-dRXchy+C0IgK8WPC6xvCHFRIWYUbqqdEIKPaKo/AcTUNzwLTK6AH7RjdLWsEZcAN/TBdtfUw3PYEgPr5VPr6ww==} engines: {node: '>=14.16'} toml@3.0.0: @@ -4949,8 +4891,8 @@ packages: resolution: {integrity: sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==} engines: {node: '>= 14.0.0'} - ts-api-utils@2.1.0: - resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} + ts-api-utils@2.4.0: + resolution: {integrity: sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==} engines: {node: '>=18.12'} peerDependencies: typescript: '>=4.8.4' @@ -4972,8 +4914,8 @@ packages: tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - tsx@4.20.6: - resolution: {integrity: sha512-ytQKuwgmrrkDTFP4LjR0ToE2nqgy886GpvRSpU0JAnrdBYppuY5rLkRUYPU1yCryb24SsKBTL/hlDQAEFVwtZg==} + tsx@4.21.0: + resolution: {integrity: sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==} engines: {node: '>=18.0.0'} hasBin: true @@ -4981,34 +4923,54 @@ packages: resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} engines: {node: '>=16'} - type-fest@5.3.1: - resolution: {integrity: sha512-VCn+LMHbd4t6sF3wfU/+HKT63C9OoyrSIf4b+vtWHpt2U7/4InZG467YDNMFMR70DdHjAdpPWmw2lzRdg0Xqqg==} + type-fest@5.4.4: + resolution: {integrity: sha512-JnTrzGu+zPV3aXIUhnyWJj4z/wigMsdYajGLIYakqyOW1nPllzXEJee0QQbHj+CTIQtXGlAjuK0UY+2xTyjVAw==} engines: {node: '>=20'} + typed-array-buffer@1.0.3: + resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} + engines: {node: '>= 0.4'} + + typed-array-byte-length@1.0.3: + resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} + engines: {node: '>= 0.4'} + + typed-array-byte-offset@1.0.4: + resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} + engines: {node: '>= 0.4'} + + typed-array-length@1.0.7: + resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} + engines: {node: '>= 0.4'} + typescript@5.9.3: resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} engines: {node: '>=14.17'} hasBin: true - ufo@1.6.1: - resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==} + ufo@1.6.3: + resolution: {integrity: sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==} uint8array-extras@1.5.0: resolution: {integrity: sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A==} engines: {node: '>=18'} - ulid@3.0.1: - resolution: {integrity: sha512-dPJyqPzx8preQhqq24bBG1YNkvigm87K8kVEHCD+ruZg24t6IFEFv00xMWfxcC4djmFtiTLdFuADn4+DOz6R7Q==} + ulid@3.0.2: + resolution: {integrity: sha512-yu26mwteFYzBAot7KVMqFGCVpsF6g8wXfJzQUHvu1no3+rRRSFcSV2nKeYvNPLD2J4b08jYBDhHUjeH0ygIl9w==} hasBin: true + unbox-primitive@1.1.0: + resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} + engines: {node: '>= 0.4'} + uncrypto@0.1.3: resolution: {integrity: sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==} undici-types@6.21.0: resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} - undici@7.16.0: - resolution: {integrity: sha512-QEg3HPMll0o3t2ourKwOeUAZ159Kn9mx5pnzHRQO8+Wixmh88YdZRiIwat0iNzNNXn0yoEtXJqFpyW7eM8BV7g==} + undici@7.22.0: + resolution: {integrity: sha512-RqslV2Us5BrllB+JeiZnK4peryVTndy9Dnqq62S3yYRRTj0tFQCwEniUy2167skdGOy3vqRzEvl1Dm4sV2ReDg==} engines: {node: '>=20.18.1'} unicorn-magic@0.1.0: @@ -5019,12 +4981,12 @@ packages: resolution: {integrity: sha512-6bc58dPYhCMHHuwxldQxO3RRNZ4eCogZ/st++0+fcC1nr0jiGUtAdBJ2qzmLQWSxbtz42pWt4QQMiZ9HvZf5cg==} engines: {node: '>=0.10.0'} - unplugin@2.3.10: - resolution: {integrity: sha512-6NCPkv1ClwH+/BGE9QeoTIl09nuiAt0gS28nn1PvYXsGKRwM2TCbFA2QiilmehPDTXIe684k4rZI1yl3A1PCUw==} + unplugin@2.3.11: + resolution: {integrity: sha512-5uKD0nqiYVzlmCRs01Fhs2BdkEgBS3SAVP6ndrBsuK42iC2+JHyxM05Rm9G8+5mkmRtzMZGY8Ct5+mliZxU/Ww==} engines: {node: '>=18.12.0'} - unstorage@1.17.2: - resolution: {integrity: sha512-cKEsD6iBWJgOMJ6vW1ID/SYuqNf8oN4yqRk8OYqaVQ3nnkJXOT1PSpaMh2QfzLs78UN5kSNRD2c/mgjT8tX7+w==} + unstorage@1.17.4: + resolution: {integrity: sha512-fHK0yNg38tBiJKp/Vgsq4j0JEsCmgqH58HAn707S7zGkArbZsVr/CwINoi+nh3h98BRCwKvx1K3Xg9u3VV83sw==} peerDependencies: '@azure/app-configuration': ^1.8.0 '@azure/cosmos': ^4.2.0 @@ -5032,14 +4994,14 @@ packages: '@azure/identity': ^4.6.0 '@azure/keyvault-secrets': ^4.9.0 '@azure/storage-blob': ^12.26.0 - '@capacitor/preferences': ^6.0.3 || ^7.0.0 + '@capacitor/preferences': ^6 || ^7 || ^8 '@deno/kv': '>=0.9.0' '@netlify/blobs': ^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0 '@planetscale/database': ^1.19.0 '@upstash/redis': ^1.34.3 '@vercel/blob': '>=0.27.1' '@vercel/functions': ^2.2.12 || ^3.0.0 - '@vercel/kv': ^1.0.1 + '@vercel/kv': ^1 || ^2 || ^3 aws4fetch: ^1.0.20 db0: '>=0.2.1' idb-keyval: ^6.2.1 @@ -5089,8 +5051,8 @@ packages: resolution: {integrity: sha512-4luGP9LMYszMRZwsvyUd9MrxgEGZdZuZgpVQHEEX0lCYFESasVRvZd0EYpCkOIbJKHMuv0LskpXc/8Un+MJzEQ==} hasBin: true - update-browserslist-db@1.1.4: - resolution: {integrity: sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==} + update-browserslist-db@1.2.3: + resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' @@ -5116,6 +5078,10 @@ packages: resolution: {integrity: sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==} hasBin: true + uuid@13.0.0: + resolution: {integrity: sha512-XQegIaBTVUjSHliKqcnFqYypAd4S+WCYt5NIeRs6w/UAry7z8Y9j5ZwRRL4kzq9U3sD6v+85er9FvkEaBpji2w==} + hasBin: true + validate-npm-package-license@3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} @@ -5123,9 +5089,6 @@ packages: resolution: {integrity: sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - varint@6.0.0: - resolution: {integrity: sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==} - vary@1.1.2: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} @@ -5143,8 +5106,8 @@ packages: vite: optional: true - vite@7.2.2: - resolution: {integrity: sha512-BxAKBWmIbrDgrokdGZH1IgkIk/5mMHDreLDmCJ0qpyJaAteP8NvMhkwr/ZCQNqNH97bw/dANTE9PDzqwJghfMQ==} + vite@7.3.1: + resolution: {integrity: sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -5183,10 +5146,10 @@ packages: yaml: optional: true - vitefu@1.1.1: - resolution: {integrity: sha512-B/Fegf3i8zh0yFbpzZ21amWzHmuNlLlmJT6n7bu5e+pCHUKQIfXSYokrqOBGEMMe9UG2sostKQF9mml/vYaWJQ==} + vitefu@1.1.2: + resolution: {integrity: sha512-zpKATdUbzbsycPFBN71nS2uzBUQiVnFoOrr2rvqv34S1lcAgMKKkjWleLGeiJlZ8lwCXvtWaRn7R3ZC16SYRuw==} peerDependencies: - vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0 + vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-beta.0 peerDependenciesMeta: vite: optional: true @@ -5233,8 +5196,8 @@ packages: webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - webidl-conversions@8.0.0: - resolution: {integrity: sha512-n4W4YFyz5JzOfQeA8oN7dUYpR+MBP3PIUsn2jLjWXwK5ASUzt0Jc/A5sAUZoCYFJRGF0FBKJ+1JjN43rNdsQzA==} + webidl-conversions@8.0.1: + resolution: {integrity: sha512-BMhLD/Sw+GbJC21C/UgyaZX41nPt8bUTg+jWyDeg7e7YN4xOM05YPSIXceACnXVtqyEw/LMClUQMtMZ+PGGpqQ==} engines: {node: '>=20'} webpack-virtual-modules@0.6.2: @@ -5243,11 +5206,16 @@ packages: whatwg-encoding@3.1.1: resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} engines: {node: '>=18'} + deprecated: Use @exodus/bytes instead for a more spec-conformant and faster implementation whatwg-mimetype@4.0.0: resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} engines: {node: '>=18'} + whatwg-mimetype@5.0.0: + resolution: {integrity: sha512-sXcNcHOC51uPGF0P/D4NVtrkjSU2fNsm9iog4ZvZJsL3rjoDAzXZhkm2MWt1y+PUdggKAYVoMAIYcs78wJ51Cw==} + engines: {node: '>=20'} + whatwg-url@15.1.0: resolution: {integrity: sha512-2ytDk0kiEj/yu90JOAp44PVPUkO9+jVhyf+SybKlRHSDlvOOZhdPIrr7xTH64l4WixO2cP+wQIcgujkGBPPz6g==} engines: {node: '>=20'} @@ -5258,7 +5226,23 @@ packages: when-exit@2.1.5: resolution: {integrity: sha512-VGkKJ564kzt6Ms1dbgPP/yuIoQCrsFAnRbptpC5wOEsDaNsbCB2bnfnaA8i/vRs5tjUSEOtIuvl9/MyVsvQZCg==} - which@2.0.2: + which-boxed-primitive@1.1.1: + resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} + engines: {node: '>= 0.4'} + + which-builtin-type@1.2.1: + resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} + engines: {node: '>= 0.4'} + + which-collection@1.0.2: + resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} + engines: {node: '>= 0.4'} + + which-typed-array@1.1.20: + resolution: {integrity: sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg==} + engines: {node: '>= 0.4'} + + which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} hasBin: true @@ -5272,8 +5256,8 @@ packages: resolution: {integrity: sha512-8drMJ4rkgaPo1Me4zD/3WLfI/zPdA9o2IipKODunnGDcuqbHwjsbB79ylv04LCGGzU0xQ6vTznOMpQGaLhhm6A==} engines: {node: '>= 12.0.0'} - winston@3.18.3: - resolution: {integrity: sha512-NoBZauFNNWENgsnC9YpgyYwOVrl2m58PpQ8lNHjV3kosGs7KJ7Npk9pCUE+WJlawVSe8mykWDKWFSVfs3QO9ww==} + winston@3.19.0: + resolution: {integrity: sha512-LZNJgPzfKR+/J3cHkxcpHKpKKvGfDZVPS4hfJCc4cCG0CgYzvlD6yE/S3CIL/Yt91ak327YCpiF/0MyeZHEHKA==} engines: {node: '>= 12.0.0'} wrap-ansi@7.0.0: @@ -5291,8 +5275,8 @@ packages: resolution: {integrity: sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - ws@8.17.1: - resolution: {integrity: sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==} + ws@8.18.3: + resolution: {integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -5303,8 +5287,8 @@ packages: utf-8-validate: optional: true - ws@8.18.3: - resolution: {integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==} + ws@8.19.0: + resolution: {integrity: sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -5319,9 +5303,9 @@ packages: resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==} engines: {node: '>=18'} - xmlbuilder2@3.1.1: - resolution: {integrity: sha512-WCSfbfZnQDdLQLiMdGUQpMxxckeQ4oZNMNhLVkcekTu7xhD4tuUDyAPoY8CwXvBYE6LwBHd6QW2WZXlOWr1vCw==} - engines: {node: '>=12.0'} + xmlbuilder2@4.0.3: + resolution: {integrity: sha512-bx8Q1STctnNaaDymWnkfQLKofs0mGNN7rLLapJlGuV3VlvegD7Ls4ggMjE3aUSWItCCzU0PEv45lI87iSigiCA==} + engines: {node: '>=20.0'} xmlchars@2.2.0: resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} @@ -5342,8 +5326,8 @@ packages: resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==} engines: {node: '>=18'} - yaml@2.8.1: - resolution: {integrity: sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==} + yaml@2.8.2: + resolution: {integrity: sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==} engines: {node: '>= 14.6'} hasBin: true @@ -5373,454 +5357,56 @@ packages: zod@3.25.76: resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} - zod@4.1.12: - resolution: {integrity: sha512-JInaHOamG8pt5+Ey8kGmdcAcg3OL9reK8ltczgHTAwNhMys/6ThXHityHxVV2p3fkw/c+MAvBHFVYHFZDmjMCQ==} + zod@4.3.6: + resolution: {integrity: sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==} snapshots: - '@acemir/cssom@0.9.23': {} + '@acemir/cssom@0.9.31': {} - '@asamuzakjp/css-color@4.0.5': + '@asamuzakjp/css-color@4.1.2': dependencies: - '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) - '@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) - '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) - '@csstools/css-tokenizer': 3.0.4 - lru-cache: 11.2.2 + '@csstools/css-calc': 3.1.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-color-parser': 4.0.2(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) + '@csstools/css-tokenizer': 4.0.0 + lru-cache: 11.2.6 - '@asamuzakjp/dom-selector@6.7.4': + '@asamuzakjp/dom-selector@6.8.1': dependencies: '@asamuzakjp/nwsapi': 2.3.9 bidi-js: 1.0.3 css-tree: 3.1.0 is-potential-custom-element-name: 1.0.1 - lru-cache: 11.2.2 + lru-cache: 11.2.6 '@asamuzakjp/nwsapi@2.3.9': {} - '@aws-crypto/sha256-browser@5.2.0': - dependencies: - '@aws-crypto/sha256-js': 5.2.0 - '@aws-crypto/supports-web-crypto': 5.2.0 - '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.957.0 - '@aws-sdk/util-locate-window': 3.957.0 - '@smithy/util-utf8': 2.3.0 - tslib: 2.8.1 - - '@aws-crypto/sha256-js@5.2.0': - dependencies: - '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.957.0 - tslib: 2.8.1 - - '@aws-crypto/supports-web-crypto@5.2.0': - dependencies: - tslib: 2.8.1 - - '@aws-crypto/util@5.2.0': - dependencies: - '@aws-sdk/types': 3.957.0 - '@smithy/util-utf8': 2.3.0 - tslib: 2.8.1 - - '@aws-sdk/client-sesv2@3.962.0': - dependencies: - '@aws-crypto/sha256-browser': 5.2.0 - '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.957.0 - '@aws-sdk/credential-provider-node': 3.962.0 - '@aws-sdk/middleware-host-header': 3.957.0 - '@aws-sdk/middleware-logger': 3.957.0 - '@aws-sdk/middleware-recursion-detection': 3.957.0 - '@aws-sdk/middleware-user-agent': 3.957.0 - '@aws-sdk/region-config-resolver': 3.957.0 - '@aws-sdk/signature-v4-multi-region': 3.957.0 - '@aws-sdk/types': 3.957.0 - '@aws-sdk/util-endpoints': 3.957.0 - '@aws-sdk/util-user-agent-browser': 3.957.0 - '@aws-sdk/util-user-agent-node': 3.957.0 - '@smithy/config-resolver': 4.4.5 - '@smithy/core': 3.20.0 - '@smithy/fetch-http-handler': 5.3.8 - '@smithy/hash-node': 4.2.7 - '@smithy/invalid-dependency': 4.2.7 - '@smithy/middleware-content-length': 4.2.7 - '@smithy/middleware-endpoint': 4.4.1 - '@smithy/middleware-retry': 4.4.17 - '@smithy/middleware-serde': 4.2.8 - '@smithy/middleware-stack': 4.2.7 - '@smithy/node-config-provider': 4.3.7 - '@smithy/node-http-handler': 4.4.7 - '@smithy/protocol-http': 5.3.7 - '@smithy/smithy-client': 4.10.2 - '@smithy/types': 4.11.0 - '@smithy/url-parser': 4.2.7 - '@smithy/util-base64': 4.3.0 - '@smithy/util-body-length-browser': 4.2.0 - '@smithy/util-body-length-node': 4.2.1 - '@smithy/util-defaults-mode-browser': 4.3.16 - '@smithy/util-defaults-mode-node': 4.2.19 - '@smithy/util-endpoints': 3.2.7 - '@smithy/util-middleware': 4.2.7 - '@smithy/util-retry': 4.2.7 - '@smithy/util-utf8': 4.2.0 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - - '@aws-sdk/client-sso@3.958.0': - dependencies: - '@aws-crypto/sha256-browser': 5.2.0 - '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.957.0 - '@aws-sdk/middleware-host-header': 3.957.0 - '@aws-sdk/middleware-logger': 3.957.0 - '@aws-sdk/middleware-recursion-detection': 3.957.0 - '@aws-sdk/middleware-user-agent': 3.957.0 - '@aws-sdk/region-config-resolver': 3.957.0 - '@aws-sdk/types': 3.957.0 - '@aws-sdk/util-endpoints': 3.957.0 - '@aws-sdk/util-user-agent-browser': 3.957.0 - '@aws-sdk/util-user-agent-node': 3.957.0 - '@smithy/config-resolver': 4.4.5 - '@smithy/core': 3.20.0 - '@smithy/fetch-http-handler': 5.3.8 - '@smithy/hash-node': 4.2.7 - '@smithy/invalid-dependency': 4.2.7 - '@smithy/middleware-content-length': 4.2.7 - '@smithy/middleware-endpoint': 4.4.1 - '@smithy/middleware-retry': 4.4.17 - '@smithy/middleware-serde': 4.2.8 - '@smithy/middleware-stack': 4.2.7 - '@smithy/node-config-provider': 4.3.7 - '@smithy/node-http-handler': 4.4.7 - '@smithy/protocol-http': 5.3.7 - '@smithy/smithy-client': 4.10.2 - '@smithy/types': 4.11.0 - '@smithy/url-parser': 4.2.7 - '@smithy/util-base64': 4.3.0 - '@smithy/util-body-length-browser': 4.2.0 - '@smithy/util-body-length-node': 4.2.1 - '@smithy/util-defaults-mode-browser': 4.3.16 - '@smithy/util-defaults-mode-node': 4.2.19 - '@smithy/util-endpoints': 3.2.7 - '@smithy/util-middleware': 4.2.7 - '@smithy/util-retry': 4.2.7 - '@smithy/util-utf8': 4.2.0 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - - '@aws-sdk/core@3.957.0': - dependencies: - '@aws-sdk/types': 3.957.0 - '@aws-sdk/xml-builder': 3.957.0 - '@smithy/core': 3.20.0 - '@smithy/node-config-provider': 4.3.7 - '@smithy/property-provider': 4.2.7 - '@smithy/protocol-http': 5.3.7 - '@smithy/signature-v4': 5.3.7 - '@smithy/smithy-client': 4.10.2 - '@smithy/types': 4.11.0 - '@smithy/util-base64': 4.3.0 - '@smithy/util-middleware': 4.2.7 - '@smithy/util-utf8': 4.2.0 - tslib: 2.8.1 - - '@aws-sdk/credential-provider-env@3.957.0': - dependencies: - '@aws-sdk/core': 3.957.0 - '@aws-sdk/types': 3.957.0 - '@smithy/property-provider': 4.2.7 - '@smithy/types': 4.11.0 - tslib: 2.8.1 - - '@aws-sdk/credential-provider-http@3.957.0': - dependencies: - '@aws-sdk/core': 3.957.0 - '@aws-sdk/types': 3.957.0 - '@smithy/fetch-http-handler': 5.3.8 - '@smithy/node-http-handler': 4.4.7 - '@smithy/property-provider': 4.2.7 - '@smithy/protocol-http': 5.3.7 - '@smithy/smithy-client': 4.10.2 - '@smithy/types': 4.11.0 - '@smithy/util-stream': 4.5.8 - tslib: 2.8.1 - - '@aws-sdk/credential-provider-ini@3.962.0': - dependencies: - '@aws-sdk/core': 3.957.0 - '@aws-sdk/credential-provider-env': 3.957.0 - '@aws-sdk/credential-provider-http': 3.957.0 - '@aws-sdk/credential-provider-login': 3.962.0 - '@aws-sdk/credential-provider-process': 3.957.0 - '@aws-sdk/credential-provider-sso': 3.958.0 - '@aws-sdk/credential-provider-web-identity': 3.958.0 - '@aws-sdk/nested-clients': 3.958.0 - '@aws-sdk/types': 3.957.0 - '@smithy/credential-provider-imds': 4.2.7 - '@smithy/property-provider': 4.2.7 - '@smithy/shared-ini-file-loader': 4.4.2 - '@smithy/types': 4.11.0 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - - '@aws-sdk/credential-provider-login@3.962.0': - dependencies: - '@aws-sdk/core': 3.957.0 - '@aws-sdk/nested-clients': 3.958.0 - '@aws-sdk/types': 3.957.0 - '@smithy/property-provider': 4.2.7 - '@smithy/protocol-http': 5.3.7 - '@smithy/shared-ini-file-loader': 4.4.2 - '@smithy/types': 4.11.0 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - - '@aws-sdk/credential-provider-node@3.962.0': - dependencies: - '@aws-sdk/credential-provider-env': 3.957.0 - '@aws-sdk/credential-provider-http': 3.957.0 - '@aws-sdk/credential-provider-ini': 3.962.0 - '@aws-sdk/credential-provider-process': 3.957.0 - '@aws-sdk/credential-provider-sso': 3.958.0 - '@aws-sdk/credential-provider-web-identity': 3.958.0 - '@aws-sdk/types': 3.957.0 - '@smithy/credential-provider-imds': 4.2.7 - '@smithy/property-provider': 4.2.7 - '@smithy/shared-ini-file-loader': 4.4.2 - '@smithy/types': 4.11.0 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - - '@aws-sdk/credential-provider-process@3.957.0': - dependencies: - '@aws-sdk/core': 3.957.0 - '@aws-sdk/types': 3.957.0 - '@smithy/property-provider': 4.2.7 - '@smithy/shared-ini-file-loader': 4.4.2 - '@smithy/types': 4.11.0 - tslib: 2.8.1 - - '@aws-sdk/credential-provider-sso@3.958.0': - dependencies: - '@aws-sdk/client-sso': 3.958.0 - '@aws-sdk/core': 3.957.0 - '@aws-sdk/token-providers': 3.958.0 - '@aws-sdk/types': 3.957.0 - '@smithy/property-provider': 4.2.7 - '@smithy/shared-ini-file-loader': 4.4.2 - '@smithy/types': 4.11.0 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - - '@aws-sdk/credential-provider-web-identity@3.958.0': - dependencies: - '@aws-sdk/core': 3.957.0 - '@aws-sdk/nested-clients': 3.958.0 - '@aws-sdk/types': 3.957.0 - '@smithy/property-provider': 4.2.7 - '@smithy/shared-ini-file-loader': 4.4.2 - '@smithy/types': 4.11.0 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - - '@aws-sdk/middleware-host-header@3.957.0': - dependencies: - '@aws-sdk/types': 3.957.0 - '@smithy/protocol-http': 5.3.7 - '@smithy/types': 4.11.0 - tslib: 2.8.1 - - '@aws-sdk/middleware-logger@3.957.0': - dependencies: - '@aws-sdk/types': 3.957.0 - '@smithy/types': 4.11.0 - tslib: 2.8.1 - - '@aws-sdk/middleware-recursion-detection@3.957.0': - dependencies: - '@aws-sdk/types': 3.957.0 - '@aws/lambda-invoke-store': 0.2.2 - '@smithy/protocol-http': 5.3.7 - '@smithy/types': 4.11.0 - tslib: 2.8.1 - - '@aws-sdk/middleware-sdk-s3@3.957.0': - dependencies: - '@aws-sdk/core': 3.957.0 - '@aws-sdk/types': 3.957.0 - '@aws-sdk/util-arn-parser': 3.957.0 - '@smithy/core': 3.20.0 - '@smithy/node-config-provider': 4.3.7 - '@smithy/protocol-http': 5.3.7 - '@smithy/signature-v4': 5.3.7 - '@smithy/smithy-client': 4.10.2 - '@smithy/types': 4.11.0 - '@smithy/util-config-provider': 4.2.0 - '@smithy/util-middleware': 4.2.7 - '@smithy/util-stream': 4.5.8 - '@smithy/util-utf8': 4.2.0 - tslib: 2.8.1 - - '@aws-sdk/middleware-user-agent@3.957.0': - dependencies: - '@aws-sdk/core': 3.957.0 - '@aws-sdk/types': 3.957.0 - '@aws-sdk/util-endpoints': 3.957.0 - '@smithy/core': 3.20.0 - '@smithy/protocol-http': 5.3.7 - '@smithy/types': 4.11.0 - tslib: 2.8.1 - - '@aws-sdk/nested-clients@3.958.0': - dependencies: - '@aws-crypto/sha256-browser': 5.2.0 - '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.957.0 - '@aws-sdk/middleware-host-header': 3.957.0 - '@aws-sdk/middleware-logger': 3.957.0 - '@aws-sdk/middleware-recursion-detection': 3.957.0 - '@aws-sdk/middleware-user-agent': 3.957.0 - '@aws-sdk/region-config-resolver': 3.957.0 - '@aws-sdk/types': 3.957.0 - '@aws-sdk/util-endpoints': 3.957.0 - '@aws-sdk/util-user-agent-browser': 3.957.0 - '@aws-sdk/util-user-agent-node': 3.957.0 - '@smithy/config-resolver': 4.4.5 - '@smithy/core': 3.20.0 - '@smithy/fetch-http-handler': 5.3.8 - '@smithy/hash-node': 4.2.7 - '@smithy/invalid-dependency': 4.2.7 - '@smithy/middleware-content-length': 4.2.7 - '@smithy/middleware-endpoint': 4.4.1 - '@smithy/middleware-retry': 4.4.17 - '@smithy/middleware-serde': 4.2.8 - '@smithy/middleware-stack': 4.2.7 - '@smithy/node-config-provider': 4.3.7 - '@smithy/node-http-handler': 4.4.7 - '@smithy/protocol-http': 5.3.7 - '@smithy/smithy-client': 4.10.2 - '@smithy/types': 4.11.0 - '@smithy/url-parser': 4.2.7 - '@smithy/util-base64': 4.3.0 - '@smithy/util-body-length-browser': 4.2.0 - '@smithy/util-body-length-node': 4.2.1 - '@smithy/util-defaults-mode-browser': 4.3.16 - '@smithy/util-defaults-mode-node': 4.2.19 - '@smithy/util-endpoints': 3.2.7 - '@smithy/util-middleware': 4.2.7 - '@smithy/util-retry': 4.2.7 - '@smithy/util-utf8': 4.2.0 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - - '@aws-sdk/region-config-resolver@3.957.0': - dependencies: - '@aws-sdk/types': 3.957.0 - '@smithy/config-resolver': 4.4.5 - '@smithy/node-config-provider': 4.3.7 - '@smithy/types': 4.11.0 - tslib: 2.8.1 - - '@aws-sdk/signature-v4-multi-region@3.957.0': - dependencies: - '@aws-sdk/middleware-sdk-s3': 3.957.0 - '@aws-sdk/types': 3.957.0 - '@smithy/protocol-http': 5.3.7 - '@smithy/signature-v4': 5.3.7 - '@smithy/types': 4.11.0 - tslib: 2.8.1 - - '@aws-sdk/token-providers@3.958.0': - dependencies: - '@aws-sdk/core': 3.957.0 - '@aws-sdk/nested-clients': 3.958.0 - '@aws-sdk/types': 3.957.0 - '@smithy/property-provider': 4.2.7 - '@smithy/shared-ini-file-loader': 4.4.2 - '@smithy/types': 4.11.0 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - - '@aws-sdk/types@3.957.0': - dependencies: - '@smithy/types': 4.11.0 - tslib: 2.8.1 - - '@aws-sdk/util-arn-parser@3.957.0': - dependencies: - tslib: 2.8.1 - - '@aws-sdk/util-endpoints@3.957.0': - dependencies: - '@aws-sdk/types': 3.957.0 - '@smithy/types': 4.11.0 - '@smithy/url-parser': 4.2.7 - '@smithy/util-endpoints': 3.2.7 - tslib: 2.8.1 - - '@aws-sdk/util-locate-window@3.957.0': - dependencies: - tslib: 2.8.1 - - '@aws-sdk/util-user-agent-browser@3.957.0': - dependencies: - '@aws-sdk/types': 3.957.0 - '@smithy/types': 4.11.0 - bowser: 2.13.1 - tslib: 2.8.1 - - '@aws-sdk/util-user-agent-node@3.957.0': - dependencies: - '@aws-sdk/middleware-user-agent': 3.957.0 - '@aws-sdk/types': 3.957.0 - '@smithy/node-config-provider': 4.3.7 - '@smithy/types': 4.11.0 - tslib: 2.8.1 - - '@aws-sdk/xml-builder@3.957.0': - dependencies: - '@smithy/types': 4.11.0 - fast-xml-parser: 5.2.5 - tslib: 2.8.1 - - '@aws/lambda-invoke-store@0.2.2': {} - - '@babel/code-frame@7.26.2': + '@babel/code-frame@7.27.1': dependencies: '@babel/helper-validator-identifier': 7.28.5 js-tokens: 4.0.0 picocolors: 1.1.1 - '@babel/code-frame@7.27.1': + '@babel/code-frame@7.29.0': dependencies: '@babel/helper-validator-identifier': 7.28.5 js-tokens: 4.0.0 picocolors: 1.1.1 - '@babel/compat-data@7.28.5': {} + '@babel/compat-data@7.29.0': {} - '@babel/core@7.28.5': + '@babel/core@7.29.0': dependencies: - '@babel/code-frame': 7.27.1 - '@babel/generator': 7.28.5 - '@babel/helper-compilation-targets': 7.27.2 - '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.5) - '@babel/helpers': 7.28.4 - '@babel/parser': 7.28.5 - '@babel/template': 7.27.2 - '@babel/traverse': 7.28.5 - '@babel/types': 7.28.5 + '@babel/code-frame': 7.29.0 + '@babel/generator': 7.29.1 + '@babel/helper-compilation-targets': 7.28.6 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) + '@babel/helpers': 7.28.6 + '@babel/parser': 7.29.0 + '@babel/template': 7.28.6 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 '@jridgewell/remapping': 2.3.5 convert-source-map: 2.0.0 debug: 4.4.3 @@ -5830,85 +5416,41 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/generator@7.28.5': + '@babel/generator@7.29.1': dependencies: - '@babel/parser': 7.28.5 - '@babel/types': 7.28.5 + '@babel/parser': 7.29.0 + '@babel/types': 7.29.0 '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.31 jsesc: 3.1.0 - '@babel/helper-annotate-as-pure@7.27.3': - dependencies: - '@babel/types': 7.28.5 - - '@babel/helper-compilation-targets@7.27.2': + '@babel/helper-compilation-targets@7.28.6': dependencies: - '@babel/compat-data': 7.28.5 + '@babel/compat-data': 7.29.0 '@babel/helper-validator-option': 7.27.1 - browserslist: 4.28.0 + browserslist: 4.28.1 lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-create-class-features-plugin@7.28.5(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-member-expression-to-functions': 7.28.5 - '@babel/helper-optimise-call-expression': 7.27.1 - '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.5) - '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/traverse': 7.28.5 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - '@babel/helper-globals@7.28.0': {} - '@babel/helper-member-expression-to-functions@7.28.5': - dependencies: - '@babel/traverse': 7.28.5 - '@babel/types': 7.28.5 - transitivePeerDependencies: - - supports-color - - '@babel/helper-module-imports@7.27.1': + '@babel/helper-module-imports@7.28.6': dependencies: - '@babel/traverse': 7.28.5 - '@babel/types': 7.28.5 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.28.3(@babel/core@7.28.5)': + '@babel/helper-module-transforms@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 - '@babel/helper-module-imports': 7.27.1 + '@babel/core': 7.29.0 + '@babel/helper-module-imports': 7.28.6 '@babel/helper-validator-identifier': 7.28.5 - '@babel/traverse': 7.28.5 + '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color - '@babel/helper-optimise-call-expression@7.27.1': - dependencies: - '@babel/types': 7.28.5 - - '@babel/helper-plugin-utils@7.27.1': {} - - '@babel/helper-replace-supers@7.27.1(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-member-expression-to-functions': 7.28.5 - '@babel/helper-optimise-call-expression': 7.27.1 - '@babel/traverse': 7.28.5 - transitivePeerDependencies: - - supports-color - - '@babel/helper-skip-transparent-expression-wrappers@7.27.1': - dependencies: - '@babel/traverse': 7.28.5 - '@babel/types': 7.28.5 - transitivePeerDependencies: - - supports-color + '@babel/helper-plugin-utils@7.28.6': {} '@babel/helper-string-parser@7.27.1': {} @@ -5916,158 +5458,125 @@ snapshots: '@babel/helper-validator-option@7.27.1': {} - '@babel/helpers@7.28.4': - dependencies: - '@babel/template': 7.27.2 - '@babel/types': 7.28.5 - - '@babel/parser@7.28.5': - dependencies: - '@babel/types': 7.28.5 - - '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.28.5)': + '@babel/helpers@7.28.6': dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/template': 7.28.6 + '@babel/types': 7.29.0 - '@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.28.5)': + '@babel/parser@7.29.0': dependencies: - '@babel/core': 7.28.5 - '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.5) - '@babel/helper-plugin-utils': 7.27.1 - transitivePeerDependencies: - - supports-color + '@babel/types': 7.29.0 - '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.28.5)': + '@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.28.5)': + '@babel/plugin-syntax-typescript@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-typescript@7.28.5(@babel/core@7.28.5)': + '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 - '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-create-class-features-plugin': 7.28.5(@babel/core@7.28.5) - '@babel/helper-plugin-utils': 7.27.1 - '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.5) - transitivePeerDependencies: - - supports-color + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 - '@babel/preset-typescript@7.28.5(@babel/core@7.28.5)': + '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - '@babel/helper-validator-option': 7.27.1 - '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-typescript': 7.28.5(@babel/core@7.28.5) - transitivePeerDependencies: - - supports-color + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 - '@babel/runtime@7.28.4': {} + '@babel/runtime@7.28.6': {} - '@babel/template@7.27.2': + '@babel/template@7.28.6': dependencies: - '@babel/code-frame': 7.27.1 - '@babel/parser': 7.28.5 - '@babel/types': 7.28.5 + '@babel/code-frame': 7.29.0 + '@babel/parser': 7.29.0 + '@babel/types': 7.29.0 - '@babel/traverse@7.28.5': + '@babel/traverse@7.29.0': dependencies: - '@babel/code-frame': 7.27.1 - '@babel/generator': 7.28.5 + '@babel/code-frame': 7.29.0 + '@babel/generator': 7.29.1 '@babel/helper-globals': 7.28.0 - '@babel/parser': 7.28.5 - '@babel/template': 7.27.2 - '@babel/types': 7.28.5 + '@babel/parser': 7.29.0 + '@babel/template': 7.28.6 + '@babel/types': 7.29.0 debug: 4.4.3 transitivePeerDependencies: - supports-color - '@babel/types@7.28.5': + '@babel/types@7.29.0': dependencies: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.28.5 - '@biomejs/biome@2.2.4': + '@biomejs/biome@2.4.4': optionalDependencies: - '@biomejs/cli-darwin-arm64': 2.2.4 - '@biomejs/cli-darwin-x64': 2.2.4 - '@biomejs/cli-linux-arm64': 2.2.4 - '@biomejs/cli-linux-arm64-musl': 2.2.4 - '@biomejs/cli-linux-x64': 2.2.4 - '@biomejs/cli-linux-x64-musl': 2.2.4 - '@biomejs/cli-win32-arm64': 2.2.4 - '@biomejs/cli-win32-x64': 2.2.4 + '@biomejs/cli-darwin-arm64': 2.4.4 + '@biomejs/cli-darwin-x64': 2.4.4 + '@biomejs/cli-linux-arm64': 2.4.4 + '@biomejs/cli-linux-arm64-musl': 2.4.4 + '@biomejs/cli-linux-x64': 2.4.4 + '@biomejs/cli-linux-x64-musl': 2.4.4 + '@biomejs/cli-win32-arm64': 2.4.4 + '@biomejs/cli-win32-x64': 2.4.4 - '@biomejs/cli-darwin-arm64@2.2.4': + '@biomejs/cli-darwin-arm64@2.4.4': optional: true - '@biomejs/cli-darwin-x64@2.2.4': + '@biomejs/cli-darwin-x64@2.4.4': optional: true - '@biomejs/cli-linux-arm64-musl@2.2.4': + '@biomejs/cli-linux-arm64-musl@2.4.4': optional: true - '@biomejs/cli-linux-arm64@2.2.4': + '@biomejs/cli-linux-arm64@2.4.4': optional: true - '@biomejs/cli-linux-x64-musl@2.2.4': + '@biomejs/cli-linux-x64-musl@2.4.4': optional: true - '@biomejs/cli-linux-x64@2.2.4': + '@biomejs/cli-linux-x64@2.4.4': optional: true - '@biomejs/cli-win32-arm64@2.2.4': + '@biomejs/cli-win32-arm64@2.4.4': optional: true - '@biomejs/cli-win32-x64@2.2.4': + '@biomejs/cli-win32-x64@2.4.4': optional: true - '@bogeychan/elysia-logger@0.1.10(elysia@1.4.19(@sinclair/typebox@0.34.41)(exact-mirror@0.2.5(@sinclair/typebox@0.34.41))(file-type@21.1.1)(openapi-types@12.1.3)(typescript@5.9.3))(pino@10.3.1)': + '@bogeychan/elysia-logger@0.1.10(elysia@1.4.25(@sinclair/typebox@0.34.48)(exact-mirror@0.2.7(@sinclair/typebox@0.34.48))(file-type@21.3.0)(openapi-types@12.1.3)(typescript@5.9.3))(pino@10.3.1)': dependencies: - elysia: 1.4.19(@sinclair/typebox@0.34.41)(exact-mirror@0.2.5(@sinclair/typebox@0.34.41))(file-type@21.1.1)(openapi-types@12.1.3)(typescript@5.9.3) + elysia: 1.4.25(@sinclair/typebox@0.34.48)(exact-mirror@0.2.7(@sinclair/typebox@0.34.48))(file-type@21.3.0)(openapi-types@12.1.3)(typescript@5.9.3) pino: 10.3.1 - '@borewit/text-codec@0.1.1': {} - - '@bufbuild/protobuf@2.11.0': - optional: true + '@borewit/text-codec@0.2.1': {} '@colors/colors@1.6.0': {} - '@csstools/color-helpers@5.1.0': {} + '@csstools/color-helpers@6.0.2': {} - '@csstools/css-calc@2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)': + '@csstools/css-calc@3.1.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': dependencies: - '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) - '@csstools/css-tokenizer': 3.0.4 + '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) + '@csstools/css-tokenizer': 4.0.0 - '@csstools/css-color-parser@3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)': + '@csstools/css-color-parser@4.0.2(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': dependencies: - '@csstools/color-helpers': 5.1.0 - '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) - '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) - '@csstools/css-tokenizer': 3.0.4 + '@csstools/color-helpers': 6.0.2 + '@csstools/css-calc': 3.1.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) + '@csstools/css-tokenizer': 4.0.0 - '@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4)': + '@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0)': dependencies: - '@csstools/css-tokenizer': 3.0.4 + '@csstools/css-tokenizer': 4.0.0 - '@csstools/css-syntax-patches-for-csstree@1.0.16': {} + '@csstools/css-syntax-patches-for-csstree@1.0.28': {} - '@csstools/css-tokenizer@3.0.4': {} + '@csstools/css-tokenizer@4.0.0': {} '@dabh/diagnostics@2.0.8': dependencies: @@ -6080,15 +5589,15 @@ snapshots: gonzales-pe: 4.3.0 node-source-walk: 7.0.1 - '@elysiajs/eden@1.4.5(elysia@1.4.19(@sinclair/typebox@0.34.41)(exact-mirror@0.2.5(@sinclair/typebox@0.34.41))(file-type@21.1.1)(openapi-types@12.1.3)(typescript@5.9.3))': + '@elysiajs/eden@1.4.8(elysia@1.4.25(@sinclair/typebox@0.34.48)(exact-mirror@0.2.7(@sinclair/typebox@0.34.48))(file-type@21.3.0)(openapi-types@12.1.3)(typescript@5.9.3))': dependencies: - elysia: 1.4.19(@sinclair/typebox@0.34.41)(exact-mirror@0.2.5(@sinclair/typebox@0.34.41))(file-type@21.1.1)(openapi-types@12.1.3)(typescript@5.9.3) + elysia: 1.4.25(@sinclair/typebox@0.34.48)(exact-mirror@0.2.7(@sinclair/typebox@0.34.48))(file-type@21.3.0)(openapi-types@12.1.3)(typescript@5.9.3) - '@elysiajs/openapi@1.4.11(elysia@1.4.19(@sinclair/typebox@0.34.41)(exact-mirror@0.2.5(@sinclair/typebox@0.34.41))(file-type@21.1.1)(openapi-types@12.1.3)(typescript@5.9.3))': + '@elysiajs/openapi@1.4.14(elysia@1.4.25(@sinclair/typebox@0.34.48)(exact-mirror@0.2.7(@sinclair/typebox@0.34.48))(file-type@21.3.0)(openapi-types@12.1.3)(typescript@5.9.3))': dependencies: - elysia: 1.4.19(@sinclair/typebox@0.34.41)(exact-mirror@0.2.5(@sinclair/typebox@0.34.41))(file-type@21.1.1)(openapi-types@12.1.3)(typescript@5.9.3) + elysia: 1.4.25(@sinclair/typebox@0.34.48)(exact-mirror@0.2.7(@sinclair/typebox@0.34.48))(file-type@21.3.0)(openapi-types@12.1.3)(typescript@5.9.3) - '@emnapi/runtime@1.7.1': + '@emnapi/runtime@1.8.1': dependencies: tslib: 2.8.1 optional: true @@ -6098,162 +5607,242 @@ snapshots: '@whatwg-node/promise-helpers': 1.3.2 tslib: 2.8.1 - '@esbuild/aix-ppc64@0.25.11': + '@esbuild/aix-ppc64@0.25.12': optional: true - '@esbuild/aix-ppc64@0.25.12': + '@esbuild/aix-ppc64@0.27.2': optional: true - '@esbuild/android-arm64@0.25.11': + '@esbuild/aix-ppc64@0.27.3': optional: true '@esbuild/android-arm64@0.25.12': optional: true - '@esbuild/android-arm@0.25.11': + '@esbuild/android-arm64@0.27.2': + optional: true + + '@esbuild/android-arm64@0.27.3': optional: true '@esbuild/android-arm@0.25.12': optional: true - '@esbuild/android-x64@0.25.11': + '@esbuild/android-arm@0.27.2': + optional: true + + '@esbuild/android-arm@0.27.3': optional: true '@esbuild/android-x64@0.25.12': optional: true - '@esbuild/darwin-arm64@0.25.11': + '@esbuild/android-x64@0.27.2': + optional: true + + '@esbuild/android-x64@0.27.3': optional: true '@esbuild/darwin-arm64@0.25.12': optional: true - '@esbuild/darwin-x64@0.25.11': + '@esbuild/darwin-arm64@0.27.2': + optional: true + + '@esbuild/darwin-arm64@0.27.3': optional: true '@esbuild/darwin-x64@0.25.12': optional: true - '@esbuild/freebsd-arm64@0.25.11': + '@esbuild/darwin-x64@0.27.2': + optional: true + + '@esbuild/darwin-x64@0.27.3': optional: true '@esbuild/freebsd-arm64@0.25.12': optional: true - '@esbuild/freebsd-x64@0.25.11': + '@esbuild/freebsd-arm64@0.27.2': + optional: true + + '@esbuild/freebsd-arm64@0.27.3': optional: true '@esbuild/freebsd-x64@0.25.12': optional: true - '@esbuild/linux-arm64@0.25.11': + '@esbuild/freebsd-x64@0.27.2': + optional: true + + '@esbuild/freebsd-x64@0.27.3': optional: true '@esbuild/linux-arm64@0.25.12': optional: true - '@esbuild/linux-arm@0.25.11': + '@esbuild/linux-arm64@0.27.2': + optional: true + + '@esbuild/linux-arm64@0.27.3': optional: true '@esbuild/linux-arm@0.25.12': optional: true - '@esbuild/linux-ia32@0.25.11': + '@esbuild/linux-arm@0.27.2': + optional: true + + '@esbuild/linux-arm@0.27.3': optional: true '@esbuild/linux-ia32@0.25.12': optional: true - '@esbuild/linux-loong64@0.25.11': + '@esbuild/linux-ia32@0.27.2': + optional: true + + '@esbuild/linux-ia32@0.27.3': optional: true '@esbuild/linux-loong64@0.25.12': optional: true - '@esbuild/linux-mips64el@0.25.11': + '@esbuild/linux-loong64@0.27.2': + optional: true + + '@esbuild/linux-loong64@0.27.3': optional: true '@esbuild/linux-mips64el@0.25.12': optional: true - '@esbuild/linux-ppc64@0.25.11': + '@esbuild/linux-mips64el@0.27.2': + optional: true + + '@esbuild/linux-mips64el@0.27.3': optional: true '@esbuild/linux-ppc64@0.25.12': optional: true - '@esbuild/linux-riscv64@0.25.11': + '@esbuild/linux-ppc64@0.27.2': + optional: true + + '@esbuild/linux-ppc64@0.27.3': optional: true '@esbuild/linux-riscv64@0.25.12': optional: true - '@esbuild/linux-s390x@0.25.11': + '@esbuild/linux-riscv64@0.27.2': + optional: true + + '@esbuild/linux-riscv64@0.27.3': optional: true '@esbuild/linux-s390x@0.25.12': optional: true - '@esbuild/linux-x64@0.25.11': + '@esbuild/linux-s390x@0.27.2': + optional: true + + '@esbuild/linux-s390x@0.27.3': optional: true '@esbuild/linux-x64@0.25.12': optional: true - '@esbuild/netbsd-arm64@0.25.11': + '@esbuild/linux-x64@0.27.2': + optional: true + + '@esbuild/linux-x64@0.27.3': optional: true '@esbuild/netbsd-arm64@0.25.12': optional: true - '@esbuild/netbsd-x64@0.25.11': + '@esbuild/netbsd-arm64@0.27.2': + optional: true + + '@esbuild/netbsd-arm64@0.27.3': optional: true '@esbuild/netbsd-x64@0.25.12': optional: true - '@esbuild/openbsd-arm64@0.25.11': + '@esbuild/netbsd-x64@0.27.2': + optional: true + + '@esbuild/netbsd-x64@0.27.3': optional: true '@esbuild/openbsd-arm64@0.25.12': optional: true - '@esbuild/openbsd-x64@0.25.11': + '@esbuild/openbsd-arm64@0.27.2': + optional: true + + '@esbuild/openbsd-arm64@0.27.3': optional: true '@esbuild/openbsd-x64@0.25.12': optional: true - '@esbuild/openharmony-arm64@0.25.11': + '@esbuild/openbsd-x64@0.27.2': + optional: true + + '@esbuild/openbsd-x64@0.27.3': optional: true '@esbuild/openharmony-arm64@0.25.12': optional: true - '@esbuild/sunos-x64@0.25.11': + '@esbuild/openharmony-arm64@0.27.2': + optional: true + + '@esbuild/openharmony-arm64@0.27.3': optional: true '@esbuild/sunos-x64@0.25.12': optional: true - '@esbuild/win32-arm64@0.25.11': + '@esbuild/sunos-x64@0.27.2': + optional: true + + '@esbuild/sunos-x64@0.27.3': optional: true '@esbuild/win32-arm64@0.25.12': optional: true - '@esbuild/win32-ia32@0.25.11': + '@esbuild/win32-arm64@0.27.2': + optional: true + + '@esbuild/win32-arm64@0.27.3': optional: true '@esbuild/win32-ia32@0.25.12': optional: true - '@esbuild/win32-x64@0.25.11': + '@esbuild/win32-ia32@0.27.2': + optional: true + + '@esbuild/win32-ia32@0.27.3': optional: true '@esbuild/win32-x64@0.25.12': optional: true + '@esbuild/win32-x64@0.27.2': + optional: true + + '@esbuild/win32-x64@0.27.3': + optional: true + + '@exodus/bytes@1.14.1': {} + '@fastify/accept-negotiator@2.0.1': {} '@fastify/busboy@3.2.0': {} @@ -6348,7 +5937,7 @@ snapshots: '@img/sharp-wasm32@0.34.5': dependencies: - '@emnapi/runtime': 1.7.1 + '@emnapi/runtime': 1.8.1 optional: true '@img/sharp-win32-arm64@0.34.5': @@ -6362,12 +5951,6 @@ snapshots: '@import-maps/resolve@2.0.0': {} - '@isaacs/balanced-match@4.0.1': {} - - '@isaacs/brace-expansion@5.0.0': - dependencies: - '@isaacs/balanced-match': 4.0.1 - '@isaacs/cliui@8.0.2': dependencies: string-width: 5.1.2 @@ -6377,9 +5960,11 @@ snapshots: wrap-ansi: 8.1.0 wrap-ansi-cjs: wrap-ansi@7.0.0 + '@isaacs/cliui@9.0.0': {} + '@isaacs/fs-minipass@4.0.1': dependencies: - minipass: 7.1.2 + minipass: 7.1.3 '@jridgewell/gen-mapping@0.3.13': dependencies: @@ -6400,48 +5985,48 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.5 - '@mapbox/node-pre-gyp@2.0.0': + '@mapbox/node-pre-gyp@2.0.3': dependencies: consola: 3.4.2 detect-libc: 2.1.2 https-proxy-agent: 7.0.6 node-fetch: 2.7.0 nopt: 8.1.0 - semver: 7.7.3 - tar: 7.5.2 + semver: 7.7.4 + tar: 7.5.9 transitivePeerDependencies: - encoding - supports-color - '@netlify/ai@0.3.3(@netlify/api@14.0.10)': + '@netlify/ai@0.3.8': dependencies: - '@netlify/api': 14.0.10 + '@netlify/api': 14.0.14 - '@netlify/api@14.0.10': + '@netlify/api@14.0.14': dependencies: - '@netlify/open-api': 2.43.1 + '@netlify/open-api': 2.49.1 node-fetch: 3.3.2 p-wait-for: 5.0.2 picoquery: 2.5.0 '@netlify/binary-info@1.0.0': {} - '@netlify/blobs@10.3.3': + '@netlify/blobs@10.7.0': dependencies: - '@netlify/dev-utils': 4.3.1 - '@netlify/otel': 4.3.2 - '@netlify/runtime-utils': 2.2.1 + '@netlify/dev-utils': 4.3.3 + '@netlify/otel': 5.1.1 + '@netlify/runtime-utils': 2.3.0 transitivePeerDependencies: - supports-color - '@netlify/cache@3.3.2': + '@netlify/cache@3.3.5': dependencies: - '@netlify/runtime-utils': 2.2.1 + '@netlify/runtime-utils': 2.3.0 - '@netlify/config@23.2.0': + '@netlify/config@24.4.0': dependencies: '@iarna/toml': 2.2.5 - '@netlify/api': 14.0.10 + '@netlify/api': 14.0.14 '@netlify/headers-parser': 9.0.2 '@netlify/redirect-parser': 15.0.3 chalk: 5.6.2 @@ -6462,12 +6047,13 @@ snapshots: read-package-up: 11.0.0 tomlify-j0.4: 3.0.0 validate-npm-package-name: 5.0.1 - yaml: 2.8.1 + yaml: 2.8.2 yargs: 17.7.2 + zod: 4.3.6 - '@netlify/dev-utils@4.3.1': + '@netlify/dev-utils@4.3.3': dependencies: - '@whatwg-node/server': 0.10.17 + '@whatwg-node/server': 0.10.18 ansis: 4.2.0 chokidar: 4.0.3 decache: 4.6.2 @@ -6478,25 +6064,25 @@ snapshots: image-size: 2.0.2 js-image-generator: 1.0.4 parse-gitignore: 2.0.0 - semver: 7.7.3 + semver: 7.7.4 tmp-promise: 3.0.3 - uuid: 11.1.0 + uuid: 13.0.0 write-file-atomic: 5.0.1 - '@netlify/dev@4.8.0(@netlify/api@14.0.10)(rollup@4.53.2)': - dependencies: - '@netlify/ai': 0.3.3(@netlify/api@14.0.10) - '@netlify/blobs': 10.3.3 - '@netlify/config': 23.2.0 - '@netlify/dev-utils': 4.3.1 - '@netlify/edge-functions-dev': 1.0.4 - '@netlify/functions-dev': 1.1.0(rollup@4.53.2) - '@netlify/headers': 2.1.1 - '@netlify/images': 1.3.1(@netlify/blobs@10.3.3) - '@netlify/redirects': 3.1.2 - '@netlify/runtime': 4.1.7 - '@netlify/static': 3.1.1 - ulid: 3.0.1 + '@netlify/dev@4.11.2(rollup@4.59.0)': + dependencies: + '@netlify/ai': 0.3.8 + '@netlify/blobs': 10.7.0 + '@netlify/config': 24.4.0 + '@netlify/dev-utils': 4.3.3 + '@netlify/edge-functions-dev': 1.0.11 + '@netlify/functions-dev': 1.1.12(rollup@4.59.0) + '@netlify/headers': 2.1.3 + '@netlify/images': 1.3.3(@netlify/blobs@10.7.0) + '@netlify/redirects': 3.1.5 + '@netlify/runtime': 4.1.15 + '@netlify/static': 3.1.3 + ulid: 3.0.2 transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -6506,7 +6092,6 @@ snapshots: - '@azure/storage-blob' - '@capacitor/preferences' - '@deno/kv' - - '@netlify/api' - '@planetscale/database' - '@upstash/redis' - '@vercel/blob' @@ -6523,15 +6108,18 @@ snapshots: - supports-color - uploadthing - '@netlify/edge-bundler@14.8.7': + '@netlify/edge-bundler@14.9.10': dependencies: '@import-maps/resolve': 2.0.0 - ajv: 8.17.1 - ajv-errors: 3.0.0(ajv@8.17.1) - better-ajv-errors: 1.2.0(ajv@8.17.1) + '@sveltejs/acorn-typescript': 1.0.9(acorn@8.16.0) + acorn: 8.16.0 + acorn-walk: 8.3.5 + ajv: 8.18.0 + ajv-errors: 3.0.0(ajv@8.18.0) + better-ajv-errors: 1.2.0(ajv@8.18.0) common-path-prefix: 3.0.0 env-paths: 3.0.0 - esbuild: 0.25.11 + esbuild: 0.27.2 execa: 8.0.1 find-up: 7.0.0 get-port: 7.1.0 @@ -6540,33 +6128,33 @@ snapshots: p-wait-for: 5.0.2 parse-imports: 2.2.1 path-key: 4.0.0 - semver: 7.7.3 - tar: 7.5.2 + semver: 7.7.4 + tar: 7.5.9 tmp-promise: 3.0.3 urlpattern-polyfill: 8.0.2 uuid: 11.1.0 '@netlify/edge-functions-bootstrap@2.16.0': {} - '@netlify/edge-functions-dev@1.0.4': + '@netlify/edge-functions-dev@1.0.11': dependencies: - '@netlify/dev-utils': 4.3.1 - '@netlify/edge-bundler': 14.8.7 - '@netlify/edge-functions': 3.0.2 + '@netlify/dev-utils': 4.3.3 + '@netlify/edge-bundler': 14.9.10 + '@netlify/edge-functions': 3.0.3 '@netlify/edge-functions-bootstrap': 2.16.0 - '@netlify/runtime-utils': 2.2.1 + '@netlify/runtime-utils': 2.3.0 get-port: 7.1.0 - '@netlify/edge-functions@3.0.2': + '@netlify/edge-functions@3.0.3': dependencies: - '@netlify/types': 2.2.0 + '@netlify/types': 2.3.0 - '@netlify/functions-dev@1.1.0(rollup@4.53.2)': + '@netlify/functions-dev@1.1.12(rollup@4.59.0)': dependencies: - '@netlify/blobs': 10.3.3 - '@netlify/dev-utils': 4.3.1 - '@netlify/functions': 5.1.0 - '@netlify/zip-it-and-ship-it': 14.1.13(rollup@4.53.2) + '@netlify/blobs': 10.7.0 + '@netlify/dev-utils': 4.3.3 + '@netlify/functions': 5.1.2 + '@netlify/zip-it-and-ship-it': 14.4.0(rollup@4.59.0) cron-parser: 4.9.0 decache: 4.6.2 extract-zip: 2.0.1 @@ -6574,7 +6162,7 @@ snapshots: jwt-decode: 4.0.0 lambda-local: 2.2.0 read-package-up: 11.0.0 - semver: 7.7.3 + semver: 7.7.4 source-map-support: 0.5.21 transitivePeerDependencies: - bare-abort-controller @@ -6583,9 +6171,9 @@ snapshots: - rollup - supports-color - '@netlify/functions@5.1.0': + '@netlify/functions@5.1.2': dependencies: - '@netlify/types': 2.2.0 + '@netlify/types': 2.3.0 '@netlify/headers-parser@9.0.2': dependencies: @@ -6596,13 +6184,13 @@ snapshots: map-obj: 5.0.2 path-exists: 5.0.0 - '@netlify/headers@2.1.1': + '@netlify/headers@2.1.3': dependencies: '@netlify/headers-parser': 9.0.2 - '@netlify/images@1.3.1(@netlify/blobs@10.3.3)': + '@netlify/images@1.3.3(@netlify/blobs@10.7.0)': dependencies: - ipx: 3.1.1(@netlify/blobs@10.3.3) + ipx: 3.1.1(@netlify/blobs@10.7.0) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -6624,14 +6212,13 @@ snapshots: - ioredis - uploadthing - '@netlify/open-api@2.43.1': {} + '@netlify/open-api@2.49.1': {} - '@netlify/otel@4.3.2': + '@netlify/otel@5.1.1': dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-transformer': 0.57.2(@opentelemetry/api@1.9.0) '@opentelemetry/resources': 1.30.1(@opentelemetry/api@1.9.0) '@opentelemetry/sdk-trace-node': 1.30.1(@opentelemetry/api@1.9.0) transitivePeerDependencies: @@ -6644,39 +6231,39 @@ snapshots: is-plain-obj: 4.1.0 path-exists: 5.0.0 - '@netlify/redirects@3.1.2': + '@netlify/redirects@3.1.5': dependencies: - '@netlify/dev-utils': 4.3.1 + '@netlify/dev-utils': 4.3.3 '@netlify/redirect-parser': 15.0.3 - cookie: 1.0.2 - jsonwebtoken: 9.0.2 + cookie: 1.1.1 + jsonwebtoken: 9.0.3 netlify-redirector: 0.5.0 - '@netlify/runtime-utils@2.2.1': {} + '@netlify/runtime-utils@2.3.0': {} - '@netlify/runtime@4.1.7': + '@netlify/runtime@4.1.15': dependencies: - '@netlify/blobs': 10.3.3 - '@netlify/cache': 3.3.2 - '@netlify/runtime-utils': 2.2.1 - '@netlify/types': 2.2.0 + '@netlify/blobs': 10.7.0 + '@netlify/cache': 3.3.5 + '@netlify/runtime-utils': 2.3.0 + '@netlify/types': 2.3.0 transitivePeerDependencies: - supports-color - '@netlify/serverless-functions-api@2.7.1': {} + '@netlify/serverless-functions-api@2.9.0': {} - '@netlify/static@3.1.1': + '@netlify/static@3.1.3': dependencies: - mime-types: 3.0.1 + mime-types: 3.0.2 - '@netlify/types@2.2.0': {} + '@netlify/types@2.3.0': {} - '@netlify/vite-plugin-tanstack-start@1.1.12(@netlify/api@14.0.10)(@tanstack/react-start@1.136.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1)))(rollup@4.53.2)(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1))': + '@netlify/vite-plugin-tanstack-start@1.2.12(@tanstack/react-start@1.162.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(tsx@4.21.0)(yaml@2.8.2)))(rollup@4.59.0)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(tsx@4.21.0)(yaml@2.8.2))': dependencies: - '@netlify/vite-plugin': 2.7.12(@netlify/api@14.0.10)(rollup@4.53.2)(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1)) - vite: 7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1) + '@netlify/vite-plugin': 2.10.2(rollup@4.59.0)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(tsx@4.21.0)(yaml@2.8.2)) + vite: 7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(tsx@4.21.0)(yaml@2.8.2) optionalDependencies: - '@tanstack/react-start': 1.136.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1)) + '@tanstack/react-start': 1.162.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(tsx@4.21.0)(yaml@2.8.2)) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -6686,7 +6273,7 @@ snapshots: - '@azure/storage-blob' - '@capacitor/preferences' - '@deno/kv' - - '@netlify/api' + - '@netlify/db-dev' - '@planetscale/database' - '@upstash/redis' - '@vercel/blob' @@ -6704,12 +6291,12 @@ snapshots: - supports-color - uploadthing - '@netlify/vite-plugin@2.7.12(@netlify/api@14.0.10)(rollup@4.53.2)(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1))': + '@netlify/vite-plugin@2.10.2(rollup@4.59.0)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(tsx@4.21.0)(yaml@2.8.2))': dependencies: - '@netlify/dev': 4.8.0(@netlify/api@14.0.10)(rollup@4.53.2) - '@netlify/dev-utils': 4.3.1 - dedent: 1.7.0 - vite: 7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1) + '@netlify/dev': 4.11.2(rollup@4.59.0) + '@netlify/dev-utils': 4.3.3 + dedent: 1.7.1 + vite: 7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -6719,7 +6306,7 @@ snapshots: - '@azure/storage-blob' - '@capacitor/preferences' - '@deno/kv' - - '@netlify/api' + - '@netlify/db-dev' - '@planetscale/database' - '@upstash/redis' - '@vercel/blob' @@ -6737,18 +6324,18 @@ snapshots: - supports-color - uploadthing - '@netlify/zip-it-and-ship-it@14.1.13(rollup@4.53.2)': + '@netlify/zip-it-and-ship-it@14.4.0(rollup@4.59.0)': dependencies: - '@babel/parser': 7.28.5 - '@babel/types': 7.28.5 + '@babel/parser': 7.29.0 + '@babel/types': 7.29.0 '@netlify/binary-info': 1.0.0 - '@netlify/serverless-functions-api': 2.7.1 - '@vercel/nft': 0.29.4(rollup@4.53.2) + '@netlify/serverless-functions-api': 2.9.0 + '@vercel/nft': 0.29.4(rollup@4.59.0) archiver: 7.0.1 common-path-prefix: 3.0.0 copy-file: 11.1.0 es-module-lexer: 1.7.0 - esbuild: 0.25.11 + esbuild: 0.27.2 execa: 8.0.1 fast-glob: 3.3.3 filter-obj: 6.1.0 @@ -6757,14 +6344,14 @@ snapshots: junk: 4.0.1 locate-path: 7.2.0 merge-options: 3.0.4 - minimatch: 9.0.5 + minimatch: 9.0.6 normalize-path: 3.0.0 p-map: 7.0.4 path-exists: 5.0.0 precinct: 12.2.0 require-package-name: 2.0.1 - resolve: 2.0.0-next.5 - semver: 7.7.3 + resolve: 2.0.0-next.6 + semver: 7.7.4 tmp-promise: 3.0.3 toml: 3.0.0 unixify: 1.0.0 @@ -6814,33 +6401,29 @@ snapshots: '@nodelib/fs.walk@1.2.8': dependencies: '@nodelib/fs.scandir': 2.1.5 - fastq: 1.19.1 + fastq: 1.20.1 - '@oozcitak/dom@1.15.10': + '@oozcitak/dom@2.0.2': dependencies: - '@oozcitak/infra': 1.0.8 - '@oozcitak/url': 1.0.4 - '@oozcitak/util': 8.3.8 + '@oozcitak/infra': 2.0.2 + '@oozcitak/url': 3.0.0 + '@oozcitak/util': 10.0.0 - '@oozcitak/infra@1.0.8': + '@oozcitak/infra@2.0.2': dependencies: - '@oozcitak/util': 8.3.8 + '@oozcitak/util': 10.0.0 - '@oozcitak/url@1.0.4': + '@oozcitak/url@3.0.0': dependencies: - '@oozcitak/infra': 1.0.8 - '@oozcitak/util': 8.3.8 + '@oozcitak/infra': 2.0.2 + '@oozcitak/util': 10.0.0 - '@oozcitak/util@8.3.8': {} + '@oozcitak/util@10.0.0': {} '@opentelemetry/api-logs@0.203.0': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/api-logs@0.57.2': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/api@1.9.0': {} '@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.0)': @@ -6861,17 +6444,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@opentelemetry/otlp-transformer@0.57.2(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/api-logs': 0.57.2 - '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 1.30.1(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-logs': 0.57.2(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-metrics': 1.30.1(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-base': 1.30.1(@opentelemetry/api@1.9.0) - protobufjs: 7.5.4 - '@opentelemetry/propagator-b3@1.30.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -6888,19 +6460,6 @@ snapshots: '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.28.0 - '@opentelemetry/sdk-logs@0.57.2(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/api-logs': 0.57.2 - '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 1.30.1(@opentelemetry/api@1.9.0) - - '@opentelemetry/sdk-metrics@1.30.1(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 1.30.1(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -6916,1007 +6475,310 @@ snapshots: '@opentelemetry/propagator-b3': 1.30.1(@opentelemetry/api@1.9.0) '@opentelemetry/propagator-jaeger': 1.30.1(@opentelemetry/api@1.9.0) '@opentelemetry/sdk-trace-base': 1.30.1(@opentelemetry/api@1.9.0) - semver: 7.7.3 + semver: 7.7.4 '@opentelemetry/semantic-conventions@1.28.0': {} - '@parcel/watcher-android-arm64@2.5.1': - optional: true - - '@parcel/watcher-darwin-arm64@2.5.1': - optional: true - - '@parcel/watcher-darwin-x64@2.5.1': - optional: true - - '@parcel/watcher-freebsd-x64@2.5.1': - optional: true - - '@parcel/watcher-linux-arm-glibc@2.5.1': - optional: true - - '@parcel/watcher-linux-arm-musl@2.5.1': - optional: true - - '@parcel/watcher-linux-arm64-glibc@2.5.1': - optional: true - - '@parcel/watcher-linux-arm64-musl@2.5.1': - optional: true - - '@parcel/watcher-linux-x64-glibc@2.5.1': - optional: true - - '@parcel/watcher-linux-x64-musl@2.5.1': - optional: true - - '@parcel/watcher-wasm@2.5.1': - dependencies: - is-glob: 4.0.3 - micromatch: 4.0.8 - - '@parcel/watcher-win32-arm64@2.5.1': - optional: true - - '@parcel/watcher-win32-ia32@2.5.1': + '@parcel/watcher-android-arm64@2.5.6': optional: true - '@parcel/watcher-win32-x64@2.5.1': + '@parcel/watcher-darwin-arm64@2.5.6': optional: true - '@parcel/watcher@2.5.1': - dependencies: - detect-libc: 1.0.3 - is-glob: 4.0.3 - micromatch: 4.0.8 - node-addon-api: 7.1.1 - optionalDependencies: - '@parcel/watcher-android-arm64': 2.5.1 - '@parcel/watcher-darwin-arm64': 2.5.1 - '@parcel/watcher-darwin-x64': 2.5.1 - '@parcel/watcher-freebsd-x64': 2.5.1 - '@parcel/watcher-linux-arm-glibc': 2.5.1 - '@parcel/watcher-linux-arm-musl': 2.5.1 - '@parcel/watcher-linux-arm64-glibc': 2.5.1 - '@parcel/watcher-linux-arm64-musl': 2.5.1 - '@parcel/watcher-linux-x64-glibc': 2.5.1 - '@parcel/watcher-linux-x64-musl': 2.5.1 - '@parcel/watcher-win32-arm64': 2.5.1 - '@parcel/watcher-win32-ia32': 2.5.1 - '@parcel/watcher-win32-x64': 2.5.1 - - '@pinojs/redact@0.4.0': {} - - '@pkgjs/parseargs@0.11.0': + '@parcel/watcher-darwin-x64@2.5.6': optional: true - '@protobufjs/aspromise@1.1.2': {} - - '@protobufjs/base64@1.1.2': {} - - '@protobufjs/codegen@2.0.4': {} - - '@protobufjs/eventemitter@1.1.0': {} - - '@protobufjs/fetch@1.1.0': - dependencies: - '@protobufjs/aspromise': 1.1.2 - '@protobufjs/inquire': 1.1.0 - - '@protobufjs/float@1.0.2': {} - - '@protobufjs/inquire@1.1.0': {} - - '@protobufjs/path@1.1.2': {} - - '@protobufjs/pool@1.1.0': {} - - '@protobufjs/utf8@1.1.0': {} - - '@react-email/body@0.2.0(react@19.2.0)': - dependencies: - react: 19.2.0 - - '@react-email/button@0.2.0(react@19.2.0)': - dependencies: - react: 19.2.0 - - '@react-email/code-block@0.2.0(react@19.2.0)': - dependencies: - prismjs: 1.30.0 - react: 19.2.0 - - '@react-email/code-inline@0.0.5(react@19.2.0)': - dependencies: - react: 19.2.0 - - '@react-email/column@0.0.13(react@19.2.0)': - dependencies: - react: 19.2.0 - - '@react-email/components@1.0.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': - dependencies: - '@react-email/body': 0.2.0(react@19.2.0) - '@react-email/button': 0.2.0(react@19.2.0) - '@react-email/code-block': 0.2.0(react@19.2.0) - '@react-email/code-inline': 0.0.5(react@19.2.0) - '@react-email/column': 0.0.13(react@19.2.0) - '@react-email/container': 0.0.15(react@19.2.0) - '@react-email/font': 0.0.9(react@19.2.0) - '@react-email/head': 0.0.12(react@19.2.0) - '@react-email/heading': 0.0.15(react@19.2.0) - '@react-email/hr': 0.0.11(react@19.2.0) - '@react-email/html': 0.0.11(react@19.2.0) - '@react-email/img': 0.0.11(react@19.2.0) - '@react-email/link': 0.0.12(react@19.2.0) - '@react-email/markdown': 0.0.17(react@19.2.0) - '@react-email/preview': 0.0.13(react@19.2.0) - '@react-email/render': 2.0.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@react-email/row': 0.0.12(react@19.2.0) - '@react-email/section': 0.0.16(react@19.2.0) - '@react-email/tailwind': 2.0.2(@react-email/body@0.2.0(react@19.2.0))(@react-email/button@0.2.0(react@19.2.0))(@react-email/code-block@0.2.0(react@19.2.0))(@react-email/code-inline@0.0.5(react@19.2.0))(@react-email/container@0.0.15(react@19.2.0))(@react-email/heading@0.0.15(react@19.2.0))(@react-email/hr@0.0.11(react@19.2.0))(@react-email/img@0.0.11(react@19.2.0))(@react-email/link@0.0.12(react@19.2.0))(@react-email/preview@0.0.13(react@19.2.0))(@react-email/text@0.1.5(react@19.2.0))(react@19.2.0) - '@react-email/text': 0.1.5(react@19.2.0) - react: 19.2.0 - transitivePeerDependencies: - - react-dom - - '@react-email/container@0.0.15(react@19.2.0)': - dependencies: - react: 19.2.0 - - '@react-email/font@0.0.9(react@19.2.0)': - dependencies: - react: 19.2.0 - - '@react-email/head@0.0.12(react@19.2.0)': - dependencies: - react: 19.2.0 - - '@react-email/heading@0.0.15(react@19.2.0)': - dependencies: - react: 19.2.0 - - '@react-email/hr@0.0.11(react@19.2.0)': - dependencies: - react: 19.2.0 - - '@react-email/html@0.0.11(react@19.2.0)': - dependencies: - react: 19.2.0 - - '@react-email/img@0.0.11(react@19.2.0)': - dependencies: - react: 19.2.0 - - '@react-email/link@0.0.12(react@19.2.0)': - dependencies: - react: 19.2.0 - - '@react-email/markdown@0.0.17(react@19.2.0)': - dependencies: - marked: 15.0.12 - react: 19.2.0 - - '@react-email/preview-server@5.1.0(@babel/core@7.28.5)(@opentelemetry/api@1.9.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.94.0)': - dependencies: - next: 16.0.10(@babel/core@7.28.5)(@opentelemetry/api@1.9.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.94.0) - transitivePeerDependencies: - - '@babel/core' - - '@opentelemetry/api' - - '@playwright/test' - - babel-plugin-macros - - babel-plugin-react-compiler - - react - - react-dom - - sass - - '@react-email/preview@0.0.13(react@19.2.0)': - dependencies: - react: 19.2.0 - - '@react-email/render@2.0.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': - dependencies: - html-to-text: 9.0.5 - prettier: 3.6.2 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) - - '@react-email/row@0.0.12(react@19.2.0)': - dependencies: - react: 19.2.0 - - '@react-email/section@0.0.16(react@19.2.0)': - dependencies: - react: 19.2.0 - - '@react-email/tailwind@2.0.2(@react-email/body@0.2.0(react@19.2.0))(@react-email/button@0.2.0(react@19.2.0))(@react-email/code-block@0.2.0(react@19.2.0))(@react-email/code-inline@0.0.5(react@19.2.0))(@react-email/container@0.0.15(react@19.2.0))(@react-email/heading@0.0.15(react@19.2.0))(@react-email/hr@0.0.11(react@19.2.0))(@react-email/img@0.0.11(react@19.2.0))(@react-email/link@0.0.12(react@19.2.0))(@react-email/preview@0.0.13(react@19.2.0))(@react-email/text@0.1.5(react@19.2.0))(react@19.2.0)': - dependencies: - '@react-email/text': 0.1.5(react@19.2.0) - react: 19.2.0 - tailwindcss: 4.1.18 - optionalDependencies: - '@react-email/body': 0.2.0(react@19.2.0) - '@react-email/button': 0.2.0(react@19.2.0) - '@react-email/code-block': 0.2.0(react@19.2.0) - '@react-email/code-inline': 0.0.5(react@19.2.0) - '@react-email/container': 0.0.15(react@19.2.0) - '@react-email/heading': 0.0.15(react@19.2.0) - '@react-email/hr': 0.0.11(react@19.2.0) - '@react-email/img': 0.0.11(react@19.2.0) - '@react-email/link': 0.0.12(react@19.2.0) - '@react-email/preview': 0.0.13(react@19.2.0) - - '@react-email/text@0.1.5(react@19.2.0)': - dependencies: - react: 19.2.0 - - '@react-email/body@0.2.0(react@19.2.0)': - dependencies: - react: 19.2.0 - - '@react-email/button@0.2.0(react@19.2.0)': - dependencies: - react: 19.2.0 - - '@react-email/code-block@0.2.0(react@19.2.0)': - dependencies: - prismjs: 1.30.0 - react: 19.2.0 - - '@react-email/code-inline@0.0.5(react@19.2.0)': - dependencies: - react: 19.2.0 - - '@react-email/column@0.0.13(react@19.2.0)': - dependencies: - react: 19.2.0 - - '@react-email/components@1.0.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': - dependencies: - '@react-email/body': 0.2.0(react@19.2.0) - '@react-email/button': 0.2.0(react@19.2.0) - '@react-email/code-block': 0.2.0(react@19.2.0) - '@react-email/code-inline': 0.0.5(react@19.2.0) - '@react-email/column': 0.0.13(react@19.2.0) - '@react-email/container': 0.0.15(react@19.2.0) - '@react-email/font': 0.0.9(react@19.2.0) - '@react-email/head': 0.0.12(react@19.2.0) - '@react-email/heading': 0.0.15(react@19.2.0) - '@react-email/hr': 0.0.11(react@19.2.0) - '@react-email/html': 0.0.11(react@19.2.0) - '@react-email/img': 0.0.11(react@19.2.0) - '@react-email/link': 0.0.12(react@19.2.0) - '@react-email/markdown': 0.0.17(react@19.2.0) - '@react-email/preview': 0.0.13(react@19.2.0) - '@react-email/render': 2.0.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@react-email/row': 0.0.12(react@19.2.0) - '@react-email/section': 0.0.16(react@19.2.0) - '@react-email/tailwind': 2.0.2(@react-email/body@0.2.0(react@19.2.0))(@react-email/button@0.2.0(react@19.2.0))(@react-email/code-block@0.2.0(react@19.2.0))(@react-email/code-inline@0.0.5(react@19.2.0))(@react-email/container@0.0.15(react@19.2.0))(@react-email/heading@0.0.15(react@19.2.0))(@react-email/hr@0.0.11(react@19.2.0))(@react-email/img@0.0.11(react@19.2.0))(@react-email/link@0.0.12(react@19.2.0))(@react-email/preview@0.0.13(react@19.2.0))(@react-email/text@0.1.5(react@19.2.0))(react@19.2.0) - '@react-email/text': 0.1.5(react@19.2.0) - react: 19.2.0 - transitivePeerDependencies: - - react-dom - - '@react-email/container@0.0.15(react@19.2.0)': - dependencies: - react: 19.2.0 - - '@react-email/font@0.0.9(react@19.2.0)': - dependencies: - react: 19.2.0 - - '@react-email/head@0.0.12(react@19.2.0)': - dependencies: - react: 19.2.0 - - '@react-email/heading@0.0.15(react@19.2.0)': - dependencies: - react: 19.2.0 - - '@react-email/hr@0.0.11(react@19.2.0)': - dependencies: - react: 19.2.0 - - '@react-email/html@0.0.11(react@19.2.0)': - dependencies: - react: 19.2.0 - - '@react-email/img@0.0.11(react@19.2.0)': - dependencies: - react: 19.2.0 - - '@react-email/link@0.0.12(react@19.2.0)': - dependencies: - react: 19.2.0 - - '@react-email/markdown@0.0.17(react@19.2.0)': - dependencies: - marked: 15.0.12 - react: 19.2.0 - - '@react-email/preview-server@5.1.0(@babel/core@7.28.5)(@opentelemetry/api@1.9.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.94.0)': - dependencies: - next: 16.0.10(@babel/core@7.28.5)(@opentelemetry/api@1.9.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.94.0) - transitivePeerDependencies: - - '@babel/core' - - '@opentelemetry/api' - - '@playwright/test' - - babel-plugin-macros - - babel-plugin-react-compiler - - react - - react-dom - - sass - - '@react-email/preview@0.0.13(react@19.2.0)': - dependencies: - react: 19.2.0 - - '@react-email/render@2.0.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': - dependencies: - html-to-text: 9.0.5 - prettier: 3.6.2 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) - - '@react-email/row@0.0.12(react@19.2.0)': - dependencies: - react: 19.2.0 - - '@react-email/section@0.0.16(react@19.2.0)': - dependencies: - react: 19.2.0 - - '@react-email/tailwind@2.0.2(@react-email/body@0.2.0(react@19.2.0))(@react-email/button@0.2.0(react@19.2.0))(@react-email/code-block@0.2.0(react@19.2.0))(@react-email/code-inline@0.0.5(react@19.2.0))(@react-email/container@0.0.15(react@19.2.0))(@react-email/heading@0.0.15(react@19.2.0))(@react-email/hr@0.0.11(react@19.2.0))(@react-email/img@0.0.11(react@19.2.0))(@react-email/link@0.0.12(react@19.2.0))(@react-email/preview@0.0.13(react@19.2.0))(@react-email/text@0.1.5(react@19.2.0))(react@19.2.0)': - dependencies: - '@react-email/text': 0.1.5(react@19.2.0) - react: 19.2.0 - tailwindcss: 4.1.18 - optionalDependencies: - '@react-email/body': 0.2.0(react@19.2.0) - '@react-email/button': 0.2.0(react@19.2.0) - '@react-email/code-block': 0.2.0(react@19.2.0) - '@react-email/code-inline': 0.0.5(react@19.2.0) - '@react-email/container': 0.0.15(react@19.2.0) - '@react-email/heading': 0.0.15(react@19.2.0) - '@react-email/hr': 0.0.11(react@19.2.0) - '@react-email/img': 0.0.11(react@19.2.0) - '@react-email/link': 0.0.12(react@19.2.0) - '@react-email/preview': 0.0.13(react@19.2.0) - - '@react-email/text@0.1.5(react@19.2.0)': - dependencies: - react: 19.2.0 - - '@rolldown/pluginutils@1.0.0-beta.40': {} - - '@rolldown/pluginutils@1.0.0-beta.47': {} - - '@rollup/pluginutils@5.3.0(rollup@4.53.2)': - dependencies: - '@types/estree': 1.0.8 - estree-walker: 2.0.2 - picomatch: 4.0.3 - optionalDependencies: - rollup: 4.53.2 - - '@rollup/rollup-android-arm-eabi@4.53.2': - optional: true - - '@rollup/rollup-android-arm64@4.53.2': - optional: true - - '@rollup/rollup-darwin-arm64@4.53.2': - optional: true - - '@rollup/rollup-darwin-x64@4.53.2': - optional: true - - '@rollup/rollup-freebsd-arm64@4.53.2': - optional: true - - '@rollup/rollup-freebsd-x64@4.53.2': - optional: true - - '@rollup/rollup-linux-arm-gnueabihf@4.53.2': - optional: true - - '@rollup/rollup-linux-arm-musleabihf@4.53.2': - optional: true - - '@rollup/rollup-linux-arm64-gnu@4.53.2': - optional: true - - '@rollup/rollup-linux-arm64-musl@4.53.2': - optional: true - - '@rollup/rollup-linux-loong64-gnu@4.53.2': - optional: true - - '@rollup/rollup-linux-ppc64-gnu@4.53.2': + '@parcel/watcher-freebsd-x64@2.5.6': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.53.2': + '@parcel/watcher-linux-arm-glibc@2.5.6': optional: true - '@rollup/rollup-linux-riscv64-musl@4.53.2': - optional: true - - '@rollup/rollup-linux-s390x-gnu@4.53.2': - optional: true - - '@rollup/rollup-linux-x64-gnu@4.53.2': - optional: true - - '@rollup/rollup-linux-x64-musl@4.53.2': - optional: true - - '@rollup/rollup-openharmony-arm64@4.53.2': - optional: true - - '@rollup/rollup-win32-arm64-msvc@4.53.2': - optional: true - - '@rollup/rollup-win32-ia32-msvc@4.53.2': - optional: true - - '@rollup/rollup-win32-x64-gnu@4.53.2': - optional: true - - '@rollup/rollup-win32-x64-msvc@4.53.2': - optional: true - - '@selderee/plugin-htmlparser2@0.11.0': - dependencies: - domhandler: 5.0.3 - selderee: 0.11.0 - - '@sinclair/typebox@0.34.41': {} - - '@smithy/abort-controller@4.2.7': - dependencies: - '@smithy/types': 4.11.0 - tslib: 2.8.1 - - '@smithy/config-resolver@4.4.5': - dependencies: - '@smithy/node-config-provider': 4.3.7 - '@smithy/types': 4.11.0 - '@smithy/util-config-provider': 4.2.0 - '@smithy/util-endpoints': 3.2.7 - '@smithy/util-middleware': 4.2.7 - tslib: 2.8.1 - - '@smithy/core@3.20.0': - dependencies: - '@smithy/middleware-serde': 4.2.8 - '@smithy/protocol-http': 5.3.7 - '@smithy/types': 4.11.0 - '@smithy/util-base64': 4.3.0 - '@smithy/util-body-length-browser': 4.2.0 - '@smithy/util-middleware': 4.2.7 - '@smithy/util-stream': 4.5.8 - '@smithy/util-utf8': 4.2.0 - '@smithy/uuid': 1.1.0 - tslib: 2.8.1 - - '@smithy/credential-provider-imds@4.2.7': - dependencies: - '@smithy/node-config-provider': 4.3.7 - '@smithy/property-provider': 4.2.7 - '@smithy/types': 4.11.0 - '@smithy/url-parser': 4.2.7 - tslib: 2.8.1 - - '@smithy/fetch-http-handler@5.3.8': - dependencies: - '@smithy/protocol-http': 5.3.7 - '@smithy/querystring-builder': 4.2.7 - '@smithy/types': 4.11.0 - '@smithy/util-base64': 4.3.0 - tslib: 2.8.1 - - '@smithy/hash-node@4.2.7': - dependencies: - '@smithy/types': 4.11.0 - '@smithy/util-buffer-from': 4.2.0 - '@smithy/util-utf8': 4.2.0 - tslib: 2.8.1 - - '@smithy/invalid-dependency@4.2.7': - dependencies: - '@smithy/types': 4.11.0 - tslib: 2.8.1 - - '@smithy/is-array-buffer@2.2.0': - dependencies: - tslib: 2.8.1 - - '@smithy/is-array-buffer@4.2.0': - dependencies: - tslib: 2.8.1 - - '@smithy/middleware-content-length@4.2.7': - dependencies: - '@smithy/protocol-http': 5.3.7 - '@smithy/types': 4.11.0 - tslib: 2.8.1 - - '@smithy/middleware-endpoint@4.4.1': - dependencies: - '@smithy/core': 3.20.0 - '@smithy/middleware-serde': 4.2.8 - '@smithy/node-config-provider': 4.3.7 - '@smithy/shared-ini-file-loader': 4.4.2 - '@smithy/types': 4.11.0 - '@smithy/url-parser': 4.2.7 - '@smithy/util-middleware': 4.2.7 - tslib: 2.8.1 - - '@smithy/middleware-retry@4.4.17': - dependencies: - '@smithy/node-config-provider': 4.3.7 - '@smithy/protocol-http': 5.3.7 - '@smithy/service-error-classification': 4.2.7 - '@smithy/smithy-client': 4.10.2 - '@smithy/types': 4.11.0 - '@smithy/util-middleware': 4.2.7 - '@smithy/util-retry': 4.2.7 - '@smithy/uuid': 1.1.0 - tslib: 2.8.1 - - '@smithy/middleware-serde@4.2.8': - dependencies: - '@smithy/protocol-http': 5.3.7 - '@smithy/types': 4.11.0 - tslib: 2.8.1 - - '@smithy/middleware-stack@4.2.7': - dependencies: - '@smithy/types': 4.11.0 - tslib: 2.8.1 - - '@smithy/node-config-provider@4.3.7': - dependencies: - '@smithy/property-provider': 4.2.7 - '@smithy/shared-ini-file-loader': 4.4.2 - '@smithy/types': 4.11.0 - tslib: 2.8.1 - - '@smithy/node-http-handler@4.4.7': - dependencies: - '@smithy/abort-controller': 4.2.7 - '@smithy/protocol-http': 5.3.7 - '@smithy/querystring-builder': 4.2.7 - '@smithy/types': 4.11.0 - tslib: 2.8.1 - - '@smithy/property-provider@4.2.7': - dependencies: - '@smithy/types': 4.11.0 - tslib: 2.8.1 - - '@smithy/protocol-http@5.3.7': - dependencies: - '@smithy/types': 4.11.0 - tslib: 2.8.1 - - '@smithy/querystring-builder@4.2.7': - dependencies: - '@smithy/types': 4.11.0 - '@smithy/util-uri-escape': 4.2.0 - tslib: 2.8.1 - - '@smithy/querystring-parser@4.2.7': - dependencies: - '@smithy/types': 4.11.0 - tslib: 2.8.1 - - '@smithy/service-error-classification@4.2.7': - dependencies: - '@smithy/types': 4.11.0 - - '@smithy/shared-ini-file-loader@4.4.2': - dependencies: - '@smithy/types': 4.11.0 - tslib: 2.8.1 - - '@smithy/signature-v4@5.3.7': - dependencies: - '@smithy/is-array-buffer': 4.2.0 - '@smithy/protocol-http': 5.3.7 - '@smithy/types': 4.11.0 - '@smithy/util-hex-encoding': 4.2.0 - '@smithy/util-middleware': 4.2.7 - '@smithy/util-uri-escape': 4.2.0 - '@smithy/util-utf8': 4.2.0 - tslib: 2.8.1 - - '@smithy/smithy-client@4.10.2': - dependencies: - '@smithy/core': 3.20.0 - '@smithy/middleware-endpoint': 4.4.1 - '@smithy/middleware-stack': 4.2.7 - '@smithy/protocol-http': 5.3.7 - '@smithy/types': 4.11.0 - '@smithy/util-stream': 4.5.8 - tslib: 2.8.1 + '@parcel/watcher-linux-arm-musl@2.5.6': + optional: true - '@smithy/types@4.11.0': - dependencies: - tslib: 2.8.1 + '@parcel/watcher-linux-arm64-glibc@2.5.6': + optional: true - '@smithy/url-parser@4.2.7': - dependencies: - '@smithy/querystring-parser': 4.2.7 - '@smithy/types': 4.11.0 - tslib: 2.8.1 + '@parcel/watcher-linux-arm64-musl@2.5.6': + optional: true - '@smithy/util-base64@4.3.0': - dependencies: - '@smithy/util-buffer-from': 4.2.0 - '@smithy/util-utf8': 4.2.0 - tslib: 2.8.1 + '@parcel/watcher-linux-x64-glibc@2.5.6': + optional: true - '@smithy/util-body-length-browser@4.2.0': - dependencies: - tslib: 2.8.1 + '@parcel/watcher-linux-x64-musl@2.5.6': + optional: true - '@smithy/util-body-length-node@4.2.1': + '@parcel/watcher-wasm@2.5.6': dependencies: - tslib: 2.8.1 + is-glob: 4.0.3 + picomatch: 4.0.3 - '@smithy/util-buffer-from@2.2.0': - dependencies: - '@smithy/is-array-buffer': 2.2.0 - tslib: 2.8.1 + '@parcel/watcher-win32-arm64@2.5.6': + optional: true - '@smithy/util-buffer-from@4.2.0': - dependencies: - '@smithy/is-array-buffer': 4.2.0 - tslib: 2.8.1 + '@parcel/watcher-win32-ia32@2.5.6': + optional: true - '@smithy/util-config-provider@4.2.0': - dependencies: - tslib: 2.8.1 + '@parcel/watcher-win32-x64@2.5.6': + optional: true - '@smithy/util-defaults-mode-browser@4.3.16': + '@parcel/watcher@2.5.6': dependencies: - '@smithy/property-provider': 4.2.7 - '@smithy/smithy-client': 4.10.2 - '@smithy/types': 4.11.0 - tslib: 2.8.1 + detect-libc: 2.1.2 + is-glob: 4.0.3 + node-addon-api: 7.1.1 + picomatch: 4.0.3 + optionalDependencies: + '@parcel/watcher-android-arm64': 2.5.6 + '@parcel/watcher-darwin-arm64': 2.5.6 + '@parcel/watcher-darwin-x64': 2.5.6 + '@parcel/watcher-freebsd-x64': 2.5.6 + '@parcel/watcher-linux-arm-glibc': 2.5.6 + '@parcel/watcher-linux-arm-musl': 2.5.6 + '@parcel/watcher-linux-arm64-glibc': 2.5.6 + '@parcel/watcher-linux-arm64-musl': 2.5.6 + '@parcel/watcher-linux-x64-glibc': 2.5.6 + '@parcel/watcher-linux-x64-musl': 2.5.6 + '@parcel/watcher-win32-arm64': 2.5.6 + '@parcel/watcher-win32-ia32': 2.5.6 + '@parcel/watcher-win32-x64': 2.5.6 - '@smithy/util-defaults-mode-node@4.2.19': - dependencies: - '@smithy/config-resolver': 4.4.5 - '@smithy/credential-provider-imds': 4.2.7 - '@smithy/node-config-provider': 4.3.7 - '@smithy/property-provider': 4.2.7 - '@smithy/smithy-client': 4.10.2 - '@smithy/types': 4.11.0 - tslib: 2.8.1 + '@pinojs/redact@0.4.0': {} - '@smithy/util-endpoints@3.2.7': - dependencies: - '@smithy/node-config-provider': 4.3.7 - '@smithy/types': 4.11.0 - tslib: 2.8.1 + '@pkgjs/parseargs@0.11.0': + optional: true - '@smithy/util-hex-encoding@4.2.0': + '@react-email/body@0.2.0(react@19.2.4)': dependencies: - tslib: 2.8.1 + react: 19.2.4 - '@smithy/util-middleware@4.2.7': + '@react-email/button@0.2.0(react@19.2.4)': dependencies: - '@smithy/types': 4.11.0 - tslib: 2.8.1 + react: 19.2.4 - '@smithy/util-retry@4.2.7': + '@react-email/code-block@0.2.0(react@19.2.4)': dependencies: - '@smithy/service-error-classification': 4.2.7 - '@smithy/types': 4.11.0 - tslib: 2.8.1 + prismjs: 1.30.0 + react: 19.2.4 + + '@react-email/code-inline@0.0.5(react@19.2.4)': + dependencies: + react: 19.2.4 + + '@react-email/column@0.0.13(react@19.2.4)': + dependencies: + react: 19.2.4 + + '@react-email/components@1.0.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@react-email/body': 0.2.0(react@19.2.4) + '@react-email/button': 0.2.0(react@19.2.4) + '@react-email/code-block': 0.2.0(react@19.2.4) + '@react-email/code-inline': 0.0.5(react@19.2.4) + '@react-email/column': 0.0.13(react@19.2.4) + '@react-email/container': 0.0.15(react@19.2.4) + '@react-email/font': 0.0.9(react@19.2.4) + '@react-email/head': 0.0.12(react@19.2.4) + '@react-email/heading': 0.0.15(react@19.2.4) + '@react-email/hr': 0.0.11(react@19.2.4) + '@react-email/html': 0.0.11(react@19.2.4) + '@react-email/img': 0.0.11(react@19.2.4) + '@react-email/link': 0.0.12(react@19.2.4) + '@react-email/markdown': 0.0.17(react@19.2.4) + '@react-email/preview': 0.0.13(react@19.2.4) + '@react-email/render': 2.0.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@react-email/row': 0.0.12(react@19.2.4) + '@react-email/section': 0.0.16(react@19.2.4) + '@react-email/tailwind': 2.0.2(@react-email/body@0.2.0(react@19.2.4))(@react-email/button@0.2.0(react@19.2.4))(@react-email/code-block@0.2.0(react@19.2.4))(@react-email/code-inline@0.0.5(react@19.2.4))(@react-email/container@0.0.15(react@19.2.4))(@react-email/heading@0.0.15(react@19.2.4))(@react-email/hr@0.0.11(react@19.2.4))(@react-email/img@0.0.11(react@19.2.4))(@react-email/link@0.0.12(react@19.2.4))(@react-email/preview@0.0.13(react@19.2.4))(@react-email/text@0.1.5(react@19.2.4))(react@19.2.4) + '@react-email/text': 0.1.5(react@19.2.4) + react: 19.2.4 + transitivePeerDependencies: + - react-dom - '@smithy/util-stream@4.5.8': + '@react-email/container@0.0.15(react@19.2.4)': dependencies: - '@smithy/fetch-http-handler': 5.3.8 - '@smithy/node-http-handler': 4.4.7 - '@smithy/types': 4.11.0 - '@smithy/util-base64': 4.3.0 - '@smithy/util-buffer-from': 4.2.0 - '@smithy/util-hex-encoding': 4.2.0 - '@smithy/util-utf8': 4.2.0 - tslib: 2.8.1 + react: 19.2.4 - '@smithy/util-uri-escape@4.2.0': + '@react-email/font@0.0.9(react@19.2.4)': dependencies: - tslib: 2.8.1 + react: 19.2.4 - '@smithy/util-utf8@2.3.0': + '@react-email/head@0.0.12(react@19.2.4)': dependencies: - '@smithy/util-buffer-from': 2.2.0 - tslib: 2.8.1 + react: 19.2.4 - '@selderee/plugin-htmlparser2@0.11.0': + '@react-email/heading@0.0.15(react@19.2.4)': dependencies: - domhandler: 5.0.3 - selderee: 0.11.0 + react: 19.2.4 - '@sinclair/typebox@0.34.41': {} - - '@smithy/abort-controller@4.2.7': + '@react-email/hr@0.0.11(react@19.2.4)': dependencies: - '@smithy/types': 4.11.0 - tslib: 2.8.1 + react: 19.2.4 - '@smithy/config-resolver@4.4.5': + '@react-email/html@0.0.11(react@19.2.4)': dependencies: - '@smithy/node-config-provider': 4.3.7 - '@smithy/types': 4.11.0 - '@smithy/util-config-provider': 4.2.0 - '@smithy/util-endpoints': 3.2.7 - '@smithy/util-middleware': 4.2.7 - tslib: 2.8.1 - - '@smithy/core@3.20.0': - dependencies: - '@smithy/middleware-serde': 4.2.8 - '@smithy/protocol-http': 5.3.7 - '@smithy/types': 4.11.0 - '@smithy/util-base64': 4.3.0 - '@smithy/util-body-length-browser': 4.2.0 - '@smithy/util-middleware': 4.2.7 - '@smithy/util-stream': 4.5.8 - '@smithy/util-utf8': 4.2.0 - '@smithy/uuid': 1.1.0 - tslib: 2.8.1 + react: 19.2.4 - '@smithy/credential-provider-imds@4.2.7': + '@react-email/img@0.0.11(react@19.2.4)': dependencies: - '@smithy/node-config-provider': 4.3.7 - '@smithy/property-provider': 4.2.7 - '@smithy/types': 4.11.0 - '@smithy/url-parser': 4.2.7 - tslib: 2.8.1 + react: 19.2.4 - '@smithy/fetch-http-handler@5.3.8': + '@react-email/link@0.0.12(react@19.2.4)': dependencies: - '@smithy/protocol-http': 5.3.7 - '@smithy/querystring-builder': 4.2.7 - '@smithy/types': 4.11.0 - '@smithy/util-base64': 4.3.0 - tslib: 2.8.1 + react: 19.2.4 - '@smithy/hash-node@4.2.7': + '@react-email/markdown@0.0.17(react@19.2.4)': dependencies: - '@smithy/types': 4.11.0 - '@smithy/util-buffer-from': 4.2.0 - '@smithy/util-utf8': 4.2.0 - tslib: 2.8.1 + marked: 15.0.12 + react: 19.2.4 - '@smithy/invalid-dependency@4.2.7': + '@react-email/preview-server@5.1.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.3)': dependencies: - '@smithy/types': 4.11.0 - tslib: 2.8.1 + next: 16.0.10(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.3) + transitivePeerDependencies: + - '@babel/core' + - '@opentelemetry/api' + - '@playwright/test' + - babel-plugin-macros + - babel-plugin-react-compiler + - react + - react-dom + - sass - '@smithy/is-array-buffer@2.2.0': + '@react-email/preview@0.0.13(react@19.2.4)': dependencies: - tslib: 2.8.1 + react: 19.2.4 - '@smithy/is-array-buffer@4.2.0': + '@react-email/render@2.0.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - tslib: 2.8.1 + html-to-text: 9.0.5 + prettier: 3.8.1 + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) - '@smithy/middleware-content-length@4.2.7': + '@react-email/row@0.0.12(react@19.2.4)': dependencies: - '@smithy/protocol-http': 5.3.7 - '@smithy/types': 4.11.0 - tslib: 2.8.1 + react: 19.2.4 - '@smithy/middleware-endpoint@4.4.1': + '@react-email/section@0.0.16(react@19.2.4)': dependencies: - '@smithy/core': 3.20.0 - '@smithy/middleware-serde': 4.2.8 - '@smithy/node-config-provider': 4.3.7 - '@smithy/shared-ini-file-loader': 4.4.2 - '@smithy/types': 4.11.0 - '@smithy/url-parser': 4.2.7 - '@smithy/util-middleware': 4.2.7 - tslib: 2.8.1 + react: 19.2.4 - '@smithy/middleware-retry@4.4.17': + '@react-email/tailwind@2.0.2(@react-email/body@0.2.0(react@19.2.4))(@react-email/button@0.2.0(react@19.2.4))(@react-email/code-block@0.2.0(react@19.2.4))(@react-email/code-inline@0.0.5(react@19.2.4))(@react-email/container@0.0.15(react@19.2.4))(@react-email/heading@0.0.15(react@19.2.4))(@react-email/hr@0.0.11(react@19.2.4))(@react-email/img@0.0.11(react@19.2.4))(@react-email/link@0.0.12(react@19.2.4))(@react-email/preview@0.0.13(react@19.2.4))(@react-email/text@0.1.5(react@19.2.4))(react@19.2.4)': dependencies: - '@smithy/node-config-provider': 4.3.7 - '@smithy/protocol-http': 5.3.7 - '@smithy/service-error-classification': 4.2.7 - '@smithy/smithy-client': 4.10.2 - '@smithy/types': 4.11.0 - '@smithy/util-middleware': 4.2.7 - '@smithy/util-retry': 4.2.7 - '@smithy/uuid': 1.1.0 - tslib: 2.8.1 + '@react-email/text': 0.1.5(react@19.2.4) + react: 19.2.4 + tailwindcss: 4.2.0 + optionalDependencies: + '@react-email/body': 0.2.0(react@19.2.4) + '@react-email/button': 0.2.0(react@19.2.4) + '@react-email/code-block': 0.2.0(react@19.2.4) + '@react-email/code-inline': 0.0.5(react@19.2.4) + '@react-email/container': 0.0.15(react@19.2.4) + '@react-email/heading': 0.0.15(react@19.2.4) + '@react-email/hr': 0.0.11(react@19.2.4) + '@react-email/img': 0.0.11(react@19.2.4) + '@react-email/link': 0.0.12(react@19.2.4) + '@react-email/preview': 0.0.13(react@19.2.4) - '@smithy/middleware-serde@4.2.8': + '@react-email/text@0.1.5(react@19.2.4)': dependencies: - '@smithy/protocol-http': 5.3.7 - '@smithy/types': 4.11.0 - tslib: 2.8.1 + react: 19.2.4 - '@smithy/middleware-stack@4.2.7': - dependencies: - '@smithy/types': 4.11.0 - tslib: 2.8.1 + '@rolldown/pluginutils@1.0.0-beta.40': {} - '@smithy/node-config-provider@4.3.7': - dependencies: - '@smithy/property-provider': 4.2.7 - '@smithy/shared-ini-file-loader': 4.4.2 - '@smithy/types': 4.11.0 - tslib: 2.8.1 + '@rolldown/pluginutils@1.0.0-rc.3': {} - '@smithy/node-http-handler@4.4.7': + '@rollup/pluginutils@5.3.0(rollup@4.59.0)': dependencies: - '@smithy/abort-controller': 4.2.7 - '@smithy/protocol-http': 5.3.7 - '@smithy/querystring-builder': 4.2.7 - '@smithy/types': 4.11.0 - tslib: 2.8.1 + '@types/estree': 1.0.8 + estree-walker: 2.0.2 + picomatch: 4.0.3 + optionalDependencies: + rollup: 4.59.0 - '@smithy/property-provider@4.2.7': - dependencies: - '@smithy/types': 4.11.0 - tslib: 2.8.1 + '@rollup/rollup-android-arm-eabi@4.59.0': + optional: true - '@smithy/protocol-http@5.3.7': - dependencies: - '@smithy/types': 4.11.0 - tslib: 2.8.1 + '@rollup/rollup-android-arm64@4.59.0': + optional: true - '@smithy/querystring-builder@4.2.7': - dependencies: - '@smithy/types': 4.11.0 - '@smithy/util-uri-escape': 4.2.0 - tslib: 2.8.1 + '@rollup/rollup-darwin-arm64@4.59.0': + optional: true - '@smithy/querystring-parser@4.2.7': - dependencies: - '@smithy/types': 4.11.0 - tslib: 2.8.1 + '@rollup/rollup-darwin-x64@4.59.0': + optional: true - '@smithy/service-error-classification@4.2.7': - dependencies: - '@smithy/types': 4.11.0 + '@rollup/rollup-freebsd-arm64@4.59.0': + optional: true - '@smithy/shared-ini-file-loader@4.4.2': - dependencies: - '@smithy/types': 4.11.0 - tslib: 2.8.1 + '@rollup/rollup-freebsd-x64@4.59.0': + optional: true - '@smithy/signature-v4@5.3.7': - dependencies: - '@smithy/is-array-buffer': 4.2.0 - '@smithy/protocol-http': 5.3.7 - '@smithy/types': 4.11.0 - '@smithy/util-hex-encoding': 4.2.0 - '@smithy/util-middleware': 4.2.7 - '@smithy/util-uri-escape': 4.2.0 - '@smithy/util-utf8': 4.2.0 - tslib: 2.8.1 + '@rollup/rollup-linux-arm-gnueabihf@4.59.0': + optional: true - '@smithy/smithy-client@4.10.2': - dependencies: - '@smithy/core': 3.20.0 - '@smithy/middleware-endpoint': 4.4.1 - '@smithy/middleware-stack': 4.2.7 - '@smithy/protocol-http': 5.3.7 - '@smithy/types': 4.11.0 - '@smithy/util-stream': 4.5.8 - tslib: 2.8.1 + '@rollup/rollup-linux-arm-musleabihf@4.59.0': + optional: true - '@smithy/types@4.11.0': - dependencies: - tslib: 2.8.1 + '@rollup/rollup-linux-arm64-gnu@4.59.0': + optional: true - '@smithy/url-parser@4.2.7': - dependencies: - '@smithy/querystring-parser': 4.2.7 - '@smithy/types': 4.11.0 - tslib: 2.8.1 + '@rollup/rollup-linux-arm64-musl@4.59.0': + optional: true - '@smithy/util-base64@4.3.0': - dependencies: - '@smithy/util-buffer-from': 4.2.0 - '@smithy/util-utf8': 4.2.0 - tslib: 2.8.1 + '@rollup/rollup-linux-loong64-gnu@4.59.0': + optional: true - '@smithy/util-body-length-browser@4.2.0': - dependencies: - tslib: 2.8.1 + '@rollup/rollup-linux-loong64-musl@4.59.0': + optional: true - '@smithy/util-body-length-node@4.2.1': - dependencies: - tslib: 2.8.1 + '@rollup/rollup-linux-ppc64-gnu@4.59.0': + optional: true - '@smithy/util-buffer-from@2.2.0': - dependencies: - '@smithy/is-array-buffer': 2.2.0 - tslib: 2.8.1 + '@rollup/rollup-linux-ppc64-musl@4.59.0': + optional: true - '@smithy/util-buffer-from@4.2.0': - dependencies: - '@smithy/is-array-buffer': 4.2.0 - tslib: 2.8.1 + '@rollup/rollup-linux-riscv64-gnu@4.59.0': + optional: true - '@smithy/util-config-provider@4.2.0': - dependencies: - tslib: 2.8.1 + '@rollup/rollup-linux-riscv64-musl@4.59.0': + optional: true - '@smithy/util-defaults-mode-browser@4.3.16': - dependencies: - '@smithy/property-provider': 4.2.7 - '@smithy/smithy-client': 4.10.2 - '@smithy/types': 4.11.0 - tslib: 2.8.1 + '@rollup/rollup-linux-s390x-gnu@4.59.0': + optional: true - '@smithy/util-defaults-mode-node@4.2.19': - dependencies: - '@smithy/config-resolver': 4.4.5 - '@smithy/credential-provider-imds': 4.2.7 - '@smithy/node-config-provider': 4.3.7 - '@smithy/property-provider': 4.2.7 - '@smithy/smithy-client': 4.10.2 - '@smithy/types': 4.11.0 - tslib: 2.8.1 + '@rollup/rollup-linux-x64-gnu@4.59.0': + optional: true - '@smithy/util-endpoints@3.2.7': - dependencies: - '@smithy/node-config-provider': 4.3.7 - '@smithy/types': 4.11.0 - tslib: 2.8.1 + '@rollup/rollup-linux-x64-musl@4.59.0': + optional: true - '@smithy/util-hex-encoding@4.2.0': - dependencies: - tslib: 2.8.1 + '@rollup/rollup-openbsd-x64@4.59.0': + optional: true - '@smithy/util-middleware@4.2.7': - dependencies: - '@smithy/types': 4.11.0 - tslib: 2.8.1 + '@rollup/rollup-openharmony-arm64@4.59.0': + optional: true - '@smithy/util-retry@4.2.7': - dependencies: - '@smithy/service-error-classification': 4.2.7 - '@smithy/types': 4.11.0 - tslib: 2.8.1 + '@rollup/rollup-win32-arm64-msvc@4.59.0': + optional: true - '@smithy/util-stream@4.5.8': - dependencies: - '@smithy/fetch-http-handler': 5.3.8 - '@smithy/node-http-handler': 4.4.7 - '@smithy/types': 4.11.0 - '@smithy/util-base64': 4.3.0 - '@smithy/util-buffer-from': 4.2.0 - '@smithy/util-hex-encoding': 4.2.0 - '@smithy/util-utf8': 4.2.0 - tslib: 2.8.1 + '@rollup/rollup-win32-ia32-msvc@4.59.0': + optional: true - '@smithy/util-uri-escape@4.2.0': - dependencies: - tslib: 2.8.1 + '@rollup/rollup-win32-x64-gnu@4.59.0': + optional: true - '@smithy/util-utf8@2.3.0': - dependencies: - '@smithy/util-buffer-from': 2.2.0 - tslib: 2.8.1 + '@rollup/rollup-win32-x64-msvc@4.59.0': + optional: true - '@smithy/util-utf8@4.2.0': + '@selderee/plugin-htmlparser2@0.11.0': dependencies: - '@smithy/util-buffer-from': 4.2.0 - tslib: 2.8.1 + domhandler: 5.0.3 + selderee: 0.11.0 - '@smithy/uuid@1.1.0': - dependencies: - tslib: 2.8.1 + '@sinclair/typebox@0.34.48': {} '@so-ric/colorspace@1.1.6': dependencies: @@ -7925,128 +6787,132 @@ snapshots: '@socket.io/component-emitter@3.1.2': {} - '@solid-primitives/event-listener@2.4.3(solid-js@1.9.10)': + '@solid-primitives/event-listener@2.4.4(solid-js@1.9.11)': + dependencies: + '@solid-primitives/utils': 6.3.2(solid-js@1.9.11) + solid-js: 1.9.11 + + '@solid-primitives/keyboard@1.3.4(solid-js@1.9.11)': dependencies: - '@solid-primitives/utils': 6.3.2(solid-js@1.9.10) - solid-js: 1.9.10 + '@solid-primitives/event-listener': 2.4.4(solid-js@1.9.11) + '@solid-primitives/rootless': 1.5.2(solid-js@1.9.11) + '@solid-primitives/utils': 6.3.2(solid-js@1.9.11) + solid-js: 1.9.11 - '@solid-primitives/keyboard@1.3.3(solid-js@1.9.10)': + '@solid-primitives/resize-observer@2.1.4(solid-js@1.9.11)': dependencies: - '@solid-primitives/event-listener': 2.4.3(solid-js@1.9.10) - '@solid-primitives/rootless': 1.5.2(solid-js@1.9.10) - '@solid-primitives/utils': 6.3.2(solid-js@1.9.10) - solid-js: 1.9.10 + '@solid-primitives/event-listener': 2.4.4(solid-js@1.9.11) + '@solid-primitives/rootless': 1.5.2(solid-js@1.9.11) + '@solid-primitives/static-store': 0.1.2(solid-js@1.9.11) + '@solid-primitives/utils': 6.3.2(solid-js@1.9.11) + solid-js: 1.9.11 - '@solid-primitives/resize-observer@2.1.3(solid-js@1.9.10)': + '@solid-primitives/rootless@1.5.2(solid-js@1.9.11)': dependencies: - '@solid-primitives/event-listener': 2.4.3(solid-js@1.9.10) - '@solid-primitives/rootless': 1.5.2(solid-js@1.9.10) - '@solid-primitives/static-store': 0.1.2(solid-js@1.9.10) - '@solid-primitives/utils': 6.3.2(solid-js@1.9.10) - solid-js: 1.9.10 + '@solid-primitives/utils': 6.3.2(solid-js@1.9.11) + solid-js: 1.9.11 - '@solid-primitives/rootless@1.5.2(solid-js@1.9.10)': + '@solid-primitives/static-store@0.1.2(solid-js@1.9.11)': dependencies: - '@solid-primitives/utils': 6.3.2(solid-js@1.9.10) - solid-js: 1.9.10 + '@solid-primitives/utils': 6.3.2(solid-js@1.9.11) + solid-js: 1.9.11 - '@solid-primitives/static-store@0.1.2(solid-js@1.9.10)': + '@solid-primitives/utils@6.3.2(solid-js@1.9.11)': dependencies: - '@solid-primitives/utils': 6.3.2(solid-js@1.9.10) - solid-js: 1.9.10 + solid-js: 1.9.11 - '@solid-primitives/utils@6.3.2(solid-js@1.9.10)': + '@sveltejs/acorn-typescript@1.0.9(acorn@8.16.0)': dependencies: - solid-js: 1.9.10 + acorn: 8.16.0 '@swc/helpers@0.5.15': dependencies: tslib: 2.8.1 - '@t3-oss/env-core@0.13.8(typescript@5.9.3)(zod@4.1.12)': + '@t3-oss/env-core@0.13.10(typescript@5.9.3)(zod@4.3.6)': optionalDependencies: typescript: 5.9.3 - zod: 4.1.12 + zod: 4.3.6 - '@tailwindcss/node@4.1.18': + '@tailwindcss/node@4.2.0': dependencies: '@jridgewell/remapping': 2.3.5 enhanced-resolve: 5.19.0 jiti: 2.6.1 - lightningcss: 1.30.2 + lightningcss: 1.31.1 magic-string: 0.30.21 source-map-js: 1.2.1 - tailwindcss: 4.1.18 + tailwindcss: 4.2.0 - '@tailwindcss/oxide-android-arm64@4.1.18': + '@tailwindcss/oxide-android-arm64@4.2.0': optional: true - '@tailwindcss/oxide-darwin-arm64@4.1.18': + '@tailwindcss/oxide-darwin-arm64@4.2.0': optional: true - '@tailwindcss/oxide-darwin-x64@4.1.18': + '@tailwindcss/oxide-darwin-x64@4.2.0': optional: true - '@tailwindcss/oxide-freebsd-x64@4.1.18': + '@tailwindcss/oxide-freebsd-x64@4.2.0': optional: true - '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.18': + '@tailwindcss/oxide-linux-arm-gnueabihf@4.2.0': optional: true - '@tailwindcss/oxide-linux-arm64-gnu@4.1.18': + '@tailwindcss/oxide-linux-arm64-gnu@4.2.0': optional: true - '@tailwindcss/oxide-linux-arm64-musl@4.1.18': + '@tailwindcss/oxide-linux-arm64-musl@4.2.0': optional: true - '@tailwindcss/oxide-linux-x64-gnu@4.1.18': + '@tailwindcss/oxide-linux-x64-gnu@4.2.0': optional: true - '@tailwindcss/oxide-linux-x64-musl@4.1.18': + '@tailwindcss/oxide-linux-x64-musl@4.2.0': optional: true - '@tailwindcss/oxide-wasm32-wasi@4.1.18': + '@tailwindcss/oxide-wasm32-wasi@4.2.0': optional: true - '@tailwindcss/oxide-win32-arm64-msvc@4.1.18': + '@tailwindcss/oxide-win32-arm64-msvc@4.2.0': optional: true - '@tailwindcss/oxide-win32-x64-msvc@4.1.18': + '@tailwindcss/oxide-win32-x64-msvc@4.2.0': optional: true - '@tailwindcss/oxide@4.1.18': + '@tailwindcss/oxide@4.2.0': optionalDependencies: - '@tailwindcss/oxide-android-arm64': 4.1.18 - '@tailwindcss/oxide-darwin-arm64': 4.1.18 - '@tailwindcss/oxide-darwin-x64': 4.1.18 - '@tailwindcss/oxide-freebsd-x64': 4.1.18 - '@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.18 - '@tailwindcss/oxide-linux-arm64-gnu': 4.1.18 - '@tailwindcss/oxide-linux-arm64-musl': 4.1.18 - '@tailwindcss/oxide-linux-x64-gnu': 4.1.18 - '@tailwindcss/oxide-linux-x64-musl': 4.1.18 - '@tailwindcss/oxide-wasm32-wasi': 4.1.18 - '@tailwindcss/oxide-win32-arm64-msvc': 4.1.18 - '@tailwindcss/oxide-win32-x64-msvc': 4.1.18 - - '@tailwindcss/vite@4.1.18(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1))': - dependencies: - '@tailwindcss/node': 4.1.18 - '@tailwindcss/oxide': 4.1.18 - tailwindcss: 4.1.18 - vite: 7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1) + '@tailwindcss/oxide-android-arm64': 4.2.0 + '@tailwindcss/oxide-darwin-arm64': 4.2.0 + '@tailwindcss/oxide-darwin-x64': 4.2.0 + '@tailwindcss/oxide-freebsd-x64': 4.2.0 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.2.0 + '@tailwindcss/oxide-linux-arm64-gnu': 4.2.0 + '@tailwindcss/oxide-linux-arm64-musl': 4.2.0 + '@tailwindcss/oxide-linux-x64-gnu': 4.2.0 + '@tailwindcss/oxide-linux-x64-musl': 4.2.0 + '@tailwindcss/oxide-wasm32-wasi': 4.2.0 + '@tailwindcss/oxide-win32-arm64-msvc': 4.2.0 + '@tailwindcss/oxide-win32-x64-msvc': 4.2.0 + + '@tailwindcss/vite@4.2.0(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(tsx@4.21.0)(yaml@2.8.2))': + dependencies: + '@tailwindcss/node': 4.2.0 + '@tailwindcss/oxide': 4.2.0 + tailwindcss: 4.2.0 + vite: 7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(tsx@4.21.0)(yaml@2.8.2) '@tanstack/devtools-client@0.0.3': dependencies: '@tanstack/devtools-event-client': 0.3.5 - '@tanstack/devtools-client@0.0.4': + '@tanstack/devtools-client@0.0.5': dependencies: - '@tanstack/devtools-event-client': 0.3.5 + '@tanstack/devtools-event-client': 0.4.0 '@tanstack/devtools-event-bus@0.3.3': dependencies: - ws: 8.18.3 + ws: 8.19.0 transitivePeerDependencies: - bufferutil - utf-8-validate @@ -8055,223 +6921,175 @@ snapshots: '@tanstack/devtools-event-client@0.4.0': {} - '@tanstack/devtools-ui@0.4.4(csstype@3.2.3)(solid-js@1.9.10)': + '@tanstack/devtools-ui@0.4.4(csstype@3.2.3)(solid-js@1.9.11)': dependencies: clsx: 2.1.1 goober: 2.1.18(csstype@3.2.3) - solid-js: 1.9.10 + solid-js: 1.9.11 transitivePeerDependencies: - csstype - '@tanstack/devtools-vite@0.3.11(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1))': + '@tanstack/devtools-vite@0.3.12(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(tsx@4.21.0)(yaml@2.8.2))': dependencies: - '@babel/core': 7.28.5 - '@babel/generator': 7.28.5 - '@babel/parser': 7.28.5 - '@babel/traverse': 7.28.5 - '@babel/types': 7.28.5 - '@tanstack/devtools-client': 0.0.4 + '@babel/core': 7.29.0 + '@babel/generator': 7.29.1 + '@babel/parser': 7.29.0 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 + '@tanstack/devtools-client': 0.0.5 '@tanstack/devtools-event-bus': 0.3.3 chalk: 5.6.2 - launch-editor: 2.12.0 + launch-editor: 2.13.0 picomatch: 4.0.3 - vite: 7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate - '@tanstack/devtools@0.7.0(csstype@3.2.3)(solid-js@1.9.10)': + '@tanstack/devtools@0.7.0(csstype@3.2.3)(solid-js@1.9.11)': dependencies: - '@solid-primitives/event-listener': 2.4.3(solid-js@1.9.10) - '@solid-primitives/keyboard': 1.3.3(solid-js@1.9.10) - '@solid-primitives/resize-observer': 2.1.3(solid-js@1.9.10) + '@solid-primitives/event-listener': 2.4.4(solid-js@1.9.11) + '@solid-primitives/keyboard': 1.3.4(solid-js@1.9.11) + '@solid-primitives/resize-observer': 2.1.4(solid-js@1.9.11) '@tanstack/devtools-client': 0.0.3 '@tanstack/devtools-event-bus': 0.3.3 - '@tanstack/devtools-ui': 0.4.4(csstype@3.2.3)(solid-js@1.9.10) + '@tanstack/devtools-ui': 0.4.4(csstype@3.2.3)(solid-js@1.9.11) clsx: 2.1.1 goober: 2.1.18(csstype@3.2.3) - solid-js: 1.9.10 + solid-js: 1.9.11 transitivePeerDependencies: - bufferutil - csstype - utf-8-validate - '@tanstack/directive-functions-plugin@1.134.5(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1))': - dependencies: - '@babel/code-frame': 7.27.1 - '@babel/core': 7.28.5 - '@babel/traverse': 7.28.5 - '@babel/types': 7.28.5 - '@tanstack/router-utils': 1.133.19 - babel-dead-code-elimination: 1.0.10 - pathe: 2.0.3 - tiny-invariant: 1.3.3 - vite: 7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1) - transitivePeerDependencies: - - supports-color - - '@tanstack/form-core@1.25.0': - dependencies: - '@tanstack/devtools-event-client': 0.3.5 - '@tanstack/pacer': 0.15.4 - '@tanstack/store': 0.7.7 - - '@tanstack/form-core@1.28.0': + '@tanstack/form-core@1.28.3': dependencies: '@tanstack/devtools-event-client': 0.4.0 '@tanstack/pacer-lite': 0.1.1 - '@tanstack/store': 0.7.7 + '@tanstack/store': 0.8.1 - '@tanstack/history@1.133.28': {} + '@tanstack/history@1.161.4': {} '@tanstack/pacer-lite@0.1.1': {} - '@tanstack/pacer@0.15.4': - dependencies: - '@tanstack/devtools-event-client': 0.3.5 - '@tanstack/store': 0.7.7 - - '@tanstack/query-core@5.90.10': {} + '@tanstack/query-core@5.90.20': {} - '@tanstack/query-devtools@5.90.1': {} + '@tanstack/query-devtools@5.93.0': {} - '@tanstack/react-devtools@0.7.11(@types/react-dom@19.2.3(@types/react@19.2.5))(@types/react@19.2.5)(csstype@3.2.3)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(solid-js@1.9.10)': + '@tanstack/react-devtools@0.7.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(csstype@3.2.3)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(solid-js@1.9.11)': dependencies: - '@tanstack/devtools': 0.7.0(csstype@3.2.3)(solid-js@1.9.10) - '@types/react': 19.2.5 - '@types/react-dom': 19.2.3(@types/react@19.2.5) - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + '@tanstack/devtools': 0.7.0(csstype@3.2.3)(solid-js@1.9.11) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) transitivePeerDependencies: - bufferutil - csstype - solid-js - utf-8-validate - '@tanstack/react-form-start@1.28.0(@tanstack/react-start@1.136.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1)))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@tanstack/react-form-start@1.28.3(@tanstack/react-start@1.162.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(tsx@4.21.0)(yaml@2.8.2)))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - '@tanstack/react-form': 1.28.0(@tanstack/react-start@1.136.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1)))(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@tanstack/react-form': 1.28.3(@tanstack/react-start@1.162.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(tsx@4.21.0)(yaml@2.8.2)))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) decode-formdata: 0.9.0 - devalue: 5.6.2 - react: 19.2.0 - optionalDependencies: - '@tanstack/react-start': 1.136.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1)) - transitivePeerDependencies: - - react-dom - - '@tanstack/react-form@1.25.0(@tanstack/react-start@1.136.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1)))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': - dependencies: - '@tanstack/form-core': 1.25.0 - '@tanstack/react-store': 0.7.7(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - react: 19.2.0 + devalue: 5.6.3 + react: 19.2.4 optionalDependencies: - '@tanstack/react-start': 1.136.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1)) + '@tanstack/react-start': 1.162.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(tsx@4.21.0)(yaml@2.8.2)) transitivePeerDependencies: - react-dom - '@tanstack/react-form@1.28.0(@tanstack/react-start@1.136.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1)))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@tanstack/react-form@1.28.3(@tanstack/react-start@1.162.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(tsx@4.21.0)(yaml@2.8.2)))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - '@tanstack/form-core': 1.28.0 - '@tanstack/react-store': 0.8.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - react: 19.2.0 + '@tanstack/form-core': 1.28.3 + '@tanstack/react-store': 0.8.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + react: 19.2.4 optionalDependencies: - '@tanstack/react-start': 1.136.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1)) + '@tanstack/react-start': 1.162.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(tsx@4.21.0)(yaml@2.8.2)) transitivePeerDependencies: - react-dom - '@tanstack/react-query-devtools@5.90.2(@tanstack/react-query@5.90.10(react@19.2.0))(react@19.2.0)': + '@tanstack/react-query-devtools@5.91.3(@tanstack/react-query@5.90.21(react@19.2.4))(react@19.2.4)': dependencies: - '@tanstack/query-devtools': 5.90.1 - '@tanstack/react-query': 5.90.10(react@19.2.0) - react: 19.2.0 + '@tanstack/query-devtools': 5.93.0 + '@tanstack/react-query': 5.90.21(react@19.2.4) + react: 19.2.4 - '@tanstack/react-query@5.90.10(react@19.2.0)': + '@tanstack/react-query@5.90.21(react@19.2.4)': dependencies: - '@tanstack/query-core': 5.90.10 - react: 19.2.0 + '@tanstack/query-core': 5.90.20 + react: 19.2.4 - '@tanstack/react-router-devtools@1.136.8(@tanstack/react-router@1.136.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@tanstack/router-core@1.136.8)(@types/node@22.19.1)(csstype@3.2.3)(jiti@2.6.1)(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass-embedded@1.97.3)(sass@1.94.0)(solid-js@1.9.10)(tsx@4.20.6)(yaml@2.8.1)': + '@tanstack/react-router-devtools@1.162.4(@tanstack/react-router@1.162.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@tanstack/router-core@1.162.2)(csstype@3.2.3)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - '@tanstack/react-router': 1.136.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@tanstack/router-devtools-core': 1.136.8(@tanstack/router-core@1.136.8)(@types/node@22.19.1)(csstype@3.2.3)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(solid-js@1.9.10)(tsx@4.20.6)(yaml@2.8.1) - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) - vite: 7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1) + '@tanstack/react-router': 1.162.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@tanstack/router-devtools-core': 1.162.2(@tanstack/router-core@1.162.2)(csstype@3.2.3) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) optionalDependencies: - '@tanstack/router-core': 1.136.8 + '@tanstack/router-core': 1.162.2 transitivePeerDependencies: - - '@types/node' - csstype - - jiti - - less - - lightningcss - - sass - - sass-embedded - - solid-js - - stylus - - sugarss - - terser - - tsx - - yaml - '@tanstack/react-router-ssr-query@1.136.8(@tanstack/query-core@5.90.10)(@tanstack/react-query@5.90.10(react@19.2.0))(@tanstack/react-router@1.136.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@tanstack/router-core@1.136.8)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@tanstack/react-router-ssr-query@1.162.4(@tanstack/query-core@5.90.20)(@tanstack/react-query@5.90.21(react@19.2.4))(@tanstack/react-router@1.162.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@tanstack/router-core@1.162.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - '@tanstack/query-core': 5.90.10 - '@tanstack/react-query': 5.90.10(react@19.2.0) - '@tanstack/react-router': 1.136.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@tanstack/router-ssr-query-core': 1.136.8(@tanstack/query-core@5.90.10)(@tanstack/router-core@1.136.8) - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + '@tanstack/query-core': 5.90.20 + '@tanstack/react-query': 5.90.21(react@19.2.4) + '@tanstack/react-router': 1.162.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@tanstack/router-ssr-query-core': 1.162.2(@tanstack/query-core@5.90.20)(@tanstack/router-core@1.162.2) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) transitivePeerDependencies: - '@tanstack/router-core' - '@tanstack/react-router@1.136.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@tanstack/react-router@1.162.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - '@tanstack/history': 1.133.28 - '@tanstack/react-store': 0.8.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@tanstack/router-core': 1.136.8 - isbot: 5.1.32 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + '@tanstack/history': 1.161.4 + '@tanstack/react-store': 0.9.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@tanstack/router-core': 1.162.2 + isbot: 5.1.35 + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) tiny-invariant: 1.3.3 tiny-warning: 1.0.3 - '@tanstack/react-start-client@1.136.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@tanstack/react-start-client@1.162.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - '@tanstack/react-router': 1.136.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@tanstack/router-core': 1.136.8 - '@tanstack/start-client-core': 1.136.8 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + '@tanstack/react-router': 1.162.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@tanstack/router-core': 1.162.2 + '@tanstack/start-client-core': 1.162.2 + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) tiny-invariant: 1.3.3 tiny-warning: 1.0.3 - '@tanstack/react-start-server@1.136.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@tanstack/react-start-server@1.162.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - '@tanstack/history': 1.133.28 - '@tanstack/react-router': 1.136.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@tanstack/router-core': 1.136.8 - '@tanstack/start-client-core': 1.136.8 - '@tanstack/start-server-core': 1.136.8 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + '@tanstack/history': 1.161.4 + '@tanstack/react-router': 1.162.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@tanstack/router-core': 1.162.2 + '@tanstack/start-client-core': 1.162.2 + '@tanstack/start-server-core': 1.162.2 + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) transitivePeerDependencies: - crossws - '@tanstack/react-start@1.136.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1))': + '@tanstack/react-start@1.162.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(tsx@4.21.0)(yaml@2.8.2))': dependencies: - '@tanstack/react-router': 1.136.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@tanstack/react-start-client': 1.136.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@tanstack/react-start-server': 1.136.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@tanstack/router-utils': 1.133.19 - '@tanstack/start-client-core': 1.136.8 - '@tanstack/start-plugin-core': 1.136.8(@tanstack/react-router@1.136.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1)) - '@tanstack/start-server-core': 1.136.8 + '@tanstack/react-router': 1.162.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@tanstack/react-start-client': 1.162.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@tanstack/react-start-server': 1.162.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@tanstack/router-utils': 1.161.4 + '@tanstack/start-client-core': 1.162.2 + '@tanstack/start-plugin-core': 1.162.4(@tanstack/react-router@1.162.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(tsx@4.21.0)(yaml@2.8.2)) + '@tanstack/start-server-core': 1.162.2 pathe: 2.0.3 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) - vite: 7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + vite: 7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - '@rsbuild/core' - crossws @@ -8279,153 +7097,126 @@ snapshots: - vite-plugin-solid - webpack - '@tanstack/react-store@0.7.7(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@tanstack/react-store@0.8.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - '@tanstack/store': 0.7.7 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) - use-sync-external-store: 1.6.0(react@19.2.0) + '@tanstack/store': 0.8.1 + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + use-sync-external-store: 1.6.0(react@19.2.4) - '@tanstack/react-store@0.8.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@tanstack/react-store@0.9.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - '@tanstack/store': 0.8.0 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) - use-sync-external-store: 1.6.0(react@19.2.0) + '@tanstack/store': 0.9.1 + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + use-sync-external-store: 1.6.0(react@19.2.4) - '@tanstack/router-core@1.136.8': + '@tanstack/router-core@1.162.2': dependencies: - '@tanstack/history': 1.133.28 - '@tanstack/store': 0.8.0 + '@tanstack/history': 1.161.4 + '@tanstack/store': 0.9.1 cookie-es: 2.0.0 - seroval: 1.4.0 - seroval-plugins: 1.4.0(seroval@1.4.0) + seroval: 1.5.0 + seroval-plugins: 1.5.0(seroval@1.5.0) tiny-invariant: 1.3.3 tiny-warning: 1.0.3 - '@tanstack/router-devtools-core@1.136.8(@tanstack/router-core@1.136.8)(@types/node@22.19.1)(csstype@3.2.3)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(solid-js@1.9.10)(tsx@4.20.6)(yaml@2.8.1)': + '@tanstack/router-devtools-core@1.162.2(@tanstack/router-core@1.162.2)(csstype@3.2.3)': dependencies: - '@tanstack/router-core': 1.136.8 + '@tanstack/router-core': 1.162.2 clsx: 2.1.1 goober: 2.1.18(csstype@3.2.3) - solid-js: 1.9.10 tiny-invariant: 1.3.3 - vite: 7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1) optionalDependencies: csstype: 3.2.3 - transitivePeerDependencies: - - '@types/node' - - jiti - - less - - lightningcss - - sass - - sass-embedded - - stylus - - sugarss - - terser - - tsx - - yaml - '@tanstack/router-generator@1.136.8': + '@tanstack/router-generator@1.162.2': dependencies: - '@tanstack/router-core': 1.136.8 - '@tanstack/router-utils': 1.133.19 - '@tanstack/virtual-file-routes': 1.133.19 - prettier: 3.6.2 + '@tanstack/router-core': 1.162.2 + '@tanstack/router-utils': 1.161.4 + '@tanstack/virtual-file-routes': 1.161.4 + prettier: 3.8.1 recast: 0.23.11 source-map: 0.7.6 - tsx: 4.20.6 + tsx: 4.21.0 zod: 3.25.76 transitivePeerDependencies: - supports-color - '@tanstack/router-plugin@1.136.8(@tanstack/react-router@1.136.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1))': - dependencies: - '@babel/core': 7.28.5 - '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.5) - '@babel/template': 7.27.2 - '@babel/traverse': 7.28.5 - '@babel/types': 7.28.5 - '@tanstack/router-core': 1.136.8 - '@tanstack/router-generator': 1.136.8 - '@tanstack/router-utils': 1.133.19 - '@tanstack/virtual-file-routes': 1.133.19 - babel-dead-code-elimination: 1.0.10 + '@tanstack/router-plugin@1.162.4(@tanstack/react-router@1.162.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(tsx@4.21.0)(yaml@2.8.2))': + dependencies: + '@babel/core': 7.29.0 + '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.0) + '@babel/template': 7.28.6 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 + '@tanstack/router-core': 1.162.2 + '@tanstack/router-generator': 1.162.2 + '@tanstack/router-utils': 1.161.4 + '@tanstack/virtual-file-routes': 1.161.4 chokidar: 3.6.0 - unplugin: 2.3.10 + unplugin: 2.3.11 zod: 3.25.76 optionalDependencies: - '@tanstack/react-router': 1.136.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - vite: 7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1) + '@tanstack/react-router': 1.162.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + vite: 7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - supports-color - '@tanstack/router-ssr-query-core@1.136.8(@tanstack/query-core@5.90.10)(@tanstack/router-core@1.136.8)': + '@tanstack/router-ssr-query-core@1.162.2(@tanstack/query-core@5.90.20)(@tanstack/router-core@1.162.2)': dependencies: - '@tanstack/query-core': 5.90.10 - '@tanstack/router-core': 1.136.8 + '@tanstack/query-core': 5.90.20 + '@tanstack/router-core': 1.162.2 - '@tanstack/router-utils@1.133.19': + '@tanstack/router-utils@1.161.4': dependencies: - '@babel/core': 7.28.5 - '@babel/generator': 7.28.5 - '@babel/parser': 7.28.5 - '@babel/preset-typescript': 7.28.5(@babel/core@7.28.5) + '@babel/core': 7.29.0 + '@babel/generator': 7.29.1 + '@babel/parser': 7.29.0 + '@babel/types': 7.29.0 ansis: 4.2.0 - diff: 8.0.2 + babel-dead-code-elimination: 1.0.12 + diff: 8.0.3 pathe: 2.0.3 tinyglobby: 0.2.15 transitivePeerDependencies: - supports-color - '@tanstack/server-functions-plugin@1.134.5(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1))': - dependencies: - '@babel/code-frame': 7.27.1 - '@babel/core': 7.28.5 - '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.5) - '@babel/template': 7.27.2 - '@babel/traverse': 7.28.5 - '@babel/types': 7.28.5 - '@tanstack/directive-functions-plugin': 1.134.5(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1)) - babel-dead-code-elimination: 1.0.10 - tiny-invariant: 1.3.3 - transitivePeerDependencies: - - supports-color - - vite - - '@tanstack/start-client-core@1.136.8': + '@tanstack/start-client-core@1.162.2': dependencies: - '@tanstack/router-core': 1.136.8 - '@tanstack/start-storage-context': 1.136.8 - seroval: 1.4.0 + '@tanstack/router-core': 1.162.2 + '@tanstack/start-fn-stubs': 1.161.4 + '@tanstack/start-storage-context': 1.162.2 + seroval: 1.5.0 tiny-invariant: 1.3.3 tiny-warning: 1.0.3 - '@tanstack/start-plugin-core@1.136.8(@tanstack/react-router@1.136.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1))': + '@tanstack/start-fn-stubs@1.161.4': {} + + '@tanstack/start-plugin-core@1.162.4(@tanstack/react-router@1.162.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(tsx@4.21.0)(yaml@2.8.2))': dependencies: - '@babel/code-frame': 7.26.2 - '@babel/core': 7.28.5 - '@babel/types': 7.28.5 + '@babel/code-frame': 7.27.1 + '@babel/core': 7.29.0 + '@babel/types': 7.29.0 '@rolldown/pluginutils': 1.0.0-beta.40 - '@tanstack/router-core': 1.136.8 - '@tanstack/router-generator': 1.136.8 - '@tanstack/router-plugin': 1.136.8(@tanstack/react-router@1.136.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1)) - '@tanstack/router-utils': 1.133.19 - '@tanstack/server-functions-plugin': 1.134.5(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1)) - '@tanstack/start-client-core': 1.136.8 - '@tanstack/start-server-core': 1.136.8 - babel-dead-code-elimination: 1.0.10 - cheerio: 1.1.2 + '@tanstack/router-core': 1.162.2 + '@tanstack/router-generator': 1.162.2 + '@tanstack/router-plugin': 1.162.4(@tanstack/react-router@1.162.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(tsx@4.21.0)(yaml@2.8.2)) + '@tanstack/router-utils': 1.161.4 + '@tanstack/start-client-core': 1.162.2 + '@tanstack/start-server-core': 1.162.2 + cheerio: 1.2.0 exsolve: 1.0.8 pathe: 2.0.3 - srvx: 0.8.16 + picomatch: 4.0.3 + source-map: 0.7.6 + srvx: 0.11.7 tinyglobby: 0.2.15 - ufo: 1.6.1 - vite: 7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1) - vitefu: 1.1.1(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1)) - xmlbuilder2: 3.1.1 + ufo: 1.6.3 + vite: 7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(tsx@4.21.0)(yaml@2.8.2) + vitefu: 1.1.2(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(tsx@4.21.0)(yaml@2.8.2)) + xmlbuilder2: 4.0.3 zod: 3.25.76 transitivePeerDependencies: - '@rsbuild/core' @@ -8435,32 +7226,32 @@ snapshots: - vite-plugin-solid - webpack - '@tanstack/start-server-core@1.136.8': + '@tanstack/start-server-core@1.162.2': dependencies: - '@tanstack/history': 1.133.28 - '@tanstack/router-core': 1.136.8 - '@tanstack/start-client-core': 1.136.8 - '@tanstack/start-storage-context': 1.136.8 - h3-v2: h3@2.0.0-beta.4 - seroval: 1.4.0 + '@tanstack/history': 1.161.4 + '@tanstack/router-core': 1.162.2 + '@tanstack/start-client-core': 1.162.2 + '@tanstack/start-storage-context': 1.162.2 + h3-v2: h3@2.0.1-rc.14 + seroval: 1.5.0 tiny-invariant: 1.3.3 transitivePeerDependencies: - crossws - '@tanstack/start-storage-context@1.136.8': + '@tanstack/start-storage-context@1.162.2': dependencies: - '@tanstack/router-core': 1.136.8 + '@tanstack/router-core': 1.162.2 - '@tanstack/store@0.7.7': {} + '@tanstack/store@0.8.1': {} - '@tanstack/store@0.8.0': {} + '@tanstack/store@0.9.1': {} - '@tanstack/virtual-file-routes@1.133.19': {} + '@tanstack/virtual-file-routes@1.161.4': {} '@testing-library/dom@10.4.1': dependencies: - '@babel/code-frame': 7.27.1 - '@babel/runtime': 7.28.4 + '@babel/code-frame': 7.29.0 + '@babel/runtime': 7.28.6 '@types/aria-query': 5.0.4 aria-query: 5.3.0 dom-accessibility-api: 0.5.16 @@ -8468,20 +7259,20 @@ snapshots: picocolors: 1.1.1 pretty-format: 27.5.1 - '@testing-library/react@16.3.0(@testing-library/dom@10.4.1)(@types/react-dom@19.2.3(@types/react@19.2.5))(@types/react@19.2.5)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@testing-library/react@16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - '@babel/runtime': 7.28.4 + '@babel/runtime': 7.28.6 '@testing-library/dom': 10.4.1 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) optionalDependencies: - '@types/react': 19.2.5 - '@types/react-dom': 19.2.3(@types/react@19.2.5) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) '@tokenizer/inflate@0.4.1': dependencies: debug: 4.4.3 - token-types: 6.1.1 + token-types: 6.1.2 transitivePeerDependencies: - supports-color @@ -8491,24 +7282,24 @@ snapshots: '@types/babel__core@7.20.5': dependencies: - '@babel/parser': 7.28.5 - '@babel/types': 7.28.5 + '@babel/parser': 7.29.0 + '@babel/types': 7.29.0 '@types/babel__generator': 7.27.0 '@types/babel__template': 7.4.4 '@types/babel__traverse': 7.28.0 '@types/babel__generator@7.27.0': dependencies: - '@babel/types': 7.28.5 + '@babel/types': 7.29.0 '@types/babel__template@7.4.4': dependencies: - '@babel/parser': 7.28.5 - '@babel/types': 7.28.5 + '@babel/parser': 7.29.0 + '@babel/types': 7.29.0 '@types/babel__traverse@7.28.0': dependencies: - '@babel/types': 7.28.5 + '@babel/types': 7.29.0 '@types/chai@5.2.3': dependencies: @@ -8517,30 +7308,27 @@ snapshots: '@types/cors@2.8.19': dependencies: - '@types/node': 22.19.1 + '@types/node': 22.19.11 '@types/deep-eql@4.0.2': {} '@types/estree@1.0.8': {} - '@types/node@22.19.1': + '@types/node@22.19.11': dependencies: undici-types: 6.21.0 - '@types/nodemailer@7.0.4': + '@types/nodemailer@7.0.11': dependencies: - '@aws-sdk/client-sesv2': 3.962.0 - '@types/node': 22.19.1 - transitivePeerDependencies: - - aws-crt + '@types/node': 22.19.11 '@types/normalize-package-data@2.4.4': {} - '@types/react-dom@19.2.3(@types/react@19.2.5)': + '@types/react-dom@19.2.3(@types/react@19.2.14)': dependencies: - '@types/react': 19.2.5 + '@types/react': 19.2.14 - '@types/react@19.2.5': + '@types/react@19.2.14': dependencies: csstype: 3.2.3 @@ -8550,55 +7338,54 @@ snapshots: '@types/yauzl@2.10.3': dependencies: - '@types/node': 22.19.1 + '@types/node': 22.19.11 optional: true - '@typescript-eslint/project-service@8.46.4(typescript@5.9.3)': + '@typescript-eslint/project-service@8.56.0(typescript@5.9.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.46.4(typescript@5.9.3) - '@typescript-eslint/types': 8.46.4 + '@typescript-eslint/tsconfig-utils': 8.56.0(typescript@5.9.3) + '@typescript-eslint/types': 8.56.0 debug: 4.4.3 typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/tsconfig-utils@8.46.4(typescript@5.9.3)': + '@typescript-eslint/tsconfig-utils@8.56.0(typescript@5.9.3)': dependencies: typescript: 5.9.3 - '@typescript-eslint/types@8.46.4': {} + '@typescript-eslint/types@8.56.0': {} - '@typescript-eslint/typescript-estree@8.46.4(typescript@5.9.3)': + '@typescript-eslint/typescript-estree@8.56.0(typescript@5.9.3)': dependencies: - '@typescript-eslint/project-service': 8.46.4(typescript@5.9.3) - '@typescript-eslint/tsconfig-utils': 8.46.4(typescript@5.9.3) - '@typescript-eslint/types': 8.46.4 - '@typescript-eslint/visitor-keys': 8.46.4 + '@typescript-eslint/project-service': 8.56.0(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.56.0(typescript@5.9.3) + '@typescript-eslint/types': 8.56.0 + '@typescript-eslint/visitor-keys': 8.56.0 debug: 4.4.3 - fast-glob: 3.3.3 - is-glob: 4.0.3 - minimatch: 9.0.5 - semver: 7.7.3 - ts-api-utils: 2.1.0(typescript@5.9.3) + minimatch: 9.0.6 + semver: 7.7.4 + tinyglobby: 0.2.15 + ts-api-utils: 2.4.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.46.4': + '@typescript-eslint/visitor-keys@8.56.0': dependencies: - '@typescript-eslint/types': 8.46.4 - eslint-visitor-keys: 4.2.1 + '@typescript-eslint/types': 8.56.0 + eslint-visitor-keys: 5.0.1 - '@vercel/nft@0.29.4(rollup@4.53.2)': + '@vercel/nft@0.29.4(rollup@4.59.0)': dependencies: - '@mapbox/node-pre-gyp': 2.0.0 - '@rollup/pluginutils': 5.3.0(rollup@4.53.2) - acorn: 8.15.0 - acorn-import-attributes: 1.9.5(acorn@8.15.0) + '@mapbox/node-pre-gyp': 2.0.3 + '@rollup/pluginutils': 5.3.0(rollup@4.59.0) + acorn: 8.16.0 + acorn-import-attributes: 1.9.5(acorn@8.16.0) async-sema: 3.1.1 bindings: 1.5.0 estree-walker: 2.0.2 - glob: 10.4.5 + glob: 10.5.0 graceful-fs: 4.2.11 node-gyp-build: 4.8.4 picomatch: 4.0.3 @@ -8608,15 +7395,15 @@ snapshots: - rollup - supports-color - '@vitejs/plugin-react@5.1.1(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1))': + '@vitejs/plugin-react@5.1.4(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(tsx@4.21.0)(yaml@2.8.2))': dependencies: - '@babel/core': 7.28.5 - '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.28.5) - '@rolldown/pluginutils': 1.0.0-beta.47 + '@babel/core': 7.29.0 + '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.29.0) + '@rolldown/pluginutils': 1.0.0-rc.3 '@types/babel__core': 7.20.5 react-refresh: 0.18.0 - vite: 7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - supports-color @@ -8628,13 +7415,13 @@ snapshots: chai: 5.3.3 tinyrainbow: 2.0.0 - '@vitest/mocker@3.2.4(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1))': + '@vitest/mocker@3.2.4(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@vitest/spy': 3.2.4 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(tsx@4.21.0)(yaml@2.8.2) '@vitest/pretty-format@3.2.4': dependencies: @@ -8662,37 +7449,37 @@ snapshots: loupe: 3.2.1 tinyrainbow: 2.0.0 - '@vue/compiler-core@3.5.24': + '@vue/compiler-core@3.5.28': dependencies: - '@babel/parser': 7.28.5 - '@vue/shared': 3.5.24 - entities: 4.5.0 + '@babel/parser': 7.29.0 + '@vue/shared': 3.5.28 + entities: 7.0.1 estree-walker: 2.0.2 source-map-js: 1.2.1 - '@vue/compiler-dom@3.5.24': + '@vue/compiler-dom@3.5.28': dependencies: - '@vue/compiler-core': 3.5.24 - '@vue/shared': 3.5.24 + '@vue/compiler-core': 3.5.28 + '@vue/shared': 3.5.28 - '@vue/compiler-sfc@3.5.24': + '@vue/compiler-sfc@3.5.28': dependencies: - '@babel/parser': 7.28.5 - '@vue/compiler-core': 3.5.24 - '@vue/compiler-dom': 3.5.24 - '@vue/compiler-ssr': 3.5.24 - '@vue/shared': 3.5.24 + '@babel/parser': 7.29.0 + '@vue/compiler-core': 3.5.28 + '@vue/compiler-dom': 3.5.28 + '@vue/compiler-ssr': 3.5.28 + '@vue/shared': 3.5.28 estree-walker: 2.0.2 magic-string: 0.30.21 postcss: 8.5.6 source-map-js: 1.2.1 - '@vue/compiler-ssr@3.5.24': + '@vue/compiler-ssr@3.5.28': dependencies: - '@vue/compiler-dom': 3.5.24 - '@vue/shared': 3.5.24 + '@vue/compiler-dom': 3.5.28 + '@vue/shared': 3.5.28 - '@vue/shared@3.5.24': {} + '@vue/shared@3.5.28': {} '@whatwg-node/disposablestack@0.0.6': dependencies: @@ -8701,10 +7488,10 @@ snapshots: '@whatwg-node/fetch@0.10.13': dependencies: - '@whatwg-node/node-fetch': 0.8.4 + '@whatwg-node/node-fetch': 0.8.5 urlpattern-polyfill: 10.1.0 - '@whatwg-node/node-fetch@0.8.4': + '@whatwg-node/node-fetch@0.8.5': dependencies: '@fastify/busboy': 3.2.0 '@whatwg-node/disposablestack': 0.0.6 @@ -8715,7 +7502,7 @@ snapshots: dependencies: tslib: 2.8.1 - '@whatwg-node/server@0.10.17': + '@whatwg-node/server@0.10.18': dependencies: '@envelop/instrumentation': 1.0.0 '@whatwg-node/disposablestack': 0.0.6 @@ -8734,23 +7521,27 @@ snapshots: mime-types: 2.1.35 negotiator: 0.6.3 - acorn-import-attributes@1.9.5(acorn@8.15.0): + acorn-import-attributes@1.9.5(acorn@8.16.0): + dependencies: + acorn: 8.16.0 + + acorn-walk@8.3.5: dependencies: - acorn: 8.15.0 + acorn: 8.16.0 - acorn@8.15.0: {} + acorn@8.16.0: {} agent-base@7.1.4: {} - ajv-errors@3.0.0(ajv@8.17.1): + ajv-errors@3.0.0(ajv@8.18.0): dependencies: - ajv: 8.17.1 + ajv: 8.18.0 - ajv-formats@3.0.1(ajv@8.17.1): + ajv-formats@3.0.1(ajv@8.18.0): optionalDependencies: - ajv: 8.17.1 + ajv: 8.18.0 - ajv@8.17.1: + ajv@8.18.0: dependencies: fast-deep-equal: 3.1.3 fast-uri: 3.1.0 @@ -8778,11 +7569,11 @@ snapshots: archiver-utils@5.0.2: dependencies: - glob: 10.4.5 + glob: 10.5.0 graceful-fs: 4.2.11 is-stream: 2.0.1 lazystream: 1.0.1 - lodash: 4.17.21 + lodash: 4.17.23 normalize-path: 3.0.0 readable-stream: 4.7.0 @@ -8799,14 +7590,34 @@ snapshots: - bare-abort-controller - react-native-b4a - argparse@1.0.10: - dependencies: - sprintf-js: 1.0.3 + argparse@2.0.1: {} aria-query@5.3.0: dependencies: dequal: 2.0.3 + array-buffer-byte-length@1.0.2: + dependencies: + call-bound: 1.0.4 + is-array-buffer: 3.0.5 + + array.prototype.flatmap@1.3.3: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.24.1 + es-shim-unscopables: 1.1.0 + + arraybuffer.prototype.slice@1.0.4: + dependencies: + array-buffer-byte-length: 1.0.2 + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.24.1 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + is-array-buffer: 3.0.5 + assertion-error@2.0.1: {} ast-module-types@6.0.1: {} @@ -8815,47 +7626,55 @@ snapshots: dependencies: tslib: 2.8.1 + async-function@1.0.0: {} + async-sema@3.1.1: {} async@3.2.6: {} atomic-sleep@1.0.0: {} - atomically@2.1.0: + atomically@2.1.1: dependencies: stubborn-fs: 2.0.0 when-exit: 2.1.5 - b4a@1.7.3: {} + available-typed-arrays@1.0.7: + dependencies: + possible-typed-array-names: 1.1.0 + + b4a@1.8.0: {} - babel-dead-code-elimination@1.0.10: + babel-dead-code-elimination@1.0.12: dependencies: - '@babel/core': 7.28.5 - '@babel/parser': 7.28.5 - '@babel/traverse': 7.28.5 - '@babel/types': 7.28.5 + '@babel/core': 7.29.0 + '@babel/parser': 7.29.0 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 transitivePeerDependencies: - supports-color babel-plugin-react-compiler@1.0.0: dependencies: - '@babel/types': 7.28.5 + '@babel/types': 7.29.0 balanced-match@1.0.2: {} + balanced-match@4.0.4: {} + bare-events@2.8.2: {} base64-js@1.5.1: {} base64id@2.0.0: {} - baseline-browser-mapping@2.8.29: {} + baseline-browser-mapping@2.10.0: {} - better-ajv-errors@1.2.0(ajv@8.17.1): + better-ajv-errors@1.2.0(ajv@8.18.0): dependencies: - '@babel/code-frame': 7.27.1 + '@babel/code-frame': 7.29.0 '@humanwhocodes/momoa': 2.0.4 - ajv: 8.17.1 + ajv: 8.18.0 chalk: 4.1.2 jsonpointer: 5.0.1 leven: 3.1.0 @@ -8872,23 +7691,25 @@ snapshots: boolbase@1.0.0: {} - bowser@2.13.1: {} - brace-expansion@2.0.2: dependencies: balanced-match: 1.0.2 + brace-expansion@5.0.3: + dependencies: + balanced-match: 4.0.4 + braces@3.0.3: dependencies: fill-range: 7.1.1 - browserslist@4.28.0: + browserslist@4.28.1: dependencies: - baseline-browser-mapping: 2.8.29 - caniuse-lite: 1.0.30001755 - electron-to-chromium: 1.5.254 + baseline-browser-mapping: 2.10.0 + caniuse-lite: 1.0.30001774 + electron-to-chromium: 1.5.302 node-releases: 2.0.27 - update-browserslist-db: 1.1.4(browserslist@4.28.0) + update-browserslist-db: 1.2.3(browserslist@4.28.1) buffer-crc32@0.2.13: {} @@ -8900,19 +7721,36 @@ snapshots: buffer@6.0.3: dependencies: - base64-js: 1.5.1 - ieee754: 1.2.1 + base64-js: 1.5.1 + ieee754: 1.2.1 + + cac@6.7.14: {} + + call-bind-apply-helpers@1.0.2: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + + call-bind@1.0.8: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + get-intrinsic: 1.3.0 + set-function-length: 1.2.2 - cac@6.7.14: {} + call-bound@1.0.4: + dependencies: + call-bind-apply-helpers: 1.0.2 + get-intrinsic: 1.3.0 callsite@1.0.0: {} - caniuse-lite@1.0.30001755: {} + caniuse-lite@1.0.30001774: {} chai@5.3.3: dependencies: assertion-error: 2.0.1 - check-error: 2.1.1 + check-error: 2.1.3 deep-eql: 5.0.2 loupe: 3.2.1 pathval: 2.0.1 @@ -8924,7 +7762,7 @@ snapshots: chalk@5.6.2: {} - check-error@2.1.1: {} + check-error@2.1.3: {} cheerio-select@2.1.0: dependencies: @@ -8935,18 +7773,18 @@ snapshots: domhandler: 5.0.3 domutils: 3.2.2 - cheerio@1.1.2: + cheerio@1.2.0: dependencies: cheerio-select: 2.1.0 dom-serializer: 2.0.0 domhandler: 5.0.3 domutils: 3.2.2 encoding-sniffer: 0.2.1 - htmlparser2: 10.0.0 + htmlparser2: 10.1.0 parse5: 7.3.0 parse5-htmlparser2-tree-adapter: 7.1.0 parse5-parser-stream: 7.1.2 - undici: 7.16.0 + undici: 7.22.0 whatwg-mimetype: 4.0.0 chokidar@3.6.0: @@ -8965,6 +7803,10 @@ snapshots: dependencies: readdirp: 4.1.2 + chokidar@5.0.0: + dependencies: + readdirp: 5.0.0 + chownr@3.0.0: {} citty@0.1.6: @@ -8984,7 +7826,7 @@ snapshots: clipboardy@4.0.0: dependencies: execa: 8.0.1 - is-wsl: 3.1.0 + is-wsl: 3.1.1 is64bit: 2.0.0 cliui@8.0.1: @@ -9018,9 +7860,6 @@ snapshots: colorette@2.0.20: {} - colorjs.io@0.5.2: - optional: true - commander@10.0.1: {} commander@11.1.0: {} @@ -9050,21 +7889,21 @@ snapshots: tree-kill: 1.2.2 yargs: 17.7.2 - conf@15.0.2: + conf@15.1.0: dependencies: - ajv: 8.17.1 - ajv-formats: 3.0.1(ajv@8.17.1) - atomically: 2.1.0 + ajv: 8.18.0 + ajv-formats: 3.0.1(ajv@8.18.0) + atomically: 2.1.1 debounce-fn: 6.0.0 dot-prop: 10.1.0 env-paths: 3.0.0 json-schema-typed: 8.0.2 - semver: 7.7.3 + semver: 7.7.4 uint8array-extras: 1.5.0 confbox@0.1.8: {} - confbox@0.2.2: {} + confbox@0.2.4: {} consola@3.4.2: {} @@ -9076,8 +7915,6 @@ snapshots: cookie@0.7.2: {} - cookie@1.0.2: {} - cookie@1.1.1: {} copy-file@11.1.0: @@ -9087,7 +7924,7 @@ snapshots: core-util-is@1.0.3: {} - cors@2.8.5: + cors@2.8.6: dependencies: object-assign: 4.1.1 vary: 1.1.2 @@ -9139,32 +7976,41 @@ snapshots: dependencies: css-tree: 2.2.1 - cssstyle@5.3.3: + cssstyle@5.3.7: dependencies: - '@asamuzakjp/css-color': 4.0.5 - '@csstools/css-syntax-patches-for-csstree': 1.0.16 + '@asamuzakjp/css-color': 4.1.2 + '@csstools/css-syntax-patches-for-csstree': 1.0.28 css-tree: 3.1.0 + lru-cache: 11.2.6 csstype@3.2.3: {} data-uri-to-buffer@4.0.1: {} - data-urls@6.0.0: + data-urls@6.0.1: dependencies: - whatwg-mimetype: 4.0.0 + whatwg-mimetype: 5.0.0 whatwg-url: 15.1.0 - dateformat@4.6.3: {} - - debounce-fn@6.0.0: + data-view-buffer@1.0.2: dependencies: - mimic-function: 5.0.1 + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 - debounce@2.2.0: {} + data-view-byte-length@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 - debug@4.3.7: + data-view-byte-offset@1.0.1: dependencies: - ms: 2.1.3 + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 + + dateformat@4.6.3: {} debounce-fn@6.0.0: dependencies: @@ -9172,10 +8018,6 @@ snapshots: debounce@2.2.0: {} - debug@4.3.7: - dependencies: - ms: 2.1.3 - debug@4.4.3: dependencies: ms: 2.1.3 @@ -9188,20 +8030,30 @@ snapshots: decode-formdata@0.9.0: {} - dedent@1.7.0: {} + dedent@1.7.1: {} deep-eql@5.0.2: {} deepmerge@4.3.1: {} + define-data-property@1.1.4: + dependencies: + es-define-property: 1.0.1 + es-errors: 1.3.0 + gopd: 1.2.0 + + define-properties@1.2.1: + dependencies: + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 + object-keys: 1.1.1 + defu@6.1.4: {} dequal@2.0.3: {} destr@2.0.5: {} - detect-libc@1.0.3: {} - detect-libc@2.1.2: {} detective-amd@6.0.1: @@ -9240,7 +8092,7 @@ snapshots: detective-typescript@14.0.0(typescript@5.9.3): dependencies: - '@typescript-eslint/typescript-estree': 8.46.4(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.56.0(typescript@5.9.3) ast-module-types: 6.0.1 node-source-walk: 7.0.1 typescript: 5.9.3 @@ -9250,7 +8102,7 @@ snapshots: detective-vue2@2.2.0(typescript@5.9.3): dependencies: '@dependents/detective-less': 5.0.1 - '@vue/compiler-sfc': 3.5.24 + '@vue/compiler-sfc': 3.5.28 detective-es6: 5.0.1 detective-sass: 6.0.1 detective-scss: 5.0.1 @@ -9262,9 +8114,9 @@ snapshots: dettle@1.0.5: {} - devalue@5.6.2: {} + devalue@5.6.3: {} - diff@8.0.2: {} + diff@8.0.3: {} dom-accessibility-api@0.5.16: {} @@ -9288,7 +8140,7 @@ snapshots: dot-prop@10.1.0: dependencies: - type-fest: 5.3.1 + type-fest: 5.4.4 dot-prop@9.0.0: dependencies: @@ -9296,7 +8148,13 @@ snapshots: dotenv@16.6.1: {} - dotenv@17.2.4: {} + dotenv@17.3.1: {} + + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-errors: 1.3.0 + gopd: 1.2.0 eastasianwidth@0.2.0: {} @@ -9304,15 +8162,15 @@ snapshots: dependencies: safe-buffer: 5.2.1 - electron-to-chromium@1.5.254: {} + electron-to-chromium@1.5.302: {} - elysia@1.4.19(@sinclair/typebox@0.34.41)(exact-mirror@0.2.5(@sinclair/typebox@0.34.41))(file-type@21.1.1)(openapi-types@12.1.3)(typescript@5.9.3): + elysia@1.4.25(@sinclair/typebox@0.34.48)(exact-mirror@0.2.7(@sinclair/typebox@0.34.48))(file-type@21.3.0)(openapi-types@12.1.3)(typescript@5.9.3): dependencies: - '@sinclair/typebox': 0.34.41 + '@sinclair/typebox': 0.34.48 cookie: 1.1.1 - exact-mirror: 0.2.5(@sinclair/typebox@0.34.41) + exact-mirror: 0.2.7(@sinclair/typebox@0.34.48) fast-decode-uri-component: 1.0.1 - file-type: 21.1.1 + file-type: 21.3.0 memoirist: 0.4.0 openapi-types: 12.1.3 optionalDependencies: @@ -9339,17 +8197,17 @@ snapshots: engine.io-parser@5.2.3: {} - engine.io@6.6.4: + engine.io@6.6.5: dependencies: '@types/cors': 2.8.19 - '@types/node': 22.19.1 + '@types/node': 22.19.11 accepts: 1.3.8 base64id: 2.0.0 cookie: 0.7.2 - cors: 2.8.5 - debug: 4.3.7 + cors: 2.8.6 + debug: 4.4.3 engine.io-parser: 5.2.3 - ws: 8.17.1 + ws: 8.18.3 transitivePeerDependencies: - bufferutil - supports-color @@ -9364,38 +8222,93 @@ snapshots: entities@6.0.1: {} + entities@7.0.1: {} + env-paths@3.0.0: {} + es-abstract@1.24.1: + dependencies: + array-buffer-byte-length: 1.0.2 + arraybuffer.prototype.slice: 1.0.4 + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.4 + data-view-buffer: 1.0.2 + data-view-byte-length: 1.0.2 + data-view-byte-offset: 1.0.1 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + es-set-tostringtag: 2.1.0 + es-to-primitive: 1.3.0 + function.prototype.name: 1.1.8 + get-intrinsic: 1.3.0 + get-proto: 1.0.1 + get-symbol-description: 1.1.0 + globalthis: 1.0.4 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + has-proto: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + internal-slot: 1.1.0 + is-array-buffer: 3.0.5 + is-callable: 1.2.7 + is-data-view: 1.0.2 + is-negative-zero: 2.0.3 + is-regex: 1.2.1 + is-set: 2.0.3 + is-shared-array-buffer: 1.0.4 + is-string: 1.1.1 + is-typed-array: 1.1.15 + is-weakref: 1.1.1 + math-intrinsics: 1.1.0 + object-inspect: 1.13.4 + object-keys: 1.1.1 + object.assign: 4.1.7 + own-keys: 1.0.1 + regexp.prototype.flags: 1.5.4 + safe-array-concat: 1.1.3 + safe-push-apply: 1.0.0 + safe-regex-test: 1.1.0 + set-proto: 1.0.0 + stop-iteration-iterator: 1.1.0 + string.prototype.trim: 1.2.10 + string.prototype.trimend: 1.0.9 + string.prototype.trimstart: 1.0.8 + typed-array-buffer: 1.0.3 + typed-array-byte-length: 1.0.3 + typed-array-byte-offset: 1.0.4 + typed-array-length: 1.0.7 + unbox-primitive: 1.1.0 + which-typed-array: 1.1.20 + + es-define-property@1.0.1: {} + + es-errors@1.3.0: {} + es-module-lexer@1.7.0: {} - esbuild@0.25.11: - optionalDependencies: - '@esbuild/aix-ppc64': 0.25.11 - '@esbuild/android-arm': 0.25.11 - '@esbuild/android-arm64': 0.25.11 - '@esbuild/android-x64': 0.25.11 - '@esbuild/darwin-arm64': 0.25.11 - '@esbuild/darwin-x64': 0.25.11 - '@esbuild/freebsd-arm64': 0.25.11 - '@esbuild/freebsd-x64': 0.25.11 - '@esbuild/linux-arm': 0.25.11 - '@esbuild/linux-arm64': 0.25.11 - '@esbuild/linux-ia32': 0.25.11 - '@esbuild/linux-loong64': 0.25.11 - '@esbuild/linux-mips64el': 0.25.11 - '@esbuild/linux-ppc64': 0.25.11 - '@esbuild/linux-riscv64': 0.25.11 - '@esbuild/linux-s390x': 0.25.11 - '@esbuild/linux-x64': 0.25.11 - '@esbuild/netbsd-arm64': 0.25.11 - '@esbuild/netbsd-x64': 0.25.11 - '@esbuild/openbsd-arm64': 0.25.11 - '@esbuild/openbsd-x64': 0.25.11 - '@esbuild/openharmony-arm64': 0.25.11 - '@esbuild/sunos-x64': 0.25.11 - '@esbuild/win32-arm64': 0.25.11 - '@esbuild/win32-ia32': 0.25.11 - '@esbuild/win32-x64': 0.25.11 + es-object-atoms@1.1.1: + dependencies: + es-errors: 1.3.0 + + es-set-tostringtag@2.1.0: + dependencies: + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + es-shim-unscopables@1.1.0: + dependencies: + hasown: 2.0.2 + + es-to-primitive@1.3.0: + dependencies: + is-callable: 1.2.7 + is-date-object: 1.1.0 + is-symbol: 1.1.1 esbuild@0.25.12: optionalDependencies: @@ -9426,6 +8339,64 @@ snapshots: '@esbuild/win32-ia32': 0.25.12 '@esbuild/win32-x64': 0.25.12 + esbuild@0.27.2: + optionalDependencies: + '@esbuild/aix-ppc64': 0.27.2 + '@esbuild/android-arm': 0.27.2 + '@esbuild/android-arm64': 0.27.2 + '@esbuild/android-x64': 0.27.2 + '@esbuild/darwin-arm64': 0.27.2 + '@esbuild/darwin-x64': 0.27.2 + '@esbuild/freebsd-arm64': 0.27.2 + '@esbuild/freebsd-x64': 0.27.2 + '@esbuild/linux-arm': 0.27.2 + '@esbuild/linux-arm64': 0.27.2 + '@esbuild/linux-ia32': 0.27.2 + '@esbuild/linux-loong64': 0.27.2 + '@esbuild/linux-mips64el': 0.27.2 + '@esbuild/linux-ppc64': 0.27.2 + '@esbuild/linux-riscv64': 0.27.2 + '@esbuild/linux-s390x': 0.27.2 + '@esbuild/linux-x64': 0.27.2 + '@esbuild/netbsd-arm64': 0.27.2 + '@esbuild/netbsd-x64': 0.27.2 + '@esbuild/openbsd-arm64': 0.27.2 + '@esbuild/openbsd-x64': 0.27.2 + '@esbuild/openharmony-arm64': 0.27.2 + '@esbuild/sunos-x64': 0.27.2 + '@esbuild/win32-arm64': 0.27.2 + '@esbuild/win32-ia32': 0.27.2 + '@esbuild/win32-x64': 0.27.2 + + esbuild@0.27.3: + optionalDependencies: + '@esbuild/aix-ppc64': 0.27.3 + '@esbuild/android-arm': 0.27.3 + '@esbuild/android-arm64': 0.27.3 + '@esbuild/android-x64': 0.27.3 + '@esbuild/darwin-arm64': 0.27.3 + '@esbuild/darwin-x64': 0.27.3 + '@esbuild/freebsd-arm64': 0.27.3 + '@esbuild/freebsd-x64': 0.27.3 + '@esbuild/linux-arm': 0.27.3 + '@esbuild/linux-arm64': 0.27.3 + '@esbuild/linux-ia32': 0.27.3 + '@esbuild/linux-loong64': 0.27.3 + '@esbuild/linux-mips64el': 0.27.3 + '@esbuild/linux-ppc64': 0.27.3 + '@esbuild/linux-riscv64': 0.27.3 + '@esbuild/linux-s390x': 0.27.3 + '@esbuild/linux-x64': 0.27.3 + '@esbuild/netbsd-arm64': 0.27.3 + '@esbuild/netbsd-x64': 0.27.3 + '@esbuild/openbsd-arm64': 0.27.3 + '@esbuild/openbsd-x64': 0.27.3 + '@esbuild/openharmony-arm64': 0.27.3 + '@esbuild/sunos-x64': 0.27.3 + '@esbuild/win32-arm64': 0.27.3 + '@esbuild/win32-ia32': 0.27.3 + '@esbuild/win32-x64': 0.27.3 + escalade@3.2.0: {} escape-string-regexp@5.0.0: {} @@ -9438,7 +8409,7 @@ snapshots: optionalDependencies: source-map: 0.6.1 - eslint-visitor-keys@4.2.1: {} + eslint-visitor-keys@5.0.1: {} esprima@4.0.1: {} @@ -9464,9 +8435,9 @@ snapshots: events@3.3.0: {} - exact-mirror@0.2.5(@sinclair/typebox@0.34.41): + exact-mirror@0.2.7(@sinclair/typebox@0.34.48): optionalDependencies: - '@sinclair/typebox': 0.34.41 + '@sinclair/typebox': 0.34.48 execa@8.0.1: dependencies: @@ -9480,7 +8451,7 @@ snapshots: signal-exit: 4.1.0 strip-final-newline: 3.0.0 - expect-type@1.2.2: {} + expect-type@1.3.0: {} exsolve@1.0.8: {} @@ -9514,11 +8485,7 @@ snapshots: fast-uri@3.1.0: {} - fast-xml-parser@5.2.5: - dependencies: - strnum: 2.1.2 - - fastq@1.19.1: + fastq@1.20.1: dependencies: reusify: 1.1.0 @@ -9537,17 +8504,15 @@ snapshots: node-domexception: 1.0.0 web-streams-polyfill: 3.3.3 - fetchdts@0.1.7: {} - figures@6.1.0: dependencies: is-unicode-supported: 2.1.0 - file-type@21.1.1: + file-type@21.3.0: dependencies: '@tokenizer/inflate': 0.4.1 strtok3: 10.3.4 - token-types: 6.1.1 + token-types: 6.1.2 uint8array-extras: 1.5.0 transitivePeerDependencies: - supports-color @@ -9570,6 +8535,10 @@ snapshots: fn.name@1.1.0: {} + for-each@0.3.5: + dependencies: + is-callable: 1.2.7 + foreground-child@3.3.1: dependencies: cross-spawn: 7.0.6 @@ -9584,6 +8553,19 @@ snapshots: function-bind@1.1.2: {} + function.prototype.name@1.1.8: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + functions-have-names: 1.2.3 + hasown: 2.0.2 + is-callable: 1.2.7 + + functions-have-names@1.2.3: {} + + generator-function@2.0.1: {} + gensync@1.0.0-beta.2: {} get-amd-module-type@6.0.1: @@ -9593,19 +8575,43 @@ snapshots: get-caller-file@2.0.5: {} - get-east-asian-width@1.4.0: {} + get-east-asian-width@1.5.0: {} + + get-intrinsic@1.3.0: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + function-bind: 1.1.2 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + math-intrinsics: 1.1.0 get-port-please@3.2.0: {} get-port@7.1.0: {} + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.1 + get-stream@5.2.0: dependencies: pump: 3.0.3 get-stream@8.0.1: {} - get-tsconfig@4.13.0: + get-symbol-description@1.1.0: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + + get-tsconfig@4.13.6: dependencies: resolve-pkg-maps: 1.0.0 @@ -9613,23 +8619,28 @@ snapshots: dependencies: is-glob: 4.0.3 - glob@10.4.5: + glob@10.5.0: dependencies: foreground-child: 3.3.1 jackspeak: 3.4.3 - minimatch: 9.0.5 - minipass: 7.1.2 + minimatch: 9.0.6 + minipass: 7.1.3 package-json-from-dist: 1.0.1 path-scurry: 1.11.1 glob@11.1.0: dependencies: foreground-child: 3.3.1 - jackspeak: 4.1.1 - minimatch: 10.1.1 - minipass: 7.1.2 + jackspeak: 4.2.3 + minimatch: 10.2.2 + minipass: 7.1.3 package-json-from-dist: 1.0.1 - path-scurry: 2.0.1 + path-scurry: 2.0.2 + + globalthis@1.0.4: + dependencies: + define-properties: 1.2.1 + gopd: 1.2.0 globrex@0.1.2: {} @@ -9641,29 +8652,45 @@ snapshots: dependencies: csstype: 3.2.3 + gopd@1.2.0: {} + graceful-fs@4.2.11: {} - h3@1.15.4: + h3@1.15.5: dependencies: cookie-es: 1.2.2 crossws: 0.3.5 defu: 6.1.4 destr: 2.0.5 iron-webcrypto: 1.2.1 - node-mock-http: 1.0.3 + node-mock-http: 1.0.4 radix3: 1.1.2 - ufo: 1.6.1 + ufo: 1.6.3 uncrypto: 0.1.3 - h3@2.0.0-beta.4: + h3@2.0.1-rc.14: dependencies: - cookie-es: 2.0.0 - fetchdts: 0.1.7 - rou3: 0.7.10 - srvx: 0.8.16 + rou3: 0.7.12 + srvx: 0.11.7 + + has-bigints@1.1.0: {} has-flag@4.0.0: {} + has-property-descriptors@1.0.2: + dependencies: + es-define-property: 1.0.1 + + has-proto@1.2.0: + dependencies: + dunder-proto: 1.0.1 + + has-symbols@1.1.0: {} + + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.1.0 + hasown@2.0.2: dependencies: function-bind: 1.1.2 @@ -9674,9 +8701,11 @@ snapshots: dependencies: lru-cache: 10.4.3 - html-encoding-sniffer@4.0.0: + html-encoding-sniffer@6.0.0: dependencies: - whatwg-encoding: 3.1.1 + '@exodus/bytes': 1.14.1 + transitivePeerDependencies: + - '@noble/hashes' html-to-text@9.0.5: dependencies: @@ -9686,12 +8715,12 @@ snapshots: htmlparser2: 8.0.2 selderee: 0.11.0 - htmlparser2@10.0.0: + htmlparser2@10.1.0: dependencies: domelementtype: 2.3.0 domhandler: 5.0.3 domutils: 3.2.2 - entities: 6.0.1 + entities: 7.0.1 htmlparser2@8.0.2: dependencies: @@ -9734,8 +8763,8 @@ snapshots: import-in-the-middle@1.15.0: dependencies: - acorn: 8.15.0 - acorn-import-attributes: 1.9.5(acorn@8.15.0) + acorn: 8.16.0 + acorn-import-attributes: 1.9.5(acorn@8.16.0) cjs-module-lexer: 1.4.3 module-details-from-path: 1.0.4 @@ -9747,7 +8776,13 @@ snapshots: inherits@2.0.4: {} - ipx@3.1.1(@netlify/blobs@10.3.3): + internal-slot@1.1.0: + dependencies: + es-errors: 1.3.0 + hasown: 2.0.2 + side-channel: 1.1.0 + + ipx@3.1.1(@netlify/blobs@10.7.0): dependencies: '@fastify/accept-negotiator': 2.0.1 citty: 0.1.6 @@ -9755,15 +8790,15 @@ snapshots: defu: 6.1.4 destr: 2.0.5 etag: 1.8.1 - h3: 1.15.4 + h3: 1.15.5 image-meta: 0.2.2 listhen: 1.9.0 ofetch: 1.5.1 pathe: 2.0.3 sharp: 0.34.5 svgo: 4.0.0 - ufo: 1.6.1 - unstorage: 1.17.2(@netlify/blobs@10.3.3) + ufo: 1.6.3 + unstorage: 1.17.4(@netlify/blobs@10.7.0) xss: 1.0.15 transitivePeerDependencies: - '@azure/app-configuration' @@ -9788,20 +8823,68 @@ snapshots: iron-webcrypto@1.2.1: {} + is-array-buffer@3.0.5: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + + is-async-function@2.1.1: + dependencies: + async-function: 1.0.0 + call-bound: 1.0.4 + get-proto: 1.0.1 + has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 + + is-bigint@1.1.0: + dependencies: + has-bigints: 1.1.0 + is-binary-path@2.1.0: dependencies: binary-extensions: 2.3.0 + is-boolean-object@1.2.2: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-callable@1.2.7: {} + is-core-module@2.16.1: dependencies: hasown: 2.0.2 + is-data-view@1.0.2: + dependencies: + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + is-typed-array: 1.1.15 + + is-date-object@1.1.0: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + is-docker@3.0.0: {} is-extglob@2.1.1: {} + is-finalizationregistry@1.1.1: + dependencies: + call-bound: 1.0.4 + is-fullwidth-code-point@3.0.0: {} + is-generator-function@1.1.2: + dependencies: + call-bound: 1.0.4 + generator-function: 2.0.1 + get-proto: 1.0.1 + has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 + is-glob@4.0.3: dependencies: is-extglob: 2.1.1 @@ -9812,8 +8895,17 @@ snapshots: is-interactive@2.0.0: {} + is-map@2.0.3: {} + + is-negative-zero@2.0.3: {} + is-network-error@1.3.0: {} + is-number-object@1.1.1: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + is-number@7.0.0: {} is-path-inside@4.0.0: {} @@ -9824,12 +8916,40 @@ snapshots: is-potential-custom-element-name@1.0.1: {} + is-regex@1.2.1: + dependencies: + call-bound: 1.0.4 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + is-set@2.0.3: {} + + is-shared-array-buffer@1.0.4: + dependencies: + call-bound: 1.0.4 + is-stream@2.0.1: {} is-stream@3.0.0: {} is-stream@4.0.1: {} + is-string@1.1.1: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-symbol@1.1.1: + dependencies: + call-bound: 1.0.4 + has-symbols: 1.1.0 + safe-regex-test: 1.1.0 + + is-typed-array@1.1.15: + dependencies: + which-typed-array: 1.1.20 + is-unicode-supported@1.3.0: {} is-unicode-supported@2.1.0: {} @@ -9838,7 +8958,18 @@ snapshots: is-url@1.2.4: {} - is-wsl@3.1.0: + is-weakmap@2.0.2: {} + + is-weakref@1.1.1: + dependencies: + call-bound: 1.0.4 + + is-weakset@2.0.4: + dependencies: + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + + is-wsl@3.1.1: dependencies: is-inside-container: 1.0.0 @@ -9848,7 +8979,9 @@ snapshots: isarray@1.0.0: {} - isbot@5.1.32: {} + isarray@2.0.5: {} + + isbot@5.1.35: {} isexe@2.0.0: {} @@ -9858,9 +8991,9 @@ snapshots: optionalDependencies: '@pkgjs/parseargs': 0.11.0 - jackspeak@4.1.1: + jackspeak@4.2.3: dependencies: - '@isaacs/cliui': 8.0.2 + '@isaacs/cliui': 9.0.0 jiti@2.4.2: {} @@ -9878,19 +9011,19 @@ snapshots: js-tokens@9.0.1: {} - js-yaml@3.14.1: + js-yaml@4.1.1: dependencies: - argparse: 1.0.10 - esprima: 4.0.1 + argparse: 2.0.1 - jsdom@27.2.0: + jsdom@27.4.0: dependencies: - '@acemir/cssom': 0.9.23 - '@asamuzakjp/dom-selector': 6.7.4 - cssstyle: 5.3.3 - data-urls: 6.0.0 + '@acemir/cssom': 0.9.31 + '@asamuzakjp/dom-selector': 6.8.1 + '@exodus/bytes': 1.14.1 + cssstyle: 5.3.7 + data-urls: 6.0.1 decimal.js: 10.6.0 - html-encoding-sniffer: 4.0.0 + html-encoding-sniffer: 6.0.0 http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.6 is-potential-custom-element-name: 1.0.1 @@ -9899,13 +9032,13 @@ snapshots: symbol-tree: 3.2.4 tough-cookie: 6.0.0 w3c-xmlserializer: 5.0.0 - webidl-conversions: 8.0.0 - whatwg-encoding: 3.1.1 + webidl-conversions: 8.0.1 whatwg-mimetype: 4.0.0 whatwg-url: 15.1.0 - ws: 8.18.3 + ws: 8.19.0 xml-name-validator: 5.0.0 transitivePeerDependencies: + - '@noble/hashes' - bufferutil - supports-color - utf-8-validate @@ -9920,9 +9053,9 @@ snapshots: jsonpointer@5.0.1: {} - jsonwebtoken@9.0.2: + jsonwebtoken@9.0.3: dependencies: - jws: 3.2.2 + jws: 4.0.1 lodash.includes: 4.3.0 lodash.isboolean: 3.0.3 lodash.isinteger: 4.0.4 @@ -9931,19 +9064,19 @@ snapshots: lodash.isstring: 4.0.1 lodash.once: 4.1.1 ms: 2.1.3 - semver: 7.7.3 + semver: 7.7.4 junk@4.0.1: {} - jwa@1.4.2: + jwa@2.0.1: dependencies: buffer-equal-constant-time: 1.0.1 ecdsa-sig-formatter: 1.0.11 safe-buffer: 5.2.1 - jws@3.2.2: + jws@4.0.1: dependencies: - jwa: 1.4.2 + jwa: 2.0.1 safe-buffer: 5.2.1 jwt-decode@4.0.0: {} @@ -9956,9 +9089,9 @@ snapshots: dependencies: commander: 10.0.1 dotenv: 16.6.1 - winston: 3.18.3 + winston: 3.19.0 - launch-editor@2.12.0: + launch-editor@2.13.0: dependencies: picocolors: 1.1.1 shell-quote: 1.8.3 @@ -9971,73 +9104,73 @@ snapshots: leven@3.1.0: {} - lightningcss-android-arm64@1.30.2: + lightningcss-android-arm64@1.31.1: optional: true - lightningcss-darwin-arm64@1.30.2: + lightningcss-darwin-arm64@1.31.1: optional: true - lightningcss-darwin-x64@1.30.2: + lightningcss-darwin-x64@1.31.1: optional: true - lightningcss-freebsd-x64@1.30.2: + lightningcss-freebsd-x64@1.31.1: optional: true - lightningcss-linux-arm-gnueabihf@1.30.2: + lightningcss-linux-arm-gnueabihf@1.31.1: optional: true - lightningcss-linux-arm64-gnu@1.30.2: + lightningcss-linux-arm64-gnu@1.31.1: optional: true - lightningcss-linux-arm64-musl@1.30.2: + lightningcss-linux-arm64-musl@1.31.1: optional: true - lightningcss-linux-x64-gnu@1.30.2: + lightningcss-linux-x64-gnu@1.31.1: optional: true - lightningcss-linux-x64-musl@1.30.2: + lightningcss-linux-x64-musl@1.31.1: optional: true - lightningcss-win32-arm64-msvc@1.30.2: + lightningcss-win32-arm64-msvc@1.31.1: optional: true - lightningcss-win32-x64-msvc@1.30.2: + lightningcss-win32-x64-msvc@1.31.1: optional: true - lightningcss@1.30.2: + lightningcss@1.31.1: dependencies: detect-libc: 2.1.2 optionalDependencies: - lightningcss-android-arm64: 1.30.2 - lightningcss-darwin-arm64: 1.30.2 - lightningcss-darwin-x64: 1.30.2 - lightningcss-freebsd-x64: 1.30.2 - lightningcss-linux-arm-gnueabihf: 1.30.2 - lightningcss-linux-arm64-gnu: 1.30.2 - lightningcss-linux-arm64-musl: 1.30.2 - lightningcss-linux-x64-gnu: 1.30.2 - lightningcss-linux-x64-musl: 1.30.2 - lightningcss-win32-arm64-msvc: 1.30.2 - lightningcss-win32-x64-msvc: 1.30.2 + lightningcss-android-arm64: 1.31.1 + lightningcss-darwin-arm64: 1.31.1 + lightningcss-darwin-x64: 1.31.1 + lightningcss-freebsd-x64: 1.31.1 + lightningcss-linux-arm-gnueabihf: 1.31.1 + lightningcss-linux-arm64-gnu: 1.31.1 + lightningcss-linux-arm64-musl: 1.31.1 + lightningcss-linux-x64-gnu: 1.31.1 + lightningcss-linux-x64-musl: 1.31.1 + lightningcss-win32-arm64-msvc: 1.31.1 + lightningcss-win32-x64-msvc: 1.31.1 listhen@1.9.0: dependencies: - '@parcel/watcher': 2.5.1 - '@parcel/watcher-wasm': 2.5.1 + '@parcel/watcher': 2.5.6 + '@parcel/watcher-wasm': 2.5.6 citty: 0.1.6 clipboardy: 4.0.0 consola: 3.4.2 crossws: 0.3.5 defu: 6.1.4 get-port-please: 3.2.0 - h3: 1.15.4 + h3: 1.15.5 http-shutdown: 1.2.2 jiti: 2.6.1 mlly: 1.8.0 - node-forge: 1.3.1 + node-forge: 1.3.3 pathe: 1.1.2 std-env: 3.10.0 - ufo: 1.6.1 + ufo: 1.6.3 untun: 0.1.3 uqr: 0.1.2 @@ -10059,7 +9192,7 @@ snapshots: lodash.once@4.1.1: {} - lodash@4.17.21: {} + lodash@4.17.23: {} log-symbols@6.0.0: dependencies: @@ -10080,13 +9213,11 @@ snapshots: safe-stable-stringify: 2.5.0 triple-beam: 1.4.1 - long@5.3.2: {} - loupe@3.2.1: {} lru-cache@10.4.3: {} - lru-cache@11.2.2: {} + lru-cache@11.2.6: {} lru-cache@5.1.1: dependencies: @@ -10104,6 +9235,8 @@ snapshots: marked@15.0.12: {} + math-intrinsics@1.1.0: {} + mdn-data@2.0.28: {} mdn-data@2.12.2: {} @@ -10131,7 +9264,7 @@ snapshots: dependencies: mime-db: 1.52.0 - mime-types@3.0.1: + mime-types@3.0.2: dependencies: mime-db: 1.54.0 @@ -10139,32 +9272,32 @@ snapshots: mimic-function@5.0.1: {} - minimatch@10.1.1: + minimatch@10.2.2: dependencies: - '@isaacs/brace-expansion': 5.0.0 + brace-expansion: 5.0.3 - minimatch@5.1.6: + minimatch@5.1.7: dependencies: brace-expansion: 2.0.2 - minimatch@9.0.5: + minimatch@9.0.6: dependencies: - brace-expansion: 2.0.2 + brace-expansion: 5.0.3 minimist@1.2.8: {} - minipass@7.1.2: {} + minipass@7.1.3: {} minizlib@3.1.0: dependencies: - minipass: 7.1.2 + minipass: 7.1.3 mlly@1.8.0: dependencies: - acorn: 8.15.0 + acorn: 8.16.0 pathe: 2.0.3 pkg-types: 1.3.1 - ufo: 1.6.1 + ufo: 1.6.3 module-definition@6.0.1: dependencies: @@ -10181,15 +9314,15 @@ snapshots: netlify-redirector@0.5.0: {} - next@16.0.10(@babel/core@7.28.5)(@opentelemetry/api@1.9.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.94.0): + next@16.0.10(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.3): dependencies: '@next/env': 16.0.10 '@swc/helpers': 0.5.15 - caniuse-lite: 1.0.30001755 + caniuse-lite: 1.0.30001774 postcss: 8.4.31 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) - styled-jsx: 5.1.6(@babel/core@7.28.5)(react@19.2.0) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + styled-jsx: 5.1.6(@babel/core@7.29.0)(react@19.2.4) optionalDependencies: '@next/swc-darwin-arm64': 16.0.10 '@next/swc-darwin-x64': 16.0.10 @@ -10201,7 +9334,7 @@ snapshots: '@next/swc-win32-x64-msvc': 16.0.10 '@opentelemetry/api': 1.9.0 babel-plugin-react-compiler: 1.0.0 - sass: 1.94.0 + sass: 1.97.3 sharp: 0.34.5 transitivePeerDependencies: - '@babel/core' @@ -10211,6 +9344,13 @@ snapshots: node-domexception@1.0.0: {} + node-exports-info@1.6.0: + dependencies: + array.prototype.flatmap: 1.3.3 + es-errors: 1.3.0 + object.entries: 1.1.9 + semver: 6.3.1 + node-fetch-native@1.6.7: {} node-fetch@2.7.0: @@ -10223,21 +9363,21 @@ snapshots: fetch-blob: 3.2.0 formdata-polyfill: 4.0.10 - node-forge@1.3.1: {} + node-forge@1.3.3: {} node-gyp-build@4.8.4: {} - node-mock-http@1.0.3: {} + node-mock-http@1.0.4: {} node-releases@2.0.27: {} node-source-walk@7.0.1: dependencies: - '@babel/parser': 7.28.5 + '@babel/parser': 7.29.0 node-stream-zip@1.15.0: {} - nodemailer@7.0.12: {} + nodemailer@7.0.13: {} nopt@8.1.0: dependencies: @@ -10246,7 +9386,7 @@ snapshots: normalize-package-data@6.0.2: dependencies: hosted-git-info: 7.0.2 - semver: 7.7.3 + semver: 7.7.4 validate-npm-package-license: 3.0.4 normalize-path@2.1.1: @@ -10273,11 +9413,31 @@ snapshots: object-assign@4.1.1: {} + object-inspect@1.13.4: {} + + object-keys@1.1.1: {} + + object.assign@4.1.7: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + has-symbols: 1.1.0 + object-keys: 1.1.1 + + object.entries@1.1.9: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + ofetch@1.5.1: dependencies: destr: 2.0.5 node-fetch-native: 1.6.7 - ufo: 1.6.1 + ufo: 1.6.3 omit.js@2.0.2: {} @@ -10313,6 +9473,12 @@ snapshots: string-width: 7.2.0 strip-ansi: 7.1.2 + own-keys@1.0.1: + dependencies: + get-intrinsic: 1.3.0 + object-keys: 1.1.1 + safe-push-apply: 1.0.0 + p-event@6.0.1: dependencies: p-timeout: 6.1.4 @@ -10350,7 +9516,7 @@ snapshots: parse-json@8.3.0: dependencies: - '@babel/code-frame': 7.27.1 + '@babel/code-frame': 7.29.0 index-to-position: 1.2.0 type-fest: 4.41.0 @@ -10387,12 +9553,12 @@ snapshots: path-scurry@1.11.1: dependencies: lru-cache: 10.4.3 - minipass: 7.1.2 + minipass: 7.1.3 - path-scurry@2.0.1: + path-scurry@2.0.2: dependencies: - lru-cache: 11.2.2 - minipass: 7.1.2 + lru-cache: 11.2.6 + minipass: 7.1.3 path-type@6.0.0: {} @@ -10458,10 +9624,12 @@ snapshots: pkg-types@2.3.0: dependencies: - confbox: 0.2.2 + confbox: 0.2.4 exsolve: 1.0.8 pathe: 2.0.3 + possible-typed-array-names@1.1.0: {} + postcss-values-parser@6.0.2(postcss@8.5.6): dependencies: color-name: 1.1.4 @@ -10501,7 +9669,7 @@ snapshots: transitivePeerDependencies: - supports-color - prettier@3.6.2: {} + prettier@3.8.1: {} pretty-format@27.5.1: dependencies: @@ -10522,21 +9690,6 @@ snapshots: kleur: 3.0.3 sisteransi: 1.0.5 - protobufjs@7.5.4: - dependencies: - '@protobufjs/aspromise': 1.1.2 - '@protobufjs/base64': 1.1.2 - '@protobufjs/codegen': 2.0.4 - '@protobufjs/eventemitter': 1.1.0 - '@protobufjs/fetch': 1.1.0 - '@protobufjs/float': 1.0.2 - '@protobufjs/inquire': 1.1.0 - '@protobufjs/path': 1.1.2 - '@protobufjs/pool': 1.1.0 - '@protobufjs/utf8': 1.1.0 - '@types/node': 22.19.1 - long: 5.3.2 - pump@3.0.3: dependencies: end-of-stream: 1.4.5 @@ -10552,29 +9705,29 @@ snapshots: radix3@1.1.2: {} - react-dom@19.2.0(react@19.2.0): + react-dom@19.2.4(react@19.2.4): dependencies: - react: 19.2.0 + react: 19.2.4 scheduler: 0.27.0 react-email@5.1.0: dependencies: - '@babel/parser': 7.28.5 - '@babel/traverse': 7.28.5 + '@babel/parser': 7.29.0 + '@babel/traverse': 7.29.0 chokidar: 4.0.3 commander: 13.1.0 - conf: 15.0.2 + conf: 15.1.0 debounce: 2.2.0 esbuild: 0.25.12 glob: 11.1.0 jiti: 2.4.2 log-symbols: 7.0.1 - mime-types: 3.0.1 + mime-types: 3.0.2 normalize-path: 3.0.0 nypm: 0.6.0 ora: 8.2.0 prompts: 2.4.2 - socket.io: 4.8.1 + socket.io: 4.8.3 tsconfig-paths: 4.2.0 transitivePeerDependencies: - bufferutil @@ -10585,7 +9738,7 @@ snapshots: react-refresh@0.18.0: {} - react@19.2.0: {} + react@19.2.4: {} read-package-up@11.0.0: dependencies: @@ -10627,7 +9780,7 @@ snapshots: readdir-glob@1.1.3: dependencies: - minimatch: 5.1.6 + minimatch: 5.1.7 readdirp@3.6.0: dependencies: @@ -10635,6 +9788,8 @@ snapshots: readdirp@4.1.2: {} + readdirp@5.0.0: {} + real-require@0.2.0: {} recast@0.23.11: @@ -10645,6 +9800,26 @@ snapshots: tiny-invariant: 1.3.3 tslib: 2.8.1 + reflect.getprototypeof@1.0.10: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.24.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + get-intrinsic: 1.3.0 + get-proto: 1.0.1 + which-builtin-type: 1.2.1 + + regexp.prototype.flags@1.5.4: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-errors: 1.3.0 + get-proto: 1.0.1 + gopd: 1.2.0 + set-function-name: 2.0.2 + remove-trailing-separator@1.1.0: {} require-directory@2.1.1: {} @@ -10671,9 +9846,12 @@ snapshots: path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - resolve@2.0.0-next.5: + resolve@2.0.0-next.6: dependencies: + es-errors: 1.3.0 is-core-module: 2.16.1 + node-exports-info: 1.6.0 + object-keys: 1.1.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 @@ -10686,35 +9864,38 @@ snapshots: reusify@1.1.0: {} - rollup@4.53.2: + rollup@4.59.0: dependencies: '@types/estree': 1.0.8 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.53.2 - '@rollup/rollup-android-arm64': 4.53.2 - '@rollup/rollup-darwin-arm64': 4.53.2 - '@rollup/rollup-darwin-x64': 4.53.2 - '@rollup/rollup-freebsd-arm64': 4.53.2 - '@rollup/rollup-freebsd-x64': 4.53.2 - '@rollup/rollup-linux-arm-gnueabihf': 4.53.2 - '@rollup/rollup-linux-arm-musleabihf': 4.53.2 - '@rollup/rollup-linux-arm64-gnu': 4.53.2 - '@rollup/rollup-linux-arm64-musl': 4.53.2 - '@rollup/rollup-linux-loong64-gnu': 4.53.2 - '@rollup/rollup-linux-ppc64-gnu': 4.53.2 - '@rollup/rollup-linux-riscv64-gnu': 4.53.2 - '@rollup/rollup-linux-riscv64-musl': 4.53.2 - '@rollup/rollup-linux-s390x-gnu': 4.53.2 - '@rollup/rollup-linux-x64-gnu': 4.53.2 - '@rollup/rollup-linux-x64-musl': 4.53.2 - '@rollup/rollup-openharmony-arm64': 4.53.2 - '@rollup/rollup-win32-arm64-msvc': 4.53.2 - '@rollup/rollup-win32-ia32-msvc': 4.53.2 - '@rollup/rollup-win32-x64-gnu': 4.53.2 - '@rollup/rollup-win32-x64-msvc': 4.53.2 + '@rollup/rollup-android-arm-eabi': 4.59.0 + '@rollup/rollup-android-arm64': 4.59.0 + '@rollup/rollup-darwin-arm64': 4.59.0 + '@rollup/rollup-darwin-x64': 4.59.0 + '@rollup/rollup-freebsd-arm64': 4.59.0 + '@rollup/rollup-freebsd-x64': 4.59.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.59.0 + '@rollup/rollup-linux-arm-musleabihf': 4.59.0 + '@rollup/rollup-linux-arm64-gnu': 4.59.0 + '@rollup/rollup-linux-arm64-musl': 4.59.0 + '@rollup/rollup-linux-loong64-gnu': 4.59.0 + '@rollup/rollup-linux-loong64-musl': 4.59.0 + '@rollup/rollup-linux-ppc64-gnu': 4.59.0 + '@rollup/rollup-linux-ppc64-musl': 4.59.0 + '@rollup/rollup-linux-riscv64-gnu': 4.59.0 + '@rollup/rollup-linux-riscv64-musl': 4.59.0 + '@rollup/rollup-linux-s390x-gnu': 4.59.0 + '@rollup/rollup-linux-x64-gnu': 4.59.0 + '@rollup/rollup-linux-x64-musl': 4.59.0 + '@rollup/rollup-openbsd-x64': 4.59.0 + '@rollup/rollup-openharmony-arm64': 4.59.0 + '@rollup/rollup-win32-arm64-msvc': 4.59.0 + '@rollup/rollup-win32-ia32-msvc': 4.59.0 + '@rollup/rollup-win32-x64-gnu': 4.59.0 + '@rollup/rollup-win32-x64-msvc': 4.59.0 fsevents: 2.3.3 - rou3@0.7.10: {} + rou3@0.7.12: {} run-parallel@1.2.0: dependencies: @@ -10724,109 +9905,32 @@ snapshots: dependencies: tslib: 2.8.1 + safe-array-concat@1.1.3: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + has-symbols: 1.1.0 + isarray: 2.0.5 + safe-buffer@5.1.2: {} safe-buffer@5.2.1: {} - safe-stable-stringify@2.5.0: {} - - safer-buffer@2.1.2: {} - - sass-embedded-all-unknown@1.97.3: + safe-push-apply@1.0.0: dependencies: - sass: 1.97.3 - optional: true - - sass-embedded-android-arm64@1.97.3: - optional: true - - sass-embedded-android-arm@1.97.3: - optional: true - - sass-embedded-android-riscv64@1.97.3: - optional: true - - sass-embedded-android-x64@1.97.3: - optional: true - - sass-embedded-darwin-arm64@1.97.3: - optional: true - - sass-embedded-darwin-x64@1.97.3: - optional: true - - sass-embedded-linux-arm64@1.97.3: - optional: true - - sass-embedded-linux-arm@1.97.3: - optional: true - - sass-embedded-linux-musl-arm64@1.97.3: - optional: true - - sass-embedded-linux-musl-arm@1.97.3: - optional: true - - sass-embedded-linux-musl-riscv64@1.97.3: - optional: true - - sass-embedded-linux-musl-x64@1.97.3: - optional: true - - sass-embedded-linux-riscv64@1.97.3: - optional: true - - sass-embedded-linux-x64@1.97.3: - optional: true + es-errors: 1.3.0 + isarray: 2.0.5 - sass-embedded-unknown-all@1.97.3: + safe-regex-test@1.1.0: dependencies: - sass: 1.97.3 - optional: true - - sass-embedded-win32-arm64@1.97.3: - optional: true + call-bound: 1.0.4 + es-errors: 1.3.0 + is-regex: 1.2.1 - sass-embedded-win32-x64@1.97.3: - optional: true + safe-stable-stringify@2.5.0: {} - sass-embedded@1.97.3: - dependencies: - '@bufbuild/protobuf': 2.11.0 - colorjs.io: 0.5.2 - immutable: 5.1.4 - rxjs: 7.8.2 - supports-color: 8.1.1 - sync-child-process: 1.0.2 - varint: 6.0.0 - optionalDependencies: - sass-embedded-all-unknown: 1.97.3 - sass-embedded-android-arm: 1.97.3 - sass-embedded-android-arm64: 1.97.3 - sass-embedded-android-riscv64: 1.97.3 - sass-embedded-android-x64: 1.97.3 - sass-embedded-darwin-arm64: 1.97.3 - sass-embedded-darwin-x64: 1.97.3 - sass-embedded-linux-arm: 1.97.3 - sass-embedded-linux-arm64: 1.97.3 - sass-embedded-linux-musl-arm: 1.97.3 - sass-embedded-linux-musl-arm64: 1.97.3 - sass-embedded-linux-musl-riscv64: 1.97.3 - sass-embedded-linux-musl-x64: 1.97.3 - sass-embedded-linux-riscv64: 1.97.3 - sass-embedded-linux-x64: 1.97.3 - sass-embedded-unknown-all: 1.97.3 - sass-embedded-win32-arm64: 1.97.3 - sass-embedded-win32-x64: 1.97.3 - optional: true - - sass@1.94.0: - dependencies: - chokidar: 4.0.3 - immutable: 5.1.4 - source-map-js: 1.2.1 - optionalDependencies: - '@parcel/watcher': 2.5.1 + safer-buffer@2.1.2: {} sass@1.97.3: dependencies: @@ -10834,10 +9938,9 @@ snapshots: immutable: 5.1.4 source-map-js: 1.2.1 optionalDependencies: - '@parcel/watcher': 2.5.1 - optional: true + '@parcel/watcher': 2.5.6 - sax@1.4.3: {} + sax@1.4.4: {} saxes@6.0.0: dependencies: @@ -10853,25 +9956,41 @@ snapshots: semver@6.3.1: {} - semver@7.7.3: {} + semver@7.7.4: {} - seroval-plugins@1.3.3(seroval@1.3.2): + seroval-plugins@1.5.0(seroval@1.5.0): dependencies: - seroval: 1.3.2 + seroval: 1.5.0 + + seroval@1.5.0: {} - seroval-plugins@1.4.0(seroval@1.4.0): + set-function-length@1.2.2: dependencies: - seroval: 1.4.0 + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.3.0 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 - seroval@1.3.2: {} + set-function-name@2.0.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.2 - seroval@1.4.0: {} + set-proto@1.0.0: + dependencies: + dunder-proto: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 sharp@0.34.5: dependencies: '@img/colour': 1.0.0 detect-libc: 2.1.2 - semver: 7.7.3 + semver: 7.7.4 optionalDependencies: '@img/sharp-darwin-arm64': 0.34.5 '@img/sharp-darwin-x64': 0.34.5 @@ -10906,6 +10025,34 @@ snapshots: shell-quote@1.8.3: {} + side-channel-list@1.0.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + + side-channel-map@1.0.1: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + + side-channel-weakmap@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + side-channel-map: 1.0.1 + + side-channel@1.1.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + side-channel-list: 1.0.0 + side-channel-map: 1.0.1 + side-channel-weakmap: 1.0.2 + siginfo@2.0.0: {} signal-exit@4.1.0: {} @@ -10914,41 +10061,41 @@ snapshots: slashes@3.0.12: {} - socket.io-adapter@2.5.5: + socket.io-adapter@2.5.6: dependencies: - debug: 4.3.7 - ws: 8.17.1 + debug: 4.4.3 + ws: 8.18.3 transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate - socket.io-parser@4.2.4: + socket.io-parser@4.2.5: dependencies: '@socket.io/component-emitter': 3.1.2 - debug: 4.3.7 + debug: 4.4.3 transitivePeerDependencies: - supports-color - socket.io@4.8.1: + socket.io@4.8.3: dependencies: accepts: 1.3.8 base64id: 2.0.0 - cors: 2.8.5 - debug: 4.3.7 - engine.io: 6.6.4 - socket.io-adapter: 2.5.5 - socket.io-parser: 4.2.4 + cors: 2.8.6 + debug: 4.4.3 + engine.io: 6.6.5 + socket.io-adapter: 2.5.6 + socket.io-parser: 4.2.5 transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate - solid-js@1.9.10: + solid-js@1.9.11: dependencies: csstype: 3.2.3 - seroval: 1.3.2 - seroval-plugins: 1.3.3(seroval@1.3.2) + seroval: 1.5.0 + seroval-plugins: 1.5.0(seroval@1.5.0) sonic-boom@4.2.1: dependencies: @@ -10968,22 +10115,20 @@ snapshots: spdx-correct@3.2.0: dependencies: spdx-expression-parse: 3.0.1 - spdx-license-ids: 3.0.22 + spdx-license-ids: 3.0.23 spdx-exceptions@2.5.0: {} spdx-expression-parse@3.0.1: dependencies: spdx-exceptions: 2.5.0 - spdx-license-ids: 3.0.22 + spdx-license-ids: 3.0.23 - spdx-license-ids@3.0.22: {} + spdx-license-ids@3.0.23: {} split2@4.2.0: {} - sprintf-js@1.0.3: {} - - srvx@0.8.16: {} + srvx@0.11.7: {} stack-trace@0.0.10: {} @@ -10993,11 +10138,16 @@ snapshots: stdin-discarder@0.2.2: {} + stop-iteration-iterator@1.1.0: + dependencies: + es-errors: 1.3.0 + internal-slot: 1.1.0 + streamx@2.23.0: dependencies: events-universal: 1.0.1 fast-fifo: 1.3.2 - text-decoder: 1.2.3 + text-decoder: 1.2.7 transitivePeerDependencies: - bare-abort-controller - react-native-b4a @@ -11017,9 +10167,32 @@ snapshots: string-width@7.2.0: dependencies: emoji-regex: 10.6.0 - get-east-asian-width: 1.4.0 + get-east-asian-width: 1.5.0 strip-ansi: 7.1.2 + string.prototype.trim@1.2.10: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-data-property: 1.1.4 + define-properties: 1.2.1 + es-abstract: 1.24.1 + es-object-atoms: 1.1.1 + has-property-descriptors: 1.0.2 + + string.prototype.trimend@1.0.9: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + + string.prototype.trimstart@1.0.8: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + string_decoder@1.1.1: dependencies: safe-buffer: 5.1.2 @@ -11046,8 +10219,6 @@ snapshots: dependencies: js-tokens: 9.0.1 - strnum@2.1.2: {} - strtok3@10.3.4: dependencies: '@tokenizer/token': 0.3.0 @@ -11058,12 +10229,12 @@ snapshots: stubborn-utils@1.0.2: {} - styled-jsx@5.1.6(@babel/core@7.28.5)(react@19.2.0): + styled-jsx@5.1.6(@babel/core@7.29.0)(react@19.2.4): dependencies: client-only: 0.0.1 - react: 19.2.0 + react: 19.2.4 optionalDependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 supports-color@7.2.0: dependencies: @@ -11083,46 +10254,38 @@ snapshots: css-what: 6.2.2 csso: 5.0.5 picocolors: 1.1.1 - sax: 1.4.3 + sax: 1.4.4 symbol-tree@3.2.4: {} - sync-child-process@1.0.2: - dependencies: - sync-message-port: 1.2.0 - optional: true - - sync-message-port@1.2.0: - optional: true - system-architecture@0.1.0: {} tagged-tag@1.0.0: {} - tailwindcss@4.1.18: {} + tailwindcss@4.2.0: {} tapable@2.3.0: {} tar-stream@3.1.7: dependencies: - b4a: 1.7.3 + b4a: 1.8.0 fast-fifo: 1.3.2 streamx: 2.23.0 transitivePeerDependencies: - bare-abort-controller - react-native-b4a - tar@7.5.2: + tar@7.5.9: dependencies: '@isaacs/fs-minipass': 4.0.1 chownr: 3.0.0 - minipass: 7.1.2 + minipass: 7.1.3 minizlib: 3.1.0 yallist: 5.0.0 - text-decoder@1.2.3: + text-decoder@1.2.7: dependencies: - b4a: 1.7.3 + b4a: 1.8.0 transitivePeerDependencies: - react-native-b4a @@ -11151,11 +10314,11 @@ snapshots: tinyspy@4.0.4: {} - tldts-core@7.0.18: {} + tldts-core@7.0.23: {} - tldts@7.0.18: + tldts@7.0.23: dependencies: - tldts-core: 7.0.18 + tldts-core: 7.0.23 tmp-promise@3.0.3: dependencies: @@ -11167,9 +10330,9 @@ snapshots: dependencies: is-number: 7.0.0 - token-types@6.1.1: + token-types@6.1.2: dependencies: - '@borewit/text-codec': 0.1.1 + '@borewit/text-codec': 0.2.1 '@tokenizer/token': 0.3.0 ieee754: 1.2.1 @@ -11179,7 +10342,7 @@ snapshots: tough-cookie@6.0.0: dependencies: - tldts: 7.0.18 + tldts: 7.0.23 tr46@0.0.3: {} @@ -11191,7 +10354,7 @@ snapshots: triple-beam@1.4.1: {} - ts-api-utils@2.1.0(typescript@5.9.3): + ts-api-utils@2.4.0(typescript@5.9.3): dependencies: typescript: 5.9.3 @@ -11207,32 +10370,72 @@ snapshots: tslib@2.8.1: {} - tsx@4.20.6: + tsx@4.21.0: dependencies: - esbuild: 0.25.12 - get-tsconfig: 4.13.0 + esbuild: 0.27.3 + get-tsconfig: 4.13.6 optionalDependencies: fsevents: 2.3.3 type-fest@4.41.0: {} - type-fest@5.3.1: + type-fest@5.4.4: dependencies: tagged-tag: 1.0.0 + typed-array-buffer@1.0.3: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-typed-array: 1.1.15 + + typed-array-byte-length@1.0.3: + dependencies: + call-bind: 1.0.8 + for-each: 0.3.5 + gopd: 1.2.0 + has-proto: 1.2.0 + is-typed-array: 1.1.15 + + typed-array-byte-offset@1.0.4: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + for-each: 0.3.5 + gopd: 1.2.0 + has-proto: 1.2.0 + is-typed-array: 1.1.15 + reflect.getprototypeof: 1.0.10 + + typed-array-length@1.0.7: + dependencies: + call-bind: 1.0.8 + for-each: 0.3.5 + gopd: 1.2.0 + is-typed-array: 1.1.15 + possible-typed-array-names: 1.1.0 + reflect.getprototypeof: 1.0.10 + typescript@5.9.3: {} - ufo@1.6.1: {} + ufo@1.6.3: {} uint8array-extras@1.5.0: {} - ulid@3.0.1: {} + ulid@3.0.2: {} + + unbox-primitive@1.1.0: + dependencies: + call-bound: 1.0.4 + has-bigints: 1.1.0 + has-symbols: 1.1.0 + which-boxed-primitive: 1.1.1 uncrypto@0.1.3: {} undici-types@6.21.0: {} - undici@7.16.0: {} + undici@7.22.0: {} unicorn-magic@0.1.0: {} @@ -11240,25 +10443,25 @@ snapshots: dependencies: normalize-path: 2.1.1 - unplugin@2.3.10: + unplugin@2.3.11: dependencies: '@jridgewell/remapping': 2.3.5 - acorn: 8.15.0 + acorn: 8.16.0 picomatch: 4.0.3 webpack-virtual-modules: 0.6.2 - unstorage@1.17.2(@netlify/blobs@10.3.3): + unstorage@1.17.4(@netlify/blobs@10.7.0): dependencies: anymatch: 3.1.3 - chokidar: 4.0.3 + chokidar: 5.0.0 destr: 2.0.5 - h3: 1.15.4 - lru-cache: 10.4.3 + h3: 1.15.5 + lru-cache: 11.2.6 node-fetch-native: 1.6.7 ofetch: 1.5.1 - ufo: 1.6.1 + ufo: 1.6.3 optionalDependencies: - '@netlify/blobs': 10.3.3 + '@netlify/blobs': 10.7.0 untun@0.1.3: dependencies: @@ -11266,9 +10469,9 @@ snapshots: consola: 3.4.2 pathe: 1.1.2 - update-browserslist-db@1.1.4(browserslist@4.28.0): + update-browserslist-db@1.2.3(browserslist@4.28.1): dependencies: - browserslist: 4.28.0 + browserslist: 4.28.1 escalade: 3.2.0 picocolors: 1.1.1 @@ -11278,14 +10481,16 @@ snapshots: urlpattern-polyfill@8.0.2: {} - use-sync-external-store@1.6.0(react@19.2.0): + use-sync-external-store@1.6.0(react@19.2.4): dependencies: - react: 19.2.0 + react: 19.2.4 util-deprecate@1.0.2: {} uuid@11.1.0: {} + uuid@13.0.0: {} + validate-npm-package-license@3.0.4: dependencies: spdx-correct: 3.2.0 @@ -11293,18 +10498,15 @@ snapshots: validate-npm-package-name@5.0.1: {} - varint@6.0.0: - optional: true - vary@1.1.2: {} - vite-node@3.2.4(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1): + vite-node@3.2.4(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(tsx@4.21.0)(yaml@2.8.2): dependencies: cac: 6.7.14 debug: 4.4.3 es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - '@types/node' - jiti @@ -11319,44 +10521,43 @@ snapshots: - tsx - yaml - vite-tsconfig-paths@5.1.4(typescript@5.9.3)(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1)): + vite-tsconfig-paths@5.1.4(typescript@5.9.3)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(tsx@4.21.0)(yaml@2.8.2)): dependencies: debug: 4.4.3 globrex: 0.1.2 tsconfck: 3.1.6(typescript@5.9.3) optionalDependencies: - vite: 7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - supports-color - typescript - vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1): + vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(tsx@4.21.0)(yaml@2.8.2): dependencies: - esbuild: 0.25.12 + esbuild: 0.27.3 fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 postcss: 8.5.6 - rollup: 4.53.2 + rollup: 4.59.0 tinyglobby: 0.2.15 optionalDependencies: - '@types/node': 22.19.1 + '@types/node': 22.19.11 fsevents: 2.3.3 jiti: 2.6.1 - lightningcss: 1.30.2 - sass: 1.94.0 - sass-embedded: 1.97.3 - tsx: 4.20.6 - yaml: 2.8.1 + lightningcss: 1.31.1 + sass: 1.97.3 + tsx: 4.21.0 + yaml: 2.8.2 - vitefu@1.1.1(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1)): + vitefu@1.1.2(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(tsx@4.21.0)(yaml@2.8.2)): optionalDependencies: - vite: 7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(tsx@4.21.0)(yaml@2.8.2) - vitest@3.2.4(@types/node@22.19.1)(jiti@2.6.1)(jsdom@27.2.0)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1): + vitest@3.2.4(@types/node@22.19.11)(jiti@2.6.1)(jsdom@27.4.0)(lightningcss@1.31.1)(sass@1.97.3)(tsx@4.21.0)(yaml@2.8.2): dependencies: '@types/chai': 5.2.3 '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1)) + '@vitest/mocker': 3.2.4(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(tsx@4.21.0)(yaml@2.8.2)) '@vitest/pretty-format': 3.2.4 '@vitest/runner': 3.2.4 '@vitest/snapshot': 3.2.4 @@ -11364,7 +10565,7 @@ snapshots: '@vitest/utils': 3.2.4 chai: 5.3.3 debug: 4.4.3 - expect-type: 1.2.2 + expect-type: 1.3.0 magic-string: 0.30.21 pathe: 2.0.3 picomatch: 4.0.3 @@ -11374,12 +10575,12 @@ snapshots: tinyglobby: 0.2.15 tinypool: 1.1.1 tinyrainbow: 2.0.0 - vite: 7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1) - vite-node: 3.2.4(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(tsx@4.21.0)(yaml@2.8.2) + vite-node: 3.2.4(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(tsx@4.21.0)(yaml@2.8.2) why-is-node-running: 2.3.0 optionalDependencies: - '@types/node': 22.19.1 - jsdom: 27.2.0 + '@types/node': 22.19.11 + jsdom: 27.4.0 transitivePeerDependencies: - jiti - less @@ -11404,7 +10605,7 @@ snapshots: webidl-conversions@3.0.1: {} - webidl-conversions@8.0.0: {} + webidl-conversions@8.0.1: {} webpack-virtual-modules@0.6.2: {} @@ -11414,10 +10615,12 @@ snapshots: whatwg-mimetype@4.0.0: {} + whatwg-mimetype@5.0.0: {} + whatwg-url@15.1.0: dependencies: tr46: 6.0.0 - webidl-conversions: 8.0.0 + webidl-conversions: 8.0.1 whatwg-url@5.0.0: dependencies: @@ -11426,6 +10629,47 @@ snapshots: when-exit@2.1.5: {} + which-boxed-primitive@1.1.1: + dependencies: + is-bigint: 1.1.0 + is-boolean-object: 1.2.2 + is-number-object: 1.1.1 + is-string: 1.1.1 + is-symbol: 1.1.1 + + which-builtin-type@1.2.1: + dependencies: + call-bound: 1.0.4 + function.prototype.name: 1.1.8 + has-tostringtag: 1.0.2 + is-async-function: 2.1.1 + is-date-object: 1.1.0 + is-finalizationregistry: 1.1.1 + is-generator-function: 1.1.2 + is-regex: 1.2.1 + is-weakref: 1.1.1 + isarray: 2.0.5 + which-boxed-primitive: 1.1.1 + which-collection: 1.0.2 + which-typed-array: 1.1.20 + + which-collection@1.0.2: + dependencies: + is-map: 2.0.3 + is-set: 2.0.3 + is-weakmap: 2.0.2 + is-weakset: 2.0.4 + + which-typed-array@1.1.20: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.4 + for-each: 0.3.5 + get-proto: 1.0.1 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + which@2.0.2: dependencies: isexe: 2.0.0 @@ -11441,7 +10685,7 @@ snapshots: readable-stream: 3.6.2 triple-beam: 1.4.1 - winston@3.18.3: + winston@3.19.0: dependencies: '@colors/colors': 1.6.0 '@dabh/diagnostics': 2.0.8 @@ -11474,18 +10718,18 @@ snapshots: imurmurhash: 0.1.4 signal-exit: 4.1.0 - ws@8.17.1: {} - ws@8.18.3: {} + ws@8.19.0: {} + xml-name-validator@5.0.0: {} - xmlbuilder2@3.1.1: + xmlbuilder2@4.0.3: dependencies: - '@oozcitak/dom': 1.15.10 - '@oozcitak/infra': 1.0.8 - '@oozcitak/util': 8.3.8 - js-yaml: 3.14.1 + '@oozcitak/dom': 2.0.2 + '@oozcitak/infra': 2.0.2 + '@oozcitak/util': 10.0.0 + js-yaml: 4.1.1 xmlchars@2.2.0: {} @@ -11500,7 +10744,7 @@ snapshots: yallist@5.0.0: {} - yaml@2.8.1: {} + yaml@2.8.2: {} yargs-parser@21.1.1: {} @@ -11531,4 +10775,4 @@ snapshots: zod@3.25.76: {} - zod@4.1.12: {} + zod@4.3.6: {} From ff9fe425f339e8ff77b21b2f5463d39c052f4322 Mon Sep 17 00:00:00 2001 From: Savy Date: Mon, 23 Feb 2026 23:44:17 +0530 Subject: [PATCH 29/47] update package.json and dev docs --- DEVELOPMENT.md | 4 ++-- package.json | 14 +++++++++++++- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md index 0487681..2a9c913 100644 --- a/DEVELOPMENT.md +++ b/DEVELOPMENT.md @@ -13,8 +13,8 @@ The project uses [pnpm](https://pnpm.io/) for package management and scripts. Ma ## Prerequisites -- `pnpm` - >v9.0.0 -- `node` - >v20.0.0 +- `pnpm` - >v10.0.0 +- `node` - >=v22.0.0 and v27.0.0 ## Environment Variables diff --git a/package.json b/package.json index d051708..4b0cdd7 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,14 @@ { - "name": "acm-website-tanstack", + "name": "@pec-css/website", "private": true, "type": "module", + "version": "0.1.0", + "homepage": "https://pecacm.in", + "license": "MIT", + "repository": { + "type": "git", + "url": "git+https://github.com/Savy011/acm-website-tanstack.git" + }, "scripts": { "container:up": "docker compose up -d", "container:down": "docker compose down -v", @@ -18,6 +25,11 @@ "prepare": "husky", "email:dev": "email dev --dir=./src/emails --port=2999" }, + "engineStrict": true, + "engines": { + "node": ">=22.0.0 <23.0.0", + "pnpm": ">=10.0.0" + }, "dependencies": { "@bogeychan/elysia-logger": "^0.1.10", "@elysiajs/eden": "^1.4.5", From 083044a414e60ecd2b1d3549eecf860ffb95875d Mon Sep 17 00:00:00 2001 From: Savy Date: Mon, 23 Feb 2026 23:48:52 +0530 Subject: [PATCH 30/47] define import.meta.env --- biome.json | 6 ++++-- src/env.d.ts | 8 ++++++++ vite.config.ts | 13 +++++++++++++ 3 files changed, 25 insertions(+), 2 deletions(-) create mode 100644 src/env.d.ts diff --git a/biome.json b/biome.json index 41fc3bf..6ee820d 100644 --- a/biome.json +++ b/biome.json @@ -11,7 +11,6 @@ "**/src/**/*", "**/.vscode/**/*", "**/index.html", - "**/vite.config.js", "!**/src/routeTree.gen.ts", "!**/src/styles.css" ] @@ -29,7 +28,10 @@ "level": "on", "options": { "groups": [ - { "type": true, "source": ["**"] }, + { + "type": true, + "source": ["**"] + }, ":BLANK_LINE:", [":URL:", ":PACKAGE_WITH_PROTOCOL:"], ":BLANK_LINE:", diff --git a/src/env.d.ts b/src/env.d.ts new file mode 100644 index 0000000..73e015a --- /dev/null +++ b/src/env.d.ts @@ -0,0 +1,8 @@ +interface ImportMetaEnv { + readonly COMMIT_HASH: string; + readonly PKG_VERSION: string; +} + +interface ImportMeta { + readonly env: ImportMetaEnv; +} diff --git a/vite.config.ts b/vite.config.ts index 9b90187..8de811e 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -7,7 +7,16 @@ import tailwind from "@tailwindcss/vite"; import viteReact from '@vitejs/plugin-react' import viteTsConfigPaths from 'vite-tsconfig-paths' import netlify from '@netlify/vite-plugin-tanstack-start' +import { execSync } from "node:child_process"; +import pkg from "./package.json" with {type: "json"}; +function getCommitHash() { + try { + return execSync("git rev-parse --short HEAD").toString().trim() + } catch { + return "unknown"; + } +} const config = defineConfig({ plugins: [ @@ -25,6 +34,10 @@ const config = defineConfig({ }, }), ], + define: { + "import.meta.env.COMMIT_HASH": JSON.stringify(getCommitHash()), + "import.meta.env.PKG_VERSION": JSON.stringify(pkg.version) + }, server: { port: 3000, } From e29d8a72e00f65bb3ff4b34795c24dafb0872f9f Mon Sep 17 00:00:00 2001 From: Savy Date: Mon, 23 Feb 2026 23:49:24 +0530 Subject: [PATCH 31/47] add health handlers --- src/lib/api/handlers/health.ts | 60 ++++++++++++++++++++++++++++++++++ src/lib/api/index.ts | 1 + src/routeTree.gen.ts | 8 ++--- src/routes/api.$.ts | 10 +++--- 4 files changed, 70 insertions(+), 9 deletions(-) create mode 100644 src/lib/api/handlers/health.ts diff --git a/src/lib/api/handlers/health.ts b/src/lib/api/handlers/health.ts new file mode 100644 index 0000000..9ad82a2 --- /dev/null +++ b/src/lib/api/handlers/health.ts @@ -0,0 +1,60 @@ +import Elysia from "elysia"; +import z from "zod"; + +import { API_URL } from "$lib/constants/api"; + +const base = () => ({ + version: import.meta.env.PKG_VERSION, + commit: import.meta.env.COMMIT_HASH, + timestamp: new Date().toISOString(), + uptime: process.uptime(), + environment: (process.env.NODE_ENV ?? "development") as + | "production" + | "development", +}); + +export const api = new Elysia({ prefix: "/health" }).get( + "/", + async () => { + const start = Date.now(); + + try { + const res = await fetch(API_URL.HEALTH.CHECK); + const upstreamLatency = Date.now() - start; + + if (!res.ok) throw new Error("upstream returned non-ok status"); + + return { + ...base(), + status: "ok", + upstream: { + status: "ok", + latency: `${upstreamLatency}ms`, + }, + } as const; + } catch { + return { + ...base(), + status: "degraded", + upstream: { + status: "unreachable", + latency: null, + }, + } as const; + } + }, + { + response: z.object({ + status: z.enum(["ok", "degraded"]), + version: z.string(), + commit: z.string(), + timestamp: z.iso.datetime(), + uptime: z.number(), + environment: z.enum(["production", "development"]), + upstream: z.object({ + status: z.enum(["ok", "unreachable"]), + latency: z.string().nullable(), + }), + }), + }, +); diff --git a/src/lib/api/index.ts b/src/lib/api/index.ts index e37728a..8efca64 100644 --- a/src/lib/api/index.ts +++ b/src/lib/api/index.ts @@ -1,3 +1,4 @@ export { api as auth } from "./handlers/auth"; export { api as events } from "./handlers/events"; +export { api as health } from "./handlers/health"; export { api as user } from "./handlers/user"; diff --git a/src/routeTree.gen.ts b/src/routeTree.gen.ts index bfc476c..ded7cff 100644 --- a/src/routeTree.gen.ts +++ b/src/routeTree.gen.ts @@ -44,7 +44,7 @@ export interface FileRoutesByFullPath { '/': typeof IndexRoute '/sign-in': typeof authSignInRoute '/api/$': typeof ApiSplatRoute - '/dashboard': typeof AuthedDashboardIndexRoute + '/dashboard/': typeof AuthedDashboardIndexRoute } export interface FileRoutesByTo { '/': typeof IndexRoute @@ -62,7 +62,7 @@ export interface FileRoutesById { } export interface FileRouteTypes { fileRoutesByFullPath: FileRoutesByFullPath - fullPaths: '/' | '/sign-in' | '/api/$' | '/dashboard' + fullPaths: '/' | '/sign-in' | '/api/$' | '/dashboard/' fileRoutesByTo: FileRoutesByTo to: '/' | '/sign-in' | '/api/$' | '/dashboard' id: @@ -86,7 +86,7 @@ declare module '@tanstack/react-router' { '/_authed': { id: '/_authed' path: '' - fullPath: '' + fullPath: '/' preLoaderRoute: typeof AuthedRouteImport parentRoute: typeof rootRouteImport } @@ -114,7 +114,7 @@ declare module '@tanstack/react-router' { '/_authed/dashboard/': { id: '/_authed/dashboard/' path: '/dashboard' - fullPath: '/dashboard' + fullPath: '/dashboard/' preLoaderRoute: typeof AuthedDashboardIndexRouteImport parentRoute: typeof AuthedRoute } diff --git a/src/routes/api.$.ts b/src/routes/api.$.ts index fef2b18..bb95bda 100644 --- a/src/routes/api.$.ts +++ b/src/routes/api.$.ts @@ -6,7 +6,7 @@ import { createIsomorphicFn } from "@tanstack/react-start"; import { Elysia } from "elysia"; import * as z from "zod"; -import { auth, events, user } from "$lib/api"; +import * as handlers from "$lib/api"; const log = createPinoLogger({ level: "debug", @@ -69,10 +69,10 @@ All responses follow a consistent JSON structure with appropriate HTTP status co }, }), ) - .use(auth) - .use(user) - .use(events) - .get("/", "Hello PEC ACM!"); + .use(handlers.auth) + .use(handlers.events) + .use(handlers.health) + .use(handlers.user); const handle = ({ request }: { request: Request }) => app.fetch(request); From 3f5e08bc4fc73d7d9cd5f939741f23b0e1a3236b Mon Sep 17 00:00:00 2001 From: Vidhi Sethi Date: Thu, 26 Feb 2026 13:45:51 +0530 Subject: [PATCH 32/47] implementing a common search api in --- src/lib/api/handlers/events.ts | 111 ++++++++++++++++++++++++++++----- src/routes/api.$.ts | 2 + 2 files changed, 97 insertions(+), 16 deletions(-) diff --git a/src/lib/api/handlers/events.ts b/src/lib/api/handlers/events.ts index fb58cee..40da433 100644 --- a/src/lib/api/handlers/events.ts +++ b/src/lib/api/handlers/events.ts @@ -72,8 +72,8 @@ export const api = new Elysia({ prefix: "/events" }) const url = `${API_URL.V1.EVENTS.GET_ALL}?${new URLSearchParams({ ...(eventsFrom && { eventsFrom }), ...(eventsTill && { eventsTill }), - ...(offset !== undefined && { offset: offset.toString() }), - ...(pageSize !== undefined && { pageSize: pageSize.toString() }), + ...(offset !== undefined && { offset }), + ...(pageSize !== undefined && { pageSize }), })}`; const res = await fetch(url, { method: "GET" }); @@ -96,8 +96,8 @@ export const api = new Elysia({ prefix: "/events" }) query: z.object({ eventsFrom: z.string().optional(), eventsTill: z.string().optional(), - offset: z.number().optional(), - pageSize: z.number().optional(), + offset: z.string().optional(), + pageSize: z.string().optional(), }), response: createResponseSchema(EventsArraySchema, { @@ -113,8 +113,8 @@ export const api = new Elysia({ prefix: "/events" }) const url = `${API_URL.V1.EVENTS.USER(id)}?${new URLSearchParams({ ...(role !== undefined && { role }), - ...(offset !== undefined && { offset: offset.toString() }), - ...(pageSize !== undefined && { pageSize: pageSize.toString() }), + ...(offset !== undefined && { offset }), + ...(pageSize !== undefined && { pageSize }), })}`; const res = await fetch(url, { method: "GET" }); @@ -138,8 +138,8 @@ export const api = new Elysia({ prefix: "/events" }) }), query: z.object({ role: z.string().optional(), - offset: z.number().optional(), - pageSize: z.number().optional(), + offset: z.string().optional(), + pageSize: z.string().optional(), }), response: createResponseSchema(EventUserSchema, { errorCodes: [401, 404, 500], @@ -246,8 +246,8 @@ export const api = new Elysia({ prefix: "/events" }) const url = `${API_URL.V1.EVENTS.BY_BRANCH(branch)}?${new URLSearchParams( { - ...(offset !== undefined && { offset: offset.toString() }), - ...(pageSize !== undefined && { pageSize: pageSize.toString() }), + ...(offset !== undefined && { offset }), + ...(pageSize !== undefined && { pageSize }), }, )}`; @@ -268,8 +268,8 @@ export const api = new Elysia({ prefix: "/events" }) branch: z.enum(ACM_BRANCHES), }), query: z.object({ - offset: z.number().optional(), - pageSize: z.number().optional(), + offset: z.string().optional(), + pageSize: z.string().optional(), }), response: createResponseSchema(EventsArraySchema, { errorCodes: [401, 404, 500], @@ -449,15 +449,15 @@ export const api = new Elysia({ prefix: "/events" }) }, ) .put( - "/update/:eventId", + "/:eventId", async ({ body, params, token }) => { const eventId = params.eventId; - // console.log("putting and updating!"); - // console.log(eventId); + console.log("putting and updating!"); + console.log(eventId); const url = `${API_URL.V1.EVENTS.BY_ID.UPDATE(eventId)}`; - console.log(url); + // console.log(url); const res = await fetch(url, { method: "PUT", @@ -498,4 +498,83 @@ export const api = new Elysia({ prefix: "/events" }) errorCodes: [401, 404, 500], }), }, + ) + .get( + "/search-events", + async ({ query }) => { + const { + eventsFrom, + eventsTill, + offset, + pageSize, + pattern, + branch, + ongoing, + } = query; + + const currOffset = + offset === undefined || pageSize === undefined ? "0" : offset; + const currPageSize = pageSize === undefined ? "150" : pageSize; + + const url = `${API_URL.V1.EVENTS.GET_ALL}?${new URLSearchParams({ + ...{ offset: currOffset }, + ...{ pageSize: currPageSize }, + })}`; + + const res = await fetch(url, { method: "GET" }); + + if (!res.ok) { + const response = await res.json(); + console.log(response); + if (isErrorResponse(response)) { + return createErrorResponse(response, { + allowedCodes: [401, 404, 500], + }); + } + } + const response = await res.json(); + const validatedArray = EventsArraySchema.parse(response); + + const fromDate = eventsFrom ? new Date(eventsFrom) : null; + const tillDate = eventsTill ? new Date(eventsTill) : null; + + const resultArray = validatedArray?.filter(event => { + const eventStartDate = event.startDate + ? new Date(event.startDate) + : null; + const eventEndDate = event.endDate ? new Date(event.endDate) : null; + + if (fromDate && eventStartDate && eventStartDate < fromDate) + return false; + else if (tillDate && eventEndDate && eventEndDate > tillDate) + return false; + else if (branch && event.branch !== branch) return false; + else if (ongoing && ongoing === "true" && event.ended === true) + return false; + else if ( + pattern && + !event.title?.toLowerCase().startsWith(pattern.toLowerCase()) + ) + return false; + + return true; + }); + const validatedRes = EventsArraySchema.parse(resultArray); + return toSuccessResponse(validatedRes); + }, + { + query: z.object({ + eventsFrom: z.string().optional(), + eventsTill: z.string().optional(), + offset: z.string().optional(), + pageSize: z.string().optional(), + pattern: z.string().optional(), + branch: z.enum(ACM_BRANCHES).optional(), + ongoing: z.string().optional(), + }), + + response: createResponseSchema(EventsArraySchema, { + errorCodes: [401, 404, 500], + }), + }, ); diff --git a/src/routes/api.$.ts b/src/routes/api.$.ts index fef2b18..c25f356 100644 --- a/src/routes/api.$.ts +++ b/src/routes/api.$.ts @@ -81,6 +81,8 @@ export const Route = createFileRoute("/api/$")({ handlers: { GET: handle, POST: handle, + DELETE: handle, + PUT: handle, }, }, }); From a3d4aadd688764c8b1ab7cc72ef9882545c3471e Mon Sep 17 00:00:00 2001 From: Savy Date: Wed, 25 Mar 2026 12:51:46 +0530 Subject: [PATCH 33/47] use logtape instead of pino --- package.json | 9 +++++---- pnpm-lock.yaml | 24 +++++++++++++++++++++++- 2 files changed, 28 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 4b0cdd7..12fe67c 100644 --- a/package.json +++ b/package.json @@ -31,10 +31,11 @@ "pnpm": ">=10.0.0" }, "dependencies": { - "@bogeychan/elysia-logger": "^0.1.10", "@elysiajs/eden": "^1.4.5", "@elysiajs/openapi": "^1.4.11", "@fontsource/space-grotesk": "^5.2.10", + "@logtape/elysia": "^2.0.5", + "@logtape/logtape": "^2.0.5", "@netlify/vite-plugin-tanstack-start": "^1.0.2", "@react-email/components": "^1.0.2", "@t3-oss/env-core": "^0.13.8", @@ -59,12 +60,11 @@ "zod": "^4.1.11" }, "devDependencies": { - "@tanstack/react-router-devtools": "^1.132.0", - "@tanstack/react-query-devtools": "^5.84.2", - "concurrently": "^9.2.1", "@biomejs/biome": "2.4.4", "@react-email/preview-server": "5.1.0", "@tanstack/devtools-vite": "^0.3.11", + "@tanstack/react-query-devtools": "^5.84.2", + "@tanstack/react-router-devtools": "^1.132.0", "@testing-library/dom": "^10.4.0", "@testing-library/react": "^16.2.0", "@types/node": "^22.10.2", @@ -73,6 +73,7 @@ "@types/react-dom": "^19.2.0", "@vitejs/plugin-react": "^5.0.4", "babel-plugin-react-compiler": "^1.0.0", + "concurrently": "^9.2.1", "husky": "^9.1.7", "jsdom": "^27.0.0", "react-email": "^5.1.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index be0ff16..fd0dbe3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,6 +20,12 @@ importers: '@fontsource/space-grotesk': specifier: ^5.2.10 version: 5.2.10 + '@logtape/elysia': + specifier: ^2.0.5 + version: 2.0.5(@logtape/logtape@2.0.5)(elysia@1.4.25(@sinclair/typebox@0.34.48)(exact-mirror@0.2.7(@sinclair/typebox@0.34.48))(file-type@21.3.0)(openapi-types@12.1.3)(typescript@5.9.3)) + '@logtape/logtape': + specifier: ^2.0.5 + version: 2.0.5 '@netlify/vite-plugin-tanstack-start': specifier: ^1.0.2 version: 1.2.12(@tanstack/react-start@1.162.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(tsx@4.21.0)(yaml@2.8.2)))(rollup@4.59.0)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(tsx@4.21.0)(yaml@2.8.2)) @@ -88,7 +94,7 @@ importers: version: 4.3.6 devDependencies: '@biomejs/biome': - specifier: ^2.3.14 + specifier: 2.4.4 version: 2.4.4 '@react-email/preview-server': specifier: 5.1.0 @@ -1053,6 +1059,15 @@ packages: '@jridgewell/trace-mapping@0.3.31': resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + '@logtape/elysia@2.0.5': + resolution: {integrity: sha512-H9hz0JtWbuGIQP0YWRNRfnvlM9UnRfvTE6rpCLnTlOd8wIgdiNaAHT2wPsg9bvXZ/Sf3omUo1qdt2HPUHGanWw==} + peerDependencies: + '@logtape/logtape': ^2.0.5 + elysia: ^1.4.0 + + '@logtape/logtape@2.0.5': + resolution: {integrity: sha512-UizDkh20ZPJVOddRxG1F77WhHdlNl/sbQgoO8T534R7XvUBMAJ9En9f35u+meW2tRsNLvjz6R87Zanwf53tspQ==} + '@mapbox/node-pre-gyp@2.0.3': resolution: {integrity: sha512-uwPAhccfFJlsfCxMYTwOdVfOz3xqyj8xYL3zJj8f0pb30tLohnnFPhLuqp4/qoEz8sNxe4SESZedcBojRefIzg==} engines: {node: '>=18'} @@ -5985,6 +6000,13 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.5 + '@logtape/elysia@2.0.5(@logtape/logtape@2.0.5)(elysia@1.4.25(@sinclair/typebox@0.34.48)(exact-mirror@0.2.7(@sinclair/typebox@0.34.48))(file-type@21.3.0)(openapi-types@12.1.3)(typescript@5.9.3))': + dependencies: + '@logtape/logtape': 2.0.5 + elysia: 1.4.25(@sinclair/typebox@0.34.48)(exact-mirror@0.2.7(@sinclair/typebox@0.34.48))(file-type@21.3.0)(openapi-types@12.1.3)(typescript@5.9.3) + + '@logtape/logtape@2.0.5': {} + '@mapbox/node-pre-gyp@2.0.3': dependencies: consola: 3.4.2 From 0071bf26f1df63de5ae9f4cc93a6525c66084fd2 Mon Sep 17 00:00:00 2001 From: Savy Date: Wed, 25 Mar 2026 12:53:42 +0530 Subject: [PATCH 34/47] create logger and openapi plugins, setup logtape --- src/lib/api/utils/plugins.ts | 53 +++++++++++++++++++++++++++ src/routes/api.$.ts | 71 +++--------------------------------- src/server.ts | 11 ++++++ 3 files changed, 69 insertions(+), 66 deletions(-) create mode 100644 src/lib/api/utils/plugins.ts create mode 100644 src/server.ts diff --git a/src/lib/api/utils/plugins.ts b/src/lib/api/utils/plugins.ts new file mode 100644 index 0000000..5db194f --- /dev/null +++ b/src/lib/api/utils/plugins.ts @@ -0,0 +1,53 @@ +import { openapi as createOpenAPI } from "@elysiajs/openapi"; +import { elysiaLogger } from "@logtape/elysia"; +import { configure, getConsoleSink } from "@logtape/logtape"; +import * as z from "zod"; + +let loggerConfigured = false; + +export const configureLogger = async () => { + if (loggerConfigured) return; + await configure({ + reset: import.meta.env.DEV, + sinks: { console: getConsoleSink() }, + loggers: [ + { + category: ["logtape", "meta"], + sinks: ["console"], + lowestLevel: "warning", + }, + { category: "elysia", sinks: ["console"], lowestLevel: "info" }, + ], + }); + + loggerConfigured = true; +}; + +export const logger = () => elysiaLogger(); + +export const openapi = createOpenAPI({ + path: "/docs", + documentation: { + info: { + title: "PEC ACM Community Management & Events Platform API", + description: `A REST API for managing community members, events, and user engagement for ACM at Punjab Engineering College. +## Authentication +Most endpoints require JWT authentication. Obtain a token via the \`POST /v1/user/login\` endpoint and include it in the \`Authorization\` header as a Bearer token. + +## Response Format +All responses follow a consistent JSON structure with appropriate HTTP status codes and error messages.`, + version: "1.0.0", + license: { + name: "MIT", + url: "https://github.com/PEC-CSS/acm-website-backend/blob/main/LICENSE", + }, + contact: { + name: "PEC ACM Webmaster", + email: "bruh@example.com", + }, + }, + }, + mapJsonSchema: { + zod: z.toJSONSchema, + }, +}); diff --git a/src/routes/api.$.ts b/src/routes/api.$.ts index bb95bda..84cb236 100644 --- a/src/routes/api.$.ts +++ b/src/routes/api.$.ts @@ -1,74 +1,14 @@ -import { createPinoLogger } from "@bogeychan/elysia-logger"; import { treaty } from "@elysiajs/eden"; -import { openapi } from "@elysiajs/openapi"; import { createFileRoute } from "@tanstack/react-router"; import { createIsomorphicFn } from "@tanstack/react-start"; import { Elysia } from "elysia"; -import * as z from "zod"; import * as handlers from "$lib/api"; +import * as plugins from "$lib/api/utils/plugins"; -const log = createPinoLogger({ - level: "debug", - transport: { - target: "pino-pretty", - options: { - colorize: true, - translateTime: "mm/dd/yyyy HH:MM:ss", - ignore: "pid,hostname,req,request,responseTime", - messageFormat: "{req.method} {req.url} - {responseTime}ms", - }, - }, -}); - -const app = new Elysia({ - prefix: "/api", -}) - .use( - log.into({ - autoLogging: { - ignore() { - return false; - }, - }, - customProps(ctx) { - return { - req: { - method: ctx.request.method, - url: new URL(ctx.request.url).pathname, - }, - }; - }, - }), - ) - .use( - openapi({ - path: "/docs", - documentation: { - info: { - title: "PEC ACM Community Management & Events Platform API", - description: `A REST API for managing community members, events, and user engagement for ACM at Punjab Engineering College. -## Authentication -Most endpoints require JWT authentication. Obtain a token via the \`POST /v1/user/login\` endpoint and include it in the \`Authorization\` header as a Bearer token. - -## Response Format -All responses follow a consistent JSON structure with appropriate HTTP status codes and error messages.`, - version: "1.0.0", - license: { - name: "MIT", - url: "https://github.com/PEC-CSS/acm-website-backend/blob/main/LICENSE", - }, - contact: { - name: "PEC ACM Webmaster", - email: "bruh@example.com", - }, - }, - }, - mapJsonSchema: { - zod: z.toJSONSchema, - }, - }), - ) +const app = new Elysia({ prefix: "/api" }) + .use(plugins.logger()) + .use(plugins.openapi) .use(handlers.auth) .use(handlers.events) .use(handlers.health) @@ -79,8 +19,7 @@ const handle = ({ request }: { request: Request }) => app.fetch(request); export const Route = createFileRoute("/api/$")({ server: { handlers: { - GET: handle, - POST: handle, + ANY: handle, }, }, }); diff --git a/src/server.ts b/src/server.ts new file mode 100644 index 0000000..9a1f54d --- /dev/null +++ b/src/server.ts @@ -0,0 +1,11 @@ +import handler, { createServerEntry } from "@tanstack/react-start/server-entry"; + +import { configureLogger } from "$lib/api/utils/plugins"; + +await configureLogger(); + +export default createServerEntry({ + fetch(req) { + return handler.fetch(req); + }, +}); From 5dba8c6c8a79640fd61ca66fc050c6596ee4339f Mon Sep 17 00:00:00 2001 From: Savy Date: Wed, 25 Mar 2026 12:54:09 +0530 Subject: [PATCH 35/47] use import.meta.env for getting deployment env --- src/lib/api/handlers/health.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/lib/api/handlers/health.ts b/src/lib/api/handlers/health.ts index 9ad82a2..b7b2ebe 100644 --- a/src/lib/api/handlers/health.ts +++ b/src/lib/api/handlers/health.ts @@ -7,10 +7,10 @@ const base = () => ({ version: import.meta.env.PKG_VERSION, commit: import.meta.env.COMMIT_HASH, timestamp: new Date().toISOString(), - uptime: process.uptime(), - environment: (process.env.NODE_ENV ?? "development") as - | "production" - | "development", + uptime: `${Math.floor(process.uptime() / 60)}mins`, + environment: import.meta.env.DEV + ? ("development" as const) + : ("production" as const), }); export const api = new Elysia({ prefix: "/health" }).get( @@ -49,7 +49,7 @@ export const api = new Elysia({ prefix: "/health" }).get( version: z.string(), commit: z.string(), timestamp: z.iso.datetime(), - uptime: z.number(), + uptime: z.string(), environment: z.enum(["production", "development"]), upstream: z.object({ status: z.enum(["ok", "unreachable"]), From a93b80dbdd6918cfa22ccdb6d15157731569015d Mon Sep 17 00:00:00 2001 From: Savy Date: Wed, 25 Mar 2026 15:44:25 +0530 Subject: [PATCH 36/47] rename schema for login reponse from backend --- src/lib/api/handlers/auth.ts | 4 ++-- src/lib/api/types/schemas.ts | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/lib/api/handlers/auth.ts b/src/lib/api/handlers/auth.ts index c56bf64..326d8d2 100644 --- a/src/lib/api/handlers/auth.ts +++ b/src/lib/api/handlers/auth.ts @@ -11,8 +11,8 @@ import VerifyEmail from "$emails/verify"; import env from "$env/server"; import { isErrorResponse } from "../types"; import { - APILoginResponseSchema, AuthenticatedUserSchema, + UpstreamLoginResponseSchema, UserSchema, } from "../types/schemas"; import { @@ -51,7 +51,7 @@ export const api = new Elysia({ prefix: "/auth" }) }); } - const validated = APILoginResponseSchema.parse(response); + const validated = UpstreamLoginResponseSchema.parse(response); const claims = decodeJWTPayload(validated.jwtToken); if (!claims) return status(500, { diff --git a/src/lib/api/types/schemas.ts b/src/lib/api/types/schemas.ts index 6c6830c..6ec97ac 100644 --- a/src/lib/api/types/schemas.ts +++ b/src/lib/api/types/schemas.ts @@ -20,7 +20,7 @@ export const UserSchema = BaseUserSchema.extend({ experience: z.number(), }); -export const APIUserSchema = BaseUserSchema.extend({ +export const UpstreamUserSchema = BaseUserSchema.extend({ dp: z.string().nullable(), password: z.string(), xp: z.number(), @@ -31,9 +31,9 @@ export const AuthenticatedUserSchema = z.object({ user: UserSchema, }); -export const APILoginResponseSchema = z.object({ +export const UpstreamLoginResponseSchema = z.object({ jwtToken: z.string(), - user: APIUserSchema, + user: UpstreamUserSchema, }); // everything can be made optional to support => From 1d3c7e5d5f52f37cd6340f135e6b8dcb0294affe Mon Sep 17 00:00:00 2001 From: Savy Date: Wed, 25 Mar 2026 15:45:29 +0530 Subject: [PATCH 37/47] bug: add expiry to user cookie --- src/lib/api/handlers/auth.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/api/handlers/auth.ts b/src/lib/api/handlers/auth.ts index 326d8d2..47343d1 100644 --- a/src/lib/api/handlers/auth.ts +++ b/src/lib/api/handlers/auth.ts @@ -75,7 +75,7 @@ export const api = new Elysia({ prefix: "/auth" }) verified: validated.user.verified, }; - userCookie.set({ value: userData, ...cookieBase }); + userCookie.set({ value: userData, ...cookieBase(claims.exp) }); return toSuccessResponse({ token: validated.jwtToken, From 0ccafbbf05afb65aeb41a6defada18a580096602 Mon Sep 17 00:00:00 2001 From: Savy Date: Wed, 25 Mar 2026 15:46:18 +0530 Subject: [PATCH 38/47] remove pino logger, add pretty logtape plugin --- package.json | 1 + pnpm-lock.yaml | 26 ++++++++++++-------------- src/lib/api/utils/plugins.ts | 7 ++++++- 3 files changed, 19 insertions(+), 15 deletions(-) diff --git a/package.json b/package.json index 12fe67c..f8ec7b6 100644 --- a/package.json +++ b/package.json @@ -36,6 +36,7 @@ "@fontsource/space-grotesk": "^5.2.10", "@logtape/elysia": "^2.0.5", "@logtape/logtape": "^2.0.5", + "@logtape/pretty": "^2.0.5", "@netlify/vite-plugin-tanstack-start": "^1.0.2", "@react-email/components": "^1.0.2", "@t3-oss/env-core": "^0.13.8", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index fd0dbe3..11a3d4c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,9 +8,6 @@ importers: .: dependencies: - '@bogeychan/elysia-logger': - specifier: ^0.1.10 - version: 0.1.10(elysia@1.4.25(@sinclair/typebox@0.34.48)(exact-mirror@0.2.7(@sinclair/typebox@0.34.48))(file-type@21.3.0)(openapi-types@12.1.3)(typescript@5.9.3))(pino@10.3.1) '@elysiajs/eden': specifier: ^1.4.5 version: 1.4.8(elysia@1.4.25(@sinclair/typebox@0.34.48)(exact-mirror@0.2.7(@sinclair/typebox@0.34.48))(file-type@21.3.0)(openapi-types@12.1.3)(typescript@5.9.3)) @@ -26,6 +23,9 @@ importers: '@logtape/logtape': specifier: ^2.0.5 version: 2.0.5 + '@logtape/pretty': + specifier: ^2.0.5 + version: 2.0.5(@logtape/logtape@2.0.5) '@netlify/vite-plugin-tanstack-start': specifier: ^1.0.2 version: 1.2.12(@tanstack/react-start@1.162.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(tsx@4.21.0)(yaml@2.8.2)))(rollup@4.59.0)(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(tsx@4.21.0)(yaml@2.8.2)) @@ -330,12 +330,6 @@ packages: cpu: [x64] os: [win32] - '@bogeychan/elysia-logger@0.1.10': - resolution: {integrity: sha512-wFp3KUCNIkCV4zcbo70gifHH99ch7e4LNrP5Xa5e2MRO2MDyPgM92SWQmrzkng6PsSZk13+UKJskGNQ+ZuDZkQ==} - peerDependencies: - elysia: '>= 1.2.10' - pino: '>= 9.6.0' - '@borewit/text-codec@0.2.1': resolution: {integrity: sha512-k7vvKPbf7J2fZ5klGRD9AeKfUvojuZIQ3BT5u7Jfv+puwXkUBUT5PVyMDfJZpy30CBDXGMgw7fguK/lpOMBvgw==} @@ -1068,6 +1062,11 @@ packages: '@logtape/logtape@2.0.5': resolution: {integrity: sha512-UizDkh20ZPJVOddRxG1F77WhHdlNl/sbQgoO8T534R7XvUBMAJ9En9f35u+meW2tRsNLvjz6R87Zanwf53tspQ==} + '@logtape/pretty@2.0.5': + resolution: {integrity: sha512-jU5pYL0CW0tFmxBS5umMF5VEMq1vXLvkqKrj7KRHnSlb5SrBOSCYl0w4q7FmPPFVADmgTmzVVr6IcIWwK/2Nig==} + peerDependencies: + '@logtape/logtape': ^2.0.5 + '@mapbox/node-pre-gyp@2.0.3': resolution: {integrity: sha512-uwPAhccfFJlsfCxMYTwOdVfOz3xqyj8xYL3zJj8f0pb30tLohnnFPhLuqp4/qoEz8sNxe4SESZedcBojRefIzg==} engines: {node: '>=18'} @@ -5562,11 +5561,6 @@ snapshots: '@biomejs/cli-win32-x64@2.4.4': optional: true - '@bogeychan/elysia-logger@0.1.10(elysia@1.4.25(@sinclair/typebox@0.34.48)(exact-mirror@0.2.7(@sinclair/typebox@0.34.48))(file-type@21.3.0)(openapi-types@12.1.3)(typescript@5.9.3))(pino@10.3.1)': - dependencies: - elysia: 1.4.25(@sinclair/typebox@0.34.48)(exact-mirror@0.2.7(@sinclair/typebox@0.34.48))(file-type@21.3.0)(openapi-types@12.1.3)(typescript@5.9.3) - pino: 10.3.1 - '@borewit/text-codec@0.2.1': {} '@colors/colors@1.6.0': {} @@ -6007,6 +6001,10 @@ snapshots: '@logtape/logtape@2.0.5': {} + '@logtape/pretty@2.0.5(@logtape/logtape@2.0.5)': + dependencies: + '@logtape/logtape': 2.0.5 + '@mapbox/node-pre-gyp@2.0.3': dependencies: consola: 3.4.2 diff --git a/src/lib/api/utils/plugins.ts b/src/lib/api/utils/plugins.ts index 5db194f..8bafee9 100644 --- a/src/lib/api/utils/plugins.ts +++ b/src/lib/api/utils/plugins.ts @@ -1,6 +1,7 @@ import { openapi as createOpenAPI } from "@elysiajs/openapi"; import { elysiaLogger } from "@logtape/elysia"; import { configure, getConsoleSink } from "@logtape/logtape"; +import { prettyFormatter } from "@logtape/pretty"; import * as z from "zod"; let loggerConfigured = false; @@ -9,7 +10,11 @@ export const configureLogger = async () => { if (loggerConfigured) return; await configure({ reset: import.meta.env.DEV, - sinks: { console: getConsoleSink() }, + sinks: { + console: getConsoleSink({ + formatter: prettyFormatter, + }), + }, loggers: [ { category: ["logtape", "meta"], From 0a1efad2b2efa7ed192acb2f4686947ec98af391 Mon Sep 17 00:00:00 2001 From: Savy Date: Wed, 25 Mar 2026 15:46:43 +0530 Subject: [PATCH 39/47] refactor getTreaty fn --- src/lib/treaty.ts | 10 ++++++++++ src/routes/api.$.ts | 10 +++------- 2 files changed, 13 insertions(+), 7 deletions(-) create mode 100644 src/lib/treaty.ts diff --git a/src/lib/treaty.ts b/src/lib/treaty.ts new file mode 100644 index 0000000..68eafae --- /dev/null +++ b/src/lib/treaty.ts @@ -0,0 +1,10 @@ +// src/lib/treaty.ts +import type { App } from "src/routes/api.$"; + +import { treaty } from "@elysiajs/eden"; +import { createIsomorphicFn } from "@tanstack/react-start"; +import { app } from "src/routes/api.$"; + +export const getTreaty = createIsomorphicFn() + .server(() => reaty(app).api) + .client(() => treaty("localhost:3000").api); diff --git a/src/routes/api.$.ts b/src/routes/api.$.ts index 84cb236..15d6adb 100644 --- a/src/routes/api.$.ts +++ b/src/routes/api.$.ts @@ -1,12 +1,10 @@ -import { treaty } from "@elysiajs/eden"; import { createFileRoute } from "@tanstack/react-router"; -import { createIsomorphicFn } from "@tanstack/react-start"; import { Elysia } from "elysia"; import * as handlers from "$lib/api"; import * as plugins from "$lib/api/utils/plugins"; -const app = new Elysia({ prefix: "/api" }) +export const app = new Elysia({ prefix: "/api" }) .use(plugins.logger()) .use(plugins.openapi) .use(handlers.auth) @@ -14,6 +12,8 @@ const app = new Elysia({ prefix: "/api" }) .use(handlers.health) .use(handlers.user); +export type App = typeof app; + const handle = ({ request }: { request: Request }) => app.fetch(request); export const Route = createFileRoute("/api/$")({ @@ -23,7 +23,3 @@ export const Route = createFileRoute("/api/$")({ }, }, }); - -export const getTreaty = createIsomorphicFn() - .server(() => treaty(app).api) - .client(() => treaty("localhost:3000").api); From 4048dca1a07a0926769aa152fdcfaa72138fdfce Mon Sep 17 00:00:00 2001 From: Savy Date: Wed, 25 Mar 2026 15:47:37 +0530 Subject: [PATCH 40/47] move signin/signour logic to client side --- src/lib/fns/auth.ts | 20 +++++++++++++ src/lib/server/fns.ts | 39 -------------------------- src/routes/(auth)/sign-in.tsx | 4 +-- src/routes/_authed/dashboard/index.tsx | 2 +- 4 files changed, 23 insertions(+), 42 deletions(-) create mode 100644 src/lib/fns/auth.ts diff --git a/src/lib/fns/auth.ts b/src/lib/fns/auth.ts new file mode 100644 index 0000000..9f73606 --- /dev/null +++ b/src/lib/fns/auth.ts @@ -0,0 +1,20 @@ +import { getTreaty } from "$lib/treaty"; + +export const signinFn = async (email: string, password: string) => { + const api = getTreaty(); + const result = await api.auth["sign-in"].post( + { email, password }, + { fetch: { credentials: "include" } }, + ); + + if (result.error) return { error: result.error.value.message }; + + return { success: true }; +}; + +export const signoutFn = async () => { + const api = getTreaty(); + await api.auth["sign-out"].post({}, { fetch: { credentials: "include" } }); + + return { success: true }; +}; diff --git a/src/lib/server/fns.ts b/src/lib/server/fns.ts index 0a165b8..e425d2f 100644 --- a/src/lib/server/fns.ts +++ b/src/lib/server/fns.ts @@ -1,11 +1,6 @@ import type { SessionUser } from "$lib/api/types"; import { createServerFn } from "@tanstack/react-start"; -import { deleteCookie, setCookie } from "@tanstack/react-start/server"; -import { getTreaty } from "src/routes/api.$"; - -import { cookieBase } from "$lib/constants/api"; -import { decodeJWTPayload } from "$lib/utils"; import { readSession } from "./session"; @@ -16,37 +11,3 @@ export const fetchUserFn = createServerFn({ method: "GET" }).handler( return session.user; }, ); - -export const signinFn = createServerFn({ method: "POST" }) - .inputValidator((data: { email: string; password: string }) => data) - .handler(async ({ data }) => { - const api = getTreaty(); - - const { data: res, error } = await api.auth["sign-in"].post({ - email: data.email, - password: data.password, - }); - - if (error) return { error: error.value.message }; - - const claims = decodeJWTPayload(res.data.token); - - if (!claims) return { error: "Invalid token received from server" }; - - setCookie("session", res.data.token, cookieBase(claims.exp)); - setCookie("user", JSON.stringify(res.data.user), cookieBase(claims.exp)); - - return { success: true }; - }); - -export const signoutFn = createServerFn({ method: "POST" }).handler( - async () => { - const api = getTreaty(); - - await api.auth["sign-out"].post(); - deleteCookie("session"); - deleteCookie("user"); - - return { success: true }; - }, -); diff --git a/src/routes/(auth)/sign-in.tsx b/src/routes/(auth)/sign-in.tsx index 3dcadd4..e8e6003 100644 --- a/src/routes/(auth)/sign-in.tsx +++ b/src/routes/(auth)/sign-in.tsx @@ -7,7 +7,7 @@ import { } from "@tanstack/react-router"; import { useState } from "react"; -import { signinFn } from "$lib/server/fns"; +import { signinFn } from "$lib/fns/auth"; export const Route = createFileRoute("/(auth)/sign-in")({ head: () => ({ @@ -37,7 +37,7 @@ function RouteComponent() { }, onSubmit: async ({ value }) => { setServerError(null); - const result = await signinFn({ data: value }); + const result = await signinFn(value.email, value.password); if (result.error) { setServerError(result.error); diff --git a/src/routes/_authed/dashboard/index.tsx b/src/routes/_authed/dashboard/index.tsx index 1a973c6..5143357 100644 --- a/src/routes/_authed/dashboard/index.tsx +++ b/src/routes/_authed/dashboard/index.tsx @@ -1,6 +1,6 @@ import { createFileRoute, useRouter } from "@tanstack/react-router"; -import { signoutFn } from "$lib/server/fns"; +import { signoutFn } from "$lib/fns/auth"; export const Route = createFileRoute("/_authed/dashboard/")({ component: RouteComponent, From 8c1c5bc57407b26e700c9c2d49d1bed1f3031ee3 Mon Sep 17 00:00:00 2001 From: Savy Date: Wed, 25 Mar 2026 15:47:50 +0530 Subject: [PATCH 41/47] remove comment --- src/lib/constants/org.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/lib/constants/org.ts b/src/lib/constants/org.ts index 6df2e93..14654b2 100644 --- a/src/lib/constants/org.ts +++ b/src/lib/constants/org.ts @@ -1,5 +1,3 @@ -// TODO: Rethink filename. - export const BRANCH_NAMES = [ "CSE", "ECE", From 98d28b3e0e6652c28ca01ffc7f5e2ff52b644816 Mon Sep 17 00:00:00 2001 From: Savy Date: Wed, 25 Mar 2026 16:23:27 +0530 Subject: [PATCH 42/47] add path alias for src dir --- src/lib/treaty.ts | 3 ++- tsconfig.json | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/lib/treaty.ts b/src/lib/treaty.ts index 68eafae..31be388 100644 --- a/src/lib/treaty.ts +++ b/src/lib/treaty.ts @@ -3,7 +3,8 @@ import type { App } from "src/routes/api.$"; import { treaty } from "@elysiajs/eden"; import { createIsomorphicFn } from "@tanstack/react-start"; -import { app } from "src/routes/api.$"; + +import { app } from "~/routes/api.$"; export const getTreaty = createIsomorphicFn() .server(() => reaty(app).api) diff --git a/tsconfig.json b/tsconfig.json index ce3bc7f..87905f8 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -22,6 +22,7 @@ "noUncheckedSideEffectImports": true, "baseUrl": ".", "paths": { + "~/*": ["./src/*"], "$components/*": ["./src/components/*"], "$data/*": ["./src/data/*"], "$env/*": ["./src/lib/env/*"], From e10b09a0aa8abcb086e46f93f195eadc069a2efa Mon Sep 17 00:00:00 2001 From: Savy Date: Fri, 3 Apr 2026 11:18:06 +0530 Subject: [PATCH 43/47] add api docs to health route --- src/lib/api/handlers/health.ts | 143 +++++++++++++++++++++++---------- 1 file changed, 102 insertions(+), 41 deletions(-) diff --git a/src/lib/api/handlers/health.ts b/src/lib/api/handlers/health.ts index c6aed4a..b4f782a 100644 --- a/src/lib/api/handlers/health.ts +++ b/src/lib/api/handlers/health.ts @@ -3,6 +3,63 @@ import z from "zod"; import { API_URL } from "$lib/constants/api"; +const ResponseSchema = z + .object({ + status: z.enum(["ok", "degraded"]).meta({ + title: "Status", + description: "Overall health status of the service", + }), + version: z.string().meta({ + title: "Version", + description: "Application version", + examples: ["1.0.0", "2.1.5"], + }), + commit: z.string().meta({ + title: "Commit", + description: "Git commit hash of the current deployment", + examples: ["abc123def456", "f7e9d8c6b5a4"], + }), + timestamp: z.iso.datetime().meta({ + title: "Timestamp", + description: "ISO 8601 timestamp of the health check", + examples: ["2026-04-03T10:30:00Z", "2026-04-03T14:45:30.123Z"], + }), + uptime: z.string().meta({ + title: "Uptime", + description: "Service uptime in minutes", + examples: ["120mins", "1440mins"], + }), + environment: z.enum(["production", "development"]).meta({ + title: "Environment", + description: "Deployment environment", + }), + upstream: z + .object({ + status: z.enum(["ok", "unreachable"]).meta({ + title: "Status", + description: "Upstream service status", + examples: ["ok", "unreachable"], + }), + latency: z + .string() + .nullable() + .meta({ + title: "Latency", + description: "Upstream response latency in milliseconds", + examples: ["45ms", "120ms", null], + }), + }) + .meta({ + title: "Upstream", + description: "Upstream service health details", + }), + }) + .meta({ + $id: "HealthResponse", + title: "Health Response", + description: "Health check response containing service status and upstream server information", + }); + const base = () => ({ version: import.meta.env.PKG_VERSION, commit: import.meta.env.COMMIT_HASH, @@ -11,48 +68,52 @@ const base = () => ({ environment: import.meta.env.DEV ? ("development" as const) : ("production" as const), }); -export const api = new Elysia({ prefix: "/health" }).get( - "/", - async () => { - const start = Date.now(); +export const api = new Elysia({ prefix: "/health" }) + .model({ + Health: ResponseSchema, + }) + .get( + "/", + async ({ status }) => { + const start = Date.now(); - try { - const res = await fetch(API_URL.HEALTH.CHECK); - const upstreamLatency = Date.now() - start; + try { + const res = await fetch(API_URL.HEALTH.CHECK); + const upstreamLatency = Date.now() - start; - if (!res.ok) throw new Error("upstream returned non-ok status"); + if (!res.ok) throw new Error("upstream returned non-ok status"); - return { - ...base(), - status: "ok", - upstream: { + return { + ...base(), status: "ok", - latency: `${upstreamLatency}ms`, - }, - } as const; - } catch { - return { - ...base(), - status: "degraded", - upstream: { - status: "unreachable", - latency: null, - }, - } as const; - } - }, - { - response: z.object({ - status: z.enum(["ok", "degraded"]), - version: z.string(), - commit: z.string(), - timestamp: z.iso.datetime(), - uptime: z.string(), - environment: z.enum(["production", "development"]), - upstream: z.object({ - status: z.enum(["ok", "unreachable"]), - latency: z.string().nullable(), - }), - }), - }, -); + upstream: { + status: "ok", + latency: `${upstreamLatency}ms`, + }, + } as const; + } catch { + return status(503, { + ...base(), + status: "degraded", + upstream: { + status: "unreachable", + latency: null, + }, + } as const); + } + }, + { + response: { 200: "Health", 503: "Health" }, + detail: { + summary: "Health check", + description: `Checks the health status of the service and its upstream dependencies. + +Returns the current service status, version information, and upstream service connectivity. + +**Response Codes:** +- **200**: Service is healthy or degraded but operational +- **503**: Service is unavailable`, + tags: ["Health"], + }, + }, + ); From df586daafe7a26fbff92ac136a302184252dbd04 Mon Sep 17 00:00:00 2001 From: Savy Date: Fri, 3 Apr 2026 11:18:35 +0530 Subject: [PATCH 44/47] correctly parse user from cookie, instead of asserting --- src/lib/api/utils/macros.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/lib/api/utils/macros.ts b/src/lib/api/utils/macros.ts index 7c07ff1..995075d 100644 --- a/src/lib/api/utils/macros.ts +++ b/src/lib/api/utils/macros.ts @@ -1,10 +1,10 @@ import type { Designation } from "$lib/types"; -import type { SessionUser } from "../types"; import { Elysia, status } from "elysia"; import { hasRole } from "$lib/types"; import { decodeJWTPayload } from "$lib/utils"; +import { UserSchema } from "../types/schemas"; const unauthorized = (message: string) => status(401, { @@ -39,24 +39,24 @@ export const requireAuth = new Elysia({ name: "require-auth" }).macro({ return unauthorized("Your session has expired. Please sign in again."); } - const userData = userCookie.value as SessionUser | undefined; + const { data: parsedUser, success } = UserSchema.safeParse(userCookie.value); - if (!userData) { + if (!success) { session.remove(); return unauthorized("Session data missing. Please sign in again."); } if (enabled !== true) { - if (!hasRole(userData.designation, enabled)) { + if (!hasRole(parsedUser.designation, enabled)) { return forbidden( - `This action requires the '${enabled}' role or above. Your current role is '${userData.designation}'.`, + `This action requires the '${enabled}' role or above. Your current role is '${parsedUser.designation}'.`, ); } } return { token, - user: userData, + user: parsedUser, }; }, }), From 0430563c7277f01f76e550b8c11fb4d1da420ea6 Mon Sep 17 00:00:00 2001 From: Savy Date: Fri, 3 Apr 2026 11:19:47 +0530 Subject: [PATCH 45/47] remove unused import --- src/lib/env/client.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/lib/env/client.ts b/src/lib/env/client.ts index 76c11ca..232f6b5 100644 --- a/src/lib/env/client.ts +++ b/src/lib/env/client.ts @@ -1,5 +1,4 @@ import { createEnv } from "@t3-oss/env-core"; -// import { z } from "zod"; export const env = createEnv({ clientPrefix: "VITE_", From b3edbc9f8106aa79d97c3ed9e2b7126c62c50016 Mon Sep 17 00:00:00 2001 From: Savy Date: Fri, 10 Apr 2026 21:30:44 +0530 Subject: [PATCH 46/47] add some meta to BranchEnum --- src/lib/api/handlers/user.ts | 2 +- src/lib/api/types/schemas.ts | 4 ++-- src/lib/api/utils/plugins.ts | 21 +++++++++++++++++++++ src/lib/types.ts | 12 +++++++++++- 4 files changed, 35 insertions(+), 4 deletions(-) diff --git a/src/lib/api/handlers/user.ts b/src/lib/api/handlers/user.ts index dad0838..f068e1e 100644 --- a/src/lib/api/handlers/user.ts +++ b/src/lib/api/handlers/user.ts @@ -41,7 +41,7 @@ export const api = new Elysia({ prefix: "/user" }) return toSuccessResponse(response); }, { - requireAuth: true, + requireAuth: "Admin", body: z.object({ email: z.email("Please provide a valid email"), newRole: z.string().min(1, "Role is required"), diff --git a/src/lib/api/types/schemas.ts b/src/lib/api/types/schemas.ts index b939083..040525e 100644 --- a/src/lib/api/types/schemas.ts +++ b/src/lib/api/types/schemas.ts @@ -1,6 +1,6 @@ import z from "zod"; -import { BranchEnum, DesignationEnum } from "$lib/types"; +import { AcmBranchEnum, DesignationEnum } from "$lib/types"; export const BaseUserSchema = z.object({ id: z.number(), @@ -37,7 +37,7 @@ export const UpstreamLoginResponseSchema = z.object({ export const BaseEventSchema = z.object({ id: z.number().optional(), title: z.string().optional(), - branch: BranchEnum.optional(), + branch: AcmBranchEnum.optional(), startDate: z.string().optional(), endDate: z.string().optional(), description: z.string().optional(), diff --git a/src/lib/api/utils/plugins.ts b/src/lib/api/utils/plugins.ts index 8bafee9..5a2f737 100644 --- a/src/lib/api/utils/plugins.ts +++ b/src/lib/api/utils/plugins.ts @@ -51,6 +51,27 @@ All responses follow a consistent JSON structure with appropriate HTTP status co email: "bruh@example.com", }, }, + components: { + securitySchemes: { + bearerAuth: { + type: "http", + scheme: "Bearer", + bearerFormat: "JWT", + }, + }, + }, + tags: [ + { + name: "Authentication", + description: + "Endpoints for user authentication, token verification, and session management. Includes user login, email verification, and ~~password reset~~ operations.", + }, + { + name: "Health", + description: + "Endpoints for monitoring service health and status. Includes health checks, uptime information, and upstream dependency status.", + }, + ], }, mapJsonSchema: { zod: z.toJSONSchema, diff --git a/src/lib/types.ts b/src/lib/types.ts index 8567e14..02dc863 100644 --- a/src/lib/types.ts +++ b/src/lib/types.ts @@ -2,7 +2,17 @@ import z from "zod"; import { ACM_BRANCHES, DESIGNATIONS } from "./constants/org"; -export const BranchEnum = z.enum(ACM_BRANCHES); +export const AcmBranchEnum = z.enum(ACM_BRANCHES).meta({ + title: "ACM Branch Name", + "x-enumDescriptions": { + DEVELOPMENT: "Development", + AI: "Artificial Intelligence", + CP: "Competitive Programming", + CYBER: "Cyber-Security", + SOCIALS: "Social", + WIT: "Women In Tech", + }, +}); export type Designation = (typeof DESIGNATIONS)[number]; From dd21ac756d500832b663bee7b4184b764bbde187 Mon Sep 17 00:00:00 2001 From: Savy Date: Sat, 18 Apr 2026 19:17:29 +0000 Subject: [PATCH 47/47] add some basic markup (#16) * update schema for data platforms * update code style doc * add tailwind * setup icon map * create placeholder navbar and footer * refactor social icons in separate components * remove unused import * add jsdocs, and classname util fns * add place holder markup for static routes * update navbar component * add sign-in page markup --- CODE_STYLE.md | 18 +-- package.json | 8 +- pnpm-lock.yaml | 206 ++++++++++++++++++++++++- src/components/footer.tsx | 39 +++++ src/components/navbar/index.tsx | 131 ++++++++++++++++ src/components/navbar/mobile-sheet.tsx | 24 +++ src/components/social-icon.tsx | 30 ++++ src/data/devs.yaml | 20 +-- src/data/index.ts | 10 +- src/data/socials.yaml | 10 +- src/data/team.yaml | 76 ++++----- src/lib/assets/pec-acm-logo.png | Bin 0 -> 62899 bytes src/lib/constants/platforms.ts | 30 ++++ src/lib/utils.ts | 69 +++++++-- src/routeTree.gen.ts | 127 +++++++++++++-- src/routes/(app)/branches.tsx | 9 ++ src/routes/(app)/events.tsx | 9 ++ src/routes/{ => (app)}/index.tsx | 2 +- src/routes/(app)/route.tsx | 22 +++ src/routes/(app)/team.tsx | 66 ++++++++ src/routes/(auth)/sign-in.tsx | 77 ++++----- src/routes/__root.tsx | 5 +- src/styles.css | 2 + vite.config.ts | 1 + 24 files changed, 839 insertions(+), 152 deletions(-) create mode 100644 src/components/footer.tsx create mode 100644 src/components/navbar/index.tsx create mode 100644 src/components/navbar/mobile-sheet.tsx create mode 100644 src/components/social-icon.tsx create mode 100644 src/lib/assets/pec-acm-logo.png create mode 100644 src/lib/constants/platforms.ts create mode 100644 src/routes/(app)/branches.tsx create mode 100644 src/routes/(app)/events.tsx rename src/routes/{ => (app)}/index.tsx (78%) create mode 100644 src/routes/(app)/route.tsx create mode 100644 src/routes/(app)/team.tsx diff --git a/CODE_STYLE.md b/CODE_STYLE.md index adac833..c78e7c8 100644 --- a/CODE_STYLE.md +++ b/CODE_STYLE.md @@ -117,10 +117,10 @@ import { z } from "zod"; import DEFAULT_AVATAR from "$assets/images/default-avatar.png"; // Components -import Avatar from "$components/avatar"; -import Button from "$components/button"; -import Modal from "$components/modal"; -import Spinner from "$components/spinner"; +import { Avatar } from "$components/avatar"; +import { Button } from "$components/button"; +import { Modal } from "$components/modal"; +import { Spinner } from "$components/spinner"; // Data import { USER_DEFAULTS } from "$data/constants"; @@ -155,9 +155,9 @@ import { useMemo, useState } from "react"; import HERO_IMAGE from "$assets/images/events-hero.jpg"; // Components -import EventCard from "$components/event-card"; -import FilterBar from "$components/filter-bar"; -import Pagination from "$components/pagination"; +import { EventCard } from "$components/event-card"; +import { FilterBar } from "$components/filter-bar"; +import { Pagination } from "$components/pagination"; // Data import { EVENT_CATEGORIES } from "$data/categories"; @@ -209,7 +209,7 @@ import { useState } from "react"; import ICON from "$assets/icons/star.svg"; -import Button from "$components/button"; +import { Button } from "$components/button"; import { api } from "$lib/api"; @@ -223,7 +223,7 @@ import { useQuery, useSuspenseQuery } from "@tanstack/react-query"; import { api, auth, cache } from "$lib/api"; // Avoid - Mixed categories without separation -import Button from "$components/button"; +import { Button } from "$components/button"; import styles from "$styles/app.module.scss"; import { useState } from "react"; import type { Props } from "./types"; diff --git a/package.json b/package.json index f03a2f9..d4cd4c3 100644 --- a/package.json +++ b/package.json @@ -27,6 +27,7 @@ "email:dev": "email dev --dir=./src/emails --port=2999" }, "dependencies": { + "@base-ui/react": "^1.3.0", "@elysiajs/eden": "^1.4.8", "@elysiajs/openapi": "^1.4.14", "@fontsource/space-grotesk": "^5.2.10", @@ -36,7 +37,8 @@ "@netlify/vite-plugin-tanstack-start": "^1.3.2", "@react-email/components": "1.0.10", "@t3-oss/env-core": "^0.13.11", - "@tailwindcss/vite": "^4.1.18", + "@tabler/icons-react": "^3.41.1", + "@tailwindcss/vite": "^4.2.2", "@tanstack/react-devtools": "^0.10.0", "@tanstack/react-form": "^1.28.5", "@tanstack/react-form-start": "^1.28.0", @@ -45,13 +47,15 @@ "@tanstack/react-router-ssr-query": "^1.166.10", "@tanstack/react-start": "^1.167.5", "@tanstack/router-plugin": "^1.167.4", + "clsx": "^2.1.1", "concurrently": "^9.2.1", "dotenv": "^17.2.4", "elysia": "^1.4.28", "nodemailer": "^8.0.3", "react": "^19.2.4", "react-dom": "^19.2.4", - "tailwindcss": "^4.1.18", + "tailwind-merge": "^3.5.0", + "tailwindcss": "^4.2.2", "zod": "^4.3.6" }, "devDependencies": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 80fd356..4a4dbe6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,6 +8,9 @@ importers: .: dependencies: + '@base-ui/react': + specifier: ^1.3.0 + version: 1.3.0(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@elysiajs/eden': specifier: ^1.4.8 version: 1.4.8(elysia@1.4.28(@sinclair/typebox@0.34.41)(exact-mirror@0.2.5(@sinclair/typebox@0.34.41))(file-type@21.1.1)(openapi-types@12.1.3)(typescript@6.0.2)) @@ -35,8 +38,11 @@ importers: '@t3-oss/env-core': specifier: ^0.13.11 version: 0.13.11(typescript@6.0.2)(zod@4.3.6) + '@tabler/icons-react': + specifier: ^3.41.1 + version: 3.41.1(react@19.2.4) '@tailwindcss/vite': - specifier: ^4.1.18 + specifier: ^4.2.2 version: 4.2.2(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.7.1)(@types/node@22.19.1)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.3)) '@tanstack/react-devtools': specifier: ^0.10.0 @@ -62,6 +68,9 @@ importers: '@tanstack/router-plugin': specifier: ^1.167.4 version: 1.167.10(@tanstack/react-router@1.168.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.7.1)(@types/node@22.19.1)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.94.0)(tsx@4.20.6)(yaml@2.8.3)) + clsx: + specifier: ^2.1.1 + version: 2.1.1 concurrently: specifier: ^9.2.1 version: 9.2.1 @@ -80,9 +89,12 @@ importers: react-dom: specifier: ^19.2.4 version: 19.2.4(react@19.2.4) + tailwind-merge: + specifier: ^3.5.0 + version: 3.5.0 tailwindcss: - specifier: ^4.1.18 - version: 4.1.18 + specifier: ^4.2.2 + version: 4.2.2 zod: specifier: ^4.3.6 version: 4.3.6 @@ -310,6 +322,10 @@ packages: resolution: {integrity: sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==} engines: {node: '>=6.9.0'} + '@babel/runtime@7.29.2': + resolution: {integrity: sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==} + engines: {node: '>=6.9.0'} + '@babel/template@7.27.2': resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} engines: {node: '>=6.9.0'} @@ -338,6 +354,27 @@ packages: resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} engines: {node: '>=6.9.0'} + '@base-ui/react@1.3.0': + resolution: {integrity: sha512-FwpKqZbPz14AITp1CVgf4AjhKPe1OeeVKSBMdgD10zbFlj3QSWelmtCMLi2+/PFZZcIm3l87G7rwtCZJwHyXWA==} + engines: {node: '>=14.0.0'} + peerDependencies: + '@types/react': ^17 || ^18 || ^19 + react: ^17 || ^18 || ^19 + react-dom: ^17 || ^18 || ^19 + peerDependenciesMeta: + '@types/react': + optional: true + + '@base-ui/utils@0.2.6': + resolution: {integrity: sha512-yQ+qeuqohwhsNpoYDqqXaLllYAkPCP4vYdDrVo8FQXaAPfHWm1pG/Vm+jmGTA5JFS0BAIjookyapuJFY8F9PIw==} + peerDependencies: + '@types/react': ^17 || ^18 || ^19 + react: ^17 || ^18 || ^19 + react-dom: ^17 || ^18 || ^19 + peerDependenciesMeta: + '@types/react': + optional: true + '@borewit/text-codec@0.1.1': resolution: {integrity: sha512-5L/uBxmjaCIX5h8Z+uu+kA9BQLkc/Wl06UGR5ajNRxu+/XjonB5i8JpgFMrPj3LXTCPA0pv8yxUvbUi+QthGGA==} @@ -745,6 +782,21 @@ packages: '@fastify/busboy@3.2.0': resolution: {integrity: sha512-m9FVDXU3GT2ITSe0UaMA5rU3QkfC/UXtCU8y0gSN/GugTqtVldOBWIB5V6V3sbmenVZUIpU6f+mPEO2+m5iTaA==} + '@floating-ui/core@1.7.5': + resolution: {integrity: sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==} + + '@floating-ui/dom@1.7.6': + resolution: {integrity: sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==} + + '@floating-ui/react-dom@2.1.8': + resolution: {integrity: sha512-cC52bHwM/n/CxS87FH0yWdngEZrjdtLW/qVruo68qg+prK7ZQ4YGdut2GyDVpoGeAYe/h899rVeOVm6Oi40k2A==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + + '@floating-ui/utils@0.2.11': + resolution: {integrity: sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==} + '@fontsource/space-grotesk@5.2.10': resolution: {integrity: sha512-XNXEbT74OIITPqw2H6HXwPDp85fy43uxfBwFR5PU+9sLnjuLj12KlhVM9nZVN6q6dlKjkuN8JisW/OBxwxgUew==} @@ -785,89 +837,105 @@ packages: resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==} cpu: [arm64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-arm@1.2.4': resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==} cpu: [arm] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-ppc64@1.2.4': resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==} cpu: [ppc64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-riscv64@1.2.4': resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==} cpu: [riscv64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-s390x@1.2.4': resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==} cpu: [s390x] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-x64@1.2.4': resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==} cpu: [x64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linuxmusl-arm64@1.2.4': resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==} cpu: [arm64] os: [linux] + libc: [musl] '@img/sharp-libvips-linuxmusl-x64@1.2.4': resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==} cpu: [x64] os: [linux] + libc: [musl] '@img/sharp-linux-arm64@0.34.5': resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] + libc: [glibc] '@img/sharp-linux-arm@0.34.5': resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm] os: [linux] + libc: [glibc] '@img/sharp-linux-ppc64@0.34.5': resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [ppc64] os: [linux] + libc: [glibc] '@img/sharp-linux-riscv64@0.34.5': resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [riscv64] os: [linux] + libc: [glibc] '@img/sharp-linux-s390x@0.34.5': resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [s390x] os: [linux] + libc: [glibc] '@img/sharp-linux-x64@0.34.5': resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] + libc: [glibc] '@img/sharp-linuxmusl-arm64@0.34.5': resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] + libc: [musl] '@img/sharp-linuxmusl-x64@0.34.5': resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] + libc: [musl] '@img/sharp-wasm32@0.34.5': resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==} @@ -1095,24 +1163,28 @@ packages: engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [glibc] '@next/swc-linux-arm64-musl@16.1.7': resolution: {integrity: sha512-uufcze7LYv0FQg9GnNeZ3/whYfo+1Q3HnQpm16o6Uyi0OVzLlk2ZWoY7j07KADZFY8qwDbsmFnMQP3p3+Ftprw==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [musl] '@next/swc-linux-x64-gnu@16.1.7': resolution: {integrity: sha512-KWVf2gxYvHtvuT+c4MBOGxuse5TD7DsMFYSxVxRBnOzok/xryNeQSjXgxSv9QpIVlaGzEn/pIuI6Koosx8CGWA==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [glibc] '@next/swc-linux-x64-musl@16.1.7': resolution: {integrity: sha512-HguhaGwsGr1YAGs68uRKc4aGWxLET+NevJskOcCAwXbwj0fYX0RgZW2gsOCzr9S11CSQPIkxmoSbuVaBp4Z3dA==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [musl] '@next/swc-win32-arm64-msvc@16.1.7': resolution: {integrity: sha512-S0n3KrDJokKTeFyM/vGGGR8+pCmXYrjNTk2ZozOL1C/JFdfUIL9O1ATaJOl5r2POe56iRChbsszrjMAdWSv7kQ==} @@ -1264,48 +1336,56 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] + libc: [glibc] '@oxfmt/binding-linux-arm64-musl@0.40.0': resolution: {integrity: sha512-tGmWhLD/0YMotCdfezlT6tC/MJG/wKpo4vnQ3Cq+4eBk/BwNv7EmkD0VkD5F/dYkT3b8FNU01X2e8vvJuWoM1w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] + libc: [musl] '@oxfmt/binding-linux-ppc64-gnu@0.40.0': resolution: {integrity: sha512-rVbFyM3e7YhkVnp0IVYjaSHfrBWcTRWb60LEcdNAJcE2mbhTpbqKufx0FrhWfoxOrW/+7UJonAOShoFFLigDqQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] + libc: [glibc] '@oxfmt/binding-linux-riscv64-gnu@0.40.0': resolution: {integrity: sha512-3ZqBw14JtWeEoLiioJcXSJz8RQyPE+3jLARnYM1HdPzZG4vk+Ua8CUupt2+d+vSAvMyaQBTN2dZK+kbBS/j5mA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] + libc: [glibc] '@oxfmt/binding-linux-riscv64-musl@0.40.0': resolution: {integrity: sha512-JJ4PPSdcbGBjPvb+O7xYm2FmAsKCyuEMYhqatBAHMp/6TA6rVlf9Z/sYPa4/3Bommb+8nndm15SPFRHEPU5qFA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] + libc: [musl] '@oxfmt/binding-linux-s390x-gnu@0.40.0': resolution: {integrity: sha512-Kp0zNJoX9Ik77wUya2tpBY3W9f40VUoMQLWVaob5SgCrblH/t2xr/9B2bWHfs0WCefuGmqXcB+t0Lq77sbBmZw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] + libc: [glibc] '@oxfmt/binding-linux-x64-gnu@0.40.0': resolution: {integrity: sha512-7YTCNzleWTaQTqNGUNQ66qVjpoV6DjbCOea+RnpMBly2bpzrI/uu7Rr+2zcgRfNxyjXaFTVQKaRKjqVdeUfeVA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] + libc: [glibc] '@oxfmt/binding-linux-x64-musl@0.40.0': resolution: {integrity: sha512-hWnSzJ0oegeOwfOEeejYXfBqmnRGHusgtHfCPzmvJvHTwy1s3Neo59UKc1CmpE3zxvrCzJoVHos0rr97GHMNPw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] + libc: [musl] '@oxfmt/binding-openharmony-arm64@0.40.0': resolution: {integrity: sha512-28sJC1lR4qtBJGzSRRbPnSW3GxU2+4YyQFE6rCmsUYqZ5XYH8jg0/w+CvEzQ8TuAQz5zLkcA25nFQGwoU0PT3Q==} @@ -1408,48 +1488,56 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] + libc: [glibc] '@oxlint/binding-linux-arm64-musl@1.57.0': resolution: {integrity: sha512-i66WyEPVEvq9bxRUCJ/MP5EBfnTDN3nhwEdFZFTO5MmLLvzngfWEG3NSdXQzTT3vk5B9i6C2XSIYBh+aG6uqyg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] + libc: [musl] '@oxlint/binding-linux-ppc64-gnu@1.57.0': resolution: {integrity: sha512-oMZDCwz4NobclZU3pH+V1/upVlJZiZvne4jQP+zhJwt+lmio4XXr4qG47CehvrW1Lx2YZiIHuxM2D4YpkG3KVA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] + libc: [glibc] '@oxlint/binding-linux-riscv64-gnu@1.57.0': resolution: {integrity: sha512-uoBnjJ3MMEBbfnWC1jSFr7/nSCkcQYa72NYoNtLl1imshDnWSolYCjzb8LVCwYCCfLJXD+0gBLD7fyC14c0+0g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] + libc: [glibc] '@oxlint/binding-linux-riscv64-musl@1.57.0': resolution: {integrity: sha512-BdrwD7haPZ8a9KrZhKJRSj6jwCor+Z8tHFZ3PT89Y3Jq5v3LfMfEePeAmD0LOTWpiTmzSzdmyw9ijneapiVHKQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] + libc: [musl] '@oxlint/binding-linux-s390x-gnu@1.57.0': resolution: {integrity: sha512-BNs+7ZNsRstVg2tpNxAXfMX/Iv5oZh204dVyb8Z37+/gCh+yZqNTlg6YwCLIMPSk5wLWIGOaQjT0GUOahKYImw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] + libc: [glibc] '@oxlint/binding-linux-x64-gnu@1.57.0': resolution: {integrity: sha512-AghS18w+XcENcAX0+BQGLiqjpqpaxKJa4cWWP0OWNLacs27vHBxu7TYkv9LUSGe5w8lOJHeMxcYfZNOAPqw2bg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] + libc: [glibc] '@oxlint/binding-linux-x64-musl@1.57.0': resolution: {integrity: sha512-E/FV3GB8phu/Rpkhz5T96hAiJlGzn91qX5yj5gU754P5cmVGXY1Jw/VSjDSlZBCY3VHjsVLdzgdkJaomEmcNOg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] + libc: [musl] '@oxlint/binding-openharmony-arm64@1.57.0': resolution: {integrity: sha512-xvZ2yZt0nUVfU14iuGv3V25jpr9pov5N0Wr28RXnHFxHCRxNDMtYPHV61gGLhN9IlXM96gI4pyYpLSJC5ClLCQ==} @@ -1504,36 +1592,42 @@ packages: engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] + libc: [glibc] '@parcel/watcher-linux-arm-musl@2.5.1': resolution: {integrity: sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==} engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] + libc: [musl] '@parcel/watcher-linux-arm64-glibc@2.5.1': resolution: {integrity: sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] + libc: [glibc] '@parcel/watcher-linux-arm64-musl@2.5.1': resolution: {integrity: sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] + libc: [musl] '@parcel/watcher-linux-x64-glibc@2.5.1': resolution: {integrity: sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] + libc: [glibc] '@parcel/watcher-linux-x64-musl@2.5.1': resolution: {integrity: sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] + libc: [musl] '@parcel/watcher-wasm@2.5.1': resolution: {integrity: sha512-RJxlQQLkaMMIuWRozy+z2vEqbaQlCuaCgVZIUCzQLYggY22LZbP5Y1+ia+FD724Ids9e+XIyOLXLrLgQSHIthw==} @@ -1764,36 +1858,42 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] + libc: [glibc] '@rolldown/binding-linux-arm64-musl@1.0.0-rc.12': resolution: {integrity: sha512-V6/wZztnBqlx5hJQqNWwFdxIKN0m38p8Jas+VoSfgH54HSj9tKTt1dZvG6JRHcjh6D7TvrJPWFGaY9UBVOaWPw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] + libc: [musl] '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.12': resolution: {integrity: sha512-AP3E9BpcUYliZCxa3w5Kwj9OtEVDYK6sVoUzy4vTOJsjPOgdaJZKFmN4oOlX0Wp0RPV2ETfmIra9x1xuayFB7g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] + libc: [glibc] '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.12': resolution: {integrity: sha512-nWwpvUSPkoFmZo0kQazZYOrT7J5DGOJ/+QHHzjvNlooDZED8oH82Yg67HvehPPLAg5fUff7TfWFHQS8IV1n3og==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] + libc: [glibc] '@rolldown/binding-linux-x64-gnu@1.0.0-rc.12': resolution: {integrity: sha512-RNrafz5bcwRy+O9e6P8Z/OCAJW/A+qtBczIqVYwTs14pf4iV1/+eKEjdOUta93q2TsT/FI0XYDP3TCky38LMAg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] + libc: [glibc] '@rolldown/binding-linux-x64-musl@1.0.0-rc.12': resolution: {integrity: sha512-Jpw/0iwoKWx3LJ2rc1yjFrj+T7iHZn2JDg1Yny1ma0luviFS4mhAIcd1LFNxK3EYu3DHWCps0ydXQ5i/rrJ2ig==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] + libc: [musl] '@rolldown/binding-openharmony-arm64@1.0.0-rc.12': resolution: {integrity: sha512-vRugONE4yMfVn0+7lUKdKvN4D5YusEiPilaoO2sgUWpCvrncvWgPMzK00ZFFJuiPgLwgFNP5eSiUlv2tfc+lpA==} @@ -1879,56 +1979,67 @@ packages: resolution: {integrity: sha512-EPlb95nUsz6Dd9Qy13fI5kUPXNSljaG9FiJ4YUGU1O/Q77i5DYFW5KR8g1OzTcdZUqQQ1KdDqsTohdFVwCwjqg==} cpu: [arm] os: [linux] + libc: [glibc] '@rollup/rollup-linux-arm-musleabihf@4.53.2': resolution: {integrity: sha512-BOmnVW+khAUX+YZvNfa0tGTEMVVEerOxN0pDk2E6N6DsEIa2Ctj48FOMfNDdrwinocKaC7YXUZ1pHlKpnkja/Q==} cpu: [arm] os: [linux] + libc: [musl] '@rollup/rollup-linux-arm64-gnu@4.53.2': resolution: {integrity: sha512-Xt2byDZ+6OVNuREgBXr4+CZDJtrVso5woFtpKdGPhpTPHcNG7D8YXeQzpNbFRxzTVqJf7kvPMCub/pcGUWgBjA==} cpu: [arm64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-arm64-musl@4.53.2': resolution: {integrity: sha512-+LdZSldy/I9N8+klim/Y1HsKbJ3BbInHav5qE9Iy77dtHC/pibw1SR/fXlWyAk0ThnpRKoODwnAuSjqxFRDHUQ==} cpu: [arm64] os: [linux] + libc: [musl] '@rollup/rollup-linux-loong64-gnu@4.53.2': resolution: {integrity: sha512-8ms8sjmyc1jWJS6WdNSA23rEfdjWB30LH8Wqj0Cqvv7qSHnvw6kgMMXRdop6hkmGPlyYBdRPkjJnj3KCUHV/uQ==} cpu: [loong64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-ppc64-gnu@4.53.2': resolution: {integrity: sha512-3HRQLUQbpBDMmzoxPJYd3W6vrVHOo2cVW8RUo87Xz0JPJcBLBr5kZ1pGcQAhdZgX9VV7NbGNipah1omKKe23/g==} cpu: [ppc64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-riscv64-gnu@4.53.2': resolution: {integrity: sha512-fMjKi+ojnmIvhk34gZP94vjogXNNUKMEYs+EDaB/5TG/wUkoeua7p7VCHnE6T2Tx+iaghAqQX8teQzcvrYpaQA==} cpu: [riscv64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-riscv64-musl@4.53.2': resolution: {integrity: sha512-XuGFGU+VwUUV5kLvoAdi0Wz5Xbh2SrjIxCtZj6Wq8MDp4bflb/+ThZsVxokM7n0pcbkEr2h5/pzqzDYI7cCgLQ==} cpu: [riscv64] os: [linux] + libc: [musl] '@rollup/rollup-linux-s390x-gnu@4.53.2': resolution: {integrity: sha512-w6yjZF0P+NGzWR3AXWX9zc0DNEGdtvykB03uhonSHMRa+oWA6novflo2WaJr6JZakG2ucsyb+rvhrKac6NIy+w==} cpu: [s390x] os: [linux] + libc: [glibc] '@rollup/rollup-linux-x64-gnu@4.53.2': resolution: {integrity: sha512-yo8d6tdfdeBArzC7T/PnHd7OypfI9cbuZzPnzLJIyKYFhAQ8SvlkKtKBMbXDxe1h03Rcr7u++nFS7tqXz87Gtw==} cpu: [x64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-x64-musl@4.53.2': resolution: {integrity: sha512-ah59c1YkCxKExPP8O9PwOvs+XRLKwh/mV+3YdKqQ5AMQ0r4M4ZDuOrpWkUaqO7fzAHdINzV9tEVu8vNw48z0lA==} cpu: [x64] os: [linux] + libc: [musl] '@rollup/rollup-openharmony-arm64@4.53.2': resolution: {integrity: sha512-4VEd19Wmhr+Zy7hbUsFZ6YXEiP48hE//KPLCSVNY5RMGX2/7HZ+QkN55a3atM1C/BZCGIgqN+xrVgtdak2S9+A==} @@ -2025,6 +2136,14 @@ packages: zod: optional: true + '@tabler/icons-react@3.41.1': + resolution: {integrity: sha512-kUgweE+DJtAlMZVIns1FTDdcbpRVnkK7ZpUOXmoxy3JAF0rSHj0TcP4VHF14+gMJGnF+psH2Zt26BLT6owetBA==} + peerDependencies: + react: '>= 16' + + '@tabler/icons@3.41.1': + resolution: {integrity: sha512-OaRnVbRmH2nHtFeg+RmMJ/7m2oBIF9XCJAUD5gQnMrpK9f05ydj8MZrAf3NZQqOXyxGN1UBL0D5IKLLEUfr74Q==} + '@tailwindcss/node@4.2.2': resolution: {integrity: sha512-pXS+wJ2gZpVXqFaUEjojq7jzMpTGf8rU6ipJz5ovJV6PUGmlJ+jvIwGrzdHdQ80Sg+wmQxUFuoW1UAAwHNEdFA==} @@ -2063,24 +2182,28 @@ packages: engines: {node: '>= 20'} cpu: [arm64] os: [linux] + libc: [glibc] '@tailwindcss/oxide-linux-arm64-musl@4.2.2': resolution: {integrity: sha512-oCfG/mS+/+XRlwNjnsNLVwnMWYH7tn/kYPsNPh+JSOMlnt93mYNCKHYzylRhI51X+TbR+ufNhhKKzm6QkqX8ag==} engines: {node: '>= 20'} cpu: [arm64] os: [linux] + libc: [musl] '@tailwindcss/oxide-linux-x64-gnu@4.2.2': resolution: {integrity: sha512-rTAGAkDgqbXHNp/xW0iugLVmX62wOp2PoE39BTCGKjv3Iocf6AFbRP/wZT/kuCxC9QBh9Pu8XPkv/zCZB2mcMg==} engines: {node: '>= 20'} cpu: [x64] os: [linux] + libc: [glibc] '@tailwindcss/oxide-linux-x64-musl@4.2.2': resolution: {integrity: sha512-XW3t3qwbIwiSyRCggeO2zxe3KWaEbM0/kW9e8+0XpBgyKU4ATYzcVSMKteZJ1iukJ3HgHBjbg9P5YPRCVUxlnQ==} engines: {node: '>= 20'} cpu: [x64] os: [linux] + libc: [musl] '@tailwindcss/oxide-wasm32-wasi@4.2.2': resolution: {integrity: sha512-eKSztKsmEsn1O5lJ4ZAfyn41NfG7vzCg496YiGtMDV86jz1q/irhms5O0VrY6ZwTUkFy/EKG3RfWgxSI3VbZ8Q==} @@ -3554,8 +3677,8 @@ packages: resolution: {integrity: sha512-xQjs+2vrxLnAjCq+omuNkd5UQTld9/bP8+YT0LyYTlKfuSQtgUBvqhUwGugzSAh6sCdN+LnROMuLswn5hZ9Fhg==} engines: {node: '>=20.0.0'} - immutable@5.1.4: - resolution: {integrity: sha512-p6u1bG3YSnINT5RQmx/yRZBpenIl30kVxkTLDyHLIMk0gict704Q9n+thfDI7lTRm9vXdDYutVzXhzcThxTnXA==} + immutable@5.1.5: + resolution: {integrity: sha512-t7xcm2siw+hlUM68I+UEOK+z84RzmN59as9DZ7P1l0994DKUWV7UXBMQZVxaoMSRQ+PBZbHCOoBt7a2wxOMt+A==} import-in-the-middle@1.15.0: resolution: {integrity: sha512-bpQy+CrsRmYmoPMAE/0G33iwRqwW4ouqdRg8jgbH3aKuCtOc8lxgmYXg2dMM92CRiGP660EtBcymH/eVUpCSaA==} @@ -3820,24 +3943,28 @@ packages: engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] + libc: [glibc] lightningcss-linux-arm64-musl@1.32.0: resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] + libc: [musl] lightningcss-linux-x64-gnu@1.32.0: resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] + libc: [glibc] lightningcss-linux-x64-musl@1.32.0: resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] + libc: [musl] lightningcss-win32-arm64-msvc@1.32.0: resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==} @@ -4463,6 +4590,9 @@ packages: require-package-name@2.0.1: resolution: {integrity: sha512-uuoJ1hU/k6M0779t3VMVIYpb2VMJk05cehCaABFhXaibcbvfgR8wKiozLjVFSzJPmQMRqIcO0HMyTFqfV09V6Q==} + reselect@5.1.1: + resolution: {integrity: sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==} + resolve-from@5.0.0: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} @@ -4764,10 +4894,16 @@ packages: resolution: {integrity: sha512-ulAk51I9UVUyJgxlv9M6lFot2WP3e7t8Kz9+IS6D4rVba1tR9kON+Ey69f+1R4Q8cd45Lod6a4IcJIxnzGc/zA==} engines: {node: '>=18'} + tabbable@6.4.0: + resolution: {integrity: sha512-05PUHKSNE8ou2dwIxTngl4EzcnsCDZGJ/iCLtDflR/SHB/ny14rXc+qU5P4mG9JkusiV7EivzY9Mhm55AzAvCg==} + tagged-tag@1.0.0: resolution: {integrity: sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==} engines: {node: '>=20'} + tailwind-merge@3.5.0: + resolution: {integrity: sha512-I8K9wewnVDkL1NTGoqWmVEIlUcB9gFriAEkXkfCjX5ib8ezGxtR3xD7iZIxrfArjEsH7F1CHD4RFUtxefdqV/A==} + tailwindcss@4.1.18: resolution: {integrity: sha512-4+Z+0yiYyEtUVCScyfHCxOYP06L5Ne+JiHhY2IjR2KWMIWhJOYZKLSGZaP5HkZ8+bY0cxfzwDE5uOmzFXyIwxw==} @@ -5505,6 +5641,8 @@ snapshots: '@babel/runtime@7.28.4': {} + '@babel/runtime@7.29.2': {} + '@babel/template@7.27.2': dependencies: '@babel/code-frame': 7.27.1 @@ -5563,6 +5701,30 @@ snapshots: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.28.5 + '@base-ui/react@1.3.0(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@babel/runtime': 7.29.2 + '@base-ui/utils': 0.2.6(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@floating-ui/react-dom': 2.1.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@floating-ui/utils': 0.2.11 + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + tabbable: 6.4.0 + use-sync-external-store: 1.6.0(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.14 + + '@base-ui/utils@0.2.6(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@babel/runtime': 7.29.2 + '@floating-ui/utils': 0.2.11 + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + reselect: 5.1.1 + use-sync-external-store: 1.6.0(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.14 + '@borewit/text-codec@0.1.1': {} '@bramus/specificity@2.4.2': @@ -5799,6 +5961,23 @@ snapshots: '@fastify/busboy@3.2.0': {} + '@floating-ui/core@1.7.5': + dependencies: + '@floating-ui/utils': 0.2.11 + + '@floating-ui/dom@1.7.6': + dependencies: + '@floating-ui/core': 1.7.5 + '@floating-ui/utils': 0.2.11 + + '@floating-ui/react-dom@2.1.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@floating-ui/dom': 1.7.6 + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + + '@floating-ui/utils@0.2.11': {} + '@fontsource/space-grotesk@5.2.10': {} '@humanwhocodes/momoa@2.0.4': {} @@ -6993,6 +7172,13 @@ snapshots: typescript: 6.0.2 zod: 4.3.6 + '@tabler/icons-react@3.41.1(react@19.2.4)': + dependencies: + '@tabler/icons': 3.41.1 + react: 19.2.4 + + '@tabler/icons@3.41.1': {} + '@tailwindcss/node@4.2.2': dependencies: '@jridgewell/remapping': 2.3.5 @@ -8664,7 +8850,7 @@ snapshots: imagetools-core@9.1.0: {} - immutable@5.1.4: + immutable@5.1.5: optional: true import-in-the-middle@1.15.0: @@ -9626,6 +9812,8 @@ snapshots: require-package-name@2.0.1: {} + reselect@5.1.1: {} + resolve-from@5.0.0: {} resolve-pkg-maps@1.0.0: {} @@ -9727,7 +9915,7 @@ snapshots: sass@1.94.0: dependencies: chokidar: 4.0.3 - immutable: 5.1.4 + immutable: 5.1.5 source-map-js: 1.2.1 optionalDependencies: '@parcel/watcher': 2.5.1 @@ -9986,8 +10174,12 @@ snapshots: system-architecture@0.1.0: {} + tabbable@6.4.0: {} + tagged-tag@1.0.0: {} + tailwind-merge@3.5.0: {} + tailwindcss@4.1.18: {} tailwindcss@4.2.2: {} diff --git a/src/components/footer.tsx b/src/components/footer.tsx new file mode 100644 index 0000000..b4d84fc --- /dev/null +++ b/src/components/footer.tsx @@ -0,0 +1,39 @@ +import { SOCIALS_DATA } from "$data"; + +import ACM_LOGO from "../lib/assets/pec-acm-logo.png"; +import { SocialIcon } from "./social-icon"; + +interface IFooterProps {} + +export function Footer(_props: IFooterProps) { + return ( +
+
+
+
+ + +
+ PEC ACM CSS + © {new Date().getFullYear()} +
+
+ + +
+
+
+ ); +} diff --git a/src/components/navbar/index.tsx b/src/components/navbar/index.tsx new file mode 100644 index 0000000..00e009a --- /dev/null +++ b/src/components/navbar/index.tsx @@ -0,0 +1,131 @@ +import { Separator } from "@base-ui/react"; +import { Drawer } from "@base-ui/react/drawer"; +import { + IconX, + IconGitBranch, + IconLogin, + IconUsersGroup, + IconCalendarWeek, + IconMenu2, +} from "@tabler/icons-react"; +import { Link, useLocation } from "@tanstack/react-router"; + +import { SOCIALS_DATA } from "$data"; + +import { cn } from "$lib/utils"; +import ACM_LOGO from "../../lib/assets/pec-acm-logo.png"; +import { SocialIcon } from "../social-icon"; +import { MobileDrawer } from "./mobile-sheet"; + +const NAVBAR_LINKS = [ + { label: "Team", href: "/team", Icon: IconUsersGroup }, + { label: "Branches", href: "/branches", Icon: IconGitBranch }, + { label: "Events", href: "/events", Icon: IconCalendarWeek }, +]; + +interface INavbarProps {} + +export function Navbar(_props: INavbarProps) { + const { pathname } = useLocation(); + + const drawerHandle = Drawer.createHandle(); + + return ( + <> +
+
+
+ + + + + +
+ + +
+
+ +
+ + + + + + {drawerHandle.isOpen ? : } + +
+ + +
+
+ +
    + {NAVBAR_LINKS.map(link => ( +
  • + + {link.label} + +
  • + ))} +
+ + + + + + + + +
+
+ + ); +} diff --git a/src/components/navbar/mobile-sheet.tsx b/src/components/navbar/mobile-sheet.tsx new file mode 100644 index 0000000..2289e74 --- /dev/null +++ b/src/components/navbar/mobile-sheet.tsx @@ -0,0 +1,24 @@ +import { Drawer } from "@base-ui/react/drawer"; + +interface IMobileDrawerProps { + handle: Drawer.Handle; + children: React.ReactNode; +} + +export function MobileDrawer({ handle, children }: IMobileDrawerProps) { + return ( + + + + + + {children} + + + + + ); +} diff --git a/src/components/social-icon.tsx b/src/components/social-icon.tsx new file mode 100644 index 0000000..7ef4cbc --- /dev/null +++ b/src/components/social-icon.tsx @@ -0,0 +1,30 @@ +import type { TSocialsData } from "$data"; + +import { PLATFORM_ICONS } from "$lib/constants/platforms"; +import { capitalize } from "$lib/utils"; + +interface TSocialIconProps { + link: TSocialsData[number]; +} + +export function SocialIcon({ link }: TSocialIconProps) { + const Icon = PLATFORM_ICONS[link.platform]; + + return ( +
+ ); +} diff --git a/src/data/devs.yaml b/src/data/devs.yaml index 4936e82..e88d09a 100644 --- a/src/data/devs.yaml +++ b/src/data/devs.yaml @@ -6,41 +6,41 @@ - Frontend - Documentation links: - - platform: LinkedIn + - platform: linkedin url: "https://www.linkedin.com/in/harmanjeet-sahota/" - - platform: GitHub + - platform: github url: "https://github.com/Savy011" - name: Vidhi Sethi roles: - Co-Lead - Backend links: - - platform: LinkedIn + - platform: linkedin url: "https://www.linkedin.com/in/vidhi-sethi-013962319/" - - platform: GitHub + - platform: github url: "https://github.com/vidhipec27" - name: Keshav Dham avatar: "devs/keshav.jpg" roles: - Documentation links: - - platform: LinkedIn + - platform: linkedin url: "https://www.linkedin.com/in/keshavdham/" - - platform: GitHub + - platform: github url: https://github.com/KD9605 - name: Mithas Janbade roles: - Frontend links: - - platform: LinkedIn + - platform: linkedin url: "https://www.linkedin.com/in/mithas-janbade-glorytogod/" - - platform: GitHub + - platform: github url: "https://github.com/mjisblessed" - name: Matisha Kansal roles: - Frontend links: - - platform: LinkedIn + - platform: linkedin url: "https://www.linkedin.com/in/matisha-kansal/" - - platform: GitHub + - platform: github url: "https://github.com/MatishaKansal" diff --git a/src/data/index.ts b/src/data/index.ts index edf6838..30b9413 100644 --- a/src/data/index.ts +++ b/src/data/index.ts @@ -10,13 +10,14 @@ * */ import z from "zod"; +import { PLATFORMS } from "$lib/constants/platforms"; import { resolveStaticImg, slugify } from "$lib/utils"; import DEVS from "./devs.yaml"; import SOCIALS from "./socials.yaml"; import TEAM from "./team.yaml"; const LinkSchema = z.object({ - platform: z.string(), + platform: z.enum(PLATFORMS), url: z.url(), }); @@ -45,12 +46,7 @@ const TeamSchema = z.object({ groups: z.array(GroupSchema), }); -const SocialsSchema = z.array( - z.object({ - platform: z.string(), - url: z.url(), - }), -); +const SocialsSchema = z.array(LinkSchema); const RoleEnum = z.enum(["Project Lead", "Co-Lead", "Backend", "Frontend", "Documentation"]); diff --git a/src/data/socials.yaml b/src/data/socials.yaml index ff83233..6faefb5 100644 --- a/src/data/socials.yaml +++ b/src/data/socials.yaml @@ -1,14 +1,14 @@ -- platform: Discord +- platform: discord url: https://discord.gg/D68nVDjczA -- platform: Github +- platform: github url: https://github.com/PEC-CSS/ -- platform: Instagram +- platform: instagram url: https://www.instagram.com/pecacm -- platform: Youtube +- platform: youtube url: https://www.youtube.com/c/PECACMStudentChapter -- platform: LinkedIn +- platform: linkedin url: https://www.linkedin.com/company/pec-acm-student-chapter diff --git a/src/data/team.yaml b/src/data/team.yaml index 427ab32..44dd9f2 100644 --- a/src/data/team.yaml +++ b/src/data/team.yaml @@ -3,41 +3,41 @@ core: title: Chairperson avatar: "leads/gurmehar.jpg" links: - - platform: LinkedIn + - platform: linkedin url: "https://www.linkedin.com/in/gurmehar-singh-87636425a/" - - platform: GitHub + - platform: github url: "https://github.com/GURMEHAR-PEC" - - platform: E-Mail + - platform: email url: "mailto:gurmeharsingh.bt22cse@pec.edu.in" - name: Anubhav Pandey title: Vice Chairperson avatar: "leads/anubhav.jpg" links: - - platform: LinkedIn + - platform: linkedin url: "https://www.linkedin.com/in/anubhav3p/" - - platform: GitHub + - platform: github url: "https://github.com/Anubhavpandey27" - - platform: E-Mail + - platform: email url: "mailto:anubhavpandey.bt22cseds@pec.edu.in" - name: Gaurav Gupta title: Treasurer avatar: "leads/gaurav.jpg" links: - - platform: LinkedIn + - platform: linkedin url: "https://www.linkedin.com/in/gaurav-gupta-7801a625b/" - - platform: GitHub + - platform: github url: "https://github.com/GauravGupta993" - - platform: E-Mail + - platform: email url: "mailto:gauravgupta.bt22cse@pec.edu.in" - name: Harshul Arora title: Webmaster avatar: "leads/harshul.jpg" links: - - platform: LinkedIn + - platform: linkedin url: "https://www.linkedin.com/in/harshul-arora-7a264b250/" - - platform: GitHub + - platform: github url: "https://github.com/harshxll" - - platform: E-Mail + - platform: email url: "mailto:harshul.bt22cse@pec.edu.in" groups: @@ -46,16 +46,16 @@ groups: - name: Sambhav Jain avatar: "leads/sambhav.jpg" links: - - platform: LinkedIn + - platform: linkedin url: "https://www.linkedin.com/in/sambhav2j/" - - platform: GitHub + - platform: github url: "https://github.com/SambhavJain74" - name: Chetanya Mahana avatar: "leads/chetanya.jpg" links: - - platform: LinkedIn + - platform: linkedin url: "https://www.linkedin.com/in/chetanya-mahana-212a95258/" - - platform: GitHub + - platform: github url: "https://github.com/chetanyamahana" - name: Artificial Intelligence @@ -63,21 +63,21 @@ groups: - name: Arnav Vikas Garg avatar: "leads/arnav.jpg" links: - - platform: LinkedIn + - platform: linkedin url: "https://www.linkedin.com/in/arnav-vikas-g-6079a2218/" - - platform: GitHub + - platform: github url: "https://github.com/ArnavVikasGarg" - name: Aaditya Sharma avatar: "leads/aaditya.jpg" links: - - platform: LinkedIn + - platform: linkedin url: "https://www.linkedin.com/in/aaditya-sharma-255133257/" - - platform: GitHub + - platform: github url: "https://github.com/aadityasharma911" - name: Hardik Ahuja avatar: "leads/hardik.jpg" links: - - platform: LinkedIn + - platform: linkedin url: "https://www.linkedin.com/in/hardik-ahuja-b4bb07252/" - name: Development @@ -85,16 +85,16 @@ groups: - name: Kritika Jari avatar: "leads/kritika.jpg" links: - - platform: LinkedIn + - platform: linkedin url: "https://www.linkedin.com/in/krittika-jari-676897268/" - - platform: GitHub + - platform: github url: "https://github.com/krittika2004" - name: Harshit Minhas avatar: "leads/harshit.jpg" links: - - platform: LinkedIn + - platform: linkedin url: "https://www.linkedin.com/in/harshit-minhas-879026253/" - - platform: GitHub + - platform: github url: "https://github.com/harshit-m007" - name: Open Source @@ -102,9 +102,9 @@ groups: - name: Raghav Sharma avatar: "leads/raghav.jpg" links: - - platform: LinkedIn + - platform: linkedin url: "https://www.linkedin.com/in/raghav-sharma-0b8785270/" - - platform: GitHub + - platform: github url: "https://github.com/RAGHAVS1304" - name: Cyber-Security @@ -112,16 +112,16 @@ groups: - name: Aryan avatar: "leads/aryan.jpg" links: - - platform: LinkedIn + - platform: linkedin url: "https://www.linkedin.com/in/aryan1006/" - - platform: GitHub + - platform: github url: "https://github.com/ary-a-n" - name: Keshav Arora avatar: "leads/keshav.jpg" links: - - platform: LinkedIn + - platform: linkedin url: "https://www.linkedin.com/in/keshavarorapec/" - - platform: GitHub + - platform: github url: "https://github.com/CoderOMaster" - name: Socials @@ -129,16 +129,16 @@ groups: - name: Prasuk Jain avatar: "leads/prasuk.jpg" links: - - platform: LinkedIn + - platform: linkedin url: "https://www.linkedin.com/in/prasuk-jain-1053b5244/" - - platform: GitHub + - platform: github url: "https://github.com/prasukjain07" - name: Shreya Pahuja avatar: "leads/shreya.jpg" links: - - platform: LinkedIn + - platform: linkedin url: "https://www.linkedin.com/in/sp49/" - - platform: GitHub + - platform: github url: "https://github.com/sp9324" - name: Women In Tech @@ -146,12 +146,12 @@ groups: - name: Akanksha Narula avatar: "leads/akanksha.jpg" links: - - platform: LinkedIn + - platform: linkedin url: "https://www.linkedin.com/in/akanksha-narula-b6ba26249/" - - platform: GitHub + - platform: github url: "https://github.com/AkankshaNarula" - name: Vanshika Garg avatar: "leads/vanshika.jpg" links: - - platform: LinkedIn + - platform: linkedin url: "https://www.linkedin.com/in/vanshika-330333271/" diff --git a/src/lib/assets/pec-acm-logo.png b/src/lib/assets/pec-acm-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..47be392963be9d833a1ee6bc7979988efce435aa GIT binary patch literal 62899 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� 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 QZU!LmboFyt=akR{0HEkChyVZp literal 0 HcmV?d00001 diff --git a/src/lib/constants/platforms.ts b/src/lib/constants/platforms.ts new file mode 100644 index 0000000..8dfe424 --- /dev/null +++ b/src/lib/constants/platforms.ts @@ -0,0 +1,30 @@ +import type { TablerIcon } from "@tabler/icons-react"; + +import { + IconMailFilled, + IconBrandLinkedinFilled, + IconBrandDiscordFilled, + IconBrandGithubFilled, + IconBrandInstagramFilled, + IconBrandYoutubeFilled, +} from "@tabler/icons-react"; + +export const PLATFORMS = [ + "discord", + "github", + "instagram", + "youtube", + "linkedin", + "email", +] as const; + +export type TPlatform = (typeof PLATFORMS)[number]; + +export const PLATFORM_ICONS: Record = { + email: IconMailFilled, + linkedin: IconBrandLinkedinFilled, + discord: IconBrandDiscordFilled, + github: IconBrandGithubFilled, + instagram: IconBrandInstagramFilled, + youtube: IconBrandYoutubeFilled, +}; diff --git a/src/lib/utils.ts b/src/lib/utils.ts index bc29a45..7518e4c 100644 --- a/src/lib/utils.ts +++ b/src/lib/utils.ts @@ -1,3 +1,38 @@ +import type { ClassValue } from "clsx"; + +import { clsx } from "clsx"; +import { twMerge } from "tailwind-merge"; + +/** + * Capitalizes the first character of a string. + * Returns the original value if the string is empty. + */ +export function capitalize(str: string) { + if (!str) return str; + return str.charAt(0).toUpperCase() + str.slice(1); +} + +/** + * Converts a string into a URL-friendly slug. + * Lowercases, normalizes unicode (café → cafe), removes special characters, + * and collapses spaces, underscores, and hyphens into a single hyphen. + * + * @example + * slugify("Hello World!") // "hello-world" + * slugify("café latte") // "cafe-latte" + * slugify("hello - world") // "hello-world" + */ +export function slugify(str: string) { + return str + .toLowerCase() + .normalize("NFD") + .replace(/[\u0300-\u036f]/g, "") + .trim() + .replace(/[^\w\s-]/g, "") + .replace(/[\s_-]+/g, "-") + .replace(/^-+|-+$/g, ""); +} + interface JWTPayload { sub: string; exp: number; @@ -13,15 +48,6 @@ export function decodeJWTPayload(token: string): JWTPayload | null { } } -export function slugify(str: string) { - return str - .toLowerCase() - .trim() - .replace(/[^\w\s-]/g, "") - .replace(/[\s_]+/g, "-") - .replace(/^-+|-+$/g, ""); -} - interface IImageMetadata { format: string; width: number; @@ -49,6 +75,16 @@ const allImages = import.meta.glob("/src/lib/assets/images/**/*", { }, }) as Record; +/** + * Resolves a static image asset path and returns its metadata. + * + * Accepts three path formats: + * - `$assets/images/foo.jpg` — alias prefix + * - `/src/lib/assets/images/foo.jpg` — absolute src path + * - `foo.jpg` — bare filename, resolved relative to the images directory + * + * @throws {Error} If the image asset cannot be found in the glob map + */ export function resolveStaticImg(path: string) { const fullPath = path.startsWith("$assets/images/") ? path.replace("$assets/images/", "src/lib/assets/images/") @@ -69,3 +105,18 @@ export function resolveStaticImg(path: string) { src: resolved.src, }; } + +/** + * Merges class names using `clsx` and resolves Tailwind CSS conflicts using `tailwind-merge`. + * + * @param inputs - Class values to merge. Accepts strings, objects, arrays, and falsy values. + * @returns A single merged class name string with Tailwind conflicts resolved. + * + * @example + * cn("p-4", "p-2") // "p-2" (conflict resolved) + * cn("flex", { hidden: false, block: true }) // "flex block" + * cn(undefined, null, "text-sm") // "text-sm" + */ +export function cn(...inputs: ClassValue[]) { + return twMerge(clsx(inputs)); +} diff --git a/src/routeTree.gen.ts b/src/routeTree.gen.ts index ded7cff..19ea9d0 100644 --- a/src/routeTree.gen.ts +++ b/src/routeTree.gen.ts @@ -10,19 +10,27 @@ import { Route as rootRouteImport } from './routes/__root' import { Route as AuthedRouteImport } from './routes/_authed' -import { Route as IndexRouteImport } from './routes/index' +import { Route as appRouteRouteImport } from './routes/(app)/route' +import { Route as appIndexRouteImport } from './routes/(app)/index' import { Route as ApiSplatRouteImport } from './routes/api.$' import { Route as authSignInRouteImport } from './routes/(auth)/sign-in' +import { Route as appTeamRouteImport } from './routes/(app)/team' +import { Route as appEventsRouteImport } from './routes/(app)/events' +import { Route as appBranchesRouteImport } from './routes/(app)/branches' import { Route as AuthedDashboardIndexRouteImport } from './routes/_authed/dashboard/index' const AuthedRoute = AuthedRouteImport.update({ id: '/_authed', getParentRoute: () => rootRouteImport, } as any) -const IndexRoute = IndexRouteImport.update({ +const appRouteRoute = appRouteRouteImport.update({ + id: '/(app)', + getParentRoute: () => rootRouteImport, +} as any) +const appIndexRoute = appIndexRouteImport.update({ id: '/', path: '/', - getParentRoute: () => rootRouteImport, + getParentRoute: () => appRouteRoute, } as any) const ApiSplatRoute = ApiSplatRouteImport.update({ id: '/api/$', @@ -34,6 +42,21 @@ const authSignInRoute = authSignInRouteImport.update({ path: '/sign-in', getParentRoute: () => rootRouteImport, } as any) +const appTeamRoute = appTeamRouteImport.update({ + id: '/team', + path: '/team', + getParentRoute: () => appRouteRoute, +} as any) +const appEventsRoute = appEventsRouteImport.update({ + id: '/events', + path: '/events', + getParentRoute: () => appRouteRoute, +} as any) +const appBranchesRoute = appBranchesRouteImport.update({ + id: '/branches', + path: '/branches', + getParentRoute: () => appRouteRoute, +} as any) const AuthedDashboardIndexRoute = AuthedDashboardIndexRouteImport.update({ id: '/dashboard/', path: '/dashboard/', @@ -41,41 +64,69 @@ const AuthedDashboardIndexRoute = AuthedDashboardIndexRouteImport.update({ } as any) export interface FileRoutesByFullPath { - '/': typeof IndexRoute + '/': typeof appIndexRoute + '/branches': typeof appBranchesRoute + '/events': typeof appEventsRoute + '/team': typeof appTeamRoute '/sign-in': typeof authSignInRoute '/api/$': typeof ApiSplatRoute '/dashboard/': typeof AuthedDashboardIndexRoute } export interface FileRoutesByTo { - '/': typeof IndexRoute + '/': typeof appIndexRoute + '/branches': typeof appBranchesRoute + '/events': typeof appEventsRoute + '/team': typeof appTeamRoute '/sign-in': typeof authSignInRoute '/api/$': typeof ApiSplatRoute '/dashboard': typeof AuthedDashboardIndexRoute } export interface FileRoutesById { __root__: typeof rootRouteImport - '/': typeof IndexRoute + '/(app)': typeof appRouteRouteWithChildren '/_authed': typeof AuthedRouteWithChildren + '/(app)/branches': typeof appBranchesRoute + '/(app)/events': typeof appEventsRoute + '/(app)/team': typeof appTeamRoute '/(auth)/sign-in': typeof authSignInRoute '/api/$': typeof ApiSplatRoute + '/(app)/': typeof appIndexRoute '/_authed/dashboard/': typeof AuthedDashboardIndexRoute } export interface FileRouteTypes { fileRoutesByFullPath: FileRoutesByFullPath - fullPaths: '/' | '/sign-in' | '/api/$' | '/dashboard/' + fullPaths: + | '/' + | '/branches' + | '/events' + | '/team' + | '/sign-in' + | '/api/$' + | '/dashboard/' fileRoutesByTo: FileRoutesByTo - to: '/' | '/sign-in' | '/api/$' | '/dashboard' + to: + | '/' + | '/branches' + | '/events' + | '/team' + | '/sign-in' + | '/api/$' + | '/dashboard' id: | '__root__' - | '/' + | '/(app)' | '/_authed' + | '/(app)/branches' + | '/(app)/events' + | '/(app)/team' | '/(auth)/sign-in' | '/api/$' + | '/(app)/' | '/_authed/dashboard/' fileRoutesById: FileRoutesById } export interface RootRouteChildren { - IndexRoute: typeof IndexRoute + appRouteRoute: typeof appRouteRouteWithChildren AuthedRoute: typeof AuthedRouteWithChildren authSignInRoute: typeof authSignInRoute ApiSplatRoute: typeof ApiSplatRoute @@ -90,12 +141,19 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof AuthedRouteImport parentRoute: typeof rootRouteImport } - '/': { - id: '/' + '/(app)': { + id: '/(app)' + path: '' + fullPath: '' + preLoaderRoute: typeof appRouteRouteImport + parentRoute: typeof rootRouteImport + } + '/(app)/': { + id: '/(app)/' path: '/' fullPath: '/' - preLoaderRoute: typeof IndexRouteImport - parentRoute: typeof rootRouteImport + preLoaderRoute: typeof appIndexRouteImport + parentRoute: typeof appRouteRoute } '/api/$': { id: '/api/$' @@ -111,6 +169,27 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof authSignInRouteImport parentRoute: typeof rootRouteImport } + '/(app)/team': { + id: '/(app)/team' + path: '/team' + fullPath: '/team' + preLoaderRoute: typeof appTeamRouteImport + parentRoute: typeof appRouteRoute + } + '/(app)/events': { + id: '/(app)/events' + path: '/events' + fullPath: '/events' + preLoaderRoute: typeof appEventsRouteImport + parentRoute: typeof appRouteRoute + } + '/(app)/branches': { + id: '/(app)/branches' + path: '/branches' + fullPath: '/branches' + preLoaderRoute: typeof appBranchesRouteImport + parentRoute: typeof appRouteRoute + } '/_authed/dashboard/': { id: '/_authed/dashboard/' path: '/dashboard' @@ -121,6 +200,24 @@ declare module '@tanstack/react-router' { } } +interface appRouteRouteChildren { + appBranchesRoute: typeof appBranchesRoute + appEventsRoute: typeof appEventsRoute + appTeamRoute: typeof appTeamRoute + appIndexRoute: typeof appIndexRoute +} + +const appRouteRouteChildren: appRouteRouteChildren = { + appBranchesRoute: appBranchesRoute, + appEventsRoute: appEventsRoute, + appTeamRoute: appTeamRoute, + appIndexRoute: appIndexRoute, +} + +const appRouteRouteWithChildren = appRouteRoute._addFileChildren( + appRouteRouteChildren, +) + interface AuthedRouteChildren { AuthedDashboardIndexRoute: typeof AuthedDashboardIndexRoute } @@ -133,7 +230,7 @@ const AuthedRouteWithChildren = AuthedRoute._addFileChildren(AuthedRouteChildren) const rootRouteChildren: RootRouteChildren = { - IndexRoute: IndexRoute, + appRouteRoute: appRouteRouteWithChildren, AuthedRoute: AuthedRouteWithChildren, authSignInRoute: authSignInRoute, ApiSplatRoute: ApiSplatRoute, diff --git a/src/routes/(app)/branches.tsx b/src/routes/(app)/branches.tsx new file mode 100644 index 0000000..79c0b83 --- /dev/null +++ b/src/routes/(app)/branches.tsx @@ -0,0 +1,9 @@ +import { createFileRoute } from "@tanstack/react-router"; + +export const Route = createFileRoute("/(app)/branches")({ + component: RouteComponent, +}); + +function RouteComponent() { + return
Hello "/branches"!
; +} diff --git a/src/routes/(app)/events.tsx b/src/routes/(app)/events.tsx new file mode 100644 index 0000000..e6fc79b --- /dev/null +++ b/src/routes/(app)/events.tsx @@ -0,0 +1,9 @@ +import { createFileRoute } from "@tanstack/react-router"; + +export const Route = createFileRoute("/(app)/events")({ + component: RouteComponent, +}); + +function RouteComponent() { + return
Hello "/events"!
; +} diff --git a/src/routes/index.tsx b/src/routes/(app)/index.tsx similarity index 78% rename from src/routes/index.tsx rename to src/routes/(app)/index.tsx index 85b51f4..fa17063 100644 --- a/src/routes/index.tsx +++ b/src/routes/(app)/index.tsx @@ -1,6 +1,6 @@ import { createFileRoute, Link } from "@tanstack/react-router"; -export const Route = createFileRoute("/")({ component: App }); +export const Route = createFileRoute("/(app)/")({ component: App }); function App() { return ( diff --git a/src/routes/(app)/route.tsx b/src/routes/(app)/route.tsx new file mode 100644 index 0000000..2252e3b --- /dev/null +++ b/src/routes/(app)/route.tsx @@ -0,0 +1,22 @@ +import { createFileRoute, Outlet } from "@tanstack/react-router"; + +import { Footer } from "$components/footer"; +import { Navbar } from "$components/navbar"; + +export const Route = createFileRoute("/(app)")({ + component: RouteComponent, +}); + +function RouteComponent() { + return ( + <> + +
+
+ +
+
+
+ + ); +} diff --git a/src/routes/(app)/team.tsx b/src/routes/(app)/team.tsx new file mode 100644 index 0000000..9828708 --- /dev/null +++ b/src/routes/(app)/team.tsx @@ -0,0 +1,66 @@ +import { createFileRoute } from "@tanstack/react-router"; + +import { SocialIcon } from "$components/social-icon"; + +import { TEAM_DATA } from "$data"; + +export const Route = createFileRoute("/(app)/team")({ + component: RouteComponent, +}); + +function RouteComponent() { + return ( + <> +
Hello "/team"!
+ +
+ {TEAM_DATA.core.map(m => ( +
+ + +

{m.name}

+

{m.title}

+ +
    + {m.links.map(link => ( + + ))} +
+
+ ))} +
+ + {TEAM_DATA.groups.map(g => ( +
+

{g.name}

+ +
+ {g.leads.map(l => ( +
+ {l.name} +

{l.name}

+ +
    + {l.links.map(link => ( + + ))} +
+
+ ))} +
+
+ ))} + + ); +} diff --git a/src/routes/(auth)/sign-in.tsx b/src/routes/(auth)/sign-in.tsx index c916c46..a2f8fc4 100644 --- a/src/routes/(auth)/sign-in.tsx +++ b/src/routes/(auth)/sign-in.tsx @@ -1,5 +1,5 @@ import { useForm } from "@tanstack/react-form"; -import { createFileRoute, Link, redirect, useRouter } from "@tanstack/react-router"; +import { createFileRoute, redirect, useRouter } from "@tanstack/react-router"; import { useState } from "react"; import { signinFn } from "$lib/fns/auth"; @@ -23,7 +23,7 @@ function RouteComponent() { const router = useRouter(); const { redirect: redirectTo } = Route.useSearch(); - const [serverError, setServerError] = useState(null); + const [_serverError, setServerError] = useState(null); const form = useForm({ defaultValues: { @@ -45,13 +45,8 @@ function RouteComponent() { }); return ( -
- - -
+
+
{ @@ -61,16 +56,16 @@ function RouteComponent() { > {field => ( -
+
{field => ( -
+
field.handleChange(e.target.value)} @@ -105,36 +100,24 @@ function RouteComponent() { )} - {serverError &&

{serverError}

} - -
- ({ - isSubmitting: state.isSubmitting, - canSubmit: state.canSubmit, - })} - > - {({ isSubmitting, canSubmit }) => ( - - )} - - - - Back - -
+ ({ + isSubmitting: state.isSubmitting, + canSubmit: state.canSubmit, + })} + > + {({ isSubmitting, canSubmit }) => ( + + )} + -
+
); } diff --git a/src/routes/__root.tsx b/src/routes/__root.tsx index 1d846f1..474720a 100644 --- a/src/routes/__root.tsx +++ b/src/routes/__root.tsx @@ -52,11 +52,12 @@ function RootDocument({ children }: { children: React.ReactNode }) { - + {children} +
  • + + + +