From 84f6622e6366e89f1628a805225ad8f4ffb061cc Mon Sep 17 00:00:00 2001 From: Fergal Moran Date: Sun, 29 Sep 2024 21:23:03 +0100 Subject: [PATCH] Fix build errors --- .ncurc.json | 11 ++- bun.lockb | Bin 404853 -> 404854 bytes components.json | 5 +- package.json | 18 ++-- src/app/api/upload/post/route.test.ts | 101 --------------------- src/components/magicui/bento-grid.tsx | 79 ---------------- src/components/magicui/blur-in.tsx | 39 -------- src/components/pages/post/post-actions.tsx | 4 +- src/components/trending-posts.tsx | 13 +-- src/components/widgets/vote-count.tsx | 1 + src/middleware.ts | 66 +++++++------- 11 files changed, 63 insertions(+), 274 deletions(-) delete mode 100644 src/app/api/upload/post/route.test.ts delete mode 100644 src/components/magicui/bento-grid.tsx delete mode 100644 src/components/magicui/blur-in.tsx diff --git a/.ncurc.json b/.ncurc.json index da849a4..e5e676e 100644 --- a/.ncurc.json +++ b/.ncurc.json @@ -1,3 +1,10 @@ { - "reject": ["eslint"] - } \ No newline at end of file + "reject": [ + "eslint", + "typescript", + "@types/eslint", + "@typescript-eslint/eslint-plugin", + "@typescript-eslint/parser", + "eslint-config-next" + ] +} diff --git a/bun.lockb b/bun.lockb index 0b87a8e1f5482b44ad03c8fe794d4c344976e02c..159896223d73d8e0c7c113e3f4a34b9f804d3b55 100755 GIT binary patch delta 10163 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 delta 10161 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 KszZa2hW`V{**!r3 diff --git a/components.json b/components.json index 97caaf1..01a0b42 100644 --- a/components.json +++ b/components.json @@ -13,7 +13,6 @@ "aliases": { "components": "@/components", "utils": "@/lib/utils", - "ui": "@/components/ui", - "magicui": "@/components/magicui" + "ui": "@/components/ui" } -} \ No newline at end of file +} diff --git a/package.json b/package.json index 35e984f..d027285 100644 --- a/package.json +++ b/package.json @@ -100,21 +100,25 @@ "zod": "^3.23.8" }, "devDependencies": { + "@types/eslint": "^8.56.10", + + "@typescript-eslint/eslint-plugin": "^8.1.0", + "@typescript-eslint/parser": "^8.1.0", + "eslint": "^8.57.0", + "eslint-config-next": "^14.2.4", + "eslint-plugin-drizzle": "^0.2.3", + + + "@faker-js/faker": "^9.0.3", "@testing-library/jest-dom": "^6.5.0", "@testing-library/react": "^16.0.1", "@types/bun": "latest", - "@types/eslint": "^9.6.1", "@types/jest": "^29.5.13", "@types/node": "^22.7.4", "@types/react": "^18.3.10", "@types/react-dom": "^18.3.0", - "@typescript-eslint/eslint-plugin": "^8.7.0", - "@typescript-eslint/parser": "^8.7.0", "drizzle-kit": "^0.24.2", - "eslint": "8.57.0", - "eslint-config-next": "^14.2.13", - "eslint-plugin-drizzle": "^0.2.3", "jest": "^29.7.0", "postcss": "^8.4.47", "prettier": "^3.3.3", @@ -122,7 +126,7 @@ "tailwindcss": "^3.4.13", "ts-jest": "^29.2.5", "ts-node": "^10.9.2", - "typescript": "^5.6.2" + "typescript": "^5.5.3" }, "ct3aMetadata": { "initVersion": "7.37.0" diff --git a/src/app/api/upload/post/route.test.ts b/src/app/api/upload/post/route.test.ts deleted file mode 100644 index 5c8b990..0000000 --- a/src/app/api/upload/post/route.test.ts +++ /dev/null @@ -1,101 +0,0 @@ -import { POST } from "./route"; -import { NextRequest, NextResponse } from "next/server"; -import { StatusCodes } from "http-status-codes"; -import fs from "fs"; -import path from "path"; -import { env } from "@/env"; -const mockGetServerSession = require("next-auth").getServerSession; - -jest.mock("next-auth", () => ({ - getServerSession: jest.fn(), -})); - -jest.mock("fs"); -jest.mock("path"); - -describe("POST /api/upload/post", () => { - beforeEach(() => { - jest.clearAllMocks(); - }); - - it("should return UNAUTHORIZED if session is not found", async () => { - mockGetServerSession.mockResolvedValue(null); - - const request = new NextRequest( - new URL(`${env.NEXT_PUBLIC_SITE_URL}/api/upload/post`), - ); - const response = await POST(request); - - expect(response).toEqual( - NextResponse.json({ - error: "Unauthorized", - status: StatusCodes.UNAUTHORIZED, - }), - ); - }); - - it("should return BAD_REQUEST if id is not provided", async () => { - mockGetServerSession.mockResolvedValue({ user: { name: "test" } }); - - const request = new NextRequest( - new URL(`${env.NEXT_PUBLIC_SITE_URL}/api/upload/post`), - ); - const response = await POST(request); - - expect(response).toEqual( - NextResponse.json({ - error: "No post id in query", - status: StatusCodes.BAD_REQUEST, - }), - ); - }); - - it("should return BAD_REQUEST if file is not found in form data", async () => { - mockGetServerSession.mockResolvedValue({ user: { name: "test" } }); - - const url = new URL(`${env.NEXT_PUBLIC_SITE_URL}/api/upload/post?id=123`); - const request = new NextRequest(url); - request.formData = jest.fn().mockResolvedValue(new FormData()); - - const response = await POST(request); - - expect(response).toEqual( - NextResponse.json({ - error: "Cannot find file in form data", - status: StatusCodes.BAD_REQUEST, - }), - ); - }); - - it("should save the file and return success response", async () => { - mockGetServerSession.mockResolvedValue({ user: { name: "test" } }); - - const url = new URL(`${env.NEXT_PUBLIC_SITE_URL}/api/upload/post?id=123`); - const request = new NextRequest(url); - - const file = new Blob(["file content"], { type: "image/png" }); - const formData = new FormData(); - formData.append("image", file, "test.png"); - - request.formData = jest.fn().mockResolvedValue(formData); - - const buffer = Buffer.from(await file.arrayBuffer()); - const filePath = "123.png"; - - jest.spyOn(fs, 'writeFileSync').mockImplementation(() => {}); - jest.spyOn(path, 'resolve').mockReturnValue(`/mocked/path/${filePath}`); - - const response = await POST(request); - - expect(fs.writeFileSync).toHaveBeenCalledWith( - `/mocked/path/${filePath}`, - buffer, - ); - expect(response).toEqual( - NextResponse.json({ - success: true, - url: env.NEXT_PUBLIC_SITE_URL + `/i/${filePath}`, - }), - ); - }); -}); diff --git a/src/components/magicui/bento-grid.tsx b/src/components/magicui/bento-grid.tsx deleted file mode 100644 index 342a957..0000000 --- a/src/components/magicui/bento-grid.tsx +++ /dev/null @@ -1,79 +0,0 @@ -import { ReactNode } from "react"; -import { ArrowRightIcon } from "@radix-ui/react-icons"; - -import { cn } from "@/lib/utils"; -import { Button } from "@/components/ui/button"; - -const BentoGrid = ({ - children, - className, -}: { - children: ReactNode; - className?: string; -}) => { - return ( -
- {children} -
- ); -}; - -const BentoCard = ({ - name, - className, - background, - Icon, - description, - href, - cta, -}: { - name: string; - className: string; - background: ReactNode; - Icon: any; - description: string; - href: string; - cta: string; -}) => ( -
-
{background}
-
- -

- {name} -

-

{description}

-
- - -
-
-); - -export { BentoCard, BentoGrid }; diff --git a/src/components/magicui/blur-in.tsx b/src/components/magicui/blur-in.tsx deleted file mode 100644 index 8014883..0000000 --- a/src/components/magicui/blur-in.tsx +++ /dev/null @@ -1,39 +0,0 @@ -"use client"; - -import { motion } from "framer-motion"; - -import { cn } from "@/lib/utils"; - -interface BlurIntProps { - word: string; - className?: string; - variant?: { - hidden: { filter: string; opacity: number }; - visible: { filter: string; opacity: number }; - }; - duration?: number; -} -const BlurIn = ({ word, className, variant, duration = 1 }: BlurIntProps) => { - const defaultVariants = { - hidden: { filter: "blur(10px)", opacity: 0 }, - visible: { filter: "blur(0px)", opacity: 1 }, - }; - const combinedVariants = variant || defaultVariants; - - return ( - - {word} - - ); -}; - -export default BlurIn; diff --git a/src/components/pages/post/post-actions.tsx b/src/components/pages/post/post-actions.tsx index a06b20a..89492aa 100644 --- a/src/components/pages/post/post-actions.tsx +++ b/src/components/pages/post/post-actions.tsx @@ -27,7 +27,7 @@ const PostActions: React.FC = ({ post }) => { title="Downvote" action={async () => { await vote.mutateAsync({ slug: post.slug, up: false }); - voteCount.refetch(); + await voteCount.refetch(); }} icon={} /> @@ -35,7 +35,7 @@ const PostActions: React.FC = ({ post }) => { title="Favourite" action={async () => { await vote.mutateAsync({ slug: post.slug, up: false }); - voteCount.refetch(); + await voteCount.refetch(); }} icon={} /> diff --git a/src/components/trending-posts.tsx b/src/components/trending-posts.tsx index efa0b06..f1d1694 100644 --- a/src/components/trending-posts.tsx +++ b/src/components/trending-posts.tsx @@ -1,8 +1,7 @@ import { api } from "@/trpc/server"; -import BlurIn from "./magicui/blur-in"; import Link from "next/link"; import { Icons } from "./icons"; -import { Post } from "@/lib/models/post"; +import { type Post } from "@/lib/models/post"; import { Card, CardContent, @@ -12,14 +11,15 @@ import { } from "@/components/ui/card"; import { Button } from "./ui/button"; import VoteCount from "./widgets/vote-count"; +import Loading from "@/components/widgets/loading"; export const TrendingPosts: React.FC = async () => { const trendingPosts = await api.post.getTrending(); return trendingPosts.length !== 0 ? (
{trendingPosts.map((post: Post) => ( -
- +
+ { ))}
) : ( - + ); }; diff --git a/src/components/widgets/vote-count.tsx b/src/components/widgets/vote-count.tsx index d5bd1f3..1ff3d36 100644 --- a/src/components/widgets/vote-count.tsx +++ b/src/components/widgets/vote-count.tsx @@ -14,6 +14,7 @@ const VoteCount: React.FC = ({ post }) => { return ( {voteCount.data ? ( + // eslint-disable-next-line @typescript-eslint/no-base-to-string, @typescript-eslint/restrict-template-expressions `${voteCount.data.voteCount} votes` ) : ( diff --git a/src/middleware.ts b/src/middleware.ts index 4fc1e81..22eb901 100644 --- a/src/middleware.ts +++ b/src/middleware.ts @@ -1,38 +1,38 @@ -import { NextRequest, NextResponse, URLPattern } from "next/server"; +// import { type NextRequest, NextResponse, URLPattern } from "next/server"; export { default } from "next-auth/middleware"; -export const config = { - matcher: ["/upload(.*)", "/i/:id(.*)"], -}; -const PATTERNS: [ - URLPattern, - ({ pathname }: { pathname: { groups: any } }) => any, -][] = [ - [ - new URLPattern({ pathname: "/i/:id" }), - ({ pathname }: { pathname: { groups: any } }) => pathname.groups, - ], -]; +// export const config = { +// matcher: ["/upload(.*)", "/i/:id(.*)"], +// }; +// const PATTERNS: [ +// URLPattern, +// ({ pathname }: { pathname: { groups: any } }) => any, +// ][] = [ +// [ +// new URLPattern({ pathname: "/i/:id" }), +// ({ pathname }: { pathname: { groups: any } }) => pathname.groups, +// ], +// ]; -const params = (url: string) => { - const input = url.split("?")[0]; - let result = {}; +// const params = (url: string) => { +// const input = url.split("?")[0]; +// let result = {}; - for (const [pattern, handler] of PATTERNS) { - if (!pattern) return; - const patternResult = pattern.exec(input); - if (patternResult !== null && "pathname" in patternResult) { - result = handler(patternResult); - break; - } - } - return result || {}; -}; -export async function middleware(request: NextRequest, response: NextResponse) { - const { id } = params(request.url) as { id?: string }; - if (!id) { - return NextResponse.next(); - } - return NextResponse.rewrite(new URL(`/uploads/${id}`, request.url)); -} +// for (const [pattern, handler] of PATTERNS) { +// if (!pattern) return; +// const patternResult = pattern.exec(input); +// if (patternResult !== null && "pathname" in patternResult) { +// result = handler(patternResult); +// break; +// } +// } +// return result || {}; +// }; +// export async function middleware(request: NextRequest, response: NextResponse) { +// const { id } = params(request.url) as { id?: string }; +// if (!id) { +// return NextResponse.next(); +// } +// return NextResponse.rewrite(new URL(`/uploads/${id}`, request.url)); +// }