diff --git a/package.json b/package.json index b11d34ae3..c1661936c 100644 --- a/package.json +++ b/package.json @@ -2,6 +2,7 @@ "name": "sendou.ink", "version": "1.0.0", "workspaces": [ - "packages/server" + "packages/server", + "packages/frontend" ] } diff --git a/packages/frontend/next-env.d.ts b/packages/frontend/next-env.d.ts new file mode 100644 index 000000000..9bc3dd46b --- /dev/null +++ b/packages/frontend/next-env.d.ts @@ -0,0 +1,6 @@ +/// +/// +/// + +// NOTE: This file should not be edited +// see https://nextjs.org/docs/basic-features/typescript for more information. diff --git a/packages/frontend/package-lock.json b/packages/frontend/package-lock.json index e14cefd91..54b1cb9e9 100644 --- a/packages/frontend/package-lock.json +++ b/packages/frontend/package-lock.json @@ -5,9 +5,10 @@ "packages": { "": { "dependencies": { - "next": "latest", + "next": "^11.1.2", "react": "^17.0.2", - "react-dom": "^17.0.2" + "react-dom": "^17.0.2", + "swr": "^1.0.1" }, "devDependencies": { "@types/react": "^17.0.32", @@ -1616,6 +1617,14 @@ "node": ">= 0.6" } }, + "node_modules/dequal": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.2.tgz", + "integrity": "sha512-q9K8BlJVxK7hQYqa6XISGmBZbtQQWVXSrRrWreHC94rMt1QL/Impruc+7p2CYSYuVIUr+YCt6hjrs1kkdJRTug==", + "engines": { + "node": ">=6" + } + }, "node_modules/des.js": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", @@ -4199,6 +4208,17 @@ "node": ">=4" } }, + "node_modules/swr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/swr/-/swr-1.0.1.tgz", + "integrity": "sha512-EPQAxSjoD4IaM49rpRHK0q+/NzcwoT8c0/Ylu/u3/6mFj/CWnQVjNJ0MV2Iuw/U+EJSd2TX5czdAwKPYZIG0YA==", + "dependencies": { + "dequal": "2.0.2" + }, + "peerDependencies": { + "react": "^16.11.0 || ^17.0.0" + } + }, "node_modules/tailwindcss": { "version": "2.2.17", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-2.2.17.tgz", @@ -5932,6 +5952,11 @@ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" }, + "dequal": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.2.tgz", + "integrity": "sha512-q9K8BlJVxK7hQYqa6XISGmBZbtQQWVXSrRrWreHC94rMt1QL/Impruc+7p2CYSYuVIUr+YCt6hjrs1kkdJRTug==" + }, "des.js": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", @@ -7876,6 +7901,14 @@ "has-flag": "^3.0.0" } }, + "swr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/swr/-/swr-1.0.1.tgz", + "integrity": "sha512-EPQAxSjoD4IaM49rpRHK0q+/NzcwoT8c0/Ylu/u3/6mFj/CWnQVjNJ0MV2Iuw/U+EJSd2TX5czdAwKPYZIG0YA==", + "requires": { + "dequal": "2.0.2" + } + }, "tailwindcss": { "version": "2.2.17", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-2.2.17.tgz", diff --git a/packages/frontend/package.json b/packages/frontend/package.json index 223e6cf30..72b0c3e66 100644 --- a/packages/frontend/package.json +++ b/packages/frontend/package.json @@ -1,4 +1,5 @@ { + "name": "frontend.sendou.ink", "private": true, "scripts": { "dev": "next dev", @@ -8,7 +9,8 @@ "dependencies": { "next": "^11.1.2", "react": "^17.0.2", - "react-dom": "^17.0.2" + "react-dom": "^17.0.2", + "swr": "^1.0.1" }, "devDependencies": { "@types/react": "^17.0.32", diff --git a/packages/frontend/pages/_app.tsx b/packages/frontend/pages/_app.tsx index 91729cdec..e31c70065 100644 --- a/packages/frontend/pages/_app.tsx +++ b/packages/frontend/pages/_app.tsx @@ -1,8 +1,21 @@ +import type { AppProps } from "next/app"; +import { SWRConfig } from "swr"; import "tailwindcss/tailwind.css"; import "./_app.css"; -function MyApp({ Component, pageProps }) { - return ; +function MyApp({ Component, pageProps }: AppProps) { + return ( + + fetch(process.env.NEXT_PUBLIC_BACKEND_URL + resource, init).then( + (res) => res.json() + ), + }} + > + + + ); } export default MyApp; diff --git a/packages/frontend/pages/o/[organization]/[tournament].tsx b/packages/frontend/pages/o/[organization]/[tournament].tsx new file mode 100644 index 000000000..913a89938 --- /dev/null +++ b/packages/frontend/pages/o/[organization]/[tournament].tsx @@ -0,0 +1,11 @@ +import { useRouter } from "next/dist/client/router"; +import useSWR from "swr"; + +export default function TournamentPage() { + const router = useRouter(); + const { data, error } = useSWR( + `/tournaments/${router.query.organization}/${router.query.tournament}` + ); + console.log("error", error); + return
{JSON.stringify(data, null, 2)}
; +} diff --git a/packages/frontend/tsconfig.json b/packages/frontend/tsconfig.json new file mode 100644 index 000000000..77df39b37 --- /dev/null +++ b/packages/frontend/tsconfig.json @@ -0,0 +1,32 @@ +{ + "compilerOptions": { + "target": "es5", + "lib": [ + "dom", + "dom.iterable", + "esnext" + ], + "allowJs": true, + "skipLibCheck": true, + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true, + "forceConsistentCasingInFileNames": true, + "noEmit": true, + "esModuleInterop": true, + "module": "esnext", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "preserve" + }, + "include": [ + "next-env.d.ts", + "**/*.ts", + "**/*.tsx" + ], + "exclude": [ + "node_modules" + ] +} diff --git a/packages/server/package-lock.json b/packages/server/package-lock.json index e0e8436ef..db6278b00 100644 --- a/packages/server/package-lock.json +++ b/packages/server/package-lock.json @@ -16,6 +16,7 @@ "passport-discord": "^0.1.4" }, "devDependencies": { + "@tinyhttp/cors": "^2.0.0", "@types/node": "^16.11.4", "@types/passport": "^1.0.7", "@types/passport-discord": "^0.1.5", @@ -147,6 +148,18 @@ "node": ">=12.4.0" } }, + "node_modules/@tinyhttp/cors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tinyhttp/cors/-/cors-2.0.0.tgz", + "integrity": "sha512-IwQsPBnK+gRrhTsPA4FPOfbNzZZt8cVsOIMNFb6HzoScaiWcoLEogL0Bz/aBSm8KM13uieVXoVT6udMqhqUS2A==", + "dev": true, + "dependencies": { + "es-vary": "^0.1.1" + }, + "engines": { + "node": ">=12.4 || 14.x || >=16" + } + }, "node_modules/@tinyhttp/encode-url": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/@tinyhttp/encode-url/-/encode-url-2.0.3.tgz", @@ -1066,6 +1079,15 @@ "resolved": "https://registry.npmjs.org/@tinyhttp/cookie-signature/-/cookie-signature-2.0.2.tgz", "integrity": "sha512-lyIdDzLILp6T2fymJn9zKBgXwlZMIUiqMUIEd4x/ZGFNvnNs/zeYDBQFdAygBtv4Bgl5Zpf6tN+e6fkj6TlMYQ==" }, + "@tinyhttp/cors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tinyhttp/cors/-/cors-2.0.0.tgz", + "integrity": "sha512-IwQsPBnK+gRrhTsPA4FPOfbNzZZt8cVsOIMNFb6HzoScaiWcoLEogL0Bz/aBSm8KM13uieVXoVT6udMqhqUS2A==", + "dev": true, + "requires": { + "es-vary": "^0.1.1" + } + }, "@tinyhttp/encode-url": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/@tinyhttp/encode-url/-/encode-url-2.0.3.tgz", diff --git a/packages/server/package.json b/packages/server/package.json index d9c7a29fa..504b3b715 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -17,6 +17,7 @@ "passport-discord": "^0.1.4" }, "devDependencies": { + "@tinyhttp/cors": "^2.0.0", "@types/node": "^16.11.4", "@types/passport": "^1.0.7", "@types/passport-discord": "^0.1.5", diff --git a/packages/server/src/index.ts b/packages/server/src/index.ts index 679228fc2..90863197f 100644 --- a/packages/server/src/index.ts +++ b/packages/server/src/index.ts @@ -3,6 +3,7 @@ config(); import { App } from "@tinyhttp/app"; import { logger } from "@tinyhttp/logger"; +import { cors } from "@tinyhttp/cors"; import passport from "passport"; import { Strategy as DiscordStrategy } from "passport-discord"; import routes from "./routes/index"; @@ -53,6 +54,7 @@ passport.deserializeUser(async (id, done) => { app .use(logger()) + .use(cors()) // @ts-expect-error - Mismatch of types but seems to work fine .use(passport.initialize()) .get("/auth/discord", passport.authenticate("discord"))