Skip to content

Latest commit

 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 

README.md

@alt-javascript/boot-cloudflare-worker

Language npm version License: MIT CI

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.

Install

npm install @alt-javascript/boot-cloudflare-worker

Usage

// 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);
  },
};

Controller Convention

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.

Middleware Pipeline

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 } });
  }
}

Configuration

Key Default Description
middleware.requestLogger.enabled true Enable request logging
middleware.errorHandler.enabled true Enable error handler
middleware.notFound.enabled true Enable 404 handler

License

MIT