@syntay/fastay 0.1.0 → 0.1.1
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 +385 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -0,0 +1,385 @@
|
|
|
1
|
+
Perfeito! Aqui está a versão completa do README traduzida para português, mantendo o estilo e explicações detalhadas:
|
|
2
|
+
|
|
3
|
+
# 🚀 Fastay.js
|
|
4
|
+
|
|
5
|
+
Fastay é um framework moderno para backend construído sobre o **Express.js**, projetado para criar APIs de forma rápida, previsível e amigável para desenvolvedores.
|
|
6
|
+
|
|
7
|
+
Ele é **TypeScript-first**, baseado em arquivos, auto-descobre rotas e middlewares, e oferece uma experiência limpa de desenvolvimento.
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Por que Fastay?
|
|
12
|
+
|
|
13
|
+
Fastay foi criado para resolver problemas comuns no desenvolvimento backend com Node.js:
|
|
14
|
+
|
|
15
|
+
- **Descoberta automática de rotas** — basta criar um `route.ts` dentro de `src/api`.
|
|
16
|
+
- **Gerenciamento de middlewares** — carrega middlewares Fastay ou Express automaticamente.
|
|
17
|
+
- **Suporte total ao TypeScript** — requests, responses e middlewares totalmente tipados.
|
|
18
|
+
- **Menos boilerplate** — não é necessário registrar manualmente as rotas.
|
|
19
|
+
- **Tratamento de erros** — mensagens claras de erro em runtime e boot no modo dev e production.
|
|
20
|
+
- **Extensível** — fácil de adicionar autenticação, logging ou qualquer biblioteca do Express.
|
|
21
|
+
|
|
22
|
+
O maior ponto forte é **rapidez e simplicidade**, ideal para projetos de backend de pequeno a médio porte ou protótipos.
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## 🚀 Começando
|
|
27
|
+
|
|
28
|
+
### 1. Criar um novo projeto
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
npx fastay create-app minha-app
|
|
32
|
+
|
|
33
|
+
Exemplo do CLI:
|
|
34
|
+
|
|
35
|
+
🚀 Fastay — Create a modern backend project
|
|
36
|
+
✔ Usar TypeScript? › Sim
|
|
37
|
+
✔ Escolha um ORM: › Nenhum
|
|
38
|
+
|
|
39
|
+
2. Entrar no projeto
|
|
40
|
+
|
|
41
|
+
cd minha-app
|
|
42
|
+
npm run dev # Iniciar servidor em desenvolvimento
|
|
43
|
+
npm run dev:watch # Modo watch com reload automático
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
Estrutura do Projeto
|
|
49
|
+
|
|
50
|
+
minha-app/
|
|
51
|
+
│
|
|
52
|
+
├── dist/ # Código compilado para produção
|
|
53
|
+
│
|
|
54
|
+
├── src/
|
|
55
|
+
│ ├── api/ # Rotas da API (auto-carregadas)
|
|
56
|
+
│ │ ├── hello/
|
|
57
|
+
│ │ │ └── route.ts
|
|
58
|
+
│ │ ├── users/
|
|
59
|
+
│ │ │ └── route.ts
|
|
60
|
+
│ │ └── products/
|
|
61
|
+
│ │ └── route.ts
|
|
62
|
+
│ │
|
|
63
|
+
│ ├── middlewares/ # Middlewares Fastay
|
|
64
|
+
│ │ ├── auth.ts
|
|
65
|
+
│ │ ├── logger.ts
|
|
66
|
+
│ │ └── middleware.ts
|
|
67
|
+
│ │
|
|
68
|
+
│ ├── services/ # Lógica de negócio (opcional)
|
|
69
|
+
│ │ ├── user-service.ts
|
|
70
|
+
│ │ └── product-service.ts
|
|
71
|
+
│ │
|
|
72
|
+
│ ├── utils/ # Funções auxiliares
|
|
73
|
+
│ │ └── formatters.ts
|
|
74
|
+
│ │
|
|
75
|
+
│ └── index.ts # Entry point da app
|
|
76
|
+
│
|
|
77
|
+
├── fastay.config.json # Configuração global do framework
|
|
78
|
+
├── package.json
|
|
79
|
+
├── tsconfig.json
|
|
80
|
+
└── eslint.config.mjs
|
|
81
|
+
|
|
82
|
+
Explicação das pastas principais:
|
|
83
|
+
|
|
84
|
+
src/api — Cada pasta representa um grupo de rotas. Todo route.ts dentro é registrado automaticamente.
|
|
85
|
+
|
|
86
|
+
src/middlewares — Middlewares personalizados, carregados automaticamente ou usados via createMiddleware.
|
|
87
|
+
|
|
88
|
+
src/services — Mantém a lógica de negócio separada das rotas (Opcional porém recomendado).
|
|
89
|
+
|
|
90
|
+
src/utils — Helpers genéricos.
|
|
91
|
+
|
|
92
|
+
src/index.ts — Bootstrap principal da aplicação com createApp.
|
|
93
|
+
|
|
94
|
+
dist/ — Código compilado para produção.
|
|
95
|
+
|
|
96
|
+
fastay.config.json — Configuração do build, compilador e rotas.
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
---
|
|
101
|
+
|
|
102
|
+
⚡ src/index.ts
|
|
103
|
+
|
|
104
|
+
import { createApp } from '@syntay/fastay';
|
|
105
|
+
|
|
106
|
+
const port = 5555;
|
|
107
|
+
|
|
108
|
+
void (async () => {
|
|
109
|
+
await createApp({
|
|
110
|
+
apiDir: './src/api',
|
|
111
|
+
baseRoute: '/api',
|
|
112
|
+
port: port
|
|
113
|
+
});
|
|
114
|
+
})();
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
---
|
|
118
|
+
|
|
119
|
+
Opções do createApp
|
|
120
|
+
|
|
121
|
+
createApp recebe um único objeto para configurar totalmente a aplicação Fastay.
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
apiDir?: string; // Diretório contendo as rotas da API (default: 'src/api')
|
|
125
|
+
baseRoute?: string; // Caminho base para todas as rotas (default: '/api')
|
|
126
|
+
port?: number; // Porta do servidor (default: 5000)
|
|
127
|
+
|
|
128
|
+
middlewares?: MiddlewareMap; // Mapa de middlewares Fastay
|
|
129
|
+
expressOptions: {
|
|
130
|
+
middlewares?: express.RequestHandler[]; // Middlewares globais do Express
|
|
131
|
+
jsonOptions?: Parameters<typeof express.json>[0]; // Opções para express.json()
|
|
132
|
+
urlencodedOptions?: Parameters<typeof express.urlencoded>[0]; // Opções para express.urlencoded()
|
|
133
|
+
errorHandler?: express.ErrorRequestHandler; // Handler de erro customizado
|
|
134
|
+
static?: { path: string; options?: ServeStaticOptions }; // Servir arquivos estáticos
|
|
135
|
+
views?: { engine: string; dir: string }; // Configuração de template engine
|
|
136
|
+
trustProxy?: boolean; // Considerar headers de proxy reverso
|
|
137
|
+
locals?: Record<string, any>; // Variáveis globais para res.locals
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
Exemplos:
|
|
141
|
+
|
|
142
|
+
Aplicar middlewares globais
|
|
143
|
+
|
|
144
|
+
expressOptions: {
|
|
145
|
+
middlewares: [cors(), helmet()],
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
Configurar body parsers
|
|
149
|
+
|
|
150
|
+
expressOptions: {
|
|
151
|
+
jsonOptions: { limit: '10mb' },
|
|
152
|
+
urlencodedOptions: { extended: true },
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
Servir arquivos estáticos
|
|
156
|
+
|
|
157
|
+
expressOptions: {
|
|
158
|
+
static: { path: 'public', options: { maxAge: 3600000 } }
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
Configurar views e locals
|
|
162
|
+
|
|
163
|
+
expressOptions: {
|
|
164
|
+
views: { engine: 'pug', dir: 'views' },
|
|
165
|
+
locals: { siteName: 'Fastay' }
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
Handler de erro customizado
|
|
169
|
+
|
|
170
|
+
expressOptions: {
|
|
171
|
+
errorHandler: (err, req, res, next) => {
|
|
172
|
+
console.error(err);
|
|
173
|
+
res.status(500).json({ message: 'Algo deu errado!' });
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
---
|
|
179
|
+
|
|
180
|
+
fastay.config.json
|
|
181
|
+
|
|
182
|
+
{
|
|
183
|
+
"entry": "src/index.ts",
|
|
184
|
+
"outDir": "dist",
|
|
185
|
+
"routesDir": "src/routes",
|
|
186
|
+
"compiler": {
|
|
187
|
+
"minify": false,
|
|
188
|
+
"target": "es2020"
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
entry — Arquivo principal da aplicação.
|
|
193
|
+
|
|
194
|
+
outDir — Diretório de saída do código compilado.
|
|
195
|
+
|
|
196
|
+
routesDir — Diretório opcional para rotas (default src/api).
|
|
197
|
+
|
|
198
|
+
compiler — Opções para compilação TypeScript/ESBuild.
|
|
199
|
+
|
|
200
|
+
|
|
201
|
+
|
|
202
|
+
---
|
|
203
|
+
|
|
204
|
+
Rotas da API
|
|
205
|
+
|
|
206
|
+
Roteamento baseado em arquivos com sintaxe limpa:
|
|
207
|
+
|
|
208
|
+
import { Request } from '@syntay/fastay';
|
|
209
|
+
|
|
210
|
+
export async function GET() {
|
|
211
|
+
return "Hello World";
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
export async function POST(req: Request) {
|
|
215
|
+
return { message: 'Hello World' };
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
Cada método HTTP é exportado como função.
|
|
219
|
+
|
|
220
|
+
Registrado automaticamente pelo Fastay.
|
|
221
|
+
|
|
222
|
+
Tipado e compatível com TypeScript.
|
|
223
|
+
|
|
224
|
+
Suporta middlewares Express.
|
|
225
|
+
|
|
226
|
+
✅ Por que é melhor que Express puro:
|
|
227
|
+
|
|
228
|
+
Sem boilerplate: não precisa chamar app.get(...) ou app.post(...) manualmente.
|
|
229
|
+
|
|
230
|
+
Separação limpa dos arquivos de rota: cada rota fica em um arquivo route.ts dentro de api ou outro diretório.
|
|
231
|
+
|
|
232
|
+
Auto-descoberta de rotas: Fastay detecta automaticamente os arquivos de rota e registra.
|
|
233
|
+
|
|
234
|
+
Fácil manutenção de projetos grandes: sem necessidade de registrar manualmente centenas de rotas, mantendo organização clara.
|
|
235
|
+
|
|
236
|
+
|
|
237
|
+
1️⃣ Express.js
|
|
238
|
+
|
|
239
|
+
import express from 'express';
|
|
240
|
+
|
|
241
|
+
const app = express();
|
|
242
|
+
|
|
243
|
+
// GET
|
|
244
|
+
app.get('/api/hello', (req, res) => {
|
|
245
|
+
res.json({ message: 'Hello World' });
|
|
246
|
+
});
|
|
247
|
+
|
|
248
|
+
// POST
|
|
249
|
+
app.post('/api/hello', (req, res) => {
|
|
250
|
+
res.json({ message: 'Hello POST World' });
|
|
251
|
+
});
|
|
252
|
+
|
|
253
|
+
// Middleware
|
|
254
|
+
app.use('/api/auth', (req, res, next) => {
|
|
255
|
+
console.log('Auth middleware');
|
|
256
|
+
next();
|
|
257
|
+
});
|
|
258
|
+
|
|
259
|
+
app.listen(5000, () => console.log('Server running on port 5000'));
|
|
260
|
+
|
|
261
|
+
Pontos negativos do Express puro:
|
|
262
|
+
|
|
263
|
+
Muitas vezes precisa registrar manualmente cada rota.
|
|
264
|
+
|
|
265
|
+
Middleware e rotas misturados no mesmo arquivo.
|
|
266
|
+
|
|
267
|
+
Escalabilidade de grandes projetos fica complicada.
|
|
268
|
+
|
|
269
|
+
|
|
270
|
+
|
|
271
|
+
---
|
|
272
|
+
|
|
273
|
+
2️⃣ NestJS
|
|
274
|
+
|
|
275
|
+
import { Controller, Get, Post, Body } from '@nestjs/common';
|
|
276
|
+
|
|
277
|
+
@Controller('api/hello')
|
|
278
|
+
export class HelloController {
|
|
279
|
+
@Get()
|
|
280
|
+
getHello() {
|
|
281
|
+
return { message: 'Hello World' };
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
@Post()
|
|
285
|
+
postHello(@Body() body: any) {
|
|
286
|
+
return { message: 'Hello POST World', body };
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
Características do NestJS:
|
|
291
|
+
|
|
292
|
+
Baseado em decorators e classes.
|
|
293
|
+
|
|
294
|
+
Rotas e controllers organizados em módulos.
|
|
295
|
+
|
|
296
|
+
Tipo-safe e integrado ao TypeScript.
|
|
297
|
+
|
|
298
|
+
Exige aprendizado de decorators, módulos e injeção de dependências.
|
|
299
|
+
|
|
300
|
+
|
|
301
|
+
|
|
302
|
+
---
|
|
303
|
+
|
|
304
|
+
3️⃣ Fastay.js
|
|
305
|
+
|
|
306
|
+
import { Request } from '@syntay/fastay';
|
|
307
|
+
|
|
308
|
+
// GET /api/hello
|
|
309
|
+
export async function GET() {
|
|
310
|
+
return { message: 'Hello World' };
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
// POST /api/hello
|
|
314
|
+
export async function POST(req: Request) {
|
|
315
|
+
return { message: 'Hello POST World' };
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
Características do Fastay:
|
|
319
|
+
|
|
320
|
+
Baseado em arquivos, cada método HTTP é exportado.
|
|
321
|
+
|
|
322
|
+
Rotas auto-descobertas — não precisa registrar manualmente.
|
|
323
|
+
|
|
324
|
+
Middleware separado ou aplicado via createMiddleware.
|
|
325
|
+
|
|
326
|
+
Tipo-safe, clean e simples.
|
|
327
|
+
|
|
328
|
+
---
|
|
329
|
+
|
|
330
|
+
|
|
331
|
+
|
|
332
|
+
> No **Fastay** Para definir uma rota, crie um arquivo route.ts dentro do diretório api ou outro definido em createApp. Cada diretório dentro de api com route.ts é transformado em rota e detectado automaticamente.
|
|
333
|
+
|
|
334
|
+
|
|
335
|
+
|
|
336
|
+
|
|
337
|
+
---
|
|
338
|
+
|
|
339
|
+
Middlewares
|
|
340
|
+
|
|
341
|
+
Fastay permite middlewares auto-carregados e via createMiddleware:
|
|
342
|
+
|
|
343
|
+
import { Request, Response, Next } from '@syntay/fastay';
|
|
344
|
+
|
|
345
|
+
export async function auth(req: Request, _res: Response, next: Next) {
|
|
346
|
+
// Lógica de autenticação
|
|
347
|
+
next();
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
E crie um arquivo middleware.ts dentro da pasta src/middleware e use a função createMiddleware para configurar o seu middleware:
|
|
351
|
+
|
|
352
|
+
import { createMiddleware } from '@syntay/fastay';
|
|
353
|
+
import { auth } from './auth';
|
|
354
|
+
import { logger } from './logger';
|
|
355
|
+
|
|
356
|
+
export const middleware = createMiddleware({
|
|
357
|
+
'/auth': [auth],
|
|
358
|
+
'/admin': [logger],
|
|
359
|
+
});
|
|
360
|
+
|
|
361
|
+
|
|
362
|
+
---
|
|
363
|
+
|
|
364
|
+
📦 Fluxo de Request
|
|
365
|
+
|
|
366
|
+
Cliente → Rota Fastay → Middleware → Handler da Rota → Service → Response
|
|
367
|
+
|
|
368
|
+
|
|
369
|
+
---
|
|
370
|
+
|
|
371
|
+
Conclusão
|
|
372
|
+
|
|
373
|
+
Fastay.js é um framework backend leve e TypeScript-first que:
|
|
374
|
+
|
|
375
|
+
Auto-carrega rotas e middlewares.
|
|
376
|
+
|
|
377
|
+
Fornece uma API limpa e previsível.
|
|
378
|
+
|
|
379
|
+
Compatível com bibliotecas Express.
|
|
380
|
+
|
|
381
|
+
Reduz boilerplate e aumenta a manutenção.
|
|
382
|
+
|
|
383
|
+
|
|
384
|
+
Ideal para desenvolvedores que querem estrutura sem complicação.
|
|
385
|
+
```
|