From 45115e7062b19092914b47ea6e8616ab10b8e841 Mon Sep 17 00:00:00 2001 From: realmikesolo Date: Tue, 26 Mar 2024 17:49:27 +0100 Subject: [PATCH 01/14] migrate to drizzle: wip --- drizzle.config.ts | 12 + lib/actions-prisma.ts | 433 ++++++++++++++++++++++++++++++++++ lib/actions.ts | 214 +++++++---------- lib/auth-prisma.ts | 133 +++++++++++ lib/auth.ts | 33 +-- lib/db/db.ts | 9 + lib/db/schema.ts | 154 ++++++++++++ lib/fetchers-prisma.ts | 133 +++++++++++ lib/fetchers.ts | 95 +++----- lib/remark-plugins-prisma.tsx | 117 +++++++++ lib/remark-plugins.tsx | 21 +- package.json | 4 + 12 files changed, 1147 insertions(+), 211 deletions(-) create mode 100644 drizzle.config.ts create mode 100644 lib/actions-prisma.ts create mode 100644 lib/auth-prisma.ts create mode 100644 lib/db/db.ts create mode 100644 lib/db/schema.ts create mode 100644 lib/fetchers-prisma.ts create mode 100644 lib/remark-plugins-prisma.tsx diff --git a/drizzle.config.ts b/drizzle.config.ts new file mode 100644 index 000000000..a9615a20b --- /dev/null +++ b/drizzle.config.ts @@ -0,0 +1,12 @@ +import { defineConfig } from 'drizzle-kit' + +export default defineConfig({ + schema: "./lib/db/schema.ts", + out: "./drizzle/migrations", + driver: 'pg', + dbCredentials: { + connectionString: process.env.POSTGRES_URL!, + }, + verbose: true, + strict: true, +}) diff --git a/lib/actions-prisma.ts b/lib/actions-prisma.ts new file mode 100644 index 000000000..ffe5fdc5c --- /dev/null +++ b/lib/actions-prisma.ts @@ -0,0 +1,433 @@ +"use server"; + +import prisma from "@/lib/prisma"; +import { Post, Site } from "@prisma/client"; +import { revalidateTag } from "next/cache"; +import { withPostAuth, withSiteAuth } from "./auth"; +import { getSession } from "@/lib/auth"; +import { + addDomainToVercel, + // getApexDomain, + removeDomainFromVercelProject, + // removeDomainFromVercelTeam, + validDomainRegex, +} from "@/lib/domains"; +import { put } from "@vercel/blob"; +import { customAlphabet } from "nanoid"; +import { getBlurDataURL } from "@/lib/utils"; + +const nanoid = customAlphabet( + "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz", + 7, +); // 7-character random string + +export const createSite = async (formData: FormData) => { + const session = await getSession(); + if (!session?.user.id) { + return { + error: "Not authenticated", + }; + } + const name = formData.get("name") as string; + const description = formData.get("description") as string; + const subdomain = formData.get("subdomain") as string; + + try { + const response = await prisma.site.create({ + data: { + name, + description, + subdomain, + user: { + connect: { + id: session.user.id, + }, + }, + }, + }); + await revalidateTag( + `${subdomain}.${process.env.NEXT_PUBLIC_ROOT_DOMAIN}-metadata`, + ); + return response; + } catch (error: any) { + if (error.code === "P2002") { + return { + error: `This subdomain is already taken`, + }; + } else { + return { + error: error.message, + }; + } + } +}; + +export const updateSite = withSiteAuth( + async (formData: FormData, site: Site, key: string) => { + const value = formData.get(key) as string; + + try { + let response; + + if (key === "customDomain") { + if (value.includes("vercel.pub")) { + return { + error: "Cannot use vercel.pub subdomain as your custom domain", + }; + + // if the custom domain is valid, we need to add it to Vercel + } else if (validDomainRegex.test(value)) { + response = await prisma.site.update({ + where: { + id: site.id, + }, + data: { + customDomain: value, + }, + }); + await Promise.all([ + addDomainToVercel(value), + // Optional: add www subdomain as well and redirect to apex domain + // addDomainToVercel(`www.${value}`), + ]); + + // empty value means the user wants to remove the custom domain + } else if (value === "") { + response = await prisma.site.update({ + where: { + id: site.id, + }, + data: { + customDomain: null, + }, + }); + } + + // if the site had a different customDomain before, we need to remove it from Vercel + if (site.customDomain && site.customDomain !== value) { + response = await removeDomainFromVercelProject(site.customDomain); + + /* Optional: remove domain from Vercel team + + // first, we need to check if the apex domain is being used by other sites + const apexDomain = getApexDomain(`https://${site.customDomain}`); + const domainCount = await prisma.site.count({ + where: { + OR: [ + { + customDomain: apexDomain, + }, + { + customDomain: { + endsWith: `.${apexDomain}`, + }, + }, + ], + }, + }); + + // if the apex domain is being used by other sites + // we should only remove it from our Vercel project + if (domainCount >= 1) { + await removeDomainFromVercelProject(site.customDomain); + } else { + // this is the only site using this apex domain + // so we can remove it entirely from our Vercel team + await removeDomainFromVercelTeam( + site.customDomain + ); + } + + */ + } + } else if (key === "image" || key === "logo") { + if (!process.env.BLOB_READ_WRITE_TOKEN) { + return { + error: + "Missing BLOB_READ_WRITE_TOKEN token. Note: Vercel Blob is currently in beta – please fill out this form for access: https://tally.so/r/nPDMNd", + }; + } + + const file = formData.get(key) as File; + const filename = `${nanoid()}.${file.type.split("/")[1]}`; + + const { url } = await put(filename, file, { + access: "public", + }); + + const blurhash = key === "image" ? await getBlurDataURL(url) : null; + + response = await prisma.site.update({ + where: { + id: site.id, + }, + data: { + [key]: url, + ...(blurhash && { imageBlurhash: blurhash }), + }, + }); + } else { + response = await prisma.site.update({ + where: { + id: site.id, + }, + data: { + [key]: value, + }, + }); + } + console.log( + "Updated site data! Revalidating tags: ", + `${site.subdomain}.${process.env.NEXT_PUBLIC_ROOT_DOMAIN}-metadata`, + `${site.customDomain}-metadata`, + ); + await revalidateTag( + `${site.subdomain}.${process.env.NEXT_PUBLIC_ROOT_DOMAIN}-metadata`, + ); + site.customDomain && + (await revalidateTag(`${site.customDomain}-metadata`)); + + return response; + } catch (error: any) { + if (error.code === "P2002") { + return { + error: `This ${key} is already taken`, + }; + } else { + return { + error: error.message, + }; + } + } + }, +); + +export const deleteSite = withSiteAuth(async (_: FormData, site: Site) => { + try { + const response = await prisma.site.delete({ + where: { + id: site.id, + }, + }); + await revalidateTag( + `${site.subdomain}.${process.env.NEXT_PUBLIC_ROOT_DOMAIN}-metadata`, + ); + response.customDomain && + (await revalidateTag(`${site.customDomain}-metadata`)); + return response; + } catch (error: any) { + return { + error: error.message, + }; + } +}); + +export const getSiteFromPostId = async (postId: string) => { + const post = await prisma.post.findUnique({ + where: { + id: postId, + }, + select: { + siteId: true, + }, + }); + return post?.siteId; +}; + +export const createPost = withSiteAuth(async (_: FormData, site: Site) => { + const session = await getSession(); + if (!session?.user.id) { + return { + error: "Not authenticated", + }; + } + const response = await prisma.post.create({ + data: { + siteId: site.id, + userId: session.user.id, + }, + }); + + await revalidateTag( + `${site.subdomain}.${process.env.NEXT_PUBLIC_ROOT_DOMAIN}-posts`, + ); + site.customDomain && (await revalidateTag(`${site.customDomain}-posts`)); + + return response; +}); + +// creating a separate function for this because we're not using FormData +export const updatePost = async (data: Post) => { + const session = await getSession(); + if (!session?.user.id) { + return { + error: "Not authenticated", + }; + } + const post = await prisma.post.findUnique({ + where: { + id: data.id, + }, + include: { + site: true, + }, + }); + if (!post || post.userId !== session.user.id) { + return { + error: "Post not found", + }; + } + try { + const response = await prisma.post.update({ + where: { + id: data.id, + }, + data: { + title: data.title, + description: data.description, + content: data.content, + }, + }); + + await revalidateTag( + `${post.site?.subdomain}.${process.env.NEXT_PUBLIC_ROOT_DOMAIN}-posts`, + ); + await revalidateTag( + `${post.site?.subdomain}.${process.env.NEXT_PUBLIC_ROOT_DOMAIN}-${post.slug}`, + ); + + // if the site has a custom domain, we need to revalidate those tags too + post.site?.customDomain && + (await revalidateTag(`${post.site?.customDomain}-posts`), + await revalidateTag(`${post.site?.customDomain}-${post.slug}`)); + + return response; + } catch (error: any) { + return { + error: error.message, + }; + } +}; + +export const updatePostMetadata = withPostAuth( + async ( + formData: FormData, + post: Post & { + site: Site; + }, + key: string, + ) => { + const value = formData.get(key) as string; + + try { + let response; + if (key === "image") { + const file = formData.get("image") as File; + const filename = `${nanoid()}.${file.type.split("/")[1]}`; + + const { url } = await put(filename, file, { + access: "public", + }); + + const blurhash = await getBlurDataURL(url); + + response = await prisma.post.update({ + where: { + id: post.id, + }, + data: { + image: url, + imageBlurhash: blurhash, + }, + }); + } else { + response = await prisma.post.update({ + where: { + id: post.id, + }, + data: { + [key]: key === "published" ? value === "true" : value, + }, + }); + } + + await revalidateTag( + `${post.site?.subdomain}.${process.env.NEXT_PUBLIC_ROOT_DOMAIN}-posts`, + ); + await revalidateTag( + `${post.site?.subdomain}.${process.env.NEXT_PUBLIC_ROOT_DOMAIN}-${post.slug}`, + ); + + // if the site has a custom domain, we need to revalidate those tags too + post.site?.customDomain && + (await revalidateTag(`${post.site?.customDomain}-posts`), + await revalidateTag(`${post.site?.customDomain}-${post.slug}`)); + + return response; + } catch (error: any) { + if (error.code === "P2002") { + return { + error: `This slug is already in use`, + }; + } else { + return { + error: error.message, + }; + } + } + }, +); + +export const deletePost = withPostAuth(async (_: FormData, post: Post) => { + try { + const response = await prisma.post.delete({ + where: { + id: post.id, + }, + select: { + siteId: true, + }, + }); + return response; + } catch (error: any) { + return { + error: error.message, + }; + } +}); + +export const editUser = async ( + formData: FormData, + _id: unknown, + key: string, +) => { + const session = await getSession(); + if (!session?.user.id) { + return { + error: "Not authenticated", + }; + } + const value = formData.get(key) as string; + + try { + const response = await prisma.user.update({ + where: { + id: session.user.id, + }, + data: { + [key]: value, + }, + }); + return response; + } catch (error: any) { + if (error.code === "P2002") { + return { + error: `This ${key} is already in use`, + }; + } else { + return { + error: error.message, + }; + } + } +}; diff --git a/lib/actions.ts b/lib/actions.ts index ffe5fdc5c..d6ae0cc04 100644 --- a/lib/actions.ts +++ b/lib/actions.ts @@ -1,20 +1,19 @@ "use server"; -import prisma from "@/lib/prisma"; -import { Post, Site } from "@prisma/client"; -import { revalidateTag } from "next/cache"; -import { withPostAuth, withSiteAuth } from "./auth"; import { getSession } from "@/lib/auth"; +import { revalidateTag } from "next/cache"; +import db from "./db/db"; +import { SelectPost, SelectSite, posts, sites, users } from "./db/schema"; import { addDomainToVercel, - // getApexDomain, removeDomainFromVercelProject, - // removeDomainFromVercelTeam, validDomainRegex, } from "@/lib/domains"; -import { put } from "@vercel/blob"; +import { withPostAuth, withSiteAuth } from "./auth"; import { customAlphabet } from "nanoid"; import { getBlurDataURL } from "@/lib/utils"; +import { eq } from "drizzle-orm"; +import { put } from "@vercel/blob"; const nanoid = customAlphabet( "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz", @@ -33,18 +32,16 @@ export const createSite = async (formData: FormData) => { const subdomain = formData.get("subdomain") as string; try { - const response = await prisma.site.create({ - data: { - name, - description, - subdomain, - user: { - connect: { - id: session.user.id, - }, - }, - }, - }); + const [response] = await db.insert(sites).values({ + name, + description, + subdomain, + userId: session.user.id, + updatedAt: new Date(), + }).returning() + console.log(1) + + // unnecessary await await revalidateTag( `${subdomain}.${process.env.NEXT_PUBLIC_ROOT_DOMAIN}-metadata`, ); @@ -63,7 +60,7 @@ export const createSite = async (formData: FormData) => { }; export const updateSite = withSiteAuth( - async (formData: FormData, site: Site, key: string) => { + async (formData: FormData, site: SelectSite, key: string) => { const value = formData.get(key) as string; try { @@ -77,14 +74,10 @@ export const updateSite = withSiteAuth( // if the custom domain is valid, we need to add it to Vercel } else if (validDomainRegex.test(value)) { - response = await prisma.site.update({ - where: { - id: site.id, - }, - data: { - customDomain: value, - }, - }); + response = await db.update(sites).set({ + customDomain:value + }).where(eq(sites.id, site.id)).returning().then((res) => res[0]) + await Promise.all([ addDomainToVercel(value), // Optional: add www subdomain as well and redirect to apex domain @@ -93,14 +86,10 @@ export const updateSite = withSiteAuth( // empty value means the user wants to remove the custom domain } else if (value === "") { - response = await prisma.site.update({ - where: { - id: site.id, - }, - data: { - customDomain: null, - }, - }); + + response = await db.update(sites).set({ + customDomain:null + }).where(eq(sites.id, site.id)).returning().then((res) => res[0]) } // if the site had a different customDomain before, we need to remove it from Vercel @@ -157,25 +146,16 @@ export const updateSite = withSiteAuth( const blurhash = key === "image" ? await getBlurDataURL(url) : null; - response = await prisma.site.update({ - where: { - id: site.id, - }, - data: { - [key]: url, - ...(blurhash && { imageBlurhash: blurhash }), - }, - }); + response = await db.update(sites).set({ + [key]:url, + ...(blurhash && { imageBlurhash: blurhash }) + }).where(eq(sites.id, site.id)).returning().then((res) => res[0]) } else { - response = await prisma.site.update({ - where: { - id: site.id, - }, - data: { - [key]: value, - }, - }); + response = await db.update(sites).set({ + [key]:value + }).where(eq(sites.id, site.id)).returning().then((res) => res[0]) } + console.log( "Updated site data! Revalidating tags: ", `${site.subdomain}.${process.env.NEXT_PUBLIC_ROOT_DOMAIN}-metadata`, @@ -202,13 +182,10 @@ export const updateSite = withSiteAuth( }, ); -export const deleteSite = withSiteAuth(async (_: FormData, site: Site) => { +export const deleteSite = withSiteAuth(async (_: FormData, site: SelectSite) => { try { - const response = await prisma.site.delete({ - where: { - id: site.id, - }, - }); + const [response] = await db.delete(sites).where(eq(sites.id, site.id)).returning() + await revalidateTag( `${site.subdomain}.${process.env.NEXT_PUBLIC_ROOT_DOMAIN}-metadata`, ); @@ -223,30 +200,29 @@ export const deleteSite = withSiteAuth(async (_: FormData, site: Site) => { }); export const getSiteFromPostId = async (postId: string) => { - const post = await prisma.post.findUnique({ - where: { - id: postId, - }, - select: { - siteId: true, - }, - }); + const post = await db.query.posts.findFirst({ + where: eq(posts.id, postId), + columns: { + siteId: true + } + }) + return post?.siteId; }; -export const createPost = withSiteAuth(async (_: FormData, site: Site) => { +export const createPost = withSiteAuth(async (_: FormData, site: SelectSite) => { const session = await getSession(); if (!session?.user.id) { return { error: "Not authenticated", }; } - const response = await prisma.post.create({ - data: { - siteId: site.id, - userId: session.user.id, - }, - }); + + const [response] = await db.insert(posts).values({ + siteId: site.id, + userId: session.user.id, + updatedAt: new Date(), + }).returning() await revalidateTag( `${site.subdomain}.${process.env.NEXT_PUBLIC_ROOT_DOMAIN}-posts`, @@ -257,37 +233,35 @@ export const createPost = withSiteAuth(async (_: FormData, site: Site) => { }); // creating a separate function for this because we're not using FormData -export const updatePost = async (data: Post) => { +export const updatePost = async (data: SelectPost) => { const session = await getSession(); if (!session?.user.id) { return { error: "Not authenticated", }; } - const post = await prisma.post.findUnique({ - where: { - id: data.id, - }, - include: { - site: true, - }, - }); + + const post = await db.query.posts.findFirst({ + where: eq(posts.id, data.id), + with: { + site:true + } + }) + + if (!post || post.userId !== session.user.id) { return { error: "Post not found", }; } + try { - const response = await prisma.post.update({ - where: { - id: data.id, - }, - data: { - title: data.title, - description: data.description, - content: data.content, - }, - }); + const [response] = await db.update(posts).set({ + title: data.title, + description: data.description, + content: data.content, + updatedAt: new Date(), + }).where(eq(posts.id, data.id)).returning() await revalidateTag( `${post.site?.subdomain}.${process.env.NEXT_PUBLIC_ROOT_DOMAIN}-posts`, @@ -312,8 +286,8 @@ export const updatePost = async (data: Post) => { export const updatePostMetadata = withPostAuth( async ( formData: FormData, - post: Post & { - site: Site; + post: SelectPost & { + site: SelectSite; }, key: string, ) => { @@ -330,25 +304,15 @@ export const updatePostMetadata = withPostAuth( }); const blurhash = await getBlurDataURL(url); + response = await db.update(posts).set({ + image: url, + imageBlurhash: blurhash, + }).where(eq(posts.id, post.id)).returning().then((res) => res[0]) - response = await prisma.post.update({ - where: { - id: post.id, - }, - data: { - image: url, - imageBlurhash: blurhash, - }, - }); } else { - response = await prisma.post.update({ - where: { - id: post.id, - }, - data: { - [key]: key === "published" ? value === "true" : value, - }, - }); + response = await db.update(posts).set({ + [key]: key === "published" ? value === "true" : value + }).where(eq(posts.id, post.id)).returning().then((res) => res[0]) } await revalidateTag( @@ -378,16 +342,12 @@ export const updatePostMetadata = withPostAuth( }, ); -export const deletePost = withPostAuth(async (_: FormData, post: Post) => { +export const deletePost = withPostAuth(async (_: FormData, post: SelectPost) => { try { - const response = await prisma.post.delete({ - where: { - id: post.id, - }, - select: { - siteId: true, - }, - }); + const [response] = await db.delete(posts).where(eq(posts.id, post.id)).returning({ + siteId: posts.siteId + }) + return response; } catch (error: any) { return { @@ -410,14 +370,10 @@ export const editUser = async ( const value = formData.get(key) as string; try { - const response = await prisma.user.update({ - where: { - id: session.user.id, - }, - data: { - [key]: value, - }, - }); + const [response] = await db.update(users).set({ + [key]: value + }).where(eq(users.id, session.user.id)).returning() + return response; } catch (error: any) { if (error.code === "P2002") { diff --git a/lib/auth-prisma.ts b/lib/auth-prisma.ts new file mode 100644 index 000000000..856819a8a --- /dev/null +++ b/lib/auth-prisma.ts @@ -0,0 +1,133 @@ +import { getServerSession, type NextAuthOptions } from "next-auth"; +import GitHubProvider from "next-auth/providers/github"; +import { PrismaAdapter } from "@next-auth/prisma-adapter"; +import prisma from "@/lib/prisma"; + +const VERCEL_DEPLOYMENT = !!process.env.VERCEL_URL; + +export const authOptions: NextAuthOptions = { + providers: [ + GitHubProvider({ + clientId: process.env.AUTH_GITHUB_ID as string, + clientSecret: process.env.AUTH_GITHUB_SECRET as string, + profile(profile) { + return { + id: profile.id.toString(), + name: profile.name || profile.login, + gh_username: profile.login, + email: profile.email, + image: profile.avatar_url, + }; + }, + }), + ], + pages: { + signIn: `/login`, + verifyRequest: `/login`, + error: "/login", // Error code passed in query string as ?error= + }, + adapter: PrismaAdapter(prisma), + session: { strategy: "jwt" }, + cookies: { + sessionToken: { + name: `${VERCEL_DEPLOYMENT ? "__Secure-" : ""}next-auth.session-token`, + options: { + httpOnly: true, + sameSite: "lax", + path: "/", + // When working on localhost, the cookie domain must be omitted entirely (https://stackoverflow.com/a/1188145) + domain: VERCEL_DEPLOYMENT + ? `.${process.env.NEXT_PUBLIC_ROOT_DOMAIN}` + : undefined, + secure: VERCEL_DEPLOYMENT, + }, + }, + }, + callbacks: { + jwt: async ({ token, user }) => { + if (user) { + token.user = user; + } + return token; + }, + session: async ({ session, token }) => { + session.user = { + ...session.user, + // @ts-expect-error + id: token.sub, + // @ts-expect-error + username: token?.user?.username || token?.user?.gh_username, + }; + return session; + }, + }, +}; + +export function getSession() { + return getServerSession(authOptions) as Promise<{ + user: { + id: string; + name: string; + username: string; + email: string; + image: string; + }; + } | null>; +} + +export function withSiteAuth(action: any) { + return async ( + formData: FormData | null, + siteId: string, + key: string | null, + ) => { + const session = await getSession(); + if (!session) { + return { + error: "Not authenticated", + }; + } + const site = await prisma.site.findUnique({ + where: { + id: siteId, + }, + }); + if (!site || site.userId !== session.user.id) { + return { + error: "Not authorized", + }; + } + + return action(formData, site, key); + }; +} + +export function withPostAuth(action: any) { + return async ( + formData: FormData | null, + postId: string, + key: string | null, + ) => { + const session = await getSession(); + if (!session?.user.id) { + return { + error: "Not authenticated", + }; + } + const post = await prisma.post.findUnique({ + where: { + id: postId, + }, + include: { + site: true, + }, + }); + if (!post || post.userId !== session.user.id) { + return { + error: "Post not found", + }; + } + + return action(formData, post, key); + }; +} diff --git a/lib/auth.ts b/lib/auth.ts index 856819a8a..c16a34cd9 100644 --- a/lib/auth.ts +++ b/lib/auth.ts @@ -1,7 +1,8 @@ import { getServerSession, type NextAuthOptions } from "next-auth"; import GitHubProvider from "next-auth/providers/github"; -import { PrismaAdapter } from "@next-auth/prisma-adapter"; -import prisma from "@/lib/prisma"; +import { DrizzleAdapter } from "@auth/drizzle-adapter" +import db from "./db/db"; +import { Adapter } from "next-auth/adapters"; const VERCEL_DEPLOYMENT = !!process.env.VERCEL_URL; @@ -26,7 +27,7 @@ export const authOptions: NextAuthOptions = { verifyRequest: `/login`, error: "/login", // Error code passed in query string as ?error= }, - adapter: PrismaAdapter(prisma), + adapter: DrizzleAdapter(db) as Adapter, session: { strategy: "jwt" }, cookies: { sessionToken: { @@ -87,11 +88,11 @@ export function withSiteAuth(action: any) { error: "Not authenticated", }; } - const site = await prisma.site.findUnique({ - where: { - id: siteId, - }, - }); + + const site = await db.query.sites.findFirst({ + where: (sites, { eq }) => eq(sites.id, siteId) + }) + if (!site || site.userId !== session.user.id) { return { error: "Not authorized", @@ -114,14 +115,14 @@ export function withPostAuth(action: any) { error: "Not authenticated", }; } - const post = await prisma.post.findUnique({ - where: { - id: postId, - }, - include: { - site: true, - }, - }); + + const post = await db.query.posts.findFirst({ + where: (posts, { eq }) => eq(posts.id, postId), + with: { + site: true + } + }) + if (!post || post.userId !== session.user.id) { return { error: "Post not found", diff --git a/lib/db/db.ts b/lib/db/db.ts new file mode 100644 index 000000000..91c717aba --- /dev/null +++ b/lib/db/db.ts @@ -0,0 +1,9 @@ +import { sql } from '@vercel/postgres'; +import { drizzle } from 'drizzle-orm/vercel-postgres'; +import * as schema from './schema'; + +const db = drizzle(sql, {schema}) + +export default db; + +export type DrizzleClient = typeof db; diff --git a/lib/db/schema.ts b/lib/db/schema.ts new file mode 100644 index 000000000..079989085 --- /dev/null +++ b/lib/db/schema.ts @@ -0,0 +1,154 @@ +import { pgTable, uniqueIndex, index, foreignKey, text, timestamp, serial, integer, boolean } from "drizzle-orm/pg-core" +import { relations, sql } from "drizzle-orm" +import { createId } from '@paralleldrive/cuid2'; + +export const sessions = pgTable("Session", { + id: text("id").primaryKey().notNull().$defaultFn(() => createId()), + sessionToken: text("sessionToken").notNull(), + userId: text("userId").notNull().references(() => users.id, { onDelete: "cascade", onUpdate: "cascade" } ), + expires: timestamp("expires", { precision: 3, mode: 'date' }).notNull(), +}, +(table) => { + return { + sessionTokenKey: uniqueIndex("Session_sessionToken_key").on(table.sessionToken), + userIdIdx: index("Session_userId_idx").on(table.userId), + } +}); + +export const verificationTokens = pgTable("VerificationToken", { + identifier: text("identifier").notNull(), + token: text("token").notNull(), + expires: timestamp("expires", { precision: 3, mode: 'date' }).notNull(), +}, +(table) => { + return { + tokenKey: uniqueIndex("VerificationToken_token_key").on(table.token), + identifierTokenKey: uniqueIndex("VerificationToken_identifier_token_key").on(table.identifier, table.token), + } +}); + +export const users = pgTable("User", { + id: text("id").primaryKey().notNull().$defaultFn(() => createId()), + name: text("name"), + // if you are using Github OAuth, you can get rid of the username attribute (that is for Twitter OAuth) + username: text("username"), + ghUsername: text("gh_username"), + email: text("email"), + emailVerified: timestamp("emailVerified", { precision: 3, mode: 'date' }), + image: text("image"), + createdAt: timestamp("createdAt", { precision: 3, mode: 'date' }).defaultNow().notNull(), + updatedAt: timestamp("updatedAt", { precision: 3, mode: 'date' }).notNull(), +}, +(table) => { + return { + emailKey: uniqueIndex("User_email_key").on(table.email), + } +}); + +export const examples = pgTable("Example", { + id: serial("id").primaryKey().notNull(), + name: text("name"), + description: text("description"), + domainCount: integer("domainCount"), + url: text("url"), + image: text("image"), + imageBlurhash: text("imageBlurhash"), +}); + +export const accounts = pgTable("Account", { + id: text("id").primaryKey().notNull().$defaultFn(() => createId()), + userId: text("userId").notNull().references(() => users.id, { onDelete: "cascade", onUpdate: "cascade" } ), + type: text("type").notNull(), + provider: text("provider").notNull(), + providerAccountId: text("providerAccountId").notNull(), + refreshToken: text("refresh_token"), + refreshTokenExpiresIn: integer("refresh_token_expires_in"), + accessToken: text("access_token"), + expiresAt: integer("expires_at"), + tokenType: text("token_type"), + scope: text("scope"), + idToken: text("id_token"), + sessionState: text("session_state"), + oauthTokenSecret: text("oauth_token_secret"), + oauthToken: text("oauth_token"), +}, +(table) => { + return { + userIdIdx: index("Account_userId_idx").on(table.userId), + providerProviderAccountIdKey: uniqueIndex("Account_provider_providerAccountId_key").on(table.provider, table.providerAccountId), + } +}); + +export const sites = pgTable("Site", { + id: text("id").primaryKey().notNull().$defaultFn(() => createId()), + name: text("name"), + description: text("description"), + logo: text("logo").default('https://public.blob.vercel-storage.com/eEZHAoPTOBSYGBE3/JRajRyC-PhBHEinQkupt02jqfKacBVHLWJq7Iy.png'), + font: text("font").default('font-cal').notNull(), + image: text("image").default('https://public.blob.vercel-storage.com/eEZHAoPTOBSYGBE3/hxfcV5V-eInX3jbVUhjAt1suB7zB88uGd1j20b.png'), + imageBlurhash: text("imageBlurhash").default('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAhCAYAAACbffiEAAAACXBIWXMAABYlAAAWJQFJUiTwAAABfUlEQVR4nN3XyZLDIAwE0Pz/v3q3r55JDlSBplsIEI49h76k4opexCK/juP4eXjOT149f2Tf9ySPgcjCc7kdpBTgDPKByKK2bTPFEdMO0RDrusJ0wLRBGCIuelmWJAjkgPGDSIQEMBDCfA2CEPM80+Qwl0JkNxBimiaYGOTUlXYI60YoehzHJDEm7kxjV3whOQTD3AaCuhGKHoYhyb+CBMwjIAFz647kTqyapdV4enGINuDJMSScPmijSwjCaHeLcT77C7EC0C1ugaCTi2HYfAZANgj6Z9A8xY5eiYghDMNQBJNCWhASot0jGsSCUiHWZcSGQjaWWCDaGMOWnsCcn2QhVkRuxqqNxMSdUSElCDbp1hbNOsa6Ugxh7xXauF4DyM1m5BLtCylBXgaxvPXVwEoOBjeIFVODtW74oj1yBQah3E8tyz3SkpolKS9Geo9YMD1QJR1Go4oJkgO1pgbNZq0AOUPChyjvh7vlXaQa+X1UXwKxgHokB2XPxbX+AnijwIU4ahazAAAAAElFTkSuQmCC'), + subdomain: text("subdomain"), + customDomain: text("customDomain"), + message404: text("message404").default("Blimey! You've found a page that doesn''t exist."), + createdAt: timestamp("createdAt", { precision: 3, mode: 'date' }).defaultNow().notNull(), + updatedAt: timestamp("updatedAt", { precision: 3, mode: 'date' }).notNull(), + userId: text("userId").references(() => users.id, { onDelete: "cascade", onUpdate: "cascade" } ), +}, +(table) => { + return { + subdomainKey: uniqueIndex("Site_subdomain_key").on(table.subdomain), + customDomainKey: uniqueIndex("Site_customDomain_key").on(table.customDomain), + userIdIdx: index("Site_userId_idx").on(table.userId), + } +}); + +export const posts = pgTable("Post", { + id: text("id").primaryKey().notNull().$defaultFn(() => createId()), + title: text("title"), + description: text("description"), + content: text("content"), + slug: text("slug").notNull().$defaultFn(() => createId()), + image: text("image").default('https://public.blob.vercel-storage.com/eEZHAoPTOBSYGBE3/hxfcV5V-eInX3jbVUhjAt1suB7zB88uGd1j20b.png'), + imageBlurhash: text("imageBlurhash").default('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAhCAYAAACbffiEAAAACXBIWXMAABYlAAAWJQFJUiTwAAABfUlEQVR4nN3XyZLDIAwE0Pz/v3q3r55JDlSBplsIEI49h76k4opexCK/juP4eXjOT149f2Tf9ySPgcjCc7kdpBTgDPKByKK2bTPFEdMO0RDrusJ0wLRBGCIuelmWJAjkgPGDSIQEMBDCfA2CEPM80+Qwl0JkNxBimiaYGOTUlXYI60YoehzHJDEm7kxjV3whOQTD3AaCuhGKHoYhyb+CBMwjIAFz647kTqyapdV4enGINuDJMSScPmijSwjCaHeLcT77C7EC0C1ugaCTi2HYfAZANgj6Z9A8xY5eiYghDMNQBJNCWhASot0jGsSCUiHWZcSGQjaWWCDaGMOWnsCcn2QhVkRuxqqNxMSdUSElCDbp1hbNOsa6Ugxh7xXauF4DyM1m5BLtCylBXgaxvPXVwEoOBjeIFVODtW74oj1yBQah3E8tyz3SkpolKS9Geo9YMD1QJR1Go4oJkgO1pgbNZq0AOUPChyjvh7vlXaQa+X1UXwKxgHokB2XPxbX+AnijwIU4ahazAAAAAElFTkSuQmCC'), + createdAt: timestamp("createdAt", { precision: 3, mode: 'date' }).defaultNow().notNull(), + updatedAt: timestamp("updatedAt", { precision: 3, mode: 'date' }).notNull(), + published: boolean("published").default(false).notNull(), + siteId: text("siteId").references(() => sites.id, { onDelete: "cascade", onUpdate: "cascade" } ), + userId: text("userId").references(() => users.id, { onDelete: "cascade", onUpdate: "cascade" } ), +}, +(table) => { + return { + siteIdIdx: index("Post_siteId_idx").on(table.siteId), + userIdIdx: index("Post_userId_idx").on(table.userId), + slugSiteIdKey: uniqueIndex("Post_slug_siteId_key").on(table.slug, table.siteId), + } +}); + +export const postsRelations = relations(posts, ({one}) => ({ + site: one(sites, {references: [sites.id], fields: [posts.siteId]}), + user: one(users, {references: [users.id], fields: [posts.userId]}) +})) + +export const sitesRelations = relations(sites, ({one, many}) => ({ + posts: many(posts), + user: one(users, {references: [users.id], fields: [sites.userId]}) +})) + +export const sessionsRelations = relations(sessions, ({one}) => ({ + user: one(users, {references: [users.id], fields: [sessions.userId]}) +})) + +export const accountsRelations = relations(accounts, ({one}) => ({ + user: one(users, {references: [users.id], fields: [accounts.userId]}) +})) + +export const userRelations = relations(users, ({many}) => ({ + accounts: many(accounts), + sessions: many(sessions), + sites: many(sites), + posts: many(posts), +})) + +export type SelectSite = typeof sites.$inferSelect +export type SelectPost = typeof posts.$inferSelect +export type SelectExample = typeof examples.$inferSelect diff --git a/lib/fetchers-prisma.ts b/lib/fetchers-prisma.ts new file mode 100644 index 000000000..f60445a58 --- /dev/null +++ b/lib/fetchers-prisma.ts @@ -0,0 +1,133 @@ +import { unstable_cache } from "next/cache"; +import prisma from "@/lib/prisma"; +import { serialize } from "next-mdx-remote/serialize"; +import { replaceExamples, replaceTweets } from "@/lib/remark-plugins-prisma"; + +export async function getSiteData(domain: string) { + const subdomain = domain.endsWith(`.${process.env.NEXT_PUBLIC_ROOT_DOMAIN}`) + ? domain.replace(`.${process.env.NEXT_PUBLIC_ROOT_DOMAIN}`, "") + : null; + + return await unstable_cache( + async () => { + return prisma.site.findUnique({ + where: subdomain ? { subdomain } : { customDomain: domain }, + include: { user: true }, + }); + }, + [`${domain}-metadata`], + { + revalidate: 900, + tags: [`${domain}-metadata`], + }, + )(); +} + +export async function getPostsForSite(domain: string) { + const subdomain = domain.endsWith(`.${process.env.NEXT_PUBLIC_ROOT_DOMAIN}`) + ? domain.replace(`.${process.env.NEXT_PUBLIC_ROOT_DOMAIN}`, "") + : null; + + return await unstable_cache( + async () => { + return prisma.post.findMany({ + where: { + site: subdomain ? { subdomain } : { customDomain: domain }, + published: true, + }, + select: { + title: true, + description: true, + slug: true, + image: true, + imageBlurhash: true, + createdAt: true, + }, + orderBy: [ + { + createdAt: "desc", + }, + ], + }); + }, + [`${domain}-posts`], + { + revalidate: 900, + tags: [`${domain}-posts`], + }, + )(); +} + +export async function getPostData(domain: string, slug: string) { + const subdomain = domain.endsWith(`.${process.env.NEXT_PUBLIC_ROOT_DOMAIN}`) + ? domain.replace(`.${process.env.NEXT_PUBLIC_ROOT_DOMAIN}`, "") + : null; + + return await unstable_cache( + async () => { + const data = await prisma.post.findFirst({ + where: { + site: subdomain ? { subdomain } : { customDomain: domain }, + slug, + published: true, + }, + include: { + site: { + include: { + user: true, + }, + }, + }, + }); + + if (!data) return null; + + const [mdxSource, adjacentPosts] = await Promise.all([ + getMdxSource(data.content!), + prisma.post.findMany({ + where: { + site: subdomain ? { subdomain } : { customDomain: domain }, + published: true, + NOT: { + id: data.id, + }, + }, + select: { + slug: true, + title: true, + createdAt: true, + description: true, + image: true, + imageBlurhash: true, + }, + }), + ]); + + return { + ...data, + mdxSource, + adjacentPosts, + }; + }, + [`${domain}-${slug}`], + { + revalidate: 900, // 15 minutes + tags: [`${domain}-${slug}`], + }, + )(); +} + +async function getMdxSource(postContents: string) { + // transforms links like to [link](link) as MDX doesn't support syntax + // https://mdxjs.com/docs/what-is-mdx/#markdown + const content = + postContents?.replaceAll(/<(https?:\/\/\S+)>/g, "[$1]($1)") ?? ""; + // Serialize the content string into MDX + const mdxSource = await serialize(content, { + mdxOptions: { + remarkPlugins: [replaceTweets, () => replaceExamples(prisma)], + }, + }); + + return mdxSource; +} diff --git a/lib/fetchers.ts b/lib/fetchers.ts index c5e11600c..a16c2067d 100644 --- a/lib/fetchers.ts +++ b/lib/fetchers.ts @@ -1,5 +1,7 @@ import { unstable_cache } from "next/cache"; -import prisma from "@/lib/prisma"; +import db from "./db/db"; +import { and, desc, eq, not } from "drizzle-orm"; +import { posts, sites, users } from "./db/schema"; import { serialize } from "next-mdx-remote/serialize"; import { replaceExamples, replaceTweets } from "@/lib/remark-plugins"; @@ -10,10 +12,12 @@ export async function getSiteData(domain: string) { return await unstable_cache( async () => { - return prisma.site.findUnique({ - where: subdomain ? { subdomain } : { customDomain: domain }, - include: { user: true }, - }); + return await db.query.sites.findFirst({ + where: subdomain ? eq(sites.subdomain, subdomain) : eq(sites.customDomain, domain), + with: { + user:true + } + }) }, [`${domain}-metadata`], { @@ -30,25 +34,16 @@ export async function getPostsForSite(domain: string) { return await unstable_cache( async () => { - return prisma.post.findMany({ - where: { - site: subdomain ? { subdomain } : { customDomain: domain }, - published: true, - }, - select: { - title: true, - description: true, - slug: true, - image: true, - imageBlurhash: true, - createdAt: true, - }, - orderBy: [ - { - createdAt: "desc", - }, - ], - }); + return await db.select({ + title: posts.title, + description: posts.description, + slug: posts.slug, + image: posts.image, + imageBlurhash: posts.imageBlurhash, + createdAt: posts.createdAt, + }).from(posts).leftJoin(sites, eq(posts.siteId, sites.id)) + .where(and(eq(posts.published,true), subdomain ? eq(sites.subdomain, subdomain) : eq(sites.customDomain, domain) )) + .orderBy(desc(posts.createdAt)) }, [`${domain}-posts`], { @@ -65,42 +60,30 @@ export async function getPostData(domain: string, slug: string) { return await unstable_cache( async () => { - const data = await prisma.post.findFirst({ - where: { - site: subdomain ? { subdomain } : { customDomain: domain }, - slug, - published: true, - }, - include: { - site: { - include: { - user: true, - }, - }, - }, - }); + const data = await db.select().from(posts).leftJoin(sites, eq(sites.id, posts.siteId)) + .leftJoin(users, eq(users.id, sites.userId)) + .where(and(eq(posts.slug, slug), eq(posts.published, true), subdomain ? eq(sites.subdomain, subdomain) : eq(sites.customDomain, domain))) + .then((res) => res.length > 0 ? { + ...res[0].Post, + site: res[0].Site ? { + ...res[0].Site, + user: res[0].User + } : null + } : null) if (!data) return null; const [mdxSource, adjacentPosts] = await Promise.all([ getMdxSource(data.content!), - prisma.post.findMany({ - where: { - site: subdomain ? { subdomain } : { customDomain: domain }, - published: true, - NOT: { - id: data.id, - }, - }, - select: { - slug: true, - title: true, - createdAt: true, - description: true, - image: true, - imageBlurhash: true, - }, - }), + db.select({ + slug: posts.slug, + title: posts.title, + createdAt: posts.createdAt, + description: posts.description, + image: posts.image, + imageBlurhash: posts.imageBlurhash, + }).from(posts).leftJoin(sites, eq(sites.id, posts.siteId)) + .where(and(eq(posts.published,true), not(eq(posts.id, data.id)), subdomain ? eq(sites.subdomain, subdomain) : eq(sites.customDomain, domain))), ]); return { @@ -125,7 +108,7 @@ async function getMdxSource(postContents: string) { // Serialize the content string into MDX const mdxSource = await serialize(content, { mdxOptions: { - remarkPlugins: [replaceTweets, () => replaceExamples(prisma)], + remarkPlugins: [replaceTweets, () => replaceExamples(db)], }, }); diff --git a/lib/remark-plugins-prisma.tsx b/lib/remark-plugins-prisma.tsx new file mode 100644 index 000000000..1e13236bc --- /dev/null +++ b/lib/remark-plugins-prisma.tsx @@ -0,0 +1,117 @@ +import Link from "next/link"; +import { visit } from "unist-util-visit"; +import type { Example, PrismaClient } from "@prisma/client"; +import { ReactNode } from "react"; + +export function replaceLinks({ + href, + children, +}: { + href?: string; + children: ReactNode; +}) { + // this is technically not a remark plugin but it + // replaces internal links with component + // and external links with + return href?.startsWith("/") || href === "" ? ( + + {children} + + ) : ( + + {children} ↗ + + ); +} + +export function replaceTweets() { + return (tree: any) => + new Promise(async (resolve, reject) => { + const nodesToChange = new Array(); + + visit(tree, "link", (node: any) => { + if ( + node.url.match( + /https?:\/\/twitter\.com\/(?:#!\/)?(\w+)\/status(?:es)?\/(\d+)([^\?])(\?.*)?/g, + ) + ) { + nodesToChange.push({ + node, + }); + } + }); + for (const { node } of nodesToChange) { + try { + const regex = /\/status\/(\d+)/gm; + const matches = regex.exec(node.url); + + if (!matches) throw new Error(`Failed to get tweet: ${node}`); + + const id = matches[1]; + + node.type = "mdxJsxFlowElement"; + node.name = "Tweet"; + node.attributes = [ + { + type: "mdxJsxAttribute", + name: "id", + value: id, + }, + ]; + } catch (e) { + console.log("ERROR", e); + return reject(e); + } + } + + resolve(); + }); +} + +export function replaceExamples(prisma: PrismaClient) { + return (tree: any) => + new Promise(async (resolve, reject) => { + const nodesToChange = new Array(); + + visit(tree, "mdxJsxFlowElement", (node: any) => { + if (node.name == "Examples") { + nodesToChange.push({ + node, + }); + } + }); + for (const { node } of nodesToChange) { + try { + const data = await getExamples(node, prisma); + node.attributes = [ + { + type: "mdxJsxAttribute", + name: "data", + value: data, + }, + ]; + } catch (e) { + return reject(e); + } + } + + resolve(); + }); +} + +async function getExamples(node: any, prisma: PrismaClient) { + const names = node?.attributes[0].value.split(","); + + const data = new Array(); + + for (let i = 0; i < names.length; i++) { + const results = await prisma.example.findUnique({ + where: { + id: parseInt(names[i]), + }, + }); + data.push(results); + } + + return JSON.stringify(data); +} diff --git a/lib/remark-plugins.tsx b/lib/remark-plugins.tsx index 1e13236bc..e285757bc 100644 --- a/lib/remark-plugins.tsx +++ b/lib/remark-plugins.tsx @@ -1,7 +1,8 @@ import Link from "next/link"; import { visit } from "unist-util-visit"; -import type { Example, PrismaClient } from "@prisma/client"; import { ReactNode } from "react"; +import { DrizzleClient } from "./db/db"; +import { SelectExample } from "./db/schema"; export function replaceLinks({ href, @@ -68,7 +69,7 @@ export function replaceTweets() { }); } -export function replaceExamples(prisma: PrismaClient) { +export function replaceExamples(drizzle: DrizzleClient) { return (tree: any) => new Promise(async (resolve, reject) => { const nodesToChange = new Array(); @@ -82,7 +83,7 @@ export function replaceExamples(prisma: PrismaClient) { }); for (const { node } of nodesToChange) { try { - const data = await getExamples(node, prisma); + const data = await getExamples(node, drizzle); node.attributes = [ { type: "mdxJsxAttribute", @@ -99,17 +100,17 @@ export function replaceExamples(prisma: PrismaClient) { }); } -async function getExamples(node: any, prisma: PrismaClient) { +async function getExamples(node: any, drizzle: DrizzleClient) { const names = node?.attributes[0].value.split(","); - const data = new Array(); + // changed to | undefined (was null) + const data = new Array(); for (let i = 0; i < names.length; i++) { - const results = await prisma.example.findUnique({ - where: { - id: parseInt(names[i]), - }, - }); + const results = await drizzle.query.examples.findFirst({ + where: (examples, { eq }) => (eq(examples.id, parseInt(names[i]))), + }) + data.push(results); } diff --git a/package.json b/package.json index 3b255fdbe..c83ec28f2 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,9 @@ "lint": "next lint" }, "dependencies": { + "@auth/drizzle-adapter": "^0.8.1", "@next-auth/prisma-adapter": "^1.0.7", + "@paralleldrive/cuid2": "^2.2.2", "@prisma/client": "^5.5.2", "@tremor/react": "^3.11.1", "@upstash/ratelimit": "^0.4.4", @@ -20,6 +22,7 @@ "ai": "^2.2.22", "clsx": "^2.0.0", "date-fns": "^2.30.0", + "drizzle-orm": "^0.30.4", "focus-trap-react": "^10.2.3", "framer-motion": "^10.16.4", "gray-matter": "^4.0.3", @@ -51,6 +54,7 @@ "@types/react": "^18.2.37", "@types/react-dom": "^18.2.15", "autoprefixer": "^10.4.16", + "drizzle-kit": "^0.20.14", "eslint": "8.53.0", "eslint-config-next": "^14.0.2", "postcss": "^8.4.31", From 56065b04865be0056a5ab3af9809ad884b5f3a9e Mon Sep 17 00:00:00 2001 From: realmikesolo Date: Wed, 27 Mar 2024 12:18:55 +0100 Subject: [PATCH 02/14] migrate to drizzle: wip --- app/[domain]/[slug]/page-prisma.tsx | 180 ++++++++++++++++++ app/[domain]/[slug]/page.tsx | 29 ++- app/[domain]/page-prisma.tsx | 139 ++++++++++++++ app/[domain]/page.tsx | 15 +- app/app/(dashboard)/post/[id]/page-prisma.tsx | 28 +++ app/app/(dashboard)/post/[id]/page.tsx | 22 +-- .../post/[id]/settings/page-prisma.tsx | 60 ++++++ .../(dashboard)/post/[id]/settings/page.tsx | 9 +- .../site/[id]/analytics/page-prisma.tsx | 46 +++++ .../(dashboard)/site/[id]/analytics/page.tsx | 10 +- app/app/(dashboard)/site/[id]/page-prisma.tsx | 55 ++++++ app/app/(dashboard)/site/[id]/page.tsx | 9 +- .../[id]/settings/appearance/page-prisma.tsx | 66 +++++++ .../site/[id]/settings/appearance/page.tsx | 9 +- .../[id]/settings/domains/page-prisma.tsx | 47 +++++ .../site/[id]/settings/domains/page.tsx | 9 +- .../site/[id]/settings/layout-prisma.tsx | 53 ++++++ .../(dashboard)/site/[id]/settings/layout.tsx | 9 +- .../site/[id]/settings/page-prisma.tsx | 49 +++++ .../(dashboard)/site/[id]/settings/page.tsx | 9 +- components/overview-sites-cta-prisma.tsx | 30 +++ components/overview-sites-cta.tsx | 11 +- components/posts-prisma.tsx | 52 +++++ components/posts.tsx | 28 ++- components/sites-prisma.tsx | 44 +++++ components/sites.tsx | 28 +-- lib/db/schema.ts | 16 +- lib/utils.ts | 9 + 28 files changed, 957 insertions(+), 114 deletions(-) create mode 100644 app/[domain]/[slug]/page-prisma.tsx create mode 100644 app/[domain]/page-prisma.tsx create mode 100644 app/app/(dashboard)/post/[id]/page-prisma.tsx create mode 100644 app/app/(dashboard)/post/[id]/settings/page-prisma.tsx create mode 100644 app/app/(dashboard)/site/[id]/analytics/page-prisma.tsx create mode 100644 app/app/(dashboard)/site/[id]/page-prisma.tsx create mode 100644 app/app/(dashboard)/site/[id]/settings/appearance/page-prisma.tsx create mode 100644 app/app/(dashboard)/site/[id]/settings/domains/page-prisma.tsx create mode 100644 app/app/(dashboard)/site/[id]/settings/layout-prisma.tsx create mode 100644 app/app/(dashboard)/site/[id]/settings/page-prisma.tsx create mode 100644 components/overview-sites-cta-prisma.tsx create mode 100644 components/posts-prisma.tsx create mode 100644 components/sites-prisma.tsx diff --git a/app/[domain]/[slug]/page-prisma.tsx b/app/[domain]/[slug]/page-prisma.tsx new file mode 100644 index 000000000..eb61c49d4 --- /dev/null +++ b/app/[domain]/[slug]/page-prisma.tsx @@ -0,0 +1,180 @@ +import { notFound } from "next/navigation"; +import prisma from "@/lib/prisma"; +import { getPostData, getSiteData } from "@/lib/fetchers"; +import BlogCard from "@/components/blog-card"; +import BlurImage from "@/components/blur-image"; +import MDX from "@/components/mdx"; +import { placeholderBlurhash, toDateString } from "@/lib/utils"; + +export async function generateMetadata({ + params, +}: { + params: { domain: string; slug: string }; +}) { + const domain = decodeURIComponent(params.domain); + const slug = decodeURIComponent(params.slug); + + const [data, siteData] = await Promise.all([ + getPostData(domain, slug), + getSiteData(domain), + ]); + if (!data || !siteData) { + return null; + } + const { title, description } = data; + + return { + title, + description, + openGraph: { + title, + description, + }, + twitter: { + card: "summary_large_image", + title, + description, + creator: "@vercel", + }, + // Optional: Set canonical URL to custom domain if it exists + // ...(params.domain.endsWith(`.${process.env.NEXT_PUBLIC_ROOT_DOMAIN}`) && + // siteData.customDomain && { + // alternates: { + // canonical: `https://${siteData.customDomain}/${params.slug}`, + // }, + // }), + }; +} + +export async function generateStaticParams() { + const allPosts = await prisma.post.findMany({ + select: { + slug: true, + site: { + select: { + subdomain: true, + customDomain: true, + }, + }, + }, + // feel free to remove this filter if you want to generate paths for all posts + where: { + site: { + subdomain: "demo", + }, + }, + }); + + const allPaths = allPosts + .flatMap(({ site, slug }) => [ + site?.subdomain && { + domain: `${site.subdomain}.${process.env.NEXT_PUBLIC_ROOT_DOMAIN}`, + slug, + }, + site?.customDomain && { + domain: site.customDomain, + slug, + }, + ]) + .filter(Boolean); + + return allPaths; +} + +export default async function SitePostPage({ + params, +}: { + params: { domain: string; slug: string }; +}) { + const domain = decodeURIComponent(params.domain); + const slug = decodeURIComponent(params.slug); + const data = await getPostData(domain, slug); + + if (!data) { + notFound(); + } + + return ( + <> +
+
+

+ {toDateString(data.createdAt)} +

+

+ {data.title} +

+

+ {data.description} +

+
+ +
+
+ {data.site?.user?.image ? ( + + ) : ( +
+ ? +
+ )} +
+
+ by {data.site?.user?.name} +
+
+
+
+
+ +
+ + + + {data.adjacentPosts.length > 0 && ( +
+ + )} + {data.adjacentPosts && ( +
+ {data.adjacentPosts.map((data: any, index: number) => ( + + ))} +
+ )} + + ); +} diff --git a/app/[domain]/[slug]/page.tsx b/app/[domain]/[slug]/page.tsx index eb61c49d4..b3bec321c 100644 --- a/app/[domain]/[slug]/page.tsx +++ b/app/[domain]/[slug]/page.tsx @@ -5,6 +5,9 @@ import BlogCard from "@/components/blog-card"; import BlurImage from "@/components/blur-image"; import MDX from "@/components/mdx"; import { placeholderBlurhash, toDateString } from "@/lib/utils"; +import db from "@/lib/db/db"; +import { posts, sites } from "@/lib/db/schema"; +import { eq } from "drizzle-orm"; export async function generateMetadata({ params, @@ -47,23 +50,15 @@ export async function generateMetadata({ } export async function generateStaticParams() { - const allPosts = await prisma.post.findMany({ - select: { - slug: true, - site: { - select: { - subdomain: true, - customDomain: true, - }, - }, - }, - // feel free to remove this filter if you want to generate paths for all posts - where: { - site: { - subdomain: "demo", - }, + const allPosts = await db.select({ + slug: posts.slug, + site: { + subdomain: sites.subdomain, + customDomain: sites.customDomain, }, - }); + }).from(posts) + .leftJoin(sites, eq(posts.siteId, sites.id)) + .where(eq(sites.subdomain, 'demo')) // feel free to remove this filter if you want to generate paths for all posts const allPaths = allPosts .flatMap(({ site, slug }) => [ @@ -113,7 +108,7 @@ export default async function SitePostPage({ href={ data.site?.user?.username ? `https://twitter.com/${data.site.user.username}` - : `https://github.com/${data.site?.user?.gh_username}` + : `https://github.com/${data.site?.user?.ghUsername}` } rel="noreferrer" target="_blank" diff --git a/app/[domain]/page-prisma.tsx b/app/[domain]/page-prisma.tsx new file mode 100644 index 000000000..c872863ed --- /dev/null +++ b/app/[domain]/page-prisma.tsx @@ -0,0 +1,139 @@ +import Link from "next/link"; +import prisma from "@/lib/prisma"; +import { notFound } from "next/navigation"; +import BlurImage from "@/components/blur-image"; +import { placeholderBlurhash, toDateString } from "@/lib/utils"; +import BlogCard from "@/components/blog-card"; +import { getPostsForSite, getSiteData } from "@/lib/fetchers"; +import Image from "next/image"; + +export async function generateStaticParams() { + const allSites = await prisma.site.findMany({ + select: { + subdomain: true, + customDomain: true, + }, + // feel free to remove this filter if you want to generate paths for all sites + where: { + subdomain: "demo", + }, + }); + + const allPaths = allSites + .flatMap(({ subdomain, customDomain }) => [ + subdomain && { + domain: `${subdomain}.${process.env.NEXT_PUBLIC_ROOT_DOMAIN}`, + }, + customDomain && { + domain: customDomain, + }, + ]) + .filter(Boolean); + + return allPaths; +} + +export default async function SiteHomePage({ + params, +}: { + params: { domain: string }; +}) { + const domain = decodeURIComponent(params.domain); + const [data, posts] = await Promise.all([ + getSiteData(domain), + getPostsForSite(domain), + ]); + + if (!data) { + notFound(); + } + + return ( + <> +
+ {posts.length > 0 ? ( +
+ +
+ +
+
+

+ {posts[0].title} +

+

+ {posts[0].description} +

+
+
+ {data.user?.image ? ( + + ) : ( +
+ ? +
+ )} +
+

+ {data.user?.name} +

+
+

+ {toDateString(posts[0].createdAt)} +

+
+
+ +
+ ) : ( +
+ missing post + missing post +

+ No posts yet. +

+
+ )} +
+ + {posts.length > 1 && ( +
+

+ More stories +

+
+ {posts.slice(1).map((metadata: any, index: number) => ( + + ))} +
+
+ )} + + ); +} diff --git a/app/[domain]/page.tsx b/app/[domain]/page.tsx index c872863ed..63a6e64df 100644 --- a/app/[domain]/page.tsx +++ b/app/[domain]/page.tsx @@ -6,18 +6,17 @@ import { placeholderBlurhash, toDateString } from "@/lib/utils"; import BlogCard from "@/components/blog-card"; import { getPostsForSite, getSiteData } from "@/lib/fetchers"; import Image from "next/image"; +import db from "@/lib/db/db"; export async function generateStaticParams() { - const allSites = await prisma.site.findMany({ - select: { + const allSites = await db.query.sites.findMany({ + // feel free to remove this filter if you want to generate paths for all sites + where: (sites, { eq }) => eq(sites.subdomain, 'demo'), + columns: { subdomain: true, customDomain: true, - }, - // feel free to remove this filter if you want to generate paths for all sites - where: { - subdomain: "demo", - }, - }); + } + }) const allPaths = allSites .flatMap(({ subdomain, customDomain }) => [ diff --git a/app/app/(dashboard)/post/[id]/page-prisma.tsx b/app/app/(dashboard)/post/[id]/page-prisma.tsx new file mode 100644 index 000000000..921f02e49 --- /dev/null +++ b/app/app/(dashboard)/post/[id]/page-prisma.tsx @@ -0,0 +1,28 @@ +import { getSession } from "@/lib/auth"; +import prisma from "@/lib/prisma"; +import { notFound, redirect } from "next/navigation"; +import Editor from "@/components/editor"; + +export default async function PostPage({ params }: { params: { id: string } }) { + const session = await getSession(); + if (!session) { + redirect("/login"); + } + const data = await prisma.post.findUnique({ + where: { + id: decodeURIComponent(params.id), + }, + include: { + site: { + select: { + subdomain: true, + }, + }, + }, + }); + if (!data || data.userId !== session.user.id) { + notFound(); + } + + return ; +} diff --git a/app/app/(dashboard)/post/[id]/page.tsx b/app/app/(dashboard)/post/[id]/page.tsx index 921f02e49..f68c9d5a9 100644 --- a/app/app/(dashboard)/post/[id]/page.tsx +++ b/app/app/(dashboard)/post/[id]/page.tsx @@ -2,24 +2,24 @@ import { getSession } from "@/lib/auth"; import prisma from "@/lib/prisma"; import { notFound, redirect } from "next/navigation"; import Editor from "@/components/editor"; +import db from "@/lib/db/db"; export default async function PostPage({ params }: { params: { id: string } }) { const session = await getSession(); if (!session) { redirect("/login"); } - const data = await prisma.post.findUnique({ - where: { - id: decodeURIComponent(params.id), - }, - include: { + + const data = await db.query.posts.findFirst({ + where: (posts, { eq }) => eq(posts.id, decodeURIComponent(params.id)), + with: { site: { - select: { - subdomain: true, - }, - }, - }, - }); + columns: { + subdomain:true + } + } + } + }) if (!data || data.userId !== session.user.id) { notFound(); } diff --git a/app/app/(dashboard)/post/[id]/settings/page-prisma.tsx b/app/app/(dashboard)/post/[id]/settings/page-prisma.tsx new file mode 100644 index 000000000..b12262c8b --- /dev/null +++ b/app/app/(dashboard)/post/[id]/settings/page-prisma.tsx @@ -0,0 +1,60 @@ +import { getSession } from "@/lib/auth"; +import prisma from "@/lib/prisma"; +import { notFound, redirect } from "next/navigation"; +import Form from "@/components/form"; +import { updatePostMetadata } from "@/lib/actions"; +import DeletePostForm from "@/components/form/delete-post-form"; + +export default async function PostSettings({ + params, +}: { + params: { id: string }; +}) { + const session = await getSession(); + if (!session) { + redirect("/login"); + } + const data = await prisma.post.findUnique({ + where: { + id: decodeURIComponent(params.id), + }, + }); + if (!data || data.userId !== session.user.id) { + notFound(); + } + return ( +
+
+

+ Post Settings +

+
+ + + + +
+
+ ); +} diff --git a/app/app/(dashboard)/post/[id]/settings/page.tsx b/app/app/(dashboard)/post/[id]/settings/page.tsx index b12262c8b..7e11a49c8 100644 --- a/app/app/(dashboard)/post/[id]/settings/page.tsx +++ b/app/app/(dashboard)/post/[id]/settings/page.tsx @@ -4,6 +4,7 @@ import { notFound, redirect } from "next/navigation"; import Form from "@/components/form"; import { updatePostMetadata } from "@/lib/actions"; import DeletePostForm from "@/components/form/delete-post-form"; +import db from "@/lib/db/db"; export default async function PostSettings({ params, @@ -14,11 +15,9 @@ export default async function PostSettings({ if (!session) { redirect("/login"); } - const data = await prisma.post.findUnique({ - where: { - id: decodeURIComponent(params.id), - }, - }); + const data = await db.query.posts.findFirst({ + where: (posts, { eq }) => eq(posts.id, decodeURIComponent(params.id)), + }) if (!data || data.userId !== session.user.id) { notFound(); } diff --git a/app/app/(dashboard)/site/[id]/analytics/page-prisma.tsx b/app/app/(dashboard)/site/[id]/analytics/page-prisma.tsx new file mode 100644 index 000000000..43bb7e417 --- /dev/null +++ b/app/app/(dashboard)/site/[id]/analytics/page-prisma.tsx @@ -0,0 +1,46 @@ +import { getSession } from "@/lib/auth"; +import prisma from "@/lib/prisma"; +import { notFound, redirect } from "next/navigation"; +import AnalyticsMockup from "@/components/analytics"; + +export default async function SiteAnalytics({ + params, +}: { + params: { id: string }; +}) { + const session = await getSession(); + if (!session) { + redirect("/login"); + } + const data = await prisma.site.findUnique({ + where: { + id: decodeURIComponent(params.id), + }, + }); + if (!data || data.userId !== session.user.id) { + notFound(); + } + + const url = `${data.subdomain}.${process.env.NEXT_PUBLIC_ROOT_DOMAIN}`; + + return ( + <> +
+
+

+ Analytics for {data.name} +

+ + {url} ↗ + +
+
+ + + ); +} diff --git a/app/app/(dashboard)/site/[id]/analytics/page.tsx b/app/app/(dashboard)/site/[id]/analytics/page.tsx index 43bb7e417..a6d4f5b1f 100644 --- a/app/app/(dashboard)/site/[id]/analytics/page.tsx +++ b/app/app/(dashboard)/site/[id]/analytics/page.tsx @@ -2,6 +2,7 @@ import { getSession } from "@/lib/auth"; import prisma from "@/lib/prisma"; import { notFound, redirect } from "next/navigation"; import AnalyticsMockup from "@/components/analytics"; +import db from "@/lib/db/db"; export default async function SiteAnalytics({ params, @@ -12,11 +13,10 @@ export default async function SiteAnalytics({ if (!session) { redirect("/login"); } - const data = await prisma.site.findUnique({ - where: { - id: decodeURIComponent(params.id), - }, - }); + const data = await db.query.sites.findFirst({ + where: (sites, { eq }) => eq(sites.id, decodeURIComponent(params.id)), + }) + if (!data || data.userId !== session.user.id) { notFound(); } diff --git a/app/app/(dashboard)/site/[id]/page-prisma.tsx b/app/app/(dashboard)/site/[id]/page-prisma.tsx new file mode 100644 index 000000000..43c2fb66a --- /dev/null +++ b/app/app/(dashboard)/site/[id]/page-prisma.tsx @@ -0,0 +1,55 @@ + + +import { getSession } from "@/lib/auth"; +import prisma from "@/lib/prisma"; +import { notFound, redirect } from "next/navigation"; +import Posts from "@/components/posts"; +import CreatePostButton from "@/components/create-post-button"; + +export default async function SitePosts({ + params, +}: { + params: { id: string }; +}) { + const session = await getSession(); + if (!session) { + redirect("/login"); + } + const data = await prisma.site.findUnique({ + where: { + id: decodeURIComponent(params.id), + }, + }); + + if (!data || data.userId !== session.user.id) { + notFound(); + } + + const url = `${data.subdomain}.${process.env.NEXT_PUBLIC_ROOT_DOMAIN}`; + + return ( + <> +
+
+

+ All Posts for {data.name} +

+ + {url} ↗ + +
+ +
+ + + ); +} diff --git a/app/app/(dashboard)/site/[id]/page.tsx b/app/app/(dashboard)/site/[id]/page.tsx index f92bfb453..f1588f6df 100644 --- a/app/app/(dashboard)/site/[id]/page.tsx +++ b/app/app/(dashboard)/site/[id]/page.tsx @@ -3,6 +3,7 @@ import prisma from "@/lib/prisma"; import { notFound, redirect } from "next/navigation"; import Posts from "@/components/posts"; import CreatePostButton from "@/components/create-post-button"; +import db from "@/lib/db/db"; export default async function SitePosts({ params, @@ -13,11 +14,9 @@ export default async function SitePosts({ if (!session) { redirect("/login"); } - const data = await prisma.site.findUnique({ - where: { - id: decodeURIComponent(params.id), - }, - }); + const data = await db.query.sites.findFirst({ + where: (sites, { eq }) => eq(sites.id, decodeURIComponent(params.id)), + }) if (!data || data.userId !== session.user.id) { notFound(); diff --git a/app/app/(dashboard)/site/[id]/settings/appearance/page-prisma.tsx b/app/app/(dashboard)/site/[id]/settings/appearance/page-prisma.tsx new file mode 100644 index 000000000..ee5ada880 --- /dev/null +++ b/app/app/(dashboard)/site/[id]/settings/appearance/page-prisma.tsx @@ -0,0 +1,66 @@ +import prisma from "@/lib/prisma"; +import Form from "@/components/form"; +import { updateSite } from "@/lib/actions"; + +export default async function SiteSettingsAppearance({ + params, +}: { + params: { id: string }; +}) { + const data = await prisma.site.findUnique({ + where: { + id: decodeURIComponent(params.id), + }, + }); + + return ( +
+ + + + +
+ ); +} diff --git a/app/app/(dashboard)/site/[id]/settings/appearance/page.tsx b/app/app/(dashboard)/site/[id]/settings/appearance/page.tsx index ee5ada880..7de3f4d17 100644 --- a/app/app/(dashboard)/site/[id]/settings/appearance/page.tsx +++ b/app/app/(dashboard)/site/[id]/settings/appearance/page.tsx @@ -1,17 +1,16 @@ import prisma from "@/lib/prisma"; import Form from "@/components/form"; import { updateSite } from "@/lib/actions"; +import db from "@/lib/db/db"; export default async function SiteSettingsAppearance({ params, }: { params: { id: string }; }) { - const data = await prisma.site.findUnique({ - where: { - id: decodeURIComponent(params.id), - }, - }); + const data = await db.query.sites.findFirst({ + where: (sites, { eq }) => eq(sites.id, decodeURIComponent(params.id)), + }) return (
diff --git a/app/app/(dashboard)/site/[id]/settings/domains/page-prisma.tsx b/app/app/(dashboard)/site/[id]/settings/domains/page-prisma.tsx new file mode 100644 index 000000000..6be2ed46c --- /dev/null +++ b/app/app/(dashboard)/site/[id]/settings/domains/page-prisma.tsx @@ -0,0 +1,47 @@ +import prisma from "@/lib/prisma"; +import Form from "@/components/form"; +import { updateSite } from "@/lib/actions"; + +export default async function SiteSettingsDomains({ + params, +}: { + params: { id: string }; +}) { + const data = await prisma.site.findUnique({ + where: { + id: decodeURIComponent(params.id), + }, + }); + + return ( +
+ + +
+ ); +} diff --git a/app/app/(dashboard)/site/[id]/settings/domains/page.tsx b/app/app/(dashboard)/site/[id]/settings/domains/page.tsx index 6be2ed46c..71e5cd2e6 100644 --- a/app/app/(dashboard)/site/[id]/settings/domains/page.tsx +++ b/app/app/(dashboard)/site/[id]/settings/domains/page.tsx @@ -1,17 +1,16 @@ import prisma from "@/lib/prisma"; import Form from "@/components/form"; import { updateSite } from "@/lib/actions"; +import db from "@/lib/db/db"; export default async function SiteSettingsDomains({ params, }: { params: { id: string }; }) { - const data = await prisma.site.findUnique({ - where: { - id: decodeURIComponent(params.id), - }, - }); + const data = await db.query.sites.findFirst({ + where: (sites, { eq }) => eq(sites.id, decodeURIComponent(params.id)), + }) return (
diff --git a/app/app/(dashboard)/site/[id]/settings/layout-prisma.tsx b/app/app/(dashboard)/site/[id]/settings/layout-prisma.tsx new file mode 100644 index 000000000..3ade5da32 --- /dev/null +++ b/app/app/(dashboard)/site/[id]/settings/layout-prisma.tsx @@ -0,0 +1,53 @@ +import { ReactNode } from "react"; +import { getSession } from "@/lib/auth"; +import prisma from "@/lib/prisma"; +import { notFound, redirect } from "next/navigation"; +import SiteSettingsNav from "./nav"; + +export default async function SiteAnalyticsLayout({ + params, + children, +}: { + params: { id: string }; + children: ReactNode; +}) { + const session = await getSession(); + if (!session) { + redirect("/login"); + } + const data = await prisma.site.findUnique({ + where: { + id: decodeURIComponent(params.id), + }, + }); + + if (!data || data.userId !== session.user.id) { + notFound(); + } + + const url = `${data.subdomain}.${process.env.NEXT_PUBLIC_ROOT_DOMAIN}`; + + return ( + <> +
+

+ Settings for {data.name} +

+ + {url} ↗ + +
+ + {children} + + ); +} diff --git a/app/app/(dashboard)/site/[id]/settings/layout.tsx b/app/app/(dashboard)/site/[id]/settings/layout.tsx index 3ade5da32..838e159a3 100644 --- a/app/app/(dashboard)/site/[id]/settings/layout.tsx +++ b/app/app/(dashboard)/site/[id]/settings/layout.tsx @@ -3,6 +3,7 @@ import { getSession } from "@/lib/auth"; import prisma from "@/lib/prisma"; import { notFound, redirect } from "next/navigation"; import SiteSettingsNav from "./nav"; +import db from "@/lib/db/db"; export default async function SiteAnalyticsLayout({ params, @@ -15,11 +16,9 @@ export default async function SiteAnalyticsLayout({ if (!session) { redirect("/login"); } - const data = await prisma.site.findUnique({ - where: { - id: decodeURIComponent(params.id), - }, - }); + const data = await db.query.sites.findFirst({ + where: (sites, { eq }) => eq(sites.id, decodeURIComponent(params.id)), + }) if (!data || data.userId !== session.user.id) { notFound(); diff --git a/app/app/(dashboard)/site/[id]/settings/page-prisma.tsx b/app/app/(dashboard)/site/[id]/settings/page-prisma.tsx new file mode 100644 index 000000000..7d49010cd --- /dev/null +++ b/app/app/(dashboard)/site/[id]/settings/page-prisma.tsx @@ -0,0 +1,49 @@ +import prisma from "@/lib/prisma"; +import Form from "@/components/form"; +import { updateSite } from "@/lib/actions"; +import DeleteSiteForm from "@/components/form/delete-site-form"; + +export default async function SiteSettingsIndex({ + params, +}: { + params: { id: string }; +}) { + const data = await prisma.site.findUnique({ + where: { + id: decodeURIComponent(params.id), + }, + }); + + return ( +
+ + + + + +
+ ); +} diff --git a/app/app/(dashboard)/site/[id]/settings/page.tsx b/app/app/(dashboard)/site/[id]/settings/page.tsx index 7d49010cd..03ea67230 100644 --- a/app/app/(dashboard)/site/[id]/settings/page.tsx +++ b/app/app/(dashboard)/site/[id]/settings/page.tsx @@ -2,17 +2,16 @@ import prisma from "@/lib/prisma"; import Form from "@/components/form"; import { updateSite } from "@/lib/actions"; import DeleteSiteForm from "@/components/form/delete-site-form"; +import db from "@/lib/db/db"; export default async function SiteSettingsIndex({ params, }: { params: { id: string }; }) { - const data = await prisma.site.findUnique({ - where: { - id: decodeURIComponent(params.id), - }, - }); + const data = await db.query.sites.findFirst({ + where: (sites, { eq }) => eq(sites.id, decodeURIComponent(params.id)), + }) return (
diff --git a/components/overview-sites-cta-prisma.tsx b/components/overview-sites-cta-prisma.tsx new file mode 100644 index 000000000..94670c15b --- /dev/null +++ b/components/overview-sites-cta-prisma.tsx @@ -0,0 +1,30 @@ +import { getSession } from "@/lib/auth"; +import prisma from "@/lib/prisma"; +import CreateSiteButton from "./create-site-button"; +import CreateSiteModal from "./modal/create-site"; +import Link from "next/link"; + +export default async function OverviewSitesCTA() { + const session = await getSession(); + if (!session) { + return 0; + } + const sites = await prisma.site.count({ + where: { + userId: session.user.id as string, + }, + }); + + return sites > 0 ? ( + + View All Sites + + ) : ( + + + + ); +} diff --git a/components/overview-sites-cta.tsx b/components/overview-sites-cta.tsx index 94670c15b..08679c8e4 100644 --- a/components/overview-sites-cta.tsx +++ b/components/overview-sites-cta.tsx @@ -3,19 +3,18 @@ import prisma from "@/lib/prisma"; import CreateSiteButton from "./create-site-button"; import CreateSiteModal from "./modal/create-site"; import Link from "next/link"; +import db from "@/lib/db/db"; +import { sites } from "@/lib/db/schema"; +import { count, eq } from "drizzle-orm"; export default async function OverviewSitesCTA() { const session = await getSession(); if (!session) { return 0; } - const sites = await prisma.site.count({ - where: { - userId: session.user.id as string, - }, - }); + const [sitesResult] = await db.select({count: count()}).from(sites).where(eq(sites.userId, session.user.id)) - return sites > 0 ? ( + return sitesResult.count > 0 ? ( 0 ? ( +
+ {posts.map((post) => ( + + ))} +
+ ) : ( +
+

No Posts Yet

+ missing post +

+ You do not have any posts yet. Create one to get started. +

+
+ ); +} diff --git a/components/posts.tsx b/components/posts.tsx index f076ec7cd..c4da5f734 100644 --- a/components/posts.tsx +++ b/components/posts.tsx @@ -3,6 +3,10 @@ import { redirect } from "next/navigation"; import prisma from "@/lib/prisma"; import PostCard from "./post-card"; import Image from "next/image"; +import db from "@/lib/db/db"; +import { posts, sites, users } from "@/lib/db/schema"; +import { eq, and, desc, getTableColumns } from "drizzle-orm"; +import { withLimit } from "@/lib/utils"; export default async function Posts({ siteId, @@ -15,23 +19,17 @@ export default async function Posts({ if (!session?.user) { redirect("/login"); } - const posts = await prisma.post.findMany({ - where: { - userId: session.user.id as string, - ...(siteId ? { siteId } : {}), - }, - orderBy: { - updatedAt: "desc", - }, - include: { - site: true, - }, - ...(limit ? { take: limit } : {}), - }); + + const query = db.select({ site: sites, ...getTableColumns(posts)}).from(posts) + .leftJoin(sites, eq(posts.siteId, sites.id)) + .where(and(eq(posts.userId, session.user.id), siteId ? eq(sites.id, siteId) : undefined)) + .orderBy(desc(posts.updatedAt)) - return posts.length > 0 ? ( + const postsResult = limit ? await withLimit(query.$dynamic(), limit) : await query + + return postsResult.length > 0 ? (
- {posts.map((post) => ( + {postsResult.map((post) => ( ))}
diff --git a/components/sites-prisma.tsx b/components/sites-prisma.tsx new file mode 100644 index 000000000..b196c292f --- /dev/null +++ b/components/sites-prisma.tsx @@ -0,0 +1,44 @@ +import { getSession } from "@/lib/auth"; +import { redirect } from "next/navigation"; +import prisma from "@/lib/prisma"; +import SiteCard from "./site-card"; +import Image from "next/image"; + +export default async function Sites({ limit }: { limit?: number }) { + const session = await getSession(); + if (!session) { + redirect("/login"); + } + const sites = await prisma.site.findMany({ + where: { + user: { + id: session.user.id as string, + }, + }, + orderBy: { + createdAt: "asc", + }, + ...(limit ? { take: limit } : {}), + }); + + return sites.length > 0 ? ( +
+ {sites.map((site) => ( + + ))} +
+ ) : ( +
+

No Sites Yet

+ missing site +

+ You do not have any sites yet. Create one to get started. +

+
+ ); +} diff --git a/components/sites.tsx b/components/sites.tsx index b196c292f..fa031ec78 100644 --- a/components/sites.tsx +++ b/components/sites.tsx @@ -1,29 +1,28 @@ import { getSession } from "@/lib/auth"; import { redirect } from "next/navigation"; -import prisma from "@/lib/prisma"; import SiteCard from "./site-card"; import Image from "next/image"; +import db from "@/lib/db/db"; +import { sites, users } from "@/lib/db/schema"; +import { asc, eq, getTableColumns } from "drizzle-orm"; +import { withLimit } from "@/lib/utils"; export default async function Sites({ limit }: { limit?: number }) { const session = await getSession(); if (!session) { redirect("/login"); } - const sites = await prisma.site.findMany({ - where: { - user: { - id: session.user.id as string, - }, - }, - orderBy: { - createdAt: "asc", - }, - ...(limit ? { take: limit } : {}), - }); + const query = db.select({ + ...getTableColumns(sites) + }).from(sites).leftJoin(users, eq(sites.userId, users.id)) + .where(eq(users.id, session.user.id)) + .orderBy(asc(sites.createdAt)) - return sites.length > 0 ? ( + const sitesResult = limit ? await withLimit(query.$dynamic(), limit): await query + + return sitesResult.length > 0 ? (
- {sites.map((site) => ( + {sitesResult.map((site) => ( ))}
@@ -42,3 +41,4 @@ export default async function Sites({ limit }: { limit?: number }) {
); } + diff --git a/lib/db/schema.ts b/lib/db/schema.ts index 079989085..b65dfb96a 100644 --- a/lib/db/schema.ts +++ b/lib/db/schema.ts @@ -2,7 +2,7 @@ import { pgTable, uniqueIndex, index, foreignKey, text, timestamp, serial, integ import { relations, sql } from "drizzle-orm" import { createId } from '@paralleldrive/cuid2'; -export const sessions = pgTable("Session", { +export const sessions = pgTable("session", { id: text("id").primaryKey().notNull().$defaultFn(() => createId()), sessionToken: text("sessionToken").notNull(), userId: text("userId").notNull().references(() => users.id, { onDelete: "cascade", onUpdate: "cascade" } ), @@ -15,7 +15,7 @@ export const sessions = pgTable("Session", { } }); -export const verificationTokens = pgTable("VerificationToken", { +export const verificationTokens = pgTable("verificationToken", { identifier: text("identifier").notNull(), token: text("token").notNull(), expires: timestamp("expires", { precision: 3, mode: 'date' }).notNull(), @@ -27,7 +27,7 @@ export const verificationTokens = pgTable("VerificationToken", { } }); -export const users = pgTable("User", { +export const users = pgTable("user", { id: text("id").primaryKey().notNull().$defaultFn(() => createId()), name: text("name"), // if you are using Github OAuth, you can get rid of the username attribute (that is for Twitter OAuth) @@ -45,7 +45,7 @@ export const users = pgTable("User", { } }); -export const examples = pgTable("Example", { +export const examples = pgTable("example", { id: serial("id").primaryKey().notNull(), name: text("name"), description: text("description"), @@ -55,7 +55,7 @@ export const examples = pgTable("Example", { imageBlurhash: text("imageBlurhash"), }); -export const accounts = pgTable("Account", { +export const accounts = pgTable("account", { id: text("id").primaryKey().notNull().$defaultFn(() => createId()), userId: text("userId").notNull().references(() => users.id, { onDelete: "cascade", onUpdate: "cascade" } ), type: text("type").notNull(), @@ -79,7 +79,7 @@ export const accounts = pgTable("Account", { } }); -export const sites = pgTable("Site", { +export const sites = pgTable("site", { id: text("id").primaryKey().notNull().$defaultFn(() => createId()), name: text("name"), description: text("description"), @@ -89,7 +89,7 @@ export const sites = pgTable("Site", { imageBlurhash: text("imageBlurhash").default('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAhCAYAAACbffiEAAAACXBIWXMAABYlAAAWJQFJUiTwAAABfUlEQVR4nN3XyZLDIAwE0Pz/v3q3r55JDlSBplsIEI49h76k4opexCK/juP4eXjOT149f2Tf9ySPgcjCc7kdpBTgDPKByKK2bTPFEdMO0RDrusJ0wLRBGCIuelmWJAjkgPGDSIQEMBDCfA2CEPM80+Qwl0JkNxBimiaYGOTUlXYI60YoehzHJDEm7kxjV3whOQTD3AaCuhGKHoYhyb+CBMwjIAFz647kTqyapdV4enGINuDJMSScPmijSwjCaHeLcT77C7EC0C1ugaCTi2HYfAZANgj6Z9A8xY5eiYghDMNQBJNCWhASot0jGsSCUiHWZcSGQjaWWCDaGMOWnsCcn2QhVkRuxqqNxMSdUSElCDbp1hbNOsa6Ugxh7xXauF4DyM1m5BLtCylBXgaxvPXVwEoOBjeIFVODtW74oj1yBQah3E8tyz3SkpolKS9Geo9YMD1QJR1Go4oJkgO1pgbNZq0AOUPChyjvh7vlXaQa+X1UXwKxgHokB2XPxbX+AnijwIU4ahazAAAAAElFTkSuQmCC'), subdomain: text("subdomain"), customDomain: text("customDomain"), - message404: text("message404").default("Blimey! You've found a page that doesn''t exist."), + message404: text("message404").default("Blimey! You''ve found a page that doesn''t exist."), createdAt: timestamp("createdAt", { precision: 3, mode: 'date' }).defaultNow().notNull(), updatedAt: timestamp("updatedAt", { precision: 3, mode: 'date' }).notNull(), userId: text("userId").references(() => users.id, { onDelete: "cascade", onUpdate: "cascade" } ), @@ -102,7 +102,7 @@ export const sites = pgTable("Site", { } }); -export const posts = pgTable("Post", { +export const posts = pgTable("post", { id: text("id").primaryKey().notNull().$defaultFn(() => createId()), title: text("title"), description: text("description"), diff --git a/lib/utils.ts b/lib/utils.ts index 8b966c59b..89e07f22e 100644 --- a/lib/utils.ts +++ b/lib/utils.ts @@ -1,4 +1,5 @@ import { clsx, type ClassValue } from "clsx"; +import { PgSelect } from "drizzle-orm/pg-core"; import { twMerge } from "tailwind-merge"; export function cn(...inputs: ClassValue[]) { @@ -57,3 +58,11 @@ export const toDateString = (date: Date) => { export const random = (min: number, max: number) => { return Math.floor(Math.random() * (max - min + 1) + min); }; + +export function withLimit( + qb: T, + limit: number, +) { + return qb.limit(limit); +} + From d15d04dc8e76038fce3b885c42300f3b66b80e97 Mon Sep 17 00:00:00 2001 From: realmikesolo Date: Thu, 28 Mar 2024 10:30:27 +0100 Subject: [PATCH 03/14] migrate to drizzle: finish --- app/[domain]/[slug]/page.tsx | 1 - app/[domain]/page.tsx | 1 - app/app/(dashboard)/post/[id]/page.tsx | 1 - lib/auth.ts | 4 +- lib/db/db.ts | 3 +- lib/db/schema.ts | 10 +++-- lib/drizzle-adapter.ts | 57 ++++++++++++++++++++++++++ lib/fetchers.ts | 8 ++-- lib/utils.ts | 10 +++++ package.json | 2 +- 10 files changed, 82 insertions(+), 15 deletions(-) create mode 100644 lib/drizzle-adapter.ts diff --git a/app/[domain]/[slug]/page.tsx b/app/[domain]/[slug]/page.tsx index b3bec321c..2122d711b 100644 --- a/app/[domain]/[slug]/page.tsx +++ b/app/[domain]/[slug]/page.tsx @@ -1,5 +1,4 @@ import { notFound } from "next/navigation"; -import prisma from "@/lib/prisma"; import { getPostData, getSiteData } from "@/lib/fetchers"; import BlogCard from "@/components/blog-card"; import BlurImage from "@/components/blur-image"; diff --git a/app/[domain]/page.tsx b/app/[domain]/page.tsx index 63a6e64df..7903d7389 100644 --- a/app/[domain]/page.tsx +++ b/app/[domain]/page.tsx @@ -1,5 +1,4 @@ import Link from "next/link"; -import prisma from "@/lib/prisma"; import { notFound } from "next/navigation"; import BlurImage from "@/components/blur-image"; import { placeholderBlurhash, toDateString } from "@/lib/utils"; diff --git a/app/app/(dashboard)/post/[id]/page.tsx b/app/app/(dashboard)/post/[id]/page.tsx index f68c9d5a9..42196d1e8 100644 --- a/app/app/(dashboard)/post/[id]/page.tsx +++ b/app/app/(dashboard)/post/[id]/page.tsx @@ -1,5 +1,4 @@ import { getSession } from "@/lib/auth"; -import prisma from "@/lib/prisma"; import { notFound, redirect } from "next/navigation"; import Editor from "@/components/editor"; import db from "@/lib/db/db"; diff --git a/lib/auth.ts b/lib/auth.ts index c16a34cd9..200c289d3 100644 --- a/lib/auth.ts +++ b/lib/auth.ts @@ -1,8 +1,8 @@ import { getServerSession, type NextAuthOptions } from "next-auth"; import GitHubProvider from "next-auth/providers/github"; -import { DrizzleAdapter } from "@auth/drizzle-adapter" import db from "./db/db"; import { Adapter } from "next-auth/adapters"; +import { createDrizzleAdapter } from "./drizzle-adapter"; const VERCEL_DEPLOYMENT = !!process.env.VERCEL_URL; @@ -27,7 +27,7 @@ export const authOptions: NextAuthOptions = { verifyRequest: `/login`, error: "/login", // Error code passed in query string as ?error= }, - adapter: DrizzleAdapter(db) as Adapter, + adapter: createDrizzleAdapter(db) as Adapter, session: { strategy: "jwt" }, cookies: { sessionToken: { diff --git a/lib/db/db.ts b/lib/db/db.ts index 91c717aba..1a68dbc0e 100644 --- a/lib/db/db.ts +++ b/lib/db/db.ts @@ -2,8 +2,9 @@ import { sql } from '@vercel/postgres'; import { drizzle } from 'drizzle-orm/vercel-postgres'; import * as schema from './schema'; -const db = drizzle(sql, {schema}) +const db = drizzle(sql, {schema, logger:true}) export default db; export type DrizzleClient = typeof db; + diff --git a/lib/db/schema.ts b/lib/db/schema.ts index b65dfb96a..5900df948 100644 --- a/lib/db/schema.ts +++ b/lib/db/schema.ts @@ -1,4 +1,4 @@ -import { pgTable, uniqueIndex, index, foreignKey, text, timestamp, serial, integer, boolean } from "drizzle-orm/pg-core" +import { pgTable, uniqueIndex, index, foreignKey, text, timestamp, serial, integer, boolean, primaryKey } from "drizzle-orm/pg-core" import { relations, sql } from "drizzle-orm" import { createId } from '@paralleldrive/cuid2'; @@ -14,6 +14,7 @@ export const sessions = pgTable("session", { userIdIdx: index("Session_userId_idx").on(table.userId), } }); + export const verificationTokens = pgTable("verificationToken", { identifier: text("identifier").notNull(), @@ -37,7 +38,7 @@ export const users = pgTable("user", { emailVerified: timestamp("emailVerified", { precision: 3, mode: 'date' }), image: text("image"), createdAt: timestamp("createdAt", { precision: 3, mode: 'date' }).defaultNow().notNull(), - updatedAt: timestamp("updatedAt", { precision: 3, mode: 'date' }).notNull(), + updatedAt: timestamp("updatedAt", { precision: 3, mode: 'date' }).notNull().$onUpdate(() => new Date()) }, (table) => { return { @@ -79,6 +80,7 @@ export const accounts = pgTable("account", { } }); + export const sites = pgTable("site", { id: text("id").primaryKey().notNull().$defaultFn(() => createId()), name: text("name"), @@ -91,7 +93,7 @@ export const sites = pgTable("site", { customDomain: text("customDomain"), message404: text("message404").default("Blimey! You''ve found a page that doesn''t exist."), createdAt: timestamp("createdAt", { precision: 3, mode: 'date' }).defaultNow().notNull(), - updatedAt: timestamp("updatedAt", { precision: 3, mode: 'date' }).notNull(), + updatedAt: timestamp("updatedAt", { precision: 3, mode: 'date' }).notNull().$onUpdate(() => new Date()), userId: text("userId").references(() => users.id, { onDelete: "cascade", onUpdate: "cascade" } ), }, (table) => { @@ -111,7 +113,7 @@ export const posts = pgTable("post", { image: text("image").default('https://public.blob.vercel-storage.com/eEZHAoPTOBSYGBE3/hxfcV5V-eInX3jbVUhjAt1suB7zB88uGd1j20b.png'), imageBlurhash: text("imageBlurhash").default('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAhCAYAAACbffiEAAAACXBIWXMAABYlAAAWJQFJUiTwAAABfUlEQVR4nN3XyZLDIAwE0Pz/v3q3r55JDlSBplsIEI49h76k4opexCK/juP4eXjOT149f2Tf9ySPgcjCc7kdpBTgDPKByKK2bTPFEdMO0RDrusJ0wLRBGCIuelmWJAjkgPGDSIQEMBDCfA2CEPM80+Qwl0JkNxBimiaYGOTUlXYI60YoehzHJDEm7kxjV3whOQTD3AaCuhGKHoYhyb+CBMwjIAFz647kTqyapdV4enGINuDJMSScPmijSwjCaHeLcT77C7EC0C1ugaCTi2HYfAZANgj6Z9A8xY5eiYghDMNQBJNCWhASot0jGsSCUiHWZcSGQjaWWCDaGMOWnsCcn2QhVkRuxqqNxMSdUSElCDbp1hbNOsa6Ugxh7xXauF4DyM1m5BLtCylBXgaxvPXVwEoOBjeIFVODtW74oj1yBQah3E8tyz3SkpolKS9Geo9YMD1QJR1Go4oJkgO1pgbNZq0AOUPChyjvh7vlXaQa+X1UXwKxgHokB2XPxbX+AnijwIU4ahazAAAAAElFTkSuQmCC'), createdAt: timestamp("createdAt", { precision: 3, mode: 'date' }).defaultNow().notNull(), - updatedAt: timestamp("updatedAt", { precision: 3, mode: 'date' }).notNull(), + updatedAt: timestamp("updatedAt", { precision: 3, mode: 'date' }).notNull().$onUpdate(() => new Date()), published: boolean("published").default(false).notNull(), siteId: text("siteId").references(() => sites.id, { onDelete: "cascade", onUpdate: "cascade" } ), userId: text("userId").references(() => users.id, { onDelete: "cascade", onUpdate: "cascade" } ), diff --git a/lib/drizzle-adapter.ts b/lib/drizzle-adapter.ts new file mode 100644 index 000000000..fecb76218 --- /dev/null +++ b/lib/drizzle-adapter.ts @@ -0,0 +1,57 @@ +import { DrizzleAdapter } from "@auth/drizzle-adapter" +import { eq } from "drizzle-orm" +import { DrizzleClient } from "./db/db" +import { users, sessions, accounts } from "./db/schema" +import { AdapterUser } from "next-auth/adapters" + +export const createDrizzleAdapter = (db: DrizzleClient) => { + const adapter = DrizzleAdapter(db) + + adapter.createUser = async (data) => { + return await db + .insert(users) + .values(data) + .returning() + .then((res) => res[0] ?? null) as AdapterUser + } + + adapter.createSession = async (data) => { + return await db + .insert(sessions) + .values(data) + .returning() + .then((res) => res[0]) + } + + adapter.updateUser = async (data) => { + if (!data.id) { + throw new Error("No user id.") + } + + return await db + .update(users) + .set(data) + .where(eq(users.id, data.id)) + .returning() + .then((res) => res[0]) as AdapterUser + } + + adapter.updateSession = async (data) => { + return await db + .update(sessions) + .set(data) + .where(eq(sessions.sessionToken, data.sessionToken)) + .returning() + .then((res) => res[0]) + } + + adapter.linkAccount = async (rawAccount) => { + return await db + .insert(accounts) + .values(rawAccount) + .returning() + .then((res) => res[0]) as any + } + + return adapter +} diff --git a/lib/fetchers.ts b/lib/fetchers.ts index a16c2067d..316a6269e 100644 --- a/lib/fetchers.ts +++ b/lib/fetchers.ts @@ -64,10 +64,10 @@ export async function getPostData(domain: string, slug: string) { .leftJoin(users, eq(users.id, sites.userId)) .where(and(eq(posts.slug, slug), eq(posts.published, true), subdomain ? eq(sites.subdomain, subdomain) : eq(sites.customDomain, domain))) .then((res) => res.length > 0 ? { - ...res[0].Post, - site: res[0].Site ? { - ...res[0].Site, - user: res[0].User + ...res[0].post, + site: res[0].site ? { + ...res[0].user, + user: res[0].user } : null } : null) diff --git a/lib/utils.ts b/lib/utils.ts index 89e07f22e..8e01afdaf 100644 --- a/lib/utils.ts +++ b/lib/utils.ts @@ -66,3 +66,13 @@ export function withLimit( return qb.limit(limit); } + +type NonNullableProps = { + [P in keyof T]: null extends T[P] ? never : P +}[keyof T] + +export function stripUndefined(obj: T): Pick> { + const result = {} as T + for (const key in obj) if (obj[key] !== undefined) result[key] = obj[key] + return result +} diff --git a/package.json b/package.json index c83ec28f2..287e86258 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ "ai": "^2.2.22", "clsx": "^2.0.0", "date-fns": "^2.30.0", - "drizzle-orm": "^0.30.4", + "drizzle-orm": "^0.30.5", "focus-trap-react": "^10.2.3", "framer-motion": "^10.16.4", "gray-matter": "^4.0.3", From a63115145f17be79c27ad6e41f0e44443ccb1588 Mon Sep 17 00:00:00 2001 From: realmikesolo Date: Thu, 4 Apr 2024 12:19:07 +0200 Subject: [PATCH 04/14] update next-auth: wip --- lib/actions.ts | 1 - lib/auth.ts | 5 +- lib/db/schema.ts | 121 +- lib/drizzle-adapter.ts | 57 - package.json | 5 +- pnpm-lock.yaml | 3895 ++++++++++++++++++++++++++-------------- 6 files changed, 2649 insertions(+), 1435 deletions(-) delete mode 100644 lib/drizzle-adapter.ts diff --git a/lib/actions.ts b/lib/actions.ts index d6ae0cc04..f096ee29d 100644 --- a/lib/actions.ts +++ b/lib/actions.ts @@ -39,7 +39,6 @@ export const createSite = async (formData: FormData) => { userId: session.user.id, updatedAt: new Date(), }).returning() - console.log(1) // unnecessary await await revalidateTag( diff --git a/lib/auth.ts b/lib/auth.ts index 200c289d3..ee47a3a4f 100644 --- a/lib/auth.ts +++ b/lib/auth.ts @@ -1,11 +1,10 @@ import { getServerSession, type NextAuthOptions } from "next-auth"; import GitHubProvider from "next-auth/providers/github"; import db from "./db/db"; +import { DrizzleAdapter } from "@auth/drizzle-adapter"; import { Adapter } from "next-auth/adapters"; -import { createDrizzleAdapter } from "./drizzle-adapter"; const VERCEL_DEPLOYMENT = !!process.env.VERCEL_URL; - export const authOptions: NextAuthOptions = { providers: [ GitHubProvider({ @@ -27,7 +26,7 @@ export const authOptions: NextAuthOptions = { verifyRequest: `/login`, error: "/login", // Error code passed in query string as ?error= }, - adapter: createDrizzleAdapter(db) as Adapter, + adapter: DrizzleAdapter(db) as Adapter, session: { strategy: "jwt" }, cookies: { sessionToken: { diff --git a/lib/db/schema.ts b/lib/db/schema.ts index 5900df948..235e640cf 100644 --- a/lib/db/schema.ts +++ b/lib/db/schema.ts @@ -1,122 +1,115 @@ -import { pgTable, uniqueIndex, index, foreignKey, text, timestamp, serial, integer, boolean, primaryKey } from "drizzle-orm/pg-core" -import { relations, sql } from "drizzle-orm" +import { pgTable, uniqueIndex, index, text, timestamp, serial, integer, boolean, primaryKey } from "drizzle-orm/pg-core" +import { relations } from "drizzle-orm" import { createId } from '@paralleldrive/cuid2'; -export const sessions = pgTable("session", { - id: text("id").primaryKey().notNull().$defaultFn(() => createId()), - sessionToken: text("sessionToken").notNull(), - userId: text("userId").notNull().references(() => users.id, { onDelete: "cascade", onUpdate: "cascade" } ), - expires: timestamp("expires", { precision: 3, mode: 'date' }).notNull(), -}, -(table) => { - return { - sessionTokenKey: uniqueIndex("Session_sessionToken_key").on(table.sessionToken), - userIdIdx: index("Session_userId_idx").on(table.userId), - } -}); - - -export const verificationTokens = pgTable("verificationToken", { - identifier: text("identifier").notNull(), - token: text("token").notNull(), - expires: timestamp("expires", { precision: 3, mode: 'date' }).notNull(), -}, -(table) => { - return { - tokenKey: uniqueIndex("VerificationToken_token_key").on(table.token), - identifierTokenKey: uniqueIndex("VerificationToken_identifier_token_key").on(table.identifier, table.token), - } -}); - export const users = pgTable("user", { - id: text("id").primaryKey().notNull().$defaultFn(() => createId()), + id: text("id").primaryKey().$defaultFn(() => createId()), name: text("name"), // if you are using Github OAuth, you can get rid of the username attribute (that is for Twitter OAuth) username: text("username"), ghUsername: text("gh_username"), - email: text("email"), + email: text("email").unique(), emailVerified: timestamp("emailVerified", { precision: 3, mode: 'date' }), image: text("image"), - createdAt: timestamp("createdAt", { precision: 3, mode: 'date' }).defaultNow().notNull(), - updatedAt: timestamp("updatedAt", { precision: 3, mode: 'date' }).notNull().$onUpdate(() => new Date()) -}, -(table) => { - return { - emailKey: uniqueIndex("User_email_key").on(table.email), - } + createdAt: timestamp("created_at", { precision: 3, mode: 'date' }).defaultNow().notNull(), + updatedAt: timestamp("updated_at", { precision: 3, mode: 'date' }).notNull().$onUpdate(() => new Date()) }); +export const sessions = pgTable("sessions", { + id: text("id").primaryKey().$defaultFn(() => createId()), + sessionToken: text("sessionToken").notNull().unique(), + userId: text("userId") + .notNull() + .references(() => users.id, { onDelete: "cascade" }), + expires: timestamp("expires", { mode: "date" }).notNull(), +}, (table) => { + return { + userIdIdx: index().on(table.userId), + } +}) + +export const verificationTokens = pgTable( + "verificationTokens", + { + identifier: text("identifier").notNull(), + token: text("token").notNull().unique(), + expires: timestamp("expires", { mode: "date" }).notNull(), + }, + (table) => { + return { + compositePk: primaryKey({ columns: [table.identifier, table.token] }) + } + } +) + export const examples = pgTable("example", { id: serial("id").primaryKey().notNull(), name: text("name"), description: text("description"), - domainCount: integer("domainCount"), + domainCount: integer("domain_count"), url: text("url"), image: text("image"), - imageBlurhash: text("imageBlurhash"), + imageBlurhash: text("image_blurhash"), }); -export const accounts = pgTable("account", { - id: text("id").primaryKey().notNull().$defaultFn(() => createId()), - userId: text("userId").notNull().references(() => users.id, { onDelete: "cascade", onUpdate: "cascade" } ), +export const accounts = pgTable("accounts", { + userId: text("userId").notNull().references(() => users.id, { onDelete: "cascade" } ), type: text("type").notNull(), provider: text("provider").notNull(), providerAccountId: text("providerAccountId").notNull(), - refreshToken: text("refresh_token"), + refresh_token: text("refresh_token"), refreshTokenExpiresIn: integer("refresh_token_expires_in"), - accessToken: text("access_token"), - expiresAt: integer("expires_at"), - tokenType: text("token_type"), + access_token: text("access_token"), + expires_at: integer("expires_at"), + token_type: text("token_type"), scope: text("scope"), - idToken: text("id_token"), - sessionState: text("session_state"), + id_token: text("id_token"), + session_state: text("session_state"), oauthTokenSecret: text("oauth_token_secret"), oauthToken: text("oauth_token"), }, (table) => { return { userIdIdx: index("Account_userId_idx").on(table.userId), - providerProviderAccountIdKey: uniqueIndex("Account_provider_providerAccountId_key").on(table.provider, table.providerAccountId), + compositePk: primaryKey({columns: [table.provider, table.providerAccountId]}), } }); export const sites = pgTable("site", { - id: text("id").primaryKey().notNull().$defaultFn(() => createId()), + id: text("id").primaryKey().$defaultFn(() => createId()), name: text("name"), description: text("description"), logo: text("logo").default('https://public.blob.vercel-storage.com/eEZHAoPTOBSYGBE3/JRajRyC-PhBHEinQkupt02jqfKacBVHLWJq7Iy.png'), font: text("font").default('font-cal').notNull(), image: text("image").default('https://public.blob.vercel-storage.com/eEZHAoPTOBSYGBE3/hxfcV5V-eInX3jbVUhjAt1suB7zB88uGd1j20b.png'), - imageBlurhash: text("imageBlurhash").default('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAhCAYAAACbffiEAAAACXBIWXMAABYlAAAWJQFJUiTwAAABfUlEQVR4nN3XyZLDIAwE0Pz/v3q3r55JDlSBplsIEI49h76k4opexCK/juP4eXjOT149f2Tf9ySPgcjCc7kdpBTgDPKByKK2bTPFEdMO0RDrusJ0wLRBGCIuelmWJAjkgPGDSIQEMBDCfA2CEPM80+Qwl0JkNxBimiaYGOTUlXYI60YoehzHJDEm7kxjV3whOQTD3AaCuhGKHoYhyb+CBMwjIAFz647kTqyapdV4enGINuDJMSScPmijSwjCaHeLcT77C7EC0C1ugaCTi2HYfAZANgj6Z9A8xY5eiYghDMNQBJNCWhASot0jGsSCUiHWZcSGQjaWWCDaGMOWnsCcn2QhVkRuxqqNxMSdUSElCDbp1hbNOsa6Ugxh7xXauF4DyM1m5BLtCylBXgaxvPXVwEoOBjeIFVODtW74oj1yBQah3E8tyz3SkpolKS9Geo9YMD1QJR1Go4oJkgO1pgbNZq0AOUPChyjvh7vlXaQa+X1UXwKxgHokB2XPxbX+AnijwIU4ahazAAAAAElFTkSuQmCC'), - subdomain: text("subdomain"), - customDomain: text("customDomain"), + imageBlurhash: text("image_blurhash").default('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAhCAYAAACbffiEAAAACXBIWXMAABYlAAAWJQFJUiTwAAABfUlEQVR4nN3XyZLDIAwE0Pz/v3q3r55JDlSBplsIEI49h76k4opexCK/juP4eXjOT149f2Tf9ySPgcjCc7kdpBTgDPKByKK2bTPFEdMO0RDrusJ0wLRBGCIuelmWJAjkgPGDSIQEMBDCfA2CEPM80+Qwl0JkNxBimiaYGOTUlXYI60YoehzHJDEm7kxjV3whOQTD3AaCuhGKHoYhyb+CBMwjIAFz647kTqyapdV4enGINuDJMSScPmijSwjCaHeLcT77C7EC0C1ugaCTi2HYfAZANgj6Z9A8xY5eiYghDMNQBJNCWhASot0jGsSCUiHWZcSGQjaWWCDaGMOWnsCcn2QhVkRuxqqNxMSdUSElCDbp1hbNOsa6Ugxh7xXauF4DyM1m5BLtCylBXgaxvPXVwEoOBjeIFVODtW74oj1yBQah3E8tyz3SkpolKS9Geo9YMD1QJR1Go4oJkgO1pgbNZq0AOUPChyjvh7vlXaQa+X1UXwKxgHokB2XPxbX+AnijwIU4ahazAAAAAElFTkSuQmCC'), + subdomain: text("subdomain").unique(), + customDomain: text("custom_domain").unique(), message404: text("message404").default("Blimey! You''ve found a page that doesn''t exist."), - createdAt: timestamp("createdAt", { precision: 3, mode: 'date' }).defaultNow().notNull(), - updatedAt: timestamp("updatedAt", { precision: 3, mode: 'date' }).notNull().$onUpdate(() => new Date()), - userId: text("userId").references(() => users.id, { onDelete: "cascade", onUpdate: "cascade" } ), + createdAt: timestamp("created_at", { precision: 3, mode: 'date' }).defaultNow().notNull(), + updatedAt: timestamp("updated_at", { precision: 3, mode: 'date' }).notNull().$onUpdate(() => new Date()), + userId: text("user_id").references(() => users.id, { onDelete: "cascade", onUpdate: "cascade" } ), }, (table) => { return { - subdomainKey: uniqueIndex("Site_subdomain_key").on(table.subdomain), - customDomainKey: uniqueIndex("Site_customDomain_key").on(table.customDomain), userIdIdx: index("Site_userId_idx").on(table.userId), } }); export const posts = pgTable("post", { - id: text("id").primaryKey().notNull().$defaultFn(() => createId()), + id: text("id").primaryKey().$defaultFn(() => createId()), title: text("title"), description: text("description"), content: text("content"), slug: text("slug").notNull().$defaultFn(() => createId()), image: text("image").default('https://public.blob.vercel-storage.com/eEZHAoPTOBSYGBE3/hxfcV5V-eInX3jbVUhjAt1suB7zB88uGd1j20b.png'), - imageBlurhash: text("imageBlurhash").default('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAhCAYAAACbffiEAAAACXBIWXMAABYlAAAWJQFJUiTwAAABfUlEQVR4nN3XyZLDIAwE0Pz/v3q3r55JDlSBplsIEI49h76k4opexCK/juP4eXjOT149f2Tf9ySPgcjCc7kdpBTgDPKByKK2bTPFEdMO0RDrusJ0wLRBGCIuelmWJAjkgPGDSIQEMBDCfA2CEPM80+Qwl0JkNxBimiaYGOTUlXYI60YoehzHJDEm7kxjV3whOQTD3AaCuhGKHoYhyb+CBMwjIAFz647kTqyapdV4enGINuDJMSScPmijSwjCaHeLcT77C7EC0C1ugaCTi2HYfAZANgj6Z9A8xY5eiYghDMNQBJNCWhASot0jGsSCUiHWZcSGQjaWWCDaGMOWnsCcn2QhVkRuxqqNxMSdUSElCDbp1hbNOsa6Ugxh7xXauF4DyM1m5BLtCylBXgaxvPXVwEoOBjeIFVODtW74oj1yBQah3E8tyz3SkpolKS9Geo9YMD1QJR1Go4oJkgO1pgbNZq0AOUPChyjvh7vlXaQa+X1UXwKxgHokB2XPxbX+AnijwIU4ahazAAAAAElFTkSuQmCC'), - createdAt: timestamp("createdAt", { precision: 3, mode: 'date' }).defaultNow().notNull(), - updatedAt: timestamp("updatedAt", { precision: 3, mode: 'date' }).notNull().$onUpdate(() => new Date()), + imageBlurhash: text("image_blurhash").default('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAhCAYAAACbffiEAAAACXBIWXMAABYlAAAWJQFJUiTwAAABfUlEQVR4nN3XyZLDIAwE0Pz/v3q3r55JDlSBplsIEI49h76k4opexCK/juP4eXjOT149f2Tf9ySPgcjCc7kdpBTgDPKByKK2bTPFEdMO0RDrusJ0wLRBGCIuelmWJAjkgPGDSIQEMBDCfA2CEPM80+Qwl0JkNxBimiaYGOTUlXYI60YoehzHJDEm7kxjV3whOQTD3AaCuhGKHoYhyb+CBMwjIAFz647kTqyapdV4enGINuDJMSScPmijSwjCaHeLcT77C7EC0C1ugaCTi2HYfAZANgj6Z9A8xY5eiYghDMNQBJNCWhASot0jGsSCUiHWZcSGQjaWWCDaGMOWnsCcn2QhVkRuxqqNxMSdUSElCDbp1hbNOsa6Ugxh7xXauF4DyM1m5BLtCylBXgaxvPXVwEoOBjeIFVODtW74oj1yBQah3E8tyz3SkpolKS9Geo9YMD1QJR1Go4oJkgO1pgbNZq0AOUPChyjvh7vlXaQa+X1UXwKxgHokB2XPxbX+AnijwIU4ahazAAAAAElFTkSuQmCC'), + createdAt: timestamp("created_at", { precision: 3, mode: 'date' }).defaultNow().notNull(), + updatedAt: timestamp("updated_at", { precision: 3, mode: 'date' }).notNull().$onUpdate(() => new Date()), published: boolean("published").default(false).notNull(), - siteId: text("siteId").references(() => sites.id, { onDelete: "cascade", onUpdate: "cascade" } ), - userId: text("userId").references(() => users.id, { onDelete: "cascade", onUpdate: "cascade" } ), + siteId: text("site_id").references(() => sites.id, { onDelete: "cascade", onUpdate: "cascade" } ), + userId: text("user_id").references(() => users.id, { onDelete: "cascade", onUpdate: "cascade" } ), }, (table) => { return { diff --git a/lib/drizzle-adapter.ts b/lib/drizzle-adapter.ts deleted file mode 100644 index fecb76218..000000000 --- a/lib/drizzle-adapter.ts +++ /dev/null @@ -1,57 +0,0 @@ -import { DrizzleAdapter } from "@auth/drizzle-adapter" -import { eq } from "drizzle-orm" -import { DrizzleClient } from "./db/db" -import { users, sessions, accounts } from "./db/schema" -import { AdapterUser } from "next-auth/adapters" - -export const createDrizzleAdapter = (db: DrizzleClient) => { - const adapter = DrizzleAdapter(db) - - adapter.createUser = async (data) => { - return await db - .insert(users) - .values(data) - .returning() - .then((res) => res[0] ?? null) as AdapterUser - } - - adapter.createSession = async (data) => { - return await db - .insert(sessions) - .values(data) - .returning() - .then((res) => res[0]) - } - - adapter.updateUser = async (data) => { - if (!data.id) { - throw new Error("No user id.") - } - - return await db - .update(users) - .set(data) - .where(eq(users.id, data.id)) - .returning() - .then((res) => res[0]) as AdapterUser - } - - adapter.updateSession = async (data) => { - return await db - .update(sessions) - .set(data) - .where(eq(sessions.sessionToken, data.sessionToken)) - .returning() - .then((res) => res[0]) - } - - adapter.linkAccount = async (rawAccount) => { - return await db - .insert(accounts) - .values(rawAccount) - .returning() - .then((res) => res[0]) as any - } - - return adapter -} diff --git a/package.json b/package.json index 287e86258..7ab76f4be 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "lint": "next lint" }, "dependencies": { - "@auth/drizzle-adapter": "^0.8.1", + "@auth/drizzle-adapter": "^0.8.2", "@next-auth/prisma-adapter": "^1.0.7", "@paralleldrive/cuid2": "^2.2.2", "@prisma/client": "^5.5.2", @@ -30,10 +30,11 @@ "lucide-react": "^0.292.0", "nanoid": "^4.0.2", "next": "14.0.2", - "next-auth": "4.24.5", + "next-auth": "^4.24.7", "next-mdx-remote": "^4.4.1", "novel": "^0.1.22", "openai-edge": "^1.2.2", + "pg": "^8.11.3", "react": "^18.2.0", "react-dom": "^18.2.0", "react-textarea-autosize": "^8.5.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 71aa7d566..45073cbba 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -5,45 +5,54 @@ settings: excludeLinksFromLockfile: false dependencies: + '@auth/drizzle-adapter': + specifier: ^0.8.2 + version: 0.8.2 '@next-auth/prisma-adapter': specifier: ^1.0.7 - version: 1.0.7(@prisma/client@5.5.2)(next-auth@4.24.5) + version: 1.0.7(@prisma/client@5.12.0)(next-auth@4.24.7) + '@paralleldrive/cuid2': + specifier: ^2.2.2 + version: 2.2.2 '@prisma/client': specifier: ^5.5.2 - version: 5.5.2(prisma@5.5.2) + version: 5.12.0(prisma@5.12.0) '@tremor/react': specifier: ^3.11.1 - version: 3.11.1(prop-types@15.8.1)(react-dom@18.2.0)(react@18.2.0)(tailwindcss@3.3.5) + version: 3.15.0(react-dom@18.2.0)(react@18.2.0)(tailwindcss@3.4.3) '@upstash/ratelimit': specifier: ^0.4.4 version: 0.4.4 '@vercel/analytics': specifier: ^1.1.1 - version: 1.1.1 + version: 1.2.2(next@14.0.2)(react@18.2.0) '@vercel/blob': specifier: ^0.15.0 - version: 0.15.0 + version: 0.15.1 '@vercel/kv': specifier: ^1.0.0 - version: 1.0.0 + version: 1.0.1 '@vercel/postgres': specifier: ^0.5.1 version: 0.5.1 ai: specifier: ^2.2.22 - version: 2.2.22(react@18.2.0)(solid-js@1.8.5)(svelte@4.2.3)(vue@3.3.8) + version: 2.2.37(react@18.2.0)(solid-js@1.8.16)(svelte@4.2.12)(vue@3.4.21) clsx: specifier: ^2.0.0 - version: 2.0.0 + version: 2.1.0 date-fns: specifier: ^2.30.0 version: 2.30.0 + drizzle-orm: + specifier: ^0.30.5 + version: 0.30.7(@types/react@18.2.74)(@vercel/postgres@0.5.1)(pg@8.11.5)(react@18.2.0) focus-trap-react: specifier: ^10.2.3 version: 10.2.3(prop-types@15.8.1)(react-dom@18.2.0)(react@18.2.0) framer-motion: specifier: ^10.16.4 - version: 10.16.4(react-dom@18.2.0)(react@18.2.0) + version: 10.18.0(react-dom@18.2.0)(react@18.2.0) gray-matter: specifier: ^4.0.3 version: 4.0.3 @@ -60,17 +69,20 @@ dependencies: specifier: 14.0.2 version: 14.0.2(react-dom@18.2.0)(react@18.2.0) next-auth: - specifier: 4.24.5 - version: 4.24.5(next@14.0.2)(react-dom@18.2.0)(react@18.2.0) + specifier: ^4.24.7 + version: 4.24.7(next@14.0.2)(react-dom@18.2.0)(react@18.2.0) next-mdx-remote: specifier: ^4.4.1 version: 4.4.1(react-dom@18.2.0)(react@18.2.0) novel: specifier: ^0.1.22 - version: 0.1.22(react@18.2.0)(solid-js@1.8.5)(svelte@4.2.3)(vue@3.3.8) + version: 0.1.22(react@18.2.0)(solid-js@1.8.16)(svelte@4.2.12)(vue@3.4.21) openai-edge: specifier: ^1.2.2 version: 1.2.2 + pg: + specifier: ^8.11.3 + version: 8.11.5 react: specifier: ^18.2.0 version: 18.2.0 @@ -79,10 +91,10 @@ dependencies: version: 18.2.0(react@18.2.0) react-textarea-autosize: specifier: ^8.5.3 - version: 8.5.3(@types/react@18.2.37)(react@18.2.0) + version: 8.5.3(@types/react@18.2.74)(react@18.2.0) react-tweet: specifier: ^3.1.1 - version: 3.1.1(react-dom@18.2.0)(react@18.2.0) + version: 3.2.0(react-dom@18.2.0)(react@18.2.0) remark: specifier: ^14.0.3 version: 14.0.3 @@ -91,13 +103,13 @@ dependencies: version: 0.32.6 sonner: specifier: ^1.2.0 - version: 1.2.0(react-dom@18.2.0)(react@18.2.0) + version: 1.4.41(react-dom@18.2.0)(react@18.2.0) swr: specifier: ^2.2.4 - version: 2.2.4(react@18.2.0) + version: 2.2.5(react@18.2.0) tailwind-merge: specifier: ^2.0.0 - version: 2.0.0 + version: 2.2.2 unist-util-visit: specifier: ^5.0.0 version: 5.0.0 @@ -108,52 +120,55 @@ dependencies: devDependencies: '@tailwindcss/forms': specifier: ^0.5.7 - version: 0.5.7(tailwindcss@3.3.5) + version: 0.5.7(tailwindcss@3.4.3) '@tailwindcss/typography': specifier: ^0.5.10 - version: 0.5.10(tailwindcss@3.3.5) + version: 0.5.12(tailwindcss@3.4.3) '@types/js-cookie': specifier: ^3.0.6 version: 3.0.6 '@types/node': specifier: ^20.9.0 - version: 20.9.0 + version: 20.12.4 '@types/react': specifier: ^18.2.37 - version: 18.2.37 + version: 18.2.74 '@types/react-dom': specifier: ^18.2.15 - version: 18.2.15 + version: 18.2.24 autoprefixer: specifier: ^10.4.16 - version: 10.4.16(postcss@8.4.31) + version: 10.4.19(postcss@8.4.38) + drizzle-kit: + specifier: ^0.20.14 + version: 0.20.14 eslint: specifier: 8.53.0 version: 8.53.0 eslint-config-next: specifier: ^14.0.2 - version: 14.0.2(eslint@8.53.0)(typescript@5.2.2) + version: 14.1.4(eslint@8.53.0)(typescript@5.4.3) postcss: specifier: ^8.4.31 - version: 8.4.31 + version: 8.4.38 prettier: specifier: ^3.1.0 - version: 3.1.0 + version: 3.2.5 prettier-plugin-tailwindcss: specifier: ^0.5.7 - version: 0.5.7(prettier@3.1.0) + version: 0.5.13(prettier@3.2.5) prisma: specifier: ^5.5.2 - version: 5.5.2 + version: 5.12.0 tailwindcss: specifier: ^3.3.5 - version: 3.3.5 + version: 3.4.3 tailwindcss-animate: specifier: ^1.0.7 - version: 1.0.7(tailwindcss@3.3.5) + version: 1.0.7(tailwindcss@3.4.3) typescript: specifier: ^5.2.2 - version: 5.2.2 + version: 5.4.3 packages: @@ -165,24 +180,57 @@ packages: resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} engines: {node: '>=10'} - /@ampproject/remapping@2.2.1: - resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} + /@ampproject/remapping@2.3.0: + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} dependencies: - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.20 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 dev: false - /@babel/code-frame@7.22.13: - resolution: {integrity: sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==} + /@auth/core@0.28.2: + resolution: {integrity: sha512-Rlvu6yKa4bKbhQESMaEm6jHOY5ncIrsrQkC8tcwVQmf+cBLk7ReI9DIJS2O/WkIDoOwvM9PHiXTi5b+b/eyXxw==} + peerDependencies: + '@simplewebauthn/browser': ^9.0.1 + '@simplewebauthn/server': ^9.0.2 + nodemailer: ^6.8.0 + peerDependenciesMeta: + '@simplewebauthn/browser': + optional: true + '@simplewebauthn/server': + optional: true + nodemailer: + optional: true + dependencies: + '@panva/hkdf': 1.1.1 + '@types/cookie': 0.6.0 + cookie: 0.6.0 + jose: 5.2.3 + oauth4webapi: 2.10.4 + preact: 10.11.3 + preact-render-to-string: 5.2.3(preact@10.11.3) + dev: false + + /@auth/drizzle-adapter@0.8.2: + resolution: {integrity: sha512-IrySrHLr427+J5CjiM5fI6XFDmH5R2G7wd4E26z+J64C3t2aegdZdlfMAUerLjeoxAXnMas7bECtOYRO33EfKA==} + dependencies: + '@auth/core': 0.28.2 + transitivePeerDependencies: + - '@simplewebauthn/browser' + - '@simplewebauthn/server' + - nodemailer + dev: false + + /@babel/code-frame@7.24.2: + resolution: {integrity: sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/highlight': 7.22.20 - chalk: 2.4.2 + '@babel/highlight': 7.24.2 + picocolors: 1.0.0 dev: false - /@babel/helper-string-parser@7.22.5: - resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} + /@babel/helper-string-parser@7.24.1: + resolution: {integrity: sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==} engines: {node: '>=6.9.0'} dev: false @@ -191,38 +239,45 @@ packages: engines: {node: '>=6.9.0'} dev: false - /@babel/highlight@7.22.20: - resolution: {integrity: sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==} + /@babel/highlight@7.24.2: + resolution: {integrity: sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==} engines: {node: '>=6.9.0'} dependencies: '@babel/helper-validator-identifier': 7.22.20 chalk: 2.4.2 js-tokens: 4.0.0 + picocolors: 1.0.0 dev: false - /@babel/parser@7.23.3: - resolution: {integrity: sha512-uVsWNvlVsIninV2prNz/3lHCb+5CJ+e+IUBfbjToAHODtfGYLfCFuY4AU7TskI+dAKk+njsPiBjq1gKTvZOBaw==} + /@babel/parser@7.24.4: + resolution: {integrity: sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg==} engines: {node: '>=6.0.0'} hasBin: true dependencies: - '@babel/types': 7.23.3 + '@babel/types': 7.24.0 dev: false - /@babel/runtime@7.23.2: - resolution: {integrity: sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg==} + /@babel/runtime@7.24.4: + resolution: {integrity: sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA==} engines: {node: '>=6.9.0'} dependencies: - regenerator-runtime: 0.14.0 + regenerator-runtime: 0.14.1 - /@babel/types@7.23.3: - resolution: {integrity: sha512-OZnvoH2l8PK5eUvEcUyCt/sXgr/h+UWpVuBbOljwcrAgUl6lpchoQ++PHGyQy1AtYnVA6CEq3y5xeEI10brpXw==} + /@babel/types@7.24.0: + resolution: {integrity: sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-string-parser': 7.22.5 + '@babel/helper-string-parser': 7.24.1 '@babel/helper-validator-identifier': 7.22.20 to-fast-properties: 2.0.0 dev: false + /@drizzle-team/studio@0.0.39: + resolution: {integrity: sha512-c5Hkm7MmQC2n5qAsKShjQrHoqlfGslB8+qWzsGGZ+2dHMRTNG60UuzalF0h0rvBax5uzPXuGkYLGaQ+TUX3yMw==} + dependencies: + superjson: 2.2.1 + dev: true + /@emotion/is-prop-valid@0.8.8: resolution: {integrity: sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==} requiresBuild: true @@ -237,6 +292,425 @@ packages: dev: false optional: true + /@esbuild-kit/core-utils@3.3.2: + resolution: {integrity: sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ==} + dependencies: + esbuild: 0.18.20 + source-map-support: 0.5.21 + dev: true + + /@esbuild-kit/esm-loader@2.6.5: + resolution: {integrity: sha512-FxEMIkJKnodyA1OaCUoEvbYRkoZlLZ4d/eXFu9Fh8CbBBgP5EmZxrfTRyN0qpXZ4vOvqnE5YdRdcrmUUXuU+dA==} + dependencies: + '@esbuild-kit/core-utils': 3.3.2 + get-tsconfig: 4.7.3 + dev: true + + /@esbuild/aix-ppc64@0.19.12: + resolution: {integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-arm64@0.18.20: + resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-arm64@0.19.12: + resolution: {integrity: sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-arm@0.18.20: + resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-arm@0.19.12: + resolution: {integrity: sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-x64@0.18.20: + resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-x64@0.19.12: + resolution: {integrity: sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-arm64@0.18.20: + resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-arm64@0.19.12: + resolution: {integrity: sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-x64@0.18.20: + resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-x64@0.19.12: + resolution: {integrity: sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-arm64@0.18.20: + resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-arm64@0.19.12: + resolution: {integrity: sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-x64@0.18.20: + resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-x64@0.19.12: + resolution: {integrity: sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm64@0.18.20: + resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm64@0.19.12: + resolution: {integrity: sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm@0.18.20: + resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm@0.19.12: + resolution: {integrity: sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ia32@0.18.20: + resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ia32@0.19.12: + resolution: {integrity: sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64@0.18.20: + resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64@0.19.12: + resolution: {integrity: sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-mips64el@0.18.20: + resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-mips64el@0.19.12: + resolution: {integrity: sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ppc64@0.18.20: + resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ppc64@0.19.12: + resolution: {integrity: sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-riscv64@0.18.20: + resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-riscv64@0.19.12: + resolution: {integrity: sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-s390x@0.18.20: + resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-s390x@0.19.12: + resolution: {integrity: sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-x64@0.18.20: + resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-x64@0.19.12: + resolution: {integrity: sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/netbsd-x64@0.18.20: + resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/netbsd-x64@0.19.12: + resolution: {integrity: sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/openbsd-x64@0.18.20: + resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/openbsd-x64@0.19.12: + resolution: {integrity: sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/sunos-x64@0.18.20: + resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /@esbuild/sunos-x64@0.19.12: + resolution: {integrity: sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-arm64@0.18.20: + resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-arm64@0.19.12: + resolution: {integrity: sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-ia32@0.18.20: + resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-ia32@0.19.12: + resolution: {integrity: sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-x64@0.18.20: + resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-x64@0.19.12: + resolution: {integrity: sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /@eslint-community/eslint-utils@4.4.0(eslint@8.36.0): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -260,15 +734,15 @@ packages: resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - /@eslint/eslintrc@2.1.3: - resolution: {integrity: sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA==} + /@eslint/eslintrc@2.1.4: + resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 debug: 4.3.4 espree: 9.6.1 - globals: 13.23.0 - ignore: 5.2.4 + globals: 13.24.0 + ignore: 5.3.1 import-fresh: 3.3.0 js-yaml: 4.1.0 minimatch: 3.1.2 @@ -285,22 +759,22 @@ packages: resolution: {integrity: sha512-Kn7K8dx/5U6+cT1yEhpX1w4PCSg0M+XyRILPgvwcEBjerFWCwQj5sbr3/VmxqV0JGHCBCzyd6LxypEuehypY1w==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - /@fastify/busboy@2.1.0: - resolution: {integrity: sha512-+KpH+QxZU7O4675t3mnkQKcZZg56u+K/Ct2K+N2AZYNVK8kyeo/bI18tI8aPm3tvNNRyTWfj6s5tnGNlcbQRsA==} + /@fastify/busboy@2.1.1: + resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==} engines: {node: '>=14'} dev: false - /@floating-ui/core@1.5.0: - resolution: {integrity: sha512-kK1h4m36DQ0UHGj5Ah4db7R0rHemTqqO0QLvUqi1/mUUp3LuAWbWxdxSIf/XsnH9VS6rRVPLJCncjRzUvyCLXg==} + /@floating-ui/core@1.6.0: + resolution: {integrity: sha512-PcF++MykgmTj3CIyOQbKA/hDzOAiqI3mhuoN44WRCopIs1sgoDoU4oty4Jtqaj/y3oDU6fnVSm4QG0a3t5i0+g==} dependencies: - '@floating-ui/utils': 0.1.6 + '@floating-ui/utils': 0.2.1 dev: false - /@floating-ui/dom@1.5.3: - resolution: {integrity: sha512-ClAbQnEqJAKCJOEbbLo5IUlZHkNszqhuxS4fHAVxRPXPya6Ysf2G8KypnYcOTpx6I8xcgF9bbHb6g/2KpbV8qA==} + /@floating-ui/dom@1.6.3: + resolution: {integrity: sha512-RnDthu3mzPlQ31Ss/BTwQ1zjzIhr3lk1gZB1OC56h/1vEtaXkESrOqL5fQVMfXpwGtRwX+YsZBdyHtJMQnkArw==} dependencies: - '@floating-ui/core': 1.5.0 - '@floating-ui/utils': 0.1.6 + '@floating-ui/core': 1.6.0 + '@floating-ui/utils': 0.2.1 dev: false /@floating-ui/react-dom@1.3.0(react-dom@18.2.0)(react@18.2.0): @@ -309,18 +783,18 @@ packages: react: '>=16.8.0' react-dom: '>=16.8.0' dependencies: - '@floating-ui/dom': 1.5.3 + '@floating-ui/dom': 1.6.3 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /@floating-ui/react-dom@2.0.4(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-CF8k2rgKeh/49UrnIBs4BdxPUV6vize/Db1d/YbCLyp9GiVZ0BEwf5AiDSxJRCr6yOkGqTFHtmrULxkEfYZ7dQ==} + /@floating-ui/react-dom@2.0.8(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-HOdqOt3R3OGeTKidaLvJKcgg75S6tibQ3Tif4eyd91QnIJWr0NLvoXFpJA/j8HqkFSL68GDca9AuyWEHlhyClw==} peerDependencies: react: '>=16.8.0' react-dom: '>=16.8.0' dependencies: - '@floating-ui/dom': 1.5.3 + '@floating-ui/dom': 1.6.3 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false @@ -332,42 +806,43 @@ packages: react-dom: '>=16.8.0' dependencies: '@floating-ui/react-dom': 1.3.0(react-dom@18.2.0)(react@18.2.0) - aria-hidden: 1.2.3 + aria-hidden: 1.2.4 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) tabbable: 6.2.0 dev: false - /@floating-ui/utils@0.1.6: - resolution: {integrity: sha512-OfX7E2oUDYxtBvsuS4e/jSn4Q9Qb6DzgeYtsAdkPZ47znpoNsMgZw0+tVijiv3uGNR6dgNlty6r9rzIzHjtd/A==} + /@floating-ui/utils@0.2.1: + resolution: {integrity: sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==} dev: false - /@headlessui/react@1.7.17(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-4am+tzvkqDSSgiwrsEpGWqgGo9dz8qU5M3znCkC4PgkpY4HcCZzEDEvozltGGGHIKl9jbXbZPSH5TWn4sWJdow==} + /@headlessui/react@1.7.18(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-4i5DOrzwN4qSgNsL4Si61VMkUcWbcSKueUV7sFhpHzQcSShdlHENE5+QBntMSRvHt8NyoFO2AGG8si9lq+w4zQ==} engines: {node: '>=10'} peerDependencies: react: ^16 || ^17 || ^18 react-dom: ^16 || ^17 || ^18 dependencies: + '@tanstack/react-virtual': 3.2.0(react-dom@18.2.0)(react@18.2.0) client-only: 0.0.1 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /@headlessui/tailwindcss@0.1.3(tailwindcss@3.3.5): - resolution: {integrity: sha512-3aMdDyYZx9A15euRehpppSyQnb2gIw2s/Uccn2ELIoLQ9oDy0+9oRygNWNjXCD5Dt+w1pxo7C+XoiYvGcqA4Kg==} + /@headlessui/tailwindcss@0.2.0(tailwindcss@3.4.3): + resolution: {integrity: sha512-fpL830Fln1SykOCboExsWr3JIVeQKieLJ3XytLe/tt1A0XzqUthOftDmjcCYLW62w7mQI7wXcoPXr3tZ9QfGxw==} engines: {node: '>=10'} peerDependencies: tailwindcss: ^3.0 dependencies: - tailwindcss: 3.3.5 + tailwindcss: 3.4.3 dev: false - /@humanwhocodes/config-array@0.11.13: - resolution: {integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==} + /@humanwhocodes/config-array@0.11.14: + resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} engines: {node: '>=10.10.0'} dependencies: - '@humanwhocodes/object-schema': 2.0.1 + '@humanwhocodes/object-schema': 2.0.3 debug: 4.3.4 minimatch: 3.1.2 transitivePeerDependencies: @@ -377,8 +852,19 @@ packages: resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} engines: {node: '>=12.22'} - /@humanwhocodes/object-schema@2.0.1: - resolution: {integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==} + /@humanwhocodes/object-schema@2.0.3: + resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} + + /@isaacs/cliui@8.0.2: + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + dependencies: + string-width: 5.1.2 + string-width-cjs: /string-width@4.2.3 + strip-ansi: 7.1.0 + strip-ansi-cjs: /strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: /wrap-ansi@7.0.0 /@jest/environment@29.7.0: resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==} @@ -386,7 +872,7 @@ packages: dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.9.0 + '@types/node': 20.12.4 jest-mock: 29.7.0 dev: false @@ -396,7 +882,7 @@ packages: dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 20.9.0 + '@types/node': 20.12.4 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -416,41 +902,41 @@ packages: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 20.9.0 - '@types/yargs': 17.0.31 + '@types/node': 20.12.4 + '@types/yargs': 17.0.32 chalk: 4.1.2 dev: false - /@jridgewell/gen-mapping@0.3.3: - resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} + /@jridgewell/gen-mapping@0.3.5: + resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} engines: {node: '>=6.0.0'} dependencies: - '@jridgewell/set-array': 1.1.2 + '@jridgewell/set-array': 1.2.1 '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.20 + '@jridgewell/trace-mapping': 0.3.25 - /@jridgewell/resolve-uri@3.1.1: - resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} + /@jridgewell/resolve-uri@3.1.2: + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} - /@jridgewell/set-array@1.1.2: - resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} + /@jridgewell/set-array@1.2.1: + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} engines: {node: '>=6.0.0'} /@jridgewell/sourcemap-codec@1.4.15: resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - /@jridgewell/trace-mapping@0.3.20: - resolution: {integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==} + /@jridgewell/trace-mapping@0.3.25: + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} dependencies: - '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.4.15 /@mdx-js/mdx@2.3.0: resolution: {integrity: sha512-jLuwRlz8DQfQNiUCJR50Y09CGPq3fLtmtUQfVrj79E0JWu3dvsVcxVIcfhR5h0iXu+/z++zDrYeiJqifRynJkA==} dependencies: - '@types/estree-jsx': 1.0.3 - '@types/mdx': 2.0.10 + '@types/estree-jsx': 1.0.5 + '@types/mdx': 2.0.12 estree-util-build-jsx: 2.2.2 estree-util-is-identifier-name: 2.1.0 estree-util-to-js: 1.2.0 @@ -475,8 +961,8 @@ packages: peerDependencies: react: '>=16' dependencies: - '@types/mdx': 2.0.10 - '@types/react': 18.2.37 + '@types/mdx': 2.0.12 + '@types/react': 18.2.74 react: 18.2.0 dev: false @@ -486,14 +972,14 @@ packages: '@types/pg': 8.6.6 dev: false - /@next-auth/prisma-adapter@1.0.7(@prisma/client@5.5.2)(next-auth@4.24.5): + /@next-auth/prisma-adapter@1.0.7(@prisma/client@5.12.0)(next-auth@4.24.7): resolution: {integrity: sha512-Cdko4KfcmKjsyHFrWwZ//lfLUbcLqlyFqjd/nYE2m3aZ7tjMNUjpks47iw7NTCnXf+5UWz5Ypyt1dSs1EP5QJw==} peerDependencies: '@prisma/client': '>=2.26.0 || >=3' next-auth: ^4 dependencies: - '@prisma/client': 5.5.2(prisma@5.5.2) - next-auth: 4.24.5(next@14.0.2)(react-dom@18.2.0)(react@18.2.0) + '@prisma/client': 5.12.0(prisma@5.12.0) + next-auth: 4.24.7(next@14.0.2)(react-dom@18.2.0)(react@18.2.0) dev: false /@next/env@13.4.20-canary.15: @@ -510,10 +996,10 @@ packages: glob: 7.1.7 dev: false - /@next/eslint-plugin-next@14.0.2: - resolution: {integrity: sha512-APrYFsXfAhnysycqxHcpg6Y4i7Ukp30GzVSZQRKT3OczbzkqGjt33vNhScmgoOXYBU1CfkwgtXmNxdiwv1jKmg==} + /@next/eslint-plugin-next@14.1.4: + resolution: {integrity: sha512-n4zYNLSyCo0Ln5b7qxqQeQ34OZKXwgbdcx6kmkQbywr+0k6M3Vinft0T72R6CDAcDrne2IAgSud4uWCzFgc5HA==} dependencies: - glob: 7.1.7 + glob: 10.3.10 dev: true /@next/swc-darwin-arm64@13.4.20-canary.15: @@ -678,6 +1164,11 @@ packages: dev: false optional: true + /@noble/hashes@1.4.0: + resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==} + engines: {node: '>= 16'} + dev: false + /@nodelib/fs.scandir@2.1.5: resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -694,18 +1185,30 @@ packages: engines: {node: '>= 8'} dependencies: '@nodelib/fs.scandir': 2.1.5 - fastq: 1.15.0 + fastq: 1.17.1 /@panva/hkdf@1.1.1: resolution: {integrity: sha512-dhPeilub1NuIG0X5Kvhh9lH4iW3ZsHlnzwgwbOlgwQ2wG1IqFzsgHqmKPk3WzsdWAeaxKJxgM0+W433RmN45GA==} dev: false + /@paralleldrive/cuid2@2.2.2: + resolution: {integrity: sha512-ZOBkgDwEdoYVlSeRbYYXs0S9MejQofiVYoTbKzy/6GQa39/q5tQU2IX46+shYnUkpEl3wc+J6wRlar7r2EK2xA==} + dependencies: + '@noble/hashes': 1.4.0 + dev: false + + /@pkgjs/parseargs@0.11.0: + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + requiresBuild: true + optional: true + /@popperjs/core@2.11.8: resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} dev: false - /@prisma/client@5.5.2(prisma@5.5.2): - resolution: {integrity: sha512-54XkqR8M+fxbzYqe+bIXimYnkkcGqgOh0dn0yWtIk6CQT4IUCAvNFNcQZwk2KqaLU+/1PHTSWrcHtx4XjluR5w==} + /@prisma/client@5.12.0(prisma@5.12.0): + resolution: {integrity: sha512-bk/+KPpRm0+IzqFCtAxrj+/TNiHzulspnO+OkysaYY/atc/eX0Gx8V3tTLxbHKVX0LKD4Hi8KKCcSbU1U72n7Q==} engines: {node: '>=16.13'} requiresBuild: true peerDependencies: @@ -714,22 +1217,40 @@ packages: prisma: optional: true dependencies: - '@prisma/engines-version': 5.5.1-1.aebc046ce8b88ebbcb45efe31cbe7d06fd6abc0a - prisma: 5.5.2 + prisma: 5.12.0 dev: false - /@prisma/engines-version@5.5.1-1.aebc046ce8b88ebbcb45efe31cbe7d06fd6abc0a: - resolution: {integrity: sha512-O+qHFnZvAyOFk1tUco2/VdiqS0ym42a3+6CYLScllmnpbyiTplgyLt2rK/B9BTjYkSHjrgMhkG47S0oqzdIckA==} - dev: false + /@prisma/debug@5.12.0: + resolution: {integrity: sha512-wK3fQLxPLMqf5riT5ZIhl8NffPSzFUwtzFX5CH7z/oI9Swmo9UhQlUgZABIVgdXSJ5OAlmRcDZtDKaMApIl8sg==} + + /@prisma/engines-version@5.12.0-21.473ed3124229e22d881cb7addf559799debae1ab: + resolution: {integrity: sha512-6yvO8s80Tym61aB4QNtYZfWVmE3pwqe807jEtzm8C5VDe7nw8O1FGX3TXUaXmWV0fQTIAfRbeL2Gwrndabp/0g==} - /@prisma/engines@5.5.2: - resolution: {integrity: sha512-Be5hoNF8k+lkB3uEMiCHbhbfF6aj1GnrTBnn5iYFT7GEr3TsOEp1soviEcBR0tYCgHbxjcIxJMhdbvxALJhAqg==} + /@prisma/engines@5.12.0: + resolution: {integrity: sha512-rFNRul9JGu0d3tf8etBgmDQ4NVoDwgGrRguvQOc8i+c6g7xPjRuu4aKzMMvHWUuccvRx5+fs1KMBxQ0x2THt+Q==} requiresBuild: true + dependencies: + '@prisma/debug': 5.12.0 + '@prisma/engines-version': 5.12.0-21.473ed3124229e22d881cb7addf559799debae1ab + '@prisma/fetch-engine': 5.12.0 + '@prisma/get-platform': 5.12.0 + + /@prisma/fetch-engine@5.12.0: + resolution: {integrity: sha512-qkHQbZ1hspvOwcImvqY4yj7+FUlw0+uP+6tu3g24V4ULHOXLLkvr5ZZc6vy26OF0hkbD3kcDJCeutFis3poKgg==} + dependencies: + '@prisma/debug': 5.12.0 + '@prisma/engines-version': 5.12.0-21.473ed3124229e22d881cb7addf559799debae1ab + '@prisma/get-platform': 5.12.0 + + /@prisma/get-platform@5.12.0: + resolution: {integrity: sha512-81Ptv9YJnwTArEBPQ2Lvu58sZPxy4OixKxVVgysFan6A3bFP7q8gIg15WTjsRuH4WXh6B667EM9sqoMTNu0fLQ==} + dependencies: + '@prisma/debug': 5.12.0 /@radix-ui/primitive@1.0.1: resolution: {integrity: sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw==} dependencies: - '@babel/runtime': 7.23.2 + '@babel/runtime': 7.24.4 dev: false /@radix-ui/react-arrow@1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.28)(react-dom@18.2.0)(react@18.2.0): @@ -745,7 +1266,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.23.2 + '@babel/runtime': 7.24.4 '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.28)(react-dom@18.2.0)(react@18.2.0) '@types/react': 18.0.28 '@types/react-dom': 18.0.11 @@ -762,7 +1283,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.23.2 + '@babel/runtime': 7.24.4 '@types/react': 18.0.28 react: 18.2.0 dev: false @@ -776,7 +1297,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.23.2 + '@babel/runtime': 7.24.4 '@types/react': 18.0.28 react: 18.2.0 dev: false @@ -794,7 +1315,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.23.2 + '@babel/runtime': 7.24.4 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.28)(react@18.2.0) '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.28)(react-dom@18.2.0)(react@18.2.0) @@ -815,7 +1336,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.23.2 + '@babel/runtime': 7.24.4 '@types/react': 18.0.28 react: 18.2.0 dev: false @@ -833,7 +1354,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.23.2 + '@babel/runtime': 7.24.4 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.28)(react@18.2.0) '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.28)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.28)(react@18.2.0) @@ -852,7 +1373,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.23.2 + '@babel/runtime': 7.24.4 '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.0.28)(react@18.2.0) '@types/react': 18.0.28 react: 18.2.0 @@ -871,7 +1392,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.23.2 + '@babel/runtime': 7.24.4 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.28)(react@18.2.0) '@radix-ui/react-context': 1.0.1(@types/react@18.0.28)(react@18.2.0) @@ -887,7 +1408,7 @@ packages: '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.0.28)(react@18.2.0) '@types/react': 18.0.28 '@types/react-dom': 18.0.11 - aria-hidden: 1.2.3 + aria-hidden: 1.2.4 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) react-remove-scroll: 2.5.5(@types/react@18.0.28)(react@18.2.0) @@ -906,8 +1427,8 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.23.2 - '@floating-ui/react-dom': 2.0.4(react-dom@18.2.0)(react@18.2.0) + '@babel/runtime': 7.24.4 + '@floating-ui/react-dom': 2.0.8(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-arrow': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.28)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.28)(react@18.2.0) '@radix-ui/react-context': 1.0.1(@types/react@18.0.28)(react@18.2.0) @@ -936,7 +1457,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.23.2 + '@babel/runtime': 7.24.4 '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.28)(react-dom@18.2.0)(react@18.2.0) '@types/react': 18.0.28 '@types/react-dom': 18.0.11 @@ -957,7 +1478,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.23.2 + '@babel/runtime': 7.24.4 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.28)(react@18.2.0) '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.0.28)(react@18.2.0) '@types/react': 18.0.28 @@ -979,7 +1500,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.23.2 + '@babel/runtime': 7.24.4 '@radix-ui/react-slot': 1.0.2(@types/react@18.0.28)(react@18.2.0) '@types/react': 18.0.28 '@types/react-dom': 18.0.11 @@ -996,7 +1517,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.23.2 + '@babel/runtime': 7.24.4 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.28)(react@18.2.0) '@types/react': 18.0.28 react: 18.2.0 @@ -1011,7 +1532,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.23.2 + '@babel/runtime': 7.24.4 '@types/react': 18.0.28 react: 18.2.0 dev: false @@ -1025,7 +1546,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.23.2 + '@babel/runtime': 7.24.4 '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.28)(react@18.2.0) '@types/react': 18.0.28 react: 18.2.0 @@ -1040,7 +1561,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.23.2 + '@babel/runtime': 7.24.4 '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.28)(react@18.2.0) '@types/react': 18.0.28 react: 18.2.0 @@ -1055,7 +1576,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.23.2 + '@babel/runtime': 7.24.4 '@types/react': 18.0.28 react: 18.2.0 dev: false @@ -1069,7 +1590,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.23.2 + '@babel/runtime': 7.24.4 '@radix-ui/rect': 1.0.1 '@types/react': 18.0.28 react: 18.2.0 @@ -1084,7 +1605,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.23.2 + '@babel/runtime': 7.24.4 '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.0.28)(react@18.2.0) '@types/react': 18.0.28 react: 18.2.0 @@ -1093,46 +1614,22 @@ packages: /@radix-ui/rect@1.0.1: resolution: {integrity: sha512-fyrgCaedtvMg9NK3en0pnOYJdtfwxUcNolezkNPUsoX57X8oQk+NkqcvzHXD2uKNij6GXmWU9NDru2IWjrO4BQ==} dependencies: - '@babel/runtime': 7.23.2 + '@babel/runtime': 7.24.4 dev: false /@remirror/core-constants@2.0.2: resolution: {integrity: sha512-dyHY+sMF0ihPus3O27ODd4+agdHMEmuRdyiZJ2CCWjPV5UFmn17ZbElvk6WOGVE4rdCJKZQCrPV2BcikOMLUGQ==} dev: false - /@remirror/core-helpers@3.0.0: - resolution: {integrity: sha512-tusEgQJIqg4qKj6HSBUFcyRnWnziw3neh4T9wOmsPGHFC3w9kl5KSrDb9UAgE8uX6y32FnS7vJ955mWOl3n50A==} - dependencies: - '@remirror/core-constants': 2.0.2 - '@remirror/types': 1.0.1 - '@types/object.omit': 3.0.3 - '@types/object.pick': 1.3.4 - '@types/throttle-debounce': 2.1.0 - case-anything: 2.1.13 - dash-get: 1.0.2 - deepmerge: 4.3.1 - fast-deep-equal: 3.1.3 - make-error: 1.3.6 - object.omit: 3.0.0 - object.pick: 1.3.0 - throttle-debounce: 3.0.1 - dev: false - - /@remirror/types@1.0.1: - resolution: {integrity: sha512-VlZQxwGnt1jtQ18D6JqdIF+uFZo525WEqrfp9BOc3COPpK4+AWCgdnAWL+ho6imWcoINlGjR/+3b6y5C1vBVEA==} - dependencies: - type-fest: 2.19.0 - dev: false - - /@rushstack/eslint-patch@1.5.1: - resolution: {integrity: sha512-6i/8UoL0P5y4leBIGzvkZdS85RDMG9y1ihZzmTZQ5LdHUYmZ7pKFoj8X0236s3lusPs1Fa5HTQUpwI+UfTcmeA==} + /@rushstack/eslint-patch@1.10.1: + resolution: {integrity: sha512-S3Kq8e7LqxkA9s7HKLqXGTGck1uwis5vAXan3FnU5yw1Ec5hsSGnq4s/UCaSqABPOnOTg7zASLyst7+ohgWexg==} /@sinclair/typebox@0.27.8: resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} dev: false - /@sinonjs/commons@3.0.0: - resolution: {integrity: sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==} + /@sinonjs/commons@3.0.1: + resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==} dependencies: type-detect: 4.0.8 dev: false @@ -1140,7 +1637,7 @@ packages: /@sinonjs/fake-timers@10.3.0: resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} dependencies: - '@sinonjs/commons': 3.0.0 + '@sinonjs/commons': 3.0.1 dev: false /@swc/helpers@0.5.1: @@ -1155,23 +1652,23 @@ packages: tslib: 2.6.2 dev: false - /@swc/helpers@0.5.3: - resolution: {integrity: sha512-FaruWX6KdudYloq1AHD/4nU+UsMTdNE8CKyrseXWEcgjDAbvkwJg2QGPAnfIJLIWsjZOSPLOAykK6fuYp4vp4A==} + /@swc/helpers@0.5.8: + resolution: {integrity: sha512-lruDGw3pnfM3wmZHeW7JuhkGQaJjPyiKjxeGhdmfoOT53Ic9qb5JLDNaK2HUdl1zLDeX28H221UvKjfdvSLVMg==} dependencies: tslib: 2.6.2 dev: false - /@tailwindcss/forms@0.5.7(tailwindcss@3.3.5): + /@tailwindcss/forms@0.5.7(tailwindcss@3.4.3): resolution: {integrity: sha512-QE7X69iQI+ZXwldE+rzasvbJiyV/ju1FGHH0Qn2W3FKbuYtqp8LKcy6iSw79fVUT5/Vvf+0XgLCeYVG+UV6hOw==} peerDependencies: tailwindcss: '>=3.0.0 || >= 3.0.0-alpha.1' dependencies: mini-svg-data-uri: 1.4.4 - tailwindcss: 3.3.5 + tailwindcss: 3.4.3 dev: true - /@tailwindcss/typography@0.5.10(tailwindcss@3.3.5): - resolution: {integrity: sha512-Pe8BuPJQJd3FfRnm6H0ulKIGoMEQS+Vq01R6M5aCrFB/ccR/shT+0kXLjouGC1gFLm9hopTFN+DMP0pfwRWzPw==} + /@tailwindcss/typography@0.5.12(tailwindcss@3.4.3): + resolution: {integrity: sha512-CNwpBpconcP7ppxmuq3qvaCxiRWnbhANpY/ruH4L5qs2GCiVDJXde/pjj2HWPV1+Q4G9+V/etrwUYopdcjAlyg==} peerDependencies: tailwindcss: '>=3.0.0 || insiders' dependencies: @@ -1179,347 +1676,362 @@ packages: lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 postcss-selector-parser: 6.0.10 - tailwindcss: 3.3.5 + tailwindcss: 3.4.3 dev: true - /@tiptap/core@2.1.12(@tiptap/pm@2.1.12): - resolution: {integrity: sha512-ZGc3xrBJA9KY8kln5AYTj8y+GDrKxi7u95xIl2eccrqTY5CQeRu6HRNM1yT4mAjuSaG9jmazyjGRlQuhyxCKxQ==} + /@tanstack/react-virtual@3.2.0(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-OEdMByf2hEfDa6XDbGlZN8qO6bTjlNKqjM3im9JG+u3mCL8jALy0T/67oDI001raUUPh1Bdmfn4ZvPOV5knpcg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + dependencies: + '@tanstack/virtual-core': 3.2.0 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@tanstack/virtual-core@3.2.0: + resolution: {integrity: sha512-P5XgYoAw/vfW65byBbJQCw+cagdXDT/qH6wmABiLt4v4YBT2q2vqCOhihe+D1Nt325F/S/0Tkv6C5z0Lv+VBQQ==} + dev: false + + /@tiptap/core@2.2.4(@tiptap/pm@2.2.4): + resolution: {integrity: sha512-cRrI8IlLIhCE1hacBQzXIC8dsRvGq6a4lYWQK/BaHuZg21CG7szp3Vd8Ix+ra1f5v0xPOT+Hy+QFNQooRMKMCw==} peerDependencies: '@tiptap/pm': ^2.0.0 dependencies: - '@tiptap/pm': 2.1.12 + '@tiptap/pm': 2.2.4 dev: false - /@tiptap/extension-blockquote@2.1.12(@tiptap/core@2.1.12): - resolution: {integrity: sha512-Qb3YRlCfugx9pw7VgLTb+jY37OY4aBJeZnqHzx4QThSm13edNYjasokbX0nTwL1Up4NPTcY19JUeHt6fVaVVGg==} + /@tiptap/extension-blockquote@2.2.4(@tiptap/core@2.2.4): + resolution: {integrity: sha512-FrfPnn0VgVrUwWLwja1afX99JGLp6PE9ThVcmri+tLwUZQvTTVcCvHoCdOakav3/nge1+aV4iE3tQdyq1tWI9Q==} peerDependencies: '@tiptap/core': ^2.0.0 dependencies: - '@tiptap/core': 2.1.12(@tiptap/pm@2.1.12) + '@tiptap/core': 2.2.4(@tiptap/pm@2.2.4) dev: false - /@tiptap/extension-bold@2.1.12(@tiptap/core@2.1.12): - resolution: {integrity: sha512-AZGxIxcGU1/y6V2YEbKsq6BAibL8yQrbRm6EdcBnby41vj1WziewEKswhLGmZx5IKM2r2ldxld03KlfSIlKQZg==} + /@tiptap/extension-bold@2.2.4(@tiptap/core@2.2.4): + resolution: {integrity: sha512-v3tTLc8YESFZPOGj5ByFr8VbmQ/PTo49T1vsK50VubxIN/5r9cXlKH8kb3dZlZxCxJa3FrXNO/M8rdGBSWQvSg==} peerDependencies: '@tiptap/core': ^2.0.0 dependencies: - '@tiptap/core': 2.1.12(@tiptap/pm@2.1.12) + '@tiptap/core': 2.2.4(@tiptap/pm@2.2.4) dev: false - /@tiptap/extension-bubble-menu@2.1.12(@tiptap/core@2.1.12)(@tiptap/pm@2.1.12): - resolution: {integrity: sha512-gAGi21EQ4wvLmT7klgariAc2Hf+cIjaNU2NWze3ut6Ku9gUo5ZLqj1t9SKHmNf4d5JG63O8GxpErqpA7lHlRtw==} + /@tiptap/extension-bubble-menu@2.2.4(@tiptap/core@2.2.4)(@tiptap/pm@2.2.4): + resolution: {integrity: sha512-Nx1fS9jcFlhxaTDYlnayz2UulhK6CMaePc36+7PQIVI+u20RhgTCRNr25zKNemvsiM0RPZZVUjlHkxC0l5as1Q==} peerDependencies: '@tiptap/core': ^2.0.0 '@tiptap/pm': ^2.0.0 dependencies: - '@tiptap/core': 2.1.12(@tiptap/pm@2.1.12) - '@tiptap/pm': 2.1.12 + '@tiptap/core': 2.2.4(@tiptap/pm@2.2.4) + '@tiptap/pm': 2.2.4 tippy.js: 6.3.7 dev: false - /@tiptap/extension-bullet-list@2.1.12(@tiptap/core@2.1.12): - resolution: {integrity: sha512-vtD8vWtNlmAZX8LYqt2yU9w3mU9rPCiHmbp4hDXJs2kBnI0Ju/qAyXFx6iJ3C3XyuMnMbJdDI9ee0spAvFz7cQ==} + /@tiptap/extension-bullet-list@2.2.4(@tiptap/core@2.2.4): + resolution: {integrity: sha512-z/MPmW8bhRougMuorl6MAQBXeK4rhlP+jBWlNwT+CT8h5IkXqPnDbM1sZeagp2nYfVV6Yc4RWpzimqHHtGnYTA==} peerDependencies: '@tiptap/core': ^2.0.0 dependencies: - '@tiptap/core': 2.1.12(@tiptap/pm@2.1.12) + '@tiptap/core': 2.2.4(@tiptap/pm@2.2.4) dev: false - /@tiptap/extension-code-block@2.1.12(@tiptap/core@2.1.12)(@tiptap/pm@2.1.12): - resolution: {integrity: sha512-RXtSYCVsnk8D+K80uNZShClfZjvv1EgO42JlXLVGWQdIgaNyuOv/6I/Jdf+ZzhnpsBnHufW+6TJjwP5vJPSPHA==} + /@tiptap/extension-code-block@2.2.4(@tiptap/core@2.2.4)(@tiptap/pm@2.2.4): + resolution: {integrity: sha512-h6WV9TmaBEZmvqe1ezMR83DhCPUap6P2mSR5pwVk0WVq6rvZjfgU0iF3EetBJOeDgPlz7cNe2NMDfVb1nGTM/g==} peerDependencies: '@tiptap/core': ^2.0.0 '@tiptap/pm': ^2.0.0 dependencies: - '@tiptap/core': 2.1.12(@tiptap/pm@2.1.12) - '@tiptap/pm': 2.1.12 + '@tiptap/core': 2.2.4(@tiptap/pm@2.2.4) + '@tiptap/pm': 2.2.4 dev: false - /@tiptap/extension-code@2.1.12(@tiptap/core@2.1.12): - resolution: {integrity: sha512-CRiRq5OTC1lFgSx6IMrECqmtb93a0ZZKujEnaRhzWliPBjLIi66va05f/P1vnV6/tHaC3yfXys6dxB5A4J8jxw==} + /@tiptap/extension-code@2.2.4(@tiptap/core@2.2.4): + resolution: {integrity: sha512-JB4SJ2mUU/9qXFUf+K5K9szvovnN9AIcCb0f0UlcVBuddKHSqCl3wO3QJgYt44BfQTLMNuyzr+zVqfFd6BNt/g==} peerDependencies: '@tiptap/core': ^2.0.0 dependencies: - '@tiptap/core': 2.1.12(@tiptap/pm@2.1.12) + '@tiptap/core': 2.2.4(@tiptap/pm@2.2.4) dev: false - /@tiptap/extension-color@2.1.12(@tiptap/core@2.1.12)(@tiptap/extension-text-style@2.1.12): - resolution: {integrity: sha512-Myd6iSbPJvvclr+NRBEdE0k52QlQrXZnJljk4JKn0b25cl60ERA40FH9QLBjkpTed7SDbI3oX7LWIzTUoCj39w==} + /@tiptap/extension-color@2.2.4(@tiptap/core@2.2.4)(@tiptap/extension-text-style@2.2.4): + resolution: {integrity: sha512-R3caThbG25gQz5b1+3PoJnVmuMF0lnqxPJ86l2ZWRAuqRSSEOJDYMGY5rlnPkAVW23Ej2FOuDFVxV/18pFHo3w==} peerDependencies: '@tiptap/core': ^2.0.0 '@tiptap/extension-text-style': ^2.0.0 dependencies: - '@tiptap/core': 2.1.12(@tiptap/pm@2.1.12) - '@tiptap/extension-text-style': 2.1.12(@tiptap/core@2.1.12) + '@tiptap/core': 2.2.4(@tiptap/pm@2.2.4) + '@tiptap/extension-text-style': 2.2.4(@tiptap/core@2.2.4) dev: false - /@tiptap/extension-document@2.1.12(@tiptap/core@2.1.12): - resolution: {integrity: sha512-0QNfAkCcFlB9O8cUNSwTSIQMV9TmoEhfEaLz/GvbjwEq4skXK3bU+OQX7Ih07waCDVXIGAZ7YAZogbvrn/WbOw==} + /@tiptap/extension-document@2.2.4(@tiptap/core@2.2.4): + resolution: {integrity: sha512-z+05xGK0OFoXV1GL+/8bzcZuWMdMA3+EKwk5c+iziG60VZcvGTF7jBRsZidlu9Oaj0cDwWHCeeo6L9SgSh6i2A==} peerDependencies: '@tiptap/core': ^2.0.0 dependencies: - '@tiptap/core': 2.1.12(@tiptap/pm@2.1.12) + '@tiptap/core': 2.2.4(@tiptap/pm@2.2.4) dev: false - /@tiptap/extension-dropcursor@2.1.12(@tiptap/core@2.1.12)(@tiptap/pm@2.1.12): - resolution: {integrity: sha512-0tT/q8nL4NBCYPxr9T0Brck+RQbWuczm9nV0bnxgt0IiQXoRHutfPWdS7GA65PTuVRBS/3LOco30fbjFhkfz/A==} + /@tiptap/extension-dropcursor@2.2.4(@tiptap/core@2.2.4)(@tiptap/pm@2.2.4): + resolution: {integrity: sha512-IHwkEKmqpqXyJi16h7871NrcIqeyN7I6XRE2qdqi+MhGigVWI8nWHoYbjRKa7K/1uhs5zeRYyDlq5EuZyL6mgA==} peerDependencies: '@tiptap/core': ^2.0.0 '@tiptap/pm': ^2.0.0 dependencies: - '@tiptap/core': 2.1.12(@tiptap/pm@2.1.12) - '@tiptap/pm': 2.1.12 + '@tiptap/core': 2.2.4(@tiptap/pm@2.2.4) + '@tiptap/pm': 2.2.4 dev: false - /@tiptap/extension-floating-menu@2.1.12(@tiptap/core@2.1.12)(@tiptap/pm@2.1.12): - resolution: {integrity: sha512-uo0ydCJNg6AWwLT6cMUJYVChfvw2PY9ZfvKRhh9YJlGfM02jS4RUG/bJBts6R37f+a5FsOvAVwg8EvqPlNND1A==} + /@tiptap/extension-floating-menu@2.2.4(@tiptap/core@2.2.4)(@tiptap/pm@2.2.4): + resolution: {integrity: sha512-U25l7PEzOmlAPugNRl8t8lqyhQZS6W/+3f92+FdwW9qXju3i62iX/3OGCC3Gv+vybmQ4fbZmMjvl+VDfenNi3A==} peerDependencies: '@tiptap/core': ^2.0.0 '@tiptap/pm': ^2.0.0 dependencies: - '@tiptap/core': 2.1.12(@tiptap/pm@2.1.12) - '@tiptap/pm': 2.1.12 + '@tiptap/core': 2.2.4(@tiptap/pm@2.2.4) + '@tiptap/pm': 2.2.4 tippy.js: 6.3.7 dev: false - /@tiptap/extension-gapcursor@2.1.12(@tiptap/core@2.1.12)(@tiptap/pm@2.1.12): - resolution: {integrity: sha512-zFYdZCqPgpwoB7whyuwpc8EYLYjUE5QYKb8vICvc+FraBUDM51ujYhFSgJC3rhs8EjI+8GcK8ShLbSMIn49YOQ==} + /@tiptap/extension-gapcursor@2.2.4(@tiptap/core@2.2.4)(@tiptap/pm@2.2.4): + resolution: {integrity: sha512-Y6htT/RDSqkQ1UwG2Ia+rNVRvxrKPOs3RbqKHPaWr3vbFWwhHyKhMCvi/FqfI3d5pViVHOZQ7jhb5hT/a0BmNw==} peerDependencies: '@tiptap/core': ^2.0.0 '@tiptap/pm': ^2.0.0 dependencies: - '@tiptap/core': 2.1.12(@tiptap/pm@2.1.12) - '@tiptap/pm': 2.1.12 + '@tiptap/core': 2.2.4(@tiptap/pm@2.2.4) + '@tiptap/pm': 2.2.4 dev: false - /@tiptap/extension-hard-break@2.1.12(@tiptap/core@2.1.12): - resolution: {integrity: sha512-nqKcAYGEOafg9D+2cy1E4gHNGuL12LerVa0eS2SQOb+PT8vSel9OTKU1RyZldsWSQJ5rq/w4uIjmLnrSR2w6Yw==} + /@tiptap/extension-hard-break@2.2.4(@tiptap/core@2.2.4): + resolution: {integrity: sha512-FPvS57GcqHIeLbPKGJa3gnH30Xw+YB1PXXnAWG2MpnMtc2Vtj1l5xaYYBZB+ADdXLAlU0YMbKhFLQO4+pg1Isg==} peerDependencies: '@tiptap/core': ^2.0.0 dependencies: - '@tiptap/core': 2.1.12(@tiptap/pm@2.1.12) + '@tiptap/core': 2.2.4(@tiptap/pm@2.2.4) dev: false - /@tiptap/extension-heading@2.1.12(@tiptap/core@2.1.12): - resolution: {integrity: sha512-MoANP3POAP68Ko9YXarfDKLM/kXtscgp6m+xRagPAghRNujVY88nK1qBMZ3JdvTVN6b/ATJhp8UdrZX96TLV2w==} + /@tiptap/extension-heading@2.2.4(@tiptap/core@2.2.4): + resolution: {integrity: sha512-gkq7Ns2FcrOCRq7Q+VRYt5saMt2R9g4REAtWy/jEevJ5UV5vA2AiGnYDmxwAkHutoYU0sAUkjqx37wE0wpamNw==} peerDependencies: '@tiptap/core': ^2.0.0 dependencies: - '@tiptap/core': 2.1.12(@tiptap/pm@2.1.12) + '@tiptap/core': 2.2.4(@tiptap/pm@2.2.4) dev: false - /@tiptap/extension-highlight@2.1.12(@tiptap/core@2.1.12): - resolution: {integrity: sha512-buen31cYPyiiHA2i0o2i/UcjRTg/42mNDCizGr1OJwvv3AELG3qOFc4Y58WJWIvWNv+1Dr4ZxHA3GNVn0ANWyg==} + /@tiptap/extension-highlight@2.2.4(@tiptap/core@2.2.4): + resolution: {integrity: sha512-GGl6ehKQ0Q0gGgUQhkWg2XYPfhVU5c0JD3NHzV4OrBP6JAtFeMYeSLdfYzFcmoYnGafvSZaJ3NukUvnDHZGzRg==} peerDependencies: '@tiptap/core': ^2.0.0 dependencies: - '@tiptap/core': 2.1.12(@tiptap/pm@2.1.12) + '@tiptap/core': 2.2.4(@tiptap/pm@2.2.4) dev: false - /@tiptap/extension-history@2.1.12(@tiptap/core@2.1.12)(@tiptap/pm@2.1.12): - resolution: {integrity: sha512-6b7UFVkvPjq3LVoCTrYZAczt5sQrQUaoDWAieVClVZoFLfjga2Fwjcfgcie8IjdPt8YO2hG/sar/c07i9vM0Sg==} + /@tiptap/extension-history@2.2.4(@tiptap/core@2.2.4)(@tiptap/pm@2.2.4): + resolution: {integrity: sha512-FDM32XYF5NU4mzh+fJ8w2CyUqv0l2Nl15sd6fOhQkVxSj8t57z+DUXc9ZR3zkH+1RAagYJo/2Gu3e99KpMr0tg==} peerDependencies: '@tiptap/core': ^2.0.0 '@tiptap/pm': ^2.0.0 dependencies: - '@tiptap/core': 2.1.12(@tiptap/pm@2.1.12) - '@tiptap/pm': 2.1.12 + '@tiptap/core': 2.2.4(@tiptap/pm@2.2.4) + '@tiptap/pm': 2.2.4 dev: false - /@tiptap/extension-horizontal-rule@2.1.12(@tiptap/core@2.1.12)(@tiptap/pm@2.1.12): - resolution: {integrity: sha512-RRuoK4KxrXRrZNAjJW5rpaxjiP0FJIaqpi7nFbAua2oHXgsCsG8qbW2Y0WkbIoS8AJsvLZ3fNGsQ8gpdliuq3A==} + /@tiptap/extension-horizontal-rule@2.2.4(@tiptap/core@2.2.4)(@tiptap/pm@2.2.4): + resolution: {integrity: sha512-iCRHjFQQHApWg3R4fkKkJQhWEOdu1Fdc4YEAukdOXPSg3fg36IwjvsMXjt9SYBtVZ+iio3rORCZGXyMvgCH9uw==} peerDependencies: '@tiptap/core': ^2.0.0 '@tiptap/pm': ^2.0.0 dependencies: - '@tiptap/core': 2.1.12(@tiptap/pm@2.1.12) - '@tiptap/pm': 2.1.12 + '@tiptap/core': 2.2.4(@tiptap/pm@2.2.4) + '@tiptap/pm': 2.2.4 dev: false - /@tiptap/extension-image@2.1.12(@tiptap/core@2.1.12): - resolution: {integrity: sha512-VCgOTeNLuoR89WoCESLverpdZpPamOd7IprQbDIeG14sUySt7RHNgf2AEfyTYJEHij12rduvAwFzerPldVAIJg==} + /@tiptap/extension-image@2.2.4(@tiptap/core@2.2.4): + resolution: {integrity: sha512-xOnqZpnP/fAfmK5AKmXplVQdXBtY5AoZ9B+qllH129aLABaDRzl3e14ZRHC8ahQawOmCe6AOCCXYUBXDOlY5Jg==} peerDependencies: '@tiptap/core': ^2.0.0 dependencies: - '@tiptap/core': 2.1.12(@tiptap/pm@2.1.12) + '@tiptap/core': 2.2.4(@tiptap/pm@2.2.4) dev: false - /@tiptap/extension-italic@2.1.12(@tiptap/core@2.1.12): - resolution: {integrity: sha512-/XYrW4ZEWyqDvnXVKbgTXItpJOp2ycswk+fJ3vuexyolO6NSs0UuYC6X4f+FbHYL5VuWqVBv7EavGa+tB6sl3A==} + /@tiptap/extension-italic@2.2.4(@tiptap/core@2.2.4): + resolution: {integrity: sha512-qIhGNvWnsQswSgEMRA8jQQjxfkOGNAuNWKEVQX9DPoqAUgknT41hQcAMP8L2+OdACpb2jbVMOO5Cy5Dof2L8/w==} peerDependencies: '@tiptap/core': ^2.0.0 dependencies: - '@tiptap/core': 2.1.12(@tiptap/pm@2.1.12) + '@tiptap/core': 2.2.4(@tiptap/pm@2.2.4) dev: false - /@tiptap/extension-link@2.1.12(@tiptap/core@2.1.12)(@tiptap/pm@2.1.12): - resolution: {integrity: sha512-Sti5hhlkCqi5vzdQjU/gbmr8kb578p+u0J4kWS+SSz3BknNThEm/7Id67qdjBTOQbwuN07lHjDaabJL0hSkzGQ==} + /@tiptap/extension-link@2.2.4(@tiptap/core@2.2.4)(@tiptap/pm@2.2.4): + resolution: {integrity: sha512-Qsx0cFZm4dxbkToXs5TcXbSoUdicv8db1gV1DYIZdETqjBm4wFjlzCUP7hPHFlvNfeSy1BzAMRt+RpeuiwvxWQ==} peerDependencies: '@tiptap/core': ^2.0.0 '@tiptap/pm': ^2.0.0 dependencies: - '@tiptap/core': 2.1.12(@tiptap/pm@2.1.12) - '@tiptap/pm': 2.1.12 - linkifyjs: 4.1.2 + '@tiptap/core': 2.2.4(@tiptap/pm@2.2.4) + '@tiptap/pm': 2.2.4 + linkifyjs: 4.1.3 dev: false - /@tiptap/extension-list-item@2.1.12(@tiptap/core@2.1.12): - resolution: {integrity: sha512-Gk7hBFofAPmNQ8+uw8w5QSsZOMEGf7KQXJnx5B022YAUJTYYxO3jYVuzp34Drk9p+zNNIcXD4kc7ff5+nFOTrg==} + /@tiptap/extension-list-item@2.2.4(@tiptap/core@2.2.4): + resolution: {integrity: sha512-lPLKGKsHpM9ClUa8n7GEUn8pG6HCYU0vFruIy3l2t6jZdHkrgBnYtVGMZ13K8UDnj/hlAlccxku0D0P4mA1Vrg==} peerDependencies: '@tiptap/core': ^2.0.0 dependencies: - '@tiptap/core': 2.1.12(@tiptap/pm@2.1.12) + '@tiptap/core': 2.2.4(@tiptap/pm@2.2.4) dev: false - /@tiptap/extension-ordered-list@2.1.12(@tiptap/core@2.1.12): - resolution: {integrity: sha512-tF6VGl+D2avCgn9U/2YLJ8qVmV6sPE/iEzVAFZuOSe6L0Pj7SQw4K6AO640QBob/d8VrqqJFHCb6l10amJOnXA==} + /@tiptap/extension-ordered-list@2.2.4(@tiptap/core@2.2.4): + resolution: {integrity: sha512-TpFy140O9Af1JciXt+xwqYUXxcJ6YG8zi/B5UDJujp+FH5sCmlYYBBnWxiFMhVaj6yEmA2eafu1qUkic/1X5Aw==} peerDependencies: '@tiptap/core': ^2.0.0 dependencies: - '@tiptap/core': 2.1.12(@tiptap/pm@2.1.12) + '@tiptap/core': 2.2.4(@tiptap/pm@2.2.4) dev: false - /@tiptap/extension-paragraph@2.1.12(@tiptap/core@2.1.12): - resolution: {integrity: sha512-hoH/uWPX+KKnNAZagudlsrr4Xu57nusGekkJWBcrb5MCDE91BS+DN2xifuhwXiTHxnwOMVFjluc0bPzQbkArsw==} + /@tiptap/extension-paragraph@2.2.4(@tiptap/core@2.2.4): + resolution: {integrity: sha512-m1KwyvTNJxsq7StbspbcOhxO4Wk4YpElDbqOouWi+H4c8azdpI5Pn96ZqhFeE9bSyjByg6OcB/wqoJsLbeFWdQ==} peerDependencies: '@tiptap/core': ^2.0.0 dependencies: - '@tiptap/core': 2.1.12(@tiptap/pm@2.1.12) + '@tiptap/core': 2.2.4(@tiptap/pm@2.2.4) dev: false - /@tiptap/extension-placeholder@2.0.3(@tiptap/core@2.1.12)(@tiptap/pm@2.1.12): + /@tiptap/extension-placeholder@2.0.3(@tiptap/core@2.2.4)(@tiptap/pm@2.2.4): resolution: {integrity: sha512-Z42jo0termRAf0S0L8oxrts94IWX5waU4isS2CUw8xCUigYyCFslkhQXkWATO1qRbjNFLKN2C9qvCgGf4UeBrw==} peerDependencies: '@tiptap/core': ^2.0.0 '@tiptap/pm': ^2.0.0 dependencies: - '@tiptap/core': 2.1.12(@tiptap/pm@2.1.12) - '@tiptap/pm': 2.1.12 + '@tiptap/core': 2.2.4(@tiptap/pm@2.2.4) + '@tiptap/pm': 2.2.4 dev: false - /@tiptap/extension-strike@2.1.12(@tiptap/core@2.1.12): - resolution: {integrity: sha512-HlhrzIjYUT8oCH9nYzEL2QTTn8d1ECnVhKvzAe6x41xk31PjLMHTUy8aYjeQEkWZOWZ34tiTmslV1ce6R3Dt8g==} + /@tiptap/extension-strike@2.2.4(@tiptap/core@2.2.4): + resolution: {integrity: sha512-/a2EwQgA+PpG17V2tVRspcrIY0SN3blwcgM7lxdW4aucGkqSKnf7+91dkhQEwCZ//o8kv9mBCyRoCUcGy6S5Xg==} peerDependencies: '@tiptap/core': ^2.0.0 dependencies: - '@tiptap/core': 2.1.12(@tiptap/pm@2.1.12) + '@tiptap/core': 2.2.4(@tiptap/pm@2.2.4) dev: false - /@tiptap/extension-task-item@2.1.12(@tiptap/core@2.1.12)(@tiptap/pm@2.1.12): - resolution: {integrity: sha512-uqrDTO4JwukZUt40GQdvB6S+oDhdp4cKNPMi0sbteWziQugkSMLlkYvxU0Hfb/YeziaWWwFI7ssPu/hahyk6dQ==} + /@tiptap/extension-task-item@2.2.4(@tiptap/core@2.2.4)(@tiptap/pm@2.2.4): + resolution: {integrity: sha512-Ixzv7bPcgrWelSD0Jy6yAlHxmGWpD5lPt6Ey4POYy7u98duyUFOBMHLcsV24ipQsRacuB+htgmuqOrkiL+hg7w==} peerDependencies: '@tiptap/core': ^2.0.0 '@tiptap/pm': ^2.0.0 dependencies: - '@tiptap/core': 2.1.12(@tiptap/pm@2.1.12) - '@tiptap/pm': 2.1.12 + '@tiptap/core': 2.2.4(@tiptap/pm@2.2.4) + '@tiptap/pm': 2.2.4 dev: false - /@tiptap/extension-task-list@2.1.12(@tiptap/core@2.1.12): - resolution: {integrity: sha512-BUpYlEWK+Q3kw9KIiOqvhd0tUPhMcOf1+fJmCkluJok+okAxMbP1umAtCEQ3QkoCwLr+vpHJov7h3yi9+dwgeQ==} + /@tiptap/extension-task-list@2.2.4(@tiptap/core@2.2.4): + resolution: {integrity: sha512-URh1Yzj/YZBOMkobK4/U8s1QYwIIqHm4b0YadLPPZx9IzTjyV/2bvIakphCmBtxWxeTXW5TbO9eNod3qatq21w==} peerDependencies: '@tiptap/core': ^2.0.0 dependencies: - '@tiptap/core': 2.1.12(@tiptap/pm@2.1.12) + '@tiptap/core': 2.2.4(@tiptap/pm@2.2.4) dev: false - /@tiptap/extension-text-style@2.1.12(@tiptap/core@2.1.12): - resolution: {integrity: sha512-nfjWXX0JSRHLcscfiMESh+RN+Z7bG8nio/C9+8yQASM90VxU9f8oKgF8HnnSYsSrD4lLf44Q6XjmB7aMVUuikg==} + /@tiptap/extension-text-style@2.2.4(@tiptap/core@2.2.4): + resolution: {integrity: sha512-8Mcxy+HUHPUgK7bOv34m8zhbhzPm6f1/hgbgwz9m+Oel7MNPElsMXtxxygbwtr7Hbj6S4NBoBl/Ir4BkziYRbQ==} peerDependencies: '@tiptap/core': ^2.0.0 dependencies: - '@tiptap/core': 2.1.12(@tiptap/pm@2.1.12) + '@tiptap/core': 2.2.4(@tiptap/pm@2.2.4) dev: false - /@tiptap/extension-text@2.1.12(@tiptap/core@2.1.12): - resolution: {integrity: sha512-rCNUd505p/PXwU9Jgxo4ZJv4A3cIBAyAqlx/dtcY6cjztCQuXJhuQILPhjGhBTOLEEL4kW2wQtqzCmb7O8i2jg==} + /@tiptap/extension-text@2.2.4(@tiptap/core@2.2.4): + resolution: {integrity: sha512-NlKHMPnRJXB+0AGtDlU0P2Pg+SdesA2lMMd7JzDUgJgL7pX2jOb8eUqSeOjFKuSzFSqYfH6C3o6mQiNhuQMv+g==} peerDependencies: '@tiptap/core': ^2.0.0 dependencies: - '@tiptap/core': 2.1.12(@tiptap/pm@2.1.12) + '@tiptap/core': 2.2.4(@tiptap/pm@2.2.4) dev: false - /@tiptap/extension-underline@2.1.12(@tiptap/core@2.1.12): - resolution: {integrity: sha512-NwwdhFT8gDD0VUNLQx85yFBhP9a8qg8GPuxlGzAP/lPTV8Ubh3vSeQ5N9k2ZF/vHlEvnugzeVCbmYn7wf8vn1g==} + /@tiptap/extension-underline@2.2.4(@tiptap/core@2.2.4): + resolution: {integrity: sha512-jCHgIJMwtXlGHVy/j3L8/QvglHCikkHJw7YS5yf8E/8HlPh1tZfVy/IxdgacDOpUN30X+UPJZQDdVKymafgwdA==} peerDependencies: '@tiptap/core': ^2.0.0 dependencies: - '@tiptap/core': 2.1.12(@tiptap/pm@2.1.12) + '@tiptap/core': 2.2.4(@tiptap/pm@2.2.4) dev: false - /@tiptap/pm@2.1.12: - resolution: {integrity: sha512-Q3MXXQABG4CZBesSp82yV84uhJh/W0Gag6KPm2HRWPimSFELM09Z9/5WK9RItAYE0aLhe4Krnyiczn9AAa1tQQ==} + /@tiptap/pm@2.2.4: + resolution: {integrity: sha512-Po0klR165zgtinhVp1nwMubjyKx6gAY9kH3IzcniYLCkqhPgiqnAcCr61TBpp4hfK8YURBS4ihvCB1dyfCyY8A==} dependencies: prosemirror-changeset: 2.2.1 prosemirror-collab: 1.3.1 prosemirror-commands: 1.5.2 prosemirror-dropcursor: 1.8.1 prosemirror-gapcursor: 1.3.2 - prosemirror-history: 1.3.2 - prosemirror-inputrules: 1.2.1 + prosemirror-history: 1.4.0 + prosemirror-inputrules: 1.4.0 prosemirror-keymap: 1.2.2 - prosemirror-markdown: 1.11.2 + prosemirror-markdown: 1.12.0 prosemirror-menu: 1.2.4 - prosemirror-model: 1.19.3 + prosemirror-model: 1.19.4 prosemirror-schema-basic: 1.2.2 prosemirror-schema-list: 1.3.0 prosemirror-state: 1.4.3 - prosemirror-tables: 1.3.4 - prosemirror-trailing-node: 2.0.7(prosemirror-model@1.19.3)(prosemirror-state@1.4.3)(prosemirror-view@1.32.4) + prosemirror-tables: 1.3.7 + prosemirror-trailing-node: 2.0.8(prosemirror-model@1.19.4)(prosemirror-state@1.4.3)(prosemirror-view@1.33.3) prosemirror-transform: 1.8.0 - prosemirror-view: 1.32.4 + prosemirror-view: 1.33.3 dev: false - /@tiptap/react@2.1.12(@tiptap/core@2.1.12)(@tiptap/pm@2.1.12)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-RMO4QmmpL7sPR7w8o1Wq0hrUe/ttHzsn5I/eWwqg1d3fGx5y9mOdfCoQ9XBtm49Xzdejy3QVzt4zYp9fX0X/xg==} + /@tiptap/react@2.2.4(@tiptap/core@2.2.4)(@tiptap/pm@2.2.4)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-HkYmMZWcETPZn3KpzdDg/ns2TKeFh54TvtCEInA4ljYtWGLoZc/A+KaiEtMIgVs+Mo1XwrhuoNGjL9c0OK2HJw==} peerDependencies: '@tiptap/core': ^2.0.0 '@tiptap/pm': ^2.0.0 react: ^17.0.0 || ^18.0.0 react-dom: ^17.0.0 || ^18.0.0 dependencies: - '@tiptap/core': 2.1.12(@tiptap/pm@2.1.12) - '@tiptap/extension-bubble-menu': 2.1.12(@tiptap/core@2.1.12)(@tiptap/pm@2.1.12) - '@tiptap/extension-floating-menu': 2.1.12(@tiptap/core@2.1.12)(@tiptap/pm@2.1.12) - '@tiptap/pm': 2.1.12 + '@tiptap/core': 2.2.4(@tiptap/pm@2.2.4) + '@tiptap/extension-bubble-menu': 2.2.4(@tiptap/core@2.2.4)(@tiptap/pm@2.2.4) + '@tiptap/extension-floating-menu': 2.2.4(@tiptap/core@2.2.4)(@tiptap/pm@2.2.4) + '@tiptap/pm': 2.2.4 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /@tiptap/starter-kit@2.1.12(@tiptap/pm@2.1.12): - resolution: {integrity: sha512-+RoP1rWV7rSCit2+3wl2bjvSRiePRJE/7YNKbvH8Faz/+AMO23AFegHoUFynR7U0ouGgYDljGkkj35e0asbSDA==} - dependencies: - '@tiptap/core': 2.1.12(@tiptap/pm@2.1.12) - '@tiptap/extension-blockquote': 2.1.12(@tiptap/core@2.1.12) - '@tiptap/extension-bold': 2.1.12(@tiptap/core@2.1.12) - '@tiptap/extension-bullet-list': 2.1.12(@tiptap/core@2.1.12) - '@tiptap/extension-code': 2.1.12(@tiptap/core@2.1.12) - '@tiptap/extension-code-block': 2.1.12(@tiptap/core@2.1.12)(@tiptap/pm@2.1.12) - '@tiptap/extension-document': 2.1.12(@tiptap/core@2.1.12) - '@tiptap/extension-dropcursor': 2.1.12(@tiptap/core@2.1.12)(@tiptap/pm@2.1.12) - '@tiptap/extension-gapcursor': 2.1.12(@tiptap/core@2.1.12)(@tiptap/pm@2.1.12) - '@tiptap/extension-hard-break': 2.1.12(@tiptap/core@2.1.12) - '@tiptap/extension-heading': 2.1.12(@tiptap/core@2.1.12) - '@tiptap/extension-history': 2.1.12(@tiptap/core@2.1.12)(@tiptap/pm@2.1.12) - '@tiptap/extension-horizontal-rule': 2.1.12(@tiptap/core@2.1.12)(@tiptap/pm@2.1.12) - '@tiptap/extension-italic': 2.1.12(@tiptap/core@2.1.12) - '@tiptap/extension-list-item': 2.1.12(@tiptap/core@2.1.12) - '@tiptap/extension-ordered-list': 2.1.12(@tiptap/core@2.1.12) - '@tiptap/extension-paragraph': 2.1.12(@tiptap/core@2.1.12) - '@tiptap/extension-strike': 2.1.12(@tiptap/core@2.1.12) - '@tiptap/extension-text': 2.1.12(@tiptap/core@2.1.12) + /@tiptap/starter-kit@2.2.4(@tiptap/pm@2.2.4): + resolution: {integrity: sha512-Kbk7qUfIZg3+bNa3e/wBeDQt4jJB46uQgM+xy5NSY6H8NZP6gdmmap3aIrn9S/W/hGpxJl4RcXAeaT0CQji9XA==} + dependencies: + '@tiptap/core': 2.2.4(@tiptap/pm@2.2.4) + '@tiptap/extension-blockquote': 2.2.4(@tiptap/core@2.2.4) + '@tiptap/extension-bold': 2.2.4(@tiptap/core@2.2.4) + '@tiptap/extension-bullet-list': 2.2.4(@tiptap/core@2.2.4) + '@tiptap/extension-code': 2.2.4(@tiptap/core@2.2.4) + '@tiptap/extension-code-block': 2.2.4(@tiptap/core@2.2.4)(@tiptap/pm@2.2.4) + '@tiptap/extension-document': 2.2.4(@tiptap/core@2.2.4) + '@tiptap/extension-dropcursor': 2.2.4(@tiptap/core@2.2.4)(@tiptap/pm@2.2.4) + '@tiptap/extension-gapcursor': 2.2.4(@tiptap/core@2.2.4)(@tiptap/pm@2.2.4) + '@tiptap/extension-hard-break': 2.2.4(@tiptap/core@2.2.4) + '@tiptap/extension-heading': 2.2.4(@tiptap/core@2.2.4) + '@tiptap/extension-history': 2.2.4(@tiptap/core@2.2.4)(@tiptap/pm@2.2.4) + '@tiptap/extension-horizontal-rule': 2.2.4(@tiptap/core@2.2.4)(@tiptap/pm@2.2.4) + '@tiptap/extension-italic': 2.2.4(@tiptap/core@2.2.4) + '@tiptap/extension-list-item': 2.2.4(@tiptap/core@2.2.4) + '@tiptap/extension-ordered-list': 2.2.4(@tiptap/core@2.2.4) + '@tiptap/extension-paragraph': 2.2.4(@tiptap/core@2.2.4) + '@tiptap/extension-strike': 2.2.4(@tiptap/core@2.2.4) + '@tiptap/extension-text': 2.2.4(@tiptap/core@2.2.4) transitivePeerDependencies: - '@tiptap/pm' dev: false - /@tiptap/suggestion@2.1.12(@tiptap/core@2.1.12)(@tiptap/pm@2.1.12): - resolution: {integrity: sha512-rhlLWwVkOodBGRMK0mAmE34l2a+BqM2Y7q1ViuQRBhs/6sZ8d83O4hARHKVwqT5stY4i1l7d7PoemV3uAGI6+g==} + /@tiptap/suggestion@2.2.4(@tiptap/core@2.2.4)(@tiptap/pm@2.2.4): + resolution: {integrity: sha512-g6HHsKM6K3asW+ZlwMYyLCRqCRaswoliZOQofY4iZt5ru5HNTSzm3YW4XSyW5RGXJIuc319yyrOFgtJ3Fyu5rQ==} peerDependencies: '@tiptap/core': ^2.0.0 '@tiptap/pm': ^2.0.0 dependencies: - '@tiptap/core': 2.1.12(@tiptap/pm@2.1.12) - '@tiptap/pm': 2.1.12 + '@tiptap/core': 2.2.4(@tiptap/pm@2.2.4) + '@tiptap/pm': 2.2.4 dev: false /@tootallnate/once@2.0.0: @@ -1527,24 +2039,23 @@ packages: engines: {node: '>= 10'} dev: false - /@tremor/react@3.11.1(prop-types@15.8.1)(react-dom@18.2.0)(react@18.2.0)(tailwindcss@3.3.5): - resolution: {integrity: sha512-oiBm8vFe0+05RFIHlriSmfZX7BMwgAIFGdvz5kAEbN6G/cGOh2oPkTGG+NPbbk8eyo68f13IT6KfTiMVSEhRSA==} + /@tremor/react@3.15.0(react-dom@18.2.0)(react@18.2.0)(tailwindcss@3.4.3): + resolution: {integrity: sha512-TNhLzlGV9ph0Bzd7uTFHaE7Je9diIDuqt7Khnm5XkqO7y0jTE+9aGT/gcV6qTZV/9dfkcv8Aw1J/NpxH+hynGQ==} peerDependencies: react: ^18.0.0 react-dom: '>=16.6.0' dependencies: '@floating-ui/react': 0.19.2(react-dom@18.2.0)(react@18.2.0) - '@headlessui/react': 1.7.17(react-dom@18.2.0)(react@18.2.0) - '@headlessui/tailwindcss': 0.1.3(tailwindcss@3.3.5) + '@headlessui/react': 1.7.18(react-dom@18.2.0)(react@18.2.0) + '@headlessui/tailwindcss': 0.2.0(tailwindcss@3.4.3) date-fns: 2.30.0 react: 18.2.0 - react-day-picker: 8.9.1(date-fns@2.30.0)(react@18.2.0) + react-day-picker: 8.10.0(date-fns@2.30.0)(react@18.2.0) react-dom: 18.2.0(react@18.2.0) - react-transition-group: 4.4.5(react-dom@18.2.0)(react@18.2.0) - recharts: 2.9.3(prop-types@15.8.1)(react-dom@18.2.0)(react@18.2.0) + react-transition-state: 2.1.1(react-dom@18.2.0)(react@18.2.0) + recharts: 2.12.4(react-dom@18.2.0)(react@18.2.0) tailwind-merge: 1.14.0 transitivePeerDependencies: - - prop-types - tailwindcss dev: false @@ -1554,6 +2065,10 @@ packages: '@types/estree': 1.0.5 dev: false + /@types/cookie@0.6.0: + resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} + dev: false + /@types/d3-array@3.2.1: resolution: {integrity: sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg==} dev: false @@ -1572,8 +2087,8 @@ packages: '@types/d3-color': 3.1.3 dev: false - /@types/d3-path@3.0.2: - resolution: {integrity: sha512-WAIEVlOCdd/NKRYTsqCpOMHQHemKBEINf8YXMYOtXH0GA7SY0dqMB78P3Uhgfy+4X+/Mlw2wDtlETkN6kQUCMA==} + /@types/d3-path@3.1.0: + resolution: {integrity: sha512-P2dlU/q51fkOc/Gfl3Ul9kicV7l+ra934qBFXCFhrZMOL6du1TM0pm1ThYvENukyOn5h9v+yMJ9Fn5JK4QozrQ==} dev: false /@types/d3-scale@4.0.8: @@ -1582,10 +2097,10 @@ packages: '@types/d3-time': 3.0.3 dev: false - /@types/d3-shape@3.1.5: - resolution: {integrity: sha512-dfEWpZJ1Pdg8meLlICX1M3WBIpxnaH2eQV2eY43Y5ysRJOTAV9f3/R++lgJKFstfrEOE2zdJ0sv5qwr2Bkic6Q==} + /@types/d3-shape@3.1.6: + resolution: {integrity: sha512-5KKk5aKGu2I+O6SONMYSNflgiP0WfZIQvVUMan50wHsLG1G94JlxEVnCpQARfTtzytuY0p/9PXXZb3I7giofIA==} dependencies: - '@types/d3-path': 3.0.2 + '@types/d3-path': 3.1.0 dev: false /@types/d3-time@3.0.3: @@ -1602,8 +2117,8 @@ packages: '@types/ms': 0.7.34 dev: false - /@types/estree-jsx@1.0.3: - resolution: {integrity: sha512-pvQ+TKeRHeiUGRhvYwRrQ/ISnohKkSJR14fT2yqyZ4e9K5vqc7hrtY2Y1Dw0ZwAzQ6DQsxsaCUuSIIi8v0Cq6w==} + /@types/estree-jsx@1.0.5: + resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} dependencies: '@types/estree': 1.0.5 dev: false @@ -1612,8 +2127,8 @@ packages: resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} dev: false - /@types/hast@2.3.8: - resolution: {integrity: sha512-aMIqAlFd2wTIDZuvLbhUT+TGvMxrNC8ECUIVtH6xxy0sQLs3iu6NO8Kp/VT5je7i5ufnebXzdV1dNDMnvaH6IQ==} + /@types/hast@2.3.10: + resolution: {integrity: sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==} dependencies: '@types/unist': 2.0.10 dev: false @@ -1645,7 +2160,7 @@ packages: /@types/jsdom@20.0.1: resolution: {integrity: sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==} dependencies: - '@types/node': 20.9.0 + '@types/node': 20.12.4 '@types/tough-cookie': 4.0.5 parse5: 7.1.2 dev: false @@ -1657,8 +2172,8 @@ packages: resolution: {integrity: sha512-yg6E+u0/+Zjva+buc3EIb+29XEg4wltq7cSmd4Uc2EE/1nUVmxyzpX6gUXD0V8jIrG0r7YeOGVIbYRkxeooCtw==} dev: false - /@types/markdown-it@12.2.3: - resolution: {integrity: sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==} + /@types/markdown-it@13.0.7: + resolution: {integrity: sha512-U/CBi2YUUcTHBt5tjO2r5QV/x0Po6nsYwQU4Y04fBS6vfoImaiZ6f8bi3CjTCxBPQSO1LMyUqkByzi8AidyxfA==} dependencies: '@types/linkify-it': 3.0.5 '@types/mdurl': 1.0.5 @@ -1674,8 +2189,8 @@ packages: resolution: {integrity: sha512-6L6VymKTzYSrEf4Nev4Xa1LCHKrlTlYCBMTlQKFuddo1CvQcE52I0mwfOJayueUC7MJuXOeHTcIU683lzd0cUA==} dev: false - /@types/mdx@2.0.10: - resolution: {integrity: sha512-Rllzc5KHk0Al5/WANwgSPl1/CwjqCy+AZrGd78zuK+jO9aDM6ffblZ+zIjgPNAaEBmlO0RYDvLNh7wD0zKVgEg==} + /@types/mdx@2.0.12: + resolution: {integrity: sha512-H9VZ9YqE+H28FQVchC83RCs5xQ2J7mAAv6qdDEaWmXEVl3OpdH+xfrSUzQ1lp7U7oSTRZ0RvW08ASPJsYBi7Cw==} dev: false /@types/ms@0.7.34: @@ -1686,68 +2201,56 @@ packages: resolution: {integrity: sha512-p6ua9zBxz5otCmbpb5D3U4B5Nanw6Pk3PPyX05xnxbB/fRv71N7CPmORg7uAD5P70T0xmx1pzAx/FUfa5X+3cw==} dev: false - /@types/node@20.9.0: - resolution: {integrity: sha512-nekiGu2NDb1BcVofVcEKMIwzlx4NjHlcjhoxxKBNLtz15Y1z7MYf549DFvkHSId02Ax6kGwWntIBPC3l/JZcmw==} + /@types/node@20.12.4: + resolution: {integrity: sha512-E+Fa9z3wSQpzgYQdYmme5X3OTuejnnTx88A6p6vkkJosR3KBz+HpE3kqNm98VE6cfLFcISx7zW7MsJkH6KwbTw==} dependencies: undici-types: 5.26.5 - /@types/object.omit@3.0.3: - resolution: {integrity: sha512-xrq4bQTBGYY2cw+gV4PzoG2Lv3L0pjZ1uXStRRDQoATOYW1lCsFQHhQ+OkPhIcQoqLjAq7gYif7D14Qaa6Zbew==} - dev: false - - /@types/object.pick@1.3.4: - resolution: {integrity: sha512-5PjwB0uP2XDp3nt5u5NJAG2DORHIRClPzWT/TTZhJ2Ekwe8M5bA9tvPdi9NO/n2uvu2/ictat8kgqvLfcIE1SA==} - dev: false - /@types/pg@8.6.6: resolution: {integrity: sha512-O2xNmXebtwVekJDD+02udOncjVcMZQuTEQEMpKJ0ZRf5E7/9JJX3izhKUcUifBkyKpljyUM6BTgy2trmviKlpw==} dependencies: - '@types/node': 20.9.0 - pg-protocol: 1.6.0 + '@types/node': 20.12.4 + pg-protocol: 1.6.1 pg-types: 2.2.0 dev: false - /@types/prop-types@15.7.10: - resolution: {integrity: sha512-mxSnDQxPqsZxmeShFH+uwQ4kO4gcJcGahjjMFeLbKE95IAZiiZyiEepGZjtXJ7hN/yfu0bu9xN2ajcU0JcxX6A==} + /@types/prop-types@15.7.12: + resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} /@types/react-dom@18.0.11: resolution: {integrity: sha512-O38bPbI2CWtgw/OoQoY+BRelw7uysmXbWvw3nLWO21H1HSh+GOlqPuXshJfjmpNlKiiSDG9cc1JZAaMmVdcTlw==} dependencies: - '@types/react': 18.2.37 + '@types/react': 18.2.74 dev: false - /@types/react-dom@18.2.15: - resolution: {integrity: sha512-HWMdW+7r7MR5+PZqJF6YFNSCtjz1T0dsvo/f1BV6HkV+6erD/nA7wd9NM00KVG83zf2nJ7uATPO9ttdIPvi3gg==} + /@types/react-dom@18.2.24: + resolution: {integrity: sha512-cN6upcKd8zkGy4HU9F1+/s98Hrp6D4MOcippK4PoE8OZRngohHZpbJn1GsaDLz87MqvHNoT13nHvNqM9ocRHZg==} dependencies: - '@types/react': 18.2.37 + '@types/react': 18.2.74 dev: true /@types/react@18.0.28: resolution: {integrity: sha512-RD0ivG1kEztNBdoAK7lekI9M+azSnitIn85h4iOiaLjaTrMjzslhaqCGaI4IyCJ1RljWiLCEu4jyrLLgqxBTew==} dependencies: - '@types/prop-types': 15.7.10 - '@types/scheduler': 0.16.6 - csstype: 3.1.2 + '@types/prop-types': 15.7.12 + '@types/scheduler': 0.23.0 + csstype: 3.1.3 dev: false - /@types/react@18.2.37: - resolution: {integrity: sha512-RGAYMi2bhRgEXT3f4B92WTohopH6bIXw05FuGlmJEnv/omEn190+QYEIYxIAuIBdKgboYYdVved2p1AxZVQnaw==} + /@types/react@18.2.74: + resolution: {integrity: sha512-9AEqNZZyBx8OdZpxzQlaFEVCSFUM2YXJH46yPOiOpm078k6ZLOCcuAzGum/zK8YBwY+dbahVNbHrbgrAwIRlqw==} dependencies: - '@types/prop-types': 15.7.10 - '@types/scheduler': 0.16.6 - csstype: 3.1.2 + '@types/prop-types': 15.7.12 + csstype: 3.1.3 - /@types/scheduler@0.16.6: - resolution: {integrity: sha512-Vlktnchmkylvc9SnwwwozTv04L/e1NykF5vgoQ0XTmI8DD+wxfjQuHuvHS3p0r2jz2x2ghPs2h1FVeDirIteWA==} + /@types/scheduler@0.23.0: + resolution: {integrity: sha512-YIoDCTH3Af6XM5VuwGG/QL/CJqga1Zm3NkU3HZ4ZHK2fRMPYP1VczsTUqtsf43PH/iJNVlPHAo2oWX7BSdB2Hw==} + dev: false /@types/stack-utils@2.0.3: resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} dev: false - /@types/throttle-debounce@2.1.0: - resolution: {integrity: sha512-5eQEtSCoESnh2FsiLTxE121IiE60hnMqcb435fShf4bpLRjEu1Eoekht23y6zXS9Ts3l+Szu3TARnTsA0GkOkQ==} - dev: false - /@types/tough-cookie@4.0.5: resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==} dev: false @@ -1764,8 +2267,8 @@ packages: resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} dev: false - /@types/yargs@17.0.31: - resolution: {integrity: sha512-bocYSx4DI8TmdlvxqGpVNXOgCNR1Jj0gNPhhAY+iz1rgKDAaYrAYdFYnhDV1IFuiuVc9HkOwyDcFxaTElF3/wg==} + /@types/yargs@17.0.32: + resolution: {integrity: sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==} dependencies: '@types/yargs-parser': 21.0.3 dev: false @@ -1790,8 +2293,8 @@ packages: - supports-color dev: false - /@typescript-eslint/parser@6.11.0(eslint@8.53.0)(typescript@5.2.2): - resolution: {integrity: sha512-+whEdjk+d5do5nxfxx73oanLL9ghKO3EwM9kBCkUtWMRwWuPaFv9ScuqlYfQ6pAD6ZiJhky7TZ2ZYhrMsfMxVQ==} + /@typescript-eslint/parser@6.21.0(eslint@8.53.0)(typescript@5.4.3): + resolution: {integrity: sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -1800,15 +2303,16 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 6.11.0 - '@typescript-eslint/types': 6.11.0 - '@typescript-eslint/typescript-estree': 6.11.0(typescript@5.2.2) - '@typescript-eslint/visitor-keys': 6.11.0 + '@typescript-eslint/scope-manager': 6.21.0 + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.3) + '@typescript-eslint/visitor-keys': 6.21.0 debug: 4.3.4 eslint: 8.53.0 - typescript: 5.2.2 + typescript: 5.4.3 transitivePeerDependencies: - supports-color + dev: true /@typescript-eslint/scope-manager@5.62.0: resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} @@ -1818,21 +2322,23 @@ packages: '@typescript-eslint/visitor-keys': 5.62.0 dev: false - /@typescript-eslint/scope-manager@6.11.0: - resolution: {integrity: sha512-0A8KoVvIURG4uhxAdjSaxy8RdRE//HztaZdG8KiHLP8WOXSk0vlF7Pvogv+vlJA5Rnjj/wDcFENvDaHb+gKd1A==} + /@typescript-eslint/scope-manager@6.21.0: + resolution: {integrity: sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 6.11.0 - '@typescript-eslint/visitor-keys': 6.11.0 + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/visitor-keys': 6.21.0 + dev: true /@typescript-eslint/types@5.62.0: resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: false - /@typescript-eslint/types@6.11.0: - resolution: {integrity: sha512-ZbEzuD4DwEJxwPqhv3QULlRj8KYTAnNsXxmfuUXFCxZmO6CF2gM/y+ugBSAQhrqaJL3M+oe4owdWunaHM6beqA==} + /@typescript-eslint/types@6.21.0: + resolution: {integrity: sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==} engines: {node: ^16.0.0 || >=18.0.0} + dev: true /@typescript-eslint/typescript-estree@5.62.0(typescript@4.9.5): resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} @@ -1848,15 +2354,15 @@ packages: debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 - semver: 7.5.4 + semver: 7.6.0 tsutils: 3.21.0(typescript@4.9.5) typescript: 4.9.5 transitivePeerDependencies: - supports-color dev: false - /@typescript-eslint/typescript-estree@6.11.0(typescript@5.2.2): - resolution: {integrity: sha512-Aezzv1o2tWJwvZhedzvD5Yv7+Lpu1by/U1LZ5gLc4tCx8jUmuSCMioPFRjliN/6SJIvY6HpTtJIWubKuYYYesQ==} + /@typescript-eslint/typescript-estree@6.21.0(typescript@5.4.3): + resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: typescript: '*' @@ -1864,16 +2370,18 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 6.11.0 - '@typescript-eslint/visitor-keys': 6.11.0 + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/visitor-keys': 6.21.0 debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 - semver: 7.5.4 - ts-api-utils: 1.0.3(typescript@5.2.2) - typescript: 5.2.2 + minimatch: 9.0.3 + semver: 7.6.0 + ts-api-utils: 1.3.0(typescript@5.4.3) + typescript: 5.4.3 transitivePeerDependencies: - supports-color + dev: true /@typescript-eslint/visitor-keys@5.62.0: resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} @@ -1883,12 +2391,13 @@ packages: eslint-visitor-keys: 3.4.3 dev: false - /@typescript-eslint/visitor-keys@6.11.0: - resolution: {integrity: sha512-+SUN/W7WjBr05uRxPggJPSzyB8zUpaYo2hByKasWbqr3PM8AXfZt8UHdNpBS1v9SA62qnSSMF3380SwDqqprgQ==} + /@typescript-eslint/visitor-keys@6.21.0: + resolution: {integrity: sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 6.11.0 + '@typescript-eslint/types': 6.21.0 eslint-visitor-keys: 3.4.3 + dev: true /@ungap/structured-clone@1.2.0: resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} @@ -1897,7 +2406,7 @@ packages: resolution: {integrity: sha512-cpPSR0XJAJs4Ddz9nq3tINlPS5aLfWVCqhhtHnXt4p7qr5+/Znlt1Es736poB/9rnl1hAHrOsOvVj46NEXcVqA==} engines: {node: '>=16.0.0'} dependencies: - '@upstash/redis': 1.25.1 + '@upstash/redis': 1.29.0 dev: false /@upstash/ratelimit@0.4.4: @@ -1918,14 +2427,46 @@ packages: crypto-js: 4.2.0 dev: false - /@vercel/analytics@1.1.1: - resolution: {integrity: sha512-+NqgNmSabg3IFfxYhrWCfB/H+RCUOCR5ExRudNG2+pcRehq628DJB5e1u1xqwpLtn4pAYii4D98w7kofORAGQA==} + /@upstash/redis@1.29.0: + resolution: {integrity: sha512-kbO5fgMAeUzErnA/SOtaSbAa0dguYhhBT4MZHJ1O8gVl4iK754aC9+rIYY5hsp4nlxeCGfnIDkWpof991c9jjA==} + dependencies: + crypto-js: 4.2.0 + dev: false + + /@vercel/analytics@1.2.2(next@13.4.20-canary.15)(react@18.2.0): + resolution: {integrity: sha512-X0rctVWkQV1e5Y300ehVNqpOfSOufo7ieA5PIdna8yX/U7Vjz0GFsGf4qvAhxV02uQ2CVt7GYcrFfddXXK2Y4A==} + peerDependencies: + next: '>= 13' + react: ^18 || ^19 + peerDependenciesMeta: + next: + optional: true + react: + optional: true + dependencies: + next: 13.4.20-canary.15(react-dom@18.2.0)(react@18.2.0) + react: 18.2.0 + server-only: 0.0.1 + dev: false + + /@vercel/analytics@1.2.2(next@14.0.2)(react@18.2.0): + resolution: {integrity: sha512-X0rctVWkQV1e5Y300ehVNqpOfSOufo7ieA5PIdna8yX/U7Vjz0GFsGf4qvAhxV02uQ2CVt7GYcrFfddXXK2Y4A==} + peerDependencies: + next: '>= 13' + react: ^18 || ^19 + peerDependenciesMeta: + next: + optional: true + react: + optional: true dependencies: + next: 14.0.2(react-dom@18.2.0)(react@18.2.0) + react: 18.2.0 server-only: 0.0.1 dev: false - /@vercel/blob@0.15.0: - resolution: {integrity: sha512-bWTuln4nkMG7APvcqIA2y5YCYKnmpUdzoITRdJOpDVeRSVoyVFwYOZleb/bj7UWDGfRN7P2JJ2mMMQ2nrpysEQ==} + /@vercel/blob@0.15.1: + resolution: {integrity: sha512-Wo7VU9/tM8kkv7krvxGoDeu/Li0h7PYR/TB1TEiyJZzACruA0jWqj44OGokJQCYN3ZvV5tXHpTAN6pImIBCrUw==} engines: {node: '>=16.14'} dependencies: jest-environment-jsdom: 29.7.0 @@ -1957,11 +2498,11 @@ packages: '@upstash/redis': 1.24.3 dev: false - /@vercel/kv@1.0.0: - resolution: {integrity: sha512-StouXunmEqUfKE+1joSYfELWEEnI1MhTnzUdarHtv6H18RAm3cf5u5g9ElvA1DJNHcrMT6g5yVAhZcYRbk6lvg==} + /@vercel/kv@1.0.1: + resolution: {integrity: sha512-uTKddsqVYS2GRAM/QMNNXCTuw9N742mLoGRXoNDcyECaxEXvIHG0dEY+ZnYISV4Vz534VwJO+64fd9XeSggSKw==} engines: {node: '>=14.6'} dependencies: - '@upstash/redis': 1.24.3 + '@upstash/redis': 1.25.1 dev: false /@vercel/postgres@0.5.1: @@ -1974,114 +2515,105 @@ packages: ws: 8.14.2(bufferutil@4.0.8)(utf-8-validate@6.0.3) dev: false - /@vue/compiler-core@3.3.8: - resolution: {integrity: sha512-hN/NNBUECw8SusQvDSqqcVv6gWq8L6iAktUR0UF3vGu2OhzRqcOiAno0FmBJWwxhYEXRlQJT5XnoKsVq1WZx4g==} + /@vue/compiler-core@3.4.21: + resolution: {integrity: sha512-MjXawxZf2SbZszLPYxaFCjxfibYrzr3eYbKxwpLR9EQN+oaziSu3qKVbwBERj1IFIB8OLUewxB5m/BFzi613og==} dependencies: - '@babel/parser': 7.23.3 - '@vue/shared': 3.3.8 + '@babel/parser': 7.24.4 + '@vue/shared': 3.4.21 + entities: 4.5.0 estree-walker: 2.0.2 - source-map-js: 1.0.2 + source-map-js: 1.2.0 dev: false - /@vue/compiler-dom@3.3.8: - resolution: {integrity: sha512-+PPtv+p/nWDd0AvJu3w8HS0RIm/C6VGBIRe24b9hSyNWOAPEUosFZ5diwawwP8ip5sJ8n0Pe87TNNNHnvjs0FQ==} + /@vue/compiler-dom@3.4.21: + resolution: {integrity: sha512-IZC6FKowtT1sl0CR5DpXSiEB5ayw75oT2bma1BEhV7RRR1+cfwLrxc2Z8Zq/RGFzJ8w5r9QtCOvTjQgdn0IKmA==} dependencies: - '@vue/compiler-core': 3.3.8 - '@vue/shared': 3.3.8 + '@vue/compiler-core': 3.4.21 + '@vue/shared': 3.4.21 dev: false - /@vue/compiler-sfc@3.3.8: - resolution: {integrity: sha512-WMzbUrlTjfYF8joyT84HfwwXo+8WPALuPxhy+BZ6R4Aafls+jDBnSz8PDz60uFhuqFbl3HxRfxvDzrUf3THwpA==} + /@vue/compiler-sfc@3.4.21: + resolution: {integrity: sha512-me7epoTxYlY+2CUM7hy9PCDdpMPfIwrOvAXud2Upk10g4YLv9UBW7kL798TvMeDhPthkZ0CONNrK2GoeI1ODiQ==} dependencies: - '@babel/parser': 7.23.3 - '@vue/compiler-core': 3.3.8 - '@vue/compiler-dom': 3.3.8 - '@vue/compiler-ssr': 3.3.8 - '@vue/reactivity-transform': 3.3.8 - '@vue/shared': 3.3.8 + '@babel/parser': 7.24.4 + '@vue/compiler-core': 3.4.21 + '@vue/compiler-dom': 3.4.21 + '@vue/compiler-ssr': 3.4.21 + '@vue/shared': 3.4.21 estree-walker: 2.0.2 - magic-string: 0.30.5 - postcss: 8.4.31 - source-map-js: 1.0.2 - dev: false - - /@vue/compiler-ssr@3.3.8: - resolution: {integrity: sha512-hXCqQL/15kMVDBuoBYpUnSYT8doDNwsjvm3jTefnXr+ytn294ySnT8NlsFHmTgKNjwpuFy7XVV8yTeLtNl/P6w==} - dependencies: - '@vue/compiler-dom': 3.3.8 - '@vue/shared': 3.3.8 + magic-string: 0.30.9 + postcss: 8.4.38 + source-map-js: 1.2.0 dev: false - /@vue/reactivity-transform@3.3.8: - resolution: {integrity: sha512-49CvBzmZNtcHua0XJ7GdGifM8GOXoUMOX4dD40Y5DxI3R8OUhMlvf2nvgUAcPxaXiV5MQQ1Nwy09ADpnLQUqRw==} + /@vue/compiler-ssr@3.4.21: + resolution: {integrity: sha512-M5+9nI2lPpAsgXOGQobnIueVqc9sisBFexh5yMIMRAPYLa7+5wEJs8iqOZc1WAa9WQbx9GR2twgznU8LTIiZ4Q==} dependencies: - '@babel/parser': 7.23.3 - '@vue/compiler-core': 3.3.8 - '@vue/shared': 3.3.8 - estree-walker: 2.0.2 - magic-string: 0.30.5 + '@vue/compiler-dom': 3.4.21 + '@vue/shared': 3.4.21 dev: false - /@vue/reactivity@3.3.8: - resolution: {integrity: sha512-ctLWitmFBu6mtddPyOKpHg8+5ahouoTCRtmAHZAXmolDtuZXfjL2T3OJ6DL6ezBPQB1SmMnpzjiWjCiMYmpIuw==} + /@vue/reactivity@3.4.21: + resolution: {integrity: sha512-UhenImdc0L0/4ahGCyEzc/pZNwVgcglGy9HVzJ1Bq2Mm9qXOpP8RyNTjookw/gOCUlXSEtuZ2fUg5nrHcoqJcw==} dependencies: - '@vue/shared': 3.3.8 + '@vue/shared': 3.4.21 dev: false - /@vue/runtime-core@3.3.8: - resolution: {integrity: sha512-qurzOlb6q26KWQ/8IShHkMDOuJkQnQcTIp1sdP4I9MbCf9FJeGVRXJFr2mF+6bXh/3Zjr9TDgURXrsCr9bfjUw==} + /@vue/runtime-core@3.4.21: + resolution: {integrity: sha512-pQthsuYzE1XcGZznTKn73G0s14eCJcjaLvp3/DKeYWoFacD9glJoqlNBxt3W2c5S40t6CCcpPf+jG01N3ULyrA==} dependencies: - '@vue/reactivity': 3.3.8 - '@vue/shared': 3.3.8 + '@vue/reactivity': 3.4.21 + '@vue/shared': 3.4.21 dev: false - /@vue/runtime-dom@3.3.8: - resolution: {integrity: sha512-Noy5yM5UIf9UeFoowBVgghyGGPIDPy1Qlqt0yVsUdAVbqI8eeMSsTqBtauaEoT2UFXUk5S64aWVNJN4MJ2vRdA==} + /@vue/runtime-dom@3.4.21: + resolution: {integrity: sha512-gvf+C9cFpevsQxbkRBS1NpU8CqxKw0ebqMvLwcGQrNpx6gqRDodqKqA+A2VZZpQ9RpK2f9yfg8VbW/EpdFUOJw==} dependencies: - '@vue/runtime-core': 3.3.8 - '@vue/shared': 3.3.8 - csstype: 3.1.2 + '@vue/runtime-core': 3.4.21 + '@vue/shared': 3.4.21 + csstype: 3.1.3 dev: false - /@vue/server-renderer@3.3.8(vue@3.3.8): - resolution: {integrity: sha512-zVCUw7RFskvPuNlPn/8xISbrf0zTWsTSdYTsUTN1ERGGZGVnRxM2QZ3x1OR32+vwkkCm0IW6HmJ49IsPm7ilLg==} + /@vue/server-renderer@3.4.21(vue@3.4.21): + resolution: {integrity: sha512-aV1gXyKSN6Rz+6kZ6kr5+Ll14YzmIbeuWe7ryJl5muJ4uwSwY/aStXTixx76TwkZFJLm1aAlA/HSWEJ4EyiMkg==} peerDependencies: - vue: 3.3.8 + vue: 3.4.21 dependencies: - '@vue/compiler-ssr': 3.3.8 - '@vue/shared': 3.3.8 - vue: 3.3.8(typescript@5.2.2) + '@vue/compiler-ssr': 3.4.21 + '@vue/shared': 3.4.21 + vue: 3.4.21(typescript@5.4.3) dev: false - /@vue/shared@3.3.8: - resolution: {integrity: sha512-8PGwybFwM4x8pcfgqEQFy70NaQxASvOC5DJwLQfpArw1UDfUXrJkdxD3BhVTMS+0Lef/TU7YO0Jvr0jJY8T+mw==} + /@vue/shared@3.4.21: + resolution: {integrity: sha512-PuJe7vDIi6VYSinuEbUIQgMIRZGgM8e4R+G+/dQTk0X1NEdvgvvgv7m+rfmDH1gZzyA1OjjoWskvHlfRNfQf3g==} dev: false /abab@2.0.6: resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} + deprecated: Use your platform's native atob() and btoa() methods instead dev: false /acorn-globals@7.0.1: resolution: {integrity: sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==} dependencies: - acorn: 8.11.2 - acorn-walk: 8.3.0 + acorn: 8.11.3 + acorn-walk: 8.3.2 dev: false - /acorn-jsx@5.3.2(acorn@8.11.2): + /acorn-jsx@5.3.2(acorn@8.11.3): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - acorn: 8.11.2 + acorn: 8.11.3 - /acorn-walk@8.3.0: - resolution: {integrity: sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA==} + /acorn-walk@8.3.2: + resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==} engines: {node: '>=0.4.0'} dev: false - /acorn@8.11.2: - resolution: {integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==} + /acorn@8.11.3: + resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} engines: {node: '>=0.4.0'} hasBin: true @@ -2094,8 +2626,8 @@ packages: - supports-color dev: false - /ai@2.2.22(react@18.2.0)(solid-js@1.8.5)(svelte@4.2.3)(vue@3.3.8): - resolution: {integrity: sha512-H1TXjX3uGYU4bb8/GUTaY7BJ6YiMJDpp8WpmqwdVLmAh0+HufB7r27vCX0R4XXzJhdRaYp0ex6s9QvqkfvVA2A==} + /ai@2.2.37(react@18.2.0)(solid-js@1.8.16)(svelte@4.2.12)(vue@3.4.21): + resolution: {integrity: sha512-JIYm5N1muGVqBqWnvkt29FmXhESoO5TcDxw74OE41SsM+uIou6NPDDs0XWb/ABcd1gmp6k5zym64KWMPM2xm0A==} engines: {node: '>=14.6'} peerDependencies: react: ^18.2.0 @@ -2115,14 +2647,14 @@ packages: eventsource-parser: 1.0.0 nanoid: 3.3.6 react: 18.2.0 - solid-js: 1.8.5 - solid-swr-store: 0.10.7(solid-js@1.8.5)(swr-store@0.10.6) - sswr: 2.0.0(svelte@4.2.3) - svelte: 4.2.3 + solid-js: 1.8.16 + solid-swr-store: 0.10.7(solid-js@1.8.16)(swr-store@0.10.6) + sswr: 2.0.0(svelte@4.2.12) + svelte: 4.2.12 swr: 2.2.0(react@18.2.0) swr-store: 0.10.6 - swrv: 1.0.4(vue@3.3.8) - vue: 3.3.8(typescript@5.2.2) + swrv: 1.0.4(vue@3.4.21) + vue: 3.4.21(typescript@5.4.3) dev: false /ajv@6.12.6: @@ -2137,6 +2669,10 @@ packages: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} + /ansi-regex@6.0.1: + resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} + engines: {node: '>=12'} + /ansi-styles@3.2.1: resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} engines: {node: '>=4'} @@ -2155,6 +2691,10 @@ packages: engines: {node: '>=10'} dev: false + /ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + /any-promise@1.3.0: resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} @@ -2177,8 +2717,8 @@ packages: /argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - /aria-hidden@1.2.3: - resolution: {integrity: sha512-xcLxITLe2HYa1cnYnwCjkOO1PqUHQpozB8x9AR0OgWN2woOBi5kSDVxKfd0b7sb1hw5qFeJhXm9H1nu3xSfLeQ==} + /aria-hidden@1.2.4: + resolution: {integrity: sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==} engines: {node: '>=10'} dependencies: tslib: 2.6.2 @@ -2189,74 +2729,97 @@ packages: dependencies: dequal: 2.0.3 - /array-buffer-byte-length@1.0.0: - resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} + /array-buffer-byte-length@1.0.1: + resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 - is-array-buffer: 3.0.2 + call-bind: 1.0.7 + is-array-buffer: 3.0.4 - /array-includes@3.1.7: - resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==} + /array-includes@3.1.8: + resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 - get-intrinsic: 1.2.2 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 + get-intrinsic: 1.2.4 is-string: 1.0.7 /array-union@2.1.0: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} - /array.prototype.findlastindex@1.2.3: - resolution: {integrity: sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==} + /array.prototype.findlast@1.2.5: + resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + es-shim-unscopables: 1.0.2 + + /array.prototype.findlastindex@1.2.5: + resolution: {integrity: sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-abstract: 1.23.3 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 es-shim-unscopables: 1.0.2 - get-intrinsic: 1.2.2 /array.prototype.flat@1.3.2: resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-abstract: 1.23.3 es-shim-unscopables: 1.0.2 /array.prototype.flatmap@1.3.2: resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-shim-unscopables: 1.0.2 + + /array.prototype.toreversed@1.1.2: + resolution: {integrity: sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==} + dependencies: + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-abstract: 1.23.3 es-shim-unscopables: 1.0.2 - /array.prototype.tosorted@1.1.2: - resolution: {integrity: sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg==} + /array.prototype.tosorted@1.1.3: + resolution: {integrity: sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg==} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-abstract: 1.23.3 + es-errors: 1.3.0 es-shim-unscopables: 1.0.2 - get-intrinsic: 1.2.2 - /arraybuffer.prototype.slice@1.0.2: - resolution: {integrity: sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==} + /arraybuffer.prototype.slice@1.0.3: + resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} engines: {node: '>= 0.4'} dependencies: - array-buffer-byte-length: 1.0.0 - call-bind: 1.0.5 + array-buffer-byte-length: 1.0.1 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 - get-intrinsic: 1.2.2 - is-array-buffer: 3.0.2 - is-shared-array-buffer: 1.0.2 + es-abstract: 1.23.3 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + is-array-buffer: 3.0.4 + is-shared-array-buffer: 1.0.3 /ast-types-flow@0.0.8: resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} @@ -2266,34 +2829,31 @@ packages: hasBin: true dev: false - /asynciterator.prototype@1.0.0: - resolution: {integrity: sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==} - dependencies: - has-symbols: 1.0.3 - /asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} dev: false - /autoprefixer@10.4.16(postcss@8.4.31): - resolution: {integrity: sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==} + /autoprefixer@10.4.19(postcss@8.4.38): + resolution: {integrity: sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==} engines: {node: ^10 || ^12 || >=14} hasBin: true peerDependencies: postcss: ^8.1.0 dependencies: - browserslist: 4.22.1 - caniuse-lite: 1.0.30001561 + browserslist: 4.23.0 + caniuse-lite: 1.0.30001605 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.0.0 - postcss: 8.4.31 + postcss: 8.4.38 postcss-value-parser: 4.2.0 dev: true - /available-typed-arrays@1.0.5: - resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} + /available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} + dependencies: + possible-typed-array-names: 1.0.0 /axe-core@4.7.0: resolution: {integrity: sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==} @@ -2304,8 +2864,14 @@ packages: dependencies: dequal: 2.0.3 - /b4a@1.6.4: - resolution: {integrity: sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw==} + /axobject-query@4.0.0: + resolution: {integrity: sha512-+60uv1hiVFhHZeO+Lz0RYzsVHy5Wr1ayX0mwda9KPDVLNJgZ1T9Ny7VmFbLDzxsH0D87I86vgj3gFrjTJUYznw==} + dependencies: + dequal: 2.0.3 + dev: false + + /b4a@1.6.6: + resolution: {integrity: sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg==} dev: false /bail@2.0.2: @@ -2315,12 +2881,42 @@ packages: /balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + /bare-events@2.2.2: + resolution: {integrity: sha512-h7z00dWdG0PYOQEvChhOSWvOfkIKsdZGkWr083FgN/HyoQuebSew/cgirYqh9SCuy/hRvxc5Vy6Fw8xAmYHLkQ==} + requiresBuild: true + dev: false + optional: true + + /bare-fs@2.2.3: + resolution: {integrity: sha512-amG72llr9pstfXOBOHve1WjiuKKAMnebcmMbPWDZ7BCevAoJLpugjuAPRsDINEyjT0a6tbaVx3DctkXIRbLuJw==} + requiresBuild: true + dependencies: + bare-events: 2.2.2 + bare-path: 2.1.1 + streamx: 2.16.1 + dev: false + optional: true + + /bare-os@2.2.1: + resolution: {integrity: sha512-OwPyHgBBMkhC29Hl3O4/YfxW9n7mdTr2+SsO29XBWKKJsbgj3mnorDB80r5TiCQgQstgE5ga1qNYrpes6NvX2w==} + requiresBuild: true + dev: false + optional: true + + /bare-path@2.1.1: + resolution: {integrity: sha512-OHM+iwRDRMDBsSW7kl3dO62JyHdBKO3B25FB9vNQBPcGHMo4+eA8Yj41Lfbk3pS/seDY+siNge0LdRTulAau/A==} + requiresBuild: true + dependencies: + bare-os: 2.2.1 + dev: false + optional: true + /base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} dev: false - /binary-extensions@2.2.0: - resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + /binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} /bl@4.1.0: @@ -2337,21 +2933,30 @@ packages: balanced-match: 1.0.2 concat-map: 0.0.1 + /brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + dependencies: + balanced-match: 1.0.2 + /braces@3.0.2: resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} engines: {node: '>=8'} dependencies: fill-range: 7.0.1 - /browserslist@4.22.1: - resolution: {integrity: sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==} + /browserslist@4.23.0: + resolution: {integrity: sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001561 - electron-to-chromium: 1.4.582 - node-releases: 2.0.13 - update-browserslist-db: 1.0.13(browserslist@4.22.1) + caniuse-lite: 1.0.30001605 + electron-to-chromium: 1.4.726 + node-releases: 2.0.14 + update-browserslist-db: 1.0.13(browserslist@4.23.0) + dev: true + + /buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} dev: true /buffer@5.7.1: @@ -2366,7 +2971,7 @@ packages: engines: {node: '>=6.14.2'} requiresBuild: true dependencies: - node-gyp-build: 4.6.1 + node-gyp-build: 4.8.0 dev: false /busboy@1.6.0: @@ -2376,12 +2981,15 @@ packages: streamsearch: 1.1.0 dev: false - /call-bind@1.0.5: - resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==} + /call-bind@1.0.7: + resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} + engines: {node: '>= 0.4'} dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 function-bind: 1.1.2 - get-intrinsic: 1.2.2 - set-function-length: 1.1.1 + get-intrinsic: 1.2.4 + set-function-length: 1.2.2 /callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} @@ -2391,13 +2999,13 @@ packages: resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} engines: {node: '>= 6'} - /caniuse-lite@1.0.30001561: - resolution: {integrity: sha512-NTt0DNoKe958Q0BE0j0c1V9jbUzhBxHIEJy7asmGrpE0yG63KTV7PLHPnK2E1O9RsQrQ081I3NLuXGS6zht3cw==} + /camelcase@7.0.1: + resolution: {integrity: sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==} + engines: {node: '>=14.16'} + dev: true - /case-anything@2.1.13: - resolution: {integrity: sha512-zlOQ80VrQ2Ue+ymH5OuM/DlDq64mEm+B9UTdHULv5osUMD6HalNTblf2b1u/m6QecjsnOkBpqVZ+XPwIVsy7Ng==} - engines: {node: '>=12.13'} - dev: false + /caniuse-lite@1.0.30001605: + resolution: {integrity: sha512-nXwGlFWo34uliI9z3n6Qc0wZaf7zaZWA1CPZ169La5mV3I/gem7bst0vr5XQH5TJXZIMfDeZyOrZnSlVzKxxHQ==} /ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} @@ -2419,6 +3027,11 @@ packages: ansi-styles: 4.3.0 supports-color: 7.2.0 + /chalk@5.3.0: + resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + dev: true + /character-entities-html4@2.1.0: resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} dev: false @@ -2435,8 +3048,8 @@ packages: resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} dev: false - /chokidar@3.5.3: - resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + /chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} dependencies: anymatch: 3.1.3 @@ -2458,9 +3071,16 @@ packages: engines: {node: '>=8'} dev: false - /classnames@2.3.2: - resolution: {integrity: sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==} - dev: false + /cli-color@2.0.4: + resolution: {integrity: sha512-zlnpg0jNcibNrO7GG9IeHH7maWFeCz+Ja1wx/7tZNU5ASSSSZ+/qZciM0/LHCYxSdqv5h2sdbQ/PXYdOuetXvA==} + engines: {node: '>=0.10'} + dependencies: + d: 1.0.2 + es5-ext: 0.10.64 + es6-iterator: 2.0.3 + memoizee: 0.4.15 + timers-ext: 0.1.7 + dev: true /client-only@0.0.1: resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} @@ -2471,8 +3091,8 @@ packages: engines: {node: '>=6'} dev: false - /clsx@2.0.0: - resolution: {integrity: sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==} + /clsx@2.1.0: + resolution: {integrity: sha512-m3iNNWpd9rl3jvvcBnu70ylMdrXt8Vlq4HYadnU5fwcOtvkSQWPmj7amUcDT2qYI7risszBjI5AUIUox9D16pg==} engines: {node: '>=6'} dev: false @@ -2481,7 +3101,7 @@ packages: dependencies: '@jridgewell/sourcemap-codec': 1.4.15 '@types/estree': 1.0.5 - acorn: 8.11.2 + acorn: 8.11.3 estree-walker: 3.0.3 periscopic: 3.1.0 dev: false @@ -2535,14 +3155,31 @@ packages: resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} engines: {node: '>= 6'} + /commander@9.5.0: + resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} + engines: {node: ^12.20.0 || >=14} + dev: true + /concat-map@0.0.1: - resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} /cookie@0.5.0: resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} engines: {node: '>= 0.6'} dev: false + /cookie@0.6.0: + resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} + engines: {node: '>= 0.6'} + dev: false + + /copy-anything@3.0.5: + resolution: {integrity: sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==} + engines: {node: '>=12.13'} + dependencies: + is-what: 4.1.16 + dev: true + /crelt@1.0.6: resolution: {integrity: sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==} dev: false @@ -2564,7 +3201,7 @@ packages: engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} dependencies: mdn-data: 2.0.30 - source-map-js: 1.0.2 + source-map-js: 1.2.0 dev: false /cssesc@3.0.0: @@ -2587,8 +3224,8 @@ packages: cssom: 0.3.8 dev: false - /csstype@3.1.2: - resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==} + /csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} /d3-array@3.2.4: resolution: {integrity: sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==} @@ -2661,13 +3298,17 @@ packages: engines: {node: '>=12'} dev: false + /d@1.0.2: + resolution: {integrity: sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==} + engines: {node: '>=0.12'} + dependencies: + es5-ext: 0.10.64 + type: 2.7.2 + dev: true + /damerau-levenshtein@1.0.8: resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} - /dash-get@1.0.2: - resolution: {integrity: sha512-4FbVrHDwfOASx7uQVxeiCTo7ggSdYZbqs8lH+WU6ViypPlDbe9y6IP5VVUDQBv9DcnyaiPT5XT0UWHgJ64zLeQ==} - dev: false - /data-urls@3.0.2: resolution: {integrity: sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==} engines: {node: '>=12'} @@ -2677,11 +3318,35 @@ packages: whatwg-url: 11.0.0 dev: false + /data-view-buffer@1.0.1: + resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + + /data-view-byte-length@1.0.1: + resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + + /data-view-byte-offset@1.0.0: + resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + /date-fns@2.30.0: resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==} engines: {node: '>=0.11'} dependencies: - '@babel/runtime': 7.23.2 + '@babel/runtime': 7.24.4 dev: false /debug@3.2.7: @@ -2734,25 +3399,20 @@ packages: /deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - /deepmerge@4.3.1: - resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} - engines: {node: '>=0.10.0'} - dev: false - - /define-data-property@1.1.1: - resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==} + /define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} engines: {node: '>= 0.4'} dependencies: - get-intrinsic: 1.2.2 + es-define-property: 1.0.0 + es-errors: 1.3.0 gopd: 1.0.1 - has-property-descriptors: 1.0.1 /define-properties@1.2.1: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} dependencies: - define-data-property: 1.1.1 - has-property-descriptors: 1.0.1 + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 object-keys: 1.1.1 /delayed-stream@1.0.0: @@ -2764,8 +3424,8 @@ packages: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} - /detect-libc@2.0.2: - resolution: {integrity: sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==} + /detect-libc@2.0.3: + resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} engines: {node: '>=8'} dev: false @@ -2776,11 +3436,17 @@ packages: /didyoumean@1.2.2: resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} - /diff@5.1.0: - resolution: {integrity: sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==} + /diff@5.2.0: + resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==} engines: {node: '>=0.3.1'} dev: false + /difflib@0.2.4: + resolution: {integrity: sha512-9YVwmMb0wQHQNr5J9m6BSj6fk4pfGITGQOOs+D9Fl+INODWFOfvhIU1hNv6GgR1RBoC/9NJcwu77zShxV0kT7w==} + dependencies: + heap: 0.2.7 + dev: true + /dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} @@ -2802,30 +3468,146 @@ packages: dependencies: esutils: 2.0.3 - /dom-helpers@3.4.0: - resolution: {integrity: sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==} - dependencies: - '@babel/runtime': 7.23.2 - dev: false - /dom-helpers@5.2.1: resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==} dependencies: - '@babel/runtime': 7.23.2 - csstype: 3.1.2 + '@babel/runtime': 7.24.4 + csstype: 3.1.3 dev: false /domexception@4.0.0: resolution: {integrity: sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==} engines: {node: '>=12'} + deprecated: Use your platform's native DOMException instead dependencies: webidl-conversions: 7.0.0 dev: false - /electron-to-chromium@1.4.582: - resolution: {integrity: sha512-89o0MGoocwYbzqUUjc+VNpeOFSOK9nIdC5wY4N+PVUarUK0MtjyTjks75AZS2bW4Kl8MdewdFsWaH0jLy+JNoA==} + /dreamopt@0.8.0: + resolution: {integrity: sha512-vyJTp8+mC+G+5dfgsY+r3ckxlz+QMX40VjPQsZc5gxVAxLmi64TBoVkP54A/pRAXMXsbu2GMMBrZPxNv23waMg==} + engines: {node: '>=0.4.0'} + dependencies: + wordwrap: 1.0.0 + dev: true + + /drizzle-kit@0.20.14: + resolution: {integrity: sha512-0fHv3YIEaUcSVPSGyaaBfOi9bmpajjhbJNdPsRMIUvYdLVxBu9eGjH8mRc3Qk7HVmEidFc/lhG1YyJhoXrn5yA==} + hasBin: true + dependencies: + '@drizzle-team/studio': 0.0.39 + '@esbuild-kit/esm-loader': 2.6.5 + camelcase: 7.0.1 + chalk: 5.3.0 + commander: 9.5.0 + env-paths: 3.0.0 + esbuild: 0.19.12 + esbuild-register: 3.5.0(esbuild@0.19.12) + glob: 8.1.0 + hanji: 0.0.5 + json-diff: 0.9.0 + minimatch: 7.4.6 + semver: 7.6.0 + zod: 3.22.4 + transitivePeerDependencies: + - supports-color + dev: true + + /drizzle-orm@0.30.7(@types/react@18.2.74)(@vercel/postgres@0.5.1)(pg@8.11.5)(react@18.2.0): + resolution: {integrity: sha512-9qefSZQlu2fO2qv24piHyWFWcxcOY15//0v4j8qomMqaxzipNoG+fUBrQ7Ftk7PY7APRbRdn/nkEXWxiI4a8mw==} + peerDependencies: + '@aws-sdk/client-rds-data': '>=3' + '@cloudflare/workers-types': '>=3' + '@electric-sql/pglite': '>=0.1.1' + '@libsql/client': '*' + '@neondatabase/serverless': '>=0.1' + '@op-engineering/op-sqlite': '>=2' + '@opentelemetry/api': ^1.4.1 + '@planetscale/database': '>=1' + '@types/better-sqlite3': '*' + '@types/pg': '*' + '@types/react': '>=18' + '@types/sql.js': '*' + '@vercel/postgres': '>=0.8.0' + '@xata.io/client': '*' + better-sqlite3: '>=7' + bun-types: '*' + expo-sqlite: '>=13.2.0' + knex: '*' + kysely: '*' + mysql2: '>=2' + pg: '>=8' + postgres: '>=3' + react: '>=18' + sql.js: '>=1' + sqlite3: '>=5' + peerDependenciesMeta: + '@aws-sdk/client-rds-data': + optional: true + '@cloudflare/workers-types': + optional: true + '@electric-sql/pglite': + optional: true + '@libsql/client': + optional: true + '@neondatabase/serverless': + optional: true + '@op-engineering/op-sqlite': + optional: true + '@opentelemetry/api': + optional: true + '@planetscale/database': + optional: true + '@types/better-sqlite3': + optional: true + '@types/pg': + optional: true + '@types/react': + optional: true + '@types/sql.js': + optional: true + '@vercel/postgres': + optional: true + '@xata.io/client': + optional: true + better-sqlite3: + optional: true + bun-types: + optional: true + expo-sqlite: + optional: true + knex: + optional: true + kysely: + optional: true + mysql2: + optional: true + pg: + optional: true + postgres: + optional: true + react: + optional: true + sql.js: + optional: true + sqlite3: + optional: true + dependencies: + '@types/react': 18.2.74 + '@vercel/postgres': 0.5.1 + pg: 8.11.5 + react: 18.2.0 + dev: false + + /eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + + /electron-to-chromium@1.4.726: + resolution: {integrity: sha512-xtjfBXn53RORwkbyKvDfTajtnTp0OJoPOIBzXvkNbb7+YYvCHJflba3L7Txyx/6Fov3ov2bGPr/n5MTixmPhdQ==} dev: true + /emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + /emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} @@ -2835,97 +3617,121 @@ packages: once: 1.4.0 dev: false - /enhanced-resolve@5.15.0: - resolution: {integrity: sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==} + /enhanced-resolve@5.16.0: + resolution: {integrity: sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==} engines: {node: '>=10.13.0'} dependencies: graceful-fs: 4.2.11 tapable: 2.2.1 - /entities@3.0.1: - resolution: {integrity: sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==} - engines: {node: '>=0.12'} - dev: false - /entities@4.5.0: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} dev: false - /es-abstract@1.22.3: - resolution: {integrity: sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==} + /env-paths@3.0.0: + resolution: {integrity: sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true + + /es-abstract@1.23.3: + resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} engines: {node: '>= 0.4'} dependencies: - array-buffer-byte-length: 1.0.0 - arraybuffer.prototype.slice: 1.0.2 - available-typed-arrays: 1.0.5 - call-bind: 1.0.5 - es-set-tostringtag: 2.0.2 + array-buffer-byte-length: 1.0.1 + arraybuffer.prototype.slice: 1.0.3 + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + data-view-buffer: 1.0.1 + data-view-byte-length: 1.0.1 + data-view-byte-offset: 1.0.0 + es-define-property: 1.0.0 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + es-set-tostringtag: 2.0.3 es-to-primitive: 1.2.1 function.prototype.name: 1.1.6 - get-intrinsic: 1.2.2 - get-symbol-description: 1.0.0 + get-intrinsic: 1.2.4 + get-symbol-description: 1.0.2 globalthis: 1.0.3 gopd: 1.0.1 - has-property-descriptors: 1.0.1 - has-proto: 1.0.1 + has-property-descriptors: 1.0.2 + has-proto: 1.0.3 has-symbols: 1.0.3 - hasown: 2.0.0 - internal-slot: 1.0.6 - is-array-buffer: 3.0.2 + hasown: 2.0.2 + internal-slot: 1.0.7 + is-array-buffer: 3.0.4 is-callable: 1.2.7 - is-negative-zero: 2.0.2 + is-data-view: 1.0.1 + is-negative-zero: 2.0.3 is-regex: 1.1.4 - is-shared-array-buffer: 1.0.2 + is-shared-array-buffer: 1.0.3 is-string: 1.0.7 - is-typed-array: 1.1.12 + is-typed-array: 1.1.13 is-weakref: 1.0.2 object-inspect: 1.13.1 object-keys: 1.1.1 - object.assign: 4.1.4 - regexp.prototype.flags: 1.5.1 - safe-array-concat: 1.0.1 - safe-regex-test: 1.0.0 - string.prototype.trim: 1.2.8 - string.prototype.trimend: 1.0.7 - string.prototype.trimstart: 1.0.7 - typed-array-buffer: 1.0.0 - typed-array-byte-length: 1.0.0 - typed-array-byte-offset: 1.0.0 - typed-array-length: 1.0.4 + object.assign: 4.1.5 + regexp.prototype.flags: 1.5.2 + safe-array-concat: 1.1.2 + safe-regex-test: 1.0.3 + string.prototype.trim: 1.2.9 + string.prototype.trimend: 1.0.8 + string.prototype.trimstart: 1.0.8 + typed-array-buffer: 1.0.2 + typed-array-byte-length: 1.0.1 + typed-array-byte-offset: 1.0.2 + typed-array-length: 1.0.6 unbox-primitive: 1.0.2 - which-typed-array: 1.1.13 + which-typed-array: 1.1.15 - /es-iterator-helpers@1.0.15: - resolution: {integrity: sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==} + /es-define-property@1.0.0: + resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.4 + + /es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + /es-iterator-helpers@1.0.18: + resolution: {integrity: sha512-scxAJaewsahbqTYrGKJihhViaM6DDZDDoucfvzNbK0pOren1g/daDQ3IAhzn+1G14rBG7w+i5N+qul60++zlKA==} + engines: {node: '>= 0.4'} dependencies: - asynciterator.prototype: 1.0.0 - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 - es-set-tostringtag: 2.0.2 + es-abstract: 1.23.3 + es-errors: 1.3.0 + es-set-tostringtag: 2.0.3 function-bind: 1.1.2 - get-intrinsic: 1.2.2 + get-intrinsic: 1.2.4 globalthis: 1.0.3 - has-property-descriptors: 1.0.1 - has-proto: 1.0.1 + has-property-descriptors: 1.0.2 + has-proto: 1.0.3 has-symbols: 1.0.3 - internal-slot: 1.0.6 + internal-slot: 1.0.7 iterator.prototype: 1.1.2 - safe-array-concat: 1.0.1 + safe-array-concat: 1.1.2 + + /es-object-atoms@1.0.0: + resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} + engines: {node: '>= 0.4'} + dependencies: + es-errors: 1.3.0 - /es-set-tostringtag@2.0.2: - resolution: {integrity: sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==} + /es-set-tostringtag@2.0.3: + resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} engines: {node: '>= 0.4'} dependencies: - get-intrinsic: 1.2.2 - has-tostringtag: 1.0.0 - hasown: 2.0.0 + get-intrinsic: 1.2.4 + has-tostringtag: 1.0.2 + hasown: 2.0.2 /es-shim-unscopables@1.0.2: resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} dependencies: - hasown: 2.0.0 + hasown: 2.0.2 /es-to-primitive@1.2.1: resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} @@ -2935,8 +3741,116 @@ packages: is-date-object: 1.0.5 is-symbol: 1.0.4 - /escalade@3.1.1: - resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} + /es5-ext@0.10.64: + resolution: {integrity: sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==} + engines: {node: '>=0.10'} + requiresBuild: true + dependencies: + es6-iterator: 2.0.3 + es6-symbol: 3.1.4 + esniff: 2.0.1 + next-tick: 1.1.0 + dev: true + + /es6-iterator@2.0.3: + resolution: {integrity: sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==} + dependencies: + d: 1.0.2 + es5-ext: 0.10.64 + es6-symbol: 3.1.4 + dev: true + + /es6-symbol@3.1.4: + resolution: {integrity: sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==} + engines: {node: '>=0.12'} + dependencies: + d: 1.0.2 + ext: 1.7.0 + dev: true + + /es6-weak-map@2.0.3: + resolution: {integrity: sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==} + dependencies: + d: 1.0.2 + es5-ext: 0.10.64 + es6-iterator: 2.0.3 + es6-symbol: 3.1.4 + dev: true + + /esbuild-register@3.5.0(esbuild@0.19.12): + resolution: {integrity: sha512-+4G/XmakeBAsvJuDugJvtyF1x+XJT4FMocynNpxrvEBViirpfUn2PgNpCHedfWhF4WokNsO/OvMKrmJOIJsI5A==} + peerDependencies: + esbuild: '>=0.12 <1' + dependencies: + debug: 4.3.4 + esbuild: 0.19.12 + transitivePeerDependencies: + - supports-color + dev: true + + /esbuild@0.18.20: + resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/android-arm': 0.18.20 + '@esbuild/android-arm64': 0.18.20 + '@esbuild/android-x64': 0.18.20 + '@esbuild/darwin-arm64': 0.18.20 + '@esbuild/darwin-x64': 0.18.20 + '@esbuild/freebsd-arm64': 0.18.20 + '@esbuild/freebsd-x64': 0.18.20 + '@esbuild/linux-arm': 0.18.20 + '@esbuild/linux-arm64': 0.18.20 + '@esbuild/linux-ia32': 0.18.20 + '@esbuild/linux-loong64': 0.18.20 + '@esbuild/linux-mips64el': 0.18.20 + '@esbuild/linux-ppc64': 0.18.20 + '@esbuild/linux-riscv64': 0.18.20 + '@esbuild/linux-s390x': 0.18.20 + '@esbuild/linux-x64': 0.18.20 + '@esbuild/netbsd-x64': 0.18.20 + '@esbuild/openbsd-x64': 0.18.20 + '@esbuild/sunos-x64': 0.18.20 + '@esbuild/win32-arm64': 0.18.20 + '@esbuild/win32-ia32': 0.18.20 + '@esbuild/win32-x64': 0.18.20 + dev: true + + /esbuild@0.19.12: + resolution: {integrity: sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/aix-ppc64': 0.19.12 + '@esbuild/android-arm': 0.19.12 + '@esbuild/android-arm64': 0.19.12 + '@esbuild/android-x64': 0.19.12 + '@esbuild/darwin-arm64': 0.19.12 + '@esbuild/darwin-x64': 0.19.12 + '@esbuild/freebsd-arm64': 0.19.12 + '@esbuild/freebsd-x64': 0.19.12 + '@esbuild/linux-arm': 0.19.12 + '@esbuild/linux-arm64': 0.19.12 + '@esbuild/linux-ia32': 0.19.12 + '@esbuild/linux-loong64': 0.19.12 + '@esbuild/linux-mips64el': 0.19.12 + '@esbuild/linux-ppc64': 0.19.12 + '@esbuild/linux-riscv64': 0.19.12 + '@esbuild/linux-s390x': 0.19.12 + '@esbuild/linux-x64': 0.19.12 + '@esbuild/netbsd-x64': 0.19.12 + '@esbuild/openbsd-x64': 0.19.12 + '@esbuild/sunos-x64': 0.19.12 + '@esbuild/win32-arm64': 0.19.12 + '@esbuild/win32-ia32': 0.19.12 + '@esbuild/win32-x64': 0.19.12 + dev: true + + /escalade@3.1.2: + resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} engines: {node: '>=6'} dev: true @@ -2976,14 +3890,14 @@ packages: optional: true dependencies: '@next/eslint-plugin-next': 13.2.4 - '@rushstack/eslint-patch': 1.5.1 + '@rushstack/eslint-patch': 1.10.1 '@typescript-eslint/parser': 5.62.0(eslint@8.36.0)(typescript@4.9.5) eslint: 8.36.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.0)(eslint@8.36.0) - eslint-plugin-import: 2.29.0(eslint@8.53.0) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.36.0) + eslint-plugin-import: 2.29.1(eslint@8.53.0) eslint-plugin-jsx-a11y: 6.8.0(eslint@8.36.0) - eslint-plugin-react: 7.33.2(eslint@8.36.0) + eslint-plugin-react: 7.34.1(eslint@8.36.0) eslint-plugin-react-hooks: 4.6.0(eslint@8.36.0) typescript: 4.9.5 transitivePeerDependencies: @@ -2991,8 +3905,8 @@ packages: - supports-color dev: false - /eslint-config-next@14.0.2(eslint@8.53.0)(typescript@5.2.2): - resolution: {integrity: sha512-CasWThlsyIcg/a+clU6KVOMTieuDhTztsrqvniP6AsRki9v7FnojTa7vKQOYM8QSOsQdZ/aElLD1Y2Oc8/PsIg==} + /eslint-config-next@14.1.4(eslint@8.53.0)(typescript@5.4.3): + resolution: {integrity: sha512-cihIahbhYAWwXJwZkAaRPpUi5t9aOi/HdfWXOjZeUOqNWXHD8X22kd1KG58Dc3MVaRx3HoR/oMGk2ltcrqDn8g==} peerDependencies: eslint: ^7.23.0 || ^8.0.0 typescript: '>=3.3.1' @@ -3000,17 +3914,17 @@ packages: typescript: optional: true dependencies: - '@next/eslint-plugin-next': 14.0.2 - '@rushstack/eslint-patch': 1.5.1 - '@typescript-eslint/parser': 6.11.0(eslint@8.53.0)(typescript@5.2.2) + '@next/eslint-plugin-next': 14.1.4 + '@rushstack/eslint-patch': 1.10.1 + '@typescript-eslint/parser': 6.21.0(eslint@8.53.0)(typescript@5.4.3) eslint: 8.53.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.11.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.0)(eslint@8.53.0) - eslint-plugin-import: 2.29.0(@typescript-eslint/parser@6.11.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.53.0) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.53.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.53.0) eslint-plugin-jsx-a11y: 6.8.0(eslint@8.53.0) - eslint-plugin-react: 7.33.2(eslint@8.53.0) + eslint-plugin-react: 7.34.1(eslint@8.53.0) eslint-plugin-react-hooks: 4.6.0(eslint@8.53.0) - typescript: 5.2.2 + typescript: 5.4.3 transitivePeerDependencies: - eslint-import-resolver-webpack - supports-color @@ -3025,7 +3939,7 @@ packages: transitivePeerDependencies: - supports-color - /eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.0)(eslint@8.36.0): + /eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.36.0): resolution: {integrity: sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: @@ -3033,12 +3947,12 @@ packages: eslint-plugin-import: '*' dependencies: debug: 4.3.4 - enhanced-resolve: 5.15.0 + enhanced-resolve: 5.16.0 eslint: 8.36.0 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.36.0) - eslint-plugin-import: 2.29.0(eslint@8.53.0) + eslint-module-utils: 2.8.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.36.0) + eslint-plugin-import: 2.29.1(eslint@8.53.0) fast-glob: 3.3.2 - get-tsconfig: 4.7.2 + get-tsconfig: 4.7.3 is-core-module: 2.13.1 is-glob: 4.0.3 transitivePeerDependencies: @@ -3048,7 +3962,7 @@ packages: - supports-color dev: false - /eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.11.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.0)(eslint@8.53.0): + /eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.53.0): resolution: {integrity: sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: @@ -3056,12 +3970,12 @@ packages: eslint-plugin-import: '*' dependencies: debug: 4.3.4 - enhanced-resolve: 5.15.0 + enhanced-resolve: 5.16.0 eslint: 8.53.0 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.11.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.53.0) - eslint-plugin-import: 2.29.0(@typescript-eslint/parser@6.11.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.53.0) + eslint-module-utils: 2.8.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.53.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.53.0) fast-glob: 3.3.2 - get-tsconfig: 4.7.2 + get-tsconfig: 4.7.3 is-core-module: 2.13.1 is-glob: 4.0.3 transitivePeerDependencies: @@ -3069,9 +3983,10 @@ packages: - eslint-import-resolver-node - eslint-import-resolver-webpack - supports-color + dev: true - /eslint-module-utils@2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.36.0): - resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} + /eslint-module-utils@2.8.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.36.0): + resolution: {integrity: sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==} engines: {node: '>=4'} peerDependencies: '@typescript-eslint/parser': '*' @@ -3095,13 +4010,43 @@ packages: debug: 3.2.7 eslint: 8.36.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.0)(eslint@8.36.0) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.36.0) transitivePeerDependencies: - supports-color dev: false - /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.11.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.53.0): - resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} + /eslint-module-utils@2.8.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.53.0): + resolution: {integrity: sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + dependencies: + '@typescript-eslint/parser': 6.21.0(eslint@8.53.0)(typescript@5.4.3) + debug: 3.2.7 + eslint: 8.53.0 + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.53.0) + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-module-utils@2.8.1(eslint-import-resolver-node@0.3.9)(eslint@8.53.0): + resolution: {integrity: sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==} engines: {node: '>=4'} peerDependencies: '@typescript-eslint/parser': '*' @@ -3121,16 +4066,15 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 6.11.0(eslint@8.53.0)(typescript@5.2.2) debug: 3.2.7 eslint: 8.53.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.11.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.0)(eslint@8.53.0) transitivePeerDependencies: - supports-color + dev: false - /eslint-plugin-import@2.29.0(@typescript-eslint/parser@6.11.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.53.0): - resolution: {integrity: sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg==} + /eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.53.0): + resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} engines: {node: '>=4'} peerDependencies: '@typescript-eslint/parser': '*' @@ -3139,32 +4083,33 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 6.11.0(eslint@8.53.0)(typescript@5.2.2) - array-includes: 3.1.7 - array.prototype.findlastindex: 1.2.3 + '@typescript-eslint/parser': 6.21.0(eslint@8.53.0)(typescript@5.4.3) + array-includes: 3.1.8 + array.prototype.findlastindex: 1.2.5 array.prototype.flat: 1.3.2 array.prototype.flatmap: 1.3.2 debug: 3.2.7 doctrine: 2.1.0 eslint: 8.53.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.11.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.53.0) - hasown: 2.0.0 + eslint-module-utils: 2.8.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.53.0) + hasown: 2.0.2 is-core-module: 2.13.1 is-glob: 4.0.3 minimatch: 3.1.2 - object.fromentries: 2.0.7 - object.groupby: 1.0.1 - object.values: 1.1.7 + object.fromentries: 2.0.8 + object.groupby: 1.0.3 + object.values: 1.2.0 semver: 6.3.1 - tsconfig-paths: 3.14.2 + tsconfig-paths: 3.15.0 transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color + dev: true - /eslint-plugin-import@2.29.0(eslint@8.53.0): - resolution: {integrity: sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg==} + /eslint-plugin-import@2.29.1(eslint@8.53.0): + resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} engines: {node: '>=4'} peerDependencies: '@typescript-eslint/parser': '*' @@ -3173,24 +4118,24 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - array-includes: 3.1.7 - array.prototype.findlastindex: 1.2.3 + array-includes: 3.1.8 + array.prototype.findlastindex: 1.2.5 array.prototype.flat: 1.3.2 array.prototype.flatmap: 1.3.2 debug: 3.2.7 doctrine: 2.1.0 eslint: 8.53.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.11.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.53.0) - hasown: 2.0.0 + eslint-module-utils: 2.8.1(eslint-import-resolver-node@0.3.9)(eslint@8.53.0) + hasown: 2.0.2 is-core-module: 2.13.1 is-glob: 4.0.3 minimatch: 3.1.2 - object.fromentries: 2.0.7 - object.groupby: 1.0.1 - object.values: 1.1.7 + object.fromentries: 2.0.8 + object.groupby: 1.0.3 + object.values: 1.2.0 semver: 6.3.1 - tsconfig-paths: 3.14.2 + tsconfig-paths: 3.15.0 transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -3203,23 +4148,23 @@ packages: peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 dependencies: - '@babel/runtime': 7.23.2 + '@babel/runtime': 7.24.4 aria-query: 5.3.0 - array-includes: 3.1.7 + array-includes: 3.1.8 array.prototype.flatmap: 1.3.2 ast-types-flow: 0.0.8 axe-core: 4.7.0 axobject-query: 3.2.1 damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 - es-iterator-helpers: 1.0.15 + es-iterator-helpers: 1.0.18 eslint: 8.36.0 - hasown: 2.0.0 + hasown: 2.0.2 jsx-ast-utils: 3.3.5 language-tags: 1.0.9 minimatch: 3.1.2 - object.entries: 1.1.7 - object.fromentries: 2.0.7 + object.entries: 1.1.8 + object.fromentries: 2.0.8 dev: false /eslint-plugin-jsx-a11y@6.8.0(eslint@8.53.0): @@ -3228,23 +4173,23 @@ packages: peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 dependencies: - '@babel/runtime': 7.23.2 + '@babel/runtime': 7.24.4 aria-query: 5.3.0 - array-includes: 3.1.7 + array-includes: 3.1.8 array.prototype.flatmap: 1.3.2 ast-types-flow: 0.0.8 axe-core: 4.7.0 axobject-query: 3.2.1 damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 - es-iterator-helpers: 1.0.15 + es-iterator-helpers: 1.0.18 eslint: 8.53.0 - hasown: 2.0.0 + hasown: 2.0.2 jsx-ast-utils: 3.3.5 language-tags: 1.0.9 minimatch: 3.1.2 - object.entries: 1.1.7 - object.fromentries: 2.0.7 + object.entries: 1.1.8 + object.fromentries: 2.0.8 dev: true /eslint-plugin-react-hooks@4.6.0(eslint@8.36.0): @@ -3265,54 +4210,58 @@ packages: eslint: 8.53.0 dev: true - /eslint-plugin-react@7.33.2(eslint@8.36.0): - resolution: {integrity: sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==} + /eslint-plugin-react@7.34.1(eslint@8.36.0): + resolution: {integrity: sha512-N97CxlouPT1AHt8Jn0mhhN2RrADlUAsk1/atcT2KyA/l9Q/E6ll7OIGwNumFmWfZ9skV3XXccYS19h80rHtgkw==} engines: {node: '>=4'} peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 dependencies: - array-includes: 3.1.7 + array-includes: 3.1.8 + array.prototype.findlast: 1.2.5 array.prototype.flatmap: 1.3.2 - array.prototype.tosorted: 1.1.2 + array.prototype.toreversed: 1.1.2 + array.prototype.tosorted: 1.1.3 doctrine: 2.1.0 - es-iterator-helpers: 1.0.15 + es-iterator-helpers: 1.0.18 eslint: 8.36.0 estraverse: 5.3.0 jsx-ast-utils: 3.3.5 minimatch: 3.1.2 - object.entries: 1.1.7 - object.fromentries: 2.0.7 - object.hasown: 1.1.3 - object.values: 1.1.7 + object.entries: 1.1.8 + object.fromentries: 2.0.8 + object.hasown: 1.1.4 + object.values: 1.2.0 prop-types: 15.8.1 resolve: 2.0.0-next.5 semver: 6.3.1 - string.prototype.matchall: 4.0.10 + string.prototype.matchall: 4.0.11 dev: false - /eslint-plugin-react@7.33.2(eslint@8.53.0): - resolution: {integrity: sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==} + /eslint-plugin-react@7.34.1(eslint@8.53.0): + resolution: {integrity: sha512-N97CxlouPT1AHt8Jn0mhhN2RrADlUAsk1/atcT2KyA/l9Q/E6ll7OIGwNumFmWfZ9skV3XXccYS19h80rHtgkw==} engines: {node: '>=4'} peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 dependencies: - array-includes: 3.1.7 + array-includes: 3.1.8 + array.prototype.findlast: 1.2.5 array.prototype.flatmap: 1.3.2 - array.prototype.tosorted: 1.1.2 + array.prototype.toreversed: 1.1.2 + array.prototype.tosorted: 1.1.3 doctrine: 2.1.0 - es-iterator-helpers: 1.0.15 + es-iterator-helpers: 1.0.18 eslint: 8.53.0 estraverse: 5.3.0 jsx-ast-utils: 3.3.5 minimatch: 3.1.2 - object.entries: 1.1.7 - object.fromentries: 2.0.7 - object.hasown: 1.1.3 - object.values: 1.1.7 + object.entries: 1.1.8 + object.fromentries: 2.0.8 + object.hasown: 1.1.4 + object.values: 1.2.0 prop-types: 15.8.1 resolve: 2.0.0-next.5 semver: 6.3.1 - string.prototype.matchall: 4.0.10 + string.prototype.matchall: 4.0.11 dev: true /eslint-scope@7.2.2: @@ -3333,9 +4282,9 @@ packages: dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.36.0) '@eslint-community/regexpp': 4.10.0 - '@eslint/eslintrc': 2.1.3 + '@eslint/eslintrc': 2.1.4 '@eslint/js': 8.36.0 - '@humanwhocodes/config-array': 0.11.13 + '@humanwhocodes/config-array': 0.11.14 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 ajv: 6.12.6 @@ -3353,9 +4302,9 @@ packages: file-entry-cache: 6.0.1 find-up: 5.0.0 glob-parent: 6.0.2 - globals: 13.23.0 + globals: 13.24.0 grapheme-splitter: 1.0.4 - ignore: 5.2.4 + ignore: 5.3.1 import-fresh: 3.3.0 imurmurhash: 0.1.4 is-glob: 4.0.3 @@ -3382,9 +4331,9 @@ packages: dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.53.0) '@eslint-community/regexpp': 4.10.0 - '@eslint/eslintrc': 2.1.3 + '@eslint/eslintrc': 2.1.4 '@eslint/js': 8.53.0 - '@humanwhocodes/config-array': 0.11.13 + '@humanwhocodes/config-array': 0.11.14 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 '@ungap/structured-clone': 1.2.0 @@ -3403,9 +4352,9 @@ packages: file-entry-cache: 6.0.1 find-up: 5.0.0 glob-parent: 6.0.2 - globals: 13.23.0 + globals: 13.24.0 graphemer: 1.4.0 - ignore: 5.2.4 + ignore: 5.3.1 imurmurhash: 0.1.4 is-glob: 4.0.3 is-path-inside: 3.0.3 @@ -3421,12 +4370,22 @@ packages: transitivePeerDependencies: - supports-color + /esniff@2.0.1: + resolution: {integrity: sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==} + engines: {node: '>=0.10'} + dependencies: + d: 1.0.2 + es5-ext: 0.10.64 + event-emitter: 0.3.5 + type: 2.7.2 + dev: true + /espree@9.6.1: resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - acorn: 8.11.2 - acorn-jsx: 5.3.2(acorn@8.11.2) + acorn: 8.11.3 + acorn-jsx: 5.3.2(acorn@8.11.3) eslint-visitor-keys: 3.4.3 /esprima@4.0.1: @@ -3460,7 +4419,7 @@ packages: /estree-util-build-jsx@2.2.2: resolution: {integrity: sha512-m56vOXcOBuaF+Igpb9OPAy7f9w9OIkb5yhjsZuaPm7HoGi4oTOQi0h2+yZ+AtKklYFZ+rPC4n0wYCJCEU1ONqg==} dependencies: - '@types/estree-jsx': 1.0.3 + '@types/estree-jsx': 1.0.5 estree-util-is-identifier-name: 2.1.0 estree-walker: 3.0.3 dev: false @@ -3472,7 +4431,7 @@ packages: /estree-util-to-js@1.2.0: resolution: {integrity: sha512-IzU74r1PK5IMMGZXUVZbmiu4A1uhiPgW5hm1GjcOfr4ZzHaMPpLNJjR7HjXiIOzi25nZDrgFTobHTkV5Q6ITjA==} dependencies: - '@types/estree-jsx': 1.0.3 + '@types/estree-jsx': 1.0.5 astring: 1.8.6 source-map: 0.7.4 dev: false @@ -3480,7 +4439,7 @@ packages: /estree-util-visit@1.2.1: resolution: {integrity: sha512-xbgqcrkIVbIG+lI/gzbvd9SGTJL4zqJKBFttUl5pP27KhAjtMKbX/mQXJ7qgyXpMgVy/zvpm0xoQQaGL8OloOw==} dependencies: - '@types/estree-jsx': 1.0.3 + '@types/estree-jsx': 1.0.5 '@types/unist': 2.0.10 dev: false @@ -3498,6 +4457,13 @@ packages: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} + /event-emitter@0.3.5: + resolution: {integrity: sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==} + dependencies: + d: 1.0.2 + es5-ext: 0.10.64 + dev: true + /eventemitter3@4.0.7: resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} dev: false @@ -3517,6 +4483,12 @@ packages: engines: {node: '>=6'} dev: false + /ext@1.7.0: + resolution: {integrity: sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==} + dependencies: + type: 2.7.2 + dev: true + /extend-shallow@2.0.1: resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} engines: {node: '>=0.10.0'} @@ -3556,8 +4528,8 @@ packages: /fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - /fastq@1.15.0: - resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} + /fastq@1.17.1: + resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} dependencies: reusify: 1.0.4 @@ -3584,12 +4556,12 @@ packages: resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} engines: {node: ^10.12.0 || >=12.0.0} dependencies: - flatted: 3.2.9 + flatted: 3.3.1 keyv: 4.5.4 rimraf: 3.0.2 - /flatted@3.2.9: - resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} + /flatted@3.3.1: + resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} /focus-trap-react@10.2.3(prop-types@15.8.1)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-YXBpFu/hIeSu6NnmV2xlXzOYxuWkoOtar9jzgp3lOmjWLWY59C/b8DtDHEAV4SPU07Nd/t+nS/SBNGkhUBFmEw==} @@ -3616,6 +4588,13 @@ packages: dependencies: is-callable: 1.2.7 + /foreground-child@3.1.1: + resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} + engines: {node: '>=14'} + dependencies: + cross-spawn: 7.0.3 + signal-exit: 4.1.0 + /form-data@4.0.0: resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} engines: {node: '>= 6'} @@ -3629,8 +4608,8 @@ packages: resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} dev: true - /framer-motion@10.16.4(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-p9V9nGomS3m6/CALXqv6nFGMuFOxbWsmaOrdmhyQimMIlLl3LC7h7l86wge/Js/8cRu5ktutS/zlzgR7eBOtFA==} + /framer-motion@10.18.0(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-oGlDh1Q1XqYPksuTD/usb0I70hq95OUzmL9+6Zd+Hs4XV0oaISBa/UUMSjYiq6m8EUF32132mOJ8xVZS+I0S6w==} peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 @@ -3668,36 +4647,39 @@ packages: resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-abstract: 1.23.3 functions-have-names: 1.2.3 /functions-have-names@1.2.3: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - /get-intrinsic@1.2.2: - resolution: {integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==} + /get-intrinsic@1.2.4: + resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} + engines: {node: '>= 0.4'} dependencies: + es-errors: 1.3.0 function-bind: 1.1.2 - has-proto: 1.0.1 + has-proto: 1.0.3 has-symbols: 1.0.3 - hasown: 2.0.0 + hasown: 2.0.2 /get-nonce@1.0.1: resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} engines: {node: '>=6'} dev: false - /get-symbol-description@1.0.0: - resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} + /get-symbol-description@1.0.2: + resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 - /get-tsconfig@4.7.2: - resolution: {integrity: sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==} + /get-tsconfig@4.7.3: + resolution: {integrity: sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg==} dependencies: resolve-pkg-maps: 1.0.0 @@ -3721,8 +4703,31 @@ packages: resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} dev: false - /glob@7.1.6: - resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} + /glob@10.3.10: + resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + dependencies: + foreground-child: 3.1.1 + jackspeak: 2.3.6 + minimatch: 9.0.4 + minipass: 7.0.4 + path-scurry: 1.10.2 + dev: true + + /glob@10.3.12: + resolution: {integrity: sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + dependencies: + foreground-child: 3.1.1 + jackspeak: 2.3.6 + minimatch: 9.0.4 + minipass: 7.0.4 + path-scurry: 1.10.2 + + /glob@7.1.7: + resolution: {integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==} dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 @@ -3730,9 +4735,10 @@ packages: minimatch: 3.1.2 once: 1.4.0 path-is-absolute: 1.0.1 + dev: false - /glob@7.1.7: - resolution: {integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==} + /glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 @@ -3740,19 +4746,20 @@ packages: minimatch: 3.1.2 once: 1.4.0 path-is-absolute: 1.0.1 - - /glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + + /glob@8.1.0: + resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} + engines: {node: '>=12'} dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 inherits: 2.0.4 - minimatch: 3.1.2 + minimatch: 5.1.6 once: 1.4.0 - path-is-absolute: 1.0.1 + dev: true - /globals@13.23.0: - resolution: {integrity: sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==} + /globals@13.24.0: + resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} engines: {node: '>=8'} dependencies: type-fest: 0.20.2 @@ -3770,14 +4777,14 @@ packages: array-union: 2.1.0 dir-glob: 3.0.1 fast-glob: 3.3.2 - ignore: 5.2.4 + ignore: 5.3.1 merge2: 1.4.1 slash: 3.0.0 /gopd@1.0.1: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} dependencies: - get-intrinsic: 1.2.2 + get-intrinsic: 1.2.4 /graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} @@ -3799,6 +4806,13 @@ packages: strip-bom-string: 1.0.0 dev: false + /hanji@0.0.5: + resolution: {integrity: sha512-Abxw1Lq+TnYiL4BueXqMau222fPSPMFtya8HdpWsz/xVAhifXou71mPh/kY2+08RgFcVccjG3uZHs6K5HAe3zw==} + dependencies: + lodash.throttle: 4.1.1 + sisteransi: 1.0.5 + dev: true + /has-bigints@1.0.2: resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} @@ -3811,27 +4825,27 @@ packages: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} - /has-property-descriptors@1.0.1: - resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==} + /has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} dependencies: - get-intrinsic: 1.2.2 + es-define-property: 1.0.0 - /has-proto@1.0.1: - resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} + /has-proto@1.0.3: + resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} engines: {node: '>= 0.4'} /has-symbols@1.0.3: resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} engines: {node: '>= 0.4'} - /has-tostringtag@1.0.0: - resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} + /has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} engines: {node: '>= 0.4'} dependencies: has-symbols: 1.0.3 - /hasown@2.0.0: - resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} + /hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} dependencies: function-bind: 1.1.2 @@ -3840,8 +4854,8 @@ packages: resolution: {integrity: sha512-ihhPIUPxN0v0w6M5+IiAZZrn0LH2uZomeWwhn7uP7avZC6TE7lIiEh2yBMPr5+zi1aUCXq6VoYRgs2Bw9xmycQ==} dependencies: '@types/estree': 1.0.5 - '@types/estree-jsx': 1.0.3 - '@types/hast': 2.3.8 + '@types/estree-jsx': 1.0.5 + '@types/hast': 2.3.10 '@types/unist': 2.0.10 comma-separated-tokens: 2.0.3 estree-util-attach-comments: 2.1.1 @@ -3849,7 +4863,7 @@ packages: hast-util-whitespace: 2.0.1 mdast-util-mdx-expression: 1.3.2 mdast-util-mdxjs-esm: 1.3.1 - property-information: 6.4.0 + property-information: 6.5.0 space-separated-tokens: 2.0.2 style-to-object: 0.4.4 unist-util-position: 4.0.4 @@ -3862,6 +4876,10 @@ packages: resolution: {integrity: sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng==} dev: false + /heap@0.2.7: + resolution: {integrity: sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==} + dev: true + /html-encoding-sniffer@3.0.0: resolution: {integrity: sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==} engines: {node: '>=12'} @@ -3901,8 +4919,8 @@ packages: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} dev: false - /ignore@5.2.4: - resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} + /ignore@5.3.1: + resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} engines: {node: '>= 4'} /import-fresh@3.3.0: @@ -3933,13 +4951,13 @@ packages: resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==} dev: false - /internal-slot@1.0.6: - resolution: {integrity: sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==} + /internal-slot@1.0.7: + resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} engines: {node: '>= 0.4'} dependencies: - get-intrinsic: 1.2.2 - hasown: 2.0.0 - side-channel: 1.0.4 + es-errors: 1.3.0 + hasown: 2.0.2 + side-channel: 1.0.6 /internmap@2.0.3: resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==} @@ -3963,12 +4981,12 @@ packages: is-decimal: 2.0.1 dev: false - /is-array-buffer@3.0.2: - resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} + /is-array-buffer@3.0.4: + resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 - is-typed-array: 1.1.12 + call-bind: 1.0.7 + get-intrinsic: 1.2.4 /is-arrayish@0.3.2: resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} @@ -3978,7 +4996,7 @@ packages: resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} engines: {node: '>= 0.4'} dependencies: - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 /is-bigint@1.0.4: resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} @@ -3989,14 +5007,14 @@ packages: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} dependencies: - binary-extensions: 2.2.0 + binary-extensions: 2.3.0 /is-boolean-object@1.1.2: resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 - has-tostringtag: 1.0.0 + call-bind: 1.0.7 + has-tostringtag: 1.0.2 /is-buffer@2.0.5: resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==} @@ -4010,13 +5028,19 @@ packages: /is-core-module@2.13.1: resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} dependencies: - hasown: 2.0.0 + hasown: 2.0.2 + + /is-data-view@1.0.1: + resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} + engines: {node: '>= 0.4'} + dependencies: + is-typed-array: 1.1.13 /is-date-object@1.0.5: resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} engines: {node: '>= 0.4'} dependencies: - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 /is-decimal@2.0.1: resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} @@ -4027,13 +5051,6 @@ packages: engines: {node: '>=0.10.0'} dev: false - /is-extendable@1.0.1: - resolution: {integrity: sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==} - engines: {node: '>=0.10.0'} - dependencies: - is-plain-object: 2.0.4 - dev: false - /is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} @@ -4041,13 +5058,17 @@ packages: /is-finalizationregistry@1.0.2: resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 + + /is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} /is-generator-function@1.0.10: resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} engines: {node: '>= 0.4'} dependencies: - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 /is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} @@ -4059,18 +5080,19 @@ packages: resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} dev: false - /is-map@2.0.2: - resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==} + /is-map@2.0.3: + resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} + engines: {node: '>= 0.4'} - /is-negative-zero@2.0.2: - resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} + /is-negative-zero@2.0.3: + resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} engines: {node: '>= 0.4'} /is-number-object@1.0.7: resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} engines: {node: '>= 0.4'} dependencies: - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 /is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} @@ -4085,17 +5107,14 @@ packages: engines: {node: '>=12'} dev: false - /is-plain-object@2.0.4: - resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} - engines: {node: '>=0.10.0'} - dependencies: - isobject: 3.0.1 - dev: false - /is-potential-custom-element-name@1.0.1: resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} dev: false + /is-promise@2.2.2: + resolution: {integrity: sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==} + dev: true + /is-reference@3.0.2: resolution: {integrity: sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==} dependencies: @@ -4106,22 +5125,24 @@ packages: resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 - has-tostringtag: 1.0.0 + call-bind: 1.0.7 + has-tostringtag: 1.0.2 - /is-set@2.0.2: - resolution: {integrity: sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==} + /is-set@2.0.3: + resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} + engines: {node: '>= 0.4'} - /is-shared-array-buffer@1.0.2: - resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} + /is-shared-array-buffer@1.0.3: + resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 /is-string@1.0.7: resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} engines: {node: '>= 0.4'} dependencies: - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 /is-symbol@1.0.4: resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} @@ -4129,25 +5150,32 @@ packages: dependencies: has-symbols: 1.0.3 - /is-typed-array@1.1.12: - resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} + /is-typed-array@1.1.13: + resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} engines: {node: '>= 0.4'} dependencies: - which-typed-array: 1.1.13 + which-typed-array: 1.1.15 - /is-weakmap@2.0.1: - resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==} + /is-weakmap@2.0.2: + resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} + engines: {node: '>= 0.4'} /is-weakref@1.0.2: resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 - /is-weakset@2.0.2: - resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==} + /is-weakset@2.0.3: + resolution: {integrity: sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 + call-bind: 1.0.7 + get-intrinsic: 1.2.4 + + /is-what@4.1.16: + resolution: {integrity: sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==} + engines: {node: '>=12.13'} + dev: true /isarray@2.0.5: resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} @@ -4155,19 +5183,22 @@ packages: /isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - /isobject@3.0.1: - resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} - engines: {node: '>=0.10.0'} - dev: false - /iterator.prototype@1.1.2: resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==} dependencies: define-properties: 1.2.1 - get-intrinsic: 1.2.2 + get-intrinsic: 1.2.4 has-symbols: 1.0.3 - reflect.getprototypeof: 1.0.4 - set-function-name: 2.0.1 + reflect.getprototypeof: 1.0.6 + set-function-name: 2.0.2 + + /jackspeak@2.3.6: + resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} + engines: {node: '>=14'} + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 /jest-environment-jsdom@29.6.1: resolution: {integrity: sha512-PoY+yLaHzVRhVEjcVKSfJ7wXmJW4UqPYNhR05h7u/TK0ouf6DmRNZFBL/Z00zgQMyWGMBXn69/FmOvhEJu8cIw==} @@ -4182,7 +5213,7 @@ packages: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 '@types/jsdom': 20.0.1 - '@types/node': 20.9.0 + '@types/node': 20.12.4 jest-mock: 29.7.0 jest-util: 29.7.0 jsdom: 20.0.3 @@ -4205,7 +5236,7 @@ packages: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 '@types/jsdom': 20.0.1 - '@types/node': 20.9.0 + '@types/node': 20.12.4 jest-mock: 29.7.0 jest-util: 29.7.0 jsdom: 20.0.3 @@ -4219,7 +5250,7 @@ packages: resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/code-frame': 7.22.13 + '@babel/code-frame': 7.24.2 '@jest/types': 29.6.3 '@types/stack-utils': 2.0.3 chalk: 4.1.2 @@ -4235,7 +5266,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.9.0 + '@types/node': 20.12.4 jest-util: 29.7.0 dev: false @@ -4244,7 +5275,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.9.0 + '@types/node': 20.12.4 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -4255,8 +5286,12 @@ packages: resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} hasBin: true - /jose@4.15.4: - resolution: {integrity: sha512-W+oqK4H+r5sITxfxpSU+MMdr/YSWGvgZMQDIsNoBDGGy4i7GBPTtvFKibQzW06n3U3TqHjhvBJsirShsEJ6eeQ==} + /jose@4.15.5: + resolution: {integrity: sha512-jc7BFxgKPKi94uOvEmzlSWFFe2+vASyXaKUpdQKatWAESU2MWjDfFf0fdfc83CDKcA5QecabZeNLyfhe3yKNkg==} + dev: false + + /jose@5.2.3: + resolution: {integrity: sha512-KUXdbctm1uHVL8BYhnyHkgp3zDX5KW8ZhAKVFEfUbU2P8Alpzjb+48hHvjOdQIyPshoblhzsuqOwEEAbtHVirA==} dev: false /js-cookie@3.0.5: @@ -4295,7 +5330,7 @@ packages: optional: true dependencies: abab: 2.0.6 - acorn: 8.11.2 + acorn: 8.11.3 acorn-globals: 7.0.1 cssom: 0.5.0 cssstyle: 2.3.0 @@ -4318,7 +5353,7 @@ packages: whatwg-encoding: 2.0.0 whatwg-mimetype: 3.0.0 whatwg-url: 11.0.0 - ws: 8.14.2(bufferutil@4.0.8)(utf-8-validate@6.0.3) + ws: 8.16.0 xml-name-validator: 4.0.0 transitivePeerDependencies: - bufferutil @@ -4329,6 +5364,15 @@ packages: /json-buffer@3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + /json-diff@0.9.0: + resolution: {integrity: sha512-cVnggDrVkAAA3OvFfHpFEhOnmcsUpleEKq4d4O8sQWWSH40MBrWstKigVB1kGrgLWzuom+7rRdaCsnBD6VyObQ==} + hasBin: true + dependencies: + cli-color: 2.0.4 + difflib: 0.2.4 + dreamopt: 0.8.0 + dev: true + /json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} @@ -4345,10 +5389,10 @@ packages: resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} engines: {node: '>=4.0'} dependencies: - array-includes: 3.1.7 + array-includes: 3.1.8 array.prototype.flat: 1.3.2 - object.assign: 4.1.4 - object.values: 1.1.7 + object.assign: 4.1.5 + object.values: 1.2.0 /keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} @@ -4385,17 +5429,21 @@ packages: resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} engines: {node: '>=10'} + /lilconfig@3.1.1: + resolution: {integrity: sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==} + engines: {node: '>=14'} + /lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - /linkify-it@4.0.1: - resolution: {integrity: sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw==} + /linkify-it@5.0.0: + resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==} dependencies: - uc.micro: 1.0.6 + uc.micro: 2.1.0 dev: false - /linkifyjs@4.1.2: - resolution: {integrity: sha512-1elJrH8MwUgr77Rgmx4JgB/nBgISYVoGossH6pAfCeHG+07TblTn6RWKx0MKozEMJU6NCFYHRih9M8ZtV3YZ+Q==} + /linkifyjs@4.1.3: + resolution: {integrity: sha512-auMesunaJ8yfkHvK4gfg1K0SaKX/6Wn9g2Aac/NwX+l5VdmFZzo/hdPGxEOETj+ryRa4/fiOPjeeKURSAJx1sg==} dev: false /locate-character@3.0.0: @@ -4419,6 +5467,10 @@ packages: /lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + /lodash.throttle@4.1.1: + resolution: {integrity: sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==} + dev: true + /lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} dev: false @@ -4433,12 +5485,22 @@ packages: dependencies: js-tokens: 4.0.0 + /lru-cache@10.2.0: + resolution: {integrity: sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==} + engines: {node: 14 || >=16.14} + /lru-cache@6.0.0: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} dependencies: yallist: 4.0.0 + /lru-queue@0.1.0: + resolution: {integrity: sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ==} + dependencies: + es5-ext: 0.10.64 + dev: true + /lucide-react@0.244.0(react@18.2.0): resolution: {integrity: sha512-PeDVbx5PlIRrVvdxiuSxPfBo7sK5qrL3LbvvRoGVNiHYRAkBm/48lKqoioxcmp0bgsyJs9lMw7CdtGFvnMJbVg==} peerDependencies: @@ -4455,17 +5517,13 @@ packages: react: 18.2.0 dev: false - /magic-string@0.30.5: - resolution: {integrity: sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==} + /magic-string@0.30.9: + resolution: {integrity: sha512-S1+hd+dIrC8EZqKyT9DstTH/0Z+f76kmmvZnkfQVmOpDEF9iVgdYif3Q/pIWHmCoo59bQVGW0kVL3e2nl+9+Sw==} engines: {node: '>=12'} dependencies: '@jridgewell/sourcemap-codec': 1.4.15 dev: false - /make-error@1.3.6: - resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} - dev: false - /markdown-extensions@1.1.1: resolution: {integrity: sha512-WWC0ZuMzCyDHYCasEGs4IPvLyTGftYwh6wIEOULOF0HXcqZlhwRzrK0w2VUlxWA98xnvb/jszw4ZSkJ6ADpM6Q==} engines: {node: '>=0.10.0'} @@ -4475,15 +5533,16 @@ packages: resolution: {integrity: sha512-TxFAc76Jnhb2OUu+n3yz9RMu4CwGfaT788br6HhEDlvWfdeJcLUsxk1Hgw2yJio0OXsxv7pyIPmvECY7bMbluA==} dev: false - /markdown-it@13.0.2: - resolution: {integrity: sha512-FtwnEuuK+2yVU7goGn/MJ0WBZMM9ZPgU9spqlFs7/A/pDIUNSOQZhUgOqYCficIuR2QaFnrt8LHqBWsbTAoI5w==} + /markdown-it@14.1.0: + resolution: {integrity: sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==} hasBin: true dependencies: argparse: 2.0.1 - entities: 3.0.1 - linkify-it: 4.0.1 - mdurl: 1.0.1 - uc.micro: 1.0.6 + entities: 4.5.0 + linkify-it: 5.0.0 + mdurl: 2.0.0 + punycode.js: 2.3.1 + uc.micro: 2.1.0 dev: false /mdast-util-definitions@5.1.2: @@ -4516,8 +5575,8 @@ packages: /mdast-util-mdx-expression@1.3.2: resolution: {integrity: sha512-xIPmR5ReJDu/DHH1OoIT1HkuybIfRGYRywC+gJtI7qHjCJp/M9jrmBEJW22O8lskDWm562BX2W8TiAwRTb0rKA==} dependencies: - '@types/estree-jsx': 1.0.3 - '@types/hast': 2.3.8 + '@types/estree-jsx': 1.0.5 + '@types/hast': 2.3.10 '@types/mdast': 3.0.15 mdast-util-from-markdown: 1.3.1 mdast-util-to-markdown: 1.5.0 @@ -4528,15 +5587,15 @@ packages: /mdast-util-mdx-jsx@2.1.4: resolution: {integrity: sha512-DtMn9CmVhVzZx3f+optVDF8yFgQVt7FghCRNdlIaS3X5Bnym3hZwPbg/XW86vdpKjlc1PVj26SpnLGeJBXD3JA==} dependencies: - '@types/estree-jsx': 1.0.3 - '@types/hast': 2.3.8 + '@types/estree-jsx': 1.0.5 + '@types/hast': 2.3.10 '@types/mdast': 3.0.15 '@types/unist': 2.0.10 ccount: 2.0.1 mdast-util-from-markdown: 1.3.1 mdast-util-to-markdown: 1.5.0 parse-entities: 4.0.1 - stringify-entities: 4.0.3 + stringify-entities: 4.0.4 unist-util-remove-position: 4.0.2 unist-util-stringify-position: 3.0.3 vfile-message: 3.1.4 @@ -4559,8 +5618,8 @@ packages: /mdast-util-mdxjs-esm@1.3.1: resolution: {integrity: sha512-SXqglS0HrEvSdUEfoXFtcg7DRl7S2cwOXc7jkuusG472Mmjag34DUDeOJUZtl+BVnyeO1frIgVpHlNRWc2gk/w==} dependencies: - '@types/estree-jsx': 1.0.3 - '@types/hast': 2.3.8 + '@types/estree-jsx': 1.0.5 + '@types/hast': 2.3.10 '@types/mdast': 3.0.15 mdast-util-from-markdown: 1.3.1 mdast-util-to-markdown: 1.5.0 @@ -4578,7 +5637,7 @@ packages: /mdast-util-to-hast@12.3.0: resolution: {integrity: sha512-pits93r8PhnIoU4Vy9bjW39M2jJ6/tdHyja9rrot9uujkN7UTU9SDnE6WNJz/IGyQk3XHX6yNNtrBH6cQzm8Hw==} dependencies: - '@types/hast': 2.3.8 + '@types/hast': 2.3.10 '@types/mdast': 3.0.15 mdast-util-definitions: 5.1.2 micromark-util-sanitize-uri: 1.2.0 @@ -4611,10 +5670,23 @@ packages: resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} dev: false - /mdurl@1.0.1: - resolution: {integrity: sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==} + /mdurl@2.0.0: + resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==} dev: false + /memoizee@0.4.15: + resolution: {integrity: sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==} + dependencies: + d: 1.0.2 + es5-ext: 0.10.64 + es6-weak-map: 2.0.3 + event-emitter: 0.3.5 + is-promise: 2.2.2 + lru-queue: 0.1.0 + next-tick: 1.1.0 + timers-ext: 0.1.7 + dev: true + /merge2@1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} @@ -4691,8 +5763,8 @@ packages: /micromark-extension-mdxjs@1.0.1: resolution: {integrity: sha512-7YA7hF6i5eKOfFUzZ+0z6avRG52GpWR8DL+kN47y3f2KhxbBZMhmxe7auOeaTBrW2DenbbZTf1ea9tA2hDpC2Q==} dependencies: - acorn: 8.11.2 - acorn-jsx: 5.3.2(acorn@8.11.2) + acorn: 8.11.3 + acorn-jsx: 5.3.2(acorn@8.11.3) micromark-extension-mdx-expression: 1.0.8 micromark-extension-mdx-jsx: 1.0.5 micromark-extension-mdx-md: 1.0.1 @@ -4915,9 +5987,40 @@ packages: dependencies: brace-expansion: 1.1.11 + /minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + dependencies: + brace-expansion: 2.0.1 + dev: true + + /minimatch@7.4.6: + resolution: {integrity: sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==} + engines: {node: '>=10'} + dependencies: + brace-expansion: 2.0.1 + dev: true + + /minimatch@9.0.3: + resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + brace-expansion: 2.0.1 + dev: true + + /minimatch@9.0.4: + resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + brace-expansion: 2.0.1 + /minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + /minipass@7.0.4: + resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==} + engines: {node: '>=16 || 14 >=14.17'} + /mkdirp-classic@0.5.3: resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} dev: false @@ -4964,8 +6067,8 @@ packages: /natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - /next-auth@4.24.5(next@14.0.2)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-3RafV3XbfIKk6rF6GlLE4/KxjTcuMCifqrmD+98ejFq73SRoj2rmzoca8u764977lH/Q7jo6Xu6yM+Re1Mz/Og==} + /next-auth@4.24.7(next@14.0.2)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-iChjE8ov/1K/z98gdKbn2Jw+2vLgJtVV39X+rCP5SGnVQuco7QOr19FRNGMIrD8d3LYhHWV9j9sKLzq1aDWWQQ==} peerDependencies: next: ^12.2.5 || ^13 || ^14 nodemailer: ^6.6.5 @@ -4975,15 +6078,15 @@ packages: nodemailer: optional: true dependencies: - '@babel/runtime': 7.23.2 + '@babel/runtime': 7.24.4 '@panva/hkdf': 1.1.1 cookie: 0.5.0 - jose: 4.15.4 + jose: 4.15.5 next: 14.0.2(react-dom@18.2.0)(react@18.2.0) oauth: 0.9.15 - openid-client: 5.6.1 - preact: 10.19.1 - preact-render-to-string: 5.2.6(preact@10.19.1) + openid-client: 5.6.5 + preact: 10.20.1 + preact-render-to-string: 5.2.6(preact@10.20.1) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) uuid: 8.3.2 @@ -5006,6 +6109,10 @@ packages: - supports-color dev: false + /next-tick@1.1.0: + resolution: {integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==} + dev: true + /next@13.4.20-canary.15(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-Ugd22aq9E0Eq0VFTn3htQjh50097ug8dAPS0v+9+AGz5VDhwx/ybnDo8S80Zjp8KGDuCP9S8LjwOiy0Ln8VeOg==} engines: {node: '>=16.14.0'} @@ -5024,7 +6131,7 @@ packages: '@next/env': 13.4.20-canary.15 '@swc/helpers': 0.5.1 busboy: 1.6.0 - caniuse-lite: 1.0.30001561 + caniuse-lite: 1.0.30001605 postcss: 8.4.14 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -5064,7 +6171,7 @@ packages: '@next/env': 14.0.2 '@swc/helpers': 0.5.2 busboy: 1.6.0 - caniuse-lite: 1.0.30001561 + caniuse-lite: 1.0.30001605 postcss: 8.4.31 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -5085,24 +6192,24 @@ packages: - babel-plugin-macros dev: false - /node-abi@3.51.0: - resolution: {integrity: sha512-SQkEP4hmNWjlniS5zdnfIXTk1x7Ome85RDzHlTbBtzE97Gfwz/Ipw4v/Ryk20DWIy3yCNVLVlGKApCnmvYoJbA==} + /node-abi@3.57.0: + resolution: {integrity: sha512-Dp+A9JWxRaKuHP35H77I4kCKesDy5HUDEmScia2FyncMTOXASMyg251F5PhFoDA5uqBrDDffiLpbqnrZmNXW+g==} engines: {node: '>=10'} dependencies: - semver: 7.5.4 + semver: 7.6.0 dev: false /node-addon-api@6.1.0: resolution: {integrity: sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==} dev: false - /node-gyp-build@4.6.1: - resolution: {integrity: sha512-24vnklJmyRS8ViBNI8KbtK/r/DmXQMRiOMXTNz2nrTnAYUwjmEEbnnpB/+kt+yWRv73bPsSPRFddrcIbAxSiMQ==} + /node-gyp-build@4.8.0: + resolution: {integrity: sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og==} hasBin: true dev: false - /node-releases@2.0.13: - resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} + /node-releases@2.0.14: + resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} dev: true /normalize-path@3.0.0: @@ -5114,35 +6221,35 @@ packages: engines: {node: '>=0.10.0'} dev: true - /novel@0.1.22(react@18.2.0)(solid-js@1.8.5)(svelte@4.2.3)(vue@3.3.8): + /novel@0.1.22(react@18.2.0)(solid-js@1.8.16)(svelte@4.2.12)(vue@3.4.21): resolution: {integrity: sha512-hdZ3iV4kvCISNjRNXqQk6fRVkMZmvzWjA3zXM1bU2SXVEufBxZL+77qsdEK/XETkJkeEdQl0mk8ERwLiL0BvRg==} peerDependencies: react: ^18.2.0 dependencies: '@radix-ui/react-popover': 1.0.7(@types/react-dom@18.0.11)(@types/react@18.0.28)(react-dom@18.2.0)(react@18.2.0) - '@tiptap/core': 2.1.12(@tiptap/pm@2.1.12) - '@tiptap/extension-color': 2.1.12(@tiptap/core@2.1.12)(@tiptap/extension-text-style@2.1.12) - '@tiptap/extension-highlight': 2.1.12(@tiptap/core@2.1.12) - '@tiptap/extension-horizontal-rule': 2.1.12(@tiptap/core@2.1.12)(@tiptap/pm@2.1.12) - '@tiptap/extension-image': 2.1.12(@tiptap/core@2.1.12) - '@tiptap/extension-link': 2.1.12(@tiptap/core@2.1.12)(@tiptap/pm@2.1.12) - '@tiptap/extension-placeholder': 2.0.3(@tiptap/core@2.1.12)(@tiptap/pm@2.1.12) - '@tiptap/extension-task-item': 2.1.12(@tiptap/core@2.1.12)(@tiptap/pm@2.1.12) - '@tiptap/extension-task-list': 2.1.12(@tiptap/core@2.1.12) - '@tiptap/extension-text-style': 2.1.12(@tiptap/core@2.1.12) - '@tiptap/extension-underline': 2.1.12(@tiptap/core@2.1.12) - '@tiptap/pm': 2.1.12 - '@tiptap/react': 2.1.12(@tiptap/core@2.1.12)(@tiptap/pm@2.1.12)(react-dom@18.2.0)(react@18.2.0) - '@tiptap/starter-kit': 2.1.12(@tiptap/pm@2.1.12) - '@tiptap/suggestion': 2.1.12(@tiptap/core@2.1.12)(@tiptap/pm@2.1.12) + '@tiptap/core': 2.2.4(@tiptap/pm@2.2.4) + '@tiptap/extension-color': 2.2.4(@tiptap/core@2.2.4)(@tiptap/extension-text-style@2.2.4) + '@tiptap/extension-highlight': 2.2.4(@tiptap/core@2.2.4) + '@tiptap/extension-horizontal-rule': 2.2.4(@tiptap/core@2.2.4)(@tiptap/pm@2.2.4) + '@tiptap/extension-image': 2.2.4(@tiptap/core@2.2.4) + '@tiptap/extension-link': 2.2.4(@tiptap/core@2.2.4)(@tiptap/pm@2.2.4) + '@tiptap/extension-placeholder': 2.0.3(@tiptap/core@2.2.4)(@tiptap/pm@2.2.4) + '@tiptap/extension-task-item': 2.2.4(@tiptap/core@2.2.4)(@tiptap/pm@2.2.4) + '@tiptap/extension-task-list': 2.2.4(@tiptap/core@2.2.4) + '@tiptap/extension-text-style': 2.2.4(@tiptap/core@2.2.4) + '@tiptap/extension-underline': 2.2.4(@tiptap/core@2.2.4) + '@tiptap/pm': 2.2.4 + '@tiptap/react': 2.2.4(@tiptap/core@2.2.4)(@tiptap/pm@2.2.4)(react-dom@18.2.0)(react@18.2.0) + '@tiptap/starter-kit': 2.2.4(@tiptap/pm@2.2.4) + '@tiptap/suggestion': 2.2.4(@tiptap/core@2.2.4)(@tiptap/pm@2.2.4) '@types/node': 18.15.3 '@types/react': 18.0.28 '@types/react-dom': 18.0.11 '@upstash/ratelimit': 0.4.4 - '@vercel/analytics': 1.1.1 + '@vercel/analytics': 1.2.2(next@13.4.20-canary.15)(react@18.2.0) '@vercel/blob': 0.9.3 '@vercel/kv': 0.2.4 - ai: 2.2.22(react@18.2.0)(solid-js@1.8.5)(svelte@4.2.3)(vue@3.3.8) + ai: 2.2.37(react@18.2.0)(solid-js@1.8.16)(svelte@4.2.12)(vue@3.4.21) clsx: 1.2.1 eslint: 8.36.0 eslint-config-next: 13.2.4(eslint@8.36.0)(typescript@4.9.5) @@ -5155,7 +6262,7 @@ packages: sonner: 0.7.4(react-dom@18.2.0)(react@18.2.0) tailwind-merge: 1.14.0 tippy.js: 6.3.7 - tiptap-markdown: 0.8.4(@tiptap/core@2.1.12) + tiptap-markdown: 0.8.10(@tiptap/core@2.2.4) typescript: 4.9.5 use-debounce: 9.0.4(react@18.2.0) transitivePeerDependencies: @@ -5177,6 +6284,10 @@ packages: resolution: {integrity: sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==} dev: false + /oauth4webapi@2.10.4: + resolution: {integrity: sha512-DSoj8QoChzOCQlJkRmYxAJCIpnXFW32R0Uq7avyghIeB6iJq0XAblOD7pcq3mx4WEBDwMuKr0Y1qveCBleG2Xw==} + dev: false + /oauth@0.9.15: resolution: {integrity: sha512-a5ERWK1kh38ExDEfoO6qUHJb32rd7aYmPHuyCu3Fta/cnICvYmgd2uhuKXvPD+PXB+gCEYYEaQdIRAjCOwAKNA==} dev: false @@ -5201,66 +6312,55 @@ packages: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} engines: {node: '>= 0.4'} - /object.assign@4.1.4: - resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} + /object.assign@4.1.5: + resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 has-symbols: 1.0.3 object-keys: 1.1.1 - /object.entries@1.1.7: - resolution: {integrity: sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==} + /object.entries@1.1.8: + resolution: {integrity: sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-object-atoms: 1.0.0 - /object.fromentries@2.0.7: - resolution: {integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==} + /object.fromentries@2.0.8: + resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 - /object.groupby@1.0.1: - resolution: {integrity: sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==} + /object.groupby@1.0.3: + resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 - get-intrinsic: 1.2.2 + es-abstract: 1.23.3 - /object.hasown@1.1.3: - resolution: {integrity: sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==} + /object.hasown@1.1.4: + resolution: {integrity: sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg==} + engines: {node: '>= 0.4'} dependencies: define-properties: 1.2.1 - es-abstract: 1.22.3 - - /object.omit@3.0.0: - resolution: {integrity: sha512-EO+BCv6LJfu+gBIF3ggLicFebFLN5zqzz/WWJlMFfkMyGth+oBkhxzDl0wx2W4GkLzuQs/FsSkXZb2IMWQqmBQ==} - engines: {node: '>=0.10.0'} - dependencies: - is-extendable: 1.0.1 - dev: false - - /object.pick@1.3.0: - resolution: {integrity: sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==} - engines: {node: '>=0.10.0'} - dependencies: - isobject: 3.0.1 - dev: false + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 - /object.values@1.1.7: - resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==} + /object.values@1.2.0: + resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-object-atoms: 1.0.0 /oidc-token-hash@5.0.3: resolution: {integrity: sha512-IF4PcGgzAr6XXSff26Sk/+P4KZFJVuHAJZj3wgO3vX2bMdNVp/QXTP3P7CEm9V1IdG8lDLY3HhiqpsE/nOwpPw==} @@ -5277,10 +6377,10 @@ packages: engines: {node: '>=18'} dev: false - /openid-client@5.6.1: - resolution: {integrity: sha512-PtrWsY+dXg6y8mtMPyL/namZSYVz8pjXz3yJiBNZsEdCnu9miHLB4ELVC85WvneMKo2Rg62Ay7NkuCpM0bgiLQ==} + /openid-client@5.6.5: + resolution: {integrity: sha512-5P4qO9nGJzB5PI0LFlhj4Dzg3m4odt0qsJTfyEtZyOlkgpILwEioOhVVJOrS1iVH494S4Ee5OCjjg6Bf5WOj3w==} dependencies: - jose: 4.15.4 + jose: 4.15.5 lru-cache: 6.0.0 object-hash: 2.2.0 oidc-token-hash: 5.0.3 @@ -5353,6 +6453,13 @@ packages: /path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + /path-scurry@1.10.2: + resolution: {integrity: sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + lru-cache: 10.2.0 + minipass: 7.0.4 + /path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} @@ -5365,13 +6472,31 @@ packages: is-reference: 3.0.2 dev: false + /pg-cloudflare@1.1.1: + resolution: {integrity: sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q==} + requiresBuild: true + dev: false + optional: true + + /pg-connection-string@2.6.4: + resolution: {integrity: sha512-v+Z7W/0EO707aNMaAEfiGnGL9sxxumwLl2fJvCQtMn9Fxsg+lPpPkdcyBSv/KFgpGdYkMfn+EI1Or2EHjpgLCA==} + dev: false + /pg-int8@1.0.1: resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==} engines: {node: '>=4.0.0'} dev: false - /pg-protocol@1.6.0: - resolution: {integrity: sha512-M+PDm637OY5WM307051+bsDia5Xej6d9IR4GwJse1qA1DIhiKlksvrneZOYQq42OM+spubpcNYEo2FcKQrDk+Q==} + /pg-pool@3.6.2(pg@8.11.5): + resolution: {integrity: sha512-Htjbg8BlwXqSBQ9V8Vjtc+vzf/6fVUuak/3/XXKA9oxZprwW3IMDQTGHP+KDmVL7rtd+R1QjbnCFPuTHm3G4hg==} + peerDependencies: + pg: '>=8.0' + dependencies: + pg: 8.11.5 + dev: false + + /pg-protocol@1.6.1: + resolution: {integrity: sha512-jPIlvgoD63hrEuihvIg+tJhoGjUsLPn6poJY9N5CnlPd91c2T18T/9zBtLxZSb1EhYxBRoZJtzScCaWlYLtktg==} dev: false /pg-types@2.2.0: @@ -5385,6 +6510,30 @@ packages: postgres-interval: 1.2.0 dev: false + /pg@8.11.5: + resolution: {integrity: sha512-jqgNHSKL5cbDjFlHyYsCXmQDrfIX/3RsNwYqpd4N0Kt8niLuNoRNH+aazv6cOd43gPh9Y4DjQCtb+X0MH0Hvnw==} + engines: {node: '>= 8.0.0'} + peerDependencies: + pg-native: '>=3.0.1' + peerDependenciesMeta: + pg-native: + optional: true + dependencies: + pg-connection-string: 2.6.4 + pg-pool: 3.6.2(pg@8.11.5) + pg-protocol: 1.6.1 + pg-types: 2.2.0 + pgpass: 1.0.5 + optionalDependencies: + pg-cloudflare: 1.1.1 + dev: false + + /pgpass@1.0.5: + resolution: {integrity: sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==} + dependencies: + split2: 4.2.0 + dev: false + /picocolors@1.0.0: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} @@ -5400,28 +6549,32 @@ packages: resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} engines: {node: '>= 6'} - /postcss-import@15.1.0(postcss@8.4.31): + /possible-typed-array-names@1.0.0: + resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} + engines: {node: '>= 0.4'} + + /postcss-import@15.1.0(postcss@8.4.38): resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} engines: {node: '>=14.0.0'} peerDependencies: postcss: ^8.0.0 dependencies: - postcss: 8.4.31 + postcss: 8.4.38 postcss-value-parser: 4.2.0 read-cache: 1.0.0 resolve: 1.22.8 - /postcss-js@4.0.1(postcss@8.4.31): + /postcss-js@4.0.1(postcss@8.4.38): resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} engines: {node: ^12 || ^14 || >= 16} peerDependencies: postcss: ^8.4.21 dependencies: camelcase-css: 2.0.1 - postcss: 8.4.31 + postcss: 8.4.38 - /postcss-load-config@4.0.1(postcss@8.4.31): - resolution: {integrity: sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==} + /postcss-load-config@4.0.2(postcss@8.4.38): + resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} engines: {node: '>= 14'} peerDependencies: postcss: '>=8.0.9' @@ -5432,18 +6585,18 @@ packages: ts-node: optional: true dependencies: - lilconfig: 2.1.0 - postcss: 8.4.31 - yaml: 2.3.4 + lilconfig: 3.1.1 + postcss: 8.4.38 + yaml: 2.4.1 - /postcss-nested@6.0.1(postcss@8.4.31): + /postcss-nested@6.0.1(postcss@8.4.38): resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} engines: {node: '>=12.0'} peerDependencies: postcss: ^8.2.14 dependencies: - postcss: 8.4.31 - postcss-selector-parser: 6.0.13 + postcss: 8.4.38 + postcss-selector-parser: 6.0.16 /postcss-selector-parser@6.0.10: resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==} @@ -5453,8 +6606,8 @@ packages: util-deprecate: 1.0.2 dev: true - /postcss-selector-parser@6.0.13: - resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==} + /postcss-selector-parser@6.0.16: + resolution: {integrity: sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==} engines: {node: '>=4'} dependencies: cssesc: 3.0.0 @@ -5469,7 +6622,7 @@ packages: dependencies: nanoid: 3.3.7 picocolors: 1.0.0 - source-map-js: 1.0.2 + source-map-js: 1.2.0 dev: false /postcss@8.4.31: @@ -5478,7 +6631,16 @@ packages: dependencies: nanoid: 3.3.7 picocolors: 1.0.0 - source-map-js: 1.0.2 + source-map-js: 1.2.0 + dev: false + + /postcss@8.4.38: + resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.7 + picocolors: 1.0.0 + source-map-js: 1.2.0 /postgres-array@2.0.0: resolution: {integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==} @@ -5502,31 +6664,44 @@ packages: xtend: 4.0.2 dev: false - /preact-render-to-string@5.2.6(preact@10.19.1): + /preact-render-to-string@5.2.3(preact@10.11.3): + resolution: {integrity: sha512-aPDxUn5o3GhWdtJtW0svRC2SS/l8D9MAgo2+AWml+BhDImb27ALf04Q2d+AHqUUOc6RdSXFIBVa2gxzgMKgtZA==} + peerDependencies: + preact: '>=10' + dependencies: + preact: 10.11.3 + pretty-format: 3.8.0 + dev: false + + /preact-render-to-string@5.2.6(preact@10.20.1): resolution: {integrity: sha512-JyhErpYOvBV1hEPwIxc/fHWXPfnEGdRKxc8gFdAZ7XV4tlzyzG847XAyEZqoDnynP88akM4eaHcSOzNcLWFguw==} peerDependencies: preact: '>=10' dependencies: - preact: 10.19.1 + preact: 10.20.1 pretty-format: 3.8.0 dev: false - /preact@10.19.1: - resolution: {integrity: sha512-ZSsUr6EFlwWH0btdXMj6+X+hJAZ1v+aUzKlfwBGokKB1ZO6Shz+D16LxQhM8f+E/UgkKbVe2tsWXtGTUMCkGpQ==} + /preact@10.11.3: + resolution: {integrity: sha512-eY93IVpod/zG3uMF22Unl8h9KkrcKIRs2EGar8hwLZZDU1lkjph303V9HZBwufh2s736U6VXuhD109LYqPoffg==} dev: false - /prebuild-install@7.1.1: - resolution: {integrity: sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==} + /preact@10.20.1: + resolution: {integrity: sha512-JIFjgFg9B2qnOoGiYMVBtrcFxHqn+dNXbq76bVmcaHYJFYR4lW67AOcXgAYQQTDYXDOg/kTZrKPNCdRgJ2UJmw==} + dev: false + + /prebuild-install@7.1.2: + resolution: {integrity: sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ==} engines: {node: '>=10'} hasBin: true dependencies: - detect-libc: 2.0.2 + detect-libc: 2.0.3 expand-template: 2.0.3 github-from-package: 0.0.0 minimist: 1.2.8 mkdirp-classic: 0.5.3 napi-build-utils: 1.0.2 - node-abi: 3.51.0 + node-abi: 3.57.0 pump: 3.0.0 rc: 1.2.8 simple-get: 4.0.1 @@ -5538,15 +6713,15 @@ packages: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} - /prettier-plugin-tailwindcss@0.5.7(prettier@3.1.0): - resolution: {integrity: sha512-4v6uESAgwCni6YF6DwJlRaDjg9Z+al5zM4JfngcazMy4WEf/XkPS5TEQjbD+DZ5iNuG6RrKQLa/HuX2SYzC3kQ==} + /prettier-plugin-tailwindcss@0.5.13(prettier@3.2.5): + resolution: {integrity: sha512-2tPWHCFNC+WRjAC4SIWQNSOdcL1NNkydXim8w7TDqlZi+/ulZYz2OouAI6qMtkggnPt7lGamboj6LcTMwcCvoQ==} engines: {node: '>=14.21.3'} peerDependencies: '@ianvs/prettier-plugin-sort-imports': '*' '@prettier/plugin-pug': '*' '@shopify/prettier-plugin-liquid': '*' - '@shufo/prettier-plugin-blade': '*' '@trivago/prettier-plugin-sort-imports': '*' + '@zackad/prettier-plugin-twig-melody': '*' prettier: ^3.0 prettier-plugin-astro: '*' prettier-plugin-css-order: '*' @@ -5555,9 +6730,9 @@ packages: prettier-plugin-marko: '*' prettier-plugin-organize-attributes: '*' prettier-plugin-organize-imports: '*' + prettier-plugin-sort-imports: '*' prettier-plugin-style-order: '*' prettier-plugin-svelte: '*' - prettier-plugin-twig-melody: '*' peerDependenciesMeta: '@ianvs/prettier-plugin-sort-imports': optional: true @@ -5565,10 +6740,10 @@ packages: optional: true '@shopify/prettier-plugin-liquid': optional: true - '@shufo/prettier-plugin-blade': - optional: true '@trivago/prettier-plugin-sort-imports': optional: true + '@zackad/prettier-plugin-twig-melody': + optional: true prettier-plugin-astro: optional: true prettier-plugin-css-order: @@ -5583,18 +6758,18 @@ packages: optional: true prettier-plugin-organize-imports: optional: true + prettier-plugin-sort-imports: + optional: true prettier-plugin-style-order: optional: true prettier-plugin-svelte: optional: true - prettier-plugin-twig-melody: - optional: true dependencies: - prettier: 3.1.0 + prettier: 3.2.5 dev: true - /prettier@3.1.0: - resolution: {integrity: sha512-TQLvXjq5IAibjh8EpBIkNKxO749UEWABoiIZehEPiY4GNpVdhaFKqSTu+QrlU6D2dPAfubRmtJTi4K4YkQ5eXw==} + /prettier@3.2.5: + resolution: {integrity: sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==} engines: {node: '>=14'} hasBin: true dev: true @@ -5612,13 +6787,13 @@ packages: resolution: {integrity: sha512-WuxUnVtlWL1OfZFQFuqvnvs6MiAGk9UNsBostyBOB0Is9wb5uRESevA6rnl/rkksXaGX3GzZhPup5d6Vp1nFew==} dev: false - /prisma@5.5.2: - resolution: {integrity: sha512-WQtG6fevOL053yoPl6dbHV+IWgKo25IRN4/pwAGqcWmg7CrtoCzvbDbN9fXUc7QS2KK0LimHIqLsaCOX/vHl8w==} + /prisma@5.12.0: + resolution: {integrity: sha512-zxw4WSIvpsyNbpv8r7Fxgm7nwTFVmD6wbN6VuH13lClOceSANDOMl4jO3oxE6VzhjxmnEJqOGZjON2T2UpmLag==} engines: {node: '>=16.13'} hasBin: true requiresBuild: true dependencies: - '@prisma/engines': 5.5.2 + '@prisma/engines': 5.12.0 /prop-types@15.8.1: resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} @@ -5627,8 +6802,8 @@ packages: object-assign: 4.1.1 react-is: 16.13.1 - /property-information@6.4.0: - resolution: {integrity: sha512-9t5qARVofg2xQqKtytzt+lZ4d1Qvj8t5B8fEwXK6qOfgRLgH/b13QlgEyDh033NOS31nXeFbYv7CLUDG1CeifQ==} + /property-information@6.5.0: + resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==} dev: false /prosemirror-changeset@2.2.1: @@ -5646,7 +6821,7 @@ packages: /prosemirror-commands@1.5.2: resolution: {integrity: sha512-hgLcPaakxH8tu6YvVAaILV2tXYsW3rAdDR8WNkeKGcgeMVQg3/TMhPdVoh7iAmfgVjZGtcOSjKiQaoeKjzd2mQ==} dependencies: - prosemirror-model: 1.19.3 + prosemirror-model: 1.19.4 prosemirror-state: 1.4.3 prosemirror-transform: 1.8.0 dev: false @@ -5656,29 +6831,29 @@ packages: dependencies: prosemirror-state: 1.4.3 prosemirror-transform: 1.8.0 - prosemirror-view: 1.32.4 + prosemirror-view: 1.33.3 dev: false /prosemirror-gapcursor@1.3.2: resolution: {integrity: sha512-wtjswVBd2vaQRrnYZaBCbyDqr232Ed4p2QPtRIUK5FuqHYKGWkEwl08oQM4Tw7DOR0FsasARV5uJFvMZWxdNxQ==} dependencies: prosemirror-keymap: 1.2.2 - prosemirror-model: 1.19.3 + prosemirror-model: 1.19.4 prosemirror-state: 1.4.3 - prosemirror-view: 1.32.4 + prosemirror-view: 1.33.3 dev: false - /prosemirror-history@1.3.2: - resolution: {integrity: sha512-/zm0XoU/N/+u7i5zepjmZAEnpvjDtzoPWW6VmKptcAnPadN/SStsBjMImdCEbb3seiNTpveziPTIrXQbHLtU1g==} + /prosemirror-history@1.4.0: + resolution: {integrity: sha512-UUiGzDVcqo1lovOPdi9YxxUps3oBFWAIYkXLu3Ot+JPv1qzVogRbcizxK3LhHmtaUxclohgiOVesRw5QSlMnbQ==} dependencies: prosemirror-state: 1.4.3 prosemirror-transform: 1.8.0 - prosemirror-view: 1.32.4 + prosemirror-view: 1.33.3 rope-sequence: 1.3.4 dev: false - /prosemirror-inputrules@1.2.1: - resolution: {integrity: sha512-3LrWJX1+ULRh5SZvbIQlwZafOXqp1XuV21MGBu/i5xsztd+9VD15x6OtN6mdqSFI7/8Y77gYUbQ6vwwJ4mr6QQ==} + /prosemirror-inputrules@1.4.0: + resolution: {integrity: sha512-6ygpPRuTJ2lcOXs9JkefieMst63wVJBgHZGl5QOytN7oSZs3Co/BYbc3Yx9zm9H37Bxw8kVzCnDsihsVsL4yEg==} dependencies: prosemirror-state: 1.4.3 prosemirror-transform: 1.8.0 @@ -5691,11 +6866,11 @@ packages: w3c-keyname: 2.2.8 dev: false - /prosemirror-markdown@1.11.2: - resolution: {integrity: sha512-Eu5g4WPiCdqDTGhdSsG9N6ZjACQRYrsAkrF9KYfdMaCmjIApH75aVncsWYOJvEk2i1B3i8jZppv3J/tnuHGiUQ==} + /prosemirror-markdown@1.12.0: + resolution: {integrity: sha512-6F5HS8Z0HDYiS2VQDZzfZP6A0s/I0gbkJy8NCzzDMtcsz3qrfqyroMMeoSjAmOhDITyon11NbXSzztfKi+frSQ==} dependencies: - markdown-it: 13.0.2 - prosemirror-model: 1.19.3 + markdown-it: 14.1.0 + prosemirror-model: 1.19.4 dev: false /prosemirror-menu@1.2.4: @@ -5703,12 +6878,12 @@ packages: dependencies: crelt: 1.0.6 prosemirror-commands: 1.5.2 - prosemirror-history: 1.3.2 + prosemirror-history: 1.4.0 prosemirror-state: 1.4.3 dev: false - /prosemirror-model@1.19.3: - resolution: {integrity: sha512-tgSnwN7BS7/UM0sSARcW+IQryx2vODKX4MI7xpqY2X+iaepJdKBPc7I4aACIsDV/LTaTjt12Z56MhDr9LsyuZQ==} + /prosemirror-model@1.19.4: + resolution: {integrity: sha512-RPmVXxUfOhyFdayHawjuZCxiROsm9L4FCUA6pWI+l7n2yCBsWy9VpdE1hpDHUS8Vad661YLY9AzqfjLhAKQ4iQ==} dependencies: orderedmap: 2.1.1 dev: false @@ -5716,13 +6891,13 @@ packages: /prosemirror-schema-basic@1.2.2: resolution: {integrity: sha512-/dT4JFEGyO7QnNTe9UaKUhjDXbTNkiWTq/N4VpKaF79bBjSExVV2NXmJpcM7z/gD7mbqNjxbmWW5nf1iNSSGnw==} dependencies: - prosemirror-model: 1.19.3 + prosemirror-model: 1.19.4 dev: false /prosemirror-schema-list@1.3.0: resolution: {integrity: sha512-Hz/7gM4skaaYfRPNgr421CU4GSwotmEwBVvJh5ltGiffUJwm7C8GfN/Bc6DR1EKEp5pDKhODmdXXyi9uIsZl5A==} dependencies: - prosemirror-model: 1.19.3 + prosemirror-model: 1.19.4 prosemirror-state: 1.4.3 prosemirror-transform: 1.8.0 dev: false @@ -5730,46 +6905,45 @@ packages: /prosemirror-state@1.4.3: resolution: {integrity: sha512-goFKORVbvPuAQaXhpbemJFRKJ2aixr+AZMGiquiqKxaucC6hlpHNZHWgz5R7dS4roHiwq9vDctE//CZ++o0W1Q==} dependencies: - prosemirror-model: 1.19.3 + prosemirror-model: 1.19.4 prosemirror-transform: 1.8.0 - prosemirror-view: 1.32.4 + prosemirror-view: 1.33.3 dev: false - /prosemirror-tables@1.3.4: - resolution: {integrity: sha512-z6uLSQ1BLC3rgbGwZmpfb+xkdvD7W/UOsURDfognZFYaTtc0gsk7u/t71Yijp2eLflVpffMk6X0u0+u+MMDvIw==} + /prosemirror-tables@1.3.7: + resolution: {integrity: sha512-oEwX1wrziuxMtwFvdDWSFHVUWrFJWt929kVVfHvtTi8yvw+5ppxjXZkMG/fuTdFo+3DXyIPSKfid+Be1npKXDA==} dependencies: prosemirror-keymap: 1.2.2 - prosemirror-model: 1.19.3 + prosemirror-model: 1.19.4 prosemirror-state: 1.4.3 prosemirror-transform: 1.8.0 - prosemirror-view: 1.32.4 + prosemirror-view: 1.33.3 dev: false - /prosemirror-trailing-node@2.0.7(prosemirror-model@1.19.3)(prosemirror-state@1.4.3)(prosemirror-view@1.32.4): - resolution: {integrity: sha512-8zcZORYj/8WEwsGo6yVCRXFMOfBo0Ub3hCUvmoWIZYfMP26WqENU0mpEP27w7mt8buZWuGrydBewr0tOArPb1Q==} + /prosemirror-trailing-node@2.0.8(prosemirror-model@1.19.4)(prosemirror-state@1.4.3)(prosemirror-view@1.33.3): + resolution: {integrity: sha512-ujRYhSuhQb1Jsarh1IHqb2KoSnRiD7wAMDGucP35DN7j5af6X7B18PfdPIrbwsPTqIAj0fyOvxbuPsWhNvylmA==} peerDependencies: prosemirror-model: ^1.19.0 prosemirror-state: ^1.4.2 prosemirror-view: ^1.31.2 dependencies: '@remirror/core-constants': 2.0.2 - '@remirror/core-helpers': 3.0.0 escape-string-regexp: 4.0.0 - prosemirror-model: 1.19.3 + prosemirror-model: 1.19.4 prosemirror-state: 1.4.3 - prosemirror-view: 1.32.4 + prosemirror-view: 1.33.3 dev: false /prosemirror-transform@1.8.0: resolution: {integrity: sha512-BaSBsIMv52F1BVVMvOmp1yzD3u65uC3HTzCBQV1WDPqJRQ2LuHKcyfn0jwqodo8sR9vVzMzZyI+Dal5W9E6a9A==} dependencies: - prosemirror-model: 1.19.3 + prosemirror-model: 1.19.4 dev: false - /prosemirror-view@1.32.4: - resolution: {integrity: sha512-WoT+ZYePp0WQvp5coABAysheZg9WttW3TSEUNgsfDQXmVOJlnjkbFbXicKPvWFLiC0ZjKt1ykbyoVKqhVnCiSQ==} + /prosemirror-view@1.33.3: + resolution: {integrity: sha512-P4Ao/bc4OrU/2yLIf8dL4lJaEtjLR3QjIvQHgJYp2jUS7kYM4bSR6okbBjkqzOs/FwUon6UGjTLdKMnPL1MZqw==} dependencies: - prosemirror-model: 1.19.3 + prosemirror-model: 1.19.4 prosemirror-state: 1.4.3 prosemirror-transform: 1.8.0 dev: false @@ -5785,6 +6959,11 @@ packages: once: 1.4.0 dev: false + /punycode.js@2.3.1: + resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} + engines: {node: '>=6'} + dev: false + /punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} @@ -5798,6 +6977,7 @@ packages: /queue-tick@1.0.1: resolution: {integrity: sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==} + requiresBuild: true dev: false /rc@1.2.8: @@ -5810,10 +6990,10 @@ packages: strip-json-comments: 2.0.1 dev: false - /react-day-picker@8.9.1(date-fns@2.30.0)(react@18.2.0): - resolution: {integrity: sha512-W0SPApKIsYq+XCtfGeMYDoU0KbsG3wfkYtlw8l+vZp6KoBXGOlhzBUp4tNx1XiwiOZwhfdGOlj7NGSCKGSlg5Q==} + /react-day-picker@8.10.0(date-fns@2.30.0)(react@18.2.0): + resolution: {integrity: sha512-mz+qeyrOM7++1NCb1ARXmkjMkzWVh2GL9YiPbRjKe0zHccvekk4HE+0MPOZOrosn8r8zTHIIeOUXTmXRqmkRmg==} peerDependencies: - date-fns: ^2.28.0 + date-fns: ^2.28.0 || ^3.0.0 react: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: date-fns: 2.30.0 @@ -5837,24 +7017,20 @@ packages: resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} dev: false - /react-lifecycles-compat@3.0.4: - resolution: {integrity: sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==} - dev: false - /react-markdown@8.0.7(@types/react@18.0.28)(react@18.2.0): resolution: {integrity: sha512-bvWbzG4MtOU62XqBx3Xx+zB2raaFFsq4mYiAzfjXJMEz2sixgeAfraA3tvzULF02ZdOMUOKTBFFaZJDDrq+BJQ==} peerDependencies: '@types/react': '>=16' react: '>=16' dependencies: - '@types/hast': 2.3.8 - '@types/prop-types': 15.7.10 + '@types/hast': 2.3.10 + '@types/prop-types': 15.7.12 '@types/react': 18.0.28 '@types/unist': 2.0.10 comma-separated-tokens: 2.0.3 hast-util-whitespace: 2.0.1 prop-types: 15.8.1 - property-information: 6.4.0 + property-information: 6.5.0 react: 18.2.0 react-is: 18.2.0 remark-parse: 10.0.2 @@ -5868,8 +7044,8 @@ packages: - supports-color dev: false - /react-remove-scroll-bar@2.3.4(@types/react@18.0.28)(react@18.2.0): - resolution: {integrity: sha512-63C4YQBUt0m6ALadE9XV56hV8BgJWDmmTPY758iIJjfQKt2nYwoUrPk0LXRXcB/yIj82T1/Ixfdpdk68LwIB0A==} + /react-remove-scroll-bar@2.3.6(@types/react@18.0.28)(react@18.2.0): + resolution: {integrity: sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g==} engines: {node: '>=10'} peerDependencies: '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -5896,36 +7072,24 @@ packages: dependencies: '@types/react': 18.0.28 react: 18.2.0 - react-remove-scroll-bar: 2.3.4(@types/react@18.0.28)(react@18.2.0) + react-remove-scroll-bar: 2.3.6(@types/react@18.0.28)(react@18.2.0) react-style-singleton: 2.2.1(@types/react@18.0.28)(react@18.2.0) tslib: 2.6.2 - use-callback-ref: 1.3.0(@types/react@18.0.28)(react@18.2.0) + use-callback-ref: 1.3.2(@types/react@18.0.28)(react@18.2.0) use-sidecar: 1.1.2(@types/react@18.0.28)(react@18.2.0) dev: false - /react-resize-detector@8.1.0(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-S7szxlaIuiy5UqLhLL1KY3aoyGHbZzsTpYal9eYMwCyKqoqoVLCmIgAgNyIM1FhnP2KyBygASJxdhejrzjMb+w==} + /react-smooth@4.0.1(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-OE4hm7XqR0jNOq3Qmk9mFLyd6p2+j6bvbPJ7qlB7+oo0eNcL2l7WQzG6MBnT3EXY6xzkLMUBec3AfewJdA0J8w==} peerDependencies: - react: ^16.0.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.0.0 || ^17.0.0 || ^18.0.0 - dependencies: - lodash: 4.17.21 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: false - - /react-smooth@2.0.5(prop-types@15.8.1)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-BMP2Ad42tD60h0JW6BFaib+RJuV5dsXJK9Baxiv/HlNFjvRLqA9xrNKxVWnUIZPQfzUwGXIlU/dSYLU+54YGQA==} - peerDependencies: - prop-types: ^15.6.0 - react: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 - react-dom: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: fast-equals: 5.0.1 prop-types: 15.8.1 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - react-transition-group: 2.9.0(react-dom@18.2.0)(react@18.2.0) + react-transition-group: 4.4.5(react-dom@18.2.0)(react@18.2.0) dev: false /react-style-singleton@2.2.1(@types/react@18.0.28)(react@18.2.0): @@ -5945,60 +7109,56 @@ packages: tslib: 2.6.2 dev: false - /react-textarea-autosize@8.5.3(@types/react@18.2.37)(react@18.2.0): + /react-textarea-autosize@8.5.3(@types/react@18.2.74)(react@18.2.0): resolution: {integrity: sha512-XT1024o2pqCuZSuBt9FwHlaDeNtVrtCXu0Rnz88t1jUGheCLa3PhjE1GH8Ctm2axEtvdCl5SUHYschyQ0L5QHQ==} engines: {node: '>=10'} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: - '@babel/runtime': 7.23.2 + '@babel/runtime': 7.24.4 react: 18.2.0 use-composed-ref: 1.3.0(react@18.2.0) - use-latest: 1.2.1(@types/react@18.2.37)(react@18.2.0) + use-latest: 1.2.1(@types/react@18.2.74)(react@18.2.0) transitivePeerDependencies: - '@types/react' dev: false - /react-transition-group@2.9.0(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-+HzNTCHpeQyl4MJ/bdE0u6XRMe9+XG/+aL4mCxVN4DnPBQ0/5bfHWPDuOZUzYdMj94daZaZdCCc1Dzt9R/xSSg==} + /react-transition-group@4.4.5(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==} peerDependencies: - react: '>=15.0.0' - react-dom: '>=15.0.0' + react: '>=16.6.0' + react-dom: '>=16.6.0' dependencies: - dom-helpers: 3.4.0 + '@babel/runtime': 7.24.4 + dom-helpers: 5.2.1 loose-envify: 1.4.0 prop-types: 15.8.1 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - react-lifecycles-compat: 3.0.4 dev: false - /react-transition-group@4.4.5(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==} + /react-transition-state@2.1.1(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-kQx5g1FVu9knoz1T1WkapjUgFz08qQ/g1OmuWGi3/AoEFfS0kStxrPlZx81urjCXdz2d+1DqLpU6TyLW/Ro04Q==} peerDependencies: - react: '>=16.6.0' - react-dom: '>=16.6.0' + react: '>=16.8.0' + react-dom: '>=16.8.0' dependencies: - '@babel/runtime': 7.23.2 - dom-helpers: 5.2.1 - loose-envify: 1.4.0 - prop-types: 15.8.1 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /react-tweet@3.1.1(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-8GQLa5y0G56kvGQkN7OiaKkjFAhWYVdyFq62ioY2qVtpMrjchVU+3KnqneCyp0+BemOQZkg6WWp/qoCNeEMH6A==} + /react-tweet@3.2.0(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-eYLAX5ViOICQT/vkte/IzYZZDoBnl7hDO3Ns4++lKEFr/+BohPK5Rg+Lvbfx78Qtn3AjfDG5c6n+rOt7c2J6qg==} peerDependencies: react: '>= 18.0.0' react-dom: '>= 18.0.0' dependencies: - '@swc/helpers': 0.5.3 - clsx: 1.2.1 + '@swc/helpers': 0.5.8 + clsx: 2.1.0 date-fns: 2.30.0 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - swr: 2.2.4(react@18.2.0) + swr: 2.2.5(react@18.2.0) dev: false /react@18.2.0: @@ -6034,49 +7194,48 @@ packages: decimal.js-light: 2.5.1 dev: false - /recharts@2.9.3(prop-types@15.8.1)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-B61sKrDlTxHvYwOCw8eYrD6rTA2a2hJg0avaY8qFI1ZYdHKvU18+J5u7sBMFg//wfJ/C5RL5+HsXt5e8tcJNLg==} - engines: {node: '>=12'} + /recharts@2.12.4(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-dM4skmk4fDKEDjL9MNunxv6zcTxePGVEzRnLDXALRpfJ85JoQ0P0APJ/CoJlmnQI0gPjBlOkjzrwrfQrRST3KA==} + engines: {node: '>=14'} peerDependencies: - prop-types: ^15.6.0 react: ^16.0.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.0.0 || ^17.0.0 || ^18.0.0 dependencies: - classnames: 2.3.2 + clsx: 2.1.0 eventemitter3: 4.0.7 lodash: 4.17.21 - prop-types: 15.8.1 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) react-is: 16.13.1 - react-resize-detector: 8.1.0(react-dom@18.2.0)(react@18.2.0) - react-smooth: 2.0.5(prop-types@15.8.1)(react-dom@18.2.0)(react@18.2.0) + react-smooth: 4.0.1(react-dom@18.2.0)(react@18.2.0) recharts-scale: 0.4.5 - tiny-invariant: 1.3.1 - victory-vendor: 36.6.12 + tiny-invariant: 1.3.3 + victory-vendor: 36.9.2 dev: false - /reflect.getprototypeof@1.0.4: - resolution: {integrity: sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==} + /reflect.getprototypeof@1.0.6: + resolution: {integrity: sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 - get-intrinsic: 1.2.2 + es-abstract: 1.23.3 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 globalthis: 1.0.3 which-builtin-type: 1.1.3 - /regenerator-runtime@0.14.0: - resolution: {integrity: sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==} + /regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} - /regexp.prototype.flags@1.5.1: - resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==} + /regexp.prototype.flags@1.5.2: + resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - set-function-name: 2.0.1 + es-errors: 1.3.0 + set-function-name: 2.0.2 /remark-mdx@2.3.0: resolution: {integrity: sha512-g53hMkpM0I98MU266IzDFMrTD980gNF3BJnkyFcmN+dD873mQeD5rdMO3Y2X+x8umQfbSE0PcoEDl7ledSA+2g==} @@ -6100,7 +7259,7 @@ packages: /remark-rehype@10.1.0: resolution: {integrity: sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw==} dependencies: - '@types/hast': 2.3.8 + '@types/hast': 2.3.10 '@types/mdast': 3.0.15 mdast-util-to-hast: 12.3.0 unified: 10.1.2 @@ -6178,12 +7337,12 @@ packages: mri: 1.2.0 dev: false - /safe-array-concat@1.0.1: - resolution: {integrity: sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==} + /safe-array-concat@1.1.2: + resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} engines: {node: '>=0.4'} dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 + call-bind: 1.0.7 + get-intrinsic: 1.2.4 has-symbols: 1.0.3 isarray: 2.0.5 @@ -6191,11 +7350,12 @@ packages: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} dev: false - /safe-regex-test@1.0.0: - resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} + /safe-regex-test@1.0.3: + resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 + call-bind: 1.0.7 + es-errors: 1.3.0 is-regex: 1.1.4 /safer-buffer@2.1.2: @@ -6227,15 +7387,24 @@ packages: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true - /semver@7.5.4: - resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} + /semver@7.6.0: + resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==} engines: {node: '>=10'} hasBin: true dependencies: lru-cache: 6.0.0 - /seroval@0.12.3: - resolution: {integrity: sha512-5WDeMpv7rmEylsypRj1iwRVHE/QLsMLiZ+9savlNNQEVdgGia1iRMb7qyaAagY0wu/7+QTe6d2wldk/lgaLb6g==} + /seroval-plugins@1.0.5(seroval@1.0.5): + resolution: {integrity: sha512-8+pDC1vOedPXjKG7oz8o+iiHrtF2WswaMQJ7CKFpccvSYfrzmvKY9zOJWCg+881722wIHfwkdnRmiiDm9ym+zQ==} + engines: {node: '>=10'} + peerDependencies: + seroval: ^1.0 + dependencies: + seroval: 1.0.5 + dev: false + + /seroval@1.0.5: + resolution: {integrity: sha512-TM+Z11tHHvQVQKeNlOUonOWnsNM+2IBwZ4vwoi4j3zKzIpc5IDw8WPwCfcc8F17wy6cBcJGbZbFOR0UCuTZHQA==} engines: {node: '>=10'} dev: false @@ -6243,22 +7412,25 @@ packages: resolution: {integrity: sha512-qepMx2JxAa5jjfzxG79yPPq+8BuFToHd1hm7kI+Z4zAq1ftQiP7HcxMhDDItrbtwVeLg/cY2JnKnrcFkmiswNA==} dev: false - /set-function-length@1.1.1: - resolution: {integrity: sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==} + /set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} engines: {node: '>= 0.4'} dependencies: - define-data-property: 1.1.1 - get-intrinsic: 1.2.2 + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 gopd: 1.0.1 - has-property-descriptors: 1.0.1 + has-property-descriptors: 1.0.2 - /set-function-name@2.0.1: - resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} + /set-function-name@2.0.2: + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} engines: {node: '>= 0.4'} dependencies: - define-data-property: 1.1.1 + define-data-property: 1.1.4 + es-errors: 1.3.0 functions-have-names: 1.2.3 - has-property-descriptors: 1.0.1 + has-property-descriptors: 1.0.2 /sharp@0.32.6: resolution: {integrity: sha512-KyLTWwgcR9Oe4d9HwCwNM2l7+J0dUQwn/yf7S0EnTtb0eVS4RxO0eUSvxPtzT4F3SY+C4K6fqdv/DO27sJ/v/w==} @@ -6266,12 +7438,12 @@ packages: requiresBuild: true dependencies: color: 4.2.3 - detect-libc: 2.0.2 + detect-libc: 2.0.3 node-addon-api: 6.1.0 - prebuild-install: 7.1.1 - semver: 7.5.4 + prebuild-install: 7.1.2 + semver: 7.6.0 simple-get: 4.0.1 - tar-fs: 3.0.4 + tar-fs: 3.0.5 tunnel-agent: 0.6.0 dev: false @@ -6285,13 +7457,19 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - /side-channel@1.0.4: - resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} + /side-channel@1.0.6: + resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 object-inspect: 1.13.1 + /signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + /simple-concat@1.0.1: resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} dev: false @@ -6310,25 +7488,30 @@ packages: is-arrayish: 0.3.2 dev: false + /sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + dev: true + /slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} - /solid-js@1.8.5: - resolution: {integrity: sha512-xvtJvzJzWbsn35oKFhW9kNwaxG1Z/YLMsDp4tLVcYZTMPzvzQ8vEZuyDQ6nt7xDArVgZJ7TUFrJUwrui/oq53A==} + /solid-js@1.8.16: + resolution: {integrity: sha512-rja94MNU9flF3qQRLNsu60QHKBDKBkVE1DldJZPIfn2ypIn3NV2WpSbGTQIvsyGPBo+9E2IMjwqnqpbgfWuzeg==} dependencies: - csstype: 3.1.2 - seroval: 0.12.3 + csstype: 3.1.3 + seroval: 1.0.5 + seroval-plugins: 1.0.5(seroval@1.0.5) dev: false - /solid-swr-store@0.10.7(solid-js@1.8.5)(swr-store@0.10.6): + /solid-swr-store@0.10.7(solid-js@1.8.16)(swr-store@0.10.6): resolution: {integrity: sha512-A6d68aJmRP471aWqKKPE2tpgOiR5fH4qXQNfKIec+Vap+MGQm3tvXlT8n0I8UgJSlNAsSAUuw2VTviH2h3Vv5g==} engines: {node: '>=10'} peerDependencies: solid-js: ^1.2 swr-store: ^0.10 dependencies: - solid-js: 1.8.5 + solid-js: 1.8.16 swr-store: 0.10.6 dev: false @@ -6342,8 +7525,8 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false - /sonner@1.2.0(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-4bIPKrhF+Z4yEC4EZvNBswcVzMrUhztOQXqyIoiZqiqN1TT39FeK+TgRsQidvvztnYgOn4+S3LdAsri61c7ATA==} + /sonner@1.4.41(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-uG511ggnnsw6gcn/X+YKkWPo5ep9il9wYi3QJxHsYe7yTZ4+cOd1wuodOUmOpFuXL+/RE3R04LczdNCDygTDgQ==} peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 @@ -6352,16 +7535,20 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false - /source-map-js@1.0.2: - resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} + /source-map-js@1.2.0: + resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} engines: {node: '>=0.10.0'} + /source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + dev: true + /source-map@0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} - requiresBuild: true - dev: false - optional: true /source-map@0.7.4: resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} @@ -6372,16 +7559,21 @@ packages: resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} dev: false + /split2@4.2.0: + resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} + engines: {node: '>= 10.x'} + dev: false + /sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} dev: false - /sswr@2.0.0(svelte@4.2.3): + /sswr@2.0.0(svelte@4.2.12): resolution: {integrity: sha512-mV0kkeBHcjcb0M5NqKtKVg/uTIYNlIIniyDfSGrSfxpEdM9C365jK0z55pl9K0xAkNTJi2OAOVFQpgMPUk+V0w==} peerDependencies: svelte: ^4.0.0 dependencies: - svelte: 4.2.3 + svelte: 4.2.12 swrev: 4.0.0 dev: false @@ -6397,47 +7589,71 @@ packages: engines: {node: '>=10.0.0'} dev: false - /streamx@2.15.5: - resolution: {integrity: sha512-9thPGMkKC2GctCzyCUjME3yR03x2xNo0GPKGkRw2UMYN+gqWa9uqpyNWhmsNCutU5zHmkUum0LsCRQTXUgUCAg==} + /streamx@2.16.1: + resolution: {integrity: sha512-m9QYj6WygWyWa3H1YY69amr4nVgy61xfjys7xO7kviL5rfIEc2naf+ewFiOA+aEJD7y0JO3h2GoiUv4TDwEGzQ==} dependencies: fast-fifo: 1.3.2 queue-tick: 1.0.1 + optionalDependencies: + bare-events: 2.2.2 dev: false - /string.prototype.matchall@4.0.10: - resolution: {integrity: sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==} + /string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + /string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.0 + + /string.prototype.matchall@4.0.11: + resolution: {integrity: sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 - get-intrinsic: 1.2.2 + es-abstract: 1.23.3 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + get-intrinsic: 1.2.4 + gopd: 1.0.1 has-symbols: 1.0.3 - internal-slot: 1.0.6 - regexp.prototype.flags: 1.5.1 - set-function-name: 2.0.1 - side-channel: 1.0.4 + internal-slot: 1.0.7 + regexp.prototype.flags: 1.5.2 + set-function-name: 2.0.2 + side-channel: 1.0.6 - /string.prototype.trim@1.2.8: - resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} + /string.prototype.trim@1.2.9: + resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 - /string.prototype.trimend@1.0.7: - resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} + /string.prototype.trimend@1.0.8: + resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-object-atoms: 1.0.0 - /string.prototype.trimstart@1.0.7: - resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} + /string.prototype.trimstart@1.0.8: + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-object-atoms: 1.0.0 /string_decoder@1.3.0: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} @@ -6445,8 +7661,8 @@ packages: safe-buffer: 5.2.1 dev: false - /stringify-entities@4.0.3: - resolution: {integrity: sha512-BP9nNHMhhfcMbiuQKCqMjhDP5yBCAxsPu4pHFFzJ6Alo9dZgY4VLDPutXqIjpRiMoKdp7Av85Gr73Q5uH9k7+g==} + /stringify-entities@4.0.4: + resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} dependencies: character-entities-html4: 2.1.0 character-entities-legacy: 3.0.0 @@ -6458,6 +7674,12 @@ packages: dependencies: ansi-regex: 5.0.1 + /strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + dependencies: + ansi-regex: 6.0.1 + /strip-bom-string@1.0.0: resolution: {integrity: sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==} engines: {node: '>=0.10.0'} @@ -6499,19 +7721,26 @@ packages: react: 18.2.0 dev: false - /sucrase@3.34.0: - resolution: {integrity: sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==} - engines: {node: '>=8'} + /sucrase@3.35.0: + resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} + engines: {node: '>=16 || 14 >=14.17'} hasBin: true dependencies: - '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/gen-mapping': 0.3.5 commander: 4.1.1 - glob: 7.1.6 + glob: 10.3.12 lines-and-columns: 1.2.4 mz: 2.7.0 pirates: 4.0.6 ts-interface-checker: 0.1.13 + /superjson@2.2.1: + resolution: {integrity: sha512-8iGv75BYOa0xRJHK5vRLEjE2H/i4lulTjzpUXic3Eg8akftYjkmQDa8JARQ42rlczXyFR3IeRoeFCc7RxHsYZA==} + engines: {node: '>=16'} + dependencies: + copy-anything: 3.0.5 + dev: true + /supports-color@5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} engines: {node: '>=4'} @@ -6529,22 +7758,23 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - /svelte@4.2.3: - resolution: {integrity: sha512-sqmG9KC6uUc7fb3ZuWoxXvqk6MI9Uu4ABA1M0fYDgTlFYu1k02xp96u6U9+yJZiVm84m9zge7rrA/BNZdFpOKw==} + /svelte@4.2.12: + resolution: {integrity: sha512-d8+wsh5TfPwqVzbm4/HCXC783/KPHV60NvwitJnyTA5lWn1elhXMNWhXGCJ7PwPa8qFUnyJNIyuIRt2mT0WMug==} engines: {node: '>=16'} dependencies: - '@ampproject/remapping': 2.2.1 + '@ampproject/remapping': 2.3.0 '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.20 - acorn: 8.11.2 + '@jridgewell/trace-mapping': 0.3.25 + '@types/estree': 1.0.5 + acorn: 8.11.3 aria-query: 5.3.0 - axobject-query: 3.2.1 + axobject-query: 4.0.0 code-red: 1.0.4 css-tree: 2.3.1 estree-walker: 3.0.3 is-reference: 3.0.2 locate-character: 3.0.0 - magic-string: 0.30.5 + magic-string: 0.30.9 periscopic: 3.1.0 dev: false @@ -6564,8 +7794,8 @@ packages: use-sync-external-store: 1.2.0(react@18.2.0) dev: false - /swr@2.2.4(react@18.2.0): - resolution: {integrity: sha512-njiZ/4RiIhoOlAaLYDqwz5qH/KZXVilRLvomrx83HjzCWTfa+InyfAjv05PSFxnmLzZkNO9ZfvgoqzAaEI4sGQ==} + /swr@2.2.5(react@18.2.0): + resolution: {integrity: sha512-QtxqyclFeAsxEUeZIYmsaQ0UjimSq1RZ9Un7I68/0ClKK/U3LoyQunwkQfJZr2fc22DfIXLNDc2wFyTEikCUpg==} peerDependencies: react: ^16.11.0 || ^17.0.0 || ^18.0.0 dependencies: @@ -6578,12 +7808,12 @@ packages: resolution: {integrity: sha512-LqVcOHSB4cPGgitD1riJ1Hh4vdmITOp+BkmfmXRh4hSF/t7EnS4iD+SOTmq7w5pPm/SiPeto4ADbKS6dHUDWFA==} dev: false - /swrv@1.0.4(vue@3.3.8): + /swrv@1.0.4(vue@3.4.21): resolution: {integrity: sha512-zjEkcP8Ywmj+xOJW3lIT65ciY/4AL4e/Or7Gj0MzU3zBJNMdJiT8geVZhINavnlHRMMCcJLHhraLTAiDOTmQ9g==} peerDependencies: vue: '>=3.2.26 < 4' dependencies: - vue: 3.3.8(typescript@5.2.2) + vue: 3.4.21(typescript@5.4.3) dev: false /symbol-tree@3.2.4: @@ -6598,28 +7828,28 @@ packages: resolution: {integrity: sha512-3mFKyCo/MBcgyOTlrY8T7odzZFx+w+qKSMAmdFzRvqBfLlSigU6TZnlFHK0lkMwj9Bj8OYU+9yW9lmGuS0QEnQ==} dev: false - /tailwind-merge@2.0.0: - resolution: {integrity: sha512-WO8qghn9yhsldLSg80au+3/gY9E4hFxIvQ3qOmlpXnqpDKoMruKfi/56BbbMg6fHTQJ9QD3cc79PoWqlaQE4rw==} + /tailwind-merge@2.2.2: + resolution: {integrity: sha512-tWANXsnmJzgw6mQ07nE3aCDkCK4QdT3ThPMCzawoYA2Pws7vSTCvz3Vrjg61jVUGfFZPJzxEP+NimbcW+EdaDw==} dependencies: - '@babel/runtime': 7.23.2 + '@babel/runtime': 7.24.4 dev: false - /tailwindcss-animate@1.0.7(tailwindcss@3.3.5): + /tailwindcss-animate@1.0.7(tailwindcss@3.4.3): resolution: {integrity: sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==} peerDependencies: tailwindcss: '>=3.0.0 || insiders' dependencies: - tailwindcss: 3.3.5 + tailwindcss: 3.4.3 dev: true - /tailwindcss@3.3.5: - resolution: {integrity: sha512-5SEZU4J7pxZgSkv7FP1zY8i2TIAOooNZ1e/OGtxIEv6GltpoiXUqWvLy89+a10qYTB1N5Ifkuw9lqQkN9sscvA==} + /tailwindcss@3.4.3: + resolution: {integrity: sha512-U7sxQk/n397Bmx4JHbJx/iSOOv5G+II3f1kpLpY2QeUv5DcPdcTsYLlusZfq1NthHS1c1cZoyFmmkex1rzke0A==} engines: {node: '>=14.0.0'} hasBin: true dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 - chokidar: 3.5.3 + chokidar: 3.6.0 didyoumean: 1.2.2 dlv: 1.1.3 fast-glob: 3.3.2 @@ -6631,14 +7861,14 @@ packages: normalize-path: 3.0.0 object-hash: 3.0.0 picocolors: 1.0.0 - postcss: 8.4.31 - postcss-import: 15.1.0(postcss@8.4.31) - postcss-js: 4.0.1(postcss@8.4.31) - postcss-load-config: 4.0.1(postcss@8.4.31) - postcss-nested: 6.0.1(postcss@8.4.31) - postcss-selector-parser: 6.0.13 + postcss: 8.4.38 + postcss-import: 15.1.0(postcss@8.4.38) + postcss-js: 4.0.1(postcss@8.4.38) + postcss-load-config: 4.0.2(postcss@8.4.38) + postcss-nested: 6.0.1(postcss@8.4.38) + postcss-selector-parser: 6.0.16 resolve: 1.22.8 - sucrase: 3.34.0 + sucrase: 3.35.0 transitivePeerDependencies: - ts-node @@ -6655,12 +7885,14 @@ packages: tar-stream: 2.2.0 dev: false - /tar-fs@3.0.4: - resolution: {integrity: sha512-5AFQU8b9qLfZCX9zp2duONhPmZv0hGYiBPJsyUdqMjzq/mqVpy/rEUSeHk1+YitmxugaptgBh5oDGU3VsAJq4w==} + /tar-fs@3.0.5: + resolution: {integrity: sha512-JOgGAmZyMgbqpLwct7ZV8VzkEB6pxXFBVErLtb+XCOqzc6w1xiWKI9GVd6bwk68EX7eJ4DWmfXVmq8K2ziZTGg==} dependencies: - mkdirp-classic: 0.5.3 pump: 3.0.0 - tar-stream: 3.1.6 + tar-stream: 3.1.7 + optionalDependencies: + bare-fs: 2.2.3 + bare-path: 2.1.1 dev: false /tar-stream@2.2.0: @@ -6674,12 +7906,12 @@ packages: readable-stream: 3.6.2 dev: false - /tar-stream@3.1.6: - resolution: {integrity: sha512-B/UyjYwPpMBv+PaFSWAmtYjwdrlEaZQEhMIBFNC5oEG8lpiW8XjcSdmEaClj28ArfKScKHs2nshz3k2le6crsg==} + /tar-stream@3.1.7: + resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==} dependencies: - b4a: 1.6.4 + b4a: 1.6.6 fast-fifo: 1.3.2 - streamx: 2.15.5 + streamx: 2.16.1 dev: false /text-table@0.2.0: @@ -6696,13 +7928,15 @@ packages: dependencies: any-promise: 1.3.0 - /throttle-debounce@3.0.1: - resolution: {integrity: sha512-dTEWWNu6JmeVXY0ZYoPuH5cRIwc0MeGbJwah9KUNYSJwommQpCzTySTpEe8Gs1J23aeWEuAobe4Ag7EHVt/LOg==} - engines: {node: '>=10'} - dev: false + /timers-ext@0.1.7: + resolution: {integrity: sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==} + dependencies: + es5-ext: 0.10.64 + next-tick: 1.1.0 + dev: true - /tiny-invariant@1.3.1: - resolution: {integrity: sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==} + /tiny-invariant@1.3.3: + resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} dev: false /tippy.js@6.3.7: @@ -6711,16 +7945,16 @@ packages: '@popperjs/core': 2.11.8 dev: false - /tiptap-markdown@0.8.4(@tiptap/core@2.1.12): - resolution: {integrity: sha512-aCwr8cpVdZeb/2J0ffz8PvpLmQBcFE9GOxk2vB0Y9zlJEGWnSiGo1BWnwaeiyAdQqfBzV7NyNg+oz2A/MbC/Sg==} + /tiptap-markdown@0.8.10(@tiptap/core@2.2.4): + resolution: {integrity: sha512-iDVkR2BjAqkTDtFX0h94yVvE2AihCXlF0Q7RIXSJPRSR5I0PA1TMuAg6FHFpmqTn4tPxJ0by0CK7PUMlnFLGEQ==} peerDependencies: '@tiptap/core': ^2.0.3 dependencies: - '@tiptap/core': 2.1.12(@tiptap/pm@2.1.12) - '@types/markdown-it': 12.2.3 - markdown-it: 13.0.2 + '@tiptap/core': 2.2.4(@tiptap/pm@2.2.4) + '@types/markdown-it': 13.0.7 + markdown-it: 14.1.0 markdown-it-task-lists: 2.1.1 - prosemirror-markdown: 1.11.2 + prosemirror-markdown: 1.12.0 dev: false /to-fast-properties@2.0.0: @@ -6755,23 +7989,24 @@ packages: resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} dev: false - /trough@2.1.0: - resolution: {integrity: sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==} + /trough@2.2.0: + resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} dev: false - /ts-api-utils@1.0.3(typescript@5.2.2): - resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} - engines: {node: '>=16.13.0'} + /ts-api-utils@1.3.0(typescript@5.4.3): + resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} + engines: {node: '>=16'} peerDependencies: typescript: '>=4.2.0' dependencies: - typescript: 5.2.2 + typescript: 5.4.3 + dev: true /ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} - /tsconfig-paths@3.14.2: - resolution: {integrity: sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==} + /tsconfig-paths@3.15.0: + resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} dependencies: '@types/json5': 0.0.29 json5: 1.0.2 @@ -6817,44 +8052,49 @@ packages: resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} engines: {node: '>=10'} - /type-fest@2.19.0: - resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} - engines: {node: '>=12.20'} - dev: false + /type@2.7.2: + resolution: {integrity: sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==} + dev: true - /typed-array-buffer@1.0.0: - resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} + /typed-array-buffer@1.0.2: + resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 - is-typed-array: 1.1.12 + call-bind: 1.0.7 + es-errors: 1.3.0 + is-typed-array: 1.1.13 - /typed-array-byte-length@1.0.0: - resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} + /typed-array-byte-length@1.0.1: + resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 for-each: 0.3.3 - has-proto: 1.0.1 - is-typed-array: 1.1.12 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 - /typed-array-byte-offset@1.0.0: - resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} + /typed-array-byte-offset@1.0.2: + resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} engines: {node: '>= 0.4'} dependencies: - available-typed-arrays: 1.0.5 - call-bind: 1.0.5 + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 for-each: 0.3.3 - has-proto: 1.0.1 - is-typed-array: 1.1.12 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 - /typed-array-length@1.0.4: - resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} + /typed-array-length@1.0.6: + resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 for-each: 0.3.3 - is-typed-array: 1.1.12 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + possible-typed-array-names: 1.0.0 /typescript@4.9.5: resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} @@ -6862,19 +8102,19 @@ packages: hasBin: true dev: false - /typescript@5.2.2: - resolution: {integrity: sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==} + /typescript@5.4.3: + resolution: {integrity: sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg==} engines: {node: '>=14.17'} hasBin: true - /uc.micro@1.0.6: - resolution: {integrity: sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==} + /uc.micro@2.1.0: + resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==} dev: false /unbox-primitive@1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 has-bigints: 1.0.2 has-symbols: 1.0.3 which-boxed-primitive: 1.0.2 @@ -6893,7 +8133,7 @@ packages: resolution: {integrity: sha512-l3ydWhlhOJzMVOYkymLykcRRXqbUaQriERtR70B9LzNkZ4bX52Fc8wbTDneMiwo8T+AemZXvXaTx+9o5ROxrXg==} engines: {node: '>=14.0'} dependencies: - '@fastify/busboy': 2.1.0 + '@fastify/busboy': 2.1.1 dev: false /unified@10.1.2: @@ -6904,7 +8144,7 @@ packages: extend: 3.0.2 is-buffer: 2.0.5 is-plain-obj: 4.1.0 - trough: 2.1.0 + trough: 2.2.0 vfile: 5.3.7 dev: false @@ -6984,14 +8224,14 @@ packages: engines: {node: '>= 4.0.0'} dev: false - /update-browserslist-db@1.0.13(browserslist@4.22.1): + /update-browserslist-db@1.0.13(browserslist@4.23.0): resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' dependencies: - browserslist: 4.22.1 - escalade: 3.1.1 + browserslist: 4.23.0 + escalade: 3.1.2 picocolors: 1.0.0 dev: true @@ -7007,8 +8247,8 @@ packages: requires-port: 1.0.0 dev: false - /use-callback-ref@1.3.0(@types/react@18.0.28)(react@18.2.0): - resolution: {integrity: sha512-3FT9PRuRdbB9HfXhEq35u4oZkvpJ5kuYbpqhCfmiZyReuRgpnhDlbr2ZEnnuS0RrJAPn6l23xjFg9kpDM+Ms7w==} + /use-callback-ref@1.3.2(@types/react@18.0.28)(react@18.2.0): + resolution: {integrity: sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA==} engines: {node: '>=10'} peerDependencies: '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -7048,7 +8288,7 @@ packages: react: 18.2.0 dev: false - /use-isomorphic-layout-effect@1.1.2(@types/react@18.2.37)(react@18.2.0): + /use-isomorphic-layout-effect@1.1.2(@types/react@18.2.74)(react@18.2.0): resolution: {integrity: sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==} peerDependencies: '@types/react': '*' @@ -7057,11 +8297,11 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 18.2.37 + '@types/react': 18.2.74 react: 18.2.0 dev: false - /use-latest@1.2.1(@types/react@18.2.37)(react@18.2.0): + /use-latest@1.2.1(@types/react@18.2.74)(react@18.2.0): resolution: {integrity: sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==} peerDependencies: '@types/react': '*' @@ -7070,9 +8310,9 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 18.2.37 + '@types/react': 18.2.74 react: 18.2.0 - use-isomorphic-layout-effect: 1.1.2(@types/react@18.2.37)(react@18.2.0) + use-isomorphic-layout-effect: 1.1.2(@types/react@18.2.74)(react@18.2.0) dev: false /use-sidecar@1.1.2(@types/react@18.0.28)(react@18.2.0): @@ -7104,7 +8344,7 @@ packages: engines: {node: '>=6.14.2'} requiresBuild: true dependencies: - node-gyp-build: 4.6.1 + node-gyp-build: 4.8.0 dev: false /util-deprecate@1.0.2: @@ -7121,7 +8361,7 @@ packages: hasBin: true dependencies: dequal: 2.0.3 - diff: 5.1.0 + diff: 5.2.0 kleur: 4.1.5 sade: 1.8.1 dev: false @@ -7150,14 +8390,14 @@ packages: vfile-message: 3.1.4 dev: false - /victory-vendor@36.6.12: - resolution: {integrity: sha512-pJrTkNHln+D83vDCCSUf0ZfxBvIaVrFHmrBOsnnLAbdqfudRACAj51He2zU94/IWq9464oTADcPVkmWAfNMwgA==} + /victory-vendor@36.9.2: + resolution: {integrity: sha512-PnpQQMuxlwYdocC8fIJqVXvkeViHYzotI+NJrCuav0ZYFoq912ZHBk3mCeuj+5/VpodOjPe1z0Fk2ihgzlXqjQ==} dependencies: '@types/d3-array': 3.2.1 '@types/d3-ease': 3.0.2 '@types/d3-interpolate': 3.0.4 '@types/d3-scale': 4.0.8 - '@types/d3-shape': 3.1.5 + '@types/d3-shape': 3.1.6 '@types/d3-time': 3.0.3 '@types/d3-timer': 3.0.2 d3-array: 3.2.4 @@ -7169,20 +8409,20 @@ packages: d3-timer: 3.0.1 dev: false - /vue@3.3.8(typescript@5.2.2): - resolution: {integrity: sha512-5VSX/3DabBikOXMsxzlW8JyfeLKlG9mzqnWgLQLty88vdZL7ZJgrdgBOmrArwxiLtmS+lNNpPcBYqrhE6TQW5w==} + /vue@3.4.21(typescript@5.4.3): + resolution: {integrity: sha512-5hjyV/jLEIKD/jYl4cavMcnzKwjMKohureP8ejn3hhEjwhWIhWeuzL2kJAjzl/WyVsgPY56Sy4Z40C3lVshxXA==} peerDependencies: typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - '@vue/compiler-dom': 3.3.8 - '@vue/compiler-sfc': 3.3.8 - '@vue/runtime-dom': 3.3.8 - '@vue/server-renderer': 3.3.8(vue@3.3.8) - '@vue/shared': 3.3.8 - typescript: 5.2.2 + '@vue/compiler-dom': 3.4.21 + '@vue/compiler-sfc': 3.4.21 + '@vue/runtime-dom': 3.4.21 + '@vue/server-renderer': 3.4.21(vue@3.4.21) + '@vue/shared': 3.4.21 + typescript: 5.4.3 dev: false /w3c-keyname@2.2.8: @@ -7243,7 +8483,7 @@ packages: engines: {node: '>= 0.4'} dependencies: function.prototype.name: 1.1.6 - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 is-async-function: 2.0.0 is-date-object: 1.0.5 is-finalizationregistry: 1.0.2 @@ -7252,26 +8492,27 @@ packages: is-weakref: 1.0.2 isarray: 2.0.5 which-boxed-primitive: 1.0.2 - which-collection: 1.0.1 - which-typed-array: 1.1.13 + which-collection: 1.0.2 + which-typed-array: 1.1.15 - /which-collection@1.0.1: - resolution: {integrity: sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==} + /which-collection@1.0.2: + resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} + engines: {node: '>= 0.4'} dependencies: - is-map: 2.0.2 - is-set: 2.0.2 - is-weakmap: 2.0.1 - is-weakset: 2.0.2 + is-map: 2.0.3 + is-set: 2.0.3 + is-weakmap: 2.0.2 + is-weakset: 2.0.3 - /which-typed-array@1.1.13: - resolution: {integrity: sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==} + /which-typed-array@1.1.15: + resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} engines: {node: '>= 0.4'} dependencies: - available-typed-arrays: 1.0.5 - call-bind: 1.0.5 + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 for-each: 0.3.3 gopd: 1.0.1 - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 /which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} @@ -7280,6 +8521,26 @@ packages: dependencies: isexe: 2.0.0 + /wordwrap@1.0.0: + resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} + dev: true + + /wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + /wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + dependencies: + ansi-styles: 6.2.1 + string-width: 5.1.2 + strip-ansi: 7.1.0 + /wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} @@ -7299,6 +8560,19 @@ packages: utf-8-validate: 6.0.3 dev: false + /ws@8.16.0: + resolution: {integrity: sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: false + /xml-name-validator@4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} @@ -7316,9 +8590,10 @@ packages: /yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - /yaml@2.3.4: - resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==} + /yaml@2.4.1: + resolution: {integrity: sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg==} engines: {node: '>= 14'} + hasBin: true /yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} @@ -7328,6 +8603,10 @@ packages: resolution: {integrity: sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==} dev: false + /zod@3.22.4: + resolution: {integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==} + dev: true + /zwitch@2.0.4: resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} dev: false From 3454c2199ab72e2bf72859b6f97738f73ea8a182 Mon Sep 17 00:00:00 2001 From: realmikesolo Date: Mon, 15 Apr 2024 23:39:33 +0200 Subject: [PATCH 05/14] migrate to drizzle: remove prisma --- README.md | 2 +- app/[domain]/[slug]/page-prisma.tsx | 180 ---- app/[domain]/page-prisma.tsx | 139 --- app/app/(dashboard)/post/[id]/page-prisma.tsx | 28 - .../post/[id]/settings/page-prisma.tsx | 60 -- .../(dashboard)/post/[id]/settings/page.tsx | 1 - .../site/[id]/analytics/page-prisma.tsx | 46 - .../(dashboard)/site/[id]/analytics/page.tsx | 1 - app/app/(dashboard)/site/[id]/page-prisma.tsx | 55 -- app/app/(dashboard)/site/[id]/page.tsx | 1 - .../[id]/settings/appearance/page-prisma.tsx | 66 -- .../site/[id]/settings/appearance/page.tsx | 1 - .../[id]/settings/domains/page-prisma.tsx | 47 - .../site/[id]/settings/domains/page.tsx | 1 - .../site/[id]/settings/layout-prisma.tsx | 53 -- .../(dashboard)/site/[id]/settings/layout.tsx | 1 - .../site/[id]/settings/page-prisma.tsx | 49 -- .../(dashboard)/site/[id]/settings/page.tsx | 1 - components/blog-card.tsx | 5 +- components/editor.tsx | 4 +- components/mdx.tsx | 5 +- components/overview-sites-cta-prisma.tsx | 30 - components/overview-sites-cta.tsx | 1 - components/post-card.tsx | 4 +- components/posts-prisma.tsx | 52 -- components/posts.tsx | 1 - components/site-card.tsx | 4 +- components/sites-prisma.tsx | 44 - lib/actions-prisma.ts | 433 --------- lib/auth-prisma.ts | 133 --- lib/fetchers-prisma.ts | 133 --- lib/prisma.ts | 11 - lib/remark-plugins-prisma.tsx | 117 --- package.json | 11 +- pnpm-lock.yaml | 820 ++++++++---------- prisma/schema.prisma | 121 --- 36 files changed, 392 insertions(+), 2269 deletions(-) delete mode 100644 app/[domain]/[slug]/page-prisma.tsx delete mode 100644 app/[domain]/page-prisma.tsx delete mode 100644 app/app/(dashboard)/post/[id]/page-prisma.tsx delete mode 100644 app/app/(dashboard)/post/[id]/settings/page-prisma.tsx delete mode 100644 app/app/(dashboard)/site/[id]/analytics/page-prisma.tsx delete mode 100644 app/app/(dashboard)/site/[id]/page-prisma.tsx delete mode 100644 app/app/(dashboard)/site/[id]/settings/appearance/page-prisma.tsx delete mode 100644 app/app/(dashboard)/site/[id]/settings/domains/page-prisma.tsx delete mode 100644 app/app/(dashboard)/site/[id]/settings/layout-prisma.tsx delete mode 100644 app/app/(dashboard)/site/[id]/settings/page-prisma.tsx delete mode 100644 components/overview-sites-cta-prisma.tsx delete mode 100644 components/posts-prisma.tsx delete mode 100644 components/sites-prisma.tsx delete mode 100644 lib/actions-prisma.ts delete mode 100644 lib/auth-prisma.ts delete mode 100644 lib/fetchers-prisma.ts delete mode 100644 lib/prisma.ts delete mode 100644 lib/remark-plugins-prisma.tsx delete mode 100644 prisma/schema.prisma diff --git a/README.md b/README.md index ab3ee61e0..66552d658 100644 --- a/README.md +++ b/README.md @@ -113,7 +113,7 @@ This working demo site was built using the Platforms Starter Kit and: - [Next.js](https://nextjs.org/) as the React framework - [Tailwind](https://tailwindcss.com/) for CSS styling -- [Prisma](https://prisma.io/) as the ORM for database access +- [Drizzle](https://orm.drizzle.team/) as the ORM for database access - [Novel](https://novel.sh/) for the WYSIWYG editor - [Vercel Postgres](https://vercel.com/storage/postgres) for the database - [Vercel Blob](https://vercel.com/storage/blob) for image uploads diff --git a/app/[domain]/[slug]/page-prisma.tsx b/app/[domain]/[slug]/page-prisma.tsx deleted file mode 100644 index eb61c49d4..000000000 --- a/app/[domain]/[slug]/page-prisma.tsx +++ /dev/null @@ -1,180 +0,0 @@ -import { notFound } from "next/navigation"; -import prisma from "@/lib/prisma"; -import { getPostData, getSiteData } from "@/lib/fetchers"; -import BlogCard from "@/components/blog-card"; -import BlurImage from "@/components/blur-image"; -import MDX from "@/components/mdx"; -import { placeholderBlurhash, toDateString } from "@/lib/utils"; - -export async function generateMetadata({ - params, -}: { - params: { domain: string; slug: string }; -}) { - const domain = decodeURIComponent(params.domain); - const slug = decodeURIComponent(params.slug); - - const [data, siteData] = await Promise.all([ - getPostData(domain, slug), - getSiteData(domain), - ]); - if (!data || !siteData) { - return null; - } - const { title, description } = data; - - return { - title, - description, - openGraph: { - title, - description, - }, - twitter: { - card: "summary_large_image", - title, - description, - creator: "@vercel", - }, - // Optional: Set canonical URL to custom domain if it exists - // ...(params.domain.endsWith(`.${process.env.NEXT_PUBLIC_ROOT_DOMAIN}`) && - // siteData.customDomain && { - // alternates: { - // canonical: `https://${siteData.customDomain}/${params.slug}`, - // }, - // }), - }; -} - -export async function generateStaticParams() { - const allPosts = await prisma.post.findMany({ - select: { - slug: true, - site: { - select: { - subdomain: true, - customDomain: true, - }, - }, - }, - // feel free to remove this filter if you want to generate paths for all posts - where: { - site: { - subdomain: "demo", - }, - }, - }); - - const allPaths = allPosts - .flatMap(({ site, slug }) => [ - site?.subdomain && { - domain: `${site.subdomain}.${process.env.NEXT_PUBLIC_ROOT_DOMAIN}`, - slug, - }, - site?.customDomain && { - domain: site.customDomain, - slug, - }, - ]) - .filter(Boolean); - - return allPaths; -} - -export default async function SitePostPage({ - params, -}: { - params: { domain: string; slug: string }; -}) { - const domain = decodeURIComponent(params.domain); - const slug = decodeURIComponent(params.slug); - const data = await getPostData(domain, slug); - - if (!data) { - notFound(); - } - - return ( - <> -
-
-

- {toDateString(data.createdAt)} -

-

- {data.title} -

-

- {data.description} -

-
- -
-
- {data.site?.user?.image ? ( - - ) : ( -
- ? -
- )} -
-
- by {data.site?.user?.name} -
-
-
-
-
- -
- - - - {data.adjacentPosts.length > 0 && ( -
- - )} - {data.adjacentPosts && ( -
- {data.adjacentPosts.map((data: any, index: number) => ( - - ))} -
- )} - - ); -} diff --git a/app/[domain]/page-prisma.tsx b/app/[domain]/page-prisma.tsx deleted file mode 100644 index c872863ed..000000000 --- a/app/[domain]/page-prisma.tsx +++ /dev/null @@ -1,139 +0,0 @@ -import Link from "next/link"; -import prisma from "@/lib/prisma"; -import { notFound } from "next/navigation"; -import BlurImage from "@/components/blur-image"; -import { placeholderBlurhash, toDateString } from "@/lib/utils"; -import BlogCard from "@/components/blog-card"; -import { getPostsForSite, getSiteData } from "@/lib/fetchers"; -import Image from "next/image"; - -export async function generateStaticParams() { - const allSites = await prisma.site.findMany({ - select: { - subdomain: true, - customDomain: true, - }, - // feel free to remove this filter if you want to generate paths for all sites - where: { - subdomain: "demo", - }, - }); - - const allPaths = allSites - .flatMap(({ subdomain, customDomain }) => [ - subdomain && { - domain: `${subdomain}.${process.env.NEXT_PUBLIC_ROOT_DOMAIN}`, - }, - customDomain && { - domain: customDomain, - }, - ]) - .filter(Boolean); - - return allPaths; -} - -export default async function SiteHomePage({ - params, -}: { - params: { domain: string }; -}) { - const domain = decodeURIComponent(params.domain); - const [data, posts] = await Promise.all([ - getSiteData(domain), - getPostsForSite(domain), - ]); - - if (!data) { - notFound(); - } - - return ( - <> -
- {posts.length > 0 ? ( -
- -
- -
-
-

- {posts[0].title} -

-

- {posts[0].description} -

-
-
- {data.user?.image ? ( - - ) : ( -
- ? -
- )} -
-

- {data.user?.name} -

-
-

- {toDateString(posts[0].createdAt)} -

-
-
- -
- ) : ( -
- missing post - missing post -

- No posts yet. -

-
- )} -
- - {posts.length > 1 && ( -
-

- More stories -

-
- {posts.slice(1).map((metadata: any, index: number) => ( - - ))} -
-
- )} - - ); -} diff --git a/app/app/(dashboard)/post/[id]/page-prisma.tsx b/app/app/(dashboard)/post/[id]/page-prisma.tsx deleted file mode 100644 index 921f02e49..000000000 --- a/app/app/(dashboard)/post/[id]/page-prisma.tsx +++ /dev/null @@ -1,28 +0,0 @@ -import { getSession } from "@/lib/auth"; -import prisma from "@/lib/prisma"; -import { notFound, redirect } from "next/navigation"; -import Editor from "@/components/editor"; - -export default async function PostPage({ params }: { params: { id: string } }) { - const session = await getSession(); - if (!session) { - redirect("/login"); - } - const data = await prisma.post.findUnique({ - where: { - id: decodeURIComponent(params.id), - }, - include: { - site: { - select: { - subdomain: true, - }, - }, - }, - }); - if (!data || data.userId !== session.user.id) { - notFound(); - } - - return ; -} diff --git a/app/app/(dashboard)/post/[id]/settings/page-prisma.tsx b/app/app/(dashboard)/post/[id]/settings/page-prisma.tsx deleted file mode 100644 index b12262c8b..000000000 --- a/app/app/(dashboard)/post/[id]/settings/page-prisma.tsx +++ /dev/null @@ -1,60 +0,0 @@ -import { getSession } from "@/lib/auth"; -import prisma from "@/lib/prisma"; -import { notFound, redirect } from "next/navigation"; -import Form from "@/components/form"; -import { updatePostMetadata } from "@/lib/actions"; -import DeletePostForm from "@/components/form/delete-post-form"; - -export default async function PostSettings({ - params, -}: { - params: { id: string }; -}) { - const session = await getSession(); - if (!session) { - redirect("/login"); - } - const data = await prisma.post.findUnique({ - where: { - id: decodeURIComponent(params.id), - }, - }); - if (!data || data.userId !== session.user.id) { - notFound(); - } - return ( -
-
-

- Post Settings -

- - - - - -
-
- ); -} diff --git a/app/app/(dashboard)/post/[id]/settings/page.tsx b/app/app/(dashboard)/post/[id]/settings/page.tsx index 7e11a49c8..746a2586b 100644 --- a/app/app/(dashboard)/post/[id]/settings/page.tsx +++ b/app/app/(dashboard)/post/[id]/settings/page.tsx @@ -1,5 +1,4 @@ import { getSession } from "@/lib/auth"; -import prisma from "@/lib/prisma"; import { notFound, redirect } from "next/navigation"; import Form from "@/components/form"; import { updatePostMetadata } from "@/lib/actions"; diff --git a/app/app/(dashboard)/site/[id]/analytics/page-prisma.tsx b/app/app/(dashboard)/site/[id]/analytics/page-prisma.tsx deleted file mode 100644 index 43bb7e417..000000000 --- a/app/app/(dashboard)/site/[id]/analytics/page-prisma.tsx +++ /dev/null @@ -1,46 +0,0 @@ -import { getSession } from "@/lib/auth"; -import prisma from "@/lib/prisma"; -import { notFound, redirect } from "next/navigation"; -import AnalyticsMockup from "@/components/analytics"; - -export default async function SiteAnalytics({ - params, -}: { - params: { id: string }; -}) { - const session = await getSession(); - if (!session) { - redirect("/login"); - } - const data = await prisma.site.findUnique({ - where: { - id: decodeURIComponent(params.id), - }, - }); - if (!data || data.userId !== session.user.id) { - notFound(); - } - - const url = `${data.subdomain}.${process.env.NEXT_PUBLIC_ROOT_DOMAIN}`; - - return ( - <> -
-
-

- Analytics for {data.name} -

- - {url} ↗ - -
-
- - - ); -} diff --git a/app/app/(dashboard)/site/[id]/analytics/page.tsx b/app/app/(dashboard)/site/[id]/analytics/page.tsx index a6d4f5b1f..7624916c0 100644 --- a/app/app/(dashboard)/site/[id]/analytics/page.tsx +++ b/app/app/(dashboard)/site/[id]/analytics/page.tsx @@ -1,5 +1,4 @@ import { getSession } from "@/lib/auth"; -import prisma from "@/lib/prisma"; import { notFound, redirect } from "next/navigation"; import AnalyticsMockup from "@/components/analytics"; import db from "@/lib/db/db"; diff --git a/app/app/(dashboard)/site/[id]/page-prisma.tsx b/app/app/(dashboard)/site/[id]/page-prisma.tsx deleted file mode 100644 index 43c2fb66a..000000000 --- a/app/app/(dashboard)/site/[id]/page-prisma.tsx +++ /dev/null @@ -1,55 +0,0 @@ - - -import { getSession } from "@/lib/auth"; -import prisma from "@/lib/prisma"; -import { notFound, redirect } from "next/navigation"; -import Posts from "@/components/posts"; -import CreatePostButton from "@/components/create-post-button"; - -export default async function SitePosts({ - params, -}: { - params: { id: string }; -}) { - const session = await getSession(); - if (!session) { - redirect("/login"); - } - const data = await prisma.site.findUnique({ - where: { - id: decodeURIComponent(params.id), - }, - }); - - if (!data || data.userId !== session.user.id) { - notFound(); - } - - const url = `${data.subdomain}.${process.env.NEXT_PUBLIC_ROOT_DOMAIN}`; - - return ( - <> -
-
-

- All Posts for {data.name} -

- - {url} ↗ - -
- -
- - - ); -} diff --git a/app/app/(dashboard)/site/[id]/page.tsx b/app/app/(dashboard)/site/[id]/page.tsx index f1588f6df..3e214e217 100644 --- a/app/app/(dashboard)/site/[id]/page.tsx +++ b/app/app/(dashboard)/site/[id]/page.tsx @@ -1,5 +1,4 @@ import { getSession } from "@/lib/auth"; -import prisma from "@/lib/prisma"; import { notFound, redirect } from "next/navigation"; import Posts from "@/components/posts"; import CreatePostButton from "@/components/create-post-button"; diff --git a/app/app/(dashboard)/site/[id]/settings/appearance/page-prisma.tsx b/app/app/(dashboard)/site/[id]/settings/appearance/page-prisma.tsx deleted file mode 100644 index ee5ada880..000000000 --- a/app/app/(dashboard)/site/[id]/settings/appearance/page-prisma.tsx +++ /dev/null @@ -1,66 +0,0 @@ -import prisma from "@/lib/prisma"; -import Form from "@/components/form"; -import { updateSite } from "@/lib/actions"; - -export default async function SiteSettingsAppearance({ - params, -}: { - params: { id: string }; -}) { - const data = await prisma.site.findUnique({ - where: { - id: decodeURIComponent(params.id), - }, - }); - - return ( -
- - - - -
- ); -} diff --git a/app/app/(dashboard)/site/[id]/settings/appearance/page.tsx b/app/app/(dashboard)/site/[id]/settings/appearance/page.tsx index 7de3f4d17..d67cea3e9 100644 --- a/app/app/(dashboard)/site/[id]/settings/appearance/page.tsx +++ b/app/app/(dashboard)/site/[id]/settings/appearance/page.tsx @@ -1,4 +1,3 @@ -import prisma from "@/lib/prisma"; import Form from "@/components/form"; import { updateSite } from "@/lib/actions"; import db from "@/lib/db/db"; diff --git a/app/app/(dashboard)/site/[id]/settings/domains/page-prisma.tsx b/app/app/(dashboard)/site/[id]/settings/domains/page-prisma.tsx deleted file mode 100644 index 6be2ed46c..000000000 --- a/app/app/(dashboard)/site/[id]/settings/domains/page-prisma.tsx +++ /dev/null @@ -1,47 +0,0 @@ -import prisma from "@/lib/prisma"; -import Form from "@/components/form"; -import { updateSite } from "@/lib/actions"; - -export default async function SiteSettingsDomains({ - params, -}: { - params: { id: string }; -}) { - const data = await prisma.site.findUnique({ - where: { - id: decodeURIComponent(params.id), - }, - }); - - return ( -
- - -
- ); -} diff --git a/app/app/(dashboard)/site/[id]/settings/domains/page.tsx b/app/app/(dashboard)/site/[id]/settings/domains/page.tsx index 71e5cd2e6..09a24766c 100644 --- a/app/app/(dashboard)/site/[id]/settings/domains/page.tsx +++ b/app/app/(dashboard)/site/[id]/settings/domains/page.tsx @@ -1,4 +1,3 @@ -import prisma from "@/lib/prisma"; import Form from "@/components/form"; import { updateSite } from "@/lib/actions"; import db from "@/lib/db/db"; diff --git a/app/app/(dashboard)/site/[id]/settings/layout-prisma.tsx b/app/app/(dashboard)/site/[id]/settings/layout-prisma.tsx deleted file mode 100644 index 3ade5da32..000000000 --- a/app/app/(dashboard)/site/[id]/settings/layout-prisma.tsx +++ /dev/null @@ -1,53 +0,0 @@ -import { ReactNode } from "react"; -import { getSession } from "@/lib/auth"; -import prisma from "@/lib/prisma"; -import { notFound, redirect } from "next/navigation"; -import SiteSettingsNav from "./nav"; - -export default async function SiteAnalyticsLayout({ - params, - children, -}: { - params: { id: string }; - children: ReactNode; -}) { - const session = await getSession(); - if (!session) { - redirect("/login"); - } - const data = await prisma.site.findUnique({ - where: { - id: decodeURIComponent(params.id), - }, - }); - - if (!data || data.userId !== session.user.id) { - notFound(); - } - - const url = `${data.subdomain}.${process.env.NEXT_PUBLIC_ROOT_DOMAIN}`; - - return ( - <> -
-

- Settings for {data.name} -

- - {url} ↗ - -
- - {children} - - ); -} diff --git a/app/app/(dashboard)/site/[id]/settings/layout.tsx b/app/app/(dashboard)/site/[id]/settings/layout.tsx index 838e159a3..1fce527af 100644 --- a/app/app/(dashboard)/site/[id]/settings/layout.tsx +++ b/app/app/(dashboard)/site/[id]/settings/layout.tsx @@ -1,6 +1,5 @@ import { ReactNode } from "react"; import { getSession } from "@/lib/auth"; -import prisma from "@/lib/prisma"; import { notFound, redirect } from "next/navigation"; import SiteSettingsNav from "./nav"; import db from "@/lib/db/db"; diff --git a/app/app/(dashboard)/site/[id]/settings/page-prisma.tsx b/app/app/(dashboard)/site/[id]/settings/page-prisma.tsx deleted file mode 100644 index 7d49010cd..000000000 --- a/app/app/(dashboard)/site/[id]/settings/page-prisma.tsx +++ /dev/null @@ -1,49 +0,0 @@ -import prisma from "@/lib/prisma"; -import Form from "@/components/form"; -import { updateSite } from "@/lib/actions"; -import DeleteSiteForm from "@/components/form/delete-site-form"; - -export default async function SiteSettingsIndex({ - params, -}: { - params: { id: string }; -}) { - const data = await prisma.site.findUnique({ - where: { - id: decodeURIComponent(params.id), - }, - }); - - return ( -
- - - - - -
- ); -} diff --git a/app/app/(dashboard)/site/[id]/settings/page.tsx b/app/app/(dashboard)/site/[id]/settings/page.tsx index 03ea67230..bc79b2873 100644 --- a/app/app/(dashboard)/site/[id]/settings/page.tsx +++ b/app/app/(dashboard)/site/[id]/settings/page.tsx @@ -1,4 +1,3 @@ -import prisma from "@/lib/prisma"; import Form from "@/components/form"; import { updateSite } from "@/lib/actions"; import DeleteSiteForm from "@/components/form/delete-site-form"; diff --git a/components/blog-card.tsx b/components/blog-card.tsx index 7698a6ae2..63a4de8ad 100644 --- a/components/blog-card.tsx +++ b/components/blog-card.tsx @@ -1,12 +1,11 @@ import Link from "next/link"; import BlurImage from "./blur-image"; - -import type { Post } from "@prisma/client"; import { placeholderBlurhash, toDateString } from "@/lib/utils"; +import type { SelectPost } from "@/lib/db/schema"; interface BlogCardProps { data: Pick< - Post, + SelectPost, "slug" | "image" | "imageBlurhash" | "title" | "description" | "createdAt" >; } diff --git a/components/editor.tsx b/components/editor.tsx index 79cb91bc8..1d058657d 100644 --- a/components/editor.tsx +++ b/components/editor.tsx @@ -1,7 +1,6 @@ "use client"; import { useEffect, useState, useTransition } from "react"; -import { Post } from "@prisma/client"; import { updatePost, updatePostMetadata } from "@/lib/actions"; import { Editor as NovelEditor } from "novel"; import TextareaAutosize from "react-textarea-autosize"; @@ -9,8 +8,9 @@ import { cn } from "@/lib/utils"; import LoadingDots from "./icons/loading-dots"; import { ExternalLink } from "lucide-react"; import { toast } from "sonner"; +import type { SelectPost } from "@/lib/db/schema"; -type PostWithSite = Post & { site: { subdomain: string | null } | null }; +type PostWithSite = SelectPost & { site: { subdomain: string | null } | null }; export default function Editor({ post }: { post: PostWithSite }) { let [isPendingSaving, startTransitionSaving] = useTransition(); diff --git a/components/mdx.tsx b/components/mdx.tsx index e64e3823a..8f901af5b 100644 --- a/components/mdx.tsx +++ b/components/mdx.tsx @@ -1,11 +1,12 @@ "use client"; -import { Post } from "@prisma/client"; + import { MDXRemote, MDXRemoteProps } from "next-mdx-remote"; import { replaceLinks } from "@/lib/remark-plugins"; import { Tweet } from "react-tweet"; import BlurImage from "@/components/blur-image"; import styles from "./mdx.module.css"; +import type { SelectPost } from "@/lib/db/schema"; export default function MDX({ source }: { source: MDXRemoteProps }) { const components = { @@ -27,7 +28,7 @@ export default function MDX({ source }: { source: MDXRemoteProps }) { } interface ExampleCardProps - extends Pick { + extends Pick { name: string | null; url: string | null; } diff --git a/components/overview-sites-cta-prisma.tsx b/components/overview-sites-cta-prisma.tsx deleted file mode 100644 index 94670c15b..000000000 --- a/components/overview-sites-cta-prisma.tsx +++ /dev/null @@ -1,30 +0,0 @@ -import { getSession } from "@/lib/auth"; -import prisma from "@/lib/prisma"; -import CreateSiteButton from "./create-site-button"; -import CreateSiteModal from "./modal/create-site"; -import Link from "next/link"; - -export default async function OverviewSitesCTA() { - const session = await getSession(); - if (!session) { - return 0; - } - const sites = await prisma.site.count({ - where: { - userId: session.user.id as string, - }, - }); - - return sites > 0 ? ( - - View All Sites - - ) : ( - - - - ); -} diff --git a/components/overview-sites-cta.tsx b/components/overview-sites-cta.tsx index 08679c8e4..b8fd47134 100644 --- a/components/overview-sites-cta.tsx +++ b/components/overview-sites-cta.tsx @@ -1,5 +1,4 @@ import { getSession } from "@/lib/auth"; -import prisma from "@/lib/prisma"; import CreateSiteButton from "./create-site-button"; import CreateSiteModal from "./modal/create-site"; import Link from "next/link"; diff --git a/components/post-card.tsx b/components/post-card.tsx index 1e4b17dd8..5c2cf1ac4 100644 --- a/components/post-card.tsx +++ b/components/post-card.tsx @@ -1,13 +1,13 @@ import BlurImage from "@/components/blur-image"; +import type { SelectPost, SelectSite } from "@/lib/db/schema"; import { placeholderBlurhash, random } from "@/lib/utils"; -import { Post, Site } from "@prisma/client"; import { BarChart, ExternalLink } from "lucide-react"; import Link from "next/link"; export default function PostCard({ data, }: { - data: Post & { site: Site | null }; + data: SelectPost & { site: SelectSite | null }; }) { const url = `${data.site?.subdomain}.${process.env.NEXT_PUBLIC_ROOT_DOMAIN}/${data.slug}`; diff --git a/components/posts-prisma.tsx b/components/posts-prisma.tsx deleted file mode 100644 index f076ec7cd..000000000 --- a/components/posts-prisma.tsx +++ /dev/null @@ -1,52 +0,0 @@ -import { getSession } from "@/lib/auth"; -import { redirect } from "next/navigation"; -import prisma from "@/lib/prisma"; -import PostCard from "./post-card"; -import Image from "next/image"; - -export default async function Posts({ - siteId, - limit, -}: { - siteId?: string; - limit?: number; -}) { - const session = await getSession(); - if (!session?.user) { - redirect("/login"); - } - const posts = await prisma.post.findMany({ - where: { - userId: session.user.id as string, - ...(siteId ? { siteId } : {}), - }, - orderBy: { - updatedAt: "desc", - }, - include: { - site: true, - }, - ...(limit ? { take: limit } : {}), - }); - - return posts.length > 0 ? ( -
- {posts.map((post) => ( - - ))} -
- ) : ( -
-

No Posts Yet

- missing post -

- You do not have any posts yet. Create one to get started. -

-
- ); -} diff --git a/components/posts.tsx b/components/posts.tsx index c4da5f734..7a167e3f8 100644 --- a/components/posts.tsx +++ b/components/posts.tsx @@ -1,6 +1,5 @@ import { getSession } from "@/lib/auth"; import { redirect } from "next/navigation"; -import prisma from "@/lib/prisma"; import PostCard from "./post-card"; import Image from "next/image"; import db from "@/lib/db/db"; diff --git a/components/site-card.tsx b/components/site-card.tsx index dccfb25b0..21a618d95 100644 --- a/components/site-card.tsx +++ b/components/site-card.tsx @@ -1,10 +1,10 @@ import BlurImage from "@/components/blur-image"; +import type { SelectSite } from "@/lib/db/schema"; import { placeholderBlurhash, random } from "@/lib/utils"; -import { Site } from "@prisma/client"; import { BarChart, ExternalLink } from "lucide-react"; import Link from "next/link"; -export default function SiteCard({ data }: { data: Site }) { +export default function SiteCard({ data }: { data: SelectSite }) { const url = `${data.subdomain}.${process.env.NEXT_PUBLIC_ROOT_DOMAIN}`; return (
diff --git a/components/sites-prisma.tsx b/components/sites-prisma.tsx deleted file mode 100644 index b196c292f..000000000 --- a/components/sites-prisma.tsx +++ /dev/null @@ -1,44 +0,0 @@ -import { getSession } from "@/lib/auth"; -import { redirect } from "next/navigation"; -import prisma from "@/lib/prisma"; -import SiteCard from "./site-card"; -import Image from "next/image"; - -export default async function Sites({ limit }: { limit?: number }) { - const session = await getSession(); - if (!session) { - redirect("/login"); - } - const sites = await prisma.site.findMany({ - where: { - user: { - id: session.user.id as string, - }, - }, - orderBy: { - createdAt: "asc", - }, - ...(limit ? { take: limit } : {}), - }); - - return sites.length > 0 ? ( -
- {sites.map((site) => ( - - ))} -
- ) : ( -
-

No Sites Yet

- missing site -

- You do not have any sites yet. Create one to get started. -

-
- ); -} diff --git a/lib/actions-prisma.ts b/lib/actions-prisma.ts deleted file mode 100644 index ffe5fdc5c..000000000 --- a/lib/actions-prisma.ts +++ /dev/null @@ -1,433 +0,0 @@ -"use server"; - -import prisma from "@/lib/prisma"; -import { Post, Site } from "@prisma/client"; -import { revalidateTag } from "next/cache"; -import { withPostAuth, withSiteAuth } from "./auth"; -import { getSession } from "@/lib/auth"; -import { - addDomainToVercel, - // getApexDomain, - removeDomainFromVercelProject, - // removeDomainFromVercelTeam, - validDomainRegex, -} from "@/lib/domains"; -import { put } from "@vercel/blob"; -import { customAlphabet } from "nanoid"; -import { getBlurDataURL } from "@/lib/utils"; - -const nanoid = customAlphabet( - "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz", - 7, -); // 7-character random string - -export const createSite = async (formData: FormData) => { - const session = await getSession(); - if (!session?.user.id) { - return { - error: "Not authenticated", - }; - } - const name = formData.get("name") as string; - const description = formData.get("description") as string; - const subdomain = formData.get("subdomain") as string; - - try { - const response = await prisma.site.create({ - data: { - name, - description, - subdomain, - user: { - connect: { - id: session.user.id, - }, - }, - }, - }); - await revalidateTag( - `${subdomain}.${process.env.NEXT_PUBLIC_ROOT_DOMAIN}-metadata`, - ); - return response; - } catch (error: any) { - if (error.code === "P2002") { - return { - error: `This subdomain is already taken`, - }; - } else { - return { - error: error.message, - }; - } - } -}; - -export const updateSite = withSiteAuth( - async (formData: FormData, site: Site, key: string) => { - const value = formData.get(key) as string; - - try { - let response; - - if (key === "customDomain") { - if (value.includes("vercel.pub")) { - return { - error: "Cannot use vercel.pub subdomain as your custom domain", - }; - - // if the custom domain is valid, we need to add it to Vercel - } else if (validDomainRegex.test(value)) { - response = await prisma.site.update({ - where: { - id: site.id, - }, - data: { - customDomain: value, - }, - }); - await Promise.all([ - addDomainToVercel(value), - // Optional: add www subdomain as well and redirect to apex domain - // addDomainToVercel(`www.${value}`), - ]); - - // empty value means the user wants to remove the custom domain - } else if (value === "") { - response = await prisma.site.update({ - where: { - id: site.id, - }, - data: { - customDomain: null, - }, - }); - } - - // if the site had a different customDomain before, we need to remove it from Vercel - if (site.customDomain && site.customDomain !== value) { - response = await removeDomainFromVercelProject(site.customDomain); - - /* Optional: remove domain from Vercel team - - // first, we need to check if the apex domain is being used by other sites - const apexDomain = getApexDomain(`https://${site.customDomain}`); - const domainCount = await prisma.site.count({ - where: { - OR: [ - { - customDomain: apexDomain, - }, - { - customDomain: { - endsWith: `.${apexDomain}`, - }, - }, - ], - }, - }); - - // if the apex domain is being used by other sites - // we should only remove it from our Vercel project - if (domainCount >= 1) { - await removeDomainFromVercelProject(site.customDomain); - } else { - // this is the only site using this apex domain - // so we can remove it entirely from our Vercel team - await removeDomainFromVercelTeam( - site.customDomain - ); - } - - */ - } - } else if (key === "image" || key === "logo") { - if (!process.env.BLOB_READ_WRITE_TOKEN) { - return { - error: - "Missing BLOB_READ_WRITE_TOKEN token. Note: Vercel Blob is currently in beta – please fill out this form for access: https://tally.so/r/nPDMNd", - }; - } - - const file = formData.get(key) as File; - const filename = `${nanoid()}.${file.type.split("/")[1]}`; - - const { url } = await put(filename, file, { - access: "public", - }); - - const blurhash = key === "image" ? await getBlurDataURL(url) : null; - - response = await prisma.site.update({ - where: { - id: site.id, - }, - data: { - [key]: url, - ...(blurhash && { imageBlurhash: blurhash }), - }, - }); - } else { - response = await prisma.site.update({ - where: { - id: site.id, - }, - data: { - [key]: value, - }, - }); - } - console.log( - "Updated site data! Revalidating tags: ", - `${site.subdomain}.${process.env.NEXT_PUBLIC_ROOT_DOMAIN}-metadata`, - `${site.customDomain}-metadata`, - ); - await revalidateTag( - `${site.subdomain}.${process.env.NEXT_PUBLIC_ROOT_DOMAIN}-metadata`, - ); - site.customDomain && - (await revalidateTag(`${site.customDomain}-metadata`)); - - return response; - } catch (error: any) { - if (error.code === "P2002") { - return { - error: `This ${key} is already taken`, - }; - } else { - return { - error: error.message, - }; - } - } - }, -); - -export const deleteSite = withSiteAuth(async (_: FormData, site: Site) => { - try { - const response = await prisma.site.delete({ - where: { - id: site.id, - }, - }); - await revalidateTag( - `${site.subdomain}.${process.env.NEXT_PUBLIC_ROOT_DOMAIN}-metadata`, - ); - response.customDomain && - (await revalidateTag(`${site.customDomain}-metadata`)); - return response; - } catch (error: any) { - return { - error: error.message, - }; - } -}); - -export const getSiteFromPostId = async (postId: string) => { - const post = await prisma.post.findUnique({ - where: { - id: postId, - }, - select: { - siteId: true, - }, - }); - return post?.siteId; -}; - -export const createPost = withSiteAuth(async (_: FormData, site: Site) => { - const session = await getSession(); - if (!session?.user.id) { - return { - error: "Not authenticated", - }; - } - const response = await prisma.post.create({ - data: { - siteId: site.id, - userId: session.user.id, - }, - }); - - await revalidateTag( - `${site.subdomain}.${process.env.NEXT_PUBLIC_ROOT_DOMAIN}-posts`, - ); - site.customDomain && (await revalidateTag(`${site.customDomain}-posts`)); - - return response; -}); - -// creating a separate function for this because we're not using FormData -export const updatePost = async (data: Post) => { - const session = await getSession(); - if (!session?.user.id) { - return { - error: "Not authenticated", - }; - } - const post = await prisma.post.findUnique({ - where: { - id: data.id, - }, - include: { - site: true, - }, - }); - if (!post || post.userId !== session.user.id) { - return { - error: "Post not found", - }; - } - try { - const response = await prisma.post.update({ - where: { - id: data.id, - }, - data: { - title: data.title, - description: data.description, - content: data.content, - }, - }); - - await revalidateTag( - `${post.site?.subdomain}.${process.env.NEXT_PUBLIC_ROOT_DOMAIN}-posts`, - ); - await revalidateTag( - `${post.site?.subdomain}.${process.env.NEXT_PUBLIC_ROOT_DOMAIN}-${post.slug}`, - ); - - // if the site has a custom domain, we need to revalidate those tags too - post.site?.customDomain && - (await revalidateTag(`${post.site?.customDomain}-posts`), - await revalidateTag(`${post.site?.customDomain}-${post.slug}`)); - - return response; - } catch (error: any) { - return { - error: error.message, - }; - } -}; - -export const updatePostMetadata = withPostAuth( - async ( - formData: FormData, - post: Post & { - site: Site; - }, - key: string, - ) => { - const value = formData.get(key) as string; - - try { - let response; - if (key === "image") { - const file = formData.get("image") as File; - const filename = `${nanoid()}.${file.type.split("/")[1]}`; - - const { url } = await put(filename, file, { - access: "public", - }); - - const blurhash = await getBlurDataURL(url); - - response = await prisma.post.update({ - where: { - id: post.id, - }, - data: { - image: url, - imageBlurhash: blurhash, - }, - }); - } else { - response = await prisma.post.update({ - where: { - id: post.id, - }, - data: { - [key]: key === "published" ? value === "true" : value, - }, - }); - } - - await revalidateTag( - `${post.site?.subdomain}.${process.env.NEXT_PUBLIC_ROOT_DOMAIN}-posts`, - ); - await revalidateTag( - `${post.site?.subdomain}.${process.env.NEXT_PUBLIC_ROOT_DOMAIN}-${post.slug}`, - ); - - // if the site has a custom domain, we need to revalidate those tags too - post.site?.customDomain && - (await revalidateTag(`${post.site?.customDomain}-posts`), - await revalidateTag(`${post.site?.customDomain}-${post.slug}`)); - - return response; - } catch (error: any) { - if (error.code === "P2002") { - return { - error: `This slug is already in use`, - }; - } else { - return { - error: error.message, - }; - } - } - }, -); - -export const deletePost = withPostAuth(async (_: FormData, post: Post) => { - try { - const response = await prisma.post.delete({ - where: { - id: post.id, - }, - select: { - siteId: true, - }, - }); - return response; - } catch (error: any) { - return { - error: error.message, - }; - } -}); - -export const editUser = async ( - formData: FormData, - _id: unknown, - key: string, -) => { - const session = await getSession(); - if (!session?.user.id) { - return { - error: "Not authenticated", - }; - } - const value = formData.get(key) as string; - - try { - const response = await prisma.user.update({ - where: { - id: session.user.id, - }, - data: { - [key]: value, - }, - }); - return response; - } catch (error: any) { - if (error.code === "P2002") { - return { - error: `This ${key} is already in use`, - }; - } else { - return { - error: error.message, - }; - } - } -}; diff --git a/lib/auth-prisma.ts b/lib/auth-prisma.ts deleted file mode 100644 index 856819a8a..000000000 --- a/lib/auth-prisma.ts +++ /dev/null @@ -1,133 +0,0 @@ -import { getServerSession, type NextAuthOptions } from "next-auth"; -import GitHubProvider from "next-auth/providers/github"; -import { PrismaAdapter } from "@next-auth/prisma-adapter"; -import prisma from "@/lib/prisma"; - -const VERCEL_DEPLOYMENT = !!process.env.VERCEL_URL; - -export const authOptions: NextAuthOptions = { - providers: [ - GitHubProvider({ - clientId: process.env.AUTH_GITHUB_ID as string, - clientSecret: process.env.AUTH_GITHUB_SECRET as string, - profile(profile) { - return { - id: profile.id.toString(), - name: profile.name || profile.login, - gh_username: profile.login, - email: profile.email, - image: profile.avatar_url, - }; - }, - }), - ], - pages: { - signIn: `/login`, - verifyRequest: `/login`, - error: "/login", // Error code passed in query string as ?error= - }, - adapter: PrismaAdapter(prisma), - session: { strategy: "jwt" }, - cookies: { - sessionToken: { - name: `${VERCEL_DEPLOYMENT ? "__Secure-" : ""}next-auth.session-token`, - options: { - httpOnly: true, - sameSite: "lax", - path: "/", - // When working on localhost, the cookie domain must be omitted entirely (https://stackoverflow.com/a/1188145) - domain: VERCEL_DEPLOYMENT - ? `.${process.env.NEXT_PUBLIC_ROOT_DOMAIN}` - : undefined, - secure: VERCEL_DEPLOYMENT, - }, - }, - }, - callbacks: { - jwt: async ({ token, user }) => { - if (user) { - token.user = user; - } - return token; - }, - session: async ({ session, token }) => { - session.user = { - ...session.user, - // @ts-expect-error - id: token.sub, - // @ts-expect-error - username: token?.user?.username || token?.user?.gh_username, - }; - return session; - }, - }, -}; - -export function getSession() { - return getServerSession(authOptions) as Promise<{ - user: { - id: string; - name: string; - username: string; - email: string; - image: string; - }; - } | null>; -} - -export function withSiteAuth(action: any) { - return async ( - formData: FormData | null, - siteId: string, - key: string | null, - ) => { - const session = await getSession(); - if (!session) { - return { - error: "Not authenticated", - }; - } - const site = await prisma.site.findUnique({ - where: { - id: siteId, - }, - }); - if (!site || site.userId !== session.user.id) { - return { - error: "Not authorized", - }; - } - - return action(formData, site, key); - }; -} - -export function withPostAuth(action: any) { - return async ( - formData: FormData | null, - postId: string, - key: string | null, - ) => { - const session = await getSession(); - if (!session?.user.id) { - return { - error: "Not authenticated", - }; - } - const post = await prisma.post.findUnique({ - where: { - id: postId, - }, - include: { - site: true, - }, - }); - if (!post || post.userId !== session.user.id) { - return { - error: "Post not found", - }; - } - - return action(formData, post, key); - }; -} diff --git a/lib/fetchers-prisma.ts b/lib/fetchers-prisma.ts deleted file mode 100644 index f60445a58..000000000 --- a/lib/fetchers-prisma.ts +++ /dev/null @@ -1,133 +0,0 @@ -import { unstable_cache } from "next/cache"; -import prisma from "@/lib/prisma"; -import { serialize } from "next-mdx-remote/serialize"; -import { replaceExamples, replaceTweets } from "@/lib/remark-plugins-prisma"; - -export async function getSiteData(domain: string) { - const subdomain = domain.endsWith(`.${process.env.NEXT_PUBLIC_ROOT_DOMAIN}`) - ? domain.replace(`.${process.env.NEXT_PUBLIC_ROOT_DOMAIN}`, "") - : null; - - return await unstable_cache( - async () => { - return prisma.site.findUnique({ - where: subdomain ? { subdomain } : { customDomain: domain }, - include: { user: true }, - }); - }, - [`${domain}-metadata`], - { - revalidate: 900, - tags: [`${domain}-metadata`], - }, - )(); -} - -export async function getPostsForSite(domain: string) { - const subdomain = domain.endsWith(`.${process.env.NEXT_PUBLIC_ROOT_DOMAIN}`) - ? domain.replace(`.${process.env.NEXT_PUBLIC_ROOT_DOMAIN}`, "") - : null; - - return await unstable_cache( - async () => { - return prisma.post.findMany({ - where: { - site: subdomain ? { subdomain } : { customDomain: domain }, - published: true, - }, - select: { - title: true, - description: true, - slug: true, - image: true, - imageBlurhash: true, - createdAt: true, - }, - orderBy: [ - { - createdAt: "desc", - }, - ], - }); - }, - [`${domain}-posts`], - { - revalidate: 900, - tags: [`${domain}-posts`], - }, - )(); -} - -export async function getPostData(domain: string, slug: string) { - const subdomain = domain.endsWith(`.${process.env.NEXT_PUBLIC_ROOT_DOMAIN}`) - ? domain.replace(`.${process.env.NEXT_PUBLIC_ROOT_DOMAIN}`, "") - : null; - - return await unstable_cache( - async () => { - const data = await prisma.post.findFirst({ - where: { - site: subdomain ? { subdomain } : { customDomain: domain }, - slug, - published: true, - }, - include: { - site: { - include: { - user: true, - }, - }, - }, - }); - - if (!data) return null; - - const [mdxSource, adjacentPosts] = await Promise.all([ - getMdxSource(data.content!), - prisma.post.findMany({ - where: { - site: subdomain ? { subdomain } : { customDomain: domain }, - published: true, - NOT: { - id: data.id, - }, - }, - select: { - slug: true, - title: true, - createdAt: true, - description: true, - image: true, - imageBlurhash: true, - }, - }), - ]); - - return { - ...data, - mdxSource, - adjacentPosts, - }; - }, - [`${domain}-${slug}`], - { - revalidate: 900, // 15 minutes - tags: [`${domain}-${slug}`], - }, - )(); -} - -async function getMdxSource(postContents: string) { - // transforms links like to [link](link) as MDX doesn't support syntax - // https://mdxjs.com/docs/what-is-mdx/#markdown - const content = - postContents?.replaceAll(/<(https?:\/\/\S+)>/g, "[$1]($1)") ?? ""; - // Serialize the content string into MDX - const mdxSource = await serialize(content, { - mdxOptions: { - remarkPlugins: [replaceTweets, () => replaceExamples(prisma)], - }, - }); - - return mdxSource; -} diff --git a/lib/prisma.ts b/lib/prisma.ts deleted file mode 100644 index 10082dc2b..000000000 --- a/lib/prisma.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { PrismaClient } from "@prisma/client"; - -declare global { - var prisma: PrismaClient | undefined; -} - -const prisma = global.prisma || new PrismaClient(); - -if (process.env.NODE_ENV === "development") global.prisma = prisma; - -export default prisma; diff --git a/lib/remark-plugins-prisma.tsx b/lib/remark-plugins-prisma.tsx deleted file mode 100644 index 1e13236bc..000000000 --- a/lib/remark-plugins-prisma.tsx +++ /dev/null @@ -1,117 +0,0 @@ -import Link from "next/link"; -import { visit } from "unist-util-visit"; -import type { Example, PrismaClient } from "@prisma/client"; -import { ReactNode } from "react"; - -export function replaceLinks({ - href, - children, -}: { - href?: string; - children: ReactNode; -}) { - // this is technically not a remark plugin but it - // replaces internal links with component - // and external links with - return href?.startsWith("/") || href === "" ? ( - - {children} - - ) : ( - - {children} ↗ - - ); -} - -export function replaceTweets() { - return (tree: any) => - new Promise(async (resolve, reject) => { - const nodesToChange = new Array(); - - visit(tree, "link", (node: any) => { - if ( - node.url.match( - /https?:\/\/twitter\.com\/(?:#!\/)?(\w+)\/status(?:es)?\/(\d+)([^\?])(\?.*)?/g, - ) - ) { - nodesToChange.push({ - node, - }); - } - }); - for (const { node } of nodesToChange) { - try { - const regex = /\/status\/(\d+)/gm; - const matches = regex.exec(node.url); - - if (!matches) throw new Error(`Failed to get tweet: ${node}`); - - const id = matches[1]; - - node.type = "mdxJsxFlowElement"; - node.name = "Tweet"; - node.attributes = [ - { - type: "mdxJsxAttribute", - name: "id", - value: id, - }, - ]; - } catch (e) { - console.log("ERROR", e); - return reject(e); - } - } - - resolve(); - }); -} - -export function replaceExamples(prisma: PrismaClient) { - return (tree: any) => - new Promise(async (resolve, reject) => { - const nodesToChange = new Array(); - - visit(tree, "mdxJsxFlowElement", (node: any) => { - if (node.name == "Examples") { - nodesToChange.push({ - node, - }); - } - }); - for (const { node } of nodesToChange) { - try { - const data = await getExamples(node, prisma); - node.attributes = [ - { - type: "mdxJsxAttribute", - name: "data", - value: data, - }, - ]; - } catch (e) { - return reject(e); - } - } - - resolve(); - }); -} - -async function getExamples(node: any, prisma: PrismaClient) { - const names = node?.attributes[0].value.split(","); - - const data = new Array(); - - for (let i = 0; i < names.length; i++) { - const results = await prisma.example.findUnique({ - where: { - id: parseInt(names[i]), - }, - }); - data.push(results); - } - - return JSON.stringify(data); -} diff --git a/package.json b/package.json index 7ab76f4be..dd9d66736 100644 --- a/package.json +++ b/package.json @@ -1,8 +1,8 @@ { "private": true, "scripts": { - "dev": "prisma generate && next dev", - "build": "prisma generate && prisma db push && next build", + "dev": "next dev", + "build": "next build", "format:write": "prettier --write \"**/*.{css,js,json,jsx,ts,tsx}\"", "format": "prettier \"**/*.{css,js,json,jsx,ts,tsx}\"", "start": "next start", @@ -10,19 +10,17 @@ }, "dependencies": { "@auth/drizzle-adapter": "^0.8.2", - "@next-auth/prisma-adapter": "^1.0.7", "@paralleldrive/cuid2": "^2.2.2", - "@prisma/client": "^5.5.2", "@tremor/react": "^3.11.1", "@upstash/ratelimit": "^0.4.4", "@vercel/analytics": "^1.1.1", "@vercel/blob": "^0.15.0", "@vercel/kv": "^1.0.0", - "@vercel/postgres": "^0.5.1", + "@vercel/postgres": "^0.8.0", "ai": "^2.2.22", "clsx": "^2.0.0", "date-fns": "^2.30.0", - "drizzle-orm": "^0.30.5", + "drizzle-orm": "^0.30.8", "focus-trap-react": "^10.2.3", "framer-motion": "^10.16.4", "gray-matter": "^4.0.3", @@ -61,7 +59,6 @@ "postcss": "^8.4.31", "prettier": "^3.1.0", "prettier-plugin-tailwindcss": "^0.5.7", - "prisma": "^5.5.2", "tailwindcss": "^3.3.5", "tailwindcss-animate": "^1.0.7", "typescript": "^5.2.2" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 45073cbba..d799976ae 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,18 +8,12 @@ dependencies: '@auth/drizzle-adapter': specifier: ^0.8.2 version: 0.8.2 - '@next-auth/prisma-adapter': - specifier: ^1.0.7 - version: 1.0.7(@prisma/client@5.12.0)(next-auth@4.24.7) '@paralleldrive/cuid2': specifier: ^2.2.2 version: 2.2.2 - '@prisma/client': - specifier: ^5.5.2 - version: 5.12.0(prisma@5.12.0) '@tremor/react': specifier: ^3.11.1 - version: 3.15.0(react-dom@18.2.0)(react@18.2.0)(tailwindcss@3.4.3) + version: 3.16.0(react-dom@18.2.0)(react@18.2.0)(tailwindcss@3.4.3) '@upstash/ratelimit': specifier: ^0.4.4 version: 0.4.4 @@ -33,11 +27,11 @@ dependencies: specifier: ^1.0.0 version: 1.0.1 '@vercel/postgres': - specifier: ^0.5.1 - version: 0.5.1 + specifier: ^0.8.0 + version: 0.8.0 ai: specifier: ^2.2.22 - version: 2.2.37(react@18.2.0)(solid-js@1.8.16)(svelte@4.2.12)(vue@3.4.21) + version: 2.2.37(react@18.2.0)(solid-js@1.8.16)(svelte@4.2.14)(vue@3.4.22) clsx: specifier: ^2.0.0 version: 2.1.0 @@ -45,8 +39,8 @@ dependencies: specifier: ^2.30.0 version: 2.30.0 drizzle-orm: - specifier: ^0.30.5 - version: 0.30.7(@types/react@18.2.74)(@vercel/postgres@0.5.1)(pg@8.11.5)(react@18.2.0) + specifier: ^0.30.8 + version: 0.30.8(@types/react@18.2.78)(@vercel/postgres@0.8.0)(pg@8.11.5)(react@18.2.0) focus-trap-react: specifier: ^10.2.3 version: 10.2.3(prop-types@15.8.1)(react-dom@18.2.0)(react@18.2.0) @@ -76,7 +70,7 @@ dependencies: version: 4.4.1(react-dom@18.2.0)(react@18.2.0) novel: specifier: ^0.1.22 - version: 0.1.22(react@18.2.0)(solid-js@1.8.16)(svelte@4.2.12)(vue@3.4.21) + version: 0.1.22(react@18.2.0)(solid-js@1.8.16)(svelte@4.2.14)(vue@3.4.22) openai-edge: specifier: ^1.2.2 version: 1.2.2 @@ -91,10 +85,10 @@ dependencies: version: 18.2.0(react@18.2.0) react-textarea-autosize: specifier: ^8.5.3 - version: 8.5.3(@types/react@18.2.74)(react@18.2.0) + version: 8.5.3(@types/react@18.2.78)(react@18.2.0) react-tweet: specifier: ^3.1.1 - version: 3.2.0(react-dom@18.2.0)(react@18.2.0) + version: 3.2.1(react-dom@18.2.0)(react@18.2.0) remark: specifier: ^14.0.3 version: 14.0.3 @@ -129,13 +123,13 @@ devDependencies: version: 3.0.6 '@types/node': specifier: ^20.9.0 - version: 20.12.4 + version: 20.12.7 '@types/react': specifier: ^18.2.37 - version: 18.2.74 + version: 18.2.78 '@types/react-dom': specifier: ^18.2.15 - version: 18.2.24 + version: 18.2.25 autoprefixer: specifier: ^10.4.16 version: 10.4.19(postcss@8.4.38) @@ -147,7 +141,7 @@ devDependencies: version: 8.53.0 eslint-config-next: specifier: ^14.0.2 - version: 14.1.4(eslint@8.53.0)(typescript@5.4.3) + version: 14.2.1(eslint@8.53.0)(typescript@5.4.5) postcss: specifier: ^8.4.31 version: 8.4.38 @@ -156,10 +150,7 @@ devDependencies: version: 3.2.5 prettier-plugin-tailwindcss: specifier: ^0.5.7 - version: 0.5.13(prettier@3.2.5) - prisma: - specifier: ^5.5.2 - version: 5.12.0 + version: 0.5.14(prettier@3.2.5) tailwindcss: specifier: ^3.3.5 version: 3.4.3 @@ -168,7 +159,7 @@ devDependencies: version: 1.0.7(tailwindcss@3.4.3) typescript: specifier: ^5.2.2 - version: 5.4.3 + version: 5.4.5 packages: @@ -205,7 +196,7 @@ packages: '@panva/hkdf': 1.1.1 '@types/cookie': 0.6.0 cookie: 0.6.0 - jose: 5.2.3 + jose: 5.2.4 oauth4webapi: 2.10.4 preact: 10.11.3 preact-render-to-string: 5.2.3(preact@10.11.3) @@ -816,14 +807,14 @@ packages: resolution: {integrity: sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==} dev: false - /@headlessui/react@1.7.18(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-4i5DOrzwN4qSgNsL4Si61VMkUcWbcSKueUV7sFhpHzQcSShdlHENE5+QBntMSRvHt8NyoFO2AGG8si9lq+w4zQ==} + /@headlessui/react@1.7.19(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-Ll+8q3OlMJfJbAKM/+/Y2q6PPYbryqNTXDbryx7SXLIDamkF6iQFbriYHga0dY44PvDhvvBWCx1Xj4U5+G4hOw==} engines: {node: '>=10'} peerDependencies: react: ^16 || ^17 || ^18 react-dom: ^16 || ^17 || ^18 dependencies: - '@tanstack/react-virtual': 3.2.0(react-dom@18.2.0)(react@18.2.0) + '@tanstack/react-virtual': 3.3.0(react-dom@18.2.0)(react@18.2.0) client-only: 0.0.1 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -872,7 +863,7 @@ packages: dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.12.4 + '@types/node': 20.12.7 jest-mock: 29.7.0 dev: false @@ -882,7 +873,7 @@ packages: dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 20.12.4 + '@types/node': 20.12.7 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -902,7 +893,7 @@ packages: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 20.12.4 + '@types/node': 20.12.7 '@types/yargs': 17.0.32 chalk: 4.1.2 dev: false @@ -936,7 +927,7 @@ packages: resolution: {integrity: sha512-jLuwRlz8DQfQNiUCJR50Y09CGPq3fLtmtUQfVrj79E0JWu3dvsVcxVIcfhR5h0iXu+/z++zDrYeiJqifRynJkA==} dependencies: '@types/estree-jsx': 1.0.5 - '@types/mdx': 2.0.12 + '@types/mdx': 2.0.13 estree-util-build-jsx: 2.2.2 estree-util-is-identifier-name: 2.1.0 estree-util-to-js: 1.2.0 @@ -961,27 +952,17 @@ packages: peerDependencies: react: '>=16' dependencies: - '@types/mdx': 2.0.12 - '@types/react': 18.2.74 + '@types/mdx': 2.0.13 + '@types/react': 18.2.78 react: 18.2.0 dev: false - /@neondatabase/serverless@0.6.0: - resolution: {integrity: sha512-qXxBRYN0m2v8kVQBfMxbzNGn2xFAhTXFibzQlE++NfJ56Shz3m7+MyBBtXDlEH+3Wfa6lToDXf1MElocY4sJ3w==} + /@neondatabase/serverless@0.7.2: + resolution: {integrity: sha512-wU3WA2uTyNO7wjPs3Mg0G01jztAxUxzd9/mskMmtPwPTjf7JKWi9AW5/puOGXLxmZ9PVgRFeBVRVYq5nBPhsCg==} dependencies: '@types/pg': 8.6.6 dev: false - /@next-auth/prisma-adapter@1.0.7(@prisma/client@5.12.0)(next-auth@4.24.7): - resolution: {integrity: sha512-Cdko4KfcmKjsyHFrWwZ//lfLUbcLqlyFqjd/nYE2m3aZ7tjMNUjpks47iw7NTCnXf+5UWz5Ypyt1dSs1EP5QJw==} - peerDependencies: - '@prisma/client': '>=2.26.0 || >=3' - next-auth: ^4 - dependencies: - '@prisma/client': 5.12.0(prisma@5.12.0) - next-auth: 4.24.7(next@14.0.2)(react-dom@18.2.0)(react@18.2.0) - dev: false - /@next/env@13.4.20-canary.15: resolution: {integrity: sha512-89+fp4Hx/E3sPVqGsN9eoFp5yB22WRIKuuaGNkTWMfkePcVbqvxwgLZylWjej8gdhThjOxl4e4PN3Ee9Dib91g==} dev: false @@ -996,8 +977,8 @@ packages: glob: 7.1.7 dev: false - /@next/eslint-plugin-next@14.1.4: - resolution: {integrity: sha512-n4zYNLSyCo0Ln5b7qxqQeQ34OZKXwgbdcx6kmkQbywr+0k6M3Vinft0T72R6CDAcDrne2IAgSud4uWCzFgc5HA==} + /@next/eslint-plugin-next@14.2.1: + resolution: {integrity: sha512-Fp+mthEBjkn8r9qd6o4JgxKp0IDEzW0VYHD8ZC05xS5/lFNwHKuOdr2kVhWG7BQCO9L6eeepshM1Wbs2T+LgSg==} dependencies: glob: 10.3.10 dev: true @@ -1207,46 +1188,6 @@ packages: resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} dev: false - /@prisma/client@5.12.0(prisma@5.12.0): - resolution: {integrity: sha512-bk/+KPpRm0+IzqFCtAxrj+/TNiHzulspnO+OkysaYY/atc/eX0Gx8V3tTLxbHKVX0LKD4Hi8KKCcSbU1U72n7Q==} - engines: {node: '>=16.13'} - requiresBuild: true - peerDependencies: - prisma: '*' - peerDependenciesMeta: - prisma: - optional: true - dependencies: - prisma: 5.12.0 - dev: false - - /@prisma/debug@5.12.0: - resolution: {integrity: sha512-wK3fQLxPLMqf5riT5ZIhl8NffPSzFUwtzFX5CH7z/oI9Swmo9UhQlUgZABIVgdXSJ5OAlmRcDZtDKaMApIl8sg==} - - /@prisma/engines-version@5.12.0-21.473ed3124229e22d881cb7addf559799debae1ab: - resolution: {integrity: sha512-6yvO8s80Tym61aB4QNtYZfWVmE3pwqe807jEtzm8C5VDe7nw8O1FGX3TXUaXmWV0fQTIAfRbeL2Gwrndabp/0g==} - - /@prisma/engines@5.12.0: - resolution: {integrity: sha512-rFNRul9JGu0d3tf8etBgmDQ4NVoDwgGrRguvQOc8i+c6g7xPjRuu4aKzMMvHWUuccvRx5+fs1KMBxQ0x2THt+Q==} - requiresBuild: true - dependencies: - '@prisma/debug': 5.12.0 - '@prisma/engines-version': 5.12.0-21.473ed3124229e22d881cb7addf559799debae1ab - '@prisma/fetch-engine': 5.12.0 - '@prisma/get-platform': 5.12.0 - - /@prisma/fetch-engine@5.12.0: - resolution: {integrity: sha512-qkHQbZ1hspvOwcImvqY4yj7+FUlw0+uP+6tu3g24V4ULHOXLLkvr5ZZc6vy26OF0hkbD3kcDJCeutFis3poKgg==} - dependencies: - '@prisma/debug': 5.12.0 - '@prisma/engines-version': 5.12.0-21.473ed3124229e22d881cb7addf559799debae1ab - '@prisma/get-platform': 5.12.0 - - /@prisma/get-platform@5.12.0: - resolution: {integrity: sha512-81Ptv9YJnwTArEBPQ2Lvu58sZPxy4OixKxVVgysFan6A3bFP7q8gIg15WTjsRuH4WXh6B667EM9sqoMTNu0fLQ==} - dependencies: - '@prisma/debug': 5.12.0 - /@radix-ui/primitive@1.0.1: resolution: {integrity: sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw==} dependencies: @@ -1621,8 +1562,8 @@ packages: resolution: {integrity: sha512-dyHY+sMF0ihPus3O27ODd4+agdHMEmuRdyiZJ2CCWjPV5UFmn17ZbElvk6WOGVE4rdCJKZQCrPV2BcikOMLUGQ==} dev: false - /@rushstack/eslint-patch@1.10.1: - resolution: {integrity: sha512-S3Kq8e7LqxkA9s7HKLqXGTGck1uwis5vAXan3FnU5yw1Ec5hsSGnq4s/UCaSqABPOnOTg7zASLyst7+ohgWexg==} + /@rushstack/eslint-patch@1.10.2: + resolution: {integrity: sha512-hw437iINopmQuxWPSUEvqE56NCPsiU8N4AYtfHmJFckclktzK9YQJieD3XkDCDH4OjL+C7zgPUh73R/nrcHrqw==} /@sinclair/typebox@0.27.8: resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} @@ -1646,14 +1587,14 @@ packages: tslib: 2.6.2 dev: false - /@swc/helpers@0.5.2: - resolution: {integrity: sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==} + /@swc/helpers@0.5.10: + resolution: {integrity: sha512-CU+RF9FySljn7HVSkkjiB84hWkvTaI3rtLvF433+jRSBL2hMu3zX5bGhHS8C80SM++h4xy8hBSnUHFQHmRXSBw==} dependencies: tslib: 2.6.2 dev: false - /@swc/helpers@0.5.8: - resolution: {integrity: sha512-lruDGw3pnfM3wmZHeW7JuhkGQaJjPyiKjxeGhdmfoOT53Ic9qb5JLDNaK2HUdl1zLDeX28H221UvKjfdvSLVMg==} + /@swc/helpers@0.5.2: + resolution: {integrity: sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==} dependencies: tslib: 2.6.2 dev: false @@ -1679,288 +1620,288 @@ packages: tailwindcss: 3.4.3 dev: true - /@tanstack/react-virtual@3.2.0(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-OEdMByf2hEfDa6XDbGlZN8qO6bTjlNKqjM3im9JG+u3mCL8jALy0T/67oDI001raUUPh1Bdmfn4ZvPOV5knpcg==} + /@tanstack/react-virtual@3.3.0(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-QFxmTSZBniq15S0vSZ55P4ToXquMXwJypPXyX/ux7sYo6a2FX3/zWoRLLc4eIOGWTjvzqcIVNKhcuFb+OZL3aQ==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: - '@tanstack/virtual-core': 3.2.0 + '@tanstack/virtual-core': 3.3.0 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /@tanstack/virtual-core@3.2.0: - resolution: {integrity: sha512-P5XgYoAw/vfW65byBbJQCw+cagdXDT/qH6wmABiLt4v4YBT2q2vqCOhihe+D1Nt325F/S/0Tkv6C5z0Lv+VBQQ==} + /@tanstack/virtual-core@3.3.0: + resolution: {integrity: sha512-A0004OAa1FcUkPHeeGoKgBrAgjH+uHdDPrw1L7RpkwnODYqRvoilqsHPs8cyTjMg1byZBbiNpQAq2TlFLIaQag==} dev: false - /@tiptap/core@2.2.4(@tiptap/pm@2.2.4): - resolution: {integrity: sha512-cRrI8IlLIhCE1hacBQzXIC8dsRvGq6a4lYWQK/BaHuZg21CG7szp3Vd8Ix+ra1f5v0xPOT+Hy+QFNQooRMKMCw==} + /@tiptap/core@2.3.0(@tiptap/pm@2.3.0): + resolution: {integrity: sha512-Gk2JN3i5CMkYGmsbyFI7cBUftWa+F7QYmeCLTWfbuy+hCM2OBsnYVKxhggFPGXRL5KLBEgBWeCeWMHfIw3B2MA==} peerDependencies: '@tiptap/pm': ^2.0.0 dependencies: - '@tiptap/pm': 2.2.4 + '@tiptap/pm': 2.3.0 dev: false - /@tiptap/extension-blockquote@2.2.4(@tiptap/core@2.2.4): - resolution: {integrity: sha512-FrfPnn0VgVrUwWLwja1afX99JGLp6PE9ThVcmri+tLwUZQvTTVcCvHoCdOakav3/nge1+aV4iE3tQdyq1tWI9Q==} + /@tiptap/extension-blockquote@2.3.0(@tiptap/core@2.3.0): + resolution: {integrity: sha512-Cztt77t7f+f0fuPy+FWUL8rKTIpcdsVT0z0zYQFFafvGaom0ZALQSOdTR/q+Kle9I4DaCMO3/Q0mwax/D4k4+A==} peerDependencies: '@tiptap/core': ^2.0.0 dependencies: - '@tiptap/core': 2.2.4(@tiptap/pm@2.2.4) + '@tiptap/core': 2.3.0(@tiptap/pm@2.3.0) dev: false - /@tiptap/extension-bold@2.2.4(@tiptap/core@2.2.4): - resolution: {integrity: sha512-v3tTLc8YESFZPOGj5ByFr8VbmQ/PTo49T1vsK50VubxIN/5r9cXlKH8kb3dZlZxCxJa3FrXNO/M8rdGBSWQvSg==} + /@tiptap/extension-bold@2.3.0(@tiptap/core@2.3.0): + resolution: {integrity: sha512-SzkbJibHXFNU7TRaAebTtwbXUEhGZ8+MhlBn12aQ4QhdjNtFpQwKXQPyYeDyZGcyiOFgtFTb+WIfCGm8ZX0Fpw==} peerDependencies: '@tiptap/core': ^2.0.0 dependencies: - '@tiptap/core': 2.2.4(@tiptap/pm@2.2.4) + '@tiptap/core': 2.3.0(@tiptap/pm@2.3.0) dev: false - /@tiptap/extension-bubble-menu@2.2.4(@tiptap/core@2.2.4)(@tiptap/pm@2.2.4): - resolution: {integrity: sha512-Nx1fS9jcFlhxaTDYlnayz2UulhK6CMaePc36+7PQIVI+u20RhgTCRNr25zKNemvsiM0RPZZVUjlHkxC0l5as1Q==} + /@tiptap/extension-bubble-menu@2.3.0(@tiptap/core@2.3.0)(@tiptap/pm@2.3.0): + resolution: {integrity: sha512-dqyfQ8idTlhapvt0fxCGvkyjw92pBEwPqmkJ01h3EE8wTh53j0ytOHyMSf1KBuzardxpd8Yya3zlrAcR0Z3DlQ==} peerDependencies: '@tiptap/core': ^2.0.0 '@tiptap/pm': ^2.0.0 dependencies: - '@tiptap/core': 2.2.4(@tiptap/pm@2.2.4) - '@tiptap/pm': 2.2.4 + '@tiptap/core': 2.3.0(@tiptap/pm@2.3.0) + '@tiptap/pm': 2.3.0 tippy.js: 6.3.7 dev: false - /@tiptap/extension-bullet-list@2.2.4(@tiptap/core@2.2.4): - resolution: {integrity: sha512-z/MPmW8bhRougMuorl6MAQBXeK4rhlP+jBWlNwT+CT8h5IkXqPnDbM1sZeagp2nYfVV6Yc4RWpzimqHHtGnYTA==} + /@tiptap/extension-bullet-list@2.3.0(@tiptap/core@2.3.0): + resolution: {integrity: sha512-4nU4vJ5FjRDLqHm085vYAkuo68UK84Wl6CDSjm7sPVcu0FvQX02Okqt65azoSYQeS1SSSd5qq9YZuGWcYdp4Cw==} peerDependencies: '@tiptap/core': ^2.0.0 dependencies: - '@tiptap/core': 2.2.4(@tiptap/pm@2.2.4) + '@tiptap/core': 2.3.0(@tiptap/pm@2.3.0) dev: false - /@tiptap/extension-code-block@2.2.4(@tiptap/core@2.2.4)(@tiptap/pm@2.2.4): - resolution: {integrity: sha512-h6WV9TmaBEZmvqe1ezMR83DhCPUap6P2mSR5pwVk0WVq6rvZjfgU0iF3EetBJOeDgPlz7cNe2NMDfVb1nGTM/g==} + /@tiptap/extension-code-block@2.3.0(@tiptap/core@2.3.0)(@tiptap/pm@2.3.0): + resolution: {integrity: sha512-+Ne6PRBwQt70Pp8aW2PewaEy4bHrNYn4N+y8MObsFtqLutXBz4nXnsXWiNYFQZwzlUY+CHG4XS73mx8oMOFfDw==} peerDependencies: '@tiptap/core': ^2.0.0 '@tiptap/pm': ^2.0.0 dependencies: - '@tiptap/core': 2.2.4(@tiptap/pm@2.2.4) - '@tiptap/pm': 2.2.4 + '@tiptap/core': 2.3.0(@tiptap/pm@2.3.0) + '@tiptap/pm': 2.3.0 dev: false - /@tiptap/extension-code@2.2.4(@tiptap/core@2.2.4): - resolution: {integrity: sha512-JB4SJ2mUU/9qXFUf+K5K9szvovnN9AIcCb0f0UlcVBuddKHSqCl3wO3QJgYt44BfQTLMNuyzr+zVqfFd6BNt/g==} + /@tiptap/extension-code@2.3.0(@tiptap/core@2.3.0): + resolution: {integrity: sha512-O2FZmosiIRoVbW82fZy8xW4h4gb2xAzxWzHEcsHPlwCbE3vYvcBMmbkQ5p+33eRtuRQInzl3Q/cwupv9ctIepQ==} peerDependencies: '@tiptap/core': ^2.0.0 dependencies: - '@tiptap/core': 2.2.4(@tiptap/pm@2.2.4) + '@tiptap/core': 2.3.0(@tiptap/pm@2.3.0) dev: false - /@tiptap/extension-color@2.2.4(@tiptap/core@2.2.4)(@tiptap/extension-text-style@2.2.4): - resolution: {integrity: sha512-R3caThbG25gQz5b1+3PoJnVmuMF0lnqxPJ86l2ZWRAuqRSSEOJDYMGY5rlnPkAVW23Ej2FOuDFVxV/18pFHo3w==} + /@tiptap/extension-color@2.3.0(@tiptap/core@2.3.0)(@tiptap/extension-text-style@2.3.0): + resolution: {integrity: sha512-rqtdTaGawPZSRszwC/BlkJTF1diosIBBRSO5/YCRHT7CfGJNJyomL3eFREynXLKnXZ69SMceDh6yU6B54uTHXQ==} peerDependencies: '@tiptap/core': ^2.0.0 '@tiptap/extension-text-style': ^2.0.0 dependencies: - '@tiptap/core': 2.2.4(@tiptap/pm@2.2.4) - '@tiptap/extension-text-style': 2.2.4(@tiptap/core@2.2.4) + '@tiptap/core': 2.3.0(@tiptap/pm@2.3.0) + '@tiptap/extension-text-style': 2.3.0(@tiptap/core@2.3.0) dev: false - /@tiptap/extension-document@2.2.4(@tiptap/core@2.2.4): - resolution: {integrity: sha512-z+05xGK0OFoXV1GL+/8bzcZuWMdMA3+EKwk5c+iziG60VZcvGTF7jBRsZidlu9Oaj0cDwWHCeeo6L9SgSh6i2A==} + /@tiptap/extension-document@2.3.0(@tiptap/core@2.3.0): + resolution: {integrity: sha512-WC55SMrtlsNOnHXpzbXDzJOp7eKmZV0rXooKmvCDqoiLO/DKpyQXyF+0UHfcRPmUAi2GWFPaer7+p1H9xzcjXg==} peerDependencies: '@tiptap/core': ^2.0.0 dependencies: - '@tiptap/core': 2.2.4(@tiptap/pm@2.2.4) + '@tiptap/core': 2.3.0(@tiptap/pm@2.3.0) dev: false - /@tiptap/extension-dropcursor@2.2.4(@tiptap/core@2.2.4)(@tiptap/pm@2.2.4): - resolution: {integrity: sha512-IHwkEKmqpqXyJi16h7871NrcIqeyN7I6XRE2qdqi+MhGigVWI8nWHoYbjRKa7K/1uhs5zeRYyDlq5EuZyL6mgA==} + /@tiptap/extension-dropcursor@2.3.0(@tiptap/core@2.3.0)(@tiptap/pm@2.3.0): + resolution: {integrity: sha512-WWxxGQPWdbzxyYP6jtBYSq4wMRhINhI0wBC8pgkxTVwCIWftMuYj++FP4LLIpuWgj78PWApuoM0QQxk4Lj7FOw==} peerDependencies: '@tiptap/core': ^2.0.0 '@tiptap/pm': ^2.0.0 dependencies: - '@tiptap/core': 2.2.4(@tiptap/pm@2.2.4) - '@tiptap/pm': 2.2.4 + '@tiptap/core': 2.3.0(@tiptap/pm@2.3.0) + '@tiptap/pm': 2.3.0 dev: false - /@tiptap/extension-floating-menu@2.2.4(@tiptap/core@2.2.4)(@tiptap/pm@2.2.4): - resolution: {integrity: sha512-U25l7PEzOmlAPugNRl8t8lqyhQZS6W/+3f92+FdwW9qXju3i62iX/3OGCC3Gv+vybmQ4fbZmMjvl+VDfenNi3A==} + /@tiptap/extension-floating-menu@2.3.0(@tiptap/core@2.3.0)(@tiptap/pm@2.3.0): + resolution: {integrity: sha512-bNY43/yU/+wGfmk2eDV7EPDAN/akbC+YnSKTA5VPJADzscvlrL2HlQrxbd/STIdlwKqdPU5MokcvCChhfZ4f6w==} peerDependencies: '@tiptap/core': ^2.0.0 '@tiptap/pm': ^2.0.0 dependencies: - '@tiptap/core': 2.2.4(@tiptap/pm@2.2.4) - '@tiptap/pm': 2.2.4 + '@tiptap/core': 2.3.0(@tiptap/pm@2.3.0) + '@tiptap/pm': 2.3.0 tippy.js: 6.3.7 dev: false - /@tiptap/extension-gapcursor@2.2.4(@tiptap/core@2.2.4)(@tiptap/pm@2.2.4): - resolution: {integrity: sha512-Y6htT/RDSqkQ1UwG2Ia+rNVRvxrKPOs3RbqKHPaWr3vbFWwhHyKhMCvi/FqfI3d5pViVHOZQ7jhb5hT/a0BmNw==} + /@tiptap/extension-gapcursor@2.3.0(@tiptap/core@2.3.0)(@tiptap/pm@2.3.0): + resolution: {integrity: sha512-OxcXcfD0uzNcXdXu2ZpXFAtXIsgK2MBHvFUs0t0gxtcL/t43pTOQBLy+29Ei30BxpwLghtX8jQ6IDzMiybq/sA==} peerDependencies: '@tiptap/core': ^2.0.0 '@tiptap/pm': ^2.0.0 dependencies: - '@tiptap/core': 2.2.4(@tiptap/pm@2.2.4) - '@tiptap/pm': 2.2.4 + '@tiptap/core': 2.3.0(@tiptap/pm@2.3.0) + '@tiptap/pm': 2.3.0 dev: false - /@tiptap/extension-hard-break@2.2.4(@tiptap/core@2.2.4): - resolution: {integrity: sha512-FPvS57GcqHIeLbPKGJa3gnH30Xw+YB1PXXnAWG2MpnMtc2Vtj1l5xaYYBZB+ADdXLAlU0YMbKhFLQO4+pg1Isg==} + /@tiptap/extension-hard-break@2.3.0(@tiptap/core@2.3.0): + resolution: {integrity: sha512-9pXi69SzLabbjY5KZ54UKzu7HAHTla9aYZKH56VatOAiJOPKJppFbU2/NfJwGzDrEtfOiDqr3dYbUDF3RuCFoQ==} peerDependencies: '@tiptap/core': ^2.0.0 dependencies: - '@tiptap/core': 2.2.4(@tiptap/pm@2.2.4) + '@tiptap/core': 2.3.0(@tiptap/pm@2.3.0) dev: false - /@tiptap/extension-heading@2.2.4(@tiptap/core@2.2.4): - resolution: {integrity: sha512-gkq7Ns2FcrOCRq7Q+VRYt5saMt2R9g4REAtWy/jEevJ5UV5vA2AiGnYDmxwAkHutoYU0sAUkjqx37wE0wpamNw==} + /@tiptap/extension-heading@2.3.0(@tiptap/core@2.3.0): + resolution: {integrity: sha512-YcZoUYfqb0nohoPgem4f8mjn5OqDomFrbJiC9VRHUOCIuEu+aJEYwp8mmdkLnS3f+LRCZ6G76cJJ50lkzSAZRw==} peerDependencies: '@tiptap/core': ^2.0.0 dependencies: - '@tiptap/core': 2.2.4(@tiptap/pm@2.2.4) + '@tiptap/core': 2.3.0(@tiptap/pm@2.3.0) dev: false - /@tiptap/extension-highlight@2.2.4(@tiptap/core@2.2.4): - resolution: {integrity: sha512-GGl6ehKQ0Q0gGgUQhkWg2XYPfhVU5c0JD3NHzV4OrBP6JAtFeMYeSLdfYzFcmoYnGafvSZaJ3NukUvnDHZGzRg==} + /@tiptap/extension-highlight@2.3.0(@tiptap/core@2.3.0): + resolution: {integrity: sha512-An/tzoCMbugdaU02ORJeJ74DZI5pf9oqwX9RoYPQ5K81Ia3jG52BBVtFjGq/j10Tr4iOuCmOuE+PzNtnzz3UIw==} peerDependencies: '@tiptap/core': ^2.0.0 dependencies: - '@tiptap/core': 2.2.4(@tiptap/pm@2.2.4) + '@tiptap/core': 2.3.0(@tiptap/pm@2.3.0) dev: false - /@tiptap/extension-history@2.2.4(@tiptap/core@2.2.4)(@tiptap/pm@2.2.4): - resolution: {integrity: sha512-FDM32XYF5NU4mzh+fJ8w2CyUqv0l2Nl15sd6fOhQkVxSj8t57z+DUXc9ZR3zkH+1RAagYJo/2Gu3e99KpMr0tg==} + /@tiptap/extension-history@2.3.0(@tiptap/core@2.3.0)(@tiptap/pm@2.3.0): + resolution: {integrity: sha512-EF5Oq9fe/VBzU1Lsow2ubOlx1e1r4OQT1WUPGsRnL7pr94GH1Skpk7/hs9COJ9K6kP3Ebt42XjP0JEQodR58YA==} peerDependencies: '@tiptap/core': ^2.0.0 '@tiptap/pm': ^2.0.0 dependencies: - '@tiptap/core': 2.2.4(@tiptap/pm@2.2.4) - '@tiptap/pm': 2.2.4 + '@tiptap/core': 2.3.0(@tiptap/pm@2.3.0) + '@tiptap/pm': 2.3.0 dev: false - /@tiptap/extension-horizontal-rule@2.2.4(@tiptap/core@2.2.4)(@tiptap/pm@2.2.4): - resolution: {integrity: sha512-iCRHjFQQHApWg3R4fkKkJQhWEOdu1Fdc4YEAukdOXPSg3fg36IwjvsMXjt9SYBtVZ+iio3rORCZGXyMvgCH9uw==} + /@tiptap/extension-horizontal-rule@2.3.0(@tiptap/core@2.3.0)(@tiptap/pm@2.3.0): + resolution: {integrity: sha512-4DB8GU3uuDzzyqUmONIb3CHXcQ6Nuy4mHHkFSmUyEjg1i5eMQU5H7S6mNvZbltcJB2ImgCSwSMlj1kVN3MLIPg==} peerDependencies: '@tiptap/core': ^2.0.0 '@tiptap/pm': ^2.0.0 dependencies: - '@tiptap/core': 2.2.4(@tiptap/pm@2.2.4) - '@tiptap/pm': 2.2.4 + '@tiptap/core': 2.3.0(@tiptap/pm@2.3.0) + '@tiptap/pm': 2.3.0 dev: false - /@tiptap/extension-image@2.2.4(@tiptap/core@2.2.4): - resolution: {integrity: sha512-xOnqZpnP/fAfmK5AKmXplVQdXBtY5AoZ9B+qllH129aLABaDRzl3e14ZRHC8ahQawOmCe6AOCCXYUBXDOlY5Jg==} + /@tiptap/extension-image@2.3.0(@tiptap/core@2.3.0): + resolution: {integrity: sha512-v1fLEEzrfXWavsLFUEkTiYYxwm1WDNrjuUriU5tG2Jv22NL1BL4BLVbZbGdkAk+qHWy8QWszrDJbcgGh2VNCoQ==} peerDependencies: '@tiptap/core': ^2.0.0 dependencies: - '@tiptap/core': 2.2.4(@tiptap/pm@2.2.4) + '@tiptap/core': 2.3.0(@tiptap/pm@2.3.0) dev: false - /@tiptap/extension-italic@2.2.4(@tiptap/core@2.2.4): - resolution: {integrity: sha512-qIhGNvWnsQswSgEMRA8jQQjxfkOGNAuNWKEVQX9DPoqAUgknT41hQcAMP8L2+OdACpb2jbVMOO5Cy5Dof2L8/w==} + /@tiptap/extension-italic@2.3.0(@tiptap/core@2.3.0): + resolution: {integrity: sha512-jdFjLjdt5JtPlGMpoS6TEq5rznjbAYVlPwcw5VkYENVIYIGIR1ylIw2JwK1nUEsQ+OgYwVxHLejcUXWG1dCi2g==} peerDependencies: '@tiptap/core': ^2.0.0 dependencies: - '@tiptap/core': 2.2.4(@tiptap/pm@2.2.4) + '@tiptap/core': 2.3.0(@tiptap/pm@2.3.0) dev: false - /@tiptap/extension-link@2.2.4(@tiptap/core@2.2.4)(@tiptap/pm@2.2.4): - resolution: {integrity: sha512-Qsx0cFZm4dxbkToXs5TcXbSoUdicv8db1gV1DYIZdETqjBm4wFjlzCUP7hPHFlvNfeSy1BzAMRt+RpeuiwvxWQ==} + /@tiptap/extension-link@2.3.0(@tiptap/core@2.3.0)(@tiptap/pm@2.3.0): + resolution: {integrity: sha512-CnJAlV0ZOdEhKmDfYKuHJVG8g79iCFQ85cX/CROTWyuMfXz9uhj2rLpZ6nfidVbonqxAhQp7NAIr2y+Fj5/53A==} peerDependencies: '@tiptap/core': ^2.0.0 '@tiptap/pm': ^2.0.0 dependencies: - '@tiptap/core': 2.2.4(@tiptap/pm@2.2.4) - '@tiptap/pm': 2.2.4 + '@tiptap/core': 2.3.0(@tiptap/pm@2.3.0) + '@tiptap/pm': 2.3.0 linkifyjs: 4.1.3 dev: false - /@tiptap/extension-list-item@2.2.4(@tiptap/core@2.2.4): - resolution: {integrity: sha512-lPLKGKsHpM9ClUa8n7GEUn8pG6HCYU0vFruIy3l2t6jZdHkrgBnYtVGMZ13K8UDnj/hlAlccxku0D0P4mA1Vrg==} + /@tiptap/extension-list-item@2.3.0(@tiptap/core@2.3.0): + resolution: {integrity: sha512-mHU+IuRa56OT6YCtxf5Z7OSUrbWdKhGCEX7RTrteDVs5oMB6W3oF9j88M5qQmZ1WDcxvQhAOoXctnMt6eX9zcA==} peerDependencies: '@tiptap/core': ^2.0.0 dependencies: - '@tiptap/core': 2.2.4(@tiptap/pm@2.2.4) + '@tiptap/core': 2.3.0(@tiptap/pm@2.3.0) dev: false - /@tiptap/extension-ordered-list@2.2.4(@tiptap/core@2.2.4): - resolution: {integrity: sha512-TpFy140O9Af1JciXt+xwqYUXxcJ6YG8zi/B5UDJujp+FH5sCmlYYBBnWxiFMhVaj6yEmA2eafu1qUkic/1X5Aw==} + /@tiptap/extension-ordered-list@2.3.0(@tiptap/core@2.3.0): + resolution: {integrity: sha512-gkf0tltXjlUj0cqyfDV2r7xy9YPKtcVSWwlCPun6OOi0KzKFiAMqQpA9hy2W6gJ+KCp8+KNRMClZOfH4TnnBfg==} peerDependencies: '@tiptap/core': ^2.0.0 dependencies: - '@tiptap/core': 2.2.4(@tiptap/pm@2.2.4) + '@tiptap/core': 2.3.0(@tiptap/pm@2.3.0) dev: false - /@tiptap/extension-paragraph@2.2.4(@tiptap/core@2.2.4): - resolution: {integrity: sha512-m1KwyvTNJxsq7StbspbcOhxO4Wk4YpElDbqOouWi+H4c8azdpI5Pn96ZqhFeE9bSyjByg6OcB/wqoJsLbeFWdQ==} + /@tiptap/extension-paragraph@2.3.0(@tiptap/core@2.3.0): + resolution: {integrity: sha512-peCpA7DFqkd0cHb+cHv4YHNoMsXG8tKFNJlCHpLmsZWl2hWmpKgKmUrXAUfzjcFSvkZxn0xYc5oWbqUgg+2LzA==} peerDependencies: '@tiptap/core': ^2.0.0 dependencies: - '@tiptap/core': 2.2.4(@tiptap/pm@2.2.4) + '@tiptap/core': 2.3.0(@tiptap/pm@2.3.0) dev: false - /@tiptap/extension-placeholder@2.0.3(@tiptap/core@2.2.4)(@tiptap/pm@2.2.4): + /@tiptap/extension-placeholder@2.0.3(@tiptap/core@2.3.0)(@tiptap/pm@2.3.0): resolution: {integrity: sha512-Z42jo0termRAf0S0L8oxrts94IWX5waU4isS2CUw8xCUigYyCFslkhQXkWATO1qRbjNFLKN2C9qvCgGf4UeBrw==} peerDependencies: '@tiptap/core': ^2.0.0 '@tiptap/pm': ^2.0.0 dependencies: - '@tiptap/core': 2.2.4(@tiptap/pm@2.2.4) - '@tiptap/pm': 2.2.4 + '@tiptap/core': 2.3.0(@tiptap/pm@2.3.0) + '@tiptap/pm': 2.3.0 dev: false - /@tiptap/extension-strike@2.2.4(@tiptap/core@2.2.4): - resolution: {integrity: sha512-/a2EwQgA+PpG17V2tVRspcrIY0SN3blwcgM7lxdW4aucGkqSKnf7+91dkhQEwCZ//o8kv9mBCyRoCUcGy6S5Xg==} + /@tiptap/extension-strike@2.3.0(@tiptap/core@2.3.0): + resolution: {integrity: sha512-gOW4ALeH8gkJiUGGXVy/AOd5lAPTX0bzoOW1+sCLcTA7t8dluBW7M2ngNYxTEtlKqyv7aLfrgsYSiqucmmfSLw==} peerDependencies: '@tiptap/core': ^2.0.0 dependencies: - '@tiptap/core': 2.2.4(@tiptap/pm@2.2.4) + '@tiptap/core': 2.3.0(@tiptap/pm@2.3.0) dev: false - /@tiptap/extension-task-item@2.2.4(@tiptap/core@2.2.4)(@tiptap/pm@2.2.4): - resolution: {integrity: sha512-Ixzv7bPcgrWelSD0Jy6yAlHxmGWpD5lPt6Ey4POYy7u98duyUFOBMHLcsV24ipQsRacuB+htgmuqOrkiL+hg7w==} + /@tiptap/extension-task-item@2.3.0(@tiptap/core@2.3.0)(@tiptap/pm@2.3.0): + resolution: {integrity: sha512-WvQJiQSskI1dZLPgNH4hmYPW0HFyR/EHwogzVnY7XCn2/5isV0ewyaVuSfqTXvfEA/R5uCi95opwz61NFBc2nQ==} peerDependencies: '@tiptap/core': ^2.0.0 '@tiptap/pm': ^2.0.0 dependencies: - '@tiptap/core': 2.2.4(@tiptap/pm@2.2.4) - '@tiptap/pm': 2.2.4 + '@tiptap/core': 2.3.0(@tiptap/pm@2.3.0) + '@tiptap/pm': 2.3.0 dev: false - /@tiptap/extension-task-list@2.2.4(@tiptap/core@2.2.4): - resolution: {integrity: sha512-URh1Yzj/YZBOMkobK4/U8s1QYwIIqHm4b0YadLPPZx9IzTjyV/2bvIakphCmBtxWxeTXW5TbO9eNod3qatq21w==} + /@tiptap/extension-task-list@2.3.0(@tiptap/core@2.3.0): + resolution: {integrity: sha512-TBgqf4s3DpUV97w7AAj1WZDnZ3rZQ8B645d9bBayo4VfRzHCLefv5cVP/Ye9GA23T4FZoHNR+yIPrM7SfhkmPA==} peerDependencies: '@tiptap/core': ^2.0.0 dependencies: - '@tiptap/core': 2.2.4(@tiptap/pm@2.2.4) + '@tiptap/core': 2.3.0(@tiptap/pm@2.3.0) dev: false - /@tiptap/extension-text-style@2.2.4(@tiptap/core@2.2.4): - resolution: {integrity: sha512-8Mcxy+HUHPUgK7bOv34m8zhbhzPm6f1/hgbgwz9m+Oel7MNPElsMXtxxygbwtr7Hbj6S4NBoBl/Ir4BkziYRbQ==} + /@tiptap/extension-text-style@2.3.0(@tiptap/core@2.3.0): + resolution: {integrity: sha512-S+sQZqd+QtJjbZ0LOp0Krf0dlrdMx7BQL0sUNKPq8XXRMcfW0pEEFGIU/0VDFQCldLIuyd7lZ8zo5cjaAgskIA==} peerDependencies: '@tiptap/core': ^2.0.0 dependencies: - '@tiptap/core': 2.2.4(@tiptap/pm@2.2.4) + '@tiptap/core': 2.3.0(@tiptap/pm@2.3.0) dev: false - /@tiptap/extension-text@2.2.4(@tiptap/core@2.2.4): - resolution: {integrity: sha512-NlKHMPnRJXB+0AGtDlU0P2Pg+SdesA2lMMd7JzDUgJgL7pX2jOb8eUqSeOjFKuSzFSqYfH6C3o6mQiNhuQMv+g==} + /@tiptap/extension-text@2.3.0(@tiptap/core@2.3.0): + resolution: {integrity: sha512-zkudl0TyKRy/8vHtyo5dMzjBRD0HEUnsS8YOsjR4xwQq5EYUXleRgM1s6lb6Yms2sLUAZRWdDddoQ686iq4zQg==} peerDependencies: '@tiptap/core': ^2.0.0 dependencies: - '@tiptap/core': 2.2.4(@tiptap/pm@2.2.4) + '@tiptap/core': 2.3.0(@tiptap/pm@2.3.0) dev: false - /@tiptap/extension-underline@2.2.4(@tiptap/core@2.2.4): - resolution: {integrity: sha512-jCHgIJMwtXlGHVy/j3L8/QvglHCikkHJw7YS5yf8E/8HlPh1tZfVy/IxdgacDOpUN30X+UPJZQDdVKymafgwdA==} + /@tiptap/extension-underline@2.3.0(@tiptap/core@2.3.0): + resolution: {integrity: sha512-vmmcwCPmWqGKYHZevz50+bxrpHyiu5y6YZweAE476hn8Mud6vYg7RpkXgW8bjkCOky6UA51uelslSc0XrLE6uw==} peerDependencies: '@tiptap/core': ^2.0.0 dependencies: - '@tiptap/core': 2.2.4(@tiptap/pm@2.2.4) + '@tiptap/core': 2.3.0(@tiptap/pm@2.3.0) dev: false - /@tiptap/pm@2.2.4: - resolution: {integrity: sha512-Po0klR165zgtinhVp1nwMubjyKx6gAY9kH3IzcniYLCkqhPgiqnAcCr61TBpp4hfK8YURBS4ihvCB1dyfCyY8A==} + /@tiptap/pm@2.3.0: + resolution: {integrity: sha512-4WYqShZBwDyReKvapC0nmeYdOtZbZ31y4MjolpKQaSD4I7kg/oZspC+byUGdvIRsNpRN7i2X0IyvdISKk8gw5Q==} dependencies: prosemirror-changeset: 2.2.1 prosemirror-collab: 1.3.1 @@ -1972,66 +1913,66 @@ packages: prosemirror-keymap: 1.2.2 prosemirror-markdown: 1.12.0 prosemirror-menu: 1.2.4 - prosemirror-model: 1.19.4 + prosemirror-model: 1.20.0 prosemirror-schema-basic: 1.2.2 prosemirror-schema-list: 1.3.0 prosemirror-state: 1.4.3 prosemirror-tables: 1.3.7 - prosemirror-trailing-node: 2.0.8(prosemirror-model@1.19.4)(prosemirror-state@1.4.3)(prosemirror-view@1.33.3) + prosemirror-trailing-node: 2.0.8(prosemirror-model@1.20.0)(prosemirror-state@1.4.3)(prosemirror-view@1.33.4) prosemirror-transform: 1.8.0 - prosemirror-view: 1.33.3 + prosemirror-view: 1.33.4 dev: false - /@tiptap/react@2.2.4(@tiptap/core@2.2.4)(@tiptap/pm@2.2.4)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-HkYmMZWcETPZn3KpzdDg/ns2TKeFh54TvtCEInA4ljYtWGLoZc/A+KaiEtMIgVs+Mo1XwrhuoNGjL9c0OK2HJw==} + /@tiptap/react@2.3.0(@tiptap/core@2.3.0)(@tiptap/pm@2.3.0)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-ThgFJQTWYKRClTV2Zg0wBRqfy0EGz3U4NOey7jwncUjSjx5+o9nXbfQAYWDKQFfWyE+wnrBTYfddEP9pHNX5cQ==} peerDependencies: '@tiptap/core': ^2.0.0 '@tiptap/pm': ^2.0.0 react: ^17.0.0 || ^18.0.0 react-dom: ^17.0.0 || ^18.0.0 dependencies: - '@tiptap/core': 2.2.4(@tiptap/pm@2.2.4) - '@tiptap/extension-bubble-menu': 2.2.4(@tiptap/core@2.2.4)(@tiptap/pm@2.2.4) - '@tiptap/extension-floating-menu': 2.2.4(@tiptap/core@2.2.4)(@tiptap/pm@2.2.4) - '@tiptap/pm': 2.2.4 + '@tiptap/core': 2.3.0(@tiptap/pm@2.3.0) + '@tiptap/extension-bubble-menu': 2.3.0(@tiptap/core@2.3.0)(@tiptap/pm@2.3.0) + '@tiptap/extension-floating-menu': 2.3.0(@tiptap/core@2.3.0)(@tiptap/pm@2.3.0) + '@tiptap/pm': 2.3.0 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /@tiptap/starter-kit@2.2.4(@tiptap/pm@2.2.4): - resolution: {integrity: sha512-Kbk7qUfIZg3+bNa3e/wBeDQt4jJB46uQgM+xy5NSY6H8NZP6gdmmap3aIrn9S/W/hGpxJl4RcXAeaT0CQji9XA==} - dependencies: - '@tiptap/core': 2.2.4(@tiptap/pm@2.2.4) - '@tiptap/extension-blockquote': 2.2.4(@tiptap/core@2.2.4) - '@tiptap/extension-bold': 2.2.4(@tiptap/core@2.2.4) - '@tiptap/extension-bullet-list': 2.2.4(@tiptap/core@2.2.4) - '@tiptap/extension-code': 2.2.4(@tiptap/core@2.2.4) - '@tiptap/extension-code-block': 2.2.4(@tiptap/core@2.2.4)(@tiptap/pm@2.2.4) - '@tiptap/extension-document': 2.2.4(@tiptap/core@2.2.4) - '@tiptap/extension-dropcursor': 2.2.4(@tiptap/core@2.2.4)(@tiptap/pm@2.2.4) - '@tiptap/extension-gapcursor': 2.2.4(@tiptap/core@2.2.4)(@tiptap/pm@2.2.4) - '@tiptap/extension-hard-break': 2.2.4(@tiptap/core@2.2.4) - '@tiptap/extension-heading': 2.2.4(@tiptap/core@2.2.4) - '@tiptap/extension-history': 2.2.4(@tiptap/core@2.2.4)(@tiptap/pm@2.2.4) - '@tiptap/extension-horizontal-rule': 2.2.4(@tiptap/core@2.2.4)(@tiptap/pm@2.2.4) - '@tiptap/extension-italic': 2.2.4(@tiptap/core@2.2.4) - '@tiptap/extension-list-item': 2.2.4(@tiptap/core@2.2.4) - '@tiptap/extension-ordered-list': 2.2.4(@tiptap/core@2.2.4) - '@tiptap/extension-paragraph': 2.2.4(@tiptap/core@2.2.4) - '@tiptap/extension-strike': 2.2.4(@tiptap/core@2.2.4) - '@tiptap/extension-text': 2.2.4(@tiptap/core@2.2.4) + /@tiptap/starter-kit@2.3.0(@tiptap/pm@2.3.0): + resolution: {integrity: sha512-TjvCd/hzEnuEYOdr5uQqcfHOMuj7JRoZBPdheupwl3SbuYiCxtcqYyAE5qoGXWwuVe9xVGerOLVPkDUgmyrH6A==} + dependencies: + '@tiptap/core': 2.3.0(@tiptap/pm@2.3.0) + '@tiptap/extension-blockquote': 2.3.0(@tiptap/core@2.3.0) + '@tiptap/extension-bold': 2.3.0(@tiptap/core@2.3.0) + '@tiptap/extension-bullet-list': 2.3.0(@tiptap/core@2.3.0) + '@tiptap/extension-code': 2.3.0(@tiptap/core@2.3.0) + '@tiptap/extension-code-block': 2.3.0(@tiptap/core@2.3.0)(@tiptap/pm@2.3.0) + '@tiptap/extension-document': 2.3.0(@tiptap/core@2.3.0) + '@tiptap/extension-dropcursor': 2.3.0(@tiptap/core@2.3.0)(@tiptap/pm@2.3.0) + '@tiptap/extension-gapcursor': 2.3.0(@tiptap/core@2.3.0)(@tiptap/pm@2.3.0) + '@tiptap/extension-hard-break': 2.3.0(@tiptap/core@2.3.0) + '@tiptap/extension-heading': 2.3.0(@tiptap/core@2.3.0) + '@tiptap/extension-history': 2.3.0(@tiptap/core@2.3.0)(@tiptap/pm@2.3.0) + '@tiptap/extension-horizontal-rule': 2.3.0(@tiptap/core@2.3.0)(@tiptap/pm@2.3.0) + '@tiptap/extension-italic': 2.3.0(@tiptap/core@2.3.0) + '@tiptap/extension-list-item': 2.3.0(@tiptap/core@2.3.0) + '@tiptap/extension-ordered-list': 2.3.0(@tiptap/core@2.3.0) + '@tiptap/extension-paragraph': 2.3.0(@tiptap/core@2.3.0) + '@tiptap/extension-strike': 2.3.0(@tiptap/core@2.3.0) + '@tiptap/extension-text': 2.3.0(@tiptap/core@2.3.0) transitivePeerDependencies: - '@tiptap/pm' dev: false - /@tiptap/suggestion@2.2.4(@tiptap/core@2.2.4)(@tiptap/pm@2.2.4): - resolution: {integrity: sha512-g6HHsKM6K3asW+ZlwMYyLCRqCRaswoliZOQofY4iZt5ru5HNTSzm3YW4XSyW5RGXJIuc319yyrOFgtJ3Fyu5rQ==} + /@tiptap/suggestion@2.3.0(@tiptap/core@2.3.0)(@tiptap/pm@2.3.0): + resolution: {integrity: sha512-QngwR9ahodVfwqp/kXxJvuL3zNb6XZu+vCuWy8RJrGP8DA7SCI9t8t7iB6NfG4kSsRGxM+3DuLi+2xOZQUaEVQ==} peerDependencies: '@tiptap/core': ^2.0.0 '@tiptap/pm': ^2.0.0 dependencies: - '@tiptap/core': 2.2.4(@tiptap/pm@2.2.4) - '@tiptap/pm': 2.2.4 + '@tiptap/core': 2.3.0(@tiptap/pm@2.3.0) + '@tiptap/pm': 2.3.0 dev: false /@tootallnate/once@2.0.0: @@ -2039,21 +1980,21 @@ packages: engines: {node: '>= 10'} dev: false - /@tremor/react@3.15.0(react-dom@18.2.0)(react@18.2.0)(tailwindcss@3.4.3): - resolution: {integrity: sha512-TNhLzlGV9ph0Bzd7uTFHaE7Je9diIDuqt7Khnm5XkqO7y0jTE+9aGT/gcV6qTZV/9dfkcv8Aw1J/NpxH+hynGQ==} + /@tremor/react@3.16.0(react-dom@18.2.0)(react@18.2.0)(tailwindcss@3.4.3): + resolution: {integrity: sha512-wKOGTMFwBbadYolFoOKYPjvwtgHZVB/1tS0QLaNpOpoBn3Tlx/Bb2RNsLPNGCmFTb9tNfOSGoOBwd8uukWA9xg==} peerDependencies: react: ^18.0.0 react-dom: '>=16.6.0' dependencies: '@floating-ui/react': 0.19.2(react-dom@18.2.0)(react@18.2.0) - '@headlessui/react': 1.7.18(react-dom@18.2.0)(react@18.2.0) + '@headlessui/react': 1.7.19(react-dom@18.2.0)(react@18.2.0) '@headlessui/tailwindcss': 0.2.0(tailwindcss@3.4.3) date-fns: 2.30.0 react: 18.2.0 react-day-picker: 8.10.0(date-fns@2.30.0)(react@18.2.0) react-dom: 18.2.0(react@18.2.0) react-transition-state: 2.1.1(react-dom@18.2.0)(react@18.2.0) - recharts: 2.12.4(react-dom@18.2.0)(react@18.2.0) + recharts: 2.12.5(react-dom@18.2.0)(react@18.2.0) tailwind-merge: 1.14.0 transitivePeerDependencies: - tailwindcss @@ -2160,7 +2101,7 @@ packages: /@types/jsdom@20.0.1: resolution: {integrity: sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==} dependencies: - '@types/node': 20.12.4 + '@types/node': 20.12.7 '@types/tough-cookie': 4.0.5 parse5: 7.1.2 dev: false @@ -2189,8 +2130,8 @@ packages: resolution: {integrity: sha512-6L6VymKTzYSrEf4Nev4Xa1LCHKrlTlYCBMTlQKFuddo1CvQcE52I0mwfOJayueUC7MJuXOeHTcIU683lzd0cUA==} dev: false - /@types/mdx@2.0.12: - resolution: {integrity: sha512-H9VZ9YqE+H28FQVchC83RCs5xQ2J7mAAv6qdDEaWmXEVl3OpdH+xfrSUzQ1lp7U7oSTRZ0RvW08ASPJsYBi7Cw==} + /@types/mdx@2.0.13: + resolution: {integrity: sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==} dev: false /@types/ms@0.7.34: @@ -2201,15 +2142,15 @@ packages: resolution: {integrity: sha512-p6ua9zBxz5otCmbpb5D3U4B5Nanw6Pk3PPyX05xnxbB/fRv71N7CPmORg7uAD5P70T0xmx1pzAx/FUfa5X+3cw==} dev: false - /@types/node@20.12.4: - resolution: {integrity: sha512-E+Fa9z3wSQpzgYQdYmme5X3OTuejnnTx88A6p6vkkJosR3KBz+HpE3kqNm98VE6cfLFcISx7zW7MsJkH6KwbTw==} + /@types/node@20.12.7: + resolution: {integrity: sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==} dependencies: undici-types: 5.26.5 /@types/pg@8.6.6: resolution: {integrity: sha512-O2xNmXebtwVekJDD+02udOncjVcMZQuTEQEMpKJ0ZRf5E7/9JJX3izhKUcUifBkyKpljyUM6BTgy2trmviKlpw==} dependencies: - '@types/node': 20.12.4 + '@types/node': 20.12.7 pg-protocol: 1.6.1 pg-types: 2.2.0 dev: false @@ -2220,13 +2161,13 @@ packages: /@types/react-dom@18.0.11: resolution: {integrity: sha512-O38bPbI2CWtgw/OoQoY+BRelw7uysmXbWvw3nLWO21H1HSh+GOlqPuXshJfjmpNlKiiSDG9cc1JZAaMmVdcTlw==} dependencies: - '@types/react': 18.2.74 + '@types/react': 18.2.78 dev: false - /@types/react-dom@18.2.24: - resolution: {integrity: sha512-cN6upcKd8zkGy4HU9F1+/s98Hrp6D4MOcippK4PoE8OZRngohHZpbJn1GsaDLz87MqvHNoT13nHvNqM9ocRHZg==} + /@types/react-dom@18.2.25: + resolution: {integrity: sha512-o/V48vf4MQh7juIKZU2QGDfli6p1+OOi5oXx36Hffpc9adsHeXjVp8rHuPkjd8VT8sOJ2Zp05HR7CdpGTIUFUA==} dependencies: - '@types/react': 18.2.74 + '@types/react': 18.2.78 dev: true /@types/react@18.0.28: @@ -2237,8 +2178,8 @@ packages: csstype: 3.1.3 dev: false - /@types/react@18.2.74: - resolution: {integrity: sha512-9AEqNZZyBx8OdZpxzQlaFEVCSFUM2YXJH46yPOiOpm078k6ZLOCcuAzGum/zK8YBwY+dbahVNbHrbgrAwIRlqw==} + /@types/react@18.2.78: + resolution: {integrity: sha512-qOwdPnnitQY4xKlKayt42q5W5UQrSHjgoXNVEtxeqdITJ99k4VXJOP3vt8Rkm9HmgJpH50UNU+rlqfkfWOqp0A==} dependencies: '@types/prop-types': 15.7.12 csstype: 3.1.3 @@ -2293,23 +2234,23 @@ packages: - supports-color dev: false - /@typescript-eslint/parser@6.21.0(eslint@8.53.0)(typescript@5.4.3): - resolution: {integrity: sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==} + /@typescript-eslint/parser@7.2.0(eslint@8.53.0)(typescript@5.4.5): + resolution: {integrity: sha512-5FKsVcHTk6TafQKQbuIVkXq58Fnbkd2wDL4LB7AURN7RUOu1utVP+G8+6u3ZhEroW3DF6hyo3ZEXxgKgp4KeCg==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: - eslint: ^7.0.0 || ^8.0.0 + eslint: ^8.56.0 typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 6.21.0 - '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.3) - '@typescript-eslint/visitor-keys': 6.21.0 + '@typescript-eslint/scope-manager': 7.2.0 + '@typescript-eslint/types': 7.2.0 + '@typescript-eslint/typescript-estree': 7.2.0(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 7.2.0 debug: 4.3.4 eslint: 8.53.0 - typescript: 5.4.3 + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true @@ -2322,12 +2263,12 @@ packages: '@typescript-eslint/visitor-keys': 5.62.0 dev: false - /@typescript-eslint/scope-manager@6.21.0: - resolution: {integrity: sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==} + /@typescript-eslint/scope-manager@7.2.0: + resolution: {integrity: sha512-Qh976RbQM/fYtjx9hs4XkayYujB/aPwglw2choHmf3zBjB4qOywWSdt9+KLRdHubGcoSwBnXUH2sR3hkyaERRg==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/visitor-keys': 6.21.0 + '@typescript-eslint/types': 7.2.0 + '@typescript-eslint/visitor-keys': 7.2.0 dev: true /@typescript-eslint/types@5.62.0: @@ -2335,8 +2276,8 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: false - /@typescript-eslint/types@6.21.0: - resolution: {integrity: sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==} + /@typescript-eslint/types@7.2.0: + resolution: {integrity: sha512-XFtUHPI/abFhm4cbCDc5Ykc8npOKBSJePY3a3s+lwumt7XWJuzP5cZcfZ610MIPHjQjNsOLlYK8ASPaNG8UiyA==} engines: {node: ^16.0.0 || >=18.0.0} dev: true @@ -2361,8 +2302,8 @@ packages: - supports-color dev: false - /@typescript-eslint/typescript-estree@6.21.0(typescript@5.4.3): - resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} + /@typescript-eslint/typescript-estree@7.2.0(typescript@5.4.5): + resolution: {integrity: sha512-cyxS5WQQCoBwSakpMrvMXuMDEbhOo9bNHHrNcEWis6XHx6KF518tkF1wBvKIn/tpq5ZpUYK7Bdklu8qY0MsFIA==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: typescript: '*' @@ -2370,15 +2311,15 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/visitor-keys': 6.21.0 + '@typescript-eslint/types': 7.2.0 + '@typescript-eslint/visitor-keys': 7.2.0 debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 minimatch: 9.0.3 semver: 7.6.0 - ts-api-utils: 1.3.0(typescript@5.4.3) - typescript: 5.4.3 + ts-api-utils: 1.3.0(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true @@ -2391,11 +2332,11 @@ packages: eslint-visitor-keys: 3.4.3 dev: false - /@typescript-eslint/visitor-keys@6.21.0: - resolution: {integrity: sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==} + /@typescript-eslint/visitor-keys@7.2.0: + resolution: {integrity: sha512-c6EIQRHhcpl6+tO8EMR+kjkkV+ugUNXOmeASA1rlzkd8EPIriavpWoiEz1HR/VLhbVIdhqnV6E7JZm00cBDx2A==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/types': 7.2.0 eslint-visitor-keys: 3.4.3 dev: true @@ -2505,87 +2446,87 @@ packages: '@upstash/redis': 1.25.1 dev: false - /@vercel/postgres@0.5.1: - resolution: {integrity: sha512-JKl8QOBIDnifhkxAhIKtY0A5Tb8oWBf2nzZhm0OH7Ffjsl0hGVnDL2w1/FCfpX8xna3JAWM034NGuhZfTFdmiw==} + /@vercel/postgres@0.8.0: + resolution: {integrity: sha512-/QUV9ExwaNdKooRjOQqvrKNVnRvsaXeukPNI5DB1ovUTesglfR/fparw7ngo1KUWWKIVpEj2TRrA+ObRHRdaLg==} engines: {node: '>=14.6'} dependencies: - '@neondatabase/serverless': 0.6.0 + '@neondatabase/serverless': 0.7.2 bufferutil: 4.0.8 utf-8-validate: 6.0.3 ws: 8.14.2(bufferutil@4.0.8)(utf-8-validate@6.0.3) dev: false - /@vue/compiler-core@3.4.21: - resolution: {integrity: sha512-MjXawxZf2SbZszLPYxaFCjxfibYrzr3eYbKxwpLR9EQN+oaziSu3qKVbwBERj1IFIB8OLUewxB5m/BFzi613og==} + /@vue/compiler-core@3.4.22: + resolution: {integrity: sha512-FBDRCBE/rFPA8OfTUrARx2c49N7zoImlGT7hsFikv0pZxQlFhffQwewpEXaLynZW0/DspVXmNA+QQ9dXINpWmg==} dependencies: '@babel/parser': 7.24.4 - '@vue/shared': 3.4.21 + '@vue/shared': 3.4.22 entities: 4.5.0 estree-walker: 2.0.2 source-map-js: 1.2.0 dev: false - /@vue/compiler-dom@3.4.21: - resolution: {integrity: sha512-IZC6FKowtT1sl0CR5DpXSiEB5ayw75oT2bma1BEhV7RRR1+cfwLrxc2Z8Zq/RGFzJ8w5r9QtCOvTjQgdn0IKmA==} + /@vue/compiler-dom@3.4.22: + resolution: {integrity: sha512-YkAS+jZc6Ip360kT3lZbMQZteiYBbHDSVKr94Jdd8Zjr7VjSkkXKAFFR/FW+2tNtBYXOps6xrWlOquy3GeYB0w==} dependencies: - '@vue/compiler-core': 3.4.21 - '@vue/shared': 3.4.21 + '@vue/compiler-core': 3.4.22 + '@vue/shared': 3.4.22 dev: false - /@vue/compiler-sfc@3.4.21: - resolution: {integrity: sha512-me7epoTxYlY+2CUM7hy9PCDdpMPfIwrOvAXud2Upk10g4YLv9UBW7kL798TvMeDhPthkZ0CONNrK2GoeI1ODiQ==} + /@vue/compiler-sfc@3.4.22: + resolution: {integrity: sha512-Pncp5Vc8E2Ef1o5uveO8WA1IqM7rt0R1jN8D4qitQYOUxC97iITGYA8oMInQ3UcDS7ip+SegyA2HbAEB4V6NMQ==} dependencies: '@babel/parser': 7.24.4 - '@vue/compiler-core': 3.4.21 - '@vue/compiler-dom': 3.4.21 - '@vue/compiler-ssr': 3.4.21 - '@vue/shared': 3.4.21 + '@vue/compiler-core': 3.4.22 + '@vue/compiler-dom': 3.4.22 + '@vue/compiler-ssr': 3.4.22 + '@vue/shared': 3.4.22 estree-walker: 2.0.2 magic-string: 0.30.9 postcss: 8.4.38 source-map-js: 1.2.0 dev: false - /@vue/compiler-ssr@3.4.21: - resolution: {integrity: sha512-M5+9nI2lPpAsgXOGQobnIueVqc9sisBFexh5yMIMRAPYLa7+5wEJs8iqOZc1WAa9WQbx9GR2twgznU8LTIiZ4Q==} + /@vue/compiler-ssr@3.4.22: + resolution: {integrity: sha512-ycb2sL0SW6AkgVMrvaU/TIAEk7FQWyv/oYya44E/V9xURM+ij9Oev5bVobSS7GLJzkUieWW3SrYcK/PZpb5i4A==} dependencies: - '@vue/compiler-dom': 3.4.21 - '@vue/shared': 3.4.21 + '@vue/compiler-dom': 3.4.22 + '@vue/shared': 3.4.22 dev: false - /@vue/reactivity@3.4.21: - resolution: {integrity: sha512-UhenImdc0L0/4ahGCyEzc/pZNwVgcglGy9HVzJ1Bq2Mm9qXOpP8RyNTjookw/gOCUlXSEtuZ2fUg5nrHcoqJcw==} + /@vue/reactivity@3.4.22: + resolution: {integrity: sha512-+golHRRfcGoahBrhoTauFNIIAhxntRV3BI8HHqVvCdsuWivxW1MI0E9AOXVsz4H/ZlWM1ahudWTX6PhUrNR2yQ==} dependencies: - '@vue/shared': 3.4.21 + '@vue/shared': 3.4.22 dev: false - /@vue/runtime-core@3.4.21: - resolution: {integrity: sha512-pQthsuYzE1XcGZznTKn73G0s14eCJcjaLvp3/DKeYWoFacD9glJoqlNBxt3W2c5S40t6CCcpPf+jG01N3ULyrA==} + /@vue/runtime-core@3.4.22: + resolution: {integrity: sha512-cbA8lcL4g1907EdY1a1KmP5IRWfbqjgBRcgJPkF//yn96XSC1/VAJBZiAGLiyw0P77Rw2Ao7d9U51vU1GC6yUQ==} dependencies: - '@vue/reactivity': 3.4.21 - '@vue/shared': 3.4.21 + '@vue/reactivity': 3.4.22 + '@vue/shared': 3.4.22 dev: false - /@vue/runtime-dom@3.4.21: - resolution: {integrity: sha512-gvf+C9cFpevsQxbkRBS1NpU8CqxKw0ebqMvLwcGQrNpx6gqRDodqKqA+A2VZZpQ9RpK2f9yfg8VbW/EpdFUOJw==} + /@vue/runtime-dom@3.4.22: + resolution: {integrity: sha512-AXxRHrFkLX1y2+70CO2wDKRxW0WZcQKTOXS31AK+jZ1RLPtI6sEHVpYNfyE9WgbgXOqPtX4gfIfuoFYi8iCu2w==} dependencies: - '@vue/runtime-core': 3.4.21 - '@vue/shared': 3.4.21 + '@vue/runtime-core': 3.4.22 + '@vue/shared': 3.4.22 csstype: 3.1.3 dev: false - /@vue/server-renderer@3.4.21(vue@3.4.21): - resolution: {integrity: sha512-aV1gXyKSN6Rz+6kZ6kr5+Ll14YzmIbeuWe7ryJl5muJ4uwSwY/aStXTixx76TwkZFJLm1aAlA/HSWEJ4EyiMkg==} + /@vue/server-renderer@3.4.22(vue@3.4.22): + resolution: {integrity: sha512-okiNxiCOhJlx6IOrTZvhIVwf2UYKay0hnIPqWu4h19bkNv1gmG4Ic6U3zXY287AWF26lQuFMa515Qzc+R0aAYg==} peerDependencies: - vue: 3.4.21 + vue: 3.4.22 dependencies: - '@vue/compiler-ssr': 3.4.21 - '@vue/shared': 3.4.21 - vue: 3.4.21(typescript@5.4.3) + '@vue/compiler-ssr': 3.4.22 + '@vue/shared': 3.4.22 + vue: 3.4.22(typescript@5.4.5) dev: false - /@vue/shared@3.4.21: - resolution: {integrity: sha512-PuJe7vDIi6VYSinuEbUIQgMIRZGgM8e4R+G+/dQTk0X1NEdvgvvgv7m+rfmDH1gZzyA1OjjoWskvHlfRNfQf3g==} + /@vue/shared@3.4.22: + resolution: {integrity: sha512-cg7R9XNk4ovV3bKka/1a464O2oY0l5Fyt0rwGR4hSJRPjUJ0WVjrPdsr4W0JbUriwiM8EKcCcCjeKN5pRMs2Zg==} dev: false /abab@2.0.6: @@ -2626,7 +2567,7 @@ packages: - supports-color dev: false - /ai@2.2.37(react@18.2.0)(solid-js@1.8.16)(svelte@4.2.12)(vue@3.4.21): + /ai@2.2.37(react@18.2.0)(solid-js@1.8.16)(svelte@4.2.14)(vue@3.4.22): resolution: {integrity: sha512-JIYm5N1muGVqBqWnvkt29FmXhESoO5TcDxw74OE41SsM+uIou6NPDDs0XWb/ABcd1gmp6k5zym64KWMPM2xm0A==} engines: {node: '>=14.6'} peerDependencies: @@ -2649,12 +2590,12 @@ packages: react: 18.2.0 solid-js: 1.8.16 solid-swr-store: 0.10.7(solid-js@1.8.16)(swr-store@0.10.6) - sswr: 2.0.0(svelte@4.2.12) - svelte: 4.2.12 + sswr: 2.0.0(svelte@4.2.14) + svelte: 4.2.14 swr: 2.2.0(react@18.2.0) swr-store: 0.10.6 - swrv: 1.0.4(vue@3.4.21) - vue: 3.4.21(typescript@5.4.3) + swrv: 1.0.4(vue@3.4.22) + vue: 3.4.22(typescript@5.4.5) dev: false /ajv@6.12.6: @@ -2841,7 +2782,7 @@ packages: postcss: ^8.1.0 dependencies: browserslist: 4.23.0 - caniuse-lite: 1.0.30001605 + caniuse-lite: 1.0.30001610 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.0.0 @@ -2949,8 +2890,8 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001605 - electron-to-chromium: 1.4.726 + caniuse-lite: 1.0.30001610 + electron-to-chromium: 1.4.736 node-releases: 2.0.14 update-browserslist-db: 1.0.13(browserslist@4.23.0) dev: true @@ -3004,8 +2945,8 @@ packages: engines: {node: '>=14.16'} dev: true - /caniuse-lite@1.0.30001605: - resolution: {integrity: sha512-nXwGlFWo34uliI9z3n6Qc0wZaf7zaZWA1CPZ169La5mV3I/gem7bst0vr5XQH5TJXZIMfDeZyOrZnSlVzKxxHQ==} + /caniuse-lite@1.0.30001610: + resolution: {integrity: sha512-QFutAY4NgaelojVMjY63o6XlZyORPaLfyMnsl3HgnWdJUcX6K0oaJymHjH8PT5Gk7sTm8rvC/c5COUQKXqmOMA==} /ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} @@ -3512,8 +3453,8 @@ packages: - supports-color dev: true - /drizzle-orm@0.30.7(@types/react@18.2.74)(@vercel/postgres@0.5.1)(pg@8.11.5)(react@18.2.0): - resolution: {integrity: sha512-9qefSZQlu2fO2qv24piHyWFWcxcOY15//0v4j8qomMqaxzipNoG+fUBrQ7Ftk7PY7APRbRdn/nkEXWxiI4a8mw==} + /drizzle-orm@0.30.8(@types/react@18.2.78)(@vercel/postgres@0.8.0)(pg@8.11.5)(react@18.2.0): + resolution: {integrity: sha512-9pBJA0IjnpPpzZ6s9jlS1CQAbKoBmbn2GJesPhXaVblAA/joOJ4AWWevYcqvLGj9SvThBAl7WscN8Zwgg5mnTw==} peerDependencies: '@aws-sdk/client-rds-data': '>=3' '@cloudflare/workers-types': '>=3' @@ -3592,8 +3533,8 @@ packages: sqlite3: optional: true dependencies: - '@types/react': 18.2.74 - '@vercel/postgres': 0.5.1 + '@types/react': 18.2.78 + '@vercel/postgres': 0.8.0 pg: 8.11.5 react: 18.2.0 dev: false @@ -3601,8 +3542,8 @@ packages: /eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - /electron-to-chromium@1.4.726: - resolution: {integrity: sha512-xtjfBXn53RORwkbyKvDfTajtnTp0OJoPOIBzXvkNbb7+YYvCHJflba3L7Txyx/6Fov3ov2bGPr/n5MTixmPhdQ==} + /electron-to-chromium@1.4.736: + resolution: {integrity: sha512-Rer6wc3ynLelKNM4lOCg7/zPQj8tPOCB2hzD32PX9wd3hgRRi9MxEbmkFCokzcEhRVMiOVLjnL9ig9cefJ+6+Q==} dev: true /emoji-regex@8.0.0: @@ -3890,7 +3831,7 @@ packages: optional: true dependencies: '@next/eslint-plugin-next': 13.2.4 - '@rushstack/eslint-patch': 1.10.1 + '@rushstack/eslint-patch': 1.10.2 '@typescript-eslint/parser': 5.62.0(eslint@8.36.0)(typescript@4.9.5) eslint: 8.36.0 eslint-import-resolver-node: 0.3.9 @@ -3905,8 +3846,8 @@ packages: - supports-color dev: false - /eslint-config-next@14.1.4(eslint@8.53.0)(typescript@5.4.3): - resolution: {integrity: sha512-cihIahbhYAWwXJwZkAaRPpUi5t9aOi/HdfWXOjZeUOqNWXHD8X22kd1KG58Dc3MVaRx3HoR/oMGk2ltcrqDn8g==} + /eslint-config-next@14.2.1(eslint@8.53.0)(typescript@5.4.5): + resolution: {integrity: sha512-BgD0kPCWMlqoItRf3xe9fG0MqwObKfVch+f2ccwDpZiCJA8ghkz2wrASH+bI6nLZzGcOJOpMm1v1Q1euhfpt4Q==} peerDependencies: eslint: ^7.23.0 || ^8.0.0 typescript: '>=3.3.1' @@ -3914,17 +3855,17 @@ packages: typescript: optional: true dependencies: - '@next/eslint-plugin-next': 14.1.4 - '@rushstack/eslint-patch': 1.10.1 - '@typescript-eslint/parser': 6.21.0(eslint@8.53.0)(typescript@5.4.3) + '@next/eslint-plugin-next': 14.2.1 + '@rushstack/eslint-patch': 1.10.2 + '@typescript-eslint/parser': 7.2.0(eslint@8.53.0)(typescript@5.4.5) eslint: 8.53.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.53.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.53.0) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.53.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.53.0) eslint-plugin-jsx-a11y: 6.8.0(eslint@8.53.0) eslint-plugin-react: 7.34.1(eslint@8.53.0) eslint-plugin-react-hooks: 4.6.0(eslint@8.53.0) - typescript: 5.4.3 + typescript: 5.4.5 transitivePeerDependencies: - eslint-import-resolver-webpack - supports-color @@ -3962,7 +3903,7 @@ packages: - supports-color dev: false - /eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.53.0): + /eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.53.0): resolution: {integrity: sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: @@ -3972,8 +3913,8 @@ packages: debug: 4.3.4 enhanced-resolve: 5.16.0 eslint: 8.53.0 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.53.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.53.0) + eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.53.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.53.0) fast-glob: 3.3.2 get-tsconfig: 4.7.3 is-core-module: 2.13.1 @@ -4015,7 +3956,7 @@ packages: - supports-color dev: false - /eslint-module-utils@2.8.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.53.0): + /eslint-module-utils@2.8.1(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.53.0): resolution: {integrity: sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==} engines: {node: '>=4'} peerDependencies: @@ -4036,11 +3977,11 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 6.21.0(eslint@8.53.0)(typescript@5.4.3) + '@typescript-eslint/parser': 7.2.0(eslint@8.53.0)(typescript@5.4.5) debug: 3.2.7 eslint: 8.53.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.53.0) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.53.0) transitivePeerDependencies: - supports-color dev: true @@ -4073,7 +4014,7 @@ packages: - supports-color dev: false - /eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.53.0): + /eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.53.0): resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} engines: {node: '>=4'} peerDependencies: @@ -4083,7 +4024,7 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 6.21.0(eslint@8.53.0)(typescript@5.4.3) + '@typescript-eslint/parser': 7.2.0(eslint@8.53.0)(typescript@5.4.5) array-includes: 3.1.8 array.prototype.findlastindex: 1.2.5 array.prototype.flat: 1.3.2 @@ -4092,7 +4033,7 @@ packages: doctrine: 2.1.0 eslint: 8.53.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.53.0) + eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.53.0) hasown: 2.0.2 is-core-module: 2.13.1 is-glob: 4.0.3 @@ -5213,7 +5154,7 @@ packages: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 '@types/jsdom': 20.0.1 - '@types/node': 20.12.4 + '@types/node': 20.12.7 jest-mock: 29.7.0 jest-util: 29.7.0 jsdom: 20.0.3 @@ -5236,7 +5177,7 @@ packages: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 '@types/jsdom': 20.0.1 - '@types/node': 20.12.4 + '@types/node': 20.12.7 jest-mock: 29.7.0 jest-util: 29.7.0 jsdom: 20.0.3 @@ -5266,7 +5207,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.12.4 + '@types/node': 20.12.7 jest-util: 29.7.0 dev: false @@ -5275,7 +5216,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.12.4 + '@types/node': 20.12.7 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -5290,8 +5231,8 @@ packages: resolution: {integrity: sha512-jc7BFxgKPKi94uOvEmzlSWFFe2+vASyXaKUpdQKatWAESU2MWjDfFf0fdfc83CDKcA5QecabZeNLyfhe3yKNkg==} dev: false - /jose@5.2.3: - resolution: {integrity: sha512-KUXdbctm1uHVL8BYhnyHkgp3zDX5KW8ZhAKVFEfUbU2P8Alpzjb+48hHvjOdQIyPshoblhzsuqOwEEAbtHVirA==} + /jose@5.2.4: + resolution: {integrity: sha512-6ScbIk2WWCeXkmzF6bRPmEuaqy1m8SbsRFMa/FLrSCkGIhj8OLVG/IH+XHVmNMx/KUo8cVWEE6oKR4dJ+S0Rkg==} dev: false /js-cookie@3.0.5: @@ -6085,8 +6026,8 @@ packages: next: 14.0.2(react-dom@18.2.0)(react@18.2.0) oauth: 0.9.15 openid-client: 5.6.5 - preact: 10.20.1 - preact-render-to-string: 5.2.6(preact@10.20.1) + preact: 10.20.2 + preact-render-to-string: 5.2.6(preact@10.20.2) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) uuid: 8.3.2 @@ -6131,7 +6072,7 @@ packages: '@next/env': 13.4.20-canary.15 '@swc/helpers': 0.5.1 busboy: 1.6.0 - caniuse-lite: 1.0.30001605 + caniuse-lite: 1.0.30001610 postcss: 8.4.14 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -6171,7 +6112,7 @@ packages: '@next/env': 14.0.2 '@swc/helpers': 0.5.2 busboy: 1.6.0 - caniuse-lite: 1.0.30001605 + caniuse-lite: 1.0.30001610 postcss: 8.4.31 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -6221,27 +6162,27 @@ packages: engines: {node: '>=0.10.0'} dev: true - /novel@0.1.22(react@18.2.0)(solid-js@1.8.16)(svelte@4.2.12)(vue@3.4.21): + /novel@0.1.22(react@18.2.0)(solid-js@1.8.16)(svelte@4.2.14)(vue@3.4.22): resolution: {integrity: sha512-hdZ3iV4kvCISNjRNXqQk6fRVkMZmvzWjA3zXM1bU2SXVEufBxZL+77qsdEK/XETkJkeEdQl0mk8ERwLiL0BvRg==} peerDependencies: react: ^18.2.0 dependencies: '@radix-ui/react-popover': 1.0.7(@types/react-dom@18.0.11)(@types/react@18.0.28)(react-dom@18.2.0)(react@18.2.0) - '@tiptap/core': 2.2.4(@tiptap/pm@2.2.4) - '@tiptap/extension-color': 2.2.4(@tiptap/core@2.2.4)(@tiptap/extension-text-style@2.2.4) - '@tiptap/extension-highlight': 2.2.4(@tiptap/core@2.2.4) - '@tiptap/extension-horizontal-rule': 2.2.4(@tiptap/core@2.2.4)(@tiptap/pm@2.2.4) - '@tiptap/extension-image': 2.2.4(@tiptap/core@2.2.4) - '@tiptap/extension-link': 2.2.4(@tiptap/core@2.2.4)(@tiptap/pm@2.2.4) - '@tiptap/extension-placeholder': 2.0.3(@tiptap/core@2.2.4)(@tiptap/pm@2.2.4) - '@tiptap/extension-task-item': 2.2.4(@tiptap/core@2.2.4)(@tiptap/pm@2.2.4) - '@tiptap/extension-task-list': 2.2.4(@tiptap/core@2.2.4) - '@tiptap/extension-text-style': 2.2.4(@tiptap/core@2.2.4) - '@tiptap/extension-underline': 2.2.4(@tiptap/core@2.2.4) - '@tiptap/pm': 2.2.4 - '@tiptap/react': 2.2.4(@tiptap/core@2.2.4)(@tiptap/pm@2.2.4)(react-dom@18.2.0)(react@18.2.0) - '@tiptap/starter-kit': 2.2.4(@tiptap/pm@2.2.4) - '@tiptap/suggestion': 2.2.4(@tiptap/core@2.2.4)(@tiptap/pm@2.2.4) + '@tiptap/core': 2.3.0(@tiptap/pm@2.3.0) + '@tiptap/extension-color': 2.3.0(@tiptap/core@2.3.0)(@tiptap/extension-text-style@2.3.0) + '@tiptap/extension-highlight': 2.3.0(@tiptap/core@2.3.0) + '@tiptap/extension-horizontal-rule': 2.3.0(@tiptap/core@2.3.0)(@tiptap/pm@2.3.0) + '@tiptap/extension-image': 2.3.0(@tiptap/core@2.3.0) + '@tiptap/extension-link': 2.3.0(@tiptap/core@2.3.0)(@tiptap/pm@2.3.0) + '@tiptap/extension-placeholder': 2.0.3(@tiptap/core@2.3.0)(@tiptap/pm@2.3.0) + '@tiptap/extension-task-item': 2.3.0(@tiptap/core@2.3.0)(@tiptap/pm@2.3.0) + '@tiptap/extension-task-list': 2.3.0(@tiptap/core@2.3.0) + '@tiptap/extension-text-style': 2.3.0(@tiptap/core@2.3.0) + '@tiptap/extension-underline': 2.3.0(@tiptap/core@2.3.0) + '@tiptap/pm': 2.3.0 + '@tiptap/react': 2.3.0(@tiptap/core@2.3.0)(@tiptap/pm@2.3.0)(react-dom@18.2.0)(react@18.2.0) + '@tiptap/starter-kit': 2.3.0(@tiptap/pm@2.3.0) + '@tiptap/suggestion': 2.3.0(@tiptap/core@2.3.0)(@tiptap/pm@2.3.0) '@types/node': 18.15.3 '@types/react': 18.0.28 '@types/react-dom': 18.0.11 @@ -6249,7 +6190,7 @@ packages: '@vercel/analytics': 1.2.2(next@13.4.20-canary.15)(react@18.2.0) '@vercel/blob': 0.9.3 '@vercel/kv': 0.2.4 - ai: 2.2.37(react@18.2.0)(solid-js@1.8.16)(svelte@4.2.12)(vue@3.4.21) + ai: 2.2.37(react@18.2.0)(solid-js@1.8.16)(svelte@4.2.14)(vue@3.4.22) clsx: 1.2.1 eslint: 8.36.0 eslint-config-next: 13.2.4(eslint@8.36.0)(typescript@4.9.5) @@ -6262,7 +6203,7 @@ packages: sonner: 0.7.4(react-dom@18.2.0)(react@18.2.0) tailwind-merge: 1.14.0 tippy.js: 6.3.7 - tiptap-markdown: 0.8.10(@tiptap/core@2.2.4) + tiptap-markdown: 0.8.10(@tiptap/core@2.3.0) typescript: 4.9.5 use-debounce: 9.0.4(react@18.2.0) transitivePeerDependencies: @@ -6673,12 +6614,12 @@ packages: pretty-format: 3.8.0 dev: false - /preact-render-to-string@5.2.6(preact@10.20.1): + /preact-render-to-string@5.2.6(preact@10.20.2): resolution: {integrity: sha512-JyhErpYOvBV1hEPwIxc/fHWXPfnEGdRKxc8gFdAZ7XV4tlzyzG847XAyEZqoDnynP88akM4eaHcSOzNcLWFguw==} peerDependencies: preact: '>=10' dependencies: - preact: 10.20.1 + preact: 10.20.2 pretty-format: 3.8.0 dev: false @@ -6686,8 +6627,8 @@ packages: resolution: {integrity: sha512-eY93IVpod/zG3uMF22Unl8h9KkrcKIRs2EGar8hwLZZDU1lkjph303V9HZBwufh2s736U6VXuhD109LYqPoffg==} dev: false - /preact@10.20.1: - resolution: {integrity: sha512-JIFjgFg9B2qnOoGiYMVBtrcFxHqn+dNXbq76bVmcaHYJFYR4lW67AOcXgAYQQTDYXDOg/kTZrKPNCdRgJ2UJmw==} + /preact@10.20.2: + resolution: {integrity: sha512-S1d1ernz3KQ+Y2awUxKakpfOg2CEmJmwOP+6igPx6dgr6pgDvenqYviyokWso2rhHvGtTlWWnJDa7RaPbQerTg==} dev: false /prebuild-install@7.1.2: @@ -6713,8 +6654,8 @@ packages: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} - /prettier-plugin-tailwindcss@0.5.13(prettier@3.2.5): - resolution: {integrity: sha512-2tPWHCFNC+WRjAC4SIWQNSOdcL1NNkydXim8w7TDqlZi+/ulZYz2OouAI6qMtkggnPt7lGamboj6LcTMwcCvoQ==} + /prettier-plugin-tailwindcss@0.5.14(prettier@3.2.5): + resolution: {integrity: sha512-Puaz+wPUAhFp8Lo9HuciYKM2Y2XExESjeT+9NQoVFXZsPPnc9VYss2SpxdQ6vbatmt8/4+SN0oe0I1cPDABg9Q==} engines: {node: '>=14.21.3'} peerDependencies: '@ianvs/prettier-plugin-sort-imports': '*' @@ -6787,14 +6728,6 @@ packages: resolution: {integrity: sha512-WuxUnVtlWL1OfZFQFuqvnvs6MiAGk9UNsBostyBOB0Is9wb5uRESevA6rnl/rkksXaGX3GzZhPup5d6Vp1nFew==} dev: false - /prisma@5.12.0: - resolution: {integrity: sha512-zxw4WSIvpsyNbpv8r7Fxgm7nwTFVmD6wbN6VuH13lClOceSANDOMl4jO3oxE6VzhjxmnEJqOGZjON2T2UpmLag==} - engines: {node: '>=16.13'} - hasBin: true - requiresBuild: true - dependencies: - '@prisma/engines': 5.12.0 - /prop-types@15.8.1: resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} dependencies: @@ -6821,7 +6754,7 @@ packages: /prosemirror-commands@1.5.2: resolution: {integrity: sha512-hgLcPaakxH8tu6YvVAaILV2tXYsW3rAdDR8WNkeKGcgeMVQg3/TMhPdVoh7iAmfgVjZGtcOSjKiQaoeKjzd2mQ==} dependencies: - prosemirror-model: 1.19.4 + prosemirror-model: 1.20.0 prosemirror-state: 1.4.3 prosemirror-transform: 1.8.0 dev: false @@ -6831,16 +6764,16 @@ packages: dependencies: prosemirror-state: 1.4.3 prosemirror-transform: 1.8.0 - prosemirror-view: 1.33.3 + prosemirror-view: 1.33.4 dev: false /prosemirror-gapcursor@1.3.2: resolution: {integrity: sha512-wtjswVBd2vaQRrnYZaBCbyDqr232Ed4p2QPtRIUK5FuqHYKGWkEwl08oQM4Tw7DOR0FsasARV5uJFvMZWxdNxQ==} dependencies: prosemirror-keymap: 1.2.2 - prosemirror-model: 1.19.4 + prosemirror-model: 1.20.0 prosemirror-state: 1.4.3 - prosemirror-view: 1.33.3 + prosemirror-view: 1.33.4 dev: false /prosemirror-history@1.4.0: @@ -6848,7 +6781,7 @@ packages: dependencies: prosemirror-state: 1.4.3 prosemirror-transform: 1.8.0 - prosemirror-view: 1.33.3 + prosemirror-view: 1.33.4 rope-sequence: 1.3.4 dev: false @@ -6870,7 +6803,7 @@ packages: resolution: {integrity: sha512-6F5HS8Z0HDYiS2VQDZzfZP6A0s/I0gbkJy8NCzzDMtcsz3qrfqyroMMeoSjAmOhDITyon11NbXSzztfKi+frSQ==} dependencies: markdown-it: 14.1.0 - prosemirror-model: 1.19.4 + prosemirror-model: 1.20.0 dev: false /prosemirror-menu@1.2.4: @@ -6882,8 +6815,8 @@ packages: prosemirror-state: 1.4.3 dev: false - /prosemirror-model@1.19.4: - resolution: {integrity: sha512-RPmVXxUfOhyFdayHawjuZCxiROsm9L4FCUA6pWI+l7n2yCBsWy9VpdE1hpDHUS8Vad661YLY9AzqfjLhAKQ4iQ==} + /prosemirror-model@1.20.0: + resolution: {integrity: sha512-q7AY7vMjKYqDCeoedgUiAgrLabliXxndJuuFmcmc2+YU1SblvnOiG2WEACF2lwAZsMlfLpiAilA3L+TWlDqIsQ==} dependencies: orderedmap: 2.1.1 dev: false @@ -6891,13 +6824,13 @@ packages: /prosemirror-schema-basic@1.2.2: resolution: {integrity: sha512-/dT4JFEGyO7QnNTe9UaKUhjDXbTNkiWTq/N4VpKaF79bBjSExVV2NXmJpcM7z/gD7mbqNjxbmWW5nf1iNSSGnw==} dependencies: - prosemirror-model: 1.19.4 + prosemirror-model: 1.20.0 dev: false /prosemirror-schema-list@1.3.0: resolution: {integrity: sha512-Hz/7gM4skaaYfRPNgr421CU4GSwotmEwBVvJh5ltGiffUJwm7C8GfN/Bc6DR1EKEp5pDKhODmdXXyi9uIsZl5A==} dependencies: - prosemirror-model: 1.19.4 + prosemirror-model: 1.20.0 prosemirror-state: 1.4.3 prosemirror-transform: 1.8.0 dev: false @@ -6905,22 +6838,22 @@ packages: /prosemirror-state@1.4.3: resolution: {integrity: sha512-goFKORVbvPuAQaXhpbemJFRKJ2aixr+AZMGiquiqKxaucC6hlpHNZHWgz5R7dS4roHiwq9vDctE//CZ++o0W1Q==} dependencies: - prosemirror-model: 1.19.4 + prosemirror-model: 1.20.0 prosemirror-transform: 1.8.0 - prosemirror-view: 1.33.3 + prosemirror-view: 1.33.4 dev: false /prosemirror-tables@1.3.7: resolution: {integrity: sha512-oEwX1wrziuxMtwFvdDWSFHVUWrFJWt929kVVfHvtTi8yvw+5ppxjXZkMG/fuTdFo+3DXyIPSKfid+Be1npKXDA==} dependencies: prosemirror-keymap: 1.2.2 - prosemirror-model: 1.19.4 + prosemirror-model: 1.20.0 prosemirror-state: 1.4.3 prosemirror-transform: 1.8.0 - prosemirror-view: 1.33.3 + prosemirror-view: 1.33.4 dev: false - /prosemirror-trailing-node@2.0.8(prosemirror-model@1.19.4)(prosemirror-state@1.4.3)(prosemirror-view@1.33.3): + /prosemirror-trailing-node@2.0.8(prosemirror-model@1.20.0)(prosemirror-state@1.4.3)(prosemirror-view@1.33.4): resolution: {integrity: sha512-ujRYhSuhQb1Jsarh1IHqb2KoSnRiD7wAMDGucP35DN7j5af6X7B18PfdPIrbwsPTqIAj0fyOvxbuPsWhNvylmA==} peerDependencies: prosemirror-model: ^1.19.0 @@ -6929,21 +6862,21 @@ packages: dependencies: '@remirror/core-constants': 2.0.2 escape-string-regexp: 4.0.0 - prosemirror-model: 1.19.4 + prosemirror-model: 1.20.0 prosemirror-state: 1.4.3 - prosemirror-view: 1.33.3 + prosemirror-view: 1.33.4 dev: false /prosemirror-transform@1.8.0: resolution: {integrity: sha512-BaSBsIMv52F1BVVMvOmp1yzD3u65uC3HTzCBQV1WDPqJRQ2LuHKcyfn0jwqodo8sR9vVzMzZyI+Dal5W9E6a9A==} dependencies: - prosemirror-model: 1.19.4 + prosemirror-model: 1.20.0 dev: false - /prosemirror-view@1.33.3: - resolution: {integrity: sha512-P4Ao/bc4OrU/2yLIf8dL4lJaEtjLR3QjIvQHgJYp2jUS7kYM4bSR6okbBjkqzOs/FwUon6UGjTLdKMnPL1MZqw==} + /prosemirror-view@1.33.4: + resolution: {integrity: sha512-xQqAhH8/HGleVpKDhQsrd+oqdyeKMxFtdCWDxWMmP+n0k27fBpyUqa8pA+RB5cFY8rqDDc1hll69aRZQa7UaAw==} dependencies: - prosemirror-model: 1.19.4 + prosemirror-model: 1.20.0 prosemirror-state: 1.4.3 prosemirror-transform: 1.8.0 dev: false @@ -7109,7 +7042,7 @@ packages: tslib: 2.6.2 dev: false - /react-textarea-autosize@8.5.3(@types/react@18.2.74)(react@18.2.0): + /react-textarea-autosize@8.5.3(@types/react@18.2.78)(react@18.2.0): resolution: {integrity: sha512-XT1024o2pqCuZSuBt9FwHlaDeNtVrtCXu0Rnz88t1jUGheCLa3PhjE1GH8Ctm2axEtvdCl5SUHYschyQ0L5QHQ==} engines: {node: '>=10'} peerDependencies: @@ -7118,7 +7051,7 @@ packages: '@babel/runtime': 7.24.4 react: 18.2.0 use-composed-ref: 1.3.0(react@18.2.0) - use-latest: 1.2.1(@types/react@18.2.74)(react@18.2.0) + use-latest: 1.2.1(@types/react@18.2.78)(react@18.2.0) transitivePeerDependencies: - '@types/react' dev: false @@ -7147,15 +7080,14 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false - /react-tweet@3.2.0(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-eYLAX5ViOICQT/vkte/IzYZZDoBnl7hDO3Ns4++lKEFr/+BohPK5Rg+Lvbfx78Qtn3AjfDG5c6n+rOt7c2J6qg==} + /react-tweet@3.2.1(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-dktP3RMuwRB4pnSDocKpSsW5Hq1IXRW6fONkHhxT5EBIXsKZzdQuI70qtub1XN2dtZdkJWWxfBm/Q+kN+vRYFA==} peerDependencies: react: '>= 18.0.0' react-dom: '>= 18.0.0' dependencies: - '@swc/helpers': 0.5.8 + '@swc/helpers': 0.5.10 clsx: 2.1.0 - date-fns: 2.30.0 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) swr: 2.2.5(react@18.2.0) @@ -7194,8 +7126,8 @@ packages: decimal.js-light: 2.5.1 dev: false - /recharts@2.12.4(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-dM4skmk4fDKEDjL9MNunxv6zcTxePGVEzRnLDXALRpfJ85JoQ0P0APJ/CoJlmnQI0gPjBlOkjzrwrfQrRST3KA==} + /recharts@2.12.5(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-Cy+BkqrFIYTHJCyKHJEPvbHE2kVQEP6PKbOHJ8ztRGTAhvHuUnCwDaKVb13OwRFZ0QNUk1QvGTDdgWSMbuMtKw==} engines: {node: '>=14'} peerDependencies: react: ^16.0.0 || ^17.0.0 || ^18.0.0 @@ -7568,12 +7500,12 @@ packages: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} dev: false - /sswr@2.0.0(svelte@4.2.12): + /sswr@2.0.0(svelte@4.2.14): resolution: {integrity: sha512-mV0kkeBHcjcb0M5NqKtKVg/uTIYNlIIniyDfSGrSfxpEdM9C365jK0z55pl9K0xAkNTJi2OAOVFQpgMPUk+V0w==} peerDependencies: svelte: ^4.0.0 dependencies: - svelte: 4.2.12 + svelte: 4.2.14 swrev: 4.0.0 dev: false @@ -7758,8 +7690,8 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - /svelte@4.2.12: - resolution: {integrity: sha512-d8+wsh5TfPwqVzbm4/HCXC783/KPHV60NvwitJnyTA5lWn1elhXMNWhXGCJ7PwPa8qFUnyJNIyuIRt2mT0WMug==} + /svelte@4.2.14: + resolution: {integrity: sha512-ry3+YlWqZpHxLy45MW4MZIxNdvB+Wl7p2nnstWKbOAewaJyNJuOtivSbRChcfIej6wFBjWqyKmf/NgK1uW2JAA==} engines: {node: '>=16'} dependencies: '@ampproject/remapping': 2.3.0 @@ -7808,12 +7740,12 @@ packages: resolution: {integrity: sha512-LqVcOHSB4cPGgitD1riJ1Hh4vdmITOp+BkmfmXRh4hSF/t7EnS4iD+SOTmq7w5pPm/SiPeto4ADbKS6dHUDWFA==} dev: false - /swrv@1.0.4(vue@3.4.21): + /swrv@1.0.4(vue@3.4.22): resolution: {integrity: sha512-zjEkcP8Ywmj+xOJW3lIT65ciY/4AL4e/Or7Gj0MzU3zBJNMdJiT8geVZhINavnlHRMMCcJLHhraLTAiDOTmQ9g==} peerDependencies: vue: '>=3.2.26 < 4' dependencies: - vue: 3.4.21(typescript@5.4.3) + vue: 3.4.22(typescript@5.4.5) dev: false /symbol-tree@3.2.4: @@ -7945,12 +7877,12 @@ packages: '@popperjs/core': 2.11.8 dev: false - /tiptap-markdown@0.8.10(@tiptap/core@2.2.4): + /tiptap-markdown@0.8.10(@tiptap/core@2.3.0): resolution: {integrity: sha512-iDVkR2BjAqkTDtFX0h94yVvE2AihCXlF0Q7RIXSJPRSR5I0PA1TMuAg6FHFpmqTn4tPxJ0by0CK7PUMlnFLGEQ==} peerDependencies: '@tiptap/core': ^2.0.3 dependencies: - '@tiptap/core': 2.2.4(@tiptap/pm@2.2.4) + '@tiptap/core': 2.3.0(@tiptap/pm@2.3.0) '@types/markdown-it': 13.0.7 markdown-it: 14.1.0 markdown-it-task-lists: 2.1.1 @@ -7993,13 +7925,13 @@ packages: resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} dev: false - /ts-api-utils@1.3.0(typescript@5.4.3): + /ts-api-utils@1.3.0(typescript@5.4.5): resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} engines: {node: '>=16'} peerDependencies: typescript: '>=4.2.0' dependencies: - typescript: 5.4.3 + typescript: 5.4.5 dev: true /ts-interface-checker@0.1.13: @@ -8102,8 +8034,8 @@ packages: hasBin: true dev: false - /typescript@5.4.3: - resolution: {integrity: sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg==} + /typescript@5.4.5: + resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} engines: {node: '>=14.17'} hasBin: true @@ -8288,7 +8220,7 @@ packages: react: 18.2.0 dev: false - /use-isomorphic-layout-effect@1.1.2(@types/react@18.2.74)(react@18.2.0): + /use-isomorphic-layout-effect@1.1.2(@types/react@18.2.78)(react@18.2.0): resolution: {integrity: sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==} peerDependencies: '@types/react': '*' @@ -8297,11 +8229,11 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 18.2.74 + '@types/react': 18.2.78 react: 18.2.0 dev: false - /use-latest@1.2.1(@types/react@18.2.74)(react@18.2.0): + /use-latest@1.2.1(@types/react@18.2.78)(react@18.2.0): resolution: {integrity: sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==} peerDependencies: '@types/react': '*' @@ -8310,9 +8242,9 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 18.2.74 + '@types/react': 18.2.78 react: 18.2.0 - use-isomorphic-layout-effect: 1.1.2(@types/react@18.2.74)(react@18.2.0) + use-isomorphic-layout-effect: 1.1.2(@types/react@18.2.78)(react@18.2.0) dev: false /use-sidecar@1.1.2(@types/react@18.0.28)(react@18.2.0): @@ -8409,20 +8341,20 @@ packages: d3-timer: 3.0.1 dev: false - /vue@3.4.21(typescript@5.4.3): - resolution: {integrity: sha512-5hjyV/jLEIKD/jYl4cavMcnzKwjMKohureP8ejn3hhEjwhWIhWeuzL2kJAjzl/WyVsgPY56Sy4Z40C3lVshxXA==} + /vue@3.4.22(typescript@5.4.5): + resolution: {integrity: sha512-CIx7NiP+n5WHBCG/fDNaUPP4qbQ5CIa8XIHZE3HpfS/rb2vmSIsp74BxsZyrrGKF0vHW3GoToqP3l0hzrMTecw==} peerDependencies: typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - '@vue/compiler-dom': 3.4.21 - '@vue/compiler-sfc': 3.4.21 - '@vue/runtime-dom': 3.4.21 - '@vue/server-renderer': 3.4.21(vue@3.4.21) - '@vue/shared': 3.4.21 - typescript: 5.4.3 + '@vue/compiler-dom': 3.4.22 + '@vue/compiler-sfc': 3.4.22 + '@vue/runtime-dom': 3.4.22 + '@vue/server-renderer': 3.4.22(vue@3.4.22) + '@vue/shared': 3.4.22 + typescript: 5.4.5 dev: false /w3c-keyname@2.2.8: diff --git a/prisma/schema.prisma b/prisma/schema.prisma deleted file mode 100644 index 69f1f3391..000000000 --- a/prisma/schema.prisma +++ /dev/null @@ -1,121 +0,0 @@ -// This is your Prisma schema file, -// learn more about it in the docs: https://pris.ly/d/prisma-schema - -datasource db { - provider = "postgresql" - url = env("POSTGRES_PRISMA_URL") // uses connection pooling - directUrl = env("POSTGRES_URL_NON_POOLING") // uses a direct connection -} - -generator client { - provider = "prisma-client-js" -} - -model User { - id String @id @default(cuid()) - name String? - // if you are using Github OAuth, you can get rid of the username attribute (that is for Twitter OAuth) - username String? - gh_username String? - email String? @unique - emailVerified DateTime? - image String? - createdAt DateTime @default(now()) - updatedAt DateTime @updatedAt - accounts Account[] - sessions Session[] - sites Site[] - posts Post[] -} - -model Account { - id String @id @default(cuid()) - userId String - type String - provider String - providerAccountId String - refresh_token String? - refresh_token_expires_in Int? - access_token String? - expires_at Int? - token_type String? - scope String? - id_token String? - session_state String? - oauth_token_secret String? - oauth_token String? - - user User @relation(fields: [userId], references: [id], onDelete: Cascade) - - @@unique([provider, providerAccountId]) - @@index([userId]) -} - -model Session { - id String @id @default(cuid()) - sessionToken String @unique - userId String - expires DateTime - user User @relation(fields: [userId], references: [id], onDelete: Cascade) - - @@index([userId]) -} - -model VerificationToken { - identifier String - token String @unique - expires DateTime - - @@unique([identifier, token]) -} - -model Post { - id String @id @default(cuid()) - title String? @db.Text - description String? @db.Text - content String? @db.Text - slug String @default(cuid()) - image String? @default("https://public.blob.vercel-storage.com/eEZHAoPTOBSYGBE3/hxfcV5V-eInX3jbVUhjAt1suB7zB88uGd1j20b.png") @db.Text - imageBlurhash String? @default("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAhCAYAAACbffiEAAAACXBIWXMAABYlAAAWJQFJUiTwAAABfUlEQVR4nN3XyZLDIAwE0Pz/v3q3r55JDlSBplsIEI49h76k4opexCK/juP4eXjOT149f2Tf9ySPgcjCc7kdpBTgDPKByKK2bTPFEdMO0RDrusJ0wLRBGCIuelmWJAjkgPGDSIQEMBDCfA2CEPM80+Qwl0JkNxBimiaYGOTUlXYI60YoehzHJDEm7kxjV3whOQTD3AaCuhGKHoYhyb+CBMwjIAFz647kTqyapdV4enGINuDJMSScPmijSwjCaHeLcT77C7EC0C1ugaCTi2HYfAZANgj6Z9A8xY5eiYghDMNQBJNCWhASot0jGsSCUiHWZcSGQjaWWCDaGMOWnsCcn2QhVkRuxqqNxMSdUSElCDbp1hbNOsa6Ugxh7xXauF4DyM1m5BLtCylBXgaxvPXVwEoOBjeIFVODtW74oj1yBQah3E8tyz3SkpolKS9Geo9YMD1QJR1Go4oJkgO1pgbNZq0AOUPChyjvh7vlXaQa+X1UXwKxgHokB2XPxbX+AnijwIU4ahazAAAAAElFTkSuQmCC") @db.Text - createdAt DateTime @default(now()) - updatedAt DateTime @updatedAt - published Boolean @default(false) - site Site? @relation(fields: [siteId], references: [id], onDelete: Cascade, onUpdate: Cascade) - siteId String? - user User? @relation(fields: [userId], references: [id], onDelete: Cascade, onUpdate: Cascade) - userId String? - - @@unique([slug, siteId]) - @@index([siteId]) - @@index([userId]) -} - -model Site { - id String @id @default(cuid()) - name String? - description String? @db.Text - logo String? @default("https://public.blob.vercel-storage.com/eEZHAoPTOBSYGBE3/JRajRyC-PhBHEinQkupt02jqfKacBVHLWJq7Iy.png") @db.Text - font String @default("font-cal") - image String? @default("https://public.blob.vercel-storage.com/eEZHAoPTOBSYGBE3/hxfcV5V-eInX3jbVUhjAt1suB7zB88uGd1j20b.png") @db.Text - imageBlurhash String? @default("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAhCAYAAACbffiEAAAACXBIWXMAABYlAAAWJQFJUiTwAAABfUlEQVR4nN3XyZLDIAwE0Pz/v3q3r55JDlSBplsIEI49h76k4opexCK/juP4eXjOT149f2Tf9ySPgcjCc7kdpBTgDPKByKK2bTPFEdMO0RDrusJ0wLRBGCIuelmWJAjkgPGDSIQEMBDCfA2CEPM80+Qwl0JkNxBimiaYGOTUlXYI60YoehzHJDEm7kxjV3whOQTD3AaCuhGKHoYhyb+CBMwjIAFz647kTqyapdV4enGINuDJMSScPmijSwjCaHeLcT77C7EC0C1ugaCTi2HYfAZANgj6Z9A8xY5eiYghDMNQBJNCWhASot0jGsSCUiHWZcSGQjaWWCDaGMOWnsCcn2QhVkRuxqqNxMSdUSElCDbp1hbNOsa6Ugxh7xXauF4DyM1m5BLtCylBXgaxvPXVwEoOBjeIFVODtW74oj1yBQah3E8tyz3SkpolKS9Geo9YMD1QJR1Go4oJkgO1pgbNZq0AOUPChyjvh7vlXaQa+X1UXwKxgHokB2XPxbX+AnijwIU4ahazAAAAAElFTkSuQmCC") @db.Text - subdomain String? @unique - customDomain String? @unique - message404 String? @default("Blimey! You've found a page that doesn't exist.") @db.Text - createdAt DateTime @default(now()) - updatedAt DateTime @updatedAt - user User? @relation(fields: [userId], references: [id], onDelete: Cascade, onUpdate: Cascade) - userId String? - posts Post[] - - @@index([userId]) -} - -model Example { - id Int @id @default(autoincrement()) - name String? - description String? @db.Text - domainCount Int? - url String? - image String? @db.Text - imageBlurhash String? @db.Text -} From 80ede303fc85b2201646a76eaa89fbc1039cf8b1 Mon Sep 17 00:00:00 2001 From: realmikesolo Date: Tue, 7 May 2024 11:39:24 +0200 Subject: [PATCH 06/14] fix: syntax & format errors --- app/[domain]/[slug]/page.tsx | 28 +- app/[domain]/page.tsx | 18 +- app/app/(auth)/login/page.tsx | 2 +- app/app/(dashboard)/layout.tsx | 2 +- app/app/(dashboard)/post/[id]/page.tsx | 10 +- .../(dashboard)/post/[id]/settings/page.tsx | 2 +- .../(dashboard)/site/[id]/analytics/page.tsx | 6 +- app/app/(dashboard)/site/[id]/page.tsx | 4 +- .../site/[id]/settings/appearance/page.tsx | 2 +- .../site/[id]/settings/domains/page.tsx | 2 +- .../(dashboard)/site/[id]/settings/layout.tsx | 4 +- .../(dashboard)/site/[id]/settings/page.tsx | 2 +- components/blog-card.tsx | 2 +- components/cta.tsx | 14 +- components/editor.tsx | 2 +- components/form/delete-post-form.tsx | 2 +- components/form/delete-site-form.tsx | 2 +- components/form/index.tsx | 2 +- components/mdx.tsx | 3 +- components/modal/create-site.tsx | 4 +- components/nav.tsx | 2 +- components/overview-sites-cta.tsx | 5 +- components/posts.tsx | 21 +- components/sites.tsx | 18 +- drizzle.config.ts | 6 +- lib/actions.ts | 235 ++- lib/auth.ts | 18 +- lib/db/db.ts | 9 +- lib/db/schema.ts | 307 ++-- lib/fetchers.ts | 106 +- lib/remark-plugins.tsx | 4 +- lib/utils.ts | 16 +- next.config.js | 2 +- package.json | 6 +- pnpm-lock.yaml | 1518 +++++++++-------- tsconfig.json | 2 +- 36 files changed, 1297 insertions(+), 1091 deletions(-) diff --git a/app/[domain]/[slug]/page.tsx b/app/[domain]/[slug]/page.tsx index 2122d711b..fe78d7ff8 100644 --- a/app/[domain]/[slug]/page.tsx +++ b/app/[domain]/[slug]/page.tsx @@ -49,15 +49,17 @@ export async function generateMetadata({ } export async function generateStaticParams() { - const allPosts = await db.select({ - slug: posts.slug, - site: { - subdomain: sites.subdomain, - customDomain: sites.customDomain, - }, - }).from(posts) - .leftJoin(sites, eq(posts.siteId, sites.id)) - .where(eq(sites.subdomain, 'demo')) // feel free to remove this filter if you want to generate paths for all posts + const allPosts = await db + .select({ + slug: posts.slug, + site: { + subdomain: sites.subdomain, + customDomain: sites.customDomain, + }, + }) + .from(posts) + .leftJoin(sites, eq(posts.siteId, sites.id)) + .where(eq(sites.subdomain, "demo")); // feel free to remove this filter if you want to generate paths for all posts const allPaths = allPosts .flatMap(({ site, slug }) => [ @@ -92,13 +94,13 @@ export default async function SitePostPage({ <>
-

+

{toDateString(data.createdAt)}

-

+

{data.title}

-

+

{data.description}

@@ -127,7 +129,7 @@ export default async function SitePostPage({
)}
-
+
by {data.site?.user?.name}
diff --git a/app/[domain]/page.tsx b/app/[domain]/page.tsx index 7903d7389..aa89c16d9 100644 --- a/app/[domain]/page.tsx +++ b/app/[domain]/page.tsx @@ -9,13 +9,13 @@ import db from "@/lib/db/db"; export async function generateStaticParams() { const allSites = await db.query.sites.findMany({ - // feel free to remove this filter if you want to generate paths for all sites - where: (sites, { eq }) => eq(sites.subdomain, 'demo'), + // feel free to remove this filter if you want to generate paths for all sites + where: (sites, { eq }) => eq(sites.subdomain, "demo"), columns: { subdomain: true, customDomain: true, - } - }) + }, + }); const allPaths = allSites .flatMap(({ subdomain, customDomain }) => [ @@ -64,10 +64,10 @@ export default async function SiteHomePage({ />
-

+

{posts[0].title}

-

+

{posts[0].description}

@@ -86,11 +86,11 @@ export default async function SiteHomePage({
)}
-

+

{data.user?.name}

-

+

{toDateString(posts[0].createdAt)}

@@ -122,7 +122,7 @@ export default async function SiteHomePage({ {posts.length > 1 && (
-

+

More stories

diff --git a/app/app/(auth)/login/page.tsx b/app/app/(auth)/login/page.tsx index e4613f910..a5f5d11fc 100644 --- a/app/app/(auth)/login/page.tsx +++ b/app/app/(auth)/login/page.tsx @@ -4,7 +4,7 @@ import { Suspense } from "react"; export default function LoginPage() { return ( -
+
Platforms Starter Kit -
{children}
+
{children}
); } diff --git a/app/app/(dashboard)/post/[id]/page.tsx b/app/app/(dashboard)/post/[id]/page.tsx index 42196d1e8..74b5ca2fb 100644 --- a/app/app/(dashboard)/post/[id]/page.tsx +++ b/app/app/(dashboard)/post/[id]/page.tsx @@ -14,11 +14,11 @@ export default async function PostPage({ params }: { params: { id: string } }) { with: { site: { columns: { - subdomain:true - } - } - } - }) + subdomain: true, + }, + }, + }, + }); if (!data || data.userId !== session.user.id) { notFound(); } diff --git a/app/app/(dashboard)/post/[id]/settings/page.tsx b/app/app/(dashboard)/post/[id]/settings/page.tsx index 746a2586b..644550681 100644 --- a/app/app/(dashboard)/post/[id]/settings/page.tsx +++ b/app/app/(dashboard)/post/[id]/settings/page.tsx @@ -16,7 +16,7 @@ export default async function PostSettings({ } const data = await db.query.posts.findFirst({ where: (posts, { eq }) => eq(posts.id, decodeURIComponent(params.id)), - }) + }); if (!data || data.userId !== session.user.id) { notFound(); } diff --git a/app/app/(dashboard)/site/[id]/analytics/page.tsx b/app/app/(dashboard)/site/[id]/analytics/page.tsx index 7624916c0..6dbcc9b4d 100644 --- a/app/app/(dashboard)/site/[id]/analytics/page.tsx +++ b/app/app/(dashboard)/site/[id]/analytics/page.tsx @@ -14,8 +14,8 @@ export default async function SiteAnalytics({ } const data = await db.query.sites.findFirst({ where: (sites, { eq }) => eq(sites.id, decodeURIComponent(params.id)), - }) - + }); + if (!data || data.userId !== session.user.id) { notFound(); } @@ -26,7 +26,7 @@ export default async function SiteAnalytics({ <>
-

+

Analytics for {data.name}

eq(sites.id, decodeURIComponent(params.id)), - }) + }); if (!data || data.userId !== session.user.id) { notFound(); @@ -27,7 +27,7 @@ export default async function SitePosts({ <>
-

+

All Posts for {data.name}

eq(sites.id, decodeURIComponent(params.id)), - }) + }); return (
diff --git a/app/app/(dashboard)/site/[id]/settings/domains/page.tsx b/app/app/(dashboard)/site/[id]/settings/domains/page.tsx index 09a24766c..c3becea5a 100644 --- a/app/app/(dashboard)/site/[id]/settings/domains/page.tsx +++ b/app/app/(dashboard)/site/[id]/settings/domains/page.tsx @@ -9,7 +9,7 @@ export default async function SiteSettingsDomains({ }) { const data = await db.query.sites.findFirst({ where: (sites, { eq }) => eq(sites.id, decodeURIComponent(params.id)), - }) + }); return (
diff --git a/app/app/(dashboard)/site/[id]/settings/layout.tsx b/app/app/(dashboard)/site/[id]/settings/layout.tsx index 1fce527af..c507a6c01 100644 --- a/app/app/(dashboard)/site/[id]/settings/layout.tsx +++ b/app/app/(dashboard)/site/[id]/settings/layout.tsx @@ -17,7 +17,7 @@ export default async function SiteAnalyticsLayout({ } const data = await db.query.sites.findFirst({ where: (sites, { eq }) => eq(sites.id, decodeURIComponent(params.id)), - }) + }); if (!data || data.userId !== session.user.id) { notFound(); @@ -28,7 +28,7 @@ export default async function SiteAnalyticsLayout({ return ( <>
-

+

Settings for {data.name}

eq(sites.id, decodeURIComponent(params.id)), - }) + }); return (
diff --git a/components/blog-card.tsx b/components/blog-card.tsx index 63a4de8ad..8fe7ea0e2 100644 --- a/components/blog-card.tsx +++ b/components/blog-card.tsx @@ -5,7 +5,7 @@ import type { SelectPost } from "@/lib/db/schema"; interface BlogCardProps { data: Pick< - SelectPost, + SelectPost, "slug" | "image" | "imageBlurhash" | "title" | "description" | "createdAt" >; } diff --git a/components/cta.tsx b/components/cta.tsx index c9cc8b4f2..c922d6d2f 100644 --- a/components/cta.tsx +++ b/components/cta.tsx @@ -8,14 +8,14 @@ export default function CTA() {
-

+

Platforms Starter Kit Demo

This is a demo site showcasing how to build a multi-tenant application with{" "} @@ -59,7 +59,7 @@ export default function CTA() { } flex w-full flex-col space-y-3 text-center sm:flex-row sm:space-x-3 sm:space-y-0 lg:w-auto`} > +

-
+

This action is irreversible. Please proceed with caution.

diff --git a/components/form/delete-site-form.tsx b/components/form/delete-site-form.tsx index 56e0ca50c..438fc3978 100644 --- a/components/form/delete-site-form.tsx +++ b/components/form/delete-site-form.tsx @@ -47,7 +47,7 @@ export default function DeleteSiteForm({ siteName }: { siteName: string }) { />
-
+

This action is irreversible. Please proceed with caution.

diff --git a/components/form/index.tsx b/components/form/index.tsx index 0269454e8..6960eb8ad 100644 --- a/components/form/index.tsx +++ b/components/form/index.tsx @@ -125,7 +125,7 @@ export default function Form({ {inputAttrs.name === "customDomain" && inputAttrs.defaultValue && ( )} -
+

{helpText}

diff --git a/components/mdx.tsx b/components/mdx.tsx index 8f901af5b..4eead7f05 100644 --- a/components/mdx.tsx +++ b/components/mdx.tsx @@ -1,6 +1,5 @@ "use client"; - import { MDXRemote, MDXRemoteProps } from "next-mdx-remote"; import { replaceLinks } from "@/lib/remark-plugins"; import { Tweet } from "react-tweet"; @@ -18,7 +17,7 @@ export default function MDX({ source }: { source: MDXRemoteProps }) { return (
{/* @ts-ignore */} diff --git a/components/modal/create-site.tsx b/components/modal/create-site.tsx index 5119df4fc..5e850f508 100644 --- a/components/modal/create-site.tsx +++ b/components/modal/create-site.tsx @@ -46,7 +46,7 @@ export default function CreateSiteModal() { } }) } - className="w-full rounded-md bg-white dark:bg-black md:max-w-md md:border md:border-stone-200 md:shadow dark:md:border-stone-700" + className="w-full rounded-md bg-white md:max-w-md md:border md:border-stone-200 md:shadow dark:bg-black dark:md:border-stone-700" >

Create a new site

@@ -115,7 +115,7 @@ export default function CreateSiteModal() { />
-
+
diff --git a/components/nav.tsx b/components/nav.tsx index 2214588e7..028b776d4 100644 --- a/components/nav.tsx +++ b/components/nav.tsx @@ -171,7 +171,7 @@ export default function Nav({ children }: { children: ReactNode }) {
diff --git a/components/overview-sites-cta.tsx b/components/overview-sites-cta.tsx index b8fd47134..51f7175eb 100644 --- a/components/overview-sites-cta.tsx +++ b/components/overview-sites-cta.tsx @@ -11,7 +11,10 @@ export default async function OverviewSitesCTA() { if (!session) { return 0; } - const [sitesResult] = await db.select({count: count()}).from(sites).where(eq(sites.userId, session.user.id)) + const [sitesResult] = await db + .select({ count: count() }) + .from(sites) + .where(eq(sites.userId, session.user.id)); return sitesResult.count > 0 ? ( 0 ? (
diff --git a/components/sites.tsx b/components/sites.tsx index fa031ec78..0a5bd193a 100644 --- a/components/sites.tsx +++ b/components/sites.tsx @@ -12,13 +12,18 @@ export default async function Sites({ limit }: { limit?: number }) { if (!session) { redirect("/login"); } - const query = db.select({ - ...getTableColumns(sites) - }).from(sites).leftJoin(users, eq(sites.userId, users.id)) - .where(eq(users.id, session.user.id)) - .orderBy(asc(sites.createdAt)) + const query = db + .select({ + ...getTableColumns(sites), + }) + .from(sites) + .leftJoin(users, eq(sites.userId, users.id)) + .where(eq(users.id, session.user.id)) + .orderBy(asc(sites.createdAt)); - const sitesResult = limit ? await withLimit(query.$dynamic(), limit): await query + const sitesResult = limit + ? await withLimit(query.$dynamic(), limit) + : await query; return sitesResult.length > 0 ? (
@@ -41,4 +46,3 @@ export default async function Sites({ limit }: { limit?: number }) {
); } - diff --git a/drizzle.config.ts b/drizzle.config.ts index a9615a20b..7f1f3827a 100644 --- a/drizzle.config.ts +++ b/drizzle.config.ts @@ -1,12 +1,12 @@ -import { defineConfig } from 'drizzle-kit' +import { defineConfig } from "drizzle-kit"; export default defineConfig({ schema: "./lib/db/schema.ts", out: "./drizzle/migrations", - driver: 'pg', + driver: "pg", dbCredentials: { connectionString: process.env.POSTGRES_URL!, }, verbose: true, strict: true, -}) +}); diff --git a/lib/actions.ts b/lib/actions.ts index f096ee29d..d34393aec 100644 --- a/lib/actions.ts +++ b/lib/actions.ts @@ -32,13 +32,16 @@ export const createSite = async (formData: FormData) => { const subdomain = formData.get("subdomain") as string; try { - const [response] = await db.insert(sites).values({ - name, - description, - subdomain, - userId: session.user.id, - updatedAt: new Date(), - }).returning() + const [response] = await db + .insert(sites) + .values({ + name, + description, + subdomain, + userId: session.user.id, + updatedAt: new Date(), + }) + .returning(); // unnecessary await await revalidateTag( @@ -73,9 +76,14 @@ export const updateSite = withSiteAuth( // if the custom domain is valid, we need to add it to Vercel } else if (validDomainRegex.test(value)) { - response = await db.update(sites).set({ - customDomain:value - }).where(eq(sites.id, site.id)).returning().then((res) => res[0]) + response = await db + .update(sites) + .set({ + customDomain: value, + }) + .where(eq(sites.id, site.id)) + .returning() + .then((res) => res[0]); await Promise.all([ addDomainToVercel(value), @@ -85,10 +93,14 @@ export const updateSite = withSiteAuth( // empty value means the user wants to remove the custom domain } else if (value === "") { - - response = await db.update(sites).set({ - customDomain:null - }).where(eq(sites.id, site.id)).returning().then((res) => res[0]) + response = await db + .update(sites) + .set({ + customDomain: null, + }) + .where(eq(sites.id, site.id)) + .returning() + .then((res) => res[0]); } // if the site had a different customDomain before, we need to remove it from Vercel @@ -145,14 +157,24 @@ export const updateSite = withSiteAuth( const blurhash = key === "image" ? await getBlurDataURL(url) : null; - response = await db.update(sites).set({ - [key]:url, - ...(blurhash && { imageBlurhash: blurhash }) - }).where(eq(sites.id, site.id)).returning().then((res) => res[0]) + response = await db + .update(sites) + .set({ + [key]: url, + ...(blurhash && { imageBlurhash: blurhash }), + }) + .where(eq(sites.id, site.id)) + .returning() + .then((res) => res[0]); } else { - response = await db.update(sites).set({ - [key]:value - }).where(eq(sites.id, site.id)).returning().then((res) => res[0]) + response = await db + .update(sites) + .set({ + [key]: value, + }) + .where(eq(sites.id, site.id)) + .returning() + .then((res) => res[0]); } console.log( @@ -181,55 +203,65 @@ export const updateSite = withSiteAuth( }, ); -export const deleteSite = withSiteAuth(async (_: FormData, site: SelectSite) => { - try { - const [response] = await db.delete(sites).where(eq(sites.id, site.id)).returning() +export const deleteSite = withSiteAuth( + async (_: FormData, site: SelectSite) => { + try { + const [response] = await db + .delete(sites) + .where(eq(sites.id, site.id)) + .returning(); - await revalidateTag( - `${site.subdomain}.${process.env.NEXT_PUBLIC_ROOT_DOMAIN}-metadata`, - ); - response.customDomain && - (await revalidateTag(`${site.customDomain}-metadata`)); - return response; - } catch (error: any) { - return { - error: error.message, - }; - } -}); + await revalidateTag( + `${site.subdomain}.${process.env.NEXT_PUBLIC_ROOT_DOMAIN}-metadata`, + ); + response.customDomain && + (await revalidateTag(`${site.customDomain}-metadata`)); + return response; + } catch (error: any) { + return { + error: error.message, + }; + } + }, +); export const getSiteFromPostId = async (postId: string) => { const post = await db.query.posts.findFirst({ where: eq(posts.id, postId), columns: { - siteId: true - } - }) + siteId: true, + }, + }); return post?.siteId; }; -export const createPost = withSiteAuth(async (_: FormData, site: SelectSite) => { - const session = await getSession(); - if (!session?.user.id) { - return { - error: "Not authenticated", - }; - } +export const createPost = withSiteAuth( + async (_: FormData, site: SelectSite) => { + const session = await getSession(); + if (!session?.user.id) { + return { + error: "Not authenticated", + }; + } - const [response] = await db.insert(posts).values({ - siteId: site.id, - userId: session.user.id, - updatedAt: new Date(), - }).returning() + const [response] = await db + .insert(posts) + .values({ + siteId: site.id, + userId: session.user.id, + updatedAt: new Date(), + }) + .returning(); - await revalidateTag( - `${site.subdomain}.${process.env.NEXT_PUBLIC_ROOT_DOMAIN}-posts`, - ); - site.customDomain && (await revalidateTag(`${site.customDomain}-posts`)); + await revalidateTag( + `${site.subdomain}.${process.env.NEXT_PUBLIC_ROOT_DOMAIN}-posts`, + ); + site.customDomain && (await revalidateTag(`${site.customDomain}-posts`)); - return response; -}); + return response; + }, +); // creating a separate function for this because we're not using FormData export const updatePost = async (data: SelectPost) => { @@ -243,10 +275,9 @@ export const updatePost = async (data: SelectPost) => { const post = await db.query.posts.findFirst({ where: eq(posts.id, data.id), with: { - site:true - } - }) - + site: true, + }, + }); if (!post || post.userId !== session.user.id) { return { @@ -255,12 +286,16 @@ export const updatePost = async (data: SelectPost) => { } try { - const [response] = await db.update(posts).set({ - title: data.title, - description: data.description, - content: data.content, - updatedAt: new Date(), - }).where(eq(posts.id, data.id)).returning() + const [response] = await db + .update(posts) + .set({ + title: data.title, + description: data.description, + content: data.content, + updatedAt: new Date(), + }) + .where(eq(posts.id, data.id)) + .returning(); await revalidateTag( `${post.site?.subdomain}.${process.env.NEXT_PUBLIC_ROOT_DOMAIN}-posts`, @@ -303,15 +338,24 @@ export const updatePostMetadata = withPostAuth( }); const blurhash = await getBlurDataURL(url); - response = await db.update(posts).set({ - image: url, - imageBlurhash: blurhash, - }).where(eq(posts.id, post.id)).returning().then((res) => res[0]) - + response = await db + .update(posts) + .set({ + image: url, + imageBlurhash: blurhash, + }) + .where(eq(posts.id, post.id)) + .returning() + .then((res) => res[0]); } else { - response = await db.update(posts).set({ - [key]: key === "published" ? value === "true" : value - }).where(eq(posts.id, post.id)).returning().then((res) => res[0]) + response = await db + .update(posts) + .set({ + [key]: key === "published" ? value === "true" : value, + }) + .where(eq(posts.id, post.id)) + .returning() + .then((res) => res[0]); } await revalidateTag( @@ -341,19 +385,24 @@ export const updatePostMetadata = withPostAuth( }, ); -export const deletePost = withPostAuth(async (_: FormData, post: SelectPost) => { - try { - const [response] = await db.delete(posts).where(eq(posts.id, post.id)).returning({ - siteId: posts.siteId - }) +export const deletePost = withPostAuth( + async (_: FormData, post: SelectPost) => { + try { + const [response] = await db + .delete(posts) + .where(eq(posts.id, post.id)) + .returning({ + siteId: posts.siteId, + }); - return response; - } catch (error: any) { - return { - error: error.message, - }; - } -}); + return response; + } catch (error: any) { + return { + error: error.message, + }; + } + }, +); export const editUser = async ( formData: FormData, @@ -369,10 +418,14 @@ export const editUser = async ( const value = formData.get(key) as string; try { - const [response] = await db.update(users).set({ - [key]: value - }).where(eq(users.id, session.user.id)).returning() - + const [response] = await db + .update(users) + .set({ + [key]: value, + }) + .where(eq(users.id, session.user.id)) + .returning(); + return response; } catch (error: any) { if (error.code === "P2002") { diff --git a/lib/auth.ts b/lib/auth.ts index ee47a3a4f..cf02fb517 100644 --- a/lib/auth.ts +++ b/lib/auth.ts @@ -3,6 +3,7 @@ import GitHubProvider from "next-auth/providers/github"; import db from "./db/db"; import { DrizzleAdapter } from "@auth/drizzle-adapter"; import { Adapter } from "next-auth/adapters"; +import { accounts, sessions, users, verificationTokens } from "./db/schema"; const VERCEL_DEPLOYMENT = !!process.env.VERCEL_URL; export const authOptions: NextAuthOptions = { @@ -26,7 +27,12 @@ export const authOptions: NextAuthOptions = { verifyRequest: `/login`, error: "/login", // Error code passed in query string as ?error= }, - adapter: DrizzleAdapter(db) as Adapter, + adapter: DrizzleAdapter(db, { + usersTable: users, + accountsTable: accounts, + sessionsTable: sessions, + verificationTokensTable: verificationTokens, + }) as Adapter, session: { strategy: "jwt" }, cookies: { sessionToken: { @@ -89,8 +95,8 @@ export function withSiteAuth(action: any) { } const site = await db.query.sites.findFirst({ - where: (sites, { eq }) => eq(sites.id, siteId) - }) + where: (sites, { eq }) => eq(sites.id, siteId), + }); if (!site || site.userId !== session.user.id) { return { @@ -118,9 +124,9 @@ export function withPostAuth(action: any) { const post = await db.query.posts.findFirst({ where: (posts, { eq }) => eq(posts.id, postId), with: { - site: true - } - }) + site: true, + }, + }); if (!post || post.userId !== session.user.id) { return { diff --git a/lib/db/db.ts b/lib/db/db.ts index 1a68dbc0e..c7cdc1b07 100644 --- a/lib/db/db.ts +++ b/lib/db/db.ts @@ -1,10 +1,9 @@ -import { sql } from '@vercel/postgres'; -import { drizzle } from 'drizzle-orm/vercel-postgres'; -import * as schema from './schema'; +import { sql } from "@vercel/postgres"; +import { drizzle } from "drizzle-orm/vercel-postgres"; +import * as schema from "./schema"; -const db = drizzle(sql, {schema, logger:true}) +const db = drizzle(sql, { schema, logger: true }); export default db; export type DrizzleClient = typeof db; - diff --git a/lib/db/schema.ts b/lib/db/schema.ts index 235e640cf..e6e514fa3 100644 --- a/lib/db/schema.ts +++ b/lib/db/schema.ts @@ -1,32 +1,50 @@ -import { pgTable, uniqueIndex, index, text, timestamp, serial, integer, boolean, primaryKey } from "drizzle-orm/pg-core" -import { relations } from "drizzle-orm" -import { createId } from '@paralleldrive/cuid2'; +import { + pgTable, + uniqueIndex, + index, + text, + timestamp, + serial, + integer, + boolean, + primaryKey, + varchar, +} from "drizzle-orm/pg-core"; +import { relations } from "drizzle-orm"; +import { createId } from "@paralleldrive/cuid2"; export const users = pgTable("user", { - id: text("id").primaryKey().$defaultFn(() => createId()), - name: text("name"), - // if you are using Github OAuth, you can get rid of the username attribute (that is for Twitter OAuth) - username: text("username"), - ghUsername: text("gh_username"), - email: text("email").unique(), - emailVerified: timestamp("emailVerified", { precision: 3, mode: 'date' }), - image: text("image"), - createdAt: timestamp("created_at", { precision: 3, mode: 'date' }).defaultNow().notNull(), - updatedAt: timestamp("updated_at", { precision: 3, mode: 'date' }).notNull().$onUpdate(() => new Date()) + id: text("id") + .primaryKey() + .$defaultFn(() => createId()), + name: text("name"), + // if you are using Github OAuth, you can get rid of the username attribute (that is for Twitter OAuth) + username: text("username"), + ghUsername: text("gh_username"), + email: text("email").notNull().unique(), + emailVerified: timestamp("emailVerified", { mode: "date" }), + image: text("image"), + createdAt: timestamp("created_at", { mode: "date" }).defaultNow().notNull(), + updatedAt: timestamp("updated_at", { mode: "date" }) + .notNull() + .$onUpdate(() => new Date()), }); -export const sessions = pgTable("sessions", { - id: text("id").primaryKey().$defaultFn(() => createId()), - sessionToken: text("sessionToken").notNull().unique(), - userId: text("userId") - .notNull() - .references(() => users.id, { onDelete: "cascade" }), - expires: timestamp("expires", { mode: "date" }).notNull(), -}, (table) => { - return { - userIdIdx: index().on(table.userId), - } -}) +export const sessions = pgTable( + "sessions", + { + sessionToken: text("sessionToken").primaryKey(), + userId: text("userId") + .notNull() + .references(() => users.id, { onDelete: "cascade" }), + expires: timestamp("expires", { mode: "date" }).notNull(), + }, + (table) => { + return { + userIdIdx: index().on(table.userId), + }; + }, +); export const verificationTokens = pgTable( "verificationTokens", @@ -37,113 +55,156 @@ export const verificationTokens = pgTable( }, (table) => { return { - compositePk: primaryKey({ columns: [table.identifier, table.token] }) - } - } -) + compositePk: primaryKey({ columns: [table.identifier, table.token] }), + }; + }, +); export const examples = pgTable("example", { - id: serial("id").primaryKey().notNull(), - name: text("name"), - description: text("description"), - domainCount: integer("domain_count"), - url: text("url"), - image: text("image"), - imageBlurhash: text("image_blurhash"), -}); - -export const accounts = pgTable("accounts", { - userId: text("userId").notNull().references(() => users.id, { onDelete: "cascade" } ), - type: text("type").notNull(), - provider: text("provider").notNull(), - providerAccountId: text("providerAccountId").notNull(), - refresh_token: text("refresh_token"), - refreshTokenExpiresIn: integer("refresh_token_expires_in"), - access_token: text("access_token"), - expires_at: integer("expires_at"), - token_type: text("token_type"), - scope: text("scope"), - id_token: text("id_token"), - session_state: text("session_state"), - oauthTokenSecret: text("oauth_token_secret"), - oauthToken: text("oauth_token"), -}, -(table) => { - return { - userIdIdx: index("Account_userId_idx").on(table.userId), - compositePk: primaryKey({columns: [table.provider, table.providerAccountId]}), - } + id: serial("id").primaryKey().notNull(), + name: text("name"), + description: text("description"), + domainCount: integer("domain_count"), + url: text("url"), + image: text("image"), + imageBlurhash: text("image_blurhash"), }); +export const accounts = pgTable( + "accounts", + { + userId: text("userId") + .notNull() + .references(() => users.id, { onDelete: "cascade" }), + type: text("type").notNull(), + provider: text("provider").notNull(), + providerAccountId: text("providerAccountId").notNull(), + refresh_token: text("refresh_token"), + refreshTokenExpiresIn: integer("refresh_token_expires_in"), + access_token: text("access_token"), + expires_at: integer("expires_at"), + token_type: text("token_type"), + scope: text("scope"), + id_token: text("id_token"), + session_state: text("session_state"), + oauthTokenSecret: text("oauth_token_secret"), + oauthToken: text("oauth_token"), + }, + (table) => { + return { + userIdIdx: index().on(table.userId), + compositePk: primaryKey({ + columns: [table.provider, table.providerAccountId], + }), + }; + }, +); -export const sites = pgTable("site", { - id: text("id").primaryKey().$defaultFn(() => createId()), - name: text("name"), - description: text("description"), - logo: text("logo").default('https://public.blob.vercel-storage.com/eEZHAoPTOBSYGBE3/JRajRyC-PhBHEinQkupt02jqfKacBVHLWJq7Iy.png'), - font: text("font").default('font-cal').notNull(), - image: text("image").default('https://public.blob.vercel-storage.com/eEZHAoPTOBSYGBE3/hxfcV5V-eInX3jbVUhjAt1suB7zB88uGd1j20b.png'), - imageBlurhash: text("image_blurhash").default('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAhCAYAAACbffiEAAAACXBIWXMAABYlAAAWJQFJUiTwAAABfUlEQVR4nN3XyZLDIAwE0Pz/v3q3r55JDlSBplsIEI49h76k4opexCK/juP4eXjOT149f2Tf9ySPgcjCc7kdpBTgDPKByKK2bTPFEdMO0RDrusJ0wLRBGCIuelmWJAjkgPGDSIQEMBDCfA2CEPM80+Qwl0JkNxBimiaYGOTUlXYI60YoehzHJDEm7kxjV3whOQTD3AaCuhGKHoYhyb+CBMwjIAFz647kTqyapdV4enGINuDJMSScPmijSwjCaHeLcT77C7EC0C1ugaCTi2HYfAZANgj6Z9A8xY5eiYghDMNQBJNCWhASot0jGsSCUiHWZcSGQjaWWCDaGMOWnsCcn2QhVkRuxqqNxMSdUSElCDbp1hbNOsa6Ugxh7xXauF4DyM1m5BLtCylBXgaxvPXVwEoOBjeIFVODtW74oj1yBQah3E8tyz3SkpolKS9Geo9YMD1QJR1Go4oJkgO1pgbNZq0AOUPChyjvh7vlXaQa+X1UXwKxgHokB2XPxbX+AnijwIU4ahazAAAAAElFTkSuQmCC'), - subdomain: text("subdomain").unique(), - customDomain: text("custom_domain").unique(), - message404: text("message404").default("Blimey! You''ve found a page that doesn''t exist."), - createdAt: timestamp("created_at", { precision: 3, mode: 'date' }).defaultNow().notNull(), - updatedAt: timestamp("updated_at", { precision: 3, mode: 'date' }).notNull().$onUpdate(() => new Date()), - userId: text("user_id").references(() => users.id, { onDelete: "cascade", onUpdate: "cascade" } ), -}, -(table) => { - return { - userIdIdx: index("Site_userId_idx").on(table.userId), - } -}); +export const sites = pgTable( + "site", + { + id: text("id") + .primaryKey() + .$defaultFn(() => createId()), + name: text("name"), + description: text("description"), + logo: text("logo").default( + "https://public.blob.vercel-storage.com/eEZHAoPTOBSYGBE3/JRajRyC-PhBHEinQkupt02jqfKacBVHLWJq7Iy.png", + ), + font: text("font").default("font-cal").notNull(), + image: text("image").default( + "https://public.blob.vercel-storage.com/eEZHAoPTOBSYGBE3/hxfcV5V-eInX3jbVUhjAt1suB7zB88uGd1j20b.png", + ), + imageBlurhash: text("image_blurhash").default( + "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAhCAYAAACbffiEAAAACXBIWXMAABYlAAAWJQFJUiTwAAABfUlEQVR4nN3XyZLDIAwE0Pz/v3q3r55JDlSBplsIEI49h76k4opexCK/juP4eXjOT149f2Tf9ySPgcjCc7kdpBTgDPKByKK2bTPFEdMO0RDrusJ0wLRBGCIuelmWJAjkgPGDSIQEMBDCfA2CEPM80+Qwl0JkNxBimiaYGOTUlXYI60YoehzHJDEm7kxjV3whOQTD3AaCuhGKHoYhyb+CBMwjIAFz647kTqyapdV4enGINuDJMSScPmijSwjCaHeLcT77C7EC0C1ugaCTi2HYfAZANgj6Z9A8xY5eiYghDMNQBJNCWhASot0jGsSCUiHWZcSGQjaWWCDaGMOWnsCcn2QhVkRuxqqNxMSdUSElCDbp1hbNOsa6Ugxh7xXauF4DyM1m5BLtCylBXgaxvPXVwEoOBjeIFVODtW74oj1yBQah3E8tyz3SkpolKS9Geo9YMD1QJR1Go4oJkgO1pgbNZq0AOUPChyjvh7vlXaQa+X1UXwKxgHokB2XPxbX+AnijwIU4ahazAAAAAElFTkSuQmCC", + ), + subdomain: text("subdomain").unique(), + customDomain: text("custom_domain").unique(), + message404: text("message404").default( + "Blimey! You''ve found a page that doesn''t exist.", + ), + createdAt: timestamp("created_at", { mode: "date" }).defaultNow().notNull(), + updatedAt: timestamp("updated_at", { mode: "date" }) + .notNull() + .$onUpdate(() => new Date()), + userId: text("user_id").references(() => users.id, { + onDelete: "cascade", + onUpdate: "cascade", + }), + }, + (table) => { + return { + userIdIdx: index().on(table.userId), + }; + }, +); -export const posts = pgTable("post", { - id: text("id").primaryKey().$defaultFn(() => createId()), - title: text("title"), - description: text("description"), - content: text("content"), - slug: text("slug").notNull().$defaultFn(() => createId()), - image: text("image").default('https://public.blob.vercel-storage.com/eEZHAoPTOBSYGBE3/hxfcV5V-eInX3jbVUhjAt1suB7zB88uGd1j20b.png'), - imageBlurhash: text("image_blurhash").default('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAhCAYAAACbffiEAAAACXBIWXMAABYlAAAWJQFJUiTwAAABfUlEQVR4nN3XyZLDIAwE0Pz/v3q3r55JDlSBplsIEI49h76k4opexCK/juP4eXjOT149f2Tf9ySPgcjCc7kdpBTgDPKByKK2bTPFEdMO0RDrusJ0wLRBGCIuelmWJAjkgPGDSIQEMBDCfA2CEPM80+Qwl0JkNxBimiaYGOTUlXYI60YoehzHJDEm7kxjV3whOQTD3AaCuhGKHoYhyb+CBMwjIAFz647kTqyapdV4enGINuDJMSScPmijSwjCaHeLcT77C7EC0C1ugaCTi2HYfAZANgj6Z9A8xY5eiYghDMNQBJNCWhASot0jGsSCUiHWZcSGQjaWWCDaGMOWnsCcn2QhVkRuxqqNxMSdUSElCDbp1hbNOsa6Ugxh7xXauF4DyM1m5BLtCylBXgaxvPXVwEoOBjeIFVODtW74oj1yBQah3E8tyz3SkpolKS9Geo9YMD1QJR1Go4oJkgO1pgbNZq0AOUPChyjvh7vlXaQa+X1UXwKxgHokB2XPxbX+AnijwIU4ahazAAAAAElFTkSuQmCC'), - createdAt: timestamp("created_at", { precision: 3, mode: 'date' }).defaultNow().notNull(), - updatedAt: timestamp("updated_at", { precision: 3, mode: 'date' }).notNull().$onUpdate(() => new Date()), - published: boolean("published").default(false).notNull(), - siteId: text("site_id").references(() => sites.id, { onDelete: "cascade", onUpdate: "cascade" } ), - userId: text("user_id").references(() => users.id, { onDelete: "cascade", onUpdate: "cascade" } ), -}, -(table) => { - return { - siteIdIdx: index("Post_siteId_idx").on(table.siteId), - userIdIdx: index("Post_userId_idx").on(table.userId), - slugSiteIdKey: uniqueIndex("Post_slug_siteId_key").on(table.slug, table.siteId), - } -}); +export const posts = pgTable( + "post", + { + id: text("id") + .primaryKey() + .$defaultFn(() => createId()), + title: text("title"), + description: text("description"), + content: text("content"), + slug: text("slug") + .notNull() + .$defaultFn(() => createId()), + image: text("image").default( + "https://public.blob.vercel-storage.com/eEZHAoPTOBSYGBE3/hxfcV5V-eInX3jbVUhjAt1suB7zB88uGd1j20b.png", + ), + imageBlurhash: text("image_blurhash").default( + "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAhCAYAAACbffiEAAAACXBIWXMAABYlAAAWJQFJUiTwAAABfUlEQVR4nN3XyZLDIAwE0Pz/v3q3r55JDlSBplsIEI49h76k4opexCK/juP4eXjOT149f2Tf9ySPgcjCc7kdpBTgDPKByKK2bTPFEdMO0RDrusJ0wLRBGCIuelmWJAjkgPGDSIQEMBDCfA2CEPM80+Qwl0JkNxBimiaYGOTUlXYI60YoehzHJDEm7kxjV3whOQTD3AaCuhGKHoYhyb+CBMwjIAFz647kTqyapdV4enGINuDJMSScPmijSwjCaHeLcT77C7EC0C1ugaCTi2HYfAZANgj6Z9A8xY5eiYghDMNQBJNCWhASot0jGsSCUiHWZcSGQjaWWCDaGMOWnsCcn2QhVkRuxqqNxMSdUSElCDbp1hbNOsa6Ugxh7xXauF4DyM1m5BLtCylBXgaxvPXVwEoOBjeIFVODtW74oj1yBQah3E8tyz3SkpolKS9Geo9YMD1QJR1Go4oJkgO1pgbNZq0AOUPChyjvh7vlXaQa+X1UXwKxgHokB2XPxbX+AnijwIU4ahazAAAAAElFTkSuQmCC", + ), + createdAt: timestamp("created_at", { mode: "date" }).defaultNow().notNull(), + updatedAt: timestamp("updated_at", { mode: "date" }) + .notNull() + .$onUpdate(() => new Date()), + published: boolean("published").default(false).notNull(), + siteId: text("site_id").references(() => sites.id, { + onDelete: "cascade", + onUpdate: "cascade", + }), + userId: text("user_id").references(() => users.id, { + onDelete: "cascade", + onUpdate: "cascade", + }), + }, + (table) => { + return { + siteIdIdx: index().on(table.siteId), + userIdIdx: index().on(table.userId), + slugSiteIdKey: uniqueIndex().on(table.slug, table.siteId), + }; + }, +); -export const postsRelations = relations(posts, ({one}) => ({ - site: one(sites, {references: [sites.id], fields: [posts.siteId]}), - user: one(users, {references: [users.id], fields: [posts.userId]}) -})) +export const postsRelations = relations(posts, ({ one }) => ({ + site: one(sites, { references: [sites.id], fields: [posts.siteId] }), + user: one(users, { references: [users.id], fields: [posts.userId] }), +})); -export const sitesRelations = relations(sites, ({one, many}) => ({ - posts: many(posts), - user: one(users, {references: [users.id], fields: [sites.userId]}) -})) +export const sitesRelations = relations(sites, ({ one, many }) => ({ + posts: many(posts), + user: one(users, { references: [users.id], fields: [sites.userId] }), +})); -export const sessionsRelations = relations(sessions, ({one}) => ({ - user: one(users, {references: [users.id], fields: [sessions.userId]}) -})) +export const sessionsRelations = relations(sessions, ({ one }) => ({ + user: one(users, { references: [users.id], fields: [sessions.userId] }), +})); -export const accountsRelations = relations(accounts, ({one}) => ({ - user: one(users, {references: [users.id], fields: [accounts.userId]}) -})) +export const accountsRelations = relations(accounts, ({ one }) => ({ + user: one(users, { references: [users.id], fields: [accounts.userId] }), +})); -export const userRelations = relations(users, ({many}) => ({ - accounts: many(accounts), - sessions: many(sessions), - sites: many(sites), - posts: many(posts), -})) +export const userRelations = relations(users, ({ many }) => ({ + accounts: many(accounts), + sessions: many(sessions), + sites: many(sites), + posts: many(posts), +})); -export type SelectSite = typeof sites.$inferSelect -export type SelectPost = typeof posts.$inferSelect -export type SelectExample = typeof examples.$inferSelect +export type SelectSite = typeof sites.$inferSelect; +export type SelectPost = typeof posts.$inferSelect; +export type SelectExample = typeof examples.$inferSelect; diff --git a/lib/fetchers.ts b/lib/fetchers.ts index 316a6269e..d62c322eb 100644 --- a/lib/fetchers.ts +++ b/lib/fetchers.ts @@ -13,11 +13,13 @@ export async function getSiteData(domain: string) { return await unstable_cache( async () => { return await db.query.sites.findFirst({ - where: subdomain ? eq(sites.subdomain, subdomain) : eq(sites.customDomain, domain), + where: subdomain + ? eq(sites.subdomain, subdomain) + : eq(sites.customDomain, domain), with: { - user:true - } - }) + user: true, + }, + }); }, [`${domain}-metadata`], { @@ -34,16 +36,26 @@ export async function getPostsForSite(domain: string) { return await unstable_cache( async () => { - return await db.select({ - title: posts.title, - description: posts.description, - slug: posts.slug, - image: posts.image, - imageBlurhash: posts.imageBlurhash, - createdAt: posts.createdAt, - }).from(posts).leftJoin(sites, eq(posts.siteId, sites.id)) - .where(and(eq(posts.published,true), subdomain ? eq(sites.subdomain, subdomain) : eq(sites.customDomain, domain) )) - .orderBy(desc(posts.createdAt)) + return await db + .select({ + title: posts.title, + description: posts.description, + slug: posts.slug, + image: posts.image, + imageBlurhash: posts.imageBlurhash, + createdAt: posts.createdAt, + }) + .from(posts) + .leftJoin(sites, eq(posts.siteId, sites.id)) + .where( + and( + eq(posts.published, true), + subdomain + ? eq(sites.subdomain, subdomain) + : eq(sites.customDomain, domain), + ), + ) + .orderBy(desc(posts.createdAt)); }, [`${domain}-posts`], { @@ -60,30 +72,58 @@ export async function getPostData(domain: string, slug: string) { return await unstable_cache( async () => { - const data = await db.select().from(posts).leftJoin(sites, eq(sites.id, posts.siteId)) - .leftJoin(users, eq(users.id, sites.userId)) - .where(and(eq(posts.slug, slug), eq(posts.published, true), subdomain ? eq(sites.subdomain, subdomain) : eq(sites.customDomain, domain))) - .then((res) => res.length > 0 ? { - ...res[0].post, - site: res[0].site ? { - ...res[0].user, - user: res[0].user - } : null - } : null) + const data = await db + .select() + .from(posts) + .leftJoin(sites, eq(sites.id, posts.siteId)) + .leftJoin(users, eq(users.id, sites.userId)) + .where( + and( + eq(posts.slug, slug), + eq(posts.published, true), + subdomain + ? eq(sites.subdomain, subdomain) + : eq(sites.customDomain, domain), + ), + ) + .then((res) => + res.length > 0 + ? { + ...res[0].post, + site: res[0].site + ? { + ...res[0].user, + user: res[0].user, + } + : null, + } + : null, + ); if (!data) return null; const [mdxSource, adjacentPosts] = await Promise.all([ getMdxSource(data.content!), - db.select({ - slug: posts.slug, - title: posts.title, - createdAt: posts.createdAt, - description: posts.description, - image: posts.image, - imageBlurhash: posts.imageBlurhash, - }).from(posts).leftJoin(sites, eq(sites.id, posts.siteId)) - .where(and(eq(posts.published,true), not(eq(posts.id, data.id)), subdomain ? eq(sites.subdomain, subdomain) : eq(sites.customDomain, domain))), + db + .select({ + slug: posts.slug, + title: posts.title, + createdAt: posts.createdAt, + description: posts.description, + image: posts.image, + imageBlurhash: posts.imageBlurhash, + }) + .from(posts) + .leftJoin(sites, eq(sites.id, posts.siteId)) + .where( + and( + eq(posts.published, true), + not(eq(posts.id, data.id)), + subdomain + ? eq(sites.subdomain, subdomain) + : eq(sites.customDomain, domain), + ), + ), ]); return { diff --git a/lib/remark-plugins.tsx b/lib/remark-plugins.tsx index e285757bc..5098cc540 100644 --- a/lib/remark-plugins.tsx +++ b/lib/remark-plugins.tsx @@ -108,8 +108,8 @@ async function getExamples(node: any, drizzle: DrizzleClient) { for (let i = 0; i < names.length; i++) { const results = await drizzle.query.examples.findFirst({ - where: (examples, { eq }) => (eq(examples.id, parseInt(names[i]))), - }) + where: (examples, { eq }) => eq(examples.id, parseInt(names[i])), + }); data.push(results); } diff --git a/lib/utils.ts b/lib/utils.ts index 8e01afdaf..3fd5768cd 100644 --- a/lib/utils.ts +++ b/lib/utils.ts @@ -59,20 +59,16 @@ export const random = (min: number, max: number) => { return Math.floor(Math.random() * (max - min + 1) + min); }; -export function withLimit( - qb: T, - limit: number, -) { +export function withLimit(qb: T, limit: number) { return qb.limit(limit); } - type NonNullableProps = { - [P in keyof T]: null extends T[P] ? never : P -}[keyof T] + [P in keyof T]: null extends T[P] ? never : P; +}[keyof T]; export function stripUndefined(obj: T): Pick> { - const result = {} as T - for (const key in obj) if (obj[key] !== undefined) result[key] = obj[key] - return result + const result = {} as T; + for (const key in obj) if (obj[key] !== undefined) result[key] = obj[key]; + return result; } diff --git a/next.config.js b/next.config.js index 85adc94a3..2afd5d466 100644 --- a/next.config.js +++ b/next.config.js @@ -18,6 +18,6 @@ module.exports = { { hostname: "www.google.com" }, { hostname: "flag.vercel.app" }, { hostname: "illustrations.popsy.co" }, - ] + ], }, }; diff --git a/package.json b/package.json index dd9d66736..7fb7e4b7a 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "lint": "next lint" }, "dependencies": { - "@auth/drizzle-adapter": "^0.8.2", + "@auth/drizzle-adapter": "^1.0.1", "@paralleldrive/cuid2": "^2.2.2", "@tremor/react": "^3.11.1", "@upstash/ratelimit": "^0.4.4", @@ -20,7 +20,7 @@ "ai": "^2.2.22", "clsx": "^2.0.0", "date-fns": "^2.30.0", - "drizzle-orm": "^0.30.8", + "drizzle-orm": "^0.30.10", "focus-trap-react": "^10.2.3", "framer-motion": "^10.16.4", "gray-matter": "^4.0.3", @@ -53,7 +53,7 @@ "@types/react": "^18.2.37", "@types/react-dom": "^18.2.15", "autoprefixer": "^10.4.16", - "drizzle-kit": "^0.20.14", + "drizzle-kit": "^0.20.18", "eslint": "8.53.0", "eslint-config-next": "^14.0.2", "postcss": "^8.4.31", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d799976ae..677b8e4c6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -6,20 +6,20 @@ settings: dependencies: '@auth/drizzle-adapter': - specifier: ^0.8.2 - version: 0.8.2 + specifier: ^1.0.1 + version: 1.0.1 '@paralleldrive/cuid2': specifier: ^2.2.2 version: 2.2.2 '@tremor/react': specifier: ^3.11.1 - version: 3.16.0(react-dom@18.2.0)(react@18.2.0)(tailwindcss@3.4.3) + version: 3.16.2(react-dom@18.3.1)(react@18.3.1)(tailwindcss@3.4.3) '@upstash/ratelimit': specifier: ^0.4.4 version: 0.4.4 '@vercel/analytics': specifier: ^1.1.1 - version: 1.2.2(next@14.0.2)(react@18.2.0) + version: 1.2.2(next@14.0.2)(react@18.3.1) '@vercel/blob': specifier: ^0.15.0 version: 0.15.1 @@ -31,22 +31,22 @@ dependencies: version: 0.8.0 ai: specifier: ^2.2.22 - version: 2.2.37(react@18.2.0)(solid-js@1.8.16)(svelte@4.2.14)(vue@3.4.22) + version: 2.2.37(react@18.3.1)(solid-js@1.8.17)(svelte@4.2.15)(vue@3.4.27) clsx: specifier: ^2.0.0 - version: 2.1.0 + version: 2.1.1 date-fns: specifier: ^2.30.0 version: 2.30.0 drizzle-orm: - specifier: ^0.30.8 - version: 0.30.8(@types/react@18.2.78)(@vercel/postgres@0.8.0)(pg@8.11.5)(react@18.2.0) + specifier: ^0.30.10 + version: 0.30.10(@types/react@18.3.1)(@vercel/postgres@0.8.0)(pg@8.11.5)(react@18.3.1) focus-trap-react: specifier: ^10.2.3 - version: 10.2.3(prop-types@15.8.1)(react-dom@18.2.0)(react@18.2.0) + version: 10.2.3(prop-types@15.8.1)(react-dom@18.3.1)(react@18.3.1) framer-motion: specifier: ^10.16.4 - version: 10.18.0(react-dom@18.2.0)(react@18.2.0) + version: 10.18.0(react-dom@18.3.1)(react@18.3.1) gray-matter: specifier: ^4.0.3 version: 4.0.3 @@ -55,22 +55,22 @@ dependencies: version: 3.0.5 lucide-react: specifier: ^0.292.0 - version: 0.292.0(react@18.2.0) + version: 0.292.0(react@18.3.1) nanoid: specifier: ^4.0.2 version: 4.0.2 next: specifier: 14.0.2 - version: 14.0.2(react-dom@18.2.0)(react@18.2.0) + version: 14.0.2(react-dom@18.3.1)(react@18.3.1) next-auth: specifier: ^4.24.7 - version: 4.24.7(next@14.0.2)(react-dom@18.2.0)(react@18.2.0) + version: 4.24.7(next@14.0.2)(react-dom@18.3.1)(react@18.3.1) next-mdx-remote: specifier: ^4.4.1 - version: 4.4.1(react-dom@18.2.0)(react@18.2.0) + version: 4.4.1(react-dom@18.3.1)(react@18.3.1) novel: specifier: ^0.1.22 - version: 0.1.22(react@18.2.0)(solid-js@1.8.16)(svelte@4.2.14)(vue@3.4.22) + version: 0.1.22(react@18.3.1)(solid-js@1.8.17)(svelte@4.2.15)(vue@3.4.27) openai-edge: specifier: ^1.2.2 version: 1.2.2 @@ -79,16 +79,16 @@ dependencies: version: 8.11.5 react: specifier: ^18.2.0 - version: 18.2.0 + version: 18.3.1 react-dom: specifier: ^18.2.0 - version: 18.2.0(react@18.2.0) + version: 18.3.1(react@18.3.1) react-textarea-autosize: specifier: ^8.5.3 - version: 8.5.3(@types/react@18.2.78)(react@18.2.0) + version: 8.5.3(@types/react@18.3.1)(react@18.3.1) react-tweet: specifier: ^3.1.1 - version: 3.2.1(react-dom@18.2.0)(react@18.2.0) + version: 3.2.1(react-dom@18.3.1)(react@18.3.1) remark: specifier: ^14.0.3 version: 14.0.3 @@ -97,19 +97,19 @@ dependencies: version: 0.32.6 sonner: specifier: ^1.2.0 - version: 1.4.41(react-dom@18.2.0)(react@18.2.0) + version: 1.4.41(react-dom@18.3.1)(react@18.3.1) swr: specifier: ^2.2.4 - version: 2.2.5(react@18.2.0) + version: 2.2.5(react@18.3.1) tailwind-merge: specifier: ^2.0.0 - version: 2.2.2 + version: 2.3.0 unist-util-visit: specifier: ^5.0.0 version: 5.0.0 use-debounce: specifier: ^10.0.0 - version: 10.0.0(react@18.2.0) + version: 10.0.0(react@18.3.1) devDependencies: '@tailwindcss/forms': @@ -117,31 +117,31 @@ devDependencies: version: 0.5.7(tailwindcss@3.4.3) '@tailwindcss/typography': specifier: ^0.5.10 - version: 0.5.12(tailwindcss@3.4.3) + version: 0.5.13(tailwindcss@3.4.3) '@types/js-cookie': specifier: ^3.0.6 version: 3.0.6 '@types/node': specifier: ^20.9.0 - version: 20.12.7 + version: 20.12.10 '@types/react': specifier: ^18.2.37 - version: 18.2.78 + version: 18.3.1 '@types/react-dom': specifier: ^18.2.15 - version: 18.2.25 + version: 18.3.0 autoprefixer: specifier: ^10.4.16 version: 10.4.19(postcss@8.4.38) drizzle-kit: - specifier: ^0.20.14 - version: 0.20.14 + specifier: ^0.20.18 + version: 0.20.18 eslint: specifier: 8.53.0 version: 8.53.0 eslint-config-next: specifier: ^14.0.2 - version: 14.2.1(eslint@8.53.0)(typescript@5.4.5) + version: 14.2.3(eslint@8.53.0)(typescript@5.4.5) postcss: specifier: ^8.4.31 version: 8.4.38 @@ -163,10 +163,6 @@ devDependencies: packages: - /@aashutoshrathi/word-wrap@1.2.6: - resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} - engines: {node: '>=0.10.0'} - /@alloc/quick-lru@5.2.0: resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} engines: {node: '>=10'} @@ -179,8 +175,8 @@ packages: '@jridgewell/trace-mapping': 0.3.25 dev: false - /@auth/core@0.28.2: - resolution: {integrity: sha512-Rlvu6yKa4bKbhQESMaEm6jHOY5ncIrsrQkC8tcwVQmf+cBLk7ReI9DIJS2O/WkIDoOwvM9PHiXTi5b+b/eyXxw==} + /@auth/core@0.30.0: + resolution: {integrity: sha512-8AE4m/nk+4EIiVCJwxZAsJeAQuzpEC8M8768mmKVn60CGDdupKQkVhxbRlm5Qh7eNRCoFFME+0DvtaX2aXrYaA==} peerDependencies: '@simplewebauthn/browser': ^9.0.1 '@simplewebauthn/server': ^9.0.2 @@ -202,10 +198,10 @@ packages: preact-render-to-string: 5.2.3(preact@10.11.3) dev: false - /@auth/drizzle-adapter@0.8.2: - resolution: {integrity: sha512-IrySrHLr427+J5CjiM5fI6XFDmH5R2G7wd4E26z+J64C3t2aegdZdlfMAUerLjeoxAXnMas7bECtOYRO33EfKA==} + /@auth/drizzle-adapter@1.0.1: + resolution: {integrity: sha512-E4np2F48p930q+YeQ5ipZPv/L+9gmQcB7g6NQQyux2wtanRNOXNW4TG8wMjSRfTzccNq161YZ8Fm5le/5snkGQ==} dependencies: - '@auth/core': 0.28.2 + '@auth/core': 0.30.0 transitivePeerDependencies: - '@simplewebauthn/browser' - '@simplewebauthn/server' @@ -216,7 +212,7 @@ packages: resolution: {integrity: sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/highlight': 7.24.2 + '@babel/highlight': 7.24.5 picocolors: 1.0.0 dev: false @@ -225,50 +221,44 @@ packages: engines: {node: '>=6.9.0'} dev: false - /@babel/helper-validator-identifier@7.22.20: - resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} + /@babel/helper-validator-identifier@7.24.5: + resolution: {integrity: sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA==} engines: {node: '>=6.9.0'} dev: false - /@babel/highlight@7.24.2: - resolution: {integrity: sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==} + /@babel/highlight@7.24.5: + resolution: {integrity: sha512-8lLmua6AVh/8SLJRRVD6V8p73Hir9w5mJrhE+IPpILG31KKlI9iz5zmBYKcWPS59qSfgP9RaSBQSHHE81WKuEw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-validator-identifier': 7.22.20 + '@babel/helper-validator-identifier': 7.24.5 chalk: 2.4.2 js-tokens: 4.0.0 picocolors: 1.0.0 dev: false - /@babel/parser@7.24.4: - resolution: {integrity: sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg==} + /@babel/parser@7.24.5: + resolution: {integrity: sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg==} engines: {node: '>=6.0.0'} hasBin: true dependencies: - '@babel/types': 7.24.0 + '@babel/types': 7.24.5 dev: false - /@babel/runtime@7.24.4: - resolution: {integrity: sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA==} + /@babel/runtime@7.24.5: + resolution: {integrity: sha512-Nms86NXrsaeU9vbBJKni6gXiEXZ4CVpYVzEjDH9Sb8vmZ3UljyA1GSOJl/6LGPO8EHLuSF9H+IxNXHPX8QHJ4g==} engines: {node: '>=6.9.0'} dependencies: regenerator-runtime: 0.14.1 - /@babel/types@7.24.0: - resolution: {integrity: sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==} + /@babel/types@7.24.5: + resolution: {integrity: sha512-6mQNsaLeXTw0nxYUYu+NSa4Hx4BlF1x1x8/PMFbiR+GBSr+2DkECc69b8hgy2frEodNcvPffeH8YfWd3LI6jhQ==} engines: {node: '>=6.9.0'} dependencies: '@babel/helper-string-parser': 7.24.1 - '@babel/helper-validator-identifier': 7.22.20 + '@babel/helper-validator-identifier': 7.24.5 to-fast-properties: 2.0.0 dev: false - /@drizzle-team/studio@0.0.39: - resolution: {integrity: sha512-c5Hkm7MmQC2n5qAsKShjQrHoqlfGslB8+qWzsGGZ+2dHMRTNG60UuzalF0h0rvBax5uzPXuGkYLGaQ+TUX3yMw==} - dependencies: - superjson: 2.2.1 - dev: true - /@emotion/is-prop-valid@0.8.8: resolution: {integrity: sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==} requiresBuild: true @@ -294,7 +284,7 @@ packages: resolution: {integrity: sha512-FxEMIkJKnodyA1OaCUoEvbYRkoZlLZ4d/eXFu9Fh8CbBBgP5EmZxrfTRyN0qpXZ4vOvqnE5YdRdcrmUUXuU+dA==} dependencies: '@esbuild-kit/core-utils': 3.3.2 - get-tsconfig: 4.7.3 + get-tsconfig: 4.7.4 dev: true /@esbuild/aix-ppc64@0.19.12: @@ -755,69 +745,69 @@ packages: engines: {node: '>=14'} dev: false - /@floating-ui/core@1.6.0: - resolution: {integrity: sha512-PcF++MykgmTj3CIyOQbKA/hDzOAiqI3mhuoN44WRCopIs1sgoDoU4oty4Jtqaj/y3oDU6fnVSm4QG0a3t5i0+g==} + /@floating-ui/core@1.6.1: + resolution: {integrity: sha512-42UH54oPZHPdRHdw6BgoBD6cg/eVTmVrFcgeRDM3jbO7uxSoipVcmcIGFcA5jmOHO5apcyvBhkSKES3fQJnu7A==} dependencies: - '@floating-ui/utils': 0.2.1 + '@floating-ui/utils': 0.2.2 dev: false - /@floating-ui/dom@1.6.3: - resolution: {integrity: sha512-RnDthu3mzPlQ31Ss/BTwQ1zjzIhr3lk1gZB1OC56h/1vEtaXkESrOqL5fQVMfXpwGtRwX+YsZBdyHtJMQnkArw==} + /@floating-ui/dom@1.6.5: + resolution: {integrity: sha512-Nsdud2X65Dz+1RHjAIP0t8z5e2ff/IRbei6BqFrl1urT8sDVzM1HMQ+R0XcU5ceRfyO3I6ayeqIfh+6Wb8LGTw==} dependencies: - '@floating-ui/core': 1.6.0 - '@floating-ui/utils': 0.2.1 + '@floating-ui/core': 1.6.1 + '@floating-ui/utils': 0.2.2 dev: false - /@floating-ui/react-dom@1.3.0(react-dom@18.2.0)(react@18.2.0): + /@floating-ui/react-dom@1.3.0(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-htwHm67Ji5E/pROEAr7f8IKFShuiCKHwUC/UY4vC3I5jiSvGFAYnSYiZO5MlGmads+QqvUkR9ANHEguGrDv72g==} peerDependencies: react: '>=16.8.0' react-dom: '>=16.8.0' dependencies: - '@floating-ui/dom': 1.6.3 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) + '@floating-ui/dom': 1.6.5 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) dev: false - /@floating-ui/react-dom@2.0.8(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-HOdqOt3R3OGeTKidaLvJKcgg75S6tibQ3Tif4eyd91QnIJWr0NLvoXFpJA/j8HqkFSL68GDca9AuyWEHlhyClw==} + /@floating-ui/react-dom@2.0.9(react-dom@18.2.0)(react@18.3.1): + resolution: {integrity: sha512-q0umO0+LQK4+p6aGyvzASqKbKOJcAHJ7ycE9CuUvfx3s9zTHWmGJTPOIlM/hmSBfUfg/XfY5YhLBLR/LHwShQQ==} peerDependencies: react: '>=16.8.0' react-dom: '>=16.8.0' dependencies: - '@floating-ui/dom': 1.6.3 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) + '@floating-ui/dom': 1.6.5 + react: 18.3.1 + react-dom: 18.2.0(react@18.3.1) dev: false - /@floating-ui/react@0.19.2(react-dom@18.2.0)(react@18.2.0): + /@floating-ui/react@0.19.2(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-JyNk4A0Ezirq8FlXECvRtQOX/iBe5Ize0W/pLkrZjfHW9GUV7Xnq6zm6fyZuQzaHHqEnVizmvlA96e1/CkZv+w==} peerDependencies: react: '>=16.8.0' react-dom: '>=16.8.0' dependencies: - '@floating-ui/react-dom': 1.3.0(react-dom@18.2.0)(react@18.2.0) + '@floating-ui/react-dom': 1.3.0(react-dom@18.3.1)(react@18.3.1) aria-hidden: 1.2.4 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) tabbable: 6.2.0 dev: false - /@floating-ui/utils@0.2.1: - resolution: {integrity: sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==} + /@floating-ui/utils@0.2.2: + resolution: {integrity: sha512-J4yDIIthosAsRZ5CPYP/jQvUAQtlZTTD/4suA08/FEnlxqW3sKS9iAhgsa9VYLZ6vDHn/ixJgIqRQPotoBjxIw==} dev: false - /@headlessui/react@1.7.19(react-dom@18.2.0)(react@18.2.0): + /@headlessui/react@1.7.19(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-Ll+8q3OlMJfJbAKM/+/Y2q6PPYbryqNTXDbryx7SXLIDamkF6iQFbriYHga0dY44PvDhvvBWCx1Xj4U5+G4hOw==} engines: {node: '>=10'} peerDependencies: react: ^16 || ^17 || ^18 react-dom: ^16 || ^17 || ^18 dependencies: - '@tanstack/react-virtual': 3.3.0(react-dom@18.2.0)(react@18.2.0) + '@tanstack/react-virtual': 3.5.0(react-dom@18.3.1)(react@18.3.1) client-only: 0.0.1 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) dev: false /@headlessui/tailwindcss@0.2.0(tailwindcss@3.4.3): @@ -829,6 +819,21 @@ packages: tailwindcss: 3.4.3 dev: false + /@hono/node-server@1.11.1: + resolution: {integrity: sha512-GW1Iomhmm1o4Z+X57xGby8A35Cu9UZLL7pSMdqDBkD99U5cywff8F+8hLk5aBTzNubnsFAvWQ/fZjNwPsEn9lA==} + engines: {node: '>=18.14.1'} + dev: true + + /@hono/zod-validator@0.2.1(hono@4.3.2)(zod@3.23.6): + resolution: {integrity: sha512-HFoxln7Q6JsE64qz2WBS28SD33UB2alp3aRKmcWnNLDzEL1BLsWfbdX6e1HIiUprHYTIXf5y7ax8eYidKUwyaA==} + peerDependencies: + hono: '>=3.9.0' + zod: ^3.19.1 + dependencies: + hono: 4.3.2 + zod: 3.23.6 + dev: true + /@humanwhocodes/config-array@0.11.14: resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} engines: {node: '>=10.10.0'} @@ -863,7 +868,7 @@ packages: dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.12.7 + '@types/node': 20.12.10 jest-mock: 29.7.0 dev: false @@ -873,7 +878,7 @@ packages: dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 20.12.7 + '@types/node': 20.12.10 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -893,7 +898,7 @@ packages: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 20.12.7 + '@types/node': 20.12.10 '@types/yargs': 17.0.32 chalk: 4.1.2 dev: false @@ -947,14 +952,14 @@ packages: - supports-color dev: false - /@mdx-js/react@2.3.0(react@18.2.0): + /@mdx-js/react@2.3.0(react@18.3.1): resolution: {integrity: sha512-zQH//gdOmuu7nt2oJR29vFhDv88oGPmVw6BggmrHeMI+xgEkp1B2dX9/bMBSYtK0dyLX/aOmesKS09g222K1/g==} peerDependencies: react: '>=16' dependencies: '@types/mdx': 2.0.13 - '@types/react': 18.2.78 - react: 18.2.0 + '@types/react': 18.3.1 + react: 18.3.1 dev: false /@neondatabase/serverless@0.7.2: @@ -977,8 +982,8 @@ packages: glob: 7.1.7 dev: false - /@next/eslint-plugin-next@14.2.1: - resolution: {integrity: sha512-Fp+mthEBjkn8r9qd6o4JgxKp0IDEzW0VYHD8ZC05xS5/lFNwHKuOdr2kVhWG7BQCO9L6eeepshM1Wbs2T+LgSg==} + /@next/eslint-plugin-next@14.2.3: + resolution: {integrity: sha512-L3oDricIIjgj1AVnRdRor21gI7mShlSwU/1ZGHmqM3LzHhXXhdkrfeNY5zif25Bi5Dd7fiJHsbhoZCHfXYvlAw==} dependencies: glob: 10.3.10 dev: true @@ -1191,10 +1196,10 @@ packages: /@radix-ui/primitive@1.0.1: resolution: {integrity: sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw==} dependencies: - '@babel/runtime': 7.24.4 + '@babel/runtime': 7.24.5 dev: false - /@radix-ui/react-arrow@1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.28)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-arrow@1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.28)(react-dom@18.2.0)(react@18.3.1): resolution: {integrity: sha512-wSP+pHsB/jQRaL6voubsQ/ZlrGBHHrOjmBnr19hxYgtS0WvAFwZhK2WP/YY5yF9uKECCEEDGxuLxq1NBK51wFA==} peerDependencies: '@types/react': '*' @@ -1207,15 +1212,15 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.4 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.28)(react-dom@18.2.0)(react@18.2.0) + '@babel/runtime': 7.24.5 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.28)(react-dom@18.2.0)(react@18.3.1) '@types/react': 18.0.28 '@types/react-dom': 18.0.11 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) + react: 18.3.1 + react-dom: 18.2.0(react@18.3.1) dev: false - /@radix-ui/react-compose-refs@1.0.1(@types/react@18.0.28)(react@18.2.0): + /@radix-ui/react-compose-refs@1.0.1(@types/react@18.0.28)(react@18.3.1): resolution: {integrity: sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==} peerDependencies: '@types/react': '*' @@ -1224,12 +1229,12 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.4 + '@babel/runtime': 7.24.5 '@types/react': 18.0.28 - react: 18.2.0 + react: 18.3.1 dev: false - /@radix-ui/react-context@1.0.1(@types/react@18.0.28)(react@18.2.0): + /@radix-ui/react-context@1.0.1(@types/react@18.0.28)(react@18.3.1): resolution: {integrity: sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==} peerDependencies: '@types/react': '*' @@ -1238,12 +1243,12 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.4 + '@babel/runtime': 7.24.5 '@types/react': 18.0.28 - react: 18.2.0 + react: 18.3.1 dev: false - /@radix-ui/react-dismissable-layer@1.0.5(@types/react-dom@18.0.11)(@types/react@18.0.28)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-dismissable-layer@1.0.5(@types/react-dom@18.0.11)(@types/react@18.0.28)(react-dom@18.2.0)(react@18.3.1): resolution: {integrity: sha512-aJeDjQhywg9LBu2t/At58hCvr7pEm0o2Ke1x33B+MhjNmmZ17sy4KImo0KPLgsnc/zN7GPdce8Cnn0SWvwZO7g==} peerDependencies: '@types/react': '*' @@ -1256,19 +1261,19 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.4 + '@babel/runtime': 7.24.5 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.28)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.28)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.28)(react@18.2.0) - '@radix-ui/react-use-escape-keydown': 1.0.3(@types/react@18.0.28)(react@18.2.0) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.28)(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.28)(react-dom@18.2.0)(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.28)(react@18.3.1) + '@radix-ui/react-use-escape-keydown': 1.0.3(@types/react@18.0.28)(react@18.3.1) '@types/react': 18.0.28 '@types/react-dom': 18.0.11 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) + react: 18.3.1 + react-dom: 18.2.0(react@18.3.1) dev: false - /@radix-ui/react-focus-guards@1.0.1(@types/react@18.0.28)(react@18.2.0): + /@radix-ui/react-focus-guards@1.0.1(@types/react@18.0.28)(react@18.3.1): resolution: {integrity: sha512-Rect2dWbQ8waGzhMavsIbmSVCgYxkXLxxR3ZvCX79JOglzdEy4JXMb98lq4hPxUbLr77nP0UOGf4rcMU+s1pUA==} peerDependencies: '@types/react': '*' @@ -1277,12 +1282,12 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.4 + '@babel/runtime': 7.24.5 '@types/react': 18.0.28 - react: 18.2.0 + react: 18.3.1 dev: false - /@radix-ui/react-focus-scope@1.0.4(@types/react-dom@18.0.11)(@types/react@18.0.28)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-focus-scope@1.0.4(@types/react-dom@18.0.11)(@types/react@18.0.28)(react-dom@18.2.0)(react@18.3.1): resolution: {integrity: sha512-sL04Mgvf+FmyvZeYfNu1EPAaaxD+aw7cYeIB9L9Fvq8+urhltTRaEo5ysKOpHuKPclsZcSUMKlN05x4u+CINpA==} peerDependencies: '@types/react': '*' @@ -1295,17 +1300,17 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.4 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.28)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.28)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.28)(react@18.2.0) + '@babel/runtime': 7.24.5 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.28)(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.28)(react-dom@18.2.0)(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.28)(react@18.3.1) '@types/react': 18.0.28 '@types/react-dom': 18.0.11 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) + react: 18.3.1 + react-dom: 18.2.0(react@18.3.1) dev: false - /@radix-ui/react-id@1.0.1(@types/react@18.0.28)(react@18.2.0): + /@radix-ui/react-id@1.0.1(@types/react@18.0.28)(react@18.3.1): resolution: {integrity: sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ==} peerDependencies: '@types/react': '*' @@ -1314,13 +1319,13 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.4 - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.0.28)(react@18.2.0) + '@babel/runtime': 7.24.5 + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.0.28)(react@18.3.1) '@types/react': 18.0.28 - react: 18.2.0 + react: 18.3.1 dev: false - /@radix-ui/react-popover@1.0.7(@types/react-dom@18.0.11)(@types/react@18.0.28)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-popover@1.0.7(@types/react-dom@18.0.11)(@types/react@18.0.28)(react-dom@18.2.0)(react@18.3.1): resolution: {integrity: sha512-shtvVnlsxT6faMnK/a7n0wptwBD23xc1Z5mdrtKLwVEfsEMXodS0r5s0/g5P0hX//EKYZS2sxUjqfzlg52ZSnQ==} peerDependencies: '@types/react': '*' @@ -1333,29 +1338,29 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.4 + '@babel/runtime': 7.24.5 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.28)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.0.28)(react@18.2.0) - '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.0.11)(@types/react@18.0.28)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.0.28)(react@18.2.0) - '@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@18.0.11)(@types/react@18.0.28)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-id': 1.0.1(@types/react@18.0.28)(react@18.2.0) - '@radix-ui/react-popper': 1.1.3(@types/react-dom@18.0.11)(@types/react@18.0.28)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.0.11)(@types/react@18.0.28)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.0.11)(@types/react@18.0.28)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.28)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-slot': 1.0.2(@types/react@18.0.28)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.0.28)(react@18.2.0) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.28)(react@18.3.1) + '@radix-ui/react-context': 1.0.1(@types/react@18.0.28)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.0.11)(@types/react@18.0.28)(react-dom@18.2.0)(react@18.3.1) + '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.0.28)(react@18.3.1) + '@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@18.0.11)(@types/react@18.0.28)(react-dom@18.2.0)(react@18.3.1) + '@radix-ui/react-id': 1.0.1(@types/react@18.0.28)(react@18.3.1) + '@radix-ui/react-popper': 1.1.3(@types/react-dom@18.0.11)(@types/react@18.0.28)(react-dom@18.2.0)(react@18.3.1) + '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.0.11)(@types/react@18.0.28)(react-dom@18.2.0)(react@18.3.1) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.0.11)(@types/react@18.0.28)(react-dom@18.2.0)(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.28)(react-dom@18.2.0)(react@18.3.1) + '@radix-ui/react-slot': 1.0.2(@types/react@18.0.28)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.0.28)(react@18.3.1) '@types/react': 18.0.28 '@types/react-dom': 18.0.11 aria-hidden: 1.2.4 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - react-remove-scroll: 2.5.5(@types/react@18.0.28)(react@18.2.0) + react: 18.3.1 + react-dom: 18.2.0(react@18.3.1) + react-remove-scroll: 2.5.5(@types/react@18.0.28)(react@18.3.1) dev: false - /@radix-ui/react-popper@1.1.3(@types/react-dom@18.0.11)(@types/react@18.0.28)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-popper@1.1.3(@types/react-dom@18.0.11)(@types/react@18.0.28)(react-dom@18.2.0)(react@18.3.1): resolution: {integrity: sha512-cKpopj/5RHZWjrbF2846jBNacjQVwkP068DfmgrNJXpvVWrOvlAmE9xSiy5OqeE+Gi8D9fP+oDhUnPqNMY8/5w==} peerDependencies: '@types/react': '*' @@ -1368,24 +1373,24 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.4 - '@floating-ui/react-dom': 2.0.8(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-arrow': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.28)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.28)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.0.28)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.28)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.28)(react@18.2.0) - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.0.28)(react@18.2.0) - '@radix-ui/react-use-rect': 1.0.1(@types/react@18.0.28)(react@18.2.0) - '@radix-ui/react-use-size': 1.0.1(@types/react@18.0.28)(react@18.2.0) + '@babel/runtime': 7.24.5 + '@floating-ui/react-dom': 2.0.9(react-dom@18.2.0)(react@18.3.1) + '@radix-ui/react-arrow': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.28)(react-dom@18.2.0)(react@18.3.1) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.28)(react@18.3.1) + '@radix-ui/react-context': 1.0.1(@types/react@18.0.28)(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.28)(react-dom@18.2.0)(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.28)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.0.28)(react@18.3.1) + '@radix-ui/react-use-rect': 1.0.1(@types/react@18.0.28)(react@18.3.1) + '@radix-ui/react-use-size': 1.0.1(@types/react@18.0.28)(react@18.3.1) '@radix-ui/rect': 1.0.1 '@types/react': 18.0.28 '@types/react-dom': 18.0.11 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) + react: 18.3.1 + react-dom: 18.2.0(react@18.3.1) dev: false - /@radix-ui/react-portal@1.0.4(@types/react-dom@18.0.11)(@types/react@18.0.28)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-portal@1.0.4(@types/react-dom@18.0.11)(@types/react@18.0.28)(react-dom@18.2.0)(react@18.3.1): resolution: {integrity: sha512-Qki+C/EuGUVCQTOTD5vzJzJuMUlewbzuKyUy+/iHM2uwGiru9gZeBJtHAPKAEkB5KWGi9mP/CHKcY0wt1aW45Q==} peerDependencies: '@types/react': '*' @@ -1398,15 +1403,15 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.4 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.28)(react-dom@18.2.0)(react@18.2.0) + '@babel/runtime': 7.24.5 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.28)(react-dom@18.2.0)(react@18.3.1) '@types/react': 18.0.28 '@types/react-dom': 18.0.11 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) + react: 18.3.1 + react-dom: 18.2.0(react@18.3.1) dev: false - /@radix-ui/react-presence@1.0.1(@types/react-dom@18.0.11)(@types/react@18.0.28)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-presence@1.0.1(@types/react-dom@18.0.11)(@types/react@18.0.28)(react-dom@18.2.0)(react@18.3.1): resolution: {integrity: sha512-UXLW4UAbIY5ZjcvzjfRFo5gxva8QirC9hF7wRE4U5gz+TP0DbRk+//qyuAQ1McDxBt1xNMBTaciFGvEmJvAZCg==} peerDependencies: '@types/react': '*' @@ -1419,16 +1424,16 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.4 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.28)(react@18.2.0) - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.0.28)(react@18.2.0) + '@babel/runtime': 7.24.5 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.28)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.0.28)(react@18.3.1) '@types/react': 18.0.28 '@types/react-dom': 18.0.11 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) + react: 18.3.1 + react-dom: 18.2.0(react@18.3.1) dev: false - /@radix-ui/react-primitive@1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.28)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-primitive@1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.28)(react-dom@18.2.0)(react@18.3.1): resolution: {integrity: sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==} peerDependencies: '@types/react': '*' @@ -1441,15 +1446,15 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.4 - '@radix-ui/react-slot': 1.0.2(@types/react@18.0.28)(react@18.2.0) + '@babel/runtime': 7.24.5 + '@radix-ui/react-slot': 1.0.2(@types/react@18.0.28)(react@18.3.1) '@types/react': 18.0.28 '@types/react-dom': 18.0.11 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) + react: 18.3.1 + react-dom: 18.2.0(react@18.3.1) dev: false - /@radix-ui/react-slot@1.0.2(@types/react@18.0.28)(react@18.2.0): + /@radix-ui/react-slot@1.0.2(@types/react@18.0.28)(react@18.3.1): resolution: {integrity: sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==} peerDependencies: '@types/react': '*' @@ -1458,13 +1463,13 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.4 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.28)(react@18.2.0) + '@babel/runtime': 7.24.5 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.28)(react@18.3.1) '@types/react': 18.0.28 - react: 18.2.0 + react: 18.3.1 dev: false - /@radix-ui/react-use-callback-ref@1.0.1(@types/react@18.0.28)(react@18.2.0): + /@radix-ui/react-use-callback-ref@1.0.1(@types/react@18.0.28)(react@18.3.1): resolution: {integrity: sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==} peerDependencies: '@types/react': '*' @@ -1473,12 +1478,12 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.4 + '@babel/runtime': 7.24.5 '@types/react': 18.0.28 - react: 18.2.0 + react: 18.3.1 dev: false - /@radix-ui/react-use-controllable-state@1.0.1(@types/react@18.0.28)(react@18.2.0): + /@radix-ui/react-use-controllable-state@1.0.1(@types/react@18.0.28)(react@18.3.1): resolution: {integrity: sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==} peerDependencies: '@types/react': '*' @@ -1487,13 +1492,13 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.4 - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.28)(react@18.2.0) + '@babel/runtime': 7.24.5 + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.28)(react@18.3.1) '@types/react': 18.0.28 - react: 18.2.0 + react: 18.3.1 dev: false - /@radix-ui/react-use-escape-keydown@1.0.3(@types/react@18.0.28)(react@18.2.0): + /@radix-ui/react-use-escape-keydown@1.0.3(@types/react@18.0.28)(react@18.3.1): resolution: {integrity: sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==} peerDependencies: '@types/react': '*' @@ -1502,13 +1507,13 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.4 - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.28)(react@18.2.0) + '@babel/runtime': 7.24.5 + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.28)(react@18.3.1) '@types/react': 18.0.28 - react: 18.2.0 + react: 18.3.1 dev: false - /@radix-ui/react-use-layout-effect@1.0.1(@types/react@18.0.28)(react@18.2.0): + /@radix-ui/react-use-layout-effect@1.0.1(@types/react@18.0.28)(react@18.3.1): resolution: {integrity: sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==} peerDependencies: '@types/react': '*' @@ -1517,12 +1522,12 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.4 + '@babel/runtime': 7.24.5 '@types/react': 18.0.28 - react: 18.2.0 + react: 18.3.1 dev: false - /@radix-ui/react-use-rect@1.0.1(@types/react@18.0.28)(react@18.2.0): + /@radix-ui/react-use-rect@1.0.1(@types/react@18.0.28)(react@18.3.1): resolution: {integrity: sha512-Cq5DLuSiuYVKNU8orzJMbl15TXilTnJKUCltMVQg53BQOF1/C5toAaGrowkgksdBQ9H+SRL23g0HDmg9tvmxXw==} peerDependencies: '@types/react': '*' @@ -1531,13 +1536,13 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.4 + '@babel/runtime': 7.24.5 '@radix-ui/rect': 1.0.1 '@types/react': 18.0.28 - react: 18.2.0 + react: 18.3.1 dev: false - /@radix-ui/react-use-size@1.0.1(@types/react@18.0.28)(react@18.2.0): + /@radix-ui/react-use-size@1.0.1(@types/react@18.0.28)(react@18.3.1): resolution: {integrity: sha512-ibay+VqrgcaI6veAojjofPATwledXiSmX+C0KrBk/xgpX9rBzPV3OsfwlhQdUOFbh+LKQorLYT+xTXW9V8yd0g==} peerDependencies: '@types/react': '*' @@ -1546,16 +1551,16 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.4 - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.0.28)(react@18.2.0) + '@babel/runtime': 7.24.5 + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.0.28)(react@18.3.1) '@types/react': 18.0.28 - react: 18.2.0 + react: 18.3.1 dev: false /@radix-ui/rect@1.0.1: resolution: {integrity: sha512-fyrgCaedtvMg9NK3en0pnOYJdtfwxUcNolezkNPUsoX57X8oQk+NkqcvzHXD2uKNij6GXmWU9NDru2IWjrO4BQ==} dependencies: - '@babel/runtime': 7.24.4 + '@babel/runtime': 7.24.5 dev: false /@remirror/core-constants@2.0.2: @@ -1587,8 +1592,8 @@ packages: tslib: 2.6.2 dev: false - /@swc/helpers@0.5.10: - resolution: {integrity: sha512-CU+RF9FySljn7HVSkkjiB84hWkvTaI3rtLvF433+jRSBL2hMu3zX5bGhHS8C80SM++h4xy8hBSnUHFQHmRXSBw==} + /@swc/helpers@0.5.11: + resolution: {integrity: sha512-YNlnKRWF2sVojTpIyzwou9XoTNbzbzONwRhOoniEioF1AtaitTvVZblaQRrAzChWQ1bLYyYSWzM18y4WwgzJ+A==} dependencies: tslib: 2.6.2 dev: false @@ -1608,8 +1613,8 @@ packages: tailwindcss: 3.4.3 dev: true - /@tailwindcss/typography@0.5.12(tailwindcss@3.4.3): - resolution: {integrity: sha512-CNwpBpconcP7ppxmuq3qvaCxiRWnbhANpY/ruH4L5qs2GCiVDJXde/pjj2HWPV1+Q4G9+V/etrwUYopdcjAlyg==} + /@tailwindcss/typography@0.5.13(tailwindcss@3.4.3): + resolution: {integrity: sha512-ADGcJ8dX21dVVHIwTRgzrcunY6YY9uSlAHHGVKvkA+vLc5qLwEszvKts40lx7z0qc4clpjclwLeK5rVCV2P/uw==} peerDependencies: tailwindcss: '>=3.0.0 || insiders' dependencies: @@ -1620,288 +1625,288 @@ packages: tailwindcss: 3.4.3 dev: true - /@tanstack/react-virtual@3.3.0(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-QFxmTSZBniq15S0vSZ55P4ToXquMXwJypPXyX/ux7sYo6a2FX3/zWoRLLc4eIOGWTjvzqcIVNKhcuFb+OZL3aQ==} + /@tanstack/react-virtual@3.5.0(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-rtvo7KwuIvqK9zb0VZ5IL7fiJAEnG+0EiFZz8FUOs+2mhGqdGmjKIaT1XU7Zq0eFqL0jonLlhbayJI/J2SA/Bw==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: - '@tanstack/virtual-core': 3.3.0 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) + '@tanstack/virtual-core': 3.5.0 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) dev: false - /@tanstack/virtual-core@3.3.0: - resolution: {integrity: sha512-A0004OAa1FcUkPHeeGoKgBrAgjH+uHdDPrw1L7RpkwnODYqRvoilqsHPs8cyTjMg1byZBbiNpQAq2TlFLIaQag==} + /@tanstack/virtual-core@3.5.0: + resolution: {integrity: sha512-KnPRCkQTyqhanNC0K63GBG3wA8I+D1fQuVnAvcBF8f13akOKeQp1gSbu6f77zCxhEk727iV5oQnbHLYzHrECLg==} dev: false - /@tiptap/core@2.3.0(@tiptap/pm@2.3.0): - resolution: {integrity: sha512-Gk2JN3i5CMkYGmsbyFI7cBUftWa+F7QYmeCLTWfbuy+hCM2OBsnYVKxhggFPGXRL5KLBEgBWeCeWMHfIw3B2MA==} + /@tiptap/core@2.3.1(@tiptap/pm@2.3.1): + resolution: {integrity: sha512-ycpQlmczAOc05TgB5sc3RUTEEBXAVmS8MR9PqQzg96qidaRfVkgE+2w4k7t83PMHl2duC0MGqOCy96pLYwSpeg==} peerDependencies: '@tiptap/pm': ^2.0.0 dependencies: - '@tiptap/pm': 2.3.0 + '@tiptap/pm': 2.3.1 dev: false - /@tiptap/extension-blockquote@2.3.0(@tiptap/core@2.3.0): - resolution: {integrity: sha512-Cztt77t7f+f0fuPy+FWUL8rKTIpcdsVT0z0zYQFFafvGaom0ZALQSOdTR/q+Kle9I4DaCMO3/Q0mwax/D4k4+A==} + /@tiptap/extension-blockquote@2.3.1(@tiptap/core@2.3.1): + resolution: {integrity: sha512-eyw3/Zn/XbIP2Yo11iE4vYcJ0471aBPMLD56YOyUC0PIF7D5tvPutDesSg95R+BDa5Tq/Id2zV5pZerw1dwwOQ==} peerDependencies: '@tiptap/core': ^2.0.0 dependencies: - '@tiptap/core': 2.3.0(@tiptap/pm@2.3.0) + '@tiptap/core': 2.3.1(@tiptap/pm@2.3.1) dev: false - /@tiptap/extension-bold@2.3.0(@tiptap/core@2.3.0): - resolution: {integrity: sha512-SzkbJibHXFNU7TRaAebTtwbXUEhGZ8+MhlBn12aQ4QhdjNtFpQwKXQPyYeDyZGcyiOFgtFTb+WIfCGm8ZX0Fpw==} + /@tiptap/extension-bold@2.3.1(@tiptap/core@2.3.1): + resolution: {integrity: sha512-szHDXKOQfrlCzsys401zBtPWE5gyY3LcpPlrn2zBRrBmzU2U/1A7Y3HkoqZo3SSrTY37eG1Vr2J2aHySK6Uj/w==} peerDependencies: '@tiptap/core': ^2.0.0 dependencies: - '@tiptap/core': 2.3.0(@tiptap/pm@2.3.0) + '@tiptap/core': 2.3.1(@tiptap/pm@2.3.1) dev: false - /@tiptap/extension-bubble-menu@2.3.0(@tiptap/core@2.3.0)(@tiptap/pm@2.3.0): - resolution: {integrity: sha512-dqyfQ8idTlhapvt0fxCGvkyjw92pBEwPqmkJ01h3EE8wTh53j0ytOHyMSf1KBuzardxpd8Yya3zlrAcR0Z3DlQ==} + /@tiptap/extension-bubble-menu@2.3.1(@tiptap/core@2.3.1)(@tiptap/pm@2.3.1): + resolution: {integrity: sha512-6PGrk65f0eXHcCEe6A2/GpooMsD6RPZY1kWSSWUNfklJO54R/8uAtsSVIBr7wQ34pvrYkNaluRUrDWUokWyBOQ==} peerDependencies: '@tiptap/core': ^2.0.0 '@tiptap/pm': ^2.0.0 dependencies: - '@tiptap/core': 2.3.0(@tiptap/pm@2.3.0) - '@tiptap/pm': 2.3.0 + '@tiptap/core': 2.3.1(@tiptap/pm@2.3.1) + '@tiptap/pm': 2.3.1 tippy.js: 6.3.7 dev: false - /@tiptap/extension-bullet-list@2.3.0(@tiptap/core@2.3.0): - resolution: {integrity: sha512-4nU4vJ5FjRDLqHm085vYAkuo68UK84Wl6CDSjm7sPVcu0FvQX02Okqt65azoSYQeS1SSSd5qq9YZuGWcYdp4Cw==} + /@tiptap/extension-bullet-list@2.3.1(@tiptap/core@2.3.1): + resolution: {integrity: sha512-pif0AB4MUoA1Xm26y1ovH7vfXaV19T9EEQH4tgN2g2eTfdFnQWDmKI0r3XRxudtg40RstBJRa81N9xEO79o8ag==} peerDependencies: '@tiptap/core': ^2.0.0 dependencies: - '@tiptap/core': 2.3.0(@tiptap/pm@2.3.0) + '@tiptap/core': 2.3.1(@tiptap/pm@2.3.1) dev: false - /@tiptap/extension-code-block@2.3.0(@tiptap/core@2.3.0)(@tiptap/pm@2.3.0): - resolution: {integrity: sha512-+Ne6PRBwQt70Pp8aW2PewaEy4bHrNYn4N+y8MObsFtqLutXBz4nXnsXWiNYFQZwzlUY+CHG4XS73mx8oMOFfDw==} + /@tiptap/extension-code-block@2.3.1(@tiptap/core@2.3.1)(@tiptap/pm@2.3.1): + resolution: {integrity: sha512-rM7T+DWuOShariPl5vknNFMesPOFQrhMjmms9Ql636sSxOcnkb0d39NFbUpI/r5noFDC6Km+lAebF0Rx2MxpKQ==} peerDependencies: '@tiptap/core': ^2.0.0 '@tiptap/pm': ^2.0.0 dependencies: - '@tiptap/core': 2.3.0(@tiptap/pm@2.3.0) - '@tiptap/pm': 2.3.0 + '@tiptap/core': 2.3.1(@tiptap/pm@2.3.1) + '@tiptap/pm': 2.3.1 dev: false - /@tiptap/extension-code@2.3.0(@tiptap/core@2.3.0): - resolution: {integrity: sha512-O2FZmosiIRoVbW82fZy8xW4h4gb2xAzxWzHEcsHPlwCbE3vYvcBMmbkQ5p+33eRtuRQInzl3Q/cwupv9ctIepQ==} + /@tiptap/extension-code@2.3.1(@tiptap/core@2.3.1): + resolution: {integrity: sha512-bVX0EnDZoRXnoA7dyoZe7w2gdRjxmFEcsatHLkcr3R3x4k9oSgZXLe1C2jGbjJWr4j32tYXZ1cpKte6f1WUKzg==} peerDependencies: '@tiptap/core': ^2.0.0 dependencies: - '@tiptap/core': 2.3.0(@tiptap/pm@2.3.0) + '@tiptap/core': 2.3.1(@tiptap/pm@2.3.1) dev: false - /@tiptap/extension-color@2.3.0(@tiptap/core@2.3.0)(@tiptap/extension-text-style@2.3.0): - resolution: {integrity: sha512-rqtdTaGawPZSRszwC/BlkJTF1diosIBBRSO5/YCRHT7CfGJNJyomL3eFREynXLKnXZ69SMceDh6yU6B54uTHXQ==} + /@tiptap/extension-color@2.3.1(@tiptap/core@2.3.1)(@tiptap/extension-text-style@2.3.1): + resolution: {integrity: sha512-a127akyS3nMbcLKzZ02l/rHUP5BlCmbma6vYJNjRk6Srd1DlhXCIynMZJr7Bzgngq9KNLGQha2uxbPr7me3xAA==} peerDependencies: '@tiptap/core': ^2.0.0 '@tiptap/extension-text-style': ^2.0.0 dependencies: - '@tiptap/core': 2.3.0(@tiptap/pm@2.3.0) - '@tiptap/extension-text-style': 2.3.0(@tiptap/core@2.3.0) + '@tiptap/core': 2.3.1(@tiptap/pm@2.3.1) + '@tiptap/extension-text-style': 2.3.1(@tiptap/core@2.3.1) dev: false - /@tiptap/extension-document@2.3.0(@tiptap/core@2.3.0): - resolution: {integrity: sha512-WC55SMrtlsNOnHXpzbXDzJOp7eKmZV0rXooKmvCDqoiLO/DKpyQXyF+0UHfcRPmUAi2GWFPaer7+p1H9xzcjXg==} + /@tiptap/extension-document@2.3.1(@tiptap/core@2.3.1): + resolution: {integrity: sha512-uWYbzAV95JnetFBduWRI9n2QbQfmznQ7I6XzfZxuTAO2KcWGvHPBS7F00COO9Y67FZAPMbuQ1njtCJK0nClOPw==} peerDependencies: '@tiptap/core': ^2.0.0 dependencies: - '@tiptap/core': 2.3.0(@tiptap/pm@2.3.0) + '@tiptap/core': 2.3.1(@tiptap/pm@2.3.1) dev: false - /@tiptap/extension-dropcursor@2.3.0(@tiptap/core@2.3.0)(@tiptap/pm@2.3.0): - resolution: {integrity: sha512-WWxxGQPWdbzxyYP6jtBYSq4wMRhINhI0wBC8pgkxTVwCIWftMuYj++FP4LLIpuWgj78PWApuoM0QQxk4Lj7FOw==} + /@tiptap/extension-dropcursor@2.3.1(@tiptap/core@2.3.1)(@tiptap/pm@2.3.1): + resolution: {integrity: sha512-xDG1Z01ftRI4mIOY+bPuG53xZ9FfVd6hzjNchwFHRlU3E+/2O+DsEBy/pJuHmpnFx1B/1ANbssoidGvK3LIPYw==} peerDependencies: '@tiptap/core': ^2.0.0 '@tiptap/pm': ^2.0.0 dependencies: - '@tiptap/core': 2.3.0(@tiptap/pm@2.3.0) - '@tiptap/pm': 2.3.0 + '@tiptap/core': 2.3.1(@tiptap/pm@2.3.1) + '@tiptap/pm': 2.3.1 dev: false - /@tiptap/extension-floating-menu@2.3.0(@tiptap/core@2.3.0)(@tiptap/pm@2.3.0): - resolution: {integrity: sha512-bNY43/yU/+wGfmk2eDV7EPDAN/akbC+YnSKTA5VPJADzscvlrL2HlQrxbd/STIdlwKqdPU5MokcvCChhfZ4f6w==} + /@tiptap/extension-floating-menu@2.3.1(@tiptap/core@2.3.1)(@tiptap/pm@2.3.1): + resolution: {integrity: sha512-3+dONthHRMFzJjLF9JtRbm9u4XJs8txCoChsZjwD0wBf8XfPtUGZQn9W5xNJG+5pozrOQhj9KC1UZL4tuvSRkg==} peerDependencies: '@tiptap/core': ^2.0.0 '@tiptap/pm': ^2.0.0 dependencies: - '@tiptap/core': 2.3.0(@tiptap/pm@2.3.0) - '@tiptap/pm': 2.3.0 + '@tiptap/core': 2.3.1(@tiptap/pm@2.3.1) + '@tiptap/pm': 2.3.1 tippy.js: 6.3.7 dev: false - /@tiptap/extension-gapcursor@2.3.0(@tiptap/core@2.3.0)(@tiptap/pm@2.3.0): - resolution: {integrity: sha512-OxcXcfD0uzNcXdXu2ZpXFAtXIsgK2MBHvFUs0t0gxtcL/t43pTOQBLy+29Ei30BxpwLghtX8jQ6IDzMiybq/sA==} + /@tiptap/extension-gapcursor@2.3.1(@tiptap/core@2.3.1)(@tiptap/pm@2.3.1): + resolution: {integrity: sha512-jhMw0LtEV/HVovUDRdoH0QLnBWLDyw4Su7UZ0bkMtsnCO9MujLKths3SKsPstuAckZQKR5smokEytxDHH0aglg==} peerDependencies: '@tiptap/core': ^2.0.0 '@tiptap/pm': ^2.0.0 dependencies: - '@tiptap/core': 2.3.0(@tiptap/pm@2.3.0) - '@tiptap/pm': 2.3.0 + '@tiptap/core': 2.3.1(@tiptap/pm@2.3.1) + '@tiptap/pm': 2.3.1 dev: false - /@tiptap/extension-hard-break@2.3.0(@tiptap/core@2.3.0): - resolution: {integrity: sha512-9pXi69SzLabbjY5KZ54UKzu7HAHTla9aYZKH56VatOAiJOPKJppFbU2/NfJwGzDrEtfOiDqr3dYbUDF3RuCFoQ==} + /@tiptap/extension-hard-break@2.3.1(@tiptap/core@2.3.1): + resolution: {integrity: sha512-HO47iS2KQJLxhZM4ghZz5t2qgESH6D/mKJbjO7jM0eCYEyUfPyYJwV2VgjQP7x+1axcvsrhpzkJrjSg5+KqtQQ==} peerDependencies: '@tiptap/core': ^2.0.0 dependencies: - '@tiptap/core': 2.3.0(@tiptap/pm@2.3.0) + '@tiptap/core': 2.3.1(@tiptap/pm@2.3.1) dev: false - /@tiptap/extension-heading@2.3.0(@tiptap/core@2.3.0): - resolution: {integrity: sha512-YcZoUYfqb0nohoPgem4f8mjn5OqDomFrbJiC9VRHUOCIuEu+aJEYwp8mmdkLnS3f+LRCZ6G76cJJ50lkzSAZRw==} + /@tiptap/extension-heading@2.3.1(@tiptap/core@2.3.1): + resolution: {integrity: sha512-epdIrg1xpuk5ApnNyM/NJO1dhVZgD7kDPem6QH4fug5UJtCueze942yNzUhCuvckmIegfdferAb1p4ug4674ig==} peerDependencies: '@tiptap/core': ^2.0.0 dependencies: - '@tiptap/core': 2.3.0(@tiptap/pm@2.3.0) + '@tiptap/core': 2.3.1(@tiptap/pm@2.3.1) dev: false - /@tiptap/extension-highlight@2.3.0(@tiptap/core@2.3.0): - resolution: {integrity: sha512-An/tzoCMbugdaU02ORJeJ74DZI5pf9oqwX9RoYPQ5K81Ia3jG52BBVtFjGq/j10Tr4iOuCmOuE+PzNtnzz3UIw==} + /@tiptap/extension-highlight@2.3.1(@tiptap/core@2.3.1): + resolution: {integrity: sha512-BWetu1jqHVsl6bZMaZM8VZYtHC6JBM2CRgI7R8GnKKDM8aSxK0P7CHCZLs4dGwOPlFVjE/nCjwdKd+GUUkeaQg==} peerDependencies: '@tiptap/core': ^2.0.0 dependencies: - '@tiptap/core': 2.3.0(@tiptap/pm@2.3.0) + '@tiptap/core': 2.3.1(@tiptap/pm@2.3.1) dev: false - /@tiptap/extension-history@2.3.0(@tiptap/core@2.3.0)(@tiptap/pm@2.3.0): - resolution: {integrity: sha512-EF5Oq9fe/VBzU1Lsow2ubOlx1e1r4OQT1WUPGsRnL7pr94GH1Skpk7/hs9COJ9K6kP3Ebt42XjP0JEQodR58YA==} + /@tiptap/extension-history@2.3.1(@tiptap/core@2.3.1)(@tiptap/pm@2.3.1): + resolution: {integrity: sha512-m+W6qTP4V0PHqqKnXw/ma18a62O0Cqp5FDWtSarOuxx6W4FpVr4A3Uxfbp4RigZEYanLcX4UJOWL4nWsFdYWHw==} peerDependencies: '@tiptap/core': ^2.0.0 '@tiptap/pm': ^2.0.0 dependencies: - '@tiptap/core': 2.3.0(@tiptap/pm@2.3.0) - '@tiptap/pm': 2.3.0 + '@tiptap/core': 2.3.1(@tiptap/pm@2.3.1) + '@tiptap/pm': 2.3.1 dev: false - /@tiptap/extension-horizontal-rule@2.3.0(@tiptap/core@2.3.0)(@tiptap/pm@2.3.0): - resolution: {integrity: sha512-4DB8GU3uuDzzyqUmONIb3CHXcQ6Nuy4mHHkFSmUyEjg1i5eMQU5H7S6mNvZbltcJB2ImgCSwSMlj1kVN3MLIPg==} + /@tiptap/extension-horizontal-rule@2.3.1(@tiptap/core@2.3.1)(@tiptap/pm@2.3.1): + resolution: {integrity: sha512-IPgCFkiT6Y5BSFBQMTXS6gq2Ust6otMzRwddoI0RC8tl/tMftFBEPqYKADWVQeQb4C6AQydRjUbmAwHpBH31Eg==} peerDependencies: '@tiptap/core': ^2.0.0 '@tiptap/pm': ^2.0.0 dependencies: - '@tiptap/core': 2.3.0(@tiptap/pm@2.3.0) - '@tiptap/pm': 2.3.0 + '@tiptap/core': 2.3.1(@tiptap/pm@2.3.1) + '@tiptap/pm': 2.3.1 dev: false - /@tiptap/extension-image@2.3.0(@tiptap/core@2.3.0): - resolution: {integrity: sha512-v1fLEEzrfXWavsLFUEkTiYYxwm1WDNrjuUriU5tG2Jv22NL1BL4BLVbZbGdkAk+qHWy8QWszrDJbcgGh2VNCoQ==} + /@tiptap/extension-image@2.3.1(@tiptap/core@2.3.1): + resolution: {integrity: sha512-3RhVBySQA2LbftWhtZ0p2Mqf9lihNAYs3uQ3iyaB+BYViQiHyVpui09Wny0BwNy0oV6ryUWjBifko2Z1AZgANw==} peerDependencies: '@tiptap/core': ^2.0.0 dependencies: - '@tiptap/core': 2.3.0(@tiptap/pm@2.3.0) + '@tiptap/core': 2.3.1(@tiptap/pm@2.3.1) dev: false - /@tiptap/extension-italic@2.3.0(@tiptap/core@2.3.0): - resolution: {integrity: sha512-jdFjLjdt5JtPlGMpoS6TEq5rznjbAYVlPwcw5VkYENVIYIGIR1ylIw2JwK1nUEsQ+OgYwVxHLejcUXWG1dCi2g==} + /@tiptap/extension-italic@2.3.1(@tiptap/core@2.3.1): + resolution: {integrity: sha512-yEAn0dT1LH1vAULmZv3L1fs7M1Fn/8wZCw7LDGw2/E+VYbDeXgy7XwMPyzhrzV1oV9Z+3gugCbYV0IJ4PBwudA==} peerDependencies: '@tiptap/core': ^2.0.0 dependencies: - '@tiptap/core': 2.3.0(@tiptap/pm@2.3.0) + '@tiptap/core': 2.3.1(@tiptap/pm@2.3.1) dev: false - /@tiptap/extension-link@2.3.0(@tiptap/core@2.3.0)(@tiptap/pm@2.3.0): - resolution: {integrity: sha512-CnJAlV0ZOdEhKmDfYKuHJVG8g79iCFQ85cX/CROTWyuMfXz9uhj2rLpZ6nfidVbonqxAhQp7NAIr2y+Fj5/53A==} + /@tiptap/extension-link@2.3.1(@tiptap/core@2.3.1)(@tiptap/pm@2.3.1): + resolution: {integrity: sha512-VE54iLwWcPldqZl7a4E/pmGD7waCWS//VT8jxTuFUroTouIzT+OjB9DQAXMkrRiaz+na3I8Jie1yBE+zYB0gvQ==} peerDependencies: '@tiptap/core': ^2.0.0 '@tiptap/pm': ^2.0.0 dependencies: - '@tiptap/core': 2.3.0(@tiptap/pm@2.3.0) - '@tiptap/pm': 2.3.0 + '@tiptap/core': 2.3.1(@tiptap/pm@2.3.1) + '@tiptap/pm': 2.3.1 linkifyjs: 4.1.3 dev: false - /@tiptap/extension-list-item@2.3.0(@tiptap/core@2.3.0): - resolution: {integrity: sha512-mHU+IuRa56OT6YCtxf5Z7OSUrbWdKhGCEX7RTrteDVs5oMB6W3oF9j88M5qQmZ1WDcxvQhAOoXctnMt6eX9zcA==} + /@tiptap/extension-list-item@2.3.1(@tiptap/core@2.3.1): + resolution: {integrity: sha512-GyHLNoXVo9u29NVqijwZPBcv9MzXMGyIiQiO5FxRpuT4Ei4ZmsaJrJ2dmhO3KZhX0HdTSc65/omM2XBr6PDoLA==} peerDependencies: '@tiptap/core': ^2.0.0 dependencies: - '@tiptap/core': 2.3.0(@tiptap/pm@2.3.0) + '@tiptap/core': 2.3.1(@tiptap/pm@2.3.1) dev: false - /@tiptap/extension-ordered-list@2.3.0(@tiptap/core@2.3.0): - resolution: {integrity: sha512-gkf0tltXjlUj0cqyfDV2r7xy9YPKtcVSWwlCPun6OOi0KzKFiAMqQpA9hy2W6gJ+KCp8+KNRMClZOfH4TnnBfg==} + /@tiptap/extension-ordered-list@2.3.1(@tiptap/core@2.3.1): + resolution: {integrity: sha512-+6I76b7fu0FghUtzB0LyIC5GB0xfrpAKtXjbrmeUGsOEL7jxKsE6+A5RoTrgQTfuP7oItdCZGTSC/8WtGbtEMg==} peerDependencies: '@tiptap/core': ^2.0.0 dependencies: - '@tiptap/core': 2.3.0(@tiptap/pm@2.3.0) + '@tiptap/core': 2.3.1(@tiptap/pm@2.3.1) dev: false - /@tiptap/extension-paragraph@2.3.0(@tiptap/core@2.3.0): - resolution: {integrity: sha512-peCpA7DFqkd0cHb+cHv4YHNoMsXG8tKFNJlCHpLmsZWl2hWmpKgKmUrXAUfzjcFSvkZxn0xYc5oWbqUgg+2LzA==} + /@tiptap/extension-paragraph@2.3.1(@tiptap/core@2.3.1): + resolution: {integrity: sha512-bHkkHU012clwCrpzmEHGuF8fwLuFL3x9MJ17wnhwanoIM3MG6ZCdeb9copjDvUpZXLKTUYKotoPGNhxmOrP2bQ==} peerDependencies: '@tiptap/core': ^2.0.0 dependencies: - '@tiptap/core': 2.3.0(@tiptap/pm@2.3.0) + '@tiptap/core': 2.3.1(@tiptap/pm@2.3.1) dev: false - /@tiptap/extension-placeholder@2.0.3(@tiptap/core@2.3.0)(@tiptap/pm@2.3.0): + /@tiptap/extension-placeholder@2.0.3(@tiptap/core@2.3.1)(@tiptap/pm@2.3.1): resolution: {integrity: sha512-Z42jo0termRAf0S0L8oxrts94IWX5waU4isS2CUw8xCUigYyCFslkhQXkWATO1qRbjNFLKN2C9qvCgGf4UeBrw==} peerDependencies: '@tiptap/core': ^2.0.0 '@tiptap/pm': ^2.0.0 dependencies: - '@tiptap/core': 2.3.0(@tiptap/pm@2.3.0) - '@tiptap/pm': 2.3.0 + '@tiptap/core': 2.3.1(@tiptap/pm@2.3.1) + '@tiptap/pm': 2.3.1 dev: false - /@tiptap/extension-strike@2.3.0(@tiptap/core@2.3.0): - resolution: {integrity: sha512-gOW4ALeH8gkJiUGGXVy/AOd5lAPTX0bzoOW1+sCLcTA7t8dluBW7M2ngNYxTEtlKqyv7aLfrgsYSiqucmmfSLw==} + /@tiptap/extension-strike@2.3.1(@tiptap/core@2.3.1): + resolution: {integrity: sha512-fpsVewcnaYk37TAF4JHkwH9O6Ml7JooF1v/Eh9p7PSItNcEfg/3RLlJL3c53RzLWdlunjgptM/M0alPV0Zyq4A==} peerDependencies: '@tiptap/core': ^2.0.0 dependencies: - '@tiptap/core': 2.3.0(@tiptap/pm@2.3.0) + '@tiptap/core': 2.3.1(@tiptap/pm@2.3.1) dev: false - /@tiptap/extension-task-item@2.3.0(@tiptap/core@2.3.0)(@tiptap/pm@2.3.0): - resolution: {integrity: sha512-WvQJiQSskI1dZLPgNH4hmYPW0HFyR/EHwogzVnY7XCn2/5isV0ewyaVuSfqTXvfEA/R5uCi95opwz61NFBc2nQ==} + /@tiptap/extension-task-item@2.3.1(@tiptap/core@2.3.1)(@tiptap/pm@2.3.1): + resolution: {integrity: sha512-iNVLiwJOTp9UulUS6tLk5NR85nNxtxqvaboOwPxoqcFaM/IkybTwZ/hMr9EqbAucigx85OowHKsdgPHIAr3xdw==} peerDependencies: '@tiptap/core': ^2.0.0 '@tiptap/pm': ^2.0.0 dependencies: - '@tiptap/core': 2.3.0(@tiptap/pm@2.3.0) - '@tiptap/pm': 2.3.0 + '@tiptap/core': 2.3.1(@tiptap/pm@2.3.1) + '@tiptap/pm': 2.3.1 dev: false - /@tiptap/extension-task-list@2.3.0(@tiptap/core@2.3.0): - resolution: {integrity: sha512-TBgqf4s3DpUV97w7AAj1WZDnZ3rZQ8B645d9bBayo4VfRzHCLefv5cVP/Ye9GA23T4FZoHNR+yIPrM7SfhkmPA==} + /@tiptap/extension-task-list@2.3.1(@tiptap/core@2.3.1): + resolution: {integrity: sha512-lu/27tetu2KYEjsaD8wyQ4rBthxrW8aRNeSv74jXJLPYN4aCtAl9C2bM7os+A2OYpidPBMbRjp8ZQoUnJ9auNA==} peerDependencies: '@tiptap/core': ^2.0.0 dependencies: - '@tiptap/core': 2.3.0(@tiptap/pm@2.3.0) + '@tiptap/core': 2.3.1(@tiptap/pm@2.3.1) dev: false - /@tiptap/extension-text-style@2.3.0(@tiptap/core@2.3.0): - resolution: {integrity: sha512-S+sQZqd+QtJjbZ0LOp0Krf0dlrdMx7BQL0sUNKPq8XXRMcfW0pEEFGIU/0VDFQCldLIuyd7lZ8zo5cjaAgskIA==} + /@tiptap/extension-text-style@2.3.1(@tiptap/core@2.3.1): + resolution: {integrity: sha512-eXtuf3AqcOv28BM0dO4lbBNnvM1fo4WWuT+/s1YV5Ovex3T5OS7PsPuR/9p5AD4NuX9QvNrV+eM02mcNzaTBWw==} peerDependencies: '@tiptap/core': ^2.0.0 dependencies: - '@tiptap/core': 2.3.0(@tiptap/pm@2.3.0) + '@tiptap/core': 2.3.1(@tiptap/pm@2.3.1) dev: false - /@tiptap/extension-text@2.3.0(@tiptap/core@2.3.0): - resolution: {integrity: sha512-zkudl0TyKRy/8vHtyo5dMzjBRD0HEUnsS8YOsjR4xwQq5EYUXleRgM1s6lb6Yms2sLUAZRWdDddoQ686iq4zQg==} + /@tiptap/extension-text@2.3.1(@tiptap/core@2.3.1): + resolution: {integrity: sha512-ZM+Bpty9jChEN/VjUP/fX1Fvoz0Z3YLdjj9+pFA0H7woli+TmxWY6yUUTA2SBDb2mJ52yNOUfRE/sYx6gkDuBQ==} peerDependencies: '@tiptap/core': ^2.0.0 dependencies: - '@tiptap/core': 2.3.0(@tiptap/pm@2.3.0) + '@tiptap/core': 2.3.1(@tiptap/pm@2.3.1) dev: false - /@tiptap/extension-underline@2.3.0(@tiptap/core@2.3.0): - resolution: {integrity: sha512-vmmcwCPmWqGKYHZevz50+bxrpHyiu5y6YZweAE476hn8Mud6vYg7RpkXgW8bjkCOky6UA51uelslSc0XrLE6uw==} + /@tiptap/extension-underline@2.3.1(@tiptap/core@2.3.1): + resolution: {integrity: sha512-xgLGr7bM5OAKagUKdL5dWxJHgwEp2fk3D5XCVUBwqgeOZtOFteoqPzb/2617w7qrP+9oM9zRjw6z27hM8YxyvQ==} peerDependencies: '@tiptap/core': ^2.0.0 dependencies: - '@tiptap/core': 2.3.0(@tiptap/pm@2.3.0) + '@tiptap/core': 2.3.1(@tiptap/pm@2.3.1) dev: false - /@tiptap/pm@2.3.0: - resolution: {integrity: sha512-4WYqShZBwDyReKvapC0nmeYdOtZbZ31y4MjolpKQaSD4I7kg/oZspC+byUGdvIRsNpRN7i2X0IyvdISKk8gw5Q==} + /@tiptap/pm@2.3.1: + resolution: {integrity: sha512-jdd1PFAFeewcu1rWsiqoCc04u5NCplHVjsGPN4jxUmqKdU0YN/9sp7h8gRG6YN1GZRoC1Y6KD+WPLMdzkwizZQ==} dependencies: prosemirror-changeset: 2.2.1 prosemirror-collab: 1.3.1 @@ -1913,66 +1918,66 @@ packages: prosemirror-keymap: 1.2.2 prosemirror-markdown: 1.12.0 prosemirror-menu: 1.2.4 - prosemirror-model: 1.20.0 + prosemirror-model: 1.21.0 prosemirror-schema-basic: 1.2.2 prosemirror-schema-list: 1.3.0 prosemirror-state: 1.4.3 prosemirror-tables: 1.3.7 - prosemirror-trailing-node: 2.0.8(prosemirror-model@1.20.0)(prosemirror-state@1.4.3)(prosemirror-view@1.33.4) - prosemirror-transform: 1.8.0 - prosemirror-view: 1.33.4 + prosemirror-trailing-node: 2.0.8(prosemirror-model@1.21.0)(prosemirror-state@1.4.3)(prosemirror-view@1.33.6) + prosemirror-transform: 1.9.0 + prosemirror-view: 1.33.6 dev: false - /@tiptap/react@2.3.0(@tiptap/core@2.3.0)(@tiptap/pm@2.3.0)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-ThgFJQTWYKRClTV2Zg0wBRqfy0EGz3U4NOey7jwncUjSjx5+o9nXbfQAYWDKQFfWyE+wnrBTYfddEP9pHNX5cQ==} + /@tiptap/react@2.3.1(@tiptap/core@2.3.1)(@tiptap/pm@2.3.1)(react-dom@18.2.0)(react@18.3.1): + resolution: {integrity: sha512-MM6UOi5nmdM/dZXYtbBYHJEsVtyyFFnOCXlXmhTlhz0WYI8VkEAY7XWLB96KrqsbRk9PUWwdev7iT1q40zxVeg==} peerDependencies: '@tiptap/core': ^2.0.0 '@tiptap/pm': ^2.0.0 react: ^17.0.0 || ^18.0.0 react-dom: ^17.0.0 || ^18.0.0 dependencies: - '@tiptap/core': 2.3.0(@tiptap/pm@2.3.0) - '@tiptap/extension-bubble-menu': 2.3.0(@tiptap/core@2.3.0)(@tiptap/pm@2.3.0) - '@tiptap/extension-floating-menu': 2.3.0(@tiptap/core@2.3.0)(@tiptap/pm@2.3.0) - '@tiptap/pm': 2.3.0 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: false - - /@tiptap/starter-kit@2.3.0(@tiptap/pm@2.3.0): - resolution: {integrity: sha512-TjvCd/hzEnuEYOdr5uQqcfHOMuj7JRoZBPdheupwl3SbuYiCxtcqYyAE5qoGXWwuVe9xVGerOLVPkDUgmyrH6A==} - dependencies: - '@tiptap/core': 2.3.0(@tiptap/pm@2.3.0) - '@tiptap/extension-blockquote': 2.3.0(@tiptap/core@2.3.0) - '@tiptap/extension-bold': 2.3.0(@tiptap/core@2.3.0) - '@tiptap/extension-bullet-list': 2.3.0(@tiptap/core@2.3.0) - '@tiptap/extension-code': 2.3.0(@tiptap/core@2.3.0) - '@tiptap/extension-code-block': 2.3.0(@tiptap/core@2.3.0)(@tiptap/pm@2.3.0) - '@tiptap/extension-document': 2.3.0(@tiptap/core@2.3.0) - '@tiptap/extension-dropcursor': 2.3.0(@tiptap/core@2.3.0)(@tiptap/pm@2.3.0) - '@tiptap/extension-gapcursor': 2.3.0(@tiptap/core@2.3.0)(@tiptap/pm@2.3.0) - '@tiptap/extension-hard-break': 2.3.0(@tiptap/core@2.3.0) - '@tiptap/extension-heading': 2.3.0(@tiptap/core@2.3.0) - '@tiptap/extension-history': 2.3.0(@tiptap/core@2.3.0)(@tiptap/pm@2.3.0) - '@tiptap/extension-horizontal-rule': 2.3.0(@tiptap/core@2.3.0)(@tiptap/pm@2.3.0) - '@tiptap/extension-italic': 2.3.0(@tiptap/core@2.3.0) - '@tiptap/extension-list-item': 2.3.0(@tiptap/core@2.3.0) - '@tiptap/extension-ordered-list': 2.3.0(@tiptap/core@2.3.0) - '@tiptap/extension-paragraph': 2.3.0(@tiptap/core@2.3.0) - '@tiptap/extension-strike': 2.3.0(@tiptap/core@2.3.0) - '@tiptap/extension-text': 2.3.0(@tiptap/core@2.3.0) + '@tiptap/core': 2.3.1(@tiptap/pm@2.3.1) + '@tiptap/extension-bubble-menu': 2.3.1(@tiptap/core@2.3.1)(@tiptap/pm@2.3.1) + '@tiptap/extension-floating-menu': 2.3.1(@tiptap/core@2.3.1)(@tiptap/pm@2.3.1) + '@tiptap/pm': 2.3.1 + react: 18.3.1 + react-dom: 18.2.0(react@18.3.1) + dev: false + + /@tiptap/starter-kit@2.3.1(@tiptap/pm@2.3.1): + resolution: {integrity: sha512-VGk1o5y5f2ZHKkvP2WNj8BH7FGak0d0cjxQiXP1n5w8eS0vFnTkCz3JbCPM+KTKobsBmxd2vSC3ElgP9E9d2xw==} + dependencies: + '@tiptap/core': 2.3.1(@tiptap/pm@2.3.1) + '@tiptap/extension-blockquote': 2.3.1(@tiptap/core@2.3.1) + '@tiptap/extension-bold': 2.3.1(@tiptap/core@2.3.1) + '@tiptap/extension-bullet-list': 2.3.1(@tiptap/core@2.3.1) + '@tiptap/extension-code': 2.3.1(@tiptap/core@2.3.1) + '@tiptap/extension-code-block': 2.3.1(@tiptap/core@2.3.1)(@tiptap/pm@2.3.1) + '@tiptap/extension-document': 2.3.1(@tiptap/core@2.3.1) + '@tiptap/extension-dropcursor': 2.3.1(@tiptap/core@2.3.1)(@tiptap/pm@2.3.1) + '@tiptap/extension-gapcursor': 2.3.1(@tiptap/core@2.3.1)(@tiptap/pm@2.3.1) + '@tiptap/extension-hard-break': 2.3.1(@tiptap/core@2.3.1) + '@tiptap/extension-heading': 2.3.1(@tiptap/core@2.3.1) + '@tiptap/extension-history': 2.3.1(@tiptap/core@2.3.1)(@tiptap/pm@2.3.1) + '@tiptap/extension-horizontal-rule': 2.3.1(@tiptap/core@2.3.1)(@tiptap/pm@2.3.1) + '@tiptap/extension-italic': 2.3.1(@tiptap/core@2.3.1) + '@tiptap/extension-list-item': 2.3.1(@tiptap/core@2.3.1) + '@tiptap/extension-ordered-list': 2.3.1(@tiptap/core@2.3.1) + '@tiptap/extension-paragraph': 2.3.1(@tiptap/core@2.3.1) + '@tiptap/extension-strike': 2.3.1(@tiptap/core@2.3.1) + '@tiptap/extension-text': 2.3.1(@tiptap/core@2.3.1) transitivePeerDependencies: - '@tiptap/pm' dev: false - /@tiptap/suggestion@2.3.0(@tiptap/core@2.3.0)(@tiptap/pm@2.3.0): - resolution: {integrity: sha512-QngwR9ahodVfwqp/kXxJvuL3zNb6XZu+vCuWy8RJrGP8DA7SCI9t8t7iB6NfG4kSsRGxM+3DuLi+2xOZQUaEVQ==} + /@tiptap/suggestion@2.3.1(@tiptap/core@2.3.1)(@tiptap/pm@2.3.1): + resolution: {integrity: sha512-hfUIsC80QivPH833rlqh3x1RCOat2mE0SzR6m2Z1ZNZ86N5BrYDU8e8p81gR//4SlNBJ7BZGVWN3DXj+aAKs2A==} peerDependencies: '@tiptap/core': ^2.0.0 '@tiptap/pm': ^2.0.0 dependencies: - '@tiptap/core': 2.3.0(@tiptap/pm@2.3.0) - '@tiptap/pm': 2.3.0 + '@tiptap/core': 2.3.1(@tiptap/pm@2.3.1) + '@tiptap/pm': 2.3.1 dev: false /@tootallnate/once@2.0.0: @@ -1980,21 +1985,21 @@ packages: engines: {node: '>= 10'} dev: false - /@tremor/react@3.16.0(react-dom@18.2.0)(react@18.2.0)(tailwindcss@3.4.3): - resolution: {integrity: sha512-wKOGTMFwBbadYolFoOKYPjvwtgHZVB/1tS0QLaNpOpoBn3Tlx/Bb2RNsLPNGCmFTb9tNfOSGoOBwd8uukWA9xg==} + /@tremor/react@3.16.2(react-dom@18.3.1)(react@18.3.1)(tailwindcss@3.4.3): + resolution: {integrity: sha512-Isdc+Sf4WHlnrAAO8Hk/nK84HiXzCZvb6ZFRHrzOkF+APm6nDhvKPRorXcXZ2BKSS5T5L0QVsid5fIxly8kRdA==} peerDependencies: react: ^18.0.0 react-dom: '>=16.6.0' dependencies: - '@floating-ui/react': 0.19.2(react-dom@18.2.0)(react@18.2.0) - '@headlessui/react': 1.7.19(react-dom@18.2.0)(react@18.2.0) + '@floating-ui/react': 0.19.2(react-dom@18.3.1)(react@18.3.1) + '@headlessui/react': 1.7.19(react-dom@18.3.1)(react@18.3.1) '@headlessui/tailwindcss': 0.2.0(tailwindcss@3.4.3) date-fns: 2.30.0 - react: 18.2.0 - react-day-picker: 8.10.0(date-fns@2.30.0)(react@18.2.0) - react-dom: 18.2.0(react@18.2.0) - react-transition-state: 2.1.1(react-dom@18.2.0)(react@18.2.0) - recharts: 2.12.5(react-dom@18.2.0)(react@18.2.0) + react: 18.3.1 + react-day-picker: 8.10.1(date-fns@2.30.0)(react@18.3.1) + react-dom: 18.3.1(react@18.3.1) + react-transition-state: 2.1.1(react-dom@18.3.1)(react@18.3.1) + recharts: 2.12.6(react-dom@18.3.1)(react@18.3.1) tailwind-merge: 1.14.0 transitivePeerDependencies: - tailwindcss @@ -2101,7 +2106,7 @@ packages: /@types/jsdom@20.0.1: resolution: {integrity: sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==} dependencies: - '@types/node': 20.12.7 + '@types/node': 20.12.10 '@types/tough-cookie': 4.0.5 parse5: 7.1.2 dev: false @@ -2113,8 +2118,8 @@ packages: resolution: {integrity: sha512-yg6E+u0/+Zjva+buc3EIb+29XEg4wltq7cSmd4Uc2EE/1nUVmxyzpX6gUXD0V8jIrG0r7YeOGVIbYRkxeooCtw==} dev: false - /@types/markdown-it@13.0.7: - resolution: {integrity: sha512-U/CBi2YUUcTHBt5tjO2r5QV/x0Po6nsYwQU4Y04fBS6vfoImaiZ6f8bi3CjTCxBPQSO1LMyUqkByzi8AidyxfA==} + /@types/markdown-it@13.0.8: + resolution: {integrity: sha512-V+KmpgiipS+zoypeUSS9ojesWtY/0k4XfqcK2fnVrX/qInJhX7rsCxZ/rygiPH2zxlPPrhfuW0I6ddMcWTKLsg==} dependencies: '@types/linkify-it': 3.0.5 '@types/mdurl': 1.0.5 @@ -2142,15 +2147,15 @@ packages: resolution: {integrity: sha512-p6ua9zBxz5otCmbpb5D3U4B5Nanw6Pk3PPyX05xnxbB/fRv71N7CPmORg7uAD5P70T0xmx1pzAx/FUfa5X+3cw==} dev: false - /@types/node@20.12.7: - resolution: {integrity: sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==} + /@types/node@20.12.10: + resolution: {integrity: sha512-Eem5pH9pmWBHoGAT8Dr5fdc5rYA+4NAovdM4EktRPVAAiJhmWWfQrA0cFhAbOsQdSfIHjAud6YdkbL69+zSKjw==} dependencies: undici-types: 5.26.5 /@types/pg@8.6.6: resolution: {integrity: sha512-O2xNmXebtwVekJDD+02udOncjVcMZQuTEQEMpKJ0ZRf5E7/9JJX3izhKUcUifBkyKpljyUM6BTgy2trmviKlpw==} dependencies: - '@types/node': 20.12.7 + '@types/node': 20.12.10 pg-protocol: 1.6.1 pg-types: 2.2.0 dev: false @@ -2161,13 +2166,13 @@ packages: /@types/react-dom@18.0.11: resolution: {integrity: sha512-O38bPbI2CWtgw/OoQoY+BRelw7uysmXbWvw3nLWO21H1HSh+GOlqPuXshJfjmpNlKiiSDG9cc1JZAaMmVdcTlw==} dependencies: - '@types/react': 18.2.78 + '@types/react': 18.3.1 dev: false - /@types/react-dom@18.2.25: - resolution: {integrity: sha512-o/V48vf4MQh7juIKZU2QGDfli6p1+OOi5oXx36Hffpc9adsHeXjVp8rHuPkjd8VT8sOJ2Zp05HR7CdpGTIUFUA==} + /@types/react-dom@18.3.0: + resolution: {integrity: sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==} dependencies: - '@types/react': 18.2.78 + '@types/react': 18.3.1 dev: true /@types/react@18.0.28: @@ -2178,8 +2183,8 @@ packages: csstype: 3.1.3 dev: false - /@types/react@18.2.78: - resolution: {integrity: sha512-qOwdPnnitQY4xKlKayt42q5W5UQrSHjgoXNVEtxeqdITJ99k4VXJOP3vt8Rkm9HmgJpH50UNU+rlqfkfWOqp0A==} + /@types/react@18.3.1: + resolution: {integrity: sha512-V0kuGBX3+prX+DQ/7r2qsv1NsdfnCLnTgnRJ1pYnxykBhGMz+qj+box5lq7XsO5mtZsBqpjwwTu/7wszPfMBcw==} dependencies: '@types/prop-types': 15.7.12 csstype: 3.1.3 @@ -2347,7 +2352,7 @@ packages: resolution: {integrity: sha512-cpPSR0XJAJs4Ddz9nq3tINlPS5aLfWVCqhhtHnXt4p7qr5+/Znlt1Es736poB/9rnl1hAHrOsOvVj46NEXcVqA==} engines: {node: '>=16.0.0'} dependencies: - '@upstash/redis': 1.29.0 + '@upstash/redis': 1.30.1 dev: false /@upstash/ratelimit@0.4.4: @@ -2368,13 +2373,13 @@ packages: crypto-js: 4.2.0 dev: false - /@upstash/redis@1.29.0: - resolution: {integrity: sha512-kbO5fgMAeUzErnA/SOtaSbAa0dguYhhBT4MZHJ1O8gVl4iK754aC9+rIYY5hsp4nlxeCGfnIDkWpof991c9jjA==} + /@upstash/redis@1.30.1: + resolution: {integrity: sha512-Cmk2cvm1AcD6mKLg/UFhQDzM+H1HsX/k5ufvNL4Kii8DsMTKmadMJ1rRZEGQ/SM7H51EeOL/YSa6K2EPc1SYPA==} dependencies: crypto-js: 4.2.0 dev: false - /@vercel/analytics@1.2.2(next@13.4.20-canary.15)(react@18.2.0): + /@vercel/analytics@1.2.2(next@13.4.20-canary.15)(react@18.3.1): resolution: {integrity: sha512-X0rctVWkQV1e5Y300ehVNqpOfSOufo7ieA5PIdna8yX/U7Vjz0GFsGf4qvAhxV02uQ2CVt7GYcrFfddXXK2Y4A==} peerDependencies: next: '>= 13' @@ -2385,12 +2390,12 @@ packages: react: optional: true dependencies: - next: 13.4.20-canary.15(react-dom@18.2.0)(react@18.2.0) - react: 18.2.0 + next: 13.4.20-canary.15(react-dom@18.2.0)(react@18.3.1) + react: 18.3.1 server-only: 0.0.1 dev: false - /@vercel/analytics@1.2.2(next@14.0.2)(react@18.2.0): + /@vercel/analytics@1.2.2(next@14.0.2)(react@18.3.1): resolution: {integrity: sha512-X0rctVWkQV1e5Y300ehVNqpOfSOufo7ieA5PIdna8yX/U7Vjz0GFsGf4qvAhxV02uQ2CVt7GYcrFfddXXK2Y4A==} peerDependencies: next: '>= 13' @@ -2401,8 +2406,8 @@ packages: react: optional: true dependencies: - next: 14.0.2(react-dom@18.2.0)(react@18.2.0) - react: 18.2.0 + next: 14.0.2(react-dom@18.3.1)(react@18.3.1) + react: 18.3.1 server-only: 0.0.1 dev: false @@ -2456,77 +2461,77 @@ packages: ws: 8.14.2(bufferutil@4.0.8)(utf-8-validate@6.0.3) dev: false - /@vue/compiler-core@3.4.22: - resolution: {integrity: sha512-FBDRCBE/rFPA8OfTUrARx2c49N7zoImlGT7hsFikv0pZxQlFhffQwewpEXaLynZW0/DspVXmNA+QQ9dXINpWmg==} + /@vue/compiler-core@3.4.27: + resolution: {integrity: sha512-E+RyqY24KnyDXsCuQrI+mlcdW3ALND6U7Gqa/+bVwbcpcR3BRRIckFoz7Qyd4TTlnugtwuI7YgjbvsLmxb+yvg==} dependencies: - '@babel/parser': 7.24.4 - '@vue/shared': 3.4.22 + '@babel/parser': 7.24.5 + '@vue/shared': 3.4.27 entities: 4.5.0 estree-walker: 2.0.2 source-map-js: 1.2.0 dev: false - /@vue/compiler-dom@3.4.22: - resolution: {integrity: sha512-YkAS+jZc6Ip360kT3lZbMQZteiYBbHDSVKr94Jdd8Zjr7VjSkkXKAFFR/FW+2tNtBYXOps6xrWlOquy3GeYB0w==} + /@vue/compiler-dom@3.4.27: + resolution: {integrity: sha512-kUTvochG/oVgE1w5ViSr3KUBh9X7CWirebA3bezTbB5ZKBQZwR2Mwj9uoSKRMFcz4gSMzzLXBPD6KpCLb9nvWw==} dependencies: - '@vue/compiler-core': 3.4.22 - '@vue/shared': 3.4.22 + '@vue/compiler-core': 3.4.27 + '@vue/shared': 3.4.27 dev: false - /@vue/compiler-sfc@3.4.22: - resolution: {integrity: sha512-Pncp5Vc8E2Ef1o5uveO8WA1IqM7rt0R1jN8D4qitQYOUxC97iITGYA8oMInQ3UcDS7ip+SegyA2HbAEB4V6NMQ==} + /@vue/compiler-sfc@3.4.27: + resolution: {integrity: sha512-nDwntUEADssW8e0rrmE0+OrONwmRlegDA1pD6QhVeXxjIytV03yDqTey9SBDiALsvAd5U4ZrEKbMyVXhX6mCGA==} dependencies: - '@babel/parser': 7.24.4 - '@vue/compiler-core': 3.4.22 - '@vue/compiler-dom': 3.4.22 - '@vue/compiler-ssr': 3.4.22 - '@vue/shared': 3.4.22 + '@babel/parser': 7.24.5 + '@vue/compiler-core': 3.4.27 + '@vue/compiler-dom': 3.4.27 + '@vue/compiler-ssr': 3.4.27 + '@vue/shared': 3.4.27 estree-walker: 2.0.2 - magic-string: 0.30.9 + magic-string: 0.30.10 postcss: 8.4.38 source-map-js: 1.2.0 dev: false - /@vue/compiler-ssr@3.4.22: - resolution: {integrity: sha512-ycb2sL0SW6AkgVMrvaU/TIAEk7FQWyv/oYya44E/V9xURM+ij9Oev5bVobSS7GLJzkUieWW3SrYcK/PZpb5i4A==} + /@vue/compiler-ssr@3.4.27: + resolution: {integrity: sha512-CVRzSJIltzMG5FcidsW0jKNQnNRYC8bT21VegyMMtHmhW3UOI7knmUehzswXLrExDLE6lQCZdrhD4ogI7c+vuw==} dependencies: - '@vue/compiler-dom': 3.4.22 - '@vue/shared': 3.4.22 + '@vue/compiler-dom': 3.4.27 + '@vue/shared': 3.4.27 dev: false - /@vue/reactivity@3.4.22: - resolution: {integrity: sha512-+golHRRfcGoahBrhoTauFNIIAhxntRV3BI8HHqVvCdsuWivxW1MI0E9AOXVsz4H/ZlWM1ahudWTX6PhUrNR2yQ==} + /@vue/reactivity@3.4.27: + resolution: {integrity: sha512-kK0g4NknW6JX2yySLpsm2jlunZJl2/RJGZ0H9ddHdfBVHcNzxmQ0sS0b09ipmBoQpY8JM2KmUw+a6sO8Zo+zIA==} dependencies: - '@vue/shared': 3.4.22 + '@vue/shared': 3.4.27 dev: false - /@vue/runtime-core@3.4.22: - resolution: {integrity: sha512-cbA8lcL4g1907EdY1a1KmP5IRWfbqjgBRcgJPkF//yn96XSC1/VAJBZiAGLiyw0P77Rw2Ao7d9U51vU1GC6yUQ==} + /@vue/runtime-core@3.4.27: + resolution: {integrity: sha512-7aYA9GEbOOdviqVvcuweTLe5Za4qBZkUY7SvET6vE8kyypxVgaT1ixHLg4urtOlrApdgcdgHoTZCUuTGap/5WA==} dependencies: - '@vue/reactivity': 3.4.22 - '@vue/shared': 3.4.22 + '@vue/reactivity': 3.4.27 + '@vue/shared': 3.4.27 dev: false - /@vue/runtime-dom@3.4.22: - resolution: {integrity: sha512-AXxRHrFkLX1y2+70CO2wDKRxW0WZcQKTOXS31AK+jZ1RLPtI6sEHVpYNfyE9WgbgXOqPtX4gfIfuoFYi8iCu2w==} + /@vue/runtime-dom@3.4.27: + resolution: {integrity: sha512-ScOmP70/3NPM+TW9hvVAz6VWWtZJqkbdf7w6ySsws+EsqtHvkhxaWLecrTorFxsawelM5Ys9FnDEMt6BPBDS0Q==} dependencies: - '@vue/runtime-core': 3.4.22 - '@vue/shared': 3.4.22 + '@vue/runtime-core': 3.4.27 + '@vue/shared': 3.4.27 csstype: 3.1.3 dev: false - /@vue/server-renderer@3.4.22(vue@3.4.22): - resolution: {integrity: sha512-okiNxiCOhJlx6IOrTZvhIVwf2UYKay0hnIPqWu4h19bkNv1gmG4Ic6U3zXY287AWF26lQuFMa515Qzc+R0aAYg==} + /@vue/server-renderer@3.4.27(vue@3.4.27): + resolution: {integrity: sha512-dlAMEuvmeA3rJsOMJ2J1kXU7o7pOxgsNHVr9K8hB3ImIkSuBrIdy0vF66h8gf8Tuinf1TK3mPAz2+2sqyf3KzA==} peerDependencies: - vue: 3.4.22 + vue: 3.4.27 dependencies: - '@vue/compiler-ssr': 3.4.22 - '@vue/shared': 3.4.22 - vue: 3.4.22(typescript@5.4.5) + '@vue/compiler-ssr': 3.4.27 + '@vue/shared': 3.4.27 + vue: 3.4.27(typescript@5.4.5) dev: false - /@vue/shared@3.4.22: - resolution: {integrity: sha512-cg7R9XNk4ovV3bKka/1a464O2oY0l5Fyt0rwGR4hSJRPjUJ0WVjrPdsr4W0JbUriwiM8EKcCcCjeKN5pRMs2Zg==} + /@vue/shared@3.4.27: + resolution: {integrity: sha512-DL3NmY2OFlqmYYrzp39yi3LDkKxa5vZVwxWdQ3rG0ekuWscHraeIbnI8t+aZK7qhYqEqWKTUdijadunb9pnrgA==} dev: false /abab@2.0.6: @@ -2567,7 +2572,7 @@ packages: - supports-color dev: false - /ai@2.2.37(react@18.2.0)(solid-js@1.8.16)(svelte@4.2.14)(vue@3.4.22): + /ai@2.2.37(react@18.3.1)(solid-js@1.8.17)(svelte@4.2.15)(vue@3.4.27): resolution: {integrity: sha512-JIYm5N1muGVqBqWnvkt29FmXhESoO5TcDxw74OE41SsM+uIou6NPDDs0XWb/ABcd1gmp6k5zym64KWMPM2xm0A==} engines: {node: '>=14.6'} peerDependencies: @@ -2587,15 +2592,15 @@ packages: dependencies: eventsource-parser: 1.0.0 nanoid: 3.3.6 - react: 18.2.0 - solid-js: 1.8.16 - solid-swr-store: 0.10.7(solid-js@1.8.16)(swr-store@0.10.6) - sswr: 2.0.0(svelte@4.2.14) - svelte: 4.2.14 - swr: 2.2.0(react@18.2.0) + react: 18.3.1 + solid-js: 1.8.17 + solid-swr-store: 0.10.7(solid-js@1.8.17)(swr-store@0.10.6) + sswr: 2.0.0(svelte@4.2.15) + svelte: 4.2.15 + swr: 2.2.0(react@18.3.1) swr-store: 0.10.6 - swrv: 1.0.4(vue@3.4.22) - vue: 3.4.22(typescript@5.4.5) + swrv: 1.0.4(vue@3.4.27) + vue: 3.4.27(typescript@5.4.5) dev: false /ajv@6.12.6: @@ -2782,7 +2787,7 @@ packages: postcss: ^8.1.0 dependencies: browserslist: 4.23.0 - caniuse-lite: 1.0.30001610 + caniuse-lite: 1.0.30001616 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.0.0 @@ -2828,27 +2833,35 @@ packages: dev: false optional: true - /bare-fs@2.2.3: - resolution: {integrity: sha512-amG72llr9pstfXOBOHve1WjiuKKAMnebcmMbPWDZ7BCevAoJLpugjuAPRsDINEyjT0a6tbaVx3DctkXIRbLuJw==} + /bare-fs@2.3.0: + resolution: {integrity: sha512-TNFqa1B4N99pds2a5NYHR15o0ZpdNKbAeKTE/+G6ED/UeOavv8RY3dr/Fu99HW3zU3pXpo2kDNO8Sjsm2esfOw==} requiresBuild: true dependencies: bare-events: 2.2.2 - bare-path: 2.1.1 - streamx: 2.16.1 + bare-path: 2.1.2 + bare-stream: 1.0.0 dev: false optional: true - /bare-os@2.2.1: - resolution: {integrity: sha512-OwPyHgBBMkhC29Hl3O4/YfxW9n7mdTr2+SsO29XBWKKJsbgj3mnorDB80r5TiCQgQstgE5ga1qNYrpes6NvX2w==} + /bare-os@2.3.0: + resolution: {integrity: sha512-oPb8oMM1xZbhRQBngTgpcQ5gXw6kjOaRsSWsIeNyRxGed2w/ARyP7ScBYpWR1qfX2E5rS3gBw6OWcSQo+s+kUg==} requiresBuild: true dev: false optional: true - /bare-path@2.1.1: - resolution: {integrity: sha512-OHM+iwRDRMDBsSW7kl3dO62JyHdBKO3B25FB9vNQBPcGHMo4+eA8Yj41Lfbk3pS/seDY+siNge0LdRTulAau/A==} + /bare-path@2.1.2: + resolution: {integrity: sha512-o7KSt4prEphWUHa3QUwCxUI00R86VdjiuxmJK0iNVDHYPGo+HsDaVCnqCmPbf/MiW1ok8F4p3m8RTHlWk8K2ig==} requiresBuild: true dependencies: - bare-os: 2.2.1 + bare-os: 2.3.0 + dev: false + optional: true + + /bare-stream@1.0.0: + resolution: {integrity: sha512-KhNUoDL40iP4gFaLSsoGE479t0jHijfYdIcxRn/XtezA2BaUD0NRf/JGRpsMq6dMNM+SrCrB0YSSo/5wBY4rOQ==} + requiresBuild: true + dependencies: + streamx: 2.16.1 dev: false optional: true @@ -2890,10 +2903,10 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001610 - electron-to-chromium: 1.4.736 + caniuse-lite: 1.0.30001616 + electron-to-chromium: 1.4.757 node-releases: 2.0.14 - update-browserslist-db: 1.0.13(browserslist@4.23.0) + update-browserslist-db: 1.0.15(browserslist@4.23.0) dev: true /buffer-from@1.1.2: @@ -2912,7 +2925,7 @@ packages: engines: {node: '>=6.14.2'} requiresBuild: true dependencies: - node-gyp-build: 4.8.0 + node-gyp-build: 4.8.1 dev: false /busboy@1.6.0: @@ -2945,8 +2958,8 @@ packages: engines: {node: '>=14.16'} dev: true - /caniuse-lite@1.0.30001610: - resolution: {integrity: sha512-QFutAY4NgaelojVMjY63o6XlZyORPaLfyMnsl3HgnWdJUcX6K0oaJymHjH8PT5Gk7sTm8rvC/c5COUQKXqmOMA==} + /caniuse-lite@1.0.30001616: + resolution: {integrity: sha512-RHVYKov7IcdNjVHJFNY/78RdG4oGVjbayxv8u5IO74Wv7Hlq4PnJE6mo/OjFijjVFNy5ijnCt6H3IIo4t+wfEw==} /ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} @@ -3032,8 +3045,8 @@ packages: engines: {node: '>=6'} dev: false - /clsx@2.1.0: - resolution: {integrity: sha512-m3iNNWpd9rl3jvvcBnu70ylMdrXt8Vlq4HYadnU5fwcOtvkSQWPmj7amUcDT2qYI7risszBjI5AUIUox9D16pg==} + /clsx@2.1.1: + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} engines: {node: '>=6'} dev: false @@ -3287,7 +3300,7 @@ packages: resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==} engines: {node: '>=0.11'} dependencies: - '@babel/runtime': 7.24.4 + '@babel/runtime': 7.24.5 dev: false /debug@3.2.7: @@ -3412,7 +3425,7 @@ packages: /dom-helpers@5.2.1: resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==} dependencies: - '@babel/runtime': 7.24.4 + '@babel/runtime': 7.24.5 csstype: 3.1.3 dev: false @@ -3431,12 +3444,13 @@ packages: wordwrap: 1.0.0 dev: true - /drizzle-kit@0.20.14: - resolution: {integrity: sha512-0fHv3YIEaUcSVPSGyaaBfOi9bmpajjhbJNdPsRMIUvYdLVxBu9eGjH8mRc3Qk7HVmEidFc/lhG1YyJhoXrn5yA==} + /drizzle-kit@0.20.18: + resolution: {integrity: sha512-fLTwcnLqtBxGd+51H/dEm9TC0FW6+cIX/RVPyNcitBO77X9+nkogEfMAJebpd/8Yl4KucmePHRYRWWvUlW0rqg==} hasBin: true dependencies: - '@drizzle-team/studio': 0.0.39 '@esbuild-kit/esm-loader': 2.6.5 + '@hono/node-server': 1.11.1 + '@hono/zod-validator': 0.2.1(hono@4.3.2)(zod@3.23.6) camelcase: 7.0.1 chalk: 5.3.0 commander: 9.5.0 @@ -3445,16 +3459,18 @@ packages: esbuild-register: 3.5.0(esbuild@0.19.12) glob: 8.1.0 hanji: 0.0.5 + hono: 4.3.2 json-diff: 0.9.0 minimatch: 7.4.6 semver: 7.6.0 - zod: 3.22.4 + superjson: 2.2.1 + zod: 3.23.6 transitivePeerDependencies: - supports-color dev: true - /drizzle-orm@0.30.8(@types/react@18.2.78)(@vercel/postgres@0.8.0)(pg@8.11.5)(react@18.2.0): - resolution: {integrity: sha512-9pBJA0IjnpPpzZ6s9jlS1CQAbKoBmbn2GJesPhXaVblAA/joOJ4AWWevYcqvLGj9SvThBAl7WscN8Zwgg5mnTw==} + /drizzle-orm@0.30.10(@types/react@18.3.1)(@vercel/postgres@0.8.0)(pg@8.11.5)(react@18.3.1): + resolution: {integrity: sha512-IRy/QmMWw9lAQHpwbUh1b8fcn27S/a9zMIzqea1WNOxK9/4EB8gIo+FZWLiPXzl2n9ixGSv8BhsLZiOppWEwBw==} peerDependencies: '@aws-sdk/client-rds-data': '>=3' '@cloudflare/workers-types': '>=3' @@ -3533,17 +3549,17 @@ packages: sqlite3: optional: true dependencies: - '@types/react': 18.2.78 + '@types/react': 18.3.1 '@vercel/postgres': 0.8.0 pg: 8.11.5 - react: 18.2.0 + react: 18.3.1 dev: false /eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - /electron-to-chromium@1.4.736: - resolution: {integrity: sha512-Rer6wc3ynLelKNM4lOCg7/zPQj8tPOCB2hzD32PX9wd3hgRRi9MxEbmkFCokzcEhRVMiOVLjnL9ig9cefJ+6+Q==} + /electron-to-chromium@1.4.757: + resolution: {integrity: sha512-jftDaCknYSSt/+KKeXzH3LX5E2CvRLm75P3Hj+J/dv3CL0qUYcOt13d5FN1NiL5IJbbhzHrb3BomeG2tkSlZmw==} dev: true /emoji-regex@8.0.0: @@ -3594,7 +3610,7 @@ packages: function.prototype.name: 1.1.6 get-intrinsic: 1.2.4 get-symbol-description: 1.0.2 - globalthis: 1.0.3 + globalthis: 1.0.4 gopd: 1.0.1 has-property-descriptors: 1.0.2 has-proto: 1.0.3 @@ -3636,8 +3652,8 @@ packages: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} - /es-iterator-helpers@1.0.18: - resolution: {integrity: sha512-scxAJaewsahbqTYrGKJihhViaM6DDZDDoucfvzNbK0pOren1g/daDQ3IAhzn+1G14rBG7w+i5N+qul60++zlKA==} + /es-iterator-helpers@1.0.19: + resolution: {integrity: sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 @@ -3647,7 +3663,7 @@ packages: es-set-tostringtag: 2.0.3 function-bind: 1.1.2 get-intrinsic: 1.2.4 - globalthis: 1.0.3 + globalthis: 1.0.4 has-property-descriptors: 1.0.2 has-proto: 1.0.3 has-symbols: 1.0.3 @@ -3839,15 +3855,15 @@ packages: eslint-plugin-import: 2.29.1(eslint@8.53.0) eslint-plugin-jsx-a11y: 6.8.0(eslint@8.36.0) eslint-plugin-react: 7.34.1(eslint@8.36.0) - eslint-plugin-react-hooks: 4.6.0(eslint@8.36.0) + eslint-plugin-react-hooks: 4.6.2(eslint@8.36.0) typescript: 4.9.5 transitivePeerDependencies: - eslint-import-resolver-webpack - supports-color dev: false - /eslint-config-next@14.2.1(eslint@8.53.0)(typescript@5.4.5): - resolution: {integrity: sha512-BgD0kPCWMlqoItRf3xe9fG0MqwObKfVch+f2ccwDpZiCJA8ghkz2wrASH+bI6nLZzGcOJOpMm1v1Q1euhfpt4Q==} + /eslint-config-next@14.2.3(eslint@8.53.0)(typescript@5.4.5): + resolution: {integrity: sha512-ZkNztm3Q7hjqvB1rRlOX8P9E/cXRL9ajRcs8jufEtwMfTVYRqnmtnaSu57QqHyBlovMuiB8LEzfLBkh5RYV6Fg==} peerDependencies: eslint: ^7.23.0 || ^8.0.0 typescript: '>=3.3.1' @@ -3855,7 +3871,7 @@ packages: typescript: optional: true dependencies: - '@next/eslint-plugin-next': 14.2.1 + '@next/eslint-plugin-next': 14.2.3 '@rushstack/eslint-patch': 1.10.2 '@typescript-eslint/parser': 7.2.0(eslint@8.53.0)(typescript@5.4.5) eslint: 8.53.0 @@ -3864,7 +3880,7 @@ packages: eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.53.0) eslint-plugin-jsx-a11y: 6.8.0(eslint@8.53.0) eslint-plugin-react: 7.34.1(eslint@8.53.0) - eslint-plugin-react-hooks: 4.6.0(eslint@8.53.0) + eslint-plugin-react-hooks: 4.6.2(eslint@8.53.0) typescript: 5.4.5 transitivePeerDependencies: - eslint-import-resolver-webpack @@ -3893,7 +3909,7 @@ packages: eslint-module-utils: 2.8.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.36.0) eslint-plugin-import: 2.29.1(eslint@8.53.0) fast-glob: 3.3.2 - get-tsconfig: 4.7.3 + get-tsconfig: 4.7.4 is-core-module: 2.13.1 is-glob: 4.0.3 transitivePeerDependencies: @@ -3916,7 +3932,7 @@ packages: eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.53.0) eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.53.0) fast-glob: 3.3.2 - get-tsconfig: 4.7.3 + get-tsconfig: 4.7.4 is-core-module: 2.13.1 is-glob: 4.0.3 transitivePeerDependencies: @@ -4089,7 +4105,7 @@ packages: peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 dependencies: - '@babel/runtime': 7.24.4 + '@babel/runtime': 7.24.5 aria-query: 5.3.0 array-includes: 3.1.8 array.prototype.flatmap: 1.3.2 @@ -4098,7 +4114,7 @@ packages: axobject-query: 3.2.1 damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 - es-iterator-helpers: 1.0.18 + es-iterator-helpers: 1.0.19 eslint: 8.36.0 hasown: 2.0.2 jsx-ast-utils: 3.3.5 @@ -4114,7 +4130,7 @@ packages: peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 dependencies: - '@babel/runtime': 7.24.4 + '@babel/runtime': 7.24.5 aria-query: 5.3.0 array-includes: 3.1.8 array.prototype.flatmap: 1.3.2 @@ -4123,7 +4139,7 @@ packages: axobject-query: 3.2.1 damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 - es-iterator-helpers: 1.0.18 + es-iterator-helpers: 1.0.19 eslint: 8.53.0 hasown: 2.0.2 jsx-ast-utils: 3.3.5 @@ -4133,8 +4149,8 @@ packages: object.fromentries: 2.0.8 dev: true - /eslint-plugin-react-hooks@4.6.0(eslint@8.36.0): - resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} + /eslint-plugin-react-hooks@4.6.2(eslint@8.36.0): + resolution: {integrity: sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==} engines: {node: '>=10'} peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 @@ -4142,8 +4158,8 @@ packages: eslint: 8.36.0 dev: false - /eslint-plugin-react-hooks@4.6.0(eslint@8.53.0): - resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} + /eslint-plugin-react-hooks@4.6.2(eslint@8.53.0): + resolution: {integrity: sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==} engines: {node: '>=10'} peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 @@ -4163,7 +4179,7 @@ packages: array.prototype.toreversed: 1.1.2 array.prototype.tosorted: 1.1.3 doctrine: 2.1.0 - es-iterator-helpers: 1.0.18 + es-iterator-helpers: 1.0.19 eslint: 8.36.0 estraverse: 5.3.0 jsx-ast-utils: 3.3.5 @@ -4190,7 +4206,7 @@ packages: array.prototype.toreversed: 1.1.2 array.prototype.tosorted: 1.1.3 doctrine: 2.1.0 - es-iterator-helpers: 1.0.18 + es-iterator-helpers: 1.0.19 eslint: 8.53.0 estraverse: 5.3.0 jsx-ast-utils: 3.3.5 @@ -4257,7 +4273,7 @@ packages: lodash.merge: 4.6.2 minimatch: 3.1.2 natural-compare: 1.4.0 - optionator: 0.9.3 + optionator: 0.9.4 strip-ansi: 6.0.1 strip-json-comments: 3.1.1 text-table: 0.2.0 @@ -4305,7 +4321,7 @@ packages: lodash.merge: 4.6.2 minimatch: 3.1.2 natural-compare: 1.4.0 - optionator: 0.9.3 + optionator: 0.9.4 strip-ansi: 6.0.1 text-table: 0.2.0 transitivePeerDependencies: @@ -4504,7 +4520,7 @@ packages: /flatted@3.3.1: resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} - /focus-trap-react@10.2.3(prop-types@15.8.1)(react-dom@18.2.0)(react@18.2.0): + /focus-trap-react@10.2.3(prop-types@15.8.1)(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-YXBpFu/hIeSu6NnmV2xlXzOYxuWkoOtar9jzgp3lOmjWLWY59C/b8DtDHEAV4SPU07Nd/t+nS/SBNGkhUBFmEw==} peerDependencies: prop-types: ^15.8.1 @@ -4513,8 +4529,8 @@ packages: dependencies: focus-trap: 7.5.4 prop-types: 15.8.1 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) tabbable: 6.2.0 dev: false @@ -4549,7 +4565,7 @@ packages: resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} dev: true - /framer-motion@10.18.0(react-dom@18.2.0)(react@18.2.0): + /framer-motion@10.18.0(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-oGlDh1Q1XqYPksuTD/usb0I70hq95OUzmL9+6Zd+Hs4XV0oaISBa/UUMSjYiq6m8EUF32132mOJ8xVZS+I0S6w==} peerDependencies: react: ^18.0.0 @@ -4560,8 +4576,8 @@ packages: react-dom: optional: true dependencies: - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) tslib: 2.6.2 optionalDependencies: '@emotion/is-prop-valid': 0.8.8 @@ -4619,8 +4635,8 @@ packages: es-errors: 1.3.0 get-intrinsic: 1.2.4 - /get-tsconfig@4.7.3: - resolution: {integrity: sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg==} + /get-tsconfig@4.7.4: + resolution: {integrity: sha512-ofbkKj+0pjXjhejr007J/fLf+sW+8H7K5GCm+msC8q3IpvgjobpyPqSRFemNyIMxklC0zeJpi7VDFna19FacvQ==} dependencies: resolve-pkg-maps: 1.0.0 @@ -4652,7 +4668,7 @@ packages: foreground-child: 3.1.1 jackspeak: 2.3.6 minimatch: 9.0.4 - minipass: 7.0.4 + minipass: 7.1.0 path-scurry: 1.10.2 dev: true @@ -4664,7 +4680,7 @@ packages: foreground-child: 3.1.1 jackspeak: 2.3.6 minimatch: 9.0.4 - minipass: 7.0.4 + minipass: 7.1.0 path-scurry: 1.10.2 /glob@7.1.7: @@ -4705,11 +4721,12 @@ packages: dependencies: type-fest: 0.20.2 - /globalthis@1.0.3: - resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} + /globalthis@1.0.4: + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} engines: {node: '>= 0.4'} dependencies: define-properties: 1.2.1 + gopd: 1.0.1 /globby@11.1.0: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} @@ -4821,6 +4838,11 @@ packages: resolution: {integrity: sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==} dev: true + /hono@4.3.2: + resolution: {integrity: sha512-wiZcF5N06tc232U11DnqW6hP8DNoypjsrxslKXfvOqOAkTdh7K1HLZJH/92Mf+urxUTGi96f1w4xx/1Qozoqiw==} + engines: {node: '>=16.0.0'} + dev: true + /html-encoding-sniffer@3.0.0: resolution: {integrity: sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==} engines: {node: '>=12'} @@ -5154,7 +5176,7 @@ packages: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 '@types/jsdom': 20.0.1 - '@types/node': 20.12.7 + '@types/node': 20.12.10 jest-mock: 29.7.0 jest-util: 29.7.0 jsdom: 20.0.3 @@ -5177,7 +5199,7 @@ packages: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 '@types/jsdom': 20.0.1 - '@types/node': 20.12.7 + '@types/node': 20.12.10 jest-mock: 29.7.0 jest-util: 29.7.0 jsdom: 20.0.3 @@ -5207,7 +5229,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.12.7 + '@types/node': 20.12.10 jest-util: 29.7.0 dev: false @@ -5216,7 +5238,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.12.7 + '@types/node': 20.12.10 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -5284,17 +5306,17 @@ packages: http-proxy-agent: 5.0.0 https-proxy-agent: 5.0.1 is-potential-custom-element-name: 1.0.1 - nwsapi: 2.2.7 + nwsapi: 2.2.9 parse5: 7.1.2 saxes: 6.0.0 symbol-tree: 3.2.4 - tough-cookie: 4.1.3 + tough-cookie: 4.1.4 w3c-xmlserializer: 4.0.0 webidl-conversions: 7.0.0 whatwg-encoding: 2.0.0 whatwg-mimetype: 3.0.0 whatwg-url: 11.0.0 - ws: 8.16.0 + ws: 8.17.0 xml-name-validator: 4.0.0 transitivePeerDependencies: - bufferutil @@ -5426,8 +5448,8 @@ packages: dependencies: js-tokens: 4.0.0 - /lru-cache@10.2.0: - resolution: {integrity: sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==} + /lru-cache@10.2.2: + resolution: {integrity: sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==} engines: {node: 14 || >=16.14} /lru-cache@6.0.0: @@ -5442,25 +5464,24 @@ packages: es5-ext: 0.10.64 dev: true - /lucide-react@0.244.0(react@18.2.0): + /lucide-react@0.244.0(react@18.3.1): resolution: {integrity: sha512-PeDVbx5PlIRrVvdxiuSxPfBo7sK5qrL3LbvvRoGVNiHYRAkBm/48lKqoioxcmp0bgsyJs9lMw7CdtGFvnMJbVg==} peerDependencies: react: ^16.5.1 || ^17.0.0 || ^18.0.0 dependencies: - react: 18.2.0 + react: 18.3.1 dev: false - /lucide-react@0.292.0(react@18.2.0): + /lucide-react@0.292.0(react@18.3.1): resolution: {integrity: sha512-rRgUkpEHWpa5VCT66YscInCQmQuPCB1RFRzkkxMxg4b+jaL0V12E3riWWR2Sh5OIiUhCwGW/ZExuEO4Az32E6Q==} peerDependencies: react: ^16.5.1 || ^17.0.0 || ^18.0.0 dependencies: - react: 18.2.0 + react: 18.3.1 dev: false - /magic-string@0.30.9: - resolution: {integrity: sha512-S1+hd+dIrC8EZqKyT9DstTH/0Z+f76kmmvZnkfQVmOpDEF9iVgdYif3Q/pIWHmCoo59bQVGW0kVL3e2nl+9+Sw==} - engines: {node: '>=12'} + /magic-string@0.30.10: + resolution: {integrity: sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==} dependencies: '@jridgewell/sourcemap-codec': 1.4.15 dev: false @@ -5958,8 +5979,8 @@ packages: /minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - /minipass@7.0.4: - resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==} + /minipass@7.1.0: + resolution: {integrity: sha512-oGZRv2OT1lO2UF1zUcwdTb3wqUwI0kBGTgt/T7OdSj6M6N5m3o5uPf0AIW6lVxGGoiWUR7e2AwTE+xiwK8WQig==} engines: {node: '>=16 || 14 >=14.17'} /mkdirp-classic@0.5.3: @@ -6008,7 +6029,7 @@ packages: /natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - /next-auth@4.24.7(next@14.0.2)(react-dom@18.2.0)(react@18.2.0): + /next-auth@4.24.7(next@14.0.2)(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-iChjE8ov/1K/z98gdKbn2Jw+2vLgJtVV39X+rCP5SGnVQuco7QOr19FRNGMIrD8d3LYhHWV9j9sKLzq1aDWWQQ==} peerDependencies: next: ^12.2.5 || ^13 || ^14 @@ -6019,21 +6040,21 @@ packages: nodemailer: optional: true dependencies: - '@babel/runtime': 7.24.4 + '@babel/runtime': 7.24.5 '@panva/hkdf': 1.1.1 cookie: 0.5.0 jose: 4.15.5 - next: 14.0.2(react-dom@18.2.0)(react@18.2.0) + next: 14.0.2(react-dom@18.3.1)(react@18.3.1) oauth: 0.9.15 openid-client: 5.6.5 - preact: 10.20.2 - preact-render-to-string: 5.2.6(preact@10.20.2) - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) + preact: 10.21.0 + preact-render-to-string: 5.2.6(preact@10.21.0) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) uuid: 8.3.2 dev: false - /next-mdx-remote@4.4.1(react-dom@18.2.0)(react@18.2.0): + /next-mdx-remote@4.4.1(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-1BvyXaIou6xy3XoNF4yaMZUCb6vD2GTAa5ciOa6WoO+gAUTYsb1K4rI/HSC2ogAWLrb/7VSV52skz07vOzmqIQ==} engines: {node: '>=14', npm: '>=7'} peerDependencies: @@ -6041,9 +6062,9 @@ packages: react-dom: '>=16.x <=18.x' dependencies: '@mdx-js/mdx': 2.3.0 - '@mdx-js/react': 2.3.0(react@18.2.0) - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) + '@mdx-js/react': 2.3.0(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) vfile: 5.3.7 vfile-matter: 3.0.1 transitivePeerDependencies: @@ -6054,7 +6075,7 @@ packages: resolution: {integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==} dev: true - /next@13.4.20-canary.15(react-dom@18.2.0)(react@18.2.0): + /next@13.4.20-canary.15(react-dom@18.2.0)(react@18.3.1): resolution: {integrity: sha512-Ugd22aq9E0Eq0VFTn3htQjh50097ug8dAPS0v+9+AGz5VDhwx/ybnDo8S80Zjp8KGDuCP9S8LjwOiy0Ln8VeOg==} engines: {node: '>=16.14.0'} hasBin: true @@ -6072,11 +6093,11 @@ packages: '@next/env': 13.4.20-canary.15 '@swc/helpers': 0.5.1 busboy: 1.6.0 - caniuse-lite: 1.0.30001610 + caniuse-lite: 1.0.30001616 postcss: 8.4.14 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - styled-jsx: 5.1.1(react@18.2.0) + react: 18.3.1 + react-dom: 18.2.0(react@18.3.1) + styled-jsx: 5.1.1(react@18.3.1) watchpack: 2.4.0 zod: 3.21.4 optionalDependencies: @@ -6094,7 +6115,7 @@ packages: - babel-plugin-macros dev: false - /next@14.0.2(react-dom@18.2.0)(react@18.2.0): + /next@14.0.2(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-jsAU2CkYS40GaQYOiLl9m93RTv2DA/tTJ0NRlmZIBIL87YwQ/xR8k796z7IqgM3jydI8G25dXvyYMC9VDIevIg==} engines: {node: '>=18.17.0'} hasBin: true @@ -6112,11 +6133,11 @@ packages: '@next/env': 14.0.2 '@swc/helpers': 0.5.2 busboy: 1.6.0 - caniuse-lite: 1.0.30001610 + caniuse-lite: 1.0.30001616 postcss: 8.4.31 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - styled-jsx: 5.1.1(react@18.2.0) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + styled-jsx: 5.1.1(react@18.3.1) watchpack: 2.4.0 optionalDependencies: '@next/swc-darwin-arm64': 14.0.2 @@ -6133,8 +6154,8 @@ packages: - babel-plugin-macros dev: false - /node-abi@3.57.0: - resolution: {integrity: sha512-Dp+A9JWxRaKuHP35H77I4kCKesDy5HUDEmScia2FyncMTOXASMyg251F5PhFoDA5uqBrDDffiLpbqnrZmNXW+g==} + /node-abi@3.62.0: + resolution: {integrity: sha512-CPMcGa+y33xuL1E0TcNIu4YyaZCxnnvkVaEXrsosR3FxN+fV8xvb7Mzpb7IgKler10qeMkE6+Dp8qJhpzdq35g==} engines: {node: '>=10'} dependencies: semver: 7.6.0 @@ -6144,8 +6165,8 @@ packages: resolution: {integrity: sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==} dev: false - /node-gyp-build@4.8.0: - resolution: {integrity: sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og==} + /node-gyp-build@4.8.1: + resolution: {integrity: sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==} hasBin: true dev: false @@ -6162,50 +6183,50 @@ packages: engines: {node: '>=0.10.0'} dev: true - /novel@0.1.22(react@18.2.0)(solid-js@1.8.16)(svelte@4.2.14)(vue@3.4.22): + /novel@0.1.22(react@18.3.1)(solid-js@1.8.17)(svelte@4.2.15)(vue@3.4.27): resolution: {integrity: sha512-hdZ3iV4kvCISNjRNXqQk6fRVkMZmvzWjA3zXM1bU2SXVEufBxZL+77qsdEK/XETkJkeEdQl0mk8ERwLiL0BvRg==} peerDependencies: react: ^18.2.0 dependencies: - '@radix-ui/react-popover': 1.0.7(@types/react-dom@18.0.11)(@types/react@18.0.28)(react-dom@18.2.0)(react@18.2.0) - '@tiptap/core': 2.3.0(@tiptap/pm@2.3.0) - '@tiptap/extension-color': 2.3.0(@tiptap/core@2.3.0)(@tiptap/extension-text-style@2.3.0) - '@tiptap/extension-highlight': 2.3.0(@tiptap/core@2.3.0) - '@tiptap/extension-horizontal-rule': 2.3.0(@tiptap/core@2.3.0)(@tiptap/pm@2.3.0) - '@tiptap/extension-image': 2.3.0(@tiptap/core@2.3.0) - '@tiptap/extension-link': 2.3.0(@tiptap/core@2.3.0)(@tiptap/pm@2.3.0) - '@tiptap/extension-placeholder': 2.0.3(@tiptap/core@2.3.0)(@tiptap/pm@2.3.0) - '@tiptap/extension-task-item': 2.3.0(@tiptap/core@2.3.0)(@tiptap/pm@2.3.0) - '@tiptap/extension-task-list': 2.3.0(@tiptap/core@2.3.0) - '@tiptap/extension-text-style': 2.3.0(@tiptap/core@2.3.0) - '@tiptap/extension-underline': 2.3.0(@tiptap/core@2.3.0) - '@tiptap/pm': 2.3.0 - '@tiptap/react': 2.3.0(@tiptap/core@2.3.0)(@tiptap/pm@2.3.0)(react-dom@18.2.0)(react@18.2.0) - '@tiptap/starter-kit': 2.3.0(@tiptap/pm@2.3.0) - '@tiptap/suggestion': 2.3.0(@tiptap/core@2.3.0)(@tiptap/pm@2.3.0) + '@radix-ui/react-popover': 1.0.7(@types/react-dom@18.0.11)(@types/react@18.0.28)(react-dom@18.2.0)(react@18.3.1) + '@tiptap/core': 2.3.1(@tiptap/pm@2.3.1) + '@tiptap/extension-color': 2.3.1(@tiptap/core@2.3.1)(@tiptap/extension-text-style@2.3.1) + '@tiptap/extension-highlight': 2.3.1(@tiptap/core@2.3.1) + '@tiptap/extension-horizontal-rule': 2.3.1(@tiptap/core@2.3.1)(@tiptap/pm@2.3.1) + '@tiptap/extension-image': 2.3.1(@tiptap/core@2.3.1) + '@tiptap/extension-link': 2.3.1(@tiptap/core@2.3.1)(@tiptap/pm@2.3.1) + '@tiptap/extension-placeholder': 2.0.3(@tiptap/core@2.3.1)(@tiptap/pm@2.3.1) + '@tiptap/extension-task-item': 2.3.1(@tiptap/core@2.3.1)(@tiptap/pm@2.3.1) + '@tiptap/extension-task-list': 2.3.1(@tiptap/core@2.3.1) + '@tiptap/extension-text-style': 2.3.1(@tiptap/core@2.3.1) + '@tiptap/extension-underline': 2.3.1(@tiptap/core@2.3.1) + '@tiptap/pm': 2.3.1 + '@tiptap/react': 2.3.1(@tiptap/core@2.3.1)(@tiptap/pm@2.3.1)(react-dom@18.2.0)(react@18.3.1) + '@tiptap/starter-kit': 2.3.1(@tiptap/pm@2.3.1) + '@tiptap/suggestion': 2.3.1(@tiptap/core@2.3.1)(@tiptap/pm@2.3.1) '@types/node': 18.15.3 '@types/react': 18.0.28 '@types/react-dom': 18.0.11 '@upstash/ratelimit': 0.4.4 - '@vercel/analytics': 1.2.2(next@13.4.20-canary.15)(react@18.2.0) + '@vercel/analytics': 1.2.2(next@13.4.20-canary.15)(react@18.3.1) '@vercel/blob': 0.9.3 '@vercel/kv': 0.2.4 - ai: 2.2.37(react@18.2.0)(solid-js@1.8.16)(svelte@4.2.14)(vue@3.4.22) + ai: 2.2.37(react@18.3.1)(solid-js@1.8.17)(svelte@4.2.15)(vue@3.4.27) clsx: 1.2.1 eslint: 8.36.0 eslint-config-next: 13.2.4(eslint@8.36.0)(typescript@4.9.5) eventsource-parser: 0.1.0 - lucide-react: 0.244.0(react@18.2.0) - next: 13.4.20-canary.15(react-dom@18.2.0)(react@18.2.0) - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - react-markdown: 8.0.7(@types/react@18.0.28)(react@18.2.0) - sonner: 0.7.4(react-dom@18.2.0)(react@18.2.0) + lucide-react: 0.244.0(react@18.3.1) + next: 13.4.20-canary.15(react-dom@18.2.0)(react@18.3.1) + react: 18.3.1 + react-dom: 18.2.0(react@18.3.1) + react-markdown: 8.0.7(@types/react@18.0.28)(react@18.3.1) + sonner: 0.7.4(react-dom@18.2.0)(react@18.3.1) tailwind-merge: 1.14.0 tippy.js: 6.3.7 - tiptap-markdown: 0.8.10(@tiptap/core@2.3.0) + tiptap-markdown: 0.8.10(@tiptap/core@2.3.1) typescript: 4.9.5 - use-debounce: 9.0.4(react@18.2.0) + use-debounce: 9.0.4(react@18.3.1) transitivePeerDependencies: - '@babel/core' - '@opentelemetry/api' @@ -6221,8 +6242,8 @@ packages: - vue dev: false - /nwsapi@2.2.7: - resolution: {integrity: sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==} + /nwsapi@2.2.9: + resolution: {integrity: sha512-2f3F0SEEer8bBu0dsNCFF50N0cTThV1nWFYcEYFZttdW0lDAoybv9cQoK7X7/68Z89S7FoRrVjP1LPX4XRf9vg==} dev: false /oauth4webapi@2.10.4: @@ -6327,16 +6348,16 @@ packages: oidc-token-hash: 5.0.3 dev: false - /optionator@0.9.3: - resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} + /optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} dependencies: - '@aashutoshrathi/word-wrap': 1.2.6 deep-is: 0.1.4 fast-levenshtein: 2.0.6 levn: 0.4.1 prelude-ls: 1.2.1 type-check: 0.4.0 + word-wrap: 1.2.5 /orderedmap@2.1.1: resolution: {integrity: sha512-TvAWxi0nDe1j/rtMcWcIj94+Ffe6n7zhow33h40SKxmsmozs6dz/e+EajymfoFcHd7sxNn8yHM8839uixMOV6g==} @@ -6398,8 +6419,8 @@ packages: resolution: {integrity: sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==} engines: {node: '>=16 || 14 >=14.17'} dependencies: - lru-cache: 10.2.0 - minipass: 7.0.4 + lru-cache: 10.2.2 + minipass: 7.1.0 /path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} @@ -6528,7 +6549,7 @@ packages: dependencies: lilconfig: 3.1.1 postcss: 8.4.38 - yaml: 2.4.1 + yaml: 2.4.2 /postcss-nested@6.0.1(postcss@8.4.38): resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} @@ -6614,12 +6635,12 @@ packages: pretty-format: 3.8.0 dev: false - /preact-render-to-string@5.2.6(preact@10.20.2): + /preact-render-to-string@5.2.6(preact@10.21.0): resolution: {integrity: sha512-JyhErpYOvBV1hEPwIxc/fHWXPfnEGdRKxc8gFdAZ7XV4tlzyzG847XAyEZqoDnynP88akM4eaHcSOzNcLWFguw==} peerDependencies: preact: '>=10' dependencies: - preact: 10.20.2 + preact: 10.21.0 pretty-format: 3.8.0 dev: false @@ -6627,8 +6648,8 @@ packages: resolution: {integrity: sha512-eY93IVpod/zG3uMF22Unl8h9KkrcKIRs2EGar8hwLZZDU1lkjph303V9HZBwufh2s736U6VXuhD109LYqPoffg==} dev: false - /preact@10.20.2: - resolution: {integrity: sha512-S1d1ernz3KQ+Y2awUxKakpfOg2CEmJmwOP+6igPx6dgr6pgDvenqYviyokWso2rhHvGtTlWWnJDa7RaPbQerTg==} + /preact@10.21.0: + resolution: {integrity: sha512-aQAIxtzWEwH8ou+OovWVSVNlFImL7xUCwJX3YMqA3U8iKCNC34999fFOnWjYNsylgfPgMexpbk7WYOLtKr/mxg==} dev: false /prebuild-install@7.1.2: @@ -6642,7 +6663,7 @@ packages: minimist: 1.2.8 mkdirp-classic: 0.5.3 napi-build-utils: 1.0.2 - node-abi: 3.57.0 + node-abi: 3.62.0 pump: 3.0.0 rc: 1.2.8 simple-get: 4.0.1 @@ -6721,7 +6742,7 @@ packages: dependencies: '@jest/schemas': 29.6.3 ansi-styles: 5.2.0 - react-is: 18.2.0 + react-is: 18.3.1 dev: false /pretty-format@3.8.0: @@ -6742,7 +6763,7 @@ packages: /prosemirror-changeset@2.2.1: resolution: {integrity: sha512-J7msc6wbxB4ekDFj+n9gTW/jav/p53kdlivvuppHsrZXCaQdVgRghoZbSS3kwrRyAstRVQ4/+u5k7YfLgkkQvQ==} dependencies: - prosemirror-transform: 1.8.0 + prosemirror-transform: 1.9.0 dev: false /prosemirror-collab@1.3.1: @@ -6754,34 +6775,34 @@ packages: /prosemirror-commands@1.5.2: resolution: {integrity: sha512-hgLcPaakxH8tu6YvVAaILV2tXYsW3rAdDR8WNkeKGcgeMVQg3/TMhPdVoh7iAmfgVjZGtcOSjKiQaoeKjzd2mQ==} dependencies: - prosemirror-model: 1.20.0 + prosemirror-model: 1.21.0 prosemirror-state: 1.4.3 - prosemirror-transform: 1.8.0 + prosemirror-transform: 1.9.0 dev: false /prosemirror-dropcursor@1.8.1: resolution: {integrity: sha512-M30WJdJZLyXHi3N8vxN6Zh5O8ZBbQCz0gURTfPmTIBNQ5pxrdU7A58QkNqfa98YEjSAL1HUyyU34f6Pm5xBSGw==} dependencies: prosemirror-state: 1.4.3 - prosemirror-transform: 1.8.0 - prosemirror-view: 1.33.4 + prosemirror-transform: 1.9.0 + prosemirror-view: 1.33.6 dev: false /prosemirror-gapcursor@1.3.2: resolution: {integrity: sha512-wtjswVBd2vaQRrnYZaBCbyDqr232Ed4p2QPtRIUK5FuqHYKGWkEwl08oQM4Tw7DOR0FsasARV5uJFvMZWxdNxQ==} dependencies: prosemirror-keymap: 1.2.2 - prosemirror-model: 1.20.0 + prosemirror-model: 1.21.0 prosemirror-state: 1.4.3 - prosemirror-view: 1.33.4 + prosemirror-view: 1.33.6 dev: false /prosemirror-history@1.4.0: resolution: {integrity: sha512-UUiGzDVcqo1lovOPdi9YxxUps3oBFWAIYkXLu3Ot+JPv1qzVogRbcizxK3LhHmtaUxclohgiOVesRw5QSlMnbQ==} dependencies: prosemirror-state: 1.4.3 - prosemirror-transform: 1.8.0 - prosemirror-view: 1.33.4 + prosemirror-transform: 1.9.0 + prosemirror-view: 1.33.6 rope-sequence: 1.3.4 dev: false @@ -6789,7 +6810,7 @@ packages: resolution: {integrity: sha512-6ygpPRuTJ2lcOXs9JkefieMst63wVJBgHZGl5QOytN7oSZs3Co/BYbc3Yx9zm9H37Bxw8kVzCnDsihsVsL4yEg==} dependencies: prosemirror-state: 1.4.3 - prosemirror-transform: 1.8.0 + prosemirror-transform: 1.9.0 dev: false /prosemirror-keymap@1.2.2: @@ -6803,7 +6824,7 @@ packages: resolution: {integrity: sha512-6F5HS8Z0HDYiS2VQDZzfZP6A0s/I0gbkJy8NCzzDMtcsz3qrfqyroMMeoSjAmOhDITyon11NbXSzztfKi+frSQ==} dependencies: markdown-it: 14.1.0 - prosemirror-model: 1.20.0 + prosemirror-model: 1.21.0 dev: false /prosemirror-menu@1.2.4: @@ -6815,8 +6836,8 @@ packages: prosemirror-state: 1.4.3 dev: false - /prosemirror-model@1.20.0: - resolution: {integrity: sha512-q7AY7vMjKYqDCeoedgUiAgrLabliXxndJuuFmcmc2+YU1SblvnOiG2WEACF2lwAZsMlfLpiAilA3L+TWlDqIsQ==} + /prosemirror-model@1.21.0: + resolution: {integrity: sha512-zLpS1mVCZLA7VTp82P+BfMiYVPcX1/z0Mf3gsjKZtzMWubwn2pN7CceMV0DycjlgE5JeXPR7UF4hJPbBV98oWA==} dependencies: orderedmap: 2.1.1 dev: false @@ -6824,36 +6845,36 @@ packages: /prosemirror-schema-basic@1.2.2: resolution: {integrity: sha512-/dT4JFEGyO7QnNTe9UaKUhjDXbTNkiWTq/N4VpKaF79bBjSExVV2NXmJpcM7z/gD7mbqNjxbmWW5nf1iNSSGnw==} dependencies: - prosemirror-model: 1.20.0 + prosemirror-model: 1.21.0 dev: false /prosemirror-schema-list@1.3.0: resolution: {integrity: sha512-Hz/7gM4skaaYfRPNgr421CU4GSwotmEwBVvJh5ltGiffUJwm7C8GfN/Bc6DR1EKEp5pDKhODmdXXyi9uIsZl5A==} dependencies: - prosemirror-model: 1.20.0 + prosemirror-model: 1.21.0 prosemirror-state: 1.4.3 - prosemirror-transform: 1.8.0 + prosemirror-transform: 1.9.0 dev: false /prosemirror-state@1.4.3: resolution: {integrity: sha512-goFKORVbvPuAQaXhpbemJFRKJ2aixr+AZMGiquiqKxaucC6hlpHNZHWgz5R7dS4roHiwq9vDctE//CZ++o0W1Q==} dependencies: - prosemirror-model: 1.20.0 - prosemirror-transform: 1.8.0 - prosemirror-view: 1.33.4 + prosemirror-model: 1.21.0 + prosemirror-transform: 1.9.0 + prosemirror-view: 1.33.6 dev: false /prosemirror-tables@1.3.7: resolution: {integrity: sha512-oEwX1wrziuxMtwFvdDWSFHVUWrFJWt929kVVfHvtTi8yvw+5ppxjXZkMG/fuTdFo+3DXyIPSKfid+Be1npKXDA==} dependencies: prosemirror-keymap: 1.2.2 - prosemirror-model: 1.20.0 + prosemirror-model: 1.21.0 prosemirror-state: 1.4.3 - prosemirror-transform: 1.8.0 - prosemirror-view: 1.33.4 + prosemirror-transform: 1.9.0 + prosemirror-view: 1.33.6 dev: false - /prosemirror-trailing-node@2.0.8(prosemirror-model@1.20.0)(prosemirror-state@1.4.3)(prosemirror-view@1.33.4): + /prosemirror-trailing-node@2.0.8(prosemirror-model@1.21.0)(prosemirror-state@1.4.3)(prosemirror-view@1.33.6): resolution: {integrity: sha512-ujRYhSuhQb1Jsarh1IHqb2KoSnRiD7wAMDGucP35DN7j5af6X7B18PfdPIrbwsPTqIAj0fyOvxbuPsWhNvylmA==} peerDependencies: prosemirror-model: ^1.19.0 @@ -6862,23 +6883,23 @@ packages: dependencies: '@remirror/core-constants': 2.0.2 escape-string-regexp: 4.0.0 - prosemirror-model: 1.20.0 + prosemirror-model: 1.21.0 prosemirror-state: 1.4.3 - prosemirror-view: 1.33.4 + prosemirror-view: 1.33.6 dev: false - /prosemirror-transform@1.8.0: - resolution: {integrity: sha512-BaSBsIMv52F1BVVMvOmp1yzD3u65uC3HTzCBQV1WDPqJRQ2LuHKcyfn0jwqodo8sR9vVzMzZyI+Dal5W9E6a9A==} + /prosemirror-transform@1.9.0: + resolution: {integrity: sha512-5UXkr1LIRx3jmpXXNKDhv8OyAOeLTGuXNwdVfg8x27uASna/wQkr9p6fD3eupGOi4PLJfbezxTyi/7fSJypXHg==} dependencies: - prosemirror-model: 1.20.0 + prosemirror-model: 1.21.0 dev: false - /prosemirror-view@1.33.4: - resolution: {integrity: sha512-xQqAhH8/HGleVpKDhQsrd+oqdyeKMxFtdCWDxWMmP+n0k27fBpyUqa8pA+RB5cFY8rqDDc1hll69aRZQa7UaAw==} + /prosemirror-view@1.33.6: + resolution: {integrity: sha512-zRLUNgLIQfd8IfGprsXxWTjdA8xEAFJe8cDNrOptj6Mop9sj+BMeVbJvceyAYCm5G2dOdT2prctH7K9dfnpIMw==} dependencies: - prosemirror-model: 1.20.0 + prosemirror-model: 1.21.0 prosemirror-state: 1.4.3 - prosemirror-transform: 1.8.0 + prosemirror-transform: 1.9.0 dev: false /psl@1.9.0: @@ -6910,7 +6931,6 @@ packages: /queue-tick@1.0.1: resolution: {integrity: sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==} - requiresBuild: true dev: false /rc@1.2.8: @@ -6923,34 +6943,44 @@ packages: strip-json-comments: 2.0.1 dev: false - /react-day-picker@8.10.0(date-fns@2.30.0)(react@18.2.0): - resolution: {integrity: sha512-mz+qeyrOM7++1NCb1ARXmkjMkzWVh2GL9YiPbRjKe0zHccvekk4HE+0MPOZOrosn8r8zTHIIeOUXTmXRqmkRmg==} + /react-day-picker@8.10.1(date-fns@2.30.0)(react@18.3.1): + resolution: {integrity: sha512-TMx7fNbhLk15eqcMt+7Z7S2KF7mfTId/XJDjKE8f+IUcFn0l08/kI4FiYTL/0yuOLmEcbR4Fwe3GJf/NiiMnPA==} peerDependencies: date-fns: ^2.28.0 || ^3.0.0 react: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: date-fns: 2.30.0 - react: 18.2.0 + react: 18.3.1 dev: false - /react-dom@18.2.0(react@18.2.0): + /react-dom@18.2.0(react@18.3.1): resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} peerDependencies: react: ^18.2.0 dependencies: loose-envify: 1.4.0 - react: 18.2.0 - scheduler: 0.23.0 + react: 18.3.1 + scheduler: 0.23.2 + dev: false + + /react-dom@18.3.1(react@18.3.1): + resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} + peerDependencies: + react: ^18.3.1 + dependencies: + loose-envify: 1.4.0 + react: 18.3.1 + scheduler: 0.23.2 dev: false /react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} - /react-is@18.2.0: - resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} + /react-is@18.3.1: + resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} dev: false - /react-markdown@8.0.7(@types/react@18.0.28)(react@18.2.0): + /react-markdown@8.0.7(@types/react@18.0.28)(react@18.3.1): resolution: {integrity: sha512-bvWbzG4MtOU62XqBx3Xx+zB2raaFFsq4mYiAzfjXJMEz2sixgeAfraA3tvzULF02ZdOMUOKTBFFaZJDDrq+BJQ==} peerDependencies: '@types/react': '>=16' @@ -6964,8 +6994,8 @@ packages: hast-util-whitespace: 2.0.1 prop-types: 15.8.1 property-information: 6.5.0 - react: 18.2.0 - react-is: 18.2.0 + react: 18.3.1 + react-is: 18.3.1 remark-parse: 10.0.2 remark-rehype: 10.1.0 space-separated-tokens: 2.0.2 @@ -6977,7 +7007,7 @@ packages: - supports-color dev: false - /react-remove-scroll-bar@2.3.6(@types/react@18.0.28)(react@18.2.0): + /react-remove-scroll-bar@2.3.6(@types/react@18.0.28)(react@18.3.1): resolution: {integrity: sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g==} engines: {node: '>=10'} peerDependencies: @@ -6988,12 +7018,12 @@ packages: optional: true dependencies: '@types/react': 18.0.28 - react: 18.2.0 - react-style-singleton: 2.2.1(@types/react@18.0.28)(react@18.2.0) + react: 18.3.1 + react-style-singleton: 2.2.1(@types/react@18.0.28)(react@18.3.1) tslib: 2.6.2 dev: false - /react-remove-scroll@2.5.5(@types/react@18.0.28)(react@18.2.0): + /react-remove-scroll@2.5.5(@types/react@18.0.28)(react@18.3.1): resolution: {integrity: sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==} engines: {node: '>=10'} peerDependencies: @@ -7004,15 +7034,15 @@ packages: optional: true dependencies: '@types/react': 18.0.28 - react: 18.2.0 - react-remove-scroll-bar: 2.3.6(@types/react@18.0.28)(react@18.2.0) - react-style-singleton: 2.2.1(@types/react@18.0.28)(react@18.2.0) + react: 18.3.1 + react-remove-scroll-bar: 2.3.6(@types/react@18.0.28)(react@18.3.1) + react-style-singleton: 2.2.1(@types/react@18.0.28)(react@18.3.1) tslib: 2.6.2 - use-callback-ref: 1.3.2(@types/react@18.0.28)(react@18.2.0) - use-sidecar: 1.1.2(@types/react@18.0.28)(react@18.2.0) + use-callback-ref: 1.3.2(@types/react@18.0.28)(react@18.3.1) + use-sidecar: 1.1.2(@types/react@18.0.28)(react@18.3.1) dev: false - /react-smooth@4.0.1(react-dom@18.2.0)(react@18.2.0): + /react-smooth@4.0.1(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-OE4hm7XqR0jNOq3Qmk9mFLyd6p2+j6bvbPJ7qlB7+oo0eNcL2l7WQzG6MBnT3EXY6xzkLMUBec3AfewJdA0J8w==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -7020,12 +7050,12 @@ packages: dependencies: fast-equals: 5.0.1 prop-types: 15.8.1 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - react-transition-group: 4.4.5(react-dom@18.2.0)(react@18.2.0) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-transition-group: 4.4.5(react-dom@18.3.1)(react@18.3.1) dev: false - /react-style-singleton@2.2.1(@types/react@18.0.28)(react@18.2.0): + /react-style-singleton@2.2.1(@types/react@18.0.28)(react@18.3.1): resolution: {integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==} engines: {node: '>=10'} peerDependencies: @@ -7038,63 +7068,63 @@ packages: '@types/react': 18.0.28 get-nonce: 1.0.1 invariant: 2.2.4 - react: 18.2.0 + react: 18.3.1 tslib: 2.6.2 dev: false - /react-textarea-autosize@8.5.3(@types/react@18.2.78)(react@18.2.0): + /react-textarea-autosize@8.5.3(@types/react@18.3.1)(react@18.3.1): resolution: {integrity: sha512-XT1024o2pqCuZSuBt9FwHlaDeNtVrtCXu0Rnz88t1jUGheCLa3PhjE1GH8Ctm2axEtvdCl5SUHYschyQ0L5QHQ==} engines: {node: '>=10'} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: - '@babel/runtime': 7.24.4 - react: 18.2.0 - use-composed-ref: 1.3.0(react@18.2.0) - use-latest: 1.2.1(@types/react@18.2.78)(react@18.2.0) + '@babel/runtime': 7.24.5 + react: 18.3.1 + use-composed-ref: 1.3.0(react@18.3.1) + use-latest: 1.2.1(@types/react@18.3.1)(react@18.3.1) transitivePeerDependencies: - '@types/react' dev: false - /react-transition-group@4.4.5(react-dom@18.2.0)(react@18.2.0): + /react-transition-group@4.4.5(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==} peerDependencies: react: '>=16.6.0' react-dom: '>=16.6.0' dependencies: - '@babel/runtime': 7.24.4 + '@babel/runtime': 7.24.5 dom-helpers: 5.2.1 loose-envify: 1.4.0 prop-types: 15.8.1 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) dev: false - /react-transition-state@2.1.1(react-dom@18.2.0)(react@18.2.0): + /react-transition-state@2.1.1(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-kQx5g1FVu9knoz1T1WkapjUgFz08qQ/g1OmuWGi3/AoEFfS0kStxrPlZx81urjCXdz2d+1DqLpU6TyLW/Ro04Q==} peerDependencies: react: '>=16.8.0' react-dom: '>=16.8.0' dependencies: - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) dev: false - /react-tweet@3.2.1(react-dom@18.2.0)(react@18.2.0): + /react-tweet@3.2.1(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-dktP3RMuwRB4pnSDocKpSsW5Hq1IXRW6fONkHhxT5EBIXsKZzdQuI70qtub1XN2dtZdkJWWxfBm/Q+kN+vRYFA==} peerDependencies: react: '>= 18.0.0' react-dom: '>= 18.0.0' dependencies: - '@swc/helpers': 0.5.10 - clsx: 2.1.0 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - swr: 2.2.5(react@18.2.0) + '@swc/helpers': 0.5.11 + clsx: 2.1.1 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + swr: 2.2.5(react@18.3.1) dev: false - /react@18.2.0: - resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} + /react@18.3.1: + resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} engines: {node: '>=0.10.0'} dependencies: loose-envify: 1.4.0 @@ -7126,20 +7156,20 @@ packages: decimal.js-light: 2.5.1 dev: false - /recharts@2.12.5(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-Cy+BkqrFIYTHJCyKHJEPvbHE2kVQEP6PKbOHJ8ztRGTAhvHuUnCwDaKVb13OwRFZ0QNUk1QvGTDdgWSMbuMtKw==} + /recharts@2.12.6(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-D+7j9WI+D0NHauah3fKHuNNcRK8bOypPW7os1DERinogGBGaHI7i6tQKJ0aUF3JXyBZ63dyfKIW2WTOPJDxJ8w==} engines: {node: '>=14'} peerDependencies: react: ^16.0.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.0.0 || ^17.0.0 || ^18.0.0 dependencies: - clsx: 2.1.0 + clsx: 2.1.1 eventemitter3: 4.0.7 lodash: 4.17.21 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) react-is: 16.13.1 - react-smooth: 4.0.1(react-dom@18.2.0)(react@18.2.0) + react-smooth: 4.0.1(react-dom@18.3.1)(react@18.3.1) recharts-scale: 0.4.5 tiny-invariant: 1.3.3 victory-vendor: 36.9.2 @@ -7154,7 +7184,7 @@ packages: es-abstract: 1.23.3 es-errors: 1.3.0 get-intrinsic: 1.2.4 - globalthis: 1.0.3 + globalthis: 1.0.4 which-builtin-type: 1.1.3 /regenerator-runtime@0.14.1: @@ -7301,8 +7331,8 @@ packages: xmlchars: 2.2.0 dev: false - /scheduler@0.23.0: - resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} + /scheduler@0.23.2: + resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} dependencies: loose-envify: 1.4.0 dev: false @@ -7375,7 +7405,7 @@ packages: prebuild-install: 7.1.2 semver: 7.6.0 simple-get: 4.0.1 - tar-fs: 3.0.5 + tar-fs: 3.0.6 tunnel-agent: 0.6.0 dev: false @@ -7428,43 +7458,43 @@ packages: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} - /solid-js@1.8.16: - resolution: {integrity: sha512-rja94MNU9flF3qQRLNsu60QHKBDKBkVE1DldJZPIfn2ypIn3NV2WpSbGTQIvsyGPBo+9E2IMjwqnqpbgfWuzeg==} + /solid-js@1.8.17: + resolution: {integrity: sha512-E0FkUgv9sG/gEBWkHr/2XkBluHb1fkrHywUgA6o6XolPDCJ4g1HaLmQufcBBhiF36ee40q+HpG/vCZu7fLpI3Q==} dependencies: csstype: 3.1.3 seroval: 1.0.5 seroval-plugins: 1.0.5(seroval@1.0.5) dev: false - /solid-swr-store@0.10.7(solid-js@1.8.16)(swr-store@0.10.6): + /solid-swr-store@0.10.7(solid-js@1.8.17)(swr-store@0.10.6): resolution: {integrity: sha512-A6d68aJmRP471aWqKKPE2tpgOiR5fH4qXQNfKIec+Vap+MGQm3tvXlT8n0I8UgJSlNAsSAUuw2VTviH2h3Vv5g==} engines: {node: '>=10'} peerDependencies: solid-js: ^1.2 swr-store: ^0.10 dependencies: - solid-js: 1.8.16 + solid-js: 1.8.17 swr-store: 0.10.6 dev: false - /sonner@0.7.4(react-dom@18.2.0)(react@18.2.0): + /sonner@0.7.4(react-dom@18.2.0)(react@18.3.1): resolution: {integrity: sha512-xRVYOCTAxJge7hRGSwu7q+gIS9B2csuOZw8yNEaXe/qlncft5a7UmkttGNb4LOGu79rAB/GJ6JQbUMpJNf51Nw==} peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 dependencies: - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) + react: 18.3.1 + react-dom: 18.2.0(react@18.3.1) dev: false - /sonner@1.4.41(react-dom@18.2.0)(react@18.2.0): + /sonner@1.4.41(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-uG511ggnnsw6gcn/X+YKkWPo5ep9il9wYi3QJxHsYe7yTZ4+cOd1wuodOUmOpFuXL+/RE3R04LczdNCDygTDgQ==} peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 dependencies: - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) dev: false /source-map-js@1.2.0: @@ -7500,12 +7530,12 @@ packages: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} dev: false - /sswr@2.0.0(svelte@4.2.14): + /sswr@2.0.0(svelte@4.2.15): resolution: {integrity: sha512-mV0kkeBHcjcb0M5NqKtKVg/uTIYNlIIniyDfSGrSfxpEdM9C365jK0z55pl9K0xAkNTJi2OAOVFQpgMPUk+V0w==} peerDependencies: svelte: ^4.0.0 dependencies: - svelte: 4.2.14 + svelte: 4.2.15 swrev: 4.0.0 dev: false @@ -7636,7 +7666,7 @@ packages: inline-style-parser: 0.1.1 dev: false - /styled-jsx@5.1.1(react@18.2.0): + /styled-jsx@5.1.1(react@18.3.1): resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==} engines: {node: '>= 12.0.0'} peerDependencies: @@ -7650,7 +7680,7 @@ packages: optional: true dependencies: client-only: 0.0.1 - react: 18.2.0 + react: 18.3.1 dev: false /sucrase@3.35.0: @@ -7690,8 +7720,8 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - /svelte@4.2.14: - resolution: {integrity: sha512-ry3+YlWqZpHxLy45MW4MZIxNdvB+Wl7p2nnstWKbOAewaJyNJuOtivSbRChcfIej6wFBjWqyKmf/NgK1uW2JAA==} + /svelte@4.2.15: + resolution: {integrity: sha512-j9KJSccHgLeRERPlhMKrCXpk2TqL2m5Z+k+OBTQhZOhIdCCd3WfqV+ylPWeipEwq17P/ekiSFWwrVQv93i3bsg==} engines: {node: '>=16'} dependencies: '@ampproject/remapping': 2.3.0 @@ -7706,7 +7736,7 @@ packages: estree-walker: 3.0.3 is-reference: 3.0.2 locate-character: 3.0.0 - magic-string: 0.30.9 + magic-string: 0.30.10 periscopic: 3.1.0 dev: false @@ -7717,35 +7747,35 @@ packages: dequal: 2.0.3 dev: false - /swr@2.2.0(react@18.2.0): + /swr@2.2.0(react@18.3.1): resolution: {integrity: sha512-AjqHOv2lAhkuUdIiBu9xbuettzAzWXmCEcLONNKJRba87WAefz8Ca9d6ds/SzrPc235n1IxWYdhJ2zF3MNUaoQ==} peerDependencies: react: ^16.11.0 || ^17.0.0 || ^18.0.0 dependencies: - react: 18.2.0 - use-sync-external-store: 1.2.0(react@18.2.0) + react: 18.3.1 + use-sync-external-store: 1.2.2(react@18.3.1) dev: false - /swr@2.2.5(react@18.2.0): + /swr@2.2.5(react@18.3.1): resolution: {integrity: sha512-QtxqyclFeAsxEUeZIYmsaQ0UjimSq1RZ9Un7I68/0ClKK/U3LoyQunwkQfJZr2fc22DfIXLNDc2wFyTEikCUpg==} peerDependencies: react: ^16.11.0 || ^17.0.0 || ^18.0.0 dependencies: client-only: 0.0.1 - react: 18.2.0 - use-sync-external-store: 1.2.0(react@18.2.0) + react: 18.3.1 + use-sync-external-store: 1.2.2(react@18.3.1) dev: false /swrev@4.0.0: resolution: {integrity: sha512-LqVcOHSB4cPGgitD1riJ1Hh4vdmITOp+BkmfmXRh4hSF/t7EnS4iD+SOTmq7w5pPm/SiPeto4ADbKS6dHUDWFA==} dev: false - /swrv@1.0.4(vue@3.4.22): + /swrv@1.0.4(vue@3.4.27): resolution: {integrity: sha512-zjEkcP8Ywmj+xOJW3lIT65ciY/4AL4e/Or7Gj0MzU3zBJNMdJiT8geVZhINavnlHRMMCcJLHhraLTAiDOTmQ9g==} peerDependencies: vue: '>=3.2.26 < 4' dependencies: - vue: 3.4.22(typescript@5.4.5) + vue: 3.4.27(typescript@5.4.5) dev: false /symbol-tree@3.2.4: @@ -7760,10 +7790,10 @@ packages: resolution: {integrity: sha512-3mFKyCo/MBcgyOTlrY8T7odzZFx+w+qKSMAmdFzRvqBfLlSigU6TZnlFHK0lkMwj9Bj8OYU+9yW9lmGuS0QEnQ==} dev: false - /tailwind-merge@2.2.2: - resolution: {integrity: sha512-tWANXsnmJzgw6mQ07nE3aCDkCK4QdT3ThPMCzawoYA2Pws7vSTCvz3Vrjg61jVUGfFZPJzxEP+NimbcW+EdaDw==} + /tailwind-merge@2.3.0: + resolution: {integrity: sha512-vkYrLpIP+lgR0tQCG6AP7zZXCTLc1Lnv/CCRT3BqJ9CZ3ui2++GPaGb1x/ILsINIMSYqqvrpqjUFsMNLlW99EA==} dependencies: - '@babel/runtime': 7.24.4 + '@babel/runtime': 7.24.5 dev: false /tailwindcss-animate@1.0.7(tailwindcss@3.4.3): @@ -7817,14 +7847,14 @@ packages: tar-stream: 2.2.0 dev: false - /tar-fs@3.0.5: - resolution: {integrity: sha512-JOgGAmZyMgbqpLwct7ZV8VzkEB6pxXFBVErLtb+XCOqzc6w1xiWKI9GVd6bwk68EX7eJ4DWmfXVmq8K2ziZTGg==} + /tar-fs@3.0.6: + resolution: {integrity: sha512-iokBDQQkUyeXhgPYaZxmczGPhnhXZ0CmrqI+MOb/WFGS9DW5wnfrLgtjUJBvz50vQ3qfRwJ62QVoCFu8mPVu5w==} dependencies: pump: 3.0.0 tar-stream: 3.1.7 optionalDependencies: - bare-fs: 2.2.3 - bare-path: 2.1.1 + bare-fs: 2.3.0 + bare-path: 2.1.2 dev: false /tar-stream@2.2.0: @@ -7877,13 +7907,13 @@ packages: '@popperjs/core': 2.11.8 dev: false - /tiptap-markdown@0.8.10(@tiptap/core@2.3.0): + /tiptap-markdown@0.8.10(@tiptap/core@2.3.1): resolution: {integrity: sha512-iDVkR2BjAqkTDtFX0h94yVvE2AihCXlF0Q7RIXSJPRSR5I0PA1TMuAg6FHFpmqTn4tPxJ0by0CK7PUMlnFLGEQ==} peerDependencies: '@tiptap/core': ^2.0.3 dependencies: - '@tiptap/core': 2.3.0(@tiptap/pm@2.3.0) - '@types/markdown-it': 13.0.7 + '@tiptap/core': 2.3.1(@tiptap/pm@2.3.1) + '@types/markdown-it': 13.0.8 markdown-it: 14.1.0 markdown-it-task-lists: 2.1.1 prosemirror-markdown: 1.12.0 @@ -7900,8 +7930,8 @@ packages: dependencies: is-number: 7.0.0 - /tough-cookie@4.1.3: - resolution: {integrity: sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==} + /tough-cookie@4.1.4: + resolution: {integrity: sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==} engines: {node: '>=6'} dependencies: psl: 1.9.0 @@ -8156,8 +8186,8 @@ packages: engines: {node: '>= 4.0.0'} dev: false - /update-browserslist-db@1.0.13(browserslist@4.23.0): - resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} + /update-browserslist-db@1.0.15(browserslist@4.23.0): + resolution: {integrity: sha512-K9HWH62x3/EalU1U6sjSZiylm9C8tgq2mSvshZpqc7QE69RaA2qjhkW2HlNA0tFpEbtyFz7HTqbSdN4MSwUodA==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' @@ -8179,7 +8209,7 @@ packages: requires-port: 1.0.0 dev: false - /use-callback-ref@1.3.2(@types/react@18.0.28)(react@18.2.0): + /use-callback-ref@1.3.2(@types/react@18.0.28)(react@18.3.1): resolution: {integrity: sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA==} engines: {node: '>=10'} peerDependencies: @@ -8190,37 +8220,37 @@ packages: optional: true dependencies: '@types/react': 18.0.28 - react: 18.2.0 + react: 18.3.1 tslib: 2.6.2 dev: false - /use-composed-ref@1.3.0(react@18.2.0): + /use-composed-ref@1.3.0(react@18.3.1): resolution: {integrity: sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: - react: 18.2.0 + react: 18.3.1 dev: false - /use-debounce@10.0.0(react@18.2.0): + /use-debounce@10.0.0(react@18.3.1): resolution: {integrity: sha512-XRjvlvCB46bah9IBXVnq/ACP2lxqXyZj0D9hj4K5OzNroMDpTEBg8Anuh1/UfRTRs7pLhQ+RiNxxwZu9+MVl1A==} engines: {node: '>= 16.0.0'} peerDependencies: react: '>=16.8.0' dependencies: - react: 18.2.0 + react: 18.3.1 dev: false - /use-debounce@9.0.4(react@18.2.0): + /use-debounce@9.0.4(react@18.3.1): resolution: {integrity: sha512-6X8H/mikbrt0XE8e+JXRtZ8yYVvKkdYRfmIhWZYsP8rcNs9hk3APV8Ua2mFkKRLcJKVdnX2/Vwrmg2GWKUQEaQ==} engines: {node: '>= 10.0.0'} peerDependencies: react: '>=16.8.0' dependencies: - react: 18.2.0 + react: 18.3.1 dev: false - /use-isomorphic-layout-effect@1.1.2(@types/react@18.2.78)(react@18.2.0): + /use-isomorphic-layout-effect@1.1.2(@types/react@18.3.1)(react@18.3.1): resolution: {integrity: sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==} peerDependencies: '@types/react': '*' @@ -8229,11 +8259,11 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 18.2.78 - react: 18.2.0 + '@types/react': 18.3.1 + react: 18.3.1 dev: false - /use-latest@1.2.1(@types/react@18.2.78)(react@18.2.0): + /use-latest@1.2.1(@types/react@18.3.1)(react@18.3.1): resolution: {integrity: sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==} peerDependencies: '@types/react': '*' @@ -8242,12 +8272,12 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 18.2.78 - react: 18.2.0 - use-isomorphic-layout-effect: 1.1.2(@types/react@18.2.78)(react@18.2.0) + '@types/react': 18.3.1 + react: 18.3.1 + use-isomorphic-layout-effect: 1.1.2(@types/react@18.3.1)(react@18.3.1) dev: false - /use-sidecar@1.1.2(@types/react@18.0.28)(react@18.2.0): + /use-sidecar@1.1.2(@types/react@18.0.28)(react@18.3.1): resolution: {integrity: sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==} engines: {node: '>=10'} peerDependencies: @@ -8259,16 +8289,16 @@ packages: dependencies: '@types/react': 18.0.28 detect-node-es: 1.1.0 - react: 18.2.0 + react: 18.3.1 tslib: 2.6.2 dev: false - /use-sync-external-store@1.2.0(react@18.2.0): - resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==} + /use-sync-external-store@1.2.2(react@18.3.1): + resolution: {integrity: sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: - react: 18.2.0 + react: 18.3.1 dev: false /utf-8-validate@6.0.3: @@ -8276,7 +8306,7 @@ packages: engines: {node: '>=6.14.2'} requiresBuild: true dependencies: - node-gyp-build: 4.8.0 + node-gyp-build: 4.8.1 dev: false /util-deprecate@1.0.2: @@ -8341,19 +8371,19 @@ packages: d3-timer: 3.0.1 dev: false - /vue@3.4.22(typescript@5.4.5): - resolution: {integrity: sha512-CIx7NiP+n5WHBCG/fDNaUPP4qbQ5CIa8XIHZE3HpfS/rb2vmSIsp74BxsZyrrGKF0vHW3GoToqP3l0hzrMTecw==} + /vue@3.4.27(typescript@5.4.5): + resolution: {integrity: sha512-8s/56uK6r01r1icG/aEOHqyMVxd1bkYcSe9j8HcKtr/xTOFWvnzIVTehNW+5Yt89f+DLBe4A569pnZLS5HzAMA==} peerDependencies: typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - '@vue/compiler-dom': 3.4.22 - '@vue/compiler-sfc': 3.4.22 - '@vue/runtime-dom': 3.4.22 - '@vue/server-renderer': 3.4.22(vue@3.4.22) - '@vue/shared': 3.4.22 + '@vue/compiler-dom': 3.4.27 + '@vue/compiler-sfc': 3.4.27 + '@vue/runtime-dom': 3.4.27 + '@vue/server-renderer': 3.4.27(vue@3.4.27) + '@vue/shared': 3.4.27 typescript: 5.4.5 dev: false @@ -8453,6 +8483,10 @@ packages: dependencies: isexe: 2.0.0 + /word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + /wordwrap@1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} dev: true @@ -8492,8 +8526,8 @@ packages: utf-8-validate: 6.0.3 dev: false - /ws@8.16.0: - resolution: {integrity: sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==} + /ws@8.17.0: + resolution: {integrity: sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -8522,8 +8556,8 @@ packages: /yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - /yaml@2.4.1: - resolution: {integrity: sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg==} + /yaml@2.4.2: + resolution: {integrity: sha512-B3VqDZ+JAg1nZpaEmWtTXUlBneoGx6CPM9b0TENK6aoSu5t73dItudwdgmi6tHlIZZId4dZ9skcAQ2UbcyAeVA==} engines: {node: '>= 14'} hasBin: true @@ -8535,8 +8569,8 @@ packages: resolution: {integrity: sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==} dev: false - /zod@3.22.4: - resolution: {integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==} + /zod@3.23.6: + resolution: {integrity: sha512-RTHJlZhsRbuA8Hmp/iNL7jnfc4nZishjsanDAfEY1QpDQZCahUp3xDzl+zfweE9BklxMUcgBgS1b7Lvie/ZVwA==} dev: true /zwitch@2.0.4: diff --git a/tsconfig.json b/tsconfig.json index e06a4454a..1b65c62e6 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,6 +1,6 @@ { "compilerOptions": { - "target": "es5", + "target": "esnext", "lib": ["dom", "dom.iterable", "esnext"], "allowJs": true, "skipLibCheck": true, From 18c4e96b6fafa0296f3d6c1051b779139ad907a1 Mon Sep 17 00:00:00 2001 From: realmikesolo Date: Tue, 7 May 2024 22:23:34 +0200 Subject: [PATCH 07/14] cleanup --- .env.example | 3 +- app/api/migrate/route.ts | 60 +++++++++++++++------------------------- lib/actions.ts | 31 ++++++--------------- lib/db/schema.ts | 2 +- 4 files changed, 33 insertions(+), 63 deletions(-) diff --git a/.env.example b/.env.example index 3f10b1ab4..f3b864070 100644 --- a/.env.example +++ b/.env.example @@ -13,8 +13,7 @@ NEXTAUTH_URL=http://app.localhost:3000 NEXT_PUBLIC_ROOT_DOMAIN=vercel.pub # PostgreSQL database URL – get one here: https://vercel.com/docs/storage/vercel-postgres/quickstart -POSTGRES_PRISMA_URL= -POSTGRES_URL_NON_POOLING= +POSTGRES_URL= # Vercel Blob Storage for image uploads – currently in beta, please fill out this form for access: https://tally.so/r/nPDMNd. Setup instructions: https://vercel.com/docs/storage/vercel-blob/quickstart BLOB_READ_WRITE_TOKEN= diff --git a/app/api/migrate/route.ts b/app/api/migrate/route.ts index 785ddc373..119c99a66 100644 --- a/app/api/migrate/route.ts +++ b/app/api/migrate/route.ts @@ -6,50 +6,36 @@ */ import { NextResponse } from "next/server"; -// import prisma from "@/lib/prisma"; +// import db from "@/lib/db/db"; export async function GET() { - // Download data from old database - // const users = await prisma.user.findMany(); - // const accounts = await prisma.account.findMany(); - // const sites = await prisma.site.findMany(); - // const posts = await prisma.post.findMany(); - // const examples = await prisma.example.findMany(); + // Download data from old database + // const usersResult = await db.query.users.findMany(); + // const accountsResult = await db.query.accounts.findMany(); + // const sitesResult = await db.query.sites.findMany(); + // const postsResult = await db.query.posts.findMany();; + // const examplesResult = await db.query.examples.findMany();; - // fs.writeFileSync("users.json", JSON.stringify(users)); - // fs.writeFileSync("accounts.json", JSON.stringify(accounts)); - // fs.writeFileSync("sites.json", JSON.stringify(sites)); - // fs.writeFileSync("posts.json", JSON.stringify(posts)); - // fs.writeFileSync("examples.json", JSON.stringify(examples)); + // fs.writeFileSync("users.json", JSON.stringify(usersResult)); + // fs.writeFileSync("accounts.json", JSON.stringify(accountsResult)); + // fs.writeFileSync("sites.json", JSON.stringify(sitesResult)); + // fs.writeFileSync("posts.json", JSON.stringify(postsResult)); + // fs.writeFileSync("examples.json", JSON.stringify(examplesResult)); // Upload data to new database - // const users = JSON.parse(fs.readFileSync("users.json", "utf8")); - // const accounts = JSON.parse(fs.readFileSync("accounts.json", "utf8")); - // const sites = JSON.parse(fs.readFileSync("sites.json", "utf8")); - // const posts = JSON.parse(fs.readFileSync("posts.json", "utf8")); - // const examples = JSON.parse(fs.readFileSync("examples.json", "utf8")); + // const parsedUsers = JSON.parse(fs.readFileSync("users.json", "utf8")); + // const parsedAccounts = JSON.parse(fs.readFileSync("accounts.json", "utf8")); + // const parsedSites = JSON.parse(fs.readFileSync("sites.json", "utf8")); + // const parsedPosts = JSON.parse(fs.readFileSync("posts.json", "utf8")); + // const parsedExamples = JSON.parse(fs.readFileSync("examples.json", "utf8")); // const response = await Promise.all([ - // prisma.user.createMany({ - // data: users, - // skipDuplicates: true, - // }), - // prisma.account.createMany({ - // data: accounts, - // skipDuplicates: true, - // }), - // prisma.site.createMany({ - // data: sites, - // skipDuplicates: true, - // }), - // prisma.post.createMany({ - // data: posts, - // skipDuplicates: true, - // }), - // prisma.example.createMany({ - // data: examples, - // skipDuplicates: true, - // }) + // db.insert(users).values(parsedUsers), + // db.insert(accounts).values(parsedAccounts), + // db.insert(sites).values(parsedSites), + // db.insert(posts).values(parsedPosts), + // db.insert(examples).values(parsedExamples) + // ]); return NextResponse.json({ response: "ok" }); } diff --git a/lib/actions.ts b/lib/actions.ts index d34393aec..f39e24995 100644 --- a/lib/actions.ts +++ b/lib/actions.ts @@ -1,19 +1,19 @@ "use server"; import { getSession } from "@/lib/auth"; -import { revalidateTag } from "next/cache"; -import db from "./db/db"; -import { SelectPost, SelectSite, posts, sites, users } from "./db/schema"; import { addDomainToVercel, removeDomainFromVercelProject, validDomainRegex, } from "@/lib/domains"; -import { withPostAuth, withSiteAuth } from "./auth"; -import { customAlphabet } from "nanoid"; import { getBlurDataURL } from "@/lib/utils"; -import { eq } from "drizzle-orm"; import { put } from "@vercel/blob"; +import { eq } from "drizzle-orm"; +import { customAlphabet } from "nanoid"; +import { revalidateTag } from "next/cache"; +import { withPostAuth, withSiteAuth } from "./auth"; +import db from "./db/db"; +import { SelectPost, SelectSite, posts, sites, users } from "./db/schema"; const nanoid = customAlphabet( "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz", @@ -39,7 +39,6 @@ export const createSite = async (formData: FormData) => { description, subdomain, userId: session.user.id, - updatedAt: new Date(), }) .returning(); @@ -111,20 +110,8 @@ export const updateSite = withSiteAuth( // first, we need to check if the apex domain is being used by other sites const apexDomain = getApexDomain(`https://${site.customDomain}`); - const domainCount = await prisma.site.count({ - where: { - OR: [ - { - customDomain: apexDomain, - }, - { - customDomain: { - endsWith: `.${apexDomain}`, - }, - }, - ], - }, - }); + const domainCount = await db.select({ count: count() }).from(sites).where(or(eq(sites.customDomain, apexDomain), ilike(sites.customDomain, `%.${apexDomain}`))).then((res) => res[0].count); + // if the apex domain is being used by other sites // we should only remove it from our Vercel project @@ -250,7 +237,6 @@ export const createPost = withSiteAuth( .values({ siteId: site.id, userId: session.user.id, - updatedAt: new Date(), }) .returning(); @@ -292,7 +278,6 @@ export const updatePost = async (data: SelectPost) => { title: data.title, description: data.description, content: data.content, - updatedAt: new Date(), }) .where(eq(posts.id, data.id)) .returning(); diff --git a/lib/db/schema.ts b/lib/db/schema.ts index e6e514fa3..4b2601d77 100644 --- a/lib/db/schema.ts +++ b/lib/db/schema.ts @@ -61,7 +61,7 @@ export const verificationTokens = pgTable( ); export const examples = pgTable("example", { - id: serial("id").primaryKey().notNull(), + id: serial("id").primaryKey(), name: text("name"), description: text("description"), domainCount: integer("domain_count"), From 128d055888b493c2451ca0709a730579395b7ced Mon Sep 17 00:00:00 2001 From: realmikesolo Date: Sat, 11 May 2024 18:30:37 +0200 Subject: [PATCH 08/14] add: prisma compatible schema for drizzle & update: current drizzle schema --- app/[domain]/[slug]/page.tsx | 2 +- lib/db/schema.ts | 55 +- package.json | 2 +- pnpm-lock.yaml | 14 +- .../migrations/0000_bright_black_queen.sql | 140 ++++ .../migrations/meta/0000_snapshot.json | 708 ++++++++++++++++++ .../migrations/meta/_journal.json | 13 + .../migrations/prisma-compatible-schema.ts | 239 ++++++ 8 files changed, 1136 insertions(+), 37 deletions(-) create mode 100644 prisma-compatible/migrations/0000_bright_black_queen.sql create mode 100644 prisma-compatible/migrations/meta/0000_snapshot.json create mode 100644 prisma-compatible/migrations/meta/_journal.json create mode 100644 prisma-compatible/migrations/prisma-compatible-schema.ts diff --git a/app/[domain]/[slug]/page.tsx b/app/[domain]/[slug]/page.tsx index fe78d7ff8..6f22a10d9 100644 --- a/app/[domain]/[slug]/page.tsx +++ b/app/[domain]/[slug]/page.tsx @@ -109,7 +109,7 @@ export default async function SitePostPage({ href={ data.site?.user?.username ? `https://twitter.com/${data.site.user.username}` - : `https://github.com/${data.site?.user?.ghUsername}` + : `https://github.com/${data.site?.user?.gh_username}` } rel="noreferrer" target="_blank" diff --git a/lib/db/schema.ts b/lib/db/schema.ts index 4b2601d77..732f7d75f 100644 --- a/lib/db/schema.ts +++ b/lib/db/schema.ts @@ -1,17 +1,16 @@ +import { createId } from "@paralleldrive/cuid2"; +import { relations } from "drizzle-orm"; import { - pgTable, - uniqueIndex, + boolean, index, - text, - timestamp, - serial, integer, - boolean, + pgTable, primaryKey, - varchar, + serial, + text, + timestamp, + uniqueIndex } from "drizzle-orm/pg-core"; -import { relations } from "drizzle-orm"; -import { createId } from "@paralleldrive/cuid2"; export const users = pgTable("user", { id: text("id") @@ -20,12 +19,12 @@ export const users = pgTable("user", { name: text("name"), // if you are using Github OAuth, you can get rid of the username attribute (that is for Twitter OAuth) username: text("username"), - ghUsername: text("gh_username"), + gh_username: text("gh_username"), email: text("email").notNull().unique(), emailVerified: timestamp("emailVerified", { mode: "date" }), image: text("image"), - createdAt: timestamp("created_at", { mode: "date" }).defaultNow().notNull(), - updatedAt: timestamp("updated_at", { mode: "date" }) + createdAt: timestamp("createdAt", { mode: "date" }).defaultNow().notNull(), + updatedAt: timestamp("updatedAt", { mode: "date" }) .notNull() .$onUpdate(() => new Date()), }); @@ -36,7 +35,7 @@ export const sessions = pgTable( sessionToken: text("sessionToken").primaryKey(), userId: text("userId") .notNull() - .references(() => users.id, { onDelete: "cascade" }), + .references(() => users.id, { onDelete: "cascade", onUpdate: "cascade" }), expires: timestamp("expires", { mode: "date" }).notNull(), }, (table) => { @@ -64,10 +63,10 @@ export const examples = pgTable("example", { id: serial("id").primaryKey(), name: text("name"), description: text("description"), - domainCount: integer("domain_count"), + domainCount: integer("domainCount"), url: text("url"), image: text("image"), - imageBlurhash: text("image_blurhash"), + imageBlurhash: text("imageBlurhash"), }); export const accounts = pgTable( @@ -75,7 +74,7 @@ export const accounts = pgTable( { userId: text("userId") .notNull() - .references(() => users.id, { onDelete: "cascade" }), + .references(() => users.id, { onDelete: "cascade", onUpdate: "cascade" }), type: text("type").notNull(), provider: text("provider").notNull(), providerAccountId: text("providerAccountId").notNull(), @@ -87,8 +86,8 @@ export const accounts = pgTable( scope: text("scope"), id_token: text("id_token"), session_state: text("session_state"), - oauthTokenSecret: text("oauth_token_secret"), - oauthToken: text("oauth_token"), + oauth_token_secret: text("oauth_token_secret"), + oauth_token: text("oauth_token"), }, (table) => { return { @@ -115,19 +114,19 @@ export const sites = pgTable( image: text("image").default( "https://public.blob.vercel-storage.com/eEZHAoPTOBSYGBE3/hxfcV5V-eInX3jbVUhjAt1suB7zB88uGd1j20b.png", ), - imageBlurhash: text("image_blurhash").default( + imageBlurhash: text("imageBlurhash").default( "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAhCAYAAACbffiEAAAACXBIWXMAABYlAAAWJQFJUiTwAAABfUlEQVR4nN3XyZLDIAwE0Pz/v3q3r55JDlSBplsIEI49h76k4opexCK/juP4eXjOT149f2Tf9ySPgcjCc7kdpBTgDPKByKK2bTPFEdMO0RDrusJ0wLRBGCIuelmWJAjkgPGDSIQEMBDCfA2CEPM80+Qwl0JkNxBimiaYGOTUlXYI60YoehzHJDEm7kxjV3whOQTD3AaCuhGKHoYhyb+CBMwjIAFz647kTqyapdV4enGINuDJMSScPmijSwjCaHeLcT77C7EC0C1ugaCTi2HYfAZANgj6Z9A8xY5eiYghDMNQBJNCWhASot0jGsSCUiHWZcSGQjaWWCDaGMOWnsCcn2QhVkRuxqqNxMSdUSElCDbp1hbNOsa6Ugxh7xXauF4DyM1m5BLtCylBXgaxvPXVwEoOBjeIFVODtW74oj1yBQah3E8tyz3SkpolKS9Geo9YMD1QJR1Go4oJkgO1pgbNZq0AOUPChyjvh7vlXaQa+X1UXwKxgHokB2XPxbX+AnijwIU4ahazAAAAAElFTkSuQmCC", ), subdomain: text("subdomain").unique(), - customDomain: text("custom_domain").unique(), + customDomain: text("customDomain").unique(), message404: text("message404").default( "Blimey! You''ve found a page that doesn''t exist.", ), - createdAt: timestamp("created_at", { mode: "date" }).defaultNow().notNull(), - updatedAt: timestamp("updated_at", { mode: "date" }) + createdAt: timestamp("createdAt", { mode: "date" }).defaultNow().notNull(), + updatedAt: timestamp("updatedAt", { mode: "date" }) .notNull() .$onUpdate(() => new Date()), - userId: text("user_id").references(() => users.id, { + userId: text("userId").references(() => users.id, { onDelete: "cascade", onUpdate: "cascade", }), @@ -154,19 +153,19 @@ export const posts = pgTable( image: text("image").default( "https://public.blob.vercel-storage.com/eEZHAoPTOBSYGBE3/hxfcV5V-eInX3jbVUhjAt1suB7zB88uGd1j20b.png", ), - imageBlurhash: text("image_blurhash").default( + imageBlurhash: text("imageBlurhash").default( "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAhCAYAAACbffiEAAAACXBIWXMAABYlAAAWJQFJUiTwAAABfUlEQVR4nN3XyZLDIAwE0Pz/v3q3r55JDlSBplsIEI49h76k4opexCK/juP4eXjOT149f2Tf9ySPgcjCc7kdpBTgDPKByKK2bTPFEdMO0RDrusJ0wLRBGCIuelmWJAjkgPGDSIQEMBDCfA2CEPM80+Qwl0JkNxBimiaYGOTUlXYI60YoehzHJDEm7kxjV3whOQTD3AaCuhGKHoYhyb+CBMwjIAFz647kTqyapdV4enGINuDJMSScPmijSwjCaHeLcT77C7EC0C1ugaCTi2HYfAZANgj6Z9A8xY5eiYghDMNQBJNCWhASot0jGsSCUiHWZcSGQjaWWCDaGMOWnsCcn2QhVkRuxqqNxMSdUSElCDbp1hbNOsa6Ugxh7xXauF4DyM1m5BLtCylBXgaxvPXVwEoOBjeIFVODtW74oj1yBQah3E8tyz3SkpolKS9Geo9YMD1QJR1Go4oJkgO1pgbNZq0AOUPChyjvh7vlXaQa+X1UXwKxgHokB2XPxbX+AnijwIU4ahazAAAAAElFTkSuQmCC", ), - createdAt: timestamp("created_at", { mode: "date" }).defaultNow().notNull(), - updatedAt: timestamp("updated_at", { mode: "date" }) + createdAt: timestamp("createdAt", { mode: "date" }).defaultNow().notNull(), + updatedAt: timestamp("updatedAt", { mode: "date" }) .notNull() .$onUpdate(() => new Date()), published: boolean("published").default(false).notNull(), - siteId: text("site_id").references(() => sites.id, { + siteId: text("siteId").references(() => sites.id, { onDelete: "cascade", onUpdate: "cascade", }), - userId: text("user_id").references(() => users.id, { + userId: text("userId").references(() => users.id, { onDelete: "cascade", onUpdate: "cascade", }), diff --git a/package.json b/package.json index 7fb7e4b7a..6f321891b 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "lint": "next lint" }, "dependencies": { - "@auth/drizzle-adapter": "^1.0.1", + "@auth/drizzle-adapter": "^1.1.0", "@paralleldrive/cuid2": "^2.2.2", "@tremor/react": "^3.11.1", "@upstash/ratelimit": "^0.4.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 677b8e4c6..95a7a774c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -6,8 +6,8 @@ settings: dependencies: '@auth/drizzle-adapter': - specifier: ^1.0.1 - version: 1.0.1 + specifier: ^1.1.0 + version: 1.1.0 '@paralleldrive/cuid2': specifier: ^2.2.2 version: 2.2.2 @@ -175,8 +175,8 @@ packages: '@jridgewell/trace-mapping': 0.3.25 dev: false - /@auth/core@0.30.0: - resolution: {integrity: sha512-8AE4m/nk+4EIiVCJwxZAsJeAQuzpEC8M8768mmKVn60CGDdupKQkVhxbRlm5Qh7eNRCoFFME+0DvtaX2aXrYaA==} + /@auth/core@0.31.0: + resolution: {integrity: sha512-UKk3psvA1cRbk4/c9CkpWB8mdWrkKvzw0DmEYRsWolUQytQ2cRqx+hYuV6ZCsngw/xbj9hpmkZmAZEyq2g4fMg==} peerDependencies: '@simplewebauthn/browser': ^9.0.1 '@simplewebauthn/server': ^9.0.2 @@ -198,10 +198,10 @@ packages: preact-render-to-string: 5.2.3(preact@10.11.3) dev: false - /@auth/drizzle-adapter@1.0.1: - resolution: {integrity: sha512-E4np2F48p930q+YeQ5ipZPv/L+9gmQcB7g6NQQyux2wtanRNOXNW4TG8wMjSRfTzccNq161YZ8Fm5le/5snkGQ==} + /@auth/drizzle-adapter@1.1.0: + resolution: {integrity: sha512-ZC83ne3Ulkxh2II2T5qazgrqc1AmWbbPzs3oR+C93DMlIV8DPIgEaw4cmbV/kesO9xO+Gt7HpkctmOa2B26A1Q==} dependencies: - '@auth/core': 0.30.0 + '@auth/core': 0.31.0 transitivePeerDependencies: - '@simplewebauthn/browser' - '@simplewebauthn/server' diff --git a/prisma-compatible/migrations/0000_bright_black_queen.sql b/prisma-compatible/migrations/0000_bright_black_queen.sql new file mode 100644 index 000000000..76b9cfe3e --- /dev/null +++ b/prisma-compatible/migrations/0000_bright_black_queen.sql @@ -0,0 +1,140 @@ +-- Current sql file was generated after introspecting the database +-- If you want to run this migration please uncomment this code before executing migrations + +CREATE TABLE IF NOT EXISTS "_prisma_migrations" ( + "id" varchar(36) PRIMARY KEY NOT NULL, + "checksum" varchar(64) NOT NULL, + "finished_at" timestamp with time zone, + "migration_name" varchar(255) NOT NULL, + "logs" text, + "rolled_back_at" timestamp with time zone, + "started_at" timestamp with time zone DEFAULT now() NOT NULL, + "applied_steps_count" integer DEFAULT 0 NOT NULL +); +--> statement-breakpoint +CREATE TABLE IF NOT EXISTS "VerificationToken" ( + "identifier" text NOT NULL, + "token" text NOT NULL, + "expires" timestamp(3) NOT NULL +); +--> statement-breakpoint +CREATE TABLE IF NOT EXISTS "Example" ( + "id" serial PRIMARY KEY NOT NULL, + "name" text, + "description" text, + "domainCount" integer, + "url" text, + "image" text, + "imageBlurhash" text +); +--> statement-breakpoint +CREATE TABLE IF NOT EXISTS "User" ( + "id" text PRIMARY KEY NOT NULL, + "name" text, + "username" text, + "gh_username" text, + "email" text, + "emailVerified" timestamp(3), + "image" text, + "createdAt" timestamp(3) DEFAULT CURRENT_TIMESTAMP NOT NULL, + "updatedAt" timestamp(3) NOT NULL +); +--> statement-breakpoint +CREATE TABLE IF NOT EXISTS "Account" ( + "id" text PRIMARY KEY NOT NULL, + "userId" text NOT NULL, + "type" text NOT NULL, + "provider" text NOT NULL, + "providerAccountId" text NOT NULL, + "refresh_token" text, + "refresh_token_expires_in" integer, + "access_token" text, + "expires_at" integer, + "token_type" text, + "scope" text, + "id_token" text, + "session_state" text, + "oauth_token_secret" text, + "oauth_token" text +); +--> statement-breakpoint +CREATE TABLE IF NOT EXISTS "Session" ( + "id" text PRIMARY KEY NOT NULL, + "sessionToken" text NOT NULL, + "userId" text NOT NULL, + "expires" timestamp(3) NOT NULL +); +--> statement-breakpoint +CREATE TABLE IF NOT EXISTS "Site" ( + "id" text PRIMARY KEY NOT NULL, + "name" text, + "description" text, + "logo" text DEFAULT 'https://public.blob.vercel-storage.com/eEZHAoPTOBSYGBE3/JRajRyC-PhBHEinQkupt02jqfKacBVHLWJq7Iy.png', + "font" text DEFAULT 'font-cal' NOT NULL, + "image" text DEFAULT 'https://public.blob.vercel-storage.com/eEZHAoPTOBSYGBE3/hxfcV5V-eInX3jbVUhjAt1suB7zB88uGd1j20b.png', + "imageBlurhash" text DEFAULT 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAhCAYAAACbffiEAAAACXBIWXMAABYlAAAWJQFJUiTwAAABfUlEQVR4nN3XyZLDIAwE0Pz/v3q3r55JDlSBplsIEI49h76k4opexCK/juP4eXjOT149f2Tf9ySPgcjCc7kdpBTgDPKByKK2bTPFEdMO0RDrusJ0wLRBGCIuelmWJAjkgPGDSIQEMBDCfA2CEPM80+Qwl0JkNxBimiaYGOTUlXYI60YoehzHJDEm7kxjV3whOQTD3AaCuhGKHoYhyb+CBMwjIAFz647kTqyapdV4enGINuDJMSScPmijSwjCaHeLcT77C7EC0C1ugaCTi2HYfAZANgj6Z9A8xY5eiYghDMNQBJNCWhASot0jGsSCUiHWZcSGQjaWWCDaGMOWnsCcn2QhVkRuxqqNxMSdUSElCDbp1hbNOsa6Ugxh7xXauF4DyM1m5BLtCylBXgaxvPXVwEoOBjeIFVODtW74oj1yBQah3E8tyz3SkpolKS9Geo9YMD1QJR1Go4oJkgO1pgbNZq0AOUPChyjvh7vlXaQa+X1UXwKxgHokB2XPxbX+AnijwIU4ahazAAAAAElFTkSuQmCC', + "subdomain" text, + "customDomain" text, + "message404" text DEFAULT 'Blimey! You''ve found a page that doesn''t exist.', + "createdAt" timestamp(3) DEFAULT CURRENT_TIMESTAMP NOT NULL, + "updatedAt" timestamp(3) NOT NULL, + "userId" text +); +--> statement-breakpoint +CREATE TABLE IF NOT EXISTS "Post" ( + "id" text PRIMARY KEY NOT NULL, + "title" text, + "description" text, + "content" text, + "slug" text NOT NULL, + "image" text DEFAULT 'https://public.blob.vercel-storage.com/eEZHAoPTOBSYGBE3/hxfcV5V-eInX3jbVUhjAt1suB7zB88uGd1j20b.png', + "imageBlurhash" text DEFAULT 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAhCAYAAACbffiEAAAACXBIWXMAABYlAAAWJQFJUiTwAAABfUlEQVR4nN3XyZLDIAwE0Pz/v3q3r55JDlSBplsIEI49h76k4opexCK/juP4eXjOT149f2Tf9ySPgcjCc7kdpBTgDPKByKK2bTPFEdMO0RDrusJ0wLRBGCIuelmWJAjkgPGDSIQEMBDCfA2CEPM80+Qwl0JkNxBimiaYGOTUlXYI60YoehzHJDEm7kxjV3whOQTD3AaCuhGKHoYhyb+CBMwjIAFz647kTqyapdV4enGINuDJMSScPmijSwjCaHeLcT77C7EC0C1ugaCTi2HYfAZANgj6Z9A8xY5eiYghDMNQBJNCWhASot0jGsSCUiHWZcSGQjaWWCDaGMOWnsCcn2QhVkRuxqqNxMSdUSElCDbp1hbNOsa6Ugxh7xXauF4DyM1m5BLtCylBXgaxvPXVwEoOBjeIFVODtW74oj1yBQah3E8tyz3SkpolKS9Geo9YMD1QJR1Go4oJkgO1pgbNZq0AOUPChyjvh7vlXaQa+X1UXwKxgHokB2XPxbX+AnijwIU4ahazAAAAAElFTkSuQmCC', + "createdAt" timestamp(3) DEFAULT CURRENT_TIMESTAMP NOT NULL, + "updatedAt" timestamp(3) NOT NULL, + "published" boolean DEFAULT false NOT NULL, + "siteId" text, + "userId" text +); +--> statement-breakpoint +CREATE UNIQUE INDEX IF NOT EXISTS "VerificationToken_token_key" ON "VerificationToken" ("token");--> statement-breakpoint +CREATE UNIQUE INDEX IF NOT EXISTS "VerificationToken_identifier_token_key" ON "VerificationToken" ("identifier","token");--> statement-breakpoint +CREATE UNIQUE INDEX IF NOT EXISTS "User_email_key" ON "User" ("email");--> statement-breakpoint +CREATE INDEX IF NOT EXISTS "Account_userId_idx" ON "Account" ("userId");--> statement-breakpoint +CREATE UNIQUE INDEX IF NOT EXISTS "Account_provider_providerAccountId_key" ON "Account" ("provider","providerAccountId");--> statement-breakpoint +CREATE UNIQUE INDEX IF NOT EXISTS "Session_sessionToken_key" ON "Session" ("sessionToken");--> statement-breakpoint +CREATE INDEX IF NOT EXISTS "Session_userId_idx" ON "Session" ("userId");--> statement-breakpoint +CREATE UNIQUE INDEX IF NOT EXISTS "Site_subdomain_key" ON "Site" ("subdomain");--> statement-breakpoint +CREATE UNIQUE INDEX IF NOT EXISTS "Site_customDomain_key" ON "Site" ("customDomain");--> statement-breakpoint +CREATE INDEX IF NOT EXISTS "Site_userId_idx" ON "Site" ("userId");--> statement-breakpoint +CREATE INDEX IF NOT EXISTS "Post_siteId_idx" ON "Post" ("siteId");--> statement-breakpoint +CREATE INDEX IF NOT EXISTS "Post_userId_idx" ON "Post" ("userId");--> statement-breakpoint +CREATE UNIQUE INDEX IF NOT EXISTS "Post_slug_siteId_key" ON "Post" ("slug","siteId");--> statement-breakpoint +DO $$ BEGIN + ALTER TABLE "Account" ADD CONSTRAINT "Account_userId_fkey" FOREIGN KEY ("userId") REFERENCES "public"."User"("id") ON DELETE cascade ON UPDATE cascade; +EXCEPTION + WHEN duplicate_object THEN null; +END $$; +--> statement-breakpoint +DO $$ BEGIN + ALTER TABLE "Session" ADD CONSTRAINT "Session_userId_fkey" FOREIGN KEY ("userId") REFERENCES "public"."User"("id") ON DELETE cascade ON UPDATE cascade; +EXCEPTION + WHEN duplicate_object THEN null; +END $$; +--> statement-breakpoint +DO $$ BEGIN + ALTER TABLE "Site" ADD CONSTRAINT "Site_userId_fkey" FOREIGN KEY ("userId") REFERENCES "public"."User"("id") ON DELETE cascade ON UPDATE cascade; +EXCEPTION + WHEN duplicate_object THEN null; +END $$; +--> statement-breakpoint +DO $$ BEGIN + ALTER TABLE "Post" ADD CONSTRAINT "Post_siteId_fkey" FOREIGN KEY ("siteId") REFERENCES "public"."Site"("id") ON DELETE cascade ON UPDATE cascade; +EXCEPTION + WHEN duplicate_object THEN null; +END $$; +--> statement-breakpoint +DO $$ BEGIN + ALTER TABLE "Post" ADD CONSTRAINT "Post_userId_fkey" FOREIGN KEY ("userId") REFERENCES "public"."User"("id") ON DELETE cascade ON UPDATE cascade; +EXCEPTION + WHEN duplicate_object THEN null; +END $$; diff --git a/prisma-compatible/migrations/meta/0000_snapshot.json b/prisma-compatible/migrations/meta/0000_snapshot.json new file mode 100644 index 000000000..b560bc168 --- /dev/null +++ b/prisma-compatible/migrations/meta/0000_snapshot.json @@ -0,0 +1,708 @@ +{ + "id": "00000000-0000-0000-0000-000000000000", + "prevId": "", + "version": "5", + "dialect": "pg", + "tables": { + "_prisma_migrations": { + "name": "_prisma_migrations", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "varchar(36)", + "primaryKey": true, + "notNull": true + }, + "checksum": { + "name": "checksum", + "type": "varchar(64)", + "primaryKey": false, + "notNull": true + }, + "finished_at": { + "name": "finished_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": false + }, + "migration_name": { + "name": "migration_name", + "type": "varchar(255)", + "primaryKey": false, + "notNull": true + }, + "logs": { + "name": "logs", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "rolled_back_at": { + "name": "rolled_back_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": false + }, + "started_at": { + "name": "started_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "applied_steps_count": { + "name": "applied_steps_count", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 0 + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "VerificationToken": { + "name": "VerificationToken", + "schema": "", + "columns": { + "identifier": { + "name": "identifier", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "token": { + "name": "token", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "expires": { + "name": "expires", + "type": "timestamp(3)", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "VerificationToken_token_key": { + "name": "VerificationToken_token_key", + "columns": [ + "token" + ], + "isUnique": true + }, + "VerificationToken_identifier_token_key": { + "name": "VerificationToken_identifier_token_key", + "columns": [ + "identifier", + "token" + ], + "isUnique": true + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "Example": { + "name": "Example", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "domainCount": { + "name": "domainCount", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "url": { + "name": "url", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "image": { + "name": "image", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "imageBlurhash": { + "name": "imageBlurhash", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "User": { + "name": "User", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "username": { + "name": "username", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "gh_username": { + "name": "gh_username", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "email": { + "name": "email", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "emailVerified": { + "name": "emailVerified", + "type": "timestamp(3)", + "primaryKey": false, + "notNull": false + }, + "image": { + "name": "image", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "createdAt": { + "name": "createdAt", + "type": "timestamp(3)", + "primaryKey": false, + "notNull": true, + "default": "CURRENT_TIMESTAMP" + }, + "updatedAt": { + "name": "updatedAt", + "type": "timestamp(3)", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "User_email_key": { + "name": "User_email_key", + "columns": [ + "email" + ], + "isUnique": true + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "Account": { + "name": "Account", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "userId": { + "name": "userId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "type": { + "name": "type", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "provider": { + "name": "provider", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "providerAccountId": { + "name": "providerAccountId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "refresh_token": { + "name": "refresh_token", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "refresh_token_expires_in": { + "name": "refresh_token_expires_in", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "access_token": { + "name": "access_token", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "expires_at": { + "name": "expires_at", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "token_type": { + "name": "token_type", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "scope": { + "name": "scope", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "id_token": { + "name": "id_token", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "session_state": { + "name": "session_state", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "oauth_token_secret": { + "name": "oauth_token_secret", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "oauth_token": { + "name": "oauth_token", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "Account_userId_idx": { + "name": "Account_userId_idx", + "columns": [ + "userId" + ], + "isUnique": false + }, + "Account_provider_providerAccountId_key": { + "name": "Account_provider_providerAccountId_key", + "columns": [ + "provider", + "providerAccountId" + ], + "isUnique": true + } + }, + "foreignKeys": { + "Account_userId_fkey": { + "name": "Account_userId_fkey", + "tableFrom": "Account", + "tableTo": "User", + "schemaTo": "public", + "columnsFrom": [ + "userId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "cascade" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "Session": { + "name": "Session", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "sessionToken": { + "name": "sessionToken", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "userId": { + "name": "userId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "expires": { + "name": "expires", + "type": "timestamp(3)", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "Session_sessionToken_key": { + "name": "Session_sessionToken_key", + "columns": [ + "sessionToken" + ], + "isUnique": true + }, + "Session_userId_idx": { + "name": "Session_userId_idx", + "columns": [ + "userId" + ], + "isUnique": false + } + }, + "foreignKeys": { + "Session_userId_fkey": { + "name": "Session_userId_fkey", + "tableFrom": "Session", + "tableTo": "User", + "schemaTo": "public", + "columnsFrom": [ + "userId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "cascade" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "Site": { + "name": "Site", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "logo": { + "name": "logo", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "'https://public.blob.vercel-storage.com/eEZHAoPTOBSYGBE3/JRajRyC-PhBHEinQkupt02jqfKacBVHLWJq7Iy.png'" + }, + "font": { + "name": "font", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'font-cal'" + }, + "image": { + "name": "image", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "'https://public.blob.vercel-storage.com/eEZHAoPTOBSYGBE3/hxfcV5V-eInX3jbVUhjAt1suB7zB88uGd1j20b.png'" + }, + "imageBlurhash": { + "name": "imageBlurhash", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAhCAYAAACbffiEAAAACXBIWXMAABYlAAAWJQFJUiTwAAABfUlEQVR4nN3XyZLDIAwE0Pz/v3q3r55JDlSBplsIEI49h76k4opexCK/juP4eXjOT149f2Tf9ySPgcjCc7kdpBTgDPKByKK2bTPFEdMO0RDrusJ0wLRBGCIuelmWJAjkgPGDSIQEMBDCfA2CEPM80+Qwl0JkNxBimiaYGOTUlXYI60YoehzHJDEm7kxjV3whOQTD3AaCuhGKHoYhyb+CBMwjIAFz647kTqyapdV4enGINuDJMSScPmijSwjCaHeLcT77C7EC0C1ugaCTi2HYfAZANgj6Z9A8xY5eiYghDMNQBJNCWhASot0jGsSCUiHWZcSGQjaWWCDaGMOWnsCcn2QhVkRuxqqNxMSdUSElCDbp1hbNOsa6Ugxh7xXauF4DyM1m5BLtCylBXgaxvPXVwEoOBjeIFVODtW74oj1yBQah3E8tyz3SkpolKS9Geo9YMD1QJR1Go4oJkgO1pgbNZq0AOUPChyjvh7vlXaQa+X1UXwKxgHokB2XPxbX+AnijwIU4ahazAAAAAElFTkSuQmCC'" + }, + "subdomain": { + "name": "subdomain", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "customDomain": { + "name": "customDomain", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "message404": { + "name": "message404", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "'Blimey! You''ve found a page that doesn''t exist.'" + }, + "createdAt": { + "name": "createdAt", + "type": "timestamp(3)", + "primaryKey": false, + "notNull": true, + "default": "CURRENT_TIMESTAMP" + }, + "updatedAt": { + "name": "updatedAt", + "type": "timestamp(3)", + "primaryKey": false, + "notNull": true + }, + "userId": { + "name": "userId", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "Site_subdomain_key": { + "name": "Site_subdomain_key", + "columns": [ + "subdomain" + ], + "isUnique": true + }, + "Site_customDomain_key": { + "name": "Site_customDomain_key", + "columns": [ + "customDomain" + ], + "isUnique": true + }, + "Site_userId_idx": { + "name": "Site_userId_idx", + "columns": [ + "userId" + ], + "isUnique": false + } + }, + "foreignKeys": { + "Site_userId_fkey": { + "name": "Site_userId_fkey", + "tableFrom": "Site", + "tableTo": "User", + "schemaTo": "public", + "columnsFrom": [ + "userId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "cascade" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "Post": { + "name": "Post", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "title": { + "name": "title", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "content": { + "name": "content", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "slug": { + "name": "slug", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "image": { + "name": "image", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "'https://public.blob.vercel-storage.com/eEZHAoPTOBSYGBE3/hxfcV5V-eInX3jbVUhjAt1suB7zB88uGd1j20b.png'" + }, + "imageBlurhash": { + "name": "imageBlurhash", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAhCAYAAACbffiEAAAACXBIWXMAABYlAAAWJQFJUiTwAAABfUlEQVR4nN3XyZLDIAwE0Pz/v3q3r55JDlSBplsIEI49h76k4opexCK/juP4eXjOT149f2Tf9ySPgcjCc7kdpBTgDPKByKK2bTPFEdMO0RDrusJ0wLRBGCIuelmWJAjkgPGDSIQEMBDCfA2CEPM80+Qwl0JkNxBimiaYGOTUlXYI60YoehzHJDEm7kxjV3whOQTD3AaCuhGKHoYhyb+CBMwjIAFz647kTqyapdV4enGINuDJMSScPmijSwjCaHeLcT77C7EC0C1ugaCTi2HYfAZANgj6Z9A8xY5eiYghDMNQBJNCWhASot0jGsSCUiHWZcSGQjaWWCDaGMOWnsCcn2QhVkRuxqqNxMSdUSElCDbp1hbNOsa6Ugxh7xXauF4DyM1m5BLtCylBXgaxvPXVwEoOBjeIFVODtW74oj1yBQah3E8tyz3SkpolKS9Geo9YMD1QJR1Go4oJkgO1pgbNZq0AOUPChyjvh7vlXaQa+X1UXwKxgHokB2XPxbX+AnijwIU4ahazAAAAAElFTkSuQmCC'" + }, + "createdAt": { + "name": "createdAt", + "type": "timestamp(3)", + "primaryKey": false, + "notNull": true, + "default": "CURRENT_TIMESTAMP" + }, + "updatedAt": { + "name": "updatedAt", + "type": "timestamp(3)", + "primaryKey": false, + "notNull": true + }, + "published": { + "name": "published", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "siteId": { + "name": "siteId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "userId": { + "name": "userId", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "Post_siteId_idx": { + "name": "Post_siteId_idx", + "columns": [ + "siteId" + ], + "isUnique": false + }, + "Post_userId_idx": { + "name": "Post_userId_idx", + "columns": [ + "userId" + ], + "isUnique": false + }, + "Post_slug_siteId_key": { + "name": "Post_slug_siteId_key", + "columns": [ + "slug", + "siteId" + ], + "isUnique": true + } + }, + "foreignKeys": { + "Post_siteId_fkey": { + "name": "Post_siteId_fkey", + "tableFrom": "Post", + "tableTo": "Site", + "schemaTo": "public", + "columnsFrom": [ + "siteId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "cascade" + }, + "Post_userId_fkey": { + "name": "Post_userId_fkey", + "tableFrom": "Post", + "tableTo": "User", + "schemaTo": "public", + "columnsFrom": [ + "userId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "cascade" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + } + }, + "enums": {}, + "schemas": {}, + "_meta": { + "schemas": {}, + "tables": {}, + "columns": {} + } +} diff --git a/prisma-compatible/migrations/meta/_journal.json b/prisma-compatible/migrations/meta/_journal.json new file mode 100644 index 000000000..b306fdf46 --- /dev/null +++ b/prisma-compatible/migrations/meta/_journal.json @@ -0,0 +1,13 @@ +{ + "version": "5", + "dialect": "pg", + "entries": [ + { + "idx": 0, + "version": "5", + "when": 1715440394028, + "tag": "0000_bright_black_queen", + "breakpoints": true + } + ] +} diff --git a/prisma-compatible/migrations/prisma-compatible-schema.ts b/prisma-compatible/migrations/prisma-compatible-schema.ts new file mode 100644 index 000000000..b18812b23 --- /dev/null +++ b/prisma-compatible/migrations/prisma-compatible-schema.ts @@ -0,0 +1,239 @@ +import { createId } from '@paralleldrive/cuid2'; +import { relations, sql } from 'drizzle-orm'; +import { + boolean, + foreignKey, + index, + integer, + pgTable, + serial, + text, + timestamp, + uniqueIndex, +} from 'drizzle-orm/pg-core'; + +export const verificationTokens = pgTable( + 'VerificationToken', + { + identifier: text('identifier').notNull(), + token: text('token').notNull(), + expires: timestamp('expires', { precision: 3, mode: 'date' }).notNull(), + }, + (table) => { + return { + tokenKey: uniqueIndex('VerificationToken_token_key').on(table.token), + identifierTokenKey: uniqueIndex('VerificationToken_identifier_token_key').on( + table.identifier, + table.token, + ), + }; + }, +); + +export const examples = pgTable('Example', { + id: serial('id').primaryKey().notNull(), + name: text('name'), + description: text('description'), + domainCount: integer('domainCount'), + url: text('url'), + image: text('image'), + imageBlurhash: text('imageBlurhash'), +}); + +export const users = pgTable( + 'User', + { + id: text('id').primaryKey().notNull().$default(() => createId()), + name: text('name'), + username: text('username'), + gh_username: text('gh_username'), + email: text('email'), // set notNull() because for next-auth adapter email type column is non-nullable and generate migration + emailVerified: timestamp('emailVerified', { precision: 3, mode: 'date' }), + image: text('image'), + createdAt: timestamp('createdAt', { precision: 3, mode: 'date' }) + .default(sql`CURRENT_TIMESTAMP`) + .notNull(), + updatedAt: timestamp('updatedAt', { precision: 3, mode: 'date' }).notNull().$onUpdate(() => new Date()), + }, + (table) => { + return { + emailKey: uniqueIndex('User_email_key').on(table.email), + }; + }, +); + +export const accounts = pgTable( + 'Account', + { + id: text('id').primaryKey().notNull().$default(() => createId()), + userId: text('userId').notNull(), + type: text('type').notNull(), + provider: text('provider').notNull(), + providerAccountId: text('providerAccountId').notNull(), + refresh_token: text('refresh_token'), + refresh_token_expires_in: integer('refresh_token_expires_in'), + access_token: text('access_token'), + expires_at: integer('expires_at'), + token_type: text('token_type'), + scope: text('scope'), + id_token: text('id_token'), + session_state: text('session_state'), + oauth_token_secret: text('oauth_token_secret'), + oauth_token: text('oauth_token'), + }, + (table) => { + return { + userIdIdx: index('Account_userId_idx').on(table.userId), + userFk: foreignKey({ + columns: [table.userId], + foreignColumns: [users.id], + name: 'Account_userId_fkey', + }) + .onDelete('cascade') + .onUpdate('cascade'), + providerProviderAccountIdKey: uniqueIndex('Account_provider_providerAccountId_key').on( + table.provider, + table.providerAccountId, + ), + }; + }, +); + +export const sessions = pgTable( + 'Session', + { + id: text('id').primaryKey().notNull().$default(() => createId()), + sessionToken: text('sessionToken').notNull(), + userId: text('userId').notNull(), + expires: timestamp('expires', { precision: 3, mode: 'date' }).notNull(), + }, + (table) => { + return { + userFk: foreignKey({ + columns: [table.userId], + foreignColumns: [users.id], + name: 'Session_userId_fkey', + }) + .onDelete('cascade') + .onUpdate('cascade'), + sessionTokenKey: uniqueIndex('Session_sessionToken_key').on(table.sessionToken), + userIdIdx: index('Session_userId_idx').on(table.userId), + }; + }, +); + +export const sites = pgTable( + 'Site', + { + id: text('id').primaryKey().notNull().$default(() => createId()), + name: text('name'), + description: text('description'), + logo: text('logo').default( + 'https://public.blob.vercel-storage.com/eEZHAoPTOBSYGBE3/JRajRyC-PhBHEinQkupt02jqfKacBVHLWJq7Iy.png', + ), + font: text('font').default('font-cal').notNull(), + image: text('image').default( + 'https://public.blob.vercel-storage.com/eEZHAoPTOBSYGBE3/hxfcV5V-eInX3jbVUhjAt1suB7zB88uGd1j20b.png', + ), + imageBlurhash: text('imageBlurhash').default( + 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAhCAYAAACbffiEAAAACXBIWXMAABYlAAAWJQFJUiTwAAABfUlEQVR4nN3XyZLDIAwE0Pz/v3q3r55JDlSBplsIEI49h76k4opexCK/juP4eXjOT149f2Tf9ySPgcjCc7kdpBTgDPKByKK2bTPFEdMO0RDrusJ0wLRBGCIuelmWJAjkgPGDSIQEMBDCfA2CEPM80+Qwl0JkNxBimiaYGOTUlXYI60YoehzHJDEm7kxjV3whOQTD3AaCuhGKHoYhyb+CBMwjIAFz647kTqyapdV4enGINuDJMSScPmijSwjCaHeLcT77C7EC0C1ugaCTi2HYfAZANgj6Z9A8xY5eiYghDMNQBJNCWhASot0jGsSCUiHWZcSGQjaWWCDaGMOWnsCcn2QhVkRuxqqNxMSdUSElCDbp1hbNOsa6Ugxh7xXauF4DyM1m5BLtCylBXgaxvPXVwEoOBjeIFVODtW74oj1yBQah3E8tyz3SkpolKS9Geo9YMD1QJR1Go4oJkgO1pgbNZq0AOUPChyjvh7vlXaQa+X1UXwKxgHokB2XPxbX+AnijwIU4ahazAAAAAElFTkSuQmCC', + ), + subdomain: text('subdomain'), + customDomain: text('customDomain'), + message404: text('message404').default("Blimey! You''ve found a page that doesn''t exist."), + createdAt: timestamp('createdAt', { precision: 3, mode: 'date' }) + .default(sql`CURRENT_TIMESTAMP`) + .notNull(), + updatedAt: timestamp('updatedAt', { precision: 3, mode: 'date' }).notNull().$onUpdate(() => new Date()), + userId: text('userId'), + }, + (table) => { + return { + subdomainKey: uniqueIndex('Site_subdomain_key').on(table.subdomain), + customDomainKey: uniqueIndex('Site_customDomain_key').on(table.customDomain), + userIdIdx: index('Site_userId_idx').on(table.userId), + userFk: foreignKey({ + columns: [table.userId], + foreignColumns: [users.id], + name: 'Site_userId_fkey', + }) + .onDelete('cascade') + .onUpdate('cascade'), + }; + }, +); + +export const posts = pgTable( + 'Post', + { + id: text('id').primaryKey().notNull().$default(() => createId()), + title: text('title'), + description: text('description'), + content: text('content'), + slug: text('slug').notNull().$defaultFn(() => createId()), + image: text('image').default( + 'https://public.blob.vercel-storage.com/eEZHAoPTOBSYGBE3/hxfcV5V-eInX3jbVUhjAt1suB7zB88uGd1j20b.png', + ), + imageBlurhash: text('imageBlurhash').default( + 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAhCAYAAACbffiEAAAACXBIWXMAABYlAAAWJQFJUiTwAAABfUlEQVR4nN3XyZLDIAwE0Pz/v3q3r55JDlSBplsIEI49h76k4opexCK/juP4eXjOT149f2Tf9ySPgcjCc7kdpBTgDPKByKK2bTPFEdMO0RDrusJ0wLRBGCIuelmWJAjkgPGDSIQEMBDCfA2CEPM80+Qwl0JkNxBimiaYGOTUlXYI60YoehzHJDEm7kxjV3whOQTD3AaCuhGKHoYhyb+CBMwjIAFz647kTqyapdV4enGINuDJMSScPmijSwjCaHeLcT77C7EC0C1ugaCTi2HYfAZANgj6Z9A8xY5eiYghDMNQBJNCWhASot0jGsSCUiHWZcSGQjaWWCDaGMOWnsCcn2QhVkRuxqqNxMSdUSElCDbp1hbNOsa6Ugxh7xXauF4DyM1m5BLtCylBXgaxvPXVwEoOBjeIFVODtW74oj1yBQah3E8tyz3SkpolKS9Geo9YMD1QJR1Go4oJkgO1pgbNZq0AOUPChyjvh7vlXaQa+X1UXwKxgHokB2XPxbX+AnijwIU4ahazAAAAAElFTkSuQmCC', + ), + createdAt: timestamp('createdAt', { precision: 3, mode: 'date' }) + .default(sql`CURRENT_TIMESTAMP`) + .notNull(), + updatedAt: timestamp('updatedAt', { precision: 3, mode: 'date' }).notNull().$onUpdate(() => new Date()), + published: boolean('published').default(false).notNull(), + siteId: text('siteId'), + userId: text('userId'), + }, + (table) => { + return { + siteIdIdx: index('Post_siteId_idx').on(table.siteId), + userIdIdx: index('Post_userId_idx').on(table.userId), + slugSiteIdKey: uniqueIndex('Post_slug_siteId_key').on(table.slug, table.siteId), + userFk: foreignKey({ + columns: [table.userId], + foreignColumns: [users.id], + name: 'Post_userId_fkey', + }) + .onDelete('cascade') + .onUpdate('cascade'), + siteFk: foreignKey({ + columns: [table.siteId], + foreignColumns: [sites.id], + name: 'Post_siteId_fkey', + }) + .onDelete('cascade') + .onUpdate('cascade'), + }; + }, +); + + +export const postsRelations = relations(posts, ({ one }) => ({ + site: one(sites, { references: [sites.id], fields: [posts.siteId] }), + user: one(users, { references: [users.id], fields: [posts.userId] }), +})); + +export const sitesRelations = relations(sites, ({ one, many }) => ({ + posts: many(posts), + user: one(users, { references: [users.id], fields: [sites.userId] }), +})); + +export const sessionsRelations = relations(sessions, ({ one }) => ({ + user: one(users, { references: [users.id], fields: [sessions.userId] }), +})); + +export const accountsRelations = relations(accounts, ({ one }) => ({ + user: one(users, { references: [users.id], fields: [accounts.userId] }), +})); + +export const userRelations = relations(users, ({ many }) => ({ + accounts: many(accounts), + sessions: many(sessions), + sites: many(sites), + posts: many(posts), +})); + +export type SelectSite = typeof sites.$inferSelect; +export type SelectPost = typeof posts.$inferSelect; +export type SelectExample = typeof examples.$inferSelect; From 0e0e8ea6d06eaf6c26668c392de39ce54513e1d2 Mon Sep 17 00:00:00 2001 From: realmikesolo Date: Sat, 11 May 2024 18:33:57 +0200 Subject: [PATCH 09/14] fix: format & syntax errors & remove: redundant await --- lib/actions.ts | 33 ++- lib/db/schema.ts | 2 +- .../migrations/meta/0000_snapshot.json | 95 ++----- .../migrations/prisma-compatible-schema.ts | 255 ++++++++++-------- 4 files changed, 181 insertions(+), 204 deletions(-) diff --git a/lib/actions.ts b/lib/actions.ts index f39e24995..5c6bef3da 100644 --- a/lib/actions.ts +++ b/lib/actions.ts @@ -42,8 +42,7 @@ export const createSite = async (formData: FormData) => { }) .returning(); - // unnecessary await - await revalidateTag( + revalidateTag( `${subdomain}.${process.env.NEXT_PUBLIC_ROOT_DOMAIN}-metadata`, ); return response; @@ -169,11 +168,10 @@ export const updateSite = withSiteAuth( `${site.subdomain}.${process.env.NEXT_PUBLIC_ROOT_DOMAIN}-metadata`, `${site.customDomain}-metadata`, ); - await revalidateTag( + revalidateTag( `${site.subdomain}.${process.env.NEXT_PUBLIC_ROOT_DOMAIN}-metadata`, ); - site.customDomain && - (await revalidateTag(`${site.customDomain}-metadata`)); + site.customDomain && revalidateTag(`${site.customDomain}-metadata`); return response; } catch (error: any) { @@ -198,11 +196,10 @@ export const deleteSite = withSiteAuth( .where(eq(sites.id, site.id)) .returning(); - await revalidateTag( + revalidateTag( `${site.subdomain}.${process.env.NEXT_PUBLIC_ROOT_DOMAIN}-metadata`, ); - response.customDomain && - (await revalidateTag(`${site.customDomain}-metadata`)); + response.customDomain && revalidateTag(`${site.customDomain}-metadata`); return response; } catch (error: any) { return { @@ -240,10 +237,10 @@ export const createPost = withSiteAuth( }) .returning(); - await revalidateTag( + revalidateTag( `${site.subdomain}.${process.env.NEXT_PUBLIC_ROOT_DOMAIN}-posts`, ); - site.customDomain && (await revalidateTag(`${site.customDomain}-posts`)); + site.customDomain && revalidateTag(`${site.customDomain}-posts`); return response; }, @@ -282,17 +279,17 @@ export const updatePost = async (data: SelectPost) => { .where(eq(posts.id, data.id)) .returning(); - await revalidateTag( + revalidateTag( `${post.site?.subdomain}.${process.env.NEXT_PUBLIC_ROOT_DOMAIN}-posts`, ); - await revalidateTag( + revalidateTag( `${post.site?.subdomain}.${process.env.NEXT_PUBLIC_ROOT_DOMAIN}-${post.slug}`, ); // if the site has a custom domain, we need to revalidate those tags too post.site?.customDomain && - (await revalidateTag(`${post.site?.customDomain}-posts`), - await revalidateTag(`${post.site?.customDomain}-${post.slug}`)); + (revalidateTag(`${post.site?.customDomain}-posts`), + revalidateTag(`${post.site?.customDomain}-${post.slug}`)); return response; } catch (error: any) { @@ -343,17 +340,17 @@ export const updatePostMetadata = withPostAuth( .then((res) => res[0]); } - await revalidateTag( + revalidateTag( `${post.site?.subdomain}.${process.env.NEXT_PUBLIC_ROOT_DOMAIN}-posts`, ); - await revalidateTag( + revalidateTag( `${post.site?.subdomain}.${process.env.NEXT_PUBLIC_ROOT_DOMAIN}-${post.slug}`, ); // if the site has a custom domain, we need to revalidate those tags too post.site?.customDomain && - (await revalidateTag(`${post.site?.customDomain}-posts`), - await revalidateTag(`${post.site?.customDomain}-${post.slug}`)); + (revalidateTag(`${post.site?.customDomain}-posts`), + revalidateTag(`${post.site?.customDomain}-${post.slug}`)); return response; } catch (error: any) { diff --git a/lib/db/schema.ts b/lib/db/schema.ts index 732f7d75f..0faa3d998 100644 --- a/lib/db/schema.ts +++ b/lib/db/schema.ts @@ -9,7 +9,7 @@ import { serial, text, timestamp, - uniqueIndex + uniqueIndex, } from "drizzle-orm/pg-core"; export const users = pgTable("user", { diff --git a/prisma-compatible/migrations/meta/0000_snapshot.json b/prisma-compatible/migrations/meta/0000_snapshot.json index b560bc168..924cb2ecf 100644 --- a/prisma-compatible/migrations/meta/0000_snapshot.json +++ b/prisma-compatible/migrations/meta/0000_snapshot.json @@ -90,17 +90,12 @@ "indexes": { "VerificationToken_token_key": { "name": "VerificationToken_token_key", - "columns": [ - "token" - ], + "columns": ["token"], "isUnique": true }, "VerificationToken_identifier_token_key": { "name": "VerificationToken_identifier_token_key", - "columns": [ - "identifier", - "token" - ], + "columns": ["identifier", "token"], "isUnique": true } }, @@ -223,9 +218,7 @@ "indexes": { "User_email_key": { "name": "User_email_key", - "columns": [ - "email" - ], + "columns": ["email"], "isUnique": true } }, @@ -331,17 +324,12 @@ "indexes": { "Account_userId_idx": { "name": "Account_userId_idx", - "columns": [ - "userId" - ], + "columns": ["userId"], "isUnique": false }, "Account_provider_providerAccountId_key": { "name": "Account_provider_providerAccountId_key", - "columns": [ - "provider", - "providerAccountId" - ], + "columns": ["provider", "providerAccountId"], "isUnique": true } }, @@ -351,12 +339,8 @@ "tableFrom": "Account", "tableTo": "User", "schemaTo": "public", - "columnsFrom": [ - "userId" - ], - "columnsTo": [ - "id" - ], + "columnsFrom": ["userId"], + "columnsTo": ["id"], "onDelete": "cascade", "onUpdate": "cascade" } @@ -396,16 +380,12 @@ "indexes": { "Session_sessionToken_key": { "name": "Session_sessionToken_key", - "columns": [ - "sessionToken" - ], + "columns": ["sessionToken"], "isUnique": true }, "Session_userId_idx": { "name": "Session_userId_idx", - "columns": [ - "userId" - ], + "columns": ["userId"], "isUnique": false } }, @@ -415,12 +395,8 @@ "tableFrom": "Session", "tableTo": "User", "schemaTo": "public", - "columnsFrom": [ - "userId" - ], - "columnsTo": [ - "id" - ], + "columnsFrom": ["userId"], + "columnsTo": ["id"], "onDelete": "cascade", "onUpdate": "cascade" } @@ -520,23 +496,17 @@ "indexes": { "Site_subdomain_key": { "name": "Site_subdomain_key", - "columns": [ - "subdomain" - ], + "columns": ["subdomain"], "isUnique": true }, "Site_customDomain_key": { "name": "Site_customDomain_key", - "columns": [ - "customDomain" - ], + "columns": ["customDomain"], "isUnique": true }, "Site_userId_idx": { "name": "Site_userId_idx", - "columns": [ - "userId" - ], + "columns": ["userId"], "isUnique": false } }, @@ -546,12 +516,8 @@ "tableFrom": "Site", "tableTo": "User", "schemaTo": "public", - "columnsFrom": [ - "userId" - ], - "columnsTo": [ - "id" - ], + "columnsFrom": ["userId"], + "columnsTo": ["id"], "onDelete": "cascade", "onUpdate": "cascade" } @@ -643,24 +609,17 @@ "indexes": { "Post_siteId_idx": { "name": "Post_siteId_idx", - "columns": [ - "siteId" - ], + "columns": ["siteId"], "isUnique": false }, "Post_userId_idx": { "name": "Post_userId_idx", - "columns": [ - "userId" - ], + "columns": ["userId"], "isUnique": false }, "Post_slug_siteId_key": { "name": "Post_slug_siteId_key", - "columns": [ - "slug", - "siteId" - ], + "columns": ["slug", "siteId"], "isUnique": true } }, @@ -670,12 +629,8 @@ "tableFrom": "Post", "tableTo": "Site", "schemaTo": "public", - "columnsFrom": [ - "siteId" - ], - "columnsTo": [ - "id" - ], + "columnsFrom": ["siteId"], + "columnsTo": ["id"], "onDelete": "cascade", "onUpdate": "cascade" }, @@ -684,12 +639,8 @@ "tableFrom": "Post", "tableTo": "User", "schemaTo": "public", - "columnsFrom": [ - "userId" - ], - "columnsTo": [ - "id" - ], + "columnsFrom": ["userId"], + "columnsTo": ["id"], "onDelete": "cascade", "onUpdate": "cascade" } diff --git a/prisma-compatible/migrations/prisma-compatible-schema.ts b/prisma-compatible/migrations/prisma-compatible-schema.ts index b18812b23..76cf0d518 100644 --- a/prisma-compatible/migrations/prisma-compatible-schema.ts +++ b/prisma-compatible/migrations/prisma-compatible-schema.ts @@ -1,5 +1,5 @@ -import { createId } from '@paralleldrive/cuid2'; -import { relations, sql } from 'drizzle-orm'; +import { createId } from "@paralleldrive/cuid2"; +import { relations, sql } from "drizzle-orm"; import { boolean, foreignKey, @@ -10,205 +10,234 @@ import { text, timestamp, uniqueIndex, -} from 'drizzle-orm/pg-core'; +} from "drizzle-orm/pg-core"; export const verificationTokens = pgTable( - 'VerificationToken', + "VerificationToken", { - identifier: text('identifier').notNull(), - token: text('token').notNull(), - expires: timestamp('expires', { precision: 3, mode: 'date' }).notNull(), + identifier: text("identifier").notNull(), + token: text("token").notNull(), + expires: timestamp("expires", { precision: 3, mode: "date" }).notNull(), }, (table) => { return { - tokenKey: uniqueIndex('VerificationToken_token_key').on(table.token), - identifierTokenKey: uniqueIndex('VerificationToken_identifier_token_key').on( - table.identifier, - table.token, - ), + tokenKey: uniqueIndex("VerificationToken_token_key").on(table.token), + identifierTokenKey: uniqueIndex( + "VerificationToken_identifier_token_key", + ).on(table.identifier, table.token), }; }, ); -export const examples = pgTable('Example', { - id: serial('id').primaryKey().notNull(), - name: text('name'), - description: text('description'), - domainCount: integer('domainCount'), - url: text('url'), - image: text('image'), - imageBlurhash: text('imageBlurhash'), +export const examples = pgTable("Example", { + id: serial("id").primaryKey().notNull(), + name: text("name"), + description: text("description"), + domainCount: integer("domainCount"), + url: text("url"), + image: text("image"), + imageBlurhash: text("imageBlurhash"), }); export const users = pgTable( - 'User', + "User", { - id: text('id').primaryKey().notNull().$default(() => createId()), - name: text('name'), - username: text('username'), - gh_username: text('gh_username'), - email: text('email'), // set notNull() because for next-auth adapter email type column is non-nullable and generate migration - emailVerified: timestamp('emailVerified', { precision: 3, mode: 'date' }), - image: text('image'), - createdAt: timestamp('createdAt', { precision: 3, mode: 'date' }) + id: text("id") + .primaryKey() + .notNull() + .$default(() => createId()), + name: text("name"), + username: text("username"), + gh_username: text("gh_username"), + email: text("email"), // set notNull() because for next-auth adapter email type column is non-nullable and generate migration + emailVerified: timestamp("emailVerified", { precision: 3, mode: "date" }), + image: text("image"), + createdAt: timestamp("createdAt", { precision: 3, mode: "date" }) .default(sql`CURRENT_TIMESTAMP`) .notNull(), - updatedAt: timestamp('updatedAt', { precision: 3, mode: 'date' }).notNull().$onUpdate(() => new Date()), + updatedAt: timestamp("updatedAt", { precision: 3, mode: "date" }) + .notNull() + .$onUpdate(() => new Date()), }, (table) => { return { - emailKey: uniqueIndex('User_email_key').on(table.email), + emailKey: uniqueIndex("User_email_key").on(table.email), }; }, ); export const accounts = pgTable( - 'Account', + "Account", { - id: text('id').primaryKey().notNull().$default(() => createId()), - userId: text('userId').notNull(), - type: text('type').notNull(), - provider: text('provider').notNull(), - providerAccountId: text('providerAccountId').notNull(), - refresh_token: text('refresh_token'), - refresh_token_expires_in: integer('refresh_token_expires_in'), - access_token: text('access_token'), - expires_at: integer('expires_at'), - token_type: text('token_type'), - scope: text('scope'), - id_token: text('id_token'), - session_state: text('session_state'), - oauth_token_secret: text('oauth_token_secret'), - oauth_token: text('oauth_token'), + id: text("id") + .primaryKey() + .notNull() + .$default(() => createId()), + userId: text("userId").notNull(), + type: text("type").notNull(), + provider: text("provider").notNull(), + providerAccountId: text("providerAccountId").notNull(), + refresh_token: text("refresh_token"), + refresh_token_expires_in: integer("refresh_token_expires_in"), + access_token: text("access_token"), + expires_at: integer("expires_at"), + token_type: text("token_type"), + scope: text("scope"), + id_token: text("id_token"), + session_state: text("session_state"), + oauth_token_secret: text("oauth_token_secret"), + oauth_token: text("oauth_token"), }, (table) => { return { - userIdIdx: index('Account_userId_idx').on(table.userId), + userIdIdx: index("Account_userId_idx").on(table.userId), userFk: foreignKey({ columns: [table.userId], foreignColumns: [users.id], - name: 'Account_userId_fkey', + name: "Account_userId_fkey", }) - .onDelete('cascade') - .onUpdate('cascade'), - providerProviderAccountIdKey: uniqueIndex('Account_provider_providerAccountId_key').on( - table.provider, - table.providerAccountId, - ), + .onDelete("cascade") + .onUpdate("cascade"), + providerProviderAccountIdKey: uniqueIndex( + "Account_provider_providerAccountId_key", + ).on(table.provider, table.providerAccountId), }; }, ); export const sessions = pgTable( - 'Session', + "Session", { - id: text('id').primaryKey().notNull().$default(() => createId()), - sessionToken: text('sessionToken').notNull(), - userId: text('userId').notNull(), - expires: timestamp('expires', { precision: 3, mode: 'date' }).notNull(), + id: text("id") + .primaryKey() + .notNull() + .$default(() => createId()), + sessionToken: text("sessionToken").notNull(), + userId: text("userId").notNull(), + expires: timestamp("expires", { precision: 3, mode: "date" }).notNull(), }, (table) => { return { userFk: foreignKey({ columns: [table.userId], foreignColumns: [users.id], - name: 'Session_userId_fkey', + name: "Session_userId_fkey", }) - .onDelete('cascade') - .onUpdate('cascade'), - sessionTokenKey: uniqueIndex('Session_sessionToken_key').on(table.sessionToken), - userIdIdx: index('Session_userId_idx').on(table.userId), + .onDelete("cascade") + .onUpdate("cascade"), + sessionTokenKey: uniqueIndex("Session_sessionToken_key").on( + table.sessionToken, + ), + userIdIdx: index("Session_userId_idx").on(table.userId), }; }, ); export const sites = pgTable( - 'Site', + "Site", { - id: text('id').primaryKey().notNull().$default(() => createId()), - name: text('name'), - description: text('description'), - logo: text('logo').default( - 'https://public.blob.vercel-storage.com/eEZHAoPTOBSYGBE3/JRajRyC-PhBHEinQkupt02jqfKacBVHLWJq7Iy.png', + id: text("id") + .primaryKey() + .notNull() + .$default(() => createId()), + name: text("name"), + description: text("description"), + logo: text("logo").default( + "https://public.blob.vercel-storage.com/eEZHAoPTOBSYGBE3/JRajRyC-PhBHEinQkupt02jqfKacBVHLWJq7Iy.png", + ), + font: text("font").default("font-cal").notNull(), + image: text("image").default( + "https://public.blob.vercel-storage.com/eEZHAoPTOBSYGBE3/hxfcV5V-eInX3jbVUhjAt1suB7zB88uGd1j20b.png", ), - font: text('font').default('font-cal').notNull(), - image: text('image').default( - 'https://public.blob.vercel-storage.com/eEZHAoPTOBSYGBE3/hxfcV5V-eInX3jbVUhjAt1suB7zB88uGd1j20b.png', + imageBlurhash: text("imageBlurhash").default( + "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAhCAYAAACbffiEAAAACXBIWXMAABYlAAAWJQFJUiTwAAABfUlEQVR4nN3XyZLDIAwE0Pz/v3q3r55JDlSBplsIEI49h76k4opexCK/juP4eXjOT149f2Tf9ySPgcjCc7kdpBTgDPKByKK2bTPFEdMO0RDrusJ0wLRBGCIuelmWJAjkgPGDSIQEMBDCfA2CEPM80+Qwl0JkNxBimiaYGOTUlXYI60YoehzHJDEm7kxjV3whOQTD3AaCuhGKHoYhyb+CBMwjIAFz647kTqyapdV4enGINuDJMSScPmijSwjCaHeLcT77C7EC0C1ugaCTi2HYfAZANgj6Z9A8xY5eiYghDMNQBJNCWhASot0jGsSCUiHWZcSGQjaWWCDaGMOWnsCcn2QhVkRuxqqNxMSdUSElCDbp1hbNOsa6Ugxh7xXauF4DyM1m5BLtCylBXgaxvPXVwEoOBjeIFVODtW74oj1yBQah3E8tyz3SkpolKS9Geo9YMD1QJR1Go4oJkgO1pgbNZq0AOUPChyjvh7vlXaQa+X1UXwKxgHokB2XPxbX+AnijwIU4ahazAAAAAElFTkSuQmCC", ), - imageBlurhash: text('imageBlurhash').default( - 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAhCAYAAACbffiEAAAACXBIWXMAABYlAAAWJQFJUiTwAAABfUlEQVR4nN3XyZLDIAwE0Pz/v3q3r55JDlSBplsIEI49h76k4opexCK/juP4eXjOT149f2Tf9ySPgcjCc7kdpBTgDPKByKK2bTPFEdMO0RDrusJ0wLRBGCIuelmWJAjkgPGDSIQEMBDCfA2CEPM80+Qwl0JkNxBimiaYGOTUlXYI60YoehzHJDEm7kxjV3whOQTD3AaCuhGKHoYhyb+CBMwjIAFz647kTqyapdV4enGINuDJMSScPmijSwjCaHeLcT77C7EC0C1ugaCTi2HYfAZANgj6Z9A8xY5eiYghDMNQBJNCWhASot0jGsSCUiHWZcSGQjaWWCDaGMOWnsCcn2QhVkRuxqqNxMSdUSElCDbp1hbNOsa6Ugxh7xXauF4DyM1m5BLtCylBXgaxvPXVwEoOBjeIFVODtW74oj1yBQah3E8tyz3SkpolKS9Geo9YMD1QJR1Go4oJkgO1pgbNZq0AOUPChyjvh7vlXaQa+X1UXwKxgHokB2XPxbX+AnijwIU4ahazAAAAAElFTkSuQmCC', + subdomain: text("subdomain"), + customDomain: text("customDomain"), + message404: text("message404").default( + "Blimey! You''ve found a page that doesn''t exist.", ), - subdomain: text('subdomain'), - customDomain: text('customDomain'), - message404: text('message404').default("Blimey! You''ve found a page that doesn''t exist."), - createdAt: timestamp('createdAt', { precision: 3, mode: 'date' }) + createdAt: timestamp("createdAt", { precision: 3, mode: "date" }) .default(sql`CURRENT_TIMESTAMP`) .notNull(), - updatedAt: timestamp('updatedAt', { precision: 3, mode: 'date' }).notNull().$onUpdate(() => new Date()), - userId: text('userId'), + updatedAt: timestamp("updatedAt", { precision: 3, mode: "date" }) + .notNull() + .$onUpdate(() => new Date()), + userId: text("userId"), }, (table) => { return { - subdomainKey: uniqueIndex('Site_subdomain_key').on(table.subdomain), - customDomainKey: uniqueIndex('Site_customDomain_key').on(table.customDomain), - userIdIdx: index('Site_userId_idx').on(table.userId), + subdomainKey: uniqueIndex("Site_subdomain_key").on(table.subdomain), + customDomainKey: uniqueIndex("Site_customDomain_key").on( + table.customDomain, + ), + userIdIdx: index("Site_userId_idx").on(table.userId), userFk: foreignKey({ columns: [table.userId], foreignColumns: [users.id], - name: 'Site_userId_fkey', + name: "Site_userId_fkey", }) - .onDelete('cascade') - .onUpdate('cascade'), + .onDelete("cascade") + .onUpdate("cascade"), }; }, ); export const posts = pgTable( - 'Post', + "Post", { - id: text('id').primaryKey().notNull().$default(() => createId()), - title: text('title'), - description: text('description'), - content: text('content'), - slug: text('slug').notNull().$defaultFn(() => createId()), - image: text('image').default( - 'https://public.blob.vercel-storage.com/eEZHAoPTOBSYGBE3/hxfcV5V-eInX3jbVUhjAt1suB7zB88uGd1j20b.png', + id: text("id") + .primaryKey() + .notNull() + .$default(() => createId()), + title: text("title"), + description: text("description"), + content: text("content"), + slug: text("slug") + .notNull() + .$defaultFn(() => createId()), + image: text("image").default( + "https://public.blob.vercel-storage.com/eEZHAoPTOBSYGBE3/hxfcV5V-eInX3jbVUhjAt1suB7zB88uGd1j20b.png", ), - imageBlurhash: text('imageBlurhash').default( - 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAhCAYAAACbffiEAAAACXBIWXMAABYlAAAWJQFJUiTwAAABfUlEQVR4nN3XyZLDIAwE0Pz/v3q3r55JDlSBplsIEI49h76k4opexCK/juP4eXjOT149f2Tf9ySPgcjCc7kdpBTgDPKByKK2bTPFEdMO0RDrusJ0wLRBGCIuelmWJAjkgPGDSIQEMBDCfA2CEPM80+Qwl0JkNxBimiaYGOTUlXYI60YoehzHJDEm7kxjV3whOQTD3AaCuhGKHoYhyb+CBMwjIAFz647kTqyapdV4enGINuDJMSScPmijSwjCaHeLcT77C7EC0C1ugaCTi2HYfAZANgj6Z9A8xY5eiYghDMNQBJNCWhASot0jGsSCUiHWZcSGQjaWWCDaGMOWnsCcn2QhVkRuxqqNxMSdUSElCDbp1hbNOsa6Ugxh7xXauF4DyM1m5BLtCylBXgaxvPXVwEoOBjeIFVODtW74oj1yBQah3E8tyz3SkpolKS9Geo9YMD1QJR1Go4oJkgO1pgbNZq0AOUPChyjvh7vlXaQa+X1UXwKxgHokB2XPxbX+AnijwIU4ahazAAAAAElFTkSuQmCC', + imageBlurhash: text("imageBlurhash").default( + "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAhCAYAAACbffiEAAAACXBIWXMAABYlAAAWJQFJUiTwAAABfUlEQVR4nN3XyZLDIAwE0Pz/v3q3r55JDlSBplsIEI49h76k4opexCK/juP4eXjOT149f2Tf9ySPgcjCc7kdpBTgDPKByKK2bTPFEdMO0RDrusJ0wLRBGCIuelmWJAjkgPGDSIQEMBDCfA2CEPM80+Qwl0JkNxBimiaYGOTUlXYI60YoehzHJDEm7kxjV3whOQTD3AaCuhGKHoYhyb+CBMwjIAFz647kTqyapdV4enGINuDJMSScPmijSwjCaHeLcT77C7EC0C1ugaCTi2HYfAZANgj6Z9A8xY5eiYghDMNQBJNCWhASot0jGsSCUiHWZcSGQjaWWCDaGMOWnsCcn2QhVkRuxqqNxMSdUSElCDbp1hbNOsa6Ugxh7xXauF4DyM1m5BLtCylBXgaxvPXVwEoOBjeIFVODtW74oj1yBQah3E8tyz3SkpolKS9Geo9YMD1QJR1Go4oJkgO1pgbNZq0AOUPChyjvh7vlXaQa+X1UXwKxgHokB2XPxbX+AnijwIU4ahazAAAAAElFTkSuQmCC", ), - createdAt: timestamp('createdAt', { precision: 3, mode: 'date' }) + createdAt: timestamp("createdAt", { precision: 3, mode: "date" }) .default(sql`CURRENT_TIMESTAMP`) .notNull(), - updatedAt: timestamp('updatedAt', { precision: 3, mode: 'date' }).notNull().$onUpdate(() => new Date()), - published: boolean('published').default(false).notNull(), - siteId: text('siteId'), - userId: text('userId'), + updatedAt: timestamp("updatedAt", { precision: 3, mode: "date" }) + .notNull() + .$onUpdate(() => new Date()), + published: boolean("published").default(false).notNull(), + siteId: text("siteId"), + userId: text("userId"), }, (table) => { return { - siteIdIdx: index('Post_siteId_idx').on(table.siteId), - userIdIdx: index('Post_userId_idx').on(table.userId), - slugSiteIdKey: uniqueIndex('Post_slug_siteId_key').on(table.slug, table.siteId), + siteIdIdx: index("Post_siteId_idx").on(table.siteId), + userIdIdx: index("Post_userId_idx").on(table.userId), + slugSiteIdKey: uniqueIndex("Post_slug_siteId_key").on( + table.slug, + table.siteId, + ), userFk: foreignKey({ columns: [table.userId], foreignColumns: [users.id], - name: 'Post_userId_fkey', + name: "Post_userId_fkey", }) - .onDelete('cascade') - .onUpdate('cascade'), + .onDelete("cascade") + .onUpdate("cascade"), siteFk: foreignKey({ columns: [table.siteId], foreignColumns: [sites.id], - name: 'Post_siteId_fkey', + name: "Post_siteId_fkey", }) - .onDelete('cascade') - .onUpdate('cascade'), + .onDelete("cascade") + .onUpdate("cascade"), }; }, ); - export const postsRelations = relations(posts, ({ one }) => ({ site: one(sites, { references: [sites.id], fields: [posts.siteId] }), user: one(users, { references: [users.id], fields: [posts.userId] }), From caa9359b123e098901f432ab3f729f40235b6970 Mon Sep 17 00:00:00 2001 From: realmikesolo Date: Sat, 11 May 2024 18:43:52 +0200 Subject: [PATCH 10/14] upgrade drizzle-kit to 0.21.0 --- drizzle.config.ts | 4 +- package.json | 2 +- pnpm-lock.yaml | 72 ++----------------- .../migrations/meta/0000_snapshot.json | 56 +++++++-------- 4 files changed, 35 insertions(+), 99 deletions(-) diff --git a/drizzle.config.ts b/drizzle.config.ts index 7f1f3827a..962cd3510 100644 --- a/drizzle.config.ts +++ b/drizzle.config.ts @@ -3,9 +3,9 @@ import { defineConfig } from "drizzle-kit"; export default defineConfig({ schema: "./lib/db/schema.ts", out: "./drizzle/migrations", - driver: "pg", + dialect: "postgresql", dbCredentials: { - connectionString: process.env.POSTGRES_URL!, + url: process.env.POSTGRES_URL!, }, verbose: true, strict: true, diff --git a/package.json b/package.json index 6f321891b..e4c57076c 100644 --- a/package.json +++ b/package.json @@ -53,7 +53,7 @@ "@types/react": "^18.2.37", "@types/react-dom": "^18.2.15", "autoprefixer": "^10.4.16", - "drizzle-kit": "^0.20.18", + "drizzle-kit": "^0.21.1", "eslint": "8.53.0", "eslint-config-next": "^14.0.2", "postcss": "^8.4.31", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 95a7a774c..0a9c2652e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -134,8 +134,8 @@ devDependencies: specifier: ^10.4.16 version: 10.4.19(postcss@8.4.38) drizzle-kit: - specifier: ^0.20.18 - version: 0.20.18 + specifier: ^0.21.1 + version: 0.21.1 eslint: specifier: 8.53.0 version: 8.53.0 @@ -819,21 +819,6 @@ packages: tailwindcss: 3.4.3 dev: false - /@hono/node-server@1.11.1: - resolution: {integrity: sha512-GW1Iomhmm1o4Z+X57xGby8A35Cu9UZLL7pSMdqDBkD99U5cywff8F+8hLk5aBTzNubnsFAvWQ/fZjNwPsEn9lA==} - engines: {node: '>=18.14.1'} - dev: true - - /@hono/zod-validator@0.2.1(hono@4.3.2)(zod@3.23.6): - resolution: {integrity: sha512-HFoxln7Q6JsE64qz2WBS28SD33UB2alp3aRKmcWnNLDzEL1BLsWfbdX6e1HIiUprHYTIXf5y7ax8eYidKUwyaA==} - peerDependencies: - hono: '>=3.9.0' - zod: ^3.19.1 - dependencies: - hono: 4.3.2 - zod: 3.23.6 - dev: true - /@humanwhocodes/config-array@0.11.14: resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} engines: {node: '>=10.10.0'} @@ -2953,11 +2938,6 @@ packages: resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} engines: {node: '>= 6'} - /camelcase@7.0.1: - resolution: {integrity: sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==} - engines: {node: '>=14.16'} - dev: true - /caniuse-lite@1.0.30001616: resolution: {integrity: sha512-RHVYKov7IcdNjVHJFNY/78RdG4oGVjbayxv8u5IO74Wv7Hlq4PnJE6mo/OjFijjVFNy5ijnCt6H3IIo4t+wfEw==} @@ -2981,11 +2961,6 @@ packages: ansi-styles: 4.3.0 supports-color: 7.2.0 - /chalk@5.3.0: - resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - dev: true - /character-entities-html4@2.1.0: resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} dev: false @@ -3127,13 +3102,6 @@ packages: engines: {node: '>= 0.6'} dev: false - /copy-anything@3.0.5: - resolution: {integrity: sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==} - engines: {node: '>=12.13'} - dependencies: - is-what: 4.1.16 - dev: true - /crelt@1.0.6: resolution: {integrity: sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==} dev: false @@ -3444,26 +3412,18 @@ packages: wordwrap: 1.0.0 dev: true - /drizzle-kit@0.20.18: - resolution: {integrity: sha512-fLTwcnLqtBxGd+51H/dEm9TC0FW6+cIX/RVPyNcitBO77X9+nkogEfMAJebpd/8Yl4KucmePHRYRWWvUlW0rqg==} + /drizzle-kit@0.21.1: + resolution: {integrity: sha512-Sp7OnCdROiE2ebMuHsAfrnRoHVGYCvErQxUh7/0l6R1caHssZu9oZu/hW9rLU19xnTK4/y3iSe3sL0Cc530wCg==} hasBin: true dependencies: '@esbuild-kit/esm-loader': 2.6.5 - '@hono/node-server': 1.11.1 - '@hono/zod-validator': 0.2.1(hono@4.3.2)(zod@3.23.6) - camelcase: 7.0.1 - chalk: 5.3.0 commander: 9.5.0 env-paths: 3.0.0 esbuild: 0.19.12 esbuild-register: 3.5.0(esbuild@0.19.12) glob: 8.1.0 hanji: 0.0.5 - hono: 4.3.2 json-diff: 0.9.0 - minimatch: 7.4.6 - semver: 7.6.0 - superjson: 2.2.1 zod: 3.23.6 transitivePeerDependencies: - supports-color @@ -4838,11 +4798,6 @@ packages: resolution: {integrity: sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==} dev: true - /hono@4.3.2: - resolution: {integrity: sha512-wiZcF5N06tc232U11DnqW6hP8DNoypjsrxslKXfvOqOAkTdh7K1HLZJH/92Mf+urxUTGi96f1w4xx/1Qozoqiw==} - engines: {node: '>=16.0.0'} - dev: true - /html-encoding-sniffer@3.0.0: resolution: {integrity: sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==} engines: {node: '>=12'} @@ -5135,11 +5090,6 @@ packages: call-bind: 1.0.7 get-intrinsic: 1.2.4 - /is-what@4.1.16: - resolution: {integrity: sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==} - engines: {node: '>=12.13'} - dev: true - /isarray@2.0.5: resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} @@ -5956,13 +5906,6 @@ packages: brace-expansion: 2.0.1 dev: true - /minimatch@7.4.6: - resolution: {integrity: sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==} - engines: {node: '>=10'} - dependencies: - brace-expansion: 2.0.1 - dev: true - /minimatch@9.0.3: resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} engines: {node: '>=16 || 14 >=14.17'} @@ -7696,13 +7639,6 @@ packages: pirates: 4.0.6 ts-interface-checker: 0.1.13 - /superjson@2.2.1: - resolution: {integrity: sha512-8iGv75BYOa0xRJHK5vRLEjE2H/i4lulTjzpUXic3Eg8akftYjkmQDa8JARQ42rlczXyFR3IeRoeFCc7RxHsYZA==} - engines: {node: '>=16'} - dependencies: - copy-anything: 3.0.5 - dev: true - /supports-color@5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} engines: {node: '>=4'} diff --git a/prisma-compatible/migrations/meta/0000_snapshot.json b/prisma-compatible/migrations/meta/0000_snapshot.json index 924cb2ecf..6ce540e29 100644 --- a/prisma-compatible/migrations/meta/0000_snapshot.json +++ b/prisma-compatible/migrations/meta/0000_snapshot.json @@ -1,10 +1,8 @@ { - "id": "00000000-0000-0000-0000-000000000000", - "prevId": "", - "version": "5", - "dialect": "pg", + "version": "6", + "dialect": "postgresql", "tables": { - "_prisma_migrations": { + "public._prisma_migrations": { "name": "_prisma_migrations", "schema": "", "columns": { @@ -64,7 +62,7 @@ "compositePrimaryKeys": {}, "uniqueConstraints": {} }, - "VerificationToken": { + "public.VerificationToken": { "name": "VerificationToken", "schema": "", "columns": { @@ -103,7 +101,7 @@ "compositePrimaryKeys": {}, "uniqueConstraints": {} }, - "Example": { + "public.Example": { "name": "Example", "schema": "", "columns": { @@ -155,7 +153,7 @@ "compositePrimaryKeys": {}, "uniqueConstraints": {} }, - "User": { + "public.User": { "name": "User", "schema": "", "columns": { @@ -226,7 +224,7 @@ "compositePrimaryKeys": {}, "uniqueConstraints": {} }, - "Account": { + "public.Account": { "name": "Account", "schema": "", "columns": { @@ -337,18 +335,18 @@ "Account_userId_fkey": { "name": "Account_userId_fkey", "tableFrom": "Account", + "columnsFrom": ["userId"], "tableTo": "User", "schemaTo": "public", - "columnsFrom": ["userId"], "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "cascade" + "onUpdate": "cascade", + "onDelete": "cascade" } }, "compositePrimaryKeys": {}, "uniqueConstraints": {} }, - "Session": { + "public.Session": { "name": "Session", "schema": "", "columns": { @@ -393,18 +391,18 @@ "Session_userId_fkey": { "name": "Session_userId_fkey", "tableFrom": "Session", + "columnsFrom": ["userId"], "tableTo": "User", "schemaTo": "public", - "columnsFrom": ["userId"], "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "cascade" + "onUpdate": "cascade", + "onDelete": "cascade" } }, "compositePrimaryKeys": {}, "uniqueConstraints": {} }, - "Site": { + "public.Site": { "name": "Site", "schema": "", "columns": { @@ -514,18 +512,18 @@ "Site_userId_fkey": { "name": "Site_userId_fkey", "tableFrom": "Site", + "columnsFrom": ["userId"], "tableTo": "User", "schemaTo": "public", - "columnsFrom": ["userId"], "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "cascade" + "onUpdate": "cascade", + "onDelete": "cascade" } }, "compositePrimaryKeys": {}, "uniqueConstraints": {} }, - "Post": { + "public.Post": { "name": "Post", "schema": "", "columns": { @@ -627,22 +625,22 @@ "Post_siteId_fkey": { "name": "Post_siteId_fkey", "tableFrom": "Post", + "columnsFrom": ["siteId"], "tableTo": "Site", "schemaTo": "public", - "columnsFrom": ["siteId"], "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "cascade" + "onUpdate": "cascade", + "onDelete": "cascade" }, "Post_userId_fkey": { "name": "Post_userId_fkey", "tableFrom": "Post", + "columnsFrom": ["userId"], "tableTo": "User", "schemaTo": "public", - "columnsFrom": ["userId"], "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "cascade" + "onUpdate": "cascade", + "onDelete": "cascade" } }, "compositePrimaryKeys": {}, @@ -655,5 +653,7 @@ "schemas": {}, "tables": {}, "columns": {} - } + }, + "id": "00000000-0000-0000-0000-000000000000", + "prevId": "" } From d67e4e1b27bd6d0fe353b0375029609fa248a0ac Mon Sep 17 00:00:00 2001 From: realmikesolo Date: Mon, 13 May 2024 22:49:42 +0200 Subject: [PATCH 11/14] made edits according to the review --- app/[domain]/[slug]/page.tsx | 4 +-- app/[domain]/page.tsx | 2 +- app/app/(dashboard)/post/[id]/page.tsx | 2 +- .../(dashboard)/post/[id]/settings/page.tsx | 2 +- .../(dashboard)/site/[id]/analytics/page.tsx | 2 +- app/app/(dashboard)/site/[id]/page.tsx | 2 +- .../site/[id]/settings/appearance/page.tsx | 2 +- .../site/[id]/settings/domains/page.tsx | 2 +- .../(dashboard)/site/[id]/settings/layout.tsx | 2 +- .../(dashboard)/site/[id]/settings/page.tsx | 2 +- components/blog-card.tsx | 2 +- components/editor.tsx | 2 +- components/mdx.tsx | 2 +- components/overview-sites-cta.tsx | 4 +-- components/post-card.tsx | 2 +- components/posts.tsx | 32 ++++++++----------- components/site-card.tsx | 2 +- components/sites.tsx | 27 ++++++---------- lib/actions.ts | 4 +-- lib/auth.ts | 4 +-- lib/{db => }/db.ts | 0 lib/fetchers.ts | 4 +-- lib/remark-plugins.tsx | 4 +-- lib/{db => }/schema.ts | 0 24 files changed, 48 insertions(+), 63 deletions(-) rename lib/{db => }/db.ts (100%) rename lib/{db => }/schema.ts (100%) diff --git a/app/[domain]/[slug]/page.tsx b/app/[domain]/[slug]/page.tsx index 6f22a10d9..5b9185ccd 100644 --- a/app/[domain]/[slug]/page.tsx +++ b/app/[domain]/[slug]/page.tsx @@ -4,8 +4,8 @@ import BlogCard from "@/components/blog-card"; import BlurImage from "@/components/blur-image"; import MDX from "@/components/mdx"; import { placeholderBlurhash, toDateString } from "@/lib/utils"; -import db from "@/lib/db/db"; -import { posts, sites } from "@/lib/db/schema"; +import db from "@/lib/db"; +import { posts, sites } from "@/lib/schema"; import { eq } from "drizzle-orm"; export async function generateMetadata({ diff --git a/app/[domain]/page.tsx b/app/[domain]/page.tsx index aa89c16d9..f409902ac 100644 --- a/app/[domain]/page.tsx +++ b/app/[domain]/page.tsx @@ -5,7 +5,7 @@ import { placeholderBlurhash, toDateString } from "@/lib/utils"; import BlogCard from "@/components/blog-card"; import { getPostsForSite, getSiteData } from "@/lib/fetchers"; import Image from "next/image"; -import db from "@/lib/db/db"; +import db from "@/lib/db"; export async function generateStaticParams() { const allSites = await db.query.sites.findMany({ diff --git a/app/app/(dashboard)/post/[id]/page.tsx b/app/app/(dashboard)/post/[id]/page.tsx index 74b5ca2fb..4d03cfafd 100644 --- a/app/app/(dashboard)/post/[id]/page.tsx +++ b/app/app/(dashboard)/post/[id]/page.tsx @@ -1,7 +1,7 @@ import { getSession } from "@/lib/auth"; import { notFound, redirect } from "next/navigation"; import Editor from "@/components/editor"; -import db from "@/lib/db/db"; +import db from "@/lib/db"; export default async function PostPage({ params }: { params: { id: string } }) { const session = await getSession(); diff --git a/app/app/(dashboard)/post/[id]/settings/page.tsx b/app/app/(dashboard)/post/[id]/settings/page.tsx index 644550681..b19850216 100644 --- a/app/app/(dashboard)/post/[id]/settings/page.tsx +++ b/app/app/(dashboard)/post/[id]/settings/page.tsx @@ -3,7 +3,7 @@ import { notFound, redirect } from "next/navigation"; import Form from "@/components/form"; import { updatePostMetadata } from "@/lib/actions"; import DeletePostForm from "@/components/form/delete-post-form"; -import db from "@/lib/db/db"; +import db from "@/lib/db"; export default async function PostSettings({ params, diff --git a/app/app/(dashboard)/site/[id]/analytics/page.tsx b/app/app/(dashboard)/site/[id]/analytics/page.tsx index 6dbcc9b4d..e6ae6848b 100644 --- a/app/app/(dashboard)/site/[id]/analytics/page.tsx +++ b/app/app/(dashboard)/site/[id]/analytics/page.tsx @@ -1,7 +1,7 @@ import { getSession } from "@/lib/auth"; import { notFound, redirect } from "next/navigation"; import AnalyticsMockup from "@/components/analytics"; -import db from "@/lib/db/db"; +import db from "@/lib/db"; export default async function SiteAnalytics({ params, diff --git a/app/app/(dashboard)/site/[id]/page.tsx b/app/app/(dashboard)/site/[id]/page.tsx index c785d7963..b8d252c32 100644 --- a/app/app/(dashboard)/site/[id]/page.tsx +++ b/app/app/(dashboard)/site/[id]/page.tsx @@ -2,7 +2,7 @@ import { getSession } from "@/lib/auth"; import { notFound, redirect } from "next/navigation"; import Posts from "@/components/posts"; import CreatePostButton from "@/components/create-post-button"; -import db from "@/lib/db/db"; +import db from "@/lib/db"; export default async function SitePosts({ params, diff --git a/app/app/(dashboard)/site/[id]/settings/appearance/page.tsx b/app/app/(dashboard)/site/[id]/settings/appearance/page.tsx index e836d86a2..1d4b16b65 100644 --- a/app/app/(dashboard)/site/[id]/settings/appearance/page.tsx +++ b/app/app/(dashboard)/site/[id]/settings/appearance/page.tsx @@ -1,6 +1,6 @@ import Form from "@/components/form"; import { updateSite } from "@/lib/actions"; -import db from "@/lib/db/db"; +import db from "@/lib/db"; export default async function SiteSettingsAppearance({ params, diff --git a/app/app/(dashboard)/site/[id]/settings/domains/page.tsx b/app/app/(dashboard)/site/[id]/settings/domains/page.tsx index c3becea5a..941e7ab30 100644 --- a/app/app/(dashboard)/site/[id]/settings/domains/page.tsx +++ b/app/app/(dashboard)/site/[id]/settings/domains/page.tsx @@ -1,6 +1,6 @@ import Form from "@/components/form"; import { updateSite } from "@/lib/actions"; -import db from "@/lib/db/db"; +import db from "@/lib/db"; export default async function SiteSettingsDomains({ params, diff --git a/app/app/(dashboard)/site/[id]/settings/layout.tsx b/app/app/(dashboard)/site/[id]/settings/layout.tsx index c507a6c01..cf5735602 100644 --- a/app/app/(dashboard)/site/[id]/settings/layout.tsx +++ b/app/app/(dashboard)/site/[id]/settings/layout.tsx @@ -2,7 +2,7 @@ import { ReactNode } from "react"; import { getSession } from "@/lib/auth"; import { notFound, redirect } from "next/navigation"; import SiteSettingsNav from "./nav"; -import db from "@/lib/db/db"; +import db from "@/lib/db"; export default async function SiteAnalyticsLayout({ params, diff --git a/app/app/(dashboard)/site/[id]/settings/page.tsx b/app/app/(dashboard)/site/[id]/settings/page.tsx index 479d3df39..d1b1af2fb 100644 --- a/app/app/(dashboard)/site/[id]/settings/page.tsx +++ b/app/app/(dashboard)/site/[id]/settings/page.tsx @@ -1,7 +1,7 @@ import Form from "@/components/form"; import { updateSite } from "@/lib/actions"; import DeleteSiteForm from "@/components/form/delete-site-form"; -import db from "@/lib/db/db"; +import db from "@/lib/db"; export default async function SiteSettingsIndex({ params, diff --git a/components/blog-card.tsx b/components/blog-card.tsx index 8fe7ea0e2..fd9be6cbb 100644 --- a/components/blog-card.tsx +++ b/components/blog-card.tsx @@ -1,7 +1,7 @@ import Link from "next/link"; import BlurImage from "./blur-image"; import { placeholderBlurhash, toDateString } from "@/lib/utils"; -import type { SelectPost } from "@/lib/db/schema"; +import type { SelectPost } from "@/lib/schema"; interface BlogCardProps { data: Pick< diff --git a/components/editor.tsx b/components/editor.tsx index eed21bd6d..6e846f087 100644 --- a/components/editor.tsx +++ b/components/editor.tsx @@ -8,7 +8,7 @@ import { cn } from "@/lib/utils"; import LoadingDots from "./icons/loading-dots"; import { ExternalLink } from "lucide-react"; import { toast } from "sonner"; -import type { SelectPost } from "@/lib/db/schema"; +import type { SelectPost } from "@/lib/schema"; type PostWithSite = SelectPost & { site: { subdomain: string | null } | null }; diff --git a/components/mdx.tsx b/components/mdx.tsx index 4eead7f05..4277bbc52 100644 --- a/components/mdx.tsx +++ b/components/mdx.tsx @@ -5,7 +5,7 @@ import { replaceLinks } from "@/lib/remark-plugins"; import { Tweet } from "react-tweet"; import BlurImage from "@/components/blur-image"; import styles from "./mdx.module.css"; -import type { SelectPost } from "@/lib/db/schema"; +import type { SelectPost } from "@/lib/schema"; export default function MDX({ source }: { source: MDXRemoteProps }) { const components = { diff --git a/components/overview-sites-cta.tsx b/components/overview-sites-cta.tsx index 51f7175eb..acbfa44d7 100644 --- a/components/overview-sites-cta.tsx +++ b/components/overview-sites-cta.tsx @@ -2,8 +2,8 @@ import { getSession } from "@/lib/auth"; import CreateSiteButton from "./create-site-button"; import CreateSiteModal from "./modal/create-site"; import Link from "next/link"; -import db from "@/lib/db/db"; -import { sites } from "@/lib/db/schema"; +import db from "@/lib/db"; +import { sites } from "@/lib/schema"; import { count, eq } from "drizzle-orm"; export default async function OverviewSitesCTA() { diff --git a/components/post-card.tsx b/components/post-card.tsx index 5c2cf1ac4..788a0a597 100644 --- a/components/post-card.tsx +++ b/components/post-card.tsx @@ -1,5 +1,5 @@ import BlurImage from "@/components/blur-image"; -import type { SelectPost, SelectSite } from "@/lib/db/schema"; +import type { SelectPost, SelectSite } from "@/lib/schema"; import { placeholderBlurhash, random } from "@/lib/utils"; import { BarChart, ExternalLink } from "lucide-react"; import Link from "next/link"; diff --git a/components/posts.tsx b/components/posts.tsx index 4b8c45be7..d6f926eb9 100644 --- a/components/posts.tsx +++ b/components/posts.tsx @@ -1,11 +1,8 @@ import { getSession } from "@/lib/auth"; +import db from "@/lib/db"; +import Image from "next/image"; import { redirect } from "next/navigation"; import PostCard from "./post-card"; -import Image from "next/image"; -import db from "@/lib/db/db"; -import { posts, sites, users } from "@/lib/db/schema"; -import { eq, and, desc, getTableColumns } from "drizzle-orm"; -import { withLimit } from "@/lib/utils"; export default async function Posts({ siteId, @@ -19,25 +16,22 @@ export default async function Posts({ redirect("/login"); } - const query = db - .select({ site: sites, ...getTableColumns(posts) }) - .from(posts) - .leftJoin(sites, eq(posts.siteId, sites.id)) - .where( + const posts = await db.query.posts.findMany({ + where: (posts, { and, eq }) => and( eq(posts.userId, session.user.id), - siteId ? eq(sites.id, siteId) : undefined, + siteId ? eq(posts.siteId, siteId) : undefined, ), - ) - .orderBy(desc(posts.updatedAt)); - - const postsResult = limit - ? await withLimit(query.$dynamic(), limit) - : await query; + with: { + site: true, + }, + orderBy: (posts, { desc }) => desc(posts.updatedAt), + ...(limit ? { limit } : {}), + }); - return postsResult.length > 0 ? ( + return posts.length > 0 ? (
- {postsResult.map((post) => ( + {posts.map((post) => ( ))}
diff --git a/components/site-card.tsx b/components/site-card.tsx index 21a618d95..33781a093 100644 --- a/components/site-card.tsx +++ b/components/site-card.tsx @@ -1,5 +1,5 @@ import BlurImage from "@/components/blur-image"; -import type { SelectSite } from "@/lib/db/schema"; +import type { SelectSite } from "@/lib/schema"; import { placeholderBlurhash, random } from "@/lib/utils"; import { BarChart, ExternalLink } from "lucide-react"; import Link from "next/link"; diff --git a/components/sites.tsx b/components/sites.tsx index 0a5bd193a..a1b3c2757 100644 --- a/components/sites.tsx +++ b/components/sites.tsx @@ -1,33 +1,24 @@ import { getSession } from "@/lib/auth"; +import db from "@/lib/db"; +import Image from "next/image"; import { redirect } from "next/navigation"; import SiteCard from "./site-card"; -import Image from "next/image"; -import db from "@/lib/db/db"; -import { sites, users } from "@/lib/db/schema"; -import { asc, eq, getTableColumns } from "drizzle-orm"; -import { withLimit } from "@/lib/utils"; export default async function Sites({ limit }: { limit?: number }) { const session = await getSession(); if (!session) { redirect("/login"); } - const query = db - .select({ - ...getTableColumns(sites), - }) - .from(sites) - .leftJoin(users, eq(sites.userId, users.id)) - .where(eq(users.id, session.user.id)) - .orderBy(asc(sites.createdAt)); - const sitesResult = limit - ? await withLimit(query.$dynamic(), limit) - : await query; + const sites = await db.query.sites.findMany({ + where: (sites, { eq }) => eq(sites.userId, session.user.id), + orderBy: (sites, { asc }) => asc(sites.createdAt), + ...(limit ? { limit } : {}), + }); - return sitesResult.length > 0 ? ( + return sites.length > 0 ? (
- {sitesResult.map((site) => ( + {sites.map((site) => ( ))}
diff --git a/lib/actions.ts b/lib/actions.ts index 5c6bef3da..f3cb27f05 100644 --- a/lib/actions.ts +++ b/lib/actions.ts @@ -12,8 +12,8 @@ import { eq } from "drizzle-orm"; import { customAlphabet } from "nanoid"; import { revalidateTag } from "next/cache"; import { withPostAuth, withSiteAuth } from "./auth"; -import db from "./db/db"; -import { SelectPost, SelectSite, posts, sites, users } from "./db/schema"; +import db from "./db"; +import { SelectPost, SelectSite, posts, sites, users } from "./schema"; const nanoid = customAlphabet( "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz", diff --git a/lib/auth.ts b/lib/auth.ts index cf02fb517..a326b9865 100644 --- a/lib/auth.ts +++ b/lib/auth.ts @@ -1,9 +1,9 @@ import { getServerSession, type NextAuthOptions } from "next-auth"; import GitHubProvider from "next-auth/providers/github"; -import db from "./db/db"; +import db from "./db"; import { DrizzleAdapter } from "@auth/drizzle-adapter"; import { Adapter } from "next-auth/adapters"; -import { accounts, sessions, users, verificationTokens } from "./db/schema"; +import { accounts, sessions, users, verificationTokens } from "./schema"; const VERCEL_DEPLOYMENT = !!process.env.VERCEL_URL; export const authOptions: NextAuthOptions = { diff --git a/lib/db/db.ts b/lib/db.ts similarity index 100% rename from lib/db/db.ts rename to lib/db.ts diff --git a/lib/fetchers.ts b/lib/fetchers.ts index d62c322eb..ffc621874 100644 --- a/lib/fetchers.ts +++ b/lib/fetchers.ts @@ -1,7 +1,7 @@ import { unstable_cache } from "next/cache"; -import db from "./db/db"; +import db from "./db"; import { and, desc, eq, not } from "drizzle-orm"; -import { posts, sites, users } from "./db/schema"; +import { posts, sites, users } from "./schema"; import { serialize } from "next-mdx-remote/serialize"; import { replaceExamples, replaceTweets } from "@/lib/remark-plugins"; diff --git a/lib/remark-plugins.tsx b/lib/remark-plugins.tsx index 5098cc540..2cf9dc42f 100644 --- a/lib/remark-plugins.tsx +++ b/lib/remark-plugins.tsx @@ -1,8 +1,8 @@ import Link from "next/link"; import { visit } from "unist-util-visit"; import { ReactNode } from "react"; -import { DrizzleClient } from "./db/db"; -import { SelectExample } from "./db/schema"; +import { DrizzleClient } from "./db"; +import { SelectExample } from "./schema"; export function replaceLinks({ href, diff --git a/lib/db/schema.ts b/lib/schema.ts similarity index 100% rename from lib/db/schema.ts rename to lib/schema.ts From fce5c6c29cefab6a6c02b8891605088874bc349a Mon Sep 17 00:00:00 2001 From: realmikesolo Date: Wed, 15 May 2024 16:28:25 +0200 Subject: [PATCH 12/14] update: drizzle kit to new version & fix: bugs --- drizzle.config.ts | 2 +- package.json | 2 +- pnpm-lock.yaml | 8 ++-- ...n.sql => 0000_concerned_virginia_dare.sql} | 28 +++++++------- .../migrations/meta/0000_snapshot.json | 37 ++++++++++--------- .../migrations/meta/_journal.json | 10 ++--- .../prisma-compatible-schema.ts | 0 7 files changed, 46 insertions(+), 41 deletions(-) rename prisma-compatible/migrations/{0000_bright_black_queen.sql => 0000_concerned_virginia_dare.sql} (99%) rename prisma-compatible/{migrations => }/prisma-compatible-schema.ts (100%) diff --git a/drizzle.config.ts b/drizzle.config.ts index 962cd3510..dfe23551c 100644 --- a/drizzle.config.ts +++ b/drizzle.config.ts @@ -1,7 +1,7 @@ import { defineConfig } from "drizzle-kit"; export default defineConfig({ - schema: "./lib/db/schema.ts", + schema: "./lib/schema.ts", out: "./drizzle/migrations", dialect: "postgresql", dbCredentials: { diff --git a/package.json b/package.json index e4c57076c..b29395ae5 100644 --- a/package.json +++ b/package.json @@ -53,7 +53,7 @@ "@types/react": "^18.2.37", "@types/react-dom": "^18.2.15", "autoprefixer": "^10.4.16", - "drizzle-kit": "^0.21.1", + "drizzle-kit": "^0.21.2", "eslint": "8.53.0", "eslint-config-next": "^14.0.2", "postcss": "^8.4.31", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0a9c2652e..49eb76f6a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -134,8 +134,8 @@ devDependencies: specifier: ^10.4.16 version: 10.4.19(postcss@8.4.38) drizzle-kit: - specifier: ^0.21.1 - version: 0.21.1 + specifier: ^0.21.2 + version: 0.21.2 eslint: specifier: 8.53.0 version: 8.53.0 @@ -3412,8 +3412,8 @@ packages: wordwrap: 1.0.0 dev: true - /drizzle-kit@0.21.1: - resolution: {integrity: sha512-Sp7OnCdROiE2ebMuHsAfrnRoHVGYCvErQxUh7/0l6R1caHssZu9oZu/hW9rLU19xnTK4/y3iSe3sL0Cc530wCg==} + /drizzle-kit@0.21.2: + resolution: {integrity: sha512-U87IhZyCt/9d0ZT/Na3KFJVY31tSxtTx/n9UMcWFpW/5c2Ede39xiCG5efNV/0iimsv97UIRtDI0ldLBW5lbcg==} hasBin: true dependencies: '@esbuild-kit/esm-loader': 2.6.5 diff --git a/prisma-compatible/migrations/0000_bright_black_queen.sql b/prisma-compatible/migrations/0000_concerned_virginia_dare.sql similarity index 99% rename from prisma-compatible/migrations/0000_bright_black_queen.sql rename to prisma-compatible/migrations/0000_concerned_virginia_dare.sql index 76b9cfe3e..41c74f026 100644 --- a/prisma-compatible/migrations/0000_bright_black_queen.sql +++ b/prisma-compatible/migrations/0000_concerned_virginia_dare.sql @@ -96,19 +96,6 @@ CREATE TABLE IF NOT EXISTS "Post" ( "userId" text ); --> statement-breakpoint -CREATE UNIQUE INDEX IF NOT EXISTS "VerificationToken_token_key" ON "VerificationToken" ("token");--> statement-breakpoint -CREATE UNIQUE INDEX IF NOT EXISTS "VerificationToken_identifier_token_key" ON "VerificationToken" ("identifier","token");--> statement-breakpoint -CREATE UNIQUE INDEX IF NOT EXISTS "User_email_key" ON "User" ("email");--> statement-breakpoint -CREATE INDEX IF NOT EXISTS "Account_userId_idx" ON "Account" ("userId");--> statement-breakpoint -CREATE UNIQUE INDEX IF NOT EXISTS "Account_provider_providerAccountId_key" ON "Account" ("provider","providerAccountId");--> statement-breakpoint -CREATE UNIQUE INDEX IF NOT EXISTS "Session_sessionToken_key" ON "Session" ("sessionToken");--> statement-breakpoint -CREATE INDEX IF NOT EXISTS "Session_userId_idx" ON "Session" ("userId");--> statement-breakpoint -CREATE UNIQUE INDEX IF NOT EXISTS "Site_subdomain_key" ON "Site" ("subdomain");--> statement-breakpoint -CREATE UNIQUE INDEX IF NOT EXISTS "Site_customDomain_key" ON "Site" ("customDomain");--> statement-breakpoint -CREATE INDEX IF NOT EXISTS "Site_userId_idx" ON "Site" ("userId");--> statement-breakpoint -CREATE INDEX IF NOT EXISTS "Post_siteId_idx" ON "Post" ("siteId");--> statement-breakpoint -CREATE INDEX IF NOT EXISTS "Post_userId_idx" ON "Post" ("userId");--> statement-breakpoint -CREATE UNIQUE INDEX IF NOT EXISTS "Post_slug_siteId_key" ON "Post" ("slug","siteId");--> statement-breakpoint DO $$ BEGIN ALTER TABLE "Account" ADD CONSTRAINT "Account_userId_fkey" FOREIGN KEY ("userId") REFERENCES "public"."User"("id") ON DELETE cascade ON UPDATE cascade; EXCEPTION @@ -138,3 +125,18 @@ DO $$ BEGIN EXCEPTION WHEN duplicate_object THEN null; END $$; +--> statement-breakpoint +CREATE UNIQUE INDEX IF NOT EXISTS "VerificationToken_token_key" ON "VerificationToken" ("token");--> statement-breakpoint +CREATE UNIQUE INDEX IF NOT EXISTS "VerificationToken_identifier_token_key" ON "VerificationToken" ("identifier","token");--> statement-breakpoint +CREATE UNIQUE INDEX IF NOT EXISTS "User_email_key" ON "User" ("email");--> statement-breakpoint +CREATE INDEX IF NOT EXISTS "Account_userId_idx" ON "Account" ("userId");--> statement-breakpoint +CREATE UNIQUE INDEX IF NOT EXISTS "Account_provider_providerAccountId_key" ON "Account" ("provider","providerAccountId");--> statement-breakpoint +CREATE UNIQUE INDEX IF NOT EXISTS "Session_sessionToken_key" ON "Session" ("sessionToken");--> statement-breakpoint +CREATE INDEX IF NOT EXISTS "Session_userId_idx" ON "Session" ("userId");--> statement-breakpoint +CREATE UNIQUE INDEX IF NOT EXISTS "Site_subdomain_key" ON "Site" ("subdomain");--> statement-breakpoint +CREATE UNIQUE INDEX IF NOT EXISTS "Site_customDomain_key" ON "Site" ("customDomain");--> statement-breakpoint +CREATE INDEX IF NOT EXISTS "Site_userId_idx" ON "Site" ("userId");--> statement-breakpoint +CREATE INDEX IF NOT EXISTS "Post_siteId_idx" ON "Post" ("siteId");--> statement-breakpoint +CREATE INDEX IF NOT EXISTS "Post_userId_idx" ON "Post" ("userId");--> statement-breakpoint +CREATE UNIQUE INDEX IF NOT EXISTS "Post_slug_siteId_key" ON "Post" ("slug","siteId"); + diff --git a/prisma-compatible/migrations/meta/0000_snapshot.json b/prisma-compatible/migrations/meta/0000_snapshot.json index 6ce540e29..baaefaf4b 100644 --- a/prisma-compatible/migrations/meta/0000_snapshot.json +++ b/prisma-compatible/migrations/meta/0000_snapshot.json @@ -1,4 +1,6 @@ { + "id": "00000000-0000-0000-0000-000000000000", + "prevId": "", "version": "6", "dialect": "postgresql", "tables": { @@ -335,12 +337,12 @@ "Account_userId_fkey": { "name": "Account_userId_fkey", "tableFrom": "Account", - "columnsFrom": ["userId"], "tableTo": "User", "schemaTo": "public", + "columnsFrom": ["userId"], "columnsTo": ["id"], - "onUpdate": "cascade", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "cascade" } }, "compositePrimaryKeys": {}, @@ -391,12 +393,12 @@ "Session_userId_fkey": { "name": "Session_userId_fkey", "tableFrom": "Session", - "columnsFrom": ["userId"], "tableTo": "User", "schemaTo": "public", + "columnsFrom": ["userId"], "columnsTo": ["id"], - "onUpdate": "cascade", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "cascade" } }, "compositePrimaryKeys": {}, @@ -512,12 +514,12 @@ "Site_userId_fkey": { "name": "Site_userId_fkey", "tableFrom": "Site", - "columnsFrom": ["userId"], "tableTo": "User", "schemaTo": "public", + "columnsFrom": ["userId"], "columnsTo": ["id"], - "onUpdate": "cascade", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "cascade" } }, "compositePrimaryKeys": {}, @@ -625,22 +627,22 @@ "Post_siteId_fkey": { "name": "Post_siteId_fkey", "tableFrom": "Post", - "columnsFrom": ["siteId"], "tableTo": "Site", "schemaTo": "public", + "columnsFrom": ["siteId"], "columnsTo": ["id"], - "onUpdate": "cascade", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "cascade" }, "Post_userId_fkey": { "name": "Post_userId_fkey", "tableFrom": "Post", - "columnsFrom": ["userId"], "tableTo": "User", "schemaTo": "public", + "columnsFrom": ["userId"], "columnsTo": ["id"], - "onUpdate": "cascade", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "cascade" } }, "compositePrimaryKeys": {}, @@ -654,6 +656,7 @@ "tables": {}, "columns": {} }, - "id": "00000000-0000-0000-0000-000000000000", - "prevId": "" + "internal": { + "tables": {} + } } diff --git a/prisma-compatible/migrations/meta/_journal.json b/prisma-compatible/migrations/meta/_journal.json index b306fdf46..386ca60eb 100644 --- a/prisma-compatible/migrations/meta/_journal.json +++ b/prisma-compatible/migrations/meta/_journal.json @@ -1,12 +1,12 @@ { - "version": "5", - "dialect": "pg", + "version": "6", + "dialect": "postgresql", "entries": [ { "idx": 0, - "version": "5", - "when": 1715440394028, - "tag": "0000_bright_black_queen", + "version": "6", + "when": 1715782844357, + "tag": "0000_concerned_virginia_dare", "breakpoints": true } ] diff --git a/prisma-compatible/migrations/prisma-compatible-schema.ts b/prisma-compatible/prisma-compatible-schema.ts similarity index 100% rename from prisma-compatible/migrations/prisma-compatible-schema.ts rename to prisma-compatible/prisma-compatible-schema.ts From 6daa8ea77c5201929331b6bfdd192c22f7090ca3 Mon Sep 17 00:00:00 2001 From: realmikesolo Date: Fri, 7 Jun 2024 20:10:48 +0200 Subject: [PATCH 13/14] feat(drizzle): add instructions & bump drizzle orm & drizzle-kit version --- drizzle.config.ts | 2 - lib/fetchers.ts | 8 +- .../legacy-schema.ts | 2 +- migrate-to-drizzle.md | 12 + package.json | 6 +- pnpm-lock.yaml | 1252 +++++++---------- .../0000_concerned_virginia_dare.sql | 142 -- .../migrations/meta/0000_snapshot.json | 662 --------- .../migrations/meta/_journal.json | 13 - 9 files changed, 563 insertions(+), 1536 deletions(-) rename prisma-compatible/prisma-compatible-schema.ts => lib/legacy-schema.ts (98%) create mode 100644 migrate-to-drizzle.md delete mode 100644 prisma-compatible/migrations/0000_concerned_virginia_dare.sql delete mode 100644 prisma-compatible/migrations/meta/0000_snapshot.json delete mode 100644 prisma-compatible/migrations/meta/_journal.json diff --git a/drizzle.config.ts b/drizzle.config.ts index dfe23551c..6786ce5ba 100644 --- a/drizzle.config.ts +++ b/drizzle.config.ts @@ -7,6 +7,4 @@ export default defineConfig({ dbCredentials: { url: process.env.POSTGRES_URL!, }, - verbose: true, - strict: true, }); diff --git a/lib/fetchers.ts b/lib/fetchers.ts index ffc621874..d4ef599c1 100644 --- a/lib/fetchers.ts +++ b/lib/fetchers.ts @@ -73,7 +73,11 @@ export async function getPostData(domain: string, slug: string) { return await unstable_cache( async () => { const data = await db - .select() + .select({ + post: posts, + site: sites, + user: users, + }) .from(posts) .leftJoin(sites, eq(sites.id, posts.siteId)) .leftJoin(users, eq(users.id, sites.userId)) @@ -92,7 +96,7 @@ export async function getPostData(domain: string, slug: string) { ...res[0].post, site: res[0].site ? { - ...res[0].user, + ...res[0].site, user: res[0].user, } : null, diff --git a/prisma-compatible/prisma-compatible-schema.ts b/lib/legacy-schema.ts similarity index 98% rename from prisma-compatible/prisma-compatible-schema.ts rename to lib/legacy-schema.ts index 76cf0d518..0ff316d86 100644 --- a/prisma-compatible/prisma-compatible-schema.ts +++ b/lib/legacy-schema.ts @@ -49,7 +49,7 @@ export const users = pgTable( name: text("name"), username: text("username"), gh_username: text("gh_username"), - email: text("email"), // set notNull() because for next-auth adapter email type column is non-nullable and generate migration + email: text("email").notNull(), emailVerified: timestamp("emailVerified", { precision: 3, mode: "date" }), image: text("image"), createdAt: timestamp("createdAt", { precision: 3, mode: "date" }) diff --git a/migrate-to-drizzle.md b/migrate-to-drizzle.md new file mode 100644 index 000000000..dc4b6735c --- /dev/null +++ b/migrate-to-drizzle.md @@ -0,0 +1,12 @@ +## If you directly start the project with Drizzle ORM + +1. **Remove unnecessary schema file**: Delete `lib/legacy-schema.ts` file as it is only used when migrating from Prisma. +2. **Initialize Schema**: The Drizzle schema located in `lib/schema.ts` will be used for database queries. +2. **Apply changes to the database**: Run the `drizzle-kit push` command to apply your changes to the database. Learn more about the push command [here](https://orm.drizzle.team/kit-docs/overview#prototyping-with-db-push). +3. **Begin using the template**: You can now start using this template with Drizzle ORM. + +## If you migrating from Prisma + +1. **Replace the schema file**: Remove the existing `lib/schema.ts` file and rename `lib/legacy-schema.ts` to `lib/schema.ts`. +2. **Update database schema**: `email` column in `users` table is set to `not null` to ensure compatibility with drizzle next-auth adapter. Apply this change by running the `drizzle-kit push` command. Learn more about `push` command [here](https://orm.drizzle.team/kit-docs/overview#prototyping-with-db-push). +3. **Complete migration**: You are now ready to use this template with Drizzle ORM. diff --git a/package.json b/package.json index b29395ae5..8813d7c31 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "private": true, "scripts": { "dev": "next dev", - "build": "next build", + "build": "drizzle-kit push && next build", "format:write": "prettier --write \"**/*.{css,js,json,jsx,ts,tsx}\"", "format": "prettier \"**/*.{css,js,json,jsx,ts,tsx}\"", "start": "next start", @@ -20,7 +20,7 @@ "ai": "^2.2.22", "clsx": "^2.0.0", "date-fns": "^2.30.0", - "drizzle-orm": "^0.30.10", + "drizzle-orm": "^0.31.2", "focus-trap-react": "^10.2.3", "framer-motion": "^10.16.4", "gray-matter": "^4.0.3", @@ -53,7 +53,7 @@ "@types/react": "^18.2.37", "@types/react-dom": "^18.2.15", "autoprefixer": "^10.4.16", - "drizzle-kit": "^0.21.2", + "drizzle-kit": "^0.22.5", "eslint": "8.53.0", "eslint-config-next": "^14.0.2", "postcss": "^8.4.31", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 49eb76f6a..a5a9b5e8d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -7,19 +7,19 @@ settings: dependencies: '@auth/drizzle-adapter': specifier: ^1.1.0 - version: 1.1.0 + version: 1.2.0 '@paralleldrive/cuid2': specifier: ^2.2.2 version: 2.2.2 '@tremor/react': specifier: ^3.11.1 - version: 3.16.2(react-dom@18.3.1)(react@18.3.1)(tailwindcss@3.4.3) + version: 3.17.2(react-dom@18.3.1)(react@18.3.1)(tailwindcss@3.4.4) '@upstash/ratelimit': specifier: ^0.4.4 version: 0.4.4 '@vercel/analytics': specifier: ^1.1.1 - version: 1.2.2(next@14.0.2)(react@18.3.1) + version: 1.3.1(next@14.0.2)(react@18.3.1) '@vercel/blob': specifier: ^0.15.0 version: 0.15.1 @@ -31,7 +31,7 @@ dependencies: version: 0.8.0 ai: specifier: ^2.2.22 - version: 2.2.37(react@18.3.1)(solid-js@1.8.17)(svelte@4.2.15)(vue@3.4.27) + version: 2.2.37(react@18.3.1)(solid-js@1.8.17)(svelte@4.2.18)(vue@3.4.27) clsx: specifier: ^2.0.0 version: 2.1.1 @@ -39,8 +39,8 @@ dependencies: specifier: ^2.30.0 version: 2.30.0 drizzle-orm: - specifier: ^0.30.10 - version: 0.30.10(@types/react@18.3.1)(@vercel/postgres@0.8.0)(pg@8.11.5)(react@18.3.1) + specifier: ^0.31.2 + version: 0.31.2(@types/react@18.3.3)(@vercel/postgres@0.8.0)(pg@8.12.0)(react@18.3.1) focus-trap-react: specifier: ^10.2.3 version: 10.2.3(prop-types@15.8.1)(react-dom@18.3.1)(react@18.3.1) @@ -70,13 +70,13 @@ dependencies: version: 4.4.1(react-dom@18.3.1)(react@18.3.1) novel: specifier: ^0.1.22 - version: 0.1.22(react@18.3.1)(solid-js@1.8.17)(svelte@4.2.15)(vue@3.4.27) + version: 0.1.22(react@18.3.1)(solid-js@1.8.17)(svelte@4.2.18)(vue@3.4.27) openai-edge: specifier: ^1.2.2 version: 1.2.2 pg: specifier: ^8.11.3 - version: 8.11.5 + version: 8.12.0 react: specifier: ^18.2.0 version: 18.3.1 @@ -85,7 +85,7 @@ dependencies: version: 18.3.1(react@18.3.1) react-textarea-autosize: specifier: ^8.5.3 - version: 8.5.3(@types/react@18.3.1)(react@18.3.1) + version: 8.5.3(@types/react@18.3.3)(react@18.3.1) react-tweet: specifier: ^3.1.1 version: 3.2.1(react-dom@18.3.1)(react@18.3.1) @@ -109,24 +109,24 @@ dependencies: version: 5.0.0 use-debounce: specifier: ^10.0.0 - version: 10.0.0(react@18.3.1) + version: 10.0.1(react@18.3.1) devDependencies: '@tailwindcss/forms': specifier: ^0.5.7 - version: 0.5.7(tailwindcss@3.4.3) + version: 0.5.7(tailwindcss@3.4.4) '@tailwindcss/typography': specifier: ^0.5.10 - version: 0.5.13(tailwindcss@3.4.3) + version: 0.5.13(tailwindcss@3.4.4) '@types/js-cookie': specifier: ^3.0.6 version: 3.0.6 '@types/node': specifier: ^20.9.0 - version: 20.12.10 + version: 20.14.2 '@types/react': specifier: ^18.2.37 - version: 18.3.1 + version: 18.3.3 '@types/react-dom': specifier: ^18.2.15 version: 18.3.0 @@ -134,8 +134,8 @@ devDependencies: specifier: ^10.4.16 version: 10.4.19(postcss@8.4.38) drizzle-kit: - specifier: ^0.21.2 - version: 0.21.2 + specifier: ^0.22.5 + version: 0.22.5 eslint: specifier: 8.53.0 version: 8.53.0 @@ -147,16 +147,16 @@ devDependencies: version: 8.4.38 prettier: specifier: ^3.1.0 - version: 3.2.5 + version: 3.3.1 prettier-plugin-tailwindcss: specifier: ^0.5.7 - version: 0.5.14(prettier@3.2.5) + version: 0.5.14(prettier@3.3.1) tailwindcss: specifier: ^3.3.5 - version: 3.4.3 + version: 3.4.4 tailwindcss-animate: specifier: ^1.0.7 - version: 1.0.7(tailwindcss@3.4.3) + version: 1.0.7(tailwindcss@3.4.4) typescript: specifier: ^5.2.2 version: 5.4.5 @@ -175,8 +175,8 @@ packages: '@jridgewell/trace-mapping': 0.3.25 dev: false - /@auth/core@0.31.0: - resolution: {integrity: sha512-UKk3psvA1cRbk4/c9CkpWB8mdWrkKvzw0DmEYRsWolUQytQ2cRqx+hYuV6ZCsngw/xbj9hpmkZmAZEyq2g4fMg==} + /@auth/core@0.32.0: + resolution: {integrity: sha512-3+ssTScBd+1fd0/fscAyQN1tSygXzuhysuVVzB942ggU4mdfiTbv36P0ccVnExKWYJKvu3E2r3/zxXCCAmTOrg==} peerDependencies: '@simplewebauthn/browser': ^9.0.1 '@simplewebauthn/server': ^9.0.2 @@ -192,70 +192,70 @@ packages: '@panva/hkdf': 1.1.1 '@types/cookie': 0.6.0 cookie: 0.6.0 - jose: 5.2.4 + jose: 5.4.0 oauth4webapi: 2.10.4 preact: 10.11.3 preact-render-to-string: 5.2.3(preact@10.11.3) dev: false - /@auth/drizzle-adapter@1.1.0: - resolution: {integrity: sha512-ZC83ne3Ulkxh2II2T5qazgrqc1AmWbbPzs3oR+C93DMlIV8DPIgEaw4cmbV/kesO9xO+Gt7HpkctmOa2B26A1Q==} + /@auth/drizzle-adapter@1.2.0: + resolution: {integrity: sha512-95LHWlgtR4rQeHy4bACiVgTZdWkkEpVXYJim1IqbF1Hy0MnnMalmfGuIlNcOi64+6iC17j5FkDsMchqGwvj2Dg==} dependencies: - '@auth/core': 0.31.0 + '@auth/core': 0.32.0 transitivePeerDependencies: - '@simplewebauthn/browser' - '@simplewebauthn/server' - nodemailer dev: false - /@babel/code-frame@7.24.2: - resolution: {integrity: sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==} + /@babel/code-frame@7.24.7: + resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/highlight': 7.24.5 - picocolors: 1.0.0 + '@babel/highlight': 7.24.7 + picocolors: 1.0.1 dev: false - /@babel/helper-string-parser@7.24.1: - resolution: {integrity: sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==} + /@babel/helper-string-parser@7.24.7: + resolution: {integrity: sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==} engines: {node: '>=6.9.0'} dev: false - /@babel/helper-validator-identifier@7.24.5: - resolution: {integrity: sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA==} + /@babel/helper-validator-identifier@7.24.7: + resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} engines: {node: '>=6.9.0'} dev: false - /@babel/highlight@7.24.5: - resolution: {integrity: sha512-8lLmua6AVh/8SLJRRVD6V8p73Hir9w5mJrhE+IPpILG31KKlI9iz5zmBYKcWPS59qSfgP9RaSBQSHHE81WKuEw==} + /@babel/highlight@7.24.7: + resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-validator-identifier': 7.24.5 + '@babel/helper-validator-identifier': 7.24.7 chalk: 2.4.2 js-tokens: 4.0.0 - picocolors: 1.0.0 + picocolors: 1.0.1 dev: false - /@babel/parser@7.24.5: - resolution: {integrity: sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg==} + /@babel/parser@7.24.7: + resolution: {integrity: sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==} engines: {node: '>=6.0.0'} hasBin: true dependencies: - '@babel/types': 7.24.5 + '@babel/types': 7.24.7 dev: false - /@babel/runtime@7.24.5: - resolution: {integrity: sha512-Nms86NXrsaeU9vbBJKni6gXiEXZ4CVpYVzEjDH9Sb8vmZ3UljyA1GSOJl/6LGPO8EHLuSF9H+IxNXHPX8QHJ4g==} + /@babel/runtime@7.24.7: + resolution: {integrity: sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw==} engines: {node: '>=6.9.0'} dependencies: regenerator-runtime: 0.14.1 - /@babel/types@7.24.5: - resolution: {integrity: sha512-6mQNsaLeXTw0nxYUYu+NSa4Hx4BlF1x1x8/PMFbiR+GBSr+2DkECc69b8hgy2frEodNcvPffeH8YfWd3LI6jhQ==} + /@babel/types@7.24.7: + resolution: {integrity: sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-string-parser': 7.24.1 - '@babel/helper-validator-identifier': 7.24.5 + '@babel/helper-string-parser': 7.24.7 + '@babel/helper-validator-identifier': 7.24.7 to-fast-properties: 2.0.0 dev: false @@ -284,7 +284,7 @@ packages: resolution: {integrity: sha512-FxEMIkJKnodyA1OaCUoEvbYRkoZlLZ4d/eXFu9Fh8CbBBgP5EmZxrfTRyN0qpXZ4vOvqnE5YdRdcrmUUXuU+dA==} dependencies: '@esbuild-kit/core-utils': 3.3.2 - get-tsconfig: 4.7.4 + get-tsconfig: 4.7.5 dev: true /@esbuild/aix-ppc64@0.19.12: @@ -711,8 +711,8 @@ packages: eslint: 8.53.0 eslint-visitor-keys: 3.4.3 - /@eslint-community/regexpp@4.10.0: - resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} + /@eslint-community/regexpp@4.10.1: + resolution: {integrity: sha512-Zm2NGpWELsQAD1xsJzGQpYfvICSsFkEpU0jxBjfdC6uNEWXcHnfs9hScFWtXVDVl+rBQJGrl4g1vcKIejpH9dA==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} /@eslint/eslintrc@2.1.4: @@ -720,7 +720,7 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 - debug: 4.3.4 + debug: 4.3.5 espree: 9.6.1 globals: 13.24.0 ignore: 5.3.1 @@ -745,8 +745,8 @@ packages: engines: {node: '>=14'} dev: false - /@floating-ui/core@1.6.1: - resolution: {integrity: sha512-42UH54oPZHPdRHdw6BgoBD6cg/eVTmVrFcgeRDM3jbO7uxSoipVcmcIGFcA5jmOHO5apcyvBhkSKES3fQJnu7A==} + /@floating-ui/core@1.6.2: + resolution: {integrity: sha512-+2XpQV9LLZeanU4ZevzRnGFg2neDeKHgFLjP6YLW+tly0IvrhqT4u8enLGjLH3qeh85g19xY5rsAusfwTdn5lg==} dependencies: '@floating-ui/utils': 0.2.2 dev: false @@ -754,7 +754,7 @@ packages: /@floating-ui/dom@1.6.5: resolution: {integrity: sha512-Nsdud2X65Dz+1RHjAIP0t8z5e2ff/IRbei6BqFrl1urT8sDVzM1HMQ+R0XcU5ceRfyO3I6ayeqIfh+6Wb8LGTw==} dependencies: - '@floating-ui/core': 1.6.1 + '@floating-ui/core': 1.6.2 '@floating-ui/utils': 0.2.2 dev: false @@ -769,8 +769,8 @@ packages: react-dom: 18.3.1(react@18.3.1) dev: false - /@floating-ui/react-dom@2.0.9(react-dom@18.2.0)(react@18.3.1): - resolution: {integrity: sha512-q0umO0+LQK4+p6aGyvzASqKbKOJcAHJ7ycE9CuUvfx3s9zTHWmGJTPOIlM/hmSBfUfg/XfY5YhLBLR/LHwShQQ==} + /@floating-ui/react-dom@2.1.0(react-dom@18.2.0)(react@18.3.1): + resolution: {integrity: sha512-lNzj5EQmEKn5FFKc04+zasr09h/uX8RtJRNj5gUXsSQIXHVWTVh+hVAg1vOMCexkX8EgvemMvIFpQfkosnVNyA==} peerDependencies: react: '>=16.8.0' react-dom: '>=16.8.0' @@ -804,19 +804,19 @@ packages: react: ^16 || ^17 || ^18 react-dom: ^16 || ^17 || ^18 dependencies: - '@tanstack/react-virtual': 3.5.0(react-dom@18.3.1)(react@18.3.1) + '@tanstack/react-virtual': 3.5.1(react-dom@18.3.1)(react@18.3.1) client-only: 0.0.1 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) dev: false - /@headlessui/tailwindcss@0.2.0(tailwindcss@3.4.3): - resolution: {integrity: sha512-fpL830Fln1SykOCboExsWr3JIVeQKieLJ3XytLe/tt1A0XzqUthOftDmjcCYLW62w7mQI7wXcoPXr3tZ9QfGxw==} + /@headlessui/tailwindcss@0.2.1(tailwindcss@3.4.4): + resolution: {integrity: sha512-2+5+NZ+RzMyrVeCZOxdbvkUSssSxGvcUxphkIfSVLpRiKsj+/63T2TOL9dBYMXVfj/CGr6hMxSRInzXv6YY7sA==} engines: {node: '>=10'} peerDependencies: tailwindcss: ^3.0 dependencies: - tailwindcss: 3.4.3 + tailwindcss: 3.4.4 dev: false /@humanwhocodes/config-array@0.11.14: @@ -824,7 +824,7 @@ packages: engines: {node: '>=10.10.0'} dependencies: '@humanwhocodes/object-schema': 2.0.3 - debug: 4.3.4 + debug: 4.3.5 minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -853,7 +853,7 @@ packages: dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.12.10 + '@types/node': 20.14.2 jest-mock: 29.7.0 dev: false @@ -863,7 +863,7 @@ packages: dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 20.12.10 + '@types/node': 20.14.2 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -883,7 +883,7 @@ packages: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 20.12.10 + '@types/node': 20.14.2 '@types/yargs': 17.0.32 chalk: 4.1.2 dev: false @@ -943,7 +943,7 @@ packages: react: '>=16' dependencies: '@types/mdx': 2.0.13 - '@types/react': 18.3.1 + '@types/react': 18.3.3 react: 18.3.1 dev: false @@ -1181,7 +1181,7 @@ packages: /@radix-ui/primitive@1.0.1: resolution: {integrity: sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw==} dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 dev: false /@radix-ui/react-arrow@1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.28)(react-dom@18.2.0)(react@18.3.1): @@ -1197,7 +1197,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.28)(react-dom@18.2.0)(react@18.3.1) '@types/react': 18.0.28 '@types/react-dom': 18.0.11 @@ -1214,7 +1214,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 '@types/react': 18.0.28 react: 18.3.1 dev: false @@ -1228,7 +1228,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 '@types/react': 18.0.28 react: 18.3.1 dev: false @@ -1246,7 +1246,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.28)(react@18.3.1) '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.28)(react-dom@18.2.0)(react@18.3.1) @@ -1267,7 +1267,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 '@types/react': 18.0.28 react: 18.3.1 dev: false @@ -1285,7 +1285,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.28)(react@18.3.1) '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.28)(react-dom@18.2.0)(react@18.3.1) '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.28)(react@18.3.1) @@ -1304,7 +1304,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.0.28)(react@18.3.1) '@types/react': 18.0.28 react: 18.3.1 @@ -1323,7 +1323,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.28)(react@18.3.1) '@radix-ui/react-context': 1.0.1(@types/react@18.0.28)(react@18.3.1) @@ -1358,8 +1358,8 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.5 - '@floating-ui/react-dom': 2.0.9(react-dom@18.2.0)(react@18.3.1) + '@babel/runtime': 7.24.7 + '@floating-ui/react-dom': 2.1.0(react-dom@18.2.0)(react@18.3.1) '@radix-ui/react-arrow': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.28)(react-dom@18.2.0)(react@18.3.1) '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.28)(react@18.3.1) '@radix-ui/react-context': 1.0.1(@types/react@18.0.28)(react@18.3.1) @@ -1388,7 +1388,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.28)(react-dom@18.2.0)(react@18.3.1) '@types/react': 18.0.28 '@types/react-dom': 18.0.11 @@ -1409,7 +1409,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.28)(react@18.3.1) '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.0.28)(react@18.3.1) '@types/react': 18.0.28 @@ -1431,7 +1431,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 '@radix-ui/react-slot': 1.0.2(@types/react@18.0.28)(react@18.3.1) '@types/react': 18.0.28 '@types/react-dom': 18.0.11 @@ -1448,7 +1448,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.28)(react@18.3.1) '@types/react': 18.0.28 react: 18.3.1 @@ -1463,7 +1463,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 '@types/react': 18.0.28 react: 18.3.1 dev: false @@ -1477,7 +1477,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.28)(react@18.3.1) '@types/react': 18.0.28 react: 18.3.1 @@ -1492,7 +1492,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.28)(react@18.3.1) '@types/react': 18.0.28 react: 18.3.1 @@ -1507,7 +1507,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 '@types/react': 18.0.28 react: 18.3.1 dev: false @@ -1521,7 +1521,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 '@radix-ui/rect': 1.0.1 '@types/react': 18.0.28 react: 18.3.1 @@ -1536,7 +1536,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.0.28)(react@18.3.1) '@types/react': 18.0.28 react: 18.3.1 @@ -1545,15 +1545,15 @@ packages: /@radix-ui/rect@1.0.1: resolution: {integrity: sha512-fyrgCaedtvMg9NK3en0pnOYJdtfwxUcNolezkNPUsoX57X8oQk+NkqcvzHXD2uKNij6GXmWU9NDru2IWjrO4BQ==} dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 dev: false /@remirror/core-constants@2.0.2: resolution: {integrity: sha512-dyHY+sMF0ihPus3O27ODd4+agdHMEmuRdyiZJ2CCWjPV5UFmn17ZbElvk6WOGVE4rdCJKZQCrPV2BcikOMLUGQ==} dev: false - /@rushstack/eslint-patch@1.10.2: - resolution: {integrity: sha512-hw437iINopmQuxWPSUEvqE56NCPsiU8N4AYtfHmJFckclktzK9YQJieD3XkDCDH4OjL+C7zgPUh73R/nrcHrqw==} + /@rushstack/eslint-patch@1.10.3: + resolution: {integrity: sha512-qC/xYId4NMebE6w/V33Fh9gWxLgURiNYgVNObbJl2LZv0GUUItCcCqC5axQSwRaAgaxl2mELq1rMzlswaQ0Zxg==} /@sinclair/typebox@0.27.8: resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} @@ -1574,31 +1574,31 @@ packages: /@swc/helpers@0.5.1: resolution: {integrity: sha512-sJ902EfIzn1Fa+qYmjdQqh8tPsoxyBz+8yBKC2HKUxyezKJFwPGOn7pv4WY6QuQW//ySQi5lJjA/ZT9sNWWNTg==} dependencies: - tslib: 2.6.2 + tslib: 2.6.3 dev: false /@swc/helpers@0.5.11: resolution: {integrity: sha512-YNlnKRWF2sVojTpIyzwou9XoTNbzbzONwRhOoniEioF1AtaitTvVZblaQRrAzChWQ1bLYyYSWzM18y4WwgzJ+A==} dependencies: - tslib: 2.6.2 + tslib: 2.6.3 dev: false /@swc/helpers@0.5.2: resolution: {integrity: sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==} dependencies: - tslib: 2.6.2 + tslib: 2.6.3 dev: false - /@tailwindcss/forms@0.5.7(tailwindcss@3.4.3): + /@tailwindcss/forms@0.5.7(tailwindcss@3.4.4): resolution: {integrity: sha512-QE7X69iQI+ZXwldE+rzasvbJiyV/ju1FGHH0Qn2W3FKbuYtqp8LKcy6iSw79fVUT5/Vvf+0XgLCeYVG+UV6hOw==} peerDependencies: tailwindcss: '>=3.0.0 || >= 3.0.0-alpha.1' dependencies: mini-svg-data-uri: 1.4.4 - tailwindcss: 3.4.3 + tailwindcss: 3.4.4 dev: true - /@tailwindcss/typography@0.5.13(tailwindcss@3.4.3): + /@tailwindcss/typography@0.5.13(tailwindcss@3.4.4): resolution: {integrity: sha512-ADGcJ8dX21dVVHIwTRgzrcunY6YY9uSlAHHGVKvkA+vLc5qLwEszvKts40lx7z0qc4clpjclwLeK5rVCV2P/uw==} peerDependencies: tailwindcss: '>=3.0.0 || insiders' @@ -1607,291 +1607,291 @@ packages: lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 postcss-selector-parser: 6.0.10 - tailwindcss: 3.4.3 + tailwindcss: 3.4.4 dev: true - /@tanstack/react-virtual@3.5.0(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-rtvo7KwuIvqK9zb0VZ5IL7fiJAEnG+0EiFZz8FUOs+2mhGqdGmjKIaT1XU7Zq0eFqL0jonLlhbayJI/J2SA/Bw==} + /@tanstack/react-virtual@3.5.1(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-jIsuhfgy8GqA67PdWqg73ZB2LFE+HD9hjWL1L6ifEIZVyZVAKpYmgUG4WsKQ005aEyImJmbuimPiEvc57IY0Aw==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: - '@tanstack/virtual-core': 3.5.0 + '@tanstack/virtual-core': 3.5.1 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) dev: false - /@tanstack/virtual-core@3.5.0: - resolution: {integrity: sha512-KnPRCkQTyqhanNC0K63GBG3wA8I+D1fQuVnAvcBF8f13akOKeQp1gSbu6f77zCxhEk727iV5oQnbHLYzHrECLg==} + /@tanstack/virtual-core@3.5.1: + resolution: {integrity: sha512-046+AUSiDru/V9pajE1du8WayvBKeCvJ2NmKPy/mR8/SbKKrqmSbj7LJBfXE+nSq4f5TBXvnCzu0kcYebI9WdQ==} dev: false - /@tiptap/core@2.3.1(@tiptap/pm@2.3.1): - resolution: {integrity: sha512-ycpQlmczAOc05TgB5sc3RUTEEBXAVmS8MR9PqQzg96qidaRfVkgE+2w4k7t83PMHl2duC0MGqOCy96pLYwSpeg==} + /@tiptap/core@2.4.0(@tiptap/pm@2.4.0): + resolution: {integrity: sha512-YJSahk8pkxpCs8SflCZfTnJpE7IPyUWIylfgXM2DefjRQa5DZ+c6sNY0s/zbxKYFQ6AuHVX40r9pCfcqHChGxQ==} peerDependencies: '@tiptap/pm': ^2.0.0 dependencies: - '@tiptap/pm': 2.3.1 + '@tiptap/pm': 2.4.0 dev: false - /@tiptap/extension-blockquote@2.3.1(@tiptap/core@2.3.1): - resolution: {integrity: sha512-eyw3/Zn/XbIP2Yo11iE4vYcJ0471aBPMLD56YOyUC0PIF7D5tvPutDesSg95R+BDa5Tq/Id2zV5pZerw1dwwOQ==} + /@tiptap/extension-blockquote@2.4.0(@tiptap/core@2.4.0): + resolution: {integrity: sha512-nJJy4KsPgQqWTTDOWzFRdjCfG5+QExfZj44dulgDFNh+E66xhamnbM70PklllXJgEcge7xmT5oKM0gKls5XgFw==} peerDependencies: '@tiptap/core': ^2.0.0 dependencies: - '@tiptap/core': 2.3.1(@tiptap/pm@2.3.1) + '@tiptap/core': 2.4.0(@tiptap/pm@2.4.0) dev: false - /@tiptap/extension-bold@2.3.1(@tiptap/core@2.3.1): - resolution: {integrity: sha512-szHDXKOQfrlCzsys401zBtPWE5gyY3LcpPlrn2zBRrBmzU2U/1A7Y3HkoqZo3SSrTY37eG1Vr2J2aHySK6Uj/w==} + /@tiptap/extension-bold@2.4.0(@tiptap/core@2.4.0): + resolution: {integrity: sha512-csnW6hMDEHoRfxcPRLSqeJn+j35Lgtt1YRiOwn7DlS66sAECGRuoGfCvQSPij0TCDp4VCR9if5Sf8EymhnQumQ==} peerDependencies: '@tiptap/core': ^2.0.0 dependencies: - '@tiptap/core': 2.3.1(@tiptap/pm@2.3.1) + '@tiptap/core': 2.4.0(@tiptap/pm@2.4.0) dev: false - /@tiptap/extension-bubble-menu@2.3.1(@tiptap/core@2.3.1)(@tiptap/pm@2.3.1): - resolution: {integrity: sha512-6PGrk65f0eXHcCEe6A2/GpooMsD6RPZY1kWSSWUNfklJO54R/8uAtsSVIBr7wQ34pvrYkNaluRUrDWUokWyBOQ==} + /@tiptap/extension-bubble-menu@2.4.0(@tiptap/core@2.4.0)(@tiptap/pm@2.4.0): + resolution: {integrity: sha512-s99HmttUtpW3rScWq8rqk4+CGCwergNZbHLTkF6Rp6TSboMwfp+rwL5Q/JkcAG9KGLso1vGyXKbt1xHOvm8zMw==} peerDependencies: '@tiptap/core': ^2.0.0 '@tiptap/pm': ^2.0.0 dependencies: - '@tiptap/core': 2.3.1(@tiptap/pm@2.3.1) - '@tiptap/pm': 2.3.1 + '@tiptap/core': 2.4.0(@tiptap/pm@2.4.0) + '@tiptap/pm': 2.4.0 tippy.js: 6.3.7 dev: false - /@tiptap/extension-bullet-list@2.3.1(@tiptap/core@2.3.1): - resolution: {integrity: sha512-pif0AB4MUoA1Xm26y1ovH7vfXaV19T9EEQH4tgN2g2eTfdFnQWDmKI0r3XRxudtg40RstBJRa81N9xEO79o8ag==} + /@tiptap/extension-bullet-list@2.4.0(@tiptap/core@2.4.0): + resolution: {integrity: sha512-9S5DLIvFRBoExvmZ+/ErpTvs4Wf1yOEs8WXlKYUCcZssK7brTFj99XDwpHFA29HKDwma5q9UHhr2OB2o0JYAdw==} peerDependencies: '@tiptap/core': ^2.0.0 dependencies: - '@tiptap/core': 2.3.1(@tiptap/pm@2.3.1) + '@tiptap/core': 2.4.0(@tiptap/pm@2.4.0) dev: false - /@tiptap/extension-code-block@2.3.1(@tiptap/core@2.3.1)(@tiptap/pm@2.3.1): - resolution: {integrity: sha512-rM7T+DWuOShariPl5vknNFMesPOFQrhMjmms9Ql636sSxOcnkb0d39NFbUpI/r5noFDC6Km+lAebF0Rx2MxpKQ==} + /@tiptap/extension-code-block@2.4.0(@tiptap/core@2.4.0)(@tiptap/pm@2.4.0): + resolution: {integrity: sha512-QWGdv1D56TBGbbJSj2cIiXGJEKguPiAl9ONzJ/Ql1ZksiQsYwx0YHriXX6TOC//T4VIf6NSClHEtwtxWBQ/Csg==} peerDependencies: '@tiptap/core': ^2.0.0 '@tiptap/pm': ^2.0.0 dependencies: - '@tiptap/core': 2.3.1(@tiptap/pm@2.3.1) - '@tiptap/pm': 2.3.1 + '@tiptap/core': 2.4.0(@tiptap/pm@2.4.0) + '@tiptap/pm': 2.4.0 dev: false - /@tiptap/extension-code@2.3.1(@tiptap/core@2.3.1): - resolution: {integrity: sha512-bVX0EnDZoRXnoA7dyoZe7w2gdRjxmFEcsatHLkcr3R3x4k9oSgZXLe1C2jGbjJWr4j32tYXZ1cpKte6f1WUKzg==} + /@tiptap/extension-code@2.4.0(@tiptap/core@2.4.0): + resolution: {integrity: sha512-wjhBukuiyJMq4cTcK3RBTzUPV24k5n1eEPlpmzku6ThwwkMdwynnMGMAmSF3fErh3AOyOUPoTTjgMYN2d10SJA==} peerDependencies: '@tiptap/core': ^2.0.0 dependencies: - '@tiptap/core': 2.3.1(@tiptap/pm@2.3.1) + '@tiptap/core': 2.4.0(@tiptap/pm@2.4.0) dev: false - /@tiptap/extension-color@2.3.1(@tiptap/core@2.3.1)(@tiptap/extension-text-style@2.3.1): - resolution: {integrity: sha512-a127akyS3nMbcLKzZ02l/rHUP5BlCmbma6vYJNjRk6Srd1DlhXCIynMZJr7Bzgngq9KNLGQha2uxbPr7me3xAA==} + /@tiptap/extension-color@2.4.0(@tiptap/core@2.4.0)(@tiptap/extension-text-style@2.4.0): + resolution: {integrity: sha512-aVuqGtzTIZO93niADdu+Hx8g03X0pS7wjrJcCcYkkDEbC/siC03zlxKZIYBW1Jiabe99Z7/s2KdtLoK6DW2A2g==} peerDependencies: '@tiptap/core': ^2.0.0 '@tiptap/extension-text-style': ^2.0.0 dependencies: - '@tiptap/core': 2.3.1(@tiptap/pm@2.3.1) - '@tiptap/extension-text-style': 2.3.1(@tiptap/core@2.3.1) + '@tiptap/core': 2.4.0(@tiptap/pm@2.4.0) + '@tiptap/extension-text-style': 2.4.0(@tiptap/core@2.4.0) dev: false - /@tiptap/extension-document@2.3.1(@tiptap/core@2.3.1): - resolution: {integrity: sha512-uWYbzAV95JnetFBduWRI9n2QbQfmznQ7I6XzfZxuTAO2KcWGvHPBS7F00COO9Y67FZAPMbuQ1njtCJK0nClOPw==} + /@tiptap/extension-document@2.4.0(@tiptap/core@2.4.0): + resolution: {integrity: sha512-3jRodQJZDGbXlRPERaloS+IERg/VwzpC1IO6YSJR9jVIsBO6xC29P3cKTQlg1XO7p6ZH/0ksK73VC5BzzTwoHg==} peerDependencies: '@tiptap/core': ^2.0.0 dependencies: - '@tiptap/core': 2.3.1(@tiptap/pm@2.3.1) + '@tiptap/core': 2.4.0(@tiptap/pm@2.4.0) dev: false - /@tiptap/extension-dropcursor@2.3.1(@tiptap/core@2.3.1)(@tiptap/pm@2.3.1): - resolution: {integrity: sha512-xDG1Z01ftRI4mIOY+bPuG53xZ9FfVd6hzjNchwFHRlU3E+/2O+DsEBy/pJuHmpnFx1B/1ANbssoidGvK3LIPYw==} + /@tiptap/extension-dropcursor@2.4.0(@tiptap/core@2.4.0)(@tiptap/pm@2.4.0): + resolution: {integrity: sha512-c46HoG2PEEpSZv5rmS5UX/lJ6/kP1iVO0Ax+6JrNfLEIiDULUoi20NqdjolEa38La2VhWvs+o20OviiTOKEE9g==} peerDependencies: '@tiptap/core': ^2.0.0 '@tiptap/pm': ^2.0.0 dependencies: - '@tiptap/core': 2.3.1(@tiptap/pm@2.3.1) - '@tiptap/pm': 2.3.1 + '@tiptap/core': 2.4.0(@tiptap/pm@2.4.0) + '@tiptap/pm': 2.4.0 dev: false - /@tiptap/extension-floating-menu@2.3.1(@tiptap/core@2.3.1)(@tiptap/pm@2.3.1): - resolution: {integrity: sha512-3+dONthHRMFzJjLF9JtRbm9u4XJs8txCoChsZjwD0wBf8XfPtUGZQn9W5xNJG+5pozrOQhj9KC1UZL4tuvSRkg==} + /@tiptap/extension-floating-menu@2.4.0(@tiptap/core@2.4.0)(@tiptap/pm@2.4.0): + resolution: {integrity: sha512-vLb9v+htbHhXyty0oaXjT3VC8St4xuGSHWUB9GuAJAQ+NajIO6rBPbLUmm9qM0Eh2zico5mpSD1Qtn5FM6xYzg==} peerDependencies: '@tiptap/core': ^2.0.0 '@tiptap/pm': ^2.0.0 dependencies: - '@tiptap/core': 2.3.1(@tiptap/pm@2.3.1) - '@tiptap/pm': 2.3.1 + '@tiptap/core': 2.4.0(@tiptap/pm@2.4.0) + '@tiptap/pm': 2.4.0 tippy.js: 6.3.7 dev: false - /@tiptap/extension-gapcursor@2.3.1(@tiptap/core@2.3.1)(@tiptap/pm@2.3.1): - resolution: {integrity: sha512-jhMw0LtEV/HVovUDRdoH0QLnBWLDyw4Su7UZ0bkMtsnCO9MujLKths3SKsPstuAckZQKR5smokEytxDHH0aglg==} + /@tiptap/extension-gapcursor@2.4.0(@tiptap/core@2.4.0)(@tiptap/pm@2.4.0): + resolution: {integrity: sha512-F4y/0J2lseohkFUw9P2OpKhrJ6dHz69ZScABUvcHxjznJLd6+0Zt7014Lw5PA8/m2d/w0fX8LZQ88pZr4quZPQ==} peerDependencies: '@tiptap/core': ^2.0.0 '@tiptap/pm': ^2.0.0 dependencies: - '@tiptap/core': 2.3.1(@tiptap/pm@2.3.1) - '@tiptap/pm': 2.3.1 + '@tiptap/core': 2.4.0(@tiptap/pm@2.4.0) + '@tiptap/pm': 2.4.0 dev: false - /@tiptap/extension-hard-break@2.3.1(@tiptap/core@2.3.1): - resolution: {integrity: sha512-HO47iS2KQJLxhZM4ghZz5t2qgESH6D/mKJbjO7jM0eCYEyUfPyYJwV2VgjQP7x+1axcvsrhpzkJrjSg5+KqtQQ==} + /@tiptap/extension-hard-break@2.4.0(@tiptap/core@2.4.0): + resolution: {integrity: sha512-3+Z6zxevtHza5IsDBZ4lZqvNR3Kvdqwxq/QKCKu9UhJN1DUjsg/l1Jn2NilSQ3NYkBYh2yJjT8CMo9pQIu776g==} peerDependencies: '@tiptap/core': ^2.0.0 dependencies: - '@tiptap/core': 2.3.1(@tiptap/pm@2.3.1) + '@tiptap/core': 2.4.0(@tiptap/pm@2.4.0) dev: false - /@tiptap/extension-heading@2.3.1(@tiptap/core@2.3.1): - resolution: {integrity: sha512-epdIrg1xpuk5ApnNyM/NJO1dhVZgD7kDPem6QH4fug5UJtCueze942yNzUhCuvckmIegfdferAb1p4ug4674ig==} + /@tiptap/extension-heading@2.4.0(@tiptap/core@2.4.0): + resolution: {integrity: sha512-fYkyP/VMo7YHO76YVrUjd95Qeo0cubWn/Spavmwm1gLTHH/q7xMtbod2Z/F0wd6QHnc7+HGhO7XAjjKWDjldaw==} peerDependencies: '@tiptap/core': ^2.0.0 dependencies: - '@tiptap/core': 2.3.1(@tiptap/pm@2.3.1) + '@tiptap/core': 2.4.0(@tiptap/pm@2.4.0) dev: false - /@tiptap/extension-highlight@2.3.1(@tiptap/core@2.3.1): - resolution: {integrity: sha512-BWetu1jqHVsl6bZMaZM8VZYtHC6JBM2CRgI7R8GnKKDM8aSxK0P7CHCZLs4dGwOPlFVjE/nCjwdKd+GUUkeaQg==} + /@tiptap/extension-highlight@2.4.0(@tiptap/core@2.4.0): + resolution: {integrity: sha512-p2I/CaMrs6hzpj/dSw6UNobOWTV38yTjPK+B4ShJQ7IN2u/C82KOTOeFfJoFd9KykmpVOVW3w3nKG3ad0HXPuQ==} peerDependencies: '@tiptap/core': ^2.0.0 dependencies: - '@tiptap/core': 2.3.1(@tiptap/pm@2.3.1) + '@tiptap/core': 2.4.0(@tiptap/pm@2.4.0) dev: false - /@tiptap/extension-history@2.3.1(@tiptap/core@2.3.1)(@tiptap/pm@2.3.1): - resolution: {integrity: sha512-m+W6qTP4V0PHqqKnXw/ma18a62O0Cqp5FDWtSarOuxx6W4FpVr4A3Uxfbp4RigZEYanLcX4UJOWL4nWsFdYWHw==} + /@tiptap/extension-history@2.4.0(@tiptap/core@2.4.0)(@tiptap/pm@2.4.0): + resolution: {integrity: sha512-gr5qsKAXEVGr1Lyk1598F7drTaEtAxqZiuuSwTCzZzkiwgEQsWMWTWc9F8FlneCEaqe1aIYg6WKWlmYPaFwr0w==} peerDependencies: '@tiptap/core': ^2.0.0 '@tiptap/pm': ^2.0.0 dependencies: - '@tiptap/core': 2.3.1(@tiptap/pm@2.3.1) - '@tiptap/pm': 2.3.1 + '@tiptap/core': 2.4.0(@tiptap/pm@2.4.0) + '@tiptap/pm': 2.4.0 dev: false - /@tiptap/extension-horizontal-rule@2.3.1(@tiptap/core@2.3.1)(@tiptap/pm@2.3.1): - resolution: {integrity: sha512-IPgCFkiT6Y5BSFBQMTXS6gq2Ust6otMzRwddoI0RC8tl/tMftFBEPqYKADWVQeQb4C6AQydRjUbmAwHpBH31Eg==} + /@tiptap/extension-horizontal-rule@2.4.0(@tiptap/core@2.4.0)(@tiptap/pm@2.4.0): + resolution: {integrity: sha512-yDgxy+YxagcEsBbdWvbQiXYxsv3noS1VTuGwc9G7ZK9xPmBHJ5y0agOkB7HskwsZvJHoaSqNRsh7oZTkf0VR3g==} peerDependencies: '@tiptap/core': ^2.0.0 '@tiptap/pm': ^2.0.0 dependencies: - '@tiptap/core': 2.3.1(@tiptap/pm@2.3.1) - '@tiptap/pm': 2.3.1 + '@tiptap/core': 2.4.0(@tiptap/pm@2.4.0) + '@tiptap/pm': 2.4.0 dev: false - /@tiptap/extension-image@2.3.1(@tiptap/core@2.3.1): - resolution: {integrity: sha512-3RhVBySQA2LbftWhtZ0p2Mqf9lihNAYs3uQ3iyaB+BYViQiHyVpui09Wny0BwNy0oV6ryUWjBifko2Z1AZgANw==} + /@tiptap/extension-image@2.4.0(@tiptap/core@2.4.0): + resolution: {integrity: sha512-NIVhRPMO/ONo8OywEd+8zh0Q6Q7EbFHtBxVsvfOKj9KtZkaXQfUO4MzONTyptkvAchTpj9pIzeaEY5fyU87gFA==} peerDependencies: '@tiptap/core': ^2.0.0 dependencies: - '@tiptap/core': 2.3.1(@tiptap/pm@2.3.1) + '@tiptap/core': 2.4.0(@tiptap/pm@2.4.0) dev: false - /@tiptap/extension-italic@2.3.1(@tiptap/core@2.3.1): - resolution: {integrity: sha512-yEAn0dT1LH1vAULmZv3L1fs7M1Fn/8wZCw7LDGw2/E+VYbDeXgy7XwMPyzhrzV1oV9Z+3gugCbYV0IJ4PBwudA==} + /@tiptap/extension-italic@2.4.0(@tiptap/core@2.4.0): + resolution: {integrity: sha512-aaW/L9q+KNHHK+X73MPloHeIsT191n3VLd3xm6uUcFDnUNvzYJ/q65/1ZicdtCaOLvTutxdrEvhbkrVREX6a8g==} peerDependencies: '@tiptap/core': ^2.0.0 dependencies: - '@tiptap/core': 2.3.1(@tiptap/pm@2.3.1) + '@tiptap/core': 2.4.0(@tiptap/pm@2.4.0) dev: false - /@tiptap/extension-link@2.3.1(@tiptap/core@2.3.1)(@tiptap/pm@2.3.1): - resolution: {integrity: sha512-VE54iLwWcPldqZl7a4E/pmGD7waCWS//VT8jxTuFUroTouIzT+OjB9DQAXMkrRiaz+na3I8Jie1yBE+zYB0gvQ==} + /@tiptap/extension-link@2.4.0(@tiptap/core@2.4.0)(@tiptap/pm@2.4.0): + resolution: {integrity: sha512-r3PjT0bjSKAorHAEBPA0icSMOlqALbxVlWU9vAc+Q3ndzt7ht0CTPNewzFF9kjzARABVt1cblXP/2+c0qGzcsg==} peerDependencies: '@tiptap/core': ^2.0.0 '@tiptap/pm': ^2.0.0 dependencies: - '@tiptap/core': 2.3.1(@tiptap/pm@2.3.1) - '@tiptap/pm': 2.3.1 + '@tiptap/core': 2.4.0(@tiptap/pm@2.4.0) + '@tiptap/pm': 2.4.0 linkifyjs: 4.1.3 dev: false - /@tiptap/extension-list-item@2.3.1(@tiptap/core@2.3.1): - resolution: {integrity: sha512-GyHLNoXVo9u29NVqijwZPBcv9MzXMGyIiQiO5FxRpuT4Ei4ZmsaJrJ2dmhO3KZhX0HdTSc65/omM2XBr6PDoLA==} + /@tiptap/extension-list-item@2.4.0(@tiptap/core@2.4.0): + resolution: {integrity: sha512-reUVUx+2cI2NIAqMZhlJ9uK/+zvRzm1GTmlU2Wvzwc7AwLN4yemj6mBDsmBLEXAKPvitfLh6EkeHaruOGymQtg==} peerDependencies: '@tiptap/core': ^2.0.0 dependencies: - '@tiptap/core': 2.3.1(@tiptap/pm@2.3.1) + '@tiptap/core': 2.4.0(@tiptap/pm@2.4.0) dev: false - /@tiptap/extension-ordered-list@2.3.1(@tiptap/core@2.3.1): - resolution: {integrity: sha512-+6I76b7fu0FghUtzB0LyIC5GB0xfrpAKtXjbrmeUGsOEL7jxKsE6+A5RoTrgQTfuP7oItdCZGTSC/8WtGbtEMg==} + /@tiptap/extension-ordered-list@2.4.0(@tiptap/core@2.4.0): + resolution: {integrity: sha512-Zo0c9M0aowv+2+jExZiAvhCB83GZMjZsxywmuOrdUbq5EGYKb7q8hDyN3hkrktVHr9UPXdPAYTmLAHztTOHYRA==} peerDependencies: '@tiptap/core': ^2.0.0 dependencies: - '@tiptap/core': 2.3.1(@tiptap/pm@2.3.1) + '@tiptap/core': 2.4.0(@tiptap/pm@2.4.0) dev: false - /@tiptap/extension-paragraph@2.3.1(@tiptap/core@2.3.1): - resolution: {integrity: sha512-bHkkHU012clwCrpzmEHGuF8fwLuFL3x9MJ17wnhwanoIM3MG6ZCdeb9copjDvUpZXLKTUYKotoPGNhxmOrP2bQ==} + /@tiptap/extension-paragraph@2.4.0(@tiptap/core@2.4.0): + resolution: {integrity: sha512-+yse0Ow67IRwcACd9K/CzBcxlpr9OFnmf0x9uqpaWt1eHck1sJnti6jrw5DVVkyEBHDh/cnkkV49gvctT/NyCw==} peerDependencies: '@tiptap/core': ^2.0.0 dependencies: - '@tiptap/core': 2.3.1(@tiptap/pm@2.3.1) + '@tiptap/core': 2.4.0(@tiptap/pm@2.4.0) dev: false - /@tiptap/extension-placeholder@2.0.3(@tiptap/core@2.3.1)(@tiptap/pm@2.3.1): + /@tiptap/extension-placeholder@2.0.3(@tiptap/core@2.4.0)(@tiptap/pm@2.4.0): resolution: {integrity: sha512-Z42jo0termRAf0S0L8oxrts94IWX5waU4isS2CUw8xCUigYyCFslkhQXkWATO1qRbjNFLKN2C9qvCgGf4UeBrw==} peerDependencies: '@tiptap/core': ^2.0.0 '@tiptap/pm': ^2.0.0 dependencies: - '@tiptap/core': 2.3.1(@tiptap/pm@2.3.1) - '@tiptap/pm': 2.3.1 + '@tiptap/core': 2.4.0(@tiptap/pm@2.4.0) + '@tiptap/pm': 2.4.0 dev: false - /@tiptap/extension-strike@2.3.1(@tiptap/core@2.3.1): - resolution: {integrity: sha512-fpsVewcnaYk37TAF4JHkwH9O6Ml7JooF1v/Eh9p7PSItNcEfg/3RLlJL3c53RzLWdlunjgptM/M0alPV0Zyq4A==} + /@tiptap/extension-strike@2.4.0(@tiptap/core@2.4.0): + resolution: {integrity: sha512-pE1uN/fQPOMS3i+zxPYMmPmI3keubnR6ivwM+KdXWOMnBiHl9N4cNpJgq1n2eUUGKLurC2qrQHpnVyGAwBS6Vg==} peerDependencies: '@tiptap/core': ^2.0.0 dependencies: - '@tiptap/core': 2.3.1(@tiptap/pm@2.3.1) + '@tiptap/core': 2.4.0(@tiptap/pm@2.4.0) dev: false - /@tiptap/extension-task-item@2.3.1(@tiptap/core@2.3.1)(@tiptap/pm@2.3.1): - resolution: {integrity: sha512-iNVLiwJOTp9UulUS6tLk5NR85nNxtxqvaboOwPxoqcFaM/IkybTwZ/hMr9EqbAucigx85OowHKsdgPHIAr3xdw==} + /@tiptap/extension-task-item@2.4.0(@tiptap/core@2.4.0)(@tiptap/pm@2.4.0): + resolution: {integrity: sha512-x40vdHnmDiBbA2pjWR/92wVGb6jT13Nk2AhRUI/oP/r4ZGKpTypoB7heDnvLBgH0Y5a51dFqU+G1SFFL30u5uA==} peerDependencies: '@tiptap/core': ^2.0.0 '@tiptap/pm': ^2.0.0 dependencies: - '@tiptap/core': 2.3.1(@tiptap/pm@2.3.1) - '@tiptap/pm': 2.3.1 + '@tiptap/core': 2.4.0(@tiptap/pm@2.4.0) + '@tiptap/pm': 2.4.0 dev: false - /@tiptap/extension-task-list@2.3.1(@tiptap/core@2.3.1): - resolution: {integrity: sha512-lu/27tetu2KYEjsaD8wyQ4rBthxrW8aRNeSv74jXJLPYN4aCtAl9C2bM7os+A2OYpidPBMbRjp8ZQoUnJ9auNA==} + /@tiptap/extension-task-list@2.4.0(@tiptap/core@2.4.0): + resolution: {integrity: sha512-vmUB3wEJU81QbiHUygBlselQW8YIW8/85UTwANvWx8+KEWyM7EUF4utcm5R2UobIprIcWb4hyVkvW/5iou25gg==} peerDependencies: '@tiptap/core': ^2.0.0 dependencies: - '@tiptap/core': 2.3.1(@tiptap/pm@2.3.1) + '@tiptap/core': 2.4.0(@tiptap/pm@2.4.0) dev: false - /@tiptap/extension-text-style@2.3.1(@tiptap/core@2.3.1): - resolution: {integrity: sha512-eXtuf3AqcOv28BM0dO4lbBNnvM1fo4WWuT+/s1YV5Ovex3T5OS7PsPuR/9p5AD4NuX9QvNrV+eM02mcNzaTBWw==} + /@tiptap/extension-text-style@2.4.0(@tiptap/core@2.4.0): + resolution: {integrity: sha512-H0uPWeZ4sXz3o836TDWnpd38qClqzEM2d6QJ9TK+cQ1vE5Gp8wQ5W4fwUV1KAHzpJKE/15+BXBjLyVYQdmXDaQ==} peerDependencies: '@tiptap/core': ^2.0.0 dependencies: - '@tiptap/core': 2.3.1(@tiptap/pm@2.3.1) + '@tiptap/core': 2.4.0(@tiptap/pm@2.4.0) dev: false - /@tiptap/extension-text@2.3.1(@tiptap/core@2.3.1): - resolution: {integrity: sha512-ZM+Bpty9jChEN/VjUP/fX1Fvoz0Z3YLdjj9+pFA0H7woli+TmxWY6yUUTA2SBDb2mJ52yNOUfRE/sYx6gkDuBQ==} + /@tiptap/extension-text@2.4.0(@tiptap/core@2.4.0): + resolution: {integrity: sha512-LV0bvE+VowE8IgLca7pM8ll7quNH+AgEHRbSrsI3SHKDCYB9gTHMjWaAkgkUVaO1u0IfCrjnCLym/PqFKa+vvg==} peerDependencies: '@tiptap/core': ^2.0.0 dependencies: - '@tiptap/core': 2.3.1(@tiptap/pm@2.3.1) + '@tiptap/core': 2.4.0(@tiptap/pm@2.4.0) dev: false - /@tiptap/extension-underline@2.3.1(@tiptap/core@2.3.1): - resolution: {integrity: sha512-xgLGr7bM5OAKagUKdL5dWxJHgwEp2fk3D5XCVUBwqgeOZtOFteoqPzb/2617w7qrP+9oM9zRjw6z27hM8YxyvQ==} + /@tiptap/extension-underline@2.4.0(@tiptap/core@2.4.0): + resolution: {integrity: sha512-guWojb7JxUwLz4OKzwNExJwOkhZjgw/ttkXCMBT0PVe55k998MMYe1nvN0m2SeTW9IxurEPtScH4kYJ0XuSm8Q==} peerDependencies: '@tiptap/core': ^2.0.0 dependencies: - '@tiptap/core': 2.3.1(@tiptap/pm@2.3.1) + '@tiptap/core': 2.4.0(@tiptap/pm@2.4.0) dev: false - /@tiptap/pm@2.3.1: - resolution: {integrity: sha512-jdd1PFAFeewcu1rWsiqoCc04u5NCplHVjsGPN4jxUmqKdU0YN/9sp7h8gRG6YN1GZRoC1Y6KD+WPLMdzkwizZQ==} + /@tiptap/pm@2.4.0: + resolution: {integrity: sha512-B1HMEqGS4MzIVXnpgRZDLm30mxDWj51LkBT/if1XD+hj5gm8B9Q0c84bhvODX6KIs+c6z+zsY9VkVu8w9Yfgxg==} dependencies: prosemirror-changeset: 2.2.1 prosemirror-collab: 1.3.1 @@ -1901,68 +1901,68 @@ packages: prosemirror-history: 1.4.0 prosemirror-inputrules: 1.4.0 prosemirror-keymap: 1.2.2 - prosemirror-markdown: 1.12.0 + prosemirror-markdown: 1.13.0 prosemirror-menu: 1.2.4 - prosemirror-model: 1.21.0 + prosemirror-model: 1.21.1 prosemirror-schema-basic: 1.2.2 prosemirror-schema-list: 1.3.0 prosemirror-state: 1.4.3 prosemirror-tables: 1.3.7 - prosemirror-trailing-node: 2.0.8(prosemirror-model@1.21.0)(prosemirror-state@1.4.3)(prosemirror-view@1.33.6) + prosemirror-trailing-node: 2.0.8(prosemirror-model@1.21.1)(prosemirror-state@1.4.3)(prosemirror-view@1.33.7) prosemirror-transform: 1.9.0 - prosemirror-view: 1.33.6 + prosemirror-view: 1.33.7 dev: false - /@tiptap/react@2.3.1(@tiptap/core@2.3.1)(@tiptap/pm@2.3.1)(react-dom@18.2.0)(react@18.3.1): - resolution: {integrity: sha512-MM6UOi5nmdM/dZXYtbBYHJEsVtyyFFnOCXlXmhTlhz0WYI8VkEAY7XWLB96KrqsbRk9PUWwdev7iT1q40zxVeg==} + /@tiptap/react@2.4.0(@tiptap/core@2.4.0)(@tiptap/pm@2.4.0)(react-dom@18.2.0)(react@18.3.1): + resolution: {integrity: sha512-baxnIr6Dy+5iGagOEIKFeHzdl1ZRa6Cg+SJ3GDL/BVLpO6KiCM3Mm5ymB726UKP1w7icrBiQD2fGY3Bx8KaiSA==} peerDependencies: '@tiptap/core': ^2.0.0 '@tiptap/pm': ^2.0.0 react: ^17.0.0 || ^18.0.0 react-dom: ^17.0.0 || ^18.0.0 dependencies: - '@tiptap/core': 2.3.1(@tiptap/pm@2.3.1) - '@tiptap/extension-bubble-menu': 2.3.1(@tiptap/core@2.3.1)(@tiptap/pm@2.3.1) - '@tiptap/extension-floating-menu': 2.3.1(@tiptap/core@2.3.1)(@tiptap/pm@2.3.1) - '@tiptap/pm': 2.3.1 + '@tiptap/core': 2.4.0(@tiptap/pm@2.4.0) + '@tiptap/extension-bubble-menu': 2.4.0(@tiptap/core@2.4.0)(@tiptap/pm@2.4.0) + '@tiptap/extension-floating-menu': 2.4.0(@tiptap/core@2.4.0)(@tiptap/pm@2.4.0) + '@tiptap/pm': 2.4.0 react: 18.3.1 react-dom: 18.2.0(react@18.3.1) dev: false - /@tiptap/starter-kit@2.3.1(@tiptap/pm@2.3.1): - resolution: {integrity: sha512-VGk1o5y5f2ZHKkvP2WNj8BH7FGak0d0cjxQiXP1n5w8eS0vFnTkCz3JbCPM+KTKobsBmxd2vSC3ElgP9E9d2xw==} - dependencies: - '@tiptap/core': 2.3.1(@tiptap/pm@2.3.1) - '@tiptap/extension-blockquote': 2.3.1(@tiptap/core@2.3.1) - '@tiptap/extension-bold': 2.3.1(@tiptap/core@2.3.1) - '@tiptap/extension-bullet-list': 2.3.1(@tiptap/core@2.3.1) - '@tiptap/extension-code': 2.3.1(@tiptap/core@2.3.1) - '@tiptap/extension-code-block': 2.3.1(@tiptap/core@2.3.1)(@tiptap/pm@2.3.1) - '@tiptap/extension-document': 2.3.1(@tiptap/core@2.3.1) - '@tiptap/extension-dropcursor': 2.3.1(@tiptap/core@2.3.1)(@tiptap/pm@2.3.1) - '@tiptap/extension-gapcursor': 2.3.1(@tiptap/core@2.3.1)(@tiptap/pm@2.3.1) - '@tiptap/extension-hard-break': 2.3.1(@tiptap/core@2.3.1) - '@tiptap/extension-heading': 2.3.1(@tiptap/core@2.3.1) - '@tiptap/extension-history': 2.3.1(@tiptap/core@2.3.1)(@tiptap/pm@2.3.1) - '@tiptap/extension-horizontal-rule': 2.3.1(@tiptap/core@2.3.1)(@tiptap/pm@2.3.1) - '@tiptap/extension-italic': 2.3.1(@tiptap/core@2.3.1) - '@tiptap/extension-list-item': 2.3.1(@tiptap/core@2.3.1) - '@tiptap/extension-ordered-list': 2.3.1(@tiptap/core@2.3.1) - '@tiptap/extension-paragraph': 2.3.1(@tiptap/core@2.3.1) - '@tiptap/extension-strike': 2.3.1(@tiptap/core@2.3.1) - '@tiptap/extension-text': 2.3.1(@tiptap/core@2.3.1) + /@tiptap/starter-kit@2.4.0(@tiptap/pm@2.4.0): + resolution: {integrity: sha512-DYYzMZdTEnRn9oZhKOeRCcB+TjhNz5icLlvJKoHoOGL9kCbuUyEf8WRR2OSPckI0+KUIPJL3oHRqO4SqSdTjfg==} + dependencies: + '@tiptap/core': 2.4.0(@tiptap/pm@2.4.0) + '@tiptap/extension-blockquote': 2.4.0(@tiptap/core@2.4.0) + '@tiptap/extension-bold': 2.4.0(@tiptap/core@2.4.0) + '@tiptap/extension-bullet-list': 2.4.0(@tiptap/core@2.4.0) + '@tiptap/extension-code': 2.4.0(@tiptap/core@2.4.0) + '@tiptap/extension-code-block': 2.4.0(@tiptap/core@2.4.0)(@tiptap/pm@2.4.0) + '@tiptap/extension-document': 2.4.0(@tiptap/core@2.4.0) + '@tiptap/extension-dropcursor': 2.4.0(@tiptap/core@2.4.0)(@tiptap/pm@2.4.0) + '@tiptap/extension-gapcursor': 2.4.0(@tiptap/core@2.4.0)(@tiptap/pm@2.4.0) + '@tiptap/extension-hard-break': 2.4.0(@tiptap/core@2.4.0) + '@tiptap/extension-heading': 2.4.0(@tiptap/core@2.4.0) + '@tiptap/extension-history': 2.4.0(@tiptap/core@2.4.0)(@tiptap/pm@2.4.0) + '@tiptap/extension-horizontal-rule': 2.4.0(@tiptap/core@2.4.0)(@tiptap/pm@2.4.0) + '@tiptap/extension-italic': 2.4.0(@tiptap/core@2.4.0) + '@tiptap/extension-list-item': 2.4.0(@tiptap/core@2.4.0) + '@tiptap/extension-ordered-list': 2.4.0(@tiptap/core@2.4.0) + '@tiptap/extension-paragraph': 2.4.0(@tiptap/core@2.4.0) + '@tiptap/extension-strike': 2.4.0(@tiptap/core@2.4.0) + '@tiptap/extension-text': 2.4.0(@tiptap/core@2.4.0) transitivePeerDependencies: - '@tiptap/pm' dev: false - /@tiptap/suggestion@2.3.1(@tiptap/core@2.3.1)(@tiptap/pm@2.3.1): - resolution: {integrity: sha512-hfUIsC80QivPH833rlqh3x1RCOat2mE0SzR6m2Z1ZNZ86N5BrYDU8e8p81gR//4SlNBJ7BZGVWN3DXj+aAKs2A==} + /@tiptap/suggestion@2.4.0(@tiptap/core@2.4.0)(@tiptap/pm@2.4.0): + resolution: {integrity: sha512-6dCkjbL8vIzcLWtS6RCBx0jlYPKf2Beuyq5nNLrDDZZuyJow5qJAY0eGu6Xomp9z0WDK/BYOxT4hHNoGMDkoAg==} peerDependencies: '@tiptap/core': ^2.0.0 '@tiptap/pm': ^2.0.0 dependencies: - '@tiptap/core': 2.3.1(@tiptap/pm@2.3.1) - '@tiptap/pm': 2.3.1 + '@tiptap/core': 2.4.0(@tiptap/pm@2.4.0) + '@tiptap/pm': 2.4.0 dev: false /@tootallnate/once@2.0.0: @@ -1970,21 +1970,21 @@ packages: engines: {node: '>= 10'} dev: false - /@tremor/react@3.16.2(react-dom@18.3.1)(react@18.3.1)(tailwindcss@3.4.3): - resolution: {integrity: sha512-Isdc+Sf4WHlnrAAO8Hk/nK84HiXzCZvb6ZFRHrzOkF+APm6nDhvKPRorXcXZ2BKSS5T5L0QVsid5fIxly8kRdA==} + /@tremor/react@3.17.2(react-dom@18.3.1)(react@18.3.1)(tailwindcss@3.4.4): + resolution: {integrity: sha512-zQovHBTonoeJbVk23VAqDeu9yL8N9N2884WYtLr0QvEo4kfC/YUYHkwyg5R7i8ahiJcYbR5zbCG8r9Y4Oqg9qQ==} peerDependencies: react: ^18.0.0 react-dom: '>=16.6.0' dependencies: '@floating-ui/react': 0.19.2(react-dom@18.3.1)(react@18.3.1) '@headlessui/react': 1.7.19(react-dom@18.3.1)(react@18.3.1) - '@headlessui/tailwindcss': 0.2.0(tailwindcss@3.4.3) - date-fns: 2.30.0 + '@headlessui/tailwindcss': 0.2.1(tailwindcss@3.4.4) + date-fns: 3.6.0 react: 18.3.1 - react-day-picker: 8.10.1(date-fns@2.30.0)(react@18.3.1) + react-day-picker: 8.10.1(date-fns@3.6.0)(react@18.3.1) react-dom: 18.3.1(react@18.3.1) react-transition-state: 2.1.1(react-dom@18.3.1)(react@18.3.1) - recharts: 2.12.6(react-dom@18.3.1)(react@18.3.1) + recharts: 2.12.7(react-dom@18.3.1)(react@18.3.1) tailwind-merge: 1.14.0 transitivePeerDependencies: - tailwindcss @@ -2091,7 +2091,7 @@ packages: /@types/jsdom@20.0.1: resolution: {integrity: sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==} dependencies: - '@types/node': 20.12.10 + '@types/node': 20.14.2 '@types/tough-cookie': 4.0.5 parse5: 7.1.2 dev: false @@ -2132,15 +2132,15 @@ packages: resolution: {integrity: sha512-p6ua9zBxz5otCmbpb5D3U4B5Nanw6Pk3PPyX05xnxbB/fRv71N7CPmORg7uAD5P70T0xmx1pzAx/FUfa5X+3cw==} dev: false - /@types/node@20.12.10: - resolution: {integrity: sha512-Eem5pH9pmWBHoGAT8Dr5fdc5rYA+4NAovdM4EktRPVAAiJhmWWfQrA0cFhAbOsQdSfIHjAud6YdkbL69+zSKjw==} + /@types/node@20.14.2: + resolution: {integrity: sha512-xyu6WAMVwv6AKFLB+e/7ySZVr/0zLCzOa7rSpq6jNwpqOrUbcACDWC+53d4n2QHOnDou0fbIsg8wZu/sxrnI4Q==} dependencies: undici-types: 5.26.5 /@types/pg@8.6.6: resolution: {integrity: sha512-O2xNmXebtwVekJDD+02udOncjVcMZQuTEQEMpKJ0ZRf5E7/9JJX3izhKUcUifBkyKpljyUM6BTgy2trmviKlpw==} dependencies: - '@types/node': 20.12.10 + '@types/node': 20.14.2 pg-protocol: 1.6.1 pg-types: 2.2.0 dev: false @@ -2151,13 +2151,13 @@ packages: /@types/react-dom@18.0.11: resolution: {integrity: sha512-O38bPbI2CWtgw/OoQoY+BRelw7uysmXbWvw3nLWO21H1HSh+GOlqPuXshJfjmpNlKiiSDG9cc1JZAaMmVdcTlw==} dependencies: - '@types/react': 18.3.1 + '@types/react': 18.3.3 dev: false /@types/react-dom@18.3.0: resolution: {integrity: sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==} dependencies: - '@types/react': 18.3.1 + '@types/react': 18.3.3 dev: true /@types/react@18.0.28: @@ -2168,8 +2168,8 @@ packages: csstype: 3.1.3 dev: false - /@types/react@18.3.1: - resolution: {integrity: sha512-V0kuGBX3+prX+DQ/7r2qsv1NsdfnCLnTgnRJ1pYnxykBhGMz+qj+box5lq7XsO5mtZsBqpjwwTu/7wszPfMBcw==} + /@types/react@18.3.3: + resolution: {integrity: sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==} dependencies: '@types/prop-types': 15.7.12 csstype: 3.1.3 @@ -2217,7 +2217,7 @@ packages: '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 '@typescript-eslint/typescript-estree': 5.62.0(typescript@4.9.5) - debug: 4.3.4 + debug: 4.3.5 eslint: 8.36.0 typescript: 4.9.5 transitivePeerDependencies: @@ -2238,7 +2238,7 @@ packages: '@typescript-eslint/types': 7.2.0 '@typescript-eslint/typescript-estree': 7.2.0(typescript@5.4.5) '@typescript-eslint/visitor-keys': 7.2.0 - debug: 4.3.4 + debug: 4.3.5 eslint: 8.53.0 typescript: 5.4.5 transitivePeerDependencies: @@ -2282,10 +2282,10 @@ packages: dependencies: '@typescript-eslint/types': 5.62.0 '@typescript-eslint/visitor-keys': 5.62.0 - debug: 4.3.4 + debug: 4.3.5 globby: 11.1.0 is-glob: 4.0.3 - semver: 7.6.0 + semver: 7.6.2 tsutils: 3.21.0(typescript@4.9.5) typescript: 4.9.5 transitivePeerDependencies: @@ -2303,11 +2303,11 @@ packages: dependencies: '@typescript-eslint/types': 7.2.0 '@typescript-eslint/visitor-keys': 7.2.0 - debug: 4.3.4 + debug: 4.3.5 globby: 11.1.0 is-glob: 4.0.3 minimatch: 9.0.3 - semver: 7.6.0 + semver: 7.6.2 ts-api-utils: 1.3.0(typescript@5.4.5) typescript: 5.4.5 transitivePeerDependencies: @@ -2337,7 +2337,7 @@ packages: resolution: {integrity: sha512-cpPSR0XJAJs4Ddz9nq3tINlPS5aLfWVCqhhtHnXt4p7qr5+/Znlt1Es736poB/9rnl1hAHrOsOvVj46NEXcVqA==} engines: {node: '>=16.0.0'} dependencies: - '@upstash/redis': 1.30.1 + '@upstash/redis': 1.31.3 dev: false /@upstash/ratelimit@0.4.4: @@ -2358,14 +2358,14 @@ packages: crypto-js: 4.2.0 dev: false - /@upstash/redis@1.30.1: - resolution: {integrity: sha512-Cmk2cvm1AcD6mKLg/UFhQDzM+H1HsX/k5ufvNL4Kii8DsMTKmadMJ1rRZEGQ/SM7H51EeOL/YSa6K2EPc1SYPA==} + /@upstash/redis@1.31.3: + resolution: {integrity: sha512-KtVgWBUEx/LGbR8oRwYexwzHh3s5DNqYW0bjkD+gjFZVOnREJITvK+hC4PjSSD+8D4qJ+Xbkfmy8ANADZ9EUFg==} dependencies: crypto-js: 4.2.0 dev: false - /@vercel/analytics@1.2.2(next@13.4.20-canary.15)(react@18.3.1): - resolution: {integrity: sha512-X0rctVWkQV1e5Y300ehVNqpOfSOufo7ieA5PIdna8yX/U7Vjz0GFsGf4qvAhxV02uQ2CVt7GYcrFfddXXK2Y4A==} + /@vercel/analytics@1.3.1(next@13.4.20-canary.15)(react@18.3.1): + resolution: {integrity: sha512-xhSlYgAuJ6Q4WQGkzYTLmXwhYl39sWjoMA3nHxfkvG+WdBT25c563a7QhwwKivEOZtPJXifYHR1m2ihoisbWyA==} peerDependencies: next: '>= 13' react: ^18 || ^19 @@ -2380,8 +2380,8 @@ packages: server-only: 0.0.1 dev: false - /@vercel/analytics@1.2.2(next@14.0.2)(react@18.3.1): - resolution: {integrity: sha512-X0rctVWkQV1e5Y300ehVNqpOfSOufo7ieA5PIdna8yX/U7Vjz0GFsGf4qvAhxV02uQ2CVt7GYcrFfddXXK2Y4A==} + /@vercel/analytics@1.3.1(next@14.0.2)(react@18.3.1): + resolution: {integrity: sha512-xhSlYgAuJ6Q4WQGkzYTLmXwhYl39sWjoMA3nHxfkvG+WdBT25c563a7QhwwKivEOZtPJXifYHR1m2ihoisbWyA==} peerDependencies: next: '>= 13' react: ^18 || ^19 @@ -2449,7 +2449,7 @@ packages: /@vue/compiler-core@3.4.27: resolution: {integrity: sha512-E+RyqY24KnyDXsCuQrI+mlcdW3ALND6U7Gqa/+bVwbcpcR3BRRIckFoz7Qyd4TTlnugtwuI7YgjbvsLmxb+yvg==} dependencies: - '@babel/parser': 7.24.5 + '@babel/parser': 7.24.7 '@vue/shared': 3.4.27 entities: 4.5.0 estree-walker: 2.0.2 @@ -2466,7 +2466,7 @@ packages: /@vue/compiler-sfc@3.4.27: resolution: {integrity: sha512-nDwntUEADssW8e0rrmE0+OrONwmRlegDA1pD6QhVeXxjIytV03yDqTey9SBDiALsvAd5U4ZrEKbMyVXhX6mCGA==} dependencies: - '@babel/parser': 7.24.5 + '@babel/parser': 7.24.7 '@vue/compiler-core': 3.4.27 '@vue/compiler-dom': 3.4.27 '@vue/compiler-ssr': 3.4.27 @@ -2552,12 +2552,12 @@ packages: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} dependencies: - debug: 4.3.4 + debug: 4.3.5 transitivePeerDependencies: - supports-color dev: false - /ai@2.2.37(react@18.3.1)(solid-js@1.8.17)(svelte@4.2.15)(vue@3.4.27): + /ai@2.2.37(react@18.3.1)(solid-js@1.8.17)(svelte@4.2.18)(vue@3.4.27): resolution: {integrity: sha512-JIYm5N1muGVqBqWnvkt29FmXhESoO5TcDxw74OE41SsM+uIou6NPDDs0XWb/ABcd1gmp6k5zym64KWMPM2xm0A==} engines: {node: '>=14.6'} peerDependencies: @@ -2580,8 +2580,8 @@ packages: react: 18.3.1 solid-js: 1.8.17 solid-swr-store: 0.10.7(solid-js@1.8.17)(swr-store@0.10.6) - sswr: 2.0.0(svelte@4.2.15) - svelte: 4.2.15 + sswr: 2.0.0(svelte@4.2.18) + svelte: 4.2.18 swr: 2.2.0(react@18.3.1) swr-store: 0.10.6 swrv: 1.0.4(vue@3.4.27) @@ -2652,7 +2652,7 @@ packages: resolution: {integrity: sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==} engines: {node: '>=10'} dependencies: - tslib: 2.6.2 + tslib: 2.6.3 dev: false /aria-query@5.3.0: @@ -2730,8 +2730,9 @@ packages: es-abstract: 1.23.3 es-shim-unscopables: 1.0.2 - /array.prototype.tosorted@1.1.3: - resolution: {integrity: sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg==} + /array.prototype.tosorted@1.1.4: + resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 define-properties: 1.2.1 @@ -2772,10 +2773,10 @@ packages: postcss: ^8.1.0 dependencies: browserslist: 4.23.0 - caniuse-lite: 1.0.30001616 + caniuse-lite: 1.0.30001629 fraction.js: 4.3.7 normalize-range: 0.1.2 - picocolors: 1.0.0 + picocolors: 1.0.1 postcss: 8.4.38 postcss-value-parser: 4.2.0 dev: true @@ -2812,19 +2813,19 @@ packages: /balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - /bare-events@2.2.2: - resolution: {integrity: sha512-h7z00dWdG0PYOQEvChhOSWvOfkIKsdZGkWr083FgN/HyoQuebSew/cgirYqh9SCuy/hRvxc5Vy6Fw8xAmYHLkQ==} + /bare-events@2.3.1: + resolution: {integrity: sha512-sJnSOTVESURZ61XgEleqmP255T6zTYwHPwE4r6SssIh0U9/uDvfpdoJYpVUerJJZH2fueO+CdT8ZT+OC/7aZDA==} requiresBuild: true dev: false optional: true - /bare-fs@2.3.0: - resolution: {integrity: sha512-TNFqa1B4N99pds2a5NYHR15o0ZpdNKbAeKTE/+G6ED/UeOavv8RY3dr/Fu99HW3zU3pXpo2kDNO8Sjsm2esfOw==} + /bare-fs@2.3.1: + resolution: {integrity: sha512-W/Hfxc/6VehXlsgFtbB5B4xFcsCl+pAh30cYhoFyXErf6oGrwjh8SwiPAdHgpmWonKuYpZgGywN0SXt7dgsADA==} requiresBuild: true dependencies: - bare-events: 2.2.2 - bare-path: 2.1.2 - bare-stream: 1.0.0 + bare-events: 2.3.1 + bare-path: 2.1.3 + bare-stream: 2.0.1 dev: false optional: true @@ -2834,19 +2835,19 @@ packages: dev: false optional: true - /bare-path@2.1.2: - resolution: {integrity: sha512-o7KSt4prEphWUHa3QUwCxUI00R86VdjiuxmJK0iNVDHYPGo+HsDaVCnqCmPbf/MiW1ok8F4p3m8RTHlWk8K2ig==} + /bare-path@2.1.3: + resolution: {integrity: sha512-lh/eITfU8hrj9Ru5quUp0Io1kJWIk1bTjzo7JH1P5dWmQ2EL4hFUlfI8FonAhSlgIfhn63p84CDY/x+PisgcXA==} requiresBuild: true dependencies: bare-os: 2.3.0 dev: false optional: true - /bare-stream@1.0.0: - resolution: {integrity: sha512-KhNUoDL40iP4gFaLSsoGE479t0jHijfYdIcxRn/XtezA2BaUD0NRf/JGRpsMq6dMNM+SrCrB0YSSo/5wBY4rOQ==} + /bare-stream@2.0.1: + resolution: {integrity: sha512-ubLyoDqPnUf5o0kSFp709HC0WRZuxVuh4pbte5eY95Xvx5bdvz07c2JFmXBfqqe60q+9PJ8S4X5GRvmcNSKMxg==} requiresBuild: true dependencies: - streamx: 2.16.1 + streamx: 2.18.0 dev: false optional: true @@ -2877,21 +2878,21 @@ packages: dependencies: balanced-match: 1.0.2 - /braces@3.0.2: - resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + /braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} dependencies: - fill-range: 7.0.1 + fill-range: 7.1.1 /browserslist@4.23.0: resolution: {integrity: sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001616 - electron-to-chromium: 1.4.757 + caniuse-lite: 1.0.30001629 + electron-to-chromium: 1.4.792 node-releases: 2.0.14 - update-browserslist-db: 1.0.15(browserslist@4.23.0) + update-browserslist-db: 1.0.16(browserslist@4.23.0) dev: true /buffer-from@1.1.2: @@ -2938,8 +2939,8 @@ packages: resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} engines: {node: '>= 6'} - /caniuse-lite@1.0.30001616: - resolution: {integrity: sha512-RHVYKov7IcdNjVHJFNY/78RdG4oGVjbayxv8u5IO74Wv7Hlq4PnJE6mo/OjFijjVFNy5ijnCt6H3IIo4t+wfEw==} + /caniuse-lite@1.0.30001629: + resolution: {integrity: sha512-c3dl911slnQhmxUIT4HhYzT7wnBK/XYpGnYLOj4nJBaRiw52Ibe7YxlDaAeRECvA786zCuExhxIUJ2K7nHMrBw==} /ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} @@ -2982,7 +2983,7 @@ packages: engines: {node: '>= 8.10.0'} dependencies: anymatch: 3.1.3 - braces: 3.0.2 + braces: 3.0.3 glob-parent: 5.1.2 is-binary-path: 2.1.0 is-glob: 4.0.3 @@ -3000,17 +3001,6 @@ packages: engines: {node: '>=8'} dev: false - /cli-color@2.0.4: - resolution: {integrity: sha512-zlnpg0jNcibNrO7GG9IeHH7maWFeCz+Ja1wx/7tZNU5ASSSSZ+/qZciM0/LHCYxSdqv5h2sdbQ/PXYdOuetXvA==} - engines: {node: '>=0.10'} - dependencies: - d: 1.0.2 - es5-ext: 0.10.64 - es6-iterator: 2.0.3 - memoizee: 0.4.15 - timers-ext: 0.1.7 - dev: true - /client-only@0.0.1: resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} dev: false @@ -3084,11 +3074,6 @@ packages: resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} engines: {node: '>= 6'} - /commander@9.5.0: - resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} - engines: {node: ^12.20.0 || >=14} - dev: true - /concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} @@ -3220,14 +3205,6 @@ packages: engines: {node: '>=12'} dev: false - /d@1.0.2: - resolution: {integrity: sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==} - engines: {node: '>=0.12'} - dependencies: - es5-ext: 0.10.64 - type: 2.7.2 - dev: true - /damerau-levenshtein@1.0.8: resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} @@ -3268,7 +3245,11 @@ packages: resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==} engines: {node: '>=0.11'} dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 + dev: false + + /date-fns@3.6.0: + resolution: {integrity: sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==} dev: false /debug@3.2.7: @@ -3281,8 +3262,8 @@ packages: dependencies: ms: 2.1.3 - /debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + /debug@4.3.5: + resolution: {integrity: sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==} engines: {node: '>=6.0'} peerDependencies: supports-color: '*' @@ -3363,12 +3344,6 @@ packages: engines: {node: '>=0.3.1'} dev: false - /difflib@0.2.4: - resolution: {integrity: sha512-9YVwmMb0wQHQNr5J9m6BSj6fk4pfGITGQOOs+D9Fl+INODWFOfvhIU1hNv6GgR1RBoC/9NJcwu77zShxV0kT7w==} - dependencies: - heap: 0.2.7 - dev: true - /dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} @@ -3393,7 +3368,7 @@ packages: /dom-helpers@5.2.1: resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==} dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 csstype: 3.1.3 dev: false @@ -3405,32 +3380,19 @@ packages: webidl-conversions: 7.0.0 dev: false - /dreamopt@0.8.0: - resolution: {integrity: sha512-vyJTp8+mC+G+5dfgsY+r3ckxlz+QMX40VjPQsZc5gxVAxLmi64TBoVkP54A/pRAXMXsbu2GMMBrZPxNv23waMg==} - engines: {node: '>=0.4.0'} - dependencies: - wordwrap: 1.0.0 - dev: true - - /drizzle-kit@0.21.2: - resolution: {integrity: sha512-U87IhZyCt/9d0ZT/Na3KFJVY31tSxtTx/n9UMcWFpW/5c2Ede39xiCG5efNV/0iimsv97UIRtDI0ldLBW5lbcg==} + /drizzle-kit@0.22.5: + resolution: {integrity: sha512-hhCJRyZkr6cWnnUuslxE3VbptPVLpFPZkfS3iyuuHUHGQV8jTUotRvpDFhhytxhwazy4Uj5s7wcsQp3iXHn1vQ==} hasBin: true dependencies: '@esbuild-kit/esm-loader': 2.6.5 - commander: 9.5.0 - env-paths: 3.0.0 esbuild: 0.19.12 esbuild-register: 3.5.0(esbuild@0.19.12) - glob: 8.1.0 - hanji: 0.0.5 - json-diff: 0.9.0 - zod: 3.23.6 transitivePeerDependencies: - supports-color dev: true - /drizzle-orm@0.30.10(@types/react@18.3.1)(@vercel/postgres@0.8.0)(pg@8.11.5)(react@18.3.1): - resolution: {integrity: sha512-IRy/QmMWw9lAQHpwbUh1b8fcn27S/a9zMIzqea1WNOxK9/4EB8gIo+FZWLiPXzl2n9ixGSv8BhsLZiOppWEwBw==} + /drizzle-orm@0.31.2(@types/react@18.3.3)(@vercel/postgres@0.8.0)(pg@8.12.0)(react@18.3.1): + resolution: {integrity: sha512-QnenevbnnAzmbNzQwbhklvIYrDE8YER8K7kSrAWQSV1YvFCdSQPzj+jzqRdTSsV2cDqSpQ0NXGyL1G9I43LDLg==} peerDependencies: '@aws-sdk/client-rds-data': '>=3' '@cloudflare/workers-types': '>=3' @@ -3440,6 +3402,7 @@ packages: '@op-engineering/op-sqlite': '>=2' '@opentelemetry/api': ^1.4.1 '@planetscale/database': '>=1' + '@tidbcloud/serverless': '*' '@types/better-sqlite3': '*' '@types/pg': '*' '@types/react': '>=18' @@ -3474,6 +3437,8 @@ packages: optional: true '@planetscale/database': optional: true + '@tidbcloud/serverless': + optional: true '@types/better-sqlite3': optional: true '@types/pg': @@ -3509,17 +3474,17 @@ packages: sqlite3: optional: true dependencies: - '@types/react': 18.3.1 + '@types/react': 18.3.3 '@vercel/postgres': 0.8.0 - pg: 8.11.5 + pg: 8.12.0 react: 18.3.1 dev: false /eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - /electron-to-chromium@1.4.757: - resolution: {integrity: sha512-jftDaCknYSSt/+KKeXzH3LX5E2CvRLm75P3Hj+J/dv3CL0qUYcOt13d5FN1NiL5IJbbhzHrb3BomeG2tkSlZmw==} + /electron-to-chromium@1.4.792: + resolution: {integrity: sha512-rkg5/N3L+Y844JyfgPUyuKK0Hk0efo3JNxUDKvz3HgP6EmN4rNGhr2D8boLsfTV/hGo7ZGAL8djw+jlg99zQyA==} dev: true /emoji-regex@8.0.0: @@ -3534,8 +3499,8 @@ packages: once: 1.4.0 dev: false - /enhanced-resolve@5.16.0: - resolution: {integrity: sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==} + /enhanced-resolve@5.17.0: + resolution: {integrity: sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA==} engines: {node: '>=10.13.0'} dependencies: graceful-fs: 4.2.11 @@ -3546,11 +3511,6 @@ packages: engines: {node: '>=0.12'} dev: false - /env-paths@3.0.0: - resolution: {integrity: sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: true - /es-abstract@1.23.3: resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} engines: {node: '>= 0.4'} @@ -3658,48 +3618,12 @@ packages: is-date-object: 1.0.5 is-symbol: 1.0.4 - /es5-ext@0.10.64: - resolution: {integrity: sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==} - engines: {node: '>=0.10'} - requiresBuild: true - dependencies: - es6-iterator: 2.0.3 - es6-symbol: 3.1.4 - esniff: 2.0.1 - next-tick: 1.1.0 - dev: true - - /es6-iterator@2.0.3: - resolution: {integrity: sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==} - dependencies: - d: 1.0.2 - es5-ext: 0.10.64 - es6-symbol: 3.1.4 - dev: true - - /es6-symbol@3.1.4: - resolution: {integrity: sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==} - engines: {node: '>=0.12'} - dependencies: - d: 1.0.2 - ext: 1.7.0 - dev: true - - /es6-weak-map@2.0.3: - resolution: {integrity: sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==} - dependencies: - d: 1.0.2 - es5-ext: 0.10.64 - es6-iterator: 2.0.3 - es6-symbol: 3.1.4 - dev: true - /esbuild-register@3.5.0(esbuild@0.19.12): resolution: {integrity: sha512-+4G/XmakeBAsvJuDugJvtyF1x+XJT4FMocynNpxrvEBViirpfUn2PgNpCHedfWhF4WokNsO/OvMKrmJOIJsI5A==} peerDependencies: esbuild: '>=0.12 <1' dependencies: - debug: 4.3.4 + debug: 4.3.5 esbuild: 0.19.12 transitivePeerDependencies: - supports-color @@ -3807,14 +3731,14 @@ packages: optional: true dependencies: '@next/eslint-plugin-next': 13.2.4 - '@rushstack/eslint-patch': 1.10.2 + '@rushstack/eslint-patch': 1.10.3 '@typescript-eslint/parser': 5.62.0(eslint@8.36.0)(typescript@4.9.5) eslint: 8.36.0 eslint-import-resolver-node: 0.3.9 eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.36.0) eslint-plugin-import: 2.29.1(eslint@8.53.0) eslint-plugin-jsx-a11y: 6.8.0(eslint@8.36.0) - eslint-plugin-react: 7.34.1(eslint@8.36.0) + eslint-plugin-react: 7.34.2(eslint@8.36.0) eslint-plugin-react-hooks: 4.6.2(eslint@8.36.0) typescript: 4.9.5 transitivePeerDependencies: @@ -3832,14 +3756,14 @@ packages: optional: true dependencies: '@next/eslint-plugin-next': 14.2.3 - '@rushstack/eslint-patch': 1.10.2 + '@rushstack/eslint-patch': 1.10.3 '@typescript-eslint/parser': 7.2.0(eslint@8.53.0)(typescript@5.4.5) eslint: 8.53.0 eslint-import-resolver-node: 0.3.9 eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.53.0) eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.53.0) eslint-plugin-jsx-a11y: 6.8.0(eslint@8.53.0) - eslint-plugin-react: 7.34.1(eslint@8.53.0) + eslint-plugin-react: 7.34.2(eslint@8.53.0) eslint-plugin-react-hooks: 4.6.2(eslint@8.53.0) typescript: 5.4.5 transitivePeerDependencies: @@ -3863,13 +3787,13 @@ packages: eslint: '*' eslint-plugin-import: '*' dependencies: - debug: 4.3.4 - enhanced-resolve: 5.16.0 + debug: 4.3.5 + enhanced-resolve: 5.17.0 eslint: 8.36.0 eslint-module-utils: 2.8.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.36.0) eslint-plugin-import: 2.29.1(eslint@8.53.0) fast-glob: 3.3.2 - get-tsconfig: 4.7.4 + get-tsconfig: 4.7.5 is-core-module: 2.13.1 is-glob: 4.0.3 transitivePeerDependencies: @@ -3886,13 +3810,13 @@ packages: eslint: '*' eslint-plugin-import: '*' dependencies: - debug: 4.3.4 - enhanced-resolve: 5.16.0 + debug: 4.3.5 + enhanced-resolve: 5.17.0 eslint: 8.53.0 eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.53.0) eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.53.0) fast-glob: 3.3.2 - get-tsconfig: 4.7.4 + get-tsconfig: 4.7.5 is-core-module: 2.13.1 is-glob: 4.0.3 transitivePeerDependencies: @@ -4065,7 +3989,7 @@ packages: peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 aria-query: 5.3.0 array-includes: 3.1.8 array.prototype.flatmap: 1.3.2 @@ -4090,7 +4014,7 @@ packages: peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 aria-query: 5.3.0 array-includes: 3.1.8 array.prototype.flatmap: 1.3.2 @@ -4127,8 +4051,8 @@ packages: eslint: 8.53.0 dev: true - /eslint-plugin-react@7.34.1(eslint@8.36.0): - resolution: {integrity: sha512-N97CxlouPT1AHt8Jn0mhhN2RrADlUAsk1/atcT2KyA/l9Q/E6ll7OIGwNumFmWfZ9skV3XXccYS19h80rHtgkw==} + /eslint-plugin-react@7.34.2(eslint@8.36.0): + resolution: {integrity: sha512-2HCmrU+/JNigDN6tg55cRDKCQWicYAPB38JGSFDQt95jDm8rrvSUo7YPkOIm5l6ts1j1zCvysNcasvfTMQzUOw==} engines: {node: '>=4'} peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 @@ -4137,7 +4061,7 @@ packages: array.prototype.findlast: 1.2.5 array.prototype.flatmap: 1.3.2 array.prototype.toreversed: 1.1.2 - array.prototype.tosorted: 1.1.3 + array.prototype.tosorted: 1.1.4 doctrine: 2.1.0 es-iterator-helpers: 1.0.19 eslint: 8.36.0 @@ -4154,8 +4078,8 @@ packages: string.prototype.matchall: 4.0.11 dev: false - /eslint-plugin-react@7.34.1(eslint@8.53.0): - resolution: {integrity: sha512-N97CxlouPT1AHt8Jn0mhhN2RrADlUAsk1/atcT2KyA/l9Q/E6ll7OIGwNumFmWfZ9skV3XXccYS19h80rHtgkw==} + /eslint-plugin-react@7.34.2(eslint@8.53.0): + resolution: {integrity: sha512-2HCmrU+/JNigDN6tg55cRDKCQWicYAPB38JGSFDQt95jDm8rrvSUo7YPkOIm5l6ts1j1zCvysNcasvfTMQzUOw==} engines: {node: '>=4'} peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 @@ -4164,7 +4088,7 @@ packages: array.prototype.findlast: 1.2.5 array.prototype.flatmap: 1.3.2 array.prototype.toreversed: 1.1.2 - array.prototype.tosorted: 1.1.3 + array.prototype.tosorted: 1.1.4 doctrine: 2.1.0 es-iterator-helpers: 1.0.19 eslint: 8.53.0 @@ -4198,7 +4122,7 @@ packages: hasBin: true dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.36.0) - '@eslint-community/regexpp': 4.10.0 + '@eslint-community/regexpp': 4.10.1 '@eslint/eslintrc': 2.1.4 '@eslint/js': 8.36.0 '@humanwhocodes/config-array': 0.11.14 @@ -4207,7 +4131,7 @@ packages: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.4 + debug: 4.3.5 doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.2.2 @@ -4247,7 +4171,7 @@ packages: hasBin: true dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.53.0) - '@eslint-community/regexpp': 4.10.0 + '@eslint-community/regexpp': 4.10.1 '@eslint/eslintrc': 2.1.4 '@eslint/js': 8.53.0 '@humanwhocodes/config-array': 0.11.14 @@ -4257,7 +4181,7 @@ packages: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.4 + debug: 4.3.5 doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.2.2 @@ -4287,16 +4211,6 @@ packages: transitivePeerDependencies: - supports-color - /esniff@2.0.1: - resolution: {integrity: sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==} - engines: {node: '>=0.10'} - dependencies: - d: 1.0.2 - es5-ext: 0.10.64 - event-emitter: 0.3.5 - type: 2.7.2 - dev: true - /espree@9.6.1: resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -4374,13 +4288,6 @@ packages: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} - /event-emitter@0.3.5: - resolution: {integrity: sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==} - dependencies: - d: 1.0.2 - es5-ext: 0.10.64 - dev: true - /eventemitter3@4.0.7: resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} dev: false @@ -4400,12 +4307,6 @@ packages: engines: {node: '>=6'} dev: false - /ext@1.7.0: - resolution: {integrity: sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==} - dependencies: - type: 2.7.2 - dev: true - /extend-shallow@2.0.1: resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} engines: {node: '>=0.10.0'} @@ -4437,7 +4338,7 @@ packages: '@nodelib/fs.walk': 1.2.8 glob-parent: 5.1.2 merge2: 1.4.1 - micromatch: 4.0.5 + micromatch: 4.0.7 /fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} @@ -4456,8 +4357,8 @@ packages: dependencies: flat-cache: 3.2.0 - /fill-range@7.0.1: - resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + /fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} dependencies: to-regex-range: 5.0.1 @@ -4538,7 +4439,7 @@ packages: dependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - tslib: 2.6.2 + tslib: 2.6.3 optionalDependencies: '@emotion/is-prop-valid': 0.8.8 dev: false @@ -4595,8 +4496,8 @@ packages: es-errors: 1.3.0 get-intrinsic: 1.2.4 - /get-tsconfig@4.7.4: - resolution: {integrity: sha512-ofbkKj+0pjXjhejr007J/fLf+sW+8H7K5GCm+msC8q3IpvgjobpyPqSRFemNyIMxklC0zeJpi7VDFna19FacvQ==} + /get-tsconfig@4.7.5: + resolution: {integrity: sha512-ZCuZCnlqNzjb4QprAzXKdpp/gh6KTxSJuw3IBsPnV/7fV4NxC9ckB+vPTt8w7fJA0TaSD7c55BR47JD6MEDyDw==} dependencies: resolve-pkg-maps: 1.0.0 @@ -4628,23 +4529,24 @@ packages: foreground-child: 3.1.1 jackspeak: 2.3.6 minimatch: 9.0.4 - minipass: 7.1.0 - path-scurry: 1.10.2 + minipass: 7.1.2 + path-scurry: 1.11.1 dev: true - /glob@10.3.12: - resolution: {integrity: sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==} - engines: {node: '>=16 || 14 >=14.17'} + /glob@10.4.1: + resolution: {integrity: sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw==} + engines: {node: '>=16 || 14 >=14.18'} hasBin: true dependencies: foreground-child: 3.1.1 - jackspeak: 2.3.6 + jackspeak: 3.4.0 minimatch: 9.0.4 - minipass: 7.1.0 - path-scurry: 1.10.2 + minipass: 7.1.2 + path-scurry: 1.11.1 /glob@7.1.7: resolution: {integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==} + deprecated: Glob versions prior to v9 are no longer supported dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 @@ -4656,6 +4558,7 @@ packages: /glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 @@ -4664,17 +4567,6 @@ packages: once: 1.4.0 path-is-absolute: 1.0.1 - /glob@8.1.0: - resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} - engines: {node: '>=12'} - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 5.1.6 - once: 1.4.0 - dev: true - /globals@13.24.0: resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} engines: {node: '>=8'} @@ -4724,13 +4616,6 @@ packages: strip-bom-string: 1.0.0 dev: false - /hanji@0.0.5: - resolution: {integrity: sha512-Abxw1Lq+TnYiL4BueXqMau222fPSPMFtya8HdpWsz/xVAhifXou71mPh/kY2+08RgFcVccjG3uZHs6K5HAe3zw==} - dependencies: - lodash.throttle: 4.1.1 - sisteransi: 1.0.5 - dev: true - /has-bigints@1.0.2: resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} @@ -4794,10 +4679,6 @@ packages: resolution: {integrity: sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng==} dev: false - /heap@0.2.7: - resolution: {integrity: sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==} - dev: true - /html-encoding-sniffer@3.0.0: resolution: {integrity: sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==} engines: {node: '>=12'} @@ -4811,7 +4692,7 @@ packages: dependencies: '@tootallnate/once': 2.0.0 agent-base: 6.0.2 - debug: 4.3.4 + debug: 4.3.5 transitivePeerDependencies: - supports-color dev: false @@ -4821,7 +4702,7 @@ packages: engines: {node: '>= 6'} dependencies: agent-base: 6.0.2 - debug: 4.3.4 + debug: 4.3.5 transitivePeerDependencies: - supports-color dev: false @@ -4854,6 +4735,7 @@ packages: /inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. dependencies: once: 1.4.0 wrappy: 1.0.2 @@ -5029,10 +4911,6 @@ packages: resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} dev: false - /is-promise@2.2.2: - resolution: {integrity: sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==} - dev: true - /is-reference@3.0.2: resolution: {integrity: sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==} dependencies: @@ -5112,6 +4990,15 @@ packages: '@isaacs/cliui': 8.0.2 optionalDependencies: '@pkgjs/parseargs': 0.11.0 + dev: true + + /jackspeak@3.4.0: + resolution: {integrity: sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==} + engines: {node: '>=14'} + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 /jest-environment-jsdom@29.6.1: resolution: {integrity: sha512-PoY+yLaHzVRhVEjcVKSfJ7wXmJW4UqPYNhR05h7u/TK0ouf6DmRNZFBL/Z00zgQMyWGMBXn69/FmOvhEJu8cIw==} @@ -5126,7 +5013,7 @@ packages: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 '@types/jsdom': 20.0.1 - '@types/node': 20.12.10 + '@types/node': 20.14.2 jest-mock: 29.7.0 jest-util: 29.7.0 jsdom: 20.0.3 @@ -5149,7 +5036,7 @@ packages: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 '@types/jsdom': 20.0.1 - '@types/node': 20.12.10 + '@types/node': 20.14.2 jest-mock: 29.7.0 jest-util: 29.7.0 jsdom: 20.0.3 @@ -5163,12 +5050,12 @@ packages: resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/code-frame': 7.24.2 + '@babel/code-frame': 7.24.7 '@jest/types': 29.6.3 '@types/stack-utils': 2.0.3 chalk: 4.1.2 graceful-fs: 4.2.11 - micromatch: 4.0.5 + micromatch: 4.0.7 pretty-format: 29.7.0 slash: 3.0.0 stack-utils: 2.0.6 @@ -5179,7 +5066,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.12.10 + '@types/node': 20.14.2 jest-util: 29.7.0 dev: false @@ -5188,23 +5075,23 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.12.10 + '@types/node': 20.14.2 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 picomatch: 2.3.1 dev: false - /jiti@1.21.0: - resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} + /jiti@1.21.3: + resolution: {integrity: sha512-uy2bNX5zQ+tESe+TiC7ilGRz8AtRGmnJH55NC5S0nSUjvvvM2hJHmefHErugGXN4pNv4Qx7vLsnNw9qJ9mtIsw==} hasBin: true /jose@4.15.5: resolution: {integrity: sha512-jc7BFxgKPKi94uOvEmzlSWFFe2+vASyXaKUpdQKatWAESU2MWjDfFf0fdfc83CDKcA5QecabZeNLyfhe3yKNkg==} dev: false - /jose@5.2.4: - resolution: {integrity: sha512-6ScbIk2WWCeXkmzF6bRPmEuaqy1m8SbsRFMa/FLrSCkGIhj8OLVG/IH+XHVmNMx/KUo8cVWEE6oKR4dJ+S0Rkg==} + /jose@5.4.0: + resolution: {integrity: sha512-6rpxTHPAQyWMb9A35BroFl1Sp0ST3DpPcm5EVIxZxdH+e0Hv9fwhyB3XLKFUcHNpdSDnETmBfuPPTTlYz5+USw==} dev: false /js-cookie@3.0.5: @@ -5256,7 +5143,7 @@ packages: http-proxy-agent: 5.0.0 https-proxy-agent: 5.0.1 is-potential-custom-element-name: 1.0.1 - nwsapi: 2.2.9 + nwsapi: 2.2.10 parse5: 7.1.2 saxes: 6.0.0 symbol-tree: 3.2.4 @@ -5277,15 +5164,6 @@ packages: /json-buffer@3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} - /json-diff@0.9.0: - resolution: {integrity: sha512-cVnggDrVkAAA3OvFfHpFEhOnmcsUpleEKq4d4O8sQWWSH40MBrWstKigVB1kGrgLWzuom+7rRdaCsnBD6VyObQ==} - hasBin: true - dependencies: - cli-color: 2.0.4 - difflib: 0.2.4 - dreamopt: 0.8.0 - dev: true - /json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} @@ -5322,14 +5200,14 @@ packages: engines: {node: '>=6'} dev: false - /language-subtag-registry@0.3.22: - resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==} + /language-subtag-registry@0.3.23: + resolution: {integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==} /language-tags@1.0.9: resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} engines: {node: '>=0.10'} dependencies: - language-subtag-registry: 0.3.22 + language-subtag-registry: 0.3.23 /levn@0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} @@ -5380,10 +5258,6 @@ packages: /lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - /lodash.throttle@4.1.1: - resolution: {integrity: sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==} - dev: true - /lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} dev: false @@ -5407,12 +5281,7 @@ packages: engines: {node: '>=10'} dependencies: yallist: 4.0.0 - - /lru-queue@0.1.0: - resolution: {integrity: sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ==} - dependencies: - es5-ext: 0.10.64 - dev: true + dev: false /lucide-react@0.244.0(react@18.3.1): resolution: {integrity: sha512-PeDVbx5PlIRrVvdxiuSxPfBo7sK5qrL3LbvvRoGVNiHYRAkBm/48lKqoioxcmp0bgsyJs9lMw7CdtGFvnMJbVg==} @@ -5586,19 +5455,6 @@ packages: resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==} dev: false - /memoizee@0.4.15: - resolution: {integrity: sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==} - dependencies: - d: 1.0.2 - es5-ext: 0.10.64 - es6-weak-map: 2.0.3 - event-emitter: 0.3.5 - is-promise: 2.2.2 - lru-queue: 0.1.0 - next-tick: 1.1.0 - timers-ext: 0.1.7 - dev: true - /merge2@1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} @@ -5845,7 +5701,7 @@ packages: resolution: {integrity: sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==} dependencies: '@types/debug': 4.1.12 - debug: 4.3.4 + debug: 4.3.5 decode-named-character-reference: 1.0.2 micromark-core-commonmark: 1.1.0 micromark-factory-space: 1.1.0 @@ -5865,11 +5721,11 @@ packages: - supports-color dev: false - /micromatch@4.0.5: - resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + /micromatch@4.0.7: + resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==} engines: {node: '>=8.6'} dependencies: - braces: 3.0.2 + braces: 3.0.3 picomatch: 2.3.1 /mime-db@1.52.0: @@ -5899,13 +5755,6 @@ packages: dependencies: brace-expansion: 1.1.11 - /minimatch@5.1.6: - resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} - engines: {node: '>=10'} - dependencies: - brace-expansion: 2.0.1 - dev: true - /minimatch@9.0.3: resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} engines: {node: '>=16 || 14 >=14.17'} @@ -5922,8 +5771,8 @@ packages: /minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - /minipass@7.1.0: - resolution: {integrity: sha512-oGZRv2OT1lO2UF1zUcwdTb3wqUwI0kBGTgt/T7OdSj6M6N5m3o5uPf0AIW6lVxGGoiWUR7e2AwTE+xiwK8WQig==} + /minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} engines: {node: '>=16 || 14 >=14.17'} /mkdirp-classic@0.5.3: @@ -5983,15 +5832,15 @@ packages: nodemailer: optional: true dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 '@panva/hkdf': 1.1.1 cookie: 0.5.0 jose: 4.15.5 next: 14.0.2(react-dom@18.3.1)(react@18.3.1) oauth: 0.9.15 openid-client: 5.6.5 - preact: 10.21.0 - preact-render-to-string: 5.2.6(preact@10.21.0) + preact: 10.22.0 + preact-render-to-string: 5.2.6(preact@10.22.0) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) uuid: 8.3.2 @@ -6014,10 +5863,6 @@ packages: - supports-color dev: false - /next-tick@1.1.0: - resolution: {integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==} - dev: true - /next@13.4.20-canary.15(react-dom@18.2.0)(react@18.3.1): resolution: {integrity: sha512-Ugd22aq9E0Eq0VFTn3htQjh50097ug8dAPS0v+9+AGz5VDhwx/ybnDo8S80Zjp8KGDuCP9S8LjwOiy0Ln8VeOg==} engines: {node: '>=16.14.0'} @@ -6036,7 +5881,7 @@ packages: '@next/env': 13.4.20-canary.15 '@swc/helpers': 0.5.1 busboy: 1.6.0 - caniuse-lite: 1.0.30001616 + caniuse-lite: 1.0.30001629 postcss: 8.4.14 react: 18.3.1 react-dom: 18.2.0(react@18.3.1) @@ -6076,7 +5921,7 @@ packages: '@next/env': 14.0.2 '@swc/helpers': 0.5.2 busboy: 1.6.0 - caniuse-lite: 1.0.30001616 + caniuse-lite: 1.0.30001629 postcss: 8.4.31 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -6097,11 +5942,11 @@ packages: - babel-plugin-macros dev: false - /node-abi@3.62.0: - resolution: {integrity: sha512-CPMcGa+y33xuL1E0TcNIu4YyaZCxnnvkVaEXrsosR3FxN+fV8xvb7Mzpb7IgKler10qeMkE6+Dp8qJhpzdq35g==} + /node-abi@3.63.0: + resolution: {integrity: sha512-vAszCsOUrUxjGAmdnM/pq7gUgie0IRteCQMX6d4A534fQCR93EJU5qgzBvU6EkFfK27s0T3HEV3BOyJIr7OMYw==} engines: {node: '>=10'} dependencies: - semver: 7.6.0 + semver: 7.6.2 dev: false /node-addon-api@6.1.0: @@ -6126,35 +5971,35 @@ packages: engines: {node: '>=0.10.0'} dev: true - /novel@0.1.22(react@18.3.1)(solid-js@1.8.17)(svelte@4.2.15)(vue@3.4.27): + /novel@0.1.22(react@18.3.1)(solid-js@1.8.17)(svelte@4.2.18)(vue@3.4.27): resolution: {integrity: sha512-hdZ3iV4kvCISNjRNXqQk6fRVkMZmvzWjA3zXM1bU2SXVEufBxZL+77qsdEK/XETkJkeEdQl0mk8ERwLiL0BvRg==} peerDependencies: react: ^18.2.0 dependencies: '@radix-ui/react-popover': 1.0.7(@types/react-dom@18.0.11)(@types/react@18.0.28)(react-dom@18.2.0)(react@18.3.1) - '@tiptap/core': 2.3.1(@tiptap/pm@2.3.1) - '@tiptap/extension-color': 2.3.1(@tiptap/core@2.3.1)(@tiptap/extension-text-style@2.3.1) - '@tiptap/extension-highlight': 2.3.1(@tiptap/core@2.3.1) - '@tiptap/extension-horizontal-rule': 2.3.1(@tiptap/core@2.3.1)(@tiptap/pm@2.3.1) - '@tiptap/extension-image': 2.3.1(@tiptap/core@2.3.1) - '@tiptap/extension-link': 2.3.1(@tiptap/core@2.3.1)(@tiptap/pm@2.3.1) - '@tiptap/extension-placeholder': 2.0.3(@tiptap/core@2.3.1)(@tiptap/pm@2.3.1) - '@tiptap/extension-task-item': 2.3.1(@tiptap/core@2.3.1)(@tiptap/pm@2.3.1) - '@tiptap/extension-task-list': 2.3.1(@tiptap/core@2.3.1) - '@tiptap/extension-text-style': 2.3.1(@tiptap/core@2.3.1) - '@tiptap/extension-underline': 2.3.1(@tiptap/core@2.3.1) - '@tiptap/pm': 2.3.1 - '@tiptap/react': 2.3.1(@tiptap/core@2.3.1)(@tiptap/pm@2.3.1)(react-dom@18.2.0)(react@18.3.1) - '@tiptap/starter-kit': 2.3.1(@tiptap/pm@2.3.1) - '@tiptap/suggestion': 2.3.1(@tiptap/core@2.3.1)(@tiptap/pm@2.3.1) + '@tiptap/core': 2.4.0(@tiptap/pm@2.4.0) + '@tiptap/extension-color': 2.4.0(@tiptap/core@2.4.0)(@tiptap/extension-text-style@2.4.0) + '@tiptap/extension-highlight': 2.4.0(@tiptap/core@2.4.0) + '@tiptap/extension-horizontal-rule': 2.4.0(@tiptap/core@2.4.0)(@tiptap/pm@2.4.0) + '@tiptap/extension-image': 2.4.0(@tiptap/core@2.4.0) + '@tiptap/extension-link': 2.4.0(@tiptap/core@2.4.0)(@tiptap/pm@2.4.0) + '@tiptap/extension-placeholder': 2.0.3(@tiptap/core@2.4.0)(@tiptap/pm@2.4.0) + '@tiptap/extension-task-item': 2.4.0(@tiptap/core@2.4.0)(@tiptap/pm@2.4.0) + '@tiptap/extension-task-list': 2.4.0(@tiptap/core@2.4.0) + '@tiptap/extension-text-style': 2.4.0(@tiptap/core@2.4.0) + '@tiptap/extension-underline': 2.4.0(@tiptap/core@2.4.0) + '@tiptap/pm': 2.4.0 + '@tiptap/react': 2.4.0(@tiptap/core@2.4.0)(@tiptap/pm@2.4.0)(react-dom@18.2.0)(react@18.3.1) + '@tiptap/starter-kit': 2.4.0(@tiptap/pm@2.4.0) + '@tiptap/suggestion': 2.4.0(@tiptap/core@2.4.0)(@tiptap/pm@2.4.0) '@types/node': 18.15.3 '@types/react': 18.0.28 '@types/react-dom': 18.0.11 '@upstash/ratelimit': 0.4.4 - '@vercel/analytics': 1.2.2(next@13.4.20-canary.15)(react@18.3.1) + '@vercel/analytics': 1.3.1(next@13.4.20-canary.15)(react@18.3.1) '@vercel/blob': 0.9.3 '@vercel/kv': 0.2.4 - ai: 2.2.37(react@18.3.1)(solid-js@1.8.17)(svelte@4.2.15)(vue@3.4.27) + ai: 2.2.37(react@18.3.1)(solid-js@1.8.17)(svelte@4.2.18)(vue@3.4.27) clsx: 1.2.1 eslint: 8.36.0 eslint-config-next: 13.2.4(eslint@8.36.0)(typescript@4.9.5) @@ -6167,7 +6012,7 @@ packages: sonner: 0.7.4(react-dom@18.2.0)(react@18.3.1) tailwind-merge: 1.14.0 tippy.js: 6.3.7 - tiptap-markdown: 0.8.10(@tiptap/core@2.3.1) + tiptap-markdown: 0.8.10(@tiptap/core@2.4.0) typescript: 4.9.5 use-debounce: 9.0.4(react@18.3.1) transitivePeerDependencies: @@ -6185,8 +6030,8 @@ packages: - vue dev: false - /nwsapi@2.2.9: - resolution: {integrity: sha512-2f3F0SEEer8bBu0dsNCFF50N0cTThV1nWFYcEYFZttdW0lDAoybv9cQoK7X7/68Z89S7FoRrVjP1LPX4XRf9vg==} + /nwsapi@2.2.10: + resolution: {integrity: sha512-QK0sRs7MKv0tKe1+5uZIQk/C8XGza4DAnztJG8iD+TpJIORARrCxczA738awHrZoHeTjSSoHqao2teO0dC/gFQ==} dev: false /oauth4webapi@2.10.4: @@ -6358,12 +6203,12 @@ packages: /path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - /path-scurry@1.10.2: - resolution: {integrity: sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==} - engines: {node: '>=16 || 14 >=14.17'} + /path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} dependencies: lru-cache: 10.2.2 - minipass: 7.1.0 + minipass: 7.1.2 /path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} @@ -6392,12 +6237,12 @@ packages: engines: {node: '>=4.0.0'} dev: false - /pg-pool@3.6.2(pg@8.11.5): + /pg-pool@3.6.2(pg@8.12.0): resolution: {integrity: sha512-Htjbg8BlwXqSBQ9V8Vjtc+vzf/6fVUuak/3/XXKA9oxZprwW3IMDQTGHP+KDmVL7rtd+R1QjbnCFPuTHm3G4hg==} peerDependencies: pg: '>=8.0' dependencies: - pg: 8.11.5 + pg: 8.12.0 dev: false /pg-protocol@1.6.1: @@ -6415,8 +6260,8 @@ packages: postgres-interval: 1.2.0 dev: false - /pg@8.11.5: - resolution: {integrity: sha512-jqgNHSKL5cbDjFlHyYsCXmQDrfIX/3RsNwYqpd4N0Kt8niLuNoRNH+aazv6cOd43gPh9Y4DjQCtb+X0MH0Hvnw==} + /pg@8.12.0: + resolution: {integrity: sha512-A+LHUSnwnxrnL/tZ+OLfqR1SxLN3c/pgDztZ47Rpbsd4jUytsTtwQo/TLPRzPJMp/1pbhYVhH9cuSZLAajNfjQ==} engines: {node: '>= 8.0.0'} peerDependencies: pg-native: '>=3.0.1' @@ -6425,7 +6270,7 @@ packages: optional: true dependencies: pg-connection-string: 2.6.4 - pg-pool: 3.6.2(pg@8.11.5) + pg-pool: 3.6.2(pg@8.12.0) pg-protocol: 1.6.1 pg-types: 2.2.0 pgpass: 1.0.5 @@ -6439,8 +6284,8 @@ packages: split2: 4.2.0 dev: false - /picocolors@1.0.0: - resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + /picocolors@1.0.1: + resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} /picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} @@ -6492,7 +6337,7 @@ packages: dependencies: lilconfig: 3.1.1 postcss: 8.4.38 - yaml: 2.4.2 + yaml: 2.4.3 /postcss-nested@6.0.1(postcss@8.4.38): resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} @@ -6501,7 +6346,7 @@ packages: postcss: ^8.2.14 dependencies: postcss: 8.4.38 - postcss-selector-parser: 6.0.16 + postcss-selector-parser: 6.1.0 /postcss-selector-parser@6.0.10: resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==} @@ -6511,8 +6356,8 @@ packages: util-deprecate: 1.0.2 dev: true - /postcss-selector-parser@6.0.16: - resolution: {integrity: sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==} + /postcss-selector-parser@6.1.0: + resolution: {integrity: sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ==} engines: {node: '>=4'} dependencies: cssesc: 3.0.0 @@ -6526,7 +6371,7 @@ packages: engines: {node: ^10 || ^12 || >=14} dependencies: nanoid: 3.3.7 - picocolors: 1.0.0 + picocolors: 1.0.1 source-map-js: 1.2.0 dev: false @@ -6535,7 +6380,7 @@ packages: engines: {node: ^10 || ^12 || >=14} dependencies: nanoid: 3.3.7 - picocolors: 1.0.0 + picocolors: 1.0.1 source-map-js: 1.2.0 dev: false @@ -6544,7 +6389,7 @@ packages: engines: {node: ^10 || ^12 || >=14} dependencies: nanoid: 3.3.7 - picocolors: 1.0.0 + picocolors: 1.0.1 source-map-js: 1.2.0 /postgres-array@2.0.0: @@ -6578,12 +6423,12 @@ packages: pretty-format: 3.8.0 dev: false - /preact-render-to-string@5.2.6(preact@10.21.0): + /preact-render-to-string@5.2.6(preact@10.22.0): resolution: {integrity: sha512-JyhErpYOvBV1hEPwIxc/fHWXPfnEGdRKxc8gFdAZ7XV4tlzyzG847XAyEZqoDnynP88akM4eaHcSOzNcLWFguw==} peerDependencies: preact: '>=10' dependencies: - preact: 10.21.0 + preact: 10.22.0 pretty-format: 3.8.0 dev: false @@ -6591,8 +6436,8 @@ packages: resolution: {integrity: sha512-eY93IVpod/zG3uMF22Unl8h9KkrcKIRs2EGar8hwLZZDU1lkjph303V9HZBwufh2s736U6VXuhD109LYqPoffg==} dev: false - /preact@10.21.0: - resolution: {integrity: sha512-aQAIxtzWEwH8ou+OovWVSVNlFImL7xUCwJX3YMqA3U8iKCNC34999fFOnWjYNsylgfPgMexpbk7WYOLtKr/mxg==} + /preact@10.22.0: + resolution: {integrity: sha512-RRurnSjJPj4rp5K6XoP45Ui33ncb7e4H7WiOHVpjbkvqvA3U+N8Z6Qbo0AE6leGYBV66n8EhEaFixvIu3SkxFw==} dev: false /prebuild-install@7.1.2: @@ -6606,7 +6451,7 @@ packages: minimist: 1.2.8 mkdirp-classic: 0.5.3 napi-build-utils: 1.0.2 - node-abi: 3.62.0 + node-abi: 3.63.0 pump: 3.0.0 rc: 1.2.8 simple-get: 4.0.1 @@ -6618,7 +6463,7 @@ packages: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} - /prettier-plugin-tailwindcss@0.5.14(prettier@3.2.5): + /prettier-plugin-tailwindcss@0.5.14(prettier@3.3.1): resolution: {integrity: sha512-Puaz+wPUAhFp8Lo9HuciYKM2Y2XExESjeT+9NQoVFXZsPPnc9VYss2SpxdQ6vbatmt8/4+SN0oe0I1cPDABg9Q==} engines: {node: '>=14.21.3'} peerDependencies: @@ -6670,11 +6515,11 @@ packages: prettier-plugin-svelte: optional: true dependencies: - prettier: 3.2.5 + prettier: 3.3.1 dev: true - /prettier@3.2.5: - resolution: {integrity: sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==} + /prettier@3.3.1: + resolution: {integrity: sha512-7CAwy5dRsxs8PHXT3twixW9/OEll8MLE0VRPCJyl7CkS6VHGPSlsVaWTiASPTyGyYRyApxlaWTzwUxVNrhcwDg==} engines: {node: '>=14'} hasBin: true dev: true @@ -6718,7 +6563,7 @@ packages: /prosemirror-commands@1.5.2: resolution: {integrity: sha512-hgLcPaakxH8tu6YvVAaILV2tXYsW3rAdDR8WNkeKGcgeMVQg3/TMhPdVoh7iAmfgVjZGtcOSjKiQaoeKjzd2mQ==} dependencies: - prosemirror-model: 1.21.0 + prosemirror-model: 1.21.1 prosemirror-state: 1.4.3 prosemirror-transform: 1.9.0 dev: false @@ -6728,16 +6573,16 @@ packages: dependencies: prosemirror-state: 1.4.3 prosemirror-transform: 1.9.0 - prosemirror-view: 1.33.6 + prosemirror-view: 1.33.7 dev: false /prosemirror-gapcursor@1.3.2: resolution: {integrity: sha512-wtjswVBd2vaQRrnYZaBCbyDqr232Ed4p2QPtRIUK5FuqHYKGWkEwl08oQM4Tw7DOR0FsasARV5uJFvMZWxdNxQ==} dependencies: prosemirror-keymap: 1.2.2 - prosemirror-model: 1.21.0 + prosemirror-model: 1.21.1 prosemirror-state: 1.4.3 - prosemirror-view: 1.33.6 + prosemirror-view: 1.33.7 dev: false /prosemirror-history@1.4.0: @@ -6745,7 +6590,7 @@ packages: dependencies: prosemirror-state: 1.4.3 prosemirror-transform: 1.9.0 - prosemirror-view: 1.33.6 + prosemirror-view: 1.33.7 rope-sequence: 1.3.4 dev: false @@ -6763,11 +6608,11 @@ packages: w3c-keyname: 2.2.8 dev: false - /prosemirror-markdown@1.12.0: - resolution: {integrity: sha512-6F5HS8Z0HDYiS2VQDZzfZP6A0s/I0gbkJy8NCzzDMtcsz3qrfqyroMMeoSjAmOhDITyon11NbXSzztfKi+frSQ==} + /prosemirror-markdown@1.13.0: + resolution: {integrity: sha512-UziddX3ZYSYibgx8042hfGKmukq5Aljp2qoBiJRejD/8MH70siQNz5RB1TrdTPheqLMy4aCe4GYNF10/3lQS5g==} dependencies: markdown-it: 14.1.0 - prosemirror-model: 1.21.0 + prosemirror-model: 1.21.1 dev: false /prosemirror-menu@1.2.4: @@ -6779,8 +6624,8 @@ packages: prosemirror-state: 1.4.3 dev: false - /prosemirror-model@1.21.0: - resolution: {integrity: sha512-zLpS1mVCZLA7VTp82P+BfMiYVPcX1/z0Mf3gsjKZtzMWubwn2pN7CceMV0DycjlgE5JeXPR7UF4hJPbBV98oWA==} + /prosemirror-model@1.21.1: + resolution: {integrity: sha512-IVBAuMqOfltTr7yPypwpfdGT+6rGAteVOw2FO6GEvCGGa1ZwxLseqC1Eax/EChDvG/xGquB2d/hLdgh3THpsYg==} dependencies: orderedmap: 2.1.1 dev: false @@ -6788,13 +6633,13 @@ packages: /prosemirror-schema-basic@1.2.2: resolution: {integrity: sha512-/dT4JFEGyO7QnNTe9UaKUhjDXbTNkiWTq/N4VpKaF79bBjSExVV2NXmJpcM7z/gD7mbqNjxbmWW5nf1iNSSGnw==} dependencies: - prosemirror-model: 1.21.0 + prosemirror-model: 1.21.1 dev: false /prosemirror-schema-list@1.3.0: resolution: {integrity: sha512-Hz/7gM4skaaYfRPNgr421CU4GSwotmEwBVvJh5ltGiffUJwm7C8GfN/Bc6DR1EKEp5pDKhODmdXXyi9uIsZl5A==} dependencies: - prosemirror-model: 1.21.0 + prosemirror-model: 1.21.1 prosemirror-state: 1.4.3 prosemirror-transform: 1.9.0 dev: false @@ -6802,22 +6647,22 @@ packages: /prosemirror-state@1.4.3: resolution: {integrity: sha512-goFKORVbvPuAQaXhpbemJFRKJ2aixr+AZMGiquiqKxaucC6hlpHNZHWgz5R7dS4roHiwq9vDctE//CZ++o0W1Q==} dependencies: - prosemirror-model: 1.21.0 + prosemirror-model: 1.21.1 prosemirror-transform: 1.9.0 - prosemirror-view: 1.33.6 + prosemirror-view: 1.33.7 dev: false /prosemirror-tables@1.3.7: resolution: {integrity: sha512-oEwX1wrziuxMtwFvdDWSFHVUWrFJWt929kVVfHvtTi8yvw+5ppxjXZkMG/fuTdFo+3DXyIPSKfid+Be1npKXDA==} dependencies: prosemirror-keymap: 1.2.2 - prosemirror-model: 1.21.0 + prosemirror-model: 1.21.1 prosemirror-state: 1.4.3 prosemirror-transform: 1.9.0 - prosemirror-view: 1.33.6 + prosemirror-view: 1.33.7 dev: false - /prosemirror-trailing-node@2.0.8(prosemirror-model@1.21.0)(prosemirror-state@1.4.3)(prosemirror-view@1.33.6): + /prosemirror-trailing-node@2.0.8(prosemirror-model@1.21.1)(prosemirror-state@1.4.3)(prosemirror-view@1.33.7): resolution: {integrity: sha512-ujRYhSuhQb1Jsarh1IHqb2KoSnRiD7wAMDGucP35DN7j5af6X7B18PfdPIrbwsPTqIAj0fyOvxbuPsWhNvylmA==} peerDependencies: prosemirror-model: ^1.19.0 @@ -6826,21 +6671,21 @@ packages: dependencies: '@remirror/core-constants': 2.0.2 escape-string-regexp: 4.0.0 - prosemirror-model: 1.21.0 + prosemirror-model: 1.21.1 prosemirror-state: 1.4.3 - prosemirror-view: 1.33.6 + prosemirror-view: 1.33.7 dev: false /prosemirror-transform@1.9.0: resolution: {integrity: sha512-5UXkr1LIRx3jmpXXNKDhv8OyAOeLTGuXNwdVfg8x27uASna/wQkr9p6fD3eupGOi4PLJfbezxTyi/7fSJypXHg==} dependencies: - prosemirror-model: 1.21.0 + prosemirror-model: 1.21.1 dev: false - /prosemirror-view@1.33.6: - resolution: {integrity: sha512-zRLUNgLIQfd8IfGprsXxWTjdA8xEAFJe8cDNrOptj6Mop9sj+BMeVbJvceyAYCm5G2dOdT2prctH7K9dfnpIMw==} + /prosemirror-view@1.33.7: + resolution: {integrity: sha512-jo6eMQCtPRwcrA2jISBCnm0Dd2B+szS08BU1Ay+XGiozHo5EZMHfLQE8R5nO4vb1spTH2RW1woZIYXRiQsuP8g==} dependencies: - prosemirror-model: 1.21.0 + prosemirror-model: 1.21.1 prosemirror-state: 1.4.3 prosemirror-transform: 1.9.0 dev: false @@ -6886,13 +6731,13 @@ packages: strip-json-comments: 2.0.1 dev: false - /react-day-picker@8.10.1(date-fns@2.30.0)(react@18.3.1): + /react-day-picker@8.10.1(date-fns@3.6.0)(react@18.3.1): resolution: {integrity: sha512-TMx7fNbhLk15eqcMt+7Z7S2KF7mfTId/XJDjKE8f+IUcFn0l08/kI4FiYTL/0yuOLmEcbR4Fwe3GJf/NiiMnPA==} peerDependencies: date-fns: ^2.28.0 || ^3.0.0 react: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: - date-fns: 2.30.0 + date-fns: 3.6.0 react: 18.3.1 dev: false @@ -6963,7 +6808,7 @@ packages: '@types/react': 18.0.28 react: 18.3.1 react-style-singleton: 2.2.1(@types/react@18.0.28)(react@18.3.1) - tslib: 2.6.2 + tslib: 2.6.3 dev: false /react-remove-scroll@2.5.5(@types/react@18.0.28)(react@18.3.1): @@ -6980,7 +6825,7 @@ packages: react: 18.3.1 react-remove-scroll-bar: 2.3.6(@types/react@18.0.28)(react@18.3.1) react-style-singleton: 2.2.1(@types/react@18.0.28)(react@18.3.1) - tslib: 2.6.2 + tslib: 2.6.3 use-callback-ref: 1.3.2(@types/react@18.0.28)(react@18.3.1) use-sidecar: 1.1.2(@types/react@18.0.28)(react@18.3.1) dev: false @@ -7012,19 +6857,19 @@ packages: get-nonce: 1.0.1 invariant: 2.2.4 react: 18.3.1 - tslib: 2.6.2 + tslib: 2.6.3 dev: false - /react-textarea-autosize@8.5.3(@types/react@18.3.1)(react@18.3.1): + /react-textarea-autosize@8.5.3(@types/react@18.3.3)(react@18.3.1): resolution: {integrity: sha512-XT1024o2pqCuZSuBt9FwHlaDeNtVrtCXu0Rnz88t1jUGheCLa3PhjE1GH8Ctm2axEtvdCl5SUHYschyQ0L5QHQ==} engines: {node: '>=10'} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 react: 18.3.1 use-composed-ref: 1.3.0(react@18.3.1) - use-latest: 1.2.1(@types/react@18.3.1)(react@18.3.1) + use-latest: 1.2.1(@types/react@18.3.3)(react@18.3.1) transitivePeerDependencies: - '@types/react' dev: false @@ -7035,7 +6880,7 @@ packages: react: '>=16.6.0' react-dom: '>=16.6.0' dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 dom-helpers: 5.2.1 loose-envify: 1.4.0 prop-types: 15.8.1 @@ -7099,8 +6944,8 @@ packages: decimal.js-light: 2.5.1 dev: false - /recharts@2.12.6(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-D+7j9WI+D0NHauah3fKHuNNcRK8bOypPW7os1DERinogGBGaHI7i6tQKJ0aUF3JXyBZ63dyfKIW2WTOPJDxJ8w==} + /recharts@2.12.7(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-hlLJMhPQfv4/3NBSAyq3gzGg4h2v69RJh6KU7b3pXYNNAELs9kEoXOjbkxdXpALqKBoVmVptGfLpxdaVYqjmXQ==} engines: {node: '>=14'} peerDependencies: react: ^16.0.0 || ^17.0.0 || ^18.0.0 @@ -7222,6 +7067,7 @@ packages: /rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true dependencies: glob: 7.2.3 @@ -7292,24 +7138,22 @@ packages: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true - /semver@7.6.0: - resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==} + /semver@7.6.2: + resolution: {integrity: sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==} engines: {node: '>=10'} hasBin: true - dependencies: - lru-cache: 6.0.0 - /seroval-plugins@1.0.5(seroval@1.0.5): - resolution: {integrity: sha512-8+pDC1vOedPXjKG7oz8o+iiHrtF2WswaMQJ7CKFpccvSYfrzmvKY9zOJWCg+881722wIHfwkdnRmiiDm9ym+zQ==} + /seroval-plugins@1.0.7(seroval@1.0.7): + resolution: {integrity: sha512-GO7TkWvodGp6buMEX9p7tNyIkbwlyuAWbI6G9Ec5bhcm7mQdu3JOK1IXbEUwb3FVzSc363GraG/wLW23NSavIw==} engines: {node: '>=10'} peerDependencies: seroval: ^1.0 dependencies: - seroval: 1.0.5 + seroval: 1.0.7 dev: false - /seroval@1.0.5: - resolution: {integrity: sha512-TM+Z11tHHvQVQKeNlOUonOWnsNM+2IBwZ4vwoi4j3zKzIpc5IDw8WPwCfcc8F17wy6cBcJGbZbFOR0UCuTZHQA==} + /seroval@1.0.7: + resolution: {integrity: sha512-n6ZMQX5q0Vn19Zq7CIKNIo7E75gPkGCFUEqDpa8jgwpYr/vScjqnQ6H09t1uIiZ0ZSK0ypEGvrYK2bhBGWsGdw==} engines: {node: '>=10'} dev: false @@ -7346,7 +7190,7 @@ packages: detect-libc: 2.0.3 node-addon-api: 6.1.0 prebuild-install: 7.1.2 - semver: 7.6.0 + semver: 7.6.2 simple-get: 4.0.1 tar-fs: 3.0.6 tunnel-agent: 0.6.0 @@ -7393,10 +7237,6 @@ packages: is-arrayish: 0.3.2 dev: false - /sisteransi@1.0.5: - resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} - dev: true - /slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} @@ -7405,8 +7245,8 @@ packages: resolution: {integrity: sha512-E0FkUgv9sG/gEBWkHr/2XkBluHb1fkrHywUgA6o6XolPDCJ4g1HaLmQufcBBhiF36ee40q+HpG/vCZu7fLpI3Q==} dependencies: csstype: 3.1.3 - seroval: 1.0.5 - seroval-plugins: 1.0.5(seroval@1.0.5) + seroval: 1.0.7 + seroval-plugins: 1.0.7(seroval@1.0.7) dev: false /solid-swr-store@0.10.7(solid-js@1.8.17)(swr-store@0.10.6): @@ -7454,6 +7294,7 @@ packages: /source-map@0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} + requiresBuild: true /source-map@0.7.4: resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} @@ -7473,12 +7314,12 @@ packages: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} dev: false - /sswr@2.0.0(svelte@4.2.15): + /sswr@2.0.0(svelte@4.2.18): resolution: {integrity: sha512-mV0kkeBHcjcb0M5NqKtKVg/uTIYNlIIniyDfSGrSfxpEdM9C365jK0z55pl9K0xAkNTJi2OAOVFQpgMPUk+V0w==} peerDependencies: svelte: ^4.0.0 dependencies: - svelte: 4.2.15 + svelte: 4.2.18 swrev: 4.0.0 dev: false @@ -7494,13 +7335,14 @@ packages: engines: {node: '>=10.0.0'} dev: false - /streamx@2.16.1: - resolution: {integrity: sha512-m9QYj6WygWyWa3H1YY69amr4nVgy61xfjys7xO7kviL5rfIEc2naf+ewFiOA+aEJD7y0JO3h2GoiUv4TDwEGzQ==} + /streamx@2.18.0: + resolution: {integrity: sha512-LLUC1TWdjVdn1weXGcSxyTR3T4+acB6tVGXT95y0nGbca4t4o/ng1wKAGTljm9VicuCVLvRlqFYXYy5GwgM7sQ==} dependencies: fast-fifo: 1.3.2 queue-tick: 1.0.1 + text-decoder: 1.1.0 optionalDependencies: - bare-events: 2.2.2 + bare-events: 2.3.1 dev: false /string-width@4.2.3: @@ -7633,7 +7475,7 @@ packages: dependencies: '@jridgewell/gen-mapping': 0.3.5 commander: 4.1.1 - glob: 10.3.12 + glob: 10.4.1 lines-and-columns: 1.2.4 mz: 2.7.0 pirates: 4.0.6 @@ -7656,8 +7498,8 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - /svelte@4.2.15: - resolution: {integrity: sha512-j9KJSccHgLeRERPlhMKrCXpk2TqL2m5Z+k+OBTQhZOhIdCCd3WfqV+ylPWeipEwq17P/ekiSFWwrVQv93i3bsg==} + /svelte@4.2.18: + resolution: {integrity: sha512-d0FdzYIiAePqRJEb90WlJDkjUEx42xhivxN8muUBmfZnP+tzUgz12DJ2hRJi8sIHCME7jeK1PTMgKPSfTd8JrA==} engines: {node: '>=16'} dependencies: '@ampproject/remapping': 2.3.0 @@ -7729,19 +7571,19 @@ packages: /tailwind-merge@2.3.0: resolution: {integrity: sha512-vkYrLpIP+lgR0tQCG6AP7zZXCTLc1Lnv/CCRT3BqJ9CZ3ui2++GPaGb1x/ILsINIMSYqqvrpqjUFsMNLlW99EA==} dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.7 dev: false - /tailwindcss-animate@1.0.7(tailwindcss@3.4.3): + /tailwindcss-animate@1.0.7(tailwindcss@3.4.4): resolution: {integrity: sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==} peerDependencies: tailwindcss: '>=3.0.0 || insiders' dependencies: - tailwindcss: 3.4.3 + tailwindcss: 3.4.4 dev: true - /tailwindcss@3.4.3: - resolution: {integrity: sha512-U7sxQk/n397Bmx4JHbJx/iSOOv5G+II3f1kpLpY2QeUv5DcPdcTsYLlusZfq1NthHS1c1cZoyFmmkex1rzke0A==} + /tailwindcss@3.4.4: + resolution: {integrity: sha512-ZoyXOdJjISB7/BcLTR6SEsLgKtDStYyYZVLsUtWChO4Ps20CBad7lfJKVDiejocV4ME1hLmyY0WJE3hSDcmQ2A==} engines: {node: '>=14.0.0'} hasBin: true dependencies: @@ -7753,18 +7595,18 @@ packages: fast-glob: 3.3.2 glob-parent: 6.0.2 is-glob: 4.0.3 - jiti: 1.21.0 + jiti: 1.21.3 lilconfig: 2.1.0 - micromatch: 4.0.5 + micromatch: 4.0.7 normalize-path: 3.0.0 object-hash: 3.0.0 - picocolors: 1.0.0 + picocolors: 1.0.1 postcss: 8.4.38 postcss-import: 15.1.0(postcss@8.4.38) postcss-js: 4.0.1(postcss@8.4.38) postcss-load-config: 4.0.2(postcss@8.4.38) postcss-nested: 6.0.1(postcss@8.4.38) - postcss-selector-parser: 6.0.16 + postcss-selector-parser: 6.1.0 resolve: 1.22.8 sucrase: 3.35.0 transitivePeerDependencies: @@ -7789,8 +7631,8 @@ packages: pump: 3.0.0 tar-stream: 3.1.7 optionalDependencies: - bare-fs: 2.3.0 - bare-path: 2.1.2 + bare-fs: 2.3.1 + bare-path: 2.1.3 dev: false /tar-stream@2.2.0: @@ -7809,7 +7651,13 @@ packages: dependencies: b4a: 1.6.6 fast-fifo: 1.3.2 - streamx: 2.16.1 + streamx: 2.18.0 + dev: false + + /text-decoder@1.1.0: + resolution: {integrity: sha512-TmLJNj6UgX8xcUZo4UDStGQtDiTzF7BzWlzn9g7UWrjkpHr5uJTK1ld16wZ3LXb2vb6jH8qU89dW5whuMdXYdw==} + dependencies: + b4a: 1.6.6 dev: false /text-table@0.2.0: @@ -7826,13 +7674,6 @@ packages: dependencies: any-promise: 1.3.0 - /timers-ext@0.1.7: - resolution: {integrity: sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==} - dependencies: - es5-ext: 0.10.64 - next-tick: 1.1.0 - dev: true - /tiny-invariant@1.3.3: resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} dev: false @@ -7843,16 +7684,16 @@ packages: '@popperjs/core': 2.11.8 dev: false - /tiptap-markdown@0.8.10(@tiptap/core@2.3.1): + /tiptap-markdown@0.8.10(@tiptap/core@2.4.0): resolution: {integrity: sha512-iDVkR2BjAqkTDtFX0h94yVvE2AihCXlF0Q7RIXSJPRSR5I0PA1TMuAg6FHFpmqTn4tPxJ0by0CK7PUMlnFLGEQ==} peerDependencies: '@tiptap/core': ^2.0.3 dependencies: - '@tiptap/core': 2.3.1(@tiptap/pm@2.3.1) + '@tiptap/core': 2.4.0(@tiptap/pm@2.4.0) '@types/markdown-it': 13.0.8 markdown-it: 14.1.0 markdown-it-task-lists: 2.1.1 - prosemirror-markdown: 1.12.0 + prosemirror-markdown: 1.13.0 dev: false /to-fast-properties@2.0.0: @@ -7915,8 +7756,8 @@ packages: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} dev: false - /tslib@2.6.2: - resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + /tslib@2.6.3: + resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==} dev: false /tsutils@3.21.0(typescript@4.9.5): @@ -7950,10 +7791,6 @@ packages: resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} engines: {node: '>=10'} - /type@2.7.2: - resolution: {integrity: sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==} - dev: true - /typed-array-buffer@1.0.2: resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} engines: {node: '>= 0.4'} @@ -8122,15 +7959,15 @@ packages: engines: {node: '>= 4.0.0'} dev: false - /update-browserslist-db@1.0.15(browserslist@4.23.0): - resolution: {integrity: sha512-K9HWH62x3/EalU1U6sjSZiylm9C8tgq2mSvshZpqc7QE69RaA2qjhkW2HlNA0tFpEbtyFz7HTqbSdN4MSwUodA==} + /update-browserslist-db@1.0.16(browserslist@4.23.0): + resolution: {integrity: sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' dependencies: browserslist: 4.23.0 escalade: 3.1.2 - picocolors: 1.0.0 + picocolors: 1.0.1 dev: true /uri-js@4.4.1: @@ -8157,7 +7994,7 @@ packages: dependencies: '@types/react': 18.0.28 react: 18.3.1 - tslib: 2.6.2 + tslib: 2.6.3 dev: false /use-composed-ref@1.3.0(react@18.3.1): @@ -8168,8 +8005,8 @@ packages: react: 18.3.1 dev: false - /use-debounce@10.0.0(react@18.3.1): - resolution: {integrity: sha512-XRjvlvCB46bah9IBXVnq/ACP2lxqXyZj0D9hj4K5OzNroMDpTEBg8Anuh1/UfRTRs7pLhQ+RiNxxwZu9+MVl1A==} + /use-debounce@10.0.1(react@18.3.1): + resolution: {integrity: sha512-0uUXjOfm44e6z4LZ/woZvkM8FwV1wiuoB6xnrrOmeAEjRDDzTLQNRFtYHvqUsJdrz1X37j0rVGIVp144GLHGKg==} engines: {node: '>= 16.0.0'} peerDependencies: react: '>=16.8.0' @@ -8186,7 +8023,7 @@ packages: react: 18.3.1 dev: false - /use-isomorphic-layout-effect@1.1.2(@types/react@18.3.1)(react@18.3.1): + /use-isomorphic-layout-effect@1.1.2(@types/react@18.3.3)(react@18.3.1): resolution: {integrity: sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==} peerDependencies: '@types/react': '*' @@ -8195,11 +8032,11 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 18.3.1 + '@types/react': 18.3.3 react: 18.3.1 dev: false - /use-latest@1.2.1(@types/react@18.3.1)(react@18.3.1): + /use-latest@1.2.1(@types/react@18.3.3)(react@18.3.1): resolution: {integrity: sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==} peerDependencies: '@types/react': '*' @@ -8208,9 +8045,9 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 18.3.1 + '@types/react': 18.3.3 react: 18.3.1 - use-isomorphic-layout-effect: 1.1.2(@types/react@18.3.1)(react@18.3.1) + use-isomorphic-layout-effect: 1.1.2(@types/react@18.3.3)(react@18.3.1) dev: false /use-sidecar@1.1.2(@types/react@18.0.28)(react@18.3.1): @@ -8226,7 +8063,7 @@ packages: '@types/react': 18.0.28 detect-node-es: 1.1.0 react: 18.3.1 - tslib: 2.6.2 + tslib: 2.6.3 dev: false /use-sync-external-store@1.2.2(react@18.3.1): @@ -8423,10 +8260,6 @@ packages: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} - /wordwrap@1.0.0: - resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} - dev: true - /wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} @@ -8491,9 +8324,10 @@ packages: /yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + dev: false - /yaml@2.4.2: - resolution: {integrity: sha512-B3VqDZ+JAg1nZpaEmWtTXUlBneoGx6CPM9b0TENK6aoSu5t73dItudwdgmi6tHlIZZId4dZ9skcAQ2UbcyAeVA==} + /yaml@2.4.3: + resolution: {integrity: sha512-sntgmxj8o7DE7g/Qi60cqpLBA3HG3STcDA0kO+WfB05jEKhZMbY7umNm2rBpQvsmZ16/lPXCJGW2672dgOUkrg==} engines: {node: '>= 14'} hasBin: true @@ -8505,10 +8339,6 @@ packages: resolution: {integrity: sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==} dev: false - /zod@3.23.6: - resolution: {integrity: sha512-RTHJlZhsRbuA8Hmp/iNL7jnfc4nZishjsanDAfEY1QpDQZCahUp3xDzl+zfweE9BklxMUcgBgS1b7Lvie/ZVwA==} - dev: true - /zwitch@2.0.4: resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} dev: false diff --git a/prisma-compatible/migrations/0000_concerned_virginia_dare.sql b/prisma-compatible/migrations/0000_concerned_virginia_dare.sql deleted file mode 100644 index 41c74f026..000000000 --- a/prisma-compatible/migrations/0000_concerned_virginia_dare.sql +++ /dev/null @@ -1,142 +0,0 @@ --- Current sql file was generated after introspecting the database --- If you want to run this migration please uncomment this code before executing migrations - -CREATE TABLE IF NOT EXISTS "_prisma_migrations" ( - "id" varchar(36) PRIMARY KEY NOT NULL, - "checksum" varchar(64) NOT NULL, - "finished_at" timestamp with time zone, - "migration_name" varchar(255) NOT NULL, - "logs" text, - "rolled_back_at" timestamp with time zone, - "started_at" timestamp with time zone DEFAULT now() NOT NULL, - "applied_steps_count" integer DEFAULT 0 NOT NULL -); ---> statement-breakpoint -CREATE TABLE IF NOT EXISTS "VerificationToken" ( - "identifier" text NOT NULL, - "token" text NOT NULL, - "expires" timestamp(3) NOT NULL -); ---> statement-breakpoint -CREATE TABLE IF NOT EXISTS "Example" ( - "id" serial PRIMARY KEY NOT NULL, - "name" text, - "description" text, - "domainCount" integer, - "url" text, - "image" text, - "imageBlurhash" text -); ---> statement-breakpoint -CREATE TABLE IF NOT EXISTS "User" ( - "id" text PRIMARY KEY NOT NULL, - "name" text, - "username" text, - "gh_username" text, - "email" text, - "emailVerified" timestamp(3), - "image" text, - "createdAt" timestamp(3) DEFAULT CURRENT_TIMESTAMP NOT NULL, - "updatedAt" timestamp(3) NOT NULL -); ---> statement-breakpoint -CREATE TABLE IF NOT EXISTS "Account" ( - "id" text PRIMARY KEY NOT NULL, - "userId" text NOT NULL, - "type" text NOT NULL, - "provider" text NOT NULL, - "providerAccountId" text NOT NULL, - "refresh_token" text, - "refresh_token_expires_in" integer, - "access_token" text, - "expires_at" integer, - "token_type" text, - "scope" text, - "id_token" text, - "session_state" text, - "oauth_token_secret" text, - "oauth_token" text -); ---> statement-breakpoint -CREATE TABLE IF NOT EXISTS "Session" ( - "id" text PRIMARY KEY NOT NULL, - "sessionToken" text NOT NULL, - "userId" text NOT NULL, - "expires" timestamp(3) NOT NULL -); ---> statement-breakpoint -CREATE TABLE IF NOT EXISTS "Site" ( - "id" text PRIMARY KEY NOT NULL, - "name" text, - "description" text, - "logo" text DEFAULT 'https://public.blob.vercel-storage.com/eEZHAoPTOBSYGBE3/JRajRyC-PhBHEinQkupt02jqfKacBVHLWJq7Iy.png', - "font" text DEFAULT 'font-cal' NOT NULL, - "image" text DEFAULT 'https://public.blob.vercel-storage.com/eEZHAoPTOBSYGBE3/hxfcV5V-eInX3jbVUhjAt1suB7zB88uGd1j20b.png', - "imageBlurhash" text DEFAULT 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAhCAYAAACbffiEAAAACXBIWXMAABYlAAAWJQFJUiTwAAABfUlEQVR4nN3XyZLDIAwE0Pz/v3q3r55JDlSBplsIEI49h76k4opexCK/juP4eXjOT149f2Tf9ySPgcjCc7kdpBTgDPKByKK2bTPFEdMO0RDrusJ0wLRBGCIuelmWJAjkgPGDSIQEMBDCfA2CEPM80+Qwl0JkNxBimiaYGOTUlXYI60YoehzHJDEm7kxjV3whOQTD3AaCuhGKHoYhyb+CBMwjIAFz647kTqyapdV4enGINuDJMSScPmijSwjCaHeLcT77C7EC0C1ugaCTi2HYfAZANgj6Z9A8xY5eiYghDMNQBJNCWhASot0jGsSCUiHWZcSGQjaWWCDaGMOWnsCcn2QhVkRuxqqNxMSdUSElCDbp1hbNOsa6Ugxh7xXauF4DyM1m5BLtCylBXgaxvPXVwEoOBjeIFVODtW74oj1yBQah3E8tyz3SkpolKS9Geo9YMD1QJR1Go4oJkgO1pgbNZq0AOUPChyjvh7vlXaQa+X1UXwKxgHokB2XPxbX+AnijwIU4ahazAAAAAElFTkSuQmCC', - "subdomain" text, - "customDomain" text, - "message404" text DEFAULT 'Blimey! You''ve found a page that doesn''t exist.', - "createdAt" timestamp(3) DEFAULT CURRENT_TIMESTAMP NOT NULL, - "updatedAt" timestamp(3) NOT NULL, - "userId" text -); ---> statement-breakpoint -CREATE TABLE IF NOT EXISTS "Post" ( - "id" text PRIMARY KEY NOT NULL, - "title" text, - "description" text, - "content" text, - "slug" text NOT NULL, - "image" text DEFAULT 'https://public.blob.vercel-storage.com/eEZHAoPTOBSYGBE3/hxfcV5V-eInX3jbVUhjAt1suB7zB88uGd1j20b.png', - "imageBlurhash" text DEFAULT 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAhCAYAAACbffiEAAAACXBIWXMAABYlAAAWJQFJUiTwAAABfUlEQVR4nN3XyZLDIAwE0Pz/v3q3r55JDlSBplsIEI49h76k4opexCK/juP4eXjOT149f2Tf9ySPgcjCc7kdpBTgDPKByKK2bTPFEdMO0RDrusJ0wLRBGCIuelmWJAjkgPGDSIQEMBDCfA2CEPM80+Qwl0JkNxBimiaYGOTUlXYI60YoehzHJDEm7kxjV3whOQTD3AaCuhGKHoYhyb+CBMwjIAFz647kTqyapdV4enGINuDJMSScPmijSwjCaHeLcT77C7EC0C1ugaCTi2HYfAZANgj6Z9A8xY5eiYghDMNQBJNCWhASot0jGsSCUiHWZcSGQjaWWCDaGMOWnsCcn2QhVkRuxqqNxMSdUSElCDbp1hbNOsa6Ugxh7xXauF4DyM1m5BLtCylBXgaxvPXVwEoOBjeIFVODtW74oj1yBQah3E8tyz3SkpolKS9Geo9YMD1QJR1Go4oJkgO1pgbNZq0AOUPChyjvh7vlXaQa+X1UXwKxgHokB2XPxbX+AnijwIU4ahazAAAAAElFTkSuQmCC', - "createdAt" timestamp(3) DEFAULT CURRENT_TIMESTAMP NOT NULL, - "updatedAt" timestamp(3) NOT NULL, - "published" boolean DEFAULT false NOT NULL, - "siteId" text, - "userId" text -); ---> statement-breakpoint -DO $$ BEGIN - ALTER TABLE "Account" ADD CONSTRAINT "Account_userId_fkey" FOREIGN KEY ("userId") REFERENCES "public"."User"("id") ON DELETE cascade ON UPDATE cascade; -EXCEPTION - WHEN duplicate_object THEN null; -END $$; ---> statement-breakpoint -DO $$ BEGIN - ALTER TABLE "Session" ADD CONSTRAINT "Session_userId_fkey" FOREIGN KEY ("userId") REFERENCES "public"."User"("id") ON DELETE cascade ON UPDATE cascade; -EXCEPTION - WHEN duplicate_object THEN null; -END $$; ---> statement-breakpoint -DO $$ BEGIN - ALTER TABLE "Site" ADD CONSTRAINT "Site_userId_fkey" FOREIGN KEY ("userId") REFERENCES "public"."User"("id") ON DELETE cascade ON UPDATE cascade; -EXCEPTION - WHEN duplicate_object THEN null; -END $$; ---> statement-breakpoint -DO $$ BEGIN - ALTER TABLE "Post" ADD CONSTRAINT "Post_siteId_fkey" FOREIGN KEY ("siteId") REFERENCES "public"."Site"("id") ON DELETE cascade ON UPDATE cascade; -EXCEPTION - WHEN duplicate_object THEN null; -END $$; ---> statement-breakpoint -DO $$ BEGIN - ALTER TABLE "Post" ADD CONSTRAINT "Post_userId_fkey" FOREIGN KEY ("userId") REFERENCES "public"."User"("id") ON DELETE cascade ON UPDATE cascade; -EXCEPTION - WHEN duplicate_object THEN null; -END $$; ---> statement-breakpoint -CREATE UNIQUE INDEX IF NOT EXISTS "VerificationToken_token_key" ON "VerificationToken" ("token");--> statement-breakpoint -CREATE UNIQUE INDEX IF NOT EXISTS "VerificationToken_identifier_token_key" ON "VerificationToken" ("identifier","token");--> statement-breakpoint -CREATE UNIQUE INDEX IF NOT EXISTS "User_email_key" ON "User" ("email");--> statement-breakpoint -CREATE INDEX IF NOT EXISTS "Account_userId_idx" ON "Account" ("userId");--> statement-breakpoint -CREATE UNIQUE INDEX IF NOT EXISTS "Account_provider_providerAccountId_key" ON "Account" ("provider","providerAccountId");--> statement-breakpoint -CREATE UNIQUE INDEX IF NOT EXISTS "Session_sessionToken_key" ON "Session" ("sessionToken");--> statement-breakpoint -CREATE INDEX IF NOT EXISTS "Session_userId_idx" ON "Session" ("userId");--> statement-breakpoint -CREATE UNIQUE INDEX IF NOT EXISTS "Site_subdomain_key" ON "Site" ("subdomain");--> statement-breakpoint -CREATE UNIQUE INDEX IF NOT EXISTS "Site_customDomain_key" ON "Site" ("customDomain");--> statement-breakpoint -CREATE INDEX IF NOT EXISTS "Site_userId_idx" ON "Site" ("userId");--> statement-breakpoint -CREATE INDEX IF NOT EXISTS "Post_siteId_idx" ON "Post" ("siteId");--> statement-breakpoint -CREATE INDEX IF NOT EXISTS "Post_userId_idx" ON "Post" ("userId");--> statement-breakpoint -CREATE UNIQUE INDEX IF NOT EXISTS "Post_slug_siteId_key" ON "Post" ("slug","siteId"); - diff --git a/prisma-compatible/migrations/meta/0000_snapshot.json b/prisma-compatible/migrations/meta/0000_snapshot.json deleted file mode 100644 index baaefaf4b..000000000 --- a/prisma-compatible/migrations/meta/0000_snapshot.json +++ /dev/null @@ -1,662 +0,0 @@ -{ - "id": "00000000-0000-0000-0000-000000000000", - "prevId": "", - "version": "6", - "dialect": "postgresql", - "tables": { - "public._prisma_migrations": { - "name": "_prisma_migrations", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "varchar(36)", - "primaryKey": true, - "notNull": true - }, - "checksum": { - "name": "checksum", - "type": "varchar(64)", - "primaryKey": false, - "notNull": true - }, - "finished_at": { - "name": "finished_at", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "migration_name": { - "name": "migration_name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "logs": { - "name": "logs", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "rolled_back_at": { - "name": "rolled_back_at", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "started_at": { - "name": "started_at", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "applied_steps_count": { - "name": "applied_steps_count", - "type": "integer", - "primaryKey": false, - "notNull": true, - "default": 0 - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "public.VerificationToken": { - "name": "VerificationToken", - "schema": "", - "columns": { - "identifier": { - "name": "identifier", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "token": { - "name": "token", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "expires": { - "name": "expires", - "type": "timestamp(3)", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "VerificationToken_token_key": { - "name": "VerificationToken_token_key", - "columns": ["token"], - "isUnique": true - }, - "VerificationToken_identifier_token_key": { - "name": "VerificationToken_identifier_token_key", - "columns": ["identifier", "token"], - "isUnique": true - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "public.Example": { - "name": "Example", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "serial", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "domainCount": { - "name": "domainCount", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "url": { - "name": "url", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "image": { - "name": "image", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "imageBlurhash": { - "name": "imageBlurhash", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "public.User": { - "name": "User", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "username": { - "name": "username", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gh_username": { - "name": "gh_username", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "email": { - "name": "email", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "emailVerified": { - "name": "emailVerified", - "type": "timestamp(3)", - "primaryKey": false, - "notNull": false - }, - "image": { - "name": "image", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "createdAt": { - "name": "createdAt", - "type": "timestamp(3)", - "primaryKey": false, - "notNull": true, - "default": "CURRENT_TIMESTAMP" - }, - "updatedAt": { - "name": "updatedAt", - "type": "timestamp(3)", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "User_email_key": { - "name": "User_email_key", - "columns": ["email"], - "isUnique": true - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "public.Account": { - "name": "Account", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "userId": { - "name": "userId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "type": { - "name": "type", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "provider": { - "name": "provider", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "providerAccountId": { - "name": "providerAccountId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "refresh_token": { - "name": "refresh_token", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "refresh_token_expires_in": { - "name": "refresh_token_expires_in", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "access_token": { - "name": "access_token", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "expires_at": { - "name": "expires_at", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "token_type": { - "name": "token_type", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "scope": { - "name": "scope", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "id_token": { - "name": "id_token", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "session_state": { - "name": "session_state", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "oauth_token_secret": { - "name": "oauth_token_secret", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "oauth_token": { - "name": "oauth_token", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": { - "Account_userId_idx": { - "name": "Account_userId_idx", - "columns": ["userId"], - "isUnique": false - }, - "Account_provider_providerAccountId_key": { - "name": "Account_provider_providerAccountId_key", - "columns": ["provider", "providerAccountId"], - "isUnique": true - } - }, - "foreignKeys": { - "Account_userId_fkey": { - "name": "Account_userId_fkey", - "tableFrom": "Account", - "tableTo": "User", - "schemaTo": "public", - "columnsFrom": ["userId"], - "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "cascade" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "public.Session": { - "name": "Session", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "sessionToken": { - "name": "sessionToken", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "userId": { - "name": "userId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "expires": { - "name": "expires", - "type": "timestamp(3)", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "Session_sessionToken_key": { - "name": "Session_sessionToken_key", - "columns": ["sessionToken"], - "isUnique": true - }, - "Session_userId_idx": { - "name": "Session_userId_idx", - "columns": ["userId"], - "isUnique": false - } - }, - "foreignKeys": { - "Session_userId_fkey": { - "name": "Session_userId_fkey", - "tableFrom": "Session", - "tableTo": "User", - "schemaTo": "public", - "columnsFrom": ["userId"], - "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "cascade" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "public.Site": { - "name": "Site", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "logo": { - "name": "logo", - "type": "text", - "primaryKey": false, - "notNull": false, - "default": "'https://public.blob.vercel-storage.com/eEZHAoPTOBSYGBE3/JRajRyC-PhBHEinQkupt02jqfKacBVHLWJq7Iy.png'" - }, - "font": { - "name": "font", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "'font-cal'" - }, - "image": { - "name": "image", - "type": "text", - "primaryKey": false, - "notNull": false, - "default": "'https://public.blob.vercel-storage.com/eEZHAoPTOBSYGBE3/hxfcV5V-eInX3jbVUhjAt1suB7zB88uGd1j20b.png'" - }, - "imageBlurhash": { - "name": "imageBlurhash", - "type": "text", - "primaryKey": false, - "notNull": false, - "default": "'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAhCAYAAACbffiEAAAACXBIWXMAABYlAAAWJQFJUiTwAAABfUlEQVR4nN3XyZLDIAwE0Pz/v3q3r55JDlSBplsIEI49h76k4opexCK/juP4eXjOT149f2Tf9ySPgcjCc7kdpBTgDPKByKK2bTPFEdMO0RDrusJ0wLRBGCIuelmWJAjkgPGDSIQEMBDCfA2CEPM80+Qwl0JkNxBimiaYGOTUlXYI60YoehzHJDEm7kxjV3whOQTD3AaCuhGKHoYhyb+CBMwjIAFz647kTqyapdV4enGINuDJMSScPmijSwjCaHeLcT77C7EC0C1ugaCTi2HYfAZANgj6Z9A8xY5eiYghDMNQBJNCWhASot0jGsSCUiHWZcSGQjaWWCDaGMOWnsCcn2QhVkRuxqqNxMSdUSElCDbp1hbNOsa6Ugxh7xXauF4DyM1m5BLtCylBXgaxvPXVwEoOBjeIFVODtW74oj1yBQah3E8tyz3SkpolKS9Geo9YMD1QJR1Go4oJkgO1pgbNZq0AOUPChyjvh7vlXaQa+X1UXwKxgHokB2XPxbX+AnijwIU4ahazAAAAAElFTkSuQmCC'" - }, - "subdomain": { - "name": "subdomain", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "customDomain": { - "name": "customDomain", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "message404": { - "name": "message404", - "type": "text", - "primaryKey": false, - "notNull": false, - "default": "'Blimey! You''ve found a page that doesn''t exist.'" - }, - "createdAt": { - "name": "createdAt", - "type": "timestamp(3)", - "primaryKey": false, - "notNull": true, - "default": "CURRENT_TIMESTAMP" - }, - "updatedAt": { - "name": "updatedAt", - "type": "timestamp(3)", - "primaryKey": false, - "notNull": true - }, - "userId": { - "name": "userId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": { - "Site_subdomain_key": { - "name": "Site_subdomain_key", - "columns": ["subdomain"], - "isUnique": true - }, - "Site_customDomain_key": { - "name": "Site_customDomain_key", - "columns": ["customDomain"], - "isUnique": true - }, - "Site_userId_idx": { - "name": "Site_userId_idx", - "columns": ["userId"], - "isUnique": false - } - }, - "foreignKeys": { - "Site_userId_fkey": { - "name": "Site_userId_fkey", - "tableFrom": "Site", - "tableTo": "User", - "schemaTo": "public", - "columnsFrom": ["userId"], - "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "cascade" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "public.Post": { - "name": "Post", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "title": { - "name": "title", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "content": { - "name": "content", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "slug": { - "name": "slug", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "image": { - "name": "image", - "type": "text", - "primaryKey": false, - "notNull": false, - "default": "'https://public.blob.vercel-storage.com/eEZHAoPTOBSYGBE3/hxfcV5V-eInX3jbVUhjAt1suB7zB88uGd1j20b.png'" - }, - "imageBlurhash": { - "name": "imageBlurhash", - "type": "text", - "primaryKey": false, - "notNull": false, - "default": "'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAhCAYAAACbffiEAAAACXBIWXMAABYlAAAWJQFJUiTwAAABfUlEQVR4nN3XyZLDIAwE0Pz/v3q3r55JDlSBplsIEI49h76k4opexCK/juP4eXjOT149f2Tf9ySPgcjCc7kdpBTgDPKByKK2bTPFEdMO0RDrusJ0wLRBGCIuelmWJAjkgPGDSIQEMBDCfA2CEPM80+Qwl0JkNxBimiaYGOTUlXYI60YoehzHJDEm7kxjV3whOQTD3AaCuhGKHoYhyb+CBMwjIAFz647kTqyapdV4enGINuDJMSScPmijSwjCaHeLcT77C7EC0C1ugaCTi2HYfAZANgj6Z9A8xY5eiYghDMNQBJNCWhASot0jGsSCUiHWZcSGQjaWWCDaGMOWnsCcn2QhVkRuxqqNxMSdUSElCDbp1hbNOsa6Ugxh7xXauF4DyM1m5BLtCylBXgaxvPXVwEoOBjeIFVODtW74oj1yBQah3E8tyz3SkpolKS9Geo9YMD1QJR1Go4oJkgO1pgbNZq0AOUPChyjvh7vlXaQa+X1UXwKxgHokB2XPxbX+AnijwIU4ahazAAAAAElFTkSuQmCC'" - }, - "createdAt": { - "name": "createdAt", - "type": "timestamp(3)", - "primaryKey": false, - "notNull": true, - "default": "CURRENT_TIMESTAMP" - }, - "updatedAt": { - "name": "updatedAt", - "type": "timestamp(3)", - "primaryKey": false, - "notNull": true - }, - "published": { - "name": "published", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "siteId": { - "name": "siteId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "userId": { - "name": "userId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": { - "Post_siteId_idx": { - "name": "Post_siteId_idx", - "columns": ["siteId"], - "isUnique": false - }, - "Post_userId_idx": { - "name": "Post_userId_idx", - "columns": ["userId"], - "isUnique": false - }, - "Post_slug_siteId_key": { - "name": "Post_slug_siteId_key", - "columns": ["slug", "siteId"], - "isUnique": true - } - }, - "foreignKeys": { - "Post_siteId_fkey": { - "name": "Post_siteId_fkey", - "tableFrom": "Post", - "tableTo": "Site", - "schemaTo": "public", - "columnsFrom": ["siteId"], - "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "cascade" - }, - "Post_userId_fkey": { - "name": "Post_userId_fkey", - "tableFrom": "Post", - "tableTo": "User", - "schemaTo": "public", - "columnsFrom": ["userId"], - "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "cascade" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - } - }, - "enums": {}, - "schemas": {}, - "_meta": { - "schemas": {}, - "tables": {}, - "columns": {} - }, - "internal": { - "tables": {} - } -} diff --git a/prisma-compatible/migrations/meta/_journal.json b/prisma-compatible/migrations/meta/_journal.json deleted file mode 100644 index 386ca60eb..000000000 --- a/prisma-compatible/migrations/meta/_journal.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "version": "6", - "dialect": "postgresql", - "entries": [ - { - "idx": 0, - "version": "6", - "when": 1715782844357, - "tag": "0000_concerned_virginia_dare", - "breakpoints": true - } - ] -} From 879e0fb2fbd3b65bee7f12d6c4a77ffdcd2cab7a Mon Sep 17 00:00:00 2001 From: realmikesolo Date: Fri, 7 Jun 2024 20:22:48 +0200 Subject: [PATCH 14/14] feat(drizzle): fix table names --- lib/schema.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/schema.ts b/lib/schema.ts index 0faa3d998..89125b0e0 100644 --- a/lib/schema.ts +++ b/lib/schema.ts @@ -12,7 +12,7 @@ import { uniqueIndex, } from "drizzle-orm/pg-core"; -export const users = pgTable("user", { +export const users = pgTable("users", { id: text("id") .primaryKey() .$defaultFn(() => createId()), @@ -59,7 +59,7 @@ export const verificationTokens = pgTable( }, ); -export const examples = pgTable("example", { +export const examples = pgTable("examples", { id: serial("id").primaryKey(), name: text("name"), description: text("description"), @@ -100,7 +100,7 @@ export const accounts = pgTable( ); export const sites = pgTable( - "site", + "sites", { id: text("id") .primaryKey() @@ -139,7 +139,7 @@ export const sites = pgTable( ); export const posts = pgTable( - "post", + "posts", { id: text("id") .primaryKey()