Saltearse al contenido

Bienvenido a Veloce-TS

Construye APIs modernas con decoradores de TypeScript, validación automática e inyección de dependencias

Decoradores TypeScript

API limpia y declarativa. Novedad en v0.4.0: @Summary, @HttpCode, @Timeout, @RateLimit.

Validación Automática

Validación Zod integrada con respuestas 422 estructuradas: field, received, expected.

Inyección de Dependencias

Contenedor DI potente. Integración de primera clase con Drizzle ORM via @InjectDB.

Documentación OpenAPI

Generación automática con auto-tagging, esquema Bearer y Swagger UI integrado.

Soporte Multi-Runtime

Funciona en Bun, Node.js, Deno y Cloudflare Workers. Adaptador Express incluido.

Testing Fluente

TestClient con aserciones encadenables: expectOk(), expectJson(), loginAs().

import { VeloceTS, Controller, Get, Post, Body, HttpCode, Summary, Tags, InjectDB, registerDrizzle } from 'veloce-ts';
import { z } from 'zod';
const ProductoSchema = z.object({
nombre: z.string().min(2),
precio: z.number().positive(),
});
@Controller('/productos')
class ProductoController {
@Get('/')
@Summary('Listar todos los productos')
@Tags('Productos')
async listar(@InjectDB() db: any) {
return await db.select().from(productosTable);
}
@Post('/')
@HttpCode(201)
@Summary('Crear un producto')
async crear(
@Body(ProductoSchema) producto: z.infer<typeof ProductoSchema>,
@InjectDB() db: any
) {
return await db.insert(productosTable).values(producto).returning();
}
}
const app = new VeloceTS({ title: 'API de Productos', version: '1.0.0', docs: true });
registerDrizzle(app, db);
app.include(ProductoController);
await app.compile();
app.listen(3000);
// → Swagger UI en http://localhost:3000/docs