Um gerador automático de estruturas de arquivos e paths para projetos JavaScript/TypeScript. Crie rapidamente features completas com entities, repositories, interfaces, hooks e enums organizados de forma padronizada.
npx genpathsnpm install -g genpaths- ✅ Suporte para JavaScript e TypeScript
- ✅ Suporte a múltiplos idiomas (Português e Inglês)
- ✅ Templates personalizáveis
- ✅ Configuração flexível via arquivo
.genpaths.json - ✅ Arquivos index.{ts/js} automáticos em cada pasta de tipo
- ✅ Pasta base configurável (src, lib, ou nenhuma)
- ✅ Geração seletiva de tipos de arquivo
- ✅ Suporte a paths aninhados
- ✅ Modo interativo intuitivo
- ✅ CLI amigável com cores e emojis
npx genpaths initEste comando irá:
- Perguntar qual idioma você prefere (pt-BR ou en)
- Perguntar qual linguagem usar (TypeScript ou JavaScript)
- Copiar todos os templates relevantes para
.genpaths/templates/ - Criar um arquivo
.genpaths.jsoncom configuração padrão
Templates incluídos:
- Base (default): entity, repository, use-case, enum, component, hook
npx genpaths create UserIsso criará a seguinte estrutura:
src/
entities/
user.entity.ts
index.ts
repositories/
user.repository.ts
index.ts
use-cases/
user.use-case.ts
index.ts
enums/
user.enum.ts
index.ts
components/
User.tsx
index.ts
hooks/
useUser.ts
index.ts
# Apenas entities e repositories
npx genpaths create Product --types entities,repositories
# Apenas hooks
npx genpaths create useAuth --types hooks
# Todos exceto enums
npx genpaths create Order --except enums# Gerar em pasta base diferente
npx genpaths create shared/helpers --base-dir src/utils
# Gerar em pasta de saída diferente
npx genpaths create User --output-dir modules# Forçar JavaScript
npx genpaths create Auth --js
# Forçar TypeScript
npx genpaths create Auth --ts# Cria em features/auth/Login/
npx genpaths create auth/Login# Apenas entities e interfaces
npx genpaths Product --only entities,interfaces
# Todos exceto enums
npx genpaths Order --except enums# Cria em features/auth/Login/
npx genpaths create auth/Loginnpx genpaths create <nome> [opções]# Configurar projeto interativamente
npx genpaths init
# Copiar templates padrão para personalização
npx genpaths defaults
# Mostrar configuração atual
npx genpaths config
# Mostrar ajuda
npx genpaths --help| Opção | Descrição | Exemplo |
|---|---|---|
--types <tipos> |
Tipos a gerar | --types entities,repositories |
--except <tipos> |
Gera todos exceto os especificados | --except enums |
--base-dir <pasta> |
Pasta base do projeto (sobrescreve config) | --base-dir src/utils |
--output-dir <pasta> |
Pasta de saída (sobrescreve config) | --output-dir modules |
--js |
Força geração em JavaScript | --js |
--ts |
Força geração em TypeScript | --ts |
--locale, -l |
Define o idioma (pt-BR ou en) | --locale en |
--interactive, -i |
Força modo interativo | -i |
--help, -h |
Mostra ajuda | --help |
O genpaths suporta múltiplos idiomas para tornar a ferramenta mais acessível!
- 🇧🇷 Português (pt-BR) - Idioma padrão
- 🇺🇸 Inglês (en)
# Durante o init, escolha seu idioma preferido
npx genpaths init
# Ou defina diretamente via linha de comando
npx genpaths --locale en
npx genpaths User --locale pt-BR
# O idioma é salvo no .genpaths.json para uso futuro🇧🇷 Em Português:
$ npx genpaths User
🏗️ Gerando feature "User" em typescript...
✨ Feature criada com sucesso!🇺🇸 In English:
$ npx genpaths User --locale en
🏗️ Generating feature "User" in typescript...
✨ Feature created successfully!Quer adicionar um novo idioma? É fácil!
- Crie um arquivo
src/locales/[codigo].json(ex:es.jsonpara espanhol) - Copie a estrutura de
en.jsonoupt-BR.json - Traduza todas as strings
- Adicione o idioma em
src/locales/index.js - Atualize o prompt em
src/prompts.js - Abra um Pull Request! 🎉
Crie um arquivo .genpaths.json na raiz do seu projeto para personalizar as configurações.
Este é o padrão criado pelo comando genpaths init:
{
"language": "typescript",
"locale": "pt-BR",
"baseDir": "src",
"outputDir": "features",
"defaultTypes": [
"entities",
"hooks",
"repositories",
"interfaces",
"enums"
]
}JavaScript sem pasta base (Inglês):
{
"language": "javascript",
"locale": "en",
"baseDir": "",
"outputDir": "features",
"defaultTypes": ["entities", "repositories"]
}TypeScript com pasta lib:
{
"language": "typescript",
"locale": "pt-BR",
"baseDir": "lib",
"outputDir": "modules",
"defaultTypes": ["entities", "interfaces", "hooks"]
}Projeto minimalista:
{
"language": "javascript",
"locale": "en",
"baseDir": "",
"outputDir": "components",
"defaultTypes": ["entities"]
}| Opção | Descrição | Exemplo | Padrão |
|---|---|---|---|
language |
Linguagem do projeto | "typescript" ou "javascript" |
"typescript" |
locale |
Idioma da interface | "pt-BR" ou "en" |
"pt-BR" |
baseDir |
Pasta base do projeto | "src", "lib", "" (vazio para nenhuma) |
"src" |
outputDir |
Pasta onde features serão criadas | "features", "modules" |
"features" |
defaultTypes |
Tipos de arquivo a serem gerados | ["entities", "hooks"] |
["entities", "hooks", "repositories", "interfaces", "enums"] |
npx genpaths initEste comando guiará você através de um processo interativo para configurar:
- Idioma preferido (Português ou Inglês)
- Linguagem padrão (JS/TS)
- Pasta base (src, lib, ou nenhuma)
- Diretório de saída
- Tipos de arquivo padrão
Você pode copiar o arquivo de exemplo incluído no pacote:
# Se instalado globalmente
cp $(npm root -g)/genpaths/.genpaths.json.example .genpaths.json
# Ou criar manualmente com os valores padrão
cat > .genpaths.json << 'EOF'
{
"language": "typescript",
"baseDir": "src",
"outputDir": "features",
"defaultTypes": ["entities", "hooks", "repositories", "interfaces", "enums"]
}
EOFCada pasta de tipo gera automaticamente um arquivo index.{ts/js} que exporta o arquivo da feature:
// src/features/User/entities/index.ts
export * from './User.entity';
// src/features/User/hooks/index.ts
export * from './User.hook';Isso permite importações mais limpas:
// Ao invés de:
import { Userentity } from './features/User/entities/User.entity';
// Você pode usar:
import { Userentity } from './features/User/entities';| Tipo | Descrição | Arquivo Gerado |
|---|---|---|
entities |
Classes de entityo/entidade | Feature.entity.js/ts |
repositories |
Camada de acesso a dados | Feature.repository.js/ts |
interfaces |
Interfaces TypeScript | Feature.interface.ts |
hooks |
Custom hooks | Feature.hook.js/ts |
enums |
Enumerações | Feature.enum.js/ts |
npx genpaths defaultsIsso copiará os templates padrão para ./generator/templates/ permitindo personalização.
generator/
templates/
entities/
{feature}.entity.js
{feature}.entity.ts
index.js
index.ts
repositories/
{feature}.repository.js
{feature}.repository.ts
index.js
index.ts
interfaces/
{feature}.interface.ts
{feature}.interface.js
index.js
index.ts
hooks/
{feature}.hook.js
{feature}.hook.ts
index.js
index.ts
enums/
{feature}.enum.js
{feature}.enum.ts
index.js
index.ts
{{feature}}- Nome da feature (capitalizado){{featureLower}}- Nome da feature (minúsculo)
Você pode criar seus próprios tipos além dos padrões (entities, hooks, repositories, interfaces, enums):
# Criar pasta para o novo tipo
mkdir -p generator/templates/services
# Criar template do arquivo principal
cat > generator/templates/services/{feature}.service.ts << 'EOF'
// Service for {{feature}}
export class {{feature}}Service {
constructor() {
// Initialize service
}
async find{{feature}}ById(id: string) {
// Implementation
}
}
EOF
# Criar template do index
cat > generator/templates/services/index.ts << 'EOF'
export * from './{{feature}}.service';
EOFEdite .genpaths.json e adicione seu tipo customizado:
{
"language": "typescript",
"baseDir": "src",
"outputDir": "features",
"defaultTypes": [
"entities",
"hooks",
"repositories",
"interfaces",
"enums",
"services"
]
}# Gerar feature com o novo tipo
npx genpaths User
# Ou apenas o tipo customizado
npx genpaths User --only servicesIsso criará:
src/
features/
User/
services/
User.service.ts
index.ts
- Nome da pasta: Use o nome do tipo no plural (ex:
services,controllers,validators) - Nome do arquivo: O sistema remove o 's' final automaticamente (ex:
services→service)- Se o tipo não termina com 's', mantém o nome (ex:
dto→dto)
- Se o tipo não termina com 's', mantém o nome (ex:
- Template principal:
{feature}.TIPO.extensao(ex:{feature}.service.ts) - Template index:
index.extensao(ex:index.ts) - Placeholder: Use
{{feature}}para o nome capitalizado da feature
// generator/templates/controllers/{feature}.controller.ts
export class {{feature}}Controller {
async handle(req, res) {
// Implementation
}
}// generator/templates/dtos/{feature}.dto.ts
export interface {{feature}}DTO {
id: string;
// Add properties
}// generator/templates/validators/{feature}.validator.ts
export class {{feature}}Validator {
validate(data: any): boolean {
// Validation logic
return true;
}
}# Estrutura de produto
npx genpaths Product --only entities,interfaces,repositories
# Carrinho de compras
npx genpaths shopping Cart
# Sistema de pagamento
npx genpaths payment PaymentMethod --except hooks# Módulo de usuário completo
npx genpaths auth User
# Apenas interfaces de auth
npx genpaths auth Login --only interfaces# Para cada endpoint
npx genpaths api users --only entities,repositories
npx genpaths api posts --only entities,repositories
npx genpaths api comments --only entities,repositories- Node.js >= 14.0.0
chalk- Cores no terminalinquirer- Prompts interativos
# Clonar repositório
git clone <repository-url>
cd genpaths
# Instalar dependências
npm install
# Testar localmente
npm link
genpaths --helpContribuições são bem-vindas! Aqui estão algumas formas de ajudar:
Quer adicionar um novo idioma?
- Crie
src/locales/[codigo].json(ex:es.json) - Copie e traduza a estrutura de
en.jsonoupt-BR.json - Adicione o código em
src/locales/index.js - Atualize
src/prompts.jscom a nova opção
- Fork o projeto GitHub
- Crie uma branch para sua feature (
git checkout -b feature/nova-feature) - Commit suas mudanças (
git commit -am 'Adiciona nova feature') - Push para a branch (
git push origin feature/nova-feature) - Crie um Pull Request
- 📖 EXAMPLES.md - Exemplos práticos detalhados de uso
- 🔧 CUSTOM_TYPES.md - Como criar tipos customizados
- 📝 CHANGELOG.md - Histórico de versões e mudanças
- 🐛 Issues: GitHub Issues
Obrigado a todos os contribuidores que ajudaram a tornar este projeto possível!
⭐ Se este projeto te ajudou, considere dar uma estrela no GitHub!