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
@@ -1,10 +1,13 @@
1
1
  "use strict";
2
2
  /**
3
- * Feature 28 TestGenerationEngine
4
- * Main orchestrator for the test generation pipeline.
3
+ * Test Generation Engine (Feature F-TGE)
5
4
  *
6
- * Pipeline:
7
- * GapList GapClassifier ContextBuilder → TemplateRenderer → FileRouter → FileWriter
5
+ * Entry point: TestGenerationEngine
6
+ * CLI commands: generate-tests, export-ai-flows, score-tests
7
+ *
8
+ * Every generated file starts with: // AUTO-GENERATED by api-test-coverage-analyzer
9
+ * expect(response.status) ALWAYS before expect(response.body)
10
+ * NEVER use toBeTruthy() or toBeDefined() — use specific matchers
8
11
  */
9
12
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
10
13
  if (k2 === undefined) k2 = k;
@@ -39,166 +42,337 @@ var __importStar = (this && this.__importStar) || (function () {
39
42
  return result;
40
43
  };
41
44
  })();
45
+ var __importDefault = (this && this.__importDefault) || function (mod) {
46
+ return (mod && mod.__esModule) ? mod : { "default": mod };
47
+ };
42
48
  Object.defineProperty(exports, "__esModule", { value: true });
43
49
  exports.TestGenerationEngine = void 0;
44
- exports.generateTests = generateTests;
45
- const fs = __importStar(require("fs"));
46
- const path = __importStar(require("path"));
50
+ const fs = __importStar(require("node:fs"));
51
+ const path = __importStar(require("node:path"));
52
+ const fast_glob_1 = __importDefault(require("fast-glob"));
47
53
  const gap_extractor_1 = require("./gap-extractor");
48
54
  const context_builder_1 = require("./context-builder");
49
55
  const template_renderer_1 = require("./template-renderer");
50
56
  const file_router_1 = require("./file-router");
51
- // ─── Priority ordering ────────────────────────────────────────────────────────
52
- const PRIORITY_VALUES = {
53
- P0: 0, P1: 1, P2: 2, P3: 3, P4: 4, P5: 5,
54
- };
55
- function priorityGte(a, b) {
56
- return PRIORITY_VALUES[a] <= PRIORITY_VALUES[b];
57
- }
58
- // ─── Gap → test type mapping (Section 1.1 of spec) ───────────────────────────
59
- const GAP_GENERATOR_MAP = {
60
- endpoint: ['unit', 'integration', 'cypress'],
61
- parameter: ['unit', 'integration'],
62
- error: ['unit', 'integration'],
63
- business: ['unit', 'integration'],
64
- integration: ['integration', 'cypress'],
65
- security: ['security', 'unit'],
66
- auth: ['unit', 'integration', 'security'],
67
- };
68
- // ─── Discovery info loader ────────────────────────────────────────────────────
69
- function loadDiscoveryInfo(reportsDir) {
70
- var _a, _b, _c, _d, _e, _f, _g;
71
- const summaryPath = path.join(reportsDir, 'coverage-summary.json');
72
- if (fs.existsSync(summaryPath)) {
73
- try {
74
- const summary = JSON.parse(fs.readFileSync(summaryPath, 'utf8'));
75
- const di = (_a = summary.discoveryInfo) !== null && _a !== void 0 ? _a : {};
76
- return {
77
- name: (_d = (_b = di.name) !== null && _b !== void 0 ? _b : (_c = summary.project) === null || _c === void 0 ? void 0 : _c.name) !== null && _d !== void 0 ? _d : 'my-api',
78
- language: (_e = di.language) !== null && _e !== void 0 ? _e : 'typescript',
79
- framework: (_f = di.framework) !== null && _f !== void 0 ? _f : 'express',
80
- testFramework: (_g = di.testFramework) !== null && _g !== void 0 ? _g : 'jest',
81
- baseUrl: 'http://localhost:3000',
82
- projectRoot: process.cwd(),
83
- appImportPath: di.appImportPath,
84
- };
85
- }
86
- catch {
87
- // Fall through to defaults
88
- }
89
- }
90
- return {
91
- name: 'my-api',
92
- language: 'typescript',
93
- framework: 'express',
94
- testFramework: 'jest',
95
- baseUrl: 'http://localhost:3000',
96
- projectRoot: process.cwd(),
97
- };
98
- }
99
- // ─── Engine ───────────────────────────────────────────────────────────────────
57
+ // ─── Test Generation Engine ──────────────────────────────────────────────────
100
58
  class TestGenerationEngine {
101
- constructor(opts) {
102
- this.opts = opts;
103
- this.discovery = loadDiscoveryInfo(opts.reportsDir);
104
- // Override detection with CLI options
105
- if (opts.language)
106
- this.discovery.language = opts.language;
107
- if (opts.framework)
108
- this.discovery.framework = opts.framework;
59
+ constructor(projectRoot, reportsDir = 'reports') {
60
+ this.projectRoot = path.resolve(projectRoot);
61
+ this.reportsDir = path.resolve(this.projectRoot, reportsDir);
109
62
  }
110
- async run() {
111
- var _a, _b;
112
- const result = {
113
- files: [],
114
- dryRun: (_a = this.opts.dryRun) !== null && _a !== void 0 ? _a : false,
115
- totalGaps: 0,
116
- generatedCount: 0,
117
- skippedCount: 0,
118
- errors: [],
119
- };
120
- // 1. Extract gaps from reports
121
- let gaps = (0, gap_extractor_1.extractGapsFromReports)(this.opts.reportsDir);
122
- // 2. Filter by specific gap ID if requested
123
- if (this.opts.gapId) {
124
- gaps = gaps.filter(g => g.id === this.opts.gapId);
63
+ /**
64
+ * Generate test files for all detected coverage gaps.
65
+ * In dry-run mode, files are not written to disk.
66
+ */
67
+ generateTests(options = {}) {
68
+ var _a;
69
+ const gaps = (0, gap_extractor_1.extractGaps)(this.reportsDir);
70
+ const context = (0, context_builder_1.buildContext)(this.projectRoot, gaps, {
71
+ baseUrl: options.baseUrl,
72
+ authHeader: options.authHeader,
73
+ });
74
+ const outDir = (_a = options.outDir) !== null && _a !== void 0 ? _a : this.projectRoot;
75
+ const generated = [];
76
+ for (const gap of context.gaps) {
77
+ const content = (0, template_renderer_1.renderTemplate)(gap, context);
78
+ const outputPath = (0, file_router_1.routeOutputPath)(gap, context, outDir);
79
+ const templateUsed = (0, template_renderer_1.getTemplateName)(gap, context);
80
+ generated.push({
81
+ outputPath,
82
+ content,
83
+ gapId: gap.id,
84
+ templateUsed,
85
+ });
86
+ if (!options.dryRun) {
87
+ fs.mkdirSync(path.dirname(outputPath), { recursive: true });
88
+ fs.writeFileSync(outputPath, content, 'utf-8');
89
+ }
125
90
  }
126
- // 3. Filter by priority
127
- const minPriority = (_b = this.opts.priority) !== null && _b !== void 0 ? _b : 'P1';
128
- gaps = gaps.filter(g => priorityGte(g.priority, minPriority));
129
- // 4. Filter by type
130
- if (this.opts.types && this.opts.types.length > 0) {
131
- gaps = gaps.filter(g => this.opts.types.includes(g.type));
91
+ // Write manifest
92
+ const manifest = {
93
+ generatedAt: new Date().toISOString(),
94
+ totalFiles: generated.length,
95
+ files: generated.map((f) => ({
96
+ outputPath: f.outputPath,
97
+ gapId: f.gapId,
98
+ templateUsed: f.templateUsed,
99
+ })),
100
+ };
101
+ if (!options.dryRun) {
102
+ fs.mkdirSync(this.reportsDir, { recursive: true });
103
+ fs.writeFileSync(path.join(this.reportsDir, 'generated-tests-manifest.json'), JSON.stringify(manifest, null, 2), 'utf-8');
132
104
  }
133
- // 5. Sort by priority (P0 first)
134
- gaps = (0, file_router_1.sortGapsByPriority)(gaps);
135
- result.totalGaps = gaps.length;
136
- // 6. Generate files for each gap
137
- for (const gap of gaps) {
105
+ return generated;
106
+ }
107
+ /**
108
+ * Score existing test files for quality.
109
+ * Dimensions: statusAssertion, bodyAssertion, errorPath, noGenericMatchers, descriptiveName.
110
+ */
111
+ scoreTests(testsGlob) {
112
+ const testFiles = fast_glob_1.default.sync(testsGlob, { absolute: true })
113
+ .filter((f) => isTestFile(f));
114
+ const reports = [];
115
+ for (const testFile of testFiles) {
116
+ let content;
138
117
  try {
139
- const generated = this.generateForGap(gap);
140
- for (const file of generated) {
141
- result.files.push(file);
142
- if (!this.opts.dryRun) {
143
- this.writeFile(file);
144
- }
145
- result.generatedCount++;
146
- }
118
+ content = fs.readFileSync(testFile, 'utf-8');
147
119
  }
148
- catch (err) {
149
- result.errors.push({
150
- gapId: gap.id,
151
- message: err instanceof Error ? err.message : String(err),
152
- });
120
+ catch {
121
+ continue;
153
122
  }
123
+ const report = scoreTestFile(testFile, content);
124
+ reports.push(report);
154
125
  }
155
- return result;
126
+ return reports;
156
127
  }
157
- generateForGap(gap) {
158
- const files = [];
159
- const testTypes = this.getTestTypes(gap);
160
- const language = this.discovery.language;
161
- const convention = 'kebab';
162
- for (const testType of testTypes) {
163
- const outputPath = (0, file_router_1.routeOutputFile)(gap, testType, this.opts.outDir, language, convention);
164
- const ctx = (0, context_builder_1.buildContext)(gap, outputPath, this.discovery);
165
- const content = (0, template_renderer_1.renderTemplate)(ctx, { language, testType });
166
- files.push({
128
+ /**
129
+ * Export AI-ready flows: structured prompts for Copilot / LLM consumption.
130
+ * RULE-AI05: prompt ≤ 800 tokens (~3200 chars)
131
+ */
132
+ exportAiFlows(options = {}) {
133
+ var _a;
134
+ const gaps = (0, gap_extractor_1.extractGaps)(this.reportsDir);
135
+ const context = (0, context_builder_1.buildContext)(this.projectRoot, gaps);
136
+ const flows = [];
137
+ const byType = {};
138
+ for (const gap of gaps) {
139
+ const outputPath = (0, file_router_1.routeOutputPath)(gap, context, this.projectRoot);
140
+ // Build a prompt within token budget (RULE-AI05: ≤ 800 tokens ≈ 3200 chars)
141
+ const prompt = buildCopilotPrompt(gap, context, outputPath);
142
+ let truncatedPrompt = prompt;
143
+ if (truncatedPrompt.length > 3200) {
144
+ const suffix = '\n...';
145
+ const maxBody = 3200 - suffix.length; // 3196 chars for body, 4 for suffix
146
+ const cutoff = truncatedPrompt.lastIndexOf('\n', maxBody);
147
+ truncatedPrompt = truncatedPrompt.substring(0, cutoff > 0 ? cutoff : maxBody) + suffix;
148
+ }
149
+ flows.push({
150
+ id: `flow-${gap.id}`,
167
151
  gapId: gap.id,
168
- filePath: path.resolve(outputPath),
169
- relativePath: outputPath,
170
- content,
171
- testType,
172
- language,
173
- framework: this.discovery.testFramework,
152
+ gapType: gap.type,
153
+ suggestedOutputPath: outputPath, // RULE-AI01
154
+ copilotPrompt: truncatedPrompt, // RULE-AI02, AI03, AI05, AI06
155
+ existingSimilarTests: gap.existingSimilarTests, // RULE-AI04
156
+ estimatedComplexity: estimateComplexity(gap),
157
+ riskScore: gap.riskScore,
174
158
  });
159
+ byType[gap.type] = ((_a = byType[gap.type]) !== null && _a !== void 0 ? _a : 0) + 1;
175
160
  }
176
- return files;
161
+ const manifest = {
162
+ generatedAt: new Date().toISOString(),
163
+ totalFlows: flows.length,
164
+ byType: byType,
165
+ flows,
166
+ };
167
+ // Write JSON
168
+ fs.mkdirSync(this.reportsDir, { recursive: true });
169
+ fs.writeFileSync(path.join(this.reportsDir, 'ai-ready-flows.json'), JSON.stringify(manifest, null, 2), 'utf-8');
170
+ // Write markdown summary
171
+ const md = renderAiFlowsMarkdown(manifest);
172
+ fs.writeFileSync(path.join(this.reportsDir, 'ai-ready-flows.md'), md, 'utf-8');
173
+ return manifest;
177
174
  }
178
- getTestTypes(gap) {
179
- var _a;
180
- let types = (_a = GAP_GENERATOR_MAP[gap.type]) !== null && _a !== void 0 ? _a : ['unit'];
181
- // Apply exclusion flags
182
- if (this.opts.noSecurity) {
183
- types = types.filter(t => t !== 'security');
184
- }
185
- if (this.opts.noCypress) {
186
- types = types.filter(t => t !== 'cypress');
175
+ }
176
+ exports.TestGenerationEngine = TestGenerationEngine;
177
+ // ─── Scoring helpers ─────────────────────────────────────────────────────────
178
+ /** Only score actual test files, not helpers, fixtures, or utility modules. */
179
+ function isTestFile(filePath) {
180
+ const base = path.basename(filePath);
181
+ const isTest = /\.(test|spec)\.(ts|js|tsx|jsx)$/.test(base) ||
182
+ /test\.(ts|js|tsx|jsx)$/.test(base);
183
+ // Exclude fixture directories these contain sample test data, not real tests
184
+ const isFixture = /[/\\]fixtures[/\\]/.test(filePath);
185
+ return isTest && !isFixture;
186
+ }
187
+ /** HTTP client package names whose presence in imports indicates an API test. */
188
+ const HTTP_CLIENT_PACKAGES = [
189
+ 'supertest', 'axios', 'node-fetch', 'got',
190
+ ];
191
+ /** Angular-specific HTTP client identifiers in imports. */
192
+ const HTTP_CLIENT_IDENTIFIERS = [
193
+ 'HttpClient', 'HttpTestingController',
194
+ ];
195
+ /**
196
+ * Detect whether a test file is an API/HTTP integration test (vs a unit/library test).
197
+ * Only checks the file's own import/require statements —
198
+ * NOT inline strings that test code might analyze as content.
199
+ */
200
+ function isApiTest(content) {
201
+ const importSection = extractImportSection(content);
202
+ return HTTP_CLIENT_PACKAGES.some((pkg) => new RegExp(`import\\b.*['"]${pkg}['"]`).test(importSection) ||
203
+ new RegExp(`require\\s*\\(\\s*['"]${pkg}['"]`).test(importSection)) || HTTP_CLIENT_IDENTIFIERS.some((id) => new RegExp(`import\\b.*${id}`).test(importSection));
204
+ }
205
+ /** Extract the import/require section at the top of the file, before any test blocks. */
206
+ function extractImportSection(content) {
207
+ const lines = content.split('\n');
208
+ const importLines = [];
209
+ for (const line of lines) {
210
+ const trimmed = line.trim();
211
+ if (/^(describe|it|test|beforeAll|beforeEach|afterAll|afterEach)\s*\(/.test(trimmed)) {
212
+ break;
187
213
  }
188
- return types;
214
+ importLines.push(line);
189
215
  }
190
- writeFile(file) {
191
- const dir = path.dirname(file.relativePath);
192
- fs.mkdirSync(dir, { recursive: true });
193
- if (fs.existsSync(file.relativePath) && !this.opts.overwrite) {
194
- return;
195
- }
196
- fs.writeFileSync(file.relativePath, file.content, 'utf8');
216
+ return importLines.join('\n');
217
+ }
218
+ /** Test name keywords that indicate negative / error / edge-case testing. */
219
+ const ERROR_PATH_NAME_KEYWORDS = [
220
+ 'fail', 'invalid', 'throw', 'missing', 'empty', '\\bnot\\b', 'negative',
221
+ 'reject', 'undefined', 'null', 'zero', 'without', 'default', 'skip',
222
+ 'ignore', '\\bno\\s', 'none', 'unknown', 'error',
223
+ ];
224
+ /** Content-level patterns that indicate error/edge-case handling. */
225
+ const ERROR_PATH_CONTENT_PATTERNS = [
226
+ /\.catch\b/,
227
+ /expect\([^)]*\.status\)\s*\.toBe\(\s*(4|5)\d{2}\s*\)/,
228
+ /\.expect\(\s*(4|5)\d{2}\s*\)/,
229
+ /describe.*error/i,
230
+ /toThrow/,
231
+ /rejects\.toThrow/,
232
+ /throw new Error/,
233
+ /console\.warn/,
234
+ /expect\([^)]*\)\.toBe\(\s*false\s*\)/,
235
+ /expect\([^)]*\)\.toEqual\(\s*\[\s*\]\s*\)/,
236
+ /expect\([^)]*\)\.toBe\(\s*0\s*\)/,
237
+ /expect\([^)]*\)\.toBeNull/,
238
+ /expect\([^)]*\)\.toBeUndefined/,
239
+ ];
240
+ /** Specific matcher patterns (as opposed to generic toBeTruthy/toBeDefined). */
241
+ const SPECIFIC_MATCHER_PATTERNS = [
242
+ /\.toBe\(/, /\.toEqual\(/, /\.toContain\(/, /\.toHaveLength\(/,
243
+ /\.toMatch\(/, /\.toThrow/, /\.toBeGreaterThan/, /\.toBeLessThan/,
244
+ /\.toHaveProperty\(/, /\.toHaveBeenCalled/, /\.toBeNull\(/,
245
+ /\.toBeUndefined\(/, /\.toBeInstanceOf\(/, /\.toStrictEqual\(/,
246
+ /\.toMatchObject\(/,
247
+ ];
248
+ function scoreTestFile(filePath, content) {
249
+ const apiTest = isApiTest(content);
250
+ // Status and body assertions only apply to API tests.
251
+ // For unit/library tests, these are automatically satisfied.
252
+ const hasStatusAssertion = !apiTest ||
253
+ /expect\([^)]*\.status\b/.test(content) ||
254
+ /expect\([^)]*statusCode\b/.test(content) ||
255
+ /\.expect\(\s*\d{3}\s*\)/.test(content);
256
+ const hasBodyAssertion = !apiTest ||
257
+ /expect\([^)]*\.body\b/.test(content) ||
258
+ /expect\([^)]*\.data\b/.test(content) ||
259
+ /expect\([^)]*\.text\b/.test(content);
260
+ const hasErrorPath = ERROR_PATH_CONTENT_PATTERNS.some((p) => p.test(content)) ||
261
+ ERROR_PATH_NAME_KEYWORDS.some((kw) => new RegExp(`(it|test)\\s*\\(.*${kw}`, 'i').test(content));
262
+ // For unit/library tests, toBeDefined()/toBeTruthy() are acceptable when
263
+ // the test also uses specific matchers (toBe, toEqual, toContain, etc.).
264
+ // Only flag when generic matchers are used without any specific ones.
265
+ const usesGenericMatchers = /toBeTruthy\(\)/.test(content) || /toBeDefined\(\)/.test(content);
266
+ const usesSpecificMatchers = SPECIFIC_MATCHER_PATTERNS.some((p) => p.test(content));
267
+ const hasNoGenericMatchers = !usesGenericMatchers ||
268
+ (!apiTest && usesSpecificMatchers);
269
+ const hasDescriptiveName = (/describe\(\s*['"`][^'"`]{5,}['"`]/.test(content) ||
270
+ /test\(\s*['"`][^'"`]{15,}['"`]/.test(content)) && (/it\(\s*['"`][^'"`]{10,}['"`]/.test(content) ||
271
+ /test\(\s*['"`][^'"`]{15,}['"`]/.test(content));
272
+ const dimensions = {
273
+ hasStatusAssertion,
274
+ hasBodyAssertion,
275
+ hasErrorPath,
276
+ hasNoGenericMatchers,
277
+ hasDescriptiveName,
278
+ };
279
+ const score = Object.values(dimensions).filter(Boolean).length * 20;
280
+ const violations = [];
281
+ if (!hasStatusAssertion)
282
+ violations.push('Missing status code assertion');
283
+ if (!hasBodyAssertion)
284
+ violations.push('Missing body/data assertion');
285
+ if (!hasErrorPath)
286
+ violations.push('Missing error/negative path');
287
+ if (!hasNoGenericMatchers)
288
+ violations.push('Uses toBeTruthy() or toBeDefined() — prefer specific matchers');
289
+ if (!hasDescriptiveName)
290
+ violations.push('Test names not sufficiently descriptive');
291
+ return {
292
+ file: filePath,
293
+ overallScore: score,
294
+ dimensions,
295
+ violations,
296
+ };
297
+ }
298
+ // ─── AI Flow helpers ─────────────────────────────────────────────────────────
299
+ /** RULE-AI02: exact import path; RULE-AI03: ALL missing test cases; RULE-AI06: English only */
300
+ function buildCopilotPrompt(gap, ctx, suggestedOutputPath) {
301
+ // RULE-AI02: derive concrete import path from gap.sourceFile when available
302
+ const importPath = gap.sourceFile
303
+ ? path.relative(path.dirname(suggestedOutputPath), gap.sourceFile).replace(/\.[jt]sx?$/, '')
304
+ : path.relative(path.dirname(suggestedOutputPath), ctx.projectRoot);
305
+ const lines = [
306
+ `Write a ${ctx.testFramework} test file at: ${suggestedOutputPath}`, // RULE-AI01
307
+ `Import from: ${importPath}`, // RULE-AI02
308
+ '',
309
+ `Gap type: ${gap.type}`,
310
+ `Risk score: ${gap.riskScore}/100`,
311
+ ];
312
+ // RULE-AI03: ALL missing test cases
313
+ if (gap.endpoint) {
314
+ lines.push(`Test: ${gap.endpoint.method} ${gap.endpoint.path}`);
315
+ lines.push('Include: success case, validation error, auth required');
316
+ }
317
+ if (gap.parameter) {
318
+ lines.push(`Test parameter: ${gap.parameter.name} (${gap.parameter.in}, required: ${gap.parameter.required})`);
319
+ lines.push('Include: valid value, missing value, invalid type');
320
+ }
321
+ if (gap.businessRule) {
322
+ lines.push(`Test business rule: ${gap.businessRule.description}`);
323
+ lines.push('Include: rule satisfied, rule violated, edge case');
324
+ }
325
+ if (gap.integrationFlow) {
326
+ lines.push(`Test flow: ${gap.integrationFlow.name} — missing step: ${gap.integrationFlow.missingStep}`);
197
327
  }
328
+ // RULE-AI04: reference existingSimilarTests[0] when available
329
+ if (gap.existingSimilarTests.length > 0) {
330
+ lines.push('');
331
+ lines.push(`Reference existing test: ${gap.existingSimilarTests[0]}`);
332
+ }
333
+ lines.push('');
334
+ lines.push('Rules:');
335
+ lines.push('- expect(response.status) ALWAYS before expect(response.body)');
336
+ lines.push('- NEVER use toBeTruthy() or toBeDefined()');
337
+ lines.push('- First line: // AUTO-GENERATED by api-test-coverage-analyzer');
338
+ return lines.join('\n');
198
339
  }
199
- exports.TestGenerationEngine = TestGenerationEngine;
200
- // ─── Public API ───────────────────────────────────────────────────────────────
201
- async function generateTests(opts) {
202
- const engine = new TestGenerationEngine(opts);
203
- return engine.run();
340
+ function estimateComplexity(gap) {
341
+ if (gap.riskScore >= 80)
342
+ return 'high';
343
+ if (gap.riskScore >= 50)
344
+ return 'medium';
345
+ return 'low';
346
+ }
347
+ function renderAiFlowsMarkdown(manifest) {
348
+ const lines = [
349
+ '# AI-Ready Test Generation Flows',
350
+ '',
351
+ `Generated: ${manifest.generatedAt}`,
352
+ `Total flows: ${manifest.totalFlows}`,
353
+ '',
354
+ '## By Type',
355
+ '',
356
+ '| Gap Type | Count |',
357
+ '|----------|-------|',
358
+ ];
359
+ for (const [type, count] of Object.entries(manifest.byType)) {
360
+ lines.push(`| ${type} | ${count} |`);
361
+ }
362
+ lines.push('');
363
+ lines.push('## Flows');
364
+ lines.push('');
365
+ for (const flow of manifest.flows) {
366
+ lines.push(`### ${flow.id}`);
367
+ lines.push('');
368
+ lines.push(`- **Gap:** ${flow.gapType}`);
369
+ lines.push(`- **Risk:** ${flow.riskScore}/100`);
370
+ lines.push(`- **Complexity:** ${flow.estimatedComplexity}`);
371
+ lines.push(`- **Output:** \`${flow.suggestedOutputPath}\``);
372
+ if (flow.existingSimilarTests.length > 0) {
373
+ lines.push(`- **Reference:** ${flow.existingSimilarTests[0]}`);
374
+ }
375
+ lines.push('');
376
+ }
377
+ return lines.join('\n');
204
378
  }
@@ -1,8 +1,7 @@
1
+ import type { GenerationContext, DetectedGap } from './types';
1
2
  /**
2
- * Feature 28 FileRouter
3
- * Determines output file paths for generated test files.
3
+ * Determines the output file path for a generated test based on
4
+ * the language, framework, and gap type.
4
5
  */
5
- import type { DetectedGap, TestType, FileNamingConvention } from './types';
6
- export declare function routeOutputFile(gap: DetectedGap, testType: TestType, outDir: string, language: string, convention?: FileNamingConvention): string;
7
- export declare function sortGapsByPriority(gaps: DetectedGap[]): DetectedGap[];
6
+ export declare function routeOutputPath(gap: DetectedGap, context: GenerationContext, outDir: string): string;
8
7
  //# sourceMappingURL=file-router.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"file-router.d.ts","sourceRoot":"","sources":["../../../src/generation/file-router.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAyC3E,wBAAgB,eAAe,CAC7B,GAAG,EAAE,WAAW,EAChB,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,UAAU,GAAE,oBAA8B,GACzC,MAAM,CAoBR;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,WAAW,EAAE,CAErE"}
1
+ {"version":3,"file":"file-router.d.ts","sourceRoot":"","sources":["../../../src/generation/file-router.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE9D;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,WAAW,EAChB,OAAO,EAAE,iBAAiB,EAC1B,MAAM,EAAE,MAAM,GACb,MAAM,CAiBR"}
@@ -1,8 +1,4 @@
1
1
  "use strict";
2
- /**
3
- * Feature 28 — FileRouter
4
- * Determines output file paths for generated test files.
5
- */
6
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
3
  if (k2 === undefined) k2 = k;
8
4
  var desc = Object.getOwnPropertyDescriptor(m, k);
@@ -37,62 +33,47 @@ var __importStar = (this && this.__importStar) || (function () {
37
33
  };
38
34
  })();
39
35
  Object.defineProperty(exports, "__esModule", { value: true });
40
- exports.routeOutputFile = routeOutputFile;
41
- exports.sortGapsByPriority = sortGapsByPriority;
42
- const path = __importStar(require("path"));
43
- const PRIORITY_ORDER = { P0: 0, P1: 1, P2: 2, P3: 3, P4: 4, P5: 5 };
44
- function toKebab(s) {
45
- return s
46
- .replace(/([a-z])([A-Z])/g, '$1-$2')
47
- .replace(/[^a-zA-Z0-9]+/g, '-')
48
- .replace(/^-+|-+$/g, '')
49
- .toLowerCase();
50
- }
51
- function toCamel(s) {
52
- return toKebab(s)
53
- .split('-')
54
- .map((w, i) => (i === 0 ? w : w.charAt(0).toUpperCase() + w.slice(1)))
55
- .join('');
56
- }
57
- function toSnake(s) {
58
- return toKebab(s).replace(/-/g, '_');
59
- }
60
- function applyNaming(name, convention) {
61
- switch (convention) {
62
- case 'camelCase': return toCamel(name);
63
- case 'snake_case': return toSnake(name);
64
- case 'kebab':
65
- default: return toKebab(name);
36
+ exports.routeOutputPath = routeOutputPath;
37
+ const path = __importStar(require("node:path"));
38
+ /**
39
+ * Determines the output file path for a generated test based on
40
+ * the language, framework, and gap type.
41
+ */
42
+ function routeOutputPath(gap, context, outDir) {
43
+ const { framework, language } = context;
44
+ let baseDir;
45
+ if (framework === 'cypress') {
46
+ baseDir = path.join(outDir, 'cypress', 'e2e', 'generated');
66
47
  }
48
+ else if (language === 'java' || language === 'kotlin') {
49
+ baseDir = path.join(outDir, 'src', 'test', 'generated');
50
+ }
51
+ else {
52
+ baseDir = path.join(outDir, 'tests', 'generated');
53
+ }
54
+ const ext = getFileExtension(language);
55
+ const filename = buildFilename(gap, language);
56
+ return path.join(baseDir, filename + ext);
67
57
  }
68
- function pathToFileName(method, apiPath, convention) {
69
- const parts = apiPath
70
- .split('/')
71
- .filter(Boolean)
72
- .map(p => p.replace(/[{}]/g, '').replace(/[^a-zA-Z0-9]/g, '-'));
73
- const base = [...parts, method.toLowerCase()].join('-');
74
- return applyNaming(base, convention);
75
- }
76
- function routeOutputFile(gap, testType, outDir, language, convention = 'kebab') {
77
- const method = gap.endpoint.method.toLowerCase();
78
- const apiPath = gap.endpoint.path;
79
- const baseName = pathToFileName(method, apiPath, convention);
80
- switch (testType) {
81
- case 'security':
82
- return path.join(outDir, 'security', `${baseName}.security.test.ts`);
83
- case 'cypress':
84
- return path.join('cypress', 'e2e', 'generated', `${baseName}.cy.js`);
85
- case 'integration':
86
- if (gap.flow) {
87
- const flowName = applyNaming(gap.flow.name, convention);
88
- return path.join(outDir, 'flows', `${flowName}.flow.test.ts`);
89
- }
90
- return path.join(outDir, `${baseName}.integration.test.ts`);
91
- case 'unit':
92
- default:
93
- return path.join(outDir, `${baseName}.test.ts`);
58
+ function getFileExtension(language) {
59
+ switch (language) {
60
+ case 'typescript': return '.test.ts';
61
+ case 'javascript': return '.test.js';
62
+ case 'python': return '_test.py';
63
+ case 'java': return 'Test.java';
64
+ case 'kotlin': return 'Test.kt';
65
+ default: return '.test.ts';
94
66
  }
95
67
  }
96
- function sortGapsByPriority(gaps) {
97
- return [...gaps].sort((a, b) => { var _a, _b; return ((_a = PRIORITY_ORDER[a.priority]) !== null && _a !== void 0 ? _a : 99) - ((_b = PRIORITY_ORDER[b.priority]) !== null && _b !== void 0 ? _b : 99); });
68
+ function buildFilename(gap, language) {
69
+ // Sanitise the gap id to produce a valid filename
70
+ const sanitised = gap.id.replace(/[^a-zA-Z0-9_-]/g, '-').replace(/-+/g, '-');
71
+ // For Java/Kotlin, use PascalCase class names
72
+ if (language === 'java' || language === 'kotlin') {
73
+ return sanitised
74
+ .split('-')
75
+ .map((p) => p.charAt(0).toUpperCase() + p.slice(1))
76
+ .join('');
77
+ }
78
+ return sanitised;
98
79
  }
@@ -1,7 +1,12 @@
1
+ import type { DetectedGap } from './types';
1
2
  /**
2
- * Feature 28 GapExtractor
3
- * Reads coverage-summary.json (or coverage reports) and extracts DetectedGap objects.
3
+ * Builds 5 synthetic sample gaps for onboarding / dry-run purposes.
4
+ * Used when coverage-summary.json has zero gaps or does not exist.
4
5
  */
5
- import type { DetectedGap } from './types';
6
- export declare function extractGapsFromReports(reportsDir: string): DetectedGap[];
6
+ export declare function buildSampleGaps(): DetectedGap[];
7
+ /**
8
+ * Reads reports/coverage-summary.json and extracts uncovered items as DetectedGap[].
9
+ * When there are zero gaps (perfect coverage), returns buildSampleGaps() instead of [].
10
+ */
11
+ export declare function extractGaps(reportsDir: string): DetectedGap[];
7
12
  //# sourceMappingURL=gap-extractor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"gap-extractor.d.ts","sourceRoot":"","sources":["../../../src/generation/gap-extractor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAoC,MAAM,SAAS,CAAC;AA4D7E,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,WAAW,EAAE,CAmLxE"}
1
+ {"version":3,"file":"gap-extractor.d.ts","sourceRoot":"","sources":["../../../src/generation/gap-extractor.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAW,MAAM,SAAS,CAAC;AAcpD;;;GAGG;AACH,wBAAgB,eAAe,IAAI,WAAW,EAAE,CA4C/C;AAmBD;;;GAGG;AACH,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,WAAW,EAAE,CA6D7D"}