refactor: some renaming and corrections

This commit is contained in:
Riccardo
2023-12-19 19:21:45 +01:00
parent c639f55067
commit 146ea54d71
18 changed files with 169 additions and 7545 deletions

View File

@@ -6,7 +6,7 @@
- Custom url shortener for links in the newsletter - Custom url shortener for links in the newsletter
- Cron every 10 minutes: people are more likely to open the newsletter if delivered around the time when they subscribed (if cron becomes not enough, then the cost of sending all the emails might be a bigger issue) - Cron every 10 minutes: people are more likely to open the newsletter if delivered around the time when they subscribed (if cron becomes not enough, then the cost of sending all the emails might be a bigger issue)
## Vercel basics ## Commands
Install vercel cli Install vercel cli
@@ -43,3 +43,9 @@ Reset Prisma database
```bash ```bash
yarn db:reset yarn db:reset
``` ```
Run on Docker
```bash
docker-compose up --build
```

View File

@@ -19,10 +19,17 @@ export async function GET(request: Request) {
where: { where: {
confirmed: true, confirmed: true,
deleted: false, deleted: false,
OR: [
{
lastMail: { lastMail: {
lt: new Date(Date.now() - 1000 * 60 * 60 * 24 + 1000 * 10 * 60) // 24h - 10m lt: new Date(Date.now() - 1000 * 60 * 60 * 24 + 1000 * 10 * 60) // 24h - 10m
} }
}, },
{
lastMail: null
}
]
},
select: { select: {
id: true, id: true,
email: true email: true
@@ -38,7 +45,7 @@ export async function GET(request: Request) {
const news = await prisma.news.findMany({ const news = await prisma.news.findMany({
where: { where: {
createdAt: { createdAt: {
gt: new Date(Date.now() - 1000 * 60 * 60) gt: new Date(Date.now() - 1000 * 60 * 60 * 24)
} }
} }
}); });

View File

@@ -6,10 +6,15 @@ export async function GET() {
orderBy: { orderBy: {
createdAt: 'desc' createdAt: 'desc'
}, },
take: 100 take: 50,
select: {
id: true,
title: true,
by: true
}
}); });
if (news && news.length === 100) { if (news) {
return ApiResponse(200, JSON.stringify(news)); return ApiResponse(200, JSON.stringify(news));
} }

View File

@@ -2,7 +2,7 @@
import { useRouter, useSearchParams } from 'next/navigation'; import { useRouter, useSearchParams } from 'next/navigation';
import { useEffect, useState } from 'react'; import { useEffect, useState } from 'react';
import { z } from 'zod'; import { z } from 'zod';
import { CustomCard } from '../../components/custom/card'; import { Card } from '../../components/custom/card';
import { ResponseSchema } from '../../utils/schemas'; import { ResponseSchema } from '../../utils/schemas';
export default function Confirmation() { export default function Confirmation() {
@@ -55,7 +55,7 @@ export default function Confirmation() {
} }
return ( return (
<CustomCard <Card
style='text-center' style='text-center'
title={loading ? 'Verifying' : 'Confirmed!'} title={loading ? 'Verifying' : 'Confirmed!'}
content={render()} content={render()}

View File

@@ -3,7 +3,7 @@ import { zodResolver } from '@hookform/resolvers/zod';
import { useEffect, useRef, useState } from 'react'; import { useEffect, useRef, useState } from 'react';
import { useForm } from 'react-hook-form'; import { useForm } from 'react-hook-form';
import { z } from 'zod'; import { z } from 'zod';
import { CustomCard } from '../components/custom/card'; import { Card } from '../components/custom/card';
import ErrorMessage from '../components/custom/error'; import ErrorMessage from '../components/custom/error';
import { Button } from '../components/ui/button'; import { Button } from '../components/ui/button';
import { import {
@@ -108,7 +108,7 @@ export default function Home() {
} }
return ( return (
<CustomCard <Card
style='text-center' style='text-center'
title='Hackernews + newsletter' title='Hackernews + newsletter'
description='Top stories from Hackernews. Once a day. Every day.' description='Top stories from Hackernews. Once a day. Every day.'

View File

@@ -1,5 +1,5 @@
'use client'; 'use client';
import { CustomCard } from '../../components/custom/card'; import { Card } from '../../components/custom/card';
export default function Privacy() { export default function Privacy() {
const body = ( const body = (
@@ -25,7 +25,6 @@ export default function Privacy() {
</p> </p>
<br /> <br />
<h2 className='styledH2'>Interpretation and Definitions</h2> <h2 className='styledH2'>Interpretation and Definitions</h2>
<br />
<h3 className='styledH3'>Interpretation</h3> <h3 className='styledH3'>Interpretation</h3>
<p> <p>
The words of which the initial letter is capitalized have meanings The words of which the initial letter is capitalized have meanings
@@ -116,9 +115,7 @@ export default function Privacy() {
</ul> </ul>
<br /> <br />
<h2 className='styledH2'>Collecting and Using Your Personal Data</h2> <h2 className='styledH2'>Collecting and Using Your Personal Data</h2>
<br />
<h3 className='styledH3'>Types of Data Collected</h3> <h3 className='styledH3'>Types of Data Collected</h3>
<br />
<h4 className='styledH4'>Personal Data</h4> <h4 className='styledH4'>Personal Data</h4>
<p> <p>
While using Our Service, We may ask You to provide Us with certain While using Our Service, We may ask You to provide Us with certain
@@ -432,7 +429,7 @@ export default function Privacy() {
); );
return ( return (
<CustomCard <Card
title='Privacy Policy' title='Privacy Policy'
description='Last updated: December 03, 2023' description='Last updated: December 03, 2023'
content={body} content={body}

View File

@@ -3,7 +3,7 @@ import { zodResolver } from '@hookform/resolvers/zod';
import { useEffect, useRef, useState } from 'react'; import { useEffect, useRef, useState } from 'react';
import { useForm } from 'react-hook-form'; import { useForm } from 'react-hook-form';
import { z } from 'zod'; import { z } from 'zod';
import { CustomCard } from '../../components/custom/card'; import { Card } from '../../components/custom/card';
import ErrorMessage from '../../components/custom/error'; import ErrorMessage from '../../components/custom/error';
import { Button } from '../../components/ui/button'; import { Button } from '../../components/ui/button';
import { import {
@@ -108,7 +108,7 @@ export default function Unsubscribe() {
} }
return ( return (
<CustomCard <Card
style='text-center' style='text-center'
title='Unsubscribe' title='Unsubscribe'
description='You sure you want to leave? :(' description='You sure you want to leave? :('

View File

@@ -1,11 +1,11 @@
import { useEffect, useState } from 'react'; import { useEffect, useState } from 'react';
import { z } from 'zod'; import { z } from 'zod';
import { NewsSchema } from '../../../../utils/schemas'; import { NewsTileSchema } from '../../../../utils/schemas';
import { TileContent } from './tileContent'; import { TileContent } from './tileContent';
type CardProps = { type CardProps = {
newsA?: z.infer<typeof NewsSchema>; newsA?: z.infer<typeof NewsTileSchema>;
newsB?: z.infer<typeof NewsSchema>; newsB?: z.infer<typeof NewsTileSchema>;
}; };
export function Tile({ newsA, newsB }: CardProps) { export function Tile({ newsA, newsB }: CardProps) {

View File

@@ -1,10 +1,10 @@
import { useState } from 'react'; import { useState } from 'react';
import { z } from 'zod'; import { z } from 'zod';
import { getRandomColor } from '../../../../utils/getRandomColor'; import { getRandomColor } from '../../../../utils/getRandomColor';
import { NewsSchema } from '../../../../utils/schemas'; import { NewsTileSchema } from '../../../../utils/schemas';
type CardContentProps = { type CardContentProps = {
story: z.infer<typeof NewsSchema>; story: z.infer<typeof NewsTileSchema>;
side: boolean; side: boolean;
}; };

View File

@@ -3,7 +3,7 @@
import { usePathname } from 'next/navigation'; import { usePathname } from 'next/navigation';
import { useEffect, useState } from 'react'; import { useEffect, useState } from 'react';
import { z } from 'zod'; import { z } from 'zod';
import { NewsSchema } from '../../../../utils/schemas'; import { NewsTile, NewsTileSchema } from '../../../../utils/schemas';
import { Tile } from './tile'; import { Tile } from './tile';
type TilesProps = { type TilesProps = {
@@ -19,11 +19,11 @@ export const Tiles = ({ children }: TilesProps) => {
width: 0, width: 0,
height: 0 height: 0
}); });
const [news, setNews] = useState<z.infer<typeof NewsSchema>[]>(); const [news, setNews] = useState<z.infer<typeof NewsTileSchema>[]>();
useEffect(() => { useEffect(() => {
async function getNews() { async function getNews() {
const news = await fetch('/api/news').then(res => res.json()); const news: NewsTile[] = await fetch('/api/news').then(res => res.json());
if (news) { if (news) {
setNews(news); setNews(news);
@@ -83,7 +83,7 @@ export const Tiles = ({ children }: TilesProps) => {
return ( return (
<div> <div>
<div className='flex flex-col justify-between'> <div className='-ml-12 -mt-10 flex flex-col justify-between'>
{Array.from({ length: rows }).map((_, index) => {Array.from({ length: rows }).map((_, index) =>
renderRow(columns, index) renderRow(columns, index)
)} )}

View File

@@ -1,16 +1,16 @@
import { ReactNode, useEffect, useState } from 'react'; import { ReactNode, useEffect, useState } from 'react';
import { useMediaQuery } from 'react-responsive'; import { useMediaQuery } from 'react-responsive';
import { import {
Card,
CardContent, CardContent,
CardDescription, CardDescription,
CardFooter, CardFooter,
CardHeader, CardHeader,
CardTitle CardTitle,
Card as CardUI
} from '../../components/ui/card'; } from '../../components/ui/card';
import Footer from './footer'; import Footer from './footer';
type CustomCardProps = { type CardProps = {
title: string; title: string;
description?: string; description?: string;
content: ReactNode; content: ReactNode;
@@ -18,13 +18,13 @@ type CustomCardProps = {
footer?: boolean; footer?: boolean;
}; };
export const CustomCard = ({ export const Card = ({
title, title,
description, description,
content, content,
style, style,
footer = true footer = true
}: CustomCardProps) => { }: CardProps) => {
const [isLoaded, setIsLoaded] = useState(false); const [isLoaded, setIsLoaded] = useState(false);
const isMobile = useMediaQuery({ query: '(max-width: 767px)' }); const isMobile = useMediaQuery({ query: '(max-width: 767px)' });
@@ -39,7 +39,7 @@ export const CustomCard = ({
if (isMobile) { if (isMobile) {
console.log(isMobile); console.log(isMobile);
return ( return (
<Card className={`max-h-[90vh] w-[90%] p-4`}> <CardUI className={`max-h-[90vh] w-[90%] p-4`}>
<CardHeader className='text-center'> <CardHeader className='text-center'>
<CardTitle>{title}</CardTitle> <CardTitle>{title}</CardTitle>
<CardDescription>{description}</CardDescription> <CardDescription>{description}</CardDescription>
@@ -52,12 +52,16 @@ export const CustomCard = ({
<Footer /> <Footer />
</CardFooter> </CardFooter>
)} )}
</Card> </CardUI>
); );
} }
return ( return (
<Card className={`${style ?? 'sm:w-2/3 md:w-2/5 lg:w-1/3 xl:w-1/4'} p-4`}> <CardUI
className={`${
style ?? 'sm:w-2/3 md:w-2/5 lg:w-1/3 xl:w-1/4'
} p-4 shadow-2xl`}
>
<CardHeader className='text-center'> <CardHeader className='text-center'>
<CardTitle>{title}</CardTitle> <CardTitle>{title}</CardTitle>
<CardDescription>{description}</CardDescription> <CardDescription>{description}</CardDescription>
@@ -70,6 +74,6 @@ export const CustomCard = ({
<Footer /> <Footer />
</CardFooter> </CardFooter>
)} )}
</Card> </CardUI>
); );
}; };

View File

@@ -1,4 +1,3 @@
import NextLink from 'next/link';
import { Button } from '../ui/button'; import { Button } from '../ui/button';
type LinkProps = { type LinkProps = {
@@ -9,7 +8,7 @@ type LinkProps = {
export function Link({ path, text }: LinkProps) { export function Link({ path, text }: LinkProps) {
return ( return (
<Button asChild> <Button asChild>
<NextLink href={path}>{text}</NextLink> <a href={path}>{text}</a>
</Button> </Button>
); );
} }

View File

@@ -11,10 +11,13 @@ export function Footer() {
<div className='ml-8 flex items-center justify-between pb-4'> <div className='ml-8 flex items-center justify-between pb-4'>
<div> <div>
<h4 className='text-lg font-semibold'>Contact Us</h4> <h4 className='text-lg font-semibold'>Contact Us</h4>
<p>{process.env.BRAND_NAME}</p> <p>{process.env.NEXT_PUBLIC_BRAND_NAME}</p>
<a href={`mailto:${process.env.BRAND_EMAIL}`}> <p>
Email: {process.env.BRAND_EMAIL} Email:{' '}
<a href={`mailto:${process.env.NEXT_PUBLIC_BRAND_EMAIL}`}>
Email: {process.env.NEXT_PUBLIC_BRAND_EMAIL}
</a> </a>
</p>
</div> </div>
</div> </div>
</footer> </footer>

7401
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -14,8 +14,8 @@ model User {
code String @unique code String @unique
confirmed Boolean @default(false) confirmed Boolean @default(false)
deleted Boolean @default(false) deleted Boolean @default(false)
createdAt DateTime @default(now()) @map(name: "created_at") createdAt DateTime @default(now())
lastMail DateTime @default(now()) @updatedAt @map(name: "updated_at") lastMail DateTime?
@@map(name: "users") @@map(name: "users")
} }

View File

@@ -3,11 +3,7 @@ import { fontFamily } from 'tailwindcss/defaultTheme';
/** @type {import('tailwindcss').Config} */ /** @type {import('tailwindcss').Config} */
module.exports = { module.exports = {
darkMode: ['class'], darkMode: ['class'],
content: [ content: ['./components/**/*.{ts,tsx}', './app/**/*.{ts,tsx}'],
'./pages/**/*.{ts,tsx}',
'./components/**/*.{ts,tsx}',
'./app/**/*.{ts,tsx}'
],
theme: { theme: {
container: { container: {
center: true, center: true,

View File

@@ -41,3 +41,11 @@ export const NewsSchema = z.object({
score: z.number(), score: z.number(),
createdAt: z.date() createdAt: z.date()
}); });
export const NewsTileSchema = z.object({
id: z.number(),
title: z.string(),
by: z.string()
});
export type NewsTile = z.infer<typeof NewsTileSchema>;

190
yarn.lock
View File

@@ -389,45 +389,45 @@
integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==
"@prisma/client@^5.6.0": "@prisma/client@^5.6.0":
version "5.7.0" version "5.7.1"
resolved "https://registry.yarnpkg.com/@prisma/client/-/client-5.7.0.tgz#c29dd9a16e100902eb2d2443d90fee2482d2aeac" resolved "https://registry.yarnpkg.com/@prisma/client/-/client-5.7.1.tgz#a124afd05663267f7255a639a81d28303684a063"
integrity sha512-cZmglCrfNbYpzUtz7HscVHl38e9CrUs31nrVoGUK1nIPXGgt8hT4jj2s657UXcNdQ/jBUxDgGmHyu2Nyrq1txg== integrity sha512-TUSa4nUcC4nf/e7X3jyO1pEd6XcI/TLRCA0KjkA46RDIpxUaRsBYEOqITwXRW2c0bMFyKcCRXrH4f7h4q9oOlg==
"@prisma/debug@5.7.0": "@prisma/debug@5.7.1":
version "5.7.0" version "5.7.1"
resolved "https://registry.yarnpkg.com/@prisma/debug/-/debug-5.7.0.tgz#abdb2060be4fe819e73e2683cf1b039841566198" resolved "https://registry.yarnpkg.com/@prisma/debug/-/debug-5.7.1.tgz#064177066e630beb43492ffa608acc21a118e2ce"
integrity sha512-tZ+MOjWlVvz1kOEhNYMa4QUGURY+kgOUBqLHYIV8jmCsMuvA1tWcn7qtIMLzYWCbDcQT4ZS8xDgK0R2gl6/0wA== integrity sha512-yrVSO/YZOxdeIxcBtZ5BaNqUfPrZkNsAKQIQg36cJKMxj/VYK3Vk5jMKkI+gQLl0KReo1YvX8GWKfV788SELjw==
"@prisma/engines-version@5.7.0-41.79fb5193cf0a8fdbef536e4b4a159cad677ab1b9": "@prisma/engines-version@5.7.1-1.0ca5ccbcfa6bdc81c003cf549abe4269f59c41e5":
version "5.7.0-41.79fb5193cf0a8fdbef536e4b4a159cad677ab1b9" version "5.7.1-1.0ca5ccbcfa6bdc81c003cf549abe4269f59c41e5"
resolved "https://registry.yarnpkg.com/@prisma/engines-version/-/engines-version-5.7.0-41.79fb5193cf0a8fdbef536e4b4a159cad677ab1b9.tgz#777827898f1bfe6a76b17fbe7d9600cf543c4cc1" resolved "https://registry.yarnpkg.com/@prisma/engines-version/-/engines-version-5.7.1-1.0ca5ccbcfa6bdc81c003cf549abe4269f59c41e5.tgz#b7845425313e5395a3a3e64f3e0d04c1f320fa92"
integrity sha512-V6tgRVi62jRwTm0Hglky3Scwjr/AKFBFtS+MdbsBr7UOuiu1TKLPc6xfPiyEN1+bYqjEtjxwGsHgahcJsd1rNg== integrity sha512-dIR5IQK/ZxEoWRBDOHF87r1Jy+m2ih3Joi4vzJRP+FOj5yxCwS2pS5SBR3TWoVnEK1zxtLI/3N7BjHyGF84fgw==
"@prisma/engines@5.7.0": "@prisma/engines@5.7.1":
version "5.7.0" version "5.7.1"
resolved "https://registry.yarnpkg.com/@prisma/engines/-/engines-5.7.0.tgz#a32e232819b66bd9dee7500b455781742dc54b2f" resolved "https://registry.yarnpkg.com/@prisma/engines/-/engines-5.7.1.tgz#631c27daa326bbacd5d7119446e0d3f15c0f274c"
integrity sha512-TkOMgMm60n5YgEKPn9erIvFX2/QuWnl3GBo6yTRyZKk5O5KQertXiNnrYgSLy0SpsKmhovEPQb+D4l0SzyE7XA== integrity sha512-R+Pqbra8tpLP2cvyiUpx+SIKglav3nTCpA+rn6826CThviQ8yvbNG0s8jNpo51vS9FuZO3pOkARqG062vKX7uA==
dependencies: dependencies:
"@prisma/debug" "5.7.0" "@prisma/debug" "5.7.1"
"@prisma/engines-version" "5.7.0-41.79fb5193cf0a8fdbef536e4b4a159cad677ab1b9" "@prisma/engines-version" "5.7.1-1.0ca5ccbcfa6bdc81c003cf549abe4269f59c41e5"
"@prisma/fetch-engine" "5.7.0" "@prisma/fetch-engine" "5.7.1"
"@prisma/get-platform" "5.7.0" "@prisma/get-platform" "5.7.1"
"@prisma/fetch-engine@5.7.0": "@prisma/fetch-engine@5.7.1":
version "5.7.0" version "5.7.1"
resolved "https://registry.yarnpkg.com/@prisma/fetch-engine/-/fetch-engine-5.7.0.tgz#7d2795828b692b02707e7ab6876f6227a68fc309" resolved "https://registry.yarnpkg.com/@prisma/fetch-engine/-/fetch-engine-5.7.1.tgz#d7baa3493867c6f7cedfc41df477cfd0963059ca"
integrity sha512-zIn/qmO+N/3FYe7/L9o+yZseIU8ivh4NdPKSkQRIHfg2QVTVMnbhGoTcecbxfVubeTp+DjcbjS0H9fCuM4W04w== integrity sha512-9ELauIEBkIaEUpMIYPRlh5QELfoC6pyHolHVQgbNxglaINikZ9w9X7r1TIePAcm05pCNp2XPY1ObQIJW5nYfBQ==
dependencies: dependencies:
"@prisma/debug" "5.7.0" "@prisma/debug" "5.7.1"
"@prisma/engines-version" "5.7.0-41.79fb5193cf0a8fdbef536e4b4a159cad677ab1b9" "@prisma/engines-version" "5.7.1-1.0ca5ccbcfa6bdc81c003cf549abe4269f59c41e5"
"@prisma/get-platform" "5.7.0" "@prisma/get-platform" "5.7.1"
"@prisma/get-platform@5.7.0": "@prisma/get-platform@5.7.1":
version "5.7.0" version "5.7.1"
resolved "https://registry.yarnpkg.com/@prisma/get-platform/-/get-platform-5.7.0.tgz#eb81011f537c2d10c0225278cd5165a82d0b57c8" resolved "https://registry.yarnpkg.com/@prisma/get-platform/-/get-platform-5.7.1.tgz#bc2fe43838c7d47b321aa4728a0f60990d02bc9e"
integrity sha512-ZeV/Op4bZsWXuw5Tg05WwRI8BlKiRFhsixPcAM+5BKYSiUZiMKIi713tfT3drBq8+T0E1arNZgYSA9QYcglWNA== integrity sha512-eDlswr3a1m5z9D/55Iyt/nZqS5UpD+DZ9MooBB3hvrcPhDQrcf9m4Tl7buy4mvAtrubQ626ECtb8c6L/f7rGSQ==
dependencies: dependencies:
"@prisma/debug" "5.7.0" "@prisma/debug" "5.7.1"
"@radix-ui/react-compose-refs@1.0.1": "@radix-ui/react-compose-refs@1.0.1":
version "1.0.1" version "1.0.1"
@@ -533,9 +533,9 @@
undici-types "~5.26.4" undici-types "~5.26.4"
"@types/node@^20": "@types/node@^20":
version "20.10.4" version "20.10.5"
resolved "https://registry.yarnpkg.com/@types/node/-/node-20.10.4.tgz#b246fd84d55d5b1b71bf51f964bd514409347198" resolved "https://registry.yarnpkg.com/@types/node/-/node-20.10.5.tgz#47ad460b514096b7ed63a1dae26fad0914ed3ab2"
integrity sha512-D08YG6rr8X90YB56tSIuBaddy/UXAA9RKJoFvrsnogAum/0pmjkgi4+2nx96A330FmioegBWmEYQ+syqCFaveg== integrity sha512-nNPsNE65wjMxEKI93yOP+NPGGBJz/PoN3kZsVLee0XMiJolxSekEVD8wRwBUBqkwc7UWop0edW50yrCQW4CyRw==
dependencies: dependencies:
undici-types "~5.26.4" undici-types "~5.26.4"
@@ -576,15 +576,15 @@
integrity sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A== integrity sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==
"@typescript-eslint/eslint-plugin@^6.12.0": "@typescript-eslint/eslint-plugin@^6.12.0":
version "6.14.0" version "6.15.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.14.0.tgz#fc1ab5f23618ba590c87e8226ff07a760be3dd7b" resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.15.0.tgz#b0b3e15fa8c3e67ed4386b765cc0ba98ad3a303b"
integrity sha512-1ZJBykBCXaSHG94vMMKmiHoL0MhNHKSVlcHVYZNw+BKxufhqQVTOawNpwwI1P5nIFZ/4jLVop0mcY6mJJDFNaw== integrity sha512-j5qoikQqPccq9QoBAupOP+CBu8BaJ8BLjaXSioDISeTZkVO3ig7oSIKh3H+rEpee7xCXtWwSB4KIL5l6hWZzpg==
dependencies: dependencies:
"@eslint-community/regexpp" "^4.5.1" "@eslint-community/regexpp" "^4.5.1"
"@typescript-eslint/scope-manager" "6.14.0" "@typescript-eslint/scope-manager" "6.15.0"
"@typescript-eslint/type-utils" "6.14.0" "@typescript-eslint/type-utils" "6.15.0"
"@typescript-eslint/utils" "6.14.0" "@typescript-eslint/utils" "6.15.0"
"@typescript-eslint/visitor-keys" "6.14.0" "@typescript-eslint/visitor-keys" "6.15.0"
debug "^4.3.4" debug "^4.3.4"
graphemer "^1.4.0" graphemer "^1.4.0"
ignore "^5.2.4" ignore "^5.2.4"
@@ -593,71 +593,71 @@
ts-api-utils "^1.0.1" ts-api-utils "^1.0.1"
"@typescript-eslint/parser@^5.4.2 || ^6.0.0", "@typescript-eslint/parser@^6.12.0": "@typescript-eslint/parser@^5.4.2 || ^6.0.0", "@typescript-eslint/parser@^6.12.0":
version "6.14.0" version "6.15.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.14.0.tgz#a2d6a732e0d2b95c73f6a26ae7362877cc1b4212" resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.15.0.tgz#1af69741cfa314a13c1434d0bdd5a0c3096699d7"
integrity sha512-QjToC14CKacd4Pa7JK4GeB/vHmWFJckec49FR4hmIRf97+KXole0T97xxu9IFiPxVQ1DBWrQ5wreLwAGwWAVQA== integrity sha512-MkgKNnsjC6QwcMdlNAel24jjkEO/0hQaMDLqP4S9zq5HBAUJNQB6y+3DwLjX7b3l2b37eNAxMPLwb3/kh8VKdA==
dependencies: dependencies:
"@typescript-eslint/scope-manager" "6.14.0" "@typescript-eslint/scope-manager" "6.15.0"
"@typescript-eslint/types" "6.14.0" "@typescript-eslint/types" "6.15.0"
"@typescript-eslint/typescript-estree" "6.14.0" "@typescript-eslint/typescript-estree" "6.15.0"
"@typescript-eslint/visitor-keys" "6.14.0" "@typescript-eslint/visitor-keys" "6.15.0"
debug "^4.3.4" debug "^4.3.4"
"@typescript-eslint/scope-manager@6.14.0": "@typescript-eslint/scope-manager@6.15.0":
version "6.14.0" version "6.15.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.14.0.tgz#53d24363fdb5ee0d1d8cda4ed5e5321272ab3d48" resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.15.0.tgz#40e5214a3e9e048aca55ce33381bc61b6b51c32a"
integrity sha512-VT7CFWHbZipPncAZtuALr9y3EuzY1b1t1AEkIq2bTXUPKw+pHoXflGNG5L+Gv6nKul1cz1VH8fz16IThIU0tdg== integrity sha512-+BdvxYBltqrmgCNu4Li+fGDIkW9n//NrruzG9X1vBzaNK+ExVXPoGB71kneaVw/Jp+4rH/vaMAGC6JfMbHstVg==
dependencies: dependencies:
"@typescript-eslint/types" "6.14.0" "@typescript-eslint/types" "6.15.0"
"@typescript-eslint/visitor-keys" "6.14.0" "@typescript-eslint/visitor-keys" "6.15.0"
"@typescript-eslint/type-utils@6.14.0": "@typescript-eslint/type-utils@6.15.0":
version "6.14.0" version "6.15.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.14.0.tgz#ac9cb5ba0615c837f1a6b172feeb273d36e4f8af" resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.15.0.tgz#c22261bd00566821a300d08f4632533a8f9bed01"
integrity sha512-x6OC9Q7HfYKqjnuNu5a7kffIYs3No30isapRBJl1iCHLitD8O0lFbRcVGiOcuyN837fqXzPZ1NS10maQzZMKqw== integrity sha512-CnmHKTfX6450Bo49hPg2OkIm/D/TVYV7jO1MCfPYGwf6x3GO0VU8YMO5AYMn+u3X05lRRxA4fWCz87GFQV6yVQ==
dependencies: dependencies:
"@typescript-eslint/typescript-estree" "6.14.0" "@typescript-eslint/typescript-estree" "6.15.0"
"@typescript-eslint/utils" "6.14.0" "@typescript-eslint/utils" "6.15.0"
debug "^4.3.4" debug "^4.3.4"
ts-api-utils "^1.0.1" ts-api-utils "^1.0.1"
"@typescript-eslint/types@6.14.0": "@typescript-eslint/types@6.15.0":
version "6.14.0" version "6.15.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.14.0.tgz#935307f7a931016b7a5eb25d494ea3e1f613e929" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.15.0.tgz#a9f7b006aee52b0948be6e03f521814bf435ddd5"
integrity sha512-uty9H2K4Xs8E47z3SnXEPRNDfsis8JO27amp2GNCnzGETEW3yTqEIVg5+AI7U276oGF/tw6ZA+UesxeQ104ceA== integrity sha512-yXjbt//E4T/ee8Ia1b5mGlbNj9fB9lJP4jqLbZualwpP2BCQ5is6BcWwxpIsY4XKAhmdv3hrW92GdtJbatC6dQ==
"@typescript-eslint/typescript-estree@6.14.0": "@typescript-eslint/typescript-estree@6.15.0":
version "6.14.0" version "6.15.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.14.0.tgz#90c7ddd45cd22139adf3d4577580d04c9189ac13" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.15.0.tgz#2f8a513df1ce5e6e1ba8e5c6aa52f392ae023fc5"
integrity sha512-yPkaLwK0yH2mZKFE/bXkPAkkFgOv15GJAUzgUVonAbv0Hr4PK/N2yaA/4XQbTZQdygiDkpt5DkxPELqHguNvyw== integrity sha512-7mVZJN7Hd15OmGuWrp2T9UvqR2Ecg+1j/Bp1jXUEY2GZKV6FXlOIoqVDmLpBiEiq3katvj/2n2mR0SDwtloCew==
dependencies: dependencies:
"@typescript-eslint/types" "6.14.0" "@typescript-eslint/types" "6.15.0"
"@typescript-eslint/visitor-keys" "6.14.0" "@typescript-eslint/visitor-keys" "6.15.0"
debug "^4.3.4" debug "^4.3.4"
globby "^11.1.0" globby "^11.1.0"
is-glob "^4.0.3" is-glob "^4.0.3"
semver "^7.5.4" semver "^7.5.4"
ts-api-utils "^1.0.1" ts-api-utils "^1.0.1"
"@typescript-eslint/utils@6.14.0": "@typescript-eslint/utils@6.15.0":
version "6.14.0" version "6.15.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.14.0.tgz#856a9e274367d99ffbd39c48128b93a86c4261e3" resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.15.0.tgz#f80dbb79f3b0f569077a8711dd44186a8933fa4c"
integrity sha512-XwRTnbvRr7Ey9a1NT6jqdKX8y/atWG+8fAIu3z73HSP8h06i3r/ClMhmaF/RGWGW1tHJEwij1uEg2GbEmPYvYg== integrity sha512-eF82p0Wrrlt8fQSRL0bGXzK5nWPRV2dYQZdajcfzOD9+cQz9O7ugifrJxclB+xVOvWvagXfqS4Es7vpLP4augw==
dependencies: dependencies:
"@eslint-community/eslint-utils" "^4.4.0" "@eslint-community/eslint-utils" "^4.4.0"
"@types/json-schema" "^7.0.12" "@types/json-schema" "^7.0.12"
"@types/semver" "^7.5.0" "@types/semver" "^7.5.0"
"@typescript-eslint/scope-manager" "6.14.0" "@typescript-eslint/scope-manager" "6.15.0"
"@typescript-eslint/types" "6.14.0" "@typescript-eslint/types" "6.15.0"
"@typescript-eslint/typescript-estree" "6.14.0" "@typescript-eslint/typescript-estree" "6.15.0"
semver "^7.5.4" semver "^7.5.4"
"@typescript-eslint/visitor-keys@6.14.0": "@typescript-eslint/visitor-keys@6.15.0":
version "6.14.0" version "6.15.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.14.0.tgz#1d1d486581819287de824a56c22f32543561138e" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.15.0.tgz#5baf97a7bfeec6f4894d400437055155a46b2330"
integrity sha512-fB5cw6GRhJUz03MrROVuj5Zm/Q+XWlVdIsFj+Zb1Hvqouc8t+XP2H5y53QYU/MGtd2dPg6/vJJlhoX3xc2ehfw== integrity sha512-1zvtdC1a9h5Tb5jU9x3ADNXO9yjP8rXlaoChu0DQX40vf5ACVpYIVIZhIMZ6d5sDXH7vq4dsZBT1fEGj8D2n2w==
dependencies: dependencies:
"@typescript-eslint/types" "6.14.0" "@typescript-eslint/types" "6.15.0"
eslint-visitor-keys "^3.4.1" eslint-visitor-keys "^3.4.1"
"@ungap/structured-clone@^1.2.0": "@ungap/structured-clone@^1.2.0":
@@ -1369,9 +1369,9 @@ editorconfig@^1.0.3:
semver "^7.5.3" semver "^7.5.3"
electron-to-chromium@^1.4.601: electron-to-chromium@^1.4.601:
version "1.4.614" version "1.4.615"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.614.tgz#2fe789d61fa09cb875569f37c309d0c2701f91c0" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.615.tgz#b1c41839962d2e4e63dca05519da9040e34848c2"
integrity sha512-X4ze/9Sc3QWs6h92yerwqv7aB/uU8vCjZcrMjA8N9R1pjMFRe44dLsck5FzLilOYvcXuDn93B+bpGYyufc70gQ== integrity sha512-/bKPPcgZVUziECqDc+0HkT87+0zhaWSZHNXqF8FLd2lQcptpmUFwoCSWjCdOng9Gdq+afKArPdEg/0ZW461Eng==
emoji-regex@^10.3.0: emoji-regex@^10.3.0:
version "10.3.0" version "10.3.0"
@@ -1793,9 +1793,9 @@ fast-levenshtein@^2.0.6:
integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==
fastq@^1.6.0: fastq@^1.6.0:
version "1.15.0" version "1.16.0"
resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.16.0.tgz#83b9a9375692db77a822df081edb6a9cf6839320"
integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== integrity sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==
dependencies: dependencies:
reusify "^1.0.4" reusify "^1.0.4"
@@ -3304,11 +3304,11 @@ pretty@2.0.0:
js-beautify "^1.6.12" js-beautify "^1.6.12"
prisma@^5.6.0: prisma@^5.6.0:
version "5.7.0" version "5.7.1"
resolved "https://registry.yarnpkg.com/prisma/-/prisma-5.7.0.tgz#3c1c56d392b5d1137de954edefa4533fa092663e" resolved "https://registry.yarnpkg.com/prisma/-/prisma-5.7.1.tgz#af60ed90531adc0ab8a683c9b1fc86d841c39864"
integrity sha512-0rcfXO2ErmGAtxnuTNHQT9ztL0zZheQjOI/VNJzdq87C3TlGPQtMqtM+KCwU6XtmkoEr7vbCQqA7HF9IY0ST+Q== integrity sha512-ekho7ziH0WEJvC4AxuJz+ewRTMskrebPcrKuBwcNzVDniYxx+dXOGcorNeIb9VEMO5vrKzwNYvhD271Ui2jnNw==
dependencies: dependencies:
"@prisma/engines" "5.7.0" "@prisma/engines" "5.7.1"
prop-types@^15.6.1, prop-types@^15.8.1: prop-types@^15.6.1, prop-types@^15.8.1:
version "15.8.1" version "15.8.1"
@@ -3897,9 +3897,9 @@ tailwindcss-animate@^1.0.7:
integrity sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA== integrity sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==
tailwindcss@^3.3.0: tailwindcss@^3.3.0:
version "3.3.6" version "3.4.0"
resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.3.6.tgz#4dd7986bf4902ad385d90d45fd4b2fa5fab26d5f" resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.4.0.tgz#045a9c474e6885ebd0436354e611a76af1c76839"
integrity sha512-AKjF7qbbLvLaPieoKeTjG1+FyNZT6KaJMJPFeQyLfIp7l82ggH1fbHJSsYIvnbTFQOlkh+gBYpyby5GT1LIdLw== integrity sha512-VigzymniH77knD1dryXbyxR+ePHihHociZbXnLZHUyzf2MMs2ZVqlUrZ3FvpXP8pno9JzmILt1sZPD19M3IxtA==
dependencies: dependencies:
"@alloc/quick-lru" "^5.2.0" "@alloc/quick-lru" "^5.2.0"
arg "^5.0.2" arg "^5.0.2"