api-tests-coverage 1.0.20 → 1.0.22

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 (561) 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/dist/assets/{_basePickBy-C2jmWITn.js → _basePickBy-BKGHUeDJ.js} +1 -1
  47. package/dist/dashboard/{assets/_baseUniq-BZHS9wTU.js → dist/assets/_baseUniq-CtA-DQF7.js} +1 -1
  48. package/dist/dashboard/dist/assets/{arc-B-Q4nGPT.js → arc-CbXP3Mc9.js} +1 -1
  49. package/dist/dashboard/dist/assets/{architectureDiagram-VXUJARFQ-Bs48s9rH.js → architectureDiagram-VXUJARFQ-n7QxasMM.js} +1 -1
  50. package/dist/dashboard/dist/assets/{blockDiagram-VD42YOAC-BPw-T2eL.js → blockDiagram-VD42YOAC-MXnGwKRn.js} +1 -1
  51. package/dist/dashboard/{assets/c4Diagram-YG6GDRKO-DuP3tG_c.js → dist/assets/c4Diagram-YG6GDRKO-B3yZ5P9k.js} +1 -1
  52. package/dist/dashboard/dist/assets/channel-C7QwX7U8.js +1 -0
  53. package/dist/dashboard/dist/assets/{chunk-4BX2VUAB-B9cIE1K2.js → chunk-4BX2VUAB-Dw3El5KF.js} +1 -1
  54. package/dist/dashboard/dist/assets/{chunk-55IACEB6-BIFhHB94.js → chunk-55IACEB6-T8Jf00IL.js} +1 -1
  55. package/dist/dashboard/dist/assets/{chunk-B4BG7PRW-B3IrqteW.js → chunk-B4BG7PRW-DAJalKYJ.js} +1 -1
  56. package/dist/dashboard/dist/assets/{chunk-DI55MBZ5-B7xHuqZu.js → chunk-DI55MBZ5-p7o_KuDF.js} +1 -1
  57. package/dist/dashboard/dist/assets/{chunk-FMBD7UC4-BBMfQbw1.js → chunk-FMBD7UC4-B0wUAfQR.js} +1 -1
  58. package/dist/dashboard/dist/assets/{chunk-QN33PNHL-BBQ6Q-9S.js → chunk-QN33PNHL-BTFwTEw8.js} +1 -1
  59. package/dist/dashboard/dist/assets/{chunk-QZHKN3VN-9uXt-06K.js → chunk-QZHKN3VN-CNXHnjkC.js} +1 -1
  60. package/dist/dashboard/dist/assets/{chunk-TZMSLE5B-BjDMUc_L.js → chunk-TZMSLE5B-BIVywBYp.js} +1 -1
  61. package/dist/dashboard/dist/assets/classDiagram-2ON5EDUG-Dkb-G0UK.js +1 -0
  62. package/dist/dashboard/dist/assets/classDiagram-v2-WZHVMYZB-Dkb-G0UK.js +1 -0
  63. package/dist/dashboard/dist/assets/clone-BSdXhKmH.js +1 -0
  64. package/dist/dashboard/dist/assets/{cose-bilkent-S5V4N54A-DLYZ4dZA.js → cose-bilkent-S5V4N54A-DuALhY5a.js} +1 -1
  65. package/dist/dashboard/dist/assets/{dagre-6UL2VRFP-B8oEROJc.js → dagre-6UL2VRFP-w6endfy9.js} +1 -1
  66. package/dist/dashboard/dist/assets/{diagram-PSM6KHXK-5uki9Dw8.js → diagram-PSM6KHXK-BDnUwPQC.js} +1 -1
  67. package/dist/dashboard/dist/assets/{diagram-QEK2KX5R-BRNhmby2.js → diagram-QEK2KX5R-Cbb7ctAo.js} +1 -1
  68. package/dist/dashboard/{assets/diagram-S2PKOQOG-Bk_jyoxg.js → dist/assets/diagram-S2PKOQOG-76ascveh.js} +1 -1
  69. package/dist/dashboard/dist/assets/{erDiagram-Q2GNP2WA-BbPQp6RA.js → erDiagram-Q2GNP2WA-BQQnVF0J.js} +1 -1
  70. package/dist/dashboard/dist/assets/{flowDiagram-NV44I4VS-BAHshMEg.js → flowDiagram-NV44I4VS-dKukiSxD.js} +1 -1
  71. package/dist/dashboard/dist/assets/{ganttDiagram-JELNMOA3-BS4JnN-M.js → ganttDiagram-JELNMOA3-BqnazZuZ.js} +1 -1
  72. package/dist/dashboard/{assets/gitGraphDiagram-V2S2FVAM-RgQMxxaQ.js → dist/assets/gitGraphDiagram-V2S2FVAM-BUFcnXCj.js} +1 -1
  73. package/dist/dashboard/dist/assets/{graph-CD7-npU0.js → graph-CGQIvL3r.js} +1 -1
  74. package/dist/dashboard/dist/assets/index-CadOHtae.css +1 -0
  75. package/dist/dashboard/dist/assets/{index-D3_88Gr5.js → index-DwqfA4mc.js} +115 -115
  76. package/dist/dashboard/dist/assets/{infoDiagram-HS3SLOUP-BMp4C5wf.js → infoDiagram-HS3SLOUP-BdylFPLI.js} +1 -1
  77. package/dist/dashboard/{assets/journeyDiagram-XKPGCS4Q-CdvZAxeA.js → dist/assets/journeyDiagram-XKPGCS4Q-BzJTBkhp.js} +1 -1
  78. package/dist/dashboard/{assets/kanban-definition-3W4ZIXB7-DTse5xX8.js → dist/assets/kanban-definition-3W4ZIXB7-StKomgio.js} +1 -1
  79. package/dist/dashboard/dist/assets/{layout-6njVG9Ld.js → layout-BnsX73QS.js} +1 -1
  80. package/dist/dashboard/dist/assets/{mindmap-definition-VGOIOE7T-B7wYeLe1.js → mindmap-definition-VGOIOE7T-HqFRhVFX.js} +1 -1
  81. package/dist/dashboard/dist/assets/{pieDiagram-ADFJNKIX-5pSPRGJ2.js → pieDiagram-ADFJNKIX-2I2tFH0C.js} +1 -1
  82. package/dist/dashboard/{assets/quadrantDiagram-AYHSOK5B-C6NljtBN.js → dist/assets/quadrantDiagram-AYHSOK5B-PlELkdBW.js} +1 -1
  83. package/dist/dashboard/{assets/requirementDiagram-UZGBJVZJ-Ban4o6oK.js → dist/assets/requirementDiagram-UZGBJVZJ-_9eLQNcZ.js} +1 -1
  84. package/dist/dashboard/dist/assets/{sankeyDiagram-TZEHDZUN-BDImwZtB.js → sankeyDiagram-TZEHDZUN-DHl1Ss7O.js} +1 -1
  85. package/dist/dashboard/dist/assets/{sequenceDiagram-WL72ISMW-1d8_kyI3.js → sequenceDiagram-WL72ISMW-B9p0m3Uf.js} +1 -1
  86. package/dist/dashboard/dist/assets/{stateDiagram-FKZM4ZOC-BWqoDymf.js → stateDiagram-FKZM4ZOC--rpDODjT.js} +1 -1
  87. package/dist/dashboard/dist/assets/stateDiagram-v2-4FDKWEC3-Ca9uGk46.js +1 -0
  88. package/dist/dashboard/dist/assets/{timeline-definition-IT6M3QCI-CBR9kqeJ.js → timeline-definition-IT6M3QCI-BCHaGBHB.js} +1 -1
  89. package/dist/dashboard/{assets/treemap-GDKQZRPO-D-XpcCUD.js → dist/assets/treemap-GDKQZRPO-CgiqDY8M.js} +1 -1
  90. package/dist/dashboard/dist/assets/{xychartDiagram-PRI3JC2R-7aSkQtVu.js → xychartDiagram-PRI3JC2R-BMvBBbeV.js} +1 -1
  91. package/dist/dashboard/dist/index.html +2 -2
  92. package/dist/dashboard/dist/reports/coverage-summary.json +848 -616
  93. package/dist/dashboard/index.html +2 -2
  94. package/dist/src/config/defaultConfig.d.ts.map +1 -1
  95. package/dist/src/config/defaultConfig.js +0 -37
  96. package/dist/src/config/types.d.ts +0 -42
  97. package/dist/src/config/types.d.ts.map +1 -1
  98. package/dist/src/config/validateConfig.d.ts.map +1 -1
  99. package/dist/src/config/validateConfig.js +0 -3
  100. package/dist/src/discovery/fileClassifier.d.ts.map +1 -1
  101. package/dist/src/discovery/fileClassifier.js +16 -15
  102. package/dist/src/discovery/projectDiscovery.d.ts.map +1 -1
  103. package/dist/src/discovery/projectDiscovery.js +1 -4
  104. package/dist/src/generation/context-builder.d.ts +3 -13
  105. package/dist/src/generation/context-builder.d.ts.map +1 -1
  106. package/dist/src/generation/context-builder.js +151 -119
  107. package/dist/src/generation/engine.d.ts +34 -13
  108. package/dist/src/generation/engine.d.ts.map +1 -1
  109. package/dist/src/generation/engine.js +317 -143
  110. package/dist/src/generation/file-router.d.ts +4 -5
  111. package/dist/src/generation/file-router.d.ts.map +1 -1
  112. package/dist/src/generation/file-router.js +39 -58
  113. package/dist/src/generation/gap-extractor.d.ts +9 -4
  114. package/dist/src/generation/gap-extractor.d.ts.map +1 -1
  115. package/dist/src/generation/gap-extractor.js +230 -240
  116. package/dist/src/generation/template-renderer.d.ts +9 -11
  117. package/dist/src/generation/template-renderer.d.ts.map +1 -1
  118. package/dist/src/generation/template-renderer.js +499 -519
  119. package/dist/src/generation/types.d.ts +48 -244
  120. package/dist/src/generation/types.d.ts.map +1 -1
  121. package/dist/src/generation/types.js +0 -4
  122. package/dist/src/index.js +247 -254
  123. package/dist/src/inference/businessRuleInference.d.ts.map +1 -1
  124. package/dist/src/inference/businessRuleInference.js +0 -95
  125. package/dist/src/inference/integrationFlowInference.d.ts +1 -11
  126. package/dist/src/inference/integrationFlowInference.d.ts.map +1 -1
  127. package/dist/src/inference/integrationFlowInference.js +2 -49
  128. package/dist/src/inference/routeInference.d.ts.map +1 -1
  129. package/dist/src/inference/routeInference.js +8 -54
  130. package/dist/src/languages/java/semanticBuilder.d.ts.map +1 -1
  131. package/dist/src/languages/java/semanticBuilder.js +12 -69
  132. package/dist/src/languages/javascript/angularDetector.d.ts.map +1 -1
  133. package/dist/src/languages/javascript/angularDetector.js +17 -50
  134. package/dist/src/languages/javascript/assertionResolver.js +4 -6
  135. package/dist/src/languages/javascript/hapiDetector.d.ts.map +1 -1
  136. package/dist/src/languages/javascript/hapiDetector.js +5 -48
  137. package/dist/src/languages/javascript/vueDetector.d.ts +0 -2
  138. package/dist/src/languages/javascript/vueDetector.d.ts.map +1 -1
  139. package/dist/src/languages/javascript/vueDetector.js +0 -22
  140. package/dist/src/languages/python/index.d.ts +1 -1
  141. package/dist/src/languages/python/index.d.ts.map +1 -1
  142. package/dist/src/languages/python/index.js +3 -33
  143. package/dist/src/pipeline/confidence.d.ts +1 -6
  144. package/dist/src/pipeline/confidence.d.ts.map +1 -1
  145. package/dist/src/pipeline/confidence.js +3 -8
  146. package/dist/src/pipeline/detectors/expressMiddlewareDetector.d.ts +21 -0
  147. package/dist/src/pipeline/detectors/expressMiddlewareDetector.d.ts.map +1 -0
  148. package/dist/src/pipeline/detectors/expressMiddlewareDetector.js +201 -0
  149. package/dist/src/pipeline/detectors/flaskBlueprintDetector.d.ts +23 -0
  150. package/dist/src/pipeline/detectors/flaskBlueprintDetector.d.ts.map +1 -0
  151. package/dist/src/pipeline/detectors/flaskBlueprintDetector.js +263 -0
  152. package/dist/src/pipeline/detectors/springDddDetector.d.ts +23 -0
  153. package/dist/src/pipeline/detectors/springDddDetector.d.ts.map +1 -0
  154. package/dist/src/pipeline/detectors/springDddDetector.js +237 -0
  155. package/dist/src/pipeline/detectors/types.d.ts +97 -0
  156. package/dist/src/pipeline/detectors/types.d.ts.map +1 -0
  157. package/dist/src/pipeline/detectors/types.js +15 -0
  158. package/dist/src/pipeline/graph.d.ts.map +1 -1
  159. package/dist/src/pipeline/graph.js +4 -16
  160. package/dist/src/pipeline/stages/ast/astStage.d.ts.map +1 -1
  161. package/dist/src/pipeline/stages/ast/astStage.js +2 -46
  162. package/dist/src/pipeline/stages/ast/baseUrlComposer.d.ts.map +1 -1
  163. package/dist/src/pipeline/stages/ast/baseUrlComposer.js +4 -18
  164. package/dist/src/pipeline/stages/ast/crossFileResolver.js +0 -29
  165. package/dist/src/pipeline/stages/ast/graphBuilder.d.ts.map +1 -1
  166. package/dist/src/pipeline/stages/ast/graphBuilder.js +0 -81
  167. package/dist/src/pipeline/stages/ast/optionalAuthUnifier.d.ts +1 -3
  168. package/dist/src/pipeline/stages/ast/optionalAuthUnifier.d.ts.map +1 -1
  169. package/dist/src/pipeline/stages/ast/optionalAuthUnifier.js +14 -34
  170. package/dist/src/pipeline/stages/ast/resolvers/angularInjectionResolver.d.ts.map +1 -1
  171. package/dist/src/pipeline/stages/ast/resolvers/angularInjectionResolver.js +3 -22
  172. package/dist/src/pipeline/stages/ast/resolvers/dddLayerResolver.d.ts.map +1 -1
  173. package/dist/src/pipeline/stages/ast/resolvers/dddLayerResolver.js +28 -104
  174. package/dist/src/pipeline/stages/ast/resolvers/mybatisResolver.d.ts.map +1 -1
  175. package/dist/src/pipeline/stages/ast/resolvers/mybatisResolver.js +0 -56
  176. package/dist/src/pipeline/stages/ast/resolvers/vuexActionResolver.d.ts.map +1 -1
  177. package/dist/src/pipeline/stages/ast/resolvers/vuexActionResolver.js +18 -43
  178. package/dist/src/pipeline/stages/ast/rulesEnforcer.d.ts.map +1 -1
  179. package/dist/src/pipeline/stages/ast/rulesEnforcer.js +45 -336
  180. package/dist/src/pipeline/stages/merge/conflictDetector.d.ts +0 -2
  181. package/dist/src/pipeline/stages/merge/conflictDetector.d.ts.map +1 -1
  182. package/dist/src/pipeline/stages/merge/conflictDetector.js +2 -54
  183. package/dist/src/pipeline/stages/merge/coverageMappingBuilder.d.ts.map +1 -1
  184. package/dist/src/pipeline/stages/merge/coverageMappingBuilder.js +3 -67
  185. package/dist/src/pipeline/stages/tia/mockBoundaryDetector.d.ts.map +1 -1
  186. package/dist/src/pipeline/stages/tia/mockBoundaryDetector.js +1 -8
  187. package/dist/src/pipeline/stages/tia/parameterizedTestExpander.js +4 -8
  188. package/dist/src/pipeline/stages/tia/testLayerClassifier.d.ts.map +1 -1
  189. package/dist/src/pipeline/stages/tia/testLayerClassifier.js +10 -36
  190. package/dist/src/pipeline/types.d.ts +1 -1
  191. package/dist/src/pipeline/types.d.ts.map +1 -1
  192. package/dist/src/reporting.d.ts.map +1 -1
  193. package/dist/src/reporting.js +2 -1
  194. package/dist/src/streaming/detectors/eventBridgeDetector.d.ts +5 -0
  195. package/dist/src/streaming/detectors/eventBridgeDetector.d.ts.map +1 -0
  196. package/dist/src/streaming/detectors/eventBridgeDetector.js +82 -0
  197. package/dist/src/streaming/detectors/kafkaDetector.d.ts +5 -0
  198. package/dist/src/streaming/detectors/kafkaDetector.d.ts.map +1 -0
  199. package/dist/src/streaming/detectors/kafkaDetector.js +97 -0
  200. package/dist/src/streaming/detectors/natsDetector.d.ts +5 -0
  201. package/dist/src/streaming/detectors/natsDetector.d.ts.map +1 -0
  202. package/dist/src/streaming/detectors/natsDetector.js +96 -0
  203. package/dist/src/streaming/detectors/pubsubDetector.d.ts +5 -0
  204. package/dist/src/streaming/detectors/pubsubDetector.d.ts.map +1 -0
  205. package/dist/src/streaming/detectors/pubsubDetector.js +82 -0
  206. package/dist/src/streaming/detectors/rabbitmqDetector.d.ts +5 -0
  207. package/dist/src/streaming/detectors/rabbitmqDetector.d.ts.map +1 -0
  208. package/dist/src/streaming/detectors/rabbitmqDetector.js +103 -0
  209. package/dist/src/streaming/detectors/redisPubsubDetector.d.ts +5 -0
  210. package/dist/src/streaming/detectors/redisPubsubDetector.d.ts.map +1 -0
  211. package/dist/src/streaming/detectors/redisPubsubDetector.js +81 -0
  212. package/dist/src/streaming/detectors/snsDetector.d.ts +5 -0
  213. package/dist/src/streaming/detectors/snsDetector.d.ts.map +1 -0
  214. package/dist/src/streaming/detectors/snsDetector.js +81 -0
  215. package/dist/src/streaming/detectors/sqsDetector.d.ts +5 -0
  216. package/dist/src/streaming/detectors/sqsDetector.d.ts.map +1 -0
  217. package/dist/src/streaming/detectors/sqsDetector.js +81 -0
  218. package/dist/src/streaming/eventCoverage.d.ts +46 -0
  219. package/dist/src/streaming/eventCoverage.d.ts.map +1 -0
  220. package/dist/src/streaming/eventCoverage.js +270 -0
  221. package/dist/src/streaming/types.d.ts +34 -0
  222. package/dist/src/streaming/types.d.ts.map +1 -0
  223. package/dist/src/streaming/types.js +2 -0
  224. package/dist/src/summary/markdownRenderer.d.ts.map +1 -1
  225. package/dist/src/summary/markdownRenderer.js +1 -0
  226. package/dist/src/summary/summaryTypes.d.ts.map +1 -1
  227. package/dist/src/summary/summaryTypes.js +1 -0
  228. package/package.json +3 -3
  229. package/dist/dashboard/assets/arc-D4xT0thw.js +0 -1
  230. package/dist/dashboard/assets/architectureDiagram-VXUJARFQ-Bs48s9rH.js +0 -36
  231. package/dist/dashboard/assets/channel-YFEOkJua.js +0 -1
  232. package/dist/dashboard/assets/chunk-B4BG7PRW-D5WlZonc.js +0 -165
  233. package/dist/dashboard/assets/chunk-DI55MBZ5-B-xsiGYI.js +0 -220
  234. package/dist/dashboard/assets/classDiagram-2ON5EDUG-CE9rmEXI.js +0 -1
  235. package/dist/dashboard/assets/classDiagram-v2-WZHVMYZB-CE9rmEXI.js +0 -1
  236. package/dist/dashboard/assets/clone-BAVNftx6.js +0 -1
  237. package/dist/dashboard/assets/cose-bilkent-S5V4N54A-DrNDePwE.js +0 -1
  238. package/dist/dashboard/assets/erDiagram-Q2GNP2WA-BbPQp6RA.js +0 -60
  239. package/dist/dashboard/assets/flowDiagram-NV44I4VS-1j044bLK.js +0 -162
  240. package/dist/dashboard/assets/index-Bt72YjAZ.css +0 -1
  241. package/dist/dashboard/assets/index-DuT2LnIf.js +0 -523
  242. package/dist/dashboard/assets/layout-CnKzeCpQ.js +0 -1
  243. package/dist/dashboard/assets/sankeyDiagram-TZEHDZUN-BDImwZtB.js +0 -10
  244. package/dist/dashboard/assets/stateDiagram-FKZM4ZOC-DkBAMCJV.js +0 -1
  245. package/dist/dashboard/assets/stateDiagram-v2-4FDKWEC3-CtkfyoSn.js +0 -1
  246. package/dist/dashboard/assets/timeline-definition-IT6M3QCI-CGUDCWFx.js +0 -61
  247. package/dist/dashboard/assets/xychartDiagram-PRI3JC2R-BlIpbwyn.js +0 -7
  248. package/dist/dashboard/dist/assets/_basePickBy-CErN2e4K.js +0 -1
  249. package/dist/dashboard/dist/assets/_basePickBy-CYB1KXah.js +0 -1
  250. package/dist/dashboard/dist/assets/_basePickBy-D4ml7gdd.js +0 -1
  251. package/dist/dashboard/dist/assets/_basePickBy-D7SXdoHL.js +0 -1
  252. package/dist/dashboard/dist/assets/_basePickBy-DUQHbXda.js +0 -1
  253. package/dist/dashboard/dist/assets/_basePickBy-DZR484hj.js +0 -1
  254. package/dist/dashboard/dist/assets/_basePickBy-_zJIZmFM.js +0 -1
  255. package/dist/dashboard/dist/assets/_baseUniq-BZHS9wTU.js +0 -1
  256. package/dist/dashboard/dist/assets/_baseUniq-BzwtoVZI.js +0 -1
  257. package/dist/dashboard/dist/assets/_baseUniq-C2oBAxY3.js +0 -1
  258. package/dist/dashboard/dist/assets/_baseUniq-CUKBQ2bc.js +0 -1
  259. package/dist/dashboard/dist/assets/_baseUniq-Ct8XEXnH.js +0 -1
  260. package/dist/dashboard/dist/assets/_baseUniq-DE6cyzJb.js +0 -1
  261. package/dist/dashboard/dist/assets/_baseUniq-DzHorfx6.js +0 -1
  262. package/dist/dashboard/dist/assets/arc-B7p8x22e.js +0 -1
  263. package/dist/dashboard/dist/assets/arc-BDOeMmjX.js +0 -1
  264. package/dist/dashboard/dist/assets/arc-BaDRUN_n.js +0 -1
  265. package/dist/dashboard/dist/assets/arc-CjFGY63A.js +0 -1
  266. package/dist/dashboard/dist/assets/arc-D4xT0thw.js +0 -1
  267. package/dist/dashboard/dist/assets/arc-g03p1JXB.js +0 -1
  268. package/dist/dashboard/dist/assets/architectureDiagram-VXUJARFQ-BUdFGrlT.js +0 -36
  269. package/dist/dashboard/dist/assets/architectureDiagram-VXUJARFQ-CLCqS7Lv.js +0 -36
  270. package/dist/dashboard/dist/assets/architectureDiagram-VXUJARFQ-C_5dqWCI.js +0 -36
  271. package/dist/dashboard/dist/assets/architectureDiagram-VXUJARFQ-WnVycqnT.js +0 -36
  272. package/dist/dashboard/dist/assets/architectureDiagram-VXUJARFQ-mH7lInv5.js +0 -36
  273. package/dist/dashboard/dist/assets/architectureDiagram-VXUJARFQ-wVr1_uNB.js +0 -36
  274. package/dist/dashboard/dist/assets/blockDiagram-VD42YOAC-BBXc88fn.js +0 -122
  275. package/dist/dashboard/dist/assets/blockDiagram-VD42YOAC-BvkiW8lj.js +0 -122
  276. package/dist/dashboard/dist/assets/blockDiagram-VD42YOAC-CavSRNuP.js +0 -122
  277. package/dist/dashboard/dist/assets/blockDiagram-VD42YOAC-D-TzNNzc.js +0 -122
  278. package/dist/dashboard/dist/assets/blockDiagram-VD42YOAC-DK0YAM7_.js +0 -122
  279. package/dist/dashboard/dist/assets/blockDiagram-VD42YOAC-DbGIO6Kt.js +0 -122
  280. package/dist/dashboard/dist/assets/blockDiagram-VD42YOAC-V4vxrfzX.js +0 -122
  281. package/dist/dashboard/dist/assets/c4Diagram-YG6GDRKO-Bs4R4b6P.js +0 -10
  282. package/dist/dashboard/dist/assets/c4Diagram-YG6GDRKO-BsgzPfQ3.js +0 -10
  283. package/dist/dashboard/dist/assets/c4Diagram-YG6GDRKO-CAFpcejP.js +0 -10
  284. package/dist/dashboard/dist/assets/c4Diagram-YG6GDRKO-DVnWnYOL.js +0 -10
  285. package/dist/dashboard/dist/assets/c4Diagram-YG6GDRKO-DuP3tG_c.js +0 -10
  286. package/dist/dashboard/dist/assets/c4Diagram-YG6GDRKO-ZEVciqTW.js +0 -10
  287. package/dist/dashboard/dist/assets/c4Diagram-YG6GDRKO-w18S5AEN.js +0 -10
  288. package/dist/dashboard/dist/assets/channel-BSnIwwuG.js +0 -1
  289. package/dist/dashboard/dist/assets/channel-BgeGdqQG.js +0 -1
  290. package/dist/dashboard/dist/assets/channel-CyXkK5KC.js +0 -1
  291. package/dist/dashboard/dist/assets/channel-D5Cq9giL.js +0 -1
  292. package/dist/dashboard/dist/assets/channel-DbeZpf5T.js +0 -1
  293. package/dist/dashboard/dist/assets/channel-Di9el3wE.js +0 -1
  294. package/dist/dashboard/dist/assets/channel-YFEOkJua.js +0 -1
  295. package/dist/dashboard/dist/assets/channel-psxgcQ_j.js +0 -1
  296. package/dist/dashboard/dist/assets/chunk-4BX2VUAB-BDYDsvGv.js +0 -1
  297. package/dist/dashboard/dist/assets/chunk-4BX2VUAB-BF8loPLD.js +0 -1
  298. package/dist/dashboard/dist/assets/chunk-4BX2VUAB-BrU7mtb9.js +0 -1
  299. package/dist/dashboard/dist/assets/chunk-4BX2VUAB-CSJ8KLGx.js +0 -1
  300. package/dist/dashboard/dist/assets/chunk-4BX2VUAB-DY1boKsq.js +0 -1
  301. package/dist/dashboard/dist/assets/chunk-4BX2VUAB-IN53WLTx.js +0 -1
  302. package/dist/dashboard/dist/assets/chunk-4BX2VUAB-oleArqPu.js +0 -1
  303. package/dist/dashboard/dist/assets/chunk-55IACEB6-BSL35gyW.js +0 -1
  304. package/dist/dashboard/dist/assets/chunk-55IACEB6-BzCzmNUn.js +0 -1
  305. package/dist/dashboard/dist/assets/chunk-55IACEB6-C3HNF-UF.js +0 -1
  306. package/dist/dashboard/dist/assets/chunk-55IACEB6-CiEoroXY.js +0 -1
  307. package/dist/dashboard/dist/assets/chunk-55IACEB6-DV6VmXIy.js +0 -1
  308. package/dist/dashboard/dist/assets/chunk-55IACEB6-DwsmCNp_.js +0 -1
  309. package/dist/dashboard/dist/assets/chunk-55IACEB6-kJkjQYxk.js +0 -1
  310. package/dist/dashboard/dist/assets/chunk-B4BG7PRW-BChq1Wly.js +0 -165
  311. package/dist/dashboard/dist/assets/chunk-B4BG7PRW-BiYJ9gu_.js +0 -165
  312. package/dist/dashboard/dist/assets/chunk-B4BG7PRW-CCMwwYCe.js +0 -165
  313. package/dist/dashboard/dist/assets/chunk-B4BG7PRW-D5WlZonc.js +0 -165
  314. package/dist/dashboard/dist/assets/chunk-B4BG7PRW-eTDXrKrv.js +0 -165
  315. package/dist/dashboard/dist/assets/chunk-B4BG7PRW-wQ6TCEMq.js +0 -165
  316. package/dist/dashboard/dist/assets/chunk-DI55MBZ5-BD9C9H7Y.js +0 -220
  317. package/dist/dashboard/dist/assets/chunk-DI55MBZ5-BTfzxsg4.js +0 -220
  318. package/dist/dashboard/dist/assets/chunk-DI55MBZ5-CSRqV3_6.js +0 -220
  319. package/dist/dashboard/dist/assets/chunk-DI55MBZ5-D7eiRvhB.js +0 -220
  320. package/dist/dashboard/dist/assets/chunk-DI55MBZ5-DfslhtXS.js +0 -220
  321. package/dist/dashboard/dist/assets/chunk-DI55MBZ5-M-8I3jEy.js +0 -220
  322. package/dist/dashboard/dist/assets/chunk-FMBD7UC4-BgEzYy_c.js +0 -15
  323. package/dist/dashboard/dist/assets/chunk-FMBD7UC4-CtTcDWZJ.js +0 -15
  324. package/dist/dashboard/dist/assets/chunk-FMBD7UC4-CyF99olo.js +0 -15
  325. package/dist/dashboard/dist/assets/chunk-FMBD7UC4-DRb5NEMr.js +0 -15
  326. package/dist/dashboard/dist/assets/chunk-FMBD7UC4-K3PC79JF.js +0 -15
  327. package/dist/dashboard/dist/assets/chunk-FMBD7UC4-V0V2L4Gq.js +0 -15
  328. package/dist/dashboard/dist/assets/chunk-FMBD7UC4-bSA0XiS0.js +0 -15
  329. package/dist/dashboard/dist/assets/chunk-QN33PNHL-BNX7uRa_.js +0 -1
  330. package/dist/dashboard/dist/assets/chunk-QN33PNHL-BRSlHScq.js +0 -1
  331. package/dist/dashboard/dist/assets/chunk-QN33PNHL-BrOIYUBs.js +0 -1
  332. package/dist/dashboard/dist/assets/chunk-QN33PNHL-CCuhlE1C.js +0 -1
  333. package/dist/dashboard/dist/assets/chunk-QN33PNHL-CmeZ1h1Z.js +0 -1
  334. package/dist/dashboard/dist/assets/chunk-QN33PNHL-DFgUs0T8.js +0 -1
  335. package/dist/dashboard/dist/assets/chunk-QN33PNHL-JcQZ0Q-Q.js +0 -1
  336. package/dist/dashboard/dist/assets/chunk-QZHKN3VN-Cix7nLqx.js +0 -1
  337. package/dist/dashboard/dist/assets/chunk-QZHKN3VN-CliaQGD4.js +0 -1
  338. package/dist/dashboard/dist/assets/chunk-QZHKN3VN-Cyg7Km90.js +0 -1
  339. package/dist/dashboard/dist/assets/chunk-QZHKN3VN-DKgOcPif.js +0 -1
  340. package/dist/dashboard/dist/assets/chunk-QZHKN3VN-MNv3v4He.js +0 -1
  341. package/dist/dashboard/dist/assets/chunk-QZHKN3VN-T5hoQANf.js +0 -1
  342. package/dist/dashboard/dist/assets/chunk-QZHKN3VN-mq-zucvn.js +0 -1
  343. package/dist/dashboard/dist/assets/chunk-TZMSLE5B-BoJFBewj.js +0 -1
  344. package/dist/dashboard/dist/assets/chunk-TZMSLE5B-BtXpcWN4.js +0 -1
  345. package/dist/dashboard/dist/assets/chunk-TZMSLE5B-C8KNXDi7.js +0 -1
  346. package/dist/dashboard/dist/assets/chunk-TZMSLE5B-CyhcxGB1.js +0 -1
  347. package/dist/dashboard/dist/assets/chunk-TZMSLE5B-DGTVcqTS.js +0 -1
  348. package/dist/dashboard/dist/assets/chunk-TZMSLE5B-DqMNcR7I.js +0 -1
  349. package/dist/dashboard/dist/assets/chunk-TZMSLE5B-F1fppg7C.js +0 -1
  350. package/dist/dashboard/dist/assets/classDiagram-2ON5EDUG-AMwn99HP.js +0 -1
  351. package/dist/dashboard/dist/assets/classDiagram-2ON5EDUG-BbkwHRko.js +0 -1
  352. package/dist/dashboard/dist/assets/classDiagram-2ON5EDUG-Be0F7AG8.js +0 -1
  353. package/dist/dashboard/dist/assets/classDiagram-2ON5EDUG-BkGN4Cpz.js +0 -1
  354. package/dist/dashboard/dist/assets/classDiagram-2ON5EDUG-CE9rmEXI.js +0 -1
  355. package/dist/dashboard/dist/assets/classDiagram-2ON5EDUG-CM6Qs-Qs.js +0 -1
  356. package/dist/dashboard/dist/assets/classDiagram-2ON5EDUG-D3VDjeKC.js +0 -1
  357. package/dist/dashboard/dist/assets/classDiagram-2ON5EDUG-o8p5Y0H9.js +0 -1
  358. package/dist/dashboard/dist/assets/classDiagram-v2-WZHVMYZB-AMwn99HP.js +0 -1
  359. package/dist/dashboard/dist/assets/classDiagram-v2-WZHVMYZB-BbkwHRko.js +0 -1
  360. package/dist/dashboard/dist/assets/classDiagram-v2-WZHVMYZB-Be0F7AG8.js +0 -1
  361. package/dist/dashboard/dist/assets/classDiagram-v2-WZHVMYZB-BkGN4Cpz.js +0 -1
  362. package/dist/dashboard/dist/assets/classDiagram-v2-WZHVMYZB-CE9rmEXI.js +0 -1
  363. package/dist/dashboard/dist/assets/classDiagram-v2-WZHVMYZB-CM6Qs-Qs.js +0 -1
  364. package/dist/dashboard/dist/assets/classDiagram-v2-WZHVMYZB-D3VDjeKC.js +0 -1
  365. package/dist/dashboard/dist/assets/classDiagram-v2-WZHVMYZB-o8p5Y0H9.js +0 -1
  366. package/dist/dashboard/dist/assets/clone-B5PF81Z3.js +0 -1
  367. package/dist/dashboard/dist/assets/clone-BAVNftx6.js +0 -1
  368. package/dist/dashboard/dist/assets/clone-BmpQ0ely.js +0 -1
  369. package/dist/dashboard/dist/assets/clone-CKIuLE_W.js +0 -1
  370. package/dist/dashboard/dist/assets/clone-Cv0cxIIi.js +0 -1
  371. package/dist/dashboard/dist/assets/clone-Cvq8JuOb.js +0 -1
  372. package/dist/dashboard/dist/assets/clone-DEYRVSAn.js +0 -1
  373. package/dist/dashboard/dist/assets/clone-KEkbvJY9.js +0 -1
  374. package/dist/dashboard/dist/assets/cose-bilkent-S5V4N54A-DMGRGhwB.js +0 -1
  375. package/dist/dashboard/dist/assets/cose-bilkent-S5V4N54A-DrNDePwE.js +0 -1
  376. package/dist/dashboard/dist/assets/cose-bilkent-S5V4N54A-GjySlYac.js +0 -1
  377. package/dist/dashboard/dist/assets/cose-bilkent-S5V4N54A-UX3RfzXW.js +0 -1
  378. package/dist/dashboard/dist/assets/cose-bilkent-S5V4N54A-YL9kFxCl.js +0 -1
  379. package/dist/dashboard/dist/assets/cose-bilkent-S5V4N54A-xVw-THr_.js +0 -1
  380. package/dist/dashboard/dist/assets/dagre-6UL2VRFP-BO79zHpJ.js +0 -4
  381. package/dist/dashboard/dist/assets/dagre-6UL2VRFP-Bjadb8g_.js +0 -4
  382. package/dist/dashboard/dist/assets/dagre-6UL2VRFP-CJT7lofP.js +0 -4
  383. package/dist/dashboard/dist/assets/dagre-6UL2VRFP-CUx6EwnW.js +0 -4
  384. package/dist/dashboard/dist/assets/dagre-6UL2VRFP-D03qnh38.js +0 -4
  385. package/dist/dashboard/dist/assets/dagre-6UL2VRFP-DgEqrxGj.js +0 -4
  386. package/dist/dashboard/dist/assets/dagre-6UL2VRFP-NZWnQN_Y.js +0 -4
  387. package/dist/dashboard/dist/assets/diagram-PSM6KHXK-BPFtplp4.js +0 -24
  388. package/dist/dashboard/dist/assets/diagram-PSM6KHXK-BgOmComt.js +0 -24
  389. package/dist/dashboard/dist/assets/diagram-PSM6KHXK-DGtyS7lD.js +0 -24
  390. package/dist/dashboard/dist/assets/diagram-PSM6KHXK-D__FKIzE.js +0 -24
  391. package/dist/dashboard/dist/assets/diagram-PSM6KHXK-DtE0cTIs.js +0 -24
  392. package/dist/dashboard/dist/assets/diagram-PSM6KHXK-JEfxbZj6.js +0 -24
  393. package/dist/dashboard/dist/assets/diagram-PSM6KHXK-Y-M5J_PO.js +0 -24
  394. package/dist/dashboard/dist/assets/diagram-QEK2KX5R-1hjfopmw.js +0 -43
  395. package/dist/dashboard/dist/assets/diagram-QEK2KX5R-BHyZd544.js +0 -43
  396. package/dist/dashboard/dist/assets/diagram-QEK2KX5R-BXMS0hEZ.js +0 -43
  397. package/dist/dashboard/dist/assets/diagram-QEK2KX5R-BtOA2yYh.js +0 -43
  398. package/dist/dashboard/dist/assets/diagram-QEK2KX5R-CSCGZUfr.js +0 -43
  399. package/dist/dashboard/dist/assets/diagram-QEK2KX5R-CYK-aLR5.js +0 -43
  400. package/dist/dashboard/dist/assets/diagram-QEK2KX5R-CYxueP7U.js +0 -43
  401. package/dist/dashboard/dist/assets/diagram-S2PKOQOG-Bk_jyoxg.js +0 -24
  402. package/dist/dashboard/dist/assets/diagram-S2PKOQOG-CRUXUQeh.js +0 -24
  403. package/dist/dashboard/dist/assets/diagram-S2PKOQOG-CzytkAcm.js +0 -24
  404. package/dist/dashboard/dist/assets/diagram-S2PKOQOG-D-ku_X8U.js +0 -24
  405. package/dist/dashboard/dist/assets/diagram-S2PKOQOG-DdqZVGN1.js +0 -24
  406. package/dist/dashboard/dist/assets/diagram-S2PKOQOG-Gj3ANjIG.js +0 -24
  407. package/dist/dashboard/dist/assets/diagram-S2PKOQOG-qvXlTDud.js +0 -24
  408. package/dist/dashboard/dist/assets/erDiagram-Q2GNP2WA-DDk1KpRF.js +0 -60
  409. package/dist/dashboard/dist/assets/erDiagram-Q2GNP2WA-DGl6gPe2.js +0 -60
  410. package/dist/dashboard/dist/assets/erDiagram-Q2GNP2WA-DSC5VPcF.js +0 -60
  411. package/dist/dashboard/dist/assets/erDiagram-Q2GNP2WA-DZpjLrp5.js +0 -60
  412. package/dist/dashboard/dist/assets/erDiagram-Q2GNP2WA-Dhb_VQMS.js +0 -60
  413. package/dist/dashboard/dist/assets/erDiagram-Q2GNP2WA-DvI8ycM6.js +0 -60
  414. package/dist/dashboard/dist/assets/flowDiagram-NV44I4VS-CBnhpWKd.js +0 -162
  415. package/dist/dashboard/dist/assets/flowDiagram-NV44I4VS-CYXUqE3L.js +0 -162
  416. package/dist/dashboard/dist/assets/flowDiagram-NV44I4VS-Co89qYBD.js +0 -162
  417. package/dist/dashboard/dist/assets/flowDiagram-NV44I4VS-DRAD4OG7.js +0 -162
  418. package/dist/dashboard/dist/assets/flowDiagram-NV44I4VS-PVleScVK.js +0 -162
  419. package/dist/dashboard/dist/assets/flowDiagram-NV44I4VS-gKUH-GJ2.js +0 -162
  420. package/dist/dashboard/dist/assets/ganttDiagram-JELNMOA3-2r3WpWQC.js +0 -267
  421. package/dist/dashboard/dist/assets/ganttDiagram-JELNMOA3-BA65eVi0.js +0 -267
  422. package/dist/dashboard/dist/assets/ganttDiagram-JELNMOA3-Cjy_BOl2.js +0 -267
  423. package/dist/dashboard/dist/assets/ganttDiagram-JELNMOA3-CsUMU5Ws.js +0 -267
  424. package/dist/dashboard/dist/assets/ganttDiagram-JELNMOA3-DK_45K6s.js +0 -267
  425. package/dist/dashboard/dist/assets/ganttDiagram-JELNMOA3-DX-lROHt.js +0 -267
  426. package/dist/dashboard/dist/assets/ganttDiagram-JELNMOA3-Dm_lLo9y.js +0 -267
  427. package/dist/dashboard/dist/assets/gitGraphDiagram-V2S2FVAM-C9NpbucY.js +0 -65
  428. package/dist/dashboard/dist/assets/gitGraphDiagram-V2S2FVAM-CWo2OK69.js +0 -65
  429. package/dist/dashboard/dist/assets/gitGraphDiagram-V2S2FVAM-DM9AW1aP.js +0 -65
  430. package/dist/dashboard/dist/assets/gitGraphDiagram-V2S2FVAM-DYrdM8tK.js +0 -65
  431. package/dist/dashboard/dist/assets/gitGraphDiagram-V2S2FVAM-RgQMxxaQ.js +0 -65
  432. package/dist/dashboard/dist/assets/gitGraphDiagram-V2S2FVAM-Uz3nRdju.js +0 -65
  433. package/dist/dashboard/dist/assets/gitGraphDiagram-V2S2FVAM-bYKe_efj.js +0 -65
  434. package/dist/dashboard/dist/assets/graph-BP2ns4se.js +0 -1
  435. package/dist/dashboard/dist/assets/graph-BVGuJ5gs.js +0 -1
  436. package/dist/dashboard/dist/assets/graph-Clj85F2M.js +0 -1
  437. package/dist/dashboard/dist/assets/graph-CpRVMcWW.js +0 -1
  438. package/dist/dashboard/dist/assets/graph-Cwn7jgQS.js +0 -1
  439. package/dist/dashboard/dist/assets/graph-ZtgwAPQj.js +0 -1
  440. package/dist/dashboard/dist/assets/graph-gV0gk5Dq.js +0 -1
  441. package/dist/dashboard/dist/assets/index-Bt72YjAZ.css +0 -1
  442. package/dist/dashboard/dist/assets/index-ByH_nEhG.js +0 -523
  443. package/dist/dashboard/dist/assets/index-C302ingQ.css +0 -1
  444. package/dist/dashboard/dist/assets/index-CqEIqNus.js +0 -781
  445. package/dist/dashboard/dist/assets/index-D-AtVpd2.js +0 -523
  446. package/dist/dashboard/dist/assets/index-DEXwnExZ.js +0 -523
  447. package/dist/dashboard/dist/assets/index-DbUdNJca.js +0 -781
  448. package/dist/dashboard/dist/assets/index-DuT2LnIf.js +0 -523
  449. package/dist/dashboard/dist/assets/index-xecKLQ58.css +0 -1
  450. package/dist/dashboard/dist/assets/infoDiagram-HS3SLOUP-BjChBCME.js +0 -2
  451. package/dist/dashboard/dist/assets/infoDiagram-HS3SLOUP-BxoN3QPh.js +0 -2
  452. package/dist/dashboard/dist/assets/infoDiagram-HS3SLOUP-CxmZGT-4.js +0 -2
  453. package/dist/dashboard/dist/assets/infoDiagram-HS3SLOUP-D3SFXNAS.js +0 -2
  454. package/dist/dashboard/dist/assets/infoDiagram-HS3SLOUP-DyT5Fs8R.js +0 -2
  455. package/dist/dashboard/dist/assets/infoDiagram-HS3SLOUP-HLwGZBHJ.js +0 -2
  456. package/dist/dashboard/dist/assets/infoDiagram-HS3SLOUP-ujnMqVz3.js +0 -2
  457. package/dist/dashboard/dist/assets/journeyDiagram-XKPGCS4Q-BC0GSZ7W.js +0 -139
  458. package/dist/dashboard/dist/assets/journeyDiagram-XKPGCS4Q-Bv1IeJ8A.js +0 -139
  459. package/dist/dashboard/dist/assets/journeyDiagram-XKPGCS4Q-CFgbI9OH.js +0 -139
  460. package/dist/dashboard/dist/assets/journeyDiagram-XKPGCS4Q-CdvZAxeA.js +0 -139
  461. package/dist/dashboard/dist/assets/journeyDiagram-XKPGCS4Q-CiMM9buE.js +0 -139
  462. package/dist/dashboard/dist/assets/journeyDiagram-XKPGCS4Q-DQzfeBIo.js +0 -139
  463. package/dist/dashboard/dist/assets/journeyDiagram-XKPGCS4Q-nYZBlgTD.js +0 -139
  464. package/dist/dashboard/dist/assets/kanban-definition-3W4ZIXB7-AkiB-BRk.js +0 -89
  465. package/dist/dashboard/dist/assets/kanban-definition-3W4ZIXB7-BjYw_9v5.js +0 -89
  466. package/dist/dashboard/dist/assets/kanban-definition-3W4ZIXB7-COTfX74l.js +0 -89
  467. package/dist/dashboard/dist/assets/kanban-definition-3W4ZIXB7-D3u5Ov-5.js +0 -89
  468. package/dist/dashboard/dist/assets/kanban-definition-3W4ZIXB7-D6aRd_q1.js +0 -89
  469. package/dist/dashboard/dist/assets/kanban-definition-3W4ZIXB7-DTse5xX8.js +0 -89
  470. package/dist/dashboard/dist/assets/kanban-definition-3W4ZIXB7-ueIaoeks.js +0 -89
  471. package/dist/dashboard/dist/assets/layout-B1fTYUMj.js +0 -1
  472. package/dist/dashboard/dist/assets/layout-BbJNDkTr.js +0 -1
  473. package/dist/dashboard/dist/assets/layout-BwmMaJCx.js +0 -1
  474. package/dist/dashboard/dist/assets/layout-CnKzeCpQ.js +0 -1
  475. package/dist/dashboard/dist/assets/layout-DgtRACDS.js +0 -1
  476. package/dist/dashboard/dist/assets/layout-JbkTCGhr.js +0 -1
  477. package/dist/dashboard/dist/assets/mindmap-definition-VGOIOE7T-B93XW27v.js +0 -68
  478. package/dist/dashboard/dist/assets/mindmap-definition-VGOIOE7T-BJ5xCmsL.js +0 -68
  479. package/dist/dashboard/dist/assets/mindmap-definition-VGOIOE7T-BVsYbH_c.js +0 -68
  480. package/dist/dashboard/dist/assets/mindmap-definition-VGOIOE7T-CkyYtMaD.js +0 -68
  481. package/dist/dashboard/dist/assets/mindmap-definition-VGOIOE7T-CmcASbkx.js +0 -68
  482. package/dist/dashboard/dist/assets/mindmap-definition-VGOIOE7T-D001Ygrx.js +0 -68
  483. package/dist/dashboard/dist/assets/mindmap-definition-VGOIOE7T-QDZ_z8OE.js +0 -68
  484. package/dist/dashboard/dist/assets/pieDiagram-ADFJNKIX-9G1tEuaq.js +0 -30
  485. package/dist/dashboard/dist/assets/pieDiagram-ADFJNKIX-BIOVbZG_.js +0 -30
  486. package/dist/dashboard/dist/assets/pieDiagram-ADFJNKIX-Bf8vKEOf.js +0 -30
  487. package/dist/dashboard/dist/assets/pieDiagram-ADFJNKIX-BpwMMFZ3.js +0 -30
  488. package/dist/dashboard/dist/assets/pieDiagram-ADFJNKIX-DOXOzepj.js +0 -30
  489. package/dist/dashboard/dist/assets/pieDiagram-ADFJNKIX-EeNihpUP.js +0 -30
  490. package/dist/dashboard/dist/assets/pieDiagram-ADFJNKIX-uWFQFMEe.js +0 -30
  491. package/dist/dashboard/dist/assets/quadrantDiagram-AYHSOK5B-Bwppivuy.js +0 -7
  492. package/dist/dashboard/dist/assets/quadrantDiagram-AYHSOK5B-CM8qiFLR.js +0 -7
  493. package/dist/dashboard/dist/assets/quadrantDiagram-AYHSOK5B-Crgu5WqK.js +0 -7
  494. package/dist/dashboard/dist/assets/quadrantDiagram-AYHSOK5B-CtbMtM_F.js +0 -7
  495. package/dist/dashboard/dist/assets/quadrantDiagram-AYHSOK5B-i3-JTN3e.js +0 -7
  496. package/dist/dashboard/dist/assets/quadrantDiagram-AYHSOK5B-jDtdB4Ws.js +0 -7
  497. package/dist/dashboard/dist/assets/quadrantDiagram-AYHSOK5B-o21Z8BWo.js +0 -7
  498. package/dist/dashboard/dist/assets/requirementDiagram-UZGBJVZJ-Ban4o6oK.js +0 -64
  499. package/dist/dashboard/dist/assets/requirementDiagram-UZGBJVZJ-BfAcJrqc.js +0 -64
  500. package/dist/dashboard/dist/assets/requirementDiagram-UZGBJVZJ-CgXxZ2rH.js +0 -64
  501. package/dist/dashboard/dist/assets/requirementDiagram-UZGBJVZJ-ClNSNeYe.js +0 -64
  502. package/dist/dashboard/dist/assets/requirementDiagram-UZGBJVZJ-DPTtP4Ve.js +0 -64
  503. package/dist/dashboard/dist/assets/requirementDiagram-UZGBJVZJ-Dw260IiT.js +0 -64
  504. package/dist/dashboard/dist/assets/requirementDiagram-UZGBJVZJ-WIJ0qiJG.js +0 -64
  505. package/dist/dashboard/dist/assets/sankeyDiagram-TZEHDZUN-BFNTuDV7.js +0 -10
  506. package/dist/dashboard/dist/assets/sankeyDiagram-TZEHDZUN-Cb4WB9UB.js +0 -10
  507. package/dist/dashboard/dist/assets/sankeyDiagram-TZEHDZUN-D2OGoxU5.js +0 -10
  508. package/dist/dashboard/dist/assets/sankeyDiagram-TZEHDZUN-DEVTdH0h.js +0 -10
  509. package/dist/dashboard/dist/assets/sankeyDiagram-TZEHDZUN-LR8T4Hv0.js +0 -10
  510. package/dist/dashboard/dist/assets/sankeyDiagram-TZEHDZUN-VcdyPlVE.js +0 -10
  511. package/dist/dashboard/dist/assets/sequenceDiagram-WL72ISMW-97qjzqIO.js +0 -145
  512. package/dist/dashboard/dist/assets/sequenceDiagram-WL72ISMW-Bjr5wgXg.js +0 -145
  513. package/dist/dashboard/dist/assets/sequenceDiagram-WL72ISMW-BqGJWVUS.js +0 -145
  514. package/dist/dashboard/dist/assets/sequenceDiagram-WL72ISMW-C5h60fvZ.js +0 -145
  515. package/dist/dashboard/dist/assets/sequenceDiagram-WL72ISMW-DBqchhlr.js +0 -145
  516. package/dist/dashboard/dist/assets/sequenceDiagram-WL72ISMW-DOr6An-q.js +0 -145
  517. package/dist/dashboard/dist/assets/sequenceDiagram-WL72ISMW-nMYJrjDT.js +0 -145
  518. package/dist/dashboard/dist/assets/stateDiagram-FKZM4ZOC-Bl16d4W5.js +0 -1
  519. package/dist/dashboard/dist/assets/stateDiagram-FKZM4ZOC-C1KYr7Wj.js +0 -1
  520. package/dist/dashboard/dist/assets/stateDiagram-FKZM4ZOC-DDrhZYly.js +0 -1
  521. package/dist/dashboard/dist/assets/stateDiagram-FKZM4ZOC-DKkWVu_K.js +0 -1
  522. package/dist/dashboard/dist/assets/stateDiagram-FKZM4ZOC-DkBAMCJV.js +0 -1
  523. package/dist/dashboard/dist/assets/stateDiagram-FKZM4ZOC-DlLDy54e.js +0 -1
  524. package/dist/dashboard/dist/assets/stateDiagram-v2-4FDKWEC3-B05ygO34.js +0 -1
  525. package/dist/dashboard/dist/assets/stateDiagram-v2-4FDKWEC3-B0euQu1p.js +0 -1
  526. package/dist/dashboard/dist/assets/stateDiagram-v2-4FDKWEC3-BlwaoFEG.js +0 -1
  527. package/dist/dashboard/dist/assets/stateDiagram-v2-4FDKWEC3-CtkfyoSn.js +0 -1
  528. package/dist/dashboard/dist/assets/stateDiagram-v2-4FDKWEC3-DRV_IYr6.js +0 -1
  529. package/dist/dashboard/dist/assets/stateDiagram-v2-4FDKWEC3-Im6pH8C-.js +0 -1
  530. package/dist/dashboard/dist/assets/stateDiagram-v2-4FDKWEC3-K_qkvHaB.js +0 -1
  531. package/dist/dashboard/dist/assets/stateDiagram-v2-4FDKWEC3-pZ_Rrx6C.js +0 -1
  532. package/dist/dashboard/dist/assets/timeline-definition-IT6M3QCI-CGUDCWFx.js +0 -61
  533. package/dist/dashboard/dist/assets/timeline-definition-IT6M3QCI-CLdinkid.js +0 -61
  534. package/dist/dashboard/dist/assets/timeline-definition-IT6M3QCI-CsRS0WGC.js +0 -61
  535. package/dist/dashboard/dist/assets/timeline-definition-IT6M3QCI-D6JNee_P.js +0 -61
  536. package/dist/dashboard/dist/assets/timeline-definition-IT6M3QCI-DAT3r9va.js +0 -61
  537. package/dist/dashboard/dist/assets/timeline-definition-IT6M3QCI-DR6HNny6.js +0 -61
  538. package/dist/dashboard/dist/assets/treemap-GDKQZRPO-BlA8rg0m.js +0 -162
  539. package/dist/dashboard/dist/assets/treemap-GDKQZRPO-CBle3d0d.js +0 -162
  540. package/dist/dashboard/dist/assets/treemap-GDKQZRPO-CCvvSJBX.js +0 -162
  541. package/dist/dashboard/dist/assets/treemap-GDKQZRPO-Cw9mkiYN.js +0 -162
  542. package/dist/dashboard/dist/assets/treemap-GDKQZRPO-D-XpcCUD.js +0 -162
  543. package/dist/dashboard/dist/assets/treemap-GDKQZRPO-MpQr6tee.js +0 -162
  544. package/dist/dashboard/dist/assets/treemap-GDKQZRPO-vW7FSd7C.js +0 -162
  545. package/dist/dashboard/dist/assets/xychartDiagram-PRI3JC2R-B72UwDAP.js +0 -7
  546. package/dist/dashboard/dist/assets/xychartDiagram-PRI3JC2R-BceejIon.js +0 -7
  547. package/dist/dashboard/dist/assets/xychartDiagram-PRI3JC2R-BlIpbwyn.js +0 -7
  548. package/dist/dashboard/dist/assets/xychartDiagram-PRI3JC2R-ByLRWyI2.js +0 -7
  549. package/dist/dashboard/dist/assets/xychartDiagram-PRI3JC2R-DjyK-sw-.js +0 -7
  550. package/dist/dashboard/dist/assets/xychartDiagram-PRI3JC2R-bS40I4IT.js +0 -7
  551. package/dist/dashboard/reports/coverage-summary.json +0 -763
  552. package/dist/src/generation/ai-flow-exporter.d.ts +0 -7
  553. package/dist/src/generation/ai-flow-exporter.d.ts.map +0 -1
  554. package/dist/src/generation/ai-flow-exporter.js +0 -260
  555. package/dist/src/generation/index.d.ts +0 -9
  556. package/dist/src/generation/index.d.ts.map +0 -1
  557. package/dist/src/generation/index.js +0 -15
  558. package/dist/src/generation/quality-scorer.d.ts +0 -15
  559. package/dist/src/generation/quality-scorer.d.ts.map +0 -1
  560. package/dist/src/generation/quality-scorer.js +0 -273
  561. /package/dist/dashboard/{dist/assets → assets}/index-D_begBP0.css +0 -0
@@ -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 };
@@ -1 +1 @@
1
- {"version":3,"file":"routeInference.d.ts","sourceRoot":"","sources":["../../../src/inference/routeInference.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAOH,eAAO,MAAM,YAAY,uEAAwE,CAAC;AAClG,MAAM,MAAM,UAAU,GAAG,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC;AAErD,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,UAAU,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,0EAA0E;IAC1E,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,oCAAoC;IACpC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC;CACjC;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAmGD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,EAAE,CAoJrE;AAkXD;;GAEG;AACH,wBAAgB,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,oBAAoB,CAgBxE;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,oBAAoB,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAY5F"}
1
+ {"version":3,"file":"routeInference.d.ts","sourceRoot":"","sources":["../../../src/inference/routeInference.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAOH,eAAO,MAAM,YAAY,uEAAwE,CAAC;AAClG,MAAM,MAAM,UAAU,GAAG,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC;AAErD,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,UAAU,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,0EAA0E;IAC1E,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,oCAAoC;IACpC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC;CACjC;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAqFD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,EAAE,CAkIrE;AAiWD;;GAEG;AACH,wBAAgB,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,oBAAoB,CAgBxE;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,oBAAoB,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAY5F"}
@@ -80,18 +80,7 @@ const JSDOC_ROUTE_PATTERN = /@route\s+\{(GET|POST|PUT|PATCH|DELETE|HEAD|OPTIONS)
80
80
  * Used to gate the URL+method object-form scan so we only activate it in
81
81
  * files that actually make HTTP calls (avoids scanning every JS file).
82
82
  */
83
- const HTTP_CLIENT_SIGNAL = /\$http|\bfetch\s*\(|\baxios\b|\bsuperagent\b/;
84
- /**
85
- * Matches client-side HTTP method calls: requests.get('/path'), api.post('/path'), etc.
86
- * Group 1 = HTTP method, Group 2 = path literal starting with /
87
- * Also handles: superagent.get(`${base}/path`) → captures the static suffix
88
- */
89
- const HTTP_CLIENT_METHOD_CALL = /\b\w+\s*\.\s*(get|post|put|patch|delete|del|head|options)\s*\(\s*(?:[^'"`\n]*?\+\s*)?['"`](\/[^'"`?\n]+)/i;
90
- /**
91
- * Signals that this JS/TS file is a client-side HTTP service layer.
92
- * Expands on HTTP_CLIENT_SIGNAL to include superagent and common wrapper patterns.
93
- */
94
- const HTTP_SERVICE_SIGNAL = /\bsuperagent\b|\brequests\s*\.\s*(?:get|post|put|delete|del)\b|\bapi\s*\.\s*(?:get|post|put|delete)\b/;
83
+ const HTTP_CLIENT_SIGNAL = /\$http|\bfetch\s*\(|\baxios\b/;
95
84
  /**
96
85
  * Matches a `url:` property that ends with a literal path segment starting
97
86
  * with `/`. Handles both bare and concatenated forms:
@@ -173,8 +162,6 @@ function inferRoutesFromFile(filePath) {
173
162
  // We only enable the object-form method+url scanner for such files to
174
163
  // avoid false positives in ordinary JS/TS source.
175
164
  const usesHttpClient = HTTP_CLIENT_SIGNAL.test(content);
176
- // Pre-check: does this file use a client-side HTTP service wrapper (requests.*, api.*, etc.)?
177
- const usesHttpServiceWrapper = HTTP_SERVICE_SIGNAL.test(content);
178
165
  for (let lineIdx = 0; lineIdx < lines.length; lineIdx++) {
179
166
  const line = lines[lineIdx];
180
167
  // 1a. router.method('/path', ...) — all on one line
@@ -252,21 +239,6 @@ function inferRoutesFromFile(filePath) {
252
239
  }
253
240
  }
254
241
  }
255
- // 6. Client-side HTTP method calls: requests.get('/path'), api.post('/path')
256
- // Only activate for files that contain HTTP service signals to avoid false positives
257
- if (usesHttpServiceWrapper) {
258
- const clientCallMatch = line.match(HTTP_CLIENT_METHOD_CALL);
259
- if (clientCallMatch) {
260
- let httpMethod = clientCallMatch[1].toLowerCase();
261
- // Normalize 'del' → 'delete'
262
- if (httpMethod === 'del')
263
- httpMethod = 'delete';
264
- if (exports.HTTP_METHODS.includes(httpMethod)) {
265
- const routePath = clientCallMatch[2].split('?')[0]; // strip query string
266
- addRoute(httpMethod, routePath, lineIdx + 1, 'code');
267
- }
268
- }
269
- }
270
242
  }
271
243
  return [...byKey.values()];
272
244
  }
@@ -428,7 +400,7 @@ function findNextMethodNameInJava(javaLines, fromLine) {
428
400
  * @blueprint.route('/articles/<slug>', methods=['PUT'])
429
401
  * @app.route('/tags') ← defaults to GET
430
402
  */
431
- const FLASK_ROUTE = /@(\w+)\.route\s*\(\s*['"]([^'"]+)['"](?:[^\n]*?\bmethods\s*=\s*[\[(]([^\])\n]+)[\])])?/;
403
+ const FLASK_ROUTE = /@(\w+)\.route\s*\(\s*['"]([^'"]+)['"](?:\s*,\s*methods\s*=\s*\[([^\]]+)\])?\s*\)/;
432
404
  /**
433
405
  * Matches FastAPI decorators.
434
406
  * @app.get('/articles')
@@ -447,22 +419,6 @@ const FLASK_BLUEPRINT_CTOR = /(\w+)\s*=\s*Blueprint\s*\(\s*['"][^'"]+['"](?:\s*,
447
419
  * router = APIRouter(prefix="/articles")
448
420
  */
449
421
  const FASTAPI_APIROUTER = /(\w+)\s*=\s*APIRouter\s*\([^)]*?prefix\s*=\s*['"]([^'"]+)['"]/;
450
- /**
451
- * Scan ahead for a Python `def function_name(` line following a decorator.
452
- * Skips additional decorator lines and stops at the first non-decorator,
453
- * non-blank, non-comment line that is not a def.
454
- */
455
- function findPythonHandlerFunction(lines, fromLine) {
456
- for (let j = fromLine + 1; j < Math.min(fromLine + 6, lines.length); j++) {
457
- const m = lines[j].match(/^def\s+(\w+)\s*\(/);
458
- if (m)
459
- return m[1];
460
- // Skip decorator lines
461
- if (!lines[j].trim().startsWith('@') && lines[j].trim().length > 0 && !lines[j].trim().startsWith('#'))
462
- break;
463
- }
464
- return undefined;
465
- }
466
422
  /**
467
423
  * Infer routes from a Python (Flask/FastAPI) source file.
468
424
  */
@@ -476,10 +432,10 @@ function inferRoutesFromPythonFile(filePath) {
476
432
  }
477
433
  const lines = content.split('\n');
478
434
  const byKey = new Map();
479
- const addRoute = (method, routePath, lineNumber, handlerFunction) => {
435
+ const addRoute = (method, routePath, lineNumber) => {
480
436
  const key = `${method}:${routePath}`;
481
437
  if (!byKey.has(key)) {
482
- byKey.set(key, { method, path: routePath, handlerFunction, sourceFile: filePath, lineNumber, discoveredVia: 'code' });
438
+ byKey.set(key, { method, path: routePath, sourceFile: filePath, lineNumber, discoveredVia: 'code' });
483
439
  }
484
440
  };
485
441
  // Pass 1: Detect blueprint/router prefix for the file
@@ -507,19 +463,18 @@ function inferRoutesFromPythonFile(filePath) {
507
463
  const fullPath = localPrefix + (routePath.startsWith('/') ? routePath : '/' + routePath);
508
464
  // Normalize Flask <param> to {param}
509
465
  const normalizedPath = fullPath.replace(/<(?:\w+:)?(\w+)>/g, '{$1}');
510
- const handlerFn = findPythonHandlerFunction(lines, i);
511
466
  if (methodsList) {
512
- // Parse methods=['GET', 'POST'] or methods=('GET', 'POST') → individual routes
467
+ // Parse methods=['GET', 'POST'] → individual routes
513
468
  const methods = methodsList.replace(/['"]/g, '').split(',').map((m) => m.trim().toLowerCase());
514
469
  for (const m of methods) {
515
470
  if (exports.HTTP_METHODS.includes(m)) {
516
- addRoute(m, normalizedPath, i + 1, handlerFn);
471
+ addRoute(m, normalizedPath, i + 1);
517
472
  }
518
473
  }
519
474
  }
520
475
  else {
521
476
  // Default to GET
522
- addRoute('get', normalizedPath, i + 1, handlerFn);
477
+ addRoute('get', normalizedPath, i + 1);
523
478
  }
524
479
  continue;
525
480
  }
@@ -529,9 +484,8 @@ function inferRoutesFromPythonFile(filePath) {
529
484
  const httpMethod = fastapiMatch[2].toLowerCase();
530
485
  const routePath = fastapiMatch[3];
531
486
  const fullPath = localPrefix + (routePath.startsWith('/') ? routePath : '/' + routePath);
532
- const handlerFn = findPythonHandlerFunction(lines, i);
533
487
  // FastAPI uses {param} natively
534
- addRoute(httpMethod, fullPath, i + 1, handlerFn);
488
+ addRoute(httpMethod, fullPath, i + 1);
535
489
  continue;
536
490
  }
537
491
  }
@@ -1 +1 @@
1
- {"version":3,"file":"semanticBuilder.d.ts","sourceRoot":"","sources":["../../../../src/languages/java/semanticBuilder.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAEV,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,OAAO,EACR,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAKL,KAAK,MAAM,EACZ,MAAM,2BAA2B,CAAC;AAOnC,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,GACX;IAAE,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;CAAE,CAmErF;AAID,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,GACrC,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAwC/B;AAID,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,EACtC,GAAG,EAAE,gBAAgB,EAAE,GACtB,IAAI,CA+EN;AAID,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,EAAE,CAyBvE;AAID,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,EAAE,CAa3E;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,EAAE,CAa3D"}
1
+ {"version":3,"file":"semanticBuilder.d.ts","sourceRoot":"","sources":["../../../../src/languages/java/semanticBuilder.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAEV,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,OAAO,EACR,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAKL,KAAK,MAAM,EACZ,MAAM,2BAA2B,CAAC;AAOnC,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,GACX;IAAE,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;CAAE,CAmErF;AAID,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,GACrC,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAqC/B;AAID,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,EACtC,GAAG,EAAE,gBAAgB,EAAE,GACtB,IAAI,CA6DN;AAID,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,EAAE,CAyBvE;AAID,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,EAAE,CAa3E;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,EAAE,CAa3D"}
@@ -97,8 +97,6 @@ function extractJavaFunctions(root, constants) {
97
97
  continue;
98
98
  const annotations = extractAnnotationNames(method);
99
99
  const block = (_e = (_d = method.childForFieldName) === null || _d === void 0 ? void 0 : _d.call(method, 'body')) !== null && _e !== void 0 ? _e : (0, treeSitterUtils_1.firstChildOfType)(method, 'block');
100
- // Extract method parameters
101
- const parameters = extractMethodParameters(method);
102
100
  const bodyHttpCalls = [];
103
101
  const calledFunctions = [];
104
102
  let returnValue;
@@ -111,7 +109,7 @@ function extractJavaFunctions(root, constants) {
111
109
  const cucumberPattern = extractCucumberPattern(annotations, method);
112
110
  graph.set(name, {
113
111
  name,
114
- parameters,
112
+ parameters: [],
115
113
  bodyHttpCalls,
116
114
  calledFunctions,
117
115
  returnValue,
@@ -123,44 +121,14 @@ function extractJavaFunctions(root, constants) {
123
121
  }
124
122
  // ─── HTTP call extraction ─────────────────────────────────────────────────────
125
123
  function extractJavaHttpCalls(block, constants, out) {
126
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s;
124
+ var _a, _b, _c, _d, _e, _f, _g;
127
125
  const methodInvocations = (0, treeSitterUtils_1.findNodes)(block, ['method_invocation']);
128
126
  for (const invoc of methodInvocations) {
129
127
  const methodName = (_e = (_c = (_b = (_a = invoc.childForFieldName) === null || _a === void 0 ? void 0 : _a.call(invoc, 'name')) === null || _b === void 0 ? void 0 : _b.text) !== null && _c !== void 0 ? _c : (_d = firstChildNamed(invoc, 'identifier')) === null || _d === void 0 ? void 0 : _d.text) !== null && _e !== void 0 ? _e : '';
130
128
  const lowerMethod = methodName.toLowerCase();
131
- // MockMvc: perform(get("/path")) — extract the inner HTTP method call
132
- if (lowerMethod === 'perform') {
133
- const argList = (_g = (_f = invoc.childForFieldName) === null || _f === void 0 ? void 0 : _f.call(invoc, 'arguments')) !== null && _g !== void 0 ? _g : (0, treeSitterUtils_1.firstChildOfType)(invoc, 'argument_list');
134
- if (!argList)
135
- continue;
136
- // The argument to perform() is a method invocation like get("/path") or post("/path")
137
- const innerInvocations = (0, treeSitterUtils_1.findNodes)(argList, ['method_invocation']);
138
- for (const innerInvoc of innerInvocations) {
139
- const innerMethodName = (_m = (_k = (_j = (_h = innerInvoc.childForFieldName) === null || _h === void 0 ? void 0 : _h.call(innerInvoc, 'name')) === null || _j === void 0 ? void 0 : _j.text) !== null && _k !== void 0 ? _k : (_l = firstChildNamed(innerInvoc, 'identifier')) === null || _l === void 0 ? void 0 : _l.text) !== null && _m !== void 0 ? _m : '';
140
- const innerLower = innerMethodName.toLowerCase();
141
- if (!HTTP_METHODS.has(innerLower))
142
- continue;
143
- const innerArgList = (_p = (_o = innerInvoc.childForFieldName) === null || _o === void 0 ? void 0 : _o.call(innerInvoc, 'arguments')) !== null && _p !== void 0 ? _p : (0, treeSitterUtils_1.firstChildOfType)(innerInvoc, 'argument_list');
144
- if (!innerArgList)
145
- continue;
146
- const innerStringArg = findFirstStringInArgList(innerArgList, constants);
147
- if (!innerStringArg)
148
- continue;
149
- const normalizedPath = innerStringArg.value.startsWith('/') ? (0, resolvePaths_1.normalizePathToTemplate)(innerStringArg.value) : undefined;
150
- out.push({
151
- method: innerLower.toUpperCase(),
152
- rawPathArg: (_q = innerStringArg.varName) !== null && _q !== void 0 ? _q : innerStringArg.value,
153
- resolvedPath: innerStringArg.value,
154
- normalizedPath,
155
- resolutionType: innerStringArg.isDirect ? 'direct' : 'constant',
156
- confidence: innerStringArg.isDirect ? 'high' : 'medium',
157
- });
158
- }
159
- continue;
160
- }
161
129
  if (!HTTP_METHODS.has(lowerMethod))
162
130
  continue;
163
- const argList = (_s = (_r = invoc.childForFieldName) === null || _r === void 0 ? void 0 : _r.call(invoc, 'arguments')) !== null && _s !== void 0 ? _s : (0, treeSitterUtils_1.firstChildOfType)(invoc, 'argument_list');
131
+ const argList = (_g = (_f = invoc.childForFieldName) === null || _f === void 0 ? void 0 : _f.call(invoc, 'arguments')) !== null && _g !== void 0 ? _g : (0, treeSitterUtils_1.firstChildOfType)(invoc, 'argument_list');
164
132
  if (!argList)
165
133
  continue;
166
134
  // Extract the first string argument (path)
@@ -170,6 +138,15 @@ function extractJavaHttpCalls(block, constants, out) {
170
138
  const { value: path, isDirect, varName } = firstStringArg;
171
139
  // Try to detect the HTTP method from context
172
140
  let httpMethod = lowerMethod.toUpperCase();
141
+ // RestAssured: .when().get("/path") or .given().get("/path")
142
+ // The method name IS the HTTP method in RestAssured style
143
+ if (!HTTP_METHODS.has(lowerMethod))
144
+ continue;
145
+ // MockMvc: perform(get("/path")) — perform wraps a method call
146
+ if (lowerMethod === 'perform') {
147
+ // The arg is another method invocation
148
+ continue; // Handled when we process the inner get/post
149
+ }
173
150
  if (lowerMethod === 'request') {
174
151
  // generic request(method, path) — try to get HTTP method from first arg
175
152
  const stringArgs = findAllStringsInArgList(argList, constants);
@@ -247,40 +224,6 @@ function extractJavaFlowRefs(root) {
247
224
  return refs;
248
225
  }
249
226
  // ─── Helpers ──────────────────────────────────────────────────────────────────
250
- /**
251
- * Extract method parameters with their annotations (e.g. @RequestParam, @PathVariable, @RequestBody).
252
- */
253
- function extractMethodParameters(method) {
254
- var _a;
255
- const params = [];
256
- const formalParams = (0, treeSitterUtils_1.firstChildOfType)(method, 'formal_parameters');
257
- if (!formalParams)
258
- return params;
259
- const paramNodes = (0, treeSitterUtils_1.findNodes)(formalParams, ['formal_parameter', 'spread_parameter']);
260
- for (const paramNode of paramNodes) {
261
- const paramAnnotations = [];
262
- (0, treeSitterUtils_1.walkTree)(paramNode, (n) => {
263
- var _a;
264
- if (n.type === 'annotation' || n.type === 'marker_annotation') {
265
- const nameNode = (0, treeSitterUtils_1.firstChildOfType)(n, 'identifier');
266
- if (nameNode)
267
- paramAnnotations.push('@' + ((_a = nameNode.text) !== null && _a !== void 0 ? _a : ''));
268
- }
269
- });
270
- const nameNode = firstChildNamed(paramNode, 'identifier');
271
- const name = (_a = nameNode === null || nameNode === void 0 ? void 0 : nameNode.text) !== null && _a !== void 0 ? _a : '';
272
- if (!name)
273
- continue;
274
- // Include annotation prefix for annotated params (Spring @RequestParam, @PathVariable, etc.)
275
- if (paramAnnotations.length > 0) {
276
- params.push(`${paramAnnotations.join(' ')} ${name}`);
277
- }
278
- else {
279
- params.push(name);
280
- }
281
- }
282
- return params;
283
- }
284
227
  function extractModifierTexts(node) {
285
228
  const modifiers = [];
286
229
  (0, treeSitterUtils_1.walkTree)(node, (n) => {
@@ -1 +1 @@
1
- {"version":3,"file":"angularDetector.d.ts","sourceRoot":"","sources":["../../../../src/languages/javascript/angularDetector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,wCAAwC;IACxC,aAAa,EAAE,MAAM,CAAC;IACtB,mCAAmC;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,+DAA+D;IAC/D,KAAK,EAAE,aAAa,GAAG,WAAW,CAAC;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,YAAY,GAAG,aAAa,CAAC;IACnC,SAAS,EAAE,aAAa,GAAG,kBAAkB,GAAG,eAAe,GAAG,SAAS,GAAG,UAAU,CAAC;IACzF,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,aAAa,GAAG,YAAY,CAAC;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,2BAA2B,EAAE,OAAO,CAAC;IACrC,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,eAAe,EAAE,CAyC9F;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,gBAAgB,EAAE,CA2EhG;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,YAAY,EAAE,CAyCxF;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,kBAAkB,EAAE,CAgCpG;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,gBAAgB,CAY7F;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAEhE"}
1
+ {"version":3,"file":"angularDetector.d.ts","sourceRoot":"","sources":["../../../../src/languages/javascript/angularDetector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,wCAAwC;IACxC,aAAa,EAAE,MAAM,CAAC;IACtB,mCAAmC;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,+DAA+D;IAC/D,KAAK,EAAE,aAAa,GAAG,WAAW,CAAC;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,YAAY,GAAG,aAAa,CAAC;IACnC,SAAS,EAAE,aAAa,GAAG,kBAAkB,GAAG,eAAe,GAAG,SAAS,GAAG,UAAU,CAAC;IACzF,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,aAAa,GAAG,YAAY,CAAC;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,2BAA2B,EAAE,OAAO,CAAC;IACrC,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,eAAe,EAAE,CAyC9F;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,gBAAgB,EAAE,CAuChG;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,YAAY,EAAE,CAyCxF;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,kBAAkB,EAAE,CAgCpG;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,gBAAgB,CAY7F;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAEhE"}
@@ -68,66 +68,33 @@ function detectAngularInjections(sourceText, filePath) {
68
68
  const injections = [];
69
69
  const lines = sourceText.split('\n');
70
70
  let currentClass = '';
71
- let currentConstHost = '';
72
- let inConstructorParams = false;
73
71
  for (let i = 0; i < lines.length; i++) {
74
72
  const line = lines[i];
75
73
  // Track current class
76
74
  const classMatch = line.match(/class\s+(\w+)/);
77
75
  if (classMatch)
78
76
  currentClass = classMatch[1];
79
- // Track current const/export const assignment as potential host for inject() outside class.
80
- // Only update when the line is NOT itself an inject() call (e.g. skip `const x = inject(Y)`).
81
- if (!currentClass) {
82
- const constHostMatch = line.match(/(?:export\s+)?(?:const|let)\s+(\w+)\s*(?::\s*\S+)?\s*=/);
83
- if (constHostMatch && !line.match(/=\s*inject\s*\(/)) {
84
- currentConstHost = constHostMatch[1];
85
- }
86
- }
87
- // Track constructor parameter block boundaries
88
- if (/\bconstructor\s*\(/.test(line)) {
89
- inConstructorParams = true;
90
- }
91
- if (inConstructorParams && line.includes(')')) {
92
- // Process this line (it's still inside the constructor params), then close
93
- // We'll close after checking for injections below
94
- }
95
77
  // Constructor injection: constructor(private http: HttpClient)
96
- // Only match visibility-modified parameters when inside a constructor(...) block
97
- if (inConstructorParams) {
98
- const ctorParamPattern = /(?:private|protected|public|readonly)\s+(\w+)\s*:\s*(\w+)/g;
99
- let ctorMatch;
100
- while ((ctorMatch = ctorParamPattern.exec(line)) !== null) {
101
- if (currentClass) {
102
- injections.push({
103
- consumerClass: currentClass,
104
- serviceClass: ctorMatch[2],
105
- style: 'constructor',
106
- sourceFile: filePath,
107
- line: i + 1,
108
- });
109
- }
110
- }
111
- }
112
- // Close the constructor param block after processing (handles closing paren on same line)
113
- if (inConstructorParams && line.includes(')')) {
114
- inConstructorParams = false;
78
+ const ctorMatch = line.match(/(?:private|protected|public|readonly)\s+(\w+)\s*:\s*(\w+)/);
79
+ if (ctorMatch && currentClass) {
80
+ injections.push({
81
+ consumerClass: currentClass,
82
+ serviceClass: ctorMatch[2],
83
+ style: 'constructor',
84
+ sourceFile: filePath,
85
+ line: i + 1,
86
+ });
115
87
  }
116
88
  // Functional inject: inject(HttpClient)
117
89
  const injectMatch = line.match(/(\w+)\s*=\s*inject\s*\(\s*(\w+)\s*\)/);
118
- if (injectMatch) {
119
- // Use the enclosing class, or fall back to the enclosing const/export const host
120
- // (e.g. functional guards/interceptors: `export const authGuard: CanActivateFn = ...`)
121
- const hostName = currentClass || currentConstHost;
122
- if (hostName) {
123
- injections.push({
124
- consumerClass: hostName,
125
- serviceClass: injectMatch[2],
126
- style: 'inject-fn',
127
- sourceFile: filePath,
128
- line: i + 1,
129
- });
130
- }
90
+ if (injectMatch && currentClass) {
91
+ injections.push({
92
+ consumerClass: currentClass,
93
+ serviceClass: injectMatch[2],
94
+ style: 'inject-fn',
95
+ sourceFile: filePath,
96
+ line: i + 1,
97
+ });
131
98
  }
132
99
  }
133
100
  return injections;
@@ -66,8 +66,8 @@ function tryExtractAssertion(callNode) {
66
66
  if (!subject)
67
67
  return null;
68
68
  const methodName = (_j = (_h = (_g = callee.property) === null || _g === void 0 ? void 0 : _g.name) === null || _h === void 0 ? void 0 : _h.toLowerCase()) !== null && _j !== void 0 ? _j : '';
69
- const { variable, assertionType: subjectType } = classifyExpectSubject(subject);
70
- const assertionType = classifyAssertionMethod(methodName, subjectType);
69
+ const assertionType = classifyAssertionMethod(methodName);
70
+ const { variable } = classifyExpectSubject(subject);
71
71
  return { assertionType, subjectVariable: variable, line: (_l = (_k = callNode.loc) === null || _k === void 0 ? void 0 : _k.start) === null || _l === void 0 ? void 0 : _l.line };
72
72
  }
73
73
  }
@@ -132,15 +132,13 @@ function classifyExpectSubject(subject) {
132
132
  }
133
133
  return { variable: undefined, assertionType: 'body-field' };
134
134
  }
135
- function classifyAssertionMethod(methodName, subjectType) {
135
+ function classifyAssertionMethod(methodName) {
136
136
  if (methodName === 'tobe' ||
137
137
  methodName === 'toequal' ||
138
138
  methodName === 'tostrictequal' ||
139
139
  methodName === 'tobetruthy' ||
140
140
  methodName === 'tobefalsy') {
141
- // These methods are ambiguous use subject context to decide.
142
- // Only classify as status-code when the subject involves status.
143
- return subjectType === 'status-code' ? 'status-code' : 'body-field';
141
+ return 'status-code'; // Could be either, default to status-code
144
142
  }
145
143
  if (methodName === 'tohaveproperty' || methodName === 'tocontain' || methodName === 'tomatch') {
146
144
  return 'body-field';
@@ -1 +1 @@
1
- {"version":3,"file":"hapiDetector.d.ts","sourceRoot":"","sources":["../../../../src/languages/javascript/hapiDetector.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,UAAU,CAAC,EAAE,cAAc,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,UAAU,GAAG,UAAU,GAAG,KAAK,CAAC;CACvC;AAED,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAkBD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,CA6HlF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,aAAa,EAAE,CAmBtF"}
1
+ {"version":3,"file":"hapiDetector.d.ts","sourceRoot":"","sources":["../../../../src/languages/javascript/hapiDetector.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,UAAU,CAAC,EAAE,cAAc,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,UAAU,GAAG,UAAU,GAAG,KAAK,CAAC;CACvC;AAED,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAkBD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,CAuFlF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,aAAa,EAAE,CAmBtF"}