Spraxium logoSpraxium

Generar archivos

El comando spraxium generate hace scaffolding de archivos alineados con el framework desde 19 schematics. Aprende cómo funcionan la normalización de nombres, la selección de módulo objetivo y el registro automático.

Qué hace

spraxium generate crea un archivo fuente nuevo desde un schematic con nombre y lo conecta en el módulo correcto. El comando acepta el nombre del schematic y el nombre del archivo como argumentos; si falta alguno, aparece un selector interactivo. Todos los nombres de clase generados se normalizan a PascalCase y los nombres de archivo a kebab-case, así que no tienes que preocuparte por convenciones de nombres a mano.

terminal
spraxium generate [schematic] [name]
# alias:
spraxium g [schematic] [name]

Este comando aporta más valor cuando quieres velocidad sin perder consistencia del proyecto. En vez de crear un archivo manualmente, elegir carpeta, añadir decorators y luego recordar registrarlo en un módulo, dejas que el CLI produzca un punto de partida alineado con el framework en un solo paso.

Cuándo usar generate en lugar de escribir archivos a mano

Usa spraxium generate cuando el archivo que necesitas ya coincide con un patrón conocido del framework: servicios, listeners, handlers, guards, tareas, comandos y scaffolds de módulo. Es especialmente útil al inicio de un proyecto, cuando son frecuentes la deriva de nombres y los registros olvidados.

Seguir escribiendo archivos de forma manual tiene sentido cuando estás construyendo algo intencionalmente personalizado, refactorizando a fondo un módulo existente o creando un tipo de archivo que no encaja con un schematic soportado. El CLI está para eliminar configuración repetitiva, no para reemplazar criterio técnico.

Cómo funciona la generación

Resolver schematic

El CLI lee el argumento del schematic o, si falta, muestra una lista interactiva de los 19 schematics disponibles. Se aceptan aliases en cualquier lugar donde se acepte el nombre completo, así que g sc ping equivale a g slash-command ping.

Normalizar el nombre

El nombre proporcionado se divide por guiones y guiones bajos, se normaliza a PascalCase para el nombre de clase y a kebab-case para el nombre de archivo. Un nombre como auction-bid se convierte en AuctionBidService en la clase y en auction-bid.service.ts como archivo.

Seleccionar módulo objetivo

Para todos los schematics que viven dentro de un módulo, el CLI escanea src/modules/ y muestra un prompt con los módulos detectados. Selecciona el que debe contener el archivo nuevo. Solo el schematic module omite este paso.

Escribir el archivo

El CLI escribe el archivo generado en la subcarpeta correcta dentro del módulo elegido, siguiendo la estructura estándar (services/, tasks/, listeners/, etc.).

Registro automático en el módulo

Cuando el schematic lo soporta, el CLI inserta el import y el nombre de la clase en el array correcto dentro del decorator @Module del módulo objetivo: providers, listeners, controllers o imports.

Todos los schematics

Estructura core

Manejo de eventos

Slash commands

Prefix commands

HTTP

Componentes

Seguridad

Scheduling

Validación de nombres

El CLI bloquea patrones de sufijo repetidos para evitar nombres de archivo redundantes. Pasar invoice-service al schematic service se rechaza porque ese sufijo ya está implícito por el tipo de schematic. Usa solo invoice y el CLI añade automáticamente el sufijo correcto.

Es un detalle pequeño, pero mantiene más limpios los proyectos grandes. Evitas nombres de archivo como invoice-service.service.ts y nombres de clase como InvoiceServiceService, que es fácil crear por accidente cuando la generación es totalmente manual.

Consejos prácticos de selección

Si no estás seguro de qué schematic elegir, céntrate en el rol en runtime del archivo:

  1. Lógica de negocio reutilizada por muchos entrypoints: elige service.
  2. Un límite de eventos de Discord: elige listener.
  3. Definición de slash o prefix command: elige el schematic command correspondiente.
  4. Lógica de runtime para una interacción o comando: elige el schematic handler correspondiente.
  5. Checks de control de acceso o políticas: elige guard.
  6. Ejecución en background con temporizador: elige un schematic de scheduling.

Esta regla práctica suele bastar para elegir el scaffold correcto sin memorizar cada alias.

Ejemplos prácticos

terminal
# create a new domain module
spraxium g module billing

# create a service inside a module (prompted)
spraxium g service invoice

# create a slash command and its handler
spraxium g slash-command ping
spraxium g slash-handler ping

# create an interval task
spraxium g interval-task presence-cycle

Qué no hace generate

La generación te da el archivo, la forma del decorator y el registro en módulo cuando está soportado. No termina la funcionalidad por ti. Aún debes añadir lógica de negocio, completar configuración, conectar dependencias y decidir si la estructura generada encaja con el diseño final del módulo.