diff --git a/.env.example b/.env.example
index 3237611d..8b0ac04f 100644
--- a/.env.example
+++ b/.env.example
@@ -2,21 +2,14 @@ ARGON_SECRET=topsecret
NEXTAUTH_SECRET=topsecret
NEXTAUTH_URL=http://localhost:3000
-KV_REST_API_URL=
-KV_REST_API_TOKEN=
-
# NOTE: The DB/USER/PASSWORD need to be the same with docker-compose values
POSTGRES_DB=postgres
POSTGRES_USER=postgres
POSTGRES_PASSWORD=password
-POSTGRES_URL_NON_POOLING="${POSTGRES_URL}"
-POSTGRES_URL="postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@localhost:5432/${POSTGRES_DB}?schema=public"
-POSTGRES_PRISMA_URL="${POSTGRES_URL}?pgbouncer=true&connect_timeout=15"
-NEXT_PUBLIC_API_KEY_TINYMCE=""
+DATABASE_URL="postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@localhost:5432/${POSTGRES_DB}?schema=public"
EMAIL_SERVER_USER= # your email
EMAIL_SERVER_PASSWORD= # your password
EMAIL_SERVER_HOST= #smtp.gmail.com
EMAIL_SERVER_PORT= #465
-SENDGRID_API_KEY=
\ No newline at end of file
diff --git a/.github/workflows/code-checking.yaml b/.github/workflows/code-checking.yaml
index d64002e7..667e9579 100644
--- a/.github/workflows/code-checking.yaml
+++ b/.github/workflows/code-checking.yaml
@@ -20,7 +20,7 @@ jobs:
- name: Setup pnpm
uses: pnpm/action-setup@v2
- with:
+ with:
version: 8
- name: Setup Node.js environment
@@ -33,7 +33,7 @@ jobs:
run: pnpm i --frozen-lockfile
- name: Linting
- run: pnpm run lint
+ run: pnpm lint
- name: Checking TypeScript
- run: pnpm run typecheck
\ No newline at end of file
+ run: pnpm typecheck
diff --git a/.github/workflows/prisma-preview.yaml b/.github/workflows/prisma-preview.yaml
index 8e3bd7da..ee393e55 100644
--- a/.github/workflows/prisma-preview.yaml
+++ b/.github/workflows/prisma-preview.yaml
@@ -39,7 +39,6 @@ jobs:
run: pnpm i --frozen-lockfile
- name: Deploy Migrations
- run: pnpm run migrate:deploy
+ run: pnpm migrate deploy
env:
- POSTGRES_PRISMA_URL: ${{ secrets.POSTGRES_PRISMA_URL_PREVIEW }}
- POSTGRES_URL_NON_POOLING: ${{ secrets.POSTGRES_URL_NON_POOLING_PREVIEW }}
+ DATABASE_URL: ${{ secrets.DATABASE_URL_PREVIEW }}
diff --git a/.github/workflows/prisma-production.yaml b/.github/workflows/prisma-production.yaml
index d5f628e1..d6c2db0b 100644
--- a/.github/workflows/prisma-production.yaml
+++ b/.github/workflows/prisma-production.yaml
@@ -38,7 +38,6 @@ jobs:
run: pnpm i --frozen-lockfile
- name: Deploy Migrations
- run: pnpm run migrate:deploy
+ run: pnpm prisma migrate deploy
env:
- POSTGRES_PRISMA_URL: ${{ secrets.POSTGRES_PRISMA_URL }}
- POSTGRES_URL_NON_POOLING: ${{ secrets.POSTGRES_URL_NON_POOLING }}
+ DATABASE_URL: ${{ secrets.DATABASE_URL }}
diff --git a/README.md b/README.md
index 9f9c2f94..8069c980 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,10 @@
-# Ninjutsu Stack
+
Ninjutsu Stack
-The stack that use Chakra
+Made by ⚡Sieutoc
+
+
+
+
## Features
@@ -20,7 +24,7 @@ This template includes the following:
## Demo
-https://ninjutsu-demo.vercel.app
+https://ninjutsu.sieutoc.website
## Getting Started
diff --git a/app/[locale]/(auth)/error.tsx b/app/(auth)/error.tsx
similarity index 100%
rename from app/[locale]/(auth)/error.tsx
rename to app/(auth)/error.tsx
diff --git a/app/[locale]/(auth)/forgot-password/ForgotPasswordForm/index.tsx b/app/(auth)/forgot-password/ForgotPasswordForm/index.tsx
similarity index 100%
rename from app/[locale]/(auth)/forgot-password/ForgotPasswordForm/index.tsx
rename to app/(auth)/forgot-password/ForgotPasswordForm/index.tsx
diff --git a/app/[locale]/(auth)/forgot-password/confirm-email/Status/index.tsx b/app/(auth)/forgot-password/confirm-email/Status/index.tsx
similarity index 100%
rename from app/[locale]/(auth)/forgot-password/confirm-email/Status/index.tsx
rename to app/(auth)/forgot-password/confirm-email/Status/index.tsx
diff --git a/app/[locale]/(auth)/forgot-password/confirm-email/loading.tsx b/app/(auth)/forgot-password/confirm-email/loading.tsx
similarity index 100%
rename from app/[locale]/(auth)/forgot-password/confirm-email/loading.tsx
rename to app/(auth)/forgot-password/confirm-email/loading.tsx
diff --git a/app/[locale]/(auth)/forgot-password/confirm-email/page.tsx b/app/(auth)/forgot-password/confirm-email/page.tsx
similarity index 95%
rename from app/[locale]/(auth)/forgot-password/confirm-email/page.tsx
rename to app/(auth)/forgot-password/confirm-email/page.tsx
index 1c8bca58..d5cff553 100644
--- a/app/[locale]/(auth)/forgot-password/confirm-email/page.tsx
+++ b/app/(auth)/forgot-password/confirm-email/page.tsx
@@ -1,14 +1,12 @@
-import { redirect } from 'next/navigation';
-import { Stack } from '@/components/chakra';
+import { verifyResetPassword } from '@/services/users';
+import { HOUR_MAX_CONFIRM } from '@/utils/constants';
import { Container } from '@/components/chakra';
-import { Locale } from '@/types';
import { differenceInHours } from 'date-fns';
+import { Stack } from '@/components/chakra';
+import { redirect } from 'next/navigation';
import { Status } from './Status';
-import { verifyResetPassword } from '@/services/users';
-import { HOUR_MAX_CONFIRM } from '@/utils/constants';
type ConfirmResetPassFromEmailType = {
- params: { locale: Locale };
searchParams: { code: string };
};
export default async function ConfirmResetPassFromEmail(
diff --git a/app/[locale]/(auth)/forgot-password/loading.tsx b/app/(auth)/forgot-password/loading.tsx
similarity index 100%
rename from app/[locale]/(auth)/forgot-password/loading.tsx
rename to app/(auth)/forgot-password/loading.tsx
diff --git a/app/[locale]/(auth)/forgot-password/page.tsx b/app/(auth)/forgot-password/page.tsx
similarity index 100%
rename from app/[locale]/(auth)/forgot-password/page.tsx
rename to app/(auth)/forgot-password/page.tsx
diff --git a/app/[locale]/(auth)/forgot-password/update-password/UpdatePasswordForm/index.tsx b/app/(auth)/forgot-password/update-password/UpdatePasswordForm/index.tsx
similarity index 100%
rename from app/[locale]/(auth)/forgot-password/update-password/UpdatePasswordForm/index.tsx
rename to app/(auth)/forgot-password/update-password/UpdatePasswordForm/index.tsx
diff --git a/app/[locale]/(auth)/forgot-password/update-password/loading.tsx b/app/(auth)/forgot-password/update-password/loading.tsx
similarity index 100%
rename from app/[locale]/(auth)/forgot-password/update-password/loading.tsx
rename to app/(auth)/forgot-password/update-password/loading.tsx
diff --git a/app/[locale]/(auth)/forgot-password/update-password/page.tsx b/app/(auth)/forgot-password/update-password/page.tsx
similarity index 100%
rename from app/[locale]/(auth)/forgot-password/update-password/page.tsx
rename to app/(auth)/forgot-password/update-password/page.tsx
diff --git a/app/[locale]/(auth)/layout.tsx b/app/(auth)/layout.tsx
similarity index 100%
rename from app/[locale]/(auth)/layout.tsx
rename to app/(auth)/layout.tsx
diff --git a/app/[locale]/(auth)/login/LoginForm/index.tsx b/app/(auth)/login/LoginForm/index.tsx
similarity index 100%
rename from app/[locale]/(auth)/login/LoginForm/index.tsx
rename to app/(auth)/login/LoginForm/index.tsx
diff --git a/app/[locale]/(auth)/login/loading.tsx b/app/(auth)/login/loading.tsx
similarity index 100%
rename from app/[locale]/(auth)/login/loading.tsx
rename to app/(auth)/login/loading.tsx
diff --git a/app/[locale]/(auth)/login/page.tsx b/app/(auth)/login/page.tsx
similarity index 100%
rename from app/[locale]/(auth)/login/page.tsx
rename to app/(auth)/login/page.tsx
diff --git a/app/[locale]/(auth)/signup/SignUpForm/index.tsx b/app/(auth)/signup/SignUpForm/index.tsx
similarity index 100%
rename from app/[locale]/(auth)/signup/SignUpForm/index.tsx
rename to app/(auth)/signup/SignUpForm/index.tsx
diff --git a/app/[locale]/(auth)/signup/loading.tsx b/app/(auth)/signup/loading.tsx
similarity index 100%
rename from app/[locale]/(auth)/signup/loading.tsx
rename to app/(auth)/signup/loading.tsx
diff --git a/app/[locale]/(auth)/signup/page.tsx b/app/(auth)/signup/page.tsx
similarity index 100%
rename from app/[locale]/(auth)/signup/page.tsx
rename to app/(auth)/signup/page.tsx
diff --git a/app/[locale]/(custom)/[slug]/page.tsx b/app/(custom)/[slug]/page.tsx
similarity index 60%
rename from app/[locale]/(custom)/[slug]/page.tsx
rename to app/(custom)/[slug]/page.tsx
index 6cc311bb..f9377079 100644
--- a/app/[locale]/(custom)/[slug]/page.tsx
+++ b/app/(custom)/[slug]/page.tsx
@@ -1,26 +1,16 @@
import { Box, Container, Heading } from '@/components/chakra';
import { HTMLParser } from '@/components/client';
import { getPage } from '@/services/pages';
-import { redirect } from 'next/navigation';
export default async function DynamicPage({
- params: { slug, locale },
+ params: { slug },
}: {
- params: { slug: string; locale: string };
+ params: { slug: string };
}) {
const page = await getPage({ where: { slug } });
- const foundTranslation = page?.translatedPages.find(
- (p) => p.locale === locale
- );
-
- if (foundTranslation?.locale === locale) {
- redirect(`/${locale}/${foundTranslation.slug}`);
- } else if (page?.originalPage?.locale === locale) {
- redirect(`/${locale}/${page?.originalPage.slug}`);
- }
-
if (!page) {
+ // TODO: Make 404 display
return 'not found';
}
diff --git a/app/[locale]/(custom)/about-us/Content/index.tsx b/app/(custom)/about-us/Content/index.tsx
similarity index 100%
rename from app/[locale]/(custom)/about-us/Content/index.tsx
rename to app/(custom)/about-us/Content/index.tsx
diff --git a/app/[locale]/(custom)/about-us/page.tsx b/app/(custom)/about-us/page.tsx
similarity index 100%
rename from app/[locale]/(custom)/about-us/page.tsx
rename to app/(custom)/about-us/page.tsx
diff --git a/app/[locale]/(custom)/blog/[slug]/edit/BlogEditForm/ButtonCreatePost.tsx b/app/(custom)/blog/[slug]/edit/BlogEditForm/ButtonCreatePost.tsx
similarity index 100%
rename from app/[locale]/(custom)/blog/[slug]/edit/BlogEditForm/ButtonCreatePost.tsx
rename to app/(custom)/blog/[slug]/edit/BlogEditForm/ButtonCreatePost.tsx
diff --git a/app/[locale]/(custom)/blog/[slug]/edit/BlogEditForm/index.tsx b/app/(custom)/blog/[slug]/edit/BlogEditForm/index.tsx
similarity index 99%
rename from app/[locale]/(custom)/blog/[slug]/edit/BlogEditForm/index.tsx
rename to app/(custom)/blog/[slug]/edit/BlogEditForm/index.tsx
index b66e3099..f3b430f7 100644
--- a/app/[locale]/(custom)/blog/[slug]/edit/BlogEditForm/index.tsx
+++ b/app/(custom)/blog/[slug]/edit/BlogEditForm/index.tsx
@@ -60,7 +60,6 @@ export default function BlogEditForm({ data }: BlogEditFormProps) {
content,
slug: slugify(title),
publishedAt,
- locale: 'VI',
authorId: userID,
}),
});
@@ -100,7 +99,6 @@ export default function BlogEditForm({ data }: BlogEditFormProps) {
content,
slug: slugify(title),
publishedAt,
- locale: 'VI',
authorId: userID,
}),
});
diff --git a/app/[locale]/(custom)/blog/[slug]/edit/page.tsx b/app/(custom)/blog/[slug]/edit/page.tsx
similarity index 100%
rename from app/[locale]/(custom)/blog/[slug]/edit/page.tsx
rename to app/(custom)/blog/[slug]/edit/page.tsx
diff --git a/app/[locale]/(custom)/blog/[slug]/page.tsx b/app/(custom)/blog/[slug]/page.tsx
similarity index 100%
rename from app/[locale]/(custom)/blog/[slug]/page.tsx
rename to app/(custom)/blog/[slug]/page.tsx
diff --git a/app/[locale]/(custom)/blog/page.tsx b/app/(custom)/blog/page.tsx
similarity index 78%
rename from app/[locale]/(custom)/blog/page.tsx
rename to app/(custom)/blog/page.tsx
index c7a40e07..f0ace32d 100644
--- a/app/[locale]/(custom)/blog/page.tsx
+++ b/app/(custom)/blog/page.tsx
@@ -1,19 +1,14 @@
import { Box, Heading, SimpleGrid, Spinner } from '@/components/chakra';
import { PostCard } from '@/components/client';
import { prisma } from '@/configs/prisma';
-import { Locale, Metadata } from '@/types';
+import { Metadata } from '@/types';
export const metadata: Metadata = {
title: 'Blog',
};
-export default async function BlogsPage({
- params: { locale },
-}: {
- params: { locale: Locale };
-}) {
+export default async function BlogsPage() {
const data = await prisma?.post.findMany({
- where: { locale },
take: 25,
orderBy: { createdAt: 'desc' },
});
diff --git a/app/[locale]/(custom)/blog/post-management/page.tsx b/app/(custom)/blog/post-management/page.tsx
similarity index 98%
rename from app/[locale]/(custom)/blog/post-management/page.tsx
rename to app/(custom)/blog/post-management/page.tsx
index e832e35c..0507a1d1 100644
--- a/app/[locale]/(custom)/blog/post-management/page.tsx
+++ b/app/(custom)/blog/post-management/page.tsx
@@ -18,10 +18,10 @@ import {
} from '@/components/chakra';
import slugify from 'slugify';
import { useRouter, useSearchParams } from 'next/navigation';
-import { useSWR, useAuth, useToast } from '@/hooks';
-import { ChevronDownIcon, ChevronUpIcon } from '@/icons';
import { PostList, TextEditor } from '@/components/client';
-import type { Post } from '@/types';
+import { ChevronDownIcon, ChevronUpIcon } from '@/icons';
+import { useSWR, useAuth, useToast } from '@/hooks';
+import { Post } from '@/types';
type RequireInputType = {
[key: string]: string;
@@ -63,7 +63,6 @@ export default function BlogEditor() {
content,
slug: slugify(title),
publishedAt,
- locale: 'VI',
authorId: userID,
}),
});
@@ -103,7 +102,6 @@ export default function BlogEditor() {
content,
slug: slugify(title),
publishedAt,
- locale: 'VI',
authorId: userID,
}),
});
diff --git a/app/[locale]/(custom)/contact/page.tsx b/app/(custom)/contact/page.tsx
similarity index 100%
rename from app/[locale]/(custom)/contact/page.tsx
rename to app/(custom)/contact/page.tsx
diff --git a/app/[locale]/(custom)/error.tsx b/app/(custom)/error.tsx
similarity index 100%
rename from app/[locale]/(custom)/error.tsx
rename to app/(custom)/error.tsx
diff --git a/app/[locale]/(custom)/home/page.tsx b/app/(custom)/home/page.tsx
similarity index 100%
rename from app/[locale]/(custom)/home/page.tsx
rename to app/(custom)/home/page.tsx
diff --git a/app/[locale]/(custom)/layout.tsx b/app/(custom)/layout.tsx
similarity index 67%
rename from app/[locale]/(custom)/layout.tsx
rename to app/(custom)/layout.tsx
index be6066ea..d5209e56 100644
--- a/app/[locale]/(custom)/layout.tsx
+++ b/app/(custom)/layout.tsx
@@ -1,21 +1,17 @@
-import { LocaleSwitcher, Navbar } from '@/components/client';
import { Box, Container, Flex } from '@/components/chakra';
import { ProfileMenu } from '@/components/server';
-import type { ReactNode, Locale } from '@/types';
+import { Navbar } from '@/components/client';
+import { ReactNode } from '@/types';
export default async function CustomLayout({
children,
}: {
children: ReactNode;
- params: { locale: Locale };
}) {
return (
-
-
-
-
+
+
+
Ninjustsu Stack
+
The stack that uses Chakra
+
+
+ );
+}
diff --git a/app/[locale]/(custom)/protected/page.tsx b/app/(custom)/protected/page.tsx
similarity index 100%
rename from app/[locale]/(custom)/protected/page.tsx
rename to app/(custom)/protected/page.tsx
diff --git a/app/[locale]/(default)/dashboard/files/loading.tsx b/app/(default)/dashboard/files/loading.tsx
similarity index 100%
rename from app/[locale]/(default)/dashboard/files/loading.tsx
rename to app/(default)/dashboard/files/loading.tsx
diff --git a/app/[locale]/(default)/dashboard/files/page.tsx b/app/(default)/dashboard/files/page.tsx
similarity index 100%
rename from app/[locale]/(default)/dashboard/files/page.tsx
rename to app/(default)/dashboard/files/page.tsx
diff --git a/app/[locale]/(default)/dashboard/loading.tsx b/app/(default)/dashboard/loading.tsx
similarity index 100%
rename from app/[locale]/(default)/dashboard/loading.tsx
rename to app/(default)/dashboard/loading.tsx
diff --git a/app/[locale]/(default)/dashboard/page.tsx b/app/(default)/dashboard/page.tsx
similarity index 100%
rename from app/[locale]/(default)/dashboard/page.tsx
rename to app/(default)/dashboard/page.tsx
diff --git a/app/[locale]/(default)/dashboard/pages/[id]/advanced/page.tsx b/app/(default)/dashboard/pages/[id]/advanced/page.tsx
similarity index 81%
rename from app/[locale]/(default)/dashboard/pages/[id]/advanced/page.tsx
rename to app/(default)/dashboard/pages/[id]/advanced/page.tsx
index 995fb6ae..dbf19178 100644
--- a/app/[locale]/(default)/dashboard/pages/[id]/advanced/page.tsx
+++ b/app/(default)/dashboard/pages/[id]/advanced/page.tsx
@@ -1,8 +1,7 @@
+import { Box, Flex, Skeleton } from '@/components/chakra';
import { getPage } from '@/services/pages';
-import { Box, Flex, Skeleton } from '@/components/chakra';
-import { DeleteSection } from '../../components/PageForm/DeleteSection';
-import { BasicSEO } from '../../components/BasicSEO';
+import { BasicSEO, DeleteSection } from '../../components';
type AdvancedSettingsProps = {
params: { id: string };
diff --git a/app/[locale]/(default)/dashboard/pages/[id]/layout.tsx b/app/(default)/dashboard/pages/[id]/layout.tsx
similarity index 77%
rename from app/[locale]/(default)/dashboard/pages/[id]/layout.tsx
rename to app/(default)/dashboard/pages/[id]/layout.tsx
index bb2e347f..bba1bdba 100644
--- a/app/[locale]/(default)/dashboard/pages/[id]/layout.tsx
+++ b/app/(default)/dashboard/pages/[id]/layout.tsx
@@ -1,16 +1,14 @@
import { GoBackButton, SettingNav } from '@/components/client';
import { Box, Flex } from '@/components/chakra';
-import type { ReactNode, Locale } from '@/types';
-
-import { Translations } from '../components';
import { getPage } from '@/services/pages';
+import { ReactNode } from '@/types';
export default async function EditPageLayout({
children,
params,
}: {
children: ReactNode;
- params: { locale: Locale; id: string };
+ params: { id: string };
}) {
const page = await getPage({ where: { id: params.id } });
@@ -18,12 +16,10 @@ export default async function EditPageLayout({
Back to Pages
-
- {page && }
);
}
diff --git a/app/[locale]/(default)/dashboard/pages/components/BasicSEO/index.tsx b/app/(default)/dashboard/pages/components/BasicSEO/index.tsx
similarity index 100%
rename from app/[locale]/(default)/dashboard/pages/components/BasicSEO/index.tsx
rename to app/(default)/dashboard/pages/components/BasicSEO/index.tsx
diff --git a/app/[locale]/(default)/dashboard/pages/components/PageForm/DeleteSection.tsx b/app/(default)/dashboard/pages/components/PageForm/DeleteSection.tsx
similarity index 100%
rename from app/[locale]/(default)/dashboard/pages/components/PageForm/DeleteSection.tsx
rename to app/(default)/dashboard/pages/components/PageForm/DeleteSection.tsx
diff --git a/app/[locale]/(default)/dashboard/pages/components/PageForm/index.tsx b/app/(default)/dashboard/pages/components/PageForm/index.tsx
similarity index 87%
rename from app/[locale]/(default)/dashboard/pages/components/PageForm/index.tsx
rename to app/(default)/dashboard/pages/components/PageForm/index.tsx
index 5310712c..7fce4792 100644
--- a/app/[locale]/(default)/dashboard/pages/components/PageForm/index.tsx
+++ b/app/(default)/dashboard/pages/components/PageForm/index.tsx
@@ -9,43 +9,26 @@ import {
Stack,
} from '@/components/chakra';
import { CustomEditable, FormWrapper, TextEditor } from '@/components/client';
-import {
- useAuth,
- useEffect,
- useLocale,
- useRouter,
- useState,
- useToast,
-} from '@/hooks';
+import { useAuth, useEffect, useRouter, useState, useToast } from '@/hooks';
import { ArrowUpIcon, RepeatIcon } from '@/icons';
-import { Page, PageWithPayload, Locale, HttpMethod } from '@/types';
+import { Page, PageWithPayload, HttpMethod } from '@/types';
import { isEqual } from '@/utils/compare';
import { fetcher } from '@/utils/fetcher';
import slugify from 'slugify';
+export * from './DeleteSection';
+
export type PageFormProps = {
title?: string;
backPath?: string;
data?: PageWithPayload;
- translatedPages?: Page[];
- originalId?: string;
- translateTo?: Locale;
};
-export const PageForm = ({
- backPath,
- title,
- data: propsData,
- translatedPages,
- originalId,
- translateTo,
-}: PageFormProps) => {
+export const PageForm = ({ data: propsData }: PageFormProps) => {
const toast = useToast();
const router = useRouter();
const { session } = useAuth();
- const { currentLocale, defaultLocale } = useLocale();
-
const [isLoading, setIsLoading] = useState(false);
const initialData = {
@@ -53,8 +36,6 @@ export const PageForm = ({
title: propsData?.title ?? '',
slug: propsData?.slug ?? '',
content: propsData?.content ?? '',
- locale: propsData?.locale ?? translateTo ?? currentLocale,
- originalId: propsData?.originalId ?? originalId,
meta: propsData?.meta ?? {},
tags: propsData?.tags ?? [],
};
@@ -111,8 +92,6 @@ export const PageForm = ({
title,
slug,
content,
- originalId,
- locale: translateTo ?? defaultLocale,
authorId: session.user.id,
}),
});
@@ -134,8 +113,6 @@ export const PageForm = ({
-
-
Title
@@ -16,7 +10,7 @@ export default function NewPageLayout({
;
+}
diff --git a/app/[locale]/(default)/dashboard/pages/page.tsx b/app/(default)/dashboard/pages/page.tsx
similarity index 77%
rename from app/[locale]/(default)/dashboard/pages/page.tsx
rename to app/(default)/dashboard/pages/page.tsx
index aad6ab67..88907055 100644
--- a/app/[locale]/(default)/dashboard/pages/page.tsx
+++ b/app/(default)/dashboard/pages/page.tsx
@@ -3,24 +3,17 @@ import { AddNewButton } from '@/components/client';
import { queryPages } from '@/services/pages';
import { getSession } from '@/configs/auth';
import { redirect } from 'next/navigation';
-import { Locale } from '@/types';
import { PageTable } from './components';
-export default async function PagesDashboard({
- params: { locale },
-}: {
- params: { locale: Locale };
-}) {
+export default async function PagesDashboard() {
const session = await getSession();
if (!session) {
redirect('/login');
}
- const pages = await queryPages({
- where: { locale },
- });
+ const pages = await queryPages({});
return (
diff --git a/app/(default)/dashboard/posts/[id]/page.tsx b/app/(default)/dashboard/posts/[id]/page.tsx
new file mode 100644
index 00000000..76c347cc
--- /dev/null
+++ b/app/(default)/dashboard/posts/[id]/page.tsx
@@ -0,0 +1,17 @@
+import { prisma } from '@/configs/prisma';
+
+import { PostForm } from '../components';
+
+type EditPostProps = {
+ params: {
+ id: string;
+ };
+};
+
+export default async function EditPost({ params }: EditPostProps) {
+ const { id } = params;
+
+ const post = await prisma.post.findUnique({ where: { id } });
+
+ return ;
+}
diff --git a/app/[locale]/(default)/dashboard/posts/components/PostForm/DeleteSection.tsx b/app/(default)/dashboard/posts/components/PostForm/DeleteSection.tsx
similarity index 100%
rename from app/[locale]/(default)/dashboard/posts/components/PostForm/DeleteSection.tsx
rename to app/(default)/dashboard/posts/components/PostForm/DeleteSection.tsx
diff --git a/app/[locale]/(default)/dashboard/posts/components/PostForm/index.tsx b/app/(default)/dashboard/posts/components/PostForm/index.tsx
similarity index 64%
rename from app/[locale]/(default)/dashboard/posts/components/PostForm/index.tsx
rename to app/(default)/dashboard/posts/components/PostForm/index.tsx
index b0dcd520..e713ae0d 100644
--- a/app/[locale]/(default)/dashboard/posts/components/PostForm/index.tsx
+++ b/app/(default)/dashboard/posts/components/PostForm/index.tsx
@@ -6,10 +6,6 @@ import {
Heading,
IconButton,
Input,
- Menu,
- MenuButton,
- MenuItem,
- MenuList,
Stack,
Tab,
TabList,
@@ -23,18 +19,9 @@ import {
GoBackButton,
TextEditor,
} from '@/components/client';
-import {
- AddIcon,
- ArrowUpIcon,
- CheckCircleIcon,
- ChevronDownIcon,
- GlobeIcon,
- LockIcon,
- RepeatIcon,
-} from '@/icons';
-import { useEffect, useLocale, useRouter, useState, useToast } from '@/hooks';
+import { ArrowUpIcon, RepeatIcon } from '@/icons';
+import { useEffect, useRouter, useState, useToast } from '@/hooks';
import { createPost, updatePost } from '@/services/posts';
-import { i18n } from '@/configs/i18n.config';
import { isEqual } from '@/utils/compare';
import { Post } from '@/types';
import slugify from 'slugify';
@@ -44,33 +31,23 @@ import { DeleteSection } from './DeleteSection';
export type PostFormProps = {
title?: string;
backPath?: string;
- data?: Post;
- translatedPosts?: Post[];
- originalId?: string;
- translateTo?: string;
+ data?: Post | null;
};
export const PostForm = ({
backPath,
title,
data: propsData,
- translatedPosts,
- originalId,
- translateTo,
}: PostFormProps) => {
const toast = useToast();
const router = useRouter();
- const { currentLocale, defaultLocale } = useLocale();
-
const [isLoading, setIsLoading] = useState(false);
const initialData = {
title: propsData?.title ?? '',
slug: propsData?.slug ?? '',
content: propsData?.content ?? '',
- locale: propsData?.locale ?? translateTo ?? currentLocale,
- originalId: propsData?.originalId ?? originalId,
};
const [data, setInputData] = useState(initialData);
@@ -88,43 +65,6 @@ export const PostForm = ({
const isFormDirty = isEqual(data, initialData);
- const getTranslationIcon = (locale: string) => {
- const foundTranslated = translatedPosts?.find((p) => p.locale === locale);
-
- if (defaultLocale === locale) {
- return ;
- }
-
- if (
- (foundTranslated && foundTranslated.locale === locale) ||
- data.locale === locale
- ) {
- return ;
- }
-
- return ;
- };
-
- const handleNewTranslatedPost = (locale: string) => {
- if (!propsData) return;
-
- const foundTranslated = translatedPosts?.find((p) => p.locale === locale);
-
- if (foundTranslated) {
- // Go to edit translated post version
- const newPath = `/dashboard/posts/${foundTranslated.id}`;
- router.push(newPath);
- } else if (data.originalId) {
- // Go to edit original post version
- const newPath = `/dashboard/posts/${data.originalId}`;
- router.push(newPath);
- } else {
- // Or else go to create new post
- const newPath = `/dashboard/posts/new?translateTo=${locale}&originalId=${propsData.id}`;
- router.push(newPath);
- }
- };
-
const handleSubmit = async (formData: FormData) => {
setIsLoading(true);
@@ -136,13 +76,6 @@ export const PostForm = ({
router.refresh();
}
} else {
- if (originalId && translateTo) {
- formData.append('originalId', originalId);
- formData.append('locale', translateTo);
- } else {
- formData.append('locale', currentLocale);
- }
-
const response = await createPost(formData);
if (response) {
@@ -167,31 +100,6 @@ export const PostForm = ({
-
-
;
+}
diff --git a/app/[locale]/(default)/dashboard/posts/page.tsx b/app/(default)/dashboard/posts/page.tsx
similarity index 82%
rename from app/[locale]/(default)/dashboard/posts/page.tsx
rename to app/(default)/dashboard/posts/page.tsx
index c3b9097d..200d3f5c 100644
--- a/app/[locale]/(default)/dashboard/posts/page.tsx
+++ b/app/(default)/dashboard/posts/page.tsx
@@ -1,24 +1,18 @@
-import { redirect } from 'next/navigation';
import { Flex, Heading, Spacer } from '@/components/chakra';
import { AddNewButton } from '@/components/client';
+import { redirect } from 'next/navigation';
import { prisma } from '@/configs/prisma';
-import { Locale } from '@/types';
import { PostTable } from './components';
import { getSession } from '@/configs/auth';
-export default async function PostsDashboard({
- params,
-}: {
- params: { locale: Locale };
-}) {
+export default async function PostsDashboard() {
const session = await getSession();
if (!session?.user.id) {
redirect('/login');
}
const posts = await prisma.post.findMany({
- where: { locale: params.locale },
include: { author: true },
});
diff --git a/app/[locale]/(default)/error.tsx b/app/(default)/error.tsx
similarity index 100%
rename from app/[locale]/(default)/error.tsx
rename to app/(default)/error.tsx
diff --git a/app/[locale]/(default)/layout.tsx b/app/(default)/layout.tsx
similarity index 74%
rename from app/[locale]/(default)/layout.tsx
rename to app/(default)/layout.tsx
index e1ead8e5..ff4fc0b9 100644
--- a/app/[locale]/(default)/layout.tsx
+++ b/app/(default)/layout.tsx
@@ -1,6 +1,6 @@
import { redirect } from 'next/navigation';
import { getSession } from '@/configs/auth';
-import { LocaleSwitcher, Sidebar } from '@/components/client';
+import { Sidebar } from '@/components/client';
import { ProfileMenu } from '@/components/server';
import { Box, Flex } from '@/components/chakra';
import type { ReactNode } from '@/types';
@@ -9,7 +9,6 @@ export default async function DefaultLayout({
children,
}: {
children: ReactNode;
- params: { locale: Locale };
}) {
const session = await getSession();
@@ -20,10 +19,7 @@ export default async function DefaultLayout({
return (
-
-
-
-
+
diff --git a/app/[locale]/(default)/loading.tsx b/app/(default)/loading.tsx
similarity index 100%
rename from app/[locale]/(default)/loading.tsx
rename to app/(default)/loading.tsx
diff --git a/app/[locale]/(default)/settings/loading.tsx b/app/(default)/settings/loading.tsx
similarity index 100%
rename from app/[locale]/(default)/settings/loading.tsx
rename to app/(default)/settings/loading.tsx
diff --git a/app/[locale]/(default)/settings/page.tsx b/app/(default)/settings/page.tsx
similarity index 100%
rename from app/[locale]/(default)/settings/page.tsx
rename to app/(default)/settings/page.tsx
diff --git a/app/[locale]/(custom)/page.tsx b/app/[locale]/(custom)/page.tsx
deleted file mode 100644
index 3b13fab8..00000000
--- a/app/[locale]/(custom)/page.tsx
+++ /dev/null
@@ -1,19 +0,0 @@
-import { getDictionary } from '@/utils/dictionary';
-import { Locale } from '@/types';
-
-export default async function HomePage({
- params: { locale },
-}: {
- params: { locale: Locale };
-}) {
- const { page } = await getDictionary(locale);
-
- return (
-
-
-
{page.home.title}
-
{page.home.description}
-
-
- );
-}
diff --git a/app/[locale]/(default)/dashboard/pages/components/Translations/index.tsx b/app/[locale]/(default)/dashboard/pages/components/Translations/index.tsx
deleted file mode 100644
index bd191ab4..00000000
--- a/app/[locale]/(default)/dashboard/pages/components/Translations/index.tsx
+++ /dev/null
@@ -1,76 +0,0 @@
-import {
- Button,
- Menu,
- MenuButton,
- MenuItem,
- MenuList,
-} from '@/components/chakra';
-import { AddIcon, CheckCircleIcon, ChevronDownIcon, GlobeIcon } from '@/icons';
-import { i18n } from '@/configs/i18n.config';
-import { useLocale, useRouter } from '@/hooks';
-import { PageWithPayload } from '@/types';
-
-export type TranslationsProps = {
- data: PageWithPayload;
-};
-
-export const Translations = ({ data }: TranslationsProps) => {
- const router = useRouter();
- const { currentLocale, defaultLocale } = useLocale();
-
- const { translatedPages } = data;
-
- const getTranslationIcon = (locale: string) => {
- const foundTranslated = translatedPages?.find((p) => p.locale === locale);
-
- if (foundTranslated || data.locale === locale || currentLocale === locale) {
- return ;
- }
-
- return ;
- };
-
- const handleNewTranslatedPage = (locale: string) => {
- const foundTranslated = translatedPages?.find((p) => p.locale === locale);
-
- if (foundTranslated) {
- // Go to edit translated page version
- router.push(`/dashboard/pages/${foundTranslated.id}`);
- } else if (data.originalId) {
- // Go to edit original page version
- router.push(`/dashboard/pages/${data.originalId}`);
- } else {
- // Or else go to create new page
- router.push(
- `/dashboard/pages/new?translateTo=${locale}&originalId=${data.id}`
- );
- }
- };
-
- return (
-
- );
-};
diff --git a/app/[locale]/(default)/dashboard/pages/new/page.tsx b/app/[locale]/(default)/dashboard/pages/new/page.tsx
deleted file mode 100644
index aea4b6bc..00000000
--- a/app/[locale]/(default)/dashboard/pages/new/page.tsx
+++ /dev/null
@@ -1,29 +0,0 @@
-import { redirect } from 'next/navigation';
-import { getSession } from '@/configs/auth';
-import { Locale } from '@/types';
-
-import { PageForm } from '../components';
-
-export default async function AddNewPage({
- searchParams,
-}: {
- searchParams: {
- translateTo?: Locale;
- originalId?: string;
- };
-}) {
- const session = await getSession();
-
- if (!session?.user.id) {
- redirect('/login');
- }
- const { translateTo, originalId } = searchParams;
-
- return (
-
- );
-}
diff --git a/app/[locale]/(default)/dashboard/posts/[id]/page.tsx b/app/[locale]/(default)/dashboard/posts/[id]/page.tsx
deleted file mode 100644
index d38295c6..00000000
--- a/app/[locale]/(default)/dashboard/posts/[id]/page.tsx
+++ /dev/null
@@ -1,32 +0,0 @@
-import { prisma } from '@/configs/prisma';
-
-import { PostForm } from '../components';
-
-type EditPostProps = {
- params: {
- id: string;
- };
-};
-
-export default async function EditPost({ params }: EditPostProps) {
- const { id } = params;
-
- const originalPost = await prisma.post.findUnique({ where: { id } });
-
- if (!originalPost) {
- return null;
- }
-
- const translatedPosts = await prisma.post.findMany({
- where: { originalId: id },
- });
-
- return (
-
- );
-}
diff --git a/app/[locale]/(default)/dashboard/posts/new/page.tsx b/app/[locale]/(default)/dashboard/posts/new/page.tsx
deleted file mode 100644
index 7f3e030b..00000000
--- a/app/[locale]/(default)/dashboard/posts/new/page.tsx
+++ /dev/null
@@ -1,17 +0,0 @@
-import { PostForm } from '../components';
-
-export default function AddNewPost({
- searchParams,
-}: {
- searchParams: { [key: string]: string };
-}) {
- const { translateTo, originalId } = searchParams;
-
- return (
-
- );
-}
diff --git a/app/[locale]/layout.tsx b/app/[locale]/layout.tsx
deleted file mode 100644
index d4045a2a..00000000
--- a/app/[locale]/layout.tsx
+++ /dev/null
@@ -1,33 +0,0 @@
-import { cookies } from 'next/headers';
-import { ClientCookiesProvider } from '@/components/client';
-import { Providers } from '@/components/client';
-import { ReactNode, Locale } from '@/types';
-
-export const metadata = {
- title: 'Sieutoc Website',
- description: 'Generated by Sieutoc Platform',
-};
-
-// Cause trouble with server actions
-// Read more: https://github.com/vercel/next.js/issues/54992
-// export async function generateStaticParams() {
-// return i18n.locales.map((locale) => ({ locale }));
-// }
-
-export default async function RootLayout({
- children,
- params,
-}: {
- children: ReactNode;
- params: { locale: Locale };
-}) {
- return (
-
-
-
- {children}
-
-
-
- );
-}
diff --git a/app/api/pages/[id]/route.ts b/app/api/pages/[id]/route.ts
index 944bcb53..74fbcc3e 100644
--- a/app/api/pages/[id]/route.ts
+++ b/app/api/pages/[id]/route.ts
@@ -1,15 +1,14 @@
import { NextRequest, NextResponse } from 'next/server';
import { updatePage, getPage } from '@/services/pages';
-import { i18n } from '@/configs/i18n.config';
export async function GET(
_req: NextRequest,
- { params }: { params: { id: string; locale: string } }
+ { params }: { params: { id: string } }
) {
try {
- const { id, locale = i18n.defaultLocale } = params;
+ const { id } = params;
- const page = await getPage({ where: { id, locale } });
+ const page = await getPage({ where: { id } });
return NextResponse.json(page);
} catch (error) {
diff --git a/app/layout.tsx b/app/layout.tsx
new file mode 100644
index 00000000..4a4416d2
--- /dev/null
+++ b/app/layout.tsx
@@ -0,0 +1,24 @@
+import { CookiesProvider } from 'next-client-cookies/server';
+import { ClientProviders } from '@/components/client';
+import { ReactNode } from '@/types';
+
+export const metadata = {
+ title: 'Sieutoc Website',
+ description: 'Generated by Sieutoc Platform',
+};
+
+export default async function RootLayout({
+ children,
+}: {
+ children: ReactNode;
+}) {
+ return (
+
+
+
+ {children}
+
+
+
+ );
+}
diff --git a/app/[locale]/loading.tsx b/app/loading.tsx
similarity index 100%
rename from app/[locale]/loading.tsx
rename to app/loading.tsx
diff --git a/components/client/Providers/index.tsx b/components/client/ClientProviders/index.tsx
similarity index 90%
rename from components/client/Providers/index.tsx
rename to components/client/ClientProviders/index.tsx
index 294b1409..fbdbab06 100644
--- a/components/client/Providers/index.tsx
+++ b/components/client/ClientProviders/index.tsx
@@ -9,7 +9,7 @@ import { ChakraProvider } from '@/components/chakra';
import { theme, toastOptions } from '@/configs/chakra';
import { configs } from '@/configs/swr';
-export function Providers({ children }: { children: React.ReactNode }) {
+export function ClientProviders({ children }: { children: React.ReactNode }) {
return (
diff --git a/components/client/CookiesProvider/index.tsx b/components/client/CookiesProvider/index.tsx
deleted file mode 100644
index eff539ba..00000000
--- a/components/client/CookiesProvider/index.tsx
+++ /dev/null
@@ -1,7 +0,0 @@
-'use client';
-
-import { CookiesProvider } from 'next-client-cookies';
-
-export const ClientCookiesProvider: typeof CookiesProvider = (props) => (
-
-);
diff --git a/components/client/LocaleSwitcher/index.tsx b/components/client/LocaleSwitcher/index.tsx
deleted file mode 100644
index a3944cde..00000000
--- a/components/client/LocaleSwitcher/index.tsx
+++ /dev/null
@@ -1,68 +0,0 @@
-import {
- useAuth,
- useCookies,
- useEffect,
- useLocale,
- usePathname,
- useRouter,
-} from '@/hooks';
-import { redirectedPathName } from '@/utils/redirectedPathLocale';
-import { NEXT_LOCALE } from '@/utils/constants';
-import { i18n } from '@/configs/i18n.config';
-import { Select } from '@/components/chakra';
-import { HttpMethod, Locale } from '@/types';
-
-export function LocaleSwitcher() {
- const cookies = useCookies();
- const router = useRouter();
- const pathName = usePathname();
-
- const { session } = useAuth();
- const { currentLocale } = useLocale();
-
- useEffect(() => {
- const cookieLocale = cookies.get(NEXT_LOCALE);
- if (currentLocale !== cookieLocale) {
- cookies.set(NEXT_LOCALE, currentLocale);
- }
- }, [cookies, currentLocale]);
-
- const handleChangeLocale = async (localeSelected: Locale) => {
- const userID = session?.user.id;
-
- cookies.set(NEXT_LOCALE, localeSelected);
-
- // store to database
- if (userID) {
- await fetch(`/api/users/${userID}`, {
- method: HttpMethod.PATCH,
- body: JSON.stringify({
- preferences: { locale: localeSelected },
- }),
- });
- }
-
- router.refresh();
-
- router.push(redirectedPathName(pathName, localeSelected));
- };
-
- return (
-
- );
-}
diff --git a/components/client/NextLink/index.tsx b/components/client/NextLink/index.tsx
index 0b3c044d..d3399fc0 100644
--- a/components/client/NextLink/index.tsx
+++ b/components/client/NextLink/index.tsx
@@ -12,7 +12,6 @@ export const NextLink = chakra(
'children',
'href',
'legacyBehavior',
- 'locale',
'passHref',
'prefetch',
'replace',
diff --git a/components/client/index.ts b/components/client/index.ts
index b0d1298f..86714270 100644
--- a/components/client/index.ts
+++ b/components/client/index.ts
@@ -2,22 +2,20 @@
export * from './AccessDenied';
export * from './AddNewButton';
+export * from './ClientProviders';
export * from './CustomEditable';
export * from './FormWrapper';
export * from './GoBackButton';
export * from './HTMLParser';
export * from './Loading';
-export * from './LocaleSwitcher';
export * from './Navbar';
export * from './NextImage';
export * from './NextLink';
export * from './Pagination';
export * from './Post';
-export * from './Providers';
export * from './SettingNav';
export * from './Sidebar';
export * from './Sidebar';
export * from './TextEditor';
export * from './VirtualTable';
-export * from './CookiesProvider';
export * from './ErrorBoundary';
diff --git a/components/server/ProfileMenu/index.tsx b/components/server/ProfileMenu/index.tsx
index 09017a55..0d625fa2 100644
--- a/components/server/ProfileMenu/index.tsx
+++ b/components/server/ProfileMenu/index.tsx
@@ -1,3 +1,5 @@
+'use client';
+
import {
Button,
HStack,
@@ -11,13 +13,13 @@ import {
} from '@/components/chakra';
import { NextImage, NextLink } from '@/components/client';
import { ChevronDownIcon } from '@/icons';
-import { getSession } from '@/configs/auth';
+import { useSession } from '@/hooks';
import { LogoutButton } from './LogoutButton';
import { SetColorMode } from './SetColorMode';
-export const ProfileMenu = async () => {
- const session = await getSession();
+export const ProfileMenu = () => {
+ const { data: session } = useSession();
if (!session) {
return (
diff --git a/configs/i18n.config.ts b/configs/i18n.config.ts
deleted file mode 100644
index c98f9425..00000000
--- a/configs/i18n.config.ts
+++ /dev/null
@@ -1,7 +0,0 @@
-export const i18n = {
- defaultLocale: 'en',
- locales: [
- { value: 'en', label: 'English' },
- { value: 'vi', label: 'Tiếng Việt' },
- ],
-} as const;
diff --git a/dictionaries/en.json b/dictionaries/en.json
deleted file mode 100644
index 1b45d21c..00000000
--- a/dictionaries/en.json
+++ /dev/null
@@ -1,22 +0,0 @@
-{
- "meta": {
- "name": "English"
- },
- "navigation": {
- "home": "Home",
- "about": "About"
- },
- "page": {
- "home": {
- "title": "Welcome to NextJs i18n",
- "description": "Internationalization in NextJs 13 App router"
- },
- "about": {
- "title": "About Us",
- "description": "This is the about page"
- }
- },
- "translation": {
- "new": "Add translation"
- }
-}
diff --git a/dictionaries/vi.json b/dictionaries/vi.json
deleted file mode 100644
index f66e37c4..00000000
--- a/dictionaries/vi.json
+++ /dev/null
@@ -1,19 +0,0 @@
-{
- "meta": {
- "name": "Tiếng Việt"
- },
- "navigation": {
- "home": "Trang chủ",
- "about-us": "Về chúng tôi"
- },
- "page": {
- "home": {
- "title": "Chào mứng đến với trang chủ",
- "description": "Ngôn ngữ toàn cầu với NextJs 13 App-Router"
- },
- "about-us": {
- "title": "Tiêu đề",
- "description": "Mô tả về thông tin của chúng tôi"
- }
- }
-}
diff --git a/hooks/index.ts b/hooks/index.ts
index caaea31d..ef5f40b5 100644
--- a/hooks/index.ts
+++ b/hooks/index.ts
@@ -31,4 +31,3 @@ export { default as useSWR } from 'swr';
export { useCookies } from 'next-client-cookies';
export * from './use-auth';
-export * from './use-locale';
diff --git a/hooks/use-locale.ts b/hooks/use-locale.ts
deleted file mode 100644
index effe9d88..00000000
--- a/hooks/use-locale.ts
+++ /dev/null
@@ -1,12 +0,0 @@
-import { i18n } from '@/configs/i18n.config';
-import { useParams } from '@/hooks';
-import { Locale } from '@/types';
-
-export const useLocale = () => {
- const { locale: currentLocale } = useParams();
-
- return {
- defaultLocale: i18n.defaultLocale,
- currentLocale: currentLocale as Locale,
- };
-};
diff --git a/middleware.ts b/middleware.ts
index 00feb5ac..8c070ff0 100644
--- a/middleware.ts
+++ b/middleware.ts
@@ -1,64 +1,13 @@
-import { NextRequest, NextResponse } from 'next/server';
-import { match } from '@formatjs/intl-localematcher';
-import Negotiator from 'negotiator';
+import { withAuth } from 'next-auth/middleware';
-import { NEXT_LOCALE } from './utils/constants';
-import { i18n } from './configs/i18n.config';
-
-const PUBLIC_FILE = /\.(.*)$/;
export const config = {
- // Matcher ignoring `/_next/` and `/api/`
- matcher: ['/((?!api|_next/static|_next/image|favicon.ico).*)'],
+ matcher: ['/protected', '/settings', '/api/:path?', '/dashboard/:path?'],
};
-function getLocale(request: NextRequest): string | undefined {
- const headers: Record = {};
- request.headers.forEach((value, key) => (headers[key] = value));
-
- const cookieValue = request.cookies.get(NEXT_LOCALE)?.value;
-
- if (cookieValue) {
- return cookieValue;
- }
-
- // If we dont have cookie value, try to get it from user's preferences
- const availableLocales = i18n.locales.map((locale) => locale.value);
- const acceptLanguages = new Negotiator({ headers: headers }).languages();
-
- const detectedLocale = match(
- acceptLanguages,
- availableLocales,
- i18n.defaultLocale
- );
-
- return detectedLocale;
-}
-
-export function middleware(request: NextRequest) {
- const pathname = request.nextUrl.pathname;
- const searchParams = request.nextUrl.search;
-
- //to take the files from the publisc folder
- if (PUBLIC_FILE.test(request.nextUrl.pathname)) {
- return;
- }
-
- const pathnameIsMissingLocale = i18n.locales.every(
- ({ value }) =>
- !pathname.startsWith(`/${value}/`) && pathname !== `/${value}`
- );
-
- // Redirect if there is no locale
- if (pathnameIsMissingLocale) {
- const locale = getLocale(request);
-
- return NextResponse.redirect(
- new URL(
- `/${locale}${
- pathname.startsWith('/') ? '' : '/'
- }${pathname}${searchParams}`,
- request.url
- )
- );
- }
-}
+export default withAuth({
+ pages: {
+ signIn: `/login`,
+ verifyRequest: `/login`,
+ error: '/login', // Error code passed in query string as ?error=
+ },
+});
diff --git a/package.json b/package.json
index f3b61f5e..8c36fced 100644
--- a/package.json
+++ b/package.json
@@ -3,21 +3,19 @@
"version": "0.0.0",
"private": true,
"scripts": {
- "db:generate": "prisma generate",
- "db:push": "prisma db push --skip-generate",
- "migrate:dev": "prisma migrate dev",
- "migrate:deploy": "prisma migrate deploy",
- "postinstall": "pnpm db:generate",
- "clean": "rimraf node_modules .next dist && pnpm i",
- "dev": "docker-compose up -d && pnpm run watch && docker-compose down",
- "watch": "trap 'exit 0' SIGINT; next dev",
- "lint": "eslint ./ --ext .ts,.tsx",
- "build": "next build",
+ "prisma": "prisma",
+ "postinstall": "prisma generate",
+ "clean": "rimraf node_modules .next dist && pnpm install",
+ "dev": "docker-compose up -d && pnpm watch && docker-compose down",
+ "watch": "trap 'exit 0' SIGINT; prisma generate && prisma db push && next dev",
+ "build": "prisma generate && next build",
+ "format": "prettier --write \"**/*.{css,js,json,jsx,ts,tsx}\"",
"start": "next start",
+ "lint": "next lint",
"typecheck": "tsc --noEmit"
},
"engines": {
- "node": "18.x"
+ "node": "20.x"
},
"dependencies": {
"@chakra-ui/icons": "2.1.1",
@@ -25,58 +23,56 @@
"@chakra-ui/react": "2.8.2",
"@emotion/react": "11.11.1",
"@emotion/styled": "11.11.0",
- "@formatjs/intl-localematcher": "0.5.1",
"@next-auth/prisma-adapter": "1.0.7",
- "@prisma/client": "5.6.0",
+ "@prisma/client": "5.7.0",
"@tinymce/tinymce-react": "4.3.2",
"@types/negotiator": "0.6.3",
- "@upstash/ratelimit": "0.4.4",
+ "@upstash/ratelimit": "1.0.0",
"@vercel/kv": "1.0.0",
"argon2": "0.31.2",
"date-fns": "2.30.0",
"deepmerge": "4.3.1",
"fast-deep-equal": "3.1.3",
- "framer-motion": "10.16.5",
- "html-react-parser": "5.0.6",
- "jotai": "2.5.1",
+ "framer-motion": "10.16.15",
+ "html-react-parser": "5.0.7",
+ "jotai": "2.6.0",
"lodash": "4.17.21",
"negotiator": "0.6.3",
- "next": "14.0.3",
+ "next": "14.0.4",
"next-auth": "4.24.5",
"next-client-cookies": "1.1.0",
- "nodemailer": "6.9.5",
- "qs": "6.11.2",
"nodemailer": "6.9.7",
+ "qs": "6.11.2",
"react": "18.2.0",
"react-dom": "18.2.0",
"react-fast-compare": "3.2.2",
"react-icons": "4.12.0",
- "react-use": "17.4.0",
+ "react-use": "17.4.2",
"react-virtuoso": "4.6.2",
"sanitize-html": "2.11.0",
"slugify": "1.6.6",
"swr": "2.2.4",
- "tinymce": "6.8.0",
+ "tinymce": "6.8.1",
"uuid": "9.0.1"
},
"devDependencies": {
"@tanstack/react-table": "8.10.7",
"@types/lodash": "4.14.202",
- "@types/node": "20.9.0",
+ "@types/node": "20.10.4",
"@types/nodemailer": "6.4.14",
"@types/qs": "6.9.10",
- "@types/react": "18.2.38",
+ "@types/react": "18.2.42",
"@types/react-dom": "18.2.17",
"@types/sanitize-html": "2.9.5",
"@types/uuid": "9.0.7",
- "eslint": "8.54.0",
- "eslint-config-next": "14.0.3",
- "eslint-config-prettier": "9.0.0",
+ "eslint": "8.55.0",
+ "eslint-config-next": "14.0.4",
+ "eslint-config-prettier": "9.1.0",
"prettier": "3.1.0",
- "prisma": "5.6.0",
+ "prisma": "5.7.0",
"rimraf": "5.0.5",
"server-only": "0.0.1",
"ts-node": "10.9.1",
- "typescript": "5.3.2"
+ "typescript": "5.3.3"
}
}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 21ebadba..63ef2910 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -10,25 +10,22 @@ dependencies:
version: 2.1.1(@chakra-ui/system@2.6.2)(react@18.2.0)
'@chakra-ui/next-js':
specifier: 2.2.0
- version: 2.2.0(@chakra-ui/react@2.8.2)(@emotion/react@11.11.1)(next@14.0.3)(react@18.2.0)
+ version: 2.2.0(@chakra-ui/react@2.8.2)(@emotion/react@11.11.1)(next@14.0.4)(react@18.2.0)
'@chakra-ui/react':
specifier: 2.8.2
- version: 2.8.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(@types/react@18.2.38)(framer-motion@10.16.5)(react-dom@18.2.0)(react@18.2.0)
+ version: 2.8.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(@types/react@18.2.42)(framer-motion@10.16.15)(react-dom@18.2.0)(react@18.2.0)
'@emotion/react':
specifier: 11.11.1
- version: 11.11.1(@types/react@18.2.38)(react@18.2.0)
+ version: 11.11.1(@types/react@18.2.42)(react@18.2.0)
'@emotion/styled':
specifier: 11.11.0
- version: 11.11.0(@emotion/react@11.11.1)(@types/react@18.2.38)(react@18.2.0)
- '@formatjs/intl-localematcher':
- specifier: 0.5.1
- version: 0.5.1
+ version: 11.11.0(@emotion/react@11.11.1)(@types/react@18.2.42)(react@18.2.0)
'@next-auth/prisma-adapter':
specifier: 1.0.7
- version: 1.0.7(@prisma/client@5.6.0)(next-auth@4.24.5)
+ version: 1.0.7(@prisma/client@5.7.0)(next-auth@4.24.5)
'@prisma/client':
- specifier: 5.6.0
- version: 5.6.0(prisma@5.6.0)
+ specifier: 5.7.0
+ version: 5.7.0(prisma@5.7.0)
'@tinymce/tinymce-react':
specifier: 4.3.2
version: 4.3.2(react-dom@18.2.0)(react@18.2.0)
@@ -36,8 +33,8 @@ dependencies:
specifier: 0.6.3
version: 0.6.3
'@upstash/ratelimit':
- specifier: 0.4.4
- version: 0.4.4
+ specifier: 1.0.0
+ version: 1.0.0
'@vercel/kv':
specifier: 1.0.0
version: 1.0.0
@@ -54,14 +51,14 @@ dependencies:
specifier: 3.1.3
version: 3.1.3
framer-motion:
- specifier: 10.16.5
- version: 10.16.5(react-dom@18.2.0)(react@18.2.0)
+ specifier: 10.16.15
+ version: 10.16.15(react-dom@18.2.0)(react@18.2.0)
html-react-parser:
- specifier: 5.0.6
- version: 5.0.6(react@18.2.0)
+ specifier: 5.0.7
+ version: 5.0.7(react@18.2.0)
jotai:
- specifier: 2.5.1
- version: 2.5.1(@types/react@18.2.38)(react@18.2.0)
+ specifier: 2.6.0
+ version: 2.6.0(@types/react@18.2.42)(react@18.2.0)
lodash:
specifier: 4.17.21
version: 4.17.21
@@ -69,14 +66,14 @@ dependencies:
specifier: 0.6.3
version: 0.6.3
next:
- specifier: 14.0.3
- version: 14.0.3(react-dom@18.2.0)(react@18.2.0)
+ specifier: 14.0.4
+ version: 14.0.4(react-dom@18.2.0)(react@18.2.0)
next-auth:
specifier: 4.24.5
- version: 4.24.5(next@14.0.3)(nodemailer@6.9.7)(react-dom@18.2.0)(react@18.2.0)
+ version: 4.24.5(next@14.0.4)(nodemailer@6.9.7)(react-dom@18.2.0)(react@18.2.0)
next-client-cookies:
specifier: 1.1.0
- version: 1.1.0(next@14.0.3)(react@18.2.0)
+ version: 1.1.0(next@14.0.4)(react@18.2.0)
nodemailer:
specifier: 6.9.7
version: 6.9.7
@@ -96,8 +93,8 @@ dependencies:
specifier: 4.12.0
version: 4.12.0(react@18.2.0)
react-use:
- specifier: 17.4.0
- version: 17.4.0(react-dom@18.2.0)(react@18.2.0)
+ specifier: 17.4.2
+ version: 17.4.2(react-dom@18.2.0)(react@18.2.0)
react-virtuoso:
specifier: 4.6.2
version: 4.6.2(react-dom@18.2.0)(react@18.2.0)
@@ -111,8 +108,8 @@ dependencies:
specifier: 2.2.4
version: 2.2.4(react@18.2.0)
tinymce:
- specifier: 6.8.0
- version: 6.8.0
+ specifier: 6.8.1
+ version: 6.8.1
uuid:
specifier: 9.0.1
version: 9.0.1
@@ -125,8 +122,8 @@ devDependencies:
specifier: 4.14.202
version: 4.14.202
'@types/node':
- specifier: 20.9.0
- version: 20.9.0
+ specifier: 20.10.4
+ version: 20.10.4
'@types/nodemailer':
specifier: 6.4.14
version: 6.4.14
@@ -134,8 +131,8 @@ devDependencies:
specifier: 6.9.10
version: 6.9.10
'@types/react':
- specifier: 18.2.38
- version: 18.2.38
+ specifier: 18.2.42
+ version: 18.2.42
'@types/react-dom':
specifier: 18.2.17
version: 18.2.17
@@ -146,20 +143,20 @@ devDependencies:
specifier: 9.0.7
version: 9.0.7
eslint:
- specifier: 8.54.0
- version: 8.54.0
+ specifier: 8.55.0
+ version: 8.55.0
eslint-config-next:
- specifier: 14.0.3
- version: 14.0.3(eslint@8.54.0)(typescript@5.3.2)
+ specifier: 14.0.4
+ version: 14.0.4(eslint@8.55.0)(typescript@5.3.3)
eslint-config-prettier:
- specifier: 9.0.0
- version: 9.0.0(eslint@8.54.0)
+ specifier: 9.1.0
+ version: 9.1.0(eslint@8.55.0)
prettier:
specifier: 3.1.0
version: 3.1.0
prisma:
- specifier: 5.6.0
- version: 5.6.0
+ specifier: 5.7.0
+ version: 5.7.0
rimraf:
specifier: 5.0.5
version: 5.0.5
@@ -168,10 +165,10 @@ devDependencies:
version: 0.0.1
ts-node:
specifier: 10.9.1
- version: 10.9.1(@types/node@20.9.0)(typescript@5.3.2)
+ version: 10.9.1(@types/node@20.10.4)(typescript@5.3.3)
typescript:
- specifier: 5.3.2
- version: 5.3.2
+ specifier: 5.3.3
+ version: 5.3.3
packages:
@@ -229,7 +226,7 @@ packages:
to-fast-properties: 2.0.0
dev: false
- /@chakra-ui/accordion@2.3.1(@chakra-ui/system@2.6.2)(framer-motion@10.16.5)(react@18.2.0):
+ /@chakra-ui/accordion@2.3.1(@chakra-ui/system@2.6.2)(framer-motion@10.16.15)(react@18.2.0):
resolution: {integrity: sha512-FSXRm8iClFyU+gVaXisOSEw0/4Q+qZbFRiuhIAkVU6Boj0FxAMrlo9a8AV5TuF77rgaHytCdHk0Ng+cyUijrag==}
peerDependencies:
'@chakra-ui/system': '>=2.0.0'
@@ -243,8 +240,8 @@ packages:
'@chakra-ui/react-use-merge-refs': 2.1.0(react@18.2.0)
'@chakra-ui/shared-utils': 2.0.5
'@chakra-ui/system': 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0)
- '@chakra-ui/transition': 2.1.0(framer-motion@10.16.5)(react@18.2.0)
- framer-motion: 10.16.5(react-dom@18.2.0)(react@18.2.0)
+ '@chakra-ui/transition': 2.1.0(framer-motion@10.16.15)(react@18.2.0)
+ framer-motion: 10.16.15(react-dom@18.2.0)(react@18.2.0)
react: 18.2.0
dev: false
@@ -402,7 +399,7 @@ packages:
'@emotion/react': '>=10.0.35'
react: '>=18'
dependencies:
- '@emotion/react': 11.11.1(@types/react@18.2.38)(react@18.2.0)
+ '@emotion/react': 11.11.1(@types/react@18.2.42)(react@18.2.0)
react: 18.2.0
dev: false
@@ -443,14 +440,14 @@ packages:
resolution: {integrity: sha512-IGM/yGUHS+8TOQrZGpAKOJl/xGBrmRYJrmbHfUE7zrG3PpQyXvbLDP1M+RggkCFVgHlJi2wpYIf0QtQlU0XZfw==}
dev: false
- /@chakra-ui/focus-lock@2.1.0(@types/react@18.2.38)(react@18.2.0):
+ /@chakra-ui/focus-lock@2.1.0(@types/react@18.2.42)(react@18.2.0):
resolution: {integrity: sha512-EmGx4PhWGjm4dpjRqM4Aa+rCWBxP+Rq8Uc/nAVnD4YVqkEhBkrPTpui2lnjsuxqNaZ24fIAZ10cF1hlpemte/w==}
peerDependencies:
react: '>=18'
dependencies:
'@chakra-ui/dom-utils': 2.1.0
react: 18.2.0
- react-focus-lock: 2.9.5(@types/react@18.2.38)(react@18.2.0)
+ react-focus-lock: 2.9.5(@types/react@18.2.42)(react@18.2.0)
transitivePeerDependencies:
- '@types/react'
dev: false
@@ -572,7 +569,7 @@ packages:
react: 18.2.0
dev: false
- /@chakra-ui/menu@2.2.1(@chakra-ui/system@2.6.2)(framer-motion@10.16.5)(react@18.2.0):
+ /@chakra-ui/menu@2.2.1(@chakra-ui/system@2.6.2)(framer-motion@10.16.15)(react@18.2.0):
resolution: {integrity: sha512-lJS7XEObzJxsOwWQh7yfG4H8FzFPRP5hVPN/CL+JzytEINCSBvsCDHrYPQGp7jzpCi8vnTqQQGQe0f8dwnXd2g==}
peerDependencies:
'@chakra-ui/system': '>=2.0.0'
@@ -594,12 +591,12 @@ packages:
'@chakra-ui/react-use-update-effect': 2.1.0(react@18.2.0)
'@chakra-ui/shared-utils': 2.0.5
'@chakra-ui/system': 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0)
- '@chakra-ui/transition': 2.1.0(framer-motion@10.16.5)(react@18.2.0)
- framer-motion: 10.16.5(react-dom@18.2.0)(react@18.2.0)
+ '@chakra-ui/transition': 2.1.0(framer-motion@10.16.15)(react@18.2.0)
+ framer-motion: 10.16.15(react-dom@18.2.0)(react@18.2.0)
react: 18.2.0
dev: false
- /@chakra-ui/modal@2.3.1(@chakra-ui/system@2.6.2)(@types/react@18.2.38)(framer-motion@10.16.5)(react-dom@18.2.0)(react@18.2.0):
+ /@chakra-ui/modal@2.3.1(@chakra-ui/system@2.6.2)(@types/react@18.2.42)(framer-motion@10.16.15)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-TQv1ZaiJMZN+rR9DK0snx/OPwmtaGH1HbZtlYt4W4s6CzyK541fxLRTjIXfEzIGpvNW+b6VFuFjbcR78p4DEoQ==}
peerDependencies:
'@chakra-ui/system': '>=2.0.0'
@@ -608,24 +605,24 @@ packages:
react-dom: '>=18'
dependencies:
'@chakra-ui/close-button': 2.1.1(@chakra-ui/system@2.6.2)(react@18.2.0)
- '@chakra-ui/focus-lock': 2.1.0(@types/react@18.2.38)(react@18.2.0)
+ '@chakra-ui/focus-lock': 2.1.0(@types/react@18.2.42)(react@18.2.0)
'@chakra-ui/portal': 2.1.0(react-dom@18.2.0)(react@18.2.0)
'@chakra-ui/react-context': 2.1.0(react@18.2.0)
'@chakra-ui/react-types': 2.0.7(react@18.2.0)
'@chakra-ui/react-use-merge-refs': 2.1.0(react@18.2.0)
'@chakra-ui/shared-utils': 2.0.5
'@chakra-ui/system': 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0)
- '@chakra-ui/transition': 2.1.0(framer-motion@10.16.5)(react@18.2.0)
+ '@chakra-ui/transition': 2.1.0(framer-motion@10.16.15)(react@18.2.0)
aria-hidden: 1.2.3
- framer-motion: 10.16.5(react-dom@18.2.0)(react@18.2.0)
+ framer-motion: 10.16.15(react-dom@18.2.0)(react@18.2.0)
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
- react-remove-scroll: 2.5.6(@types/react@18.2.38)(react@18.2.0)
+ react-remove-scroll: 2.5.6(@types/react@18.2.42)(react@18.2.0)
transitivePeerDependencies:
- '@types/react'
dev: false
- /@chakra-ui/next-js@2.2.0(@chakra-ui/react@2.8.2)(@emotion/react@11.11.1)(next@14.0.3)(react@18.2.0):
+ /@chakra-ui/next-js@2.2.0(@chakra-ui/react@2.8.2)(@emotion/react@11.11.1)(next@14.0.4)(react@18.2.0):
resolution: {integrity: sha512-brCz0UEOlImX4Np2jDIaljZJkW6kiDSuXG5erxvYjZlklLhmti1zj0o1sSjt5yff1xndfgHoOJb+BYG5wx+vDg==}
peerDependencies:
'@chakra-ui/react': '>=2.4.0'
@@ -633,10 +630,10 @@ packages:
next: '>=13'
react: '>=18'
dependencies:
- '@chakra-ui/react': 2.8.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(@types/react@18.2.38)(framer-motion@10.16.5)(react-dom@18.2.0)(react@18.2.0)
+ '@chakra-ui/react': 2.8.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(@types/react@18.2.42)(framer-motion@10.16.15)(react-dom@18.2.0)(react@18.2.0)
'@emotion/cache': 11.11.0
- '@emotion/react': 11.11.1(@types/react@18.2.38)(react@18.2.0)
- next: 14.0.3(react-dom@18.2.0)(react@18.2.0)
+ '@emotion/react': 11.11.1(@types/react@18.2.42)(react@18.2.0)
+ next: 14.0.4(react-dom@18.2.0)(react@18.2.0)
react: 18.2.0
dev: false
@@ -686,7 +683,7 @@ packages:
react: 18.2.0
dev: false
- /@chakra-ui/popover@2.2.1(@chakra-ui/system@2.6.2)(framer-motion@10.16.5)(react@18.2.0):
+ /@chakra-ui/popover@2.2.1(@chakra-ui/system@2.6.2)(framer-motion@10.16.15)(react@18.2.0):
resolution: {integrity: sha512-K+2ai2dD0ljvJnlrzesCDT9mNzLifE3noGKZ3QwLqd/K34Ym1W/0aL1ERSynrcG78NKoXS54SdEzkhCZ4Gn/Zg==}
peerDependencies:
'@chakra-ui/system': '>=2.0.0'
@@ -705,7 +702,7 @@ packages:
'@chakra-ui/react-use-merge-refs': 2.1.0(react@18.2.0)
'@chakra-ui/shared-utils': 2.0.5
'@chakra-ui/system': 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0)
- framer-motion: 10.16.5(react-dom@18.2.0)(react@18.2.0)
+ framer-motion: 10.16.15(react-dom@18.2.0)(react@18.2.0)
react: 18.2.0
dev: false
@@ -756,8 +753,8 @@ packages:
'@chakra-ui/react-env': 3.1.0(react@18.2.0)
'@chakra-ui/system': 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0)
'@chakra-ui/utils': 2.0.15
- '@emotion/react': 11.11.1(@types/react@18.2.38)(react@18.2.0)
- '@emotion/styled': 11.11.0(@emotion/react@11.11.1)(@types/react@18.2.38)(react@18.2.0)
+ '@emotion/react': 11.11.1(@types/react@18.2.42)(react@18.2.0)
+ '@emotion/styled': 11.11.0(@emotion/react@11.11.1)(@types/react@18.2.42)(react@18.2.0)
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
dev: false
@@ -973,7 +970,7 @@ packages:
react: 18.2.0
dev: false
- /@chakra-ui/react@2.8.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(@types/react@18.2.38)(framer-motion@10.16.5)(react-dom@18.2.0)(react@18.2.0):
+ /@chakra-ui/react@2.8.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(@types/react@18.2.42)(framer-motion@10.16.15)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-Hn0moyxxyCDKuR9ywYpqgX8dvjqwu9ArwpIb9wHNYjnODETjLwazgNIliCVBRcJvysGRiV51U2/JtJVrpeCjUQ==}
peerDependencies:
'@emotion/react': ^11.0.0
@@ -982,7 +979,7 @@ packages:
react: '>=18'
react-dom: '>=18'
dependencies:
- '@chakra-ui/accordion': 2.3.1(@chakra-ui/system@2.6.2)(framer-motion@10.16.5)(react@18.2.0)
+ '@chakra-ui/accordion': 2.3.1(@chakra-ui/system@2.6.2)(framer-motion@10.16.15)(react@18.2.0)
'@chakra-ui/alert': 2.2.2(@chakra-ui/system@2.6.2)(react@18.2.0)
'@chakra-ui/avatar': 2.3.0(@chakra-ui/system@2.6.2)(react@18.2.0)
'@chakra-ui/breadcrumb': 2.2.0(@chakra-ui/system@2.6.2)(react@18.2.0)
@@ -994,7 +991,7 @@ packages:
'@chakra-ui/counter': 2.1.0(react@18.2.0)
'@chakra-ui/css-reset': 2.3.0(@emotion/react@11.11.1)(react@18.2.0)
'@chakra-ui/editable': 3.1.0(@chakra-ui/system@2.6.2)(react@18.2.0)
- '@chakra-ui/focus-lock': 2.1.0(@types/react@18.2.38)(react@18.2.0)
+ '@chakra-ui/focus-lock': 2.1.0(@types/react@18.2.42)(react@18.2.0)
'@chakra-ui/form-control': 2.2.0(@chakra-ui/system@2.6.2)(react@18.2.0)
'@chakra-ui/hooks': 2.2.1(react@18.2.0)
'@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2)(react@18.2.0)
@@ -1003,11 +1000,11 @@ packages:
'@chakra-ui/layout': 2.3.1(@chakra-ui/system@2.6.2)(react@18.2.0)
'@chakra-ui/live-region': 2.1.0(react@18.2.0)
'@chakra-ui/media-query': 3.3.0(@chakra-ui/system@2.6.2)(react@18.2.0)
- '@chakra-ui/menu': 2.2.1(@chakra-ui/system@2.6.2)(framer-motion@10.16.5)(react@18.2.0)
- '@chakra-ui/modal': 2.3.1(@chakra-ui/system@2.6.2)(@types/react@18.2.38)(framer-motion@10.16.5)(react-dom@18.2.0)(react@18.2.0)
+ '@chakra-ui/menu': 2.2.1(@chakra-ui/system@2.6.2)(framer-motion@10.16.15)(react@18.2.0)
+ '@chakra-ui/modal': 2.3.1(@chakra-ui/system@2.6.2)(@types/react@18.2.42)(framer-motion@10.16.15)(react-dom@18.2.0)(react@18.2.0)
'@chakra-ui/number-input': 2.1.2(@chakra-ui/system@2.6.2)(react@18.2.0)
'@chakra-ui/pin-input': 2.1.0(@chakra-ui/system@2.6.2)(react@18.2.0)
- '@chakra-ui/popover': 2.2.1(@chakra-ui/system@2.6.2)(framer-motion@10.16.5)(react@18.2.0)
+ '@chakra-ui/popover': 2.2.1(@chakra-ui/system@2.6.2)(framer-motion@10.16.15)(react@18.2.0)
'@chakra-ui/popper': 3.1.0(react@18.2.0)
'@chakra-ui/portal': 2.1.0(react-dom@18.2.0)(react@18.2.0)
'@chakra-ui/progress': 2.2.0(@chakra-ui/system@2.6.2)(react@18.2.0)
@@ -1022,7 +1019,7 @@ packages:
'@chakra-ui/stat': 2.1.1(@chakra-ui/system@2.6.2)(react@18.2.0)
'@chakra-ui/stepper': 2.3.1(@chakra-ui/system@2.6.2)(react@18.2.0)
'@chakra-ui/styled-system': 2.9.2
- '@chakra-ui/switch': 2.1.2(@chakra-ui/system@2.6.2)(framer-motion@10.16.5)(react@18.2.0)
+ '@chakra-ui/switch': 2.1.2(@chakra-ui/system@2.6.2)(framer-motion@10.16.15)(react@18.2.0)
'@chakra-ui/system': 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0)
'@chakra-ui/table': 2.1.0(@chakra-ui/system@2.6.2)(react@18.2.0)
'@chakra-ui/tabs': 3.0.0(@chakra-ui/system@2.6.2)(react@18.2.0)
@@ -1030,14 +1027,14 @@ packages:
'@chakra-ui/textarea': 2.1.2(@chakra-ui/system@2.6.2)(react@18.2.0)
'@chakra-ui/theme': 3.3.1(@chakra-ui/styled-system@2.9.2)
'@chakra-ui/theme-utils': 2.0.21
- '@chakra-ui/toast': 7.0.2(@chakra-ui/system@2.6.2)(framer-motion@10.16.5)(react-dom@18.2.0)(react@18.2.0)
- '@chakra-ui/tooltip': 2.3.1(@chakra-ui/system@2.6.2)(framer-motion@10.16.5)(react-dom@18.2.0)(react@18.2.0)
- '@chakra-ui/transition': 2.1.0(framer-motion@10.16.5)(react@18.2.0)
+ '@chakra-ui/toast': 7.0.2(@chakra-ui/system@2.6.2)(framer-motion@10.16.15)(react-dom@18.2.0)(react@18.2.0)
+ '@chakra-ui/tooltip': 2.3.1(@chakra-ui/system@2.6.2)(framer-motion@10.16.15)(react-dom@18.2.0)(react@18.2.0)
+ '@chakra-ui/transition': 2.1.0(framer-motion@10.16.15)(react@18.2.0)
'@chakra-ui/utils': 2.0.15
'@chakra-ui/visually-hidden': 2.2.0(@chakra-ui/system@2.6.2)(react@18.2.0)
- '@emotion/react': 11.11.1(@types/react@18.2.38)(react@18.2.0)
- '@emotion/styled': 11.11.0(@emotion/react@11.11.1)(@types/react@18.2.38)(react@18.2.0)
- framer-motion: 10.16.5(react-dom@18.2.0)(react@18.2.0)
+ '@emotion/react': 11.11.1(@types/react@18.2.42)(react@18.2.0)
+ '@emotion/styled': 11.11.0(@emotion/react@11.11.1)(@types/react@18.2.42)(react@18.2.0)
+ framer-motion: 10.16.15(react-dom@18.2.0)(react@18.2.0)
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
transitivePeerDependencies:
@@ -1148,7 +1145,7 @@ packages:
lodash.mergewith: 4.6.2
dev: false
- /@chakra-ui/switch@2.1.2(@chakra-ui/system@2.6.2)(framer-motion@10.16.5)(react@18.2.0):
+ /@chakra-ui/switch@2.1.2(@chakra-ui/system@2.6.2)(framer-motion@10.16.15)(react@18.2.0):
resolution: {integrity: sha512-pgmi/CC+E1v31FcnQhsSGjJnOE2OcND4cKPyTE+0F+bmGm48Q/b5UmKD9Y+CmZsrt/7V3h8KNczowupfuBfIHA==}
peerDependencies:
'@chakra-ui/system': '>=2.0.0'
@@ -1158,7 +1155,7 @@ packages:
'@chakra-ui/checkbox': 2.3.2(@chakra-ui/system@2.6.2)(react@18.2.0)
'@chakra-ui/shared-utils': 2.0.5
'@chakra-ui/system': 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0)
- framer-motion: 10.16.5(react-dom@18.2.0)(react@18.2.0)
+ framer-motion: 10.16.15(react-dom@18.2.0)(react@18.2.0)
react: 18.2.0
dev: false
@@ -1175,8 +1172,8 @@ packages:
'@chakra-ui/styled-system': 2.9.2
'@chakra-ui/theme-utils': 2.0.21
'@chakra-ui/utils': 2.0.15
- '@emotion/react': 11.11.1(@types/react@18.2.38)(react@18.2.0)
- '@emotion/styled': 11.11.0(@emotion/react@11.11.1)(@types/react@18.2.38)(react@18.2.0)
+ '@emotion/react': 11.11.1(@types/react@18.2.42)(react@18.2.0)
+ '@emotion/styled': 11.11.0(@emotion/react@11.11.1)(@types/react@18.2.42)(react@18.2.0)
react: 18.2.0
react-fast-compare: 3.2.2
dev: false
@@ -1267,7 +1264,7 @@ packages:
'@chakra-ui/theme-tools': 2.1.2(@chakra-ui/styled-system@2.9.2)
dev: false
- /@chakra-ui/toast@7.0.2(@chakra-ui/system@2.6.2)(framer-motion@10.16.5)(react-dom@18.2.0)(react@18.2.0):
+ /@chakra-ui/toast@7.0.2(@chakra-ui/system@2.6.2)(framer-motion@10.16.15)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-yvRP8jFKRs/YnkuE41BVTq9nB2v/KDRmje9u6dgDmE5+1bFt3bwjdf9gVbif4u5Ve7F7BGk5E093ARRVtvLvXA==}
peerDependencies:
'@chakra-ui/system': 2.6.2
@@ -1285,12 +1282,12 @@ packages:
'@chakra-ui/styled-system': 2.9.2
'@chakra-ui/system': 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0)
'@chakra-ui/theme': 3.3.1(@chakra-ui/styled-system@2.9.2)
- framer-motion: 10.16.5(react-dom@18.2.0)(react@18.2.0)
+ framer-motion: 10.16.15(react-dom@18.2.0)(react@18.2.0)
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
dev: false
- /@chakra-ui/tooltip@2.3.1(@chakra-ui/system@2.6.2)(framer-motion@10.16.5)(react-dom@18.2.0)(react@18.2.0):
+ /@chakra-ui/tooltip@2.3.1(@chakra-ui/system@2.6.2)(framer-motion@10.16.15)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-Rh39GBn/bL4kZpuEMPPRwYNnccRCL+w9OqamWHIB3Qboxs6h8cOyXfIdGxjo72lvhu1QI/a4KFqkM3St+WfC0A==}
peerDependencies:
'@chakra-ui/system': '>=2.0.0'
@@ -1307,19 +1304,19 @@ packages:
'@chakra-ui/react-use-merge-refs': 2.1.0(react@18.2.0)
'@chakra-ui/shared-utils': 2.0.5
'@chakra-ui/system': 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0)
- framer-motion: 10.16.5(react-dom@18.2.0)(react@18.2.0)
+ framer-motion: 10.16.15(react-dom@18.2.0)(react@18.2.0)
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
dev: false
- /@chakra-ui/transition@2.1.0(framer-motion@10.16.5)(react@18.2.0):
+ /@chakra-ui/transition@2.1.0(framer-motion@10.16.15)(react@18.2.0):
resolution: {integrity: sha512-orkT6T/Dt+/+kVwJNy7zwJ+U2xAZ3EU7M3XCs45RBvUnZDr/u9vdmaM/3D/rOpmQJWgQBwKPJleUXrYWUagEDQ==}
peerDependencies:
framer-motion: '>=4.0.0'
react: '>=18'
dependencies:
'@chakra-ui/shared-utils': 2.0.5
- framer-motion: 10.16.5(react-dom@18.2.0)(react@18.2.0)
+ framer-motion: 10.16.15(react-dom@18.2.0)(react@18.2.0)
react: 18.2.0
dev: false
@@ -1403,7 +1400,7 @@ packages:
resolution: {integrity: sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==}
dev: false
- /@emotion/react@11.11.1(@types/react@18.2.38)(react@18.2.0):
+ /@emotion/react@11.11.1(@types/react@18.2.42)(react@18.2.0):
resolution: {integrity: sha512-5mlW1DquU5HaxjLkfkGN1GA/fvVGdyHURRiX/0FHl2cfIfRxSOfmxEH5YS43edp0OldZrZ+dkBKbngxcNCdZvA==}
peerDependencies:
'@types/react': '*'
@@ -1419,7 +1416,7 @@ packages:
'@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.2.0)
'@emotion/utils': 1.2.1
'@emotion/weak-memoize': 0.3.1
- '@types/react': 18.2.38
+ '@types/react': 18.2.42
hoist-non-react-statics: 3.3.2
react: 18.2.0
dev: false
@@ -1438,7 +1435,7 @@ packages:
resolution: {integrity: sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==}
dev: false
- /@emotion/styled@11.11.0(@emotion/react@11.11.1)(@types/react@18.2.38)(react@18.2.0):
+ /@emotion/styled@11.11.0(@emotion/react@11.11.1)(@types/react@18.2.42)(react@18.2.0):
resolution: {integrity: sha512-hM5Nnvu9P3midq5aaXj4I+lnSfNi7Pmd4EWk1fOZ3pxookaQTNew6bp4JaCBYM4HVFZF9g7UjJmsUmC2JlxOng==}
peerDependencies:
'@emotion/react': ^11.0.0-rc.0
@@ -1451,11 +1448,11 @@ packages:
'@babel/runtime': 7.22.15
'@emotion/babel-plugin': 11.11.0
'@emotion/is-prop-valid': 1.2.1
- '@emotion/react': 11.11.1(@types/react@18.2.38)(react@18.2.0)
+ '@emotion/react': 11.11.1(@types/react@18.2.42)(react@18.2.0)
'@emotion/serialize': 1.1.2
'@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.2.0)
'@emotion/utils': 1.2.1
- '@types/react': 18.2.38
+ '@types/react': 18.2.42
react: 18.2.0
dev: false
@@ -1479,13 +1476,13 @@ packages:
resolution: {integrity: sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==}
dev: false
- /@eslint-community/eslint-utils@4.4.0(eslint@8.54.0):
+ /@eslint-community/eslint-utils@4.4.0(eslint@8.55.0):
resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
dependencies:
- eslint: 8.54.0
+ eslint: 8.55.0
eslint-visitor-keys: 3.4.3
dev: true
@@ -1494,8 +1491,8 @@ packages:
engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
dev: true
- /@eslint/eslintrc@2.1.3:
- resolution: {integrity: sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA==}
+ /@eslint/eslintrc@2.1.4:
+ resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
dependencies:
ajv: 6.12.6
@@ -1511,17 +1508,11 @@ packages:
- supports-color
dev: true
- /@eslint/js@8.54.0:
- resolution: {integrity: sha512-ut5V+D+fOoWPgGGNj83GGjnntO39xDy6DWxO0wb7Jp3DcMX0TfIqdzHF85VTQkerdyGmuuMD9AKAo5KiNlf/AQ==}
+ /@eslint/js@8.55.0:
+ resolution: {integrity: sha512-qQfo2mxH5yVom1kacMtZZJFVdW+E70mqHMJvVg6WTLo+VBuQJ4TojZlfWBjK0ve5BdEeNAVxOsl/nvNMpJOaJA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
dev: true
- /@formatjs/intl-localematcher@0.5.1:
- resolution: {integrity: sha512-An6EtxT0txJI8dQwOmLqs4lC3/+Dl9YuTGDWdxxtAT/9sx0r9DupnC3/k6F87Tb5gqXdR/ACdB7bmR+Zo2eu+g==}
- dependencies:
- tslib: 2.6.2
- dev: false
-
/@humanwhocodes/config-array@0.11.13:
resolution: {integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==}
engines: {node: '>=10.10.0'}
@@ -1561,7 +1552,6 @@ packages:
/@jridgewell/sourcemap-codec@1.4.15:
resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==}
- dev: true
/@jridgewell/trace-mapping@0.3.9:
resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==}
@@ -1588,28 +1578,28 @@ packages:
- supports-color
dev: false
- /@next-auth/prisma-adapter@1.0.7(@prisma/client@5.6.0)(next-auth@4.24.5):
+ /@next-auth/prisma-adapter@1.0.7(@prisma/client@5.7.0)(next-auth@4.24.5):
resolution: {integrity: sha512-Cdko4KfcmKjsyHFrWwZ//lfLUbcLqlyFqjd/nYE2m3aZ7tjMNUjpks47iw7NTCnXf+5UWz5Ypyt1dSs1EP5QJw==}
peerDependencies:
'@prisma/client': '>=2.26.0 || >=3'
next-auth: ^4
dependencies:
- '@prisma/client': 5.6.0(prisma@5.6.0)
- next-auth: 4.24.5(next@14.0.3)(nodemailer@6.9.7)(react-dom@18.2.0)(react@18.2.0)
+ '@prisma/client': 5.7.0(prisma@5.7.0)
+ next-auth: 4.24.5(next@14.0.4)(nodemailer@6.9.7)(react-dom@18.2.0)(react@18.2.0)
dev: false
- /@next/env@14.0.3:
- resolution: {integrity: sha512-7xRqh9nMvP5xrW4/+L0jgRRX+HoNRGnfJpD+5Wq6/13j3dsdzxO3BCXn7D3hMqsDb+vjZnJq+vI7+EtgrYZTeA==}
+ /@next/env@14.0.4:
+ resolution: {integrity: sha512-irQnbMLbUNQpP1wcE5NstJtbuA/69kRfzBrpAD7Gsn8zm/CY6YQYc3HQBz8QPxwISG26tIm5afvvVbu508oBeQ==}
dev: false
- /@next/eslint-plugin-next@14.0.3:
- resolution: {integrity: sha512-j4K0n+DcmQYCVnSAM+UByTVfIHnYQy2ODozfQP+4RdwtRDfobrIvKq1K4Exb2koJ79HSSa7s6B2SA8T/1YR3RA==}
+ /@next/eslint-plugin-next@14.0.4:
+ resolution: {integrity: sha512-U3qMNHmEZoVmHA0j/57nRfi3AscXNvkOnxDmle/69Jz/G0o/gWjXTDdlgILZdrxQ0Lw/jv2mPW8PGy0EGIHXhQ==}
dependencies:
glob: 7.1.7
dev: true
- /@next/swc-darwin-arm64@14.0.3:
- resolution: {integrity: sha512-64JbSvi3nbbcEtyitNn2LEDS/hcleAFpHdykpcnrstITFlzFgB/bW0ER5/SJJwUPj+ZPY+z3e+1jAfcczRLVGw==}
+ /@next/swc-darwin-arm64@14.0.4:
+ resolution: {integrity: sha512-mF05E/5uPthWzyYDyptcwHptucf/jj09i2SXBPwNzbgBNc+XnwzrL0U6BmPjQeOL+FiB+iG1gwBeq7mlDjSRPg==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [darwin]
@@ -1617,8 +1607,8 @@ packages:
dev: false
optional: true
- /@next/swc-darwin-x64@14.0.3:
- resolution: {integrity: sha512-RkTf+KbAD0SgYdVn1XzqE/+sIxYGB7NLMZRn9I4Z24afrhUpVJx6L8hsRnIwxz3ERE2NFURNliPjJ2QNfnWicQ==}
+ /@next/swc-darwin-x64@14.0.4:
+ resolution: {integrity: sha512-IZQ3C7Bx0k2rYtrZZxKKiusMTM9WWcK5ajyhOZkYYTCc8xytmwSzR1skU7qLgVT/EY9xtXDG0WhY6fyujnI3rw==}
engines: {node: '>= 10'}
cpu: [x64]
os: [darwin]
@@ -1626,8 +1616,8 @@ packages:
dev: false
optional: true
- /@next/swc-linux-arm64-gnu@14.0.3:
- resolution: {integrity: sha512-3tBWGgz7M9RKLO6sPWC6c4pAw4geujSwQ7q7Si4d6bo0l6cLs4tmO+lnSwFp1Tm3lxwfMk0SgkJT7EdwYSJvcg==}
+ /@next/swc-linux-arm64-gnu@14.0.4:
+ resolution: {integrity: sha512-VwwZKrBQo/MGb1VOrxJ6LrKvbpo7UbROuyMRvQKTFKhNaXjUmKTu7wxVkIuCARAfiI8JpaWAnKR+D6tzpCcM4w==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
@@ -1635,8 +1625,8 @@ packages:
dev: false
optional: true
- /@next/swc-linux-arm64-musl@14.0.3:
- resolution: {integrity: sha512-v0v8Kb8j8T23jvVUWZeA2D8+izWspeyeDGNaT2/mTHWp7+37fiNfL8bmBWiOmeumXkacM/AB0XOUQvEbncSnHA==}
+ /@next/swc-linux-arm64-musl@14.0.4:
+ resolution: {integrity: sha512-8QftwPEW37XxXoAwsn+nXlodKWHfpMaSvt81W43Wh8dv0gkheD+30ezWMcFGHLI71KiWmHK5PSQbTQGUiidvLQ==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
@@ -1644,8 +1634,8 @@ packages:
dev: false
optional: true
- /@next/swc-linux-x64-gnu@14.0.3:
- resolution: {integrity: sha512-VM1aE1tJKLBwMGtyBR21yy+STfl0MapMQnNrXkxeyLs0GFv/kZqXS5Jw/TQ3TSUnbv0QPDf/X8sDXuMtSgG6eg==}
+ /@next/swc-linux-x64-gnu@14.0.4:
+ resolution: {integrity: sha512-/s/Pme3VKfZAfISlYVq2hzFS8AcAIOTnoKupc/j4WlvF6GQ0VouS2Q2KEgPuO1eMBwakWPB1aYFIA4VNVh667A==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
@@ -1653,8 +1643,8 @@ packages:
dev: false
optional: true
- /@next/swc-linux-x64-musl@14.0.3:
- resolution: {integrity: sha512-64EnmKy18MYFL5CzLaSuUn561hbO1Gk16jM/KHznYP3iCIfF9e3yULtHaMy0D8zbHfxset9LTOv6cuYKJgcOxg==}
+ /@next/swc-linux-x64-musl@14.0.4:
+ resolution: {integrity: sha512-m8z/6Fyal4L9Bnlxde5g2Mfa1Z7dasMQyhEhskDATpqr+Y0mjOBZcXQ7G5U+vgL22cI4T7MfvgtrM2jdopqWaw==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
@@ -1662,8 +1652,8 @@ packages:
dev: false
optional: true
- /@next/swc-win32-arm64-msvc@14.0.3:
- resolution: {integrity: sha512-WRDp8QrmsL1bbGtsh5GqQ/KWulmrnMBgbnb+59qNTW1kVi1nG/2ndZLkcbs2GX7NpFLlToLRMWSQXmPzQm4tog==}
+ /@next/swc-win32-arm64-msvc@14.0.4:
+ resolution: {integrity: sha512-7Wv4PRiWIAWbm5XrGz3D8HUkCVDMMz9igffZG4NB1p4u1KoItwx9qjATHz88kwCEal/HXmbShucaslXCQXUM5w==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [win32]
@@ -1671,8 +1661,8 @@ packages:
dev: false
optional: true
- /@next/swc-win32-ia32-msvc@14.0.3:
- resolution: {integrity: sha512-EKffQeqCrj+t6qFFhIFTRoqb2QwX1mU7iTOvMyLbYw3QtqTw9sMwjykyiMlZlrfm2a4fA84+/aeW+PMg1MjuTg==}
+ /@next/swc-win32-ia32-msvc@14.0.4:
+ resolution: {integrity: sha512-zLeNEAPULsl0phfGb4kdzF/cAVIfaC7hY+kt0/d+y9mzcZHsMS3hAS829WbJ31DkSlVKQeHEjZHIdhN+Pg7Gyg==}
engines: {node: '>= 10'}
cpu: [ia32]
os: [win32]
@@ -1680,8 +1670,8 @@ packages:
dev: false
optional: true
- /@next/swc-win32-x64-msvc@14.0.3:
- resolution: {integrity: sha512-ERhKPSJ1vQrPiwrs15Pjz/rvDHZmkmvbf/BjPN/UCOI++ODftT0GtasDPi0j+y6PPJi5HsXw+dpRaXUaw4vjuQ==}
+ /@next/swc-win32-x64-msvc@14.0.4:
+ resolution: {integrity: sha512-yEh2+R8qDlDCjxVpzOTEpBLQTEFAcP2A8fUFLaWNap9GitYKkKv1//y2S6XY6zsR4rCOPRpU7plYDR+az2n30A==}
engines: {node: '>= 10'}
cpu: [x64]
os: [win32]
@@ -1730,8 +1720,8 @@ packages:
resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==}
dev: false
- /@prisma/client@5.6.0(prisma@5.6.0):
- resolution: {integrity: sha512-mUDefQFa1wWqk4+JhKPYq8BdVoFk9NFMBXUI8jAkBfQTtgx8WPx02U2HB/XbAz3GSUJpeJOKJQtNvaAIDs6sug==}
+ /@prisma/client@5.7.0(prisma@5.7.0):
+ resolution: {integrity: sha512-cZmglCrfNbYpzUtz7HscVHl38e9CrUs31nrVoGUK1nIPXGgt8hT4jj2s657UXcNdQ/jBUxDgGmHyu2Nyrq1txg==}
engines: {node: '>=16.13'}
requiresBuild: true
peerDependencies:
@@ -1740,17 +1730,35 @@ packages:
prisma:
optional: true
dependencies:
- '@prisma/engines-version': 5.6.0-32.e95e739751f42d8ca026f6b910f5a2dc5adeaeee
- prisma: 5.6.0
+ prisma: 5.7.0
dev: false
- /@prisma/engines-version@5.6.0-32.e95e739751f42d8ca026f6b910f5a2dc5adeaeee:
- resolution: {integrity: sha512-UoFgbV1awGL/3wXuUK3GDaX2SolqczeeJ5b4FVec9tzeGbSWJboPSbT0psSrmgYAKiKnkOPFSLlH6+b+IyOwAw==}
- dev: false
+ /@prisma/debug@5.7.0:
+ resolution: {integrity: sha512-tZ+MOjWlVvz1kOEhNYMa4QUGURY+kgOUBqLHYIV8jmCsMuvA1tWcn7qtIMLzYWCbDcQT4ZS8xDgK0R2gl6/0wA==}
+
+ /@prisma/engines-version@5.7.0-41.79fb5193cf0a8fdbef536e4b4a159cad677ab1b9:
+ resolution: {integrity: sha512-V6tgRVi62jRwTm0Hglky3Scwjr/AKFBFtS+MdbsBr7UOuiu1TKLPc6xfPiyEN1+bYqjEtjxwGsHgahcJsd1rNg==}
- /@prisma/engines@5.6.0:
- resolution: {integrity: sha512-Mt2q+GNJpU2vFn6kif24oRSBQv1KOkYaterQsi0k2/lA+dLvhRX6Lm26gon6PYHwUM8/h8KRgXIUMU0PCLB6bw==}
+ /@prisma/engines@5.7.0:
+ resolution: {integrity: sha512-TkOMgMm60n5YgEKPn9erIvFX2/QuWnl3GBo6yTRyZKk5O5KQertXiNnrYgSLy0SpsKmhovEPQb+D4l0SzyE7XA==}
requiresBuild: true
+ dependencies:
+ '@prisma/debug': 5.7.0
+ '@prisma/engines-version': 5.7.0-41.79fb5193cf0a8fdbef536e4b4a159cad677ab1b9
+ '@prisma/fetch-engine': 5.7.0
+ '@prisma/get-platform': 5.7.0
+
+ /@prisma/fetch-engine@5.7.0:
+ resolution: {integrity: sha512-zIn/qmO+N/3FYe7/L9o+yZseIU8ivh4NdPKSkQRIHfg2QVTVMnbhGoTcecbxfVubeTp+DjcbjS0H9fCuM4W04w==}
+ dependencies:
+ '@prisma/debug': 5.7.0
+ '@prisma/engines-version': 5.7.0-41.79fb5193cf0a8fdbef536e4b4a159cad677ab1b9
+ '@prisma/get-platform': 5.7.0
+
+ /@prisma/get-platform@5.7.0:
+ resolution: {integrity: sha512-ZeV/Op4bZsWXuw5Tg05WwRI8BlKiRFhsixPcAM+5BKYSiUZiMKIi713tfT3drBq8+T0E1arNZgYSA9QYcglWNA==}
+ dependencies:
+ '@prisma/debug': 5.7.0
/@rushstack/eslint-patch@1.3.3:
resolution: {integrity: sha512-0xd7qez0AQ+MbHatZTlI1gu5vkG8r7MYRUJAHPAHJBmGLs16zpkrpAVLvjQKQOqaXPDUBwOiJzNc00znHSCVBw==}
@@ -1788,7 +1796,7 @@ packages:
prop-types: 15.8.1
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
- tinymce: 6.8.0
+ tinymce: 6.8.1
dev: false
/@tsconfig/node10@1.0.9:
@@ -1828,8 +1836,8 @@ packages:
resolution: {integrity: sha512-JkXTOdKs5MF086b/pt8C3+yVp3iDUwG635L7oCH6HvJvvr6lSUU5oe/gLXnPEfYRROHjJIPgCV6cuAg8gGkntQ==}
dev: false
- /@types/node@20.9.0:
- resolution: {integrity: sha512-nekiGu2NDb1BcVofVcEKMIwzlx4NjHlcjhoxxKBNLtz15Y1z7MYf549DFvkHSId02Ax6kGwWntIBPC3l/JZcmw==}
+ /@types/node@20.10.4:
+ resolution: {integrity: sha512-D08YG6rr8X90YB56tSIuBaddy/UXAA9RKJoFvrsnogAum/0pmjkgi4+2nx96A330FmioegBWmEYQ+syqCFaveg==}
dependencies:
undici-types: 5.26.5
dev: true
@@ -1837,7 +1845,7 @@ packages:
/@types/nodemailer@6.4.14:
resolution: {integrity: sha512-fUWthHO9k9DSdPCSPRqcu6TWhYyxTBg382vlNIttSe9M7XfsT06y0f24KHXtbnijPGGRIcVvdKHTNikOI6qiHA==}
dependencies:
- '@types/node': 20.9.0
+ '@types/node': 20.10.4
dev: true
/@types/parse-json@4.0.0:
@@ -1854,11 +1862,11 @@ packages:
/@types/react-dom@18.2.17:
resolution: {integrity: sha512-rvrT/M7Df5eykWFxn6MYt5Pem/Dbyc1N8Y0S9Mrkw2WFCRiqUgw9P7ul2NpwsXCSM1DVdENzdG9J5SreqfAIWg==}
dependencies:
- '@types/react': 18.2.38
+ '@types/react': 18.2.42
dev: true
- /@types/react@18.2.38:
- resolution: {integrity: sha512-cBBXHzuPtQK6wNthuVMV6IjHAFkdl/FOPFIlkd81/Cd1+IqkHu/A+w4g43kaQQoYHik/ruaQBDL72HyCy1vuMw==}
+ /@types/react@18.2.42:
+ resolution: {integrity: sha512-c1zEr96MjakLYus/wPnuWDo1/zErfdU9rNsIGmE+NV71nx88FG9Ttgo5dqorXTu/LImX2f63WBP986gJkMPNbA==}
dependencies:
'@types/prop-types': 15.7.5
'@types/scheduler': 0.16.3
@@ -1877,7 +1885,7 @@ packages:
resolution: {integrity: sha512-WUtIVRUZ9i5dYXefDEAI7sh9/O7jGvHg7Df/5O/gtH3Yabe5odI3UWopVR1qbPXQtvOxWu3mM4XxlYeZtMWF4g==}
dev: true
- /@typescript-eslint/parser@6.6.0(eslint@8.54.0)(typescript@5.3.2):
+ /@typescript-eslint/parser@6.6.0(eslint@8.55.0)(typescript@5.3.3):
resolution: {integrity: sha512-setq5aJgUwtzGrhW177/i+DMLqBaJbdwGj2CPIVFFLE0NCliy5ujIdLHd2D1ysmlmsjdL2GWW+hR85neEfc12w==}
engines: {node: ^16.0.0 || >=18.0.0}
peerDependencies:
@@ -1889,11 +1897,11 @@ packages:
dependencies:
'@typescript-eslint/scope-manager': 6.6.0
'@typescript-eslint/types': 6.6.0
- '@typescript-eslint/typescript-estree': 6.6.0(typescript@5.3.2)
+ '@typescript-eslint/typescript-estree': 6.6.0(typescript@5.3.3)
'@typescript-eslint/visitor-keys': 6.6.0
debug: 4.3.4
- eslint: 8.54.0
- typescript: 5.3.2
+ eslint: 8.55.0
+ typescript: 5.3.3
transitivePeerDependencies:
- supports-color
dev: true
@@ -1911,7 +1919,7 @@ packages:
engines: {node: ^16.0.0 || >=18.0.0}
dev: true
- /@typescript-eslint/typescript-estree@6.6.0(typescript@5.3.2):
+ /@typescript-eslint/typescript-estree@6.6.0(typescript@5.3.3):
resolution: {integrity: sha512-hMcTQ6Al8MP2E6JKBAaSxSVw5bDhdmbCEhGW/V8QXkb9oNsFkA4SBuOMYVPxD3jbtQ4R/vSODBsr76R6fP3tbA==}
engines: {node: ^16.0.0 || >=18.0.0}
peerDependencies:
@@ -1926,8 +1934,8 @@ packages:
globby: 11.1.0
is-glob: 4.0.3
semver: 7.5.4
- ts-api-utils: 1.0.2(typescript@5.3.2)
- typescript: 5.3.2
+ ts-api-utils: 1.0.2(typescript@5.3.3)
+ typescript: 5.3.3
transitivePeerDependencies:
- supports-color
dev: true
@@ -1951,8 +1959,8 @@ packages:
'@upstash/redis': 1.24.3
dev: false
- /@upstash/ratelimit@0.4.4:
- resolution: {integrity: sha512-y3q6cNDdcRQ2MRPRf5UNWBN36IwnZ4kAEkGoH3i6OqdWwz4qlBxNsw4/Rpqn9h93+Nx1cqg5IOq7O2e2zMJY1w==}
+ /@upstash/ratelimit@1.0.0:
+ resolution: {integrity: sha512-IUlc+UKuHJQqXGQi7E3UKV0CKfRZ0g6qeNnbSve940k3xLoM+X3H45MrSwDaH7meMWemztLs0Q4yjkd3ItddCw==}
dependencies:
'@upstash/core-analytics': 0.0.6
dev: false
@@ -2640,8 +2648,8 @@ packages:
resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
engines: {node: '>=10'}
- /eslint-config-next@14.0.3(eslint@8.54.0)(typescript@5.3.2):
- resolution: {integrity: sha512-IKPhpLdpSUyKofmsXUfrvBC49JMUTdeaD8ZIH4v9Vk0sC1X6URTuTJCLtA0Vwuj7V/CQh0oISuSTvNn5//Buew==}
+ /eslint-config-next@14.0.4(eslint@8.55.0)(typescript@5.3.3):
+ resolution: {integrity: sha512-9/xbOHEQOmQtqvQ1UsTQZpnA7SlDMBtuKJ//S4JnoyK3oGLhILKXdBgu/UO7lQo/2xOykQULS1qQ6p2+EpHgAQ==}
peerDependencies:
eslint: ^7.23.0 || ^8.0.0
typescript: '>=3.3.1'
@@ -2649,29 +2657,29 @@ packages:
typescript:
optional: true
dependencies:
- '@next/eslint-plugin-next': 14.0.3
+ '@next/eslint-plugin-next': 14.0.4
'@rushstack/eslint-patch': 1.3.3
- '@typescript-eslint/parser': 6.6.0(eslint@8.54.0)(typescript@5.3.2)
- eslint: 8.54.0
+ '@typescript-eslint/parser': 6.6.0(eslint@8.55.0)(typescript@5.3.3)
+ eslint: 8.55.0
eslint-import-resolver-node: 0.3.9
- eslint-import-resolver-typescript: 3.6.0(@typescript-eslint/parser@6.6.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.28.1)(eslint@8.54.0)
- eslint-plugin-import: 2.28.1(@typescript-eslint/parser@6.6.0)(eslint-import-resolver-typescript@3.6.0)(eslint@8.54.0)
- eslint-plugin-jsx-a11y: 6.7.1(eslint@8.54.0)
- eslint-plugin-react: 7.33.2(eslint@8.54.0)
- eslint-plugin-react-hooks: 4.6.0(eslint@8.54.0)
- typescript: 5.3.2
+ eslint-import-resolver-typescript: 3.6.0(@typescript-eslint/parser@6.6.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.28.1)(eslint@8.55.0)
+ eslint-plugin-import: 2.28.1(@typescript-eslint/parser@6.6.0)(eslint-import-resolver-typescript@3.6.0)(eslint@8.55.0)
+ eslint-plugin-jsx-a11y: 6.7.1(eslint@8.55.0)
+ eslint-plugin-react: 7.33.2(eslint@8.55.0)
+ eslint-plugin-react-hooks: 4.6.0(eslint@8.55.0)
+ typescript: 5.3.3
transitivePeerDependencies:
- eslint-import-resolver-webpack
- supports-color
dev: true
- /eslint-config-prettier@9.0.0(eslint@8.54.0):
- resolution: {integrity: sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==}
+ /eslint-config-prettier@9.1.0(eslint@8.55.0):
+ resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==}
hasBin: true
peerDependencies:
eslint: '>=7.0.0'
dependencies:
- eslint: 8.54.0
+ eslint: 8.55.0
dev: true
/eslint-import-resolver-node@0.3.9:
@@ -2684,7 +2692,7 @@ packages:
- supports-color
dev: true
- /eslint-import-resolver-typescript@3.6.0(@typescript-eslint/parser@6.6.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.28.1)(eslint@8.54.0):
+ /eslint-import-resolver-typescript@3.6.0(@typescript-eslint/parser@6.6.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.28.1)(eslint@8.55.0):
resolution: {integrity: sha512-QTHR9ddNnn35RTxlaEnx2gCxqFlF2SEN0SE2d17SqwyM7YOSI2GHWRYp5BiRkObTUNYPupC/3Fq2a0PpT+EKpg==}
engines: {node: ^14.18.0 || >=16.0.0}
peerDependencies:
@@ -2693,9 +2701,9 @@ packages:
dependencies:
debug: 4.3.4
enhanced-resolve: 5.15.0
- eslint: 8.54.0
- eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.6.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.0)(eslint@8.54.0)
- eslint-plugin-import: 2.28.1(@typescript-eslint/parser@6.6.0)(eslint-import-resolver-typescript@3.6.0)(eslint@8.54.0)
+ eslint: 8.55.0
+ eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.6.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.0)(eslint@8.55.0)
+ eslint-plugin-import: 2.28.1(@typescript-eslint/parser@6.6.0)(eslint-import-resolver-typescript@3.6.0)(eslint@8.55.0)
fast-glob: 3.3.1
get-tsconfig: 4.7.0
is-core-module: 2.13.0
@@ -2707,7 +2715,7 @@ packages:
- supports-color
dev: true
- /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.6.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.0)(eslint@8.54.0):
+ /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.6.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.0)(eslint@8.55.0):
resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==}
engines: {node: '>=4'}
peerDependencies:
@@ -2728,16 +2736,16 @@ packages:
eslint-import-resolver-webpack:
optional: true
dependencies:
- '@typescript-eslint/parser': 6.6.0(eslint@8.54.0)(typescript@5.3.2)
+ '@typescript-eslint/parser': 6.6.0(eslint@8.55.0)(typescript@5.3.3)
debug: 3.2.7
- eslint: 8.54.0
+ eslint: 8.55.0
eslint-import-resolver-node: 0.3.9
- eslint-import-resolver-typescript: 3.6.0(@typescript-eslint/parser@6.6.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.28.1)(eslint@8.54.0)
+ eslint-import-resolver-typescript: 3.6.0(@typescript-eslint/parser@6.6.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.28.1)(eslint@8.55.0)
transitivePeerDependencies:
- supports-color
dev: true
- /eslint-plugin-import@2.28.1(@typescript-eslint/parser@6.6.0)(eslint-import-resolver-typescript@3.6.0)(eslint@8.54.0):
+ /eslint-plugin-import@2.28.1(@typescript-eslint/parser@6.6.0)(eslint-import-resolver-typescript@3.6.0)(eslint@8.55.0):
resolution: {integrity: sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A==}
engines: {node: '>=4'}
peerDependencies:
@@ -2747,16 +2755,16 @@ packages:
'@typescript-eslint/parser':
optional: true
dependencies:
- '@typescript-eslint/parser': 6.6.0(eslint@8.54.0)(typescript@5.3.2)
+ '@typescript-eslint/parser': 6.6.0(eslint@8.55.0)(typescript@5.3.3)
array-includes: 3.1.7
array.prototype.findlastindex: 1.2.3
array.prototype.flat: 1.3.2
array.prototype.flatmap: 1.3.1
debug: 3.2.7
doctrine: 2.1.0
- eslint: 8.54.0
+ eslint: 8.55.0
eslint-import-resolver-node: 0.3.9
- eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.6.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.0)(eslint@8.54.0)
+ eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.6.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.0)(eslint@8.55.0)
has: 1.0.3
is-core-module: 2.13.0
is-glob: 4.0.3
@@ -2772,7 +2780,7 @@ packages:
- supports-color
dev: true
- /eslint-plugin-jsx-a11y@6.7.1(eslint@8.54.0):
+ /eslint-plugin-jsx-a11y@6.7.1(eslint@8.55.0):
resolution: {integrity: sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==}
engines: {node: '>=4.0'}
peerDependencies:
@@ -2787,7 +2795,7 @@ packages:
axobject-query: 3.2.1
damerau-levenshtein: 1.0.8
emoji-regex: 9.2.2
- eslint: 8.54.0
+ eslint: 8.55.0
has: 1.0.3
jsx-ast-utils: 3.3.5
language-tags: 1.0.5
@@ -2797,16 +2805,16 @@ packages:
semver: 6.3.1
dev: true
- /eslint-plugin-react-hooks@4.6.0(eslint@8.54.0):
+ /eslint-plugin-react-hooks@4.6.0(eslint@8.55.0):
resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==}
engines: {node: '>=10'}
peerDependencies:
eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0
dependencies:
- eslint: 8.54.0
+ eslint: 8.55.0
dev: true
- /eslint-plugin-react@7.33.2(eslint@8.54.0):
+ /eslint-plugin-react@7.33.2(eslint@8.55.0):
resolution: {integrity: sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==}
engines: {node: '>=4'}
peerDependencies:
@@ -2817,7 +2825,7 @@ packages:
array.prototype.tosorted: 1.1.1
doctrine: 2.1.0
es-iterator-helpers: 1.0.14
- eslint: 8.54.0
+ eslint: 8.55.0
estraverse: 5.3.0
jsx-ast-utils: 3.3.5
minimatch: 3.1.2
@@ -2844,15 +2852,15 @@ packages:
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
dev: true
- /eslint@8.54.0:
- resolution: {integrity: sha512-NY0DfAkM8BIZDVl6PgSa1ttZbx3xHgJzSNJKYcQglem6CppHyMhRIQkBVSSMaSRnLhig3jsDbEzOjwCVt4AmmA==}
+ /eslint@8.55.0:
+ resolution: {integrity: sha512-iyUUAM0PCKj5QpwGfmCAG9XXbZCWsqP/eWAWrG/W0umvjuLRBECwSFdt+rCntju0xEH7teIABPwXpahftIaTdA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
hasBin: true
dependencies:
- '@eslint-community/eslint-utils': 4.4.0(eslint@8.54.0)
+ '@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0)
'@eslint-community/regexpp': 4.8.0
- '@eslint/eslintrc': 2.1.3
- '@eslint/js': 8.54.0
+ '@eslint/eslintrc': 2.1.4
+ '@eslint/js': 8.55.0
'@humanwhocodes/config-array': 0.11.13
'@humanwhocodes/module-importer': 1.0.1
'@nodelib/fs.walk': 1.2.8
@@ -3024,8 +3032,8 @@ packages:
signal-exit: 4.1.0
dev: true
- /framer-motion@10.16.5(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-GEzVjOYP2MIpV9bT/GbhcsBNoImG3/2X3O/xVNWmktkv9MdJ7P/44zELm/7Fjb+O3v39SmKFnoDQB32giThzpg==}
+ /framer-motion@10.16.15(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-BapW1EKc/Sgph1rKEwL9bFt2B79z7bu7jN4Up1jGUaTE78WBsVO+6eCmoUZsQH0hHtRUDnnTqjjBbM7dk9Kp8A==}
peerDependencies:
react: ^18.0.0
react-dom: ^18.0.0
@@ -3265,8 +3273,8 @@ packages:
htmlparser2: 9.0.0
dev: false
- /html-react-parser@5.0.6(react@18.2.0):
- resolution: {integrity: sha512-aPSzFhO2bK/L/mYQbMwFz+1QG8nhxozbwENt/52HTApasrBvDX87MFD5uSQIjq7Io0bnKzH4uh7PM42zZ4ag9A==}
+ /html-react-parser@5.0.7(react@18.2.0):
+ resolution: {integrity: sha512-00ve/0B7ukLUAcAbmD6Vh74EicB+ktLvAM4APeXJjiBsRiPz2ouochTvyUhOJB8apP2t40xAXvpmd+t50aVnJg==}
peerDependencies:
react: 0.14 || 15 || 16 || 17 || 18
dependencies:
@@ -3274,7 +3282,7 @@ packages:
html-dom-parser: 5.0.4
react: 18.2.0
react-property: 2.0.2
- style-to-js: 1.1.9
+ style-to-js: 1.1.10
dev: false
/htmlparser2@8.0.2:
@@ -3338,8 +3346,8 @@ packages:
resolution: {integrity: sha512-EcKzdTHVe8wFVOGEYXiW9WmJXPjqi1T+234YpJr98RiFYKHV3cdy1+3mkTE+KHTHxFFLH51SfaGOoUdW+v7ViQ==}
dev: false
- /inline-style-prefixer@6.0.4:
- resolution: {integrity: sha512-FwXmZC2zbeeS7NzGjJ6pAiqRhXR0ugUShSNb6GApMl6da0/XGc4MOJsoWAywia52EEWbXNSy0pzkwz/+Y+swSg==}
+ /inline-style-prefixer@7.0.0:
+ resolution: {integrity: sha512-I7GEdScunP1dQ6IM2mQWh6v0mOYdYmH3Bp31UecKdrcUgcURTcctSe1IECdUznSHKSmsHtjrT3CwCPI1pyxfUQ==}
dependencies:
css-in-js-utils: 3.1.0
fast-loops: 1.1.3
@@ -3556,8 +3564,8 @@ packages:
resolution: {integrity: sha512-EqJPEUlZD0/CSUMubKtMaYUOtWe91tZXTWMJZoKSbLk+KtdhNdcvppH8lA9XwVu2V4Ailvsj0GBZJ2ZwDjfesQ==}
dev: false
- /jotai@2.5.1(@types/react@18.2.38)(react@18.2.0):
- resolution: {integrity: sha512-vanPCCSuHczUXNbVh/iUunuMfrWRL4FdBtAbTRmrfqezJcKb8ybBTg8iivyYuUHapjcDETyJe1E4inlo26bVHA==}
+ /jotai@2.6.0(@types/react@18.2.42)(react@18.2.0):
+ resolution: {integrity: sha512-Vt6hsc04Km4j03l+Ax+Sc+FVft5cRJhqgxt6GTz6GM2eM3DyX3CdBdzcG0z2FrlZToL1/0OAkqDghIyARWnSuQ==}
engines: {node: '>=12.20.0'}
peerDependencies:
'@types/react': '>=17.0.0'
@@ -3568,7 +3576,7 @@ packages:
react:
optional: true
dependencies:
- '@types/react': 18.2.38
+ '@types/react': 18.2.42
react: 18.2.0
dev: false
@@ -3764,22 +3772,22 @@ packages:
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
dev: true
- /nano-css@5.3.5(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-vSB9X12bbNu4ALBu7nigJgRViZ6ja3OU7CeuiV1zMIbXOdmkLahgtPmh3GBOlDxbKY0CitqlPdOReGlBLSp+yg==}
+ /nano-css@5.6.1(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-T2Mhc//CepkTa3X4pUhKgbEheJHYAxD0VptuqFhDbGMUWVV2m+lkNiW/Ieuj35wrfC8Zm0l7HvssQh7zcEttSw==}
peerDependencies:
react: '*'
react-dom: '*'
dependencies:
+ '@jridgewell/sourcemap-codec': 1.4.15
css-tree: 1.1.3
csstype: 3.1.2
fastest-stable-stringify: 2.0.2
- inline-style-prefixer: 6.0.4
+ inline-style-prefixer: 7.0.0
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
rtl-css-js: 1.16.1
- sourcemap-codec: 1.4.8
stacktrace-js: 2.0.2
- stylis: 4.2.0
+ stylis: 4.3.0
dev: false
/nanoid@3.3.6:
@@ -3797,7 +3805,7 @@ packages:
engines: {node: '>= 0.6'}
dev: false
- /next-auth@4.24.5(next@14.0.3)(nodemailer@6.9.7)(react-dom@18.2.0)(react@18.2.0):
+ /next-auth@4.24.5(next@14.0.4)(nodemailer@6.9.7)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-3RafV3XbfIKk6rF6GlLE4/KxjTcuMCifqrmD+98ejFq73SRoj2rmzoca8u764977lH/Q7jo6Xu6yM+Re1Mz/Og==}
peerDependencies:
next: ^12.2.5 || ^13 || ^14
@@ -3812,7 +3820,7 @@ packages:
'@panva/hkdf': 1.1.1
cookie: 0.5.0
jose: 4.14.6
- next: 14.0.3(react-dom@18.2.0)(react@18.2.0)
+ next: 14.0.4(react-dom@18.2.0)(react@18.2.0)
nodemailer: 6.9.7
oauth: 0.9.15
openid-client: 5.4.3
@@ -3823,19 +3831,19 @@ packages:
uuid: 8.3.2
dev: false
- /next-client-cookies@1.1.0(next@14.0.3)(react@18.2.0):
+ /next-client-cookies@1.1.0(next@14.0.4)(react@18.2.0):
resolution: {integrity: sha512-e/rqQTXHSFuvUJELMeCDgM7dWW6IUNOGr7noWyRSgE/5l033UaqseDrjShfRZYG45JnrYKoX653OdXTJ8cn+NA==}
peerDependencies:
next: '>= 13.0.0'
react: '>= 16.8.0'
dependencies:
js-cookie: 3.0.5
- next: 14.0.3(react-dom@18.2.0)(react@18.2.0)
+ next: 14.0.4(react-dom@18.2.0)(react@18.2.0)
react: 18.2.0
dev: false
- /next@14.0.3(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-AbYdRNfImBr3XGtvnwOxq8ekVCwbFTv/UJoLwmaX89nk9i051AEY4/HAWzU0YpaTDw8IofUpmuIlvzWF13jxIw==}
+ /next@14.0.4(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-qbwypnM7327SadwFtxXnQdGiKpkuhaRLE2uq62/nRul9cj9KhQ5LhHmlziTNqUidZotw/Q1I9OjirBROdUJNgA==}
engines: {node: '>=18.17.0'}
hasBin: true
peerDependencies:
@@ -3849,25 +3857,26 @@ packages:
sass:
optional: true
dependencies:
- '@next/env': 14.0.3
+ '@next/env': 14.0.4
'@swc/helpers': 0.5.2
busboy: 1.6.0
caniuse-lite: 1.0.30001527
+ graceful-fs: 4.2.11
postcss: 8.4.31
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
styled-jsx: 5.1.1(react@18.2.0)
watchpack: 2.4.0
optionalDependencies:
- '@next/swc-darwin-arm64': 14.0.3
- '@next/swc-darwin-x64': 14.0.3
- '@next/swc-linux-arm64-gnu': 14.0.3
- '@next/swc-linux-arm64-musl': 14.0.3
- '@next/swc-linux-x64-gnu': 14.0.3
- '@next/swc-linux-x64-musl': 14.0.3
- '@next/swc-win32-arm64-msvc': 14.0.3
- '@next/swc-win32-ia32-msvc': 14.0.3
- '@next/swc-win32-x64-msvc': 14.0.3
+ '@next/swc-darwin-arm64': 14.0.4
+ '@next/swc-darwin-x64': 14.0.4
+ '@next/swc-linux-arm64-gnu': 14.0.4
+ '@next/swc-linux-arm64-musl': 14.0.4
+ '@next/swc-linux-x64-gnu': 14.0.4
+ '@next/swc-linux-x64-musl': 14.0.4
+ '@next/swc-win32-arm64-msvc': 14.0.4
+ '@next/swc-win32-ia32-msvc': 14.0.4
+ '@next/swc-win32-x64-msvc': 14.0.4
transitivePeerDependencies:
- '@babel/core'
- babel-plugin-macros
@@ -4134,13 +4143,13 @@ packages:
resolution: {integrity: sha512-WuxUnVtlWL1OfZFQFuqvnvs6MiAGk9UNsBostyBOB0Is9wb5uRESevA6rnl/rkksXaGX3GzZhPup5d6Vp1nFew==}
dev: false
- /prisma@5.6.0:
- resolution: {integrity: sha512-EEaccku4ZGshdr2cthYHhf7iyvCcXqwJDvnoQRAJg5ge2Tzpv0e2BaMCp+CbbDUwoVTzwgOap9Zp+d4jFa2O9A==}
+ /prisma@5.7.0:
+ resolution: {integrity: sha512-0rcfXO2ErmGAtxnuTNHQT9ztL0zZheQjOI/VNJzdq87C3TlGPQtMqtM+KCwU6XtmkoEr7vbCQqA7HF9IY0ST+Q==}
engines: {node: '>=16.13'}
hasBin: true
requiresBuild: true
dependencies:
- '@prisma/engines': 5.6.0
+ '@prisma/engines': 5.7.0
/prop-types@15.8.1:
resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==}
@@ -4187,7 +4196,7 @@ packages:
resolution: {integrity: sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==}
dev: false
- /react-focus-lock@2.9.5(@types/react@18.2.38)(react@18.2.0):
+ /react-focus-lock@2.9.5(@types/react@18.2.42)(react@18.2.0):
resolution: {integrity: sha512-h6vrdgUbsH2HeD5I7I3Cx1PPrmwGuKYICS+kB9m+32X/9xHRrAbxgvaBpG7BFBN9h3tO+C3qX1QAVESmi4CiIA==}
peerDependencies:
'@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0
@@ -4197,13 +4206,13 @@ packages:
optional: true
dependencies:
'@babel/runtime': 7.22.15
- '@types/react': 18.2.38
+ '@types/react': 18.2.42
focus-lock: 0.11.6
prop-types: 15.8.1
react: 18.2.0
react-clientside-effect: 1.2.6(react@18.2.0)
- use-callback-ref: 1.3.0(@types/react@18.2.38)(react@18.2.0)
- use-sidecar: 1.1.2(@types/react@18.2.38)(react@18.2.0)
+ use-callback-ref: 1.3.0(@types/react@18.2.42)(react@18.2.0)
+ use-sidecar: 1.1.2(@types/react@18.2.42)(react@18.2.0)
dev: false
/react-icons@4.12.0(react@18.2.0):
@@ -4221,7 +4230,7 @@ packages:
resolution: {integrity: sha512-+PbtI3VuDV0l6CleQMsx2gtK0JZbZKbpdu5ynr+lbsuvtmgbNcS3VM0tuY2QjFNOcWxvXeHjDpy42RO+4U2rug==}
dev: false
- /react-remove-scroll-bar@2.3.4(@types/react@18.2.38)(react@18.2.0):
+ /react-remove-scroll-bar@2.3.4(@types/react@18.2.42)(react@18.2.0):
resolution: {integrity: sha512-63C4YQBUt0m6ALadE9XV56hV8BgJWDmmTPY758iIJjfQKt2nYwoUrPk0LXRXcB/yIj82T1/Ixfdpdk68LwIB0A==}
engines: {node: '>=10'}
peerDependencies:
@@ -4231,13 +4240,13 @@ packages:
'@types/react':
optional: true
dependencies:
- '@types/react': 18.2.38
+ '@types/react': 18.2.42
react: 18.2.0
- react-style-singleton: 2.2.1(@types/react@18.2.38)(react@18.2.0)
+ react-style-singleton: 2.2.1(@types/react@18.2.42)(react@18.2.0)
tslib: 2.6.2
dev: false
- /react-remove-scroll@2.5.6(@types/react@18.2.38)(react@18.2.0):
+ /react-remove-scroll@2.5.6(@types/react@18.2.42)(react@18.2.0):
resolution: {integrity: sha512-bO856ad1uDYLefgArk559IzUNeQ6SWH4QnrevIUjH+GczV56giDfl3h0Idptf2oIKxQmd1p9BN25jleKodTALg==}
engines: {node: '>=10'}
peerDependencies:
@@ -4247,16 +4256,16 @@ packages:
'@types/react':
optional: true
dependencies:
- '@types/react': 18.2.38
+ '@types/react': 18.2.42
react: 18.2.0
- react-remove-scroll-bar: 2.3.4(@types/react@18.2.38)(react@18.2.0)
- react-style-singleton: 2.2.1(@types/react@18.2.38)(react@18.2.0)
+ react-remove-scroll-bar: 2.3.4(@types/react@18.2.42)(react@18.2.0)
+ react-style-singleton: 2.2.1(@types/react@18.2.42)(react@18.2.0)
tslib: 2.6.2
- use-callback-ref: 1.3.0(@types/react@18.2.38)(react@18.2.0)
- use-sidecar: 1.1.2(@types/react@18.2.38)(react@18.2.0)
+ use-callback-ref: 1.3.0(@types/react@18.2.42)(react@18.2.0)
+ use-sidecar: 1.1.2(@types/react@18.2.42)(react@18.2.0)
dev: false
- /react-style-singleton@2.2.1(@types/react@18.2.38)(react@18.2.0):
+ /react-style-singleton@2.2.1(@types/react@18.2.42)(react@18.2.0):
resolution: {integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==}
engines: {node: '>=10'}
peerDependencies:
@@ -4266,7 +4275,7 @@ packages:
'@types/react':
optional: true
dependencies:
- '@types/react': 18.2.38
+ '@types/react': 18.2.42
get-nonce: 1.0.1
invariant: 2.2.4
react: 18.2.0
@@ -4283,11 +4292,11 @@ packages:
tslib: 2.6.2
dev: false
- /react-use@17.4.0(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-TgbNTCA33Wl7xzIJegn1HndB4qTS9u03QUwyNycUnXaweZkE4Kq2SB+Yoxx8qbshkZGYBDvUXbXWRUmQDcZZ/Q==}
+ /react-use@17.4.2(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-1jPtmWLD8OJJNYCdYLJEH/HM+bPDfJuyGwCYeJFgPmWY8ttwpgZnW5QnzgM55CYUByUiTjHxsGOnEpLl6yQaoQ==}
peerDependencies:
- react: ^16.8.0 || ^17.0.0 || ^18.0.0
- react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+ react: '*'
+ react-dom: '*'
dependencies:
'@types/js-cookie': 2.2.7
'@xobotyi/scrollbar-width': 1.9.5
@@ -4295,7 +4304,7 @@ packages:
fast-deep-equal: 3.1.3
fast-shallow-equal: 1.0.0
js-cookie: 2.2.1
- nano-css: 5.3.5(react-dom@18.2.0)(react@18.2.0)
+ nano-css: 5.6.1(react-dom@18.2.0)(react@18.2.0)
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
react-universal-interface: 0.6.2(react@18.2.0)(tslib@2.6.2)
@@ -4542,11 +4551,6 @@ packages:
engines: {node: '>=0.10.0'}
dev: false
- /sourcemap-codec@1.4.8:
- resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==}
- deprecated: Please use @jridgewell/sourcemap-codec instead
- dev: false
-
/stack-generator@2.0.10:
resolution: {integrity: sha512-mwnua/hkqM6pF4k8SnmZ2zfETsRUpWXREfA/goT8SLCV4iOFa4bzOX2nDipWAZFPTjLvQB82f5yaodMVhK0yJQ==}
dependencies:
@@ -4661,14 +4665,14 @@ packages:
engines: {node: '>=8'}
dev: true
- /style-to-js@1.1.9:
- resolution: {integrity: sha512-6bkwhOlPOx+wKiHVlPTHjUqM4zDKv9pyccehB8zetZL0hhQ7MVp7UEWUsohjiMdxwhSsEdjMrEve+8qzUVmY4w==}
+ /style-to-js@1.1.10:
+ resolution: {integrity: sha512-VC7MBJa+y0RZhpnLKDPmVRLRswsASLmixkiZ5R8xZpNT9VyjeRzwnXd2pBzAWdgSGv/pCNNH01gPCCUsB9exYg==}
dependencies:
- style-to-object: 1.0.4
+ style-to-object: 1.0.5
dev: false
- /style-to-object@1.0.4:
- resolution: {integrity: sha512-KyNO6mfijxSnypdvEjeXlhvbGPSh0l1zBJp80n+ncBQvrEbSwBHwZCpo0xz6Q4AKSPfXowWwypCBAUAdfz3rFQ==}
+ /style-to-object@1.0.5:
+ resolution: {integrity: sha512-rDRwHtoDD3UMMrmZ6BzOW0naTjMsVZLIjsGleSKS/0Oz+cgCfAPRspaqJuE8rDzpKha/nEvnM0IF4seEAZUTKQ==}
dependencies:
inline-style-parser: 0.2.2
dev: false
@@ -4694,6 +4698,10 @@ packages:
resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==}
dev: false
+ /stylis@4.3.0:
+ resolution: {integrity: sha512-E87pIogpwUsUwXw7dNyU4QDjdgVMy52m+XEOPEKUn161cCzWjjhPSQhByfd1CcNvrOLnXQ6OnnZDwnJrz/Z4YQ==}
+ dev: false
+
/supports-color@5.5.0:
resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==}
engines: {node: '>=4'}
@@ -4752,8 +4760,8 @@ packages:
resolution: {integrity: sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==}
dev: false
- /tinymce@6.8.0:
- resolution: {integrity: sha512-WSQlyfW8aPkOVMmmHmSVeA5Dq4JuUZjTB+PmePJ27oQ+ruv3Zn4KSTsvSnDUrHlqygjDvRidrCB/m5nTWCC2nA==}
+ /tinymce@6.8.1:
+ resolution: {integrity: sha512-WYPvMXIjBrXM/oBiqGCbT2a8ptiO3TWXm/xxPWDCl8SxRKMW7Rfp0Lk190E9fXmX6uh9lJMRCnmKHzvryz0ftA==}
dev: false
/to-fast-properties@2.0.0:
@@ -4776,20 +4784,20 @@ packages:
resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
dev: false
- /ts-api-utils@1.0.2(typescript@5.3.2):
+ /ts-api-utils@1.0.2(typescript@5.3.3):
resolution: {integrity: sha512-Cbu4nIqnEdd+THNEsBdkolnOXhg0I8XteoHaEKgvsxpsbWda4IsUut2c187HxywQCvveojow0Dgw/amxtSKVkQ==}
engines: {node: '>=16.13.0'}
peerDependencies:
typescript: '>=4.2.0'
dependencies:
- typescript: 5.3.2
+ typescript: 5.3.3
dev: true
/ts-easing@0.2.0:
resolution: {integrity: sha512-Z86EW+fFFh/IFB1fqQ3/+7Zpf9t2ebOAxNI/V6Wo7r5gqiqtxmgTlQ1qbqQcjLKYeSHPTsEmvlJUDg/EuL0uHQ==}
dev: false
- /ts-node@10.9.1(@types/node@20.9.0)(typescript@5.3.2):
+ /ts-node@10.9.1(@types/node@20.10.4)(typescript@5.3.3):
resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==}
hasBin: true
peerDependencies:
@@ -4808,14 +4816,14 @@ packages:
'@tsconfig/node12': 1.0.11
'@tsconfig/node14': 1.0.3
'@tsconfig/node16': 1.0.4
- '@types/node': 20.9.0
+ '@types/node': 20.10.4
acorn: 8.10.0
acorn-walk: 8.2.0
arg: 4.1.3
create-require: 1.1.1
diff: 4.0.2
make-error: 1.3.6
- typescript: 5.3.2
+ typescript: 5.3.3
v8-compile-cache-lib: 3.0.1
yn: 3.1.1
dev: true
@@ -4887,8 +4895,8 @@ packages:
is-typed-array: 1.1.12
dev: true
- /typescript@5.3.2:
- resolution: {integrity: sha512-6l+RyNy7oAHDfxC4FzSJcz9vnjTKxrLpDG5M2Vu4SHRVNg6xzqZp6LYSR9zjqQTu8DU/f5xwxUdADOkbrIX2gQ==}
+ /typescript@5.3.3:
+ resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==}
engines: {node: '>=14.17'}
hasBin: true
dev: true
@@ -4912,7 +4920,7 @@ packages:
punycode: 2.3.0
dev: true
- /use-callback-ref@1.3.0(@types/react@18.2.38)(react@18.2.0):
+ /use-callback-ref@1.3.0(@types/react@18.2.42)(react@18.2.0):
resolution: {integrity: sha512-3FT9PRuRdbB9HfXhEq35u4oZkvpJ5kuYbpqhCfmiZyReuRgpnhDlbr2ZEnnuS0RrJAPn6l23xjFg9kpDM+Ms7w==}
engines: {node: '>=10'}
peerDependencies:
@@ -4922,12 +4930,12 @@ packages:
'@types/react':
optional: true
dependencies:
- '@types/react': 18.2.38
+ '@types/react': 18.2.42
react: 18.2.0
tslib: 2.6.2
dev: false
- /use-sidecar@1.1.2(@types/react@18.2.38)(react@18.2.0):
+ /use-sidecar@1.1.2(@types/react@18.2.42)(react@18.2.0):
resolution: {integrity: sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==}
engines: {node: '>=10'}
peerDependencies:
@@ -4937,7 +4945,7 @@ packages:
'@types/react':
optional: true
dependencies:
- '@types/react': 18.2.38
+ '@types/react': 18.2.42
detect-node-es: 1.1.0
react: 18.2.0
tslib: 2.6.2
diff --git a/prisma/migrations/20231023075632_add_site_id/migration.sql b/prisma/migrations/20231023075632_add_site_id/migration.sql
deleted file mode 100644
index 64227e0a..00000000
--- a/prisma/migrations/20231023075632_add_site_id/migration.sql
+++ /dev/null
@@ -1,14 +0,0 @@
--- AlterTable
-ALTER TABLE "Account" ADD COLUMN "siteId" TEXT;
-
--- AlterTable
-ALTER TABLE "Page" ADD COLUMN "siteId" TEXT;
-
--- AlterTable
-ALTER TABLE "Post" ADD COLUMN "siteId" TEXT;
-
--- AlterTable
-ALTER TABLE "Tag" ADD COLUMN "siteId" TEXT;
-
--- AlterTable
-ALTER TABLE "User" ADD COLUMN "siteId" TEXT;
diff --git a/prisma/migrations/0_init/migration.sql b/prisma/migrations/20231208113631_init/migration.sql
similarity index 91%
rename from prisma/migrations/0_init/migration.sql
rename to prisma/migrations/20231208113631_init/migration.sql
index 7dc196ee..061a4504 100644
--- a/prisma/migrations/0_init/migration.sql
+++ b/prisma/migrations/20231208113631_init/migration.sql
@@ -18,6 +18,7 @@ CREATE TABLE "Account" (
"scope" TEXT,
"id_token" TEXT,
"session_state" TEXT,
+ "siteId" TEXT,
CONSTRAINT "Account_pkey" PRIMARY KEY ("id")
);
@@ -43,6 +44,7 @@ CREATE TABLE "User" (
"role" "UserRole" NOT NULL DEFAULT 'USER',
"preferences" JSONB NOT NULL DEFAULT '{}',
"confirmCode" TEXT,
+ "siteId" TEXT,
CONSTRAINT "User_pkey" PRIMARY KEY ("id")
);
@@ -64,11 +66,10 @@ CREATE TABLE "Page" (
"slug" VARCHAR(255) NOT NULL,
"content" TEXT NOT NULL,
"components" JSONB NOT NULL DEFAULT '{}',
- "locale" TEXT NOT NULL,
"authorId" TEXT NOT NULL,
"isBlog" BOOLEAN,
"meta" JSONB DEFAULT '[{}]',
- "originalId" TEXT,
+ "siteId" TEXT,
CONSTRAINT "Page_pkey" PRIMARY KEY ("id")
);
@@ -82,10 +83,9 @@ CREATE TABLE "Post" (
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
"authorId" TEXT NOT NULL,
- "locale" TEXT NOT NULL,
"publishedAt" TIMESTAMP(3),
- "originalId" TEXT,
"featuredImage" TEXT,
+ "siteId" TEXT,
"type" "PostType" DEFAULT 'DEFAULT',
CONSTRAINT "Post_pkey" PRIMARY KEY ("id")
@@ -97,6 +97,7 @@ CREATE TABLE "Tag" (
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
"value" VARCHAR(128) NOT NULL,
+ "siteId" TEXT,
CONSTRAINT "Tag_pkey" PRIMARY KEY ("id")
);
@@ -155,15 +156,9 @@ ALTER TABLE "Session" ADD CONSTRAINT "Session_userId_fkey" FOREIGN KEY ("userId"
-- AddForeignKey
ALTER TABLE "Page" ADD CONSTRAINT "Page_authorId_fkey" FOREIGN KEY ("authorId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
--- AddForeignKey
-ALTER TABLE "Page" ADD CONSTRAINT "Page_originalId_fkey" FOREIGN KEY ("originalId") REFERENCES "Page"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-
-- AddForeignKey
ALTER TABLE "Post" ADD CONSTRAINT "Post_authorId_fkey" FOREIGN KEY ("authorId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
--- AddForeignKey
-ALTER TABLE "Post" ADD CONSTRAINT "Post_originalId_fkey" FOREIGN KEY ("originalId") REFERENCES "Post"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-
-- AddForeignKey
ALTER TABLE "_PageToTag" ADD CONSTRAINT "_PageToTag_A_fkey" FOREIGN KEY ("A") REFERENCES "Page"("id") ON DELETE CASCADE ON UPDATE CASCADE;
@@ -175,4 +170,3 @@ ALTER TABLE "_PostToTag" ADD CONSTRAINT "_PostToTag_A_fkey" FOREIGN KEY ("A") RE
-- AddForeignKey
ALTER TABLE "_PostToTag" ADD CONSTRAINT "_PostToTag_B_fkey" FOREIGN KEY ("B") REFERENCES "Tag"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-
diff --git a/prisma/schema.prisma b/prisma/schema.prisma
index b6c345f7..21ae742a 100644
--- a/prisma/schema.prisma
+++ b/prisma/schema.prisma
@@ -4,9 +4,8 @@ generator client {
}
datasource db {
- provider = "postgresql"
- url = env("POSTGRES_PRISMA_URL")
- directUrl = env("POSTGRES_URL_NON_POOLING")
+ provider = "postgresql"
+ url = env("DATABASE_URL")
}
model Account {
@@ -62,44 +61,36 @@ model VerificationToken {
}
model Page {
- id String @id @default(uuid())
- createdAt DateTime @default(now())
- updatedAt DateTime @updatedAt
- publishedAt DateTime?
- title String @db.VarChar(255)
- slug String @unique @db.VarChar(255)
- content String
- components Json @default("{}")
- locale String
- authorId String
- isBlog Boolean?
- meta Json? @default("[{}]")
- originalId String?
- siteId String?
- author User @relation(fields: [authorId], references: [id], onDelete: Cascade)
- originalPage Page? @relation("OriginalTranslated", fields: [originalId], references: [id])
- translatedPages Page[] @relation("OriginalTranslated")
- tags Tag[] @relation("PageToTag")
+ id String @id @default(uuid())
+ createdAt DateTime @default(now())
+ updatedAt DateTime @updatedAt
+ publishedAt DateTime?
+ title String @db.VarChar(255)
+ slug String @unique @db.VarChar(255)
+ content String
+ components Json @default("{}")
+ authorId String
+ isBlog Boolean?
+ meta Json? @default("[{}]")
+ siteId String?
+ author User @relation(fields: [authorId], references: [id], onDelete: Cascade)
+ tags Tag[] @relation("PageToTag")
}
model Post {
- id String @id @default(uuid())
- title String @db.VarChar(255)
- content String
- slug String @unique @db.VarChar(255)
- createdAt DateTime @default(now())
- updatedAt DateTime @updatedAt
- authorId String
- locale String
- publishedAt DateTime?
- originalId String?
- featuredImage String?
- siteId String?
- type PostType? @default(DEFAULT)
- author User @relation(fields: [authorId], references: [id], onDelete: Cascade)
- originalPost Post? @relation("OriginalTranslated", fields: [originalId], references: [id])
- translatedPosts Post[] @relation("OriginalTranslated")
- tags Tag[] @relation("PostToTag")
+ id String @id @default(uuid())
+ title String @db.VarChar(255)
+ content String
+ slug String @unique @db.VarChar(255)
+ createdAt DateTime @default(now())
+ updatedAt DateTime @updatedAt
+ authorId String
+ publishedAt DateTime?
+ featuredImage String?
+ siteId String?
+ type PostType? @default(DEFAULT)
+ author User @relation(fields: [authorId], references: [id], onDelete: Cascade)
+ tags Tag[] @relation("PostToTag")
}
model Tag {
diff --git a/services/pages.ts b/services/pages.ts
index 47158a39..ba22d618 100644
--- a/services/pages.ts
+++ b/services/pages.ts
@@ -38,7 +38,7 @@ export const queryPages = async ({
}: {
skip?: number;
take?: number;
- where: Prisma.PageWhereInput;
+ where?: Prisma.PageWhereInput;
}) => {
const response = await prisma.page.findMany({
skip,
diff --git a/services/posts.ts b/services/posts.ts
index a6a8e8a4..c5206f31 100644
--- a/services/posts.ts
+++ b/services/posts.ts
@@ -4,7 +4,7 @@ import { prisma } from '@/configs/prisma';
import { getSession } from '@/configs/auth';
import type { Post } from '@/types';
-type CreatePostDto = Pick;
+type CreatePostDto = Pick;
export const createPost = async (formData: FormData) => {
const session = await getSession();
diff --git a/types/global.ts b/types/global.ts
deleted file mode 100644
index 4fd69d9d..00000000
--- a/types/global.ts
+++ /dev/null
@@ -1,86 +0,0 @@
-export type TypedFormDataValue = FormDataEntryValue | Blob;
-
-/**
- * Polyfill for FormData Generic
- *
- * {@link https://github.com/microsoft/TypeScript/issues/43797}
- * {@link https://xhr.spec.whatwg.org/#interface-formdata}
- */
-export interface TypedFormData> {
- /**
- * Appends a new value onto an existing key inside a FormData object, or adds the key if
- * it does not already exist.
- *
- * {@link https://developer.mozilla.org/en-US/docs/Web/API/FormData#formdata.append}
- */
- append(name: K, value: T[K], fileName?: string): void;
-
- /**
- * Deletes a key/value pair from a FormData object.
- *
- * {@link https://developer.mozilla.org/en-US/docs/Web/API/FormData#formdata.delete}
- */
- delete(name: keyof T): void;
-
- /**
- * Returns an iterator allowing to go through all key/value pairs contained in this object.
- *
- * {@link https://developer.mozilla.org/en-US/docs/Web/API/FormData#formdata.entries}
- */
- entries(): IterableIterator<[K, T[K]]>;
-
- /**
- * Returns the first value associated with a given key from within a FormData object.
- *
- * {@link https://developer.mozilla.org/en-US/docs/Web/API/FormData#formdata.get}
- */
- get(name: K): T[K] | null;
-
- /**
- * Returns an array of all the values associated with a given key from within a FormData.
- *
- * {@link https://developer.mozilla.org/en-US/docs/Web/API/FormData#formdata.getall}
- */
- getAll(name: K): Array;
-
- /**
- * Returns a boolean stating whether a FormData object contains a certain key.
- *
- * {@link https://developer.mozilla.org/en-US/docs/Web/API/FormData#formdata.has}
- */
- has(name: keyof T): boolean;
-
- /**
- * Returns an iterator allowing to go through all keys of the key/value pairs contained in
- * this object.
- *
- * {@link https://developer.mozilla.org/en-US/docs/Web/API/FormData#formdata.keys}
- */
- keys(): IterableIterator;
-
- /**
- * Sets a new value for an existing key inside a FormData object, or adds the key/value
- * if it does not already exist.
- *
- * {@link https://developer.mozilla.org/en-US/docs/Web/API/FormData#formdata.set}
- */
- set(name: keyof T, value: TypedFormDataValue, fileName?: string): void;
-
- /**
- * Returns an iterator allowing to go through all values contained in this object.
- *
- * {@link https://developer.mozilla.org/en-US/docs/Web/API/FormData#formdata.values}
- */
- values(): IterableIterator;
-
- forEach(
- callbackfn: (value: T[K], key: K, parent: TypedFormData) => void,
- thisArg?: unknown
- ): void;
-}
-
-function getTypedFormData>(
- form?: HTMLFormElement | null
-): TypedFormData {
- return new FormData(form || undefined) as unknown as TypedFormData;
-}
diff --git a/types/index.ts b/types/index.ts
index c5865ee4..c3f9d0d5 100644
--- a/types/index.ts
+++ b/types/index.ts
@@ -1,7 +1,5 @@
-import { getDictionary } from '@/utils/dictionary';
-import { i18n } from '@/configs/i18n.config';
-
import { Prisma } from '@prisma/client';
+
export * from '@prisma/client';
export type JsonObject = Prisma.JsonObject;
@@ -25,14 +23,16 @@ export enum HttpMethod {
TRACE = 'TRACE',
}
-export type Locale = (typeof i18n)['locales'][number]['value'];
-
-export type Dictionary = Awaited>;
-
export type RecursivePartial = {
[P in keyof T]?: T[P] extends (infer U)[]
? RecursivePartial[]
: T[P] extends Record
- ? RecursivePartial
- : T[P];
+ ? RecursivePartial
+ : T[P];
};
+
+export type NestedKeyOf = {
+ [K in keyof T & (string | number)]: T[K] extends object
+ ? `${K}` | `${K}.${NestedKeyOf}`
+ : `${K}`;
+}[keyof T & (string | number)];
diff --git a/types/next-auth.d.ts b/types/next-auth.d.ts
index 4b8e1363..a4bc5e46 100644
--- a/types/next-auth.d.ts
+++ b/types/next-auth.d.ts
@@ -1,6 +1,6 @@
// eslint-disable-next-line
import NextAuth, { DefaultSession } from 'next-auth';
-import type { Prisma, User as PrismaUser, UserRole } from '@prisma/client';
+import { Prisma, User as PrismaUser, UserRole } from '@prisma/client';
declare module 'next-auth/adapters' {
interface AdapterUser extends PrismaUser {}
diff --git a/utils/constants.ts b/utils/constants.ts
index 1cb30c6b..7c7c2318 100644
--- a/utils/constants.ts
+++ b/utils/constants.ts
@@ -1,4 +1,3 @@
-export const NEXT_LOCALE = 'NEXT_LOCALE';
export const MIN_PASSWORD_LENGTH = 8;
export const ROW_HEIGHT = 53;
export const JWT_MAX_AGE = 60 * 60 * 24 * 7;
diff --git a/utils/dictionary.ts b/utils/dictionary.ts
deleted file mode 100644
index 3e2bffc5..00000000
--- a/utils/dictionary.ts
+++ /dev/null
@@ -1,16 +0,0 @@
-import 'server-only';
-
-import { i18n } from '@/configs/i18n.config';
-import { Locale } from '@/types';
-
-const dictionaries = {
- en: () => import('@/dictionaries/en.json').then((module) => module.default),
- vi: () => import('@/dictionaries/vi.json').then((module) => module.default),
-};
-
-export const getDictionary = async (locale: Locale) => {
- if (dictionaries[locale]) {
- return dictionaries[locale]();
- }
- return dictionaries[i18n.defaultLocale]();
-};
diff --git a/utils/redirectedPathLocale.ts b/utils/redirectedPathLocale.ts
deleted file mode 100644
index f4aaed60..00000000
--- a/utils/redirectedPathLocale.ts
+++ /dev/null
@@ -1,16 +0,0 @@
-import { i18n } from '@/configs/i18n.config';
-import { Locale } from '@/types';
-
-export const redirectedPathName = (pathName: string, locale: Locale) => {
- if (!pathName) return '/';
-
- const segments = pathName.split('/');
-
- const check = i18n.locales.find(({ value }) => value === segments?.[1]);
-
- if (!check) return '';
-
- segments[1] = locale;
-
- return segments.join('/');
-};