@ismael1361/router 1.1.1 → 1.1.3

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 (101) hide show
  1. package/dist/HandleError.esm.js +126 -1
  2. package/dist/HandleError.esm.js.map +1 -1
  3. package/dist/HandleError.js +128 -1
  4. package/dist/HandleError.js.map +1 -1
  5. package/dist/Layer.esm.js +250 -1
  6. package/dist/Layer.esm.js.map +1 -1
  7. package/dist/Layer.js +252 -1
  8. package/dist/Layer.js.map +1 -1
  9. package/dist/Middlewares.esm.js +187 -1
  10. package/dist/Middlewares.esm.js.map +1 -1
  11. package/dist/Middlewares.js +194 -1
  12. package/dist/Middlewares.js.map +1 -1
  13. package/dist/handler.esm.js +170 -1
  14. package/dist/handler.esm.js.map +1 -1
  15. package/dist/handler.js +173 -1
  16. package/dist/handler.js.map +1 -1
  17. package/dist/index.esm.js +141 -1
  18. package/dist/index.esm.js.map +1 -1
  19. package/dist/index.js +152 -1
  20. package/dist/index.js.map +1 -1
  21. package/dist/middleware.esm.js +151 -1
  22. package/dist/middleware.esm.js.map +1 -1
  23. package/dist/middleware.js +154 -1
  24. package/dist/middleware.js.map +1 -1
  25. package/dist/node_modules/tslib/tslib.es6.esm.js +45 -1
  26. package/dist/node_modules/tslib/tslib.es6.esm.js.map +1 -1
  27. package/dist/node_modules/tslib/tslib.es6.js +48 -1
  28. package/dist/node_modules/tslib/tslib.es6.js.map +1 -1
  29. package/dist/redocUi/index.esm.js +74 -1
  30. package/dist/redocUi/index.esm.js.map +1 -1
  31. package/dist/redocUi/index.js +76 -1
  32. package/dist/redocUi/index.js.map +1 -1
  33. package/dist/router.esm.js +436 -1
  34. package/dist/router.esm.js.map +1 -1
  35. package/dist/router.js +438 -1
  36. package/dist/router.js.map +1 -1
  37. package/dist/swagger-markdown/index.esm.js +128 -1
  38. package/dist/swagger-markdown/index.esm.js.map +1 -1
  39. package/dist/swagger-markdown/index.js +134 -1
  40. package/dist/swagger-markdown/index.js.map +1 -1
  41. package/dist/swagger-markdown/lib/anchor.esm.js +6 -1
  42. package/dist/swagger-markdown/lib/anchor.esm.js.map +1 -1
  43. package/dist/swagger-markdown/lib/anchor.js +8 -1
  44. package/dist/swagger-markdown/lib/anchor.js.map +1 -1
  45. package/dist/swagger-markdown/lib/inArray.esm.js +20 -1
  46. package/dist/swagger-markdown/lib/inArray.esm.js.map +1 -1
  47. package/dist/swagger-markdown/lib/inArray.js +22 -1
  48. package/dist/swagger-markdown/lib/inArray.js.map +1 -1
  49. package/dist/swagger-markdown/models/schema.esm.js +64 -1
  50. package/dist/swagger-markdown/models/schema.esm.js.map +1 -1
  51. package/dist/swagger-markdown/models/schema.js +66 -1
  52. package/dist/swagger-markdown/models/schema.js.map +1 -1
  53. package/dist/swagger-markdown/transformers/contact.esm.js +23 -1
  54. package/dist/swagger-markdown/transformers/contact.esm.js.map +1 -1
  55. package/dist/swagger-markdown/transformers/contact.js +25 -1
  56. package/dist/swagger-markdown/transformers/contact.js.map +1 -1
  57. package/dist/swagger-markdown/transformers/dataTypes.esm.js +59 -1
  58. package/dist/swagger-markdown/transformers/dataTypes.esm.js.map +1 -1
  59. package/dist/swagger-markdown/transformers/dataTypes.js +61 -1
  60. package/dist/swagger-markdown/transformers/dataTypes.js.map +1 -1
  61. package/dist/swagger-markdown/transformers/definitions.esm.js +75 -1
  62. package/dist/swagger-markdown/transformers/definitions.esm.js.map +1 -1
  63. package/dist/swagger-markdown/transformers/definitions.js +80 -1
  64. package/dist/swagger-markdown/transformers/definitions.js.map +1 -1
  65. package/dist/swagger-markdown/transformers/externalDocs.esm.js +13 -1
  66. package/dist/swagger-markdown/transformers/externalDocs.esm.js.map +1 -1
  67. package/dist/swagger-markdown/transformers/externalDocs.js +15 -1
  68. package/dist/swagger-markdown/transformers/externalDocs.js.map +1 -1
  69. package/dist/swagger-markdown/transformers/info.esm.js +36 -1
  70. package/dist/swagger-markdown/transformers/info.esm.js.map +1 -1
  71. package/dist/swagger-markdown/transformers/info.js +38 -1
  72. package/dist/swagger-markdown/transformers/info.js.map +1 -1
  73. package/dist/swagger-markdown/transformers/license.esm.js +20 -1
  74. package/dist/swagger-markdown/transformers/license.esm.js.map +1 -1
  75. package/dist/swagger-markdown/transformers/license.js +22 -1
  76. package/dist/swagger-markdown/transformers/license.js.map +1 -1
  77. package/dist/swagger-markdown/transformers/path.esm.js +71 -1
  78. package/dist/swagger-markdown/transformers/path.esm.js.map +1 -1
  79. package/dist/swagger-markdown/transformers/path.js +76 -1
  80. package/dist/swagger-markdown/transformers/path.js.map +1 -1
  81. package/dist/swagger-markdown/transformers/pathParameters.esm.js +62 -1
  82. package/dist/swagger-markdown/transformers/pathParameters.esm.js.map +1 -1
  83. package/dist/swagger-markdown/transformers/pathParameters.js +64 -1
  84. package/dist/swagger-markdown/transformers/pathParameters.js.map +1 -1
  85. package/dist/swagger-markdown/transformers/pathResponses.esm.js +45 -1
  86. package/dist/swagger-markdown/transformers/pathResponses.esm.js.map +1 -1
  87. package/dist/swagger-markdown/transformers/pathResponses.js +47 -1
  88. package/dist/swagger-markdown/transformers/pathResponses.js.map +1 -1
  89. package/dist/swagger-markdown/transformers/security.esm.js +41 -1
  90. package/dist/swagger-markdown/transformers/security.esm.js.map +1 -1
  91. package/dist/swagger-markdown/transformers/security.js +43 -1
  92. package/dist/swagger-markdown/transformers/security.js.map +1 -1
  93. package/dist/swagger-markdown/transformers/securityDefinitions.esm.js +51 -1
  94. package/dist/swagger-markdown/transformers/securityDefinitions.esm.js.map +1 -1
  95. package/dist/swagger-markdown/transformers/securityDefinitions.js +57 -1
  96. package/dist/swagger-markdown/transformers/securityDefinitions.js.map +1 -1
  97. package/dist/utils.esm.js +244 -1
  98. package/dist/utils.esm.js.map +1 -1
  99. package/dist/utils.js +256 -1
  100. package/dist/utils.js.map +1 -1
  101. package/package.json +2 -2
package/dist/index.esm.js CHANGED
@@ -1,2 +1,142 @@
1
- import{__rest as e}from"./node_modules/tslib/tslib.es6.esm.js";import{Router as r}from"./router.esm.js";import{Middleware as o}from"./middleware.esm.js";import{Handler as s}from"./handler.esm.js";import{joinObject as t}from"./utils.esm.js";export{getCorsHeaders,getCorsOptions}from"./utils.esm.js";export{HandleError}from"./HandleError.esm.js";import*as n from"./Middlewares.esm.js";export{n as Middlewares};function m(){return new r}function i(e,r){return new o(e,void 0,r)}function d(e,r){return new s(e,void 0,r)}function u(e){return new r(e)}function a(r,o={}){const{components:s={}}=r,n=e(r,["components"]);return Object.assign(Object.assign({},n),{components:t(s,o)})}var f={create:m,route:u,middleware:i,handler:d,doc:a};export{m as create,f as default,a as doc,d as handler,i as middleware,u as route};
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
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.js","sources":["../src/index.ts"],"sourcesContent":[null],"names":["create","Router","middleware","callback","doc","Middleware","undefined","handler","Handler","route","path","operation","components","comp","op","__rest","Object","assign","joinObject","index"],"mappings":"iaAqCgBA,IACf,OAAO,IAAIC,CACZ,CA2BgB,SAAAC,EAA2EC,EAAwCC,GAClI,OAAO,IAAIC,EAAWF,OAAUG,EAAWF,EAC5C,CAsBgB,SAAAG,EAAwEJ,EAAqCC,GAC5H,OAAO,IAAII,EAAQL,OAAUG,EAAWF,EACzC,CAqBM,SAAUK,EAAsEC,GACrF,OAAO,IAAIT,EAAiBS,EAC7B,UAuBgBN,EAAIO,EAAqDC,EAAsC,IAC9G,MAAQA,WAAYC,EAAO,CAAA,GAAcF,EAAPG,EAAOC,EAAAJ,EAAnC,CAAA,eACN,OAAYK,OAAAC,OAAAD,OAAAC,OAAA,CAAA,EAAAH,GAAI,CAAAF,WAAYM,EAAWL,EAAMD,IAC9C,CAEA,IAAeO,EAAA,CACdnB,SACAS,QACAP,aACAK,UACAH"}
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
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("./node_modules/tslib/tslib.es6.js"),r=require("./router.js"),t=require("./middleware.js"),o=require("./handler.js"),s=require("./utils.js"),n=require("./HandleError.js"),d=require("./Middlewares.js");function i(){return new r.Router}function u(e,r){return new t.Middleware(e,void 0,r)}function a(e,r){return new o.Handler(e,void 0,r)}function l(e){return new r.Router(e)}function c(r,t={}){const{components:o={}}=r,n=e.__rest(r,["components"]);return Object.assign(Object.assign({},n),{components:s.joinObject(o,t)})}var p={create:i,route:l,middleware:u,handler:a,doc:c};exports.getCorsHeaders=s.getCorsHeaders,exports.getCorsOptions=s.getCorsOptions,exports.HandleError=n.HandleError,exports.Middlewares=d,exports.create=i,exports.default=p,exports.doc=c,exports.handler=a,exports.middleware=u,exports.route=l;
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":["create","Router","middleware","callback","doc","Middleware","undefined","handler","Handler","route","path","operation","components","comp","op","__rest","Object","assign","joinObject","index"],"mappings":"oSAqCgBA,IACf,OAAO,IAAIC,EAAMA,MAClB,CA2BgB,SAAAC,EAA2EC,EAAwCC,GAClI,OAAO,IAAIC,EAAAA,WAAWF,OAAUG,EAAWF,EAC5C,CAsBgB,SAAAG,EAAwEJ,EAAqCC,GAC5H,OAAO,IAAII,EAAAA,QAAQL,OAAUG,EAAWF,EACzC,CAqBM,SAAUK,EAAsEC,GACrF,OAAO,IAAIT,EAAAA,OAAiBS,EAC7B,UAuBgBN,EAAIO,EAAqDC,EAAsC,IAC9G,MAAQA,WAAYC,EAAO,CAAA,GAAcF,EAAPG,EAAOC,SAAAJ,EAAnC,CAAA,eACN,OAAYK,OAAAC,OAAAD,OAAAC,OAAA,CAAA,EAAAH,GAAI,CAAAF,WAAYM,EAAUA,WAACL,EAAMD,IAC9C,CAEA,IAAeO,EAAA,CACdnB,SACAS,QACAP,aACAK,UACAH"}
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;;;;;;;;;;;;;"}
@@ -1,2 +1,152 @@
1
- import{Router as e}from"./router.esm.js";import{joinDocs as r,createDynamicMiddleware as t}from"./utils.esm.js";import{uuidv4 as s}from"@ismael1361/utils";import{Handler as o}from"./handler.esm.js";class i{constructor(o,u=new e,d){this.router=u,this.doc=d,o&&(o instanceof i?o.router.layers.forEach(e=>{this.router.layers.push(e)}):(o.id=o.id||s("-"),this.doc=o.doc=r((null==o?void 0:o.doc)||{},d||{}),this.router.middleware(t(o))))}middleware(e,r){return new i(e,this.router,r)}execute(e,r,t){return this.router.executeMiddlewares(e,r,t)}}class u extends i{middleware(e,r){return new u(e,this.router,r)}handler(e,r){return new o(e,this.router,r)}execute(e,r,t){return super.execute(e,r,t)}}export{u as Middleware,i as RequestMiddleware};
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":["RequestMiddleware","constructor","callback","router","Router","doc","this","layers","forEach","l","push","id","uuidv4","joinDocs","middleware","createDynamicMiddleware","execute","request","response","next","executeMiddlewares","Middleware","handler","Handler","super"],"mappings":"4MAWaA,EAEZ,WAAAC,CAAYC,EAA2DC,EAAiB,IAAIC,EAAiBC,GAAtCC,KAAMH,OAANA,EAAsCG,KAAGD,IAAHA,EACxGH,IACCA,aAAoBF,EACvBE,EAASC,OAAOI,OAAOC,QAASC,IAC/BH,KAAKH,OAAOI,OAAOG,KAAKD,MAGzBP,EAASS,GAAKT,EAASS,IAAMC,EAAO,KACpCN,KAAKD,IAAMH,EAASG,IAAMQ,GAASX,aAAA,EAAAA,EAAUG,MAAO,GAAIA,GAAO,CAAA,GAC/DC,KAAKH,OAAOW,WAAWC,EAAwBb,KAGjD,CAWD,UAAAY,CAA2EZ,EAAkDG,GAC5H,OAAO,IAAIL,EAAkBE,EAAUI,KAAKH,OAAQE,EACpD,CA8BD,OAAAW,CAAQC,EAAaC,EAAcC,GAClC,OAAOb,KAAKH,OAAOiB,mBAAmBH,EAASC,EAAUC,EACzD,EAmCI,MAAOE,UAAiFrB,EAM7F,UAAAc,CAA2EZ,EAAkDG,GAC5H,OAAO,IAAIgB,EAAWnB,EAAUI,KAAKH,OAAQE,EAC7C,CAQD,OAAAiB,CAAwEpB,EAA+CG,GACtH,OAAO,IAAIkB,EAAQrB,EAAUI,KAAKH,OAAQE,EAC1C,CAyBD,OAAAW,CAAQC,EAAaC,EAAcC,GAClC,OAAOK,MAAMR,QAAQC,EAASC,EAAUC,EACxC"}
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;;;;"}
@@ -1,2 +1,155 @@
1
- "use strict";var e=require("./router.js"),r=require("./utils.js"),t=require("@ismael1361/utils"),s=require("./handler.js");class u{constructor(s,i=new e.Router,d){this.router=i,this.doc=d,s&&(s instanceof u?s.router.layers.forEach(e=>{this.router.layers.push(e)}):(s.id=s.id||t.uuidv4("-"),this.doc=s.doc=r.joinDocs((null==s?void 0:s.doc)||{},d||{}),this.router.middleware(r.createDynamicMiddleware(s))))}middleware(e,r){return new u(e,this.router,r)}execute(e,r,t){return this.router.executeMiddlewares(e,r,t)}}class i extends u{middleware(e,r){return new i(e,this.router,r)}handler(e,r){return new s.Handler(e,this.router,r)}execute(e,r,t){return super.execute(e,r,t)}}exports.Middleware=i,exports.RequestMiddleware=u;
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
@@ -1 +1 @@
1
- {"version":3,"file":"middleware.js","sources":["../src/middleware.ts"],"sourcesContent":[null],"names":["RequestMiddleware","constructor","callback","router","Router","doc","this","layers","forEach","l","push","id","uuidv4","joinDocs","middleware","createDynamicMiddleware","execute","request","response","next","executeMiddlewares","Middleware","handler","Handler","super"],"mappings":"iIAWaA,EAEZ,WAAAC,CAAYC,EAA2DC,EAAiB,IAAIC,EAAMA,OAAWC,GAAtCC,KAAMH,OAANA,EAAsCG,KAAGD,IAAHA,EACxGH,IACCA,aAAoBF,EACvBE,EAASC,OAAOI,OAAOC,QAASC,IAC/BH,KAAKH,OAAOI,OAAOG,KAAKD,MAGzBP,EAASS,GAAKT,EAASS,IAAMC,EAAMA,OAAC,KACpCN,KAAKD,IAAMH,EAASG,IAAMQ,EAAAA,UAASX,aAAA,EAAAA,EAAUG,MAAO,GAAIA,GAAO,CAAA,GAC/DC,KAAKH,OAAOW,WAAWC,EAAAA,wBAAwBb,KAGjD,CAWD,UAAAY,CAA2EZ,EAAkDG,GAC5H,OAAO,IAAIL,EAAkBE,EAAUI,KAAKH,OAAQE,EACpD,CA8BD,OAAAW,CAAQC,EAAaC,EAAcC,GAClC,OAAOb,KAAKH,OAAOiB,mBAAmBH,EAASC,EAAUC,EACzD,EAmCI,MAAOE,UAAiFrB,EAM7F,UAAAc,CAA2EZ,EAAkDG,GAC5H,OAAO,IAAIgB,EAAWnB,EAAUI,KAAKH,OAAQE,EAC7C,CAQD,OAAAiB,CAAwEpB,EAA+CG,GACtH,OAAO,IAAIkB,EAAOA,QAACrB,EAAUI,KAAKH,OAAQE,EAC1C,CAyBD,OAAAW,CAAQC,EAAaC,EAAcC,GAClC,OAAOK,MAAMR,QAAQC,EAASC,EAAUC,EACxC"}
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;;;;;"}