From 71ca6d92304a7ee74e1658b103e86e9d8095f7c5 Mon Sep 17 00:00:00 2001 From: Jordan Eldredge Date: Wed, 4 Jun 2025 23:47:10 -0700 Subject: [PATCH] Get rid of custom server for next.js --- packages/skin-database/api/app.ts | 6 ---- packages/skin-database/app/graphql/route.ts | 23 ++++++++++++- packages/skin-database/knexfile.ts | 4 --- packages/skin-database/next.config.js | 2 +- packages/skin-database/package.json | 4 +-- packages/skin-database/server.ts | 37 --------------------- 6 files changed, 25 insertions(+), 51 deletions(-) delete mode 100644 packages/skin-database/server.ts diff --git a/packages/skin-database/api/app.ts b/packages/skin-database/api/app.ts index ee74971b..80c63a10 100644 --- a/packages/skin-database/api/app.ts +++ b/packages/skin-database/api/app.ts @@ -49,7 +49,6 @@ declare global { notify(action: ApiAction): void; log(message: string): void; logError(message: string): void; - startTime: number; session: { username: string | undefined; }; @@ -69,11 +68,6 @@ export function createApp({ eventHandler, logger, extraMiddleware }: Options) { app.use(Sentry.Handlers.requestHandler() as RequestHandler); } - app.use(function (req, res, next) { - req.startTime = Date.now(); - next(); - }); - // https://expressjs.com/en/guide/behind-proxies.html // This is needed in order to allow `cookieSession({secure: true})` cookies to be sent. app.set("trust proxy", "loopback"); diff --git a/packages/skin-database/app/graphql/route.ts b/packages/skin-database/app/graphql/route.ts index 1d6499fb..c29b6d2d 100644 --- a/packages/skin-database/app/graphql/route.ts +++ b/packages/skin-database/app/graphql/route.ts @@ -1,5 +1,9 @@ -import { createYoga } from "graphql-yoga"; +import { createYoga, YogaInitialContext } from "graphql-yoga"; import { getSchema } from "../../api/graphql/schema"; +import UserContext from "../../data/UserContext"; +import DiscordEventHandler from "../../api/DiscordEventHandler"; + +const handler = new DiscordEventHandler(); interface NextContext { params: Promise>; @@ -21,6 +25,23 @@ const { handleRequest } = createYoga({ methods: ["GET", "POST", "OPTIONS"], credentials: true, }, + context: (ctx: YogaInitialContext) => { + return { + ...ctx.request, + ctx: new UserContext(), + notify: (action) => handler.handle(action), + log(message: string) { + console.log(message, { + url: ctx.request.url, + }); + }, + error(message: string) { + console.error(message, { + url: ctx.request.url, + }); + }, + }; + }, }); export { diff --git a/packages/skin-database/knexfile.ts b/packages/skin-database/knexfile.ts index b62ce4f5..8cc965d8 100644 --- a/packages/skin-database/knexfile.ts +++ b/packages/skin-database/knexfile.ts @@ -26,10 +26,6 @@ const configs = { }, development: { ...production, - connection: { - ...production.connection, - filename: path.join(__dirname, "./skins-dev.sqlite3"), - }, }, production, }; diff --git a/packages/skin-database/next.config.js b/packages/skin-database/next.config.js index ff30523d..566bf193 100644 --- a/packages/skin-database/next.config.js +++ b/packages/skin-database/next.config.js @@ -1,6 +1,6 @@ /** @type {import('next').NextConfig} */ const nextConfig = { - serverExternalPackages: ["knex", "imagemin-optipng"], + serverExternalPackages: ["knex", "imagemin-optipng", "discord.js"], }; module.exports = nextConfig; diff --git a/packages/skin-database/package.json b/packages/skin-database/package.json index 8bb73e98..3be80459 100644 --- a/packages/skin-database/package.json +++ b/packages/skin-database/package.json @@ -55,9 +55,9 @@ "sync": "ts-node --transpile-only ./tasks/syncWithArchive.ts", "migrate": "knex migrate:latest", "grats": "grats", - "dev:next": "ts-node --transpile-only server.ts", + "dev:next": "next dev", "build:next": "next build", - "start:next": "NODE_ENV=production ts-node --transpile-only server.ts", + "start:next": "next start", "lint:next": "next lint" }, "prettier": {}, diff --git a/packages/skin-database/server.ts b/packages/skin-database/server.ts deleted file mode 100644 index e75b5ff9..00000000 --- a/packages/skin-database/server.ts +++ /dev/null @@ -1,37 +0,0 @@ -import dotenv from "dotenv"; - -dotenv.config(); -import { parse } from "url"; -import next from "next"; -import { createApp } from "./api/app"; -import DiscordEventHandler from "./api/DiscordEventHandler"; - -const handler = new DiscordEventHandler(); - -const port = parseInt(process.env.PORT || "3000", 10); -const dev = process.env.NODE_ENV !== "production"; -const app = next({ dev }); -const handle = app.getRequestHandler(); - -app.prepare().then(() => { - const expressApp = createApp({ - eventHandler: (action) => handler.handle(action), - logger: { - log: (message, context) => console.log(message, context), - logError: (message, context) => console.error(message, context), - }, - }); - - // If a route does not match in express, fallback to Next.js routes - expressApp.all("*", (req, res) => { - const parsedUrl = parse(req.url, true); - return handle(req, res, parsedUrl); - }); - - expressApp.listen(port); - console.log( - `> Server listening at http://localhost:${port} as ${ - dev ? "development" : process.env.NODE_ENV - }` - ); -});