@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,79 @@
|
|
|
1
|
+
import type { MiddlewareFCDoc, IStackFrame, SnippetTargets, IRouter, RequestHandler, Request, Response } from "./type";
|
|
2
|
+
export declare const parseStack: (stack?: string) => IStackFrame[];
|
|
3
|
+
export declare const rootStack: IStackFrame[];
|
|
4
|
+
export declare const isConstructedObject: (value: any) => boolean;
|
|
5
|
+
export declare const joinObject: <T extends Object = any>(obj: T, ...objs: Array<Partial<T>>) => T;
|
|
6
|
+
export declare const joinDocs: (...docs: MiddlewareFCDoc[]) => MiddlewareFCDoc;
|
|
7
|
+
export declare const omit: <T extends object, K extends keyof T>(obj: T, ...keys: K[]) => Omit<T, K>;
|
|
8
|
+
export declare const isRouter: (router: any) => router is IRouter;
|
|
9
|
+
/**
|
|
10
|
+
* Junta múltiplos segmentos de path em uma única string de rota,
|
|
11
|
+
* garantindo que não existam barras duplas e tratando barras extras nas extremidades.
|
|
12
|
+
*/
|
|
13
|
+
export declare const joinPaths: (...paths: string[]) => string;
|
|
14
|
+
export declare const targetLabels: Record<SnippetTargets, string>;
|
|
15
|
+
/**
|
|
16
|
+
* Envolve um middleware Express com um manipulador de erros (try-catch) centralizado.
|
|
17
|
+
* Se o handler lançar um erro, esta função o captura, formata uma resposta JSON padronizada
|
|
18
|
+
* e registra o erro. Ele lida com handlers síncronos e assíncronos (Promises).
|
|
19
|
+
*
|
|
20
|
+
* @param {MiddlewareFC<any, any>} handler O middleware a ser envolvido.
|
|
21
|
+
* @returns {MiddlewareFC<any, any>} Um novo middleware com tratamento de erro ou o handler original se for um roteador.
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* // Esta função é usada internamente por `createDynamicMiddleware`.
|
|
25
|
+
* // Exemplo conceitual de como ela age:
|
|
26
|
+
*
|
|
27
|
+
* const myRiskyHandler: MiddlewareFC = (req, res, next) => {
|
|
28
|
+
* throw new HandleError("Algo deu errado!", 400);
|
|
29
|
+
* };
|
|
30
|
+
*
|
|
31
|
+
* // Em vez de usar `myRiskyHandler` diretamente, o sistema usa `tryHandler(myRiskyHandler)`.
|
|
32
|
+
* // Se `myRiskyHandler` for chamado, o erro será capturado e uma resposta como
|
|
33
|
+
* // { "message": "Algo deu errado!", "name": "HandleError", "code": 400 }
|
|
34
|
+
* // será enviada automaticamente.
|
|
35
|
+
*/
|
|
36
|
+
export declare function tryHandler(handler: RequestHandler<any, any>): any;
|
|
37
|
+
/**
|
|
38
|
+
* Cria um middleware dinâmico que adiciona funcionalidades extras a um middleware Express padrão.
|
|
39
|
+
* Funcionalidades adicionadas:
|
|
40
|
+
* 1. **Tratamento de Erros:** Envolve o middleware com `tryHandler` para captura centralizada de erros.
|
|
41
|
+
* 2. **Execução Única:** Previne que o mesmo middleware seja executado mais de uma vez na mesma requisição,
|
|
42
|
+
* útil para middlewares aplicados em roteadores aninhados. Fornece `req.executeOnce()` para controle.
|
|
43
|
+
* 3. **IP do Cliente:** Adiciona `req.clientIp` com o endereço de IP do cliente.
|
|
44
|
+
*
|
|
45
|
+
* @template Req - O tipo de objeto de requisição (Request) que o middleware espera.
|
|
46
|
+
* @template Res - O tipo de objeto de resposta (Response) que o middleware espera.
|
|
47
|
+
* @param {MiddlewareFC<Req, Res>} middleware O middleware original a ser aprimorado.
|
|
48
|
+
* @returns {MiddlewareFC<Req, Res>} O novo middleware aprimorado.
|
|
49
|
+
*
|
|
50
|
+
* @example
|
|
51
|
+
* // Middleware de autenticação que só deve rodar uma vez.
|
|
52
|
+
* const authMiddleware: MiddlewareFC<{ user: any }> = (req, res, next) => {
|
|
53
|
+
* // Garante que a lógica de autenticação não seja executada novamente.
|
|
54
|
+
* req.executeOnce();
|
|
55
|
+
* console.log('Verificando autenticação...');
|
|
56
|
+
* (req as any).user = { id: 123 };
|
|
57
|
+
* next();
|
|
58
|
+
* };
|
|
59
|
+
*
|
|
60
|
+
* // Em um roteador:
|
|
61
|
+
* router.use(authMiddleware); // Aplicado a todas as rotas
|
|
62
|
+
* router.get("/profile", authMiddleware, (req, res) => {
|
|
63
|
+
* // Mesmo sendo declarado duas vezes, o console.log só aparecerá uma vez.
|
|
64
|
+
* res.send(`Perfil do usuário: ${(req as any).user.id}, IP: ${req.clientIp}`);
|
|
65
|
+
* });
|
|
66
|
+
*/
|
|
67
|
+
export declare function createDynamicMiddleware<Req extends Request = Request, Res extends Response = Response>(middleware: RequestHandler<Req, Res>): RequestHandler<Req, Res>;
|
|
68
|
+
export declare const getCorsOptions: (allowedOrigins: string) => {
|
|
69
|
+
origin: boolean | string[];
|
|
70
|
+
methods: string;
|
|
71
|
+
allowedHeaders: string;
|
|
72
|
+
};
|
|
73
|
+
export declare const getCorsHeaders: (allowedOrigins: string, currentOrigin: string | undefined) => {
|
|
74
|
+
"Access-Control-Allow-Origin": string;
|
|
75
|
+
"Access-Control-Allow-Methods": string;
|
|
76
|
+
"Access-Control-Allow-Headers": string;
|
|
77
|
+
"Access-Control-Expose-Headers": string;
|
|
78
|
+
};
|
|
79
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/2.0/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,cAAc,EAAE,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,QAAQ,EAAgB,MAAM,QAAQ,CAAC;AAKrI,eAAO,MAAM,UAAU,GAAI,QAAO,MAAgC,kBAmBjE,CAAC;AAEF,eAAO,MAAM,SAAS,eAAe,CAAC;AAEtC,eAAO,MAAM,mBAAmB,GAAI,OAAO,GAAG,KAAG,OAEhD,CAAC;AAEF,eAAO,MAAM,UAAU,GAAI,CAAC,SAAS,MAAM,GAAG,GAAG,EAAE,KAAK,CAAC,EAAE,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAG,CAmCvF,CAAC;AAEF,eAAO,MAAM,QAAQ,GAAI,GAAG,MAAM,eAAe,EAAE,oBAMlD,CAAC;AAEF,eAAO,MAAM,IAAI,GAAI,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,MAAM,CAAC,EAAE,KAAK,CAAC,EAAE,GAAG,MAAM,CAAC,EAAE,KAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAEzF,CAAC;AAEF,eAAO,MAAM,QAAQ,GAAI,QAAQ,GAAG,KAAG,MAAM,IAAI,OAEhD,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,SAAS,GAAI,GAAG,OAAO,MAAM,EAAE,KAAG,MAU9C,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,CAwBvD,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,OA6B3D;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,SAAS,OAAO,GAAG,OAAO,EAAE,GAAG,SAAS,QAAQ,GAAG,QAAQ,EAAE,UAAU,EAAE,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,CAgCtK;AAED,eAAO,MAAM,cAAc,GAAI,gBAAgB,MAAM;;;;CAMpD,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,gBAAgB,MAAM,EAAE,eAAe,MAAM,GAAG,SAAS;;;;;CAUvF,CAAC"}
|
|
@@ -1,7 +1,25 @@
|
|
|
1
|
-
import { __awaiter } from '
|
|
2
|
-
import { HandleError } from './HandleError.esm.js';
|
|
1
|
+
import { __awaiter } from '../node_modules/tslib/tslib.es6.esm.js';
|
|
3
2
|
import { deepEqual } from '@ismael1361/utils';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
import { HandleError } from './HandleError.esm.js';
|
|
4
5
|
|
|
6
|
+
const parseStack = (stack = new Error().stack || "") => {
|
|
7
|
+
return ((stack === null || stack === void 0 ? void 0 : stack.split("\n").slice(2).map((line) => line.trim())) || []).map((line) => {
|
|
8
|
+
const match = line.match(/at\s+(.*)\s+\((.*):(\d+):(\d+)\)/) || line.match(/at\s+(.*):(\d+):(\d+)/);
|
|
9
|
+
if (match) {
|
|
10
|
+
if (match.length === 5) {
|
|
11
|
+
const [, functionName, filePath, lineNumber, columnNumber] = match;
|
|
12
|
+
return { functionName, filePath, dir: path.dirname(filePath), lineNumber: parseInt(lineNumber), columnNumber: parseInt(columnNumber) };
|
|
13
|
+
}
|
|
14
|
+
else if (match.length === 4) {
|
|
15
|
+
const [, filePath, lineNumber, columnNumber] = match;
|
|
16
|
+
return { functionName: "<anonymous>", filePath, dir: path.dirname(filePath), lineNumber: parseInt(lineNumber), columnNumber: parseInt(columnNumber) };
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
return { functionName: "<unknown>", filePath: line, dir: "<unknown>", lineNumber: 0, columnNumber: 0 };
|
|
20
|
+
});
|
|
21
|
+
};
|
|
22
|
+
const rootStack = parseStack();
|
|
5
23
|
const isConstructedObject = (value) => {
|
|
6
24
|
return typeof value === "object" && value !== null && value.constructor !== Object;
|
|
7
25
|
};
|
|
@@ -37,73 +55,49 @@ const joinObject = (obj, ...objs) => {
|
|
|
37
55
|
});
|
|
38
56
|
return result;
|
|
39
57
|
};
|
|
40
|
-
const joinPath = (...paths) => {
|
|
41
|
-
return ["", ...paths.map((p) => p.replace(/(^\/+)|(\/+$)/gi, "")).filter((p) => p.trim() !== "")].join("/");
|
|
42
|
-
};
|
|
43
|
-
const getDocHandles = (...handles) => {
|
|
44
|
-
return handles.map((handle) => handle.doc).filter((doc) => doc !== undefined).filter((d) => Object.keys(d).length > 0);
|
|
45
|
-
};
|
|
46
|
-
const joinDocs = (...docs) => {
|
|
47
|
-
return docs
|
|
48
|
-
.filter((d) => Object.keys(d).length > 0)
|
|
49
|
-
.reduce((previous, current) => {
|
|
50
|
-
return joinObject(previous, current);
|
|
51
|
-
}, {});
|
|
52
|
-
};
|
|
53
58
|
const omit = (obj, ...keys) => {
|
|
54
59
|
return Object.fromEntries(Object.entries(obj).filter(([key]) => !keys.includes(key)));
|
|
55
60
|
};
|
|
61
|
+
const isRouter = (router) => {
|
|
62
|
+
return router && typeof router === "function" && "path" in router && "getSwagger" in router;
|
|
63
|
+
};
|
|
56
64
|
/**
|
|
57
|
-
*
|
|
58
|
-
*
|
|
59
|
-
* extraindo métodos HTTP e documentação Swagger, se disponível no handler.
|
|
60
|
-
*
|
|
61
|
-
* @param {ExpressRouter} router A instância do roteador Express a ser inspecionada.
|
|
62
|
-
* @param {string} [basePath=""] Um caminho base para prefixar todas as rotas encontradas, útil para roteadores aninhados.
|
|
63
|
-
* @returns {Array<{path: string, methods: string[], type: 'ROUTE' | 'MIDDLEWARE', swagger?: object}>} Uma matriz de objetos representando cada rota ou middleware.
|
|
64
|
-
*
|
|
65
|
-
* @example
|
|
66
|
-
* // Suponha a seguinte configuração de rotas:
|
|
67
|
-
* const mainRouter = Express.Router();
|
|
68
|
-
* const userRouter = Express.Router();
|
|
69
|
-
*
|
|
70
|
-
* const getUserHandler = (req, res) => res.send('User data');
|
|
71
|
-
* // Anexa a documentação Swagger ao handler
|
|
72
|
-
* (getUserHandler as any).swagger = (path: string) => ({
|
|
73
|
-
* paths: { [path]: { get: { summary: 'Get a specific user' } } }
|
|
74
|
-
* });
|
|
75
|
-
*
|
|
76
|
-
* userRouter.get('/:id', getUserHandler);
|
|
77
|
-
* mainRouter.use('/users', userRouter);
|
|
78
|
-
*
|
|
79
|
-
* const routesInfo = getRoutes(mainRouter);
|
|
80
|
-
* console.log(routesInfo);
|
|
81
|
-
* // Saída esperada (simplificada):
|
|
82
|
-
* // [
|
|
83
|
-
* // { path: '/users/{id}/', methods: ['GET'], type: 'ROUTE', swagger: { ... } }
|
|
84
|
-
* // ]
|
|
65
|
+
* Junta múltiplos segmentos de path em uma única string de rota,
|
|
66
|
+
* garantindo que não existam barras duplas e tratando barras extras nas extremidades.
|
|
85
67
|
*/
|
|
86
|
-
const
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
68
|
+
const joinPaths = (...paths) => {
|
|
69
|
+
return (paths
|
|
70
|
+
.map((path) => path.trim()) // Remove espaços em branco
|
|
71
|
+
.filter((path) => path.length > 0) // Ignora strings vazias
|
|
72
|
+
.join("/") // Une tudo com uma barra
|
|
73
|
+
.replace(/\/+/g, "/") // Substitui múltiplas barras (////) por uma única (/)
|
|
74
|
+
.replace(/\/$/, "") || // Remove a barra final, se existir (opcional, dependendo do seu gosto)
|
|
75
|
+
"/"); // Se o resultado for vazio, retorna a raiz
|
|
76
|
+
};
|
|
77
|
+
const targetLabels = {
|
|
78
|
+
c_libcurl: "C (libcurl)",
|
|
79
|
+
csharp_restsharp: "C# (RestSharp)",
|
|
80
|
+
csharp_httpclient: "C# (HttpClient)",
|
|
81
|
+
go_native: "Go (Native)",
|
|
82
|
+
java_okhttp: "Java (OkHttp)",
|
|
83
|
+
java_unirest: "Java (Unirest)",
|
|
84
|
+
javascript_jquery: "JavaScript (jQuery)",
|
|
85
|
+
javascript_xhr: "JavaScript (XHR)",
|
|
86
|
+
node_native: "Node.js (Native)",
|
|
87
|
+
node_request: "Node.js (Request)",
|
|
88
|
+
node_unirest: "Node.js (Unirest)",
|
|
89
|
+
objc_nsurlsession: "Objective-C (NSURLSession)",
|
|
90
|
+
ocaml_cohttp: "OCaml (Cohttp)",
|
|
91
|
+
php_curl: "PHP (cURL)",
|
|
92
|
+
php_http1: "PHP (HTTP v1)",
|
|
93
|
+
php_http2: "PHP (HTTP v2)",
|
|
94
|
+
python_python3: "Python 3 (http.client)",
|
|
95
|
+
python_requests: "Python (Requests)",
|
|
96
|
+
ruby_native: "Ruby (Native)",
|
|
97
|
+
shell_curl: "Shell (cURL)",
|
|
98
|
+
shell_httpie: "Shell (HTTPie)",
|
|
99
|
+
shell_wget: "Shell (Wget)",
|
|
100
|
+
swift_nsurlsession: "Swift (NSURLSession)",
|
|
107
101
|
};
|
|
108
102
|
/**
|
|
109
103
|
* Envolve um middleware Express com um manipulador de erros (try-catch) centralizado.
|
|
@@ -189,13 +183,9 @@ function tryHandler(handler) {
|
|
|
189
183
|
* });
|
|
190
184
|
*/
|
|
191
185
|
function createDynamicMiddleware(middleware) {
|
|
192
|
-
middleware.doc = (middleware === null || middleware === void 0 ? void 0 : middleware.doc) || {};
|
|
193
|
-
if ("name" in middleware && middleware.name === "router") {
|
|
194
|
-
return middleware;
|
|
195
|
-
}
|
|
196
186
|
const callback = (req, res, next) => {
|
|
197
187
|
try {
|
|
198
|
-
const xForwardedFor = (req.headers["x-forwarded-for"] || "").replace(/:\d+$/, "");
|
|
188
|
+
const xForwardedFor = ((v) => (Array.isArray(v) ? v.join(",") : v))(req.headers["x-forwarded-for"] || "").replace(/:\d+$/, "");
|
|
199
189
|
req.clientIp = xForwardedFor || req.connection.remoteAddress;
|
|
200
190
|
}
|
|
201
191
|
catch (_a) { }
|
|
@@ -220,26 +210,8 @@ function createDynamicMiddleware(middleware) {
|
|
|
220
210
|
}
|
|
221
211
|
};
|
|
222
212
|
callback.id = middleware.id || undefined;
|
|
223
|
-
callback.
|
|
224
|
-
return callback;
|
|
213
|
+
return Object.setPrototypeOf(callback.bind(middleware), Object.getPrototypeOf(middleware));
|
|
225
214
|
}
|
|
226
|
-
const getCorsOptions = (allowedOrigins) => {
|
|
227
|
-
return {
|
|
228
|
-
origin: allowedOrigins === "*" ? true : allowedOrigins === "" ? false : allowedOrigins.split(/,\s*/),
|
|
229
|
-
methods: "GET,PUT,POST,DELETE,OPTIONS",
|
|
230
|
-
allowedHeaders: "Content-Type, Authorization, Content-Length, Accept, Origin, X-Requested-With",
|
|
231
|
-
};
|
|
232
|
-
};
|
|
233
|
-
const getCorsHeaders = (allowedOrigins, currentOrigin) => {
|
|
234
|
-
const corsOptions = getCorsOptions(allowedOrigins);
|
|
235
|
-
const origins = typeof corsOptions.origin === "boolean" ? (corsOptions.origin ? currentOrigin !== null && currentOrigin !== void 0 ? currentOrigin : "*" : "") : corsOptions.origin instanceof Array ? corsOptions.origin.join(",") : corsOptions.origin;
|
|
236
|
-
return {
|
|
237
|
-
"Access-Control-Allow-Origin": origins,
|
|
238
|
-
"Access-Control-Allow-Methods": corsOptions.methods,
|
|
239
|
-
"Access-Control-Allow-Headers": corsOptions.allowedHeaders,
|
|
240
|
-
"Access-Control-Expose-Headers": "Content-Length, Content-Range",
|
|
241
|
-
};
|
|
242
|
-
};
|
|
243
215
|
|
|
244
|
-
export { createDynamicMiddleware,
|
|
216
|
+
export { createDynamicMiddleware, isConstructedObject, isRouter, joinObject, joinPaths, omit, parseStack, rootStack, targetLabels, tryHandler };
|
|
245
217
|
//# sourceMappingURL=utils.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.esm.js","sources":["../../src/2.0/utils.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,27 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var tslib_es6 = require('
|
|
4
|
-
var HandleError = require('./HandleError.js');
|
|
3
|
+
var tslib_es6 = require('../node_modules/tslib/tslib.es6.js');
|
|
5
4
|
var utils = require('@ismael1361/utils');
|
|
5
|
+
var path = require('path');
|
|
6
|
+
var HandleError = require('./HandleError.js');
|
|
6
7
|
|
|
8
|
+
const parseStack = (stack = new Error().stack || "") => {
|
|
9
|
+
return ((stack === null || stack === void 0 ? void 0 : stack.split("\n").slice(2).map((line) => line.trim())) || []).map((line) => {
|
|
10
|
+
const match = line.match(/at\s+(.*)\s+\((.*):(\d+):(\d+)\)/) || line.match(/at\s+(.*):(\d+):(\d+)/);
|
|
11
|
+
if (match) {
|
|
12
|
+
if (match.length === 5) {
|
|
13
|
+
const [, functionName, filePath, lineNumber, columnNumber] = match;
|
|
14
|
+
return { functionName, filePath, dir: path.dirname(filePath), lineNumber: parseInt(lineNumber), columnNumber: parseInt(columnNumber) };
|
|
15
|
+
}
|
|
16
|
+
else if (match.length === 4) {
|
|
17
|
+
const [, filePath, lineNumber, columnNumber] = match;
|
|
18
|
+
return { functionName: "<anonymous>", filePath, dir: path.dirname(filePath), lineNumber: parseInt(lineNumber), columnNumber: parseInt(columnNumber) };
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
return { functionName: "<unknown>", filePath: line, dir: "<unknown>", lineNumber: 0, columnNumber: 0 };
|
|
22
|
+
});
|
|
23
|
+
};
|
|
24
|
+
const rootStack = parseStack();
|
|
7
25
|
const isConstructedObject = (value) => {
|
|
8
26
|
return typeof value === "object" && value !== null && value.constructor !== Object;
|
|
9
27
|
};
|
|
@@ -39,73 +57,49 @@ const joinObject = (obj, ...objs) => {
|
|
|
39
57
|
});
|
|
40
58
|
return result;
|
|
41
59
|
};
|
|
42
|
-
const joinPath = (...paths) => {
|
|
43
|
-
return ["", ...paths.map((p) => p.replace(/(^\/+)|(\/+$)/gi, "")).filter((p) => p.trim() !== "")].join("/");
|
|
44
|
-
};
|
|
45
|
-
const getDocHandles = (...handles) => {
|
|
46
|
-
return handles.map((handle) => handle.doc).filter((doc) => doc !== undefined).filter((d) => Object.keys(d).length > 0);
|
|
47
|
-
};
|
|
48
|
-
const joinDocs = (...docs) => {
|
|
49
|
-
return docs
|
|
50
|
-
.filter((d) => Object.keys(d).length > 0)
|
|
51
|
-
.reduce((previous, current) => {
|
|
52
|
-
return joinObject(previous, current);
|
|
53
|
-
}, {});
|
|
54
|
-
};
|
|
55
60
|
const omit = (obj, ...keys) => {
|
|
56
61
|
return Object.fromEntries(Object.entries(obj).filter(([key]) => !keys.includes(key)));
|
|
57
62
|
};
|
|
63
|
+
const isRouter = (router) => {
|
|
64
|
+
return router && typeof router === "function" && "path" in router && "getSwagger" in router;
|
|
65
|
+
};
|
|
58
66
|
/**
|
|
59
|
-
*
|
|
60
|
-
*
|
|
61
|
-
* extraindo métodos HTTP e documentação Swagger, se disponível no handler.
|
|
62
|
-
*
|
|
63
|
-
* @param {ExpressRouter} router A instância do roteador Express a ser inspecionada.
|
|
64
|
-
* @param {string} [basePath=""] Um caminho base para prefixar todas as rotas encontradas, útil para roteadores aninhados.
|
|
65
|
-
* @returns {Array<{path: string, methods: string[], type: 'ROUTE' | 'MIDDLEWARE', swagger?: object}>} Uma matriz de objetos representando cada rota ou middleware.
|
|
66
|
-
*
|
|
67
|
-
* @example
|
|
68
|
-
* // Suponha a seguinte configuração de rotas:
|
|
69
|
-
* const mainRouter = Express.Router();
|
|
70
|
-
* const userRouter = Express.Router();
|
|
71
|
-
*
|
|
72
|
-
* const getUserHandler = (req, res) => res.send('User data');
|
|
73
|
-
* // Anexa a documentação Swagger ao handler
|
|
74
|
-
* (getUserHandler as any).swagger = (path: string) => ({
|
|
75
|
-
* paths: { [path]: { get: { summary: 'Get a specific user' } } }
|
|
76
|
-
* });
|
|
77
|
-
*
|
|
78
|
-
* userRouter.get('/:id', getUserHandler);
|
|
79
|
-
* mainRouter.use('/users', userRouter);
|
|
80
|
-
*
|
|
81
|
-
* const routesInfo = getRoutes(mainRouter);
|
|
82
|
-
* console.log(routesInfo);
|
|
83
|
-
* // Saída esperada (simplificada):
|
|
84
|
-
* // [
|
|
85
|
-
* // { path: '/users/{id}/', methods: ['GET'], type: 'ROUTE', swagger: { ... } }
|
|
86
|
-
* // ]
|
|
67
|
+
* Junta múltiplos segmentos de path em uma única string de rota,
|
|
68
|
+
* garantindo que não existam barras duplas e tratando barras extras nas extremidades.
|
|
87
69
|
*/
|
|
88
|
-
const
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
70
|
+
const joinPaths = (...paths) => {
|
|
71
|
+
return (paths
|
|
72
|
+
.map((path) => path.trim()) // Remove espaços em branco
|
|
73
|
+
.filter((path) => path.length > 0) // Ignora strings vazias
|
|
74
|
+
.join("/") // Une tudo com uma barra
|
|
75
|
+
.replace(/\/+/g, "/") // Substitui múltiplas barras (////) por uma única (/)
|
|
76
|
+
.replace(/\/$/, "") || // Remove a barra final, se existir (opcional, dependendo do seu gosto)
|
|
77
|
+
"/"); // Se o resultado for vazio, retorna a raiz
|
|
78
|
+
};
|
|
79
|
+
const targetLabels = {
|
|
80
|
+
c_libcurl: "C (libcurl)",
|
|
81
|
+
csharp_restsharp: "C# (RestSharp)",
|
|
82
|
+
csharp_httpclient: "C# (HttpClient)",
|
|
83
|
+
go_native: "Go (Native)",
|
|
84
|
+
java_okhttp: "Java (OkHttp)",
|
|
85
|
+
java_unirest: "Java (Unirest)",
|
|
86
|
+
javascript_jquery: "JavaScript (jQuery)",
|
|
87
|
+
javascript_xhr: "JavaScript (XHR)",
|
|
88
|
+
node_native: "Node.js (Native)",
|
|
89
|
+
node_request: "Node.js (Request)",
|
|
90
|
+
node_unirest: "Node.js (Unirest)",
|
|
91
|
+
objc_nsurlsession: "Objective-C (NSURLSession)",
|
|
92
|
+
ocaml_cohttp: "OCaml (Cohttp)",
|
|
93
|
+
php_curl: "PHP (cURL)",
|
|
94
|
+
php_http1: "PHP (HTTP v1)",
|
|
95
|
+
php_http2: "PHP (HTTP v2)",
|
|
96
|
+
python_python3: "Python 3 (http.client)",
|
|
97
|
+
python_requests: "Python (Requests)",
|
|
98
|
+
ruby_native: "Ruby (Native)",
|
|
99
|
+
shell_curl: "Shell (cURL)",
|
|
100
|
+
shell_httpie: "Shell (HTTPie)",
|
|
101
|
+
shell_wget: "Shell (Wget)",
|
|
102
|
+
swift_nsurlsession: "Swift (NSURLSession)",
|
|
109
103
|
};
|
|
110
104
|
/**
|
|
111
105
|
* Envolve um middleware Express com um manipulador de erros (try-catch) centralizado.
|
|
@@ -191,13 +185,9 @@ function tryHandler(handler) {
|
|
|
191
185
|
* });
|
|
192
186
|
*/
|
|
193
187
|
function createDynamicMiddleware(middleware) {
|
|
194
|
-
middleware.doc = (middleware === null || middleware === void 0 ? void 0 : middleware.doc) || {};
|
|
195
|
-
if ("name" in middleware && middleware.name === "router") {
|
|
196
|
-
return middleware;
|
|
197
|
-
}
|
|
198
188
|
const callback = (req, res, next) => {
|
|
199
189
|
try {
|
|
200
|
-
const xForwardedFor = (req.headers["x-forwarded-for"] || "").replace(/:\d+$/, "");
|
|
190
|
+
const xForwardedFor = ((v) => (Array.isArray(v) ? v.join(",") : v))(req.headers["x-forwarded-for"] || "").replace(/:\d+$/, "");
|
|
201
191
|
req.clientIp = xForwardedFor || req.connection.remoteAddress;
|
|
202
192
|
}
|
|
203
193
|
catch (_a) { }
|
|
@@ -222,36 +212,17 @@ function createDynamicMiddleware(middleware) {
|
|
|
222
212
|
}
|
|
223
213
|
};
|
|
224
214
|
callback.id = middleware.id || undefined;
|
|
225
|
-
callback.
|
|
226
|
-
return callback;
|
|
215
|
+
return Object.setPrototypeOf(callback.bind(middleware), Object.getPrototypeOf(middleware));
|
|
227
216
|
}
|
|
228
|
-
const getCorsOptions = (allowedOrigins) => {
|
|
229
|
-
return {
|
|
230
|
-
origin: allowedOrigins === "*" ? true : allowedOrigins === "" ? false : allowedOrigins.split(/,\s*/),
|
|
231
|
-
methods: "GET,PUT,POST,DELETE,OPTIONS",
|
|
232
|
-
allowedHeaders: "Content-Type, Authorization, Content-Length, Accept, Origin, X-Requested-With",
|
|
233
|
-
};
|
|
234
|
-
};
|
|
235
|
-
const getCorsHeaders = (allowedOrigins, currentOrigin) => {
|
|
236
|
-
const corsOptions = getCorsOptions(allowedOrigins);
|
|
237
|
-
const origins = typeof corsOptions.origin === "boolean" ? (corsOptions.origin ? currentOrigin !== null && currentOrigin !== void 0 ? currentOrigin : "*" : "") : corsOptions.origin instanceof Array ? corsOptions.origin.join(",") : corsOptions.origin;
|
|
238
|
-
return {
|
|
239
|
-
"Access-Control-Allow-Origin": origins,
|
|
240
|
-
"Access-Control-Allow-Methods": corsOptions.methods,
|
|
241
|
-
"Access-Control-Allow-Headers": corsOptions.allowedHeaders,
|
|
242
|
-
"Access-Control-Expose-Headers": "Content-Length, Content-Range",
|
|
243
|
-
};
|
|
244
|
-
};
|
|
245
217
|
|
|
246
218
|
exports.createDynamicMiddleware = createDynamicMiddleware;
|
|
247
|
-
exports.getCorsHeaders = getCorsHeaders;
|
|
248
|
-
exports.getCorsOptions = getCorsOptions;
|
|
249
|
-
exports.getDocHandles = getDocHandles;
|
|
250
|
-
exports.getRoutes = getRoutes;
|
|
251
219
|
exports.isConstructedObject = isConstructedObject;
|
|
252
|
-
exports.
|
|
220
|
+
exports.isRouter = isRouter;
|
|
253
221
|
exports.joinObject = joinObject;
|
|
254
|
-
exports.
|
|
222
|
+
exports.joinPaths = joinPaths;
|
|
255
223
|
exports.omit = omit;
|
|
224
|
+
exports.parseStack = parseStack;
|
|
225
|
+
exports.rootStack = rootStack;
|
|
226
|
+
exports.targetLabels = targetLabels;
|
|
256
227
|
exports.tryHandler = tryHandler;
|
|
257
228
|
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sources":["../../src/2.0/utils.ts"],"sourcesContent":[null],"names":["deepEqual","__awaiter","HandleError"],"mappings":"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"}
|