@ismael1361/router 1.2.92 → 2.0.0

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 (290) hide show
  1. package/README.md +956 -505
  2. package/dist/1.0/Doc/index.d.ts.map +1 -0
  3. package/dist/1.0/Doc/type.d.ts.map +1 -0
  4. package/dist/1.0/HandleError.d.ts.map +1 -0
  5. package/dist/1.0/Layer.d.ts.map +1 -0
  6. package/dist/1.0/Middlewares.d.ts.map +1 -0
  7. package/dist/1.0/handler.d.ts.map +1 -0
  8. package/dist/1.0/index.d.ts +150 -0
  9. package/dist/1.0/index.d.ts.map +1 -0
  10. package/dist/1.0/middleware.d.ts.map +1 -0
  11. package/dist/1.0/redocUi/index.d.ts.map +1 -0
  12. package/dist/1.0/router.d.ts.map +1 -0
  13. package/dist/1.0/swagger-markdown/index.d.ts.map +1 -0
  14. package/dist/1.0/swagger-markdown/lib/anchor.d.ts.map +1 -0
  15. package/dist/1.0/swagger-markdown/lib/inArray.d.ts.map +1 -0
  16. package/dist/1.0/swagger-markdown/models/schema.d.ts.map +1 -0
  17. package/dist/1.0/swagger-markdown/transformers/contact.d.ts.map +1 -0
  18. package/dist/1.0/swagger-markdown/transformers/dataTypes.d.ts.map +1 -0
  19. package/dist/1.0/swagger-markdown/transformers/definitions.d.ts.map +1 -0
  20. package/dist/1.0/swagger-markdown/transformers/externalDocs.d.ts.map +1 -0
  21. package/dist/1.0/swagger-markdown/transformers/info.d.ts.map +1 -0
  22. package/dist/1.0/swagger-markdown/transformers/license.d.ts.map +1 -0
  23. package/dist/1.0/swagger-markdown/transformers/path.d.ts.map +1 -0
  24. package/dist/1.0/swagger-markdown/transformers/pathParameters.d.ts.map +1 -0
  25. package/dist/1.0/swagger-markdown/transformers/pathResponses.d.ts.map +1 -0
  26. package/dist/1.0/swagger-markdown/transformers/security.d.ts.map +1 -0
  27. package/dist/1.0/swagger-markdown/transformers/securityDefinitions.d.ts.map +1 -0
  28. package/dist/1.0/type.d.ts.map +1 -0
  29. package/dist/1.0/utils.d.ts.map +1 -0
  30. package/dist/2.0/HandleError.d.ts +127 -0
  31. package/dist/2.0/HandleError.d.ts.map +1 -0
  32. package/dist/2.0/HandleError.esm.js.map +1 -0
  33. package/dist/2.0/HandleError.js.map +1 -0
  34. package/dist/2.0/Middlewares.d.ts +178 -0
  35. package/dist/2.0/Middlewares.d.ts.map +1 -0
  36. package/dist/{Middlewares.esm.js → 2.0/Middlewares.esm.js} +5 -5
  37. package/dist/2.0/Middlewares.esm.js.map +1 -0
  38. package/dist/{Middlewares.js → 2.0/Middlewares.js} +5 -5
  39. package/dist/2.0/Middlewares.js.map +1 -0
  40. package/dist/2.0/analyzeSwagger.d.ts +7 -0
  41. package/dist/2.0/analyzeSwagger.d.ts.map +1 -0
  42. package/dist/2.0/analyzeSwagger.esm.js +432 -0
  43. package/dist/2.0/analyzeSwagger.esm.js.map +1 -0
  44. package/dist/2.0/analyzeSwagger.js +435 -0
  45. package/dist/2.0/analyzeSwagger.js.map +1 -0
  46. package/dist/2.0/create.d.ts +75 -0
  47. package/dist/2.0/create.d.ts.map +1 -0
  48. package/dist/2.0/create.esm.js +321 -0
  49. package/dist/2.0/create.esm.js.map +1 -0
  50. package/dist/2.0/create.js +323 -0
  51. package/dist/2.0/create.js.map +1 -0
  52. package/dist/2.0/handler.d.ts +149 -0
  53. package/dist/2.0/handler.d.ts.map +1 -0
  54. package/dist/2.0/handler.esm.js +188 -0
  55. package/dist/2.0/handler.esm.js.map +1 -0
  56. package/dist/2.0/handler.js +191 -0
  57. package/dist/2.0/handler.js.map +1 -0
  58. package/dist/2.0/index.d.ts +7 -0
  59. package/dist/2.0/index.d.ts.map +1 -0
  60. package/dist/2.0/redocUi/index.d.ts +4 -0
  61. package/dist/2.0/redocUi/index.d.ts.map +1 -0
  62. package/dist/{redocUi → 2.0/redocUi}/index.esm.js +1 -1
  63. package/dist/2.0/redocUi/index.esm.js.map +1 -0
  64. package/dist/{redocUi → 2.0/redocUi}/index.js +1 -1
  65. package/dist/2.0/redocUi/index.js.map +1 -0
  66. package/dist/2.0/renderChainDocs.d.ts +3 -0
  67. package/dist/2.0/renderChainDocs.d.ts.map +1 -0
  68. package/dist/2.0/renderChainDocs.esm.js +118 -0
  69. package/dist/2.0/renderChainDocs.esm.js.map +1 -0
  70. package/dist/2.0/renderChainDocs.js +120 -0
  71. package/dist/2.0/renderChainDocs.js.map +1 -0
  72. package/dist/2.0/router.d.ts +73 -0
  73. package/dist/2.0/router.d.ts.map +1 -0
  74. package/dist/2.0/router.esm.js +302 -0
  75. package/dist/2.0/router.esm.js.map +1 -0
  76. package/dist/2.0/router.js +304 -0
  77. package/dist/2.0/router.js.map +1 -0
  78. package/dist/2.0/swagger-markdown/index.d.ts +10 -0
  79. package/dist/2.0/swagger-markdown/index.d.ts.map +1 -0
  80. package/dist/{swagger-markdown → 2.0/swagger-markdown}/index.esm.js +1 -1
  81. package/dist/2.0/swagger-markdown/index.esm.js.map +1 -0
  82. package/dist/{swagger-markdown → 2.0/swagger-markdown}/index.js +1 -1
  83. package/dist/2.0/swagger-markdown/index.js.map +1 -0
  84. package/dist/2.0/swagger-markdown/lib/anchor.d.ts +6 -0
  85. package/dist/2.0/swagger-markdown/lib/anchor.d.ts.map +1 -0
  86. package/dist/2.0/swagger-markdown/lib/anchor.esm.js.map +1 -0
  87. package/dist/2.0/swagger-markdown/lib/anchor.js.map +1 -0
  88. package/dist/2.0/swagger-markdown/lib/inArray.d.ts +9 -0
  89. package/dist/2.0/swagger-markdown/lib/inArray.d.ts.map +1 -0
  90. package/dist/2.0/swagger-markdown/lib/inArray.esm.js.map +1 -0
  91. package/dist/2.0/swagger-markdown/lib/inArray.js.map +1 -0
  92. package/dist/2.0/swagger-markdown/models/schema.d.ts +28 -0
  93. package/dist/2.0/swagger-markdown/models/schema.d.ts.map +1 -0
  94. package/dist/2.0/swagger-markdown/models/schema.esm.js.map +1 -0
  95. package/dist/2.0/swagger-markdown/models/schema.js.map +1 -0
  96. package/dist/2.0/swagger-markdown/transformers/contact.d.ts +8 -0
  97. package/dist/2.0/swagger-markdown/transformers/contact.d.ts.map +1 -0
  98. package/dist/2.0/swagger-markdown/transformers/contact.esm.js.map +1 -0
  99. package/dist/2.0/swagger-markdown/transformers/contact.js.map +1 -0
  100. package/dist/2.0/swagger-markdown/transformers/dataTypes.d.ts +9 -0
  101. package/dist/2.0/swagger-markdown/transformers/dataTypes.d.ts.map +1 -0
  102. package/dist/2.0/swagger-markdown/transformers/dataTypes.esm.js.map +1 -0
  103. package/dist/2.0/swagger-markdown/transformers/dataTypes.js.map +1 -0
  104. package/dist/2.0/swagger-markdown/transformers/definitions.d.ts +14 -0
  105. package/dist/2.0/swagger-markdown/transformers/definitions.d.ts.map +1 -0
  106. package/dist/2.0/swagger-markdown/transformers/definitions.esm.js.map +1 -0
  107. package/dist/2.0/swagger-markdown/transformers/definitions.js.map +1 -0
  108. package/dist/2.0/swagger-markdown/transformers/externalDocs.d.ts +4 -0
  109. package/dist/2.0/swagger-markdown/transformers/externalDocs.d.ts.map +1 -0
  110. package/dist/2.0/swagger-markdown/transformers/externalDocs.esm.js.map +1 -0
  111. package/dist/2.0/swagger-markdown/transformers/externalDocs.js.map +1 -0
  112. package/dist/2.0/swagger-markdown/transformers/info.d.ts +11 -0
  113. package/dist/2.0/swagger-markdown/transformers/info.d.ts.map +1 -0
  114. package/dist/2.0/swagger-markdown/transformers/info.esm.js.map +1 -0
  115. package/dist/2.0/swagger-markdown/transformers/info.js.map +1 -0
  116. package/dist/2.0/swagger-markdown/transformers/license.d.ts +8 -0
  117. package/dist/2.0/swagger-markdown/transformers/license.d.ts.map +1 -0
  118. package/dist/2.0/swagger-markdown/transformers/license.esm.js.map +1 -0
  119. package/dist/2.0/swagger-markdown/transformers/license.js.map +1 -0
  120. package/dist/2.0/swagger-markdown/transformers/path.d.ts +9 -0
  121. package/dist/2.0/swagger-markdown/transformers/path.d.ts.map +1 -0
  122. package/dist/2.0/swagger-markdown/transformers/path.esm.js.map +1 -0
  123. package/dist/2.0/swagger-markdown/transformers/path.js.map +1 -0
  124. package/dist/2.0/swagger-markdown/transformers/pathParameters.d.ts +4 -0
  125. package/dist/2.0/swagger-markdown/transformers/pathParameters.d.ts.map +1 -0
  126. package/dist/2.0/swagger-markdown/transformers/pathParameters.esm.js.map +1 -0
  127. package/dist/2.0/swagger-markdown/transformers/pathParameters.js.map +1 -0
  128. package/dist/2.0/swagger-markdown/transformers/pathResponses.d.ts +9 -0
  129. package/dist/2.0/swagger-markdown/transformers/pathResponses.d.ts.map +1 -0
  130. package/dist/2.0/swagger-markdown/transformers/pathResponses.esm.js.map +1 -0
  131. package/dist/2.0/swagger-markdown/transformers/pathResponses.js.map +1 -0
  132. package/dist/2.0/swagger-markdown/transformers/security.d.ts +4 -0
  133. package/dist/2.0/swagger-markdown/transformers/security.d.ts.map +1 -0
  134. package/dist/2.0/swagger-markdown/transformers/security.esm.js.map +1 -0
  135. package/dist/2.0/swagger-markdown/transformers/security.js.map +1 -0
  136. package/dist/2.0/swagger-markdown/transformers/securityDefinitions.d.ts +6 -0
  137. package/dist/2.0/swagger-markdown/transformers/securityDefinitions.d.ts.map +1 -0
  138. package/dist/2.0/swagger-markdown/transformers/securityDefinitions.esm.js.map +1 -0
  139. package/dist/2.0/swagger-markdown/transformers/securityDefinitions.js.map +1 -0
  140. package/dist/2.0/type.d.ts +654 -0
  141. package/dist/2.0/type.d.ts.map +1 -0
  142. package/dist/2.0/utils.d.ts +79 -0
  143. package/dist/2.0/utils.d.ts.map +1 -0
  144. package/dist/{utils.esm.js → 2.0/utils.esm.js} +61 -89
  145. package/dist/2.0/utils.esm.js.map +1 -0
  146. package/dist/{utils.js → 2.0/utils.js} +65 -94
  147. package/dist/2.0/utils.js.map +1 -0
  148. package/dist/index.d.ts +1 -149
  149. package/dist/index.d.ts.map +1 -1
  150. package/dist/index.esm.js +5 -163
  151. package/dist/index.esm.js.map +1 -1
  152. package/dist/index.js +9 -169
  153. package/dist/index.js.map +1 -1
  154. package/package.json +5 -3
  155. package/dist/Doc/index.d.ts.map +0 -1
  156. package/dist/Doc/type.d.ts.map +0 -1
  157. package/dist/HandleError.d.ts.map +0 -1
  158. package/dist/HandleError.esm.js.map +0 -1
  159. package/dist/HandleError.js.map +0 -1
  160. package/dist/Layer.d.ts.map +0 -1
  161. package/dist/Layer.esm.js +0 -274
  162. package/dist/Layer.esm.js.map +0 -1
  163. package/dist/Layer.js +0 -276
  164. package/dist/Layer.js.map +0 -1
  165. package/dist/Middlewares.d.ts.map +0 -1
  166. package/dist/Middlewares.esm.js.map +0 -1
  167. package/dist/Middlewares.js.map +0 -1
  168. package/dist/handler.d.ts.map +0 -1
  169. package/dist/handler.esm.js +0 -171
  170. package/dist/handler.esm.js.map +0 -1
  171. package/dist/handler.js +0 -174
  172. package/dist/handler.js.map +0 -1
  173. package/dist/middleware.d.ts.map +0 -1
  174. package/dist/middleware.esm.js +0 -152
  175. package/dist/middleware.esm.js.map +0 -1
  176. package/dist/middleware.js +0 -155
  177. package/dist/middleware.js.map +0 -1
  178. package/dist/redocUi/index.d.ts.map +0 -1
  179. package/dist/redocUi/index.esm.js.map +0 -1
  180. package/dist/redocUi/index.js.map +0 -1
  181. package/dist/router.d.ts.map +0 -1
  182. package/dist/router.esm.js +0 -723
  183. package/dist/router.esm.js.map +0 -1
  184. package/dist/router.js +0 -744
  185. package/dist/router.js.map +0 -1
  186. package/dist/swagger-markdown/index.d.ts.map +0 -1
  187. package/dist/swagger-markdown/index.esm.js.map +0 -1
  188. package/dist/swagger-markdown/index.js.map +0 -1
  189. package/dist/swagger-markdown/lib/anchor.d.ts.map +0 -1
  190. package/dist/swagger-markdown/lib/anchor.esm.js.map +0 -1
  191. package/dist/swagger-markdown/lib/anchor.js.map +0 -1
  192. package/dist/swagger-markdown/lib/inArray.d.ts.map +0 -1
  193. package/dist/swagger-markdown/lib/inArray.esm.js.map +0 -1
  194. package/dist/swagger-markdown/lib/inArray.js.map +0 -1
  195. package/dist/swagger-markdown/models/schema.d.ts.map +0 -1
  196. package/dist/swagger-markdown/models/schema.esm.js.map +0 -1
  197. package/dist/swagger-markdown/models/schema.js.map +0 -1
  198. package/dist/swagger-markdown/transformers/contact.d.ts.map +0 -1
  199. package/dist/swagger-markdown/transformers/contact.esm.js.map +0 -1
  200. package/dist/swagger-markdown/transformers/contact.js.map +0 -1
  201. package/dist/swagger-markdown/transformers/dataTypes.d.ts.map +0 -1
  202. package/dist/swagger-markdown/transformers/dataTypes.esm.js.map +0 -1
  203. package/dist/swagger-markdown/transformers/dataTypes.js.map +0 -1
  204. package/dist/swagger-markdown/transformers/definitions.d.ts.map +0 -1
  205. package/dist/swagger-markdown/transformers/definitions.esm.js.map +0 -1
  206. package/dist/swagger-markdown/transformers/definitions.js.map +0 -1
  207. package/dist/swagger-markdown/transformers/externalDocs.d.ts.map +0 -1
  208. package/dist/swagger-markdown/transformers/externalDocs.esm.js.map +0 -1
  209. package/dist/swagger-markdown/transformers/externalDocs.js.map +0 -1
  210. package/dist/swagger-markdown/transformers/info.d.ts.map +0 -1
  211. package/dist/swagger-markdown/transformers/info.esm.js.map +0 -1
  212. package/dist/swagger-markdown/transformers/info.js.map +0 -1
  213. package/dist/swagger-markdown/transformers/license.d.ts.map +0 -1
  214. package/dist/swagger-markdown/transformers/license.esm.js.map +0 -1
  215. package/dist/swagger-markdown/transformers/license.js.map +0 -1
  216. package/dist/swagger-markdown/transformers/path.d.ts.map +0 -1
  217. package/dist/swagger-markdown/transformers/path.esm.js.map +0 -1
  218. package/dist/swagger-markdown/transformers/path.js.map +0 -1
  219. package/dist/swagger-markdown/transformers/pathParameters.d.ts.map +0 -1
  220. package/dist/swagger-markdown/transformers/pathParameters.esm.js.map +0 -1
  221. package/dist/swagger-markdown/transformers/pathParameters.js.map +0 -1
  222. package/dist/swagger-markdown/transformers/pathResponses.d.ts.map +0 -1
  223. package/dist/swagger-markdown/transformers/pathResponses.esm.js.map +0 -1
  224. package/dist/swagger-markdown/transformers/pathResponses.js.map +0 -1
  225. package/dist/swagger-markdown/transformers/security.d.ts.map +0 -1
  226. package/dist/swagger-markdown/transformers/security.esm.js.map +0 -1
  227. package/dist/swagger-markdown/transformers/security.js.map +0 -1
  228. package/dist/swagger-markdown/transformers/securityDefinitions.d.ts.map +0 -1
  229. package/dist/swagger-markdown/transformers/securityDefinitions.esm.js.map +0 -1
  230. package/dist/swagger-markdown/transformers/securityDefinitions.js.map +0 -1
  231. package/dist/type.d.ts.map +0 -1
  232. package/dist/utils.d.ts.map +0 -1
  233. package/dist/utils.esm.js.map +0 -1
  234. package/dist/utils.js.map +0 -1
  235. /package/dist/{Doc → 1.0/Doc}/index.d.ts +0 -0
  236. /package/dist/{Doc → 1.0/Doc}/type.d.ts +0 -0
  237. /package/dist/{HandleError.d.ts → 1.0/HandleError.d.ts} +0 -0
  238. /package/dist/{Layer.d.ts → 1.0/Layer.d.ts} +0 -0
  239. /package/dist/{Middlewares.d.ts → 1.0/Middlewares.d.ts} +0 -0
  240. /package/dist/{handler.d.ts → 1.0/handler.d.ts} +0 -0
  241. /package/dist/{middleware.d.ts → 1.0/middleware.d.ts} +0 -0
  242. /package/dist/{redocUi → 1.0/redocUi}/index.d.ts +0 -0
  243. /package/dist/{router.d.ts → 1.0/router.d.ts} +0 -0
  244. /package/dist/{swagger-markdown → 1.0/swagger-markdown}/index.d.ts +0 -0
  245. /package/dist/{swagger-markdown → 1.0/swagger-markdown}/lib/anchor.d.ts +0 -0
  246. /package/dist/{swagger-markdown → 1.0/swagger-markdown}/lib/inArray.d.ts +0 -0
  247. /package/dist/{swagger-markdown → 1.0/swagger-markdown}/models/schema.d.ts +0 -0
  248. /package/dist/{swagger-markdown → 1.0/swagger-markdown}/transformers/contact.d.ts +0 -0
  249. /package/dist/{swagger-markdown → 1.0/swagger-markdown}/transformers/dataTypes.d.ts +0 -0
  250. /package/dist/{swagger-markdown → 1.0/swagger-markdown}/transformers/definitions.d.ts +0 -0
  251. /package/dist/{swagger-markdown → 1.0/swagger-markdown}/transformers/externalDocs.d.ts +0 -0
  252. /package/dist/{swagger-markdown → 1.0/swagger-markdown}/transformers/info.d.ts +0 -0
  253. /package/dist/{swagger-markdown → 1.0/swagger-markdown}/transformers/license.d.ts +0 -0
  254. /package/dist/{swagger-markdown → 1.0/swagger-markdown}/transformers/path.d.ts +0 -0
  255. /package/dist/{swagger-markdown → 1.0/swagger-markdown}/transformers/pathParameters.d.ts +0 -0
  256. /package/dist/{swagger-markdown → 1.0/swagger-markdown}/transformers/pathResponses.d.ts +0 -0
  257. /package/dist/{swagger-markdown → 1.0/swagger-markdown}/transformers/security.d.ts +0 -0
  258. /package/dist/{swagger-markdown → 1.0/swagger-markdown}/transformers/securityDefinitions.d.ts +0 -0
  259. /package/dist/{type.d.ts → 1.0/type.d.ts} +0 -0
  260. /package/dist/{utils.d.ts → 1.0/utils.d.ts} +0 -0
  261. /package/dist/{HandleError.esm.js → 2.0/HandleError.esm.js} +0 -0
  262. /package/dist/{HandleError.js → 2.0/HandleError.js} +0 -0
  263. /package/dist/{swagger-markdown → 2.0/swagger-markdown}/lib/anchor.esm.js +0 -0
  264. /package/dist/{swagger-markdown → 2.0/swagger-markdown}/lib/anchor.js +0 -0
  265. /package/dist/{swagger-markdown → 2.0/swagger-markdown}/lib/inArray.esm.js +0 -0
  266. /package/dist/{swagger-markdown → 2.0/swagger-markdown}/lib/inArray.js +0 -0
  267. /package/dist/{swagger-markdown → 2.0/swagger-markdown}/models/schema.esm.js +0 -0
  268. /package/dist/{swagger-markdown → 2.0/swagger-markdown}/models/schema.js +0 -0
  269. /package/dist/{swagger-markdown → 2.0/swagger-markdown}/transformers/contact.esm.js +0 -0
  270. /package/dist/{swagger-markdown → 2.0/swagger-markdown}/transformers/contact.js +0 -0
  271. /package/dist/{swagger-markdown → 2.0/swagger-markdown}/transformers/dataTypes.esm.js +0 -0
  272. /package/dist/{swagger-markdown → 2.0/swagger-markdown}/transformers/dataTypes.js +0 -0
  273. /package/dist/{swagger-markdown → 2.0/swagger-markdown}/transformers/definitions.esm.js +0 -0
  274. /package/dist/{swagger-markdown → 2.0/swagger-markdown}/transformers/definitions.js +0 -0
  275. /package/dist/{swagger-markdown → 2.0/swagger-markdown}/transformers/externalDocs.esm.js +0 -0
  276. /package/dist/{swagger-markdown → 2.0/swagger-markdown}/transformers/externalDocs.js +0 -0
  277. /package/dist/{swagger-markdown → 2.0/swagger-markdown}/transformers/info.esm.js +0 -0
  278. /package/dist/{swagger-markdown → 2.0/swagger-markdown}/transformers/info.js +0 -0
  279. /package/dist/{swagger-markdown → 2.0/swagger-markdown}/transformers/license.esm.js +0 -0
  280. /package/dist/{swagger-markdown → 2.0/swagger-markdown}/transformers/license.js +0 -0
  281. /package/dist/{swagger-markdown → 2.0/swagger-markdown}/transformers/path.esm.js +0 -0
  282. /package/dist/{swagger-markdown → 2.0/swagger-markdown}/transformers/path.js +0 -0
  283. /package/dist/{swagger-markdown → 2.0/swagger-markdown}/transformers/pathParameters.esm.js +0 -0
  284. /package/dist/{swagger-markdown → 2.0/swagger-markdown}/transformers/pathParameters.js +0 -0
  285. /package/dist/{swagger-markdown → 2.0/swagger-markdown}/transformers/pathResponses.esm.js +0 -0
  286. /package/dist/{swagger-markdown → 2.0/swagger-markdown}/transformers/pathResponses.js +0 -0
  287. /package/dist/{swagger-markdown → 2.0/swagger-markdown}/transformers/security.esm.js +0 -0
  288. /package/dist/{swagger-markdown → 2.0/swagger-markdown}/transformers/security.js +0 -0
  289. /package/dist/{swagger-markdown → 2.0/swagger-markdown}/transformers/securityDefinitions.esm.js +0 -0
  290. /package/dist/{swagger-markdown → 2.0/swagger-markdown}/transformers/securityDefinitions.js +0 -0
@@ -0,0 +1,654 @@
1
+ import type * as core from "express-serve-static-core";
2
+ import type { NextFunction } from "express";
3
+ import type swaggerJSDoc from "swagger-jsdoc";
4
+ import type { Readable } from "stream";
5
+ type IsBad<T> = 0 extends 1 & T ? true : [T] extends [never] ? true : unknown extends T ? true : "" extends T ? true : string extends T ? true : false;
6
+ type Join<A, B> = IsBad<A> extends true ? B : IsBad<B> extends true ? A : A & B;
7
+ export type ExtractRouteParameters<Path extends string> = Extract<keyof core.RouteParameters<Path>, string>;
8
+ export type ParamsDictionary<P extends string = string> = {
9
+ [key in P]: string;
10
+ };
11
+ export interface Request<P extends string = string, ReqBody = {}, ReqQuery = core.Query, ResBody = any> extends core.Request<ParamsDictionary<P>, ResBody, ReqBody, ReqQuery, Record<string, any>> {
12
+ __executedMiddlewares__?: Set<any>;
13
+ clientIp?: string;
14
+ /**
15
+ * Controla a execução do middleware para a requisição atual.
16
+ * Útil para garantir que um middleware seja executado apenas uma vez, mesmo que seja
17
+ * aplicado em múltiplos níveis de rotas.
18
+ *
19
+ * @param {boolean} [isOnce=true] - Se `true`, o middleware não será executado novamente para a mesma requisição. Se `false`, permite que o middleware seja executado novamente.
20
+ *
21
+ * @example
22
+ * // Middleware que executa uma lógica apenas uma vez por requisição.
23
+ * const myMiddleware: MiddlewareFC = (req, res, next) => {
24
+ * // Garante que este bloco de código execute apenas uma vez.
25
+ * req.executeOnce?.();
26
+ *
27
+ * console.log("Este middleware só roda uma vez!");
28
+ * next();
29
+ * };
30
+ */
31
+ executeOnce?: (isOnce?: boolean) => void;
32
+ }
33
+ export type JoinRequest<A extends Request, B extends Request> = A extends Request<infer AP, infer AReqBody, infer AReqQuery, infer AResBody> & infer AReq ? B extends Request<infer BP, infer BReqBody, infer BReqQuery, infer BResBody> & infer BReq ? Request<Join<AP, BP>, Join<AReqBody, BReqBody>, Join<AReqQuery, BReqQuery>, Join<AResBody, BResBody>> & (AReq & BReq) : never : never;
34
+ export interface Response<ResBody = any> extends core.Response<ResBody, Record<string, any>> {
35
+ }
36
+ export type JoinResponse<A extends Response, B extends Response> = A extends Response<infer AResBody> ? (B extends Response<infer BResBody> ? Response<AResBody & BResBody> : never) : never;
37
+ export interface RequestHandler<Req extends Request = Request, Res extends Response = Response> {
38
+ (req: Req, res: Res, next: NextFunction): unknown;
39
+ }
40
+ export type { NextFunction };
41
+ export interface IHandler<Rq extends Request = Request, Rs extends Response = Response> extends RequestHandler<Rq, Rs> {
42
+ /**
43
+ * Adiciona um middleware ou handler à cadeia de execução, mesclando os tipos
44
+ * genéricos de request e response com os já acumulados.
45
+ *
46
+ * @typeParam Req - Tipo de request do handler sendo adicionado.
47
+ * @typeParam Res - Tipo de response do handler sendo adicionado.
48
+ * @param fn - Função handler ou instância de {@link IHandler} a ser encadeada.
49
+ * @returns Nova instância de {@link IHandler} com os tipos mesclados.
50
+ *
51
+ * @example
52
+ * app.get("/profile/:id")
53
+ * .handler((req, res, next) => {
54
+ * // middleware intermediário
55
+ * console.log(`Acessando perfil ${req.params.id}`);
56
+ * next();
57
+ * })
58
+ * .handler((req, res) => {
59
+ * res.json({ id: req.params.id });
60
+ * });
61
+ */
62
+ handler<Req extends Request = Request, Res extends Response = Response>(fn: RequestHandler<Req & Rq, Res & Rs> | IHandler<Req & Rq, Res & Rs>): IHandler<JoinRequest<Rq, Req>, JoinResponse<Rs, Res>>;
63
+ /**
64
+ * Anexa documentação OpenAPI/Swagger ao handler atual sem alterar o fluxo de execução.
65
+ * A documentação é mesclada na árvore interna e utilizada na geração do spec OpenAPI.
66
+ *
67
+ * @param operation - Objeto de operação OpenAPI (tags, summary, parameters, requestBody, etc.).
68
+ * @param components - Componentes OpenAPI adicionais (schemas, securitySchemes, etc.).
69
+ * @returns A mesma instância de {@link IHandler}, permitindo encadeamento contínuo.
70
+ *
71
+ * @example
72
+ * app.get("/users/:userId")
73
+ * .handler(authMiddleware)
74
+ * .doc({
75
+ * tags: ["Users"],
76
+ * summary: "Buscar usuário por ID",
77
+ * parameters: [
78
+ * { name: "userId", in: "path", required: true, schema: { type: "string" } },
79
+ * ],
80
+ * })
81
+ * .handler((req, res) => {
82
+ * res.json({ userId: req.params.userId });
83
+ * });
84
+ *
85
+ * @example
86
+ * // Documentação com componentes de segurança
87
+ * app.delete("/users/:id")
88
+ * .handler(authMiddleware)
89
+ * .doc(
90
+ * {
91
+ * tags: ["Users"],
92
+ * summary: "Remover usuário",
93
+ * security: [{ bearerAuth: [] }],
94
+ * },
95
+ * {
96
+ * securitySchemes: {
97
+ * bearerAuth: { type: "http", scheme: "bearer" },
98
+ * },
99
+ * },
100
+ * )
101
+ * .handler((req, res) => {
102
+ * res.sendStatus(204);
103
+ * });
104
+ */
105
+ doc(operation: MiddlewareFCDoc | swaggerJSDoc.Operation, components?: swaggerJSDoc.Components): IHandler<Rq, Rs>;
106
+ }
107
+ export interface IMiddleware<Rq extends Request = Request, Rs extends Response = Response> extends RequestHandler<Rq, Rs> {
108
+ /**
109
+ * Anexa documentação OpenAPI/Swagger ao middleware sem alterar o fluxo de execução.
110
+ * A documentação é mesclada na árvore interna quando o middleware é encadeado via
111
+ * `.handler()` em um {@link IHandler}.
112
+ *
113
+ * @param operation - Objeto de operação OpenAPI (security, parameters, requestBody, etc.).
114
+ * @param components - Componentes OpenAPI adicionais (schemas, securitySchemes, etc.).
115
+ * @returns A mesma instância de {@link IMiddleware}, permitindo encadeamento de `.doc()`.
116
+ *
117
+ * @example
118
+ * const authMiddleware = middleware((req: AuthRequest, res, next) => {
119
+ * next();
120
+ * }).doc({
121
+ * security: [{ bearerAuth: [] }],
122
+ * components: {
123
+ * securitySchemes: {
124
+ * bearerAuth: { type: "http", scheme: "bearer" },
125
+ * },
126
+ * },
127
+ * });
128
+ *
129
+ * @example
130
+ * // Documentação com parâmetros de header
131
+ * const apiKeyMiddleware = middleware((req, res, next) => {
132
+ * if (!req.headers["x-api-key"]) {
133
+ * res.status(401).json({ error: "API key required" });
134
+ * return;
135
+ * }
136
+ * next();
137
+ * }).doc({
138
+ * parameters: [
139
+ * { name: "x-api-key", in: "header", required: true, schema: { type: "string" } },
140
+ * ],
141
+ * });
142
+ */
143
+ doc(operation: MiddlewareFCDoc | swaggerJSDoc.Operation, components?: swaggerJSDoc.Components): IMiddleware<Rq, Rs>;
144
+ }
145
+ export type Methods = "all" | "get" | "post" | "put" | "delete" | "patch" | "options" | "head";
146
+ export type PathParams = string | RegExp | Array<string | RegExp>;
147
+ /**
148
+ * Interface que define a assinatura de um método HTTP no router (ex.: `.get()`, `.post()`, `.delete()`).
149
+ * Ao ser chamado com um caminho de rota, retorna um {@link IHandler} tipado com os parâmetros
150
+ * extraídos automaticamente da string de rota.
151
+ *
152
+ * @typeParam Method - O método HTTP associado (ex.: `"get"`, `"post"`, `"all"`).
153
+ *
154
+ * @example
155
+ * // Parâmetros de rota são inferidos automaticamente
156
+ * app.get("/users/:userId/posts/:postId")
157
+ * .handler((req, res) => {
158
+ * // req.params.userId e req.params.postId são inferidos como string
159
+ * res.json({ userId: req.params.userId, postId: req.params.postId });
160
+ * });
161
+ *
162
+ * @example
163
+ * // Com documentação OpenAPI inline
164
+ * app.post("/items", { tags: ["Items"], summary: "Criar item" })
165
+ * .handler((req, res) => {
166
+ * res.status(201).json({ id: 1 });
167
+ * });
168
+ */
169
+ export interface IRouterMatcher<Method extends Methods = any> {
170
+ /**
171
+ * Registra um handler para o método HTTP associado neste caminho de rota, retornando um {@link IHandler} com os tipos de parâmetros extraídos.
172
+ *
173
+ * @param path - Caminho de rota, que pode conter parâmetros nomeados (ex.: `"/users/:id"`).
174
+ * @param doc - Documentação OpenAPI/Swagger para a rota.
175
+ * @returns Instância de {@link IHandler} com os tipos de request e response adequados.
176
+ *
177
+ * @example
178
+ * app.get("/users/:userId")
179
+ * .handler((req, res) => {
180
+ * // req.params.userId é inferido como string
181
+ * res.json({ userId: req.params.userId });
182
+ * });
183
+ *
184
+ * @example
185
+ * // Com documentação OpenAPI inline
186
+ * app.post("/items", { tags: ["Items"], summary: "Criar item" })
187
+ * .handler((req, res) => {
188
+ * res.status(201).json({ id: 1 });
189
+ * });
190
+ */
191
+ <Path extends string, P extends string = ExtractRouteParameters<Path>>(path: Path, doc?: MiddlewareFCDoc): IHandler<Request<P>>;
192
+ /**
193
+ * Registra um handler para o método HTTP associado neste caminho de rota, retornando um {@link IHandler} com os tipos de parâmetros extraídos.
194
+ *
195
+ * @param path - Caminho de rota, que pode conter parâmetros nomeados (ex.: `"/users/:id"`).
196
+ * @param doc - Documentação OpenAPI/Swagger para a rota.
197
+ * @returns Instância de {@link IHandler} com os tipos de request e response adequados.
198
+ *
199
+ * @example
200
+ * app.get("/users/:userId", { tags: ["Users"], summary: "Buscar usuário por ID" })
201
+ * .handler((req, res) => {
202
+ * res.json({ userId: req.params.userId });
203
+ * });
204
+ *
205
+ * @example
206
+ * // Documentação com componentes de segurança
207
+ * app.delete("/users/:id", { security: [{ bearerAuth: [] }] }, {
208
+ * securitySchemes: {
209
+ * bearerAuth: { type: "http", scheme: "bearer" },
210
+ * },
211
+ * })
212
+ * .handler((req, res) => {
213
+ * res.sendStatus(204);
214
+ * });
215
+ */
216
+ (path: PathParams, doc?: MiddlewareFCDoc): IHandler;
217
+ }
218
+ /**
219
+ * Interface principal do router, que estende {@link RequestHandler} e expõe métodos HTTP,
220
+ * sub-rotas, middlewares e configuração de documentação OpenAPI/Swagger.
221
+ *
222
+ * Pode ser criado via `router()` e aninhado em outros routers ou em uma aplicação via `.route()` ou `.use()`.
223
+ *
224
+ * @example
225
+ * // Criar um router e definir rotas
226
+ * import { router } from "./2.0";
227
+ *
228
+ * const api = router();
229
+ *
230
+ * api.get("/users")
231
+ * .handler((req, res) => {
232
+ * res.json([{ name: "Alice" }]);
233
+ * })
234
+ * .doc({ tags: ["Users"], summary: "Listar usuários" });
235
+ *
236
+ * api.post("/users")
237
+ * .handler((req, res) => {
238
+ * res.status(201).json({ id: 1 });
239
+ * })
240
+ * .doc({ tags: ["Users"], summary: "Criar usuário" });
241
+ *
242
+ * @example
243
+ * // Aninhar routers com prefixo
244
+ * const v1 = router();
245
+ *
246
+ * v1.get("/test/route")
247
+ * .handler((req, res) => {
248
+ * res.send("Hello from v1!");
249
+ * })
250
+ * .doc({ tags: ["V1"], summary: "Rota de teste v1" });
251
+ *
252
+ * app.route("/v1", v1, {
253
+ * security: [{ bearerAuth: [] }],
254
+ * responses: {
255
+ * "400": { description: "Dados inválidos" },
256
+ * "404": { description: "Não encontrado" },
257
+ * },
258
+ * });
259
+ *
260
+ * @example
261
+ * // Configurar documentação Swagger
262
+ * app.defineSwagger({
263
+ * openapi: "3.0.0",
264
+ * info: { title: "My API", version: "1.0.0" },
265
+ * defaultResponses: {
266
+ * 400: { description: "Dados inválidos" },
267
+ * 401: { description: "Falha na autenticação" },
268
+ * 500: { description: "Erro interno do servidor" },
269
+ * },
270
+ * });
271
+ */
272
+ export interface IRouter extends RequestHandler {
273
+ /** Mapeia um callback para parâmetros de rota nomeados, equivalente a `app.param()` do Express. */
274
+ "param": core.Application["param"];
275
+ /** Registra um handler para todos os métodos HTTP no caminho especificado. */
276
+ "all": IRouterMatcher<"all">;
277
+ /** Registra um handler para requisições GET. */
278
+ "get": IRouterMatcher<"get">;
279
+ /** Registra um handler para requisições POST. */
280
+ "post": IRouterMatcher<"post">;
281
+ /** Registra um handler para requisições PUT. */
282
+ "put": IRouterMatcher<"put">;
283
+ /** Registra um handler para requisições DELETE. */
284
+ "delete": IRouterMatcher<"delete">;
285
+ /** Registra um handler para requisições PATCH. */
286
+ "patch": IRouterMatcher<"patch">;
287
+ /** Registra um handler para requisições OPTIONS. */
288
+ "options": IRouterMatcher<"options">;
289
+ /** Registra um handler para requisições HEAD. */
290
+ "head": IRouterMatcher<"head">;
291
+ "checkout": IRouterMatcher;
292
+ "copy": IRouterMatcher;
293
+ "lock": IRouterMatcher;
294
+ "merge": IRouterMatcher;
295
+ "mkactivity": IRouterMatcher;
296
+ "mkcol": IRouterMatcher;
297
+ "move": IRouterMatcher;
298
+ "m-search": IRouterMatcher;
299
+ "notify": IRouterMatcher;
300
+ "purge": IRouterMatcher;
301
+ "report": IRouterMatcher;
302
+ "search": IRouterMatcher;
303
+ "subscribe": IRouterMatcher;
304
+ "trace": IRouterMatcher;
305
+ "unlock": IRouterMatcher;
306
+ "unsubscribe": IRouterMatcher;
307
+ /** Router pai ao qual este router está aninhado, ou `null` se for o router raiz. */
308
+ "parent": IRouter | null;
309
+ /** Caminho de prefixo deste router dentro do router pai. */
310
+ "path": string;
311
+ /**
312
+ * Cria ou anexa um sub-router em um prefixo de rota, permitindo modularizar a aplicação.
313
+ *
314
+ * @param prefix - Prefixo de caminho para o sub-router.
315
+ * @param router - Instância de {@link IRouter} a ser aninhada (opcional).
316
+ * @param doc - Documentação OpenAPI aplicada a todas as rotas do sub-router.
317
+ * @returns O sub-router criado ou anexado.
318
+ *
319
+ * @example
320
+ * // Criar sub-router inline
321
+ * const usersRoute = app.route("/users");
322
+ * usersRoute.get("/").handler((req, res) => res.json([]));
323
+ *
324
+ * @example
325
+ * // Anexar router existente com documentação
326
+ * const v1 = router();
327
+ * v1.get("/items").handler((req, res) => res.json([]));
328
+ *
329
+ * app.route("/v1", v1, {
330
+ * security: [{ bearerAuth: [] }],
331
+ * });
332
+ */
333
+ route<T extends string>(prefix: T, doc?: MiddlewareFCDoc): IRouter;
334
+ route<T extends string>(prefix: T, router: IRouter, doc?: MiddlewareFCDoc): IRouter;
335
+ route(router: IRouter, doc?: MiddlewareFCDoc): IRouter;
336
+ /**
337
+ * Registra um middleware, handler ou sub-router no caminho especificado.
338
+ * Quando chamado apenas com prefixo e sem handler, retorna um {@link IHandler} encadeável.
339
+ *
340
+ * @param prefix - Prefixo de caminho (opcional).
341
+ * @param handler - Instância de {@link IRouter}, {@link RequestHandler} ou middleware.
342
+ * @param doc - Documentação OpenAPI para o middleware.
343
+ *
344
+ * @example
345
+ * // Middleware global sem prefixo
346
+ * app.use((req, res, next) => {
347
+ * console.log(`${req.method} ${req.url}`);
348
+ * next();
349
+ * });
350
+ *
351
+ * @example
352
+ * // Sub-router com prefixo
353
+ * const apiRouter = router();
354
+ * app.use("/api", apiRouter);
355
+ *
356
+ * @example
357
+ * // Handler encadeável com prefixo
358
+ * app.use("/health")
359
+ * .handler((req, res) => {
360
+ * res.json({ status: "ok" });
361
+ * });
362
+ */
363
+ use<T extends string, P extends string = ExtractRouteParameters<T>>(prefix: T, doc?: MiddlewareFCDoc): IHandler<Request<P>>;
364
+ use<T extends string, P extends string = ExtractRouteParameters<T>>(prefix: T, handler: IRouter | RequestHandler, doc?: MiddlewareFCDoc): void;
365
+ use(handler: IRouter | RequestHandler, doc?: MiddlewareFCDoc): void;
366
+ /**
367
+ * Define as opções de documentação Swagger/OpenAPI para este router.
368
+ * Habilita a geração automática de spec OpenAPI e endpoints de documentação
369
+ * (Swagger UI, Markdown, etc.).
370
+ *
371
+ * @param options - Configuração OpenAPI 3.0 com opções adicionais como
372
+ * `defaultResponses`, `path` e `targets` para snippets.
373
+ *
374
+ * @example
375
+ * app.defineSwagger({
376
+ * openapi: "3.0.0",
377
+ * info: { title: "My API", version: "1.0.0" },
378
+ * path: "/doc",
379
+ * defaultResponses: {
380
+ * 400: { description: "Dados inválidos" },
381
+ * 401: { description: "Falha na autenticação" },
382
+ * 500: { description: "Erro interno do servidor" },
383
+ * },
384
+ * targets: ["shell_curl", "javascript_xhr", "node_native"],
385
+ * });
386
+ */
387
+ defineSwagger(options: SwaggerOptions): void;
388
+ /**
389
+ * Retorna a especificação Swagger/OpenAPI gerada a partir de todas as rotas,
390
+ * handlers e documentações registradas neste router.
391
+ *
392
+ * @returns Objeto de opções compatível com `swagger-jsdoc`.
393
+ *
394
+ * @example
395
+ * const spec = app.getSwagger();
396
+ * console.log(JSON.stringify(spec, null, 2));
397
+ */
398
+ getSwagger(): swaggerJSDoc.Options;
399
+ }
400
+ /**
401
+ * Define a estrutura da documentação Swagger/OpenAPI que pode ser anexada a um middleware.
402
+ * Permite que middlewares contribuam com definições de segurança, parâmetros, etc., que são
403
+ * mescladas com a documentação da rota final.
404
+ *
405
+ * @see MiddlewareFC
406
+ * @example
407
+ * const authMiddleware: MiddlewareFC = (req, res, next) => { next(); };
408
+ * authMiddleware.doc = {
409
+ * security: [{ BearerAuth: [] }],
410
+ * components: {
411
+ * securitySchemes: { BearerAuth: { type: "http", scheme: "bearer" } }
412
+ * }
413
+ * };
414
+ */
415
+ export type MiddlewareFCDoc = swaggerJSDoc.Operation & {
416
+ components?: swaggerJSDoc.Components;
417
+ };
418
+ export type SnippetTargets = "c_libcurl" | "csharp_restsharp" | "csharp_httpclient" | "go_native" | "java_okhttp" | "java_unirest" | "javascript_jquery" | "javascript_xhr" | "node_native" | "node_request" | "node_unirest" | "objc_nsurlsession" | "ocaml_cohttp" | "php_curl" | "php_http1" | "php_http2" | "python_python3" | "python_requests" | "ruby_native" | "shell_curl" | "shell_httpie" | "shell_wget" | "swift_nsurlsession";
419
+ export interface SwaggerOptions extends swaggerJSDoc.OAS3Definition {
420
+ path?: string;
421
+ defaultResponses?: swaggerJSDoc.Responses;
422
+ targets?: SnippetTargets[];
423
+ }
424
+ export interface IStackFrame {
425
+ functionName: string;
426
+ filePath: string;
427
+ dir: string;
428
+ lineNumber: number;
429
+ columnNumber: number;
430
+ }
431
+ export interface IChildrenDoc {
432
+ stackFrame: IStackFrame;
433
+ operation: swaggerJSDoc.Operation;
434
+ components: swaggerJSDoc.Components;
435
+ }
436
+ export interface IParentDoc extends IChildrenDoc {
437
+ }
438
+ export interface ITreeDoc {
439
+ method?: Methods;
440
+ path?: string;
441
+ parent: IParentDoc | SwaggerOptions | null;
442
+ children: (IChildrenDoc | ITreeDoc)[];
443
+ }
444
+ export interface IStackLog {
445
+ time: Date;
446
+ level: "ERROR" | "WARN" | "INFO" | "DEBUG";
447
+ name: string;
448
+ message: string;
449
+ source?: string;
450
+ statusCode: number;
451
+ duration: number;
452
+ meta?: string;
453
+ }
454
+ export interface IStacksOptions {
455
+ /** Caminho de rota de empilhamento dos logs */
456
+ path?: string;
457
+ /** Limite máximo de logs a serem empilhadas */
458
+ limit?: number;
459
+ /** Caminho base para o arquivo dos logs empilhados */
460
+ filePath?: string;
461
+ beforeStack?(...stacks: IStackLog[]): Array<IStackLog | string | Error>;
462
+ }
463
+ /**
464
+ * Interface principal da aplicação, estende {@link IRouter} com capacidades de servidor HTTP,
465
+ * configuração do Express e sistema de logging por pilha de stacks.
466
+ *
467
+ * Criada pela função `create()` exportada em `create.ts`, que encapsula uma instância Express
468
+ * com roteamento tipado, documentação OpenAPI e rastreamento de requisições.
469
+ *
470
+ * @example
471
+ * // Criar aplicação e iniciar servidor
472
+ * import { create } from "./2.0";
473
+ *
474
+ * const app = create();
475
+ *
476
+ * app.get("/hello/:name")
477
+ * .handler((req, res) => {
478
+ * res.send(`Hello, ${req.params.name}!`);
479
+ * });
480
+ *
481
+ * app.listen(3000, () => {
482
+ * console.log("Server is running on http://localhost:3000");
483
+ * });
484
+ *
485
+ * @example
486
+ * // Aplicação completa com sub-routers, Swagger e stacks
487
+ * const app = create();
488
+ *
489
+ * const v1 = router();
490
+ * v1.get("/users")
491
+ * .handler((req, res) => res.json([]))
492
+ * .doc({ tags: ["Users"], summary: "Listar usuários" });
493
+ *
494
+ * app.route("/v1", v1);
495
+ *
496
+ * app.defineSwagger({
497
+ * openapi: "3.0.0",
498
+ * info: { title: "My API", version: "1.0.0" },
499
+ * });
500
+ *
501
+ * app.defineStacks({
502
+ * path: "/stacks",
503
+ * limit: 200,
504
+ * filePath: "./logs/stacks.log",
505
+ * });
506
+ *
507
+ * app.listen(8080);
508
+ */
509
+ export interface IApplication extends IRouter {
510
+ /**
511
+ * Inicia o servidor HTTP escutando na porta especificada, equivalente a `app.listen()` do Express.
512
+ *
513
+ * @example
514
+ * app.listen(3000, () => {
515
+ * console.log("Server is running on http://localhost:3000");
516
+ * });
517
+ *
518
+ * @example
519
+ * // Com host específico
520
+ * app.listen(8080, "0.0.0.0", () => {
521
+ * console.log("Server is running on http://0.0.0.0:8080");
522
+ * });
523
+ */
524
+ listen: core.Application["listen"];
525
+ /**
526
+ * Desabilita a configuração `setting`. Equivalente a `app.set(setting, false)`.
527
+ *
528
+ * @example
529
+ * app.disable("x-powered-by");
530
+ */
531
+ disable: core.Application["disable"];
532
+ /**
533
+ * Habilita a configuração `setting`. Equivalente a `app.set(setting, true)`.
534
+ *
535
+ * @example
536
+ * app.enable("trust proxy");
537
+ */
538
+ enable: core.Application["enable"];
539
+ /**
540
+ * Retorna `true` se a configuração `setting` está desabilitada.
541
+ *
542
+ * @example
543
+ * if (app.disabled("x-powered-by")) {
544
+ * console.log("x-powered-by está desabilitado");
545
+ * }
546
+ */
547
+ disabled: core.Application["disabled"];
548
+ /**
549
+ * Retorna `true` se a configuração `setting` está habilitada.
550
+ *
551
+ * @example
552
+ * if (app.enabled("trust proxy")) {
553
+ * console.log("trust proxy está habilitado");
554
+ * }
555
+ */
556
+ enabled: core.Application["enabled"];
557
+ /**
558
+ * Registra uma engine de template para a extensão de arquivo especificada.
559
+ *
560
+ * @example
561
+ * app.engine("html", require("ejs").renderFile);
562
+ */
563
+ engine: core.Application["engine"];
564
+ /**
565
+ * Mapeia um callback para parâmetros de rota nomeados.
566
+ *
567
+ * @example
568
+ * app.param("userId", (req, res, next, id) => {
569
+ * console.log(`Parâmetro userId: ${id}`);
570
+ * next();
571
+ * });
572
+ */
573
+ param: core.Application["param"];
574
+ /**
575
+ * Renderiza uma view e envia a string HTML resultante ao cliente.
576
+ *
577
+ * @example
578
+ * app.render("index", { title: "Home" }, (err, html) => {
579
+ * if (err) console.error(err);
580
+ * console.log(html);
581
+ * });
582
+ */
583
+ render: core.Application["render"];
584
+ /**
585
+ * Retorna todos os logs de stack registrados, lidos a partir do arquivo de log configurado.
586
+ *
587
+ * @returns Array de {@link IStackLog} com os registros de requisições.
588
+ *
589
+ * @example
590
+ * const stacks = app.getStacks();
591
+ * console.log(`Total de logs: ${stacks.length}`);
592
+ * stacks.forEach((log) => {
593
+ * console.log(`[${log.level}] ${log.name} - ${log.message} (${log.duration}ms)`);
594
+ * });
595
+ */
596
+ getStacks(): IStackLog[];
597
+ /**
598
+ * Configura o sistema de logging por pilha de stacks, que registra informações
599
+ * sobre cada requisição (tempo, status, duração, etc.) em um arquivo de log.
600
+ *
601
+ * @param options - Opções de configuração do sistema de stacks.
602
+ * @returns Objeto com o caminho da rota de visualização dos stacks.
603
+ *
604
+ * @example
605
+ * const { stacksPath } = app.defineStacks({
606
+ * path: "/stacks",
607
+ * limit: 100,
608
+ * filePath: "./logs/stacks.log",
609
+ * beforeStack(...stacks) {
610
+ * // Filtrar logs antes de salvar
611
+ * return stacks.filter((s) => typeof s !== "string" && s.level === "ERROR");
612
+ * },
613
+ * });
614
+ *
615
+ * console.log(`Stacks disponíveis em: ${stacksPath}`);
616
+ */
617
+ defineStacks(options?: IStacksOptions): {
618
+ stacksPath: string;
619
+ };
620
+ }
621
+ export interface FileInfo {
622
+ /** Name of the form field associated with this file. */
623
+ fieldname: string;
624
+ /** Name of the file on the uploader's computer. */
625
+ originalname: string;
626
+ /**
627
+ * Value of the `Content-Transfer-Encoding` header for this file.
628
+ * @deprecated since July 2015
629
+ * @see RFC 7578, Section 4.7
630
+ */
631
+ encoding: string;
632
+ /** Value of the `Content-Type` header for this file. */
633
+ mimetype: string;
634
+ /** Size of the file in bytes. */
635
+ size: number;
636
+ /**
637
+ * A readable stream of this file. Only available to the `_handleFile`
638
+ * callback for custom `StorageEngine`s.
639
+ */
640
+ stream: Readable;
641
+ /** `DiskStorage` only: Directory to which this file has been uploaded. */
642
+ destination: string;
643
+ /** `DiskStorage` only: Name of this file within `destination`. */
644
+ filename: string;
645
+ /** `DiskStorage` only: Full path to the uploaded file. */
646
+ path: string;
647
+ /** `MemoryStorage` only: A Buffer containing the entire file. */
648
+ buffer: Buffer;
649
+ }
650
+ export interface FilesRequest extends Request {
651
+ file: FileInfo;
652
+ files: FileInfo[];
653
+ }
654
+ //# sourceMappingURL=type.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"type.d.ts","sourceRoot":"","sources":["../../src/2.0/type.ts"],"names":[],"mappings":"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"}