#!/usr/bin/env node
/**
* Script: Criar novo componente com estrutura padrão
* Uso: node create-component.js NomeDoComponente [feature]
* Exemplo: node create-component.js UserCard rh
*/
const fs = require('fs');
const path = require('path');
const [, , componentName, feature] = process.argv;
if (!componentName) {
console.error('❌ Nome do componente é obrigatório!');
console.log('Uso: node create-component.js NomeDoComponente [feature]');
process.exit(1);
}
// Definir caminho baseado em feature ou shared
const basePath = feature
? path.join(__dirname, '../../src/features', feature, 'components', componentName)
: path.join(__dirname, '../../src/components/shared', componentName);
// Criar pasta
if (!fs.existsSync(basePath)) {
fs.mkdirSync(basePath, { recursive: true });
}
// Template Produção
const prodTemplate = `import { Card } from '@/components/ui/card';
/**
* ${componentName} - Componente de produção
*/
export const ${componentName} = ({ data, className = '' }) => {
return (
${componentName}
{/* Implementar conteúdo */}
);
};
`;
// Template Dev (Playground)
const devTemplate = `import { ${componentName} } from './${componentName}';
/**
* ${componentName}.dev - Versão para Playground com controles
*/
export const ${componentName}Dev = () => {
const mockData = {
// Mock data para testes
};
return (
Controles (Dev)
{/* Adicionar controles de teste */}
<${componentName} data={mockData} />
);
};
`;
// Template index.js
const indexTemplate = `export { ${componentName} } from './${componentName}';
export { ${componentName}Dev } from './${componentName}.dev';
`;
// Escrever arquivos
fs.writeFileSync(path.join(basePath, `${componentName}.jsx`), prodTemplate);
fs.writeFileSync(path.join(basePath, `${componentName}.dev.jsx`), devTemplate);
fs.writeFileSync(path.join(basePath, 'index.js'), indexTemplate);
console.log(`✅ Componente ${componentName} criado com sucesso!`);
console.log(`📁 Caminho: ${basePath}`);
console.log(`\n📝 Próximos passos:`);
console.log(`1. Implementar lógica em ${componentName}.jsx`);
console.log(`2. Adicionar controles em ${componentName}.dev.jsx`);
console.log(`3. Cadastrar no Playground (PlaygroundView.jsx)`);
console.log(`4. Testar no Playground antes de usar em views`);