@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.
- package/README.md +956 -505
- package/dist/1.0/Doc/index.d.ts.map +1 -0
- package/dist/1.0/Doc/type.d.ts.map +1 -0
- package/dist/1.0/HandleError.d.ts.map +1 -0
- package/dist/1.0/Layer.d.ts.map +1 -0
- package/dist/1.0/Middlewares.d.ts.map +1 -0
- package/dist/1.0/handler.d.ts.map +1 -0
- package/dist/1.0/index.d.ts +150 -0
- package/dist/1.0/index.d.ts.map +1 -0
- package/dist/1.0/middleware.d.ts.map +1 -0
- package/dist/1.0/redocUi/index.d.ts.map +1 -0
- package/dist/1.0/router.d.ts.map +1 -0
- package/dist/1.0/swagger-markdown/index.d.ts.map +1 -0
- package/dist/1.0/swagger-markdown/lib/anchor.d.ts.map +1 -0
- package/dist/1.0/swagger-markdown/lib/inArray.d.ts.map +1 -0
- package/dist/1.0/swagger-markdown/models/schema.d.ts.map +1 -0
- package/dist/1.0/swagger-markdown/transformers/contact.d.ts.map +1 -0
- package/dist/1.0/swagger-markdown/transformers/dataTypes.d.ts.map +1 -0
- package/dist/1.0/swagger-markdown/transformers/definitions.d.ts.map +1 -0
- package/dist/1.0/swagger-markdown/transformers/externalDocs.d.ts.map +1 -0
- package/dist/1.0/swagger-markdown/transformers/info.d.ts.map +1 -0
- package/dist/1.0/swagger-markdown/transformers/license.d.ts.map +1 -0
- package/dist/1.0/swagger-markdown/transformers/path.d.ts.map +1 -0
- package/dist/1.0/swagger-markdown/transformers/pathParameters.d.ts.map +1 -0
- package/dist/1.0/swagger-markdown/transformers/pathResponses.d.ts.map +1 -0
- package/dist/1.0/swagger-markdown/transformers/security.d.ts.map +1 -0
- package/dist/1.0/swagger-markdown/transformers/securityDefinitions.d.ts.map +1 -0
- package/dist/1.0/type.d.ts.map +1 -0
- package/dist/1.0/utils.d.ts.map +1 -0
- package/dist/2.0/HandleError.d.ts +127 -0
- package/dist/2.0/HandleError.d.ts.map +1 -0
- package/dist/2.0/HandleError.esm.js.map +1 -0
- package/dist/2.0/HandleError.js.map +1 -0
- package/dist/2.0/Middlewares.d.ts +178 -0
- package/dist/2.0/Middlewares.d.ts.map +1 -0
- package/dist/{Middlewares.esm.js → 2.0/Middlewares.esm.js} +5 -5
- package/dist/2.0/Middlewares.esm.js.map +1 -0
- package/dist/{Middlewares.js → 2.0/Middlewares.js} +5 -5
- package/dist/2.0/Middlewares.js.map +1 -0
- package/dist/2.0/analyzeSwagger.d.ts +7 -0
- package/dist/2.0/analyzeSwagger.d.ts.map +1 -0
- package/dist/2.0/analyzeSwagger.esm.js +432 -0
- package/dist/2.0/analyzeSwagger.esm.js.map +1 -0
- package/dist/2.0/analyzeSwagger.js +435 -0
- package/dist/2.0/analyzeSwagger.js.map +1 -0
- package/dist/2.0/create.d.ts +75 -0
- package/dist/2.0/create.d.ts.map +1 -0
- package/dist/2.0/create.esm.js +321 -0
- package/dist/2.0/create.esm.js.map +1 -0
- package/dist/2.0/create.js +323 -0
- package/dist/2.0/create.js.map +1 -0
- package/dist/2.0/handler.d.ts +149 -0
- package/dist/2.0/handler.d.ts.map +1 -0
- package/dist/2.0/handler.esm.js +188 -0
- package/dist/2.0/handler.esm.js.map +1 -0
- package/dist/2.0/handler.js +191 -0
- package/dist/2.0/handler.js.map +1 -0
- package/dist/2.0/index.d.ts +7 -0
- package/dist/2.0/index.d.ts.map +1 -0
- package/dist/2.0/redocUi/index.d.ts +4 -0
- package/dist/2.0/redocUi/index.d.ts.map +1 -0
- package/dist/{redocUi → 2.0/redocUi}/index.esm.js +1 -1
- package/dist/2.0/redocUi/index.esm.js.map +1 -0
- package/dist/{redocUi → 2.0/redocUi}/index.js +1 -1
- package/dist/2.0/redocUi/index.js.map +1 -0
- package/dist/2.0/renderChainDocs.d.ts +3 -0
- package/dist/2.0/renderChainDocs.d.ts.map +1 -0
- package/dist/2.0/renderChainDocs.esm.js +118 -0
- package/dist/2.0/renderChainDocs.esm.js.map +1 -0
- package/dist/2.0/renderChainDocs.js +120 -0
- package/dist/2.0/renderChainDocs.js.map +1 -0
- package/dist/2.0/router.d.ts +73 -0
- package/dist/2.0/router.d.ts.map +1 -0
- package/dist/2.0/router.esm.js +302 -0
- package/dist/2.0/router.esm.js.map +1 -0
- package/dist/2.0/router.js +304 -0
- package/dist/2.0/router.js.map +1 -0
- package/dist/2.0/swagger-markdown/index.d.ts +10 -0
- package/dist/2.0/swagger-markdown/index.d.ts.map +1 -0
- package/dist/{swagger-markdown → 2.0/swagger-markdown}/index.esm.js +1 -1
- package/dist/2.0/swagger-markdown/index.esm.js.map +1 -0
- package/dist/{swagger-markdown → 2.0/swagger-markdown}/index.js +1 -1
- package/dist/2.0/swagger-markdown/index.js.map +1 -0
- package/dist/2.0/swagger-markdown/lib/anchor.d.ts +6 -0
- package/dist/2.0/swagger-markdown/lib/anchor.d.ts.map +1 -0
- package/dist/2.0/swagger-markdown/lib/anchor.esm.js.map +1 -0
- package/dist/2.0/swagger-markdown/lib/anchor.js.map +1 -0
- package/dist/2.0/swagger-markdown/lib/inArray.d.ts +9 -0
- package/dist/2.0/swagger-markdown/lib/inArray.d.ts.map +1 -0
- package/dist/2.0/swagger-markdown/lib/inArray.esm.js.map +1 -0
- package/dist/2.0/swagger-markdown/lib/inArray.js.map +1 -0
- package/dist/2.0/swagger-markdown/models/schema.d.ts +28 -0
- package/dist/2.0/swagger-markdown/models/schema.d.ts.map +1 -0
- package/dist/2.0/swagger-markdown/models/schema.esm.js.map +1 -0
- package/dist/2.0/swagger-markdown/models/schema.js.map +1 -0
- package/dist/2.0/swagger-markdown/transformers/contact.d.ts +8 -0
- package/dist/2.0/swagger-markdown/transformers/contact.d.ts.map +1 -0
- package/dist/2.0/swagger-markdown/transformers/contact.esm.js.map +1 -0
- package/dist/2.0/swagger-markdown/transformers/contact.js.map +1 -0
- package/dist/2.0/swagger-markdown/transformers/dataTypes.d.ts +9 -0
- package/dist/2.0/swagger-markdown/transformers/dataTypes.d.ts.map +1 -0
- package/dist/2.0/swagger-markdown/transformers/dataTypes.esm.js.map +1 -0
- package/dist/2.0/swagger-markdown/transformers/dataTypes.js.map +1 -0
- package/dist/2.0/swagger-markdown/transformers/definitions.d.ts +14 -0
- package/dist/2.0/swagger-markdown/transformers/definitions.d.ts.map +1 -0
- package/dist/2.0/swagger-markdown/transformers/definitions.esm.js.map +1 -0
- package/dist/2.0/swagger-markdown/transformers/definitions.js.map +1 -0
- package/dist/2.0/swagger-markdown/transformers/externalDocs.d.ts +4 -0
- package/dist/2.0/swagger-markdown/transformers/externalDocs.d.ts.map +1 -0
- package/dist/2.0/swagger-markdown/transformers/externalDocs.esm.js.map +1 -0
- package/dist/2.0/swagger-markdown/transformers/externalDocs.js.map +1 -0
- package/dist/2.0/swagger-markdown/transformers/info.d.ts +11 -0
- package/dist/2.0/swagger-markdown/transformers/info.d.ts.map +1 -0
- package/dist/2.0/swagger-markdown/transformers/info.esm.js.map +1 -0
- package/dist/2.0/swagger-markdown/transformers/info.js.map +1 -0
- package/dist/2.0/swagger-markdown/transformers/license.d.ts +8 -0
- package/dist/2.0/swagger-markdown/transformers/license.d.ts.map +1 -0
- package/dist/2.0/swagger-markdown/transformers/license.esm.js.map +1 -0
- package/dist/2.0/swagger-markdown/transformers/license.js.map +1 -0
- package/dist/2.0/swagger-markdown/transformers/path.d.ts +9 -0
- package/dist/2.0/swagger-markdown/transformers/path.d.ts.map +1 -0
- package/dist/2.0/swagger-markdown/transformers/path.esm.js.map +1 -0
- package/dist/2.0/swagger-markdown/transformers/path.js.map +1 -0
- package/dist/2.0/swagger-markdown/transformers/pathParameters.d.ts +4 -0
- package/dist/2.0/swagger-markdown/transformers/pathParameters.d.ts.map +1 -0
- package/dist/2.0/swagger-markdown/transformers/pathParameters.esm.js.map +1 -0
- package/dist/2.0/swagger-markdown/transformers/pathParameters.js.map +1 -0
- package/dist/2.0/swagger-markdown/transformers/pathResponses.d.ts +9 -0
- package/dist/2.0/swagger-markdown/transformers/pathResponses.d.ts.map +1 -0
- package/dist/2.0/swagger-markdown/transformers/pathResponses.esm.js.map +1 -0
- package/dist/2.0/swagger-markdown/transformers/pathResponses.js.map +1 -0
- package/dist/2.0/swagger-markdown/transformers/security.d.ts +4 -0
- package/dist/2.0/swagger-markdown/transformers/security.d.ts.map +1 -0
- package/dist/2.0/swagger-markdown/transformers/security.esm.js.map +1 -0
- package/dist/2.0/swagger-markdown/transformers/security.js.map +1 -0
- package/dist/2.0/swagger-markdown/transformers/securityDefinitions.d.ts +6 -0
- package/dist/2.0/swagger-markdown/transformers/securityDefinitions.d.ts.map +1 -0
- package/dist/2.0/swagger-markdown/transformers/securityDefinitions.esm.js.map +1 -0
- package/dist/2.0/swagger-markdown/transformers/securityDefinitions.js.map +1 -0
- package/dist/2.0/type.d.ts +654 -0
- package/dist/2.0/type.d.ts.map +1 -0
- package/dist/2.0/utils.d.ts +79 -0
- package/dist/2.0/utils.d.ts.map +1 -0
- package/dist/{utils.esm.js → 2.0/utils.esm.js} +61 -89
- package/dist/2.0/utils.esm.js.map +1 -0
- package/dist/{utils.js → 2.0/utils.js} +65 -94
- package/dist/2.0/utils.js.map +1 -0
- package/dist/index.d.ts +1 -149
- package/dist/index.d.ts.map +1 -1
- package/dist/index.esm.js +5 -163
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +9 -169
- package/dist/index.js.map +1 -1
- package/package.json +5 -3
- package/dist/Doc/index.d.ts.map +0 -1
- package/dist/Doc/type.d.ts.map +0 -1
- package/dist/HandleError.d.ts.map +0 -1
- package/dist/HandleError.esm.js.map +0 -1
- package/dist/HandleError.js.map +0 -1
- package/dist/Layer.d.ts.map +0 -1
- package/dist/Layer.esm.js +0 -274
- package/dist/Layer.esm.js.map +0 -1
- package/dist/Layer.js +0 -276
- package/dist/Layer.js.map +0 -1
- package/dist/Middlewares.d.ts.map +0 -1
- package/dist/Middlewares.esm.js.map +0 -1
- package/dist/Middlewares.js.map +0 -1
- package/dist/handler.d.ts.map +0 -1
- package/dist/handler.esm.js +0 -171
- package/dist/handler.esm.js.map +0 -1
- package/dist/handler.js +0 -174
- package/dist/handler.js.map +0 -1
- package/dist/middleware.d.ts.map +0 -1
- package/dist/middleware.esm.js +0 -152
- package/dist/middleware.esm.js.map +0 -1
- package/dist/middleware.js +0 -155
- package/dist/middleware.js.map +0 -1
- package/dist/redocUi/index.d.ts.map +0 -1
- package/dist/redocUi/index.esm.js.map +0 -1
- package/dist/redocUi/index.js.map +0 -1
- package/dist/router.d.ts.map +0 -1
- package/dist/router.esm.js +0 -723
- package/dist/router.esm.js.map +0 -1
- package/dist/router.js +0 -744
- package/dist/router.js.map +0 -1
- package/dist/swagger-markdown/index.d.ts.map +0 -1
- package/dist/swagger-markdown/index.esm.js.map +0 -1
- package/dist/swagger-markdown/index.js.map +0 -1
- package/dist/swagger-markdown/lib/anchor.d.ts.map +0 -1
- package/dist/swagger-markdown/lib/anchor.esm.js.map +0 -1
- package/dist/swagger-markdown/lib/anchor.js.map +0 -1
- package/dist/swagger-markdown/lib/inArray.d.ts.map +0 -1
- package/dist/swagger-markdown/lib/inArray.esm.js.map +0 -1
- package/dist/swagger-markdown/lib/inArray.js.map +0 -1
- package/dist/swagger-markdown/models/schema.d.ts.map +0 -1
- package/dist/swagger-markdown/models/schema.esm.js.map +0 -1
- package/dist/swagger-markdown/models/schema.js.map +0 -1
- package/dist/swagger-markdown/transformers/contact.d.ts.map +0 -1
- package/dist/swagger-markdown/transformers/contact.esm.js.map +0 -1
- package/dist/swagger-markdown/transformers/contact.js.map +0 -1
- package/dist/swagger-markdown/transformers/dataTypes.d.ts.map +0 -1
- package/dist/swagger-markdown/transformers/dataTypes.esm.js.map +0 -1
- package/dist/swagger-markdown/transformers/dataTypes.js.map +0 -1
- package/dist/swagger-markdown/transformers/definitions.d.ts.map +0 -1
- package/dist/swagger-markdown/transformers/definitions.esm.js.map +0 -1
- package/dist/swagger-markdown/transformers/definitions.js.map +0 -1
- package/dist/swagger-markdown/transformers/externalDocs.d.ts.map +0 -1
- package/dist/swagger-markdown/transformers/externalDocs.esm.js.map +0 -1
- package/dist/swagger-markdown/transformers/externalDocs.js.map +0 -1
- package/dist/swagger-markdown/transformers/info.d.ts.map +0 -1
- package/dist/swagger-markdown/transformers/info.esm.js.map +0 -1
- package/dist/swagger-markdown/transformers/info.js.map +0 -1
- package/dist/swagger-markdown/transformers/license.d.ts.map +0 -1
- package/dist/swagger-markdown/transformers/license.esm.js.map +0 -1
- package/dist/swagger-markdown/transformers/license.js.map +0 -1
- package/dist/swagger-markdown/transformers/path.d.ts.map +0 -1
- package/dist/swagger-markdown/transformers/path.esm.js.map +0 -1
- package/dist/swagger-markdown/transformers/path.js.map +0 -1
- package/dist/swagger-markdown/transformers/pathParameters.d.ts.map +0 -1
- package/dist/swagger-markdown/transformers/pathParameters.esm.js.map +0 -1
- package/dist/swagger-markdown/transformers/pathParameters.js.map +0 -1
- package/dist/swagger-markdown/transformers/pathResponses.d.ts.map +0 -1
- package/dist/swagger-markdown/transformers/pathResponses.esm.js.map +0 -1
- package/dist/swagger-markdown/transformers/pathResponses.js.map +0 -1
- package/dist/swagger-markdown/transformers/security.d.ts.map +0 -1
- package/dist/swagger-markdown/transformers/security.esm.js.map +0 -1
- package/dist/swagger-markdown/transformers/security.js.map +0 -1
- package/dist/swagger-markdown/transformers/securityDefinitions.d.ts.map +0 -1
- package/dist/swagger-markdown/transformers/securityDefinitions.esm.js.map +0 -1
- package/dist/swagger-markdown/transformers/securityDefinitions.js.map +0 -1
- package/dist/type.d.ts.map +0 -1
- package/dist/utils.d.ts.map +0 -1
- package/dist/utils.esm.js.map +0 -1
- package/dist/utils.js.map +0 -1
- /package/dist/{Doc → 1.0/Doc}/index.d.ts +0 -0
- /package/dist/{Doc → 1.0/Doc}/type.d.ts +0 -0
- /package/dist/{HandleError.d.ts → 1.0/HandleError.d.ts} +0 -0
- /package/dist/{Layer.d.ts → 1.0/Layer.d.ts} +0 -0
- /package/dist/{Middlewares.d.ts → 1.0/Middlewares.d.ts} +0 -0
- /package/dist/{handler.d.ts → 1.0/handler.d.ts} +0 -0
- /package/dist/{middleware.d.ts → 1.0/middleware.d.ts} +0 -0
- /package/dist/{redocUi → 1.0/redocUi}/index.d.ts +0 -0
- /package/dist/{router.d.ts → 1.0/router.d.ts} +0 -0
- /package/dist/{swagger-markdown → 1.0/swagger-markdown}/index.d.ts +0 -0
- /package/dist/{swagger-markdown → 1.0/swagger-markdown}/lib/anchor.d.ts +0 -0
- /package/dist/{swagger-markdown → 1.0/swagger-markdown}/lib/inArray.d.ts +0 -0
- /package/dist/{swagger-markdown → 1.0/swagger-markdown}/models/schema.d.ts +0 -0
- /package/dist/{swagger-markdown → 1.0/swagger-markdown}/transformers/contact.d.ts +0 -0
- /package/dist/{swagger-markdown → 1.0/swagger-markdown}/transformers/dataTypes.d.ts +0 -0
- /package/dist/{swagger-markdown → 1.0/swagger-markdown}/transformers/definitions.d.ts +0 -0
- /package/dist/{swagger-markdown → 1.0/swagger-markdown}/transformers/externalDocs.d.ts +0 -0
- /package/dist/{swagger-markdown → 1.0/swagger-markdown}/transformers/info.d.ts +0 -0
- /package/dist/{swagger-markdown → 1.0/swagger-markdown}/transformers/license.d.ts +0 -0
- /package/dist/{swagger-markdown → 1.0/swagger-markdown}/transformers/path.d.ts +0 -0
- /package/dist/{swagger-markdown → 1.0/swagger-markdown}/transformers/pathParameters.d.ts +0 -0
- /package/dist/{swagger-markdown → 1.0/swagger-markdown}/transformers/pathResponses.d.ts +0 -0
- /package/dist/{swagger-markdown → 1.0/swagger-markdown}/transformers/security.d.ts +0 -0
- /package/dist/{swagger-markdown → 1.0/swagger-markdown}/transformers/securityDefinitions.d.ts +0 -0
- /package/dist/{type.d.ts → 1.0/type.d.ts} +0 -0
- /package/dist/{utils.d.ts → 1.0/utils.d.ts} +0 -0
- /package/dist/{HandleError.esm.js → 2.0/HandleError.esm.js} +0 -0
- /package/dist/{HandleError.js → 2.0/HandleError.js} +0 -0
- /package/dist/{swagger-markdown → 2.0/swagger-markdown}/lib/anchor.esm.js +0 -0
- /package/dist/{swagger-markdown → 2.0/swagger-markdown}/lib/anchor.js +0 -0
- /package/dist/{swagger-markdown → 2.0/swagger-markdown}/lib/inArray.esm.js +0 -0
- /package/dist/{swagger-markdown → 2.0/swagger-markdown}/lib/inArray.js +0 -0
- /package/dist/{swagger-markdown → 2.0/swagger-markdown}/models/schema.esm.js +0 -0
- /package/dist/{swagger-markdown → 2.0/swagger-markdown}/models/schema.js +0 -0
- /package/dist/{swagger-markdown → 2.0/swagger-markdown}/transformers/contact.esm.js +0 -0
- /package/dist/{swagger-markdown → 2.0/swagger-markdown}/transformers/contact.js +0 -0
- /package/dist/{swagger-markdown → 2.0/swagger-markdown}/transformers/dataTypes.esm.js +0 -0
- /package/dist/{swagger-markdown → 2.0/swagger-markdown}/transformers/dataTypes.js +0 -0
- /package/dist/{swagger-markdown → 2.0/swagger-markdown}/transformers/definitions.esm.js +0 -0
- /package/dist/{swagger-markdown → 2.0/swagger-markdown}/transformers/definitions.js +0 -0
- /package/dist/{swagger-markdown → 2.0/swagger-markdown}/transformers/externalDocs.esm.js +0 -0
- /package/dist/{swagger-markdown → 2.0/swagger-markdown}/transformers/externalDocs.js +0 -0
- /package/dist/{swagger-markdown → 2.0/swagger-markdown}/transformers/info.esm.js +0 -0
- /package/dist/{swagger-markdown → 2.0/swagger-markdown}/transformers/info.js +0 -0
- /package/dist/{swagger-markdown → 2.0/swagger-markdown}/transformers/license.esm.js +0 -0
- /package/dist/{swagger-markdown → 2.0/swagger-markdown}/transformers/license.js +0 -0
- /package/dist/{swagger-markdown → 2.0/swagger-markdown}/transformers/path.esm.js +0 -0
- /package/dist/{swagger-markdown → 2.0/swagger-markdown}/transformers/path.js +0 -0
- /package/dist/{swagger-markdown → 2.0/swagger-markdown}/transformers/pathParameters.esm.js +0 -0
- /package/dist/{swagger-markdown → 2.0/swagger-markdown}/transformers/pathParameters.js +0 -0
- /package/dist/{swagger-markdown → 2.0/swagger-markdown}/transformers/pathResponses.esm.js +0 -0
- /package/dist/{swagger-markdown → 2.0/swagger-markdown}/transformers/pathResponses.js +0 -0
- /package/dist/{swagger-markdown → 2.0/swagger-markdown}/transformers/security.esm.js +0 -0
- /package/dist/{swagger-markdown → 2.0/swagger-markdown}/transformers/security.js +0 -0
- /package/dist/{swagger-markdown → 2.0/swagger-markdown}/transformers/securityDefinitions.esm.js +0 -0
- /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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"}
|