DEV Community

Cover image for Chaca 2.2: generación de datos de prueba, ahora en el navegador
Hector Angel Gomez Robaina
Hector Angel Gomez Robaina

Posted on

Chaca 2.2: generación de datos de prueba, ahora en el navegador

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
Enter fullscreen mode Exit fullscreen mode

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 a transform. En Node, export sigue 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"
});
Enter fullscreen mode Exit fullscreen mode

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 KEY para ids generados, TEXT para strings y fechas ISO, REAL para floats.
  • MySQL: INT AUTO_INCREMENT PRIMARY KEY, VARCHAR(255)/TEXT, DATETIME(3) para fechas, constraints FOREIGN KEY a 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 */
  }
}
Enter fullscreen mode Exit fullscreen mode

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.pick e isArray con { min, max } nunca podían alcanzar max — 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 bigint invá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 como TIMESTAMP y los identificadores con palabras reservadas van entre comillas dobles.
  • Un campo ref en array que se queda sin valores ya no rellena el array con null — se detiene en las referencias que pudo resolver. Revisa tu código si dependías del relleno; como bonus, los isArray grandes con refs son notablemente más rápidos.
  • modules.date.past/soon/between ya no mutan el Date que les pasas.
  • modules.internet.email ya no produce pedro@yahoo.com.com, y modules.datatype.hexadecimal ya no incluye la letra G.
  • En CSV los valores ausentes son celdas vacías en lugar del string literal undefined, y YAML ya no descarta silenciosamente los valores bigint.

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
Enter fullscreen mode Exit fullscreen mode

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)