88 lines
2.6 KiB
JavaScript
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`);
|