@ismael1361/router 1.1.1 → 1.1.2
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/dist/HandleError.esm.js +126 -1
- package/dist/HandleError.esm.js.map +1 -1
- package/dist/HandleError.js +128 -1
- package/dist/HandleError.js.map +1 -1
- package/dist/Layer.esm.js +250 -1
- package/dist/Layer.esm.js.map +1 -1
- package/dist/Layer.js +252 -1
- package/dist/Layer.js.map +1 -1
- package/dist/Middlewares.esm.js +187 -1
- package/dist/Middlewares.esm.js.map +1 -1
- package/dist/Middlewares.js +194 -1
- package/dist/Middlewares.js.map +1 -1
- package/dist/handler.esm.js +170 -1
- package/dist/handler.esm.js.map +1 -1
- package/dist/handler.js +173 -1
- package/dist/handler.js.map +1 -1
- package/dist/index.esm.js +141 -1
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +152 -1
- package/dist/index.js.map +1 -1
- package/dist/middleware.esm.js +151 -1
- package/dist/middleware.esm.js.map +1 -1
- package/dist/middleware.js +154 -1
- package/dist/middleware.js.map +1 -1
- package/dist/node_modules/tslib/tslib.es6.esm.js +45 -1
- package/dist/node_modules/tslib/tslib.es6.esm.js.map +1 -1
- package/dist/node_modules/tslib/tslib.es6.js +48 -1
- package/dist/node_modules/tslib/tslib.es6.js.map +1 -1
- package/dist/redocUi/index.esm.js +74 -1
- package/dist/redocUi/index.esm.js.map +1 -1
- package/dist/redocUi/index.js +76 -1
- package/dist/redocUi/index.js.map +1 -1
- package/dist/router.esm.js +434 -1
- package/dist/router.esm.js.map +1 -1
- package/dist/router.js +436 -1
- package/dist/router.js.map +1 -1
- package/dist/swagger-markdown/index.esm.js +128 -1
- package/dist/swagger-markdown/index.esm.js.map +1 -1
- package/dist/swagger-markdown/index.js +134 -1
- package/dist/swagger-markdown/index.js.map +1 -1
- package/dist/swagger-markdown/lib/anchor.esm.js +6 -1
- package/dist/swagger-markdown/lib/anchor.esm.js.map +1 -1
- package/dist/swagger-markdown/lib/anchor.js +8 -1
- package/dist/swagger-markdown/lib/anchor.js.map +1 -1
- package/dist/swagger-markdown/lib/inArray.esm.js +20 -1
- package/dist/swagger-markdown/lib/inArray.esm.js.map +1 -1
- package/dist/swagger-markdown/lib/inArray.js +22 -1
- package/dist/swagger-markdown/lib/inArray.js.map +1 -1
- package/dist/swagger-markdown/models/schema.esm.js +64 -1
- package/dist/swagger-markdown/models/schema.esm.js.map +1 -1
- package/dist/swagger-markdown/models/schema.js +66 -1
- package/dist/swagger-markdown/models/schema.js.map +1 -1
- package/dist/swagger-markdown/transformers/contact.esm.js +23 -1
- package/dist/swagger-markdown/transformers/contact.esm.js.map +1 -1
- package/dist/swagger-markdown/transformers/contact.js +25 -1
- package/dist/swagger-markdown/transformers/contact.js.map +1 -1
- package/dist/swagger-markdown/transformers/dataTypes.esm.js +59 -1
- package/dist/swagger-markdown/transformers/dataTypes.esm.js.map +1 -1
- package/dist/swagger-markdown/transformers/dataTypes.js +61 -1
- package/dist/swagger-markdown/transformers/dataTypes.js.map +1 -1
- package/dist/swagger-markdown/transformers/definitions.esm.js +75 -1
- package/dist/swagger-markdown/transformers/definitions.esm.js.map +1 -1
- package/dist/swagger-markdown/transformers/definitions.js +80 -1
- package/dist/swagger-markdown/transformers/definitions.js.map +1 -1
- package/dist/swagger-markdown/transformers/externalDocs.esm.js +13 -1
- package/dist/swagger-markdown/transformers/externalDocs.esm.js.map +1 -1
- package/dist/swagger-markdown/transformers/externalDocs.js +15 -1
- package/dist/swagger-markdown/transformers/externalDocs.js.map +1 -1
- package/dist/swagger-markdown/transformers/info.esm.js +36 -1
- package/dist/swagger-markdown/transformers/info.esm.js.map +1 -1
- package/dist/swagger-markdown/transformers/info.js +38 -1
- package/dist/swagger-markdown/transformers/info.js.map +1 -1
- package/dist/swagger-markdown/transformers/license.esm.js +20 -1
- package/dist/swagger-markdown/transformers/license.esm.js.map +1 -1
- package/dist/swagger-markdown/transformers/license.js +22 -1
- package/dist/swagger-markdown/transformers/license.js.map +1 -1
- package/dist/swagger-markdown/transformers/path.esm.js +71 -1
- package/dist/swagger-markdown/transformers/path.esm.js.map +1 -1
- package/dist/swagger-markdown/transformers/path.js +76 -1
- package/dist/swagger-markdown/transformers/path.js.map +1 -1
- package/dist/swagger-markdown/transformers/pathParameters.esm.js +62 -1
- package/dist/swagger-markdown/transformers/pathParameters.esm.js.map +1 -1
- package/dist/swagger-markdown/transformers/pathParameters.js +64 -1
- package/dist/swagger-markdown/transformers/pathParameters.js.map +1 -1
- package/dist/swagger-markdown/transformers/pathResponses.esm.js +45 -1
- package/dist/swagger-markdown/transformers/pathResponses.esm.js.map +1 -1
- package/dist/swagger-markdown/transformers/pathResponses.js +47 -1
- package/dist/swagger-markdown/transformers/pathResponses.js.map +1 -1
- package/dist/swagger-markdown/transformers/security.esm.js +41 -1
- package/dist/swagger-markdown/transformers/security.esm.js.map +1 -1
- package/dist/swagger-markdown/transformers/security.js +43 -1
- package/dist/swagger-markdown/transformers/security.js.map +1 -1
- package/dist/swagger-markdown/transformers/securityDefinitions.esm.js +51 -1
- package/dist/swagger-markdown/transformers/securityDefinitions.esm.js.map +1 -1
- package/dist/swagger-markdown/transformers/securityDefinitions.js +57 -1
- package/dist/swagger-markdown/transformers/securityDefinitions.js.map +1 -1
- package/dist/utils.esm.js +244 -1
- package/dist/utils.esm.js.map +1 -1
- package/dist/utils.js +256 -1
- package/dist/utils.js.map +1 -1
- package/package.json +2 -2
package/dist/index.esm.js
CHANGED
|
@@ -1,2 +1,142 @@
|
|
|
1
|
-
import{__rest
|
|
1
|
+
import { __rest } from './node_modules/tslib/tslib.es6.esm.js';
|
|
2
|
+
import { Router } from './router.esm.js';
|
|
3
|
+
import { Middleware } from './middleware.esm.js';
|
|
4
|
+
import { Handler } from './handler.esm.js';
|
|
5
|
+
import { joinObject } from './utils.esm.js';
|
|
6
|
+
export { getCorsHeaders, getCorsOptions } from './utils.esm.js';
|
|
7
|
+
export { HandleError } from './HandleError.esm.js';
|
|
8
|
+
import * as Middlewares from './Middlewares.esm.js';
|
|
9
|
+
export { Middlewares };
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Inicializa uma nova instância do Router. Este é o ponto de partida para construir sua aplicação.
|
|
13
|
+
*
|
|
14
|
+
* @template Req - Tipo de Request base para o roteador.
|
|
15
|
+
* @template Res - Tipo de Response base para o roteador.
|
|
16
|
+
* @returns {Router<Req, Res>} Uma nova instância do Router.
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* import { create } from '@ismael1361/router';
|
|
20
|
+
*
|
|
21
|
+
* const router = create();
|
|
22
|
+
*
|
|
23
|
+
* router.get('/ping', { summary: 'Verifica a saúde da API' })
|
|
24
|
+
* .handler((req, res) => {
|
|
25
|
+
* res.send('pong');
|
|
26
|
+
* });
|
|
27
|
+
*
|
|
28
|
+
* router.listen(3000, () => {
|
|
29
|
+
* console.log('Servidor rodando na porta 3000');
|
|
30
|
+
* });
|
|
31
|
+
*/
|
|
32
|
+
function create() {
|
|
33
|
+
return new Router();
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Cria um componente de middleware reutilizável e encadeável.
|
|
37
|
+
* Permite encapsular lógicas (como autenticação, logging) e sua documentação OpenAPI associada.
|
|
38
|
+
*
|
|
39
|
+
* @template Req - Tipo de Request que o middleware espera ou adiciona.
|
|
40
|
+
* @template Res - Tipo de Response que o middleware pode modificar.
|
|
41
|
+
* @param {MiddlewareCallback<Req, Res>} callback - A função de middleware.
|
|
42
|
+
* @param {MiddlewareFCDoc} [doc] - A documentação OpenAPI para este middleware.
|
|
43
|
+
* @returns {Middleware<Req, Res>} Uma instância de Middleware que pode ser usada em rotas.
|
|
44
|
+
*
|
|
45
|
+
* @example
|
|
46
|
+
* import { middleware } from '@ismael1361/router';
|
|
47
|
+
*
|
|
48
|
+
* // Middleware que adiciona um usuário à requisição
|
|
49
|
+
* const authMiddleware = middleware<{ user: { id: string } }>((req, res, next) => {
|
|
50
|
+
* req.user = { id: 'user-123' };
|
|
51
|
+
* next();
|
|
52
|
+
* }, {
|
|
53
|
+
* security: [{ bearerAuth: [] }], // Documenta o requisito de segurança
|
|
54
|
+
* responses: { '401': { description: 'Não autorizado' } }
|
|
55
|
+
* });
|
|
56
|
+
*
|
|
57
|
+
* // Em uma rota:
|
|
58
|
+
* // router.get('/profile').middleware(authMiddleware).handler(...)
|
|
59
|
+
*/
|
|
60
|
+
function middleware(callback, doc) {
|
|
61
|
+
return new Middleware(callback, undefined, doc);
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Cria um componente de manipulador (handler/controller) reutilizável.
|
|
65
|
+
* Útil para definir a lógica final de uma rota em um local separado e importá-la onde for necessário.
|
|
66
|
+
*
|
|
67
|
+
* @template Req - Tipo de Request que o handler espera.
|
|
68
|
+
* @template Res - Tipo de Response que o handler pode modificar.
|
|
69
|
+
* @param {HandlerCallback<Req, Res>} callback - A função do manipulador.
|
|
70
|
+
* @param {MiddlewareFCDoc} [doc] - Documentação OpenAPI para este handler.
|
|
71
|
+
* @returns {Handler<Req, Res>} Uma instância de Handler.
|
|
72
|
+
*
|
|
73
|
+
* @example
|
|
74
|
+
* import { handler } from '@ismael1361/router';
|
|
75
|
+
*
|
|
76
|
+
* const getUserProfile = handler<{ user: { id: string } }>((req, res) => {
|
|
77
|
+
* res.json({ profile: req.user });
|
|
78
|
+
* });
|
|
79
|
+
*
|
|
80
|
+
* // Em uma rota:
|
|
81
|
+
* // router.get('/profile').middleware(authMiddleware).handler(getUserProfile);
|
|
82
|
+
*/
|
|
83
|
+
function handler(callback, doc) {
|
|
84
|
+
return new Handler(callback, undefined, doc);
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Cria uma nova instância do Router com um caminho de prefixo.
|
|
88
|
+
* Ideal para agrupar rotas relacionadas sob um namespace comum (ex: '/api/v1').
|
|
89
|
+
*
|
|
90
|
+
* @template Req - Tipo de Request base para o roteador.
|
|
91
|
+
* @template Res - Tipo de Response base para o roteador.
|
|
92
|
+
* @param {string} path - O caminho do prefixo para todas as rotas definidas neste roteador.
|
|
93
|
+
* @returns {Router<Req, Res>} Uma nova instância do Router com o prefixo definido.
|
|
94
|
+
*
|
|
95
|
+
* @example
|
|
96
|
+
* import { route, create } from '@ismael1361/router';
|
|
97
|
+
*
|
|
98
|
+
* const mainRouter = create();
|
|
99
|
+
* const usersRouter = route('/users'); // Todas as rotas aqui começarão com /users
|
|
100
|
+
*
|
|
101
|
+
* usersRouter.get('/:id').handler((req, res) => { ... }); // Acessível em GET /users/:id
|
|
102
|
+
*
|
|
103
|
+
* mainRouter.by(usersRouter); // Anexa o grupo de rotas ao roteador principal
|
|
104
|
+
*/
|
|
105
|
+
function route(path) {
|
|
106
|
+
return new Router(path);
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Um helper para criar um objeto de documentação OpenAPI de forma limpa.
|
|
110
|
+
* Ele separa a operação principal dos componentes e os mescla em um único objeto.
|
|
111
|
+
*
|
|
112
|
+
* @param {MiddlewareFCDoc | swaggerJSDoc.Operation} operation - O objeto de operação OpenAPI (summary, tags, responses, etc.).
|
|
113
|
+
* @param {swaggerJSDoc.Components} [components={}] - Componentes OpenAPI (schemas, securitySchemes, etc.).
|
|
114
|
+
* @returns {MiddlewareFCDoc} Um objeto de documentação formatado.
|
|
115
|
+
*
|
|
116
|
+
* @example
|
|
117
|
+
* import { doc } from '@ismael1361/router';
|
|
118
|
+
*
|
|
119
|
+
* const userDoc = doc({
|
|
120
|
+
* summary: 'Cria um usuário',
|
|
121
|
+
* tags: ['Users'],
|
|
122
|
+
* requestBody: { $ref: '#/components/requestBodies/UserBody' }
|
|
123
|
+
* }, {
|
|
124
|
+
* requestBodies: { UserBody: { content: { 'application/json': { schema: { type: 'object' } } } } }
|
|
125
|
+
* });
|
|
126
|
+
*
|
|
127
|
+
* // router.post('/users', userDoc).handler(...)
|
|
128
|
+
*/
|
|
129
|
+
function doc(operation, components = {}) {
|
|
130
|
+
const { components: comp = {} } = operation, op = __rest(operation, ["components"]);
|
|
131
|
+
return Object.assign(Object.assign({}, op), { components: joinObject(comp, components) });
|
|
132
|
+
}
|
|
133
|
+
var index = {
|
|
134
|
+
create,
|
|
135
|
+
route,
|
|
136
|
+
middleware,
|
|
137
|
+
handler,
|
|
138
|
+
doc,
|
|
139
|
+
};
|
|
140
|
+
|
|
141
|
+
export { create, index as default, doc, handler, middleware, route };
|
|
2
142
|
//# sourceMappingURL=index.esm.js.map
|
package/dist/index.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.js","sources":["../src/index.ts"],"sourcesContent":[null],"names":[
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../src/index.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;;;;AAgBA;;;;;;;;;;;;;;;;;;;;AAoBG;SACa,MAAM,GAAA;IACrB,OAAO,IAAI,MAAM,EAAY,CAAC;AAC/B,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;AAwBG;AACa,SAAA,UAAU,CAAiE,QAAsC,EAAE,GAAqB,EAAA;IACvJ,OAAO,IAAI,UAAU,CAAC,QAAQ,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;AACjD,CAAC;AAED;;;;;;;;;;;;;;;;;;;AAmBG;AACa,SAAA,OAAO,CAAiE,QAAmC,EAAE,GAAqB,EAAA;IACjJ,OAAO,IAAI,OAAO,CAAC,QAAQ,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;AAC9C,CAAC;AAED;;;;;;;;;;;;;;;;;;AAkBG;AACG,SAAU,KAAK,CAAiE,IAAa,EAAA;AAClG,IAAA,OAAO,IAAI,MAAM,CAAW,IAAI,CAAC,CAAC;AACnC,CAAC;AAED;;;;;;;;;;;;;;;;;;;;AAoBG;SACa,GAAG,CAAC,SAAmD,EAAE,aAAsC,EAAE,EAAA;AAChH,IAAA,MAAM,EAAE,UAAU,EAAE,IAAI,GAAG,EAAE,EAAA,GAAY,SAAS,EAAhB,EAAE,GAAK,MAAA,CAAA,SAAS,EAA5C,CAAA,YAAA,CAAgC,CAAY,CAAC;IACnD,OAAY,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAE,CAAE,EAAA,EAAA,UAAU,EAAE,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,EAAG,CAAA,CAAA;AAC5D,CAAC;AAED,YAAe;IACd,MAAM;IACN,KAAK;IACL,UAAU;IACV,OAAO;IACP,GAAG;CACH;;;;"}
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,153 @@
|
|
|
1
|
-
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var tslib_es6 = require('./node_modules/tslib/tslib.es6.js');
|
|
6
|
+
var router = require('./router.js');
|
|
7
|
+
var middleware$1 = require('./middleware.js');
|
|
8
|
+
var handler$1 = require('./handler.js');
|
|
9
|
+
var utils = require('./utils.js');
|
|
10
|
+
var HandleError = require('./HandleError.js');
|
|
11
|
+
var Middlewares = require('./Middlewares.js');
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Inicializa uma nova instância do Router. Este é o ponto de partida para construir sua aplicação.
|
|
15
|
+
*
|
|
16
|
+
* @template Req - Tipo de Request base para o roteador.
|
|
17
|
+
* @template Res - Tipo de Response base para o roteador.
|
|
18
|
+
* @returns {Router<Req, Res>} Uma nova instância do Router.
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* import { create } from '@ismael1361/router';
|
|
22
|
+
*
|
|
23
|
+
* const router = create();
|
|
24
|
+
*
|
|
25
|
+
* router.get('/ping', { summary: 'Verifica a saúde da API' })
|
|
26
|
+
* .handler((req, res) => {
|
|
27
|
+
* res.send('pong');
|
|
28
|
+
* });
|
|
29
|
+
*
|
|
30
|
+
* router.listen(3000, () => {
|
|
31
|
+
* console.log('Servidor rodando na porta 3000');
|
|
32
|
+
* });
|
|
33
|
+
*/
|
|
34
|
+
function create() {
|
|
35
|
+
return new router.Router();
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Cria um componente de middleware reutilizável e encadeável.
|
|
39
|
+
* Permite encapsular lógicas (como autenticação, logging) e sua documentação OpenAPI associada.
|
|
40
|
+
*
|
|
41
|
+
* @template Req - Tipo de Request que o middleware espera ou adiciona.
|
|
42
|
+
* @template Res - Tipo de Response que o middleware pode modificar.
|
|
43
|
+
* @param {MiddlewareCallback<Req, Res>} callback - A função de middleware.
|
|
44
|
+
* @param {MiddlewareFCDoc} [doc] - A documentação OpenAPI para este middleware.
|
|
45
|
+
* @returns {Middleware<Req, Res>} Uma instância de Middleware que pode ser usada em rotas.
|
|
46
|
+
*
|
|
47
|
+
* @example
|
|
48
|
+
* import { middleware } from '@ismael1361/router';
|
|
49
|
+
*
|
|
50
|
+
* // Middleware que adiciona um usuário à requisição
|
|
51
|
+
* const authMiddleware = middleware<{ user: { id: string } }>((req, res, next) => {
|
|
52
|
+
* req.user = { id: 'user-123' };
|
|
53
|
+
* next();
|
|
54
|
+
* }, {
|
|
55
|
+
* security: [{ bearerAuth: [] }], // Documenta o requisito de segurança
|
|
56
|
+
* responses: { '401': { description: 'Não autorizado' } }
|
|
57
|
+
* });
|
|
58
|
+
*
|
|
59
|
+
* // Em uma rota:
|
|
60
|
+
* // router.get('/profile').middleware(authMiddleware).handler(...)
|
|
61
|
+
*/
|
|
62
|
+
function middleware(callback, doc) {
|
|
63
|
+
return new middleware$1.Middleware(callback, undefined, doc);
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Cria um componente de manipulador (handler/controller) reutilizável.
|
|
67
|
+
* Útil para definir a lógica final de uma rota em um local separado e importá-la onde for necessário.
|
|
68
|
+
*
|
|
69
|
+
* @template Req - Tipo de Request que o handler espera.
|
|
70
|
+
* @template Res - Tipo de Response que o handler pode modificar.
|
|
71
|
+
* @param {HandlerCallback<Req, Res>} callback - A função do manipulador.
|
|
72
|
+
* @param {MiddlewareFCDoc} [doc] - Documentação OpenAPI para este handler.
|
|
73
|
+
* @returns {Handler<Req, Res>} Uma instância de Handler.
|
|
74
|
+
*
|
|
75
|
+
* @example
|
|
76
|
+
* import { handler } from '@ismael1361/router';
|
|
77
|
+
*
|
|
78
|
+
* const getUserProfile = handler<{ user: { id: string } }>((req, res) => {
|
|
79
|
+
* res.json({ profile: req.user });
|
|
80
|
+
* });
|
|
81
|
+
*
|
|
82
|
+
* // Em uma rota:
|
|
83
|
+
* // router.get('/profile').middleware(authMiddleware).handler(getUserProfile);
|
|
84
|
+
*/
|
|
85
|
+
function handler(callback, doc) {
|
|
86
|
+
return new handler$1.Handler(callback, undefined, doc);
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Cria uma nova instância do Router com um caminho de prefixo.
|
|
90
|
+
* Ideal para agrupar rotas relacionadas sob um namespace comum (ex: '/api/v1').
|
|
91
|
+
*
|
|
92
|
+
* @template Req - Tipo de Request base para o roteador.
|
|
93
|
+
* @template Res - Tipo de Response base para o roteador.
|
|
94
|
+
* @param {string} path - O caminho do prefixo para todas as rotas definidas neste roteador.
|
|
95
|
+
* @returns {Router<Req, Res>} Uma nova instância do Router com o prefixo definido.
|
|
96
|
+
*
|
|
97
|
+
* @example
|
|
98
|
+
* import { route, create } from '@ismael1361/router';
|
|
99
|
+
*
|
|
100
|
+
* const mainRouter = create();
|
|
101
|
+
* const usersRouter = route('/users'); // Todas as rotas aqui começarão com /users
|
|
102
|
+
*
|
|
103
|
+
* usersRouter.get('/:id').handler((req, res) => { ... }); // Acessível em GET /users/:id
|
|
104
|
+
*
|
|
105
|
+
* mainRouter.by(usersRouter); // Anexa o grupo de rotas ao roteador principal
|
|
106
|
+
*/
|
|
107
|
+
function route(path) {
|
|
108
|
+
return new router.Router(path);
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Um helper para criar um objeto de documentação OpenAPI de forma limpa.
|
|
112
|
+
* Ele separa a operação principal dos componentes e os mescla em um único objeto.
|
|
113
|
+
*
|
|
114
|
+
* @param {MiddlewareFCDoc | swaggerJSDoc.Operation} operation - O objeto de operação OpenAPI (summary, tags, responses, etc.).
|
|
115
|
+
* @param {swaggerJSDoc.Components} [components={}] - Componentes OpenAPI (schemas, securitySchemes, etc.).
|
|
116
|
+
* @returns {MiddlewareFCDoc} Um objeto de documentação formatado.
|
|
117
|
+
*
|
|
118
|
+
* @example
|
|
119
|
+
* import { doc } from '@ismael1361/router';
|
|
120
|
+
*
|
|
121
|
+
* const userDoc = doc({
|
|
122
|
+
* summary: 'Cria um usuário',
|
|
123
|
+
* tags: ['Users'],
|
|
124
|
+
* requestBody: { $ref: '#/components/requestBodies/UserBody' }
|
|
125
|
+
* }, {
|
|
126
|
+
* requestBodies: { UserBody: { content: { 'application/json': { schema: { type: 'object' } } } } }
|
|
127
|
+
* });
|
|
128
|
+
*
|
|
129
|
+
* // router.post('/users', userDoc).handler(...)
|
|
130
|
+
*/
|
|
131
|
+
function doc(operation, components = {}) {
|
|
132
|
+
const { components: comp = {} } = operation, op = tslib_es6.__rest(operation, ["components"]);
|
|
133
|
+
return Object.assign(Object.assign({}, op), { components: utils.joinObject(comp, components) });
|
|
134
|
+
}
|
|
135
|
+
var index = {
|
|
136
|
+
create,
|
|
137
|
+
route,
|
|
138
|
+
middleware,
|
|
139
|
+
handler,
|
|
140
|
+
doc,
|
|
141
|
+
};
|
|
142
|
+
|
|
143
|
+
exports.getCorsHeaders = utils.getCorsHeaders;
|
|
144
|
+
exports.getCorsOptions = utils.getCorsOptions;
|
|
145
|
+
exports.HandleError = HandleError.HandleError;
|
|
146
|
+
exports.Middlewares = Middlewares;
|
|
147
|
+
exports.create = create;
|
|
148
|
+
exports.default = index;
|
|
149
|
+
exports.doc = doc;
|
|
150
|
+
exports.handler = handler;
|
|
151
|
+
exports.middleware = middleware;
|
|
152
|
+
exports.route = route;
|
|
2
153
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":[null],"names":["
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":[null],"names":["Router","Middleware","Handler","__rest","joinObject"],"mappings":";;;;;;;;;;;;AAgBA;;;;;;;;;;;;;;;;;;;;AAoBG;SACa,MAAM,GAAA;IACrB,OAAO,IAAIA,aAAM,EAAY,CAAC;AAC/B,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;AAwBG;AACa,SAAA,UAAU,CAAiE,QAAsC,EAAE,GAAqB,EAAA;IACvJ,OAAO,IAAIC,uBAAU,CAAC,QAAQ,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;AACjD,CAAC;AAED;;;;;;;;;;;;;;;;;;;AAmBG;AACa,SAAA,OAAO,CAAiE,QAAmC,EAAE,GAAqB,EAAA;IACjJ,OAAO,IAAIC,iBAAO,CAAC,QAAQ,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;AAC9C,CAAC;AAED;;;;;;;;;;;;;;;;;;AAkBG;AACG,SAAU,KAAK,CAAiE,IAAa,EAAA;AAClG,IAAA,OAAO,IAAIF,aAAM,CAAW,IAAI,CAAC,CAAC;AACnC,CAAC;AAED;;;;;;;;;;;;;;;;;;;;AAoBG;SACa,GAAG,CAAC,SAAmD,EAAE,aAAsC,EAAE,EAAA;AAChH,IAAA,MAAM,EAAE,UAAU,EAAE,IAAI,GAAG,EAAE,EAAA,GAAY,SAAS,EAAhB,EAAE,GAAKG,gBAAA,CAAA,SAAS,EAA5C,CAAA,YAAA,CAAgC,CAAY,CAAC;IACnD,OAAY,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAE,CAAE,EAAA,EAAA,UAAU,EAAEC,gBAAU,CAAC,IAAI,EAAE,UAAU,CAAC,EAAG,CAAA,CAAA;AAC5D,CAAC;AAED,YAAe;IACd,MAAM;IACN,KAAK;IACL,UAAU;IACV,OAAO;IACP,GAAG;CACH;;;;;;;;;;;;;"}
|
package/dist/middleware.esm.js
CHANGED
|
@@ -1,2 +1,152 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { Router } from './router.esm.js';
|
|
2
|
+
import { joinDocs, createDynamicMiddleware } from './utils.esm.js';
|
|
3
|
+
import { uuidv4 } from '@ismael1361/utils';
|
|
4
|
+
import { Handler } from './handler.esm.js';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* @internal
|
|
8
|
+
* Uma classe base para a construção de componentes de middleware encadeáveis.
|
|
9
|
+
* Esta classe não deve ser instanciada diretamente pelo usuário final.
|
|
10
|
+
*/
|
|
11
|
+
class RequestMiddleware {
|
|
12
|
+
/** @internal */
|
|
13
|
+
constructor(callback, router = new Router(), doc) {
|
|
14
|
+
this.router = router;
|
|
15
|
+
this.doc = doc;
|
|
16
|
+
if (callback) {
|
|
17
|
+
if (callback instanceof RequestMiddleware) {
|
|
18
|
+
callback.router.layers.forEach((l) => {
|
|
19
|
+
this.router.layers.push(l);
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
callback.id = callback.id || uuidv4("-");
|
|
24
|
+
this.doc = callback.doc = joinDocs((callback === null || callback === void 0 ? void 0 : callback.doc) || {}, doc || {});
|
|
25
|
+
this.router.middleware(createDynamicMiddleware(callback));
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Anexa um middleware adicional à cadeia.
|
|
31
|
+
*
|
|
32
|
+
* @template Req - Tipo de Request estendido pelo novo middleware.
|
|
33
|
+
* @template Res - Tipo de Response estendido pelo novo middleware.
|
|
34
|
+
* @param {MiddlewareCallback<Rq & Req, Rs & Res>} callback - A função de middleware a ser adicionada.
|
|
35
|
+
* @param {MiddlewareFCDoc} [doc] - Documentação OpenAPI opcional para o middleware.
|
|
36
|
+
* @returns {RequestMiddleware<Rq & Req, Rs & Res>} Uma nova instância de `RequestMiddleware` com o middleware adicionado.
|
|
37
|
+
*/
|
|
38
|
+
middleware(callback, doc) {
|
|
39
|
+
return new RequestMiddleware(callback, this.router, doc);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Executa a cadeia de middlewares encapsulados por esta instância.
|
|
43
|
+
* Este método é projetado principalmente para testes, permitindo que você execute a lógica do middleware
|
|
44
|
+
* de forma isolada, sem a necessidade de um servidor HTTP real.
|
|
45
|
+
*
|
|
46
|
+
* @param {Rq} request - O objeto de requisição (ou um mock para testes).
|
|
47
|
+
* @param {Rs} response - O objeto de resposta (ou um mock para testes).
|
|
48
|
+
* @param {NextFunction} next - A função `next` a ser chamada ao final da cadeia de middlewares.
|
|
49
|
+
* @returns {Promise<void>} Uma promessa que resolve quando a execução da cadeia é concluída.
|
|
50
|
+
*
|
|
51
|
+
* @example
|
|
52
|
+
* import { middleware, Request, Response, NextFunction } from '@ismael1361/router';
|
|
53
|
+
*
|
|
54
|
+
* // 1. Crie um componente de middleware reutilizável
|
|
55
|
+
* const myMiddleware = middleware<{ user: { id: string } }>((req, res, next) => {
|
|
56
|
+
* req.user = { id: 'test-user' };
|
|
57
|
+
* next();
|
|
58
|
+
* });
|
|
59
|
+
*
|
|
60
|
+
* // 2. Crie mocks para os objetos de requisição, resposta e next (ex: com Jest)
|
|
61
|
+
* const mockRequest = {} as Request & { user: { id: string } };
|
|
62
|
+
* const mockResponse = {} as Response;
|
|
63
|
+
* const mockNext = () => {}; // ou jest.fn()
|
|
64
|
+
*
|
|
65
|
+
* // 3. Execute o middleware programaticamente e verifique o resultado
|
|
66
|
+
* await myMiddleware.execute(mockRequest, mockResponse, mockNext);
|
|
67
|
+
* console.log(mockRequest.user); // Output: { id: 'test-user' }
|
|
68
|
+
*/
|
|
69
|
+
execute(request, response, next) {
|
|
70
|
+
return this.router.executeMiddlewares(request, response, next);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Representa um componente de middleware encadeável que pode ser finalizado com um manipulador (handler).
|
|
75
|
+
* Uma instância desta classe é retornada pela função `middleware()`. Permite criar componentes
|
|
76
|
+
* de lógica reutilizáveis que podem ser aplicados a múltiplas rotas.
|
|
77
|
+
*
|
|
78
|
+
* @example
|
|
79
|
+
* // middlewares/auth.ts
|
|
80
|
+
* import { middleware, Request } from '@ismael1361/router';
|
|
81
|
+
*
|
|
82
|
+
* // Define um tipo para a requisição após a autenticação
|
|
83
|
+
* interface AuthRequest extends Request {
|
|
84
|
+
* user: { id: string; roles: string[] };
|
|
85
|
+
* }
|
|
86
|
+
*
|
|
87
|
+
* // Cria um componente de middleware reutilizável
|
|
88
|
+
* export const authMiddleware = middleware<AuthRequest>((req, res, next) => {
|
|
89
|
+
* // Lógica de autenticação...
|
|
90
|
+
* req.user = { id: 'user-123', roles: ['admin'] };
|
|
91
|
+
* next();
|
|
92
|
+
* }, {
|
|
93
|
+
* security: [{ bearerAuth: [] }], // Documentação OpenAPI
|
|
94
|
+
* responses: { '401': { description: 'Não autorizado' } }
|
|
95
|
+
* });
|
|
96
|
+
*
|
|
97
|
+
* // routes/users.ts
|
|
98
|
+
* // router.get('/profile')
|
|
99
|
+
* // .middleware(authMiddleware) // Aplica o middleware
|
|
100
|
+
* // .handler((req, res) => {
|
|
101
|
+
* // // req.user está disponível e tipado aqui
|
|
102
|
+
* // res.json(req.user);
|
|
103
|
+
* // });
|
|
104
|
+
*/
|
|
105
|
+
class Middleware extends RequestMiddleware {
|
|
106
|
+
/**
|
|
107
|
+
* Anexa um middleware adicional à cadeia.
|
|
108
|
+
*
|
|
109
|
+
* @returns {Middleware<Rq & Req, Rs & Res>} Uma nova instância de `Middleware` para continuar o encadeamento.
|
|
110
|
+
*/
|
|
111
|
+
middleware(callback, doc) {
|
|
112
|
+
return new Middleware(callback, this.router, doc);
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Finaliza a cadeia de middlewares e define um manipulador (handler) final.
|
|
116
|
+
* Isso transforma o componente de middleware em um componente de manipulador completo e reutilizável.
|
|
117
|
+
*
|
|
118
|
+
* @returns {Handler<Rq & Req, Rs & Res>} Uma instância de `Handler` que encapsula toda a cadeia.
|
|
119
|
+
*/
|
|
120
|
+
handler(callback, doc) {
|
|
121
|
+
return new Handler(callback, this.router, doc);
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Executa a cadeia de middlewares encapsulados por esta instância de `Middleware`.
|
|
125
|
+
* Este método é herdado e serve principalmente para fins de teste, permitindo invocar
|
|
126
|
+
* a lógica do middleware de forma isolada.
|
|
127
|
+
*
|
|
128
|
+
* @param {Rq} request - O objeto de requisição (ou um mock para testes).
|
|
129
|
+
* @param {Rs} response - O objeto de resposta (ou um mock para testes).
|
|
130
|
+
* @param {NextFunction} next - A função `next` a ser chamada ao final da cadeia.
|
|
131
|
+
* @returns {Promise<void>} Uma promessa que resolve quando a execução é concluída.
|
|
132
|
+
*
|
|
133
|
+
* @example
|
|
134
|
+
* import { middleware, Request, Response, NextFunction } from '@ismael1361/router';
|
|
135
|
+
*
|
|
136
|
+
* const addDataMiddleware = middleware<{ customData: string }>((req, res, next) => {
|
|
137
|
+
* req.customData = 'Hello from middleware!';
|
|
138
|
+
* next();
|
|
139
|
+
* });
|
|
140
|
+
*
|
|
141
|
+
* const mockRequest = {} as Request & { customData: string };
|
|
142
|
+
*
|
|
143
|
+
* await addDataMiddleware.execute(mockRequest, {} as Response, () => {});
|
|
144
|
+
* console.log(mockRequest.customData); // Output: 'Hello from middleware!'
|
|
145
|
+
*/
|
|
146
|
+
execute(request, response, next) {
|
|
147
|
+
return super.execute(request, response, next);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
export { Middleware, RequestMiddleware };
|
|
2
152
|
//# sourceMappingURL=middleware.esm.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"middleware.esm.js","sources":["../src/middleware.ts"],"sourcesContent":[null],"names":[
|
|
1
|
+
{"version":3,"file":"middleware.esm.js","sources":["../src/middleware.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;AAMA;;;;AAIG;MACU,iBAAiB,CAAA;;AAE7B,IAAA,WAAA,CAAY,QAAgD,EAAW,MAAA,GAAiB,IAAI,MAAM,EAAE,EAAS,GAAqB,EAAA;QAA3D,IAAM,CAAA,MAAA,GAAN,MAAM,CAAuB;QAAS,IAAG,CAAA,GAAA,GAAH,GAAG,CAAkB;QACjI,IAAI,QAAQ,EAAE;AACb,YAAA,IAAI,QAAQ,YAAY,iBAAiB,EAAE;gBAC1C,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;oBACpC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC5B,iBAAC,CAAC,CAAC;aACH;iBAAM;gBACN,QAAQ,CAAC,EAAE,GAAG,QAAQ,CAAC,EAAE,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC;gBACzC,IAAI,CAAC,GAAG,GAAG,QAAQ,CAAC,GAAG,GAAG,QAAQ,CAAC,CAAA,QAAQ,KAAA,IAAA,IAAR,QAAQ,KAAR,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,QAAQ,CAAE,GAAG,KAAI,EAAE,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;gBACnE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC,CAAC;aAC1D;SACD;KACD;AAED;;;;;;;;AAQG;IACH,UAAU,CAAiE,QAAgD,EAAE,GAAqB,EAAA;QACjJ,OAAO,IAAI,iBAAiB,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;KACzD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2BG;AACH,IAAA,OAAO,CAAC,OAAW,EAAE,QAAY,EAAE,IAAkB,EAAA;AACpD,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;KAC/D;AACD,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BG;AACG,MAAO,UAAyE,SAAQ,iBAAyB,CAAA;AACtH;;;;AAIG;IACH,UAAU,CAAiE,QAAgD,EAAE,GAAqB,EAAA;QACjJ,OAAO,IAAI,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;KAClD;AAED;;;;;AAKG;IACH,OAAO,CAAiE,QAA6C,EAAE,GAAqB,EAAA;QAC3I,OAAO,IAAI,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;KAC/C;AAED;;;;;;;;;;;;;;;;;;;;;;AAsBG;AACH,IAAA,OAAO,CAAC,OAAW,EAAE,QAAY,EAAE,IAAkB,EAAA;QACpD,OAAO,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;KAC9C;AACD;;;;"}
|
package/dist/middleware.js
CHANGED
|
@@ -1,2 +1,155 @@
|
|
|
1
|
-
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var router = require('./router.js');
|
|
4
|
+
var utils$1 = require('./utils.js');
|
|
5
|
+
var utils = require('@ismael1361/utils');
|
|
6
|
+
var handler = require('./handler.js');
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* @internal
|
|
10
|
+
* Uma classe base para a construção de componentes de middleware encadeáveis.
|
|
11
|
+
* Esta classe não deve ser instanciada diretamente pelo usuário final.
|
|
12
|
+
*/
|
|
13
|
+
class RequestMiddleware {
|
|
14
|
+
/** @internal */
|
|
15
|
+
constructor(callback, router$1 = new router.Router(), doc) {
|
|
16
|
+
this.router = router$1;
|
|
17
|
+
this.doc = doc;
|
|
18
|
+
if (callback) {
|
|
19
|
+
if (callback instanceof RequestMiddleware) {
|
|
20
|
+
callback.router.layers.forEach((l) => {
|
|
21
|
+
this.router.layers.push(l);
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
callback.id = callback.id || utils.uuidv4("-");
|
|
26
|
+
this.doc = callback.doc = utils$1.joinDocs((callback === null || callback === void 0 ? void 0 : callback.doc) || {}, doc || {});
|
|
27
|
+
this.router.middleware(utils$1.createDynamicMiddleware(callback));
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Anexa um middleware adicional à cadeia.
|
|
33
|
+
*
|
|
34
|
+
* @template Req - Tipo de Request estendido pelo novo middleware.
|
|
35
|
+
* @template Res - Tipo de Response estendido pelo novo middleware.
|
|
36
|
+
* @param {MiddlewareCallback<Rq & Req, Rs & Res>} callback - A função de middleware a ser adicionada.
|
|
37
|
+
* @param {MiddlewareFCDoc} [doc] - Documentação OpenAPI opcional para o middleware.
|
|
38
|
+
* @returns {RequestMiddleware<Rq & Req, Rs & Res>} Uma nova instância de `RequestMiddleware` com o middleware adicionado.
|
|
39
|
+
*/
|
|
40
|
+
middleware(callback, doc) {
|
|
41
|
+
return new RequestMiddleware(callback, this.router, doc);
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Executa a cadeia de middlewares encapsulados por esta instância.
|
|
45
|
+
* Este método é projetado principalmente para testes, permitindo que você execute a lógica do middleware
|
|
46
|
+
* de forma isolada, sem a necessidade de um servidor HTTP real.
|
|
47
|
+
*
|
|
48
|
+
* @param {Rq} request - O objeto de requisição (ou um mock para testes).
|
|
49
|
+
* @param {Rs} response - O objeto de resposta (ou um mock para testes).
|
|
50
|
+
* @param {NextFunction} next - A função `next` a ser chamada ao final da cadeia de middlewares.
|
|
51
|
+
* @returns {Promise<void>} Uma promessa que resolve quando a execução da cadeia é concluída.
|
|
52
|
+
*
|
|
53
|
+
* @example
|
|
54
|
+
* import { middleware, Request, Response, NextFunction } from '@ismael1361/router';
|
|
55
|
+
*
|
|
56
|
+
* // 1. Crie um componente de middleware reutilizável
|
|
57
|
+
* const myMiddleware = middleware<{ user: { id: string } }>((req, res, next) => {
|
|
58
|
+
* req.user = { id: 'test-user' };
|
|
59
|
+
* next();
|
|
60
|
+
* });
|
|
61
|
+
*
|
|
62
|
+
* // 2. Crie mocks para os objetos de requisição, resposta e next (ex: com Jest)
|
|
63
|
+
* const mockRequest = {} as Request & { user: { id: string } };
|
|
64
|
+
* const mockResponse = {} as Response;
|
|
65
|
+
* const mockNext = () => {}; // ou jest.fn()
|
|
66
|
+
*
|
|
67
|
+
* // 3. Execute o middleware programaticamente e verifique o resultado
|
|
68
|
+
* await myMiddleware.execute(mockRequest, mockResponse, mockNext);
|
|
69
|
+
* console.log(mockRequest.user); // Output: { id: 'test-user' }
|
|
70
|
+
*/
|
|
71
|
+
execute(request, response, next) {
|
|
72
|
+
return this.router.executeMiddlewares(request, response, next);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Representa um componente de middleware encadeável que pode ser finalizado com um manipulador (handler).
|
|
77
|
+
* Uma instância desta classe é retornada pela função `middleware()`. Permite criar componentes
|
|
78
|
+
* de lógica reutilizáveis que podem ser aplicados a múltiplas rotas.
|
|
79
|
+
*
|
|
80
|
+
* @example
|
|
81
|
+
* // middlewares/auth.ts
|
|
82
|
+
* import { middleware, Request } from '@ismael1361/router';
|
|
83
|
+
*
|
|
84
|
+
* // Define um tipo para a requisição após a autenticação
|
|
85
|
+
* interface AuthRequest extends Request {
|
|
86
|
+
* user: { id: string; roles: string[] };
|
|
87
|
+
* }
|
|
88
|
+
*
|
|
89
|
+
* // Cria um componente de middleware reutilizável
|
|
90
|
+
* export const authMiddleware = middleware<AuthRequest>((req, res, next) => {
|
|
91
|
+
* // Lógica de autenticação...
|
|
92
|
+
* req.user = { id: 'user-123', roles: ['admin'] };
|
|
93
|
+
* next();
|
|
94
|
+
* }, {
|
|
95
|
+
* security: [{ bearerAuth: [] }], // Documentação OpenAPI
|
|
96
|
+
* responses: { '401': { description: 'Não autorizado' } }
|
|
97
|
+
* });
|
|
98
|
+
*
|
|
99
|
+
* // routes/users.ts
|
|
100
|
+
* // router.get('/profile')
|
|
101
|
+
* // .middleware(authMiddleware) // Aplica o middleware
|
|
102
|
+
* // .handler((req, res) => {
|
|
103
|
+
* // // req.user está disponível e tipado aqui
|
|
104
|
+
* // res.json(req.user);
|
|
105
|
+
* // });
|
|
106
|
+
*/
|
|
107
|
+
class Middleware extends RequestMiddleware {
|
|
108
|
+
/**
|
|
109
|
+
* Anexa um middleware adicional à cadeia.
|
|
110
|
+
*
|
|
111
|
+
* @returns {Middleware<Rq & Req, Rs & Res>} Uma nova instância de `Middleware` para continuar o encadeamento.
|
|
112
|
+
*/
|
|
113
|
+
middleware(callback, doc) {
|
|
114
|
+
return new Middleware(callback, this.router, doc);
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Finaliza a cadeia de middlewares e define um manipulador (handler) final.
|
|
118
|
+
* Isso transforma o componente de middleware em um componente de manipulador completo e reutilizável.
|
|
119
|
+
*
|
|
120
|
+
* @returns {Handler<Rq & Req, Rs & Res>} Uma instância de `Handler` que encapsula toda a cadeia.
|
|
121
|
+
*/
|
|
122
|
+
handler(callback, doc) {
|
|
123
|
+
return new handler.Handler(callback, this.router, doc);
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Executa a cadeia de middlewares encapsulados por esta instância de `Middleware`.
|
|
127
|
+
* Este método é herdado e serve principalmente para fins de teste, permitindo invocar
|
|
128
|
+
* a lógica do middleware de forma isolada.
|
|
129
|
+
*
|
|
130
|
+
* @param {Rq} request - O objeto de requisição (ou um mock para testes).
|
|
131
|
+
* @param {Rs} response - O objeto de resposta (ou um mock para testes).
|
|
132
|
+
* @param {NextFunction} next - A função `next` a ser chamada ao final da cadeia.
|
|
133
|
+
* @returns {Promise<void>} Uma promessa que resolve quando a execução é concluída.
|
|
134
|
+
*
|
|
135
|
+
* @example
|
|
136
|
+
* import { middleware, Request, Response, NextFunction } from '@ismael1361/router';
|
|
137
|
+
*
|
|
138
|
+
* const addDataMiddleware = middleware<{ customData: string }>((req, res, next) => {
|
|
139
|
+
* req.customData = 'Hello from middleware!';
|
|
140
|
+
* next();
|
|
141
|
+
* });
|
|
142
|
+
*
|
|
143
|
+
* const mockRequest = {} as Request & { customData: string };
|
|
144
|
+
*
|
|
145
|
+
* await addDataMiddleware.execute(mockRequest, {} as Response, () => {});
|
|
146
|
+
* console.log(mockRequest.customData); // Output: 'Hello from middleware!'
|
|
147
|
+
*/
|
|
148
|
+
execute(request, response, next) {
|
|
149
|
+
return super.execute(request, response, next);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
exports.Middleware = Middleware;
|
|
154
|
+
exports.RequestMiddleware = RequestMiddleware;
|
|
2
155
|
//# sourceMappingURL=middleware.js.map
|
package/dist/middleware.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"middleware.js","sources":["../src/middleware.ts"],"sourcesContent":[null],"names":["
|
|
1
|
+
{"version":3,"file":"middleware.js","sources":["../src/middleware.ts"],"sourcesContent":[null],"names":["router","Router","uuidv4","joinDocs","createDynamicMiddleware","Handler"],"mappings":";;;;;;;AAMA;;;;AAIG;MACU,iBAAiB,CAAA;;AAE7B,IAAA,WAAA,CAAY,QAAgD,EAAWA,QAAA,GAAiB,IAAIC,aAAM,EAAE,EAAS,GAAqB,EAAA;QAA3D,IAAM,CAAA,MAAA,GAAND,QAAM,CAAuB;QAAS,IAAG,CAAA,GAAA,GAAH,GAAG,CAAkB;QACjI,IAAI,QAAQ,EAAE;AACb,YAAA,IAAI,QAAQ,YAAY,iBAAiB,EAAE;gBAC1C,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;oBACpC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC5B,iBAAC,CAAC,CAAC;aACH;iBAAM;gBACN,QAAQ,CAAC,EAAE,GAAG,QAAQ,CAAC,EAAE,IAAIE,YAAM,CAAC,GAAG,CAAC,CAAC;gBACzC,IAAI,CAAC,GAAG,GAAG,QAAQ,CAAC,GAAG,GAAGC,gBAAQ,CAAC,CAAA,QAAQ,KAAA,IAAA,IAAR,QAAQ,KAAR,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,QAAQ,CAAE,GAAG,KAAI,EAAE,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;gBACnE,IAAI,CAAC,MAAM,CAAC,UAAU,CAACC,+BAAuB,CAAC,QAAQ,CAAC,CAAC,CAAC;aAC1D;SACD;KACD;AAED;;;;;;;;AAQG;IACH,UAAU,CAAiE,QAAgD,EAAE,GAAqB,EAAA;QACjJ,OAAO,IAAI,iBAAiB,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;KACzD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2BG;AACH,IAAA,OAAO,CAAC,OAAW,EAAE,QAAY,EAAE,IAAkB,EAAA;AACpD,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;KAC/D;AACD,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BG;AACG,MAAO,UAAyE,SAAQ,iBAAyB,CAAA;AACtH;;;;AAIG;IACH,UAAU,CAAiE,QAAgD,EAAE,GAAqB,EAAA;QACjJ,OAAO,IAAI,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;KAClD;AAED;;;;;AAKG;IACH,OAAO,CAAiE,QAA6C,EAAE,GAAqB,EAAA;QAC3I,OAAO,IAAIC,eAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;KAC/C;AAED;;;;;;;;;;;;;;;;;;;;;;AAsBG;AACH,IAAA,OAAO,CAAC,OAAW,EAAE,QAAY,EAAE,IAAkB,EAAA;QACpD,OAAO,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;KAC9C;AACD;;;;;"}
|