From 3e90559ad2a24fa1e2355e9b6831e1017007d09a Mon Sep 17 00:00:00 2001 From: AliAkram7 Date: Fri, 30 Aug 2024 12:29:16 +0100 Subject: [PATCH] add appshell layout --- app/(admin)/layout.module.css | 8 - app/(admin)/layout.tsx | 41 ++-- app/login/page.tsx | 11 +- component/linkGroups/index.tsx | 39 ++-- component/navbar/index.tsx | 63 +++--- component/navbar/navbar.module.css | 4 +- component/sidbar/index.tsx | 43 ++-- component/sidbar/navbarnestd.module.css | 22 +- package-lock.json | 197 ++++++++-------- package.json | 16 +- utils/supabase/client.ts | 3 +- utils/supabase/middleware.ts | 104 ++++----- utils/supabase/server.ts | 37 ++- yarn.lock | 284 +++++++++++------------- 14 files changed, 413 insertions(+), 459 deletions(-) delete mode 100644 app/(admin)/layout.module.css diff --git a/app/(admin)/layout.module.css b/app/(admin)/layout.module.css deleted file mode 100644 index 4f6b8a3..0000000 --- a/app/(admin)/layout.module.css +++ /dev/null @@ -1,8 +0,0 @@ - -.pages { - width: 75%; - @media (max-width: $mantine-breakpoint-sm) { - width: 100%; - padding: 0px; - } -} \ No newline at end of file diff --git a/app/(admin)/layout.tsx b/app/(admin)/layout.tsx index 3402d91..01f6d3e 100644 --- a/app/(admin)/layout.tsx +++ b/app/(admin)/layout.tsx @@ -1,12 +1,14 @@ import React, { ReactNode } from "react"; import { Header } from "../../component/navbar"; -import { Container, Flex, } from "@mantine/core"; -import { NavbarNested } from "../../component/sidbar"; + import { createClient } from "../../utils/supabase/server"; -import { redirect, usePathname } from "next/navigation"; +import { redirect } from "next/navigation"; import PageTitle from "../../component/pageTitle"; -import classes from "./layout.module.css"; + + +import AppShellLayout from "../../component/AppShellLayout"; +import { AppShellMain } from "@mantine/core"; export default async function AdminLayout({ children, @@ -22,30 +24,13 @@ export default async function AdminLayout({ return ( <> -
-
-
- - -
- - -
- - -
- - {children} -
-
-
+ + + + + {children} + + ); } diff --git a/app/login/page.tsx b/app/login/page.tsx index b844965..e3b60cf 100644 --- a/app/login/page.tsx +++ b/app/login/page.tsx @@ -1,6 +1,6 @@ import React from "react"; import { LoginCard } from "../../component/loginCard"; -import { Alert } from "@mantine/core"; +import { Alert, AppShell, AppShellMain } from "@mantine/core"; import { IconAlertTriangle } from "@tabler/icons-react"; import { createClient } from "../../utils/supabase/server"; import { redirect } from "next/navigation"; @@ -25,9 +25,12 @@ export default async function LoginPage({ searchParams }: Props) { {searchParams.error} ) : null} - -
- + +
+ + + + ); } diff --git a/component/linkGroups/index.tsx b/component/linkGroups/index.tsx index f735d02..1ea9aba 100644 --- a/component/linkGroups/index.tsx +++ b/component/linkGroups/index.tsx @@ -34,7 +34,7 @@ export function LinksGroup({ const [opened, setOpened] = useState(initiallyOpened || false); const items = (hasLinks ? links : []).map((link) => ( - {label} + + {label} + @@ -65,20 +68,20 @@ export function LinksGroup({ ); } -const mockdata = { - label: "Releases", - icon: IconCalendarStats, - links: [ - { label: "Upcoming releases", link: "/" }, - { label: "Previous releases", link: "/" }, - { label: "Releases schedule", link: "/" }, - ], -}; +// const mockdata = { +// label: "Releases", +// icon: IconCalendarStats, +// links: [ +// { label: "Upcoming releases", link: "/" }, +// { label: "Previous releases", link: "/" }, +// { label: "Releases schedule", link: "/" }, +// ], +// }; -export function NavbarLinksGroup() { - return ( - - - - ); -} +// export function NavbarLinksGroup() { +// return ( +// +// +// +// ); +// } diff --git a/component/navbar/index.tsx b/component/navbar/index.tsx index 57f9e76..28bde94 100644 --- a/component/navbar/index.tsx +++ b/component/navbar/index.tsx @@ -1,5 +1,14 @@ "use client"; -import { Group, Burger, Title, Drawer, Text, useMantineColorScheme, useComputedColorScheme } from "@mantine/core"; +import { + Group, + Burger, + Title, + Drawer, + Text, + useMantineColorScheme, + useComputedColorScheme, + AppShellHeader, +} from "@mantine/core"; import { useDisclosure } from "@mantine/hooks"; import classes from "./navbar.module.css"; import { ScrollArea } from "@mantine/core"; @@ -21,34 +30,31 @@ import { useEffect, useState } from "react"; import { Session, User } from "@supabase/supabase-js"; import { modals } from "@mantine/modals"; -export function Header() { - const [opened, { toggle }] = useDisclosure(false); +type Props = { + opened?: boolean; + toggle?: () => void; +}; + +export function Header({ opened, toggle }: Props) { + // const [opened, { toggle }] = useDisclosure(false); const pathname = usePathname(); const leading = pathname.split("/")[1] !== "login" ? ( - + ) : ( ); return ( <> -
-
- - {leading} - Student Management System - -
-
- - {pathname.split("/")[1] !== "login" && ( - - - - )} + + + {leading} + Student Management System + + ); } @@ -91,14 +97,11 @@ export function NavbarNested({ toggle }: { toggle: () => void }) { )); - - const { setColorScheme } = useMantineColorScheme(); const computedColorScheme = useComputedColorScheme("light", { getInitialValueInEffect: true, }); - const openLogoutModal = () => modals.openConfirmModal({ title: "Sign-out", @@ -106,7 +109,7 @@ export function NavbarNested({ toggle }: { toggle: () => void }) { children: Are you sure you want to sign-out?, labels: { confirm: "Sign-out", cancel: "Cancel" }, confirmProps: { color: "red" }, - onConfirm: async () => { + onConfirm: async () => { await supabase.auth.signOut(); router.refresh(); }, @@ -114,20 +117,20 @@ export function NavbarNested({ toggle }: { toggle: () => void }) { return ( diff --git a/component/navbar/navbar.module.css b/component/navbar/navbar.module.css index 50c0851..4f300a3 100644 --- a/component/navbar/navbar.module.css +++ b/component/navbar/navbar.module.css @@ -1,5 +1,5 @@ .header { - height: rem(56px); + /* height: rem(56px); */ width: 100%; z-index: calc(var(--mantine-z-index-max) ); @@ -10,7 +10,7 @@ .inner { - border-bottom: rem(1px) solid light-dark(var(--mantine-color-gray-3), var(--mantine-color-dark-4)); + /* border-bottom: rem(1px) solid light-dark(var(--mantine-color-gray-3), var(--mantine-color-dark-4)); */ height: rem(56px); display: flex; justify-content: space-between; diff --git a/component/sidbar/index.tsx b/component/sidbar/index.tsx index 73f6294..0309c78 100644 --- a/component/sidbar/index.tsx +++ b/component/sidbar/index.tsx @@ -1,6 +1,11 @@ "use client"; -import { ScrollArea, Text, useComputedColorScheme, useMantineColorScheme } from "@mantine/core"; +import { + ScrollArea, + Text, + useComputedColorScheme, + useMantineColorScheme, +} from "@mantine/core"; import { IconNotes, IconCalendarStats, @@ -37,13 +42,20 @@ const mockdata = [ { label: "account", icon: IconSettings, link: "/account" }, ]; -export function NavbarNested() { +export function NavbarNested({ toggle }: { toggle?: () => void }) { const supabase = createClient(); const router = useRouter(); const links = mockdata.map((item) => ( - +
{ + toggle && toggle(); + }} + > + +
)); const openLogoutModal = () => @@ -59,35 +71,32 @@ export function NavbarNested() { }, }); - - - - const { setColorScheme } = useMantineColorScheme(); - const computedColorScheme = useComputedColorScheme("light", { - getInitialValueInEffect: true, - }); + const { setColorScheme } = useMantineColorScheme(); + const computedColorScheme = useComputedColorScheme("light", { + getInitialValueInEffect: true, + }); return ( <> ); diff --git a/component/sidbar/navbarnestd.module.css b/component/sidbar/navbarnestd.module.css index 21608b8..b2f41db 100644 --- a/component/sidbar/navbarnestd.module.css +++ b/component/sidbar/navbarnestd.module.css @@ -1,20 +1,14 @@ .navbar { - background-color: light-dark(var(--mantine-color-white), var(--mantine-color-dark-6)); height: calc(100vh - rem(56px)) ; - width: rem(200px); /* width: 20%; */ padding: var(--mantine-spacing-md); - padding-top: 0; - padding-bottom: 0; - display: flex; - flex-direction: column; - border-right: rem(1px) solid light-dark(var(--mantine-color-gray-3), var(--mantine-color-dark-4)); - position: sticky; + padding-top: 16px; + padding-bottom: 16px; + /* display: flex; */ + /* flex-direction: column; */ + /* position: sticky; */ top: rem(56px); - @media (max-width: $mantine-breakpoint-sm) { - display: none; - } } @@ -28,9 +22,9 @@ } .links { - flex: 1; - margin-left: calc(var(--mantine-spacing-md) * -1); - margin-right: calc(var(--mantine-spacing-md) * -1); + /* flex: 1; */ + /* margin-left: calc(var(--mantine-spacing-md) * -1); */ + /* margin-right: calc(var(--mantine-spacing-md) * -1); */ } diff --git a/package-lock.json b/package-lock.json index 01fa6c9..e9bb608 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,14 +8,14 @@ "name": "mantine-minimal-next-template", "version": "0.1.0", "dependencies": { - "@mantine/core": "7.7.1", - "@mantine/dates": "^7.7.1", - "@mantine/form": "^7.7.1", - "@mantine/hooks": "7.7.1", - "@mantine/modals": "^7.7.1", - "@supabase/ssr": "^0.3.0", - "@supabase/supabase-js": "^2.42.1", - "@tabler/icons-react": "^3.1.0", + "@mantine/core": "^7.12.1", + "@mantine/dates": "^7.12.1", + "@mantine/form": "^7.12.1", + "@mantine/hooks": "^7.12.1", + "@mantine/modals": "^7.12.1", + "@supabase/ssr": "^0.5.1", + "@supabase/supabase-js": "^2.45.2", + "@tabler/icons-react": "^3.14.0", "next": "14.1.3", "react": "18.2.0", "react-dom": "18.2.0" @@ -234,42 +234,45 @@ } }, "node_modules/@mantine/core": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/@mantine/core/-/core-7.7.1.tgz", - "integrity": "sha512-SdPzjvqvEK7uHFuVD3a8w3OZyQVoCwIXLSUfOtRNouDMQgsq6Ac7QjKXBBOk3wNweOWFVOU1vATLHobSmow0lQ==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@mantine/core/-/core-7.12.1.tgz", + "integrity": "sha512-PXKIDaT1fpNB77dPQIcdFGM2NRnfmsJSVx3uuBccngBQWMIWI0wPyiO1Y26DK4LQrbrypeb+TS+Zxpgx6RoiCA==", + "license": "MIT", "dependencies": { "@floating-ui/react": "^0.26.9", - "clsx": "2.1.0", + "clsx": "^2.1.1", "react-number-format": "^5.3.1", "react-remove-scroll": "^2.5.7", "react-textarea-autosize": "8.5.3", "type-fest": "^4.12.0" }, "peerDependencies": { - "@mantine/hooks": "7.7.1", + "@mantine/hooks": "7.12.1", "react": "^18.2.0", "react-dom": "^18.2.0" } }, "node_modules/@mantine/dates": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/@mantine/dates/-/dates-7.7.1.tgz", - "integrity": "sha512-SIeC11HUTiMAExlReFYHXSkTaVjkk1i7+QvLtxJkd3lxn6X1vHuPVV4j4c9AED8oZI5QEmoVcYc/03Eud2FoAg==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@mantine/dates/-/dates-7.12.1.tgz", + "integrity": "sha512-+Dg5ZGoYPWYRWPY7HagLeW36ayVjKQIkTpdNvgGDwh5YpaFy5cHd6LK6USKUshTsRPuzM3oUKwXIBK8hsigMyA==", + "license": "MIT", "dependencies": { - "clsx": "2.1.0" + "clsx": "^2.1.1" }, "peerDependencies": { - "@mantine/core": "7.7.1", - "@mantine/hooks": "7.7.1", + "@mantine/core": "7.12.1", + "@mantine/hooks": "7.12.1", "dayjs": ">=1.0.0", "react": "^18.2.0", "react-dom": "^18.2.0" } }, "node_modules/@mantine/form": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/@mantine/form/-/form-7.7.1.tgz", - "integrity": "sha512-NRbVdHsbs634dZIq6IQhqL0uCtF4nYK3OPuPhkBzQ3faqri7TZvYgVQU4KGFTMqPl0UdwC6TkrnnqTZBK6HJMw==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@mantine/form/-/form-7.12.1.tgz", + "integrity": "sha512-Q+lpgG9N8srlsI0IPnD1V1c2ZaI0xmR3bBEVm+LttSos6Q5zkG49Yy011mc0cXzEKUk2h48j8PLoPHfSEzO03g==", + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", "klona": "^2.0.6" @@ -279,20 +282,22 @@ } }, "node_modules/@mantine/hooks": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/@mantine/hooks/-/hooks-7.7.1.tgz", - "integrity": "sha512-3YH2FzKMlg840tb04PBDcDXyBCi9puFOxEBVgc6Y/pN6KFqfOoAnQE/YvgOtwSNXZlbTWyDlQoYj+3je7pA7og==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@mantine/hooks/-/hooks-7.12.1.tgz", + "integrity": "sha512-YPA3qiMHJkWID5+YzakBaLvjHtX3Fg3PdPY49iIb/CaWM9+lrJ+77TOVS7bsY7ZTBHXUfzft1/6Woqt3xSuweA==", + "license": "MIT", "peerDependencies": { "react": "^18.2.0" } }, "node_modules/@mantine/modals": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/@mantine/modals/-/modals-7.7.1.tgz", - "integrity": "sha512-r7Zk6gZnUNiEEwbnzhIue+d8qjVDmV3umX5/FZgW0ugyB6U8C+ZIPDTlHUaPOF45F+Pu1ahdlK6N+YoRT/lxSg==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@mantine/modals/-/modals-7.12.1.tgz", + "integrity": "sha512-olS07yDcCFLGylLGaQgBiTnKcRrUZVLKqBFBw5glcmc/wZmJf4SDMgx5mxSwBnsbJOwJ2d3aIYwO/qNTNnluSg==", + "license": "MIT", "peerDependencies": { - "@mantine/core": "7.7.1", - "@mantine/hooks": "7.7.1", + "@mantine/core": "7.12.1", + "@mantine/hooks": "7.12.1", "react": "^18.2.0", "react-dom": "^18.2.0" } @@ -498,17 +503,19 @@ "dev": true }, "node_modules/@supabase/auth-js": { - "version": "2.63.0", - "resolved": "https://registry.npmjs.org/@supabase/auth-js/-/auth-js-2.63.0.tgz", - "integrity": "sha512-yIgcHnlgv24GxHtVGUhwGqAFDyJkPIC/xjx7HostN08A8yCy8HIfl4JEkTKyBqD1v1L05jNEJOUke4Lf4O1+Qg==", + "version": "2.64.4", + "resolved": "https://registry.npmjs.org/@supabase/auth-js/-/auth-js-2.64.4.tgz", + "integrity": "sha512-9ITagy4WP4FLl+mke1rchapOH0RQpf++DI+WSG2sO1OFOZ0rW3cwAM0nCrMOxu+Zw4vJ4zObc08uvQrXx590Tg==", + "license": "MIT", "dependencies": { "@supabase/node-fetch": "^2.6.14" } }, "node_modules/@supabase/functions-js": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@supabase/functions-js/-/functions-js-2.2.2.tgz", - "integrity": "sha512-sJGq1nludmi7pY/fdtCpyY/pYonx7MfHdN408bqb736guWcVI1AChYVbI4kUM978EuOE4Ci6l7bUudfGg07QRw==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@supabase/functions-js/-/functions-js-2.4.1.tgz", + "integrity": "sha512-8sZ2ibwHlf+WkHDUZJUXqqmPvWQ3UHN0W30behOJngVh/qHHekhJLCFbh0AjkE9/FqqXtf9eoVvmYgfCLk5tNA==", + "license": "MIT", "dependencies": { "@supabase/node-fetch": "^2.6.14" } @@ -517,6 +524,7 @@ "version": "2.6.15", "resolved": "https://registry.npmjs.org/@supabase/node-fetch/-/node-fetch-2.6.15.tgz", "integrity": "sha512-1ibVeYUacxWYi9i0cf5efil6adJ9WRyZBLivgjs+AUpewx1F3xPi7gLgaASI2SmIQxPoCEjAsLAzKPgMJVgOUQ==", + "license": "MIT", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -525,17 +533,19 @@ } }, "node_modules/@supabase/postgrest-js": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/@supabase/postgrest-js/-/postgrest-js-1.15.1.tgz", - "integrity": "sha512-H/4PABAAgMrEIo7oewUZiZMy422Pgc19OLVjU8Vwopcvfr3GD7h8Re4VXtiaPPZqc/2z/k3PnyguFnoKIB7fkA==", + "version": "1.15.8", + "resolved": "https://registry.npmjs.org/@supabase/postgrest-js/-/postgrest-js-1.15.8.tgz", + "integrity": "sha512-YunjXpoQjQ0a0/7vGAvGZA2dlMABXFdVI/8TuVKtlePxyT71sl6ERl6ay1fmIeZcqxiuFQuZw/LXUuStUG9bbg==", + "license": "MIT", "dependencies": { "@supabase/node-fetch": "^2.6.14" } }, "node_modules/@supabase/realtime-js": { - "version": "2.9.3", - "resolved": "https://registry.npmjs.org/@supabase/realtime-js/-/realtime-js-2.9.3.tgz", - "integrity": "sha512-lAp50s2n3FhGJFq+wTSXLNIDPw5Y0Wxrgt44eM5nLSA3jZNUUP3Oq2Ccd1CbZdVntPCWLZvJaU//pAd2NE+QnQ==", + "version": "2.10.2", + "resolved": "https://registry.npmjs.org/@supabase/realtime-js/-/realtime-js-2.10.2.tgz", + "integrity": "sha512-qyCQaNg90HmJstsvr2aJNxK2zgoKh9ZZA8oqb7UT2LCh3mj9zpa3Iwu167AuyNxsxrUE8eEJ2yH6wLCij4EApA==", + "license": "MIT", "dependencies": { "@supabase/node-fetch": "^2.6.14", "@types/phoenix": "^1.5.4", @@ -544,36 +554,38 @@ } }, "node_modules/@supabase/ssr": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@supabase/ssr/-/ssr-0.3.0.tgz", - "integrity": "sha512-lcVyQ7H6eumb2FB1Wa2N+jYWMfq6CFza3KapikT0fgttMQ+QvDgpNogx9jI8bZgKds+XFSMCojxFvFb+gwdbfA==", + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@supabase/ssr/-/ssr-0.5.1.tgz", + "integrity": "sha512-+G94H/GZG0nErZ3FQV9yJmsC5Rj7dmcfCAwOt37hxeR1La+QTl8cE9whzYwPUrTJjMLGNXoO+1BMvVxwBAbz4g==", + "license": "MIT", "dependencies": { - "cookie": "^0.5.0", - "ramda": "^0.29.0" + "cookie": "^0.6.0" }, "peerDependencies": { - "@supabase/supabase-js": "^2.33.1" + "@supabase/supabase-js": "^2.43.4" } }, "node_modules/@supabase/storage-js": { - "version": "2.5.5", - "resolved": "https://registry.npmjs.org/@supabase/storage-js/-/storage-js-2.5.5.tgz", - "integrity": "sha512-OpLoDRjFwClwc2cjTJZG8XviTiQH4Ik8sCiMK5v7et0MDu2QlXjCAW3ljxJB5+z/KazdMOTnySi+hysxWUPu3w==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/@supabase/storage-js/-/storage-js-2.7.0.tgz", + "integrity": "sha512-iZenEdO6Mx9iTR6T7wC7sk6KKsoDPLq8rdu5VRy7+JiT1i8fnqfcOr6mfF2Eaqky9VQzhP8zZKQYjzozB65Rig==", + "license": "MIT", "dependencies": { "@supabase/node-fetch": "^2.6.14" } }, "node_modules/@supabase/supabase-js": { - "version": "2.42.1", - "resolved": "https://registry.npmjs.org/@supabase/supabase-js/-/supabase-js-2.42.1.tgz", - "integrity": "sha512-y05XIC6wChApz8BWE2TLUo6SBGp9ttbjhQ9DcQXI897vI3RRPIjm3wZqUoZiexUco+kgt3Em53+m55nB8Um6Sg==", + "version": "2.45.2", + "resolved": "https://registry.npmjs.org/@supabase/supabase-js/-/supabase-js-2.45.2.tgz", + "integrity": "sha512-kJKY3ISFusVKQWCP8Kqo20Ebxy2WLp6Ry/Suco0aQsPXH7bvn7clswsdhcfcH/5Tr0MYz/jcCjF0n/27SetiCw==", + "license": "MIT", "dependencies": { - "@supabase/auth-js": "2.63.0", - "@supabase/functions-js": "2.2.2", + "@supabase/auth-js": "2.64.4", + "@supabase/functions-js": "2.4.1", "@supabase/node-fetch": "2.6.15", - "@supabase/postgrest-js": "1.15.1", - "@supabase/realtime-js": "2.9.3", - "@supabase/storage-js": "2.5.5" + "@supabase/postgrest-js": "1.15.8", + "@supabase/realtime-js": "2.10.2", + "@supabase/storage-js": "2.7.0" } }, "node_modules/@swc/helpers": { @@ -585,20 +597,22 @@ } }, "node_modules/@tabler/icons": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@tabler/icons/-/icons-3.1.0.tgz", - "integrity": "sha512-CpZGyS1IVJKFcv88yZ2sYZIpWWhQ6oy76BQKQ5SF0fGgOqgyqKdBGG/YGyyMW632on37MX7VqQIMTzN/uQqmFg==", + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/@tabler/icons/-/icons-3.14.0.tgz", + "integrity": "sha512-OakKjK1kuDWKoNwdnHHVMt11kTZAC10iZpN/8o/CSYdeBH7S3v5n8IyqAYynFxLI8yBGTyBvljtvWdmWh57zSg==", + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/codecalm" } }, "node_modules/@tabler/icons-react": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@tabler/icons-react/-/icons-react-3.1.0.tgz", - "integrity": "sha512-k/WTlax2vbj/LpxvaJ+BmaLAAhVUgyLj4Ftgaczz66tUSNzqrAZXCFdOU7cRMYPNVBqyqE2IdQd2rzzhDEJvkw==", + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/@tabler/icons-react/-/icons-react-3.14.0.tgz", + "integrity": "sha512-3XdbuyhBNq8aZW0qagR9YL8diACZYSAtaw6VuwcO2l6HzVFPN6N5TDex9WTz/3lf+uktAvOv1kNuuFBjSjN9yw==", + "license": "MIT", "dependencies": { - "@tabler/icons": "3.1.0" + "@tabler/icons": "3.14.0" }, "funding": { "type": "github", @@ -623,9 +637,10 @@ } }, "node_modules/@types/phoenix": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/@types/phoenix/-/phoenix-1.6.4.tgz", - "integrity": "sha512-B34A7uot1Cv0XtaHRYDATltAdKx0BvVKNgYNqE4WjtPUa4VQJM7kxeXcVKaH+KS+kCmZ+6w+QaUdcljiheiBJA==" + "version": "1.6.5", + "resolved": "https://registry.npmjs.org/@types/phoenix/-/phoenix-1.6.5.tgz", + "integrity": "sha512-xegpDuR+z0UqG9fwHqNoy3rI7JDlvaPh2TY47Fl80oq6g+hXT+c/LEuE43X48clZ6lOfANl5WrPur9fYO1RJ/w==", + "license": "MIT" }, "node_modules/@types/prop-types": { "version": "15.7.12", @@ -660,9 +675,10 @@ "devOptional": true }, "node_modules/@types/ws": { - "version": "8.5.10", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", - "integrity": "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==", + "version": "8.5.12", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.12.tgz", + "integrity": "sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==", + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -1200,9 +1216,10 @@ "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==" }, "node_modules/clsx": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.0.tgz", - "integrity": "sha512-m3iNNWpd9rl3jvvcBnu70ylMdrXt8Vlq4HYadnU5fwcOtvkSQWPmj7amUcDT2qYI7risszBjI5AUIUox9D16pg==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", "engines": { "node": ">=6" } @@ -1232,9 +1249,10 @@ "dev": true }, "node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -3725,15 +3743,6 @@ } ] }, - "node_modules/ramda": { - "version": "0.29.1", - "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.29.1.tgz", - "integrity": "sha512-OfxIeWzd4xdUNxlWhgFazxsA/nl3mS4/jGZI5n00uWOoSSFRhC1b6gl6xvmzUamgmqELraWp0J/qqVlXYPDPyA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/ramda" - } - }, "node_modules/react": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", @@ -4465,7 +4474,8 @@ "node_modules/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" }, "node_modules/ts-api-utils": { "version": "1.3.0", @@ -4721,12 +4731,14 @@ "node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" }, "node_modules/whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" @@ -4927,9 +4939,10 @@ "dev": true }, "node_modules/ws": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", - "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", + "license": "MIT", "engines": { "node": ">=10.0.0" }, diff --git a/package.json b/package.json index 869790e..d3c3b3f 100644 --- a/package.json +++ b/package.json @@ -9,14 +9,14 @@ "lint": "next lint" }, "dependencies": { - "@mantine/core": "7.7.1", - "@mantine/dates": "^7.7.1", - "@mantine/form": "^7.7.1", - "@mantine/hooks": "7.7.1", - "@mantine/modals": "^7.7.1", - "@supabase/ssr": "^0.3.0", - "@supabase/supabase-js": "^2.42.1", - "@tabler/icons-react": "^3.1.0", + "@mantine/core": "^7.12.1", + "@mantine/dates": "^7.12.1", + "@mantine/form": "^7.12.1", + "@mantine/hooks": "^7.12.1", + "@mantine/modals": "^7.12.1", + "@supabase/ssr": "^0.5.1", + "@supabase/supabase-js": "^2.45.2", + "@tabler/icons-react": "^3.14.0", "next": "14.1.3", "react": "18.2.0", "react-dom": "18.2.0" diff --git a/utils/supabase/client.ts b/utils/supabase/client.ts index deba8cd..fadcc09 100644 --- a/utils/supabase/client.ts +++ b/utils/supabase/client.ts @@ -12,4 +12,5 @@ export function createClient() { }, }, ); -} \ No newline at end of file +} + diff --git a/utils/supabase/middleware.ts b/utils/supabase/middleware.ts index 3a15993..c0d4f6e 100644 --- a/utils/supabase/middleware.ts +++ b/utils/supabase/middleware.ts @@ -1,64 +1,56 @@ -import { type CookieOptions, createServerClient } from "@supabase/ssr"; +import { createServerClient } from "@supabase/ssr"; import { type NextRequest, NextResponse } from "next/server"; -export async function updateSession(request: NextRequest) { - let response = NextResponse.next({ - request: { - headers: request.headers, - }, - }); - - const supabase = createServerClient( - process.env.NEXT_PUBLIC_SUPABASE_URL!, - process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!, - { - db: { - schema: "students-registration-project", +export const updateSession = async (request: NextRequest) => { + // This `try/catch` block is only here for the interactive tutorial. + // Feel free to remove once you have Supabase connected. + try { + // Create an unmodified response + let response = NextResponse.next({ + request: { + headers: request.headers, }, - cookies: { - get(name: string) { - return request.cookies.get(name)?.value; - }, - set(name: string, value: string, options: CookieOptions) { - request.cookies.set({ - name, - value, - ...options, - }); - response = NextResponse.next({ - request: { - headers: request.headers, - }, - }); - response.cookies.set({ - name, - value, - ...options, - }); + }); + + const supabase = createServerClient( + process.env.NEXT_PUBLIC_SUPABASE_URL!, + process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!, + { + db: { + schema: "students-registration-project", }, - remove(name: string, options: CookieOptions) { - request.cookies.set({ - name, - value: "", - ...options, - }); - response = NextResponse.next({ - request: { - headers: request.headers, - }, - }); - response.cookies.set({ - name, - value: "", - ...options, - }); + cookies: { + getAll() { + return request.cookies.getAll(); + }, + setAll(cookiesToSet) { + cookiesToSet.forEach(({ name, value }) => + request.cookies.set(name, value) + ); + response = NextResponse.next({ + request, + }); + cookiesToSet.forEach(({ name, value, options }) => + response.cookies.set(name, value, options) + ); + }, }, }, - }, - ); + ); - // refreshing the auth token - await supabase.auth.getUser(); + // This will refresh session if expired - required for Server Components + // https://supabase.com/docs/guides/auth/server-side/nextjs + await supabase.auth.getUser(); - return response; -} + return response; + } catch (e) { + // If you are here, a Supabase client could not be created! + // This is likely because you have not set up environment variables. + // Check out http://localhost:3000 for Next Steps. + return NextResponse.next({ + request: { + headers: request.headers, + }, + }); + } +}; diff --git a/utils/supabase/server.ts b/utils/supabase/server.ts index 79064e6..b6ff36b 100644 --- a/utils/supabase/server.ts +++ b/utils/supabase/server.ts @@ -1,39 +1,34 @@ -import { createServerClient, type CookieOptions } from '@supabase/ssr' -import { cookies } from 'next/headers' +import { createServerClient } from "@supabase/ssr"; +import { cookies } from "next/headers"; -export function createClient() { - const cookieStore = cookies() +export const createClient = () => { + const cookieStore = cookies(); return createServerClient( process.env.NEXT_PUBLIC_SUPABASE_URL!, process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!, + { - db : { - schema : 'students-registration-project' + db: { + schema: "students-registration-project", }, + cookies: { - get(name: string) { - return cookieStore.get(name)?.value + getAll() { + return cookieStore.getAll(); }, - set(name: string, value: string, options: CookieOptions) { + setAll(cookiesToSet) { try { - cookieStore.set({ name, value, ...options }) + cookiesToSet.forEach(({ name, value, options }) => { + cookieStore.set(name, value, options); + }); } catch (error) { // The `set` method was called from a Server Component. // This can be ignored if you have middleware refreshing // user sessions. } }, - remove(name: string, options: CookieOptions) { - try { - cookieStore.set({ name, value: '', ...options }) - } catch (error) { - // The `delete` method was called from a Server Component. - // This can be ignored if you have middleware refreshing - // user sessions. - } - }, }, } - ) -} \ No newline at end of file + ); +}; diff --git a/yarn.lock b/yarn.lock index 644581e..112d567 100644 --- a/yarn.lock +++ b/yarn.lock @@ -113,42 +113,42 @@ wrap-ansi "^8.1.0" wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" -"@mantine/core@7.7.1": - version "7.7.1" - resolved "https://registry.npmjs.org/@mantine/core/-/core-7.7.1.tgz" - integrity sha512-SdPzjvqvEK7uHFuVD3a8w3OZyQVoCwIXLSUfOtRNouDMQgsq6Ac7QjKXBBOk3wNweOWFVOU1vATLHobSmow0lQ== +"@mantine/core@^7.12.1", "@mantine/core@7.12.1": + version "7.12.1" + resolved "https://registry.npmjs.org/@mantine/core/-/core-7.12.1.tgz" + integrity sha512-PXKIDaT1fpNB77dPQIcdFGM2NRnfmsJSVx3uuBccngBQWMIWI0wPyiO1Y26DK4LQrbrypeb+TS+Zxpgx6RoiCA== dependencies: "@floating-ui/react" "^0.26.9" - clsx "2.1.0" + clsx "^2.1.1" react-number-format "^5.3.1" react-remove-scroll "^2.5.7" react-textarea-autosize "8.5.3" type-fest "^4.12.0" -"@mantine/dates@^7.7.1": - version "7.7.1" - resolved "https://registry.npmjs.org/@mantine/dates/-/dates-7.7.1.tgz" - integrity sha512-SIeC11HUTiMAExlReFYHXSkTaVjkk1i7+QvLtxJkd3lxn6X1vHuPVV4j4c9AED8oZI5QEmoVcYc/03Eud2FoAg== +"@mantine/dates@^7.12.1": + version "7.12.1" + resolved "https://registry.npmjs.org/@mantine/dates/-/dates-7.12.1.tgz" + integrity sha512-+Dg5ZGoYPWYRWPY7HagLeW36ayVjKQIkTpdNvgGDwh5YpaFy5cHd6LK6USKUshTsRPuzM3oUKwXIBK8hsigMyA== dependencies: - clsx "2.1.0" + clsx "^2.1.1" -"@mantine/form@^7.7.1": - version "7.7.1" - resolved "https://registry.npmjs.org/@mantine/form/-/form-7.7.1.tgz" - integrity sha512-NRbVdHsbs634dZIq6IQhqL0uCtF4nYK3OPuPhkBzQ3faqri7TZvYgVQU4KGFTMqPl0UdwC6TkrnnqTZBK6HJMw== +"@mantine/form@^7.12.1": + version "7.12.1" + resolved "https://registry.npmjs.org/@mantine/form/-/form-7.12.1.tgz" + integrity sha512-Q+lpgG9N8srlsI0IPnD1V1c2ZaI0xmR3bBEVm+LttSos6Q5zkG49Yy011mc0cXzEKUk2h48j8PLoPHfSEzO03g== dependencies: fast-deep-equal "^3.1.3" klona "^2.0.6" -"@mantine/hooks@7.7.1": - version "7.7.1" - resolved "https://registry.npmjs.org/@mantine/hooks/-/hooks-7.7.1.tgz" - integrity sha512-3YH2FzKMlg840tb04PBDcDXyBCi9puFOxEBVgc6Y/pN6KFqfOoAnQE/YvgOtwSNXZlbTWyDlQoYj+3je7pA7og== +"@mantine/hooks@^7.12.1", "@mantine/hooks@7.12.1": + version "7.12.1" + resolved "https://registry.npmjs.org/@mantine/hooks/-/hooks-7.12.1.tgz" + integrity sha512-YPA3qiMHJkWID5+YzakBaLvjHtX3Fg3PdPY49iIb/CaWM9+lrJ+77TOVS7bsY7ZTBHXUfzft1/6Woqt3xSuweA== -"@mantine/modals@^7.7.1": - version "7.7.1" - resolved "https://registry.npmjs.org/@mantine/modals/-/modals-7.7.1.tgz" - integrity sha512-r7Zk6gZnUNiEEwbnzhIue+d8qjVDmV3umX5/FZgW0ugyB6U8C+ZIPDTlHUaPOF45F+Pu1ahdlK6N+YoRT/lxSg== +"@mantine/modals@^7.12.1": + version "7.12.1" + resolved "https://registry.npmjs.org/@mantine/modals/-/modals-7.12.1.tgz" + integrity sha512-olS07yDcCFLGylLGaQgBiTnKcRrUZVLKqBFBw5glcmc/wZmJf4SDMgx5mxSwBnsbJOwJ2d3aIYwO/qNTNnluSg== "@next/env@14.1.3": version "14.1.3" @@ -162,26 +162,6 @@ dependencies: glob "10.3.10" -"@next/swc-darwin-arm64@14.1.3": - version "14.1.3" - resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.1.3.tgz#b4c218fdb49275972d91e9a9a0ccadba243b6739" - integrity sha512-LALu0yIBPRiG9ANrD5ncB3pjpO0Gli9ZLhxdOu6ZUNf3x1r3ea1rd9Q+4xxUkGrUXLqKVK9/lDkpYIJaCJ6AHQ== - -"@next/swc-darwin-x64@14.1.3": - version "14.1.3" - resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-14.1.3.tgz#aa0d4357179d68daaa6f400708b76666708ffec9" - integrity sha512-E/9WQeXxkqw2dfcn5UcjApFgUq73jqNKaE5bysDm58hEUdUGedVrnRhblhJM7HbCZNhtVl0j+6TXsK0PuzXTCg== - -"@next/swc-linux-arm64-gnu@14.1.3": - version "14.1.3" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.1.3.tgz#1ba8df39c04368ede185f268c3a817a8f4290e4c" - integrity sha512-USArX9B+3rZSXYLFvgy0NVWQgqh6LHWDmMt38O4lmiJNQcwazeI6xRvSsliDLKt+78KChVacNiwvOMbl6g6BBw== - -"@next/swc-linux-arm64-musl@14.1.3": - version "14.1.3" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.1.3.tgz#2fa8fe435862eb186aca6d6068c8aef2126ab11e" - integrity sha512-esk1RkRBLSIEp1qaQXv1+s6ZdYzuVCnDAZySpa62iFTMGTisCyNQmqyCTL9P+cLJ4N9FKCI3ojtSfsyPHJDQNw== - "@next/swc-linux-x64-gnu@14.1.3": version "14.1.3" resolved "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.1.3.tgz" @@ -192,21 +172,6 @@ resolved "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.1.3.tgz" integrity sha512-DX2zqz05ziElLoxskgHasaJBREC5Y9TJcbR2LYqu4r7naff25B4iXkfXWfcp69uD75/0URmmoSgT8JclJtrBoQ== -"@next/swc-win32-arm64-msvc@14.1.3": - version "14.1.3" - resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.1.3.tgz#5367333e701f722009592013502aa8e735bee782" - integrity sha512-HjssFsCdsD4GHstXSQxsi2l70F/5FsRTRQp8xNgmQs15SxUfUJRvSI9qKny/jLkY3gLgiCR3+6A7wzzK0DBlfA== - -"@next/swc-win32-ia32-msvc@14.1.3": - version "14.1.3" - resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.1.3.tgz#dc455021fee85e037f6fb4134e85895dce5a0495" - integrity sha512-DRuxD5axfDM1/Ue4VahwSxl1O5rn61hX8/sF0HY8y0iCbpqdxw3rB3QasdHn/LJ6Wb2y5DoWzXcz3L1Cr+Thrw== - -"@next/swc-win32-x64-msvc@14.1.3": - version "14.1.3" - resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.1.3.tgz#4a8d4384901f0c48ece9dbb60cb9aea107d39e7c" - integrity sha512-uC2DaDoWH7h1P/aJ4Fok3Xiw6P0Lo4ez7NbowW2VGNXw/Xv6tOuLUcxhBYZxsSUJtpeknCi8/fvnSpyCFp4Rcg== - "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" @@ -215,7 +180,7 @@ "@nodelib/fs.stat" "2.0.5" run-parallel "^1.1.9" -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": +"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": version "2.0.5" resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== @@ -238,70 +203,69 @@ resolved "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.10.1.tgz" integrity sha512-S3Kq8e7LqxkA9s7HKLqXGTGck1uwis5vAXan3FnU5yw1Ec5hsSGnq4s/UCaSqABPOnOTg7zASLyst7+ohgWexg== -"@supabase/auth-js@2.63.0": - version "2.63.0" - resolved "https://registry.npmjs.org/@supabase/auth-js/-/auth-js-2.63.0.tgz" - integrity sha512-yIgcHnlgv24GxHtVGUhwGqAFDyJkPIC/xjx7HostN08A8yCy8HIfl4JEkTKyBqD1v1L05jNEJOUke4Lf4O1+Qg== +"@supabase/auth-js@2.64.4": + version "2.64.4" + resolved "https://registry.npmjs.org/@supabase/auth-js/-/auth-js-2.64.4.tgz" + integrity sha512-9ITagy4WP4FLl+mke1rchapOH0RQpf++DI+WSG2sO1OFOZ0rW3cwAM0nCrMOxu+Zw4vJ4zObc08uvQrXx590Tg== dependencies: "@supabase/node-fetch" "^2.6.14" -"@supabase/functions-js@2.2.2": - version "2.2.2" - resolved "https://registry.npmjs.org/@supabase/functions-js/-/functions-js-2.2.2.tgz" - integrity sha512-sJGq1nludmi7pY/fdtCpyY/pYonx7MfHdN408bqb736guWcVI1AChYVbI4kUM978EuOE4Ci6l7bUudfGg07QRw== +"@supabase/functions-js@2.4.1": + version "2.4.1" + resolved "https://registry.npmjs.org/@supabase/functions-js/-/functions-js-2.4.1.tgz" + integrity sha512-8sZ2ibwHlf+WkHDUZJUXqqmPvWQ3UHN0W30behOJngVh/qHHekhJLCFbh0AjkE9/FqqXtf9eoVvmYgfCLk5tNA== dependencies: "@supabase/node-fetch" "^2.6.14" -"@supabase/node-fetch@2.6.15", "@supabase/node-fetch@^2.6.14": +"@supabase/node-fetch@^2.6.14", "@supabase/node-fetch@2.6.15": version "2.6.15" resolved "https://registry.npmjs.org/@supabase/node-fetch/-/node-fetch-2.6.15.tgz" integrity sha512-1ibVeYUacxWYi9i0cf5efil6adJ9WRyZBLivgjs+AUpewx1F3xPi7gLgaASI2SmIQxPoCEjAsLAzKPgMJVgOUQ== dependencies: whatwg-url "^5.0.0" -"@supabase/postgrest-js@1.15.1": - version "1.15.1" - resolved "https://registry.npmjs.org/@supabase/postgrest-js/-/postgrest-js-1.15.1.tgz" - integrity sha512-H/4PABAAgMrEIo7oewUZiZMy422Pgc19OLVjU8Vwopcvfr3GD7h8Re4VXtiaPPZqc/2z/k3PnyguFnoKIB7fkA== +"@supabase/postgrest-js@1.15.8": + version "1.15.8" + resolved "https://registry.npmjs.org/@supabase/postgrest-js/-/postgrest-js-1.15.8.tgz" + integrity sha512-YunjXpoQjQ0a0/7vGAvGZA2dlMABXFdVI/8TuVKtlePxyT71sl6ERl6ay1fmIeZcqxiuFQuZw/LXUuStUG9bbg== dependencies: "@supabase/node-fetch" "^2.6.14" -"@supabase/realtime-js@2.9.3": - version "2.9.3" - resolved "https://registry.npmjs.org/@supabase/realtime-js/-/realtime-js-2.9.3.tgz" - integrity sha512-lAp50s2n3FhGJFq+wTSXLNIDPw5Y0Wxrgt44eM5nLSA3jZNUUP3Oq2Ccd1CbZdVntPCWLZvJaU//pAd2NE+QnQ== +"@supabase/realtime-js@2.10.2": + version "2.10.2" + resolved "https://registry.npmjs.org/@supabase/realtime-js/-/realtime-js-2.10.2.tgz" + integrity sha512-qyCQaNg90HmJstsvr2aJNxK2zgoKh9ZZA8oqb7UT2LCh3mj9zpa3Iwu167AuyNxsxrUE8eEJ2yH6wLCij4EApA== dependencies: "@supabase/node-fetch" "^2.6.14" "@types/phoenix" "^1.5.4" "@types/ws" "^8.5.10" ws "^8.14.2" -"@supabase/ssr@^0.3.0": - version "0.3.0" - resolved "https://registry.npmjs.org/@supabase/ssr/-/ssr-0.3.0.tgz" - integrity sha512-lcVyQ7H6eumb2FB1Wa2N+jYWMfq6CFza3KapikT0fgttMQ+QvDgpNogx9jI8bZgKds+XFSMCojxFvFb+gwdbfA== +"@supabase/ssr@^0.5.1": + version "0.5.1" + resolved "https://registry.npmjs.org/@supabase/ssr/-/ssr-0.5.1.tgz" + integrity sha512-+G94H/GZG0nErZ3FQV9yJmsC5Rj7dmcfCAwOt37hxeR1La+QTl8cE9whzYwPUrTJjMLGNXoO+1BMvVxwBAbz4g== dependencies: - cookie "^0.5.0" - ramda "^0.29.0" + cookie "^0.6.0" -"@supabase/storage-js@2.5.5": - version "2.5.5" - resolved "https://registry.npmjs.org/@supabase/storage-js/-/storage-js-2.5.5.tgz" - integrity sha512-OpLoDRjFwClwc2cjTJZG8XviTiQH4Ik8sCiMK5v7et0MDu2QlXjCAW3ljxJB5+z/KazdMOTnySi+hysxWUPu3w== +"@supabase/storage-js@2.7.0": + version "2.7.0" + resolved "https://registry.npmjs.org/@supabase/storage-js/-/storage-js-2.7.0.tgz" + integrity sha512-iZenEdO6Mx9iTR6T7wC7sk6KKsoDPLq8rdu5VRy7+JiT1i8fnqfcOr6mfF2Eaqky9VQzhP8zZKQYjzozB65Rig== dependencies: "@supabase/node-fetch" "^2.6.14" -"@supabase/supabase-js@^2.42.1": - version "2.42.1" - resolved "https://registry.npmjs.org/@supabase/supabase-js/-/supabase-js-2.42.1.tgz" - integrity sha512-y05XIC6wChApz8BWE2TLUo6SBGp9ttbjhQ9DcQXI897vI3RRPIjm3wZqUoZiexUco+kgt3Em53+m55nB8Um6Sg== +"@supabase/supabase-js@^2.43.4", "@supabase/supabase-js@^2.45.2": + version "2.45.2" + resolved "https://registry.npmjs.org/@supabase/supabase-js/-/supabase-js-2.45.2.tgz" + integrity sha512-kJKY3ISFusVKQWCP8Kqo20Ebxy2WLp6Ry/Suco0aQsPXH7bvn7clswsdhcfcH/5Tr0MYz/jcCjF0n/27SetiCw== dependencies: - "@supabase/auth-js" "2.63.0" - "@supabase/functions-js" "2.2.2" + "@supabase/auth-js" "2.64.4" + "@supabase/functions-js" "2.4.1" "@supabase/node-fetch" "2.6.15" - "@supabase/postgrest-js" "1.15.1" - "@supabase/realtime-js" "2.9.3" - "@supabase/storage-js" "2.5.5" + "@supabase/postgrest-js" "1.15.8" + "@supabase/realtime-js" "2.10.2" + "@supabase/storage-js" "2.7.0" "@swc/helpers@0.5.2": version "0.5.2" @@ -310,17 +274,17 @@ dependencies: tslib "^2.4.0" -"@tabler/icons-react@^3.1.0": - version "3.1.0" - resolved "https://registry.npmjs.org/@tabler/icons-react/-/icons-react-3.1.0.tgz" - integrity sha512-k/WTlax2vbj/LpxvaJ+BmaLAAhVUgyLj4Ftgaczz66tUSNzqrAZXCFdOU7cRMYPNVBqyqE2IdQd2rzzhDEJvkw== +"@tabler/icons-react@^3.14.0": + version "3.14.0" + resolved "https://registry.npmjs.org/@tabler/icons-react/-/icons-react-3.14.0.tgz" + integrity sha512-3XdbuyhBNq8aZW0qagR9YL8diACZYSAtaw6VuwcO2l6HzVFPN6N5TDex9WTz/3lf+uktAvOv1kNuuFBjSjN9yw== dependencies: - "@tabler/icons" "3.1.0" + "@tabler/icons" "3.14.0" -"@tabler/icons@3.1.0": - version "3.1.0" - resolved "https://registry.npmjs.org/@tabler/icons/-/icons-3.1.0.tgz" - integrity sha512-CpZGyS1IVJKFcv88yZ2sYZIpWWhQ6oy76BQKQ5SF0fGgOqgyqKdBGG/YGyyMW632on37MX7VqQIMTzN/uQqmFg== +"@tabler/icons@3.14.0": + version "3.14.0" + resolved "https://registry.npmjs.org/@tabler/icons/-/icons-3.14.0.tgz" + integrity sha512-OakKjK1kuDWKoNwdnHHVMt11kTZAC10iZpN/8o/CSYdeBH7S3v5n8IyqAYynFxLI8yBGTyBvljtvWdmWh57zSg== "@types/json5@^0.0.29": version "0.0.29" @@ -335,9 +299,9 @@ undici-types "~5.26.4" "@types/phoenix@^1.5.4": - version "1.6.4" - resolved "https://registry.npmjs.org/@types/phoenix/-/phoenix-1.6.4.tgz" - integrity sha512-B34A7uot1Cv0XtaHRYDATltAdKx0BvVKNgYNqE4WjtPUa4VQJM7kxeXcVKaH+KS+kCmZ+6w+QaUdcljiheiBJA== + version "1.6.5" + resolved "https://registry.npmjs.org/@types/phoenix/-/phoenix-1.6.5.tgz" + integrity sha512-xegpDuR+z0UqG9fwHqNoy3rI7JDlvaPh2TY47Fl80oq6g+hXT+c/LEuE43X48clZ6lOfANl5WrPur9fYO1RJ/w== "@types/prop-types@*": version "15.7.12" @@ -351,7 +315,7 @@ dependencies: "@types/react" "*" -"@types/react@*", "@types/react@18.2.65": +"@types/react@*", "@types/react@^16.8.0 || ^17.0.0 || ^18.0.0", "@types/react@^16.9.0 || ^17.0.0 || ^18.0.0", "@types/react@18.2.65": version "18.2.65" resolved "https://registry.npmjs.org/@types/react/-/react-18.2.65.tgz" integrity sha512-98TsY0aW4jqx/3RqsUXwMDZSWR1Z4CUlJNue8ueS2/wcxZOsz4xmW1X8ieaWVRHcmmQM3R8xVA4XWB3dJnWwDQ== @@ -366,9 +330,9 @@ integrity sha512-YIoDCTH3Af6XM5VuwGG/QL/CJqga1Zm3NkU3HZ4ZHK2fRMPYP1VczsTUqtsf43PH/iJNVlPHAo2oWX7BSdB2Hw== "@types/ws@^8.5.10": - version "8.5.10" - resolved "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz" - integrity sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A== + version "8.5.12" + resolved "https://registry.npmjs.org/@types/ws/-/ws-8.5.12.tgz" + integrity sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ== dependencies: "@types/node" "*" @@ -428,7 +392,7 @@ acorn-jsx@^5.3.2: resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== -acorn@^8.9.0: +"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", acorn@^8.9.0: version "8.11.3" resolved "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz" integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== @@ -678,10 +642,10 @@ client-only@0.0.1: resolved "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz" integrity sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA== -clsx@2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/clsx/-/clsx-2.1.0.tgz" - integrity sha512-m3iNNWpd9rl3jvvcBnu70ylMdrXt8Vlq4HYadnU5fwcOtvkSQWPmj7amUcDT2qYI7risszBjI5AUIUox9D16pg== +clsx@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz" + integrity sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA== color-convert@^2.0.1: version "2.0.1" @@ -700,10 +664,10 @@ concat-map@0.0.1: resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== -cookie@^0.5.0: - version "0.5.0" - resolved "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz" - integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== +cookie@^0.6.0: + version "0.6.0" + resolved "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz" + integrity sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw== cross-spawn@^7.0.0, cross-spawn@^7.0.2: version "7.0.3" @@ -756,6 +720,11 @@ data-view-byte-offset@^1.0.0: es-errors "^1.3.0" is-data-view "^1.0.1" +dayjs@>=1.0.0: + version "1.11.10" + resolved "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz" + integrity sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ== + debug@^3.2.7: version "3.2.7" resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" @@ -1012,7 +981,7 @@ eslint-module-utils@^2.7.4, eslint-module-utils@^2.8.0: dependencies: debug "^3.2.7" -eslint-plugin-import@^2.28.1: +eslint-plugin-import@*, eslint-plugin-import@^2.28.1: version "2.29.1" resolved "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz" integrity sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw== @@ -1099,7 +1068,7 @@ eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4 resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz" integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== -eslint@8.57.0: +eslint@*, "eslint@^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8", "eslint@^3 || ^4 || ^5 || ^6 || ^7 || ^8", "eslint@^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0", "eslint@^6.0.0 || ^7.0.0 || >=8.0.0", "eslint@^7.0.0 || ^8.0.0", "eslint@^7.23.0 || ^8.0.0", eslint@8.57.0: version "8.57.0" resolved "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz" integrity sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ== @@ -1331,17 +1300,6 @@ glob-parent@^6.0.2: dependencies: is-glob "^4.0.3" -glob@10.3.10: - version "10.3.10" - resolved "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz" - integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g== - dependencies: - foreground-child "^3.1.0" - jackspeak "^2.3.5" - minimatch "^9.0.1" - minipass "^5.0.0 || ^6.0.2 || ^7.0.0" - path-scurry "^1.10.1" - glob@^7.1.3: version "7.2.3" resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" @@ -1354,6 +1312,17 @@ glob@^7.1.3: once "^1.3.0" path-is-absolute "^1.0.0" +glob@10.3.10: + version "10.3.10" + resolved "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz" + integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g== + dependencies: + foreground-child "^3.1.0" + jackspeak "^2.3.5" + minimatch "^9.0.1" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + path-scurry "^1.10.1" + globals@^13.19.0: version "13.24.0" resolved "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz" @@ -1810,13 +1779,6 @@ micromatch@^4.0.4: braces "^3.0.2" picomatch "^2.3.1" -minimatch@9.0.3: - version "9.0.3" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz" - integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== - dependencies: - brace-expansion "^2.0.1" - minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" @@ -1831,6 +1793,13 @@ minimatch@^9.0.1: dependencies: brace-expansion "^2.0.1" +minimatch@9.0.3: + version "9.0.3" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz" + integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== + dependencies: + brace-expansion "^2.0.1" + minimist@^1.2.0, minimist@^1.2.6: version "1.2.8" resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz" @@ -1841,7 +1810,7 @@ minimist@^1.2.0, minimist@^1.2.6: resolved "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz" integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ== -ms@2.1.2, ms@^2.1.1: +ms@^2.1.1, ms@2.1.2: version "2.1.2" resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== @@ -2083,6 +2052,15 @@ postcss-simple-vars@^7.0.0, postcss-simple-vars@^7.0.1: resolved "https://registry.npmjs.org/postcss-simple-vars/-/postcss-simple-vars-7.0.1.tgz" integrity sha512-5GLLXaS8qmzHMOjVxqkk1TZPf1jMqesiI7qLhnlyERalG0sMbHIbJqrcnrpmZdKCLglHnRHoEBB61RtGTsj++A== +postcss@^8.2.1, postcss@^8.2.14, postcss@^8.3.3, postcss@^8.4.21, postcss@^8.4.35, postcss@>=8.0.0: + version "8.4.38" + resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz" + integrity sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A== + dependencies: + nanoid "^3.3.7" + picocolors "^1.0.0" + source-map-js "^1.2.0" + postcss@8.4.31: version "8.4.31" resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz" @@ -2092,15 +2070,6 @@ postcss@8.4.31: picocolors "^1.0.0" source-map-js "^1.0.2" -postcss@^8.4.35: - version "8.4.38" - resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz" - integrity sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A== - dependencies: - nanoid "^3.3.7" - picocolors "^1.0.0" - source-map-js "^1.2.0" - prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" @@ -2125,12 +2094,7 @@ queue-microtask@^1.2.2: resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== -ramda@^0.29.0: - version "0.29.1" - resolved "https://registry.npmjs.org/ramda/-/ramda-0.29.1.tgz" - integrity sha512-OfxIeWzd4xdUNxlWhgFazxsA/nl3mS4/jGZI5n00uWOoSSFRhC1b6gl6xvmzUamgmqELraWp0J/qqVlXYPDPyA== - -react-dom@18.2.0: +"react-dom@^0.14 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0", react-dom@^18.2.0, react-dom@>=16.8.0, react-dom@18.2.0: version "18.2.0" resolved "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz" integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== @@ -2187,7 +2151,7 @@ react-textarea-autosize@8.5.3: use-composed-ref "^1.3.0" use-latest "^1.2.1" -react@18.2.0: +"react@^0.14 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0", "react@^16.8.0 || ^17.0.0 || ^18.0.0", react@^18.2.0, "react@>= 16", "react@>= 16.8.0 || 17.x.x || ^18.0.0-0", react@>=16.8.0, react@18.2.0: version "18.2.0" resolved "https://registry.npmjs.org/react/-/react-18.2.0.tgz" integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== @@ -2607,7 +2571,7 @@ typed-array-length@^1.0.6: is-typed-array "^1.1.13" possible-typed-array-names "^1.0.0" -typescript@5.4.2: +typescript@>=3.3.1, typescript@>=4.2.0, typescript@5.4.2: version "5.4.2" resolved "https://registry.npmjs.org/typescript/-/typescript-5.4.2.tgz" integrity sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ== @@ -2765,9 +2729,9 @@ wrappy@1: integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== ws@^8.14.2: - version "8.17.1" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.17.1.tgz#9293da530bb548febc95371d90f9c878727d919b" - integrity sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ== + version "8.18.0" + resolved "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz" + integrity sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw== yallist@^4.0.0: version "4.0.0"