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) {
throw new Error(
validar.error.errors
validar.error?.errors
.map((erro) => `${erro.path}: ${erro.message}`)
.join("\n"),
);

View file

@ -1,15 +1,14 @@
import { estaticos } from "../src";
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 bodyParser from 'body-parser'
import { estaticos } from "../src";
import { ambiente } from "./ambiente";
import { gerar } from "./listar_arquivos";
// biome-ignore lint/style/useImportType: <explanation>
import React, {} from "react";
import cors from "cors";
import fastifyStatc from "@fastify/static";
import Fastify, {} from "fastify";
const { PORTA, PREFIXO } = ambiente;
@ -55,13 +54,24 @@ const criarHtml = (entrada: {
};
gerar.then(() => {
const app = express();
app.use(express.json());
app.use(express.urlencoded());
app.use(cors());
app.use(bodyParser.urlencoded({ extended: false }))
const fastify = Fastify({
logger: true,
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 = (
<html lang="pt-BR">
<head>
@ -88,25 +98,24 @@ gerar.then(() => {
const renderHtml = renderToStaticMarkup(html, {});
res.setHeader("content-type", "text/html");
res.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}`);
// htlm utf-8
reply.header("content-type", "text/html; charset=utf-8");
reply.send(renderHtml);
},
});
app.all("*", (req, res) => {
res.redirect(PREFIXO);
fastify.register(fastifyStatc, {
root: path.join(process.cwd(), "estaticos"),
prefix: PREFIXO,
});
app.listen(PORTA, () => {
console.log(`Servidor ${PREFIXO} Rodando em http://localhost:${PORTA}`);
// 404
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",
"version": "0.36.0",
"version": "0.37.0",
"description": "",
"main": "dist/index.js",
"scripts": {
"#1": "Executa o servidor de desenvolvimento e sem produção",
"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 && npx @biomejs/biome check --write ./src && tsc",
"#3": "Faz uma checagem de versão do node",
"build": "npm --no-git-tag-version version minor && pnpm run gerar && pnpm run biome && tsc",
"nodev": "check-node-version --node '>= 20'",
"#4": "Mata o processo que está rodando na porta 5020",
"kill": "npx kill-port -p 5020",
"#5": "Gerar a listagem de arquivos estaticos",
"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",
"biome": "npx @biomejs/biome check --write ./src && npx @biomejs/biome check --write ./ferramentas",
"postinstall": "pnpm up p-*"
},
"author": {
@ -25,19 +19,14 @@
},
"license": "ISC",
"dependencies": {
"body-parser": "latest",
"cors": "^2.8.5",
"express": "latest",
"@fastify/static": "^7.0.4",
"fastify": "^4.27.0",
"react": "^18.3.1",
"react-dom": "^18.3.1",
"zod": "3.23.8"
},
"devDependencies": {
"@biomejs/biome": "latest",
"@types/cors": "^2.8.17",
"@types/express": "latest",
"@types/body-parser": "latest",
"@types/node": "^20.11.30",
"@types/react": "^18.3.1",
"@types/react-dom": "^18.3.0",

917
pnpm-lock.yaml generated

File diff suppressed because it is too large Load diff

View file

@ -1,30 +1,27 @@
const Prefixos = {
relativo: "/estaticos",
"link-local": "http://localhost:5020/estaticos",
"link-servidor": "https://carro-de-boi-idz-one.b-cdn.net/estaticos",
node_modules: "node_modules/p-estaticos/estaticos",
};
const Prefixos = {
"relativo": "/estaticos",
"link-local": "http://localhost:5020/estaticos",
"link-servidor": "https://carro-de-boi-idz-one.b-cdn.net/estaticos",
"node_modules": "node_modules/p-estaticos/estaticos"
};
/**
/**
*
* @param caminho
* @returns String
*/
export const estaticos = (caminho: keyof typeof Prefixos) => {
export const estaticos = (caminho: keyof typeof Prefixos) => {
const prefixo = Prefixos[caminho];
return {
"logos": {
logos: {
"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.": `${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.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.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": {
"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`,
"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": {
"logo.png": `${prefixo}/logos/betha-sistemas/logo.png`
"logo.png": `${prefixo}/logos/betha-sistemas/logo.png`,
},
"betha-meio-ambiente": {
"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.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.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`,
"favicon.ico": `${prefixo}/imagens/favicon.ico`,
"exemplo_brasao.jpeg": `${prefixo}/imagens/exemplo_brasao.jpeg`
"exemplo_brasao.jpeg": `${prefixo}/imagens/exemplo_brasao.jpeg`,
},
"html": {
"404.html": `${prefixo}/html/404.html`
html: {
"404.html": `${prefixo}/html/404.html`,
},
"fundos": {
fundos: {
"fundo-16.jpg": `${prefixo}/fundos/fundo-16.jpg`,
"fundo-15.jpg": `${prefixo}/fundos/fundo-15.jpg`,
"fundo-14.jpg": `${prefixo}/fundos/fundo-14.jpg`,
@ -72,11 +69,11 @@
"fundo-04.jpg": `${prefixo}/fundos/fundo-04.jpg`,
"fundo-03.jpg": `${prefixo}/fundos/fundo-03.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": {
"sobre.txt": `${prefixo}/fonts-master/sobre.txt`,
"roboto": {
roboto: {
"Roboto-ThinItalic.ttf": `${prefixo}/fonts-master/roboto/Roboto-ThinItalic.ttf`,
"Roboto-Thin.ttf": `${prefixo}/fonts-master/roboto/Roboto-Thin.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-Black.ttf": `${prefixo}/fonts-master/roboto/Roboto-Black.ttf`,
"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": {
"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-BoldItalic.ttf": `${prefixo}/fonts-master/pt-sans/PTSans-BoldItalic.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": {
"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-Bold.ttf": `${prefixo}/fonts-master/open-sans/OpenSans-Bold.ttf`,
"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": {
"fonts.json": `${prefixo}/fonts-master/noto-sans/fonts.json`,
@ -170,9 +167,9 @@
"NotoSans-Bold.ttf": `${prefixo}/fonts-master/noto-sans/NotoSans-Bold.ttf`,
"NotoNaskhArabic-Regular.ttf": `${prefixo}/fonts-master/noto-sans/NotoNaskhArabic-Regular.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`,
"Metropolis-ThinItalic.otf": `${prefixo}/fonts-master/metropolis/Metropolis-ThinItalic.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-Bold.otf": `${prefixo}/fonts-master/metropolis/Metropolis-Bold.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`,
"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`
}
};
};
};