From df47fa475095c357a0d076c96eb282b991e1d6a8 Mon Sep 17 00:00:00 2001 From: Jesse Wierzbinski Date: Thu, 7 Dec 2023 22:25:31 -1000 Subject: [PATCH] feat: Add working building and bundling system --- build.ts | 8 +++ bun.lockb | Bin 386144 -> 386592 bytes index.ts | 24 ++----- package.json | 3 +- routes.ts | 177 ++++++++++++++++++++++++++++++++++++++++++++++++++ tsconfig.json | 3 +- 6 files changed, 192 insertions(+), 23 deletions(-) create mode 100644 build.ts create mode 100644 routes.ts diff --git a/build.ts b/build.ts new file mode 100644 index 00000000..a7693da5 --- /dev/null +++ b/build.ts @@ -0,0 +1,8 @@ +await Bun.build({ + entrypoints: ["./index.ts"], + outdir: "./dist", + target: "bun", + splitting: true, + minify: false, + external: ["bullmq", "@prisma/client"], +}); diff --git a/bun.lockb b/bun.lockb index f1672c6e911c326075f9482449554846d560d6bc..fe46aaa71b9305723fc86e59570dc7df7c5a0c20 100755 GIT binary patch delta 77528 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 U6iI*n#xgzyJUM delta 76519 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 J<#=1v{{UJNRlWcK diff --git a/index.ts b/index.ts index f4583783..c0ee5c56 100644 --- a/index.ts +++ b/index.ts @@ -1,12 +1,9 @@ import { getConfig } from "@config"; import { jsonResponse } from "@response"; -import type { MatchedRoute } from "bun"; import chalk from "chalk"; import { appendFile } from "fs/promises"; import { matches } from "ip-matching"; -import type { AuthData } from "~database/entities/User"; import { getFromRequest } from "~database/entities/User"; -import type { APIRouteMeta } from "~types/api"; import { mkdir } from "fs/promises"; import { client } from "~database/datasource"; import type { PrismaClientInitializationError } from "@prisma/client/runtime/library"; @@ -14,15 +11,11 @@ import { HookTypes, Server } from "~plugins/types"; import { initializeRedisCache } from "@redis"; import { connectMeili } from "@meilisearch"; import routes from "~pages/routes"; +import { matchRoute } from "~routes"; const timeAtStart = performance.now(); const server = new Server(); -const router = new Bun.FileSystemRouter({ - style: "nextjs", - dir: process.cwd() + "/server/api", -}); - console.log(`${chalk.green(`>`)} ${chalk.bold("Starting Lysand...")}`); server.emit(HookTypes.PreServe); @@ -87,19 +80,10 @@ Bun.serve({ return jsonResponse({}); } - const matchedRoute = router.match(req); + const { file, matchedRoute } = matchRoute(req.url); if (matchedRoute) { - const file: { - meta: APIRouteMeta; - default: ( - req: Request, - matchedRoute: MatchedRoute, - auth: AuthData - ) => Response | Promise; - } = await import(matchedRoute.filePath); - - const meta = file.meta; + const meta = (await file).meta; // Check for allowed requests if (!meta.allowedMethods.includes(req.method as any)) { @@ -134,7 +118,7 @@ Bun.serve({ } } - return await file.default(req.clone(), matchedRoute, auth); + return await (await file).default(req.clone(), matchedRoute, auth); } else { // Check if path matches Vite routes if ( diff --git a/package.json b/package.json index f78da182..51722cb4 100644 --- a/package.json +++ b/package.json @@ -83,8 +83,6 @@ "dependencies": { "@aws-sdk/client-s3": "^3.461.0", "@prisma/client": "^5.6.0", - - "blurhash": "^2.0.5", "bullmq": "^4.14.4", "chalk": "^5.3.0", @@ -102,6 +100,7 @@ "linkifyjs": "^4.1.3", "marked": "^9.1.2", "meilisearch": "^0.36.0", + "next-route-matcher": "^1.0.1", "oauth4webapi": "^2.4.0", "prisma": "^5.6.0", "prisma-redis-middleware": "^4.8.0", diff --git a/routes.ts b/routes.ts new file mode 100644 index 00000000..834cf00b --- /dev/null +++ b/routes.ts @@ -0,0 +1,177 @@ +import type { MatchedRoute } from "bun"; +import type { AuthData } from "~database/entities/User"; +import type { APIRouteMeta } from "~types/api"; + +const serverPath = process.cwd() + "/server/api"; + +// Why are these routes specified manually instead of using Bun's FileSystemRouter? +// This is to allow for compilation of the routes, so that we can minify them and +// node_modules in production +export const rawRoutes = { + "/api/v1/accounts": import(serverPath + "/api/v1/accounts/index.ts"), + "/api/v1/accounts/familiar_followers": import( + serverPath + "/api/v1/accounts/familiar_followers/index.ts" + ), + "/api/v1/accounts/relationships": import( + serverPath + "/api/v1/accounts/relationships/index.ts" + ), + "/api/v1/accounts/search": import( + serverPath + "/api/v1/accounts/search/index.ts" + ), + "/api/v1/accounts/update_credentials": import( + serverPath + "/api/v1/accounts/update_credentials/index.ts" + ), + "/api/v1/accounts/verify_credentials": import( + serverPath + "/api/v1/accounts/verify_credentials/index.ts" + ), + "/api/v1/apps": import(serverPath + "/api/v1/apps/index.ts"), + "/api/v1/apps/verify_credentials": import( + serverPath + "/api/v1/apps/verify_credentials/index.ts" + ), + "/api/v1/blocks": import(serverPath + "/api/v1/blocks/index.ts"), + "/api/v1/custom_emojis": import( + serverPath + "/api/v1/custom_emojis/index.ts" + ), + "/api/v1/favourites": import(serverPath + "/api/v1/favourites/index.ts"), + "/api/v1/follow_requests": import( + serverPath + "/api/v1/follow_requests/index.ts" + ), + "/api/v1/instance": import(serverPath + "/api/v1/instance/index.ts"), + "/api/v1/media": import(serverPath + "/api/v1/media/index.ts"), + "/api/v1/mutes": import(serverPath + "/api/v1/mutes/index.ts"), + "/api/v1/notifications": import( + serverPath + "/api/v1/notifications/index.ts" + ), + "/api/v1/profile/avatar": import(serverPath + "/api/v1/profile/avatar.ts"), + "/api/v1/profile/header": import(serverPath + "/api/v1/profile/header.ts"), + "/api/v1/statuses": import(serverPath + "/api/v1/statuses/index.ts"), + "/api/v1/timelines/home": import(serverPath + "/api/v1/timelines/home.ts"), + "/api/v1/timelines/public": import( + serverPath + "/api/v1/timelines/public.ts" + ), + "/api/v2/media": import(serverPath + "/api/v2/media/index.ts"), + "/api/v2/search": import(serverPath + "/api/v2/search/index.ts"), + "/auth/login": import(serverPath + "/auth/login/index.ts"), + "/nodeinfo/2.0": import(serverPath + "/nodeinfo/2.0/index.ts"), + "/oauth/authorize-external": import( + serverPath + "/oauth/authorize-external/index.ts" + ), + "/oauth/providers": import(serverPath + "/oauth/providers/index.ts"), + "/oauth/token": import(serverPath + "/oauth/token/index.ts"), + "/api/v1/accounts/[id]": import( + serverPath + "/api/v1/accounts/[id]/index.ts" + ), + "/api/v1/accounts/[id]/block": import( + serverPath + "/api/v1/accounts/[id]/block.ts" + ), + "/api/v1/accounts/[id]/follow": import( + serverPath + "/api/v1/accounts/[id]/follow.ts" + ), + "/api/v1/accounts/[id]/followers": import( + serverPath + "/api/v1/accounts/[id]/followers.ts" + ), + "/api/v1/accounts/[id]/following": import( + serverPath + "/api/v1/accounts/[id]/following.ts" + ), + "/api/v1/accounts/[id]/mute": import( + serverPath + "/api/v1/accounts/[id]/mute.ts" + ), + "/api/v1/accounts/[id]/note": import( + serverPath + "/api/v1/accounts/[id]/note.ts" + ), + "/api/v1/accounts/[id]/pin": import( + serverPath + "/api/v1/accounts/[id]/pin.ts" + ), + "/api/v1/accounts/[id]/remove_from_followers": import( + serverPath + "/api/v1/accounts/[id]/remove_from_followers.ts" + ), + "/api/v1/accounts/[id]/statuses": import( + serverPath + "/api/v1/accounts/[id]/statuses.ts" + ), + "/api/v1/accounts/[id]/unblock": import( + serverPath + "/api/v1/accounts/[id]/unblock.ts" + ), + "/api/v1/accounts/[id]/unfollow": import( + serverPath + "/api/v1/accounts/[id]/unfollow.ts" + ), + "/api/v1/accounts/[id]/unmute": import( + serverPath + "/api/v1/accounts/[id]/unmute.ts" + ), + "/api/v1/accounts/[id]/unpin": import( + serverPath + "/api/v1/accounts/[id]/unpin.ts" + ), + "/api/v1/follow_requests/[account_id]/authorize": import( + serverPath + "/api/v1/follow_requests/[account_id]/authorize.ts" + ), + "/api/v1/follow_requests/[account_id]/reject": import( + serverPath + "/api/v1/follow_requests/[account_id]/reject.ts" + ), + "/api/v1/media/[id]": import(serverPath + "/api/v1/media/[id]/index.ts"), + "/api/v1/statuses/[id]": import( + serverPath + "/api/v1/statuses/[id]/index.ts" + ), + "/api/v1/statuses/[id]/context": import( + serverPath + "/api/v1/statuses/[id]/context.ts" + ), + "/api/v1/statuses/[id]/favourite": import( + serverPath + "/api/v1/statuses/[id]/favourite.ts" + ), + "/api/v1/statuses/[id]/favourited_by": import( + serverPath + "/api/v1/statuses/[id]/favourited_by.ts" + ), + "/api/v1/statuses/[id]/pin": import( + serverPath + "/api/v1/statuses/[id]/pin.ts" + ), + "/api/v1/statuses/[id]/reblog": import( + serverPath + "/api/v1/statuses/[id]/reblog.ts" + ), + "/api/v1/statuses/[id]/reblogged_by": import( + serverPath + "/api/v1/statuses/[id]/reblogged_by.ts" + ), + "/api/v1/statuses/[id]/source": import( + serverPath + "/api/v1/statuses/[id]/source.ts" + ), + "/api/v1/statuses/[id]/unfavourite": import( + serverPath + "/api/v1/statuses/[id]/unfavourite.ts" + ), + "/api/v1/statuses/[id]/unpin": import( + serverPath + "/api/v1/statuses/[id]/unpin.ts" + ), + "/api/v1/statuses/[id]/unreblog": import( + serverPath + "/api/v1/statuses/[id]/unreblog.ts" + ), + "/media/[id]": import(serverPath + "/media/[id]/index.ts"), + "/oauth/callback/[issuer]": import( + serverPath + "/oauth/callback/[issuer]/index.ts" + ), + "/object/[uuid]": import(serverPath + "/object/[uuid]/index.ts"), + "/users/[uuid]": import(serverPath + "/users/[uuid]/index.ts"), + "/users/[uuid]/inbox": import(serverPath + "/users/[uuid]/inbox/index.ts"), + "/users/[uuid]/outbox": import( + serverPath + "/users/[uuid]/outbox/index.ts" + ), +}; + +// Returns the route filesystem path when given a URL +export const routeMatcher = new Bun.FileSystemRouter({ + style: "nextjs", + dir: process.cwd() + "/server/api", +}); + +export const matchRoute = (url: string) => { + const route = routeMatcher.match(url); + if (!route) return { file: null, matchedRoute: null }; + + return { + // @ts-expect-error TypeScript parses this as a defined object instead of an arbitrarily editable route file + file: rawRoutes[route.name] as Promise<{ + meta: APIRouteMeta; + default: ( + req: Request, + matchedRoute: MatchedRoute, + auth: AuthData + ) => Response | Promise; + }>, + matchedRoute: route, + }; +}; diff --git a/tsconfig.json b/tsconfig.json index d68e047c..cd96e7f2 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -26,7 +26,8 @@ ], "paths": { "@*": ["./utils/*"], - "~*": ["./*"] + "~*": ["./*"], + "+*": ["./server/api/*"], }, }, "include": [