Chaca es una librería TypeScript para generar datos de prueba realistas y relacionales — esquemas que se referencian entre sí, exportables a JSON, CSV, SQL, Java, Python y más. Hasta ahora solo funcionaba en Node. La versión 2.2 cambia eso.
🌐 Chaca ahora es isomórfica
Puedes instalar y usar Chaca en cualquier aplicación de navegador — React, Vue, Svelte, JS vanilla. Sin configuración: tu bundler resuelve automáticamente el build seguro para navegador a través del mapa de exports del paquete. El paquete ahora incluye builds en ESM y CommonJS, cada uno con sus propias definiciones de tipos.
La pieza clave es transform, que serializa tus datos a cualquier formato soportado completamente en memoria — sin tocar el sistema de archivos. Eso lo convierte en la forma natural de obtener el contenido de un archivo en el navegador, por ejemplo para lanzar una descarga:
import { chaca, modules } from "chaca";
const schema = chaca.schema({
id: chaca.key(() => modules.id.uuid()),
name: () => modules.person.firstName(),
});
const [file] = await schema.transform(50, {
filename: "users",
format: "json",
});
// file.filename -> "users.json"
// file.content -> string serializado, listo para descargar o mostrar
transform soporta todos los formatos: json, csv, yaml, postgresql, sqlite, mysql, java, python, typescript y javascript.
Nota:
export(que escribe archivos en disco) no está disponible en el build de navegador y lanza un error descriptivo que te dirige atransform. En Node,exportsigue funcionando exactamente igual que antes.
🗄️ Nuevos formatos de exportación: SQLite y MySQL
Dos nuevos destinos SQL se suman a postgresql, compartiendo todas sus opciones (keys, uniques, nulls, refs, generateIds, declarationOnly, ...):
await dataset.export({
filename: "data",
location: "./data",
format: "sqlite", // o "mysql"
});
Ambos están disponibles también desde la CLI (chaca sqlite, chaca mysql) y generan scripts con tipos nativos de cada motor:
-
SQLite:
PRAGMA foreign_keys = ON,INTEGER PRIMARY KEYpara ids generados,TEXTpara strings y fechas ISO,REALpara floats. -
MySQL:
INT AUTO_INCREMENT PRIMARY KEY,VARCHAR(255)/TEXT,DATETIME(3)para fechas, constraintsFOREIGN KEYa nivel de tabla, y palabras reservadas protegidas con backticks.
🧯 Un único namespace Errors
Todas las excepciones de chaca están ahora agrupadas bajo un solo namespace, lo que hace el manejo de errores mucho más fácil de descubrir:
import { Errors } from "chaca";
try {
await schema.export(/* ... */);
} catch (e) {
if (e instanceof Errors.TryRefANoKeyFieldError) {
/* manejar el error específico */
}
if (e instanceof Errors.ChacaError) {
/* catch-all para cualquier error de chaca */
}
}
Los exports planos existentes siguen funcionando, y tres clases de error anunciadas en la 2.0.0 pero que nunca se llegaron a exportar por fin son accesibles.
🪛 Más de 40 fixes
Esta versión cierra una larga lista de bugs. Algunos destacados:
-
chaca.pickeisArraycon{ min, max }nunca podían alcanzarmax— el límite superior ahora es inclusivo, como indica la documentación. - El exportador de Java generaba código que no compilaba (puntos y coma faltantes, literales float incorrectos, tipos
bigintinválidos, identificadores con palabras reservadas). Ahora compila. - Export a PostgreSQL: las comillas simples en strings se escapan correctamente, las columnas donde todo es null reciben tipo
TEXT, las fechas conservan la hora comoTIMESTAMPy los identificadores con palabras reservadas van entre comillas dobles. - Un campo
refen array que se queda sin valores ya no rellena el array connull— se detiene en las referencias que pudo resolver. Revisa tu código si dependías del relleno; como bonus, losisArraygrandes con refs son notablemente más rápidos. -
modules.date.past/soon/betweenya no mutan elDateque les pasas. -
modules.internet.emailya no producepedro@yahoo.com.com, ymodules.datatype.hexadecimalya no incluye la letraG. - En CSV los valores ausentes son celdas vacías en lugar del string literal
undefined, y YAML ya no descarta silenciosamente los valoresbigint.
La lista completa — incluidos algunos pequeños cambios de comportamiento que conviene revisar (ethereumAddress ahora incluye el prefijo 0x, la salida CSS de color.rgb ya no lleva el prefijo hexadecimal, y se corrigieron los typos Oseania/Antartica en continent) — está en el changelog.
Pruébalo
npm install chaca
Documentación y guías en chaca.app. Si construyes algo con ella — o encuentras un bug — los issues y PRs son bienvenidos en GitHub.
Top comments (0)