@ismael1361/router 1.1.0 → 1.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/HandleError.esm.js +127 -0
- package/dist/HandleError.esm.js.map +1 -0
- package/dist/HandleError.js +129 -0
- package/dist/HandleError.js.map +1 -0
- package/dist/Layer.esm.js +251 -0
- package/dist/Layer.esm.js.map +1 -0
- package/dist/Layer.js +253 -0
- package/dist/Layer.js.map +1 -0
- package/dist/Middlewares.esm.js +188 -0
- package/dist/Middlewares.esm.js.map +1 -0
- package/dist/Middlewares.js +195 -0
- package/dist/Middlewares.js.map +1 -0
- package/dist/handler.esm.js +171 -0
- package/dist/handler.esm.js.map +1 -0
- package/dist/handler.js +174 -0
- package/dist/handler.js.map +1 -0
- package/dist/index.esm.js +141 -1
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +152 -1
- package/dist/index.js.map +1 -1
- package/dist/middleware.esm.js +152 -0
- package/dist/middleware.esm.js.map +1 -0
- package/dist/middleware.js +155 -0
- package/dist/middleware.js.map +1 -0
- package/dist/node_modules/tslib/tslib.es6.esm.js +46 -0
- package/dist/node_modules/tslib/tslib.es6.esm.js.map +1 -0
- package/dist/node_modules/tslib/tslib.es6.js +49 -0
- package/dist/node_modules/tslib/tslib.es6.js.map +1 -0
- package/dist/redocUi/index.esm.js +75 -0
- package/dist/redocUi/index.esm.js.map +1 -0
- package/dist/redocUi/index.js +77 -0
- package/dist/redocUi/index.js.map +1 -0
- package/dist/router.esm.js +435 -0
- package/dist/router.esm.js.map +1 -0
- package/dist/router.js +437 -0
- package/dist/router.js.map +1 -0
- package/dist/swagger-markdown/index.esm.js +129 -0
- package/dist/swagger-markdown/index.esm.js.map +1 -0
- package/dist/swagger-markdown/index.js +135 -0
- package/dist/swagger-markdown/index.js.map +1 -0
- package/dist/swagger-markdown/lib/anchor.esm.js +7 -0
- package/dist/swagger-markdown/lib/anchor.esm.js.map +1 -0
- package/dist/swagger-markdown/lib/anchor.js +9 -0
- package/dist/swagger-markdown/lib/anchor.js.map +1 -0
- package/dist/swagger-markdown/lib/inArray.esm.js +21 -0
- package/dist/swagger-markdown/lib/inArray.esm.js.map +1 -0
- package/dist/swagger-markdown/lib/inArray.js +23 -0
- package/dist/swagger-markdown/lib/inArray.js.map +1 -0
- package/dist/swagger-markdown/models/schema.esm.js +65 -0
- package/dist/swagger-markdown/models/schema.esm.js.map +1 -0
- package/dist/swagger-markdown/models/schema.js +67 -0
- package/dist/swagger-markdown/models/schema.js.map +1 -0
- package/dist/swagger-markdown/transformers/contact.esm.js +24 -0
- package/dist/swagger-markdown/transformers/contact.esm.js.map +1 -0
- package/dist/swagger-markdown/transformers/contact.js +26 -0
- package/dist/swagger-markdown/transformers/contact.js.map +1 -0
- package/dist/swagger-markdown/transformers/dataTypes.esm.js +60 -0
- package/dist/swagger-markdown/transformers/dataTypes.esm.js.map +1 -0
- package/dist/swagger-markdown/transformers/dataTypes.js +62 -0
- package/dist/swagger-markdown/transformers/dataTypes.js.map +1 -0
- package/dist/swagger-markdown/transformers/definitions.esm.js +76 -0
- package/dist/swagger-markdown/transformers/definitions.esm.js.map +1 -0
- package/dist/swagger-markdown/transformers/definitions.js +81 -0
- package/dist/swagger-markdown/transformers/definitions.js.map +1 -0
- package/dist/swagger-markdown/transformers/externalDocs.esm.js +14 -0
- package/dist/swagger-markdown/transformers/externalDocs.esm.js.map +1 -0
- package/dist/swagger-markdown/transformers/externalDocs.js +16 -0
- package/dist/swagger-markdown/transformers/externalDocs.js.map +1 -0
- package/dist/swagger-markdown/transformers/info.esm.js +37 -0
- package/dist/swagger-markdown/transformers/info.esm.js.map +1 -0
- package/dist/swagger-markdown/transformers/info.js +39 -0
- package/dist/swagger-markdown/transformers/info.js.map +1 -0
- package/dist/swagger-markdown/transformers/license.esm.js +21 -0
- package/dist/swagger-markdown/transformers/license.esm.js.map +1 -0
- package/dist/swagger-markdown/transformers/license.js +23 -0
- package/dist/swagger-markdown/transformers/license.js.map +1 -0
- package/dist/swagger-markdown/transformers/path.esm.js +72 -0
- package/dist/swagger-markdown/transformers/path.esm.js.map +1 -0
- package/dist/swagger-markdown/transformers/path.js +77 -0
- package/dist/swagger-markdown/transformers/path.js.map +1 -0
- package/dist/swagger-markdown/transformers/pathParameters.esm.js +63 -0
- package/dist/swagger-markdown/transformers/pathParameters.esm.js.map +1 -0
- package/dist/swagger-markdown/transformers/pathParameters.js +65 -0
- package/dist/swagger-markdown/transformers/pathParameters.js.map +1 -0
- package/dist/swagger-markdown/transformers/pathResponses.esm.js +46 -0
- package/dist/swagger-markdown/transformers/pathResponses.esm.js.map +1 -0
- package/dist/swagger-markdown/transformers/pathResponses.js +48 -0
- package/dist/swagger-markdown/transformers/pathResponses.js.map +1 -0
- package/dist/swagger-markdown/transformers/security.esm.js +42 -0
- package/dist/swagger-markdown/transformers/security.esm.js.map +1 -0
- package/dist/swagger-markdown/transformers/security.js +44 -0
- package/dist/swagger-markdown/transformers/security.js.map +1 -0
- package/dist/swagger-markdown/transformers/securityDefinitions.esm.js +52 -0
- package/dist/swagger-markdown/transformers/securityDefinitions.esm.js.map +1 -0
- package/dist/swagger-markdown/transformers/securityDefinitions.js +58 -0
- package/dist/swagger-markdown/transformers/securityDefinitions.js.map +1 -0
- package/dist/utils.esm.js +245 -0
- package/dist/utils.esm.js.map +1 -0
- package/dist/utils.js +257 -0
- package/dist/utils.js.map +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var schema = require('../models/schema.js');
|
|
4
|
+
var dataTypes = require('./dataTypes.js');
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Build responses table
|
|
8
|
+
* @param {object} responses
|
|
9
|
+
* @returns {null|string}
|
|
10
|
+
*/
|
|
11
|
+
var transformResponses = (responses) => {
|
|
12
|
+
const res = [];
|
|
13
|
+
// Check if schema somewhere
|
|
14
|
+
const schemas = Object.keys(responses).reduce((acc, response) => acc || "schema" in responses[response], false);
|
|
15
|
+
Object.keys(responses).forEach((response) => {
|
|
16
|
+
const line = [];
|
|
17
|
+
// Response
|
|
18
|
+
line.push(response);
|
|
19
|
+
// Description
|
|
20
|
+
if ("description" in responses[response]) {
|
|
21
|
+
const description = responses[response].description.replace(/[\r\n]/g, " ");
|
|
22
|
+
line.push(description);
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
line.push("");
|
|
26
|
+
}
|
|
27
|
+
// Schema
|
|
28
|
+
if ("schema" in responses[response]) {
|
|
29
|
+
const schema$1 = new schema(responses[response].schema);
|
|
30
|
+
line.push(dataTypes(schema$1));
|
|
31
|
+
}
|
|
32
|
+
else if (schemas) {
|
|
33
|
+
line.push("");
|
|
34
|
+
}
|
|
35
|
+
// Combine all together
|
|
36
|
+
res.push(`|${line
|
|
37
|
+
.filter((v) => typeof v === "string")
|
|
38
|
+
.map((el) => ` ${el} `)
|
|
39
|
+
.join("|")}|`);
|
|
40
|
+
});
|
|
41
|
+
res.unshift(`| ---- | ----------- |${schemas ? " ------ |" : ""}`);
|
|
42
|
+
res.unshift(`| Code | Description |${schemas ? " Schema |" : ""}`);
|
|
43
|
+
res.unshift("##### Responses\n");
|
|
44
|
+
return res.filter((v) => typeof v === "string").join("\n");
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
module.exports = transformResponses;
|
|
48
|
+
//# sourceMappingURL=pathResponses.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pathResponses.js","sources":["../../../src/swagger-markdown/transformers/pathResponses.ts"],"sourcesContent":[null],"names":["schema","Schema","transformDataTypes"],"mappings":";;;;;AAKA;;;;AAIG;AACH,yBAAe,CAAC,SAAiC,KAAI;IACpD,MAAM,GAAG,GAAyB,EAAE,CAAC;;AAErC,IAAA,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,QAAQ,KAAK,GAAG,IAAI,QAAQ,IAAI,SAAS,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,CAAC;IAEhH,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAI;QAC3C,MAAM,IAAI,GAAyB,EAAE,CAAC;;AAEtC,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;;AAGpB,QAAA,IAAI,aAAa,IAAI,SAAS,CAAC,QAAQ,CAAC,EAAE;AACzC,YAAA,MAAM,WAAW,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;AAC5E,YAAA,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;SACvB;aAAM;AACN,YAAA,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;SACd;;AAED,QAAA,IAAI,QAAQ,IAAI,SAAS,CAAC,QAAQ,CAAC,EAAE;AACpC,YAAA,MAAMA,QAAM,GAAG,IAAIC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC;YACtD,IAAI,CAAC,IAAI,CAACC,SAAkB,CAACF,QAAM,CAAC,CAAC,CAAC;SACtC;aAAM,IAAI,OAAO,EAAE;AACnB,YAAA,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;SACd;;AAED,QAAA,GAAG,CAAC,IAAI,CACP,CAAA,CAAA,EAAI,IAAI;aACN,MAAM,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,KAAK,QAAQ,CAAC;aACpC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAA,CAAA,EAAI,EAAE,CAAA,CAAA,CAAG,CAAC;AACtB,aAAA,IAAI,CAAC,GAAG,CAAC,CAAA,CAAA,CAAG,CACd,CAAC;AACH,KAAC,CAAC,CAAC;AAEH,IAAA,GAAG,CAAC,OAAO,CAAC,CAAA,sBAAA,EAAyB,OAAO,GAAG,WAAW,GAAG,EAAE,CAAA,CAAE,CAAC,CAAC;AACnE,IAAA,GAAG,CAAC,OAAO,CAAC,CAAA,sBAAA,EAAyB,OAAO,GAAG,WAAW,GAAG,EAAE,CAAA,CAAE,CAAC,CAAC;AACnE,IAAA,GAAG,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;AAEjC,IAAA,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5D,CAAC;;;;"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
var security = (security) => {
|
|
2
|
+
const res = [];
|
|
3
|
+
let maxLength = 0;
|
|
4
|
+
if (!security)
|
|
5
|
+
return null;
|
|
6
|
+
security.map((rules) => {
|
|
7
|
+
Object.keys(rules).map((key) => {
|
|
8
|
+
maxLength = rules[key].length > maxLength ? rules[key].length : maxLength;
|
|
9
|
+
});
|
|
10
|
+
});
|
|
11
|
+
maxLength++;
|
|
12
|
+
if (maxLength < 2)
|
|
13
|
+
maxLength = 2;
|
|
14
|
+
security.map((rules) => {
|
|
15
|
+
Object.keys(rules).map((key) => {
|
|
16
|
+
const line = [key].concat(rules[key]);
|
|
17
|
+
while (line.length < maxLength) {
|
|
18
|
+
line.push("");
|
|
19
|
+
}
|
|
20
|
+
let lineReduced = line.reduce((prev, curr) => `${prev} ${curr || ""} |`, "|");
|
|
21
|
+
lineReduced = lineReduced.replace(/\s{2,}/g, " ");
|
|
22
|
+
res.push(lineReduced);
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
if (res.length) {
|
|
26
|
+
let line = Array(maxLength).fill(" --- ");
|
|
27
|
+
res.unshift(`|${line.join("|")}|`);
|
|
28
|
+
line = [];
|
|
29
|
+
line.push(" Security Schema ");
|
|
30
|
+
line.push(" Scopes ");
|
|
31
|
+
while (line.length < maxLength) {
|
|
32
|
+
line.push(" ");
|
|
33
|
+
}
|
|
34
|
+
res.unshift(`|${line.join("|")}|`);
|
|
35
|
+
res.unshift("##### Security\n");
|
|
36
|
+
return res.filter((v) => typeof v === "string").join("\n");
|
|
37
|
+
}
|
|
38
|
+
return null;
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
export { security as default };
|
|
42
|
+
//# sourceMappingURL=security.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"security.esm.js","sources":["../../../src/swagger-markdown/transformers/security.ts"],"sourcesContent":[null],"names":[],"mappings":"AAEA,eAAe,CAAC,QAA4C,KAAI;IAC/D,MAAM,GAAG,GAAyB,EAAE,CAAC;IACrC,IAAI,SAAS,GAAG,CAAC,CAAC;AAElB,IAAA,IAAI,CAAC,QAAQ;AAAE,QAAA,OAAO,IAAI,CAAC;AAE3B,IAAA,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,KAAI;QACtB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAI;YAC9B,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,SAAS,CAAC;AAC3E,SAAC,CAAC,CAAC;AACJ,KAAC,CAAC,CAAC;AAEH,IAAA,SAAS,EAAE,CAAC;IACZ,IAAI,SAAS,GAAG,CAAC;QAAE,SAAS,GAAG,CAAC,CAAC;AAEjC,IAAA,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,KAAI;QACtB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAI;AAC9B,YAAA,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AACtC,YAAA,OAAO,IAAI,CAAC,MAAM,GAAG,SAAS,EAAE;AAC/B,gBAAA,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;aACd;YACD,IAAI,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,IAAI,KAAK,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,IAAI,IAAI,EAAE,CAAI,EAAA,CAAA,EAAE,GAAG,CAAC,CAAC;YAC9E,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;AAClD,YAAA,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AACvB,SAAC,CAAC,CAAC;AACJ,KAAC,CAAC,CAAC;AAEH,IAAA,IAAI,GAAG,CAAC,MAAM,EAAE;QACf,IAAI,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAE1C,QAAA,GAAG,CAAC,OAAO,CAAC,CAAA,CAAA,EAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAG,CAAA,CAAA,CAAC,CAAC;QAEnC,IAAI,GAAG,EAAE,CAAC;AAEV,QAAA,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;AAC/B,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAEtB,QAAA,OAAO,IAAI,CAAC,MAAM,GAAG,SAAS,EAAE;AAC/B,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SACf;AAED,QAAA,GAAG,CAAC,OAAO,CAAC,CAAA,CAAA,EAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAG,CAAA,CAAA,CAAC,CAAC;AACnC,QAAA,GAAG,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;AAEhC,QAAA,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KAC3D;AAED,IAAA,OAAO,IAAI,CAAC;AACb,CAAC;;;;"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var security = (security) => {
|
|
4
|
+
const res = [];
|
|
5
|
+
let maxLength = 0;
|
|
6
|
+
if (!security)
|
|
7
|
+
return null;
|
|
8
|
+
security.map((rules) => {
|
|
9
|
+
Object.keys(rules).map((key) => {
|
|
10
|
+
maxLength = rules[key].length > maxLength ? rules[key].length : maxLength;
|
|
11
|
+
});
|
|
12
|
+
});
|
|
13
|
+
maxLength++;
|
|
14
|
+
if (maxLength < 2)
|
|
15
|
+
maxLength = 2;
|
|
16
|
+
security.map((rules) => {
|
|
17
|
+
Object.keys(rules).map((key) => {
|
|
18
|
+
const line = [key].concat(rules[key]);
|
|
19
|
+
while (line.length < maxLength) {
|
|
20
|
+
line.push("");
|
|
21
|
+
}
|
|
22
|
+
let lineReduced = line.reduce((prev, curr) => `${prev} ${curr || ""} |`, "|");
|
|
23
|
+
lineReduced = lineReduced.replace(/\s{2,}/g, " ");
|
|
24
|
+
res.push(lineReduced);
|
|
25
|
+
});
|
|
26
|
+
});
|
|
27
|
+
if (res.length) {
|
|
28
|
+
let line = Array(maxLength).fill(" --- ");
|
|
29
|
+
res.unshift(`|${line.join("|")}|`);
|
|
30
|
+
line = [];
|
|
31
|
+
line.push(" Security Schema ");
|
|
32
|
+
line.push(" Scopes ");
|
|
33
|
+
while (line.length < maxLength) {
|
|
34
|
+
line.push(" ");
|
|
35
|
+
}
|
|
36
|
+
res.unshift(`|${line.join("|")}|`);
|
|
37
|
+
res.unshift("##### Security\n");
|
|
38
|
+
return res.filter((v) => typeof v === "string").join("\n");
|
|
39
|
+
}
|
|
40
|
+
return null;
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
module.exports = security;
|
|
44
|
+
//# sourceMappingURL=security.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"security.js","sources":["../../../src/swagger-markdown/transformers/security.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAEA,eAAe,CAAC,QAA4C,KAAI;IAC/D,MAAM,GAAG,GAAyB,EAAE,CAAC;IACrC,IAAI,SAAS,GAAG,CAAC,CAAC;AAElB,IAAA,IAAI,CAAC,QAAQ;AAAE,QAAA,OAAO,IAAI,CAAC;AAE3B,IAAA,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,KAAI;QACtB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAI;YAC9B,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,SAAS,CAAC;AAC3E,SAAC,CAAC,CAAC;AACJ,KAAC,CAAC,CAAC;AAEH,IAAA,SAAS,EAAE,CAAC;IACZ,IAAI,SAAS,GAAG,CAAC;QAAE,SAAS,GAAG,CAAC,CAAC;AAEjC,IAAA,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,KAAI;QACtB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAI;AAC9B,YAAA,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AACtC,YAAA,OAAO,IAAI,CAAC,MAAM,GAAG,SAAS,EAAE;AAC/B,gBAAA,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;aACd;YACD,IAAI,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,IAAI,KAAK,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,IAAI,IAAI,EAAE,CAAI,EAAA,CAAA,EAAE,GAAG,CAAC,CAAC;YAC9E,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;AAClD,YAAA,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AACvB,SAAC,CAAC,CAAC;AACJ,KAAC,CAAC,CAAC;AAEH,IAAA,IAAI,GAAG,CAAC,MAAM,EAAE;QACf,IAAI,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAE1C,QAAA,GAAG,CAAC,OAAO,CAAC,CAAA,CAAA,EAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAG,CAAA,CAAA,CAAC,CAAC;QAEnC,IAAI,GAAG,EAAE,CAAC;AAEV,QAAA,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;AAC/B,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAEtB,QAAA,OAAO,IAAI,CAAC,MAAM,GAAG,SAAS,EAAE;AAC/B,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SACf;AAED,QAAA,GAAG,CAAC,OAAO,CAAC,CAAA,CAAA,EAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAG,CAAA,CAAA,CAAC,CAAC;AACnC,QAAA,GAAG,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;AAEhC,QAAA,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KAC3D;AAED,IAAA,OAAO,IAAI,CAAC;AACb,CAAC;;;;"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
const typeResolver = {
|
|
2
|
+
basic: "Basic",
|
|
3
|
+
apiKey: "API Key",
|
|
4
|
+
oauth2: "OAuth 2.0",
|
|
5
|
+
};
|
|
6
|
+
const nameResolver = {
|
|
7
|
+
description: "Description",
|
|
8
|
+
name: "Name",
|
|
9
|
+
in: "In",
|
|
10
|
+
flow: "Flow",
|
|
11
|
+
authorizationUrl: "Authorization URL",
|
|
12
|
+
tokenUrl: "Token URL",
|
|
13
|
+
};
|
|
14
|
+
var transformSecurityDefinitions = (securityDefinitions) => {
|
|
15
|
+
// Base block
|
|
16
|
+
const res = [];
|
|
17
|
+
Object.keys(securityDefinitions).map((type) => {
|
|
18
|
+
res.push(`**${type}** \n`);
|
|
19
|
+
res.push(`|${securityDefinitions[type].type}|*${typeResolver[securityDefinitions[type].type]}*|`);
|
|
20
|
+
res.push("|---|---|");
|
|
21
|
+
Object.keys(securityDefinitions[type]).map((value) => {
|
|
22
|
+
if (value === "scopes") {
|
|
23
|
+
res.push("|**Scopes**||");
|
|
24
|
+
Object.keys(securityDefinitions[type][value]).map((scope) => {
|
|
25
|
+
res.push(`|${scope}|` + `${securityDefinitions[type][value][scope].replace(/[\r\n]/g, " ")}|`);
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
else if (value !== "type" && securityDefinitions[type][value].replace) {
|
|
29
|
+
let key = nameResolver[value];
|
|
30
|
+
if (key === undefined) {
|
|
31
|
+
if (value.match(/^x-/i)) {
|
|
32
|
+
key = value;
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
res.push(`|${key}|${securityDefinitions[type][value].replace(/[\r\n]/g, " ")}|`);
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
res.push("");
|
|
42
|
+
});
|
|
43
|
+
// Create header
|
|
44
|
+
// Only in case if there is any data
|
|
45
|
+
if (res.length > 0) {
|
|
46
|
+
res.unshift("### Security");
|
|
47
|
+
}
|
|
48
|
+
return res.length ? res.filter((v) => typeof v === "string").join("\n") : null;
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
export { transformSecurityDefinitions as default, nameResolver, typeResolver };
|
|
52
|
+
//# sourceMappingURL=securityDefinitions.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"securityDefinitions.esm.js","sources":["../../../src/swagger-markdown/transformers/securityDefinitions.ts"],"sourcesContent":[null],"names":[],"mappings":"AAEa,MAAA,YAAY,GAA2B;AACnD,IAAA,KAAK,EAAE,OAAO;AACd,IAAA,MAAM,EAAE,SAAS;AACjB,IAAA,MAAM,EAAE,WAAW;EAClB;AAEW,MAAA,YAAY,GAA2B;AACnD,IAAA,WAAW,EAAE,aAAa;AAC1B,IAAA,IAAI,EAAE,MAAM;AACZ,IAAA,EAAE,EAAE,IAAI;AACR,IAAA,IAAI,EAAE,MAAM;AACZ,IAAA,gBAAgB,EAAE,mBAAmB;AACrC,IAAA,QAAQ,EAAE,WAAW;EACpB;AAEF,mCAAe,CAAC,mBAAmD,KAAI;;IAEtE,MAAM,GAAG,GAAyB,EAAE,CAAC;IAErC,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAI;AAC7C,QAAA,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,CAAA,MAAA,CAAQ,CAAC,CAAC;QAC5B,GAAG,CAAC,IAAI,CAAC,CAAA,CAAA,EAAI,mBAAmB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAA,EAAA,EAAK,YAAY,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAI,EAAA,CAAA,CAAC,CAAC;AAClG,QAAA,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AAEtB,QAAA,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,KAAI;AACpD,YAAA,IAAI,KAAK,KAAK,QAAQ,EAAE;AACvB,gBAAA,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;AAE1B,gBAAA,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,KAAI;oBAC3D,GAAG,CAAC,IAAI,CAAC,CAAI,CAAA,EAAA,KAAK,CAAG,CAAA,CAAA,GAAG,CAAG,EAAA,mBAAmB,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAG,CAAA,CAAA,CAAC,CAAC;AAChG,iBAAC,CAAC,CAAC;aACH;AAAM,iBAAA,IAAI,KAAK,KAAK,MAAM,IAAI,mBAAmB,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE;AACxE,gBAAA,IAAI,GAAG,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;AAE9B,gBAAA,IAAI,GAAG,KAAK,SAAS,EAAE;AACtB,oBAAA,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;wBACxB,GAAG,GAAG,KAAK,CAAC;qBACZ;yBAAM;wBACN,OAAO;qBACP;iBACD;gBAED,GAAG,CAAC,IAAI,CAAC,CAAA,CAAA,EAAI,GAAG,CAAI,CAAA,EAAA,mBAAmB,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAG,CAAA,CAAA,CAAC,CAAC;aACjF;AACF,SAAC,CAAC,CAAC;AAEH,QAAA,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,KAAC,CAAC,CAAC;;;AAIH,IAAA,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;AACnB,QAAA,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;KAC5B;AAED,IAAA,OAAO,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAChF,CAAC;;;;"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
const typeResolver = {
|
|
6
|
+
basic: "Basic",
|
|
7
|
+
apiKey: "API Key",
|
|
8
|
+
oauth2: "OAuth 2.0",
|
|
9
|
+
};
|
|
10
|
+
const nameResolver = {
|
|
11
|
+
description: "Description",
|
|
12
|
+
name: "Name",
|
|
13
|
+
in: "In",
|
|
14
|
+
flow: "Flow",
|
|
15
|
+
authorizationUrl: "Authorization URL",
|
|
16
|
+
tokenUrl: "Token URL",
|
|
17
|
+
};
|
|
18
|
+
var transformSecurityDefinitions = (securityDefinitions) => {
|
|
19
|
+
// Base block
|
|
20
|
+
const res = [];
|
|
21
|
+
Object.keys(securityDefinitions).map((type) => {
|
|
22
|
+
res.push(`**${type}** \n`);
|
|
23
|
+
res.push(`|${securityDefinitions[type].type}|*${typeResolver[securityDefinitions[type].type]}*|`);
|
|
24
|
+
res.push("|---|---|");
|
|
25
|
+
Object.keys(securityDefinitions[type]).map((value) => {
|
|
26
|
+
if (value === "scopes") {
|
|
27
|
+
res.push("|**Scopes**||");
|
|
28
|
+
Object.keys(securityDefinitions[type][value]).map((scope) => {
|
|
29
|
+
res.push(`|${scope}|` + `${securityDefinitions[type][value][scope].replace(/[\r\n]/g, " ")}|`);
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
else if (value !== "type" && securityDefinitions[type][value].replace) {
|
|
33
|
+
let key = nameResolver[value];
|
|
34
|
+
if (key === undefined) {
|
|
35
|
+
if (value.match(/^x-/i)) {
|
|
36
|
+
key = value;
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
res.push(`|${key}|${securityDefinitions[type][value].replace(/[\r\n]/g, " ")}|`);
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
res.push("");
|
|
46
|
+
});
|
|
47
|
+
// Create header
|
|
48
|
+
// Only in case if there is any data
|
|
49
|
+
if (res.length > 0) {
|
|
50
|
+
res.unshift("### Security");
|
|
51
|
+
}
|
|
52
|
+
return res.length ? res.filter((v) => typeof v === "string").join("\n") : null;
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
exports.default = transformSecurityDefinitions;
|
|
56
|
+
exports.nameResolver = nameResolver;
|
|
57
|
+
exports.typeResolver = typeResolver;
|
|
58
|
+
//# sourceMappingURL=securityDefinitions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"securityDefinitions.js","sources":["../../../src/swagger-markdown/transformers/securityDefinitions.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAEa,MAAA,YAAY,GAA2B;AACnD,IAAA,KAAK,EAAE,OAAO;AACd,IAAA,MAAM,EAAE,SAAS;AACjB,IAAA,MAAM,EAAE,WAAW;EAClB;AAEW,MAAA,YAAY,GAA2B;AACnD,IAAA,WAAW,EAAE,aAAa;AAC1B,IAAA,IAAI,EAAE,MAAM;AACZ,IAAA,EAAE,EAAE,IAAI;AACR,IAAA,IAAI,EAAE,MAAM;AACZ,IAAA,gBAAgB,EAAE,mBAAmB;AACrC,IAAA,QAAQ,EAAE,WAAW;EACpB;AAEF,mCAAe,CAAC,mBAAmD,KAAI;;IAEtE,MAAM,GAAG,GAAyB,EAAE,CAAC;IAErC,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAI;AAC7C,QAAA,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,CAAA,MAAA,CAAQ,CAAC,CAAC;QAC5B,GAAG,CAAC,IAAI,CAAC,CAAA,CAAA,EAAI,mBAAmB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAA,EAAA,EAAK,YAAY,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAI,EAAA,CAAA,CAAC,CAAC;AAClG,QAAA,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AAEtB,QAAA,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,KAAI;AACpD,YAAA,IAAI,KAAK,KAAK,QAAQ,EAAE;AACvB,gBAAA,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;AAE1B,gBAAA,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,KAAI;oBAC3D,GAAG,CAAC,IAAI,CAAC,CAAI,CAAA,EAAA,KAAK,CAAG,CAAA,CAAA,GAAG,CAAG,EAAA,mBAAmB,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAG,CAAA,CAAA,CAAC,CAAC;AAChG,iBAAC,CAAC,CAAC;aACH;AAAM,iBAAA,IAAI,KAAK,KAAK,MAAM,IAAI,mBAAmB,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE;AACxE,gBAAA,IAAI,GAAG,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;AAE9B,gBAAA,IAAI,GAAG,KAAK,SAAS,EAAE;AACtB,oBAAA,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;wBACxB,GAAG,GAAG,KAAK,CAAC;qBACZ;yBAAM;wBACN,OAAO;qBACP;iBACD;gBAED,GAAG,CAAC,IAAI,CAAC,CAAA,CAAA,EAAI,GAAG,CAAI,CAAA,EAAA,mBAAmB,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAG,CAAA,CAAA,CAAC,CAAC;aACjF;AACF,SAAC,CAAC,CAAC;AAEH,QAAA,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,KAAC,CAAC,CAAC;;;AAIH,IAAA,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;AACnB,QAAA,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;KAC5B;AAED,IAAA,OAAO,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAChF,CAAC;;;;;;"}
|
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
import { __awaiter } from './node_modules/tslib/tslib.es6.esm.js';
|
|
2
|
+
import { HandleError } from './HandleError.esm.js';
|
|
3
|
+
import fs from 'fs';
|
|
4
|
+
import { deepEqual } from '@ismael1361/utils';
|
|
5
|
+
import path from 'path';
|
|
6
|
+
|
|
7
|
+
const isConstructedObject = (value) => {
|
|
8
|
+
return typeof value === "object" && value !== null && value.constructor !== Object;
|
|
9
|
+
};
|
|
10
|
+
const joinObject = (obj, ...objs) => {
|
|
11
|
+
if (!Array.isArray(obj) && isConstructedObject(obj)) {
|
|
12
|
+
return obj;
|
|
13
|
+
}
|
|
14
|
+
const result = {};
|
|
15
|
+
[obj, ...objs]
|
|
16
|
+
.filter((o) => !(!Array.isArray(0) && isConstructedObject(0)) && Object.keys(o).length > 0)
|
|
17
|
+
.forEach((o) => {
|
|
18
|
+
var _a, _b;
|
|
19
|
+
for (let key in o) {
|
|
20
|
+
if (o[key] === undefined) {
|
|
21
|
+
continue;
|
|
22
|
+
}
|
|
23
|
+
if (o[key] === null || (!Array.isArray(o[key]) && isConstructedObject(o[key]))) {
|
|
24
|
+
result[key] = o[key];
|
|
25
|
+
continue;
|
|
26
|
+
}
|
|
27
|
+
if (Array.isArray(o[key])) {
|
|
28
|
+
result[key] = [...((_a = result[key]) !== null && _a !== void 0 ? _a : []), ...o[key]].filter((v, i, l) => {
|
|
29
|
+
return i === l.findIndex((v2) => deepEqual(v2, v));
|
|
30
|
+
});
|
|
31
|
+
continue;
|
|
32
|
+
}
|
|
33
|
+
else if (typeof o[key] === "object") {
|
|
34
|
+
result[key] = joinObject(((_b = result[key]) !== null && _b !== void 0 ? _b : {}), o[key]);
|
|
35
|
+
continue;
|
|
36
|
+
}
|
|
37
|
+
result[key] = o[key];
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
return result;
|
|
41
|
+
};
|
|
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
|
+
const omit = (obj, ...keys) => {
|
|
56
|
+
return Object.fromEntries(Object.entries(obj).filter(([key]) => !keys.includes(key)));
|
|
57
|
+
};
|
|
58
|
+
/**
|
|
59
|
+
* Percorre recursivamente um roteador Express para extrair uma lista de todas as rotas e middlewares.
|
|
60
|
+
* A função identifica rotas, sub-roteadores e middlewares, normalizando seus caminhos e
|
|
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
|
+
* // ]
|
|
87
|
+
*/
|
|
88
|
+
const getRoutes = (router, basePath = "") => {
|
|
89
|
+
try {
|
|
90
|
+
let routes = router.routes.map((layer) => {
|
|
91
|
+
const { path, method, doc } = layer;
|
|
92
|
+
const p = joinPath(basePath, path);
|
|
93
|
+
return {
|
|
94
|
+
path: p,
|
|
95
|
+
methods: [method],
|
|
96
|
+
type: "ROUTE",
|
|
97
|
+
swagger: {
|
|
98
|
+
paths: { [p]: { [method]: (doc === null || doc === void 0 ? void 0 : doc.operation) || {} } },
|
|
99
|
+
components: (doc === null || doc === void 0 ? void 0 : doc.components) || {},
|
|
100
|
+
},
|
|
101
|
+
};
|
|
102
|
+
});
|
|
103
|
+
return routes;
|
|
104
|
+
}
|
|
105
|
+
catch (e) {
|
|
106
|
+
// console.error(e);
|
|
107
|
+
}
|
|
108
|
+
return [];
|
|
109
|
+
};
|
|
110
|
+
/**
|
|
111
|
+
* Envolve um middleware Express com um manipulador de erros (try-catch) centralizado.
|
|
112
|
+
* Se o handler lançar um erro, esta função o captura, formata uma resposta JSON padronizada
|
|
113
|
+
* e registra o erro. Ele lida com handlers síncronos e assíncronos (Promises).
|
|
114
|
+
*
|
|
115
|
+
* @param {MiddlewareFC<any, any>} handler O middleware a ser envolvido.
|
|
116
|
+
* @returns {MiddlewareFC<any, any>} Um novo middleware com tratamento de erro ou o handler original se for um roteador.
|
|
117
|
+
*
|
|
118
|
+
* @example
|
|
119
|
+
* // Esta função é usada internamente por `createDynamicMiddleware`.
|
|
120
|
+
* // Exemplo conceitual de como ela age:
|
|
121
|
+
*
|
|
122
|
+
* const myRiskyHandler: MiddlewareFC = (req, res, next) => {
|
|
123
|
+
* throw new HandleError("Algo deu errado!", 400);
|
|
124
|
+
* };
|
|
125
|
+
*
|
|
126
|
+
* // Em vez de usar `myRiskyHandler` diretamente, o sistema usa `tryHandler(myRiskyHandler)`.
|
|
127
|
+
* // Se `myRiskyHandler` for chamado, o erro será capturado e uma resposta como
|
|
128
|
+
* // { "message": "Algo deu errado!", "name": "HandleError", "code": 400 }
|
|
129
|
+
* // será enviada automaticamente.
|
|
130
|
+
*/
|
|
131
|
+
function tryHandler(handler) {
|
|
132
|
+
return typeof handler === "function" && !("stack" in handler)
|
|
133
|
+
? (req, res, next) => __awaiter(this, void 0, void 0, function* () {
|
|
134
|
+
if (res.headersSent) {
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
try {
|
|
138
|
+
yield new Promise((resolve) => setTimeout(resolve, 0));
|
|
139
|
+
const response = handler(req, res, next);
|
|
140
|
+
if (response instanceof Promise)
|
|
141
|
+
yield response;
|
|
142
|
+
}
|
|
143
|
+
catch (error) {
|
|
144
|
+
const code = error instanceof HandleError && typeof error.cause === "number" ? error.code : 400;
|
|
145
|
+
const message = error instanceof HandleError || error instanceof Error ? error.message : "Bad ExpressRequest";
|
|
146
|
+
const name = error instanceof HandleError || error instanceof Error ? error.name : "Error";
|
|
147
|
+
const level = error instanceof HandleError && typeof error.level === "string" ? error.level : "ERROR";
|
|
148
|
+
res.status(code).json({ message, name, code });
|
|
149
|
+
if (["ERROR", "WARN", "INFO"].includes(level)) {
|
|
150
|
+
const stack = error.stack || error;
|
|
151
|
+
if (level === "ERROR")
|
|
152
|
+
console.error(error);
|
|
153
|
+
if (level === "WARN")
|
|
154
|
+
console.warn(error);
|
|
155
|
+
fs.appendFileSync(path.join(process.cwd(), "stacks.log"), `time=${new Date().toISOString()} level=${level} message=${JSON.stringify(stack)}\n`);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
})
|
|
159
|
+
: handler;
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Cria um middleware dinâmico que adiciona funcionalidades extras a um middleware Express padrão.
|
|
163
|
+
* Funcionalidades adicionadas:
|
|
164
|
+
* 1. **Tratamento de Erros:** Envolve o middleware com `tryHandler` para captura centralizada de erros.
|
|
165
|
+
* 2. **Execução Única:** Previne que o mesmo middleware seja executado mais de uma vez na mesma requisição,
|
|
166
|
+
* útil para middlewares aplicados em roteadores aninhados. Fornece `req.executeOnce()` para controle.
|
|
167
|
+
* 3. **IP do Cliente:** Adiciona `req.clientIp` com o endereço de IP do cliente.
|
|
168
|
+
*
|
|
169
|
+
* @template Req - O tipo de objeto de requisição (Request) que o middleware espera.
|
|
170
|
+
* @template Res - O tipo de objeto de resposta (Response) que o middleware espera.
|
|
171
|
+
* @param {MiddlewareFC<Req, Res>} middleware O middleware original a ser aprimorado.
|
|
172
|
+
* @returns {MiddlewareFC<Req, Res>} O novo middleware aprimorado.
|
|
173
|
+
*
|
|
174
|
+
* @example
|
|
175
|
+
* // Middleware de autenticação que só deve rodar uma vez.
|
|
176
|
+
* const authMiddleware: MiddlewareFC<{ user: any }> = (req, res, next) => {
|
|
177
|
+
* // Garante que a lógica de autenticação não seja executada novamente.
|
|
178
|
+
* req.executeOnce();
|
|
179
|
+
* console.log('Verificando autenticação...');
|
|
180
|
+
* (req as any).user = { id: 123 };
|
|
181
|
+
* next();
|
|
182
|
+
* };
|
|
183
|
+
*
|
|
184
|
+
* // Em um roteador:
|
|
185
|
+
* router.use(authMiddleware); // Aplicado a todas as rotas
|
|
186
|
+
* router.get("/profile", authMiddleware, (req, res) => {
|
|
187
|
+
* // Mesmo sendo declarado duas vezes, o console.log só aparecerá uma vez.
|
|
188
|
+
* res.send(`Perfil do usuário: ${(req as any).user.id}, IP: ${req.clientIp}`);
|
|
189
|
+
* });
|
|
190
|
+
*/
|
|
191
|
+
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
|
+
const callback = (req, res, next) => {
|
|
197
|
+
try {
|
|
198
|
+
const xForwardedFor = (req.headers["x-forwarded-for"] || "").replace(/:\d+$/, "");
|
|
199
|
+
req.clientIp = xForwardedFor || req.connection.remoteAddress;
|
|
200
|
+
}
|
|
201
|
+
catch (_a) { }
|
|
202
|
+
if (!(req.__executedMiddlewares__ instanceof Set))
|
|
203
|
+
req.__executedMiddlewares__ = new Set();
|
|
204
|
+
if (res.headersSent) {
|
|
205
|
+
return;
|
|
206
|
+
}
|
|
207
|
+
const executedSet = req.__executedMiddlewares__;
|
|
208
|
+
const id = typeof middleware.id === "string" ? middleware.id : middleware;
|
|
209
|
+
if (!executedSet.has(id)) {
|
|
210
|
+
req.executeOnce = (isOnce = true) => {
|
|
211
|
+
if (isOnce)
|
|
212
|
+
executedSet.add(id);
|
|
213
|
+
else
|
|
214
|
+
executedSet.delete(id);
|
|
215
|
+
};
|
|
216
|
+
tryHandler(middleware)(req, res, next);
|
|
217
|
+
}
|
|
218
|
+
else {
|
|
219
|
+
next();
|
|
220
|
+
}
|
|
221
|
+
};
|
|
222
|
+
callback.id = middleware.id || undefined;
|
|
223
|
+
callback.doc = middleware.doc || {};
|
|
224
|
+
return callback;
|
|
225
|
+
}
|
|
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
|
+
|
|
244
|
+
export { createDynamicMiddleware, getCorsHeaders, getCorsOptions, getDocHandles, getRoutes, isConstructedObject, joinDocs, joinObject, joinPath, omit, tryHandler };
|
|
245
|
+
//# sourceMappingURL=utils.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.esm.js","sources":["../src/utils.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|