Decoradores TypeScript
API limpia y declarativa. Novedad en v0.4.0: @Summary, @HttpCode, @Timeout, @RateLimit.
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