web-architect-cli 1.0.4 → 1.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +122 -64
- package/bin/index.js +185 -84
- package/bin/setup_windows.bat +14 -0
- package/package.json +5 -2
package/README.md
CHANGED
|
@@ -1,26 +1,30 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
1
3
|
# 🏗️ Web Architect CLI
|
|
2
4
|
|
|
3
|
-
O **Web Architect CLI** é uma ferramenta de linha de comando
|
|
5
|
+
O **Web Architect CLI** é uma ferramenta de linha de comando desenvolvida para padronizar e acelerar a criação de projetos no ecossistema **Sankhya**.
|
|
4
6
|
|
|
5
|
-
|
|
7
|
+
Com um único comando, você pode gerar:
|
|
6
8
|
|
|
7
|
-
|
|
9
|
+
1. 🖥️ **Interfaces Web:** HTML5/JSP com TailwindCSS e compactação automática (zip).
|
|
10
|
+
2. 🗄️ **Personalizações de Banco:** Estrutura organizada para PL/SQL (Procedures, Triggers, Views).
|
|
11
|
+
3. ☕ **Extensões Java:** Projetos configurados nativamente para IntelliJ (JDK 1.8 + libs-java).
|
|
8
12
|
|
|
9
|
-
|
|
13
|
+
---
|
|
10
14
|
|
|
11
|
-
|
|
15
|
+
## 📦 Instalação
|
|
16
|
+
|
|
17
|
+
Para utilizar a ferramenta em qualquer lugar do seu sistema, instale globalmente via npm:
|
|
18
|
+
|
|
19
|
+
```bashnpm install -g web-architect-cli@latest
|
|
12
20
|
npm install -g web-architect-cli@latest
|
|
13
21
|
```
|
|
14
22
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
---
|
|
23
|
+
**Requisito:** É necessário ter o [Node.js](https://nodejs.org/) instalado.
|
|
18
24
|
|
|
19
25
|
## 🚀 Como Utilizar
|
|
20
26
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
Abra o terminal na pasta onde deseja iniciar o trabalho e execute:
|
|
27
|
+
Abra o terminal na pasta onde deseja criar o projeto e execute:
|
|
24
28
|
|
|
25
29
|
Bash
|
|
26
30
|
|
|
@@ -28,50 +32,130 @@ Bash
|
|
|
28
32
|
web-arch
|
|
29
33
|
```
|
|
30
34
|
|
|
31
|
-
O assistente interativo
|
|
35
|
+
O assistente interativo apresentará um menu. Escolha o tipo de projeto:
|
|
32
36
|
|
|
33
|
-
|
|
37
|
+
### Opção [1] HTML5 (Web & Dashboards)
|
|
34
38
|
|
|
35
|
-
|
|
39
|
+
Ideal para telas adicionais, dashboards e interfaces visuais.
|
|
36
40
|
|
|
37
|
-
|
|
41
|
+
- **O que faz:** Cria estrutura MVC, configura TailwindCSS e gera script de build.
|
|
38
42
|
|
|
39
|
-
|
|
43
|
+
- **Diferencial:** Possui o modo **"Watch"** (explicação abaixo).
|
|
40
44
|
|
|
41
|
-
|
|
45
|
+
### Opção [2] PERSONALIZACAO (Banco de Dados)
|
|
42
46
|
|
|
43
|
-
|
|
47
|
+
Ideal para organizar scripts de banco e documentação técnica.
|
|
48
|
+
|
|
49
|
+
- **O que faz:** Cria pastas padronizadas (`src/Procedure`, `src/Trigger`, etc.) e inicializa o Git.
|
|
50
|
+
|
|
51
|
+
- **Estrutura:** Separa o código-fonte (`src`) da documentação funcional (`doc`).
|
|
52
|
+
|
|
53
|
+
### Opção [3] JAVA (IntelliJ Native)
|
|
54
|
+
|
|
55
|
+
Ideal para eventos, botões de ação e agendadores Java.
|
|
56
|
+
|
|
57
|
+
- **O que faz:** Gera a estrutura de pastas Java (`br.com.sankhya...`) e os arquivos de configuração do **IntelliJ IDEA**.
|
|
58
|
+
|
|
59
|
+
- **Configuração:** Já define o projeto para **JDK 1.8** e vincula a biblioteca global `libs-java`.
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## 🛠️ Fluxos de Trabalho (Workflows)
|
|
64
|
+
|
|
65
|
+
Dependendo do modelo escolhido, o fluxo de trabalho muda:
|
|
66
|
+
|
|
67
|
+
### 👉 Para Projetos Web (HTML5)
|
|
68
|
+
|
|
69
|
+
O grande trunfo aqui é a compactação automática.
|
|
70
|
+
|
|
71
|
+
1. Entre na pasta criada: `cd meu-projeto-web`
|
|
72
|
+
|
|
73
|
+
2. Inicie o monitoramento: `npm start`
|
|
74
|
+
|
|
75
|
+
3. **Desenvolva:** Ao salvar qualquer arquivo (HTML, JS, CSS), o sistema **gera automaticamente um .zip** na raiz do projeto.
|
|
76
|
+
|
|
77
|
+
4. **Implante:** Basta subir esse zip para o Repositório de Arquivos do Sankhya.
|
|
78
|
+
|
|
79
|
+
### 👉 Para Projetos Java
|
|
80
|
+
|
|
81
|
+
O foco é a integração imediata com a IDE.
|
|
82
|
+
|
|
83
|
+
1. Abra o **IntelliJ IDEA**.
|
|
84
|
+
|
|
85
|
+
2. Vá em **File > Open** e selecione a pasta do projeto criado.
|
|
86
|
+
|
|
87
|
+
3. **Pronto!** O projeto será reconhecido como módulo Java, com JDK 1.8 selecionado e pastas de source (`src`) configuradas.
|
|
88
|
+
|
|
89
|
+
> *Nota: Certifique-se de ter uma Global Library chamada `libs-java` configurada no seu IntelliJ.*
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
## 📂 Estruturas Geradas
|
|
94
|
+
|
|
95
|
+
Veja como cada projeto é organizado:
|
|
96
|
+
|
|
97
|
+
### 1. Web (HTML5)
|
|
98
|
+
|
|
99
|
+
Plaintext
|
|
44
100
|
|
|
45
101
|
```
|
|
46
|
-
|
|
47
|
-
|
|
102
|
+
meu-dashboard/
|
|
103
|
+
├── build.js # Automação de ZIP
|
|
104
|
+
├── index.jsp # Entry point Sankhya (<snk:load/>)
|
|
105
|
+
├── index.html # Testes locais
|
|
106
|
+
└── src/
|
|
107
|
+
├── controllers/ # Lógica JS
|
|
108
|
+
├── views/ # Manipulação de DOM
|
|
109
|
+
└── assets/ # TailwindCSS e Imagens
|
|
48
110
|
```
|
|
49
111
|
|
|
50
|
-
|
|
112
|
+
### 2. Personalização
|
|
113
|
+
|
|
114
|
+
Plaintext
|
|
51
115
|
|
|
52
|
-
|
|
116
|
+
```
|
|
117
|
+
minha-customizacao/
|
|
118
|
+
├── doc/ # Documentação funcional/técnica
|
|
119
|
+
└── src/
|
|
120
|
+
├── Function/
|
|
121
|
+
├── Procedure/
|
|
122
|
+
├── Trigger/
|
|
123
|
+
├── View/
|
|
124
|
+
└── SQL/ # Scripts gerais
|
|
125
|
+
```
|
|
53
126
|
|
|
54
|
-
|
|
127
|
+
### 3. Java (Sankhya)
|
|
55
128
|
|
|
56
|
-
|
|
129
|
+
Plaintext
|
|
57
130
|
|
|
58
|
-
|
|
131
|
+
```
|
|
132
|
+
meu-evento-java/
|
|
133
|
+
├── .idea/ # Configurações do IntelliJ (Versionado)
|
|
134
|
+
├── meu-evento.iml # Módulo Java com libs-java
|
|
135
|
+
├── out/ # Saída de compilação (Ignorado)
|
|
136
|
+
└── src/
|
|
137
|
+
└── br/com/sankhya/meuevento/
|
|
138
|
+
├── business/ # Regras de negócio (Eventos, Botões)
|
|
139
|
+
└── domain/ # Modelos e Repositórios
|
|
140
|
+
```
|
|
59
141
|
|
|
60
142
|
## 💡 Casos de Uso (Workflows)
|
|
61
143
|
|
|
62
|
-
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
Aqui estão os cenários comuns onde o **Web Architect CLI** brilha:
|
|
63
147
|
|
|
64
148
|
### Caso A: Início Rápido de Dashboards (HTML/JSP)
|
|
65
149
|
|
|
66
150
|
> *Você precisa criar uma tela customizada para apresentar indicadores.*
|
|
67
151
|
|
|
68
|
-
1. Rode
|
|
152
|
+
1. Rode `web-arch` e nomeie como `dash-financeiro`.
|
|
69
153
|
|
|
70
|
-
2. O projeto já nasce com
|
|
154
|
+
2. O projeto já nasce com `index.jsp` contendo as importações Sankhya (`<snk:load/>`) e `index.html` para testes locais.
|
|
71
155
|
|
|
72
|
-
3. Edite o
|
|
156
|
+
3. Edite o `src/views/main.js` ou o HTML.
|
|
73
157
|
|
|
74
|
-
4. O arquivo
|
|
158
|
+
4. O arquivo `dash-financeiro.zip` é atualizado instantaneamente.
|
|
75
159
|
|
|
76
160
|
5. Faça o upload do ZIP no "Repositório de Arquivos" do sistema.
|
|
77
161
|
|
|
@@ -79,7 +163,7 @@ Aqui estão os cenários comuns onde o **Web Architect CLI** brilha:
|
|
|
79
163
|
|
|
80
164
|
> *Você quer testar um layout moderno sem configurar Webpack ou PostCSS.*
|
|
81
165
|
|
|
82
|
-
1. Rode
|
|
166
|
+
1. Rode `web-arch`.
|
|
83
167
|
|
|
84
168
|
2. Vá direto ao HTML e comece a usar classes utilitárias:
|
|
85
169
|
|
|
@@ -87,7 +171,7 @@ Aqui estão os cenários comuns onde o **Web Architect CLI** brilha:
|
|
|
87
171
|
|
|
88
172
|
```
|
|
89
173
|
<div class="bg-blue-600 text-white p-4 rounded-lg shadow-md">
|
|
90
|
-
|
|
174
|
+
Olá, Mundo!
|
|
91
175
|
</div>
|
|
92
176
|
```
|
|
93
177
|
|
|
@@ -97,44 +181,16 @@ Aqui estão os cenários comuns onde o **Web Architect CLI** brilha:
|
|
|
97
181
|
|
|
98
182
|
> *Vários desenvolvedores trabalhando em telas diferentes.*
|
|
99
183
|
|
|
100
|
-
Ao usar o comando
|
|
184
|
+
Ao usar o comando `web-arch`, todos os projetos seguem a mesma árvore:
|
|
101
185
|
|
|
102
|
-
- `src/controllers/`
|
|
186
|
+
- `src/controllers/` (Lógica de negócio)
|
|
103
187
|
|
|
104
|
-
- `src/views/`
|
|
188
|
+
- `src/views/` (Manipulação de DOM)
|
|
105
189
|
|
|
106
|
-
- `src/services/`
|
|
190
|
+
- `src/services/` (Chamadas de API)
|
|
107
191
|
|
|
108
192
|
Isso facilita a manutenção cruzada: qualquer desenvolvedor sabe onde encontrar o código.
|
|
109
193
|
|
|
110
|
-
---
|
|
111
|
-
|
|
112
|
-
## 📂 Estrutura do Projeto Gerado
|
|
113
|
-
|
|
114
|
-
Plaintext
|
|
115
|
-
|
|
116
|
-
```
|
|
117
|
-
meu-projeto/
|
|
118
|
-
├── .git/
|
|
119
|
-
├── node_modules/
|
|
120
|
-
├── src/
|
|
121
|
-
│ ├── assets/
|
|
122
|
-
│ │ ├── css/ # Estilos globais
|
|
123
|
-
│ │ ├── js/ # Bibliotecas (Tailwind, etc)
|
|
124
|
-
│ ├── components/ # Fragmentos de UI
|
|
125
|
-
│ ├── controllers/ # Lógica
|
|
126
|
-
│ ├── services/ # Integrações
|
|
127
|
-
│ ├── utils/ # Funções auxiliares
|
|
128
|
-
│ └── main.js # Ponto de entrada JS
|
|
129
|
-
├── build.js # Script de automação (Zip automático)
|
|
130
|
-
├── index.html # Para rodar no navegador local
|
|
131
|
-
├── index.jsp # Para rodar no servidor
|
|
132
|
-
├── package.json
|
|
133
|
-
└── README.md
|
|
134
|
-
```
|
|
135
|
-
|
|
136
|
-
---
|
|
137
|
-
|
|
138
194
|
## 🛠 Comandos do Projeto (Scripts)
|
|
139
195
|
|
|
140
196
|
Dentro da pasta do projeto criado, você pode usar:
|
|
@@ -143,3 +199,5 @@ Dentro da pasta do projeto criado, você pode usar:
|
|
|
143
199
|
| --------------- | --------------------------------------------------- |
|
|
144
200
|
| `npm start` | Inicia o monitoramento. Altera arquivo -> Gera ZIP. |
|
|
145
201
|
| `npm run build` | Gera o ZIP apenas uma vez e encerra. |
|
|
202
|
+
|
|
203
|
+
|
package/bin/index.js
CHANGED
|
@@ -1,4 +1,12 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
if (process.platform === "win32") {
|
|
4
|
+
try {
|
|
5
|
+
require("child_process").execSync("chcp 65001", { stdio: 'ignore' });
|
|
6
|
+
} catch (e) {
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
|
|
2
10
|
const fs = require('fs');
|
|
3
11
|
const path = require('path');
|
|
4
12
|
const { execSync } = require('child_process');
|
|
@@ -9,6 +17,9 @@ const rl = readline.createInterface({
|
|
|
9
17
|
output: process.stdout
|
|
10
18
|
});
|
|
11
19
|
|
|
20
|
+
// ==========================================
|
|
21
|
+
// CONTEÚDOS PARA O MODELO HTML5
|
|
22
|
+
// ==========================================
|
|
12
23
|
const CONTEUDO_INDEX_JSP = `<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored ="false"%>
|
|
13
24
|
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
|
14
25
|
<%@ page import="java.util.*" %>
|
|
@@ -28,45 +39,27 @@ const CONTEUDO_INDEX_JSP = `<%@ page language="java" contentType="text/html; cha
|
|
|
28
39
|
<snk:load/>
|
|
29
40
|
</head>
|
|
30
41
|
<body>
|
|
31
|
-
|
|
32
|
-
<
|
|
33
|
-
|
|
34
|
-
</header>
|
|
35
|
-
|
|
36
|
-
<main class="main">
|
|
37
|
-
|
|
38
|
-
</main>
|
|
39
|
-
|
|
42
|
+
<header class="header"></header>
|
|
43
|
+
<main class="main"></main>
|
|
40
44
|
<script type="module" src="\${BASE_FOLDER}/src/main.js"></script>
|
|
41
45
|
</body>
|
|
42
46
|
</html>`;
|
|
43
47
|
|
|
44
48
|
const CONTEUDO_INDEX_HTML = `<!DOCTYPE html>
|
|
45
|
-
<html lang="pt-
|
|
49
|
+
<html lang="pt-BR">
|
|
46
50
|
<head>
|
|
47
51
|
<meta charset="UTF-8">
|
|
48
52
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
49
53
|
<title>Meu modelo</title>
|
|
50
|
-
|
|
51
54
|
<script src="src/assets/js/tailwindcss.js"></script>
|
|
52
55
|
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap" rel="stylesheet">
|
|
53
56
|
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Material+Symbols+Rounded:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200" />
|
|
54
57
|
<link rel="stylesheet" href="./src/assets/css/style.css">
|
|
55
|
-
|
|
56
58
|
<script type="module" src="https://cdn.jsdelivr.net/npm/@jtandrelevicius/utils-js-library@latest/index.js"></script>
|
|
57
59
|
<body>
|
|
58
|
-
|
|
59
|
-
<
|
|
60
|
-
|
|
61
|
-
</header>
|
|
62
|
-
|
|
63
|
-
<main class="main">
|
|
64
|
-
|
|
65
|
-
</main>
|
|
66
|
-
|
|
67
|
-
|
|
60
|
+
<header class="header"></header>
|
|
61
|
+
<main class="main"></main>
|
|
68
62
|
<script type="module" src="src/main.js"></script>
|
|
69
|
-
|
|
70
63
|
</body>
|
|
71
64
|
</html>`;
|
|
72
65
|
|
|
@@ -137,11 +130,12 @@ if (CONFIG.MODO_AUTOMATICO) {
|
|
|
137
130
|
}
|
|
138
131
|
`;
|
|
139
132
|
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
`;
|
|
144
|
-
|
|
133
|
+
// ==========================================
|
|
134
|
+
// UTILITÁRIOS GERAIS
|
|
135
|
+
// ==========================================
|
|
136
|
+
const CONTEUDO_GITIGNORE_HTML = `node_modules/\n*.zip\n.DS_Store\n`;
|
|
137
|
+
const CONTEUDO_GITIGNORE_GERAL = `*.zip\n.DS_Store\n`;
|
|
138
|
+
const CONTEUDO_GITIGNORE_JAVA = `out/\n.idea/workspace.xml\n.idea/usage.statistics.xml\n*.iws\n.DS_Store\n`;
|
|
145
139
|
const CONTEUDO_GITATTRIBUTES = `* text=auto`;
|
|
146
140
|
|
|
147
141
|
const logPasso = (emoji, msg) => console.log(`${emoji} ${msg}`);
|
|
@@ -150,36 +144,20 @@ function criarPasta(caminho) {
|
|
|
150
144
|
if (!fs.existsSync(caminho)) {
|
|
151
145
|
fs.mkdirSync(caminho, { recursive: true });
|
|
152
146
|
logPasso('📂', `Pasta criada: ${caminho}`);
|
|
153
|
-
} else {
|
|
154
|
-
logPasso('⚠️', `Pasta já existe: ${caminho}`);
|
|
155
147
|
}
|
|
156
148
|
}
|
|
157
149
|
|
|
158
150
|
function criarArquivo(caminho, conteudo) {
|
|
159
151
|
fs.writeFileSync(caminho, conteudo);
|
|
160
|
-
logPasso('📄', `Arquivo criado: ${caminho}`);
|
|
152
|
+
logPasso('📄', `Arquivo criado: ${path.basename(caminho)}`);
|
|
161
153
|
}
|
|
162
154
|
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
rl.close();
|
|
167
|
-
return;
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
const raiz = path.join(process.cwd(), nomeProjeto);
|
|
171
|
-
|
|
172
|
-
console.log(`\n---------------------------------------------------`);
|
|
173
|
-
console.log(`🔨 INICIANDO CRIAÇÃO DO PROJETO: ${nomeProjeto}`);
|
|
174
|
-
console.log(`---------------------------------------------------\n`);
|
|
175
|
-
|
|
176
|
-
if (fs.existsSync(raiz)) {
|
|
177
|
-
console.log(`❌ A pasta '${nomeProjeto}' já existe.`);
|
|
178
|
-
rl.close();
|
|
179
|
-
return;
|
|
180
|
-
}
|
|
181
|
-
criarPasta(raiz);
|
|
155
|
+
// ==========================================
|
|
156
|
+
// FUNÇÕES DE CRIAÇÃO DOS MODELOS
|
|
157
|
+
// ==========================================
|
|
182
158
|
|
|
159
|
+
// --- MODELO 1: HTML5 (Web) ---
|
|
160
|
+
function criarProjetoHTML5(raiz, nomeProjeto) {
|
|
183
161
|
const pastas = [
|
|
184
162
|
'src/assets/css',
|
|
185
163
|
'src/assets/img',
|
|
@@ -196,62 +174,185 @@ rl.question('🚀 Digite o nome do projeto: ', (nomeProjeto) => {
|
|
|
196
174
|
criarArquivo(path.join(raiz, 'index.jsp'), CONTEUDO_INDEX_JSP);
|
|
197
175
|
criarArquivo(path.join(raiz, 'index.html'), CONTEUDO_INDEX_HTML);
|
|
198
176
|
criarArquivo(path.join(raiz, 'build.js'), CONTEUDO_BUILD_JS);
|
|
199
|
-
criarArquivo(path.join(raiz, '.gitignore'),
|
|
177
|
+
criarArquivo(path.join(raiz, '.gitignore'), CONTEUDO_GITIGNORE_HTML);
|
|
200
178
|
criarArquivo(path.join(raiz, '.gitattributes'), CONTEUDO_GITATTRIBUTES);
|
|
201
|
-
criarArquivo(path.join(raiz, 'README.md'), `# ${nomeProjeto}\n\nProjeto gerado automaticamente.`);
|
|
179
|
+
criarArquivo(path.join(raiz, 'README.md'), `# ${nomeProjeto}\n\nProjeto Web (HTML5/JSP) gerado automaticamente.`);
|
|
202
180
|
|
|
203
181
|
const packageJson = {
|
|
204
182
|
name: nomeProjeto,
|
|
205
183
|
version: "1.0.0",
|
|
206
184
|
description: "",
|
|
207
185
|
main: "src/main.js",
|
|
208
|
-
scripts: {
|
|
209
|
-
"build": "node build.js",
|
|
210
|
-
"start": "node build.js"
|
|
211
|
-
},
|
|
186
|
+
scripts: { "build": "node build.js", "start": "node build.js" },
|
|
212
187
|
author: "",
|
|
213
188
|
license: "ISC"
|
|
214
189
|
};
|
|
215
190
|
criarArquivo(path.join(raiz, 'package.json'), JSON.stringify(packageJson, null, 2));
|
|
216
|
-
|
|
217
191
|
criarArquivo(path.join(raiz, 'src/main.js'), `console.log('Aplicação iniciada');`);
|
|
218
|
-
|
|
219
192
|
criarArquivo(path.join(raiz, 'src/assets/css/style.css'), `/* Estilos Globais */\nbody { font-family: 'Inter', sans-serif; }`);
|
|
220
|
-
|
|
193
|
+
|
|
221
194
|
const origemTailwind = path.join(__dirname, 'tailwindcss.js');
|
|
222
195
|
const destinoTailwind = path.join(raiz, 'src/assets/js/tailwindcss.js');
|
|
223
|
-
|
|
224
196
|
if (fs.existsSync(origemTailwind)) {
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
logPasso('📄', `Arquivo copiado: ${destinoTailwind}`);
|
|
228
|
-
} catch (err) {
|
|
229
|
-
console.error('❌ Erro ao copiar tailwindcss.js:', err.message);
|
|
230
|
-
}
|
|
231
|
-
} else {
|
|
232
|
-
console.log('⚠️ AVISO: O arquivo "tailwindcss.js" não foi encontrado na mesma pasta deste script.');
|
|
233
|
-
console.log(' Ele não foi copiado para o novo projeto.');
|
|
197
|
+
fs.copyFileSync(origemTailwind, destinoTailwind);
|
|
198
|
+
logPasso('📄', `Tailwind copiado.`);
|
|
234
199
|
}
|
|
235
200
|
|
|
236
|
-
console.log(`\n
|
|
237
|
-
|
|
238
|
-
|
|
201
|
+
console.log(`\n⚙️ CONFIGURANDO AMBIENTE WEB...`);
|
|
202
|
+
try {
|
|
203
|
+
logPasso('Git', 'Inicializando repositório...');
|
|
204
|
+
execSync('git init', { cwd: raiz, stdio: 'ignore' });
|
|
205
|
+
logPasso('NPM', 'Instalando dependências...');
|
|
206
|
+
execSync('npm install archiver', { cwd: raiz, stdio: 'ignore' });
|
|
207
|
+
} catch (e) { console.error('Erro na configuração:', e.message); }
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
// --- MODELO 2: PERSONALIZACAO (Banco/Backend) ---
|
|
211
|
+
function criarProjetoPersonalizacao(raiz, nomeProjeto) {
|
|
212
|
+
const pastas = [
|
|
213
|
+
'doc',
|
|
214
|
+
'src/Dashboard',
|
|
215
|
+
'src/Function',
|
|
216
|
+
'src/Procedure',
|
|
217
|
+
'src/Relatorio',
|
|
218
|
+
'src/SQL',
|
|
219
|
+
'src/Tela',
|
|
220
|
+
'src/Trigger',
|
|
221
|
+
'src/View'
|
|
222
|
+
];
|
|
223
|
+
|
|
224
|
+
pastas.forEach(p => criarPasta(path.join(raiz, p)));
|
|
225
|
+
|
|
226
|
+
criarArquivo(path.join(raiz, '.gitattributes'), CONTEUDO_GITATTRIBUTES);
|
|
227
|
+
criarArquivo(path.join(raiz, '.gitignore'), CONTEUDO_GITIGNORE_GERAL);
|
|
228
|
+
criarArquivo(path.join(raiz, 'README.md'), `# ${nomeProjeto}\n\nProjeto de Personalização (Banco de Dados/PLSQL).\n\n## Estrutura\n- **doc/**: Documentação.\n- **src/**: Scripts de Banco.`);
|
|
239
229
|
|
|
230
|
+
console.log(`\n⚙️ CONFIGURANDO AMBIENTE DE PERSONALIZAÇÃO...`);
|
|
240
231
|
try {
|
|
241
|
-
logPasso('
|
|
232
|
+
logPasso('Git', 'Inicializando repositório...');
|
|
242
233
|
execSync('git init', { cwd: raiz, stdio: 'inherit' });
|
|
234
|
+
} catch (e) { console.error('Erro no git init:', e.message); }
|
|
235
|
+
}
|
|
243
236
|
|
|
244
|
-
|
|
245
|
-
|
|
237
|
+
// --- MODELO 3: JAVA (Estrutura IntelliJ Nativa) ---
|
|
238
|
+
function criarProjetoJava(raiz, nomeProjeto) {
|
|
239
|
+
const nomePacote = nomeProjeto.replace(/-/g, '').toLowerCase();
|
|
240
|
+
const basePath = `src/br/com/sankhya/${nomePacote}`;
|
|
241
|
+
|
|
242
|
+
const pastas = [
|
|
243
|
+
'.idea',
|
|
244
|
+
'doc',
|
|
245
|
+
'out',
|
|
246
|
+
`${basePath}/business/agendador`,
|
|
247
|
+
`${basePath}/business/botao`,
|
|
248
|
+
`${basePath}/business/evento`,
|
|
249
|
+
`${basePath}/business/regra`,
|
|
250
|
+
`${basePath}/domain/model`,
|
|
251
|
+
`${basePath}/domain/repository`
|
|
252
|
+
];
|
|
246
253
|
|
|
247
|
-
|
|
248
|
-
console.log(`👉 Próximos passos:`);
|
|
249
|
-
console.log(` cd ${nomeProjeto}`);
|
|
250
|
-
console.log(` npm start (Para rodar o build automático)`);
|
|
254
|
+
pastas.forEach(p => criarPasta(path.join(raiz, p)));
|
|
251
255
|
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
256
|
+
criarArquivo(path.join(raiz, '.gitignore'), CONTEUDO_GITIGNORE_JAVA);
|
|
257
|
+
criarArquivo(path.join(raiz, 'README.md'), `# ${nomeProjeto}\n\nProjeto Java Sankhya (IntelliJ Nativo).`);
|
|
258
|
+
|
|
259
|
+
const modulesXml = `<?xml version="1.0" encoding="UTF-8"?>
|
|
260
|
+
<project version="4">
|
|
261
|
+
<component name="ProjectModuleManager">
|
|
262
|
+
<modules>
|
|
263
|
+
<module fileurl="file://$PROJECT_DIR$/${nomeProjeto}.iml" filepath="$PROJECT_DIR$/${nomeProjeto}.iml" />
|
|
264
|
+
</modules>
|
|
265
|
+
</component>
|
|
266
|
+
</project>`;
|
|
267
|
+
criarArquivo(path.join(raiz, '.idea/modules.xml'), modulesXml);
|
|
268
|
+
|
|
269
|
+
const miscXml = `<?xml version="1.0" encoding="UTF-8"?>
|
|
270
|
+
<project version="4">
|
|
271
|
+
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" project-jdk-name="1.8" project-jdk-type="JavaSDK">
|
|
272
|
+
<output url="file://$PROJECT_DIR$/out" />
|
|
273
|
+
</component>
|
|
274
|
+
</project>`;
|
|
275
|
+
criarArquivo(path.join(raiz, '.idea/misc.xml'), miscXml);
|
|
276
|
+
|
|
277
|
+
const imlContent = `<?xml version="1.0" encoding="UTF-8"?>
|
|
278
|
+
<module type="JAVA_MODULE" version="4">
|
|
279
|
+
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
|
280
|
+
<exclude-output />
|
|
281
|
+
<content url="file://$MODULE_DIR$">
|
|
282
|
+
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
|
|
283
|
+
</content>
|
|
284
|
+
<orderEntry type="inheritedJdk" />
|
|
285
|
+
<orderEntry type="sourceFolder" forTests="false" />
|
|
286
|
+
<orderEntry type="library" name="libs-java" level="application" />
|
|
287
|
+
</component>
|
|
288
|
+
</module>`;
|
|
289
|
+
criarArquivo(path.join(raiz, `${nomeProjeto}.iml`), imlContent);
|
|
290
|
+
|
|
291
|
+
console.log(`\n⚙️ CONFIGURANDO AMBIENTE JAVA (IntelliJ)...`);
|
|
292
|
+
try {
|
|
293
|
+
logPasso('Git', 'Inicializando repositório...');
|
|
294
|
+
execSync('git init', { cwd: raiz, stdio: 'inherit' });
|
|
295
|
+
console.log(`\n✅ SUCESSO! Abra a pasta '${nomeProjeto}' diretamente no IntelliJ.`);
|
|
296
|
+
console.log(`ℹ️ Certifique-se de que a biblioteca global 'libs-java' esteja configurada no seu IntelliJ.`);
|
|
297
|
+
} catch (e) { console.error(e.message); }
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
// ==========================================
|
|
301
|
+
// MENU PRINCIPAL
|
|
302
|
+
// ==========================================
|
|
303
|
+
function iniciar() {
|
|
304
|
+
console.clear();
|
|
305
|
+
console.log('===================================================');
|
|
306
|
+
console.log(' 🛠️ WEB ARCHITECT CLI - GERADOR 🛠️');
|
|
307
|
+
console.log('===================================================');
|
|
308
|
+
console.log('Selecione o tipo de projeto:');
|
|
309
|
+
console.log(' [1] HTML5 (Web, Tailwind, JSP, Auto-Zip)');
|
|
310
|
+
console.log(' [2] PERSONALIZACAO (SQL, Procedures, Triggers, Views)');
|
|
311
|
+
console.log(' [3] JAVA (IntelliJ, JDK 1.8, libs-java)');
|
|
312
|
+
console.log('===================================================');
|
|
313
|
+
|
|
314
|
+
rl.question('👉 Escolha uma opção (1-3): ', (opcao) => {
|
|
315
|
+
|
|
316
|
+
if (!['1', '2', '3'].includes(opcao.trim())) {
|
|
317
|
+
console.log('❌ Opção inválida.');
|
|
318
|
+
rl.close();
|
|
319
|
+
return;
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
rl.question('🚀 Digite o nome do projeto (ex: meu-projeto): ', (nomeProjeto) => {
|
|
323
|
+
if (!nomeProjeto) {
|
|
324
|
+
console.log('❌ Nome inválido.');
|
|
325
|
+
rl.close();
|
|
326
|
+
return;
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
const raiz = path.join(process.cwd(), nomeProjeto);
|
|
330
|
+
if (fs.existsSync(raiz)) {
|
|
331
|
+
console.log(`❌ A pasta '${nomeProjeto}' já existe.`);
|
|
332
|
+
rl.close();
|
|
333
|
+
return;
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
criarPasta(raiz);
|
|
337
|
+
|
|
338
|
+
switch (opcao.trim()) {
|
|
339
|
+
case '1':
|
|
340
|
+
criarProjetoHTML5(raiz, nomeProjeto);
|
|
341
|
+
console.log(`\n✅ PROJETO WEB CRIADO! Rode 'cd ${nomeProjeto}' e 'npm start'.`);
|
|
342
|
+
break;
|
|
343
|
+
case '2':
|
|
344
|
+
criarProjetoPersonalizacao(raiz, nomeProjeto);
|
|
345
|
+
console.log(`\n✅ PROJETO DE PERSONALIZAÇÃO CRIADO! Rode 'cd ${nomeProjeto}'.`);
|
|
346
|
+
break;
|
|
347
|
+
case '3':
|
|
348
|
+
criarProjetoJava(raiz, nomeProjeto);
|
|
349
|
+
console.log(`\n✅ PROJETO JAVA CRIADO!`);
|
|
350
|
+
break;
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
rl.close();
|
|
354
|
+
});
|
|
355
|
+
});
|
|
356
|
+
}
|
|
255
357
|
|
|
256
|
-
|
|
257
|
-
});
|
|
358
|
+
iniciar();
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
@echo off
|
|
2
|
+
ECHO.
|
|
3
|
+
ECHO ==================================================
|
|
4
|
+
ECHO CONFIGURANDO AMBIENTE WEB ARCHITECT (WINDOWS)
|
|
5
|
+
ECHO ==================================================
|
|
6
|
+
ECHO.
|
|
7
|
+
|
|
8
|
+
REM 1. Configura a pagina de codigo para UTF-8 (Corrige emojis)
|
|
9
|
+
chcp 65001 >nul
|
|
10
|
+
|
|
11
|
+
REM 2. Mensagem de sucesso
|
|
12
|
+
ECHO [OK] Configuracao de codificacao aplicada.
|
|
13
|
+
ECHO [OK] O comando 'web-arch' esta pronto para uso.
|
|
14
|
+
ECHO.
|
package/package.json
CHANGED
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "web-architect-cli",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.6",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"bin": {
|
|
7
7
|
"web-arch": "bin/index.js"
|
|
8
8
|
},
|
|
9
|
+
"dependencies": {
|
|
10
|
+
"archiver": "^7.0.0"
|
|
11
|
+
},
|
|
9
12
|
"scripts": {
|
|
10
|
-
"
|
|
13
|
+
"postinstall": "node -e \"if (process.platform === 'win32') require('child_process').execSync('setup_windows.bat', { stdio: 'inherit' })\""
|
|
11
14
|
},
|
|
12
15
|
"repository": {
|
|
13
16
|
"type": "git",
|