@ismael1361/router 1.0.0 → 1.0.5
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 +493 -738
- package/dist/Doc/index.d.ts +21 -0
- package/dist/Doc/index.d.ts.map +1 -0
- package/dist/Doc/type.d.ts +66 -0
- package/dist/Doc/type.d.ts.map +1 -0
- package/dist/HandleError.d.ts +42 -0
- package/dist/HandleError.d.ts.map +1 -1
- package/dist/Layer.d.ts +130 -0
- package/dist/Layer.d.ts.map +1 -0
- package/dist/Middlewares.d.ts +89 -0
- package/dist/Middlewares.d.ts.map +1 -0
- package/dist/handler.d.ts +65 -94
- package/dist/handler.d.ts.map +1 -1
- package/dist/index.d.ts +96 -117
- package/dist/index.d.ts.map +1 -1
- package/dist/index.esm.js +1 -1
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/middleware.d.ts +56 -127
- package/dist/middleware.d.ts.map +1 -1
- package/dist/redocUi/index.d.ts +4 -0
- package/dist/redocUi/index.d.ts.map +1 -0
- package/dist/router.d.ts +188 -337
- package/dist/router.d.ts.map +1 -1
- package/dist/type.d.ts +45 -52
- package/dist/type.d.ts.map +1 -1
- package/dist/utils.d.ts +7 -2
- package/dist/utils.d.ts.map +1 -1
- package/package.json +5 -2
package/dist/router.d.ts
CHANGED
|
@@ -1,234 +1,179 @@
|
|
|
1
1
|
import type swaggerJSDoc from "swagger-jsdoc";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import type { MiddlewareCallback, MiddlewareFCDoc, Request, Response, SwaggerOptions } from "./type";
|
|
3
|
+
import { Handler, RequestHandler } from "./handler";
|
|
4
|
+
import { Layer } from "./Layer";
|
|
5
|
+
import * as http from "http";
|
|
6
|
+
import { Express } from "express";
|
|
4
7
|
/**
|
|
5
|
-
* A classe
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
+
* A classe principal do roteador, que encapsula e aprimora o roteador do Express.
|
|
9
|
+
* Fornece uma API fluente e fortemente tipada para definir rotas, aplicar middlewares
|
|
10
|
+
* e gerar documentação OpenAPI (Swagger/ReDoc) de forma integrada.
|
|
8
11
|
*
|
|
9
|
-
* @template Rq - O tipo base
|
|
10
|
-
* @template Rs - O tipo base
|
|
12
|
+
* @template Rq - O tipo base de `Request` para este roteador.
|
|
13
|
+
* @template Rs - O tipo base de `Response` para este roteador.
|
|
11
14
|
*
|
|
12
15
|
* @example
|
|
13
|
-
* import
|
|
14
|
-
* import { Router } from "./router"; // Ajuste o caminho do import conforme sua estrutura.
|
|
15
|
-
* import swaggerUi from "swagger-ui-express";
|
|
16
|
+
* import { create, Middlewares } from '@ismael1361/router';
|
|
16
17
|
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
18
|
+
* const app = create();
|
|
19
|
+
* app.middleware(Middlewares.json());
|
|
19
20
|
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
* .handler((req: Request<{ id: string }>, res: Response) => {
|
|
24
|
-
* const { id } = req.params;
|
|
25
|
-
* res.json({ id: Number(id), name: "John Doe" });
|
|
26
|
-
* })
|
|
27
|
-
* .doc({
|
|
28
|
-
* summary: "Obter um usuário pelo ID",
|
|
29
|
-
* tags: ["Usuários"],
|
|
30
|
-
* parameters: [
|
|
31
|
-
* {
|
|
32
|
-
* name: "id",
|
|
33
|
-
* in: "path",
|
|
34
|
-
* required: true,
|
|
35
|
-
* description: "O ID do usuário",
|
|
36
|
-
* schema: { type: "integer" },
|
|
37
|
-
* },
|
|
38
|
-
* ],
|
|
39
|
-
* responses: {
|
|
40
|
-
* "200": {
|
|
41
|
-
* description: "Detalhes do usuário.",
|
|
42
|
-
* content: {
|
|
43
|
-
* "application/json": {
|
|
44
|
-
* schema: {
|
|
45
|
-
* type: "object",
|
|
46
|
-
* properties: {
|
|
47
|
-
* id: { type: "integer" },
|
|
48
|
-
* name: { type: "string" },
|
|
49
|
-
* },
|
|
50
|
-
* },
|
|
51
|
-
* },
|
|
52
|
-
* },
|
|
53
|
-
* },
|
|
54
|
-
* "404": {
|
|
55
|
-
* description: "Usuário não encontrado",
|
|
56
|
-
* }
|
|
57
|
-
* },
|
|
21
|
+
* app.get('/health', { summary: 'Verifica a saúde da API' })
|
|
22
|
+
* .handler((req, res) => {
|
|
23
|
+
* res.status(200).send('OK');
|
|
58
24
|
* });
|
|
59
25
|
*
|
|
60
|
-
* // 3. Crie um aplicativo Express e use o roteador.
|
|
61
|
-
* const app = express();
|
|
62
|
-
* app.use(express.json());
|
|
63
|
-
*
|
|
64
|
-
* // A propriedade `.router` contém a instância do roteador Express, pronta para ser usada.
|
|
65
|
-
* app.use("/users", userRouter.router);
|
|
66
|
-
*
|
|
67
|
-
* // 4. (Opcional) Gere e sirva a documentação Swagger.
|
|
68
|
-
* const swaggerOptions = userRouter.getSwagger({
|
|
69
|
-
* openapi: "3.0.0",
|
|
70
|
-
* info: {
|
|
71
|
-
* title: "API de Usuários",
|
|
72
|
-
* version: "1.0.0",
|
|
73
|
-
* },
|
|
74
|
-
* });
|
|
75
|
-
* app.use("/api-docs", swaggerUi.serve, swaggerUi.setup(swaggerOptions));
|
|
76
|
-
*
|
|
77
26
|
* app.listen(3000, () => {
|
|
78
|
-
* console.log(
|
|
79
|
-
* console.log("Documentação da API em http://localhost:3000/api-docs");
|
|
27
|
+
* console.log('Servidor rodando na porta 3000');
|
|
80
28
|
* });
|
|
81
29
|
*/
|
|
82
30
|
export declare class Router<Rq extends Request = Request, Rs extends Response = Response> {
|
|
83
|
-
readonly
|
|
84
|
-
readonly
|
|
85
|
-
|
|
31
|
+
readonly routePath: string;
|
|
32
|
+
readonly layers: Layer;
|
|
33
|
+
/** A instância subjacente do Express. */
|
|
34
|
+
app: Express;
|
|
35
|
+
private express_router;
|
|
86
36
|
/**
|
|
87
|
-
*
|
|
88
|
-
*
|
|
89
|
-
*
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
*
|
|
94
|
-
*
|
|
95
|
-
* @template Req - O tipo de `Request` que o middleware adiciona ou modifica.
|
|
96
|
-
* @template Res - O tipo de `Response` que o middleware adiciona ou modifica.
|
|
37
|
+
* @internal
|
|
38
|
+
* @param {string} [routePath=""] - O prefixo de caminho para este roteador.
|
|
39
|
+
* @param {Layer} [layers=new Layer()] - A camada interna para gerenciar rotas e middlewares.
|
|
40
|
+
*/
|
|
41
|
+
constructor(routePath?: string, layers?: Layer);
|
|
42
|
+
/**
|
|
43
|
+
* Anexa documentação OpenAPI a um grupo de rotas (um roteador).
|
|
44
|
+
* Útil para definir informações comuns, como tags, para um conjunto de rotas.
|
|
97
45
|
*
|
|
98
|
-
* @param {
|
|
99
|
-
*
|
|
100
|
-
|
|
46
|
+
* @param {swaggerJSDoc.Operation} operation - O objeto de operação OpenAPI.
|
|
47
|
+
* @param {swaggerJSDoc.Components} [components={}] - Componentes OpenAPI.
|
|
48
|
+
*/
|
|
49
|
+
doc(operation: swaggerJSDoc.Operation, components?: swaggerJSDoc.Components): void;
|
|
50
|
+
/**
|
|
51
|
+
* Aplica um middleware a todas as rotas subsequentes definidas neste roteador.
|
|
101
52
|
*
|
|
102
|
-
* @
|
|
103
|
-
*
|
|
53
|
+
* @template Req - Tipo de `Request` estendido pelo middleware.
|
|
54
|
+
* @template Res - Tipo de `Response` estendido pelo middleware.
|
|
55
|
+
* @param {MiddlewareCallback<Rq & Req, Rs & Res>} callback - A função ou componente de middleware.
|
|
56
|
+
* @param {MiddlewareFCDoc} [doc] - Documentação OpenAPI opcional para este middleware.
|
|
57
|
+
* @returns {Router<Rq & Req, Rs & Res>} A instância do roteador com os tipos atualizados.
|
|
58
|
+
*/
|
|
59
|
+
middleware<Req extends Request = Request, Res extends Response = Response>(callback: MiddlewareCallback<Rq & Req, Rs & Res>, doc?: MiddlewareFCDoc): Router<Rq & Req, Rs & Res>;
|
|
60
|
+
/**
|
|
61
|
+
* Cria um componente de manipulador (handler) reutilizável.
|
|
62
|
+
* Este método é um atalho para a função `handler` exportada, permitindo criar
|
|
63
|
+
* um manipulador completo e reutilizável que pode encapsular uma ou mais funções de middleware
|
|
64
|
+
* e um manipulador final.
|
|
104
65
|
*
|
|
105
66
|
* @example
|
|
106
|
-
*
|
|
107
|
-
*
|
|
108
|
-
*
|
|
109
|
-
*
|
|
110
|
-
*
|
|
111
|
-
*
|
|
112
|
-
*
|
|
113
|
-
*
|
|
114
|
-
*
|
|
115
|
-
*
|
|
116
|
-
*
|
|
117
|
-
*
|
|
118
|
-
*
|
|
119
|
-
*
|
|
120
|
-
*
|
|
121
|
-
*
|
|
122
|
-
*
|
|
123
|
-
* authenticatedRouter.get("/profile").handler((req, res) => {
|
|
124
|
-
* // `req.user` está disponível e corretamente tipado.
|
|
125
|
-
* res.json({ message: `Bem-vindo, ${req.user.name}!` });
|
|
126
|
-
* });
|
|
67
|
+
* // Crie um manipulador reutilizável que primeiro executa um middleware e depois a lógica principal.
|
|
68
|
+
* const processDataHandler = app.handler(
|
|
69
|
+
* middleware(dataValidationMiddleware)
|
|
70
|
+
* .handler((req, res) => {
|
|
71
|
+
* // A lógica principal do handler aqui.
|
|
72
|
+
* res.json({ processedData: req.validatedData });
|
|
73
|
+
* })
|
|
74
|
+
* );
|
|
75
|
+
*
|
|
76
|
+
* // Use o manipulador reutilizável em uma rota.
|
|
77
|
+
* app.post('/process', { summary: 'Processar dados' })
|
|
78
|
+
* .handler(processDataHandler);
|
|
79
|
+
*
|
|
80
|
+
* @param {MiddlewareCallback<Rq & Req, Rs & Res>} callback - A função ou componente de middleware/handler.
|
|
81
|
+
* @param {MiddlewareFCDoc} [doc] - Documentação OpenAPI opcional para este manipulador.
|
|
82
|
+
* @returns {Handler<Rq & Req, Rs & Res>} Uma instância de `Handler` que pode ser usada em rotas.
|
|
127
83
|
*/
|
|
128
|
-
|
|
84
|
+
handler<Req extends Request = Request, Res extends Response = Response>(callback: MiddlewareCallback<Rq & Req, Rs & Res>, doc?: MiddlewareFCDoc): Handler<Rq & Req, Rs & Res>;
|
|
129
85
|
/**
|
|
130
|
-
*
|
|
131
|
-
* em uma única instância reutilizável de `PreparedHandler`.
|
|
132
|
-
*
|
|
133
|
-
* Este método é o ponto final para a criação de "controllers" ou "actions" modulares.
|
|
134
|
-
* Ele pega a lógica do handler e a combina com os middlewares definidos na cadeia do roteador
|
|
135
|
-
* (`.middleware(...)`), produzindo um objeto que pode ser passado para o método `.handler()`
|
|
136
|
-
* de uma definição de rota (por exemplo, `router.get(...).handler(controller)`).
|
|
137
|
-
*
|
|
138
|
-
* @template Req - Tipos de requisição adicionais inferidos a partir do handler.
|
|
139
|
-
* @template Res - Tipos de resposta adicionais inferidos a partir do handler.
|
|
140
|
-
* @param {HandlerFC<Rq & Req, Rs & Res>} callback - A função de handler final ou uma instância de `PreparedHandler` já existente. Se um `PreparedHandler` for fornecido, seus middlewares serão combinados com os middlewares da cadeia atual.
|
|
141
|
-
* @returns {PreparedHandler<Rq & Req, Rs & Res>} Uma nova instância de `PreparedHandler` que encapsula o handler e a cadeia completa de middlewares.
|
|
86
|
+
* Inicia a definição de uma rota para o método HTTP GET.
|
|
142
87
|
*
|
|
143
88
|
* @example
|
|
144
|
-
*
|
|
145
|
-
*
|
|
146
|
-
*
|
|
147
|
-
*
|
|
148
|
-
*
|
|
149
|
-
* };
|
|
150
|
-
*
|
|
151
|
-
* const adminOnlyMiddleware: MiddlewareFC<AuthRequest> = (req, res, next) => {
|
|
152
|
-
* if (req.user.role !== 'admin') return res.status(403).send('Forbidden');
|
|
153
|
-
* next();
|
|
154
|
-
* };
|
|
155
|
-
*
|
|
156
|
-
* // 2. Defina o handler final que depende dos middlewares.
|
|
157
|
-
* const getDashboard: HandlerFC<AuthRequest> = (req, res) => {
|
|
158
|
-
* res.send(`Welcome, admin user ${req.user.id}`);
|
|
159
|
-
* };
|
|
160
|
-
*
|
|
161
|
-
* // 3. Crie um "construtor" de controller encadeando os middlewares.
|
|
162
|
-
* const controllerBuilder = new Router().middleware(authMiddleware).middleware(adminOnlyMiddleware);
|
|
163
|
-
*
|
|
164
|
-
* // 4. Use o método `.handler()` para criar o controller reutilizável.
|
|
165
|
-
* const getDashboardController = controllerBuilder.handler(getDashboard);
|
|
89
|
+
* router.get('/users/:id', { summary: 'Obter um usuário' })
|
|
90
|
+
* .handler((req, res) => {
|
|
91
|
+
* // req.params.id está disponível
|
|
92
|
+
* res.json({ id: req.params.id, name: 'John Doe' });
|
|
93
|
+
* });
|
|
166
94
|
*
|
|
167
|
-
*
|
|
168
|
-
*
|
|
169
|
-
* mainRouter.get('/admin/dashboard').handler(getDashboardController);
|
|
170
|
-
* // A rota acima aplicará automaticamente `authMiddleware` e `adminOnlyMiddleware`
|
|
171
|
-
* // antes de executar `getDashboard`.
|
|
172
|
-
*/
|
|
173
|
-
handler<Req extends Request = Request, Res extends Response = Response>(callback: HandlerFC<Rq & Req, Rs & Res>): PreparedHandler<Rq & Req, Rs & Res>;
|
|
174
|
-
/**
|
|
175
|
-
* Cria um manipulador de rota para requisições GET.
|
|
176
|
-
* @param {string} path O caminho da rota.
|
|
95
|
+
* @param {string} path - O caminho da rota (ex: '/users', '/users/:id').
|
|
96
|
+
* @param {MiddlewareFCDoc} doc - (Opcional) Documentação OpenAPI para o manipulador de rota.
|
|
177
97
|
* @returns {RequestHandler<Rq, Rs>} Uma instância de `RequestHandler` para encadear middlewares e o manipulador final.
|
|
178
98
|
*/
|
|
179
|
-
get(path: string): RequestHandler<Rq, Rs>;
|
|
99
|
+
get(path: string, doc?: MiddlewareFCDoc): RequestHandler<Rq, Rs>;
|
|
180
100
|
/**
|
|
181
|
-
*
|
|
182
|
-
*
|
|
101
|
+
* Inicia a definição de uma rota para o método HTTP POST.
|
|
102
|
+
*
|
|
103
|
+
* @example
|
|
104
|
+
* router.post('/users', { summary: 'Criar um usuário' })
|
|
105
|
+
* .handler((req, res) => {
|
|
106
|
+
* const newUser = req.body;
|
|
107
|
+
* res.status(201).json({ id: 'new-id', ...newUser });
|
|
108
|
+
* });
|
|
109
|
+
*
|
|
110
|
+
* @param {string} path - O caminho da rota.
|
|
111
|
+
* @param {MiddlewareFCDoc} doc - (Opcional) Documentação OpenAPI para o manipulador de rota.
|
|
183
112
|
* @returns {RequestHandler<Rq, Rs>} Uma instância de `RequestHandler` para encadear middlewares e o manipulador final.
|
|
184
113
|
*/
|
|
185
|
-
post(path: string): RequestHandler<Rq, Rs>;
|
|
114
|
+
post(path: string, doc?: MiddlewareFCDoc): RequestHandler<Rq, Rs>;
|
|
186
115
|
/**
|
|
187
|
-
*
|
|
188
|
-
* @param {string} path O caminho da rota.
|
|
116
|
+
* Inicia a definição de uma rota para o método HTTP PUT.
|
|
117
|
+
* @param {string} path - O caminho da rota.
|
|
118
|
+
* @param {MiddlewareFCDoc} doc - (Opcional) Documentação OpenAPI para o manipulador de rota.
|
|
189
119
|
* @returns {RequestHandler<Rq, Rs>} Uma instância de `RequestHandler` para encadear middlewares e o manipulador final.
|
|
190
120
|
*/
|
|
191
|
-
put(path: string): RequestHandler<Rq, Rs>;
|
|
121
|
+
put(path: string, doc?: MiddlewareFCDoc): RequestHandler<Rq, Rs>;
|
|
192
122
|
/**
|
|
193
|
-
*
|
|
194
|
-
* @param {string} path O caminho da rota.
|
|
123
|
+
* Inicia a definição de uma rota para o método HTTP DELETE.
|
|
124
|
+
* @param {string} path - O caminho da rota.
|
|
125
|
+
* @param {MiddlewareFCDoc} doc - (Opcional) Documentação OpenAPI para o manipulador de rota.
|
|
195
126
|
* @returns {RequestHandler<Rq, Rs>} Uma instância de `RequestHandler` para encadear middlewares e o manipulador final.
|
|
196
127
|
*/
|
|
197
|
-
delete(path: string): RequestHandler<Rq, Rs>;
|
|
128
|
+
delete(path: string, doc?: MiddlewareFCDoc): RequestHandler<Rq, Rs>;
|
|
198
129
|
/**
|
|
199
|
-
*
|
|
200
|
-
* @param {string} path O caminho da rota.
|
|
130
|
+
* Inicia a definição de uma rota para o método HTTP PATCH.
|
|
131
|
+
* @param {string} path - O caminho da rota.
|
|
132
|
+
* @param {MiddlewareFCDoc} doc - (Opcional) Documentação OpenAPI para o manipulador de rota.
|
|
201
133
|
* @returns {RequestHandler<Rq, Rs>} Uma instância de `RequestHandler` para encadear middlewares e o manipulador final.
|
|
202
134
|
*/
|
|
203
|
-
patch(path: string): RequestHandler<Rq, Rs>;
|
|
135
|
+
patch(path: string, doc?: MiddlewareFCDoc): RequestHandler<Rq, Rs>;
|
|
204
136
|
/**
|
|
205
|
-
*
|
|
206
|
-
* @param {string} path O caminho da rota.
|
|
137
|
+
* Inicia a definição de uma rota para o método HTTP OPTIONS.
|
|
138
|
+
* @param {string} path - O caminho da rota.
|
|
139
|
+
* @param {MiddlewareFCDoc} doc - (Opcional) Documentação OpenAPI para o manipulador de rota.
|
|
207
140
|
* @returns {RequestHandler<Rq, Rs>} Uma instância de `RequestHandler` para encadear middlewares e o manipulador final.
|
|
208
141
|
*/
|
|
209
|
-
options(path: string): RequestHandler<Rq, Rs>;
|
|
142
|
+
options(path: string, doc?: MiddlewareFCDoc): RequestHandler<Rq, Rs>;
|
|
210
143
|
/**
|
|
211
|
-
*
|
|
212
|
-
* @param {string} path O caminho da rota.
|
|
144
|
+
* Inicia a definição de uma rota para o método HTTP HEAD.
|
|
145
|
+
* @param {string} path - O caminho da rota.
|
|
146
|
+
* @param {MiddlewareFCDoc} doc - (Opcional) Documentação OpenAPI para o manipulador de rota.
|
|
213
147
|
* @returns {RequestHandler<Rq, Rs>} Uma instância de `RequestHandler` para encadear middlewares e o manipulador final.
|
|
214
148
|
*/
|
|
215
|
-
head(path: string): RequestHandler<Rq, Rs>;
|
|
149
|
+
head(path: string, doc?: MiddlewareFCDoc): RequestHandler<Rq, Rs>;
|
|
216
150
|
/**
|
|
217
|
-
*
|
|
218
|
-
* @param {string} path O caminho da rota.
|
|
151
|
+
* Inicia a definição de uma rota que corresponde a todos os métodos HTTP.
|
|
152
|
+
* @param {string} path - O caminho da rota.
|
|
153
|
+
* @param {MiddlewareFCDoc} doc - (Opcional) Documentação OpenAPI para o manipulador de rota.
|
|
219
154
|
* @returns {RequestHandler<Rq, Rs>} Uma instância de `RequestHandler` para encadear middlewares e o manipulador final.
|
|
220
155
|
*/
|
|
221
|
-
all(path: string): RequestHandler<Rq, Rs>;
|
|
156
|
+
all(path: string, doc?: MiddlewareFCDoc): RequestHandler<Rq, Rs>;
|
|
222
157
|
/**
|
|
223
|
-
* Aplica um middleware a um caminho específico
|
|
224
|
-
*
|
|
158
|
+
* Aplica um middleware a um caminho específico, correspondendo a todos os métodos HTTP.
|
|
159
|
+
*
|
|
160
|
+
* @example
|
|
161
|
+
* // Aplica um middleware de log para todas as rotas sob /api
|
|
162
|
+
* router.use('/api', { tags: ['Logging'] })
|
|
163
|
+
* .handler((req, res, next) => {
|
|
164
|
+
* console.log('API call:', req.method, req.path);
|
|
165
|
+
* next();
|
|
166
|
+
* });
|
|
167
|
+
*
|
|
168
|
+
* @param {string} path - O caminho da rota.
|
|
169
|
+
* @param {MiddlewareFCDoc} doc - (Opcional) Documentação OpenAPI para o manipulador de rota.
|
|
225
170
|
* @returns {RequestHandler<Rq, Rs>} Uma instância de `RequestHandler` para encadear middlewares e o manipulador final.
|
|
226
171
|
*/
|
|
227
|
-
use(path
|
|
172
|
+
use(path?: string, doc?: MiddlewareFCDoc): RequestHandler<Rq, Rs>;
|
|
228
173
|
/**
|
|
229
|
-
*
|
|
230
|
-
* Útil para
|
|
231
|
-
* @returns {Array<
|
|
174
|
+
* Retorna uma lista achatada de todas as rotas finais registradas,
|
|
175
|
+
* com middlewares e caminhos resolvidos. Útil para depuração.
|
|
176
|
+
* @returns {Array<object>} Uma lista de objetos de rota.
|
|
232
177
|
*/
|
|
233
178
|
get routes(): {
|
|
234
179
|
path: string;
|
|
@@ -237,180 +182,86 @@ export declare class Router<Rq extends Request = Request, Rs extends Response =
|
|
|
237
182
|
swagger?: Pick<swaggerJSDoc.OAS3Definition, "paths" | "components">;
|
|
238
183
|
}[];
|
|
239
184
|
/**
|
|
240
|
-
*
|
|
241
|
-
*
|
|
242
|
-
*
|
|
243
|
-
*
|
|
244
|
-
* e as mescla em um único objeto de especificação, que pode ser usado diretamente
|
|
245
|
-
* com ferramentas como `swagger-ui-express`.
|
|
246
|
-
*
|
|
247
|
-
* @param {swaggerJSDoc.OAS3Definition} [options] - Um objeto de definição base do OpenAPI.
|
|
248
|
-
* Use-o para fornecer informações globais como `info`, `servers`, `security`, etc.
|
|
249
|
-
* A documentação gerada (`paths`, `components`) será mesclada a este objeto.
|
|
250
|
-
*
|
|
251
|
-
* @param {swaggerJSDoc.Responses} [defaultResponses={}] - Um objeto contendo respostas padrão
|
|
252
|
-
* (por exemplo, `400`, `401`, `500`) que serão adicionadas a **todas** as rotas.
|
|
253
|
-
* Se uma rota definir uma resposta com o mesmo código de status, a definição da rota
|
|
254
|
-
* terá precedência.
|
|
255
|
-
*
|
|
256
|
-
* @returns {swaggerJSDoc.Options} Um objeto de opções completo, pronto para ser usado
|
|
257
|
-
* pelo `swagger-jsdoc` ou `swagger-ui-express`.
|
|
258
|
-
*
|
|
259
|
-
* @example
|
|
260
|
-
* import express from "express";
|
|
261
|
-
* import swaggerUi from "swagger-ui-express";
|
|
262
|
-
* import { Router } from "./router";
|
|
263
|
-
*
|
|
264
|
-
* const apiRouter = new Router();
|
|
265
|
-
*
|
|
266
|
-
* apiRouter.get("/health")
|
|
267
|
-
* .handler((req, res) => res.send("OK"))
|
|
268
|
-
* .doc({
|
|
269
|
-
* summary: "Verifica a saúde da API",
|
|
270
|
-
* tags: ["Status"],
|
|
271
|
-
* responses: { "200": { description: "API está operacional" } }
|
|
272
|
-
* });
|
|
273
|
-
*
|
|
274
|
-
* // Definições base para o Swagger
|
|
275
|
-
* const swaggerDefinition = {
|
|
276
|
-
* openapi: "3.0.0",
|
|
277
|
-
* info: { title: "Minha API", version: "1.0.0" },
|
|
278
|
-
* servers: [{ url: "http://localhost:3000" }],
|
|
279
|
-
* };
|
|
280
|
-
*
|
|
281
|
-
* // Respostas padrão para todas as rotas
|
|
282
|
-
* const defaultResponses = {
|
|
283
|
-
* "400": { description: "Requisição inválida" },
|
|
284
|
-
* "500": { description: "Erro interno do servidor" },
|
|
285
|
-
* };
|
|
286
|
-
*
|
|
287
|
-
* // Gera as opções do Swagger
|
|
288
|
-
* const swaggerOptions = apiRouter.getSwagger(swaggerDefinition, defaultResponses);
|
|
289
|
-
*
|
|
290
|
-
* // Integra com o Express
|
|
291
|
-
* const app = express();
|
|
292
|
-
* app.use('/api', apiRouter.router);
|
|
293
|
-
* app.use('/api-docs', swaggerUi.serve, swaggerUi.setup(swaggerOptions));
|
|
294
|
-
*
|
|
295
|
-
* app.listen(3000);
|
|
185
|
+
* Gera a especificação OpenAPI completa com base na documentação definida.
|
|
186
|
+
* @param {swaggerJSDoc.OAS3Definition} [options] - Opções de base para a definição OpenAPI.
|
|
187
|
+
* @param {swaggerJSDoc.Responses} [defaultResponses={}] - Respostas padrão a serem mescladas em todas as rotas.
|
|
188
|
+
* @returns {swaggerJSDoc.Options} O objeto de opções pronto para ser usado por `swagger-jsdoc`.
|
|
296
189
|
*/
|
|
297
190
|
getSwagger(options?: swaggerJSDoc.OAS3Definition, defaultResponses?: swaggerJSDoc.Responses): swaggerJSDoc.Options;
|
|
298
191
|
/**
|
|
299
|
-
*
|
|
300
|
-
*
|
|
301
|
-
* Este método é ideal para organizar rotas relacionadas em módulos. Todas as rotas
|
|
302
|
-
* definidas no roteador retornado serão prefixadas com o `path` fornecido.
|
|
303
|
-
* A nova instância do roteador herda os middlewares do roteador pai.
|
|
304
|
-
*
|
|
305
|
-
* @param {string} path - O prefixo do caminho para o sub-roteador.
|
|
306
|
-
* @returns {Router<Rq, Rs>} Uma nova instância de `Router` para definir rotas dentro do caminho especificado.
|
|
192
|
+
* Define as opções globais de documentação OpenAPI para este roteador.
|
|
307
193
|
*
|
|
308
194
|
* @example
|
|
309
|
-
*
|
|
310
|
-
*
|
|
311
|
-
*
|
|
312
|
-
*
|
|
313
|
-
*
|
|
314
|
-
*
|
|
315
|
-
*
|
|
316
|
-
* const adminRouter = mainRouter.route("/admin");
|
|
317
|
-
*
|
|
318
|
-
* // Adiciona uma rota ao sub-roteador. O caminho final será "/admin/dashboard".
|
|
319
|
-
* adminRouter.get("/dashboard").handler((req, res) => {
|
|
320
|
-
* res.send("Bem-vindo ao painel de administração!");
|
|
195
|
+
* app.defineSwagger({
|
|
196
|
+
* openapi: '3.0.0',
|
|
197
|
+
* info: { title: 'Minha API', version: '1.0.0' },
|
|
198
|
+
* path: '/api-docs', // Caminho base para as UIs de documentação
|
|
199
|
+
* defaultResponses: {
|
|
200
|
+
* 500: { description: 'Erro Interno do Servidor' }
|
|
201
|
+
* }
|
|
321
202
|
* });
|
|
322
203
|
*
|
|
323
|
-
*
|
|
324
|
-
* app.use(mainRouter.router);
|
|
204
|
+
* @param {SwaggerOptions} options - As opções de configuração.
|
|
325
205
|
*/
|
|
326
|
-
|
|
206
|
+
defineSwagger(options: SwaggerOptions): void;
|
|
327
207
|
/**
|
|
328
|
-
*
|
|
329
|
-
*
|
|
330
|
-
* Este método permite compor a aplicação anexando um roteador pré-configurado
|
|
331
|
-
* (seja uma instância de `Router` ou `express.Router`) como um middleware.
|
|
332
|
-
* Todas as rotas definidas no roteador fornecido serão acessíveis a partir do
|
|
333
|
-
* ponto de montagem do roteador atual.
|
|
334
|
-
*
|
|
335
|
-
* @param {Router | ExpressRouter} router - A instância do roteador a ser montada.
|
|
336
|
-
* @returns {this} A instância atual do `Router`, permitindo encadeamento de métodos.
|
|
208
|
+
* Cria um sub-roteador aninhado sob um prefixo de caminho.
|
|
337
209
|
*
|
|
338
210
|
* @example
|
|
339
|
-
*
|
|
340
|
-
*
|
|
211
|
+
* const adminRouter = router.route('/admin');
|
|
212
|
+
* adminRouter.get('/dashboard', ...); // Rota final: /admin/dashboard
|
|
341
213
|
*
|
|
342
|
-
*
|
|
343
|
-
*
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
*
|
|
348
|
-
* // ---- app.ts ----
|
|
349
|
-
* import express from 'express';
|
|
350
|
-
* import { Router } from './router';
|
|
351
|
-
* import userRouter from './user.routes';
|
|
214
|
+
* @param {string} path - O prefixo do caminho para o sub-roteador.
|
|
215
|
+
* @returns {Router<Rq, Rs>} Uma nova instância de `Router` para o sub-roteador.
|
|
216
|
+
*/
|
|
217
|
+
route(path?: string): Router<Rq, Rs>;
|
|
218
|
+
/**
|
|
219
|
+
* Anexa um roteador existente (sub-roteador) a este roteador.
|
|
352
220
|
*
|
|
353
|
-
*
|
|
354
|
-
* const
|
|
221
|
+
* @example
|
|
222
|
+
* const usersRouter = route('/users');
|
|
223
|
+
* // ... define rotas em usersRouter ...
|
|
355
224
|
*
|
|
356
|
-
*
|
|
357
|
-
*
|
|
225
|
+
* const app = create();
|
|
226
|
+
* app.by(usersRouter); // Anexa o roteador de usuários ao principal
|
|
358
227
|
*
|
|
359
|
-
*
|
|
360
|
-
*
|
|
361
|
-
* app.use('/api', apiRouter.router);
|
|
362
|
-
*/
|
|
363
|
-
by(router: Router | ExpressRouter): this;
|
|
364
|
-
}
|
|
365
|
-
/**
|
|
366
|
-
* Representa as propriedades de uma rota finalizada, permitindo a adição de metadados, como a documentação Swagger.
|
|
367
|
-
* Esta classe é retornada pelo método `.handler()` e seu principal objetivo é fornecer o método `.doc()`
|
|
368
|
-
* para anexar a documentação OpenAPI a um endpoint.
|
|
369
|
-
*
|
|
370
|
-
* @example
|
|
371
|
-
* // ... continuação do exemplo do RouterContext
|
|
372
|
-
* router.get("/users/:id")
|
|
373
|
-
* .handler((req, res) => {
|
|
374
|
-
* res.json({ id: req.params.id, name: "Exemplo" });
|
|
375
|
-
* })
|
|
376
|
-
* // O método .doc() é chamado na instância de RouterProps retornada por .handler()
|
|
377
|
-
* .doc({
|
|
378
|
-
* summary: "Obtém um usuário pelo ID",
|
|
379
|
-
* description: "Retorna os detalhes de um usuário específico.",
|
|
380
|
-
* tags: ["Users"],
|
|
381
|
-
* parameters: [{
|
|
382
|
-
* name: "id",
|
|
383
|
-
* in: "path",
|
|
384
|
-
* required: true,
|
|
385
|
-
* schema: { type: "integer" }
|
|
386
|
-
* }],
|
|
387
|
-
* responses: {
|
|
388
|
-
* "200": {
|
|
389
|
-
* description: "Usuário encontrado."
|
|
390
|
-
* }
|
|
391
|
-
* }
|
|
392
|
-
* });
|
|
393
|
-
*/
|
|
394
|
-
export declare class RouterProps {
|
|
395
|
-
readonly type: RouterMethods;
|
|
396
|
-
readonly middlewares: MiddlewareFC<any, any>[];
|
|
397
|
-
readonly handler: Function;
|
|
398
|
-
readonly hierarchicalMiddleware: MiddlewareFC<any, any>[];
|
|
399
|
-
/**
|
|
400
|
-
* @param {RouterMethods} type O método HTTP da rota.
|
|
401
|
-
* @param {MiddlewareFC<any, any>[]} middlewares A lista de middlewares aplicados à rota.
|
|
402
|
-
* @param {Function} handler A função de handler final da rota.
|
|
228
|
+
* @param {Router} router - A instância do roteador a ser anexada.
|
|
229
|
+
* @returns {this} A instância atual do roteador para encadeamento.
|
|
403
230
|
*/
|
|
404
|
-
|
|
231
|
+
by(router: Router): this;
|
|
232
|
+
/** Delega para o método `app.engine()` do Express. */
|
|
233
|
+
engine(ext: string, fn: (path: string, options: object, callback: (e: any, rendered?: string) => void) => void): this;
|
|
234
|
+
enabled(setting: string): boolean;
|
|
235
|
+
/** Delega para o método `app.disabled()` do Express. */
|
|
236
|
+
disabled(setting: string): boolean;
|
|
237
|
+
/** Delega para o método `app.enable()` do Express. */
|
|
238
|
+
enable(setting: string): this;
|
|
239
|
+
/** Delega para o método `app.disable()` do Express. */
|
|
240
|
+
disable(setting: string): this;
|
|
405
241
|
/**
|
|
406
|
-
*
|
|
407
|
-
*
|
|
408
|
-
*
|
|
242
|
+
* Inicia o servidor HTTP.
|
|
243
|
+
* Este método deve ser chamado por último, após todas as rotas e middlewares terem sido definidos.
|
|
244
|
+
* Ele compila todas as camadas de rotas, configura os endpoints de documentação (se definidos)
|
|
245
|
+
* e inicia o servidor Express para ouvir as requisições.
|
|
246
|
+
*
|
|
247
|
+
* @example
|
|
248
|
+
* app.listen(3000, () => {
|
|
249
|
+
* console.log('Servidor rodando em http://localhost:3000');
|
|
250
|
+
* console.log('Documentação Swagger em http://localhost:3000/api-docs/swagger');
|
|
251
|
+
* console.log('Documentação ReDoc em http://localhost:3000/api-docs/redoc');
|
|
252
|
+
* });
|
|
409
253
|
*
|
|
410
|
-
* @param {
|
|
411
|
-
* @param {
|
|
412
|
-
* @
|
|
254
|
+
* @param {number} port - A porta em que o servidor irá ouvir.
|
|
255
|
+
* @param {string} [hostname] - O nome do host.
|
|
256
|
+
* @param {number} [backlog] - O número máximo de conexões pendentes.
|
|
257
|
+
* @param {Function} [callback] - Uma função a ser chamada quando o servidor estiver ouvindo.
|
|
258
|
+
* @returns {http.Server} A instância do servidor HTTP subjacente.
|
|
413
259
|
*/
|
|
414
|
-
|
|
260
|
+
listen(port: number, hostname: string, backlog: number, callback?: (error?: Error) => void): http.Server;
|
|
261
|
+
listen(port: number, hostname: string, callback?: (error?: Error) => void): http.Server;
|
|
262
|
+
listen(port: number, callback?: (error?: Error) => void): http.Server;
|
|
263
|
+
listen(callback?: (error?: Error) => void): http.Server;
|
|
264
|
+
listen(path: string, callback?: (error?: Error) => void): http.Server;
|
|
265
|
+
listen(handle: any, listeningListener?: (error?: Error) => void): http.Server;
|
|
415
266
|
}
|
|
416
267
|
//# sourceMappingURL=router.d.ts.map
|
package/dist/router.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,YAAY,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"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"}
|