https://github.com/dallasg/tony
A lightweight, DI-powered, MediatR-style framework for building modular, message-driven apps on Cloudflare Workers.
https://github.com/dallasg/tony
clean-architecture cloudflare-workers dependency-injection edge framework message-bus modular typescript
Last synced: about 2 months ago
JSON representation
A lightweight, DI-powered, MediatR-style framework for building modular, message-driven apps on Cloudflare Workers.
- Host: GitHub
- URL: https://github.com/dallasg/tony
- Owner: dallasg
- License: apache-2.0
- Created: 2025-04-23T20:48:18.000Z (about 2 months ago)
- Default Branch: main
- Last Pushed: 2025-04-23T21:27:17.000Z (about 2 months ago)
- Last Synced: 2025-04-25T19:07:18.575Z (about 2 months ago)
- Topics: clean-architecture, cloudflare-workers, dependency-injection, edge, framework, message-bus, modular, typescript
- Language: TypeScript
- Homepage:
- Size: 95.7 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE.md
Awesome Lists containing this project
README
# Tony
> Your edge-native message guy.
**Tony** is a minimalist, message-driven, dependency-injected backend framework built to run on Cloudflare Workers. More coming soon.
## 🚀 Usage
Create a service
```TypeScript
// src/services/MathService.ts
export interface IMathService {
double(value: number): number;
}export class MathService implements IMathService {
double(value: number): number {
return value * 2;
}
}
```Create a handler
```TypeScript
// src/features/math/DoubleNumberHandler.ts
import type { IMathService } from '../../services/MathService';export class DoubleNumberHandler {
constructor(private math: IMathService) {}async handle(input: { value: number }): Promise<{ result: number }> {
return { result: this.math.double(input.value) };
}
}
```Create an endpoint
```TypeScript
// src/features/math/double.endpoint.tsimport type { Router } from '../../core/router';
import type { Bus } from '../../core/bus';export function registerDoubleEndpoint(router: Router) {
router.register('post', '/double', async (req, bus: Bus) => {
const body = await req.json();
return bus.send('DoubleNumber', body);
});
}
```Inject them
```TypeScript
// src/index.ts
container.addSingleton(IMathService, new MathService());
container.addSingleton('DoubleNumberHandler', new DoubleNumberHandler(container.resolve(IMathService)));
bus.register('DoubleNumber', 'DoubleNumberHandler');registerDoubleEndpoint(router);
```Use it
```bash
npx wrangler dev
http POST http://localhost:8787/greet name=Tony
```