@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.
Files changed (2) hide show
  1. package/README.md +385 -0
  2. 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
+ ```
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@syntay/fastay",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "type": "module",