diff --git a/.github/workflows/delete-deployment.yml b/.github/workflows/delete-deployment.yml deleted file mode 100644 index d4a80552..00000000 --- a/.github/workflows/delete-deployment.yml +++ /dev/null @@ -1,21 +0,0 @@ -name: Delete Vercel Deployment on PR Close - -on: - pull_request: - types: - - closed - -env: - VERCEL_TOKEN: ${{ secrets.VERCEL_TOKEN }} - VERCEL_PROJECT_ID: ${{ secrets.VERCEL_PROJECT_ID }} - -jobs: - delete-deployment: - if: github.event.pull_request.merged == true || github.event.pull_request.merged == false - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - - name: Call the delete script - run: | - bash ./scripts/delete-preview-deployment.sh ${{ github.event.number }} diff --git a/.github/workflows/manage-neon-preview-branches.yml b/.github/workflows/manage-neon-preview-branches.yml deleted file mode 100644 index 97cc7176..00000000 --- a/.github/workflows/manage-neon-preview-branches.yml +++ /dev/null @@ -1,36 +0,0 @@ -name: Manage Neon Preview Branches - -on: - pull_request: - types: - - opened - - reopened - - synchronize - - closed - -concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - -jobs: - setup: - name: Setup - outputs: - branch: ${{ steps.branch_name.outputs.current_branch }} - runs-on: ubuntu-latest - steps: - - name: Get branch name - id: branch_name - uses: tj-actions/branch-names@v8 - - delete_neon_branch: - name: Delete Neon Branch - needs: setup - if: github.event_name == 'pull_request' && github.event.action == 'closed' - runs-on: ubuntu-latest - steps: - - name: Delete Neon Branch - uses: neondatabase/delete-branch-action@v3 - with: - project_id: ${{ vars.NEON_PROJECT_ID }} - branch: preview/${{ needs.setup.outputs.branch }} - api_key: ${{ secrets.NEON_API_KEY }} diff --git a/app/(cms)/cms.css b/app/(cms)/cms.css deleted file mode 100644 index b01e4548..00000000 --- a/app/(cms)/cms.css +++ /dev/null @@ -1,143 +0,0 @@ -@import 'tailwindcss'; - -@config "./../../tailwind.config.js"; - -/* - The default border color has changed to `currentColor` in Tailwind CSS v4, - so we've added these compatibility styles to make sure everything still - looks the same as it did with Tailwind CSS v3. - - If we ever want to remove these styles, we need to add an explicit border - color utility to any element that depends on these defaults. -*/ -@layer base { - *, - ::after, - ::before, - ::backdrop, - ::file-selector-button { - border-color: var(--color-gray-200, currentColor); - } -} - -form { - margin-block-end: 0; -} - -/* - * Remove the X from search fields which usually allows you to clear the field. This is a non-standard feature and - * unsupported by Firefox. - */ -input[type="search"]::-webkit-search-cancel-button { - -webkit-appearance: none; -} - -h1 { - @apply text-3xl w-full border-b-2 border-svw-blue-default pb-1 mb-2 -} - -h2 { - @apply text-2xl pt-4 -} - -h3 { - @apply text-xl pt-3 -} - -h4 { - @apply text-lg pt-2 -} - -h5 { - @apply font-medium -} - -h6 { - @apply underline -} - -p { - @apply font-light -} - -p > a, td > a { - @apply font-normal underline text-svw-blue-darker -} - -p > ul { - @apply list-disc -} - -p > ul > li { - @apply ml-6 -} - -@container (max-width: 600px) { - table td:not(:nth-child(1)):not(:nth-child(2)):not(:last-child), - table th:not(:nth-child(1)):not(:nth-child(2)):not(:last-child) { - display: none; - } -} - -@container (max-width: 900px) { - table td:not(:nth-child(1)):not(:nth-child(2)):not(:nth-child(3)):not(:last-child), - table th:not(:nth-child(1)):not(:nth-child(2)):not(:nth-child(3)):not(:last-child) { - display: none; - } -} - -table { - @apply w-full font-light overflow-scroll -} - -th { - @apply border-0 p-2 first:rounded-tl-md last:rounded-tr-md text-left text-sm uppercase -} - -tr { - @apply even:bg-gray-50 first:border-t border-0 border-gray-100 -} - -thead > tr { - @apply font-medium -} - -td { - @apply border-0 border-b border-gray-100 p-2 font-normal -} - -.card-base { - @apply bg-white rounded-lg border border-neutral-200 flex flex-col h-full -} - -.card-header { - @apply w-full px-4 pt-4 flex justify-between -} - -.card-title { - @apply text-lg font-medium text-gray-700 -} - -.card-toolbar { - @apply flex justify-end gap-4 items-center -} - -.card-content { - @apply w-full p-4 flex flex-col gap-4 @container -} - -.news-title-shadow { - box-shadow: 10px 0 0 rgba(255, 255, 255, 0.75), -10px 0 0 rgba(255, 255, 255, 0.75); - box-decoration-break: clone; - -webkit-box-decoration-break: clone; - -ms-box-decoration-break: clone; - -o-box-decoration-break: clone; -} - -iframe nav { - display: none; -} - -.rbc-header { - @apply text-2xl -} diff --git a/app/(cms)/cms/api/articles/route.ts b/app/(cms)/cms/api/articles/route.ts deleted file mode 100644 index 1b5de9fb..00000000 --- a/app/(cms)/cms/api/articles/route.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { getArticles } from "#/content/article"; -import { NextResponse } from "next/server"; -import path from "path"; -import Auth0 from "#/lib/auth0"; - -export async function GET() { - try { - const token = await Auth0.getAccessToken(); - // Switch to external API. For now, we load the local files. - const articleDirectory = path.resolve("./public", "content", "article"); - const payload = getArticles(1, 10000, articleDirectory); - return NextResponse.json(payload); - } catch (err) { - return NextResponse.json({ error: "not authorized" }, { status: 401 }); - } -} diff --git a/app/(cms)/cms/api/people/add/route.ts b/app/(cms)/cms/api/people/add/route.ts deleted file mode 100644 index 84b3697f..00000000 --- a/app/(cms)/cms/api/people/add/route.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { NextRequest, NextResponse } from "next/server"; -import { drizzle } from "#/lib/db/drizzle"; -import { people } from "#/lib/db/schema"; -import { revalidatePath } from "next/cache"; - -export async function POST(request: NextRequest) { - const newPerson = await drizzle - .insert(people) - .values({ id: crypto.randomUUID(), firstName: "", lastName: "", phone: "", email: "", image: "" }) - .returning(); - revalidatePath("/cms/people"); - return NextResponse.json({ type: "success", person: { ...newPerson[0] } }); -} diff --git a/app/(cms)/cms/api/people/roles/route.ts b/app/(cms)/cms/api/people/roles/route.ts deleted file mode 100644 index f58a81be..00000000 --- a/app/(cms)/cms/api/people/roles/route.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { NextRequest, NextResponse } from "next/server"; -import { drizzle } from "#/lib/db/drizzle"; - -export async function GET(request: NextRequest) { - const roles = await drizzle.query.roles.findMany(); - return NextResponse.json({ roles }); -} diff --git a/app/(cms)/cms/api/people/route.ts b/app/(cms)/cms/api/people/route.ts deleted file mode 100644 index 214124ca..00000000 --- a/app/(cms)/cms/api/people/route.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { NextRequest, NextResponse } from "next/server"; -import { drizzle } from "#/lib/db/drizzle"; -import { PersonWithRoles } from "#/lib/types/people"; - -export async function GET(request: NextRequest) { - const people = await drizzle.query.people.findMany({ - with: { - peopleToRoles: { - with: { - roles: true, - }, - }, - }, - }); - return NextResponse.json<{ people: PersonWithRoles[] }>({ people }); -} diff --git a/app/(cms)/cms/api/route.ts b/app/(cms)/cms/api/route.ts deleted file mode 100644 index ea22cb6c..00000000 --- a/app/(cms)/cms/api/route.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { NextResponse } from "next/server"; -import Auth0 from "#/lib/auth0"; - -export async function GET() { - try { - const token = await Auth0.getAccessToken(); - return NextResponse.json("internal API"); - } catch (err) { - return NextResponse.json({ error: "not authorized" }, { status: 401 }); - } -} diff --git a/app/(cms)/cms/api/tags/route.ts b/app/(cms)/cms/api/tags/route.ts deleted file mode 100644 index 85f40369..00000000 --- a/app/(cms)/cms/api/tags/route.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { TagsResponse } from "#/content/tags"; -import fs from "fs"; -import { NextResponse } from "next/server"; -import path from "path"; -import Auth0 from "#/lib/auth0"; - -export async function GET() { - try { - const token = await Auth0.getAccessToken(); - // Switch to external API. For now, we load the local files. - const articleDirectory = path.resolve("./public", "tags.txt"); - const fileContents = fs.readFileSync(articleDirectory, "utf8"); - const tags = fileContents - .split("\n") - .map((tag) => tag.trim()) - .filter((tag) => tag.length > 0); - const body: TagsResponse = { tags, count: tags.length }; - return NextResponse.json(body); - } catch (err) { - return NextResponse.json({ error: "not authorized" }, { status: 401 }); - } -} diff --git a/app/(cms)/cms/articles/page.tsx b/app/(cms)/cms/articles/page.tsx deleted file mode 100644 index 737f39f8..00000000 --- a/app/(cms)/cms/articles/page.tsx +++ /dev/null @@ -1,54 +0,0 @@ -"use client"; - -import { Article, PaginatedArticles } from "#/content/article"; -import fetch from "node-fetch"; -import { useEffect, useMemo, useState } from "react"; -import { Card, CardTitle } from "#/components/cms/card/Card"; -import { Table } from "#/components/cms/table/Table"; -import { createColumnHelper, getCoreRowModel, TableOptions } from "@tanstack/table-core"; - -const COLUMN_HELPER = createColumnHelper
(); - -export default function CMSArticles() { - const [loading, setLoading] = useState(true); - const [articlesResponse, setArticlesResponse] = useState(); - useEffect(() => { - fetch("/cms/api/articles") - .then((res) => res.json()) - .then((data) => { - setArticlesResponse(data); - setLoading(false); - }); - }, []); - - const articles = articlesResponse?.articles; - - const options = useMemo((): TableOptions
=> { - return { - data: articles ?? [], - getRowId: (article) => article.slug, - columns: [ - COLUMN_HELPER.accessor("title", { - header: "Titel", - id: "title", - }), - COLUMN_HELPER.accessor("date", { - header: "Datum", - id: "date", - }), - COLUMN_HELPER.accessor("tags", { - header: "Tags", - id: "tags", - }), - ], - getCoreRowModel: getCoreRowModel(), - }; - }, [articles]); - - return ( - - Artikel - - - ); -} diff --git a/app/(cms)/cms/club/page.tsx b/app/(cms)/cms/club/page.tsx deleted file mode 100644 index ba743d14..00000000 --- a/app/(cms)/cms/club/page.tsx +++ /dev/null @@ -1,9 +0,0 @@ -import { Card, CardTitle } from "#/components/cms/card/Card"; - -export default function Club() { - return ( - - Club - - ); -} diff --git a/app/(cms)/cms/error.tsx b/app/(cms)/cms/error.tsx deleted file mode 100644 index 745daba9..00000000 --- a/app/(cms)/cms/error.tsx +++ /dev/null @@ -1,14 +0,0 @@ -"use client"; - -import { Alert, AlertTitle } from "@mui/material"; - -export default function Error({ error }: { error: Error & { digest?: string }; reset: () => void }) { - return ( -
- - Es ist ein Fehler aufgetreten - {error.message} - -
- ); -} diff --git a/app/(cms)/cms/events/page.tsx b/app/(cms)/cms/events/page.tsx deleted file mode 100644 index 3f962e5e..00000000 --- a/app/(cms)/cms/events/page.tsx +++ /dev/null @@ -1,12 +0,0 @@ -"use client"; - -import { Card, CardTitle } from "#/components/cms/card/Card"; -import type { JSX } from "react"; - -export default function CMSEvents(): JSX.Element { - return ( - - Events - - ); -} diff --git a/app/(cms)/cms/layout.tsx b/app/(cms)/cms/layout.tsx deleted file mode 100644 index 2ed22796..00000000 --- a/app/(cms)/cms/layout.tsx +++ /dev/null @@ -1,43 +0,0 @@ -"use client"; - -import "@fontsource/roboto/300.css"; -import "@fontsource/roboto/400.css"; -import "@fontsource/roboto/500.css"; -import "@fontsource/roboto/700.css"; -import { PropsWithChildren, useState } from "react"; -import { withPageAuthRequired } from "@auth0/nextjs-auth0/client"; -import { Navigation } from "#/components/cms/navigation/Navigation"; -import { Header } from "#/components/cms/header/Header"; -import { createTheme, ThemeProvider } from "@mui/material"; - -const theme = createTheme({ - palette: { - primary: { - light: "#3999d9", - main: "#057DB1", - dark: "#015d98", - contrastText: "#fff", - }, - }, -}); - -export default withPageAuthRequired(function CMSLayout({ children }: PropsWithChildren) { - const [navigationOpen, setNavigationOpen] = useState(false); - return ( - -
- setNavigationOpen(false)} /> -
setNavigationOpen(false) : () => {}} - > -
setNavigationOpen(true)} /> -
{children}
-
-
-
- - ); -}); diff --git a/app/(cms)/cms/loading.tsx b/app/(cms)/cms/loading.tsx deleted file mode 100644 index 470b3dcb..00000000 --- a/app/(cms)/cms/loading.tsx +++ /dev/null @@ -1,9 +0,0 @@ -import { LinearProgress } from "@mui/material"; - -export default function Loading() { - return ( -
- -
- ); -} diff --git a/app/(cms)/cms/page.tsx b/app/(cms)/cms/page.tsx deleted file mode 100644 index b7d49ca4..00000000 --- a/app/(cms)/cms/page.tsx +++ /dev/null @@ -1,5 +0,0 @@ -"use client"; - -export default function CMSIndexPage() { - return

Dashboard

; -} diff --git a/app/(cms)/cms/people/PeopleList.tsx b/app/(cms)/cms/people/PeopleList.tsx deleted file mode 100644 index 46074cd2..00000000 --- a/app/(cms)/cms/people/PeopleList.tsx +++ /dev/null @@ -1,169 +0,0 @@ -"use client"; - -import * as React from "react"; -import { useCallback, useEffect, useMemo, useRef, useState } from "react"; -import { PersonWithRoles } from "#/lib/types/people"; -import { CellContext, createColumnHelper, getCoreRowModel, TableOptions } from "@tanstack/table-core"; -import { Table } from "#/components/cms/table/Table"; -import { PhoneCell } from "#/components/cms/table/cell/Phone"; -import { MailCell } from "#/components/cms/table/cell/Mail"; -import { RolesCell } from "#/components/cms/table/cell/Roles"; -import { FaRegEdit } from "react-icons/fa"; -import { CardToolbar } from "#/components/cms/card/Card"; -import { debounce } from "lodash"; -import { LuSearch } from "react-icons/lu"; -import { MdOutlineDelete, MdOutlinePersonAdd } from "react-icons/md"; -import { Button, IconButton } from "@mui/material"; -import { TextField } from "#/components/cms/input/TextField"; -import { deletePerson } from "#/app/(cms)/cms/people/actions"; -import { useRouter } from "next/navigation"; -import { useHotkeys } from "react-hotkeys-hook"; - -const COLUMN_HELPER = createColumnHelper(); - -const COLUMN_FIRSTNAME = COLUMN_HELPER.accessor("firstName", { - header: "Vorname", - id: "firstName", -}); - -const COLUMN_LASTNAME = COLUMN_HELPER.accessor("lastName", { - header: "Nachname", - id: "lastName", -}); - -const COLUMN_EMAIL = COLUMN_HELPER.accessor("email", { - header: "E-Mail", - id: "email", - cell: MailCell, -}); - -const COLUMN_PHONE = COLUMN_HELPER.accessor("phone", { - header: "Phone", - id: "phone", - cell: PhoneCell, -}); - -const COLUMN_ROLES = COLUMN_HELPER.accessor((person) => person.peopleToRoles.map((p) => p.roles.name), { - header: "Rollen", - id: "roles", - cell: RolesCell, -}); - -export default function PeopleList() { - const [people, setPeople] = useState(undefined); - - useEffect(() => { - async function fetchAllPeople() { - const response = await fetch("/cms/api/people"); - const data = await response.json(); - setPeople(data.people); - } - fetchAllPeople(); - }, []); - - const router = useRouter(); - - const [searchTerm, setSearchTerm] = useState(); - const filteredPeople = useMemo(() => { - if (people === undefined) return []; - - if (!searchTerm || searchTerm.trim() === "") return people; - - return people.filter((person) => { - const firstName = person.firstName?.toLowerCase(); - const lastName = person.lastName?.toLowerCase(); - - if (firstName?.includes(searchTerm)) return true; - if (lastName?.includes(searchTerm)) return true; - if (`${firstName} ${lastName}`.includes(searchTerm)) return true; - if (person.email?.toLowerCase().includes(searchTerm)) return true; - return person.peopleToRoles.some((p) => p.roles.name?.toLowerCase().includes(searchTerm) ?? false); - }); - }, [searchTerm, people]); - - const options: TableOptions = useMemo( - () => ({ - data: filteredPeople, - columns: [ - COLUMN_LASTNAME, - COLUMN_FIRSTNAME, - COLUMN_EMAIL, - COLUMN_PHONE, - COLUMN_ROLES, - COLUMN_HELPER.display({ - header: "", - id: "actions", - cell: (props) => ( - setPeople((prev) => prev?.filter((person) => person.id !== personId))} - /> - ), - }), - ], - initialState: { - sorting: [{ id: "lastName", desc: false }], - }, - getRowId: (person) => person.id, - getCoreRowModel: getCoreRowModel(), - }), - [filteredPeople], - ); - - // eslint-disable-next-line react-hooks/exhaustive-deps - const onChange = useCallback( - debounce((value: string | null) => setSearchTerm(value?.trim().toLowerCase()), 500), - [], - ); - - const onNewPerson = useCallback(async () => { - router.push("/cms/people/add"); - }, [router]); - useHotkeys("alt+n", onNewPerson); - - const refSearch = useRef(null); - const focusSearch = useCallback(() => { - refSearch.current?.focus(); - }, []); - useHotkeys("alt+s", focusSearch); - - return ( - <> - - - - -
- - ); -} - -function Actions({ - onDelete, - ...cellContext -}: CellContext & { onDelete: (personId: string) => void }) { - const router = useRouter(); - return ( -
- { - router.push(`/cms/people/${cellContext.row.original.id}`); - }} - > - - - { - await deletePerson(cellContext.row.original.id); - onDelete(cellContext.row.original.id); - }} - > - - -
- ); -} diff --git a/app/(cms)/cms/people/PeopleListCard.tsx b/app/(cms)/cms/people/PeopleListCard.tsx deleted file mode 100644 index e2e64a12..00000000 --- a/app/(cms)/cms/people/PeopleListCard.tsx +++ /dev/null @@ -1,15 +0,0 @@ -import { Card, CardContent, CardHeader, CardTitle } from "#/components/cms/card/Card"; -import PeopleList from "#/app/(cms)/cms/people/PeopleList"; - -export async function PeopleListCard() { - return ( - - - Personen - - - - - - ); -} diff --git a/app/(cms)/cms/people/[id]/loading.tsx b/app/(cms)/cms/people/[id]/loading.tsx deleted file mode 100644 index 470b3dcb..00000000 --- a/app/(cms)/cms/people/[id]/loading.tsx +++ /dev/null @@ -1,9 +0,0 @@ -import { LinearProgress } from "@mui/material"; - -export default function Loading() { - return ( -
- -
- ); -} diff --git a/app/(cms)/cms/people/[id]/page.tsx b/app/(cms)/cms/people/[id]/page.tsx deleted file mode 100644 index 5f516375..00000000 --- a/app/(cms)/cms/people/[id]/page.tsx +++ /dev/null @@ -1,41 +0,0 @@ -import "server-only"; - -import { PageProps } from "#/lib/page"; -import { drizzle } from "#/lib/db/drizzle"; -import { sql } from "drizzle-orm"; -import { PersonWithRoles } from "#/lib/types/people"; -import { cache } from "react"; -import { notFound } from "next/navigation"; -import { Edit } from "#/app/(cms)/cms/people/[id]/section/Edit"; -import placeholder = sql.placeholder; - -const preparedPersonStatement = drizzle.query.people - .findFirst({ - with: { - peopleToRoles: { - with: { roles: true }, - where: (peopleToRoles, { eq }) => eq(peopleToRoles.peopleId, placeholder("id")), - }, - }, - where: (person, { eq }) => eq(person.id, placeholder("id")), - }) - .prepare("get_person"); - -const getPerson = cache(async (id: string) => { - const person = await preparedPersonStatement.execute({ id }); - if (!person) { - notFound(); - } - return person; -}); - -export default async function Page({ params }: PageProps<{ id: string }>) { - const { id } = await params; - const person: PersonWithRoles = await getPerson(id); - - return ( -
- -
- ); -} diff --git a/app/(cms)/cms/people/[id]/section/Details.tsx b/app/(cms)/cms/people/[id]/section/Details.tsx deleted file mode 100644 index e83c19c8..00000000 --- a/app/(cms)/cms/people/[id]/section/Details.tsx +++ /dev/null @@ -1,56 +0,0 @@ -"use client"; - -import { PersonWithRoles } from "#/lib/types/people"; -import { MutateResult, TextField, TextFieldMutationVariables } from "#/components/cms/input/TextField"; -import { MdOutlineEmail, MdOutlinePhone } from "react-icons/md"; -import { updatePerson } from "#/app/(cms)/cms/people/actions"; -import { useCallback } from "react"; -import { MutationFunction, useDebouncedMutation } from "#/lib/action"; -import { Alert, AlertTitle, Autocomplete, TextField as MuiTextField } from "@mui/material"; -import { Roles } from "#/app/(cms)/cms/people/[id]/section/Roles"; - -export function Details({ person }: { person: PersonWithRoles }) { - const preparedMutateFirstNameFn: MutationFunction = useCallback( - async ({ value }: TextFieldMutationVariables): Promise => - updatePerson(person.id, { firstName: value ?? "" }), - [person.id], - ); - const mutateFirstName = useDebouncedMutation(preparedMutateFirstNameFn); - - const preparedMutateLastNameFn: MutationFunction = useCallback( - async ({ value }: TextFieldMutationVariables): Promise => - updatePerson(person.id, { lastName: value ?? "" }), - [person.id], - ); - const mutateLastName = useDebouncedMutation(preparedMutateLastNameFn); - - const preparedMutateEmailFn: MutationFunction = useCallback( - async ({ value }: TextFieldMutationVariables): Promise => - updatePerson(person.id, { email: value ?? "" }), - [person.id], - ); - const mutateEmail = useDebouncedMutation(preparedMutateEmailFn); - - const preparedMutatePhoneFn: MutationFunction = useCallback( - async ({ value }: TextFieldMutationVariables): Promise => - updatePerson(person.id, { phone: value ?? "" }), - [person.id], - ); - const mutatePhone = useDebouncedMutation(preparedMutatePhoneFn); - - return ( -
-
- - -
- - - - - ID -
{person.id}
-
-
- ); -} diff --git a/app/(cms)/cms/people/[id]/section/Edit.tsx b/app/(cms)/cms/people/[id]/section/Edit.tsx deleted file mode 100644 index a0679600..00000000 --- a/app/(cms)/cms/people/[id]/section/Edit.tsx +++ /dev/null @@ -1,47 +0,0 @@ -"use client"; - -import { PersonWithRoles } from "#/lib/types/people"; -import { useState } from "react"; -import { Card, CardContent, CardHeader, CardTitle } from "#/components/cms/card/Card"; -import { Picture } from "#/app/(cms)/cms/people/[id]/section/Picture"; -import { Details } from "#/app/(cms)/cms/people/[id]/section/Details"; -import { Preview } from "#/app/(cms)/cms/people/[id]/section/Preview"; - -export function Edit({ person: initialPerson }: { person: PersonWithRoles }) { - const [person] = useState(initialPerson); - - return ( -
-
- - - Picture - - - - - -
-
- - - Details - - -
- - -
-
- - - Preview - - - - - -
-
- ); -} diff --git a/app/(cms)/cms/people/[id]/section/Picture.tsx b/app/(cms)/cms/people/[id]/section/Picture.tsx deleted file mode 100644 index 2802bdc9..00000000 --- a/app/(cms)/cms/people/[id]/section/Picture.tsx +++ /dev/null @@ -1,57 +0,0 @@ -"use client"; - -import NextImage from "next/image"; -import { PersonWithRoles } from "#/lib/types/people"; -import { MutateResult, TextField, TextFieldMutationVariables } from "#/components/cms/input/TextField"; -import { BsPersonBoundingBox } from "react-icons/bs"; -import { SiCloudinary } from "react-icons/si"; -import { MutationFunction, useDebouncedMutation } from "#/lib/action"; -import { useCallback, useState } from "react"; -import { updatePerson } from "#/app/(cms)/cms/people/actions"; - -function validateImageUrl(url: string): boolean { - try { - new URL(url); - return true; - } catch { - return false; - } -} - -export function Picture({ person }: { person: PersonWithRoles }) { - const [imageUrl, setImageUrl] = useState(person.image); - - const preparedMutatePictureFn: MutationFunction = useCallback( - async ({ value }: TextFieldMutationVariables): Promise => - updatePerson(person.id, { image: value ?? "" }), - [person.id], - ); - const mutateFirstName = useDebouncedMutation((variables) => { - if (variables.value !== null) { - // synchronously load image and test if it is valid - } - return preparedMutatePictureFn(variables); - }); - return ( -
- {imageUrl ? ( - - ) : ( - - )} - { - if (value === null || value.trim() === "") { - setImageUrl(null); - } else if (validateImageUrl(value)) { - setImageUrl(value); - } - }} - mutate={mutateFirstName} - StartIcon={SiCloudinary} - /> -
- ); -} diff --git a/app/(cms)/cms/people/[id]/section/Preview.tsx b/app/(cms)/cms/people/[id]/section/Preview.tsx deleted file mode 100644 index 33841909..00000000 --- a/app/(cms)/cms/people/[id]/section/Preview.tsx +++ /dev/null @@ -1,22 +0,0 @@ -import { PersonWithRoles } from "#/lib/types/people"; -import { PersonCard } from "#/components/web/person/PersonCard"; -import { Person } from "#/content/people"; - -export function Preview({ person }: { person: PersonWithRoles }) { - const mappedPerson: Person = { - firstname: person.firstName ?? "", - lastname: person.lastName ?? "", - email: person.email ?? "", - image: person.image - ? { - src: person.image ?? "", - alt: `${person.firstName} ${person.lastName}`, - width: 100, - height: 100, - } - : undefined, - phone: [person.phone ?? ""], - tags: person.peopleToRoles.map((p) => p.roles.name ?? ""), - }; - return ; -} diff --git a/app/(cms)/cms/people/[id]/section/Roles.tsx b/app/(cms)/cms/people/[id]/section/Roles.tsx deleted file mode 100644 index 56ecd3fe..00000000 --- a/app/(cms)/cms/people/[id]/section/Roles.tsx +++ /dev/null @@ -1,80 +0,0 @@ -import { PersonWithRoles, Role } from "#/lib/types/people"; -import { Autocomplete, CircularProgress, TextField } from "@mui/material"; -import { useState } from "react"; -import fetch from "node-fetch"; -import { assignRole, createRole, unassignRole } from "#/app/(cms)/cms/people/actions"; - -export function Roles({ person }: { person: PersonWithRoles }) { - const [open, setOpen] = useState(false); - const [options, setOptions] = useState(); - const [optionsLoading, setOptionsLoading] = useState(false); - - const onOpen = async () => { - setOpen(true); - if (!options) { - setOptionsLoading(true); - const response = await fetch("/cms/api/people/roles"); - const data = await response.json(); - setOptions([...data.roles].sort((a: Role, b: Role) => (a.name ?? "").localeCompare(b.name ?? ""))); - setOptionsLoading(false); - } - }; - - const [roles, setRoles] = useState(() => - person.peopleToRoles.map((p) => ({ id: p.roleId, name: p.roles.name })), - ); - - return ( - setOpen(false)} - loading={optionsLoading} - value={roles} - onChange={async (_, selectedRoles, reason, details) => { - if (reason === "createOption" && typeof details?.option === "string") { - const newRoleName: string = details.option; - if (!options?.some((r) => r.name?.toLowerCase() === newRoleName.toLowerCase())) { - const newRole = await createRole({ name: details.option }); - await assignRole(person.id, newRole.role.id); - setRoles(selectedRoles.map((r) => (typeof r === "string" ? newRole.role : r))); - } - } else if (reason === "selectOption" && details?.option.id) { - await assignRole(person.id, details?.option.id); - setRoles(selectedRoles as Role[]); - } else if (reason === "removeOption" && details?.option.id) { - await unassignRole(person.id, details?.option.id); - setRoles(selectedRoles as Role[]); - } - }} - renderInput={(params) => ( - - {optionsLoading ? : null} - {params.InputProps.endAdornment} - - ), - }, - }} - /> - )} - getOptionLabel={(option) => (typeof option === "string" ? option : (option.name ?? ""))} - options={options ?? []} - isOptionEqualToValue={(option, value) => option.id === value.id} - filterOptions={(options, params) => - options?.filter?.((option) => option.name?.toLowerCase().includes(params.inputValue.toLowerCase())) ?? [] - } - /> - ); -} diff --git a/app/(cms)/cms/people/actions.ts b/app/(cms)/cms/people/actions.ts deleted file mode 100644 index 6b2e9d7c..00000000 --- a/app/(cms)/cms/people/actions.ts +++ /dev/null @@ -1,42 +0,0 @@ -"use server"; - -import { MutateResult } from "#/components/cms/input/TextField"; -import { drizzle } from "#/lib/db/drizzle"; -import { people, peopleToRoles, roles } from "#/lib/db/schema"; -import { and, eq } from "drizzle-orm"; -import { Person, PersonWithRoles, Role } from "#/lib/types/people"; -import { revalidatePath } from "next/cache"; - -export const readAllPeople = async (): Promise => { - return await drizzle.query.people.findMany({ with: { peopleToRoles: { with: { roles: true } } } }); -}; - -export const updatePerson = async (id: string, person: Partial>): Promise => { - await drizzle.update(people).set(person).where(eq(people.id, id)); - revalidatePath("/cms/api/people"); - return { type: "success" }; -}; - -export const deletePerson = async (id: string): Promise => { - await drizzle.delete(people).where(eq(people.id, id)); - revalidatePath("/cms/api/people"); - return { type: "success" }; -}; - -export const createRole = async (role: Omit = { name: "" }): Promise => { - const newRole = await drizzle.insert(roles).values({ id: crypto.randomUUID(), name: role.name }).returning(); - return { type: "success", role: { ...newRole[0] } }; -}; - -export const assignRole = async (peopleId: string, roleId: string): Promise => { - await drizzle.insert(peopleToRoles).values({ peopleId, roleId }).onConflictDoNothing().returning(); - revalidatePath("/cms/api/people"); - return { type: "success" }; -}; - -export const unassignRole = async (peopleId: string, roleId: string): Promise => { - await drizzle - .delete(peopleToRoles) - .where(and(eq(peopleToRoles.peopleId, peopleId), eq(peopleToRoles.roleId, roleId))); - return { type: "success" }; -}; diff --git a/app/(cms)/cms/people/add/loading.tsx b/app/(cms)/cms/people/add/loading.tsx deleted file mode 100644 index 470b3dcb..00000000 --- a/app/(cms)/cms/people/add/loading.tsx +++ /dev/null @@ -1,9 +0,0 @@ -import { LinearProgress } from "@mui/material"; - -export default function Loading() { - return ( -
- -
- ); -} diff --git a/app/(cms)/cms/people/add/page.tsx b/app/(cms)/cms/people/add/page.tsx deleted file mode 100644 index 975eb667..00000000 --- a/app/(cms)/cms/people/add/page.tsx +++ /dev/null @@ -1,13 +0,0 @@ -import { redirect } from "next/navigation"; -import { getURL } from "#/lib/url"; - -export default async function CreatePersonPage() { - const response = await fetch(`${getURL()}/cms/api/people/add`, { method: "POST", cache: "no-store" }); - - if (!response.ok) { - throw new Error("Person konnte nicht angelegt werden."); - } - - const result = await response.json(); - redirect(`/cms/people/${result.person.id}`); -} diff --git a/app/(cms)/cms/people/page.tsx b/app/(cms)/cms/people/page.tsx deleted file mode 100644 index 95327d86..00000000 --- a/app/(cms)/cms/people/page.tsx +++ /dev/null @@ -1,5 +0,0 @@ -import { PeopleListCard } from "#/app/(cms)/cms/people/PeopleListCard"; - -export default async function PeoplePage() { - return ; -} diff --git a/app/(cms)/cms/tags/page.tsx b/app/(cms)/cms/tags/page.tsx deleted file mode 100644 index b241a1a1..00000000 --- a/app/(cms)/cms/tags/page.tsx +++ /dev/null @@ -1,47 +0,0 @@ -"use client"; - -import { TagsResponse } from "#/content/tags"; -import fetch from "node-fetch"; -import { JSX, useEffect, useMemo, useState } from "react"; -import { Card, CardContent, CardTitle } from "#/components/cms/card/Card"; -import { createColumnHelper, getCoreRowModel, TableOptions } from "@tanstack/table-core"; -import { Table } from "#/components/cms/table/Table"; - -interface Tag { - name: string; -} - -const COLUMN_HELPER = createColumnHelper(); - -export default function CMSTags(): JSX.Element { - const [loading, setLoading] = useState(true); - const [tagResponse, setTagResponse] = useState(); - useEffect(() => { - fetch("/cms/api/tags") - .then((res) => res.json()) - .then((data) => { - setTagResponse(data); - setLoading(false); - }); - }, []); - - const options = useMemo((): TableOptions => { - return { - data: tagResponse?.tags.map((tag) => ({ name: tag })) ?? [], - columns: [ - COLUMN_HELPER.accessor("name", { - id: "name", - header: "Name", - }), - ], - getCoreRowModel: getCoreRowModel(), - }; - }, [tagResponse?.tags]); - - return ( - - Tags -
- - ); -} diff --git a/app/(cms)/layout.tsx b/app/(cms)/layout.tsx deleted file mode 100644 index 15255bbe..00000000 --- a/app/(cms)/layout.tsx +++ /dev/null @@ -1,15 +0,0 @@ -"use client"; - -import "#/app/(cms)/cms.css"; -import { JSX, PropsWithChildren } from "react"; -import { UserProvider } from "@auth0/nextjs-auth0/client"; - -export default function CMSBaseLayout({ children }: PropsWithChildren): JSX.Element { - return ( - - - {children} - - - ); -} diff --git a/app/api/auth/[auth0]/route.ts b/app/api/auth/[auth0]/route.ts deleted file mode 100644 index 02888fef..00000000 --- a/app/api/auth/[auth0]/route.ts +++ /dev/null @@ -1,3 +0,0 @@ -import Auth0 from "#/lib/auth0"; - -export const GET = Auth0.handleAuth(); diff --git a/app/api/playingWithNeon/route.ts b/app/api/playingWithNeon/route.ts deleted file mode 100644 index 3af03a47..00000000 --- a/app/api/playingWithNeon/route.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { NextRequest, NextResponse } from "next/server"; -import { drizzle } from "#/lib/db/drizzle"; - -export async function GET(request: NextRequest) { - /* - const response = await drizzle - .select() - .from(people) - .leftJoin(peopleToRoles, eq(peopleToRoles.peopleId, people.id)) - .leftJoin(roles, eq(roles.id, peopleToRoles.roleId)) - .execute(); - */ - - const people = await drizzle.query.people.findMany({ - with: { - peopleToRoles: { - with: { - roles: true, - }, - }, - }, - }); - - const roles = await drizzle.query.roles.findMany({ - with: { - peopleToRoles: { - with: { - people: true, - }, - }, - }, - }); - return NextResponse.json({ people, roles }); -} diff --git a/codegen.yml b/codegen.yml deleted file mode 100644 index 6b7c41b9..00000000 --- a/codegen.yml +++ /dev/null @@ -1,8 +0,0 @@ -overwrite: true -schema: './lib/graphql/schema.json' -documents: '**/*.gql.ts' -generates: - lib/graphql/generated.ts: - plugins: - - 'typescript' - - 'typescript-operations' diff --git a/components/cms/card/Card.tsx b/components/cms/card/Card.tsx deleted file mode 100644 index 510e9d0c..00000000 --- a/components/cms/card/Card.tsx +++ /dev/null @@ -1,21 +0,0 @@ -import { PropsWithChildren } from "react"; - -export function Card({ children }: PropsWithChildren<{}>) { - return
{children}
; -} - -export function CardHeader({ children }: PropsWithChildren<{}>) { - return
{children}
; -} - -export function CardToolbar({ children }: PropsWithChildren<{}>) { - return
{children}
; -} - -export function CardContent({ children }: PropsWithChildren<{}>) { - return
{children}
; -} - -export function CardTitle({ children }: PropsWithChildren<{}>) { - return
{children}
; -} diff --git a/components/cms/header/Header.tsx b/components/cms/header/Header.tsx deleted file mode 100644 index bdb2712d..00000000 --- a/components/cms/header/Header.tsx +++ /dev/null @@ -1,19 +0,0 @@ -import { MdOutlineAccountCircle, MdOutlineMenu, MdOutlineNotifications, MdOutlineSearch } from "react-icons/md"; -import { VscGithub } from "react-icons/vsc"; -import Image from "next/image"; - -export function Header({ onOpenMenu }: { onOpenMenu: () => void }) { - return ( -
-
- - -
-
- - - -
-
- ); -} diff --git a/components/cms/input/TextField.tsx b/components/cms/input/TextField.tsx deleted file mode 100644 index 2277e86b..00000000 --- a/components/cms/input/TextField.tsx +++ /dev/null @@ -1,84 +0,0 @@ -import * as React from "react"; -import { InputAdornment, TextField as MuiTextField, TextFieldProps as MuiTextFieldProps } from "@mui/material"; -import { IconType } from "react-icons"; -import { ChangeEventHandler, useCallback, useState } from "react"; -import { MdCheck, MdError } from "react-icons/md"; - -export type TextFieldMutationVariables = { value: string | null }; -export type MutateResult = { type: "success" } | { type: "error"; message: string }; -export type MutateFn = (variables: TextFieldMutationVariables) => Promise; - -export interface TextFieldProps - extends Pick { - StartIcon?: IconType; - label?: string; - mutate?: MutateFn; - onChange?: (value: string) => void; -} - -export function TextField({ - StartIcon, - label, - defaultValue, - mutate, - onChange, - fullWidth = true, - ref, - inputRef, - type, - id, - placeholder, -}: TextFieldProps) { - const [value, setValue] = useState(defaultValue ?? ""); - const [mutationResult, setMutationResult] = useState(); - - const onChangeHandler: ChangeEventHandler = useCallback( - async (event) => { - setMutationResult(undefined); - const newValue = event.target.value; - setValue(newValue); - onChange?.(newValue); - setMutationResult(await mutate?.({ value: newValue })); - }, - [mutate, onChange], - ); - - return ( - { - if (event.key === "Escape") { - setValue(defaultValue ?? ""); - onChange?.(defaultValue?.toString() ?? ""); - } - }} - size="small" - fullWidth={fullWidth} - label={label} - aria-label={label} - slotProps={{ - input: { - id, - type, - startAdornment: StartIcon ? ( - - - - ) : null, - endAdornment: mutationResult && ( - - {mutationResult?.type === "success" && } - {mutationResult?.type === "error" && } - - ), - }, - }} - /> - ); -} diff --git a/components/cms/navigation/Group.tsx b/components/cms/navigation/Group.tsx deleted file mode 100644 index 4cafe695..00000000 --- a/components/cms/navigation/Group.tsx +++ /dev/null @@ -1,14 +0,0 @@ -import { NavGroup } from "#/components/cms/navigation/types"; - -export function Group({ group }: { group: NavGroup }) { - return ( -
- {group.title} -
- ); -} diff --git a/components/cms/navigation/Item.tsx b/components/cms/navigation/Item.tsx deleted file mode 100644 index 9a76cdb2..00000000 --- a/components/cms/navigation/Item.tsx +++ /dev/null @@ -1,20 +0,0 @@ -import { usePathname } from "next/navigation"; -import Link from "next/link"; -import { NavItem } from "#/components/cms/navigation/types"; - -export function Item({ item, onClick }: { item: NavItem; onClick?: () => void }) { - const pathname = usePathname(); - const active = pathname === item.href; - return ( - - {item.Icon && } -
{item.title}
- - ); -} diff --git a/components/cms/navigation/NavItem.tsx b/components/cms/navigation/NavItem.tsx deleted file mode 100644 index c4acd746..00000000 --- a/components/cms/navigation/NavItem.tsx +++ /dev/null @@ -1,25 +0,0 @@ -"use client"; - -import Link from "next/link"; -import { JSX } from "react"; - -export interface NavItemProps { - href: string; - children: string; - icon?: JSX.Element; - active?: boolean; -} - -export default function NavItem({ href, children, icon, active }: NavItemProps): JSX.Element { - return ( - - {icon &&
{icon}
} -
{children}
- - ); -} diff --git a/components/cms/navigation/Navigation.tsx b/components/cms/navigation/Navigation.tsx deleted file mode 100644 index 39f36de3..00000000 --- a/components/cms/navigation/Navigation.tsx +++ /dev/null @@ -1,59 +0,0 @@ -import Image from "next/image"; -import { - MdClose, - MdEvent, - MdOutlineArticle, - MdOutlineDashboard, - MdOutlineLabel, - MdOutlinePeopleAlt, -} from "react-icons/md"; -import { Item } from "#/components/cms/navigation/Item"; -import { SVWIcon } from "#/components/cms/navigation/SVWIcon"; -import { Group } from "#/components/cms/navigation/Group"; -import { NavElement } from "#/components/cms/navigation/types"; -import { Fragment } from "react"; - -const elements: NavElement[] = [ - { type: "item", title: "Dashboard", href: "/cms", Icon: MdOutlineDashboard }, - { type: "item", title: "Verein", href: "/cms/club", Icon: SVWIcon }, - { - type: "group", - title: "Sammlungen", - items: [ - { type: "item", title: "Artikel", href: "/cms/articles", Icon: MdOutlineArticle }, - { type: "item", title: "Personen", href: "/cms/people", Icon: MdOutlinePeopleAlt }, - { type: "item", title: "Events", href: "/cms/events", Icon: MdEvent }, - { type: "item", title: "Tags", href: "/cms/tags", Icon: MdOutlineLabel }, - ], - }, -]; - -export function Navigation({ open, onClose }: { open: boolean; onClose?: () => void }) { - return ( -
-
-
- - SVW CMS - - - -
- {elements.map((element) => - element.type === "item" ? ( - - ) : ( - - - {element.items.map((item) => ( - - ))} - - ), - )} -
-
- ); -} diff --git a/components/cms/navigation/SVWIcon.tsx b/components/cms/navigation/SVWIcon.tsx deleted file mode 100644 index 0912c4ae..00000000 --- a/components/cms/navigation/SVWIcon.tsx +++ /dev/null @@ -1,32 +0,0 @@ -export function SVWIcon() { - return ( - - - - - ); -} diff --git a/components/cms/navigation/types.tsx b/components/cms/navigation/types.tsx deleted file mode 100644 index 8c9faf0d..00000000 --- a/components/cms/navigation/types.tsx +++ /dev/null @@ -1,15 +0,0 @@ -import { IconType } from "react-icons"; -import { ComponentType } from "react"; - -export type NavItem = { - type: "item"; - title: string; - Icon: IconType | ComponentType; - href: string; -}; -export type NavGroup = { - type: "group"; - title: string; - items: NavItem[]; -}; -export type NavElement = NavItem | NavGroup; diff --git a/components/cms/table/Table.tsx b/components/cms/table/Table.tsx deleted file mode 100644 index 2d0e79ef..00000000 --- a/components/cms/table/Table.tsx +++ /dev/null @@ -1,21 +0,0 @@ -"use client"; - -import { RowData, TableOptions } from "@tanstack/table-core"; -import { TableHead } from "#/components/cms/table/TableHead"; -import { useReactTable } from "@tanstack/react-table"; -import { TableBody } from "#/components/cms/table/TableBody"; - -interface Props { - options: TableOptions; - loading?: boolean; -} - -export function Table({ options, loading = false }: Props) { - const table = useReactTable(options); - return ( -
- - -
- ); -} diff --git a/components/cms/table/TableBody.tsx b/components/cms/table/TableBody.tsx deleted file mode 100644 index a4db7bb6..00000000 --- a/components/cms/table/TableBody.tsx +++ /dev/null @@ -1,19 +0,0 @@ -import { RowData } from "@tanstack/table-core"; -import { PropsWithTable } from "#/components/cms/table/types"; -import { TableBodyRow } from "#/components/cms/table/TableBodyRow"; -import { LinearProgress } from "@mui/material"; - -export function TableBody({ table, loading }: PropsWithTable & { loading: boolean }) { - return ( - - {loading && ( - - - - - - )} - {!loading && table.getRowModel().rows.map((row) => )} - - ); -} diff --git a/components/cms/table/TableBodyCell.tsx b/components/cms/table/TableBodyCell.tsx deleted file mode 100644 index 560aedb1..00000000 --- a/components/cms/table/TableBodyCell.tsx +++ /dev/null @@ -1,10 +0,0 @@ -import { Cell, RowData } from "@tanstack/table-core"; -import { flexRender } from "@tanstack/react-table"; - -interface Props { - cell: Cell; -} - -export function TableBodyCell({ cell }: Props) { - return {flexRender(cell.column.columnDef.cell, cell.getContext())}; -} diff --git a/components/cms/table/TableBodyRow.tsx b/components/cms/table/TableBodyRow.tsx deleted file mode 100644 index f1aafe55..00000000 --- a/components/cms/table/TableBodyRow.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import { Row, RowData } from "@tanstack/table-core"; -import { TableBodyCell } from "#/components/cms/table/TableBodyCell"; - -interface Props { - row: Row; -} - -export function TableBodyRow({ row }: Props) { - return ( - - {row.getAllCells().map((cell) => ( - - ))} - - ); -} diff --git a/components/cms/table/TableHead.tsx b/components/cms/table/TableHead.tsx deleted file mode 100644 index 289372b7..00000000 --- a/components/cms/table/TableHead.tsx +++ /dev/null @@ -1,15 +0,0 @@ -import { PropsWithTable } from "#/components/cms/table/types"; -import { RowData } from "@tanstack/table-core"; -import { TableHeadCell } from "#/components/cms/table/TableHeadCell"; - -export function TableHead({ table }: PropsWithTable) { - return ( - - - {table.getFlatHeaders().map((header) => ( - - ))} - - - ); -} diff --git a/components/cms/table/TableHeadCell.tsx b/components/cms/table/TableHeadCell.tsx deleted file mode 100644 index 86a2d7a4..00000000 --- a/components/cms/table/TableHeadCell.tsx +++ /dev/null @@ -1,10 +0,0 @@ -import { Header, RowData } from "@tanstack/table-core"; -import { flexRender } from "@tanstack/react-table"; - -interface Props { - header: Header; -} - -export function TableHeadCell({ header }: Props) { - return {flexRender(header.column.columnDef.header, header.getContext())}; -} diff --git a/components/cms/table/cell/Mail.tsx b/components/cms/table/cell/Mail.tsx deleted file mode 100644 index b344f6b1..00000000 --- a/components/cms/table/cell/Mail.tsx +++ /dev/null @@ -1,7 +0,0 @@ -import { CellContext, RowData } from "@tanstack/table-core"; -import Link from "next/link"; - -export function MailCell({ cell }: CellContext) { - const value = cell.getValue(); - return value ? {value} : null; -} diff --git a/components/cms/table/cell/Phone.tsx b/components/cms/table/cell/Phone.tsx deleted file mode 100644 index b336c225..00000000 --- a/components/cms/table/cell/Phone.tsx +++ /dev/null @@ -1,11 +0,0 @@ -import { CellContext, RowData } from "@tanstack/table-core"; -import Link from "next/link"; - -export function PhoneCell({ cell }: CellContext) { - const value = cell.getValue(); - return value ? ( - - {value} - - ) : null; -} diff --git a/components/cms/table/cell/Roles.tsx b/components/cms/table/cell/Roles.tsx deleted file mode 100644 index 5b30b8d3..00000000 --- a/components/cms/table/cell/Roles.tsx +++ /dev/null @@ -1,22 +0,0 @@ -import { CellContext, RowData } from "@tanstack/table-core"; - -export function RolesCell({ cell }: CellContext) { - const value = cell.getValue(); - - if (value) { - return ( -
- {value.map((role) => ( - - {role} - - ))} -
- ); - } - - return null; -} diff --git a/components/cms/table/types.ts b/components/cms/table/types.ts deleted file mode 100644 index ef565399..00000000 --- a/components/cms/table/types.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { RowData, Table } from "@tanstack/table-core"; - -export interface PropsWithTable { - table: Table; -} diff --git a/components/cms/tag/Tag.tsx b/components/cms/tag/Tag.tsx deleted file mode 100644 index 2404145e..00000000 --- a/components/cms/tag/Tag.tsx +++ /dev/null @@ -1,6 +0,0 @@ -type Props = { - title: string; -}; -export function Tag({ title }: Props) { - return {title}; -} diff --git a/drizzle.config.js b/drizzle.config.js deleted file mode 100644 index 03ad7c85..00000000 --- a/drizzle.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { defineConfig } from "drizzle-kit"; -import { config } from "dotenv"; - -config({ path: [".env", ".env.local"] }); - -export default defineConfig({ - schema: "./lib/db/schema", - out: "./migrations", - dialect: "postgresql", - dbCredentials: { - url: process.env.DATABASE_URL, - }, - migrations: { - table: "_migrations", - schema: "public", - }, -}); diff --git a/lib/auth0.ts b/lib/auth0.ts deleted file mode 100644 index c5621ede..00000000 --- a/lib/auth0.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { initAuth0 } from "@auth0/nextjs-auth0"; - -const Auth0 = initAuth0({ - secret: process.env.AUTH0_SECRET, - issuerBaseURL: process.env.AUTH0_ISSUER_BASE_URL, - baseURL: - process.env.VERCEL_ENV === "production" - ? "https://svwalddorf.de" - : process.env.VERCEL_ENV === "preview" - ? `https://${process.env.VERCEL_URL}` - : "http://localhost:3000", - clientID: process.env.AUTH0_CLIENT_ID, - clientSecret: process.env.AUTH0_CLIENT_SECRET, -}); - -export default Auth0; diff --git a/lib/db/drizzle.ts b/lib/db/drizzle.ts deleted file mode 100644 index 0cfaa14b..00000000 --- a/lib/db/drizzle.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { neon, neonConfig } from "@neondatabase/serverless"; -import ws from "ws"; -import { drizzle as createDrizzle } from "drizzle-orm/neon-http"; -import * as schema from "./schema"; - -neonConfig.webSocketConstructor = ws; - -// Enable to work in edge environments -neonConfig.poolQueryViaFetch = true; - -const client = neon(process.env.DATABASE_URL ?? ""); -export const drizzle = createDrizzle({ client, schema }); diff --git a/lib/db/schema/index.ts b/lib/db/schema/index.ts deleted file mode 100644 index f7efe529..00000000 --- a/lib/db/schema/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./people"; diff --git a/lib/db/schema/people.ts b/lib/db/schema/people.ts deleted file mode 100644 index a646bc51..00000000 --- a/lib/db/schema/people.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { index, pgTable, text, uuid } from "drizzle-orm/pg-core"; -import { relations } from "drizzle-orm"; - -export const people = pgTable("people", { - id: uuid().primaryKey(), - firstName: text("first_name"), - lastName: text("last_name"), - email: text(), - phone: text(), - image: text(), -}); - -export const roles = pgTable("roles", { - id: uuid().primaryKey(), - name: text(), -}); - -export const peopleToRoles = pgTable( - "people_to_roles", - { - peopleId: uuid("people_id") - .notNull() - .references(() => people.id, { onDelete: "cascade" }), - roleId: uuid("role_id") - .notNull() - .references(() => roles.id, { onDelete: "cascade" }), - }, - (t) => [index("pk").on(t.peopleId, t.roleId)], -); - -export const peopleRelations = relations(people, ({ many }) => ({ - peopleToRoles: many(peopleToRoles), -})); - -export const rolesRelations = relations(roles, ({ many }) => ({ - peopleToRoles: many(peopleToRoles), -})); - -export const peopleToRolesRelations = relations(peopleToRoles, ({ one }) => ({ - roles: one(roles, { - fields: [peopleToRoles.roleId], - references: [roles.id], - }), - people: one(people, { - fields: [peopleToRoles.peopleId], - references: [people.id], - }), -})); diff --git a/lib/image.ts b/lib/image.ts index 5b30379b..0bdfa3e0 100644 --- a/lib/image.ts +++ b/lib/image.ts @@ -1,8 +1,3 @@ -export interface ImageProps extends ImageDimensions { - src: string; - alt?: string; -} - export interface ImageDimensions { width: number; height: number; diff --git a/lib/types/people.ts b/lib/types/people.ts index 22dd8a2f..9538ca3b 100644 --- a/lib/types/people.ts +++ b/lib/types/people.ts @@ -6,16 +6,3 @@ export type Person = { phone: string | null; image: string | null; }; - -export type Role = { - id: string; - name: string | null; -}; - -export type PersonWithRoles = Person & { - peopleToRoles: { - peopleId: string; - roleId: string; - roles: Role; - }[]; -}; diff --git a/migrations/0000_initial_people_and_roles.sql b/migrations/0000_initial_people_and_roles.sql deleted file mode 100644 index cf8b8fd7..00000000 --- a/migrations/0000_initial_people_and_roles.sql +++ /dev/null @@ -1,22 +0,0 @@ -CREATE TABLE "people" ( - "id" uuid PRIMARY KEY NOT NULL, - "first_name" text NOT NULL, - "last_name" text NOT NULL, - "email" text, - "phone" text, - "image" text -); ---> statement-breakpoint -CREATE TABLE "people_to_roles" ( - "people_id" uuid NOT NULL, - "role_id" uuid NOT NULL -); ---> statement-breakpoint -CREATE TABLE "roles" ( - "id" uuid PRIMARY KEY NOT NULL, - "name" text NOT NULL -); ---> statement-breakpoint -ALTER TABLE "people_to_roles" ADD CONSTRAINT "people_to_roles_people_id_people_id_fk" FOREIGN KEY ("people_id") REFERENCES "public"."people"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint -ALTER TABLE "people_to_roles" ADD CONSTRAINT "people_to_roles_role_id_roles_id_fk" FOREIGN KEY ("role_id") REFERENCES "public"."roles"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint -CREATE INDEX "pk" ON "people_to_roles" USING btree ("people_id","role_id"); \ No newline at end of file diff --git a/migrations/0001_nullable_names.sql b/migrations/0001_nullable_names.sql deleted file mode 100644 index 5e7b6aa9..00000000 --- a/migrations/0001_nullable_names.sql +++ /dev/null @@ -1,3 +0,0 @@ -ALTER TABLE "people" ALTER COLUMN "first_name" DROP NOT NULL;--> statement-breakpoint -ALTER TABLE "people" ALTER COLUMN "last_name" DROP NOT NULL;--> statement-breakpoint -ALTER TABLE "roles" ALTER COLUMN "name" DROP NOT NULL; \ No newline at end of file diff --git a/migrations/0002_onDelete_cascade.sql b/migrations/0002_onDelete_cascade.sql deleted file mode 100644 index 88ea2b2e..00000000 --- a/migrations/0002_onDelete_cascade.sql +++ /dev/null @@ -1,6 +0,0 @@ -ALTER TABLE "people_to_roles" DROP CONSTRAINT "people_to_roles_people_id_people_id_fk"; ---> statement-breakpoint -ALTER TABLE "people_to_roles" DROP CONSTRAINT "people_to_roles_role_id_roles_id_fk"; ---> statement-breakpoint -ALTER TABLE "people_to_roles" ADD CONSTRAINT "people_to_roles_people_id_people_id_fk" FOREIGN KEY ("people_id") REFERENCES "public"."people"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE "people_to_roles" ADD CONSTRAINT "people_to_roles_role_id_roles_id_fk" FOREIGN KEY ("role_id") REFERENCES "public"."roles"("id") ON DELETE cascade ON UPDATE no action; \ No newline at end of file diff --git a/migrations/meta/0000_snapshot.json b/migrations/meta/0000_snapshot.json deleted file mode 100644 index 0873af01..00000000 --- a/migrations/meta/0000_snapshot.json +++ /dev/null @@ -1,167 +0,0 @@ -{ - "id": "bbb6735e-83a9-4305-8e51-09aa86e1bde7", - "prevId": "00000000-0000-0000-0000-000000000000", - "version": "7", - "dialect": "postgresql", - "tables": { - "public.people": { - "name": "people", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "first_name": { - "name": "first_name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "last_name": { - "name": "last_name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "email": { - "name": "email", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "phone": { - "name": "phone", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "image": { - "name": "image", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.people_to_roles": { - "name": "people_to_roles", - "schema": "", - "columns": { - "people_id": { - "name": "people_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "role_id": { - "name": "role_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "pk": { - "name": "pk", - "columns": [ - { - "expression": "people_id", - "isExpression": false, - "asc": true, - "nulls": "last" - }, - { - "expression": "role_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "people_to_roles_people_id_people_id_fk": { - "name": "people_to_roles_people_id_people_id_fk", - "tableFrom": "people_to_roles", - "tableTo": "people", - "columnsFrom": [ - "people_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - }, - "people_to_roles_role_id_roles_id_fk": { - "name": "people_to_roles_role_id_roles_id_fk", - "tableFrom": "people_to_roles", - "tableTo": "roles", - "columnsFrom": [ - "role_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.roles": { - "name": "roles", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - } - }, - "enums": {}, - "schemas": {}, - "sequences": {}, - "roles": {}, - "policies": {}, - "views": {}, - "_meta": { - "columns": {}, - "schemas": {}, - "tables": {} - } -} \ No newline at end of file diff --git a/migrations/meta/0001_snapshot.json b/migrations/meta/0001_snapshot.json deleted file mode 100644 index 0543dca3..00000000 --- a/migrations/meta/0001_snapshot.json +++ /dev/null @@ -1,167 +0,0 @@ -{ - "id": "8efaa223-9c4f-4f33-963e-df5579234258", - "prevId": "bbb6735e-83a9-4305-8e51-09aa86e1bde7", - "version": "7", - "dialect": "postgresql", - "tables": { - "public.people": { - "name": "people", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "first_name": { - "name": "first_name", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "last_name": { - "name": "last_name", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "email": { - "name": "email", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "phone": { - "name": "phone", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "image": { - "name": "image", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.people_to_roles": { - "name": "people_to_roles", - "schema": "", - "columns": { - "people_id": { - "name": "people_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "role_id": { - "name": "role_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "pk": { - "name": "pk", - "columns": [ - { - "expression": "people_id", - "isExpression": false, - "asc": true, - "nulls": "last" - }, - { - "expression": "role_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "people_to_roles_people_id_people_id_fk": { - "name": "people_to_roles_people_id_people_id_fk", - "tableFrom": "people_to_roles", - "tableTo": "people", - "columnsFrom": [ - "people_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - }, - "people_to_roles_role_id_roles_id_fk": { - "name": "people_to_roles_role_id_roles_id_fk", - "tableFrom": "people_to_roles", - "tableTo": "roles", - "columnsFrom": [ - "role_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.roles": { - "name": "roles", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - } - }, - "enums": {}, - "schemas": {}, - "sequences": {}, - "roles": {}, - "policies": {}, - "views": {}, - "_meta": { - "columns": {}, - "schemas": {}, - "tables": {} - } -} \ No newline at end of file diff --git a/migrations/meta/0002_snapshot.json b/migrations/meta/0002_snapshot.json deleted file mode 100644 index 1e35708d..00000000 --- a/migrations/meta/0002_snapshot.json +++ /dev/null @@ -1,167 +0,0 @@ -{ - "id": "93b788b6-411f-4633-bafe-fcf6ac076350", - "prevId": "8efaa223-9c4f-4f33-963e-df5579234258", - "version": "7", - "dialect": "postgresql", - "tables": { - "public.people": { - "name": "people", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "first_name": { - "name": "first_name", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "last_name": { - "name": "last_name", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "email": { - "name": "email", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "phone": { - "name": "phone", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "image": { - "name": "image", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.people_to_roles": { - "name": "people_to_roles", - "schema": "", - "columns": { - "people_id": { - "name": "people_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "role_id": { - "name": "role_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "pk": { - "name": "pk", - "columns": [ - { - "expression": "people_id", - "isExpression": false, - "asc": true, - "nulls": "last" - }, - { - "expression": "role_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "people_to_roles_people_id_people_id_fk": { - "name": "people_to_roles_people_id_people_id_fk", - "tableFrom": "people_to_roles", - "tableTo": "people", - "columnsFrom": [ - "people_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "people_to_roles_role_id_roles_id_fk": { - "name": "people_to_roles_role_id_roles_id_fk", - "tableFrom": "people_to_roles", - "tableTo": "roles", - "columnsFrom": [ - "role_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.roles": { - "name": "roles", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - } - }, - "enums": {}, - "schemas": {}, - "sequences": {}, - "roles": {}, - "policies": {}, - "views": {}, - "_meta": { - "columns": {}, - "schemas": {}, - "tables": {} - } -} \ No newline at end of file diff --git a/migrations/meta/_journal.json b/migrations/meta/_journal.json deleted file mode 100644 index 59ca0b0c..00000000 --- a/migrations/meta/_journal.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "version": "7", - "dialect": "postgresql", - "entries": [ - { - "idx": 0, - "version": "7", - "when": 1734702523610, - "tag": "0000_initial_people_and_roles", - "breakpoints": true - }, - { - "idx": 1, - "version": "7", - "when": 1735905577738, - "tag": "0001_nullable_names", - "breakpoints": true - }, - { - "idx": 2, - "version": "7", - "when": 1738332589470, - "tag": "0002_onDelete_cascade", - "breakpoints": true - } - ] -} \ No newline at end of file diff --git a/next.config.js b/next.config.js index 8c42569c..ca241c9d 100644 --- a/next.config.js +++ b/next.config.js @@ -18,15 +18,6 @@ const nextConfig = { }, ], }, - /* - webpack: (config) => { - config.module.rules.push({ - test: /\.node/, - use: "raw-loader", - }); - return config; - }, - */ async redirects() { return [ { diff --git a/package.json b/package.json index 564977a9..40533eea 100644 --- a/package.json +++ b/package.json @@ -8,10 +8,8 @@ }, "packageManager": "pnpm@10.2.1", "scripts": { - "db:migrate": "drizzle-kit migrate", "dev": "next dev", "dev:storybook": "storybook dev -p 6006", - "prebuild": "pnpm run db:migrate", "build": "next build", "postbuild": "next-sitemap", "build:storybook": "storybook build", @@ -22,18 +20,15 @@ "test:chromatic": "chromatic --only-changed --build-script-name=build:storybook" }, "dependencies": { - "@auth0/nextjs-auth0": "^3.6.0", "@emotion/react": "^11.14.0", "@emotion/styled": "^11.14.0", "@fontsource/roboto": "^5.1.1", "@mui/material": "^6.4.3", - "@neondatabase/serverless": "^0.10.4", "@next/mdx": "16.1.0", "@tanstack/react-table": "^8.20.6", "@tanstack/table-core": "^8.20.5", "date-fns": "^4.1.0", "dotenv": "^16.4.7", - "drizzle-orm": "^0.39.2", "gray-matter": "^4.0.3", "lodash": "^4.17.21", "next": "16.1.0", @@ -71,7 +66,6 @@ "@typescript-eslint/parser": "^8.32.1", "@vitest/ui": "^3.1.4", "chromatic": "^13.3.4", - "drizzle-kit": "^0.31.1", "eslint": "^9.27.0", "eslint-config-next": "16.1.0", "eslint-plugin-storybook": "^10.1.10", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 13c8e9f3..fa57155e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -17,9 +17,6 @@ importers: .: dependencies: - '@auth0/nextjs-auth0': - specifier: ^3.6.0 - version: 3.7.0(next@16.1.0(@babel/core@7.28.5)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)) '@emotion/react': specifier: ^11.14.0 version: 11.14.0(@types/react@19.2.7)(react@19.2.3) @@ -32,9 +29,6 @@ importers: '@mui/material': specifier: ^6.4.3 version: 6.4.8(@emotion/react@11.14.0(@types/react@19.2.7)(react@19.2.3))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.2.7)(react@19.2.3))(@types/react@19.2.7)(react@19.2.3))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@neondatabase/serverless': - specifier: ^0.10.4 - version: 0.10.4 '@next/mdx': specifier: 16.1.0 version: 16.1.0(@mdx-js/react@3.1.0(@types/react@19.2.7)(react@19.2.3)) @@ -50,9 +44,6 @@ importers: dotenv: specifier: ^16.4.7 version: 16.4.7 - drizzle-orm: - specifier: ^0.39.2 - version: 0.39.3(@neondatabase/serverless@0.10.4)(@types/pg@8.11.6) gray-matter: specifier: ^4.0.3 version: 4.0.3 @@ -159,9 +150,6 @@ importers: chromatic: specifier: ^13.3.4 version: 13.3.4 - drizzle-kit: - specifier: ^0.31.1 - version: 0.31.1 eslint: specifier: ^9.27.0 version: 9.27.0(jiti@2.4.2) @@ -218,12 +206,6 @@ packages: '@asamuzakjp/css-color@3.1.3': resolution: {integrity: sha512-u25AyjuNrRFGb1O7KmWEu0ExN6iJMlUmDSlOPW/11JF8khOrIGG6oCoYpC+4mZlthNVhFUahk68lNrNI91f6Yg==} - '@auth0/nextjs-auth0@3.7.0': - resolution: {integrity: sha512-MxJl2rf3j09bwugggVBmrzOhO8H4yv7lZbXe7xPuQSYTuk1jJjjofHEQrZiOJnYV9dZbjYvNhEunFRFJM1PyVw==} - engines: {node: '>=16'} - peerDependencies: - next: ^10.0.0 || ^11.0.0 || ^12.3.5 || ^13.5.9 || ^14.2.25 || ^15.2.3 - '@babel/code-frame@7.27.1': resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} engines: {node: '>=6.9.0'} @@ -849,9 +831,6 @@ packages: resolution: {integrity: sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw==} engines: {node: '>=18'} - '@drizzle-team/brocli@0.10.2': - resolution: {integrity: sha512-z33Il7l5dKjUgGULTqBsQBQwckHh5AbIuxhdsIxDDiZAzBOrZO6q9ogcWC65kU382AfynTfgNumVcNIjuIua6w==} - '@emnapi/core@1.4.3': resolution: {integrity: sha512-4m62DuCE07lw01soJwPiBGC0nAww0Q+RY70VZ+n49yDIO13yyinhbWCeNnaob0lakDtWQzSdtNWzJeOJt2ma+g==} @@ -915,206 +894,102 @@ packages: '@emotion/weak-memoize@0.4.0': resolution: {integrity: sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==} - '@esbuild-kit/core-utils@3.3.2': - resolution: {integrity: sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ==} - deprecated: 'Merged into tsx: https://tsx.is' - - '@esbuild-kit/esm-loader@2.6.5': - resolution: {integrity: sha512-FxEMIkJKnodyA1OaCUoEvbYRkoZlLZ4d/eXFu9Fh8CbBBgP5EmZxrfTRyN0qpXZ4vOvqnE5YdRdcrmUUXuU+dA==} - deprecated: 'Merged into tsx: https://tsx.is' - '@esbuild/aix-ppc64@0.25.4': resolution: {integrity: sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.18.20': - resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - '@esbuild/android-arm64@0.25.4': resolution: {integrity: sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A==} engines: {node: '>=18'} cpu: [arm64] os: [android] - '@esbuild/android-arm@0.18.20': - resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - '@esbuild/android-arm@0.25.4': resolution: {integrity: sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ==} engines: {node: '>=18'} cpu: [arm] os: [android] - '@esbuild/android-x64@0.18.20': - resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - '@esbuild/android-x64@0.25.4': resolution: {integrity: sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ==} engines: {node: '>=18'} cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.18.20': - resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - '@esbuild/darwin-arm64@0.25.4': resolution: {integrity: sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.18.20': - resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - '@esbuild/darwin-x64@0.25.4': resolution: {integrity: sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A==} engines: {node: '>=18'} cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.18.20': - resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - '@esbuild/freebsd-arm64@0.25.4': resolution: {integrity: sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.18.20': - resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - '@esbuild/freebsd-x64@0.25.4': resolution: {integrity: sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.18.20': - resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - '@esbuild/linux-arm64@0.25.4': resolution: {integrity: sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ==} engines: {node: '>=18'} cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.18.20': - resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - '@esbuild/linux-arm@0.25.4': resolution: {integrity: sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ==} engines: {node: '>=18'} cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.18.20': - resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - '@esbuild/linux-ia32@0.25.4': resolution: {integrity: sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ==} engines: {node: '>=18'} cpu: [ia32] os: [linux] - '@esbuild/linux-loong64@0.18.20': - resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - '@esbuild/linux-loong64@0.25.4': resolution: {integrity: sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA==} engines: {node: '>=18'} cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.18.20': - resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - '@esbuild/linux-mips64el@0.25.4': resolution: {integrity: sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.18.20': - resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - '@esbuild/linux-ppc64@0.25.4': resolution: {integrity: sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.18.20': - resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - '@esbuild/linux-riscv64@0.25.4': resolution: {integrity: sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.18.20': - resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - '@esbuild/linux-s390x@0.25.4': resolution: {integrity: sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g==} engines: {node: '>=18'} cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.18.20': - resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - '@esbuild/linux-x64@0.25.4': resolution: {integrity: sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA==} engines: {node: '>=18'} @@ -1127,12 +1002,6 @@ packages: cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-x64@0.18.20': - resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - '@esbuild/netbsd-x64@0.25.4': resolution: {integrity: sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw==} engines: {node: '>=18'} @@ -1145,60 +1014,30 @@ packages: cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-x64@0.18.20': - resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - '@esbuild/openbsd-x64@0.25.4': resolution: {integrity: sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] - '@esbuild/sunos-x64@0.18.20': - resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - '@esbuild/sunos-x64@0.25.4': resolution: {integrity: sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q==} engines: {node: '>=18'} cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.18.20': - resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - '@esbuild/win32-arm64@0.25.4': resolution: {integrity: sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ==} engines: {node: '>=18'} cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.18.20': - resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - '@esbuild/win32-ia32@0.25.4': resolution: {integrity: sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg==} engines: {node: '>=18'} cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.18.20': - resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - '@esbuild/win32-x64@0.25.4': resolution: {integrity: sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ==} engines: {node: '>=18'} @@ -1246,12 +1085,6 @@ packages: '@fontsource/roboto@5.2.5': resolution: {integrity: sha512-70r2UZ0raqLn5W+sPeKhqlf8wGvUXFWlofaDlcbt/S3d06+17gXKr3VNqDODB0I1ASme3dGT5OJj9NABt7OTZQ==} - '@hapi/hoek@9.3.0': - resolution: {integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==} - - '@hapi/topo@5.1.0': - resolution: {integrity: sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==} - '@humanfs/core@0.19.1': resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} engines: {node: '>=18.18.0'} @@ -1535,9 +1368,6 @@ packages: '@neoconfetti/react@1.0.0': resolution: {integrity: sha512-klcSooChXXOzIm+SE5IISIAn3bYzYfPjbX7D7HoqZL84oAfgREeSg5vSIaSFH+DaGzzvImTyWe1OyrJ67vik4A==} - '@neondatabase/serverless@0.10.4': - resolution: {integrity: sha512-2nZuh3VUO9voBauuh+IGYRhGU/MskWHt1IuZvHcJw6GLjDgtqj/KViKo7SIrLdGLdot7vFbiRRw+BgEy3wT9HA==} - '@next/env@13.5.9': resolution: {integrity: sha512-h9+DconfsLkhHIw950Som5t5DC0kZReRRVhT4XO2DLo5vBK3PQK6CbFr8unxjHwvIcRdDvb8rosKleLdirfShQ==} @@ -1622,9 +1452,6 @@ packages: resolution: {integrity: sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==} engines: {node: '>=12.4.0'} - '@panva/hkdf@1.2.1': - resolution: {integrity: sha512-6oclG6Y3PiDFcoyk8srjLfVKyMfVCKJ27JwNPViuXziFpmdz+MZnZN/aKY0JGXgYuO/VghU0jcOAZgWXZ1Dmrw==} - '@pmmmwh/react-refresh-webpack-plugin@0.5.16': resolution: {integrity: sha512-kLQc9xz6QIqd2oIYyXRUiAp79kGpFBm3fEM9ahfG1HI0WI5gdZ2OVHWdmZYnwODt7ISck+QuQ6sBPrtvUBML7Q==} engines: {node: '>= 10.13'} @@ -1760,15 +1587,6 @@ packages: '@rtsao/scc@1.1.0': resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} - '@sideway/address@4.1.5': - resolution: {integrity: sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==} - - '@sideway/formula@3.0.1': - resolution: {integrity: sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==} - - '@sideway/pinpoint@2.0.0': - resolution: {integrity: sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==} - '@storybook/addon-docs@10.1.10': resolution: {integrity: sha512-PSJVtawnGNrEkeLJQn9TTdeqrtDij8onvmnFtfkDaFG5IaUdQaLX9ibJ4gfxYakq+BEtlCcYiWErNJcqDrDluQ==} peerDependencies: @@ -2083,9 +1901,6 @@ packages: '@types/parse-json@4.0.2': resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} - '@types/pg@8.11.6': - resolution: {integrity: sha512-/2WmmBXHLsfRqzfHW7BNZ8SbYzE8OSk7i3WjFYvfgRHj7S1xj+16Je5fUKv3lVdVzk/zn9TXOqf+avFCFIE0yQ==} - '@types/prop-types@15.7.14': resolution: {integrity: sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==} @@ -2830,10 +2645,6 @@ packages: convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - cookie@0.7.2: - resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} - engines: {node: '>= 0.6'} - core-js-compat@3.42.0: resolution: {integrity: sha512-bQasjMfyDGyaeWKBIu33lHh9qlSR0MFE/Nmc6nMjf/iU9b3rSMdAYz1Baxrv4lPdGUsTqZudHA4jIGSJy0SWZQ==} @@ -3088,96 +2899,6 @@ packages: resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==} engines: {node: '>=12'} - drizzle-kit@0.31.1: - resolution: {integrity: sha512-PUjYKWtzOzPtdtQlTHQG3qfv4Y0XT8+Eas6UbxCmxTj7qgMf+39dDujf1BP1I+qqZtw9uzwTh8jYtkMuCq+B0Q==} - hasBin: true - - drizzle-orm@0.39.3: - resolution: {integrity: sha512-EZ8ZpYvDIvKU9C56JYLOmUskazhad+uXZCTCRN4OnRMsL+xAJ05dv1eCpAG5xzhsm1hqiuC5kAZUCS924u2DTw==} - peerDependencies: - '@aws-sdk/client-rds-data': '>=3' - '@cloudflare/workers-types': '>=4' - '@electric-sql/pglite': '>=0.2.0' - '@libsql/client': '>=0.10.0' - '@libsql/client-wasm': '>=0.10.0' - '@neondatabase/serverless': '>=0.10.0' - '@op-engineering/op-sqlite': '>=2' - '@opentelemetry/api': ^1.4.1 - '@planetscale/database': '>=1' - '@prisma/client': '*' - '@tidbcloud/serverless': '*' - '@types/better-sqlite3': '*' - '@types/pg': '*' - '@types/sql.js': '*' - '@vercel/postgres': '>=0.8.0' - '@xata.io/client': '*' - better-sqlite3: '>=7' - bun-types: '*' - expo-sqlite: '>=14.0.0' - knex: '*' - kysely: '*' - mysql2: '>=2' - pg: '>=8' - postgres: '>=3' - prisma: '*' - 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 - '@libsql/client-wasm': - optional: true - '@neondatabase/serverless': - optional: true - '@op-engineering/op-sqlite': - optional: true - '@opentelemetry/api': - optional: true - '@planetscale/database': - optional: true - '@prisma/client': - optional: true - '@tidbcloud/serverless': - optional: true - '@types/better-sqlite3': - optional: true - '@types/pg': - 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 - prisma: - optional: true - sql.js: - optional: true - sqlite3: - optional: true - dunder-proto@1.0.1: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} @@ -3258,16 +2979,6 @@ packages: resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} engines: {node: '>= 0.4'} - esbuild-register@3.6.0: - resolution: {integrity: sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg==} - peerDependencies: - esbuild: '>=0.12 <1' - - esbuild@0.18.20: - resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} - engines: {node: '>=12'} - hasBin: true - esbuild@0.25.4: resolution: {integrity: sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q==} engines: {node: '>=18'} @@ -3998,12 +3709,6 @@ packages: resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} hasBin: true - joi@17.13.3: - resolution: {integrity: sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==} - - jose@4.15.9: - resolution: {integrity: sha512-1vUQX+IdDMVPj4k8kOxgUqlcK518yluMuGZwqlr44FS1ppZB/5GWh4rZG89erpOBOJjU/OBsnCVFfapsRz6nEA==} - js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -4205,10 +3910,6 @@ packages: lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} - lru-cache@6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} - engines: {node: '>=10'} - lz-string@1.5.0: resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} hasBin: true @@ -4504,17 +4205,10 @@ packages: nwsapi@2.2.20: resolution: {integrity: sha512-/ieB+mDe4MrrKMT8z+mQL8klXydZWGR5Dowt4RAGKbJ3kIGEx3X4ljUo+6V73IXtUPWgfOlU5B9MlGxFO5T+cA==} - oauth4webapi@2.17.0: - resolution: {integrity: sha512-lbC0Z7uzAFNFyzEYRIC+pkSVvDHJTbEW+dYlSBAlCYDe6RxUkJ26bClhk8ocBZip1wfI9uKTe0fm4Ib4RHn6uQ==} - object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} - object-hash@2.2.0: - resolution: {integrity: sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==} - engines: {node: '>= 6'} - object-inspect@1.13.4: resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} engines: {node: '>= 0.4'} @@ -4550,13 +4244,6 @@ packages: objectorarray@1.0.5: resolution: {integrity: sha512-eJJDYkhJFFbBBAxeh8xW+weHlkI28n2ZdQV/J/DNfWfSKlGEf2xcfAbZTv3riEXHAhL9SVOTs2pRmXiSTf78xg==} - obuf@1.1.2: - resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==} - - oidc-token-hash@5.1.0: - resolution: {integrity: sha512-y0W+X7Ppo7oZX6eovsRkuzcSM40Bicg2JEJkDJ4irIt1wsYAP5MLSNv+QAogO8xivMffw/9OvV3um1pxXgt1uA==} - engines: {node: ^10.13.0 || >=12.0.0} - once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} @@ -4564,9 +4251,6 @@ packages: resolution: {integrity: sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==} engines: {node: '>=18'} - openid-client@5.7.1: - resolution: {integrity: sha512-jDBPgSVfTnkIh71Hg9pRvtJc6wTwqjRkN88+gCFtYWrlP4Yx2Dsrow8uPi3qLr/aeymPF3o2+dS+wOpglK04ew==} - optionator@0.9.4: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} @@ -4670,21 +4354,6 @@ packages: resolution: {integrity: sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==} engines: {node: '>=0.12'} - pg-int8@1.0.1: - resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==} - engines: {node: '>=4.0.0'} - - pg-numeric@1.0.2: - resolution: {integrity: sha512-BM/Thnrw5jm2kKLE5uJkXqqExRUY/toLHda65XgFTBTFYZyopbKjBe29Ii3RbkvlsMoFwD+tHeGaCjjv0gHlyw==} - engines: {node: '>=4'} - - pg-protocol@1.8.0: - resolution: {integrity: sha512-jvuYlEkL03NRvOoyoRktBK7+qU5kOvlAwvmrH8sr3wbLrOdVWsRxQfz8mMy9sZFsqJ1hEWNfdWKI4SAmoL+j7g==} - - pg-types@4.0.2: - resolution: {integrity: sha512-cRL3JpS3lKMGsKaWndugWQoLOCoP+Cic8oseVcbr0qhPzYD5DWXK+RZ9LY9wxRf7RQia4SCwQlXk0q6FCPrVng==} - engines: {node: '>=10'} - picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -4764,25 +4433,6 @@ packages: resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} engines: {node: ^10 || ^12 || >=14} - postgres-array@3.0.4: - resolution: {integrity: sha512-nAUSGfSDGOaOAEGwqsRY27GPOea7CNipJPOA7lPbdEpx5Kg3qzdP0AaWC5MlhTWV9s4hFX39nomVZ+C4tnGOJQ==} - engines: {node: '>=12'} - - postgres-bytea@3.0.0: - resolution: {integrity: sha512-CNd4jim9RFPkObHSjVHlVrxoVQXz7quwNFpz7RY1okNNme49+sVyiTvTRobiLV548Hx/hb1BG+iE7h9493WzFw==} - engines: {node: '>= 6'} - - postgres-date@2.1.0: - resolution: {integrity: sha512-K7Juri8gtgXVcDfZttFKVmhglp7epKb1K4pgrkLxehjqkrgPhfG6OO8LHLkfaqkbpjNRnra018XwAr1yQFWGcA==} - engines: {node: '>=12'} - - postgres-interval@3.0.0: - resolution: {integrity: sha512-BSNDnbyZCXSxgA+1f5UU2GmwhoI0aU5yMxRGO8CdFEcY2BQF9xm/7MqKnYoM1nJDk8nONNWDk9WeSmePFhQdlw==} - engines: {node: '>=12'} - - postgres-range@1.1.4: - resolution: {integrity: sha512-i/hbxIE9803Alj/6ytL7UHQxRvZkI9O4Sy+J3HGc4F4oo/2eQAjTSNJ0bfxyse3bH0nuVesCk+3IRLaMtG3H6w==} - prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} @@ -5587,9 +5237,6 @@ packages: uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - url-join@4.0.1: - resolution: {integrity: sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==} - url@0.11.4: resolution: {integrity: sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg==} engines: {node: '>= 0.4'} @@ -5826,9 +5473,6 @@ packages: yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - yallist@4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - yallist@5.0.0: resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==} engines: {node: '>=18'} @@ -5876,21 +5520,6 @@ snapshots: '@csstools/css-tokenizer': 3.0.3 lru-cache: 10.4.3 - '@auth0/nextjs-auth0@3.7.0(next@16.1.0(@babel/core@7.28.5)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))': - dependencies: - '@panva/hkdf': 1.2.1 - cookie: 0.7.2 - debug: 4.4.0 - joi: 17.13.3 - jose: 4.15.9 - next: 16.1.0(@babel/core@7.28.5)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - oauth4webapi: 2.17.0 - openid-client: 5.7.1 - tslib: 2.8.1 - url-join: 4.0.1 - transitivePeerDependencies: - - supports-color - '@babel/code-frame@7.27.1': dependencies: '@babel/helper-validator-identifier': 7.27.1 @@ -6701,8 +6330,6 @@ snapshots: '@csstools/css-tokenizer@3.0.3': {} - '@drizzle-team/brocli@0.10.2': {} - '@emnapi/core@1.4.3': dependencies: '@emnapi/wasi-threads': 1.0.2 @@ -6802,154 +6429,78 @@ snapshots: '@emotion/weak-memoize@0.4.0': {} - '@esbuild-kit/core-utils@3.3.2': - dependencies: - esbuild: 0.18.20 - source-map-support: 0.5.21 - - '@esbuild-kit/esm-loader@2.6.5': - dependencies: - '@esbuild-kit/core-utils': 3.3.2 - get-tsconfig: 4.10.1 - '@esbuild/aix-ppc64@0.25.4': optional: true - '@esbuild/android-arm64@0.18.20': - optional: true - '@esbuild/android-arm64@0.25.4': optional: true - '@esbuild/android-arm@0.18.20': - optional: true - '@esbuild/android-arm@0.25.4': optional: true - '@esbuild/android-x64@0.18.20': - optional: true - '@esbuild/android-x64@0.25.4': optional: true - '@esbuild/darwin-arm64@0.18.20': - optional: true - '@esbuild/darwin-arm64@0.25.4': optional: true - '@esbuild/darwin-x64@0.18.20': - optional: true - '@esbuild/darwin-x64@0.25.4': optional: true - '@esbuild/freebsd-arm64@0.18.20': - optional: true - '@esbuild/freebsd-arm64@0.25.4': optional: true - '@esbuild/freebsd-x64@0.18.20': - optional: true - '@esbuild/freebsd-x64@0.25.4': optional: true - '@esbuild/linux-arm64@0.18.20': - optional: true - '@esbuild/linux-arm64@0.25.4': optional: true - '@esbuild/linux-arm@0.18.20': - optional: true - '@esbuild/linux-arm@0.25.4': optional: true - '@esbuild/linux-ia32@0.18.20': - optional: true - '@esbuild/linux-ia32@0.25.4': optional: true - '@esbuild/linux-loong64@0.18.20': - optional: true - '@esbuild/linux-loong64@0.25.4': optional: true - '@esbuild/linux-mips64el@0.18.20': - optional: true - '@esbuild/linux-mips64el@0.25.4': optional: true - '@esbuild/linux-ppc64@0.18.20': - optional: true - '@esbuild/linux-ppc64@0.25.4': optional: true - '@esbuild/linux-riscv64@0.18.20': - optional: true - '@esbuild/linux-riscv64@0.25.4': optional: true - '@esbuild/linux-s390x@0.18.20': - optional: true - '@esbuild/linux-s390x@0.25.4': optional: true - '@esbuild/linux-x64@0.18.20': - optional: true - '@esbuild/linux-x64@0.25.4': optional: true '@esbuild/netbsd-arm64@0.25.4': optional: true - '@esbuild/netbsd-x64@0.18.20': - optional: true - '@esbuild/netbsd-x64@0.25.4': optional: true '@esbuild/openbsd-arm64@0.25.4': optional: true - '@esbuild/openbsd-x64@0.18.20': - optional: true - '@esbuild/openbsd-x64@0.25.4': optional: true - '@esbuild/sunos-x64@0.18.20': - optional: true - '@esbuild/sunos-x64@0.25.4': optional: true - '@esbuild/win32-arm64@0.18.20': - optional: true - '@esbuild/win32-arm64@0.25.4': optional: true - '@esbuild/win32-ia32@0.18.20': - optional: true - '@esbuild/win32-ia32@0.25.4': optional: true - '@esbuild/win32-x64@0.18.20': - optional: true - '@esbuild/win32-x64@0.25.4': optional: true @@ -6999,12 +6550,6 @@ snapshots: '@fontsource/roboto@5.2.5': {} - '@hapi/hoek@9.3.0': {} - - '@hapi/topo@5.1.0': - dependencies: - '@hapi/hoek': 9.3.0 - '@humanfs/core@0.19.1': {} '@humanfs/node@0.16.6': @@ -7248,10 +6793,6 @@ snapshots: '@neoconfetti/react@1.0.0': {} - '@neondatabase/serverless@0.10.4': - dependencies: - '@types/pg': 8.11.6 - '@next/env@13.5.9': {} '@next/env@16.1.0': {} @@ -7304,8 +6845,6 @@ snapshots: '@nolyfill/is-core-module@1.0.39': {} - '@panva/hkdf@1.2.1': {} - '@pmmmwh/react-refresh-webpack-plugin@0.5.16(react-refresh@0.14.2)(type-fest@2.19.0)(webpack-hot-middleware@2.26.1)(webpack@5.99.9(esbuild@0.25.4))': dependencies: ansi-html: 0.0.9 @@ -7387,14 +6926,6 @@ snapshots: '@rtsao/scc@1.1.0': {} - '@sideway/address@4.1.5': - dependencies: - '@hapi/hoek': 9.3.0 - - '@sideway/formula@3.0.1': {} - - '@sideway/pinpoint@2.0.0': {} - '@storybook/addon-docs@10.1.10(@types/react@19.2.7)(esbuild@0.25.4)(rollup@4.41.1)(storybook@10.1.10(@testing-library/dom@10.4.0)(prettier@3.5.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@6.3.5(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.2))(webpack@5.99.9(esbuild@0.25.4))': dependencies: '@mdx-js/react': 3.1.0(@types/react@19.2.7)(react@19.2.3) @@ -7799,12 +7330,6 @@ snapshots: '@types/parse-json@4.0.2': {} - '@types/pg@8.11.6': - dependencies: - '@types/node': 22.15.21 - pg-protocol: 1.8.0 - pg-types: 4.0.2 - '@types/prop-types@15.7.14': {} '@types/react-dom@19.2.3(@types/react@19.2.7)': @@ -8644,8 +8169,6 @@ snapshots: convert-source-map@2.0.0: {} - cookie@0.7.2: {} - core-js-compat@3.42.0: dependencies: browserslist: 4.24.5 @@ -8917,20 +8440,6 @@ snapshots: dotenv@16.4.7: {} - drizzle-kit@0.31.1: - dependencies: - '@drizzle-team/brocli': 0.10.2 - '@esbuild-kit/esm-loader': 2.6.5 - esbuild: 0.25.4 - esbuild-register: 3.6.0(esbuild@0.25.4) - transitivePeerDependencies: - - supports-color - - drizzle-orm@0.39.3(@neondatabase/serverless@0.10.4)(@types/pg@8.11.6): - optionalDependencies: - '@neondatabase/serverless': 0.10.4 - '@types/pg': 8.11.6 - dunder-proto@1.0.1: dependencies: call-bind-apply-helpers: 1.0.2 @@ -9135,38 +8644,6 @@ snapshots: is-date-object: 1.1.0 is-symbol: 1.1.1 - esbuild-register@3.6.0(esbuild@0.25.4): - dependencies: - debug: 4.4.1 - esbuild: 0.25.4 - transitivePeerDependencies: - - supports-color - - esbuild@0.18.20: - 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 - esbuild@0.25.4: optionalDependencies: '@esbuild/aix-ppc64': 0.25.4 @@ -10061,16 +9538,6 @@ snapshots: jiti@2.4.2: {} - joi@17.13.3: - dependencies: - '@hapi/hoek': 9.3.0 - '@hapi/topo': 5.1.0 - '@sideway/address': 4.1.5 - '@sideway/formula': 3.0.1 - '@sideway/pinpoint': 2.0.0 - - jose@4.15.9: {} - js-tokens@4.0.0: {} js-yaml@3.14.1: @@ -10254,10 +9721,6 @@ snapshots: dependencies: yallist: 3.1.1 - lru-cache@6.0.0: - dependencies: - yallist: 4.0.0 - lz-string@1.5.0: {} magic-string@0.30.17: @@ -10764,12 +10227,8 @@ snapshots: nwsapi@2.2.20: {} - oauth4webapi@2.17.0: {} - object-assign@4.1.1: {} - object-hash@2.2.0: {} - object-inspect@1.13.4: {} object-is@1.1.6: @@ -10817,10 +10276,6 @@ snapshots: objectorarray@1.0.5: {} - obuf@1.1.2: {} - - oidc-token-hash@5.1.0: {} - once@1.4.0: dependencies: wrappy: 1.0.2 @@ -10832,13 +10287,6 @@ snapshots: is-inside-container: 1.0.0 wsl-utils: 0.1.0 - openid-client@5.7.1: - dependencies: - jose: 4.15.9 - lru-cache: 6.0.0 - object-hash: 2.2.0 - oidc-token-hash: 5.1.0 - optionator@0.9.4: dependencies: deep-is: 0.1.4 @@ -10954,22 +10402,6 @@ snapshots: safe-buffer: 5.2.1 sha.js: 2.4.11 - pg-int8@1.0.1: {} - - pg-numeric@1.0.2: {} - - pg-protocol@1.8.0: {} - - pg-types@4.0.2: - dependencies: - pg-int8: 1.0.1 - pg-numeric: 1.0.2 - postgres-array: 3.0.4 - postgres-bytea: 3.0.0 - postgres-date: 2.1.0 - postgres-interval: 3.0.0 - postgres-range: 1.1.4 - picocolors@1.1.1: {} picomatch@2.3.1: {} @@ -11039,18 +10471,6 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 - postgres-array@3.0.4: {} - - postgres-bytea@3.0.0: - dependencies: - obuf: 1.1.2 - - postgres-date@2.1.0: {} - - postgres-interval@3.0.0: {} - - postgres-range@1.1.4: {} - prelude-ls@1.2.1: {} prettier@3.5.3: {} @@ -12037,8 +11457,6 @@ snapshots: dependencies: punycode: 2.3.1 - url-join@4.0.1: {} - url@0.11.4: dependencies: punycode: 1.4.1 @@ -12316,8 +11734,6 @@ snapshots: yallist@3.1.1: {} - yallist@4.0.0: {} - yallist@5.0.0: {} yaml@1.10.2: {} diff --git a/scripts/delete-preview-deployment.sh b/scripts/delete-preview-deployment.sh deleted file mode 100755 index e3d2b6c7..00000000 --- a/scripts/delete-preview-deployment.sh +++ /dev/null @@ -1,35 +0,0 @@ -#!/bin/bash -# Set the pipefail option. -set -o pipefail - -PR_ID="${1}" - -# Get the Vercel API endpoints. -GET_DEPLOYMENTS_ENDPOINT="https://api.vercel.com/v6/deployments" -DELETE_DEPLOYMENTS_ENDPOINT="https://api.vercel.com/v13/deployments" - -# Create a list of deployments. -deployments=$(curl -s -X GET "$GET_DEPLOYMENTS_ENDPOINT/?projectId=$VERCEL_PROJECT_ID" -H "Authorization: Bearer $VERCEL_TOKEN ") - -# Filter the deployments list by meta.githubPrId == PR_ID. -filtered_deployments=$(echo "${deployments}" | jq --arg PR_ID "${PR_ID}" '[.deployments[] | select(.meta.githubPrId | type == "string" and contains($PR_ID)) | .uid] | join(",")') -filtered_deployments="${filtered_deployments//\"/}" # Remove double quotes - -# Clears the values from filtered_deployments -IFS=',' read -ra values <<<"$filtered_deployments" - -echo "PR ID: $PR_ID" -echo "Filtered deployments: ${filtered_deployments}" - -# Iterate over the filtered deployments list. -for uid in "${values[@]}"; do - echo "Deleting Deployment ID: ${uid}" - - delete_url="${DELETE_DEPLOYMENTS_ENDPOINT}/${uid}?projectId=${VERCEL_PROJECT_ID}" - echo "Delete URL: ${delete_url}" - - # Make DELETE a request to the /v13/deployments/{id} endpoint. - curl -X DELETE "$delete_url" -H "Authorization: Bearer $VERCEL_TOKEN" - - echo "Deleted!" -done \ No newline at end of file