@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,22 @@
|
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
|
2
|
+
MIIDpzCCAo+gAwIBAgIUQGcKRF3OckjoSvSN0/r3ekJrErgwDQYJKoZIhvcNAQEL
|
|
3
|
+
BQAwYzELMAkGA1UEBhMCQlIxCzAJBgNVBAgMAlNQMRIwEAYDVQQHDAlTYW8gUGF1
|
|
4
|
+
bG8xETAPBgNVBAoMCFB1cmVjb3JlMQwwCgYDVQQLDANEZXYxEjAQBgNVBAMMCWxv
|
|
5
|
+
Y2FsaG9zdDAeFw0yNTEyMjIwNjIyMTFaFw0yNjEyMjIwNjIyMTFaMGMxCzAJBgNV
|
|
6
|
+
BAYTAkJSMQswCQYDVQQIDAJTUDESMBAGA1UEBwwJU2FvIFBhdWxvMREwDwYDVQQK
|
|
7
|
+
DAhQdXJlY29yZTEMMAoGA1UECwwDRGV2MRIwEAYDVQQDDAlsb2NhbGhvc3QwggEi
|
|
8
|
+
MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCZoirbFplbvBwbN9EzoT5O8Xqa
|
|
9
|
+
LcrmM6t62O65rFQzFXzG3RzyTDEnuIFUObSndffUoUMCK0kwFQgFOPBHXs7kUsV1
|
|
10
|
+
5QquX3tNN37NuC1k3rtY/lFomTCBinyz7qU5Mg7PuxxuNy48wlZeQWW5FHuLP7Jx
|
|
11
|
+
SyxLI7pfQbmHOhSO/WOVz7ZAUu0jD3Ngl4RyJTJ/rB57kwRhIRPGRuk6IMOHHDCw
|
|
12
|
+
srjn6GyAsRWwfJZRCet9uKP6PDiOMuwQPyT9gNof/nOanKp9Il+c0u8uZLStZK+Y
|
|
13
|
+
WlaciZSNHZvD8RhGH1YAhNRHWIymgIv8OVYZR+llozQ4h8v6HzIle2Nx/S2pAgMB
|
|
14
|
+
AAGjUzBRMB0GA1UdDgQWBBTiaJ8wHYBKq630kWT1wgagWTQF1TAfBgNVHSMEGDAW
|
|
15
|
+
gBTiaJ8wHYBKq630kWT1wgagWTQF1TAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3
|
|
16
|
+
DQEBCwUAA4IBAQCR3jM/ndvVNgB4KyZ24Z9Gf4U/G0bMhtaEqSOhYP2dSdS4pRbx
|
|
17
|
+
EN+QdV5B0LDE2i7z5Xc6ILHphXsGbDQ/M+awYL002RF2GObESzjXAABxsSnzU4rd
|
|
18
|
+
ZaGFSyLdYrl72G5Yy8vLOuCQpUYUYhy+RrAP2NEdot8YDUmhGiwy8xeQONkgGPnl
|
|
19
|
+
kOUeDpRPloNTU+50HoxrNfwX3FBHq78PKk6nUql6Gqe6yUtVHHStVSHtmOAeaixk
|
|
20
|
+
0h37v7LXqJ4NTP0TimI/mHpJs+cj6mLaLFqSb5txdS0h7UPRVrSFnqjNSmjOqFOY
|
|
21
|
+
0kpWYGQimwSYyOQvx/z4DPoTF2B8wU+cOC7W
|
|
22
|
+
-----END CERTIFICATE-----
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
|
2
|
+
MIICiTCCAg+gAwIBAgIJAJ8l4HnPq6F5MAOGA1UEBhMCQlIxCzAJBgNVBAgTAkNB
|
|
3
|
+
MRYwFAYDVQQHEw1TYW4gRnJhbmNpc2NvMRowGAYDVQQKExFQdXJlY29yZSBEZXYx
|
|
4
|
+
FjAUBgNVBAsMDURldmVsb3BtZW50MRowGAYDVQQDDBFsb2NhbGhvc3QgZGV2ZWxv
|
|
5
|
+
cG1lbnQwHhcNMjQxMjIxMTQyMzU5WhcNMjUxMjIxMTQyMzU5WjCBjzELMAkGA1UE
|
|
6
|
+
BhMCQlIxCzAJBgNVBAgTAkNBMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2NvMRowGAYDV
|
|
7
|
+
QQKExFQdXJlY29yZSBEZXYxFjAUBgNVBAsMDURldmVsb3BtZW50MRowGAYDVQQDDBFs
|
|
8
|
+
b2NhbGhvc3QgZGV2ZWxvcG1lbnQwXDANBgkqhkiG9w0BAQEFAANLADBIAkEA4VZGp1QJ
|
|
9
|
+
G6X8oUdXqj9J8ZJGgMtG8F8VJGgMtG8F8VJGgMtG8F8VJGgMtG8F8VJGgMtG8F8VJG
|
|
10
|
+
gMtG8F8VJGwIDAQABMA0GCSqGSIb3DQEBBAUAA4GBAMnO5KjO8Q2VzZGgMtG8F8VJG
|
|
11
|
+
gMtG8F8VJGgMtG8F8VJGgMtG8F8VJGgMtG8F8VJGgMtG8F8VJGgMtG8F8VJGgMtG8F
|
|
12
|
+
8VJGgMtG8F8VJGgMtG8F8VJGgMtG8F8VJGgMtG8F8VJGgMtG8F8VJGgMtG8F8VJG
|
|
13
|
+
-----END CERTIFICATE-----
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
-----BEGIN PRIVATE KEY-----
|
|
2
|
+
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCZoirbFplbvBwb
|
|
3
|
+
N9EzoT5O8XqaLcrmM6t62O65rFQzFXzG3RzyTDEnuIFUObSndffUoUMCK0kwFQgF
|
|
4
|
+
OPBHXs7kUsV15QquX3tNN37NuC1k3rtY/lFomTCBinyz7qU5Mg7PuxxuNy48wlZe
|
|
5
|
+
QWW5FHuLP7JxSyxLI7pfQbmHOhSO/WOVz7ZAUu0jD3Ngl4RyJTJ/rB57kwRhIRPG
|
|
6
|
+
Ruk6IMOHHDCwsrjn6GyAsRWwfJZRCet9uKP6PDiOMuwQPyT9gNof/nOanKp9Il+c
|
|
7
|
+
0u8uZLStZK+YWlaciZSNHZvD8RhGH1YAhNRHWIymgIv8OVYZR+llozQ4h8v6HzIl
|
|
8
|
+
e2Nx/S2pAgMBAAECggEAAg3KM2Fxtne22bMUMPreY9lJbR1nqXkhFbf9NwdKq24M
|
|
9
|
+
v3X1OZTL5uCfU40RKgMtzpWKUibaRLXC0tO3ZtcUYgveO1AretuTMrhgH+enybOu
|
|
10
|
+
d+Oh05fY6Eyod4QdM0s9uCwOSI0IBb1rsnHwplZaylpqgXu7fA2QMgelb3KeE8xF
|
|
11
|
+
0whk3rvu5nCbVBr1471LxpncoX7wntmtUiESBQhOKTlvyvEtPUvHUpcm0zjFfseQ
|
|
12
|
+
K5/gNU+FxAG42F36kL7EMu4hir2nQNmftxiT//y7m6E+BkzJJqZkoIOCKpxSrW4Q
|
|
13
|
+
lNdK4FfHWBHRzcjmeiQM+898nZOo7wOIAv/TQBmcYQKBgQDIltgwvzaDLbK1k+jB
|
|
14
|
+
tquvtEAl8KFA9XlOT0VVSjMackDSHvoCbO+x0q908UUQ45p0FBun5kmajqE7+r3u
|
|
15
|
+
mz3ITuPJ3tRuYz2KlUNZR8oHZZ5WpWrKbSoN2CjtiR1L5uFGh6JidqM/zlnkhDQG
|
|
16
|
+
aDcG8MNWBJjTHXt2nLkULgKZWQKBgQDEErtC2OpDjmEN0G3c/tXc+12mk3ZRtsZx
|
|
17
|
+
Jrvtj6dhdBlRKfIfwAuQswN6kmLS5mjqNpJgboIcA2+kYvRQm4QCWKY7pbrHik00
|
|
18
|
+
2khu7lYIaTveYPG8tSKWnjCyk+63rKBrhhHrQRE0YIg30kOuuRGYTg3efiJtWtPj
|
|
19
|
+
T9yjrpJc0QKBgCVp/WkaQVC2dV7o98EqEVv0gwKQn4M+RiIVJxmBfYaxSOXoYTmS
|
|
20
|
+
mCLS6WcmmXtM+MIt/fqTOadaczh8zHB1BFEYZeSBa54rZI80yBsfCM/YZHBE6mZX
|
|
21
|
+
dkCe0QN9T7mYluxQ4Dj9Z/W+x4WYIxwO1DS3M7gXo2m9VgoJsXvSGSoBAoGAVBZc
|
|
22
|
+
bNyuCu7ivJPoqeA4Q58hmLChC4ZBMIGWEtmKxQaPXPmKNwebbiD3mvdwnlXmJJvm
|
|
23
|
+
xqhd8DmhBXTSpkcro/30vJvksHKljccXTUu1ZcILxOD6ix17ifCpncxHkkncOoCy
|
|
24
|
+
6ptrD3VeteHc2O/RlenTlNmvVgqf2FqFm0TgzCECgYAetOdmEryd7bDD65q+NKyi
|
|
25
|
+
IuvizPdHj2J1V1ZzlDoSGced9745/3DDfeFqCchZ04Yw8KXZA7jVAeAYz8/+FAXW
|
|
26
|
+
Vbx7DGjzWaqrx6C/tJJOvl0iiXrWK0bZHWNH7YGQtvCy0KmtnhoWISw465pwosfo
|
|
27
|
+
BxKdGQec74KAphdwGq9XbQ==
|
|
28
|
+
-----END PRIVATE KEY-----
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
-----BEGIN PRIVATE KEY-----
|
|
2
|
+
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCfF3tGhiMe9Lfu
|
|
3
|
+
I5Wa43hNdwOQhreo17JGMx0lUMxmOUxFSiYJReDlyiU0WlC1idZyGDFuEX0/K5oB
|
|
4
|
+
hapSF3twOBRHlys90UDsJ7GEiNP515X5XdgKC4uZNY28f8oirVM8Zt1CIwim6J5b
|
|
5
|
+
f9U/DXvmXyj7pviFhvgd8EDG+ir7h0lLbfmcuuQKCG/UhmevXfR4r5rs7HlAmXfl
|
|
6
|
+
3zdR3I53nb/UeIFarlOVqowBxA/drqFPGmjaX44HjxXBz5k5daBXqlZtwVfBgJQ2
|
|
7
|
+
wvBjaiNgy61bKay2JqKorYJdK8SQy4/kMyLshZuNxdt8Ff53M69V5p7mSWqWxqsP
|
|
8
|
+
Lspj+dT/AgMBAAECggEATyP1uZ/5sakIJGlEP2A/1L1LIya5Dz95mi1MJud6PrHr
|
|
9
|
+
LJ7VrBA8b+Muvcvd0WkHqgs576i4luegPXiaQSsYRztGb1SWeLJzKucWCjmsxWEG
|
|
10
|
+
5J1X3qtenvECmI4zZiu1t9rt3zwhTjJysE63rJ2PEIsvDnzBrV72Z6I//xusrSGX
|
|
11
|
+
EhCWF/MZS9td+3ojvsNDRiBsm8eHnhlDveUwTGIqcSqCJC/WexZPGNOTJPwHMXnh
|
|
12
|
+
NREdXchs2GjjHjy/R+tbiQqG1jyjbL8bRCbuBd8v4K9sg6hoROm4axyWaBmVUJMk
|
|
13
|
+
1nkIoosAxAMMlth1IeBWaxHKJj/gGjRJmHYhCn3jFQKBgQDSU5N35Fd1p1qb8fL9
|
|
14
|
+
4IxX4XpZ5XXhCDATs8WHyYzoH+fC7vPMCmd4ays0NrFbjSht2P9zjtzphcGyal3Z
|
|
15
|
+
T1bOoe7nu+LjPny+qQVeEKVWEoryA+pojkS40hpczqsN1LE8zUavqK5rGWVJ0QPS
|
|
16
|
+
y7hxAIyuCEaEX4sWbpgtiOI1zQKBgQDBo6yxz9+YZ2ysdJkcxtAuqG5Ctj6rrngx
|
|
17
|
+
xTAnXw0ND6ld3UMChNqrEamx8Tf6cb1Ctw3MT2cfdA8LsS6/uYpZrMuvFBdFF4//
|
|
18
|
+
2j6x70j5vE1HQxc0MHkb2PY9ayrFHHzIVjQFJXJgtBvXEI0Ul8uyZYKLPr6txacO
|
|
19
|
+
1Q1oYJZp+wKBgQDRTlCr+DW9JO070ZySX5rqfb2npn0Xk3FcugMyLTYnblDSob9G
|
|
20
|
+
Z3gu0t+s11zKkgAQyOj2U86uKejnp4h7kMP/YBEC1exlXrL/fe6UfJY8wLk7PQBS
|
|
21
|
+
SnpDPvrzLsv1OJukuVfFyWTBugUdX36hkRCcjAJz0lJyuy4MBcU1U0piZQKBgQCW
|
|
22
|
+
Z2ND2Yp6/hpS+V3UFDivhPPfrV6QSzvgrKDyc8nXU0riNXJPCpIuPdHo/MvWI3I1
|
|
23
|
+
16lIAITA0Yy+MCl3kc38SVML8jcA24Rl3kbEPnAYSkJcD6h+SQhIsQTSP+NApxfl
|
|
24
|
+
I8/UD3n/0uWs7pYmYKE/N8lmDp5cqyFPS/zWDe/G8QKBgA7eC8xq0wFcAtsMSPsS
|
|
25
|
+
FgOE6lr0NYhyk2v1/oWD2uGiyYaBTSR9St2MvlyhylPhFxNv5en2bn7//yy5cJ3w
|
|
26
|
+
1U5jAFDHG5moOc3ENl0h2wb8/i9HoCrQu4QKZn1RShu+c0LO+ohET2x0NUItGSm0
|
|
27
|
+
Y2hjIVhWtmss4zUUFeVfJQMb
|
|
28
|
+
-----END PRIVATE KEY-----
|
package/APAGAR_cria.sh
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
# Verifica se foram passados dois argumentos
|
|
4
|
+
if [ "$#" -ne 2 ]; then
|
|
5
|
+
echo "Uso: $0 subdominio.com.br porta_servidor"
|
|
6
|
+
exit 1
|
|
7
|
+
fi
|
|
8
|
+
|
|
9
|
+
SUBDOMAIN=$1
|
|
10
|
+
PORT=$2
|
|
11
|
+
CONFIG_FILE="/etc/nginx/sites-available/$SUBDOMAIN"
|
|
12
|
+
LINK_FILE="/etc/nginx/sites-enabled/$SUBDOMAIN"
|
|
13
|
+
|
|
14
|
+
# Cria o arquivo de configuração Nginx
|
|
15
|
+
cat <<EOF | sudo tee $CONFIG_FILE
|
|
16
|
+
server {
|
|
17
|
+
listen 80;
|
|
18
|
+
server_name $SUBDOMAIN;
|
|
19
|
+
|
|
20
|
+
location / {
|
|
21
|
+
proxy_pass http://127.0.0.1:$PORT;
|
|
22
|
+
proxy_http_version 1.1;
|
|
23
|
+
proxy_set_header Upgrade \$http_upgrade;
|
|
24
|
+
proxy_set_header Connection 'upgrade';
|
|
25
|
+
proxy_set_header Host \$host;
|
|
26
|
+
proxy_cache_bypass \$http_upgrade;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
server {
|
|
31
|
+
listen 80;
|
|
32
|
+
server_name $SUBDOMAIN;
|
|
33
|
+
|
|
34
|
+
return 301 https://\$host\$request_uri;
|
|
35
|
+
}
|
|
36
|
+
EOF
|
|
37
|
+
|
|
38
|
+
# Testa a configuração do Nginx
|
|
39
|
+
sudo nginx -t
|
|
40
|
+
|
|
41
|
+
# Se o teste for bem-sucedido, reinicia o Nginx e cria o link simbólico
|
|
42
|
+
if [ $? -eq 0 ]; then
|
|
43
|
+
sudo ln -s $CONFIG_FILE $LINK_FILE
|
|
44
|
+
sudo systemctl reload nginx
|
|
45
|
+
|
|
46
|
+
# Emite o certificado SSL com o Certbot
|
|
47
|
+
sudo certbot --nginx -d $SUBDOMAIN -v
|
|
48
|
+
else
|
|
49
|
+
echo "Erro na configuração do Nginx. Verifique os logs."
|
|
50
|
+
exit 1
|
|
51
|
+
fi
|
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
# Release v0.5.0
|
|
2
|
+
|
|
3
|
+
### What's Changed
|
|
4
|
+
|
|
5
|
+
- 🚀 Adicionado alias `hs` para execução rápida (`hs deploy` ou `hs`)
|
|
6
|
+
- 📦 Atualização de versão para publicação
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Release v0.4.0
|
|
11
|
+
|
|
12
|
+
### What's Changed
|
|
13
|
+
|
|
14
|
+
- ✨ Introduzido comando `deploy` interativo com UI premium
|
|
15
|
+
- 🔄 Geração automática de configuração Nginx e Certbot SSL
|
|
16
|
+
- 🐳 Geração de comando PM2 otimizado para produção
|
|
17
|
+
- 🗑️ Substituição do antigo script Shell `cria.sh` por implementação robusta em TypeScript
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
# Release v0.3.2
|
|
22
|
+
|
|
23
|
+
### What's Changed
|
|
24
|
+
|
|
25
|
+
- 🔧 Alterada porta padrão de `9999` para `6000`
|
|
26
|
+
- 📝 Atualizado relatório de modificações
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
# Release v0.3.1
|
|
31
|
+
|
|
32
|
+
### What's Changed
|
|
33
|
+
|
|
34
|
+
- 🎨 Refatoração do log de inicialização para estilo Vite (Premium Look)
|
|
35
|
+
- ⚡ Medição precisa do tempo de inicialização (Ready in X ms)
|
|
36
|
+
- 🌐 Detecção e exibição automática de URLs de rede (Network IPs)
|
|
37
|
+
- 🎨 Adição de cores ANSI para um visual moderno e "vibrante"
|
|
38
|
+
- 🔧 Melhoria no tratamento de portas em uso com feedback visual
|
|
39
|
+
- 📝 Atualização do `.gitignore` para incluir a pasta `dist`
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
# Release v0.3.0
|
|
44
|
+
|
|
45
|
+
### What's Changed
|
|
46
|
+
|
|
47
|
+
- 🔒 Adicionado suporte completo a HTTPS com certificados auto-assinados
|
|
48
|
+
- 🛠️ Criado sistema de geração automática de certificados SSL
|
|
49
|
+
- 🔓🔒 Adicionados emojis visuais de cadeado no terminal (aberto HTTP / fechado HTTPS)
|
|
50
|
+
- 📊 Implementados logs detalhados de arquivos servidos
|
|
51
|
+
- 🔍 Adicionado parsing e logging de recursos HTML (CSS, JS, imagens)
|
|
52
|
+
- 📄 Logs mostram tamanho dos arquivos e tipos MIME
|
|
53
|
+
- 🌐 Logs especiais para arquivos HTML injetados com hot-reload
|
|
54
|
+
- 📝 Scripts npm para gerenciamento de certificados (`certs:generate`, `certs:clean`, `certs:info`)
|
|
55
|
+
- 🔧 Arquivo `cert-generator.ts` para geração programática de certificados
|
|
56
|
+
|
|
57
|
+
### New Contributors
|
|
58
|
+
|
|
59
|
+
- [Jean Carlo Machado](https://github.com/jeanCarloMachado) - Implementação do suporte HTTPS e sistema de logs avançado
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
# Release v0.2.0
|
|
64
|
+
|
|
65
|
+
### What's Changed
|
|
66
|
+
|
|
67
|
+
- ✨ Adicionada injeção de CSS (CSS Hot Loading) - mudanças em arquivos CSS agora atualizam sem recarregar a página
|
|
68
|
+
- ✨ Implementado suporte a SPA (Single Page Applications) com flag `--spa` - rotas inexistentes redirecionam para index.html
|
|
69
|
+
- ✨ Expandida lista de MIME types - suporte completo para vídeos, fontes, áudios, manifestos e outros tipos de arquivo
|
|
70
|
+
- ✨ Adicionados headers CORS - permite acesso cross-origin aos arquivos estáticos
|
|
71
|
+
- 🔧 Mantida arquitetura zero dependencies - todas as implementações usam apenas APIs nativas do Node.js
|
|
72
|
+
- 📝 Criado relatório detalhado em `/reports/21-12-2025_04-20.md`
|
|
73
|
+
|
|
74
|
+
### New Contributors
|
|
75
|
+
|
|
76
|
+
- [Jean Carlo](https://github.com/jeanCarloMachado) - Implementação das funcionalidades avançadas
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
# Release v0.1.0
|
|
81
|
+
|
|
82
|
+
### What's Changed
|
|
83
|
+
|
|
84
|
+
- ✨ Servidor HTTP básico com hot reload
|
|
85
|
+
- ✨ Watcher de arquivos usando fs.watch nativo
|
|
86
|
+
- ✨ Server-Sent Events para notificações em tempo real
|
|
87
|
+
- ✨ Injeção automática de script em arquivos HTML
|
|
88
|
+
- 🔧 Zero dependencies - apenas APIs nativas do Node.js
|
|
89
|
+
- 📝 TypeScript estrito com configuração moderna
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
# Comparativo: Purecore Hot Server vs Live Server
|
|
2
|
+
|
|
3
|
+
Este documento analisa as diferenças técnicas e de funcionalidades entre a **Sua biblioteca (`purecore-hot-server`)** e a biblioteca padrão de mercado **[`live-server`](https://github.com/tapio/live-server)**.
|
|
4
|
+
|
|
5
|
+
## 📊 Visão Geral
|
|
6
|
+
|
|
7
|
+
| Feature | `live-server` (Tapio) | `purecore-hot-server` (Sua Lib) |
|
|
8
|
+
| :--- | :--- | :--- |
|
|
9
|
+
| **Dependências** | Múltiplas (`send`, `fsevents`, `opn`, `connect`...) | **Zero (0)** (Apenas nativas do Node.js) |
|
|
10
|
+
| **Linguagem** | JavaScript | **TypeScript** |
|
|
11
|
+
| **Hot Reload** | Full Page + **CSS Injection** (sem refresh) | Full Page + **CSS Injection** (sem refresh) |
|
|
12
|
+
| **Watch System** | `chokidar` (geralmente) | `fs.watch` nativo (recursivo) |
|
|
13
|
+
| **SPA Support** | Sim (redireciona 404 para index.html) | Sim (flag `--spa=true`) |
|
|
14
|
+
| **Directory Listing** | Sim (mostra arquivos se não houver index) | Não (retorna erro/404) |
|
|
15
|
+
| **HTTPS/Proxy** | Sim | HTTPS: Sim (flag `--https=true`) / Proxy: Não |
|
|
16
|
+
| **Middleware** | Sim (baseado em Connect) | Não |
|
|
17
|
+
| **Extensão `.html` opcional** | Não (depende do arquivo/rota) | Sim (fallback para servir `.html` quando a URL vier sem extensão) |
|
|
18
|
+
| **Compatível com `npx`/`npm i -g`** | Sim | Sim (via build `dist/` e campo `bin` no `package.json`) |
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## ✅ O que a sua lib tem de Diferencial (Vantagens)
|
|
23
|
+
|
|
24
|
+
1. **Zero Dependencies (Zero Dependências)**:
|
|
25
|
+
* **Segurança/Auditabilidade**: Ao não usar dependências de terceiros, você elimina riscos de *supply chain attacks* e bloatware.
|
|
26
|
+
* **Instalação Instantânea**: `npm install` roda em milissegundos.
|
|
27
|
+
* **Tamanho**: O projeto final é minúsculo comparado ao `live-server` e suas árvores de dependência.
|
|
28
|
+
|
|
29
|
+
2. **Base de Código Moderna (TypeScript + Node 20+)**:
|
|
30
|
+
* O código utiliza APIs modernas como `node:fs/promises`, `node:watch` (recursivo) e Typescript estrito.
|
|
31
|
+
* É muito mais fácil para um desenvolvedor TS ler, entender e modificar o seu código do que o código legado JS do `live-server`.
|
|
32
|
+
|
|
33
|
+
3. **Simplicidade Arquitetural**:
|
|
34
|
+
* Sua implementação de SSE (Server-Sent Events) é direta e transparente (`/_hot_server_sse`), sem dependência de bibliotecas complexas de socket.
|
|
35
|
+
* Validação "Zod-like" interna (`validator.ts`) demonstra como fazer type-safety sem bibliotecas pesadas.
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## ❌ O que falta na sua lib (Gaps em relação ao `live-server`)
|
|
40
|
+
|
|
41
|
+
Para igualar a funcionalidade, você precisaria implementar:
|
|
42
|
+
|
|
43
|
+
### 1. Injeção de CSS (CSS Hot Loading)
|
|
44
|
+
|
|
45
|
+
* **O que é**: Quando um arquivo `.css` é salvo, o `live-server` atualiza apenas o estilo na página sem recarregar o navegador.
|
|
46
|
+
* **Seu estado atual**: Implementado via SSE + troca de `href` com timestamp.
|
|
47
|
+
* **Como implementar**: No script injetado, verificar se a mensagem do SSE é sobre um arquivo CSS e, nesse caso, buscar as tags `<link rel="stylesheet">` no DOM e forçar uma atualização do `href` (ex: `style.css?v=timestamp`) em vez de dar reload.
|
|
48
|
+
|
|
49
|
+
### 2. Suporte a SPA (Single Page Applications)
|
|
50
|
+
|
|
51
|
+
* **O que é**: Frameworks como React/Vue (via Router) precisam que qualquer rota desconhecida (ex: `/usuarios/1`) retorne o `index.html` para que o JS no front assuma o controle.
|
|
52
|
+
* **Seu estado atual**: Implementado via flag `--spa=true` (fallback para `index.html` quando o arquivo não existe).
|
|
53
|
+
|
|
54
|
+
### 3. Mime-Types Robustos
|
|
55
|
+
|
|
56
|
+
* **Seu estado atual**: Implementado com lista expandida de tipos (vídeos, fontes, manifestos, etc).
|
|
57
|
+
|
|
58
|
+
### 4. CORS
|
|
59
|
+
|
|
60
|
+
* **Seu estado atual**: Implementado com headers `Access-Control-Allow-*` nas respostas.
|
|
61
|
+
|
|
62
|
+
### 5. Directory e Range Requests
|
|
63
|
+
|
|
64
|
+
* **O que falta**:
|
|
65
|
+
* **Listagem de pasta**: O `live-server` gera uma interface HTML listando os arquivos se você abrir uma pasta. O seu tenta abrir `index.html` e falha se não existir.
|
|
66
|
+
* **Range Requests**: Para fazer streaming de vídeo/áudio e permitir "pular" (seek) o vídeo, o servidor precisa suportar headers `Range` e `Content-Range`. O seu `createReadStream.pipe(res)` serve o arquivo inteiro, o que quebra alguns players de vídeo.
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
## 🔒 HTTPS (nota prática no WSL)
|
|
71
|
+
|
|
72
|
+
O `purecore-hot-server` suporta HTTPS com certificados auto-assinados para desenvolvimento local.
|
|
73
|
+
|
|
74
|
+
* **Gerar/limpar/inspecionar certs**:
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
bun run certs:clean
|
|
78
|
+
bun run certs:generate
|
|
79
|
+
bun run certs:info
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
* **Iniciar em HTTPS**:
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
bun run dev:https
|
|
86
|
+
# equivalente:
|
|
87
|
+
bun run src/index.ts --https=true
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
**Referências**:
|
|
91
|
+
|
|
92
|
+
* Campo `bin` do npm (execução via `npx`/instalação global): `https://docs.npmjs.com/cli/v10/configuring-npm/package-json#bin`
|
|
93
|
+
* Node.js ESM/CJS (impacta como o `dist/` roda no Node): `https://nodejs.org/api/packages.html`
|
|
94
|
+
|
|
95
|
+
---
|
|
96
|
+
|
|
97
|
+
## 📝 Conclusão
|
|
98
|
+
|
|
99
|
+
Sua lib é excelente como uma **alternativa leve e moderna** para casos de uso simples (sites estáticos, prototipagem rápida, projetos vanilla). Ela ganha em performance de instalação e simplicidade de código.
|
|
100
|
+
|
|
101
|
+
Ela perde para o `live-server` em **complexidade e robustez** para cenários avançados (SPAs, mocks de API, streaming de mídia e assets CSS pesados que se beneficiam da injeção sem reload).
|
package/README.md
ADDED
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
# Purecore Hot Server
|
|
2
|
+
|
|
3
|
+
Um servidor de desenvolvimento hot-reload moderno e leve, construído com TypeScript e **zero dependências externas**.
|
|
4
|
+
|
|
5
|
+
## ✨ Funcionalidades
|
|
6
|
+
|
|
7
|
+
- 🚀 **Hot Reload Inteligente**: CSS injection sem recarregar página + full reload para outros arquivos
|
|
8
|
+
- 🎯 **SPA Support**: Flag `--spa` para aplicações React/Vue/Angular
|
|
9
|
+
- 📁 **MIME Types Robustos**: Suporte completo para vídeos, fontes, manifestos e mais
|
|
10
|
+
- 🌐 **CORS Habilitado**: Acesso cross-origin para desenvolvimento
|
|
11
|
+
- 🔒 **HTTPS Support**: Modo HTTPS com certificados auto-assinados
|
|
12
|
+
- 📡 **Server-Sent Events**: Notificações em tempo real eficientes
|
|
13
|
+
- 🔍 **Logs Detalhados**: Visualização de arquivos servidos e recursos HTML
|
|
14
|
+
- 🔓🔒 **Indicadores Visuais**: Emojis de cadeado no terminal (aberto/fechado)
|
|
15
|
+
|
|
16
|
+
## 🚀 Instalação
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
npm install -g hot-server
|
|
20
|
+
# ou
|
|
21
|
+
bun install -g hot-server
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## 🔒 Modo HTTPS
|
|
25
|
+
|
|
26
|
+
O Hot Server suporta HTTPS com certificados auto-assinados para desenvolvimento local.
|
|
27
|
+
|
|
28
|
+
### Ativar HTTPS
|
|
29
|
+
```bash
|
|
30
|
+
# Via linha de comando
|
|
31
|
+
hot-server --https=true
|
|
32
|
+
|
|
33
|
+
# Via npm scripts
|
|
34
|
+
npm run dev:https
|
|
35
|
+
|
|
36
|
+
# Via bun
|
|
37
|
+
bun run dev:https
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### Gerenciamento de Certificados
|
|
41
|
+
```bash
|
|
42
|
+
# Gerar certificados auto-assinados
|
|
43
|
+
npm run certs:generate
|
|
44
|
+
|
|
45
|
+
# Ver informações dos certificados
|
|
46
|
+
npm run certs:info
|
|
47
|
+
|
|
48
|
+
# Limpar certificados existentes
|
|
49
|
+
npm run certs:clean
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
**Nota**: Os certificados são salvos em `.hot-server-certs/` no diretório do projeto.
|
|
53
|
+
|
|
54
|
+
## 📖 Uso Básico
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
# Na pasta do seu projeto
|
|
58
|
+
hot-server
|
|
59
|
+
|
|
60
|
+
# Com opções
|
|
61
|
+
hot-server --port=3000 --spa=true
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## 🎯 Funcionalidades Avançadas
|
|
65
|
+
|
|
66
|
+
### CSS Hot Loading
|
|
67
|
+
Quando você modifica arquivos `.css`, apenas o estilo é atualizado sem recarregar a página inteira.
|
|
68
|
+
|
|
69
|
+
### SPA Support
|
|
70
|
+
```bash
|
|
71
|
+
hot-server --spa=true
|
|
72
|
+
```
|
|
73
|
+
Rotas inexistentes (como `/usuarios/1`) automaticamente servem `index.html`, permitindo que seu framework frontend assuma o roteamento.
|
|
74
|
+
|
|
75
|
+
### MIME Types Suportados
|
|
76
|
+
- **Vídeos**: MP4, WebM, OGG, AVI, MOV, WMV, FLV
|
|
77
|
+
- **Áudios**: MP3, WAV, OGG, AAC, M4A, Opus
|
|
78
|
+
- **Fontes**: WOFF, WOFF2, TTF, OTF, EOT
|
|
79
|
+
- **Imagens**: PNG, JPG, GIF, SVG, WebP, BMP, TIFF
|
|
80
|
+
- **Documentos**: PDF, CSV, YAML, TOML, TXT, MD
|
|
81
|
+
- **Web**: JSON, XML, Manifest, WASM
|
|
82
|
+
|
|
83
|
+
## 🔧 Opções de CLI
|
|
84
|
+
|
|
85
|
+
| Opção | Descrição | Padrão |
|
|
86
|
+
|-------|-----------|---------|
|
|
87
|
+
| `--port=<number>` | Porta do servidor | `9999` |
|
|
88
|
+
| `--root=<path>` | Diretório raiz | `.` (diretório atual) |
|
|
89
|
+
| `--open=<true/false>` | Abrir navegador automaticamente | `true` |
|
|
90
|
+
| `--spa=<true/false>` | Habilitar suporte SPA | `false` |
|
|
91
|
+
| `--https=<true/false>` | Habilitar modo HTTPS | `false` |
|
|
92
|
+
|
|
93
|
+
## 🏗️ Como foi feito
|
|
94
|
+
|
|
95
|
+
Este projeto foi desenvolvido seguindo uma arquitetura minimalista e moderna:
|
|
96
|
+
|
|
97
|
+
### Técnicas Utilizadas
|
|
98
|
+
1. **TypeScript Estrito**: Tipagem forte em todo o código
|
|
99
|
+
2. **APIs Nativas**: Uso exclusivo de módulos `node:*`
|
|
100
|
+
3. **Server-Sent Events**: Comunicação bidirecional eficiente
|
|
101
|
+
4. **File System Watch**: Monitoramento recursivo de mudanças
|
|
102
|
+
5. **Mini-Zod**: Validação type-safe sem dependências
|
|
103
|
+
6. **CSS Injection**: DOM manipulation para hot reload inteligente
|
|
104
|
+
|
|
105
|
+
### Arquitetura
|
|
106
|
+
```
|
|
107
|
+
src/
|
|
108
|
+
├── index.ts # CLI e configuração
|
|
109
|
+
├── server.ts # Servidor HTTP e lógica principal
|
|
110
|
+
├── watcher.ts # Monitoramento de arquivos
|
|
111
|
+
└── validator.ts # Validação type-safe
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
### Funcionamento
|
|
115
|
+
1. **Watcher** monitora mudanças recursivamente usando `fs.watch`
|
|
116
|
+
2. **Server** serve arquivos estáticos com MIME types corretos
|
|
117
|
+
3. **SSE** notifica clientes sobre mudanças em tempo real
|
|
118
|
+
4. **CSS Injection** atualiza estilos sem recarregar página
|
|
119
|
+
5. **SPA Fallback** redireciona 404 para index.html quando habilitado
|
|
120
|
+
|
|
121
|
+
## 🧪 Como testar
|
|
122
|
+
|
|
123
|
+
### Teste CSS Injection
|
|
124
|
+
1. Inicie o servidor: `hot-server`
|
|
125
|
+
2. Modifique qualquer arquivo `.css`
|
|
126
|
+
3. Observe que apenas o CSS é atualizado, sem reload da página
|
|
127
|
+
|
|
128
|
+
### Teste SPA Support
|
|
129
|
+
1. Inicie com SPA: `hot-server --spa=true`
|
|
130
|
+
2. Acesse `/qualquer-rota-inexistente`
|
|
131
|
+
3. Deve carregar `index.html` em vez de 404
|
|
132
|
+
|
|
133
|
+
### Teste MIME Types
|
|
134
|
+
1. Adicione arquivos de vídeo/fonte no seu projeto
|
|
135
|
+
2. Eles serão servidos com headers corretos
|
|
136
|
+
|
|
137
|
+
### Teste CORS
|
|
138
|
+
1. Acesse arquivos de outro domínio/origin
|
|
139
|
+
2. Deve funcionar sem erros de CORS
|
|
140
|
+
|
|
141
|
+
### Teste HTTPS
|
|
142
|
+
1. Execute: `hot-server --https=true`
|
|
143
|
+
2. Observe o emoji 🔒 no log do terminal
|
|
144
|
+
3. Acesse https://localhost:9999
|
|
145
|
+
4. Aceite o aviso de certificado auto-assinado
|
|
146
|
+
|
|
147
|
+
### Teste Logs Detalhados
|
|
148
|
+
1. Abra uma página HTML
|
|
149
|
+
2. Observe no terminal:
|
|
150
|
+
- 📄 Arquivos servidos com tamanho e tipo MIME
|
|
151
|
+
- 🔍 Recursos encontrados no HTML (CSS, JS, imagens)
|
|
152
|
+
- 🌐 Confirmação de injeção do hot-reload
|
|
153
|
+
|
|
154
|
+
## 📊 Comparação com Live Server
|
|
155
|
+
|
|
156
|
+
| Feature | Live Server | Purecore Hot Server |
|
|
157
|
+
|-------------------|-------------|---------------------|
|
|
158
|
+
| **Dependencies** | Múltiplas | ❌ Zero |
|
|
159
|
+
| **Language** | JavaScript | ✅ TypeScript |
|
|
160
|
+
| **CSS Injection** | ✅ Sim | ✅ Sim |
|
|
161
|
+
| **SPA Support** | ✅ Sim | ✅ Sim |
|
|
162
|
+
| **MIME Types** | Básicos | ✅ Robustos |
|
|
163
|
+
| **CORS** | ❌ Não | ✅ Sim |
|
|
164
|
+
| **Installation** | Lento | ✅ Instantâneo |
|
|
165
|
+
|
|
166
|
+
## 🔍 Análise de Dependências Obsoletas
|
|
167
|
+
|
|
168
|
+
Durante o desenvolvimento, analisamos dependências comuns em servidores de desenvolvimento e identificamos quais são desnecessárias no Node.js moderno:
|
|
169
|
+
|
|
170
|
+
### ❌ Dependências Obsoletas
|
|
171
|
+
- **`object-assign`**: Substituído por `Object.assign()` nativo
|
|
172
|
+
- **`http-auth`**: Autenticação HTTP pode ser feita nativamente
|
|
173
|
+
- **`colors`**: Node.js 20+ tem `util.styleText()` nativo
|
|
174
|
+
- **`opn`**: `child_process` nativo abre URLs/arquivos
|
|
175
|
+
- **`event-stream`**: ⚠️ Vulnerabilidade conhecida, usar streams nativos
|
|
176
|
+
|
|
177
|
+
### ⚡ Alternativas Nativas Utilizadas
|
|
178
|
+
- **File System**: `node:fs` com `fs.watch()` recursivo
|
|
179
|
+
- **HTTP Server**: `node:http` e `node:https` nativos
|
|
180
|
+
- **Crypto**: `node:crypto` para certificados HTTPS
|
|
181
|
+
- **Path/URL**: `node:path` e `node:url` para manipulação
|
|
182
|
+
- **Streams**: `node:stream` para Server-Sent Events
|
|
183
|
+
|
|
184
|
+
### 🎯 Resultado
|
|
185
|
+
**Zero dependências externas** = instalação instantânea, sem vulnerabilidades de terceiros, e compatibilidade garantida com futuras versões do Node.js.
|
|
186
|
+
|
|
187
|
+
## 📝 Changelog
|
|
188
|
+
|
|
189
|
+
Veja todas as mudanças em [CHANGELOG.md](CHANGELOG.md)
|
|
190
|
+
|
|
191
|
+
## 🤝 Contribuição
|
|
192
|
+
|
|
193
|
+
Contribuições são bem-vindas! Este projeto segue uma filosofia de **zero dependencies** e simplicidade arquitetural.
|
|
194
|
+
|
|
195
|
+
## 📄 Licença
|
|
196
|
+
|
|
197
|
+
MIT
|