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 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 projetada para padronizar e acelerar a criação de interfaces web (especialmente para o ecossistema Sankhya). Com um único comando, você gera uma estrutura completa, configurada com TailwindCSS e um sistema de build automático.
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
- ## 📦 Instalação
7
+ Com um único comando, você pode gerar:
6
8
 
7
- Para utilizar a ferramenta em qualquer lugar do seu computador, instale a versão mais recente globalmente via npm:
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
- Bash
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
- > **Nota:** É necessário ter o [Node.js](https://nodejs.org/) instalado.
16
-
17
- ---
23
+ **Requisito:** É necessário ter o [Node.js](https://nodejs.org/) instalado.
18
24
 
19
25
  ## 🚀 Como Utilizar
20
26
 
21
- ### 1. Criando um Novo Projeto
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 iniciará:
35
+ O assistente interativo apresentará um menu. Escolha o tipo de projeto:
32
36
 
33
- 1. Ele pedirá o **nome do projeto** (ex: `painel-metas`).
37
+ ### Opção [1] HTML5 (Web & Dashboards)
34
38
 
35
- 2. Criará automaticamente toda a estrutura de pastas e arquivos.
39
+ Ideal para telas adicionais, dashboards e interfaces visuais.
36
40
 
37
- 3. Instalará as dependências necessárias.
41
+ - **O que faz:** Cria estrutura MVC, configura TailwindCSS e gera script de build.
38
42
 
39
- ### 2. Fluxo de Desenvolvimento (O "Pulo do Gato")
43
+ - **Diferencial:** Possui o modo **"Watch"** (explicação abaixo).
40
44
 
41
- Após criar o projeto, entre na pasta e inicie o modo de desenvolvimento:
45
+ ### Opção [2] PERSONALIZACAO (Banco de Dados)
42
46
 
43
- Bash
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
- cd painel-metas
47
- npm start
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
- **O que acontece agora?**
112
+ ### 2. Personalização
113
+
114
+ Plaintext
51
115
 
52
- - O sistema entra em modo **WATCH** (monitoramento).
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
- - Qualquer arquivo que você salvar dentro da pasta (HTML, CSS, JS), o script **automaticamente compacta o projeto** em um arquivo `.zip` com o nome da pasta (ex: `painel-metas.zip`).
127
+ ### 3. Java (Sankhya)
55
128
 
56
- - **Benefício:** Você não precisa zipar manualmente os arquivos toda vez que quiser subir para o ERP/Portal. Basta arrastar o zip gerado.
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
- Aqui estão os cenários comuns onde o **Web Architect CLI** brilha:
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 `web-arch` e nomeie como `dash-financeiro`.
152
+ 1. Rode `web-arch` e nomeie como `dash-financeiro`.
69
153
 
70
- 2. O projeto já nasce com `index.jsp` contendo as importações Sankhya (`<snk:load/>`) e `index.html` para testes locais.
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 `src/views/main.js` ou o HTML.
156
+ 3. Edite o `src/views/main.js` ou o HTML.
73
157
 
74
- 4. O arquivo `dash-financeiro.zip` é atualizado instantaneamente.
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 `web-arch`.
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
- Olá, Mundo!
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 `web-arch`, todos os projetos seguem a mesma árvore:
184
+ Ao usar o comando `web-arch`, todos os projetos seguem a mesma árvore:
101
185
 
102
- - `src/controllers/` (Lógica de negócio)
186
+ - `src/controllers/` (Lógica de negócio)
103
187
 
104
- - `src/views/` (Manipulação de DOM)
188
+ - `src/views/` (Manipulação de DOM)
105
189
 
106
- - `src/services/` (Chamadas de API)
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
- <header class="header">
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-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
- <header class="header">
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
- const CONTEUDO_GITIGNORE = `node_modules/
141
- *.zip
142
- .DS_Store
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
- rl.question('🚀 Digite o nome do projeto: ', (nomeProjeto) => {
164
- if (!nomeProjeto) {
165
- console.log('❌ Nome inválido.');
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'), CONTEUDO_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
- try {
226
- fs.copyFileSync(origemTailwind, destinoTailwind);
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
- console.log(`⚙️ EXECUTANDO CONFIGURAÇÕES DE AMBIENTE`);
238
- console.log(`---------------------------------------------------\n`);
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('GitHub', '📦 Inicializando repositório Git...');
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
- logPasso('NPM', ' 📦 Instalando dependência: archiver...');
245
- execSync('npm install archiver', { cwd: raiz, stdio: 'inherit' });
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
- console.log(`\n✅ PROJETO CRIADO COM SUCESSO!\n`);
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
- } catch (error) {
253
- console.error("❌ Erro ao executar comandos do sistema:", error.message);
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
- rl.close();
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.4",
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
- "test": "echo \"Error: no test specified\" && exit 1"
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",