intentionally break post rendering
This commit is contained in:
parent
70212232a0
commit
350575ccd4
14 changed files with 248 additions and 188 deletions
|
@ -59,7 +59,7 @@ export const PostButtons = ({
|
|||
>
|
||||
Edit a Copy
|
||||
</Button>
|
||||
{viewParentClick && (
|
||||
{parentId && (
|
||||
<Button iconLeft={<ArrowUpCircle />} onClick={viewParentClick}>
|
||||
View Parent
|
||||
</Button>
|
||||
|
|
|
@ -44,9 +44,11 @@ export const PostTitle = ({
|
|||
)}
|
||||
{loading && (
|
||||
<span className={styles.badges}>
|
||||
<div style={{ display: "flex", alignItems: "center" }}>
|
||||
<Skeleton width={100} height={20} />
|
||||
<Skeleton width={100} height={20} />
|
||||
<Skeleton width={100} height={20} />
|
||||
</div>
|
||||
</span>
|
||||
)}
|
||||
</span>
|
||||
|
|
|
@ -6,6 +6,7 @@ import { useEffect, useState } from "react"
|
|||
import { useRouter } from "next/navigation"
|
||||
import PasswordModalPage from "./password-modal-wrapper"
|
||||
import { File, PostWithFilesAndAuthor } from "@lib/server/prisma"
|
||||
import { useSession } from "next-auth/react"
|
||||
|
||||
type Props = {
|
||||
post: string | PostWithFilesAndAuthor
|
||||
|
@ -13,11 +14,16 @@ type Props = {
|
|||
isAuthor?: boolean
|
||||
}
|
||||
|
||||
const PostPage = ({ post: initialPost, isProtected, isAuthor }: Props) => {
|
||||
const PostPage = ({ post: initialPost, isProtected, isAuthor: isAuthorFromServer }: Props) => {
|
||||
const { data: session } = useSession()
|
||||
const [post, setPost] = useState<PostWithFilesAndAuthor>(
|
||||
typeof initialPost === "string" ? JSON.parse(initialPost) : initialPost
|
||||
)
|
||||
|
||||
// We generate public and unlisted posts at build time, so we can't use
|
||||
// the session to determine if the user is the author on the server. We need to check
|
||||
// the post's authorId against the session's user id.
|
||||
const isAuthor = isAuthorFromServer ? true : session?.user?.id === post?.authorId;
|
||||
const router = useRouter()
|
||||
|
||||
useEffect(() => {
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import PostPage from "./components/post-page"
|
||||
import { notFound, redirect } from "next/navigation"
|
||||
import { getPostById, Post, PostWithFilesAndAuthor } from "@lib/server/prisma"
|
||||
import { getAllPosts, getPostById, Post, PostWithFilesAndAuthor } from "@lib/server/prisma"
|
||||
import { getCurrentUser } from "@lib/server/session"
|
||||
import ScrollToTop from "@components/scroll-to-top"
|
||||
import { title } from "process"
|
||||
|
@ -14,19 +14,21 @@ export type PostProps = {
|
|||
isProtected?: boolean
|
||||
}
|
||||
|
||||
// export async function generateStaticParams() {
|
||||
// const posts = await getAllPosts({
|
||||
// where: {
|
||||
// visibility: {
|
||||
// equals: "public"
|
||||
// }
|
||||
// }
|
||||
// })
|
||||
export async function generateStaticParams() {
|
||||
const posts = await getAllPosts({
|
||||
where: {
|
||||
visibility: {
|
||||
equals: "public"
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
// return posts.map((post) => ({
|
||||
// id: post.id
|
||||
// }))
|
||||
// }
|
||||
return posts.map((post) => ({
|
||||
id: post.id
|
||||
}))
|
||||
}
|
||||
|
||||
export const dynamic = 'error';
|
||||
|
||||
const fetchOptions = {
|
||||
withFiles: true,
|
||||
|
@ -40,19 +42,16 @@ const getPost = async (id: string) => {
|
|||
return notFound()
|
||||
}
|
||||
|
||||
if (post.visibility === "public" || post.visibility === "unlisted") {
|
||||
return { post }
|
||||
}
|
||||
|
||||
const user = await getCurrentUser()
|
||||
const isAuthorOrAdmin = user?.id === post?.authorId || user?.role === "admin"
|
||||
|
||||
if (post.visibility === "public") {
|
||||
return { post, isAuthor: isAuthorOrAdmin }
|
||||
}
|
||||
|
||||
if (post.visibility === "private" && !isAuthorOrAdmin) {
|
||||
return notFound()
|
||||
}
|
||||
|
||||
if (post.visibility === "private" && !isAuthorOrAdmin) {
|
||||
return notFound()
|
||||
return redirect("/signin")
|
||||
}
|
||||
|
||||
if (post.visibility === "protected" && !isAuthorOrAdmin) {
|
||||
|
@ -64,8 +63,8 @@ const getPost = async (id: string) => {
|
|||
files: [],
|
||||
parentId: "",
|
||||
title: "",
|
||||
createdAt: new Date("1970-01-01"),
|
||||
expiresAt: new Date("1970-01-01"),
|
||||
createdAt: "",
|
||||
expiresAt: "",
|
||||
author: {
|
||||
displayName: ""
|
||||
},
|
||||
|
@ -112,7 +111,8 @@ const PostView = async ({
|
|||
title={post.title}
|
||||
createdAt={post.createdAt.toString()}
|
||||
expiresAt={post.expiresAt?.toString()}
|
||||
displayName={post.author?.displayName || ""}
|
||||
// displayName is an optional param
|
||||
displayName={post.author?.displayName || undefined}
|
||||
visibility={post.visibility}
|
||||
authorId={post.authorId}
|
||||
/>
|
||||
|
|
|
@ -1,17 +1,22 @@
|
|||
import React from "react"
|
||||
import styles from "./badge.module.css"
|
||||
type BadgeProps = {
|
||||
type: "primary" | "secondary" | "error" | "warning"
|
||||
children: React.ReactNode
|
||||
}
|
||||
|
||||
const Badge = ({ type, children }: BadgeProps) => {
|
||||
const Badge = React.forwardRef<HTMLDivElement, BadgeProps>(
|
||||
({ type, children }: BadgeProps, ref) => {
|
||||
return (
|
||||
<div className={styles.container}>
|
||||
<div className={`${styles.badge} ${styles[type]}`}>
|
||||
<span className={styles.badgeText}>{children}</span>
|
||||
<div className={`${styles.badge} ${styles[type]}`} ref={ref}>
|
||||
{children}
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
)
|
||||
|
||||
Badge.displayName = "Badge"
|
||||
|
||||
export default Badge
|
||||
|
|
|
@ -2,11 +2,7 @@
|
|||
|
||||
import styles from "./post-list.module.css"
|
||||
import ListItem from "./list-item"
|
||||
import {
|
||||
ChangeEvent,
|
||||
useCallback,
|
||||
useState
|
||||
} from "react"
|
||||
import { ChangeEvent, useCallback, useState } from "react"
|
||||
import Link from "@components/link"
|
||||
import type { PostWithFiles } from "@lib/server/prisma"
|
||||
import Input from "@components/input"
|
||||
|
@ -60,7 +56,15 @@ const PostList = ({
|
|||
[posts, hasMorePosts]
|
||||
)
|
||||
|
||||
const onSearch = (query: string) => {
|
||||
// eslint-disable-next-line react-hooks/exhaustive-deps -- TODO: address this
|
||||
const onSearch = useCallback(
|
||||
debounce((query: string) => {
|
||||
if (!query) {
|
||||
setPosts(initialPosts)
|
||||
setSearching(false)
|
||||
return
|
||||
}
|
||||
|
||||
setSearching(true)
|
||||
async function fetchPosts() {
|
||||
const res = await fetch(
|
||||
|
@ -77,14 +81,17 @@ const PostList = ({
|
|||
setSearching(false)
|
||||
}
|
||||
fetchPosts()
|
||||
}
|
||||
}, 300),
|
||||
[userId]
|
||||
)
|
||||
|
||||
const debouncedSearch = debounce(onSearch, 500)
|
||||
|
||||
const handleSearchChange = (e: ChangeEvent<HTMLInputElement>) => {
|
||||
const onSearchChange = useCallback(
|
||||
(e: ChangeEvent<HTMLInputElement>) => {
|
||||
setSearchValue(e.target.value)
|
||||
debouncedSearch(e.target.value)
|
||||
}
|
||||
onSearch(e.target.value)
|
||||
},
|
||||
[onSearch]
|
||||
)
|
||||
|
||||
const deletePost = useCallback(
|
||||
(postId: string) => async () => {
|
||||
|
@ -108,16 +115,18 @@ const PostList = ({
|
|||
|
||||
return (
|
||||
<div className={styles.container}>
|
||||
{!hideSearch && <div className={styles.searchContainer}>
|
||||
{!hideSearch && (
|
||||
<div className={styles.searchContainer}>
|
||||
<Input
|
||||
placeholder="Search..."
|
||||
onChange={handleSearchChange}
|
||||
onChange={onSearchChange}
|
||||
disabled={!posts}
|
||||
style={{ maxWidth: 300 }}
|
||||
aria-label="Search"
|
||||
value={search}
|
||||
/>
|
||||
</div>}
|
||||
</div>
|
||||
)}
|
||||
{!posts && <p style={{ color: "var(--warning)" }}>Failed to load.</p>}
|
||||
{searching && (
|
||||
<ul>
|
||||
|
@ -125,7 +134,7 @@ const PostList = ({
|
|||
<ListItemSkeleton />
|
||||
</ul>
|
||||
)}
|
||||
{posts?.length === 0 && posts && (
|
||||
{!searching && posts?.length === 0 && posts && (
|
||||
<p>
|
||||
No posts found. Create one{" "}
|
||||
<Link colored href="/new">
|
||||
|
@ -134,7 +143,7 @@ const PostList = ({
|
|||
.
|
||||
</p>
|
||||
)}
|
||||
{posts?.length > 0 && (
|
||||
{!searching && posts?.length > 0 && (
|
||||
<div>
|
||||
<ul>
|
||||
{posts.map((post) => {
|
||||
|
@ -149,7 +158,7 @@ const PostList = ({
|
|||
</ul>
|
||||
</div>
|
||||
)}
|
||||
{hasMorePosts && !setSearchValue && (
|
||||
{!searching && hasMorePosts && !setSearchValue && (
|
||||
<div className={styles.moreContainer}>
|
||||
<Button width={"100%"} onClick={loadMoreClick}>
|
||||
Load more
|
||||
|
|
|
@ -1,5 +1,3 @@
|
|||
"use client"
|
||||
|
||||
import Toast, { Toaster } from "react-hot-toast"
|
||||
|
||||
export type ToastType = "success" | "error" | "loading" | "default"
|
||||
|
|
|
@ -8,19 +8,18 @@ interface RootLayoutProps {
|
|||
|
||||
export default async function RootLayout({ children }: RootLayoutProps) {
|
||||
return (
|
||||
<ServerThemeProvider
|
||||
enableSystem={true}
|
||||
disableTransitionOnChange
|
||||
cookieName={"drift-theme"}
|
||||
attribute="data-theme"
|
||||
enableColorScheme={true}
|
||||
>
|
||||
// <ServerThemeProvider
|
||||
// enableSystem={true}
|
||||
// disableTransitionOnChange
|
||||
// cookieName={"drift-theme"}
|
||||
// attribute="data-theme"
|
||||
// enableColorScheme={true}
|
||||
// >
|
||||
<html lang="en">
|
||||
<head />
|
||||
<body>
|
||||
<LayoutWrapper>{children}</LayoutWrapper>
|
||||
</body>
|
||||
</html>
|
||||
</ServerThemeProvider>
|
||||
)
|
||||
}
|
||||
|
|
|
@ -13,7 +13,10 @@ const getWelcomeData = async () => {
|
|||
export default async function Page() {
|
||||
const { content, rendered, title } = await getWelcomeData()
|
||||
const getPostsPromise = getAllPosts({
|
||||
where: { visibility: "public" }
|
||||
where: { visibility: "public" },
|
||||
include: {
|
||||
files: true,
|
||||
}
|
||||
})
|
||||
|
||||
return (
|
||||
|
|
|
@ -4,7 +4,6 @@ import Header from "@components/header"
|
|||
import Page from "@components/page"
|
||||
import { Toasts } from "@components/toasts"
|
||||
import * as RadixTooltip from "@radix-ui/react-tooltip"
|
||||
import { ThemeProvider } from "@wits/next-themes"
|
||||
import { SessionProvider } from "next-auth/react"
|
||||
|
||||
export function LayoutWrapper({ children }: { children: React.ReactNode }) {
|
||||
|
@ -13,15 +12,7 @@ export function LayoutWrapper({ children }: { children: React.ReactNode }) {
|
|||
<RadixTooltip.Provider delayDuration={200}>
|
||||
<Toasts />
|
||||
<Page>
|
||||
<ThemeProvider
|
||||
enableSystem={true}
|
||||
defaultTheme="dark"
|
||||
disableTransitionOnChange
|
||||
attribute="data-theme"
|
||||
enableColorScheme={true}
|
||||
>
|
||||
<Header />
|
||||
</ThemeProvider>
|
||||
{children}
|
||||
</Page>
|
||||
</RadixTooltip.Provider>
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
|
||||
type Config = {
|
||||
is_production: boolean
|
||||
enable_admin: boolean
|
||||
|
@ -14,9 +15,9 @@ type Environment = { [key: string]: EnvironmentValue }
|
|||
|
||||
export const config = (env: Environment): Config => {
|
||||
const stringToBoolean = (str: EnvironmentValue): boolean => {
|
||||
if (str === "true") {
|
||||
if (str === "true" || str === "1") {
|
||||
return true
|
||||
} else if (str === "false") {
|
||||
} else if (str === "false" || str === "0") {
|
||||
return false
|
||||
} else if (str) {
|
||||
throw new Error(`Invalid boolean value: ${str}`)
|
||||
|
@ -69,8 +70,8 @@ export const config = (env: Environment): Config => {
|
|||
is_production,
|
||||
enable_admin: stringToBoolean(env.ENABLE_ADMIN),
|
||||
registration_password: env.REGISTRATION_PASSWORD ?? "",
|
||||
welcome_content: env.WELCOME_CONTENT ?? "",
|
||||
welcome_title: env.WELCOME_TITLE ?? "",
|
||||
welcome_content: env.WELCOME_CONTENT ?? "Welcome to Drift.",
|
||||
welcome_title: env.WELCOME_TITLE ?? "Drift",
|
||||
url: process.env.VERCEL_URL ?? throwIfUndefined("DRIFT_URL"),
|
||||
github_client_id: env.GITHUB_CLIENT_ID ?? "",
|
||||
github_client_secret: env.GITHUB_CLIENT_SECRET ?? ""
|
||||
|
|
|
@ -8,7 +8,40 @@ const providers: NextAuthOptions["providers"] = [
|
|||
GitHubProvider({
|
||||
clientId: config.github_client_id,
|
||||
clientSecret: config.github_client_secret
|
||||
})
|
||||
}),
|
||||
// CredentialsProvider({
|
||||
// name: "Credentials",
|
||||
// credentials: {
|
||||
// username: { label: "Username", type: "text", placeholder: "jsmith" },
|
||||
// password: { label: "Password", type: "password" }
|
||||
// },
|
||||
// async authorize(credentials) {
|
||||
// const user = await prisma.user.findUnique({
|
||||
// where: {
|
||||
// username: credentials.username
|
||||
// }
|
||||
// })
|
||||
|
||||
// if (!user) {
|
||||
// // create with prisma
|
||||
// // return user
|
||||
// const newUser = await prisma.account.create({
|
||||
// data: {
|
||||
// provider: "credentials",
|
||||
// providerAccountId: credentials.username,
|
||||
// user: {
|
||||
// create: {
|
||||
// name: credentials.username,
|
||||
// displayName: credentials.username
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// })
|
||||
// }
|
||||
|
||||
// return user
|
||||
// }
|
||||
// })
|
||||
]
|
||||
|
||||
export const authOptions: NextAuthOptions = {
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
},
|
||||
"dependencies": {
|
||||
"@next-auth/prisma-adapter": "^1.0.5",
|
||||
"@next/eslint-plugin-next": "13.0.5-canary.3",
|
||||
"@next/eslint-plugin-next": "13.0.7-canary.4",
|
||||
"@prisma/client": "^4.7.1",
|
||||
"@radix-ui/react-dialog": "^1.0.2",
|
||||
"@radix-ui/react-dropdown-menu": "^2.0.1",
|
||||
|
@ -24,11 +24,12 @@
|
|||
"@wcj/markdown-to-html": "^2.1.2",
|
||||
"@wits/next-themes": "0.2.14",
|
||||
"bcrypt": "^5.1.0",
|
||||
"client-only": "^0.0.1",
|
||||
"client-zip": "2.2.1",
|
||||
"jest": "^29.3.1",
|
||||
"lodash.debounce": "^4.0.8",
|
||||
"next": "13.0.7-canary.1",
|
||||
"next-auth": "^4.18.0",
|
||||
"next": "13.0.7-canary.4",
|
||||
"next-auth": "^4.18.4",
|
||||
"prisma": "^4.7.1",
|
||||
"react": "18.2.0",
|
||||
"react-datepicker": "4.8.0",
|
||||
|
@ -36,11 +37,12 @@
|
|||
"react-dropzone": "14.2.3",
|
||||
"react-feather": "^2.0.10",
|
||||
"react-hot-toast": "^2.4.0",
|
||||
"server-only": "^0.0.1",
|
||||
"textarea-markdown-editor": "1.0.4",
|
||||
"ts-jest": "^29.0.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@next/bundle-analyzer": "13.0.7-canary.1",
|
||||
"@next/bundle-analyzer": "13.0.7-canary.4",
|
||||
"@types/bcrypt": "^5.0.0",
|
||||
"@types/lodash.debounce": "^4.0.7",
|
||||
"@types/node": "17.0.23",
|
||||
|
|
|
@ -2,8 +2,8 @@ lockfileVersion: 5.4
|
|||
|
||||
specifiers:
|
||||
'@next-auth/prisma-adapter': ^1.0.5
|
||||
'@next/bundle-analyzer': 13.0.7-canary.1
|
||||
'@next/eslint-plugin-next': 13.0.5-canary.3
|
||||
'@next/bundle-analyzer': 13.0.7-canary.4
|
||||
'@next/eslint-plugin-next': 13.0.7-canary.4
|
||||
'@prisma/client': ^4.7.1
|
||||
'@radix-ui/react-dialog': ^1.0.2
|
||||
'@radix-ui/react-dropdown-menu': ^2.0.1
|
||||
|
@ -19,6 +19,7 @@ specifiers:
|
|||
'@wcj/markdown-to-html': ^2.1.2
|
||||
'@wits/next-themes': 0.2.14
|
||||
bcrypt: ^5.1.0
|
||||
client-only: ^0.0.1
|
||||
client-zip: 2.2.1
|
||||
clsx: ^1.2.1
|
||||
cross-env: 7.0.3
|
||||
|
@ -27,8 +28,8 @@ specifiers:
|
|||
eslint-config-next: 13.0.3
|
||||
jest: ^29.3.1
|
||||
lodash.debounce: ^4.0.8
|
||||
next: 13.0.7-canary.1
|
||||
next-auth: ^4.18.0
|
||||
next: 13.0.7-canary.4
|
||||
next-auth: ^4.18.4
|
||||
next-unused: 0.0.6
|
||||
prettier: 2.6.2
|
||||
prisma: ^4.7.1
|
||||
|
@ -38,6 +39,7 @@ specifiers:
|
|||
react-dropzone: 14.2.3
|
||||
react-feather: ^2.0.10
|
||||
react-hot-toast: ^2.4.0
|
||||
server-only: ^0.0.1
|
||||
sharp: ^0.31.2
|
||||
textarea-markdown-editor: 1.0.4
|
||||
ts-jest: ^29.0.3
|
||||
|
@ -45,8 +47,8 @@ specifiers:
|
|||
typescript-plugin-css-modules: 3.4.0
|
||||
|
||||
dependencies:
|
||||
'@next-auth/prisma-adapter': 1.0.5_hpttyne5hky44pj2anoxcmv4zm
|
||||
'@next/eslint-plugin-next': 13.0.5-canary.3
|
||||
'@next-auth/prisma-adapter': 1.0.5_4eojhct6t46nl4awizrjr4dkya
|
||||
'@next/eslint-plugin-next': 13.0.7-canary.4
|
||||
'@prisma/client': 4.7.1_prisma@4.7.1
|
||||
'@radix-ui/react-dialog': 1.0.2_jbvntnid6ohjelon6ccj5dhg2u
|
||||
'@radix-ui/react-dropdown-menu': 2.0.1_jbvntnid6ohjelon6ccj5dhg2u
|
||||
|
@ -54,20 +56,22 @@ dependencies:
|
|||
'@radix-ui/react-tabs': 1.0.1_biqbaboplfbrettd7655fr4n2y
|
||||
'@radix-ui/react-tooltip': 1.0.2_jbvntnid6ohjelon6ccj5dhg2u
|
||||
'@wcj/markdown-to-html': 2.1.2
|
||||
'@wits/next-themes': 0.2.14_ihvxcpofhpc4k2aqfys2drrlkq
|
||||
'@wits/next-themes': 0.2.14_cn2wvw6rkm76gy2h2qfs2itv2u
|
||||
bcrypt: 5.1.0
|
||||
client-only: 0.0.1
|
||||
client-zip: 2.2.1
|
||||
jest: 29.3.1_@types+node@17.0.23
|
||||
lodash.debounce: 4.0.8
|
||||
next: 13.0.7-canary.1_biqbaboplfbrettd7655fr4n2y
|
||||
next-auth: 4.18.0_ihvxcpofhpc4k2aqfys2drrlkq
|
||||
next: 13.0.7-canary.4_biqbaboplfbrettd7655fr4n2y
|
||||
next-auth: 4.18.4_cn2wvw6rkm76gy2h2qfs2itv2u
|
||||
prisma: 4.7.1
|
||||
react: 18.2.0
|
||||
react-datepicker: 4.8.0_biqbaboplfbrettd7655fr4n2y
|
||||
react-dom: 18.2.0_react@18.2.0
|
||||
react-dropzone: 14.2.3_react@18.2.0
|
||||
react-feather: 2.0.10_react@18.2.0
|
||||
react-hot-toast: 2.4.0_owo25xnefcwdq3zjgtohz6dbju
|
||||
react-hot-toast: github.com/MaxLeiter/react-hot-toast/e48766e293f39871697bbae8d270694733fac954_owo25xnefcwdq3zjgtohz6dbju
|
||||
server-only: 0.0.1
|
||||
textarea-markdown-editor: 1.0.4_biqbaboplfbrettd7655fr4n2y
|
||||
ts-jest: 29.0.3_7hcmezpa7bajbjecov7p46z4aa
|
||||
|
||||
|
@ -75,7 +79,7 @@ optionalDependencies:
|
|||
sharp: 0.31.2
|
||||
|
||||
devDependencies:
|
||||
'@next/bundle-analyzer': 13.0.7-canary.1
|
||||
'@next/bundle-analyzer': 13.0.7-canary.4
|
||||
'@types/bcrypt': 5.0.0
|
||||
'@types/lodash.debounce': 4.0.7
|
||||
'@types/node': 17.0.23
|
||||
|
@ -789,18 +793,18 @@ packages:
|
|||
- supports-color
|
||||
dev: false
|
||||
|
||||
/@next-auth/prisma-adapter/1.0.5_hpttyne5hky44pj2anoxcmv4zm:
|
||||
/@next-auth/prisma-adapter/1.0.5_4eojhct6t46nl4awizrjr4dkya:
|
||||
resolution: {integrity: sha512-VqMS11IxPXrPGXw6Oul6jcyS/n8GLOWzRMrPr3EMdtD6eOalM6zz05j08PcNiis8QzkfuYnCv49OvufTuaEwYQ==}
|
||||
peerDependencies:
|
||||
'@prisma/client': '>=2.26.0 || >=3'
|
||||
next-auth: ^4
|
||||
dependencies:
|
||||
'@prisma/client': 4.7.1_prisma@4.7.1
|
||||
next-auth: 4.18.0_ihvxcpofhpc4k2aqfys2drrlkq
|
||||
next-auth: 4.18.4_cn2wvw6rkm76gy2h2qfs2itv2u
|
||||
dev: false
|
||||
|
||||
/@next/bundle-analyzer/13.0.7-canary.1:
|
||||
resolution: {integrity: sha512-3CKGOK1Fp5mhCQ001h/GIj/ceZa4IfljWAkxRkX4uAOUAyyQ9MNNLNUX9H95/+oO7k2YS/Z71wXRk/xDaxM3Jw==}
|
||||
/@next/bundle-analyzer/13.0.7-canary.4:
|
||||
resolution: {integrity: sha512-YgqSA+Ok3ITIJFJMrJkaanwUsaTGy4zmOE36f3S7h3XoRpjRIH/OFcctVLrvkpc6rKhVxYN1dN2GMojL9f5KUA==}
|
||||
dependencies:
|
||||
webpack-bundle-analyzer: 4.7.0
|
||||
transitivePeerDependencies:
|
||||
|
@ -808,8 +812,8 @@ packages:
|
|||
- utf-8-validate
|
||||
dev: true
|
||||
|
||||
/@next/env/13.0.7-canary.1:
|
||||
resolution: {integrity: sha512-pjFCstWLbHpO3wAI4H6Jueiqb9s1IB++w8e79RJvry5K2ElzRpUPXeTkjI/oLSZ6W9DDG8DTOMmJtat2o+h3jA==}
|
||||
/@next/env/13.0.7-canary.4:
|
||||
resolution: {integrity: sha512-PEFzHZkan5SJtxAL+0TmL4Vx3BJp4tDbCnba/2H3CeW0hVEck0e+UY7UGSXwyBaojD6DwUtgHHN3tu2yd2x51w==}
|
||||
dev: false
|
||||
|
||||
/@next/eslint-plugin-next/13.0.3:
|
||||
|
@ -818,14 +822,14 @@ packages:
|
|||
glob: 7.1.7
|
||||
dev: true
|
||||
|
||||
/@next/eslint-plugin-next/13.0.5-canary.3:
|
||||
resolution: {integrity: sha512-HSho43Ul+m159QXy1ZFcA5KIKQ2J6eB35chITAEC5pREQpBLydi+XrjjwbkYiyYtpST97HgIcV0lrMXEznOi/g==}
|
||||
/@next/eslint-plugin-next/13.0.7-canary.4:
|
||||
resolution: {integrity: sha512-jNgarJTQSia+yTcQr6dF9wZhCfCFIXbc0WzSIAfyx4Z8FZjfmTmeVDGL1JHSYlcSmTnJ6o6Z36MsFh/mreuE4g==}
|
||||
dependencies:
|
||||
glob: 7.1.7
|
||||
dev: false
|
||||
|
||||
/@next/swc-android-arm-eabi/13.0.7-canary.1:
|
||||
resolution: {integrity: sha512-bmUIfXap+EwEpkWqGso3fMScXpbbUHecFByjnnmWOXU21e1bhE7UfCDtXzEn3utwt8MlUwA/h/5CGf6wMFUU8w==}
|
||||
/@next/swc-android-arm-eabi/13.0.7-canary.4:
|
||||
resolution: {integrity: sha512-mXpIUvBXaxYD/tI6FUuRKF0JPs03dBCQAtmZjG7hRISpnFWij1wgm+NewmXEZ7EmWIIstc+vTgP0Akzqfz6abg==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [arm]
|
||||
os: [android]
|
||||
|
@ -833,8 +837,8 @@ packages:
|
|||
dev: false
|
||||
optional: true
|
||||
|
||||
/@next/swc-android-arm64/13.0.7-canary.1:
|
||||
resolution: {integrity: sha512-k0Wo/NgoAj1Bcp7X7fYc8C4G4Y+qiLrjqWGTQ38Cx5NHJfMJf6gUTfgc2OTBG96tKj21LwKhhg6BEqV9mRuzOg==}
|
||||
/@next/swc-android-arm64/13.0.7-canary.4:
|
||||
resolution: {integrity: sha512-sht0AvPUp4667+QwWLj4zAcTEFoxmAH5sYRddSIrBpMa2fE0FT6P4ZInJ5eSlxrS+Ag9ehRq09kb+y9j8Ci/ZQ==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [arm64]
|
||||
os: [android]
|
||||
|
@ -842,8 +846,8 @@ packages:
|
|||
dev: false
|
||||
optional: true
|
||||
|
||||
/@next/swc-darwin-arm64/13.0.7-canary.1:
|
||||
resolution: {integrity: sha512-phrROUvPXYouNl4Bs7kRmkTcU18V2gxIbwiWonQYWROfCQJckELHM0MFOAfLbkJYRT/vcyp/o2bgiPkWv/fP8A==}
|
||||
/@next/swc-darwin-arm64/13.0.7-canary.4:
|
||||
resolution: {integrity: sha512-8WhDzOW2byCRde6bgMigqzVE0Uihhg9hicm2IzR81quoLuPU9UBbk7OCFSUg3OqQjjmzo2ZChYq85bouRMjpJg==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [arm64]
|
||||
os: [darwin]
|
||||
|
@ -851,8 +855,8 @@ packages:
|
|||
dev: false
|
||||
optional: true
|
||||
|
||||
/@next/swc-darwin-x64/13.0.7-canary.1:
|
||||
resolution: {integrity: sha512-ERpeI2zWlTj4xKdhwq8h9gyMWHSCh5UNm3ekX/MCgq1Mg1cLsv/kINeVQuvVP5II5HSHoEjnw2GvAMB4ayhcUA==}
|
||||
/@next/swc-darwin-x64/13.0.7-canary.4:
|
||||
resolution: {integrity: sha512-MWItc0vAwDFpW6kR+aPWhTj2Q0VaqKrWOemv28wv3Wv3kwCxheSzWImOkcGPn5eTnCRfn0Cn2b/+VHQ1tH79tg==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [x64]
|
||||
os: [darwin]
|
||||
|
@ -860,8 +864,8 @@ packages:
|
|||
dev: false
|
||||
optional: true
|
||||
|
||||
/@next/swc-freebsd-x64/13.0.7-canary.1:
|
||||
resolution: {integrity: sha512-L/YIIzaoV58UHLgiR8jfr0V9HXmUvHf1a2+1esSsTlMXZ0Y3SzcczuLgEu0/AYKEgHcfl+vcng9FBeqXtVlYyQ==}
|
||||
/@next/swc-freebsd-x64/13.0.7-canary.4:
|
||||
resolution: {integrity: sha512-mFoYF/rEi6Vd1RF6L3rNdYzwXATwqXUmbhY9Brav4JrJ9TQmf8GiZz0itn65J1QDuRw3rD+czKJ/HxwSvCNUMA==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [x64]
|
||||
os: [freebsd]
|
||||
|
@ -869,8 +873,8 @@ packages:
|
|||
dev: false
|
||||
optional: true
|
||||
|
||||
/@next/swc-linux-arm-gnueabihf/13.0.7-canary.1:
|
||||
resolution: {integrity: sha512-KVB7lAgtUgqrroqozYSCZIwVQITHhjbe99n/C6A9BYIAUtwITrLIn8Sj7D0a0sEhdDL8Y/rzXZGWMqL7f1Hg3A==}
|
||||
/@next/swc-linux-arm-gnueabihf/13.0.7-canary.4:
|
||||
resolution: {integrity: sha512-+uxKr1/BXvZjTeIFnue85pdDxnneD9lCvvfkIjcY2EIToTMOhTtqlyosXblENTL7uM+q26lhKOepRDttG9L2cQ==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [arm]
|
||||
os: [linux]
|
||||
|
@ -878,8 +882,8 @@ packages:
|
|||
dev: false
|
||||
optional: true
|
||||
|
||||
/@next/swc-linux-arm64-gnu/13.0.7-canary.1:
|
||||
resolution: {integrity: sha512-tA4yYk1+2fPgs0q6r94d7sKQosf9jZGTMXIS0yOykk246L3+npsDqyBrdCusaJv9q3Fm5S8lfwp4vqoLNtcFLg==}
|
||||
/@next/swc-linux-arm64-gnu/13.0.7-canary.4:
|
||||
resolution: {integrity: sha512-WVqK6/jXVjWePvIaOOgNHO6P8LUntvLuay6clhdBzAzArEStG1RRoupAnuqz9VXyFtHguRthejQhFAqYLq9jqw==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [arm64]
|
||||
os: [linux]
|
||||
|
@ -887,8 +891,8 @@ packages:
|
|||
dev: false
|
||||
optional: true
|
||||
|
||||
/@next/swc-linux-arm64-musl/13.0.7-canary.1:
|
||||
resolution: {integrity: sha512-KKN/nd2g2Cixs+av1mLeiNvhm+8T8ZiuzZHRrA4h4OWwreI+weS0iXBa1sBGvNp863MxE1mxKOv2xFhSbWK/CQ==}
|
||||
/@next/swc-linux-arm64-musl/13.0.7-canary.4:
|
||||
resolution: {integrity: sha512-LEu82umP+iLyP710qYA37UT6FFhcKZ7z9GmitFZxE9Jj6wenOFZHkkFDm624pJyAhfLcbLdT5MYqIgXIuwloDg==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [arm64]
|
||||
os: [linux]
|
||||
|
@ -896,8 +900,8 @@ packages:
|
|||
dev: false
|
||||
optional: true
|
||||
|
||||
/@next/swc-linux-x64-gnu/13.0.7-canary.1:
|
||||
resolution: {integrity: sha512-1crxMrvO2pHmsDxSkVknchiyLHYpkKKkwhnrFYKP06bZSEONAry6VTYJ6l73PK9mp1kzFAtke5k9yG4LG0fbAQ==}
|
||||
/@next/swc-linux-x64-gnu/13.0.7-canary.4:
|
||||
resolution: {integrity: sha512-ycoLEMKaNM/T/iplgVsjYFpYE7tTh/UNaBxuFnsxBLuQJJET26mCWNPjM7CpiDWZVhdFwD5ad9PI3+HeOnSgSg==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [x64]
|
||||
os: [linux]
|
||||
|
@ -905,8 +909,8 @@ packages:
|
|||
dev: false
|
||||
optional: true
|
||||
|
||||
/@next/swc-linux-x64-musl/13.0.7-canary.1:
|
||||
resolution: {integrity: sha512-1incysWrn+PEK6XRE1QnK2UI7//N6gfmeaFC1KIlRyt0JmyF8U3V+I6Qcar9nHz9hY9e8yszFQY0A9X0jsfkUQ==}
|
||||
/@next/swc-linux-x64-musl/13.0.7-canary.4:
|
||||
resolution: {integrity: sha512-xR22ldRvmg0l5bJbuK11iNFXAKS8+cgbkQZeHizYM5ngWOIEz8WQWn01+9sBeydtQZbvySpWHfm/Ev3XFEJHOw==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [x64]
|
||||
os: [linux]
|
||||
|
@ -914,8 +918,8 @@ packages:
|
|||
dev: false
|
||||
optional: true
|
||||
|
||||
/@next/swc-win32-arm64-msvc/13.0.7-canary.1:
|
||||
resolution: {integrity: sha512-AE5NYCeXilQnzIOma7y3cNcYVQsHJsEZ3r4/DTKvmFvuFVBkxza7Uxzi5rwD67ewSbOzir1xr+LBtI6vCmQ/Fw==}
|
||||
/@next/swc-win32-arm64-msvc/13.0.7-canary.4:
|
||||
resolution: {integrity: sha512-psFkg4qGIx85tqDu9f7vl1jgLumzGsCdVL+OvLWY9opASDNaSYMp0xcwKT1BvGYpY8sGs81Q21yVrGl4sa8vvA==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [arm64]
|
||||
os: [win32]
|
||||
|
@ -923,8 +927,8 @@ packages:
|
|||
dev: false
|
||||
optional: true
|
||||
|
||||
/@next/swc-win32-ia32-msvc/13.0.7-canary.1:
|
||||
resolution: {integrity: sha512-kG84cAm/FZsK3u2vgcUpQRT28NEA+vMTMrp4ufdHPu+c0o0aEcLqh3yQstWqw+hGpYQxiB0EF95K9bbRfHkgOQ==}
|
||||
/@next/swc-win32-ia32-msvc/13.0.7-canary.4:
|
||||
resolution: {integrity: sha512-4b0snVdqN8wDQMucJDbM759sC1txN/PwtaTn/rgcBaybXBFlYBc01mj3ePWcGcUj0378+FSKZWfo1+ldYBurFw==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [ia32]
|
||||
os: [win32]
|
||||
|
@ -932,8 +936,8 @@ packages:
|
|||
dev: false
|
||||
optional: true
|
||||
|
||||
/@next/swc-win32-x64-msvc/13.0.7-canary.1:
|
||||
resolution: {integrity: sha512-FrEMvjaPJ3g2BcQp0aovr4Jj5L/KnvWlnvw5fIPMMoDmUYuMkbR4ZbAvIrOaLGCRiO0862kcoCcdhZ75AwzU2g==}
|
||||
/@next/swc-win32-x64-msvc/13.0.7-canary.4:
|
||||
resolution: {integrity: sha512-RbxWU5fswTBBuI2o7hHJ2KgSUAS73pw0RNMI387eGfh7Nmo5QQg9DCUJFXQlxCWUmvC+mvYPwMFWsolYdEd++A==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [x64]
|
||||
os: [win32]
|
||||
|
@ -1725,14 +1729,14 @@ packages:
|
|||
- supports-color
|
||||
dev: false
|
||||
|
||||
/@wits/next-themes/0.2.14_ihvxcpofhpc4k2aqfys2drrlkq:
|
||||
/@wits/next-themes/0.2.14_cn2wvw6rkm76gy2h2qfs2itv2u:
|
||||
resolution: {integrity: sha512-fHKb/tRcWbYNblGHZtfvAQztDhzUB9d7ZkYOny0BisSPh6EABcsqxKB48ABUQztcmKywlp2zEMkLcSRj/PQBSw==}
|
||||
peerDependencies:
|
||||
next: '*'
|
||||
react: '*'
|
||||
react-dom: '*'
|
||||
dependencies:
|
||||
next: 13.0.7-canary.1_biqbaboplfbrettd7655fr4n2y
|
||||
next: 13.0.7-canary.4_biqbaboplfbrettd7655fr4n2y
|
||||
react: 18.2.0
|
||||
react-dom: 18.2.0_react@18.2.0
|
||||
dev: false
|
||||
|
@ -5225,8 +5229,8 @@ packages:
|
|||
dev: true
|
||||
optional: true
|
||||
|
||||
/next-auth/4.18.0_ihvxcpofhpc4k2aqfys2drrlkq:
|
||||
resolution: {integrity: sha512-lqJtusYqUwDiwzO4+B+lx/vKCuf/akcdhxT5R47JmS5gvI9O6Y4CZYc8coysY7XaMGHCxfttvTSEw76RA8gNTg==}
|
||||
/next-auth/4.18.4_cn2wvw6rkm76gy2h2qfs2itv2u:
|
||||
resolution: {integrity: sha512-tvXOabxv5U/y6ib56XPkOnc/48tYc+xT6GNOLREIme8WVGYHDTc3CGEfe2+0bVCWAm0ax/GYXH0By5NFoaJDww==}
|
||||
engines: {node: ^12.19.0 || ^14.15.0 || ^16.13.0 || ^18.12.0}
|
||||
peerDependencies:
|
||||
next: ^12.2.5 || ^13
|
||||
|
@ -5241,7 +5245,7 @@ packages:
|
|||
'@panva/hkdf': 1.0.2
|
||||
cookie: 0.5.0
|
||||
jose: 4.11.0
|
||||
next: 13.0.7-canary.1_biqbaboplfbrettd7655fr4n2y
|
||||
next: 13.0.7-canary.4_biqbaboplfbrettd7655fr4n2y
|
||||
oauth: 0.9.15
|
||||
openid-client: 5.3.0
|
||||
preact: 10.11.2
|
||||
|
@ -5262,8 +5266,8 @@ packages:
|
|||
- supports-color
|
||||
dev: true
|
||||
|
||||
/next/13.0.7-canary.1_biqbaboplfbrettd7655fr4n2y:
|
||||
resolution: {integrity: sha512-xfLT5Ikty2zcFCYSsYaQta3Dik09BJmwwj5a3i/ceh+51rJ+I3lP9+BbB9dUCUmgftOgxyyFUkzIZJ/gi3fUiQ==}
|
||||
/next/13.0.7-canary.4_biqbaboplfbrettd7655fr4n2y:
|
||||
resolution: {integrity: sha512-cx0ST4A/ZYB5eqygzx59cW4/xhVBanPhDr7JytkzZJ/HUCX67VR/ho+rcekB/C/ZNsefYukhMrep6vwfidV95A==}
|
||||
engines: {node: '>=14.6.0'}
|
||||
hasBin: true
|
||||
peerDependencies:
|
||||
|
@ -5280,7 +5284,7 @@ packages:
|
|||
sass:
|
||||
optional: true
|
||||
dependencies:
|
||||
'@next/env': 13.0.7-canary.1
|
||||
'@next/env': 13.0.7-canary.4
|
||||
'@swc/helpers': 0.4.14
|
||||
caniuse-lite: 1.0.30001431
|
||||
postcss: 8.4.14
|
||||
|
@ -5288,19 +5292,19 @@ packages:
|
|||
react-dom: 18.2.0_react@18.2.0
|
||||
styled-jsx: 5.1.0_react@18.2.0
|
||||
optionalDependencies:
|
||||
'@next/swc-android-arm-eabi': 13.0.7-canary.1
|
||||
'@next/swc-android-arm64': 13.0.7-canary.1
|
||||
'@next/swc-darwin-arm64': 13.0.7-canary.1
|
||||
'@next/swc-darwin-x64': 13.0.7-canary.1
|
||||
'@next/swc-freebsd-x64': 13.0.7-canary.1
|
||||
'@next/swc-linux-arm-gnueabihf': 13.0.7-canary.1
|
||||
'@next/swc-linux-arm64-gnu': 13.0.7-canary.1
|
||||
'@next/swc-linux-arm64-musl': 13.0.7-canary.1
|
||||
'@next/swc-linux-x64-gnu': 13.0.7-canary.1
|
||||
'@next/swc-linux-x64-musl': 13.0.7-canary.1
|
||||
'@next/swc-win32-arm64-msvc': 13.0.7-canary.1
|
||||
'@next/swc-win32-ia32-msvc': 13.0.7-canary.1
|
||||
'@next/swc-win32-x64-msvc': 13.0.7-canary.1
|
||||
'@next/swc-android-arm-eabi': 13.0.7-canary.4
|
||||
'@next/swc-android-arm64': 13.0.7-canary.4
|
||||
'@next/swc-darwin-arm64': 13.0.7-canary.4
|
||||
'@next/swc-darwin-x64': 13.0.7-canary.4
|
||||
'@next/swc-freebsd-x64': 13.0.7-canary.4
|
||||
'@next/swc-linux-arm-gnueabihf': 13.0.7-canary.4
|
||||
'@next/swc-linux-arm64-gnu': 13.0.7-canary.4
|
||||
'@next/swc-linux-arm64-musl': 13.0.7-canary.4
|
||||
'@next/swc-linux-x64-gnu': 13.0.7-canary.4
|
||||
'@next/swc-linux-x64-musl': 13.0.7-canary.4
|
||||
'@next/swc-win32-arm64-msvc': 13.0.7-canary.4
|
||||
'@next/swc-win32-ia32-msvc': 13.0.7-canary.4
|
||||
'@next/swc-win32-x64-msvc': 13.0.7-canary.4
|
||||
transitivePeerDependencies:
|
||||
- '@babel/core'
|
||||
- babel-plugin-macros
|
||||
|
@ -5953,20 +5957,6 @@ packages:
|
|||
react: 18.2.0
|
||||
dev: false
|
||||
|
||||
/react-hot-toast/2.4.0_owo25xnefcwdq3zjgtohz6dbju:
|
||||
resolution: {integrity: sha512-qnnVbXropKuwUpriVVosgo8QrB+IaPJCpL8oBI6Ov84uvHZ5QQcTp2qg6ku2wNfgJl6rlQXJIQU5q+5lmPOutA==}
|
||||
engines: {node: '>=10'}
|
||||
peerDependencies:
|
||||
react: '>=16'
|
||||
react-dom: '>=16'
|
||||
dependencies:
|
||||
goober: 2.1.11_csstype@3.1.1
|
||||
react: 18.2.0
|
||||
react-dom: 18.2.0_react@18.2.0
|
||||
transitivePeerDependencies:
|
||||
- csstype
|
||||
dev: false
|
||||
|
||||
/react-is/16.13.1:
|
||||
resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==}
|
||||
|
||||
|
@ -6388,6 +6378,10 @@ packages:
|
|||
dependencies:
|
||||
lru-cache: 6.0.0
|
||||
|
||||
/server-only/0.0.1:
|
||||
resolution: {integrity: sha512-qepMx2JxAa5jjfzxG79yPPq+8BuFToHd1hm7kI+Z4zAq1ftQiP7HcxMhDDItrbtwVeLg/cY2JnKnrcFkmiswNA==}
|
||||
dev: false
|
||||
|
||||
/set-blocking/2.0.0:
|
||||
resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==}
|
||||
dev: false
|
||||
|
@ -7311,3 +7305,20 @@ packages:
|
|||
/zwitch/2.0.2:
|
||||
resolution: {integrity: sha512-JZxotl7SxAJH0j7dN4pxsTV6ZLXoLdGME+PsjkL/DaBrVryK9kTGq06GfKrwcSOqypP+fdXGoCHE36b99fWVoA==}
|
||||
dev: false
|
||||
|
||||
github.com/MaxLeiter/react-hot-toast/e48766e293f39871697bbae8d270694733fac954_owo25xnefcwdq3zjgtohz6dbju:
|
||||
resolution: {registry: https://registry.npmjs.org/, tarball: https://codeload.github.com/MaxLeiter/react-hot-toast/tar.gz/e48766e293f39871697bbae8d270694733fac954}
|
||||
id: github.com/MaxLeiter/react-hot-toast/e48766e293f39871697bbae8d270694733fac954
|
||||
name: react-hot-toast
|
||||
version: 2.4.0
|
||||
engines: {node: '>=10'}
|
||||
peerDependencies:
|
||||
react: '>=16'
|
||||
react-dom: '>=16'
|
||||
dependencies:
|
||||
goober: 2.1.11_csstype@3.1.1
|
||||
react: 18.2.0
|
||||
react-dom: 18.2.0_react@18.2.0
|
||||
transitivePeerDependencies:
|
||||
- csstype
|
||||
dev: false
|
||||
|
|
Loading…
Reference in a new issue