-
+ {cover ? ( // Conditional rendering based on cover value
+
+ ) : (
+
No Image Available
// Placeholder div or component
+ )}
{name}
diff --git a/src/components/ProjectTeam.tsx b/src/components/ProjectTeam.tsx
index fae64b6..1824f72 100644
--- a/src/components/ProjectTeam.tsx
+++ b/src/components/ProjectTeam.tsx
@@ -4,7 +4,6 @@ import "../styles/members.css";
// import MembersDisplay from "../components/MembersDisplay.astro";
import PersonCard from "./PersonCard.tsx";
import type { memberData } from "../types/memberData.ts";
-import sanitizeFilename from "../utils/sanitizeFilename.ts";
type TeamDetails = {
teamName: string;
@@ -66,7 +65,7 @@ const ProjectTeams = ({ projects }: ProjectTeamsProps) => {
cover={member.cover}
name={member.name}
team={member.team}
- desc={member.desc}
+ desc={member.description}
color={"--YOO-Red-Light"}
/>
);
@@ -76,4 +75,4 @@ const ProjectTeams = ({ projects }: ProjectTeamsProps) => {
);
};
-export default ProjectTeams;
+export default ProjectTeams;
\ No newline at end of file
diff --git a/src/components/TeamDropdown.tsx b/src/components/TeamDropdown.tsx
new file mode 100644
index 0000000..a92031e
--- /dev/null
+++ b/src/components/TeamDropdown.tsx
@@ -0,0 +1,109 @@
+import { Menu, MenuButton, MenuItem, MenuItems } from '@headlessui/react';
+import { useState, useEffect } from 'react';
+import { ChevronDownIcon } from '@heroicons/react/20/solid';
+
+// Define the type for dropdown options
+type OptionType = { value: string; label: string };
+
+const TeamDropdown = () => {
+ // State to store the selected team option
+ const [selectedTeam, setSelectedTeam] = useState(null);
+
+ // Options available in the dropdown menu
+ const options: OptionType[] = [
+ { value: 'leadership', label: 'Leadership' },
+ { value: 'communications', label: 'Communications' },
+ { value: 'projects', label: 'Projects' },
+ ];
+
+ // Function to handle the dropdown option selection
+ const handleChange = (team: OptionType) => {
+ setSelectedTeam(team);
+ if (team) {
+ // Show the corresponding team section based on the selected option
+ showTeamSection(team.value);
+ }
+ };
+
+ // Function to display the selected team section and hide others
+ const showTeamSection = (team: string) => {
+ // Hide all sections initially
+ document.querySelectorAll('.team-section').forEach((section) => {
+ (section as HTMLElement).style.display = 'none';
+ });
+
+ // Display the section that corresponds to the selected team
+ const teamSection = document.getElementById(`${team}-section`);
+ if (teamSection) {
+ teamSection.style.display = 'block';
+ }
+ };
+
+ // Function to show all team sections (used for desktop view)
+ const showAllSections = () => {
+ document.querySelectorAll('.team-section').forEach((section) => {
+ (section as HTMLElement).style.display = 'block'; // Show all sections on desktop
+ });
+ };
+
+ // Use an effect to handle screen resize events
+ useEffect(() => {
+ // Handle screen resizing to display or hide sections depending on screen size
+ const handleResize = () => {
+ if (window.innerWidth > 800) {
+ // Show all sections on larger screens (desktop view)
+ showAllSections();
+ } else {
+ // Hide all sections on smaller screens (mobile view)
+ document.querySelectorAll('.team-section').forEach((section) => {
+ (section as HTMLElement).style.display = 'none';
+ });
+ }
+ };
+
+ // Add the resize event listener
+ window.addEventListener('resize', handleResize);
+
+ // Initial check when the component is mounted
+ handleResize();
+
+ // Clean up the event listener when the component unmounts
+ return () => {
+ window.removeEventListener('resize', handleResize);
+ };
+ }, []);
+
+ return (
+
+ {/* Dropdown menu for mobile view */}
+
+
+ );
+};
+
+export default TeamDropdown;
diff --git a/src/components/projects page/PastProjectsList.tsx b/src/components/projectspage/PastProjectsList.tsx
similarity index 96%
rename from src/components/projects page/PastProjectsList.tsx
rename to src/components/projectspage/PastProjectsList.tsx
index bb77fcd..fd9a7a1 100644
--- a/src/components/projects page/PastProjectsList.tsx
+++ b/src/components/projectspage/PastProjectsList.tsx
@@ -7,6 +7,7 @@ type PastProjectsListProps = {
};
export default function PastProjectsList({ projects }: PastProjectsListProps) {
+
return (
{projects.map((project, index) => {
@@ -43,7 +44,7 @@ export default function PastProjectsList({ projects }: PastProjectsListProps) {
-
{project.date}
+ {project.date?.toString() || "No date available"}
{project.title}
diff --git a/src/components/projectspage/ProjectsImageCarousel.tsx b/src/components/projectspage/ProjectsImageCarousel.tsx
new file mode 100644
index 0000000..71a62fb
--- /dev/null
+++ b/src/components/projectspage/ProjectsImageCarousel.tsx
@@ -0,0 +1,84 @@
+import { useState } from "react";
+import "../../styles/index.css";
+import ArrowBackIosIcon from '@mui/icons-material/ArrowBackIos';
+import ArrowForwardIosIcon from '@mui/icons-material/ArrowForwardIos';
+
+interface Project {
+ id: string;
+ title: string;
+ date: string;
+ description: string;
+ cover: string;
+ team: string;
+ createdAt: string;
+ updatedAt: string;
+ carouselNumber: number;
+}
+
+type CarouselProps = {
+ projects: Project[];
+};
+
+export default function ProjectsImageCarousel({ projects }: CarouselProps) {
+ const events = projects.map((project) => ({
+ src: project.cover,
+ alt: project.title,
+ time: new Date(project.date).toLocaleDateString(),
+ title: project.title,
+ description: project.description,
+ }));
+
+ const [imgIndex, setImgIndex] = useState
(0);
+
+ const handleBack = () => {
+ setImgIndex((prevIndex) => (prevIndex === 0 ? events.length - 1 : prevIndex - 1));
+ };
+
+ const handleForward = () => {
+ setImgIndex((prevIndex) => (prevIndex === events.length - 1 ? 0 : prevIndex + 1));
+ };
+
+ return (
+ <>
+
+
+ {events.map((event, index) => (
+
+ ))}
+
+
+
Upcoming events
+
+ {/* Do not remove the 2 divs below */}
+
corn
+
corn
+
+
+
+
+
+
{events[imgIndex].time}
+
+
+
{events[imgIndex].title}
+
+
+
+
{events[imgIndex].description}
+
+
+
+
+ {events.map((_, index) => (
+
+ ))}
+
+
+
+ >
+ );
+}
diff --git a/src/components/projects page/projects_team_card.astro b/src/components/projectspage/projects_team_card.astro
similarity index 100%
rename from src/components/projects page/projects_team_card.astro
rename to src/components/projectspage/projects_team_card.astro
diff --git a/src/components/projects page/projects_team_container.astro b/src/components/projectspage/projects_team_container.astro
similarity index 100%
rename from src/components/projects page/projects_team_container.astro
rename to src/components/projectspage/projects_team_container.astro
diff --git a/src/lib/prisma.ts b/src/lib/prisma.ts
new file mode 100644
index 0000000..b22ea86
--- /dev/null
+++ b/src/lib/prisma.ts
@@ -0,0 +1,16 @@
+import { PrismaClient } from '@prisma/client'
+
+const client = new PrismaClient({
+ log: process.env.NODE_ENV === 'development' ? ['error', 'warn'] : ['error'],
+})
+
+// global variable that stores the client
+const globalForPrisma = globalThis as unknown as {
+ prisma: PrismaClient | undefined
+}
+
+export const prisma = globalForPrisma.prisma ?? client
+
+if (process.env.NODE_ENV !== 'production') globalForPrisma.prisma = client
+
+prisma.member.findMany({})
diff --git a/src/lib/supabaseClient.ts b/src/lib/supabaseClient.ts
new file mode 100644
index 0000000..e68f504
--- /dev/null
+++ b/src/lib/supabaseClient.ts
@@ -0,0 +1,5 @@
+import { createClient } from '@supabase/supabase-js';
+
+export const supabaseUrl = process.env.SUPABASE_URL || import.meta.env.SUPABASE_URL;
+export const supabaseServiceKey = process.env.SERVICE_KEY || import.meta.env.SERVICE_KEY;
+export const supabase = createClient(supabaseUrl, supabaseServiceKey);
diff --git a/src/pages/404.astro b/src/pages/404.astro
new file mode 100644
index 0000000..d8b9dd2
--- /dev/null
+++ b/src/pages/404.astro
@@ -0,0 +1,33 @@
+---
+import "../styles/global.css";
+import "../styles/error404.css";
+import Layout from '../layouts/layout.astro';
+import BlobBackground from "../components/BlobBackground/BlobBackground";
+---
+
+
+
+
+
+
+
+ 404 Page
+
+
+
+
+
+
+
+
+
+
+
Oops, we can't find the page you are looking for!
+
+
+
+
+
+
diff --git a/src/pages/api/refresh-login.ts b/src/pages/api/refresh-login.ts
index 2c3014c..d6064ae 100644
--- a/src/pages/api/refresh-login.ts
+++ b/src/pages/api/refresh-login.ts
@@ -1,20 +1,26 @@
import { Client } from "@notionhq/client";
-import { getMembers } from "../../scripts/getMembers.ts";
-import { getProjects } from "../../scripts/getProjects.ts";
-import { getHomepageDescriptions } from "../../scripts/getHomepageDescriptions.ts";
+import { updateMembers } from "../../scripts/updateMembers.ts";
+import { updateProjects } from "../../scripts/updateProjects.ts";
+import { updateTeamsDescriptions } from "../../scripts/updateTeamDescription.ts";
+import { updateHomepageDescriptions } from "../../scripts/updateHomepageDescriptions.ts";
import type { APIRoute } from 'astro';
import type { passwordRow } from "../../types/passwordRow.ts";
interface NotionPassword {
password: string;
- newPassword?: string;
+ newPassword?: string;
action: 'login' | 'refresh' | 'change-password';
}
+interface LogMessage {
+ message: string;
+ timestamp: number;
+}
+
export const POST: APIRoute = async ({ request }) => {
const NOTION_TOKEN = process.env.NOTION_TOKEN || import.meta.env.NOTION_TOKEN;
const NOTION_REFRESH_ID = process.env.NOTION_REFRESH_ID || import.meta.env.NOTION_REFRESH_ID;
-
+
if (!NOTION_TOKEN || !NOTION_REFRESH_ID) {
return new Response(JSON.stringify({ error: "Missing secret(s)" }), { status: 500 });
}
@@ -44,35 +50,30 @@ export const POST: APIRoute = async ({ request }) => {
if (!password) {
return new Response(JSON.stringify({ error: "Password is required" }), { status: 400 });
}
-
+
if (password === notionPassword) {
return new Response(JSON.stringify({ success: true }), { status: 200 });
} else {
return new Response(JSON.stringify({ success: false, message: "Invalid password" }), { status: 401 });
}
} else if (action === 'refresh') {
- if (!password) {
- return new Response(JSON.stringify({ error: "Password is required" }), { status: 400 });
- }
-
- if (password === notionPassword) {
- try {
- await getMembers();
- await getProjects();
- await getHomepageDescriptions();
- return new Response(JSON.stringify({ success: true }), { status: 200 });
- } catch (err) {
- console.error("Error during refresh data:", err);
- return new Response(JSON.stringify({ error: "Failed to refresh data" }), { status: 500 });
+ return new Response(new ReadableStream({
+ start(controller) {
+ handleRefresh(controller, password, notionPassword);
}
- } else {
- return new Response(JSON.stringify({ success: false, message: "Invalid password" }), { status: 401 });
- }
+ }), {
+ headers: {
+ 'Content-Type': 'text/event-stream',
+ 'Cache-Control': 'no-cache',
+ 'Connection': 'keep-alive'
+ }
+ });
+
} else if (action === 'change-password') {
if (!newPassword) {
return new Response(JSON.stringify({ error: "New password is required" }), { status: 400 });
}
-
+
await notion.pages.update({
page_id: passwords[0].id as string,
properties: {
@@ -96,4 +97,50 @@ export const POST: APIRoute = async ({ request }) => {
console.error("Error during request handling:", error);
return new Response(JSON.stringify({ error: "Internal server error" }), { status: 500 });
}
+
+ async function handleRefresh(controller: ReadableStreamDefaultController, password: string, notionPassword: string) {
+ if (!password) {
+ return new Response(JSON.stringify({ error: "Password is required" }), { status: 400 });
+ }
+
+ if (password === notionPassword) {
+ try {
+ sendLog(controller, "Starting refresh process");
+
+ sendLog(controller, "Getting members");
+ await updateMembers(controller);
+
+ sendLog(controller, "Getting projects");
+ await updateProjects(controller);
+
+ sendLog(controller, "Getting homepage descriptions");
+ await updateHomepageDescriptions(controller);
+
+ sendLog(controller, "Getting team descriptions");
+ await updateTeamsDescriptions(controller);
+
+ sendLog(controller, "Refresh process completed");
+ controller.close();
+ return new Response(JSON.stringify({ success: true }), { status: 200 });
+ } catch (err) {
+ console.error("Error during refresh data:", err);
+ sendLog(controller, `Error during refresh: ${err}`);
+ return new Response(JSON.stringify({ error: "Failed to refresh data" }), { status: 500 });
+ }
+ } else {
+ return new Response(JSON.stringify({ success: false, message: "Invalid password" }), { status: 401 });
+ }
+ }
+
+ function sendLog(controller: ReadableStreamDefaultController, message: string) {
+ try {
+ const logMessage = {
+ message,
+ timestamp: Date.now()
+ };
+ controller.enqueue(new TextEncoder().encode(`data: ${JSON.stringify(logMessage)}\n\n`));
+ } catch (error) {
+ console.error("Error sending log:", error);
+ }
+ }
};
diff --git a/src/pages/archive.astro b/src/pages/archive.astro
index 6f85198..c34bd5a 100644
--- a/src/pages/archive.astro
+++ b/src/pages/archive.astro
@@ -42,6 +42,11 @@ const recordMap = await notion.getPage(pageId);
.notion-wrapper {
overflow-x: auto;
+ background-color: rgba(255, 255, 255, 0.658);
+ padding: 20px;
+ margin: 0 auto; /* Center horizontally */
+ max-width: 1200px; /* Control the width */
+ border-radius: 10px; /* Optional for rounded corners */
}
.heading-wrapper {
@@ -50,6 +55,7 @@ const recordMap = await notion.getPage(pageId);
display: flex;
justify-content: center;
align-items: center;
+
}
diff --git a/src/pages/index.astro b/src/pages/index.astro
index 0f8f52a..aa051bf 100644
--- a/src/pages/index.astro
+++ b/src/pages/index.astro
@@ -1,5 +1,4 @@
---
-
// Homepage
import "../styles/global.css";
import "../styles/index.css";
@@ -10,19 +9,20 @@ import IndexAbout from "../components/index page/IndexAbout";
import IndexGoals from "../components/index page/IndexGoals";
import IndexHero from "../components/index page/IndexHero";
import BlobBackground from "../components/BlobBackground/BlobBackground";
-import descriptions from "../../public/homepage/homepageData.json"
-const aboutContent = descriptions["About Us"];
-const heroContent = descriptions["Hero"];
-const goalContent = descriptions["Goals"];
-const carousel1 = descriptions["Carousel Item #1"];
-const carousel2 = descriptions["Carousel Item #2"];
-const carousel3 = descriptions["Carousel Item #3"];
+import { fetchHomepageDescriptions } from '../scripts/serveHomepageDescriptions'; // Import the fetch function
+import type { HomepageDescription } from "../types/homepageDescriptions";
-const carouselContent = [carousel1, carousel2, carousel3].filter((item): item is NonNullable => item !== undefined); // temp fix
+const descriptions: HomepageDescription[] = await fetchHomepageDescriptions();
+const aboutContent = descriptions.find(item => item.heading === "About Us");
+const heroContent = descriptions.find(item => item.heading === "Hero");
+const goalContent = descriptions.find(item => item.heading === "Goals");
+const carousel1 = descriptions.find(item => item.heading === "Carousel Item #1");
+const carousel2 = descriptions.find(item => item.heading === "Carousel Item #2");
+const carousel3 = descriptions.find(item => item.heading === "Carousel Item #3");
+const carouselContent = [carousel1, carousel2, carousel3].filter((item): item is NonNullable => item !== undefined);
---
-
@@ -33,29 +33,33 @@ const carouselContent = [carousel1, carousel2, carousel3].filter((item): item is
-
-
+
+
+
+
+
-
+
-
+
-
+
-
+
-
+
-
+
+
diff --git a/src/pages/members.astro b/src/pages/members.astro
index da582ad..c48a80a 100644
--- a/src/pages/members.astro
+++ b/src/pages/members.astro
@@ -1,122 +1,127 @@
---
+import { sortMembersByTeam } from "../scripts/sortTeams.ts";
+
import "../styles/global.css";
import "../styles/members.css";
+import { fetchMembers } from "../scripts/serveMembers";
import Layout from "../layouts/layout.astro";
-import members from "../../public/members/membersData.json"
import TeamDisplayLeft from "../components/TeamDisplayLeft.astro";
import TeamDisplayRight from "../components/TeamDisplayRight.astro";
import ProjectTeam from "../components/ProjectTeam.tsx";
-import { sortMembersByTeam } from "../scripts/sortTeams.ts";
-import { getTeamsDescriptions } from "../scripts/getTeamDescription";
-
-type MemberData = {
- team: string;
- desc: string;
- name: string;
- cover: string;
- url?: string;
-}
-type TeamDescriptions = {
- name: string;
- description?: string;
- tags?: string;
-}
+// Import the TeamDropdown component
+import TeamDropdown from "../components/TeamDropdown";
+import type { TeamDescriptions } from "../types/teamDescriptions";
+import { serveTeamDescriptions } from "../scripts/serveTeamDescriptions";
+import type { memberData } from "../types/memberData";
type Team = {
teamName: string;
- members: MemberData[];
+ members: memberData[];
description: string | undefined;
-}
+};
+
+let members = await fetchMembers();
-let { teamsDict, projects } =
- sortMembersByTeam(members);
-let teamDescription: TeamDescriptions[] = await getTeamsDescriptions();
+let { teamsDict, projects } = sortMembersByTeam(members);
-function mapTeamWithDesc(teams: {[teamName: string]: MemberData[]}, teamDescription: TeamDescriptions[]) {
+let teamDescription: TeamDescriptions[] = await serveTeamDescriptions();
+
+function mapTeamWithDesc(
+ teams: { [teamName: string]: memberData[] },
+ teamDescription: TeamDescriptions[],
+) {
return Object.keys(teams)
- .map(teamName => {
- const description = teamDescription.find((desc: TeamDescriptions) => desc.name === teamName);
- if (description) {
- return {
- teamName,
- members: teams[teamName],
- description: description.description
- };
- }
- return null;
- })
- .filter(Boolean);
+ .map((teamName) => {
+ const description = teamDescription.find(
+ (desc: TeamDescriptions) => desc.name === teamName,
+ );
+ if (description) {
+ return {
+ teamName,
+ members: teams[teamName],
+ description: description.description,
+ };
+ }
+ return null;
+ })
+ .filter(Boolean);
}
-let teamWithDesc = mapTeamWithDesc(teamsDict, teamDescription);
+let teamWithDesc: (Team | null)[] = mapTeamWithDesc(teamsDict, teamDescription);
---
-
+
- Members Page
+ Team Display
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
- {teamWithDesc.map((team: Team, index: number) => (
- index % 2 === 0 ?
- :
-
- ))}
-
-
-
-
+
diff --git a/src/pages/projects.astro b/src/pages/projects.astro
index 978315e..d3a235e 100644
--- a/src/pages/projects.astro
+++ b/src/pages/projects.astro
@@ -3,14 +3,14 @@ import "../styles/global.css";
import "../styles/index.css";
import "../styles/projects.css";
import Layout from "../layouts/layout.astro";
-import PastProjectsList from "../components/projects page/PastProjectsList";
-import ImageCarousel from "../components/ImageCarousel";
+import PastProjectsList from "../components/projectspage/PastProjectsList";
+import ImageCarousel from "../components/projectspage/ProjectsImageCarousel";
import IndexHeading from "../components/index page/IndexHeading";
import BlobBackground from "../components/BlobBackground/BlobBackground";
+import { serveProjects } from "../scripts/serveProjects";
+const { projects, carouselList } = await serveProjects();
+console.log(carouselList)
-// Read the JSON files from the public folder
-import projects from "../../public/projects/projectsData.json"
-import carouselList from "../../public/projects/carouselList.json"
---
@@ -23,7 +23,7 @@ import carouselList from "../../public/projects/carouselList.json"
-
+
Our Past Projects
diff --git a/src/pages/projects/team2.astro b/src/pages/projects/team2.astro
index 256f366..8ff0c27 100644
--- a/src/pages/projects/team2.astro
+++ b/src/pages/projects/team2.astro
@@ -5,9 +5,9 @@ import "../../styles/index.css";
import TeamDisplay from "../../components/TeamDisplayLeft.astro";
import Layout from "../../layouts/layout.astro";
import ProjectCard from "../../components/ProjectCard.astro";
-import TeamCard from "../../components/projects page/projects_team_card.astro";
+import TeamCard from "../../components/projectspage/projects_team_card.astro";
import Carousel from "../../components/carousel.astro";
-import Container from "../../components/projects page/projects_team_container.astro";
+import Container from "../../components/projectspage/projects_team_container.astro";
---
diff --git a/src/pages/projects/team3.astro b/src/pages/projects/team3.astro
index 97db4ee..837e8b5 100644
--- a/src/pages/projects/team3.astro
+++ b/src/pages/projects/team3.astro
@@ -5,9 +5,9 @@ import "../../styles/index.css";
import TeamDisplay from "../../components/TeamDisplayLeft.astro";
import Layout from "../../layouts/layout.astro";
import ProjectCard from "../../components/ProjectCard.astro";
-import TeamCard from "../../components/projects page/projects_team_card.astro";
+import TeamCard from "../../components/projectspage/projects_team_card.astro";
import Carousel from "../../components/carousel.astro";
-import Container from "../../components/projects page/projects_team_container.astro";
+import Container from "../../components/projectspage/projects_team_container.astro";
---
diff --git a/src/pages/projects/team4.astro b/src/pages/projects/team4.astro
index f96681d..d44a20b 100644
--- a/src/pages/projects/team4.astro
+++ b/src/pages/projects/team4.astro
@@ -5,9 +5,9 @@ import "../../styles/index.css";
import TeamDisplay from "../../components/TeamDisplayLeft.astro";
import Layout from "../../layouts/layout.astro";
import ProjectCard from "../../components/ProjectCard.astro";
-import TeamCard from "../../components/projects page/projects_team_card.astro";
+import TeamCard from "../../components/projectspage/projects_team_card.astro";
import Carousel from "../../components/carousel.astro";
-import Container from "../../components/projects page/projects_team_container.astro";
+import Container from "../../components/projectspage/projects_team_container.astro";
---
diff --git a/src/scripts/getHomepageDescriptions.ts b/src/scripts/getHomepageDescriptions.ts
deleted file mode 100644
index 2498359..0000000
--- a/src/scripts/getHomepageDescriptions.ts
+++ /dev/null
@@ -1,98 +0,0 @@
-import fs from 'fs';
-import path from 'path';
-import axios from 'axios';
-import sharp from 'sharp';
-import { Client } from "@notionhq/client";
-import { fetchPageBlocks } from "./fetchPageBlocks.ts";
-import { getPage } from "./getPageDescriptions.ts";
-import sanitizeFilename from '../utils/sanitizeFilename.ts';
-
-type Description = {
- heading: string;
- subheadings: string[];
- paragraphs: string[];
- images: string[];
-};
-
-async function ensureDirectoryExists(directoryPath: string): Promise
{
- if (!fs.existsSync(directoryPath)) {
- fs.mkdirSync(directoryPath, { recursive: true });
- console.log(`Directory ${directoryPath} created.`);
- }
-}
-
-async function downloadAndProcessImage(imageUrl: string, folderPath: string, fileName: string): Promise {
- const imagePath = path.join(folderPath, `${fileName}.webp`);
-
- // Check if the image already exists
- if (!fs.existsSync(imagePath)) {
- const response = await axios.get(imageUrl, { responseType: 'arraybuffer' });
- const compressedImageBuffer = await sharp(response.data)
- .webp({ quality: 80 })
- .toBuffer();
- fs.writeFileSync(imagePath, new Uint8Array(compressedImageBuffer));
- console.log(`Image ${fileName}.webp downloaded, compressed, and saved.`);
- } else {
- console.log(`Image ${fileName}.webp already exists.`);
- }
-
- return `/homepage/${fileName}.webp`; // Return the public path for the image
-}
-
-export async function getHomepageDescriptions(): Promise {
- const descriptions: Record = {};
-
- const NOTION_TOKEN = process.env.NOTION_TOKEN || import.meta.env.NOTION_TOKEN;
- const NOTION_HOMEPAGE_ID = process.env.NOTION_HOMEPAGE_ID || import.meta.env.NOTION_HOMEPAGE_ID;
-
- if (!NOTION_TOKEN || !NOTION_HOMEPAGE_ID) throw new Error("Missing secret(s)");
-
- const notion = new Client({ auth: NOTION_TOKEN });
- const publicFolderPath = path.join(process.cwd(), 'public');
- const homepageFolderPath = path.join(publicFolderPath, 'homepage');
-
- // Ensure the 'homepage' directory exists
- await ensureDirectoryExists(homepageFolderPath);
-
- try {
- const query = await notion.databases.query({
- database_id: NOTION_HOMEPAGE_ID,
- sorts: [{ property: 'Name', direction: 'ascending' }]
- });
-
- for (const page of query.results) {
- if ('properties' in page) {
- const nameProperty = page.properties.Name;
- if (nameProperty.type === 'title' && Array.isArray(nameProperty.title) && nameProperty.title.length > 0) {
- const title: string = nameProperty.title[0].plain_text;
- const pageId: string = page.id;
- const blocks = await fetchPageBlocks(notion, pageId);
- const { subheadings, paragraphs, images } = await getPage(blocks);
-
- // Process and store images
- const sanitizedTitle = sanitizeFilename(title);
- const processedImages = await Promise.all(
- images.map((url, idx) =>
- downloadAndProcessImage(url, homepageFolderPath, `${sanitizedTitle}_image_${idx}`)
- )
- );
-
- descriptions[title] = {
- heading: title,
- subheadings,
- paragraphs,
- images: processedImages // Store local paths of images
- };
- }
- }
- }
-
- // Save the descriptions to a JSON file
- const jsonFilePath = path.join(homepageFolderPath, 'homepageData.json');
- fs.writeFileSync(jsonFilePath, JSON.stringify(descriptions, null, 2));
- console.log(`Homepage descriptions saved to ${jsonFilePath}`);
-
- } catch (error) {
- console.error("Error retrieving or processing homepage descriptions:", error);
- }
-}
diff --git a/src/scripts/getMembers.ts b/src/scripts/getMembers.ts
deleted file mode 100644
index 6207f8d..0000000
--- a/src/scripts/getMembers.ts
+++ /dev/null
@@ -1,122 +0,0 @@
-import fs from 'fs';
-import path from 'path';
-import axios from 'axios';
-import sharp from 'sharp';
-import sanitizeFilename from '../utils/sanitizeFilename';
-import { Client } from "@notionhq/client"; // Notion API client
-import type { memberRow } from "../types/memberRow";
-
-interface Member {
- team: string;
- name: string;
- desc: string;
- cover: string; // This will store the local file path
-}
-
-// Helper function to ensure the directory exists
-async function ensureDirectoryExists(directoryPath: string): Promise {
- if (!fs.existsSync(directoryPath)) {
- fs.mkdirSync(directoryPath, { recursive: true });
- console.log(`Directory ${directoryPath} created.`);
- }
-}
-
-// Helper function to clean up old images not part of the current member list
-async function cleanupOldImages(membersFolderPath: string, validImageNames: string[]): Promise {
- const files = fs.readdirSync(membersFolderPath);
- files.forEach((file: string) => {
- if (!validImageNames.includes(file)) {
- const filePath = path.join(membersFolderPath, file);
- fs.unlinkSync(filePath);
- console.log(`Deleted old image: ${file}`);
- }
- });
-}
-
-// Main function to get members, update covers, and return the sanitized members data
-export async function getMembers(): Promise {
- const NOTION_TOKEN = process.env.NOTION_TOKEN || import.meta.env.NOTION_TOKEN;
- const NOTION_MEMBERS_ID = process.env.NOTION_MEMBERS_ID || import.meta.env.NOTION_MEMBERS_ID;
-
- if (!NOTION_TOKEN || !NOTION_MEMBERS_ID)
- throw new Error("Missing secret(s)");
-
- const notion = new Client({ auth: NOTION_TOKEN });
-
- const query = await notion.databases.query({
- database_id: NOTION_MEMBERS_ID,
- sorts: [{
- property: 'Name',
- direction: 'ascending'
- }]
- });
-
- const memberspages = query.results as memberRow[];
- const members: Member[] = memberspages.map((row) => {
- return {
- team: row.properties.Team.rich_text[0] ? row.properties.Team.rich_text[0].plain_text : "",
- desc: row.properties.Description.rich_text[0] ? row.properties.Description.rich_text[0].plain_text : "",
- name: row.properties.Name.title[0] ? row.properties.Name.title[0].plain_text : "",
- cover: row.cover?.type == "external" ? row.cover?.external.url : row.cover?.file.url ?? ""
- };
- });
-
- const publicFolderPath = path.join(process.cwd(), 'public');
- const membersFolderPath = path.join(publicFolderPath, 'members'); // Path for storing member images
- const jsonFilePath = path.join(membersFolderPath, 'membersData.json'); // Path for storing members data in JSON
-
- // Ensure the 'members' directory exists
- await ensureDirectoryExists(membersFolderPath);
-
- // Filter members that have cover images
- const membersWithCover = members.filter(member => member.cover);
-
- // Generate the list of valid image filenames
- const validImageNames = membersWithCover.map((member) => {
- const sanitizedFileName = sanitizeFilename(`${member.team}_${member.name}`);
- return `${sanitizedFileName}.webp`;
- });
-
- // Clean up old images not in the current list
- await cleanupOldImages(membersFolderPath, validImageNames);
-
- // Process each member's cover image
- const downloadPromises = membersWithCover.map(async (member) => {
- const sanitizedFileName = sanitizeFilename(`${member.team}_${member.name}`);
- const imageName = `${sanitizedFileName}.webp`;
- const imagePath = path.join(membersFolderPath, imageName);
-
- // Check if the image already exists, if not download and convert
- if (!fs.existsSync(imagePath)) {
- const response = await axios({
- url: member.cover,
- method: 'GET',
- responseType: 'arraybuffer',
- });
-
- // Convert to WebP format and save locally
- const compressedImageBuffer = await sharp(response.data)
- .webp({ quality: 60 })
- .resize({ width: 500 })
- .toBuffer();
-
- fs.writeFileSync(imagePath, new Uint8Array(compressedImageBuffer));
- console.log(`Image ${imageName} downloaded and saved.`);
- }
-
- // Update the member's cover to point to the local file path
- member.cover = `/members/${imageName}`;
- });
-
- // Wait for all images to be downloaded and processed
- await Promise.all(downloadPromises);
-
- console.log('All images downloaded and processed.');
-
- // Write members to a JSON file
- fs.writeFileSync(jsonFilePath, JSON.stringify(members, null, 2));
- console.log(`Members data saved to ${jsonFilePath}`);
-
- // Return the updated members array
- return members;
-}
diff --git a/src/scripts/getProjects.ts b/src/scripts/getProjects.ts
deleted file mode 100644
index d39c997..0000000
--- a/src/scripts/getProjects.ts
+++ /dev/null
@@ -1,135 +0,0 @@
-import fs from 'fs';
-import path from 'path';
-import axios from 'axios';
-import sharp from 'sharp';
-import { Client } from "@notionhq/client";
-import { fetchPageBlocks } from "./fetchPageBlocks.ts";
-import { getPage } from "./getPageDescriptions.ts";
-import type { projectRow } from '../types/projectRow.ts';
-import sanitizeFilename from '../utils/sanitizeFilename.ts';
-
-type ProjectData = {
- title: string;
- date: string;
- description: string;
- cover: string;
- team: string;
- tags: string[]; // Make tags required as an empty array
- id: string;
-}
-
-type CarouselItem = {
- heading: string;
- subheadings: string[];
- paragraphs: string[];
- images: string[];
-};
-
-async function ensureDirectoryExists(directoryPath: string): Promise {
- if (!fs.existsSync(directoryPath)) {
- fs.mkdirSync(directoryPath, { recursive: true });
- console.log(`Directory ${directoryPath} created.`);
- }
-}
-
-async function downloadAndProcessImage(imageUrl: string, folderPath: string, fileName: string): Promise {
- const imagePath = path.join(folderPath, `${fileName}.webp`);
-
- if (!fs.existsSync(imagePath)) {
- const response = await axios.get(imageUrl, { responseType: 'arraybuffer' });
- const compressedImageBuffer = await sharp(response.data)
- .webp({ quality: 80 })
- .toBuffer();
- fs.writeFileSync(imagePath, new Uint8Array(compressedImageBuffer));
- console.log(`Image ${fileName}.webp downloaded, compressed, and saved.`);
- } else {
- console.log(`Image ${fileName}.webp already exists.`);
- }
-
- return `/projects/${fileName}.webp`; // Return the public path for the image
-}
-
-export async function getProjects(): Promise<{ projects: ProjectData[], carouselList: CarouselItem[] }> {
- const NOTION_TOKEN = process.env.NOTION_TOKEN || import.meta.env.NOTION_TOKEN;
- const NOTION_PROJECTS_ID = process.env.NOTION_PROJECTS_ID || import.meta.env.NOTION_PROJECTS_ID;
-
- if (!NOTION_TOKEN || !NOTION_PROJECTS_ID) {
- throw new Error("Missing secret(s)");
- }
-
- const notion = new Client({ auth: NOTION_TOKEN });
- const publicFolderPath = path.join(process.cwd(), 'public');
- const projectsFolderPath = path.join(publicFolderPath, 'projects');
-
- await ensureDirectoryExists(projectsFolderPath);
-
- const query = await notion.databases.query({
- database_id: NOTION_PROJECTS_ID,
- sorts: [{ property: 'Date', direction: 'descending' }]
- });
-
- const projectsRows = query.results as projectRow[];
- const carouselList: CarouselItem[] = [];
-
- const projectPromises = projectsRows.map(async (row) => {
- const title = row.properties.Name.title[0] ? row.properties.Name.title[0].plain_text : "";
- const date = row.properties.Date.date ? row.properties.Date.date.start : "";
- const description = row.properties.Description.rich_text[0] ? row.properties.Description.rich_text[0].plain_text : "";
- const coverUrl = row.cover?.type === "external" ? row.cover?.external.url : row.cover?.file.url ?? "";
- const team = row.properties.Team.rich_text[0] ? row.properties.Team.rich_text[0].plain_text : "";
- const tags = row.properties.Tags?.multi_select.map((tag) => tag.name) || []; // Ensure tags is always an array
- const id = row.id || "";
-
- let coverPath = "";
-
- if (coverUrl) {
- coverPath = await downloadAndProcessImage(coverUrl, projectsFolderPath, sanitizeFilename(title) + "_cover");
- }
-
- if (title.toLowerCase().includes("carousel content")) {
- const pageId: string = id;
- const blocks = await fetchPageBlocks(notion, pageId);
- const { subheadings, paragraphs, images } = await getPage(blocks);
-
- carouselList.push({
- heading: subheadings[0],
- subheadings,
- paragraphs,
- images: await Promise.all(
- images.map((url, idx) =>
- downloadAndProcessImage(url, projectsFolderPath, `${sanitizeFilename(title)}_image_${idx}`)
- )
- )
- });
-
- return null; // Filter out carousel content from main projects list
- }
-
- return {
- title,
- date,
- description,
- cover: coverPath, // Updated to point to the local path
- team,
- tags, // No need for type assertion here
- id
- };
- });
-
- // Filter out null values and await all async operations
- const filteredProjects = (await Promise.all(projectPromises)).filter((project): project is ProjectData => project !== null);
-
- // Save the projects and carousel list to JSON files
- const projectsJsonPath = path.join(projectsFolderPath, 'projectsData.json');
- fs.writeFileSync(projectsJsonPath, JSON.stringify(filteredProjects, null, 2));
- console.log(`Projects data saved to ${projectsJsonPath}`);
-
- const carouselJsonPath = path.join(projectsFolderPath, 'carouselList.json');
- fs.writeFileSync(carouselJsonPath, JSON.stringify(carouselList, null, 2));
- console.log(`Carousel list data saved to ${carouselJsonPath}`);
-
- return {
- projects: filteredProjects,
- carouselList
- };
-}
diff --git a/src/scripts/getTeamDescription.ts b/src/scripts/getTeamDescription.ts
deleted file mode 100644
index b5a6a91..0000000
--- a/src/scripts/getTeamDescription.ts
+++ /dev/null
@@ -1,40 +0,0 @@
-import { Client } from "@notionhq/client";
-import type { GetPageResponse } from "@notionhq/client/build/src/api-endpoints";
-import type { teamRow } from "../types/teamRow"
-
-
-type TeamDescriptions = {
- name: string;
- description?: string;
- tags?: string;
-}
-
-export async function getTeamsDescriptions(): Promise {
- const NOTION_TOKEN = process.env.NOTION_TOKEN || import.meta.env.NOTION_TOKEN;
- const NOTION_TEAMS_ID = process.env.NOTION_TEAMS_ID || import.meta.env.NOTION_TEAMS_ID;
- if (!NOTION_TOKEN || !NOTION_TEAMS_ID)
- throw new Error("Missing secret(s)");
-
- const notion = new Client({ auth: NOTION_TOKEN });
-
- const query = await notion.databases.query({
- database_id: NOTION_TEAMS_ID,
- sorts: [{
- property: 'Name',
- direction: 'ascending'
- }]
- });
-
-
- const teampages = query.results as teamRow[];
-
- const teams: TeamDescriptions[] = teampages.map((row) => {
- return {
- name: row.properties.Name.title[0] ? row.properties.Name.title[0].plain_text : "",
- description: row.properties.Description.rich_text[0] ? row.properties.Description.rich_text[0].plain_text : "",
- tags: row.properties.Tags.select.name ? row.properties.Tags.select.name : "",
- };
- });
-
- return teams;
-}
\ No newline at end of file
diff --git a/src/scripts/serveHomepageDescriptions.ts b/src/scripts/serveHomepageDescriptions.ts
new file mode 100644
index 0000000..749a95a
--- /dev/null
+++ b/src/scripts/serveHomepageDescriptions.ts
@@ -0,0 +1,16 @@
+// src/lib/fetchHomepageDescriptions.ts
+import {prisma} from "../lib/prisma";
+
+/**
+ * Fetches homepage descriptions from the Prisma database.
+ * @returns {Promise} An array of homepage descriptions.
+ */
+export async function fetchHomepageDescriptions(): Promise {
+ try {
+ const descriptions = await prisma.homepageDescription.findMany();
+ return descriptions;
+ } catch (error) {
+ console.error("Error fetching homepage descriptions:", error);
+ return [];
+ }
+}
diff --git a/src/scripts/serveMembers.ts b/src/scripts/serveMembers.ts
new file mode 100644
index 0000000..f85bc28
--- /dev/null
+++ b/src/scripts/serveMembers.ts
@@ -0,0 +1,19 @@
+// scripts/fetchMembers.ts
+import type { memberData } from '../types/memberData';
+import {prisma} from "../lib/prisma"
+
+
+/**
+ * Fetches members from the database.
+ * @returns {Promise} An array of members.
+ */
+export async function fetchMembers(): Promise {
+ let members: memberData[] = []; // Explicitly type the members variable
+ try {
+ members = await prisma.member.findMany(); // Fetch all members from the database
+ } catch (err) {
+ console.error("Error fetching members data:", err);
+ members = []; // Fallback to an empty array
+ }
+ return members;
+}
diff --git a/src/scripts/serveProjects.ts b/src/scripts/serveProjects.ts
new file mode 100644
index 0000000..e004695
--- /dev/null
+++ b/src/scripts/serveProjects.ts
@@ -0,0 +1,45 @@
+import { prisma } from "../lib/prisma";
+
+
+
+export async function serveProjects(): Promise<{ projects: any[], carouselList: any[] }> {
+ try {
+ const projects = await prisma.project.findMany({
+ include: {
+ tags: true,
+ },
+ });
+
+ const carouselProjects: any[] = [];
+
+ const nonCarouselProjects = projects.filter((project: typeof projects[0]) => {
+ const title = project.title.toLowerCase();
+
+ if (title.includes("carousel content")) {
+ const numberMatch = title.match(/carousel content #(\d+)/);
+ const carouselNumber = numberMatch ? parseInt(numberMatch[1], 10) : 0;
+ const heading = project.title.replace(/\(carousel content\)/i, '').trim();
+ carouselProjects.push({
+ ...project,
+ title: heading,
+ carouselNumber
+ });
+
+ return false;
+ }
+
+ return true;
+ });
+
+
+ const sortedCarouselProjects = carouselProjects.sort((a, b) => a.carouselNumber - b.carouselNumber);
+
+ return {
+ projects: nonCarouselProjects,
+ carouselList: sortedCarouselProjects
+ };
+ } catch (error) {
+ console.error("Error fetching projects and carousel list:", error);
+ throw error;
+ }
+}
diff --git a/src/scripts/serveTeamDescriptions.ts b/src/scripts/serveTeamDescriptions.ts
new file mode 100644
index 0000000..4dfa78b
--- /dev/null
+++ b/src/scripts/serveTeamDescriptions.ts
@@ -0,0 +1,40 @@
+import {prisma} from "../lib/prisma"
+
+// Define the structure of the team with tags included
+type TeamWithTags = {
+ name: string;
+ description: string | null;
+ tags: { name: string }[]; // Array of tag objects with 'name' field
+};
+
+type TeamDescriptions = {
+ name: string;
+ description?: string;
+ tags?: string[]; // Array of tag names
+};
+
+export async function serveTeamDescriptions(): Promise {
+ let teamDescriptions: TeamDescriptions[] = [];
+
+ try {
+
+ const descriptions = await prisma.teamDescription.findMany({
+ include: {
+ tags: true,
+ },
+ }) as TeamWithTags[];
+
+
+ teamDescriptions = descriptions.map((team) => ({
+ name: team.name,
+ description: team.description ?? undefined,
+ tags: team.tags?.map((tag) => tag.name) || [],
+ }));
+
+ } catch (err) {
+ console.error("Error fetching team descriptions:", err);
+ teamDescriptions = [];
+ }
+
+ return teamDescriptions;
+}
diff --git a/src/scripts/sortTeams.ts b/src/scripts/sortTeams.ts
index 708add8..fcb627f 100644
--- a/src/scripts/sortTeams.ts
+++ b/src/scripts/sortTeams.ts
@@ -1,10 +1,6 @@
-type MemberData = {
- team: string;
- desc: string;
- name: string;
- cover: string;
- url?: string;
-}
+import type { memberData } from "../types/memberData";
+
+
type TeamDetails = {
teamName: string;
@@ -12,12 +8,12 @@ type TeamDetails = {
teamId: string;
};
-export function sortMembersByTeam(members: MemberData[]) {
- const leadershipTeam: MemberData[] = [];
- const communicationTeam: MemberData[] = [];
+export function sortMembersByTeam(members: memberData[]) {
+ const leadershipTeam: memberData[] = [];
+ const communicationTeam: memberData[] = [];
// const projectsMap: { [projectName: string]: MemberData[] } = {};
- const teamsDict: { [team: string]: MemberData[] } = {};
- const projectsMap: { [projectName: string]: { teamDetails: TeamDetails; members: MemberData[] } } = {};
+ const teamsDict: { [team: string]: memberData[] } = {};
+ const projectsMap: { [projectName: string]: { teamDetails: TeamDetails; members: memberData[] } } = {};
let nextProjectId: number = 1; // Start ID counter at 0
members.forEach(member => {
@@ -30,7 +26,7 @@ export function sortMembersByTeam(members: MemberData[]) {
const projectName: string = member.team.replace("Projects: ", "");
if (!projectsMap[projectName]) {
projectsMap[projectName] = {
- teamDetails: { teamName: projectName, description: member.desc, teamId: "team" + nextProjectId.toString() },
+ teamDetails: { teamName: projectName, description: member.description, teamId: "team" + nextProjectId.toString() },
members: []
};
nextProjectId++;
diff --git a/src/scripts/updateHomepageDescriptions.ts b/src/scripts/updateHomepageDescriptions.ts
new file mode 100644
index 0000000..b263b59
--- /dev/null
+++ b/src/scripts/updateHomepageDescriptions.ts
@@ -0,0 +1,162 @@
+import { Client } from "@notionhq/client";
+import { fetchPageBlocks } from "./fetchPageBlocks.ts";
+import { getPage } from "./getPageDescriptions.ts";
+import axios from 'axios';
+import sharp from "sharp";
+import { supabase } from '../lib/supabaseClient';
+import { supabaseUrl } from '../lib/supabaseClient';
+import { prisma } from "../lib/prisma";
+
+// Type for descriptions
+type Description = {
+ heading: string;
+ subheadings: string[];
+ paragraphs: string[];
+ images: string[];
+};
+
+// Function to download image from URL
+async function downloadImage(url: string): Promise {
+ const response = await axios.get(url, { responseType: 'arraybuffer' });
+ return Buffer.from(response.data, 'binary');
+}
+
+// Function to upload image to Supabase Storage
+async function uploadImageToSupabase(imageBuffer: Buffer, filePath: string): Promise {
+ // Convert image to WebP format and compress it
+ const compressedImageBuffer = await sharp(imageBuffer)
+ .toFormat('webp', { quality: 35 })
+ .toBuffer();
+
+ // Check if the file already exists
+ const { data: existingFiles, error: listError } = await supabase.storage.from('images').list(filePath.split('/')[0]);
+
+ if (listError) {
+ throw new Error(`Failed to list files: ${listError.message}`);
+ }
+
+ const existingFileName = filePath.split('/').pop();
+ const existingFile = existingFiles.find(file => file.name === existingFileName);
+
+ // If the file already exists, remove it before uploading
+ if (existingFile) {
+ console.log(`Deleting existing image: ${existingFileName}`); // Log the deletion
+ const { error: deleteError } = await supabase.storage.from('images').remove([filePath]);
+ if (deleteError) {
+ throw new Error(`Failed to delete existing image: ${deleteError.message}`);
+ }
+ }
+
+ // Now upload the new image
+ const { data, error } = await supabase.storage.from('images').upload(filePath, compressedImageBuffer);
+
+ // If there's an error uploading, check if it's because it already exists
+ if (error) {
+ if (error.message.includes("already exists")) {
+ console.warn(`Image ${filePath} already exists. Skipping upload.`); // Warn if it already exists
+ return `${supabaseUrl}/storage/v1/object/public/images/${filePath}`;
+ }
+ throw new Error(`Failed to upload image: ${error.message}`);
+ }
+
+ // Return the public URL of the uploaded image
+ return `${supabaseUrl}/storage/v1/object/public/images/${filePath}`;
+}
+
+// Function to sanitize filenames
+function sanitizeFileName(fileName: string): string {
+ return fileName.replace(/[^a-z0-9-_.]/gi, '-'); // Replace invalid characters with hyphen
+}
+
+// Function to log messages
+function sendLog(controller: ReadableStreamDefaultController, message: string) {
+ try {
+ const logMessage = {
+ message,
+ timestamp: Date.now(),
+ };
+ controller.enqueue(`data: ${JSON.stringify(logMessage)}\n\n`);
+ } catch (error) {
+ console.error("Error sending log:", error);
+ }
+}
+
+// Update the image upload process in updateHomepageDescriptions
+export async function updateHomepageDescriptions(controller: ReadableStreamDefaultController): Promise {
+ const descriptions: Record = {};
+
+ const NOTION_TOKEN = process.env.NOTION_TOKEN || import.meta.env.NOTION_TOKEN;
+ const NOTION_HOMEPAGE_ID = process.env.NOTION_HOMEPAGE_ID || import.meta.env.NOTION_HOMEPAGE_ID;
+
+ if (!NOTION_TOKEN || !NOTION_HOMEPAGE_ID) throw new Error("Missing secret(s)");
+
+ const notion = new Client({ auth: NOTION_TOKEN });
+
+ try {
+ sendLog(controller, "Starting to retrieve homepage descriptions...");
+
+ const query = await notion.databases.query({
+ database_id: NOTION_HOMEPAGE_ID,
+ sorts: [{ property: 'Name', direction: 'ascending' }]
+ });
+
+ for (const page of query.results) {
+ if ('properties' in page) {
+ const nameProperty = page.properties.Name;
+ if (nameProperty.type === 'title' && Array.isArray(nameProperty.title) && nameProperty.title.length > 0) {
+ const title: string = nameProperty.title[0].plain_text;
+ const pageId: string = page.id;
+ console.log(`Processing homepage description: ${title}`); // Log the project being processed
+ sendLog(controller, `Processing homepage description: ${title}`);
+
+ const blocks = await fetchPageBlocks(notion, pageId);
+ const { subheadings, paragraphs, images } = await getPage(blocks);
+
+ // Process images: download and upload to Supabase
+ const uploadedImages: string[] = [];
+ for (const imageUrl of images) {
+ try {
+ const imageBuffer = await downloadImage(imageUrl); // Download image
+ const sanitizedTitle = sanitizeFileName(title); // Sanitize title for filename
+ const filePath = `homepage/${sanitizedTitle}/${imageUrl.split('/').pop()}`; // Generate file path
+ const uploadedImageUrl = await uploadImageToSupabase(imageBuffer, filePath); // Upload to Supabase
+ uploadedImages.push(uploadedImageUrl); // Store the new URL
+ sendLog(controller, `Uploaded image for ${title}: ${uploadedImageUrl}`);
+ } catch (error) {
+ sendLog(controller, `Error processing image for ${title}: ${(error as Error).message}`);
+ }
+ }
+
+ // Upsert the homepage description into the database
+ await prisma.homepageDescription.upsert({
+ where: { heading: title },
+ update: {
+ subheadings,
+ paragraphs,
+ images: uploadedImages, // Store the uploaded image URLs
+ },
+ create: {
+ heading: title,
+ subheadings,
+ paragraphs,
+ images: uploadedImages, // Store the uploaded image URLs
+ },
+ });
+
+ descriptions[title] = {
+ heading: title,
+ subheadings,
+ paragraphs,
+ images: uploadedImages, // Store the uploaded image URLs
+ };
+ sendLog(controller, `Upserted description for ${title}`);
+ }
+ }
+ }
+
+ sendLog(controller, "Homepage descriptions updated successfully.");
+ } catch (error) {
+ console.error("Error retrieving or processing homepage descriptions:", error);
+ sendLog(controller, `Error retrieving or processing homepage descriptions: ${(error as Error).message}`);
+ }
+}
diff --git a/src/scripts/updateMembers.ts b/src/scripts/updateMembers.ts
new file mode 100644
index 0000000..29b1199
--- /dev/null
+++ b/src/scripts/updateMembers.ts
@@ -0,0 +1,189 @@
+import axios from 'axios';
+import sharp from "sharp";
+import { Client } from "@notionhq/client";
+import { supabase } from '../lib/supabaseClient';
+import { supabaseUrl } from '../lib/supabaseClient';
+import type { memberRow } from "../types/memberRow";
+import { prisma } from "../lib/prisma";
+
+interface Member {
+ team: string;
+ name: string;
+ desc: string;
+ cover: string | null; // URL of the cover image
+}
+
+// Function to download image from URL
+async function downloadImage(url: string): Promise {
+ const response = await axios.get(url, { responseType: 'arraybuffer' });
+ return Buffer.from(response.data, 'binary');
+}
+
+// Function to upload image to Supabase Storage
+async function uploadImageToSupabase(imageBuffer: Buffer, filePath: string): Promise {
+ // Convert image to WebP format and compress it
+ const compressedImageBuffer = await sharp(imageBuffer)
+ .toFormat('webp', { quality: 35 })
+ .toBuffer();
+
+ // Check if the file already exists
+ const { data: existingFiles, error: listError } = await supabase.storage.from('images').list(filePath.split('/')[0]); // List files in the folder
+
+ if (listError) {
+ throw new Error(`Failed to list files: ${listError.message}`);
+ }
+
+ // If the file already exists, remove it before uploading
+ if (existingFiles.some(file => file.name === filePath.split('/')[1])) {
+ const { error: deleteError } = await supabase.storage.from('images').remove([filePath]);
+ if (deleteError) {
+ throw new Error(`Failed to delete existing image: ${deleteError.message}`);
+ }
+ }
+
+ // Now upload the new image
+ const { data, error } = await supabase.storage.from('images').upload(filePath, compressedImageBuffer);
+
+ if (error) {
+ throw new Error(`Failed to upload image: ${error.message}`);
+ }
+
+ // Return the public URL of the uploaded image
+ return `${supabaseUrl}/storage/v1/object/public/images/${filePath}`;
+}
+
+// Function to delete an image from Supabase Storage
+async function deleteImageFromSupabase(filePath: string): Promise {
+ const { error } = await supabase.storage.from('images').remove([filePath]);
+
+ if (error) {
+ console.error(`Failed to delete image: ${error.message}`);
+ }
+}
+
+// Main function to get members, update covers, and return the updated members data
+export async function updateMembers(controller: ReadableStreamDefaultController): Promise {
+ const NOTION_TOKEN = process.env.NOTION_TOKEN || import.meta.env.NOTION_TOKEN;
+ const NOTION_MEMBERS_ID = process.env.NOTION_MEMBERS_ID || import.meta.env.NOTION_MEMBERS_ID;
+
+ if (!NOTION_TOKEN || !NOTION_MEMBERS_ID) {
+ throw new Error("Missing secret(s)");
+ }
+
+ const notion = new Client({ auth: NOTION_TOKEN });
+
+ const query = await notion.databases.query({
+ database_id: NOTION_MEMBERS_ID,
+ sorts: [{
+ property: 'Name',
+ direction: 'ascending'
+ }]
+ });
+
+ const membersPages = query.results as memberRow[];
+ const members: Member[] = membersPages.map((row) => ({
+ team: row.properties.Team.rich_text[0]?.plain_text ?? "",
+ desc: row.properties.Description.rich_text[0]?.plain_text ?? "",
+ name: row.properties.Name.title[0]?.plain_text ?? "",
+ cover: row.cover?.type === "external" ? row.cover?.external.url : row.cover?.file.url ?? null
+ }));
+
+ // Process each member
+ for (const member of members) {
+ try {
+ if (member.cover) {
+ const imageBuffer = await downloadImage(member.cover); // Download image
+ const filePath = `members/${member.team}/${member.name.replace(/\s+/g, '-')}.webp`; // Generate file path with .webp extension
+ member.cover = await uploadImageToSupabase(imageBuffer, filePath); // Upload to Supabase and get new URL
+ }
+
+ // Check if the member already exists based on both name and team
+ const existingMember = await prisma.member.findFirst({
+ where: {
+ name: member.name,
+ team: member.team
+ }
+ });
+
+ if (existingMember) {
+ // Store the current cover URL before updating
+ const currentCover = existingMember.cover;
+
+ // Update existing member
+ await prisma.member.update({
+ where: { id: existingMember.id },
+ data: {
+ description: member.desc,
+ cover: member.cover // Store the Supabase URL
+ }
+ });
+ console.log(`Member ${member.name} updated in the database.`);
+
+ // Check if the cover URL has changed
+ if (currentCover && currentCover !== member.cover) {
+ const oldFilePath = `members/${existingMember.team}/${existingMember.name.replace(/\s+/g, '-')}.webp`; // Generate the old file path
+ await deleteImageFromSupabase(oldFilePath); // Delete old image
+ }
+ } else {
+ // Create a new member
+ await prisma.member.create({
+ data: {
+ team: member.team,
+ name: member.name,
+ description: member.desc,
+ cover: member.cover // Store the Supabase URL
+ }
+ });
+ console.log(`Member ${member.name} saved to the database.`);
+ }
+
+ // Send success log for each member processed
+ sendLog(controller, `Processed member: ${member.name}`);
+
+ } catch (error) {
+ // Type assertion to ensure 'error' is treated as an Error
+ const errorMessage = (error as Error).message || 'Unknown error occurred';
+ // Send error log for member processing
+ sendLog(controller, `Error processing member ${member.name}: ${errorMessage}`);
+ }
+ }
+
+ // Clean up members that are in the database but not in the Notion query results
+ const existingMembers = await prisma.member.findMany();
+ const memberNamesAndTeams = members.map(member => ({ name: member.name, team: member.team }));
+
+ for (const existingMember of existingMembers) {
+ const existsInNotion = memberNamesAndTeams.some(
+ member => member.name === existingMember.name && member.team === existingMember.team
+ );
+
+ if (!existsInNotion) {
+ if (existingMember.cover) {
+ const filePath = `members/${existingMember.team}/${existingMember.name.replace(/\s+/g, '-')}.webp`; // Generate the file path
+ await deleteImageFromSupabase(filePath); // Delete image
+ }
+
+ await prisma.member.delete({
+ where: { id: existingMember.id }
+ });
+ console.log(`Deleted member ${existingMember.name} from the database.`);
+ }
+ }
+
+ console.log('All members processed.');
+
+ return members;
+}
+
+// Function to send log messages back to the client
+function sendLog(controller: ReadableStreamDefaultController, message: string) {
+ try {
+ const logMessage = {
+ message,
+ timestamp: Date.now()
+ };
+ controller.enqueue(new TextEncoder().encode(`data: ${JSON.stringify(logMessage)}\n\n`));
+ } catch (error) {
+ console.error("Error sending log:", error);
+ }
+}
diff --git a/src/scripts/updateProjects.ts b/src/scripts/updateProjects.ts
new file mode 100644
index 0000000..1568eaa
--- /dev/null
+++ b/src/scripts/updateProjects.ts
@@ -0,0 +1,171 @@
+import { Client } from "@notionhq/client";
+import type { projectRow } from '../types/projectRow.ts';
+import axios from 'axios';
+import sharp from "sharp";
+import { supabase } from '../lib/supabaseClient';
+import { supabaseUrl } from '../lib/supabaseClient';
+import { prisma } from "../lib/prisma.ts";
+import type { APIRoute } from 'astro';
+
+// Function to sanitize filenames
+function sanitizeFileName(fileName: string): string {
+ return fileName.replace(/[^a-z0-9-_.]/gi, '-'); // Replace invalid characters with hyphen
+}
+
+// Function to download image from URL
+async function downloadImage(url: string): Promise {
+ const response = await axios.get(url, { responseType: 'arraybuffer' });
+ return Buffer.from(response.data, 'binary');
+}
+
+// Function to delete image from Supabase Storage
+async function deleteImageFromSupabase(filePath: string): Promise {
+ const { error } = await supabase.storage.from('images').remove([filePath]);
+
+ if (error) {
+ console.error(`Failed to delete image: ${error.message}`);
+ }
+}
+
+// Function to upload image to Supabase Storage
+async function uploadImageToSupabase(imageBuffer: Buffer, filePath: string): Promise {
+ // Convert image to WebP format and compress it
+ const compressedImageBuffer = await sharp(imageBuffer)
+ .toFormat('webp', { quality: 30 })
+ .toBuffer();
+
+ // Attempt to delete the existing image first
+ await deleteImageFromSupabase(filePath);
+
+ // Upload the new image to Supabase
+ const { data, error } = await supabase.storage.from('images').upload(filePath, compressedImageBuffer);
+
+ if (error) {
+ throw new Error(`Failed to upload image: ${error.message}`);
+ }
+
+ // Return the public URL of the uploaded image
+ return `${supabaseUrl}/storage/v1/object/public/images/${filePath}`;
+}
+
+// Function to log messages
+function sendLog(controller: ReadableStreamDefaultController, message: string) {
+ try {
+ const logMessage = {
+ message,
+ timestamp: Date.now(),
+ };
+ controller.enqueue(`data: ${JSON.stringify(logMessage)}\n\n`);
+ } catch (error) {
+ console.error("Error sending log:", error);
+ }
+}
+
+// Update the updateProjects function
+export async function updateProjects(controller: ReadableStreamDefaultController): Promise {
+ const NOTION_TOKEN = process.env.NOTION_TOKEN || import.meta.env.NOTION_TOKEN;
+ const NOTION_PROJECTS_ID = process.env.NOTION_PROJECTS_ID || import.meta.env.NOTION_PROJECTS_ID;
+
+ if (!NOTION_TOKEN || !NOTION_PROJECTS_ID) {
+ throw new Error("Missing secret(s)");
+ }
+
+ const notion = new Client({ auth: NOTION_TOKEN });
+
+ try {
+ sendLog(controller, "Starting to retrieve projects from Notion...");
+
+ const query = await notion.databases.query({
+ database_id: NOTION_PROJECTS_ID,
+ sorts: [{ property: 'Date', direction: 'descending' }]
+ });
+
+ const projectsRows = query.results as projectRow[];
+
+ const projectPromises = projectsRows.map(async (row) => {
+ const title = row.properties.Name.title[0] ? row.properties.Name.title[0].plain_text : "";
+ const dateStr = row.properties.Date.date ? row.properties.Date.date.start : "";
+ const date = dateStr ? new Date(dateStr) : null; // Convert string to Date object
+ const description = row.properties.Description.rich_text[0] ? row.properties.Description.rich_text[0].plain_text : "";
+ const coverUrl = row.cover?.type === "external" ? row.cover?.external.url : row.cover?.file.url ?? "";
+ const team = row.properties.Team.rich_text[0] ? row.properties.Team.rich_text[0].plain_text : "";
+ const tags = row.properties.Tags?.multi_select.map((tag) => tag.name) || []; // Ensure tags is always an array
+ const id = row.id || ""; // Ensure the Notion ID is being used
+
+ // Sanitize the title for cover path
+ const sanitizedTitle = sanitizeFileName(title);
+ let coverPath = '';
+
+ // If a cover URL exists, download and upload the image to Supabase
+ if (coverUrl) {
+ try {
+ sendLog(controller, `Downloading image for project: ${title}`);
+ const imageBuffer = await downloadImage(coverUrl); // Download image
+ coverPath = await uploadImageToSupabase(imageBuffer, `projects/${sanitizedTitle}/cover.webp`); // Upload to Supabase
+ sendLog(controller, `Uploaded cover image for project: ${title}`);
+ } catch (error) {
+ sendLog(controller, `Error processing cover image for project ${title}: ${(error as Error).message}`);
+ }
+ }
+
+ return {
+ id, // Use Notion ID as unique identifier
+ title,
+ date,
+ description,
+ cover: coverPath, // Store the Supabase URL
+ team,
+ tags,
+ };
+ });
+
+ // Await all async operations
+ const projects = await Promise.all(projectPromises);
+
+ // Store projects in the Prisma database
+ for (const project of projects) {
+ // Check if the project already exists in the database by ID
+ const existingProject = await prisma.project.findUnique({
+ where: { id: project.id },
+ });
+
+ // If project exists, update it, else create a new one
+ await prisma.project.upsert({
+ where: { id: project.id },
+ create: {
+ id: project.id, // Ensure the ID is passed during creation
+ title: project.title,
+ date: project.date,
+ description: project.description,
+ cover: project.cover,
+ team: project.team,
+ tags: {
+ connectOrCreate: project.tags.map(tag => ({
+ where: { name: tag },
+ create: { name: tag },
+ })),
+ },
+ },
+ update: {
+ title: project.title,
+ date: project.date,
+ description: project.description,
+ cover: project.cover,
+ team: project.team,
+ tags: {
+ set: project.tags.map(tag => ({
+ name: tag,
+ })),
+ },
+ },
+ });
+
+ sendLog(controller, `Project ${project.title} upserted in the database.`);
+ }
+
+ sendLog(controller, "Projects data uploaded to Prisma database.");
+ } catch (error) {
+ console.error("Error retrieving or processing projects:", error);
+ sendLog(controller, `Error retrieving or processing projects: ${(error as Error).message}`);
+ }
+}
diff --git a/src/scripts/updateTeamDescription.ts b/src/scripts/updateTeamDescription.ts
new file mode 100644
index 0000000..44b5d3f
--- /dev/null
+++ b/src/scripts/updateTeamDescription.ts
@@ -0,0 +1,99 @@
+import { Client } from "@notionhq/client";
+import type { teamRow } from "../types/teamRow";
+import { prisma } from "../lib/prisma";
+
+// Type for team descriptions
+type TeamDescriptions = {
+ name: string;
+ description?: string;
+ tags?: string[];
+};
+
+// Function to log messages
+function sendLog(controller: ReadableStreamDefaultController, message: string) {
+ try {
+ const logMessage = {
+ message,
+ timestamp: Date.now(),
+ };
+ controller.enqueue(`data: ${JSON.stringify(logMessage)}\n\n`);
+ } catch (error) {
+ console.error("Error sending log:", error);
+ }
+}
+
+// Update the teams descriptions
+export async function updateTeamsDescriptions(controller: ReadableStreamDefaultController): Promise {
+ const NOTION_TOKEN = process.env.NOTION_TOKEN || import.meta.env.NOTION_TOKEN;
+ const NOTION_TEAMS_ID = process.env.NOTION_TEAMS_ID || import.meta.env.NOTION_TEAMS_ID;
+
+ if (!NOTION_TOKEN || !NOTION_TEAMS_ID) throw new Error("Missing secret(s)");
+
+ const notion = new Client({ auth: NOTION_TOKEN });
+
+ try {
+ sendLog(controller, "Starting to retrieve team descriptions...");
+
+ const query = await notion.databases.query({
+ database_id: NOTION_TEAMS_ID,
+ sorts: [{
+ property: 'Name',
+ direction: 'ascending'
+ }]
+ });
+
+ const teampages = query.results as teamRow[];
+
+ const teams: TeamDescriptions[] = teampages.map((row) => {
+ return {
+ name: row.properties.Name.title[0] ? row.properties.Name.title[0].plain_text : "",
+ description: row.properties.Description.rich_text[0] ? row.properties.Description.rich_text[0].plain_text : "",
+ tags: row.properties.Tags.multi_select?.map(tag => tag.name) || [], // Use optional chaining and provide default
+ };
+ });
+
+ // Store teams in the Prisma database
+ for (const team of teams) {
+ try {
+ // Ensure tags is an array to avoid 'undefined' error
+ const tagConnections = await Promise.all(
+ (team.tags || []).map(async (tagName) => { // Use a fallback to an empty array if tags is undefined
+ const tag = await prisma.teamTag.upsert({
+ where: { name: tagName },
+ create: { name: tagName },
+ update: {},
+ });
+ return { id: tag.id }; // Return the tag id for connecting
+ })
+ );
+
+ // Upsert the team description
+ await prisma.teamDescription.upsert({
+ where: { name: team.name },
+ create: {
+ name: team.name,
+ description: team.description,
+ tags: {
+ connect: tagConnections, // Connect the tags
+ },
+ },
+ update: {
+ description: team.description,
+ tags: {
+ set: tagConnections, // Update the tags
+ },
+ },
+ });
+
+ sendLog(controller, `Upserted team description for: ${team.name}`);
+ } catch (error) {
+ sendLog(controller, `Error processing team ${team.name}: ${(error as Error).message}`);
+ }
+ }
+
+ sendLog(controller, "Team descriptions uploaded to Prisma database successfully.");
+ } catch (error) {
+ console.error("Error retrieving or processing team descriptions:", error);
+ sendLog(controller, `Error retrieving or processing team descriptions: ${(error as Error).message}`);
+ }
+}
diff --git a/src/styles/error404.css b/src/styles/error404.css
new file mode 100644
index 0000000..fd336a2
--- /dev/null
+++ b/src/styles/error404.css
@@ -0,0 +1,101 @@
+.error404-wrapper {
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+ text-align: center;
+ padding: 0 20px;
+ overflow: hidden;
+}
+
+.content-wrapper {
+ position: relative;
+ overflow: hidden;
+ margin-top: -100px;
+}
+
+.image-wrapper {
+ width: 35%;
+ height: auto;
+ text-align: center;
+ padding-top: 100px;
+}
+
+h1 {
+ font-size: 10rem;
+ font-weight: 900;
+ color: var(--YOO-Green-Primary);
+}
+
+.error-message {
+ font-size: 3rem;
+ font-weight: 800;
+ margin-bottom: 2rem;
+ color: var(--YOO-Green-Primary);
+ max-width: 40vw;
+}
+
+.home-button {
+ padding: 15px 40px;
+ font-size: 2rem;
+ background: var(--YOO-Green-Light);
+ border-radius: 20px;
+ color: 142601;
+ font-weight: 700;
+ line-height: 1;
+ text-decoration: none;
+ transition: all 400ms;
+ box-shadow: 4px 4px 6px 0px rgba(110, 172, 109, 0.15);
+ cursor: pointer;
+}
+
+.home-button:hover {
+ opacity: 0.9;
+ box-shadow: 4px 4px 8px -2px hsl(188deg 100% 16% / 0.1), 12px 12px 18px -3px hsl(188deg 100% 16% / 0.1);
+ transform: translate(-3px, -3px);
+ transition: all 200ms;
+}
+
+.home-button-wrapper {
+ margin-bottom: 2.5rem;
+}
+
+/* Media Queries for Mobile */
+@media (max-width: 768px) {
+ .image-wrapper {
+ width: 60%;
+ }
+
+ h1 {
+ font-size: 5rem;
+ }
+
+ .error-message {
+ font-size: 2rem;
+ max-width: 80vw;
+ }
+
+ .home-button {
+ font-size: 1.5rem;
+ padding: 10px 20px;
+ }
+}
+
+@media (max-width: 480px) {
+ .image-wrapper {
+ width: 80%;
+ }
+
+ h1 {
+ font-size: 4rem;
+ }
+
+ .error-message {
+ font-size: 1.5rem;
+ }
+
+ .home-button {
+ font-size: 1.2rem;
+ padding: 8px 16px;
+ }
+}
diff --git a/src/styles/index.css b/src/styles/index.css
index c9011ef..a5fcfbb 100644
--- a/src/styles/index.css
+++ b/src/styles/index.css
@@ -10,6 +10,14 @@
pointer-events: none;
}
+.index-wrapper{
+ position: relative;
+ overflow: hidden;
+
+ margin-top: -100px;
+ padding-top: 100px;
+}
+
.hero{
display: flex;
flex-direction: column;
diff --git a/src/styles/members.css b/src/styles/members.css
index e377925..33a466d 100644
--- a/src/styles/members.css
+++ b/src/styles/members.css
@@ -349,7 +349,7 @@ html {
/* grid-template-columns: 1fr; */
margin: 0;
width: 100%;
-
+ padding-top: 30px;
display: flex;
flex-wrap: wrap;
justify-content: center;
@@ -378,5 +378,126 @@ html {
align-items: center;
}
+ /* TeamDropdown Styles */
+
+.menu-container {
+ position: relative;
+ display: inline-block;
+ width: 100%;
+ text-align: left;
+}
+
+.menu-button {
+ display: inline-flex;
+ justify-content: space-between;
+ width: 100%;
+ padding: 0.5rem 1rem;
+ font-size: 0.875rem;
+ font-weight: 500;
+ color: #4a5568;
+ background-color: #edf2f7;
+ border-radius: 0.375rem;
+ cursor: pointer;
+}
+
+.menu-button:hover {
+ background-color: #e2e8f0;
+}
+
+.menu-icon {
+ width: 1.25rem;
+ height: 1.25rem;
+ color: #a0aec0;
+}
+
+.menu-items {
+ position: absolute;
+ margin-top: 0.5rem;
+ width: 100%;
+ border-radius: 0.375rem;
+ box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
+ background-color: #fff;
+ z-index: 10;
+ border: 1px solid rgba(0, 0, 0, 0.05);
+ outline: none;
+}
+
+.menu-item-wrapper {
+ padding: 0.25rem 0;
+}
+
+.menu-item {
+ display: block;
+ width: 100%;
+ padding: 0.5rem 1rem;
+ font-size: 0.875rem;
+ color: #4a5568;
+ text-align: left;
+ background-color: transparent;
+}
+
+ /* Show the dropdown only on mobile */
+ .dropdown-mobile-only {
+ display: block;
+ }
+
+ /* Hide buttons on mobile */
+ .nav {
+ display: none;
+ }
+
+ /* Initially hide all team sections on mobile */
+ .team-section {
+ display: none;
+ }
+
+ /* Ensure the grid displays 2 members per row on mobile */
+ .right1, .left2 {
+ display: grid;
+ grid-template-columns: repeat(2, 1fr);
+ grid-gap: 10px;
+ justify-content: center;
+ margin: 0;
+ width: 100%;
+ }
+
+ .person-card {
+ width: 100%;
+ margin: 0 auto;
+ text-align: center;
+ }
+
+ .img-wrapper {
+ width: 100px;
+ height: 100px;
+ margin: 0 auto;
+ }
+
+ .img-wrapper img {
+ border-radius: 50%;
+ width: 100%;
+ height: 100%;
+ object-fit: cover;
+ }
+
+}
+
+/* Show buttons on desktop */
+@media (min-width: 801px) {
+ /* Hide the dropdown on desktop */
+ .dropdown-mobile-only {
+ display: none;
+ }
+
+ /* Show buttons on desktop */
+ .nav {
+ display: flex;
+ justify-content: space-evenly;
+ }
+
+ /* Show all team sections on desktop */
+ .team-section {
+ display: block;
+ }
+}
-}
\ No newline at end of file
diff --git a/src/styles/refresh.css b/src/styles/refresh.css
new file mode 100644
index 0000000..57fe095
--- /dev/null
+++ b/src/styles/refresh.css
@@ -0,0 +1,121 @@
+/* loginForm.css */
+
+html, body {
+ margin: 0;
+ padding: 0;
+ box-sizing: border-box;
+ width: 100%;
+ height: 100%;
+ font-family: "Overpass", sans-serif;
+ }
+
+.login-container {
+ width: 100dvw;
+ height: 100dvh;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ background-color: #C8E4AE;
+ overflow: hidden;
+ }
+
+ .login-form-wrapper {
+ display: flex;
+ flex-direction: column;
+ }
+
+ .login-form {
+ margin-bottom: 10px;
+ }
+
+ .password-label {
+ margin-right: 10px;
+ font-weight: 600;
+ }
+
+ .password-input {
+ border: 1px solid #ccc;
+ border-radius: 8px;
+ padding: 8px;
+ margin-right: 10px;
+ }
+
+ .login-button {
+ background-color: #294E03;
+ padding: 8px 15px;
+ border-radius: 999px;
+ color: white;
+ font-weight: 600;
+ }
+
+ .error-message {
+ color: red;
+ }
+
+ .refresh-section {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ }
+
+ .logged-in-message {
+ font-size: 1.25rem;
+ font-weight: bold;
+ margin-bottom: 10px;
+ }
+
+ .change-password-form {
+ display: flex;
+ align-items: center;
+ margin-bottom: 10px;
+ }
+
+ .change-password-button {
+ background-color: #294E03;
+ padding: 8px 15px;
+ border-radius: 999px;
+ color: white;
+ font-weight: 600;
+ }
+
+ .password-changed-message {
+ color: #28A745;
+ font-weight: bold;
+ margin-left: 10px;
+ }
+
+ .refresh-button {
+ background-color: #294E03;
+ padding: 8px 15px;
+ border-radius: 999px;
+ color: white;
+ font-weight: 600;
+ margin-top: 10px;
+ }
+
+ .logs-container {
+ margin-top: 20px;
+ width: 100%;
+ max-width: 300px;
+ }
+
+ .logs-title {
+ font-size: 1.125rem;
+ font-weight: bold;
+ margin-bottom: 10px;
+ }
+
+ .logs-list {
+ list-style-type: disc;
+ padding-left: 20px;
+ max-height: 150px;
+ overflow-y: auto;
+ background-color: #F0F0F0;
+ padding: 10px;
+ border-radius: 8px;
+ }
+
+ .log-message {
+ font-size: 0.875rem;
+ }
+
\ No newline at end of file
diff --git a/src/types/homepageDescriptions.ts b/src/types/homepageDescriptions.ts
new file mode 100644
index 0000000..07582fa
--- /dev/null
+++ b/src/types/homepageDescriptions.ts
@@ -0,0 +1,9 @@
+
+export interface HomepageDescription {
+ id: number;
+ heading: string;
+ subheadings: string[];
+ paragraphs: string[];
+ images: string[];
+
+}
diff --git a/src/types/memberData.ts b/src/types/memberData.ts
index 0127bd9..06fa92f 100644
--- a/src/types/memberData.ts
+++ b/src/types/memberData.ts
@@ -1,7 +1,9 @@
-export type memberData = {
- team: string;
- desc: string;
- name: string;
- cover: string;
- url?: string;
- }
\ No newline at end of file
+// types/memberData.ts
+export interface memberData {
+ id: number;
+ name: string;
+ team: string;
+ description: string;
+ cover: string | null ;
+ createdAt: Date;
+}
diff --git a/src/types/teamDescriptions.ts b/src/types/teamDescriptions.ts
new file mode 100644
index 0000000..2a97f11
--- /dev/null
+++ b/src/types/teamDescriptions.ts
@@ -0,0 +1,5 @@
+export type TeamDescriptions = {
+ name: string;
+ description?: string;
+ tags?: string[];
+ }
\ No newline at end of file
diff --git a/src/types/teamRow.ts b/src/types/teamRow.ts
index fe3ce87..9d821b4 100644
--- a/src/types/teamRow.ts
+++ b/src/types/teamRow.ts
@@ -3,33 +3,41 @@ import type { rich_text } from "./richText";
import type { cover } from "./cover";
export type teamRow = {
- object: string,
- id: string,
- created_time: string,
- last_edited_time: string,
- created_by: { object: string, id: string },
- last_edited_by: { object: string, id: string },
- cover: cover,
- icon: null,
+ object: string;
+ id: string;
+ created_time: string;
+ last_edited_time: string;
+ created_by: { object: string; id: string };
+ last_edited_by: { object: string; id: string };
+ cover: cover;
+ icon: null;
parent: {
- type: string,
- database_id: string
- },
- archived: boolean,
- in_trash: boolean,
+ type: string;
+ database_id: string;
+ };
+ archived: boolean;
+ in_trash: boolean;
properties: {
- Name: { id: string, type: string, title: rich_text[] }
- Tags: { id: string, type: string, select:
- {
- id: string,
- name: string,
- color: string
- }},
- Description: { id: string, type: string, rich_text: rich_text[] },
- },
- url: string,
- public_url: string,
- title: Array,
- description: Array,
- is_inline: boolean,
- };
\ No newline at end of file
+ Name: { id: string; type: string; title: rich_text[] };
+ Tags: {
+ id: string;
+ type: "multi_select" | "select"; // Allow either multi_select or select
+ multi_select?: { // Define multi_select structure
+ id: string;
+ name: string;
+ color: string;
+ }[];
+ select?: { // Define select structure
+ id: string;
+ name: string;
+ color: string;
+ } | null; // Allow select to be null
+ };
+ Description: { id: string; type: string; rich_text: rich_text[] };
+ };
+ url: string;
+ public_url: string;
+ title: Array;
+ description: Array;
+ is_inline: boolean;
+};
diff --git a/test/getHomepageDescriptions.test.ts b/test/getHomepageDescriptions.test.ts
new file mode 100644
index 0000000..a8769ec
--- /dev/null
+++ b/test/getHomepageDescriptions.test.ts
@@ -0,0 +1,65 @@
+import {describe, it, expect, vi, test} from "vitest";
+import { getHomepageDescriptions } from "../src/scripts/getHomepageDescriptions";
+import { getAnton } from "../src/scripts/getAnton";
+import { fetchPageBlocks } from "../src/scripts/fetchPageBlocks";
+
+vi.mock("../src/scripts/getAnton");
+vi.mock("../src/scripts/fetchPageBlocks");
+
+describe("getHomepageDescriptions", () => {
+ it("should return a map of homepage descriptions", async () => {
+ // Mock data
+ const mockPageBlocks = [{}, {}];
+ const mockAnton = "Sample description";
+
+ const mockQueryResults = [
+ {
+ id: "page1",
+ properties: {
+ Name: {
+ title: [{ plain_text: "Page 1" }]
+ }
+ }
+ },
+ {
+ id: "page2",
+ properties: {
+ Name: {
+ title: [{ plain_text: "Page 2" }]
+ }
+ }
+ }
+ ];
+
+ // Mock fetchPageBlocks and getAnton
+ (fetchPageBlocks as jest.Mock).mockResolvedValue(mockPageBlocks);
+ (getAnton as jest.Mock).mockResolvedValue(mockAnton);
+
+ // Mock Notion client
+ vi.stubEnv("NOTION_TOKEN", "test-token");
+ vi.stubEnv("NOTION_MEMBERS_ID", "test-database-id");
+
+ const notionClientMock = {
+ databases: {
+ query: vi.fn().mockResolvedValue({ results: mockQueryResults }),
+ },
+ };
+
+ const { Client } = await import("@notionhq/client");
+ (Client as jest.Mock).mockReturnValue(notionClientMock);
+
+ const descriptions = await getHomepageDescriptions();
+
+ expect(descriptions.size).toBe(2);
+ expect(descriptions.get("Page 1")).toBe("Sample description");
+ expect(descriptions.get("Page 2")).toBe("Sample description");
+ });
+});
+
+test ("getAnton", async () => {
+ const descriptions = await getHomepageDescriptions();
+
+ expect(descriptions.size).toBe(2);
+ expect(descriptions.get("Page 1")).toBe("Sample description");
+ expect(descriptions.get("Page 2")).toBe("Sample description");
+});
\ No newline at end of file
diff --git a/test/getMembers.test.ts b/test/getMembers.test.ts
deleted file mode 100644
index a4da317..0000000
--- a/test/getMembers.test.ts
+++ /dev/null
@@ -1,36 +0,0 @@
-import { getMembers } from "../src/scripts/getMembers";
-import { assert, expect, test } from 'vitest';
-
-let members = await getMembers();
-
-const expected_members = [
- { team: '', desc: '', name: '✨ andrew ✨' },
- { team: '', desc: '', name: '⭐Kimberley⭐🐮' },
- { team: '', desc: '', name: 'Anna' },
- { team: '1', desc: 'Cool dude', name: 'Anton' },
- { team: '', desc: 'yes', name: 'Becky Pog' },
- { team: '', desc: '', name: 'Chris' },
- { team: '', desc: '', name: 'Emmanuel' },
- { team: '', desc: '', name: 'Owen' },
- { team: '', desc: '', name: 'Yash the mekanic' }
- ]
-
-test("Members exists", () => {
- expect(members).toBeDefined()
-})
-
-test("Members contains Anton", () => {
- expect(members).toEqual(expect.arrayContaining([
- expect.objectContaining({ team: '1', desc: 'Cool dude', name: 'Anton' })
- ]));
-});
-
-test("Members contains Chris", () => {
- expect(members).toEqual(expect.arrayContaining([
- expect.objectContaining({ team: '', desc: '', name: 'Chris' })
- ]));
-});
-
-test("Members has expected output", () => {
- expect(members).toEqual(expected_members)
-})
\ No newline at end of file
diff --git a/tsconfig.json b/tsconfig.json
index 032ad64..3e7076c 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -2,6 +2,12 @@
"extends": "astro/tsconfigs/strict",
"compilerOptions": {
"jsx": "react-jsx",
- "jsxImportSource": "react"
+ "jsxImportSource": "react",
+ "moduleResolution": "node",
+ "esModuleInterop": true,
+ "strict": true,
+ "verbatimModuleSyntax": true,
+ "isolatedModules": true
+
}
}
\ No newline at end of file
diff --git a/yarn.lock b/yarn.lock
index 9dc32e5..9f8bf34 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -15,18 +15,17 @@
"@jridgewell/gen-mapping" "^0.3.0"
"@jridgewell/trace-mapping" "^0.3.9"
-"@astrojs/check@^0.5.5":
- version "0.5.5"
- resolved "https://registry.npmjs.org/@astrojs/check/-/check-0.5.5.tgz"
- integrity sha512-05LjyUB14Cv2mkLNqY4r2igI2eu0bq/HcKCfFNIoBPLyNW7VUDr9tciD9VJXXT3s0e6JHneIs6bQW5ipjmaRcw==
+"@astrojs/check@^0.9.4":
+ version "0.9.4"
+ resolved "https://registry.npmjs.org/@astrojs/check/-/check-0.9.4.tgz"
+ integrity sha512-IOheHwCtpUfvogHHsvu0AbeRZEnjJg3MopdLddkJE70mULItS/Vh37BHcI00mcOJcH1vhD3odbpvWokpxam7xA==
dependencies:
- "@astrojs/language-server" "^2.7.5"
- chokidar "^3.5.3"
- fast-glob "^3.3.1"
+ "@astrojs/language-server" "^2.15.0"
+ chokidar "^4.0.1"
kleur "^4.1.5"
yargs "^17.7.2"
-"@astrojs/compiler@^2.10.3", "@astrojs/compiler@^2.4.0":
+"@astrojs/compiler@^2.10.3":
version "2.10.3"
resolved "https://registry.npmjs.org/@astrojs/compiler/-/compiler-2.10.3.tgz"
integrity sha512-bL/O7YBxsFt55YHU021oL+xz+B/9HvGNId3F9xURN16aeqDK9juHGktdkCSXz+U4nqFACq6ZFvWomOzhV+zfPw==
@@ -36,58 +35,60 @@
resolved "https://registry.npmjs.org/@astrojs/internal-helpers/-/internal-helpers-0.4.1.tgz"
integrity sha512-bMf9jFihO8YP940uD70SI/RDzIhUHJAolWVcO1v5PUivxGKvfLZTLTVVxEYzGYyPsA3ivdLNqMnL5VgmQySa+g==
-"@astrojs/language-server@^2.7.5":
- version "2.7.5"
- resolved "https://registry.npmjs.org/@astrojs/language-server/-/language-server-2.7.5.tgz"
- integrity sha512-iMfZ3UaqTgIL+z/eUDOppRa1bGUAteWRihbWq5mGAgvr/hu384ZXUKJcqV3BBux0MBsRXwjxzrC2dJu9IpAaoA==
+"@astrojs/language-server@^2.15.0":
+ version "2.15.0"
+ resolved "https://registry.npmjs.org/@astrojs/language-server/-/language-server-2.15.0.tgz"
+ integrity sha512-wJHSjGApm5X8Rg1GvkevoatZBfvaFizY4kCPvuSYgs3jGCobuY3KstJGKC1yNLsRJlDweHruP+J54iKn9vEKoA==
dependencies:
- "@astrojs/compiler" "^2.4.0"
+ "@astrojs/compiler" "^2.10.3"
+ "@astrojs/yaml2ts" "^0.2.1"
"@jridgewell/sourcemap-codec" "^1.4.15"
- "@volar/kit" "~2.0.4"
- "@volar/language-core" "~2.0.4"
- "@volar/language-server" "~2.0.4"
- "@volar/language-service" "~2.0.4"
- "@volar/typescript" "~2.0.4"
+ "@volar/kit" "~2.4.5"
+ "@volar/language-core" "~2.4.5"
+ "@volar/language-server" "~2.4.5"
+ "@volar/language-service" "~2.4.5"
fast-glob "^3.2.12"
- volar-service-css "0.0.30"
- volar-service-emmet "0.0.30"
- volar-service-html "0.0.30"
- volar-service-prettier "0.0.30"
- volar-service-typescript "0.0.30"
- volar-service-typescript-twoslash-queries "0.0.30"
- vscode-html-languageservice "^5.1.2"
+ muggle-string "^0.4.1"
+ volar-service-css "0.0.61"
+ volar-service-emmet "0.0.61"
+ volar-service-html "0.0.61"
+ volar-service-prettier "0.0.61"
+ volar-service-typescript "0.0.61"
+ volar-service-typescript-twoslash-queries "0.0.61"
+ volar-service-yaml "0.0.61"
+ vscode-html-languageservice "^5.2.0"
vscode-uri "^3.0.8"
-"@astrojs/markdown-remark@5.2.0":
- version "5.2.0"
- resolved "https://registry.npmjs.org/@astrojs/markdown-remark/-/markdown-remark-5.2.0.tgz"
- integrity sha512-vWGM24KZXz11jR3JO+oqYU3T2qpuOi4uGivJ9SQLCAI01+vEkHC60YJMRvHPc+hwd60F7euNs1PeOEixIIiNQw==
+"@astrojs/markdown-remark@5.3.0":
+ version "5.3.0"
+ resolved "https://registry.npmjs.org/@astrojs/markdown-remark/-/markdown-remark-5.3.0.tgz"
+ integrity sha512-r0Ikqr0e6ozPb5bvhup1qdWnSPUvQu6tub4ZLYaKyG50BXZ0ej6FhGz3GpChKpH7kglRFPObJd/bDyf2VM9pkg==
dependencies:
"@astrojs/prism" "3.1.0"
github-slugger "^2.0.0"
- hast-util-from-html "^2.0.1"
+ hast-util-from-html "^2.0.3"
hast-util-to-text "^4.0.2"
import-meta-resolve "^4.1.0"
mdast-util-definitions "^6.0.0"
rehype-raw "^7.0.0"
- rehype-stringify "^10.0.0"
+ rehype-stringify "^10.0.1"
remark-gfm "^4.0.0"
remark-parse "^11.0.0"
- remark-rehype "^11.1.0"
+ remark-rehype "^11.1.1"
remark-smartypants "^3.0.2"
- shiki "^1.10.3"
+ shiki "^1.22.0"
unified "^11.0.5"
unist-util-remove-position "^5.0.0"
unist-util-visit "^5.0.0"
unist-util-visit-parents "^6.0.1"
- vfile "^6.0.2"
+ vfile "^6.0.3"
-"@astrojs/node@^8.2.0":
- version "8.3.3"
- resolved "https://registry.npmjs.org/@astrojs/node/-/node-8.3.3.tgz"
- integrity sha512-idrKhnnPSi0ABV+PCQsRQqVNwpOvVDF/+fkwcIiE8sr9J8EMvW9g/oyAt8T4X2OBJ8FUzYPL8klfCdG7r0eB5g==
+"@astrojs/node@^8.3.4":
+ version "8.3.4"
+ resolved "https://registry.npmjs.org/@astrojs/node/-/node-8.3.4.tgz"
+ integrity sha512-xzQs39goN7xh9np9rypGmbgZj3AmmjNxEMj9ZWz5aBERlqqFF3n8A/w/uaJeZ/bkHS60l1BXVS0tgsQt9MFqBA==
dependencies:
- send "^0.18.0"
+ send "^0.19.0"
server-destroy "^1.0.1"
"@astrojs/prism@3.1.0":
@@ -97,7 +98,7 @@
dependencies:
prismjs "^1.29.0"
-"@astrojs/react@^3.6.0":
+"@astrojs/react@^3.6.2":
version "3.6.2"
resolved "https://registry.npmjs.org/@astrojs/react/-/react-3.6.2.tgz"
integrity sha512-fK29lYI7zK/KG4ZBy956x4dmauZcZ18osFkuyGa8r3gmmCQa2NZ9XNu9WaVYEUm0j89f4Gii4tbxLoyM8nk2MA==
@@ -105,13 +106,13 @@
"@vitejs/plugin-react" "^4.3.1"
ultrahtml "^1.5.3"
-"@astrojs/tailwind@^5.1.0":
- version "5.1.0"
- resolved "https://registry.npmjs.org/@astrojs/tailwind/-/tailwind-5.1.0.tgz"
- integrity sha512-BJoCDKuWhU9FT2qYg+fr6Nfb3qP4ShtyjXGHKA/4mHN94z7BGcmauQK23iy+YH5qWvTnhqkd6mQPQ1yTZTe9Ig==
+"@astrojs/tailwind@^5.1.2":
+ version "5.1.2"
+ resolved "https://registry.npmjs.org/@astrojs/tailwind/-/tailwind-5.1.2.tgz"
+ integrity sha512-IvOF0W/dtHElcXvhrPR35nHmhyV3cfz1EzPitMGtU7sYy9Hci3BNK1To6FWmVuuNKPxza1IgCGetSynJZL7fOg==
dependencies:
- autoprefixer "^10.4.15"
- postcss "^8.4.28"
+ autoprefixer "^10.4.20"
+ postcss "^8.4.47"
postcss-load-config "^4.0.2"
"@astrojs/telemetry@3.1.0":
@@ -127,145 +128,152 @@
is-wsl "^3.0.0"
which-pm-runs "^1.1.0"
-"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.24.7":
- version "7.24.7"
- resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz"
- integrity sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==
+"@astrojs/yaml2ts@^0.2.1":
+ version "0.2.1"
+ resolved "https://registry.npmjs.org/@astrojs/yaml2ts/-/yaml2ts-0.2.1.tgz"
+ integrity sha512-CBaNwDQJz20E5WxzQh4thLVfhB3JEEGz72wRA+oJp6fQR37QLAqXZJU0mHC+yqMOQ6oj0GfRPJrz6hjf+zm6zA==
+ dependencies:
+ yaml "^2.5.0"
+
+"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.25.7":
+ version "7.25.7"
+ resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.25.7.tgz"
+ integrity sha512-0xZJFNE5XMpENsgfHYTw8FbX4kv53mFLn2i3XPoq69LyhYSCBJtitaHx9QnsVTrsogI4Z3+HtEfZ2/GFPOtf5g==
dependencies:
- "@babel/highlight" "^7.24.7"
+ "@babel/highlight" "^7.25.7"
picocolors "^1.0.0"
-"@babel/compat-data@^7.25.2":
- version "7.25.4"
- resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.4.tgz"
- integrity sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==
+"@babel/compat-data@^7.25.7":
+ version "7.25.7"
+ resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.7.tgz"
+ integrity sha512-9ickoLz+hcXCeh7jrcin+/SLWm+GkxE2kTvoYyp38p4WkdFXfQJxDFGWp/YHjiKLPx06z2A7W8XKuqbReXDzsw==
-"@babel/core@^7.0.0", "@babel/core@^7.0.0-0", "@babel/core@^7.24.5", "@babel/core@^7.25.2":
- version "7.25.2"
- resolved "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz"
- integrity sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==
+"@babel/core@^7.0.0", "@babel/core@^7.0.0-0", "@babel/core@^7.24.5", "@babel/core@^7.25.7":
+ version "7.25.7"
+ resolved "https://registry.npmjs.org/@babel/core/-/core-7.25.7.tgz"
+ integrity sha512-yJ474Zv3cwiSOO9nXJuqzvwEeM+chDuQ8GJirw+pZ91sCGCyOZ3dJkVE09fTV0VEVzXyLWhh3G/AolYTPX7Mow==
dependencies:
"@ampproject/remapping" "^2.2.0"
- "@babel/code-frame" "^7.24.7"
- "@babel/generator" "^7.25.0"
- "@babel/helper-compilation-targets" "^7.25.2"
- "@babel/helper-module-transforms" "^7.25.2"
- "@babel/helpers" "^7.25.0"
- "@babel/parser" "^7.25.0"
- "@babel/template" "^7.25.0"
- "@babel/traverse" "^7.25.2"
- "@babel/types" "^7.25.2"
+ "@babel/code-frame" "^7.25.7"
+ "@babel/generator" "^7.25.7"
+ "@babel/helper-compilation-targets" "^7.25.7"
+ "@babel/helper-module-transforms" "^7.25.7"
+ "@babel/helpers" "^7.25.7"
+ "@babel/parser" "^7.25.7"
+ "@babel/template" "^7.25.7"
+ "@babel/traverse" "^7.25.7"
+ "@babel/types" "^7.25.7"
convert-source-map "^2.0.0"
debug "^4.1.0"
gensync "^1.0.0-beta.2"
json5 "^2.2.3"
semver "^6.3.1"
-"@babel/generator@^7.25.0", "@babel/generator@^7.25.6":
- version "7.25.6"
- resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.25.6.tgz"
- integrity sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==
+"@babel/generator@^7.25.7":
+ version "7.25.7"
+ resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.25.7.tgz"
+ integrity sha512-5Dqpl5fyV9pIAD62yK9P7fcA768uVPUyrQmqpqstHWgMma4feF1x/oFysBCVZLY5wJ2GkMUCdsNDnGZrPoR6rA==
dependencies:
- "@babel/types" "^7.25.6"
+ "@babel/types" "^7.25.7"
"@jridgewell/gen-mapping" "^0.3.5"
"@jridgewell/trace-mapping" "^0.3.25"
- jsesc "^2.5.1"
+ jsesc "^3.0.2"
-"@babel/helper-annotate-as-pure@^7.24.7":
- version "7.24.7"
- resolved "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz"
- integrity sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==
+"@babel/helper-annotate-as-pure@^7.25.7":
+ version "7.25.7"
+ resolved "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.7.tgz"
+ integrity sha512-4xwU8StnqnlIhhioZf1tqnVWeQ9pvH/ujS8hRfw/WOza+/a+1qv69BWNy+oY231maTCWgKWhfBU7kDpsds6zAA==
dependencies:
- "@babel/types" "^7.24.7"
+ "@babel/types" "^7.25.7"
-"@babel/helper-compilation-targets@^7.25.2":
- version "7.25.2"
- resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz"
- integrity sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==
+"@babel/helper-compilation-targets@^7.25.7":
+ version "7.25.7"
+ resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.7.tgz"
+ integrity sha512-DniTEax0sv6isaw6qSQSfV4gVRNtw2rte8HHM45t9ZR0xILaufBRNkpMifCRiAPyvL4ACD6v0gfCwCmtOQaV4A==
dependencies:
- "@babel/compat-data" "^7.25.2"
- "@babel/helper-validator-option" "^7.24.8"
- browserslist "^4.23.1"
+ "@babel/compat-data" "^7.25.7"
+ "@babel/helper-validator-option" "^7.25.7"
+ browserslist "^4.24.0"
lru-cache "^5.1.1"
semver "^6.3.1"
-"@babel/helper-module-imports@^7.16.7", "@babel/helper-module-imports@^7.24.7":
- version "7.24.7"
- resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz"
- integrity sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==
- dependencies:
- "@babel/traverse" "^7.24.7"
- "@babel/types" "^7.24.7"
-
-"@babel/helper-module-transforms@^7.25.2":
- version "7.25.2"
- resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz"
- integrity sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==
- dependencies:
- "@babel/helper-module-imports" "^7.24.7"
- "@babel/helper-simple-access" "^7.24.7"
- "@babel/helper-validator-identifier" "^7.24.7"
- "@babel/traverse" "^7.25.2"
-
-"@babel/helper-plugin-utils@^7.24.7", "@babel/helper-plugin-utils@^7.24.8":
- version "7.24.8"
- resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz"
- integrity sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==
-
-"@babel/helper-simple-access@^7.24.7":
- version "7.24.7"
- resolved "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz"
- integrity sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==
- dependencies:
- "@babel/traverse" "^7.24.7"
- "@babel/types" "^7.24.7"
-
-"@babel/helper-string-parser@^7.24.8":
- version "7.24.8"
- resolved "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz"
- integrity sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==
-
-"@babel/helper-validator-identifier@^7.24.7":
- version "7.24.7"
- resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz"
- integrity sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==
-
-"@babel/helper-validator-option@^7.24.8":
- version "7.24.8"
- resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz"
- integrity sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==
-
-"@babel/helpers@^7.25.0":
- version "7.25.6"
- resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.6.tgz"
- integrity sha512-Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q==
- dependencies:
- "@babel/template" "^7.25.0"
- "@babel/types" "^7.25.6"
-
-"@babel/highlight@^7.24.7":
- version "7.24.7"
- resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz"
- integrity sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==
- dependencies:
- "@babel/helper-validator-identifier" "^7.24.7"
+"@babel/helper-module-imports@^7.16.7", "@babel/helper-module-imports@^7.25.7":
+ version "7.25.7"
+ resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.7.tgz"
+ integrity sha512-o0xCgpNmRohmnoWKQ0Ij8IdddjyBFE4T2kagL/x6M3+4zUgc+4qTOUBoNe4XxDskt1HPKO007ZPiMgLDq2s7Kw==
+ dependencies:
+ "@babel/traverse" "^7.25.7"
+ "@babel/types" "^7.25.7"
+
+"@babel/helper-module-transforms@^7.25.7":
+ version "7.25.7"
+ resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.7.tgz"
+ integrity sha512-k/6f8dKG3yDz/qCwSM+RKovjMix563SLxQFo0UhRNo239SP6n9u5/eLtKD6EAjwta2JHJ49CsD8pms2HdNiMMQ==
+ dependencies:
+ "@babel/helper-module-imports" "^7.25.7"
+ "@babel/helper-simple-access" "^7.25.7"
+ "@babel/helper-validator-identifier" "^7.25.7"
+ "@babel/traverse" "^7.25.7"
+
+"@babel/helper-plugin-utils@^7.24.7", "@babel/helper-plugin-utils@^7.25.7":
+ version "7.25.7"
+ resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.7.tgz"
+ integrity sha512-eaPZai0PiqCi09pPs3pAFfl/zYgGaE6IdXtYvmf0qlcDTd3WCtO7JWCcRd64e0EQrcYgiHibEZnOGsSY4QSgaw==
+
+"@babel/helper-simple-access@^7.25.7":
+ version "7.25.7"
+ resolved "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.25.7.tgz"
+ integrity sha512-FPGAkJmyoChQeM+ruBGIDyrT2tKfZJO8NcxdC+CWNJi7N8/rZpSxK7yvBJ5O/nF1gfu5KzN7VKG3YVSLFfRSxQ==
+ dependencies:
+ "@babel/traverse" "^7.25.7"
+ "@babel/types" "^7.25.7"
+
+"@babel/helper-string-parser@^7.25.7":
+ version "7.25.7"
+ resolved "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.7.tgz"
+ integrity sha512-CbkjYdsJNHFk8uqpEkpCvRs3YRp9tY6FmFY7wLMSYuGYkrdUi7r2lc4/wqsvlHoMznX3WJ9IP8giGPq68T/Y6g==
+
+"@babel/helper-validator-identifier@^7.25.7":
+ version "7.25.7"
+ resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.7.tgz"
+ integrity sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg==
+
+"@babel/helper-validator-option@^7.25.7":
+ version "7.25.7"
+ resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.7.tgz"
+ integrity sha512-ytbPLsm+GjArDYXJ8Ydr1c/KJuutjF2besPNbIZnZ6MKUxi/uTA22t2ymmA4WFjZFpjiAMO0xuuJPqK2nvDVfQ==
+
+"@babel/helpers@^7.25.7":
+ version "7.25.7"
+ resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.7.tgz"
+ integrity sha512-Sv6pASx7Esm38KQpF/U/OXLwPPrdGHNKoeblRxgZRLXnAtnkEe4ptJPDtAZM7fBLadbc1Q07kQpSiGQ0Jg6tRA==
+ dependencies:
+ "@babel/template" "^7.25.7"
+ "@babel/types" "^7.25.7"
+
+"@babel/highlight@^7.25.7":
+ version "7.25.7"
+ resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.25.7.tgz"
+ integrity sha512-iYyACpW3iW8Fw+ZybQK+drQre+ns/tKpXbNESfrhNnPLIklLbXr7MYJ6gPEd0iETGLOK+SxMjVvKb/ffmk+FEw==
+ dependencies:
+ "@babel/helper-validator-identifier" "^7.25.7"
chalk "^2.4.2"
js-tokens "^4.0.0"
picocolors "^1.0.0"
-"@babel/parser@^7.1.0", "@babel/parser@^7.20.7", "@babel/parser@^7.25.0", "@babel/parser@^7.25.4", "@babel/parser@^7.25.6":
- version "7.25.6"
- resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.25.6.tgz"
- integrity sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==
+"@babel/parser@^7.1.0", "@babel/parser@^7.20.7", "@babel/parser@^7.25.4", "@babel/parser@^7.25.7":
+ version "7.25.7"
+ resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.25.7.tgz"
+ integrity sha512-aZn7ETtQsjjGG5HruveUK06cU3Hljuhd9Iojm4M8WWv3wLE6OkE5PWbDUkItmMgegmccaITudyuW5RPYrYlgWw==
dependencies:
- "@babel/types" "^7.25.6"
+ "@babel/types" "^7.25.7"
-"@babel/plugin-syntax-jsx@^7.24.7":
- version "7.24.7"
- resolved "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz"
- integrity sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==
+"@babel/plugin-syntax-jsx@^7.25.7":
+ version "7.25.7"
+ resolved "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.7.tgz"
+ integrity sha512-ruZOnKO+ajVL/MVx+PwNBPOkrnXTXoWMtte1MBpegfCArhqOe3Bj52avVj1huLLxNKYKXYaSxZ2F+woK1ekXfw==
dependencies:
- "@babel/helper-plugin-utils" "^7.24.7"
+ "@babel/helper-plugin-utils" "^7.25.7"
"@babel/plugin-transform-react-jsx-self@^7.24.5":
version "7.24.7"
@@ -281,16 +289,16 @@
dependencies:
"@babel/helper-plugin-utils" "^7.24.7"
-"@babel/plugin-transform-react-jsx@^7.25.2":
- version "7.25.2"
- resolved "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.2.tgz"
- integrity sha512-KQsqEAVBpU82NM/B/N9j9WOdphom1SZH3R+2V7INrQUH+V9EBFwZsEJl8eBIVeQE62FxJCc70jzEZwqU7RcVqA==
+"@babel/plugin-transform-react-jsx@^7.25.7":
+ version "7.25.7"
+ resolved "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.7.tgz"
+ integrity sha512-vILAg5nwGlR9EXE8JIOX4NHXd49lrYbN8hnjffDtoULwpL9hUx/N55nqh2qd0q6FyNDfjl9V79ecKGvFbcSA0Q==
dependencies:
- "@babel/helper-annotate-as-pure" "^7.24.7"
- "@babel/helper-module-imports" "^7.24.7"
- "@babel/helper-plugin-utils" "^7.24.8"
- "@babel/plugin-syntax-jsx" "^7.24.7"
- "@babel/types" "^7.25.2"
+ "@babel/helper-annotate-as-pure" "^7.25.7"
+ "@babel/helper-module-imports" "^7.25.7"
+ "@babel/helper-plugin-utils" "^7.25.7"
+ "@babel/plugin-syntax-jsx" "^7.25.7"
+ "@babel/types" "^7.25.7"
"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.18.3", "@babel/runtime@^7.2.0", "@babel/runtime@^7.23.9", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.7", "@babel/runtime@>=7":
version "7.24.8"
@@ -299,35 +307,35 @@
dependencies:
regenerator-runtime "^0.14.0"
-"@babel/template@^7.25.0":
- version "7.25.0"
- resolved "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz"
- integrity sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==
- dependencies:
- "@babel/code-frame" "^7.24.7"
- "@babel/parser" "^7.25.0"
- "@babel/types" "^7.25.0"
-
-"@babel/traverse@^7.24.7", "@babel/traverse@^7.25.2":
- version "7.25.6"
- resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.6.tgz"
- integrity sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==
- dependencies:
- "@babel/code-frame" "^7.24.7"
- "@babel/generator" "^7.25.6"
- "@babel/parser" "^7.25.6"
- "@babel/template" "^7.25.0"
- "@babel/types" "^7.25.6"
+"@babel/template@^7.25.7":
+ version "7.25.7"
+ resolved "https://registry.npmjs.org/@babel/template/-/template-7.25.7.tgz"
+ integrity sha512-wRwtAgI3bAS+JGU2upWNL9lSlDcRCqD05BZ1n3X2ONLH1WilFP6O1otQjeMK/1g0pvYcXC7b/qVUB1keofjtZA==
+ dependencies:
+ "@babel/code-frame" "^7.25.7"
+ "@babel/parser" "^7.25.7"
+ "@babel/types" "^7.25.7"
+
+"@babel/traverse@^7.25.7":
+ version "7.25.7"
+ resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.7.tgz"
+ integrity sha512-jatJPT1Zjqvh/1FyJs6qAHL+Dzb7sTb+xr7Q+gM1b+1oBsMsQQ4FkVKb6dFlJvLlVssqkRzV05Jzervt9yhnzg==
+ dependencies:
+ "@babel/code-frame" "^7.25.7"
+ "@babel/generator" "^7.25.7"
+ "@babel/parser" "^7.25.7"
+ "@babel/template" "^7.25.7"
+ "@babel/types" "^7.25.7"
debug "^4.3.1"
globals "^11.1.0"
-"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.24.7", "@babel/types@^7.25.0", "@babel/types@^7.25.2", "@babel/types@^7.25.4", "@babel/types@^7.25.6":
- version "7.25.6"
- resolved "https://registry.npmjs.org/@babel/types/-/types-7.25.6.tgz"
- integrity sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==
+"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.25.4", "@babel/types@^7.25.7":
+ version "7.25.7"
+ resolved "https://registry.npmjs.org/@babel/types/-/types-7.25.7.tgz"
+ integrity sha512-vwIVdXG+j+FOpkwqHRcBgHLYNL7XMkufrlaFvL9o6Ai9sJn9+PdyIL5qa0XzTZw084c+u9LOls53eoZWP/W5WQ==
dependencies:
- "@babel/helper-string-parser" "^7.24.8"
- "@babel/helper-validator-identifier" "^7.24.7"
+ "@babel/helper-string-parser" "^7.25.7"
+ "@babel/helper-validator-identifier" "^7.25.7"
to-fast-properties "^2.0.0"
"@emmetio/abbreviation@^2.3.3":
@@ -344,11 +352,36 @@
dependencies:
"@emmetio/scanner" "^1.0.4"
-"@emmetio/scanner@^1.0.4":
+"@emmetio/css-parser@^0.4.0":
+ version "0.4.0"
+ resolved "https://registry.npmjs.org/@emmetio/css-parser/-/css-parser-0.4.0.tgz"
+ integrity sha512-z7wkxRSZgrQHXVzObGkXG+Vmj3uRlpM11oCZ9pbaz0nFejvCDmAiNDpY75+wgXOcffKpj4rzGtwGaZxfJKsJxw==
+ dependencies:
+ "@emmetio/stream-reader" "^2.2.0"
+ "@emmetio/stream-reader-utils" "^0.1.0"
+
+"@emmetio/html-matcher@^1.3.0":
+ version "1.3.0"
+ resolved "https://registry.npmjs.org/@emmetio/html-matcher/-/html-matcher-1.3.0.tgz"
+ integrity sha512-NTbsvppE5eVyBMuyGfVu2CRrLvo7J4YHb6t9sBFLyY03WYhXET37qA4zOYUjBWFCRHO7pS1B9khERtY0f5JXPQ==
+ dependencies:
+ "@emmetio/scanner" "^1.0.0"
+
+"@emmetio/scanner@^1.0.0", "@emmetio/scanner@^1.0.4":
version "1.0.4"
resolved "https://registry.npmjs.org/@emmetio/scanner/-/scanner-1.0.4.tgz"
integrity sha512-IqRuJtQff7YHHBk4G8YZ45uB9BaAGcwQeVzgj/zj8/UdOhtQpEIupUhSk8dys6spFIWVZVeK20CzGEnqR5SbqA==
+"@emmetio/stream-reader-utils@^0.1.0":
+ version "0.1.0"
+ resolved "https://registry.npmjs.org/@emmetio/stream-reader-utils/-/stream-reader-utils-0.1.0.tgz"
+ integrity sha512-ZsZ2I9Vzso3Ho/pjZFsmmZ++FWeEd/txqybHTm4OgaZzdS8V9V/YYWQwg5TC38Z7uLWUV1vavpLLbjJtKubR1A==
+
+"@emmetio/stream-reader@^2.2.0":
+ version "2.2.0"
+ resolved "https://registry.npmjs.org/@emmetio/stream-reader/-/stream-reader-2.2.0.tgz"
+ integrity sha512-fXVXEyFA5Yv3M3n8sUGT7+fvecGrZP4k6FnWWMSZVQf69kAq0LLpaBQLGcPR30m3zMmKYhECP4k/ZkzvhEW5kw==
+
"@emotion/babel-plugin@^11.11.0":
version "11.11.0"
resolved "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.11.0.tgz"
@@ -466,6 +499,42 @@
resolved "https://registry.npmjs.org/@fisch0920/medium-zoom/-/medium-zoom-1.0.7.tgz"
integrity sha512-hPUrgVM/QvsZdZzDTPyL1C1mOtEw03RqTLmK7ZlJ8S/64u4O4O5BvPvjB/9kyLtE6iVaS9UDRAMSwmM9uh2JIw==
+"@floating-ui/core@^1.6.0":
+ version "1.6.8"
+ resolved "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.8.tgz"
+ integrity sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==
+ dependencies:
+ "@floating-ui/utils" "^0.2.8"
+
+"@floating-ui/dom@^1.0.0":
+ version "1.6.11"
+ resolved "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.11.tgz"
+ integrity sha512-qkMCxSR24v2vGkhYDo/UzxfJN3D4syqSjyuTFz6C7XcpU1pASPRieNI0Kj5VP3/503mOfYiGY891ugBX1GlABQ==
+ dependencies:
+ "@floating-ui/core" "^1.6.0"
+ "@floating-ui/utils" "^0.2.8"
+
+"@floating-ui/react-dom@^2.1.2":
+ version "2.1.2"
+ resolved "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.2.tgz"
+ integrity sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==
+ dependencies:
+ "@floating-ui/dom" "^1.0.0"
+
+"@floating-ui/react@^0.26.16":
+ version "0.26.24"
+ resolved "https://registry.npmjs.org/@floating-ui/react/-/react-0.26.24.tgz"
+ integrity sha512-2ly0pCkZIGEQUq5H8bBK0XJmc1xIK/RM3tvVzY3GBER7IOD1UgmC2Y2tjj4AuS+TC+vTE1KJv2053290jua0Sw==
+ dependencies:
+ "@floating-ui/react-dom" "^2.1.2"
+ "@floating-ui/utils" "^0.2.8"
+ tabbable "^6.0.0"
+
+"@floating-ui/utils@^0.2.8":
+ version "0.2.8"
+ resolved "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.8.tgz"
+ integrity sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==
+
"@flydotio/dockerfile@^0.5.2":
version "0.5.2"
resolved "https://registry.npmjs.org/@flydotio/dockerfile/-/dockerfile-0.5.2.tgz"
@@ -477,6 +546,21 @@
shell-quote "^1.8.1"
yargs "^17.7.2"
+"@headlessui/react@^2.1.8":
+ version "2.1.9"
+ resolved "https://registry.npmjs.org/@headlessui/react/-/react-2.1.9.tgz"
+ integrity sha512-ckWw7vlKtnoa1fL2X0fx1a3t/Li9MIKDVXn3SgG65YlxvDAsNrY39PPCxVM7sQRA7go2fJsuHSSauKFNaJHH7A==
+ dependencies:
+ "@floating-ui/react" "^0.26.16"
+ "@react-aria/focus" "^3.17.1"
+ "@react-aria/interactions" "^3.21.3"
+ "@tanstack/react-virtual" "^3.8.1"
+
+"@heroicons/react@^2.1.5":
+ version "2.1.5"
+ resolved "https://registry.npmjs.org/@heroicons/react/-/react-2.1.5.tgz"
+ integrity sha512-FuzFN+BsHa+7OxbvAERtgBTNeZpUjgM/MIizfVkSCL2/edriN0Hx/DWRCR//aPYwO5QX/YlgLGXk+E3PcfZwjA==
+
"@img/sharp-win32-x64@0.33.5":
version "0.33.5"
resolved "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.5.tgz"
@@ -654,10 +738,10 @@
"@types/node-fetch" "^2.5.10"
node-fetch "^2.6.1"
-"@oslojs/encoding@^0.4.1":
- version "0.4.1"
- resolved "https://registry.npmjs.org/@oslojs/encoding/-/encoding-0.4.1.tgz"
- integrity sha512-hkjo6MuIK/kQR5CrGNdAPZhS01ZCXuWDRJ187zh6qqF2+yMHZpD9fAYpX8q2bOO6Ryhl3XpCT6kUX76N8hhm4Q==
+"@oslojs/encoding@^1.1.0":
+ version "1.1.0"
+ resolved "https://registry.npmjs.org/@oslojs/encoding/-/encoding-1.1.0.tgz"
+ integrity sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ==
"@pkgjs/parseargs@^0.11.0":
version "0.11.0"
@@ -669,61 +753,153 @@
resolved "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz"
integrity sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==
-"@rollup/pluginutils@^5.1.0":
- version "5.1.0"
- resolved "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz"
- integrity sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==
+"@prisma/client@^5.20.0":
+ version "5.20.0"
+ resolved "https://registry.npmjs.org/@prisma/client/-/client-5.20.0.tgz"
+ integrity sha512-CLv55ZuMuUawMsxoqxGtLT3bEZoa2W8L3Qnp6rDIFWy+ZBrUcOFKdoeGPSnbBqxc3SkdxJrF+D1veN/WNynZYA==
+
+"@prisma/debug@5.20.0":
+ version "5.20.0"
+ resolved "https://registry.npmjs.org/@prisma/debug/-/debug-5.20.0.tgz"
+ integrity sha512-oCx79MJ4HSujokA8S1g0xgZUGybD4SyIOydoHMngFYiwEwYDQ5tBQkK5XoEHuwOYDKUOKRn/J0MEymckc4IgsQ==
+
+"@prisma/engines-version@5.20.0-12.06fc58a368dc7be9fbbbe894adf8d445d208c284":
+ version "5.20.0-12.06fc58a368dc7be9fbbbe894adf8d445d208c284"
+ resolved "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-5.20.0-12.06fc58a368dc7be9fbbbe894adf8d445d208c284.tgz"
+ integrity sha512-Lg8AS5lpi0auZe2Mn4gjuCg081UZf88k3cn0RCwHgR+6cyHHpttPZBElJTHf83ZGsRNAmVCZCfUGA57WB4u4JA==
+
+"@prisma/engines@5.20.0":
+ version "5.20.0"
+ resolved "https://registry.npmjs.org/@prisma/engines/-/engines-5.20.0.tgz"
+ integrity sha512-DtqkP+hcZvPEbj8t8dK5df2b7d3B8GNauKqaddRRqQBBlgkbdhJkxhoJTrOowlS3vaRt2iMCkU0+CSNn0KhqAQ==
+ dependencies:
+ "@prisma/debug" "5.20.0"
+ "@prisma/engines-version" "5.20.0-12.06fc58a368dc7be9fbbbe894adf8d445d208c284"
+ "@prisma/fetch-engine" "5.20.0"
+ "@prisma/get-platform" "5.20.0"
+
+"@prisma/fetch-engine@5.20.0":
+ version "5.20.0"
+ resolved "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-5.20.0.tgz"
+ integrity sha512-JVcaPXC940wOGpCOwuqQRTz6I9SaBK0c1BAyC1pcz9xBi+dzFgUu3G/p9GV1FhFs9OKpfSpIhQfUJE9y00zhqw==
+ dependencies:
+ "@prisma/debug" "5.20.0"
+ "@prisma/engines-version" "5.20.0-12.06fc58a368dc7be9fbbbe894adf8d445d208c284"
+ "@prisma/get-platform" "5.20.0"
+
+"@prisma/get-platform@5.20.0":
+ version "5.20.0"
+ resolved "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-5.20.0.tgz"
+ integrity sha512-8/+CehTZZNzJlvuryRgc77hZCWrUDYd/PmlZ7p2yNXtmf2Una4BWnTbak3us6WVdqoz5wmptk6IhsXdG2v5fmA==
+ dependencies:
+ "@prisma/debug" "5.20.0"
+
+"@react-aria/focus@^3.17.1":
+ version "3.18.3"
+ resolved "https://registry.npmjs.org/@react-aria/focus/-/focus-3.18.3.tgz"
+ integrity sha512-WKUElg+5zS0D3xlVn8MntNnkzJql2J6MuzAMP8Sv5WTgFDse/XGR842dsxPTIyKKdrWVCRegCuwa4m3n/GzgJw==
+ dependencies:
+ "@react-aria/interactions" "^3.22.3"
+ "@react-aria/utils" "^3.25.3"
+ "@react-types/shared" "^3.25.0"
+ "@swc/helpers" "^0.5.0"
+ clsx "^2.0.0"
+
+"@react-aria/interactions@^3.21.3", "@react-aria/interactions@^3.22.3":
+ version "3.22.3"
+ resolved "https://registry.npmjs.org/@react-aria/interactions/-/interactions-3.22.3.tgz"
+ integrity sha512-RRUb/aG+P0IKTIWikY/SylB6bIbLZeztnZY2vbe7RAG5MgVaCgn5HQ45SI15GlTmhsFG8CnF6slJsUFJiNHpbQ==
+ dependencies:
+ "@react-aria/ssr" "^3.9.6"
+ "@react-aria/utils" "^3.25.3"
+ "@react-types/shared" "^3.25.0"
+ "@swc/helpers" "^0.5.0"
+
+"@react-aria/ssr@^3.9.6":
+ version "3.9.6"
+ resolved "https://registry.npmjs.org/@react-aria/ssr/-/ssr-3.9.6.tgz"
+ integrity sha512-iLo82l82ilMiVGy342SELjshuWottlb5+VefO3jOQqQRNYnJBFpUSadswDPbRimSgJUZuFwIEYs6AabkP038fA==
+ dependencies:
+ "@swc/helpers" "^0.5.0"
+
+"@react-aria/utils@^3.25.3":
+ version "3.25.3"
+ resolved "https://registry.npmjs.org/@react-aria/utils/-/utils-3.25.3.tgz"
+ integrity sha512-PR5H/2vaD8fSq0H/UB9inNbc8KDcVmW6fYAfSWkkn+OAdhTTMVKqXXrZuZBWyFfSD5Ze7VN6acr4hrOQm2bmrA==
+ dependencies:
+ "@react-aria/ssr" "^3.9.6"
+ "@react-stately/utils" "^3.10.4"
+ "@react-types/shared" "^3.25.0"
+ "@swc/helpers" "^0.5.0"
+ clsx "^2.0.0"
+
+"@react-stately/utils@^3.10.4":
+ version "3.10.4"
+ resolved "https://registry.npmjs.org/@react-stately/utils/-/utils-3.10.4.tgz"
+ integrity sha512-gBEQEIMRh5f60KCm7QKQ2WfvhB2gLUr9b72sqUdIZ2EG+xuPgaIlCBeSicvjmjBvYZwOjoOEnmIkcx2GHp/HWw==
+ dependencies:
+ "@swc/helpers" "^0.5.0"
+
+"@react-types/shared@^3.25.0":
+ version "3.25.0"
+ resolved "https://registry.npmjs.org/@react-types/shared/-/shared-3.25.0.tgz"
+ integrity sha512-OZSyhzU6vTdW3eV/mz5i6hQwQUhkRs7xwY2d1aqPvTdMe0+2cY7Fwp45PAiwYLEj73i9ro2FxF9qC4DvHGSCgQ==
+
+"@rollup/pluginutils@^5.1.2":
+ version "5.1.2"
+ resolved "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.2.tgz"
+ integrity sha512-/FIdS3PyZ39bjZlwqFnWqCOVnW7o963LtKMwQOD0NhQqw22gSr2YY1afu3FxRip4ZCZNsD5jq6Aaz6QV3D/Njw==
dependencies:
"@types/estree" "^1.0.0"
estree-walker "^2.0.2"
picomatch "^2.3.1"
-"@rollup/rollup-win32-x64-msvc@4.21.3":
- version "4.21.3"
- resolved "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.21.3.tgz"
- integrity sha512-fOvu7PCQjAj4eWDEuD8Xz5gpzFqXzGlxHZozHP4b9Jxv9APtdxL6STqztDzMLuRXEc4UpXGGhx029Xgm91QBeA==
+"@rollup/rollup-win32-x64-msvc@4.24.0":
+ version "4.24.0"
+ resolved "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.24.0.tgz"
+ integrity sha512-fbMkAF7fufku0N2dE5TBXcNlg0pt0cJue4xBRE2Qc5Vqikxr4VCgKj/ht6SMdFcOacVA9rqF70APJ8RN/4vMJw==
-"@shikijs/core@1.17.7":
- version "1.17.7"
- resolved "https://registry.npmjs.org/@shikijs/core/-/core-1.17.7.tgz"
- integrity sha512-ZnIDxFu/yvje3Q8owSHaEHd+bu/jdWhHAaJ17ggjXofHx5rc4bhpCSW+OjC6smUBi5s5dd023jWtZ1gzMu/yrw==
+"@shikijs/core@1.22.0":
+ version "1.22.0"
+ resolved "https://registry.npmjs.org/@shikijs/core/-/core-1.22.0.tgz"
+ integrity sha512-S8sMe4q71TJAW+qG93s5VaiihujRK6rqDFqBnxqvga/3LvqHEnxqBIOPkt//IdXVtHkQWKu4nOQNk0uBGicU7Q==
dependencies:
- "@shikijs/engine-javascript" "1.17.7"
- "@shikijs/engine-oniguruma" "1.17.7"
- "@shikijs/types" "1.17.7"
- "@shikijs/vscode-textmate" "^9.2.2"
+ "@shikijs/engine-javascript" "1.22.0"
+ "@shikijs/engine-oniguruma" "1.22.0"
+ "@shikijs/types" "1.22.0"
+ "@shikijs/vscode-textmate" "^9.3.0"
"@types/hast" "^3.0.4"
- hast-util-to-html "^9.0.2"
+ hast-util-to-html "^9.0.3"
-"@shikijs/engine-javascript@1.17.7":
- version "1.17.7"
- resolved "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-1.17.7.tgz"
- integrity sha512-wwSf7lKPsm+hiYQdX+1WfOXujtnUG6fnN4rCmExxa4vo+OTmvZ9B1eKauilvol/LHUPrQgW12G3gzem7pY5ckw==
+"@shikijs/engine-javascript@1.22.0":
+ version "1.22.0"
+ resolved "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-1.22.0.tgz"
+ integrity sha512-AeEtF4Gcck2dwBqCFUKYfsCq0s+eEbCEbkUuFou53NZ0sTGnJnJ/05KHQFZxpii5HMXbocV9URYVowOP2wH5kw==
dependencies:
- "@shikijs/types" "1.17.7"
- "@shikijs/vscode-textmate" "^9.2.2"
+ "@shikijs/types" "1.22.0"
+ "@shikijs/vscode-textmate" "^9.3.0"
oniguruma-to-js "0.4.3"
-"@shikijs/engine-oniguruma@1.17.7":
- version "1.17.7"
- resolved "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-1.17.7.tgz"
- integrity sha512-pvSYGnVeEIconU28NEzBXqSQC/GILbuNbAHwMoSfdTBrobKAsV1vq2K4cAgiaW1TJceLV9QMGGh18hi7cCzbVQ==
+"@shikijs/engine-oniguruma@1.22.0":
+ version "1.22.0"
+ resolved "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-1.22.0.tgz"
+ integrity sha512-5iBVjhu/DYs1HB0BKsRRFipRrD7rqjxlWTj4F2Pf+nQSPqc3kcyqFFeZXnBMzDf0HdqaFVvhDRAGiYNvyLP+Mw==
dependencies:
- "@shikijs/types" "1.17.7"
- "@shikijs/vscode-textmate" "^9.2.2"
+ "@shikijs/types" "1.22.0"
+ "@shikijs/vscode-textmate" "^9.3.0"
-"@shikijs/types@1.17.7":
- version "1.17.7"
- resolved "https://registry.npmjs.org/@shikijs/types/-/types-1.17.7.tgz"
- integrity sha512-+qA4UyhWLH2q4EFd+0z4K7GpERDU+c+CN2XYD3sC+zjvAr5iuwD1nToXZMt1YODshjkEGEDV86G7j66bKjqDdg==
+"@shikijs/types@1.22.0":
+ version "1.22.0"
+ resolved "https://registry.npmjs.org/@shikijs/types/-/types-1.22.0.tgz"
+ integrity sha512-Fw/Nr7FGFhlQqHfxzZY8Cwtwk5E9nKDUgeLjZgt3UuhcM3yJR9xj3ZGNravZZok8XmEZMiYkSMTPlPkULB8nww==
dependencies:
- "@shikijs/vscode-textmate" "^9.2.2"
+ "@shikijs/vscode-textmate" "^9.3.0"
"@types/hast" "^3.0.4"
-"@shikijs/vscode-textmate@^9.2.2":
- version "9.2.2"
- resolved "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-9.2.2.tgz"
- integrity sha512-TMp15K+GGYrWlZM8+Lnj9EaHEFmOen0WJBrfa17hF7taDOYthuPPV0GWzfd/9iMij0akS/8Yw2ikquH7uVi/fg==
+"@shikijs/vscode-textmate@^9.3.0":
+ version "9.3.0"
+ resolved "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-9.3.0.tgz"
+ integrity sha512-jn7/7ky30idSkd/O5yDBfAnVt+JJpepofP/POZ1iMOxK59cOfqIgg/Dj0eFsjOTMw+4ycJN0uhZH/Eb0bs/EUA==
"@sinclair/typebox@^0.27.8":
version "0.27.8"
@@ -735,6 +911,70 @@
resolved "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz"
integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==
+"@supabase/auth-js@2.65.0":
+ version "2.65.0"
+ resolved "https://registry.npmjs.org/@supabase/auth-js/-/auth-js-2.65.0.tgz"
+ integrity sha512-+wboHfZufAE2Y612OsKeVP4rVOeGZzzMLD/Ac3HrTQkkY4qXNjI6Af9gtmxwccE5nFvTiF114FEbIQ1hRq5uUw==
+ dependencies:
+ "@supabase/node-fetch" "^2.6.14"
+
+"@supabase/functions-js@2.4.1":
+ version "2.4.1"
+ resolved "https://registry.npmjs.org/@supabase/functions-js/-/functions-js-2.4.1.tgz"
+ integrity sha512-8sZ2ibwHlf+WkHDUZJUXqqmPvWQ3UHN0W30behOJngVh/qHHekhJLCFbh0AjkE9/FqqXtf9eoVvmYgfCLk5tNA==
+ dependencies:
+ "@supabase/node-fetch" "^2.6.14"
+
+"@supabase/node-fetch@^2.6.14", "@supabase/node-fetch@2.6.15":
+ version "2.6.15"
+ resolved "https://registry.npmjs.org/@supabase/node-fetch/-/node-fetch-2.6.15.tgz"
+ integrity sha512-1ibVeYUacxWYi9i0cf5efil6adJ9WRyZBLivgjs+AUpewx1F3xPi7gLgaASI2SmIQxPoCEjAsLAzKPgMJVgOUQ==
+ dependencies:
+ whatwg-url "^5.0.0"
+
+"@supabase/postgrest-js@1.16.1":
+ version "1.16.1"
+ resolved "https://registry.npmjs.org/@supabase/postgrest-js/-/postgrest-js-1.16.1.tgz"
+ integrity sha512-EOSEZFm5pPuCPGCmLF1VOCS78DfkSz600PBuvBND/IZmMciJ1pmsS3ss6TkB6UkuvTybYiBh7gKOYyxoEO3USA==
+ dependencies:
+ "@supabase/node-fetch" "^2.6.14"
+
+"@supabase/realtime-js@2.10.2":
+ version "2.10.2"
+ resolved "https://registry.npmjs.org/@supabase/realtime-js/-/realtime-js-2.10.2.tgz"
+ integrity sha512-qyCQaNg90HmJstsvr2aJNxK2zgoKh9ZZA8oqb7UT2LCh3mj9zpa3Iwu167AuyNxsxrUE8eEJ2yH6wLCij4EApA==
+ dependencies:
+ "@supabase/node-fetch" "^2.6.14"
+ "@types/phoenix" "^1.5.4"
+ "@types/ws" "^8.5.10"
+ ws "^8.14.2"
+
+"@supabase/storage-js@2.7.0":
+ version "2.7.0"
+ resolved "https://registry.npmjs.org/@supabase/storage-js/-/storage-js-2.7.0.tgz"
+ integrity sha512-iZenEdO6Mx9iTR6T7wC7sk6KKsoDPLq8rdu5VRy7+JiT1i8fnqfcOr6mfF2Eaqky9VQzhP8zZKQYjzozB65Rig==
+ dependencies:
+ "@supabase/node-fetch" "^2.6.14"
+
+"@supabase/supabase-js@^2.45.4":
+ version "2.45.4"
+ resolved "https://registry.npmjs.org/@supabase/supabase-js/-/supabase-js-2.45.4.tgz"
+ integrity sha512-E5p8/zOLaQ3a462MZnmnz03CrduA5ySH9hZyL03Y+QZLIOO4/Gs8Rdy4ZCKDHsN7x0xdanVEWWFN3pJFQr9/hg==
+ dependencies:
+ "@supabase/auth-js" "2.65.0"
+ "@supabase/functions-js" "2.4.1"
+ "@supabase/node-fetch" "2.6.15"
+ "@supabase/postgrest-js" "1.16.1"
+ "@supabase/realtime-js" "2.10.2"
+ "@supabase/storage-js" "2.7.0"
+
+"@swc/helpers@^0.5.0":
+ version "0.5.13"
+ resolved "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.13.tgz"
+ integrity sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w==
+ dependencies:
+ tslib "^2.4.0"
+
"@szmarczak/http-timer@^4.0.5":
version "4.0.6"
resolved "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz"
@@ -742,6 +982,18 @@
dependencies:
defer-to-connect "^2.0.0"
+"@tanstack/react-virtual@^3.8.1":
+ version "3.10.8"
+ resolved "https://registry.npmjs.org/@tanstack/react-virtual/-/react-virtual-3.10.8.tgz"
+ integrity sha512-VbzbVGSsZlQktyLrP5nxE+vE1ZR+U0NFAWPbJLoG2+DKPwd2D7dVICTVIIaYlJqX1ZCEnYDbaOpmMwbsyhBoIA==
+ dependencies:
+ "@tanstack/virtual-core" "3.10.8"
+
+"@tanstack/virtual-core@3.10.8":
+ version "3.10.8"
+ resolved "https://registry.npmjs.org/@tanstack/virtual-core/-/virtual-core-3.10.8.tgz"
+ integrity sha512-PBu00mtt95jbKFi6Llk9aik8bnR3tR/oQP1o3TSi+iG//+Q2RTIzCEgKkHG8BB86kxMNW6O8wku+Lmi+QFR6jA==
+
"@types/babel__core@^7.20.5":
version "7.20.5"
resolved "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz"
@@ -804,10 +1056,10 @@
dependencies:
"@types/ms" "*"
-"@types/estree@^1.0.0", "@types/estree@^1.0.5", "@types/estree@1.0.5":
- version "1.0.5"
- resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz"
- integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==
+"@types/estree@^1.0.0", "@types/estree@^1.0.5", "@types/estree@1.0.6":
+ version "1.0.6"
+ resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz"
+ integrity sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==
"@types/hast@^3.0.0", "@types/hast@^3.0.4":
version "3.0.4"
@@ -839,9 +1091,9 @@
"@types/node" "*"
"@types/mdast@^4.0.0":
- version "4.0.3"
- resolved "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz"
- integrity sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==
+ version "4.0.4"
+ resolved "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz"
+ integrity sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==
dependencies:
"@types/unist" "*"
@@ -877,6 +1129,11 @@
resolved "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz"
integrity sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==
+"@types/phoenix@^1.5.4":
+ version "1.6.5"
+ resolved "https://registry.npmjs.org/@types/phoenix/-/phoenix-1.6.5.tgz"
+ integrity sha512-xegpDuR+z0UqG9fwHqNoy3rI7JDlvaPh2TY47Fl80oq6g+hXT+c/LEuE43X48clZ6lOfANl5WrPur9fYO1RJ/w==
+
"@types/prop-types@*", "@types/prop-types@^15.7.12":
version "15.7.12"
resolved "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz"
@@ -912,9 +1169,16 @@
"@types/node" "*"
"@types/unist@*", "@types/unist@^3.0.0":
- version "3.0.2"
- resolved "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz"
- integrity sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==
+ version "3.0.3"
+ resolved "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz"
+ integrity sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==
+
+"@types/ws@^8.5.10":
+ version "8.5.12"
+ resolved "https://registry.npmjs.org/@types/ws/-/ws-8.5.12.tgz"
+ integrity sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==
+ dependencies:
+ "@types/node" "*"
"@ungap/structured-clone@^1.0.0":
version "1.2.0"
@@ -976,34 +1240,32 @@
loupe "^2.3.7"
pretty-format "^29.7.0"
-"@volar/kit@~2.0.4":
- version "2.0.4"
- resolved "https://registry.npmjs.org/@volar/kit/-/kit-2.0.4.tgz"
- integrity sha512-USRx/o0jKz7o8+lEKWMxWqbqvC46XFrf3IE6CZBYzRo9kM7RERQLwUYaoT2bOcHt5DQWublpnTgdgHMm37Gysg==
+"@volar/kit@~2.4.5":
+ version "2.4.6"
+ resolved "https://registry.npmjs.org/@volar/kit/-/kit-2.4.6.tgz"
+ integrity sha512-OaMtpmLns6IYD1nOSd0NdG/F5KzJ7Jr4B7TLeb4byPzu+ExuuRVeO56Dn1C7Frnw6bGudUQd90cpQAmxdB+RlQ==
dependencies:
- "@volar/language-service" "2.0.4"
- "@volar/typescript" "2.0.4"
+ "@volar/language-service" "2.4.6"
+ "@volar/typescript" "2.4.6"
typesafe-path "^0.2.2"
vscode-languageserver-textdocument "^1.0.11"
vscode-uri "^3.0.8"
-"@volar/language-core@~2.0.4", "@volar/language-core@2.0.4":
- version "2.0.4"
- resolved "https://registry.npmjs.org/@volar/language-core/-/language-core-2.0.4.tgz"
- integrity sha512-VhC8i03P0x9LKGLTBi81xNTNWm40yxQ/Iba8IpH+LFr+Yb7c/D7fF90Cvf31MzPDM4G5rjIOlCfs+eQKPBkwQw==
+"@volar/language-core@~2.4.5", "@volar/language-core@2.4.6":
+ version "2.4.6"
+ resolved "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.6.tgz"
+ integrity sha512-FxUfxaB8sCqvY46YjyAAV6c3mMIq/NWQMVvJ+uS4yxr1KzOvyg61gAuOnNvgCvO4TZ7HcLExBEsWcDu4+K4E8A==
dependencies:
- "@volar/source-map" "2.0.4"
+ "@volar/source-map" "2.4.6"
-"@volar/language-server@~2.0.4":
- version "2.0.4"
- resolved "https://registry.npmjs.org/@volar/language-server/-/language-server-2.0.4.tgz"
- integrity sha512-VnljhooQjT6RhmvwwJK9+3YYs2ovFmav4IVNHiQgnTMfiOiyABzcghwvJrJrI39rJDI6LNOWF7BYUJq7K07BKQ==
- dependencies:
- "@volar/language-core" "2.0.4"
- "@volar/language-service" "2.0.4"
- "@volar/snapshot-document" "2.0.4"
- "@volar/typescript" "2.0.4"
- "@vscode/l10n" "^0.0.16"
+"@volar/language-server@~2.4.5":
+ version "2.4.6"
+ resolved "https://registry.npmjs.org/@volar/language-server/-/language-server-2.4.6.tgz"
+ integrity sha512-ARIbMXapEUPj9UFbZqWqw/iZ+ZuxUcY+vY212+2uutZVo/jrdzhLPu2TfZd9oB9akX8XXuslinT3051DyHLLRA==
+ dependencies:
+ "@volar/language-core" "2.4.6"
+ "@volar/language-service" "2.4.6"
+ "@volar/typescript" "2.4.6"
path-browserify "^1.0.1"
request-light "^0.7.0"
vscode-languageserver "^9.0.1"
@@ -1011,43 +1273,34 @@
vscode-languageserver-textdocument "^1.0.11"
vscode-uri "^3.0.8"
-"@volar/language-service@~2.0.1", "@volar/language-service@~2.0.4", "@volar/language-service@2.0.4":
- version "2.0.4"
- resolved "https://registry.npmjs.org/@volar/language-service/-/language-service-2.0.4.tgz"
- integrity sha512-DoanyU9I9Nl85lUytDl8jgyk+nrUDR5CFNVMrxWXGXclP4WTqBayBgSFAeF1L/5AwP3MywmWoK4GLAEVvl8D+Q==
+"@volar/language-service@~2.4.0", "@volar/language-service@~2.4.5", "@volar/language-service@2.4.6":
+ version "2.4.6"
+ resolved "https://registry.npmjs.org/@volar/language-service/-/language-service-2.4.6.tgz"
+ integrity sha512-wNeEVBgBKgpP1MfMYPrgTf1K8nhOGEh3ac0+9n6ECyk2N03+j0pWCpQ2i99mRWT/POvo1PgizDmYFH8S67bZOA==
dependencies:
- "@volar/language-core" "2.0.4"
+ "@volar/language-core" "2.4.6"
vscode-languageserver-protocol "^3.17.5"
vscode-languageserver-textdocument "^1.0.11"
vscode-uri "^3.0.8"
-"@volar/snapshot-document@2.0.4":
- version "2.0.4"
- resolved "https://registry.npmjs.org/@volar/snapshot-document/-/snapshot-document-2.0.4.tgz"
- integrity sha512-YzgdmvpdRFxiBFCOVWga67naAtbPtKmPaFtGnmxWx+KXrjGkpUXT/2tzeKn5FLdtoYV+DRTdpMdP/45ArnVwZQ==
- dependencies:
- vscode-languageserver-protocol "^3.17.5"
- vscode-languageserver-textdocument "^1.0.11"
-
-"@volar/source-map@2.0.4":
- version "2.0.4"
- resolved "https://registry.npmjs.org/@volar/source-map/-/source-map-2.0.4.tgz"
- integrity sha512-BbxUinEMoJZqrHsSj1aBa0boCBnN3BoXnf7j9IBwjxosxGXOhCvqmH2L9raJemadaKjeVR8ZQLhV7AOhyoHt/Q==
- dependencies:
- muggle-string "^0.4.0"
+"@volar/source-map@2.4.6":
+ version "2.4.6"
+ resolved "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.6.tgz"
+ integrity sha512-Nsh7UW2ruK+uURIPzjJgF0YRGP5CX9nQHypA2OMqdM2FKy7rh+uv3XgPnWPw30JADbKvZ5HuBzG4gSbVDYVtiw==
-"@volar/typescript@~2.0.1", "@volar/typescript@~2.0.4", "@volar/typescript@2.0.4":
- version "2.0.4"
- resolved "https://registry.npmjs.org/@volar/typescript/-/typescript-2.0.4.tgz"
- integrity sha512-KF7yh7GIo4iWuAQOKf/ONeFHdQA+wFriitW8LtGZB4iOOT6MdlRlYNsRL8do7XxmXvsBKcs4jTMtGn+uZRwlWg==
+"@volar/typescript@2.4.6":
+ version "2.4.6"
+ resolved "https://registry.npmjs.org/@volar/typescript/-/typescript-2.4.6.tgz"
+ integrity sha512-NMIrA7y5OOqddL9VtngPWYmdQU03htNKFtAYidbYfWA0TOhyGVd9tfcP4TsLWQ+RBWDZCbBqsr8xzU0ZOxYTCQ==
dependencies:
- "@volar/language-core" "2.0.4"
+ "@volar/language-core" "2.4.6"
path-browserify "^1.0.1"
+ vscode-uri "^3.0.8"
-"@vscode/emmet-helper@^2.9.2":
- version "2.9.2"
- resolved "https://registry.npmjs.org/@vscode/emmet-helper/-/emmet-helper-2.9.2.tgz"
- integrity sha512-MaGuyW+fa13q3aYsluKqclmh62Hgp0BpKIqS66fCxfOaBcVQ1OnMQxRRgQUYnCkxFISAQlkJ0qWWPyXjro1Qrg==
+"@vscode/emmet-helper@^2.9.3":
+ version "2.9.3"
+ resolved "https://registry.npmjs.org/@vscode/emmet-helper/-/emmet-helper-2.9.3.tgz"
+ integrity sha512-rB39LHWWPQYYlYfpv9qCoZOVioPCftKXXqrsyqN1mTWZM6dTnONT63Db+03vgrBbHzJN45IrgS/AGxw9iiqfEw==
dependencies:
emmet "^2.4.3"
jsonc-parser "^2.3.0"
@@ -1055,11 +1308,6 @@
vscode-languageserver-types "^3.15.1"
vscode-uri "^2.1.2"
-"@vscode/l10n@^0.0.16":
- version "0.0.16"
- resolved "https://registry.npmjs.org/@vscode/l10n/-/l10n-0.0.16.tgz"
- integrity sha512-JT5CvrIYYCrmB+dCana8sUqJEcGB1ZDXNLMQ2+42bW995WmNoenijWMUdZfwmuQUTQcEVVIa2OecZzTYWUW9Cg==
-
"@vscode/l10n@^0.0.18":
version "0.0.18"
resolved "https://registry.npmjs.org/@vscode/l10n/-/l10n-0.0.18.tgz"
@@ -1239,6 +1487,16 @@ ajv@^6.12.5, ajv@^6.9.1:
json-schema-traverse "^0.4.1"
uri-js "^4.2.2"
+ajv@^8.11.0:
+ version "8.17.1"
+ resolved "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz"
+ integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==
+ dependencies:
+ fast-deep-equal "^3.1.3"
+ fast-uri "^3.0.1"
+ json-schema-traverse "^1.0.0"
+ require-from-string "^2.0.2"
+
ansi-align@^3.0.1:
version "3.0.1"
resolved "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz"
@@ -1282,7 +1540,7 @@ ansi-styles@^5.0.0:
resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz"
integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==
-ansi-styles@^6.1.0:
+ansi-styles@^6.1.0, ansi-styles@^6.2.1:
version "6.2.1"
resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz"
integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==
@@ -1317,12 +1575,10 @@ argparse@^2.0.1:
resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz"
integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
-aria-query@^5.3.0:
- version "5.3.0"
- resolved "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz"
- integrity sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==
- dependencies:
- dequal "^2.0.3"
+aria-query@^5.3.2:
+ version "5.3.2"
+ resolved "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz"
+ integrity sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==
array-iterate@^2.0.0:
version "2.0.1"
@@ -1334,42 +1590,41 @@ assertion-error@^1.1.0:
resolved "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz"
integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==
-"astro@^3.0.0 || ^4.0.0", astro@^4.15.7, astro@^4.2.0:
- version "4.15.7"
- resolved "https://registry.npmjs.org/astro/-/astro-4.15.7.tgz"
- integrity sha512-RGZjGpLcR3jcnXA1+g56i73O77krmqs7VjpoBOfk9UVP8Js5T2YSeUBAyComOUb6vj31wEw1vgRgOEN0MzYc8w==
+"astro@^3.0.0 || ^4.0.0 || ^5.0.0-beta.0", astro@^4.16.2, astro@^4.2.0:
+ version "4.16.2"
+ resolved "https://registry.npmjs.org/astro/-/astro-4.16.2.tgz"
+ integrity sha512-Dfkpyt6sA+nv6LnOJr+7bt+gQF5Qh02yqVgyes4c4SvcPScteq1bLX22/z/XW+VU0vlciJOMiM8GWtcDiF6gUQ==
dependencies:
"@astrojs/compiler" "^2.10.3"
"@astrojs/internal-helpers" "0.4.1"
- "@astrojs/markdown-remark" "5.2.0"
+ "@astrojs/markdown-remark" "5.3.0"
"@astrojs/telemetry" "3.1.0"
- "@babel/core" "^7.25.2"
- "@babel/plugin-transform-react-jsx" "^7.25.2"
- "@babel/types" "^7.25.6"
- "@oslojs/encoding" "^0.4.1"
- "@rollup/pluginutils" "^5.1.0"
+ "@babel/core" "^7.25.7"
+ "@babel/plugin-transform-react-jsx" "^7.25.7"
+ "@babel/types" "^7.25.7"
+ "@oslojs/encoding" "^1.1.0"
+ "@rollup/pluginutils" "^5.1.2"
"@types/babel__core" "^7.20.5"
"@types/cookie" "^0.6.0"
acorn "^8.12.1"
- aria-query "^5.3.0"
+ aria-query "^5.3.2"
axobject-query "^4.1.0"
- boxen "7.1.1"
+ boxen "8.0.1"
ci-info "^4.0.0"
clsx "^2.1.1"
common-ancestor-path "^1.0.1"
- cookie "^0.6.0"
+ cookie "^0.7.2"
cssesc "^3.0.0"
debug "^4.3.7"
deterministic-object-hash "^2.0.2"
- devalue "^5.0.0"
+ devalue "^5.1.1"
diff "^5.2.0"
dlv "^1.1.3"
- dset "^3.1.3"
+ dset "^3.1.4"
es-module-lexer "^1.5.4"
esbuild "^0.21.5"
estree-walker "^3.0.3"
fast-glob "^3.3.2"
- fastq "^1.17.1"
flattie "^1.1.1"
github-slugger "^2.0.0"
gray-matter "^4.0.3"
@@ -1385,25 +1640,22 @@ assertion-error@^1.1.0:
ora "^8.1.0"
p-limit "^6.1.0"
p-queue "^8.0.1"
- path-to-regexp "6.2.2"
preferred-pm "^4.0.0"
prompts "^2.4.2"
- rehype "^13.0.1"
+ rehype "^13.0.2"
semver "^7.6.3"
- shiki "^1.16.2"
- string-width "^7.2.0"
- strip-ansi "^7.1.0"
+ shiki "^1.22.0"
tinyexec "^0.3.0"
tsconfck "^3.1.3"
unist-util-visit "^5.0.0"
vfile "^6.0.3"
- vite "^5.4.3"
+ vite "^5.4.8"
vitefu "^1.0.2"
which-pm "^3.0.0"
xxhash-wasm "^1.0.2"
yargs-parser "^21.1.1"
zod "^3.23.8"
- zod-to-json-schema "^3.23.2"
+ zod-to-json-schema "^3.23.3"
zod-to-ts "^1.2.0"
optionalDependencies:
sharp "^0.33.3"
@@ -1418,16 +1670,16 @@ asynckit@^0.4.0:
resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz"
integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==
-autoprefixer@^10.4.15:
- version "10.4.17"
- resolved "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.17.tgz"
- integrity sha512-/cpVNRLSfhOtcGflT13P2794gVSgmPgTR+erw5ifnMLZb0UnSlkK4tquLmkd3BhA+nLo5tX8Cu0upUsGKvKbmg==
+autoprefixer@^10.4.20:
+ version "10.4.20"
+ resolved "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz"
+ integrity sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==
dependencies:
- browserslist "^4.22.2"
- caniuse-lite "^1.0.30001578"
+ browserslist "^4.23.3"
+ caniuse-lite "^1.0.30001646"
fraction.js "^4.3.7"
normalize-range "^0.1.2"
- picocolors "^1.0.0"
+ picocolors "^1.0.1"
postcss-value-parser "^4.2.0"
axios@^1.7.7:
@@ -1478,19 +1730,19 @@ binary-extensions@^2.0.0:
resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz"
integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
-boxen@7.1.1:
- version "7.1.1"
- resolved "https://registry.npmjs.org/boxen/-/boxen-7.1.1.tgz"
- integrity sha512-2hCgjEmP8YLWQ130n2FerGv7rYpfBmnmp9Uy2Le1vge6X3gZIfSmEzP5QTDElFxcvVcXlEn8Aq6MU/PZygIOog==
+boxen@8.0.1:
+ version "8.0.1"
+ resolved "https://registry.npmjs.org/boxen/-/boxen-8.0.1.tgz"
+ integrity sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==
dependencies:
ansi-align "^3.0.1"
- camelcase "^7.0.1"
- chalk "^5.2.0"
+ camelcase "^8.0.0"
+ chalk "^5.3.0"
cli-boxes "^3.0.0"
- string-width "^5.1.2"
- type-fest "^2.13.0"
- widest-line "^4.0.1"
- wrap-ansi "^8.1.0"
+ string-width "^7.2.0"
+ type-fest "^4.21.0"
+ widest-line "^5.0.0"
+ wrap-ansi "^9.0.0"
brace-expansion@^1.1.7:
version "1.1.11"
@@ -1514,13 +1766,13 @@ braces@^3.0.3, braces@~3.0.2:
dependencies:
fill-range "^7.1.1"
-browserslist@^4.21.10, browserslist@^4.22.2, browserslist@^4.23.1, "browserslist@>= 4.21.0":
- version "4.23.3"
- resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz"
- integrity sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==
+browserslist@^4.21.10, browserslist@^4.23.3, browserslist@^4.24.0, "browserslist@>= 4.21.0":
+ version "4.24.0"
+ resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.24.0.tgz"
+ integrity sha512-Rmb62sR1Zpjql25eSanFGEhAxcFwfA1K0GuQcLoaJBAcENegrQut3hYdhXFF1obQfiDyqIW/cLM5HSJ/9k884A==
dependencies:
- caniuse-lite "^1.0.30001646"
- electron-to-chromium "^1.5.4"
+ caniuse-lite "^1.0.30001663"
+ electron-to-chromium "^1.5.28"
node-releases "^2.0.18"
update-browserslist-db "^1.1.0"
@@ -1562,15 +1814,15 @@ camelcase-css@^2.0.1:
resolved "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz"
integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==
-camelcase@^7.0.1:
- version "7.0.1"
- resolved "https://registry.npmjs.org/camelcase/-/camelcase-7.0.1.tgz"
- integrity sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==
+camelcase@^8.0.0:
+ version "8.0.0"
+ resolved "https://registry.npmjs.org/camelcase/-/camelcase-8.0.0.tgz"
+ integrity sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==
-caniuse-lite@^1.0.30001578, caniuse-lite@^1.0.30001646:
- version "1.0.30001655"
- resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001655.tgz"
- integrity sha512-jRGVy3iSGO5Uutn2owlb5gR6qsGngTw9ZTb4ali9f3glshcNmJ2noam4Mo9zia5P9Dk3jNNydy7vQjuE5dQmfg==
+caniuse-lite@^1.0.30001646, caniuse-lite@^1.0.30001663:
+ version "1.0.30001667"
+ resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001667.tgz"
+ integrity sha512-7LTwJjcRkzKFmtqGsibMeuXmvFDfZq/nzIjnmgCGzKKRVzjD72selLDK1oPF/Oxzmt4fNcPvTDvGqSDG4tCALw==
ccount@^2.0.0:
version "2.0.1"
@@ -1607,7 +1859,7 @@ chalk@^4.0.2:
ansi-styles "^4.1.0"
supports-color "^7.1.0"
-chalk@^5.2.0, chalk@^5.3.0:
+chalk@^5.3.0:
version "5.3.0"
resolved "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz"
integrity sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==
@@ -1649,6 +1901,13 @@ chokidar@^3.5.3:
optionalDependencies:
fsevents "~2.3.2"
+chokidar@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.npmjs.org/chokidar/-/chokidar-4.0.1.tgz"
+ integrity sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==
+ dependencies:
+ readdirp "^4.0.1"
+
chrome-trace-event@^1.0.2:
version "1.0.4"
resolved "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz"
@@ -1699,7 +1958,7 @@ clone-response@^1.0.2:
dependencies:
mimic-response "^1.0.0"
-clsx@^2.1.0, clsx@^2.1.1:
+clsx@^2.0.0, clsx@^2.1.0, clsx@^2.1.1:
version "2.1.1"
resolved "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz"
integrity sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==
@@ -1791,10 +2050,10 @@ convert-source-map@^2.0.0:
resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz"
integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==
-cookie@^0.6.0:
- version "0.6.0"
- resolved "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz"
- integrity sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==
+cookie@^0.7.2:
+ version "0.7.2"
+ resolved "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz"
+ integrity sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==
copy-to-clipboard@^3.3.1:
version "3.3.3"
@@ -1898,7 +2157,7 @@ depd@2.0.0:
resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz"
integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==
-dequal@^2.0.0, dequal@^2.0.3:
+dequal@^2.0.0:
version "2.0.3"
resolved "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz"
integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==
@@ -1920,10 +2179,10 @@ deterministic-object-hash@^2.0.2:
dependencies:
base-64 "^1.0.0"
-devalue@^5.0.0:
- version "5.0.0"
- resolved "https://registry.npmjs.org/devalue/-/devalue-5.0.0.tgz"
- integrity sha512-gO+/OMXF7488D+u3ue+G7Y4AA3ZmUnB3eHJXmBTgNHvr4ZNzl36A0ZtG+XCRNYCkYx/bFmw4qtkoFLa+wSrwAA==
+devalue@^5.1.1:
+ version "5.1.1"
+ resolved "https://registry.npmjs.org/devalue/-/devalue-5.1.1.tgz"
+ integrity sha512-maua5KUiapvEwiEAe+XnlZ3Rh0GD+qI1J/nb9vrJc3muPXvcF/8gXYTWF76+5DAqHyDUtOIImEuo0YKE9mshVw==
devlop@^1.0.0, devlop@^1.1.0:
version "1.1.0"
@@ -1965,7 +2224,7 @@ dotenv@^16.4.5:
resolved "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz"
integrity sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==
-dset@^3.1.3:
+dset@^3.1.3, dset@^3.1.4:
version "3.1.4"
resolved "https://registry.npmjs.org/dset/-/dset-3.1.4.tgz"
integrity sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==
@@ -1987,15 +2246,15 @@ ejs@^3.1.9:
dependencies:
jake "^10.8.5"
-electron-to-chromium@^1.5.4:
- version "1.5.13"
- resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.13.tgz"
- integrity sha512-lbBcvtIJ4J6sS4tb5TLp1b4LyfCdMkwStzXPyAgVgTRAsep4bvrAGaBOP7ZJtQMNJpSQ9SqG4brWOroNaQtm7Q==
+electron-to-chromium@^1.5.28:
+ version "1.5.33"
+ resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.33.tgz"
+ integrity sha512-+cYTcFB1QqD4j4LegwLfpCNxifb6dDFUAwk6RsLusCwIaZI6or2f+q8rs5tTB2YC53HhOlIbEaqHMAAC8IOIwA==
emmet@^2.4.3:
- version "2.4.6"
- resolved "https://registry.npmjs.org/emmet/-/emmet-2.4.6.tgz"
- integrity sha512-dJfbdY/hfeTyf/Ef7Y7ubLYzkBvPQ912wPaeVYpAxvFxkEBf/+hJu4H6vhAvFN6HlxqedlfVn2x1S44FfQ97pg==
+ version "2.4.11"
+ resolved "https://registry.npmjs.org/emmet/-/emmet-2.4.11.tgz"
+ integrity sha512-23QPJB3moh/U9sT4rQzGgeyyGIrcM+GH5uVYg2C6wZIxAIJq7Ng3QLT79tl8FUwDXhyq9SusfknOrofAKqvgyQ==
dependencies:
"@emmetio/abbreviation" "^2.3.3"
"@emmetio/css-abbreviation" "^2.1.8"
@@ -2020,10 +2279,10 @@ emojis-list@^3.0.0:
resolved "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz"
integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==
-encodeurl@~1.0.2:
- version "1.0.2"
- resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz"
- integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==
+encodeurl@~2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz"
+ integrity sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==
end-of-stream@^1.1.0:
version "1.4.4"
@@ -2212,7 +2471,7 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz"
integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
-fast-glob@^3.2.12, fast-glob@^3.3.0, fast-glob@^3.3.1, fast-glob@^3.3.2:
+fast-glob@^3.2.12, fast-glob@^3.3.0, fast-glob@^3.3.2:
version "3.3.2"
resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz"
integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==
@@ -2233,12 +2492,17 @@ fast-shallow-equal@^1.0.0:
resolved "https://registry.npmjs.org/fast-shallow-equal/-/fast-shallow-equal-1.0.0.tgz"
integrity sha512-HPtaa38cPgWvaCFmRNhlc6NG7pv6NUHqjPgVAkWGoB9mQMwYB27/K0CvOM5Czy+qpT3e8XJ6Q4aPAnzpNpzNaw==
+fast-uri@^3.0.1:
+ version "3.0.2"
+ resolved "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.2.tgz"
+ integrity sha512-GR6f0hD7XXyNJa25Tb9BuIdN0tdr+0BMi6/CJPH3wJO1JjNG3n/VsSw38AwRdKZABm8lGbPfakLRkYzx2V9row==
+
fastest-stable-stringify@^2.0.2:
version "2.0.2"
resolved "https://registry.npmjs.org/fastest-stable-stringify/-/fastest-stable-stringify-2.0.2.tgz"
integrity sha512-bijHueCGd0LqqNK9b5oCMHc0MluJAx0cwqASgbWMvkO01lCYgIhacVRLcaDz3QnyYIRNJRDwMb41VuT6pHJ91Q==
-fastq@^1.17.1, fastq@^1.6.0:
+fastq@^1.6.0:
version "1.17.1"
resolved "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz"
integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==
@@ -2456,10 +2720,10 @@ hasown@^2.0.0:
dependencies:
function-bind "^1.1.2"
-hast-util-from-html@^2.0.0, hast-util-from-html@^2.0.1:
- version "2.0.1"
- resolved "https://registry.npmjs.org/hast-util-from-html/-/hast-util-from-html-2.0.1.tgz"
- integrity sha512-RXQBLMl9kjKVNkJTIO6bZyb2n+cUH8LFaSSzo82jiLT6Tfc+Pt7VQCS+/h3YwG4jaNE2TA2sdJisGWR+aJrp0g==
+hast-util-from-html@^2.0.0, hast-util-from-html@^2.0.3:
+ version "2.0.3"
+ resolved "https://registry.npmjs.org/hast-util-from-html/-/hast-util-from-html-2.0.3.tgz"
+ integrity sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==
dependencies:
"@types/hast" "^3.0.0"
devlop "^1.1.0"
@@ -2497,9 +2761,9 @@ hast-util-parse-selector@^4.0.0:
"@types/hast" "^3.0.0"
hast-util-raw@^9.0.0:
- version "9.0.2"
- resolved "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-9.0.2.tgz"
- integrity sha512-PldBy71wO9Uq1kyaMch9AHIghtQvIwxBUkv823pKmkTM3oV1JxtsTNYdevMxvUHqcnOAuO65JKU2+0NOxc2ksA==
+ version "9.0.4"
+ resolved "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-9.0.4.tgz"
+ integrity sha512-LHE65TD2YiNsHD3YuXcKPHXPLuYh/gjp12mOfU8jxSrm1f/yJpsb0F/KKljS6U9LJoP0Ux+tCe8iJ2AsPzTdgA==
dependencies:
"@types/hast" "^3.0.0"
"@types/unist" "^3.0.0"
@@ -2515,7 +2779,7 @@ hast-util-raw@^9.0.0:
web-namespaces "^2.0.0"
zwitch "^2.0.0"
-hast-util-to-html@^9.0.0, hast-util-to-html@^9.0.2:
+hast-util-to-html@^9.0.0, hast-util-to-html@^9.0.3:
version "9.0.3"
resolved "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.3.tgz"
integrity sha512-M17uBDzMJ9RPCqLMO92gNNUDuBSq10a25SDBI08iCCxmorf4Yy6sYHK57n9WAbRAAaU+DuR4W6GN9K4DFZesYg==
@@ -2842,10 +3106,10 @@ js-yaml@^4.1.0:
dependencies:
argparse "^2.0.1"
-jsesc@^2.5.1:
- version "2.5.2"
- resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz"
- integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==
+jsesc@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz"
+ integrity sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==
json-buffer@3.0.1:
version "3.0.1"
@@ -2862,6 +3126,11 @@ json-schema-traverse@^0.4.1:
resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz"
integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
+json-schema-traverse@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz"
+ integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==
+
json5@^2.1.2, json5@^2.2.3:
version "2.2.3"
resolved "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz"
@@ -2872,6 +3141,11 @@ jsonc-parser@^2.3.0:
resolved "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-2.3.1.tgz"
integrity sha512-H8jvkz1O50L3dMZCsLqiuB2tA7muqbSg1AtGEkN0leAqGjsUzDJir3Zwr02BhqdcITPg3ei3mZ+HjMocAknhhg==
+jsonc-parser@^3.0.0:
+ version "3.3.1"
+ resolved "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz"
+ integrity sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==
+
jsonc-parser@^3.2.0:
version "3.2.1"
resolved "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz"
@@ -2960,6 +3234,11 @@ locate-path@^5.0.0:
dependencies:
p-locate "^4.1.0"
+lodash@4.17.21:
+ version "4.17.21"
+ resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz"
+ integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
+
log-symbols@^6.0.0:
version "6.0.0"
resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-6.0.0.tgz"
@@ -2999,13 +3278,6 @@ lru-cache@^5.1.1:
dependencies:
yallist "^3.0.2"
-lru-cache@^6.0.0:
- version "6.0.0"
- resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz"
- integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==
- dependencies:
- yallist "^4.0.0"
-
"lru-cache@^9.1.1 || ^10.0.0":
version "10.2.0"
resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz"
@@ -3160,9 +3432,9 @@ mdast-util-phrasing@^4.0.0:
unist-util-is "^6.0.0"
mdast-util-to-hast@^13.0.0:
- version "13.0.2"
- resolved "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.0.2.tgz"
- integrity sha512-U5I+500EOOw9e3ZrclN3Is3fRpw8c19SMyNZlZ2IS+7vLsNzb2Om11VpIVOR+/0137GhZsFEF6YiKD5+0Hr2Og==
+ version "13.2.0"
+ resolved "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz"
+ integrity sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==
dependencies:
"@types/hast" "^3.0.0"
"@types/mdast" "^4.0.0"
@@ -3172,6 +3444,7 @@ mdast-util-to-hast@^13.0.0:
trim-lines "^3.0.0"
unist-util-position "^5.0.0"
unist-util-visit "^5.0.0"
+ vfile "^6.0.0"
mdast-util-to-markdown@^2.0.0:
version "2.1.0"
@@ -3596,7 +3869,7 @@ ms@2.0.0:
resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz"
integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==
-muggle-string@^0.4.0:
+muggle-string@^0.4.1:
version "0.4.1"
resolved "https://registry.npmjs.org/muggle-string/-/muggle-string-0.4.1.tgz"
integrity sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==
@@ -3916,11 +4189,6 @@ path-scurry@^1.10.1:
lru-cache "^9.1.1 || ^10.0.0"
minipass "^5.0.0 || ^6.0.2 || ^7.0.0"
-path-to-regexp@6.2.2:
- version "6.2.2"
- resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.2.tgz"
- integrity sha512-GQX3SSMokngb36+whdpRXE+3f9V8UzyAorlYvOGx87ufGHehNTn5lCxrKtLyZ4Yl/wEKnNnr98ZzOwwDZV5ogw==
-
path-type@^4.0.0:
version "4.0.0"
resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz"
@@ -4026,7 +4294,7 @@ postcss-value-parser@^4.0.0, postcss-value-parser@^4.2.0:
resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz"
integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==
-postcss@^8.0.0, postcss@^8.1.0, postcss@^8.2.14, postcss@^8.4.21, postcss@^8.4.23, postcss@^8.4.28, postcss@^8.4.43, postcss@>=8.0.9:
+postcss@^8.0.0, postcss@^8.1.0, postcss@^8.2.14, postcss@^8.4.21, postcss@^8.4.23, postcss@^8.4.43, postcss@^8.4.47, postcss@>=8.0.9:
version "8.4.47"
resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz"
integrity sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==
@@ -4044,6 +4312,16 @@ preferred-pm@^4.0.0:
find-yarn-workspace-root2 "1.2.16"
which-pm "^3.0.0"
+"prettier@^2.2 || ^3.0", prettier@^3.0.0:
+ version "3.3.3"
+ resolved "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz"
+ integrity sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==
+
+prettier@2.8.7:
+ version "2.8.7"
+ resolved "https://registry.npmjs.org/prettier/-/prettier-2.8.7.tgz"
+ integrity sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw==
+
pretty-format@^29.7.0:
version "29.7.0"
resolved "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz"
@@ -4053,6 +4331,15 @@ pretty-format@^29.7.0:
ansi-styles "^5.0.0"
react-is "^18.0.0"
+prisma@*, prisma@^5.20.0:
+ version "5.20.0"
+ resolved "https://registry.npmjs.org/prisma/-/prisma-5.20.0.tgz"
+ integrity sha512-6obb3ucKgAnsGS9x9gLOe8qa51XxvJ3vLQtmyf52CTey1Qcez3A6W6ROH5HIz5Q5bW+0VpmZb8WBohieMFGpig==
+ dependencies:
+ "@prisma/engines" "5.20.0"
+ optionalDependencies:
+ fsevents "2.3.3"
+
prismjs@^1.27.0, prismjs@^1.29.0:
version "1.29.0"
resolved "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz"
@@ -4076,9 +4363,9 @@ prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1:
react-is "^16.13.1"
property-information@^6.0.0:
- version "6.4.1"
- resolved "https://registry.npmjs.org/property-information/-/property-information-6.4.1.tgz"
- integrity sha512-OHYtXfu5aI2sS2LWFSN5rgJjrQ4pCy8i1jubJLe2QvMF8JJ++HXTUIVWFLfXJoaOfvYYjk2SN8J2wFUWIGXT4w==
+ version "6.5.0"
+ resolved "https://registry.npmjs.org/property-information/-/property-information-6.5.0.tgz"
+ integrity sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==
proxy-from-env@^1.1.0:
version "1.1.0"
@@ -4120,7 +4407,7 @@ range-parser@~1.2.1:
resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz"
integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==
-react-dom@*, "react-dom@^0.14.0 || ^15.0.0 || ^16 || ^17 || ^18", "react-dom@^15 || ^16", "react-dom@^16.3.0 || ^17.0.0 || ^18.0.0", "react-dom@^17.0.0 || ^18.0.0", "react-dom@^17.0.2 || ^18.0.0 || ^19.0.0-beta", react-dom@^18.3.1, react-dom@>=16, react-dom@>=16.6.0, react-dom@>=16.8, react-dom@>=16.8.1:
+react-dom@*, "react-dom@^0.14.0 || ^15.0.0 || ^16 || ^17 || ^18", "react-dom@^15 || ^16", "react-dom@^16.3.0 || ^17.0.0 || ^18.0.0", "react-dom@^16.8.0 || ^17.0.0 || ^18.0.0", "react-dom@^17.0.0 || ^18.0.0", "react-dom@^17.0.2 || ^18.0.0 || ^19.0.0-beta", react-dom@^18, react-dom@^18.3.1, react-dom@>=16, react-dom@>=16.6.0, react-dom@>=16.8, react-dom@>=16.8.0, react-dom@>=16.8.1:
version "18.3.1"
resolved "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz"
integrity sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==
@@ -4271,7 +4558,7 @@ react-use@^17.3.1:
ts-easing "^0.2.0"
tslib "^2.1.0"
-react@*, "react@^0.14.0 || ^15.0.0 || ^16 || ^17 || ^18", "react@^15 || ^16", "react@^15.0.0 || ^16.0.0 || ^17.0.0", "react@^16.3.0 || ^17.0.0 || ^18.0.0", "react@^17.0.0 || ^18.0.0", "react@^17.0.2 || ^18.0.0 || ^19.0.0-beta", react@^18.3.1, react@>=16, react@>=16.6.0, react@>=16.8, react@>=16.8.0, react@>=16.8.1:
+react@*, "react@^0.14.0 || ^15.0.0 || ^16 || ^17 || ^18", "react@^15 || ^16", "react@^15.0.0 || ^16.0.0 || ^17.0.0", "react@^16.3.0 || ^17.0.0 || ^18.0.0", "react@^16.8.0 || ^17.0.0 || ^18.0.0", "react@^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0", "react@^17.0.0 || ^18.0.0", "react@^17.0.2 || ^18.0.0 || ^19.0.0-beta", react@^18, react@^18.3.1, "react@>= 16", react@>=16, react@>=16.6.0, react@>=16.8, react@>=16.8.0, react@>=16.8.1:
version "18.3.1"
resolved "https://registry.npmjs.org/react/-/react-18.3.1.tgz"
integrity sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==
@@ -4285,6 +4572,11 @@ read-cache@^1.0.0:
dependencies:
pify "^2.3.0"
+readdirp@^4.0.1:
+ version "4.0.2"
+ resolved "https://registry.npmjs.org/readdirp/-/readdirp-4.0.2.tgz"
+ integrity sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==
+
readdirp@~3.6.0:
version "3.6.0"
resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz"
@@ -4298,14 +4590,14 @@ regenerator-runtime@^0.14.0:
integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==
regex@^4.3.2:
- version "4.3.2"
- resolved "https://registry.npmjs.org/regex/-/regex-4.3.2.tgz"
- integrity sha512-kK/AA3A9K6q2js89+VMymcboLOlF5lZRCYJv3gzszXFHBr6kO6qLGzbm+UIugBEV8SMMKCTR59txoY6ctRHYVw==
+ version "4.3.3"
+ resolved "https://registry.npmjs.org/regex/-/regex-4.3.3.tgz"
+ integrity sha512-r/AadFO7owAq1QJVeZ/nq9jNS1vyZt+6t1p/E59B56Rn2GCya+gr1KSyOzNL/er+r+B7phv5jG2xU2Nz1YkmJg==
rehype-parse@^9.0.0:
- version "9.0.0"
- resolved "https://registry.npmjs.org/rehype-parse/-/rehype-parse-9.0.0.tgz"
- integrity sha512-WG7nfvmWWkCR++KEkZevZb/uw41E8TsH4DsY9UxsTbIXCVGbAs4S+r8FrQ+OtH5EEQAs+5UxKC42VinkmpA1Yw==
+ version "9.0.1"
+ resolved "https://registry.npmjs.org/rehype-parse/-/rehype-parse-9.0.1.tgz"
+ integrity sha512-ksCzCD0Fgfh7trPDxr2rSylbwq9iYDkSn8TCDmEJ49ljEUBxDVCzCHv7QNzZOfODanX4+bWQ4WZqLCRWYLfhag==
dependencies:
"@types/hast" "^3.0.0"
hast-util-from-html "^2.0.0"
@@ -4320,19 +4612,19 @@ rehype-raw@^7.0.0:
hast-util-raw "^9.0.0"
vfile "^6.0.0"
-rehype-stringify@^10.0.0:
- version "10.0.0"
- resolved "https://registry.npmjs.org/rehype-stringify/-/rehype-stringify-10.0.0.tgz"
- integrity sha512-1TX1i048LooI9QoecrXy7nGFFbFSufxVRAfc6Y9YMRAi56l+oB0zP51mLSV312uRuvVLPV1opSlJmslozR1XHQ==
+rehype-stringify@^10.0.0, rehype-stringify@^10.0.1:
+ version "10.0.1"
+ resolved "https://registry.npmjs.org/rehype-stringify/-/rehype-stringify-10.0.1.tgz"
+ integrity sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA==
dependencies:
"@types/hast" "^3.0.0"
hast-util-to-html "^9.0.0"
unified "^11.0.0"
-rehype@^13.0.1:
- version "13.0.1"
- resolved "https://registry.npmjs.org/rehype/-/rehype-13.0.1.tgz"
- integrity sha512-AcSLS2mItY+0fYu9xKxOu1LhUZeBZZBx8//5HKzF+0XP+eP8+6a5MXn2+DW2kfXR6Dtp1FEXMVrjyKAcvcU8vg==
+rehype@^13.0.2:
+ version "13.0.2"
+ resolved "https://registry.npmjs.org/rehype/-/rehype-13.0.2.tgz"
+ integrity sha512-j31mdaRFrwFRUIlxGeuPXXKWQxet52RBQRvCmzl5eCefn/KGbomK5GMHNMsOJf55fgo3qw5tST5neDuarDYR2A==
dependencies:
"@types/hast" "^3.0.0"
rehype-parse "^9.0.0"
@@ -4361,10 +4653,10 @@ remark-parse@^11.0.0:
micromark-util-types "^2.0.0"
unified "^11.0.0"
-remark-rehype@^11.1.0:
- version "11.1.0"
- resolved "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.0.tgz"
- integrity sha512-z3tJrAs2kIs1AqIIy6pzHmAHlF1hWQ+OdY4/hv+Wxe35EhyLKcajL33iUEn3ScxtFox9nUvRufR/Zre8Q08H/g==
+remark-rehype@^11.1.1:
+ version "11.1.1"
+ resolved "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.1.tgz"
+ integrity sha512-g/osARvjkBXb6Wo0XvAeXQohVta8i84ACbenPpoSsxTOQH/Ae0/RGP4WZgnMH5pMLpsj4FG7OHmcIcXxpza8eQ==
dependencies:
"@types/hast" "^3.0.0"
"@types/mdast" "^4.0.0"
@@ -4391,6 +4683,11 @@ remark-stringify@^11.0.0:
mdast-util-to-markdown "^2.0.0"
unified "^11.0.0"
+request-light@^0.5.7:
+ version "0.5.8"
+ resolved "https://registry.npmjs.org/request-light/-/request-light-0.5.8.tgz"
+ integrity sha512-3Zjgh+8b5fhRJBQZoy+zbVKpAQGLyka0MPgW3zruTF4dFFJ8Fqcfu9YsAvi/rvdcaTeWG3MkbZv4WKxAn/84Lg==
+
request-light@^0.7.0:
version "0.7.0"
resolved "https://registry.npmjs.org/request-light/-/request-light-0.7.0.tgz"
@@ -4401,6 +4698,11 @@ require-directory@^2.1.1:
resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz"
integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==
+require-from-string@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz"
+ integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==
+
resize-observer-polyfill@^1.5.1:
version "1.5.1"
resolved "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz"
@@ -4450,9 +4752,9 @@ retext-latin@^4.0.0:
unified "^11.0.0"
retext-smartypants@^6.0.0:
- version "6.1.1"
- resolved "https://registry.npmjs.org/retext-smartypants/-/retext-smartypants-6.1.1.tgz"
- integrity sha512-onsHf34i/GzgElJgtT1K2V+31yEhWs7NJboKNxXJcmVMMPxLpgxZ9iADoMdydd6j/bHic5F/aNq0CGqElEtu2g==
+ version "6.2.0"
+ resolved "https://registry.npmjs.org/retext-smartypants/-/retext-smartypants-6.2.0.tgz"
+ integrity sha512-kk0jOU7+zGv//kfjXEBjdIryL1Acl4i9XNkHxtM7Tm5lFiCog576fjNC9hjoR7LTKQ0DsPWy09JummSsH1uqfQ==
dependencies:
"@types/nlcst" "^2.0.0"
nlcst-to-string "^4.0.0"
@@ -4483,28 +4785,28 @@ reusify@^1.0.4:
integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
rollup@^1.20.0||^2.0.0||^3.0.0||^4.0.0, rollup@^4.20.0:
- version "4.21.3"
- resolved "https://registry.npmjs.org/rollup/-/rollup-4.21.3.tgz"
- integrity sha512-7sqRtBNnEbcBtMeRVc6VRsJMmpI+JU1z9VTvW8D4gXIYQFz0aLcsE6rRkyghZkLfEgUZgVvOG7A5CVz/VW5GIA==
+ version "4.24.0"
+ resolved "https://registry.npmjs.org/rollup/-/rollup-4.24.0.tgz"
+ integrity sha512-DOmrlGSXNk1DM0ljiQA+i+o0rSLhtii1je5wgk60j49d1jHT5YYttBv1iWOnYSTG+fZZESUOSNiAl89SIet+Cg==
dependencies:
- "@types/estree" "1.0.5"
+ "@types/estree" "1.0.6"
optionalDependencies:
- "@rollup/rollup-android-arm-eabi" "4.21.3"
- "@rollup/rollup-android-arm64" "4.21.3"
- "@rollup/rollup-darwin-arm64" "4.21.3"
- "@rollup/rollup-darwin-x64" "4.21.3"
- "@rollup/rollup-linux-arm-gnueabihf" "4.21.3"
- "@rollup/rollup-linux-arm-musleabihf" "4.21.3"
- "@rollup/rollup-linux-arm64-gnu" "4.21.3"
- "@rollup/rollup-linux-arm64-musl" "4.21.3"
- "@rollup/rollup-linux-powerpc64le-gnu" "4.21.3"
- "@rollup/rollup-linux-riscv64-gnu" "4.21.3"
- "@rollup/rollup-linux-s390x-gnu" "4.21.3"
- "@rollup/rollup-linux-x64-gnu" "4.21.3"
- "@rollup/rollup-linux-x64-musl" "4.21.3"
- "@rollup/rollup-win32-arm64-msvc" "4.21.3"
- "@rollup/rollup-win32-ia32-msvc" "4.21.3"
- "@rollup/rollup-win32-x64-msvc" "4.21.3"
+ "@rollup/rollup-android-arm-eabi" "4.24.0"
+ "@rollup/rollup-android-arm64" "4.24.0"
+ "@rollup/rollup-darwin-arm64" "4.24.0"
+ "@rollup/rollup-darwin-x64" "4.24.0"
+ "@rollup/rollup-linux-arm-gnueabihf" "4.24.0"
+ "@rollup/rollup-linux-arm-musleabihf" "4.24.0"
+ "@rollup/rollup-linux-arm64-gnu" "4.24.0"
+ "@rollup/rollup-linux-arm64-musl" "4.24.0"
+ "@rollup/rollup-linux-powerpc64le-gnu" "4.24.0"
+ "@rollup/rollup-linux-riscv64-gnu" "4.24.0"
+ "@rollup/rollup-linux-s390x-gnu" "4.24.0"
+ "@rollup/rollup-linux-x64-gnu" "4.24.0"
+ "@rollup/rollup-linux-x64-musl" "4.24.0"
+ "@rollup/rollup-win32-arm64-msvc" "4.24.0"
+ "@rollup/rollup-win32-ia32-msvc" "4.24.0"
+ "@rollup/rollup-win32-x64-msvc" "4.24.0"
fsevents "~2.3.2"
rtl-css-js@^1.16.1:
@@ -4561,33 +4863,29 @@ semver@^6.3.1:
integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
semver@^7.3.8:
- version "7.6.0"
- resolved "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz"
- integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==
- dependencies:
- lru-cache "^6.0.0"
+ version "7.6.3"
+ resolved "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz"
+ integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==
-semver@^7.5.4:
- version "7.6.0"
- resolved "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz"
- integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==
- dependencies:
- lru-cache "^6.0.0"
+semver@^7.6.2:
+ version "7.6.3"
+ resolved "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz"
+ integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==
semver@^7.6.3:
version "7.6.3"
resolved "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz"
integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==
-send@^0.18.0:
- version "0.18.0"
- resolved "https://registry.npmjs.org/send/-/send-0.18.0.tgz"
- integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==
+send@^0.19.0:
+ version "0.19.1"
+ resolved "https://registry.npmjs.org/send/-/send-0.19.1.tgz"
+ integrity sha512-p4rRk4f23ynFEfcD9LA0xRYngj+IyGiEYyqqOak8kaN0TvNmuxC2dcVeBn62GpCeR2CpWqyHCNScTP91QbAVFg==
dependencies:
debug "2.6.9"
depd "2.0.0"
destroy "1.2.0"
- encodeurl "~1.0.2"
+ encodeurl "~2.0.0"
escape-html "~1.0.3"
etag "~1.8.1"
fresh "0.5.2"
@@ -4666,16 +4964,16 @@ shell-quote@^1.8.1:
resolved "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz"
integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==
-shiki@^1.10.3, shiki@^1.16.2:
- version "1.17.7"
- resolved "https://registry.npmjs.org/shiki/-/shiki-1.17.7.tgz"
- integrity sha512-Zf6hNtWhFyF4XP5OOsXkBTEx9JFPiN0TQx4wSe+Vqeuczewgk2vT4IZhF4gka55uelm052BD5BaHavNqUNZd+A==
+shiki@^1.22.0:
+ version "1.22.0"
+ resolved "https://registry.npmjs.org/shiki/-/shiki-1.22.0.tgz"
+ integrity sha512-/t5LlhNs+UOKQCYBtl5ZsH/Vclz73GIqT2yQsCBygr8L/ppTdmpL4w3kPLoZJbMKVWtoG77Ue1feOjZfDxvMkw==
dependencies:
- "@shikijs/core" "1.17.7"
- "@shikijs/engine-javascript" "1.17.7"
- "@shikijs/engine-oniguruma" "1.17.7"
- "@shikijs/types" "1.17.7"
- "@shikijs/vscode-textmate" "^9.2.2"
+ "@shikijs/core" "1.22.0"
+ "@shikijs/engine-javascript" "1.22.0"
+ "@shikijs/engine-oniguruma" "1.22.0"
+ "@shikijs/types" "1.22.0"
+ "@shikijs/vscode-textmate" "^9.3.0"
"@types/hast" "^3.0.4"
siginfo@^2.0.0:
@@ -4837,7 +5135,7 @@ string-width@^5.1.2:
emoji-regex "^9.2.2"
strip-ansi "^7.0.1"
-string-width@^7.2.0:
+string-width@^7.0.0, string-width@^7.2.0:
version "7.2.0"
resolved "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz"
integrity sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==
@@ -4847,9 +5145,9 @@ string-width@^7.2.0:
strip-ansi "^7.1.0"
stringify-entities@^4.0.0:
- version "4.0.3"
- resolved "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.3.tgz"
- integrity sha512-BP9nNHMhhfcMbiuQKCqMjhDP5yBCAxsPu4pHFFzJ6Alo9dZgY4VLDPutXqIjpRiMoKdp7Av85Gr73Q5uH9k7+g==
+ version "4.0.4"
+ resolved "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz"
+ integrity sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==
dependencies:
character-entities-html4 "^2.0.0"
character-entities-legacy "^3.0.0"
@@ -4946,7 +5244,12 @@ supports-preserve-symlinks-flag@^1.0.0:
resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz"
integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
-tailwindcss@^3.0.24, tailwindcss@^3.4.1:
+tabbable@^6.0.0:
+ version "6.2.0"
+ resolved "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz"
+ integrity sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==
+
+tailwindcss@^3.0.24:
version "3.4.1"
resolved "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.1.tgz"
integrity sha512-qAYmXRfk3ENzuPBakNK0SRrUDipP8NQnEY6772uDhflcQz5EhRdD7JNZxyrFHVQNCwULPBn6FNPp9brpO7ctcA==
@@ -5101,7 +5404,7 @@ tsconfck@^3.1.3:
resolved "https://registry.npmjs.org/tsconfck/-/tsconfck-3.1.3.tgz"
integrity sha512-ulNZP1SVpRDesxeMLON/LtWM8HIgAJEIVpVVhBM6gsmvQ8+Rh+ZG7FWGvHh7Ah3pRABwVJWklWCr/BTZSv0xnQ==
-tslib@*, tslib@^2.1.0:
+tslib@*, tslib@^2.1.0, tslib@^2.4.0:
version "2.7.0"
resolved "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz"
integrity sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==
@@ -5111,20 +5414,20 @@ type-detect@^4.0.0, type-detect@^4.0.8:
resolved "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz"
integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==
-type-fest@^2.13.0:
- version "2.19.0"
- resolved "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz"
- integrity sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==
+type-fest@^4.21.0:
+ version "4.26.1"
+ resolved "https://registry.npmjs.org/type-fest/-/type-fest-4.26.1.tgz"
+ integrity sha512-yOGpmOAL7CkKe/91I5O3gPICmJNLJ1G4zFYVAsRHg7M64biSnPtRj0WNQt++bRkjYOqjWXrhnUw1utzmVErAdg==
typesafe-path@^0.2.2:
version "0.2.2"
resolved "https://registry.npmjs.org/typesafe-path/-/typesafe-path-0.2.2.tgz"
integrity sha512-OJabfkAg1WLZSqJAJ0Z6Sdt3utnbzr/jh+NAHoyWHJe8CMSy79Gm085094M9nvTPy22KzTVn5Zq5mbapCI/hPA==
-typescript-auto-import-cache@^0.3.1:
- version "0.3.2"
- resolved "https://registry.npmjs.org/typescript-auto-import-cache/-/typescript-auto-import-cache-0.3.2.tgz"
- integrity sha512-+laqe5SFL1vN62FPOOJSUDTZxtgsoOXjneYOXIpx5rQ4UMiN89NAtJLpqLqyebv9fgQ/IMeeTX+mQyRnwvJzvg==
+typescript-auto-import-cache@^0.3.3:
+ version "0.3.3"
+ resolved "https://registry.npmjs.org/typescript-auto-import-cache/-/typescript-auto-import-cache-0.3.3.tgz"
+ integrity sha512-ojEC7+Ci1ij9eE6hp8Jl9VUNnsEKzztktP5gtYNRMrTmfXVwA1PITYYAkpxCvvupdSYa/Re51B6KMcv1CTZEUA==
dependencies:
semver "^7.3.8"
@@ -5256,9 +5559,9 @@ util-deprecate@^1.0.2:
integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==
vfile-location@^5.0.0:
- version "5.0.2"
- resolved "https://registry.npmjs.org/vfile-location/-/vfile-location-5.0.2.tgz"
- integrity sha512-NXPYyxyBSH7zB5U6+3uDdd6Nybz6o6/od9rk8bp9H8GR3L+cm/fC0uUTbqBmUTnMCUDslAGBOIKNfvvb+gGlDg==
+ version "5.0.3"
+ resolved "https://registry.npmjs.org/vfile-location/-/vfile-location-5.0.3.tgz"
+ integrity sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==
dependencies:
"@types/unist" "^3.0.0"
vfile "^6.0.0"
@@ -5271,7 +5574,7 @@ vfile-message@^4.0.0:
"@types/unist" "^3.0.0"
unist-util-stringify-position "^4.0.0"
-vfile@^6.0.0, vfile@^6.0.2, vfile@^6.0.3:
+vfile@^6.0.0, vfile@^6.0.3:
version "6.0.3"
resolved "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz"
integrity sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==
@@ -5290,10 +5593,10 @@ vite-node@1.4.0:
picocolors "^1.0.0"
vite "^5.0.0"
-"vite@^3.0.0 || ^4.0.0 || ^5.0.0", "vite@^4.2.0 || ^5.0.0", vite@^5.0.0, vite@^5.4.3:
- version "5.4.6"
- resolved "https://registry.npmjs.org/vite/-/vite-5.4.6.tgz"
- integrity sha512-IeL5f8OO5nylsgzd9tq4qD2QqI0k2CQLGrWD0rCN0EQJZpBK5vJAx0I+GDkMOXxQX/OfFHMuLIx6ddAxGX/k+Q==
+"vite@^3.0.0 || ^4.0.0 || ^5.0.0", "vite@^4.2.0 || ^5.0.0", vite@^5.0.0, vite@^5.4.8:
+ version "5.4.8"
+ resolved "https://registry.npmjs.org/vite/-/vite-5.4.8.tgz"
+ integrity sha512-FqrItQ4DT1NC4zCUqMB4c4AZORMKIa0m8/URVCZ77OZ/QSNeJ54bU1vrFADbDsuwfIPcgknRkmqakQcgnL4GiQ==
dependencies:
esbuild "^0.21.3"
postcss "^8.4.43"
@@ -5332,74 +5635,104 @@ vitest@^1.4.0:
vite-node "1.4.0"
why-is-node-running "^2.2.2"
-volar-service-css@0.0.30:
- version "0.0.30"
- resolved "https://registry.npmjs.org/volar-service-css/-/volar-service-css-0.0.30.tgz"
- integrity sha512-jui+1N0HBfjW43tRfhyZp0axhBee4997BRyX4os8xQm/7cjD2KjAuyz92nMIPRt1QDoG4/7uQT28xNhy0TPJTA==
+volar-service-css@0.0.61:
+ version "0.0.61"
+ resolved "https://registry.npmjs.org/volar-service-css/-/volar-service-css-0.0.61.tgz"
+ integrity sha512-Ct9L/w+IB1JU8F4jofcNCGoHy6TF83aiapfZq9A0qYYpq+Kk5dH+ONS+rVZSsuhsunq8UvAuF8Gk6B8IFLfniw==
dependencies:
- vscode-css-languageservice "^6.2.10"
+ vscode-css-languageservice "^6.3.0"
+ vscode-languageserver-textdocument "^1.0.11"
vscode-uri "^3.0.8"
-volar-service-emmet@0.0.30:
- version "0.0.30"
- resolved "https://registry.npmjs.org/volar-service-emmet/-/volar-service-emmet-0.0.30.tgz"
- integrity sha512-HEeIrmqQ/DTfuQDI9ER5+YReXXjE9f7W6MlBmn5biUuPyizVTGfuILN8pJhmYvmPHCA7qHhU7CJqwE9DAh9AJg==
+volar-service-emmet@0.0.61:
+ version "0.0.61"
+ resolved "https://registry.npmjs.org/volar-service-emmet/-/volar-service-emmet-0.0.61.tgz"
+ integrity sha512-iiYqBxjjcekqrRruw4COQHZME6EZYWVbkHjHDbULpml3g8HGJHzpAMkj9tXNCPxf36A+f1oUYjsvZt36qPg4cg==
dependencies:
- "@vscode/emmet-helper" "^2.9.2"
- volar-service-html "0.0.30"
+ "@emmetio/css-parser" "^0.4.0"
+ "@emmetio/html-matcher" "^1.3.0"
+ "@vscode/emmet-helper" "^2.9.3"
+ vscode-uri "^3.0.8"
-volar-service-html@0.0.30:
- version "0.0.30"
- resolved "https://registry.npmjs.org/volar-service-html/-/volar-service-html-0.0.30.tgz"
- integrity sha512-wW3TEeRTeHv/3mC8Ik6T62SwewMWFungb8ydyEK/2GDHEntBEG/J9wtuh01/J0kYqPerhlT9zhdGB6PGYHAGuA==
+volar-service-html@0.0.61:
+ version "0.0.61"
+ resolved "https://registry.npmjs.org/volar-service-html/-/volar-service-html-0.0.61.tgz"
+ integrity sha512-yFE+YmmgqIL5HI4ORqP++IYb1QaGcv+xBboI0WkCxJJ/M35HZj7f5rbT3eQ24ECLXFbFCFanckwyWJVz5KmN3Q==
dependencies:
- vscode-html-languageservice "^5.1.0"
+ vscode-html-languageservice "^5.3.0"
+ vscode-languageserver-textdocument "^1.0.11"
vscode-uri "^3.0.8"
-volar-service-prettier@0.0.30:
- version "0.0.30"
- resolved "https://registry.npmjs.org/volar-service-prettier/-/volar-service-prettier-0.0.30.tgz"
- integrity sha512-Qdc5Zc0y4hJmJbpIQ52cSDjs0uvVug/e2nuL/XZWPJM6Cr5/3RjjoRVKtDQbKItFYlGk+JH+LSXvwQeD5TXZqg==
+volar-service-prettier@0.0.61:
+ version "0.0.61"
+ resolved "https://registry.npmjs.org/volar-service-prettier/-/volar-service-prettier-0.0.61.tgz"
+ integrity sha512-F612nql5I0IS8HxXemCGvOR2Uxd4XooIwqYVUvk7WSBxP/+xu1jYvE3QJ7EVpl8Ty3S4SxPXYiYTsG3bi+gzIQ==
dependencies:
vscode-uri "^3.0.8"
-volar-service-typescript-twoslash-queries@0.0.30:
- version "0.0.30"
- resolved "https://registry.npmjs.org/volar-service-typescript-twoslash-queries/-/volar-service-typescript-twoslash-queries-0.0.30.tgz"
- integrity sha512-ahj6woBxhkZu7icQR58x5TnUaS8ZRKn7a+UvY+andmiTWsOaSu85zj36+LPZgZQi1MG+BtjNwUjKoxtZiN51PA==
+volar-service-typescript-twoslash-queries@0.0.61:
+ version "0.0.61"
+ resolved "https://registry.npmjs.org/volar-service-typescript-twoslash-queries/-/volar-service-typescript-twoslash-queries-0.0.61.tgz"
+ integrity sha512-99FICGrEF0r1E2tV+SvprHPw9Knyg7BdW2fUch0tf59kG+KG+Tj4tL6tUg+cy8f23O/VXlmsWFMIE+bx1dXPnQ==
+ dependencies:
+ vscode-uri "^3.0.8"
-volar-service-typescript@0.0.30:
- version "0.0.30"
- resolved "https://registry.npmjs.org/volar-service-typescript/-/volar-service-typescript-0.0.30.tgz"
- integrity sha512-jA8c0Mhy9rgAsrgtwocK95Smws1M2E0MxlQ/SVo/rmOGH32cX9UGgI0IENWKa3yagp/khfoemOIQDz/KNhI3zg==
+volar-service-typescript@0.0.61:
+ version "0.0.61"
+ resolved "https://registry.npmjs.org/volar-service-typescript/-/volar-service-typescript-0.0.61.tgz"
+ integrity sha512-4kRHxVbW7wFBHZWRU6yWxTgiKETBDIJNwmJUAWeP0mHaKpnDGj/astdRFKqGFRYVeEYl45lcUPhdJyrzanjsdQ==
dependencies:
path-browserify "^1.0.1"
- semver "^7.5.4"
- typescript-auto-import-cache "^0.3.1"
+ semver "^7.6.2"
+ typescript-auto-import-cache "^0.3.3"
vscode-languageserver-textdocument "^1.0.11"
vscode-nls "^5.2.0"
vscode-uri "^3.0.8"
-vscode-css-languageservice@^6.2.10:
- version "6.2.12"
- resolved "https://registry.npmjs.org/vscode-css-languageservice/-/vscode-css-languageservice-6.2.12.tgz"
- integrity sha512-PS9r7HgNjqzRl3v91sXpCyZPc8UDotNo6gntFNtGCKPhGA9Frk7g/VjX1Mbv3F00pn56D+rxrFzR9ep4cawOgA==
+volar-service-yaml@0.0.61:
+ version "0.0.61"
+ resolved "https://registry.npmjs.org/volar-service-yaml/-/volar-service-yaml-0.0.61.tgz"
+ integrity sha512-L+gbDiLDQQ1rZUbJ3mf3doDsoQUa8OZM/xdpk/unMg1Vz24Zmi2Ign8GrZyBD7bRoIQDwOH9gdktGDKzRPpUNw==
+ dependencies:
+ vscode-uri "^3.0.8"
+ yaml-language-server "~1.15.0"
+
+vscode-css-languageservice@^6.3.0:
+ version "6.3.1"
+ resolved "https://registry.npmjs.org/vscode-css-languageservice/-/vscode-css-languageservice-6.3.1.tgz"
+ integrity sha512-1BzTBuJfwMc3A0uX4JBdJgoxp74cjj4q2mDJdp49yD/GuAq4X0k5WtK6fNcMYr+FfJ9nqgR6lpfCSZDkARJ5qQ==
dependencies:
"@vscode/l10n" "^0.0.18"
- vscode-languageserver-textdocument "^1.0.11"
+ vscode-languageserver-textdocument "^1.0.12"
vscode-languageserver-types "3.17.5"
vscode-uri "^3.0.8"
-vscode-html-languageservice@^5.1.0, vscode-html-languageservice@^5.1.2:
- version "5.1.2"
- resolved "https://registry.npmjs.org/vscode-html-languageservice/-/vscode-html-languageservice-5.1.2.tgz"
- integrity sha512-wkWfEx/IIR3s2P5yD4aTGHiOb8IAzFxgkSt1uSC3itJ4oDAm23yG7o0L29JljUdnXDDgLafPAvhv8A2I/8riHw==
+vscode-html-languageservice@^5.2.0, vscode-html-languageservice@^5.3.0:
+ version "5.3.1"
+ resolved "https://registry.npmjs.org/vscode-html-languageservice/-/vscode-html-languageservice-5.3.1.tgz"
+ integrity sha512-ysUh4hFeW/WOWz/TO9gm08xigiSsV/FOAZ+DolgJfeLftna54YdmZ4A+lIn46RbdO3/Qv5QHTn1ZGqmrXQhZyA==
dependencies:
"@vscode/l10n" "^0.0.18"
- vscode-languageserver-textdocument "^1.0.11"
+ vscode-languageserver-textdocument "^1.0.12"
vscode-languageserver-types "^3.17.5"
vscode-uri "^3.0.8"
+vscode-json-languageservice@4.1.8:
+ version "4.1.8"
+ resolved "https://registry.npmjs.org/vscode-json-languageservice/-/vscode-json-languageservice-4.1.8.tgz"
+ integrity sha512-0vSpg6Xd9hfV+eZAaYN63xVVMOTmJ4GgHxXnkLCh+9RsQBkWKIghzLhW2B9ebfG+LQQg8uLtsQ2aUKjTgE+QOg==
+ dependencies:
+ jsonc-parser "^3.0.0"
+ vscode-languageserver-textdocument "^1.0.1"
+ vscode-languageserver-types "^3.16.0"
+ vscode-nls "^5.0.0"
+ vscode-uri "^3.0.2"
+
+vscode-jsonrpc@6.0.0:
+ version "6.0.0"
+ resolved "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz"
+ integrity sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg==
+
vscode-jsonrpc@8.2.0:
version "8.2.0"
resolved "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.0.tgz"
@@ -5413,16 +5746,36 @@ vscode-languageserver-protocol@^3.17.5, vscode-languageserver-protocol@3.17.5:
vscode-jsonrpc "8.2.0"
vscode-languageserver-types "3.17.5"
-vscode-languageserver-textdocument@^1.0.1, vscode-languageserver-textdocument@^1.0.11:
- version "1.0.11"
- resolved "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.11.tgz"
- integrity sha512-X+8T3GoiwTVlJbicx/sIAF+yuJAqz8VvwJyoMVhwEMoEKE/fkDmrqUgDMyBECcM2A2frVZIUj5HI/ErRXCfOeA==
+vscode-languageserver-protocol@3.16.0:
+ version "3.16.0"
+ resolved "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz"
+ integrity sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A==
+ dependencies:
+ vscode-jsonrpc "6.0.0"
+ vscode-languageserver-types "3.16.0"
+
+vscode-languageserver-textdocument@^1.0.1, vscode-languageserver-textdocument@^1.0.11, vscode-languageserver-textdocument@^1.0.12:
+ version "1.0.12"
+ resolved "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.12.tgz"
+ integrity sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==
-vscode-languageserver-types@^3.15.1, vscode-languageserver-types@^3.17.5, vscode-languageserver-types@3.17.5:
+vscode-languageserver-types@^3.15.1, vscode-languageserver-types@^3.16.0, vscode-languageserver-types@^3.17.5, vscode-languageserver-types@3.17.5:
version "3.17.5"
resolved "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz"
integrity sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==
+vscode-languageserver-types@3.16.0:
+ version "3.16.0"
+ resolved "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz"
+ integrity sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==
+
+vscode-languageserver@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-7.0.0.tgz"
+ integrity sha512-60HTx5ID+fLRcgdHfmz0LDZAXYEV68fzwG0JWwEPBode9NuMYTIxuYXPg4ngO8i8+Ou0lM7y6GzaYWbiDL0drw==
+ dependencies:
+ vscode-languageserver-protocol "3.16.0"
+
vscode-languageserver@^9.0.1:
version "9.0.1"
resolved "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-9.0.1.tgz"
@@ -5430,7 +5783,7 @@ vscode-languageserver@^9.0.1:
dependencies:
vscode-languageserver-protocol "3.17.5"
-vscode-nls@^5.2.0:
+vscode-nls@^5.0.0, vscode-nls@^5.2.0:
version "5.2.0"
resolved "https://registry.npmjs.org/vscode-nls/-/vscode-nls-5.2.0.tgz"
integrity sha512-RAaHx7B14ZU04EU31pT+rKz2/zSl7xMsfIZuo8pd+KZO6PXtQmpevpq3vxvWNcrGbdmhM/rr5Uw5Mz+NBfhVng==
@@ -5440,7 +5793,7 @@ vscode-uri@^2.1.2:
resolved "https://registry.npmjs.org/vscode-uri/-/vscode-uri-2.1.2.tgz"
integrity sha512-8TEXQxlldWAuIODdukIb+TR5s+9Ds40eSJrw+1iDDA9IFORPjMELarNQE3myz5XIkWWpdprmJjm1/SxMlWOC8A==
-vscode-uri@^3.0.8:
+vscode-uri@^3.0.2, vscode-uri@^3.0.8:
version "3.0.8"
resolved "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.8.tgz"
integrity sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==
@@ -5539,12 +5892,12 @@ why-is-node-running@^2.2.2:
siginfo "^2.0.0"
stackback "0.0.2"
-widest-line@^4.0.1:
- version "4.0.1"
- resolved "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz"
- integrity sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==
+widest-line@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.npmjs.org/widest-line/-/widest-line-5.0.0.tgz"
+ integrity sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==
dependencies:
- string-width "^5.0.1"
+ string-width "^7.0.0"
"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0":
version "7.0.0"
@@ -5573,11 +5926,25 @@ wrap-ansi@^8.1.0:
string-width "^5.0.1"
strip-ansi "^7.0.1"
+wrap-ansi@^9.0.0:
+ version "9.0.0"
+ resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz"
+ integrity sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==
+ dependencies:
+ ansi-styles "^6.2.1"
+ string-width "^7.0.0"
+ strip-ansi "^7.1.0"
+
wrappy@1:
version "1.0.2"
resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz"
integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==
+ws@^8.14.2:
+ version "8.18.0"
+ resolved "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz"
+ integrity sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==
+
xxhash-wasm@^1.0.2:
version "1.0.2"
resolved "https://registry.npmjs.org/xxhash-wasm/-/xxhash-wasm-1.0.2.tgz"
@@ -5593,20 +5960,38 @@ yallist@^3.0.2:
resolved "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz"
integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==
-yallist@^4.0.0:
- version "4.0.0"
- resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz"
- integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
+yaml-language-server@~1.15.0:
+ version "1.15.0"
+ resolved "https://registry.npmjs.org/yaml-language-server/-/yaml-language-server-1.15.0.tgz"
+ integrity sha512-N47AqBDCMQmh6mBLmI6oqxryHRzi33aPFPsJhYy3VTUGCdLHYjGh4FZzpUjRlphaADBBkDmnkM/++KNIOHi5Rw==
+ dependencies:
+ ajv "^8.11.0"
+ lodash "4.17.21"
+ request-light "^0.5.7"
+ vscode-json-languageservice "4.1.8"
+ vscode-languageserver "^7.0.0"
+ vscode-languageserver-textdocument "^1.0.1"
+ vscode-languageserver-types "^3.16.0"
+ vscode-nls "^5.0.0"
+ vscode-uri "^3.0.2"
+ yaml "2.2.2"
+ optionalDependencies:
+ prettier "2.8.7"
yaml@^1.10.0:
version "1.10.2"
resolved "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz"
integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==
-yaml@^2.3.4:
- version "2.3.4"
- resolved "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz"
- integrity sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==
+yaml@^2.3.4, yaml@^2.5.0:
+ version "2.5.1"
+ resolved "https://registry.npmjs.org/yaml/-/yaml-2.5.1.tgz"
+ integrity sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q==
+
+yaml@2.2.2:
+ version "2.2.2"
+ resolved "https://registry.npmjs.org/yaml/-/yaml-2.2.2.tgz"
+ integrity sha512-CBKFWExMn46Foo4cldiChEzn7S7SRV+wqiluAb6xmueD/fGyRHIhX8m14vVGgeFWjN540nKCNVj6P21eQjgTuA==
yargs-parser@^21.1.1:
version "21.1.1"
@@ -5636,7 +6021,7 @@ yocto-queue@^1.0.0, yocto-queue@^1.1.1:
resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.1.1.tgz"
integrity sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==
-zod-to-json-schema@^3.23.2:
+zod-to-json-schema@^3.23.3:
version "3.23.3"
resolved "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.23.3.tgz"
integrity sha512-TYWChTxKQbRJp5ST22o/Irt9KC5nj7CdBKYB/AosCRdj/wxEMvv4NNaj9XVUHDOIp53ZxArGhnw5HMZziPFjog==