testes/.agent/scripts/create-component.js

88 lines
2.6 KiB
JavaScript

#!/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 (
<Card className={\`\${className}\`}>
<div className="p-4">
<h3 className="text-lg font-semibold">${componentName}</h3>
{/* Implementar conteúdo */}
</div>
</Card>
);
};
`;
// 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 (
<div className="space-y-4">
<div className="p-4 bg-muted rounded">
<h4 className="text-sm font-medium mb-2">Controles (Dev)</h4>
{/* Adicionar controles de teste */}
</div>
<${componentName} data={mockData} />
</div>
);
};
`;
// 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`);