Cloudflare Workers adapter for the @alt-javascript framework. Handles fetch(request, env, ctx) events with CDI-managed controllers and a CDI middleware pipeline. Returns Web Standards Response objects.
Part of the @alt-javascript monorepo.
npm install @alt-javascript/boot-cloudflare-worker// src/worker.js
import { Boot } from '@alt-javascript/boot';
import { Context, Singleton } from '@alt-javascript/cdi';
import { cloudflareWorkerStarter } from '@alt-javascript/boot-cloudflare-worker';
import { TodoService } from './services.js';
import { TodoController } from './controllers.js';
const context = new Context([
...cloudflareWorkerStarter(),
new Singleton(TodoService),
new Singleton(TodoController),
]);
const appCtxPromise = Boot.boot({ contexts: [context], run: false });
export default {
async fetch(request, env, ctx) {
const appCtx = await appCtxPromise;
return appCtx.get('cloudflareWorkerAdapter').fetch(request, env, ctx);
},
};class TodoController {
static __routes = [
{ method: 'GET', path: '/todos', handler: 'list' },
{ method: 'POST', path: '/todos', handler: 'create' },
{ method: 'GET', path: '/todos/:id', handler: 'get' },
];
constructor() { this.todoService = null; } // autowired
async list(request) { return this.todoService.findAll(); }
async create(request) { return this.todoService.create(request.body); }
async get(request) { return this.todoService.findById(request.params.id); }
}Handlers return a plain object (200 JSON), { statusCode, body } (explicit status), or null / undefined (204). The adapter wraps the result in a Web Standards Response.
Cloudflare env bindings (KV namespaces, D1 databases, secrets) are available on request.env inside controller handlers.
cloudflareWorkerStarter() registers three built-in middleware components:
| Component | Order | Behaviour |
|---|---|---|
RequestLoggerMiddleware |
10 | Logs [METHOD] /path → status (Xms) |
ErrorHandlerMiddleware |
20 | Converts thrown errors to JSON error responses |
NotFoundMiddleware |
30 | Returns 404 for unmatched routes |
Add custom middleware by declaring static __middleware = { order: N }:
class AuthMiddleware {
static __middleware = { order: 5 };
async handle(request, next) {
const token = request.headers.authorization?.replace('Bearer ', '');
if (!token) return { statusCode: 401, body: { error: 'Unauthorized' } };
return next({ ...request, user: { token } });
}
}| Key | Default | Description |
|---|---|---|
middleware.requestLogger.enabled |
true |
Enable request logging |
middleware.errorHandler.enabled |
true |
Enable error handler |
middleware.notFound.enabled |
true |
Enable 404 handler |
MIT