@ismael1361/router 1.1.1 → 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.
Files changed (101) hide show
  1. package/dist/HandleError.esm.js +126 -1
  2. package/dist/HandleError.esm.js.map +1 -1
  3. package/dist/HandleError.js +128 -1
  4. package/dist/HandleError.js.map +1 -1
  5. package/dist/Layer.esm.js +250 -1
  6. package/dist/Layer.esm.js.map +1 -1
  7. package/dist/Layer.js +252 -1
  8. package/dist/Layer.js.map +1 -1
  9. package/dist/Middlewares.esm.js +187 -1
  10. package/dist/Middlewares.esm.js.map +1 -1
  11. package/dist/Middlewares.js +194 -1
  12. package/dist/Middlewares.js.map +1 -1
  13. package/dist/handler.esm.js +170 -1
  14. package/dist/handler.esm.js.map +1 -1
  15. package/dist/handler.js +173 -1
  16. package/dist/handler.js.map +1 -1
  17. package/dist/index.esm.js +141 -1
  18. package/dist/index.esm.js.map +1 -1
  19. package/dist/index.js +152 -1
  20. package/dist/index.js.map +1 -1
  21. package/dist/middleware.esm.js +151 -1
  22. package/dist/middleware.esm.js.map +1 -1
  23. package/dist/middleware.js +154 -1
  24. package/dist/middleware.js.map +1 -1
  25. package/dist/node_modules/tslib/tslib.es6.esm.js +45 -1
  26. package/dist/node_modules/tslib/tslib.es6.esm.js.map +1 -1
  27. package/dist/node_modules/tslib/tslib.es6.js +48 -1
  28. package/dist/node_modules/tslib/tslib.es6.js.map +1 -1
  29. package/dist/redocUi/index.esm.js +74 -1
  30. package/dist/redocUi/index.esm.js.map +1 -1
  31. package/dist/redocUi/index.js +76 -1
  32. package/dist/redocUi/index.js.map +1 -1
  33. package/dist/router.esm.js +434 -1
  34. package/dist/router.esm.js.map +1 -1
  35. package/dist/router.js +436 -1
  36. package/dist/router.js.map +1 -1
  37. package/dist/swagger-markdown/index.esm.js +128 -1
  38. package/dist/swagger-markdown/index.esm.js.map +1 -1
  39. package/dist/swagger-markdown/index.js +134 -1
  40. package/dist/swagger-markdown/index.js.map +1 -1
  41. package/dist/swagger-markdown/lib/anchor.esm.js +6 -1
  42. package/dist/swagger-markdown/lib/anchor.esm.js.map +1 -1
  43. package/dist/swagger-markdown/lib/anchor.js +8 -1
  44. package/dist/swagger-markdown/lib/anchor.js.map +1 -1
  45. package/dist/swagger-markdown/lib/inArray.esm.js +20 -1
  46. package/dist/swagger-markdown/lib/inArray.esm.js.map +1 -1
  47. package/dist/swagger-markdown/lib/inArray.js +22 -1
  48. package/dist/swagger-markdown/lib/inArray.js.map +1 -1
  49. package/dist/swagger-markdown/models/schema.esm.js +64 -1
  50. package/dist/swagger-markdown/models/schema.esm.js.map +1 -1
  51. package/dist/swagger-markdown/models/schema.js +66 -1
  52. package/dist/swagger-markdown/models/schema.js.map +1 -1
  53. package/dist/swagger-markdown/transformers/contact.esm.js +23 -1
  54. package/dist/swagger-markdown/transformers/contact.esm.js.map +1 -1
  55. package/dist/swagger-markdown/transformers/contact.js +25 -1
  56. package/dist/swagger-markdown/transformers/contact.js.map +1 -1
  57. package/dist/swagger-markdown/transformers/dataTypes.esm.js +59 -1
  58. package/dist/swagger-markdown/transformers/dataTypes.esm.js.map +1 -1
  59. package/dist/swagger-markdown/transformers/dataTypes.js +61 -1
  60. package/dist/swagger-markdown/transformers/dataTypes.js.map +1 -1
  61. package/dist/swagger-markdown/transformers/definitions.esm.js +75 -1
  62. package/dist/swagger-markdown/transformers/definitions.esm.js.map +1 -1
  63. package/dist/swagger-markdown/transformers/definitions.js +80 -1
  64. package/dist/swagger-markdown/transformers/definitions.js.map +1 -1
  65. package/dist/swagger-markdown/transformers/externalDocs.esm.js +13 -1
  66. package/dist/swagger-markdown/transformers/externalDocs.esm.js.map +1 -1
  67. package/dist/swagger-markdown/transformers/externalDocs.js +15 -1
  68. package/dist/swagger-markdown/transformers/externalDocs.js.map +1 -1
  69. package/dist/swagger-markdown/transformers/info.esm.js +36 -1
  70. package/dist/swagger-markdown/transformers/info.esm.js.map +1 -1
  71. package/dist/swagger-markdown/transformers/info.js +38 -1
  72. package/dist/swagger-markdown/transformers/info.js.map +1 -1
  73. package/dist/swagger-markdown/transformers/license.esm.js +20 -1
  74. package/dist/swagger-markdown/transformers/license.esm.js.map +1 -1
  75. package/dist/swagger-markdown/transformers/license.js +22 -1
  76. package/dist/swagger-markdown/transformers/license.js.map +1 -1
  77. package/dist/swagger-markdown/transformers/path.esm.js +71 -1
  78. package/dist/swagger-markdown/transformers/path.esm.js.map +1 -1
  79. package/dist/swagger-markdown/transformers/path.js +76 -1
  80. package/dist/swagger-markdown/transformers/path.js.map +1 -1
  81. package/dist/swagger-markdown/transformers/pathParameters.esm.js +62 -1
  82. package/dist/swagger-markdown/transformers/pathParameters.esm.js.map +1 -1
  83. package/dist/swagger-markdown/transformers/pathParameters.js +64 -1
  84. package/dist/swagger-markdown/transformers/pathParameters.js.map +1 -1
  85. package/dist/swagger-markdown/transformers/pathResponses.esm.js +45 -1
  86. package/dist/swagger-markdown/transformers/pathResponses.esm.js.map +1 -1
  87. package/dist/swagger-markdown/transformers/pathResponses.js +47 -1
  88. package/dist/swagger-markdown/transformers/pathResponses.js.map +1 -1
  89. package/dist/swagger-markdown/transformers/security.esm.js +41 -1
  90. package/dist/swagger-markdown/transformers/security.esm.js.map +1 -1
  91. package/dist/swagger-markdown/transformers/security.js +43 -1
  92. package/dist/swagger-markdown/transformers/security.js.map +1 -1
  93. package/dist/swagger-markdown/transformers/securityDefinitions.esm.js +51 -1
  94. package/dist/swagger-markdown/transformers/securityDefinitions.esm.js.map +1 -1
  95. package/dist/swagger-markdown/transformers/securityDefinitions.js +57 -1
  96. package/dist/swagger-markdown/transformers/securityDefinitions.js.map +1 -1
  97. package/dist/utils.esm.js +244 -1
  98. package/dist/utils.esm.js.map +1 -1
  99. package/dist/utils.js +256 -1
  100. package/dist/utils.js.map +1 -1
  101. package/package.json +2 -2
@@ -1,2 +1,44 @@
1
- "use strict";module.exports=e=>{const t=[];let n=0;if(!e)return null;if(e.map(e=>{Object.keys(e).map(t=>{n=e[t].length>n?e[t].length:n})}),n++,n<2&&(n=2),e.map(e=>{Object.keys(e).map(r=>{const s=[r].concat(e[r]);for(;s.length<n;)s.push("");let u=s.reduce((e,t)=>`${e} ${t||""} |`,"|");u=u.replace(/\s{2,}/g," "),t.push(u)})}),t.length){let e=Array(n).fill(" --- ");for(t.unshift(`|${e.join("|")}|`),e=[],e.push(" Security Schema "),e.push(" Scopes ");e.length<n;)e.push(" ");return t.unshift(`|${e.join("|")}|`),t.unshift("##### Security\n"),t.filter(e=>"string"==typeof e).join("\n")}return null};
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;
2
44
  //# sourceMappingURL=security.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"security.js","sources":["../../../src/swagger-markdown/transformers/security.ts"],"sourcesContent":[null],"names":["security","res","maxLength","map","rules","Object","keys","key","length","line","concat","push","lineReduced","reduce","prev","curr","replace","Array","fill","unshift","join","filter","v"],"mappings":"4BAEgBA,IACf,MAAMC,EAA4B,GAClC,IAAIC,EAAY,EAEhB,IAAKF,EAAU,OAAO,KAuBtB,GArBAA,EAASG,IAAKC,IACbC,OAAOC,KAAKF,GAAOD,IAAKI,IACvBL,EAAYE,EAAMG,GAAKC,OAASN,EAAYE,EAAMG,GAAKC,OAASN,MAIlEA,IACIA,EAAY,IAAGA,EAAY,GAE/BF,EAASG,IAAKC,IACbC,OAAOC,KAAKF,GAAOD,IAAKI,IACvB,MAAME,EAAO,CAACF,GAAKG,OAAON,EAAMG,IAChC,KAAOE,EAAKD,OAASN,GACpBO,EAAKE,KAAK,IAEX,IAAIC,EAAcH,EAAKI,OAAO,CAACC,EAAMC,IAAS,GAAGD,KAAQC,GAAQ,OAAQ,KACzEH,EAAcA,EAAYI,QAAQ,UAAW,KAC7Cf,EAAIU,KAAKC,OAIPX,EAAIO,OAAQ,CACf,IAAIC,EAAOQ,MAAMf,GAAWgB,KAAK,SASjC,IAPAjB,EAAIkB,QAAQ,IAAIV,EAAKW,KAAK,SAE1BX,EAAO,GAEPA,EAAKE,KAAK,qBACVF,EAAKE,KAAK,YAEHF,EAAKD,OAASN,GACpBO,EAAKE,KAAK,KAMX,OAHAV,EAAIkB,QAAQ,IAAIV,EAAKW,KAAK,SAC1BnB,EAAIkB,QAAQ,oBAELlB,EAAIoB,OAAQC,GAAmB,iBAANA,GAAgBF,KAAK,KACrD,CAED,OAAO"}
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;;;;"}
@@ -1,2 +1,52 @@
1
- const e={basic:"Basic",apiKey:"API Key",oauth2:"OAuth 2.0"},t={description:"Description",name:"Name",in:"In",flow:"Flow",authorizationUrl:"Authorization URL",tokenUrl:"Token URL"};var i=i=>{const n=[];return Object.keys(i).map(p=>{n.push(`**${p}** \n`),n.push(`|${i[p].type}|*${e[i[p].type]}*|`),n.push("|---|---|"),Object.keys(i[p]).map(e=>{if("scopes"===e)n.push("|**Scopes**||"),Object.keys(i[p][e]).map(t=>{n.push(`|${t}|${i[p][e][t].replace(/[\r\n]/g," ")}|`)});else if("type"!==e&&i[p][e].replace){let s=t[e];if(void 0===s){if(!e.match(/^x-/i))return;s=e}n.push(`|${s}|${i[p][e].replace(/[\r\n]/g," ")}|`)}}),n.push("")}),n.length>0&&n.unshift("### Security"),n.length?n.filter(e=>"string"==typeof e).join("\n"):null};export{i as default,t as nameResolver,e as typeResolver};
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 };
2
52
  //# sourceMappingURL=securityDefinitions.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"securityDefinitions.esm.js","sources":["../../../src/swagger-markdown/transformers/securityDefinitions.ts"],"sourcesContent":[null],"names":["typeResolver","basic","apiKey","oauth2","nameResolver","description","name","in","flow","authorizationUrl","tokenUrl","transformSecurityDefinitions","securityDefinitions","res","Object","keys","map","type","push","value","scope","replace","key","undefined","match","length","unshift","filter","v","join"],"mappings":"AAEa,MAAAA,EAAuC,CACnDC,MAAO,QACPC,OAAQ,UACRC,OAAQ,aAGIC,EAAuC,CACnDC,YAAa,cACbC,KAAM,OACNC,GAAI,KACJC,KAAM,OACNC,iBAAkB,oBAClBC,SAAU,aAGX,IAAeC,EAACC,IAEf,MAAMC,EAA4B,GAsClC,OApCAC,OAAOC,KAAKH,GAAqBI,IAAKC,IACrCJ,EAAIK,KAAK,KAAKD,WACdJ,EAAIK,KAAK,IAAIN,EAAoBK,GAAMA,SAASjB,EAAaY,EAAoBK,GAAMA,WACvFJ,EAAIK,KAAK,aAETJ,OAAOC,KAAKH,EAAoBK,IAAOD,IAAKG,IAC3C,GAAc,WAAVA,EACHN,EAAIK,KAAK,iBAETJ,OAAOC,KAAKH,EAAoBK,GAAME,IAAQH,IAAKI,IAClDP,EAAIK,KAAK,IAAIE,KAAcR,EAAoBK,GAAME,GAAOC,GAAOC,QAAQ,UAAW,gBAEjF,GAAc,SAAVF,GAAoBP,EAAoBK,GAAME,GAAOE,QAAS,CACxE,IAAIC,EAAMlB,EAAae,GAEvB,QAAYI,IAARD,EAAmB,CACtB,IAAIH,EAAMK,MAAM,QAGf,OAFAF,EAAMH,CAIP,CAEDN,EAAIK,KAAK,IAAII,KAAOV,EAAoBK,GAAME,GAAOE,QAAQ,UAAW,QACxE,IAGFR,EAAIK,KAAK,MAKNL,EAAIY,OAAS,GAChBZ,EAAIa,QAAQ,gBAGNb,EAAIY,OAASZ,EAAIc,OAAQC,GAAmB,iBAANA,GAAgBC,KAAK,MAAQ"}
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;;;;"}
@@ -1,2 +1,58 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});const e={basic:"Basic",apiKey:"API Key",oauth2:"OAuth 2.0"},t={description:"Description",name:"Name",in:"In",flow:"Flow",authorizationUrl:"Authorization URL",tokenUrl:"Token URL"};exports.default=s=>{const p=[];return Object.keys(s).map(r=>{p.push(`**${r}** \n`),p.push(`|${s[r].type}|*${e[s[r].type]}*|`),p.push("|---|---|"),Object.keys(s[r]).map(e=>{if("scopes"===e)p.push("|**Scopes**||"),Object.keys(s[r][e]).map(t=>{p.push(`|${t}|${s[r][e][t].replace(/[\r\n]/g," ")}|`)});else if("type"!==e&&s[r][e].replace){let o=t[e];if(void 0===o){if(!e.match(/^x-/i))return;o=e}p.push(`|${o}|${s[r][e].replace(/[\r\n]/g," ")}|`)}}),p.push("")}),p.length>0&&p.unshift("### Security"),p.length?p.filter(e=>"string"==typeof e).join("\n"):null},exports.nameResolver=t,exports.typeResolver=e;
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;
2
58
  //# sourceMappingURL=securityDefinitions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"securityDefinitions.js","sources":["../../../src/swagger-markdown/transformers/securityDefinitions.ts"],"sourcesContent":[null],"names":["typeResolver","basic","apiKey","oauth2","nameResolver","description","name","in","flow","authorizationUrl","tokenUrl","securityDefinitions","res","Object","keys","map","type","push","value","scope","replace","key","undefined","match","length","unshift","filter","v","join"],"mappings":"oEAEa,MAAAA,EAAuC,CACnDC,MAAO,QACPC,OAAQ,UACRC,OAAQ,aAGIC,EAAuC,CACnDC,YAAa,cACbC,KAAM,OACNC,GAAI,KACJC,KAAM,OACNC,iBAAkB,oBAClBC,SAAU,6BAGKC,IAEf,MAAMC,EAA4B,GAsClC,OApCAC,OAAOC,KAAKH,GAAqBI,IAAKC,IACrCJ,EAAIK,KAAK,KAAKD,WACdJ,EAAIK,KAAK,IAAIN,EAAoBK,GAAMA,SAAShB,EAAaW,EAAoBK,GAAMA,WACvFJ,EAAIK,KAAK,aAETJ,OAAOC,KAAKH,EAAoBK,IAAOD,IAAKG,IAC3C,GAAc,WAAVA,EACHN,EAAIK,KAAK,iBAETJ,OAAOC,KAAKH,EAAoBK,GAAME,IAAQH,IAAKI,IAClDP,EAAIK,KAAK,IAAIE,KAAcR,EAAoBK,GAAME,GAAOC,GAAOC,QAAQ,UAAW,gBAEjF,GAAc,SAAVF,GAAoBP,EAAoBK,GAAME,GAAOE,QAAS,CACxE,IAAIC,EAAMjB,EAAac,GAEvB,QAAYI,IAARD,EAAmB,CACtB,IAAIH,EAAMK,MAAM,QAGf,OAFAF,EAAMH,CAIP,CAEDN,EAAIK,KAAK,IAAII,KAAOV,EAAoBK,GAAME,GAAOE,QAAQ,UAAW,QACxE,IAGFR,EAAIK,KAAK,MAKNL,EAAIY,OAAS,GAChBZ,EAAIa,QAAQ,gBAGNb,EAAIY,OAASZ,EAAIc,OAAQC,GAAmB,iBAANA,GAAgBC,KAAK,MAAQ"}
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;;;;;;"}
package/dist/utils.esm.js CHANGED
@@ -1,2 +1,245 @@
1
- import{__awaiter as e}from"./node_modules/tslib/tslib.es6.esm.js";import{HandleError as t}from"./HandleError.esm.js";import o from"fs";import{deepEqual as n}from"@ismael1361/utils";import r from"path";const s=e=>"object"==typeof e&&null!==e&&e.constructor!==Object,i=(e,...t)=>{if(!Array.isArray(e)&&s(e))return e;const o={};return[e,...t].filter(e=>!(!Array.isArray(0)&&s(0))&&Object.keys(e).length>0).forEach(e=>{var t,r;for(let c in e)void 0!==e[c]&&(null===e[c]||!Array.isArray(e[c])&&s(e[c])?o[c]=e[c]:Array.isArray(e[c])?o[c]=[...null!==(t=o[c])&&void 0!==t?t:[],...e[c]].filter((e,t,o)=>t===o.findIndex(t=>n(t,e))):"object"!=typeof e[c]?o[c]=e[c]:o[c]=i(null!==(r=o[c])&&void 0!==r?r:{},e[c]))}),o},c=(...e)=>["",...e.map(e=>e.replace(/(^\/+)|(\/+$)/gi,"")).filter(e=>""!==e.trim())].join("/"),l=(...e)=>e.map(e=>e.doc).filter(e=>void 0!==e).filter(e=>Object.keys(e).length>0),a=(...e)=>e.filter(e=>Object.keys(e).length>0).reduce((e,t)=>i(e,t),{}),d=(e,...t)=>Object.fromEntries(Object.entries(e).filter(([e])=>!t.includes(e))),f=(e,t="")=>{try{let o=e.routes.map(e=>{const{path:o,method:n,doc:r}=e,s=c(t,o);return{path:s,methods:[n],type:"ROUTE",swagger:{paths:{[s]:{[n]:(null==r?void 0:r.operation)||{}}},components:(null==r?void 0:r.components)||{}}}});return o}catch(e){}return[]};function u(n){return"function"!=typeof n||"stack"in n?n:(s,i,c)=>e(this,void 0,void 0,function*(){if(!i.headersSent)try{yield new Promise(e=>setTimeout(e,0));const e=n(s,i,c);e instanceof Promise&&(yield e)}catch(e){const n=e instanceof t&&"number"==typeof e.cause?e.code:400,s=e instanceof t||e instanceof Error?e.message:"Bad ExpressRequest",c=e instanceof t||e instanceof Error?e.name:"Error",l=e instanceof t&&"string"==typeof e.level?e.level:"ERROR";if(i.status(n).json({message:s,name:c,code:n}),["ERROR","WARN","INFO"].includes(l)){const t=e.stack||e;"ERROR"===l&&console.error(e),"WARN"===l&&console.warn(e),o.appendFileSync(r.join(process.cwd(),"stacks.log"),`time=${(new Date).toISOString()} level=${l} message=${JSON.stringify(t)}\n`)}}})}function m(e){if(e.doc=(null==e?void 0:e.doc)||{},"name"in e&&"router"===e.name)return e;const t=(t,o,n)=>{try{const e=(t.headers["x-forwarded-for"]||"").replace(/:\d+$/,"");t.clientIp=e||t.connection.remoteAddress}catch(e){}if(t.__executedMiddlewares__ instanceof Set||(t.__executedMiddlewares__=new Set),o.headersSent)return;const r=t.__executedMiddlewares__,s="string"==typeof e.id?e.id:e;r.has(s)?n():(t.executeOnce=(e=!0)=>{e?r.add(s):r.delete(s)},u(e)(t,o,n))};return t.id=e.id||void 0,t.doc=e.doc||{},t}const p=e=>({origin:"*"===e||""!==e&&e.split(/,\s*/),methods:"GET,PUT,POST,DELETE,OPTIONS",allowedHeaders:"Content-Type, Authorization, Content-Length, Accept, Origin, X-Requested-With"}),y=(e,t)=>{const o=p(e);return{"Access-Control-Allow-Origin":"boolean"==typeof o.origin?o.origin?null!=t?t:"*":"":o.origin instanceof Array?o.origin.join(","):o.origin,"Access-Control-Allow-Methods":o.methods,"Access-Control-Allow-Headers":o.allowedHeaders,"Access-Control-Expose-Headers":"Content-Length, Content-Range"}};export{m as createDynamicMiddleware,y as getCorsHeaders,p as getCorsOptions,l as getDocHandles,f as getRoutes,s as isConstructedObject,a as joinDocs,i as joinObject,c as joinPath,d as omit,u as tryHandler};
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 };
2
245
  //# sourceMappingURL=utils.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.esm.js","sources":["../src/utils.ts"],"sourcesContent":[null],"names":["isConstructedObject","value","constructor","Object","joinObject","obj","objs","Array","isArray","result","filter","o","keys","length","forEach","key","undefined","_a","v","i","l","findIndex","v2","deepEqual","_b","joinPath","paths","map","p","replace","trim","join","getDocHandles","handles","handle","doc","d","joinDocs","docs","reduce","previous","current","omit","fromEntries","entries","includes","getRoutes","router","basePath","routes","layer","path","method","methods","type","swagger","operation","components","e","tryHandler","handler","req","res","next","__awaiter","this","headersSent","Promise","resolve","setTimeout","response","error","code","HandleError","cause","message","Error","name","level","status","json","stack","console","warn","fs","appendFileSync","process","cwd","Date","toISOString","JSON","stringify","createDynamicMiddleware","middleware","callback","xForwardedFor","headers","clientIp","connection","remoteAddress","__executedMiddlewares__","Set","executedSet","id","has","executeOnce","isOnce","add","delete","getCorsOptions","allowedOrigins","origin","split","allowedHeaders","getCorsHeaders","currentOrigin","corsOptions"],"mappings":"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"}
1
+ {"version":3,"file":"utils.esm.js","sources":["../src/utils.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}