troca por Fastify

This commit is contained in:
Luiz H. R. Silva 2024-06-11 09:52:14 -03:00
parent ad6dcda6a5
commit 67aeeea9b4
5 changed files with 685 additions and 798 deletions

View file

@ -10,7 +10,7 @@ const validar = z
if ("error" in validar) { if ("error" in validar) {
throw new Error( throw new Error(
validar.error.errors validar.error?.errors
.map((erro) => `${erro.path}: ${erro.message}`) .map((erro) => `${erro.path}: ${erro.message}`)
.join("\n"), .join("\n"),
); );

View file

@ -1,15 +1,14 @@
import { estaticos } from "../src";
import path from "node:path"; import path from "node:path";
import express from "express";
import fs from "node:fs";
import { gerar } from "./listar_arquivos";
import { ambiente } from "./ambiente";
import { renderToStaticMarkup } from "react-dom/server"; import { renderToStaticMarkup } from "react-dom/server";
import bodyParser from 'body-parser' import { estaticos } from "../src";
import { ambiente } from "./ambiente";
import { gerar } from "./listar_arquivos";
// biome-ignore lint/style/useImportType: <explanation> // biome-ignore lint/style/useImportType: <explanation>
import React, {} from "react"; import React, {} from "react";
import cors from "cors";
import fastifyStatc from "@fastify/static";
import Fastify, {} from "fastify";
const { PORTA, PREFIXO } = ambiente; const { PORTA, PREFIXO } = ambiente;
@ -55,13 +54,24 @@ const criarHtml = (entrada: {
}; };
gerar.then(() => { gerar.then(() => {
const app = express(); const fastify = Fastify({
app.use(express.json()); logger: true,
app.use(express.urlencoded());
app.use(cors());
app.use(bodyParser.urlencoded({ extended: false }))
app.get([PREFIXO, `${PREFIXO}/`], (req, res) => { ignoreTrailingSlash: true,
});
fastify.route({
method: "GET",
url: "/",
handler: (req, res) => {
res.redirect(`${PREFIXO}/`);
},
});
fastify.route({
method: "GET",
url: `${PREFIXO}/`,
handler: async (request, reply) => {
const html = ( const html = (
<html lang="pt-BR"> <html lang="pt-BR">
<head> <head>
@ -88,25 +98,24 @@ gerar.then(() => {
const renderHtml = renderToStaticMarkup(html, {}); const renderHtml = renderToStaticMarkup(html, {});
res.setHeader("content-type", "text/html"); // htlm utf-8
res.send(renderHtml); reply.header("content-type", "text/html; charset=utf-8");
}); reply.send(renderHtml);
app.get(`${PREFIXO}/*`, (req, res) => { },
const caminho_arquivo = path.join(process.cwd(), decodeURI(req.path));
if (fs.existsSync(caminho_arquivo)) {
console.log(`200: ${req.url}`);
return res.sendFile(caminho_arquivo);
}
console.log(`404: ${req.url}`);
return res.status(404).send(`404: ${req.url}`);
}); });
app.all("*", (req, res) => { fastify.register(fastifyStatc, {
res.redirect(PREFIXO); root: path.join(process.cwd(), "estaticos"),
prefix: PREFIXO,
}); });
app.listen(PORTA, () => { // 404
console.log(`Servidor ${PREFIXO} Rodando em http://localhost:${PORTA}`); fastify.setNotFoundHandler((request, reply) => {
reply.code(404).send(`Não encontrado: ${request.url}`);
});
fastify.listen({ port: Number(PORTA) }, (err, address) => {
if (err) throw err;
console.log(`Servidor ${PREFIXO} Rodando em ${address}`);
}); });
}); });

View file

@ -1,21 +1,15 @@
{ {
"name": "p-estaticos", "name": "p-estaticos",
"version": "0.36.0", "version": "0.37.0",
"description": "", "description": "",
"main": "dist/index.js", "main": "dist/index.js",
"scripts": { "scripts": {
"#1": "Executa o servidor de desenvolvimento e sem produção",
"dev": "tsx ferramentas/rodar_servidor.tsx", "dev": "tsx ferramentas/rodar_servidor.tsx",
"#2": "Gerar o pacote para ser imortado em outros projetos", "build": "npm --no-git-tag-version version minor && pnpm run gerar && pnpm run biome && tsc",
"build": "npm --no-git-tag-version version minor && pnpm run gerar && npx @biomejs/biome check --write ./src && tsc",
"#3": "Faz uma checagem de versão do node",
"nodev": "check-node-version --node '>= 20'", "nodev": "check-node-version --node '>= 20'",
"#4": "Mata o processo que está rodando na porta 5020",
"kill": "npx kill-port -p 5020", "kill": "npx kill-port -p 5020",
"#5": "Gerar a listagem de arquivos estaticos",
"gerar": "dotenv -e .env tsx ferramentas/listar_arquivos.ts gerar", "gerar": "dotenv -e .env tsx ferramentas/listar_arquivos.ts gerar",
"#6": "Faz a formatação do código", "biome": "npx @biomejs/biome check --write ./src && npx @biomejs/biome check --write ./ferramentas",
"biome": "npx @biomejs/biome check --write ./src",
"postinstall": "pnpm up p-*" "postinstall": "pnpm up p-*"
}, },
"author": { "author": {
@ -25,19 +19,14 @@
}, },
"license": "ISC", "license": "ISC",
"dependencies": { "dependencies": {
"@fastify/static": "^7.0.4",
"body-parser": "latest", "fastify": "^4.27.0",
"cors": "^2.8.5",
"express": "latest",
"react": "^18.3.1", "react": "^18.3.1",
"react-dom": "^18.3.1", "react-dom": "^18.3.1",
"zod": "3.23.8" "zod": "3.23.8"
}, },
"devDependencies": { "devDependencies": {
"@biomejs/biome": "latest", "@biomejs/biome": "latest",
"@types/cors": "^2.8.17",
"@types/express": "latest",
"@types/body-parser": "latest",
"@types/node": "^20.11.30", "@types/node": "^20.11.30",
"@types/react": "^18.3.1", "@types/react": "^18.3.1",
"@types/react-dom": "^18.3.0", "@types/react-dom": "^18.3.0",

917
pnpm-lock.yaml generated

File diff suppressed because it is too large Load diff

View file

@ -1,11 +1,8 @@
const Prefixos = { const Prefixos = {
"relativo": "/estaticos", relativo: "/estaticos",
"link-local": "http://localhost:5020/estaticos", "link-local": "http://localhost:5020/estaticos",
"link-servidor": "https://carro-de-boi-idz-one.b-cdn.net/estaticos", "link-servidor": "https://carro-de-boi-idz-one.b-cdn.net/estaticos",
"node_modules": "node_modules/p-estaticos/estaticos" node_modules: "node_modules/p-estaticos/estaticos",
}; };
/** /**
@ -17,14 +14,14 @@
const prefixo = Prefixos[caminho]; const prefixo = Prefixos[caminho];
return { return {
"logos": { logos: {
"e-licencie-gov": { "e-licencie-gov": {
"Logo-e-licencie-gov-vertical.svg": `${prefixo}/logos/e-licencie-gov/Logo-e-licencie-gov-vertical.svg`, "Logo-e-licencie-gov-vertical.svg": `${prefixo}/logos/e-licencie-gov/Logo-e-licencie-gov-vertical.svg`,
"Logo-e-licencie-gov-vertical.": `${prefixo}/logos/e-licencie-gov/Logo-e-licencie-gov-vertical.`, "Logo-e-licencie-gov-vertical.": `${prefixo}/logos/e-licencie-gov/Logo-e-licencie-gov-vertical.`,
"Logo-e-licencie-gov-horizontal.svg": `${prefixo}/logos/e-licencie-gov/Logo-e-licencie-gov-horizontal.svg`, "Logo-e-licencie-gov-horizontal.svg": `${prefixo}/logos/e-licencie-gov/Logo-e-licencie-gov-horizontal.svg`,
"Logo-e-licencie-gov-horizontal.png": `${prefixo}/logos/e-licencie-gov/Logo-e-licencie-gov-horizontal.png`, "Logo-e-licencie-gov-horizontal.png": `${prefixo}/logos/e-licencie-gov/Logo-e-licencie-gov-horizontal.png`,
"Logo-e-licencie-gov-horizontal-branco.svg": `${prefixo}/logos/e-licencie-gov/Logo-e-licencie-gov-horizontal-branco.svg`, "Logo-e-licencie-gov-horizontal-branco.svg": `${prefixo}/logos/e-licencie-gov/Logo-e-licencie-gov-horizontal-branco.svg`,
"Logo-e-licencie-gov-horizontal-branco.png": `${prefixo}/logos/e-licencie-gov/Logo-e-licencie-gov-horizontal-branco.png` "Logo-e-licencie-gov-horizontal-branco.png": `${prefixo}/logos/e-licencie-gov/Logo-e-licencie-gov-horizontal-branco.png`,
}, },
"e-licencie": { "e-licencie": {
"verde-verde_.png": `${prefixo}/logos/e-licencie/verde-verde_.png`, "verde-verde_.png": `${prefixo}/logos/e-licencie/verde-verde_.png`,
@ -32,10 +29,10 @@
"logo_verde_plantula_branca.png": `${prefixo}/logos/e-licencie/logo_verde_plantula_branca.png`, "logo_verde_plantula_branca.png": `${prefixo}/logos/e-licencie/logo_verde_plantula_branca.png`,
"escala-branco_.png": `${prefixo}/logos/e-licencie/escala-branco_.png`, "escala-branco_.png": `${prefixo}/logos/e-licencie/escala-branco_.png`,
"escala-branco.png": `${prefixo}/logos/e-licencie/escala-branco.png`, "escala-branco.png": `${prefixo}/logos/e-licencie/escala-branco.png`,
"branco-branco.png": `${prefixo}/logos/e-licencie/branco-branco.png` "branco-branco.png": `${prefixo}/logos/e-licencie/branco-branco.png`,
}, },
"betha-sistemas": { "betha-sistemas": {
"logo.png": `${prefixo}/logos/betha-sistemas/logo.png` "logo.png": `${prefixo}/logos/betha-sistemas/logo.png`,
}, },
"betha-meio-ambiente": { "betha-meio-ambiente": {
"Logo-betha-meio-ambiente-vertical.svg": `${prefixo}/logos/betha-meio-ambiente/Logo-betha-meio-ambiente-vertical.svg`, "Logo-betha-meio-ambiente-vertical.svg": `${prefixo}/logos/betha-meio-ambiente/Logo-betha-meio-ambiente-vertical.svg`,
@ -45,18 +42,18 @@
"Logo-betha-meio-ambiente-horizontal-branco.svg": `${prefixo}/logos/betha-meio-ambiente/Logo-betha-meio-ambiente-horizontal-branco.svg`, "Logo-betha-meio-ambiente-horizontal-branco.svg": `${prefixo}/logos/betha-meio-ambiente/Logo-betha-meio-ambiente-horizontal-branco.svg`,
"Logo-betha-meio-ambiente-horizontal-branco.png": `${prefixo}/logos/betha-meio-ambiente/Logo-betha-meio-ambiente-horizontal-branco.png`, "Logo-betha-meio-ambiente-horizontal-branco.png": `${prefixo}/logos/betha-meio-ambiente/Logo-betha-meio-ambiente-horizontal-branco.png`,
"Logo-betha-meio-ambiente-brasao.svg": `${prefixo}/logos/betha-meio-ambiente/Logo-betha-meio-ambiente-brasao.svg`, "Logo-betha-meio-ambiente-brasao.svg": `${prefixo}/logos/betha-meio-ambiente/Logo-betha-meio-ambiente-brasao.svg`,
"Logo-betha-meio-ambiente-brasao.png": `${prefixo}/logos/betha-meio-ambiente/Logo-betha-meio-ambiente-brasao.png` "Logo-betha-meio-ambiente-brasao.png": `${prefixo}/logos/betha-meio-ambiente/Logo-betha-meio-ambiente-brasao.png`,
}
}, },
"imagens": { },
imagens: {
"quero-quero.gif": `${prefixo}/imagens/quero-quero.gif`, "quero-quero.gif": `${prefixo}/imagens/quero-quero.gif`,
"favicon.ico": `${prefixo}/imagens/favicon.ico`, "favicon.ico": `${prefixo}/imagens/favicon.ico`,
"exemplo_brasao.jpeg": `${prefixo}/imagens/exemplo_brasao.jpeg` "exemplo_brasao.jpeg": `${prefixo}/imagens/exemplo_brasao.jpeg`,
}, },
"html": { html: {
"404.html": `${prefixo}/html/404.html` "404.html": `${prefixo}/html/404.html`,
}, },
"fundos": { fundos: {
"fundo-16.jpg": `${prefixo}/fundos/fundo-16.jpg`, "fundo-16.jpg": `${prefixo}/fundos/fundo-16.jpg`,
"fundo-15.jpg": `${prefixo}/fundos/fundo-15.jpg`, "fundo-15.jpg": `${prefixo}/fundos/fundo-15.jpg`,
"fundo-14.jpg": `${prefixo}/fundos/fundo-14.jpg`, "fundo-14.jpg": `${prefixo}/fundos/fundo-14.jpg`,
@ -72,11 +69,11 @@
"fundo-04.jpg": `${prefixo}/fundos/fundo-04.jpg`, "fundo-04.jpg": `${prefixo}/fundos/fundo-04.jpg`,
"fundo-03.jpg": `${prefixo}/fundos/fundo-03.jpg`, "fundo-03.jpg": `${prefixo}/fundos/fundo-03.jpg`,
"fundo-02.jpg": `${prefixo}/fundos/fundo-02.jpg`, "fundo-02.jpg": `${prefixo}/fundos/fundo-02.jpg`,
"fundo-01.jpg": `${prefixo}/fundos/fundo-01.jpg` "fundo-01.jpg": `${prefixo}/fundos/fundo-01.jpg`,
}, },
"fonts-master": { "fonts-master": {
"sobre.txt": `${prefixo}/fonts-master/sobre.txt`, "sobre.txt": `${prefixo}/fonts-master/sobre.txt`,
"roboto": { roboto: {
"Roboto-ThinItalic.ttf": `${prefixo}/fonts-master/roboto/Roboto-ThinItalic.ttf`, "Roboto-ThinItalic.ttf": `${prefixo}/fonts-master/roboto/Roboto-ThinItalic.ttf`,
"Roboto-Thin.ttf": `${prefixo}/fonts-master/roboto/Roboto-Thin.ttf`, "Roboto-Thin.ttf": `${prefixo}/fonts-master/roboto/Roboto-Thin.ttf`,
"Roboto-Regular.ttf": `${prefixo}/fonts-master/roboto/Roboto-Regular.ttf`, "Roboto-Regular.ttf": `${prefixo}/fonts-master/roboto/Roboto-Regular.ttf`,
@ -96,7 +93,7 @@
"Roboto-BlackItalic.ttf": `${prefixo}/fonts-master/roboto/Roboto-BlackItalic.ttf`, "Roboto-BlackItalic.ttf": `${prefixo}/fonts-master/roboto/Roboto-BlackItalic.ttf`,
"Roboto-Black.ttf": `${prefixo}/fonts-master/roboto/Roboto-Black.ttf`, "Roboto-Black.ttf": `${prefixo}/fonts-master/roboto/Roboto-Black.ttf`,
"LICENSE.txt": `${prefixo}/fonts-master/roboto/LICENSE.txt`, "LICENSE.txt": `${prefixo}/fonts-master/roboto/LICENSE.txt`,
"COPYRIGHT.txt": `${prefixo}/fonts-master/roboto/COPYRIGHT.txt` "COPYRIGHT.txt": `${prefixo}/fonts-master/roboto/COPYRIGHT.txt`,
}, },
"pt-sans": { "pt-sans": {
"PTSans-Regular.ttf": `${prefixo}/fonts-master/pt-sans/PTSans-Regular.ttf`, "PTSans-Regular.ttf": `${prefixo}/fonts-master/pt-sans/PTSans-Regular.ttf`,
@ -107,7 +104,7 @@
"PTSans-CaptionRegular.ttf": `${prefixo}/fonts-master/pt-sans/PTSans-CaptionRegular.ttf`, "PTSans-CaptionRegular.ttf": `${prefixo}/fonts-master/pt-sans/PTSans-CaptionRegular.ttf`,
"PTSans-BoldItalic.ttf": `${prefixo}/fonts-master/pt-sans/PTSans-BoldItalic.ttf`, "PTSans-BoldItalic.ttf": `${prefixo}/fonts-master/pt-sans/PTSans-BoldItalic.ttf`,
"PTSans-Bold.ttf": `${prefixo}/fonts-master/pt-sans/PTSans-Bold.ttf`, "PTSans-Bold.ttf": `${prefixo}/fonts-master/pt-sans/PTSans-Bold.ttf`,
"OFL.txt": `${prefixo}/fonts-master/pt-sans/OFL.txt` "OFL.txt": `${prefixo}/fonts-master/pt-sans/OFL.txt`,
}, },
"open-sans": { "open-sans": {
"OpenSans-SemiboldItalic.ttf": `${prefixo}/fonts-master/open-sans/OpenSans-SemiboldItalic.ttf`, "OpenSans-SemiboldItalic.ttf": `${prefixo}/fonts-master/open-sans/OpenSans-SemiboldItalic.ttf`,
@ -121,7 +118,7 @@
"OpenSans-BoldItalic.ttf": `${prefixo}/fonts-master/open-sans/OpenSans-BoldItalic.ttf`, "OpenSans-BoldItalic.ttf": `${prefixo}/fonts-master/open-sans/OpenSans-BoldItalic.ttf`,
"OpenSans-Bold.ttf": `${prefixo}/fonts-master/open-sans/OpenSans-Bold.ttf`, "OpenSans-Bold.ttf": `${prefixo}/fonts-master/open-sans/OpenSans-Bold.ttf`,
"LICENSE.txt": `${prefixo}/fonts-master/open-sans/LICENSE.txt`, "LICENSE.txt": `${prefixo}/fonts-master/open-sans/LICENSE.txt`,
"Apache License.txt": `${prefixo}/fonts-master/open-sans/Apache%20License.txt` "Apache License.txt": `${prefixo}/fonts-master/open-sans/Apache%20License.txt`,
}, },
"noto-sans": { "noto-sans": {
"fonts.json": `${prefixo}/fonts-master/noto-sans/fonts.json`, "fonts.json": `${prefixo}/fonts-master/noto-sans/fonts.json`,
@ -170,9 +167,9 @@
"NotoSans-Bold.ttf": `${prefixo}/fonts-master/noto-sans/NotoSans-Bold.ttf`, "NotoSans-Bold.ttf": `${prefixo}/fonts-master/noto-sans/NotoSans-Bold.ttf`,
"NotoNaskhArabic-Regular.ttf": `${prefixo}/fonts-master/noto-sans/NotoNaskhArabic-Regular.ttf`, "NotoNaskhArabic-Regular.ttf": `${prefixo}/fonts-master/noto-sans/NotoNaskhArabic-Regular.ttf`,
"NotoNaskhArabic-Bold.ttf": `${prefixo}/fonts-master/noto-sans/NotoNaskhArabic-Bold.ttf`, "NotoNaskhArabic-Bold.ttf": `${prefixo}/fonts-master/noto-sans/NotoNaskhArabic-Bold.ttf`,
"LICENSE": `${prefixo}/fonts-master/noto-sans/LICENSE` LICENSE: `${prefixo}/fonts-master/noto-sans/LICENSE`,
}, },
"metropolis": { metropolis: {
"SIL Open Font License.txt": `${prefixo}/fonts-master/metropolis/SIL%20Open%20Font%20License.txt`, "SIL Open Font License.txt": `${prefixo}/fonts-master/metropolis/SIL%20Open%20Font%20License.txt`,
"Metropolis-ThinItalic.otf": `${prefixo}/fonts-master/metropolis/Metropolis-ThinItalic.otf`, "Metropolis-ThinItalic.otf": `${prefixo}/fonts-master/metropolis/Metropolis-ThinItalic.otf`,
"Metropolis-Thin.otf": `${prefixo}/fonts-master/metropolis/Metropolis-Thin.otf`, "Metropolis-Thin.otf": `${prefixo}/fonts-master/metropolis/Metropolis-Thin.otf`,
@ -191,16 +188,15 @@
"Metropolis-BoldItalic.otf": `${prefixo}/fonts-master/metropolis/Metropolis-BoldItalic.otf`, "Metropolis-BoldItalic.otf": `${prefixo}/fonts-master/metropolis/Metropolis-BoldItalic.otf`,
"Metropolis-Bold.otf": `${prefixo}/fonts-master/metropolis/Metropolis-Bold.otf`, "Metropolis-Bold.otf": `${prefixo}/fonts-master/metropolis/Metropolis-Bold.otf`,
"Metropolis-BlackItalic.otf": `${prefixo}/fonts-master/metropolis/Metropolis-BlackItalic.otf`, "Metropolis-BlackItalic.otf": `${prefixo}/fonts-master/metropolis/Metropolis-BlackItalic.otf`,
"Metropolis-Black.otf": `${prefixo}/fonts-master/metropolis/Metropolis-Black.otf` "Metropolis-Black.otf": `${prefixo}/fonts-master/metropolis/Metropolis-Black.otf`,
}
}, },
"dados": { },
dados: {
"tabela_ibama.json": `${prefixo}/dados/tabela_ibama.json`, "tabela_ibama.json": `${prefixo}/dados/tabela_ibama.json`,
"municipios.json": `${prefixo}/dados/municipios.json` "municipios.json": `${prefixo}/dados/municipios.json`,
},
background: {
"Paisagem.jpg": `${prefixo}/background/Paisagem.jpg`,
}, },
"background": {
"Paisagem.jpg": `${prefixo}/background/Paisagem.jpg`
}
}; };
}; };