From fe6ee3f1b47f7ccefe4a5c95330301778dbb38d2 Mon Sep 17 00:00:00 2001 From: Jeff See Date: Tue, 13 Jan 2026 15:07:06 -0800 Subject: [PATCH 1/4] Add koa --- framework-boilerplates/koa/README.md | 28 ++++++++++++++++++++++++ framework-boilerplates/koa/package.json | 12 ++++++++++ framework-boilerplates/koa/src/index.ts | 8 +++++++ framework-boilerplates/koa/tsconfig.json | 8 +++++++ 4 files changed, 56 insertions(+) create mode 100644 framework-boilerplates/koa/README.md create mode 100644 framework-boilerplates/koa/package.json create mode 100644 framework-boilerplates/koa/src/index.ts create mode 100644 framework-boilerplates/koa/tsconfig.json diff --git a/framework-boilerplates/koa/README.md b/framework-boilerplates/koa/README.md new file mode 100644 index 0000000000..07bf8799d5 --- /dev/null +++ b/framework-boilerplates/koa/README.md @@ -0,0 +1,28 @@ +Prerequisites: + +- [Vercel CLI](https://vercel.com/docs/cli) installed globally + +To develop locally: + +``` +npm install +vc dev +``` + +``` +open http://localhost:3000 +``` + +To build locally: + +``` +npm install +vc build +``` + +To deploy: + +``` +npm install +vc deploy +``` diff --git a/framework-boilerplates/koa/package.json b/framework-boilerplates/koa/package.json new file mode 100644 index 0000000000..7516742311 --- /dev/null +++ b/framework-boilerplates/koa/package.json @@ -0,0 +1,12 @@ +{ + "name": "koa", + "type": "module", + "dependencies": { + "koa": "3.1.1" + }, + "devDependencies": { + "@types/koa": "3.0.1", + "@types/node": "^20.11.17", + "typescript": "^5.8.3" + } +} diff --git a/framework-boilerplates/koa/src/index.ts b/framework-boilerplates/koa/src/index.ts new file mode 100644 index 0000000000..2ab31878ab --- /dev/null +++ b/framework-boilerplates/koa/src/index.ts @@ -0,0 +1,8 @@ +import Koa from 'koa' +const app = new Koa() + +app.use(async (ctx) => { + ctx.body = 'Hello World' +}) + +app.listen(3000) diff --git a/framework-boilerplates/koa/tsconfig.json b/framework-boilerplates/koa/tsconfig.json new file mode 100644 index 0000000000..0a9cce6ddd --- /dev/null +++ b/framework-boilerplates/koa/tsconfig.json @@ -0,0 +1,8 @@ +{ + "compilerOptions": { + "target": "ESNext", + "module": "NodeNext", + "skipLibCheck": true + }, + "exclude": ["node_modules"] +} From b0d8ce108aefe0d56954099834e9f2df4c5a7d5b Mon Sep 17 00:00:00 2001 From: Jeff See Date: Tue, 13 Jan 2026 16:13:52 -0800 Subject: [PATCH 2/4] Add koa router --- framework-boilerplates/koa/package.json | 1 + framework-boilerplates/koa/server.ts | 25 +++++++++++++++++++++++++ framework-boilerplates/koa/src/index.ts | 8 -------- 3 files changed, 26 insertions(+), 8 deletions(-) create mode 100644 framework-boilerplates/koa/server.ts delete mode 100644 framework-boilerplates/koa/src/index.ts diff --git a/framework-boilerplates/koa/package.json b/framework-boilerplates/koa/package.json index 7516742311..2c42799dfa 100644 --- a/framework-boilerplates/koa/package.json +++ b/framework-boilerplates/koa/package.json @@ -2,6 +2,7 @@ "name": "koa", "type": "module", "dependencies": { + "@koa/router": "^15.2.0", "koa": "3.1.1" }, "devDependencies": { diff --git a/framework-boilerplates/koa/server.ts b/framework-boilerplates/koa/server.ts new file mode 100644 index 0000000000..7981fe6194 --- /dev/null +++ b/framework-boilerplates/koa/server.ts @@ -0,0 +1,25 @@ +import Koa from 'koa' +import Router from '@koa/router' + +const app = new Koa() +const router = new Router() + +// Define routes using the router instance +router.get('/', (ctx) => { + ctx.body = { message: 'Hello from Koa!' } +}) + +router.get('/api/users/:id', (ctx) => { + ctx.body = { userId: ctx.params.id } +}) + +router.post('/api/data', async (ctx) => { + // Access request body via ctx.request.body (requires body parser middleware) + ctx.body = { status: 'success' } +}) + +// Apply router middleware to the app +app.use(router.routes()) +app.use(router.allowedMethods()) + +app.listen(3000) diff --git a/framework-boilerplates/koa/src/index.ts b/framework-boilerplates/koa/src/index.ts deleted file mode 100644 index 2ab31878ab..0000000000 --- a/framework-boilerplates/koa/src/index.ts +++ /dev/null @@ -1,8 +0,0 @@ -import Koa from 'koa' -const app = new Koa() - -app.use(async (ctx) => { - ctx.body = 'Hello World' -}) - -app.listen(3000) From f02bfb3cc8457d49738189437ee4bc1373fe0f80 Mon Sep 17 00:00:00 2001 From: Jeff See Date: Wed, 21 Jan 2026 10:54:30 -0800 Subject: [PATCH 3/4] Fix import --- framework-boilerplates/koa/package.json | 5 ++--- framework-boilerplates/koa/server.ts | 2 +- framework-boilerplates/koa/tsconfig.json | 8 -------- 3 files changed, 3 insertions(+), 12 deletions(-) delete mode 100644 framework-boilerplates/koa/tsconfig.json diff --git a/framework-boilerplates/koa/package.json b/framework-boilerplates/koa/package.json index 2c42799dfa..ace73c4eac 100644 --- a/framework-boilerplates/koa/package.json +++ b/framework-boilerplates/koa/package.json @@ -2,12 +2,11 @@ "name": "koa", "type": "module", "dependencies": { - "@koa/router": "^15.2.0", + "@koa/router": "15.2.0", "koa": "3.1.1" }, "devDependencies": { "@types/koa": "3.0.1", - "@types/node": "^20.11.17", - "typescript": "^5.8.3" + "@types/node": "24" } } diff --git a/framework-boilerplates/koa/server.ts b/framework-boilerplates/koa/server.ts index 7981fe6194..929504d970 100644 --- a/framework-boilerplates/koa/server.ts +++ b/framework-boilerplates/koa/server.ts @@ -1,5 +1,5 @@ import Koa from 'koa' -import Router from '@koa/router' +import { Router } from '@koa/router' const app = new Koa() const router = new Router() diff --git a/framework-boilerplates/koa/tsconfig.json b/framework-boilerplates/koa/tsconfig.json deleted file mode 100644 index 0a9cce6ddd..0000000000 --- a/framework-boilerplates/koa/tsconfig.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "compilerOptions": { - "target": "ESNext", - "module": "NodeNext", - "skipLibCheck": true - }, - "exclude": ["node_modules"] -} From 801d2ae78b03b1d9532fed539f087c4fe928f20f Mon Sep 17 00:00:00 2001 From: Jeff See Date: Wed, 21 Jan 2026 11:39:04 -0800 Subject: [PATCH 4/4] Simplify server --- framework-boilerplates/koa/server.ts | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/framework-boilerplates/koa/server.ts b/framework-boilerplates/koa/server.ts index 929504d970..6557a1af69 100644 --- a/framework-boilerplates/koa/server.ts +++ b/framework-boilerplates/koa/server.ts @@ -4,21 +4,10 @@ import { Router } from '@koa/router' const app = new Koa() const router = new Router() -// Define routes using the router instance router.get('/', (ctx) => { ctx.body = { message: 'Hello from Koa!' } }) -router.get('/api/users/:id', (ctx) => { - ctx.body = { userId: ctx.params.id } -}) - -router.post('/api/data', async (ctx) => { - // Access request body via ctx.request.body (requires body parser middleware) - ctx.body = { status: 'success' } -}) - -// Apply router middleware to the app app.use(router.routes()) app.use(router.allowedMethods())