Comenzando
¿Qué es QuickModel?
QuickModel es una librería de TypeScript que proporciona serialización y deserialización automática para tus modelos. Maneja tipos complejos como Date, BigInt, Map, Set, e incluso modelos anidados, convirtiéndolos sin problemas entre objetos JavaScript y JSON.
Características Clave
- Cero Configuración: Funciona desde el primer momento con decoradores de TypeScript (
@Quick,@QType). - Seguridad de Tipos: Soporte completo de TypeScript con verificación estricta de tipos e inferencia.
- Transformaciones Automáticas: 32 transformers integrados para
Date,BigInt,Map,Set,RegExp,Buffer,URL,TypedArray,WeakMap, y más. - Validación de Negocio: Decorador
@QRulecon 14 validadores integrados, validaciones asíncronas y comprobación de reglas por grupos. - Gestión de Estado: Seguimiento de cambios con
isDirty, actualizaciones parciales mediantecopy(partial)ypatch(), yreset()para restaurar el snapshot original. - Propiedades Calculadas y Alias:
@QComputedpara campos derivados y@QAliaspara alias de propiedades. - Generación de Schemas: Exportación a 13 formatos (
json,openapi,zod,mongo,typescript,graphql,ajv,prisma,valibot,yup,drizzle,typebox,effect-schema) mediantegetSchema(). - Integración con Formularios: Genera schemas de formulario con los decoradores
@QFieldy@QGroupy el métodogetFormSchema(). - Generación de Mocks: Generación integrada de datos de prueba (
User.mock().random(),User.mock().fromSchema()). - Scaffolding CLI: Genera clases de modelo, skeletons de transformer y boilerplate de integración con
npx quickmodel generate. - Servidor MCP: 24 herramientas públicas para asistentes de IA y 27 skills de workflow (prompts) para desarrollo asistido por IA.
- Seguridad: Protección integrada contra DoS, límites de tamaño de payload, guardas de recursión y prevención de XSS.
- Arquitectura SOLID: Diseño limpio y extensible — registra transformers personalizados sin modificar el código base.
¿Por Qué QuickModel?
Cuando trabajas con TypeScript y APIs, a menudo enfrentas desafíos como:
typescript
// ❌ Problema: Las fechas vienen como strings desde las APIs
const user = await fetch('/api/user').then((res) => res.json());
console.log(user.createdAt instanceof Date); // false! Es un string
// ❌ Problema: Sets y Maps no sobreviven a JSON.stringify
JSON.stringify({ tags: new Set(['a', 'b']) }); // {"tags":{}}
// ❌ Problema: La conversión manual es tediosa y propensa a errores
const user = {
...apiData,
createdAt: new Date(apiData.createdAt),
tags: new Set(apiData.tags),
metadata: new Map(Object.entries(apiData.metadata)),
};QuickModel resuelve esto elegantemente:
typescript
// ✅ Solución: Conversión automática
@Quick({
createdAt: Date,
tags: Set,
metadata: Map,
})
class User extends QModel<IUser> {
declare id: number;
declare name: string;
declare createdAt: Date;
declare tags: Set<string>;
declare metadata: Map<string, any>;
}
// 1. Instanciación (Auto-transformación)
const user = new User(apiData);
console.log(user.createdAt instanceof Date); // ¡true!
// 2. Serialización (Auto-formato)
const plain = user.$qSerialize();
// {"createdAt": "2024-01-01T...", "tags": ["a", "b"], ...}
// Usa user.$qToJSON() para obtener un string JSON, o JSON.stringify(user)Métodos de Instanciación
QuickModel proporciona formas flexibles de crear instancias de modelos:
- Constructor:
const user = new User(data);(Recomendado) - Factoría:
const user = User.create(data); - Desde JSON:
const user = User.fromJSON(jsonString);
Próximos Pasos
- Instalación - Instala QuickModel en tu proyecto
- Inicio Rápido - Construye tu primer modelo
- Ejemplos - Ve ejemplos del mundo real