Spraxium logoSpraxium

Gerando Arquivos

O comando spraxium generate cria arquivos alinhados ao framework a partir de 19 schematics. Entenda como funcionam a normalização de nomes, a escolha do módulo de destino e o registro automático.

O que ele faz

spraxium generate cria um novo arquivo-fonte a partir de um schematic nomeado e o conecta ao módulo correto. O comando aceita o nome do schematic e o nome do arquivo como argumentos; se um deles for omitido, aparece um seletor interativo. Todos os nomes de classe gerados são normalizados para PascalCase e os nomes de arquivo para kebab-case, então você não precisa se preocupar manualmente com convenções de nomenclatura.

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

Esse comando é especialmente valioso quando você quer velocidade sem abrir mão da consistência do projeto. Em vez de criar um arquivo na mão, escolher uma pasta, adicionar decorators e depois lembrar de registrar a classe no módulo, você deixa a CLI gerar um ponto de partida alinhado ao framework em uma única etapa.

Quando usar generate em vez de criar arquivos manualmente

Use spraxium generate quando o arquivo de que você precisa já corresponder a um padrão conhecido do framework: serviços, listeners, handlers, guards, tarefas, comandos e scaffolds de módulo. Ele é especialmente útil no início de um projeto, quando desvios de nomenclatura e registros esquecidos são comuns.

Criar arquivos manualmente ainda faz sentido quando você está construindo algo intencionalmente customizado, refatorando pesado um módulo existente ou criando um tipo de arquivo que não se encaixa em um schematic suportado. A CLI existe para eliminar setup repetitivo, não para substituir critério técnico.

Como a geração funciona

Identificar o schematic

A CLI lê o argumento do schematic ou, se ele estiver ausente, apresenta uma lista interativa com todos os 19 schematics disponíveis. Aliases são aceitos em qualquer lugar onde o nome completo é aceito, então g sc ping equivale a g slash-command ping.

Normalizar o nome

O nome fornecido é dividido em hífens e underscores, normalizado para PascalCase no nome da classe e para kebab-case no nome do arquivo. Um nome como auction-bid vira AuctionBidService na classe e auction-bid.service.ts no arquivo.

Escolher o módulo de destino

Para todos os schematics que vivem dentro de um módulo, a CLI percorre src/modules/ e apresenta um prompt com os módulos detectados. Selecione o módulo que deve receber o novo arquivo. Apenas o schematic module pula essa etapa.

Escrever o arquivo

A CLI grava o arquivo gerado na subpasta correta dentro do módulo escolhido, seguindo o layout padrão (services/, tasks/, listeners/ etc.).

Registrar automaticamente no módulo

Quando o schematic oferece suporte, a CLI injeta a importação e o nome da classe no array correto dentro do decorator @Module do módulo de destino: providers, listeners, controllers ou imports.

Todos os schematics

Estrutura principal

Tratamento de eventos

Comandos slash

Comandos prefixados

HTTP

Components

Segurança

Agendamento

Validação de nomes

A CLI bloqueia padrões de sufixo repetidos para evitar nomes de arquivo redundantes. Passar invoice-service para o schematic service é rejeitado porque o sufixo já está implícito pelo tipo de schematic. Use apenas invoice, e a CLI acrescentará automaticamente o sufixo correto.

É um detalhe pequeno, mas que ajuda a manter projetos grandes mais limpos. Assim, você evita nomes como invoice-service.service.ts e classes como InvoiceServiceService, que surgem com facilidade quando a geração é totalmente manual.

Dicas práticas de escolha

Se você não tiver certeza sobre qual schematic escolher, foque no papel do arquivo em runtime:

  1. Lógica de negócio reutilizada por muitos pontos de entrada: escolha service.
  2. Um ponto de entrada de evento do Discord: escolha listener.
  3. A definição de um comando slash ou prefixado: escolha o schematic command correspondente.
  4. A lógica de execução de uma interação ou comando: escolha o schematic handler correspondente.
  5. Controle de acesso ou checagens de política: escolha guard.
  6. Execução em segundo plano baseada em tempo: escolha um schematic de agendamento.

Essa regra prática costuma ser suficiente para escolher o scaffold certo sem decorar todos os aliases.

Exemplos práticos

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

O que generate não faz

A geração entrega o arquivo, o formato do decorator e o registro no módulo quando isso é suportado. Ela não conclui a funcionalidade por você. Ainda é necessário adicionar a lógica de negócio, preencher a configuração, conectar dependências e decidir se a estrutura gerada corresponde ao desenho final do módulo.