@purecore/one-server-4-all 0.1.0
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/.hot-server-certs/localhost.crt +22 -0
- package/.hot-server-certs/localhost.crt.bak. +13 -0
- package/.hot-server-certs/localhost.key +28 -0
- package/.hot-server-certs/localhost.key.bak. +28 -0
- package/APAGAR_cria.sh +51 -0
- package/CHANGELOG.md +89 -0
- package/COMPARACAO_LIVE_SERVER.md +101 -0
- package/README.md +197 -0
- package/dist/cert-generator.js +155 -0
- package/dist/deployer.js +128 -0
- package/dist/index.js +40 -0
- package/dist/server.js +632 -0
- package/dist/test/server.test.js +34 -0
- package/dist/validator.js +49 -0
- package/dist/watcher.js +58 -0
- package/hot-server.deps.graflow +1 -0
- package/install-ignite.ps1 +26 -0
- package/install-ignite.sh +25 -0
- package/jest.config.cjs +7 -0
- package/package.json +36 -0
- package/reports/21-12-2025_04-20.md +154 -0
- package/reports/21-12-2025_04-21.md +184 -0
- package/reports/31-12-2025_21-15.md +29 -0
- package/reports/31-12-2025_21-45.md +19 -0
- package/reports/31-12-2025_22-00.md +31 -0
- package/src/cert-generator.ts +173 -0
- package/src/deployer.ts +182 -0
- package/src/index.ts +44 -0
- package/src/server.ts +741 -0
- package/src/validator.ts +51 -0
- package/src/watcher.ts +63 -0
- package/tsconfig.json +15 -0
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Um mini-validador type-safe inspirado no Zod.
|
|
3
|
+
* Garante que nossa configuração de entrada seja válida sem importar bibliotecas externas.
|
|
4
|
+
*/
|
|
5
|
+
export class Schema {
|
|
6
|
+
validator;
|
|
7
|
+
constructor(validator) {
|
|
8
|
+
this.validator = validator;
|
|
9
|
+
}
|
|
10
|
+
parse(value) {
|
|
11
|
+
return this.validator(value);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
export const z = {
|
|
15
|
+
string: () => new Schema((val) => {
|
|
16
|
+
if (typeof val !== 'string')
|
|
17
|
+
throw new Error(`Expected string, received ${typeof val}`);
|
|
18
|
+
return val;
|
|
19
|
+
}),
|
|
20
|
+
number: () => new Schema((val) => {
|
|
21
|
+
const num = Number(val);
|
|
22
|
+
if (isNaN(num))
|
|
23
|
+
throw new Error(`Expected number, received ${val}`);
|
|
24
|
+
return num;
|
|
25
|
+
}),
|
|
26
|
+
object: (shape) => new Schema((val) => {
|
|
27
|
+
if (typeof val !== 'object' || val === null)
|
|
28
|
+
throw new Error("Expected object");
|
|
29
|
+
const result = {};
|
|
30
|
+
const obj = val;
|
|
31
|
+
for (const key in shape) {
|
|
32
|
+
try {
|
|
33
|
+
result[key] = shape[key].parse(obj[key]);
|
|
34
|
+
}
|
|
35
|
+
catch (e) {
|
|
36
|
+
throw new Error(`In field '${key}': ${e.message}`);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return result;
|
|
40
|
+
})
|
|
41
|
+
};
|
|
42
|
+
// Configuração Schema para o nosso servidor
|
|
43
|
+
export const configSchema = z.object({
|
|
44
|
+
port: z.number(),
|
|
45
|
+
root: z.string(),
|
|
46
|
+
open: z.string(), // boolean as string 'true'/'false' simplificado para CLI
|
|
47
|
+
spa: z.string(), // boolean as string 'true'/'false' para suporte SPA
|
|
48
|
+
https: z.string() // boolean as string 'true'/'false' para modo HTTPS
|
|
49
|
+
});
|
package/dist/watcher.js
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { EventEmitter } from 'node:events';
|
|
4
|
+
export class Watcher extends EventEmitter {
|
|
5
|
+
root;
|
|
6
|
+
timeout = null;
|
|
7
|
+
watcher = null;
|
|
8
|
+
constructor(root) {
|
|
9
|
+
super();
|
|
10
|
+
this.root = path.resolve(root);
|
|
11
|
+
}
|
|
12
|
+
start() {
|
|
13
|
+
if (!fs.existsSync(this.root)) {
|
|
14
|
+
console.error(`❌ Diretório não encontrado: ${this.root}`);
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
try {
|
|
18
|
+
// Recursive watch é suportado na maioria dos OS modernos Node v20+
|
|
19
|
+
// No Linux pode ter limitações dependendo do FS, mas para dev local funciona bem.
|
|
20
|
+
this.watcher = fs.watch(this.root, { recursive: true }, (eventType, filename) => {
|
|
21
|
+
if (filename && !this.isIgnored(filename.toString())) {
|
|
22
|
+
this.debounceChange(filename.toString());
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
console.log(`👀 Observando mudanças em: ${this.root}`);
|
|
26
|
+
}
|
|
27
|
+
catch (err) {
|
|
28
|
+
console.error("Erro ao iniciar watcher:", err);
|
|
29
|
+
// Fallback para não-recursivo se falhar (ex: Linux kernels antigos)
|
|
30
|
+
console.warn("⚠️ Fallback para watcher não recursivo.");
|
|
31
|
+
this.watcher = fs.watch(this.root, (event, filename) => {
|
|
32
|
+
if (filename)
|
|
33
|
+
this.debounceChange(filename.toString());
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
isIgnored(filename) {
|
|
38
|
+
// Ignorar node_modules e arquivos ocultos (.git, etc)
|
|
39
|
+
return filename.includes('node_modules') ||
|
|
40
|
+
filename.includes('.git') ||
|
|
41
|
+
filename.endsWith('.tmp');
|
|
42
|
+
}
|
|
43
|
+
debounceChange(filename) {
|
|
44
|
+
// Evita múltiplos disparos (ex: salvar arquivo dispara 2 eventos 'change' e 'rename')
|
|
45
|
+
if (this.timeout)
|
|
46
|
+
clearTimeout(this.timeout);
|
|
47
|
+
this.timeout = setTimeout(() => {
|
|
48
|
+
console.log(`🔄 Arquivo alterado: ${filename}`);
|
|
49
|
+
this.emit('change', filename);
|
|
50
|
+
}, 100); // 100ms debounce
|
|
51
|
+
}
|
|
52
|
+
stop() {
|
|
53
|
+
if (this.watcher) {
|
|
54
|
+
this.watcher.close();
|
|
55
|
+
this.watcher = null;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(hot-server)->(0.1.0)
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
$ignitePath = "$env:USERPROFILE\.purecore\ignite"
|
|
2
|
+
$binPath = "$env:USERPROFILE\.purecore\bin"
|
|
3
|
+
|
|
4
|
+
Write-Host "Installing PureCore Ignite..."
|
|
5
|
+
|
|
6
|
+
New-Item -ItemType Directory -Force -Path $ignitePath | Out-Null
|
|
7
|
+
New-Item -ItemType Directory -Force -Path $binPath | Out-Null
|
|
8
|
+
|
|
9
|
+
Copy-Item .\ignite.exe "$ignitePath\ignite.exe" -Force
|
|
10
|
+
|
|
11
|
+
$target = "$binPath\ignite.exe"
|
|
12
|
+
$source = "$ignitePath\ignite.exe"
|
|
13
|
+
|
|
14
|
+
cmd /c mklink $target $source | Out-Null
|
|
15
|
+
|
|
16
|
+
$envPath = [Environment]::GetEnvironmentVariable("Path", "User")
|
|
17
|
+
if ($envPath -notlike "*$binPath*") {
|
|
18
|
+
[Environment]::SetEnvironmentVariable(
|
|
19
|
+
"Path",
|
|
20
|
+
"$envPath;$binPath",
|
|
21
|
+
"User"
|
|
22
|
+
)
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
Write-Host "Ignite installed successfully."
|
|
26
|
+
Write-Host "Restart your terminal and run: ignite"
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
set -e
|
|
4
|
+
|
|
5
|
+
IGNITE_PATH="$HOME/.purecore/ignite"
|
|
6
|
+
BIN_PATH="$HOME/.local/bin"
|
|
7
|
+
|
|
8
|
+
mkdir -p "$IGNITE_PATH"
|
|
9
|
+
mkdir -p "$BIN_PATH"
|
|
10
|
+
|
|
11
|
+
echo "Installing PureCore Ignite..."
|
|
12
|
+
|
|
13
|
+
# exemplo: copia binário ou script JS empacotado
|
|
14
|
+
cp ./ignite "$IGNITE_PATH/ignite"
|
|
15
|
+
chmod +x "$IGNITE_PATH/ignite"
|
|
16
|
+
|
|
17
|
+
ln -sf "$IGNITE_PATH/ignite" "$BIN_PATH/ignite"
|
|
18
|
+
|
|
19
|
+
if [[ ":$PATH:" != *":$BIN_PATH:"* ]]; then
|
|
20
|
+
echo "export PATH=\"$BIN_PATH:\$PATH\"" >> "$HOME/.bashrc"
|
|
21
|
+
echo "export PATH=\"$BIN_PATH:\$PATH\"" >> "$HOME/.zshrc"
|
|
22
|
+
fi
|
|
23
|
+
|
|
24
|
+
echo "Ignite installed successfully."
|
|
25
|
+
echo "Restart your terminal and run: ignite"
|
package/jest.config.cjs
ADDED
package/package.json
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@purecore/one-server-4-all",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Zero dependency modern hot-reload server replacement",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"bin": {
|
|
8
|
+
"one-server": "./dist/index.js",
|
|
9
|
+
"vai-server": "./dist/index.js"
|
|
10
|
+
},
|
|
11
|
+
"scripts": {
|
|
12
|
+
"build": "tsc",
|
|
13
|
+
"start": "node dist/index.js",
|
|
14
|
+
"dev": "bun run src/index.ts",
|
|
15
|
+
"dev:https": "bun run src/index.ts --https=true",
|
|
16
|
+
"test": "jest",
|
|
17
|
+
"certs:generate": "bun run src/cert-generator.ts generate",
|
|
18
|
+
"certs:clean": "bun run src/cert-generator.ts clean",
|
|
19
|
+
"certs:info": "bun run src/cert-generator.ts info"
|
|
20
|
+
},
|
|
21
|
+
"keywords": [
|
|
22
|
+
"http-server",
|
|
23
|
+
"hot-reload",
|
|
24
|
+
"hot-server",
|
|
25
|
+
"live-server",
|
|
26
|
+
"zero-dependency"
|
|
27
|
+
],
|
|
28
|
+
"author": "Suissa",
|
|
29
|
+
"license": "CEL",
|
|
30
|
+
"devDependencies": {
|
|
31
|
+
"@types/node": "^20.11.0",
|
|
32
|
+
"ts-jest": "^29.1.2",
|
|
33
|
+
"typescript": "^5.3.3"
|
|
34
|
+
},
|
|
35
|
+
"dependencies": {}
|
|
36
|
+
}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
# Relatório de Implementação: Purecore Hot Server - Funcionalidades Avançadas
|
|
2
|
+
|
|
3
|
+
## 📋 Resumo das Implementações
|
|
4
|
+
|
|
5
|
+
Foram implementadas com sucesso as 4 funcionalidades solicitadas do documento `COMPARACAO_LIVE_SERVER.md`, mantendo a filosofia **zero dependencies** do projeto.
|
|
6
|
+
|
|
7
|
+
## ✅ Implementações Realizadas
|
|
8
|
+
|
|
9
|
+
### 1. Injeção de CSS (CSS Hot Loading)
|
|
10
|
+
|
|
11
|
+
**O que foi implementado:**
|
|
12
|
+
- Script injetado no HTML agora diferencia mudanças em arquivos CSS de outros tipos
|
|
13
|
+
- Quando um arquivo `.css` é modificado, em vez de recarregar toda a página, o sistema:
|
|
14
|
+
- Identifica os links `<link rel="stylesheet">` que referenciam o arquivo CSS alterado
|
|
15
|
+
- Adiciona um timestamp de cache busting (`?v=timestamp`) para forçar o reload do CSS
|
|
16
|
+
- Mantém o resto da página intacto
|
|
17
|
+
|
|
18
|
+
**Arquivos modificados:**
|
|
19
|
+
- `src/server.ts`: Script injetado e método `notifyClients()` atualizado
|
|
20
|
+
- `src/watcher.ts`: Compatibilidade mantida
|
|
21
|
+
|
|
22
|
+
**Técnicas utilizadas:**
|
|
23
|
+
- JSON parsing no client-side para distinguir tipos de mudança
|
|
24
|
+
- DOM manipulation para atualizar apenas CSS links
|
|
25
|
+
- Fallback para compatibilidade com mensagens antigas
|
|
26
|
+
|
|
27
|
+
### 2. Suporte a SPA (Single Page Applications)
|
|
28
|
+
|
|
29
|
+
**O que foi implementado:**
|
|
30
|
+
- Nova flag `--spa` (padrão: `false`)
|
|
31
|
+
- Quando habilitado (`--spa=true`):
|
|
32
|
+
- Rotas não encontradas (404) redirecionam automaticamente para `index.html`
|
|
33
|
+
- Permite que frameworks como React/Vue assumam o controle do roteamento
|
|
34
|
+
- Configuração integrada ao sistema de validação
|
|
35
|
+
|
|
36
|
+
**Arquivos modificados:**
|
|
37
|
+
- `src/index.ts`: Parsing da flag `--spa`
|
|
38
|
+
- `src/validator.ts`: Schema atualizado para incluir configuração SPA
|
|
39
|
+
- `src/server.ts`: Lógica de fallback para SPA implementada
|
|
40
|
+
|
|
41
|
+
**Técnicas utilizadas:**
|
|
42
|
+
- Validação type-safe com mini-Zod
|
|
43
|
+
- Parsing de argumentos CLI robusto
|
|
44
|
+
- Lógica condicional no handler de arquivos
|
|
45
|
+
|
|
46
|
+
### 3. Mime-Types Robustos
|
|
47
|
+
|
|
48
|
+
**O que foi implementado:**
|
|
49
|
+
- Expansão significativa da lista `MIME_TYPES`
|
|
50
|
+
- Suporte completo para:
|
|
51
|
+
- **Vídeos**: `.mp4`, `.webm`, `.ogg`, `.avi`, `.mov`, `.wmv`, `.flv`
|
|
52
|
+
- **Áudios**: `.mp3`, `.wav`, `.ogg`, `.aac`, `.m4a`, `.opus`
|
|
53
|
+
- **Fontes**: `.woff`, `.woff2`, `.ttf`, `.otf`, `.eot`
|
|
54
|
+
- **Imagens extras**: `.webp`, `.bmp`, `.tiff`, `.tif`
|
|
55
|
+
- **Documentos**: `.pdf`, `.csv`, `.yaml`, `.toml`
|
|
56
|
+
- **Arquivos comprimidos**: `.zip`, `.gzip`, `.tar`
|
|
57
|
+
- **Web**: `.webmanifest`
|
|
58
|
+
|
|
59
|
+
**Arquivos modificados:**
|
|
60
|
+
- `src/server.ts`: Lista `MIME_TYPES` expandida de ~10 para ~35 tipos
|
|
61
|
+
|
|
62
|
+
**Técnicas utilizadas:**
|
|
63
|
+
- Organização por categoria para manutenção
|
|
64
|
+
- Cobertura abrangente de tipos modernos da web
|
|
65
|
+
|
|
66
|
+
### 4. CORS (Cross-Origin Resource Sharing)
|
|
67
|
+
|
|
68
|
+
**O que foi implementado:**
|
|
69
|
+
- Headers CORS adicionados a todas as respostas de arquivos estáticos:
|
|
70
|
+
- `Access-Control-Allow-Origin: *`
|
|
71
|
+
- `Access-Control-Allow-Methods: GET, HEAD, OPTIONS`
|
|
72
|
+
- `Access-Control-Allow-Headers: Content-Type`
|
|
73
|
+
- Aplicado tanto para arquivos HTML injetados quanto para arquivos binários/stream
|
|
74
|
+
|
|
75
|
+
**Arquivos modificados:**
|
|
76
|
+
- `src/server.ts`: Headers CORS adicionados em ambos os caminhos de resposta
|
|
77
|
+
|
|
78
|
+
**Técnicas utilizadas:**
|
|
79
|
+
- Headers aplicados consistentemente em todas as respostas
|
|
80
|
+
- Suporte a métodos HTTP comuns
|
|
81
|
+
- Configuração permissiva para desenvolvimento
|
|
82
|
+
|
|
83
|
+
## 🔧 Arquitetura Mantida
|
|
84
|
+
|
|
85
|
+
- **Zero Dependencies**: Todas as implementações usam apenas APIs nativas do Node.js
|
|
86
|
+
- **TypeScript Estrito**: Código mantido com tipagem forte
|
|
87
|
+
- **Performance**: Implementações otimizadas e eficientes
|
|
88
|
+
- **Compatibilidade**: Fallback para funcionalidades antigas
|
|
89
|
+
|
|
90
|
+
## 🧪 Como Testar
|
|
91
|
+
|
|
92
|
+
### CSS Injection:
|
|
93
|
+
```bash
|
|
94
|
+
# Inicie o servidor
|
|
95
|
+
npx ts-node src/index.ts
|
|
96
|
+
|
|
97
|
+
# Modifique qualquer arquivo .css - deve atualizar sem reload da página
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
### SPA Support:
|
|
101
|
+
```bash
|
|
102
|
+
# Com suporte SPA
|
|
103
|
+
npx ts-node src/index.ts --spa=true
|
|
104
|
+
|
|
105
|
+
# Acesse qualquer rota inexistente - deve carregar index.html
|
|
106
|
+
# Ex: http://localhost:9999/qualquer-rota-inexistente
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
### MIME Types:
|
|
110
|
+
```bash
|
|
111
|
+
# Sirva arquivos de diferentes tipos
|
|
112
|
+
# Vídeos, fontes, manifestos agora são servidos com MIME types corretos
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### CORS:
|
|
116
|
+
```bash
|
|
117
|
+
# Arquivos podem ser acessados de outros domínios/origins
|
|
118
|
+
# Útil para desenvolvimento com múltiplos servidores locais
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
## 📈 Benefícios Alcançados
|
|
122
|
+
|
|
123
|
+
1. **Performance Melhorada**: CSS injection evita reloads desnecessários
|
|
124
|
+
2. **Compatibilidade SPA**: Suporte nativo a frameworks modernos
|
|
125
|
+
3. **Robustez**: MIME types abrangentes para todos os tipos de arquivo
|
|
126
|
+
4. **Flexibilidade**: CORS permite integrações cross-origin
|
|
127
|
+
5. **Manutenibilidade**: Código organizado e bem documentado
|
|
128
|
+
|
|
129
|
+
## 🎯 Resultado Final
|
|
130
|
+
|
|
131
|
+
O Purecore Hot Server agora oferece funcionalidades comparáveis ao `live-server` mantendo sua vantagem principal: **zero dependencies**. As implementações são:
|
|
132
|
+
|
|
133
|
+
- ✅ **Leves**: Sem adicionar dependências externas
|
|
134
|
+
- ✅ **Eficientes**: Usam APIs nativas do Node.js
|
|
135
|
+
- ✅ **Type-Safe**: Mantêm tipagem TypeScript rigorosa
|
|
136
|
+
- ✅ **Compatíveis**: Funcionam com projetos existentes
|
|
137
|
+
|
|
138
|
+
## 🔗 Fontes de Informação Utilizadas
|
|
139
|
+
|
|
140
|
+
- [MDN Web Docs - MIME Types](https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types)
|
|
141
|
+
- [MDN Web Docs - CORS](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS)
|
|
142
|
+
- [Node.js Documentation - HTTP Module](https://nodejs.org/api/http.html)
|
|
143
|
+
- [TypeScript Handbook](https://www.typescriptlang.org/docs/)
|
|
144
|
+
- [Server-Sent Events Specification](https://html.spec.whatwg.org/multipage/server-sent-events.html)
|
|
145
|
+
|
|
146
|
+
## 📝 Próximos Passos
|
|
147
|
+
|
|
148
|
+
O servidor agora está pronto para uso avançado com:
|
|
149
|
+
- Hot reload inteligente (CSS injection + full reload)
|
|
150
|
+
- Suporte SPA completo
|
|
151
|
+
- MIME types robustos
|
|
152
|
+
- CORS habilitado
|
|
153
|
+
|
|
154
|
+
Para deploy em produção, considere adicionar configurações de segurança apropriadas.
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
# Relatório de Implementação: HTTPS + Certificados Auto-Assinados + Logs Avançados
|
|
2
|
+
|
|
3
|
+
## 🎯 Resumo das Implementações
|
|
4
|
+
|
|
5
|
+
Foram implementadas com sucesso as funcionalidades de HTTPS, geração automática de certificados auto-assinados, e sistema avançado de logs com indicadores visuais e detalhamento de arquivos servidos.
|
|
6
|
+
|
|
7
|
+
## ✅ Implementações Realizadas
|
|
8
|
+
|
|
9
|
+
### 1. 🔒 Suporte Completo a HTTPS
|
|
10
|
+
|
|
11
|
+
**O que foi implementado:**
|
|
12
|
+
- Modo HTTPS opcional ativado pela flag `--https=true`
|
|
13
|
+
- Geração automática de certificados SSL auto-assinados
|
|
14
|
+
- Servidor HTTP/HTTPS dinâmico baseado na configuração
|
|
15
|
+
- Suporte completo a protocolos HTTP e HTTPS
|
|
16
|
+
|
|
17
|
+
**Arquivos modificados:**
|
|
18
|
+
- `src/server.ts`: Classe HotServer modificada para suportar HTTPS
|
|
19
|
+
- `src/index.ts`: Parsing da flag `--https`
|
|
20
|
+
- `src/validator.ts`: Validação da configuração HTTPS
|
|
21
|
+
|
|
22
|
+
**Técnicas utilizadas:**
|
|
23
|
+
- Módulo `https` do Node.js para servidor SSL
|
|
24
|
+
- Detecção automática de certificados existentes
|
|
25
|
+
- Fallback gracioso para modo HTTP quando necessário
|
|
26
|
+
- Protocol-aware browser opening
|
|
27
|
+
|
|
28
|
+
### 2. 🛠️ Sistema de Geração de Certificados
|
|
29
|
+
|
|
30
|
+
**O que foi implementado:**
|
|
31
|
+
- Classe `CertGenerator` completa para gerenciamento de certificados
|
|
32
|
+
- Geração automática de pares chave privada/certificado
|
|
33
|
+
- Comandos CLI para geração, limpeza e informações
|
|
34
|
+
- Certificados salvos em `.hot-server-certs/` padrão
|
|
35
|
+
|
|
36
|
+
**Arquivos criados:**
|
|
37
|
+
- `src/cert-generator.ts`: Sistema completo de geração de certificados
|
|
38
|
+
|
|
39
|
+
**Técnicas utilizadas:**
|
|
40
|
+
- Crypto API nativa do Node.js para geração RSA
|
|
41
|
+
- File system operations para persistência
|
|
42
|
+
- Command-line interface com subcomandos
|
|
43
|
+
- Validação de existência de certificados
|
|
44
|
+
|
|
45
|
+
### 3. 🔓🔒 Indicadores Visuais no Terminal
|
|
46
|
+
|
|
47
|
+
**O que foi implementado:**
|
|
48
|
+
- Emojis de cadeado no log de inicialização:
|
|
49
|
+
- 🔓 para modo HTTP (cadeado aberto)
|
|
50
|
+
- 🔒 para modo HTTPS (cadeado fechado)
|
|
51
|
+
- URLs com protocolo correto (http/https)
|
|
52
|
+
- Visual feedback imediato do modo de segurança
|
|
53
|
+
|
|
54
|
+
**Arquivos modificados:**
|
|
55
|
+
- `src/server.ts`: Logs de inicialização com indicadores visuais
|
|
56
|
+
|
|
57
|
+
**Técnicas utilizadas:**
|
|
58
|
+
- Template literals com emojis Unicode
|
|
59
|
+
- Detecção dinâmica de protocolo
|
|
60
|
+
- Console output formatting
|
|
61
|
+
|
|
62
|
+
### 4. 📊 Sistema Avançado de Logs
|
|
63
|
+
|
|
64
|
+
**O que foi implementado:**
|
|
65
|
+
- Logs detalhados para cada arquivo servido
|
|
66
|
+
- Informações de tamanho e tipo MIME
|
|
67
|
+
- Parsing automático de recursos HTML
|
|
68
|
+
- Detecção de CSS, JavaScript e imagens no HTML
|
|
69
|
+
- Logs especiais para injeção de hot-reload
|
|
70
|
+
|
|
71
|
+
**Arquivos modificados:**
|
|
72
|
+
- `src/server.ts`: Sistema completo de logging
|
|
73
|
+
|
|
74
|
+
**Técnicas utilizadas:**
|
|
75
|
+
- Regex parsing para recursos HTML
|
|
76
|
+
- File system stats para informações de tamanho
|
|
77
|
+
- Formatação human-readable de bytes
|
|
78
|
+
- Emoji categorization por tipo de recurso
|
|
79
|
+
|
|
80
|
+
## 🔧 Funcionalidades Técnicas
|
|
81
|
+
|
|
82
|
+
### Scripts NPM Adicionados
|
|
83
|
+
```json
|
|
84
|
+
{
|
|
85
|
+
"dev:https": "ts-node src/index.ts --https=true",
|
|
86
|
+
"certs:generate": "ts-node src/cert-generator.ts generate",
|
|
87
|
+
"certs:clean": "ts-node src/cert-generator.ts clean",
|
|
88
|
+
"certs:info": "ts-node src/cert-generator.ts info"
|
|
89
|
+
}
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### Estrutura de Certificados
|
|
93
|
+
```
|
|
94
|
+
.hot-server-certs/
|
|
95
|
+
├── localhost.key # Chave privada RSA
|
|
96
|
+
└── localhost.crt # Certificado auto-assinado
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
### Exemplo de Logs de Saída
|
|
100
|
+
```
|
|
101
|
+
🔐 Gerando certificados auto-assinados...
|
|
102
|
+
✅ Certificados gerados com sucesso!
|
|
103
|
+
|
|
104
|
+
🚀 Hot-Server rodando!
|
|
105
|
+
-----------------------------------
|
|
106
|
+
📂 Root: /path/to/project
|
|
107
|
+
🔒 Local: https://localhost:9999
|
|
108
|
+
-----------------------------------
|
|
109
|
+
|
|
110
|
+
📄 Servindo: index.html (2.1 KB) [text/html]
|
|
111
|
+
🔍 Recursos encontrados em index.html:
|
|
112
|
+
🎨 styles.css
|
|
113
|
+
📜 app.js
|
|
114
|
+
🖼️ logo.png
|
|
115
|
+
🌐 HTML injetado com hot-reload: index.html
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
## 🧪 Como Testar
|
|
119
|
+
|
|
120
|
+
### Modo HTTPS
|
|
121
|
+
```bash
|
|
122
|
+
# Ativar HTTPS
|
|
123
|
+
npm run dev:https
|
|
124
|
+
|
|
125
|
+
# Ou manualmente
|
|
126
|
+
ts-node src/index.ts --https=true
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
### Gerenciamento de Certificados
|
|
130
|
+
```bash
|
|
131
|
+
# Gerar certificados
|
|
132
|
+
npm run certs:generate
|
|
133
|
+
|
|
134
|
+
# Ver informações
|
|
135
|
+
npm run certs:info
|
|
136
|
+
|
|
137
|
+
# Limpar certificados
|
|
138
|
+
npm run certs:clean
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
### Logs Detalhados
|
|
142
|
+
1. Inicie o servidor
|
|
143
|
+
2. Abra uma página HTML no navegador
|
|
144
|
+
3. Observe no terminal:
|
|
145
|
+
- 📄 Arquivos servidos com metadados
|
|
146
|
+
- 🔍 Recursos detectados automaticamente
|
|
147
|
+
- 🌐 Confirmação de injeção
|
|
148
|
+
|
|
149
|
+
## 📈 Benefícios Alcançados
|
|
150
|
+
|
|
151
|
+
### Segurança
|
|
152
|
+
- ✅ Desenvolvimento local com HTTPS
|
|
153
|
+
- ✅ Certificados auto-gerados automaticamente
|
|
154
|
+
- ✅ Feedback visual de segurança
|
|
155
|
+
|
|
156
|
+
### Desenvolvimento
|
|
157
|
+
- ✅ Logs detalhados para debugging
|
|
158
|
+
- ✅ Visibilidade de recursos HTML
|
|
159
|
+
- ✅ Protocol-aware operations
|
|
160
|
+
|
|
161
|
+
### Experiência do Desenvolvedor
|
|
162
|
+
- ✅ Indicadores visuais claros
|
|
163
|
+
- ✅ Automação de tarefas repetitivas
|
|
164
|
+
- ✅ CLI intuitiva e completa
|
|
165
|
+
|
|
166
|
+
## 🎯 Resultado Final
|
|
167
|
+
|
|
168
|
+
O Purecore Hot Server agora oferece:
|
|
169
|
+
|
|
170
|
+
- **🔒 HTTPS nativo** com certificados auto-assinados
|
|
171
|
+
- **🛠️ Gerenciamento automático** de certificados SSL
|
|
172
|
+
- **🔓🔒 Indicadores visuais** de segurança no terminal
|
|
173
|
+
- **📊 Logs avançados** com parsing de recursos HTML
|
|
174
|
+
- **📁 Informações detalhadas** de arquivos servidos
|
|
175
|
+
|
|
176
|
+
**Mantendo a filosofia zero dependencies e arquitetura moderna!** 🚀
|
|
177
|
+
|
|
178
|
+
## 🔗 Fontes de Informação Utilizadas
|
|
179
|
+
|
|
180
|
+
- [Node.js HTTPS Documentation](https://nodejs.org/api/https.html)
|
|
181
|
+
- [OpenSSL Certificate Generation](https://www.openssl.org/docs/man1.1.1/man1/req.html)
|
|
182
|
+
- [MDN Web Docs - SSL/TLS](https://developer.mozilla.org/en-US/docs/Glossary/SSL)
|
|
183
|
+
- [RFC 5280 - Certificate Standards](https://tools.ietf.org/html/rfc5280)
|
|
184
|
+
- [Unicode Emoji Reference](https://unicode.org/emoji/charts/full-emoji-list.html)
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# Relatório de Modificação - Log Estilo Vite
|
|
2
|
+
|
|
3
|
+
**Data:** 31-12-2025
|
|
4
|
+
**Tarefa:** Customizar o log de inicialização do `hot-server` para ser idêntico ao do Vite.
|
|
5
|
+
|
|
6
|
+
## O que foi feito
|
|
7
|
+
|
|
8
|
+
- Refatorado o método `start()` na classe `HotServer` em `src/server.ts`.
|
|
9
|
+
- Implementada a detecção de interfaces de rede usando o módulo nativo `node:os`.
|
|
10
|
+
- Adicionada medição de tempo de inicialização (`startTime`) para exibir "ready in X ms".
|
|
11
|
+
- Estilização completa usando códigos de escape ANSI para cores e negrito, imitando perfeitamente o visual premium do Vite.
|
|
12
|
+
- Substituído o nome "VITE" por "HOT-SERVER".
|
|
13
|
+
- Adicionado o link de ajuda "press h + enter to show help".
|
|
14
|
+
- Atualizado o feedback de porta em uso para também seguir o padrão visual.
|
|
15
|
+
- Corrigido o `.gitignore` para incluir a pasta `dist`.
|
|
16
|
+
- Incrementada a versão do projeto para `0.3.1`.
|
|
17
|
+
|
|
18
|
+
## Por que foi feito
|
|
19
|
+
|
|
20
|
+
- Para melhorar a experiência do desenvolvedor (DX), fornecendo um feedback visual familiar e profissional.
|
|
21
|
+
- Para facilitar o acesso ao servidor a partir de outros dispositivos na mesma rede (exibindo IPs de Network).
|
|
22
|
+
- Para alinhar o projeto com as melhores práticas de estética moderna solicitadas pelo usuário.
|
|
23
|
+
|
|
24
|
+
## Como testar
|
|
25
|
+
|
|
26
|
+
1. Execute `bun run dev` ou `bun run src/index.ts`.
|
|
27
|
+
2. Observe o log de inicialização formatado no terminal.
|
|
28
|
+
3. Verifique se as URLs Local e Network estão corretas e acessíveis.
|
|
29
|
+
4. Tente iniciar o servidor em uma porta já ocupada para ver o novo log de fallback.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Relatório de Modificação - Porta Padrão
|
|
2
|
+
|
|
3
|
+
**Data:** 31-12-2025
|
|
4
|
+
**Tarefa:** Alterar a porta padrão do `hot-server` para 6000.
|
|
5
|
+
|
|
6
|
+
## O que foi feito
|
|
7
|
+
|
|
8
|
+
- Alterado o valor padrão de `port` em `src/index.ts` de `9999` para `6000`.
|
|
9
|
+
- Incrementada a versão do projeto para `0.3.2`.
|
|
10
|
+
- Atualizado o `CHANGELOG.md`.
|
|
11
|
+
|
|
12
|
+
## Por que foi feito
|
|
13
|
+
|
|
14
|
+
- Atender à solicitação do usuário de padronizar a porta de execução para 6000.
|
|
15
|
+
|
|
16
|
+
## Como testar
|
|
17
|
+
|
|
18
|
+
1. Execute `bun run src/index.ts`.
|
|
19
|
+
2. Verifique se o log exibe `http://localhost:6000/` por padrão.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Relatório de Modificação - Implementação do Deployer Interativo
|
|
2
|
+
|
|
3
|
+
**Data:** 31-12-2025
|
|
4
|
+
**Tarefa:** Substituir o script `cria.sh` por um comando `deploy` interativo integrado ao CLI do `hot-server`.
|
|
5
|
+
|
|
6
|
+
## O que foi feito
|
|
7
|
+
|
|
8
|
+
- Criada a classe `Deployer` em `src/deployer.ts` para gerenciar o processo de deploy.
|
|
9
|
+
- Implementada uma interface de linha de comando (CLI) interativa e visualmente "premium" usando `readline` e códigos ANSI.
|
|
10
|
+
- Automatizada a criação de configurações do Nginx (proxy reverso e suporte a WebSocket).
|
|
11
|
+
- Automatizado o uso do Certbot para geração de certificados SSL.
|
|
12
|
+
- Adicionada geração automática do comando de inicialização PM2 com nomes baseados no domínio/subdomínio.
|
|
13
|
+
- Integrado o novo comando no `src/index.ts` detectando o argumento `deploy`.
|
|
14
|
+
- Renomeado `cria.sh` para `APAGAR_cria.sh` (indicando depreciação).
|
|
15
|
+
- Incrementada versão para `0.4.0` e atualizado `CHANGELOG.md`.
|
|
16
|
+
|
|
17
|
+
## Por que foi feito
|
|
18
|
+
|
|
19
|
+
- Para oferecer uma experiência de deploy profissional e segura, eliminando a manipulação manual de scripts Shell.
|
|
20
|
+
- Para simplificar o fluxo de deploy em produção (Nginx + SSL + PM2) com um único comando Wizard.
|
|
21
|
+
- Para atender ao requisito de interface "bonita" e interativa no terminal.
|
|
22
|
+
|
|
23
|
+
## Como testar
|
|
24
|
+
|
|
25
|
+
1. Compile o projeto: `bun run build`.
|
|
26
|
+
2. Execute o deployer (simulação): `bun run src/index.ts deploy`.
|
|
27
|
+
3. Siga as instruções interativas no terminal.
|
|
28
|
+
- Digite um domínio (ex: `app.teste.com`).
|
|
29
|
+
- Confirme a porta (default `6000`).
|
|
30
|
+
- Observe o comando PM2 gerado.
|
|
31
|
+
- (Opcional) Confirme a configuração do Nginx (requer `sudo` e ambiente compatível).
|