From ef5c6f97e0216f930d4e5a0ad4a202f80bce0cbb Mon Sep 17 00:00:00 2001 From: Bilal Godil Date: Mon, 13 Jul 2026 18:08:15 -0700 Subject: [PATCH] Simplify Vercel Elysia routing --- apps/backend/api/config-github-apply.ts | 8 ---- apps/backend/api/config-github-cancel.ts | 8 ---- apps/backend/api/config-github-commit.ts | 8 ---- apps/backend/api/dist-vercel.d.ts | 4 -- apps/backend/api/index.ts | 8 ---- apps/backend/src/dist-vercel.d.ts | 6 +++ apps/backend/src/index.ts | 7 ++-- apps/backend/src/server/vercel-config.test.ts | 42 +++++-------------- apps/backend/vercel.json | 8 +--- 9 files changed, 21 insertions(+), 78 deletions(-) delete mode 100644 apps/backend/api/config-github-apply.ts delete mode 100644 apps/backend/api/config-github-cancel.ts delete mode 100644 apps/backend/api/config-github-commit.ts delete mode 100644 apps/backend/api/dist-vercel.d.ts delete mode 100644 apps/backend/api/index.ts create mode 100644 apps/backend/src/dist-vercel.d.ts diff --git a/apps/backend/api/config-github-apply.ts b/apps/backend/api/config-github-apply.ts deleted file mode 100644 index 59deed829..000000000 --- a/apps/backend/api/config-github-apply.ts +++ /dev/null @@ -1,8 +0,0 @@ -import app from "../dist/vercel.mjs"; - -export const config = { - runtime: "nodejs", - maxDuration: 800, -}; - -export default app; diff --git a/apps/backend/api/config-github-cancel.ts b/apps/backend/api/config-github-cancel.ts deleted file mode 100644 index 8059677c1..000000000 --- a/apps/backend/api/config-github-cancel.ts +++ /dev/null @@ -1,8 +0,0 @@ -import app from "../dist/vercel.mjs"; - -export const config = { - runtime: "nodejs", - maxDuration: 60, -}; - -export default app; diff --git a/apps/backend/api/config-github-commit.ts b/apps/backend/api/config-github-commit.ts deleted file mode 100644 index 74b64ab32..000000000 --- a/apps/backend/api/config-github-commit.ts +++ /dev/null @@ -1,8 +0,0 @@ -import app from "../dist/vercel.mjs"; - -export const config = { - runtime: "nodejs", - maxDuration: 120, -}; - -export default app; diff --git a/apps/backend/api/dist-vercel.d.ts b/apps/backend/api/dist-vercel.d.ts deleted file mode 100644 index e697c91ec..000000000 --- a/apps/backend/api/dist-vercel.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -declare module "*/dist/vercel.mjs" { - const app: typeof import("../src/server/vercel").default; - export default app; -} diff --git a/apps/backend/api/index.ts b/apps/backend/api/index.ts deleted file mode 100644 index 993b6a9c7..000000000 --- a/apps/backend/api/index.ts +++ /dev/null @@ -1,8 +0,0 @@ -import app from "../dist/vercel.mjs"; - -// Preserve the project-level duration inherited by routes without a pre-Elysia override. -export const config = { - runtime: "nodejs", -}; - -export default app; diff --git a/apps/backend/src/dist-vercel.d.ts b/apps/backend/src/dist-vercel.d.ts new file mode 100644 index 000000000..7931c3144 --- /dev/null +++ b/apps/backend/src/dist-vercel.d.ts @@ -0,0 +1,6 @@ +declare module "*/dist/vercel.mjs" { + import type { Elysia } from "elysia"; + + const app: Elysia; + export default app; +} diff --git a/apps/backend/src/index.ts b/apps/backend/src/index.ts index 1bcbe098e..c7acd08c1 100644 --- a/apps/backend/src/index.ts +++ b/apps/backend/src/index.ts @@ -1,6 +1,5 @@ -import "@/instrument"; -import "@/polyfills"; -import { app } from "./server/app"; -import "./server/env-expand"; +// Vercel detects native Elysia entrypoints by a direct framework import. +import "elysia"; +import app from "../dist/vercel.mjs"; export default app; diff --git a/apps/backend/src/server/vercel-config.test.ts b/apps/backend/src/server/vercel-config.test.ts index 3e2b660e2..5cddf06ea 100644 --- a/apps/backend/src/server/vercel-config.test.ts +++ b/apps/backend/src/server/vercel-config.test.ts @@ -1,39 +1,19 @@ import { readFile } from "node:fs/promises"; import { describe, expect, it } from "vitest"; -describe("Vercel function durations", () => { - it("preserves inherited and route-specific limits from the Next.js deployment", async () => { - const [vercelJson, defaultEntry, applyEntry, commitEntry, cancelEntry] = await Promise.all([ +describe("Vercel deployment configuration", () => { + it("uses native Elysia routing and inherits the project function duration", async () => { + const [vercelJson, entry] = await Promise.all([ readFile(new URL("../../vercel.json", import.meta.url), "utf8"), - readFile(new URL("../../api/index.ts", import.meta.url), "utf8"), - readFile(new URL("../../api/config-github-apply.ts", import.meta.url), "utf8"), - readFile(new URL("../../api/config-github-commit.ts", import.meta.url), "utf8"), - readFile(new URL("../../api/config-github-cancel.ts", import.meta.url), "utf8"), + readFile(new URL("../index.ts", import.meta.url), "utf8"), ]); - expect(JSON.parse(vercelJson)).toMatchObject({ - rewrites: [ - { - source: "/api/:version/internal/config/github/apply", - destination: "/api/config-github-apply", - }, - { - source: "/api/:version/internal/config/github/commit", - destination: "/api/config-github-commit", - }, - { - source: "/api/:version/internal/config/github/cancel", - destination: "/api/config-github-cancel", - }, - { - source: "/(.*)", - destination: "/api", - }, - ], - }); - expect(defaultEntry).not.toContain("maxDuration"); - expect(applyEntry).toContain("maxDuration: 800"); - expect(commitEntry).toContain("maxDuration: 120"); - expect(cancelEntry).toContain("maxDuration: 60"); + const config = JSON.parse(vercelJson); + expect(config.framework).toBe("elysia"); + expect(config).not.toHaveProperty("rewrites"); + expect(config).not.toHaveProperty("functions"); + expect(entry).toContain('import "elysia"'); + expect(entry).toContain('from "../dist/vercel.mjs"'); + expect(entry).not.toContain("maxDuration"); }); }); diff --git a/apps/backend/vercel.json b/apps/backend/vercel.json index f12b1888e..6aa38b831 100644 --- a/apps/backend/vercel.json +++ b/apps/backend/vercel.json @@ -1,12 +1,6 @@ { "$schema": "https://openapi.vercel.sh/vercel.json", - "framework": null, - "rewrites": [ - { "source": "/api/:version/internal/config/github/apply", "destination": "/api/config-github-apply" }, - { "source": "/api/:version/internal/config/github/commit", "destination": "/api/config-github-commit" }, - { "source": "/api/:version/internal/config/github/cancel", "destination": "/api/config-github-cancel" }, - { "source": "/(.*)", "destination": "/api" } - ], + "framework": "elysia", "crons": [ { "path": "/api/latest/internal/email-queue-step",