api-tests-coverage 1.0.20 → 1.0.21

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 (517) hide show
  1. package/README.md +3 -7
  2. package/dist/dashboard/assets/{_basePickBy-DZR484hj.js → _basePickBy-DiDMiru0.js} +1 -1
  3. package/dist/dashboard/{dist/assets/_baseUniq-Bwm426M6.js → assets/_baseUniq-CFoKRFhS.js} +1 -1
  4. package/dist/dashboard/{dist/assets/arc-51ef6HeW.js → assets/arc-B2fWu2mo.js} +1 -1
  5. package/dist/dashboard/{dist/assets/architectureDiagram-VXUJARFQ-Boahc5dR.js → assets/architectureDiagram-VXUJARFQ-DpIe4yWB.js} +1 -1
  6. package/dist/dashboard/assets/{blockDiagram-VD42YOAC-BvkiW8lj.js → blockDiagram-VD42YOAC-CKAgfH2X.js} +1 -1
  7. package/dist/dashboard/{dist/assets/c4Diagram-YG6GDRKO-Bww0QPxL.js → assets/c4Diagram-YG6GDRKO-CUtb-R__.js} +1 -1
  8. package/dist/dashboard/assets/channel-B9iMjZmm.js +1 -0
  9. package/dist/dashboard/assets/{chunk-4BX2VUAB-BrU7mtb9.js → chunk-4BX2VUAB-C3CSqwcX.js} +1 -1
  10. package/dist/dashboard/assets/{chunk-55IACEB6-DwsmCNp_.js → chunk-55IACEB6-CV8VzOOp.js} +1 -1
  11. package/dist/dashboard/{dist/assets/chunk-B4BG7PRW-B7YfMggR.js → assets/chunk-B4BG7PRW-URwnN3Q_.js} +1 -1
  12. package/dist/dashboard/{dist/assets/chunk-DI55MBZ5-B-xsiGYI.js → assets/chunk-DI55MBZ5-CV_d-z8j.js} +1 -1
  13. package/dist/dashboard/assets/{chunk-FMBD7UC4-DRb5NEMr.js → chunk-FMBD7UC4-8DJI9OkS.js} +1 -1
  14. package/dist/dashboard/assets/{chunk-QN33PNHL-BRSlHScq.js → chunk-QN33PNHL-pVzUBBoU.js} +1 -1
  15. package/dist/dashboard/assets/{chunk-QZHKN3VN-Cix7nLqx.js → chunk-QZHKN3VN-DCGN273N.js} +1 -1
  16. package/dist/dashboard/assets/{chunk-TZMSLE5B-BtXpcWN4.js → chunk-TZMSLE5B-D0wY-rJ0.js} +1 -1
  17. package/dist/dashboard/assets/classDiagram-2ON5EDUG-BNi5TogT.js +1 -0
  18. package/dist/dashboard/assets/classDiagram-v2-WZHVMYZB-BNi5TogT.js +1 -0
  19. package/dist/dashboard/assets/clone-m2eeeKVa.js +1 -0
  20. package/dist/dashboard/{dist/assets/cose-bilkent-S5V4N54A-BUkL7Wtq.js → assets/cose-bilkent-S5V4N54A-BIRyRYk0.js} +1 -1
  21. package/dist/dashboard/assets/{dagre-6UL2VRFP-DgEqrxGj.js → dagre-6UL2VRFP-KVIfxT9V.js} +1 -1
  22. package/dist/dashboard/assets/{diagram-PSM6KHXK-Y-M5J_PO.js → diagram-PSM6KHXK-VUmdxoiM.js} +1 -1
  23. package/dist/dashboard/assets/{diagram-QEK2KX5R-BXMS0hEZ.js → diagram-QEK2KX5R-LQ9k2vBy.js} +1 -1
  24. package/dist/dashboard/{dist/assets/diagram-S2PKOQOG--oRtrIMC.js → assets/diagram-S2PKOQOG-DIDe2of5.js} +1 -1
  25. package/dist/dashboard/{dist/assets/erDiagram-Q2GNP2WA-D0MbudeO.js → assets/erDiagram-Q2GNP2WA-CpMIyDcr.js} +1 -1
  26. package/dist/dashboard/{dist/assets/flowDiagram-NV44I4VS-1j044bLK.js → assets/flowDiagram-NV44I4VS-DR2nUASu.js} +1 -1
  27. package/dist/dashboard/assets/{ganttDiagram-JELNMOA3-Cjy_BOl2.js → ganttDiagram-JELNMOA3-C3J3WvDp.js} +1 -1
  28. package/dist/dashboard/{dist/assets/gitGraphDiagram-V2S2FVAM-CuJ5l3TK.js → assets/gitGraphDiagram-V2S2FVAM-C5V2Xlzu.js} +1 -1
  29. package/dist/dashboard/assets/{graph-BVGuJ5gs.js → graph-GSdi8Xy9.js} +1 -1
  30. package/dist/dashboard/{dist/assets/index-D3sRJga7.js → assets/index-Bhd7ZvcY.js} +82 -82
  31. package/dist/dashboard/assets/{infoDiagram-HS3SLOUP-CxmZGT-4.js → infoDiagram-HS3SLOUP-DVP1dWh4.js} +1 -1
  32. package/dist/dashboard/{dist/assets/journeyDiagram-XKPGCS4Q-8hUcTxo0.js → assets/journeyDiagram-XKPGCS4Q-CNHD7swq.js} +1 -1
  33. package/dist/dashboard/{dist/assets/kanban-definition-3W4ZIXB7-BvWm-0QQ.js → assets/kanban-definition-3W4ZIXB7-C-Jc4Ozy.js} +1 -1
  34. package/dist/dashboard/{dist/assets/layout-BFZ0bRU2.js → assets/layout-B0rNqEfo.js} +1 -1
  35. package/dist/dashboard/assets/{mindmap-definition-VGOIOE7T-BVsYbH_c.js → mindmap-definition-VGOIOE7T-hlQXiFXa.js} +1 -1
  36. package/dist/dashboard/assets/{pieDiagram-ADFJNKIX-BpwMMFZ3.js → pieDiagram-ADFJNKIX-CutZB3jG.js} +1 -1
  37. package/dist/dashboard/{dist/assets/quadrantDiagram-AYHSOK5B-C6NljtBN.js → assets/quadrantDiagram-AYHSOK5B-Bv6m-3mt.js} +1 -1
  38. package/dist/dashboard/{dist/assets/requirementDiagram-UZGBJVZJ-B3VaAf8y.js → assets/requirementDiagram-UZGBJVZJ-BQkld-bF.js} +1 -1
  39. package/dist/dashboard/{dist/assets/sankeyDiagram-TZEHDZUN-2ZhiU1NT.js → assets/sankeyDiagram-TZEHDZUN-DCWiCVGp.js} +1 -1
  40. package/dist/dashboard/assets/{sequenceDiagram-WL72ISMW-nMYJrjDT.js → sequenceDiagram-WL72ISMW-Dq_0SNSh.js} +1 -1
  41. package/dist/dashboard/{dist/assets/stateDiagram-FKZM4ZOC-0Wd-KmOv.js → assets/stateDiagram-FKZM4ZOC-BAd-cwxt.js} +1 -1
  42. package/dist/dashboard/assets/stateDiagram-v2-4FDKWEC3-DXlj7mrF.js +1 -0
  43. package/dist/dashboard/{dist/assets/timeline-definition-IT6M3QCI-CAmQOjBu.js → assets/timeline-definition-IT6M3QCI-BlMKo2bz.js} +1 -1
  44. package/dist/dashboard/{dist/assets/treemap-GDKQZRPO-CRP-WvE-.js → assets/treemap-GDKQZRPO-Cn6SBC6j.js} +1 -1
  45. package/dist/dashboard/{dist/assets/xychartDiagram-PRI3JC2R-5DoR2_q5.js → assets/xychartDiagram-PRI3JC2R-DlBeMjr8.js} +1 -1
  46. package/dist/dashboard/index.html +2 -2
  47. package/dist/src/config/defaultConfig.d.ts.map +1 -1
  48. package/dist/src/config/defaultConfig.js +0 -37
  49. package/dist/src/config/types.d.ts +0 -42
  50. package/dist/src/config/types.d.ts.map +1 -1
  51. package/dist/src/config/validateConfig.d.ts.map +1 -1
  52. package/dist/src/config/validateConfig.js +0 -3
  53. package/dist/src/discovery/fileClassifier.d.ts.map +1 -1
  54. package/dist/src/discovery/fileClassifier.js +16 -15
  55. package/dist/src/discovery/projectDiscovery.d.ts.map +1 -1
  56. package/dist/src/discovery/projectDiscovery.js +1 -4
  57. package/dist/src/index.js +93 -254
  58. package/dist/src/inference/businessRuleInference.d.ts.map +1 -1
  59. package/dist/src/inference/businessRuleInference.js +0 -95
  60. package/dist/src/inference/integrationFlowInference.d.ts +1 -11
  61. package/dist/src/inference/integrationFlowInference.d.ts.map +1 -1
  62. package/dist/src/inference/integrationFlowInference.js +2 -49
  63. package/dist/src/inference/routeInference.d.ts.map +1 -1
  64. package/dist/src/inference/routeInference.js +8 -54
  65. package/dist/src/languages/java/semanticBuilder.d.ts.map +1 -1
  66. package/dist/src/languages/java/semanticBuilder.js +12 -69
  67. package/dist/src/languages/javascript/angularDetector.d.ts.map +1 -1
  68. package/dist/src/languages/javascript/angularDetector.js +17 -50
  69. package/dist/src/languages/javascript/assertionResolver.js +4 -6
  70. package/dist/src/languages/javascript/hapiDetector.d.ts.map +1 -1
  71. package/dist/src/languages/javascript/hapiDetector.js +5 -48
  72. package/dist/src/languages/javascript/vueDetector.d.ts +0 -2
  73. package/dist/src/languages/javascript/vueDetector.d.ts.map +1 -1
  74. package/dist/src/languages/javascript/vueDetector.js +0 -22
  75. package/dist/src/languages/python/index.d.ts +1 -1
  76. package/dist/src/languages/python/index.d.ts.map +1 -1
  77. package/dist/src/languages/python/index.js +3 -33
  78. package/dist/src/pipeline/confidence.d.ts +1 -6
  79. package/dist/src/pipeline/confidence.d.ts.map +1 -1
  80. package/dist/src/pipeline/confidence.js +3 -8
  81. package/dist/src/pipeline/graph.d.ts.map +1 -1
  82. package/dist/src/pipeline/graph.js +4 -16
  83. package/dist/src/pipeline/stages/ast/astStage.d.ts.map +1 -1
  84. package/dist/src/pipeline/stages/ast/astStage.js +2 -46
  85. package/dist/src/pipeline/stages/ast/baseUrlComposer.d.ts.map +1 -1
  86. package/dist/src/pipeline/stages/ast/baseUrlComposer.js +4 -18
  87. package/dist/src/pipeline/stages/ast/crossFileResolver.js +0 -29
  88. package/dist/src/pipeline/stages/ast/graphBuilder.d.ts.map +1 -1
  89. package/dist/src/pipeline/stages/ast/graphBuilder.js +0 -81
  90. package/dist/src/pipeline/stages/ast/optionalAuthUnifier.d.ts +1 -3
  91. package/dist/src/pipeline/stages/ast/optionalAuthUnifier.d.ts.map +1 -1
  92. package/dist/src/pipeline/stages/ast/optionalAuthUnifier.js +14 -34
  93. package/dist/src/pipeline/stages/ast/resolvers/angularInjectionResolver.d.ts.map +1 -1
  94. package/dist/src/pipeline/stages/ast/resolvers/angularInjectionResolver.js +3 -22
  95. package/dist/src/pipeline/stages/ast/resolvers/dddLayerResolver.d.ts.map +1 -1
  96. package/dist/src/pipeline/stages/ast/resolvers/dddLayerResolver.js +28 -104
  97. package/dist/src/pipeline/stages/ast/resolvers/mybatisResolver.d.ts.map +1 -1
  98. package/dist/src/pipeline/stages/ast/resolvers/mybatisResolver.js +0 -56
  99. package/dist/src/pipeline/stages/ast/resolvers/vuexActionResolver.d.ts.map +1 -1
  100. package/dist/src/pipeline/stages/ast/resolvers/vuexActionResolver.js +18 -43
  101. package/dist/src/pipeline/stages/ast/rulesEnforcer.d.ts.map +1 -1
  102. package/dist/src/pipeline/stages/ast/rulesEnforcer.js +45 -336
  103. package/dist/src/pipeline/stages/merge/conflictDetector.d.ts +0 -2
  104. package/dist/src/pipeline/stages/merge/conflictDetector.d.ts.map +1 -1
  105. package/dist/src/pipeline/stages/merge/conflictDetector.js +2 -54
  106. package/dist/src/pipeline/stages/merge/coverageMappingBuilder.d.ts.map +1 -1
  107. package/dist/src/pipeline/stages/merge/coverageMappingBuilder.js +3 -67
  108. package/dist/src/pipeline/stages/tia/mockBoundaryDetector.d.ts.map +1 -1
  109. package/dist/src/pipeline/stages/tia/mockBoundaryDetector.js +1 -8
  110. package/dist/src/pipeline/stages/tia/parameterizedTestExpander.js +4 -8
  111. package/dist/src/pipeline/stages/tia/testLayerClassifier.d.ts.map +1 -1
  112. package/dist/src/pipeline/stages/tia/testLayerClassifier.js +10 -36
  113. package/dist/src/pipeline/types.d.ts +1 -1
  114. package/dist/src/pipeline/types.d.ts.map +1 -1
  115. package/package.json +3 -3
  116. package/dist/dashboard/assets/_baseUniq-BZHS9wTU.js +0 -1
  117. package/dist/dashboard/assets/arc-D4xT0thw.js +0 -1
  118. package/dist/dashboard/assets/architectureDiagram-VXUJARFQ-Bs48s9rH.js +0 -36
  119. package/dist/dashboard/assets/c4Diagram-YG6GDRKO-DuP3tG_c.js +0 -10
  120. package/dist/dashboard/assets/channel-YFEOkJua.js +0 -1
  121. package/dist/dashboard/assets/chunk-B4BG7PRW-D5WlZonc.js +0 -165
  122. package/dist/dashboard/assets/chunk-DI55MBZ5-B-xsiGYI.js +0 -220
  123. package/dist/dashboard/assets/classDiagram-2ON5EDUG-CE9rmEXI.js +0 -1
  124. package/dist/dashboard/assets/classDiagram-v2-WZHVMYZB-CE9rmEXI.js +0 -1
  125. package/dist/dashboard/assets/clone-BAVNftx6.js +0 -1
  126. package/dist/dashboard/assets/cose-bilkent-S5V4N54A-DrNDePwE.js +0 -1
  127. package/dist/dashboard/assets/diagram-S2PKOQOG-Bk_jyoxg.js +0 -24
  128. package/dist/dashboard/assets/erDiagram-Q2GNP2WA-BbPQp6RA.js +0 -60
  129. package/dist/dashboard/assets/flowDiagram-NV44I4VS-1j044bLK.js +0 -162
  130. package/dist/dashboard/assets/gitGraphDiagram-V2S2FVAM-RgQMxxaQ.js +0 -65
  131. package/dist/dashboard/assets/index-Bt72YjAZ.css +0 -1
  132. package/dist/dashboard/assets/index-DuT2LnIf.js +0 -523
  133. package/dist/dashboard/assets/journeyDiagram-XKPGCS4Q-CdvZAxeA.js +0 -139
  134. package/dist/dashboard/assets/kanban-definition-3W4ZIXB7-DTse5xX8.js +0 -89
  135. package/dist/dashboard/assets/layout-CnKzeCpQ.js +0 -1
  136. package/dist/dashboard/assets/quadrantDiagram-AYHSOK5B-C6NljtBN.js +0 -7
  137. package/dist/dashboard/assets/requirementDiagram-UZGBJVZJ-Ban4o6oK.js +0 -64
  138. package/dist/dashboard/assets/sankeyDiagram-TZEHDZUN-BDImwZtB.js +0 -10
  139. package/dist/dashboard/assets/stateDiagram-FKZM4ZOC-DkBAMCJV.js +0 -1
  140. package/dist/dashboard/assets/stateDiagram-v2-4FDKWEC3-CtkfyoSn.js +0 -1
  141. package/dist/dashboard/assets/timeline-definition-IT6M3QCI-CGUDCWFx.js +0 -61
  142. package/dist/dashboard/assets/treemap-GDKQZRPO-D-XpcCUD.js +0 -162
  143. package/dist/dashboard/assets/xychartDiagram-PRI3JC2R-BlIpbwyn.js +0 -7
  144. package/dist/dashboard/dist/assets/_basePickBy-C2jmWITn.js +0 -1
  145. package/dist/dashboard/dist/assets/_basePickBy-CErN2e4K.js +0 -1
  146. package/dist/dashboard/dist/assets/_basePickBy-CYB1KXah.js +0 -1
  147. package/dist/dashboard/dist/assets/_basePickBy-D4ml7gdd.js +0 -1
  148. package/dist/dashboard/dist/assets/_basePickBy-D7SXdoHL.js +0 -1
  149. package/dist/dashboard/dist/assets/_basePickBy-DUQHbXda.js +0 -1
  150. package/dist/dashboard/dist/assets/_basePickBy-DZR484hj.js +0 -1
  151. package/dist/dashboard/dist/assets/_basePickBy-_zJIZmFM.js +0 -1
  152. package/dist/dashboard/dist/assets/_baseUniq-BZHS9wTU.js +0 -1
  153. package/dist/dashboard/dist/assets/_baseUniq-BzwtoVZI.js +0 -1
  154. package/dist/dashboard/dist/assets/_baseUniq-C2oBAxY3.js +0 -1
  155. package/dist/dashboard/dist/assets/_baseUniq-CUKBQ2bc.js +0 -1
  156. package/dist/dashboard/dist/assets/_baseUniq-Ct8XEXnH.js +0 -1
  157. package/dist/dashboard/dist/assets/_baseUniq-DE6cyzJb.js +0 -1
  158. package/dist/dashboard/dist/assets/_baseUniq-DzHorfx6.js +0 -1
  159. package/dist/dashboard/dist/assets/arc-B-Q4nGPT.js +0 -1
  160. package/dist/dashboard/dist/assets/arc-B7p8x22e.js +0 -1
  161. package/dist/dashboard/dist/assets/arc-BDOeMmjX.js +0 -1
  162. package/dist/dashboard/dist/assets/arc-BaDRUN_n.js +0 -1
  163. package/dist/dashboard/dist/assets/arc-CjFGY63A.js +0 -1
  164. package/dist/dashboard/dist/assets/arc-D4xT0thw.js +0 -1
  165. package/dist/dashboard/dist/assets/arc-g03p1JXB.js +0 -1
  166. package/dist/dashboard/dist/assets/architectureDiagram-VXUJARFQ-BUdFGrlT.js +0 -36
  167. package/dist/dashboard/dist/assets/architectureDiagram-VXUJARFQ-Bs48s9rH.js +0 -36
  168. package/dist/dashboard/dist/assets/architectureDiagram-VXUJARFQ-CLCqS7Lv.js +0 -36
  169. package/dist/dashboard/dist/assets/architectureDiagram-VXUJARFQ-C_5dqWCI.js +0 -36
  170. package/dist/dashboard/dist/assets/architectureDiagram-VXUJARFQ-WnVycqnT.js +0 -36
  171. package/dist/dashboard/dist/assets/architectureDiagram-VXUJARFQ-mH7lInv5.js +0 -36
  172. package/dist/dashboard/dist/assets/architectureDiagram-VXUJARFQ-wVr1_uNB.js +0 -36
  173. package/dist/dashboard/dist/assets/blockDiagram-VD42YOAC-BBXc88fn.js +0 -122
  174. package/dist/dashboard/dist/assets/blockDiagram-VD42YOAC-BPw-T2eL.js +0 -122
  175. package/dist/dashboard/dist/assets/blockDiagram-VD42YOAC-BvkiW8lj.js +0 -122
  176. package/dist/dashboard/dist/assets/blockDiagram-VD42YOAC-CavSRNuP.js +0 -122
  177. package/dist/dashboard/dist/assets/blockDiagram-VD42YOAC-D-TzNNzc.js +0 -122
  178. package/dist/dashboard/dist/assets/blockDiagram-VD42YOAC-DK0YAM7_.js +0 -122
  179. package/dist/dashboard/dist/assets/blockDiagram-VD42YOAC-DbGIO6Kt.js +0 -122
  180. package/dist/dashboard/dist/assets/blockDiagram-VD42YOAC-V4vxrfzX.js +0 -122
  181. package/dist/dashboard/dist/assets/c4Diagram-YG6GDRKO-Bs4R4b6P.js +0 -10
  182. package/dist/dashboard/dist/assets/c4Diagram-YG6GDRKO-BsgzPfQ3.js +0 -10
  183. package/dist/dashboard/dist/assets/c4Diagram-YG6GDRKO-CAFpcejP.js +0 -10
  184. package/dist/dashboard/dist/assets/c4Diagram-YG6GDRKO-DVnWnYOL.js +0 -10
  185. package/dist/dashboard/dist/assets/c4Diagram-YG6GDRKO-DuP3tG_c.js +0 -10
  186. package/dist/dashboard/dist/assets/c4Diagram-YG6GDRKO-ZEVciqTW.js +0 -10
  187. package/dist/dashboard/dist/assets/c4Diagram-YG6GDRKO-w18S5AEN.js +0 -10
  188. package/dist/dashboard/dist/assets/channel-BSnIwwuG.js +0 -1
  189. package/dist/dashboard/dist/assets/channel-BgeGdqQG.js +0 -1
  190. package/dist/dashboard/dist/assets/channel-CyXkK5KC.js +0 -1
  191. package/dist/dashboard/dist/assets/channel-D5Cq9giL.js +0 -1
  192. package/dist/dashboard/dist/assets/channel-DbeZpf5T.js +0 -1
  193. package/dist/dashboard/dist/assets/channel-Di9el3wE.js +0 -1
  194. package/dist/dashboard/dist/assets/channel-YFEOkJua.js +0 -1
  195. package/dist/dashboard/dist/assets/channel-psxgcQ_j.js +0 -1
  196. package/dist/dashboard/dist/assets/chunk-4BX2VUAB-B9cIE1K2.js +0 -1
  197. package/dist/dashboard/dist/assets/chunk-4BX2VUAB-BDYDsvGv.js +0 -1
  198. package/dist/dashboard/dist/assets/chunk-4BX2VUAB-BF8loPLD.js +0 -1
  199. package/dist/dashboard/dist/assets/chunk-4BX2VUAB-BrU7mtb9.js +0 -1
  200. package/dist/dashboard/dist/assets/chunk-4BX2VUAB-CSJ8KLGx.js +0 -1
  201. package/dist/dashboard/dist/assets/chunk-4BX2VUAB-DY1boKsq.js +0 -1
  202. package/dist/dashboard/dist/assets/chunk-4BX2VUAB-IN53WLTx.js +0 -1
  203. package/dist/dashboard/dist/assets/chunk-4BX2VUAB-oleArqPu.js +0 -1
  204. package/dist/dashboard/dist/assets/chunk-55IACEB6-BIFhHB94.js +0 -1
  205. package/dist/dashboard/dist/assets/chunk-55IACEB6-BSL35gyW.js +0 -1
  206. package/dist/dashboard/dist/assets/chunk-55IACEB6-BzCzmNUn.js +0 -1
  207. package/dist/dashboard/dist/assets/chunk-55IACEB6-C3HNF-UF.js +0 -1
  208. package/dist/dashboard/dist/assets/chunk-55IACEB6-CiEoroXY.js +0 -1
  209. package/dist/dashboard/dist/assets/chunk-55IACEB6-DV6VmXIy.js +0 -1
  210. package/dist/dashboard/dist/assets/chunk-55IACEB6-DwsmCNp_.js +0 -1
  211. package/dist/dashboard/dist/assets/chunk-55IACEB6-kJkjQYxk.js +0 -1
  212. package/dist/dashboard/dist/assets/chunk-B4BG7PRW-B3IrqteW.js +0 -165
  213. package/dist/dashboard/dist/assets/chunk-B4BG7PRW-BChq1Wly.js +0 -165
  214. package/dist/dashboard/dist/assets/chunk-B4BG7PRW-BiYJ9gu_.js +0 -165
  215. package/dist/dashboard/dist/assets/chunk-B4BG7PRW-CCMwwYCe.js +0 -165
  216. package/dist/dashboard/dist/assets/chunk-B4BG7PRW-D5WlZonc.js +0 -165
  217. package/dist/dashboard/dist/assets/chunk-B4BG7PRW-eTDXrKrv.js +0 -165
  218. package/dist/dashboard/dist/assets/chunk-B4BG7PRW-wQ6TCEMq.js +0 -165
  219. package/dist/dashboard/dist/assets/chunk-DI55MBZ5-B7xHuqZu.js +0 -220
  220. package/dist/dashboard/dist/assets/chunk-DI55MBZ5-BD9C9H7Y.js +0 -220
  221. package/dist/dashboard/dist/assets/chunk-DI55MBZ5-BTfzxsg4.js +0 -220
  222. package/dist/dashboard/dist/assets/chunk-DI55MBZ5-CSRqV3_6.js +0 -220
  223. package/dist/dashboard/dist/assets/chunk-DI55MBZ5-D7eiRvhB.js +0 -220
  224. package/dist/dashboard/dist/assets/chunk-DI55MBZ5-DfslhtXS.js +0 -220
  225. package/dist/dashboard/dist/assets/chunk-DI55MBZ5-M-8I3jEy.js +0 -220
  226. package/dist/dashboard/dist/assets/chunk-FMBD7UC4-BBMfQbw1.js +0 -15
  227. package/dist/dashboard/dist/assets/chunk-FMBD7UC4-BgEzYy_c.js +0 -15
  228. package/dist/dashboard/dist/assets/chunk-FMBD7UC4-CtTcDWZJ.js +0 -15
  229. package/dist/dashboard/dist/assets/chunk-FMBD7UC4-CyF99olo.js +0 -15
  230. package/dist/dashboard/dist/assets/chunk-FMBD7UC4-DRb5NEMr.js +0 -15
  231. package/dist/dashboard/dist/assets/chunk-FMBD7UC4-K3PC79JF.js +0 -15
  232. package/dist/dashboard/dist/assets/chunk-FMBD7UC4-V0V2L4Gq.js +0 -15
  233. package/dist/dashboard/dist/assets/chunk-FMBD7UC4-bSA0XiS0.js +0 -15
  234. package/dist/dashboard/dist/assets/chunk-QN33PNHL-BBQ6Q-9S.js +0 -1
  235. package/dist/dashboard/dist/assets/chunk-QN33PNHL-BNX7uRa_.js +0 -1
  236. package/dist/dashboard/dist/assets/chunk-QN33PNHL-BRSlHScq.js +0 -1
  237. package/dist/dashboard/dist/assets/chunk-QN33PNHL-BrOIYUBs.js +0 -1
  238. package/dist/dashboard/dist/assets/chunk-QN33PNHL-CCuhlE1C.js +0 -1
  239. package/dist/dashboard/dist/assets/chunk-QN33PNHL-CmeZ1h1Z.js +0 -1
  240. package/dist/dashboard/dist/assets/chunk-QN33PNHL-DFgUs0T8.js +0 -1
  241. package/dist/dashboard/dist/assets/chunk-QN33PNHL-JcQZ0Q-Q.js +0 -1
  242. package/dist/dashboard/dist/assets/chunk-QZHKN3VN-9uXt-06K.js +0 -1
  243. package/dist/dashboard/dist/assets/chunk-QZHKN3VN-Cix7nLqx.js +0 -1
  244. package/dist/dashboard/dist/assets/chunk-QZHKN3VN-CliaQGD4.js +0 -1
  245. package/dist/dashboard/dist/assets/chunk-QZHKN3VN-Cyg7Km90.js +0 -1
  246. package/dist/dashboard/dist/assets/chunk-QZHKN3VN-DKgOcPif.js +0 -1
  247. package/dist/dashboard/dist/assets/chunk-QZHKN3VN-MNv3v4He.js +0 -1
  248. package/dist/dashboard/dist/assets/chunk-QZHKN3VN-T5hoQANf.js +0 -1
  249. package/dist/dashboard/dist/assets/chunk-QZHKN3VN-mq-zucvn.js +0 -1
  250. package/dist/dashboard/dist/assets/chunk-TZMSLE5B-BjDMUc_L.js +0 -1
  251. package/dist/dashboard/dist/assets/chunk-TZMSLE5B-BoJFBewj.js +0 -1
  252. package/dist/dashboard/dist/assets/chunk-TZMSLE5B-BtXpcWN4.js +0 -1
  253. package/dist/dashboard/dist/assets/chunk-TZMSLE5B-C8KNXDi7.js +0 -1
  254. package/dist/dashboard/dist/assets/chunk-TZMSLE5B-CyhcxGB1.js +0 -1
  255. package/dist/dashboard/dist/assets/chunk-TZMSLE5B-DGTVcqTS.js +0 -1
  256. package/dist/dashboard/dist/assets/chunk-TZMSLE5B-DqMNcR7I.js +0 -1
  257. package/dist/dashboard/dist/assets/chunk-TZMSLE5B-F1fppg7C.js +0 -1
  258. package/dist/dashboard/dist/assets/classDiagram-2ON5EDUG-AMwn99HP.js +0 -1
  259. package/dist/dashboard/dist/assets/classDiagram-2ON5EDUG-BbkwHRko.js +0 -1
  260. package/dist/dashboard/dist/assets/classDiagram-2ON5EDUG-Be0F7AG8.js +0 -1
  261. package/dist/dashboard/dist/assets/classDiagram-2ON5EDUG-BkGN4Cpz.js +0 -1
  262. package/dist/dashboard/dist/assets/classDiagram-2ON5EDUG-CE9rmEXI.js +0 -1
  263. package/dist/dashboard/dist/assets/classDiagram-2ON5EDUG-CM6Qs-Qs.js +0 -1
  264. package/dist/dashboard/dist/assets/classDiagram-2ON5EDUG-D3VDjeKC.js +0 -1
  265. package/dist/dashboard/dist/assets/classDiagram-2ON5EDUG-o8p5Y0H9.js +0 -1
  266. package/dist/dashboard/dist/assets/classDiagram-v2-WZHVMYZB-AMwn99HP.js +0 -1
  267. package/dist/dashboard/dist/assets/classDiagram-v2-WZHVMYZB-BbkwHRko.js +0 -1
  268. package/dist/dashboard/dist/assets/classDiagram-v2-WZHVMYZB-Be0F7AG8.js +0 -1
  269. package/dist/dashboard/dist/assets/classDiagram-v2-WZHVMYZB-BkGN4Cpz.js +0 -1
  270. package/dist/dashboard/dist/assets/classDiagram-v2-WZHVMYZB-CE9rmEXI.js +0 -1
  271. package/dist/dashboard/dist/assets/classDiagram-v2-WZHVMYZB-CM6Qs-Qs.js +0 -1
  272. package/dist/dashboard/dist/assets/classDiagram-v2-WZHVMYZB-D3VDjeKC.js +0 -1
  273. package/dist/dashboard/dist/assets/classDiagram-v2-WZHVMYZB-o8p5Y0H9.js +0 -1
  274. package/dist/dashboard/dist/assets/clone-B5PF81Z3.js +0 -1
  275. package/dist/dashboard/dist/assets/clone-BAVNftx6.js +0 -1
  276. package/dist/dashboard/dist/assets/clone-BmpQ0ely.js +0 -1
  277. package/dist/dashboard/dist/assets/clone-CKIuLE_W.js +0 -1
  278. package/dist/dashboard/dist/assets/clone-Cv0cxIIi.js +0 -1
  279. package/dist/dashboard/dist/assets/clone-Cvq8JuOb.js +0 -1
  280. package/dist/dashboard/dist/assets/clone-DEYRVSAn.js +0 -1
  281. package/dist/dashboard/dist/assets/clone-KEkbvJY9.js +0 -1
  282. package/dist/dashboard/dist/assets/cose-bilkent-S5V4N54A-DLYZ4dZA.js +0 -1
  283. package/dist/dashboard/dist/assets/cose-bilkent-S5V4N54A-DMGRGhwB.js +0 -1
  284. package/dist/dashboard/dist/assets/cose-bilkent-S5V4N54A-DrNDePwE.js +0 -1
  285. package/dist/dashboard/dist/assets/cose-bilkent-S5V4N54A-GjySlYac.js +0 -1
  286. package/dist/dashboard/dist/assets/cose-bilkent-S5V4N54A-UX3RfzXW.js +0 -1
  287. package/dist/dashboard/dist/assets/cose-bilkent-S5V4N54A-YL9kFxCl.js +0 -1
  288. package/dist/dashboard/dist/assets/cose-bilkent-S5V4N54A-xVw-THr_.js +0 -1
  289. package/dist/dashboard/dist/assets/cytoscape.esm-CyJtwmzi.js +0 -331
  290. package/dist/dashboard/dist/assets/dagre-6UL2VRFP-B8oEROJc.js +0 -4
  291. package/dist/dashboard/dist/assets/dagre-6UL2VRFP-BO79zHpJ.js +0 -4
  292. package/dist/dashboard/dist/assets/dagre-6UL2VRFP-Bjadb8g_.js +0 -4
  293. package/dist/dashboard/dist/assets/dagre-6UL2VRFP-CJT7lofP.js +0 -4
  294. package/dist/dashboard/dist/assets/dagre-6UL2VRFP-CUx6EwnW.js +0 -4
  295. package/dist/dashboard/dist/assets/dagre-6UL2VRFP-D03qnh38.js +0 -4
  296. package/dist/dashboard/dist/assets/dagre-6UL2VRFP-DgEqrxGj.js +0 -4
  297. package/dist/dashboard/dist/assets/dagre-6UL2VRFP-NZWnQN_Y.js +0 -4
  298. package/dist/dashboard/dist/assets/diagram-PSM6KHXK-5uki9Dw8.js +0 -24
  299. package/dist/dashboard/dist/assets/diagram-PSM6KHXK-BPFtplp4.js +0 -24
  300. package/dist/dashboard/dist/assets/diagram-PSM6KHXK-BgOmComt.js +0 -24
  301. package/dist/dashboard/dist/assets/diagram-PSM6KHXK-DGtyS7lD.js +0 -24
  302. package/dist/dashboard/dist/assets/diagram-PSM6KHXK-D__FKIzE.js +0 -24
  303. package/dist/dashboard/dist/assets/diagram-PSM6KHXK-DtE0cTIs.js +0 -24
  304. package/dist/dashboard/dist/assets/diagram-PSM6KHXK-JEfxbZj6.js +0 -24
  305. package/dist/dashboard/dist/assets/diagram-PSM6KHXK-Y-M5J_PO.js +0 -24
  306. package/dist/dashboard/dist/assets/diagram-QEK2KX5R-1hjfopmw.js +0 -43
  307. package/dist/dashboard/dist/assets/diagram-QEK2KX5R-BHyZd544.js +0 -43
  308. package/dist/dashboard/dist/assets/diagram-QEK2KX5R-BRNhmby2.js +0 -43
  309. package/dist/dashboard/dist/assets/diagram-QEK2KX5R-BXMS0hEZ.js +0 -43
  310. package/dist/dashboard/dist/assets/diagram-QEK2KX5R-BtOA2yYh.js +0 -43
  311. package/dist/dashboard/dist/assets/diagram-QEK2KX5R-CSCGZUfr.js +0 -43
  312. package/dist/dashboard/dist/assets/diagram-QEK2KX5R-CYK-aLR5.js +0 -43
  313. package/dist/dashboard/dist/assets/diagram-QEK2KX5R-CYxueP7U.js +0 -43
  314. package/dist/dashboard/dist/assets/diagram-S2PKOQOG-Bk_jyoxg.js +0 -24
  315. package/dist/dashboard/dist/assets/diagram-S2PKOQOG-CRUXUQeh.js +0 -24
  316. package/dist/dashboard/dist/assets/diagram-S2PKOQOG-CzytkAcm.js +0 -24
  317. package/dist/dashboard/dist/assets/diagram-S2PKOQOG-D-ku_X8U.js +0 -24
  318. package/dist/dashboard/dist/assets/diagram-S2PKOQOG-DdqZVGN1.js +0 -24
  319. package/dist/dashboard/dist/assets/diagram-S2PKOQOG-Gj3ANjIG.js +0 -24
  320. package/dist/dashboard/dist/assets/diagram-S2PKOQOG-qvXlTDud.js +0 -24
  321. package/dist/dashboard/dist/assets/erDiagram-Q2GNP2WA-BbPQp6RA.js +0 -60
  322. package/dist/dashboard/dist/assets/erDiagram-Q2GNP2WA-DDk1KpRF.js +0 -60
  323. package/dist/dashboard/dist/assets/erDiagram-Q2GNP2WA-DGl6gPe2.js +0 -60
  324. package/dist/dashboard/dist/assets/erDiagram-Q2GNP2WA-DSC5VPcF.js +0 -60
  325. package/dist/dashboard/dist/assets/erDiagram-Q2GNP2WA-DZpjLrp5.js +0 -60
  326. package/dist/dashboard/dist/assets/erDiagram-Q2GNP2WA-Dhb_VQMS.js +0 -60
  327. package/dist/dashboard/dist/assets/erDiagram-Q2GNP2WA-DvI8ycM6.js +0 -60
  328. package/dist/dashboard/dist/assets/flowDiagram-NV44I4VS-BAHshMEg.js +0 -162
  329. package/dist/dashboard/dist/assets/flowDiagram-NV44I4VS-CBnhpWKd.js +0 -162
  330. package/dist/dashboard/dist/assets/flowDiagram-NV44I4VS-CYXUqE3L.js +0 -162
  331. package/dist/dashboard/dist/assets/flowDiagram-NV44I4VS-Co89qYBD.js +0 -162
  332. package/dist/dashboard/dist/assets/flowDiagram-NV44I4VS-DRAD4OG7.js +0 -162
  333. package/dist/dashboard/dist/assets/flowDiagram-NV44I4VS-PVleScVK.js +0 -162
  334. package/dist/dashboard/dist/assets/flowDiagram-NV44I4VS-gKUH-GJ2.js +0 -162
  335. package/dist/dashboard/dist/assets/ganttDiagram-JELNMOA3-2r3WpWQC.js +0 -267
  336. package/dist/dashboard/dist/assets/ganttDiagram-JELNMOA3-BA65eVi0.js +0 -267
  337. package/dist/dashboard/dist/assets/ganttDiagram-JELNMOA3-BS4JnN-M.js +0 -267
  338. package/dist/dashboard/dist/assets/ganttDiagram-JELNMOA3-Cjy_BOl2.js +0 -267
  339. package/dist/dashboard/dist/assets/ganttDiagram-JELNMOA3-CsUMU5Ws.js +0 -267
  340. package/dist/dashboard/dist/assets/ganttDiagram-JELNMOA3-DK_45K6s.js +0 -267
  341. package/dist/dashboard/dist/assets/ganttDiagram-JELNMOA3-DX-lROHt.js +0 -267
  342. package/dist/dashboard/dist/assets/ganttDiagram-JELNMOA3-Dm_lLo9y.js +0 -267
  343. package/dist/dashboard/dist/assets/gitGraphDiagram-V2S2FVAM-C9NpbucY.js +0 -65
  344. package/dist/dashboard/dist/assets/gitGraphDiagram-V2S2FVAM-CWo2OK69.js +0 -65
  345. package/dist/dashboard/dist/assets/gitGraphDiagram-V2S2FVAM-DM9AW1aP.js +0 -65
  346. package/dist/dashboard/dist/assets/gitGraphDiagram-V2S2FVAM-DYrdM8tK.js +0 -65
  347. package/dist/dashboard/dist/assets/gitGraphDiagram-V2S2FVAM-RgQMxxaQ.js +0 -65
  348. package/dist/dashboard/dist/assets/gitGraphDiagram-V2S2FVAM-Uz3nRdju.js +0 -65
  349. package/dist/dashboard/dist/assets/gitGraphDiagram-V2S2FVAM-bYKe_efj.js +0 -65
  350. package/dist/dashboard/dist/assets/graph-BP2ns4se.js +0 -1
  351. package/dist/dashboard/dist/assets/graph-BVGuJ5gs.js +0 -1
  352. package/dist/dashboard/dist/assets/graph-CD7-npU0.js +0 -1
  353. package/dist/dashboard/dist/assets/graph-Clj85F2M.js +0 -1
  354. package/dist/dashboard/dist/assets/graph-CpRVMcWW.js +0 -1
  355. package/dist/dashboard/dist/assets/graph-Cwn7jgQS.js +0 -1
  356. package/dist/dashboard/dist/assets/graph-ZtgwAPQj.js +0 -1
  357. package/dist/dashboard/dist/assets/graph-gV0gk5Dq.js +0 -1
  358. package/dist/dashboard/dist/assets/index-Bt72YjAZ.css +0 -1
  359. package/dist/dashboard/dist/assets/index-ByH_nEhG.js +0 -523
  360. package/dist/dashboard/dist/assets/index-C302ingQ.css +0 -1
  361. package/dist/dashboard/dist/assets/index-CqEIqNus.js +0 -781
  362. package/dist/dashboard/dist/assets/index-D-AtVpd2.js +0 -523
  363. package/dist/dashboard/dist/assets/index-D3_88Gr5.js +0 -777
  364. package/dist/dashboard/dist/assets/index-DEXwnExZ.js +0 -523
  365. package/dist/dashboard/dist/assets/index-DbUdNJca.js +0 -781
  366. package/dist/dashboard/dist/assets/index-DuT2LnIf.js +0 -523
  367. package/dist/dashboard/dist/assets/index-xecKLQ58.css +0 -1
  368. package/dist/dashboard/dist/assets/infoDiagram-HS3SLOUP-BMp4C5wf.js +0 -2
  369. package/dist/dashboard/dist/assets/infoDiagram-HS3SLOUP-BjChBCME.js +0 -2
  370. package/dist/dashboard/dist/assets/infoDiagram-HS3SLOUP-BxoN3QPh.js +0 -2
  371. package/dist/dashboard/dist/assets/infoDiagram-HS3SLOUP-CxmZGT-4.js +0 -2
  372. package/dist/dashboard/dist/assets/infoDiagram-HS3SLOUP-D3SFXNAS.js +0 -2
  373. package/dist/dashboard/dist/assets/infoDiagram-HS3SLOUP-DyT5Fs8R.js +0 -2
  374. package/dist/dashboard/dist/assets/infoDiagram-HS3SLOUP-HLwGZBHJ.js +0 -2
  375. package/dist/dashboard/dist/assets/infoDiagram-HS3SLOUP-ujnMqVz3.js +0 -2
  376. package/dist/dashboard/dist/assets/journeyDiagram-XKPGCS4Q-BC0GSZ7W.js +0 -139
  377. package/dist/dashboard/dist/assets/journeyDiagram-XKPGCS4Q-Bv1IeJ8A.js +0 -139
  378. package/dist/dashboard/dist/assets/journeyDiagram-XKPGCS4Q-CFgbI9OH.js +0 -139
  379. package/dist/dashboard/dist/assets/journeyDiagram-XKPGCS4Q-CdvZAxeA.js +0 -139
  380. package/dist/dashboard/dist/assets/journeyDiagram-XKPGCS4Q-CiMM9buE.js +0 -139
  381. package/dist/dashboard/dist/assets/journeyDiagram-XKPGCS4Q-DQzfeBIo.js +0 -139
  382. package/dist/dashboard/dist/assets/journeyDiagram-XKPGCS4Q-nYZBlgTD.js +0 -139
  383. package/dist/dashboard/dist/assets/kanban-definition-3W4ZIXB7-AkiB-BRk.js +0 -89
  384. package/dist/dashboard/dist/assets/kanban-definition-3W4ZIXB7-BjYw_9v5.js +0 -89
  385. package/dist/dashboard/dist/assets/kanban-definition-3W4ZIXB7-COTfX74l.js +0 -89
  386. package/dist/dashboard/dist/assets/kanban-definition-3W4ZIXB7-D3u5Ov-5.js +0 -89
  387. package/dist/dashboard/dist/assets/kanban-definition-3W4ZIXB7-D6aRd_q1.js +0 -89
  388. package/dist/dashboard/dist/assets/kanban-definition-3W4ZIXB7-DTse5xX8.js +0 -89
  389. package/dist/dashboard/dist/assets/kanban-definition-3W4ZIXB7-ueIaoeks.js +0 -89
  390. package/dist/dashboard/dist/assets/katex-O9d3_IXG.js +0 -261
  391. package/dist/dashboard/dist/assets/layout-6njVG9Ld.js +0 -1
  392. package/dist/dashboard/dist/assets/layout-B1fTYUMj.js +0 -1
  393. package/dist/dashboard/dist/assets/layout-BbJNDkTr.js +0 -1
  394. package/dist/dashboard/dist/assets/layout-BwmMaJCx.js +0 -1
  395. package/dist/dashboard/dist/assets/layout-CnKzeCpQ.js +0 -1
  396. package/dist/dashboard/dist/assets/layout-DgtRACDS.js +0 -1
  397. package/dist/dashboard/dist/assets/layout-JbkTCGhr.js +0 -1
  398. package/dist/dashboard/dist/assets/mindmap-definition-VGOIOE7T-B7wYeLe1.js +0 -68
  399. package/dist/dashboard/dist/assets/mindmap-definition-VGOIOE7T-B93XW27v.js +0 -68
  400. package/dist/dashboard/dist/assets/mindmap-definition-VGOIOE7T-BJ5xCmsL.js +0 -68
  401. package/dist/dashboard/dist/assets/mindmap-definition-VGOIOE7T-BVsYbH_c.js +0 -68
  402. package/dist/dashboard/dist/assets/mindmap-definition-VGOIOE7T-CkyYtMaD.js +0 -68
  403. package/dist/dashboard/dist/assets/mindmap-definition-VGOIOE7T-CmcASbkx.js +0 -68
  404. package/dist/dashboard/dist/assets/mindmap-definition-VGOIOE7T-D001Ygrx.js +0 -68
  405. package/dist/dashboard/dist/assets/mindmap-definition-VGOIOE7T-QDZ_z8OE.js +0 -68
  406. package/dist/dashboard/dist/assets/pieDiagram-ADFJNKIX-5pSPRGJ2.js +0 -30
  407. package/dist/dashboard/dist/assets/pieDiagram-ADFJNKIX-9G1tEuaq.js +0 -30
  408. package/dist/dashboard/dist/assets/pieDiagram-ADFJNKIX-BIOVbZG_.js +0 -30
  409. package/dist/dashboard/dist/assets/pieDiagram-ADFJNKIX-Bf8vKEOf.js +0 -30
  410. package/dist/dashboard/dist/assets/pieDiagram-ADFJNKIX-BpwMMFZ3.js +0 -30
  411. package/dist/dashboard/dist/assets/pieDiagram-ADFJNKIX-DOXOzepj.js +0 -30
  412. package/dist/dashboard/dist/assets/pieDiagram-ADFJNKIX-EeNihpUP.js +0 -30
  413. package/dist/dashboard/dist/assets/pieDiagram-ADFJNKIX-uWFQFMEe.js +0 -30
  414. package/dist/dashboard/dist/assets/quadrantDiagram-AYHSOK5B-Bwppivuy.js +0 -7
  415. package/dist/dashboard/dist/assets/quadrantDiagram-AYHSOK5B-CM8qiFLR.js +0 -7
  416. package/dist/dashboard/dist/assets/quadrantDiagram-AYHSOK5B-Crgu5WqK.js +0 -7
  417. package/dist/dashboard/dist/assets/quadrantDiagram-AYHSOK5B-CtbMtM_F.js +0 -7
  418. package/dist/dashboard/dist/assets/quadrantDiagram-AYHSOK5B-i3-JTN3e.js +0 -7
  419. package/dist/dashboard/dist/assets/quadrantDiagram-AYHSOK5B-jDtdB4Ws.js +0 -7
  420. package/dist/dashboard/dist/assets/quadrantDiagram-AYHSOK5B-o21Z8BWo.js +0 -7
  421. package/dist/dashboard/dist/assets/requirementDiagram-UZGBJVZJ-Ban4o6oK.js +0 -64
  422. package/dist/dashboard/dist/assets/requirementDiagram-UZGBJVZJ-BfAcJrqc.js +0 -64
  423. package/dist/dashboard/dist/assets/requirementDiagram-UZGBJVZJ-CgXxZ2rH.js +0 -64
  424. package/dist/dashboard/dist/assets/requirementDiagram-UZGBJVZJ-ClNSNeYe.js +0 -64
  425. package/dist/dashboard/dist/assets/requirementDiagram-UZGBJVZJ-DPTtP4Ve.js +0 -64
  426. package/dist/dashboard/dist/assets/requirementDiagram-UZGBJVZJ-Dw260IiT.js +0 -64
  427. package/dist/dashboard/dist/assets/requirementDiagram-UZGBJVZJ-WIJ0qiJG.js +0 -64
  428. package/dist/dashboard/dist/assets/sankeyDiagram-TZEHDZUN-BDImwZtB.js +0 -10
  429. package/dist/dashboard/dist/assets/sankeyDiagram-TZEHDZUN-BFNTuDV7.js +0 -10
  430. package/dist/dashboard/dist/assets/sankeyDiagram-TZEHDZUN-Cb4WB9UB.js +0 -10
  431. package/dist/dashboard/dist/assets/sankeyDiagram-TZEHDZUN-D2OGoxU5.js +0 -10
  432. package/dist/dashboard/dist/assets/sankeyDiagram-TZEHDZUN-DEVTdH0h.js +0 -10
  433. package/dist/dashboard/dist/assets/sankeyDiagram-TZEHDZUN-LR8T4Hv0.js +0 -10
  434. package/dist/dashboard/dist/assets/sankeyDiagram-TZEHDZUN-VcdyPlVE.js +0 -10
  435. package/dist/dashboard/dist/assets/sequenceDiagram-WL72ISMW-1d8_kyI3.js +0 -145
  436. package/dist/dashboard/dist/assets/sequenceDiagram-WL72ISMW-97qjzqIO.js +0 -145
  437. package/dist/dashboard/dist/assets/sequenceDiagram-WL72ISMW-Bjr5wgXg.js +0 -145
  438. package/dist/dashboard/dist/assets/sequenceDiagram-WL72ISMW-BqGJWVUS.js +0 -145
  439. package/dist/dashboard/dist/assets/sequenceDiagram-WL72ISMW-C5h60fvZ.js +0 -145
  440. package/dist/dashboard/dist/assets/sequenceDiagram-WL72ISMW-DBqchhlr.js +0 -145
  441. package/dist/dashboard/dist/assets/sequenceDiagram-WL72ISMW-DOr6An-q.js +0 -145
  442. package/dist/dashboard/dist/assets/sequenceDiagram-WL72ISMW-nMYJrjDT.js +0 -145
  443. package/dist/dashboard/dist/assets/stateDiagram-FKZM4ZOC-BWqoDymf.js +0 -1
  444. package/dist/dashboard/dist/assets/stateDiagram-FKZM4ZOC-Bl16d4W5.js +0 -1
  445. package/dist/dashboard/dist/assets/stateDiagram-FKZM4ZOC-C1KYr7Wj.js +0 -1
  446. package/dist/dashboard/dist/assets/stateDiagram-FKZM4ZOC-DDrhZYly.js +0 -1
  447. package/dist/dashboard/dist/assets/stateDiagram-FKZM4ZOC-DKkWVu_K.js +0 -1
  448. package/dist/dashboard/dist/assets/stateDiagram-FKZM4ZOC-DkBAMCJV.js +0 -1
  449. package/dist/dashboard/dist/assets/stateDiagram-FKZM4ZOC-DlLDy54e.js +0 -1
  450. package/dist/dashboard/dist/assets/stateDiagram-v2-4FDKWEC3-B05ygO34.js +0 -1
  451. package/dist/dashboard/dist/assets/stateDiagram-v2-4FDKWEC3-B0euQu1p.js +0 -1
  452. package/dist/dashboard/dist/assets/stateDiagram-v2-4FDKWEC3-BlwaoFEG.js +0 -1
  453. package/dist/dashboard/dist/assets/stateDiagram-v2-4FDKWEC3-CtkfyoSn.js +0 -1
  454. package/dist/dashboard/dist/assets/stateDiagram-v2-4FDKWEC3-DRV_IYr6.js +0 -1
  455. package/dist/dashboard/dist/assets/stateDiagram-v2-4FDKWEC3-Im6pH8C-.js +0 -1
  456. package/dist/dashboard/dist/assets/stateDiagram-v2-4FDKWEC3-K_qkvHaB.js +0 -1
  457. package/dist/dashboard/dist/assets/stateDiagram-v2-4FDKWEC3-pZ_Rrx6C.js +0 -1
  458. package/dist/dashboard/dist/assets/timeline-definition-IT6M3QCI-CBR9kqeJ.js +0 -61
  459. package/dist/dashboard/dist/assets/timeline-definition-IT6M3QCI-CGUDCWFx.js +0 -61
  460. package/dist/dashboard/dist/assets/timeline-definition-IT6M3QCI-CLdinkid.js +0 -61
  461. package/dist/dashboard/dist/assets/timeline-definition-IT6M3QCI-CsRS0WGC.js +0 -61
  462. package/dist/dashboard/dist/assets/timeline-definition-IT6M3QCI-D6JNee_P.js +0 -61
  463. package/dist/dashboard/dist/assets/timeline-definition-IT6M3QCI-DAT3r9va.js +0 -61
  464. package/dist/dashboard/dist/assets/timeline-definition-IT6M3QCI-DR6HNny6.js +0 -61
  465. package/dist/dashboard/dist/assets/treemap-GDKQZRPO-BlA8rg0m.js +0 -162
  466. package/dist/dashboard/dist/assets/treemap-GDKQZRPO-CBle3d0d.js +0 -162
  467. package/dist/dashboard/dist/assets/treemap-GDKQZRPO-CCvvSJBX.js +0 -162
  468. package/dist/dashboard/dist/assets/treemap-GDKQZRPO-Cw9mkiYN.js +0 -162
  469. package/dist/dashboard/dist/assets/treemap-GDKQZRPO-D-XpcCUD.js +0 -162
  470. package/dist/dashboard/dist/assets/treemap-GDKQZRPO-MpQr6tee.js +0 -162
  471. package/dist/dashboard/dist/assets/treemap-GDKQZRPO-vW7FSd7C.js +0 -162
  472. package/dist/dashboard/dist/assets/xychartDiagram-PRI3JC2R-7aSkQtVu.js +0 -7
  473. package/dist/dashboard/dist/assets/xychartDiagram-PRI3JC2R-B72UwDAP.js +0 -7
  474. package/dist/dashboard/dist/assets/xychartDiagram-PRI3JC2R-BceejIon.js +0 -7
  475. package/dist/dashboard/dist/assets/xychartDiagram-PRI3JC2R-BlIpbwyn.js +0 -7
  476. package/dist/dashboard/dist/assets/xychartDiagram-PRI3JC2R-ByLRWyI2.js +0 -7
  477. package/dist/dashboard/dist/assets/xychartDiagram-PRI3JC2R-DjyK-sw-.js +0 -7
  478. package/dist/dashboard/dist/assets/xychartDiagram-PRI3JC2R-bS40I4IT.js +0 -7
  479. package/dist/dashboard/dist/index.html +0 -14
  480. package/dist/dashboard/dist/reports/business-coverage.json +0 -201
  481. package/dist/dashboard/dist/reports/coverage-intelligence.json +0 -728
  482. package/dist/dashboard/dist/reports/coverage-summary.json +0 -763
  483. package/dist/dashboard/dist/reports/endpoint-coverage.json +0 -336
  484. package/dist/dashboard/dist/reports/error-coverage.json +0 -367
  485. package/dist/dashboard/dist/reports/missing-tests-recommendations.json +0 -285
  486. package/dist/dashboard/dist/reports/risk-prioritization.json +0 -312
  487. package/dist/dashboard/dist/reports/security-coverage.json +0 -299
  488. package/dist/dashboard/dist/vite.svg +0 -1
  489. package/dist/dashboard/reports/coverage-summary.json +0 -763
  490. package/dist/src/generation/ai-flow-exporter.d.ts +0 -7
  491. package/dist/src/generation/ai-flow-exporter.d.ts.map +0 -1
  492. package/dist/src/generation/ai-flow-exporter.js +0 -260
  493. package/dist/src/generation/context-builder.d.ts +0 -16
  494. package/dist/src/generation/context-builder.d.ts.map +0 -1
  495. package/dist/src/generation/context-builder.js +0 -170
  496. package/dist/src/generation/engine.d.ts +0 -19
  497. package/dist/src/generation/engine.d.ts.map +0 -1
  498. package/dist/src/generation/engine.js +0 -204
  499. package/dist/src/generation/file-router.d.ts +0 -8
  500. package/dist/src/generation/file-router.d.ts.map +0 -1
  501. package/dist/src/generation/file-router.js +0 -98
  502. package/dist/src/generation/gap-extractor.d.ts +0 -7
  503. package/dist/src/generation/gap-extractor.d.ts.map +0 -1
  504. package/dist/src/generation/gap-extractor.js +0 -291
  505. package/dist/src/generation/index.d.ts +0 -9
  506. package/dist/src/generation/index.d.ts.map +0 -1
  507. package/dist/src/generation/index.js +0 -15
  508. package/dist/src/generation/quality-scorer.d.ts +0 -15
  509. package/dist/src/generation/quality-scorer.d.ts.map +0 -1
  510. package/dist/src/generation/quality-scorer.js +0 -273
  511. package/dist/src/generation/template-renderer.d.ts +0 -12
  512. package/dist/src/generation/template-renderer.d.ts.map +0 -1
  513. package/dist/src/generation/template-renderer.js +0 -546
  514. package/dist/src/generation/types.d.ts +0 -269
  515. package/dist/src/generation/types.d.ts.map +0 -1
  516. package/dist/src/generation/types.js +0 -6
  517. /package/dist/dashboard/{dist/assets → assets}/index-D_begBP0.css +0 -0
package/dist/src/index.js CHANGED
@@ -63,7 +63,6 @@ const integrationFlowInference_1 = require("./inference/integrationFlowInference
63
63
  const routeInference_1 = require("./inference/routeInference");
64
64
  const scanManifest_1 = require("./inference/scanManifest");
65
65
  const serveDashboard_1 = require("./serveDashboard");
66
- const index_4 = require("./generation/index");
67
66
  // Register all language AST analyzers at startup.
68
67
  // This side-effect import ensures each language module's registerAnalyzer() call runs.
69
68
  (0, astAnalysisOrchestrator_1.registerAllAnalyzers)();
@@ -1403,7 +1402,7 @@ program
1403
1402
  .option('--port <port>', 'Port for the dashboard server (requires --dashboard)', parseInt)
1404
1403
  .option('--open', 'Open the dashboard in your browser automatically (requires --dashboard)')
1405
1404
  .action(async (options) => {
1406
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w;
1405
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u;
1407
1406
  const { metricsPort, serviceName } = setupObservability();
1408
1407
  const logger = (0, observability_1.getLogger)();
1409
1408
  const configPath = program.opts()['config'];
@@ -1456,7 +1455,7 @@ program
1456
1455
  }
1457
1456
  // ── 3. Integration flow inference ──────────────────────────────────────
1458
1457
  if (doInferFlows) {
1459
- inferredFlowsResult = (0, integrationFlowInference_1.inferIntegrationFlows)(artifacts.testFiles, warnings, artifacts.serviceFiles);
1458
+ inferredFlowsResult = (0, integrationFlowInference_1.inferIntegrationFlows)(artifacts.testFiles, warnings);
1460
1459
  const flowsPath = (0, integrationFlowInference_1.writeInferredIntegrationFlows)(inferredFlowsResult, reportsDir);
1461
1460
  console.log(`\nIntegration Flow Inference`);
1462
1461
  console.log(` Multi-step flows detected in tests: ${inferredFlowsResult.flows.length}`);
@@ -1514,13 +1513,6 @@ program
1514
1513
  while ((m = TEST_DECL_RE.exec(content)) !== null) {
1515
1514
  descriptions.push(m[2].toLowerCase());
1516
1515
  }
1517
- // Generic: extract test function/method names for Python (def test_xxx),
1518
- // Ruby (def test_xxx), and similar frameworks where test names are method names.
1519
- const GENERIC_TEST_FN_RE = /\bdef\s+((?:test|should|spec)_\w+)\s*\(/g;
1520
- GENERIC_TEST_FN_RE.lastIndex = 0;
1521
- while ((m = GENERIC_TEST_FN_RE.exec(content)) !== null) {
1522
- descriptions.push(m[1].replace(/_/g, ' ').toLowerCase());
1523
- }
1524
1516
  }
1525
1517
  return [{ file: tf, contentLower, descriptions, isJavaLike }];
1526
1518
  });
@@ -1740,6 +1732,96 @@ program
1740
1732
  allCoverageResults.push(errorResult);
1741
1733
  console.log(` ${errorCovered}/${errorItems.length} inferred error scenarios have test coverage (${errorPct}%)`);
1742
1734
  }
1735
+ // ── 4b-alt. Parameter coverage from inferred routes + body params ──
1736
+ // Extract path parameters (e.g. ':article', ':id') and body params
1737
+ // (e.g. 'req.body.email') from inferred routes and business rules.
1738
+ // This populates the Parameters tab even without an OpenAPI spec.
1739
+ console.log(`\nAnalyzing parameter coverage (from inferred routes)...`);
1740
+ try {
1741
+ const paramItems = [];
1742
+ // Path parameters from routes
1743
+ const seenParamKeys = new Set();
1744
+ for (const epItem of endpointItems) {
1745
+ const route = routeResult.routes.find((r) => `${r.method.toUpperCase()} ${r.path}` === epItem.id);
1746
+ if (!route)
1747
+ continue;
1748
+ const pathParams = route.path.split('/').filter((s) => s.startsWith(':'));
1749
+ for (const param of pathParams) {
1750
+ const paramName = param.slice(1); // strip ':'
1751
+ const key = `${paramName}@${route.method.toUpperCase()}`;
1752
+ if (seenParamKeys.has(key))
1753
+ continue;
1754
+ seenParamKeys.add(key);
1755
+ paramItems.push({
1756
+ id: `PATH :${paramName} @ ${epItem.id}`,
1757
+ covered: epItem.covered, // param is covered if the route is covered
1758
+ matchedTests: epItem.matchedTests,
1759
+ param_type: 'path',
1760
+ source_file: route.sourceFile,
1761
+ line_number: route.lineNumber,
1762
+ });
1763
+ }
1764
+ }
1765
+ // Body parameters from inferred business rules (req.body.<field>)
1766
+ if (inferredRulesResult) {
1767
+ const BODY_PARAM_RE = /req\.body\.(\w+)/g;
1768
+ const seenBodyParams = new Set();
1769
+ for (const rule of inferredRulesResult.rules) {
1770
+ let bm;
1771
+ BODY_PARAM_RE.lastIndex = 0;
1772
+ const combinedText = `${rule.condition} ${rule.code_snippet}`;
1773
+ while ((bm = BODY_PARAM_RE.exec(combinedText)) !== null) {
1774
+ const fieldName = bm[1];
1775
+ const paramKey = `body_${fieldName}_${(_q = rule.endpoint) !== null && _q !== void 0 ? _q : ''}`;
1776
+ if (seenBodyParams.has(paramKey))
1777
+ continue;
1778
+ seenBodyParams.add(paramKey);
1779
+ const endpointLabel = (_r = rule.endpoint) !== null && _r !== void 0 ? _r : 'unknown endpoint';
1780
+ // Match: any test description mentioning the field name
1781
+ const fieldNameLower = fieldName.toLowerCase();
1782
+ const matchedTestDescs = [];
1783
+ for (const { file, descriptions } of testEntries) {
1784
+ const hitting = descriptions.filter((desc) => desc.includes(fieldNameLower));
1785
+ if (hitting.length > 0) {
1786
+ matchedTestDescs.push(...hitting.map((d) => `[${path.basename(file)}] ${d}`));
1787
+ }
1788
+ }
1789
+ const srcParts = (_t = (_s = rule.source_location) === null || _s === void 0 ? void 0 : _s.split(':')) !== null && _t !== void 0 ? _t : [];
1790
+ const srcFile = srcParts[0];
1791
+ const srcLine = srcParts[1] !== undefined ? parseInt(srcParts[1], 10) : undefined;
1792
+ paramItems.push({
1793
+ id: `BODY ${fieldName} @ ${endpointLabel}`,
1794
+ covered: matchedTestDescs.length > 0,
1795
+ matchedTests: matchedTestDescs,
1796
+ param_type: 'body',
1797
+ source_file: srcFile,
1798
+ line_number: srcLine && srcLine > 0 ? srcLine : undefined,
1799
+ });
1800
+ }
1801
+ }
1802
+ }
1803
+ if (paramItems.length > 0) {
1804
+ const paramCovered = paramItems.filter((i) => i.covered).length;
1805
+ const paramPct = Math.round((paramCovered / paramItems.length) * 100);
1806
+ allCoverageResults.push({
1807
+ type: 'parameter',
1808
+ totalItems: paramItems.length,
1809
+ coveredItems: paramCovered,
1810
+ coveragePercent: paramPct,
1811
+ details: {
1812
+ total: paramItems.length,
1813
+ covered: paramCovered,
1814
+ percentage: paramPct,
1815
+ items: paramItems,
1816
+ source: 'inferred',
1817
+ },
1818
+ });
1819
+ console.log(` ${paramCovered}/${paramItems.length} inferred parameters have test coverage (${paramPct}%)`);
1820
+ }
1821
+ }
1822
+ catch (paramErr) {
1823
+ warnings.push(`Parameter inference failed: ${paramErr instanceof Error ? paramErr.message : String(paramErr)}`);
1824
+ }
1743
1825
  }
1744
1826
  else {
1745
1827
  warnings.push('No routes detected in service files; endpoint coverage skipped.');
@@ -1917,137 +1999,6 @@ program
1917
1999
  allCoverageResults.push(flowResult);
1918
2000
  console.log(` ${syntheticReport.complete}/${syntheticReport.total} multi-step flows detected and covered (100%)`);
1919
2001
  }
1920
- // ── 4f-perf. Performance & resilience coverage ────────────────────────────
1921
- // When load-test files (JMeter/k6/Gatling) are available, use them.
1922
- // When none are found, infer performance/resilience evidence from test content.
1923
- {
1924
- // ─ Keywords ──────────────────────────────────────────────────────────────
1925
- const PERF_KEYWORDS = [
1926
- 'load', 'performance', 'stress', 'throughput', 'latency', 'benchmark',
1927
- 'concurrent', 'response time', 'response_time', 'timing', 'timed',
1928
- 'slow', 'fast', 'speed', 'millisecond', 'ms ', ' ms',
1929
- ];
1930
- const RESILIENCE_KEYWORD_MAP = {
1931
- 'timeout': ['timeout', 'timed out', 'connection timeout', 'request timeout', 'read timeout'],
1932
- 'retry': ['retry', 'retries', 'retried', 'attempt', 'backoff', 'back-off'],
1933
- 'circuit-breaker': ['circuit breaker', 'circuit_breaker', 'circuitbreaker', 'open circuit'],
1934
- 'fallback': ['fallback', 'fall back', 'fall-back', 'default response', 'degraded'],
1935
- 'rate-limiting': ['rate limit', 'rate_limit', 'ratelimit', '429', 'too many requests', 'throttl'],
1936
- 'bulkhead': ['bulkhead', 'semaphore', 'queue full', 'concurrency limit'],
1937
- };
1938
- if (artifacts.performanceFiles.length > 0) {
1939
- // ─ Explicit: JMeter / k6 / Gatling files found ─────────────────────
1940
- try {
1941
- console.log(`\nAnalyzing performance coverage (${artifacts.performanceFiles.length} load-test file(s))...`);
1942
- const endpointItems = (_s = (_r = (_q = allCoverageResults.find((r) => r.type === 'endpoint')) === null || _q === void 0 ? void 0 : _q.details) === null || _r === void 0 ? void 0 : _r.items) !== null && _s !== void 0 ? _s : [];
1943
- const endpoints = endpointItems.map((item) => {
1944
- var _a, _b;
1945
- const parts = item.id.split(' ');
1946
- return { id: item.id, method: (_a = parts[0]) !== null && _a !== void 0 ? _a : 'GET', path: (_b = parts[1]) !== null && _b !== void 0 ? _b : item.id };
1947
- });
1948
- const metricsMap = (0, perfResilienceCoverage_1.parseLoadTestResults)(artifacts.performanceFiles);
1949
- const perfThresholds = { responseMs: 500, errorRate: 0.05 };
1950
- const perfCoverages = (0, perfResilienceCoverage_1.analyzePerformanceCoverage)(endpoints, metricsMap, perfThresholds);
1951
- const scenarios = (0, perfResilienceCoverage_1.buildResilienceScenarios)(endpoints);
1952
- const resilienceCoverages = await (0, perfResilienceCoverage_1.analyzeResilienceCoverage)(scenarios, testsGlob);
1953
- const report = (0, perfResilienceCoverage_1.buildPerfResilienceReport)(perfCoverages, resilienceCoverages);
1954
- const perfResult = {
1955
- type: 'performance',
1956
- totalItems: report.totalEndpoints,
1957
- coveredItems: report.endpointsWithLoadData,
1958
- coveragePercent: report.performanceCoveragePercent,
1959
- details: report,
1960
- };
1961
- const resilienceResult = {
1962
- type: 'resilience',
1963
- totalItems: report.totalResilienceScenarios,
1964
- coveredItems: report.coveredResilienceScenarios,
1965
- coveragePercent: report.resilienceCoveragePercent,
1966
- details: report,
1967
- };
1968
- allCoverageResults.push(perfResult, resilienceResult);
1969
- console.log(` ${report.endpointsWithLoadData}/${report.totalEndpoints} endpoints have load-test data (${report.performanceCoveragePercent}%)`);
1970
- console.log(` ${report.coveredResilienceScenarios}/${report.totalResilienceScenarios} resilience scenarios covered (${report.resilienceCoveragePercent}%)`);
1971
- }
1972
- catch (perfErr) {
1973
- warnings.push(`Performance coverage failed: ${perfErr instanceof Error ? perfErr.message : String(perfErr)}`);
1974
- }
1975
- }
1976
- else {
1977
- // ─ Inferred: no load-test files found — scan test content for signals ─
1978
- console.log(`\nPerformance & resilience coverage (inferred — no JMeter/k6/Gatling files found)...`);
1979
- // Build a flat list of all known endpoints from earlier coverage results
1980
- const knownEndpoints = ((_v = (_u = (_t = allCoverageResults.find((r) => r.type === 'endpoint')) === null || _t === void 0 ? void 0 : _t.details) === null || _u === void 0 ? void 0 : _u.items) !== null && _v !== void 0 ? _v : []).map((item) => item.id);
1981
- const allTestContent = testEntries.map((e) => e.contentLower);
1982
- const combinedTestContent = allTestContent.join('\n');
1983
- // ─ Performance inference ────────────────────────────────────────────
1984
- const hasPerfSignal = PERF_KEYWORDS.some((kw) => combinedTestContent.includes(kw));
1985
- const perfItems = knownEndpoints.map((endpointId) => {
1986
- var _a, _b;
1987
- const parts = endpointId.split(' ');
1988
- const epPath = ((_a = parts[1]) !== null && _a !== void 0 ? _a : endpointId).toLowerCase();
1989
- const epLeaf = (_b = epPath.split('/').filter(Boolean).pop()) !== null && _b !== void 0 ? _b : epPath;
1990
- const hasEvidenceInTests = testEntries.some(({ contentLower }) => {
1991
- const mentionsEndpoint = epLeaf.length > 2
1992
- ? contentLower.includes(epLeaf)
1993
- : contentLower.includes(epPath);
1994
- const hasPerfKw = PERF_KEYWORDS.some((kw) => contentLower.includes(kw));
1995
- return mentionsEndpoint && hasPerfKw;
1996
- });
1997
- return { id: endpointId, hasEvidence: hasEvidenceInTests };
1998
- });
1999
- const perfCoveredCount = perfItems.filter((i) => i.hasEvidence).length;
2000
- const perfTotal = Math.max(perfItems.length, 1); // avoid 0-denominator
2001
- const perfPct = knownEndpoints.length === 0
2002
- ? (hasPerfSignal ? 30 : 0) // no routes but some signal
2003
- : Math.round((perfCoveredCount / perfItems.length) * 100);
2004
- const perfResult = {
2005
- type: 'performance',
2006
- totalItems: perfItems.length || 1,
2007
- coveredItems: knownEndpoints.length === 0 && hasPerfSignal ? 0 : perfCoveredCount,
2008
- coveragePercent: perfPct,
2009
- details: {
2010
- inferred: true,
2011
- note: 'No JMeter, k6, or Gatling files found. Coverage inferred from test content keywords.',
2012
- totalEndpoints: perfItems.length,
2013
- endpointsWithEvidence: perfCoveredCount,
2014
- performanceCoveragePercent: perfPct,
2015
- items: perfItems,
2016
- },
2017
- };
2018
- allCoverageResults.push(perfResult);
2019
- if (knownEndpoints.length > 0) {
2020
- console.log(` ${perfCoveredCount}/${perfItems.length} endpoints have performance test evidence (${perfPct}%)`);
2021
- }
2022
- else {
2023
- console.log(` Performance signal in tests: ${hasPerfSignal ? 'yes' : 'none'} (0% — no load-test files)`);
2024
- }
2025
- console.log(` [NOTE] Add JMeter .jtl/.csv, k6 .json, or Gatling simulation.log files for accurate load-test metrics.`);
2026
- // ─ Resilience inference ──────────────────────────────────────────────
2027
- const resilienceItems = Object.entries(RESILIENCE_KEYWORD_MAP).map(([category, keywords]) => {
2028
- const covered = testEntries.some(({ contentLower }) => keywords.some((kw) => contentLower.includes(kw)));
2029
- return { id: `resilience:${category}`, category, covered };
2030
- });
2031
- const resCoveredCount = resilienceItems.filter((i) => i.covered).length;
2032
- const resPct = Math.round((resCoveredCount / resilienceItems.length) * 100);
2033
- const resilienceResult = {
2034
- type: 'resilience',
2035
- totalItems: resilienceItems.length,
2036
- coveredItems: resCoveredCount,
2037
- coveragePercent: resPct,
2038
- details: {
2039
- inferred: true,
2040
- note: 'Resilience coverage inferred from test content. No load-test files found.',
2041
- totalResilienceScenarios: resilienceItems.length,
2042
- coveredResilienceScenarios: resCoveredCount,
2043
- resilienceCoveragePercent: resPct,
2044
- items: resilienceItems,
2045
- },
2046
- };
2047
- allCoverageResults.push(resilienceResult);
2048
- console.log(` ${resCoveredCount}/${resilienceItems.length} resilience categories have test evidence (${resPct}%)`);
2049
- }
2050
- }
2051
2002
  if (allCoverageResults.length > 0) {
2052
2003
  const observabilityInfo = (0, observability_1.buildObservabilityInfo)(metricsPort);
2053
2004
  (0, reporting_1.generateMultiFormatReports)(allCoverageResults, ['json'], reportsDir, {}, observabilityInfo);
@@ -2157,7 +2108,7 @@ program
2157
2108
  if (options['dashboard']) {
2158
2109
  (0, serveDashboard_1.serveDashboard)({
2159
2110
  reportsDir: reportsDir,
2160
- port: (_w = options['port']) !== null && _w !== void 0 ? _w : 4000,
2111
+ port: (_u = options['port']) !== null && _u !== void 0 ? _u : 4000,
2161
2112
  open: Boolean(options['open']),
2162
2113
  });
2163
2114
  // Keep the process alive — the HTTP server holds the event loop open
@@ -2183,118 +2134,6 @@ program
2183
2134
  });
2184
2135
  // Keep the process alive while the server runs
2185
2136
  });
2186
- program
2187
- .command('generate-tests')
2188
- .description('Generate test scaffolds for detected coverage gaps')
2189
- .option('--reports-dir <dir>', 'Directory with coverage reports', 'reports/')
2190
- .option('--out-dir <dir>', 'Output directory for generated tests', 'generated-tests/')
2191
- .option('--language <lang>', 'Target language override (auto-detected if omitted)')
2192
- .option('--framework <fw>', 'Test framework override (auto-detected if omitted)')
2193
- .option('--priority <p>', 'Only generate for gaps at this priority or higher', 'P1')
2194
- .option('--dry-run', 'Print generated tests to stdout, do not write files', false)
2195
- .option('--overwrite', 'Overwrite existing generated files', false)
2196
- .option('--gap-id <id>', 'Generate tests for a single specific gap')
2197
- .option('--types <list>', 'Comma-separated gap types to generate (default: all)')
2198
- .option('--no-security', 'Skip security test generation')
2199
- .option('--no-cypress', 'Skip Cypress test generation')
2200
- .action(async (options) => {
2201
- const types = options.types
2202
- ? options.types.split(',').map(t => t.trim())
2203
- : undefined;
2204
- const result = await (0, index_4.generateTests)({
2205
- reportsDir: options.reportsDir,
2206
- outDir: options.outDir,
2207
- language: options.language,
2208
- framework: options.framework,
2209
- priority: options.priority,
2210
- dryRun: Boolean(options.dryRun),
2211
- overwrite: Boolean(options.overwrite),
2212
- gapId: options.gapId,
2213
- types,
2214
- noSecurity: Boolean(options.noSecurity),
2215
- noCypress: Boolean(options.noCypress),
2216
- });
2217
- if (result.dryRun) {
2218
- for (const file of result.files) {
2219
- console.log(`\n${'='.repeat(60)}`);
2220
- console.log(`// FILE: ${file.relativePath}`);
2221
- console.log(`${'='.repeat(60)}`);
2222
- console.log(file.content);
2223
- }
2224
- }
2225
- else {
2226
- console.log(`\nTest generation complete:`);
2227
- console.log(` Gaps processed: ${result.totalGaps}`);
2228
- console.log(` Files generated: ${result.generatedCount}`);
2229
- console.log(` Errors: ${result.errors.length}`);
2230
- if (result.errors.length > 0) {
2231
- for (const err of result.errors) {
2232
- console.error(` ERROR [${err.gapId}]: ${err.message}`);
2233
- }
2234
- }
2235
- }
2236
- });
2237
- program
2238
- .command('export-ai-flows')
2239
- .description('Export AI-ready flow documentation for Copilot/Cursor/Claude')
2240
- .option('--reports-dir <dir>', 'Directory with coverage reports', 'reports/')
2241
- .option('--out-dir <dir>', 'Output directory for AI flow files', 'reports/')
2242
- .option('--format <fmt>', 'Output format: markdown, json, or both', 'both')
2243
- .option('--max-gaps <n>', 'Maximum number of gaps to include', '50')
2244
- .option('--priority <p>', 'Only include gaps at this priority or higher', 'P3')
2245
- .action(async (options) => {
2246
- const flows = await (0, index_4.exportAiFlows)({
2247
- reportsDir: options.reportsDir,
2248
- outDir: options.outDir,
2249
- format: options.format,
2250
- maxGaps: parseInt(options.maxGaps, 10),
2251
- priority: options.priority,
2252
- });
2253
- console.log(`\nAI flows export complete:`);
2254
- console.log(` Gaps exported: ${flows.gaps.length}`);
2255
- console.log(` Project: ${flows.project.name}`);
2256
- console.log(` Language: ${flows.project.language}`);
2257
- });
2258
- program
2259
- .command('score-tests')
2260
- .description('Score quality of existing test suite on 5 dimensions (0-100)')
2261
- .option('--tests <glob>', 'Glob pattern for test files to score', 'tests/**/*.test.ts')
2262
- .option('--reports-dir <dir>', 'Directory to write quality score output', 'reports/')
2263
- .option('--fail-below <score>', 'Exit non-zero if any file scores below this', '0')
2264
- .action(async (options) => {
2265
- var _a;
2266
- try {
2267
- const report = await (0, index_4.scoreTests)({
2268
- testsGlob: options.tests,
2269
- reportsDir: options.reportsDir,
2270
- failBelow: parseInt(options.failBelow, 10),
2271
- });
2272
- console.log(`\nTest Quality Score Report:`);
2273
- console.log(` Overall score: ${report.overallScore}/100`);
2274
- console.log(` Files scored: ${report.byFile.length}`);
2275
- if (report.lowestQualityFiles.length > 0) {
2276
- console.log(`\n Lowest quality files:`);
2277
- for (const f of report.lowestQualityFiles) {
2278
- const entry = report.byFile.find(b => b.file === f);
2279
- console.log(` ${f}: ${(_a = entry === null || entry === void 0 ? void 0 : entry.score) !== null && _a !== void 0 ? _a : '?'}/100`);
2280
- }
2281
- }
2282
- if (report.highestRiskLowQualityGaps.length > 0) {
2283
- console.log(`\n High risk + low quality:`);
2284
- for (const g of report.highestRiskLowQualityGaps) {
2285
- console.log(` ${g.endpoint}: quality=${g.qualityScore}, risk=${g.riskScore}`);
2286
- console.log(` → ${g.primaryIssue}`);
2287
- }
2288
- }
2289
- console.log(`\n Report written to: ${options.reportsDir}/test-quality.json`);
2290
- }
2291
- catch (err) {
2292
- if (err instanceof Error) {
2293
- console.error(err.message);
2294
- }
2295
- process.exit(1);
2296
- }
2297
- });
2298
2137
  // Parse the command-line arguments
2299
2138
  program.parse(process.argv);
2300
2139
  // When invoked with no arguments (no subcommand), display help
@@ -1 +1 @@
1
- {"version":3,"file":"businessRuleInference.d.ts","sourceRoot":"","sources":["../../../src/inference/businessRuleInference.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAOH,MAAM,MAAM,UAAU,GAAG,UAAU,GAAG,UAAU,CAAC;AACjD,MAAM,MAAM,QAAQ,GAChB,YAAY,GACZ,eAAe,GACf,gBAAgB,GAChB,YAAY,CAAC;AAEjB,MAAM,WAAW,oBAAoB;IACnC,0DAA0D;IAC1D,EAAE,EAAE,MAAM,CAAC;IACX,gCAAgC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,UAAU,CAAC;IACxB,IAAI,EAAE,QAAQ,CAAC;IACf,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2CAA2C;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,sDAAsD;IACtD,iBAAiB,EAAE,MAAM,CAAC;IAC1B,8BAA8B;IAC9B,eAAe,EAAE,MAAM,CAAC;IACxB,+BAA+B;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,sFAAsF;IACtF,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,2BAA2B;IAC1C,KAAK,EAAE,oBAAoB,EAAE,CAAC;IAC9B,uCAAuC;IACvC,aAAa,EAAE,MAAM,CAAC;IACtB,wEAAwE;IACxE,QAAQ,EAAE,OAAO,CAAC;IAClB,uCAAuC;IACvC,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAwPD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,oBAAoB,EAAE,CA8C3E;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,YAAY,EAAE,MAAM,EAAE,EACtB,QAAQ,GAAE,MAAM,EAAO,GACtB,2BAA2B,CAuB7B;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,2BAA2B,EACnC,UAAU,EAAE,MAAM,GACjB,MAAM,CAYR;AAID,eAAO,MAAM,kBAAkB,aAM7B,CAAC;AAEH;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CAwCnE"}
1
+ {"version":3,"file":"businessRuleInference.d.ts","sourceRoot":"","sources":["../../../src/inference/businessRuleInference.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAOH,MAAM,MAAM,UAAU,GAAG,UAAU,GAAG,UAAU,CAAC;AACjD,MAAM,MAAM,QAAQ,GAChB,YAAY,GACZ,eAAe,GACf,gBAAgB,GAChB,YAAY,CAAC;AAEjB,MAAM,WAAW,oBAAoB;IACnC,0DAA0D;IAC1D,EAAE,EAAE,MAAM,CAAC;IACX,gCAAgC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,UAAU,CAAC;IACxB,IAAI,EAAE,QAAQ,CAAC;IACf,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2CAA2C;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,sDAAsD;IACtD,iBAAiB,EAAE,MAAM,CAAC;IAC1B,8BAA8B;IAC9B,eAAe,EAAE,MAAM,CAAC;IACxB,+BAA+B;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,sFAAsF;IACtF,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,2BAA2B;IAC1C,KAAK,EAAE,oBAAoB,EAAE,CAAC;IAC9B,uCAAuC;IACvC,aAAa,EAAE,MAAM,CAAC;IACtB,wEAAwE;IACxE,QAAQ,EAAE,OAAO,CAAC;IAClB,uCAAuC;IACvC,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AA2ID;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,oBAAoB,EAAE,CA4C3E;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,YAAY,EAAE,MAAM,EAAE,EACtB,QAAQ,GAAE,MAAM,EAAO,GACtB,2BAA2B,CAuB7B;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,2BAA2B,EACnC,UAAU,EAAE,MAAM,GACjB,MAAM,CAYR;AAID,eAAO,MAAM,kBAAkB,aAM7B,CAAC;AAEH;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CAwCnE"}
@@ -138,104 +138,12 @@ const INFERENCE_PATTERNS = [
138
138
  behaviorTemplate: (m) => `${m[1]} must not exceed ${m[2]}`,
139
139
  conditionTemplate: (m) => `${m[1]} > ${m[2]}`,
140
140
  },
141
- // ── Flask / Python-specific patterns ──────────────────────────────────────
142
- // Broader Python raise: any raise X() or raise X.y() not already ending in Exception/Error
143
- // (Ordered after the existing raise patterns so deduplification by source location handles overlap)
144
- {
145
- type: 'business_logic',
146
- pattern: /\braise\s+([\w]+(?:\.[\w]+)*)\s*(?:\(([^)]{0,60})\))?/,
147
- nameTemplate: (m) => { var _a; return toSnakeCase((_a = m[1].split('.').pop()) !== null && _a !== void 0 ? _a : m[1]); },
148
- behaviorTemplate: (m) => `Operation rejected: ${m[1]}`,
149
- conditionTemplate: (m) => { var _a; return `raise ${m[1]}(${((_a = m[2]) !== null && _a !== void 0 ? _a : '').trim()})`; },
150
- },
151
- // Python `if not X:` null guard — idiomatic Python nil check
152
- {
153
- type: 'validation',
154
- pattern: /if\s+not\s+([\w.]+)\s*(?::|and|or)/,
155
- nameTemplate: (m) => `require_${toSnakeCase(m[1].replace(/\./g, '_'))}`,
156
- behaviorTemplate: (m) => `${m[1]} must exist`,
157
- conditionTemplate: (m) => `if not ${m[1]}`,
158
- },
159
- // Flask/Django auth decorators: @jwt_required, @login_required, etc.
160
- {
161
- type: 'authorization',
162
- pattern: /@(jwt_required|login_required|require_auth|requires_auth|permission_required|auth_required|authenticated_user|require_permissions?)\b/i,
163
- nameTemplate: (m) => `require_${toSnakeCase(m[1])}`,
164
- behaviorTemplate: (m) => `Request requires authentication (${m[1]})`,
165
- conditionTemplate: (m) => `@${m[1]}`,
166
- },
167
- // Flask `@use_kwargs` / `@validate_arguments` input validation
168
- {
169
- type: 'validation',
170
- pattern: /@(use_kwargs|validate_arguments?|expects_json|validate_body)\s*\(\s*([\w]+)/i,
171
- nameTemplate: (m) => { var _a; return `validate_input_${toSnakeCase((_a = m[2]) !== null && _a !== void 0 ? _a : 'schema')}`; },
172
- behaviorTemplate: (m) => { var _a; return `Input validated against ${(_a = m[2]) !== null && _a !== void 0 ? _a : 'schema'}`; },
173
- conditionTemplate: (m) => { var _a; return `@${m[1]}(${(_a = m[2]) !== null && _a !== void 0 ? _a : ''})`; },
174
- },
175
- // Python ownership / attribute comparison guard
176
- {
177
- type: 'authorization',
178
- pattern: /if\s+[\w.]+\s*!=\s*[\w.]+\.(?:id|user_id|author_id|owner_id|profile\.id)/,
179
- nameTemplate: () => 'ownership_check',
180
- behaviorTemplate: () => 'Resource must belong to the requesting user',
181
- conditionTemplate: (m) => m[0].trim(),
182
- },
183
- // ── Generic JS/TS/frontend patterns ───────────────────────────────────────
184
- // Generic JS/TS `if (!expression)` null/falsy guard
185
- // Matches meaningful presence checks like !JWT.get(), !User.current, !token
186
- // Skips pure normalisation calls like .trim(), .length, .toLowerCase(), etc.
187
- // via the skipIfGroup1Matches post-match filter.
188
- {
189
- type: 'validation',
190
- pattern: /if\s*\(\s*!\s*([\w][\w.[\]]*(?:\.\w+\(\s*\))?)\s*\)/,
191
- skipIfGroup1Matches: /\.(trim|length|split|join|toLowerCase|toUpperCase|toString|valueOf|slice|substr|substring|replace|indexOf|includes|startsWith|endsWith)\(\s*\)$/,
192
- nameTemplate: (m) => `require_${toSnakeCase(m[1].replace(/[^a-zA-Z0-9]/g, '_').replace(/_+/g, '_').replace(/^_|_$/g, ''))}`,
193
- behaviorTemplate: (m) => `${m[1]} must be present/truthy`,
194
- conditionTemplate: (m) => `!${m[1]}`,
195
- },
196
- // HTTP status comparison guard (frontend interceptors): rejection.status === 401
197
- {
198
- type: 'validation',
199
- pattern: /\.status\s*={1,3}\s*(4\d\d|5\d\d)/,
200
- nameTemplate: (m) => `http_status_${m[1]}_check`,
201
- behaviorTemplate: (m) => `Handle HTTP ${m[1]} error response`,
202
- conditionTemplate: (m) => `status == ${m[1]}`,
203
- },
204
- // Ownership / identity comparison guard (username === author.username)
205
- {
206
- type: 'authorization',
207
- pattern: /if\s*\(?\s*[\w.]+\.(?:username|userId|user_id|email|id)\s*!==?\s*[\w.]+\.(?:username|userId|user_id|email|id|author\.username)/,
208
- nameTemplate: () => 'ownership_identity_check',
209
- behaviorTemplate: () => 'Resource belongs to a specific user identity',
210
- conditionTemplate: (m) => m[0].trim().replace(/^if\s*\(?/, '').replace(/\)?\s*$/, ''),
211
- },
212
- // Generic early-return guard: if (cond) return/throw on same or adjacent line
213
- {
214
- type: 'business_logic',
215
- pattern: /if\s*\([^)]{3,80}\)\s*(?:\{[^}]{0,40}\})?\s*(?:return|throw|raise)\b/,
216
- nameTemplate: () => 'guard_condition',
217
- behaviorTemplate: () => 'Early return or error on condition',
218
- conditionTemplate: (m) => {
219
- const cond = m[0].match(/if\s*\(([^)]{3,80})\)/);
220
- return cond ? cond[1].trim() : m[0].trim();
221
- },
222
- },
223
141
  ];
224
142
  // ─── Endpoint heuristics ──────────────────────────────────────────────────────
225
143
  /** Attempt to associate a rule with the nearest HTTP route/endpoint annotation. */
226
144
  function guessEndpoint(lines, ruleLineIdx) {
227
145
  // Search up to 40 lines above for common routing patterns
228
146
  const lookupLines = lines.slice(Math.max(0, ruleLineIdx - 40), ruleLineIdx);
229
- // Flask: @blueprint.route('/path', methods=...) / @app.route('/path', ...)
230
- for (let i = lookupLines.length - 1; i >= 0; i--) {
231
- const fm = lookupLines[i].match(/@\w+\.route\s*\(\s*['"]([^'"]+)['"]/);
232
- if (fm) {
233
- // Try to find method from same line or near
234
- const methodsMatch = lookupLines[i].match(/methods\s*=\s*[\[(]['"]?([\w]+)['"]?/);
235
- const method = methodsMatch ? methodsMatch[1].toUpperCase() : 'GET';
236
- return `${method} ${fm[1]}`;
237
- }
238
- }
239
147
  // Spring: @GetMapping("/path") / @PostMapping / @RequestMapping
240
148
  for (let i = lookupLines.length - 1; i >= 0; i--) {
241
149
  const m = lookupLines[i].match(/@(Get|Post|Put|Patch|Delete|Request)Mapping\s*\(\s*["']([^"']+)["']/i);
@@ -283,9 +191,6 @@ function inferRulesFromFile(filePath) {
283
191
  const match = line.match(ip.pattern);
284
192
  if (!match)
285
193
  continue;
286
- // Post-match filter: skip false positives based on first captured group
287
- if (ip.skipIfGroup1Matches && match[1] && ip.skipIfGroup1Matches.test(match[1]))
288
- continue;
289
194
  const condition = ip.conditionTemplate(match);
290
195
  const sourceLocation = `${filePath}:${lineIdx + 1}`;
291
196
  const dedupKey = `${filePath}:${lineIdx}:${condition}`;
@@ -44,20 +44,10 @@ export interface IntegrationFlowInferenceResult {
44
44
  * Infer integration flows from a single test file.
45
45
  */
46
46
  export declare function inferFlowsFromFile(filePath: string): InferredIntegrationFlow[];
47
- /**
48
- * Infer integration flows from service source files (not test files).
49
- *
50
- * Used as a fallback when no test files are present (e.g. frontend-only projects).
51
- * Only produces flows for source files that contain 2+ HTTP calls in the same function.
52
- */
53
- export declare function inferFlowsFromSourceFiles(serviceFiles: string[]): InferredIntegrationFlow[];
54
47
  /**
55
48
  * Run flow inference across all provided test files.
56
- *
57
- * When `testFiles` is empty and `serviceFiles` is provided, flows are inferred
58
- * from the service source code instead and tagged accordingly.
59
49
  */
60
- export declare function inferIntegrationFlows(testFiles: string[], warnings?: string[], serviceFiles?: string[]): IntegrationFlowInferenceResult;
50
+ export declare function inferIntegrationFlows(testFiles: string[], warnings?: string[]): IntegrationFlowInferenceResult;
61
51
  /**
62
52
  * Write inferred integration flows to the reports directory.
63
53
  * Returns the path of the written file.
@@ -1 +1 @@
1
- {"version":3,"file":"integrationFlowInference.d.ts","sourceRoot":"","sources":["../../../src/inference/integrationFlowInference.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAOH,MAAM,MAAM,UAAU,GAAG,UAAU,GAAG,UAAU,CAAC;AAEjD,MAAM,WAAW,QAAQ;IACvB,kBAAkB;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,yCAAyC;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,uBAAuB;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,uBAAuB;IACtC,wBAAwB;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,+BAA+B;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,UAAU,CAAC;IACxB,+BAA+B;IAC/B,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,iDAAiD;IACjD,eAAe,EAAE,MAAM,CAAC;IACxB,oDAAoD;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,8BAA8B;IAC7C,KAAK,EAAE,uBAAuB,EAAE,CAAC;IACjC,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAqLD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,uBAAuB,EAAE,CAW9E;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,uBAAuB,EAAE,CAgB3F;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,MAAM,EAAE,EACnB,QAAQ,GAAE,MAAM,EAAO,EACvB,YAAY,CAAC,EAAE,MAAM,EAAE,GACtB,8BAA8B,CAoChC;AAED;;;GAGG;AACH,wBAAgB,6BAA6B,CAC3C,MAAM,EAAE,8BAA8B,EACtC,UAAU,EAAE,MAAM,GACjB,MAAM,CAYR"}
1
+ {"version":3,"file":"integrationFlowInference.d.ts","sourceRoot":"","sources":["../../../src/inference/integrationFlowInference.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAOH,MAAM,MAAM,UAAU,GAAG,UAAU,GAAG,UAAU,CAAC;AAEjD,MAAM,WAAW,QAAQ;IACvB,kBAAkB;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,yCAAyC;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,uBAAuB;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,uBAAuB;IACtC,wBAAwB;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,+BAA+B;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,UAAU,CAAC;IACxB,+BAA+B;IAC/B,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,iDAAiD;IACjD,eAAe,EAAE,MAAM,CAAC;IACxB,oDAAoD;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,8BAA8B;IAC7C,KAAK,EAAE,uBAAuB,EAAE,CAAC;IACjC,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AA4KD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,uBAAuB,EAAE,CAW9E;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,MAAM,EAAE,EACnB,QAAQ,GAAE,MAAM,EAAO,GACtB,8BAA8B,CA2BhC;AAED;;;GAGG;AACH,wBAAgB,6BAA6B,CAC3C,MAAM,EAAE,8BAA8B,EACtC,UAAU,EAAE,MAAM,GACjB,MAAM,CAYR"}
@@ -48,7 +48,6 @@ var __importStar = (this && this.__importStar) || (function () {
48
48
  })();
49
49
  Object.defineProperty(exports, "__esModule", { value: true });
50
50
  exports.inferFlowsFromFile = inferFlowsFromFile;
51
- exports.inferFlowsFromSourceFiles = inferFlowsFromSourceFiles;
52
51
  exports.inferIntegrationFlows = inferIntegrationFlows;
53
52
  exports.writeInferredIntegrationFlows = writeInferredIntegrationFlows;
54
53
  const fs = __importStar(require("fs"));
@@ -64,11 +63,6 @@ const HTTP_CALL_PATTERNS = [
64
63
  { pattern: /\b(get|post|put|patch|delete)\s+['"`]([^'"`\s]+)['"`]/i, methodGroup: 1, pathGroup: 2 },
65
64
  // fetch('/path', { method: 'POST' })
66
65
  { pattern: /fetch\s*\(\s*['"`]([^'"`]+)['"`]\s*,\s*\{[^}]*method\s*:\s*['"`](GET|POST|PUT|PATCH|DELETE|HEAD)['"`]/i, methodGroup: 2, pathGroup: 1 },
67
- // WebTest TestApp: testapp.post_json(url_for('endpoint'), data)
68
- // Also handles: testapp.get(url_for('endpoint')), testapp.delete_json(...)
69
- { pattern: /(?:testapp|self\.testapp)\.(get_json|post_json|put_json|patch_json|delete_json|get|post|put|patch|delete)\s*\(\s*url_for\s*\(\s*['"]([^'"]+)['"]/i, methodGroup: 1, pathGroup: 2 },
70
- // WebTest without url_for: testapp.get('/path')
71
- { pattern: /(?:testapp|self\.testapp)\.(get_json|post_json|put_json|patch_json|delete_json|get|post|put|patch|delete)\s*\(\s*['"`]([^'"`]+)['"`]/i, methodGroup: 1, pathGroup: 2 },
72
66
  ];
73
67
  /** Patterns for test function / scenario boundaries */
74
68
  const TEST_FUNCTION_PATTERNS = [
@@ -91,8 +85,6 @@ function extractHttpCallsFromLines(lines) {
91
85
  const m = line.match(p.pattern);
92
86
  if (m) {
93
87
  const method = m[p.methodGroup].toUpperCase();
94
- // Normalize WebTest _json suffix: POST_JSON → POST, GET_JSON → GET
95
- const normalizedMethod = method.replace(/_JSON$/, '');
96
88
  const rawPath = m[p.pathGroup];
97
89
  // Skip unlikely paths (full URLs with domain, non-path values)
98
90
  if (rawPath.startsWith('http') && !rawPath.includes('/api'))
@@ -100,7 +92,7 @@ function extractHttpCallsFromLines(lines) {
100
92
  const cleanPath = extractPathFromUrl(rawPath);
101
93
  if (!cleanPath)
102
94
  continue;
103
- calls.push({ method: normalizedMethod, path: cleanPath, lineIdx: i });
95
+ calls.push({ method, path: cleanPath, lineIdx: i });
104
96
  break; // only first pattern match per line
105
97
  }
106
98
  }
@@ -110,9 +102,6 @@ function extractHttpCallsFromLines(lines) {
110
102
  function extractPathFromUrl(raw) {
111
103
  if (raw.startsWith('/'))
112
104
  return raw;
113
- // url_for endpoint name: 'blueprint.function' — treat as pseudo-path
114
- if (/^\w+\.\w+$/.test(raw))
115
- return `/${raw.replace('.', '/')}`;
116
105
  try {
117
106
  const u = new URL(raw);
118
107
  return u.pathname || undefined;
@@ -214,46 +203,10 @@ function inferFlowsFromFile(filePath) {
214
203
  const calls = extractHttpCallsFromLines(lines);
215
204
  return groupCallsIntoFlows(calls, filePath, lines);
216
205
  }
217
- /**
218
- * Infer integration flows from service source files (not test files).
219
- *
220
- * Used as a fallback when no test files are present (e.g. frontend-only projects).
221
- * Only produces flows for source files that contain 2+ HTTP calls in the same function.
222
- */
223
- function inferFlowsFromSourceFiles(serviceFiles) {
224
- const allFlows = [];
225
- for (const fp of serviceFiles) {
226
- let content;
227
- try {
228
- content = fs.readFileSync(fp, 'utf-8');
229
- }
230
- catch {
231
- continue;
232
- }
233
- const lines = content.split('\n');
234
- const calls = extractHttpCallsFromLines(lines);
235
- if (calls.length < 2)
236
- continue;
237
- const flows = groupCallsIntoFlows(calls, fp, lines);
238
- allFlows.push(...flows);
239
- }
240
- return allFlows;
241
- }
242
206
  /**
243
207
  * Run flow inference across all provided test files.
244
- *
245
- * When `testFiles` is empty and `serviceFiles` is provided, flows are inferred
246
- * from the service source code instead and tagged accordingly.
247
208
  */
248
- function inferIntegrationFlows(testFiles, warnings = [], serviceFiles) {
249
- if (testFiles.length === 0 && serviceFiles && serviceFiles.length > 0) {
250
- warnings.push('No test files found; integration flows inferred from service source code.');
251
- const flows = inferFlowsFromSourceFiles(serviceFiles);
252
- if (flows.length === 0) {
253
- warnings.push('No multi-step HTTP call sequences detected in service source files; integration flow inference produced no results.');
254
- }
255
- return { flows, filesAnalyzed: serviceFiles.length, inferred: true, warnings };
256
- }
209
+ function inferIntegrationFlows(testFiles, warnings = []) {
257
210
  if (testFiles.length === 0) {
258
211
  warnings.push('No test files provided; integration flow inference skipped.');
259
212
  return { flows: [], filesAnalyzed: 0, inferred: true, warnings };